diff --git a/.github/ISSUE_TEMPLATE/01-feature_request.yaml b/.github/ISSUE_TEMPLATE/01-feature_request.yaml index 300d7ce6a..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: @@ -14,7 +15,7 @@ body: attributes: label: NetBox version description: What version of NetBox are you currently running? - placeholder: v4.1.6 + placeholder: v4.2.2 validations: required: true - type: dropdown @@ -27,19 +28,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 2b782a6cd..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: @@ -22,24 +23,11 @@ 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 description: What version of NetBox are you currently running? - placeholder: v4.1.6 + placeholder: v4.2.2 validations: required: true - type: dropdown 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: 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/ci.yml b/.github/workflows/ci.yml index c3b4876c3..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/**' @@ -15,6 +19,11 @@ on: permissions: contents: read +# Add concurrency group to control job running +concurrency: + group: ${{ github.event_name }}-${{ github.ref }}-${{ github.actor }} + cancel-in-progress: true + jobs: build: runs-on: ubuntu-latest @@ -23,7 +32,7 @@ jobs: strategy: matrix: python-version: ['3.10', '3.11', '3.12'] - node-version: ['18.x'] + node-version: ['20.x'] services: redis: image: redis 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/.github/workflows/update-translation-strings.yml b/.github/workflows/update-translation-strings.yml index bcd68c887..e78cd4296 100644 --- a/.github/workflows/update-translation-strings.yml +++ b/.github/workflows/update-translation-strings.yml @@ -18,8 +18,17 @@ jobs: NETBOX_CONFIGURATION: netbox.configuration_testing steps: + - name: Create app token + uses: actions/create-github-app-token@v1 + id: app-token + with: + app-id: 1076524 + private-key: ${{ secrets.HOUSEKEEPING_SECRET_KEY }} + - name: Check out repo uses: actions/checkout@v4 + with: + token: ${{ steps.app-token.outputs.token }} - name: Set up Python uses: actions/setup-python@v5 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/base_requirements.txt b/base_requirements.txt index 3e5bcb0db..9cf0fbf8b 100644 --- a/base_requirements.txt +++ b/base_requirements.txt @@ -1,6 +1,6 @@ # The Python web framework on which NetBox is built # https://docs.djangoproject.com/en/stable/releases/ -Django<5.1 +Django<5.2 # Django middleware which permits cross-domain API requests # https://github.com/adamchainz/django-cors-headers/blob/main/CHANGELOG.rst @@ -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 @@ -101,7 +99,7 @@ netaddr nh3 # Fork of PIL (Python Imaging Library) for image processing -# https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst +# https://github.com/python-pillow/Pillow/releases Pillow # PostgreSQL database adapter for Python @@ -134,7 +132,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/contrib/generated_schema.json b/contrib/generated_schema.json index 56ddee50e..639f0df8d 100644 --- a/contrib/generated_schema.json +++ b/contrib/generated_schema.json @@ -329,6 +329,7 @@ "100base-tx", "100base-t1", "1000base-t", + "1000base-lx", "1000base-tx", "2.5gbase-t", "5gbase-t", diff --git a/docs/configuration/miscellaneous.md b/docs/configuration/miscellaneous.md index 124de3037..c14c0ac77 100644 --- a/docs/configuration/miscellaneous.md +++ b/docs/configuration/miscellaneous.md @@ -96,14 +96,6 @@ The maximum size (in bytes) of an incoming HTTP request (i.e. `GET` or `POST` da --- -## DJANGO_ADMIN_ENABLED - -Default: False - -Setting this to True installs the `django.contrib.admin` app and enables the [Django admin UI](https://docs.djangoproject.com/en/5.0/ref/contrib/admin/). This may be necessary to support older plugins which do not integrate with the native NetBox interface. - ---- - ## ENFORCE_GLOBAL_UNIQUE !!! tip "Dynamic Configuration Parameter" @@ -114,6 +106,16 @@ By default, NetBox will prevent the creation of duplicate prefixes and IP addres --- +## EVENTS_PIPELINE + +!!! info "This parameter was introduced in NetBox v4.2." + +Default: `['extras.events.process_event_queue',]` + +NetBox will call dotted paths to the functions listed here for events (create, update, delete) on models as well as when custom EventRules are fired. + +--- + ## FILE_UPLOAD_MAX_MEMORY_SIZE Default: `2621440` (2.5 MB) 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/configuration/system.md b/docs/configuration/system.md index 25c724bc9..af3a6f5e6 100644 --- a/docs/configuration/system.md +++ b/docs/configuration/system.md @@ -89,8 +89,6 @@ addresses (and [`DEBUG`](./development.md#debug) is true). ## ISOLATED_DEPLOYMENT -!!! info "This feature was introduced in NetBox v4.1." - Default: False Set this configuration parameter to True for NetBox deployments which do not have Internet access. This will disable miscellaneous functionality which depends on access to the Internet. diff --git a/docs/development/adding-models.md b/docs/development/adding-models.md index f3aa9cfcc..0bf020662 100644 --- a/docs/development/adding-models.md +++ b/docs/development/adding-models.md @@ -8,7 +8,7 @@ Each model should define, at a minimum: * A `Meta` class specifying a deterministic ordering (if ordered by fields other than the primary ID) * A `__str__()` method returning a user-friendly string representation of the instance -* A `get_absolute_url()` method returning an instance's direct URL (using `reverse()`) +* A `get_absolute_url()` method if necessary; a standard version of the method is defined in the `NetBoxFeatureSet` base class, but you will need to provide your own (returning an instance's direct URL using `reverse()`) if not subclassing that base class ## 2. Define field choices @@ -78,6 +78,8 @@ Create the following for each model: Create a GraphQL object type for the model in `graphql/types.py` by subclassing the appropriate class from `netbox.graphql.types`. +**Note:** GraphQL unit tests may fail citing null values on a non-nullable field if related objects are prefetched. You may need to fix this by setting the type annotation to be `= strawberry_django.field(select_related=["policy"])` or similar. + Also extend the schema class defined in `graphql/schema.py` with the individual object and object list fields per the established convention. ## 14. Add tests diff --git a/docs/development/application-registry.md b/docs/development/application-registry.md index 570563431..fc96bfd76 100644 --- a/docs/development/application-registry.md +++ b/docs/development/application-registry.md @@ -49,6 +49,10 @@ This key lists all models which have been registered in NetBox which are not des This store maintains all registered items for plugins, such as navigation menus, template extensions, etc. +### `request_processors` + +A list of context managers to invoke when processing a request e.g. in middleware or when executing a background job. Request processors can be registered with the `@register_request_processor` decorator. + ### `search` A dictionary mapping each model (identified by its app and label) to its search index class, if one has been registered for it. 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..c74fcf8f6 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,19 @@ 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. - -### 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. - ### 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. +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 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/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 diff --git a/docs/features/notifications.md b/docs/features/notifications.md index a28a17947..0567a6db6 100644 --- a/docs/features/notifications.md +++ b/docs/features/notifications.md @@ -1,7 +1,5 @@ # Notifications -!!! info "This feature was introduced in NetBox v4.1." - NetBox includes a system for generating user notifications, which can be marked as read or deleted by individual users. There are two built-in mechanisms for generating a notification: * A user can subscribe to an object. When that object is modified, a notification is created to inform the user of the change. diff --git a/docs/installation/1-postgresql.md b/docs/installation/1-postgresql.md index 9d30f4514..8ba302909 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 @@ -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. Enter `\l` to check your encoding. + Once complete, enter `\q` to exit the PostgreSQL shell. ## Verify Service Status 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/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 6093b226e..e6d05738f 100644 --- a/docs/installation/upgrading.md +++ b/docs/installation/upgrading.md @@ -20,15 +20,15 @@ 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 -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 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/models/circuits/circuit.md b/docs/models/circuits/circuit.md index 19fd8c882..c75e20322 100644 --- a/docs/models/circuits/circuit.md +++ b/docs/models/circuits/circuit.md @@ -36,6 +36,12 @@ The operational status of the circuit. By default, the following statuses are av !!! tip "Custom circuit statuses" Additional circuit statuses may be defined by setting `Circuit.status` under the [`FIELD_CHOICES`](../../configuration/data-validation.md#field_choices) configuration parameter. +### Distance + +!!! info "This field was introduced in NetBox v4.2." + +The distance between the circuit's two endpoints, including a unit designation (e.g. 100 meters or 25 feet). + ### Description A brief description of the circuit. diff --git a/docs/models/circuits/circuitgroup.md b/docs/models/circuits/circuitgroup.md index faa9dbc14..6d1503509 100644 --- a/docs/models/circuits/circuitgroup.md +++ b/docs/models/circuits/circuitgroup.md @@ -1,7 +1,5 @@ # Circuit Groups -!!! info "This feature was introduced in NetBox v4.1." - [Circuits](./circuit.md) can be arranged into administrative groups for organization. The assignment of a circuit to a group is optional. ## Fields diff --git a/docs/models/circuits/circuitgroupassignment.md b/docs/models/circuits/circuitgroupassignment.md index 2aaa375af..c73ba09be 100644 --- a/docs/models/circuits/circuitgroupassignment.md +++ b/docs/models/circuits/circuitgroupassignment.md @@ -8,9 +8,9 @@ Circuits can be assigned to [circuit groups](./circuitgroup.md) for correlation The [circuit group](./circuitgroup.md) being assigned. -### Circuit +### Member -The [circuit](./circuit.md) that is being assigned to the group. +The [circuit](./circuit.md) or [virtual circuit](./virtualcircuit.md) assigned to the group. ### Priority diff --git a/docs/models/circuits/circuittermination.md b/docs/models/circuits/circuittermination.md index c6aa966d0..4b1a16ded 100644 --- a/docs/models/circuits/circuittermination.md +++ b/docs/models/circuits/circuittermination.md @@ -21,13 +21,11 @@ Designates the termination as forming either the A or Z end of the circuit. If selected, the circuit termination will be considered "connected" even if no cable has been connected to it in NetBox. -### Site +### Termination -The [site](../dcim/site.md) with which this circuit termination is associated. Once created, a cable can be connected between the circuit termination and a device interface (or similar component). +!!! info "This field replaced the `site` and `provider_network` fields in NetBox v4.2." -### Provider Network - -Circuits which do not connect to a site modeled by NetBox can instead be terminated to a [provider network](./providernetwork.md) representing an unknown network operated by a [provider](./provider.md). +The [region](../dcim/region.md), [site group](../dcim/sitegroup.md), [site](../dcim/site.md), [location](../dcim/location.md) or [provider network](./providernetwork.md) with which this circuit termination is associated. Once created, a cable can be connected between the circuit termination and a device interface (or similar component). ### Port Speed diff --git a/docs/models/circuits/virtualcircuit.md b/docs/models/circuits/virtualcircuit.md new file mode 100644 index 000000000..17328b87a --- /dev/null +++ b/docs/models/circuits/virtualcircuit.md @@ -0,0 +1,39 @@ +# Virtual Circuits + +!!! info "This feature was introduced in NetBox v4.2." + +A virtual circuit can connect two or more interfaces atop a set of decoupled physical connections. For example, it's very common to form a virtual connection between two virtual interfaces, each of which is bound to a physical interface on its respective device and physically connected to a [provider network](./providernetwork.md) via an independent [physical circuit](./circuit.md). + +## Fields + +### Provider Network + +The [provider network](./providernetwork.md) across which the virtual circuit is formed. + +### Provider Account + +The [provider account](./provideraccount.md) with which the virtual circuit is associated (if any). + +### Circuit ID + +The unique identifier assigned to the virtual circuit by its [provider](./provider.md). + +### Type + +The assigned [virtual circuit type](./virtualcircuittype.md). + +### Status + +The operational status of the virtual circuit. By default, the following statuses are available: + +| Name | +|----------------| +| Planned | +| Provisioning | +| Active | +| Offline | +| Deprovisioning | +| Decommissioned | + +!!! tip "Custom circuit statuses" + Additional circuit statuses may be defined by setting `Circuit.status` under the [`FIELD_CHOICES`](../../configuration/data-validation.md#field_choices) configuration parameter. diff --git a/docs/models/circuits/virtualcircuittermination.md b/docs/models/circuits/virtualcircuittermination.md new file mode 100644 index 000000000..a7833e13c --- /dev/null +++ b/docs/models/circuits/virtualcircuittermination.md @@ -0,0 +1,23 @@ +# Virtual Circuit Terminations + +!!! info "This feature was introduced in NetBox v4.2." + +This model represents the connection of a virtual [interface](../dcim/interface.md) to a [virtual circuit](./virtualcircuit.md). + +## Fields + +### Virtual Circuit + +The [virtual circuit](./virtualcircuit.md) to which the interface is connected. + +### Interface + +The [interface](../dcim/interface.md) connected to the virtual circuit. + +### Role + +The functional role of the termination. This depends on the virtual circuit's topology, which is typically either peer-to-peer or hub-and-spoke (multipoint). Valid choices include: + +* Peer +* Hub +* Spoke diff --git a/docs/models/circuits/virtualcircuittype.md b/docs/models/circuits/virtualcircuittype.md new file mode 100644 index 000000000..69cb0c027 --- /dev/null +++ b/docs/models/circuits/virtualcircuittype.md @@ -0,0 +1,13 @@ +# Virtual Circuit Types + +Like physical [circuits](./circuit.md), [virtual circuits](./virtualcircuit.md) are classified by functional type. These types are completely customizable, and can help categorize circuits by function or technology. + +## Fields + +### Name + +A unique human-friendly name. + +### Slug + +A unique URL-friendly identifier. (This value can be used for filtering.) diff --git a/docs/models/dcim/interface.md b/docs/models/dcim/interface.md index 3667dabd5..b7115050f 100644 --- a/docs/models/dcim/interface.md +++ b/docs/models/dcim/interface.md @@ -45,9 +45,12 @@ The operation duplex (full, half, or auto). The [virtual routing and forwarding](../ipam/vrf.md) instance to which this interface is assigned. -### MAC Address +### Primary MAC Address -The 48-bit MAC address (for Ethernet interfaces). +The [MAC address](./macaddress.md) assigned to this interface which is designated as its primary. + +!!! note "Changed in NetBox v4.2" + The MAC address of an interface (formerly a concrete database field) is available as a property, `mac_address`, which reflects the value of the primary linked [MAC address](./macaddress.md) object. ### WWN @@ -109,6 +112,7 @@ For switched Ethernet interfaces, this identifies the 802.1Q encapsulation strat * **Access:** All traffic is assigned to a single VLAN, with no tagging. * **Tagged:** One untagged "native" VLAN is allowed, as well as any number of tagged VLANs. * **Tagged (all):** Implies that all VLANs are carried by the interface. One untagged VLAN may be designated. +* **Q-in-Q:** Q-in-Q (IEEE 802.1ad) encapsulation is performed using the assigned SVLAN. This field must be left blank for routed interfaces which do employ 802.1Q encapsulation. @@ -120,6 +124,12 @@ The "native" (untagged) VLAN for the interface. Valid only when one of the above The tagged VLANs which are configured to be carried by this interface. Valid only for the "tagged" 802.1Q mode above. +### Q-in-Q SVLAN + +!!! info "This field was introduced in NetBox v4.2." + +The assigned service VLAN (for Q-in-Q/802.1ad interfaces). + ### Wireless Role Indicates the configured role for wireless interfaces (access point or station). @@ -142,3 +152,9 @@ The configured channel width of a wireless interface, in MHz. This is typically ### Wireless LANs The [wireless LANs](../wireless/wirelesslan.md) for which this interface carries traffic. (Valid for wireless interfaces only.) + +### VLAN Translation Policy + +!!! info "This field was introduced in NetBox v4.2." + +The [VLAN translation policy](../ipam/vlantranslationpolicy.md) that applies to this interface (optional). diff --git a/docs/models/dcim/inventoryitem.md b/docs/models/dcim/inventoryitem.md index b9029f75c..2d648341b 100644 --- a/docs/models/dcim/inventoryitem.md +++ b/docs/models/dcim/inventoryitem.md @@ -25,6 +25,12 @@ The inventory item's name. If the inventory item is assigned to a parent item, i An alternative physical label identifying the inventory item. +### Status + +!!! info "This field was introduced in NetBox v4.2." + +The inventory item's operational status. + ### Role The functional [role](./inventoryitemrole.md) assigned to this inventory item. diff --git a/docs/models/dcim/macaddress.md b/docs/models/dcim/macaddress.md new file mode 100644 index 000000000..5b1dd93be --- /dev/null +++ b/docs/models/dcim/macaddress.md @@ -0,0 +1,13 @@ +# MAC Addresses + +!!! info "This feature was introduced in NetBox v4.2." + +A MAC address object in NetBox comprises a single Ethernet link layer address, and represents a MAC address as reported by or assigned to a network interface. MAC addresses can be assigned to [device](../dcim/device.md) and [virtual machine](../virtualization/virtualmachine.md) interfaces. A MAC address can be specified as the primary MAC address for a given device or VM interface. + +Most interfaces have only a single MAC address, hard-coded at the factory. However, on some devices (particularly virtual interfaces) it is possible to assign additional MAC addresses or change existing ones. For this reason NetBox allows multiple MACAddress objects to be assigned to a single interface. + +## Fields + +### MAC Address + +The 48-bit MAC address, in colon-hexadecimal notation (e.g. `aa:bb:cc:11:22:33`). diff --git a/docs/models/dcim/modulebay.md b/docs/models/dcim/modulebay.md index 1bff799c2..494012a7b 100644 --- a/docs/models/dcim/modulebay.md +++ b/docs/models/dcim/modulebay.md @@ -16,8 +16,6 @@ The device to which this module bay belongs. ### Module -!!! info "This feature was introduced in NetBox v4.1." - The module to which this bay belongs (optional). ### Name diff --git a/docs/models/dcim/moduletype.md b/docs/models/dcim/moduletype.md index 225873d61..7077e16c2 100644 --- a/docs/models/dcim/moduletype.md +++ b/docs/models/dcim/moduletype.md @@ -42,6 +42,4 @@ The numeric weight of the module, including a unit designation (e.g. 3 kilograms ### Airflow -!!! info "The `airflow` field was introduced in NetBox v4.1." - The direction in which air circulates through the device chassis for cooling. diff --git a/docs/models/dcim/poweroutlet.md b/docs/models/dcim/poweroutlet.md index 5c8bd6ff0..a99f60b23 100644 --- a/docs/models/dcim/poweroutlet.md +++ b/docs/models/dcim/poweroutlet.md @@ -29,6 +29,12 @@ An alternative physical label identifying the power outlet. The type of power outlet. +### Color + +!!! info "This field was introduced in NetBox v4.2." + +The power outlet's color (optional). + ### Power Port When modeling a device which redistributes power from an upstream supply, such as a power distribution unit (PDU), each power outlet should be mapped to the respective [power port](./powerport.md) on the device which supplies power. For example, a 24-outlet PDU may two power ports, each distributing power to 12 of its outlets. diff --git a/docs/models/dcim/racktype.md b/docs/models/dcim/racktype.md index eeb90bd29..b5f2d99e7 100644 --- a/docs/models/dcim/racktype.md +++ b/docs/models/dcim/racktype.md @@ -1,7 +1,5 @@ # Rack Types -!!! info "This feature was introduced in NetBox v4.1." - A rack type defines the physical characteristics of a particular model of [rack](./rack.md). ## Fields diff --git a/docs/models/extras/branch.md b/docs/models/extras/branch.md index fd7922b7e..4599fed85 100644 --- a/docs/models/extras/branch.md +++ b/docs/models/extras/branch.md @@ -1,5 +1,8 @@ # Branches +!!! danger "Deprecated Feature" + This feature has been deprecated in NetBox v4.2 and will be removed in a future release. Please consider using the [netbox-branching plugin](https://github.com/netboxlabs/netbox-branching), which provides much more robust functionality. + A branch is a collection of related [staged changes](./stagedchange.md) that have been prepared for merging into the active database. A branch can be merged by executing its `commit()` method. Deleting a branch will delete all its related changes. ## Fields diff --git a/docs/models/extras/customfield.md b/docs/models/extras/customfield.md index 9aab66a36..a5d083492 100644 --- a/docs/models/extras/customfield.md +++ b/docs/models/extras/customfield.md @@ -44,8 +44,6 @@ For object and multiple-object fields only. Designates the type of NetBox object ### Related Object Filter -!!! info "This field was introduced in NetBox v4.1." - For object and multi-object custom fields, a filter may be defined to limit the available objects when populating a field value. This filter maps object attributes to values. For example, `{"status": "active"}` will include only objects with a status of "active." !!! warning diff --git a/docs/models/extras/eventrule.md b/docs/models/extras/eventrule.md index b48e17a1e..9dca04529 100644 --- a/docs/models/extras/eventrule.md +++ b/docs/models/extras/eventrule.md @@ -10,7 +10,7 @@ See the [event rules documentation](../../features/event-rules.md) for more inf A unique human-friendly name. -### Content Types +### Object Types The type(s) of object in NetBox that will trigger the rule. @@ -38,3 +38,15 @@ The event types which will trigger the rule. At least one event type must be sel ### Conditions A set of [prescribed conditions](../../reference/conditions.md) against which the triggering object will be evaluated. If the conditions are defined but not met by the object, no action will be taken. An event rule that does not define any conditions will _always_ trigger. + +### Action Type + +The type of action to take when the rule triggers. This must be one of the following choices: + +* Webhook +* Custom script +* Notification + +### Action Data + +An optional dictionary of JSON data to pass when executing the rule. This can be useful to include additional context data, e.g. when transmitting a webhook. diff --git a/docs/models/extras/stagedchange.md b/docs/models/extras/stagedchange.md index feda2fee6..0693a32d3 100644 --- a/docs/models/extras/stagedchange.md +++ b/docs/models/extras/stagedchange.md @@ -1,5 +1,8 @@ # Staged Changes +!!! danger "Deprecated Feature" + This feature has been deprecated in NetBox v4.2 and will be removed in a future release. Please consider using the [netbox-branching plugin](https://github.com/netboxlabs/netbox-branching), which provides much more robust functionality. + A staged change represents the creation of a new object or the modification or deletion of an existing object to be performed at some future point. Each change must be assigned to a [branch](./branch.md). Changes can be applied individually via the `apply()` method, however it is recommended to apply changes in bulk using the parent branch's `commit()` method. diff --git a/docs/models/ipam/prefix.md b/docs/models/ipam/prefix.md index 2fb01daf0..939ca3ea5 100644 --- a/docs/models/ipam/prefix.md +++ b/docs/models/ipam/prefix.md @@ -34,9 +34,11 @@ Designates whether the prefix should be treated as a pool. If selected, the firs If selected, this prefix will report 100% utilization regardless of how many child objects have been defined within it. -### Site +### Scope -The [site](../dcim/site.md) to which this prefix is assigned (optional). +!!! info "This field replaced the `site` field in NetBox v4.2." + +The [region](../dcim/region.md), [site](../dcim/site.md), [site group](../dcim/sitegroup.md) or [location](../dcim/location.md) to which the prefix is assigned (optional). ### VLAN diff --git a/docs/models/ipam/vlan.md b/docs/models/ipam/vlan.md index 2dd5ec2d3..3c90d8cc9 100644 --- a/docs/models/ipam/vlan.md +++ b/docs/models/ipam/vlan.md @@ -26,3 +26,15 @@ The user-defined functional [role](./role.md) assigned to the VLAN. ### VLAN Group or Site The [VLAN group](./vlangroup.md) or [site](../dcim/site.md) to which the VLAN is assigned. + +### Q-in-Q Role + +!!! info "This field was introduced in NetBox v4.2." + +For VLANs which comprise a Q-in-Q/IEEE 802.1ad topology, this field indicates whether the VLAN is treated as a service or customer VLAN. + +### Q-in-Q Service VLAN + +!!! info "This field was introduced in NetBox v4.2." + +The designated parent service VLAN for a Q-in-Q customer VLAN. This may be set only for Q-in-Q custom VLANs. diff --git a/docs/models/ipam/vlangroup.md b/docs/models/ipam/vlangroup.md index 20989452f..67050ab4c 100644 --- a/docs/models/ipam/vlangroup.md +++ b/docs/models/ipam/vlangroup.md @@ -16,8 +16,6 @@ A unique URL-friendly identifier. (This value can be used for filtering.) ### VLAN ID Ranges -!!! info "This field replaced the legacy `min_vid` and `max_vid` fields in NetBox v4.1." - The set of VLAN IDs which are encompassed by the group. By default, this will be the entire range of valid IEEE 802.1Q VLAN IDs (1 to 4094, inclusive). VLANs created within a group must have a VID that falls within one of these ranges. Ranges may not overlap. ### Scope diff --git a/docs/models/ipam/vlantranslationpolicy.md b/docs/models/ipam/vlantranslationpolicy.md new file mode 100644 index 000000000..9e3e8de98 --- /dev/null +++ b/docs/models/ipam/vlantranslationpolicy.md @@ -0,0 +1,28 @@ +# VLAN Translation Policies + +!!! info "This feature was introduced in NetBox v4.2." + +VLAN translation is a feature that consists of VLAN translation policies and [VLAN translation rules](./vlantranslationrule.md). Many rules can belong to a policy, and each rule defines a mapping of a local to remote VLAN ID (VID). A policy can then be assigned to an [Interface](../dcim/interface.md) or [VMInterface](../virtualization/vminterface.md), and all VLAN translation rules associated with that policy will be visible in the interface details. + +There are uniqueness constraints on `(policy, local_vid)` and on `(policy, remote_vid)` in the `VLANTranslationRule` model. Thus, you cannot have multiple rules linked to the same policy that have the same local VID or the same remote VID. A set of policies and rules might look like this: + +Policy 1: +- Rule: 100 -> 200 +- Rule: 101 -> 201 + +Policy 2: +- Rule: 100 -> 300 +- Rule: 101 -> 301 + +However this is not allowed: + +Policy 3: +- Rule: 100 -> 200 +- Rule: 100 -> 300 + + +## Fields + +### Name + +A unique human-friendly name. diff --git a/docs/models/ipam/vlantranslationrule.md b/docs/models/ipam/vlantranslationrule.md new file mode 100644 index 000000000..eb356d0d0 --- /dev/null +++ b/docs/models/ipam/vlantranslationrule.md @@ -0,0 +1,21 @@ +# VLAN Translation Rules + +!!! info "This feature was introduced in NetBox v4.2." + +A VLAN translation rule represents a one-to-one mapping of a local VLAN ID (VID) to a remote VID. Many rules can belong to a single policy. + +See [VLAN translation policies](./vlantranslationpolicy.md) for an overview of the VLAN Translation feature. + +## Fields + +### Policy + +The [VLAN Translation Policy](./vlantranslationpolicy.md) to which this rule belongs. + +### Local VID + +VLAN ID (1-4094) in the local network which is to be translated to a remote VID. + +### Remote VID + +VLAN ID (1-4094) in the remote network to which the local VID will be translated. diff --git a/docs/models/virtualization/cluster.md b/docs/models/virtualization/cluster.md index 50b5dbd1d..b9e6b608f 100644 --- a/docs/models/virtualization/cluster.md +++ b/docs/models/virtualization/cluster.md @@ -23,6 +23,8 @@ The cluster's operational status. !!! tip Additional statuses may be defined by setting `Cluster.status` under the [`FIELD_CHOICES`](../../configuration/data-validation.md#field_choices) configuration parameter. -### Site +### Scope -The [site](../dcim/site.md) with which the cluster is associated. +!!! info "This field replaced the `site` field in NetBox v4.2." + +The [region](../dcim/region.md), [site](../dcim/site.md), [site group](../dcim/sitegroup.md) or [location](../dcim/location.md) with which this cluster is associated. diff --git a/docs/models/virtualization/virtualmachine.md b/docs/models/virtualization/virtualmachine.md index 7ea31111c..a90b2752d 100644 --- a/docs/models/virtualization/virtualmachine.md +++ b/docs/models/virtualization/virtualmachine.md @@ -57,6 +57,4 @@ The amount of disk storage provisioned, in megabytes. ### Serial Number -!!! info "This field was introduced in NetBox v4.1." - Optional serial number assigned to this virtual machine. Unlike devices, uniqueness is not enforced for virtual machine serial numbers. diff --git a/docs/models/virtualization/vminterface.md b/docs/models/virtualization/vminterface.md index d923bdd5d..ba0c68b15 100644 --- a/docs/models/virtualization/vminterface.md +++ b/docs/models/virtualization/vminterface.md @@ -27,9 +27,12 @@ An interface on the same VM with which this interface is bridged. If not selected, this interface will be treated as disabled/inoperative. -### MAC Address +### Primary MAC Address -The 48-bit MAC address (for Ethernet interfaces). +The [MAC address](../dcim/macaddress.md) assigned to this interface which is designated as its primary. + +!!! note "Changed in NetBox v4.2" + The MAC address of an interface (formerly a concrete database field) is available as a property, `mac_address`, which reflects the value of the primary linked [MAC address](../dcim/macaddress.md) object. ### MTU @@ -42,6 +45,7 @@ For switched Ethernet interfaces, this identifies the 802.1Q encapsulation strat * **Access:** All traffic is assigned to a single VLAN, with no tagging. * **Tagged:** One untagged "native" VLAN is allowed, as well as any number of tagged VLANs. * **Tagged (all):** Implies that all VLANs are carried by the interface. One untagged VLAN may be designated. +* **Q-in-Q:** Q-in-Q (IEEE 802.1ad) encapsulation is performed using the assigned SVLAN. This field must be left blank for routed interfaces which do employ 802.1Q encapsulation. @@ -53,6 +57,18 @@ The "native" (untagged) VLAN for the interface. Valid only when one of the above The tagged VLANs which are configured to be carried by this interface. Valid only for the "tagged" 802.1Q mode above. +### Q-in-Q SVLAN + +!!! info "This field was introduced in NetBox v4.2." + +The assigned service VLAN (for Q-in-Q/802.1ad interfaces). + ### VRF The [virtual routing and forwarding](../ipam/vrf.md) instance to which this interface is assigned. + +### VLAN Translation Policy + +!!! info "This field was introduced in NetBox v4.2." + +The [VLAN translation policy](../ipam/vlantranslationpolicy.md) that applies to this interface (optional). diff --git a/docs/models/vpn/ikepolicy.md b/docs/models/vpn/ikepolicy.md index d2da28d16..b78b0fe50 100644 --- a/docs/models/vpn/ikepolicy.md +++ b/docs/models/vpn/ikepolicy.md @@ -1,6 +1,6 @@ # IKE Policies -An [Internet Key Exhcnage (IKE)](https://en.wikipedia.org/wiki/Internet_Key_Exchange) policy defines an IKE version, mode, and set of [proposals](./ikeproposal.md) to be used in IKE negotiation. These policies are referenced by [IPSec profiles](./ipsecprofile.md). +An [Internet Key Exchange (IKE)](https://en.wikipedia.org/wiki/Internet_Key_Exchange) policy defines an IKE version, mode, and set of [proposals](./ikeproposal.md) to be used in IKE negotiation. These policies are referenced by [IPSec profiles](./ipsecprofile.md). ## Fields diff --git a/docs/models/wireless/wirelesslan.md b/docs/models/wireless/wirelesslan.md index 0f50fa75f..2ce673086 100644 --- a/docs/models/wireless/wirelesslan.md +++ b/docs/models/wireless/wirelesslan.md @@ -43,3 +43,9 @@ The security cipher used to apply wireless authentication. Options include: ### Pre-Shared Key The security key configured on each client to grant access to the secured wireless LAN. This applies only to certain authentication types. + +### Scope + +!!! info "This field was introduced in NetBox v4.2." + +The [region](../dcim/region.md), [site](../dcim/site.md), [site group](../dcim/sitegroup.md) or [location](../dcim/location.md) with which this wireless LAN is associated. diff --git a/docs/models/wireless/wirelesslink.md b/docs/models/wireless/wirelesslink.md index 7553902b0..a9fd6b4fc 100644 --- a/docs/models/wireless/wirelesslink.md +++ b/docs/models/wireless/wirelesslink.md @@ -22,8 +22,6 @@ The service set identifier (SSID) for the wireless link (optional). ### Distance -!!! info "This field was introduced in NetBox v4.1." - The distance between the link's two endpoints, including a unit designation (e.g. 100 meters or 25 feet). ### Authentication Type diff --git a/docs/plugins/development/background-jobs.md b/docs/plugins/development/background-jobs.md index 873390a58..9be52c3ca 100644 --- a/docs/plugins/development/background-jobs.md +++ b/docs/plugins/development/background-jobs.md @@ -1,7 +1,5 @@ # Background Jobs -!!! info "This feature was introduced in NetBox v4.1." - NetBox plugins can defer certain operations by enqueuing [background jobs](../../features/background-jobs.md), which are executed asynchronously by background workers. This is helpful for decoupling long-running processes from the user-facing request-response cycle. For example, your plugin might need to fetch data from a remote system. Depending on the amount of data and the responsiveness of the remote server, this could take a few minutes. Deferring this task to a queued job ensures that it can be completed in the background, without interrupting the user. The data it fetches can be made available once the job has completed. @@ -29,6 +27,9 @@ class MyTestJob(JobRunner): You can schedule the background job from within your code (e.g. from a model's `save()` method or a view) by calling `MyTestJob.enqueue()`. This method passes through all arguments to `Job.enqueue()`. However, no `name` argument must be passed, as the background job name will be used instead. +!!! tip + A set of predefined intervals is available at `core.choices.JobIntervalChoices` for convenience. + ### Attributes `JobRunner` attributes are defined under a class named `Meta` within the job. These are optional, but encouraged. @@ -46,26 +47,57 @@ As described above, jobs can be scheduled for immediate execution or at any late #### Example +```python title="models.py" +from django.db import models +from core.choices import JobIntervalChoices +from netbox.models import NetBoxModel +from .jobs import MyTestJob + +class MyModel(NetBoxModel): + foo = models.CharField() + + def save(self, *args, **kwargs): + MyTestJob.enqueue_once(instance=self, interval=JobIntervalChoices.INTERVAL_HOURLY) + return super().save(*args, **kwargs) + + def sync(self): + MyTestJob.enqueue(instance=self) +``` + + +### System Jobs + +!!! info "This feature was introduced in NetBox v4.2." + +Some plugins may implement background jobs that are decoupled from the request/response cycle. Typical use cases would be housekeeping tasks or synchronization jobs. These can be registered as _system jobs_ using the `system_job()` decorator. The job interval must be passed as an integer (in minutes) when registering a system job. System jobs are scheduled automatically when the RQ worker (`manage.py rqworker`) is run. + +#### Example + ```python title="jobs.py" -from netbox.jobs import JobRunner - +from core.choices import JobIntervalChoices +from netbox.jobs import JobRunner, system_job +from .models import MyModel +# Specify a predefined choice or an integer indicating +# the number of minutes between job executions +@system_job(interval=JobIntervalChoices.INTERVAL_HOURLY) class MyHousekeepingJob(JobRunner): class Meta: - name = "Housekeeping" + name = "My Housekeeping Job" def run(self, *args, **kwargs): - # your logic goes here + MyModel.objects.filter(foo='bar').delete() ``` -```python title="__init__.py" -from netbox.plugins import PluginConfig +!!! note + Ensure that any system jobs are imported on initialization. Otherwise, they won't be registered. This can be achieved by extending the PluginConfig's `ready()` method. For example: -class MyPluginConfig(PluginConfig): + ```python def ready(self): + super().ready() + from .jobs import MyHousekeepingJob - MyHousekeepingJob.setup(interval=60) -``` + ``` ## Task queues diff --git a/docs/plugins/development/data-backends.md b/docs/plugins/development/data-backends.md index 8b7226a41..0c6d44d95 100644 --- a/docs/plugins/development/data-backends.md +++ b/docs/plugins/development/data-backends.md @@ -18,6 +18,6 @@ backends = [MyDataBackend] ``` !!! tip - The path to the list of search indexes can be modified by setting `data_backends` in the PluginConfig instance. + The path to the list of data backends can be modified by setting `data_backends` in the PluginConfig instance. ::: netbox.data_backends.DataBackend diff --git a/docs/plugins/development/event-types.md b/docs/plugins/development/event-types.md index 4bcdeea31..65e2bbc5c 100644 --- a/docs/plugins/development/event-types.md +++ b/docs/plugins/development/event-types.md @@ -1,7 +1,5 @@ # Event Types -!!! info "This feature was introduced in NetBox v4.1." - Plugins can register their own custom event types for use with NetBox [event rules](../../models/extras/eventrule.md). This is accomplished by calling the `register()` method on an instance of the `EventType` class. This can be done anywhere within the plugin. An example is provided below. ```python diff --git a/docs/plugins/development/index.md b/docs/plugins/development/index.md index f3f9a3e4f..246816349 100644 --- a/docs/plugins/development/index.md +++ b/docs/plugins/development/index.md @@ -98,28 +98,29 @@ NetBox looks for the `config` variable within a plugin's `__init__.py` to load i ### PluginConfig Attributes -| Name | Description | -|-----------------------|--------------------------------------------------------------------------------------------------------------------------| -| `name` | Raw plugin name; same as the plugin's source directory | -| `verbose_name` | Human-friendly name for the plugin | -| `version` | Current release ([semantic versioning](https://semver.org/) is encouraged) | -| `description` | Brief description of the plugin's purpose | -| `author` | Name of plugin's author | -| `author_email` | Author's public email address | -| `base_url` | Base path to use for plugin URLs (optional). If not specified, the project's `name` will be used. | -| `required_settings` | A list of any configuration parameters that **must** be defined by the user | -| `default_settings` | A dictionary of configuration parameters and their default values | -| `django_apps` | A list of additional Django apps to load alongside the plugin | -| `min_version` | Minimum version of NetBox with which the plugin is compatible | -| `max_version` | Maximum version of NetBox with which the plugin is compatible | -| `middleware` | A list of middleware classes to append after NetBox's build-in middleware | -| `queues` | A list of custom background task queues to create | -| `search_extensions` | The dotted path to the list of search index classes (default: `search.indexes`) | -| `data_backends` | The dotted path to the list of data source backend classes (default: `data_backends.backends`) | -| `template_extensions` | The dotted path to the list of template extension classes (default: `template_content.template_extensions`) | -| `menu_items` | The dotted path to the list of menu items provided by the plugin (default: `navigation.menu_items`) | -| `graphql_schema` | The dotted path to the plugin's GraphQL schema class, if any (default: `graphql.schema`) | -| `user_preferences` | The dotted path to the dictionary mapping of user preferences defined by the plugin (default: `preferences.preferences`) | +| Name | Description | +|-----------------------|------------------------------------------------------------------------------------------------------------------------------------| +| `name` | Raw plugin name; same as the plugin's source directory | +| `verbose_name` | Human-friendly name for the plugin | +| `version` | Current release ([semantic versioning](https://semver.org/) is encouraged) | +| `description` | Brief description of the plugin's purpose | +| `author` | Name of plugin's author | +| `author_email` | Author's public email address | +| `base_url` | Base path to use for plugin URLs (optional). If not specified, the project's `name` will be used. | +| `required_settings` | A list of any configuration parameters that **must** be defined by the user | +| `default_settings` | A dictionary of configuration parameters and their default values | +| `django_apps` | A list of additional Django apps to load alongside the plugin | +| `min_version` | Minimum version of NetBox with which the plugin is compatible | +| `max_version` | Maximum version of NetBox with which the plugin is compatible | +| `middleware` | A list of middleware classes to append after NetBox's build-in middleware | +| `queues` | A list of custom background task queues to create | +| `events_pipeline` | A list of handlers to add to [`EVENTS_PIPELINE`](../../configuration/miscellaneous.md#events_pipeline), identified by dotted paths | +| `search_extensions` | The dotted path to the list of search index classes (default: `search.indexes`) | +| `data_backends` | The dotted path to the list of data source backend classes (default: `data_backends.backends`) | +| `template_extensions` | The dotted path to the list of template extension classes (default: `template_content.template_extensions`) | +| `menu_items` | The dotted path to the list of menu items provided by the plugin (default: `navigation.menu_items`) | +| `graphql_schema` | The dotted path to the plugin's GraphQL schema class, if any (default: `graphql.schema`) | +| `user_preferences` | The dotted path to the dictionary mapping of user preferences defined by the plugin (default: `preferences.preferences`) | All required settings must be configured by the user. If a configuration parameter is listed in both `required_settings` and `default_settings`, the default setting will be ignored. diff --git a/docs/plugins/development/staged-changes.md b/docs/plugins/development/staged-changes.md index 64a1a43e0..a8fd1d232 100644 --- a/docs/plugins/development/staged-changes.md +++ b/docs/plugins/development/staged-changes.md @@ -1,7 +1,7 @@ # Staged Changes -!!! danger "Experimental Feature" - This feature is still under active development and considered experimental in nature. Its use in production is strongly discouraged at this time. +!!! danger "Deprecated Feature" + This feature has been deprecated in NetBox v4.2 and will be removed in a future release. Please consider using the [netbox-branching plugin](https://github.com/netboxlabs/netbox-branching), which provides much more robust functionality. NetBox provides a programmatic API to stage the creation, modification, and deletion of objects without actually committing those changes to the active database. This can be useful for performing a "dry run" of bulk operations, or preparing a set of changes for administrative approval, for example. diff --git a/docs/plugins/development/views.md b/docs/plugins/development/views.md index 1f5f164fd..e3740de59 100644 --- a/docs/plugins/development/views.md +++ b/docs/plugins/development/views.md @@ -185,6 +185,9 @@ class MyView(generic.ObjectView): ) ``` +!!! note "Changed in NetBox v4.2" + The `register_model_view()` function was extended in NetBox v4.2 to support registration of list views by passing `detail=False`. + ::: utilities.views.register_model_view ::: utilities.views.ViewTab @@ -203,8 +206,6 @@ Plugins can inject custom content into certain areas of core NetBox views. This | `right_page()` | Object view | Inject content on the right side of the page | | `full_width_page()` | Object view | Inject content across the entire bottom of the page | -!!! info "The `navbar()` and `alerts()` methods were introduced in NetBox v4.1." - Additionally, a `render()` method is available for convenience. This method accepts the name of a template to render, and any additional context data you want to pass. Its use is optional, however. To control where the custom content is injected, plugin authors can specify an iterable of models by overriding the `models` attribute on the subclass. Extensions which do not specify a set of models will be invoked on every view, where supported. diff --git a/docs/release-notes/index.md b/docs/release-notes/index.md index b1f23ae55..d996224c1 100644 --- a/docs/release-notes/index.md +++ b/docs/release-notes/index.md @@ -10,6 +10,23 @@ Minor releases are published in April, August, and December of each calendar yea This page contains a history of all major and minor releases since NetBox v2.0. For more detail on a specific patch release, please see the release notes page for that specific minor release. +#### [Version 4.2](./version-4.2.md) (January 2025) + +* Assign Multiple MAC Addresses per Interface ([#4867](https://github.com/netbox-community/netbox/issues/4867)) +* Quick Add UI Widget ([#5858](https://github.com/netbox-community/netbox/issues/5858)) +* VLAN Translation ([#7336](https://github.com/netbox-community/netbox/issues/7336)) +* Virtual Circuits ([#13086](https://github.com/netbox-community/netbox/issues/13086)) +* Q-in-Q Encapsulation ([#13428](https://github.com/netbox-community/netbox/issues/13428)) + +#### [Version 4.1](./version-4.1.md) (September 2024) + +* Circuit Groups ([#7025](https://github.com/netbox-community/netbox/issues/7025)) +* VLAN Group ID Ranges ([#9627](https://github.com/netbox-community/netbox/issues/9627)) +* Nested Device Modules ([#10500](https://github.com/netbox-community/netbox/issues/10500)) +* Rack Types ([#12826](https://github.com/netbox-community/netbox/issues/12826)) +* Plugins Catalog Integration ([#14731](https://github.com/netbox-community/netbox/issues/14731)) +* User Notifications ([#15621](https://github.com/netbox-community/netbox/issues/15621)) + #### [Version 4.0](./version-4.0.md) (April 2024) * Complete UI Refresh ([#12128](https://github.com/netbox-community/netbox/issues/12128)) diff --git a/docs/release-notes/version-4.1.md b/docs/release-notes/version-4.1.md index 7b4e18919..9a2f79ece 100644 --- a/docs/release-notes/version-4.1.md +++ b/docs/release-notes/version-4.1.md @@ -1,5 +1,94 @@ # NetBox v4.1 +## v4.1.11 (2025-01-06) + +### Bug Fixes + +* [#17771](https://github.com/netbox-community/netbox/issues/17771) - Fix duplicate entries appearing on VLAN list when filtering by interface assignment +* [#18222](https://github.com/netbox-community/netbox/issues/18222) - Pass event rule action data to webhooks as context data +* [#18263](https://github.com/netbox-community/netbox/issues/18263) - Fix recalculation of cable paths when modifying cable terminations via the REST API +* [#18271](https://github.com/netbox-community/netbox/issues/18271) - Require only encryption _or_ authentication algorithm when creating an IPSec proposal via the REST API +* [#18289](https://github.com/netbox-community/netbox/issues/18289) - Enable ordering modules and module types by created & last updated times + +--- + +## v4.1.10 (2024-12-23) + +### Bug Fixes + +* [#18260](https://github.com/netbox-community/netbox/issues/18260) - Fix object change logging + +--- + +## v4.1.9 (2024-12-17) + +!!! danger "Do Not Use" + This release contains a regression which breaks change logging. Please use release v4.1.10 instead. + +### Enhancements + +* [#17215](https://github.com/netbox-community/netbox/issues/17215) - Change the highlighted color of disabled interfaces in interface lists +* [#18224](https://github.com/netbox-community/netbox/issues/18224) - Apply all registered request processors when running custom scripts + +### Bug Fixes + +* [#16757](https://github.com/netbox-community/netbox/issues/16757) - Fix rendering of IP addresses table when assigning an existing IP address to an interface with global HTMX navigation enabled +* [#17868](https://github.com/netbox-community/netbox/issues/17868) - Fix `ZeroDivisionError` exception under specific circumstances when generating a cable trace +* [#18124](https://github.com/netbox-community/netbox/issues/18124) - Enable referencing cable attributes when querying a `cabletermination_set` via the GraphQL API +* [#18230](https://github.com/netbox-community/netbox/issues/18230) - Fix `AttributeError` exception when attempting to edit an IP address assigned to a virtual machine interface + +--- + +## v4.1.8 (2024-12-12) + +### Enhancements + +* [#17071](https://github.com/netbox-community/netbox/issues/17071) - Enable OOB IP address designation during bulk import +* [#17465](https://github.com/netbox-community/netbox/issues/17465) - Enable designation of rack type during bulk import & bulk edit +* [#17889](https://github.com/netbox-community/netbox/issues/17889) - Enable designating an IP address as out-of-band for a device upon creation +* [#17960](https://github.com/netbox-community/netbox/issues/17960) - Add L2TP, PPTP, Wireguard, and OpenVPN tunnel types +* [#18021](https://github.com/netbox-community/netbox/issues/18021) - Automatically clear cache on restart when `DEBUG` is enabled +* [#18061](https://github.com/netbox-community/netbox/issues/18061) - Omit stack trace from rendered device/VM configuration when an exception is raised +* [#18065](https://github.com/netbox-community/netbox/issues/18065) - Include status in device details when hovering on rack elevation +* [#18211](https://github.com/netbox-community/netbox/issues/18211) - Enable the dynamic registration of context managers for request processing + +### Bug Fixes + +* [#14044](https://github.com/netbox-community/netbox/issues/14044) - Fix unhandled AttributeError exception when bulk renaming objects +* [#17490](https://github.com/netbox-community/netbox/issues/17490) - Fix dynamic inclusion support for config templates +* [#17810](https://github.com/netbox-community/netbox/issues/17810) - Fix validation of racked device fields when modifying via REST API +* [#17820](https://github.com/netbox-community/netbox/issues/17820) - Ensure default custom field values are populated when creating new modules +* [#18044](https://github.com/netbox-community/netbox/issues/18044) - Show plugin-generated alerts within UI views for custom scripts +* [#18150](https://github.com/netbox-community/netbox/issues/18150) - Fix REST API pagination for low `MAX_PAGE_SIZE` values +* [#18183](https://github.com/netbox-community/netbox/issues/18183) - Omit UI navigation bar when printing +* [#18213](https://github.com/netbox-community/netbox/issues/18213) - Fix searching for ASN ranges by name + +--- + +## v4.1.7 (2024-11-21) + +### Enhancements + +* [#15239](https://github.com/netbox-community/netbox/issues/15239) - Enable adding/removing individual VLANs while bulk editing device interfaces +* [#17871](https://github.com/netbox-community/netbox/issues/17871) - Enable the assignment/removal of virtualization cluster via device bulk edit +* [#17934](https://github.com/netbox-community/netbox/issues/17934) - Add 1000Base-LX interface type +* [#18007](https://github.com/netbox-community/netbox/issues/18007) - Hide sensitive parameters under data source view (even for privileged users) + +### Bug Fixes + +* [#17459](https://github.com/netbox-community/netbox/issues/17459) - Correct help text on `name` field of module type component templates +* [#17901](https://github.com/netbox-community/netbox/issues/17901) - Ensure GraphiQL UI resources are served locally +* [#17921](https://github.com/netbox-community/netbox/issues/17921) - Fix scheduling of recurring custom scripts +* [#17923](https://github.com/netbox-community/netbox/issues/17923) - Fix the execution of custom scripts via REST API & management command +* [#17963](https://github.com/netbox-community/netbox/issues/17963) - Fix selection of all listed objects during bulk edit +* [#17969](https://github.com/netbox-community/netbox/issues/17969) - Fix system info export when a config revision exists +* [#17972](https://github.com/netbox-community/netbox/issues/17972) - Force evaluation of `LOGIN_REQUIRED` when requesting static media +* [#17986](https://github.com/netbox-community/netbox/issues/17986) - Correct labels for virtual machine & virtual disk size properties +* [#18037](https://github.com/netbox-community/netbox/issues/18037) - Fix validation of maximum VLAN ID value when defining VLAN groups +* [#18038](https://github.com/netbox-community/netbox/issues/18038) - The `to_grams()` utility function should always return an integer value + +--- + ## v4.1.6 (2024-10-31) ### Bug Fixes diff --git a/docs/release-notes/version-4.2.md b/docs/release-notes/version-4.2.md new file mode 100644 index 000000000..61f043f3d --- /dev/null +++ b/docs/release-notes/version-4.2.md @@ -0,0 +1,157 @@ +# 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 + +* [#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 + +* 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. +* The `site` foreign key field on `ipam.Prefix` has been replaced by the `scope` generic foreign key. +* The `site` foreign key field on `virtualization.Cluster` has been replaced by the `scope` generic foreign key. +* The `circuit` foreign key field on `circuits.CircuitGroupAssignment` has been replaced by the `member` generic foreign key. +* Obsolete nested REST API serializers have been removed. These were deprecated in NetBox v4.1 under [#17143](https://github.com/netbox-community/netbox/issues/17143). + +### New Features + +#### Assign Multiple MAC Addresses per Interface ([#4867](https://github.com/netbox-community/netbox/issues/4867)) + +MAC addresses are now managed as independent objects, rather than attributes on device and VM interfaces. NetBox now supports the assignment of multiple MAC addresses per interface, and allows a primary MAC address to be designated for each. + +#### Quick Add UI Widget ([#5858](https://github.com/netbox-community/netbox/issues/5858)) + +A new UI widget has been introduced to enable conveniently creating new related objects while creating or editing an object. For instance, it is now possible to create and assign a new device role when creating or editing a device from within the device form. + +#### VLAN Translation ([#7336](https://github.com/netbox-community/netbox/issues/7336)) + +User can now define policies which track the translation of VLAN IDs on IEEE 802.1Q-encapsulated interfaces. Translation policies can be reused across multiple interfaces. + +#### Virtual Circuits ([#13086](https://github.com/netbox-community/netbox/issues/13086)) + +New models have been introduced to support the documentation of virtual circuits as an extension to the physical circuit modeling already supported. This enables users to accurately reflect point-to-point or multipoint virtual circuits atop infrastructure comprising physical circuits and cables. + +#### Q-in-Q Encapsulation ([#13428](https://github.com/netbox-community/netbox/issues/13428)) + +NetBox now supports the designation of customer VLANs (CVLANs) and service VLANs (SVLANs) to support IEEE 802.1ad/Q-in-Q encapsulation. Each interface can now have it mode designated "Q-in-Q" and be assigned an SVLAN. + +### Enhancements + +* [#6414](https://github.com/netbox-community/netbox/issues/6414) - Prefixes can now be scoped by region, site group, site, or location +* [#7699](https://github.com/netbox-community/netbox/issues/7699) - Virtualization clusters can now be scoped by region, site group, site, or location +* [#9604](https://github.com/netbox-community/netbox/issues/9604) - The scope of a circuit termination now include a region, site group, site, location, or provider network +* [#10711](https://github.com/netbox-community/netbox/issues/10711) - Wireless LANs can now be scoped by region, site group, site, or location +* [#11279](https://github.com/netbox-community/netbox/issues/11279) - Improved the use of natural ordering for various models throughout the application +* [#12596](https://github.com/netbox-community/netbox/issues/12596) - Extended the virtualization clusters REST API endpoint to report on allocated VM resources +* [#16547](https://github.com/netbox-community/netbox/issues/16547) - Add a geographic distance field for circuits +* [#16783](https://github.com/netbox-community/netbox/issues/16783) - Add an operational status field for inventory items +* [#17195](https://github.com/netbox-community/netbox/issues/17195) - Add a color field for power outlets + +### Plugins + +* [#15093](https://github.com/netbox-community/netbox/issues/15093) - Introduced the `events_pipeline` configuration parameter, which allows plugins to hook into NetBox event processing +* [#16546](https://github.com/netbox-community/netbox/issues/16546) - NetBoxModel now provides a default `get_absolute_url()` method +* [#16971](https://github.com/netbox-community/netbox/issues/16971) - Plugins can now easily register system jobs to perform background tasks +* [#17029](https://github.com/netbox-community/netbox/issues/17029) - Registering a `PluginTemplateExtension` subclass for a single model has been deprecated (replace `model` with `models`) +* [#18023](https://github.com/netbox-community/netbox/issues/18023) - Extend `register_model_view()` to handle list views + +### Other Changes + +* [#16136](https://github.com/netbox-community/netbox/issues/16136) - Removed support for the Django admin UI +* [#17165](https://github.com/netbox-community/netbox/issues/17165) - All obsolete nested REST API serializers have been removed +* [#17472](https://github.com/netbox-community/netbox/issues/17472) - The legacy staged changes API has been deprecated, and will be removed in Netbox v4.3 +* [#17476](https://github.com/netbox-community/netbox/issues/17476) - Upgrade to Django 5.1 +* [#17752](https://github.com/netbox-community/netbox/issues/17752) - Bulk object import URL paths have been renamed from `*_import` to `*_bulk_import` +* [#17761](https://github.com/netbox-community/netbox/issues/17761) - Optional choice fields now store empty values as null (rather than empty strings) in the database +* [#18093](https://github.com/netbox-community/netbox/issues/18093) - Redirects for pre-v4.1 virtual disk UI views have been removed + +### REST API Changes + +* Added the following endpoints: + * `/api/circuits/virtual-circuits/` + * `/api/circuits/virtual-circuit-terminations/` + * `/api/dcim/mac-addresses/` + * `/api/ipam/vlan-translation-policies/` + * `/api/ipam/vlan-translation-rules/` +* circuits.Circuit + * Added the optional `distance` and `distance_unit` fields +* circuits.CircuitGroupAssignment + * Replaced the `circuit` field with `member_type` and `member_id` to support virtual circuit assignment +* circuits.CircuitTermination + * Removed the `site` & `provider_network` fields + * Added the `termination_type` & `termination_id` fields to facilitate termination assignment + * Added the read-only `termination` field +* dcim.Interface + * The `mac_address` field is now read-only + * Added the `primary_mac_address` relation to dcim.MACAddress + * Added the read-only `mac_addresses` list + * Added the `qinq_svlan` relation to ipam.VLAN + * Added the `vlan_translation_policy` relation to ipam.VLANTranslationPolicy + * Added `mode` choice "Q-in-Q" +* dcim.InventoryItem + * Added the optional `status` choice field +* dcim.Location + * Added the read-only `prefix_count` field +* dcim.PowerOutlet + * Added the optional `color` field +* dcim.Region + * Added the read-only `prefix_count` field +* dcim.SiteGroup + * Added the read-only `prefix_count` field +* ipam.Prefix + * Removed the `site` field + * Added the `scope_type` & `scope_id` fields to facilitate scope assignment + * Added the read-only `scope` field +* ipam.VLAN + * Added the optional `qinq_role` selection field + * Added the `qinq_svlan` recursive relation +* virtualization.Cluster + * Removed the `site` field + * Added the `scope_type` & `scope_id` fields to facilitate scope assignment + * Added the read-only `scope` field +* virtualization.Cluster + * Added the read-only fields `allocated_vcpus`, `allocated_memory`, and `allocated_disk` +* virtualization.VMInterface + * The `mac_address` field is now read-only + * Added the `primary_mac_address` relation to dcim.MACAddress + * Added the read-only `mac_addresses` list + * Added the `qinq_svlan` relation to ipam.VLAN + * Added the `vlan_translation_policy` relation to ipam.VLANTranslationPolicy + * Added `mode` choice "Q-in-Q" +* wireless.WirelessLAN + * Added the `scope_type` & `scope_id` fields to support scope assignment + * Added the read-only `scope` field diff --git a/mkdocs.yml b/mkdocs.yml index 00e03a4ce..db6798eae 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -174,6 +174,9 @@ nav: - Provider: 'models/circuits/provider.md' - Provider Account: 'models/circuits/provideraccount.md' - 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' @@ -197,6 +200,7 @@ nav: - InventoryItemRole: 'models/dcim/inventoryitemrole.md' - InventoryItemTemplate: 'models/dcim/inventoryitemtemplate.md' - Location: 'models/dcim/location.md' + - MACAddress: 'models/dcim/macaddress.md' - Manufacturer: 'models/dcim/manufacturer.md' - Module: 'models/dcim/module.md' - ModuleBay: 'models/dcim/modulebay.md' @@ -255,6 +259,8 @@ nav: - ServiceTemplate: 'models/ipam/servicetemplate.md' - VLAN: 'models/ipam/vlan.md' - VLANGroup: 'models/ipam/vlangroup.md' + - VLANTranslationPolicy: 'models/ipam/vlantranslationpolicy.md' + - VLANTranslationRule: 'models/ipam/vlantranslationrule.md' - VRF: 'models/ipam/vrf.md' - Tenancy: - Contact: 'models/tenancy/contact.md' @@ -306,6 +312,7 @@ nav: - git Cheat Sheet: 'development/git-cheat-sheet.md' - Release Notes: - Summary: 'release-notes/index.md' + - Version 4.2: 'release-notes/version-4.2.md' - Version 4.1: 'release-notes/version-4.1.md' - Version 4.0: 'release-notes/version-4.0.md' - Version 3.7: 'release-notes/version-3.7.md' diff --git a/netbox/circuits/api/nested_serializers.py b/netbox/circuits/api/nested_serializers.py deleted file mode 100644 index 487749872..000000000 --- a/netbox/circuits/api/nested_serializers.py +++ /dev/null @@ -1,79 +0,0 @@ -import warnings - -from drf_spectacular.utils import extend_schema_serializer - -from circuits.models import * -from netbox.api.fields import RelatedObjectCountField -from netbox.api.serializers import WritableNestedSerializer -from .serializers_.nested import NestedProviderAccountSerializer - -__all__ = [ - 'NestedCircuitSerializer', - 'NestedCircuitTerminationSerializer', - 'NestedCircuitTypeSerializer', - 'NestedProviderNetworkSerializer', - 'NestedProviderSerializer', - 'NestedProviderAccountSerializer', -] - -# TODO: Remove in v4.2 -warnings.warn( - "Dedicated nested serializers will be removed in NetBox v4.2. Use Serializer(nested=True) instead.", - DeprecationWarning -) - - -# -# Provider networks -# - -class NestedProviderNetworkSerializer(WritableNestedSerializer): - - class Meta: - model = ProviderNetwork - fields = ['id', 'url', 'display_url', 'display', 'name'] - - -# -# Providers -# - -@extend_schema_serializer( - exclude_fields=('circuit_count',), -) -class NestedProviderSerializer(WritableNestedSerializer): - circuit_count = RelatedObjectCountField('circuits') - - class Meta: - model = Provider - fields = ['id', 'url', 'display_url', 'display', 'name', 'slug', 'circuit_count'] - - -# -# Circuits -# - -@extend_schema_serializer( - exclude_fields=('circuit_count',), -) -class NestedCircuitTypeSerializer(WritableNestedSerializer): - circuit_count = RelatedObjectCountField('circuits') - - class Meta: - model = CircuitType - fields = ['id', 'url', 'display_url', 'display', 'name', 'slug', 'circuit_count'] - - -class NestedCircuitSerializer(WritableNestedSerializer): - - class Meta: - model = Circuit - fields = ['id', 'url', 'display_url', 'display', 'cid'] - - -class NestedCircuitTerminationSerializer(WritableNestedSerializer): - circuit = NestedCircuitSerializer() - - class Meta: - model = CircuitTermination - fields = ['id', 'url', 'display_url', 'display', 'circuit', 'term_side', 'cable', '_occupied'] diff --git a/netbox/circuits/api/serializers_/circuits.py b/netbox/circuits/api/serializers_/circuits.py index c605a4bd5..70b57a688 100644 --- a/netbox/circuits/api/serializers_/circuits.py +++ b/netbox/circuits/api/serializers_/circuits.py @@ -1,11 +1,20 @@ -from circuits.choices import CircuitPriorityChoices, CircuitStatusChoices -from circuits.models import Circuit, CircuitGroup, CircuitGroupAssignment, CircuitTermination, CircuitType -from dcim.api.serializers_.cables import CabledObjectSerializer -from dcim.api.serializers_.sites import SiteSerializer -from netbox.api.fields import ChoiceField, RelatedObjectCountField -from netbox.api.serializers import NetBoxModelSerializer, WritableNestedSerializer -from tenancy.api.serializers_.tenants import TenantSerializer +from django.contrib.contenttypes.models import ContentType +from drf_spectacular.utils import extend_schema_field +from rest_framework import serializers +from circuits.choices import CircuitPriorityChoices, CircuitStatusChoices, VirtualCircuitTerminationRoleChoices +from circuits.constants import CIRCUIT_GROUP_ASSIGNMENT_MEMBER_MODELS, CIRCUIT_TERMINATION_TERMINATION_TYPES +from circuits.models import ( + Circuit, CircuitGroup, CircuitGroupAssignment, CircuitTermination, CircuitType, VirtualCircuit, + VirtualCircuitTermination, VirtualCircuitType, +) +from dcim.api.serializers_.device_components import InterfaceSerializer +from dcim.api.serializers_.cables import CabledObjectSerializer +from netbox.api.fields import ChoiceField, ContentTypeField, RelatedObjectCountField +from netbox.api.serializers import NetBoxModelSerializer, WritableNestedSerializer +from netbox.choices import DistanceUnitChoices +from tenancy.api.serializers_.tenants import TenantSerializer +from utilities.api import get_serializer_for_model from .providers import ProviderAccountSerializer, ProviderNetworkSerializer, ProviderSerializer __all__ = ( @@ -14,6 +23,9 @@ __all__ = ( 'CircuitGroupSerializer', 'CircuitTerminationSerializer', 'CircuitTypeSerializer', + 'VirtualCircuitSerializer', + 'VirtualCircuitTerminationSerializer', + 'VirtualCircuitTypeSerializer', ) @@ -32,16 +44,32 @@ class CircuitTypeSerializer(NetBoxModelSerializer): class CircuitCircuitTerminationSerializer(WritableNestedSerializer): - site = SiteSerializer(nested=True, allow_null=True) - provider_network = ProviderNetworkSerializer(nested=True, allow_null=True) + termination_type = ContentTypeField( + queryset=ContentType.objects.filter( + model__in=CIRCUIT_TERMINATION_TERMINATION_TYPES + ), + allow_null=True, + required=False, + default=None + ) + termination_id = serializers.IntegerField(allow_null=True, required=False, default=None) + termination = serializers.SerializerMethodField(read_only=True) class Meta: model = CircuitTermination fields = [ - 'id', 'url', 'display_url', 'display', 'site', 'provider_network', 'port_speed', 'upstream_speed', - 'xconnect_id', 'description', + 'id', 'url', 'display_url', 'display', 'termination_type', 'termination_id', 'termination', 'port_speed', + 'upstream_speed', 'xconnect_id', 'description', ] + @extend_schema_field(serializers.JSONField(allow_null=True)) + def get_termination(self, obj): + if obj.termination_id is None: + return None + serializer = get_serializer_for_model(obj.termination) + context = {'request': self.context['request']} + return serializer(obj.termination, nested=True, context=context).data + class CircuitGroupSerializer(NetBoxModelSerializer): tenant = TenantSerializer(nested=True, required=False, allow_null=True) @@ -76,6 +104,7 @@ class CircuitSerializer(NetBoxModelSerializer): provider_account = ProviderAccountSerializer(nested=True, required=False, allow_null=True, default=None) status = ChoiceField(choices=CircuitStatusChoices, required=False) type = CircuitTypeSerializer(nested=True) + distance_unit = ChoiceField(choices=DistanceUnitChoices, allow_blank=True, required=False, allow_null=True) tenant = TenantSerializer(nested=True, required=False, allow_null=True) termination_a = CircuitCircuitTerminationSerializer(read_only=True, allow_null=True) termination_z = CircuitCircuitTerminationSerializer(read_only=True, allow_null=True) @@ -85,33 +114,107 @@ class CircuitSerializer(NetBoxModelSerializer): model = Circuit fields = [ 'id', 'url', 'display_url', 'display', 'cid', 'provider', 'provider_account', 'type', 'status', 'tenant', - 'install_date', 'termination_date', 'commit_rate', 'description', 'termination_a', 'termination_z', - 'comments', 'tags', 'custom_fields', 'created', 'last_updated', 'assignments', + 'install_date', 'termination_date', 'commit_rate', 'description', 'distance', 'distance_unit', + 'termination_a', 'termination_z', 'comments', 'tags', 'custom_fields', 'created', 'last_updated', + 'assignments', ] brief_fields = ('id', 'url', 'display', 'provider', 'cid', 'description') class CircuitTerminationSerializer(NetBoxModelSerializer, CabledObjectSerializer): circuit = CircuitSerializer(nested=True) - site = SiteSerializer(nested=True, required=False, allow_null=True) - provider_network = ProviderNetworkSerializer(nested=True, required=False, allow_null=True) + termination_type = ContentTypeField( + queryset=ContentType.objects.filter( + model__in=CIRCUIT_TERMINATION_TERMINATION_TYPES + ), + allow_null=True, + required=False, + default=None + ) + termination_id = serializers.IntegerField(allow_null=True, required=False, default=None) + termination = serializers.SerializerMethodField(read_only=True) class Meta: model = CircuitTermination fields = [ - 'id', 'url', 'display_url', 'display', 'circuit', 'term_side', 'site', 'provider_network', 'port_speed', - 'upstream_speed', 'xconnect_id', 'pp_info', 'description', 'mark_connected', 'cable', 'cable_end', - 'link_peers', 'link_peers_type', 'tags', 'custom_fields', 'created', 'last_updated', '_occupied', + 'id', 'url', 'display_url', 'display', 'circuit', 'term_side', 'termination_type', 'termination_id', + 'termination', 'port_speed', 'upstream_speed', 'xconnect_id', 'pp_info', 'description', 'mark_connected', + 'cable', 'cable_end', 'link_peers', 'link_peers_type', 'tags', 'custom_fields', 'created', 'last_updated', + '_occupied', ] brief_fields = ('id', 'url', 'display', 'circuit', 'term_side', 'description', 'cable', '_occupied') + @extend_schema_field(serializers.JSONField(allow_null=True)) + def get_termination(self, obj): + if obj.termination_id is None: + return None + serializer = get_serializer_for_model(obj.termination) + context = {'request': self.context['request']} + return serializer(obj.termination, nested=True, context=context).data + class CircuitGroupAssignmentSerializer(CircuitGroupAssignmentSerializer_): - circuit = CircuitSerializer(nested=True) + member_type = ContentTypeField( + queryset=ContentType.objects.filter(CIRCUIT_GROUP_ASSIGNMENT_MEMBER_MODELS) + ) + member = serializers.SerializerMethodField(read_only=True) class Meta: model = CircuitGroupAssignment fields = [ - 'id', 'url', 'display_url', 'display', 'group', 'circuit', 'priority', 'tags', 'created', 'last_updated', + 'id', 'url', 'display_url', 'display', 'group', 'member_type', 'member_id', 'member', 'priority', 'tags', + 'created', 'last_updated', ] - brief_fields = ('id', 'url', 'display', 'group', 'circuit', 'priority') + brief_fields = ('id', 'url', 'display', 'group', 'member_type', 'member_id', 'member', 'priority') + + @extend_schema_field(serializers.JSONField(allow_null=True)) + def get_member(self, obj): + if obj.member_id is None: + return None + serializer = get_serializer_for_model(obj.member) + context = {'request': self.context['request']} + return serializer(obj.member, nested=True, context=context).data + + +class VirtualCircuitTypeSerializer(NetBoxModelSerializer): + + # Related object counts + virtual_circuit_count = RelatedObjectCountField('virtual_circuits') + + class Meta: + model = VirtualCircuitType + fields = [ + 'id', 'url', 'display_url', 'display', 'name', 'slug', 'color', 'description', 'tags', 'custom_fields', + 'created', 'last_updated', 'virtual_circuit_count', + ] + brief_fields = ('id', 'url', 'display', 'name', 'slug', 'description', 'virtual_circuit_count') + + +class VirtualCircuitSerializer(NetBoxModelSerializer): + provider_network = ProviderNetworkSerializer(nested=True) + provider_account = ProviderAccountSerializer(nested=True, required=False, allow_null=True, default=None) + type = VirtualCircuitTypeSerializer(nested=True) + status = ChoiceField(choices=CircuitStatusChoices, required=False) + tenant = TenantSerializer(nested=True, required=False, allow_null=True) + + class Meta: + model = VirtualCircuit + fields = [ + 'id', 'url', 'display_url', 'display', 'cid', 'provider_network', 'provider_account', 'type', 'status', + 'tenant', 'description', 'comments', 'tags', 'custom_fields', 'created', 'last_updated', + ] + brief_fields = ('id', 'url', 'display', 'provider_network', 'cid', 'description') + + +class VirtualCircuitTerminationSerializer(NetBoxModelSerializer, CabledObjectSerializer): + virtual_circuit = VirtualCircuitSerializer(nested=True) + role = ChoiceField(choices=VirtualCircuitTerminationRoleChoices, required=False) + interface = InterfaceSerializer(nested=True) + + class Meta: + model = VirtualCircuitTermination + fields = [ + 'id', 'url', 'display_url', 'display', 'virtual_circuit', 'role', 'interface', 'description', 'tags', + 'custom_fields', 'created', 'last_updated', + ] + brief_fields = ('id', 'url', 'display', 'virtual_circuit', 'role', 'interface', 'description') diff --git a/netbox/circuits/api/urls.py b/netbox/circuits/api/urls.py index 00af3dec6..3be620bd2 100644 --- a/netbox/circuits/api/urls.py +++ b/netbox/circuits/api/urls.py @@ -17,5 +17,10 @@ router.register('circuit-terminations', views.CircuitTerminationViewSet) router.register('circuit-groups', views.CircuitGroupViewSet) router.register('circuit-group-assignments', views.CircuitGroupAssignmentViewSet) +# Virtual circuits +router.register('virtual-circuits', views.VirtualCircuitViewSet) +router.register('virtual-circuit-types', views.VirtualCircuitTypeViewSet) +router.register('virtual-circuit-terminations', views.VirtualCircuitTerminationViewSet) + app_name = 'circuits-api' urlpatterns = router.urls diff --git a/netbox/circuits/api/views.py b/netbox/circuits/api/views.py index 8cce013d7..05540d9ad 100644 --- a/netbox/circuits/api/views.py +++ b/netbox/circuits/api/views.py @@ -93,3 +93,33 @@ class ProviderNetworkViewSet(NetBoxModelViewSet): queryset = ProviderNetwork.objects.all() serializer_class = serializers.ProviderNetworkSerializer filterset_class = filtersets.ProviderNetworkFilterSet + + +# +# Virtual circuit types +# + +class VirtualCircuitTypeViewSet(NetBoxModelViewSet): + queryset = VirtualCircuitType.objects.all() + serializer_class = serializers.VirtualCircuitTypeSerializer + filterset_class = filtersets.VirtualCircuitTypeFilterSet + + +# +# Virtual circuits +# + +class VirtualCircuitViewSet(NetBoxModelViewSet): + queryset = VirtualCircuit.objects.all() + serializer_class = serializers.VirtualCircuitSerializer + filterset_class = filtersets.VirtualCircuitFilterSet + + +# +# Virtual circuit terminations +# + +class VirtualCircuitTerminationViewSet(PassThroughPortMixin, NetBoxModelViewSet): + queryset = VirtualCircuitTermination.objects.all() + serializer_class = serializers.VirtualCircuitTerminationSerializer + filterset_class = filtersets.VirtualCircuitTerminationFilterSet diff --git a/netbox/circuits/choices.py b/netbox/circuits/choices.py index 8c25c7459..4d6132d7a 100644 --- a/netbox/circuits/choices.py +++ b/netbox/circuits/choices.py @@ -92,3 +92,19 @@ class CircuitPriorityChoices(ChoiceSet): (PRIORITY_TERTIARY, _('Tertiary')), (PRIORITY_INACTIVE, _('Inactive')), ] + + +# +# Virtual circuits +# + +class VirtualCircuitTerminationRoleChoices(ChoiceSet): + ROLE_PEER = 'peer' + ROLE_HUB = 'hub' + ROLE_SPOKE = 'spoke' + + CHOICES = [ + (ROLE_PEER, _('Peer'), 'green'), + (ROLE_HUB, _('Hub'), 'blue'), + (ROLE_SPOKE, _('Spoke'), 'orange'), + ] diff --git a/netbox/circuits/constants.py b/netbox/circuits/constants.py new file mode 100644 index 000000000..4642c22a3 --- /dev/null +++ b/netbox/circuits/constants.py @@ -0,0 +1,12 @@ +from django.db.models import Q + + +# models values for ContentTypes which may be CircuitTermination termination types +CIRCUIT_TERMINATION_TERMINATION_TYPES = ( + 'region', 'sitegroup', 'site', 'location', 'providernetwork', +) + +CIRCUIT_GROUP_ASSIGNMENT_MEMBER_MODELS = Q( + app_label='circuits', + model__in=['circuit', 'virtualcircuit'] +) diff --git a/netbox/circuits/filtersets.py b/netbox/circuits/filtersets.py index c55807c75..964f69f83 100644 --- a/netbox/circuits/filtersets.py +++ b/netbox/circuits/filtersets.py @@ -1,13 +1,16 @@ import django_filters +from django.contrib.contenttypes.models import ContentType from django.db.models import Q from django.utils.translation import gettext as _ from dcim.filtersets import CabledObjectFilterSet -from dcim.models import Region, Site, SiteGroup +from dcim.models import Interface, Location, Region, Site, SiteGroup from ipam.models import ASN from netbox.filtersets import NetBoxModelFilterSet, OrganizationalModelFilterSet from tenancy.filtersets import ContactModelFilterSet, TenancyFilterSet -from utilities.filters import TreeNodeMultipleChoiceFilter +from utilities.filters import ( + ContentTypeFilter, MultiValueCharFilter, MultiValueNumberFilter, TreeNodeMultipleChoiceFilter, +) from .choices import * from .models import * @@ -20,43 +23,46 @@ __all__ = ( 'ProviderNetworkFilterSet', 'ProviderAccountFilterSet', 'ProviderFilterSet', + 'VirtualCircuitFilterSet', + 'VirtualCircuitTerminationFilterSet', + 'VirtualCircuitTypeFilterSet', ) class ProviderFilterSet(NetBoxModelFilterSet, ContactModelFilterSet): region_id = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), - field_name='circuits__terminations__site__region', + field_name='circuits__terminations___region', lookup_expr='in', label=_('Region (ID)'), ) region = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), - field_name='circuits__terminations__site__region', + field_name='circuits__terminations___region', lookup_expr='in', to_field_name='slug', label=_('Region (slug)'), ) site_group_id = TreeNodeMultipleChoiceFilter( queryset=SiteGroup.objects.all(), - field_name='circuits__terminations__site__group', + field_name='circuits__terminations___site_group', lookup_expr='in', label=_('Site group (ID)'), ) site_group = TreeNodeMultipleChoiceFilter( queryset=SiteGroup.objects.all(), - field_name='circuits__terminations__site__group', + field_name='circuits__terminations___site_group', lookup_expr='in', to_field_name='slug', label=_('Site group (slug)'), ) site_id = django_filters.ModelMultipleChoiceFilter( - field_name='circuits__terminations__site', + field_name='circuits__terminations___site', queryset=Site.objects.all(), label=_('Site'), ) site = django_filters.ModelMultipleChoiceFilter( - field_name='circuits__terminations__site__slug', + field_name='circuits__terminations___site__slug', queryset=Site.objects.all(), to_field_name='slug', label=_('Site (slug)'), @@ -173,7 +179,7 @@ class CircuitFilterSet(NetBoxModelFilterSet, TenancyFilterSet, ContactModelFilte label=_('Provider account (account)'), ) provider_network_id = django_filters.ModelMultipleChoiceFilter( - field_name='terminations__provider_network', + field_name='terminations___provider_network', queryset=ProviderNetwork.objects.all(), label=_('Provider network (ID)'), ) @@ -193,37 +199,37 @@ class CircuitFilterSet(NetBoxModelFilterSet, TenancyFilterSet, ContactModelFilte ) region_id = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), - field_name='terminations__site__region', + field_name='terminations___region', lookup_expr='in', label=_('Region (ID)'), ) region = TreeNodeMultipleChoiceFilter( queryset=Region.objects.all(), - field_name='terminations__site__region', + field_name='terminations___region', lookup_expr='in', to_field_name='slug', label=_('Region (slug)'), ) site_group_id = TreeNodeMultipleChoiceFilter( queryset=SiteGroup.objects.all(), - field_name='terminations__site__group', + field_name='terminations___site_group', lookup_expr='in', label=_('Site group (ID)'), ) site_group = TreeNodeMultipleChoiceFilter( queryset=SiteGroup.objects.all(), - field_name='terminations__site__group', + field_name='terminations___site_group', lookup_expr='in', to_field_name='slug', label=_('Site group (slug)'), ) site_id = django_filters.ModelMultipleChoiceFilter( - field_name='terminations__site', + field_name='terminations___site', queryset=Site.objects.all(), label=_('Site (ID)'), ) site = django_filters.ModelMultipleChoiceFilter( - field_name='terminations__site__slug', + field_name='terminations___site__slug', queryset=Site.objects.all(), to_field_name='slug', label=_('Site (slug)'), @@ -239,7 +245,9 @@ class CircuitFilterSet(NetBoxModelFilterSet, TenancyFilterSet, ContactModelFilte class Meta: model = Circuit - fields = ('id', 'cid', 'description', 'install_date', 'termination_date', 'commit_rate') + fields = ( + 'id', 'cid', 'description', 'install_date', 'termination_date', 'commit_rate', 'distance', 'distance_unit', + ) def search(self, queryset, name, value): if not value.strip(): @@ -263,18 +271,60 @@ class CircuitTerminationFilterSet(NetBoxModelFilterSet, CabledObjectFilterSet): queryset=Circuit.objects.all(), label=_('Circuit'), ) + termination_type = ContentTypeFilter() + region_id = TreeNodeMultipleChoiceFilter( + queryset=Region.objects.all(), + field_name='_region', + lookup_expr='in', + label=_('Region (ID)'), + ) + region = TreeNodeMultipleChoiceFilter( + queryset=Region.objects.all(), + field_name='_region', + lookup_expr='in', + to_field_name='slug', + label=_('Region (slug)'), + ) + site_group_id = TreeNodeMultipleChoiceFilter( + queryset=SiteGroup.objects.all(), + field_name='_site_group', + lookup_expr='in', + label=_('Site group (ID)'), + ) + site_group = TreeNodeMultipleChoiceFilter( + queryset=SiteGroup.objects.all(), + field_name='_site_group', + lookup_expr='in', + to_field_name='slug', + label=_('Site group (slug)'), + ) site_id = django_filters.ModelMultipleChoiceFilter( queryset=Site.objects.all(), + field_name='_site', label=_('Site (ID)'), ) site = django_filters.ModelMultipleChoiceFilter( - field_name='site__slug', + field_name='_site__slug', queryset=Site.objects.all(), to_field_name='slug', label=_('Site (slug)'), ) + location_id = TreeNodeMultipleChoiceFilter( + queryset=Location.objects.all(), + field_name='_location', + lookup_expr='in', + label=_('Location (ID)'), + ) + location = TreeNodeMultipleChoiceFilter( + queryset=Location.objects.all(), + field_name='_location', + lookup_expr='in', + to_field_name='slug', + label=_('Location (slug)'), + ) provider_network_id = django_filters.ModelMultipleChoiceFilter( queryset=ProviderNetwork.objects.all(), + field_name='_provider_network', label=_('ProviderNetwork (ID)'), ) provider_id = django_filters.ModelMultipleChoiceFilter( @@ -292,8 +342,8 @@ class CircuitTerminationFilterSet(NetBoxModelFilterSet, CabledObjectFilterSet): class Meta: model = CircuitTermination fields = ( - 'id', 'term_side', 'port_speed', 'upstream_speed', 'xconnect_id', 'description', 'mark_connected', - 'pp_info', 'cable_end', + 'id', 'termination_id', 'term_side', 'port_speed', 'upstream_speed', 'xconnect_id', 'description', + 'mark_connected', 'pp_info', 'cable_end', ) def search(self, queryset, name, value): @@ -319,26 +369,36 @@ class CircuitGroupAssignmentFilterSet(NetBoxModelFilterSet): method='search', label=_('Search'), ) - provider_id = django_filters.ModelMultipleChoiceFilter( - field_name='circuit__provider', - queryset=Provider.objects.all(), - label=_('Provider (ID)'), + member_type = ContentTypeFilter() + circuit = MultiValueCharFilter( + method='filter_circuit', + field_name='cid', + label=_('Circuit (CID)'), ) - provider = django_filters.ModelMultipleChoiceFilter( - field_name='circuit__provider__slug', - queryset=Provider.objects.all(), - to_field_name='slug', - label=_('Provider (slug)'), - ) - circuit_id = django_filters.ModelMultipleChoiceFilter( - queryset=Circuit.objects.all(), + circuit_id = MultiValueNumberFilter( + method='filter_circuit', + field_name='pk', label=_('Circuit (ID)'), ) - circuit = django_filters.ModelMultipleChoiceFilter( - field_name='circuit__cid', - queryset=Circuit.objects.all(), - to_field_name='cid', - label=_('Circuit (CID)'), + virtual_circuit = MultiValueCharFilter( + method='filter_virtual_circuit', + field_name='cid', + label=_('Virtual circuit (CID)'), + ) + virtual_circuit_id = MultiValueNumberFilter( + method='filter_virtual_circuit', + field_name='pk', + label=_('Virtual circuit (ID)'), + ) + provider = MultiValueCharFilter( + method='filter_provider', + field_name='slug', + label=_('Provider (name)'), + ) + provider_id = MultiValueNumberFilter( + method='filter_provider', + field_name='pk', + label=_('Provider (ID)'), ) group_id = django_filters.ModelMultipleChoiceFilter( queryset=CircuitGroup.objects.all(), @@ -353,12 +413,173 @@ class CircuitGroupAssignmentFilterSet(NetBoxModelFilterSet): class Meta: model = CircuitGroupAssignment - fields = ('id', 'priority') + fields = ('id', 'member_id', 'priority') def search(self, queryset, name, value): if not value.strip(): return queryset return queryset.filter( - Q(circuit__cid__icontains=value) | + Q(member__cid__icontains=value) | Q(group__name__icontains=value) ) + + def filter_circuit(self, queryset, name, value): + circuits = Circuit.objects.filter(**{f'{name}__in': value}) + if not circuits.exists(): + return queryset.none() + return queryset.filter( + Q( + member_type=ContentType.objects.get_for_model(Circuit), + member_id__in=circuits + ) + ) + + def filter_virtual_circuit(self, queryset, name, value): + virtual_circuits = VirtualCircuit.objects.filter(**{f'{name}__in': value}) + if not virtual_circuits.exists(): + return queryset.none() + return queryset.filter( + Q( + member_type=ContentType.objects.get_for_model(VirtualCircuit), + member_id__in=virtual_circuits + ) + ) + + def filter_provider(self, queryset, name, value): + providers = Provider.objects.filter(**{f'{name}__in': value}) + if not providers.exists(): + return queryset.none() + circuits = Circuit.objects.filter(provider__in=providers) + virtual_circuits = VirtualCircuit.objects.filter(provider_network__provider__in=providers) + return queryset.filter( + Q( + member_type=ContentType.objects.get_for_model(Circuit), + member_id__in=circuits + ) | + Q( + member_type=ContentType.objects.get_for_model(VirtualCircuit), + member_id__in=virtual_circuits + ) + ) + + +class VirtualCircuitTypeFilterSet(OrganizationalModelFilterSet): + + class Meta: + model = VirtualCircuitType + fields = ('id', 'name', 'slug', 'color', 'description') + + +class VirtualCircuitFilterSet(NetBoxModelFilterSet, TenancyFilterSet): + provider_id = django_filters.ModelMultipleChoiceFilter( + field_name='provider_network__provider', + queryset=Provider.objects.all(), + label=_('Provider (ID)'), + ) + provider = django_filters.ModelMultipleChoiceFilter( + field_name='provider_network__provider__slug', + queryset=Provider.objects.all(), + to_field_name='slug', + label=_('Provider (slug)'), + ) + provider_account_id = django_filters.ModelMultipleChoiceFilter( + field_name='provider_account', + queryset=ProviderAccount.objects.all(), + label=_('Provider account (ID)'), + ) + provider_account = django_filters.ModelMultipleChoiceFilter( + field_name='provider_account__account', + queryset=Provider.objects.all(), + to_field_name='account', + label=_('Provider account (account)'), + ) + provider_network_id = django_filters.ModelMultipleChoiceFilter( + queryset=ProviderNetwork.objects.all(), + label=_('Provider network (ID)'), + ) + type_id = django_filters.ModelMultipleChoiceFilter( + queryset=VirtualCircuitType.objects.all(), + label=_('Virtual circuit type (ID)'), + ) + type = django_filters.ModelMultipleChoiceFilter( + field_name='type__slug', + queryset=VirtualCircuitType.objects.all(), + to_field_name='slug', + label=_('Virtual circuit type (slug)'), + ) + status = django_filters.MultipleChoiceFilter( + choices=CircuitStatusChoices, + null_value=None + ) + + class Meta: + model = VirtualCircuit + fields = ('id', 'cid', 'description') + + def search(self, queryset, name, value): + if not value.strip(): + return queryset + return queryset.filter( + Q(cid__icontains=value) | + Q(description__icontains=value) | + Q(comments__icontains=value) + ).distinct() + + +class VirtualCircuitTerminationFilterSet(NetBoxModelFilterSet): + q = django_filters.CharFilter( + method='search', + label=_('Search'), + ) + virtual_circuit_id = django_filters.ModelMultipleChoiceFilter( + queryset=VirtualCircuit.objects.all(), + label=_('Virtual circuit'), + ) + role = django_filters.MultipleChoiceFilter( + choices=VirtualCircuitTerminationRoleChoices, + null_value=None + ) + provider_id = django_filters.ModelMultipleChoiceFilter( + field_name='virtual_circuit__provider_network__provider', + queryset=Provider.objects.all(), + label=_('Provider (ID)'), + ) + provider = django_filters.ModelMultipleChoiceFilter( + field_name='virtual_circuit__provider_network__provider__slug', + queryset=Provider.objects.all(), + to_field_name='slug', + label=_('Provider (slug)'), + ) + provider_account_id = django_filters.ModelMultipleChoiceFilter( + field_name='virtual_circuit__provider_account', + queryset=ProviderAccount.objects.all(), + label=_('Provider account (ID)'), + ) + provider_account = django_filters.ModelMultipleChoiceFilter( + field_name='virtual_circuit__provider_account__account', + queryset=ProviderAccount.objects.all(), + to_field_name='account', + label=_('Provider account (account)'), + ) + provider_network_id = django_filters.ModelMultipleChoiceFilter( + queryset=ProviderNetwork.objects.all(), + field_name='virtual_circuit__provider_network', + label=_('Provider network (ID)'), + ) + interface_id = django_filters.ModelMultipleChoiceFilter( + queryset=Interface.objects.all(), + field_name='interface', + label=_('Interface (ID)'), + ) + + class Meta: + model = VirtualCircuitTermination + fields = ('id', 'interface_id', 'description') + + def search(self, queryset, name, value): + if not value.strip(): + return queryset + return queryset.filter( + Q(virtual_circuit__cid__icontains=value) | + Q(description__icontains=value) + ).distinct() diff --git a/netbox/circuits/forms/bulk_edit.py b/netbox/circuits/forms/bulk_edit.py index 3bb50a8d0..8d6e8dec1 100644 --- a/netbox/circuits/forms/bulk_edit.py +++ b/netbox/circuits/forms/bulk_edit.py @@ -1,16 +1,25 @@ from django import forms +from django.contrib.contenttypes.models import ContentType +from django.core.exceptions import ObjectDoesNotExist from django.utils.translation import gettext_lazy as _ -from circuits.choices import CircuitCommitRateChoices, CircuitPriorityChoices, CircuitStatusChoices +from circuits.choices import ( + CircuitCommitRateChoices, CircuitPriorityChoices, CircuitStatusChoices, VirtualCircuitTerminationRoleChoices, +) +from circuits.constants import CIRCUIT_TERMINATION_TERMINATION_TYPES from circuits.models import * from dcim.models import Site from ipam.models import ASN +from netbox.choices import DistanceUnitChoices from netbox.forms import NetBoxModelBulkEditForm from tenancy.models import Tenant -from utilities.forms import add_blank_choice -from utilities.forms.fields import ColorField, CommentField, DynamicModelChoiceField, DynamicModelMultipleChoiceField -from utilities.forms.rendering import FieldSet, TabbedGroups -from utilities.forms.widgets import BulkEditNullBooleanSelect, DatePicker, NumberWithOptions +from utilities.forms import add_blank_choice, get_field_value +from utilities.forms.fields import ( + ColorField, CommentField, ContentTypeChoiceField, DynamicModelChoiceField, DynamicModelMultipleChoiceField, +) +from utilities.forms.rendering import FieldSet +from utilities.forms.widgets import BulkEditNullBooleanSelect, DatePicker, HTMXSelect, NumberWithOptions +from utilities.templatetags.builtins.filters import bettertitle __all__ = ( 'CircuitBulkEditForm', @@ -21,6 +30,9 @@ __all__ = ( 'ProviderBulkEditForm', 'ProviderAccountBulkEditForm', 'ProviderNetworkBulkEditForm', + 'VirtualCircuitBulkEditForm', + 'VirtualCircuitTerminationBulkEditForm', + 'VirtualCircuitTypeBulkEditForm', ) @@ -160,6 +172,17 @@ class CircuitBulkEditForm(NetBoxModelBulkEditForm): options=CircuitCommitRateChoices ) ) + distance = forms.DecimalField( + label=_('Distance'), + min_value=0, + required=False + ) + distance_unit = forms.ChoiceField( + label=_('Distance unit'), + choices=add_blank_choice(DistanceUnitChoices), + required=False, + initial='' + ) description = forms.CharField( label=_('Description'), max_length=100, @@ -171,6 +194,7 @@ class CircuitBulkEditForm(NetBoxModelBulkEditForm): fieldsets = ( FieldSet('provider', 'type', 'status', 'description', name=_('Circuit')), FieldSet('provider_account', 'install_date', 'termination_date', 'commit_rate', name=_('Service Parameters')), + FieldSet('distance', 'distance_unit', name=_('Attributes')), FieldSet('tenant', name=_('Tenancy')), ) nullable_fields = ( @@ -184,15 +208,18 @@ class CircuitTerminationBulkEditForm(NetBoxModelBulkEditForm): max_length=200, required=False ) - site = DynamicModelChoiceField( - label=_('Site'), - queryset=Site.objects.all(), - required=False + termination_type = ContentTypeChoiceField( + queryset=ContentType.objects.filter(model__in=CIRCUIT_TERMINATION_TERMINATION_TYPES), + widget=HTMXSelect(method='post', attrs={'hx-select': '#form_fields'}), + required=False, + label=_('Termination type') ) - provider_network = DynamicModelChoiceField( - label=_('Provider Network'), - queryset=ProviderNetwork.objects.all(), - required=False + termination = DynamicModelChoiceField( + label=_('Termination'), + queryset=Site.objects.none(), # Initial queryset + required=False, + disabled=True, + selector=True ) port_speed = forms.IntegerField( required=False, @@ -212,15 +239,26 @@ class CircuitTerminationBulkEditForm(NetBoxModelBulkEditForm): fieldsets = ( FieldSet( 'description', - TabbedGroups( - FieldSet('site', name=_('Site')), - FieldSet('provider_network', name=_('Provider Network')), - ), + 'termination_type', 'termination', 'mark_connected', name=_('Circuit Termination') ), FieldSet('port_speed', 'upstream_speed', name=_('Termination Details')), ) - nullable_fields = ('description') + nullable_fields = ('description', 'termination') + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + if termination_type_id := get_field_value(self, 'termination_type'): + try: + termination_type = ContentType.objects.get(pk=termination_type_id) + model = termination_type.model_class() + self.fields['termination'].queryset = model.objects.all() + self.fields['termination'].widget.attrs['selector'] = model._meta.label_lower + self.fields['termination'].disabled = False + self.fields['termination'].label = _(bettertitle(model._meta.verbose_name)) + except ObjectDoesNotExist: + pass class CircuitGroupBulkEditForm(NetBoxModelBulkEditForm): @@ -242,7 +280,7 @@ class CircuitGroupBulkEditForm(NetBoxModelBulkEditForm): class CircuitGroupAssignmentBulkEditForm(NetBoxModelBulkEditForm): - circuit = DynamicModelChoiceField( + member = DynamicModelChoiceField( label=_('Circuit'), queryset=Circuit.objects.all(), required=False @@ -255,6 +293,88 @@ class CircuitGroupAssignmentBulkEditForm(NetBoxModelBulkEditForm): model = CircuitGroupAssignment fieldsets = ( - FieldSet('circuit', 'priority'), + FieldSet('member', 'priority'), ) nullable_fields = ('priority',) + + +class VirtualCircuitTypeBulkEditForm(NetBoxModelBulkEditForm): + color = ColorField( + label=_('Color'), + required=False + ) + description = forms.CharField( + label=_('Description'), + max_length=200, + required=False + ) + + model = VirtualCircuitType + fieldsets = ( + FieldSet('color', 'description'), + ) + nullable_fields = ('color', 'description') + + +class VirtualCircuitBulkEditForm(NetBoxModelBulkEditForm): + provider_network = DynamicModelChoiceField( + label=_('Provider network'), + queryset=ProviderNetwork.objects.all(), + required=False + ) + provider_account = DynamicModelChoiceField( + label=_('Provider account'), + queryset=ProviderAccount.objects.all(), + required=False + ) + type = DynamicModelChoiceField( + label=_('Type'), + queryset=VirtualCircuitType.objects.all(), + required=False + ) + status = forms.ChoiceField( + label=_('Status'), + choices=add_blank_choice(CircuitStatusChoices), + required=False, + initial='' + ) + tenant = DynamicModelChoiceField( + label=_('Tenant'), + queryset=Tenant.objects.all(), + required=False + ) + description = forms.CharField( + label=_('Description'), + max_length=100, + required=False + ) + comments = CommentField() + + model = VirtualCircuit + fieldsets = ( + FieldSet('provider_network', 'provider_account', 'status', 'description', name=_('Virtual circuit')), + FieldSet('tenant', name=_('Tenancy')), + ) + nullable_fields = ( + 'provider_account', 'tenant', 'description', 'comments', + ) + + +class VirtualCircuitTerminationBulkEditForm(NetBoxModelBulkEditForm): + role = forms.ChoiceField( + label=_('Role'), + choices=add_blank_choice(VirtualCircuitTerminationRoleChoices), + required=False, + initial='' + ) + description = forms.CharField( + label=_('Description'), + max_length=200, + required=False + ) + + model = VirtualCircuitTermination + fieldsets = ( + FieldSet('role', 'description'), + ) + nullable_fields = ('description',) diff --git a/netbox/circuits/forms/bulk_import.py b/netbox/circuits/forms/bulk_import.py index dc334ae88..43700d16b 100644 --- a/netbox/circuits/forms/bulk_import.py +++ b/netbox/circuits/forms/bulk_import.py @@ -1,12 +1,15 @@ from django import forms +from django.contrib.contenttypes.models import ContentType from django.utils.translation import gettext_lazy as _ from circuits.choices import * +from circuits.constants import * from circuits.models import * -from dcim.models import Site +from dcim.models import Interface +from netbox.choices import DistanceUnitChoices from netbox.forms import NetBoxModelImportForm from tenancy.models import Tenant -from utilities.forms.fields import CSVChoiceField, CSVModelChoiceField, SlugField +from utilities.forms.fields import CSVChoiceField, CSVContentTypeField, CSVModelChoiceField, SlugField __all__ = ( 'CircuitImportForm', @@ -18,6 +21,10 @@ __all__ = ( 'ProviderImportForm', 'ProviderAccountImportForm', 'ProviderNetworkImportForm', + 'VirtualCircuitImportForm', + 'VirtualCircuitTerminationImportForm', + 'VirtualCircuitTerminationImportRelatedForm', + 'VirtualCircuitTypeImportForm', ) @@ -94,6 +101,12 @@ class CircuitImportForm(NetBoxModelImportForm): choices=CircuitStatusChoices, help_text=_('Operational status') ) + distance_unit = CSVChoiceField( + label=_('Distance unit'), + choices=DistanceUnitChoices, + required=False, + help_text=_('Distance unit') + ) tenant = CSVModelChoiceField( label=_('Tenant'), queryset=Tenant.objects.all(), @@ -106,7 +119,7 @@ class CircuitImportForm(NetBoxModelImportForm): model = Circuit fields = [ 'cid', 'provider', 'provider_account', 'type', 'status', 'tenant', 'install_date', 'termination_date', - 'commit_rate', 'description', 'comments', 'tags' + 'commit_rate', 'distance', 'distance_unit', 'description', 'comments', 'tags' ] @@ -120,17 +133,10 @@ class BaseCircuitTerminationImportForm(forms.ModelForm): label=_('Termination'), choices=CircuitTerminationSideChoices, ) - site = CSVModelChoiceField( - label=_('Site'), - queryset=Site.objects.all(), - to_field_name='name', - required=False - ) - provider_network = CSVModelChoiceField( - label=_('Provider network'), - queryset=ProviderNetwork.objects.all(), - to_field_name='name', - required=False + termination_type = CSVContentTypeField( + queryset=ContentType.objects.filter(model__in=CIRCUIT_TERMINATION_TERMINATION_TYPES), + required=False, + label=_('Termination type (app & model)') ) @@ -138,9 +144,12 @@ class CircuitTerminationImportRelatedForm(BaseCircuitTerminationImportForm): class Meta: model = CircuitTermination fields = [ - 'circuit', 'term_side', 'site', 'provider_network', 'port_speed', 'upstream_speed', 'xconnect_id', + 'circuit', 'term_side', 'termination_type', 'termination_id', 'port_speed', 'upstream_speed', 'xconnect_id', 'pp_info', 'description' ] + labels = { + 'termination_id': _('Termination ID'), + } class CircuitTerminationImportForm(NetBoxModelImportForm, BaseCircuitTerminationImportForm): @@ -148,9 +157,12 @@ class CircuitTerminationImportForm(NetBoxModelImportForm, BaseCircuitTermination class Meta: model = CircuitTermination fields = [ - 'circuit', 'term_side', 'site', 'provider_network', 'port_speed', 'upstream_speed', 'xconnect_id', + 'circuit', 'term_side', 'termination_type', 'termination_id', 'port_speed', 'upstream_speed', 'xconnect_id', 'pp_info', 'description', 'tags' ] + labels = { + 'termination_id': _('Termination ID'), + } class CircuitGroupImportForm(NetBoxModelImportForm): @@ -168,7 +180,101 @@ class CircuitGroupImportForm(NetBoxModelImportForm): class CircuitGroupAssignmentImportForm(NetBoxModelImportForm): + member_type = CSVContentTypeField( + queryset=ContentType.objects.filter(CIRCUIT_GROUP_ASSIGNMENT_MEMBER_MODELS), + label=_('Circuit type (app & model)') + ) + priority = CSVChoiceField( + label=_('Priority'), + choices=CircuitPriorityChoices, + required=False + ) class Meta: model = CircuitGroupAssignment - fields = ('circuit', 'group', 'priority') + fields = ('member_type', 'member_id', 'group', 'priority') + + +class VirtualCircuitTypeImportForm(NetBoxModelImportForm): + slug = SlugField() + + class Meta: + model = VirtualCircuitType + fields = ('name', 'slug', 'color', 'description', 'tags') + + +class VirtualCircuitImportForm(NetBoxModelImportForm): + provider_network = CSVModelChoiceField( + label=_('Provider network'), + queryset=ProviderNetwork.objects.all(), + to_field_name='name', + help_text=_('The network to which this virtual circuit belongs') + ) + provider_account = CSVModelChoiceField( + label=_('Provider account'), + queryset=ProviderAccount.objects.all(), + to_field_name='account', + help_text=_('Assigned provider account (if any)'), + required=False + ) + type = CSVModelChoiceField( + label=_('Type'), + queryset=VirtualCircuitType.objects.all(), + to_field_name='name', + help_text=_('Type of virtual circuit') + ) + status = CSVChoiceField( + label=_('Status'), + choices=CircuitStatusChoices, + help_text=_('Operational status') + ) + tenant = CSVModelChoiceField( + label=_('Tenant'), + queryset=Tenant.objects.all(), + required=False, + to_field_name='name', + help_text=_('Assigned tenant') + ) + + class Meta: + model = VirtualCircuit + fields = [ + 'cid', 'provider_network', 'provider_account', 'type', 'status', 'tenant', 'description', 'comments', + 'tags', + ] + + +class BaseVirtualCircuitTerminationImportForm(forms.ModelForm): + virtual_circuit = CSVModelChoiceField( + label=_('Virtual circuit'), + queryset=VirtualCircuit.objects.all(), + to_field_name='cid', + ) + role = CSVChoiceField( + label=_('Role'), + choices=VirtualCircuitTerminationRoleChoices, + help_text=_('Operational role') + ) + interface = CSVModelChoiceField( + label=_('Interface'), + queryset=Interface.objects.all(), + to_field_name='pk', + ) + + +class VirtualCircuitTerminationImportRelatedForm(BaseVirtualCircuitTerminationImportForm): + + class Meta: + model = VirtualCircuitTermination + fields = [ + 'virtual_circuit', 'role', 'interface', 'description', + ] + + +class VirtualCircuitTerminationImportForm(NetBoxModelImportForm, BaseVirtualCircuitTerminationImportForm): + + class Meta: + model = VirtualCircuitTermination + fields = [ + 'virtual_circuit', 'role', 'interface', 'description', 'tags', + ] diff --git a/netbox/circuits/forms/filtersets.py b/netbox/circuits/forms/filtersets.py index a658dd641..aefc62655 100644 --- a/netbox/circuits/forms/filtersets.py +++ b/netbox/circuits/forms/filtersets.py @@ -1,12 +1,17 @@ from django import forms from django.utils.translation import gettext as _ -from circuits.choices import CircuitCommitRateChoices, CircuitPriorityChoices, CircuitStatusChoices, CircuitTerminationSideChoices +from circuits.choices import ( + CircuitCommitRateChoices, CircuitPriorityChoices, CircuitStatusChoices, CircuitTerminationSideChoices, + VirtualCircuitTerminationRoleChoices, +) from circuits.models import * -from dcim.models import Region, Site, SiteGroup +from dcim.models import Location, Region, Site, SiteGroup from ipam.models import ASN +from netbox.choices import DistanceUnitChoices from netbox.forms import NetBoxModelFilterSetForm from tenancy.forms import TenancyFilterForm, ContactModelFilterForm +from utilities.forms import add_blank_choice from utilities.forms.fields import ColorField, DynamicModelMultipleChoiceField, TagFilterField from utilities.forms.rendering import FieldSet from utilities.forms.widgets import DatePicker, NumberWithOptions @@ -20,6 +25,9 @@ __all__ = ( 'ProviderFilterForm', 'ProviderAccountFilterForm', 'ProviderNetworkFilterForm', + 'VirtualCircuitFilterForm', + 'VirtualCircuitTerminationFilterForm', + 'VirtualCircuitTypeFilterForm', ) @@ -114,7 +122,10 @@ class CircuitFilterForm(TenancyFilterForm, ContactModelFilterForm, NetBoxModelFi fieldsets = ( FieldSet('q', 'filter_id', 'tag'), FieldSet('provider_id', 'provider_account_id', 'provider_network_id', name=_('Provider')), - FieldSet('type_id', 'status', 'install_date', 'termination_date', 'commit_rate', name=_('Attributes')), + FieldSet( + '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('tenant_group_id', 'tenant_id', name=_('Tenant')), FieldSet('contact', 'contact_role', 'contact_group', name=_('Contacts')), @@ -188,6 +199,15 @@ class CircuitFilterForm(TenancyFilterForm, ContactModelFilterForm, NetBoxModelFi options=CircuitCommitRateChoices ) ) + distance = forms.DecimalField( + label=_('Distance'), + required=False, + ) + distance_unit = forms.ChoiceField( + label=_('Distance unit'), + choices=add_blank_choice(DistanceUnitChoices), + required=False + ) tag = TagFilterField(model) @@ -196,18 +216,29 @@ class CircuitTerminationFilterForm(NetBoxModelFilterSetForm): fieldsets = ( FieldSet('q', 'filter_id', 'tag'), FieldSet('circuit_id', 'term_side', name=_('Circuit')), - FieldSet('provider_id', 'provider_network_id', name=_('Provider')), - FieldSet('region_id', 'site_group_id', 'site_id', name=_('Location')), + FieldSet('provider_id', name=_('Provider')), + FieldSet('region_id', 'site_group_id', 'site_id', 'location_id', name=_('Termination')), + ) + region_id = DynamicModelMultipleChoiceField( + queryset=Region.objects.all(), + required=False, + label=_('Region') + ) + site_group_id = DynamicModelMultipleChoiceField( + queryset=SiteGroup.objects.all(), + required=False, + label=_('Site group') ) site_id = DynamicModelMultipleChoiceField( queryset=Site.objects.all(), required=False, - query_params={ - 'region_id': '$region_id', - 'site_group_id': '$site_group_id', - }, label=_('Site') ) + location_id = DynamicModelMultipleChoiceField( + queryset=Location.objects.all(), + required=False, + label=_('Location') + ) circuit_id = DynamicModelMultipleChoiceField( queryset=Circuit.objects.all(), required=False, @@ -247,14 +278,14 @@ class CircuitGroupAssignmentFilterForm(NetBoxModelFilterSetForm): model = CircuitGroupAssignment fieldsets = ( FieldSet('q', 'filter_id', 'tag'), - FieldSet('provider_id', 'circuit_id', 'group_id', 'priority', name=_('Assignment')), + FieldSet('provider_id', 'member_id', 'group_id', 'priority', name=_('Assignment')), ) provider_id = DynamicModelMultipleChoiceField( queryset=Provider.objects.all(), required=False, label=_('Provider') ) - circuit_id = DynamicModelMultipleChoiceField( + member_id = DynamicModelMultipleChoiceField( queryset=Circuit.objects.all(), required=False, label=_('Circuit') @@ -270,3 +301,93 @@ class CircuitGroupAssignmentFilterForm(NetBoxModelFilterSetForm): required=False ) tag = TagFilterField(model) + + +class VirtualCircuitTypeFilterForm(NetBoxModelFilterSetForm): + model = VirtualCircuitType + fieldsets = ( + FieldSet('q', 'filter_id', 'tag'), + FieldSet('color', name=_('Attributes')), + ) + tag = TagFilterField(model) + + color = ColorField( + label=_('Color'), + required=False + ) + + +class VirtualCircuitFilterForm(TenancyFilterForm, ContactModelFilterForm, NetBoxModelFilterSetForm): + model = VirtualCircuit + fieldsets = ( + FieldSet('q', 'filter_id', 'tag'), + FieldSet('provider_id', 'provider_account_id', 'provider_network_id', name=_('Provider')), + FieldSet('type', 'status', name=_('Attributes')), + FieldSet('tenant_group_id', 'tenant_id', name=_('Tenant')), + ) + selector_fields = ('filter_id', 'q', 'provider_id', 'provider_network_id') + provider_id = DynamicModelMultipleChoiceField( + queryset=Provider.objects.all(), + required=False, + label=_('Provider') + ) + provider_account_id = DynamicModelMultipleChoiceField( + queryset=ProviderAccount.objects.all(), + required=False, + query_params={ + 'provider_id': '$provider_id' + }, + label=_('Provider account') + ) + provider_network_id = DynamicModelMultipleChoiceField( + queryset=ProviderNetwork.objects.all(), + required=False, + query_params={ + 'provider_id': '$provider_id' + }, + label=_('Provider network') + ) + type_id = DynamicModelMultipleChoiceField( + queryset=VirtualCircuitType.objects.all(), + required=False, + label=_('Type') + ) + status = forms.MultipleChoiceField( + label=_('Status'), + choices=CircuitStatusChoices, + required=False + ) + tag = TagFilterField(model) + + +class VirtualCircuitTerminationFilterForm(NetBoxModelFilterSetForm): + model = VirtualCircuitTermination + fieldsets = ( + FieldSet('q', 'filter_id', 'tag'), + FieldSet('virtual_circuit_id', 'role', name=_('Virtual circuit')), + FieldSet('provider_id', 'provider_account_id', 'provider_network_id', name=_('Provider')), + ) + virtual_circuit_id = DynamicModelMultipleChoiceField( + queryset=VirtualCircuit.objects.all(), + required=False, + label=_('Virtual circuit') + ) + role = forms.MultipleChoiceField( + label=_('Role'), + choices=VirtualCircuitTerminationRoleChoices, + required=False + ) + provider_network_id = DynamicModelMultipleChoiceField( + queryset=ProviderNetwork.objects.all(), + required=False, + query_params={ + 'provider_id': '$provider_id' + }, + label=_('Provider network') + ) + provider_id = DynamicModelMultipleChoiceField( + queryset=Provider.objects.all(), + required=False, + label=_('Provider') + ) + tag = TagFilterField(model) diff --git a/netbox/circuits/forms/model_forms.py b/netbox/circuits/forms/model_forms.py index 9a54fdccb..6f8ab783d 100644 --- a/netbox/circuits/forms/model_forms.py +++ b/netbox/circuits/forms/model_forms.py @@ -1,14 +1,24 @@ +from django import forms +from django.contrib.contenttypes.models import ContentType +from django.core.exceptions import ObjectDoesNotExist from django.utils.translation import gettext_lazy as _ -from circuits.choices import CircuitCommitRateChoices, CircuitTerminationPortSpeedChoices +from circuits.choices import ( + CircuitCommitRateChoices, CircuitTerminationPortSpeedChoices, VirtualCircuitTerminationRoleChoices, +) +from circuits.constants import * from circuits.models import * -from dcim.models import Site +from dcim.models import Interface, Site from ipam.models import ASN from netbox.forms import NetBoxModelForm from tenancy.forms import TenancyForm -from utilities.forms.fields import CommentField, DynamicModelChoiceField, DynamicModelMultipleChoiceField, SlugField -from utilities.forms.rendering import FieldSet, TabbedGroups -from utilities.forms.widgets import DatePicker, NumberWithOptions +from utilities.forms import get_field_value +from utilities.forms.fields import ( + CommentField, ContentTypeChoiceField, DynamicModelChoiceField, DynamicModelMultipleChoiceField, SlugField, +) +from utilities.forms.rendering import FieldSet, InlineFields +from utilities.forms.widgets import DatePicker, HTMXSelect, NumberWithOptions +from utilities.templatetags.builtins.filters import bettertitle __all__ = ( 'CircuitForm', @@ -19,6 +29,9 @@ __all__ = ( 'ProviderForm', 'ProviderAccountForm', 'ProviderNetworkForm', + 'VirtualCircuitForm', + 'VirtualCircuitTerminationForm', + 'VirtualCircuitTypeForm', ) @@ -45,7 +58,9 @@ class ProviderForm(NetBoxModelForm): class ProviderAccountForm(NetBoxModelForm): provider = DynamicModelChoiceField( label=_('Provider'), - queryset=Provider.objects.all() + queryset=Provider.objects.all(), + selector=True, + quick_add=True ) comments = CommentField() @@ -59,7 +74,9 @@ class ProviderAccountForm(NetBoxModelForm): class ProviderNetworkForm(NetBoxModelForm): provider = DynamicModelChoiceField( label=_('Provider'), - queryset=Provider.objects.all() + queryset=Provider.objects.all(), + selector=True, + quick_add=True ) comments = CommentField() @@ -92,7 +109,8 @@ class CircuitForm(TenancyForm, NetBoxModelForm): provider = DynamicModelChoiceField( label=_('Provider'), queryset=Provider.objects.all(), - selector=True + selector=True, + quick_add=True ) provider_account = DynamicModelChoiceField( label=_('Provider account'), @@ -103,12 +121,23 @@ class CircuitForm(TenancyForm, NetBoxModelForm): } ) type = DynamicModelChoiceField( - queryset=CircuitType.objects.all() + queryset=CircuitType.objects.all(), + quick_add=True ) comments = CommentField() fieldsets = ( - FieldSet('provider', 'provider_account', 'cid', 'type', 'status', 'description', 'tags', name=_('Circuit')), + FieldSet( + 'provider', + 'provider_account', + 'cid', + 'type', + 'status', + InlineFields('distance', 'distance_unit', label=_('Distance')), + 'description', + 'tags', + name=_('Circuit') + ), FieldSet('install_date', 'termination_date', 'commit_rate', name=_('Service Parameters')), FieldSet('tenant_group', 'tenant', name=_('Tenancy')), ) @@ -117,7 +146,7 @@ class CircuitForm(TenancyForm, NetBoxModelForm): model = Circuit fields = [ 'cid', 'type', 'provider', 'provider_account', 'status', 'install_date', 'termination_date', 'commit_rate', - 'description', 'tenant_group', 'tenant', 'comments', 'tags', + 'distance', 'distance_unit', 'description', 'tenant_group', 'tenant', 'comments', 'tags', ] widgets = { 'install_date': DatePicker(), @@ -134,26 +163,24 @@ class CircuitTerminationForm(NetBoxModelForm): queryset=Circuit.objects.all(), selector=True ) - site = DynamicModelChoiceField( - label=_('Site'), - queryset=Site.objects.all(), + termination_type = ContentTypeChoiceField( + queryset=ContentType.objects.filter(model__in=CIRCUIT_TERMINATION_TERMINATION_TYPES), + widget=HTMXSelect(), required=False, - selector=True + label=_('Termination type') ) - provider_network = DynamicModelChoiceField( - label=_('Provider network'), - queryset=ProviderNetwork.objects.all(), + termination = DynamicModelChoiceField( + label=_('Termination'), + queryset=Site.objects.none(), # Initial queryset required=False, + disabled=True, selector=True ) fieldsets = ( FieldSet( 'circuit', 'term_side', 'description', 'tags', - TabbedGroups( - FieldSet('site', name=_('Site')), - FieldSet('provider_network', name=_('Provider Network')), - ), + 'termination_type', 'termination', 'mark_connected', name=_('Circuit Termination') ), FieldSet('port_speed', 'upstream_speed', 'xconnect_id', 'pp_info', name=_('Termination Details')), @@ -162,7 +189,7 @@ class CircuitTerminationForm(NetBoxModelForm): class Meta: model = CircuitTermination fields = [ - 'circuit', 'term_side', 'site', 'provider_network', 'mark_connected', 'port_speed', 'upstream_speed', + 'circuit', 'term_side', 'termination_type', 'mark_connected', 'port_speed', 'upstream_speed', 'xconnect_id', 'pp_info', 'description', 'tags', ] widgets = { @@ -174,6 +201,36 @@ class CircuitTerminationForm(NetBoxModelForm): ), } + def __init__(self, *args, **kwargs): + instance = kwargs.get('instance') + initial = kwargs.get('initial', {}) + + if instance is not None and instance.termination: + initial['termination'] = instance.termination + kwargs['initial'] = initial + + super().__init__(*args, **kwargs) + + if termination_type_id := get_field_value(self, 'termination_type'): + try: + termination_type = ContentType.objects.get(pk=termination_type_id) + model = termination_type.model_class() + self.fields['termination'].queryset = model.objects.all() + self.fields['termination'].widget.attrs['selector'] = model._meta.label_lower + self.fields['termination'].disabled = False + self.fields['termination'].label = _(bettertitle(model._meta.verbose_name)) + except ObjectDoesNotExist: + pass + + if self.instance and termination_type_id != self.instance.termination_type_id: + self.initial['termination'] = None + + def clean(self): + super().clean() + + # Assign the selected termination (if any) + self.instance.termination = self.cleaned_data.get('termination') + class CircuitGroupForm(TenancyForm, NetBoxModelForm): slug = SlugField() @@ -195,14 +252,137 @@ class CircuitGroupAssignmentForm(NetBoxModelForm): label=_('Group'), queryset=CircuitGroup.objects.all(), ) - circuit = DynamicModelChoiceField( + member_type = ContentTypeChoiceField( + queryset=ContentType.objects.filter(CIRCUIT_GROUP_ASSIGNMENT_MEMBER_MODELS), + widget=HTMXSelect(), + required=False, + label=_('Circuit type') + ) + member = DynamicModelChoiceField( label=_('Circuit'), - queryset=Circuit.objects.all(), + queryset=Circuit.objects.none(), # Initial queryset + required=False, + disabled=True, selector=True ) + fieldsets = ( + FieldSet('group', 'member_type', 'member', 'priority', 'tags', name=_('Group Assignment')), + ) + class Meta: model = CircuitGroupAssignment fields = [ - 'group', 'circuit', 'priority', 'tags', + 'group', 'member_type', 'priority', 'tags', + ] + + def __init__(self, *args, **kwargs): + instance = kwargs.get('instance') + initial = kwargs.get('initial', {}) + + if instance is not None and instance.member: + initial['member'] = instance.member + kwargs['initial'] = initial + + super().__init__(*args, **kwargs) + + if member_type_id := get_field_value(self, 'member_type'): + try: + model = ContentType.objects.get(pk=member_type_id).model_class() + self.fields['member'].queryset = model.objects.all() + self.fields['member'].widget.attrs['selector'] = model._meta.label_lower + self.fields['member'].disabled = False + self.fields['member'].label = _(bettertitle(model._meta.verbose_name)) + except ObjectDoesNotExist: + pass + + if self.instance.pk and member_type_id != self.instance.member_type_id: + self.initial['member'] = None + + def clean(self): + super().clean() + + # Assign the selected circuit (if any) + self.instance.member = self.cleaned_data.get('member') + + +class VirtualCircuitTypeForm(NetBoxModelForm): + slug = SlugField() + + fieldsets = ( + FieldSet('name', 'slug', 'color', 'description', 'tags'), + ) + + class Meta: + model = VirtualCircuitType + fields = [ + 'name', 'slug', 'color', 'description', 'tags', + ] + + +class VirtualCircuitForm(TenancyForm, NetBoxModelForm): + provider_network = DynamicModelChoiceField( + label=_('Provider network'), + queryset=ProviderNetwork.objects.all(), + selector=True + ) + provider_account = DynamicModelChoiceField( + label=_('Provider account'), + queryset=ProviderAccount.objects.all(), + required=False + ) + type = DynamicModelChoiceField( + queryset=VirtualCircuitType.objects.all(), + quick_add=True + ) + comments = CommentField() + + fieldsets = ( + FieldSet( + 'provider_network', 'provider_account', 'cid', 'type', 'status', 'description', 'tags', + name=_('Virtual circuit'), + ), + FieldSet('tenant_group', 'tenant', name=_('Tenancy')), + ) + + class Meta: + model = VirtualCircuit + fields = [ + 'cid', 'provider_network', 'provider_account', 'type', 'status', 'description', 'tenant_group', 'tenant', + 'comments', 'tags', + ] + + +class VirtualCircuitTerminationForm(NetBoxModelForm): + virtual_circuit = DynamicModelChoiceField( + label=_('Virtual circuit'), + queryset=VirtualCircuit.objects.all(), + selector=True + ) + role = forms.ChoiceField( + choices=VirtualCircuitTerminationRoleChoices, + widget=HTMXSelect(), + label=_('Role') + ) + interface = DynamicModelChoiceField( + label=_('Interface'), + queryset=Interface.objects.all(), + selector=True, + query_params={ + 'kind': 'virtual', + 'virtual_circuit_termination_id': 'null', + }, + context={ + 'parent': 'device', + } + ) + + fieldsets = ( + FieldSet('virtual_circuit', 'role', 'interface', 'description', 'tags'), + ) + + class Meta: + model = VirtualCircuitTermination + fields = [ + 'virtual_circuit', 'role', 'interface', 'description', 'tags', ] diff --git a/netbox/circuits/graphql/filters.py b/netbox/circuits/graphql/filters.py index b8398b2b9..7d066f428 100644 --- a/netbox/circuits/graphql/filters.py +++ b/netbox/circuits/graphql/filters.py @@ -4,14 +4,17 @@ from circuits import filtersets, models from netbox.graphql.filter_mixins import autotype_decorator, BaseFilterMixin __all__ = ( - 'CircuitTerminationFilter', 'CircuitFilter', 'CircuitGroupAssignmentFilter', 'CircuitGroupFilter', + 'CircuitTerminationFilter', 'CircuitTypeFilter', 'ProviderFilter', 'ProviderAccountFilter', 'ProviderNetworkFilter', + 'VirtualCircuitFilter', + 'VirtualCircuitTerminationFilter', + 'VirtualCircuitTypeFilter', ) @@ -61,3 +64,21 @@ class ProviderAccountFilter(BaseFilterMixin): @autotype_decorator(filtersets.ProviderNetworkFilterSet) class ProviderNetworkFilter(BaseFilterMixin): pass + + +@strawberry_django.filter(models.VirtualCircuitType, lookups=True) +@autotype_decorator(filtersets.VirtualCircuitTypeFilterSet) +class VirtualCircuitTypeFilter(BaseFilterMixin): + pass + + +@strawberry_django.filter(models.VirtualCircuit, lookups=True) +@autotype_decorator(filtersets.VirtualCircuitFilterSet) +class VirtualCircuitFilter(BaseFilterMixin): + pass + + +@strawberry_django.filter(models.VirtualCircuitTermination, lookups=True) +@autotype_decorator(filtersets.VirtualCircuitTerminationFilterSet) +class VirtualCircuitTerminationFilter(BaseFilterMixin): + pass diff --git a/netbox/circuits/graphql/schema.py b/netbox/circuits/graphql/schema.py index ac23421ce..63bd7bba6 100644 --- a/netbox/circuits/graphql/schema.py +++ b/netbox/circuits/graphql/schema.py @@ -31,3 +31,12 @@ class CircuitsQuery: provider_network: ProviderNetworkType = strawberry_django.field() provider_network_list: List[ProviderNetworkType] = strawberry_django.field() + + virtual_circuit: VirtualCircuitType = strawberry_django.field() + virtual_circuit_list: List[VirtualCircuitType] = strawberry_django.field() + + virtual_circuit_termination: VirtualCircuitTerminationType = strawberry_django.field() + virtual_circuit_termination_list: List[VirtualCircuitTerminationType] = strawberry_django.field() + + virtual_circuit_type: VirtualCircuitTypeType = strawberry_django.field() + virtual_circuit_type_list: List[VirtualCircuitTypeType] = strawberry_django.field() diff --git a/netbox/circuits/graphql/types.py b/netbox/circuits/graphql/types.py index 45f0d065d..564b5ed6f 100644 --- a/netbox/circuits/graphql/types.py +++ b/netbox/circuits/graphql/types.py @@ -1,4 +1,4 @@ -from typing import Annotated, List +from typing import Annotated, List, Union import strawberry import strawberry_django @@ -19,6 +19,9 @@ __all__ = ( 'ProviderType', 'ProviderAccountType', 'ProviderNetworkType', + 'VirtualCircuitTerminationType', + 'VirtualCircuitType', + 'VirtualCircuitTypeType', ) @@ -59,13 +62,21 @@ class ProviderNetworkType(NetBoxObjectType): @strawberry_django.type( models.CircuitTermination, - fields='__all__', + exclude=('termination_type', 'termination_id', '_location', '_region', '_site', '_site_group', '_provider_network'), filters=CircuitTerminationFilter ) class CircuitTerminationType(CustomFieldsMixin, TagsMixin, CabledObjectMixin, ObjectType): circuit: Annotated["CircuitType", strawberry.lazy('circuits.graphql.types')] - provider_network: Annotated["ProviderNetworkType", strawberry.lazy('circuits.graphql.types')] | None - site: Annotated["SiteType", strawberry.lazy('dcim.graphql.types')] | None + + @strawberry_django.field + def termination(self) -> Annotated[Union[ + Annotated["LocationType", strawberry.lazy('dcim.graphql.types')], + Annotated["RegionType", strawberry.lazy('dcim.graphql.types')], + Annotated["SiteGroupType", strawberry.lazy('dcim.graphql.types')], + Annotated["SiteType", strawberry.lazy('dcim.graphql.types')], + Annotated["ProviderNetworkType", strawberry.lazy('circuits.graphql.types')], + ], strawberry.union("CircuitTerminationTerminationType")] | None: + return self.termination @strawberry_django.type( @@ -106,9 +117,58 @@ class CircuitGroupType(OrganizationalObjectType): @strawberry_django.type( models.CircuitGroupAssignment, - fields='__all__', + exclude=('member_type', 'member_id'), filters=CircuitGroupAssignmentFilter ) class CircuitGroupAssignmentType(TagsMixin, BaseObjectType): group: Annotated["CircuitGroupType", strawberry.lazy('circuits.graphql.types')] - circuit: Annotated["CircuitType", strawberry.lazy('circuits.graphql.types')] + + @strawberry_django.field + def member(self) -> Annotated[Union[ + Annotated["CircuitType", strawberry.lazy('circuits.graphql.types')], + Annotated["VirtualCircuitType", strawberry.lazy('circuits.graphql.types')], + ], strawberry.union("CircuitGroupAssignmentMemberType")] | None: + return self.member + + +@strawberry_django.type( + models.VirtualCircuitType, + fields='__all__', + filters=VirtualCircuitTypeFilter +) +class VirtualCircuitTypeType(OrganizationalObjectType): + color: str + + virtual_circuits: List[Annotated["VirtualCircuitType", strawberry.lazy('circuits.graphql.types')]] + + +@strawberry_django.type( + models.VirtualCircuitTermination, + fields='__all__', + filters=VirtualCircuitTerminationFilter +) +class VirtualCircuitTerminationType(CustomFieldsMixin, TagsMixin, ObjectType): + virtual_circuit: Annotated[ + "VirtualCircuitType", + strawberry.lazy('circuits.graphql.types') + ] = strawberry_django.field(select_related=["virtual_circuit"]) + interface: Annotated[ + "InterfaceType", + strawberry.lazy('dcim.graphql.types') + ] = strawberry_django.field(select_related=["interface"]) + + +@strawberry_django.type( + models.VirtualCircuit, + fields='__all__', + filters=VirtualCircuitFilter +) +class VirtualCircuitType(NetBoxObjectType): + provider_network: ProviderNetworkType = strawberry_django.field(select_related=["provider_network"]) + provider_account: ProviderAccountType | None + type: Annotated["VirtualCircuitTypeType", strawberry.lazy('circuits.graphql.types')] = strawberry_django.field( + select_related=["type"] + ) + tenant: TenantType | None + + terminations: List[VirtualCircuitTerminationType] diff --git a/netbox/circuits/migrations/0001_squashed.py b/netbox/circuits/migrations/0001_squashed.py index 96fa3c086..0b3d729e6 100644 --- a/netbox/circuits/migrations/0001_squashed.py +++ b/netbox/circuits/migrations/0001_squashed.py @@ -5,11 +5,9 @@ import django.db.models.deletion class Migration(migrations.Migration): - initial = True - dependencies = [ - ] + dependencies = [] replaces = [ ('circuits', '0001_initial'), @@ -98,7 +96,12 @@ class Migration(migrations.Migration): ('name', models.CharField(max_length=100)), ('description', models.CharField(blank=True, max_length=200)), ('comments', models.TextField(blank=True)), - ('provider', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='networks', to='circuits.provider')), + ( + 'provider', + models.ForeignKey( + on_delete=django.db.models.deletion.PROTECT, related_name='networks', to='circuits.provider' + ), + ), ], options={ 'ordering': ('provider', 'name'), diff --git a/netbox/circuits/migrations/0002_squashed_0029.py b/netbox/circuits/migrations/0002_squashed_0029.py index 11fcbd6e6..cb61d8feb 100644 --- a/netbox/circuits/migrations/0002_squashed_0029.py +++ b/netbox/circuits/migrations/0002_squashed_0029.py @@ -4,7 +4,6 @@ import taggit.managers class Migration(migrations.Migration): - dependencies = [ ('dcim', '0001_initial'), ('contenttypes', '0002_remove_content_type_name'), @@ -58,32 +57,56 @@ class Migration(migrations.Migration): migrations.AddField( model_name='circuittermination', name='_cable_peer_type', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='contenttypes.contenttype'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='+', + to='contenttypes.contenttype', + ), ), migrations.AddField( model_name='circuittermination', name='cable', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.cable'), + field=models.ForeignKey( + blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.cable' + ), ), migrations.AddField( model_name='circuittermination', name='circuit', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='terminations', to='circuits.circuit'), + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, related_name='terminations', to='circuits.circuit' + ), ), migrations.AddField( model_name='circuittermination', name='provider_network', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='circuit_terminations', to='circuits.providernetwork'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='circuit_terminations', + to='circuits.providernetwork', + ), ), migrations.AddField( model_name='circuittermination', name='site', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='circuit_terminations', to='dcim.site'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='circuit_terminations', + to='dcim.site', + ), ), migrations.AddField( model_name='circuit', name='provider', - field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='circuits', to='circuits.provider'), + field=models.ForeignKey( + on_delete=django.db.models.deletion.PROTECT, related_name='circuits', to='circuits.provider' + ), ), migrations.AddField( model_name='circuit', @@ -93,26 +116,50 @@ class Migration(migrations.Migration): migrations.AddField( model_name='circuit', name='tenant', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='circuits', to='tenancy.tenant'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='circuits', + to='tenancy.tenant', + ), ), migrations.AddField( model_name='circuit', name='termination_a', - field=models.ForeignKey(blank=True, editable=False, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='circuits.circuittermination'), + field=models.ForeignKey( + blank=True, + editable=False, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='+', + to='circuits.circuittermination', + ), ), migrations.AddField( model_name='circuit', name='termination_z', - field=models.ForeignKey(blank=True, editable=False, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='circuits.circuittermination'), + field=models.ForeignKey( + blank=True, + editable=False, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='+', + to='circuits.circuittermination', + ), ), migrations.AddField( model_name='circuit', name='type', - field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='circuits', to='circuits.circuittype'), + field=models.ForeignKey( + on_delete=django.db.models.deletion.PROTECT, related_name='circuits', to='circuits.circuittype' + ), ), migrations.AddConstraint( model_name='providernetwork', - constraint=models.UniqueConstraint(fields=('provider', 'name'), name='circuits_providernetwork_provider_name'), + constraint=models.UniqueConstraint( + fields=('provider', 'name'), name='circuits_providernetwork_provider_name' + ), ), migrations.AlterUniqueTogether( name='providernetwork', diff --git a/netbox/circuits/migrations/0003_squashed_0037.py b/netbox/circuits/migrations/0003_squashed_0037.py index 69c3e1c68..c536e422f 100644 --- a/netbox/circuits/migrations/0003_squashed_0037.py +++ b/netbox/circuits/migrations/0003_squashed_0037.py @@ -5,7 +5,6 @@ import utilities.json class Migration(migrations.Migration): - replaces = [ ('circuits', '0003_extend_tag_support'), ('circuits', '0004_rename_cable_peer'), @@ -14,7 +13,7 @@ class Migration(migrations.Migration): ('circuits', '0034_created_datetimefield'), ('circuits', '0035_provider_asns'), ('circuits', '0036_circuit_termination_date_tags_custom_fields'), - ('circuits', '0037_new_cabling_models') + ('circuits', '0037_new_cabling_models'), ] dependencies = [ diff --git a/netbox/circuits/migrations/0038_squashed_0042.py b/netbox/circuits/migrations/0038_squashed_0042.py index f57fde3db..fa944b763 100644 --- a/netbox/circuits/migrations/0038_squashed_0042.py +++ b/netbox/circuits/migrations/0038_squashed_0042.py @@ -6,13 +6,12 @@ import utilities.json class Migration(migrations.Migration): - replaces = [ ('circuits', '0038_cabling_cleanup'), ('circuits', '0039_unique_constraints'), ('circuits', '0040_provider_remove_deprecated_fields'), ('circuits', '0041_standardize_description_comments'), - ('circuits', '0042_provideraccount') + ('circuits', '0042_provideraccount'), ] dependencies = [ @@ -51,11 +50,15 @@ class Migration(migrations.Migration): ), migrations.AddConstraint( model_name='circuittermination', - constraint=models.UniqueConstraint(fields=('circuit', 'term_side'), name='circuits_circuittermination_unique_circuit_term_side'), + constraint=models.UniqueConstraint( + fields=('circuit', 'term_side'), name='circuits_circuittermination_unique_circuit_term_side' + ), ), migrations.AddConstraint( model_name='providernetwork', - constraint=models.UniqueConstraint(fields=('provider', 'name'), name='circuits_providernetwork_unique_provider_name'), + constraint=models.UniqueConstraint( + fields=('provider', 'name'), name='circuits_providernetwork_unique_provider_name' + ), ), migrations.RemoveField( model_name='provider', @@ -84,12 +87,20 @@ class Migration(migrations.Migration): ('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)), + ( + 'custom_field_data', + models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder), + ), ('description', models.CharField(blank=True, max_length=200)), ('comments', models.TextField(blank=True)), ('account', models.CharField(max_length=100)), ('name', models.CharField(blank=True, max_length=100)), - ('provider', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='accounts', to='circuits.provider')), + ( + 'provider', + models.ForeignKey( + on_delete=django.db.models.deletion.PROTECT, related_name='accounts', to='circuits.provider' + ), + ), ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), ], options={ @@ -98,11 +109,17 @@ class Migration(migrations.Migration): ), migrations.AddConstraint( model_name='provideraccount', - constraint=models.UniqueConstraint(condition=models.Q(('name', ''), _negated=True), fields=('provider', 'name'), name='circuits_provideraccount_unique_provider_name'), + constraint=models.UniqueConstraint( + condition=models.Q(('name', ''), _negated=True), + fields=('provider', 'name'), + name='circuits_provideraccount_unique_provider_name', + ), ), migrations.AddConstraint( model_name='provideraccount', - constraint=models.UniqueConstraint(fields=('provider', 'account'), name='circuits_provideraccount_unique_provider_account'), + constraint=models.UniqueConstraint( + fields=('provider', 'account'), name='circuits_provideraccount_unique_provider_account' + ), ), migrations.RemoveField( model_name='provider', @@ -111,7 +128,13 @@ class Migration(migrations.Migration): migrations.AddField( model_name='circuit', name='provider_account', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='circuits', to='circuits.provideraccount'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='circuits', + to='circuits.provideraccount', + ), preserve_default=False, ), migrations.AlterModelOptions( @@ -120,6 +143,8 @@ class Migration(migrations.Migration): ), migrations.AddConstraint( model_name='circuit', - constraint=models.UniqueConstraint(fields=('provider_account', 'cid'), name='circuits_circuit_unique_provideraccount_cid'), + constraint=models.UniqueConstraint( + fields=('provider_account', 'cid'), name='circuits_circuit_unique_provideraccount_cid' + ), ), ] diff --git a/netbox/circuits/migrations/0044_circuit_groups.py b/netbox/circuits/migrations/0044_circuit_groups.py index 98c3b8f3d..08f6bc158 100644 --- a/netbox/circuits/migrations/0044_circuit_groups.py +++ b/netbox/circuits/migrations/0044_circuit_groups.py @@ -5,7 +5,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('circuits', '0043_circuittype_color'), ('extras', '0119_notifications'), diff --git a/netbox/circuits/migrations/0045_circuit_distance.py b/netbox/circuits/migrations/0045_circuit_distance.py new file mode 100644 index 000000000..9e512e7ee --- /dev/null +++ b/netbox/circuits/migrations/0045_circuit_distance.py @@ -0,0 +1,27 @@ +# Generated by Django 5.0.9 on 2024-09-26 22:14 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ('circuits', '0044_circuit_groups'), + ] + + operations = [ + migrations.AddField( + model_name='circuit', + name='_abs_distance', + field=models.DecimalField(blank=True, decimal_places=4, max_digits=10, null=True), + ), + migrations.AddField( + model_name='circuit', + name='distance', + field=models.DecimalField(blank=True, decimal_places=2, max_digits=8, null=True), + ), + migrations.AddField( + model_name='circuit', + name='distance_unit', + field=models.CharField(blank=True, max_length=50), + ), + ] diff --git a/netbox/circuits/migrations/0046_charfield_null_choices.py b/netbox/circuits/migrations/0046_charfield_null_choices.py new file mode 100644 index 000000000..2a8bcde90 --- /dev/null +++ b/netbox/circuits/migrations/0046_charfield_null_choices.py @@ -0,0 +1,39 @@ +from django.db import migrations, models + + +def set_null_values(apps, schema_editor): + """ + Replace empty strings with null values. + """ + Circuit = apps.get_model('circuits', 'Circuit') + CircuitGroupAssignment = apps.get_model('circuits', 'CircuitGroupAssignment') + CircuitTermination = apps.get_model('circuits', 'CircuitTermination') + + Circuit.objects.filter(distance_unit='').update(distance_unit=None) + CircuitGroupAssignment.objects.filter(priority='').update(priority=None) + CircuitTermination.objects.filter(cable_end='').update(cable_end=None) + + +class Migration(migrations.Migration): + dependencies = [ + ('circuits', '0045_circuit_distance'), + ] + + operations = [ + migrations.AlterField( + model_name='circuit', + name='distance_unit', + field=models.CharField(blank=True, max_length=50, null=True), + ), + migrations.AlterField( + model_name='circuitgroupassignment', + name='priority', + field=models.CharField(blank=True, max_length=50, null=True), + ), + migrations.AlterField( + model_name='circuittermination', + name='cable_end', + field=models.CharField(blank=True, max_length=1, null=True), + ), + migrations.RunPython(code=set_null_values, reverse_code=migrations.RunPython.noop), + ] diff --git a/netbox/circuits/migrations/0047_circuittermination__termination.py b/netbox/circuits/migrations/0047_circuittermination__termination.py new file mode 100644 index 000000000..f78e17ec3 --- /dev/null +++ b/netbox/circuits/migrations/0047_circuittermination__termination.py @@ -0,0 +1,53 @@ +import django.db.models.deletion +from django.db import migrations, models + + +def copy_site_assignments(apps, schema_editor): + """ + Copy site ForeignKey values to the Termination GFK. + """ + ContentType = apps.get_model('contenttypes', 'ContentType') + CircuitTermination = apps.get_model('circuits', 'CircuitTermination') + Site = apps.get_model('dcim', 'Site') + + CircuitTermination.objects.filter(site__isnull=False).update( + termination_type=ContentType.objects.get_for_model(Site), termination_id=models.F('site_id') + ) + + ProviderNetwork = apps.get_model('circuits', 'ProviderNetwork') + CircuitTermination.objects.filter(provider_network__isnull=False).update( + termination_type=ContentType.objects.get_for_model(ProviderNetwork), + termination_id=models.F('provider_network_id'), + ) + + +class Migration(migrations.Migration): + dependencies = [ + ('circuits', '0046_charfield_null_choices'), + ('contenttypes', '0002_remove_content_type_name'), + ('dcim', '0193_poweroutlet_color'), + ] + + operations = [ + migrations.AddField( + model_name='circuittermination', + name='termination_id', + field=models.PositiveBigIntegerField(blank=True, null=True), + ), + migrations.AddField( + model_name='circuittermination', + name='termination_type', + field=models.ForeignKey( + blank=True, + limit_choices_to=models.Q( + ('model__in', ('region', 'sitegroup', 'site', 'location', 'providernetwork')) + ), + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='+', + to='contenttypes.contenttype', + ), + ), + # Copy over existing site assignments + migrations.RunPython(code=copy_site_assignments, reverse_code=migrations.RunPython.noop), + ] diff --git a/netbox/circuits/migrations/0048_circuitterminations_cached_relations.py b/netbox/circuits/migrations/0048_circuitterminations_cached_relations.py new file mode 100644 index 000000000..9be254d54 --- /dev/null +++ b/netbox/circuits/migrations/0048_circuitterminations_cached_relations.py @@ -0,0 +1,83 @@ +import django.db.models.deletion +from django.db import migrations, models + + +def populate_denormalized_fields(apps, schema_editor): + """ + Copy site ForeignKey values to the Termination GFK. + """ + CircuitTermination = apps.get_model('circuits', 'CircuitTermination') + + terminations = CircuitTermination.objects.filter(site__isnull=False).prefetch_related('site') + for termination in terminations: + termination._region_id = termination.site.region_id + termination._site_group_id = termination.site.group_id + termination._site_id = termination.site_id + # Note: Location cannot be set prior to migration + + CircuitTermination.objects.bulk_update(terminations, ['_region', '_site_group', '_site'], batch_size=100) + + +class Migration(migrations.Migration): + dependencies = [ + ('circuits', '0047_circuittermination__termination'), + ] + + operations = [ + migrations.AddField( + model_name='circuittermination', + name='_location', + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name='circuit_terminations', + to='dcim.location', + ), + ), + migrations.AddField( + model_name='circuittermination', + name='_region', + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name='circuit_terminations', + to='dcim.region', + ), + ), + migrations.AddField( + model_name='circuittermination', + name='_site', + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name='circuit_terminations', + to='dcim.site', + ), + ), + migrations.AddField( + model_name='circuittermination', + name='_site_group', + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name='circuit_terminations', + to='dcim.sitegroup', + ), + ), + # Populate denormalized FK values + migrations.RunPython(code=populate_denormalized_fields, reverse_code=migrations.RunPython.noop), + # Delete the site ForeignKey + migrations.RemoveField( + model_name='circuittermination', + name='site', + ), + migrations.RenameField( + model_name='circuittermination', + old_name='provider_network', + new_name='_provider_network', + ), + ] diff --git a/netbox/circuits/migrations/0049_natural_ordering.py b/netbox/circuits/migrations/0049_natural_ordering.py new file mode 100644 index 000000000..556d6ec7c --- /dev/null +++ b/netbox/circuits/migrations/0049_natural_ordering.py @@ -0,0 +1,21 @@ +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ('circuits', '0048_circuitterminations_cached_relations'), + ('dcim', '0197_natural_sort_collation'), + ] + + operations = [ + migrations.AlterField( + model_name='provider', + name='name', + field=models.CharField(db_collation='natural_sort', max_length=100, unique=True), + ), + migrations.AlterField( + model_name='providernetwork', + name='name', + field=models.CharField(db_collation='natural_sort', max_length=100), + ), + ] diff --git a/netbox/circuits/migrations/0050_virtual_circuits.py b/netbox/circuits/migrations/0050_virtual_circuits.py new file mode 100644 index 000000000..9987b95ac --- /dev/null +++ b/netbox/circuits/migrations/0050_virtual_circuits.py @@ -0,0 +1,147 @@ +import django.db.models.deletion +import taggit.managers +from django.db import migrations, models + +import utilities.fields +import utilities.json + + +class Migration(migrations.Migration): + dependencies = [ + ('circuits', '0049_natural_ordering'), + ('dcim', '0196_qinq_svlan'), + ('extras', '0122_charfield_null_choices'), + ('tenancy', '0016_charfield_null_choices'), + ] + + operations = [ + migrations.CreateModel( + name='VirtualCircuitType', + 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 + )), + ('name', models.CharField(max_length=100, unique=True)), + ('slug', models.SlugField(max_length=100, unique=True)), + ('description', models.CharField(blank=True, max_length=200)), + ('color', utilities.fields.ColorField(blank=True, max_length=6)), + ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), + ], + options={ + 'verbose_name': 'virtual circuit type', + 'verbose_name_plural': 'virtual circuit types', + 'ordering': ('name',), + }, + ), + migrations.CreateModel( + name='VirtualCircuit', + 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), + ), + ('description', models.CharField(blank=True, max_length=200)), + ('comments', models.TextField(blank=True)), + ('cid', models.CharField(max_length=100)), + ('status', models.CharField(default='active', max_length=50)), + ( + 'provider_account', + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='virtual_circuits', + to='circuits.provideraccount', + ), + ), + ( + 'provider_network', + models.ForeignKey( + on_delete=django.db.models.deletion.PROTECT, + related_name='virtual_circuits', + to='circuits.providernetwork', + ), + ), + ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), + ( + 'type', + models.ForeignKey( + on_delete=django.db.models.deletion.PROTECT, + related_name='virtual_circuits', + to='circuits.virtualcircuittype' + ) + ), + ( + 'tenant', + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='virtual_circuits', + to='tenancy.tenant', + ), + ), + ], + options={ + 'verbose_name': 'circuit', + 'verbose_name_plural': 'circuits', + 'ordering': ['provider_network', 'provider_account', 'cid'], + }, + ), + migrations.CreateModel( + name='VirtualCircuitTermination', + 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), + ), + ('role', models.CharField(default='peer', max_length=50)), + ('description', models.CharField(blank=True, max_length=200)), + ( + 'interface', + models.OneToOneField( + on_delete=django.db.models.deletion.CASCADE, + related_name='virtual_circuit_termination', + to='dcim.interface', + ), + ), + ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), + ( + 'virtual_circuit', + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name='terminations', + to='circuits.virtualcircuit', + ), + ), + ], + options={ + 'verbose_name': 'virtual circuit termination', + 'verbose_name_plural': 'virtual circuit terminations', + 'ordering': ['virtual_circuit', 'role', 'pk'], + }, + ), + migrations.AddConstraint( + model_name='virtualcircuit', + constraint=models.UniqueConstraint( + fields=('provider_network', 'cid'), name='circuits_virtualcircuit_unique_provider_network_cid' + ), + ), + migrations.AddConstraint( + model_name='virtualcircuit', + constraint=models.UniqueConstraint( + fields=('provider_account', 'cid'), name='circuits_virtualcircuit_unique_provideraccount_cid' + ), + ), + ] diff --git a/netbox/circuits/migrations/0051_virtualcircuit_group_assignment.py b/netbox/circuits/migrations/0051_virtualcircuit_group_assignment.py new file mode 100644 index 000000000..f8c0fd653 --- /dev/null +++ b/netbox/circuits/migrations/0051_virtualcircuit_group_assignment.py @@ -0,0 +1,85 @@ +import django.db.models.deletion +from django.db import migrations, models + + +def set_member_type(apps, schema_editor): + """ + Set member_type on any existing CircuitGroupAssignments to the content type for Circuit. + """ + ContentType = apps.get_model('contenttypes', 'ContentType') + Circuit = apps.get_model('circuits', 'Circuit') + CircuitGroupAssignment = apps.get_model('circuits', 'CircuitGroupAssignment') + + CircuitGroupAssignment.objects.update( + member_type=ContentType.objects.get_for_model(Circuit) + ) + + +class Migration(migrations.Migration): + + dependencies = [ + ('circuits', '0050_virtual_circuits'), + ('contenttypes', '0002_remove_content_type_name'), + ('extras', '0122_charfield_null_choices'), + ] + + operations = [ + migrations.RemoveConstraint( + model_name='circuitgroupassignment', + name='circuits_circuitgroupassignment_unique_circuit_group', + ), + migrations.AlterModelOptions( + name='circuitgroupassignment', + options={'ordering': ('group', 'member_type', 'member_id', 'priority', 'pk')}, + ), + + # Change member_id to an integer field for the member GFK + migrations.RenameField( + model_name='circuitgroupassignment', + old_name='circuit', + new_name='member_id', + ), + migrations.AlterField( + model_name='circuitgroupassignment', + name='member_id', + field=models.PositiveBigIntegerField(), + ), + + # Add content type pointer for the member GFK + migrations.AddField( + model_name='circuitgroupassignment', + name='member_type', + field=models.ForeignKey( + on_delete=django.db.models.deletion.PROTECT, + limit_choices_to=models.Q(('app_label', 'circuits'), ('model__in', ['circuit', 'virtualcircuit'])), + related_name='+', + to='contenttypes.contenttype', + blank=True, + null=True + ), + preserve_default=False, + ), + + # Populate member_type for any existing assignments + migrations.RunPython(code=set_member_type, reverse_code=migrations.RunPython.noop), + + # Disallow null values for member_type + migrations.AlterField( + model_name='circuitgroupassignment', + name='member_type', + field=models.ForeignKey( + limit_choices_to=models.Q(('app_label', 'circuits'), ('model__in', ['circuit', 'virtualcircuit'])), + on_delete=django.db.models.deletion.PROTECT, + related_name='+', + to='contenttypes.contenttype' + ), + ), + + migrations.AddConstraint( + model_name='circuitgroupassignment', + constraint=models.UniqueConstraint( + fields=('member_type', 'member_id', 'group'), + name='circuits_circuitgroupassignment_unique_member_group' + ), + ), + ] diff --git a/netbox/circuits/models/__init__.py b/netbox/circuits/models/__init__.py index 7bbaf75d3..77382358b 100644 --- a/netbox/circuits/models/__init__.py +++ b/netbox/circuits/models/__init__.py @@ -1,2 +1,3 @@ from .circuits import * from .providers import * +from .virtual_circuits import * diff --git a/netbox/circuits/models/base.py b/netbox/circuits/models/base.py new file mode 100644 index 000000000..5b2a3c1b8 --- /dev/null +++ b/netbox/circuits/models/base.py @@ -0,0 +1,23 @@ +from django.utils.translation import gettext_lazy as _ + +from netbox.models import OrganizationalModel +from utilities.fields import ColorField + +__all__ = ( + 'BaseCircuitType', +) + + +class BaseCircuitType(OrganizationalModel): + """ + Abstract base model to represent a type of physical or virtual circuit. + Circuits can be organized by their functional role. For example, a user might wish to define CircuitTypes named + "Long Haul," "Metro," or "Out-of-Band". + """ + color = ColorField( + verbose_name=_('color'), + blank=True + ) + + class Meta: + abstract = True diff --git a/netbox/circuits/models/circuits.py b/netbox/circuits/models/circuits.py index 68c938aa9..9c7714153 100644 --- a/netbox/circuits/models/circuits.py +++ b/netbox/circuits/models/circuits.py @@ -1,13 +1,19 @@ +from django.apps import apps +from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation from django.core.exceptions import ValidationError from django.db import models from django.urls import reverse from django.utils.translation import gettext_lazy as _ from circuits.choices import * +from circuits.constants import * from dcim.models import CabledObjectModel from netbox.models import ChangeLoggedModel, OrganizationalModel, PrimaryModel -from netbox.models.features import ContactsMixin, CustomFieldsMixin, CustomLinksMixin, ExportTemplatesMixin, ImageAttachmentsMixin, TagsMixin -from utilities.fields import ColorField +from netbox.models.mixins import DistanceMixin +from netbox.models.features import ( + ContactsMixin, CustomFieldsMixin, CustomLinksMixin, ExportTemplatesMixin, ImageAttachmentsMixin, TagsMixin, +) +from .base import BaseCircuitType __all__ = ( 'Circuit', @@ -18,26 +24,18 @@ __all__ = ( ) -class CircuitType(OrganizationalModel): +class CircuitType(BaseCircuitType): """ Circuits can be organized by their functional role. For example, a user might wish to define CircuitTypes named "Long Haul," "Metro," or "Out-of-Band". """ - color = ColorField( - verbose_name=_('color'), - blank=True - ) - - def get_absolute_url(self): - return reverse('circuits:circuittype', args=[self.pk]) - class Meta: ordering = ('name',) verbose_name = _('circuit type') verbose_name_plural = _('circuit types') -class Circuit(ContactsMixin, ImageAttachmentsMixin, PrimaryModel): +class Circuit(ContactsMixin, ImageAttachmentsMixin, DistanceMixin, PrimaryModel): """ A communications circuit connects two points. Each Circuit belongs to a Provider; Providers may have multiple circuits. Each circuit is also assigned a CircuitType and a Site, and may optionally be assigned to a particular @@ -61,7 +59,7 @@ class Circuit(ContactsMixin, ImageAttachmentsMixin, PrimaryModel): null=True ) type = models.ForeignKey( - to='CircuitType', + to='circuits.CircuitType', on_delete=models.PROTECT, related_name='circuits' ) @@ -113,6 +111,13 @@ class Circuit(ContactsMixin, ImageAttachmentsMixin, PrimaryModel): null=True ) + group_assignments = GenericRelation( + to='circuits.CircuitGroupAssignment', + content_type_field='member_type', + object_id_field='member_id', + related_query_name='circuit' + ) + clone_fields = ( 'provider', 'provider_account', 'type', 'status', 'tenant', 'install_date', 'termination_date', 'commit_rate', 'description', @@ -140,9 +145,6 @@ class Circuit(ContactsMixin, ImageAttachmentsMixin, PrimaryModel): def __str__(self): return self.cid - def get_absolute_url(self): - return reverse('circuits:circuit', args=[self.pk]) - def get_status_color(self): return CircuitStatusChoices.colors.get(self.status) @@ -173,21 +175,26 @@ class CircuitGroup(OrganizationalModel): def __str__(self): return self.name - def get_absolute_url(self): - return reverse('circuits:circuitgroup', args=[self.pk]) - class CircuitGroupAssignment(CustomFieldsMixin, ExportTemplatesMixin, TagsMixin, ChangeLoggedModel): """ - Assignment of a Circuit to a CircuitGroup with an optional priority. + Assignment of a physical or virtual circuit to a CircuitGroup with an optional priority. """ - circuit = models.ForeignKey( - Circuit, - on_delete=models.CASCADE, - related_name='assignments' + member_type = models.ForeignKey( + to='contenttypes.ContentType', + limit_choices_to=CIRCUIT_GROUP_ASSIGNMENT_MEMBER_MODELS, + on_delete=models.PROTECT, + related_name='+' + ) + member_id = models.PositiveBigIntegerField( + verbose_name=_('member ID') + ) + member = GenericForeignKey( + ct_field='member_type', + fk_field='member_id' ) group = models.ForeignKey( - CircuitGroup, + to='circuits.CircuitGroup', on_delete=models.CASCADE, related_name='assignments' ) @@ -195,19 +202,19 @@ class CircuitGroupAssignment(CustomFieldsMixin, ExportTemplatesMixin, TagsMixin, verbose_name=_('priority'), max_length=50, choices=CircuitPriorityChoices, - blank=True + blank=True, + null=True ) prerequisite_models = ( - 'circuits.Circuit', 'circuits.CircuitGroup', ) class Meta: - ordering = ('group', 'circuit', 'priority', 'pk') + ordering = ('group', 'member_type', 'member_id', 'priority', 'pk') constraints = ( models.UniqueConstraint( - fields=('circuit', 'group'), - name='%(app_label)s_%(class)s_unique_circuit_group' + fields=('member_type', 'member_id', 'group'), + name='%(app_label)s_%(class)s_unique_member_group' ), ) verbose_name = _('Circuit group assignment') @@ -237,22 +244,24 @@ class CircuitTermination( term_side = models.CharField( max_length=1, choices=CircuitTerminationSideChoices, - verbose_name=_('termination') + verbose_name=_('termination side') ) - site = models.ForeignKey( - to='dcim.Site', + termination_type = models.ForeignKey( + to='contenttypes.ContentType', on_delete=models.PROTECT, - related_name='circuit_terminations', + limit_choices_to=Q(model__in=CIRCUIT_TERMINATION_TERMINATION_TYPES), + related_name='+', blank=True, null=True ) - provider_network = models.ForeignKey( - to='circuits.ProviderNetwork', - on_delete=models.PROTECT, - related_name='circuit_terminations', + termination_id = models.PositiveBigIntegerField( blank=True, null=True ) + termination = GenericForeignKey( + ct_field='termination_type', + fk_field='termination_id' + ) port_speed = models.PositiveIntegerField( verbose_name=_('port speed (Kbps)'), blank=True, @@ -283,6 +292,43 @@ class CircuitTermination( blank=True ) + # Cached associations to enable efficient filtering + _provider_network = models.ForeignKey( + to='circuits.ProviderNetwork', + on_delete=models.PROTECT, + related_name='circuit_terminations', + blank=True, + null=True + ) + _location = models.ForeignKey( + to='dcim.Location', + on_delete=models.CASCADE, + related_name='circuit_terminations', + blank=True, + null=True + ) + _site = models.ForeignKey( + to='dcim.Site', + on_delete=models.CASCADE, + related_name='circuit_terminations', + blank=True, + null=True + ) + _region = models.ForeignKey( + to='dcim.Region', + on_delete=models.CASCADE, + related_name='circuit_terminations', + blank=True, + null=True + ) + _site_group = models.ForeignKey( + to='dcim.SiteGroup', + on_delete=models.CASCADE, + related_name='circuit_terminations', + blank=True, + null=True + ) + class Meta: ordering = ['circuit', 'term_side'] constraints = ( @@ -304,10 +350,35 @@ class CircuitTermination( super().clean() # Must define either site *or* provider network - if self.site is None and self.provider_network is None: - raise ValidationError(_("A circuit termination must attach to either a site or a provider network.")) - if self.site and self.provider_network: - raise ValidationError(_("A circuit termination cannot attach to both a site and a provider network.")) + if self.termination is None: + raise ValidationError(_("A circuit termination must attach to termination.")) + + def save(self, *args, **kwargs): + # Cache objects associated with the terminating object (for filtering) + self.cache_related_objects() + + super().save(*args, **kwargs) + + def cache_related_objects(self): + self._provider_network = self._region = self._site_group = self._site = self._location = None + if self.termination_type: + termination_type = self.termination_type.model_class() + if termination_type == apps.get_model('dcim', 'region'): + self._region = self.termination + elif termination_type == apps.get_model('dcim', 'sitegroup'): + self._site_group = self.termination + elif termination_type == apps.get_model('dcim', 'site'): + self._region = self.termination.region + self._site_group = self.termination.group + self._site = self.termination + elif termination_type == apps.get_model('dcim', 'location'): + self._region = self.termination.site.region + self._site_group = self.termination.site.group + self._site = self.termination.site + self._location = self.termination + elif termination_type == apps.get_model('circuits', 'providernetwork'): + self._provider_network = self.termination + cache_related_objects.alters_data = True def to_objectchange(self, action): objectchange = super().to_objectchange(action) @@ -321,7 +392,7 @@ class CircuitTermination( def get_peer_termination(self): peer_side = 'Z' if self.term_side == 'A' else 'A' try: - return CircuitTermination.objects.prefetch_related('site').get( + return CircuitTermination.objects.prefetch_related('termination').get( circuit=self.circuit, term_side=peer_side ) diff --git a/netbox/circuits/models/providers.py b/netbox/circuits/models/providers.py index 31c8bccb2..be81caa54 100644 --- a/netbox/circuits/models/providers.py +++ b/netbox/circuits/models/providers.py @@ -1,6 +1,5 @@ from django.db import models from django.db.models import Q -from django.urls import reverse from django.utils.translation import gettext_lazy as _ from netbox.models import PrimaryModel @@ -22,7 +21,8 @@ class Provider(ContactsMixin, PrimaryModel): verbose_name=_('name'), max_length=100, unique=True, - help_text=_('Full name of the provider') + help_text=_('Full name of the provider'), + db_collation="natural_sort" ) slug = models.SlugField( verbose_name=_('slug'), @@ -45,9 +45,6 @@ class Provider(ContactsMixin, PrimaryModel): def __str__(self): return self.name - def get_absolute_url(self): - return reverse('circuits:provider', args=[self.pk]) - class ProviderAccount(ContactsMixin, PrimaryModel): """ @@ -91,9 +88,6 @@ class ProviderAccount(ContactsMixin, PrimaryModel): return f'{self.account} ({self.name})' return f'{self.account}' - def get_absolute_url(self): - return reverse('circuits:provideraccount', args=[self.pk]) - class ProviderNetwork(PrimaryModel): """ @@ -102,7 +96,8 @@ class ProviderNetwork(PrimaryModel): """ name = models.CharField( verbose_name=_('name'), - max_length=100 + max_length=100, + db_collation="natural_sort" ) provider = models.ForeignKey( to='circuits.Provider', @@ -128,6 +123,3 @@ class ProviderNetwork(PrimaryModel): def __str__(self): return self.name - - def get_absolute_url(self): - return reverse('circuits:providernetwork', args=[self.pk]) diff --git a/netbox/circuits/models/virtual_circuits.py b/netbox/circuits/models/virtual_circuits.py new file mode 100644 index 000000000..ff910549d --- /dev/null +++ b/netbox/circuits/models/virtual_circuits.py @@ -0,0 +1,191 @@ +from functools import cached_property + +from django.contrib.contenttypes.fields import GenericRelation +from django.core.exceptions import ValidationError +from django.db import models +from django.urls import reverse +from django.utils.translation import gettext_lazy as _ + +from circuits.choices import * +from netbox.models import ChangeLoggedModel, PrimaryModel +from netbox.models.features import CustomFieldsMixin, CustomLinksMixin, TagsMixin +from .base import BaseCircuitType + +__all__ = ( + 'VirtualCircuit', + 'VirtualCircuitTermination', + 'VirtualCircuitType', +) + + +class VirtualCircuitType(BaseCircuitType): + """ + Like physical circuits, virtual circuits can be organized by their functional role. For example, a user might wish + to categorize virtual circuits by their technological nature or by product name. + """ + class Meta: + ordering = ('name',) + verbose_name = _('virtual circuit type') + verbose_name_plural = _('virtual circuit types') + + +class VirtualCircuit(PrimaryModel): + """ + A virtual connection between two or more endpoints, delivered across one or more physical circuits. + """ + cid = models.CharField( + max_length=100, + verbose_name=_('circuit ID'), + help_text=_('Unique circuit ID') + ) + provider_network = models.ForeignKey( + to='circuits.ProviderNetwork', + on_delete=models.PROTECT, + related_name='virtual_circuits' + ) + provider_account = models.ForeignKey( + to='circuits.ProviderAccount', + on_delete=models.PROTECT, + related_name='virtual_circuits', + blank=True, + null=True + ) + type = models.ForeignKey( + to='circuits.VirtualCircuitType', + on_delete=models.PROTECT, + related_name='virtual_circuits' + ) + status = models.CharField( + verbose_name=_('status'), + max_length=50, + choices=CircuitStatusChoices, + default=CircuitStatusChoices.STATUS_ACTIVE + ) + tenant = models.ForeignKey( + to='tenancy.Tenant', + on_delete=models.PROTECT, + related_name='virtual_circuits', + blank=True, + null=True + ) + + group_assignments = GenericRelation( + to='circuits.CircuitGroupAssignment', + content_type_field='member_type', + object_id_field='member_id', + related_query_name='virtual_circuit' + ) + + clone_fields = ( + 'provider_network', 'provider_account', 'status', 'tenant', 'description', + ) + prerequisite_models = ( + 'circuits.ProviderNetwork', + 'circuits.VirtualCircuitType', + ) + + class Meta: + ordering = ['provider_network', 'provider_account', 'cid'] + constraints = ( + models.UniqueConstraint( + fields=('provider_network', 'cid'), + name='%(app_label)s_%(class)s_unique_provider_network_cid' + ), + models.UniqueConstraint( + fields=('provider_account', 'cid'), + name='%(app_label)s_%(class)s_unique_provideraccount_cid' + ), + ) + verbose_name = _('virtual circuit') + verbose_name_plural = _('virtual circuits') + + def __str__(self): + return self.cid + + def get_status_color(self): + return CircuitStatusChoices.colors.get(self.status) + + def clean(self): + super().clean() + + if self.provider_account and self.provider_network.provider != self.provider_account.provider: + raise ValidationError({ + 'provider_account': "The assigned account must belong to the provider of the assigned network." + }) + + @property + def provider(self): + return self.provider_network.provider + + +class VirtualCircuitTermination( + CustomFieldsMixin, + CustomLinksMixin, + TagsMixin, + ChangeLoggedModel +): + virtual_circuit = models.ForeignKey( + to='circuits.VirtualCircuit', + on_delete=models.CASCADE, + related_name='terminations' + ) + role = models.CharField( + verbose_name=_('role'), + max_length=50, + choices=VirtualCircuitTerminationRoleChoices, + default=VirtualCircuitTerminationRoleChoices.ROLE_PEER + ) + interface = models.OneToOneField( + to='dcim.Interface', + on_delete=models.CASCADE, + related_name='virtual_circuit_termination' + ) + description = models.CharField( + verbose_name=_('description'), + max_length=200, + blank=True + ) + + class Meta: + ordering = ['virtual_circuit', 'role', 'pk'] + verbose_name = _('virtual circuit termination') + verbose_name_plural = _('virtual circuit terminations') + + def __str__(self): + return f'{self.virtual_circuit}: {self.get_role_display()} termination' + + def get_absolute_url(self): + return reverse('circuits:virtualcircuittermination', args=[self.pk]) + + def get_role_color(self): + return VirtualCircuitTerminationRoleChoices.colors.get(self.role) + + def to_objectchange(self, action): + objectchange = super().to_objectchange(action) + objectchange.related_object = self.virtual_circuit + return objectchange + + @property + def parent_object(self): + return self.virtual_circuit + + @cached_property + def peer_terminations(self): + if self.role == VirtualCircuitTerminationRoleChoices.ROLE_PEER: + return self.virtual_circuit.terminations.exclude(pk=self.pk).filter( + role=VirtualCircuitTerminationRoleChoices.ROLE_PEER + ) + if self.role == VirtualCircuitTerminationRoleChoices.ROLE_HUB: + return self.virtual_circuit.terminations.filter( + role=VirtualCircuitTerminationRoleChoices.ROLE_SPOKE + ) + if self.role == VirtualCircuitTerminationRoleChoices.ROLE_SPOKE: + return self.virtual_circuit.terminations.filter( + role=VirtualCircuitTerminationRoleChoices.ROLE_HUB + ) + + def clean(self): + super().clean() + + if self.interface and not self.interface.is_virtual: + raise ValidationError("Virtual circuits may be terminated only to virtual interfaces.") diff --git a/netbox/circuits/search.py b/netbox/circuits/search.py index 7a5711f03..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 @@ -80,3 +80,34 @@ class ProviderNetworkIndex(SearchIndex): ('comments', 5000), ) display_attrs = ('provider', 'service_id', 'description') + + +@register_search +class VirtualCircuitIndex(SearchIndex): + model = models.VirtualCircuit + fields = ( + ('cid', 100), + ('description', 500), + ('comments', 5000), + ) + display_attrs = ('provider', 'provider_network', 'provider_account', 'status', 'tenant', 'description') + + +@register_search +class VirtualCircuitTerminationIndex(SearchIndex): + model = models.VirtualCircuitTermination + fields = ( + ('description', 500), + ) + display_attrs = ('virtual_circuit', 'role', 'description') + + +@register_search +class VirtualCircuitTypeIndex(SearchIndex): + model = models.VirtualCircuitType + fields = ( + ('name', 100), + ('slug', 110), + ('description', 500), + ) + display_attrs = ('description',) diff --git a/netbox/circuits/tables/__init__.py b/netbox/circuits/tables/__init__.py index b61c13cae..a436eb88d 100644 --- a/netbox/circuits/tables/__init__.py +++ b/netbox/circuits/tables/__init__.py @@ -1,3 +1,4 @@ from .circuits import * from .columns import * from .providers import * +from .virtual_circuits import * diff --git a/netbox/circuits/tables/circuits.py b/netbox/circuits/tables/circuits.py index eefe2bd22..9e59ec019 100644 --- a/netbox/circuits/tables/circuits.py +++ b/netbox/circuits/tables/circuits.py @@ -18,10 +18,8 @@ __all__ = ( CIRCUITTERMINATION_LINK = """ -{% if value.site %} - {{ value.site }} -{% elif value.provider_network %} - {{ value.provider_network }} +{% if value.termination %} + {{ value.termination }} {% endif %} """ @@ -44,9 +42,10 @@ class CircuitTypeTable(NetBoxTable): class Meta(NetBoxTable.Meta): model = CircuitType fields = ( - 'pk', 'id', 'name', 'circuit_count', 'color', 'description', 'slug', 'tags', 'created', 'last_updated', 'actions', + 'pk', 'id', 'name', 'circuit_count', 'color', 'description', 'slug', 'tags', 'created', 'last_updated', + 'actions', ) - default_columns = ('pk', 'name', 'circuit_count', 'description', 'slug') + default_columns = ('pk', 'name', 'circuit_count', 'color', 'description') class CircuitTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable): @@ -62,13 +61,17 @@ class CircuitTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable): linkify=True, verbose_name=_('Account') ) + type = tables.Column( + verbose_name=_('Type'), + linkify=True + ) status = columns.ChoiceFieldColumn() - termination_a = tables.TemplateColumn( + termination_a = columns.TemplateColumn( template_code=CIRCUITTERMINATION_LINK, orderable=False, verbose_name=_('Side A') ) - termination_z = tables.TemplateColumn( + termination_z = columns.TemplateColumn( template_code=CIRCUITTERMINATION_LINK, orderable=False, verbose_name=_('Side Z') @@ -76,6 +79,7 @@ class CircuitTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable): commit_rate = CommitRateColumn( verbose_name=_('Commit Rate') ) + distance = columns.DistanceColumn() comments = columns.MarkdownColumn( verbose_name=_('Comments') ) @@ -109,22 +113,54 @@ class CircuitTerminationTable(NetBoxTable): linkify=True, accessor='circuit.provider' ) + term_side = tables.Column( + verbose_name=_('Side') + ) + termination_type = columns.ContentTypeColumn( + verbose_name=_('Termination Type'), + ) + termination = tables.Column( + verbose_name=_('Termination Point'), + linkify=True + ) + + # Termination types site = tables.Column( verbose_name=_('Site'), - linkify=True + linkify=True, + accessor='_site' + ) + site_group = tables.Column( + verbose_name=_('Site Group'), + linkify=True, + accessor='_sitegroup' + ) + region = tables.Column( + verbose_name=_('Region'), + linkify=True, + accessor='_region' + ) + location = tables.Column( + verbose_name=_('Location'), + linkify=True, + accessor='_location' ) provider_network = tables.Column( verbose_name=_('Provider Network'), - linkify=True + linkify=True, + accessor='_provider_network' ) class Meta(NetBoxTable.Meta): model = CircuitTermination fields = ( - 'pk', 'id', 'circuit', 'provider', 'term_side', 'site', 'provider_network', 'port_speed', 'upstream_speed', - 'xconnect_id', 'pp_info', 'description', 'created', 'last_updated', 'actions', + 'pk', 'id', 'circuit', 'provider', 'term_side', 'termination_type', 'termination', 'site_group', 'region', + 'site', 'location', 'provider_network', 'port_speed', 'upstream_speed', 'xconnect_id', 'pp_info', + 'description', 'created', 'last_updated', 'actions', + ) + default_columns = ( + 'pk', 'id', 'circuit', 'provider', 'term_side', 'termination_type', 'termination', 'description', ) - default_columns = ('pk', 'id', 'circuit', 'provider', 'term_side', 'description') class CircuitGroupTable(NetBoxTable): @@ -156,11 +192,14 @@ class CircuitGroupAssignmentTable(NetBoxTable): linkify=True ) provider = tables.Column( - accessor='circuit__provider', + accessor='member__provider', verbose_name=_('Provider'), linkify=True ) - circuit = tables.Column( + member_type = columns.ContentTypeColumn( + verbose_name=_('Type') + ) + member = tables.Column( verbose_name=_('Circuit'), linkify=True ) @@ -174,6 +213,7 @@ class CircuitGroupAssignmentTable(NetBoxTable): class Meta(NetBoxTable.Meta): model = CircuitGroupAssignment fields = ( - 'pk', 'id', 'group', 'provider', 'circuit', 'priority', 'created', 'last_updated', 'actions', 'tags', + 'pk', 'id', 'group', 'provider', 'member_type', 'member', 'priority', 'created', 'last_updated', 'actions', + 'tags', ) - default_columns = ('pk', 'group', 'provider', 'circuit', 'priority') + default_columns = ('pk', 'group', 'provider', 'member_type', 'member', 'priority') diff --git a/netbox/circuits/tables/virtual_circuits.py b/netbox/circuits/tables/virtual_circuits.py new file mode 100644 index 000000000..67ac03d59 --- /dev/null +++ b/netbox/circuits/tables/virtual_circuits.py @@ -0,0 +1,124 @@ +import django_tables2 as tables +from django.utils.translation import gettext_lazy as _ + +from circuits.models import * +from netbox.tables import NetBoxTable, columns +from tenancy.tables import ContactsColumnMixin, TenancyColumnsMixin + +__all__ = ( + 'VirtualCircuitTable', + 'VirtualCircuitTerminationTable', + 'VirtualCircuitTypeTable', +) + + +class VirtualCircuitTypeTable(NetBoxTable): + name = tables.Column( + linkify=True, + verbose_name=_('Name'), + ) + color = columns.ColorColumn() + tags = columns.TagColumn( + url_name='circuits:virtualcircuittype_list' + ) + virtual_circuit_count = columns.LinkedCountColumn( + viewname='circuits:virtualcircuit_list', + url_params={'type_id': 'pk'}, + verbose_name=_('Circuits') + ) + + class Meta(NetBoxTable.Meta): + model = VirtualCircuitType + fields = ( + 'pk', 'id', 'name', 'virtual_circuit_count', 'color', 'description', 'slug', 'tags', 'created', + 'last_updated', 'actions', + ) + default_columns = ('pk', 'name', 'virtual_circuit_count', 'color', 'description') + + +class VirtualCircuitTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable): + cid = tables.Column( + linkify=True, + verbose_name=_('Circuit ID') + ) + provider = tables.Column( + accessor=tables.A('provider_network__provider'), + verbose_name=_('Provider'), + linkify=True + ) + provider_network = tables.Column( + linkify=True, + verbose_name=_('Provider network') + ) + provider_account = tables.Column( + linkify=True, + verbose_name=_('Account') + ) + type = tables.Column( + verbose_name=_('Type'), + linkify=True + ) + status = columns.ChoiceFieldColumn() + termination_count = columns.LinkedCountColumn( + viewname='circuits:virtualcircuittermination_list', + url_params={'virtual_circuit_id': 'pk'}, + verbose_name=_('Terminations') + ) + comments = columns.MarkdownColumn( + verbose_name=_('Comments') + ) + tags = columns.TagColumn( + url_name='circuits:virtualcircuit_list' + ) + + class Meta(NetBoxTable.Meta): + model = VirtualCircuit + fields = ( + 'pk', 'id', 'cid', 'provider', 'provider_account', 'provider_network', 'type', 'status', 'tenant', + 'tenant_group', 'description', 'comments', 'tags', 'created', 'last_updated', + ) + default_columns = ( + 'pk', 'cid', 'provider', 'provider_account', 'provider_network', 'type', 'status', 'tenant', + 'termination_count', 'description', + ) + + +class VirtualCircuitTerminationTable(NetBoxTable): + virtual_circuit = tables.Column( + verbose_name=_('Virtual circuit'), + linkify=True + ) + provider = tables.Column( + accessor=tables.A('virtual_circuit__provider_network__provider'), + verbose_name=_('Provider'), + linkify=True + ) + provider_network = tables.Column( + accessor=tables.A('virtual_circuit__provider_network'), + linkify=True, + verbose_name=_('Provider network') + ) + provider_account = tables.Column( + linkify=True, + verbose_name=_('Account') + ) + role = columns.ChoiceFieldColumn() + device = tables.Column( + accessor=tables.A('interface__device'), + linkify=True, + verbose_name=_('Device') + ) + interface = tables.Column( + verbose_name=_('Interface'), + linkify=True + ) + + class Meta(NetBoxTable.Meta): + model = VirtualCircuitTermination + fields = ( + 'pk', 'id', 'virtual_circuit', 'provider', 'provider_network', 'provider_account', 'role', 'interfaces', + 'description', 'created', 'last_updated', 'actions', + ) + default_columns = ( + 'pk', 'id', 'virtual_circuit', 'role', 'device', 'interface', 'description', + ) diff --git a/netbox/circuits/tests/test_api.py b/netbox/circuits/tests/test_api.py index 1edcd531b..3b8280236 100644 --- a/netbox/circuits/tests/test_api.py +++ b/netbox/circuits/tests/test_api.py @@ -2,7 +2,8 @@ from django.urls import reverse from circuits.choices import * from circuits.models import * -from dcim.models import Site +from dcim.choices import InterfaceTypeChoices +from dcim.models import Device, DeviceRole, DeviceType, Interface, Manufacturer, Site from ipam.models import ASN, RIR from utilities.testing import APITestCase, APIViewTestCases @@ -120,9 +121,15 @@ class CircuitTest(APIViewTestCases.APIViewTestCase): CircuitType.objects.bulk_create(circuit_types) circuits = ( - Circuit(cid='Circuit 1', provider=providers[0], provider_account=provider_accounts[0], type=circuit_types[0]), - Circuit(cid='Circuit 2', provider=providers[0], provider_account=provider_accounts[0], type=circuit_types[0]), - Circuit(cid='Circuit 3', provider=providers[0], provider_account=provider_accounts[0], type=circuit_types[0]), + Circuit( + cid='Circuit 1', provider=providers[0], provider_account=provider_accounts[0], type=circuit_types[0] + ), + Circuit( + cid='Circuit 2', provider=providers[0], provider_account=provider_accounts[0], type=circuit_types[0] + ), + Circuit( + cid='Circuit 3', provider=providers[0], provider_account=provider_accounts[0], type=circuit_types[0] + ), ) Circuit.objects.bulk_create(circuits) @@ -181,10 +188,10 @@ class CircuitTerminationTest(APIViewTestCases.APIViewTestCase): Circuit.objects.bulk_create(circuits) circuit_terminations = ( - CircuitTermination(circuit=circuits[0], term_side=SIDE_A, site=sites[0]), - CircuitTermination(circuit=circuits[0], term_side=SIDE_Z, provider_network=provider_networks[0]), - CircuitTermination(circuit=circuits[1], term_side=SIDE_A, site=sites[1]), - CircuitTermination(circuit=circuits[1], term_side=SIDE_Z, provider_network=provider_networks[1]), + CircuitTermination(circuit=circuits[0], term_side=SIDE_A, termination=sites[0]), + CircuitTermination(circuit=circuits[0], term_side=SIDE_Z, termination=provider_networks[0]), + CircuitTermination(circuit=circuits[1], term_side=SIDE_A, termination=sites[1]), + CircuitTermination(circuit=circuits[1], term_side=SIDE_Z, termination=provider_networks[1]), ) CircuitTermination.objects.bulk_create(circuit_terminations) @@ -192,13 +199,15 @@ class CircuitTerminationTest(APIViewTestCases.APIViewTestCase): { 'circuit': circuits[2].pk, 'term_side': SIDE_A, - 'site': sites[0].pk, + 'termination_type': 'dcim.site', + 'termination_id': sites[0].pk, 'port_speed': 200000, }, { 'circuit': circuits[2].pk, 'term_side': SIDE_Z, - 'provider_network': provider_networks[0].pk, + 'termination_type': 'circuits.providernetwork', + 'termination_id': provider_networks[0].pk, 'port_speed': 200000, }, ] @@ -286,7 +295,7 @@ class ProviderAccountTest(APIViewTestCases.APIViewTestCase): class CircuitGroupAssignmentTest(APIViewTestCases.APIViewTestCase): model = CircuitGroupAssignment - brief_fields = ['circuit', 'display', 'group', 'id', 'priority', 'url'] + brief_fields = ['display', 'group', 'id', 'member', 'member_id', 'member_type', 'priority', 'url'] bulk_update_data = { 'priority': CircuitPriorityChoices.PRIORITY_INACTIVE, } @@ -321,17 +330,17 @@ class CircuitGroupAssignmentTest(APIViewTestCases.APIViewTestCase): assignments = ( CircuitGroupAssignment( group=circuit_groups[0], - circuit=circuits[0], + member=circuits[0], priority=CircuitPriorityChoices.PRIORITY_PRIMARY ), CircuitGroupAssignment( group=circuit_groups[1], - circuit=circuits[1], + member=circuits[1], priority=CircuitPriorityChoices.PRIORITY_SECONDARY ), CircuitGroupAssignment( group=circuit_groups[2], - circuit=circuits[2], + member=circuits[2], priority=CircuitPriorityChoices.PRIORITY_TERTIARY ), ) @@ -340,17 +349,20 @@ class CircuitGroupAssignmentTest(APIViewTestCases.APIViewTestCase): cls.create_data = [ { 'group': circuit_groups[3].pk, - 'circuit': circuits[3].pk, + 'member_type': 'circuits.circuit', + 'member_id': circuits[3].pk, 'priority': CircuitPriorityChoices.PRIORITY_PRIMARY, }, { 'group': circuit_groups[4].pk, - 'circuit': circuits[4].pk, + 'member_type': 'circuits.circuit', + 'member_id': circuits[4].pk, 'priority': CircuitPriorityChoices.PRIORITY_SECONDARY, }, { 'group': circuit_groups[5].pk, - 'circuit': circuits[5].pk, + 'member_type': 'circuits.circuit', + 'member_id': circuits[5].pk, 'priority': CircuitPriorityChoices.PRIORITY_TERTIARY, }, ] @@ -395,3 +407,290 @@ class ProviderNetworkTest(APIViewTestCases.APIViewTestCase): 'provider': providers[1].pk, 'description': 'New description', } + + +class VirtualCircuitTypeTest(APIViewTestCases.APIViewTestCase): + model = VirtualCircuitType + brief_fields = ['description', 'display', 'id', 'name', 'slug', 'url', 'virtual_circuit_count'] + create_data = ( + { + 'name': 'Virtual Circuit Type 4', + 'slug': 'virtual-circuit-type-4', + }, + { + 'name': 'Virtual Circuit Type 5', + 'slug': 'virtual-circuit-type-5', + }, + { + 'name': 'Virtual Circuit Type 6', + 'slug': 'virtual-circuit-type-6', + }, + ) + bulk_update_data = { + 'description': 'New description', + } + + @classmethod + def setUpTestData(cls): + + virtual_circuit_types = ( + VirtualCircuitType(name='Virtual Circuit Type 1', slug='virtual-circuit-type-1'), + VirtualCircuitType(name='Virtual Circuit Type 2', slug='virtual-circuit-type-2'), + VirtualCircuitType(name='Virtual Circuit Type 3', slug='virtual-circuit-type-3'), + ) + VirtualCircuitType.objects.bulk_create(virtual_circuit_types) + + +class VirtualCircuitTest(APIViewTestCases.APIViewTestCase): + model = VirtualCircuit + brief_fields = ['cid', 'description', 'display', 'id', 'provider_network', 'url'] + bulk_update_data = { + 'status': 'planned', + } + + @classmethod + def setUpTestData(cls): + provider = Provider.objects.create(name='Provider 1', slug='provider-1') + provider_network = ProviderNetwork.objects.create(provider=provider, name='Provider Network 1') + provider_account = ProviderAccount.objects.create(provider=provider, account='Provider Account 1') + virtual_circuit_type = VirtualCircuitType.objects.create( + name='Virtual Circuit Type 1', + slug='virtual-circuit-type-1' + ) + + virtual_circuits = ( + VirtualCircuit( + provider_network=provider_network, + provider_account=provider_account, + type=virtual_circuit_type, + cid='Virtual Circuit 1' + ), + VirtualCircuit( + provider_network=provider_network, + provider_account=provider_account, + type=virtual_circuit_type, + cid='Virtual Circuit 2' + ), + VirtualCircuit( + provider_network=provider_network, + provider_account=provider_account, + type=virtual_circuit_type, + cid='Virtual Circuit 3' + ), + ) + VirtualCircuit.objects.bulk_create(virtual_circuits) + + cls.create_data = [ + { + 'cid': 'Virtual Circuit 4', + 'provider_network': provider_network.pk, + 'provider_account': provider_account.pk, + 'type': virtual_circuit_type.pk, + 'status': CircuitStatusChoices.STATUS_PLANNED, + }, + { + 'cid': 'Virtual Circuit 5', + 'provider_network': provider_network.pk, + 'provider_account': provider_account.pk, + 'type': virtual_circuit_type.pk, + 'status': CircuitStatusChoices.STATUS_PLANNED, + }, + { + 'cid': 'Virtual Circuit 6', + 'provider_network': provider_network.pk, + 'provider_account': provider_account.pk, + 'type': virtual_circuit_type.pk, + 'status': CircuitStatusChoices.STATUS_PLANNED, + }, + ] + + +class VirtualCircuitTerminationTest(APIViewTestCases.APIViewTestCase): + model = VirtualCircuitTermination + brief_fields = ['description', 'display', 'id', 'interface', 'role', 'url', 'virtual_circuit'] + bulk_update_data = { + 'description': 'New description', + } + + @classmethod + def setUpTestData(cls): + manufacturer = Manufacturer.objects.create(name='Manufacturer 1', slug='manufacturer-1') + device_type = DeviceType.objects.create(manufacturer=manufacturer, model='Device Type 1') + device_role = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1') + site = Site.objects.create(name='Site 1', slug='site-1') + + devices = ( + Device(site=site, name='hub', device_type=device_type, role=device_role), + Device(site=site, name='spoke1', device_type=device_type, role=device_role), + Device(site=site, name='spoke2', device_type=device_type, role=device_role), + Device(site=site, name='spoke3', device_type=device_type, role=device_role), + ) + Device.objects.bulk_create(devices) + + physical_interfaces = ( + Interface(device=devices[0], name='eth0', type=InterfaceTypeChoices.TYPE_1GE_FIXED), + Interface(device=devices[1], name='eth0', type=InterfaceTypeChoices.TYPE_1GE_FIXED), + Interface(device=devices[2], name='eth0', type=InterfaceTypeChoices.TYPE_1GE_FIXED), + Interface(device=devices[3], name='eth0', type=InterfaceTypeChoices.TYPE_1GE_FIXED), + ) + Interface.objects.bulk_create(physical_interfaces) + + virtual_interfaces = ( + # Point-to-point VCs + Interface( + device=devices[0], + name='eth0.1', + parent=physical_interfaces[0], + type=InterfaceTypeChoices.TYPE_VIRTUAL + ), + Interface( + device=devices[0], + name='eth0.2', + parent=physical_interfaces[0], + type=InterfaceTypeChoices.TYPE_VIRTUAL + ), + Interface( + device=devices[0], + name='eth0.3', + parent=physical_interfaces[0], + type=InterfaceTypeChoices.TYPE_VIRTUAL + ), + Interface( + device=devices[1], + name='eth0.1', + parent=physical_interfaces[1], + type=InterfaceTypeChoices.TYPE_VIRTUAL + ), + Interface( + device=devices[2], + name='eth0.1', + parent=physical_interfaces[2], + type=InterfaceTypeChoices.TYPE_VIRTUAL + ), + Interface( + device=devices[3], + name='eth0.1', + parent=physical_interfaces[3], + type=InterfaceTypeChoices.TYPE_VIRTUAL + ), + + # Hub and spoke VCs + Interface( + device=devices[0], + name='eth0.9', + parent=physical_interfaces[0], + type=InterfaceTypeChoices.TYPE_VIRTUAL + ), + Interface( + device=devices[1], + name='eth0.9', + parent=physical_interfaces[0], + type=InterfaceTypeChoices.TYPE_VIRTUAL + ), + Interface( + device=devices[2], + name='eth0.9', + parent=physical_interfaces[0], + type=InterfaceTypeChoices.TYPE_VIRTUAL + ), + Interface( + device=devices[3], + name='eth0.9', + parent=physical_interfaces[0], + type=InterfaceTypeChoices.TYPE_VIRTUAL + ), + ) + Interface.objects.bulk_create(virtual_interfaces) + + provider = Provider.objects.create(name='Provider 1', slug='provider-1') + provider_network = ProviderNetwork.objects.create(provider=provider, name='Provider Network 1') + provider_account = ProviderAccount.objects.create(provider=provider, account='Provider Account 1') + virtual_circuit_type = VirtualCircuitType.objects.create( + name='Virtual Circuit Type 1', + slug='virtual-circuit-type-1' + ) + + virtual_circuits = ( + VirtualCircuit( + provider_network=provider_network, + provider_account=provider_account, + cid='Virtual Circuit 1', + type=virtual_circuit_type + ), + VirtualCircuit( + provider_network=provider_network, + provider_account=provider_account, + cid='Virtual Circuit 2', + type=virtual_circuit_type + ), + VirtualCircuit( + provider_network=provider_network, + provider_account=provider_account, + cid='Virtual Circuit 3', + type=virtual_circuit_type + ), + VirtualCircuit( + provider_network=provider_network, + provider_account=provider_account, + cid='Virtual Circuit 4', + type=virtual_circuit_type + ), + ) + VirtualCircuit.objects.bulk_create(virtual_circuits) + + virtual_circuit_terminations = ( + VirtualCircuitTermination( + virtual_circuit=virtual_circuits[0], + role=VirtualCircuitTerminationRoleChoices.ROLE_PEER, + interface=virtual_interfaces[0] + ), + VirtualCircuitTermination( + virtual_circuit=virtual_circuits[0], + role=VirtualCircuitTerminationRoleChoices.ROLE_PEER, + interface=virtual_interfaces[3] + ), + VirtualCircuitTermination( + virtual_circuit=virtual_circuits[1], + role=VirtualCircuitTerminationRoleChoices.ROLE_PEER, + interface=virtual_interfaces[1] + ), + VirtualCircuitTermination( + virtual_circuit=virtual_circuits[1], + role=VirtualCircuitTerminationRoleChoices.ROLE_PEER, + interface=virtual_interfaces[4] + ), + VirtualCircuitTermination( + virtual_circuit=virtual_circuits[2], + role=VirtualCircuitTerminationRoleChoices.ROLE_PEER, + interface=virtual_interfaces[2] + ), + VirtualCircuitTermination( + virtual_circuit=virtual_circuits[2], + role=VirtualCircuitTerminationRoleChoices.ROLE_PEER, + interface=virtual_interfaces[5] + ), + ) + VirtualCircuitTermination.objects.bulk_create(virtual_circuit_terminations) + + cls.create_data = [ + { + 'virtual_circuit': virtual_circuits[3].pk, + 'role': VirtualCircuitTerminationRoleChoices.ROLE_HUB, + 'interface': virtual_interfaces[6].pk + }, + { + 'virtual_circuit': virtual_circuits[3].pk, + 'role': VirtualCircuitTerminationRoleChoices.ROLE_SPOKE, + 'interface': virtual_interfaces[7].pk + }, + { + 'virtual_circuit': virtual_circuits[3].pk, + 'role': VirtualCircuitTerminationRoleChoices.ROLE_SPOKE, + 'interface': virtual_interfaces[8].pk + }, + { + 'virtual_circuit': virtual_circuits[3].pk, + 'role': VirtualCircuitTerminationRoleChoices.ROLE_SPOKE, + 'interface': virtual_interfaces[9].pk + }, + ] diff --git a/netbox/circuits/tests/test_filtersets.py b/netbox/circuits/tests/test_filtersets.py index bb350f0d1..b32abd34e 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.models import Cable, Region, Site, SiteGroup +from dcim.choices import InterfaceTypeChoices +from dcim.models import Cable, Device, DeviceRole, DeviceType, Interface, Manufacturer, Region, Site, SiteGroup from ipam.models import ASN, RIR +from netbox.choices import DistanceUnitChoices from tenancy.models import Tenant, TenantGroup from utilities.testing import ChangeLoggedFilterSetTests @@ -69,10 +71,12 @@ class ProviderTestCase(TestCase, ChangeLoggedFilterSetTests): ) Circuit.objects.bulk_create(circuits) - CircuitTermination.objects.bulk_create(( - CircuitTermination(circuit=circuits[0], site=sites[0], term_side='A'), - CircuitTermination(circuit=circuits[1], site=sites[0], term_side='A'), - )) + circuit_terminations = ( + CircuitTermination(circuit=circuits[0], termination=sites[0], term_side='A'), + CircuitTermination(circuit=circuits[1], termination=sites[0], term_side='A'), + ) + for ct in circuit_terminations: + ct.save() def test_q(self): params = {'q': 'foobar1'} @@ -222,24 +226,93 @@ class CircuitTestCase(TestCase, ChangeLoggedFilterSetTests): ProviderNetwork.objects.bulk_create(provider_networks) circuits = ( - Circuit(provider=providers[0], provider_account=provider_accounts[0], tenant=tenants[0], type=circuit_types[0], cid='Test Circuit 1', install_date='2020-01-01', termination_date='2021-01-01', commit_rate=1000, status=CircuitStatusChoices.STATUS_ACTIVE, description='foobar1'), - Circuit(provider=providers[0], provider_account=provider_accounts[0], tenant=tenants[0], type=circuit_types[0], cid='Test Circuit 2', install_date='2020-01-02', termination_date='2021-01-02', commit_rate=2000, status=CircuitStatusChoices.STATUS_ACTIVE, description='foobar2'), - Circuit(provider=providers[0], provider_account=provider_accounts[1], tenant=tenants[1], type=circuit_types[0], cid='Test Circuit 3', install_date='2020-01-03', termination_date='2021-01-03', commit_rate=3000, status=CircuitStatusChoices.STATUS_PLANNED), - Circuit(provider=providers[1], provider_account=provider_accounts[1], tenant=tenants[1], type=circuit_types[1], cid='Test Circuit 4', install_date='2020-01-04', termination_date='2021-01-04', commit_rate=4000, status=CircuitStatusChoices.STATUS_PLANNED), - Circuit(provider=providers[1], provider_account=provider_accounts[2], tenant=tenants[2], type=circuit_types[1], cid='Test Circuit 5', install_date='2020-01-05', termination_date='2021-01-05', commit_rate=5000, status=CircuitStatusChoices.STATUS_OFFLINE), - Circuit(provider=providers[1], provider_account=provider_accounts[2], tenant=tenants[2], type=circuit_types[1], cid='Test Circuit 6', install_date='2020-01-06', termination_date='2021-01-06', commit_rate=6000, status=CircuitStatusChoices.STATUS_OFFLINE), + Circuit( + provider=providers[0], + provider_account=provider_accounts[0], + tenant=tenants[0], + type=circuit_types[0], + cid='Test Circuit 1', + install_date='2020-01-01', + termination_date='2021-01-01', + commit_rate=1000, + status=CircuitStatusChoices.STATUS_ACTIVE, + description='foobar1', + distance=10, + distance_unit=DistanceUnitChoices.UNIT_FOOT, + ), + Circuit( + provider=providers[0], + provider_account=provider_accounts[0], + tenant=tenants[0], + type=circuit_types[0], + cid='Test Circuit 2', + install_date='2020-01-02', + termination_date='2021-01-02', + commit_rate=2000, + status=CircuitStatusChoices.STATUS_ACTIVE, + description='foobar2', + distance=20, + distance_unit=DistanceUnitChoices.UNIT_METER, + ), + Circuit( + provider=providers[0], + provider_account=provider_accounts[1], + tenant=tenants[1], + type=circuit_types[0], + cid='Test Circuit 3', + install_date='2020-01-03', + termination_date='2021-01-03', + commit_rate=3000, + status=CircuitStatusChoices.STATUS_PLANNED, + distance=30, + distance_unit=DistanceUnitChoices.UNIT_METER, + ), + Circuit( + provider=providers[1], + provider_account=provider_accounts[1], + tenant=tenants[1], + type=circuit_types[1], + cid='Test Circuit 4', + install_date='2020-01-04', + termination_date='2021-01-04', + commit_rate=4000, + status=CircuitStatusChoices.STATUS_PLANNED, + ), + Circuit( + provider=providers[1], + provider_account=provider_accounts[2], + tenant=tenants[2], + type=circuit_types[1], + cid='Test Circuit 5', + install_date='2020-01-05', + termination_date='2021-01-05', + commit_rate=5000, + status=CircuitStatusChoices.STATUS_OFFLINE, + ), + Circuit( + provider=providers[1], + provider_account=provider_accounts[2], + tenant=tenants[2], + type=circuit_types[1], + cid='Test Circuit 6', + install_date='2020-01-06', + termination_date='2021-01-06', + commit_rate=6000, + status=CircuitStatusChoices.STATUS_OFFLINE, + ), ) Circuit.objects.bulk_create(circuits) circuit_terminations = (( - CircuitTermination(circuit=circuits[0], site=sites[0], term_side='A'), - CircuitTermination(circuit=circuits[1], site=sites[1], term_side='A'), - CircuitTermination(circuit=circuits[2], site=sites[2], term_side='A'), - CircuitTermination(circuit=circuits[3], provider_network=provider_networks[0], term_side='A'), - CircuitTermination(circuit=circuits[4], provider_network=provider_networks[1], term_side='A'), - CircuitTermination(circuit=circuits[5], provider_network=provider_networks[2], term_side='A'), + CircuitTermination(circuit=circuits[0], termination=sites[0], term_side='A'), + CircuitTermination(circuit=circuits[1], termination=sites[1], term_side='A'), + 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'), + CircuitTermination(circuit=circuits[5], termination=provider_networks[2], term_side='A'), )) - CircuitTermination.objects.bulk_create(circuit_terminations) + for ct in circuit_terminations: + ct.save() def test_q(self): params = {'q': 'foobar1'} @@ -289,6 +362,14 @@ class CircuitTestCase(TestCase, ChangeLoggedFilterSetTests): params = {'status': [CircuitStatusChoices.STATUS_ACTIVE, CircuitStatusChoices.STATUS_PLANNED]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) + def test_distance(self): + params = {'distance': [10, 20]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + + def test_distance_unit(self): + params = {'distance_unit': DistanceUnitChoices.UNIT_FOOT} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) + def test_description(self): params = {'description': ['foobar1', 'foobar2']} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) @@ -374,19 +455,66 @@ class CircuitTerminationTestCase(TestCase, ChangeLoggedFilterSetTests): ) Circuit.objects.bulk_create(circuits) - circuit_terminations = (( - CircuitTermination(circuit=circuits[0], site=sites[0], term_side='A', port_speed=1000, upstream_speed=1000, xconnect_id='ABC', description='foobar1'), - CircuitTermination(circuit=circuits[0], site=sites[1], term_side='Z', port_speed=1000, upstream_speed=1000, xconnect_id='DEF', description='foobar2'), - CircuitTermination(circuit=circuits[1], site=sites[1], term_side='A', port_speed=2000, upstream_speed=2000, xconnect_id='GHI'), - CircuitTermination(circuit=circuits[1], site=sites[2], term_side='Z', port_speed=2000, upstream_speed=2000, xconnect_id='JKL'), - CircuitTermination(circuit=circuits[2], site=sites[2], term_side='A', port_speed=3000, upstream_speed=3000, xconnect_id='MNO'), - CircuitTermination(circuit=circuits[2], site=sites[0], term_side='Z', port_speed=3000, upstream_speed=3000, xconnect_id='PQR'), - CircuitTermination(circuit=circuits[3], provider_network=provider_networks[0], term_side='A'), - CircuitTermination(circuit=circuits[4], provider_network=provider_networks[1], term_side='A'), - CircuitTermination(circuit=circuits[5], provider_network=provider_networks[2], term_side='A'), - CircuitTermination(circuit=circuits[6], provider_network=provider_networks[0], term_side='A', mark_connected=True), - )) - CircuitTermination.objects.bulk_create(circuit_terminations) + circuit_terminations = ( + CircuitTermination( + circuit=circuits[0], + termination=sites[0], + term_side='A', + port_speed=1000, + upstream_speed=1000, + xconnect_id='ABC', + description='foobar1', + ), + CircuitTermination( + circuit=circuits[0], + termination=sites[1], + term_side='Z', + port_speed=1000, + upstream_speed=1000, + xconnect_id='DEF', + description='foobar2', + ), + CircuitTermination( + circuit=circuits[1], + termination=sites[1], + term_side='A', + port_speed=2000, + upstream_speed=2000, + xconnect_id='GHI', + ), + CircuitTermination( + circuit=circuits[1], + termination=sites[2], + term_side='Z', + port_speed=2000, + upstream_speed=2000, + xconnect_id='JKL', + ), + CircuitTermination( + circuit=circuits[2], + termination=sites[2], + term_side='A', + port_speed=3000, + upstream_speed=3000, + xconnect_id='MNO', + ), + CircuitTermination( + circuit=circuits[2], + termination=sites[0], + term_side='Z', + port_speed=3000, + upstream_speed=3000, + xconnect_id='PQR', + ), + CircuitTermination(circuit=circuits[3], termination=provider_networks[0], term_side='A'), + CircuitTermination(circuit=circuits[4], termination=provider_networks[1], term_side='A'), + CircuitTermination(circuit=circuits[5], termination=provider_networks[2], term_side='A'), + CircuitTermination( + circuit=circuits[6], termination=provider_networks[0], term_side='A', mark_connected=True + ), + ) + for ct in circuit_terminations: + ct.save() Cable(a_terminations=[circuit_terminations[0]], b_terminations=[circuit_terminations[1]]).save() @@ -520,7 +648,6 @@ class CircuitGroupAssignmentTestCase(TestCase, ChangeLoggedFilterSetTests): CircuitGroup(name='Circuit Group 1', slug='circuit-group-1'), CircuitGroup(name='Circuit Group 2', slug='circuit-group-2'), CircuitGroup(name='Circuit Group 3', slug='circuit-group-3'), - CircuitGroup(name='Circuit Group 4', slug='circuit-group-4'), ) CircuitGroup.objects.bulk_create(circuit_groups) @@ -528,43 +655,86 @@ class CircuitGroupAssignmentTestCase(TestCase, ChangeLoggedFilterSetTests): Provider(name='Provider 1', slug='provider-1'), Provider(name='Provider 2', slug='provider-2'), Provider(name='Provider 3', slug='provider-3'), - Provider(name='Provider 4', slug='provider-4'), )) - circuittype = CircuitType.objects.create(name='Circuit Type 1', slug='circuit-type-1') + circuit_type = CircuitType.objects.create(name='Circuit Type 1', slug='circuit-type-1') circuits = ( - Circuit(cid='Circuit 1', provider=providers[0], type=circuittype), - Circuit(cid='Circuit 2', provider=providers[1], type=circuittype), - Circuit(cid='Circuit 3', provider=providers[2], type=circuittype), - Circuit(cid='Circuit 4', provider=providers[3], type=circuittype), + Circuit(cid='Circuit 1', provider=providers[0], type=circuit_type), + Circuit(cid='Circuit 2', provider=providers[1], type=circuit_type), + Circuit(cid='Circuit 3', provider=providers[2], type=circuit_type), ) Circuit.objects.bulk_create(circuits) + provider_networks = ( + ProviderNetwork(name='Provider Network 1', provider=providers[0]), + ProviderNetwork(name='Provider Network 2', provider=providers[1]), + ProviderNetwork(name='Provider Network 3', provider=providers[2]), + ) + ProviderNetwork.objects.bulk_create(provider_networks) + + virtual_circuit_type = VirtualCircuitType.objects.create( + name='Virtual Circuit Type 1', + slug='virtual-circuit-type-1' + ) + virtual_circuits = ( + VirtualCircuit( + provider_network=provider_networks[0], + cid='Virtual Circuit 1', + type=virtual_circuit_type + ), + VirtualCircuit( + provider_network=provider_networks[1], + cid='Virtual Circuit 2', + type=virtual_circuit_type + ), + VirtualCircuit( + provider_network=provider_networks[2], + cid='Virtual Circuit 3', + type=virtual_circuit_type + ), + ) + VirtualCircuit.objects.bulk_create(virtual_circuits) + assignments = ( CircuitGroupAssignment( group=circuit_groups[0], - circuit=circuits[0], + member=circuits[0], priority=CircuitPriorityChoices.PRIORITY_PRIMARY ), CircuitGroupAssignment( group=circuit_groups[1], - circuit=circuits[1], + member=circuits[1], priority=CircuitPriorityChoices.PRIORITY_SECONDARY ), CircuitGroupAssignment( group=circuit_groups[2], - circuit=circuits[2], + member=circuits[2], + priority=CircuitPriorityChoices.PRIORITY_TERTIARY + ), + CircuitGroupAssignment( + group=circuit_groups[0], + member=virtual_circuits[0], + priority=CircuitPriorityChoices.PRIORITY_PRIMARY + ), + CircuitGroupAssignment( + group=circuit_groups[1], + member=virtual_circuits[1], + priority=CircuitPriorityChoices.PRIORITY_SECONDARY + ), + CircuitGroupAssignment( + group=circuit_groups[2], + member=virtual_circuits[2], priority=CircuitPriorityChoices.PRIORITY_TERTIARY ), ) CircuitGroupAssignment.objects.bulk_create(assignments) - def test_group_id(self): - groups = CircuitGroup.objects.filter(name__in=['Circuit Group 1', 'Circuit Group 2']) + def test_group(self): + groups = CircuitGroup.objects.all()[:2] params = {'group_id': [groups[0].pk, groups[1].pk]} - self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) params = {'group': [groups[0].slug, groups[1].slug]} - self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) def test_circuit(self): circuits = Circuit.objects.all()[:2] @@ -573,12 +743,19 @@ class CircuitGroupAssignmentTestCase(TestCase, ChangeLoggedFilterSetTests): params = {'circuit': [circuits[0].cid, circuits[1].cid]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + def test_virtual_circuit(self): + virtual_circuits = VirtualCircuit.objects.all()[:2] + params = {'virtual_circuit_id': [virtual_circuits[0].pk, virtual_circuits[1].pk]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + params = {'virtual_circuit': [virtual_circuits[0].cid, virtual_circuits[1].cid]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + def test_provider(self): providers = Provider.objects.all()[:2] params = {'provider_id': [providers[0].pk, providers[1].pk]} - self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) params = {'provider': [providers[0].slug, providers[1].slug]} - self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) class ProviderNetworkTestCase(TestCase, ChangeLoggedFilterSetTests): @@ -665,3 +842,347 @@ class ProviderAccountTestCase(TestCase, ChangeLoggedFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'provider': [providers[0].slug, providers[1].slug]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + + +class VirtualCircuitTypeTestCase(TestCase, ChangeLoggedFilterSetTests): + queryset = VirtualCircuitType.objects.all() + filterset = VirtualCircuitTypeFilterSet + + @classmethod + def setUpTestData(cls): + + VirtualCircuitType.objects.bulk_create(( + VirtualCircuitType(name='Virtual Circuit Type 1', slug='virtual-circuit-type-1', description='foobar1'), + VirtualCircuitType(name='Virtual Circuit Type 2', slug='virtual-circuit-type-2', description='foobar2'), + VirtualCircuitType(name='Virtual Circuit Type 3', slug='virtual-circuit-type-3'), + )) + + def test_q(self): + params = {'q': 'foobar1'} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) + + def test_name(self): + params = {'name': ['Virtual Circuit Type 1']} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) + + def test_slug(self): + params = {'slug': ['virtual-circuit-type-1']} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) + + def test_description(self): + params = {'description': ['foobar1', 'foobar2']} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + + +class VirtualCircuitTestCase(TestCase, ChangeLoggedFilterSetTests): + queryset = VirtualCircuit.objects.all() + filterset = VirtualCircuitFilterSet + + @classmethod + def setUpTestData(cls): + + tenant_groups = ( + TenantGroup(name='Tenant group 1', slug='tenant-group-1'), + TenantGroup(name='Tenant group 2', slug='tenant-group-2'), + TenantGroup(name='Tenant group 3', slug='tenant-group-3'), + ) + for tenantgroup in tenant_groups: + tenantgroup.save() + + tenants = ( + Tenant(name='Tenant 1', slug='tenant-1', group=tenant_groups[0]), + Tenant(name='Tenant 2', slug='tenant-2', group=tenant_groups[1]), + Tenant(name='Tenant 3', slug='tenant-3', group=tenant_groups[2]), + ) + Tenant.objects.bulk_create(tenants) + + providers = ( + Provider(name='Provider 1', slug='provider-1'), + Provider(name='Provider 2', slug='provider-2'), + Provider(name='Provider 3', slug='provider-3'), + ) + Provider.objects.bulk_create(providers) + + provider_accounts = ( + ProviderAccount(name='Provider Account 1', provider=providers[0], account='A'), + ProviderAccount(name='Provider Account 2', provider=providers[1], account='B'), + ProviderAccount(name='Provider Account 3', provider=providers[2], account='C'), + ) + ProviderAccount.objects.bulk_create(provider_accounts) + + provider_networks = ( + ProviderNetwork(name='Provider Network 1', provider=providers[0]), + ProviderNetwork(name='Provider Network 2', provider=providers[1]), + ProviderNetwork(name='Provider Network 3', provider=providers[2]), + ) + ProviderNetwork.objects.bulk_create(provider_networks) + + virtual_circuit_types = ( + VirtualCircuitType(name='Virtual Circuit Type 1', slug='virtual-circuit-type-1'), + VirtualCircuitType(name='Virtual Circuit Type 2', slug='virtual-circuit-type-2'), + VirtualCircuitType(name='Virtual Circuit Type 3', slug='virtual-circuit-type-3'), + ) + VirtualCircuitType.objects.bulk_create(virtual_circuit_types) + + virutal_circuits = ( + VirtualCircuit( + provider_network=provider_networks[0], + provider_account=provider_accounts[0], + tenant=tenants[0], + cid='Virtual Circuit 1', + type=virtual_circuit_types[0], + status=CircuitStatusChoices.STATUS_PLANNED, + description='virtualcircuit1', + ), + VirtualCircuit( + provider_network=provider_networks[1], + provider_account=provider_accounts[1], + tenant=tenants[1], + cid='Virtual Circuit 2', + type=virtual_circuit_types[1], + status=CircuitStatusChoices.STATUS_ACTIVE, + description='virtualcircuit2', + ), + VirtualCircuit( + provider_network=provider_networks[2], + provider_account=provider_accounts[2], + tenant=tenants[2], + cid='Virtual Circuit 3', + type=virtual_circuit_types[2], + status=CircuitStatusChoices.STATUS_DEPROVISIONING, + description='virtualcircuit3', + ), + ) + VirtualCircuit.objects.bulk_create(virutal_circuits) + + def test_q(self): + params = {'q': 'virtualcircuit1'} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) + + def test_cid(self): + params = {'cid': ['Virtual Circuit 1', 'Virtual Circuit 2']} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + + def test_provider(self): + providers = Provider.objects.all()[:2] + params = {'provider_id': [providers[0].pk, providers[1].pk]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + params = {'provider': [providers[0].slug, providers[1].slug]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + + def test_provider_account(self): + provider_accounts = ProviderAccount.objects.all()[:2] + params = {'provider_account_id': [provider_accounts[0].pk, provider_accounts[1].pk]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + + def test_provider_network(self): + provider_networks = ProviderNetwork.objects.all()[:2] + params = {'provider_network_id': [provider_networks[0].pk, provider_networks[1].pk]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + + def test_type(self): + virtual_circuit_types = VirtualCircuitType.objects.all()[:2] + params = {'type_id': [virtual_circuit_types[0].pk, virtual_circuit_types[1].pk]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + params = {'type': [virtual_circuit_types[0].slug, virtual_circuit_types[1].slug]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + + def test_status(self): + params = {'status': [CircuitStatusChoices.STATUS_ACTIVE, CircuitStatusChoices.STATUS_PLANNED]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + + def test_description(self): + params = {'description': ['virtualcircuit1', 'virtualcircuit2']} + 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]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + params = {'tenant': [tenants[0].slug, tenants[1].slug]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + + def test_tenant_group(self): + tenant_groups = TenantGroup.objects.all()[:2] + params = {'tenant_group_id': [tenant_groups[0].pk, tenant_groups[1].pk]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + params = {'tenant_group': [tenant_groups[0].slug, tenant_groups[1].slug]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + + +class VirtualCircuitTerminationTestCase(TestCase, ChangeLoggedFilterSetTests): + queryset = VirtualCircuitTermination.objects.all() + filterset = VirtualCircuitTerminationFilterSet + + @classmethod + def setUpTestData(cls): + manufacturer = Manufacturer.objects.create(name='Manufacturer 1', slug='manufacturer-1') + device_type = DeviceType.objects.create(manufacturer=manufacturer, model='Device Type 1') + device_role = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1') + site = Site.objects.create(name='Site 1', slug='site-1') + + devices = ( + Device(site=site, name='Device 1', device_type=device_type, role=device_role), + Device(site=site, name='Device 2', device_type=device_type, role=device_role), + Device(site=site, name='Device 3', device_type=device_type, role=device_role), + ) + Device.objects.bulk_create(devices) + + virtual_interfaces = ( + # Device 1 + Interface( + device=devices[0], + name='eth0.1', + type=InterfaceTypeChoices.TYPE_VIRTUAL + ), + Interface( + device=devices[0], + name='eth0.2', + type=InterfaceTypeChoices.TYPE_VIRTUAL + ), + # Device 2 + Interface( + device=devices[1], + name='eth0.1', + type=InterfaceTypeChoices.TYPE_VIRTUAL + ), + Interface( + device=devices[1], + name='eth0.2', + type=InterfaceTypeChoices.TYPE_VIRTUAL + ), + # Device 3 + Interface( + device=devices[2], + name='eth0.1', + type=InterfaceTypeChoices.TYPE_VIRTUAL + ), + Interface( + device=devices[2], + name='eth0.2', + type=InterfaceTypeChoices.TYPE_VIRTUAL + ), + ) + Interface.objects.bulk_create(virtual_interfaces) + + providers = ( + Provider(name='Provider 1', slug='provider-1'), + Provider(name='Provider 2', slug='provider-2'), + Provider(name='Provider 3', slug='provider-3'), + ) + Provider.objects.bulk_create(providers) + provider_networks = ( + ProviderNetwork(provider=providers[0], name='Provider Network 1'), + ProviderNetwork(provider=providers[1], name='Provider Network 2'), + ProviderNetwork(provider=providers[2], name='Provider Network 3'), + ) + ProviderNetwork.objects.bulk_create(provider_networks) + provider_accounts = ( + ProviderAccount(provider=providers[0], account='Provider Account 1'), + ProviderAccount(provider=providers[1], account='Provider Account 2'), + ProviderAccount(provider=providers[2], account='Provider Account 3'), + ) + ProviderAccount.objects.bulk_create(provider_accounts) + virtual_circuit_type = VirtualCircuitType.objects.create( + name='Virtual Circuit Type 1', + slug='virtual-circuit-type-1' + ) + + virtual_circuits = ( + VirtualCircuit( + provider_network=provider_networks[0], + provider_account=provider_accounts[0], + cid='Virtual Circuit 1', + type=virtual_circuit_type + ), + VirtualCircuit( + provider_network=provider_networks[1], + provider_account=provider_accounts[1], + cid='Virtual Circuit 2', + type=virtual_circuit_type + ), + VirtualCircuit( + provider_network=provider_networks[2], + provider_account=provider_accounts[2], + cid='Virtual Circuit 3', + type=virtual_circuit_type + ), + ) + VirtualCircuit.objects.bulk_create(virtual_circuits) + + virtual_circuit_terminations = ( + VirtualCircuitTermination( + virtual_circuit=virtual_circuits[0], + role=VirtualCircuitTerminationRoleChoices.ROLE_HUB, + interface=virtual_interfaces[0], + description='termination1' + ), + VirtualCircuitTermination( + virtual_circuit=virtual_circuits[0], + role=VirtualCircuitTerminationRoleChoices.ROLE_SPOKE, + interface=virtual_interfaces[3], + description='termination2' + ), + VirtualCircuitTermination( + virtual_circuit=virtual_circuits[1], + role=VirtualCircuitTerminationRoleChoices.ROLE_PEER, + interface=virtual_interfaces[1], + description='termination3' + ), + VirtualCircuitTermination( + virtual_circuit=virtual_circuits[1], + role=VirtualCircuitTerminationRoleChoices.ROLE_PEER, + interface=virtual_interfaces[4], + description='termination4' + ), + VirtualCircuitTermination( + virtual_circuit=virtual_circuits[2], + role=VirtualCircuitTerminationRoleChoices.ROLE_PEER, + interface=virtual_interfaces[2], + description='termination5' + ), + VirtualCircuitTermination( + virtual_circuit=virtual_circuits[2], + role=VirtualCircuitTerminationRoleChoices.ROLE_PEER, + interface=virtual_interfaces[5], + description='termination6' + ), + ) + VirtualCircuitTermination.objects.bulk_create(virtual_circuit_terminations) + + def test_q(self): + params = {'q': 'termination1'} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) + + def test_description(self): + params = {'description': ['termination1', 'termination2']} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + + def test_virtual_circuit_id(self): + virtual_circuits = VirtualCircuit.objects.filter()[:2] + params = {'virtual_circuit_id': [virtual_circuits[0].pk, virtual_circuits[1].pk]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) + + def test_provider(self): + providers = Provider.objects.all()[:2] + params = {'provider_id': [providers[0].pk, providers[1].pk]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) + params = {'provider': [providers[0].slug, providers[1].slug]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) + + def test_provider_network(self): + provider_networks = ProviderNetwork.objects.all()[:2] + params = {'provider_network_id': [provider_networks[0].pk, provider_networks[1].pk]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) + + def test_provider_account(self): + provider_accounts = ProviderAccount.objects.all()[:2] + params = {'provider_account_id': [provider_accounts[0].pk, provider_accounts[1].pk]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) + params = {'provider_account': [provider_accounts[0].account, provider_accounts[1].account]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) + + def test_interface(self): + interfaces = Interface.objects.all()[:2] + params = {'interface_id': [interfaces[0].pk, interfaces[1].pk]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) diff --git a/netbox/circuits/tests/test_views.py b/netbox/circuits/tests/test_views.py index b06ade30b..6ced9a958 100644 --- a/netbox/circuits/tests/test_views.py +++ b/netbox/circuits/tests/test_views.py @@ -1,12 +1,14 @@ import datetime +from django.contrib.contenttypes.models import ContentType from django.test import override_settings from django.urls import reverse from circuits.choices import * from circuits.models import * from core.models import ObjectType -from dcim.models import Cable, Interface, Site +from dcim.choices import InterfaceTypeChoices +from dcim.models import Cable, Device, DeviceRole, DeviceType, Interface, Manufacturer, Site from ipam.models import ASN, RIR from netbox.choices import ImportFormatChoices from users.models import ObjectPermission @@ -139,9 +141,15 @@ class CircuitTestCase(ViewTestCases.PrimaryObjectViewTestCase): CircuitType.objects.bulk_create(circuittypes) circuits = ( - Circuit(cid='Circuit 1', provider=providers[0], provider_account=provider_accounts[0], type=circuittypes[0]), - Circuit(cid='Circuit 2', provider=providers[0], provider_account=provider_accounts[0], type=circuittypes[0]), - Circuit(cid='Circuit 3', provider=providers[0], provider_account=provider_accounts[0], type=circuittypes[0]), + Circuit( + cid='Circuit 1', provider=providers[0], provider_account=provider_accounts[0], type=circuittypes[0] + ), + Circuit( + cid='Circuit 2', provider=providers[0], provider_account=provider_accounts[0], type=circuittypes[0] + ), + Circuit( + cid='Circuit 3', provider=providers[0], provider_account=provider_accounts[0], type=circuittypes[0] + ), ) Circuit.objects.bulk_create(circuits) @@ -190,27 +198,31 @@ class CircuitTestCase(ViewTestCases.PrimaryObjectViewTestCase): @override_settings(EXEMPT_VIEW_PERMISSIONS=['*'], EXEMPT_EXCLUDE_MODELS=[]) def test_bulk_import_objects_with_terminations(self): - json_data = """ + site = Site.objects.first() + json_data = f""" [ - { + {{ "cid": "Circuit 7", "provider": "Provider 1", "type": "Circuit Type 1", "status": "active", "description": "Testing Import", "terminations": [ - { + {{ "term_side": "A", - "site": "Site 1" - }, - { + "termination_type": "dcim.site", + "termination_id": "{site.pk}" + }}, + {{ "term_side": "Z", - "site": "Site 1" - } + "termination_type": "dcim.site", + "termination_id": "{site.pk}" + }} ] - } + }} ] """ + initial_count = self._get_queryset().count() data = { 'data': json_data, @@ -227,10 +239,10 @@ class CircuitTestCase(ViewTestCases.PrimaryObjectViewTestCase): obj_perm.object_types.add(ObjectType.objects.get_for_model(self.model)) # Try GET with model-level permission - self.assertHttpStatus(self.client.get(self._get_url('import')), 200) + self.assertHttpStatus(self.client.get(self._get_url('bulk_import')), 200) # Test POST with permission - self.assertHttpStatus(self.client.post(self._get_url('import'), data), 302) + self.assertHttpStatus(self.client.post(self._get_url('bulk_import'), data), 302) self.assertEqual(self._get_queryset().count(), initial_count + 1) @@ -359,24 +371,27 @@ class CircuitTerminationTestCase(ViewTestCases.PrimaryObjectViewTestCase): Circuit.objects.bulk_create(circuits) circuit_terminations = ( - CircuitTermination(circuit=circuits[0], term_side='A', site=sites[0]), - CircuitTermination(circuit=circuits[0], term_side='Z', site=sites[1]), - CircuitTermination(circuit=circuits[1], term_side='A', site=sites[0]), - CircuitTermination(circuit=circuits[1], term_side='Z', site=sites[1]), + CircuitTermination(circuit=circuits[0], term_side='A', termination=sites[0]), + CircuitTermination(circuit=circuits[0], term_side='Z', termination=sites[1]), + CircuitTermination(circuit=circuits[1], term_side='A', termination=sites[0]), + CircuitTermination(circuit=circuits[1], term_side='Z', termination=sites[1]), ) - CircuitTermination.objects.bulk_create(circuit_terminations) + for ct in circuit_terminations: + ct.save() cls.form_data = { 'circuit': circuits[2].pk, 'term_side': 'A', - 'site': sites[2].pk, + 'termination_type': ContentType.objects.get_for_model(Site).pk, + 'termination': sites[2].pk, 'description': 'New description', } + site = sites[0].pk cls.csv_data = ( - "circuit,term_side,site,description", - "Circuit 3,A,Site 1,Foo", - "Circuit 3,Z,Site 1,Bar", + "circuit,term_side,termination_type,termination_id,description", + f"Circuit 3,A,dcim.site,{site},Foo", + f"Circuit 3,Z,dcim.site,{site},Bar", ) cls.csv_update_data = ( @@ -453,6 +468,7 @@ class CircuitGroupAssignmentTestCase( ViewTestCases.DeleteObjectViewTestCase, ViewTestCases.ListObjectsViewTestCase, ViewTestCases.BulkEditObjectsViewTestCase, + ViewTestCases.BulkImportObjectsViewTestCase, ViewTestCases.BulkDeleteObjectsViewTestCase ): model = CircuitGroupAssignment @@ -482,17 +498,17 @@ class CircuitGroupAssignmentTestCase( assignments = ( CircuitGroupAssignment( group=circuit_groups[0], - circuit=circuits[0], + member=circuits[0], priority=CircuitPriorityChoices.PRIORITY_PRIMARY ), CircuitGroupAssignment( group=circuit_groups[1], - circuit=circuits[1], + member=circuits[1], priority=CircuitPriorityChoices.PRIORITY_SECONDARY ), CircuitGroupAssignment( group=circuit_groups[2], - circuit=circuits[2], + member=circuits[2], priority=CircuitPriorityChoices.PRIORITY_TERTIARY ), ) @@ -502,11 +518,420 @@ class CircuitGroupAssignmentTestCase( cls.form_data = { 'group': circuit_groups[3].pk, - 'circuit': circuits[3].pk, + 'member_type': ContentType.objects.get_for_model(Circuit).pk, + 'member': circuits[3].pk, 'priority': CircuitPriorityChoices.PRIORITY_INACTIVE, 'tags': [t.pk for t in tags], } + cls.csv_data = ( + "member_type,member_id,group,priority", + f"circuits.circuit,{circuits[0].pk},{circuit_groups[3].pk},primary", + f"circuits.circuit,{circuits[1].pk},{circuit_groups[3].pk},secondary", + f"circuits.circuit,{circuits[2].pk},{circuit_groups[3].pk},tertiary", + ) + + cls.csv_update_data = ( + "id,priority", + f"{assignments[0].pk},inactive", + f"{assignments[1].pk},inactive", + f"{assignments[2].pk},inactive", + ) + cls.bulk_edit_data = { 'priority': CircuitPriorityChoices.PRIORITY_INACTIVE, } + + +class VirtualCircuitTypeTestCase(ViewTestCases.OrganizationalObjectViewTestCase): + model = VirtualCircuitType + + @classmethod + def setUpTestData(cls): + + virtual_circuit_types = ( + VirtualCircuitType(name='Virtual Circuit Type 1', slug='circuit-type-1'), + VirtualCircuitType(name='Virtual Circuit Type 2', slug='circuit-type-2'), + VirtualCircuitType(name='Virtual Circuit Type 3', slug='circuit-type-3'), + ) + VirtualCircuitType.objects.bulk_create(virtual_circuit_types) + + tags = create_tags('Alpha', 'Bravo', 'Charlie') + + cls.form_data = { + 'name': 'Virtual Circuit Type X', + 'slug': 'virtual-circuit-type-x', + 'description': 'A new virtual circuit type', + 'tags': [t.pk for t in tags], + } + + cls.csv_data = ( + "name,slug", + "Virtual Circuit Type 4,circuit-type-4", + "Virtual Circuit Type 5,circuit-type-5", + "Virtual Circuit Type 6,circuit-type-6", + ) + + cls.csv_update_data = ( + "id,name,description", + f"{virtual_circuit_types[0].pk},Virtual Circuit Type 7,New description7", + f"{virtual_circuit_types[1].pk},Virtual Circuit Type 8,New description8", + f"{virtual_circuit_types[2].pk},Virtual Circuit Type 9,New description9", + ) + + cls.bulk_edit_data = { + 'description': 'Foo', + } + + +class VirtualCircuitTestCase(ViewTestCases.PrimaryObjectViewTestCase): + model = VirtualCircuit + + def setUp(self): + super().setUp() + + self.add_permissions( + 'circuits.add_virtualcircuittermination', + ) + + @classmethod + def setUpTestData(cls): + provider = Provider.objects.create(name='Provider 1', slug='provider-1') + provider_networks = ( + ProviderNetwork(provider=provider, name='Provider Network 1'), + ProviderNetwork(provider=provider, name='Provider Network 2'), + ) + ProviderNetwork.objects.bulk_create(provider_networks) + provider_accounts = ( + ProviderAccount(provider=provider, account='Provider Account 1'), + ProviderAccount(provider=provider, account='Provider Account 2'), + ) + ProviderAccount.objects.bulk_create(provider_accounts) + virtual_circuit_types = ( + VirtualCircuitType(name='Virtual Circuit Type 1', slug='virtual-circuit-type-1'), + VirtualCircuitType(name='Virtual Circuit Type 2', slug='virtual-circuit-type-2'), + ) + VirtualCircuitType.objects.bulk_create(virtual_circuit_types) + + virtual_circuits = ( + VirtualCircuit( + provider_network=provider_networks[0], + provider_account=provider_accounts[0], + cid='Virtual Circuit 1', + type=virtual_circuit_types[0] + ), + VirtualCircuit( + provider_network=provider_networks[0], + provider_account=provider_accounts[0], + cid='Virtual Circuit 2', + type=virtual_circuit_types[0] + ), + VirtualCircuit( + provider_network=provider_networks[0], + provider_account=provider_accounts[0], + cid='Virtual Circuit 3', + type=virtual_circuit_types[0] + ), + ) + VirtualCircuit.objects.bulk_create(virtual_circuits) + + device = create_test_device('Device 1') + interfaces = ( + Interface(device=device, name='Interface 1', type=InterfaceTypeChoices.TYPE_VIRTUAL), + Interface(device=device, name='Interface 2', type=InterfaceTypeChoices.TYPE_VIRTUAL), + Interface(device=device, name='Interface 3', type=InterfaceTypeChoices.TYPE_VIRTUAL), + ) + Interface.objects.bulk_create(interfaces) + + tags = create_tags('Alpha', 'Bravo', 'Charlie') + + cls.form_data = { + 'cid': 'Virtual Circuit X', + 'provider_network': provider_networks[1].pk, + 'provider_account': provider_accounts[1].pk, + 'type': virtual_circuit_types[1].pk, + 'status': CircuitStatusChoices.STATUS_PLANNED, + 'description': 'A new virtual circuit', + 'comments': 'Some comments', + 'tags': [t.pk for t in tags], + } + + cls.csv_data = ( + "cid,provider_network,provider_account,type,status", + ( + f"Virtual Circuit 4,Provider Network 1,Provider Account 1,{virtual_circuit_types[0].name}," + f"{CircuitStatusChoices.STATUS_PLANNED}" + ), + ( + f"Virtual Circuit 5,Provider Network 1,Provider Account 1,{virtual_circuit_types[0].name}," + f"{CircuitStatusChoices.STATUS_PLANNED}" + ), + ( + f"Virtual Circuit 6,Provider Network 1,Provider Account 1,{virtual_circuit_types[0].name}," + f"{CircuitStatusChoices.STATUS_PLANNED}" + ), + ) + + cls.csv_update_data = ( + "id,cid,description,type,status", + ( + f"{virtual_circuits[0].pk},Virtual Circuit A,New description,{virtual_circuit_types[1].name}," + f"{CircuitStatusChoices.STATUS_DECOMMISSIONED}" + ), + ( + f"{virtual_circuits[1].pk},Virtual Circuit B,New description,{virtual_circuit_types[1].name}," + f"{CircuitStatusChoices.STATUS_DECOMMISSIONED}" + ), + ( + f"{virtual_circuits[2].pk},Virtual Circuit C,New description,{virtual_circuit_types[1].name}," + f"{CircuitStatusChoices.STATUS_DECOMMISSIONED}" + ), + ) + + cls.bulk_edit_data = { + 'provider_network': provider_networks[1].pk, + 'provider_account': provider_accounts[1].pk, + 'type': virtual_circuit_types[1].pk, + 'status': CircuitStatusChoices.STATUS_DECOMMISSIONED, + 'description': 'New description', + 'comments': 'New comments', + } + + @override_settings(EXEMPT_VIEW_PERMISSIONS=['*'], EXEMPT_EXCLUDE_MODELS=[]) + def test_bulk_import_objects_with_terminations(self): + interfaces = Interface.objects.filter(type=InterfaceTypeChoices.TYPE_VIRTUAL) + json_data = f""" + [ + {{ + "cid": "Virtual Circuit 7", + "provider_network": "Provider Network 1", + "type": "Virtual Circuit Type 1", + "status": "active", + "terminations": [ + {{ + "role": "hub", + "interface": {interfaces[0].pk} + }}, + {{ + "role": "spoke", + "interface": {interfaces[1].pk} + }}, + {{ + "role": "spoke", + "interface": {interfaces[2].pk} + }} + ] + }} + ] + """ + + initial_count = self._get_queryset().count() + data = { + 'data': json_data, + 'format': ImportFormatChoices.JSON, + } + + # Assign model-level permission + obj_perm = ObjectPermission( + name='Test permission', + actions=['add'] + ) + obj_perm.save() + obj_perm.users.add(self.user) + obj_perm.object_types.add(ObjectType.objects.get_for_model(self.model)) + + # Try GET with model-level permission + self.assertHttpStatus(self.client.get(self._get_url('bulk_import')), 200) + + # Test POST with permission + self.assertHttpStatus(self.client.post(self._get_url('bulk_import'), data), 302) + self.assertEqual(self._get_queryset().count(), initial_count + 1) + + +class VirtualCircuitTerminationTestCase(ViewTestCases.PrimaryObjectViewTestCase): + model = VirtualCircuitTermination + + @classmethod + def setUpTestData(cls): + manufacturer = Manufacturer.objects.create(name='Manufacturer 1', slug='manufacturer-1') + device_type = DeviceType.objects.create(manufacturer=manufacturer, model='Device Type 1') + device_role = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1') + site = Site.objects.create(name='Site 1', slug='site-1') + + devices = ( + Device(site=site, name='hub', device_type=device_type, role=device_role), + Device(site=site, name='spoke1', device_type=device_type, role=device_role), + Device(site=site, name='spoke2', device_type=device_type, role=device_role), + Device(site=site, name='spoke3', device_type=device_type, role=device_role), + ) + Device.objects.bulk_create(devices) + + physical_interfaces = ( + Interface(device=devices[0], name='eth0', type=InterfaceTypeChoices.TYPE_1GE_FIXED), + Interface(device=devices[1], name='eth0', type=InterfaceTypeChoices.TYPE_1GE_FIXED), + Interface(device=devices[2], name='eth0', type=InterfaceTypeChoices.TYPE_1GE_FIXED), + Interface(device=devices[3], name='eth0', type=InterfaceTypeChoices.TYPE_1GE_FIXED), + ) + Interface.objects.bulk_create(physical_interfaces) + + virtual_interfaces = ( + # Point-to-point VCs + Interface( + device=devices[0], + name='eth0.1', + parent=physical_interfaces[0], + type=InterfaceTypeChoices.TYPE_VIRTUAL + ), + Interface( + device=devices[0], + name='eth0.2', + parent=physical_interfaces[0], + type=InterfaceTypeChoices.TYPE_VIRTUAL + ), + Interface( + device=devices[0], + name='eth0.3', + parent=physical_interfaces[0], + type=InterfaceTypeChoices.TYPE_VIRTUAL + ), + Interface( + device=devices[1], + name='eth0.1', + parent=physical_interfaces[1], + type=InterfaceTypeChoices.TYPE_VIRTUAL + ), + Interface( + device=devices[2], + name='eth0.1', + parent=physical_interfaces[2], + type=InterfaceTypeChoices.TYPE_VIRTUAL + ), + Interface( + device=devices[3], + name='eth0.1', + parent=physical_interfaces[3], + type=InterfaceTypeChoices.TYPE_VIRTUAL + ), + + # Hub and spoke VCs + Interface( + device=devices[0], + name='eth0.9', + parent=physical_interfaces[0], + type=InterfaceTypeChoices.TYPE_VIRTUAL + ), + Interface( + device=devices[1], + name='eth0.9', + parent=physical_interfaces[0], + type=InterfaceTypeChoices.TYPE_VIRTUAL + ), + Interface( + device=devices[2], + name='eth0.9', + parent=physical_interfaces[0], + type=InterfaceTypeChoices.TYPE_VIRTUAL + ), + Interface( + device=devices[3], + name='eth0.9', + parent=physical_interfaces[0], + type=InterfaceTypeChoices.TYPE_VIRTUAL + ), + ) + Interface.objects.bulk_create(virtual_interfaces) + + provider = Provider.objects.create(name='Provider 1', slug='provider-1') + provider_network = ProviderNetwork.objects.create(provider=provider, name='Provider Network 1') + provider_account = ProviderAccount.objects.create(provider=provider, account='Provider Account 1') + virtual_circuit_type = VirtualCircuitType.objects.create( + name='Virtual Circuit Type 1', + slug='virtual-circuit-type-1' + ) + + virtual_circuits = ( + VirtualCircuit( + provider_network=provider_network, + provider_account=provider_account, + cid='Virtual Circuit 1', + type=virtual_circuit_type + ), + VirtualCircuit( + provider_network=provider_network, + provider_account=provider_account, + cid='Virtual Circuit 2', + type=virtual_circuit_type + ), + VirtualCircuit( + provider_network=provider_network, + provider_account=provider_account, + cid='Virtual Circuit 3', + type=virtual_circuit_type + ), + VirtualCircuit( + provider_network=provider_network, + provider_account=provider_account, + cid='Virtual Circuit 4', + type=virtual_circuit_type + ), + ) + VirtualCircuit.objects.bulk_create(virtual_circuits) + + virtual_circuit_terminations = ( + VirtualCircuitTermination( + virtual_circuit=virtual_circuits[0], + role=VirtualCircuitTerminationRoleChoices.ROLE_PEER, + interface=virtual_interfaces[0] + ), + VirtualCircuitTermination( + virtual_circuit=virtual_circuits[0], + role=VirtualCircuitTerminationRoleChoices.ROLE_PEER, + interface=virtual_interfaces[3] + ), + VirtualCircuitTermination( + virtual_circuit=virtual_circuits[1], + role=VirtualCircuitTerminationRoleChoices.ROLE_PEER, + interface=virtual_interfaces[1] + ), + VirtualCircuitTermination( + virtual_circuit=virtual_circuits[1], + role=VirtualCircuitTerminationRoleChoices.ROLE_PEER, + interface=virtual_interfaces[4] + ), + VirtualCircuitTermination( + virtual_circuit=virtual_circuits[2], + role=VirtualCircuitTerminationRoleChoices.ROLE_PEER, + interface=virtual_interfaces[2] + ), + VirtualCircuitTermination( + virtual_circuit=virtual_circuits[2], + role=VirtualCircuitTerminationRoleChoices.ROLE_PEER, + interface=virtual_interfaces[5] + ), + ) + VirtualCircuitTermination.objects.bulk_create(virtual_circuit_terminations) + + cls.form_data = { + 'virtual_circuit': virtual_circuits[3].pk, + 'role': VirtualCircuitTerminationRoleChoices.ROLE_HUB, + 'interface': virtual_interfaces[6].pk + } + + cls.csv_data = ( + "virtual_circuit,role,interface,description", + f"Virtual Circuit 4,{VirtualCircuitTerminationRoleChoices.ROLE_HUB},{virtual_interfaces[6].pk},Hub", + f"Virtual Circuit 4,{VirtualCircuitTerminationRoleChoices.ROLE_SPOKE},{virtual_interfaces[7].pk},Spoke 1", + f"Virtual Circuit 4,{VirtualCircuitTerminationRoleChoices.ROLE_SPOKE},{virtual_interfaces[8].pk},Spoke 2", + f"Virtual Circuit 4,{VirtualCircuitTerminationRoleChoices.ROLE_SPOKE},{virtual_interfaces[9].pk},Spoke 3", + ) + + cls.csv_update_data = ( + "id,role,description", + f"{virtual_circuit_terminations[0].pk},{VirtualCircuitTerminationRoleChoices.ROLE_SPOKE},New description", + f"{virtual_circuit_terminations[1].pk},{VirtualCircuitTerminationRoleChoices.ROLE_SPOKE},New description", + f"{virtual_circuit_terminations[2].pk},{VirtualCircuitTerminationRoleChoices.ROLE_SPOKE},New description", + ) + + cls.bulk_edit_data = { + 'description': 'New description', + } diff --git a/netbox/circuits/urls.py b/netbox/circuits/urls.py index 2171d49be..90e9e511f 100644 --- a/netbox/circuits/urls.py +++ b/netbox/circuits/urls.py @@ -5,69 +5,71 @@ from . import views app_name = 'circuits' urlpatterns = [ - - # Providers - path('providers/', views.ProviderListView.as_view(), name='provider_list'), - path('providers/add/', views.ProviderEditView.as_view(), name='provider_add'), - path('providers/import/', views.ProviderBulkImportView.as_view(), name='provider_import'), - path('providers/edit/', views.ProviderBulkEditView.as_view(), name='provider_bulk_edit'), - path('providers/delete/', views.ProviderBulkDeleteView.as_view(), name='provider_bulk_delete'), + path('providers/', include(get_model_urls('circuits', 'provider', detail=False))), path('providers//', include(get_model_urls('circuits', 'provider'))), - # Provider accounts - path('provider-accounts/', views.ProviderAccountListView.as_view(), name='provideraccount_list'), - path('provider-accounts/add/', views.ProviderAccountEditView.as_view(), name='provideraccount_add'), - path('provider-accounts/import/', views.ProviderAccountBulkImportView.as_view(), name='provideraccount_import'), - path('provider-accounts/edit/', views.ProviderAccountBulkEditView.as_view(), name='provideraccount_bulk_edit'), - path('provider-accounts/delete/', views.ProviderAccountBulkDeleteView.as_view(), name='provideraccount_bulk_delete'), + path('provider-accounts/', include(get_model_urls('circuits', 'provideraccount', detail=False))), path('provider-accounts//', include(get_model_urls('circuits', 'provideraccount'))), - # Provider networks - path('provider-networks/', views.ProviderNetworkListView.as_view(), name='providernetwork_list'), - path('provider-networks/add/', views.ProviderNetworkEditView.as_view(), name='providernetwork_add'), - path('provider-networks/import/', views.ProviderNetworkBulkImportView.as_view(), name='providernetwork_import'), - path('provider-networks/edit/', views.ProviderNetworkBulkEditView.as_view(), name='providernetwork_bulk_edit'), - path('provider-networks/delete/', views.ProviderNetworkBulkDeleteView.as_view(), name='providernetwork_bulk_delete'), + path('provider-networks/', include(get_model_urls('circuits', 'providernetwork', detail=False))), path('provider-networks//', include(get_model_urls('circuits', 'providernetwork'))), - # Circuit types - path('circuit-types/', views.CircuitTypeListView.as_view(), name='circuittype_list'), - path('circuit-types/add/', views.CircuitTypeEditView.as_view(), name='circuittype_add'), - path('circuit-types/import/', views.CircuitTypeBulkImportView.as_view(), name='circuittype_import'), - path('circuit-types/edit/', views.CircuitTypeBulkEditView.as_view(), name='circuittype_bulk_edit'), - path('circuit-types/delete/', views.CircuitTypeBulkDeleteView.as_view(), name='circuittype_bulk_delete'), + path('circuit-types/', include(get_model_urls('circuits', 'circuittype', detail=False))), path('circuit-types//', include(get_model_urls('circuits', 'circuittype'))), - # Circuits - path('circuits/', views.CircuitListView.as_view(), name='circuit_list'), - path('circuits/add/', views.CircuitEditView.as_view(), name='circuit_add'), - path('circuits/import/', views.CircuitBulkImportView.as_view(), name='circuit_import'), - path('circuits/edit/', views.CircuitBulkEditView.as_view(), name='circuit_bulk_edit'), - path('circuits/delete/', views.CircuitBulkDeleteView.as_view(), name='circuit_bulk_delete'), - path('circuits//terminations/swap/', views.CircuitSwapTerminations.as_view(), name='circuit_terminations_swap'), + path('circuits/', include(get_model_urls('circuits', 'circuit', detail=False))), + path( + 'circuits//terminations/swap/', + views.CircuitSwapTerminations.as_view(), + name='circuit_terminations_swap' + ), path('circuits//', include(get_model_urls('circuits', 'circuit'))), - # Circuit terminations - path('circuit-terminations/', views.CircuitTerminationListView.as_view(), name='circuittermination_list'), - path('circuit-terminations/add/', views.CircuitTerminationEditView.as_view(), name='circuittermination_add'), - path('circuit-terminations/import/', views.CircuitTerminationBulkImportView.as_view(), name='circuittermination_import'), - path('circuit-terminations/edit/', views.CircuitTerminationBulkEditView.as_view(), name='circuittermination_bulk_edit'), - path('circuit-terminations/delete/', views.CircuitTerminationBulkDeleteView.as_view(), name='circuittermination_bulk_delete'), + path('circuit-terminations/', include(get_model_urls('circuits', 'circuittermination', detail=False))), path('circuit-terminations//', include(get_model_urls('circuits', 'circuittermination'))), - # Circuit Groups - path('circuit-groups/', views.CircuitGroupListView.as_view(), name='circuitgroup_list'), - path('circuit-groups/add/', views.CircuitGroupEditView.as_view(), name='circuitgroup_add'), - path('circuit-groups/import/', views.CircuitGroupBulkImportView.as_view(), name='circuitgroup_import'), - path('circuit-groups/edit/', views.CircuitGroupBulkEditView.as_view(), name='circuitgroup_bulk_edit'), - path('circuit-groups/delete/', views.CircuitGroupBulkDeleteView.as_view(), name='circuitgroup_bulk_delete'), + path('circuit-groups/', include(get_model_urls('circuits', 'circuitgroup', detail=False))), path('circuit-groups//', include(get_model_urls('circuits', 'circuitgroup'))), - # Circuit Group Assignments - path('circuit-group-assignments/', views.CircuitGroupAssignmentListView.as_view(), name='circuitgroupassignment_list'), - path('circuit-group-assignments/add/', views.CircuitGroupAssignmentEditView.as_view(), name='circuitgroupassignment_add'), - path('circuit-group-assignments/import/', views.CircuitGroupAssignmentBulkImportView.as_view(), name='circuitgroupassignment_import'), - path('circuit-group-assignments/edit/', views.CircuitGroupAssignmentBulkEditView.as_view(), name='circuitgroupassignment_bulk_edit'), - path('circuit-group-assignments/delete/', views.CircuitGroupAssignmentBulkDeleteView.as_view(), name='circuitgroupassignment_bulk_delete'), + path('circuit-group-assignments/', include(get_model_urls('circuits', 'circuitgroupassignment', detail=False))), path('circuit-group-assignments//', include(get_model_urls('circuits', 'circuitgroupassignment'))), + + # Virtual circuits + path('virtual-circuits/', views.VirtualCircuitListView.as_view(), name='virtualcircuit_list'), + path('virtual-circuits/add/', views.VirtualCircuitEditView.as_view(), name='virtualcircuit_add'), + path('virtual-circuits/import/', views.VirtualCircuitBulkImportView.as_view(), name='virtualcircuit_bulk_import'), + path('virtual-circuits/edit/', views.VirtualCircuitBulkEditView.as_view(), name='virtualcircuit_bulk_edit'), + path('virtual-circuits/delete/', views.VirtualCircuitBulkDeleteView.as_view(), name='virtualcircuit_bulk_delete'), + path('virtual-circuits//', include(get_model_urls('circuits', 'virtualcircuit'))), + + path('virtual-circuit-types/', include(get_model_urls('circuits', 'virtualcircuittype', detail=False))), + path('virtual-circuit-types//', include(get_model_urls('circuits', 'virtualcircuittype'))), + + # Virtual circuit terminations + path( + 'virtual-circuit-terminations/', + views.VirtualCircuitTerminationListView.as_view(), + name='virtualcircuittermination_list', + ), + path( + 'virtual-circuit-terminations/add/', + views.VirtualCircuitTerminationEditView.as_view(), + name='virtualcircuittermination_add', + ), + path( + 'virtual-circuit-terminations/import/', + views.VirtualCircuitTerminationBulkImportView.as_view(), + name='virtualcircuittermination_bulk_import', + ), + path( + 'virtual-circuit-terminations/edit/', + views.VirtualCircuitTerminationBulkEditView.as_view(), + name='virtualcircuittermination_bulk_edit', + ), + path( + 'virtual-circuit-terminations/delete/', + views.VirtualCircuitTerminationBulkDeleteView.as_view(), + name='virtualcircuittermination_bulk_delete', + ), + path('virtual-circuit-terminations//', include(get_model_urls('circuits', 'virtualcircuittermination'))), ] diff --git a/netbox/circuits/views.py b/netbox/circuits/views.py index 8218960c9..3bd81c33a 100644 --- a/netbox/circuits/views.py +++ b/netbox/circuits/views.py @@ -17,6 +17,7 @@ from .models import * # Providers # +@register_model_view(Provider, 'list', path='', detail=False) class ProviderListView(generic.ObjectListView): queryset = Provider.objects.annotate( count_circuits=count_related(Circuit, 'provider') @@ -36,6 +37,7 @@ class ProviderView(GetRelatedModelsMixin, generic.ObjectView): } +@register_model_view(Provider, 'add', detail=False) @register_model_view(Provider, 'edit') class ProviderEditView(generic.ObjectEditView): queryset = Provider.objects.all() @@ -47,11 +49,13 @@ class ProviderDeleteView(generic.ObjectDeleteView): queryset = Provider.objects.all() +@register_model_view(Provider, 'bulk_import', detail=False) class ProviderBulkImportView(generic.BulkImportView): queryset = Provider.objects.all() model_form = forms.ProviderImportForm +@register_model_view(Provider, 'bulk_edit', path='edit', detail=False) class ProviderBulkEditView(generic.BulkEditView): queryset = Provider.objects.annotate( count_circuits=count_related(Circuit, 'provider') @@ -61,6 +65,7 @@ class ProviderBulkEditView(generic.BulkEditView): form = forms.ProviderBulkEditForm +@register_model_view(Provider, 'bulk_delete', path='delete', detail=False) class ProviderBulkDeleteView(generic.BulkDeleteView): queryset = Provider.objects.annotate( count_circuits=count_related(Circuit, 'provider') @@ -78,6 +83,7 @@ class ProviderContactsView(ObjectContactsView): # ProviderAccounts # +@register_model_view(ProviderAccount, 'list', path='', detail=False) class ProviderAccountListView(generic.ObjectListView): queryset = ProviderAccount.objects.annotate( count_circuits=count_related(Circuit, 'provider_account') @@ -97,6 +103,7 @@ class ProviderAccountView(GetRelatedModelsMixin, generic.ObjectView): } +@register_model_view(ProviderAccount, 'add', detail=False) @register_model_view(ProviderAccount, 'edit') class ProviderAccountEditView(generic.ObjectEditView): queryset = ProviderAccount.objects.all() @@ -108,12 +115,14 @@ class ProviderAccountDeleteView(generic.ObjectDeleteView): queryset = ProviderAccount.objects.all() +@register_model_view(ProviderAccount, 'bulk_import', detail=False) class ProviderAccountBulkImportView(generic.BulkImportView): queryset = ProviderAccount.objects.all() model_form = forms.ProviderAccountImportForm table = tables.ProviderAccountTable +@register_model_view(ProviderAccount, 'bulk_edit', path='edit', detail=False) class ProviderAccountBulkEditView(generic.BulkEditView): queryset = ProviderAccount.objects.annotate( count_circuits=count_related(Circuit, 'provider_account') @@ -123,6 +132,7 @@ class ProviderAccountBulkEditView(generic.BulkEditView): form = forms.ProviderAccountBulkEditForm +@register_model_view(ProviderAccount, 'bulk_delete', path='delete', detail=False) class ProviderAccountBulkDeleteView(generic.BulkDeleteView): queryset = ProviderAccount.objects.annotate( count_circuits=count_related(Circuit, 'provider_account') @@ -140,6 +150,7 @@ class ProviderAccountContactsView(ObjectContactsView): # Provider networks # +@register_model_view(ProviderNetwork, 'list', path='', detail=False) class ProviderNetworkListView(generic.ObjectListView): queryset = ProviderNetwork.objects.all() filterset = filtersets.ProviderNetworkFilterSet @@ -158,7 +169,7 @@ class ProviderNetworkView(GetRelatedModelsMixin, generic.ObjectView): instance, extra=( ( - Circuit.objects.restrict(request.user, 'view').filter(terminations__provider_network=instance), + Circuit.objects.restrict(request.user, 'view').filter(terminations___provider_network=instance), 'provider_network_id', ), ), @@ -166,6 +177,7 @@ class ProviderNetworkView(GetRelatedModelsMixin, generic.ObjectView): } +@register_model_view(ProviderNetwork, 'add', detail=False) @register_model_view(ProviderNetwork, 'edit') class ProviderNetworkEditView(generic.ObjectEditView): queryset = ProviderNetwork.objects.all() @@ -177,11 +189,13 @@ class ProviderNetworkDeleteView(generic.ObjectDeleteView): queryset = ProviderNetwork.objects.all() +@register_model_view(ProviderNetwork, 'bulk_import', detail=False) class ProviderNetworkBulkImportView(generic.BulkImportView): queryset = ProviderNetwork.objects.all() model_form = forms.ProviderNetworkImportForm +@register_model_view(ProviderNetwork, 'bulk_edit', path='edit', detail=False) class ProviderNetworkBulkEditView(generic.BulkEditView): queryset = ProviderNetwork.objects.all() filterset = filtersets.ProviderNetworkFilterSet @@ -189,6 +203,7 @@ class ProviderNetworkBulkEditView(generic.BulkEditView): form = forms.ProviderNetworkBulkEditForm +@register_model_view(ProviderNetwork, 'bulk_delete', path='delete', detail=False) class ProviderNetworkBulkDeleteView(generic.BulkDeleteView): queryset = ProviderNetwork.objects.all() filterset = filtersets.ProviderNetworkFilterSet @@ -199,6 +214,7 @@ class ProviderNetworkBulkDeleteView(generic.BulkDeleteView): # Circuit Types # +@register_model_view(CircuitType, 'list', path='', detail=False) class CircuitTypeListView(generic.ObjectListView): queryset = CircuitType.objects.annotate( circuit_count=count_related(Circuit, 'type') @@ -218,6 +234,7 @@ class CircuitTypeView(GetRelatedModelsMixin, generic.ObjectView): } +@register_model_view(CircuitType, 'add', detail=False) @register_model_view(CircuitType, 'edit') class CircuitTypeEditView(generic.ObjectEditView): queryset = CircuitType.objects.all() @@ -229,11 +246,13 @@ class CircuitTypeDeleteView(generic.ObjectDeleteView): queryset = CircuitType.objects.all() +@register_model_view(CircuitType, 'bulk_import', detail=False) class CircuitTypeBulkImportView(generic.BulkImportView): queryset = CircuitType.objects.all() model_form = forms.CircuitTypeImportForm +@register_model_view(CircuitType, 'bulk_edit', path='edit', detail=False) class CircuitTypeBulkEditView(generic.BulkEditView): queryset = CircuitType.objects.annotate( circuit_count=count_related(Circuit, 'type') @@ -243,6 +262,7 @@ class CircuitTypeBulkEditView(generic.BulkEditView): form = forms.CircuitTypeBulkEditForm +@register_model_view(CircuitType, 'bulk_delete', path='delete', detail=False) class CircuitTypeBulkDeleteView(generic.BulkDeleteView): queryset = CircuitType.objects.annotate( circuit_count=count_related(Circuit, 'type') @@ -255,10 +275,10 @@ class CircuitTypeBulkDeleteView(generic.BulkDeleteView): # Circuits # +@register_model_view(Circuit, 'list', path='', detail=False) class CircuitListView(generic.ObjectListView): queryset = Circuit.objects.prefetch_related( - 'tenant__group', 'termination_a__site', 'termination_z__site', - 'termination_a__provider_network', 'termination_z__provider_network', + 'tenant__group', 'termination_a__termination', 'termination_z__termination', ) filterset = filtersets.CircuitFilterSet filterset_form = forms.CircuitFilterForm @@ -270,6 +290,7 @@ class CircuitView(generic.ObjectView): queryset = Circuit.objects.all() +@register_model_view(Circuit, 'add', detail=False) @register_model_view(Circuit, 'edit') class CircuitEditView(generic.ObjectEditView): queryset = Circuit.objects.all() @@ -281,6 +302,7 @@ class CircuitDeleteView(generic.ObjectDeleteView): queryset = Circuit.objects.all() +@register_model_view(Circuit, 'bulk_import', detail=False) class CircuitBulkImportView(generic.BulkImportView): queryset = Circuit.objects.all() model_form = forms.CircuitImportForm @@ -296,20 +318,20 @@ class CircuitBulkImportView(generic.BulkImportView): return data +@register_model_view(Circuit, 'bulk_edit', path='edit', detail=False) class CircuitBulkEditView(generic.BulkEditView): queryset = Circuit.objects.prefetch_related( - 'termination_a__site', 'termination_z__site', - 'termination_a__provider_network', 'termination_z__provider_network', + 'tenant__group', 'termination_a__termination', 'termination_z__termination', ) filterset = filtersets.CircuitFilterSet table = tables.CircuitTable form = forms.CircuitBulkEditForm +@register_model_view(Circuit, 'bulk_delete', path='delete', detail=False) class CircuitBulkDeleteView(generic.BulkDeleteView): queryset = Circuit.objects.prefetch_related( - 'termination_a__site', 'termination_z__site', - 'termination_a__provider_network', 'termination_z__provider_network', + 'tenant__group', 'termination_a__termination', 'termination_z__termination', ) filterset = filtersets.CircuitFilterSet table = tables.CircuitTable @@ -400,6 +422,7 @@ class CircuitContactsView(ObjectContactsView): # Circuit terminations # +@register_model_view(CircuitTermination, 'list', path='', detail=False) class CircuitTerminationListView(generic.ObjectListView): queryset = CircuitTermination.objects.all() filterset = filtersets.CircuitTerminationFilterSet @@ -412,6 +435,7 @@ class CircuitTerminationView(generic.ObjectView): queryset = CircuitTermination.objects.all() +@register_model_view(CircuitTermination, 'add', detail=False) @register_model_view(CircuitTermination, 'edit') class CircuitTerminationEditView(generic.ObjectEditView): queryset = CircuitTermination.objects.all() @@ -423,11 +447,13 @@ class CircuitTerminationDeleteView(generic.ObjectDeleteView): queryset = CircuitTermination.objects.all() +@register_model_view(CircuitTermination, 'bulk_import', detail=False) class CircuitTerminationBulkImportView(generic.BulkImportView): queryset = CircuitTermination.objects.all() model_form = forms.CircuitTerminationImportForm +@register_model_view(CircuitTermination, 'bulk_edit', path='edit', detail=False) class CircuitTerminationBulkEditView(generic.BulkEditView): queryset = CircuitTermination.objects.all() filterset = filtersets.CircuitTerminationFilterSet @@ -435,6 +461,7 @@ class CircuitTerminationBulkEditView(generic.BulkEditView): form = forms.CircuitTerminationBulkEditForm +@register_model_view(CircuitTermination, 'bulk_delete', path='delete', detail=False) class CircuitTerminationBulkDeleteView(generic.BulkDeleteView): queryset = CircuitTermination.objects.all() filterset = filtersets.CircuitTerminationFilterSet @@ -449,6 +476,7 @@ register_model_view(CircuitTermination, 'trace', kwargs={'model': CircuitTermina # Circuit Groups # +@register_model_view(CircuitGroup, 'list', path='', detail=False) class CircuitGroupListView(generic.ObjectListView): queryset = CircuitGroup.objects.annotate( circuit_group_assignment_count=count_related(CircuitGroupAssignment, 'group') @@ -468,6 +496,7 @@ class CircuitGroupView(GetRelatedModelsMixin, generic.ObjectView): } +@register_model_view(CircuitGroup, 'add', detail=False) @register_model_view(CircuitGroup, 'edit') class CircuitGroupEditView(generic.ObjectEditView): queryset = CircuitGroup.objects.all() @@ -479,11 +508,13 @@ class CircuitGroupDeleteView(generic.ObjectDeleteView): queryset = CircuitGroup.objects.all() +@register_model_view(CircuitGroup, 'bulk_import', detail=False) class CircuitGroupBulkImportView(generic.BulkImportView): queryset = CircuitGroup.objects.all() model_form = forms.CircuitGroupImportForm +@register_model_view(CircuitGroup, 'bulk_edit', path='edit', detail=False) class CircuitGroupBulkEditView(generic.BulkEditView): queryset = CircuitGroup.objects.all() filterset = filtersets.CircuitGroupFilterSet @@ -491,6 +522,7 @@ class CircuitGroupBulkEditView(generic.BulkEditView): form = forms.CircuitGroupBulkEditForm +@register_model_view(CircuitGroup, 'bulk_delete', path='delete', detail=False) class CircuitGroupBulkDeleteView(generic.BulkDeleteView): queryset = CircuitGroup.objects.all() filterset = filtersets.CircuitGroupFilterSet @@ -501,6 +533,7 @@ class CircuitGroupBulkDeleteView(generic.BulkDeleteView): # Circuit Groups # +@register_model_view(CircuitGroupAssignment, 'list', path='', detail=False) class CircuitGroupAssignmentListView(generic.ObjectListView): queryset = CircuitGroupAssignment.objects.all() filterset = filtersets.CircuitGroupAssignmentFilterSet @@ -513,6 +546,7 @@ class CircuitGroupAssignmentView(generic.ObjectView): queryset = CircuitGroupAssignment.objects.all() +@register_model_view(CircuitGroupAssignment, 'add', detail=False) @register_model_view(CircuitGroupAssignment, 'edit') class CircuitGroupAssignmentEditView(generic.ObjectEditView): queryset = CircuitGroupAssignment.objects.all() @@ -524,11 +558,13 @@ class CircuitGroupAssignmentDeleteView(generic.ObjectDeleteView): queryset = CircuitGroupAssignment.objects.all() +@register_model_view(CircuitGroupAssignment, 'bulk_import', detail=False) class CircuitGroupAssignmentBulkImportView(generic.BulkImportView): queryset = CircuitGroupAssignment.objects.all() model_form = forms.CircuitGroupAssignmentImportForm +@register_model_view(CircuitGroupAssignment, 'bulk_edit', path='edit', detail=False) class CircuitGroupAssignmentBulkEditView(generic.BulkEditView): queryset = CircuitGroupAssignment.objects.all() filterset = filtersets.CircuitGroupAssignmentFilterSet @@ -536,7 +572,175 @@ class CircuitGroupAssignmentBulkEditView(generic.BulkEditView): form = forms.CircuitGroupAssignmentBulkEditForm +@register_model_view(CircuitGroupAssignment, 'bulk_delete', path='delete', detail=False) class CircuitGroupAssignmentBulkDeleteView(generic.BulkDeleteView): queryset = CircuitGroupAssignment.objects.all() filterset = filtersets.CircuitGroupAssignmentFilterSet table = tables.CircuitGroupAssignmentTable + + +# +# Virtual circuit Types +# + +@register_model_view(VirtualCircuitType, 'list', path='', detail=False) +class VirtualCircuitTypeListView(generic.ObjectListView): + queryset = VirtualCircuitType.objects.annotate( + virtual_circuit_count=count_related(VirtualCircuit, 'type') + ) + filterset = filtersets.VirtualCircuitTypeFilterSet + filterset_form = forms.VirtualCircuitTypeFilterForm + table = tables.VirtualCircuitTypeTable + + +@register_model_view(VirtualCircuitType) +class VirtualCircuitTypeView(GetRelatedModelsMixin, generic.ObjectView): + queryset = VirtualCircuitType.objects.all() + + def get_extra_context(self, request, instance): + return { + 'related_models': self.get_related_models(request, instance), + } + + +@register_model_view(VirtualCircuitType, 'add', detail=False) +@register_model_view(VirtualCircuitType, 'edit') +class VirtualCircuitTypeEditView(generic.ObjectEditView): + queryset = VirtualCircuitType.objects.all() + form = forms.VirtualCircuitTypeForm + + +@register_model_view(VirtualCircuitType, 'delete') +class VirtualCircuitTypeDeleteView(generic.ObjectDeleteView): + queryset = VirtualCircuitType.objects.all() + + +@register_model_view(VirtualCircuitType, 'bulk_import', detail=False) +class VirtualCircuitTypeBulkImportView(generic.BulkImportView): + queryset = VirtualCircuitType.objects.all() + model_form = forms.VirtualCircuitTypeImportForm + + +@register_model_view(VirtualCircuitType, 'bulk_edit', path='edit', detail=False) +class VirtualCircuitTypeBulkEditView(generic.BulkEditView): + queryset = VirtualCircuitType.objects.annotate( + circuit_count=count_related(Circuit, 'type') + ) + filterset = filtersets.VirtualCircuitTypeFilterSet + table = tables.VirtualCircuitTypeTable + form = forms.VirtualCircuitTypeBulkEditForm + + +@register_model_view(VirtualCircuitType, 'bulk_delete', path='delete', detail=False) +class VirtualCircuitTypeBulkDeleteView(generic.BulkDeleteView): + queryset = VirtualCircuitType.objects.annotate( + circuit_count=count_related(Circuit, 'type') + ) + filterset = filtersets.VirtualCircuitTypeFilterSet + table = tables.VirtualCircuitTypeTable + + +# +# Virtual circuits +# + +class VirtualCircuitListView(generic.ObjectListView): + queryset = VirtualCircuit.objects.annotate( + termination_count=count_related(VirtualCircuitTermination, 'virtual_circuit') + ) + filterset = filtersets.VirtualCircuitFilterSet + filterset_form = forms.VirtualCircuitFilterForm + table = tables.VirtualCircuitTable + + +@register_model_view(VirtualCircuit) +class VirtualCircuitView(generic.ObjectView): + queryset = VirtualCircuit.objects.all() + + +@register_model_view(VirtualCircuit, 'edit') +class VirtualCircuitEditView(generic.ObjectEditView): + queryset = VirtualCircuit.objects.all() + form = forms.VirtualCircuitForm + + +@register_model_view(VirtualCircuit, 'delete') +class VirtualCircuitDeleteView(generic.ObjectDeleteView): + queryset = VirtualCircuit.objects.all() + + +class VirtualCircuitBulkImportView(generic.BulkImportView): + queryset = VirtualCircuit.objects.all() + model_form = forms.VirtualCircuitImportForm + additional_permissions = [ + 'circuits.add_virtualcircuittermination', + ] + related_object_forms = { + 'terminations': forms.VirtualCircuitTerminationImportRelatedForm, + } + + def prep_related_object_data(self, parent, data): + data.update({'virtual_circuit': parent}) + return data + + +class VirtualCircuitBulkEditView(generic.BulkEditView): + queryset = VirtualCircuit.objects.annotate( + termination_count=count_related(VirtualCircuitTermination, 'virtual_circuit') + ) + filterset = filtersets.VirtualCircuitFilterSet + table = tables.VirtualCircuitTable + form = forms.VirtualCircuitBulkEditForm + + +class VirtualCircuitBulkDeleteView(generic.BulkDeleteView): + queryset = VirtualCircuit.objects.annotate( + termination_count=count_related(VirtualCircuitTermination, 'virtual_circuit') + ) + filterset = filtersets.VirtualCircuitFilterSet + table = tables.VirtualCircuitTable + + +# +# Virtual circuit terminations +# + +class VirtualCircuitTerminationListView(generic.ObjectListView): + queryset = VirtualCircuitTermination.objects.all() + filterset = filtersets.VirtualCircuitTerminationFilterSet + filterset_form = forms.VirtualCircuitTerminationFilterForm + table = tables.VirtualCircuitTerminationTable + + +@register_model_view(VirtualCircuitTermination) +class VirtualCircuitTerminationView(generic.ObjectView): + queryset = VirtualCircuitTermination.objects.all() + + +@register_model_view(VirtualCircuitTermination, 'edit') +class VirtualCircuitTerminationEditView(generic.ObjectEditView): + queryset = VirtualCircuitTermination.objects.all() + form = forms.VirtualCircuitTerminationForm + + +@register_model_view(VirtualCircuitTermination, 'delete') +class VirtualCircuitTerminationDeleteView(generic.ObjectDeleteView): + queryset = VirtualCircuitTermination.objects.all() + + +class VirtualCircuitTerminationBulkImportView(generic.BulkImportView): + queryset = VirtualCircuitTermination.objects.all() + model_form = forms.VirtualCircuitTerminationImportForm + + +class VirtualCircuitTerminationBulkEditView(generic.BulkEditView): + queryset = VirtualCircuitTermination.objects.all() + filterset = filtersets.VirtualCircuitTerminationFilterSet + table = tables.VirtualCircuitTerminationTable + form = forms.VirtualCircuitTerminationBulkEditForm + + +class VirtualCircuitTerminationBulkDeleteView(generic.BulkDeleteView): + queryset = VirtualCircuitTermination.objects.all() + filterset = filtersets.VirtualCircuitTerminationFilterSet + table = tables.VirtualCircuitTerminationTable diff --git a/netbox/core/api/nested_serializers.py b/netbox/core/api/nested_serializers.py deleted file mode 100644 index df7b41ca7..000000000 --- a/netbox/core/api/nested_serializers.py +++ /dev/null @@ -1,47 +0,0 @@ -import warnings - -from rest_framework import serializers - -from core.choices import JobStatusChoices -from core.models import * -from netbox.api.fields import ChoiceField -from netbox.api.serializers import WritableNestedSerializer -from users.api.serializers import UserSerializer - -__all__ = ( - 'NestedDataFileSerializer', - 'NestedDataSourceSerializer', - 'NestedJobSerializer', -) - -# TODO: Remove in v4.2 -warnings.warn( - "Dedicated nested serializers will be removed in NetBox v4.2. Use Serializer(nested=True) instead.", - DeprecationWarning -) - - -class NestedDataSourceSerializer(WritableNestedSerializer): - - class Meta: - model = DataSource - fields = ['id', 'url', 'display_url', 'display', 'name'] - - -class NestedDataFileSerializer(WritableNestedSerializer): - - class Meta: - model = DataFile - fields = ['id', 'url', 'display_url', 'display', 'path'] - - -class NestedJobSerializer(serializers.ModelSerializer): - status = ChoiceField(choices=JobStatusChoices) - user = UserSerializer( - nested=True, - read_only=True - ) - - class Meta: - model = Job - fields = ['url', 'display_url', 'created', 'completed', 'user', 'status'] diff --git a/netbox/core/api/schema.py b/netbox/core/api/schema.py index 1ac822b8c..663ee2899 100644 --- a/netbox/core/api/schema.py +++ b/netbox/core/api/schema.py @@ -35,7 +35,10 @@ class ChoiceFieldFix(OpenApiSerializerFieldExtension): elif direction == "response": value = build_cf - label = {**build_basic_type(OpenApiTypes.STR), "enum": list(OrderedDict.fromkeys(self.target.choices.values()))} + label = { + **build_basic_type(OpenApiTypes.STR), + "enum": list(OrderedDict.fromkeys(self.target.choices.values())) + } return build_object_type( properties={ @@ -155,6 +158,9 @@ class NetBoxAutoSchema(AutoSchema): fields = {} if hasattr(serializer, 'child') else serializer.fields remove_fields = [] + # If you get a failure here for "AttributeError: 'cached_property' object has no attribute 'items'" + # it is probably because you are using a viewsets.ViewSet for the API View and are defining a + # serializer_class. You will also need to define a get_serializer() method like for GenericAPIView. for child_name, child in fields.items(): # read_only fields don't need to be in writable (write only) serializers if 'read_only' in dir(child) and child.read_only: diff --git a/netbox/core/api/serializers.py b/netbox/core/api/serializers.py index 2dde6be9f..9a6d4d726 100644 --- a/netbox/core/api/serializers.py +++ b/netbox/core/api/serializers.py @@ -1,3 +1,4 @@ from .serializers_.change_logging import * from .serializers_.data import * from .serializers_.jobs import * +from .serializers_.tasks import * diff --git a/netbox/core/api/serializers_/jobs.py b/netbox/core/api/serializers_/jobs.py index 544dddb56..306287e88 100644 --- a/netbox/core/api/serializers_/jobs.py +++ b/netbox/core/api/serializers_/jobs.py @@ -22,7 +22,7 @@ class JobSerializer(BaseModelSerializer): class Meta: model = Job fields = [ - 'id', 'url', 'display_url', 'display', 'object_type', 'object_id', 'name', 'status', 'created', 'scheduled', 'interval', - 'started', 'completed', 'user', 'data', 'error', 'job_id', + 'id', 'url', 'display_url', 'display', 'object_type', 'object_id', 'name', 'status', 'created', 'scheduled', + 'interval', 'started', 'completed', 'user', 'data', 'error', 'job_id', ] brief_fields = ('url', 'created', 'completed', 'user', 'status') diff --git a/netbox/core/api/serializers_/tasks.py b/netbox/core/api/serializers_/tasks.py new file mode 100644 index 000000000..53f2b5126 --- /dev/null +++ b/netbox/core/api/serializers_/tasks.py @@ -0,0 +1,87 @@ +from rest_framework import serializers +from rest_framework.reverse import reverse + +__all__ = ( + 'BackgroundTaskSerializer', + 'BackgroundQueueSerializer', + 'BackgroundWorkerSerializer', +) + + +class BackgroundTaskSerializer(serializers.Serializer): + id = serializers.CharField() + url = serializers.HyperlinkedIdentityField( + view_name='core-api:rqtask-detail', + lookup_field='id', + lookup_url_kwarg='pk' + ) + description = serializers.CharField() + origin = serializers.CharField() + func_name = serializers.CharField() + args = serializers.ListField(child=serializers.CharField()) + kwargs = serializers.DictField() + result = serializers.CharField() + timeout = serializers.IntegerField() + result_ttl = serializers.IntegerField() + created_at = serializers.DateTimeField() + enqueued_at = serializers.DateTimeField() + started_at = serializers.DateTimeField() + ended_at = serializers.DateTimeField() + worker_name = serializers.CharField() + position = serializers.SerializerMethodField() + status = serializers.SerializerMethodField() + meta = serializers.DictField() + last_heartbeat = serializers.CharField() + + is_finished = serializers.BooleanField() + is_queued = serializers.BooleanField() + is_failed = serializers.BooleanField() + is_started = serializers.BooleanField() + is_deferred = serializers.BooleanField() + is_canceled = serializers.BooleanField() + is_scheduled = serializers.BooleanField() + is_stopped = serializers.BooleanField() + + def get_position(self, obj) -> int: + return obj.get_position() + + def get_status(self, obj) -> str: + return obj.get_status() + + +class BackgroundQueueSerializer(serializers.Serializer): + name = serializers.CharField() + url = serializers.SerializerMethodField() + jobs = serializers.IntegerField() + oldest_job_timestamp = serializers.CharField() + index = serializers.IntegerField() + scheduler_pid = serializers.CharField() + workers = serializers.IntegerField() + finished_jobs = serializers.IntegerField() + started_jobs = serializers.IntegerField() + deferred_jobs = serializers.IntegerField() + failed_jobs = serializers.IntegerField() + scheduled_jobs = serializers.IntegerField() + + def get_url(self, obj): + return reverse('core-api:rqqueue-detail', args=[obj['name']], request=self.context.get("request")) + + +class BackgroundWorkerSerializer(serializers.Serializer): + name = serializers.CharField() + url = serializers.HyperlinkedIdentityField( + view_name='core-api:rqworker-detail', + lookup_field='name' + ) + state = serializers.SerializerMethodField() + birth_date = serializers.DateTimeField() + queue_names = serializers.ListField( + child=serializers.CharField() + ) + pid = serializers.CharField() + successful_job_count = serializers.IntegerField() + failed_job_count = serializers.IntegerField() + total_working_time = serializers.IntegerField() + + def get_state(self, obj): + return obj.get_state() diff --git a/netbox/core/api/urls.py b/netbox/core/api/urls.py index 95ee1896e..3c22f1cf4 100644 --- a/netbox/core/api/urls.py +++ b/netbox/core/api/urls.py @@ -1,6 +1,7 @@ from netbox.api.routers import NetBoxRouter from . import views +app_name = 'core-api' router = NetBoxRouter() router.APIRootView = views.CoreRootView @@ -9,6 +10,8 @@ router.register('data-sources', views.DataSourceViewSet) router.register('data-files', views.DataFileViewSet) router.register('jobs', views.JobViewSet) router.register('object-changes', views.ObjectChangeViewSet) +router.register('background-queues', views.BackgroundQueueViewSet, basename='rqqueue') +router.register('background-workers', views.BackgroundWorkerViewSet, basename='rqworker') +router.register('background-tasks', views.BackgroundTaskViewSet, basename='rqtask') -app_name = 'core-api' urlpatterns = router.urls diff --git a/netbox/core/api/views.py b/netbox/core/api/views.py index b3a024c02..4e5b148fc 100644 --- a/netbox/core/api/views.py +++ b/netbox/core/api/views.py @@ -1,5 +1,8 @@ +from django.http import Http404, HttpResponse from django.shortcuts import get_object_or_404 from django.utils.translation import gettext_lazy as _ +from drf_spectacular.types import OpenApiTypes +from drf_spectacular.utils import extend_schema from rest_framework.decorators import action from rest_framework.exceptions import PermissionDenied from rest_framework.response import Response @@ -10,8 +13,17 @@ from core import filtersets from core.choices import DataSourceStatusChoices from core.jobs import SyncDataSourceJob from core.models import * +from core.utils import delete_rq_job, enqueue_rq_job, get_rq_jobs, requeue_rq_job, stop_rq_job +from django_rq.queues import get_redis_connection +from django_rq.utils import get_statistics +from django_rq.settings import QUEUES_LIST from netbox.api.metadata import ContentTypeMetadata +from netbox.api.pagination import LimitOffsetListPagination from netbox.api.viewsets import NetBoxModelViewSet, NetBoxReadOnlyModelViewSet +from rest_framework import viewsets +from rest_framework.permissions import IsAdminUser +from rq.job import Job as RQ_Job +from rq.worker import Worker from . import serializers @@ -71,3 +83,152 @@ class ObjectChangeViewSet(ReadOnlyModelViewSet): queryset = ObjectChange.objects.valid_models() serializer_class = serializers.ObjectChangeSerializer filterset_class = filtersets.ObjectChangeFilterSet + + +class BaseRQViewSet(viewsets.ViewSet): + """ + Base class for RQ view sets. Provides a list() method. Subclasses must implement get_data(). + """ + permission_classes = [IsAdminUser] + serializer_class = None + + def get_data(self): + raise NotImplementedError() + + @extend_schema(responses={200: OpenApiTypes.OBJECT}) + def list(self, request): + data = self.get_data() + paginator = LimitOffsetListPagination() + data = paginator.paginate_list(data, request) + + serializer = self.serializer_class(data, many=True, context={'request': request}) + return paginator.get_paginated_response(serializer.data) + + def get_serializer(self, *args, **kwargs): + """ + Return the serializer instance that should be used for validating and + deserializing input, and for serializing output. + """ + serializer_class = self.get_serializer_class() + kwargs['context'] = self.get_serializer_context() + return serializer_class(*args, **kwargs) + + +class BackgroundQueueViewSet(BaseRQViewSet): + """ + Retrieve a list of RQ Queues. + Note: Queue names are not URL safe so not returning a detail view. + """ + serializer_class = serializers.BackgroundQueueSerializer + lookup_field = 'name' + lookup_value_regex = r'[\w.@+-]+' + + def get_view_name(self): + return "Background Queues" + + def get_data(self): + return get_statistics(run_maintenance_tasks=True)["queues"] + + @extend_schema(responses={200: OpenApiTypes.OBJECT}) + def retrieve(self, request, name): + data = self.get_data() + if not data: + raise Http404 + + for queue in data: + if queue['name'] == name: + serializer = self.serializer_class(queue, context={'request': request}) + return Response(serializer.data) + + raise Http404 + + +class BackgroundWorkerViewSet(BaseRQViewSet): + """ + Retrieve a list of RQ Workers. + """ + serializer_class = serializers.BackgroundWorkerSerializer + lookup_field = 'name' + + def get_view_name(self): + return "Background Workers" + + def get_data(self): + config = QUEUES_LIST[0] + return Worker.all(get_redis_connection(config['connection_config'])) + + def retrieve(self, request, name): + # all the RQ queues should use the same connection + config = QUEUES_LIST[0] + workers = Worker.all(get_redis_connection(config['connection_config'])) + worker = next((item for item in workers if item.name == name), None) + if not worker: + raise Http404 + + serializer = serializers.BackgroundWorkerSerializer(worker, context={'request': request}) + return Response(serializer.data) + + +class BackgroundTaskViewSet(BaseRQViewSet): + """ + Retrieve a list of RQ Tasks. + """ + serializer_class = serializers.BackgroundTaskSerializer + + def get_view_name(self): + return "Background Tasks" + + def get_data(self): + return get_rq_jobs() + + def get_task_from_id(self, task_id): + config = QUEUES_LIST[0] + task = RQ_Job.fetch(task_id, connection=get_redis_connection(config['connection_config'])) + if not task: + raise Http404 + + return task + + @extend_schema(responses={200: OpenApiTypes.OBJECT}) + def retrieve(self, request, pk): + """ + Retrieve the details of the specified RQ Task. + """ + task = self.get_task_from_id(pk) + serializer = self.serializer_class(task, context={'request': request}) + return Response(serializer.data) + + @action(methods=["POST"], detail=True) + def delete(self, request, pk): + """ + Delete the specified RQ Task. + """ + delete_rq_job(pk) + return HttpResponse(status=200) + + @action(methods=["POST"], detail=True) + def requeue(self, request, pk): + """ + Requeues the specified RQ Task. + """ + requeue_rq_job(pk) + return HttpResponse(status=200) + + @action(methods=["POST"], detail=True) + def enqueue(self, request, pk): + """ + Enqueues the specified RQ Task. + """ + enqueue_rq_job(pk) + return HttpResponse(status=200) + + @action(methods=["POST"], detail=True) + def stop(self, request, pk): + """ + Stops the specified RQ Task. + """ + stopped_jobs = stop_rq_job(pk) + if len(stopped_jobs) == 1: + return HttpResponse(status=200) + else: + return HttpResponse(status=204) diff --git a/netbox/core/apps.py b/netbox/core/apps.py index 1dfc7a65e..9674860b9 100644 --- a/netbox/core/apps.py +++ b/netbox/core/apps.py @@ -1,4 +1,6 @@ from django.apps import AppConfig +from django.conf import settings +from django.core.cache import cache from django.db import models from django.db.migrations.operations import AlterModelOptions @@ -19,6 +21,11 @@ class CoreConfig(AppConfig): from core.api import schema # noqa: F401 from netbox.models.features import register_models from . import data_backends, events, search # noqa: F401 + from netbox import context_managers # noqa: F401 # Register models register_models(*self.get_models()) + + # Clear Redis cache on startup in development mode + if settings.DEBUG: + cache.clear() diff --git a/netbox/core/choices.py b/netbox/core/choices.py index 01a072ce1..442acc26b 100644 --- a/netbox/core/choices.py +++ b/netbox/core/choices.py @@ -72,6 +72,20 @@ class JobStatusChoices(ChoiceSet): ) +class JobIntervalChoices(ChoiceSet): + INTERVAL_MINUTELY = 1 + INTERVAL_HOURLY = 60 + INTERVAL_DAILY = 60 * 24 + INTERVAL_WEEKLY = 60 * 24 * 7 + + CHOICES = ( + (INTERVAL_MINUTELY, _('Minutely')), + (INTERVAL_HOURLY, _('Hourly')), + (INTERVAL_DAILY, _('Daily')), + (INTERVAL_WEEKLY, _('Weekly')), + ) + + # # ObjectChanges # 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/core/management/commands/rqworker.py b/netbox/core/management/commands/rqworker.py index e1fb6fd11..b2879c3d8 100644 --- a/netbox/core/management/commands/rqworker.py +++ b/netbox/core/management/commands/rqworker.py @@ -2,6 +2,8 @@ import logging from django_rq.management.commands.rqworker import Command as _Command +from netbox.registry import registry + DEFAULT_QUEUES = ('high', 'default', 'low') @@ -14,6 +16,15 @@ class Command(_Command): of only the 'default' queue). """ def handle(self, *args, **options): + # Setup system jobs. + for job, kwargs in registry['system_jobs'].items(): + try: + interval = kwargs['interval'] + except KeyError: + raise TypeError("System job must specify an interval (in minutes).") + logger.debug(f"Scheduling system job {job.name} (interval={interval})") + job.enqueue_once(**kwargs) + # Run the worker with scheduler functionality options['with_scheduler'] = True diff --git a/netbox/core/migrations/0001_squashed_0005.py b/netbox/core/migrations/0001_squashed_0005.py index 971370bf2..b89fa3b25 100644 --- a/netbox/core/migrations/0001_squashed_0005.py +++ b/netbox/core/migrations/0001_squashed_0005.py @@ -8,13 +8,12 @@ import utilities.json class Migration(migrations.Migration): - replaces = [ ('core', '0001_initial'), ('core', '0002_managedfile'), ('core', '0003_job'), ('core', '0004_replicate_jobresults'), - ('core', '0005_job_created_auto_now') + ('core', '0005_job_created_auto_now'), ] dependencies = [ @@ -30,7 +29,10 @@ class Migration(migrations.Migration): ('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)), + ( + 'custom_field_data', + models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder), + ), ('description', models.CharField(blank=True, max_length=200)), ('comments', models.TextField(blank=True)), ('name', models.CharField(max_length=100, unique=True)), @@ -55,9 +57,28 @@ class Migration(migrations.Migration): ('last_updated', models.DateTimeField(editable=False)), ('path', models.CharField(editable=False, max_length=1000)), ('size', models.PositiveIntegerField(editable=False)), - ('hash', models.CharField(editable=False, max_length=64, validators=[django.core.validators.RegexValidator(message='Length must be 64 hexadecimal characters.', regex='^[0-9a-f]{64}$')])), + ( + 'hash', + models.CharField( + editable=False, + max_length=64, + validators=[ + django.core.validators.RegexValidator( + message='Length must be 64 hexadecimal characters.', regex='^[0-9a-f]{64}$' + ) + ], + ), + ), ('data', models.BinaryField()), - ('source', models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE, related_name='datafiles', to='core.datasource')), + ( + 'source', + models.ForeignKey( + editable=False, + on_delete=django.db.models.deletion.CASCADE, + related_name='datafiles', + to='core.datasource', + ), + ), ], options={ 'ordering': ('source', 'path'), @@ -76,8 +97,18 @@ class Migration(migrations.Migration): fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), ('object_id', models.PositiveBigIntegerField()), - ('datafile', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to='core.datafile')), - ('object_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to='contenttypes.contenttype')), + ( + 'datafile', + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, related_name='+', to='core.datafile' + ), + ), + ( + 'object_type', + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, related_name='+', to='contenttypes.contenttype' + ), + ), ], options={ 'indexes': [models.Index(fields=['object_type', 'object_id'], name='core_autosy_object__c17bac_idx')], @@ -97,8 +128,26 @@ class Migration(migrations.Migration): ('last_updated', models.DateTimeField(blank=True, editable=False, null=True)), ('file_root', models.CharField(max_length=1000)), ('file_path', models.FilePathField(editable=False)), - ('data_file', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='core.datafile')), - ('data_source', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='+', to='core.datasource')), + ( + 'data_file', + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='+', + to='core.datafile', + ), + ), + ( + 'data_source', + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='+', + to='core.datasource', + ), + ), ('auto_sync_enabled', models.BooleanField(default=False)), ], options={ @@ -108,7 +157,9 @@ class Migration(migrations.Migration): ), migrations.AddConstraint( model_name='managedfile', - constraint=models.UniqueConstraint(fields=('file_root', 'file_path'), name='core_managedfile_unique_root_path'), + constraint=models.UniqueConstraint( + fields=('file_root', 'file_path'), name='core_managedfile_unique_root_path' + ), ), migrations.CreateModel( name='Job', @@ -118,14 +169,33 @@ class Migration(migrations.Migration): ('name', models.CharField(max_length=200)), ('created', models.DateTimeField()), ('scheduled', models.DateTimeField(blank=True, null=True)), - ('interval', models.PositiveIntegerField(blank=True, null=True, validators=[django.core.validators.MinValueValidator(1)])), + ( + 'interval', + models.PositiveIntegerField( + blank=True, null=True, validators=[django.core.validators.MinValueValidator(1)] + ), + ), ('started', models.DateTimeField(blank=True, null=True)), ('completed', models.DateTimeField(blank=True, null=True)), ('status', models.CharField(default='pending', max_length=30)), ('data', models.JSONField(blank=True, null=True)), ('job_id', models.UUIDField(unique=True)), - ('object_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='jobs', to='contenttypes.contenttype')), - ('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL)), + ( + 'object_type', + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, related_name='jobs', to='contenttypes.contenttype' + ), + ), + ( + 'user', + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='+', + to=settings.AUTH_USER_MODEL, + ), + ), ], options={ 'ordering': ['-created'], diff --git a/netbox/core/migrations/0006_datasource_type_remove_choices.py b/netbox/core/migrations/0006_datasource_type_remove_choices.py index 0ad8d8854..7c9914298 100644 --- a/netbox/core/migrations/0006_datasource_type_remove_choices.py +++ b/netbox/core/migrations/0006_datasource_type_remove_choices.py @@ -4,7 +4,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('core', '0005_job_created_auto_now'), ] diff --git a/netbox/core/migrations/0007_job_add_error_field.py b/netbox/core/migrations/0007_job_add_error_field.py index e2e173bfd..3b0e02b56 100644 --- a/netbox/core/migrations/0007_job_add_error_field.py +++ b/netbox/core/migrations/0007_job_add_error_field.py @@ -4,7 +4,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('core', '0006_datasource_type_remove_choices'), ] diff --git a/netbox/core/migrations/0008_contenttype_proxy.py b/netbox/core/migrations/0008_contenttype_proxy.py index dee82a969..9acaf3ad7 100644 --- a/netbox/core/migrations/0008_contenttype_proxy.py +++ b/netbox/core/migrations/0008_contenttype_proxy.py @@ -3,7 +3,6 @@ from django.db import migrations class Migration(migrations.Migration): - dependencies = [ ('contenttypes', '0002_remove_content_type_name'), ('core', '0007_job_add_error_field'), @@ -12,8 +11,7 @@ class Migration(migrations.Migration): operations = [ migrations.CreateModel( name='ObjectType', - fields=[ - ], + fields=[], options={ 'proxy': True, 'indexes': [], diff --git a/netbox/core/migrations/0009_configrevision.py b/netbox/core/migrations/0009_configrevision.py index e7f817a16..6acd4531d 100644 --- a/netbox/core/migrations/0009_configrevision.py +++ b/netbox/core/migrations/0009_configrevision.py @@ -2,7 +2,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('core', '0008_contenttype_proxy'), ] diff --git a/netbox/core/migrations/0010_gfk_indexes.py b/netbox/core/migrations/0010_gfk_indexes.py index d51bc67ad..1e593a0c7 100644 --- a/netbox/core/migrations/0010_gfk_indexes.py +++ b/netbox/core/migrations/0010_gfk_indexes.py @@ -4,7 +4,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('core', '0009_configrevision'), ] diff --git a/netbox/core/migrations/0011_move_objectchange.py b/netbox/core/migrations/0011_move_objectchange.py index 2b41133ec..673763ce4 100644 --- a/netbox/core/migrations/0011_move_objectchange.py +++ b/netbox/core/migrations/0011_move_objectchange.py @@ -4,7 +4,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('contenttypes', '0002_remove_content_type_name'), ('core', '0010_gfk_indexes'), @@ -27,15 +26,49 @@ class Migration(migrations.Migration): ('object_repr', models.CharField(editable=False, max_length=200)), ('prechange_data', models.JSONField(blank=True, editable=False, null=True)), ('postchange_data', models.JSONField(blank=True, editable=False, null=True)), - ('changed_object_type', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='+', to='contenttypes.contenttype')), - ('related_object_type', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='+', to='contenttypes.contenttype')), - ('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='changes', to=settings.AUTH_USER_MODEL)), + ( + 'changed_object_type', + models.ForeignKey( + on_delete=django.db.models.deletion.PROTECT, + related_name='+', + to='contenttypes.contenttype', + ), + ), + ( + 'related_object_type', + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='+', + to='contenttypes.contenttype', + ), + ), + ( + 'user', + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='changes', + to=settings.AUTH_USER_MODEL, + ), + ), ], options={ 'verbose_name': 'object change', 'verbose_name_plural': 'object changes', 'ordering': ['-time'], - 'indexes': [models.Index(fields=['changed_object_type', 'changed_object_id'], name='core_object_changed_c227ce_idx'), models.Index(fields=['related_object_type', 'related_object_id'], name='core_object_related_3375d6_idx')], + 'indexes': [ + models.Index( + fields=['changed_object_type', 'changed_object_id'], + name='core_object_changed_c227ce_idx', + ), + models.Index( + fields=['related_object_type', 'related_object_id'], + name='core_object_related_3375d6_idx', + ), + ], }, ), ], diff --git a/netbox/core/migrations/0012_job_object_type_optional.py b/netbox/core/migrations/0012_job_object_type_optional.py index 3c6664afc..3798b1285 100644 --- a/netbox/core/migrations/0012_job_object_type_optional.py +++ b/netbox/core/migrations/0012_job_object_type_optional.py @@ -3,7 +3,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('contenttypes', '0002_remove_content_type_name'), ('core', '0011_move_objectchange'), @@ -18,7 +17,7 @@ class Migration(migrations.Migration): null=True, on_delete=django.db.models.deletion.CASCADE, related_name='jobs', - to='contenttypes.contenttype' + to='contenttypes.contenttype', ), ), ] diff --git a/netbox/core/models/data.py b/netbox/core/models/data.py index 6824b4605..39ee8fa57 100644 --- a/netbox/core/models/data.py +++ b/netbox/core/models/data.py @@ -84,9 +84,6 @@ class DataSource(JobsMixin, PrimaryModel): def __str__(self): return f'{self.name}' - def get_absolute_url(self): - return reverse('core:datasource', args=[self.pk]) - @property def docs_url(self): return f'{settings.STATIC_URL}docs/models/{self._meta.app_label}/{self._meta.model_name}/' diff --git a/netbox/core/models/files.py b/netbox/core/models/files.py index 7b626a441..cc446bac7 100644 --- a/netbox/core/models/files.py +++ b/netbox/core/models/files.py @@ -93,9 +93,14 @@ class ManagedFile(SyncedDataMixin, models.Model): self.file_path = os.path.basename(self.data_path) # Ensure that the file root and path make a unique pair - if self._meta.model.objects.filter(file_root=self.file_root, file_path=self.file_path).exclude(pk=self.pk).exists(): + if self._meta.model.objects.filter( + file_root=self.file_root, file_path=self.file_path + ).exclude(pk=self.pk).exists(): raise ValidationError( - f"A {self._meta.verbose_name.lower()} with this file path already exists ({self.file_root}/{self.file_path}).") + _("A {model} with this file path already exists ({path}).").format( + model=self._meta.verbose_name.lower(), + path=f"{self.file_root}/{self.file_path}" + )) def delete(self, *args, **kwargs): # Delete file from disk diff --git a/netbox/core/models/jobs.py b/netbox/core/models/jobs.py index 3cfea3e2a..5caa9cc2d 100644 --- a/netbox/core/models/jobs.py +++ b/netbox/core/models/jobs.py @@ -9,6 +9,7 @@ from django.db import models from django.urls import reverse from django.utils import timezone from django.utils.translation import gettext as _ +from rq.exceptions import InvalidJobOperation from core.choices import JobStatusChoices from core.models import ObjectType @@ -158,7 +159,11 @@ class Job(models.Model): job = queue.fetch_job(str(self.job_id)) if job: - job.cancel() + try: + job.cancel() + except InvalidJobOperation: + # Job may raise this exception from get_status() if missing from Redis + pass def start(self): """ @@ -198,7 +203,17 @@ class Job(models.Model): job_end.send(self) @classmethod - def enqueue(cls, func, instance=None, name='', user=None, schedule_at=None, interval=None, immediate=False, **kwargs): + def enqueue( + cls, + func, + instance=None, + name='', + user=None, + schedule_at=None, + interval=None, + immediate=False, + **kwargs + ): """ Create a Job instance and enqueue a job using the given callable diff --git a/netbox/core/tests/test_api.py b/netbox/core/tests/test_api.py index eeb3bd9c4..d8fb8fd83 100644 --- a/netbox/core/tests/test_api.py +++ b/netbox/core/tests/test_api.py @@ -1,7 +1,14 @@ +import uuid + +from django_rq import get_queue +from django_rq.workers import get_worker from django.urls import reverse from django.utils import timezone +from rq.job import Job as RQ_Job, JobStatus +from rq.registry import FailedJobRegistry, StartedJobRegistry -from utilities.testing import APITestCase, APIViewTestCases +from users.models import Token, User +from utilities.testing import APITestCase, APIViewTestCases, TestCase from ..models import * @@ -91,3 +98,164 @@ class DataFileTest( ), ) DataFile.objects.bulk_create(data_files) + + +class BackgroundTaskTestCase(TestCase): + user_permissions = () + + @staticmethod + def dummy_job_default(): + return "Job finished" + + @staticmethod + def dummy_job_failing(): + raise Exception("Job failed") + + def setUp(self): + """ + Create a user and token for API calls. + """ + # Create the test user and assign permissions + self.user = User.objects.create_user(username='testuser') + self.user.is_staff = True + self.user.is_active = True + self.user.save() + self.token = Token.objects.create(user=self.user) + self.header = {'HTTP_AUTHORIZATION': f'Token {self.token.key}'} + + # Clear all queues prior to running each test + get_queue('default').connection.flushall() + get_queue('high').connection.flushall() + get_queue('low').connection.flushall() + + def test_background_queue_list(self): + url = reverse('core-api:rqqueue-list') + + # Attempt to load view without permission + self.user.is_staff = False + self.user.save() + response = self.client.get(url, **self.header) + self.assertEqual(response.status_code, 403) + + # Load view with permission + self.user.is_staff = True + self.user.save() + response = self.client.get(url, **self.header) + self.assertEqual(response.status_code, 200) + self.assertIn('default', str(response.content)) + self.assertIn('high', str(response.content)) + self.assertIn('low', str(response.content)) + + def test_background_queue(self): + response = self.client.get(reverse('core-api:rqqueue-detail', args=['default']), **self.header) + self.assertEqual(response.status_code, 200) + self.assertIn('default', str(response.content)) + self.assertIn('oldest_job_timestamp', str(response.content)) + self.assertIn('scheduled_jobs', str(response.content)) + + def test_background_task_list(self): + queue = get_queue('default') + queue.enqueue(self.dummy_job_default) + + response = self.client.get(reverse('core-api:rqtask-list'), **self.header) + self.assertEqual(response.status_code, 200) + self.assertIn('origin', str(response.content)) + self.assertIn('core.tests.test_api.BackgroundTaskTestCase.dummy_job_default()', str(response.content)) + + def test_background_task(self): + queue = get_queue('default') + job = queue.enqueue(self.dummy_job_default) + + response = self.client.get(reverse('core-api:rqtask-detail', args=[job.id]), **self.header) + self.assertEqual(response.status_code, 200) + self.assertIn(str(job.id), str(response.content)) + self.assertIn('origin', str(response.content)) + self.assertIn('meta', str(response.content)) + self.assertIn('kwargs', str(response.content)) + + def test_background_task_delete(self): + queue = get_queue('default') + job = queue.enqueue(self.dummy_job_default) + + response = self.client.post(reverse('core-api:rqtask-delete', args=[job.id]), **self.header) + self.assertEqual(response.status_code, 200) + self.assertFalse(RQ_Job.exists(job.id, connection=queue.connection)) + queue = get_queue('default') + self.assertNotIn(job.id, queue.job_ids) + + def test_background_task_requeue(self): + queue = get_queue('default') + + # Enqueue & run a job that will fail + job = queue.enqueue(self.dummy_job_failing) + worker = get_worker('default') + worker.work(burst=True) + self.assertTrue(job.is_failed) + + # Re-enqueue the failed job and check that its status has been reset + response = self.client.post(reverse('core-api:rqtask-requeue', args=[job.id]), **self.header) + self.assertEqual(response.status_code, 200) + job = RQ_Job.fetch(job.id, queue.connection) + self.assertFalse(job.is_failed) + + def test_background_task_enqueue(self): + queue = get_queue('default') + + # Enqueue some jobs that each depends on its predecessor + job = previous_job = None + for _ in range(0, 3): + job = queue.enqueue(self.dummy_job_default, depends_on=previous_job) + previous_job = job + + # Check that the last job to be enqueued has a status of deferred + self.assertIsNotNone(job) + self.assertEqual(job.get_status(), JobStatus.DEFERRED) + self.assertIsNone(job.enqueued_at) + + # Force-enqueue the deferred job + response = self.client.post(reverse('core-api:rqtask-enqueue', args=[job.id]), **self.header) + self.assertEqual(response.status_code, 200) + + # Check that job's status is updated correctly + job = queue.fetch_job(job.id) + self.assertEqual(job.get_status(), JobStatus.QUEUED) + self.assertIsNotNone(job.enqueued_at) + + def test_background_task_stop(self): + queue = get_queue('default') + + worker = get_worker('default') + job = queue.enqueue(self.dummy_job_default) + worker.prepare_job_execution(job) + + self.assertEqual(job.get_status(), JobStatus.STARTED) + response = self.client.post(reverse('core-api:rqtask-stop', args=[job.id]), **self.header) + self.assertEqual(response.status_code, 200) + worker.monitor_work_horse(job, queue) # Sets the job as Failed and removes from Started + started_job_registry = StartedJobRegistry(queue.name, connection=queue.connection) + self.assertEqual(len(started_job_registry), 0) + + canceled_job_registry = FailedJobRegistry(queue.name, connection=queue.connection) + self.assertEqual(len(canceled_job_registry), 1) + self.assertIn(job.id, canceled_job_registry) + + def test_worker_list(self): + worker1 = get_worker('default', name=uuid.uuid4().hex) + worker1.register_birth() + + worker2 = get_worker('high') + worker2.register_birth() + + response = self.client.get(reverse('core-api:rqworker-list'), **self.header) + self.assertEqual(response.status_code, 200) + self.assertIn(str(worker1.name), str(response.content)) + + def test_worker(self): + worker1 = get_worker('default', name=uuid.uuid4().hex) + worker1.register_birth() + + response = self.client.get(reverse('core-api:rqworker-detail', args=[worker1.name]), **self.header) + self.assertEqual(response.status_code, 200) + self.assertIn(str(worker1.name), str(response.content)) + self.assertIn('birth_date', str(response.content)) + self.assertIn('total_working_time', str(response.content)) diff --git a/netbox/core/tests/test_changelog.py b/netbox/core/tests/test_changelog.py index c58968ee8..4914dbaf3 100644 --- a/netbox/core/tests/test_changelog.py +++ b/netbox/core/tests/test_changelog.py @@ -76,10 +76,6 @@ class ChangeLogViewTest(ModelViewTestCase): self.assertEqual(oc.postchange_data['custom_fields']['cf2'], form_data['cf_cf2']) self.assertEqual(oc.postchange_data['tags'], ['Tag 1', 'Tag 2']) - # Check that private attributes were included in raw data but not display data - self.assertIn('_name', oc.postchange_data) - self.assertNotIn('_name', oc.postchange_data_clean) - def test_update_object(self): site = Site(name='Site 1', slug='site-1') site.save() @@ -117,12 +113,6 @@ class ChangeLogViewTest(ModelViewTestCase): self.assertEqual(oc.postchange_data['custom_fields']['cf2'], form_data['cf_cf2']) self.assertEqual(oc.postchange_data['tags'], ['Tag 3']) - # Check that private attributes were included in raw data but not display data - self.assertIn('_name', oc.prechange_data) - self.assertNotIn('_name', oc.prechange_data_clean) - self.assertIn('_name', oc.postchange_data) - self.assertNotIn('_name', oc.postchange_data_clean) - def test_delete_object(self): site = Site( name='Site 1', @@ -153,10 +143,6 @@ class ChangeLogViewTest(ModelViewTestCase): self.assertEqual(oc.prechange_data['tags'], ['Tag 1', 'Tag 2']) self.assertEqual(oc.postchange_data, None) - # Check that private attributes were included in raw data but not display data - self.assertIn('_name', oc.prechange_data) - self.assertNotIn('_name', oc.prechange_data_clean) - def test_bulk_update_objects(self): sites = ( Site(name='Site 1', slug='site-1', status=SiteStatusChoices.STATUS_ACTIVE), @@ -353,10 +339,6 @@ class ChangeLogAPITest(APITestCase): self.assertEqual(oc.postchange_data['custom_fields'], data['custom_fields']) self.assertEqual(oc.postchange_data['tags'], ['Tag 1', 'Tag 2']) - # Check that private attributes were included in raw data but not display data - self.assertIn('_name', oc.postchange_data) - self.assertNotIn('_name', oc.postchange_data_clean) - def test_update_object(self): site = Site(name='Site 1', slug='site-1') site.save() @@ -389,12 +371,6 @@ class ChangeLogAPITest(APITestCase): self.assertEqual(oc.postchange_data['custom_fields'], data['custom_fields']) self.assertEqual(oc.postchange_data['tags'], ['Tag 3']) - # Check that private attributes were included in raw data but not display data - self.assertIn('_name', oc.prechange_data) - self.assertNotIn('_name', oc.prechange_data_clean) - self.assertIn('_name', oc.postchange_data) - self.assertNotIn('_name', oc.postchange_data_clean) - def test_delete_object(self): site = Site( name='Site 1', @@ -423,10 +399,6 @@ class ChangeLogAPITest(APITestCase): self.assertEqual(oc.prechange_data['tags'], ['Tag 1', 'Tag 2']) self.assertEqual(oc.postchange_data, None) - # Check that private attributes were included in raw data but not display data - self.assertIn('_name', oc.prechange_data) - self.assertNotIn('_name', oc.prechange_data_clean) - def test_bulk_create_objects(self): data = ( { diff --git a/netbox/core/tests/test_views.py b/netbox/core/tests/test_views.py index 01912b4d6..047b51ef6 100644 --- a/netbox/core/tests/test_views.py +++ b/netbox/core/tests/test_views.py @@ -346,3 +346,32 @@ class BackgroundTaskTestCase(TestCase): self.assertIn(str(worker1.name), str(response.content)) self.assertIn('Birth', str(response.content)) self.assertIn('Total working time', str(response.content)) + + +class SystemTestCase(TestCase): + + def setUp(self): + super().setUp() + + self.user.is_staff = True + self.user.save() + + def test_system_view_default(self): + # Test UI render + response = self.client.get(reverse('core:system')) + self.assertEqual(response.status_code, 200) + + # Test export + response = self.client.get(f"{reverse('core:system')}?export=true") + self.assertEqual(response.status_code, 200) + + def test_system_view_with_config_revision(self): + ConfigRevision.objects.create() + + # Test UI render + response = self.client.get(reverse('core:system')) + self.assertEqual(response.status_code, 200) + + # Test export + response = self.client.get(f"{reverse('core:system')}?export=true") + self.assertEqual(response.status_code, 200) diff --git a/netbox/core/urls.py b/netbox/core/urls.py index fd6ec8996..b922c8bed 100644 --- a/netbox/core/urls.py +++ b/netbox/core/urls.py @@ -6,51 +6,50 @@ from . import views app_name = 'core' urlpatterns = ( - # Data sources - path('data-sources/', views.DataSourceListView.as_view(), name='datasource_list'), - path('data-sources/add/', views.DataSourceEditView.as_view(), name='datasource_add'), - path('data-sources/import/', views.DataSourceBulkImportView.as_view(), name='datasource_import'), - path('data-sources/edit/', views.DataSourceBulkEditView.as_view(), name='datasource_bulk_edit'), - path('data-sources/delete/', views.DataSourceBulkDeleteView.as_view(), name='datasource_bulk_delete'), + path('data-sources/', include(get_model_urls('core', 'datasource', detail=False))), path('data-sources//', include(get_model_urls('core', 'datasource'))), - # Data files - path('data-files/', views.DataFileListView.as_view(), name='datafile_list'), - path('data-files/delete/', views.DataFileBulkDeleteView.as_view(), name='datafile_bulk_delete'), + path('data-files/', include(get_model_urls('core', 'datafile', detail=False))), path('data-files//', include(get_model_urls('core', 'datafile'))), - # Job results - path('jobs/', views.JobListView.as_view(), name='job_list'), - path('jobs/delete/', views.JobBulkDeleteView.as_view(), name='job_bulk_delete'), - path('jobs//', views.JobView.as_view(), name='job'), - path('jobs//delete/', views.JobDeleteView.as_view(), name='job_delete'), + path('jobs/', include(get_model_urls('core', 'job', detail=False))), + path('jobs//', include(get_model_urls('core', 'job'))), - # Change logging - path('changelog/', views.ObjectChangeListView.as_view(), name='objectchange_list'), + path('changelog/', include(get_model_urls('core', 'objectchange', detail=False))), path('changelog//', include(get_model_urls('core', 'objectchange'))), # Background Tasks path('background-queues/', views.BackgroundQueueListView.as_view(), name='background_queue_list'), - path('background-queues///', views.BackgroundTaskListView.as_view(), name='background_task_list'), + path( + 'background-queues///', + views.BackgroundTaskListView.as_view(), + name='background_task_list' + ), path('background-tasks//', views.BackgroundTaskView.as_view(), name='background_task'), - path('background-tasks//delete/', views.BackgroundTaskDeleteView.as_view(), name='background_task_delete'), - path('background-tasks//requeue/', views.BackgroundTaskRequeueView.as_view(), name='background_task_requeue'), - path('background-tasks//enqueue/', views.BackgroundTaskEnqueueView.as_view(), name='background_task_enqueue'), + path( + 'background-tasks//delete/', + views.BackgroundTaskDeleteView.as_view(), + name='background_task_delete' + ), + path( + 'background-tasks//requeue/', + views.BackgroundTaskRequeueView.as_view(), + name='background_task_requeue' + ), + path( + 'background-tasks//enqueue/', + views.BackgroundTaskEnqueueView.as_view(), + name='background_task_enqueue' + ), path('background-tasks//stop/', views.BackgroundTaskStopView.as_view(), name='background_task_stop'), path('background-workers//', views.WorkerListView.as_view(), name='worker_list'), path('background-workers//', views.WorkerView.as_view(), name='worker'), - # Config revisions - path('config-revisions/', views.ConfigRevisionListView.as_view(), name='configrevision_list'), - path('config-revisions/add/', views.ConfigRevisionEditView.as_view(), name='configrevision_add'), - path('config-revisions/delete/', views.ConfigRevisionBulkDeleteView.as_view(), name='configrevision_bulk_delete'), - path('config-revisions//restore/', views.ConfigRevisionRestoreView.as_view(), name='configrevision_restore'), + path('config-revisions/', include(get_model_urls('core', 'configrevision', detail=False))), path('config-revisions//', include(get_model_urls('core', 'configrevision'))), - # System path('system/', views.SystemView.as_view(), name='system'), - # Plugins path('plugins/', views.PluginListView.as_view(), name='plugin_list'), path('plugins//', views.PluginView.as_view(), name='plugin'), ) diff --git a/netbox/core/utils.py b/netbox/core/utils.py new file mode 100644 index 000000000..26adfdfa2 --- /dev/null +++ b/netbox/core/utils.py @@ -0,0 +1,155 @@ +from django.http import Http404 +from django.utils.translation import gettext_lazy as _ +from django_rq.queues import get_queue, get_queue_by_index, get_redis_connection +from django_rq.settings import QUEUES_MAP, QUEUES_LIST +from django_rq.utils import get_jobs, stop_jobs +from rq import requeue_job +from rq.exceptions import NoSuchJobError +from rq.job import Job as RQ_Job, JobStatus as RQJobStatus +from rq.registry import ( + DeferredJobRegistry, + FailedJobRegistry, + FinishedJobRegistry, + ScheduledJobRegistry, + StartedJobRegistry, +) + +__all__ = ( + 'delete_rq_job', + 'enqueue_rq_job', + 'get_rq_jobs', + 'get_rq_jobs_from_status', + 'requeue_rq_job', + 'stop_rq_job', +) + + +def get_rq_jobs(): + """ + Return a list of all RQ jobs. + """ + jobs = set() + + for queue in QUEUES_LIST: + queue = get_queue(queue['name']) + jobs.update(queue.get_jobs()) + + return list(jobs) + + +def get_rq_jobs_from_status(queue, status): + """ + Return the RQ jobs with the given status. + """ + jobs = [] + + try: + registry_cls = { + RQJobStatus.STARTED: StartedJobRegistry, + RQJobStatus.DEFERRED: DeferredJobRegistry, + RQJobStatus.FINISHED: FinishedJobRegistry, + RQJobStatus.FAILED: FailedJobRegistry, + RQJobStatus.SCHEDULED: ScheduledJobRegistry, + }[status] + except KeyError: + raise Http404 + registry = registry_cls(queue.name, queue.connection) + + job_ids = registry.get_job_ids() + if status != RQJobStatus.DEFERRED: + jobs = get_jobs(queue, job_ids, registry) + else: + # Deferred jobs require special handling + for job_id in job_ids: + try: + jobs.append(RQ_Job.fetch(job_id, connection=queue.connection, serializer=queue.serializer)) + except NoSuchJobError: + pass + + if jobs and status == RQJobStatus.SCHEDULED: + for job in jobs: + job.scheduled_at = registry.get_scheduled_time(job) + + return jobs + + +def delete_rq_job(job_id): + """ + Delete the specified RQ job. + """ + config = QUEUES_LIST[0] + try: + job = RQ_Job.fetch(job_id, connection=get_redis_connection(config['connection_config']),) + except NoSuchJobError: + raise Http404(_("Job {job_id} not found").format(job_id=job_id)) + + queue_index = QUEUES_MAP[job.origin] + queue = get_queue_by_index(queue_index) + + # Remove job id from queue and delete the actual job + queue.connection.lrem(queue.key, 0, job.id) + job.delete() + + +def requeue_rq_job(job_id): + """ + Requeue the specified RQ job. + """ + config = QUEUES_LIST[0] + try: + job = RQ_Job.fetch(job_id, connection=get_redis_connection(config['connection_config']),) + except NoSuchJobError: + raise Http404(_("Job {id} not found.").format(id=job_id)) + + queue_index = QUEUES_MAP[job.origin] + queue = get_queue_by_index(queue_index) + + requeue_job(job_id, connection=queue.connection, serializer=queue.serializer) + + +def enqueue_rq_job(job_id): + """ + Enqueue the specified RQ job. + """ + config = QUEUES_LIST[0] + try: + job = RQ_Job.fetch(job_id, connection=get_redis_connection(config['connection_config']),) + except NoSuchJobError: + raise Http404(_("Job {id} not found.").format(id=job_id)) + + queue_index = QUEUES_MAP[job.origin] + queue = get_queue_by_index(queue_index) + + try: + # _enqueue_job is new in RQ 1.14, this is used to enqueue + # job regardless of its dependencies + queue._enqueue_job(job) + except AttributeError: + queue.enqueue_job(job) + + # Remove job from correct registry if needed + if job.get_status() == RQJobStatus.DEFERRED: + registry = DeferredJobRegistry(queue.name, queue.connection) + registry.remove(job) + elif job.get_status() == RQJobStatus.FINISHED: + registry = FinishedJobRegistry(queue.name, queue.connection) + registry.remove(job) + elif job.get_status() == RQJobStatus.SCHEDULED: + registry = ScheduledJobRegistry(queue.name, queue.connection) + registry.remove(job) + + +def stop_rq_job(job_id): + """ + Stop the specified RQ job. + """ + config = QUEUES_LIST[0] + try: + job = RQ_Job.fetch(job_id, connection=get_redis_connection(config['connection_config']),) + except NoSuchJobError: + raise Http404(_("Job {job_id} not found").format(job_id=job_id)) + + queue_index = QUEUES_MAP[job.origin] + queue = get_queue_by_index(queue_index) + + return stop_jobs(queue, job_id)[0] diff --git a/netbox/core/views.py b/netbox/core/views.py index 3c5319626..cd9cd6c67 100644 --- a/netbox/core/views.py +++ b/netbox/core/views.py @@ -14,16 +14,13 @@ from django.utils.translation import gettext_lazy as _ from django.views.generic import View from django_rq.queues import get_connection, get_queue_by_index, get_redis_connection from django_rq.settings import QUEUES_MAP, QUEUES_LIST -from django_rq.utils import get_jobs, get_statistics, stop_jobs -from rq import requeue_job +from django_rq.utils import get_statistics from rq.exceptions import NoSuchJobError from rq.job import Job as RQ_Job, JobStatus as RQJobStatus -from rq.registry import ( - DeferredJobRegistry, FailedJobRegistry, FinishedJobRegistry, ScheduledJobRegistry, StartedJobRegistry, -) from rq.worker import Worker from rq.worker_registration import clean_worker_registry +from core.utils import delete_rq_job, enqueue_rq_job, get_rq_jobs_from_status, requeue_rq_job, stop_rq_job from netbox.config import get_config, PARAMS from netbox.views import generic from netbox.views.generic.base import BaseObjectView @@ -46,6 +43,7 @@ from .tables import CatalogPluginTable, PluginVersionTable # Data sources # +@register_model_view(DataSource, 'list', path='', detail=False) class DataSourceListView(generic.ObjectListView): queryset = DataSource.objects.annotate( file_count=count_related(DataFile, 'source') @@ -92,6 +90,7 @@ class DataSourceSyncView(BaseObjectView): return redirect(datasource.get_absolute_url()) +@register_model_view(DataSource, 'add', detail=False) @register_model_view(DataSource, 'edit') class DataSourceEditView(generic.ObjectEditView): queryset = DataSource.objects.all() @@ -103,11 +102,13 @@ class DataSourceDeleteView(generic.ObjectDeleteView): queryset = DataSource.objects.all() +@register_model_view(DataSource, 'bulk_import', detail=False) class DataSourceBulkImportView(generic.BulkImportView): queryset = DataSource.objects.all() model_form = forms.DataSourceImportForm +@register_model_view(DataSource, 'bulk_edit', path='edit', detail=False) class DataSourceBulkEditView(generic.BulkEditView): queryset = DataSource.objects.annotate( count_files=count_related(DataFile, 'source') @@ -117,6 +118,7 @@ class DataSourceBulkEditView(generic.BulkEditView): form = forms.DataSourceBulkEditForm +@register_model_view(DataSource, 'bulk_delete', path='delete', detail=False) class DataSourceBulkDeleteView(generic.BulkDeleteView): queryset = DataSource.objects.annotate( count_files=count_related(DataFile, 'source') @@ -129,6 +131,7 @@ class DataSourceBulkDeleteView(generic.BulkDeleteView): # Data files # +@register_model_view(DataFile, 'list', path='', detail=False) class DataFileListView(generic.ObjectListView): queryset = DataFile.objects.defer('data') filterset = filtersets.DataFileFilterSet @@ -149,6 +152,7 @@ class DataFileDeleteView(generic.ObjectDeleteView): queryset = DataFile.objects.all() +@register_model_view(DataFile, 'bulk_delete', path='delete', detail=False) class DataFileBulkDeleteView(generic.BulkDeleteView): queryset = DataFile.objects.defer('data') filterset = filtersets.DataFileFilterSet @@ -159,6 +163,7 @@ class DataFileBulkDeleteView(generic.BulkDeleteView): # Jobs # +@register_model_view(Job, 'list', path='', detail=False) class JobListView(generic.ObjectListView): queryset = Job.objects.all() filterset = filtersets.JobFilterSet @@ -170,14 +175,17 @@ class JobListView(generic.ObjectListView): } +@register_model_view(Job) class JobView(generic.ObjectView): queryset = Job.objects.all() +@register_model_view(Job, 'delete') class JobDeleteView(generic.ObjectDeleteView): queryset = Job.objects.all() +@register_model_view(Job, 'bulk_delete', path='delete', detail=False) class JobBulkDeleteView(generic.BulkDeleteView): queryset = Job.objects.all() filterset = filtersets.JobFilterSet @@ -188,6 +196,7 @@ class JobBulkDeleteView(generic.BulkDeleteView): # Change logging # +@register_model_view(ObjectChange, 'list', path='', detail=False) class ObjectChangeListView(generic.ObjectListView): queryset = ObjectChange.objects.valid_models() filterset = filtersets.ObjectChangeFilterSet @@ -257,6 +266,7 @@ class ObjectChangeView(generic.ObjectView): # Config Revisions # +@register_model_view(ConfigRevision, 'list', path='', detail=False) class ConfigRevisionListView(generic.ObjectListView): queryset = ConfigRevision.objects.all() filterset = filtersets.ConfigRevisionFilterSet @@ -269,6 +279,7 @@ class ConfigRevisionView(generic.ObjectView): queryset = ConfigRevision.objects.all() +@register_model_view(ConfigRevision, 'add', detail=False) class ConfigRevisionEditView(generic.ObjectEditView): queryset = ConfigRevision.objects.all() form = forms.ConfigRevisionForm @@ -279,12 +290,14 @@ class ConfigRevisionDeleteView(generic.ObjectDeleteView): queryset = ConfigRevision.objects.all() +@register_model_view(ConfigRevision, 'bulk_delete', path='delete', detail=False) class ConfigRevisionBulkDeleteView(generic.BulkDeleteView): queryset = ConfigRevision.objects.all() filterset = filtersets.ConfigRevisionFilterSet table = tables.ConfigRevisionTable +@register_model_view(ConfigRevision, 'restore') class ConfigRevisionRestoreView(ContentTypePermissionRequiredMixin, View): def get_required_permission(self): @@ -347,41 +360,12 @@ class BackgroundTaskListView(TableMixin, BaseRQView): table = tables.BackgroundTaskTable def get_table_data(self, request, queue, status): - jobs = [] # Call get_jobs() to returned queued tasks if status == RQJobStatus.QUEUED: return queue.get_jobs() - # For other statuses, determine the registry to list (or raise a 404 for invalid statuses) - try: - registry_cls = { - RQJobStatus.STARTED: StartedJobRegistry, - RQJobStatus.DEFERRED: DeferredJobRegistry, - RQJobStatus.FINISHED: FinishedJobRegistry, - RQJobStatus.FAILED: FailedJobRegistry, - RQJobStatus.SCHEDULED: ScheduledJobRegistry, - }[status] - except KeyError: - raise Http404 - registry = registry_cls(queue.name, queue.connection) - - job_ids = registry.get_job_ids() - if status != RQJobStatus.DEFERRED: - jobs = get_jobs(queue, job_ids, registry) - else: - # Deferred jobs require special handling - for job_id in job_ids: - try: - jobs.append(RQ_Job.fetch(job_id, connection=queue.connection, serializer=queue.serializer)) - except NoSuchJobError: - pass - - if jobs and status == RQJobStatus.SCHEDULED: - for job in jobs: - job.scheduled_at = registry.get_scheduled_time(job) - - return jobs + return get_rq_jobs_from_status(queue, status) def get(self, request, queue_index, status): queue = get_queue_by_index(queue_index) @@ -447,19 +431,7 @@ class BackgroundTaskDeleteView(BaseRQView): form = ConfirmationForm(request.POST) if form.is_valid(): - # all the RQ queues should use the same connection - config = QUEUES_LIST[0] - try: - job = RQ_Job.fetch(job_id, connection=get_redis_connection(config['connection_config']),) - except NoSuchJobError: - raise Http404(_("Job {job_id} not found").format(job_id=job_id)) - - queue_index = QUEUES_MAP[job.origin] - queue = get_queue_by_index(queue_index) - - # Remove job id from queue and delete the actual job - queue.connection.lrem(queue.key, 0, job.id) - job.delete() + delete_rq_job(job_id) messages.success(request, _('Job {id} has been deleted.').format(id=job_id)) else: messages.error(request, _('Error deleting job {id}: {error}').format(id=job_id, error=form.errors[0])) @@ -470,17 +442,7 @@ class BackgroundTaskDeleteView(BaseRQView): class BackgroundTaskRequeueView(BaseRQView): def get(self, request, job_id): - # all the RQ queues should use the same connection - config = QUEUES_LIST[0] - try: - job = RQ_Job.fetch(job_id, connection=get_redis_connection(config['connection_config']),) - except NoSuchJobError: - raise Http404(_("Job {id} not found.").format(id=job_id)) - - queue_index = QUEUES_MAP[job.origin] - queue = get_queue_by_index(queue_index) - - requeue_job(job_id, connection=queue.connection, serializer=queue.serializer) + requeue_rq_job(job_id) messages.success(request, _('Job {id} has been re-enqueued.').format(id=job_id)) return redirect(reverse('core:background_task', args=[job_id])) @@ -489,33 +451,7 @@ class BackgroundTaskEnqueueView(BaseRQView): def get(self, request, job_id): # all the RQ queues should use the same connection - config = QUEUES_LIST[0] - try: - job = RQ_Job.fetch(job_id, connection=get_redis_connection(config['connection_config']),) - except NoSuchJobError: - raise Http404(_("Job {id} not found.").format(id=job_id)) - - queue_index = QUEUES_MAP[job.origin] - queue = get_queue_by_index(queue_index) - - try: - # _enqueue_job is new in RQ 1.14, this is used to enqueue - # job regardless of its dependencies - queue._enqueue_job(job) - except AttributeError: - queue.enqueue_job(job) - - # Remove job from correct registry if needed - if job.get_status() == RQJobStatus.DEFERRED: - registry = DeferredJobRegistry(queue.name, queue.connection) - registry.remove(job) - elif job.get_status() == RQJobStatus.FINISHED: - registry = FinishedJobRegistry(queue.name, queue.connection) - registry.remove(job) - elif job.get_status() == RQJobStatus.SCHEDULED: - registry = ScheduledJobRegistry(queue.name, queue.connection) - registry.remove(job) - + enqueue_rq_job(job_id) messages.success(request, _('Job {id} has been enqueued.').format(id=job_id)) return redirect(reverse('core:background_task', args=[job_id])) @@ -523,17 +459,7 @@ class BackgroundTaskEnqueueView(BaseRQView): class BackgroundTaskStopView(BaseRQView): def get(self, request, job_id): - # all the RQ queues should use the same connection - config = QUEUES_LIST[0] - try: - job = RQ_Job.fetch(job_id, connection=get_redis_connection(config['connection_config']),) - except NoSuchJobError: - raise Http404(_("Job {job_id} not found").format(job_id=job_id)) - - queue_index = QUEUES_MAP[job.origin] - queue = get_queue_by_index(queue_index) - - stopped_jobs = stop_jobs(queue, job_id)[0] + stopped_jobs = stop_rq_job(job_id) if len(stopped_jobs) == 1: messages.success(request, _('Job {id} has been stopped.').format(id=job_id)) else: @@ -626,11 +552,7 @@ class SystemView(UserPassesTestMixin, View): } # Configuration - try: - config = ConfigRevision.objects.get(pk=cache.get('config_version')) - except ConfigRevision.DoesNotExist: - # Fall back to using the active config data if no record is found - config = get_config() + config = get_config() # Raw data export if 'export' in request.GET: @@ -648,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, @@ -672,7 +595,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")) diff --git a/netbox/dcim/api/nested_serializers.py b/netbox/dcim/api/nested_serializers.py deleted file mode 100644 index 4b8f0db4a..000000000 --- a/netbox/dcim/api/nested_serializers.py +++ /dev/null @@ -1,389 +0,0 @@ -import warnings - -from drf_spectacular.utils import extend_schema_serializer -from rest_framework import serializers - -from dcim import models -from netbox.api.fields import RelatedObjectCountField -from netbox.api.serializers import WritableNestedSerializer -from .serializers_.nested import ( - NestedDeviceBaySerializer, NestedDeviceSerializer, NestedInterfaceSerializer, NestedInterfaceTemplateSerializer, - NestedLocationSerializer, NestedModuleBaySerializer, NestedRegionSerializer, NestedSiteGroupSerializer, -) - -__all__ = [ - 'NestedCableSerializer', - 'NestedConsolePortSerializer', - 'NestedConsolePortTemplateSerializer', - 'NestedConsoleServerPortSerializer', - 'NestedConsoleServerPortTemplateSerializer', - 'NestedDeviceBaySerializer', - 'NestedDeviceBayTemplateSerializer', - 'NestedDeviceRoleSerializer', - 'NestedDeviceSerializer', - 'NestedDeviceTypeSerializer', - 'NestedFrontPortSerializer', - 'NestedFrontPortTemplateSerializer', - 'NestedInterfaceSerializer', - 'NestedInterfaceTemplateSerializer', - 'NestedInventoryItemSerializer', - 'NestedInventoryItemRoleSerializer', - 'NestedInventoryItemTemplateSerializer', - 'NestedManufacturerSerializer', - 'NestedModuleBaySerializer', - 'NestedModuleBayTemplateSerializer', - 'NestedModuleSerializer', - 'NestedModuleTypeSerializer', - 'NestedPlatformSerializer', - 'NestedPowerFeedSerializer', - 'NestedPowerOutletSerializer', - 'NestedPowerOutletTemplateSerializer', - 'NestedPowerPanelSerializer', - 'NestedPowerPortSerializer', - 'NestedPowerPortTemplateSerializer', - 'NestedLocationSerializer', - 'NestedRackReservationSerializer', - 'NestedRackRoleSerializer', - 'NestedRackSerializer', - 'NestedRearPortSerializer', - 'NestedRearPortTemplateSerializer', - 'NestedRegionSerializer', - 'NestedSiteSerializer', - 'NestedSiteGroupSerializer', - 'NestedVirtualChassisSerializer', - 'NestedVirtualDeviceContextSerializer', -] - -# TODO: Remove in v4.2 -warnings.warn( - "Dedicated nested serializers will be removed in NetBox v4.2. Use Serializer(nested=True) instead.", - DeprecationWarning -) - - -# -# Regions/sites -# - -class NestedSiteSerializer(WritableNestedSerializer): - - class Meta: - model = models.Site - fields = ['id', 'url', 'display_url', 'display', 'name', 'slug'] - - -# -# Racks -# - -@extend_schema_serializer( - exclude_fields=('rack_count',), -) -class NestedRackRoleSerializer(WritableNestedSerializer): - rack_count = RelatedObjectCountField('racks') - - class Meta: - model = models.RackRole - fields = ['id', 'url', 'display_url', 'display', 'name', 'slug', 'rack_count'] - - -@extend_schema_serializer( - exclude_fields=('device_count',), -) -class NestedRackSerializer(WritableNestedSerializer): - device_count = RelatedObjectCountField('devices') - - class Meta: - model = models.Rack - fields = ['id', 'url', 'display_url', 'display', 'name', 'device_count'] - - -class NestedRackReservationSerializer(WritableNestedSerializer): - user = serializers.SerializerMethodField(read_only=True) - - class Meta: - model = models.RackReservation - fields = ['id', 'url', 'display_url', 'display', 'user', 'units'] - - def get_user(self, obj): - return obj.user.username - - -# -# Device/module types -# - -@extend_schema_serializer( - exclude_fields=('devicetype_count',), -) -class NestedManufacturerSerializer(WritableNestedSerializer): - devicetype_count = RelatedObjectCountField('device_types') - - class Meta: - model = models.Manufacturer - fields = ['id', 'url', 'display_url', 'display', 'name', 'slug', 'devicetype_count'] - - -@extend_schema_serializer( - exclude_fields=('device_count',), -) -class NestedDeviceTypeSerializer(WritableNestedSerializer): - manufacturer = NestedManufacturerSerializer(read_only=True) - device_count = RelatedObjectCountField('instances') - - class Meta: - model = models.DeviceType - fields = ['id', 'url', 'display_url', 'display', 'manufacturer', 'model', 'slug', 'device_count'] - - -class NestedModuleTypeSerializer(WritableNestedSerializer): - manufacturer = NestedManufacturerSerializer(read_only=True) - - class Meta: - model = models.ModuleType - fields = ['id', 'url', 'display_url', 'display', 'manufacturer', 'model'] - - -# -# Component templates -# - -class NestedConsolePortTemplateSerializer(WritableNestedSerializer): - - class Meta: - model = models.ConsolePortTemplate - fields = ['id', 'url', 'display_url', 'display', 'name'] - - -class NestedConsoleServerPortTemplateSerializer(WritableNestedSerializer): - - class Meta: - model = models.ConsoleServerPortTemplate - fields = ['id', 'url', 'display_url', 'display', 'name'] - - -class NestedPowerPortTemplateSerializer(WritableNestedSerializer): - - class Meta: - model = models.PowerPortTemplate - fields = ['id', 'url', 'display_url', 'display', 'name'] - - -class NestedPowerOutletTemplateSerializer(WritableNestedSerializer): - - class Meta: - model = models.PowerOutletTemplate - fields = ['id', 'url', 'display_url', 'display', 'name'] - - -class NestedRearPortTemplateSerializer(WritableNestedSerializer): - - class Meta: - model = models.RearPortTemplate - fields = ['id', 'url', 'display_url', 'display', 'name'] - - -class NestedFrontPortTemplateSerializer(WritableNestedSerializer): - - class Meta: - model = models.FrontPortTemplate - fields = ['id', 'url', 'display_url', 'display', 'name'] - - -class NestedModuleBayTemplateSerializer(WritableNestedSerializer): - - class Meta: - model = models.ModuleBayTemplate - fields = ['id', 'url', 'display_url', 'display', 'name'] - - -class NestedDeviceBayTemplateSerializer(WritableNestedSerializer): - - class Meta: - model = models.DeviceBayTemplate - fields = ['id', 'url', 'display_url', 'display', 'name'] - - -class NestedInventoryItemTemplateSerializer(WritableNestedSerializer): - _depth = serializers.IntegerField(source='level', read_only=True) - - class Meta: - model = models.InventoryItemTemplate - fields = ['id', 'url', 'display_url', 'display', 'name', '_depth'] - - -# -# Devices -# - -@extend_schema_serializer( - exclude_fields=('device_count', 'virtualmachine_count'), -) -class NestedDeviceRoleSerializer(WritableNestedSerializer): - device_count = RelatedObjectCountField('devices') - virtualmachine_count = RelatedObjectCountField('virtual_machines') - - class Meta: - model = models.DeviceRole - fields = ['id', 'url', 'display_url', 'display', 'name', 'slug', 'device_count', 'virtualmachine_count'] - - -@extend_schema_serializer( - exclude_fields=('device_count', 'virtualmachine_count'), -) -class NestedPlatformSerializer(WritableNestedSerializer): - device_count = RelatedObjectCountField('devices') - virtualmachine_count = RelatedObjectCountField('virtual_machines') - - class Meta: - model = models.Platform - fields = ['id', 'url', 'display_url', 'display', 'name', 'slug', 'device_count', 'virtualmachine_count'] - - -class ModuleNestedModuleBaySerializer(WritableNestedSerializer): - - class Meta: - model = models.ModuleBay - fields = ['id', 'url', 'display_url', 'display', 'name'] - - -class NestedModuleSerializer(WritableNestedSerializer): - device = NestedDeviceSerializer(read_only=True) - module_bay = ModuleNestedModuleBaySerializer(read_only=True) - module_type = NestedModuleTypeSerializer(read_only=True) - - class Meta: - model = models.Module - fields = ['id', 'url', 'display_url', 'display', 'device', 'module_bay', 'module_type'] - - -class NestedConsoleServerPortSerializer(WritableNestedSerializer): - device = NestedDeviceSerializer(read_only=True) - _occupied = serializers.BooleanField(required=False, read_only=True) - - class Meta: - model = models.ConsoleServerPort - fields = ['id', 'url', 'display_url', 'display', 'device', 'name', 'cable', '_occupied'] - - -class NestedConsolePortSerializer(WritableNestedSerializer): - device = NestedDeviceSerializer(read_only=True) - _occupied = serializers.BooleanField(required=False, read_only=True) - - class Meta: - model = models.ConsolePort - fields = ['id', 'url', 'display_url', 'display', 'device', 'name', 'cable', '_occupied'] - - -class NestedPowerOutletSerializer(WritableNestedSerializer): - device = NestedDeviceSerializer(read_only=True) - _occupied = serializers.BooleanField(required=False, read_only=True) - - class Meta: - model = models.PowerOutlet - fields = ['id', 'url', 'display_url', 'display', 'device', 'name', 'cable', '_occupied'] - - -class NestedPowerPortSerializer(WritableNestedSerializer): - device = NestedDeviceSerializer(read_only=True) - _occupied = serializers.BooleanField(required=False, read_only=True) - - class Meta: - model = models.PowerPort - fields = ['id', 'url', 'display_url', 'display', 'device', 'name', 'cable', '_occupied'] - - -class NestedRearPortSerializer(WritableNestedSerializer): - device = NestedDeviceSerializer(read_only=True) - _occupied = serializers.BooleanField(required=False, read_only=True) - - class Meta: - model = models.RearPort - fields = ['id', 'url', 'display_url', 'display', 'device', 'name', 'cable', '_occupied'] - - -class NestedFrontPortSerializer(WritableNestedSerializer): - device = NestedDeviceSerializer(read_only=True) - _occupied = serializers.BooleanField(required=False, read_only=True) - - class Meta: - model = models.FrontPort - fields = ['id', 'url', 'display_url', 'display', 'device', 'name', 'cable', '_occupied'] - - -class NestedInventoryItemSerializer(WritableNestedSerializer): - device = NestedDeviceSerializer(read_only=True) - _depth = serializers.IntegerField(source='level', read_only=True) - - class Meta: - model = models.InventoryItem - fields = ['id', 'url', 'display_url', 'display', 'device', 'name', '_depth'] - - -@extend_schema_serializer( - exclude_fields=('inventoryitem_count',), -) -class NestedInventoryItemRoleSerializer(WritableNestedSerializer): - inventoryitem_count = RelatedObjectCountField('inventory_items') - - class Meta: - model = models.InventoryItemRole - fields = ['id', 'url', 'display_url', 'display', 'name', 'slug', 'inventoryitem_count'] - - -# -# Cables -# - -class NestedCableSerializer(WritableNestedSerializer): - - class Meta: - model = models.Cable - fields = ['id', 'url', 'display_url', 'display', 'label'] - - -# -# Virtual chassis -# - -@extend_schema_serializer( - exclude_fields=('member_count',), -) -class NestedVirtualChassisSerializer(WritableNestedSerializer): - master = NestedDeviceSerializer() - member_count = serializers.IntegerField(read_only=True) - - class Meta: - model = models.VirtualChassis - fields = ['id', 'url', 'display_url', 'display', 'name', 'master', 'member_count'] - - -# -# Power panels/feeds -# - -@extend_schema_serializer( - exclude_fields=('powerfeed_count',), -) -class NestedPowerPanelSerializer(WritableNestedSerializer): - powerfeed_count = RelatedObjectCountField('powerfeeds') - - class Meta: - model = models.PowerPanel - fields = ['id', 'url', 'display_url', 'display', 'name', 'powerfeed_count'] - - -class NestedPowerFeedSerializer(WritableNestedSerializer): - _occupied = serializers.BooleanField(required=False, read_only=True) - - class Meta: - model = models.PowerFeed - fields = ['id', 'url', 'display_url', 'display', 'name', 'cable', '_occupied'] - - -class NestedVirtualDeviceContextSerializer(WritableNestedSerializer): - device = NestedDeviceSerializer() - - class Meta: - model = models.VirtualDeviceContext - fields = ['id', 'url', 'display_url', 'display', 'name', 'identifier', 'device'] diff --git a/netbox/dcim/api/serializers_/device_components.py b/netbox/dcim/api/serializers_/device_components.py index 60d6561df..a6767bb6f 100644 --- a/netbox/dcim/api/serializers_/device_components.py +++ b/netbox/dcim/api/serializers_/device_components.py @@ -8,7 +8,7 @@ from dcim.models import ( ConsolePort, ConsoleServerPort, DeviceBay, FrontPort, Interface, InventoryItem, ModuleBay, PowerOutlet, PowerPort, RearPort, VirtualDeviceContext, ) -from ipam.api.serializers_.vlans import VLANSerializer +from ipam.api.serializers_.vlans import VLANSerializer, VLANTranslationPolicySerializer from ipam.api.serializers_.vrfs import VRFSerializer from ipam.models import VLAN from netbox.api.fields import ChoiceField, ContentTypeField, SerializedPKRelatedField @@ -21,7 +21,7 @@ from wireless.choices import * from wireless.models import WirelessLAN from .base import ConnectedEndpointsSerializer from .cables import CabledObjectSerializer -from .devices import DeviceSerializer, ModuleSerializer, VirtualDeviceContextSerializer +from .devices import DeviceSerializer, MACAddressSerializer, ModuleSerializer, VirtualDeviceContextSerializer from .manufacturers import ManufacturerSerializer from .nested import NestedInterfaceSerializer from .roles import InventoryItemRoleSerializer @@ -155,7 +155,7 @@ class PowerOutletSerializer(NetBoxModelSerializer, CabledObjectSerializer, Conne class Meta: model = PowerOutlet fields = [ - 'id', 'url', 'display_url', 'display', 'device', 'module', 'name', 'label', 'type', 'power_port', + 'id', 'url', 'display_url', 'display', 'device', 'module', 'name', 'label', 'type', 'color', 'power_port', 'feed_leg', 'description', 'mark_connected', 'cable', 'cable_end', 'link_peers', 'link_peers_type', 'connected_endpoints', 'connected_endpoints_type', 'connected_endpoints_reachable', 'tags', 'custom_fields', 'created', 'last_updated', '_occupied', @@ -196,6 +196,8 @@ class InterfaceSerializer(NetBoxModelSerializer, CabledObjectSerializer, Connect required=False, many=True ) + qinq_svlan = VLANSerializer(nested=True, required=False, allow_null=True) + vlan_translation_policy = VLANTranslationPolicySerializer(nested=True, required=False, allow_null=True) vrf = VRFSerializer(nested=True, required=False, allow_null=True) l2vpn_termination = L2VPNTerminationSerializer(nested=True, read_only=True, allow_null=True) wireless_link = NestedWirelessLinkSerializer(read_only=True, allow_null=True) @@ -208,22 +210,21 @@ class InterfaceSerializer(NetBoxModelSerializer, CabledObjectSerializer, Connect ) count_ipaddresses = serializers.IntegerField(read_only=True) count_fhrp_groups = serializers.IntegerField(read_only=True) - mac_address = serializers.CharField( - required=False, - default=None, - allow_blank=True, - allow_null=True - ) + # Maintains backward compatibility with NetBox [ge,xe]-0/0/[0-9]). The token {module}, if present, will be " + "automatically replaced with the position value when creating a new module." + ) + class ConsolePortTemplateForm(ModularComponentTemplateForm): fieldsets = ( @@ -991,7 +1010,8 @@ class InterfaceTemplateForm(ModularComponentTemplateForm): class Meta: model = InterfaceTemplate fields = [ - 'device_type', 'module_type', 'name', 'label', 'type', 'mgmt_only', 'enabled', 'description', 'poe_mode', 'poe_type', 'bridge', 'rf_role', + 'device_type', 'module_type', 'name', 'label', 'type', 'mgmt_only', 'enabled', 'description', 'poe_mode', + 'poe_type', 'bridge', 'rf_role', ] @@ -1173,7 +1193,10 @@ class InventoryItemTemplateForm(ComponentTemplateForm): break elif component_type and component_id: # When adding the InventoryItem from a component page - if content_type := ContentType.objects.filter(MODULAR_COMPONENT_TEMPLATE_MODELS).filter(pk=component_type).first(): + content_type = ContentType.objects.filter( + MODULAR_COMPONENT_TEMPLATE_MODELS + ).filter(pk=component_type).first() + if content_type: if component := content_type.model_class().objects.filter(pk=component_id).first(): initial[content_type.model] = component @@ -1285,16 +1308,16 @@ class PowerOutletForm(ModularDeviceComponentForm): fieldsets = ( FieldSet( - 'device', 'module', 'name', 'label', 'type', 'power_port', 'feed_leg', 'mark_connected', 'description', - 'tags', + 'device', 'module', 'name', 'label', 'type', 'color', 'power_port', 'feed_leg', 'mark_connected', + 'description', 'tags', ), ) class Meta: model = PowerOutlet fields = [ - 'device', 'module', 'name', 'label', 'type', 'power_port', 'feed_leg', 'mark_connected', 'description', - 'tags', + 'device', 'module', 'name', 'label', 'type', 'color', 'power_port', 'feed_leg', 'mark_connected', + 'description', 'tags', ] @@ -1372,26 +1395,51 @@ class InterfaceForm(InterfaceCommonForm, ModularDeviceComponentForm): 'available_on_device': '$device', } ) + qinq_svlan = DynamicModelChoiceField( + queryset=VLAN.objects.all(), + required=False, + label=_('Q-in-Q Service VLAN'), + query_params={ + 'group_id': '$vlan_group', + 'available_on_device': '$device', + 'qinq_role': VLANQinQRoleChoices.ROLE_SERVICE, + } + ) vrf = DynamicModelChoiceField( queryset=VRF.objects.all(), required=False, label=_('VRF') ) + primary_mac_address = DynamicModelChoiceField( + queryset=MACAddress.objects.all(), + label=_('Primary MAC address'), + required=False, + quick_add=True, + quick_add_params={'interface': '$pk'} + ) wwn = forms.CharField( empty_value=None, required=False, label=_('WWN') ) + vlan_translation_policy = DynamicModelChoiceField( + queryset=VLANTranslationPolicy.objects.all(), + required=False, + label=_('VLAN Translation Policy') + ) fieldsets = ( FieldSet( 'device', 'module', 'name', 'label', 'type', 'speed', 'duplex', 'description', 'tags', name=_('Interface') ), - FieldSet('vrf', 'mac_address', 'wwn', name=_('Addressing')), + FieldSet('vrf', 'primary_mac_address', 'wwn', name=_('Addressing')), FieldSet('vdcs', 'mtu', 'tx_power', 'enabled', 'mgmt_only', 'mark_connected', name=_('Operation')), FieldSet('parent', 'bridge', 'lag', name=_('Related Interfaces')), FieldSet('poe_mode', 'poe_type', name=_('PoE')), - FieldSet('mode', 'vlan_group', 'untagged_vlan', 'tagged_vlans', name=_('802.1Q Switching')), + FieldSet( + 'mode', 'vlan_group', 'untagged_vlan', 'tagged_vlans', 'qinq_svlan', 'vlan_translation_policy', + name=_('802.1Q Switching') + ), FieldSet( 'rf_role', 'rf_channel', 'rf_channel_frequency', 'rf_channel_width', 'wireless_lan_group', 'wireless_lans', name=_('Wireless') @@ -1401,10 +1449,11 @@ class InterfaceForm(InterfaceCommonForm, ModularDeviceComponentForm): class Meta: model = Interface fields = [ - 'device', 'module', 'vdcs', 'name', 'label', 'type', 'speed', 'duplex', 'enabled', 'parent', 'bridge', 'lag', - 'mac_address', 'wwn', 'mtu', 'mgmt_only', 'mark_connected', 'description', 'poe_mode', 'poe_type', 'mode', + 'device', 'module', 'vdcs', 'name', 'label', 'type', 'speed', 'duplex', 'enabled', 'parent', 'bridge', + 'lag', 'wwn', 'mtu', 'mgmt_only', 'mark_connected', 'description', 'poe_mode', 'poe_type', 'mode', 'rf_role', 'rf_channel', 'rf_channel_frequency', 'rf_channel_width', 'tx_power', 'wireless_lans', - 'untagged_vlan', 'tagged_vlans', 'vrf', 'tags', + 'untagged_vlan', 'tagged_vlans', 'qinq_svlan', 'vlan_translation_policy', 'vrf', 'primary_mac_address', + 'tags', ] widgets = { 'speed': NumberWithOptions( @@ -1576,7 +1625,10 @@ class InventoryItemForm(DeviceComponentForm): ) fieldsets = ( - FieldSet('device', 'parent', 'name', 'label', 'role', 'description', 'tags', name=_('Inventory Item')), + FieldSet( + 'device', 'parent', 'name', 'label', 'status', 'role', 'description', 'tags', + name=_('Inventory Item') + ), FieldSet('manufacturer', 'part_id', 'serial', 'asset_tag', name=_('Hardware')), FieldSet( TabbedGroups( @@ -1596,7 +1648,7 @@ class InventoryItemForm(DeviceComponentForm): model = InventoryItem fields = [ 'device', 'parent', 'name', 'label', 'role', 'manufacturer', 'part_id', 'serial', 'asset_tag', - 'description', 'tags', + 'status', 'description', 'tags', ] def __init__(self, *args, **kwargs): @@ -1698,3 +1750,83 @@ class VirtualDeviceContextForm(TenancyForm, NetBoxModelForm): 'device', 'name', 'status', 'identifier', 'primary_ip4', 'primary_ip6', 'tenant_group', 'tenant', 'comments', 'tags' ] + + +# +# Addressing +# + +class MACAddressForm(NetBoxModelForm): + mac_address = forms.CharField( + required=True, + label=_('MAC address') + ) + interface = DynamicModelChoiceField( + label=_('Interface'), + queryset=Interface.objects.all(), + required=False, + context={ + 'parent': 'device', + }, + ) + vminterface = DynamicModelChoiceField( + label=_('VM Interface'), + queryset=VMInterface.objects.all(), + required=False, + context={ + 'parent': 'virtual_machine', + }, + ) + + fieldsets = ( + FieldSet( + 'mac_address', 'description', 'tags', + ), + FieldSet( + TabbedGroups( + FieldSet('interface', name=_('Device')), + FieldSet('vminterface', name=_('Virtual Machine')), + ), + ), + ) + + class Meta: + model = MACAddress + fields = [ + 'mac_address', 'interface', 'vminterface', 'description', 'tags', + ] + + def __init__(self, *args, **kwargs): + + # Initialize helper selectors + instance = kwargs.get('instance') + initial = kwargs.get('initial', {}).copy() + if instance: + if type(instance.assigned_object) is Interface: + initial['interface'] = instance.assigned_object + elif type(instance.assigned_object) is VMInterface: + initial['vminterface'] = instance.assigned_object + kwargs['initial'] = initial + + 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() + + # Handle object assignment + selected_objects = [ + field for field in ('interface', 'vminterface') if self.cleaned_data[field] + ] + if len(selected_objects) > 1: + raise forms.ValidationError({ + selected_objects[1]: _("A MAC address can only be assigned to a single object.") + }) + elif selected_objects: + self.instance.assigned_object = self.cleaned_data[selected_objects[0]] + else: + self.instance.assigned_object = None diff --git a/netbox/dcim/forms/object_create.py b/netbox/dcim/forms/object_create.py index d18c7ed14..6f6cd8f7c 100644 --- a/netbox/dcim/forms/object_create.py +++ b/netbox/dcim/forms/object_create.py @@ -243,14 +243,6 @@ class InterfaceCreateForm(ComponentCreateForm, model_forms.InterfaceForm): class Meta(model_forms.InterfaceForm.Meta): exclude = ('name', 'label') - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - - if 'module' in self.fields: - self.fields['name'].help_text += _( - "The string {module} will be replaced with the position of the assigned module, if any." - ) - class FrontPortCreateForm(ComponentCreateForm, model_forms.FrontPortForm): device = DynamicModelChoiceField( @@ -424,7 +416,8 @@ class VirtualChassisCreateForm(NetBoxModelForm): class Meta: model = VirtualChassis fields = [ - 'name', 'domain', 'description', 'region', 'site_group', 'site', 'rack', 'members', 'initial_position', 'tags', + 'name', 'domain', 'description', 'region', 'site_group', 'site', 'rack', 'members', 'initial_position', + 'tags', ] def clean(self): diff --git a/netbox/dcim/forms/object_import.py b/netbox/dcim/forms/object_import.py index d46ef83ad..821f91402 100644 --- a/netbox/dcim/forms/object_import.py +++ b/netbox/dcim/forms/object_import.py @@ -136,7 +136,8 @@ class FrontPortTemplateImportForm(forms.ModelForm): class Meta: model = FrontPortTemplate fields = [ - 'device_type', 'module_type', 'name', 'type', 'color', 'rear_port', 'rear_port_position', 'label', 'description', + 'device_type', 'module_type', 'name', 'type', 'color', 'rear_port', 'rear_port_position', 'label', + 'description', ] diff --git a/netbox/dcim/graphql/filters.py b/netbox/dcim/graphql/filters.py index 8c256aecb..94f2c6d38 100644 --- a/netbox/dcim/graphql/filters.py +++ b/netbox/dcim/graphql/filters.py @@ -23,6 +23,7 @@ __all__ = ( 'InventoryItemFilter', 'InventoryItemRoleFilter', 'LocationFilter', + 'MACAddressFilter', 'ManufacturerFilter', 'ModuleFilter', 'ModuleBayFilter', @@ -133,6 +134,12 @@ class FrontPortTemplateFilter(BaseFilterMixin): pass +@strawberry_django.filter(models.MACAddress, lookups=True) +@autotype_decorator(filtersets.MACAddressFilterSet) +class MACAddressFilter(BaseFilterMixin): + pass + + @strawberry_django.filter(models.Interface, lookups=True) @autotype_decorator(filtersets.InterfaceFilterSet) class InterfaceFilter(BaseFilterMixin): diff --git a/netbox/dcim/graphql/schema.py b/netbox/dcim/graphql/schema.py index 65818fb20..011a2b58b 100644 --- a/netbox/dcim/graphql/schema.py +++ b/netbox/dcim/graphql/schema.py @@ -44,6 +44,9 @@ class DCIMQuery: front_port_template: FrontPortTemplateType = strawberry_django.field() front_port_template_list: List[FrontPortTemplateType] = strawberry_django.field() + mac_address: MACAddressType = strawberry_django.field() + mac_address_list: List[MACAddressType] = strawberry_django.field() + interface: InterfaceType = strawberry_django.field() interface_list: List[InterfaceType] = strawberry_django.field() diff --git a/netbox/dcim/graphql/types.py b/netbox/dcim/graphql/types.py index bce6f06ac..8d992176a 100644 --- a/netbox/dcim/graphql/types.py +++ b/netbox/dcim/graphql/types.py @@ -34,6 +34,7 @@ __all__ = ( 'InventoryItemRoleType', 'InventoryItemTemplateType', 'LocationType', + 'MACAddressType', 'ManufacturerType', 'ModularComponentType', 'ModuleType', @@ -76,7 +77,6 @@ class ComponentType( """ Base type for device/VM components """ - _name: str device: Annotated["DeviceType", strawberry.lazy('dcim.graphql.types')] @@ -93,7 +93,6 @@ class ComponentTemplateType( """ Base type for device/VM components """ - _name: str device_type: Annotated["DeviceTypeType", strawberry.lazy('dcim.graphql.types')] @@ -116,7 +115,7 @@ class ModularComponentTemplateType(ComponentTemplateType): filters=CableTerminationFilter ) class CableTerminationType(NetBoxObjectType): - + cable: Annotated["CableType", strawberry.lazy('dcim.graphql.types')] | None termination: Annotated[Union[ Annotated["CircuitTerminationType", strawberry.lazy('circuits.graphql.types')], Annotated["ConsolePortType", strawberry.lazy('dcim.graphql.types')], @@ -181,7 +180,7 @@ class ConsolePortType(ModularComponentType, CabledObjectMixin, PathEndpointMixin filters=ConsolePortTemplateFilter ) class ConsolePortTemplateType(ModularComponentTemplateType): - _name: str + pass @strawberry_django.type( @@ -199,7 +198,7 @@ class ConsoleServerPortType(ModularComponentType, CabledObjectMixin, PathEndpoin filters=ConsoleServerPortTemplateFilter ) class ConsoleServerPortTemplateType(ModularComponentTemplateType): - _name: str + pass @strawberry_django.type( @@ -208,7 +207,6 @@ class ConsoleServerPortTemplateType(ModularComponentTemplateType): filters=DeviceFilter ) class DeviceType(ConfigContextMixin, ImageAttachmentsMixin, ContactsMixin, NetBoxObjectType): - _name: str console_port_count: BigInt console_server_port_count: BigInt power_port_count: BigInt @@ -273,7 +271,7 @@ class DeviceBayType(ComponentType): filters=DeviceBayTemplateFilter ) class DeviceBayTemplateType(ComponentTemplateType): - _name: str + pass @strawberry_django.type( @@ -282,7 +280,6 @@ class DeviceBayTemplateType(ComponentTemplateType): filters=InventoryItemTemplateFilter ) class InventoryItemTemplateType(ComponentTemplateType): - _name: str role: Annotated["InventoryItemRoleType", strawberry.lazy('dcim.graphql.types')] | None manufacturer: Annotated["ManufacturerType", strawberry.lazy('dcim.graphql.types')] @@ -366,18 +363,33 @@ class FrontPortType(ModularComponentType, CabledObjectMixin): filters=FrontPortTemplateFilter ) class FrontPortTemplateType(ModularComponentTemplateType): - _name: str color: str rear_port: Annotated["RearPortTemplateType", strawberry.lazy('dcim.graphql.types')] +@strawberry_django.type( + models.MACAddress, + exclude=('assigned_object_type', 'assigned_object_id'), + filters=MACAddressFilter +) +class MACAddressType(NetBoxObjectType): + mac_address: str + + @strawberry_django.field + def assigned_object(self) -> Annotated[Union[ + Annotated["InterfaceType", strawberry.lazy('dcim.graphql.types')], + Annotated["VMInterfaceType", strawberry.lazy('virtualization.graphql.types')], + ], strawberry.union("MACAddressAssignmentType")] | None: + return self.assigned_object + + @strawberry_django.type( models.Interface, exclude=('_path',), filters=InterfaceFilter ) class InterfaceType(IPAddressesMixin, ModularComponentType, CabledObjectMixin, PathEndpointMixin): - mac_address: str | None + _name: str wwn: str | None parent: Annotated["InterfaceType", strawberry.lazy('dcim.graphql.types')] | None bridge: Annotated["InterfaceType", strawberry.lazy('dcim.graphql.types')] | None @@ -385,6 +397,9 @@ class InterfaceType(IPAddressesMixin, ModularComponentType, CabledObjectMixin, P wireless_link: Annotated["WirelessLinkType", strawberry.lazy('wireless.graphql.types')] | None untagged_vlan: Annotated["VLANType", strawberry.lazy('ipam.graphql.types')] | None vrf: Annotated["VRFType", strawberry.lazy('ipam.graphql.types')] | None + primary_mac_address: Annotated["MACAddressType", strawberry.lazy('dcim.graphql.types')] | None + qinq_svlan: Annotated["VLANType", strawberry.lazy('ipam.graphql.types')] | None + vlan_translation_policy: Annotated["VLANTranslationPolicyType", strawberry.lazy('ipam.graphql.types')] | None vdcs: List[Annotated["VirtualDeviceContextType", strawberry.lazy('dcim.graphql.types')]] tagged_vlans: List[Annotated["VLANType", strawberry.lazy('ipam.graphql.types')]] @@ -392,6 +407,7 @@ class InterfaceType(IPAddressesMixin, ModularComponentType, CabledObjectMixin, P wireless_lans: List[Annotated["WirelessLANType", strawberry.lazy('wireless.graphql.types')]] member_interfaces: List[Annotated["InterfaceType", strawberry.lazy('dcim.graphql.types')]] child_interfaces: List[Annotated["InterfaceType", strawberry.lazy('dcim.graphql.types')]] + mac_addresses: List[Annotated["MACAddressType", strawberry.lazy('dcim.graphql.types')]] @strawberry_django.type( @@ -461,6 +477,16 @@ class LocationType(VLANGroupsMixin, ImageAttachmentsMixin, ContactsMixin, Organi devices: List[Annotated["DeviceType", strawberry.lazy('dcim.graphql.types')]] children: List[Annotated["LocationType", strawberry.lazy('dcim.graphql.types')]] + @strawberry_django.field + def clusters(self) -> List[Annotated["ClusterType", strawberry.lazy('virtualization.graphql.types')]]: + return self.cluster_set.all() + + @strawberry_django.field + def circuit_terminations(self) -> List[ + Annotated["CircuitTerminationType", strawberry.lazy('circuits.graphql.types')] + ]: + return self.circuit_terminations.all() + @strawberry_django.type( models.Manufacturer, @@ -517,7 +543,7 @@ class ModuleBayType(ModularComponentType): filters=ModuleBayTemplateFilter ) class ModuleBayTemplateType(ModularComponentTemplateType): - _name: str + pass @strawberry_django.type( @@ -569,6 +595,7 @@ class PowerFeedType(NetBoxObjectType, CabledObjectMixin, PathEndpointMixin): ) class PowerOutletType(ModularComponentType, CabledObjectMixin, PathEndpointMixin): power_port: Annotated["PowerPortType", strawberry.lazy('dcim.graphql.types')] | None + color: str @strawberry_django.type( @@ -577,7 +604,6 @@ class PowerOutletType(ModularComponentType, CabledObjectMixin, PathEndpointMixin filters=PowerOutletTemplateFilter ) class PowerOutletTemplateType(ModularComponentTemplateType): - _name: str power_port: Annotated["PowerPortTemplateType", strawberry.lazy('dcim.graphql.types')] | None @@ -609,8 +635,6 @@ class PowerPortType(ModularComponentType, CabledObjectMixin, PathEndpointMixin): filters=PowerPortTemplateFilter ) class PowerPortTemplateType(ModularComponentTemplateType): - _name: str - poweroutlet_templates: List[Annotated["PowerOutletTemplateType", strawberry.lazy('dcim.graphql.types')]] @@ -629,7 +653,6 @@ class RackTypeType(NetBoxObjectType): filters=RackFilter ) class RackType(VLANGroupsMixin, ImageAttachmentsMixin, ContactsMixin, NetBoxObjectType): - _name: str site: Annotated["SiteType", strawberry.lazy('dcim.graphql.types')] location: Annotated["LocationType", strawberry.lazy('dcim.graphql.types')] | None tenant: Annotated["TenantType", strawberry.lazy('tenancy.graphql.types')] | None @@ -682,7 +705,6 @@ class RearPortType(ModularComponentType, CabledObjectMixin): filters=RearPortTemplateFilter ) class RearPortTemplateType(ModularComponentTemplateType): - _name: str color: str frontport_templates: List[Annotated["FrontPortTemplateType", strawberry.lazy('dcim.graphql.types')]] @@ -703,6 +725,16 @@ class RegionType(VLANGroupsMixin, ContactsMixin, OrganizationalObjectType): def parent(self) -> Annotated["RegionType", strawberry.lazy('dcim.graphql.types')] | None: return self.parent + @strawberry_django.field + def clusters(self) -> List[Annotated["ClusterType", strawberry.lazy('virtualization.graphql.types')]]: + return self.cluster_set.all() + + @strawberry_django.field + def circuit_terminations(self) -> List[ + Annotated["CircuitTerminationType", strawberry.lazy('circuits.graphql.types')] + ]: + return self.circuit_terminations.all() + @strawberry_django.type( models.Site, @@ -710,7 +742,6 @@ class RegionType(VLANGroupsMixin, ContactsMixin, OrganizationalObjectType): filters=SiteFilter ) class SiteType(VLANGroupsMixin, ImageAttachmentsMixin, ContactsMixin, NetBoxObjectType): - _name: str time_zone: str | None region: Annotated["RegionType", strawberry.lazy('dcim.graphql.types')] | None group: Annotated["SiteGroupType", strawberry.lazy('dcim.graphql.types')] | None @@ -728,6 +759,16 @@ class SiteType(VLANGroupsMixin, ImageAttachmentsMixin, ContactsMixin, NetBoxObje clusters: List[Annotated["ClusterType", strawberry.lazy('virtualization.graphql.types')]] vlans: List[Annotated["VLANType", strawberry.lazy('ipam.graphql.types')]] + @strawberry_django.field + def clusters(self) -> List[Annotated["ClusterType", strawberry.lazy('virtualization.graphql.types')]]: + return self.cluster_set.all() + + @strawberry_django.field + def circuit_terminations(self) -> List[ + Annotated["CircuitTerminationType", strawberry.lazy('circuits.graphql.types')] + ]: + return self.circuit_terminations.all() + @strawberry_django.type( models.SiteGroup, @@ -744,6 +785,16 @@ class SiteGroupType(VLANGroupsMixin, ContactsMixin, OrganizationalObjectType): def parent(self) -> Annotated["SiteGroupType", strawberry.lazy('dcim.graphql.types')] | None: return self.parent + @strawberry_django.field + def clusters(self) -> List[Annotated["ClusterType", strawberry.lazy('virtualization.graphql.types')]]: + return self.cluster_set.all() + + @strawberry_django.field + def circuit_terminations(self) -> List[ + Annotated["CircuitTerminationType", strawberry.lazy('circuits.graphql.types')] + ]: + return self.circuit_terminations.all() + @strawberry_django.type( models.VirtualChassis, diff --git a/netbox/dcim/management/commands/buildschema.py b/netbox/dcim/management/commands/buildschema.py index 44a0e95f2..529a2462c 100644 --- a/netbox/dcim/management/commands/buildschema.py +++ b/netbox/dcim/management/commands/buildschema.py @@ -6,6 +6,7 @@ from django.core.management.base import BaseCommand from jinja2 import FileSystemLoader, Environment from dcim.choices import * +from netbox.choices import WeightUnitChoices TEMPLATE_FILENAME = 'devicetype_schema.jinja2' OUTPUT_FILENAME = 'contrib/generated_schema.json' diff --git a/netbox/dcim/migrations/0001_squashed.py b/netbox/dcim/migrations/0001_squashed.py index cf0ef4816..f08fe1d70 100644 --- a/netbox/dcim/migrations/0001_squashed.py +++ b/netbox/dcim/migrations/0001_squashed.py @@ -13,11 +13,9 @@ import utilities.validators class Migration(migrations.Migration): - initial = True - dependencies = [ - ] + dependencies = [] replaces = [ ('dcim', '0001_initial'), @@ -64,7 +62,12 @@ class Migration(migrations.Migration): ('custom_field_data', models.JSONField(blank=True, default=dict, encoder=CustomFieldJSONEncoder)), ('id', models.BigAutoField(primary_key=True, serialize=False)), ('name', models.CharField(max_length=64)), - ('_name', utilities.fields.NaturalOrderingField('name', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize)), + ( + '_name', + utilities.fields.NaturalOrderingField( + 'name', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize + ), + ), ('label', models.CharField(blank=True, max_length=64)), ('description', models.CharField(blank=True, max_length=200)), ('_cable_peer_id', models.PositiveIntegerField(blank=True, null=True)), @@ -83,7 +86,12 @@ class Migration(migrations.Migration): ('last_updated', models.DateTimeField(auto_now=True, null=True)), ('id', models.BigAutoField(primary_key=True, serialize=False)), ('name', models.CharField(max_length=64)), - ('_name', utilities.fields.NaturalOrderingField('name', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize)), + ( + '_name', + utilities.fields.NaturalOrderingField( + 'name', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize + ), + ), ('label', models.CharField(blank=True, max_length=64)), ('description', models.CharField(blank=True, max_length=200)), ('type', models.CharField(blank=True, max_length=50)), @@ -100,7 +108,12 @@ class Migration(migrations.Migration): ('custom_field_data', models.JSONField(blank=True, default=dict, encoder=CustomFieldJSONEncoder)), ('id', models.BigAutoField(primary_key=True, serialize=False)), ('name', models.CharField(max_length=64)), - ('_name', utilities.fields.NaturalOrderingField('name', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize)), + ( + '_name', + utilities.fields.NaturalOrderingField( + 'name', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize + ), + ), ('label', models.CharField(blank=True, max_length=64)), ('description', models.CharField(blank=True, max_length=200)), ('_cable_peer_id', models.PositiveIntegerField(blank=True, null=True)), @@ -119,7 +132,12 @@ class Migration(migrations.Migration): ('last_updated', models.DateTimeField(auto_now=True, null=True)), ('id', models.BigAutoField(primary_key=True, serialize=False)), ('name', models.CharField(max_length=64)), - ('_name', utilities.fields.NaturalOrderingField('name', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize)), + ( + '_name', + utilities.fields.NaturalOrderingField( + 'name', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize + ), + ), ('label', models.CharField(blank=True, max_length=64)), ('description', models.CharField(blank=True, max_length=200)), ('type', models.CharField(blank=True, max_length=50)), @@ -137,14 +155,34 @@ class Migration(migrations.Migration): ('id', models.BigAutoField(primary_key=True, serialize=False)), ('local_context_data', models.JSONField(blank=True, null=True)), ('name', models.CharField(blank=True, max_length=64, null=True)), - ('_name', utilities.fields.NaturalOrderingField('name', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize, null=True)), + ( + '_name', + utilities.fields.NaturalOrderingField( + 'name', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize, null=True + ), + ), ('serial', models.CharField(blank=True, max_length=50)), ('asset_tag', models.CharField(blank=True, max_length=50, null=True, unique=True)), - ('position', models.PositiveSmallIntegerField(blank=True, null=True, validators=[django.core.validators.MinValueValidator(1)])), + ( + 'position', + models.PositiveSmallIntegerField( + blank=True, null=True, validators=[django.core.validators.MinValueValidator(1)] + ), + ), ('face', models.CharField(blank=True, max_length=50)), ('status', models.CharField(default='active', max_length=50)), - ('vc_position', models.PositiveSmallIntegerField(blank=True, null=True, validators=[django.core.validators.MaxValueValidator(255)])), - ('vc_priority', models.PositiveSmallIntegerField(blank=True, null=True, validators=[django.core.validators.MaxValueValidator(255)])), + ( + 'vc_position', + models.PositiveSmallIntegerField( + blank=True, null=True, validators=[django.core.validators.MaxValueValidator(255)] + ), + ), + ( + 'vc_priority', + models.PositiveSmallIntegerField( + blank=True, null=True, validators=[django.core.validators.MaxValueValidator(255)] + ), + ), ('comments', models.TextField(blank=True)), ], options={ @@ -159,7 +197,12 @@ class Migration(migrations.Migration): ('custom_field_data', models.JSONField(blank=True, default=dict, encoder=CustomFieldJSONEncoder)), ('id', models.BigAutoField(primary_key=True, serialize=False)), ('name', models.CharField(max_length=64)), - ('_name', utilities.fields.NaturalOrderingField('name', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize)), + ( + '_name', + utilities.fields.NaturalOrderingField( + 'name', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize + ), + ), ('label', models.CharField(blank=True, max_length=64)), ('description', models.CharField(blank=True, max_length=200)), ], @@ -174,7 +217,12 @@ class Migration(migrations.Migration): ('last_updated', models.DateTimeField(auto_now=True, null=True)), ('id', models.BigAutoField(primary_key=True, serialize=False)), ('name', models.CharField(max_length=64)), - ('_name', utilities.fields.NaturalOrderingField('name', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize)), + ( + '_name', + utilities.fields.NaturalOrderingField( + 'name', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize + ), + ), ('label', models.CharField(blank=True, max_length=64)), ('description', models.CharField(blank=True, max_length=200)), ], @@ -228,13 +276,27 @@ class Migration(migrations.Migration): ('custom_field_data', models.JSONField(blank=True, default=dict, encoder=CustomFieldJSONEncoder)), ('id', models.BigAutoField(primary_key=True, serialize=False)), ('name', models.CharField(max_length=64)), - ('_name', utilities.fields.NaturalOrderingField('name', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize)), + ( + '_name', + utilities.fields.NaturalOrderingField( + 'name', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize + ), + ), ('label', models.CharField(blank=True, max_length=64)), ('description', models.CharField(blank=True, max_length=200)), ('_cable_peer_id', models.PositiveIntegerField(blank=True, null=True)), ('mark_connected', models.BooleanField(default=False)), ('type', models.CharField(max_length=50)), - ('rear_port_position', models.PositiveSmallIntegerField(default=1, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(1024)])), + ( + 'rear_port_position', + models.PositiveSmallIntegerField( + default=1, + validators=[ + django.core.validators.MinValueValidator(1), + django.core.validators.MaxValueValidator(1024), + ], + ), + ), ], options={ 'ordering': ('device', '_name'), @@ -247,11 +309,25 @@ class Migration(migrations.Migration): ('last_updated', models.DateTimeField(auto_now=True, null=True)), ('id', models.BigAutoField(primary_key=True, serialize=False)), ('name', models.CharField(max_length=64)), - ('_name', utilities.fields.NaturalOrderingField('name', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize)), + ( + '_name', + utilities.fields.NaturalOrderingField( + 'name', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize + ), + ), ('label', models.CharField(blank=True, max_length=64)), ('description', models.CharField(blank=True, max_length=200)), ('type', models.CharField(max_length=50)), - ('rear_port_position', models.PositiveSmallIntegerField(default=1, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(1024)])), + ( + 'rear_port_position', + models.PositiveSmallIntegerField( + default=1, + validators=[ + django.core.validators.MinValueValidator(1), + django.core.validators.MaxValueValidator(1024), + ], + ), + ), ], options={ 'ordering': ('device_type', '_name'), @@ -271,9 +347,24 @@ class Migration(migrations.Migration): ('mark_connected', models.BooleanField(default=False)), ('enabled', models.BooleanField(default=True)), ('mac_address', dcim.fields.MACAddressField(blank=True, null=True)), - ('mtu', models.PositiveIntegerField(blank=True, null=True, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(65536)])), + ( + 'mtu', + models.PositiveIntegerField( + blank=True, + null=True, + validators=[ + django.core.validators.MinValueValidator(1), + django.core.validators.MaxValueValidator(65536), + ], + ), + ), ('mode', models.CharField(blank=True, max_length=50)), - ('_name', utilities.fields.NaturalOrderingField('name', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize_interface)), + ( + '_name', + utilities.fields.NaturalOrderingField( + 'name', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize_interface + ), + ), ('type', models.CharField(max_length=50)), ('mgmt_only', models.BooleanField(default=False)), ], @@ -290,7 +381,12 @@ class Migration(migrations.Migration): ('name', models.CharField(max_length=64)), ('label', models.CharField(blank=True, max_length=64)), ('description', models.CharField(blank=True, max_length=200)), - ('_name', utilities.fields.NaturalOrderingField('name', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize_interface)), + ( + '_name', + utilities.fields.NaturalOrderingField( + 'name', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize_interface + ), + ), ('type', models.CharField(max_length=50)), ('mgmt_only', models.BooleanField(default=False)), ], @@ -306,7 +402,12 @@ class Migration(migrations.Migration): ('custom_field_data', models.JSONField(blank=True, default=dict, encoder=CustomFieldJSONEncoder)), ('id', models.BigAutoField(primary_key=True, serialize=False)), ('name', models.CharField(max_length=64)), - ('_name', utilities.fields.NaturalOrderingField('name', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize)), + ( + '_name', + utilities.fields.NaturalOrderingField( + 'name', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize + ), + ), ('label', models.CharField(blank=True, max_length=64)), ('description', models.CharField(blank=True, max_length=200)), ('part_id', models.CharField(blank=True, max_length=50)), @@ -388,8 +489,19 @@ class Migration(migrations.Migration): ('supply', models.CharField(default='ac', max_length=50)), ('phase', models.CharField(default='single-phase', max_length=50)), ('voltage', models.SmallIntegerField(validators=[utilities.validators.ExclusionValidator([0])])), - ('amperage', models.PositiveSmallIntegerField(validators=[django.core.validators.MinValueValidator(1)])), - ('max_utilization', models.PositiveSmallIntegerField(validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(100)])), + ( + 'amperage', + models.PositiveSmallIntegerField(validators=[django.core.validators.MinValueValidator(1)]), + ), + ( + 'max_utilization', + models.PositiveSmallIntegerField( + validators=[ + django.core.validators.MinValueValidator(1), + django.core.validators.MaxValueValidator(100), + ] + ), + ), ('available_power', models.PositiveIntegerField(default=0, editable=False)), ('comments', models.TextField(blank=True)), ], @@ -405,7 +517,12 @@ class Migration(migrations.Migration): ('custom_field_data', models.JSONField(blank=True, default=dict, encoder=CustomFieldJSONEncoder)), ('id', models.BigAutoField(primary_key=True, serialize=False)), ('name', models.CharField(max_length=64)), - ('_name', utilities.fields.NaturalOrderingField('name', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize)), + ( + '_name', + utilities.fields.NaturalOrderingField( + 'name', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize + ), + ), ('label', models.CharField(blank=True, max_length=64)), ('description', models.CharField(blank=True, max_length=200)), ('_cable_peer_id', models.PositiveIntegerField(blank=True, null=True)), @@ -424,7 +541,12 @@ class Migration(migrations.Migration): ('last_updated', models.DateTimeField(auto_now=True, null=True)), ('id', models.BigAutoField(primary_key=True, serialize=False)), ('name', models.CharField(max_length=64)), - ('_name', utilities.fields.NaturalOrderingField('name', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize)), + ( + '_name', + utilities.fields.NaturalOrderingField( + 'name', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize + ), + ), ('label', models.CharField(blank=True, max_length=64)), ('description', models.CharField(blank=True, max_length=200)), ('type', models.CharField(blank=True, max_length=50)), @@ -455,14 +577,29 @@ class Migration(migrations.Migration): ('custom_field_data', models.JSONField(blank=True, default=dict, encoder=CustomFieldJSONEncoder)), ('id', models.BigAutoField(primary_key=True, serialize=False)), ('name', models.CharField(max_length=64)), - ('_name', utilities.fields.NaturalOrderingField('name', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize)), + ( + '_name', + utilities.fields.NaturalOrderingField( + 'name', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize + ), + ), ('label', models.CharField(blank=True, max_length=64)), ('description', models.CharField(blank=True, max_length=200)), ('_cable_peer_id', models.PositiveIntegerField(blank=True, null=True)), ('mark_connected', models.BooleanField(default=False)), ('type', models.CharField(blank=True, max_length=50)), - ('maximum_draw', models.PositiveSmallIntegerField(blank=True, null=True, validators=[django.core.validators.MinValueValidator(1)])), - ('allocated_draw', models.PositiveSmallIntegerField(blank=True, null=True, validators=[django.core.validators.MinValueValidator(1)])), + ( + 'maximum_draw', + models.PositiveSmallIntegerField( + blank=True, null=True, validators=[django.core.validators.MinValueValidator(1)] + ), + ), + ( + 'allocated_draw', + models.PositiveSmallIntegerField( + blank=True, null=True, validators=[django.core.validators.MinValueValidator(1)] + ), + ), ], options={ 'ordering': ('device', '_name'), @@ -475,12 +612,27 @@ class Migration(migrations.Migration): ('last_updated', models.DateTimeField(auto_now=True, null=True)), ('id', models.BigAutoField(primary_key=True, serialize=False)), ('name', models.CharField(max_length=64)), - ('_name', utilities.fields.NaturalOrderingField('name', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize)), + ( + '_name', + utilities.fields.NaturalOrderingField( + 'name', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize + ), + ), ('label', models.CharField(blank=True, max_length=64)), ('description', models.CharField(blank=True, max_length=200)), ('type', models.CharField(blank=True, max_length=50)), - ('maximum_draw', models.PositiveSmallIntegerField(blank=True, null=True, validators=[django.core.validators.MinValueValidator(1)])), - ('allocated_draw', models.PositiveSmallIntegerField(blank=True, null=True, validators=[django.core.validators.MinValueValidator(1)])), + ( + 'maximum_draw', + models.PositiveSmallIntegerField( + blank=True, null=True, validators=[django.core.validators.MinValueValidator(1)] + ), + ), + ( + 'allocated_draw', + models.PositiveSmallIntegerField( + blank=True, null=True, validators=[django.core.validators.MinValueValidator(1)] + ), + ), ], options={ 'ordering': ('device_type', '_name'), @@ -494,14 +646,28 @@ class Migration(migrations.Migration): ('custom_field_data', models.JSONField(blank=True, default=dict, encoder=CustomFieldJSONEncoder)), ('id', models.BigAutoField(primary_key=True, serialize=False)), ('name', models.CharField(max_length=100)), - ('_name', utilities.fields.NaturalOrderingField('name', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize)), + ( + '_name', + utilities.fields.NaturalOrderingField( + 'name', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize + ), + ), ('facility_id', models.CharField(blank=True, max_length=50, null=True)), ('status', models.CharField(default='active', max_length=50)), ('serial', models.CharField(blank=True, max_length=50)), ('asset_tag', models.CharField(blank=True, max_length=50, null=True, unique=True)), ('type', models.CharField(blank=True, max_length=50)), ('width', models.PositiveSmallIntegerField(default=19)), - ('u_height', models.PositiveSmallIntegerField(default=42, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(100)])), + ( + 'u_height', + models.PositiveSmallIntegerField( + default=42, + validators=[ + django.core.validators.MinValueValidator(1), + django.core.validators.MaxValueValidator(100), + ], + ), + ), ('desc_units', models.BooleanField(default=False)), ('outer_width', models.PositiveSmallIntegerField(blank=True, null=True)), ('outer_depth', models.PositiveSmallIntegerField(blank=True, null=True)), @@ -519,7 +685,10 @@ class Migration(migrations.Migration): ('last_updated', models.DateTimeField(auto_now=True, null=True)), ('custom_field_data', models.JSONField(blank=True, default=dict, encoder=CustomFieldJSONEncoder)), ('id', models.BigAutoField(primary_key=True, serialize=False)), - ('units', django.contrib.postgres.fields.ArrayField(base_field=models.PositiveSmallIntegerField(), size=None)), + ( + 'units', + django.contrib.postgres.fields.ArrayField(base_field=models.PositiveSmallIntegerField(), size=None), + ), ('description', models.CharField(max_length=200)), ], options={ @@ -550,13 +719,27 @@ class Migration(migrations.Migration): ('custom_field_data', models.JSONField(blank=True, default=dict, encoder=CustomFieldJSONEncoder)), ('id', models.BigAutoField(primary_key=True, serialize=False)), ('name', models.CharField(max_length=64)), - ('_name', utilities.fields.NaturalOrderingField('name', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize)), + ( + '_name', + utilities.fields.NaturalOrderingField( + 'name', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize + ), + ), ('label', models.CharField(blank=True, max_length=64)), ('description', models.CharField(blank=True, max_length=200)), ('_cable_peer_id', models.PositiveIntegerField(blank=True, null=True)), ('mark_connected', models.BooleanField(default=False)), ('type', models.CharField(max_length=50)), - ('positions', models.PositiveSmallIntegerField(default=1, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(1024)])), + ( + 'positions', + models.PositiveSmallIntegerField( + default=1, + validators=[ + django.core.validators.MinValueValidator(1), + django.core.validators.MaxValueValidator(1024), + ], + ), + ), ], options={ 'ordering': ('device', '_name'), @@ -569,11 +752,25 @@ class Migration(migrations.Migration): ('last_updated', models.DateTimeField(auto_now=True, null=True)), ('id', models.BigAutoField(primary_key=True, serialize=False)), ('name', models.CharField(max_length=64)), - ('_name', utilities.fields.NaturalOrderingField('name', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize)), + ( + '_name', + utilities.fields.NaturalOrderingField( + 'name', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize + ), + ), ('label', models.CharField(blank=True, max_length=64)), ('description', models.CharField(blank=True, max_length=200)), ('type', models.CharField(max_length=50)), - ('positions', models.PositiveSmallIntegerField(default=1, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(1024)])), + ( + 'positions', + models.PositiveSmallIntegerField( + default=1, + validators=[ + django.core.validators.MinValueValidator(1), + django.core.validators.MaxValueValidator(1024), + ], + ), + ), ], options={ 'ordering': ('device_type', '_name'), @@ -606,7 +803,12 @@ class Migration(migrations.Migration): ('custom_field_data', models.JSONField(blank=True, default=dict, encoder=CustomFieldJSONEncoder)), ('id', models.BigAutoField(primary_key=True, serialize=False)), ('name', models.CharField(max_length=100, unique=True)), - ('_name', utilities.fields.NaturalOrderingField('name', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize)), + ( + '_name', + utilities.fields.NaturalOrderingField( + 'name', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize + ), + ), ('slug', models.SlugField(max_length=100, unique=True)), ('status', models.CharField(default='active', max_length=50)), ('facility', models.CharField(blank=True, max_length=50)), @@ -654,7 +856,16 @@ class Migration(migrations.Migration): ('id', models.BigAutoField(primary_key=True, serialize=False)), ('name', models.CharField(max_length=64)), ('domain', models.CharField(blank=True, max_length=30)), - ('master', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='vc_master_for', to='dcim.device')), + ( + 'master', + models.OneToOneField( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='vc_master_for', + to='dcim.device', + ), + ), ], options={ 'verbose_name_plural': 'virtual chassis', diff --git a/netbox/dcim/migrations/0002_squashed.py b/netbox/dcim/migrations/0002_squashed.py index 786167680..2e830560f 100644 --- a/netbox/dcim/migrations/0002_squashed.py +++ b/netbox/dcim/migrations/0002_squashed.py @@ -6,7 +6,6 @@ import taggit.managers class Migration(migrations.Migration): - dependencies = [ ('dcim', '0001_initial'), migrations.swappable_dependency(settings.AUTH_USER_MODEL), @@ -28,17 +27,35 @@ class Migration(migrations.Migration): migrations.AddField( model_name='sitegroup', name='parent', - field=mptt.fields.TreeForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='children', to='dcim.sitegroup'), + field=mptt.fields.TreeForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name='children', + to='dcim.sitegroup', + ), ), migrations.AddField( model_name='site', name='group', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='sites', to='dcim.sitegroup'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='sites', + to='dcim.sitegroup', + ), ), migrations.AddField( model_name='site', name='region', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='sites', to='dcim.region'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='sites', + to='dcim.region', + ), ), migrations.AddField( model_name='site', @@ -48,32 +65,56 @@ class Migration(migrations.Migration): migrations.AddField( model_name='site', name='tenant', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='sites', to='tenancy.tenant'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='sites', + to='tenancy.tenant', + ), ), migrations.AddField( model_name='region', name='parent', - field=mptt.fields.TreeForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='children', to='dcim.region'), + field=mptt.fields.TreeForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name='children', + to='dcim.region', + ), ), migrations.AddField( model_name='rearporttemplate', name='device_type', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.devicetype'), + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.devicetype' + ), ), migrations.AddField( model_name='rearport', name='_cable_peer_type', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='contenttypes.contenttype'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='+', + to='contenttypes.contenttype', + ), ), migrations.AddField( model_name='rearport', name='cable', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.cable'), + field=models.ForeignKey( + blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.cable' + ), ), migrations.AddField( model_name='rearport', name='device', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.device'), + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.device' + ), ), migrations.AddField( model_name='rearport', @@ -83,7 +124,9 @@ class Migration(migrations.Migration): migrations.AddField( model_name='rackreservation', name='rack', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='reservations', to='dcim.rack'), + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, related_name='reservations', to='dcim.rack' + ), ), migrations.AddField( model_name='rackreservation', @@ -93,7 +136,13 @@ class Migration(migrations.Migration): migrations.AddField( model_name='rackreservation', name='tenant', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='rackreservations', to='tenancy.tenant'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='rackreservations', + to='tenancy.tenant', + ), ), migrations.AddField( model_name='rackreservation', @@ -103,12 +152,24 @@ class Migration(migrations.Migration): migrations.AddField( model_name='rack', name='location', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='racks', to='dcim.location'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='racks', + to='dcim.location', + ), ), migrations.AddField( model_name='rack', name='role', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='racks', to='dcim.rackrole'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='racks', + to='dcim.rackrole', + ), ), migrations.AddField( model_name='rack', @@ -123,32 +184,52 @@ class Migration(migrations.Migration): migrations.AddField( model_name='rack', name='tenant', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='racks', to='tenancy.tenant'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='racks', + to='tenancy.tenant', + ), ), migrations.AddField( model_name='powerporttemplate', name='device_type', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.devicetype'), + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.devicetype' + ), ), migrations.AddField( model_name='powerport', name='_cable_peer_type', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='contenttypes.contenttype'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='+', + to='contenttypes.contenttype', + ), ), migrations.AddField( model_name='powerport', name='_path', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='dcim.cablepath'), + field=models.ForeignKey( + blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='dcim.cablepath' + ), ), migrations.AddField( model_name='powerport', name='cable', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.cable'), + field=models.ForeignKey( + blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.cable' + ), ), migrations.AddField( model_name='powerport', name='device', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.device'), + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.device' + ), ), migrations.AddField( model_name='powerport', @@ -158,7 +239,9 @@ class Migration(migrations.Migration): migrations.AddField( model_name='powerpanel', name='location', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='dcim.location'), + field=models.ForeignKey( + blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='dcim.location' + ), ), migrations.AddField( model_name='powerpanel', @@ -173,37 +256,63 @@ class Migration(migrations.Migration): migrations.AddField( model_name='poweroutlettemplate', name='device_type', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.devicetype'), + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.devicetype' + ), ), migrations.AddField( model_name='poweroutlettemplate', name='power_port', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='poweroutlet_templates', to='dcim.powerporttemplate'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='poweroutlet_templates', + to='dcim.powerporttemplate', + ), ), migrations.AddField( model_name='poweroutlet', name='_cable_peer_type', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='contenttypes.contenttype'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='+', + to='contenttypes.contenttype', + ), ), migrations.AddField( model_name='poweroutlet', name='_path', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='dcim.cablepath'), + field=models.ForeignKey( + blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='dcim.cablepath' + ), ), migrations.AddField( model_name='poweroutlet', name='cable', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.cable'), + field=models.ForeignKey( + blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.cable' + ), ), migrations.AddField( model_name='poweroutlet', name='device', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.device'), + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.device' + ), ), migrations.AddField( model_name='poweroutlet', name='power_port', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='poweroutlets', to='dcim.powerport'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='poweroutlets', + to='dcim.powerport', + ), ), migrations.AddField( model_name='poweroutlet', @@ -213,27 +322,45 @@ class Migration(migrations.Migration): migrations.AddField( model_name='powerfeed', name='_cable_peer_type', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='contenttypes.contenttype'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='+', + to='contenttypes.contenttype', + ), ), migrations.AddField( model_name='powerfeed', name='_path', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='dcim.cablepath'), + field=models.ForeignKey( + blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='dcim.cablepath' + ), ), migrations.AddField( model_name='powerfeed', name='cable', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.cable'), + field=models.ForeignKey( + blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.cable' + ), ), migrations.AddField( model_name='powerfeed', name='power_panel', - field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='powerfeeds', to='dcim.powerpanel'), + field=models.ForeignKey( + on_delete=django.db.models.deletion.PROTECT, related_name='powerfeeds', to='dcim.powerpanel' + ), ), migrations.AddField( model_name='powerfeed', name='rack', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='powerfeeds', to='dcim.rack'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='powerfeeds', + to='dcim.rack', + ), ), migrations.AddField( model_name='powerfeed', @@ -243,32 +370,60 @@ class Migration(migrations.Migration): migrations.AddField( model_name='platform', name='manufacturer', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='platforms', to='dcim.manufacturer'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='platforms', + to='dcim.manufacturer', + ), ), migrations.AddField( model_name='location', name='parent', - field=mptt.fields.TreeForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='children', to='dcim.location'), + field=mptt.fields.TreeForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name='children', + to='dcim.location', + ), ), migrations.AddField( model_name='location', name='site', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='locations', to='dcim.site'), + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, related_name='locations', to='dcim.site' + ), ), migrations.AddField( model_name='inventoryitem', name='device', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.device'), + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.device' + ), ), migrations.AddField( model_name='inventoryitem', name='manufacturer', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='inventory_items', to='dcim.manufacturer'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='inventory_items', + to='dcim.manufacturer', + ), ), migrations.AddField( model_name='inventoryitem', name='parent', - field=mptt.fields.TreeForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='child_items', to='dcim.inventoryitem'), + field=mptt.fields.TreeForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name='child_items', + to='dcim.inventoryitem', + ), ), migrations.AddField( model_name='inventoryitem', @@ -278,36 +433,62 @@ class Migration(migrations.Migration): migrations.AddField( model_name='interfacetemplate', name='device_type', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.devicetype'), + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.devicetype' + ), ), migrations.AddField( model_name='interface', name='_cable_peer_type', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='contenttypes.contenttype'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='+', + to='contenttypes.contenttype', + ), ), migrations.AddField( model_name='interface', name='_path', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='dcim.cablepath'), + field=models.ForeignKey( + blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='dcim.cablepath' + ), ), migrations.AddField( model_name='interface', name='cable', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.cable'), + field=models.ForeignKey( + blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.cable' + ), ), migrations.AddField( model_name='interface', name='device', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.device'), + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.device' + ), ), migrations.AddField( model_name='interface', name='lag', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='member_interfaces', to='dcim.interface'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='member_interfaces', + to='dcim.interface', + ), ), migrations.AddField( model_name='interface', name='parent', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='child_interfaces', to='dcim.interface'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='child_interfaces', + to='dcim.interface', + ), ), ] diff --git a/netbox/dcim/migrations/0003_squashed_0130.py b/netbox/dcim/migrations/0003_squashed_0130.py index 592aaf9a8..0248d9ba1 100644 --- a/netbox/dcim/migrations/0003_squashed_0130.py +++ b/netbox/dcim/migrations/0003_squashed_0130.py @@ -4,7 +4,6 @@ import taggit.managers class Migration(migrations.Migration): - dependencies = [ ('dcim', '0002_auto_20160622_1821'), ('virtualization', '0001_virtualization'), @@ -160,37 +159,61 @@ class Migration(migrations.Migration): migrations.AddField( model_name='interface', name='untagged_vlan', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='interfaces_as_untagged', to='ipam.vlan'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='interfaces_as_untagged', + to='ipam.vlan', + ), ), migrations.AddField( model_name='frontporttemplate', name='device_type', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.devicetype'), + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.devicetype' + ), ), migrations.AddField( model_name='frontporttemplate', name='rear_port', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='frontport_templates', to='dcim.rearporttemplate'), + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name='frontport_templates', + to='dcim.rearporttemplate', + ), ), migrations.AddField( model_name='frontport', name='_cable_peer_type', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='contenttypes.contenttype'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='+', + to='contenttypes.contenttype', + ), ), migrations.AddField( model_name='frontport', name='cable', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.cable'), + field=models.ForeignKey( + blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.cable' + ), ), migrations.AddField( model_name='frontport', name='device', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.device'), + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.device' + ), ), migrations.AddField( model_name='frontport', name='rear_port', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='frontports', to='dcim.rearport'), + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, related_name='frontports', to='dcim.rearport' + ), ), migrations.AddField( model_name='frontport', @@ -200,7 +223,9 @@ class Migration(migrations.Migration): migrations.AddField( model_name='devicetype', name='manufacturer', - field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='device_types', to='dcim.manufacturer'), + field=models.ForeignKey( + on_delete=django.db.models.deletion.PROTECT, related_name='device_types', to='dcim.manufacturer' + ), ), migrations.AddField( model_name='devicetype', @@ -210,17 +235,27 @@ class Migration(migrations.Migration): migrations.AddField( model_name='devicebaytemplate', name='device_type', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.devicetype'), + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.devicetype' + ), ), migrations.AddField( model_name='devicebay', name='device', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.device'), + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.device' + ), ), migrations.AddField( model_name='devicebay', name='installed_device', - field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='parent_bay', to='dcim.device'), + field=models.OneToOneField( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='parent_bay', + to='dcim.device', + ), ), migrations.AddField( model_name='devicebay', @@ -230,47 +265,89 @@ class Migration(migrations.Migration): migrations.AddField( model_name='device', name='cluster', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='devices', to='virtualization.cluster'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='devices', + to='virtualization.cluster', + ), ), migrations.AddField( model_name='device', name='device_role', - field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='devices', to='dcim.devicerole'), + field=models.ForeignKey( + on_delete=django.db.models.deletion.PROTECT, related_name='devices', to='dcim.devicerole' + ), ), migrations.AddField( model_name='device', name='device_type', - field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='instances', to='dcim.devicetype'), + field=models.ForeignKey( + on_delete=django.db.models.deletion.PROTECT, related_name='instances', to='dcim.devicetype' + ), ), migrations.AddField( model_name='device', name='location', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='devices', to='dcim.location'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='devices', + to='dcim.location', + ), ), migrations.AddField( model_name='device', name='platform', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='devices', to='dcim.platform'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='devices', + to='dcim.platform', + ), ), migrations.AddField( model_name='device', name='primary_ip4', - field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='primary_ip4_for', to='ipam.ipaddress'), + field=models.OneToOneField( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='primary_ip4_for', + to='ipam.ipaddress', + ), ), migrations.AddField( model_name='device', name='primary_ip6', - field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='primary_ip6_for', to='ipam.ipaddress'), + field=models.OneToOneField( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='primary_ip6_for', + to='ipam.ipaddress', + ), ), migrations.AddField( model_name='device', name='rack', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='devices', to='dcim.rack'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='devices', + to='dcim.rack', + ), ), migrations.AddField( model_name='device', name='site', - field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='devices', to='dcim.site'), + field=models.ForeignKey( + on_delete=django.db.models.deletion.PROTECT, related_name='devices', to='dcim.site' + ), ), migrations.AddField( model_name='device', @@ -280,37 +357,63 @@ class Migration(migrations.Migration): migrations.AddField( model_name='device', name='tenant', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='devices', to='tenancy.tenant'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='devices', + to='tenancy.tenant', + ), ), migrations.AddField( model_name='device', name='virtual_chassis', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='members', to='dcim.virtualchassis'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='members', + to='dcim.virtualchassis', + ), ), migrations.AddField( model_name='consoleserverporttemplate', name='device_type', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.devicetype'), + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.devicetype' + ), ), migrations.AddField( model_name='consoleserverport', name='_cable_peer_type', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='contenttypes.contenttype'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='+', + to='contenttypes.contenttype', + ), ), migrations.AddField( model_name='consoleserverport', name='_path', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='dcim.cablepath'), + field=models.ForeignKey( + blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='dcim.cablepath' + ), ), migrations.AddField( model_name='consoleserverport', name='cable', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.cable'), + field=models.ForeignKey( + blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.cable' + ), ), migrations.AddField( model_name='consoleserverport', name='device', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.device'), + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.device' + ), ), migrations.AddField( model_name='consoleserverport', @@ -320,27 +423,41 @@ class Migration(migrations.Migration): migrations.AddField( model_name='consoleporttemplate', name='device_type', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.devicetype'), + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.devicetype' + ), ), migrations.AddField( model_name='consoleport', name='_cable_peer_type', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='contenttypes.contenttype'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='+', + to='contenttypes.contenttype', + ), ), migrations.AddField( model_name='consoleport', name='_path', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='dcim.cablepath'), + field=models.ForeignKey( + blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='dcim.cablepath' + ), ), migrations.AddField( model_name='consoleport', name='cable', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.cable'), + field=models.ForeignKey( + blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.cable' + ), ), migrations.AddField( model_name='consoleport', name='device', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.device'), + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.device' + ), ), migrations.AddField( model_name='consoleport', @@ -350,22 +467,34 @@ class Migration(migrations.Migration): migrations.AddField( model_name='cablepath', name='destination_type', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to='contenttypes.contenttype'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name='+', + to='contenttypes.contenttype', + ), ), migrations.AddField( model_name='cablepath', name='origin_type', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to='contenttypes.contenttype'), + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, related_name='+', to='contenttypes.contenttype' + ), ), migrations.AddField( model_name='cable', name='_termination_a_device', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to='dcim.device'), + field=models.ForeignKey( + blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to='dcim.device' + ), ), migrations.AddField( model_name='cable', name='_termination_b_device', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to='dcim.device'), + field=models.ForeignKey( + blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to='dcim.device' + ), ), migrations.AddField( model_name='cable', @@ -375,12 +504,64 @@ class Migration(migrations.Migration): migrations.AddField( model_name='cable', name='termination_a_type', - field=models.ForeignKey(limit_choices_to=models.Q(models.Q(models.Q(('app_label', 'circuits'), ('model__in', ('circuittermination',))), models.Q(('app_label', 'dcim'), ('model__in', ('consoleport', 'consoleserverport', 'frontport', 'interface', 'powerfeed', 'poweroutlet', 'powerport', 'rearport'))), _connector='OR')), on_delete=django.db.models.deletion.PROTECT, related_name='+', to='contenttypes.contenttype'), + field=models.ForeignKey( + limit_choices_to=models.Q( + models.Q( + models.Q(('app_label', 'circuits'), ('model__in', ('circuittermination',))), + models.Q( + ('app_label', 'dcim'), + ( + 'model__in', + ( + 'consoleport', + 'consoleserverport', + 'frontport', + 'interface', + 'powerfeed', + 'poweroutlet', + 'powerport', + 'rearport', + ), + ), + ), + _connector='OR', + ) + ), + on_delete=django.db.models.deletion.PROTECT, + related_name='+', + to='contenttypes.contenttype', + ), ), migrations.AddField( model_name='cable', name='termination_b_type', - field=models.ForeignKey(limit_choices_to=models.Q(models.Q(models.Q(('app_label', 'circuits'), ('model__in', ('circuittermination',))), models.Q(('app_label', 'dcim'), ('model__in', ('consoleport', 'consoleserverport', 'frontport', 'interface', 'powerfeed', 'poweroutlet', 'powerport', 'rearport'))), _connector='OR')), on_delete=django.db.models.deletion.PROTECT, related_name='+', to='contenttypes.contenttype'), + field=models.ForeignKey( + limit_choices_to=models.Q( + models.Q( + models.Q(('app_label', 'circuits'), ('model__in', ('circuittermination',))), + models.Q( + ('app_label', 'dcim'), + ( + 'model__in', + ( + 'consoleport', + 'consoleserverport', + 'frontport', + 'interface', + 'powerfeed', + 'poweroutlet', + 'powerport', + 'rearport', + ), + ), + ), + _connector='OR', + ) + ), + on_delete=django.db.models.deletion.PROTECT, + related_name='+', + to='contenttypes.contenttype', + ), ), migrations.AlterUniqueTogether( name='rearporttemplate', @@ -456,7 +637,11 @@ class Migration(migrations.Migration): ), migrations.AlterUniqueTogether( name='device', - unique_together={('rack', 'position', 'face'), ('virtual_chassis', 'vc_position'), ('site', 'tenant', 'name')}, + unique_together={ + ('rack', 'position', 'face'), + ('virtual_chassis', 'vc_position'), + ('site', 'tenant', 'name'), + }, ), migrations.AlterUniqueTogether( name='consoleserverporttemplate', diff --git a/netbox/dcim/migrations/0131_squashed_0159.py b/netbox/dcim/migrations/0131_squashed_0159.py index f7e7cfdb2..3866e8cc8 100644 --- a/netbox/dcim/migrations/0131_squashed_0159.py +++ b/netbox/dcim/migrations/0131_squashed_0159.py @@ -10,7 +10,6 @@ import utilities.ordering class Migration(migrations.Migration): - replaces = [ ('dcim', '0131_consoleport_speed'), ('dcim', '0132_cable_length'), @@ -40,7 +39,7 @@ class Migration(migrations.Migration): ('dcim', '0156_location_status'), ('dcim', '0157_new_cabling_models'), ('dcim', '0158_populate_cable_terminations'), - ('dcim', '0159_populate_cable_paths') + ('dcim', '0159_populate_cable_paths'), ] dependencies = [ @@ -96,17 +95,35 @@ class Migration(migrations.Migration): migrations.AddField( model_name='interface', name='bridge', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='bridge_interfaces', to='dcim.interface'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='bridge_interfaces', + to='dcim.interface', + ), ), migrations.AddField( model_name='location', name='tenant', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='locations', to='tenancy.tenant'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='locations', + to='tenancy.tenant', + ), ), migrations.AddField( model_name='cable', name='tenant', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='cables', to='tenancy.tenant'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='cables', + to='tenancy.tenant', + ), ), migrations.AddField( model_name='devicetype', @@ -148,7 +165,9 @@ class Migration(migrations.Migration): ), migrations.AddConstraint( model_name='location', - constraint=models.UniqueConstraint(condition=models.Q(('parent', None)), fields=('site', 'name'), name='dcim_location_name'), + constraint=models.UniqueConstraint( + condition=models.Q(('parent', None)), fields=('site', 'name'), name='dcim_location_name' + ), ), migrations.AddConstraint( model_name='location', @@ -156,7 +175,9 @@ class Migration(migrations.Migration): ), migrations.AddConstraint( model_name='location', - constraint=models.UniqueConstraint(condition=models.Q(('parent', None)), fields=('site', 'slug'), name='dcim_location_slug'), + constraint=models.UniqueConstraint( + condition=models.Q(('parent', None)), fields=('site', 'slug'), name='dcim_location_slug' + ), ), migrations.AddConstraint( model_name='region', @@ -164,7 +185,9 @@ class Migration(migrations.Migration): ), migrations.AddConstraint( model_name='region', - constraint=models.UniqueConstraint(condition=models.Q(('parent', None)), fields=('name',), name='dcim_region_name'), + constraint=models.UniqueConstraint( + condition=models.Q(('parent', None)), fields=('name',), name='dcim_region_name' + ), ), migrations.AddConstraint( model_name='region', @@ -172,7 +195,9 @@ class Migration(migrations.Migration): ), migrations.AddConstraint( model_name='region', - constraint=models.UniqueConstraint(condition=models.Q(('parent', None)), fields=('slug',), name='dcim_region_slug'), + constraint=models.UniqueConstraint( + condition=models.Q(('parent', None)), fields=('slug',), name='dcim_region_slug' + ), ), migrations.AddConstraint( model_name='sitegroup', @@ -180,7 +205,9 @@ class Migration(migrations.Migration): ), migrations.AddConstraint( model_name='sitegroup', - constraint=models.UniqueConstraint(condition=models.Q(('parent', None)), fields=('name',), name='dcim_sitegroup_name'), + constraint=models.UniqueConstraint( + condition=models.Q(('parent', None)), fields=('name',), name='dcim_sitegroup_name' + ), ), migrations.AddConstraint( model_name='sitegroup', @@ -188,7 +215,9 @@ class Migration(migrations.Migration): ), migrations.AddConstraint( model_name='sitegroup', - constraint=models.UniqueConstraint(condition=models.Q(('parent', None)), fields=('slug',), name='dcim_sitegroup_slug'), + constraint=models.UniqueConstraint( + condition=models.Q(('parent', None)), fields=('slug',), name='dcim_sitegroup_slug' + ), ), migrations.AddField( model_name='devicerole', @@ -328,7 +357,9 @@ class Migration(migrations.Migration): migrations.AddField( model_name='interface', name='tx_power', - field=models.PositiveSmallIntegerField(blank=True, null=True, validators=[django.core.validators.MaxValueValidator(127)]), + field=models.PositiveSmallIntegerField( + blank=True, null=True, validators=[django.core.validators.MaxValueValidator(127)] + ), ), migrations.AddField( model_name='interface', @@ -338,7 +369,13 @@ class Migration(migrations.Migration): migrations.AddField( model_name='interface', name='wireless_link', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='wireless.wirelesslink'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='+', + to='wireless.wirelesslink', + ), ), migrations.AddField( model_name='site', @@ -348,12 +385,24 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='device', name='primary_ip4', - field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='ipam.ipaddress'), + field=models.OneToOneField( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='+', + to='ipam.ipaddress', + ), ), migrations.AlterField( model_name='device', name='primary_ip6', - field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='ipam.ipaddress'), + field=models.OneToOneField( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='+', + to='ipam.ipaddress', + ), ), migrations.RemoveField( model_name='site', @@ -372,7 +421,23 @@ class Migration(migrations.Migration): name='contact_phone', ), migrations.RunSQL( - sql="\n DO $$\n DECLARE\n idx record;\n BEGIN\n FOR idx IN\n SELECT indexname AS old_name,\n replace(indexname, 'module', 'inventoryitem') AS new_name\n FROM pg_indexes\n WHERE schemaname = 'public' AND\n tablename = 'dcim_inventoryitem' AND\n indexname LIKE 'dcim_module_%'\n LOOP\n EXECUTE format(\n 'ALTER INDEX %I RENAME TO %I;',\n idx.old_name,\n idx.new_name\n );\n END LOOP;\n END$$;\n ", + sql="""DO $$ + DECLARE idx record; + BEGIN + FOR idx IN + SELECT indexname AS old_name, replace(indexname, 'module', 'inventoryitem') AS new_name + FROM pg_indexes + WHERE schemaname = 'public' AND + tablename = 'dcim_inventoryitem' AND + indexname LIKE 'dcim_module_%' + LOOP + EXECUTE format( + 'ALTER INDEX %I RENAME TO %I;', + idx.old_name, + idx.new_name + ); + END LOOP; + END$$;""", ), migrations.AlterModelOptions( name='consoleporttemplate', @@ -405,49 +470,99 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='consoleporttemplate', name='device_type', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.devicetype'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name='%(class)ss', + to='dcim.devicetype', + ), ), migrations.AlterField( model_name='consoleserverporttemplate', name='device_type', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.devicetype'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name='%(class)ss', + to='dcim.devicetype', + ), ), migrations.AlterField( model_name='frontporttemplate', name='device_type', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.devicetype'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name='%(class)ss', + to='dcim.devicetype', + ), ), migrations.AlterField( model_name='interfacetemplate', name='device_type', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.devicetype'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name='%(class)ss', + to='dcim.devicetype', + ), ), migrations.AlterField( model_name='poweroutlettemplate', name='device_type', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.devicetype'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name='%(class)ss', + to='dcim.devicetype', + ), ), migrations.AlterField( model_name='powerporttemplate', name='device_type', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.devicetype'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name='%(class)ss', + to='dcim.devicetype', + ), ), migrations.AlterField( model_name='rearporttemplate', name='device_type', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.devicetype'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name='%(class)ss', + to='dcim.devicetype', + ), ), migrations.CreateModel( name='ModuleType', fields=[ ('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)), + ( + 'custom_field_data', + models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder), + ), ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), ('model', models.CharField(max_length=100)), ('part_number', models.CharField(blank=True, max_length=50)), ('comments', models.TextField(blank=True)), - ('manufacturer', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='module_types', to='dcim.manufacturer')), + ( + 'manufacturer', + models.ForeignKey( + on_delete=django.db.models.deletion.PROTECT, related_name='module_types', to='dcim.manufacturer' + ), + ), ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), ], options={ @@ -460,14 +575,27 @@ class Migration(migrations.Migration): fields=[ ('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)), + ( + 'custom_field_data', + models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder), + ), ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), ('name', models.CharField(max_length=64)), - ('_name', utilities.fields.NaturalOrderingField('name', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize)), + ( + '_name', + utilities.fields.NaturalOrderingField( + 'name', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize + ), + ), ('label', models.CharField(blank=True, max_length=64)), ('position', models.CharField(blank=True, max_length=30)), ('description', models.CharField(blank=True, max_length=200)), - ('device', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.device')), + ( + 'device', + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.device' + ), + ), ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), ], options={ @@ -480,15 +608,35 @@ class Migration(migrations.Migration): fields=[ ('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)), + ( + 'custom_field_data', + models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder), + ), ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), ('local_context_data', models.JSONField(blank=True, null=True)), ('serial', models.CharField(blank=True, max_length=50)), ('asset_tag', models.CharField(blank=True, max_length=50, null=True, unique=True)), ('comments', models.TextField(blank=True)), - ('device', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='modules', to='dcim.device')), - ('module_bay', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='installed_module', to='dcim.modulebay')), - ('module_type', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='instances', to='dcim.moduletype')), + ( + 'device', + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, related_name='modules', to='dcim.device' + ), + ), + ( + 'module_bay', + models.OneToOneField( + on_delete=django.db.models.deletion.CASCADE, + related_name='installed_module', + to='dcim.modulebay', + ), + ), + ( + 'module_type', + models.ForeignKey( + on_delete=django.db.models.deletion.PROTECT, related_name='instances', to='dcim.moduletype' + ), + ), ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), ], options={ @@ -498,72 +646,156 @@ class Migration(migrations.Migration): migrations.AddField( model_name='consoleport', name='module', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.module'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name='%(class)ss', + to='dcim.module', + ), ), migrations.AddField( model_name='consoleporttemplate', name='module_type', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.moduletype'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name='%(class)ss', + to='dcim.moduletype', + ), ), migrations.AddField( model_name='consoleserverport', name='module', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.module'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name='%(class)ss', + to='dcim.module', + ), ), migrations.AddField( model_name='consoleserverporttemplate', name='module_type', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.moduletype'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name='%(class)ss', + to='dcim.moduletype', + ), ), migrations.AddField( model_name='frontport', name='module', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.module'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name='%(class)ss', + to='dcim.module', + ), ), migrations.AddField( model_name='frontporttemplate', name='module_type', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.moduletype'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name='%(class)ss', + to='dcim.moduletype', + ), ), migrations.AddField( model_name='interface', name='module', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.module'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name='%(class)ss', + to='dcim.module', + ), ), migrations.AddField( model_name='interfacetemplate', name='module_type', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.moduletype'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name='%(class)ss', + to='dcim.moduletype', + ), ), migrations.AddField( model_name='poweroutlet', name='module', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.module'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name='%(class)ss', + to='dcim.module', + ), ), migrations.AddField( model_name='poweroutlettemplate', name='module_type', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.moduletype'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name='%(class)ss', + to='dcim.moduletype', + ), ), migrations.AddField( model_name='powerport', name='module', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.module'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name='%(class)ss', + to='dcim.module', + ), ), migrations.AddField( model_name='powerporttemplate', name='module_type', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.moduletype'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name='%(class)ss', + to='dcim.moduletype', + ), ), migrations.AddField( model_name='rearport', name='module', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.module'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name='%(class)ss', + to='dcim.module', + ), ), migrations.AddField( model_name='rearporttemplate', name='module_type', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.moduletype'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name='%(class)ss', + to='dcim.moduletype', + ), ), migrations.AlterUniqueTogether( name='consoleporttemplate', @@ -598,7 +830,10 @@ class Migration(migrations.Migration): fields=[ ('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)), + ( + 'custom_field_data', + models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder), + ), ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), ('name', models.CharField(max_length=100, unique=True)), ('slug', models.SlugField(max_length=100, unique=True)), @@ -613,7 +848,13 @@ class Migration(migrations.Migration): migrations.AddField( model_name='inventoryitem', name='role', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='inventory_items', to='dcim.inventoryitemrole'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='inventory_items', + to='dcim.inventoryitemrole', + ), ), migrations.AddField( model_name='inventoryitem', @@ -623,12 +864,39 @@ class Migration(migrations.Migration): migrations.AddField( model_name='inventoryitem', name='component_type', - field=models.ForeignKey(blank=True, limit_choices_to=models.Q(('app_label', 'dcim'), ('model__in', ('consoleport', 'consoleserverport', 'frontport', 'interface', 'poweroutlet', 'powerport', 'rearport'))), null=True, on_delete=django.db.models.deletion.PROTECT, related_name='+', to='contenttypes.contenttype'), + field=models.ForeignKey( + blank=True, + limit_choices_to=models.Q( + ('app_label', 'dcim'), + ( + 'model__in', + ( + 'consoleport', + 'consoleserverport', + 'frontport', + 'interface', + 'poweroutlet', + 'powerport', + 'rearport', + ), + ), + ), + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='+', + to='contenttypes.contenttype', + ), ), migrations.AddField( model_name='interface', name='vrf', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='interfaces', to='ipam.vrf'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='interfaces', + to='ipam.vrf', + ), ), migrations.AddField( model_name='interface', @@ -952,7 +1220,12 @@ class Migration(migrations.Migration): ('last_updated', models.DateTimeField(auto_now=True, null=True)), ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), ('name', models.CharField(max_length=64)), - ('_name', utilities.fields.NaturalOrderingField('name', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize)), + ( + '_name', + utilities.fields.NaturalOrderingField( + 'name', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize + ), + ), ('label', models.CharField(blank=True, max_length=64)), ('description', models.CharField(blank=True, max_length=200)), ('component_id', models.PositiveBigIntegerField(blank=True, null=True)), @@ -961,11 +1234,67 @@ class Migration(migrations.Migration): ('rght', models.PositiveIntegerField(editable=False)), ('tree_id', models.PositiveIntegerField(db_index=True, editable=False)), ('level', models.PositiveIntegerField(editable=False)), - ('component_type', models.ForeignKey(blank=True, limit_choices_to=models.Q(('app_label', 'dcim'), ('model__in', ('consoleporttemplate', 'consoleserverporttemplate', 'frontporttemplate', 'interfacetemplate', 'poweroutlettemplate', 'powerporttemplate', 'rearporttemplate'))), null=True, on_delete=django.db.models.deletion.PROTECT, related_name='+', to='contenttypes.contenttype')), - ('device_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.devicetype')), - ('manufacturer', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='inventory_item_templates', to='dcim.manufacturer')), - ('parent', mptt.fields.TreeForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='child_items', to='dcim.inventoryitemtemplate')), - ('role', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='inventory_item_templates', to='dcim.inventoryitemrole')), + ( + 'component_type', + models.ForeignKey( + blank=True, + limit_choices_to=models.Q( + ('app_label', 'dcim'), + ( + 'model__in', + ( + 'consoleporttemplate', + 'consoleserverporttemplate', + 'frontporttemplate', + 'interfacetemplate', + 'poweroutlettemplate', + 'powerporttemplate', + 'rearporttemplate', + ), + ), + ), + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='+', + to='contenttypes.contenttype', + ), + ), + ( + 'device_type', + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.devicetype' + ), + ), + ( + 'manufacturer', + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='inventory_item_templates', + to='dcim.manufacturer', + ), + ), + ( + 'parent', + mptt.fields.TreeForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name='child_items', + to='dcim.inventoryitemtemplate', + ), + ), + ( + 'role', + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='inventory_item_templates', + to='dcim.inventoryitemrole', + ), + ), ], options={ 'ordering': ('device_type__id', 'parent__id', '_name'), @@ -989,11 +1318,21 @@ class Migration(migrations.Migration): ('last_updated', models.DateTimeField(auto_now=True, null=True)), ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), ('name', models.CharField(max_length=64)), - ('_name', utilities.fields.NaturalOrderingField('name', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize)), + ( + '_name', + utilities.fields.NaturalOrderingField( + 'name', blank=True, max_length=100, naturalize_function=utilities.ordering.naturalize + ), + ), ('label', models.CharField(blank=True, max_length=64)), ('position', models.CharField(blank=True, max_length=30)), ('description', models.CharField(blank=True, max_length=200)), - ('device_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.devicetype')), + ( + 'device_type', + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.devicetype' + ), + ), ], options={ 'ordering': ('device_type', '_name'), @@ -1088,7 +1427,16 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='device', name='position', - field=models.DecimalField(blank=True, decimal_places=1, max_digits=4, null=True, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(100.5)]), + field=models.DecimalField( + blank=True, + decimal_places=1, + max_digits=4, + null=True, + validators=[ + django.core.validators.MinValueValidator(1), + django.core.validators.MaxValueValidator(100.5), + ], + ), ), migrations.AddField( model_name='interface', @@ -1121,12 +1469,66 @@ class Migration(migrations.Migration): ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), ('cable_end', models.CharField(max_length=1)), ('termination_id', models.PositiveBigIntegerField()), - ('cable', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='terminations', to='dcim.cable')), - ('termination_type', models.ForeignKey(limit_choices_to=models.Q(models.Q(models.Q(('app_label', 'circuits'), ('model__in', ('circuittermination',))), models.Q(('app_label', 'dcim'), ('model__in', ('consoleport', 'consoleserverport', 'frontport', 'interface', 'powerfeed', 'poweroutlet', 'powerport', 'rearport'))), _connector='OR')), on_delete=django.db.models.deletion.PROTECT, related_name='+', to='contenttypes.contenttype')), - ('_device', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='dcim.device')), - ('_rack', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='dcim.rack')), - ('_location', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='dcim.location')), - ('_site', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='dcim.site')), + ( + 'cable', + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, related_name='terminations', to='dcim.cable' + ), + ), + ( + 'termination_type', + models.ForeignKey( + limit_choices_to=models.Q( + models.Q( + models.Q(('app_label', 'circuits'), ('model__in', ('circuittermination',))), + models.Q( + ('app_label', 'dcim'), + ( + 'model__in', + ( + 'consoleport', + 'consoleserverport', + 'frontport', + 'interface', + 'powerfeed', + 'poweroutlet', + 'powerport', + 'rearport', + ), + ), + ), + _connector='OR', + ) + ), + on_delete=django.db.models.deletion.PROTECT, + related_name='+', + to='contenttypes.contenttype', + ), + ), + ( + '_device', + models.ForeignKey( + blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='dcim.device' + ), + ), + ( + '_rack', + models.ForeignKey( + blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='dcim.rack' + ), + ), + ( + '_location', + models.ForeignKey( + blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='dcim.location' + ), + ), + ( + '_site', + models.ForeignKey( + blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='dcim.site' + ), + ), ], options={ 'ordering': ('cable', 'cable_end', 'pk'), @@ -1134,7 +1536,9 @@ class Migration(migrations.Migration): ), migrations.AddConstraint( model_name='cabletermination', - constraint=models.UniqueConstraint(fields=('termination_type', 'termination_id'), name='dcim_cable_termination_unique_termination'), + constraint=models.UniqueConstraint( + fields=('termination_type', 'termination_id'), name='dcim_cable_termination_unique_termination' + ), ), migrations.RenameField( model_name='cablepath', diff --git a/netbox/dcim/migrations/0160_squashed_0166.py b/netbox/dcim/migrations/0160_squashed_0166.py index 440a8115e..0deb58bab 100644 --- a/netbox/dcim/migrations/0160_squashed_0166.py +++ b/netbox/dcim/migrations/0160_squashed_0166.py @@ -6,7 +6,6 @@ import utilities.json class Migration(migrations.Migration): - replaces = [ ('dcim', '0160_populate_cable_ends'), ('dcim', '0161_cabling_cleanup'), @@ -14,7 +13,7 @@ class Migration(migrations.Migration): ('dcim', '0163_weight_fields'), ('dcim', '0164_rack_mounting_depth'), ('dcim', '0165_standardize_description_comments'), - ('dcim', '0166_virtualdevicecontext') + ('dcim', '0166_virtualdevicecontext'), ] dependencies = [ @@ -275,7 +274,9 @@ class Migration(migrations.Migration): ), migrations.AddConstraint( model_name='cabletermination', - constraint=models.UniqueConstraint(fields=('termination_type', 'termination_id'), name='dcim_cabletermination_unique_termination'), + constraint=models.UniqueConstraint( + fields=('termination_type', 'termination_id'), name='dcim_cabletermination_unique_termination' + ), ), migrations.AddConstraint( model_name='consoleport', @@ -283,39 +284,64 @@ class Migration(migrations.Migration): ), migrations.AddConstraint( model_name='consoleporttemplate', - constraint=models.UniqueConstraint(fields=('device_type', 'name'), name='dcim_consoleporttemplate_unique_device_type_name'), + constraint=models.UniqueConstraint( + fields=('device_type', 'name'), name='dcim_consoleporttemplate_unique_device_type_name' + ), ), migrations.AddConstraint( model_name='consoleporttemplate', - constraint=models.UniqueConstraint(fields=('module_type', 'name'), name='dcim_consoleporttemplate_unique_module_type_name'), + constraint=models.UniqueConstraint( + fields=('module_type', 'name'), name='dcim_consoleporttemplate_unique_module_type_name' + ), ), migrations.AddConstraint( model_name='consoleserverport', - constraint=models.UniqueConstraint(fields=('device', 'name'), name='dcim_consoleserverport_unique_device_name'), + constraint=models.UniqueConstraint( + fields=('device', 'name'), name='dcim_consoleserverport_unique_device_name' + ), ), migrations.AddConstraint( model_name='consoleserverporttemplate', - constraint=models.UniqueConstraint(fields=('device_type', 'name'), name='dcim_consoleserverporttemplate_unique_device_type_name'), + constraint=models.UniqueConstraint( + fields=('device_type', 'name'), name='dcim_consoleserverporttemplate_unique_device_type_name' + ), ), migrations.AddConstraint( model_name='consoleserverporttemplate', - constraint=models.UniqueConstraint(fields=('module_type', 'name'), name='dcim_consoleserverporttemplate_unique_module_type_name'), + constraint=models.UniqueConstraint( + fields=('module_type', 'name'), name='dcim_consoleserverporttemplate_unique_module_type_name' + ), ), migrations.AddConstraint( model_name='device', - constraint=models.UniqueConstraint(django.db.models.functions.text.Lower('name'), models.F('site'), models.F('tenant'), name='dcim_device_unique_name_site_tenant'), + constraint=models.UniqueConstraint( + django.db.models.functions.text.Lower('name'), + models.F('site'), + models.F('tenant'), + name='dcim_device_unique_name_site_tenant', + ), ), migrations.AddConstraint( model_name='device', - constraint=models.UniqueConstraint(django.db.models.functions.text.Lower('name'), models.F('site'), condition=models.Q(('tenant__isnull', True)), name='dcim_device_unique_name_site', violation_error_message='Device name must be unique per site.'), + constraint=models.UniqueConstraint( + django.db.models.functions.text.Lower('name'), + models.F('site'), + condition=models.Q(('tenant__isnull', True)), + name='dcim_device_unique_name_site', + violation_error_message='Device name must be unique per site.', + ), ), migrations.AddConstraint( model_name='device', - constraint=models.UniqueConstraint(fields=('rack', 'position', 'face'), name='dcim_device_unique_rack_position_face'), + constraint=models.UniqueConstraint( + fields=('rack', 'position', 'face'), name='dcim_device_unique_rack_position_face' + ), ), migrations.AddConstraint( model_name='device', - constraint=models.UniqueConstraint(fields=('virtual_chassis', 'vc_position'), name='dcim_device_unique_virtual_chassis_vc_position'), + constraint=models.UniqueConstraint( + fields=('virtual_chassis', 'vc_position'), name='dcim_device_unique_virtual_chassis_vc_position' + ), ), migrations.AddConstraint( model_name='devicebay', @@ -323,15 +349,21 @@ class Migration(migrations.Migration): ), migrations.AddConstraint( model_name='devicebaytemplate', - constraint=models.UniqueConstraint(fields=('device_type', 'name'), name='dcim_devicebaytemplate_unique_device_type_name'), + constraint=models.UniqueConstraint( + fields=('device_type', 'name'), name='dcim_devicebaytemplate_unique_device_type_name' + ), ), migrations.AddConstraint( model_name='devicetype', - constraint=models.UniqueConstraint(fields=('manufacturer', 'model'), name='dcim_devicetype_unique_manufacturer_model'), + constraint=models.UniqueConstraint( + fields=('manufacturer', 'model'), name='dcim_devicetype_unique_manufacturer_model' + ), ), migrations.AddConstraint( model_name='devicetype', - constraint=models.UniqueConstraint(fields=('manufacturer', 'slug'), name='dcim_devicetype_unique_manufacturer_slug'), + constraint=models.UniqueConstraint( + fields=('manufacturer', 'slug'), name='dcim_devicetype_unique_manufacturer_slug' + ), ), migrations.AddConstraint( model_name='frontport', @@ -339,19 +371,27 @@ class Migration(migrations.Migration): ), migrations.AddConstraint( model_name='frontport', - constraint=models.UniqueConstraint(fields=('rear_port', 'rear_port_position'), name='dcim_frontport_unique_rear_port_position'), + constraint=models.UniqueConstraint( + fields=('rear_port', 'rear_port_position'), name='dcim_frontport_unique_rear_port_position' + ), ), migrations.AddConstraint( model_name='frontporttemplate', - constraint=models.UniqueConstraint(fields=('device_type', 'name'), name='dcim_frontporttemplate_unique_device_type_name'), + constraint=models.UniqueConstraint( + fields=('device_type', 'name'), name='dcim_frontporttemplate_unique_device_type_name' + ), ), migrations.AddConstraint( model_name='frontporttemplate', - constraint=models.UniqueConstraint(fields=('module_type', 'name'), name='dcim_frontporttemplate_unique_module_type_name'), + constraint=models.UniqueConstraint( + fields=('module_type', 'name'), name='dcim_frontporttemplate_unique_module_type_name' + ), ), migrations.AddConstraint( model_name='frontporttemplate', - constraint=models.UniqueConstraint(fields=('rear_port', 'rear_port_position'), name='dcim_frontporttemplate_unique_rear_port_position'), + constraint=models.UniqueConstraint( + fields=('rear_port', 'rear_port_position'), name='dcim_frontporttemplate_unique_rear_port_position' + ), ), migrations.AddConstraint( model_name='interface', @@ -359,27 +399,46 @@ class Migration(migrations.Migration): ), migrations.AddConstraint( model_name='interfacetemplate', - constraint=models.UniqueConstraint(fields=('device_type', 'name'), name='dcim_interfacetemplate_unique_device_type_name'), + constraint=models.UniqueConstraint( + fields=('device_type', 'name'), name='dcim_interfacetemplate_unique_device_type_name' + ), ), migrations.AddConstraint( model_name='interfacetemplate', - constraint=models.UniqueConstraint(fields=('module_type', 'name'), name='dcim_interfacetemplate_unique_module_type_name'), + constraint=models.UniqueConstraint( + fields=('module_type', 'name'), name='dcim_interfacetemplate_unique_module_type_name' + ), ), migrations.AddConstraint( model_name='inventoryitem', - constraint=models.UniqueConstraint(fields=('device', 'parent', 'name'), name='dcim_inventoryitem_unique_device_parent_name'), + constraint=models.UniqueConstraint( + fields=('device', 'parent', 'name'), name='dcim_inventoryitem_unique_device_parent_name' + ), ), migrations.AddConstraint( model_name='inventoryitemtemplate', - constraint=models.UniqueConstraint(fields=('device_type', 'parent', 'name'), name='dcim_inventoryitemtemplate_unique_device_type_parent_name'), + constraint=models.UniqueConstraint( + fields=('device_type', 'parent', 'name'), + name='dcim_inventoryitemtemplate_unique_device_type_parent_name', + ), ), migrations.AddConstraint( model_name='location', - constraint=models.UniqueConstraint(condition=models.Q(('parent__isnull', True)), fields=('site', 'name'), name='dcim_location_name', violation_error_message='A location with this name already exists within the specified site.'), + constraint=models.UniqueConstraint( + condition=models.Q(('parent__isnull', True)), + fields=('site', 'name'), + name='dcim_location_name', + violation_error_message='A location with this name already exists within the specified site.', + ), ), migrations.AddConstraint( model_name='location', - constraint=models.UniqueConstraint(condition=models.Q(('parent__isnull', True)), fields=('site', 'slug'), name='dcim_location_slug', violation_error_message='A location with this slug already exists within the specified site.'), + constraint=models.UniqueConstraint( + condition=models.Q(('parent__isnull', True)), + fields=('site', 'slug'), + name='dcim_location_slug', + violation_error_message='A location with this slug already exists within the specified site.', + ), ), migrations.AddConstraint( model_name='modulebay', @@ -387,15 +446,21 @@ class Migration(migrations.Migration): ), migrations.AddConstraint( model_name='modulebaytemplate', - constraint=models.UniqueConstraint(fields=('device_type', 'name'), name='dcim_modulebaytemplate_unique_device_type_name'), + constraint=models.UniqueConstraint( + fields=('device_type', 'name'), name='dcim_modulebaytemplate_unique_device_type_name' + ), ), migrations.AddConstraint( model_name='moduletype', - constraint=models.UniqueConstraint(fields=('manufacturer', 'model'), name='dcim_moduletype_unique_manufacturer_model'), + constraint=models.UniqueConstraint( + fields=('manufacturer', 'model'), name='dcim_moduletype_unique_manufacturer_model' + ), ), migrations.AddConstraint( model_name='powerfeed', - constraint=models.UniqueConstraint(fields=('power_panel', 'name'), name='dcim_powerfeed_unique_power_panel_name'), + constraint=models.UniqueConstraint( + fields=('power_panel', 'name'), name='dcim_powerfeed_unique_power_panel_name' + ), ), migrations.AddConstraint( model_name='poweroutlet', @@ -403,11 +468,15 @@ class Migration(migrations.Migration): ), migrations.AddConstraint( model_name='poweroutlettemplate', - constraint=models.UniqueConstraint(fields=('device_type', 'name'), name='dcim_poweroutlettemplate_unique_device_type_name'), + constraint=models.UniqueConstraint( + fields=('device_type', 'name'), name='dcim_poweroutlettemplate_unique_device_type_name' + ), ), migrations.AddConstraint( model_name='poweroutlettemplate', - constraint=models.UniqueConstraint(fields=('module_type', 'name'), name='dcim_poweroutlettemplate_unique_module_type_name'), + constraint=models.UniqueConstraint( + fields=('module_type', 'name'), name='dcim_poweroutlettemplate_unique_module_type_name' + ), ), migrations.AddConstraint( model_name='powerpanel', @@ -419,11 +488,15 @@ class Migration(migrations.Migration): ), migrations.AddConstraint( model_name='powerporttemplate', - constraint=models.UniqueConstraint(fields=('device_type', 'name'), name='dcim_powerporttemplate_unique_device_type_name'), + constraint=models.UniqueConstraint( + fields=('device_type', 'name'), name='dcim_powerporttemplate_unique_device_type_name' + ), ), migrations.AddConstraint( model_name='powerporttemplate', - constraint=models.UniqueConstraint(fields=('module_type', 'name'), name='dcim_powerporttemplate_unique_module_type_name'), + constraint=models.UniqueConstraint( + fields=('module_type', 'name'), name='dcim_powerporttemplate_unique_module_type_name' + ), ), migrations.AddConstraint( model_name='rack', @@ -431,7 +504,9 @@ class Migration(migrations.Migration): ), migrations.AddConstraint( model_name='rack', - constraint=models.UniqueConstraint(fields=('location', 'facility_id'), name='dcim_rack_unique_location_facility_id'), + constraint=models.UniqueConstraint( + fields=('location', 'facility_id'), name='dcim_rack_unique_location_facility_id' + ), ), migrations.AddConstraint( model_name='rearport', @@ -439,27 +514,51 @@ class Migration(migrations.Migration): ), migrations.AddConstraint( model_name='rearporttemplate', - constraint=models.UniqueConstraint(fields=('device_type', 'name'), name='dcim_rearporttemplate_unique_device_type_name'), + constraint=models.UniqueConstraint( + fields=('device_type', 'name'), name='dcim_rearporttemplate_unique_device_type_name' + ), ), migrations.AddConstraint( model_name='rearporttemplate', - constraint=models.UniqueConstraint(fields=('module_type', 'name'), name='dcim_rearporttemplate_unique_module_type_name'), + constraint=models.UniqueConstraint( + fields=('module_type', 'name'), name='dcim_rearporttemplate_unique_module_type_name' + ), ), migrations.AddConstraint( model_name='region', - constraint=models.UniqueConstraint(condition=models.Q(('parent__isnull', True)), fields=('name',), name='dcim_region_name', violation_error_message='A top-level region with this name already exists.'), + constraint=models.UniqueConstraint( + condition=models.Q(('parent__isnull', True)), + fields=('name',), + name='dcim_region_name', + violation_error_message='A top-level region with this name already exists.', + ), ), migrations.AddConstraint( model_name='region', - constraint=models.UniqueConstraint(condition=models.Q(('parent__isnull', True)), fields=('slug',), name='dcim_region_slug', violation_error_message='A top-level region with this slug already exists.'), + constraint=models.UniqueConstraint( + condition=models.Q(('parent__isnull', True)), + fields=('slug',), + name='dcim_region_slug', + violation_error_message='A top-level region with this slug already exists.', + ), ), migrations.AddConstraint( model_name='sitegroup', - constraint=models.UniqueConstraint(condition=models.Q(('parent__isnull', True)), fields=('name',), name='dcim_sitegroup_name', violation_error_message='A top-level site group with this name already exists.'), + constraint=models.UniqueConstraint( + condition=models.Q(('parent__isnull', True)), + fields=('name',), + name='dcim_sitegroup_name', + violation_error_message='A top-level site group with this name already exists.', + ), ), migrations.AddConstraint( model_name='sitegroup', - constraint=models.UniqueConstraint(condition=models.Q(('parent__isnull', True)), fields=('slug',), name='dcim_sitegroup_slug', violation_error_message='A top-level site group with this slug already exists.'), + constraint=models.UniqueConstraint( + condition=models.Q(('parent__isnull', True)), + fields=('slug',), + name='dcim_sitegroup_slug', + violation_error_message='A top-level site group with this slug already exists.', + ), ), migrations.AddField( model_name='devicetype', @@ -592,17 +691,56 @@ class Migration(migrations.Migration): ('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)), + ( + 'custom_field_data', + models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder), + ), ('description', models.CharField(blank=True, max_length=200)), ('name', models.CharField(max_length=64)), ('status', models.CharField(max_length=50)), ('identifier', models.PositiveSmallIntegerField(blank=True, null=True)), ('comments', models.TextField(blank=True)), - ('device', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='vdcs', to='dcim.device')), - ('primary_ip4', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='ipam.ipaddress')), - ('primary_ip6', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='ipam.ipaddress')), + ( + 'device', + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='vdcs', + to='dcim.device', + ), + ), + ( + 'primary_ip4', + models.OneToOneField( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='+', + to='ipam.ipaddress', + ), + ), + ( + 'primary_ip6', + models.OneToOneField( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='+', + to='ipam.ipaddress', + ), + ), ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), - ('tenant', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='vdcs', to='tenancy.tenant')), + ( + 'tenant', + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='vdcs', + to='tenancy.tenant', + ), + ), ], options={ 'ordering': ['name'], @@ -615,7 +753,9 @@ class Migration(migrations.Migration): ), migrations.AddConstraint( model_name='virtualdevicecontext', - constraint=models.UniqueConstraint(fields=('device', 'identifier'), name='dcim_virtualdevicecontext_device_identifier'), + constraint=models.UniqueConstraint( + fields=('device', 'identifier'), name='dcim_virtualdevicecontext_device_identifier' + ), ), migrations.AddConstraint( model_name='virtualdevicecontext', diff --git a/netbox/dcim/migrations/0167_squashed_0182.py b/netbox/dcim/migrations/0167_squashed_0182.py index 735cb3efa..d0ad5379f 100644 --- a/netbox/dcim/migrations/0167_squashed_0182.py +++ b/netbox/dcim/migrations/0167_squashed_0182.py @@ -6,7 +6,6 @@ import utilities.fields class Migration(migrations.Migration): - replaces = [ ('dcim', '0167_module_status'), ('dcim', '0168_interface_template_enabled'), @@ -24,7 +23,7 @@ class Migration(migrations.Migration): ('dcim', '0179_interfacetemplate_rf_role'), ('dcim', '0180_powerfeed_tenant'), ('dcim', '0181_rename_device_role_device_role'), - ('dcim', '0182_zero_length_cable_fix') + ('dcim', '0182_zero_length_cable_fix'), ] dependencies = [ @@ -48,27 +47,57 @@ class Migration(migrations.Migration): migrations.AddField( model_name='interfacetemplate', name='bridge', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='bridge_interfaces', to='dcim.interfacetemplate'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='bridge_interfaces', + to='dcim.interfacetemplate', + ), ), migrations.AddField( model_name='devicetype', name='default_platform', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='dcim.platform'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='+', + to='dcim.platform', + ), ), migrations.AddField( model_name='device', name='config_template', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='%(class)ss', to='extras.configtemplate'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='%(class)ss', + to='extras.configtemplate', + ), ), migrations.AddField( model_name='devicerole', name='config_template', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='device_roles', to='extras.configtemplate'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='device_roles', + to='extras.configtemplate', + ), ), migrations.AddField( model_name='platform', name='config_template', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='platforms', to='extras.configtemplate'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='platforms', + to='extras.configtemplate', + ), ), migrations.AddField( model_name='cabletermination', @@ -83,22 +112,30 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='powerport', name='allocated_draw', - field=models.PositiveIntegerField(blank=True, null=True, validators=[django.core.validators.MinValueValidator(1)]), + field=models.PositiveIntegerField( + blank=True, null=True, validators=[django.core.validators.MinValueValidator(1)] + ), ), migrations.AlterField( model_name='powerport', name='maximum_draw', - field=models.PositiveIntegerField(blank=True, null=True, validators=[django.core.validators.MinValueValidator(1)]), + field=models.PositiveIntegerField( + blank=True, null=True, validators=[django.core.validators.MinValueValidator(1)] + ), ), migrations.AlterField( model_name='powerporttemplate', name='allocated_draw', - field=models.PositiveIntegerField(blank=True, null=True, validators=[django.core.validators.MinValueValidator(1)]), + field=models.PositiveIntegerField( + blank=True, null=True, validators=[django.core.validators.MinValueValidator(1)] + ), ), migrations.AlterField( model_name='powerporttemplate', name='maximum_draw', - field=models.PositiveIntegerField(blank=True, null=True, validators=[django.core.validators.MinValueValidator(1)]), + field=models.PositiveIntegerField( + blank=True, null=True, validators=[django.core.validators.MinValueValidator(1)] + ), ), migrations.RemoveField( model_name='platform', @@ -126,112 +163,160 @@ class Migration(migrations.Migration): migrations.AddField( model_name='device', name='oob_ip', - field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='ipam.ipaddress'), + field=models.OneToOneField( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='+', + to='ipam.ipaddress', + ), ), migrations.AddField( model_name='device', name='console_port_count', - field=utilities.fields.CounterCacheField(default=0, editable=False, to_field='device', to_model='dcim.ConsolePort'), + field=utilities.fields.CounterCacheField( + default=0, editable=False, to_field='device', to_model='dcim.ConsolePort' + ), ), migrations.AddField( model_name='device', name='console_server_port_count', - field=utilities.fields.CounterCacheField(default=0, editable=False, to_field='device', to_model='dcim.ConsoleServerPort'), + field=utilities.fields.CounterCacheField( + default=0, editable=False, to_field='device', to_model='dcim.ConsoleServerPort' + ), ), migrations.AddField( model_name='device', name='power_port_count', - field=utilities.fields.CounterCacheField(default=0, editable=False, to_field='device', to_model='dcim.PowerPort'), + field=utilities.fields.CounterCacheField( + default=0, editable=False, to_field='device', to_model='dcim.PowerPort' + ), ), migrations.AddField( model_name='device', name='power_outlet_count', - field=utilities.fields.CounterCacheField(default=0, editable=False, to_field='device', to_model='dcim.PowerOutlet'), + field=utilities.fields.CounterCacheField( + default=0, editable=False, to_field='device', to_model='dcim.PowerOutlet' + ), ), migrations.AddField( model_name='device', name='interface_count', - field=utilities.fields.CounterCacheField(default=0, editable=False, to_field='device', to_model='dcim.Interface'), + field=utilities.fields.CounterCacheField( + default=0, editable=False, to_field='device', to_model='dcim.Interface' + ), ), migrations.AddField( model_name='device', name='front_port_count', - field=utilities.fields.CounterCacheField(default=0, editable=False, to_field='device', to_model='dcim.FrontPort'), + field=utilities.fields.CounterCacheField( + default=0, editable=False, to_field='device', to_model='dcim.FrontPort' + ), ), migrations.AddField( model_name='device', name='rear_port_count', - field=utilities.fields.CounterCacheField(default=0, editable=False, to_field='device', to_model='dcim.RearPort'), + field=utilities.fields.CounterCacheField( + default=0, editable=False, to_field='device', to_model='dcim.RearPort' + ), ), migrations.AddField( model_name='device', name='device_bay_count', - field=utilities.fields.CounterCacheField(default=0, editable=False, to_field='device', to_model='dcim.DeviceBay'), + field=utilities.fields.CounterCacheField( + default=0, editable=False, to_field='device', to_model='dcim.DeviceBay' + ), ), migrations.AddField( model_name='device', name='module_bay_count', - field=utilities.fields.CounterCacheField(default=0, editable=False, to_field='device', to_model='dcim.ModuleBay'), + field=utilities.fields.CounterCacheField( + default=0, editable=False, to_field='device', to_model='dcim.ModuleBay' + ), ), migrations.AddField( model_name='device', name='inventory_item_count', - field=utilities.fields.CounterCacheField(default=0, editable=False, to_field='device', to_model='dcim.InventoryItem'), + field=utilities.fields.CounterCacheField( + default=0, editable=False, to_field='device', to_model='dcim.InventoryItem' + ), ), migrations.AddField( model_name='devicetype', name='console_port_template_count', - field=utilities.fields.CounterCacheField(default=0, editable=False, to_field='device_type', to_model='dcim.ConsolePortTemplate'), + field=utilities.fields.CounterCacheField( + default=0, editable=False, to_field='device_type', to_model='dcim.ConsolePortTemplate' + ), ), migrations.AddField( model_name='devicetype', name='console_server_port_template_count', - field=utilities.fields.CounterCacheField(default=0, editable=False, to_field='device_type', to_model='dcim.ConsoleServerPortTemplate'), + field=utilities.fields.CounterCacheField( + default=0, editable=False, to_field='device_type', to_model='dcim.ConsoleServerPortTemplate' + ), ), migrations.AddField( model_name='devicetype', name='power_port_template_count', - field=utilities.fields.CounterCacheField(default=0, editable=False, to_field='device_type', to_model='dcim.PowerPortTemplate'), + field=utilities.fields.CounterCacheField( + default=0, editable=False, to_field='device_type', to_model='dcim.PowerPortTemplate' + ), ), migrations.AddField( model_name='devicetype', name='power_outlet_template_count', - field=utilities.fields.CounterCacheField(default=0, editable=False, to_field='device_type', to_model='dcim.PowerOutletTemplate'), + field=utilities.fields.CounterCacheField( + default=0, editable=False, to_field='device_type', to_model='dcim.PowerOutletTemplate' + ), ), migrations.AddField( model_name='devicetype', name='interface_template_count', - field=utilities.fields.CounterCacheField(default=0, editable=False, to_field='device_type', to_model='dcim.InterfaceTemplate'), + field=utilities.fields.CounterCacheField( + default=0, editable=False, to_field='device_type', to_model='dcim.InterfaceTemplate' + ), ), migrations.AddField( model_name='devicetype', name='front_port_template_count', - field=utilities.fields.CounterCacheField(default=0, editable=False, to_field='device_type', to_model='dcim.FrontPortTemplate'), + field=utilities.fields.CounterCacheField( + default=0, editable=False, to_field='device_type', to_model='dcim.FrontPortTemplate' + ), ), migrations.AddField( model_name='devicetype', name='rear_port_template_count', - field=utilities.fields.CounterCacheField(default=0, editable=False, to_field='device_type', to_model='dcim.RearPortTemplate'), + field=utilities.fields.CounterCacheField( + default=0, editable=False, to_field='device_type', to_model='dcim.RearPortTemplate' + ), ), migrations.AddField( model_name='devicetype', name='device_bay_template_count', - field=utilities.fields.CounterCacheField(default=0, editable=False, to_field='device_type', to_model='dcim.DeviceBayTemplate'), + field=utilities.fields.CounterCacheField( + default=0, editable=False, to_field='device_type', to_model='dcim.DeviceBayTemplate' + ), ), migrations.AddField( model_name='devicetype', name='module_bay_template_count', - field=utilities.fields.CounterCacheField(default=0, editable=False, to_field='device_type', to_model='dcim.ModuleBayTemplate'), + field=utilities.fields.CounterCacheField( + default=0, editable=False, to_field='device_type', to_model='dcim.ModuleBayTemplate' + ), ), migrations.AddField( model_name='devicetype', name='inventory_item_template_count', - field=utilities.fields.CounterCacheField(default=0, editable=False, to_field='device_type', to_model='dcim.InventoryItemTemplate'), + field=utilities.fields.CounterCacheField( + default=0, editable=False, to_field='device_type', to_model='dcim.InventoryItemTemplate' + ), ), migrations.AddField( model_name='virtualchassis', name='member_count', - field=utilities.fields.CounterCacheField(default=0, editable=False, to_field='virtual_chassis', to_model='dcim.Device'), + field=utilities.fields.CounterCacheField( + default=0, editable=False, to_field='virtual_chassis', to_model='dcim.Device' + ), ), migrations.AddField( model_name='interfacetemplate', @@ -241,7 +326,13 @@ class Migration(migrations.Migration): migrations.AddField( model_name='powerfeed', name='tenant', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='power_feeds', to='tenancy.tenant'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='power_feeds', + to='tenancy.tenant', + ), ), migrations.RenameField( model_name='device', diff --git a/netbox/dcim/migrations/0184_protect_child_interfaces.py b/netbox/dcim/migrations/0184_protect_child_interfaces.py index 3459e23fc..58eca506d 100644 --- a/netbox/dcim/migrations/0184_protect_child_interfaces.py +++ b/netbox/dcim/migrations/0184_protect_child_interfaces.py @@ -5,7 +5,6 @@ import django.db.models.deletion class Migration(migrations.Migration): - dependencies = [ ('dcim', '0183_devicetype_exclude_from_utilization'), ] @@ -14,6 +13,12 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='interface', name='parent', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.RESTRICT, related_name='child_interfaces', to='dcim.interface'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.RESTRICT, + related_name='child_interfaces', + to='dcim.interface', + ), ), ] diff --git a/netbox/dcim/migrations/0185_gfk_indexes.py b/netbox/dcim/migrations/0185_gfk_indexes.py index 84cdc53ff..5c099b380 100644 --- a/netbox/dcim/migrations/0185_gfk_indexes.py +++ b/netbox/dcim/migrations/0185_gfk_indexes.py @@ -4,7 +4,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('dcim', '0184_protect_child_interfaces'), ] diff --git a/netbox/dcim/migrations/0186_location_facility.py b/netbox/dcim/migrations/0186_location_facility.py index 759ee813b..3d22503b6 100644 --- a/netbox/dcim/migrations/0186_location_facility.py +++ b/netbox/dcim/migrations/0186_location_facility.py @@ -4,7 +4,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('dcim', '0185_gfk_indexes'), ] diff --git a/netbox/dcim/migrations/0187_alter_device_vc_position.py b/netbox/dcim/migrations/0187_alter_device_vc_position.py index d4a42dc20..10b636959 100644 --- a/netbox/dcim/migrations/0187_alter_device_vc_position.py +++ b/netbox/dcim/migrations/0187_alter_device_vc_position.py @@ -4,7 +4,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('dcim', '0186_location_facility'), ] diff --git a/netbox/dcim/migrations/0188_racktype.py b/netbox/dcim/migrations/0188_racktype.py index aa45246e5..a5265d030 100644 --- a/netbox/dcim/migrations/0188_racktype.py +++ b/netbox/dcim/migrations/0188_racktype.py @@ -9,7 +9,6 @@ import utilities.ordering class Migration(migrations.Migration): - dependencies = [ ('extras', '0118_customfield_uniqueness'), ('dcim', '0187_alter_device_vc_position'), @@ -22,36 +21,41 @@ class Migration(migrations.Migration): ('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 - )), + ( + 'custom_field_data', + models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder), + ), ('description', models.CharField(blank=True, max_length=200)), ('comments', models.TextField(blank=True)), ('weight', models.DecimalField(blank=True, decimal_places=2, max_digits=8, null=True)), ('weight_unit', models.CharField(blank=True, max_length=50)), ('_abs_weight', models.PositiveBigIntegerField(blank=True, null=True)), - ('manufacturer', models.ForeignKey( - on_delete=django.db.models.deletion.PROTECT, - related_name='rack_types', - to='dcim.manufacturer' - )), + ( + 'manufacturer', + models.ForeignKey( + on_delete=django.db.models.deletion.PROTECT, related_name='rack_types', to='dcim.manufacturer' + ), + ), ('model', models.CharField(max_length=100)), ('slug', models.SlugField(max_length=100, unique=True)), ('form_factor', models.CharField(max_length=50)), ('width', models.PositiveSmallIntegerField(default=19)), - ('u_height', models.PositiveSmallIntegerField( - default=42, - validators=[ - django.core.validators.MinValueValidator(1), - django.core.validators.MaxValueValidator(100), - ] - )), - ('starting_unit', models.PositiveSmallIntegerField( - default=1, - validators=[django.core.validators.MinValueValidator(1)] - )), + ( + 'u_height', + models.PositiveSmallIntegerField( + default=42, + validators=[ + django.core.validators.MinValueValidator(1), + django.core.validators.MaxValueValidator(100), + ], + ), + ), + ( + 'starting_unit', + models.PositiveSmallIntegerField( + default=1, validators=[django.core.validators.MinValueValidator(1)] + ), + ), ('desc_units', models.BooleanField(default=False)), ('outer_width', models.PositiveSmallIntegerField(blank=True, null=True)), ('outer_depth', models.PositiveSmallIntegerField(blank=True, null=True)), diff --git a/netbox/dcim/migrations/0189_moduletype_rack_airflow.py b/netbox/dcim/migrations/0189_moduletype_rack_airflow.py index 31787b67d..c356e32f7 100644 --- a/netbox/dcim/migrations/0189_moduletype_rack_airflow.py +++ b/netbox/dcim/migrations/0189_moduletype_rack_airflow.py @@ -2,7 +2,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('dcim', '0188_racktype'), ] diff --git a/netbox/dcim/migrations/0190_nested_modules.py b/netbox/dcim/migrations/0190_nested_modules.py index 9cef40efb..239e08639 100644 --- a/netbox/dcim/migrations/0190_nested_modules.py +++ b/netbox/dcim/migrations/0190_nested_modules.py @@ -4,7 +4,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('dcim', '0189_moduletype_rack_airflow'), ('extras', '0121_customfield_related_object_filter'), @@ -34,12 +33,25 @@ class Migration(migrations.Migration): migrations.AddField( model_name='modulebay', name='module', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.module'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name='%(class)ss', + to='dcim.module', + ), ), migrations.AddField( model_name='modulebay', name='parent', - field=mptt.fields.TreeForeignKey(blank=True, editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='children', to='dcim.modulebay'), + field=mptt.fields.TreeForeignKey( + blank=True, + editable=False, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name='children', + to='dcim.modulebay', + ), ), migrations.AddField( model_name='modulebay', @@ -56,19 +68,35 @@ class Migration(migrations.Migration): migrations.AddField( model_name='modulebaytemplate', name='module_type', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.moduletype'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name='%(class)ss', + to='dcim.moduletype', + ), ), migrations.AlterField( model_name='modulebaytemplate', name='device_type', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)ss', to='dcim.devicetype'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name='%(class)ss', + to='dcim.devicetype', + ), ), migrations.AddConstraint( model_name='modulebay', - constraint=models.UniqueConstraint(fields=('device', 'module', 'name'), name='dcim_modulebay_unique_device_module_name'), + constraint=models.UniqueConstraint( + fields=('device', 'module', 'name'), name='dcim_modulebay_unique_device_module_name' + ), ), migrations.AddConstraint( model_name='modulebaytemplate', - constraint=models.UniqueConstraint(fields=('module_type', 'name'), name='dcim_modulebaytemplate_unique_module_type_name'), + constraint=models.UniqueConstraint( + fields=('module_type', 'name'), name='dcim_modulebaytemplate_unique_module_type_name' + ), ), ] diff --git a/netbox/dcim/migrations/0191_module_bay_rebuild.py b/netbox/dcim/migrations/0191_module_bay_rebuild.py index 260063213..4f8a461f2 100644 --- a/netbox/dcim/migrations/0191_module_bay_rebuild.py +++ b/netbox/dcim/migrations/0191_module_bay_rebuild.py @@ -13,14 +13,10 @@ def rebuild_mptt(apps, schema_editor): class Migration(migrations.Migration): - dependencies = [ ('dcim', '0190_nested_modules'), ] operations = [ - migrations.RunPython( - code=rebuild_mptt, - reverse_code=migrations.RunPython.noop - ), + migrations.RunPython(code=rebuild_mptt, reverse_code=migrations.RunPython.noop), ] diff --git a/netbox/dcim/migrations/0192_inventoryitem_status.py b/netbox/dcim/migrations/0192_inventoryitem_status.py new file mode 100644 index 000000000..027f2daef --- /dev/null +++ b/netbox/dcim/migrations/0192_inventoryitem_status.py @@ -0,0 +1,17 @@ +# Generated by Django 5.0.9 on 2024-09-26 20:19 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ('dcim', '0191_module_bay_rebuild'), + ] + + operations = [ + migrations.AddField( + model_name='inventoryitem', + name='status', + field=models.CharField(default='active', max_length=50), + ), + ] diff --git a/netbox/dcim/migrations/0193_poweroutlet_color.py b/netbox/dcim/migrations/0193_poweroutlet_color.py new file mode 100644 index 000000000..f7e3c430c --- /dev/null +++ b/netbox/dcim/migrations/0193_poweroutlet_color.py @@ -0,0 +1,18 @@ +# Generated by Django 5.0.9 on 2024-09-26 19:31 + +import utilities.fields +from django.db import migrations + + +class Migration(migrations.Migration): + dependencies = [ + ('dcim', '0192_inventoryitem_status'), + ] + + operations = [ + migrations.AddField( + model_name='poweroutlet', + name='color', + field=utilities.fields.ColorField(blank=True, max_length=6), + ), + ] diff --git a/netbox/dcim/migrations/0194_charfield_null_choices.py b/netbox/dcim/migrations/0194_charfield_null_choices.py new file mode 100644 index 000000000..e13b0e10d --- /dev/null +++ b/netbox/dcim/migrations/0194_charfield_null_choices.py @@ -0,0 +1,291 @@ +import timezone_field.fields +from django.db import migrations, models + + +def set_null_values(apps, schema_editor): + """ + Replace empty strings with null values. + """ + Cable = apps.get_model('dcim', 'Cable') + ConsolePort = apps.get_model('dcim', 'ConsolePort') + ConsolePortTemplate = apps.get_model('dcim', 'ConsolePortTemplate') + ConsoleServerPort = apps.get_model('dcim', 'ConsoleServerPort') + ConsoleServerPortTemplate = apps.get_model('dcim', 'ConsoleServerPortTemplate') + Device = apps.get_model('dcim', 'Device') + DeviceType = apps.get_model('dcim', 'DeviceType') + FrontPort = apps.get_model('dcim', 'FrontPort') + Interface = apps.get_model('dcim', 'Interface') + InterfaceTemplate = apps.get_model('dcim', 'InterfaceTemplate') + ModuleType = apps.get_model('dcim', 'ModuleType') + PowerFeed = apps.get_model('dcim', 'PowerFeed') + PowerOutlet = apps.get_model('dcim', 'PowerOutlet') + PowerOutletTemplate = apps.get_model('dcim', 'PowerOutletTemplate') + PowerPort = apps.get_model('dcim', 'PowerPort') + PowerPortTemplate = apps.get_model('dcim', 'PowerPortTemplate') + Rack = apps.get_model('dcim', 'Rack') + RackType = apps.get_model('dcim', 'RackType') + RearPort = apps.get_model('dcim', 'RearPort') + Site = apps.get_model('dcim', 'Site') + + Cable.objects.filter(length_unit='').update(length_unit=None) + Cable.objects.filter(type='').update(type=None) + ConsolePort.objects.filter(cable_end='').update(cable_end=None) + ConsolePort.objects.filter(type='').update(type=None) + ConsolePortTemplate.objects.filter(type='').update(type=None) + ConsoleServerPort.objects.filter(cable_end='').update(cable_end=None) + ConsoleServerPort.objects.filter(type='').update(type=None) + ConsoleServerPortTemplate.objects.filter(type='').update(type=None) + Device.objects.filter(airflow='').update(airflow=None) + Device.objects.filter(face='').update(face=None) + DeviceType.objects.filter(airflow='').update(airflow=None) + DeviceType.objects.filter(subdevice_role='').update(subdevice_role=None) + DeviceType.objects.filter(weight_unit='').update(weight_unit=None) + FrontPort.objects.filter(cable_end='').update(cable_end=None) + Interface.objects.filter(cable_end='').update(cable_end=None) + Interface.objects.filter(mode='').update(mode=None) + Interface.objects.filter(poe_mode='').update(poe_mode=None) + Interface.objects.filter(poe_type='').update(poe_type=None) + Interface.objects.filter(rf_channel='').update(rf_channel=None) + Interface.objects.filter(rf_role='').update(rf_role=None) + InterfaceTemplate.objects.filter(poe_mode='').update(poe_mode=None) + InterfaceTemplate.objects.filter(poe_type='').update(poe_type=None) + InterfaceTemplate.objects.filter(rf_role='').update(rf_role=None) + ModuleType.objects.filter(airflow='').update(airflow=None) + ModuleType.objects.filter(weight_unit='').update(weight_unit=None) + PowerFeed.objects.filter(cable_end='').update(cable_end=None) + PowerOutlet.objects.filter(cable_end='').update(cable_end=None) + PowerOutlet.objects.filter(feed_leg='').update(feed_leg=None) + PowerOutlet.objects.filter(type='').update(type=None) + PowerOutletTemplate.objects.filter(feed_leg='').update(feed_leg=None) + PowerOutletTemplate.objects.filter(type='').update(type=None) + PowerPort.objects.filter(cable_end='').update(cable_end=None) + PowerPort.objects.filter(type='').update(type=None) + PowerPortTemplate.objects.filter(type='').update(type=None) + Rack.objects.filter(airflow='').update(airflow=None) + Rack.objects.filter(form_factor='').update(form_factor=None) + Rack.objects.filter(outer_unit='').update(outer_unit=None) + Rack.objects.filter(weight_unit='').update(weight_unit=None) + RackType.objects.filter(outer_unit='').update(outer_unit=None) + RackType.objects.filter(weight_unit='').update(weight_unit=None) + RearPort.objects.filter(cable_end='').update(cable_end=None) + Site.objects.filter(time_zone='').update(time_zone=None) + + +class Migration(migrations.Migration): + dependencies = [ + ('dcim', '0193_poweroutlet_color'), + ] + + operations = [ + migrations.AlterField( + model_name='cable', + name='length_unit', + field=models.CharField(blank=True, max_length=50, null=True), + ), + migrations.AlterField( + model_name='cable', + name='type', + field=models.CharField(blank=True, max_length=50, null=True), + ), + migrations.AlterField( + model_name='consoleport', + name='cable_end', + field=models.CharField(blank=True, max_length=1, null=True), + ), + migrations.AlterField( + model_name='consoleport', + name='type', + field=models.CharField(blank=True, max_length=50, null=True), + ), + migrations.AlterField( + model_name='consoleporttemplate', + name='type', + field=models.CharField(blank=True, max_length=50, null=True), + ), + migrations.AlterField( + model_name='consoleserverport', + name='cable_end', + field=models.CharField(blank=True, max_length=1, null=True), + ), + migrations.AlterField( + model_name='consoleserverport', + name='type', + field=models.CharField(blank=True, max_length=50, null=True), + ), + migrations.AlterField( + model_name='consoleserverporttemplate', + name='type', + field=models.CharField(blank=True, max_length=50, null=True), + ), + migrations.AlterField( + model_name='device', + name='airflow', + field=models.CharField(blank=True, max_length=50, null=True), + ), + migrations.AlterField( + model_name='device', + name='face', + field=models.CharField(blank=True, max_length=50, null=True), + ), + migrations.AlterField( + model_name='devicetype', + name='airflow', + field=models.CharField(blank=True, max_length=50, null=True), + ), + migrations.AlterField( + model_name='devicetype', + name='subdevice_role', + field=models.CharField(blank=True, max_length=50, null=True), + ), + migrations.AlterField( + model_name='devicetype', + name='weight_unit', + field=models.CharField(blank=True, max_length=50, null=True), + ), + migrations.AlterField( + model_name='frontport', + name='cable_end', + field=models.CharField(blank=True, max_length=1, null=True), + ), + migrations.AlterField( + model_name='interface', + name='cable_end', + field=models.CharField(blank=True, max_length=1, null=True), + ), + migrations.AlterField( + model_name='interface', + name='mode', + field=models.CharField(blank=True, max_length=50, null=True), + ), + migrations.AlterField( + model_name='interface', + name='poe_mode', + field=models.CharField(blank=True, max_length=50, null=True), + ), + migrations.AlterField( + model_name='interface', + name='poe_type', + field=models.CharField(blank=True, max_length=50, null=True), + ), + migrations.AlterField( + model_name='interface', + name='rf_channel', + field=models.CharField(blank=True, max_length=50, null=True), + ), + migrations.AlterField( + model_name='interface', + name='rf_role', + field=models.CharField(blank=True, max_length=30, null=True), + ), + migrations.AlterField( + model_name='interfacetemplate', + name='poe_mode', + field=models.CharField(blank=True, max_length=50, null=True), + ), + migrations.AlterField( + model_name='interfacetemplate', + name='poe_type', + field=models.CharField(blank=True, max_length=50, null=True), + ), + migrations.AlterField( + model_name='interfacetemplate', + name='rf_role', + field=models.CharField(blank=True, max_length=30, null=True), + ), + migrations.AlterField( + model_name='moduletype', + name='airflow', + field=models.CharField(blank=True, max_length=50, null=True), + ), + migrations.AlterField( + model_name='moduletype', + name='weight_unit', + field=models.CharField(blank=True, max_length=50, null=True), + ), + migrations.AlterField( + model_name='powerfeed', + name='cable_end', + field=models.CharField(blank=True, max_length=1, null=True), + ), + migrations.AlterField( + model_name='poweroutlet', + name='cable_end', + field=models.CharField(blank=True, max_length=1, null=True), + ), + migrations.AlterField( + model_name='poweroutlet', + name='feed_leg', + field=models.CharField(blank=True, max_length=50, null=True), + ), + migrations.AlterField( + model_name='poweroutlet', + name='type', + field=models.CharField(blank=True, max_length=50, null=True), + ), + migrations.AlterField( + model_name='poweroutlettemplate', + name='feed_leg', + field=models.CharField(blank=True, max_length=50, null=True), + ), + migrations.AlterField( + model_name='poweroutlettemplate', + name='type', + field=models.CharField(blank=True, max_length=50, null=True), + ), + migrations.AlterField( + model_name='powerport', + name='cable_end', + field=models.CharField(blank=True, max_length=1, null=True), + ), + migrations.AlterField( + model_name='powerport', + name='type', + field=models.CharField(blank=True, max_length=50, null=True), + ), + migrations.AlterField( + model_name='powerporttemplate', + name='type', + field=models.CharField(blank=True, max_length=50, null=True), + ), + migrations.AlterField( + model_name='rack', + name='airflow', + field=models.CharField(blank=True, max_length=50, null=True), + ), + migrations.AlterField( + model_name='rack', + name='form_factor', + field=models.CharField(blank=True, max_length=50, null=True), + ), + migrations.AlterField( + model_name='rack', + name='outer_unit', + field=models.CharField(blank=True, max_length=50, null=True), + ), + migrations.AlterField( + model_name='rack', + name='weight_unit', + field=models.CharField(blank=True, max_length=50, null=True), + ), + migrations.AlterField( + model_name='racktype', + name='outer_unit', + field=models.CharField(blank=True, max_length=50, null=True), + ), + migrations.AlterField( + model_name='racktype', + name='weight_unit', + field=models.CharField(blank=True, max_length=50, null=True), + ), + migrations.AlterField( + model_name='rearport', + name='cable_end', + field=models.CharField(blank=True, max_length=1, null=True), + ), + migrations.AlterField( + model_name='site', + name='time_zone', + field=timezone_field.fields.TimeZoneField(blank=True, null=True), + ), + migrations.RunPython(code=set_null_values, reverse_code=migrations.RunPython.noop), + ] diff --git a/netbox/dcim/migrations/0195_interface_vlan_translation_policy.py b/netbox/dcim/migrations/0195_interface_vlan_translation_policy.py new file mode 100644 index 000000000..9ec404886 --- /dev/null +++ b/netbox/dcim/migrations/0195_interface_vlan_translation_policy.py @@ -0,0 +1,21 @@ +# Generated by Django 5.0.9 on 2024-10-11 19:45 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ('dcim', '0194_charfield_null_choices'), + ('ipam', '0074_vlantranslationpolicy_vlantranslationrule'), + ] + + operations = [ + migrations.AddField( + model_name='interface', + name='vlan_translation_policy', + field=models.ForeignKey( + blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='ipam.vlantranslationpolicy' + ), + ), + ] diff --git a/netbox/dcim/migrations/0196_qinq_svlan.py b/netbox/dcim/migrations/0196_qinq_svlan.py new file mode 100644 index 000000000..a03ad144a --- /dev/null +++ b/netbox/dcim/migrations/0196_qinq_svlan.py @@ -0,0 +1,39 @@ +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ('dcim', '0195_interface_vlan_translation_policy'), + ('ipam', '0075_vlan_qinq'), + ] + + operations = [ + migrations.AddField( + model_name='interface', + name='qinq_svlan', + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='%(class)ss_svlan', + to='ipam.vlan', + ), + ), + migrations.AlterField( + model_name='interface', + name='tagged_vlans', + field=models.ManyToManyField(blank=True, related_name='%(class)ss_as_tagged', to='ipam.vlan'), + ), + migrations.AlterField( + model_name='interface', + name='untagged_vlan', + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='%(class)ss_as_untagged', + to='ipam.vlan', + ), + ), + ] diff --git a/netbox/dcim/migrations/0197_natural_sort_collation.py b/netbox/dcim/migrations/0197_natural_sort_collation.py new file mode 100644 index 000000000..268bda7eb --- /dev/null +++ b/netbox/dcim/migrations/0197_natural_sort_collation.py @@ -0,0 +1,16 @@ +from django.contrib.postgres.operations import CreateCollation +from django.db import migrations + + +class Migration(migrations.Migration): + dependencies = [ + ('dcim', '0196_qinq_svlan'), + ] + + operations = [ + CreateCollation( + 'natural_sort', + provider='icu', + locale='und-u-kn-true', + ), + ] diff --git a/netbox/dcim/migrations/0198_natural_ordering.py b/netbox/dcim/migrations/0198_natural_ordering.py new file mode 100644 index 000000000..cf4361a2b --- /dev/null +++ b/netbox/dcim/migrations/0198_natural_ordering.py @@ -0,0 +1,317 @@ +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ('dcim', '0197_natural_sort_collation'), + ] + + operations = [ + migrations.AlterModelOptions( + name='site', + options={'ordering': ('name',)}, + ), + migrations.AlterField( + model_name='site', + name='name', + field=models.CharField(db_collation='natural_sort', max_length=100, unique=True), + ), + migrations.AlterModelOptions( + name='consoleport', + options={'ordering': ('device', 'name')}, + ), + migrations.AlterModelOptions( + name='consoleporttemplate', + options={'ordering': ('device_type', 'module_type', 'name')}, + ), + migrations.AlterModelOptions( + name='consoleserverport', + options={'ordering': ('device', 'name')}, + ), + migrations.AlterModelOptions( + name='consoleserverporttemplate', + options={'ordering': ('device_type', 'module_type', 'name')}, + ), + migrations.AlterModelOptions( + name='device', + options={'ordering': ('name', 'pk')}, + ), + migrations.AlterModelOptions( + name='devicebay', + options={'ordering': ('device', 'name')}, + ), + migrations.AlterModelOptions( + name='devicebaytemplate', + options={'ordering': ('device_type', 'name')}, + ), + migrations.AlterModelOptions( + name='frontport', + options={'ordering': ('device', 'name')}, + ), + migrations.AlterModelOptions( + name='frontporttemplate', + options={'ordering': ('device_type', 'module_type', 'name')}, + ), + migrations.AlterModelOptions( + name='interfacetemplate', + options={'ordering': ('device_type', 'module_type', 'name')}, + ), + migrations.AlterModelOptions( + name='inventoryitem', + options={'ordering': ('device__id', 'parent__id', 'name')}, + ), + migrations.AlterModelOptions( + name='inventoryitemtemplate', + options={'ordering': ('device_type__id', 'parent__id', 'name')}, + ), + migrations.AlterModelOptions( + name='modulebay', + options={'ordering': ('device', 'name')}, + ), + migrations.AlterModelOptions( + name='modulebaytemplate', + options={'ordering': ('device_type', 'module_type', 'name')}, + ), + migrations.AlterModelOptions( + name='poweroutlet', + options={'ordering': ('device', 'name')}, + ), + migrations.AlterModelOptions( + name='poweroutlettemplate', + options={'ordering': ('device_type', 'module_type', 'name')}, + ), + migrations.AlterModelOptions( + name='powerport', + options={'ordering': ('device', 'name')}, + ), + migrations.AlterModelOptions( + name='powerporttemplate', + options={'ordering': ('device_type', 'module_type', 'name')}, + ), + migrations.AlterModelOptions( + name='rack', + options={'ordering': ('site', 'location', 'name', 'pk')}, + ), + migrations.AlterModelOptions( + name='rearport', + options={'ordering': ('device', 'name')}, + ), + migrations.AlterModelOptions( + name='rearporttemplate', + options={'ordering': ('device_type', 'module_type', 'name')}, + ), + migrations.RemoveField( + model_name='consoleport', + name='_name', + ), + migrations.RemoveField( + model_name='consoleporttemplate', + name='_name', + ), + migrations.RemoveField( + model_name='consoleserverport', + name='_name', + ), + migrations.RemoveField( + model_name='consoleserverporttemplate', + name='_name', + ), + migrations.RemoveField( + model_name='device', + name='_name', + ), + migrations.RemoveField( + model_name='devicebay', + name='_name', + ), + migrations.RemoveField( + model_name='devicebaytemplate', + name='_name', + ), + migrations.RemoveField( + model_name='frontport', + name='_name', + ), + migrations.RemoveField( + model_name='frontporttemplate', + name='_name', + ), + migrations.RemoveField( + model_name='inventoryitem', + name='_name', + ), + migrations.RemoveField( + model_name='inventoryitemtemplate', + name='_name', + ), + migrations.RemoveField( + model_name='modulebay', + name='_name', + ), + migrations.RemoveField( + model_name='modulebaytemplate', + name='_name', + ), + migrations.RemoveField( + model_name='poweroutlet', + name='_name', + ), + migrations.RemoveField( + model_name='poweroutlettemplate', + name='_name', + ), + migrations.RemoveField( + model_name='powerport', + name='_name', + ), + migrations.RemoveField( + model_name='powerporttemplate', + name='_name', + ), + migrations.RemoveField( + model_name='rack', + name='_name', + ), + migrations.RemoveField( + model_name='rearport', + name='_name', + ), + migrations.RemoveField( + model_name='rearporttemplate', + name='_name', + ), + migrations.RemoveField( + model_name='site', + name='_name', + ), + migrations.AlterField( + model_name='consoleport', + name='name', + field=models.CharField(db_collation='natural_sort', max_length=64), + ), + migrations.AlterField( + model_name='consoleporttemplate', + name='name', + field=models.CharField(db_collation='natural_sort', max_length=64), + ), + migrations.AlterField( + model_name='consoleserverport', + name='name', + field=models.CharField(db_collation='natural_sort', max_length=64), + ), + migrations.AlterField( + model_name='consoleserverporttemplate', + name='name', + field=models.CharField(db_collation='natural_sort', max_length=64), + ), + migrations.AlterField( + model_name='device', + name='name', + field=models.CharField(blank=True, db_collation='natural_sort', max_length=64, null=True), + ), + migrations.AlterField( + model_name='devicebay', + name='name', + field=models.CharField(db_collation='natural_sort', max_length=64), + ), + migrations.AlterField( + model_name='devicebaytemplate', + name='name', + field=models.CharField(db_collation='natural_sort', max_length=64), + ), + migrations.AlterField( + model_name='frontport', + name='name', + field=models.CharField(db_collation='natural_sort', max_length=64), + ), + migrations.AlterField( + model_name='frontporttemplate', + name='name', + field=models.CharField(db_collation='natural_sort', max_length=64), + ), + migrations.AlterField( + model_name='interface', + name='name', + field=models.CharField(db_collation='natural_sort', max_length=64), + ), + migrations.AlterField( + model_name='interfacetemplate', + name='name', + field=models.CharField(db_collation='natural_sort', max_length=64), + ), + migrations.AlterField( + model_name='inventoryitem', + name='name', + field=models.CharField(db_collation='natural_sort', max_length=64), + ), + migrations.AlterField( + model_name='inventoryitemtemplate', + name='name', + field=models.CharField(db_collation='natural_sort', max_length=64), + ), + migrations.AlterField( + model_name='modulebay', + name='name', + field=models.CharField(db_collation='natural_sort', max_length=64), + ), + migrations.AlterField( + model_name='modulebaytemplate', + name='name', + field=models.CharField(db_collation='natural_sort', max_length=64), + ), + migrations.AlterField( + model_name='poweroutlet', + name='name', + field=models.CharField(db_collation='natural_sort', max_length=64), + ), + migrations.AlterField( + model_name='poweroutlettemplate', + name='name', + field=models.CharField(db_collation='natural_sort', max_length=64), + ), + migrations.AlterField( + model_name='powerport', + name='name', + field=models.CharField(db_collation='natural_sort', max_length=64), + ), + migrations.AlterField( + model_name='powerporttemplate', + name='name', + field=models.CharField(db_collation='natural_sort', max_length=64), + ), + migrations.AlterField( + model_name='rack', + name='name', + field=models.CharField(db_collation='natural_sort', max_length=100), + ), + migrations.AlterField( + model_name='rearport', + name='name', + field=models.CharField(db_collation='natural_sort', max_length=64), + ), + migrations.AlterField( + model_name='rearporttemplate', + name='name', + field=models.CharField(db_collation='natural_sort', max_length=64), + ), + migrations.AlterField( + model_name='powerfeed', + name='name', + field=models.CharField(db_collation='natural_sort', max_length=100), + ), + migrations.AlterField( + model_name='powerpanel', + name='name', + field=models.CharField(db_collation='natural_sort', max_length=100), + ), + migrations.AlterField( + model_name='virtualchassis', + name='name', + field=models.CharField(db_collation='natural_sort', max_length=64), + ), + migrations.AlterField( + model_name='virtualdevicecontext', + name='name', + field=models.CharField(db_collation='natural_sort', max_length=64), + ), + ] diff --git a/netbox/dcim/migrations/0199_macaddress.py b/netbox/dcim/migrations/0199_macaddress.py new file mode 100644 index 000000000..ae18d5f63 --- /dev/null +++ b/netbox/dcim/migrations/0199_macaddress.py @@ -0,0 +1,51 @@ +import django.db.models.deletion +import taggit.managers +from django.db import migrations, models + +import dcim.fields +import utilities.json + + +class Migration(migrations.Migration): + dependencies = [ + ('dcim', '0198_natural_ordering'), + ('extras', '0122_charfield_null_choices'), + ] + + operations = [ + migrations.CreateModel( + name='MACAddress', + 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), + ), + ('description', models.CharField(blank=True, max_length=200)), + ('comments', models.TextField(blank=True)), + ('mac_address', dcim.fields.MACAddressField()), + ('assigned_object_id', models.PositiveBigIntegerField(blank=True, null=True)), + ( + 'assigned_object_type', + models.ForeignKey( + blank=True, + limit_choices_to=models.Q( + models.Q( + models.Q(('app_label', 'dcim'), ('model', 'interface')), + models.Q(('app_label', 'virtualization'), ('model', 'vminterface')), + _connector='OR', + ) + ), + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='+', + to='contenttypes.contenttype', + ), + ), + ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), + ], + options={'abstract': False, 'ordering': ('mac_address',)}, + ), + ] diff --git a/netbox/dcim/migrations/0200_populate_mac_addresses.py b/netbox/dcim/migrations/0200_populate_mac_addresses.py new file mode 100644 index 000000000..0cd18d78e --- /dev/null +++ b/netbox/dcim/migrations/0200_populate_mac_addresses.py @@ -0,0 +1,46 @@ +import django.db.models.deletion +from django.db import migrations, models + + +def populate_mac_addresses(apps, schema_editor): + ContentType = apps.get_model('contenttypes', 'ContentType') + Interface = apps.get_model('dcim', 'Interface') + MACAddress = apps.get_model('dcim', 'MACAddress') + interface_ct = ContentType.objects.get_for_model(Interface) + + mac_addresses = [ + MACAddress( + mac_address=interface.mac_address, assigned_object_type=interface_ct, assigned_object_id=interface.pk + ) + for interface in Interface.objects.filter(mac_address__isnull=False) + ] + MACAddress.objects.bulk_create(mac_addresses, batch_size=100) + + # TODO: Optimize interface updates + for mac_address in mac_addresses: + Interface.objects.filter(pk=mac_address.assigned_object_id).update(primary_mac_address=mac_address) + + +class Migration(migrations.Migration): + dependencies = [ + ('dcim', '0199_macaddress'), + ] + + operations = [ + migrations.AddField( + model_name='interface', + name='primary_mac_address', + field=models.OneToOneField( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='+', + to='dcim.macaddress', + ), + ), + migrations.RunPython(code=populate_mac_addresses, reverse_code=migrations.RunPython.noop), + migrations.RemoveField( + model_name='interface', + name='mac_address', + ), + ] diff --git a/netbox/dcim/models/cables.py b/netbox/dcim/models/cables.py index 2a4748610..7117ea7e0 100644 --- a/netbox/dcim/models/cables.py +++ b/netbox/dcim/models/cables.py @@ -6,7 +6,6 @@ from django.core.exceptions import ValidationError from django.db import models from django.db.models import Sum from django.dispatch import Signal -from django.urls import reverse from django.utils.translation import gettext_lazy as _ from core.models import ObjectType @@ -43,7 +42,8 @@ class Cable(PrimaryModel): verbose_name=_('type'), max_length=50, choices=CableTypeChoices, - blank=True + blank=True, + null=True ) status = models.CharField( verbose_name=_('status'), @@ -79,6 +79,7 @@ class Cable(PrimaryModel): max_length=50, choices=CableLengthUnitChoices, blank=True, + null=True ) # Stores the normalized length (in meters) for database ordering _abs_length = models.DecimalField( @@ -116,9 +117,6 @@ class Cable(PrimaryModel): pk = self.pk or self._pk return self.label or f'#{pk}' - def get_absolute_url(self): - return reverse('dcim:cable', args=[self.pk]) - @property def a_terminations(self): if hasattr(self, '_a_terminations'): @@ -210,7 +208,7 @@ class Cable(PrimaryModel): # Clear length_unit if no length is defined if self.length is None: - self.length_unit = '' + self.length_unit = None super().save(*args, **kwargs) @@ -346,7 +344,7 @@ class CableTermination(ChangeLoggedModel): ) # A CircuitTermination attached to a ProviderNetwork cannot have a Cable - if self.termination_type.model == 'circuittermination' and self.termination.provider_network is not None: + if self.termination_type.model == 'circuittermination' and self.termination._provider_network is not None: raise ValidationError(_("Circuit terminations attached to a provider network may not be cabled.")) def save(self, *args, **kwargs): @@ -369,7 +367,7 @@ class CableTermination(ChangeLoggedModel): termination = self.termination._meta.model.objects.get(pk=self.termination_id) termination.snapshot() termination.cable = None - termination.cable_end = '' + termination.cable_end = None termination.save() super().delete(*args, **kwargs) @@ -607,6 +605,10 @@ class CablePath(models.Model): cable_end = 'A' if lct.cable_end == 'B' else 'B' q_filter |= Q(cable=lct.cable, cable_end=cable_end) + # Make sure this filter has been populated; if not, we have probably been given invalid data + if not q_filter: + break + remote_cable_terminations = CableTermination.objects.filter(q_filter) remote_terminations = [ct.termination for ct in remote_cable_terminations] else: @@ -692,19 +694,19 @@ class CablePath(models.Model): ).first() if circuit_termination is None: break - elif circuit_termination.provider_network: + elif circuit_termination._provider_network: # Circuit terminates to a ProviderNetwork path.extend([ [object_to_path_node(circuit_termination)], - [object_to_path_node(circuit_termination.provider_network)], + [object_to_path_node(circuit_termination._provider_network)], ]) is_complete = True break - elif circuit_termination.site and not circuit_termination.cable: - # Circuit terminates to a Site + elif circuit_termination.termination and not circuit_termination.cable: + # Circuit terminates to a Region/Site/etc. path.extend([ [object_to_path_node(circuit_termination)], - [object_to_path_node(circuit_termination.site)], + [object_to_path_node(circuit_termination.termination)], ]) break diff --git a/netbox/dcim/models/device_component_templates.py b/netbox/dcim/models/device_component_templates.py index 3a71c424d..b4f057711 100644 --- a/netbox/dcim/models/device_component_templates.py +++ b/netbox/dcim/models/device_component_templates.py @@ -44,12 +44,8 @@ class ComponentTemplateModel(ChangeLoggedModel, TrackingModelMixin): max_length=64, help_text=_( "{module} is accepted as a substitution for the module bay position when attached to a module type." - ) - ) - _name = NaturalOrderingField( - target_field='name', - max_length=100, - blank=True + ), + db_collation="natural_sort" ) label = models.CharField( verbose_name=_('label'), @@ -65,7 +61,7 @@ class ComponentTemplateModel(ChangeLoggedModel, TrackingModelMixin): class Meta: abstract = True - ordering = ('device_type', '_name') + ordering = ('device_type', 'name') constraints = ( models.UniqueConstraint( fields=('device_type', 'name'), @@ -125,7 +121,7 @@ class ModularComponentTemplateModel(ComponentTemplateModel): class Meta: abstract = True - ordering = ('device_type', 'module_type', '_name') + ordering = ('device_type', 'module_type', 'name') constraints = ( models.UniqueConstraint( fields=('device_type', 'name'), @@ -203,7 +199,8 @@ class ConsolePortTemplate(ModularComponentTemplateModel): verbose_name=_('type'), max_length=50, choices=ConsolePortTypeChoices, - blank=True + blank=True, + null=True ) component_model = ConsolePort @@ -237,7 +234,8 @@ class ConsoleServerPortTemplate(ModularComponentTemplateModel): verbose_name=_('type'), max_length=50, choices=ConsolePortTypeChoices, - blank=True + blank=True, + null=True ) component_model = ConsoleServerPort @@ -272,7 +270,8 @@ class PowerPortTemplate(ModularComponentTemplateModel): verbose_name=_('type'), max_length=50, choices=PowerPortTypeChoices, - blank=True + blank=True, + null=True ) maximum_draw = models.PositiveIntegerField( verbose_name=_('maximum draw'), @@ -312,7 +311,9 @@ class PowerPortTemplate(ModularComponentTemplateModel): if self.maximum_draw is not None and self.allocated_draw is not None: if self.allocated_draw > self.maximum_draw: raise ValidationError({ - 'allocated_draw': _("Allocated draw cannot exceed the maximum draw ({maximum_draw}W).").format(maximum_draw=self.maximum_draw) + 'allocated_draw': _( + "Allocated draw cannot exceed the maximum draw ({maximum_draw}W)." + ).format(maximum_draw=self.maximum_draw) }) def to_yaml(self): @@ -334,7 +335,8 @@ class PowerOutletTemplate(ModularComponentTemplateModel): verbose_name=_('type'), max_length=50, choices=PowerOutletTypeChoices, - blank=True + blank=True, + null=True ) power_port = models.ForeignKey( to='dcim.PowerPortTemplate', @@ -348,6 +350,7 @@ class PowerOutletTemplate(ModularComponentTemplateModel): max_length=50, choices=PowerOutletFeedLegChoices, blank=True, + null=True, help_text=_('Phase (for three-phase feeds)') ) @@ -364,11 +367,15 @@ class PowerOutletTemplate(ModularComponentTemplateModel): if self.power_port: if self.device_type and self.power_port.device_type != self.device_type: raise ValidationError( - _("Parent power port ({power_port}) must belong to the same device type").format(power_port=self.power_port) + _("Parent power port ({power_port}) must belong to the same device type").format( + power_port=self.power_port + ) ) if self.module_type and self.power_port.module_type != self.module_type: raise ValidationError( - _("Parent power port ({power_port}) must belong to the same module type").format(power_port=self.power_port) + _("Parent power port ({power_port}) must belong to the same module type").format( + power_port=self.power_port + ) ) def instantiate(self, **kwargs): @@ -434,18 +441,21 @@ class InterfaceTemplate(ModularComponentTemplateModel): max_length=50, choices=InterfacePoEModeChoices, blank=True, + null=True, verbose_name=_('PoE mode') ) poe_type = models.CharField( max_length=50, choices=InterfacePoETypeChoices, blank=True, + null=True, verbose_name=_('PoE type') ) rf_role = models.CharField( max_length=30, choices=WirelessRoleChoices, blank=True, + null=True, verbose_name=_('wireless role') ) @@ -463,11 +473,15 @@ class InterfaceTemplate(ModularComponentTemplateModel): raise ValidationError({'bridge': _("An interface cannot be bridged to itself.")}) if self.device_type and self.device_type != self.bridge.device_type: raise ValidationError({ - 'bridge': _("Bridge interface ({bridge}) must belong to the same device type").format(bridge=self.bridge) + 'bridge': _( + "Bridge interface ({bridge}) must belong to the same device type" + ).format(bridge=self.bridge) }) if self.module_type and self.module_type != self.bridge.module_type: raise ValidationError({ - 'bridge': _("Bridge interface ({bridge}) must belong to the same module type").format(bridge=self.bridge) + 'bridge': _( + "Bridge interface ({bridge}) must belong to the same module type" + ).format(bridge=self.bridge) }) if self.rf_role and self.type not in WIRELESS_IFACE_TYPES: @@ -710,7 +724,9 @@ class DeviceBayTemplate(ComponentTemplateModel): def clean(self): if self.device_type and self.device_type.subdevice_role != SubdeviceRoleChoices.ROLE_PARENT: raise ValidationError( - _("Subdevice role of device type ({device_type}) must be set to \"parent\" to allow device bays.").format(device_type=self.device_type) + _( + 'Subdevice role of device type ({device_type}) must be set to "parent" to allow device bays.' + ).format(device_type=self.device_type) ) def to_yaml(self): @@ -774,7 +790,7 @@ class InventoryItemTemplate(MPTTModel, ComponentTemplateModel): component_model = InventoryItem class Meta: - ordering = ('device_type__id', 'parent__id', '_name') + ordering = ('device_type__id', 'parent__id', 'name') indexes = ( models.Index(fields=('component_type', 'component_id')), ) diff --git a/netbox/dcim/models/device_components.py b/netbox/dcim/models/device_components.py index b1f951541..ce9e5607f 100644 --- a/netbox/dcim/models/device_components.py +++ b/netbox/dcim/models/device_components.py @@ -5,13 +5,12 @@ from django.core.exceptions import ValidationError from django.core.validators import MaxValueValidator, MinValueValidator from django.db import models from django.db.models import Sum -from django.urls import reverse from django.utils.translation import gettext_lazy as _ from mptt.models import MPTTModel, TreeForeignKey from dcim.choices import * from dcim.constants import * -from dcim.fields import MACAddressField, WWNField +from dcim.fields import WWNField from netbox.choices import ColorChoices from netbox.models import OrganizationalModel, NetBoxModel from utilities.fields import ColorField, NaturalOrderingField @@ -51,12 +50,8 @@ class ComponentModel(NetBoxModel): ) name = models.CharField( verbose_name=_('name'), - max_length=64 - ) - _name = NaturalOrderingField( - target_field='name', - max_length=100, - blank=True + max_length=64, + db_collation="natural_sort" ) label = models.CharField( verbose_name=_('label'), @@ -72,7 +67,7 @@ class ComponentModel(NetBoxModel): class Meta: abstract = True - ordering = ('device', '_name') + ordering = ('device', 'name') constraints = ( models.UniqueConstraint( fields=('device', 'name'), @@ -143,8 +138,9 @@ class CabledObjectModel(models.Model): cable_end = models.CharField( verbose_name=_('cable end'), max_length=1, + choices=CableEndChoices, blank=True, - choices=CableEndChoices + null=True ) mark_connected = models.BooleanField( verbose_name=_('mark connected'), @@ -284,6 +280,7 @@ class ConsolePort(ModularComponentModel, CabledObjectModel, PathEndpoint, Tracki max_length=50, choices=ConsolePortTypeChoices, blank=True, + null=True, help_text=_('Physical port type') ) speed = models.PositiveIntegerField( @@ -300,9 +297,6 @@ class ConsolePort(ModularComponentModel, CabledObjectModel, PathEndpoint, Tracki verbose_name = _('console port') verbose_name_plural = _('console ports') - def get_absolute_url(self): - return reverse('dcim:consoleport', kwargs={'pk': self.pk}) - class ConsoleServerPort(ModularComponentModel, CabledObjectModel, PathEndpoint, TrackingModelMixin): """ @@ -313,6 +307,7 @@ class ConsoleServerPort(ModularComponentModel, CabledObjectModel, PathEndpoint, max_length=50, choices=ConsolePortTypeChoices, blank=True, + null=True, help_text=_('Physical port type') ) speed = models.PositiveIntegerField( @@ -329,9 +324,6 @@ class ConsoleServerPort(ModularComponentModel, CabledObjectModel, PathEndpoint, verbose_name = _('console server port') verbose_name_plural = _('console server ports') - def get_absolute_url(self): - return reverse('dcim:consoleserverport', kwargs={'pk': self.pk}) - # # Power components @@ -346,6 +338,7 @@ class PowerPort(ModularComponentModel, CabledObjectModel, PathEndpoint, Tracking max_length=50, choices=PowerPortTypeChoices, blank=True, + null=True, help_text=_('Physical port type') ) maximum_draw = models.PositiveIntegerField( @@ -369,9 +362,6 @@ class PowerPort(ModularComponentModel, CabledObjectModel, PathEndpoint, Tracking verbose_name = _('power port') verbose_name_plural = _('power ports') - def get_absolute_url(self): - return reverse('dcim:powerport', kwargs={'pk': self.pk}) - def clean(self): super().clean() @@ -464,6 +454,7 @@ class PowerOutlet(ModularComponentModel, CabledObjectModel, PathEndpoint, Tracki max_length=50, choices=PowerOutletTypeChoices, blank=True, + null=True, help_text=_('Physical port type') ) power_port = models.ForeignKey( @@ -478,8 +469,13 @@ class PowerOutlet(ModularComponentModel, CabledObjectModel, PathEndpoint, Tracki max_length=50, choices=PowerOutletFeedLegChoices, blank=True, + null=True, help_text=_('Phase (for three-phase feeds)') ) + color = ColorField( + verbose_name=_('color'), + blank=True + ) clone_fields = ('device', 'module', 'type', 'power_port', 'feed_leg') @@ -487,9 +483,6 @@ class PowerOutlet(ModularComponentModel, CabledObjectModel, PathEndpoint, Tracki verbose_name = _('power outlet') verbose_name_plural = _('power outlets') - def get_absolute_url(self): - return reverse('dcim:poweroutlet', kwargs={'pk': self.pk}) - def clean(self): super().clean() @@ -512,11 +505,6 @@ class BaseInterface(models.Model): verbose_name=_('enabled'), default=True ) - mac_address = MACAddressField( - null=True, - blank=True, - verbose_name=_('MAC address') - ) mtu = models.PositiveIntegerField( blank=True, null=True, @@ -531,6 +519,7 @@ class BaseInterface(models.Model): max_length=50, choices=InterfaceModeChoices, blank=True, + null=True, help_text=_('IEEE 802.1Q tagging strategy') ) parent = models.ForeignKey( @@ -549,10 +538,64 @@ class BaseInterface(models.Model): blank=True, verbose_name=_('bridge interface') ) + untagged_vlan = models.ForeignKey( + to='ipam.VLAN', + on_delete=models.SET_NULL, + related_name='%(class)ss_as_untagged', + null=True, + blank=True, + verbose_name=_('untagged VLAN') + ) + tagged_vlans = models.ManyToManyField( + to='ipam.VLAN', + related_name='%(class)ss_as_tagged', + blank=True, + verbose_name=_('tagged VLANs') + ) + qinq_svlan = models.ForeignKey( + to='ipam.VLAN', + on_delete=models.SET_NULL, + related_name='%(class)ss_svlan', + null=True, + blank=True, + verbose_name=_('Q-in-Q SVLAN') + ) + vlan_translation_policy = models.ForeignKey( + to='ipam.VLANTranslationPolicy', + on_delete=models.PROTECT, + null=True, + blank=True, + verbose_name=_('VLAN Translation Policy') + ) + primary_mac_address = models.OneToOneField( + to='dcim.MACAddress', + on_delete=models.SET_NULL, + related_name='+', + blank=True, + null=True, + verbose_name=_('primary MAC address') + ) class Meta: abstract = True + def clean(self): + super().clean() + + # SVLAN can be defined only for Q-in-Q interfaces + if self.qinq_svlan and self.mode != InterfaceModeChoices.MODE_Q_IN_Q: + raise ValidationError({ + 'qinq_svlan': _("Only Q-in-Q interfaces may specify a service VLAN.") + }) + + # Check that the primary MAC address (if any) is assigned to this interface + if self.primary_mac_address and self.primary_mac_address.assigned_object != self: + raise ValidationError({ + 'primary_mac_address': _("MAC address {mac_address} is not assigned to this interface.").format( + mac_address=self.primary_mac_address + ) + }) + def save(self, *args, **kwargs): # Remove untagged VLAN assignment for non-802.1Q interfaces @@ -577,6 +620,11 @@ class BaseInterface(models.Model): def count_fhrp_groups(self): return self.fhrp_group_assignments.count() + @cached_property + def mac_address(self): + if self.primary_mac_address: + return self.primary_mac_address.mac_address + class Interface(ModularComponentModel, BaseInterface, CabledObjectModel, PathEndpoint, TrackingModelMixin): """ @@ -633,12 +681,14 @@ class Interface(ModularComponentModel, BaseInterface, CabledObjectModel, PathEnd max_length=30, choices=WirelessRoleChoices, blank=True, + null=True, verbose_name=_('wireless role') ) rf_channel = models.CharField( max_length=50, choices=WirelessChannelChoices, blank=True, + null=True, verbose_name=_('wireless channel') ) rf_channel_frequency = models.DecimalField( @@ -667,12 +717,14 @@ class Interface(ModularComponentModel, BaseInterface, CabledObjectModel, PathEnd max_length=50, choices=InterfacePoEModeChoices, blank=True, + null=True, verbose_name=_('PoE mode') ) poe_type = models.CharField( max_length=50, choices=InterfacePoETypeChoices, blank=True, + null=True, verbose_name=_('PoE type') ) wireless_link = models.ForeignKey( @@ -688,20 +740,6 @@ class Interface(ModularComponentModel, BaseInterface, CabledObjectModel, PathEnd blank=True, verbose_name=_('wireless LANs') ) - untagged_vlan = models.ForeignKey( - to='ipam.VLAN', - on_delete=models.SET_NULL, - related_name='interfaces_as_untagged', - null=True, - blank=True, - verbose_name=_('untagged VLAN') - ) - tagged_vlans = models.ManyToManyField( - to='ipam.VLAN', - related_name='interfaces_as_tagged', - blank=True, - verbose_name=_('tagged VLANs') - ) vrf = models.ForeignKey( to='ipam.VRF', on_delete=models.SET_NULL, @@ -716,6 +754,12 @@ class Interface(ModularComponentModel, BaseInterface, CabledObjectModel, PathEnd object_id_field='assigned_object_id', related_query_name='interface' ) + mac_addresses = GenericRelation( + to='dcim.MACAddress', + content_type_field='assigned_object_type', + object_id_field='assigned_object_id', + related_query_name='interface' + ) fhrp_group_assignments = GenericRelation( to='ipam.FHRPGroupAssignment', content_type_field='interface_type', @@ -745,9 +789,6 @@ class Interface(ModularComponentModel, BaseInterface, CabledObjectModel, PathEnd verbose_name = _('interface') verbose_name_plural = _('interfaces') - def get_absolute_url(self): - return reverse('dcim:interface', kwargs={'pk': self.pk}) - def clean(self): super().clean() @@ -957,6 +998,14 @@ class Interface(ModularComponentModel, BaseInterface, CabledObjectModel, PathEnd def l2vpn_termination(self): return self.l2vpn_terminations.first() + @cached_property + def connected_endpoints(self): + # If this is a virtual interface, return the remote endpoint of the connected + # virtual circuit, if any. + if self.is_virtual and hasattr(self, 'virtual_circuit_termination'): + return self.virtual_circuit_termination.peer_terminations + return super().connected_endpoints + # # Pass-through ports @@ -1006,9 +1055,6 @@ class FrontPort(ModularComponentModel, CabledObjectModel, TrackingModelMixin): verbose_name = _('front port') verbose_name_plural = _('front ports') - def get_absolute_url(self): - return reverse('dcim:frontport', kwargs={'pk': self.pk}) - def clean(self): super().clean() @@ -1064,9 +1110,6 @@ class RearPort(ModularComponentModel, CabledObjectModel, TrackingModelMixin): verbose_name = _('rear port') verbose_name_plural = _('rear ports') - def get_absolute_url(self): - return reverse('dcim:rearport', kwargs={'pk': self.pk}) - def clean(self): super().clean() @@ -1123,9 +1166,6 @@ class ModuleBay(ModularComponentModel, TrackingModelMixin, MPTTModel): class MPTTMeta: order_insertion_by = ('module',) - def get_absolute_url(self): - return reverse('dcim:modulebay', kwargs={'pk': self.pk}) - def clean(self): super().clean() @@ -1164,9 +1204,6 @@ class DeviceBay(ComponentModel, TrackingModelMixin): verbose_name = _('device bay') verbose_name_plural = _('device bays') - def get_absolute_url(self): - return reverse('dcim:devicebay', kwargs={'pk': self.pk}) - def clean(self): super().clean() @@ -1210,9 +1247,6 @@ class InventoryItemRole(OrganizationalModel): verbose_name = _('inventory item role') verbose_name_plural = _('inventory item roles') - def get_absolute_url(self): - return reverse('dcim:inventoryitemrole', args=[self.pk]) - class InventoryItem(MPTTModel, ComponentModel, TrackingModelMixin): """ @@ -1243,6 +1277,12 @@ class InventoryItem(MPTTModel, ComponentModel, TrackingModelMixin): ct_field='component_type', fk_field='component_id' ) + status = models.CharField( + verbose_name=_('status'), + max_length=50, + choices=InventoryItemStatusChoices, + default=InventoryItemStatusChoices.STATUS_ACTIVE + ) role = models.ForeignKey( to='dcim.InventoryItemRole', on_delete=models.PROTECT, @@ -1284,10 +1324,10 @@ class InventoryItem(MPTTModel, ComponentModel, TrackingModelMixin): objects = TreeManager() - clone_fields = ('device', 'parent', 'role', 'manufacturer', 'part_id',) + clone_fields = ('device', 'parent', 'role', 'manufacturer', 'status', 'part_id') class Meta: - ordering = ('device__id', 'parent__id', '_name') + ordering = ('device__id', 'parent__id', 'name') indexes = ( models.Index(fields=('component_type', 'component_id')), ) @@ -1300,9 +1340,6 @@ class InventoryItem(MPTTModel, ComponentModel, TrackingModelMixin): verbose_name = _('inventory item') verbose_name_plural = _('inventory items') - def get_absolute_url(self): - return reverse('dcim:inventoryitem', kwargs={'pk': self.pk}) - def clean(self): super().clean() @@ -1333,3 +1370,6 @@ class InventoryItem(MPTTModel, ComponentModel, TrackingModelMixin): raise ValidationError({ "device": _("Cannot assign inventory item to component on another device") }) + + def get_status_color(self): + return InventoryItemStatusChoices.colors.get(self.status) diff --git a/netbox/dcim/models/devices.py b/netbox/dcim/models/devices.py index 0f11cb5f3..6ef5ab488 100644 --- a/netbox/dcim/models/devices.py +++ b/netbox/dcim/models/devices.py @@ -3,6 +3,7 @@ import yaml from functools import cached_property +from django.contrib.contenttypes.fields import GenericForeignKey from django.core.exceptions import ValidationError from django.core.files.storage import default_storage from django.core.validators import MaxValueValidator, MinValueValidator @@ -14,24 +15,28 @@ 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 from extras.models import ConfigContextModel, CustomField from extras.querysets import ConfigContextModelQuerySet from netbox.choices import ColorChoices from netbox.config import ConfigItem from netbox.models import OrganizationalModel, PrimaryModel +from netbox.models.mixins import WeightMixin from netbox.models.features import ContactsMixin, ImageAttachmentsMixin -from utilities.fields import ColorField, CounterCacheField, NaturalOrderingField +from utilities.fields import ColorField, CounterCacheField from utilities.tracking import TrackingModelMixin from .device_components import * -from .mixins import RenderConfigMixin, WeightMixin +from .mixins import RenderConfigMixin __all__ = ( 'Device', 'DeviceRole', 'DeviceType', + 'MACAddress', 'Manufacturer', 'Module', 'ModuleType', @@ -54,9 +59,6 @@ class Manufacturer(ContactsMixin, OrganizationalModel): verbose_name = _('manufacturer') verbose_name_plural = _('manufacturers') - def get_absolute_url(self): - return reverse('dcim:manufacturer', args=[self.pk]) - class DeviceType(ImageAttachmentsMixin, PrimaryModel, WeightMixin): """ @@ -120,6 +122,7 @@ class DeviceType(ImageAttachmentsMixin, PrimaryModel, WeightMixin): max_length=50, choices=SubdeviceRoleChoices, blank=True, + null=True, verbose_name=_('parent/child status'), help_text=_('Parent devices house child devices in device bays. Leave blank ' 'if this device type is neither a parent nor a child.') @@ -128,7 +131,8 @@ class DeviceType(ImageAttachmentsMixin, PrimaryModel, WeightMixin): verbose_name=_('airflow'), max_length=50, choices=DeviceAirflowChoices, - blank=True + blank=True, + null=True ) front_image = models.ImageField( upload_to='devicetype-images', @@ -217,9 +221,6 @@ class DeviceType(ImageAttachmentsMixin, PrimaryModel, WeightMixin): self._original_front_image = self.__dict__.get('front_image') self._original_rear_image = self.__dict__.get('rear_image') - def get_absolute_url(self): - return reverse('dcim:devicetype', args=[self.pk]) - @property def full_name(self): return f"{self.manufacturer} {self.model}" @@ -392,7 +393,8 @@ class ModuleType(ImageAttachmentsMixin, PrimaryModel, WeightMixin): verbose_name=_('airflow'), max_length=50, choices=ModuleAirflowChoices, - blank=True + blank=True, + null=True ) clone_fields = ('manufacturer', 'weight', 'weight_unit', 'airflow') @@ -414,9 +416,6 @@ class ModuleType(ImageAttachmentsMixin, PrimaryModel, WeightMixin): def __str__(self): return self.model - def get_absolute_url(self): - return reverse('dcim:moduletype', args=[self.pk]) - @property def full_name(self): return f"{self.manufacturer} {self.model}" @@ -497,9 +496,6 @@ class DeviceRole(OrganizationalModel): verbose_name = _('device role') verbose_name_plural = _('device roles') - def get_absolute_url(self): - return reverse('dcim:devicerole', args=[self.pk]) - class Platform(OrganizationalModel): """ @@ -527,9 +523,6 @@ class Platform(OrganizationalModel): verbose_name = _('platform') verbose_name_plural = _('platforms') - def get_absolute_url(self): - return reverse('dcim:platform', args=[self.pk]) - def update_interface_bridges(device, interface_templates, module=None): """ @@ -540,7 +533,10 @@ def update_interface_bridges(device, interface_templates, module=None): interface = Interface.objects.get(device=device, name=interface_template.resolve_name(module=module)) if interface_template.bridge: - interface.bridge = Interface.objects.get(device=device, name=interface_template.bridge.resolve_name(module=module)) + interface.bridge = Interface.objects.get( + device=device, + name=interface_template.bridge.resolve_name(module=module) + ) interface.full_clean() interface.save() @@ -593,13 +589,8 @@ class Device( verbose_name=_('name'), max_length=64, blank=True, - null=True - ) - _name = NaturalOrderingField( - target_field='name', - max_length=100, - blank=True, - null=True + null=True, + db_collation="natural_sort" ) serial = models.CharField( max_length=50, @@ -646,6 +637,7 @@ class Device( face = models.CharField( max_length=50, blank=True, + null=True, choices=DeviceFaceChoices, verbose_name=_('rack face') ) @@ -659,7 +651,8 @@ class Device( verbose_name=_('airflow'), max_length=50, choices=DeviceAirflowChoices, - blank=True + blank=True, + null=True ) primary_ip4 = models.OneToOneField( to='ipam.IPAddress', @@ -784,7 +777,7 @@ class Device( ) class Meta: - ordering = ('_name', 'pk') # Name may be null + ordering = ('name', 'pk') # Name may be null constraints = ( models.UniqueConstraint( Lower('name'), 'site', 'tenant', @@ -823,9 +816,6 @@ class Device( return f'{self.device_type.manufacturer} {self.device_type.model} ({self.pk})' return super().__str__() - def get_absolute_url(self): - return reverse('dcim:device', args=[self.pk]) - def clean(self): super().clean() @@ -923,7 +913,10 @@ class Device( }) if self.primary_ip4.assigned_object in vc_interfaces: pass - elif self.primary_ip4.nat_inside is not None and self.primary_ip4.nat_inside.assigned_object in vc_interfaces: + elif ( + self.primary_ip4.nat_inside is not None and + self.primary_ip4.nat_inside.assigned_object in vc_interfaces + ): pass else: raise ValidationError({ @@ -938,7 +931,10 @@ class Device( }) if self.primary_ip6.assigned_object in vc_interfaces: pass - elif self.primary_ip6.nat_inside is not None and self.primary_ip6.nat_inside.assigned_object in vc_interfaces: + elif ( + self.primary_ip6.nat_inside is not None and + self.primary_ip6.nat_inside.assigned_object in vc_interfaces + ): pass else: raise ValidationError({ @@ -970,10 +966,17 @@ class Device( }) # A Device can only be assigned to a Cluster in the same Site (or no Site) - if self.cluster and self.cluster.site is not None and self.cluster.site != self.site: + if self.cluster and self.cluster._site is not None and self.cluster._site != self.site: raise ValidationError({ 'cluster': _("The assigned cluster belongs to a different site ({site})").format( - site=self.cluster.site + site=self.cluster._site + ) + }) + + if self.cluster and self.cluster._location is not None and self.cluster._location != self.location: + raise ValidationError({ + 'cluster': _("The assigned cluster belongs to a different location ({location})").format( + site=self.cluster._location ) }) @@ -985,9 +988,10 @@ class Device( if hasattr(self, 'vc_master_for') and self.vc_master_for and self.vc_master_for != self.virtual_chassis: raise ValidationError({ - 'virtual_chassis': _('Device cannot be removed from virtual chassis {virtual_chassis} because it is currently designated as its master.').format( - virtual_chassis=self.vc_master_for - ) + 'virtual_chassis': _( + 'Device cannot be removed from virtual chassis {virtual_chassis} because it is currently ' + 'designated as its master.' + ).format(virtual_chassis=self.vc_master_for) }) def _instantiate_components(self, queryset, bulk_create=True): @@ -1199,9 +1203,6 @@ class Module(PrimaryModel, ConfigContextModel): def __str__(self): return f'{self.module_bay.name}: {self.module_type} ({self.pk})' - def get_absolute_url(self): - return reverse('dcim:module', args=[self.pk]) - def get_status_color(self): return ModuleStatusChoices.colors.get(self.status) @@ -1277,6 +1278,11 @@ class Module(PrimaryModel, ConfigContextModel): if not disable_replication: create_instances.append(template_instance) + # Set default values for any applicable custom fields + if cf_defaults := CustomField.objects.get_defaults_for_model(component_model): + for component in create_instances: + component.custom_field_data = cf_defaults + if component_model is not ModuleBay: component_model.objects.bulk_create(create_instances) # Emit the post_save signal for each newly created object @@ -1328,7 +1334,8 @@ class VirtualChassis(PrimaryModel): ) name = models.CharField( verbose_name=_('name'), - max_length=64 + max_length=64, + db_collation="natural_sort" ) domain = models.CharField( verbose_name=_('domain'), @@ -1350,9 +1357,6 @@ class VirtualChassis(PrimaryModel): def __str__(self): return self.name - def get_absolute_url(self): - return reverse('dcim:virtualchassis', kwargs={'pk': self.pk}) - def clean(self): super().clean() @@ -1393,7 +1397,8 @@ class VirtualDeviceContext(PrimaryModel): ) name = models.CharField( verbose_name=_('name'), - max_length=64 + max_length=64, + db_collation="natural_sort" ) status = models.CharField( verbose_name=_('status'), @@ -1452,9 +1457,6 @@ class VirtualDeviceContext(PrimaryModel): def __str__(self): return self.name - def get_absolute_url(self): - return reverse('dcim:virtualdevicecontext', kwargs={'pk': self.pk}) - def get_status_color(self): return VirtualDeviceContextStatusChoices.colors.get(self.status) @@ -1487,3 +1489,61 @@ class VirtualDeviceContext(PrimaryModel): raise ValidationError({ f'primary_ip{family}': _('Primary IP address must belong to an interface on the assigned device.') }) + + +# +# Addressing +# + +class MACAddress(PrimaryModel): + mac_address = MACAddressField( + verbose_name=_('MAC address') + ) + assigned_object_type = models.ForeignKey( + to='contenttypes.ContentType', + limit_choices_to=MACADDRESS_ASSIGNMENT_MODELS, + on_delete=models.PROTECT, + related_name='+', + blank=True, + null=True + ) + assigned_object_id = models.PositiveBigIntegerField( + blank=True, + null=True + ) + assigned_object = GenericForeignKey( + ct_field='assigned_object_type', + fk_field='assigned_object_id' + ) + + class Meta: + ordering = ('mac_address',) + verbose_name = _('MAC address') + verbose_name_plural = _('MAC addresses') + + 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 = 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.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") + ) diff --git a/netbox/dcim/models/mixins.py b/netbox/dcim/models/mixins.py index d4a05699c..a0fc15a25 100644 --- a/netbox/dcim/models/mixins.py +++ b/netbox/dcim/models/mixins.py @@ -1,56 +1,16 @@ +from django.apps import apps +from django.contrib.contenttypes.fields import GenericForeignKey from django.core.exceptions import ValidationError from django.db import models from django.utils.translation import gettext_lazy as _ -from dcim.choices import * -from utilities.conversion import to_grams +from dcim.constants import LOCATION_SCOPE_TYPES __all__ = ( + 'CachedScopeMixin', 'RenderConfigMixin', - 'WeightMixin', ) -class WeightMixin(models.Model): - weight = models.DecimalField( - verbose_name=_('weight'), - max_digits=8, - decimal_places=2, - blank=True, - null=True - ) - weight_unit = models.CharField( - verbose_name=_('weight unit'), - max_length=50, - choices=WeightUnitChoices, - blank=True, - ) - # Stores the normalized weight (in grams) for database ordering - _abs_weight = models.PositiveBigIntegerField( - blank=True, - null=True - ) - - class Meta: - abstract = True - - def save(self, *args, **kwargs): - - # Store the given weight (if any) in grams for use in database ordering - if self.weight and self.weight_unit: - self._abs_weight = to_grams(self.weight, self.weight_unit) - else: - self._abs_weight = None - - super().save(*args, **kwargs) - - def clean(self): - super().clean() - - # Validate weight and weight_unit - if self.weight and not self.weight_unit: - raise ValidationError(_("Must specify a unit when setting a weight")) - - class RenderConfigMixin(models.Model): config_template = models.ForeignKey( to='extras.ConfigTemplate', @@ -73,3 +33,90 @@ class RenderConfigMixin(models.Model): return self.role.config_template if self.platform and self.platform.config_template: return self.platform.config_template + + +class CachedScopeMixin(models.Model): + """ + Mixin for adding a GenericForeignKey scope to a model that can point to a Region, SiteGroup, Site, or Location. + Includes cached fields for each to allow efficient filtering. Appropriate validation must be done in the clean() + method as this does not have any as validation is generally model-specific. + """ + scope_type = models.ForeignKey( + to='contenttypes.ContentType', + on_delete=models.PROTECT, + limit_choices_to=models.Q(model__in=LOCATION_SCOPE_TYPES), + related_name='+', + blank=True, + null=True + ) + scope_id = models.PositiveBigIntegerField( + blank=True, + null=True + ) + scope = GenericForeignKey( + ct_field='scope_type', + fk_field='scope_id' + ) + + _location = models.ForeignKey( + to='dcim.Location', + on_delete=models.CASCADE, + blank=True, + null=True + ) + _site = models.ForeignKey( + to='dcim.Site', + on_delete=models.CASCADE, + blank=True, + null=True + ) + _region = models.ForeignKey( + to='dcim.Region', + on_delete=models.CASCADE, + blank=True, + null=True + ) + _site_group = models.ForeignKey( + to='dcim.SiteGroup', + on_delete=models.CASCADE, + blank=True, + null=True + ) + + class Meta: + abstract = True + + def clean(self): + if self.scope_type and not self.scope: + scope_type = self.scope_type.model_class() + raise ValidationError({ + 'scope': _( + "Please select a {scope_type}." + ).format(scope_type=scope_type._meta.model_name) + }) + super().clean() + + def save(self, *args, **kwargs): + # Cache objects associated with the terminating object (for filtering) + self.cache_related_objects() + + super().save(*args, **kwargs) + + def cache_related_objects(self): + self._region = self._site_group = self._site = self._location = None + if self.scope_type: + scope_type = self.scope_type.model_class() + if scope_type == apps.get_model('dcim', 'region'): + self._region = self.scope + elif scope_type == apps.get_model('dcim', 'sitegroup'): + self._site_group = self.scope + elif scope_type == apps.get_model('dcim', 'site'): + self._region = self.scope.region + self._site_group = self.scope.group + self._site = self.scope + elif scope_type == apps.get_model('dcim', 'location'): + self._region = self.scope.site.region + self._site_group = self.scope.site.group + self._site = self.scope.site + self._location = self.scope + cache_related_objects.alters_data = True diff --git a/netbox/dcim/models/power.py b/netbox/dcim/models/power.py index 826eaae9c..284cfe832 100644 --- a/netbox/dcim/models/power.py +++ b/netbox/dcim/models/power.py @@ -1,7 +1,6 @@ from django.core.exceptions import ValidationError from django.core.validators import MaxValueValidator, MinValueValidator from django.db import models -from django.urls import reverse from django.utils.translation import gettext_lazy as _ from dcim.choices import * @@ -37,7 +36,8 @@ class PowerPanel(ContactsMixin, ImageAttachmentsMixin, PrimaryModel): ) name = models.CharField( verbose_name=_('name'), - max_length=100 + max_length=100, + db_collation="natural_sort" ) prerequisite_models = ( @@ -58,9 +58,6 @@ class PowerPanel(ContactsMixin, ImageAttachmentsMixin, PrimaryModel): def __str__(self): return self.name - def get_absolute_url(self): - return reverse('dcim:powerpanel', args=[self.pk]) - def clean(self): super().clean() @@ -90,7 +87,8 @@ class PowerFeed(PrimaryModel, PathEndpoint, CabledObjectModel): ) name = models.CharField( verbose_name=_('name'), - max_length=100 + max_length=100, + db_collation="natural_sort" ) status = models.CharField( verbose_name=_('status'), @@ -167,9 +165,6 @@ class PowerFeed(PrimaryModel, PathEndpoint, CabledObjectModel): def __str__(self): return self.name - def get_absolute_url(self): - return reverse('dcim:powerfeed', args=[self.pk]) - def clean(self): super().clean() diff --git a/netbox/dcim/models/racks.py b/netbox/dcim/models/racks.py index 3aead09ca..7ecbd5d5f 100644 --- a/netbox/dcim/models/racks.py +++ b/netbox/dcim/models/racks.py @@ -8,7 +8,6 @@ from django.core.exceptions import ValidationError from django.core.validators import MaxValueValidator, MinValueValidator from django.db import models from django.db.models import Count -from django.urls import reverse from django.utils.translation import gettext_lazy as _ from dcim.choices import * @@ -16,13 +15,13 @@ from dcim.constants import * from dcim.svg import RackElevationSVG from netbox.choices import ColorChoices from netbox.models import OrganizationalModel, PrimaryModel +from netbox.models.mixins import WeightMixin from netbox.models.features import ContactsMixin, ImageAttachmentsMixin from utilities.conversion import to_grams from utilities.data import array_to_string, drange -from utilities.fields import ColorField, NaturalOrderingField +from utilities.fields import ColorField from .device_components import PowerPort from .devices import Device, Module -from .mixins import WeightMixin from .power import PowerFeed __all__ = ( @@ -84,7 +83,8 @@ class RackBase(WeightMixin, PrimaryModel): verbose_name=_('outer unit'), max_length=50, choices=RackDimensionUnitChoices, - blank=True + blank=True, + null=True ) mounting_depth = models.PositiveSmallIntegerField( verbose_name=_('mounting depth'), @@ -165,9 +165,6 @@ class RackType(RackBase): def __str__(self): return self.model - def get_absolute_url(self): - return reverse('dcim:racktype', args=[self.pk]) - @property def full_name(self): return f"{self.manufacturer} {self.model}" @@ -192,7 +189,7 @@ class RackType(RackBase): # Clear unit if outer width & depth are not set if self.outer_width is None and self.outer_depth is None: - self.outer_unit = '' + self.outer_unit = None super().save(*args, **kwargs) @@ -230,9 +227,6 @@ class RackRole(OrganizationalModel): verbose_name = _('rack role') verbose_name_plural = _('rack roles') - def get_absolute_url(self): - return reverse('dcim:rackrole', args=[self.pk]) - class Rack(ContactsMixin, ImageAttachmentsMixin, RackBase): """ @@ -249,6 +243,7 @@ class Rack(ContactsMixin, ImageAttachmentsMixin, RackBase): choices=RackFormFactorChoices, max_length=50, blank=True, + null=True, verbose_name=_('form factor') ) rack_type = models.ForeignKey( @@ -260,12 +255,8 @@ class Rack(ContactsMixin, ImageAttachmentsMixin, RackBase): ) name = models.CharField( verbose_name=_('name'), - max_length=100 - ) - _name = NaturalOrderingField( - target_field='name', max_length=100, - blank=True + db_collation="natural_sort" ) facility_id = models.CharField( max_length=50, @@ -324,7 +315,8 @@ class Rack(ContactsMixin, ImageAttachmentsMixin, RackBase): verbose_name=_('airflow'), max_length=50, choices=RackAirflowChoices, - blank=True + blank=True, + null=True ) # Generic relations @@ -344,7 +336,7 @@ class Rack(ContactsMixin, ImageAttachmentsMixin, RackBase): ) class Meta: - ordering = ('site', 'location', '_name', 'pk') # (site, location, name) may be non-unique + ordering = ('site', 'location', 'name', 'pk') # (site, location, name) may be non-unique constraints = ( # Name and facility_id must be unique *only* within a Location models.UniqueConstraint( @@ -364,9 +356,6 @@ class Rack(ContactsMixin, ImageAttachmentsMixin, RackBase): return f'{self.name} ({self.facility_id})' return self.name - def get_absolute_url(self): - return reverse('dcim:rack', args=[self.pk]) - def clean(self): super().clean() @@ -385,20 +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': _("Rack must be at least {min_height}U tall to house currently installed devices.").format(min_height=min_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 @@ -419,7 +415,7 @@ class Rack(ContactsMixin, ImageAttachmentsMixin, RackBase): # Clear unit if outer width & depth are not set if self.outer_width is None and self.outer_depth is None: - self.outer_unit = '' + self.outer_unit = None super().save(*args, **kwargs) @@ -699,9 +695,6 @@ class RackReservation(PrimaryModel): def __str__(self): return "Reservation for rack {}".format(self.rack) - def get_absolute_url(self): - return reverse('dcim:rackreservation', args=[self.pk]) - def clean(self): super().clean() diff --git a/netbox/dcim/models/sites.py b/netbox/dcim/models/sites.py index c1da807ad..7880a067f 100644 --- a/netbox/dcim/models/sites.py +++ b/netbox/dcim/models/sites.py @@ -1,7 +1,6 @@ from django.contrib.contenttypes.fields import GenericRelation from django.core.exceptions import ValidationError from django.db import models -from django.urls import reverse from django.utils.translation import gettext_lazy as _ from timezone_field import TimeZoneField @@ -9,7 +8,6 @@ from dcim.choices import * from dcim.constants import * from netbox.models import NestedGroupModel, PrimaryModel from netbox.models.features import ContactsMixin, ImageAttachmentsMixin -from utilities.fields import NaturalOrderingField __all__ = ( 'Location', @@ -29,6 +27,12 @@ class Region(ContactsMixin, NestedGroupModel): states, and/or cities. Regions are recursively nested into a hierarchy: all sites belonging to a child region are also considered to be members of its parent and ancestor region(s). """ + prefixes = GenericRelation( + to='ipam.Prefix', + content_type_field='scope_type', + object_id_field='scope_id', + related_query_name='region' + ) vlan_groups = GenericRelation( to='ipam.VLANGroup', content_type_field='scope_type', @@ -62,9 +66,6 @@ class Region(ContactsMixin, NestedGroupModel): verbose_name = _('region') verbose_name_plural = _('regions') - def get_absolute_url(self): - return reverse('dcim:region', args=[self.pk]) - def get_site_count(self): return Site.objects.filter( Q(region=self) | @@ -82,6 +83,12 @@ class SiteGroup(ContactsMixin, NestedGroupModel): within corporate sites you might distinguish between offices and data centers. Like regions, site groups can be nested recursively to form a hierarchy. """ + prefixes = GenericRelation( + to='ipam.Prefix', + content_type_field='scope_type', + object_id_field='scope_id', + related_query_name='site_group' + ) vlan_groups = GenericRelation( to='ipam.VLANGroup', content_type_field='scope_type', @@ -115,9 +122,6 @@ class SiteGroup(ContactsMixin, NestedGroupModel): verbose_name = _('site group') verbose_name_plural = _('site groups') - def get_absolute_url(self): - return reverse('dcim:sitegroup', args=[self.pk]) - def get_site_count(self): return Site.objects.filter( Q(group=self) | @@ -138,12 +142,8 @@ class Site(ContactsMixin, ImageAttachmentsMixin, PrimaryModel): verbose_name=_('name'), max_length=100, unique=True, - help_text=_("Full name of the site") - ) - _name = NaturalOrderingField( - target_field='name', - max_length=100, - blank=True + help_text=_("Full name of the site"), + db_collation="natural_sort" ) slug = models.SlugField( verbose_name=_('slug'), @@ -189,7 +189,8 @@ class Site(ContactsMixin, ImageAttachmentsMixin, PrimaryModel): blank=True ) time_zone = TimeZoneField( - blank=True + blank=True, + null=True ) physical_address = models.CharField( verbose_name=_('physical address'), @@ -221,6 +222,12 @@ class Site(ContactsMixin, ImageAttachmentsMixin, PrimaryModel): ) # Generic relations + prefixes = GenericRelation( + to='ipam.Prefix', + content_type_field='scope_type', + object_id_field='scope_id', + related_query_name='site' + ) vlan_groups = GenericRelation( to='ipam.VLANGroup', content_type_field='scope_type', @@ -234,16 +241,13 @@ class Site(ContactsMixin, ImageAttachmentsMixin, PrimaryModel): ) class Meta: - ordering = ('_name',) + ordering = ('name',) verbose_name = _('site') verbose_name_plural = _('sites') def __str__(self): return self.name - def get_absolute_url(self): - return reverse('dcim:site', args=[self.pk]) - def get_status_color(self): return SiteStatusChoices.colors.get(self.status) @@ -283,6 +287,12 @@ class Location(ContactsMixin, ImageAttachmentsMixin, NestedGroupModel): ) # Generic relations + prefixes = GenericRelation( + to='ipam.Prefix', + content_type_field='scope_type', + object_id_field='scope_id', + related_query_name='location' + ) vlan_groups = GenericRelation( to='ipam.VLANGroup', content_type_field='scope_type', @@ -322,9 +332,6 @@ class Location(ContactsMixin, ImageAttachmentsMixin, NestedGroupModel): verbose_name = _('location') verbose_name_plural = _('locations') - def get_absolute_url(self): - return reverse('dcim:location', args=[self.pk]) - def get_status_color(self): return LocationStatusChoices.colors.get(self.status) diff --git a/netbox/dcim/search.py b/netbox/dcim/search.py index 45431cb05..b964421de 100644 --- a/netbox/dcim/search.py +++ b/netbox/dcim/search.py @@ -98,19 +98,28 @@ class FrontPortIndex(SearchIndex): display_attrs = ('device', 'label', 'type', 'description') +@register_search +class MACAddressIndex(SearchIndex): + model = models.MACAddress + fields = ( + ('mac_address', 100), + ('description', 500), + ) + display_attrs = ('assigned_object', 'description') + + @register_search class InterfaceIndex(SearchIndex): model = models.Interface fields = ( ('name', 100), ('label', 200), - ('mac_address', 300), ('wwn', 300), ('description', 500), ('mtu', 2000), ('speed', 2000), ) - display_attrs = ('device', 'label', 'type', 'mac_address', 'wwn', 'description') + display_attrs = ('device', 'label', 'type', 'wwn', 'description') @register_search diff --git a/netbox/dcim/signals.py b/netbox/dcim/signals.py index a51872719..6c213d64c 100644 --- a/netbox/dcim/signals.py +++ b/netbox/dcim/signals.py @@ -85,7 +85,8 @@ def update_connected_endpoints(instance, created, raw=False, **kwargs): if instance._terminations_modified: a_terminations = [] b_terminations = [] - for t in instance.terminations.all(): + # Note: instance.terminations.all() is not safe to use here as it might be stale + for t in CableTermination.objects.filter(cable=instance): if t.cable_end == CableEndChoices.SIDE_A: a_terminations.append(t.termination) else: diff --git a/netbox/dcim/svg/cables.py b/netbox/dcim/svg/cables.py index 4e0f7aea6..58fa27c6b 100644 --- a/netbox/dcim/svg/cables.py +++ b/netbox/dcim/svg/cables.py @@ -362,7 +362,7 @@ class CableTraceSVG: self.cursor += CABLE_HEIGHT # Connector (a Cable or WirelessLink) - if links: + if links and far_ends: obj_list = {end.parent_object for end in far_ends} parent_object_nodes, far_terminations = self.draw_far_objects(obj_list, far_ends) diff --git a/netbox/dcim/svg/racks.py b/netbox/dcim/svg/racks.py index 0f73095b5..94dbeeac2 100644 --- a/netbox/dcim/svg/racks.py +++ b/netbox/dcim/svg/racks.py @@ -48,6 +48,7 @@ def get_device_description(device): Name: Role: + Status: Device Type: () Asset tag: (if defined) Serial: (if defined) @@ -55,6 +56,7 @@ def get_device_description(device): """ description = f'Name: {device.name}' description += f'\nRole: {device.role}' + description += f'\nStatus: {device.get_status_display()}' u_height = f'{floatformat(device.device_type.u_height)}U' description += f'\nDevice Type: {device.device_type.manufacturer.name} {device.device_type.model} ({u_height})' if device.asset_tag: @@ -153,7 +155,10 @@ class RackElevationSVG: if self.rack.desc_units: y += int((position - self.rack.starting_unit) * self.unit_height) else: - y += int((self.rack.u_height - position + self.rack.starting_unit) * self.unit_height) - int(height * self.unit_height) + y += ( + int((self.rack.u_height - position + self.rack.starting_unit) * self.unit_height) - + int(height * self.unit_height) + ) return x, y diff --git a/netbox/dcim/tables/devices.py b/netbox/dcim/tables/devices.py index 70b297366..d4f2f74b3 100644 --- a/netbox/dcim/tables/devices.py +++ b/netbox/dcim/tables/devices.py @@ -29,6 +29,7 @@ __all__ = ( 'InterfaceTable', 'InventoryItemRoleTable', 'InventoryItemTable', + 'MACAddressTable', 'ModuleBayTable', 'PlatformTable', 'PowerOutletTable', @@ -42,6 +43,16 @@ MODULEBAY_STATUS = """ {% badge record.installed_module.get_status_display bg_color=record.installed_module.get_status_color %} """ +MACADDRESS_LINK = """ +{% if record.pk %} + {{ record.mac_address }} +{% endif %} +""" + +MACADDRESS_COPY_BUTTON = """ +{% copy_content record.pk prefix="macaddress_" %} +""" + # # Device roles @@ -132,7 +143,6 @@ class PlatformTable(NetBoxTable): class DeviceTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable): name = tables.TemplateColumn( verbose_name=_('Name'), - order_by=('_name',), template_code=DEVICE_LINK, linkify=True ) @@ -288,7 +298,6 @@ class DeviceComponentTable(NetBoxTable): name = tables.Column( verbose_name=_('Name'), linkify=True, - order_by=('_name',) ) device_status = columns.ChoiceFieldColumn( accessor=tables.A('device__status'), @@ -382,7 +391,8 @@ class ConsolePortTable(ModularDeviceComponentTable, PathEndpointTable): model = models.ConsolePort fields = ( 'pk', 'id', 'name', 'device', 'module_bay', 'module', 'label', 'type', 'speed', 'description', - 'mark_connected', 'cable', 'cable_color', 'link_peer', 'connection', 'inventory_items', 'tags', 'created', 'last_updated', + 'mark_connected', 'cable', 'cable_color', 'link_peer', 'connection', 'inventory_items', 'tags', 'created', + 'last_updated', ) default_columns = ('pk', 'name', 'device', 'label', 'type', 'speed', 'description') @@ -391,7 +401,6 @@ class DeviceConsolePortTable(ConsolePortTable): name = tables.TemplateColumn( verbose_name=_('Name'), template_code=' {{ value }}', - order_by=Accessor('_name'), attrs={'td': {'class': 'text-nowrap'}} ) actions = columns.ActionsColumn( @@ -423,7 +432,8 @@ class ConsoleServerPortTable(ModularDeviceComponentTable, PathEndpointTable): model = models.ConsoleServerPort fields = ( 'pk', 'id', 'name', 'device', 'module_bay', 'module', 'label', 'type', 'speed', 'description', - 'mark_connected', 'cable', 'cable_color', 'link_peer', 'connection', 'inventory_items', 'tags', 'created', 'last_updated', + 'mark_connected', 'cable', 'cable_color', 'link_peer', 'connection', 'inventory_items', 'tags', 'created', + 'last_updated', ) default_columns = ('pk', 'name', 'device', 'label', 'type', 'speed', 'description') @@ -433,7 +443,6 @@ class DeviceConsoleServerPortTable(ConsoleServerPortTable): verbose_name=_('Name'), template_code=' ' '{{ value }}', - order_by=Accessor('_name'), attrs={'td': {'class': 'text-nowrap'}} ) actions = columns.ActionsColumn( @@ -482,7 +491,6 @@ class DevicePowerPortTable(PowerPortTable): verbose_name=_('Name'), template_code=' ' '{{ value }}', - order_by=Accessor('_name'), attrs={'td': {'class': 'text-nowrap'}} ) actions = columns.ActionsColumn( @@ -512,6 +520,7 @@ class PowerOutletTable(ModularDeviceComponentTable, PathEndpointTable): verbose_name=_('Power Port'), linkify=True ) + color = columns.ColorColumn() tags = columns.TagColumn( url_name='dcim:poweroutlet_list' ) @@ -520,17 +529,16 @@ class PowerOutletTable(ModularDeviceComponentTable, PathEndpointTable): model = models.PowerOutlet fields = ( 'pk', 'id', 'name', 'device', 'module_bay', 'module', 'label', 'type', 'description', 'power_port', - 'feed_leg', 'mark_connected', 'cable', 'cable_color', 'link_peer', 'connection', 'inventory_items', + 'color', 'feed_leg', 'mark_connected', 'cable', 'cable_color', 'link_peer', 'connection', 'inventory_items', 'tags', 'created', 'last_updated', ) - default_columns = ('pk', 'name', 'device', 'label', 'type', 'power_port', 'feed_leg', 'description') + default_columns = ('pk', 'name', 'device', 'label', 'type', 'color', 'power_port', 'feed_leg', 'description') class DevicePowerOutletTable(PowerOutletTable): name = tables.TemplateColumn( verbose_name=_('Name'), template_code=' {{ value }}', - order_by=Accessor('_name'), attrs={'td': {'class': 'text-nowrap'}} ) actions = columns.ActionsColumn( @@ -540,15 +548,20 @@ class DevicePowerOutletTable(PowerOutletTable): class Meta(CableTerminationTable.Meta, DeviceComponentTable.Meta): model = models.PowerOutlet fields = ( - 'pk', 'id', 'name', 'module_bay', 'module', 'label', 'type', 'power_port', 'feed_leg', 'description', - 'mark_connected', 'cable', 'cable_color', 'link_peer', 'connection', 'tags', 'actions', + 'pk', 'id', 'name', 'module_bay', 'module', 'label', 'type', 'color', 'power_port', 'feed_leg', + 'description', 'mark_connected', 'cable', 'cable_color', 'link_peer', 'connection', 'tags', 'actions', ) default_columns = ( - 'pk', 'name', 'label', 'type', 'power_port', 'feed_leg', 'description', 'cable', 'connection', + 'pk', 'name', 'label', 'type', 'color', 'power_port', 'feed_leg', 'description', 'cable', 'connection', ) class BaseInterfaceTable(NetBoxTable): + name = tables.Column( + verbose_name=_('Name'), + linkify=True, + order_by=('_name',) + ) enabled = columns.BooleanColumn( verbose_name=_('Enabled'), ) @@ -584,6 +597,14 @@ class BaseInterfaceTable(NetBoxTable): orderable=False, verbose_name=_('Tagged VLANs') ) + qinq_svlan = tables.Column( + verbose_name=_('Q-in-Q SVLAN'), + linkify=True + ) + primary_mac_address = tables.Column( + verbose_name=_('MAC Address'), + linkify=True + ) def value_ip_addresses(self, value): return ",".join([str(obj.address) for obj in value.all()]) @@ -592,7 +613,7 @@ class BaseInterfaceTable(NetBoxTable): return ",".join([str(obj) for obj in value.all()]) -class InterfaceTable(ModularDeviceComponentTable, BaseInterfaceTable, PathEndpointTable): +class InterfaceTable(BaseInterfaceTable, ModularDeviceComponentTable, PathEndpointTable): device = tables.Column( verbose_name=_('Device'), linkify={ @@ -626,19 +647,31 @@ class InterfaceTable(ModularDeviceComponentTable, BaseInterfaceTable, PathEndpoi verbose_name=_('VRF'), linkify=True ) + virtual_circuit_termination = tables.Column( + verbose_name=_('Virtual Circuit'), + linkify=True + ) tags = columns.TagColumn( url_name='dcim:interface_list' ) + # Override PathEndpointTable.connection to accommodate virtual circuits + connection = columns.TemplateColumn( + accessor='_path__destinations', + template_code=INTERFACE_LINKTERMINATION, + verbose_name=_('Connection'), + orderable=False + ) + class Meta(DeviceComponentTable.Meta): model = models.Interface fields = ( 'pk', 'id', 'name', 'device', 'module_bay', 'module', 'label', 'enabled', 'type', 'mgmt_only', 'mtu', - 'speed', 'speed_formatted', 'duplex', 'mode', 'mac_address', 'wwn', 'poe_mode', 'poe_type', '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', 'inventory_items', 'created', - 'last_updated', + 'speed', 'speed_formatted', 'duplex', 'mode', 'primary_mac_address', 'wwn', 'poe_mode', 'poe_type', + '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', 'inventory_items', 'created', 'last_updated', ) default_columns = ('pk', 'name', 'device', 'label', 'enabled', 'type', 'description') @@ -672,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', 'wwn', 'rf_role', 'rf_channel', 'rf_channel_frequency', + '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', 'actions', + 'fhrp_groups', 'untagged_vlan', 'tagged_vlans', 'qinq_svlan', 'actions', ) default_columns = ( 'pk', 'name', 'label', 'enabled', 'type', 'parent', 'lag', 'mtu', 'mode', 'description', 'ip_addresses', @@ -731,7 +764,6 @@ class DeviceFrontPortTable(FrontPortTable): verbose_name=_('Name'), template_code=' ' '{{ value }}', - order_by=Accessor('_name'), attrs={'td': {'class': 'text-nowrap'}} ) actions = columns.ActionsColumn( @@ -778,7 +810,6 @@ class DeviceRearPortTable(RearPortTable): verbose_name=_('Name'), template_code=' ' '{{ value }}', - order_by=Accessor('_name'), attrs={'td': {'class': 'text-nowrap'}} ) actions = columns.ActionsColumn( @@ -841,7 +872,6 @@ class DeviceDeviceBayTable(DeviceBayTable): verbose_name=_('Name'), template_code=' {{ value }}', - order_by=Accessor('_name'), attrs={'td': {'class': 'text-nowrap'}} ) actions = columns.ActionsColumn( @@ -910,7 +940,6 @@ class DeviceModuleBayTable(ModuleBayTable): name = columns.MPTTColumn( verbose_name=_('Name'), linkify=True, - order_by=Accessor('_name') ) actions = columns.ActionsColumn( extra_buttons=MODULEBAY_BUTTONS @@ -949,6 +978,9 @@ class InventoryItemTable(DeviceComponentTable): verbose_name=_('Discovered'), false_mark=None ) + status = columns.ChoiceFieldColumn( + verbose_name=_('Status'), + ) parent = tables.Column( linkify=True, verbose_name=_('Parent'), @@ -961,11 +993,11 @@ class InventoryItemTable(DeviceComponentTable): class Meta(NetBoxTable.Meta): model = models.InventoryItem fields = ( - 'pk', 'id', 'name', 'device', 'parent', 'component', 'label', 'role', 'manufacturer', 'part_id', 'serial', - 'asset_tag', 'description', 'discovered', 'tags', 'created', 'last_updated', + 'pk', 'id', 'name', 'device', 'parent', 'component', 'label', 'status', 'role', 'manufacturer', 'part_id', + 'serial', 'asset_tag', 'description', 'discovered', 'tags', 'created', 'last_updated', ) default_columns = ( - 'pk', 'name', 'device', 'label', 'role', 'manufacturer', 'part_id', 'serial', 'asset_tag', + 'pk', 'name', 'device', 'label', 'status', 'role', 'manufacturer', 'part_id', 'serial', 'asset_tag', ) @@ -974,18 +1006,17 @@ class DeviceInventoryItemTable(InventoryItemTable): verbose_name=_('Name'), template_code='' '{{ value }}', - order_by=Accessor('_name'), attrs={'td': {'class': 'text-nowrap'}} ) class Meta(NetBoxTable.Meta): model = models.InventoryItem fields = ( - 'pk', 'id', 'name', 'label', 'role', 'manufacturer', 'part_id', 'serial', 'asset_tag', 'component', - 'description', 'discovered', 'tags', 'actions', + 'pk', 'id', 'name', 'label', 'status', 'role', 'manufacturer', 'part_id', 'serial', 'asset_tag', + 'component', 'description', 'discovered', 'tags', 'actions', ) default_columns = ( - 'pk', 'name', 'label', 'role', 'manufacturer', 'part_id', 'serial', 'asset_tag', 'component', + 'pk', 'name', 'label', 'status', 'role', 'manufacturer', 'part_id', 'serial', 'asset_tag', 'component', ) @@ -1096,3 +1127,35 @@ class VirtualDeviceContextTable(TenancyColumnsMixin, NetBoxTable): default_columns = ( 'pk', 'name', 'identifier', 'status', 'tenant', 'primary_ip', ) + + +class MACAddressTable(NetBoxTable): + mac_address = tables.TemplateColumn( + template_code=MACADDRESS_LINK, + verbose_name=_('MAC Address') + ) + assigned_object = tables.Column( + linkify=True, + orderable=False, + verbose_name=_('Interface') + ) + assigned_object_parent = tables.Column( + accessor='assigned_object__parent_object', + linkify=True, + orderable=False, + verbose_name=_('Parent') + ) + tags = columns.TagColumn( + url_name='dcim:macaddress_list' + ) + actions = columns.ActionsColumn( + extra_buttons=MACADDRESS_COPY_BUTTON + ) + + class Meta(DeviceComponentTable.Meta): + model = models.MACAddress + fields = ( + 'pk', 'id', 'mac_address', 'assigned_object_parent', 'assigned_object', 'description', 'comments', 'tags', + 'created', 'last_updated', + ) + default_columns = ('pk', 'mac_address', 'assigned_object_parent', 'assigned_object', 'description') diff --git a/netbox/dcim/tables/devicetypes.py b/netbox/dcim/tables/devicetypes.py index e8a4e35f1..a7f8f08e8 100644 --- a/netbox/dcim/tables/devicetypes.py +++ b/netbox/dcim/tables/devicetypes.py @@ -163,9 +163,7 @@ class ComponentTemplateTable(NetBoxTable): id = tables.Column( verbose_name=_('ID') ) - name = tables.Column( - order_by=('_name',) - ) + name = tables.Column() class Meta(NetBoxTable.Meta): exclude = ('id', ) @@ -220,6 +218,10 @@ class PowerOutletTemplateTable(ComponentTemplateTable): class InterfaceTemplateTable(ComponentTemplateTable): + name = tables.Column( + verbose_name=_('Name'), + order_by=('_name',) + ) enabled = columns.BooleanColumn( verbose_name=_('Enabled'), ) diff --git a/netbox/dcim/tables/modules.py b/netbox/dcim/tables/modules.py index 5b06e08b2..6bd0d53b5 100644 --- a/netbox/dcim/tables/modules.py +++ b/netbox/dcim/tables/modules.py @@ -41,6 +41,7 @@ class ModuleTypeTable(NetBoxTable): model = ModuleType fields = ( 'pk', 'id', 'model', 'manufacturer', 'part_number', 'airflow', 'weight', 'description', 'comments', 'tags', + 'created', 'last_updated', ) default_columns = ( 'pk', 'model', 'manufacturer', 'part_number', @@ -79,7 +80,7 @@ class ModuleTable(NetBoxTable): model = Module fields = ( 'pk', 'id', 'device', 'module_bay', 'manufacturer', 'module_type', 'status', 'serial', 'asset_tag', - 'description', 'comments', 'tags', + 'description', 'comments', 'tags', 'created', 'last_updated', ) default_columns = ( 'pk', 'id', 'device', 'module_bay', 'manufacturer', 'module_type', 'status', 'serial', 'asset_tag', diff --git a/netbox/dcim/tables/racks.py b/netbox/dcim/tables/racks.py index a6b704161..dbd99ca24 100644 --- a/netbox/dcim/tables/racks.py +++ b/netbox/dcim/tables/racks.py @@ -111,7 +111,6 @@ class RackTypeTable(NetBoxTable): class RackTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable): name = tables.Column( verbose_name=_('Name'), - order_by=('_name',), linkify=True ) location = tables.Column( diff --git a/netbox/dcim/tables/template_code.py b/netbox/dcim/tables/template_code.py index 96ab803e6..4b51cd06a 100644 --- a/netbox/dcim/tables/template_code.py +++ b/netbox/dcim/tables/template_code.py @@ -10,6 +10,20 @@ LINKTERMINATION = """ {% endfor %} """ +INTERFACE_LINKTERMINATION = """ +{% load i18n %} +{% if record.is_virtual and record.virtual_circuit_termination %} + {% for termination in record.connected_endpoints %} + {{ termination.interface.parent_object }} + + {{ termination.interface }} + {% trans "via" %} + {{ termination.parent_object }} + {% if not forloop.last %}
{% endif %} + {% endfor %} +{% else %}""" + LINKTERMINATION + """{% endif %} +""" + CABLE_LENGTH = """ {% load helpers %} {% if record.length %}{{ record.length|floatformat:"-2" }} {{ record.length_unit }}{% endif %} @@ -55,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 %} """ @@ -314,6 +330,9 @@ INTERFACE_BUTTONS = """ {% if perms.ipam.add_ipaddress %}
  • IP Address
  • {% endif %} + {% if perms.dcim.add_macaddress %} +
  • MAC Address
  • + {% endif %} {% if perms.dcim.add_inventoryitem %}
  • Inventory Item
  • {% endif %} @@ -373,6 +392,15 @@ INTERFACE_BUTTONS = """ {% endif %} + {% if perms.circuits.add_virtualcircuittermination and not record.virtual_circuit_termination %} + + + + {% elif perms.circuits.delete_virtualcircuittermination and record.virtual_circuit_termination %} + + + + {% endif %} {% elif record.is_wired and perms.dcim.add_cable %} diff --git a/netbox/dcim/tests/test_api.py b/netbox/dcim/tests/test_api.py index 1b460cd59..99a446aef 100644 --- a/netbox/dcim/tests/test_api.py +++ b/netbox/dcim/tests/test_api.py @@ -7,6 +7,7 @@ from dcim.choices import * from dcim.constants import * from dcim.models import * from extras.models import ConfigTemplate +from ipam.choices import VLANQinQRoleChoices from ipam.models import ASN, RIR, VLAN, VRF from netbox.api.serializers import GenericObjectSerializer from tenancy.models import Tenant @@ -204,13 +205,41 @@ class LocationTest(APIViewTestCases.APIViewTestCase): Site.objects.bulk_create(sites) parent_locations = ( - Location.objects.create(site=sites[0], name='Parent Location 1', slug='parent-location-1', status=LocationStatusChoices.STATUS_ACTIVE), - Location.objects.create(site=sites[1], name='Parent Location 2', slug='parent-location-2', status=LocationStatusChoices.STATUS_ACTIVE), + Location.objects.create( + site=sites[0], + name='Parent Location 1', + slug='parent-location-1', + status=LocationStatusChoices.STATUS_ACTIVE, + ), + Location.objects.create( + site=sites[1], + name='Parent Location 2', + slug='parent-location-2', + status=LocationStatusChoices.STATUS_ACTIVE, + ), ) - Location.objects.create(site=sites[0], name='Location 1', slug='location-1', parent=parent_locations[0], status=LocationStatusChoices.STATUS_ACTIVE) - Location.objects.create(site=sites[0], name='Location 2', slug='location-2', parent=parent_locations[0], status=LocationStatusChoices.STATUS_ACTIVE) - Location.objects.create(site=sites[0], name='Location 3', slug='location-3', parent=parent_locations[0], status=LocationStatusChoices.STATUS_ACTIVE) + Location.objects.create( + site=sites[0], + name='Location 1', + slug='location-1', + parent=parent_locations[0], + status=LocationStatusChoices.STATUS_ACTIVE, + ) + Location.objects.create( + site=sites[0], + name='Location 2', + slug='location-2', + parent=parent_locations[0], + status=LocationStatusChoices.STATUS_ACTIVE, + ) + Location.objects.create( + site=sites[0], + name='Location 3', + slug='location-3', + parent=parent_locations[0], + status=LocationStatusChoices.STATUS_ACTIVE, + ) cls.create_data = [ { @@ -289,9 +318,24 @@ class RackTypeTest(APIViewTestCases.APIViewTestCase): Manufacturer.objects.bulk_create(manufacturers) rack_types = ( - RackType(manufacturer=manufacturers[0], model='Rack Type 1', slug='rack-type-1', form_factor=RackFormFactorChoices.TYPE_CABINET,), - RackType(manufacturer=manufacturers[0], model='Rack Type 2', slug='rack-type-2', form_factor=RackFormFactorChoices.TYPE_CABINET,), - RackType(manufacturer=manufacturers[0], model='Rack Type 3', slug='rack-type-3', form_factor=RackFormFactorChoices.TYPE_CABINET,), + RackType( + manufacturer=manufacturers[0], + model='Rack Type 1', + slug='rack-type-1', + form_factor=RackFormFactorChoices.TYPE_CABINET, + ), + RackType( + manufacturer=manufacturers[0], + model='Rack Type 2', + slug='rack-type-2', + form_factor=RackFormFactorChoices.TYPE_CABINET, + ), + RackType( + manufacturer=manufacturers[0], + model='Rack Type 3', + slug='rack-type-3', + form_factor=RackFormFactorChoices.TYPE_CABINET, + ), ) RackType.objects.bulk_create(rack_types) @@ -1049,10 +1093,18 @@ class InventoryItemTemplateTest(APIViewTestCases.APIViewTestCase): role = InventoryItemRole.objects.create(name='Inventory Item Role 1', slug='inventory-item-role-1') inventory_item_templates = ( - InventoryItemTemplate(device_type=devicetype, name='Inventory Item Template 1', manufacturer=manufacturer, role=role), - InventoryItemTemplate(device_type=devicetype, name='Inventory Item Template 2', manufacturer=manufacturer, role=role), - InventoryItemTemplate(device_type=devicetype, name='Inventory Item Template 3', manufacturer=manufacturer, role=role), - InventoryItemTemplate(device_type=devicetype, name='Inventory Item Template 4', manufacturer=manufacturer, role=role), + InventoryItemTemplate( + device_type=devicetype, name='Inventory Item Template 1', manufacturer=manufacturer, role=role + ), + InventoryItemTemplate( + device_type=devicetype, name='Inventory Item Template 2', manufacturer=manufacturer, role=role + ), + InventoryItemTemplate( + device_type=devicetype, name='Inventory Item Template 3', manufacturer=manufacturer, role=role + ), + InventoryItemTemplate( + device_type=devicetype, name='Inventory Item Template 4', manufacturer=manufacturer, role=role + ), ) for item in inventory_item_templates: item.save() @@ -1618,6 +1670,7 @@ class InterfaceTest(Mixins.ComponentTraceMixin, APIViewTestCases.APIViewTestCase VLAN(name='VLAN 1', vid=1), VLAN(name='VLAN 2', vid=2), VLAN(name='VLAN 3', vid=3), + VLAN(name='SVLAN 1', vid=1001, qinq_role=VLANQinQRoleChoices.ROLE_SERVICE), ) VLAN.objects.bulk_create(vlans) @@ -1676,18 +1729,22 @@ class InterfaceTest(Mixins.ComponentTraceMixin, APIViewTestCases.APIViewTestCase 'vdcs': [vdcs[1].pk], 'name': 'Interface 7', 'type': InterfaceTypeChoices.TYPE_80211A, + 'mode': InterfaceModeChoices.MODE_Q_IN_Q, 'tx_power': 10, 'wireless_lans': [wireless_lans[0].pk, wireless_lans[1].pk], 'rf_channel': WirelessChannelChoices.CHANNEL_5G_32, + 'qinq_svlan': vlans[3].pk, }, { 'device': device.pk, 'vdcs': [vdcs[1].pk], 'name': 'Interface 8', 'type': InterfaceTypeChoices.TYPE_80211A, + 'mode': InterfaceModeChoices.MODE_Q_IN_Q, 'tx_power': 10, 'wireless_lans': [wireless_lans[0].pk, wireless_lans[1].pk], 'rf_channel': "", + 'qinq_svlan': vlans[3].pk, }, ] @@ -1955,9 +2012,15 @@ class InventoryItemTest(APIViewTestCases.APIViewTestCase): ) Interface.objects.bulk_create(interfaces) - InventoryItem.objects.create(device=device, name='Inventory Item 1', role=roles[0], manufacturer=manufacturer, component=interfaces[0]) - InventoryItem.objects.create(device=device, name='Inventory Item 2', role=roles[0], manufacturer=manufacturer, component=interfaces[1]) - InventoryItem.objects.create(device=device, name='Inventory Item 3', role=roles[0], manufacturer=manufacturer, component=interfaces[2]) + InventoryItem.objects.create( + device=device, name='Inventory Item 1', role=roles[0], manufacturer=manufacturer, component=interfaces[0] + ) + InventoryItem.objects.create( + device=device, name='Inventory Item 2', role=roles[0], manufacturer=manufacturer, component=interfaces[1] + ) + InventoryItem.objects.create( + device=device, name='Inventory Item 3', role=roles[0], manufacturer=manufacturer, component=interfaces[2] + ) cls.create_data = [ { @@ -2384,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_cablepaths.py b/netbox/dcim/tests/test_cablepaths.py index f7c337bdf..1acc9a8a1 100644 --- a/netbox/dcim/tests/test_cablepaths.py +++ b/netbox/dcim/tests/test_cablepaths.py @@ -661,24 +661,64 @@ class CablePathTestCase(TestCase): ) cable5.save() path1 = self.assertPathExists( - ([interface1, interface2], cable1, frontport1_1, rearport1, cable3, rearport2, frontport2_1, cable4, [interface5, interface6]), + ( + [interface1, interface2], + cable1, + frontport1_1, + rearport1, + cable3, + rearport2, + frontport2_1, + cable4, + [interface5, interface6], + ), is_complete=True, - is_active=True + is_active=True, ) path2 = self.assertPathExists( - ([interface3, interface4], cable2, frontport1_2, rearport1, cable3, rearport2, frontport2_2, cable5, [interface7, interface8]), + ( + [interface3, interface4], + cable2, + frontport1_2, + rearport1, + cable3, + rearport2, + frontport2_2, + cable5, + [interface7, interface8], + ), is_complete=True, - is_active=True + is_active=True, ) path3 = self.assertPathExists( - ([interface5, interface6], cable4, frontport2_1, rearport2, cable3, rearport1, frontport1_1, cable1, [interface1, interface2]), + ( + [interface5, interface6], + cable4, + frontport2_1, + rearport2, + cable3, + rearport1, + frontport1_1, + cable1, + [interface1, interface2], + ), is_complete=True, - is_active=True + is_active=True, ) path4 = self.assertPathExists( - ([interface7, interface8], cable5, frontport2_2, rearport2, cable3, rearport1, frontport1_2, cable2, [interface3, interface4]), + ( + [interface7, interface8], + cable5, + frontport2_2, + rearport2, + cable3, + rearport1, + frontport1_2, + cable2, + [interface3, interface4], + ), is_complete=True, - is_active=True + is_active=True, ) self.assertEqual(CablePath.objects.count(), 4) @@ -1167,7 +1207,11 @@ class CablePathTestCase(TestCase): [IF1] --C1-- [CT1] """ interface1 = Interface.objects.create(device=self.device, name='Interface 1') - circuittermination1 = CircuitTermination.objects.create(circuit=self.circuit, site=self.site, term_side='A') + circuittermination1 = CircuitTermination.objects.create( + circuit=self.circuit, + termination=self.site, + term_side='A' + ) # Create cable 1 cable1 = Cable( @@ -1198,7 +1242,11 @@ class CablePathTestCase(TestCase): """ interface1 = Interface.objects.create(device=self.device, name='Interface 1') interface2 = Interface.objects.create(device=self.device, name='Interface 2') - circuittermination1 = CircuitTermination.objects.create(circuit=self.circuit, site=self.site, term_side='A') + circuittermination1 = CircuitTermination.objects.create( + circuit=self.circuit, + termination=self.site, + term_side='A' + ) # Create cable 1 cable1 = Cable( @@ -1214,7 +1262,11 @@ class CablePathTestCase(TestCase): ) # Create CT2 - circuittermination2 = CircuitTermination.objects.create(circuit=self.circuit, site=self.site, term_side='Z') + circuittermination2 = CircuitTermination.objects.create( + circuit=self.circuit, + termination=self.site, + term_side='Z' + ) # Check for partial path to site self.assertPathExists( @@ -1266,7 +1318,11 @@ class CablePathTestCase(TestCase): interface2 = Interface.objects.create(device=self.device, name='Interface 2') interface3 = Interface.objects.create(device=self.device, name='Interface 3') interface4 = Interface.objects.create(device=self.device, name='Interface 4') - circuittermination1 = CircuitTermination.objects.create(circuit=self.circuit, site=self.site, term_side='A') + circuittermination1 = CircuitTermination.objects.create( + circuit=self.circuit, + termination=self.site, + term_side='A' + ) # Create cable 1 cable1 = Cable( @@ -1282,7 +1338,11 @@ class CablePathTestCase(TestCase): ) # Create CT2 - circuittermination2 = CircuitTermination.objects.create(circuit=self.circuit, site=self.site, term_side='Z') + circuittermination2 = CircuitTermination.objects.create( + circuit=self.circuit, + termination=self.site, + term_side='Z' + ) # Check for partial path to site self.assertPathExists( @@ -1299,14 +1359,28 @@ class CablePathTestCase(TestCase): # Check for complete path in each direction self.assertPathExists( - ([interface1, interface2], cable1, circuittermination1, circuittermination2, cable2, [interface3, interface4]), + ( + [interface1, interface2], + cable1, + circuittermination1, + circuittermination2, + cable2, + [interface3, interface4], + ), is_complete=True, - is_active=True + is_active=True, ) self.assertPathExists( - ([interface3, interface4], cable2, circuittermination2, circuittermination1, cable1, [interface1, interface2]), + ( + [interface3, interface4], + cable2, + circuittermination2, + circuittermination1, + cable1, + [interface1, interface2], + ), is_complete=True, - is_active=True + is_active=True, ) self.assertEqual(CablePath.objects.count(), 2) @@ -1335,8 +1409,16 @@ class CablePathTestCase(TestCase): """ interface1 = Interface.objects.create(device=self.device, name='Interface 1') site2 = Site.objects.create(name='Site 2', slug='site-2') - circuittermination1 = CircuitTermination.objects.create(circuit=self.circuit, site=self.site, term_side='A') - circuittermination2 = CircuitTermination.objects.create(circuit=self.circuit, site=site2, term_side='Z') + circuittermination1 = CircuitTermination.objects.create( + circuit=self.circuit, + termination=self.site, + term_side='A' + ) + circuittermination2 = CircuitTermination.objects.create( + circuit=self.circuit, + termination=site2, + term_side='Z' + ) # Create cable 1 cable1 = Cable( @@ -1365,8 +1447,16 @@ class CablePathTestCase(TestCase): """ interface1 = Interface.objects.create(device=self.device, name='Interface 1') providernetwork = ProviderNetwork.objects.create(name='Provider Network 1', provider=self.circuit.provider) - circuittermination1 = CircuitTermination.objects.create(circuit=self.circuit, site=self.site, term_side='A') - circuittermination2 = CircuitTermination.objects.create(circuit=self.circuit, provider_network=providernetwork, term_side='Z') + circuittermination1 = CircuitTermination.objects.create( + circuit=self.circuit, + termination=self.site, + term_side='A' + ) + circuittermination2 = CircuitTermination.objects.create( + circuit=self.circuit, + termination=providernetwork, + term_side='Z' + ) # Create cable 1 cable1 = Cable( @@ -1413,8 +1503,15 @@ class CablePathTestCase(TestCase): frontport2_2 = FrontPort.objects.create( device=self.device, name='Front Port 2:2', rear_port=rearport2, rear_port_position=2 ) - circuittermination1 = CircuitTermination.objects.create(circuit=self.circuit, site=self.site, term_side='A') - circuittermination2 = CircuitTermination.objects.create(circuit=self.circuit, site=self.site, term_side='Z') + circuittermination1 = CircuitTermination.objects.create( + circuit=self.circuit, + termination=self.site, + term_side='A' + ) + circuittermination2 = CircuitTermination.objects.create( + circuit=self.circuit, + termination=self.site, term_side='Z' + ) # Create cables cable1 = Cable( @@ -1499,10 +1596,26 @@ class CablePathTestCase(TestCase): interface1 = Interface.objects.create(device=self.device, name='Interface 1') interface2 = Interface.objects.create(device=self.device, name='Interface 2') circuit2 = Circuit.objects.create(provider=self.circuit.provider, type=self.circuit.type, cid='Circuit 2') - circuittermination1 = CircuitTermination.objects.create(circuit=self.circuit, site=self.site, term_side='A') - circuittermination2 = CircuitTermination.objects.create(circuit=self.circuit, site=self.site, term_side='Z') - circuittermination3 = CircuitTermination.objects.create(circuit=circuit2, site=self.site, term_side='A') - circuittermination4 = CircuitTermination.objects.create(circuit=circuit2, site=self.site, term_side='Z') + circuittermination1 = CircuitTermination.objects.create( + circuit=self.circuit, + termination=self.site, + term_side='A' + ) + circuittermination2 = CircuitTermination.objects.create( + circuit=self.circuit, + termination=self.site, + term_side='Z' + ) + circuittermination3 = CircuitTermination.objects.create( + circuit=circuit2, + termination=self.site, + term_side='A' + ) + circuittermination4 = CircuitTermination.objects.create( + circuit=circuit2, + termination=self.site, + term_side='Z' + ) # Create cables cable1 = Cable( @@ -1706,45 +1819,95 @@ class CablePathTestCase(TestCase): ) cable3.save() self.assertPathExists( - (interface1, cable1, (frontport1_1, frontport1_2), rearport1, cable3, rearport2, (frontport2_1, frontport2_2)), - is_complete=False + ( + interface1, + cable1, + (frontport1_1, frontport1_2), + rearport1, + cable3, + rearport2, + (frontport2_1, frontport2_2), + ), + is_complete=False, ) self.assertPathExists( - (interface2, cable2, (frontport1_3, frontport1_4), rearport1, cable3, rearport2, (frontport2_3, frontport2_4)), - is_complete=False + ( + interface2, + cable2, + (frontport1_3, frontport1_4), + rearport1, + cable3, + rearport2, + (frontport2_3, frontport2_4), + ), + is_complete=False, ) self.assertEqual(CablePath.objects.count(), 2) # Create cables 4-5 - cable4 = Cable( - a_terminations=[frontport2_1, frontport2_2], - b_terminations=[interface3] - ) + cable4 = Cable(a_terminations=[frontport2_1, frontport2_2], b_terminations=[interface3]) cable4.save() - cable5 = Cable( - a_terminations=[frontport2_3, frontport2_4], - b_terminations=[interface4] - ) + cable5 = Cable(a_terminations=[frontport2_3, frontport2_4], b_terminations=[interface4]) cable5.save() path1 = self.assertPathExists( - (interface1, cable1, (frontport1_1, frontport1_2), rearport1, cable3, rearport2, (frontport2_1, frontport2_2), cable4, interface3), + ( + interface1, + cable1, + (frontport1_1, frontport1_2), + rearport1, + cable3, + rearport2, + (frontport2_1, frontport2_2), + cable4, + interface3, + ), is_complete=True, - is_active=True + is_active=True, ) path2 = self.assertPathExists( - (interface2, cable2, (frontport1_3, frontport1_4), rearport1, cable3, rearport2, (frontport2_3, frontport2_4), cable5, interface4), + ( + interface2, + cable2, + (frontport1_3, frontport1_4), + rearport1, + cable3, + rearport2, + (frontport2_3, frontport2_4), + cable5, + interface4, + ), is_complete=True, - is_active=True + is_active=True, ) path3 = self.assertPathExists( - (interface3, cable4, (frontport2_1, frontport2_2), rearport2, cable3, rearport1, (frontport1_1, frontport1_2), cable1, interface1), + ( + interface3, + cable4, + (frontport2_1, frontport2_2), + rearport2, + cable3, + rearport1, + (frontport1_1, frontport1_2), + cable1, + interface1, + ), is_complete=True, - is_active=True + is_active=True, ) path4 = self.assertPathExists( - (interface4, cable5, (frontport2_3, frontport2_4), rearport2, cable3, rearport1, (frontport1_3, frontport1_4), cable2, interface2), + ( + interface4, + cable5, + (frontport2_3, frontport2_4), + rearport2, + cable3, + rearport1, + (frontport1_3, frontport1_4), + cable2, + interface2, + ), is_complete=True, - is_active=True + is_active=True, ) self.assertEqual(CablePath.objects.count(), 4) @@ -1809,7 +1972,10 @@ class CablePathTestCase(TestCase): ) cable1.save() self.assertPathExists( - (interface1, cable1, (frontport1, frontport3), (rearport1, rearport3), (cable2, cable4), (rearport2, rearport4), (frontport2, frontport4)), + ( + interface1, cable1, (frontport1, frontport3), (rearport1, rearport3), (cable2, cable4), + (rearport2, rearport4), (frontport2, frontport4) + ), is_complete=False ) self.assertEqual(CablePath.objects.count(), 1) diff --git a/netbox/dcim/tests/test_filtersets.py b/netbox/dcim/tests/test_filtersets.py index 6c65cad93..ede1e2a09 100644 --- a/netbox/dcim/tests/test_filtersets.py +++ b/netbox/dcim/tests/test_filtersets.py @@ -4,12 +4,13 @@ from circuits.models import Circuit, CircuitTermination, CircuitType, Provider from dcim.choices import * from dcim.filtersets import * from dcim.models import * -from ipam.models import ASN, IPAddress, RIR, VRF -from netbox.choices import ColorChoices +from ipam.choices import VLANQinQRoleChoices +from ipam.models import ASN, IPAddress, RIR, VLAN, VLANTranslationPolicy, VRF +from netbox.choices import ColorChoices, WeightUnitChoices from tenancy.models import Tenant, TenantGroup from users.models import User -from utilities.testing import ChangeLoggedFilterSetTests, create_test_device -from virtualization.models import Cluster, ClusterType, ClusterGroup +from utilities.testing import ChangeLoggedFilterSetTests, create_test_device, create_test_virtualmachine +from virtualization.models import Cluster, ClusterType, ClusterGroup, VMInterface, VirtualMachine from wireless.choices import WirelessChannelChoices, WirelessRoleChoices @@ -242,9 +243,41 @@ class SiteTestCase(TestCase, ChangeLoggedFilterSetTests): ASN.objects.bulk_create(asns) sites = ( - Site(name='Site 1', slug='site-1', region=regions[0], group=groups[0], tenant=tenants[0], status=SiteStatusChoices.STATUS_ACTIVE, facility='Facility 1', latitude=10, longitude=10, description='foobar1'), - Site(name='Site 2', slug='site-2', region=regions[1], group=groups[1], tenant=tenants[1], status=SiteStatusChoices.STATUS_PLANNED, facility='Facility 2', latitude=20, longitude=20, description='foobar2'), - Site(name='Site 3', slug='site-3', region=regions[2], group=groups[2], tenant=tenants[2], status=SiteStatusChoices.STATUS_RETIRED, facility='Facility 3', latitude=30, longitude=30), + Site( + name='Site 1', + slug='site-1', + region=regions[0], + group=groups[0], + tenant=tenants[0], + status=SiteStatusChoices.STATUS_ACTIVE, + facility='Facility 1', + latitude=10, + longitude=10, + description='foobar1', + ), + Site( + name='Site 2', + slug='site-2', + region=regions[1], + group=groups[1], + tenant=tenants[1], + status=SiteStatusChoices.STATUS_PLANNED, + facility='Facility 2', + latitude=20, + longitude=20, + description='foobar2', + ), + Site( + name='Site 3', + slug='site-3', + region=regions[2], + group=groups[2], + tenant=tenants[2], + status=SiteStatusChoices.STATUS_RETIRED, + facility='Facility 3', + latitude=30, + longitude=30, + ), ) Site.objects.bulk_create(sites) sites[0].asns.set([asns[0]]) @@ -360,9 +393,33 @@ class LocationTestCase(TestCase, ChangeLoggedFilterSetTests): location.save() locations = ( - Location(name='Location 1A', slug='location-1a', site=sites[0], parent=parent_locations[0], status=LocationStatusChoices.STATUS_PLANNED, facility='Facility 1', description='foobar1'), - Location(name='Location 2A', slug='location-2a', site=sites[1], parent=parent_locations[1], status=LocationStatusChoices.STATUS_STAGING, facility='Facility 2', description='foobar2'), - Location(name='Location 3A', slug='location-3a', site=sites[2], parent=parent_locations[2], status=LocationStatusChoices.STATUS_DECOMMISSIONING, facility='Facility 3', description='foobar3'), + Location( + name='Location 1A', + slug='location-1a', + site=sites[0], + parent=parent_locations[0], + status=LocationStatusChoices.STATUS_PLANNED, + facility='Facility 1', + description='foobar1', + ), + Location( + name='Location 2A', + slug='location-2a', + site=sites[1], + parent=parent_locations[1], + status=LocationStatusChoices.STATUS_STAGING, + facility='Facility 2', + description='foobar2', + ), + Location( + name='Location 3A', + slug='location-3a', + site=sites[2], + parent=parent_locations[2], + status=LocationStatusChoices.STATUS_DECOMMISSIONING, + facility='Facility 3', + description='foobar3', + ), ) for location in locations: location.save() @@ -871,7 +928,6 @@ class RackTestCase(TestCase, ChangeLoggedFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_outer_unit(self): - self.assertEqual(Rack.objects.filter(outer_unit__isnull=False).count(), 5) params = {'outer_unit': RackDimensionUnitChoices.UNIT_MILLIMETER} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) @@ -1222,10 +1278,22 @@ class DeviceTypeTestCase(TestCase, ChangeLoggedFilterSetTests): RearPortTemplate(device_type=device_types[1], name='Rear Port 2', type=PortTypeChoices.TYPE_8P8C), ) RearPortTemplate.objects.bulk_create(rear_ports) - FrontPortTemplate.objects.bulk_create(( - FrontPortTemplate(device_type=device_types[0], name='Front Port 1', type=PortTypeChoices.TYPE_8P8C, rear_port=rear_ports[0]), - FrontPortTemplate(device_type=device_types[1], name='Front Port 2', type=PortTypeChoices.TYPE_8P8C, rear_port=rear_ports[1]), - )) + FrontPortTemplate.objects.bulk_create( + ( + FrontPortTemplate( + device_type=device_types[0], + name='Front Port 1', + type=PortTypeChoices.TYPE_8P8C, + rear_port=rear_ports[0], + ), + FrontPortTemplate( + device_type=device_types[1], + name='Front Port 2', + type=PortTypeChoices.TYPE_8P8C, + rear_port=rear_ports[1], + ), + ) + ) ModuleBayTemplate.objects.bulk_create(( ModuleBayTemplate(device_type=device_types[0], name='Module Bay 1'), ModuleBayTemplate(device_type=device_types[1], name='Module Bay 2'), @@ -1435,10 +1503,22 @@ class ModuleTypeTestCase(TestCase, ChangeLoggedFilterSetTests): RearPortTemplate(module_type=module_types[1], name='Rear Port 2', type=PortTypeChoices.TYPE_8P8C), ) RearPortTemplate.objects.bulk_create(rear_ports) - FrontPortTemplate.objects.bulk_create(( - FrontPortTemplate(module_type=module_types[0], name='Front Port 1', type=PortTypeChoices.TYPE_8P8C, rear_port=rear_ports[0]), - FrontPortTemplate(module_type=module_types[1], name='Front Port 2', type=PortTypeChoices.TYPE_8P8C, rear_port=rear_ports[1]), - )) + FrontPortTemplate.objects.bulk_create( + ( + FrontPortTemplate( + module_type=module_types[0], + name='Front Port 1', + type=PortTypeChoices.TYPE_8P8C, + rear_port=rear_ports[0], + ), + FrontPortTemplate( + module_type=module_types[1], + name='Front Port 2', + type=PortTypeChoices.TYPE_8P8C, + rear_port=rear_ports[1], + ), + ) + ) def test_q(self): params = {'q': 'foobar1'} @@ -1893,11 +1973,19 @@ class ModuleBayTemplateTestCase(TestCase, DeviceComponentTemplateFilterSetTests, ) ModuleType.objects.bulk_create(module_types) - ModuleBayTemplate.objects.bulk_create(( - ModuleBayTemplate(device_type=device_types[0], name='Module Bay 1', description='foobar1'), - ModuleBayTemplate(device_type=device_types[1], name='Module Bay 2', description='foobar2', module_type=module_types[0]), - ModuleBayTemplate(device_type=device_types[2], name='Module Bay 3', description='foobar3', module_type=module_types[1]), - )) + ModuleBayTemplate.objects.bulk_create( + ( + ModuleBayTemplate( + device_type=device_types[0], name='Module Bay 1', description='foobar1' + ), + ModuleBayTemplate( + device_type=device_types[1], name='Module Bay 2', description='foobar2', module_type=module_types[0] + ), + ModuleBayTemplate( + device_type=device_types[2], name='Module Bay 3', description='foobar3', module_type=module_types[1] + ), + ) + ) def test_name(self): params = {'name': ['Module Bay 1', 'Module Bay 2']} @@ -1996,9 +2084,15 @@ class InventoryItemTemplateTestCase(TestCase, DeviceComponentTemplateFilterSetTe item.save() child_inventory_item_templates = ( - InventoryItemTemplate(device_type=device_types[0], name='Inventory Item 1A', parent=inventory_item_templates[0]), - InventoryItemTemplate(device_type=device_types[1], name='Inventory Item 2A', parent=inventory_item_templates[1]), - InventoryItemTemplate(device_type=device_types[2], name='Inventory Item 3A', parent=inventory_item_templates[2]), + InventoryItemTemplate( + device_type=device_types[0], name='Inventory Item 1A', parent=inventory_item_templates[0] + ), + InventoryItemTemplate( + device_type=device_types[1], name='Inventory Item 2A', parent=inventory_item_templates[1] + ), + InventoryItemTemplate( + device_type=device_types[2], name='Inventory Item 3A', parent=inventory_item_templates[2] + ), ) for item in child_inventory_item_templates: item.save() @@ -2323,10 +2417,17 @@ class DeviceTestCase(TestCase, ChangeLoggedFilterSetTests): PowerOutlet(device=devices[1], name='Power Outlet 2'), )) interfaces = ( - Interface(device=devices[0], name='Interface 1', mac_address='00-00-00-00-00-01'), - Interface(device=devices[1], name='Interface 2', mac_address='00-00-00-00-00-02'), + Interface(device=devices[0], name='Interface 1'), + Interface(device=devices[1], name='Interface 2'), ) Interface.objects.bulk_create(interfaces) + mac_addresses = ( + MACAddress(mac_address='00-00-00-00-00-01'), + MACAddress(mac_address='00-00-00-00-00-02'), + ) + MACAddress.objects.bulk_create(mac_addresses) + interfaces[0].mac_addresses.set([mac_addresses[0]]) + interfaces[1].mac_addresses.set([mac_addresses[1]]) rear_ports = ( RearPort(device=devices[0], name='Rear Port 1', type=PortTypeChoices.TYPE_8P8C), RearPort(device=devices[1], name='Rear Port 2', type=PortTypeChoices.TYPE_8P8C), @@ -2841,10 +2942,41 @@ class ConsolePortTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedF Rack.objects.bulk_create(racks) devices = ( - Device(name='Device 1', device_type=device_types[0], role=roles[0], site=sites[0], location=locations[0], rack=racks[0], status='active'), - Device(name='Device 2', device_type=device_types[1], role=roles[1], site=sites[1], location=locations[1], rack=racks[1], status='planned'), - Device(name='Device 3', device_type=device_types[2], role=roles[2], site=sites[2], location=locations[2], rack=racks[2], status='offline'), - Device(name=None, device_type=device_types[0], role=roles[0], site=sites[3], status='offline'), # For cable connections + Device( + name='Device 1', + device_type=device_types[0], + role=roles[0], + site=sites[0], + location=locations[0], + rack=racks[0], + status='active', + ), + Device( + name='Device 2', + device_type=device_types[1], + role=roles[1], + site=sites[1], + location=locations[1], + rack=racks[1], + status='planned', + ), + Device( + name='Device 3', + device_type=device_types[2], + role=roles[2], + site=sites[2], + location=locations[2], + rack=racks[2], + status='offline', + ), + # For cable connections + Device( + name=None, + device_type=device_types[0], + role=roles[0], + site=sites[3], + status='offline' + ), ) Device.objects.bulk_create(devices) @@ -3022,10 +3154,41 @@ class ConsoleServerPortTestCase(TestCase, DeviceComponentFilterSetTests, ChangeL Rack.objects.bulk_create(racks) devices = ( - Device(name='Device 1', device_type=device_types[0], role=roles[0], site=sites[0], location=locations[0], rack=racks[0], status='active'), - Device(name='Device 2', device_type=device_types[1], role=roles[1], site=sites[1], location=locations[1], rack=racks[1], status='planned'), - Device(name='Device 3', device_type=device_types[2], role=roles[2], site=sites[2], location=locations[2], rack=racks[2], status='offline'), - Device(name=None, device_type=device_types[2], role=roles[2], site=sites[3], status='offline'), # For cable connections + Device( + name='Device 1', + device_type=device_types[0], + role=roles[0], + site=sites[0], + location=locations[0], + rack=racks[0], + status='active', + ), + Device( + name='Device 2', + device_type=device_types[1], + role=roles[1], + site=sites[1], + location=locations[1], + rack=racks[1], + status='planned', + ), + Device( + name='Device 3', + device_type=device_types[2], + role=roles[2], + site=sites[2], + location=locations[2], + rack=racks[2], + status='offline', + ), + # For cable connections + Device( + name=None, + device_type=device_types[2], + role=roles[2], + site=sites[3], + status='offline' + ), ) Device.objects.bulk_create(devices) @@ -3051,9 +3214,15 @@ class ConsoleServerPortTestCase(TestCase, DeviceComponentFilterSetTests, ChangeL ConsolePort.objects.bulk_create(console_ports) console_server_ports = ( - ConsoleServerPort(device=devices[0], module=modules[0], name='Console Server Port 1', label='A', description='First'), - ConsoleServerPort(device=devices[1], module=modules[1], name='Console Server Port 2', label='B', description='Second'), - ConsoleServerPort(device=devices[2], module=modules[2], name='Console Server Port 3', label='C', description='Third'), + ConsoleServerPort( + device=devices[0], module=modules[0], name='Console Server Port 1', label='A', description='First' + ), + ConsoleServerPort( + device=devices[1], module=modules[1], name='Console Server Port 2', label='B', description='Second' + ), + ConsoleServerPort( + device=devices[2], module=modules[2], name='Console Server Port 3', label='C', description='Third' + ), ) ConsoleServerPort.objects.bulk_create(console_server_ports) @@ -3203,10 +3372,41 @@ class PowerPortTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedFil Rack.objects.bulk_create(racks) devices = ( - Device(name='Device 1', device_type=device_types[0], role=roles[0], site=sites[0], location=locations[0], rack=racks[0], status='active'), - Device(name='Device 2', device_type=device_types[1], role=roles[1], site=sites[1], location=locations[1], rack=racks[1], status='planned'), - Device(name='Device 3', device_type=device_types[2], role=roles[2], site=sites[2], location=locations[2], rack=racks[2], status='offline'), - Device(name=None, device_type=device_types[2], role=roles[2], site=sites[3], status='offline'), # For cable connections + Device( + name='Device 1', + device_type=device_types[0], + role=roles[0], + site=sites[0], + location=locations[0], + rack=racks[0], + status='active', + ), + Device( + name='Device 2', + device_type=device_types[1], + role=roles[1], + site=sites[1], + location=locations[1], + rack=racks[1], + status='planned', + ), + Device( + name='Device 3', + device_type=device_types[2], + role=roles[2], + site=sites[2], + location=locations[2], + rack=racks[2], + status='offline', + ), + # For cable connections + Device( + name=None, + device_type=device_types[2], + role=roles[2], + site=sites[3], + status='offline' + ), ) Device.objects.bulk_create(devices) @@ -3232,9 +3432,33 @@ class PowerPortTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedFil PowerOutlet.objects.bulk_create(power_outlets) power_ports = ( - PowerPort(device=devices[0], module=modules[0], name='Power Port 1', label='A', maximum_draw=100, allocated_draw=50, description='First'), - PowerPort(device=devices[1], module=modules[1], name='Power Port 2', label='B', maximum_draw=200, allocated_draw=100, description='Second'), - PowerPort(device=devices[2], module=modules[2], name='Power Port 3', label='C', maximum_draw=300, allocated_draw=150, description='Third'), + PowerPort( + device=devices[0], + module=modules[0], + name='Power Port 1', + label='A', + maximum_draw=100, + allocated_draw=50, + description='First', + ), + PowerPort( + device=devices[1], + module=modules[1], + name='Power Port 2', + label='B', + maximum_draw=200, + allocated_draw=100, + description='Second', + ), + PowerPort( + device=devices[2], + module=modules[2], + name='Power Port 3', + label='C', + maximum_draw=300, + allocated_draw=150, + description='Third', + ), ) PowerPort.objects.bulk_create(power_ports) @@ -3392,10 +3616,41 @@ class PowerOutletTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedF Rack.objects.bulk_create(racks) devices = ( - Device(name='Device 1', device_type=device_types[0], role=roles[0], site=sites[0], location=locations[0], rack=racks[0], status='active'), - Device(name='Device 2', device_type=device_types[1], role=roles[1], site=sites[1], location=locations[1], rack=racks[1], status='planned'), - Device(name='Device 3', device_type=device_types[2], role=roles[2], site=sites[2], location=locations[2], rack=racks[2], status='offline'), - Device(name=None, device_type=device_types[2], role=roles[2], site=sites[3], status='offline'), # For cable connections + Device( + name='Device 1', + device_type=device_types[0], + role=roles[0], + site=sites[0], + location=locations[0], + rack=racks[0], + status='active', + ), + Device( + name='Device 2', + device_type=device_types[1], + role=roles[1], + site=sites[1], + location=locations[1], + rack=racks[1], + status='planned', + ), + Device( + name='Device 3', + device_type=device_types[2], + role=roles[2], + site=sites[2], + location=locations[2], + rack=racks[2], + status='offline', + ), + # For cable connections + Device( + name=None, + device_type=device_types[2], + role=roles[2], + site=sites[3], + status='offline' + ), ) Device.objects.bulk_create(devices) @@ -3421,9 +3676,33 @@ class PowerOutletTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedF PowerPort.objects.bulk_create(power_ports) power_outlets = ( - PowerOutlet(device=devices[0], module=modules[0], name='Power Outlet 1', label='A', feed_leg=PowerOutletFeedLegChoices.FEED_LEG_A, description='First'), - PowerOutlet(device=devices[1], module=modules[1], name='Power Outlet 2', label='B', feed_leg=PowerOutletFeedLegChoices.FEED_LEG_B, description='Second'), - PowerOutlet(device=devices[2], module=modules[2], name='Power Outlet 3', label='C', feed_leg=PowerOutletFeedLegChoices.FEED_LEG_C, description='Third'), + PowerOutlet( + device=devices[0], + module=modules[0], + name='Power Outlet 1', + label='A', + feed_leg=PowerOutletFeedLegChoices.FEED_LEG_A, + description='First', + color='ff0000', + ), + PowerOutlet( + device=devices[1], + module=modules[1], + name='Power Outlet 2', + label='B', + feed_leg=PowerOutletFeedLegChoices.FEED_LEG_B, + description='Second', + color='00ff00', + ), + PowerOutlet( + device=devices[2], + module=modules[2], + name='Power Outlet 3', + label='C', + feed_leg=PowerOutletFeedLegChoices.FEED_LEG_C, + description='Third', + color='0000ff', + ), ) PowerOutlet.objects.bulk_create(power_outlets) @@ -3444,6 +3723,10 @@ class PowerOutletTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedF params = {'description': ['First', 'Second']} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + def test_color(self): + params = {'color': ['ff0000', '00ff00']} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + def test_feed_leg(self): params = {'feed_leg': [PowerOutletFeedLegChoices.FEED_LEG_A, PowerOutletFeedLegChoices.FEED_LEG_B]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) @@ -3517,7 +3800,7 @@ class PowerOutletTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedF class InterfaceTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedFilterSetTests): queryset = Interface.objects.all() filterset = InterfaceFilterSet - ignore_fields = ('tagged_vlans', 'untagged_vlan', 'vdcs') + ignore_fields = ('tagged_vlans', 'untagged_vlan', 'qinq_svlan', 'vdcs') @classmethod def setUpTestData(cls): @@ -3661,11 +3944,36 @@ class InterfaceTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedFil # Virtual Device Context Creation vdcs = ( - VirtualDeviceContext(device=devices[4], name='VDC 1', identifier=1, status=VirtualDeviceContextStatusChoices.STATUS_ACTIVE), - VirtualDeviceContext(device=devices[4], name='VDC 2', identifier=2, status=VirtualDeviceContextStatusChoices.STATUS_PLANNED), + VirtualDeviceContext( + device=devices[4], name='VDC 1', identifier=1, status=VirtualDeviceContextStatusChoices.STATUS_ACTIVE + ), + VirtualDeviceContext( + device=devices[4], name='VDC 2', identifier=2, status=VirtualDeviceContextStatusChoices.STATUS_PLANNED + ), ) VirtualDeviceContext.objects.bulk_create(vdcs) + mac_addresses = ( + MACAddress(mac_address='00-00-00-00-00-01'), + MACAddress(mac_address='00-00-00-00-00-02'), + MACAddress(mac_address='00-00-00-00-00-03'), + ) + MACAddress.objects.bulk_create(mac_addresses) + + vlans = ( + VLAN(name='SVLAN 1', vid=1001, qinq_role=VLANQinQRoleChoices.ROLE_SERVICE), + VLAN(name='SVLAN 2', vid=1002, qinq_role=VLANQinQRoleChoices.ROLE_SERVICE), + VLAN(name='SVLAN 3', vid=1003, qinq_role=VLANQinQRoleChoices.ROLE_SERVICE), + ) + VLAN.objects.bulk_create(vlans) + + vlan_translation_policies = ( + VLANTranslationPolicy(name='Policy 1'), + VLANTranslationPolicy(name='Policy 2'), + VLANTranslationPolicy(name='Policy 3'), + ) + VLANTranslationPolicy.objects.bulk_create(vlan_translation_policies) + interfaces = ( Interface( device=devices[0], @@ -3677,13 +3985,13 @@ class InterfaceTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedFil mgmt_only=True, mtu=100, mode=InterfaceModeChoices.MODE_ACCESS, - mac_address='00-00-00-00-00-01', description='First', vrf=vrfs[0], speed=1000000, duplex='half', poe_mode=InterfacePoEModeChoices.MODE_PSE, - poe_type=InterfacePoETypeChoices.TYPE_1_8023AF + poe_type=InterfacePoETypeChoices.TYPE_1_8023AF, + vlan_translation_policy=vlan_translation_policies[0], ), Interface( device=devices[1], @@ -3702,13 +4010,13 @@ class InterfaceTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedFil mgmt_only=True, mtu=200, mode=InterfaceModeChoices.MODE_TAGGED, - mac_address='00-00-00-00-00-02', description='Second', vrf=vrfs[1], speed=1000000, duplex='full', poe_mode=InterfacePoEModeChoices.MODE_PD, - poe_type=InterfacePoETypeChoices.TYPE_1_8023AF + poe_type=InterfacePoETypeChoices.TYPE_1_8023AF, + vlan_translation_policy=vlan_translation_policies[0], ), Interface( device=devices[3], @@ -3720,13 +4028,13 @@ class InterfaceTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedFil mgmt_only=False, mtu=300, mode=InterfaceModeChoices.MODE_TAGGED_ALL, - mac_address='00-00-00-00-00-03', description='Third', vrf=vrfs[2], speed=100000, duplex='half', poe_mode=InterfacePoEModeChoices.MODE_PSE, - poe_type=InterfacePoETypeChoices.TYPE_2_8023AT + poe_type=InterfacePoETypeChoices.TYPE_2_8023AT, + vlan_translation_policy=vlan_translation_policies[1], ), Interface( device=devices[4], @@ -3739,7 +4047,10 @@ class InterfaceTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedFil speed=100000, duplex='full', poe_mode=InterfacePoEModeChoices.MODE_PD, - poe_type=InterfacePoETypeChoices.TYPE_2_8023AT + poe_type=InterfacePoETypeChoices.TYPE_2_8023AT, + mode=InterfaceModeChoices.MODE_Q_IN_Q, + qinq_svlan=vlans[0], + vlan_translation_policy=vlan_translation_policies[1], ), Interface( device=devices[4], @@ -3748,7 +4059,9 @@ class InterfaceTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedFil type=InterfaceTypeChoices.TYPE_OTHER, enabled=True, mgmt_only=True, - tx_power=40 + tx_power=40, + mode=InterfaceModeChoices.MODE_Q_IN_Q, + qinq_svlan=vlans[1] ), Interface( device=devices[4], @@ -3757,7 +4070,9 @@ class InterfaceTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedFil type=InterfaceTypeChoices.TYPE_OTHER, enabled=False, mgmt_only=False, - tx_power=40 + tx_power=40, + mode=InterfaceModeChoices.MODE_Q_IN_Q, + qinq_svlan=vlans[2] ), Interface( device=devices[4], @@ -3786,6 +4101,10 @@ class InterfaceTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedFil interfaces[6].vdcs.set([vdcs[0]]) interfaces[7].vdcs.set([vdcs[1]]) + interfaces[0].mac_addresses.set([mac_addresses[0]]) + interfaces[2].mac_addresses.set([mac_addresses[1]]) + interfaces[3].mac_addresses.set([mac_addresses[2]]) + # Cables Cable(a_terminations=[interfaces[0]], b_terminations=[interfaces[5]]).save() Cable(a_terminations=[interfaces[1]], b_terminations=[interfaces[6]]).save() @@ -3843,9 +4162,24 @@ class InterfaceTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedFil # Create child interfaces parent_interface = Interface.objects.first() child_interfaces = ( - Interface(device=parent_interface.device, name='Child 1', parent=parent_interface, type=InterfaceTypeChoices.TYPE_VIRTUAL), - Interface(device=parent_interface.device, name='Child 2', parent=parent_interface, type=InterfaceTypeChoices.TYPE_VIRTUAL), - Interface(device=parent_interface.device, name='Child 3', parent=parent_interface, type=InterfaceTypeChoices.TYPE_VIRTUAL), + Interface( + device=parent_interface.device, + name='Child 1', + parent=parent_interface, + type=InterfaceTypeChoices.TYPE_VIRTUAL, + ), + Interface( + device=parent_interface.device, + name='Child 2', + parent=parent_interface, + type=InterfaceTypeChoices.TYPE_VIRTUAL, + ), + Interface( + device=parent_interface.device, + name='Child 3', + parent=parent_interface, + type=InterfaceTypeChoices.TYPE_VIRTUAL, + ), ) Interface.objects.bulk_create(child_interfaces) @@ -3856,9 +4190,24 @@ class InterfaceTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedFil # Create bridged interfaces bridge_interface = Interface.objects.first() bridged_interfaces = ( - Interface(device=bridge_interface.device, name='Bridged 1', bridge=bridge_interface, type=InterfaceTypeChoices.TYPE_1GE_FIXED), - Interface(device=bridge_interface.device, name='Bridged 2', bridge=bridge_interface, type=InterfaceTypeChoices.TYPE_1GE_FIXED), - Interface(device=bridge_interface.device, name='Bridged 3', bridge=bridge_interface, type=InterfaceTypeChoices.TYPE_1GE_FIXED), + Interface( + device=bridge_interface.device, + name='Bridged 1', + bridge=bridge_interface, + type=InterfaceTypeChoices.TYPE_1GE_FIXED, + ), + Interface( + device=bridge_interface.device, + name='Bridged 2', + bridge=bridge_interface, + type=InterfaceTypeChoices.TYPE_1GE_FIXED, + ), + Interface( + device=bridge_interface.device, + name='Bridged 3', + bridge=bridge_interface, + type=InterfaceTypeChoices.TYPE_1GE_FIXED, + ), ) Interface.objects.bulk_create(bridged_interfaces) @@ -4013,6 +4362,20 @@ class InterfaceTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedFil params = {'vdc_identifier': vdc.values_list('identifier', flat=True)} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 3) + def test_vlan(self): + vlan = VLAN.objects.filter(qinq_role=VLANQinQRoleChoices.ROLE_SERVICE).first() + params = {'vlan_id': vlan.pk} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) + params = {'vlan': vlan.vid} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) + + def test_vlan_translation_policy(self): + vlan_translation_policies = VLANTranslationPolicy.objects.all()[:2] + params = {'vlan_translation_policy_id': [vlan_translation_policies[0].pk, vlan_translation_policies[1].pk]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) + params = {'vlan_translation_policy': [vlan_translation_policies[0].name, vlan_translation_policies[1].name]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4) + class FrontPortTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedFilterSetTests): queryset = FrontPort.objects.all() @@ -4077,10 +4440,41 @@ class FrontPortTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedFil Rack.objects.bulk_create(racks) devices = ( - Device(name='Device 1', device_type=device_types[0], role=roles[0], site=sites[0], location=locations[0], rack=racks[0], status='active'), - Device(name='Device 2', device_type=device_types[1], role=roles[1], site=sites[1], location=locations[1], rack=racks[1], status='planned'), - Device(name='Device 3', device_type=device_types[2], role=roles[2], site=sites[2], location=locations[2], rack=racks[2], status='offline'), - Device(name=None, device_type=device_types[2], role=roles[2], site=sites[3], status='offline'), # For cable connections + Device( + name='Device 1', + device_type=device_types[0], + role=roles[0], + site=sites[0], + location=locations[0], + rack=racks[0], + status='active', + ), + Device( + name='Device 2', + device_type=device_types[1], + role=roles[1], + site=sites[1], + location=locations[1], + rack=racks[1], + status='planned', + ), + Device( + name='Device 3', + device_type=device_types[2], + role=roles[2], + site=sites[2], + location=locations[2], + rack=racks[2], + status='offline', + ), + # For cable connections + Device( + name=None, + device_type=device_types[2], + role=roles[2], + site=sites[3], + status='offline' + ), ) Device.objects.bulk_create(devices) @@ -4110,12 +4504,63 @@ class FrontPortTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedFil RearPort.objects.bulk_create(rear_ports) front_ports = ( - FrontPort(device=devices[0], module=modules[0], name='Front Port 1', label='A', type=PortTypeChoices.TYPE_8P8C, color=ColorChoices.COLOR_RED, rear_port=rear_ports[0], rear_port_position=1, description='First'), - FrontPort(device=devices[1], module=modules[1], name='Front Port 2', label='B', type=PortTypeChoices.TYPE_110_PUNCH, color=ColorChoices.COLOR_GREEN, rear_port=rear_ports[1], rear_port_position=2, description='Second'), - FrontPort(device=devices[2], module=modules[2], name='Front Port 3', label='C', type=PortTypeChoices.TYPE_BNC, color=ColorChoices.COLOR_BLUE, rear_port=rear_ports[2], rear_port_position=3, description='Third'), - FrontPort(device=devices[3], name='Front Port 4', label='D', type=PortTypeChoices.TYPE_FC, rear_port=rear_ports[3], rear_port_position=1), - FrontPort(device=devices[3], name='Front Port 5', label='E', type=PortTypeChoices.TYPE_FC, rear_port=rear_ports[4], rear_port_position=1), - FrontPort(device=devices[3], name='Front Port 6', label='F', type=PortTypeChoices.TYPE_FC, rear_port=rear_ports[5], rear_port_position=1), + FrontPort( + device=devices[0], + module=modules[0], + name='Front Port 1', + label='A', + type=PortTypeChoices.TYPE_8P8C, + color=ColorChoices.COLOR_RED, + rear_port=rear_ports[0], + rear_port_position=1, + description='First', + ), + FrontPort( + device=devices[1], + module=modules[1], + name='Front Port 2', + label='B', + type=PortTypeChoices.TYPE_110_PUNCH, + color=ColorChoices.COLOR_GREEN, + rear_port=rear_ports[1], + rear_port_position=2, + description='Second', + ), + FrontPort( + device=devices[2], + module=modules[2], + name='Front Port 3', + label='C', + type=PortTypeChoices.TYPE_BNC, + color=ColorChoices.COLOR_BLUE, + rear_port=rear_ports[2], + rear_port_position=3, + description='Third', + ), + FrontPort( + device=devices[3], + name='Front Port 4', + label='D', + type=PortTypeChoices.TYPE_FC, + rear_port=rear_ports[3], + rear_port_position=1, + ), + FrontPort( + device=devices[3], + name='Front Port 5', + label='E', + type=PortTypeChoices.TYPE_FC, + rear_port=rear_ports[4], + rear_port_position=1, + ), + FrontPort( + device=devices[3], + name='Front Port 6', + label='F', + type=PortTypeChoices.TYPE_FC, + rear_port=rear_ports[5], + rear_port_position=1, + ), ) FrontPort.objects.bulk_create(front_ports) @@ -4267,10 +4712,41 @@ class RearPortTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedFilt Rack.objects.bulk_create(racks) devices = ( - Device(name='Device 1', device_type=device_types[0], role=roles[0], site=sites[0], location=locations[0], rack=racks[0], status='active'), - Device(name='Device 2', device_type=device_types[1], role=roles[1], site=sites[1], location=locations[1], rack=racks[1], status='planned'), - Device(name='Device 3', device_type=device_types[2], role=roles[2], site=sites[2], location=locations[2], rack=racks[2], status='offline'), - Device(name=None, device_type=device_types[2], role=roles[2], site=sites[3], status='offline'), # For cable connections + Device( + name='Device 1', + device_type=device_types[0], + role=roles[0], + site=sites[0], + location=locations[0], + rack=racks[0], + status='active', + ), + Device( + name='Device 2', + device_type=device_types[1], + role=roles[1], + site=sites[1], + location=locations[1], + rack=racks[1], + status='planned', + ), + Device( + name='Device 3', + device_type=device_types[2], + role=roles[2], + site=sites[2], + location=locations[2], + rack=racks[2], + status='offline', + ), + # For cable connections + Device( + name=None, + device_type=device_types[2], + role=roles[2], + site=sites[3], + status='offline' + ), ) Device.objects.bulk_create(devices) @@ -4290,9 +4766,36 @@ class RearPortTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedFilt Module.objects.bulk_create(modules) rear_ports = ( - RearPort(device=devices[0], module=modules[0], name='Rear Port 1', label='A', type=PortTypeChoices.TYPE_8P8C, color=ColorChoices.COLOR_RED, positions=1, description='First'), - RearPort(device=devices[1], module=modules[1], name='Rear Port 2', label='B', type=PortTypeChoices.TYPE_110_PUNCH, color=ColorChoices.COLOR_GREEN, positions=2, description='Second'), - RearPort(device=devices[2], module=modules[2], name='Rear Port 3', label='C', type=PortTypeChoices.TYPE_BNC, color=ColorChoices.COLOR_BLUE, positions=3, description='Third'), + RearPort( + device=devices[0], + module=modules[0], + name='Rear Port 1', + label='A', + type=PortTypeChoices.TYPE_8P8C, + color=ColorChoices.COLOR_RED, + positions=1, + description='First', + ), + RearPort( + device=devices[1], + module=modules[1], + name='Rear Port 2', + label='B', + type=PortTypeChoices.TYPE_110_PUNCH, + color=ColorChoices.COLOR_GREEN, + positions=2, + description='Second', + ), + RearPort( + device=devices[2], + module=modules[2], + name='Rear Port 3', + label='C', + type=PortTypeChoices.TYPE_BNC, + color=ColorChoices.COLOR_BLUE, + positions=3, + description='Third', + ), RearPort(device=devices[3], name='Rear Port 4', label='D', type=PortTypeChoices.TYPE_FC, positions=4), RearPort(device=devices[3], name='Rear Port 5', label='E', type=PortTypeChoices.TYPE_FC, positions=5), RearPort(device=devices[3], name='Rear Port 6', label='F', type=PortTypeChoices.TYPE_FC, positions=6), @@ -4449,9 +4952,33 @@ class ModuleBayTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedFil Rack.objects.bulk_create(racks) devices = ( - Device(name='Device 1', device_type=device_types[0], role=roles[0], site=sites[0], location=locations[0], rack=racks[0], status='active'), - Device(name='Device 2', device_type=device_types[1], role=roles[1], site=sites[1], location=locations[1], rack=racks[1], status='planned'), - Device(name='Device 3', device_type=device_types[2], role=roles[2], site=sites[2], location=locations[2], rack=racks[2], status='offline'), + Device( + name='Device 1', + device_type=device_types[0], + role=roles[0], + site=sites[0], + location=locations[0], + rack=racks[0], + status='active', + ), + Device( + name='Device 2', + device_type=device_types[1], + role=roles[1], + site=sites[1], + location=locations[1], + rack=racks[1], + status='planned', + ), + Device( + name='Device 3', + device_type=device_types[2], + role=roles[2], + site=sites[2], + location=locations[2], + rack=racks[2], + status='offline', + ), ) Device.objects.bulk_create(devices) @@ -4597,9 +5124,33 @@ class DeviceBayTestCase(TestCase, DeviceComponentFilterSetTests, ChangeLoggedFil Rack.objects.bulk_create(racks) devices = ( - Device(name='Device 1', device_type=device_types[0], role=roles[0], site=sites[0], location=locations[0], rack=racks[0], status='active'), - Device(name='Device 2', device_type=device_types[1], role=roles[1], site=sites[1], location=locations[1], rack=racks[1], status='planned'), - Device(name='Device 3', device_type=device_types[2], role=roles[2], site=sites[2], location=locations[2], rack=racks[2], status='offline'), + Device( + name='Device 1', + device_type=device_types[0], + role=roles[0], + site=sites[0], + location=locations[0], + rack=racks[0], + status='active', + ), + Device( + name='Device 2', + device_type=device_types[1], + role=roles[1], + site=sites[1], + location=locations[1], + rack=racks[1], + status='planned', + ), + Device( + name='Device 3', + device_type=device_types[2], + role=roles[2], + site=sites[2], + location=locations[2], + rack=racks[2], + status='offline', + ), ) Device.objects.bulk_create(devices) @@ -4731,9 +5282,30 @@ class InventoryItemTestCase(TestCase, ChangeLoggedFilterSetTests): Rack.objects.bulk_create(racks) devices = ( - Device(name='Device 1', device_type=device_types[0], role=roles[0], site=sites[0], location=locations[0], rack=racks[0]), - Device(name='Device 2', device_type=device_types[1], role=roles[1], site=sites[1], location=locations[1], rack=racks[1]), - Device(name='Device 3', device_type=device_types[2], role=roles[2], site=sites[2], location=locations[2], rack=racks[2]), + Device( + name='Device 1', + device_type=device_types[0], + role=roles[0], + site=sites[0], + location=locations[0], + rack=racks[0], + ), + Device( + name='Device 2', + device_type=device_types[1], + role=roles[1], + site=sites[1], + location=locations[1], + rack=racks[1], + ), + Device( + name='Device 3', + device_type=device_types[2], + role=roles[2], + site=sites[2], + location=locations[2], + rack=racks[2], + ), ) Device.objects.bulk_create(devices) @@ -4751,9 +5323,48 @@ class InventoryItemTestCase(TestCase, ChangeLoggedFilterSetTests): ) inventory_items = ( - InventoryItem(device=devices[0], role=roles[0], manufacturer=manufacturers[0], name='Inventory Item 1', label='A', part_id='1001', serial='ABC', asset_tag='1001', discovered=True, description='First', component=components[0]), - InventoryItem(device=devices[1], role=roles[1], manufacturer=manufacturers[1], name='Inventory Item 2', label='B', part_id='1002', serial='DEF', asset_tag='1002', discovered=True, description='Second', component=components[1]), - InventoryItem(device=devices[2], role=roles[2], manufacturer=manufacturers[2], name='Inventory Item 3', label='C', part_id='1003', serial='GHI', asset_tag='1003', discovered=False, description='Third', component=components[2]), + InventoryItem( + device=devices[0], + role=roles[0], + manufacturer=manufacturers[0], + name='Inventory Item 1', + label='A', + part_id='1001', + serial='ABC', + asset_tag='1001', + discovered=True, + status=ModuleStatusChoices.STATUS_ACTIVE, + description='First', + component=components[0], + ), + InventoryItem( + device=devices[1], + role=roles[1], + manufacturer=manufacturers[1], + name='Inventory Item 2', + label='B', + part_id='1002', + serial='DEF', + asset_tag='1002', + discovered=True, + status=ModuleStatusChoices.STATUS_PLANNED, + description='Second', + component=components[1], + ), + InventoryItem( + device=devices[2], + role=roles[2], + manufacturer=manufacturers[2], + name='Inventory Item 3', + label='C', + part_id='1003', + serial='GHI', + asset_tag='1003', + discovered=False, + status=ModuleStatusChoices.STATUS_FAILED, + description='Third', + component=components[2], + ), ) for i in inventory_items: i.save() @@ -4874,6 +5485,10 @@ class InventoryItemTestCase(TestCase, ChangeLoggedFilterSetTests): params = {'component_type': 'dcim.interface'} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) + def test_status(self): + params = {'status': [InventoryItemStatusChoices.STATUS_PLANNED, InventoryItemStatusChoices.STATUS_FAILED]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + class InventoryItemRoleTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = InventoryItemRole.objects.all() @@ -5066,12 +5681,60 @@ class CableTestCase(TestCase, ChangeLoggedFilterSetTests): role = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1') devices = ( - Device(name='Device 1', device_type=device_type, role=role, site=sites[0], rack=racks[0], location=locations[0], position=1), - Device(name='Device 2', device_type=device_type, role=role, site=sites[0], rack=racks[0], location=locations[0], position=2), - Device(name='Device 3', device_type=device_type, role=role, site=sites[1], rack=racks[1], location=locations[1], position=1), - Device(name='Device 4', device_type=device_type, role=role, site=sites[1], rack=racks[1], location=locations[1], position=2), - Device(name='Device 5', device_type=device_type, role=role, site=sites[2], rack=racks[2], location=locations[2], position=1), - Device(name='Device 6', device_type=device_type, role=role, site=sites[2], rack=racks[2], location=locations[2], position=2), + Device( + name='Device 1', + device_type=device_type, + role=role, + site=sites[0], + rack=racks[0], + location=locations[0], + position=1, + ), + Device( + name='Device 2', + device_type=device_type, + role=role, + site=sites[0], + rack=racks[0], + location=locations[0], + position=2, + ), + Device( + name='Device 3', + device_type=device_type, + role=role, + site=sites[1], + rack=racks[1], + location=locations[1], + position=1, + ), + Device( + name='Device 4', + device_type=device_type, + role=role, + site=sites[1], + rack=racks[1], + location=locations[1], + position=2, + ), + Device( + name='Device 5', + device_type=device_type, + role=role, + site=sites[2], + rack=racks[2], + location=locations[2], + position=1, + ), + Device( + name='Device 6', + device_type=device_type, + role=role, + site=sites[2], + rack=racks[2], + location=locations[2], + position=2, + ), ) Device.objects.bulk_create(devices) @@ -5110,7 +5773,7 @@ class CableTestCase(TestCase, ChangeLoggedFilterSetTests): provider = Provider.objects.create(name='Provider 1', slug='provider-1') circuit_type = CircuitType.objects.create(name='Circuit Type 1', slug='circuit-type-1') circuit = Circuit.objects.create(cid='Circuit 1', provider=provider, type=circuit_type) - circuit_termination = CircuitTermination.objects.create(circuit=circuit, term_side='A', site=sites[0]) + circuit_termination = CircuitTermination.objects.create(circuit=circuit, term_side='A', termination=sites[0]) # Cables cables = ( @@ -5283,9 +5946,9 @@ class CableTestCase(TestCase, ChangeLoggedFilterSetTests): def test_site(self): site = Site.objects.all()[:2] params = {'site_id': [site[0].pk, site[1].pk]} - self.assertEqual(self.filterset(params, self.queryset).qs.count(), 12) + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 11) params = {'site': [site[0].slug, site[1].slug]} - self.assertEqual(self.filterset(params, self.queryset).qs.count(), 12) + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 11) def test_tenant(self): tenant = Tenant.objects.all()[:2] @@ -5796,3 +6459,80 @@ class VirtualDeviceContextTestCase(TestCase, ChangeLoggedFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) params = {'primary_ip6_id': [addresses[2].pk]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 0) + + +class MACAddressTestCase(TestCase, ChangeLoggedFilterSetTests): + queryset = MACAddress.objects.all() + filterset = MACAddressFilterSet + + @classmethod + def setUpTestData(cls): + devices = ( + create_test_device('Device 1'), + create_test_device('Device 2'), + create_test_device('Device 3'), + ) + interfaces = ( + Interface(device=devices[0], name='Interface 1', type=InterfaceTypeChoices.TYPE_1GE_FIXED), + Interface(device=devices[1], name='Interface 2', type=InterfaceTypeChoices.TYPE_1GE_FIXED), + Interface(device=devices[2], name='Interface 3', type=InterfaceTypeChoices.TYPE_1GE_FIXED), + ) + Interface.objects.bulk_create(interfaces) + + virtual_machines = ( + create_test_virtualmachine('Virtual Machine 1'), + create_test_virtualmachine('Virtual Machine 2'), + create_test_virtualmachine('Virtual Machine 3'), + ) + vm_interfaces = ( + VMInterface(virtual_machine=virtual_machines[0], name='Interface 1'), + VMInterface(virtual_machine=virtual_machines[1], name='Interface 2'), + VMInterface(virtual_machine=virtual_machines[2], name='Interface 3'), + ) + VMInterface.objects.bulk_create(vm_interfaces) + + mac_addresses = ( + # Device MACs + MACAddress(mac_address='00-00-00-01-01-01', assigned_object=interfaces[0]), + MACAddress(mac_address='00-00-00-02-01-01', assigned_object=interfaces[1]), + MACAddress(mac_address='00-00-00-03-01-01', assigned_object=interfaces[2]), + MACAddress(mac_address='00-00-00-03-01-02', assigned_object=interfaces[2]), + # VM MACs + MACAddress(mac_address='00-00-00-04-01-01', assigned_object=vm_interfaces[0]), + MACAddress(mac_address='00-00-00-05-01-01', assigned_object=vm_interfaces[1]), + MACAddress(mac_address='00-00-00-06-01-01', assigned_object=vm_interfaces[2]), + MACAddress(mac_address='00-00-00-06-01-02', assigned_object=vm_interfaces[2]), + ) + MACAddress.objects.bulk_create(mac_addresses) + + def test_mac_address(self): + params = {'mac_address': ['00-00-00-01-01-01', '00-00-00-02-01-01']} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + + def test_device(self): + devices = Device.objects.all()[:2] + params = {'device_id': [devices[0].pk, devices[1].pk]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + params = {'device': [devices[0].name, devices[1].name]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + + def test_virtual_machine(self): + virtual_machines = VirtualMachine.objects.all()[:2] + params = {'virtual_machine_id': [virtual_machines[0].pk, virtual_machines[1].pk]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + params = {'virtual_machine': [virtual_machines[0].name, virtual_machines[1].name]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + + def test_interface(self): + interfaces = Interface.objects.all()[:2] + params = {'interface_id': [interfaces[0].pk, interfaces[1].pk]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + params = {'interface': [interfaces[0].name, interfaces[1].name]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + + def test_vminterface(self): + vm_interfaces = VMInterface.objects.all()[:2] + params = {'vminterface_id': [vm_interfaces[0].pk, vm_interfaces[1].pk]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + params = {'vminterface': [vm_interfaces[0].name, vm_interfaces[1].name]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) diff --git a/netbox/dcim/tests/test_models.py b/netbox/dcim/tests/test_models.py index 70431c2e1..ff1eddd56 100644 --- a/netbox/dcim/tests/test_models.py +++ b/netbox/dcim/tests/test_models.py @@ -6,6 +6,7 @@ from core.models import ObjectType from dcim.choices import * from dcim.models import * from extras.models import CustomField +from netbox.choices import WeightUnitChoices from tenancy.models import Tenant from utilities.data import drange from virtualization.models import Cluster, ClusterType @@ -600,24 +601,42 @@ class DeviceTestCase(TestCase): Site.objects.bulk_create(sites) clusters = ( - Cluster(name='Cluster 1', type=cluster_type, site=sites[0]), - Cluster(name='Cluster 2', type=cluster_type, site=sites[1]), - Cluster(name='Cluster 3', type=cluster_type, site=None), + Cluster(name='Cluster 1', type=cluster_type, scope=sites[0]), + Cluster(name='Cluster 2', type=cluster_type, scope=sites[1]), + Cluster(name='Cluster 3', type=cluster_type, scope=None), ) - Cluster.objects.bulk_create(clusters) + for cluster in clusters: + cluster.save() device_type = DeviceType.objects.first() device_role = DeviceRole.objects.first() # Device with site only should pass - Device(name='device1', site=sites[0], device_type=device_type, role=device_role).full_clean() + Device( + name='device1', + site=sites[0], + device_type=device_type, + role=device_role + ).full_clean() # Device with site, cluster non-site should pass - Device(name='device1', site=sites[0], device_type=device_type, role=device_role, cluster=clusters[2]).full_clean() + Device( + name='device1', + site=sites[0], + device_type=device_type, + role=device_role, + cluster=clusters[2] + ).full_clean() # Device with mismatched site & cluster should fail with self.assertRaises(ValidationError): - Device(name='device1', site=sites[0], device_type=device_type, role=device_role, cluster=clusters[1]).full_clean() + Device( + name='device1', + site=sites[0], + device_type=device_type, + role=device_role, + cluster=clusters[1] + ).full_clean() class ModuleBayTestCase(TestCase): @@ -634,7 +653,9 @@ class ModuleBayTestCase(TestCase): # Create a CustomField with a default value & assign it to all component models location = Location.objects.create(name='Location 1', slug='location-1', site=site) rack = Rack.objects.create(name='Rack 1', site=site) - device = Device.objects.create(name='Device 1', device_type=device_type, role=device_role, site=site, location=location, rack=rack) + device = Device.objects.create( + name='Device 1', device_type=device_type, role=device_role, site=site, location=location, rack=rack + ) module_bays = ( ModuleBay(device=device, name='Module Bay 1', label='A', description='First'), @@ -761,9 +782,9 @@ class CableTestCase(TestCase): circuittype = CircuitType.objects.create(name='Circuit Type 1', slug='circuit-type-1') circuit1 = Circuit.objects.create(provider=provider, type=circuittype, cid='1') circuit2 = Circuit.objects.create(provider=provider, type=circuittype, cid='2') - CircuitTermination.objects.create(circuit=circuit1, site=site, term_side='A') - CircuitTermination.objects.create(circuit=circuit1, site=site, term_side='Z') - CircuitTermination.objects.create(circuit=circuit2, provider_network=provider_network, term_side='A') + CircuitTermination.objects.create(circuit=circuit1, termination=site, term_side='A') + CircuitTermination.objects.create(circuit=circuit1, termination=site, term_side='Z') + CircuitTermination.objects.create(circuit=circuit2, termination=provider_network, term_side='A') def test_cable_creation(self): """ diff --git a/netbox/dcim/tests/test_views.py b/netbox/dcim/tests/test_views.py index e290a6d1d..b84217882 100644 --- a/netbox/dcim/tests/test_views.py +++ b/netbox/dcim/tests/test_views.py @@ -10,7 +10,7 @@ from dcim.choices import * from dcim.constants import * from dcim.models import * from ipam.models import ASN, RIR, VLAN, VRF -from netbox.choices import CSVDelimiterChoices, ImportFormatChoices +from netbox.choices import CSVDelimiterChoices, ImportFormatChoices, WeightUnitChoices from tenancy.models import Tenant from users.models import User from utilities.testing import ViewTestCases, create_tags, create_test_device, post_data @@ -196,9 +196,27 @@ class LocationTestCase(ViewTestCases.OrganizationalObjectViewTestCase): tenant = Tenant.objects.create(name='Tenant 1', slug='tenant-1') locations = ( - Location(name='Location 1', slug='location-1', site=site, status=LocationStatusChoices.STATUS_ACTIVE, tenant=tenant), - Location(name='Location 2', slug='location-2', site=site, status=LocationStatusChoices.STATUS_ACTIVE, tenant=tenant), - Location(name='Location 3', slug='location-3', site=site, status=LocationStatusChoices.STATUS_ACTIVE, tenant=tenant), + Location( + name='Location 1', + slug='location-1', + site=site, + status=LocationStatusChoices.STATUS_ACTIVE, + tenant=tenant, + ), + Location( + name='Location 2', + slug='location-2', + site=site, + status=LocationStatusChoices.STATUS_ACTIVE, + tenant=tenant, + ), + Location( + name='Location 3', + slug='location-3', + site=site, + status=LocationStatusChoices.STATUS_ACTIVE, + tenant=tenant, + ), ) for location in locations: location.save() @@ -346,9 +364,24 @@ class RackTypeTestCase(ViewTestCases.PrimaryObjectViewTestCase): Manufacturer.objects.bulk_create(manufacturers) rack_types = ( - RackType(manufacturer=manufacturers[0], model='RackType 1', slug='rack-type-1', form_factor=RackFormFactorChoices.TYPE_CABINET,), - RackType(manufacturer=manufacturers[0], model='RackType 2', slug='rack-type-2', form_factor=RackFormFactorChoices.TYPE_CABINET,), - RackType(manufacturer=manufacturers[0], model='RackType 3', slug='rack-type-3', form_factor=RackFormFactorChoices.TYPE_CABINET,), + RackType( + manufacturer=manufacturers[0], + model='RackType 1', + slug='rack-type-1', + form_factor=RackFormFactorChoices.TYPE_CABINET, + ), + RackType( + manufacturer=manufacturers[0], + model='RackType 2', + slug='rack-type-2', + form_factor=RackFormFactorChoices.TYPE_CABINET, + ), + RackType( + manufacturer=manufacturers[0], + model='RackType 3', + slug='rack-type-3', + form_factor=RackFormFactorChoices.TYPE_CABINET, + ), ) RackType.objects.bulk_create(rack_types) @@ -592,7 +625,7 @@ class DeviceTypeTestCase( 'part_number': '123ABC', 'u_height': 2, 'is_full_depth': True, - 'subdevice_role': '', # CharField + 'subdevice_role': None, 'comments': 'Some comments', 'tags': [t.pk for t in tags], } @@ -692,9 +725,15 @@ class DeviceTypeTestCase( ) RearPortTemplate.objects.bulk_create(rear_ports) front_ports = ( - FrontPortTemplate(device_type=devicetype, name='Front Port 1', rear_port=rear_ports[0], rear_port_position=1), - FrontPortTemplate(device_type=devicetype, name='Front Port 2', rear_port=rear_ports[1], rear_port_position=1), - FrontPortTemplate(device_type=devicetype, name='Front Port 3', rear_port=rear_ports[2], rear_port_position=1), + FrontPortTemplate( + device_type=devicetype, name='Front Port 1', rear_port=rear_ports[0], rear_port_position=1 + ), + FrontPortTemplate( + device_type=devicetype, name='Front Port 2', rear_port=rear_ports[1], rear_port_position=1 + ), + FrontPortTemplate( + device_type=devicetype, name='Front Port 3', rear_port=rear_ports[2], rear_port_position=1 + ), ) FrontPortTemplate.objects.bulk_create(front_ports) @@ -861,7 +900,7 @@ inventory-items: 'data': IMPORT_DATA, 'format': 'yaml' } - response = self.client.post(reverse('dcim:devicetype_import'), data=form_data, follow=True) + response = self.client.post(reverse('dcim:devicetype_bulk_import'), data=form_data, follow=True) self.assertHttpStatus(response, 200) device_type = DeviceType.objects.get(model='TEST-1000') @@ -1081,9 +1120,15 @@ class ModuleTypeTestCase( ) RearPortTemplate.objects.bulk_create(rear_ports) front_ports = ( - FrontPortTemplate(module_type=moduletype, name='Front Port 1', rear_port=rear_ports[0], rear_port_position=1), - FrontPortTemplate(module_type=moduletype, name='Front Port 2', rear_port=rear_ports[1], rear_port_position=1), - FrontPortTemplate(module_type=moduletype, name='Front Port 3', rear_port=rear_ports[2], rear_port_position=1), + FrontPortTemplate( + module_type=moduletype, name='Front Port 1', rear_port=rear_ports[0], rear_port_position=1 + ), + FrontPortTemplate( + module_type=moduletype, name='Front Port 2', rear_port=rear_ports[1], rear_port_position=1 + ), + FrontPortTemplate( + module_type=moduletype, name='Front Port 3', rear_port=rear_ports[2], rear_port_position=1 + ), ) FrontPortTemplate.objects.bulk_create(front_ports) @@ -1183,7 +1228,7 @@ front-ports: 'data': IMPORT_DATA, 'format': 'yaml' } - response = self.client.post(reverse('dcim:moduletype_import'), data=form_data, follow=True) + response = self.client.post(reverse('dcim:moduletype_bulk_import'), data=form_data, follow=True) self.assertHttpStatus(response, 200) module_type = ModuleType.objects.get(model='TEST-1000') @@ -1453,11 +1498,19 @@ class FrontPortTemplateTestCase(ViewTestCases.DeviceComponentTemplateViewTestCas ) RearPortTemplate.objects.bulk_create(rearports) - FrontPortTemplate.objects.bulk_create(( - FrontPortTemplate(device_type=devicetype, name='Front Port Template 1', rear_port=rearports[0], rear_port_position=1), - FrontPortTemplate(device_type=devicetype, name='Front Port Template 2', rear_port=rearports[1], rear_port_position=1), - FrontPortTemplate(device_type=devicetype, name='Front Port Template 3', rear_port=rearports[2], rear_port_position=1), - )) + FrontPortTemplate.objects.bulk_create( + ( + FrontPortTemplate( + device_type=devicetype, name='Front Port Template 1', rear_port=rearports[0], rear_port_position=1 + ), + FrontPortTemplate( + device_type=devicetype, name='Front Port Template 2', rear_port=rearports[1], rear_port_position=1 + ), + FrontPortTemplate( + device_type=devicetype, name='Front Port Template 3', rear_port=rearports[2], rear_port_position=1 + ), + ) + ) cls.form_data = { 'device_type': devicetype.pk, @@ -1550,7 +1603,12 @@ class DeviceBayTemplateTestCase(ViewTestCases.DeviceComponentTemplateViewTestCas @classmethod def setUpTestData(cls): manufacturer = Manufacturer.objects.create(name='Manufacturer 1', slug='manufacturer-1') - devicetype = DeviceType.objects.create(manufacturer=manufacturer, model='Device Type 1', slug='device-type-1', subdevice_role=SubdeviceRoleChoices.ROLE_PARENT) + devicetype = DeviceType.objects.create( + manufacturer=manufacturer, + model='Device Type 1', + slug='device-type-1', + subdevice_role=SubdeviceRoleChoices.ROLE_PARENT + ) DeviceBayTemplate.objects.bulk_create(( DeviceBayTemplate(device_type=devicetype, name='Device Bay Template 1'), @@ -1584,12 +1642,20 @@ class InventoryItemTemplateTestCase(ViewTestCases.DeviceComponentTemplateViewTes Manufacturer(name='Manufacturer 2', slug='manufacturer-2'), ) Manufacturer.objects.bulk_create(manufacturers) - devicetype = DeviceType.objects.create(manufacturer=manufacturers[0], model='Device Type 1', slug='device-type-1') + devicetype = DeviceType.objects.create( + manufacturer=manufacturers[0], model='Device Type 1', slug='device-type-1' + ) inventory_item_templates = ( - InventoryItemTemplate(device_type=devicetype, name='Inventory Item Template 1', manufacturer=manufacturers[0]), - InventoryItemTemplate(device_type=devicetype, name='Inventory Item Template 2', manufacturer=manufacturers[0]), - InventoryItemTemplate(device_type=devicetype, name='Inventory Item Template 3', manufacturer=manufacturers[0]), + InventoryItemTemplate( + device_type=devicetype, name='Inventory Item Template 1', manufacturer=manufacturers[0] + ), + InventoryItemTemplate( + device_type=devicetype, name='Inventory Item Template 2', manufacturer=manufacturers[0] + ), + InventoryItemTemplate( + device_type=devicetype, name='Inventory Item Template 3', manufacturer=manufacturers[0] + ), ) for item in inventory_item_templates: item.save() @@ -1741,9 +1807,30 @@ class DeviceTestCase(ViewTestCases.PrimaryObjectViewTestCase): Platform.objects.bulk_create(platforms) devices = ( - Device(name='Device 1', site=sites[0], rack=racks[0], device_type=devicetypes[0], role=roles[0], platform=platforms[0]), - Device(name='Device 2', site=sites[0], rack=racks[0], device_type=devicetypes[0], role=roles[0], platform=platforms[0]), - Device(name='Device 3', site=sites[0], rack=racks[0], device_type=devicetypes[0], role=roles[0], platform=platforms[0]), + Device( + name='Device 1', + site=sites[0], + rack=racks[0], + device_type=devicetypes[0], + role=roles[0], + platform=platforms[0], + ), + Device( + name='Device 2', + site=sites[0], + rack=racks[0], + device_type=devicetypes[0], + role=roles[0], + platform=platforms[0], + ), + Device( + name='Device 3', + site=sites[0], + rack=racks[0], + device_type=devicetypes[0], + role=roles[0], + platform=platforms[0], + ), ) Device.objects.bulk_create(devices) @@ -1778,10 +1865,22 @@ class DeviceTestCase(ViewTestCases.PrimaryObjectViewTestCase): } cls.csv_data = ( - "role,manufacturer,device_type,status,name,site,location,rack,position,face,virtual_chassis,vc_position,vc_priority", - "Device Role 1,Manufacturer 1,Device Type 1,active,Device 4,Site 1,Location 1,Rack 1,10,front,Virtual Chassis 1,1,10", - "Device Role 1,Manufacturer 1,Device Type 1,active,Device 5,Site 1,Location 1,Rack 1,20,front,Virtual Chassis 1,2,20", - "Device Role 1,Manufacturer 1,Device Type 1,active,Device 6,Site 1,Location 1,Rack 1,30,front,Virtual Chassis 1,3,30", + ( + "role,manufacturer,device_type,status,name,site,location,rack,position,face,virtual_chassis," + "vc_position,vc_priority" + ), + ( + "Device Role 1,Manufacturer 1,Device Type 1,active,Device 4,Site 1,Location 1,Rack 1,10,front," + "Virtual Chassis 1,1,10" + ), + ( + "Device Role 1,Manufacturer 1,Device Type 1,active,Device 5,Site 1,Location 1,Rack 1,20,front," + "Virtual Chassis 1,2,20" + ), + ( + "Device Role 1,Manufacturer 1,Device Type 1,active,Device 6,Site 1,Location 1,Rack 1,30,front," + "Virtual Chassis 1,3,30" + ), ) cls.csv_update_data = ( @@ -2071,7 +2170,7 @@ class ModuleTestCase( f"{device.name},{module_bay.name},{module_type.model},active,false" ] request = { - 'path': self._get_url('import'), + 'path': self._get_url('bulk_import'), 'data': { 'data': '\n'.join(csv_data), 'format': ImportFormatChoices.CSV, @@ -2088,7 +2187,7 @@ class ModuleTestCase( module_bay = ModuleBay.objects.get(device=device, name='Module Bay 5') csv_data[1] = f"{device.name},{module_bay.name},{module_type.model},active,true" request = { - 'path': self._get_url('import'), + 'path': self._get_url('bulk_import'), 'data': { 'data': '\n'.join(csv_data), 'format': ImportFormatChoices.CSV, @@ -2165,7 +2264,7 @@ class ModuleTestCase( f"{device.name},{module_bay.name},{module_type.model},active,false,true" ] request = { - 'path': self._get_url('import'), + 'path': self._get_url('bulk_import'), 'data': { 'data': '\n'.join(csv_data), 'format': ImportFormatChoices.CSV, @@ -2508,7 +2607,6 @@ class InterfaceTestCase(ViewTestCases.DeviceComponentViewTestCase): 'enabled': False, 'bridge': interfaces[4].pk, 'lag': interfaces[3].pk, - 'mac_address': EUI('01:02:03:04:05:06'), 'wwn': EUI('01:02:03:04:05:06:07:08', version=64), 'mtu': 65000, 'speed': 1000000, @@ -2533,7 +2631,6 @@ class InterfaceTestCase(ViewTestCases.DeviceComponentViewTestCase): 'enabled': False, 'bridge': interfaces[4].pk, 'lag': interfaces[3].pk, - 'mac_address': EUI('01:02:03:04:05:06'), 'wwn': EUI('01:02:03:04:05:06:07:08', version=64), 'mtu': 2000, 'speed': 100000, @@ -2554,7 +2651,6 @@ class InterfaceTestCase(ViewTestCases.DeviceComponentViewTestCase): 'type': InterfaceTypeChoices.TYPE_1GE_FIXED, 'enabled': True, 'lag': interfaces[3].pk, - 'mac_address': EUI('01:02:03:04:05:06'), 'wwn': EUI('01:02:03:04:05:06:07:08', version=64), 'mtu': 2000, 'speed': 1000000, @@ -2887,9 +2983,15 @@ class InventoryItemTestCase(ViewTestCases.DeviceComponentViewTestCase): ) InventoryItemRole.objects.bulk_create(roles) - inventory_item1 = InventoryItem.objects.create(device=device, name='Inventory Item 1', role=roles[0], manufacturer=manufacturer) - inventory_item2 = InventoryItem.objects.create(device=device, name='Inventory Item 2', role=roles[0], manufacturer=manufacturer) - inventory_item3 = InventoryItem.objects.create(device=device, name='Inventory Item 3', role=roles[0], manufacturer=manufacturer) + inventory_item1 = InventoryItem.objects.create( + device=device, name='Inventory Item 1', role=roles[0], manufacturer=manufacturer + ) + inventory_item2 = InventoryItem.objects.create( + device=device, name='Inventory Item 2', role=roles[0], manufacturer=manufacturer + ) + inventory_item3 = InventoryItem.objects.create( + device=device, name='Inventory Item 3', role=roles[0], manufacturer=manufacturer + ) tags = create_tags('Alpha', 'Bravo', 'Charlie') @@ -2903,6 +3005,7 @@ class InventoryItemTestCase(ViewTestCases.DeviceComponentViewTestCase): 'part_id': '123456', 'serial': '123ABC', 'asset_tag': 'ABC123', + 'status': InventoryItemStatusChoices.STATUS_ACTIVE, 'description': 'An inventory item', 'tags': [t.pk for t in tags], } @@ -2916,6 +3019,7 @@ class InventoryItemTestCase(ViewTestCases.DeviceComponentViewTestCase): 'discovered': False, 'part_id': '123456', 'serial': '123ABC', + 'status': InventoryItemStatusChoices.STATUS_ACTIVE, 'description': 'An inventory item', 'tags': [t.pk for t in tags], } @@ -2927,10 +3031,10 @@ class InventoryItemTestCase(ViewTestCases.DeviceComponentViewTestCase): } cls.csv_data = ( - "device,name,parent", - "Device 1,Inventory Item 4,Inventory Item 1", - "Device 1,Inventory Item 5,Inventory Item 2", - "Device 1,Inventory Item 6,Inventory Item 3", + "device,name,parent,status", + "Device 1,Inventory Item 4,Inventory Item 1,active", + "Device 1,Inventory Item 5,Inventory Item 2,planned", + "Device 1,Inventory Item 6,Inventory Item 3,failed", ) cls.csv_update_data = ( @@ -3366,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', + } diff --git a/netbox/dcim/urls.py b/netbox/dcim/urls.py index 627136bf9..bcfd32707 100644 --- a/netbox/dcim/urls.py +++ b/netbox/dcim/urls.py @@ -6,327 +6,144 @@ from . import views app_name = 'dcim' urlpatterns = [ - # Regions - path('regions/', views.RegionListView.as_view(), name='region_list'), - path('regions/add/', views.RegionEditView.as_view(), name='region_add'), - path('regions/import/', views.RegionBulkImportView.as_view(), name='region_import'), - path('regions/edit/', views.RegionBulkEditView.as_view(), name='region_bulk_edit'), - path('regions/delete/', views.RegionBulkDeleteView.as_view(), name='region_bulk_delete'), + path('regions/', include(get_model_urls('dcim', 'region', detail=False))), path('regions//', include(get_model_urls('dcim', 'region'))), - # Site groups - path('site-groups/', views.SiteGroupListView.as_view(), name='sitegroup_list'), - path('site-groups/add/', views.SiteGroupEditView.as_view(), name='sitegroup_add'), - path('site-groups/import/', views.SiteGroupBulkImportView.as_view(), name='sitegroup_import'), - path('site-groups/edit/', views.SiteGroupBulkEditView.as_view(), name='sitegroup_bulk_edit'), - path('site-groups/delete/', views.SiteGroupBulkDeleteView.as_view(), name='sitegroup_bulk_delete'), + path('site-groups/', include(get_model_urls('dcim', 'sitegroup', detail=False))), path('site-groups//', include(get_model_urls('dcim', 'sitegroup'))), - # Sites - path('sites/', views.SiteListView.as_view(), name='site_list'), - path('sites/add/', views.SiteEditView.as_view(), name='site_add'), - path('sites/import/', views.SiteBulkImportView.as_view(), name='site_import'), - path('sites/edit/', views.SiteBulkEditView.as_view(), name='site_bulk_edit'), - path('sites/delete/', views.SiteBulkDeleteView.as_view(), name='site_bulk_delete'), + path('sites/', include(get_model_urls('dcim', 'site', detail=False))), path('sites//', include(get_model_urls('dcim', 'site'))), - # Locations - path('locations/', views.LocationListView.as_view(), name='location_list'), - path('locations/add/', views.LocationEditView.as_view(), name='location_add'), - path('locations/import/', views.LocationBulkImportView.as_view(), name='location_import'), - path('locations/edit/', views.LocationBulkEditView.as_view(), name='location_bulk_edit'), - path('locations/delete/', views.LocationBulkDeleteView.as_view(), name='location_bulk_delete'), + path('locations/', include(get_model_urls('dcim', 'location', detail=False))), path('locations//', include(get_model_urls('dcim', 'location'))), - # Rack roles - path('rack-roles/', views.RackRoleListView.as_view(), name='rackrole_list'), - path('rack-roles/add/', views.RackRoleEditView.as_view(), name='rackrole_add'), - path('rack-roles/import/', views.RackRoleBulkImportView.as_view(), name='rackrole_import'), - path('rack-roles/edit/', views.RackRoleBulkEditView.as_view(), name='rackrole_bulk_edit'), - path('rack-roles/delete/', views.RackRoleBulkDeleteView.as_view(), name='rackrole_bulk_delete'), + path('rack-roles/', include(get_model_urls('dcim', 'rackrole', detail=False))), path('rack-roles//', include(get_model_urls('dcim', 'rackrole'))), - # Rack reservations - path('rack-reservations/', views.RackReservationListView.as_view(), name='rackreservation_list'), - path('rack-reservations/add/', views.RackReservationEditView.as_view(), name='rackreservation_add'), - path('rack-reservations/import/', views.RackReservationImportView.as_view(), name='rackreservation_import'), - path('rack-reservations/edit/', views.RackReservationBulkEditView.as_view(), name='rackreservation_bulk_edit'), - path('rack-reservations/delete/', views.RackReservationBulkDeleteView.as_view(), name='rackreservation_bulk_delete'), + path('rack-reservations/', include(get_model_urls('dcim', 'rackreservation', detail=False))), path('rack-reservations//', include(get_model_urls('dcim', 'rackreservation'))), - # Racks - path('racks/', views.RackListView.as_view(), name='rack_list'), - path('rack-elevations/', views.RackElevationListView.as_view(), name='rack_elevation_list'), - path('racks/add/', views.RackEditView.as_view(), name='rack_add'), - path('racks/import/', views.RackBulkImportView.as_view(), name='rack_import'), - path('racks/edit/', views.RackBulkEditView.as_view(), name='rack_bulk_edit'), - path('racks/delete/', views.RackBulkDeleteView.as_view(), name='rack_bulk_delete'), + path('racks/', include(get_model_urls('dcim', 'rack', detail=False))), path('racks//', include(get_model_urls('dcim', 'rack'))), + path('rack-elevations/', views.RackElevationListView.as_view(), name='rack_elevation_list'), - # Rack Types - path('rack-types/', views.RackTypeListView.as_view(), name='racktype_list'), - path('rack-types/add/', views.RackTypeEditView.as_view(), name='racktype_add'), - path('rack-types/import/', views.RackTypeBulkImportView.as_view(), name='racktype_import'), - path('rack-types/edit/', views.RackTypeBulkEditView.as_view(), name='racktype_bulk_edit'), - path('rack-types/delete/', views.RackTypeBulkDeleteView.as_view(), name='racktype_bulk_delete'), + path('rack-types/', include(get_model_urls('dcim', 'racktype', detail=False))), path('rack-types//', include(get_model_urls('dcim', 'racktype'))), - # Manufacturers - path('manufacturers/', views.ManufacturerListView.as_view(), name='manufacturer_list'), - path('manufacturers/add/', views.ManufacturerEditView.as_view(), name='manufacturer_add'), - path('manufacturers/import/', views.ManufacturerBulkImportView.as_view(), name='manufacturer_import'), - path('manufacturers/edit/', views.ManufacturerBulkEditView.as_view(), name='manufacturer_bulk_edit'), - path('manufacturers/delete/', views.ManufacturerBulkDeleteView.as_view(), name='manufacturer_bulk_delete'), + path('manufacturers/', include(get_model_urls('dcim', 'manufacturer', detail=False))), path('manufacturers//', include(get_model_urls('dcim', 'manufacturer'))), - # Device types - path('device-types/', views.DeviceTypeListView.as_view(), name='devicetype_list'), - path('device-types/add/', views.DeviceTypeEditView.as_view(), name='devicetype_add'), - path('device-types/import/', views.DeviceTypeImportView.as_view(), name='devicetype_import'), - path('device-types/edit/', views.DeviceTypeBulkEditView.as_view(), name='devicetype_bulk_edit'), - path('device-types/delete/', views.DeviceTypeBulkDeleteView.as_view(), name='devicetype_bulk_delete'), + path('device-types/', include(get_model_urls('dcim', 'devicetype', detail=False))), path('device-types//', include(get_model_urls('dcim', 'devicetype'))), - # Module types - path('module-types/', views.ModuleTypeListView.as_view(), name='moduletype_list'), - path('module-types/add/', views.ModuleTypeEditView.as_view(), name='moduletype_add'), - path('module-types/import/', views.ModuleTypeImportView.as_view(), name='moduletype_import'), - path('module-types/edit/', views.ModuleTypeBulkEditView.as_view(), name='moduletype_bulk_edit'), - path('module-types/delete/', views.ModuleTypeBulkDeleteView.as_view(), name='moduletype_bulk_delete'), + path('module-types/', include(get_model_urls('dcim', 'moduletype', detail=False))), path('module-types//', include(get_model_urls('dcim', 'moduletype'))), - # Console port templates - path('console-port-templates/add/', views.ConsolePortTemplateCreateView.as_view(), name='consoleporttemplate_add'), - path('console-port-templates/edit/', views.ConsolePortTemplateBulkEditView.as_view(), name='consoleporttemplate_bulk_edit'), - path('console-port-templates/rename/', views.ConsolePortTemplateBulkRenameView.as_view(), name='consoleporttemplate_bulk_rename'), - path('console-port-templates/delete/', views.ConsolePortTemplateBulkDeleteView.as_view(), name='consoleporttemplate_bulk_delete'), + path('console-port-templates/', include(get_model_urls('dcim', 'consoleporttemplate', detail=False))), path('console-port-templates//', include(get_model_urls('dcim', 'consoleporttemplate'))), - # Console server port templates - path('console-server-port-templates/add/', views.ConsoleServerPortTemplateCreateView.as_view(), name='consoleserverporttemplate_add'), - path('console-server-port-templates/edit/', views.ConsoleServerPortTemplateBulkEditView.as_view(), name='consoleserverporttemplate_bulk_edit'), - path('console-server-port-templates/rename/', views.ConsoleServerPortTemplateBulkRenameView.as_view(), name='consoleserverporttemplate_bulk_rename'), - path('console-server-port-templates/delete/', views.ConsoleServerPortTemplateBulkDeleteView.as_view(), name='consoleserverporttemplate_bulk_delete'), + path('console-server-port-templates/', include(get_model_urls('dcim', 'consoleserverporttemplate', detail=False))), path('console-server-port-templates//', include(get_model_urls('dcim', 'consoleserverporttemplate'))), - # Power port templates - path('power-port-templates/add/', views.PowerPortTemplateCreateView.as_view(), name='powerporttemplate_add'), - path('power-port-templates/edit/', views.PowerPortTemplateBulkEditView.as_view(), name='powerporttemplate_bulk_edit'), - path('power-port-templates/rename/', views.PowerPortTemplateBulkRenameView.as_view(), name='powerporttemplate_bulk_rename'), - path('power-port-templates/delete/', views.PowerPortTemplateBulkDeleteView.as_view(), name='powerporttemplate_bulk_delete'), + path('power-port-templates/', include(get_model_urls('dcim', 'powerporttemplate', detail=False))), path('power-port-templates//', include(get_model_urls('dcim', 'powerporttemplate'))), - # Power outlet templates - path('power-outlet-templates/add/', views.PowerOutletTemplateCreateView.as_view(), name='poweroutlettemplate_add'), - path('power-outlet-templates/edit/', views.PowerOutletTemplateBulkEditView.as_view(), name='poweroutlettemplate_bulk_edit'), - path('power-outlet-templates/rename/', views.PowerOutletTemplateBulkRenameView.as_view(), name='poweroutlettemplate_bulk_rename'), - path('power-outlet-templates/delete/', views.PowerOutletTemplateBulkDeleteView.as_view(), name='poweroutlettemplate_bulk_delete'), + path('power-outlet-templates/', include(get_model_urls('dcim', 'poweroutlettemplate', detail=False))), path('power-outlet-templates//', include(get_model_urls('dcim', 'poweroutlettemplate'))), - # Interface templates - path('interface-templates/add/', views.InterfaceTemplateCreateView.as_view(), name='interfacetemplate_add'), - path('interface-templates/edit/', views.InterfaceTemplateBulkEditView.as_view(), name='interfacetemplate_bulk_edit'), - path('interface-templates/rename/', views.InterfaceTemplateBulkRenameView.as_view(), name='interfacetemplate_bulk_rename'), - path('interface-templates/delete/', views.InterfaceTemplateBulkDeleteView.as_view(), name='interfacetemplate_bulk_delete'), + path('interface-templates/', include(get_model_urls('dcim', 'interfacetemplate', detail=False))), path('interface-templates//', include(get_model_urls('dcim', 'interfacetemplate'))), - # Front port templates - path('front-port-templates/add/', views.FrontPortTemplateCreateView.as_view(), name='frontporttemplate_add'), - path('front-port-templates/edit/', views.FrontPortTemplateBulkEditView.as_view(), name='frontporttemplate_bulk_edit'), - path('front-port-templates/rename/', views.FrontPortTemplateBulkRenameView.as_view(), name='frontporttemplate_bulk_rename'), - path('front-port-templates/delete/', views.FrontPortTemplateBulkDeleteView.as_view(), name='frontporttemplate_bulk_delete'), + path('front-port-templates/', include(get_model_urls('dcim', 'frontporttemplate', detail=False))), path('front-port-templates//', include(get_model_urls('dcim', 'frontporttemplate'))), - # Rear port templates - path('rear-port-templates/add/', views.RearPortTemplateCreateView.as_view(), name='rearporttemplate_add'), - path('rear-port-templates/edit/', views.RearPortTemplateBulkEditView.as_view(), name='rearporttemplate_bulk_edit'), - path('rear-port-templates/rename/', views.RearPortTemplateBulkRenameView.as_view(), name='rearporttemplate_bulk_rename'), - path('rear-port-templates/delete/', views.RearPortTemplateBulkDeleteView.as_view(), name='rearporttemplate_bulk_delete'), + path('rear-port-templates/', include(get_model_urls('dcim', 'rearporttemplate', detail=False))), path('rear-port-templates//', include(get_model_urls('dcim', 'rearporttemplate'))), - # Device bay templates - path('device-bay-templates/add/', views.DeviceBayTemplateCreateView.as_view(), name='devicebaytemplate_add'), - path('device-bay-templates/edit/', views.DeviceBayTemplateBulkEditView.as_view(), name='devicebaytemplate_bulk_edit'), - path('device-bay-templates/rename/', views.DeviceBayTemplateBulkRenameView.as_view(), name='devicebaytemplate_bulk_rename'), - path('device-bay-templates/delete/', views.DeviceBayTemplateBulkDeleteView.as_view(), name='devicebaytemplate_bulk_delete'), + path('device-bay-templates/', include(get_model_urls('dcim', 'devicebaytemplate', detail=False))), path('device-bay-templates//', include(get_model_urls('dcim', 'devicebaytemplate'))), - # Module bay templates - path('module-bay-templates/add/', views.ModuleBayTemplateCreateView.as_view(), name='modulebaytemplate_add'), - path('module-bay-templates/edit/', views.ModuleBayTemplateBulkEditView.as_view(), name='modulebaytemplate_bulk_edit'), - path('module-bay-templates/rename/', views.ModuleBayTemplateBulkRenameView.as_view(), name='modulebaytemplate_bulk_rename'), - path('module-bay-templates/delete/', views.ModuleBayTemplateBulkDeleteView.as_view(), name='modulebaytemplate_bulk_delete'), + path('module-bay-templates/', include(get_model_urls('dcim', 'modulebaytemplate', detail=False))), path('module-bay-templates//', include(get_model_urls('dcim', 'modulebaytemplate'))), - # Inventory item templates - path('inventory-item-templates/add/', views.InventoryItemTemplateCreateView.as_view(), name='inventoryitemtemplate_add'), - path('inventory-item-templates/edit/', views.InventoryItemTemplateBulkEditView.as_view(), name='inventoryitemtemplate_bulk_edit'), - path('inventory-item-templates/rename/', views.InventoryItemTemplateBulkRenameView.as_view(), name='inventoryitemtemplate_bulk_rename'), - path('inventory-item-templates/delete/', views.InventoryItemTemplateBulkDeleteView.as_view(), name='inventoryitemtemplate_bulk_delete'), + path('inventory-item-templates/', include(get_model_urls('dcim', 'inventoryitemtemplate', detail=False))), path('inventory-item-templates//', include(get_model_urls('dcim', 'inventoryitemtemplate'))), - # Device roles - path('device-roles/', views.DeviceRoleListView.as_view(), name='devicerole_list'), - path('device-roles/add/', views.DeviceRoleEditView.as_view(), name='devicerole_add'), - path('device-roles/import/', views.DeviceRoleBulkImportView.as_view(), name='devicerole_import'), - path('device-roles/edit/', views.DeviceRoleBulkEditView.as_view(), name='devicerole_bulk_edit'), - path('device-roles/delete/', views.DeviceRoleBulkDeleteView.as_view(), name='devicerole_bulk_delete'), + path('device-roles/', include(get_model_urls('dcim', 'devicerole', detail=False))), path('device-roles//', include(get_model_urls('dcim', 'devicerole'))), - # Platforms - path('platforms/', views.PlatformListView.as_view(), name='platform_list'), - path('platforms/add/', views.PlatformEditView.as_view(), name='platform_add'), - path('platforms/import/', views.PlatformBulkImportView.as_view(), name='platform_import'), - path('platforms/edit/', views.PlatformBulkEditView.as_view(), name='platform_bulk_edit'), - path('platforms/delete/', views.PlatformBulkDeleteView.as_view(), name='platform_bulk_delete'), + path('platforms/', include(get_model_urls('dcim', 'platform', detail=False))), path('platforms//', include(get_model_urls('dcim', 'platform'))), - # Devices - path('devices/', views.DeviceListView.as_view(), name='device_list'), - path('devices/add/', views.DeviceEditView.as_view(), name='device_add'), - path('devices/import/', views.DeviceBulkImportView.as_view(), name='device_import'), - path('devices/edit/', views.DeviceBulkEditView.as_view(), name='device_bulk_edit'), - path('devices/rename/', views.DeviceBulkRenameView.as_view(), name='device_bulk_rename'), - path('devices/delete/', views.DeviceBulkDeleteView.as_view(), name='device_bulk_delete'), + path('devices/', include(get_model_urls('dcim', 'device', detail=False))), path('devices//', include(get_model_urls('dcim', 'device'))), - # Virtual Device Context - path('virtual-device-contexts/', views.VirtualDeviceContextListView.as_view(), name='virtualdevicecontext_list'), - path('virtual-device-contexts/add/', views.VirtualDeviceContextEditView.as_view(), name='virtualdevicecontext_add'), - path('virtual-device-contexts/import/', views.VirtualDeviceContextBulkImportView.as_view(), name='virtualdevicecontext_import'), - path('virtual-device-contexts/edit/', views.VirtualDeviceContextBulkEditView.as_view(), name='virtualdevicecontext_bulk_edit'), - path('virtual-device-contexts/delete/', views.VirtualDeviceContextBulkDeleteView.as_view(), name='virtualdevicecontext_bulk_delete'), + path('virtual-device-contexts/', include(get_model_urls('dcim', 'virtualdevicecontext', detail=False))), path('virtual-device-contexts//', include(get_model_urls('dcim', 'virtualdevicecontext'))), - # Modules - path('modules/', views.ModuleListView.as_view(), name='module_list'), - path('modules/add/', views.ModuleEditView.as_view(), name='module_add'), - path('modules/import/', views.ModuleBulkImportView.as_view(), name='module_import'), - path('modules/edit/', views.ModuleBulkEditView.as_view(), name='module_bulk_edit'), - path('modules/delete/', views.ModuleBulkDeleteView.as_view(), name='module_bulk_delete'), + path('modules/', include(get_model_urls('dcim', 'module', detail=False))), path('modules//', include(get_model_urls('dcim', 'module'))), - # Console ports - path('console-ports/', views.ConsolePortListView.as_view(), name='consoleport_list'), - path('console-ports/add/', views.ConsolePortCreateView.as_view(), name='consoleport_add'), - path('console-ports/import/', views.ConsolePortBulkImportView.as_view(), name='consoleport_import'), - path('console-ports/edit/', views.ConsolePortBulkEditView.as_view(), name='consoleport_bulk_edit'), - path('console-ports/rename/', views.ConsolePortBulkRenameView.as_view(), name='consoleport_bulk_rename'), - path('console-ports/disconnect/', views.ConsolePortBulkDisconnectView.as_view(), name='consoleport_bulk_disconnect'), - path('console-ports/delete/', views.ConsolePortBulkDeleteView.as_view(), name='consoleport_bulk_delete'), + path('console-ports/', include(get_model_urls('dcim', 'consoleport', detail=False))), path('console-ports//', include(get_model_urls('dcim', 'consoleport'))), - path('devices/console-ports/add/', views.DeviceBulkAddConsolePortView.as_view(), name='device_bulk_add_consoleport'), + path( + 'devices/console-ports/add/', + views.DeviceBulkAddConsolePortView.as_view(), + name='device_bulk_add_consoleport' + ), - # Console server ports - path('console-server-ports/', views.ConsoleServerPortListView.as_view(), name='consoleserverport_list'), - path('console-server-ports/add/', views.ConsoleServerPortCreateView.as_view(), name='consoleserverport_add'), - path('console-server-ports/import/', views.ConsoleServerPortBulkImportView.as_view(), name='consoleserverport_import'), - path('console-server-ports/edit/', views.ConsoleServerPortBulkEditView.as_view(), name='consoleserverport_bulk_edit'), - path('console-server-ports/rename/', views.ConsoleServerPortBulkRenameView.as_view(), name='consoleserverport_bulk_rename'), - path('console-server-ports/disconnect/', views.ConsoleServerPortBulkDisconnectView.as_view(), name='consoleserverport_bulk_disconnect'), - path('console-server-ports/delete/', views.ConsoleServerPortBulkDeleteView.as_view(), name='consoleserverport_bulk_delete'), + path('console-server-ports/', include(get_model_urls('dcim', 'consoleserverport', detail=False))), path('console-server-ports//', include(get_model_urls('dcim', 'consoleserverport'))), - path('devices/console-server-ports/add/', views.DeviceBulkAddConsoleServerPortView.as_view(), name='device_bulk_add_consoleserverport'), + path( + 'devices/console-server-ports/add/', + views.DeviceBulkAddConsoleServerPortView.as_view(), + name='device_bulk_add_consoleserverport' + ), - # Power ports - path('power-ports/', views.PowerPortListView.as_view(), name='powerport_list'), - path('power-ports/add/', views.PowerPortCreateView.as_view(), name='powerport_add'), - path('power-ports/import/', views.PowerPortBulkImportView.as_view(), name='powerport_import'), - path('power-ports/edit/', views.PowerPortBulkEditView.as_view(), name='powerport_bulk_edit'), - path('power-ports/rename/', views.PowerPortBulkRenameView.as_view(), name='powerport_bulk_rename'), - path('power-ports/disconnect/', views.PowerPortBulkDisconnectView.as_view(), name='powerport_bulk_disconnect'), - path('power-ports/delete/', views.PowerPortBulkDeleteView.as_view(), name='powerport_bulk_delete'), + path('power-ports/', include(get_model_urls('dcim', 'powerport', detail=False))), path('power-ports//', include(get_model_urls('dcim', 'powerport'))), path('devices/power-ports/add/', views.DeviceBulkAddPowerPortView.as_view(), name='device_bulk_add_powerport'), - # Power outlets - path('power-outlets/', views.PowerOutletListView.as_view(), name='poweroutlet_list'), - path('power-outlets/add/', views.PowerOutletCreateView.as_view(), name='poweroutlet_add'), - path('power-outlets/import/', views.PowerOutletBulkImportView.as_view(), name='poweroutlet_import'), - path('power-outlets/edit/', views.PowerOutletBulkEditView.as_view(), name='poweroutlet_bulk_edit'), - path('power-outlets/rename/', views.PowerOutletBulkRenameView.as_view(), name='poweroutlet_bulk_rename'), - path('power-outlets/disconnect/', views.PowerOutletBulkDisconnectView.as_view(), name='poweroutlet_bulk_disconnect'), - path('power-outlets/delete/', views.PowerOutletBulkDeleteView.as_view(), name='poweroutlet_bulk_delete'), + path('power-outlets/', include(get_model_urls('dcim', 'poweroutlet', detail=False))), path('power-outlets//', include(get_model_urls('dcim', 'poweroutlet'))), - path('devices/power-outlets/add/', views.DeviceBulkAddPowerOutletView.as_view(), name='device_bulk_add_poweroutlet'), + path( + 'devices/power-outlets/add/', + views.DeviceBulkAddPowerOutletView.as_view(), + name='device_bulk_add_poweroutlet' + ), - # Interfaces - path('interfaces/', views.InterfaceListView.as_view(), name='interface_list'), - path('interfaces/add/', views.InterfaceCreateView.as_view(), name='interface_add'), - path('interfaces/import/', views.InterfaceBulkImportView.as_view(), name='interface_import'), - path('interfaces/edit/', views.InterfaceBulkEditView.as_view(), name='interface_bulk_edit'), - path('interfaces/rename/', views.InterfaceBulkRenameView.as_view(), name='interface_bulk_rename'), - path('interfaces/disconnect/', views.InterfaceBulkDisconnectView.as_view(), name='interface_bulk_disconnect'), - path('interfaces/delete/', views.InterfaceBulkDeleteView.as_view(), name='interface_bulk_delete'), + path('interfaces/', include(get_model_urls('dcim', 'interface', detail=False))), path('interfaces//', include(get_model_urls('dcim', 'interface'))), path('devices/interfaces/add/', views.DeviceBulkAddInterfaceView.as_view(), name='device_bulk_add_interface'), - # Front ports - path('front-ports/', views.FrontPortListView.as_view(), name='frontport_list'), - path('front-ports/add/', views.FrontPortCreateView.as_view(), name='frontport_add'), - path('front-ports/import/', views.FrontPortBulkImportView.as_view(), name='frontport_import'), - path('front-ports/edit/', views.FrontPortBulkEditView.as_view(), name='frontport_bulk_edit'), - path('front-ports/rename/', views.FrontPortBulkRenameView.as_view(), name='frontport_bulk_rename'), - path('front-ports/disconnect/', views.FrontPortBulkDisconnectView.as_view(), name='frontport_bulk_disconnect'), - path('front-ports/delete/', views.FrontPortBulkDeleteView.as_view(), name='frontport_bulk_delete'), + path('front-ports/', include(get_model_urls('dcim', 'frontport', detail=False))), path('front-ports//', include(get_model_urls('dcim', 'frontport'))), - # path('devices/front-ports/add/', views.DeviceBulkAddFrontPortView.as_view(), name='device_bulk_add_frontport'), - # Rear ports - path('rear-ports/', views.RearPortListView.as_view(), name='rearport_list'), - path('rear-ports/add/', views.RearPortCreateView.as_view(), name='rearport_add'), - path('rear-ports/import/', views.RearPortBulkImportView.as_view(), name='rearport_import'), - path('rear-ports/edit/', views.RearPortBulkEditView.as_view(), name='rearport_bulk_edit'), - path('rear-ports/rename/', views.RearPortBulkRenameView.as_view(), name='rearport_bulk_rename'), - path('rear-ports/disconnect/', views.RearPortBulkDisconnectView.as_view(), name='rearport_bulk_disconnect'), - path('rear-ports/delete/', views.RearPortBulkDeleteView.as_view(), name='rearport_bulk_delete'), + path('rear-ports/', include(get_model_urls('dcim', 'rearport', detail=False))), path('rear-ports//', include(get_model_urls('dcim', 'rearport'))), path('devices/rear-ports/add/', views.DeviceBulkAddRearPortView.as_view(), name='device_bulk_add_rearport'), - # Module bays - path('module-bays/', views.ModuleBayListView.as_view(), name='modulebay_list'), - path('module-bays/add/', views.ModuleBayCreateView.as_view(), name='modulebay_add'), - path('module-bays/import/', views.ModuleBayBulkImportView.as_view(), name='modulebay_import'), - path('module-bays/edit/', views.ModuleBayBulkEditView.as_view(), name='modulebay_bulk_edit'), - path('module-bays/rename/', views.ModuleBayBulkRenameView.as_view(), name='modulebay_bulk_rename'), - path('module-bays/delete/', views.ModuleBayBulkDeleteView.as_view(), name='modulebay_bulk_delete'), + path('module-bays/', include(get_model_urls('dcim', 'modulebay', detail=False))), path('module-bays//', include(get_model_urls('dcim', 'modulebay'))), path('devices/module-bays/add/', views.DeviceBulkAddModuleBayView.as_view(), name='device_bulk_add_modulebay'), - # Device bays - path('device-bays/', views.DeviceBayListView.as_view(), name='devicebay_list'), - path('device-bays/add/', views.DeviceBayCreateView.as_view(), name='devicebay_add'), - path('device-bays/import/', views.DeviceBayBulkImportView.as_view(), name='devicebay_import'), - path('device-bays/edit/', views.DeviceBayBulkEditView.as_view(), name='devicebay_bulk_edit'), - path('device-bays/rename/', views.DeviceBayBulkRenameView.as_view(), name='devicebay_bulk_rename'), - path('device-bays/delete/', views.DeviceBayBulkDeleteView.as_view(), name='devicebay_bulk_delete'), + path('device-bays/', include(get_model_urls('dcim', 'devicebay', detail=False))), path('device-bays//', include(get_model_urls('dcim', 'devicebay'))), path('devices/device-bays/add/', views.DeviceBulkAddDeviceBayView.as_view(), name='device_bulk_add_devicebay'), - # Inventory items - path('inventory-items/', views.InventoryItemListView.as_view(), name='inventoryitem_list'), - path('inventory-items/add/', views.InventoryItemCreateView.as_view(), name='inventoryitem_add'), - path('inventory-items/import/', views.InventoryItemBulkImportView.as_view(), name='inventoryitem_import'), - path('inventory-items/edit/', views.InventoryItemBulkEditView.as_view(), name='inventoryitem_bulk_edit'), - path('inventory-items/rename/', views.InventoryItemBulkRenameView.as_view(), name='inventoryitem_bulk_rename'), - path('inventory-items/delete/', views.InventoryItemBulkDeleteView.as_view(), name='inventoryitem_bulk_delete'), + path('inventory-items/', include(get_model_urls('dcim', 'inventoryitem', detail=False))), path('inventory-items//', include(get_model_urls('dcim', 'inventoryitem'))), - path('devices/inventory-items/add/', views.DeviceBulkAddInventoryItemView.as_view(), name='device_bulk_add_inventoryitem'), + path( + 'devices/inventory-items/add/', + views.DeviceBulkAddInventoryItemView.as_view(), + name='device_bulk_add_inventoryitem' + ), - # Inventory item roles - path('inventory-item-roles/', views.InventoryItemRoleListView.as_view(), name='inventoryitemrole_list'), - path('inventory-item-roles/add/', views.InventoryItemRoleEditView.as_view(), name='inventoryitemrole_add'), - path('inventory-item-roles/import/', views.InventoryItemRoleBulkImportView.as_view(), name='inventoryitemrole_import'), - path('inventory-item-roles/edit/', views.InventoryItemRoleBulkEditView.as_view(), name='inventoryitemrole_bulk_edit'), - path('inventory-item-roles/delete/', views.InventoryItemRoleBulkDeleteView.as_view(), name='inventoryitemrole_bulk_delete'), + path('inventory-item-roles/', include(get_model_urls('dcim', 'inventoryitemrole', detail=False))), path('inventory-item-roles//', include(get_model_urls('dcim', 'inventoryitemrole'))), - # Cables - path('cables/', views.CableListView.as_view(), name='cable_list'), - path('cables/add/', views.CableEditView.as_view(), name='cable_add'), - path('cables/import/', views.CableBulkImportView.as_view(), name='cable_import'), - path('cables/edit/', views.CableBulkEditView.as_view(), name='cable_bulk_edit'), - path('cables/delete/', views.CableBulkDeleteView.as_view(), name='cable_bulk_delete'), + path('cables/', include(get_model_urls('dcim', 'cable', detail=False))), path('cables//', include(get_model_urls('dcim', 'cable'))), # Console/power/interface connections (read-only) @@ -334,30 +151,21 @@ urlpatterns = [ path('power-connections/', views.PowerConnectionsListView.as_view(), name='power_connections_list'), path('interface-connections/', views.InterfaceConnectionsListView.as_view(), name='interface_connections_list'), - # Virtual chassis - path('virtual-chassis/', views.VirtualChassisListView.as_view(), name='virtualchassis_list'), - path('virtual-chassis/add/', views.VirtualChassisCreateView.as_view(), name='virtualchassis_add'), - path('virtual-chassis/import/', views.VirtualChassisBulkImportView.as_view(), name='virtualchassis_import'), - path('virtual-chassis/edit/', views.VirtualChassisBulkEditView.as_view(), name='virtualchassis_bulk_edit'), - path('virtual-chassis/delete/', views.VirtualChassisBulkDeleteView.as_view(), name='virtualchassis_bulk_delete'), + path('virtual-chassis/', include(get_model_urls('dcim', 'virtualchassis', detail=False))), path('virtual-chassis//', include(get_model_urls('dcim', 'virtualchassis'))), - path('virtual-chassis-members//delete/', views.VirtualChassisRemoveMemberView.as_view(), name='virtualchassis_remove_member'), + path( + 'virtual-chassis-members//delete/', + views.VirtualChassisRemoveMemberView.as_view(), + name='virtualchassis_remove_member' + ), - # Power panels - path('power-panels/', views.PowerPanelListView.as_view(), name='powerpanel_list'), - path('power-panels/add/', views.PowerPanelEditView.as_view(), name='powerpanel_add'), - path('power-panels/import/', views.PowerPanelBulkImportView.as_view(), name='powerpanel_import'), - path('power-panels/edit/', views.PowerPanelBulkEditView.as_view(), name='powerpanel_bulk_edit'), - path('power-panels/delete/', views.PowerPanelBulkDeleteView.as_view(), name='powerpanel_bulk_delete'), + path('power-panels/', include(get_model_urls('dcim', 'powerpanel', detail=False))), path('power-panels//', include(get_model_urls('dcim', 'powerpanel'))), - # Power feeds - path('power-feeds/', views.PowerFeedListView.as_view(), name='powerfeed_list'), - path('power-feeds/add/', views.PowerFeedEditView.as_view(), name='powerfeed_add'), - path('power-feeds/import/', views.PowerFeedBulkImportView.as_view(), name='powerfeed_import'), - path('power-feeds/edit/', views.PowerFeedBulkEditView.as_view(), name='powerfeed_bulk_edit'), - path('power-feeds/disconnect/', views.PowerFeedBulkDisconnectView.as_view(), name='powerfeed_bulk_disconnect'), - path('power-feeds/delete/', views.PowerFeedBulkDeleteView.as_view(), name='powerfeed_bulk_delete'), + path('power-feeds/', include(get_model_urls('dcim', 'powerfeed', detail=False))), path('power-feeds//', include(get_model_urls('dcim', 'powerfeed'))), + path('mac-addresses/', include(get_model_urls('dcim', 'macaddress', detail=False))), + path('mac-addresses//', include(get_model_urls('dcim', 'macaddress'))), + ] diff --git a/netbox/dcim/views.py b/netbox/dcim/views.py index f390be89b..0978747d1 100644 --- a/netbox/dcim/views.py +++ b/netbox/dcim/views.py @@ -1,5 +1,3 @@ -import traceback - from django.contrib import messages from django.contrib.contenttypes.models import ContentType from django.core.paginator import EmptyPage, PageNotAnInteger @@ -17,8 +15,8 @@ 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.tables import InterfaceVLANTable +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 from tenancy.views import ObjectContactsView @@ -32,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 * @@ -215,6 +214,7 @@ class PathTraceView(generic.ObjectView): # Regions # +@register_model_view(Region, 'list', path='', detail=False) class RegionListView(generic.ObjectListView): queryset = Region.objects.add_related_count( Region.objects.all(), @@ -239,14 +239,27 @@ 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'), + ( + Circuit.objects.restrict(request.user, 'view').filter( + terminations___region=instance + ).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'), ), ), } +@register_model_view(Region, 'add', detail=False) @register_model_view(Region, 'edit') class RegionEditView(generic.ObjectEditView): queryset = Region.objects.all() @@ -258,11 +271,13 @@ class RegionDeleteView(generic.ObjectDeleteView): queryset = Region.objects.all() +@register_model_view(Region, 'bulk_import', detail=False) class RegionBulkImportView(generic.BulkImportView): queryset = Region.objects.all() model_form = forms.RegionImportForm +@register_model_view(Region, 'bulk_edit', path='edit', detail=False) class RegionBulkEditView(generic.BulkEditView): queryset = Region.objects.add_related_count( Region.objects.all(), @@ -276,6 +291,7 @@ class RegionBulkEditView(generic.BulkEditView): form = forms.RegionBulkEditForm +@register_model_view(Region, 'bulk_delete', path='delete', detail=False) class RegionBulkDeleteView(generic.BulkDeleteView): queryset = Region.objects.add_related_count( Region.objects.all(), @@ -297,6 +313,7 @@ class RegionContactsView(ObjectContactsView): # Site groups # +@register_model_view(SiteGroup, 'list', path='', detail=False) class SiteGroupListView(generic.ObjectListView): queryset = SiteGroup.objects.add_related_count( SiteGroup.objects.all(), @@ -321,14 +338,36 @@ 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'), + ( + Circuit.objects.restrict(request.user, 'view').filter( + terminations___site_group=instance + ).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' + ), ), ), } +@register_model_view(SiteGroup, 'add', detail=False) @register_model_view(SiteGroup, 'edit') class SiteGroupEditView(generic.ObjectEditView): queryset = SiteGroup.objects.all() @@ -340,11 +379,13 @@ class SiteGroupDeleteView(generic.ObjectDeleteView): queryset = SiteGroup.objects.all() +@register_model_view(SiteGroup, 'bulk_import', detail=False) class SiteGroupBulkImportView(generic.BulkImportView): queryset = SiteGroup.objects.all() model_form = forms.SiteGroupImportForm +@register_model_view(SiteGroup, 'bulk_edit', path='edit', detail=False) class SiteGroupBulkEditView(generic.BulkEditView): queryset = SiteGroup.objects.add_related_count( SiteGroup.objects.all(), @@ -358,6 +399,7 @@ class SiteGroupBulkEditView(generic.BulkEditView): form = forms.SiteGroupBulkEditForm +@register_model_view(SiteGroup, 'bulk_delete', path='delete', detail=False) class SiteGroupBulkDeleteView(generic.BulkDeleteView): queryset = SiteGroup.objects.add_related_count( SiteGroup.objects.all(), @@ -379,6 +421,7 @@ class SiteGroupContactsView(ObjectContactsView): # Sites # +@register_model_view(Site, 'list', path='', detail=False) class SiteListView(generic.ObjectListView): queryset = Site.objects.annotate( device_count=count_related(Device, 'site') @@ -397,20 +440,28 @@ 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 ), 'site'), (ASN.objects.restrict(request.user, 'view').filter(sites=instance), 'site_id'), - (Circuit.objects.restrict(request.user, 'view').filter(terminations__site=instance).distinct(), - 'site_id'), + ( + 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'), ), ), } +@register_model_view(Site, 'add', detail=False) @register_model_view(Site, 'edit') class SiteEditView(generic.ObjectEditView): queryset = Site.objects.all() @@ -422,11 +473,13 @@ class SiteDeleteView(generic.ObjectDeleteView): queryset = Site.objects.all() +@register_model_view(Site, 'bulk_import', detail=False) class SiteBulkImportView(generic.BulkImportView): queryset = Site.objects.all() model_form = forms.SiteImportForm +@register_model_view(Site, 'bulk_edit', path='edit', detail=False) class SiteBulkEditView(generic.BulkEditView): queryset = Site.objects.all() filterset = filtersets.SiteFilterSet @@ -434,6 +487,7 @@ class SiteBulkEditView(generic.BulkEditView): form = forms.SiteBulkEditForm +@register_model_view(Site, 'bulk_delete', path='delete', detail=False) class SiteBulkDeleteView(generic.BulkDeleteView): queryset = Site.objects.all() filterset = filtersets.SiteFilterSet @@ -449,6 +503,7 @@ class SiteContactsView(ObjectContactsView): # Locations # +@register_model_view(Location, 'list', path='', detail=False) class LocationListView(generic.ObjectListView): queryset = Location.objects.add_related_count( Location.objects.add_related_count( @@ -475,10 +530,28 @@ class LocationView(GetRelatedModelsMixin, generic.ObjectView): def get_extra_context(self, request, instance): locations = instance.get_descendants(include_self=True) return { - 'related_models': self.get_related_models(request, locations, [CableTermination]), + 'related_models': self.get_related_models( + request, + locations, + 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'), + ), + ), } +@register_model_view(Location, 'add', detail=False) @register_model_view(Location, 'edit') class LocationEditView(generic.ObjectEditView): queryset = Location.objects.all() @@ -490,11 +563,13 @@ class LocationDeleteView(generic.ObjectDeleteView): queryset = Location.objects.all() +@register_model_view(Location, 'bulk_import', detail=False) class LocationBulkImportView(generic.BulkImportView): queryset = Location.objects.all() model_form = forms.LocationImportForm +@register_model_view(Location, 'bulk_edit', path='edit', detail=False) class LocationBulkEditView(generic.BulkEditView): queryset = Location.objects.add_related_count( Location.objects.all(), @@ -508,6 +583,7 @@ class LocationBulkEditView(generic.BulkEditView): form = forms.LocationBulkEditForm +@register_model_view(Location, 'bulk_delete', path='delete', detail=False) class LocationBulkDeleteView(generic.BulkDeleteView): queryset = Location.objects.add_related_count( Location.objects.all(), @@ -529,6 +605,7 @@ class LocationContactsView(ObjectContactsView): # Rack roles # +@register_model_view(RackRole, 'list', path='', detail=False) class RackRoleListView(generic.ObjectListView): queryset = RackRole.objects.annotate( rack_count=count_related(Rack, 'role') @@ -548,6 +625,7 @@ class RackRoleView(GetRelatedModelsMixin, generic.ObjectView): } +@register_model_view(RackRole, 'add', detail=False) @register_model_view(RackRole, 'edit') class RackRoleEditView(generic.ObjectEditView): queryset = RackRole.objects.all() @@ -559,11 +637,13 @@ class RackRoleDeleteView(generic.ObjectDeleteView): queryset = RackRole.objects.all() +@register_model_view(RackRole, 'bulk_import', detail=False) class RackRoleBulkImportView(generic.BulkImportView): queryset = RackRole.objects.all() model_form = forms.RackRoleImportForm +@register_model_view(RackRole, 'bulk_edit', path='edit', detail=False) class RackRoleBulkEditView(generic.BulkEditView): queryset = RackRole.objects.annotate( rack_count=count_related(Rack, 'role') @@ -573,6 +653,7 @@ class RackRoleBulkEditView(generic.BulkEditView): form = forms.RackRoleBulkEditForm +@register_model_view(RackRole, 'bulk_delete', path='delete', detail=False) class RackRoleBulkDeleteView(generic.BulkDeleteView): queryset = RackRole.objects.annotate( rack_count=count_related(Rack, 'role') @@ -585,6 +666,7 @@ class RackRoleBulkDeleteView(generic.BulkDeleteView): # RackTypes # +@register_model_view(RackType, 'list', path='', detail=False) class RackTypeListView(generic.ObjectListView): queryset = RackType.objects.annotate( instance_count=count_related(Rack, 'rack_type') @@ -604,6 +686,7 @@ class RackTypeView(GetRelatedModelsMixin, generic.ObjectView): } +@register_model_view(RackType, 'add', detail=False) @register_model_view(RackType, 'edit') class RackTypeEditView(generic.ObjectEditView): queryset = RackType.objects.all() @@ -615,11 +698,13 @@ class RackTypeDeleteView(generic.ObjectDeleteView): queryset = RackType.objects.all() +@register_model_view(RackType, 'bulk_import', detail=False) class RackTypeBulkImportView(generic.BulkImportView): queryset = RackType.objects.all() model_form = forms.RackTypeImportForm +@register_model_view(RackType, 'bulk_edit', path='edit', detail=False) class RackTypeBulkEditView(generic.BulkEditView): queryset = RackType.objects.all() filterset = filtersets.RackTypeFilterSet @@ -627,6 +712,7 @@ class RackTypeBulkEditView(generic.BulkEditView): form = forms.RackTypeBulkEditForm +@register_model_view(RackType, 'bulk_delete', path='delete', detail=False) class RackTypeBulkDeleteView(generic.BulkDeleteView): queryset = RackType.objects.all() filterset = filtersets.RackTypeFilterSet @@ -637,6 +723,7 @@ class RackTypeBulkDeleteView(generic.BulkDeleteView): # Racks # +@register_model_view(Rack, 'list', path='', detail=False) class RackListView(generic.ObjectListView): queryset = Rack.objects.annotate( device_count=count_related(Device, 'rack') @@ -668,8 +755,7 @@ class RackElevationListView(generic.ObjectListView): sort = request.GET.get('sort', 'name') if sort not in ORDERING_CHOICES: sort = 'name' - sort_field = sort.replace("name", "_name") # Use natural ordering - racks = racks.order_by(sort_field) + racks = racks.order_by(sort) # Pagination per_page = get_paginate_count(request) @@ -711,8 +797,8 @@ class RackView(GetRelatedModelsMixin, generic.ObjectView): peer_racks = peer_racks.filter(location=instance.location) else: peer_racks = peer_racks.filter(location__isnull=True) - next_rack = peer_racks.filter(_name__gt=instance._name).first() - prev_rack = peer_racks.filter(_name__lt=instance._name).reverse().first() + next_rack = peer_racks.filter(name__gt=instance.name).first() + prev_rack = peer_racks.filter(name__lt=instance.name).reverse().first() # Determine any additional parameters to pass when embedding the rack elevations svg_extra = '&'.join([ @@ -768,6 +854,7 @@ class RackNonRackedView(generic.ObjectChildrenView): ) +@register_model_view(Rack, 'add', detail=False) @register_model_view(Rack, 'edit') class RackEditView(generic.ObjectEditView): queryset = Rack.objects.all() @@ -779,11 +866,13 @@ class RackDeleteView(generic.ObjectDeleteView): queryset = Rack.objects.all() +@register_model_view(Rack, 'bulk_import', detail=False) class RackBulkImportView(generic.BulkImportView): queryset = Rack.objects.all() model_form = forms.RackImportForm +@register_model_view(Rack, 'bulk_edit', path='edit', detail=False) class RackBulkEditView(generic.BulkEditView): queryset = Rack.objects.all() filterset = filtersets.RackFilterSet @@ -791,6 +880,7 @@ class RackBulkEditView(generic.BulkEditView): form = forms.RackBulkEditForm +@register_model_view(Rack, 'bulk_delete', path='delete', detail=False) class RackBulkDeleteView(generic.BulkDeleteView): queryset = Rack.objects.all() filterset = filtersets.RackFilterSet @@ -806,6 +896,7 @@ class RackContactsView(ObjectContactsView): # Rack reservations # +@register_model_view(RackReservation, 'list', path='', detail=False) class RackReservationListView(generic.ObjectListView): queryset = RackReservation.objects.all() filterset = filtersets.RackReservationFilterSet @@ -818,6 +909,7 @@ class RackReservationView(generic.ObjectView): queryset = RackReservation.objects.all() +@register_model_view(RackReservation, 'add', detail=False) @register_model_view(RackReservation, 'edit') class RackReservationEditView(generic.ObjectEditView): queryset = RackReservation.objects.all() @@ -836,6 +928,7 @@ class RackReservationDeleteView(generic.ObjectDeleteView): queryset = RackReservation.objects.all() +@register_model_view(RackReservation, 'bulk_import', detail=False) class RackReservationImportView(generic.BulkImportView): queryset = RackReservation.objects.all() model_form = forms.RackReservationImportForm @@ -851,6 +944,7 @@ class RackReservationImportView(generic.BulkImportView): return instance +@register_model_view(RackReservation, 'bulk_edit', path='edit', detail=False) class RackReservationBulkEditView(generic.BulkEditView): queryset = RackReservation.objects.all() filterset = filtersets.RackReservationFilterSet @@ -858,6 +952,7 @@ class RackReservationBulkEditView(generic.BulkEditView): form = forms.RackReservationBulkEditForm +@register_model_view(RackReservation, 'bulk_delete', path='delete', detail=False) class RackReservationBulkDeleteView(generic.BulkDeleteView): queryset = RackReservation.objects.all() filterset = filtersets.RackReservationFilterSet @@ -868,6 +963,7 @@ class RackReservationBulkDeleteView(generic.BulkDeleteView): # Manufacturers # +@register_model_view(Manufacturer, 'list', path='', detail=False) class ManufacturerListView(generic.ObjectListView): queryset = Manufacturer.objects.annotate( devicetype_count=count_related(DeviceType, 'manufacturer'), @@ -890,6 +986,7 @@ class ManufacturerView(GetRelatedModelsMixin, generic.ObjectView): } +@register_model_view(Manufacturer, 'add', detail=False) @register_model_view(Manufacturer, 'edit') class ManufacturerEditView(generic.ObjectEditView): queryset = Manufacturer.objects.all() @@ -901,11 +998,13 @@ class ManufacturerDeleteView(generic.ObjectDeleteView): queryset = Manufacturer.objects.all() +@register_model_view(Manufacturer, 'bulk_import', detail=False) class ManufacturerBulkImportView(generic.BulkImportView): queryset = Manufacturer.objects.all() model_form = forms.ManufacturerImportForm +@register_model_view(Manufacturer, 'bulk_edit', path='edit', detail=False) class ManufacturerBulkEditView(generic.BulkEditView): queryset = Manufacturer.objects.annotate( devicetype_count=count_related(DeviceType, 'manufacturer'), @@ -918,6 +1017,7 @@ class ManufacturerBulkEditView(generic.BulkEditView): form = forms.ManufacturerBulkEditForm +@register_model_view(Manufacturer, 'bulk_delete', path='delete', detail=False) class ManufacturerBulkDeleteView(generic.BulkDeleteView): queryset = Manufacturer.objects.annotate( devicetype_count=count_related(DeviceType, 'manufacturer'), @@ -938,6 +1038,7 @@ class ManufacturerContactsView(ObjectContactsView): # Device types # +@register_model_view(DeviceType, 'list', path='', detail=False) class DeviceTypeListView(generic.ObjectListView): queryset = DeviceType.objects.annotate( instance_count=count_related(Device, 'device_type') @@ -961,6 +1062,7 @@ class DeviceTypeView(GetRelatedModelsMixin, generic.ObjectView): } +@register_model_view(DeviceType, 'add', detail=False) @register_model_view(DeviceType, 'edit') class DeviceTypeEditView(generic.ObjectEditView): queryset = DeviceType.objects.all() @@ -1122,6 +1224,7 @@ class DeviceTypeInventoryItemsView(DeviceTypeComponentsView): ) +@register_model_view(DeviceType, 'bulk_import', detail=False) class DeviceTypeImportView(generic.BulkImportView): additional_permissions = [ 'dcim.add_devicetype', @@ -1156,6 +1259,7 @@ class DeviceTypeImportView(generic.BulkImportView): return data +@register_model_view(DeviceType, 'bulk_edit', path='edit', detail=False) class DeviceTypeBulkEditView(generic.BulkEditView): queryset = DeviceType.objects.annotate( instance_count=count_related(Device, 'device_type') @@ -1165,6 +1269,7 @@ class DeviceTypeBulkEditView(generic.BulkEditView): form = forms.DeviceTypeBulkEditForm +@register_model_view(DeviceType, 'bulk_delete', path='delete', detail=False) class DeviceTypeBulkDeleteView(generic.BulkDeleteView): queryset = DeviceType.objects.annotate( instance_count=count_related(Device, 'device_type') @@ -1177,6 +1282,7 @@ class DeviceTypeBulkDeleteView(generic.BulkDeleteView): # Module types # +@register_model_view(ModuleType, 'list', path='', detail=False) class ModuleTypeListView(generic.ObjectListView): queryset = ModuleType.objects.annotate( instance_count=count_related(Module, 'module_type') @@ -1200,6 +1306,7 @@ class ModuleTypeView(GetRelatedModelsMixin, generic.ObjectView): } +@register_model_view(ModuleType, 'add', detail=False) @register_model_view(ModuleType, 'edit') class ModuleTypeEditView(generic.ObjectEditView): queryset = ModuleType.objects.all() @@ -1331,6 +1438,7 @@ class ModuleTypeModuleBaysView(ModuleTypeComponentsView): ) +@register_model_view(ModuleType, 'bulk_import', detail=False) class ModuleTypeImportView(generic.BulkImportView): additional_permissions = [ 'dcim.add_moduletype', @@ -1359,6 +1467,7 @@ class ModuleTypeImportView(generic.BulkImportView): return data +@register_model_view(ModuleType, 'bulk_edit', path='edit', detail=False) class ModuleTypeBulkEditView(generic.BulkEditView): queryset = ModuleType.objects.annotate( instance_count=count_related(Module, 'module_type') @@ -1368,6 +1477,7 @@ class ModuleTypeBulkEditView(generic.BulkEditView): form = forms.ModuleTypeBulkEditForm +@register_model_view(ModuleType, 'bulk_delete', path='delete', detail=False) class ModuleTypeBulkDeleteView(generic.BulkDeleteView): queryset = ModuleType.objects.annotate( instance_count=count_related(Module, 'module_type') @@ -1380,6 +1490,7 @@ class ModuleTypeBulkDeleteView(generic.BulkDeleteView): # Console port templates # +@register_model_view(ConsolePortTemplate, 'add', detail=False) class ConsolePortTemplateCreateView(generic.ComponentCreateView): queryset = ConsolePortTemplate.objects.all() form = forms.ConsolePortTemplateCreateForm @@ -1397,16 +1508,19 @@ class ConsolePortTemplateDeleteView(generic.ObjectDeleteView): queryset = ConsolePortTemplate.objects.all() +@register_model_view(ConsolePortTemplate, 'bulk_edit', path='edit', detail=False) class ConsolePortTemplateBulkEditView(generic.BulkEditView): queryset = ConsolePortTemplate.objects.all() table = tables.ConsolePortTemplateTable form = forms.ConsolePortTemplateBulkEditForm +@register_model_view(ConsolePortTemplate, 'bulk_rename', path='rename', detail=False) class ConsolePortTemplateBulkRenameView(generic.BulkRenameView): queryset = ConsolePortTemplate.objects.all() +@register_model_view(ConsolePortTemplate, 'bulk_delete', path='delete', detail=False) class ConsolePortTemplateBulkDeleteView(generic.BulkDeleteView): queryset = ConsolePortTemplate.objects.all() table = tables.ConsolePortTemplateTable @@ -1416,6 +1530,7 @@ class ConsolePortTemplateBulkDeleteView(generic.BulkDeleteView): # Console server port templates # +@register_model_view(ConsoleServerPortTemplate, 'add', detail=False) class ConsoleServerPortTemplateCreateView(generic.ComponentCreateView): queryset = ConsoleServerPortTemplate.objects.all() form = forms.ConsoleServerPortTemplateCreateForm @@ -1433,16 +1548,19 @@ class ConsoleServerPortTemplateDeleteView(generic.ObjectDeleteView): queryset = ConsoleServerPortTemplate.objects.all() +@register_model_view(ConsoleServerPortTemplate, 'bulk_edit', path='edit', detail=False) class ConsoleServerPortTemplateBulkEditView(generic.BulkEditView): queryset = ConsoleServerPortTemplate.objects.all() table = tables.ConsoleServerPortTemplateTable form = forms.ConsoleServerPortTemplateBulkEditForm +@register_model_view(ConsoleServerPortTemplate, 'bulk_rename', detail=False) class ConsoleServerPortTemplateBulkRenameView(generic.BulkRenameView): queryset = ConsoleServerPortTemplate.objects.all() +@register_model_view(ConsoleServerPortTemplate, 'bulk_delete', path='delete', detail=False) class ConsoleServerPortTemplateBulkDeleteView(generic.BulkDeleteView): queryset = ConsoleServerPortTemplate.objects.all() table = tables.ConsoleServerPortTemplateTable @@ -1452,6 +1570,7 @@ class ConsoleServerPortTemplateBulkDeleteView(generic.BulkDeleteView): # Power port templates # +@register_model_view(PowerPortTemplate, 'add', detail=False) class PowerPortTemplateCreateView(generic.ComponentCreateView): queryset = PowerPortTemplate.objects.all() form = forms.PowerPortTemplateCreateForm @@ -1469,16 +1588,19 @@ class PowerPortTemplateDeleteView(generic.ObjectDeleteView): queryset = PowerPortTemplate.objects.all() +@register_model_view(PowerPortTemplate, 'bulk_edit', path='edit', detail=False) class PowerPortTemplateBulkEditView(generic.BulkEditView): queryset = PowerPortTemplate.objects.all() table = tables.PowerPortTemplateTable form = forms.PowerPortTemplateBulkEditForm +@register_model_view(PowerPortTemplate, 'bulk_rename', path='rename', detail=False) class PowerPortTemplateBulkRenameView(generic.BulkRenameView): queryset = PowerPortTemplate.objects.all() +@register_model_view(PowerPortTemplate, 'bulk_delete', path='delete', detail=False) class PowerPortTemplateBulkDeleteView(generic.BulkDeleteView): queryset = PowerPortTemplate.objects.all() table = tables.PowerPortTemplateTable @@ -1488,6 +1610,7 @@ class PowerPortTemplateBulkDeleteView(generic.BulkDeleteView): # Power outlet templates # +@register_model_view(PowerOutletTemplate, 'add', detail=False) class PowerOutletTemplateCreateView(generic.ComponentCreateView): queryset = PowerOutletTemplate.objects.all() form = forms.PowerOutletTemplateCreateForm @@ -1505,16 +1628,19 @@ class PowerOutletTemplateDeleteView(generic.ObjectDeleteView): queryset = PowerOutletTemplate.objects.all() +@register_model_view(PowerOutletTemplate, 'bulk_edit', path='edit', detail=False) class PowerOutletTemplateBulkEditView(generic.BulkEditView): queryset = PowerOutletTemplate.objects.all() table = tables.PowerOutletTemplateTable form = forms.PowerOutletTemplateBulkEditForm +@register_model_view(PowerOutletTemplate, 'bulk_rename', path='rename', detail=False) class PowerOutletTemplateBulkRenameView(generic.BulkRenameView): queryset = PowerOutletTemplate.objects.all() +@register_model_view(PowerOutletTemplate, 'bulk_delete', path='delete', detail=False) class PowerOutletTemplateBulkDeleteView(generic.BulkDeleteView): queryset = PowerOutletTemplate.objects.all() table = tables.PowerOutletTemplateTable @@ -1524,6 +1650,7 @@ class PowerOutletTemplateBulkDeleteView(generic.BulkDeleteView): # Interface templates # +@register_model_view(InterfaceTemplate, 'add', detail=False) class InterfaceTemplateCreateView(generic.ComponentCreateView): queryset = InterfaceTemplate.objects.all() form = forms.InterfaceTemplateCreateForm @@ -1541,16 +1668,19 @@ class InterfaceTemplateDeleteView(generic.ObjectDeleteView): queryset = InterfaceTemplate.objects.all() +@register_model_view(InterfaceTemplate, 'bulk_edit', path='edit', detail=False) class InterfaceTemplateBulkEditView(generic.BulkEditView): queryset = InterfaceTemplate.objects.all() table = tables.InterfaceTemplateTable form = forms.InterfaceTemplateBulkEditForm +@register_model_view(InterfaceTemplate, 'bulk_rename', path='rename', detail=False) class InterfaceTemplateBulkRenameView(generic.BulkRenameView): queryset = InterfaceTemplate.objects.all() +@register_model_view(InterfaceTemplate, 'bulk_delete', path='delete', detail=False) class InterfaceTemplateBulkDeleteView(generic.BulkDeleteView): queryset = InterfaceTemplate.objects.all() table = tables.InterfaceTemplateTable @@ -1560,6 +1690,7 @@ class InterfaceTemplateBulkDeleteView(generic.BulkDeleteView): # Front port templates # +@register_model_view(FrontPortTemplate, 'add', detail=False) class FrontPortTemplateCreateView(generic.ComponentCreateView): queryset = FrontPortTemplate.objects.all() form = forms.FrontPortTemplateCreateForm @@ -1577,16 +1708,19 @@ class FrontPortTemplateDeleteView(generic.ObjectDeleteView): queryset = FrontPortTemplate.objects.all() +@register_model_view(FrontPortTemplate, 'bulk_edit', path='edit', detail=False) class FrontPortTemplateBulkEditView(generic.BulkEditView): queryset = FrontPortTemplate.objects.all() table = tables.FrontPortTemplateTable form = forms.FrontPortTemplateBulkEditForm +@register_model_view(FrontPortTemplate, 'bulk_rename', path='rename', detail=False) class FrontPortTemplateBulkRenameView(generic.BulkRenameView): queryset = FrontPortTemplate.objects.all() +@register_model_view(FrontPortTemplate, 'bulk_delete', path='delete', detail=False) class FrontPortTemplateBulkDeleteView(generic.BulkDeleteView): queryset = FrontPortTemplate.objects.all() table = tables.FrontPortTemplateTable @@ -1596,6 +1730,7 @@ class FrontPortTemplateBulkDeleteView(generic.BulkDeleteView): # Rear port templates # +@register_model_view(RearPortTemplate, 'add', detail=False) class RearPortTemplateCreateView(generic.ComponentCreateView): queryset = RearPortTemplate.objects.all() form = forms.RearPortTemplateCreateForm @@ -1613,16 +1748,19 @@ class RearPortTemplateDeleteView(generic.ObjectDeleteView): queryset = RearPortTemplate.objects.all() +@register_model_view(RearPortTemplate, 'bulk_edit', path='edit', detail=False) class RearPortTemplateBulkEditView(generic.BulkEditView): queryset = RearPortTemplate.objects.all() table = tables.RearPortTemplateTable form = forms.RearPortTemplateBulkEditForm +@register_model_view(RearPortTemplate, 'bulk_rename', path='rename', detail=False) class RearPortTemplateBulkRenameView(generic.BulkRenameView): queryset = RearPortTemplate.objects.all() +@register_model_view(RearPortTemplate, 'bulk_delete', path='delete', detail=False) class RearPortTemplateBulkDeleteView(generic.BulkDeleteView): queryset = RearPortTemplate.objects.all() table = tables.RearPortTemplateTable @@ -1632,6 +1770,7 @@ class RearPortTemplateBulkDeleteView(generic.BulkDeleteView): # Module bay templates # +@register_model_view(ModuleBayTemplate, 'add', detail=False) class ModuleBayTemplateCreateView(generic.ComponentCreateView): queryset = ModuleBayTemplate.objects.all() form = forms.ModuleBayTemplateCreateForm @@ -1649,16 +1788,19 @@ class ModuleBayTemplateDeleteView(generic.ObjectDeleteView): queryset = ModuleBayTemplate.objects.all() +@register_model_view(ModuleBayTemplate, 'bulk_edit', path='edit', detail=False) class ModuleBayTemplateBulkEditView(generic.BulkEditView): queryset = ModuleBayTemplate.objects.all() table = tables.ModuleBayTemplateTable form = forms.ModuleBayTemplateBulkEditForm +@register_model_view(ModuleBayTemplate, 'bulk_rename', path='rename', detail=False) class ModuleBayTemplateBulkRenameView(generic.BulkRenameView): queryset = ModuleBayTemplate.objects.all() +@register_model_view(ModuleBayTemplate, 'bulk_delete', path='delete', detail=False) class ModuleBayTemplateBulkDeleteView(generic.BulkDeleteView): queryset = ModuleBayTemplate.objects.all() table = tables.ModuleBayTemplateTable @@ -1668,6 +1810,7 @@ class ModuleBayTemplateBulkDeleteView(generic.BulkDeleteView): # Device bay templates # +@register_model_view(DeviceBayTemplate, 'add', detail=False) class DeviceBayTemplateCreateView(generic.ComponentCreateView): queryset = DeviceBayTemplate.objects.all() form = forms.DeviceBayTemplateCreateForm @@ -1685,16 +1828,19 @@ class DeviceBayTemplateDeleteView(generic.ObjectDeleteView): queryset = DeviceBayTemplate.objects.all() +@register_model_view(DeviceBayTemplate, 'bulk_edit', path='edit', detail=False) class DeviceBayTemplateBulkEditView(generic.BulkEditView): queryset = DeviceBayTemplate.objects.all() table = tables.DeviceBayTemplateTable form = forms.DeviceBayTemplateBulkEditForm +@register_model_view(DeviceBayTemplate, 'bulk_rename', path='rename', detail=False) class DeviceBayTemplateBulkRenameView(generic.BulkRenameView): queryset = DeviceBayTemplate.objects.all() +@register_model_view(DeviceBayTemplate, 'bulk_delete', path='delete', detail=False) class DeviceBayTemplateBulkDeleteView(generic.BulkDeleteView): queryset = DeviceBayTemplate.objects.all() table = tables.DeviceBayTemplateTable @@ -1704,6 +1850,7 @@ class DeviceBayTemplateBulkDeleteView(generic.BulkDeleteView): # Inventory item templates # +@register_model_view(InventoryItemTemplate, 'add', detail=False) class InventoryItemTemplateCreateView(generic.ComponentCreateView): queryset = InventoryItemTemplate.objects.all() form = forms.InventoryItemTemplateCreateForm @@ -1732,16 +1879,19 @@ class InventoryItemTemplateDeleteView(generic.ObjectDeleteView): queryset = InventoryItemTemplate.objects.all() +@register_model_view(InventoryItemTemplate, 'bulk_edit', path='edit', detail=False) class InventoryItemTemplateBulkEditView(generic.BulkEditView): queryset = InventoryItemTemplate.objects.all() table = tables.InventoryItemTemplateTable form = forms.InventoryItemTemplateBulkEditForm +@register_model_view(InventoryItemTemplate, 'bulk_rename', path='rename', detail=False) class InventoryItemTemplateBulkRenameView(generic.BulkRenameView): queryset = InventoryItemTemplate.objects.all() +@register_model_view(InventoryItemTemplate, 'bulk_delete', path='delete', detail=False) class InventoryItemTemplateBulkDeleteView(generic.BulkDeleteView): queryset = InventoryItemTemplate.objects.all() table = tables.InventoryItemTemplateTable @@ -1751,6 +1901,7 @@ class InventoryItemTemplateBulkDeleteView(generic.BulkDeleteView): # Device roles # +@register_model_view(DeviceRole, 'list', path='', detail=False) class DeviceRoleListView(generic.ObjectListView): queryset = DeviceRole.objects.annotate( device_count=count_related(Device, 'role'), @@ -1771,6 +1922,7 @@ class DeviceRoleView(GetRelatedModelsMixin, generic.ObjectView): } +@register_model_view(DeviceRole, 'add', detail=False) @register_model_view(DeviceRole, 'edit') class DeviceRoleEditView(generic.ObjectEditView): queryset = DeviceRole.objects.all() @@ -1782,11 +1934,13 @@ class DeviceRoleDeleteView(generic.ObjectDeleteView): queryset = DeviceRole.objects.all() +@register_model_view(DeviceRole, 'bulk_import', detail=False) class DeviceRoleBulkImportView(generic.BulkImportView): queryset = DeviceRole.objects.all() model_form = forms.DeviceRoleImportForm +@register_model_view(DeviceRole, 'bulk_edit', path='edit', detail=False) class DeviceRoleBulkEditView(generic.BulkEditView): queryset = DeviceRole.objects.annotate( device_count=count_related(Device, 'role'), @@ -1797,6 +1951,7 @@ class DeviceRoleBulkEditView(generic.BulkEditView): form = forms.DeviceRoleBulkEditForm +@register_model_view(DeviceRole, 'bulk_delete', path='delete', detail=False) class DeviceRoleBulkDeleteView(generic.BulkDeleteView): queryset = DeviceRole.objects.annotate( device_count=count_related(Device, 'role'), @@ -1810,6 +1965,7 @@ class DeviceRoleBulkDeleteView(generic.BulkDeleteView): # Platforms # +@register_model_view(Platform, 'list', path='', detail=False) class PlatformListView(generic.ObjectListView): queryset = Platform.objects.annotate( device_count=count_related(Device, 'platform'), @@ -1830,6 +1986,7 @@ class PlatformView(GetRelatedModelsMixin, generic.ObjectView): } +@register_model_view(Platform, 'add', detail=False) @register_model_view(Platform, 'edit') class PlatformEditView(generic.ObjectEditView): queryset = Platform.objects.all() @@ -1841,11 +1998,13 @@ class PlatformDeleteView(generic.ObjectDeleteView): queryset = Platform.objects.all() +@register_model_view(Platform, 'bulk_import', detail=False) class PlatformBulkImportView(generic.BulkImportView): queryset = Platform.objects.all() model_form = forms.PlatformImportForm +@register_model_view(Platform, 'bulk_edit', path='edit', detail=False) class PlatformBulkEditView(generic.BulkEditView): queryset = Platform.objects.all() filterset = filtersets.PlatformFilterSet @@ -1853,6 +2012,7 @@ class PlatformBulkEditView(generic.BulkEditView): form = forms.PlatformBulkEditForm +@register_model_view(Platform, 'bulk_delete', path='delete', detail=False) class PlatformBulkDeleteView(generic.BulkDeleteView): queryset = Platform.objects.all() filterset = filtersets.PlatformFilterSet @@ -1863,6 +2023,7 @@ class PlatformBulkDeleteView(generic.BulkDeleteView): # Devices # +@register_model_view(Device, 'list', path='', detail=False) class DeviceListView(generic.ObjectListView): queryset = Device.objects.all() filterset = filtersets.DeviceFilterSet @@ -1890,6 +2051,7 @@ class DeviceView(generic.ObjectView): } +@register_model_view(Device, 'add', detail=False) @register_model_view(Device, 'edit') class DeviceEditView(generic.ObjectEditView): queryset = Device.objects.all() @@ -2106,7 +2268,8 @@ class DeviceRenderConfigView(generic.ObjectView): # If a direct export has been requested, return the rendered template content as a # downloadable file. if request.GET.get('export'): - response = HttpResponse(context['rendered_config'], content_type='text') + 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 @@ -2124,17 +2287,18 @@ class DeviceRenderConfigView(generic.ObjectView): # 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: - messages.error(request, _("An error occurred while rendering the template: {error}").format(error=e)) - rendered_config = traceback.format_exc() + 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, } @@ -2157,6 +2321,7 @@ class DeviceVirtualMachinesView(generic.ObjectChildrenView): return self.child_model.objects.restrict(request.user, 'view').filter(cluster=parent.cluster, device=parent) +@register_model_view(Device, 'bulk_import', detail=False) class DeviceBulkImportView(generic.BulkImportView): queryset = Device.objects.all() model_form = forms.DeviceImportForm @@ -2173,6 +2338,7 @@ class DeviceBulkImportView(generic.BulkImportView): return obj +@register_model_view(Device, 'bulk_edit', path='edit', detail=False) class DeviceBulkEditView(generic.BulkEditView): queryset = Device.objects.prefetch_related('device_type__manufacturer') filterset = filtersets.DeviceFilterSet @@ -2180,12 +2346,14 @@ class DeviceBulkEditView(generic.BulkEditView): form = forms.DeviceBulkEditForm +@register_model_view(Device, 'bulk_delete', path='delete', detail=False) class DeviceBulkDeleteView(generic.BulkDeleteView): queryset = Device.objects.prefetch_related('device_type__manufacturer') filterset = filtersets.DeviceFilterSet table = tables.DeviceTable +@register_model_view(Device, 'bulk_rename', path='rename', detail=False) class DeviceBulkRenameView(generic.BulkRenameView): queryset = Device.objects.all() filterset = filtersets.DeviceFilterSet @@ -2201,6 +2369,7 @@ class DeviceContactsView(ObjectContactsView): # Modules # +@register_model_view(Module, 'list', path='', detail=False) class ModuleListView(generic.ObjectListView): queryset = Module.objects.prefetch_related('module_type__manufacturer') filterset = filtersets.ModuleFilterSet @@ -2218,6 +2387,7 @@ class ModuleView(GetRelatedModelsMixin, generic.ObjectView): } +@register_model_view(Module, 'add', detail=False) @register_model_view(Module, 'edit') class ModuleEditView(generic.ObjectEditView): queryset = Module.objects.all() @@ -2229,11 +2399,13 @@ class ModuleDeleteView(generic.ObjectDeleteView): queryset = Module.objects.all() +@register_model_view(Module, 'bulk_import', detail=False) class ModuleBulkImportView(generic.BulkImportView): queryset = Module.objects.all() model_form = forms.ModuleImportForm +@register_model_view(Module, 'bulk_edit', path='edit', detail=False) class ModuleBulkEditView(generic.BulkEditView): queryset = Module.objects.prefetch_related('module_type__manufacturer') filterset = filtersets.ModuleFilterSet @@ -2241,6 +2413,7 @@ class ModuleBulkEditView(generic.BulkEditView): form = forms.ModuleBulkEditForm +@register_model_view(Module, 'bulk_delete', path='delete', detail=False) class ModuleBulkDeleteView(generic.BulkDeleteView): queryset = Module.objects.prefetch_related('module_type__manufacturer') filterset = filtersets.ModuleFilterSet @@ -2251,6 +2424,7 @@ class ModuleBulkDeleteView(generic.BulkDeleteView): # Console ports # +@register_model_view(ConsolePort, 'list', path='', detail=False) class ConsolePortListView(generic.ObjectListView): queryset = ConsolePort.objects.all() filterset = filtersets.ConsolePortFilterSet @@ -2268,6 +2442,7 @@ class ConsolePortView(generic.ObjectView): queryset = ConsolePort.objects.all() +@register_model_view(ConsolePort, 'add', detail=False) class ConsolePortCreateView(generic.ComponentCreateView): queryset = ConsolePort.objects.all() form = forms.ConsolePortCreateForm @@ -2285,11 +2460,13 @@ class ConsolePortDeleteView(generic.ObjectDeleteView): queryset = ConsolePort.objects.all() +@register_model_view(ConsolePort, 'bulk_import', detail=False) class ConsolePortBulkImportView(generic.BulkImportView): queryset = ConsolePort.objects.all() model_form = forms.ConsolePortImportForm +@register_model_view(ConsolePort, 'bulk_edit', path='edit', detail=False) class ConsolePortBulkEditView(generic.BulkEditView): queryset = ConsolePort.objects.all() filterset = filtersets.ConsolePortFilterSet @@ -2297,14 +2474,17 @@ class ConsolePortBulkEditView(generic.BulkEditView): form = forms.ConsolePortBulkEditForm +@register_model_view(ConsolePort, 'bulk_rename', path='rename', detail=False) class ConsolePortBulkRenameView(generic.BulkRenameView): queryset = ConsolePort.objects.all() +@register_model_view(ConsolePort, 'bulk_disconnect', path='disconnect', detail=False) class ConsolePortBulkDisconnectView(BulkDisconnectView): queryset = ConsolePort.objects.all() +@register_model_view(ConsolePort, 'bulk_delete', path='delete', detail=False) class ConsolePortBulkDeleteView(generic.BulkDeleteView): queryset = ConsolePort.objects.all() filterset = filtersets.ConsolePortFilterSet @@ -2319,6 +2499,7 @@ register_model_view(ConsolePort, 'trace', kwargs={'model': ConsolePort})(PathTra # Console server ports # +@register_model_view(ConsoleServerPort, 'list', path='', detail=False) class ConsoleServerPortListView(generic.ObjectListView): queryset = ConsoleServerPort.objects.all() filterset = filtersets.ConsoleServerPortFilterSet @@ -2336,6 +2517,7 @@ class ConsoleServerPortView(generic.ObjectView): queryset = ConsoleServerPort.objects.all() +@register_model_view(ConsoleServerPort, 'add', detail=False) class ConsoleServerPortCreateView(generic.ComponentCreateView): queryset = ConsoleServerPort.objects.all() form = forms.ConsoleServerPortCreateForm @@ -2353,11 +2535,13 @@ class ConsoleServerPortDeleteView(generic.ObjectDeleteView): queryset = ConsoleServerPort.objects.all() +@register_model_view(ConsoleServerPort, 'bulk_import', detail=False) class ConsoleServerPortBulkImportView(generic.BulkImportView): queryset = ConsoleServerPort.objects.all() model_form = forms.ConsoleServerPortImportForm +@register_model_view(ConsoleServerPort, 'bulk_edit', path='edit', detail=False) class ConsoleServerPortBulkEditView(generic.BulkEditView): queryset = ConsoleServerPort.objects.all() filterset = filtersets.ConsoleServerPortFilterSet @@ -2365,14 +2549,17 @@ class ConsoleServerPortBulkEditView(generic.BulkEditView): form = forms.ConsoleServerPortBulkEditForm +@register_model_view(ConsoleServerPort, 'bulk_rename', path='rename', detail=False) class ConsoleServerPortBulkRenameView(generic.BulkRenameView): queryset = ConsoleServerPort.objects.all() +@register_model_view(ConsoleServerPort, 'bulk_disconnect', path='disconnect', detail=False) class ConsoleServerPortBulkDisconnectView(BulkDisconnectView): queryset = ConsoleServerPort.objects.all() +@register_model_view(ConsoleServerPort, 'bulk_delete', path='delete', detail=False) class ConsoleServerPortBulkDeleteView(generic.BulkDeleteView): queryset = ConsoleServerPort.objects.all() filterset = filtersets.ConsoleServerPortFilterSet @@ -2387,6 +2574,7 @@ register_model_view(ConsoleServerPort, 'trace', kwargs={'model': ConsoleServerPo # Power ports # +@register_model_view(PowerPort, 'list', path='', detail=False) class PowerPortListView(generic.ObjectListView): queryset = PowerPort.objects.all() filterset = filtersets.PowerPortFilterSet @@ -2404,6 +2592,7 @@ class PowerPortView(generic.ObjectView): queryset = PowerPort.objects.all() +@register_model_view(PowerPort, 'add', detail=False) class PowerPortCreateView(generic.ComponentCreateView): queryset = PowerPort.objects.all() form = forms.PowerPortCreateForm @@ -2421,11 +2610,13 @@ class PowerPortDeleteView(generic.ObjectDeleteView): queryset = PowerPort.objects.all() +@register_model_view(PowerPort, 'bulk_import', detail=False) class PowerPortBulkImportView(generic.BulkImportView): queryset = PowerPort.objects.all() model_form = forms.PowerPortImportForm +@register_model_view(PowerPort, 'bulk_edit', path='edit', detail=False) class PowerPortBulkEditView(generic.BulkEditView): queryset = PowerPort.objects.all() filterset = filtersets.PowerPortFilterSet @@ -2433,14 +2624,17 @@ class PowerPortBulkEditView(generic.BulkEditView): form = forms.PowerPortBulkEditForm +@register_model_view(PowerPort, 'bulk_rename', path='rename', detail=False) class PowerPortBulkRenameView(generic.BulkRenameView): queryset = PowerPort.objects.all() +@register_model_view(PowerPort, 'bulk_disconnect', path='disconnect', detail=False) class PowerPortBulkDisconnectView(BulkDisconnectView): queryset = PowerPort.objects.all() +@register_model_view(PowerPort, 'bulk_delete', path='delete', detail=False) class PowerPortBulkDeleteView(generic.BulkDeleteView): queryset = PowerPort.objects.all() filterset = filtersets.PowerPortFilterSet @@ -2455,6 +2649,7 @@ register_model_view(PowerPort, 'trace', kwargs={'model': PowerPort})(PathTraceVi # Power outlets # +@register_model_view(PowerOutlet, 'list', path='', detail=False) class PowerOutletListView(generic.ObjectListView): queryset = PowerOutlet.objects.all() filterset = filtersets.PowerOutletFilterSet @@ -2472,6 +2667,7 @@ class PowerOutletView(generic.ObjectView): queryset = PowerOutlet.objects.all() +@register_model_view(PowerOutlet, 'add', detail=False) class PowerOutletCreateView(generic.ComponentCreateView): queryset = PowerOutlet.objects.all() form = forms.PowerOutletCreateForm @@ -2489,11 +2685,13 @@ class PowerOutletDeleteView(generic.ObjectDeleteView): queryset = PowerOutlet.objects.all() +@register_model_view(PowerOutlet, 'bulk_import', detail=False) class PowerOutletBulkImportView(generic.BulkImportView): queryset = PowerOutlet.objects.all() model_form = forms.PowerOutletImportForm +@register_model_view(PowerOutlet, 'bulk_edit', path='edit', detail=False) class PowerOutletBulkEditView(generic.BulkEditView): queryset = PowerOutlet.objects.all() filterset = filtersets.PowerOutletFilterSet @@ -2501,14 +2699,17 @@ class PowerOutletBulkEditView(generic.BulkEditView): form = forms.PowerOutletBulkEditForm +@register_model_view(PowerOutlet, 'bulk_rename', path='rename', detail=False) class PowerOutletBulkRenameView(generic.BulkRenameView): queryset = PowerOutlet.objects.all() +@register_model_view(PowerOutlet, 'bulk_disconnect', path='disconnect', detail=False) class PowerOutletBulkDisconnectView(BulkDisconnectView): queryset = PowerOutlet.objects.all() +@register_model_view(PowerOutlet, 'bulk_delete', path='delete', detail=False) class PowerOutletBulkDeleteView(generic.BulkDeleteView): queryset = PowerOutlet.objects.all() filterset = filtersets.PowerOutletFilterSet @@ -2523,6 +2724,7 @@ register_model_view(PowerOutlet, 'trace', kwargs={'model': PowerOutlet})(PathTra # Interfaces # +@register_model_view(Interface, 'list', path='', detail=False) class InterfaceListView(generic.ObjectListView): queryset = Interface.objects.all() filterset = filtersets.InterfaceFilterSet @@ -2552,7 +2754,7 @@ class InterfaceView(generic.ObjectView): # Get bridge interfaces bridge_interfaces = Interface.objects.restrict(request.user, 'view').filter(bridge=instance) - bridge_interfaces_tables = tables.InterfaceTable( + bridge_interfaces_table = tables.InterfaceTable( bridge_interfaces, exclude=('device', 'parent'), orderable=False @@ -2560,7 +2762,7 @@ class InterfaceView(generic.ObjectView): # Get child interfaces child_interfaces = Interface.objects.restrict(request.user, 'view').filter(parent=instance) - child_interfaces_tables = tables.InterfaceTable( + child_interfaces_table = tables.InterfaceTable( child_interfaces, exclude=('device', 'parent'), orderable=False @@ -2580,14 +2782,24 @@ class InterfaceView(generic.ObjectView): orderable=False ) + # Get VLAN translation rules + vlan_translation_table = None + if instance.vlan_translation_policy: + vlan_translation_table = VLANTranslationRuleTable( + data=instance.vlan_translation_policy.rules.all(), + orderable=False + ) + return { 'vdc_table': vdc_table, - 'bridge_interfaces_table': bridge_interfaces_tables, - 'child_interfaces_table': child_interfaces_tables, + 'bridge_interfaces_table': bridge_interfaces_table, + 'child_interfaces_table': child_interfaces_table, 'vlan_table': vlan_table, + 'vlan_translation_table': vlan_translation_table, } +@register_model_view(Interface, 'add', detail=False) class InterfaceCreateView(generic.ComponentCreateView): queryset = Interface.objects.all() form = forms.InterfaceCreateForm @@ -2605,11 +2817,13 @@ class InterfaceDeleteView(generic.ObjectDeleteView): queryset = Interface.objects.all() +@register_model_view(Interface, 'bulk_import', detail=False) class InterfaceBulkImportView(generic.BulkImportView): queryset = Interface.objects.all() model_form = forms.InterfaceImportForm +@register_model_view(Interface, 'bulk_edit', path='edit', detail=False) class InterfaceBulkEditView(generic.BulkEditView): queryset = Interface.objects.all() filterset = filtersets.InterfaceFilterSet @@ -2627,14 +2841,17 @@ class InterfaceBulkEditView(generic.BulkEditView): obj.tagged_vlans.remove(*form.cleaned_data['remove_tagged_vlans']) +@register_model_view(Interface, 'bulk_rename', path='rename', detail=False) class InterfaceBulkRenameView(generic.BulkRenameView): queryset = Interface.objects.all() +@register_model_view(Interface, 'bulk_disconnect', path='disconnect', detail=False) class InterfaceBulkDisconnectView(BulkDisconnectView): queryset = Interface.objects.all() +@register_model_view(Interface, 'bulk_delete', path='delete', detail=False) class InterfaceBulkDeleteView(generic.BulkDeleteView): # Ensure child interfaces are deleted prior to their parents queryset = Interface.objects.order_by('device', 'parent', CollateAsChar('_name')) @@ -2650,6 +2867,7 @@ register_model_view(Interface, 'trace', kwargs={'model': Interface})(PathTraceVi # Front ports # +@register_model_view(FrontPort, 'list', path='', detail=False) class FrontPortListView(generic.ObjectListView): queryset = FrontPort.objects.all() filterset = filtersets.FrontPortFilterSet @@ -2667,6 +2885,7 @@ class FrontPortView(generic.ObjectView): queryset = FrontPort.objects.all() +@register_model_view(FrontPort, 'add', detail=False) class FrontPortCreateView(generic.ComponentCreateView): queryset = FrontPort.objects.all() form = forms.FrontPortCreateForm @@ -2684,11 +2903,13 @@ class FrontPortDeleteView(generic.ObjectDeleteView): queryset = FrontPort.objects.all() +@register_model_view(FrontPort, 'bulk_import', detail=False) class FrontPortBulkImportView(generic.BulkImportView): queryset = FrontPort.objects.all() model_form = forms.FrontPortImportForm +@register_model_view(FrontPort, 'bulk_edit', path='edit', detail=False) class FrontPortBulkEditView(generic.BulkEditView): queryset = FrontPort.objects.all() filterset = filtersets.FrontPortFilterSet @@ -2696,14 +2917,17 @@ class FrontPortBulkEditView(generic.BulkEditView): form = forms.FrontPortBulkEditForm +@register_model_view(FrontPort, 'bulk_rename', path='rename', detail=False) class FrontPortBulkRenameView(generic.BulkRenameView): queryset = FrontPort.objects.all() +@register_model_view(FrontPort, 'bulk_disconnect', path='disconnect', detail=False) class FrontPortBulkDisconnectView(BulkDisconnectView): queryset = FrontPort.objects.all() +@register_model_view(FrontPort, 'bulk_delete', path='delete', detail=False) class FrontPortBulkDeleteView(generic.BulkDeleteView): queryset = FrontPort.objects.all() filterset = filtersets.FrontPortFilterSet @@ -2718,6 +2942,7 @@ register_model_view(FrontPort, 'trace', kwargs={'model': FrontPort})(PathTraceVi # Rear ports # +@register_model_view(RearPort, 'list', path='', detail=False) class RearPortListView(generic.ObjectListView): queryset = RearPort.objects.all() filterset = filtersets.RearPortFilterSet @@ -2735,6 +2960,7 @@ class RearPortView(generic.ObjectView): queryset = RearPort.objects.all() +@register_model_view(RearPort, 'add', detail=False) class RearPortCreateView(generic.ComponentCreateView): queryset = RearPort.objects.all() form = forms.RearPortCreateForm @@ -2752,11 +2978,13 @@ class RearPortDeleteView(generic.ObjectDeleteView): queryset = RearPort.objects.all() +@register_model_view(RearPort, 'bulk_import', detail=False) class RearPortBulkImportView(generic.BulkImportView): queryset = RearPort.objects.all() model_form = forms.RearPortImportForm +@register_model_view(RearPort, 'bulk_edit', path='edit', detail=False) class RearPortBulkEditView(generic.BulkEditView): queryset = RearPort.objects.all() filterset = filtersets.RearPortFilterSet @@ -2764,14 +2992,17 @@ class RearPortBulkEditView(generic.BulkEditView): form = forms.RearPortBulkEditForm +@register_model_view(RearPort, 'bulk_rename', path='rename', detail=False) class RearPortBulkRenameView(generic.BulkRenameView): queryset = RearPort.objects.all() +@register_model_view(RearPort, 'bulk_disconnect', path='disconnect', detail=False) class RearPortBulkDisconnectView(BulkDisconnectView): queryset = RearPort.objects.all() +@register_model_view(RearPort, 'bulk_delete', path='delete', detail=False) class RearPortBulkDeleteView(generic.BulkDeleteView): queryset = RearPort.objects.all() filterset = filtersets.RearPortFilterSet @@ -2786,6 +3017,7 @@ register_model_view(RearPort, 'trace', kwargs={'model': RearPort})(PathTraceView # Module bays # +@register_model_view(ModuleBay, 'list', path='', detail=False) class ModuleBayListView(generic.ObjectListView): queryset = ModuleBay.objects.select_related('installed_module__module_type') filterset = filtersets.ModuleBayFilterSet @@ -2803,6 +3035,7 @@ class ModuleBayView(generic.ObjectView): queryset = ModuleBay.objects.all() +@register_model_view(ModuleBay, 'add', detail=False) class ModuleBayCreateView(generic.ComponentCreateView): queryset = ModuleBay.objects.all() form = forms.ModuleBayCreateForm @@ -2820,11 +3053,13 @@ class ModuleBayDeleteView(generic.ObjectDeleteView): queryset = ModuleBay.objects.all() +@register_model_view(ModuleBay, 'bulk_import', detail=False) class ModuleBayBulkImportView(generic.BulkImportView): queryset = ModuleBay.objects.all() model_form = forms.ModuleBayImportForm +@register_model_view(ModuleBay, 'bulk_edit', path='edit', detail=False) class ModuleBayBulkEditView(generic.BulkEditView): queryset = ModuleBay.objects.all() filterset = filtersets.ModuleBayFilterSet @@ -2832,10 +3067,12 @@ class ModuleBayBulkEditView(generic.BulkEditView): form = forms.ModuleBayBulkEditForm +@register_model_view(ModuleBay, 'bulk_rename', path='rename', detail=False) class ModuleBayBulkRenameView(generic.BulkRenameView): queryset = ModuleBay.objects.all() +@register_model_view(ModuleBay, 'bulk_delete', path='delete', detail=False) class ModuleBayBulkDeleteView(generic.BulkDeleteView): queryset = ModuleBay.objects.all() filterset = filtersets.ModuleBayFilterSet @@ -2846,6 +3083,7 @@ class ModuleBayBulkDeleteView(generic.BulkDeleteView): # Device bays # +@register_model_view(DeviceBay, 'list', path='', detail=False) class DeviceBayListView(generic.ObjectListView): queryset = DeviceBay.objects.all() filterset = filtersets.DeviceBayFilterSet @@ -2863,6 +3101,7 @@ class DeviceBayView(generic.ObjectView): queryset = DeviceBay.objects.all() +@register_model_view(DeviceBay, 'add', detail=False) class DeviceBayCreateView(generic.ComponentCreateView): queryset = DeviceBay.objects.all() form = forms.DeviceBayCreateForm @@ -2961,11 +3200,13 @@ class DeviceBayDepopulateView(generic.ObjectEditView): }) +@register_model_view(DeviceBay, 'bulk_import', detail=False) class DeviceBayBulkImportView(generic.BulkImportView): queryset = DeviceBay.objects.all() model_form = forms.DeviceBayImportForm +@register_model_view(DeviceBay, 'bulk_edit', path='edit', detail=False) class DeviceBayBulkEditView(generic.BulkEditView): queryset = DeviceBay.objects.all() filterset = filtersets.DeviceBayFilterSet @@ -2973,10 +3214,12 @@ class DeviceBayBulkEditView(generic.BulkEditView): form = forms.DeviceBayBulkEditForm +@register_model_view(DeviceBay, 'bulk_rename', path='rename', detail=False) class DeviceBayBulkRenameView(generic.BulkRenameView): queryset = DeviceBay.objects.all() +@register_model_view(DeviceBay, 'bulk_delete', path='delete', detail=False) class DeviceBayBulkDeleteView(generic.BulkDeleteView): queryset = DeviceBay.objects.all() filterset = filtersets.DeviceBayFilterSet @@ -2987,6 +3230,7 @@ class DeviceBayBulkDeleteView(generic.BulkDeleteView): # Inventory items # +@register_model_view(InventoryItem, 'list', path='', detail=False) class InventoryItemListView(generic.ObjectListView): queryset = InventoryItem.objects.all() filterset = filtersets.InventoryItemFilterSet @@ -3010,6 +3254,7 @@ class InventoryItemEditView(generic.ObjectEditView): form = forms.InventoryItemForm +@register_model_view(InventoryItem, 'add', detail=False) class InventoryItemCreateView(generic.ComponentCreateView): queryset = InventoryItem.objects.all() form = forms.InventoryItemCreateForm @@ -3021,11 +3266,13 @@ class InventoryItemDeleteView(generic.ObjectDeleteView): queryset = InventoryItem.objects.all() +@register_model_view(InventoryItem, 'bulk_import', detail=False) class InventoryItemBulkImportView(generic.BulkImportView): queryset = InventoryItem.objects.all() model_form = forms.InventoryItemImportForm +@register_model_view(InventoryItem, 'bulk_edit', path='edit', detail=False) class InventoryItemBulkEditView(generic.BulkEditView): queryset = InventoryItem.objects.all() filterset = filtersets.InventoryItemFilterSet @@ -3033,10 +3280,12 @@ class InventoryItemBulkEditView(generic.BulkEditView): form = forms.InventoryItemBulkEditForm +@register_model_view(InventoryItem, 'bulk_rename', path='rename', detail=False) class InventoryItemBulkRenameView(generic.BulkRenameView): queryset = InventoryItem.objects.all() +@register_model_view(InventoryItem, 'bulk_delete', path='delete', detail=False) class InventoryItemBulkDeleteView(generic.BulkDeleteView): queryset = InventoryItem.objects.all() filterset = filtersets.InventoryItemFilterSet @@ -3066,6 +3315,7 @@ class InventoryItemChildrenView(generic.ObjectChildrenView): # Inventory item roles # +@register_model_view(InventoryItemRole, 'list', path='', detail=False) class InventoryItemRoleListView(generic.ObjectListView): queryset = InventoryItemRole.objects.annotate( inventoryitem_count=count_related(InventoryItem, 'role'), @@ -3085,6 +3335,7 @@ class InventoryItemRoleView(generic.ObjectView): } +@register_model_view(InventoryItemRole, 'add', detail=False) @register_model_view(InventoryItemRole, 'edit') class InventoryItemRoleEditView(generic.ObjectEditView): queryset = InventoryItemRole.objects.all() @@ -3096,11 +3347,13 @@ class InventoryItemRoleDeleteView(generic.ObjectDeleteView): queryset = InventoryItemRole.objects.all() +@register_model_view(InventoryItemRole, 'bulk_import', detail=False) class InventoryItemRoleBulkImportView(generic.BulkImportView): queryset = InventoryItemRole.objects.all() model_form = forms.InventoryItemRoleImportForm +@register_model_view(InventoryItemRole, 'bulk_edit', path='edit', detail=False) class InventoryItemRoleBulkEditView(generic.BulkEditView): queryset = InventoryItemRole.objects.annotate( inventoryitem_count=count_related(InventoryItem, 'role'), @@ -3110,6 +3363,7 @@ class InventoryItemRoleBulkEditView(generic.BulkEditView): form = forms.InventoryItemRoleBulkEditForm +@register_model_view(InventoryItemRole, 'bulk_delete', path='delete', detail=False) class InventoryItemRoleBulkDeleteView(generic.BulkDeleteView): queryset = InventoryItemRole.objects.annotate( inventoryitem_count=count_related(InventoryItem, 'role'), @@ -3177,17 +3431,6 @@ class DeviceBulkAddInterfaceView(generic.BulkComponentCreateView): default_return_url = 'dcim:device_list' -# class DeviceBulkAddFrontPortView(generic.BulkComponentCreateView): -# parent_model = Device -# parent_field = 'device' -# form = forms.FrontPortBulkCreateForm -# queryset = FrontPort.objects.all() -# model_form = forms.FrontPortForm -# filterset = filtersets.DeviceFilterSet -# table = tables.DeviceTable -# default_return_url = 'dcim:device_list' - - class DeviceBulkAddRearPortView(generic.BulkComponentCreateView): parent_model = Device parent_field = 'device' @@ -3236,6 +3479,7 @@ class DeviceBulkAddInventoryItemView(generic.BulkComponentCreateView): # Cables # +@register_model_view(Cable, 'list', path='', detail=False) class CableListView(generic.ObjectListView): queryset = Cable.objects.prefetch_related( 'terminations__termination', 'terminations___device', 'terminations___rack', 'terminations___location', @@ -3251,6 +3495,7 @@ class CableView(generic.ObjectView): queryset = Cable.objects.all() +@register_model_view(Cable, 'add', detail=False) @register_model_view(Cable, 'edit') class CableEditView(generic.ObjectEditView): queryset = Cable.objects.all() @@ -3298,11 +3543,13 @@ class CableDeleteView(generic.ObjectDeleteView): queryset = Cable.objects.all() +@register_model_view(Cable, 'bulk_import', detail=False) class CableBulkImportView(generic.BulkImportView): queryset = Cable.objects.all() model_form = forms.CableImportForm +@register_model_view(Cable, 'bulk_edit', path='edit', detail=False) class CableBulkEditView(generic.BulkEditView): queryset = Cable.objects.prefetch_related( 'terminations__termination', 'terminations___device', 'terminations___rack', 'terminations___location', @@ -3313,6 +3560,7 @@ class CableBulkEditView(generic.BulkEditView): form = forms.CableBulkEditForm +@register_model_view(Cable, 'bulk_delete', path='delete', detail=False) class CableBulkDeleteView(generic.BulkDeleteView): queryset = Cable.objects.prefetch_related( 'terminations__termination', 'terminations___device', 'terminations___rack', 'terminations___location', @@ -3378,6 +3626,7 @@ class InterfaceConnectionsListView(generic.ObjectListView): # Virtual chassis # +@register_model_view(VirtualChassis, 'list', path='', detail=False) class VirtualChassisListView(generic.ObjectListView): queryset = VirtualChassis.objects.all() table = tables.VirtualChassisTable @@ -3397,6 +3646,7 @@ class VirtualChassisView(generic.ObjectView): } +@register_model_view(VirtualChassis, 'add', detail=False) class VirtualChassisCreateView(generic.ObjectEditView): queryset = VirtualChassis.objects.all() form = forms.VirtualChassisCreateForm @@ -3517,7 +3767,9 @@ class VirtualChassisAddMemberView(ObjectPermissionRequiredMixin, GetReturnURLMix membership_form.save() messages.success(request, mark_safe( - _('Added member {device}').format(url=device.get_absolute_url(), device=escape(device)) + _('Added member {device}').format( + url=device.get_absolute_url(), device=escape(device) + ) )) if '_addanother' in request.POST: @@ -3592,11 +3844,13 @@ class VirtualChassisRemoveMemberView(ObjectPermissionRequiredMixin, GetReturnURL }) +@register_model_view(VirtualChassis, 'bulk_import', detail=False) class VirtualChassisBulkImportView(generic.BulkImportView): queryset = VirtualChassis.objects.all() model_form = forms.VirtualChassisImportForm +@register_model_view(VirtualChassis, 'bulk_edit', path='edit', detail=False) class VirtualChassisBulkEditView(generic.BulkEditView): queryset = VirtualChassis.objects.all() filterset = filtersets.VirtualChassisFilterSet @@ -3604,6 +3858,7 @@ class VirtualChassisBulkEditView(generic.BulkEditView): form = forms.VirtualChassisBulkEditForm +@register_model_view(VirtualChassis, 'bulk_delete', path='delete', detail=False) class VirtualChassisBulkDeleteView(generic.BulkDeleteView): queryset = VirtualChassis.objects.all() filterset = filtersets.VirtualChassisFilterSet @@ -3614,6 +3869,7 @@ class VirtualChassisBulkDeleteView(generic.BulkDeleteView): # Power panels # +@register_model_view(PowerPanel, 'list', path='', detail=False) class PowerPanelListView(generic.ObjectListView): queryset = PowerPanel.objects.annotate( powerfeed_count=count_related(PowerFeed, 'power_panel') @@ -3633,6 +3889,7 @@ class PowerPanelView(GetRelatedModelsMixin, generic.ObjectView): } +@register_model_view(PowerPanel, 'add', detail=False) @register_model_view(PowerPanel, 'edit') class PowerPanelEditView(generic.ObjectEditView): queryset = PowerPanel.objects.all() @@ -3644,11 +3901,13 @@ class PowerPanelDeleteView(generic.ObjectDeleteView): queryset = PowerPanel.objects.all() +@register_model_view(PowerPanel, 'bulk_import', detail=False) class PowerPanelBulkImportView(generic.BulkImportView): queryset = PowerPanel.objects.all() model_form = forms.PowerPanelImportForm +@register_model_view(PowerPanel, 'bulk_edit', path='edit', detail=False) class PowerPanelBulkEditView(generic.BulkEditView): queryset = PowerPanel.objects.all() filterset = filtersets.PowerPanelFilterSet @@ -3656,6 +3915,7 @@ class PowerPanelBulkEditView(generic.BulkEditView): form = forms.PowerPanelBulkEditForm +@register_model_view(PowerPanel, 'bulk_delete', path='delete', detail=False) class PowerPanelBulkDeleteView(generic.BulkDeleteView): queryset = PowerPanel.objects.annotate( powerfeed_count=count_related(PowerFeed, 'power_panel') @@ -3673,6 +3933,7 @@ class PowerPanelContactsView(ObjectContactsView): # Power feeds # +@register_model_view(PowerFeed, 'list', path='', detail=False) class PowerFeedListView(generic.ObjectListView): queryset = PowerFeed.objects.all() filterset = filtersets.PowerFeedFilterSet @@ -3685,6 +3946,7 @@ class PowerFeedView(generic.ObjectView): queryset = PowerFeed.objects.all() +@register_model_view(PowerFeed, 'add', detail=False) @register_model_view(PowerFeed, 'edit') class PowerFeedEditView(generic.ObjectEditView): queryset = PowerFeed.objects.all() @@ -3696,11 +3958,13 @@ class PowerFeedDeleteView(generic.ObjectDeleteView): queryset = PowerFeed.objects.all() +@register_model_view(PowerFeed, 'bulk_import', detail=False) class PowerFeedBulkImportView(generic.BulkImportView): queryset = PowerFeed.objects.all() model_form = forms.PowerFeedImportForm +@register_model_view(PowerFeed, 'bulk_edit', path='edit', detail=False) class PowerFeedBulkEditView(generic.BulkEditView): queryset = PowerFeed.objects.all() filterset = filtersets.PowerFeedFilterSet @@ -3708,10 +3972,12 @@ class PowerFeedBulkEditView(generic.BulkEditView): form = forms.PowerFeedBulkEditForm +@register_model_view(PowerFeed, 'bulk_disconnect', path='disconnect', detail=False) class PowerFeedBulkDisconnectView(BulkDisconnectView): queryset = PowerFeed.objects.all() +@register_model_view(PowerFeed, 'bulk_delete', path='delete', detail=False) class PowerFeedBulkDeleteView(generic.BulkDeleteView): queryset = PowerFeed.objects.all() filterset = filtersets.PowerFeedFilterSet @@ -3722,7 +3988,11 @@ class PowerFeedBulkDeleteView(generic.BulkDeleteView): register_model_view(PowerFeed, 'trace', kwargs={'model': PowerFeed})(PathTraceView) -# VDC +# +# Virtual device contexts +# + +@register_model_view(VirtualDeviceContext, 'list', path='', detail=False) class VirtualDeviceContextListView(generic.ObjectListView): queryset = VirtualDeviceContext.objects.annotate( interface_count=count_related(Interface, 'vdcs'), @@ -3748,6 +4018,7 @@ class VirtualDeviceContextView(GetRelatedModelsMixin, generic.ObjectView): } +@register_model_view(VirtualDeviceContext, 'add', detail=False) @register_model_view(VirtualDeviceContext, 'edit') class VirtualDeviceContextEditView(generic.ObjectEditView): queryset = VirtualDeviceContext.objects.all() @@ -3759,11 +4030,13 @@ class VirtualDeviceContextDeleteView(generic.ObjectDeleteView): queryset = VirtualDeviceContext.objects.all() +@register_model_view(VirtualDeviceContext, 'bulk_import', detail=False) class VirtualDeviceContextBulkImportView(generic.BulkImportView): queryset = VirtualDeviceContext.objects.all() model_form = forms.VirtualDeviceContextImportForm +@register_model_view(VirtualDeviceContext, 'bulk_edit', path='edit', detail=False) class VirtualDeviceContextBulkEditView(generic.BulkEditView): queryset = VirtualDeviceContext.objects.all() filterset = filtersets.VirtualDeviceContextFilterSet @@ -3771,7 +4044,58 @@ class VirtualDeviceContextBulkEditView(generic.BulkEditView): form = forms.VirtualDeviceContextBulkEditForm +@register_model_view(VirtualDeviceContext, 'bulk_delete', path='delete', detail=False) class VirtualDeviceContextBulkDeleteView(generic.BulkDeleteView): queryset = VirtualDeviceContext.objects.all() filterset = filtersets.VirtualDeviceContextFilterSet table = tables.VirtualDeviceContextTable + + +# +# MAC addresses +# + +@register_model_view(MACAddress, 'list', path='', detail=False) +class MACAddressListView(generic.ObjectListView): + queryset = MACAddress.objects.all() + filterset = filtersets.MACAddressFilterSet + filterset_form = forms.MACAddressFilterForm + table = tables.MACAddressTable + + +@register_model_view(MACAddress) +class MACAddressView(generic.ObjectView): + queryset = MACAddress.objects.all() + + +@register_model_view(MACAddress, 'add', detail=False) +@register_model_view(MACAddress, 'edit') +class MACAddressEditView(generic.ObjectEditView): + queryset = MACAddress.objects.all() + form = forms.MACAddressForm + + +@register_model_view(MACAddress, 'delete') +class MACAddressDeleteView(generic.ObjectDeleteView): + queryset = MACAddress.objects.all() + + +@register_model_view(MACAddress, 'bulk_import', detail=False) +class MACAddressBulkImportView(generic.BulkImportView): + queryset = MACAddress.objects.all() + model_form = forms.MACAddressImportForm + + +@register_model_view(MACAddress, 'bulk_edit', path='edit', detail=False) +class MACAddressBulkEditView(generic.BulkEditView): + queryset = MACAddress.objects.all() + filterset = filtersets.MACAddressFilterSet + table = tables.MACAddressTable + form = forms.MACAddressBulkEditForm + + +@register_model_view(MACAddress, 'bulk_delete', path='delete', detail=False) +class MACAddressBulkDeleteView(generic.BulkDeleteView): + queryset = MACAddress.objects.all() + filterset = filtersets.MACAddressFilterSet + table = tables.MACAddressTable diff --git a/netbox/extras/api/nested_serializers.py b/netbox/extras/api/nested_serializers.py deleted file mode 100644 index 235cdd6d6..000000000 --- a/netbox/extras/api/nested_serializers.py +++ /dev/null @@ -1,135 +0,0 @@ -import warnings - -from rest_framework import serializers - -from extras import models -from netbox.api.serializers import NestedTagSerializer, WritableNestedSerializer - -__all__ = [ - 'NestedBookmarkSerializer', - 'NestedConfigContextSerializer', - 'NestedConfigTemplateSerializer', - 'NestedCustomFieldChoiceSetSerializer', - 'NestedCustomFieldSerializer', - 'NestedCustomLinkSerializer', - 'NestedEventRuleSerializer', - 'NestedExportTemplateSerializer', - 'NestedImageAttachmentSerializer', - 'NestedJournalEntrySerializer', - 'NestedSavedFilterSerializer', - 'NestedScriptSerializer', - 'NestedTagSerializer', # Defined in netbox.api.serializers - 'NestedWebhookSerializer', -] - -# TODO: Remove in v4.2 -warnings.warn( - "Dedicated nested serializers will be removed in NetBox v4.2. Use Serializer(nested=True) instead.", - DeprecationWarning -) - - -class NestedEventRuleSerializer(WritableNestedSerializer): - - class Meta: - model = models.EventRule - fields = ['id', 'url', 'display_url', 'display', 'name'] - - -class NestedWebhookSerializer(WritableNestedSerializer): - - class Meta: - model = models.Webhook - fields = ['id', 'url', 'display_url', 'display', 'name'] - - -class NestedCustomFieldSerializer(WritableNestedSerializer): - - class Meta: - model = models.CustomField - fields = ['id', 'url', 'display_url', 'display', 'name'] - - -class NestedCustomFieldChoiceSetSerializer(WritableNestedSerializer): - - class Meta: - model = models.CustomFieldChoiceSet - fields = ['id', 'url', 'display_url', 'display', 'name', 'choices_count'] - - -class NestedCustomLinkSerializer(WritableNestedSerializer): - - class Meta: - model = models.CustomLink - fields = ['id', 'url', 'display_url', 'display', 'name'] - - -class NestedConfigContextSerializer(WritableNestedSerializer): - - class Meta: - model = models.ConfigContext - fields = ['id', 'url', 'display_url', 'display', 'name'] - - -class NestedConfigTemplateSerializer(WritableNestedSerializer): - - class Meta: - model = models.ConfigTemplate - fields = ['id', 'url', 'display_url', 'display', 'name'] - - -class NestedExportTemplateSerializer(WritableNestedSerializer): - - class Meta: - model = models.ExportTemplate - fields = ['id', 'url', 'display_url', 'display', 'name'] - - -class NestedSavedFilterSerializer(WritableNestedSerializer): - - class Meta: - model = models.SavedFilter - fields = ['id', 'url', 'display_url', 'display', 'name', 'slug'] - - -class NestedBookmarkSerializer(WritableNestedSerializer): - - class Meta: - model = models.Bookmark - fields = ['id', 'url', 'display', 'object_id', 'object_type'] - - -class NestedImageAttachmentSerializer(WritableNestedSerializer): - - class Meta: - model = models.ImageAttachment - fields = ['id', 'url', 'display', 'name', 'image'] - - -class NestedJournalEntrySerializer(WritableNestedSerializer): - - class Meta: - model = models.JournalEntry - fields = ['id', 'url', 'display_url', 'display', 'created'] - - -class NestedScriptSerializer(WritableNestedSerializer): - url = serializers.HyperlinkedIdentityField( - view_name='extras-api:script-detail', - lookup_field='full_name', - lookup_url_kwarg='pk' - ) - display_url = serializers.HyperlinkedIdentityField( - view_name='extras:script', - lookup_field='full_name', - lookup_url_kwarg='pk' - ) - name = serializers.CharField(read_only=True) - display = serializers.SerializerMethodField(read_only=True) - - class Meta: - model = models.Script - fields = ['id', 'url', 'display_url', 'display', 'name'] - - def get_display(self, obj): - return f'{obj.name} ({obj.module})' diff --git a/netbox/extras/constants.py b/netbox/extras/constants.py index 3bfe3b21b..994586aca 100644 --- a/netbox/extras/constants.py +++ b/netbox/extras/constants.py @@ -79,6 +79,7 @@ DEFAULT_DASHBOARD = [ 'feed_url': 'http://netbox.dev/rss/', 'max_entries': 10, 'cache_timeout': 14400, + 'requires_internet': True, } }, { diff --git a/netbox/extras/dashboard/widgets.py b/netbox/extras/dashboard/widgets.py index c56e4cd7d..eeed5414f 100644 --- a/netbox/extras/dashboard/widgets.py +++ b/netbox/extras/dashboard/widgets.py @@ -275,6 +275,7 @@ class RSSFeedWidget(DashboardWidget): default_config = { 'max_entries': 10, 'cache_timeout': 3600, # seconds + 'requires_internet': True, } description = _('Embed an RSS feed from an external website.') template_name = 'extras/dashboard/widgets/rssfeed.html' @@ -285,6 +286,10 @@ class RSSFeedWidget(DashboardWidget): feed_url = forms.URLField( label=_('Feed URL') ) + requires_internet = forms.BooleanField( + label=_('Requires external connection'), + required=False, + ) max_entries = forms.IntegerField( min_value=1, max_value=1000, @@ -309,6 +314,11 @@ class RSSFeedWidget(DashboardWidget): return f'dashboard_rss_{url_checksum}' def get_feed(self): + if self.config.get('requires_internet') and settings.ISOLATED_DEPLOYMENT: + return { + 'isolated_deployment': True, + } + # Fetch RSS content from cache if available if feed_content := cache.get(self.cache_key): return { diff --git a/netbox/extras/events.py b/netbox/extras/events.py index f13a3b48f..95170e18d 100644 --- a/netbox/extras/events.py +++ b/netbox/extras/events.py @@ -90,6 +90,10 @@ def process_event_rules(event_rules, object_type, event_type, data, username=Non if not event_rule.eval_conditions(data): continue + # Compile event data + event_data = event_rule.action_data or {} + event_data.update(data) + # Webhooks if event_rule.action_type == EventRuleActionChoices.WEBHOOK: @@ -102,7 +106,7 @@ def process_event_rules(event_rules, object_type, event_type, data, username=Non "event_rule": event_rule, "model_name": object_type.model, "event_type": event_type, - "data": data, + "data": event_data, "snapshots": snapshots, "timestamp": timezone.now().isoformat(), "username": username, @@ -130,7 +134,7 @@ def process_event_rules(event_rules, object_type, event_type, data, username=Non instance=event_rule.action_object, name=script.name, user=user, - data=data + data=event_data ) # Notification groups @@ -138,8 +142,8 @@ def process_event_rules(event_rules, object_type, event_type, data, username=Non # Bulk-create notifications for all members of the notification group event_rule.action_object.notify( object_type=object_type, - object_id=data['id'], - object_repr=data.get('display'), + object_id=event_data['id'], + object_repr=event_data.get('display'), event_type=event_type ) diff --git a/netbox/extras/forms/bulk_import.py b/netbox/extras/forms/bulk_import.py index 55c9cd764..655a5d6ca 100644 --- a/netbox/extras/forms/bulk_import.py +++ b/netbox/extras/forms/bulk_import.py @@ -202,7 +202,7 @@ class EventRuleImportForm(NetBoxModelImportForm): model = EventRule fields = ( 'name', 'description', 'enabled', 'conditions', 'object_types', 'event_types', 'action_type', - 'action_object', 'comments', 'tags' + 'comments', 'tags' ) def clean(self): @@ -223,7 +223,7 @@ class EventRuleImportForm(NetBoxModelImportForm): from extras.scripts import get_module_and_script module_name, script_name = action_object.split('.', 1) try: - module, script = get_module_and_script(module_name, script_name) + script = get_module_and_script(module_name, script_name)[1] except ObjectDoesNotExist: raise forms.ValidationError(_("Script {name} not found").format(name=action_object)) self.instance.action_object = script diff --git a/netbox/extras/jobs.py b/netbox/extras/jobs.py index a913fe456..10d76e3aa 100644 --- a/netbox/extras/jobs.py +++ b/netbox/extras/jobs.py @@ -1,14 +1,14 @@ import logging import traceback -from contextlib import nullcontext +from contextlib import ExitStack from django.db import transaction from django.utils.translation import gettext as _ from core.signals import clear_events from extras.models import Script as ScriptModel -from netbox.context_managers import event_tracking from netbox.jobs import JobRunner +from netbox.registry import registry from utilities.exceptions import AbortScript, AbortTransaction from .utils import is_report @@ -22,9 +22,7 @@ class ScriptJob(JobRunner): """ class Meta: - # An explicit job name is not set because it doesn't make sense in this context. Currently, there's no scenario - # where jobs other than this one are used. Therefore, it is hidden, resulting in a cleaner job table overview. - name = '' + name = 'Run Script' def run_script(self, script, request, data, commit): """ @@ -102,5 +100,7 @@ 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 event_tracking(request) if commit else nullcontext(): + with ExitStack() as stack: + for request_processor in registry['request_processors']: + stack.enter_context(request_processor(request)) self.run_script(script, request, data, commit) diff --git a/netbox/extras/management/commands/reindex.py b/netbox/extras/management/commands/reindex.py index 21442be93..5495bbf5f 100644 --- a/netbox/extras/management/commands/reindex.py +++ b/netbox/extras/management/commands/reindex.py @@ -53,7 +53,8 @@ class Command(BaseCommand): else: raise CommandError( - f"Invalid model: {label}. Model names must be in the format or .." + f"Invalid model: {label}. Model names must be in the format or " + f".." ) return indexers diff --git a/netbox/extras/management/commands/runscript.py b/netbox/extras/management/commands/runscript.py index d5fb435ad..847d89396 100644 --- a/netbox/extras/management/commands/runscript.py +++ b/netbox/extras/management/commands/runscript.py @@ -38,7 +38,7 @@ class Command(BaseCommand): data = {} module_name, script_name = script.split('.', 1) - module, script_obj = get_module_and_script(module_name, script_name) + script_obj = get_module_and_script(module_name, script_name)[1] script = script_obj.python_class # Take user from command line if provided and exists, other diff --git a/netbox/extras/migrations/0001_squashed.py b/netbox/extras/migrations/0001_squashed.py index 6f1f77e53..a2514fa5e 100644 --- a/netbox/extras/migrations/0001_squashed.py +++ b/netbox/extras/migrations/0001_squashed.py @@ -9,7 +9,6 @@ import utilities.validators class Migration(migrations.Migration): - initial = True dependencies = [ @@ -99,8 +98,22 @@ class Migration(migrations.Migration): fields=[ ('object_id', models.IntegerField(db_index=True)), ('id', models.BigAutoField(primary_key=True, serialize=False)), - ('content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(app_label)s_%(class)s_tagged_items', to='contenttypes.contenttype')), - ('tag', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(app_label)s_%(class)s_items', to='extras.tag')), + ( + 'content_type', + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name='%(app_label)s_%(class)s_tagged_items', + to='contenttypes.contenttype', + ), + ), + ( + 'tag', + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name='%(app_label)s_%(class)s_items', + to='extras.tag', + ), + ), ], ), migrations.CreateModel( @@ -116,9 +129,32 @@ class Migration(migrations.Migration): ('object_repr', models.CharField(editable=False, max_length=200)), ('prechange_data', models.JSONField(blank=True, editable=False, null=True)), ('postchange_data', models.JSONField(blank=True, editable=False, null=True)), - ('changed_object_type', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='+', to='contenttypes.contenttype')), - ('related_object_type', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='+', to='contenttypes.contenttype')), - ('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='changes', to=settings.AUTH_USER_MODEL)), + ( + 'changed_object_type', + models.ForeignKey( + on_delete=django.db.models.deletion.PROTECT, related_name='+', to='contenttypes.contenttype' + ), + ), + ( + 'related_object_type', + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='+', + to='contenttypes.contenttype', + ), + ), + ( + 'user', + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='changes', + to=settings.AUTH_USER_MODEL, + ), + ), ], options={ 'ordering': ['-time'], @@ -133,8 +169,16 @@ class Migration(migrations.Migration): ('created', models.DateTimeField(auto_now_add=True)), ('kind', models.CharField(default='info', max_length=30)), ('comments', models.TextField()), - ('assigned_object_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.contenttype')), - ('created_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL)), + ( + 'assigned_object_type', + models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.contenttype'), + ), + ( + 'created_by', + models.ForeignKey( + blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL + ), + ), ], options={ 'verbose_name_plural': 'journal entries', @@ -151,8 +195,24 @@ class Migration(migrations.Migration): ('status', models.CharField(default='pending', max_length=30)), ('data', models.JSONField(blank=True, null=True)), ('job_id', models.UUIDField(unique=True)), - ('obj_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='job_results', to='contenttypes.contenttype')), - ('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to=settings.AUTH_USER_MODEL)), + ( + 'obj_type', + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name='job_results', + to='contenttypes.contenttype', + ), + ), + ( + 'user', + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='+', + to=settings.AUTH_USER_MODEL, + ), + ), ], options={ 'ordering': ['obj_type', 'name', '-created'], @@ -163,12 +223,20 @@ class Migration(migrations.Migration): fields=[ ('id', models.BigAutoField(primary_key=True, serialize=False)), ('object_id', models.PositiveIntegerField()), - ('image', models.ImageField(height_field='image_height', upload_to=extras.utils.image_upload, width_field='image_width')), + ( + 'image', + models.ImageField( + height_field='image_height', upload_to=extras.utils.image_upload, width_field='image_width' + ), + ), ('image_height', models.PositiveSmallIntegerField()), ('image_width', models.PositiveSmallIntegerField()), ('name', models.CharField(blank=True, max_length=50)), ('created', models.DateTimeField(auto_now_add=True)), - ('content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.contenttype')), + ( + 'content_type', + models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.contenttype'), + ), ], options={ 'ordering': ('name', 'pk'), @@ -184,7 +252,10 @@ class Migration(migrations.Migration): ('mime_type', models.CharField(blank=True, max_length=50)), ('file_extension', models.CharField(blank=True, max_length=15)), ('as_attachment', models.BooleanField(default=True)), - ('content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.contenttype')), + ( + 'content_type', + models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.contenttype'), + ), ], options={ 'ordering': ['content_type', 'name'], @@ -201,7 +272,10 @@ class Migration(migrations.Migration): ('group_name', models.CharField(blank=True, max_length=50)), ('button_class', models.CharField(default='default', max_length=30)), ('new_window', models.BooleanField(default=False)), - ('content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.contenttype')), + ( + 'content_type', + models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.contenttype'), + ), ], options={ 'ordering': ['group_name', 'weight', 'name'], @@ -221,8 +295,16 @@ class Migration(migrations.Migration): ('weight', models.PositiveSmallIntegerField(default=100)), ('validation_minimum', models.PositiveIntegerField(blank=True, null=True)), ('validation_maximum', models.PositiveIntegerField(blank=True, null=True)), - ('validation_regex', models.CharField(blank=True, max_length=500, validators=[utilities.validators.validate_regex])), - ('choices', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100), blank=True, null=True, size=None)), + ( + 'validation_regex', + models.CharField(blank=True, max_length=500, validators=[utilities.validators.validate_regex]), + ), + ( + 'choices', + django.contrib.postgres.fields.ArrayField( + base_field=models.CharField(max_length=100), blank=True, null=True, size=None + ), + ), ('content_types', models.ManyToManyField(related_name='custom_fields', to='contenttypes.ContentType')), ], options={ diff --git a/netbox/extras/migrations/0002_squashed_0059.py b/netbox/extras/migrations/0002_squashed_0059.py index 98bed255a..b664b286e 100644 --- a/netbox/extras/migrations/0002_squashed_0059.py +++ b/netbox/extras/migrations/0002_squashed_0059.py @@ -2,7 +2,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('dcim', '0002_auto_20160622_1821'), ('extras', '0001_initial'), @@ -131,10 +130,6 @@ class Migration(migrations.Migration): name='webhook', unique_together={('payload_url', 'type_create', 'type_update', 'type_delete')}, ), - migrations.AlterIndexTogether( - name='taggeditem', - index_together={('content_type', 'object_id')}, - ), migrations.AlterUniqueTogether( name='exporttemplate', unique_together={('content_type', 'name')}, diff --git a/netbox/extras/migrations/0060_squashed_0086.py b/netbox/extras/migrations/0060_squashed_0086.py index 0d5d03008..3bde7480f 100644 --- a/netbox/extras/migrations/0060_squashed_0086.py +++ b/netbox/extras/migrations/0060_squashed_0086.py @@ -12,7 +12,6 @@ import utilities.json class Migration(migrations.Migration): - replaces = [ ('extras', '0060_customlink_button_class'), ('extras', '0061_extras_change_logging'), @@ -40,7 +39,7 @@ class Migration(migrations.Migration): ('extras', '0083_search'), ('extras', '0084_staging'), ('extras', '0085_synced_data'), - ('extras', '0086_configtemplate') + ('extras', '0086_configtemplate'), ] dependencies = [ @@ -114,7 +113,23 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='customfield', name='name', - field=models.CharField(max_length=50, unique=True, validators=[django.core.validators.RegexValidator(flags=re.RegexFlag['IGNORECASE'], message='Only alphanumeric characters and underscores are allowed.', regex='^[a-z0-9_]+$'), django.core.validators.RegexValidator(flags=re.RegexFlag['IGNORECASE'], inverse_match=True, message='Double underscores are not permitted in custom field names.', regex='__')]), + field=models.CharField( + max_length=50, + unique=True, + validators=[ + django.core.validators.RegexValidator( + flags=re.RegexFlag['IGNORECASE'], + message='Only alphanumeric characters and underscores are allowed.', + regex='^[a-z0-9_]+$', + ), + django.core.validators.RegexValidator( + flags=re.RegexFlag['IGNORECASE'], + inverse_match=True, + message='Double underscores are not permitted in custom field names.', + regex='__', + ), + ], + ), ), migrations.AlterField( model_name='customfield', @@ -134,7 +149,9 @@ class Migration(migrations.Migration): migrations.AddField( model_name='customfield', name='object_type', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='contenttypes.contenttype'), + field=models.ForeignKey( + blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='contenttypes.contenttype' + ), ), migrations.AddField( model_name='customlink', @@ -314,11 +331,16 @@ class Migration(migrations.Migration): ), migrations.AddConstraint( model_name='exporttemplate', - constraint=models.UniqueConstraint(fields=('content_type', 'name'), name='extras_exporttemplate_unique_content_type_name'), + constraint=models.UniqueConstraint( + fields=('content_type', 'name'), name='extras_exporttemplate_unique_content_type_name' + ), ), migrations.AddConstraint( model_name='webhook', - constraint=models.UniqueConstraint(fields=('payload_url', 'type_create', 'type_update', 'type_delete'), name='extras_webhook_unique_payload_url_types'), + constraint=models.UniqueConstraint( + fields=('payload_url', 'type_create', 'type_update', 'type_delete'), + name='extras_webhook_unique_payload_url_types', + ), ), migrations.AddField( model_name='jobresult', @@ -328,7 +350,9 @@ class Migration(migrations.Migration): migrations.AddField( model_name='jobresult', name='interval', - field=models.PositiveIntegerField(blank=True, null=True, validators=[django.core.validators.MinValueValidator(1)]), + field=models.PositiveIntegerField( + blank=True, null=True, validators=[django.core.validators.MinValueValidator(1)] + ), ), migrations.AddField( model_name='jobresult', @@ -379,7 +403,12 @@ class Migration(migrations.Migration): ('shared', models.BooleanField(default=True)), ('parameters', models.JSONField()), ('content_types', models.ManyToManyField(related_name='saved_filters', to='contenttypes.contenttype')), - ('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL)), + ( + 'user', + models.ForeignKey( + blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL + ), + ), ], options={ 'ordering': ('weight', 'name'), @@ -400,7 +429,12 @@ class Migration(migrations.Migration): ('type', models.CharField(max_length=30)), ('value', extras.fields.CachedValueField()), ('weight', models.PositiveSmallIntegerField(default=1000)), - ('object_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to='contenttypes.contenttype')), + ( + 'object_type', + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, related_name='+', to='contenttypes.contenttype' + ), + ), ], options={ 'ordering': ('weight', 'object_type', 'object_id'), @@ -414,7 +448,12 @@ class Migration(migrations.Migration): ('last_updated', models.DateTimeField(auto_now=True, null=True)), ('name', models.CharField(max_length=100, unique=True)), ('description', models.CharField(blank=True, max_length=200)), - ('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL)), + ( + 'user', + models.ForeignKey( + blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL + ), + ), ], options={ 'ordering': ('name',), @@ -429,8 +468,18 @@ class Migration(migrations.Migration): ('action', models.CharField(max_length=20)), ('object_id', models.PositiveBigIntegerField(blank=True, null=True)), ('data', models.JSONField(blank=True, null=True)), - ('branch', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='staged_changes', to='extras.branch')), - ('object_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to='contenttypes.contenttype')), + ( + 'branch', + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, related_name='staged_changes', to='extras.branch' + ), + ), + ( + 'object_type', + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, related_name='+', to='contenttypes.contenttype' + ), + ), ], options={ 'ordering': ('pk',), @@ -439,7 +488,13 @@ class Migration(migrations.Migration): migrations.AddField( model_name='configcontext', name='data_file', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='core.datafile'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='+', + to='core.datafile', + ), ), migrations.AddField( model_name='configcontext', @@ -449,7 +504,13 @@ class Migration(migrations.Migration): migrations.AddField( model_name='configcontext', name='data_source', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='+', to='core.datasource'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='+', + to='core.datasource', + ), ), migrations.AddField( model_name='configcontext', @@ -464,7 +525,13 @@ class Migration(migrations.Migration): migrations.AddField( model_name='exporttemplate', name='data_file', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='core.datafile'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='+', + to='core.datafile', + ), ), migrations.AddField( model_name='exporttemplate', @@ -474,7 +541,13 @@ class Migration(migrations.Migration): migrations.AddField( model_name='exporttemplate', name='data_source', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='+', to='core.datasource'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='+', + to='core.datasource', + ), ), migrations.AddField( model_name='exporttemplate', @@ -498,8 +571,26 @@ class Migration(migrations.Migration): ('description', models.CharField(blank=True, max_length=200)), ('template_code', models.TextField()), ('environment_params', models.JSONField(blank=True, default=dict, null=True)), - ('data_file', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='+', to='core.datafile')), - ('data_source', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='+', to='core.datasource')), + ( + 'data_file', + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='+', + to='core.datafile', + ), + ), + ( + 'data_source', + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='+', + to='core.datasource', + ), + ), ('auto_sync_enabled', models.BooleanField(default=False)), ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), ], diff --git a/netbox/extras/migrations/0087_squashed_0098.py b/netbox/extras/migrations/0087_squashed_0098.py index 55f276ecd..839f4cbe4 100644 --- a/netbox/extras/migrations/0087_squashed_0098.py +++ b/netbox/extras/migrations/0087_squashed_0098.py @@ -9,7 +9,6 @@ import utilities.json class Migration(migrations.Migration): - replaces = [ ('extras', '0087_dashboard'), ('extras', '0088_jobresult_webhooks'), @@ -22,7 +21,7 @@ class Migration(migrations.Migration): ('extras', '0095_bookmarks'), ('extras', '0096_customfieldchoiceset'), ('extras', '0097_customfield_remove_choices'), - ('extras', '0098_webhook_custom_field_data_webhook_tags') + ('extras', '0098_webhook_custom_field_data_webhook_tags'), ] dependencies = [ @@ -39,7 +38,14 @@ class Migration(migrations.Migration): ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), ('layout', models.JSONField(default=list)), ('config', models.JSONField(default=dict)), - ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='dashboard', to=settings.AUTH_USER_MODEL)), + ( + 'user', + models.OneToOneField( + on_delete=django.db.models.deletion.CASCADE, + related_name='dashboard', + to=settings.AUTH_USER_MODEL, + ), + ), ], ), migrations.AddField( @@ -64,8 +70,7 @@ class Migration(migrations.Migration): ), migrations.CreateModel( name='ReportModule', - fields=[ - ], + fields=[], options={ 'proxy': True, 'ordering': ('file_root', 'file_path'), @@ -76,8 +81,7 @@ class Migration(migrations.Migration): ), migrations.CreateModel( name='ScriptModule', - fields=[ - ], + fields=[], options={ 'proxy': True, 'ordering': ('file_root', 'file_path'), @@ -98,10 +102,9 @@ class Migration(migrations.Migration): name='object_types', field=models.ManyToManyField(blank=True, related_name='+', to='contenttypes.contenttype'), ), - migrations.RenameIndex( + migrations.AddIndex( model_name='taggeditem', - new_name='extras_tagg_content_717743_idx', - old_fields=('content_type', 'object_id'), + index=models.Index(fields=['content_type', 'object_id'], name='extras_tagg_content_717743_idx'), ), migrations.CreateModel( name='Bookmark', @@ -109,7 +112,10 @@ class Migration(migrations.Migration): ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), ('created', models.DateTimeField(auto_now_add=True)), ('object_id', models.PositiveBigIntegerField()), - ('object_type', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='contenttypes.contenttype')), + ( + 'object_type', + models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='contenttypes.contenttype'), + ), ('user', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL)), ], options={ @@ -118,7 +124,9 @@ class Migration(migrations.Migration): ), migrations.AddConstraint( model_name='bookmark', - constraint=models.UniqueConstraint(fields=('object_type', 'object_id', 'user'), name='extras_bookmark_unique_per_object_and_user'), + constraint=models.UniqueConstraint( + fields=('object_type', 'object_id', 'user'), name='extras_bookmark_unique_per_object_and_user' + ), ), migrations.CreateModel( name='CustomFieldChoiceSet', @@ -129,7 +137,17 @@ class Migration(migrations.Migration): ('name', models.CharField(max_length=100, unique=True)), ('description', models.CharField(blank=True, max_length=200)), ('base_choices', models.CharField(blank=True, max_length=50)), - ('extra_choices', django.contrib.postgres.fields.ArrayField(base_field=django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100), size=2), blank=True, null=True, size=None)), + ( + 'extra_choices', + django.contrib.postgres.fields.ArrayField( + base_field=django.contrib.postgres.fields.ArrayField( + base_field=models.CharField(max_length=100), size=2 + ), + blank=True, + null=True, + size=None, + ), + ), ('order_alphabetically', models.BooleanField(default=False)), ], options={ @@ -139,7 +157,13 @@ class Migration(migrations.Migration): migrations.AddField( model_name='customfield', name='choice_set', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='choices_for', to='extras.customfieldchoiceset'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='choices_for', + to='extras.customfieldchoiceset', + ), ), migrations.RemoveField( model_name='customfield', diff --git a/netbox/extras/migrations/0099_cachedvalue_ordering.py b/netbox/extras/migrations/0099_cachedvalue_ordering.py index 242ffd983..36b91d59b 100644 --- a/netbox/extras/migrations/0099_cachedvalue_ordering.py +++ b/netbox/extras/migrations/0099_cachedvalue_ordering.py @@ -4,7 +4,6 @@ from django.db import migrations class Migration(migrations.Migration): - dependencies = [ ('extras', '0098_webhook_custom_field_data_webhook_tags'), ] diff --git a/netbox/extras/migrations/0100_customfield_ui_attrs.py b/netbox/extras/migrations/0100_customfield_ui_attrs.py index a4a713a86..b1a404d16 100644 --- a/netbox/extras/migrations/0100_customfield_ui_attrs.py +++ b/netbox/extras/migrations/0100_customfield_ui_attrs.py @@ -14,7 +14,6 @@ def update_ui_attrs(apps, schema_editor): class Migration(migrations.Migration): - dependencies = [ ('extras', '0099_cachedvalue_ordering'), ] @@ -30,10 +29,7 @@ class Migration(migrations.Migration): name='ui_visible', field=models.CharField(default='always', max_length=50), ), - migrations.RunPython( - code=update_ui_attrs, - reverse_code=migrations.RunPython.noop - ), + migrations.RunPython(code=update_ui_attrs, reverse_code=migrations.RunPython.noop), migrations.RemoveField( model_name='customfield', name='ui_visibility', diff --git a/netbox/extras/migrations/0101_eventrule.py b/netbox/extras/migrations/0101_eventrule.py index 3d236c847..605307c27 100644 --- a/netbox/extras/migrations/0101_eventrule.py +++ b/netbox/extras/migrations/0101_eventrule.py @@ -8,8 +8,8 @@ from extras.choices import * def move_webhooks(apps, schema_editor): - Webhook = apps.get_model("extras", "Webhook") - EventRule = apps.get_model("extras", "EventRule") + Webhook = apps.get_model('extras', 'Webhook') + EventRule = apps.get_model('extras', 'EventRule') webhook_ct = ContentType.objects.get_for_model(Webhook).pk for webhook in Webhook.objects.all(): @@ -39,7 +39,6 @@ class Migration(migrations.Migration): ] operations = [ - # Create the EventRule model migrations.CreateModel( name='EventRule', @@ -93,12 +92,12 @@ class Migration(migrations.Migration): ), migrations.AddIndex( model_name='eventrule', - index=models.Index(fields=['action_object_type', 'action_object_id'], name='extras_even_action__d9e2af_idx'), + index=models.Index( + fields=['action_object_type', 'action_object_id'], name='extras_even_action__d9e2af_idx' + ), ), - # Replicate Webhook data migrations.RunPython(move_webhooks), - # Remove obsolete fields from Webhook migrations.RemoveConstraint( model_name='webhook', @@ -136,7 +135,6 @@ class Migration(migrations.Migration): model_name='webhook', name='type_update', ), - # Add description field to Webhook migrations.AddField( model_name='webhook', diff --git a/netbox/extras/migrations/0102_move_configrevision.py b/netbox/extras/migrations/0102_move_configrevision.py index 36eef1205..64ff8c9ad 100644 --- a/netbox/extras/migrations/0102_move_configrevision.py +++ b/netbox/extras/migrations/0102_move_configrevision.py @@ -13,7 +13,6 @@ def update_content_type(apps, schema_editor): class Migration(migrations.Migration): - dependencies = [ ('extras', '0101_eventrule'), ] @@ -32,8 +31,5 @@ class Migration(migrations.Migration): ), ], ), - migrations.RunPython( - code=update_content_type, - reverse_code=migrations.RunPython.noop - ), + migrations.RunPython(code=update_content_type, reverse_code=migrations.RunPython.noop), ] diff --git a/netbox/extras/migrations/0103_gfk_indexes.py b/netbox/extras/migrations/0103_gfk_indexes.py index 2ccbdb2ff..f32b2e116 100644 --- a/netbox/extras/migrations/0103_gfk_indexes.py +++ b/netbox/extras/migrations/0103_gfk_indexes.py @@ -4,7 +4,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('extras', '0102_move_configrevision'), ] @@ -20,15 +19,21 @@ class Migration(migrations.Migration): ), migrations.AddIndex( model_name='journalentry', - index=models.Index(fields=['assigned_object_type', 'assigned_object_id'], name='extras_jour_assigne_76510f_idx'), + index=models.Index( + fields=['assigned_object_type', 'assigned_object_id'], name='extras_jour_assigne_76510f_idx' + ), ), migrations.AddIndex( model_name='objectchange', - index=models.Index(fields=['changed_object_type', 'changed_object_id'], name='extras_obje_changed_927fe5_idx'), + index=models.Index( + fields=['changed_object_type', 'changed_object_id'], name='extras_obje_changed_927fe5_idx' + ), ), migrations.AddIndex( model_name='objectchange', - index=models.Index(fields=['related_object_type', 'related_object_id'], name='extras_obje_related_bfcdef_idx'), + index=models.Index( + fields=['related_object_type', 'related_object_id'], name='extras_obje_related_bfcdef_idx' + ), ), migrations.AddIndex( model_name='stagedchange', diff --git a/netbox/extras/migrations/0105_customfield_min_max_values.py b/netbox/extras/migrations/0105_customfield_min_max_values.py index bcf3f97bd..71a0dcc68 100644 --- a/netbox/extras/migrations/0105_customfield_min_max_values.py +++ b/netbox/extras/migrations/0105_customfield_min_max_values.py @@ -4,7 +4,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('extras', '0104_stagedchange_remove_change_logging'), ] diff --git a/netbox/extras/migrations/0106_bookmark_user_cascade_deletion.py b/netbox/extras/migrations/0106_bookmark_user_cascade_deletion.py index d7bef2f0b..bc0e1bbd0 100644 --- a/netbox/extras/migrations/0106_bookmark_user_cascade_deletion.py +++ b/netbox/extras/migrations/0106_bookmark_user_cascade_deletion.py @@ -6,7 +6,6 @@ import django.db.models.deletion class Migration(migrations.Migration): - dependencies = [ migrations.swappable_dependency(settings.AUTH_USER_MODEL), ('extras', '0105_customfield_min_max_values'), diff --git a/netbox/extras/migrations/0107_cachedvalue_extras_cachedvalue_object.py b/netbox/extras/migrations/0107_cachedvalue_extras_cachedvalue_object.py index 15ce375a2..3f2907192 100644 --- a/netbox/extras/migrations/0107_cachedvalue_extras_cachedvalue_object.py +++ b/netbox/extras/migrations/0107_cachedvalue_extras_cachedvalue_object.py @@ -4,7 +4,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('extras', '0106_bookmark_user_cascade_deletion'), ] diff --git a/netbox/extras/migrations/0108_convert_reports_to_scripts.py b/netbox/extras/migrations/0108_convert_reports_to_scripts.py index b547c41c3..948bac754 100644 --- a/netbox/extras/migrations/0108_convert_reports_to_scripts.py +++ b/netbox/extras/migrations/0108_convert_reports_to_scripts.py @@ -12,16 +12,12 @@ def convert_reportmodule_jobs(apps, schema_editor): class Migration(migrations.Migration): - dependencies = [ ('extras', '0107_cachedvalue_extras_cachedvalue_object'), ] operations = [ - migrations.RunPython( - code=convert_reportmodule_jobs, - reverse_code=migrations.RunPython.noop - ), + migrations.RunPython(code=convert_reportmodule_jobs, reverse_code=migrations.RunPython.noop), migrations.DeleteModel( name='Report', ), diff --git a/netbox/extras/migrations/0109_script_model.py b/netbox/extras/migrations/0109_script_model.py index 6bfd2c14c..706a776af 100644 --- a/netbox/extras/migrations/0109_script_model.py +++ b/netbox/extras/migrations/0109_script_model.py @@ -30,7 +30,7 @@ def get_python_name(scriptmodule): """ Return the Python name of a ScriptModule's file on disk. """ - path, filename = os.path.split(scriptmodule.file_path) + filename = os.path.split(scriptmodule.file_path)[0] return os.path.splitext(filename)[0] @@ -55,9 +55,10 @@ def get_module_scripts(scriptmodule): """ Return a dictionary mapping of name and script class inside the passed ScriptModule. """ + def get_name(cls): # For child objects in submodules use the full import path w/o the root module as the name - return cls.full_name.split(".", maxsplit=1)[1] + return cls.full_name.split('.', maxsplit=1)[1] loader = SourceFileLoader(get_python_name(scriptmodule), get_full_path(scriptmodule)) try: @@ -100,17 +101,13 @@ def update_scripts(apps, schema_editor): ) # Update all Jobs associated with this ScriptModule & script name to point to the new Script object - Job.objects.filter( - object_type_id=scriptmodule_ct.id, - object_id=module.pk, - name=script_name - ).update(object_type_id=script_ct.id, object_id=script.pk) + Job.objects.filter(object_type_id=scriptmodule_ct.id, object_id=module.pk, name=script_name).update( + object_type_id=script_ct.id, object_id=script.pk + ) # Update all Jobs associated with this ScriptModule & script name to point to the new Script object - Job.objects.filter( - object_type_id=reportmodule_ct.id, - object_id=module.pk, - name=script_name - ).update(object_type_id=script_ct.id, object_id=script.pk) + Job.objects.filter(object_type_id=reportmodule_ct.id, object_id=module.pk, name=script_name).update( + object_type_id=script_ct.id, object_id=script.pk + ) def update_event_rules(apps, schema_editor): @@ -128,16 +125,13 @@ def update_event_rules(apps, schema_editor): for eventrule in EventRule.objects.filter(action_object_type=scriptmodule_ct): name = eventrule.action_parameters.get('script_name') - obj, created = Script.objects.get_or_create( - module_id=eventrule.action_object_id, - name=name, - defaults={'is_executable': False} + obj, __ = Script.objects.get_or_create( + module_id=eventrule.action_object_id, name=name, defaults={'is_executable': False} ) EventRule.objects.filter(pk=eventrule.pk).update(action_object_type=script_ct, action_object_id=obj.id) class Migration(migrations.Migration): - dependencies = [ ('extras', '0108_convert_reports_to_scripts'), ] @@ -148,8 +142,16 @@ class Migration(migrations.Migration): fields=[ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), ('name', models.CharField(editable=False, max_length=79)), - ('module', models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE, related_name='scripts', to='extras.scriptmodule')), - ('is_executable', models.BooleanField(editable=False, default=True)) + ( + 'module', + models.ForeignKey( + editable=False, + on_delete=django.db.models.deletion.CASCADE, + related_name='scripts', + to='extras.scriptmodule', + ), + ), + ('is_executable', models.BooleanField(editable=False, default=True)), ], options={ 'ordering': ('module', 'name'), @@ -159,12 +161,6 @@ class Migration(migrations.Migration): model_name='script', constraint=models.UniqueConstraint(fields=('name', 'module'), name='extras_script_unique_name_module'), ), - migrations.RunPython( - code=update_scripts, - reverse_code=migrations.RunPython.noop - ), - migrations.RunPython( - code=update_event_rules, - reverse_code=migrations.RunPython.noop - ), + migrations.RunPython(code=update_scripts, reverse_code=migrations.RunPython.noop), + migrations.RunPython(code=update_event_rules, reverse_code=migrations.RunPython.noop), ] diff --git a/netbox/extras/migrations/0110_remove_eventrule_action_parameters.py b/netbox/extras/migrations/0110_remove_eventrule_action_parameters.py index b7373bdce..494107643 100644 --- a/netbox/extras/migrations/0110_remove_eventrule_action_parameters.py +++ b/netbox/extras/migrations/0110_remove_eventrule_action_parameters.py @@ -2,7 +2,6 @@ from django.db import migrations class Migration(migrations.Migration): - dependencies = [ ('extras', '0109_script_model'), ] diff --git a/netbox/extras/migrations/0111_rename_content_types.py b/netbox/extras/migrations/0111_rename_content_types.py index acd6aef0f..a9f80b146 100644 --- a/netbox/extras/migrations/0111_rename_content_types.py +++ b/netbox/extras/migrations/0111_rename_content_types.py @@ -3,7 +3,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('core', '0010_gfk_indexes'), ('extras', '0110_remove_eventrule_action_parameters'), @@ -24,16 +23,19 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='customfield', name='object_type', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='core.objecttype'), - ), - migrations.RunSQL( - "ALTER TABLE IF EXISTS extras_customfield_content_types_id_seq RENAME TO extras_customfield_object_types_id_seq" + field=models.ForeignKey( + blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='core.objecttype' + ), ), + migrations.RunSQL(( + 'ALTER TABLE IF EXISTS extras_customfield_content_types_id_seq ' + 'RENAME TO extras_customfield_object_types_id_seq' + )), # Pre-v2.10 sequence name (see #15605) - migrations.RunSQL( - "ALTER TABLE IF EXISTS extras_customfield_obj_type_id_seq RENAME TO extras_customfield_object_types_id_seq" - ), - + migrations.RunSQL(( + 'ALTER TABLE IF EXISTS extras_customfield_obj_type_id_seq ' + 'RENAME TO extras_customfield_object_types_id_seq' + )), # Custom links migrations.RenameField( model_name='customlink', @@ -46,9 +48,8 @@ class Migration(migrations.Migration): field=models.ManyToManyField(related_name='custom_links', to='core.objecttype'), ), migrations.RunSQL( - "ALTER TABLE extras_customlink_content_types_id_seq RENAME TO extras_customlink_object_types_id_seq" + 'ALTER TABLE extras_customlink_content_types_id_seq RENAME TO extras_customlink_object_types_id_seq' ), - # Event rules migrations.RenameField( model_name='eventrule', @@ -61,9 +62,8 @@ class Migration(migrations.Migration): field=models.ManyToManyField(related_name='event_rules', to='core.objecttype'), ), migrations.RunSQL( - "ALTER TABLE extras_eventrule_content_types_id_seq RENAME TO extras_eventrule_object_types_id_seq" + 'ALTER TABLE extras_eventrule_content_types_id_seq RENAME TO extras_eventrule_object_types_id_seq' ), - # Export templates migrations.RenameField( model_name='exporttemplate', @@ -76,9 +76,8 @@ class Migration(migrations.Migration): field=models.ManyToManyField(related_name='export_templates', to='core.objecttype'), ), migrations.RunSQL( - "ALTER TABLE extras_exporttemplate_content_types_id_seq RENAME TO extras_exporttemplate_object_types_id_seq" + 'ALTER TABLE extras_exporttemplate_content_types_id_seq RENAME TO extras_exporttemplate_object_types_id_seq' ), - # Saved filters migrations.RenameField( model_name='savedfilter', @@ -91,9 +90,8 @@ class Migration(migrations.Migration): field=models.ManyToManyField(related_name='saved_filters', to='core.objecttype'), ), migrations.RunSQL( - "ALTER TABLE extras_savedfilter_content_types_id_seq RENAME TO extras_savedfilter_object_types_id_seq" + 'ALTER TABLE extras_savedfilter_content_types_id_seq RENAME TO extras_savedfilter_object_types_id_seq' ), - # Image attachments migrations.RemoveIndex( model_name='imageattachment', diff --git a/netbox/extras/migrations/0112_tag_update_object_types.py b/netbox/extras/migrations/0112_tag_update_object_types.py index 87ec117a4..e863ba8c3 100644 --- a/netbox/extras/migrations/0112_tag_update_object_types.py +++ b/netbox/extras/migrations/0112_tag_update_object_types.py @@ -2,7 +2,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('core', '0010_gfk_indexes'), ('extras', '0111_rename_content_types'), diff --git a/netbox/extras/migrations/0113_customfield_rename_object_type.py b/netbox/extras/migrations/0113_customfield_rename_object_type.py index 73c4a2a61..9ad9fbbc4 100644 --- a/netbox/extras/migrations/0113_customfield_rename_object_type.py +++ b/netbox/extras/migrations/0113_customfield_rename_object_type.py @@ -2,7 +2,6 @@ from django.db import migrations class Migration(migrations.Migration): - dependencies = [ ('extras', '0112_tag_update_object_types'), ] diff --git a/netbox/extras/migrations/0114_customfield_add_comments.py b/netbox/extras/migrations/0114_customfield_add_comments.py index cd85db1ba..ad9e3d46f 100644 --- a/netbox/extras/migrations/0114_customfield_add_comments.py +++ b/netbox/extras/migrations/0114_customfield_add_comments.py @@ -4,7 +4,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('extras', '0113_customfield_rename_object_type'), ] diff --git a/netbox/extras/migrations/0115_convert_dashboard_widgets.py b/netbox/extras/migrations/0115_convert_dashboard_widgets.py index c85c83ecf..28f6eade9 100644 --- a/netbox/extras/migrations/0115_convert_dashboard_widgets.py +++ b/netbox/extras/migrations/0115_convert_dashboard_widgets.py @@ -16,14 +16,10 @@ def update_dashboard_widgets(apps, schema_editor): class Migration(migrations.Migration): - dependencies = [ ('extras', '0114_customfield_add_comments'), ] operations = [ - migrations.RunPython( - code=update_dashboard_widgets, - reverse_code=migrations.RunPython.noop - ), + migrations.RunPython(code=update_dashboard_widgets, reverse_code=migrations.RunPython.noop), ] diff --git a/netbox/extras/migrations/0116_custom_link_button_color.py b/netbox/extras/migrations/0116_custom_link_button_color.py index 665d73017..ff47eab11 100644 --- a/netbox/extras/migrations/0116_custom_link_button_color.py +++ b/netbox/extras/migrations/0116_custom_link_button_color.py @@ -7,7 +7,6 @@ def update_link_buttons(apps, schema_editor): class Migration(migrations.Migration): - dependencies = [ ('extras', '0115_convert_dashboard_widgets'), ] @@ -18,8 +17,5 @@ class Migration(migrations.Migration): name='button_class', field=models.CharField(default='default', max_length=30), ), - migrations.RunPython( - code=update_link_buttons, - reverse_code=migrations.RunPython.noop - ), + migrations.RunPython(code=update_link_buttons, reverse_code=migrations.RunPython.noop), ] diff --git a/netbox/extras/migrations/0117_move_objectchange.py b/netbox/extras/migrations/0117_move_objectchange.py index a69b5a711..62c7255e7 100644 --- a/netbox/extras/migrations/0117_move_objectchange.py +++ b/netbox/extras/migrations/0117_move_objectchange.py @@ -26,7 +26,6 @@ def update_dashboard_widgets(apps, schema_editor): class Migration(migrations.Migration): - dependencies = [ ('extras', '0116_custom_link_button_color'), ('core', '0011_move_objectchange'), @@ -44,81 +43,64 @@ class Migration(migrations.Migration): name='ObjectChange', table='core_objectchange', ), - # Rename PK sequence - migrations.RunSQL( - "ALTER TABLE extras_objectchange_id_seq" - " RENAME TO core_objectchange_id_seq" - ), - + migrations.RunSQL('ALTER TABLE extras_objectchange_id_seq' ' RENAME TO core_objectchange_id_seq'), # Rename indexes. Hashes generated by schema_editor._create_index_name() + migrations.RunSQL('ALTER INDEX extras_objectchange_pkey' ' RENAME TO core_objectchange_pkey'), migrations.RunSQL( - "ALTER INDEX extras_objectchange_pkey" - " RENAME TO core_objectchange_pkey" + 'ALTER INDEX extras_obje_changed_927fe5_idx' + ' RENAME TO core_objectchange_changed_object_type_id_cha_79a9ed1e' ), migrations.RunSQL( - "ALTER INDEX extras_obje_changed_927fe5_idx" - " RENAME TO core_objectchange_changed_object_type_id_cha_79a9ed1e" + 'ALTER INDEX extras_obje_related_bfcdef_idx' + ' RENAME TO core_objectchange_related_object_type_id_rel_a71d604a' ), migrations.RunSQL( - "ALTER INDEX extras_obje_related_bfcdef_idx" - " RENAME TO core_objectchange_related_object_type_id_rel_a71d604a" + 'ALTER INDEX extras_objectchange_changed_object_type_id_b755bb60' + ' RENAME TO core_objectchange_changed_object_type_id_2070ade6' ), migrations.RunSQL( - "ALTER INDEX extras_objectchange_changed_object_type_id_b755bb60" - " RENAME TO core_objectchange_changed_object_type_id_2070ade6" + 'ALTER INDEX extras_objectchange_related_object_type_id_fe6e521f' + ' RENAME TO core_objectchange_related_object_type_id_b80958af' ), migrations.RunSQL( - "ALTER INDEX extras_objectchange_related_object_type_id_fe6e521f" - " RENAME TO core_objectchange_related_object_type_id_b80958af" + 'ALTER INDEX extras_objectchange_request_id_4ae21e90' + ' RENAME TO core_objectchange_request_id_d9d160ac' ), migrations.RunSQL( - "ALTER INDEX extras_objectchange_request_id_4ae21e90" - " RENAME TO core_objectchange_request_id_d9d160ac" + 'ALTER INDEX extras_objectchange_time_224380ea' ' RENAME TO core_objectchange_time_800f60a5' ), migrations.RunSQL( - "ALTER INDEX extras_objectchange_time_224380ea" - " RENAME TO core_objectchange_time_800f60a5" + 'ALTER INDEX extras_objectchange_user_id_7fdf8186' ' RENAME TO core_objectchange_user_id_2b2142be' ), - migrations.RunSQL( - "ALTER INDEX extras_objectchange_user_id_7fdf8186" - " RENAME TO core_objectchange_user_id_2b2142be" - ), - # Rename constraints migrations.RunSQL( - "ALTER TABLE core_objectchange RENAME CONSTRAINT " - "extras_objectchange_changed_object_id_check TO " - "core_objectchange_changed_object_id_check" + 'ALTER TABLE core_objectchange RENAME CONSTRAINT ' + 'extras_objectchange_changed_object_id_check TO ' + 'core_objectchange_changed_object_id_check' ), migrations.RunSQL( - "ALTER TABLE core_objectchange RENAME CONSTRAINT " - "extras_objectchange_related_object_id_check TO " - "core_objectchange_related_object_id_check" + 'ALTER TABLE core_objectchange RENAME CONSTRAINT ' + 'extras_objectchange_related_object_id_check TO ' + 'core_objectchange_related_object_id_check' ), migrations.RunSQL( - "ALTER TABLE core_objectchange RENAME CONSTRAINT " - "extras_objectchange_changed_object_type__b755bb60_fk_django_co TO " - "core_objectchange_changed_object_type_id_2070ade6" + 'ALTER TABLE core_objectchange RENAME CONSTRAINT ' + 'extras_objectchange_changed_object_type__b755bb60_fk_django_co TO ' + 'core_objectchange_changed_object_type_id_2070ade6' ), migrations.RunSQL( - "ALTER TABLE core_objectchange RENAME CONSTRAINT " - "extras_objectchange_related_object_type__fe6e521f_fk_django_co TO " - "core_objectchange_related_object_type_id_b80958af" + 'ALTER TABLE core_objectchange RENAME CONSTRAINT ' + 'extras_objectchange_related_object_type__fe6e521f_fk_django_co TO ' + 'core_objectchange_related_object_type_id_b80958af' ), migrations.RunSQL( - "ALTER TABLE core_objectchange RENAME CONSTRAINT " - "extras_objectchange_user_id_7fdf8186_fk_auth_user_id TO " - "core_objectchange_user_id_2b2142be" + 'ALTER TABLE core_objectchange RENAME CONSTRAINT ' + 'extras_objectchange_user_id_7fdf8186_fk_auth_user_id TO ' + 'core_objectchange_user_id_2b2142be' ), ], ), - migrations.RunPython( - code=update_content_types, - reverse_code=migrations.RunPython.noop - ), - migrations.RunPython( - code=update_dashboard_widgets, - reverse_code=migrations.RunPython.noop - ), + migrations.RunPython(code=update_content_types, reverse_code=migrations.RunPython.noop), + migrations.RunPython(code=update_dashboard_widgets, reverse_code=migrations.RunPython.noop), ] diff --git a/netbox/extras/migrations/0118_customfield_uniqueness.py b/netbox/extras/migrations/0118_customfield_uniqueness.py index b7693aa24..7571e975a 100644 --- a/netbox/extras/migrations/0118_customfield_uniqueness.py +++ b/netbox/extras/migrations/0118_customfield_uniqueness.py @@ -2,7 +2,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('extras', '0117_move_objectchange'), ] diff --git a/netbox/extras/migrations/0119_notifications.py b/netbox/extras/migrations/0119_notifications.py index c266f3b6c..2e6aefd20 100644 --- a/netbox/extras/migrations/0119_notifications.py +++ b/netbox/extras/migrations/0119_notifications.py @@ -4,7 +4,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('contenttypes', '0002_remove_content_type_name'), ('extras', '0118_customfield_uniqueness'), @@ -22,7 +21,10 @@ class Migration(migrations.Migration): ('name', models.CharField(max_length=100, unique=True)), ('description', models.CharField(blank=True, max_length=200)), ('groups', models.ManyToManyField(blank=True, related_name='notification_groups', to='users.group')), - ('users', models.ManyToManyField(blank=True, related_name='notification_groups', to=settings.AUTH_USER_MODEL)), + ( + 'users', + models.ManyToManyField(blank=True, related_name='notification_groups', to=settings.AUTH_USER_MODEL), + ), ], options={ 'verbose_name': 'notification group', @@ -36,8 +38,18 @@ class Migration(migrations.Migration): ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), ('created', models.DateTimeField(auto_now_add=True)), ('object_id', models.PositiveBigIntegerField()), - ('object_type', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='contenttypes.contenttype')), - ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='subscriptions', to=settings.AUTH_USER_MODEL)), + ( + 'object_type', + models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='contenttypes.contenttype'), + ), + ( + 'user', + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name='subscriptions', + to=settings.AUTH_USER_MODEL, + ), + ), ], options={ 'verbose_name': 'subscription', @@ -53,9 +65,19 @@ class Migration(migrations.Migration): ('read', models.DateTimeField(blank=True, null=True)), ('object_id', models.PositiveBigIntegerField()), ('event_type', models.CharField(max_length=50)), - ('object_type', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='contenttypes.contenttype')), + ( + 'object_type', + models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='contenttypes.contenttype'), + ), ('object_repr', models.CharField(editable=False, max_length=200)), - ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='notifications', to=settings.AUTH_USER_MODEL)), + ( + 'user', + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name='notifications', + to=settings.AUTH_USER_MODEL, + ), + ), ], options={ 'verbose_name': 'notification', @@ -66,7 +88,9 @@ class Migration(migrations.Migration): ), migrations.AddConstraint( model_name='notification', - constraint=models.UniqueConstraint(fields=('object_type', 'object_id', 'user'), name='extras_notification_unique_per_object_and_user'), + constraint=models.UniqueConstraint( + fields=('object_type', 'object_id', 'user'), name='extras_notification_unique_per_object_and_user' + ), ), migrations.AddIndex( model_name='subscription', @@ -74,6 +98,8 @@ class Migration(migrations.Migration): ), migrations.AddConstraint( model_name='subscription', - constraint=models.UniqueConstraint(fields=('object_type', 'object_id', 'user'), name='extras_subscription_unique_per_object_and_user'), + constraint=models.UniqueConstraint( + fields=('object_type', 'object_id', 'user'), name='extras_subscription_unique_per_object_and_user' + ), ), ] diff --git a/netbox/extras/migrations/0120_eventrule_event_types.py b/netbox/extras/migrations/0120_eventrule_event_types.py index f62c83e4c..2bcc0a4e6 100644 --- a/netbox/extras/migrations/0120_eventrule_event_types.py +++ b/netbox/extras/migrations/0120_eventrule_event_types.py @@ -26,7 +26,6 @@ def set_event_types(apps, schema_editor): class Migration(migrations.Migration): - dependencies = [ ('extras', '0119_notifications'), ] @@ -36,16 +35,10 @@ class Migration(migrations.Migration): model_name='eventrule', name='event_types', field=django.contrib.postgres.fields.ArrayField( - base_field=models.CharField(max_length=50), - blank=True, - null=True, - size=None + base_field=models.CharField(max_length=50), blank=True, null=True, size=None ), ), - migrations.RunPython( - code=set_event_types, - reverse_code=migrations.RunPython.noop - ), + migrations.RunPython(code=set_event_types, reverse_code=migrations.RunPython.noop), migrations.AlterField( model_name='eventrule', name='event_types', diff --git a/netbox/extras/migrations/0121_customfield_related_object_filter.py b/netbox/extras/migrations/0121_customfield_related_object_filter.py index d6e41fd7d..10eecd6cc 100644 --- a/netbox/extras/migrations/0121_customfield_related_object_filter.py +++ b/netbox/extras/migrations/0121_customfield_related_object_filter.py @@ -2,7 +2,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('extras', '0120_eventrule_event_types'), ] diff --git a/netbox/extras/migrations/0122_charfield_null_choices.py b/netbox/extras/migrations/0122_charfield_null_choices.py new file mode 100644 index 000000000..a32051cb1 --- /dev/null +++ b/netbox/extras/migrations/0122_charfield_null_choices.py @@ -0,0 +1,25 @@ +from django.db import migrations, models + + +def set_null_values(apps, schema_editor): + """ + Replace empty strings with null values. + """ + CustomFieldChoiceSet = apps.get_model('extras', 'CustomFieldChoiceSet') + + CustomFieldChoiceSet.objects.filter(base_choices='').update(base_choices=None) + + +class Migration(migrations.Migration): + dependencies = [ + ('extras', '0121_customfield_related_object_filter'), + ] + + operations = [ + migrations.AlterField( + model_name='customfieldchoiceset', + name='base_choices', + field=models.CharField(blank=True, max_length=50, null=True), + ), + migrations.RunPython(code=set_null_values, reverse_code=migrations.RunPython.noop), + ] diff --git a/netbox/extras/models/customfields.py b/netbox/extras/models/customfields.py index 8b7fc0cb6..e1ceaf7a6 100644 --- a/netbox/extras/models/customfields.py +++ b/netbox/extras/models/customfields.py @@ -760,6 +760,7 @@ class CustomFieldChoiceSet(CloningMixin, ExportTemplatesMixin, ChangeLoggedModel max_length=50, choices=CustomFieldChoiceSetBaseChoices, blank=True, + null=True, help_text=_('Base set of predefined choices (optional)') ) extra_choices = ArrayField( diff --git a/netbox/extras/models/models.py b/netbox/extras/models/models.py index d8a274c89..d3e443b14 100644 --- a/netbox/extras/models/models.py +++ b/netbox/extras/models/models.py @@ -704,7 +704,10 @@ class JournalEntry(CustomFieldsMixin, CustomLinksMixin, TagsMixin, ExportTemplat def __str__(self): created = timezone.localtime(self.created) - return f"{created.date().isoformat()} {created.time().isoformat(timespec='minutes')} ({self.get_kind_display()})" + return ( + f"{created.date().isoformat()} {created.time().isoformat(timespec='minutes')} " + f"({self.get_kind_display()})" + ) def get_absolute_url(self): return reverse('extras:journalentry', args=[self.pk]) diff --git a/netbox/extras/models/staging.py b/netbox/extras/models/staging.py index b944a6fb9..68d37de7f 100644 --- a/netbox/extras/models/staging.py +++ b/netbox/extras/models/staging.py @@ -1,4 +1,5 @@ import logging +import warnings from django.contrib.contenttypes.fields import GenericForeignKey from django.db import models, transaction @@ -44,6 +45,13 @@ class Branch(ChangeLoggedModel): verbose_name = _('branch') verbose_name_plural = _('branches') + def __init__(self, *args, **kwargs): + warnings.warn( + 'The staged changes functionality has been deprecated and will be removed in a future release.', + DeprecationWarning + ) + super().__init__(*args, **kwargs) + def __str__(self): return f'{self.name} ({self.pk})' @@ -97,6 +105,13 @@ class StagedChange(CustomValidationMixin, EventRulesMixin, models.Model): verbose_name = _('staged change') verbose_name_plural = _('staged changes') + def __init__(self, *args, **kwargs): + warnings.warn( + 'The staged changes functionality has been deprecated and will be removed in a future release.', + DeprecationWarning + ) + super().__init__(*args, **kwargs) + def __str__(self): action = self.get_action_display() app_label, model_name = self.object_type.natural_key() 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) diff --git a/netbox/extras/tests/test_custom_validation.py b/netbox/extras/tests/test_custom_validation.py index 652bc241b..6eb90e5b0 100644 --- a/netbox/extras/tests/test_custom_validation.py +++ b/netbox/extras/tests/test_custom_validation.py @@ -191,7 +191,7 @@ class BulkImportCustomValidationTest(ModelViewTestCase): # Attempt to import providers without tags request = { - 'path': self._get_url('import'), + 'path': self._get_url('bulk_import'), 'data': post_data(data), } response = self.client.post(**request) @@ -207,7 +207,7 @@ class BulkImportCustomValidationTest(ModelViewTestCase): ) data['data'] = '\n'.join(csv_data) request = { - 'path': self._get_url('import'), + 'path': self._get_url('bulk_import'), 'data': post_data(data), } response = self.client.post(**request) diff --git a/netbox/extras/tests/test_customfields.py b/netbox/extras/tests/test_customfields.py index 2bc9b5acc..8bae8dfc9 100644 --- a/netbox/extras/tests/test_customfields.py +++ b/netbox/extras/tests/test_customfields.py @@ -637,15 +637,51 @@ class CustomFieldAPITest(APITestCase): ) custom_fields = ( - CustomField(type=CustomFieldTypeChoices.TYPE_TEXT, name='text_field', default='foo'), - CustomField(type=CustomFieldTypeChoices.TYPE_LONGTEXT, name='longtext_field', default='ABC'), - CustomField(type=CustomFieldTypeChoices.TYPE_INTEGER, name='integer_field', default=123), - CustomField(type=CustomFieldTypeChoices.TYPE_DECIMAL, name='decimal_field', default=123.45), - CustomField(type=CustomFieldTypeChoices.TYPE_BOOLEAN, name='boolean_field', default=False), - CustomField(type=CustomFieldTypeChoices.TYPE_DATE, name='date_field', default='2020-01-01'), - CustomField(type=CustomFieldTypeChoices.TYPE_DATETIME, name='datetime_field', default='2020-01-01T01:23:45'), - CustomField(type=CustomFieldTypeChoices.TYPE_URL, name='url_field', default='http://example.com/1'), - CustomField(type=CustomFieldTypeChoices.TYPE_JSON, name='json_field', default='{"x": "y"}'), + CustomField( + type=CustomFieldTypeChoices.TYPE_TEXT, + name='text_field', + default='foo' + ), + CustomField( + type=CustomFieldTypeChoices.TYPE_LONGTEXT, + name='longtext_field', + default='ABC' + ), + CustomField( + type=CustomFieldTypeChoices.TYPE_INTEGER, + name='integer_field', + default=123 + ), + CustomField( + type=CustomFieldTypeChoices.TYPE_DECIMAL, + name='decimal_field', + default=123.45 + ), + CustomField( + type=CustomFieldTypeChoices.TYPE_BOOLEAN, + name='boolean_field', + default=False + ), + CustomField( + type=CustomFieldTypeChoices.TYPE_DATE, + name='date_field', + default='2020-01-01' + ), + CustomField( + type=CustomFieldTypeChoices.TYPE_DATETIME, + name='datetime_field', + default='2020-01-01T01:23:45' + ), + CustomField( + type=CustomFieldTypeChoices.TYPE_URL, + name='url_field', + default='http://example.com/1' + ), + CustomField( + type=CustomFieldTypeChoices.TYPE_JSON, + name='json_field', + default='{"x": "y"}' + ), CustomField( type=CustomFieldTypeChoices.TYPE_SELECT, name='select_field', @@ -656,7 +692,7 @@ class CustomFieldAPITest(APITestCase): type=CustomFieldTypeChoices.TYPE_MULTISELECT, name='multiselect_field', default=['foo'], - choice_set=choice_set + choice_set=choice_set, ), CustomField( type=CustomFieldTypeChoices.TYPE_OBJECT, @@ -1273,14 +1309,23 @@ class CustomFieldImportTest(TestCase): Import a Site in CSV format, including a value for each CustomField. """ data = ( - ('name', 'slug', 'status', 'cf_text', 'cf_longtext', 'cf_integer', 'cf_decimal', 'cf_boolean', 'cf_date', 'cf_datetime', 'cf_url', 'cf_json', 'cf_select', 'cf_multiselect'), - ('Site 1', 'site-1', 'active', 'ABC', 'Foo', '123', '123.45', 'True', '2020-01-01', '2020-01-01 12:00:00', 'http://example.com/1', '{"foo": 123}', 'a', '"a,b"'), - ('Site 2', 'site-2', 'active', 'DEF', 'Bar', '456', '456.78', 'False', '2020-01-02', '2020-01-02 12:00:00', 'http://example.com/2', '{"bar": 456}', 'b', '"b,c"'), + ( + 'name', 'slug', 'status', 'cf_text', 'cf_longtext', 'cf_integer', 'cf_decimal', 'cf_boolean', 'cf_date', + 'cf_datetime', 'cf_url', 'cf_json', 'cf_select', 'cf_multiselect', + ), + ( + 'Site 1', 'site-1', 'active', 'ABC', 'Foo', '123', '123.45', 'True', '2020-01-01', + '2020-01-01 12:00:00', 'http://example.com/1', '{"foo": 123}', 'a', '"a,b"', + ), + ( + 'Site 2', 'site-2', 'active', 'DEF', 'Bar', '456', '456.78', 'False', '2020-01-02', + '2020-01-02 12:00:00', 'http://example.com/2', '{"bar": 456}', 'b', '"b,c"', + ), ('Site 3', 'site-3', 'active', '', '', '', '', '', '', '', '', '', '', ''), ) csv_data = '\n'.join(','.join(row) for row in data) - response = self.client.post(reverse('dcim:site_import'), { + response = self.client.post(reverse('dcim:site_bulk_import'), { 'data': csv_data, 'format': ImportFormatChoices.CSV, 'csv_delimiter': CSVDelimiterChoices.AUTO, @@ -1616,7 +1661,10 @@ class CustomFieldModelFilterTest(TestCase): self.assertEqual(self.filterset({'cf_cf6__lte': ['2016-06-27']}, self.queryset).qs.count(), 2) def test_filter_url_strict(self): - self.assertEqual(self.filterset({'cf_cf7': ['http://a.example.com', 'http://b.example.com']}, self.queryset).qs.count(), 2) + self.assertEqual( + self.filterset({'cf_cf7': ['http://a.example.com', 'http://b.example.com']}, self.queryset).qs.count(), + 2 + ) self.assertEqual(self.filterset({'cf_cf7__n': ['http://b.example.com']}, self.queryset).qs.count(), 2) self.assertEqual(self.filterset({'cf_cf7__ic': ['b']}, self.queryset).qs.count(), 1) self.assertEqual(self.filterset({'cf_cf7__nic': ['b']}, self.queryset).qs.count(), 2) @@ -1640,9 +1688,18 @@ class CustomFieldModelFilterTest(TestCase): def test_filter_object(self): manufacturer_ids = Manufacturer.objects.values_list('id', flat=True) - self.assertEqual(self.filterset({'cf_cf11': [manufacturer_ids[0], manufacturer_ids[1]]}, self.queryset).qs.count(), 2) + self.assertEqual( + self.filterset({'cf_cf11': [manufacturer_ids[0], manufacturer_ids[1]]}, self.queryset).qs.count(), + 2 + ) def test_filter_multiobject(self): manufacturer_ids = Manufacturer.objects.values_list('id', flat=True) - self.assertEqual(self.filterset({'cf_cf12': [manufacturer_ids[0], manufacturer_ids[1]]}, self.queryset).qs.count(), 2) - self.assertEqual(self.filterset({'cf_cf12': [manufacturer_ids[3]]}, self.queryset).qs.count(), 3) + self.assertEqual( + self.filterset({'cf_cf12': [manufacturer_ids[0], manufacturer_ids[1]]}, self.queryset).qs.count(), + 2 + ) + self.assertEqual( + self.filterset({'cf_cf12': [manufacturer_ids[3]]}, self.queryset).qs.count(), + 3 + ) diff --git a/netbox/extras/tests/test_event_rules.py b/netbox/extras/tests/test_event_rules.py index 7f7b0b81f..2565e5bde 100644 --- a/netbox/extras/tests/test_event_rules.py +++ b/netbox/extras/tests/test_event_rules.py @@ -50,21 +50,24 @@ class EventRuleTest(APITestCase): event_types=[OBJECT_CREATED], action_type=EventRuleActionChoices.WEBHOOK, action_object_type=webhook_type, - action_object_id=webhooks[0].id + action_object_id=webhooks[0].id, + action_data={"foo": 1}, ), EventRule( name='Event Rule 2', event_types=[OBJECT_UPDATED], action_type=EventRuleActionChoices.WEBHOOK, action_object_type=webhook_type, - action_object_id=webhooks[0].id + action_object_id=webhooks[0].id, + action_data={"foo": 2}, ), EventRule( name='Event Rule 3', event_types=[OBJECT_DELETED], action_type=EventRuleActionChoices.WEBHOOK, action_object_type=webhook_type, - action_object_id=webhooks[0].id + action_object_id=webhooks[0].id, + action_data={"foo": 3}, ), )) for event_rule in event_rules: @@ -134,6 +137,7 @@ class EventRuleTest(APITestCase): self.assertEqual(job.kwargs['event_type'], OBJECT_CREATED) self.assertEqual(job.kwargs['model_name'], 'site') self.assertEqual(job.kwargs['data']['id'], response.data['id']) + self.assertEqual(job.kwargs['data']['foo'], 1) self.assertEqual(len(job.kwargs['data']['tags']), len(response.data['tags'])) self.assertEqual(job.kwargs['snapshots']['postchange']['name'], 'Site 1') self.assertEqual(job.kwargs['snapshots']['postchange']['tags'], ['Bar', 'Foo']) @@ -184,6 +188,7 @@ class EventRuleTest(APITestCase): self.assertEqual(job.kwargs['event_type'], OBJECT_CREATED) self.assertEqual(job.kwargs['model_name'], 'site') self.assertEqual(job.kwargs['data']['id'], response.data[i]['id']) + self.assertEqual(job.kwargs['data']['foo'], 1) self.assertEqual(len(job.kwargs['data']['tags']), len(response.data[i]['tags'])) self.assertEqual(job.kwargs['snapshots']['postchange']['name'], response.data[i]['name']) self.assertEqual(job.kwargs['snapshots']['postchange']['tags'], ['Bar', 'Foo']) @@ -215,6 +220,7 @@ class EventRuleTest(APITestCase): self.assertEqual(job.kwargs['event_type'], OBJECT_UPDATED) self.assertEqual(job.kwargs['model_name'], 'site') self.assertEqual(job.kwargs['data']['id'], site.pk) + self.assertEqual(job.kwargs['data']['foo'], 2) self.assertEqual(len(job.kwargs['data']['tags']), len(response.data['tags'])) self.assertEqual(job.kwargs['snapshots']['prechange']['name'], 'Site 1') self.assertEqual(job.kwargs['snapshots']['prechange']['tags'], ['Bar', 'Foo']) @@ -271,6 +277,7 @@ class EventRuleTest(APITestCase): self.assertEqual(job.kwargs['event_type'], OBJECT_UPDATED) self.assertEqual(job.kwargs['model_name'], 'site') self.assertEqual(job.kwargs['data']['id'], data[i]['id']) + self.assertEqual(job.kwargs['data']['foo'], 2) self.assertEqual(len(job.kwargs['data']['tags']), len(response.data[i]['tags'])) self.assertEqual(job.kwargs['snapshots']['prechange']['name'], sites[i].name) self.assertEqual(job.kwargs['snapshots']['prechange']['tags'], ['Bar', 'Foo']) @@ -297,6 +304,7 @@ class EventRuleTest(APITestCase): self.assertEqual(job.kwargs['event_type'], OBJECT_DELETED) self.assertEqual(job.kwargs['model_name'], 'site') self.assertEqual(job.kwargs['data']['id'], site.pk) + self.assertEqual(job.kwargs['data']['foo'], 3) self.assertEqual(job.kwargs['snapshots']['prechange']['name'], 'Site 1') self.assertEqual(job.kwargs['snapshots']['prechange']['tags'], ['Bar', 'Foo']) @@ -330,6 +338,7 @@ class EventRuleTest(APITestCase): self.assertEqual(job.kwargs['event_type'], OBJECT_DELETED) self.assertEqual(job.kwargs['model_name'], 'site') self.assertEqual(job.kwargs['data']['id'], sites[i].pk) + self.assertEqual(job.kwargs['data']['foo'], 3) self.assertEqual(job.kwargs['snapshots']['prechange']['name'], sites[i].name) self.assertEqual(job.kwargs['snapshots']['prechange']['tags'], ['Bar', 'Foo']) @@ -358,6 +367,7 @@ class EventRuleTest(APITestCase): self.assertEqual(body['username'], 'testuser') self.assertEqual(body['request_id'], str(request_id)) self.assertEqual(body['data']['name'], 'Site 1') + self.assertEqual(body['data']['foo'], 1) return HttpResponse() diff --git a/netbox/extras/tests/test_filtersets.py b/netbox/extras/tests/test_filtersets.py index 9048d5fd9..cf914e665 100644 --- a/netbox/extras/tests/test_filtersets.py +++ b/netbox/extras/tests/test_filtersets.py @@ -1135,6 +1135,7 @@ class TagTestCase(TestCase, ChangeLoggedFilterSetTests): 'l2vpn', 'l2vpntermination', 'location', + 'macaddress', 'manufacturer', 'module', 'modulebay', @@ -1167,11 +1168,16 @@ class TagTestCase(TestCase, ChangeLoggedFilterSetTests): 'tunnelgroup', 'tunneltermination', 'virtualchassis', + 'virtualcircuit', + 'virtualcircuittermination', + 'virtualcircuittype', 'virtualdevicecontext', 'virtualdisk', 'virtualmachine', 'vlan', 'vlangroup', + 'vlantranslationpolicy', + 'vlantranslationrule', 'vminterface', 'vrf', 'webhook', diff --git a/netbox/extras/tests/test_models.py b/netbox/extras/tests/test_models.py index 188a06a3f..c90390dd1 100644 --- a/netbox/extras/tests/test_models.py +++ b/netbox/extras/tests/test_models.py @@ -274,7 +274,7 @@ class ConfigContextTest(TestCase): name="Cluster", group=cluster_group, type=cluster_type, - site=site, + scope=site, ) region_context = ConfigContext.objects.create( @@ -366,7 +366,7 @@ class ConfigContextTest(TestCase): """ site = Site.objects.first() cluster_type = ClusterType.objects.create(name="Cluster Type") - cluster = Cluster.objects.create(name="Cluster", type=cluster_type, site=site) + cluster = Cluster.objects.create(name="Cluster", type=cluster_type, scope=site) vm_role = DeviceRole.objects.first() # Create a ConfigContext associated with the site diff --git a/netbox/extras/urls.py b/netbox/extras/urls.py index b13af1db9..32633493f 100644 --- a/netbox/extras/urls.py +++ b/netbox/extras/urls.py @@ -7,128 +7,68 @@ from utilities.urls import get_model_urls app_name = 'extras' urlpatterns = [ - # Custom fields - path('custom-fields/', views.CustomFieldListView.as_view(), name='customfield_list'), - path('custom-fields/add/', views.CustomFieldEditView.as_view(), name='customfield_add'), - path('custom-fields/import/', views.CustomFieldBulkImportView.as_view(), name='customfield_import'), - path('custom-fields/edit/', views.CustomFieldBulkEditView.as_view(), name='customfield_bulk_edit'), - path('custom-fields/delete/', views.CustomFieldBulkDeleteView.as_view(), name='customfield_bulk_delete'), + path('custom-fields/', include(get_model_urls('extras', 'customfield', detail=False))), path('custom-fields//', include(get_model_urls('extras', 'customfield'))), - # Custom field choices - path('custom-field-choices/', views.CustomFieldChoiceSetListView.as_view(), name='customfieldchoiceset_list'), - path('custom-field-choices/add/', views.CustomFieldChoiceSetEditView.as_view(), name='customfieldchoiceset_add'), - path('custom-field-choices/import/', views.CustomFieldChoiceSetBulkImportView.as_view(), name='customfieldchoiceset_import'), - path('custom-field-choices/edit/', views.CustomFieldChoiceSetBulkEditView.as_view(), name='customfieldchoiceset_bulk_edit'), - path('custom-field-choices/delete/', views.CustomFieldChoiceSetBulkDeleteView.as_view(), name='customfieldchoiceset_bulk_delete'), + path('custom-field-choices/', include(get_model_urls('extras', 'customfieldchoiceset', detail=False))), path('custom-field-choices//', include(get_model_urls('extras', 'customfieldchoiceset'))), - # Custom links - path('custom-links/', views.CustomLinkListView.as_view(), name='customlink_list'), - path('custom-links/add/', views.CustomLinkEditView.as_view(), name='customlink_add'), - path('custom-links/import/', views.CustomLinkBulkImportView.as_view(), name='customlink_import'), - path('custom-links/edit/', views.CustomLinkBulkEditView.as_view(), name='customlink_bulk_edit'), - path('custom-links/delete/', views.CustomLinkBulkDeleteView.as_view(), name='customlink_bulk_delete'), + path('custom-links/', include(get_model_urls('extras', 'customlink', detail=False))), path('custom-links//', include(get_model_urls('extras', 'customlink'))), - # Export templates - path('export-templates/', views.ExportTemplateListView.as_view(), name='exporttemplate_list'), - path('export-templates/add/', views.ExportTemplateEditView.as_view(), name='exporttemplate_add'), - path('export-templates/import/', views.ExportTemplateBulkImportView.as_view(), name='exporttemplate_import'), - path('export-templates/edit/', views.ExportTemplateBulkEditView.as_view(), name='exporttemplate_bulk_edit'), - path('export-templates/delete/', views.ExportTemplateBulkDeleteView.as_view(), name='exporttemplate_bulk_delete'), - path('export-templates/sync/', views.ExportTemplateBulkSyncDataView.as_view(), name='exporttemplate_bulk_sync'), + path('export-templates/', include(get_model_urls('extras', 'exporttemplate', detail=False))), path('export-templates//', include(get_model_urls('extras', 'exporttemplate'))), - # Saved filters - path('saved-filters/', views.SavedFilterListView.as_view(), name='savedfilter_list'), - path('saved-filters/add/', views.SavedFilterEditView.as_view(), name='savedfilter_add'), - path('saved-filters/import/', views.SavedFilterBulkImportView.as_view(), name='savedfilter_import'), - path('saved-filters/edit/', views.SavedFilterBulkEditView.as_view(), name='savedfilter_bulk_edit'), - path('saved-filters/delete/', views.SavedFilterBulkDeleteView.as_view(), name='savedfilter_bulk_delete'), + path('saved-filters/', include(get_model_urls('extras', 'savedfilter', detail=False))), path('saved-filters//', include(get_model_urls('extras', 'savedfilter'))), - # Bookmarks - path('bookmarks/add/', views.BookmarkCreateView.as_view(), name='bookmark_add'), - path('bookmarks/delete/', views.BookmarkBulkDeleteView.as_view(), name='bookmark_bulk_delete'), + path('bookmarks/', include(get_model_urls('extras', 'bookmark', detail=False))), path('bookmarks//', include(get_model_urls('extras', 'bookmark'))), - # Notification groups - path('notification-groups/', views.NotificationGroupListView.as_view(), name='notificationgroup_list'), - path('notification-groups/add/', views.NotificationGroupEditView.as_view(), name='notificationgroup_add'), - path('notification-groups/import/', views.NotificationGroupBulkImportView.as_view(), name='notificationgroup_import'), - path('notification-groups/edit/', views.NotificationGroupBulkEditView.as_view(), name='notificationgroup_bulk_edit'), - path('notification-groups/delete/', views.NotificationGroupBulkDeleteView.as_view(), name='notificationgroup_bulk_delete'), + path('notification-groups/', include(get_model_urls('extras', 'notificationgroup', detail=False))), path('notification-groups//', include(get_model_urls('extras', 'notificationgroup'))), - # Notifications path('notifications/', views.NotificationsView.as_view(), name='notifications'), - path('notifications/delete/', views.NotificationBulkDeleteView.as_view(), name='notification_bulk_delete'), + path('notifications/', include(get_model_urls('extras', 'notification', detail=False))), path('notifications//', include(get_model_urls('extras', 'notification'))), - # Subscriptions - path('subscriptions/add/', views.SubscriptionCreateView.as_view(), name='subscription_add'), - path('subscriptions/delete/', views.SubscriptionBulkDeleteView.as_view(), name='subscription_bulk_delete'), + path('subscriptions/', include(get_model_urls('extras', 'subscription', detail=False))), path('subscriptions//', include(get_model_urls('extras', 'subscription'))), - # Webhooks - path('webhooks/', views.WebhookListView.as_view(), name='webhook_list'), - path('webhooks/add/', views.WebhookEditView.as_view(), name='webhook_add'), - path('webhooks/import/', views.WebhookBulkImportView.as_view(), name='webhook_import'), - path('webhooks/edit/', views.WebhookBulkEditView.as_view(), name='webhook_bulk_edit'), - path('webhooks/delete/', views.WebhookBulkDeleteView.as_view(), name='webhook_bulk_delete'), + path('webhooks/', include(get_model_urls('extras', 'webhook', detail=False))), path('webhooks//', include(get_model_urls('extras', 'webhook'))), - # Event rules - path('event-rules/', views.EventRuleListView.as_view(), name='eventrule_list'), - path('event-rules/add/', views.EventRuleEditView.as_view(), name='eventrule_add'), - path('event-rules/import/', views.EventRuleBulkImportView.as_view(), name='eventrule_import'), - path('event-rules/edit/', views.EventRuleBulkEditView.as_view(), name='eventrule_bulk_edit'), - path('event-rules/delete/', views.EventRuleBulkDeleteView.as_view(), name='eventrule_bulk_delete'), + path('event-rules/', include(get_model_urls('extras', 'eventrule', detail=False))), path('event-rules//', include(get_model_urls('extras', 'eventrule'))), - # Tags - path('tags/', views.TagListView.as_view(), name='tag_list'), - path('tags/add/', views.TagEditView.as_view(), name='tag_add'), - path('tags/import/', views.TagBulkImportView.as_view(), name='tag_import'), - path('tags/edit/', views.TagBulkEditView.as_view(), name='tag_bulk_edit'), - path('tags/delete/', views.TagBulkDeleteView.as_view(), name='tag_bulk_delete'), + path('tags/', include(get_model_urls('extras', 'tag', detail=False))), path('tags//', include(get_model_urls('extras', 'tag'))), - # Config contexts - path('config-contexts/', views.ConfigContextListView.as_view(), name='configcontext_list'), - path('config-contexts/add/', views.ConfigContextEditView.as_view(), name='configcontext_add'), - path('config-contexts/edit/', views.ConfigContextBulkEditView.as_view(), name='configcontext_bulk_edit'), - path('config-contexts/delete/', views.ConfigContextBulkDeleteView.as_view(), name='configcontext_bulk_delete'), - path('config-contexts/sync/', views.ConfigContextBulkSyncDataView.as_view(), name='configcontext_bulk_sync'), + path('config-contexts/', include(get_model_urls('extras', 'configcontext', detail=False))), path('config-contexts//', include(get_model_urls('extras', 'configcontext'))), - # Config templates - path('config-templates/', views.ConfigTemplateListView.as_view(), name='configtemplate_list'), - path('config-templates/add/', views.ConfigTemplateEditView.as_view(), name='configtemplate_add'), - path('config-templates/edit/', views.ConfigTemplateBulkEditView.as_view(), name='configtemplate_bulk_edit'), - path('config-templates/delete/', views.ConfigTemplateBulkDeleteView.as_view(), name='configtemplate_bulk_delete'), - path('config-templates/sync/', views.ConfigTemplateBulkSyncDataView.as_view(), name='configtemplate_bulk_sync'), + path('config-templates/', include(get_model_urls('extras', 'configtemplate', detail=False))), path('config-templates//', include(get_model_urls('extras', 'configtemplate'))), - # Image attachments - path('image-attachments/', views.ImageAttachmentListView.as_view(), name='imageattachment_list'), - path('image-attachments/add/', views.ImageAttachmentEditView.as_view(), name='imageattachment_add'), + path('image-attachments/', include(get_model_urls('extras', 'imageattachment', detail=False))), path('image-attachments//', include(get_model_urls('extras', 'imageattachment'))), - # Journal entries - path('journal-entries/', views.JournalEntryListView.as_view(), name='journalentry_list'), - path('journal-entries/add/', views.JournalEntryEditView.as_view(), name='journalentry_add'), - path('journal-entries/edit/', views.JournalEntryBulkEditView.as_view(), name='journalentry_bulk_edit'), - path('journal-entries/delete/', views.JournalEntryBulkDeleteView.as_view(), name='journalentry_bulk_delete'), - path('journal-entries/import/', views.JournalEntryBulkImportView.as_view(), name='journalentry_import'), + path('journal-entries/', include(get_model_urls('extras', 'journalentry', detail=False))), path('journal-entries//', include(get_model_urls('extras', 'journalentry'))), # User dashboard path('dashboard/reset/', views.DashboardResetView.as_view(), name='dashboard_reset'), path('dashboard/widgets/add/', views.DashboardWidgetAddView.as_view(), name='dashboardwidget_add'), - path('dashboard/widgets//configure/', views.DashboardWidgetConfigView.as_view(), name='dashboardwidget_config'), - path('dashboard/widgets//delete/', views.DashboardWidgetDeleteView.as_view(), name='dashboardwidget_delete'), + path( + 'dashboard/widgets//configure/', + views.DashboardWidgetConfigView.as_view(), + name='dashboardwidget_config' + ), + path( + 'dashboard/widgets//delete/', + views.DashboardWidgetDeleteView.as_view(), + name='dashboardwidget_delete' + ), # Scripts path('scripts/', views.ScriptListView.as_view(), name='script_list'), diff --git a/netbox/extras/views.py b/netbox/extras/views.py index 0d98b1324..9cb9dd54a 100644 --- a/netbox/extras/views.py +++ b/netbox/extras/views.py @@ -42,6 +42,7 @@ from .tables import ReportResultsTable, ScriptResultsTable # Custom fields # +@register_model_view(CustomField, 'list', path='', detail=False) class CustomFieldListView(generic.ObjectListView): queryset = CustomField.objects.select_related('choice_set') filterset = filtersets.CustomFieldFilterSet @@ -69,6 +70,7 @@ class CustomFieldView(generic.ObjectView): } +@register_model_view(CustomField, 'add', detail=False) @register_model_view(CustomField, 'edit') class CustomFieldEditView(generic.ObjectEditView): queryset = CustomField.objects.select_related('choice_set') @@ -80,11 +82,13 @@ class CustomFieldDeleteView(generic.ObjectDeleteView): queryset = CustomField.objects.select_related('choice_set') +@register_model_view(CustomField, 'bulk_import', detail=False) class CustomFieldBulkImportView(generic.BulkImportView): queryset = CustomField.objects.select_related('choice_set') model_form = forms.CustomFieldImportForm +@register_model_view(CustomField, 'bulk_edit', path='edit', detail=False) class CustomFieldBulkEditView(generic.BulkEditView): queryset = CustomField.objects.select_related('choice_set') filterset = filtersets.CustomFieldFilterSet @@ -92,6 +96,7 @@ class CustomFieldBulkEditView(generic.BulkEditView): form = forms.CustomFieldBulkEditForm +@register_model_view(CustomField, 'bulk_delete', path='delete', detail=False) class CustomFieldBulkDeleteView(generic.BulkDeleteView): queryset = CustomField.objects.select_related('choice_set') filterset = filtersets.CustomFieldFilterSet @@ -102,6 +107,7 @@ class CustomFieldBulkDeleteView(generic.BulkDeleteView): # Custom field choices # +@register_model_view(CustomFieldChoiceSet, 'list', path='', detail=False) class CustomFieldChoiceSetListView(generic.ObjectListView): queryset = CustomFieldChoiceSet.objects.all() filterset = filtersets.CustomFieldChoiceSetFilterSet @@ -133,6 +139,7 @@ class CustomFieldChoiceSetView(generic.ObjectView): } +@register_model_view(CustomFieldChoiceSet, 'add', detail=False) @register_model_view(CustomFieldChoiceSet, 'edit') class CustomFieldChoiceSetEditView(generic.ObjectEditView): queryset = CustomFieldChoiceSet.objects.all() @@ -144,11 +151,13 @@ class CustomFieldChoiceSetDeleteView(generic.ObjectDeleteView): queryset = CustomFieldChoiceSet.objects.all() +@register_model_view(CustomFieldChoiceSet, 'bulk_import', detail=False) class CustomFieldChoiceSetBulkImportView(generic.BulkImportView): queryset = CustomFieldChoiceSet.objects.all() model_form = forms.CustomFieldChoiceSetImportForm +@register_model_view(CustomFieldChoiceSet, 'bulk_edit', path='edit', detail=False) class CustomFieldChoiceSetBulkEditView(generic.BulkEditView): queryset = CustomFieldChoiceSet.objects.all() filterset = filtersets.CustomFieldChoiceSetFilterSet @@ -156,6 +165,7 @@ class CustomFieldChoiceSetBulkEditView(generic.BulkEditView): form = forms.CustomFieldChoiceSetBulkEditForm +@register_model_view(CustomFieldChoiceSet, 'bulk_delete', path='delete', detail=False) class CustomFieldChoiceSetBulkDeleteView(generic.BulkDeleteView): queryset = CustomFieldChoiceSet.objects.all() filterset = filtersets.CustomFieldChoiceSetFilterSet @@ -166,6 +176,7 @@ class CustomFieldChoiceSetBulkDeleteView(generic.BulkDeleteView): # Custom links # +@register_model_view(CustomLink, 'list', path='', detail=False) class CustomLinkListView(generic.ObjectListView): queryset = CustomLink.objects.all() filterset = filtersets.CustomLinkFilterSet @@ -178,6 +189,7 @@ class CustomLinkView(generic.ObjectView): queryset = CustomLink.objects.all() +@register_model_view(CustomLink, 'add', detail=False) @register_model_view(CustomLink, 'edit') class CustomLinkEditView(generic.ObjectEditView): queryset = CustomLink.objects.all() @@ -189,11 +201,13 @@ class CustomLinkDeleteView(generic.ObjectDeleteView): queryset = CustomLink.objects.all() +@register_model_view(CustomLink, 'bulk_import', detail=False) class CustomLinkBulkImportView(generic.BulkImportView): queryset = CustomLink.objects.all() model_form = forms.CustomLinkImportForm +@register_model_view(CustomLink, 'bulk_edit', path='edit', detail=False) class CustomLinkBulkEditView(generic.BulkEditView): queryset = CustomLink.objects.all() filterset = filtersets.CustomLinkFilterSet @@ -201,6 +215,7 @@ class CustomLinkBulkEditView(generic.BulkEditView): form = forms.CustomLinkBulkEditForm +@register_model_view(CustomLink, 'bulk_delete', path='delete', detail=False) class CustomLinkBulkDeleteView(generic.BulkDeleteView): queryset = CustomLink.objects.all() filterset = filtersets.CustomLinkFilterSet @@ -211,6 +226,7 @@ class CustomLinkBulkDeleteView(generic.BulkDeleteView): # Export templates # +@register_model_view(ExportTemplate, 'list', path='', detail=False) class ExportTemplateListView(generic.ObjectListView): queryset = ExportTemplate.objects.all() filterset = filtersets.ExportTemplateFilterSet @@ -228,6 +244,7 @@ class ExportTemplateView(generic.ObjectView): queryset = ExportTemplate.objects.all() +@register_model_view(ExportTemplate, 'add', detail=False) @register_model_view(ExportTemplate, 'edit') class ExportTemplateEditView(generic.ObjectEditView): queryset = ExportTemplate.objects.all() @@ -239,11 +256,13 @@ class ExportTemplateDeleteView(generic.ObjectDeleteView): queryset = ExportTemplate.objects.all() +@register_model_view(ExportTemplate, 'bulk_import', detail=False) class ExportTemplateBulkImportView(generic.BulkImportView): queryset = ExportTemplate.objects.all() model_form = forms.ExportTemplateImportForm +@register_model_view(ExportTemplate, 'bulk_edit', path='edit', detail=False) class ExportTemplateBulkEditView(generic.BulkEditView): queryset = ExportTemplate.objects.all() filterset = filtersets.ExportTemplateFilterSet @@ -251,12 +270,14 @@ class ExportTemplateBulkEditView(generic.BulkEditView): form = forms.ExportTemplateBulkEditForm +@register_model_view(ExportTemplate, 'bulk_delete', path='delete', detail=False) class ExportTemplateBulkDeleteView(generic.BulkDeleteView): queryset = ExportTemplate.objects.all() filterset = filtersets.ExportTemplateFilterSet table = tables.ExportTemplateTable +@register_model_view(ExportTemplate, 'bulk_sync', path='sync', detail=False) class ExportTemplateBulkSyncDataView(generic.BulkSyncDataView): queryset = ExportTemplate.objects.all() @@ -283,6 +304,7 @@ class SavedFilterMixin: ) +@register_model_view(SavedFilter, 'list', path='', detail=False) class SavedFilterListView(SavedFilterMixin, generic.ObjectListView): filterset = filtersets.SavedFilterFilterSet filterset_form = forms.SavedFilterFilterForm @@ -294,6 +316,7 @@ class SavedFilterView(SavedFilterMixin, generic.ObjectView): queryset = SavedFilter.objects.all() +@register_model_view(SavedFilter, 'add', detail=False) @register_model_view(SavedFilter, 'edit') class SavedFilterEditView(SavedFilterMixin, generic.ObjectEditView): queryset = SavedFilter.objects.all() @@ -310,11 +333,13 @@ class SavedFilterDeleteView(SavedFilterMixin, generic.ObjectDeleteView): queryset = SavedFilter.objects.all() +@register_model_view(SavedFilter, 'bulk_import', detail=False) class SavedFilterBulkImportView(SavedFilterMixin, generic.BulkImportView): queryset = SavedFilter.objects.all() model_form = forms.SavedFilterImportForm +@register_model_view(SavedFilter, 'bulk_edit', path='edit', detail=False) class SavedFilterBulkEditView(SavedFilterMixin, generic.BulkEditView): queryset = SavedFilter.objects.all() filterset = filtersets.SavedFilterFilterSet @@ -322,6 +347,7 @@ class SavedFilterBulkEditView(SavedFilterMixin, generic.BulkEditView): form = forms.SavedFilterBulkEditForm +@register_model_view(SavedFilter, 'bulk_delete', path='delete', detail=False) class SavedFilterBulkDeleteView(SavedFilterMixin, generic.BulkDeleteView): queryset = SavedFilter.objects.all() filterset = filtersets.SavedFilterFilterSet @@ -332,6 +358,7 @@ class SavedFilterBulkDeleteView(SavedFilterMixin, generic.BulkDeleteView): # Bookmarks # +@register_model_view(Bookmark, 'add', detail=False) class BookmarkCreateView(generic.ObjectEditView): form = forms.BookmarkForm @@ -350,6 +377,7 @@ class BookmarkDeleteView(generic.ObjectDeleteView): return Bookmark.objects.filter(user=request.user) +@register_model_view(Bookmark, 'bulk_delete', path='delete', detail=False) class BookmarkBulkDeleteView(generic.BulkDeleteView): table = tables.BookmarkTable @@ -361,6 +389,7 @@ class BookmarkBulkDeleteView(generic.BulkDeleteView): # Notification groups # +@register_model_view(NotificationGroup, 'list', path='', detail=False) class NotificationGroupListView(generic.ObjectListView): queryset = NotificationGroup.objects.all() filterset = filtersets.NotificationGroupFilterSet @@ -373,6 +402,7 @@ class NotificationGroupView(generic.ObjectView): queryset = NotificationGroup.objects.all() +@register_model_view(NotificationGroup, 'add', detail=False) @register_model_view(NotificationGroup, 'edit') class NotificationGroupEditView(generic.ObjectEditView): queryset = NotificationGroup.objects.all() @@ -384,11 +414,13 @@ class NotificationGroupDeleteView(generic.ObjectDeleteView): queryset = NotificationGroup.objects.all() +@register_model_view(NotificationGroup, 'bulk_import', detail=False) class NotificationGroupBulkImportView(generic.BulkImportView): queryset = NotificationGroup.objects.all() model_form = forms.NotificationGroupImportForm +@register_model_view(NotificationGroup, 'bulk_edit', path='edit', detail=False) class NotificationGroupBulkEditView(generic.BulkEditView): queryset = NotificationGroup.objects.all() filterset = filtersets.NotificationGroupFilterSet @@ -396,6 +428,7 @@ class NotificationGroupBulkEditView(generic.BulkEditView): form = forms.NotificationGroupBulkEditForm +@register_model_view(NotificationGroup, 'bulk_delete', path='delete', detail=False) class NotificationGroupBulkDeleteView(generic.BulkDeleteView): queryset = NotificationGroup.objects.all() filterset = filtersets.NotificationGroupFilterSet @@ -459,6 +492,7 @@ class NotificationDeleteView(generic.ObjectDeleteView): return Notification.objects.filter(user=request.user) +@register_model_view(Notification, 'bulk_delete', path='delete', detail=False) class NotificationBulkDeleteView(generic.BulkDeleteView): table = tables.NotificationTable @@ -470,6 +504,7 @@ class NotificationBulkDeleteView(generic.BulkDeleteView): # Subscriptions # +@register_model_view(Subscription, 'add', detail=False) class SubscriptionCreateView(generic.ObjectEditView): form = forms.SubscriptionForm @@ -488,6 +523,7 @@ class SubscriptionDeleteView(generic.ObjectDeleteView): return Subscription.objects.filter(user=request.user) +@register_model_view(Subscription, 'bulk_delete', path='delete', detail=False) class SubscriptionBulkDeleteView(generic.BulkDeleteView): table = tables.SubscriptionTable @@ -499,6 +535,7 @@ class SubscriptionBulkDeleteView(generic.BulkDeleteView): # Webhooks # +@register_model_view(Webhook, 'list', path='', detail=False) class WebhookListView(generic.ObjectListView): queryset = Webhook.objects.all() filterset = filtersets.WebhookFilterSet @@ -511,6 +548,7 @@ class WebhookView(generic.ObjectView): queryset = Webhook.objects.all() +@register_model_view(Webhook, 'add', detail=False) @register_model_view(Webhook, 'edit') class WebhookEditView(generic.ObjectEditView): queryset = Webhook.objects.all() @@ -522,11 +560,13 @@ class WebhookDeleteView(generic.ObjectDeleteView): queryset = Webhook.objects.all() +@register_model_view(Webhook, 'bulk_import', detail=False) class WebhookBulkImportView(generic.BulkImportView): queryset = Webhook.objects.all() model_form = forms.WebhookImportForm +@register_model_view(Webhook, 'bulk_edit', path='edit', detail=False) class WebhookBulkEditView(generic.BulkEditView): queryset = Webhook.objects.all() filterset = filtersets.WebhookFilterSet @@ -534,6 +574,7 @@ class WebhookBulkEditView(generic.BulkEditView): form = forms.WebhookBulkEditForm +@register_model_view(Webhook, 'bulk_delete', path='delete', detail=False) class WebhookBulkDeleteView(generic.BulkDeleteView): queryset = Webhook.objects.all() filterset = filtersets.WebhookFilterSet @@ -544,6 +585,7 @@ class WebhookBulkDeleteView(generic.BulkDeleteView): # Event Rules # +@register_model_view(EventRule, 'list', path='', detail=False) class EventRuleListView(generic.ObjectListView): queryset = EventRule.objects.all() filterset = filtersets.EventRuleFilterSet @@ -556,6 +598,7 @@ class EventRuleView(generic.ObjectView): queryset = EventRule.objects.all() +@register_model_view(EventRule, 'add', detail=False) @register_model_view(EventRule, 'edit') class EventRuleEditView(generic.ObjectEditView): queryset = EventRule.objects.all() @@ -567,11 +610,13 @@ class EventRuleDeleteView(generic.ObjectDeleteView): queryset = EventRule.objects.all() +@register_model_view(EventRule, 'bulk_import', detail=False) class EventRuleBulkImportView(generic.BulkImportView): queryset = EventRule.objects.all() model_form = forms.EventRuleImportForm +@register_model_view(EventRule, 'bulk_edit', path='edit', detail=False) class EventRuleBulkEditView(generic.BulkEditView): queryset = EventRule.objects.all() filterset = filtersets.EventRuleFilterSet @@ -579,6 +624,7 @@ class EventRuleBulkEditView(generic.BulkEditView): form = forms.EventRuleBulkEditForm +@register_model_view(EventRule, 'bulk_delete', path='delete', detail=False) class EventRuleBulkDeleteView(generic.BulkDeleteView): queryset = EventRule.objects.all() filterset = filtersets.EventRuleFilterSet @@ -589,6 +635,7 @@ class EventRuleBulkDeleteView(generic.BulkDeleteView): # Tags # +@register_model_view(Tag, 'list', path='', detail=False) class TagListView(generic.ObjectListView): queryset = Tag.objects.annotate( items=count_related(TaggedItem, 'tag') @@ -624,6 +671,7 @@ class TagView(generic.ObjectView): } +@register_model_view(Tag, 'add', detail=False) @register_model_view(Tag, 'edit') class TagEditView(generic.ObjectEditView): queryset = Tag.objects.all() @@ -635,11 +683,13 @@ class TagDeleteView(generic.ObjectDeleteView): queryset = Tag.objects.all() +@register_model_view(Tag, 'bulk_import', detail=False) class TagBulkImportView(generic.BulkImportView): queryset = Tag.objects.all() model_form = forms.TagImportForm +@register_model_view(Tag, 'bulk_edit', path='edit', detail=False) class TagBulkEditView(generic.BulkEditView): queryset = Tag.objects.annotate( items=count_related(TaggedItem, 'tag') @@ -648,6 +698,7 @@ class TagBulkEditView(generic.BulkEditView): form = forms.TagBulkEditForm +@register_model_view(Tag, 'bulk_delete', path='delete', detail=False) class TagBulkDeleteView(generic.BulkDeleteView): queryset = Tag.objects.annotate( items=count_related(TaggedItem, 'tag') @@ -659,6 +710,7 @@ class TagBulkDeleteView(generic.BulkDeleteView): # Config contexts # +@register_model_view(ConfigContext, 'list', path='', detail=False) class ConfigContextListView(generic.ObjectListView): queryset = ConfigContext.objects.all() filterset = filtersets.ConfigContextFilterSet @@ -711,30 +763,34 @@ class ConfigContextView(generic.ObjectView): } +@register_model_view(ConfigContext, 'add', detail=False) @register_model_view(ConfigContext, 'edit') class ConfigContextEditView(generic.ObjectEditView): queryset = ConfigContext.objects.all() form = forms.ConfigContextForm -class ConfigContextBulkEditView(generic.BulkEditView): - queryset = ConfigContext.objects.all() - filterset = filtersets.ConfigContextFilterSet - table = tables.ConfigContextTable - form = forms.ConfigContextBulkEditForm - - @register_model_view(ConfigContext, 'delete') class ConfigContextDeleteView(generic.ObjectDeleteView): queryset = ConfigContext.objects.all() +@register_model_view(ConfigContext, 'bulk_edit', path='edit', detail=False) +class ConfigContextBulkEditView(generic.BulkEditView): + queryset = ConfigContext.objects.all() + filterset = filtersets.ConfigContextFilterSet + table = tables.ConfigContextTable + form = forms.ConfigContextBulkEditForm + + +@register_model_view(ConfigContext, 'bulk_delete', path='delete', detail=False) class ConfigContextBulkDeleteView(generic.BulkDeleteView): queryset = ConfigContext.objects.all() filterset = filtersets.ConfigContextFilterSet table = tables.ConfigContextTable +@register_model_view(ConfigContext, 'bulk_sync', path='sync', detail=False) class ConfigContextBulkSyncDataView(generic.BulkSyncDataView): queryset = ConfigContext.objects.all() @@ -768,6 +824,7 @@ class ObjectConfigContextView(generic.ObjectView): # Config templates # +@register_model_view(ConfigTemplate, 'list', path='', detail=False) class ConfigTemplateListView(generic.ObjectListView): queryset = ConfigTemplate.objects.annotate( device_count=count_related(Device, 'config_template'), @@ -790,6 +847,7 @@ class ConfigTemplateView(generic.ObjectView): queryset = ConfigTemplate.objects.all() +@register_model_view(ConfigTemplate, 'add', detail=False) @register_model_view(ConfigTemplate, 'edit') class ConfigTemplateEditView(generic.ObjectEditView): queryset = ConfigTemplate.objects.all() @@ -801,11 +859,13 @@ class ConfigTemplateDeleteView(generic.ObjectDeleteView): queryset = ConfigTemplate.objects.all() +@register_model_view(ConfigTemplate, 'bulk_import', detail=False) class ConfigTemplateBulkImportView(generic.BulkImportView): queryset = ConfigTemplate.objects.all() model_form = forms.ConfigTemplateImportForm +@register_model_view(ConfigTemplate, 'bulk_edit', path='edit', detail=False) class ConfigTemplateBulkEditView(generic.BulkEditView): queryset = ConfigTemplate.objects.all() filterset = filtersets.ConfigTemplateFilterSet @@ -813,12 +873,14 @@ class ConfigTemplateBulkEditView(generic.BulkEditView): form = forms.ConfigTemplateBulkEditForm +@register_model_view(ConfigTemplate, 'bulk_delete', path='delete', detail=False) class ConfigTemplateBulkDeleteView(generic.BulkDeleteView): queryset = ConfigTemplate.objects.all() filterset = filtersets.ConfigTemplateFilterSet table = tables.ConfigTemplateTable +@register_model_view(ConfigTemplate, 'bulk_sync', path='sync', detail=False) class ConfigTemplateBulkSyncDataView(generic.BulkSyncDataView): queryset = ConfigTemplate.objects.all() @@ -827,6 +889,7 @@ class ConfigTemplateBulkSyncDataView(generic.BulkSyncDataView): # Image attachments # +@register_model_view(ImageAttachment, 'list', path='', detail=False) class ImageAttachmentListView(generic.ObjectListView): queryset = ImageAttachment.objects.all() filterset = filtersets.ImageAttachmentFilterSet @@ -837,6 +900,7 @@ class ImageAttachmentListView(generic.ObjectListView): } +@register_model_view(ImageAttachment, 'add', detail=False) @register_model_view(ImageAttachment, 'edit') class ImageAttachmentEditView(generic.ObjectEditView): queryset = ImageAttachment.objects.all() @@ -871,14 +935,15 @@ class ImageAttachmentDeleteView(generic.ObjectDeleteView): # Journal entries # +@register_model_view(JournalEntry, 'list', path='', detail=False) class JournalEntryListView(generic.ObjectListView): queryset = JournalEntry.objects.all() filterset = filtersets.JournalEntryFilterSet filterset_form = forms.JournalEntryFilterForm table = tables.JournalEntryTable actions = { - 'import': {'add'}, 'export': {'view'}, + 'bulk_import': {'add'}, 'bulk_edit': {'change'}, 'bulk_delete': {'delete'}, } @@ -889,6 +954,7 @@ class JournalEntryView(generic.ObjectView): queryset = JournalEntry.objects.all() +@register_model_view(JournalEntry, 'add', detail=False) @register_model_view(JournalEntry, 'edit') class JournalEntryEditView(generic.ObjectEditView): queryset = JournalEntry.objects.all() @@ -917,6 +983,13 @@ class JournalEntryDeleteView(generic.ObjectDeleteView): return reverse(viewname, kwargs={'pk': obj.pk}) +@register_model_view(JournalEntry, 'bulk_import', detail=False) +class JournalEntryBulkImportView(generic.BulkImportView): + queryset = JournalEntry.objects.all() + model_form = forms.JournalEntryImportForm + + +@register_model_view(JournalEntry, 'bulk_edit', path='edit', detail=False) class JournalEntryBulkEditView(generic.BulkEditView): queryset = JournalEntry.objects.all() filterset = filtersets.JournalEntryFilterSet @@ -924,17 +997,13 @@ class JournalEntryBulkEditView(generic.BulkEditView): form = forms.JournalEntryBulkEditForm +@register_model_view(JournalEntry, 'bulk_delete', path='delete', detail=False) class JournalEntryBulkDeleteView(generic.BulkDeleteView): queryset = JournalEntry.objects.all() filterset = filtersets.JournalEntryFilterSet table = tables.JournalEntryTable -class JournalEntryBulkImportView(generic.BulkImportView): - queryset = JournalEntry.objects.all() - model_form = forms.JournalEntryImportForm - - # # Dashboard & widgets # @@ -1141,12 +1210,14 @@ class ScriptView(BaseScriptView): script_class = self._get_script_class(script) if not script_class: return render(request, 'extras/script.html', { + 'object': script, 'script': script, }) form = script_class.as_form(initial=normalize_querydict(request.GET)) return render(request, 'extras/script.html', { + 'object': script, 'script': script, 'script_class': script_class, 'form': form, @@ -1162,6 +1233,7 @@ class ScriptView(BaseScriptView): script_class = self._get_script_class(script) if not script_class: return render(request, 'extras/script.html', { + 'object': script, 'script': script, }) @@ -1181,12 +1253,12 @@ class ScriptView(BaseScriptView): request=copy_safe_request(request), job_timeout=script.python_class.job_timeout, commit=form.cleaned_data.pop('_commit'), - name=script.name ) return redirect('extras:script_result', job_pk=job.pk) return render(request, 'extras/script.html', { + 'object': script, 'script': script, 'script_class': script.python_class(), 'form': form, diff --git a/netbox/ipam/api/nested_serializers.py b/netbox/ipam/api/nested_serializers.py deleted file mode 100644 index 8b10f29df..000000000 --- a/netbox/ipam/api/nested_serializers.py +++ /dev/null @@ -1,204 +0,0 @@ -import warnings - -from drf_spectacular.utils import extend_schema_serializer -from rest_framework import serializers - -from ipam import models -from netbox.api.fields import RelatedObjectCountField -from netbox.api.serializers import WritableNestedSerializer -from .field_serializers import IPAddressField -from .serializers_.nested import NestedIPAddressSerializer - -__all__ = [ - 'NestedAggregateSerializer', - 'NestedASNSerializer', - 'NestedASNRangeSerializer', - 'NestedFHRPGroupSerializer', - 'NestedFHRPGroupAssignmentSerializer', - 'NestedIPAddressSerializer', - 'NestedIPRangeSerializer', - 'NestedPrefixSerializer', - 'NestedRIRSerializer', - 'NestedRoleSerializer', - 'NestedRouteTargetSerializer', - 'NestedServiceSerializer', - 'NestedServiceTemplateSerializer', - 'NestedVLANGroupSerializer', - 'NestedVLANSerializer', - 'NestedVRFSerializer', -] - -# TODO: Remove in v4.2 -warnings.warn( - "Dedicated nested serializers will be removed in NetBox v4.2. Use Serializer(nested=True) instead.", - DeprecationWarning -) - - -# -# ASN ranges -# - -class NestedASNRangeSerializer(WritableNestedSerializer): - - class Meta: - model = models.ASNRange - fields = ['id', 'url', 'display_url', 'display', 'name'] - - -# -# ASNs -# - -class NestedASNSerializer(WritableNestedSerializer): - - class Meta: - model = models.ASN - fields = ['id', 'url', 'display_url', 'display', 'asn'] - - -# -# VRFs -# - -@extend_schema_serializer( - exclude_fields=('prefix_count',), -) -class NestedVRFSerializer(WritableNestedSerializer): - prefix_count = RelatedObjectCountField('prefixes') - - class Meta: - model = models.VRF - fields = ['id', 'url', 'display_url', 'display', 'name', 'rd', 'prefix_count'] - - -# -# Route targets -# - -class NestedRouteTargetSerializer(WritableNestedSerializer): - - class Meta: - model = models.RouteTarget - fields = ['id', 'url', 'display_url', 'display', 'name'] - - -# -# RIRs/aggregates -# - -@extend_schema_serializer( - exclude_fields=('aggregate_count',), -) -class NestedRIRSerializer(WritableNestedSerializer): - aggregate_count = RelatedObjectCountField('aggregates') - - class Meta: - model = models.RIR - fields = ['id', 'url', 'display_url', 'display', 'name', 'slug', 'aggregate_count'] - - -class NestedAggregateSerializer(WritableNestedSerializer): - family = serializers.IntegerField(read_only=True) - - class Meta: - model = models.Aggregate - fields = ['id', 'url', 'display_url', 'display', 'family', 'prefix'] - - -# -# FHRP groups -# - -class NestedFHRPGroupSerializer(WritableNestedSerializer): - - class Meta: - model = models.FHRPGroup - fields = ['id', 'url', 'display_url', 'display', 'protocol', 'group_id'] - - -class NestedFHRPGroupAssignmentSerializer(WritableNestedSerializer): - group = NestedFHRPGroupSerializer() - - class Meta: - model = models.FHRPGroupAssignment - fields = ['id', 'url', 'display_url', 'display', 'group', 'interface_type', 'interface_id', 'priority'] - - -# -# VLANs -# - -@extend_schema_serializer( - exclude_fields=('prefix_count', 'vlan_count'), -) -class NestedRoleSerializer(WritableNestedSerializer): - prefix_count = RelatedObjectCountField('prefixes') - vlan_count = RelatedObjectCountField('vlans') - - class Meta: - model = models.Role - fields = ['id', 'url', 'display_url', 'display', 'name', 'slug', 'prefix_count', 'vlan_count'] - - -@extend_schema_serializer( - exclude_fields=('vlan_count',), -) -class NestedVLANGroupSerializer(WritableNestedSerializer): - vlan_count = RelatedObjectCountField('vlans') - - class Meta: - model = models.VLANGroup - fields = ['id', 'url', 'display_url', 'display', 'name', 'slug', 'vlan_count'] - - -class NestedVLANSerializer(WritableNestedSerializer): - - class Meta: - model = models.VLAN - fields = ['id', 'url', 'display_url', 'display', 'vid', 'name'] - - -# -# Prefixes -# - -class NestedPrefixSerializer(WritableNestedSerializer): - family = serializers.IntegerField(read_only=True) - _depth = serializers.IntegerField(read_only=True) - - class Meta: - model = models.Prefix - fields = ['id', 'url', 'display_url', 'display', 'family', 'prefix', '_depth'] - - -# -# IP ranges -# - -class NestedIPRangeSerializer(WritableNestedSerializer): - family = serializers.IntegerField(read_only=True) - start_address = IPAddressField() - end_address = IPAddressField() - - class Meta: - model = models.IPRange - fields = ['id', 'url', 'display_url', 'display', 'family', 'start_address', 'end_address'] - - -# -# Services -# - -class NestedServiceTemplateSerializer(WritableNestedSerializer): - - class Meta: - model = models.ServiceTemplate - fields = ['id', 'url', 'display_url', 'display', 'name', 'protocol', 'ports'] - - -class NestedServiceSerializer(WritableNestedSerializer): - - class Meta: - model = models.Service - fields = ['id', 'url', 'display_url', 'display', 'name', 'protocol', 'ports'] diff --git a/netbox/ipam/api/serializers_/ip.py b/netbox/ipam/api/serializers_/ip.py index 535ffcec1..bfc7ac546 100644 --- a/netbox/ipam/api/serializers_/ip.py +++ b/netbox/ipam/api/serializers_/ip.py @@ -2,7 +2,7 @@ from django.contrib.contenttypes.models import ContentType from drf_spectacular.utils import extend_schema_field from rest_framework import serializers -from dcim.api.serializers_.sites import SiteSerializer +from dcim.constants import LOCATION_SCOPE_TYPES from ipam.choices import * from ipam.constants import IPADDRESS_ASSIGNMENT_MODELS from ipam.models import Aggregate, IPAddress, IPRange, Prefix @@ -45,8 +45,17 @@ class AggregateSerializer(NetBoxModelSerializer): class PrefixSerializer(NetBoxModelSerializer): family = ChoiceField(choices=IPAddressFamilyChoices, read_only=True) - site = SiteSerializer(nested=True, required=False, allow_null=True) vrf = VRFSerializer(nested=True, required=False, allow_null=True) + scope_type = ContentTypeField( + queryset=ContentType.objects.filter( + model__in=LOCATION_SCOPE_TYPES + ), + allow_null=True, + required=False, + default=None + ) + scope_id = serializers.IntegerField(allow_null=True, required=False, default=None) + scope = serializers.SerializerMethodField(read_only=True) tenant = TenantSerializer(nested=True, required=False, allow_null=True) vlan = VLANSerializer(nested=True, required=False, allow_null=True) status = ChoiceField(choices=PrefixStatusChoices, required=False) @@ -58,12 +67,20 @@ class PrefixSerializer(NetBoxModelSerializer): class Meta: model = Prefix fields = [ - 'id', 'url', 'display_url', 'display', 'family', 'prefix', 'site', 'vrf', 'tenant', 'vlan', 'status', - 'role', 'is_pool', 'mark_utilized', 'description', 'comments', 'tags', 'custom_fields', - 'created', 'last_updated', 'children', '_depth', + 'id', 'url', 'display_url', 'display', 'family', 'prefix', 'vrf', 'scope_type', 'scope_id', 'scope', + 'tenant', 'vlan', 'status', 'role', 'is_pool', 'mark_utilized', 'description', 'comments', 'tags', + 'custom_fields', 'created', 'last_updated', 'children', '_depth', ] brief_fields = ('id', 'url', 'display', 'family', 'prefix', 'description', '_depth') + @extend_schema_field(serializers.JSONField(allow_null=True)) + def get_scope(self, obj): + if obj.scope_id is None: + return None + serializer = get_serializer_for_model(obj.scope) + context = {'request': self.context['request']} + return serializer(obj.scope, nested=True, context=context).data + class PrefixLengthSerializer(serializers.Serializer): diff --git a/netbox/ipam/api/serializers_/nested.py b/netbox/ipam/api/serializers_/nested.py index 5297565bb..b56b15984 100644 --- a/netbox/ipam/api/serializers_/nested.py +++ b/netbox/ipam/api/serializers_/nested.py @@ -6,6 +6,7 @@ from ..field_serializers import IPAddressField __all__ = ( 'NestedIPAddressSerializer', + 'NestedVLANSerializer', ) @@ -16,3 +17,10 @@ class NestedIPAddressSerializer(WritableNestedSerializer): class Meta: model = models.IPAddress fields = ['id', 'url', 'display_url', 'display', 'family', 'address'] + + +class NestedVLANSerializer(WritableNestedSerializer): + + class Meta: + model = models.VLAN + fields = ['id', 'url', 'display', 'vid', 'name', 'description'] diff --git a/netbox/ipam/api/serializers_/vlans.py b/netbox/ipam/api/serializers_/vlans.py index 608fcf0b4..9b5501dc5 100644 --- a/netbox/ipam/api/serializers_/vlans.py +++ b/netbox/ipam/api/serializers_/vlans.py @@ -5,12 +5,13 @@ from rest_framework import serializers from dcim.api.serializers_.sites import SiteSerializer from ipam.choices import * from ipam.constants import VLANGROUP_SCOPE_TYPES -from ipam.models import VLAN, VLANGroup +from ipam.models import VLAN, VLANGroup, VLANTranslationPolicy, VLANTranslationRule from netbox.api.fields import ChoiceField, ContentTypeField, IntegerRangeSerializer, RelatedObjectCountField from netbox.api.serializers import NetBoxModelSerializer from tenancy.api.serializers_.tenants import TenantSerializer from utilities.api import get_serializer_for_model from vpn.api.serializers_.l2vpn import L2VPNTerminationSerializer +from .nested import NestedVLANSerializer from .roles import RoleSerializer __all__ = ( @@ -18,6 +19,8 @@ __all__ = ( 'CreateAvailableVLANSerializer', 'VLANGroupSerializer', 'VLANSerializer', + 'VLANTranslationPolicySerializer', + 'VLANTranslationRuleSerializer', ) @@ -62,6 +65,8 @@ class VLANSerializer(NetBoxModelSerializer): tenant = TenantSerializer(nested=True, required=False, allow_null=True) status = ChoiceField(choices=VLANStatusChoices, required=False) role = RoleSerializer(nested=True, required=False, allow_null=True) + qinq_role = ChoiceField(choices=VLANQinQRoleChoices, required=False) + qinq_svlan = NestedVLANSerializer(required=False, allow_null=True, default=None) l2vpn_termination = L2VPNTerminationSerializer(nested=True, read_only=True, allow_null=True) # Related object counts @@ -71,8 +76,8 @@ class VLANSerializer(NetBoxModelSerializer): model = VLAN fields = [ 'id', 'url', 'display_url', 'display', 'site', 'group', 'vid', 'name', 'tenant', 'status', 'role', - 'description', 'comments', 'l2vpn_termination', 'tags', 'custom_fields', 'created', 'last_updated', - 'prefix_count', + 'description', 'qinq_role', 'qinq_svlan', 'comments', 'l2vpn_termination', 'tags', 'custom_fields', + 'created', 'last_updated', 'prefix_count', ] brief_fields = ('id', 'url', 'display', 'vid', 'name', 'description') @@ -110,3 +115,19 @@ class CreateAvailableVLANSerializer(NetBoxModelSerializer): def validate(self, data): # Bypass model validation since we don't have a VID yet return data + + +class VLANTranslationRuleSerializer(NetBoxModelSerializer): + + class Meta: + model = VLANTranslationRule + fields = ['id', 'url', 'display', 'policy', 'local_vid', 'remote_vid', 'description'] + + +class VLANTranslationPolicySerializer(NetBoxModelSerializer): + rules = VLANTranslationRuleSerializer(many=True, read_only=True) + + class Meta: + model = VLANTranslationPolicy + fields = ['id', 'url', 'display', 'name', 'description', 'display', 'rules'] + brief_fields = ('id', 'url', 'display', 'name', 'description') diff --git a/netbox/ipam/api/urls.py b/netbox/ipam/api/urls.py index bae9d8048..ea76025ec 100644 --- a/netbox/ipam/api/urls.py +++ b/netbox/ipam/api/urls.py @@ -21,6 +21,8 @@ router.register('fhrp-groups', views.FHRPGroupViewSet) router.register('fhrp-group-assignments', views.FHRPGroupAssignmentViewSet) router.register('vlan-groups', views.VLANGroupViewSet) router.register('vlans', views.VLANViewSet) +router.register('vlan-translation-policies', views.VLANTranslationPolicyViewSet) +router.register('vlan-translation-rules', views.VLANTranslationRuleViewSet) router.register('service-templates', views.ServiceTemplateViewSet) router.register('services', views.ServiceViewSet) diff --git a/netbox/ipam/api/views.py b/netbox/ipam/api/views.py index ffd4d5b7d..783d13523 100644 --- a/netbox/ipam/api/views.py +++ b/netbox/ipam/api/views.py @@ -143,6 +143,18 @@ class VLANViewSet(NetBoxModelViewSet): filterset_class = filtersets.VLANFilterSet +class VLANTranslationPolicyViewSet(NetBoxModelViewSet): + queryset = VLANTranslationPolicy.objects.all() + serializer_class = serializers.VLANTranslationPolicySerializer + filterset_class = filtersets.VLANTranslationPolicyFilterSet + + +class VLANTranslationRuleViewSet(NetBoxModelViewSet): + queryset = VLANTranslationRule.objects.all() + serializer_class = serializers.VLANTranslationRuleSerializer + filterset_class = filtersets.VLANTranslationRuleFilterSet + + class ServiceTemplateViewSet(NetBoxModelViewSet): queryset = ServiceTemplate.objects.all() serializer_class = serializers.ServiceTemplateSerializer diff --git a/netbox/ipam/apps.py b/netbox/ipam/apps.py index c118d5464..ae88d69a9 100644 --- a/netbox/ipam/apps.py +++ b/netbox/ipam/apps.py @@ -1,5 +1,7 @@ from django.apps import AppConfig +from netbox import denormalized + class IPAMConfig(AppConfig): name = "ipam" @@ -8,6 +10,16 @@ class IPAMConfig(AppConfig): def ready(self): from netbox.models.features import register_models from . import signals, search # noqa: F401 + from .models import Prefix # Register models register_models(*self.get_models()) + + # Register denormalized fields + denormalized.register(Prefix, '_site', { + '_region': 'region', + '_site_group': 'group', + }) + denormalized.register(Prefix, '_location', { + '_site': 'site', + }) diff --git a/netbox/ipam/choices.py b/netbox/ipam/choices.py index 017fd0430..51b65a6da 100644 --- a/netbox/ipam/choices.py +++ b/netbox/ipam/choices.py @@ -157,6 +157,17 @@ class VLANStatusChoices(ChoiceSet): ] +class VLANQinQRoleChoices(ChoiceSet): + + ROLE_SERVICE = 'svlan' + ROLE_CUSTOMER = 'cvlan' + + CHOICES = [ + (ROLE_SERVICE, _('Service'), 'blue'), + (ROLE_CUSTOMER, _('Customer'), 'orange'), + ] + + # # Services # diff --git a/netbox/ipam/filtersets.py b/netbox/ipam/filtersets.py index 894219c64..81cbd2ef8 100644 --- a/netbox/ipam/filtersets.py +++ b/netbox/ipam/filtersets.py @@ -1,5 +1,6 @@ import django_filters import netaddr +from dcim.base_filtersets import ScopedFilterSet from django.contrib.contenttypes.models import ContentType from django.core.exceptions import ValidationError from django.db.models import Q @@ -37,6 +38,8 @@ __all__ = ( 'ServiceTemplateFilterSet', 'VLANFilterSet', 'VLANGroupFilterSet', + 'VLANTranslationPolicyFilterSet', + 'VLANTranslationRuleFilterSet', 'VRFFilterSet', ) @@ -211,8 +214,10 @@ class ASNRangeFilterSet(OrganizationalModelFilterSet, TenancyFilterSet): def search(self, queryset, name, value): if not value.strip(): return queryset - qs_filter = Q(description__icontains=value) - return queryset.filter(qs_filter) + return queryset.filter( + Q(name__icontains=value) | + Q(description__icontains=value) + ) class ASNFilterSet(OrganizationalModelFilterSet, TenancyFilterSet): @@ -271,7 +276,7 @@ class RoleFilterSet(OrganizationalModelFilterSet): fields = ('id', 'name', 'slug', 'description', 'weight') -class PrefixFilterSet(NetBoxModelFilterSet, TenancyFilterSet): +class PrefixFilterSet(NetBoxModelFilterSet, ScopedFilterSet, TenancyFilterSet): family = django_filters.NumberFilter( field_name='prefix', lookup_expr='family' @@ -332,42 +337,6 @@ class PrefixFilterSet(NetBoxModelFilterSet, TenancyFilterSet): to_field_name='rd', label=_('VRF (RD)'), ) - region_id = TreeNodeMultipleChoiceFilter( - queryset=Region.objects.all(), - field_name='site__region', - lookup_expr='in', - label=_('Region (ID)'), - ) - region = TreeNodeMultipleChoiceFilter( - queryset=Region.objects.all(), - field_name='site__region', - lookup_expr='in', - to_field_name='slug', - label=_('Region (slug)'), - ) - site_group_id = TreeNodeMultipleChoiceFilter( - queryset=SiteGroup.objects.all(), - field_name='site__group', - lookup_expr='in', - label=_('Site group (ID)'), - ) - site_group = TreeNodeMultipleChoiceFilter( - queryset=SiteGroup.objects.all(), - field_name='site__group', - lookup_expr='in', - to_field_name='slug', - label=_('Site group (slug)'), - ) - site_id = django_filters.ModelMultipleChoiceFilter( - queryset=Site.objects.all(), - label=_('Site (ID)'), - ) - site = django_filters.ModelMultipleChoiceFilter( - field_name='site__slug', - queryset=Site.objects.all(), - to_field_name='slug', - label=_('Site (slug)'), - ) vlan_id = django_filters.ModelMultipleChoiceFilter( queryset=VLAN.objects.all(), label=_('VLAN (ID)'), @@ -393,7 +362,7 @@ class PrefixFilterSet(NetBoxModelFilterSet, TenancyFilterSet): class Meta: model = Prefix - fields = ('id', 'is_pool', 'mark_utilized', 'description') + fields = ('id', 'scope_id', 'is_pool', 'mark_utilized', 'description') def search(self, queryset, name, value): if not value.strip(): @@ -1024,6 +993,17 @@ class VLANFilterSet(NetBoxModelFilterSet, TenancyFilterSet): queryset=VirtualMachine.objects.all(), method='get_for_virtualmachine' ) + qinq_role = django_filters.MultipleChoiceFilter( + choices=VLANQinQRoleChoices + ) + qinq_svlan_id = django_filters.ModelMultipleChoiceFilter( + queryset=VLAN.objects.all(), + label=_('Q-in-Q SVLAN (ID)'), + ) + qinq_svlan_vid = MultiValueNumberFilter( + field_name='qinq_svlan__vid', + label=_('Q-in-Q SVLAN number (1-4094)'), + ) l2vpn_id = django_filters.ModelMultipleChoiceFilter( field_name='l2vpn_terminations__l2vpn', queryset=L2VPN.objects.all(), @@ -1078,7 +1058,7 @@ class VLANFilterSet(NetBoxModelFilterSet, TenancyFilterSet): return queryset.filter( Q(interfaces_as_tagged=value) | Q(interfaces_as_untagged=value) - ) + ).distinct() def filter_vminterface_id(self, queryset, name, value): if value is None: @@ -1086,7 +1066,54 @@ class VLANFilterSet(NetBoxModelFilterSet, TenancyFilterSet): return queryset.filter( Q(vminterfaces_as_tagged=value) | Q(vminterfaces_as_untagged=value) + ).distinct() + + +class VLANTranslationPolicyFilterSet(NetBoxModelFilterSet): + + class Meta: + model = VLANTranslationPolicy + fields = ('id', 'name', 'description') + + def search(self, queryset, name, value): + if not value.strip(): + return queryset + qs_filter = ( + Q(name__icontains=value) | + Q(description__icontains=value) ) + return queryset.filter(qs_filter) + + +class VLANTranslationRuleFilterSet(NetBoxModelFilterSet): + policy_id = django_filters.ModelMultipleChoiceFilter( + queryset=VLANTranslationPolicy.objects.all(), + label=_('VLAN Translation Policy (ID)'), + ) + policy = django_filters.ModelMultipleChoiceFilter( + field_name='policy__name', + queryset=VLANTranslationPolicy.objects.all(), + to_field_name='name', + label=_('VLAN Translation Policy (name)'), + ) + + class Meta: + model = VLANTranslationRule + fields = ('id', 'policy_id', 'policy', 'local_vid', 'remote_vid', 'description') + + def search(self, queryset, name, value): + if not value.strip(): + return queryset + qs_filter = ( + Q(policy__name__icontains=value) + ) + try: + int_value = int(value.strip()) + qs_filter |= Q(local_vid=int_value) + qs_filter |= Q(remote_vid=int_value) + except ValueError: + pass + return queryset.filter(qs_filter) class ServiceTemplateFilterSet(NetBoxModelFilterSet): diff --git a/netbox/ipam/forms/bulk_edit.py b/netbox/ipam/forms/bulk_edit.py index 79debd0ed..7f3216cfd 100644 --- a/netbox/ipam/forms/bulk_edit.py +++ b/netbox/ipam/forms/bulk_edit.py @@ -3,6 +3,7 @@ from django.contrib.contenttypes.models import ContentType from django.core.exceptions import ObjectDoesNotExist from django.utils.translation import gettext_lazy as _ +from dcim.forms.mixins import ScopedBulkEditForm from dcim.models import Region, Site, SiteGroup from ipam.choices import * from ipam.constants import * @@ -34,6 +35,8 @@ __all__ = ( 'ServiceTemplateBulkEditForm', 'VLANBulkEditForm', 'VLANGroupBulkEditForm', + 'VLANTranslationPolicyBulkEditForm', + 'VLANTranslationRuleBulkEditForm', 'VRFBulkEditForm', ) @@ -203,26 +206,7 @@ class RoleBulkEditForm(NetBoxModelBulkEditForm): nullable_fields = ('description',) -class PrefixBulkEditForm(NetBoxModelBulkEditForm): - region = DynamicModelChoiceField( - label=_('Region'), - queryset=Region.objects.all(), - required=False - ) - site_group = DynamicModelChoiceField( - label=_('Site group'), - queryset=SiteGroup.objects.all(), - required=False - ) - site = DynamicModelChoiceField( - label=_('Site'), - queryset=Site.objects.all(), - required=False, - query_params={ - 'region_id': '$region', - 'group_id': '$site_group', - } - ) +class PrefixBulkEditForm(ScopedBulkEditForm, NetBoxModelBulkEditForm): vlan_group = DynamicModelChoiceField( queryset=VLANGroup.objects.all(), required=False, @@ -282,12 +266,12 @@ class PrefixBulkEditForm(NetBoxModelBulkEditForm): model = Prefix fieldsets = ( FieldSet('tenant', 'status', 'role', 'description'), - FieldSet('region', 'site_group', 'site', name=_('Site')), FieldSet('vrf', 'prefix_length', 'is_pool', 'mark_utilized', name=_('Addressing')), + FieldSet('scope_type', 'scope', name=_('Scope')), FieldSet('vlan_group', 'vlan', name=_('VLAN Assignment')), ) nullable_fields = ( - 'site', 'vlan', 'vrf', 'tenant', 'role', 'description', 'comments', + 'vlan', 'vrf', 'tenant', 'role', 'scope', 'description', 'comments', ) @@ -517,18 +501,62 @@ class VLANBulkEditForm(NetBoxModelBulkEditForm): max_length=200, required=False ) + qinq_role = forms.ChoiceField( + label=_('Q-in-Q role'), + choices=add_blank_choice(VLANQinQRoleChoices), + required=False + ) + qinq_svlan = DynamicModelChoiceField( + label=_('Q-in-Q SVLAN'), + queryset=VLAN.objects.all(), + required=False, + query_params={ + 'qinq_role': VLANQinQRoleChoices.ROLE_SERVICE, + } + ) comments = CommentField() model = VLAN fieldsets = ( FieldSet('status', 'role', 'tenant', 'description'), + FieldSet('qinq_role', 'qinq_svlan', name=_('Q-in-Q')), FieldSet('region', 'site_group', 'site', 'group', name=_('Site & Group')), ) nullable_fields = ( - 'site', 'group', 'tenant', 'role', 'description', 'comments', + 'site', 'group', 'tenant', 'role', 'description', 'qinq_role', 'qinq_svlan', 'comments', ) +class VLANTranslationPolicyBulkEditForm(NetBoxModelBulkEditForm): + description = forms.CharField( + label=_('Description'), + max_length=200, + required=False + ) + + model = VLANTranslationPolicy + fieldsets = ( + FieldSet('description'), + ) + nullable_fields = ('description',) + + +class VLANTranslationRuleBulkEditForm(NetBoxModelBulkEditForm): + policy = DynamicModelChoiceField( + label=_('Policy'), + queryset=VLANTranslationPolicy.objects.all(), + selector=True + ) + local_vid = forms.IntegerField(required=False) + remote_vid = forms.IntegerField(required=False) + + model = VLANTranslationRule + fieldsets = ( + FieldSet('policy', 'local_vid', 'remote_vid'), + ) + fields = ('policy', 'local_vid', 'remote_vid') + + class ServiceTemplateBulkEditForm(NetBoxModelBulkEditForm): protocol = forms.ChoiceField( label=_('Protocol'), diff --git a/netbox/ipam/forms/bulk_import.py b/netbox/ipam/forms/bulk_import.py index dea250c79..c1f2dedd7 100644 --- a/netbox/ipam/forms/bulk_import.py +++ b/netbox/ipam/forms/bulk_import.py @@ -3,6 +3,7 @@ from django.contrib.contenttypes.models import ContentType from django.utils.translation import gettext_lazy as _ from dcim.models import Device, Interface, Site +from dcim.forms.mixins import ScopedImportForm from ipam.choices import * from ipam.constants import * from ipam.models import * @@ -29,6 +30,8 @@ __all__ = ( 'ServiceTemplateImportForm', 'VLANImportForm', 'VLANGroupImportForm', + 'VLANTranslationPolicyImportForm', + 'VLANTranslationRuleImportForm', 'VRFImportForm', ) @@ -152,7 +155,7 @@ class RoleImportForm(NetBoxModelImportForm): fields = ('name', 'slug', 'weight', 'description', 'tags') -class PrefixImportForm(NetBoxModelImportForm): +class PrefixImportForm(ScopedImportForm, NetBoxModelImportForm): vrf = CSVModelChoiceField( label=_('VRF'), queryset=VRF.objects.all(), @@ -167,13 +170,6 @@ class PrefixImportForm(NetBoxModelImportForm): to_field_name='name', help_text=_('Assigned tenant') ) - site = CSVModelChoiceField( - label=_('Site'), - queryset=Site.objects.all(), - required=False, - to_field_name='name', - help_text=_('Assigned site') - ) vlan_group = CSVModelChoiceField( label=_('VLAN group'), queryset=VLANGroup.objects.all(), @@ -204,9 +200,12 @@ class PrefixImportForm(NetBoxModelImportForm): class Meta: model = Prefix fields = ( - 'prefix', 'vrf', 'tenant', 'site', 'vlan_group', 'vlan', 'status', 'role', 'is_pool', 'mark_utilized', - 'description', 'comments', 'tags', + 'prefix', 'vrf', 'tenant', 'vlan_group', 'vlan', 'status', 'role', 'scope_type', 'scope_id', 'is_pool', + 'mark_utilized', 'description', 'comments', 'tags', ) + labels = { + 'scope_id': _('Scope ID'), + } def __init__(self, data=None, *args, **kwargs): super().__init__(data, *args, **kwargs) @@ -326,12 +325,17 @@ class IPAddressImportForm(NetBoxModelImportForm): help_text=_('Make this the primary IP for the assigned device'), required=False ) + is_oob = forms.BooleanField( + label=_('Is out-of-band'), + help_text=_('Designate this as the out-of-band IP address for the assigned device'), + required=False + ) class Meta: model = IPAddress fields = [ 'address', 'vrf', 'tenant', 'status', 'role', 'device', 'virtual_machine', 'interface', 'is_primary', - 'dns_name', 'description', 'comments', 'tags', + 'is_oob', 'dns_name', 'description', 'comments', 'tags', ] def __init__(self, data=None, *args, **kwargs): @@ -345,7 +349,7 @@ class IPAddressImportForm(NetBoxModelImportForm): **{f"device__{self.fields['device'].to_field_name}": data['device']} ) - # Limit interface queryset by assigned device + # Limit interface queryset by assigned VM elif data.get('virtual_machine'): self.fields['interface'].queryset = VMInterface.objects.filter( **{f"virtual_machine__{self.fields['virtual_machine'].to_field_name}": data['virtual_machine']} @@ -358,16 +362,29 @@ class IPAddressImportForm(NetBoxModelImportForm): virtual_machine = self.cleaned_data.get('virtual_machine') interface = self.cleaned_data.get('interface') is_primary = self.cleaned_data.get('is_primary') + is_oob = self.cleaned_data.get('is_oob') - # Validate is_primary + # Validate is_primary and is_oob if is_primary and not device and not virtual_machine: raise forms.ValidationError({ "is_primary": _("No device or virtual machine specified; cannot set as primary IP") }) + if is_oob and not device: + raise forms.ValidationError({ + "is_oob": _("No device specified; cannot set as out-of-band IP") + }) + if is_oob and virtual_machine: + raise forms.ValidationError({ + "is_oob": _("Cannot set out-of-band IP for virtual machines") + }) if is_primary and not interface: raise forms.ValidationError({ "is_primary": _("No interface specified; cannot set as primary IP") }) + if is_oob and not interface: + raise forms.ValidationError({ + "is_oob": _("No interface specified; cannot set as out-of-band IP") + }) def save(self, *args, **kwargs): @@ -386,6 +403,12 @@ class IPAddressImportForm(NetBoxModelImportForm): parent.primary_ip6 = ipaddress parent.save() + # Set as OOB for device + if self.cleaned_data.get('is_oob'): + parent = self.cleaned_data.get('device') + parent.oob_ip = ipaddress + parent.save() + return ipaddress @@ -458,10 +481,46 @@ class VLANImportForm(NetBoxModelImportForm): to_field_name='name', help_text=_('Functional role') ) + qinq_role = CSVChoiceField( + label=_('Q-in-Q role'), + choices=VLANQinQRoleChoices, + required=False, + help_text=_('Operational status') + ) + qinq_svlan = CSVModelChoiceField( + label=_('Q-in-Q SVLAN'), + queryset=VLAN.objects.all(), + required=False, + to_field_name='vid', + help_text=_("Service VLAN (for Q-in-Q/802.1ad customer VLANs)") + ) class Meta: model = VLAN - fields = ('site', 'group', 'vid', 'name', 'tenant', 'status', 'role', 'description', 'comments', 'tags') + fields = ( + 'site', 'group', 'vid', 'name', 'tenant', 'status', 'role', 'description', 'qinq_role', 'qinq_svlan', + 'comments', 'tags', + ) + + +class VLANTranslationPolicyImportForm(NetBoxModelImportForm): + + class Meta: + model = VLANTranslationPolicy + fields = ('name', 'description', 'tags') + + +class VLANTranslationRuleImportForm(NetBoxModelImportForm): + policy = CSVModelChoiceField( + label=_('Policy'), + queryset=VLANTranslationPolicy.objects.all(), + to_field_name='name', + help_text=_('VLAN translation policy') + ) + + class Meta: + model = VLANTranslationRule + fields = ('policy', 'local_vid', 'remote_vid') class ServiceTemplateImportForm(NetBoxModelImportForm): diff --git a/netbox/ipam/forms/filtersets.py b/netbox/ipam/forms/filtersets.py index a32694321..3f951512b 100644 --- a/netbox/ipam/forms/filtersets.py +++ b/netbox/ipam/forms/filtersets.py @@ -28,6 +28,8 @@ __all__ = ( 'ServiceTemplateFilterForm', 'VLANFilterForm', 'VLANGroupFilterForm', + 'VLANTranslationPolicyFilterForm', + 'VLANTranslationRuleFilterForm', 'VRFFilterForm', ) @@ -170,7 +172,7 @@ class PrefixFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm): ), FieldSet('vlan_id', name=_('VLAN Assignment')), FieldSet('vrf_id', 'present_in_vrf_id', name=_('VRF')), - FieldSet('region_id', 'site_group_id', 'site_id', name=_('Location')), + FieldSet('region_id', 'site_group_id', 'site_id', 'location_id', name=_('Scope')), FieldSet('tenant_group_id', 'tenant_id', name=_('Tenant')), ) mask_length__lte = forms.IntegerField( @@ -224,12 +226,13 @@ class PrefixFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm): site_id = DynamicModelMultipleChoiceField( queryset=Site.objects.all(), required=False, - null_option='None', - query_params={ - 'region_id': '$region_id' - }, label=_('Site') ) + location_id = DynamicModelMultipleChoiceField( + queryset=Location.objects.all(), + required=False, + label=_('Location') + ) role_id = DynamicModelMultipleChoiceField( queryset=Role.objects.all(), required=False, @@ -460,12 +463,50 @@ class VLANGroupFilterForm(NetBoxModelFilterSetForm): tag = TagFilterField(model) +class VLANTranslationPolicyFilterForm(NetBoxModelFilterSetForm): + model = VLANTranslationPolicy + fieldsets = ( + FieldSet('q', 'filter_id', 'tag'), + FieldSet('name', name=_('Attributes')), + ) + name = forms.CharField( + required=False, + label=_('Name') + ) + tag = TagFilterField(model) + + +class VLANTranslationRuleFilterForm(NetBoxModelFilterSetForm): + model = VLANTranslationRule + fieldsets = ( + FieldSet('q', 'filter_id', 'tag'), + FieldSet('policy_id', 'local_vid', 'remote_vid', name=_('Attributes')), + ) + tag = TagFilterField(model) + policy_id = DynamicModelMultipleChoiceField( + queryset=VLANTranslationPolicy.objects.all(), + required=False, + label=_('VLAN Translation Policy') + ) + local_vid = forms.IntegerField( + min_value=1, + required=False, + label=_('Local VLAN ID') + ) + remote_vid = forms.IntegerField( + min_value=1, + required=False, + label=_('Remote VLAN ID') + ) + + class VLANFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm): model = VLAN fieldsets = ( FieldSet('q', 'filter_id', 'tag'), FieldSet('region_id', 'site_group_id', 'site_id', name=_('Location')), FieldSet('group_id', 'status', 'role_id', 'vid', 'l2vpn_id', name=_('Attributes')), + FieldSet('qinq_role', 'qinq_svlan_id', name=_('Q-in-Q/802.1ad')), FieldSet('tenant_group_id', 'tenant_id', name=_('Tenant')), ) selector_fields = ('filter_id', 'q', 'site_id') @@ -512,6 +553,17 @@ class VLANFilterForm(TenancyFilterForm, NetBoxModelFilterSetForm): required=False, label=_('VLAN ID') ) + qinq_role = forms.MultipleChoiceField( + label=_('Q-in-Q role'), + choices=VLANQinQRoleChoices, + required=False + ) + qinq_svlan_id = DynamicModelMultipleChoiceField( + queryset=VLAN.objects.all(), + required=False, + null_option='None', + label=_('Q-in-Q SVLAN') + ) l2vpn_id = DynamicModelMultipleChoiceField( queryset=L2VPN.objects.all(), required=False, diff --git a/netbox/ipam/forms/model_forms.py b/netbox/ipam/forms/model_forms.py index f98f8b24f..c381f99c9 100644 --- a/netbox/ipam/forms/model_forms.py +++ b/netbox/ipam/forms/model_forms.py @@ -4,6 +4,7 @@ from django.core.exceptions import ObjectDoesNotExist, ValidationError from django.utils.translation import gettext_lazy as _ from dcim.models import Device, Interface, Site +from dcim.forms.mixins import ScopedForm from ipam.choices import * from ipam.constants import * from ipam.formfields import IPNetworkFormField @@ -41,6 +42,8 @@ __all__ = ( 'ServiceTemplateForm', 'VLANForm', 'VLANGroupForm', + 'VLANTranslationPolicyForm', + 'VLANTranslationRuleForm', 'VRFForm', ) @@ -106,7 +109,8 @@ class RIRForm(NetBoxModelForm): class AggregateForm(TenancyForm, NetBoxModelForm): rir = DynamicModelChoiceField( queryset=RIR.objects.all(), - label=_('RIR') + label=_('RIR'), + quick_add=True ) comments = CommentField() @@ -129,6 +133,7 @@ class ASNRangeForm(TenancyForm, NetBoxModelForm): rir = DynamicModelChoiceField( queryset=RIR.objects.all(), label=_('RIR'), + quick_add=True ) slug = SlugField() fieldsets = ( @@ -147,6 +152,7 @@ class ASNForm(TenancyForm, NetBoxModelForm): rir = DynamicModelChoiceField( queryset=RIR.objects.all(), label=_('RIR'), + quick_add=True ) sites = DynamicModelMultipleChoiceField( queryset=Site.objects.all(), @@ -195,19 +201,12 @@ class RoleForm(NetBoxModelForm): ] -class PrefixForm(TenancyForm, NetBoxModelForm): +class PrefixForm(TenancyForm, ScopedForm, NetBoxModelForm): vrf = DynamicModelChoiceField( queryset=VRF.objects.all(), required=False, label=_('VRF') ) - site = DynamicModelChoiceField( - label=_('Site'), - queryset=Site.objects.all(), - required=False, - selector=True, - null_option='None' - ) vlan = DynamicModelChoiceField( queryset=VLAN.objects.all(), required=False, @@ -220,7 +219,8 @@ class PrefixForm(TenancyForm, NetBoxModelForm): role = DynamicModelChoiceField( label=_('Role'), queryset=Role.objects.all(), - required=False + required=False, + quick_add=True ) comments = CommentField() @@ -228,15 +228,16 @@ class PrefixForm(TenancyForm, NetBoxModelForm): FieldSet( 'prefix', 'status', 'vrf', 'role', 'is_pool', 'mark_utilized', 'description', 'tags', name=_('Prefix') ), - FieldSet('site', 'vlan', name=_('Site/VLAN Assignment')), + FieldSet('scope_type', 'scope', name=_('Scope')), + FieldSet('vlan', name=_('VLAN Assignment')), FieldSet('tenant_group', 'tenant', name=_('Tenancy')), ) class Meta: model = Prefix fields = [ - 'prefix', 'vrf', 'site', 'vlan', 'status', 'role', 'is_pool', 'mark_utilized', 'tenant_group', 'tenant', - 'description', 'comments', 'tags', + 'prefix', 'vrf', 'vlan', 'status', 'role', 'is_pool', 'mark_utilized', 'scope_type', 'tenant_group', + 'tenant', 'description', 'comments', 'tags', ] @@ -249,7 +250,8 @@ class IPRangeForm(TenancyForm, NetBoxModelForm): role = DynamicModelChoiceField( label=_('Role'), queryset=Role.objects.all(), - required=False + required=False, + quick_add=True ) comments = CommentField() @@ -309,6 +311,10 @@ class IPAddressForm(TenancyForm, NetBoxModelForm): required=False, label=_('Make this the primary IP for the device/VM') ) + oob_for_parent = forms.BooleanField( + required=False, + label=_('Make this the out-of-band IP for the device') + ) comments = CommentField() fieldsets = ( @@ -320,7 +326,7 @@ class IPAddressForm(TenancyForm, NetBoxModelForm): FieldSet('vminterface', name=_('Virtual Machine')), FieldSet('fhrpgroup', name=_('FHRP Group')), ), - 'primary_for_parent', name=_('Assignment') + 'primary_for_parent', 'oob_for_parent', name=_('Assignment') ), FieldSet('nat_inside', name=_('NAT IP (Inside)')), ) @@ -328,8 +334,8 @@ class IPAddressForm(TenancyForm, NetBoxModelForm): class Meta: model = IPAddress fields = [ - 'address', 'vrf', 'status', 'role', 'dns_name', 'primary_for_parent', 'nat_inside', 'tenant_group', - 'tenant', 'description', 'comments', 'tags', + 'address', 'vrf', 'status', 'role', 'dns_name', 'primary_for_parent', 'oob_for_parent', 'nat_inside', + 'tenant_group', 'tenant', 'description', 'comments', 'tags', ] def __init__(self, *args, **kwargs): @@ -348,7 +354,7 @@ class IPAddressForm(TenancyForm, NetBoxModelForm): super().__init__(*args, **kwargs) - # Initialize primary_for_parent if IP address is already assigned + # Initialize parent object & fields if IP address is already assigned if self.instance.pk and self.instance.assigned_object: parent = getattr(self.instance.assigned_object, 'parent_object', None) if parent and ( @@ -357,6 +363,9 @@ class IPAddressForm(TenancyForm, NetBoxModelForm): ): self.initial['primary_for_parent'] = True + if parent and getattr(parent, 'oob_ip_id', None) == self.instance.pk: + self.initial['oob_for_parent'] = True + if type(instance.assigned_object) is Interface: self.fields['interface'].widget.add_query_params({ 'device_id': instance.assigned_object.device.pk, @@ -385,10 +394,15 @@ class IPAddressForm(TenancyForm, NetBoxModelForm): }) elif selected_objects: assigned_object = self.cleaned_data[selected_objects[0]] - if self.instance.pk and self.instance.assigned_object and self.cleaned_data['primary_for_parent'] and assigned_object != self.instance.assigned_object: - raise ValidationError( - _("Cannot reassign IP address while it is designated as the primary IP for the parent object") - ) + if self.instance.pk and self.instance.assigned_object and assigned_object != self.instance.assigned_object: + if self.cleaned_data['primary_for_parent']: + raise ValidationError( + _("Cannot reassign primary IP address for the parent device/VM") + ) + if self.cleaned_data['oob_for_parent']: + raise ValidationError( + _("Cannot reassign out-of-Band IP address for the parent device") + ) self.instance.assigned_object = assigned_object else: self.instance.assigned_object = None @@ -400,6 +414,16 @@ class IPAddressForm(TenancyForm, NetBoxModelForm): 'primary_for_parent', _("Only IP addresses assigned to an interface can be designated as primary IPs.") ) + # OOB IP assignment is only available if device interface has been assigned. + interface = self.cleaned_data.get('interface') + if self.cleaned_data.get('oob_for_parent') and not interface: + self.add_error( + 'oob_for_parent', _( + "Only IP addresses assigned to a device interface can be designated as the out-of-band IP for a " + "device." + ) + ) + def save(self, *args, **kwargs): ipaddress = super().save(*args, **kwargs) @@ -421,6 +445,17 @@ class IPAddressForm(TenancyForm, NetBoxModelForm): parent.primary_ip6 = None parent.save() + # Assign/clear this IPAddress as the OOB for the associated Device + if type(interface) is Interface: + parent = interface.parent_object + parent.snapshot() + if self.cleaned_data['oob_for_parent']: + parent.oob_ip = ipaddress + parent.save() + elif parent.oob_ip == ipaddress: + parent.oob_ip = None + parent.save() + return ipaddress @@ -591,7 +626,7 @@ class VLANGroupForm(NetBoxModelForm): class Meta: model = VLANGroup fields = [ - 'name', 'slug', 'description', 'vid_ranges', 'scope_type', 'scope', 'tags', + 'name', 'slug', 'description', 'vid_ranges', 'scope_type', 'tags', ] def __init__(self, *args, **kwargs): @@ -642,15 +677,55 @@ class VLANForm(TenancyForm, NetBoxModelForm): role = DynamicModelChoiceField( label=_('Role'), queryset=Role.objects.all(), - required=False + required=False, + quick_add=True + ) + qinq_svlan = DynamicModelChoiceField( + label=_('Q-in-Q SVLAN'), + queryset=VLAN.objects.all(), + required=False, + query_params={ + 'qinq_role': VLANQinQRoleChoices.ROLE_SERVICE, + } ) comments = CommentField() class Meta: model = VLAN fields = [ - 'site', 'group', 'vid', 'name', 'status', 'role', 'tenant_group', 'tenant', 'description', 'comments', - 'tags', + 'site', 'group', 'vid', 'name', 'status', 'role', 'tenant_group', 'tenant', 'qinq_role', 'qinq_svlan', + 'description', 'comments', 'tags', + ] + + +class VLANTranslationPolicyForm(NetBoxModelForm): + + fieldsets = ( + FieldSet('name', 'description', 'tags', name=_('VLAN Translation Policy')), + ) + + class Meta: + model = VLANTranslationPolicy + fields = [ + 'name', 'description', 'tags', + ] + + +class VLANTranslationRuleForm(NetBoxModelForm): + policy = DynamicModelChoiceField( + label=_('Policy'), + queryset=VLANTranslationPolicy.objects.all(), + selector=True + ) + + fieldsets = ( + FieldSet('policy', 'local_vid', 'remote_vid', 'description', 'tags', name=_('VLAN Translation Rule')), + ) + + class Meta: + model = VLANTranslationRule + fields = [ + 'policy', 'local_vid', 'remote_vid', 'description', 'tags', ] diff --git a/netbox/ipam/graphql/filters.py b/netbox/ipam/graphql/filters.py index 5f6602416..1b0e0133b 100644 --- a/netbox/ipam/graphql/filters.py +++ b/netbox/ipam/graphql/filters.py @@ -19,6 +19,8 @@ __all__ = ( 'ServiceTemplateFilter', 'VLANFilter', 'VLANGroupFilter', + 'VLANTranslationPolicyFilter', + 'VLANTranslationRuleFilter', 'VRFFilter', ) @@ -113,6 +115,18 @@ class VLANGroupFilter(BaseFilterMixin): pass +@strawberry_django.filter(models.VLANTranslationPolicy, lookups=True) +@autotype_decorator(filtersets.VLANTranslationPolicyFilterSet) +class VLANTranslationPolicyFilter(BaseFilterMixin): + pass + + +@strawberry_django.filter(models.VLANTranslationRule, lookups=True) +@autotype_decorator(filtersets.VLANTranslationRuleFilterSet) +class VLANTranslationRuleFilter(BaseFilterMixin): + pass + + @strawberry_django.filter(models.VRF, lookups=True) @autotype_decorator(filtersets.VRFFilterSet) class VRFFilter(BaseFilterMixin): diff --git a/netbox/ipam/graphql/schema.py b/netbox/ipam/graphql/schema.py index 072f8cbcd..5fcf78ea9 100644 --- a/netbox/ipam/graphql/schema.py +++ b/netbox/ipam/graphql/schema.py @@ -53,5 +53,11 @@ class IPAMQuery: vlan_group: VLANGroupType = strawberry_django.field() vlan_group_list: List[VLANGroupType] = strawberry_django.field() + vlan_translation_policy: VLANTranslationPolicyType = strawberry_django.field() + vlan_translation_policy_list: List[VLANTranslationPolicyType] = strawberry_django.field() + + vlan_translation_rule: VLANTranslationRuleType = strawberry_django.field() + vlan_translation_rule_list: List[VLANTranslationRuleType] = strawberry_django.field() + vrf: VRFType = strawberry_django.field() vrf_list: List[VRFType] = strawberry_django.field() diff --git a/netbox/ipam/graphql/types.py b/netbox/ipam/graphql/types.py index 46d45816e..e6ecca984 100644 --- a/netbox/ipam/graphql/types.py +++ b/netbox/ipam/graphql/types.py @@ -27,6 +27,8 @@ __all__ = ( 'ServiceTemplateType', 'VLANType', 'VLANGroupType', + 'VLANTranslationPolicyType', + 'VLANTranslationRuleType', 'VRFType', ) @@ -152,17 +154,25 @@ class IPRangeType(NetBoxObjectType): @strawberry_django.type( models.Prefix, - fields='__all__', + exclude=('scope_type', 'scope_id', '_location', '_region', '_site', '_site_group'), filters=PrefixFilter ) class PrefixType(NetBoxObjectType, BaseIPAddressFamilyType): prefix: str - site: Annotated["SiteType", strawberry.lazy('dcim.graphql.types')] | None vrf: Annotated["VRFType", strawberry.lazy('ipam.graphql.types')] | None tenant: Annotated["TenantType", strawberry.lazy('tenancy.graphql.types')] | None vlan: Annotated["VLANType", strawberry.lazy('ipam.graphql.types')] | None role: Annotated["RoleType", strawberry.lazy('ipam.graphql.types')] | None + @strawberry_django.field + def scope(self) -> Annotated[Union[ + Annotated["LocationType", strawberry.lazy('dcim.graphql.types')], + Annotated["RegionType", strawberry.lazy('dcim.graphql.types')], + Annotated["SiteGroupType", strawberry.lazy('dcim.graphql.types')], + Annotated["SiteType", strawberry.lazy('dcim.graphql.types')], + ], strawberry.union("PrefixScopeType")] | None: + return self.scope + @strawberry_django.type( models.RIR, @@ -226,7 +236,7 @@ class ServiceTemplateType(NetBoxObjectType): @strawberry_django.type( models.VLAN, - fields='__all__', + exclude=('qinq_svlan',), filters=VLANFilter ) class VLANType(NetBoxObjectType): @@ -242,6 +252,10 @@ class VLANType(NetBoxObjectType): interfaces_as_tagged: List[Annotated["InterfaceType", strawberry.lazy('dcim.graphql.types')]] vminterfaces_as_tagged: List[Annotated["VMInterfaceType", strawberry.lazy('virtualization.graphql.types')]] + @strawberry_django.field + def qinq_svlan(self) -> Annotated["VLANType", strawberry.lazy('ipam.graphql.types')] | None: + return self.qinq_svlan + @strawberry_django.type( models.VLANGroup, @@ -266,6 +280,27 @@ class VLANGroupType(OrganizationalObjectType): return self.scope +@strawberry_django.type( + models.VLANTranslationPolicy, + fields='__all__', + filters=VLANTranslationPolicyFilter +) +class VLANTranslationPolicyType(NetBoxObjectType): + rules: List[Annotated["VLANTranslationRuleType", strawberry.lazy('ipam.graphql.types')]] + + +@strawberry_django.type( + models.VLANTranslationRule, + fields='__all__', + filters=VLANTranslationRuleFilter +) +class VLANTranslationRuleType(NetBoxObjectType): + policy: Annotated[ + "VLANTranslationPolicyType", + strawberry.lazy('ipam.graphql.types') + ] = strawberry_django.field(select_related=["policy"]) + + @strawberry_django.type( models.VRF, fields='__all__', diff --git a/netbox/ipam/lookups.py b/netbox/ipam/lookups.py index c6abb5a26..c493b7876 100644 --- a/netbox/ipam/lookups.py +++ b/netbox/ipam/lookups.py @@ -108,8 +108,8 @@ class NetIn(Lookup): return self.rhs def as_sql(self, qn, connection): - lhs, lhs_params = self.process_lhs(qn, connection) - rhs, rhs_params = self.process_rhs(qn, connection) + lhs = self.process_lhs(qn, connection)[0] + rhs_params = self.process_rhs(qn, connection)[1] with_mask, without_mask = [], [] for address in rhs_params[0]: if '/' in address: diff --git a/netbox/ipam/migrations/0001_squashed.py b/netbox/ipam/migrations/0001_squashed.py index bef36e698..896d7c4c9 100644 --- a/netbox/ipam/migrations/0001_squashed.py +++ b/netbox/ipam/migrations/0001_squashed.py @@ -9,7 +9,6 @@ import taggit.managers class Migration(migrations.Migration): - initial = True dependencies = [ @@ -50,7 +49,23 @@ class Migration(migrations.Migration): ('status', models.CharField(default='active', max_length=50)), ('role', models.CharField(blank=True, max_length=50)), ('assigned_object_id', models.PositiveIntegerField(blank=True, null=True)), - ('dns_name', models.CharField(blank=True, max_length=255, validators=[django.core.validators.RegexValidator(code='invalid', message='Only alphanumeric characters, asterisks, hyphens, periods, and underscores are allowed in DNS names', regex='^([0-9A-Za-z_-]+|\\*)(\\.[0-9A-Za-z_-]+)*\\.?$')])), + ( + 'dns_name', + models.CharField( + blank=True, + max_length=255, + validators=[ + django.core.validators.RegexValidator( + code='invalid', + message=( + 'Only alphanumeric characters, asterisks, hyphens, periods, and underscores are ' + 'allowed in DNS names' + ), + regex='^([0-9A-Za-z_-]+|\\*)(\\.[0-9A-Za-z_-]+)*\\.?$', + ) + ], + ), + ), ('description', models.CharField(blank=True, max_length=200)), ], options={ @@ -73,7 +88,11 @@ class Migration(migrations.Migration): ], options={ 'verbose_name_plural': 'prefixes', - 'ordering': (django.db.models.expressions.OrderBy(django.db.models.expressions.F('vrf'), nulls_first=True), 'prefix', 'pk'), + 'ordering': ( + django.db.models.expressions.OrderBy(django.db.models.expressions.F('vrf'), nulls_first=True), + 'prefix', + 'pk', + ), }, ), migrations.CreateModel( @@ -135,10 +154,25 @@ class Migration(migrations.Migration): ('rd', models.CharField(blank=True, max_length=21, null=True, unique=True)), ('enforce_unique', models.BooleanField(default=True)), ('description', models.CharField(blank=True, max_length=200)), - ('export_targets', models.ManyToManyField(blank=True, related_name='exporting_vrfs', to='ipam.RouteTarget')), - ('import_targets', models.ManyToManyField(blank=True, related_name='importing_vrfs', to='ipam.RouteTarget')), + ( + 'export_targets', + models.ManyToManyField(blank=True, related_name='exporting_vrfs', to='ipam.RouteTarget'), + ), + ( + 'import_targets', + models.ManyToManyField(blank=True, related_name='importing_vrfs', to='ipam.RouteTarget'), + ), ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), - ('tenant', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='vrfs', to='tenancy.tenant')), + ( + 'tenant', + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='vrfs', + to='tenancy.tenant', + ), + ), ], options={ 'verbose_name': 'VRF', @@ -157,7 +191,21 @@ class Migration(migrations.Migration): ('slug', models.SlugField(max_length=100)), ('scope_id', models.PositiveBigIntegerField(blank=True, null=True)), ('description', models.CharField(blank=True, max_length=200)), - ('scope_type', models.ForeignKey(blank=True, limit_choices_to=models.Q(('model__in', ('region', 'sitegroup', 'site', 'location', 'rack', 'clustergroup', 'cluster'))), null=True, on_delete=django.db.models.deletion.CASCADE, to='contenttypes.contenttype')), + ( + 'scope_type', + models.ForeignKey( + blank=True, + limit_choices_to=models.Q( + ( + 'model__in', + ('region', 'sitegroup', 'site', 'location', 'rack', 'clustergroup', 'cluster'), + ) + ), + null=True, + on_delete=django.db.models.deletion.CASCADE, + to='contenttypes.contenttype', + ), + ), ], options={ 'verbose_name': 'VLAN group', @@ -172,15 +220,59 @@ class Migration(migrations.Migration): ('last_updated', models.DateTimeField(auto_now=True, null=True)), ('custom_field_data', models.JSONField(blank=True, default=dict, encoder=CustomFieldJSONEncoder)), ('id', models.BigAutoField(primary_key=True, serialize=False)), - ('vid', models.PositiveSmallIntegerField(validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(4094)])), + ( + 'vid', + models.PositiveSmallIntegerField( + validators=[ + django.core.validators.MinValueValidator(1), + django.core.validators.MaxValueValidator(4094), + ] + ), + ), ('name', models.CharField(max_length=64)), ('status', models.CharField(default='active', max_length=50)), ('description', models.CharField(blank=True, max_length=200)), - ('group', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='vlans', to='ipam.vlangroup')), - ('role', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='vlans', to='ipam.role')), - ('site', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='vlans', to='dcim.site')), + ( + 'group', + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='vlans', + to='ipam.vlangroup', + ), + ), + ( + 'role', + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='vlans', + to='ipam.role', + ), + ), + ( + 'site', + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='vlans', + to='dcim.site', + ), + ), ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), - ('tenant', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='vlans', to='tenancy.tenant')), + ( + 'tenant', + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='vlans', + to='tenancy.tenant', + ), + ), ], options={ 'verbose_name': 'VLAN', @@ -197,9 +289,29 @@ class Migration(migrations.Migration): ('id', models.BigAutoField(primary_key=True, serialize=False)), ('name', models.CharField(max_length=100)), ('protocol', models.CharField(max_length=50)), - ('ports', django.contrib.postgres.fields.ArrayField(base_field=models.PositiveIntegerField(validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(65535)]), size=None)), + ( + 'ports', + django.contrib.postgres.fields.ArrayField( + base_field=models.PositiveIntegerField( + validators=[ + django.core.validators.MinValueValidator(1), + django.core.validators.MaxValueValidator(65535), + ] + ), + size=None, + ), + ), ('description', models.CharField(blank=True, max_length=200)), - ('device', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='services', to='dcim.device')), + ( + 'device', + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name='services', + to='dcim.device', + ), + ), ('ipaddresses', models.ManyToManyField(blank=True, related_name='services', to='ipam.IPAddress')), ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), ], diff --git a/netbox/ipam/migrations/0002_squashed_0046.py b/netbox/ipam/migrations/0002_squashed_0046.py index 06bcd8741..6c03753d8 100644 --- a/netbox/ipam/migrations/0002_squashed_0046.py +++ b/netbox/ipam/migrations/0002_squashed_0046.py @@ -4,7 +4,6 @@ import taggit.managers class Migration(migrations.Migration): - dependencies = [ ('dcim', '0003_auto_20160628_1721'), ('virtualization', '0001_virtualization'), @@ -66,7 +65,13 @@ class Migration(migrations.Migration): migrations.AddField( model_name='service', name='virtual_machine', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='services', to='virtualization.virtualmachine'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name='services', + to='virtualization.virtualmachine', + ), ), migrations.AddField( model_name='routetarget', @@ -76,17 +81,35 @@ class Migration(migrations.Migration): migrations.AddField( model_name='routetarget', name='tenant', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='route_targets', to='tenancy.tenant'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='route_targets', + to='tenancy.tenant', + ), ), migrations.AddField( model_name='prefix', name='role', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='prefixes', to='ipam.role'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='prefixes', + to='ipam.role', + ), ), migrations.AddField( model_name='prefix', name='site', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='prefixes', to='dcim.site'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='prefixes', + to='dcim.site', + ), ), migrations.AddField( model_name='prefix', @@ -96,27 +119,64 @@ class Migration(migrations.Migration): migrations.AddField( model_name='prefix', name='tenant', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='prefixes', to='tenancy.tenant'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='prefixes', + to='tenancy.tenant', + ), ), migrations.AddField( model_name='prefix', name='vlan', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='prefixes', to='ipam.vlan'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='prefixes', + to='ipam.vlan', + ), ), migrations.AddField( model_name='prefix', name='vrf', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='prefixes', to='ipam.vrf'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='prefixes', + to='ipam.vrf', + ), ), migrations.AddField( model_name='ipaddress', name='assigned_object_type', - field=models.ForeignKey(blank=True, limit_choices_to=models.Q(models.Q(models.Q(('app_label', 'dcim'), ('model', 'interface')), models.Q(('app_label', 'virtualization'), ('model', 'vminterface')), _connector='OR')), null=True, on_delete=django.db.models.deletion.PROTECT, related_name='+', to='contenttypes.contenttype'), + field=models.ForeignKey( + blank=True, + limit_choices_to=models.Q( + models.Q( + models.Q(('app_label', 'dcim'), ('model', 'interface')), + models.Q(('app_label', 'virtualization'), ('model', 'vminterface')), + _connector='OR', + ) + ), + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='+', + to='contenttypes.contenttype', + ), ), migrations.AddField( model_name='ipaddress', name='nat_inside', - field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='nat_outside', to='ipam.ipaddress'), + field=models.OneToOneField( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='nat_outside', + to='ipam.ipaddress', + ), ), migrations.AddField( model_name='ipaddress', @@ -126,17 +186,31 @@ class Migration(migrations.Migration): migrations.AddField( model_name='ipaddress', name='tenant', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='ip_addresses', to='tenancy.tenant'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='ip_addresses', + to='tenancy.tenant', + ), ), migrations.AddField( model_name='ipaddress', name='vrf', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='ip_addresses', to='ipam.vrf'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='ip_addresses', + to='ipam.vrf', + ), ), migrations.AddField( model_name='aggregate', name='rir', - field=models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='aggregates', to='ipam.rir'), + field=models.ForeignKey( + on_delete=django.db.models.deletion.PROTECT, related_name='aggregates', to='ipam.rir' + ), ), migrations.AddField( model_name='aggregate', @@ -146,7 +220,13 @@ class Migration(migrations.Migration): migrations.AddField( model_name='aggregate', name='tenant', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='aggregates', to='tenancy.tenant'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='aggregates', + to='tenancy.tenant', + ), ), migrations.AlterUniqueTogether( name='vlangroup', diff --git a/netbox/ipam/migrations/0047_squashed_0053.py b/netbox/ipam/migrations/0047_squashed_0053.py index 470261316..a05d0cb81 100644 --- a/netbox/ipam/migrations/0047_squashed_0053.py +++ b/netbox/ipam/migrations/0047_squashed_0053.py @@ -8,7 +8,6 @@ import utilities.json class Migration(migrations.Migration): - replaces = [ ('ipam', '0047_prefix_depth_children'), ('ipam', '0048_prefix_populate_depth_children'), @@ -16,7 +15,7 @@ class Migration(migrations.Migration): ('ipam', '0050_iprange'), ('ipam', '0051_extend_tag_support'), ('ipam', '0052_fhrpgroup'), - ('ipam', '0053_asn_model') + ('ipam', '0053_asn_model'), ] dependencies = [ @@ -47,17 +46,47 @@ class Migration(migrations.Migration): fields=[ ('created', models.DateField(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)), + ( + 'custom_field_data', + models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder), + ), ('id', models.BigAutoField(primary_key=True, serialize=False)), ('start_address', ipam.fields.IPAddressField()), ('end_address', ipam.fields.IPAddressField()), ('size', models.PositiveIntegerField(editable=False)), ('status', models.CharField(default='active', max_length=50)), ('description', models.CharField(blank=True, max_length=200)), - ('role', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='ip_ranges', to='ipam.role')), + ( + 'role', + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='ip_ranges', + to='ipam.role', + ), + ), ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), - ('tenant', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='ip_ranges', to='tenancy.tenant')), - ('vrf', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='ip_ranges', to='ipam.vrf')), + ( + 'tenant', + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='ip_ranges', + to='tenancy.tenant', + ), + ), + ( + 'vrf', + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='ip_ranges', + to='ipam.vrf', + ), + ), ], options={ 'verbose_name': 'IP range', @@ -85,7 +114,10 @@ class Migration(migrations.Migration): fields=[ ('created', models.DateField(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)), + ( + 'custom_field_data', + models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder), + ), ('id', models.BigAutoField(primary_key=True, serialize=False)), ('group_id', models.PositiveSmallIntegerField()), ('protocol', models.CharField(max_length=50)), @@ -102,7 +134,21 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='ipaddress', name='assigned_object_type', - field=models.ForeignKey(blank=True, limit_choices_to=models.Q(models.Q(models.Q(('app_label', 'dcim'), ('model', 'interface')), models.Q(('app_label', 'ipam'), ('model', 'fhrpgroup')), models.Q(('app_label', 'virtualization'), ('model', 'vminterface')), _connector='OR')), null=True, on_delete=django.db.models.deletion.PROTECT, related_name='+', to='contenttypes.contenttype'), + field=models.ForeignKey( + blank=True, + limit_choices_to=models.Q( + models.Q( + models.Q(('app_label', 'dcim'), ('model', 'interface')), + models.Q(('app_label', 'ipam'), ('model', 'fhrpgroup')), + models.Q(('app_label', 'virtualization'), ('model', 'vminterface')), + _connector='OR', + ) + ), + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='+', + to='contenttypes.contenttype', + ), ), migrations.CreateModel( name='FHRPGroupAssignment', @@ -111,9 +157,20 @@ class Migration(migrations.Migration): ('last_updated', models.DateTimeField(auto_now=True, null=True)), ('id', models.BigAutoField(primary_key=True, serialize=False)), ('interface_id', models.PositiveIntegerField()), - ('priority', models.PositiveSmallIntegerField(validators=[django.core.validators.MinValueValidator(0), django.core.validators.MaxValueValidator(255)])), + ( + 'priority', + models.PositiveSmallIntegerField( + validators=[ + django.core.validators.MinValueValidator(0), + django.core.validators.MaxValueValidator(255), + ] + ), + ), ('group', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='ipam.fhrpgroup')), - ('interface_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.contenttype')), + ( + 'interface_type', + models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.contenttype'), + ), ], options={ 'verbose_name': 'FHRP group assignment', @@ -126,13 +183,28 @@ class Migration(migrations.Migration): fields=[ ('created', models.DateField(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)), + ( + 'custom_field_data', + models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder), + ), ('id', models.BigAutoField(primary_key=True, serialize=False)), ('asn', ipam.fields.ASNField(unique=True)), ('description', models.CharField(blank=True, max_length=200)), - ('rir', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='asns', to='ipam.rir')), + ( + 'rir', + models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='asns', to='ipam.rir'), + ), ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), - ('tenant', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='asns', to='tenancy.tenant')), + ( + 'tenant', + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='asns', + to='tenancy.tenant', + ), + ), ], options={ 'verbose_name': 'ASN', diff --git a/netbox/ipam/migrations/0054_squashed_0067.py b/netbox/ipam/migrations/0054_squashed_0067.py index 40073ca29..929a27fda 100644 --- a/netbox/ipam/migrations/0054_squashed_0067.py +++ b/netbox/ipam/migrations/0054_squashed_0067.py @@ -10,7 +10,6 @@ import utilities.json class Migration(migrations.Migration): - replaces = [ ('ipam', '0054_vlangroup_min_max_vids'), ('ipam', '0055_servicetemplate'), @@ -25,7 +24,7 @@ class Migration(migrations.Migration): ('ipam', '0064_clear_search_cache'), ('ipam', '0065_asnrange'), ('ipam', '0066_iprange_mark_utilized'), - ('ipam', '0067_ipaddress_index_host') + ('ipam', '0067_ipaddress_index_host'), ] dependencies = [ @@ -40,12 +39,24 @@ class Migration(migrations.Migration): migrations.AddField( model_name='vlangroup', name='max_vid', - field=models.PositiveSmallIntegerField(default=4094, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(4094)]), + field=models.PositiveSmallIntegerField( + default=4094, + validators=[ + django.core.validators.MinValueValidator(1), + django.core.validators.MaxValueValidator(4094), + ], + ), ), migrations.AddField( model_name='vlangroup', name='min_vid', - field=models.PositiveSmallIntegerField(default=1, validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(4094)]), + field=models.PositiveSmallIntegerField( + default=1, + validators=[ + django.core.validators.MinValueValidator(1), + django.core.validators.MaxValueValidator(4094), + ], + ), ), migrations.AlterField( model_name='aggregate', @@ -187,10 +198,24 @@ class Migration(migrations.Migration): fields=[ ('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)), + ( + 'custom_field_data', + models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder), + ), ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), ('protocol', models.CharField(max_length=50)), - ('ports', django.contrib.postgres.fields.ArrayField(base_field=models.PositiveIntegerField(validators=[django.core.validators.MinValueValidator(1), django.core.validators.MaxValueValidator(65535)]), size=None)), + ( + 'ports', + django.contrib.postgres.fields.ArrayField( + base_field=models.PositiveIntegerField( + validators=[ + django.core.validators.MinValueValidator(1), + django.core.validators.MaxValueValidator(65535), + ] + ), + size=None, + ), + ), ('description', models.CharField(blank=True, max_length=200)), ('name', models.CharField(max_length=100, unique=True)), ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), @@ -217,7 +242,13 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='ipaddress', name='nat_inside', - field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='nat_outside', to='ipam.ipaddress'), + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='nat_outside', + to='ipam.ipaddress', + ), ), migrations.CreateModel( name='L2VPN', @@ -225,16 +256,34 @@ class Migration(migrations.Migration): ('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)), + ( + 'custom_field_data', + models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder), + ), ('name', models.CharField(max_length=100, unique=True)), ('slug', models.SlugField(max_length=100, unique=True)), ('type', models.CharField(max_length=50)), ('identifier', models.BigIntegerField(blank=True, null=True)), ('description', models.CharField(blank=True, max_length=200)), - ('export_targets', models.ManyToManyField(blank=True, related_name='exporting_l2vpns', to='ipam.routetarget')), - ('import_targets', models.ManyToManyField(blank=True, related_name='importing_l2vpns', to='ipam.routetarget')), + ( + 'export_targets', + models.ManyToManyField(blank=True, related_name='exporting_l2vpns', to='ipam.routetarget'), + ), + ( + 'import_targets', + models.ManyToManyField(blank=True, related_name='importing_l2vpns', to='ipam.routetarget'), + ), ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), - ('tenant', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='l2vpns', to='tenancy.tenant')), + ( + 'tenant', + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='l2vpns', + to='tenancy.tenant', + ), + ), ], options={ 'verbose_name': 'L2VPN', @@ -247,10 +296,33 @@ class Migration(migrations.Migration): ('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)), + ( + 'custom_field_data', + models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder), + ), ('assigned_object_id', models.PositiveBigIntegerField()), - ('assigned_object_type', models.ForeignKey(limit_choices_to=models.Q(models.Q(models.Q(('app_label', 'dcim'), ('model', 'interface')), models.Q(('app_label', 'ipam'), ('model', 'vlan')), models.Q(('app_label', 'virtualization'), ('model', 'vminterface')), _connector='OR')), on_delete=django.db.models.deletion.PROTECT, related_name='+', to='contenttypes.contenttype')), - ('l2vpn', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='terminations', to='ipam.l2vpn')), + ( + 'assigned_object_type', + models.ForeignKey( + limit_choices_to=models.Q( + models.Q( + models.Q(('app_label', 'dcim'), ('model', 'interface')), + models.Q(('app_label', 'ipam'), ('model', 'vlan')), + models.Q(('app_label', 'virtualization'), ('model', 'vminterface')), + _connector='OR', + ) + ), + on_delete=django.db.models.deletion.PROTECT, + related_name='+', + to='contenttypes.contenttype', + ), + ), + ( + 'l2vpn', + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, related_name='terminations', to='ipam.l2vpn' + ), + ), ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), ], options={ @@ -260,7 +332,9 @@ class Migration(migrations.Migration): ), migrations.AddConstraint( model_name='l2vpntermination', - constraint=models.UniqueConstraint(fields=('assigned_object_type', 'assigned_object_id'), name='ipam_l2vpntermination_assigned_object'), + constraint=models.UniqueConstraint( + fields=('assigned_object_type', 'assigned_object_id'), name='ipam_l2vpntermination_assigned_object' + ), ), migrations.AddField( model_name='fhrpgroup', @@ -281,7 +355,10 @@ class Migration(migrations.Migration): ), migrations.AddConstraint( model_name='fhrpgroupassignment', - constraint=models.UniqueConstraint(fields=('interface_type', 'interface_id', 'group'), name='ipam_fhrpgroupassignment_unique_interface_group'), + constraint=models.UniqueConstraint( + fields=('interface_type', 'interface_id', 'group'), + name='ipam_fhrpgroupassignment_unique_interface_group', + ), ), migrations.AddConstraint( model_name='vlan', @@ -293,11 +370,15 @@ class Migration(migrations.Migration): ), migrations.AddConstraint( model_name='vlangroup', - constraint=models.UniqueConstraint(fields=('scope_type', 'scope_id', 'name'), name='ipam_vlangroup_unique_scope_name'), + constraint=models.UniqueConstraint( + fields=('scope_type', 'scope_id', 'name'), name='ipam_vlangroup_unique_scope_name' + ), ), migrations.AddConstraint( model_name='vlangroup', - constraint=models.UniqueConstraint(fields=('scope_type', 'scope_id', 'slug'), name='ipam_vlangroup_unique_scope_slug'), + constraint=models.UniqueConstraint( + fields=('scope_type', 'scope_id', 'slug'), name='ipam_vlangroup_unique_scope_slug' + ), ), migrations.AddField( model_name='aggregate', @@ -365,15 +446,32 @@ class Migration(migrations.Migration): ('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)), + ( + 'custom_field_data', + models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder), + ), ('description', models.CharField(blank=True, max_length=200)), ('name', models.CharField(max_length=100, unique=True)), ('slug', models.SlugField(max_length=100, unique=True)), ('start', ipam.fields.ASNField()), ('end', ipam.fields.ASNField()), - ('rir', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='asn_ranges', to='ipam.rir')), + ( + 'rir', + models.ForeignKey( + on_delete=django.db.models.deletion.PROTECT, related_name='asn_ranges', to='ipam.rir' + ), + ), ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), - ('tenant', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='asn_ranges', to='tenancy.tenant')), + ( + 'tenant', + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='asn_ranges', + to='tenancy.tenant', + ), + ), ], options={ 'verbose_name': 'ASN range', @@ -388,6 +486,11 @@ class Migration(migrations.Migration): ), migrations.AddIndex( model_name='ipaddress', - index=models.Index(django.db.models.functions.comparison.Cast(ipam.lookups.Host('address'), output_field=ipam.fields.IPAddressField()), name='ipam_ipaddress_host'), + index=models.Index( + django.db.models.functions.comparison.Cast( + ipam.lookups.Host('address'), output_field=ipam.fields.IPAddressField() + ), + name='ipam_ipaddress_host', + ), ), ] diff --git a/netbox/ipam/migrations/0068_move_l2vpn.py b/netbox/ipam/migrations/0068_move_l2vpn.py index b1a059de1..9240240bc 100644 --- a/netbox/ipam/migrations/0068_move_l2vpn.py +++ b/netbox/ipam/migrations/0068_move_l2vpn.py @@ -15,7 +15,6 @@ def update_content_types(apps, schema_editor): class Migration(migrations.Migration): - dependencies = [ ('ipam', '0067_ipaddress_index_host'), ] @@ -57,8 +56,5 @@ class Migration(migrations.Migration): ), ], ), - migrations.RunPython( - code=update_content_types, - reverse_code=migrations.RunPython.noop - ), + migrations.RunPython(code=update_content_types, reverse_code=migrations.RunPython.noop), ] diff --git a/netbox/ipam/migrations/0069_gfk_indexes.py b/netbox/ipam/migrations/0069_gfk_indexes.py index 75c016102..d7ce48e35 100644 --- a/netbox/ipam/migrations/0069_gfk_indexes.py +++ b/netbox/ipam/migrations/0069_gfk_indexes.py @@ -4,7 +4,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('ipam', '0068_move_l2vpn'), ] @@ -16,7 +15,9 @@ class Migration(migrations.Migration): ), migrations.AddIndex( model_name='ipaddress', - index=models.Index(fields=['assigned_object_type', 'assigned_object_id'], name='ipam_ipaddr_assigne_890ab8_idx'), + index=models.Index( + fields=['assigned_object_type', 'assigned_object_id'], name='ipam_ipaddr_assigne_890ab8_idx' + ), ), migrations.AddIndex( model_name='vlangroup', diff --git a/netbox/ipam/migrations/0070_vlangroup_vlan_id_ranges.py b/netbox/ipam/migrations/0070_vlangroup_vlan_id_ranges.py index b01941401..133173234 100644 --- a/netbox/ipam/migrations/0070_vlangroup_vlan_id_ranges.py +++ b/netbox/ipam/migrations/0070_vlangroup_vlan_id_ranges.py @@ -12,15 +12,12 @@ def set_vid_ranges(apps, schema_editor): """ VLANGroup = apps.get_model('ipam', 'VLANGroup') for group in VLANGroup.objects.all(): - group.vid_ranges = [ - NumericRange(group.min_vid, group.max_vid, bounds='[]') - ] + group.vid_ranges = [NumericRange(group.min_vid, group.max_vid, bounds='[]')] group._total_vlan_ids = group.max_vid - group.min_vid + 1 group.save() class Migration(migrations.Migration): - dependencies = [ ('ipam', '0069_gfk_indexes'), ] @@ -32,7 +29,7 @@ class Migration(migrations.Migration): field=django.contrib.postgres.fields.ArrayField( base_field=django.contrib.postgres.fields.ranges.IntegerRangeField(), default=ipam.models.vlans.default_vid_ranges, - size=None + size=None, ), ), migrations.AddField( @@ -40,10 +37,7 @@ class Migration(migrations.Migration): name='_total_vlan_ids', field=models.PositiveBigIntegerField(default=4094), ), - migrations.RunPython( - code=set_vid_ranges, - reverse_code=migrations.RunPython.noop - ), + migrations.RunPython(code=set_vid_ranges, reverse_code=migrations.RunPython.noop), migrations.RemoveField( model_name='vlangroup', name='max_vid', diff --git a/netbox/ipam/migrations/0071_prefix_scope.py b/netbox/ipam/migrations/0071_prefix_scope.py new file mode 100644 index 000000000..2ab54d023 --- /dev/null +++ b/netbox/ipam/migrations/0071_prefix_scope.py @@ -0,0 +1,45 @@ +import django.db.models.deletion +from django.db import migrations, models + + +def copy_site_assignments(apps, schema_editor): + """ + Copy site ForeignKey values to the scope GFK. + """ + ContentType = apps.get_model('contenttypes', 'ContentType') + Prefix = apps.get_model('ipam', 'Prefix') + Site = apps.get_model('dcim', 'Site') + + Prefix.objects.filter(site__isnull=False).update( + scope_type=ContentType.objects.get_for_model(Site), scope_id=models.F('site_id') + ) + + +class Migration(migrations.Migration): + dependencies = [ + ('contenttypes', '0002_remove_content_type_name'), + ('ipam', '0070_vlangroup_vlan_id_ranges'), + ] + + operations = [ + # Add the `scope` GenericForeignKey + migrations.AddField( + model_name='prefix', + name='scope_id', + field=models.PositiveBigIntegerField(blank=True, null=True), + ), + migrations.AddField( + model_name='prefix', + name='scope_type', + field=models.ForeignKey( + blank=True, + limit_choices_to=models.Q(('model__in', ('region', 'sitegroup', 'site', 'location'))), + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='+', + to='contenttypes.contenttype', + ), + ), + # Copy over existing site assignments + migrations.RunPython(code=copy_site_assignments, reverse_code=migrations.RunPython.noop), + ] diff --git a/netbox/ipam/migrations/0072_prefix_cached_relations.py b/netbox/ipam/migrations/0072_prefix_cached_relations.py new file mode 100644 index 000000000..58cefb12d --- /dev/null +++ b/netbox/ipam/migrations/0072_prefix_cached_relations.py @@ -0,0 +1,61 @@ +import django.db.models.deletion +from django.db import migrations, models + + +def populate_denormalized_fields(apps, schema_editor): + """ + Copy site ForeignKey values to the scope GFK. + """ + Prefix = apps.get_model('ipam', 'Prefix') + + prefixes = Prefix.objects.filter(site__isnull=False).prefetch_related('site') + for prefix in prefixes: + prefix._region_id = prefix.site.region_id + prefix._site_group_id = prefix.site.group_id + prefix._site_id = prefix.site_id + # Note: Location cannot be set prior to migration + + Prefix.objects.bulk_update(prefixes, ['_region', '_site_group', '_site'], batch_size=100) + + +class Migration(migrations.Migration): + dependencies = [ + ('dcim', '0193_poweroutlet_color'), + ('ipam', '0071_prefix_scope'), + ] + + operations = [ + migrations.AddField( + model_name='prefix', + name='_location', + field=models.ForeignKey( + blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='dcim.location' + ), + ), + migrations.AddField( + model_name='prefix', + name='_region', + field=models.ForeignKey( + blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='dcim.region' + ), + ), + migrations.AddField( + model_name='prefix', + name='_site', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='dcim.site'), + ), + migrations.AddField( + model_name='prefix', + name='_site_group', + field=models.ForeignKey( + blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='dcim.sitegroup' + ), + ), + # Populate denormalized FK values + migrations.RunPython(code=populate_denormalized_fields, reverse_code=migrations.RunPython.noop), + # Delete the site ForeignKey + migrations.RemoveField( + model_name='prefix', + name='site', + ), + ] diff --git a/netbox/ipam/migrations/0073_charfield_null_choices.py b/netbox/ipam/migrations/0073_charfield_null_choices.py new file mode 100644 index 000000000..cfb764b46 --- /dev/null +++ b/netbox/ipam/migrations/0073_charfield_null_choices.py @@ -0,0 +1,32 @@ +from django.db import migrations, models + + +def set_null_values(apps, schema_editor): + """ + Replace empty strings with null values. + """ + FHRPGroup = apps.get_model('ipam', 'FHRPGroup') + IPAddress = apps.get_model('ipam', 'IPAddress') + + FHRPGroup.objects.filter(auth_type='').update(auth_type=None) + IPAddress.objects.filter(role='').update(role=None) + + +class Migration(migrations.Migration): + dependencies = [ + ('ipam', '0072_prefix_cached_relations'), + ] + + operations = [ + migrations.AlterField( + model_name='fhrpgroup', + name='auth_type', + field=models.CharField(blank=True, max_length=50, null=True), + ), + migrations.AlterField( + model_name='ipaddress', + name='role', + field=models.CharField(blank=True, max_length=50, null=True), + ), + migrations.RunPython(code=set_null_values, reverse_code=migrations.RunPython.noop), + ] diff --git a/netbox/ipam/migrations/0074_vlantranslationpolicy_vlantranslationrule.py b/netbox/ipam/migrations/0074_vlantranslationpolicy_vlantranslationrule.py new file mode 100644 index 000000000..5a13f18e6 --- /dev/null +++ b/netbox/ipam/migrations/0074_vlantranslationpolicy_vlantranslationrule.py @@ -0,0 +1,97 @@ +# Generated by Django 5.0.9 on 2024-10-11 19:45 + +import django.core.validators +import django.db.models.deletion +import taggit.managers +import utilities.json +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ('extras', '0121_customfield_related_object_filter'), + ('ipam', '0073_charfield_null_choices'), + ] + + operations = [ + migrations.CreateModel( + name='VLANTranslationPolicy', + 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), + ), + ('comments', models.TextField(blank=True)), + ('name', models.CharField(max_length=100, unique=True)), + ('description', models.CharField(blank=True, max_length=200)), + ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), + ], + options={ + 'verbose_name': 'VLAN translation policy', + 'verbose_name_plural': 'VLAN translation policies', + 'ordering': ('name',), + }, + ), + migrations.CreateModel( + name='VLANTranslationRule', + 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), + ), + ( + 'local_vid', + models.PositiveSmallIntegerField( + validators=[ + django.core.validators.MinValueValidator(1), + django.core.validators.MaxValueValidator(4094), + ] + ), + ), + ( + 'remote_vid', + models.PositiveSmallIntegerField( + validators=[ + django.core.validators.MinValueValidator(1), + django.core.validators.MaxValueValidator(4094), + ] + ), + ), + ( + 'policy', + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name='rules', + to='ipam.vlantranslationpolicy', + ), + ), + ('description', models.CharField(blank=True, max_length=200)), + ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), + ], + options={ + 'verbose_name': 'VLAN translation rule', + 'ordering': ( + 'policy', + 'local_vid', + ), + }, + ), + migrations.AddConstraint( + model_name='vlantranslationrule', + constraint=models.UniqueConstraint( + fields=('policy', 'local_vid'), name='ipam_vlantranslationrule_unique_policy_local_vid' + ), + ), + migrations.AddConstraint( + model_name='vlantranslationrule', + constraint=models.UniqueConstraint( + fields=('policy', 'remote_vid'), name='ipam_vlantranslationrule_unique_policy_remote_vid' + ), + ), + ] diff --git a/netbox/ipam/migrations/0075_vlan_qinq.py b/netbox/ipam/migrations/0075_vlan_qinq.py new file mode 100644 index 000000000..1e8f86c36 --- /dev/null +++ b/netbox/ipam/migrations/0075_vlan_qinq.py @@ -0,0 +1,35 @@ +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ('ipam', '0074_vlantranslationpolicy_vlantranslationrule'), + ] + + operations = [ + migrations.AddField( + model_name='vlan', + name='qinq_role', + field=models.CharField(blank=True, max_length=50, null=True), + ), + migrations.AddField( + model_name='vlan', + name='qinq_svlan', + field=models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.PROTECT, + related_name='qinq_cvlans', + to='ipam.vlan', + ), + ), + migrations.AddConstraint( + model_name='vlan', + constraint=models.UniqueConstraint(fields=('qinq_svlan', 'vid'), name='ipam_vlan_unique_qinq_svlan_vid'), + ), + migrations.AddConstraint( + model_name='vlan', + constraint=models.UniqueConstraint(fields=('qinq_svlan', 'name'), name='ipam_vlan_unique_qinq_svlan_name'), + ), + ] diff --git a/netbox/ipam/migrations/0076_natural_ordering.py b/netbox/ipam/migrations/0076_natural_ordering.py new file mode 100644 index 000000000..f6c9e5ccb --- /dev/null +++ b/netbox/ipam/migrations/0076_natural_ordering.py @@ -0,0 +1,31 @@ +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ('ipam', '0075_vlan_qinq'), + ('dcim', '0197_natural_sort_collation'), + ] + + operations = [ + migrations.AlterField( + model_name='asnrange', + name='name', + field=models.CharField(db_collation='natural_sort', max_length=100, unique=True), + ), + migrations.AlterField( + model_name='routetarget', + name='name', + field=models.CharField(db_collation='natural_sort', max_length=21, unique=True), + ), + migrations.AlterField( + model_name='vlangroup', + name='name', + field=models.CharField(db_collation='natural_sort', max_length=100), + ), + migrations.AlterField( + model_name='vrf', + name='name', + field=models.CharField(db_collation='natural_sort', max_length=100), + ), + ] diff --git a/netbox/ipam/models/asns.py b/netbox/ipam/models/asns.py index d02efd91c..c1d251301 100644 --- a/netbox/ipam/models/asns.py +++ b/netbox/ipam/models/asns.py @@ -1,6 +1,5 @@ from django.core.exceptions import ValidationError from django.db import models -from django.urls import reverse from django.utils.translation import gettext_lazy as _ from ipam.fields import ASNField @@ -17,7 +16,8 @@ class ASNRange(OrganizationalModel): name = models.CharField( verbose_name=_('name'), max_length=100, - unique=True + unique=True, + db_collation="natural_sort" ) slug = models.SlugField( verbose_name=_('slug'), @@ -54,9 +54,6 @@ class ASNRange(OrganizationalModel): def __str__(self): return f'{self.name} ({self.range_as_string()})' - def get_absolute_url(self): - return reverse('ipam:asnrange', args=[self.pk]) - @property def range(self): return range(self.start, self.end + 1) @@ -128,9 +125,6 @@ class ASN(PrimaryModel): def __str__(self): return f'AS{self.asn_with_asdot}' - def get_absolute_url(self): - return reverse('ipam:asn', args=[self.pk]) - @property def asn_asdot(self): """ diff --git a/netbox/ipam/models/fhrp.py b/netbox/ipam/models/fhrp.py index c3a7084b6..f5982853e 100644 --- a/netbox/ipam/models/fhrp.py +++ b/netbox/ipam/models/fhrp.py @@ -1,7 +1,6 @@ from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation from django.core.validators import MaxValueValidator, MinValueValidator from django.db import models -from django.urls import reverse from django.utils.translation import gettext_lazy as _ from ipam.choices import * @@ -35,6 +34,7 @@ class FHRPGroup(PrimaryModel): max_length=50, choices=FHRPGroupAuthTypeChoices, blank=True, + null=True, verbose_name=_('authentication type') ) auth_key = models.CharField( @@ -71,9 +71,6 @@ class FHRPGroup(PrimaryModel): return name - def get_absolute_url(self): - return reverse('ipam:fhrpgroup', args=[self.pk]) - class FHRPGroupAssignment(ChangeLoggedModel): interface_type = models.ForeignKey( diff --git a/netbox/ipam/models/ip.py b/netbox/ipam/models/ip.py index 868b92450..e1a8d91e3 100644 --- a/netbox/ipam/models/ip.py +++ b/netbox/ipam/models/ip.py @@ -4,11 +4,11 @@ from django.core.exceptions import ValidationError from django.db import models from django.db.models import F from django.db.models.functions import Cast -from django.urls import reverse from django.utils.functional import cached_property from django.utils.translation import gettext_lazy as _ from core.models import ObjectType +from dcim.models.mixins import CachedScopeMixin from ipam.choices import * from ipam.constants import * from ipam.fields import IPNetworkField, IPAddressField @@ -71,9 +71,6 @@ class RIR(OrganizationalModel): verbose_name = _('RIR') verbose_name_plural = _('RIRs') - def get_absolute_url(self): - return reverse('ipam:rir', args=[self.pk]) - class Aggregate(ContactsMixin, GetAvailablePrefixesMixin, PrimaryModel): """ @@ -118,9 +115,6 @@ class Aggregate(ContactsMixin, GetAvailablePrefixesMixin, PrimaryModel): def __str__(self): return str(self.prefix) - def get_absolute_url(self): - return reverse('ipam:aggregate', args=[self.pk]) - def clean(self): super().clean() @@ -203,27 +197,17 @@ class Role(OrganizationalModel): def __str__(self): return self.name - def get_absolute_url(self): - return reverse('ipam:role', args=[self.pk]) - -class Prefix(ContactsMixin, GetAvailablePrefixesMixin, PrimaryModel): +class Prefix(ContactsMixin, GetAvailablePrefixesMixin, CachedScopeMixin, PrimaryModel): """ - A Prefix represents an IPv4 or IPv6 network, including mask length. Prefixes can optionally be assigned to Sites and - VRFs. A Prefix must be assigned a status and may optionally be assigned a used-define Role. A Prefix can also be - assigned to a VLAN where appropriate. + A Prefix represents an IPv4 or IPv6 network, including mask length. Prefixes can optionally be scoped to certain + areas and/or assigned to VRFs. A Prefix must be assigned a status and may optionally be assigned a used-define Role. + A Prefix can also be assigned to a VLAN where appropriate. """ prefix = IPNetworkField( verbose_name=_('prefix'), help_text=_('IPv4 or IPv6 network with mask') ) - site = models.ForeignKey( - to='dcim.Site', - on_delete=models.PROTECT, - related_name='prefixes', - blank=True, - null=True - ) vrf = models.ForeignKey( to='ipam.VRF', on_delete=models.PROTECT, @@ -285,7 +269,7 @@ class Prefix(ContactsMixin, GetAvailablePrefixesMixin, PrimaryModel): objects = PrefixQuerySet.as_manager() clone_fields = ( - 'site', 'vrf', 'tenant', 'vlan', 'status', 'role', 'is_pool', 'mark_utilized', 'description', + 'scope_type', 'scope_id', 'vrf', 'tenant', 'vlan', 'status', 'role', 'is_pool', 'mark_utilized', 'description', ) class Meta: @@ -303,9 +287,6 @@ class Prefix(ContactsMixin, GetAvailablePrefixesMixin, PrimaryModel): def __str__(self): return str(self.prefix) - def get_absolute_url(self): - return reverse('ipam:prefix', args=[self.pk]) - def clean(self): super().clean() @@ -336,6 +317,9 @@ class Prefix(ContactsMixin, GetAvailablePrefixesMixin, PrimaryModel): # Clear host bits from prefix self.prefix = self.prefix.cidr + # Cache objects associated with the terminating object (for filtering) + self.cache_related_objects() + super().save(*args, **kwargs) @property @@ -434,7 +418,9 @@ class Prefix(ContactsMixin, GetAvailablePrefixesMixin, PrimaryModel): available_ips = prefix - child_ips - netaddr.IPSet(child_ranges) # IPv6 /127's, pool, or IPv4 /31-/32 sets are fully usable - if (self.family == 6 and self.prefix.prefixlen >= 127) or self.is_pool or (self.family == 4 and self.prefix.prefixlen >= 31): + if (self.family == 6 and self.prefix.prefixlen >= 127) or self.is_pool or ( + self.family == 4 and self.prefix.prefixlen >= 31 + ): return available_ips if self.family == 4: @@ -551,9 +537,6 @@ class IPRange(ContactsMixin, PrimaryModel): def __str__(self): return self.name - def get_absolute_url(self): - return reverse('ipam:iprange', args=[self.pk]) - def clean(self): super().clean() @@ -580,10 +563,26 @@ class IPRange(ContactsMixin, PrimaryModel): }) # Check for overlapping ranges - overlapping_ranges = IPRange.objects.exclude(pk=self.pk).filter(vrf=self.vrf).filter( - Q(start_address__host__inet__gte=self.start_address.ip, start_address__host__inet__lte=self.end_address.ip) | # Starts inside - Q(end_address__host__inet__gte=self.start_address.ip, end_address__host__inet__lte=self.end_address.ip) | # Ends inside - Q(start_address__host__inet__lte=self.start_address.ip, end_address__host__inet__gte=self.end_address.ip) # Starts & ends outside + overlapping_ranges = ( + IPRange.objects.exclude(pk=self.pk) + .filter(vrf=self.vrf) + .filter( + # Starts inside + Q( + start_address__host__inet__gte=self.start_address.ip, + start_address__host__inet__lte=self.end_address.ip, + ) | + # Ends inside + Q( + end_address__host__inet__gte=self.start_address.ip, + end_address__host__inet__lte=self.end_address.ip, + ) | + # Starts & ends outside + Q( + start_address__host__inet__lte=self.start_address.ip, + end_address__host__inet__gte=self.end_address.ip, + ) + ) ) if overlapping_ranges.exists(): raise ValidationError( @@ -738,6 +737,7 @@ class IPAddress(ContactsMixin, PrimaryModel): max_length=50, choices=IPAddressRoleChoices, blank=True, + null=True, help_text=_('The functional role of this IP') ) assigned_object_type = models.ForeignKey( @@ -798,9 +798,6 @@ class IPAddress(ContactsMixin, PrimaryModel): 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 get_absolute_url(self): - return reverse('ipam:ipaddress', args=[self.pk]) - def get_duplicates(self): return IPAddress.objects.filter( vrf=self.vrf, @@ -887,10 +884,12 @@ class IPAddress(ContactsMixin, PrimaryModel): # can't use is_primary_ip as self.assigned_object might be changed is_primary = False - if self.family == 4 and hasattr(original_parent, 'primary_ip4') and original_parent.primary_ip4_id == self.pk: - is_primary = True - if self.family == 6 and hasattr(original_parent, 'primary_ip6') and original_parent.primary_ip6_id == self.pk: - is_primary = True + if self.family == 4 and hasattr(original_parent, 'primary_ip4'): + if original_parent.primary_ip4_id == self.pk: + is_primary = True + if self.family == 6 and hasattr(original_parent, 'primary_ip6'): + if original_parent.primary_ip6_id == self.pk: + is_primary = True if is_primary and (parent != original_parent): raise ValidationError( diff --git a/netbox/ipam/models/services.py b/netbox/ipam/models/services.py index 71f34c66c..bb4049781 100644 --- a/netbox/ipam/models/services.py +++ b/netbox/ipam/models/services.py @@ -2,7 +2,6 @@ from django.contrib.postgres.fields import ArrayField from django.core.exceptions import ValidationError from django.core.validators import MaxValueValidator, MinValueValidator from django.db import models -from django.urls import reverse from django.utils.translation import gettext_lazy as _ from ipam.choices import * @@ -59,9 +58,6 @@ class ServiceTemplate(ServiceBase, PrimaryModel): verbose_name = _('service template') verbose_name_plural = _('service templates') - def get_absolute_url(self): - return reverse('ipam:servicetemplate', args=[self.pk]) - class Service(ContactsMixin, ServiceBase, PrimaryModel): """ @@ -102,9 +98,6 @@ class Service(ContactsMixin, ServiceBase, PrimaryModel): verbose_name = _('service') verbose_name_plural = _('services') - def get_absolute_url(self): - return reverse('ipam:service', args=[self.pk]) - @property def parent(self): return self.device or self.virtual_machine diff --git a/netbox/ipam/models/vlans.py b/netbox/ipam/models/vlans.py index 998bc9e2c..91e39c6d3 100644 --- a/netbox/ipam/models/vlans.py +++ b/netbox/ipam/models/vlans.py @@ -4,20 +4,21 @@ from django.core.exceptions import ValidationError from django.core.validators import MaxValueValidator, MinValueValidator from django.db import models from django.db.backends.postgresql.psycopg_any import NumericRange -from django.urls import reverse from django.utils.translation import gettext_lazy as _ from dcim.models import Interface from ipam.choices import * from ipam.constants import * from ipam.querysets import VLANQuerySet, VLANGroupQuerySet -from netbox.models import OrganizationalModel, PrimaryModel +from netbox.models import OrganizationalModel, PrimaryModel, NetBoxModel from utilities.data import check_ranges_overlap, ranges_to_string from virtualization.models import VMInterface __all__ = ( 'VLAN', 'VLANGroup', + 'VLANTranslationPolicy', + 'VLANTranslationRule', ) @@ -34,7 +35,8 @@ class VLANGroup(OrganizationalModel): """ name = models.CharField( verbose_name=_('name'), - max_length=100 + max_length=100, + db_collation="natural_sort" ) slug = models.SlugField( verbose_name=_('slug'), @@ -84,9 +86,6 @@ class VLANGroup(OrganizationalModel): verbose_name = _('VLAN group') verbose_name_plural = _('VLAN groups') - def get_absolute_url(self): - return reverse('ipam:vlangroup', args=[self.pk]) - def clean(self): super().clean() @@ -97,16 +96,32 @@ class VLANGroup(OrganizationalModel): raise ValidationError(_("Cannot set scope_id without scope_type.")) # Validate VID ranges - if self.vid_ranges and check_ranges_overlap(self.vid_ranges): - raise ValidationError({'vid_ranges': _("Ranges cannot overlap.")}) for vid_range in self.vid_ranges: - if vid_range.lower > vid_range.upper: + lower_vid = vid_range.lower if vid_range.lower_inc else vid_range.lower + 1 + upper_vid = vid_range.upper if vid_range.upper_inc else vid_range.upper - 1 + if lower_vid < VLAN_VID_MIN: + raise ValidationError({ + 'vid_ranges': _("Starting VLAN ID in range ({value}) cannot be less than {minimum}").format( + value=lower_vid, minimum=VLAN_VID_MIN + ) + }) + if upper_vid > VLAN_VID_MAX: + raise ValidationError({ + 'vid_ranges': _("Ending VLAN ID in range ({value}) cannot exceed {maximum}").format( + value=upper_vid, maximum=VLAN_VID_MAX + ) + }) + if lower_vid > upper_vid: raise ValidationError({ 'vid_ranges': _( - "Maximum child VID must be greater than or equal to minimum child VID ({value})" - ).format(value=vid_range) + "Ending VLAN ID in range must be greater than or equal to the starting VLAN ID ({range})" + ).format(range=f'{lower_vid}-{upper_vid}') }) + # Check for overlapping VID ranges + if self.vid_ranges and check_ranges_overlap(self.vid_ranges): + raise ValidationError({'vid_ranges': _("Ranges cannot overlap.")}) + def save(self, *args, **kwargs): self._total_vlan_ids = 0 for vid_range in self.vid_ranges: @@ -206,6 +221,21 @@ class VLAN(PrimaryModel): null=True, help_text=_("The primary function of this VLAN") ) + qinq_svlan = models.ForeignKey( + to='self', + on_delete=models.PROTECT, + related_name='qinq_cvlans', + blank=True, + null=True + ) + qinq_role = models.CharField( + verbose_name=_('Q-in-Q role'), + max_length=50, + choices=VLANQinQRoleChoices, + blank=True, + null=True, + help_text=_("Customer/service VLAN designation (for Q-in-Q/IEEE 802.1ad)") + ) l2vpn_terminations = GenericRelation( to='vpn.L2VPNTermination', content_type_field='assigned_object_type', @@ -216,7 +246,7 @@ class VLAN(PrimaryModel): objects = VLANQuerySet.as_manager() clone_fields = [ - 'site', 'group', 'tenant', 'status', 'role', 'description', + 'site', 'group', 'tenant', 'status', 'role', 'description', 'qinq_role', 'qinq_svlan', ] class Meta: @@ -230,6 +260,14 @@ class VLAN(PrimaryModel): fields=('group', 'name'), name='%(app_label)s_%(class)s_unique_group_name' ), + models.UniqueConstraint( + fields=('qinq_svlan', 'vid'), + name='%(app_label)s_%(class)s_unique_qinq_svlan_vid' + ), + models.UniqueConstraint( + fields=('qinq_svlan', 'name'), + name='%(app_label)s_%(class)s_unique_qinq_svlan_name' + ), ) verbose_name = _('VLAN') verbose_name_plural = _('VLANs') @@ -237,9 +275,6 @@ class VLAN(PrimaryModel): def __str__(self): return f'{self.name} ({self.vid})' - def get_absolute_url(self): - return reverse('ipam:vlan', args=[self.pk]) - def clean(self): super().clean() @@ -260,9 +295,24 @@ class VLAN(PrimaryModel): ).format(ranges=ranges_to_string(self.group.vid_ranges), group=self.group) }) + # Only Q-in-Q customer VLANs may be assigned to a service VLAN + if self.qinq_svlan and self.qinq_role != VLANQinQRoleChoices.ROLE_CUSTOMER: + raise ValidationError({ + 'qinq_svlan': _("Only Q-in-Q customer VLANs maybe assigned to a service VLAN.") + }) + + # A Q-in-Q customer VLAN must be assigned to a service VLAN + if self.qinq_role == VLANQinQRoleChoices.ROLE_CUSTOMER and not self.qinq_svlan: + raise ValidationError({ + 'qinq_role': _("A Q-in-Q customer VLAN must be assigned to a service VLAN.") + }) + def get_status_color(self): return VLANStatusChoices.colors.get(self.status) + def get_qinq_role_color(self): + return VLANQinQRoleChoices.colors.get(self.qinq_role) + def get_interfaces(self): # Return all device interfaces assigned to this VLAN return Interface.objects.filter( @@ -280,3 +330,75 @@ class VLAN(PrimaryModel): @property def l2vpn_termination(self): return self.l2vpn_terminations.first() + + +class VLANTranslationPolicy(PrimaryModel): + name = models.CharField( + verbose_name=_('name'), + max_length=100, + unique=True, + ) + + class Meta: + verbose_name = _('VLAN translation policy') + verbose_name_plural = _('VLAN translation policies') + ordering = ('name',) + + def __str__(self): + return self.name + + +class VLANTranslationRule(NetBoxModel): + policy = models.ForeignKey( + to=VLANTranslationPolicy, + related_name='rules', + on_delete=models.CASCADE, + ) + description = models.CharField( + verbose_name=_('description'), + max_length=200, + blank=True + ) + local_vid = models.PositiveSmallIntegerField( + verbose_name=_('Local VLAN ID'), + validators=( + MinValueValidator(VLAN_VID_MIN), + MaxValueValidator(VLAN_VID_MAX) + ), + help_text=_("Numeric VLAN ID (1-4094)") + ) + remote_vid = models.PositiveSmallIntegerField( + verbose_name=_('Remote VLAN ID'), + validators=( + MinValueValidator(VLAN_VID_MIN), + MaxValueValidator(VLAN_VID_MAX) + ), + help_text=_("Numeric VLAN ID (1-4094)") + ) + prerequisite_models = ( + 'ipam.VLANTranslationPolicy', + ) + + clone_fields = ['policy'] + + class Meta: + verbose_name = _('VLAN translation rule') + ordering = ('policy', 'local_vid',) + constraints = ( + models.UniqueConstraint( + fields=('policy', 'local_vid'), + name='%(app_label)s_%(class)s_unique_policy_local_vid' + ), + models.UniqueConstraint( + fields=('policy', 'remote_vid'), + name='%(app_label)s_%(class)s_unique_policy_remote_vid' + ), + ) + + def __str__(self): + return f'{self.local_vid} -> {self.remote_vid} ({self.policy})' + + def to_objectchange(self, action): + objectchange = super().to_objectchange(action) + objectchange.related_object = self.policy + return objectchange diff --git a/netbox/ipam/models/vrfs.py b/netbox/ipam/models/vrfs.py index 1f9b928f5..6a8b8d649 100644 --- a/netbox/ipam/models/vrfs.py +++ b/netbox/ipam/models/vrfs.py @@ -1,11 +1,9 @@ from django.db import models -from django.urls import reverse from django.utils.translation import gettext_lazy as _ from ipam.constants import * from netbox.models import PrimaryModel - __all__ = ( 'RouteTarget', 'VRF', @@ -20,7 +18,8 @@ class VRF(PrimaryModel): """ name = models.CharField( verbose_name=_('name'), - max_length=100 + max_length=100, + db_collation="natural_sort" ) rd = models.CharField( max_length=VRF_RD_MAX_LENGTH, @@ -67,9 +66,6 @@ class VRF(PrimaryModel): return f'{self.name} ({self.rd})' return self.name - def get_absolute_url(self): - return reverse('ipam:vrf', args=[self.pk]) - class RouteTarget(PrimaryModel): """ @@ -79,7 +75,8 @@ class RouteTarget(PrimaryModel): verbose_name=_('name'), max_length=VRF_RD_MAX_LENGTH, # Same format options as VRF RD (RFC 4360 section 4) unique=True, - help_text=_('Route target value (formatted in accordance with RFC 4360)') + help_text=_('Route target value (formatted in accordance with RFC 4360)'), + db_collation="natural_sort" ) tenant = models.ForeignKey( to='tenancy.Tenant', @@ -96,6 +93,3 @@ class RouteTarget(PrimaryModel): def __str__(self): return self.name - - def get_absolute_url(self): - return reverse('ipam:routetarget', args=[self.pk]) diff --git a/netbox/ipam/querysets.py b/netbox/ipam/querysets.py index 771e9b3b9..77ab8194a 100644 --- a/netbox/ipam/querysets.py +++ b/netbox/ipam/querysets.py @@ -148,7 +148,7 @@ class VLANQuerySet(RestrictedQuerySet): # Find all relevant VLANGroups q = Q() - site = vm.site or vm.cluster.site + site = vm.site or vm.cluster._site if vm.cluster: # Add VLANGroups scoped to the assigned cluster (or its group) q |= Q( diff --git a/netbox/ipam/search.py b/netbox/ipam/search.py index 16a8eba3c..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 @@ -160,6 +160,27 @@ class VLANGroupIndex(SearchIndex): display_attrs = ('scope_type', 'description') +@register_search +class VLANTranslationPolicyIndex(SearchIndex): + model = models.VLANTranslationPolicy + fields = ( + ('name', 100), + ('description', 500), + ) + display_attrs = ('description',) + + +@register_search +class VLANTranslationRuleIndex(SearchIndex): + model = models.VLANTranslationRule + fields = ( + ('policy', 100), + ('local_vid', 200), + ('remote_vid', 200), + ) + display_attrs = ('policy', 'local_vid', 'remote_vid') + + @register_search class VRFIndex(SearchIndex): model = models.VRF diff --git a/netbox/ipam/tables/ip.py b/netbox/ipam/tables/ip.py index 8ec7a5967..1eefa6b3a 100644 --- a/netbox/ipam/tables/ip.py +++ b/netbox/ipam/tables/ip.py @@ -6,6 +6,7 @@ from django_tables2.utils import Accessor from ipam.models import * from netbox.tables import NetBoxTable, columns from tenancy.tables import TenancyColumnsMixin, TenantColumn +from .template_code import * __all__ = ( 'AggregateTable', @@ -20,61 +21,6 @@ __all__ = ( AVAILABLE_LABEL = mark_safe('Available') -AGGREGATE_COPY_BUTTON = """ -{% copy_content record.pk prefix="aggregate_" %} -""" - -PREFIX_LINK = """ -{% if record.pk %} - {{ record.prefix }} -{% else %} - {{ record.prefix }} -{% endif %} -""" - -PREFIX_COPY_BUTTON = """ -{% copy_content record.pk prefix="prefix_" %} -""" - -PREFIX_LINK_WITH_DEPTH = """ -{% load helpers %} -{% if record.depth %} -
    - {% for i in record.depth|as_range %} - - {% endfor %} -
    -{% endif %} -""" + PREFIX_LINK - -IPADDRESS_LINK = """ -{% if record.pk %} - {{ record.address }} -{% elif perms.ipam.add_ipaddress %} - {% if record.0 <= 65536 %}{{ record.0 }}{% else %}Many{% endif %} IP{{ record.0|pluralize }} available -{% else %} - {% if record.0 <= 65536 %}{{ record.0 }}{% else %}Many{% endif %} IP{{ record.0|pluralize }} available -{% endif %} -""" - -IPADDRESS_COPY_BUTTON = """ -{% copy_content record.pk prefix="ipaddress_" %} -""" - -IPADDRESS_ASSIGN_LINK = """ -{{ record }} -""" - -VRF_LINK = """ -{% if value %} - {{ record.vrf }} -{% elif object.vrf %} - {{ object.vrf }} -{% else %} - Global -{% endif %} -""" - # # RIRs @@ -241,9 +187,13 @@ class PrefixTable(TenancyColumnsMixin, NetBoxTable): template_code=VRF_LINK, verbose_name=_('VRF') ) - site = tables.Column( - verbose_name=_('Site'), - linkify=True + scope_type = columns.ContentTypeColumn( + verbose_name=_('Scope Type'), + ) + scope = tables.Column( + verbose_name=_('Scope'), + linkify=True, + orderable=False ) vlan_group = tables.Column( accessor='vlan__group', @@ -251,6 +201,7 @@ class PrefixTable(TenancyColumnsMixin, NetBoxTable): verbose_name=_('VLAN Group') ) vlan = tables.Column( + order_by=('vlan__vid', 'vlan__pk'), linkify=True, verbose_name=_('VLAN') ) @@ -285,11 +236,12 @@ class PrefixTable(TenancyColumnsMixin, NetBoxTable): model = Prefix fields = ( 'pk', 'id', 'prefix', 'prefix_flat', 'status', 'children', 'vrf', 'utilization', 'tenant', 'tenant_group', - 'site', 'vlan_group', 'vlan', 'role', 'is_pool', 'mark_utilized', 'description', 'comments', 'tags', - 'created', 'last_updated', + 'scope', 'scope_type', 'vlan_group', 'vlan', 'role', 'is_pool', 'mark_utilized', 'description', 'comments', + 'tags', 'created', 'last_updated', ) default_columns = ( - 'pk', 'prefix', 'status', 'children', 'vrf', 'utilization', 'tenant', 'site', 'vlan', 'role', 'description', + 'pk', 'prefix', 'status', 'children', 'vrf', 'utilization', 'tenant', 'scope', 'vlan', 'role', + 'description', ) row_attrs = { 'class': lambda record: 'success' if not record.pk else '', diff --git a/netbox/ipam/tables/template_code.py b/netbox/ipam/tables/template_code.py new file mode 100644 index 000000000..fb969345e --- /dev/null +++ b/netbox/ipam/tables/template_code.py @@ -0,0 +1,88 @@ +AGGREGATE_COPY_BUTTON = """ +{% copy_content record.pk prefix="aggregate_" %} +""" + +PREFIX_LINK = """ +{% if record.pk %} + {{ record.prefix }} +{% else %} + {{ record.prefix }} +{% endif %} +""" + +PREFIX_COPY_BUTTON = """ +{% copy_content record.pk prefix="prefix_" %} +""" + +PREFIX_LINK_WITH_DEPTH = """ +{% load helpers %} +{% if record.depth %} +
    + {% for i in record.depth|as_range %} + + {% endfor %} +
    +{% endif %} +""" + PREFIX_LINK + +IPADDRESS_LINK = """ +{% if record.pk %} + {{ record.address }} +{% elif perms.ipam.add_ipaddress %} + {% if record.0 <= 65536 %}{{ record.0 }}{% else %}Many{% endif %} IP{{ record.0|pluralize }} available +{% else %} + {% if record.0 <= 65536 %}{{ record.0 }}{% else %}Many{% endif %} IP{{ record.0|pluralize }} available +{% endif %} +""" + +IPADDRESS_COPY_BUTTON = """ +{% copy_content record.pk prefix="ipaddress_" %} +""" + +IPADDRESS_ASSIGN_LINK = """ +{{ record }} +""" + +VRF_LINK = """ +{% if value %} + {{ record.vrf }} +{% elif object.vrf %} + {{ object.vrf }} +{% else %} + Global +{% endif %} +""" + +VLAN_LINK = """ +{% if record.pk %} + {{ record.vid }} +{% elif perms.ipam.add_vlan %} + {{ record.available }} VLAN{{ record.available|pluralize }} available +{% else %} + {{ record.available }} VLAN{{ record.available|pluralize }} available +{% endif %} +""" + +VLAN_PREFIXES = """ +{% for prefix in value.all %} + {{ prefix }}{% if not forloop.last %}
    {% endif %} +{% endfor %} +""" + +VLANGROUP_BUTTONS = """ +{% with next_vid=record.get_next_available_vid %} + {% if next_vid and perms.ipam.add_vlan %} + + + + {% endif %} +{% endwith %} +""" + +VLAN_MEMBER_TAGGED = """ +{% if record.untagged_vlan_id == object.pk %} + +{% else %} + +{% endif %} +""" diff --git a/netbox/ipam/tables/vlans.py b/netbox/ipam/tables/vlans.py index 5387ce24c..aa1900e41 100644 --- a/netbox/ipam/tables/vlans.py +++ b/netbox/ipam/tables/vlans.py @@ -8,6 +8,7 @@ from ipam.models import * from netbox.tables import NetBoxTable, columns from tenancy.tables import TenancyColumnsMixin, TenantColumn from virtualization.models import VMInterface +from .template_code import * __all__ = ( 'InterfaceVLANTable', @@ -16,44 +17,12 @@ __all__ = ( 'VLANMembersTable', 'VLANTable', 'VLANVirtualMachinesTable', + 'VLANTranslationPolicyTable', + 'VLANTranslationRuleTable', ) AVAILABLE_LABEL = mark_safe('Available') -VLAN_LINK = """ -{% if record.pk %} - {{ record.vid }} -{% elif perms.ipam.add_vlan %} - {{ record.available }} VLAN{{ record.available|pluralize }} available -{% else %} - {{ record.available }} VLAN{{ record.available|pluralize }} available -{% endif %} -""" - -VLAN_PREFIXES = """ -{% for prefix in value.all %} - {{ prefix }}{% if not forloop.last %}
    {% endif %} -{% endfor %} -""" - -VLANGROUP_BUTTONS = """ -{% with next_vid=record.get_next_available_vid %} - {% if next_vid and perms.ipam.add_vlan %} - - - - {% endif %} -{% endwith %} -""" - -VLAN_MEMBER_TAGGED = """ -{% if record.untagged_vlan_id == object.pk %} - -{% else %} - -{% endif %} -""" - # # VLAN groups @@ -130,6 +99,13 @@ class VLANTable(TenancyColumnsMixin, NetBoxTable): verbose_name=_('Role'), linkify=True ) + qinq_role = columns.ChoiceFieldColumn( + verbose_name=_('Q-in-Q role') + ) + qinq_svlan = tables.Column( + verbose_name=_('Q-in-Q SVLAN'), + linkify=True + ) l2vpn = tables.Column( accessor=tables.A('l2vpn_termination__l2vpn'), linkify=True, @@ -152,7 +128,7 @@ class VLANTable(TenancyColumnsMixin, NetBoxTable): model = VLAN fields = ( 'pk', 'id', 'vid', 'name', 'site', 'group', 'prefixes', 'tenant', 'tenant_group', 'status', 'role', - 'description', 'comments', 'tags', 'l2vpn', 'created', 'last_updated', + 'qinq_role', 'qinq_svlan', 'description', 'comments', 'tags', 'l2vpn', 'created', 'last_updated', ) default_columns = ('pk', 'vid', 'name', 'site', 'group', 'prefixes', 'tenant', 'status', 'role', 'description') row_attrs = { @@ -244,3 +220,59 @@ class InterfaceVLANTable(NetBoxTable): def __init__(self, interface, *args, **kwargs): self.interface = interface super().__init__(*args, **kwargs) + + +# +# VLAN Translation +# + +class VLANTranslationPolicyTable(NetBoxTable): + name = tables.Column( + verbose_name=_('Name'), + linkify=True + ) + rule_count = columns.LinkedCountColumn( + viewname='ipam:vlantranslationrule_list', + url_params={'policy_id': 'pk'}, + verbose_name=_('Rules') + ) + description = tables.Column( + verbose_name=_('Description'), + ) + tags = columns.TagColumn( + url_name='ipam:vlantranslationpolicy_list' + ) + + class Meta(NetBoxTable.Meta): + model = VLANTranslationPolicy + fields = ( + 'pk', 'id', 'name', 'rule_count', 'description', 'tags', 'created', 'last_updated', + ) + default_columns = ('pk', 'name', 'rule_count', 'description') + + +class VLANTranslationRuleTable(NetBoxTable): + policy = tables.Column( + verbose_name=_('Policy'), + linkify=True + ) + local_vid = tables.Column( + verbose_name=_('Local VID'), + linkify=True + ) + remote_vid = tables.Column( + verbose_name=_('Remote VID'), + ) + description = tables.Column( + verbose_name=_('Description'), + ) + tags = columns.TagColumn( + url_name='ipam:vlantranslationrule_list' + ) + + class Meta(NetBoxTable.Meta): + model = VLANTranslationRule + fields = ( + 'pk', 'id', 'name', 'policy', 'local_vid', 'remote_vid', 'description', 'tags', 'created', 'last_updated', + ) + default_columns = ('pk', 'policy', 'local_vid', 'remote_vid', 'description') diff --git a/netbox/ipam/tests/test_api.py b/netbox/ipam/tests/test_api.py index 1d2cdf1b7..e9dcacc16 100644 --- a/netbox/ipam/tests/test_api.py +++ b/netbox/ipam/tests/test_api.py @@ -732,10 +732,19 @@ class FHRPGroupTest(APIViewTestCases.APIViewTestCase): @classmethod def setUpTestData(cls): - fhrp_groups = ( - FHRPGroup(protocol=FHRPGroupProtocolChoices.PROTOCOL_VRRP2, group_id=10, auth_type=FHRPGroupAuthTypeChoices.AUTHENTICATION_PLAINTEXT, auth_key='foobar123'), - FHRPGroup(protocol=FHRPGroupProtocolChoices.PROTOCOL_VRRP3, group_id=20, auth_type=FHRPGroupAuthTypeChoices.AUTHENTICATION_MD5, auth_key='foobar123'), + FHRPGroup( + protocol=FHRPGroupProtocolChoices.PROTOCOL_VRRP2, + group_id=10, + auth_type=FHRPGroupAuthTypeChoices.AUTHENTICATION_PLAINTEXT, + auth_key='foobar123', + ), + FHRPGroup( + protocol=FHRPGroupProtocolChoices.PROTOCOL_VRRP3, + group_id=20, + auth_type=FHRPGroupAuthTypeChoices.AUTHENTICATION_MD5, + auth_key='foobar123', + ), FHRPGroup(protocol=FHRPGroupProtocolChoices.PROTOCOL_HSRP, group_id=30), ) FHRPGroup.objects.bulk_create(fhrp_groups) @@ -980,6 +989,7 @@ class VLANTest(APIViewTestCases.APIViewTestCase): VLAN(name='VLAN 1', vid=1, group=vlan_groups[0]), VLAN(name='VLAN 2', vid=2, group=vlan_groups[0]), VLAN(name='VLAN 3', vid=3, group=vlan_groups[0]), + VLAN(name='SVLAN 1', vid=1001, qinq_role=VLANQinQRoleChoices.ROLE_SERVICE), ) VLAN.objects.bulk_create(vlans) @@ -999,6 +1009,12 @@ class VLANTest(APIViewTestCases.APIViewTestCase): 'name': 'VLAN 6', 'group': vlan_groups[1].pk, }, + { + 'vid': 2001, + 'name': 'CVLAN 1', + 'qinq_role': VLANQinQRoleChoices.ROLE_CUSTOMER, + 'qinq_svlan': vlans[3].pk, + }, ] def test_delete_vlan_with_prefix(self): @@ -1020,6 +1036,112 @@ class VLANTest(APIViewTestCases.APIViewTestCase): self.assertTrue(content['detail'].startswith('Unable to delete object.')) +class VLANTranslationPolicyTest(APIViewTestCases.APIViewTestCase): + model = VLANTranslationPolicy + brief_fields = ['description', 'display', 'id', 'name', 'url',] + bulk_update_data = { + 'description': 'New description', + } + + @classmethod + def setUpTestData(cls): + + vlan_translation_policies = ( + VLANTranslationPolicy( + name='Policy 1', + description='foobar1', + ), + VLANTranslationPolicy( + name='Policy 2', + description='foobar2', + ), + VLANTranslationPolicy( + name='Policy 3', + description='foobar3', + ), + ) + VLANTranslationPolicy.objects.bulk_create(vlan_translation_policies) + + cls.create_data = [ + { + 'name': 'Policy 4', + 'description': 'foobar4', + }, + { + 'name': 'Policy 5', + 'description': 'foobar5', + }, + { + 'name': 'Policy 6', + 'description': 'foobar6', + }, + ] + + +class VLANTranslationRuleTest(APIViewTestCases.APIViewTestCase): + model = VLANTranslationRule + brief_fields = ['description', 'display', 'id', 'local_vid', 'policy', 'remote_vid', 'url'] + + @classmethod + def setUpTestData(cls): + + vlan_translation_policies = ( + VLANTranslationPolicy( + name='Policy 1', + description='foobar1', + ), + VLANTranslationPolicy( + name='Policy 2', + description='foobar2', + ), + ) + VLANTranslationPolicy.objects.bulk_create(vlan_translation_policies) + + vlan_translation_rules = ( + VLANTranslationRule( + policy=vlan_translation_policies[0], + local_vid=100, + remote_vid=200, + description='foo', + ), + VLANTranslationRule( + policy=vlan_translation_policies[0], + local_vid=101, + remote_vid=201, + description='bar', + ), + VLANTranslationRule( + policy=vlan_translation_policies[1], + local_vid=102, + remote_vid=202, + description='baz', + ), + ) + VLANTranslationRule.objects.bulk_create(vlan_translation_rules) + + cls.create_data = [ + { + 'policy': vlan_translation_policies[0].pk, + 'local_vid': 300, + 'remote_vid': 400, + }, + { + 'policy': vlan_translation_policies[0].pk, + 'local_vid': 301, + 'remote_vid': 401, + }, + { + 'policy': vlan_translation_policies[1].pk, + 'local_vid': 302, + 'remote_vid': 402, + }, + ] + + cls.bulk_update_data = { + 'policy': vlan_translation_policies[1].pk, + } + + class ServiceTemplateTest(APIViewTestCases.APIViewTestCase): model = ServiceTemplate brief_fields = ['description', 'display', 'id', 'name', 'ports', 'protocol', 'url'] diff --git a/netbox/ipam/tests/test_filtersets.py b/netbox/ipam/tests/test_filtersets.py index 4e38b1450..5455beb9c 100644 --- a/netbox/ipam/tests/test_filtersets.py +++ b/netbox/ipam/tests/test_filtersets.py @@ -496,8 +496,12 @@ class AggregateTestCase(TestCase, ChangeLoggedFilterSetTests): Tenant.objects.bulk_create(tenants) aggregates = ( - Aggregate(prefix='10.1.0.0/16', rir=rirs[0], tenant=tenants[0], date_added='2020-01-01', description='foobar1'), - Aggregate(prefix='10.2.0.0/16', rir=rirs[0], tenant=tenants[1], date_added='2020-01-02', description='foobar2'), + Aggregate( + prefix='10.1.0.0/16', rir=rirs[0], tenant=tenants[0], date_added='2020-01-01', description='foobar1' + ), + Aggregate( + prefix='10.2.0.0/16', rir=rirs[0], tenant=tenants[1], date_added='2020-01-02', description='foobar2' + ), Aggregate(prefix='10.3.0.0/16', rir=rirs[1], tenant=tenants[2], date_added='2020-01-03'), Aggregate(prefix='2001:db8:1::/48', rir=rirs[1], tenant=tenants[0], date_added='2020-01-04'), Aggregate(prefix='2001:db8:2::/48', rir=rirs[2], tenant=tenants[1], date_added='2020-01-05'), @@ -656,14 +660,80 @@ class PrefixTestCase(TestCase, ChangeLoggedFilterSetTests): Tenant.objects.bulk_create(tenants) prefixes = ( - Prefix(prefix='10.0.0.0/24', tenant=None, site=None, vrf=None, vlan=None, role=None, is_pool=True, mark_utilized=True, description='foobar1'), - Prefix(prefix='10.0.1.0/24', tenant=tenants[0], site=sites[0], vrf=vrfs[0], vlan=vlans[0], role=roles[0], description='foobar2'), - Prefix(prefix='10.0.2.0/24', tenant=tenants[1], site=sites[1], vrf=vrfs[1], vlan=vlans[1], role=roles[1], status=PrefixStatusChoices.STATUS_DEPRECATED), - Prefix(prefix='10.0.3.0/24', tenant=tenants[2], site=sites[2], vrf=vrfs[2], vlan=vlans[2], role=roles[2], status=PrefixStatusChoices.STATUS_RESERVED), - Prefix(prefix='2001:db8::/64', tenant=None, site=None, vrf=None, vlan=None, role=None, is_pool=True, mark_utilized=True), - Prefix(prefix='2001:db8:0:1::/64', tenant=tenants[0], site=sites[0], vrf=vrfs[0], vlan=vlans[0], role=roles[0]), - Prefix(prefix='2001:db8:0:2::/64', tenant=tenants[1], site=sites[1], vrf=vrfs[1], vlan=vlans[1], role=roles[1], status=PrefixStatusChoices.STATUS_DEPRECATED), - Prefix(prefix='2001:db8:0:3::/64', tenant=tenants[2], site=sites[2], vrf=vrfs[2], vlan=vlans[2], role=roles[2], status=PrefixStatusChoices.STATUS_RESERVED), + Prefix( + prefix='10.0.0.0/24', + tenant=None, + scope=None, + vrf=None, + vlan=None, + role=None, + is_pool=True, + mark_utilized=True, + description='foobar1', + ), + Prefix( + prefix='10.0.1.0/24', + tenant=tenants[0], + scope=sites[0], + vrf=vrfs[0], + vlan=vlans[0], + role=roles[0], + description='foobar2', + ), + Prefix( + prefix='10.0.2.0/24', + tenant=tenants[1], + scope=sites[1], + vrf=vrfs[1], + vlan=vlans[1], + role=roles[1], + status=PrefixStatusChoices.STATUS_DEPRECATED, + ), + Prefix( + prefix='10.0.3.0/24', + tenant=tenants[2], + scope=sites[2], + vrf=vrfs[2], + vlan=vlans[2], + role=roles[2], + status=PrefixStatusChoices.STATUS_RESERVED, + ), + Prefix( + prefix='2001:db8::/64', + tenant=None, + scope=None, + vrf=None, + vlan=None, + role=None, + is_pool=True, + mark_utilized=True, + ), + Prefix( + prefix='2001:db8:0:1::/64', + tenant=tenants[0], + scope=sites[0], + vrf=vrfs[0], + vlan=vlans[0], + role=roles[0] + ), + Prefix( + prefix='2001:db8:0:2::/64', + tenant=tenants[1], + scope=sites[1], + vrf=vrfs[1], + vlan=vlans[1], + role=roles[1], + status=PrefixStatusChoices.STATUS_DEPRECATED, + ), + Prefix( + prefix='2001:db8:0:3::/64', + tenant=tenants[2], + scope=sites[2], + vrf=vrfs[2], + vlan=vlans[2], + role=roles[2], + status=PrefixStatusChoices.STATUS_RESERVED, + ), Prefix(prefix='10.0.0.0/16'), Prefix(prefix='2001:db8::/32'), ) @@ -1365,7 +1435,10 @@ class FHRPGroupTestCase(TestCase, ChangeLoggedFilterSetTests): self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_auth_type(self): - params = {'auth_type': [FHRPGroupAuthTypeChoices.AUTHENTICATION_PLAINTEXT, FHRPGroupAuthTypeChoices.AUTHENTICATION_MD5]} + params = {'auth_type': [ + FHRPGroupAuthTypeChoices.AUTHENTICATION_PLAINTEXT, + FHRPGroupAuthTypeChoices.AUTHENTICATION_MD5, + ]} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) def test_auth_key(self): @@ -1630,6 +1703,7 @@ class VLANTestCase(TestCase, ChangeLoggedFilterSetTests): Site(name='Site 4', slug='site-4', region=regions[0], group=site_groups[0]), Site(name='Site 5', slug='site-5', region=regions[1], group=site_groups[1]), Site(name='Site 6', slug='site-6', region=regions[2], group=site_groups[2]), + Site(name='Site 7', slug='site-7'), ) Site.objects.bulk_create(sites) @@ -1652,9 +1726,15 @@ class VLANTestCase(TestCase, ChangeLoggedFilterSetTests): device_type = DeviceType.objects.create(manufacturer=manufacturer, model='Device Type 1') role = DeviceRole.objects.create(name='Device Role 1', slug='device-role-1') devices = ( - Device(name='Device 1', site=sites[0], location=locations[0], rack=racks[0], device_type=device_type, role=role), - Device(name='Device 2', site=sites[1], location=locations[1], rack=racks[1], device_type=device_type, role=role), - Device(name='Device 3', site=sites[2], location=locations[2], rack=racks[2], device_type=device_type, role=role), + Device( + name='Device 1', site=sites[0], location=locations[0], rack=racks[0], device_type=device_type, role=role + ), + Device( + name='Device 2', site=sites[1], location=locations[1], rack=racks[1], device_type=device_type, role=role + ), + Device( + name='Device 3', site=sites[2], location=locations[2], rack=racks[2], device_type=device_type, role=role + ), ) Device.objects.bulk_create(devices) @@ -1674,11 +1754,12 @@ class VLANTestCase(TestCase, ChangeLoggedFilterSetTests): cluster_type = ClusterType.objects.create(name='Cluster Type 1', slug='cluster-type-1') clusters = ( - Cluster(name='Cluster 1', type=cluster_type, group=cluster_groups[0], site=sites[0]), - Cluster(name='Cluster 2', type=cluster_type, group=cluster_groups[1], site=sites[1]), - Cluster(name='Cluster 3', type=cluster_type, group=cluster_groups[2], site=sites[2]), + Cluster(name='Cluster 1', type=cluster_type, group=cluster_groups[0], scope=sites[0]), + Cluster(name='Cluster 2', type=cluster_type, group=cluster_groups[1], scope=sites[1]), + Cluster(name='Cluster 3', type=cluster_type, group=cluster_groups[2], scope=sites[2]), ) - Cluster.objects.bulk_create(clusters) + for cluster in clusters: + cluster.save() virtual_machines = ( VirtualMachine(name='Virtual Machine 1', cluster=clusters[0]), @@ -1771,22 +1852,98 @@ class VLANTestCase(TestCase, ChangeLoggedFilterSetTests): VLAN(vid=19, name='Cluster 1', group=groups[18]), VLAN(vid=20, name='Cluster 2', group=groups[19]), VLAN(vid=21, name='Cluster 3', group=groups[20]), - - VLAN(vid=101, name='VLAN 101', site=sites[3], group=groups[21], role=roles[0], tenant=tenants[0], status=VLANStatusChoices.STATUS_ACTIVE), - VLAN(vid=102, name='VLAN 102', site=sites[3], group=groups[21], role=roles[0], tenant=tenants[0], status=VLANStatusChoices.STATUS_ACTIVE), - VLAN(vid=201, name='VLAN 201', site=sites[4], group=groups[22], role=roles[1], tenant=tenants[1], status=VLANStatusChoices.STATUS_DEPRECATED), - VLAN(vid=202, name='VLAN 202', site=sites[4], group=groups[22], role=roles[1], tenant=tenants[1], status=VLANStatusChoices.STATUS_DEPRECATED), - VLAN(vid=301, name='VLAN 301', site=sites[5], group=groups[23], role=roles[2], tenant=tenants[2], status=VLANStatusChoices.STATUS_RESERVED), - VLAN(vid=302, name='VLAN 302', site=sites[5], group=groups[23], role=roles[2], tenant=tenants[2], status=VLANStatusChoices.STATUS_RESERVED), - + VLAN( + vid=101, + name='VLAN 101', + site=sites[3], + group=groups[21], + role=roles[0], + tenant=tenants[0], + status=VLANStatusChoices.STATUS_ACTIVE, + ), + VLAN( + vid=102, + name='VLAN 102', + site=sites[3], + group=groups[21], + role=roles[0], + tenant=tenants[0], + status=VLANStatusChoices.STATUS_ACTIVE, + ), + VLAN( + vid=201, + name='VLAN 201', + site=sites[4], + group=groups[22], + role=roles[1], + tenant=tenants[1], + status=VLANStatusChoices.STATUS_DEPRECATED, + ), + VLAN( + vid=202, + name='VLAN 202', + site=sites[4], + group=groups[22], + role=roles[1], + tenant=tenants[1], + status=VLANStatusChoices.STATUS_DEPRECATED, + ), + VLAN( + vid=301, + name='VLAN 301', + site=sites[5], + group=groups[23], + role=roles[2], + tenant=tenants[2], + status=VLANStatusChoices.STATUS_RESERVED, + ), + VLAN( + vid=302, + name='VLAN 302', + site=sites[5], + group=groups[23], + role=roles[2], + tenant=tenants[2], + status=VLANStatusChoices.STATUS_RESERVED, + ), # Create one globally available VLAN on a VLAN group VLAN(vid=500, name='VLAN Group 1', group=groups[24]), - # Create one globally available VLAN VLAN(vid=1000, name='Global VLAN'), + # Create some Q-in-Q service VLANs + VLAN(vid=2001, name='SVLAN 1', site=sites[6], qinq_role=VLANQinQRoleChoices.ROLE_SERVICE), + VLAN(vid=2002, name='SVLAN 2', site=sites[6], qinq_role=VLANQinQRoleChoices.ROLE_SERVICE), + VLAN(vid=2003, name='SVLAN 3', site=sites[6], qinq_role=VLANQinQRoleChoices.ROLE_SERVICE), ) VLAN.objects.bulk_create(vlans) + # Create Q-in-Q customer VLANs + VLAN.objects.bulk_create( + [ + VLAN( + vid=3001, + name='CVLAN 1', + site=sites[6], + qinq_svlan=vlans[29], + qinq_role=VLANQinQRoleChoices.ROLE_CUSTOMER, + ), + VLAN( + vid=3002, + name='CVLAN 2', + site=sites[6], + qinq_svlan=vlans[30], + qinq_role=VLANQinQRoleChoices.ROLE_CUSTOMER, + ), + VLAN( + vid=3003, + name='CVLAN 3', + site=sites[6], + qinq_svlan=vlans[31], + qinq_role=VLANQinQRoleChoices.ROLE_CUSTOMER, + ), + ] + ) + # Assign VLANs to device interfaces interfaces[0].untagged_vlan = vlans[0] interfaces[0].tagged_vlans.add(vlans[1]) @@ -1897,6 +2054,110 @@ class VLANTestCase(TestCase, ChangeLoggedFilterSetTests): params = {'vminterface_id': vminterface_id} self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1) + def test_qinq_role(self): + params = {'qinq_role': [VLANQinQRoleChoices.ROLE_SERVICE, VLANQinQRoleChoices.ROLE_CUSTOMER]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 6) + + def test_qinq_svlan(self): + vlans = VLAN.objects.filter(qinq_role=VLANQinQRoleChoices.ROLE_SERVICE)[:2] + params = {'qinq_svlan_id': [vlans[0].pk, vlans[1].pk]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + params = {'qinq_svlan_vid': [vlans[0].vid, vlans[1].vid]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + + +class VLANTranslationPolicyTestCase(TestCase, ChangeLoggedFilterSetTests): + queryset = VLANTranslationPolicy.objects.all() + filterset = VLANTranslationPolicyFilterSet + + @classmethod + def setUpTestData(cls): + + vlan_translation_policies = ( + VLANTranslationPolicy( + name='Policy 1', + description='foobar1', + ), + VLANTranslationPolicy( + name='Policy 2', + description='foobar2', + ), + VLANTranslationPolicy( + name='Policy 3', + description='foobar3', + ), + ) + VLANTranslationPolicy.objects.bulk_create(vlan_translation_policies) + + def test_name(self): + params = {'name': ['Policy 1', 'Policy 2']} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + + def test_description(self): + params = {'description': ['foobar1', 'foobar2']} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + + +class VLANTranslationRuleTestCase(TestCase, ChangeLoggedFilterSetTests): + queryset = VLANTranslationRule.objects.all() + filterset = VLANTranslationRuleFilterSet + + @classmethod + def setUpTestData(cls): + + vlan_translation_policies = ( + VLANTranslationPolicy( + name='Policy 1', + description='foobar1', + ), + VLANTranslationPolicy( + name='Policy 2', + description='foobar2', + ), + ) + VLANTranslationPolicy.objects.bulk_create(vlan_translation_policies) + + vlan_translation_rules = ( + VLANTranslationRule( + policy=vlan_translation_policies[0], + local_vid=100, + remote_vid=200, + description='foo', + ), + VLANTranslationRule( + policy=vlan_translation_policies[0], + local_vid=101, + remote_vid=201, + description='bar', + ), + VLANTranslationRule( + policy=vlan_translation_policies[1], + local_vid=100, + remote_vid=200, + description='baz', + ), + ) + VLANTranslationRule.objects.bulk_create(vlan_translation_rules) + + def test_policy_id(self): + policies = VLANTranslationPolicy.objects.all()[:2] + params = {'policy_id': [policies[0].pk]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + params = {'policy': [policies[0].name]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + + def test_local_vid(self): + params = {'local_vid': [100]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + + def test_remote_vid(self): + params = {'remote_vid': [200]} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + + def test_description(self): + params = {'description': ['foo', 'bar']} + self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2) + class ServiceTemplateTestCase(TestCase, ChangeLoggedFilterSetTests): queryset = ServiceTemplate.objects.all() @@ -2007,12 +2268,39 @@ class ServiceTestCase(TestCase, ChangeLoggedFilterSetTests): VirtualMachine.objects.bulk_create(virtual_machines) services = ( - Service(device=devices[0], name='Service 1', protocol=ServiceProtocolChoices.PROTOCOL_TCP, ports=[1001], description='foobar1'), - Service(device=devices[1], name='Service 2', protocol=ServiceProtocolChoices.PROTOCOL_TCP, ports=[1002], description='foobar2'), + Service( + device=devices[0], + name='Service 1', + protocol=ServiceProtocolChoices.PROTOCOL_TCP, + ports=[1001], + description='foobar1', + ), + Service( + device=devices[1], + name='Service 2', + protocol=ServiceProtocolChoices.PROTOCOL_TCP, + ports=[1002], + description='foobar2', + ), Service(device=devices[2], name='Service 3', protocol=ServiceProtocolChoices.PROTOCOL_UDP, ports=[1003]), - Service(virtual_machine=virtual_machines[0], name='Service 4', protocol=ServiceProtocolChoices.PROTOCOL_TCP, ports=[2001]), - Service(virtual_machine=virtual_machines[1], name='Service 5', protocol=ServiceProtocolChoices.PROTOCOL_TCP, ports=[2002]), - Service(virtual_machine=virtual_machines[2], name='Service 6', protocol=ServiceProtocolChoices.PROTOCOL_UDP, ports=[2003]), + Service( + virtual_machine=virtual_machines[0], + name='Service 4', + protocol=ServiceProtocolChoices.PROTOCOL_TCP, + ports=[2001], + ), + Service( + virtual_machine=virtual_machines[1], + name='Service 5', + protocol=ServiceProtocolChoices.PROTOCOL_TCP, + ports=[2002], + ), + Service( + virtual_machine=virtual_machines[2], + name='Service 6', + protocol=ServiceProtocolChoices.PROTOCOL_UDP, + ports=[2003], + ), ) Service.objects.bulk_create(services) services[0].ipaddresses.add(ip_addresses[0]) diff --git a/netbox/ipam/tests/test_models.py b/netbox/ipam/tests/test_models.py index d14fa0657..62eb74123 100644 --- a/netbox/ipam/tests/test_models.py +++ b/netbox/ipam/tests/test_models.py @@ -39,29 +39,50 @@ class TestAggregate(TestCase): class TestIPRange(TestCase): def test_overlapping_range(self): - iprange_192_168 = IPRange.objects.create(start_address=IPNetwork('192.168.0.1/22'), end_address=IPNetwork('192.168.0.49/22')) + iprange_192_168 = IPRange.objects.create( + start_address=IPNetwork('192.168.0.1/22'), end_address=IPNetwork('192.168.0.49/22') + ) iprange_192_168.clean() - iprange_3_1_99 = IPRange.objects.create(start_address=IPNetwork('1.2.3.1/24'), end_address=IPNetwork('1.2.3.99/24')) + iprange_3_1_99 = IPRange.objects.create( + start_address=IPNetwork('1.2.3.1/24'), end_address=IPNetwork('1.2.3.99/24') + ) iprange_3_1_99.clean() - iprange_3_100_199 = IPRange.objects.create(start_address=IPNetwork('1.2.3.100/24'), end_address=IPNetwork('1.2.3.199/24')) + iprange_3_100_199 = IPRange.objects.create( + start_address=IPNetwork('1.2.3.100/24'), end_address=IPNetwork('1.2.3.199/24') + ) iprange_3_100_199.clean() - iprange_3_200_255 = IPRange.objects.create(start_address=IPNetwork('1.2.3.200/24'), end_address=IPNetwork('1.2.3.255/24')) + iprange_3_200_255 = IPRange.objects.create( + start_address=IPNetwork('1.2.3.200/24'), end_address=IPNetwork('1.2.3.255/24') + ) iprange_3_200_255.clean() - iprange_4_1_99 = IPRange.objects.create(start_address=IPNetwork('1.2.4.1/24'), end_address=IPNetwork('1.2.4.99/24')) + iprange_4_1_99 = IPRange.objects.create( + start_address=IPNetwork('1.2.4.1/24'), end_address=IPNetwork('1.2.4.99/24') + ) iprange_4_1_99.clean() - iprange_4_200 = IPRange.objects.create(start_address=IPNetwork('1.2.4.200/24'), end_address=IPNetwork('1.2.4.255/24')) + iprange_4_200 = IPRange.objects.create( + start_address=IPNetwork('1.2.4.200/24'), end_address=IPNetwork('1.2.4.255/24') + ) iprange_4_200.clean() + # Overlapping range entirely within existing with self.assertRaises(ValidationError): - iprange_3_123_124 = IPRange.objects.create(start_address=IPNetwork('1.2.3.123/26'), end_address=IPNetwork('1.2.3.124/26')) + iprange_3_123_124 = IPRange.objects.create( + start_address=IPNetwork('1.2.3.123/26'), end_address=IPNetwork('1.2.3.124/26') + ) iprange_3_123_124.clean() + # Overlapping range starting within existing with self.assertRaises(ValidationError): - iprange_4_98_101 = IPRange.objects.create(start_address=IPNetwork('1.2.4.98/24'), end_address=IPNetwork('1.2.4.101/24')) + iprange_4_98_101 = IPRange.objects.create( + start_address=IPNetwork('1.2.4.98/24'), end_address=IPNetwork('1.2.4.101/24') + ) iprange_4_98_101.clean() + # Overlapping range ending within existing with self.assertRaises(ValidationError): - iprange_4_198_201 = IPRange.objects.create(start_address=IPNetwork('1.2.4.198/24'), end_address=IPNetwork('1.2.4.201/24')) + iprange_4_198_201 = IPRange.objects.create( + start_address=IPNetwork('1.2.4.198/24'), end_address=IPNetwork('1.2.4.201/24') + ) iprange_4_198_201.clean() @@ -105,13 +126,30 @@ class TestPrefix(TestCase): def test_get_child_ranges(self): prefix = Prefix(prefix='192.168.0.16/28') prefix.save() - ranges = IPRange.objects.bulk_create(( - IPRange(start_address=IPNetwork('192.168.0.1/24'), end_address=IPNetwork('192.168.0.10/24'), size=10), # No overlap - IPRange(start_address=IPNetwork('192.168.0.11/24'), end_address=IPNetwork('192.168.0.17/24'), size=7), # Partial overlap - IPRange(start_address=IPNetwork('192.168.0.18/24'), end_address=IPNetwork('192.168.0.23/24'), size=6), # Full overlap - IPRange(start_address=IPNetwork('192.168.0.24/24'), end_address=IPNetwork('192.168.0.30/24'), size=7), # Full overlap - IPRange(start_address=IPNetwork('192.168.0.31/24'), end_address=IPNetwork('192.168.0.40/24'), size=10), # Partial overlap - )) + ranges = IPRange.objects.bulk_create( + ( + # No overlap + IPRange( + start_address=IPNetwork('192.168.0.1/24'), end_address=IPNetwork('192.168.0.10/24'), size=10 + ), + # Partial overlap + IPRange( + start_address=IPNetwork('192.168.0.11/24'), end_address=IPNetwork('192.168.0.17/24'), size=7 + ), + # Full overlap + IPRange( + start_address=IPNetwork('192.168.0.18/24'), end_address=IPNetwork('192.168.0.23/24'), size=6 + ), + # Full overlap + IPRange( + start_address=IPNetwork('192.168.0.24/24'), end_address=IPNetwork('192.168.0.30/24'), size=7 + ), + # Partial overlap + IPRange( + start_address=IPNetwork('192.168.0.31/24'), end_address=IPNetwork('192.168.0.40/24'), size=10 + ), + ) + ) child_ranges = prefix.get_child_ranges() @@ -586,3 +624,24 @@ class TestVLANGroup(TestCase): vlangroup.vid_ranges = string_to_ranges('2-2') vlangroup.full_clean() vlangroup.save() + + +class TestVLAN(TestCase): + + @classmethod + def setUpTestData(cls): + VLAN.objects.bulk_create(( + VLAN(name='VLAN 1', vid=1, qinq_role=VLANQinQRoleChoices.ROLE_SERVICE), + )) + + def test_qinq_role(self): + svlan = VLAN.objects.filter(qinq_role=VLANQinQRoleChoices.ROLE_SERVICE).first() + + vlan = VLAN( + name='VLAN X', + vid=999, + qinq_role=VLANQinQRoleChoices.ROLE_SERVICE, + qinq_svlan=svlan + ) + with self.assertRaises(ValidationError): + vlan.full_clean() diff --git a/netbox/ipam/tests/test_ordering.py b/netbox/ipam/tests/test_ordering.py index 8d69af847..2f7a5342d 100644 --- a/netbox/ipam/tests/test_ordering.py +++ b/netbox/ipam/tests/test_ordering.py @@ -42,7 +42,7 @@ class PrefixOrderingTestCase(OrderingTestBase): """ This is a very basic test, which tests both prefixes without VRFs and prefixes with VRFs """ - vrf1, vrf2, vrf3 = list(VRF.objects.all()) + vrf1, vrf2 = VRF.objects.all()[:2] prefixes = ( Prefix(status=PrefixStatusChoices.STATUS_CONTAINER, vrf=None, prefix=netaddr.IPNetwork('192.168.0.0/16')), Prefix(status=PrefixStatusChoices.STATUS_ACTIVE, vrf=None, prefix=netaddr.IPNetwork('192.168.0.0/24')), @@ -92,8 +92,8 @@ class PrefixOrderingTestCase(OrderingTestBase): def test_prefix_complex_ordering(self): """ - This function tests a complex ordering of interwoven prefixes and vrfs. This is the current expected ordering of VRFs - This includes the testing of the Container status. + This function tests a complex ordering of interwoven prefixes and vrfs. This is the current expected ordering + of VRFs. This includes the testing of the Container status. The proper ordering, to get proper containerization should be: None:10.0.0.0/8 @@ -106,7 +106,7 @@ class PrefixOrderingTestCase(OrderingTestBase): VRF A:10.1.1.0/24 None: 192.168.0.0/16 """ - vrf1, vrf2, vrf3 = list(VRF.objects.all()) + vrf1 = VRF.objects.first() prefixes = [ Prefix(status=PrefixStatusChoices.STATUS_CONTAINER, vrf=None, prefix=netaddr.IPNetwork('10.0.0.0/8')), Prefix(status=PrefixStatusChoices.STATUS_CONTAINER, vrf=None, prefix=netaddr.IPNetwork('10.0.0.0/16')), @@ -125,12 +125,11 @@ class PrefixOrderingTestCase(OrderingTestBase): class IPAddressOrderingTestCase(OrderingTestBase): - def test_address_vrf_ordering(self): """ This function tests ordering with the inclusion of vrfs """ - vrf1, vrf2, vrf3 = list(VRF.objects.all()) + vrf1, vrf2 = VRF.objects.all()[:2] addresses = ( IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf1, address=netaddr.IPNetwork('10.0.0.1/24')), IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf1, address=netaddr.IPNetwork('10.0.1.1/24')), @@ -147,24 +146,54 @@ class IPAddressOrderingTestCase(OrderingTestBase): IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf1, address=netaddr.IPNetwork('10.2.2.1/24')), IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf1, address=netaddr.IPNetwork('10.2.3.1/24')), IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf1, address=netaddr.IPNetwork('10.2.4.1/24')), - - IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf2, address=netaddr.IPNetwork('172.16.0.1/24')), - IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf2, address=netaddr.IPNetwork('172.16.1.1/24')), - IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf2, address=netaddr.IPNetwork('172.16.2.1/24')), - IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf2, address=netaddr.IPNetwork('172.16.3.1/24')), - IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf2, address=netaddr.IPNetwork('172.16.4.1/24')), - IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf2, address=netaddr.IPNetwork('172.17.0.1/24')), - IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf2, address=netaddr.IPNetwork('172.17.1.1/24')), - IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf2, address=netaddr.IPNetwork('172.17.2.1/24')), - IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf2, address=netaddr.IPNetwork('172.17.3.1/24')), - IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf2, address=netaddr.IPNetwork('172.17.4.1/24')), - - IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=None, address=netaddr.IPNetwork('192.168.0.1/24')), - IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=None, address=netaddr.IPNetwork('192.168.1.1/24')), - IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=None, address=netaddr.IPNetwork('192.168.2.1/24')), - IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=None, address=netaddr.IPNetwork('192.168.3.1/24')), - IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=None, address=netaddr.IPNetwork('192.168.4.1/24')), - IPAddress(status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=None, address=netaddr.IPNetwork('192.168.5.1/24')), + IPAddress( + status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf2, address=netaddr.IPNetwork('172.16.0.1/24') + ), + IPAddress( + status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf2, address=netaddr.IPNetwork('172.16.1.1/24') + ), + IPAddress( + status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf2, address=netaddr.IPNetwork('172.16.2.1/24') + ), + IPAddress( + status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf2, address=netaddr.IPNetwork('172.16.3.1/24') + ), + IPAddress( + status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf2, address=netaddr.IPNetwork('172.16.4.1/24') + ), + IPAddress( + status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf2, address=netaddr.IPNetwork('172.17.0.1/24') + ), + IPAddress( + status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf2, address=netaddr.IPNetwork('172.17.1.1/24') + ), + IPAddress( + status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf2, address=netaddr.IPNetwork('172.17.2.1/24') + ), + IPAddress( + status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf2, address=netaddr.IPNetwork('172.17.3.1/24') + ), + IPAddress( + status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=vrf2, address=netaddr.IPNetwork('172.17.4.1/24') + ), + IPAddress( + status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=None, address=netaddr.IPNetwork('192.168.0.1/24') + ), + IPAddress( + status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=None, address=netaddr.IPNetwork('192.168.1.1/24') + ), + IPAddress( + status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=None, address=netaddr.IPNetwork('192.168.2.1/24') + ), + IPAddress( + status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=None, address=netaddr.IPNetwork('192.168.3.1/24') + ), + IPAddress( + status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=None, address=netaddr.IPNetwork('192.168.4.1/24') + ), + IPAddress( + status=IPAddressStatusChoices.STATUS_ACTIVE, vrf=None, address=netaddr.IPNetwork('192.168.5.1/24') + ), ) IPAddress.objects.bulk_create(addresses) diff --git a/netbox/ipam/tests/test_views.py b/netbox/ipam/tests/test_views.py index 95b311878..d7d367bb7 100644 --- a/netbox/ipam/tests/test_views.py +++ b/netbox/ipam/tests/test_views.py @@ -1,5 +1,6 @@ import datetime +from django.contrib.contenttypes.models import ContentType from django.test import override_settings from django.urls import reverse from netaddr import IPNetwork @@ -409,9 +410,9 @@ class PrefixTestCase(ViewTestCases.PrimaryObjectViewTestCase): Role.objects.bulk_create(roles) prefixes = ( - Prefix(prefix=IPNetwork('10.1.0.0/16'), vrf=vrfs[0], site=sites[0], role=roles[0]), - Prefix(prefix=IPNetwork('10.2.0.0/16'), vrf=vrfs[0], site=sites[0], role=roles[0]), - Prefix(prefix=IPNetwork('10.3.0.0/16'), vrf=vrfs[0], site=sites[0], role=roles[0]), + Prefix(prefix=IPNetwork('10.1.0.0/16'), vrf=vrfs[0], scope=sites[0], role=roles[0]), + Prefix(prefix=IPNetwork('10.2.0.0/16'), vrf=vrfs[0], scope=sites[0], role=roles[0]), + Prefix(prefix=IPNetwork('10.3.0.0/16'), vrf=vrfs[0], scope=sites[0], role=roles[0]), ) Prefix.objects.bulk_create(prefixes) @@ -419,7 +420,8 @@ class PrefixTestCase(ViewTestCases.PrimaryObjectViewTestCase): cls.form_data = { 'prefix': IPNetwork('192.0.2.0/24'), - 'site': sites[1].pk, + 'scope_type': ContentType.objects.get_for_model(Site).pk, + 'scope': sites[1].pk, 'vrf': vrfs[1].pk, 'tenant': None, 'vlan': None, @@ -430,11 +432,12 @@ class PrefixTestCase(ViewTestCases.PrimaryObjectViewTestCase): 'tags': [t.pk for t in tags], } + site = sites[0].pk cls.csv_data = ( - "vrf,prefix,status", - "VRF 1,10.4.0.0/16,active", - "VRF 1,10.5.0.0/16,active", - "VRF 1,10.6.0.0/16,active", + "vrf,prefix,status,scope_type,scope_id", + f"VRF 1,10.4.0.0/16,active,dcim.site,{site}", + f"VRF 1,10.5.0.0/16,active,dcim.site,{site}", + f"VRF 1,10.6.0.0/16,active,dcim.site,{site}", ) cls.csv_update_data = ( @@ -445,7 +448,6 @@ class PrefixTestCase(ViewTestCases.PrimaryObjectViewTestCase): ) cls.bulk_edit_data = { - 'site': sites[1].pk, 'vrf': vrfs[1].pk, 'tenant': None, 'status': PrefixStatusChoices.STATUS_RESERVED, @@ -501,11 +503,13 @@ class PrefixTestCase(ViewTestCases.PrimaryObjectViewTestCase): """ Custom import test for YAML-based imports (versus CSV) """ - IMPORT_DATA = """ + site = Site.objects.get(name='Site 1') + IMPORT_DATA = f""" prefix: 10.1.1.0/24 status: active vlan: 101 -site: Site 1 +scope_type: dcim.site +scope_id: {site.pk} """ # Note, a site is not tied to the VLAN to verify the fix for #12622 VLAN.objects.create(vid=101, name='VLAN101') @@ -517,25 +521,27 @@ site: Site 1 'data': IMPORT_DATA, 'format': 'yaml' } - response = self.client.post(reverse('ipam:prefix_import'), data=form_data, follow=True) + response = self.client.post(reverse('ipam:prefix_bulk_import'), data=form_data, follow=True) self.assertHttpStatus(response, 200) prefix = Prefix.objects.get(prefix='10.1.1.0/24') self.assertEqual(prefix.status, PrefixStatusChoices.STATUS_ACTIVE) self.assertEqual(prefix.vlan.vid, 101) - self.assertEqual(prefix.site.name, "Site 1") + self.assertEqual(prefix.scope, site) @override_settings(EXEMPT_VIEW_PERMISSIONS=['*']) def test_prefix_import_with_vlan_group(self): """ This test covers a unique import edge case where VLAN group is specified during the import. """ - IMPORT_DATA = """ + site = Site.objects.get(name='Site 1') + IMPORT_DATA = f""" prefix: 10.1.2.0/24 status: active -vlan: 102 -site: Site 1 +scope_type: dcim.site +scope_id: {site.pk} vlan_group: Group 1 +vlan: 102 """ vlan_group = VLANGroup.objects.create(name='Group 1', slug='group-1', scope=Site.objects.get(name="Site 1")) VLAN.objects.create(vid=102, name='VLAN102', group=vlan_group) @@ -547,13 +553,13 @@ vlan_group: Group 1 'data': IMPORT_DATA, 'format': 'yaml' } - response = self.client.post(reverse('ipam:prefix_import'), data=form_data, follow=True) + response = self.client.post(reverse('ipam:prefix_bulk_import'), data=form_data, follow=True) self.assertHttpStatus(response, 200) prefix = Prefix.objects.get(prefix='10.1.2.0/24') self.assertEqual(prefix.status, PrefixStatusChoices.STATUS_ACTIVE) self.assertEqual(prefix.vlan.vid, 102) - self.assertEqual(prefix.site.name, "Site 1") + self.assertEqual(prefix.scope, site) class IPRangeTestCase(ViewTestCases.PrimaryObjectViewTestCase): @@ -701,11 +707,23 @@ class FHRPGroupTestCase(ViewTestCases.PrimaryObjectViewTestCase): @classmethod def setUpTestData(cls): - fhrp_groups = ( - FHRPGroup(protocol=FHRPGroupProtocolChoices.PROTOCOL_VRRP2, group_id=10, auth_type=FHRPGroupAuthTypeChoices.AUTHENTICATION_PLAINTEXT, auth_key='foobar123'), - FHRPGroup(protocol=FHRPGroupProtocolChoices.PROTOCOL_VRRP3, group_id=20, auth_type=FHRPGroupAuthTypeChoices.AUTHENTICATION_MD5, auth_key='foobar123'), - FHRPGroup(protocol=FHRPGroupProtocolChoices.PROTOCOL_HSRP, group_id=30), + FHRPGroup( + protocol=FHRPGroupProtocolChoices.PROTOCOL_VRRP2, + group_id=10, + auth_type=FHRPGroupAuthTypeChoices.AUTHENTICATION_PLAINTEXT, + auth_key='foobar123', + ), + FHRPGroup( + protocol=FHRPGroupProtocolChoices.PROTOCOL_VRRP3, + group_id=20, + auth_type=FHRPGroupAuthTypeChoices.AUTHENTICATION_MD5, + auth_key='foobar123', + ), + FHRPGroup( + protocol=FHRPGroupProtocolChoices.PROTOCOL_HSRP, + group_id=30 + ), ) FHRPGroup.objects.bulk_create(fhrp_groups) @@ -857,6 +875,121 @@ class VLANTestCase(ViewTestCases.PrimaryObjectViewTestCase): } +class VLANTranslationPolicyTestCase(ViewTestCases.PrimaryObjectViewTestCase): + model = VLANTranslationPolicy + + @classmethod + def setUpTestData(cls): + + vlan_translation_policies = ( + VLANTranslationPolicy( + name='Policy 1', + description='foobar1', + ), + VLANTranslationPolicy( + name='Policy 2', + description='foobar2', + ), + VLANTranslationPolicy( + name='Policy 3', + description='foobar3', + ), + ) + VLANTranslationPolicy.objects.bulk_create(vlan_translation_policies) + + tags = create_tags('Alpha', 'Bravo', 'Charlie') + + cls.form_data = { + 'name': 'Policy999', + 'description': 'A new VLAN Translation Policy', + 'tags': [t.pk for t in tags], + } + + cls.csv_data = ( + "name,description", + "Policy101,foobar1", + "Policy102,foobar2", + "Policy103,foobar3", + ) + + cls.csv_update_data = ( + "id,name,description", + f"{vlan_translation_policies[0].pk},Policy101,New description 1", + f"{vlan_translation_policies[1].pk},Policy102,New description 2", + f"{vlan_translation_policies[2].pk},Policy103,New description 3", + ) + + cls.bulk_edit_data = { + 'description': 'New description', + } + + +class VLANTranslationRuleTestCase(ViewTestCases.PrimaryObjectViewTestCase): + model = VLANTranslationRule + + @classmethod + def setUpTestData(cls): + + vlan_translation_policies = ( + VLANTranslationPolicy( + name='Policy 1', + description='foobar1', + ), + VLANTranslationPolicy( + name='Policy 2', + description='foobar2', + ), + VLANTranslationPolicy( + name='Policy 3', + description='foobar3', + ), + ) + VLANTranslationPolicy.objects.bulk_create(vlan_translation_policies) + + vlan_translation_rules = ( + VLANTranslationRule( + policy=vlan_translation_policies[0], + local_vid=100, + remote_vid=200, + ), + VLANTranslationRule( + policy=vlan_translation_policies[0], + local_vid=101, + remote_vid=201, + ), + VLANTranslationRule( + policy=vlan_translation_policies[1], + local_vid=102, + remote_vid=202, + ), + ) + VLANTranslationRule.objects.bulk_create(vlan_translation_rules) + + cls.form_data = { + 'policy': vlan_translation_policies[0].pk, + 'local_vid': 300, + 'remote_vid': 400, + } + + cls.csv_data = ( + "policy,local_vid,remote_vid", + f"{vlan_translation_policies[0].name},103,203", + f"{vlan_translation_policies[0].name},104,204", + f"{vlan_translation_policies[1].name},105,205", + ) + + cls.csv_update_data = ( + "id,local_vid,remote_vid", + f"{vlan_translation_rules[0].pk},105,205", + f"{vlan_translation_rules[1].pk},106,206", + f"{vlan_translation_rules[2].pk},107,207", + ) + + cls.bulk_edit_data = { + 'policy': vlan_translation_policies[2].pk, + } + + class ServiceTemplateTestCase(ViewTestCases.PrimaryObjectViewTestCase): model = ServiceTemplate diff --git a/netbox/ipam/urls.py b/netbox/ipam/urls.py index 61deeff4b..c55e874a1 100644 --- a/netbox/ipam/urls.py +++ b/netbox/ipam/urls.py @@ -1,134 +1,62 @@ from django.urls import include, path from utilities.urls import get_model_urls -from . import views +from . import views # noqa F401 app_name = 'ipam' urlpatterns = [ - # ASN ranges - path('asn-ranges/', views.ASNRangeListView.as_view(), name='asnrange_list'), - path('asn-ranges/add/', views.ASNRangeEditView.as_view(), name='asnrange_add'), - path('asn-ranges/import/', views.ASNRangeBulkImportView.as_view(), name='asnrange_import'), - path('asn-ranges/edit/', views.ASNRangeBulkEditView.as_view(), name='asnrange_bulk_edit'), - path('asn-ranges/delete/', views.ASNRangeBulkDeleteView.as_view(), name='asnrange_bulk_delete'), + path('asn-ranges/', include(get_model_urls('ipam', 'asnrange', detail=False))), path('asn-ranges//', include(get_model_urls('ipam', 'asnrange'))), - # ASNs - path('asns/', views.ASNListView.as_view(), name='asn_list'), - path('asns/add/', views.ASNEditView.as_view(), name='asn_add'), - path('asns/import/', views.ASNBulkImportView.as_view(), name='asn_import'), - path('asns/edit/', views.ASNBulkEditView.as_view(), name='asn_bulk_edit'), - path('asns/delete/', views.ASNBulkDeleteView.as_view(), name='asn_bulk_delete'), + path('asns/', include(get_model_urls('ipam', 'asn', detail=False))), path('asns//', include(get_model_urls('ipam', 'asn'))), - # VRFs - path('vrfs/', views.VRFListView.as_view(), name='vrf_list'), - path('vrfs/add/', views.VRFEditView.as_view(), name='vrf_add'), - path('vrfs/import/', views.VRFBulkImportView.as_view(), name='vrf_import'), - path('vrfs/edit/', views.VRFBulkEditView.as_view(), name='vrf_bulk_edit'), - path('vrfs/delete/', views.VRFBulkDeleteView.as_view(), name='vrf_bulk_delete'), + path('vrfs/', include(get_model_urls('ipam', 'vrf', detail=False))), path('vrfs//', include(get_model_urls('ipam', 'vrf'))), - # Route targets - path('route-targets/', views.RouteTargetListView.as_view(), name='routetarget_list'), - path('route-targets/add/', views.RouteTargetEditView.as_view(), name='routetarget_add'), - path('route-targets/import/', views.RouteTargetBulkImportView.as_view(), name='routetarget_import'), - path('route-targets/edit/', views.RouteTargetBulkEditView.as_view(), name='routetarget_bulk_edit'), - path('route-targets/delete/', views.RouteTargetBulkDeleteView.as_view(), name='routetarget_bulk_delete'), + path('route-targets/', include(get_model_urls('ipam', 'routetarget', detail=False))), path('route-targets//', include(get_model_urls('ipam', 'routetarget'))), - # RIRs - path('rirs/', views.RIRListView.as_view(), name='rir_list'), - path('rirs/add/', views.RIREditView.as_view(), name='rir_add'), - path('rirs/import/', views.RIRBulkImportView.as_view(), name='rir_import'), - path('rirs/edit/', views.RIRBulkEditView.as_view(), name='rir_bulk_edit'), - path('rirs/delete/', views.RIRBulkDeleteView.as_view(), name='rir_bulk_delete'), + path('rirs/', include(get_model_urls('ipam', 'rir', detail=False))), path('rirs//', include(get_model_urls('ipam', 'rir'))), - # Aggregates - path('aggregates/', views.AggregateListView.as_view(), name='aggregate_list'), - path('aggregates/add/', views.AggregateEditView.as_view(), name='aggregate_add'), - path('aggregates/import/', views.AggregateBulkImportView.as_view(), name='aggregate_import'), - path('aggregates/edit/', views.AggregateBulkEditView.as_view(), name='aggregate_bulk_edit'), - path('aggregates/delete/', views.AggregateBulkDeleteView.as_view(), name='aggregate_bulk_delete'), + path('aggregates/', include(get_model_urls('ipam', 'aggregate', detail=False))), path('aggregates//', include(get_model_urls('ipam', 'aggregate'))), - # Roles - path('roles/', views.RoleListView.as_view(), name='role_list'), - path('roles/add/', views.RoleEditView.as_view(), name='role_add'), - path('roles/import/', views.RoleBulkImportView.as_view(), name='role_import'), - path('roles/edit/', views.RoleBulkEditView.as_view(), name='role_bulk_edit'), - path('roles/delete/', views.RoleBulkDeleteView.as_view(), name='role_bulk_delete'), + path('roles/', include(get_model_urls('ipam', 'role', detail=False))), path('roles//', include(get_model_urls('ipam', 'role'))), - # Prefixes - path('prefixes/', views.PrefixListView.as_view(), name='prefix_list'), - path('prefixes/add/', views.PrefixEditView.as_view(), name='prefix_add'), - path('prefixes/import/', views.PrefixBulkImportView.as_view(), name='prefix_import'), - path('prefixes/edit/', views.PrefixBulkEditView.as_view(), name='prefix_bulk_edit'), - path('prefixes/delete/', views.PrefixBulkDeleteView.as_view(), name='prefix_bulk_delete'), + path('prefixes/', include(get_model_urls('ipam', 'prefix', detail=False))), path('prefixes//', include(get_model_urls('ipam', 'prefix'))), - # IP ranges - path('ip-ranges/', views.IPRangeListView.as_view(), name='iprange_list'), - path('ip-ranges/add/', views.IPRangeEditView.as_view(), name='iprange_add'), - path('ip-ranges/import/', views.IPRangeBulkImportView.as_view(), name='iprange_import'), - path('ip-ranges/edit/', views.IPRangeBulkEditView.as_view(), name='iprange_bulk_edit'), - path('ip-ranges/delete/', views.IPRangeBulkDeleteView.as_view(), name='iprange_bulk_delete'), + path('ip-ranges/', include(get_model_urls('ipam', 'iprange', detail=False))), path('ip-ranges//', include(get_model_urls('ipam', 'iprange'))), - # IP addresses - path('ip-addresses/', views.IPAddressListView.as_view(), name='ipaddress_list'), - path('ip-addresses/add/', views.IPAddressEditView.as_view(), name='ipaddress_add'), - path('ip-addresses/bulk-add/', views.IPAddressBulkCreateView.as_view(), name='ipaddress_bulk_add'), - path('ip-addresses/import/', views.IPAddressBulkImportView.as_view(), name='ipaddress_import'), - path('ip-addresses/edit/', views.IPAddressBulkEditView.as_view(), name='ipaddress_bulk_edit'), - path('ip-addresses/delete/', views.IPAddressBulkDeleteView.as_view(), name='ipaddress_bulk_delete'), - path('ip-addresses/assign/', views.IPAddressAssignView.as_view(), name='ipaddress_assign'), + path('ip-addresses/', include(get_model_urls('ipam', 'ipaddress', detail=False))), path('ip-addresses//', include(get_model_urls('ipam', 'ipaddress'))), - # FHRP groups - path('fhrp-groups/', views.FHRPGroupListView.as_view(), name='fhrpgroup_list'), - path('fhrp-groups/add/', views.FHRPGroupEditView.as_view(), name='fhrpgroup_add'), - path('fhrp-groups/import/', views.FHRPGroupBulkImportView.as_view(), name='fhrpgroup_import'), - path('fhrp-groups/edit/', views.FHRPGroupBulkEditView.as_view(), name='fhrpgroup_bulk_edit'), - path('fhrp-groups/delete/', views.FHRPGroupBulkDeleteView.as_view(), name='fhrpgroup_bulk_delete'), + path('fhrp-groups/', include(get_model_urls('ipam', 'fhrpgroup', detail=False))), path('fhrp-groups//', include(get_model_urls('ipam', 'fhrpgroup'))), - # FHRP group assignments - path('fhrp-group-assignments/add/', views.FHRPGroupAssignmentEditView.as_view(), name='fhrpgroupassignment_add'), + path('fhrp-group-assignments/', include(get_model_urls('ipam', 'fhrpgroupassignment', detail=False))), path('fhrp-group-assignments//', include(get_model_urls('ipam', 'fhrpgroupassignment'))), - # VLAN groups - path('vlan-groups/', views.VLANGroupListView.as_view(), name='vlangroup_list'), - path('vlan-groups/add/', views.VLANGroupEditView.as_view(), name='vlangroup_add'), - path('vlan-groups/import/', views.VLANGroupBulkImportView.as_view(), name='vlangroup_import'), - path('vlan-groups/edit/', views.VLANGroupBulkEditView.as_view(), name='vlangroup_bulk_edit'), - path('vlan-groups/delete/', views.VLANGroupBulkDeleteView.as_view(), name='vlangroup_bulk_delete'), + path('vlan-groups/', include(get_model_urls('ipam', 'vlangroup', detail=False))), path('vlan-groups//', include(get_model_urls('ipam', 'vlangroup'))), - # VLANs - path('vlans/', views.VLANListView.as_view(), name='vlan_list'), - path('vlans/add/', views.VLANEditView.as_view(), name='vlan_add'), - path('vlans/import/', views.VLANBulkImportView.as_view(), name='vlan_import'), - path('vlans/edit/', views.VLANBulkEditView.as_view(), name='vlan_bulk_edit'), - path('vlans/delete/', views.VLANBulkDeleteView.as_view(), name='vlan_bulk_delete'), + path('vlans/', include(get_model_urls('ipam', 'vlan', detail=False))), path('vlans//', include(get_model_urls('ipam', 'vlan'))), - # Service templates - path('service-templates/', views.ServiceTemplateListView.as_view(), name='servicetemplate_list'), - path('service-templates/add/', views.ServiceTemplateEditView.as_view(), name='servicetemplate_add'), - path('service-templates/import/', views.ServiceTemplateBulkImportView.as_view(), name='servicetemplate_import'), - path('service-templates/edit/', views.ServiceTemplateBulkEditView.as_view(), name='servicetemplate_bulk_edit'), - path('service-templates/delete/', views.ServiceTemplateBulkDeleteView.as_view(), name='servicetemplate_bulk_delete'), + path('vlan-translation-policies/', include(get_model_urls('ipam', 'vlantranslationpolicy', detail=False))), + path('vlan-translation-policies//', include(get_model_urls('ipam', 'vlantranslationpolicy'))), + + path('vlan-translation-rules/', include(get_model_urls('ipam', 'vlantranslationrule', detail=False))), + path('vlan-translation-rules//', include(get_model_urls('ipam', 'vlantranslationrule'))), + + path('service-templates/', include(get_model_urls('ipam', 'servicetemplate', detail=False))), path('service-templates//', include(get_model_urls('ipam', 'servicetemplate'))), - # Services - path('services/', views.ServiceListView.as_view(), name='service_list'), - path('services/add/', views.ServiceCreateView.as_view(), name='service_add'), - path('services/import/', views.ServiceBulkImportView.as_view(), name='service_import'), - path('services/edit/', views.ServiceBulkEditView.as_view(), name='service_bulk_edit'), - path('services/delete/', views.ServiceBulkDeleteView.as_view(), name='service_bulk_delete'), + path('services/', include(get_model_urls('ipam', 'service', detail=False))), path('services//', include(get_model_urls('ipam', 'service'))), ] diff --git a/netbox/ipam/views.py b/netbox/ipam/views.py index a2df4bcf2..c606c1088 100644 --- a/netbox/ipam/views.py +++ b/netbox/ipam/views.py @@ -9,6 +9,7 @@ from circuits.models import Provider from dcim.filtersets import InterfaceFilterSet from dcim.forms import InterfaceFilterForm from dcim.models import Interface, Site +from ipam.tables import VLANTranslationRuleTable from netbox.views import generic from tenancy.views import ObjectContactsView from utilities.query import count_related @@ -28,6 +29,7 @@ from .utils import add_requested_prefixes, add_available_ipaddresses, add_availa # VRFs # +@register_model_view(VRF, 'list', path='', detail=False) class VRFListView(generic.ObjectListView): queryset = VRF.objects.all() filterset = filtersets.VRFFilterSet @@ -56,6 +58,7 @@ class VRFView(GetRelatedModelsMixin, generic.ObjectView): } +@register_model_view(VRF, 'add', detail=False) @register_model_view(VRF, 'edit') class VRFEditView(generic.ObjectEditView): queryset = VRF.objects.all() @@ -67,11 +70,13 @@ class VRFDeleteView(generic.ObjectDeleteView): queryset = VRF.objects.all() +@register_model_view(VRF, 'bulk_import', detail=False) class VRFBulkImportView(generic.BulkImportView): queryset = VRF.objects.all() model_form = forms.VRFImportForm +@register_model_view(VRF, 'bulk_edit', path='edit', detail=False) class VRFBulkEditView(generic.BulkEditView): queryset = VRF.objects.all() filterset = filtersets.VRFFilterSet @@ -79,6 +84,7 @@ class VRFBulkEditView(generic.BulkEditView): form = forms.VRFBulkEditForm +@register_model_view(VRF, 'bulk_delete', path='delete', detail=False) class VRFBulkDeleteView(generic.BulkDeleteView): queryset = VRF.objects.all() filterset = filtersets.VRFFilterSet @@ -89,6 +95,7 @@ class VRFBulkDeleteView(generic.BulkDeleteView): # Route targets # +@register_model_view(RouteTarget, 'list', path='', detail=False) class RouteTargetListView(generic.ObjectListView): queryset = RouteTarget.objects.all() filterset = filtersets.RouteTargetFilterSet @@ -101,6 +108,7 @@ class RouteTargetView(generic.ObjectView): queryset = RouteTarget.objects.all() +@register_model_view(RouteTarget, 'add', detail=False) @register_model_view(RouteTarget, 'edit') class RouteTargetEditView(generic.ObjectEditView): queryset = RouteTarget.objects.all() @@ -112,11 +120,13 @@ class RouteTargetDeleteView(generic.ObjectDeleteView): queryset = RouteTarget.objects.all() +@register_model_view(RouteTarget, 'bulk_import', detail=False) class RouteTargetBulkImportView(generic.BulkImportView): queryset = RouteTarget.objects.all() model_form = forms.RouteTargetImportForm +@register_model_view(RouteTarget, 'bulk_edit', path='edit', detail=False) class RouteTargetBulkEditView(generic.BulkEditView): queryset = RouteTarget.objects.all() filterset = filtersets.RouteTargetFilterSet @@ -124,6 +134,7 @@ class RouteTargetBulkEditView(generic.BulkEditView): form = forms.RouteTargetBulkEditForm +@register_model_view(RouteTarget, 'bulk_delete', path='delete', detail=False) class RouteTargetBulkDeleteView(generic.BulkDeleteView): queryset = RouteTarget.objects.all() filterset = filtersets.RouteTargetFilterSet @@ -134,6 +145,7 @@ class RouteTargetBulkDeleteView(generic.BulkDeleteView): # RIRs # +@register_model_view(RIR, 'list', path='', detail=False) class RIRListView(generic.ObjectListView): queryset = RIR.objects.annotate( aggregate_count=count_related(Aggregate, 'rir') @@ -153,6 +165,7 @@ class RIRView(GetRelatedModelsMixin, generic.ObjectView): } +@register_model_view(RIR, 'add', detail=False) @register_model_view(RIR, 'edit') class RIREditView(generic.ObjectEditView): queryset = RIR.objects.all() @@ -164,11 +177,13 @@ class RIRDeleteView(generic.ObjectDeleteView): queryset = RIR.objects.all() +@register_model_view(RIR, 'bulk_import', detail=False) class RIRBulkImportView(generic.BulkImportView): queryset = RIR.objects.all() model_form = forms.RIRImportForm +@register_model_view(RIR, 'bulk_edit', path='edit', detail=False) class RIRBulkEditView(generic.BulkEditView): queryset = RIR.objects.annotate( aggregate_count=count_related(Aggregate, 'rir') @@ -178,6 +193,7 @@ class RIRBulkEditView(generic.BulkEditView): form = forms.RIRBulkEditForm +@register_model_view(RIR, 'bulk_delete', path='delete', detail=False) class RIRBulkDeleteView(generic.BulkDeleteView): queryset = RIR.objects.annotate( aggregate_count=count_related(Aggregate, 'rir') @@ -190,6 +206,7 @@ class RIRBulkDeleteView(generic.BulkDeleteView): # ASN ranges # +@register_model_view(ASNRange, 'list', path='', detail=False) class ASNRangeListView(generic.ObjectListView): queryset = ASNRange.objects.annotate_asn_counts() filterset = filtersets.ASNRangeFilterSet @@ -223,6 +240,7 @@ class ASNRangeASNsView(generic.ObjectChildrenView): ) +@register_model_view(ASNRange, 'add', detail=False) @register_model_view(ASNRange, 'edit') class ASNRangeEditView(generic.ObjectEditView): queryset = ASNRange.objects.all() @@ -234,11 +252,13 @@ class ASNRangeDeleteView(generic.ObjectDeleteView): queryset = ASNRange.objects.all() +@register_model_view(ASNRange, 'bulk_import', detail=False) class ASNRangeBulkImportView(generic.BulkImportView): queryset = ASNRange.objects.all() model_form = forms.ASNRangeImportForm +@register_model_view(ASNRange, 'bulk_edit', path='edit', detail=False) class ASNRangeBulkEditView(generic.BulkEditView): queryset = ASNRange.objects.annotate_asn_counts() filterset = filtersets.ASNRangeFilterSet @@ -246,6 +266,7 @@ class ASNRangeBulkEditView(generic.BulkEditView): form = forms.ASNRangeBulkEditForm +@register_model_view(ASNRange, 'bulk_delete', path='delete', detail=False) class ASNRangeBulkDeleteView(generic.BulkDeleteView): queryset = ASNRange.objects.annotate_asn_counts() filterset = filtersets.ASNRangeFilterSet @@ -256,6 +277,7 @@ class ASNRangeBulkDeleteView(generic.BulkDeleteView): # ASNs # +@register_model_view(ASN, 'list', path='', detail=False) class ASNListView(generic.ObjectListView): queryset = ASN.objects.annotate( site_count=count_related(Site, 'asns'), @@ -283,6 +305,7 @@ class ASNView(GetRelatedModelsMixin, generic.ObjectView): } +@register_model_view(ASN, 'add', detail=False) @register_model_view(ASN, 'edit') class ASNEditView(generic.ObjectEditView): queryset = ASN.objects.all() @@ -294,11 +317,13 @@ class ASNDeleteView(generic.ObjectDeleteView): queryset = ASN.objects.all() +@register_model_view(ASN, 'bulk_import', detail=False) class ASNBulkImportView(generic.BulkImportView): queryset = ASN.objects.all() model_form = forms.ASNImportForm +@register_model_view(ASN, 'bulk_edit', path='edit', detail=False) class ASNBulkEditView(generic.BulkEditView): queryset = ASN.objects.annotate( site_count=count_related(Site, 'asns') @@ -308,6 +333,7 @@ class ASNBulkEditView(generic.BulkEditView): form = forms.ASNBulkEditForm +@register_model_view(ASN, 'bulk_delete', path='delete', detail=False) class ASNBulkDeleteView(generic.BulkDeleteView): queryset = ASN.objects.annotate( site_count=count_related(Site, 'asns') @@ -320,6 +346,7 @@ class ASNBulkDeleteView(generic.BulkDeleteView): # Aggregates # +@register_model_view(Aggregate, 'list', path='', detail=False) class AggregateListView(generic.ObjectListView): queryset = Aggregate.objects.annotate( child_count=RawSQL('SELECT COUNT(*) FROM ipam_prefix WHERE ipam_prefix.prefix <<= ipam_aggregate.prefix', ()) @@ -352,7 +379,7 @@ class AggregatePrefixesView(generic.ObjectChildrenView): def get_children(self, request, parent): return Prefix.objects.restrict(request.user, 'view').filter( prefix__net_contained_or_equal=str(parent.prefix) - ).prefetch_related('site', 'role', 'tenant', 'tenant__group', 'vlan') + ).prefetch_related('scope', 'role', 'tenant', 'tenant__group', 'vlan') def prep_table_data(self, request, queryset, parent): # Determine whether to show assigned prefixes, available prefixes, or both @@ -370,6 +397,7 @@ class AggregatePrefixesView(generic.ObjectChildrenView): } +@register_model_view(Aggregate, 'add', detail=False) @register_model_view(Aggregate, 'edit') class AggregateEditView(generic.ObjectEditView): queryset = Aggregate.objects.all() @@ -381,11 +409,13 @@ class AggregateDeleteView(generic.ObjectDeleteView): queryset = Aggregate.objects.all() +@register_model_view(Aggregate, 'bulk_import', detail=False) class AggregateBulkImportView(generic.BulkImportView): queryset = Aggregate.objects.all() model_form = forms.AggregateImportForm +@register_model_view(Aggregate, 'bulk_edit', path='edit', detail=False) class AggregateBulkEditView(generic.BulkEditView): queryset = Aggregate.objects.annotate( child_count=RawSQL('SELECT COUNT(*) FROM ipam_prefix WHERE ipam_prefix.prefix <<= ipam_aggregate.prefix', ()) @@ -395,6 +425,7 @@ class AggregateBulkEditView(generic.BulkEditView): form = forms.AggregateBulkEditForm +@register_model_view(Aggregate, 'bulk_delete', path='delete', detail=False) class AggregateBulkDeleteView(generic.BulkDeleteView): queryset = Aggregate.objects.annotate( child_count=RawSQL('SELECT COUNT(*) FROM ipam_prefix WHERE ipam_prefix.prefix <<= ipam_aggregate.prefix', ()) @@ -412,6 +443,7 @@ class AggregateContactsView(ObjectContactsView): # Prefix/VLAN roles # +@register_model_view(Role, 'list', path='', detail=False) class RoleListView(generic.ObjectListView): queryset = Role.objects.annotate( prefix_count=count_related(Prefix, 'role'), @@ -433,6 +465,7 @@ class RoleView(GetRelatedModelsMixin, generic.ObjectView): } +@register_model_view(Role, 'add', detail=False) @register_model_view(Role, 'edit') class RoleEditView(generic.ObjectEditView): queryset = Role.objects.all() @@ -444,11 +477,13 @@ class RoleDeleteView(generic.ObjectDeleteView): queryset = Role.objects.all() +@register_model_view(Role, 'bulk_import', detail=False) class RoleBulkImportView(generic.BulkImportView): queryset = Role.objects.all() model_form = forms.RoleImportForm +@register_model_view(Role, 'bulk_edit', path='edit', detail=False) class RoleBulkEditView(generic.BulkEditView): queryset = Role.objects.all() filterset = filtersets.RoleFilterSet @@ -456,6 +491,7 @@ class RoleBulkEditView(generic.BulkEditView): form = forms.RoleBulkEditForm +@register_model_view(Role, 'bulk_delete', path='delete', detail=False) class RoleBulkDeleteView(generic.BulkDeleteView): queryset = Role.objects.all() filterset = filtersets.RoleFilterSet @@ -466,6 +502,7 @@ class RoleBulkDeleteView(generic.BulkDeleteView): # Prefixes # +@register_model_view(Prefix, 'list', path='', detail=False) class PrefixListView(generic.ObjectListView): queryset = Prefix.objects.all() filterset = filtersets.PrefixFilterSet @@ -492,7 +529,7 @@ class PrefixView(generic.ObjectView): ).filter( prefix__net_contains=str(instance.prefix) ).prefetch_related( - 'site', 'role', 'tenant', 'vlan', + 'scope', 'role', 'tenant', 'vlan', ) parent_prefix_table = tables.PrefixTable( list(parent_prefixes), @@ -506,7 +543,7 @@ class PrefixView(generic.ObjectView): ).exclude( pk=instance.pk ).prefetch_related( - 'site', 'role', 'tenant', 'vlan', + 'scope', 'role', 'tenant', 'vlan', ) duplicate_prefix_table = tables.PrefixTable( list(duplicate_prefixes), @@ -538,7 +575,7 @@ class PrefixPrefixesView(generic.ObjectChildrenView): def get_children(self, request, parent): return parent.get_child_prefixes().restrict(request.user, 'view').prefetch_related( - 'site', 'vrf', 'vlan', 'role', 'tenant', 'tenant__group' + 'scope', 'vrf', 'vlan', 'role', 'tenant', 'tenant__group' ) def prep_table_data(self, request, queryset, parent): @@ -614,6 +651,7 @@ class PrefixIPAddressesView(generic.ObjectChildrenView): } +@register_model_view(Prefix, 'add', detail=False) @register_model_view(Prefix, 'edit') class PrefixEditView(generic.ObjectEditView): queryset = Prefix.objects.all() @@ -625,11 +663,13 @@ class PrefixDeleteView(generic.ObjectDeleteView): queryset = Prefix.objects.all() +@register_model_view(Prefix, 'bulk_import', detail=False) class PrefixBulkImportView(generic.BulkImportView): queryset = Prefix.objects.all() model_form = forms.PrefixImportForm +@register_model_view(Prefix, 'bulk_edit', path='edit', detail=False) class PrefixBulkEditView(generic.BulkEditView): queryset = Prefix.objects.prefetch_related('vrf__tenant') filterset = filtersets.PrefixFilterSet @@ -637,6 +677,7 @@ class PrefixBulkEditView(generic.BulkEditView): form = forms.PrefixBulkEditForm +@register_model_view(Prefix, 'bulk_delete', path='delete', detail=False) class PrefixBulkDeleteView(generic.BulkDeleteView): queryset = Prefix.objects.prefetch_related('vrf__tenant') filterset = filtersets.PrefixFilterSet @@ -652,6 +693,7 @@ class PrefixContactsView(ObjectContactsView): # IP Ranges # +@register_model_view(IPRange, 'list', path='', detail=False) class IPRangeListView(generic.ObjectListView): queryset = IPRange.objects.all() filterset = filtersets.IPRangeFilterSet @@ -671,7 +713,7 @@ class IPRangeView(generic.ObjectView): Q(prefix__net_contains_or_equals=str(instance.end_address.ip)), vrf=instance.vrf ).prefetch_related( - 'site', 'role', 'tenant', 'vlan', 'role' + 'scope', 'role', 'tenant', 'vlan', 'role' ) parent_prefixes_table = tables.PrefixTable( list(parent_prefixes), @@ -703,6 +745,7 @@ class IPRangeIPAddressesView(generic.ObjectChildrenView): return parent.get_child_ips().restrict(request.user, 'view') +@register_model_view(IPRange, 'add', detail=False) @register_model_view(IPRange, 'edit') class IPRangeEditView(generic.ObjectEditView): queryset = IPRange.objects.all() @@ -714,11 +757,13 @@ class IPRangeDeleteView(generic.ObjectDeleteView): queryset = IPRange.objects.all() +@register_model_view(IPRange, 'bulk_import', detail=False) class IPRangeBulkImportView(generic.BulkImportView): queryset = IPRange.objects.all() model_form = forms.IPRangeImportForm +@register_model_view(IPRange, 'bulk_edit', path='edit', detail=False) class IPRangeBulkEditView(generic.BulkEditView): queryset = IPRange.objects.all() filterset = filtersets.IPRangeFilterSet @@ -726,6 +771,7 @@ class IPRangeBulkEditView(generic.BulkEditView): form = forms.IPRangeBulkEditForm +@register_model_view(IPRange, 'bulk_delete', path='delete', detail=False) class IPRangeBulkDeleteView(generic.BulkDeleteView): queryset = IPRange.objects.all() filterset = filtersets.IPRangeFilterSet @@ -741,6 +787,7 @@ class IPRangeContactsView(ObjectContactsView): # IP addresses # +@register_model_view(IPAddress, 'list', path='', detail=False) class IPAddressListView(generic.ObjectListView): queryset = IPAddress.objects.all() filterset = filtersets.IPAddressFilterSet @@ -758,7 +805,7 @@ class IPAddressView(generic.ObjectView): vrf=instance.vrf, prefix__net_contains_or_equals=str(instance.address.ip) ).prefetch_related( - 'site', 'role' + 'scope', 'role' ) parent_prefixes_table = tables.PrefixTable( list(parent_prefixes), @@ -787,6 +834,7 @@ class IPAddressView(generic.ObjectView): } +@register_model_view(IPAddress, 'add', detail=False) @register_model_view(IPAddress, 'edit') class IPAddressEditView(generic.ObjectEditView): queryset = IPAddress.objects.all() @@ -817,6 +865,7 @@ class IPAddressEditView(generic.ObjectEditView): # TODO: Standardize or remove this view +@register_model_view(IPAddress, 'assign', path='assign', detail=False) class IPAddressAssignView(generic.ObjectView): """ Search for IPAddresses to be assigned to an Interface. @@ -861,6 +910,7 @@ class IPAddressDeleteView(generic.ObjectDeleteView): queryset = IPAddress.objects.all() +@register_model_view(IPAddress, 'bulk_add', path='bulk-add', detail=False) class IPAddressBulkCreateView(generic.BulkCreateView): queryset = IPAddress.objects.all() form = forms.IPAddressBulkCreateForm @@ -869,11 +919,13 @@ class IPAddressBulkCreateView(generic.BulkCreateView): template_name = 'ipam/ipaddress_bulk_add.html' +@register_model_view(IPAddress, 'bulk_import', detail=False) class IPAddressBulkImportView(generic.BulkImportView): queryset = IPAddress.objects.all() model_form = forms.IPAddressImportForm +@register_model_view(IPAddress, 'bulk_edit', path='edit', detail=False) class IPAddressBulkEditView(generic.BulkEditView): queryset = IPAddress.objects.prefetch_related('vrf__tenant') filterset = filtersets.IPAddressFilterSet @@ -881,6 +933,7 @@ class IPAddressBulkEditView(generic.BulkEditView): form = forms.IPAddressBulkEditForm +@register_model_view(IPAddress, 'bulk_delete', path='delete', detail=False) class IPAddressBulkDeleteView(generic.BulkDeleteView): queryset = IPAddress.objects.prefetch_related('vrf__tenant') filterset = filtersets.IPAddressFilterSet @@ -914,6 +967,7 @@ class IPAddressContactsView(ObjectContactsView): # VLAN groups # +@register_model_view(VLANGroup, 'list', path='', detail=False) class VLANGroupListView(generic.ObjectListView): queryset = VLANGroup.objects.annotate_utilization() filterset = filtersets.VLANGroupFilterSet @@ -931,6 +985,7 @@ class VLANGroupView(GetRelatedModelsMixin, generic.ObjectView): } +@register_model_view(VLANGroup, 'add', detail=False) @register_model_view(VLANGroup, 'edit') class VLANGroupEditView(generic.ObjectEditView): queryset = VLANGroup.objects.all() @@ -942,11 +997,13 @@ class VLANGroupDeleteView(generic.ObjectDeleteView): queryset = VLANGroup.objects.all() +@register_model_view(VLANGroup, 'bulk_import', detail=False) class VLANGroupBulkImportView(generic.BulkImportView): queryset = VLANGroup.objects.all() model_form = forms.VLANGroupImportForm +@register_model_view(VLANGroup, 'bulk_edit', path='edit', detail=False) class VLANGroupBulkEditView(generic.BulkEditView): queryset = VLANGroup.objects.annotate_utilization().prefetch_related('tags') filterset = filtersets.VLANGroupFilterSet @@ -954,6 +1011,7 @@ class VLANGroupBulkEditView(generic.BulkEditView): form = forms.VLANGroupBulkEditForm +@register_model_view(VLANGroup, 'bulk_delete', path='delete', detail=False) class VLANGroupBulkDeleteView(generic.BulkDeleteView): queryset = VLANGroup.objects.annotate_utilization().prefetch_related('tags') filterset = filtersets.VLANGroupFilterSet @@ -986,10 +1044,127 @@ class VLANGroupVLANsView(generic.ObjectChildrenView): return queryset +# +# VLAN Translation Policies +# + +@register_model_view(VLANTranslationPolicy, 'list', path='', detail=False) +class VLANTranslationPolicyListView(generic.ObjectListView): + queryset = VLANTranslationPolicy.objects.annotate( + rule_count=count_related(VLANTranslationRule, 'policy'), + ) + filterset = filtersets.VLANTranslationPolicyFilterSet + filterset_form = forms.VLANTranslationPolicyFilterForm + table = tables.VLANTranslationPolicyTable + + +@register_model_view(VLANTranslationPolicy) +class VLANTranslationPolicyView(GetRelatedModelsMixin, generic.ObjectView): + queryset = VLANTranslationPolicy.objects.all() + + def get_extra_context(self, request, instance): + vlan_translation_table = VLANTranslationRuleTable( + data=instance.rules.all(), + orderable=False + ) + return { + 'vlan_translation_table': vlan_translation_table, + } + + +@register_model_view(VLANTranslationPolicy, 'add', detail=False) +@register_model_view(VLANTranslationPolicy, 'edit') +class VLANTranslationPolicyEditView(generic.ObjectEditView): + queryset = VLANTranslationPolicy.objects.all() + form = forms.VLANTranslationPolicyForm + + +@register_model_view(VLANTranslationPolicy, 'delete') +class VLANTranslationPolicyDeleteView(generic.ObjectDeleteView): + queryset = VLANTranslationPolicy.objects.all() + + +@register_model_view(VLANTranslationPolicy, 'bulk_import', detail=False) +class VLANTranslationPolicyBulkImportView(generic.BulkImportView): + queryset = VLANTranslationPolicy.objects.all() + model_form = forms.VLANTranslationPolicyImportForm + + +@register_model_view(VLANTranslationPolicy, 'bulk_edit', path='edit', detail=False) +class VLANTranslationPolicyBulkEditView(generic.BulkEditView): + queryset = VLANTranslationPolicy.objects.all() + filterset = filtersets.VLANTranslationPolicyFilterSet + table = tables.VLANTranslationPolicyTable + form = forms.VLANTranslationPolicyBulkEditForm + + +@register_model_view(VLANTranslationPolicy, 'bulk_delete', path='delete', detail=False) +class VLANTranslationPolicyBulkDeleteView(generic.BulkDeleteView): + queryset = VLANTranslationPolicy.objects.all() + filterset = filtersets.VLANTranslationPolicyFilterSet + table = tables.VLANTranslationPolicyTable + + +# +# VLAN Translation Rules +# + +@register_model_view(VLANTranslationRule, 'list', path='', detail=False) +class VLANTranslationRuleListView(generic.ObjectListView): + queryset = VLANTranslationRule.objects.all() + filterset = filtersets.VLANTranslationRuleFilterSet + filterset_form = forms.VLANTranslationRuleFilterForm + table = tables.VLANTranslationRuleTable + + +@register_model_view(VLANTranslationRule) +class VLANTranslationRuleView(GetRelatedModelsMixin, generic.ObjectView): + queryset = VLANTranslationRule.objects.all() + + def get_extra_context(self, request, instance): + return { + 'related_models': self.get_related_models(request, instance), + } + + +@register_model_view(VLANTranslationRule, 'add', detail=False) +@register_model_view(VLANTranslationRule, 'edit') +class VLANTranslationRuleEditView(generic.ObjectEditView): + queryset = VLANTranslationRule.objects.all() + form = forms.VLANTranslationRuleForm + + +@register_model_view(VLANTranslationRule, 'delete') +class VLANTranslationRuleDeleteView(generic.ObjectDeleteView): + queryset = VLANTranslationRule.objects.all() + + +@register_model_view(VLANTranslationRule, 'bulk_import', detail=False) +class VLANTranslationRuleBulkImportView(generic.BulkImportView): + queryset = VLANTranslationRule.objects.all() + model_form = forms.VLANTranslationRuleImportForm + + +@register_model_view(VLANTranslationRule, 'bulk_edit', path='edit', detail=False) +class VLANTranslationRuleBulkEditView(generic.BulkEditView): + queryset = VLANTranslationRule.objects.all() + filterset = filtersets.VLANTranslationRuleFilterSet + table = tables.VLANTranslationRuleTable + form = forms.VLANTranslationRuleBulkEditForm + + +@register_model_view(VLANTranslationRule, 'bulk_delete', path='delete', detail=False) +class VLANTranslationRuleBulkDeleteView(generic.BulkDeleteView): + queryset = VLANTranslationRule.objects.all() + filterset = filtersets.VLANTranslationRuleFilterSet + table = tables.VLANTranslationRuleTable + + # # FHRP groups # +@register_model_view(FHRPGroup, 'list', path='', detail=False) class FHRPGroupListView(generic.ObjectListView): queryset = FHRPGroup.objects.annotate( member_count=count_related(FHRPGroupAssignment, 'group') @@ -1017,6 +1192,7 @@ class FHRPGroupView(generic.ObjectView): } +@register_model_view(FHRPGroup, 'add', detail=False) @register_model_view(FHRPGroup, 'edit') class FHRPGroupEditView(generic.ObjectEditView): queryset = FHRPGroup.objects.all() @@ -1044,11 +1220,13 @@ class FHRPGroupDeleteView(generic.ObjectDeleteView): queryset = FHRPGroup.objects.all() +@register_model_view(FHRPGroup, 'bulk_import', detail=False) class FHRPGroupBulkImportView(generic.BulkImportView): queryset = FHRPGroup.objects.all() model_form = forms.FHRPGroupImportForm +@register_model_view(FHRPGroup, 'bulk_edit', path='edit', detail=False) class FHRPGroupBulkEditView(generic.BulkEditView): queryset = FHRPGroup.objects.all() filterset = filtersets.FHRPGroupFilterSet @@ -1056,6 +1234,7 @@ class FHRPGroupBulkEditView(generic.BulkEditView): form = forms.FHRPGroupBulkEditForm +@register_model_view(FHRPGroup, 'bulk_delete', path='delete', detail=False) class FHRPGroupBulkDeleteView(generic.BulkDeleteView): queryset = FHRPGroup.objects.all() filterset = filtersets.FHRPGroupFilterSet @@ -1066,6 +1245,7 @@ class FHRPGroupBulkDeleteView(generic.BulkDeleteView): # FHRP group assignments # +@register_model_view(FHRPGroupAssignment, 'add', detail=False) @register_model_view(FHRPGroupAssignment, 'edit') class FHRPGroupAssignmentEditView(generic.ObjectEditView): queryset = FHRPGroupAssignment.objects.all() @@ -1094,6 +1274,7 @@ class FHRPGroupAssignmentDeleteView(generic.ObjectDeleteView): # VLANs # +@register_model_view(VLAN, 'list', path='', detail=False) class VLANListView(generic.ObjectListView): queryset = VLAN.objects.all() filterset = filtersets.VLANFilterSet @@ -1107,7 +1288,7 @@ class VLANView(generic.ObjectView): def get_extra_context(self, request, instance): prefixes = Prefix.objects.restrict(request.user, 'view').filter(vlan=instance).prefetch_related( - 'vrf', 'site', 'role', 'tenant' + 'vrf', 'scope', 'role', 'tenant' ) prefix_table = tables.PrefixTable(list(prefixes), exclude=('vlan', 'utilization'), orderable=False) @@ -1152,6 +1333,7 @@ class VLANVMInterfacesView(generic.ObjectChildrenView): return parent.get_vminterfaces().restrict(request.user, 'view') +@register_model_view(VLAN, 'add', detail=False) @register_model_view(VLAN, 'edit') class VLANEditView(generic.ObjectEditView): queryset = VLAN.objects.all() @@ -1164,11 +1346,13 @@ class VLANDeleteView(generic.ObjectDeleteView): queryset = VLAN.objects.all() +@register_model_view(VLAN, 'bulk_import', detail=False) class VLANBulkImportView(generic.BulkImportView): queryset = VLAN.objects.all() model_form = forms.VLANImportForm +@register_model_view(VLAN, 'bulk_edit', path='edit', detail=False) class VLANBulkEditView(generic.BulkEditView): queryset = VLAN.objects.all() filterset = filtersets.VLANFilterSet @@ -1176,6 +1360,7 @@ class VLANBulkEditView(generic.BulkEditView): form = forms.VLANBulkEditForm +@register_model_view(VLAN, 'bulk_delete', path='delete', detail=False) class VLANBulkDeleteView(generic.BulkDeleteView): queryset = VLAN.objects.all() filterset = filtersets.VLANFilterSet @@ -1186,6 +1371,7 @@ class VLANBulkDeleteView(generic.BulkDeleteView): # Service templates # +@register_model_view(ServiceTemplate, 'list', path='', detail=False) class ServiceTemplateListView(generic.ObjectListView): queryset = ServiceTemplate.objects.all() filterset = filtersets.ServiceTemplateFilterSet @@ -1198,6 +1384,7 @@ class ServiceTemplateView(generic.ObjectView): queryset = ServiceTemplate.objects.all() +@register_model_view(ServiceTemplate, 'add', detail=False) @register_model_view(ServiceTemplate, 'edit') class ServiceTemplateEditView(generic.ObjectEditView): queryset = ServiceTemplate.objects.all() @@ -1209,11 +1396,13 @@ class ServiceTemplateDeleteView(generic.ObjectDeleteView): queryset = ServiceTemplate.objects.all() +@register_model_view(ServiceTemplate, 'bulk_import', detail=False) class ServiceTemplateBulkImportView(generic.BulkImportView): queryset = ServiceTemplate.objects.all() model_form = forms.ServiceTemplateImportForm +@register_model_view(ServiceTemplate, 'bulk_edit', path='edit', detail=False) class ServiceTemplateBulkEditView(generic.BulkEditView): queryset = ServiceTemplate.objects.all() filterset = filtersets.ServiceTemplateFilterSet @@ -1221,6 +1410,7 @@ class ServiceTemplateBulkEditView(generic.BulkEditView): form = forms.ServiceTemplateBulkEditForm +@register_model_view(ServiceTemplate, 'bulk_delete', path='delete', detail=False) class ServiceTemplateBulkDeleteView(generic.BulkDeleteView): queryset = ServiceTemplate.objects.all() filterset = filtersets.ServiceTemplateFilterSet @@ -1231,6 +1421,7 @@ class ServiceTemplateBulkDeleteView(generic.BulkDeleteView): # Services # +@register_model_view(Service, 'list', path='', detail=False) class ServiceListView(generic.ObjectListView): queryset = Service.objects.prefetch_related('device', 'virtual_machine') filterset = filtersets.ServiceFilterSet @@ -1243,6 +1434,7 @@ class ServiceView(generic.ObjectView): queryset = Service.objects.all() +@register_model_view(Service, 'add', detail=False) class ServiceCreateView(generic.ObjectEditView): queryset = Service.objects.all() form = forms.ServiceCreateForm @@ -1259,11 +1451,13 @@ class ServiceDeleteView(generic.ObjectDeleteView): queryset = Service.objects.all() +@register_model_view(Service, 'bulk_import', detail=False) class ServiceBulkImportView(generic.BulkImportView): queryset = Service.objects.all() model_form = forms.ServiceImportForm +@register_model_view(Service, 'bulk_edit', path='edit', detail=False) class ServiceBulkEditView(generic.BulkEditView): queryset = Service.objects.prefetch_related('device', 'virtual_machine') filterset = filtersets.ServiceFilterSet @@ -1271,6 +1465,7 @@ class ServiceBulkEditView(generic.BulkEditView): form = forms.ServiceBulkEditForm +@register_model_view(Service, 'bulk_delete', path='delete', detail=False) class ServiceBulkDeleteView(generic.BulkDeleteView): queryset = Service.objects.prefetch_related('device', 'virtual_machine') filterset = filtersets.ServiceFilterSet diff --git a/netbox/netbox/admin.py b/netbox/netbox/admin.py deleted file mode 100644 index cdfacc141..000000000 --- a/netbox/netbox/admin.py +++ /dev/null @@ -1,14 +0,0 @@ -from django.conf import settings -from django.contrib.admin import site as admin_site -from taggit.models import Tag - - -# Override default AdminSite attributes so we can avoid creating and -# registering our own class -admin_site.site_header = 'NetBox Administration' -admin_site.site_title = 'NetBox' -admin_site.site_url = '/{}'.format(settings.BASE_PATH) -admin_site.index_template = 'admin/index.html' - -# Unregister the unused stock Tag model provided by django-taggit -admin_site.unregister(Tag) diff --git a/netbox/netbox/api/pagination.py b/netbox/netbox/api/pagination.py index 5ecade264..f1430a9fd 100644 --- a/netbox/netbox/api/pagination.py +++ b/netbox/netbox/api/pagination.py @@ -38,12 +38,14 @@ class OptionalLimitOffsetPagination(LimitOffsetPagination): def get_limit(self, request): if self.limit_query_param: + MAX_PAGE_SIZE = get_config().MAX_PAGE_SIZE + if MAX_PAGE_SIZE: + MAX_PAGE_SIZE = max(MAX_PAGE_SIZE, self.default_limit) try: limit = int(request.query_params[self.limit_query_param]) if limit < 0: raise ValueError() # Enforce maximum page size, if defined - MAX_PAGE_SIZE = get_config().MAX_PAGE_SIZE if MAX_PAGE_SIZE: return MAX_PAGE_SIZE if limit == 0 else min(limit, MAX_PAGE_SIZE) return limit @@ -83,3 +85,28 @@ class StripCountAnnotationsPaginator(OptionalLimitOffsetPagination): cloned_queryset.query.annotations.clear() return cloned_queryset.count() + + +class LimitOffsetListPagination(LimitOffsetPagination): + """ + DRF LimitOffset Paginator but for list instead of queryset + """ + count = 0 + offset = 0 + + def paginate_list(self, data, request, view=None): + self.request = request + self.limit = self.get_limit(request) + self.count = len(data) + self.offset = self.get_offset(request) + + if self.limit is None: + self.limit = self.count + + if self.count == 0 or self.offset > self.count: + return [] + + if self.count > self.limit and self.template is not None: + self.display_page_controls = True + + return data[self.offset:self.offset + self.limit] diff --git a/netbox/netbox/api/serializers/base.py b/netbox/netbox/api/serializers/base.py index 8115fe020..6cd4e5738 100644 --- a/netbox/netbox/api/serializers/base.py +++ b/netbox/netbox/api/serializers/base.py @@ -76,6 +76,12 @@ class ValidatedModelSerializer(BaseModelSerializer): Extends the built-in ModelSerializer to enforce calling full_clean() on a copy of the associated instance during validation. (DRF does not do this by default; see https://github.com/encode/django-rest-framework/issues/3144) """ + + # Bypass DRF's built-in validation of unique constraints due to DRF bug #9410. Rely instead + # on our own custom model validation (below). + def get_unique_together_constraints(self, model): + return [] + def validate(self, data): # Skip validation if we're being used to represent a nested object diff --git a/netbox/netbox/authentication/__init__.py b/netbox/netbox/authentication/__init__.py index 7c2df4200..83f699e42 100644 --- a/netbox/netbox/authentication/__init__.py +++ b/netbox/netbox/authentication/__init__.py @@ -107,7 +107,7 @@ class ObjectPermissionMixin: return perms def has_perm(self, user_obj, perm, obj=None): - app_label, action, model_name = resolve_permission(perm) + app_label, __, model_name = resolve_permission(perm) # Superusers implicitly have all permissions if user_obj.is_active and user_obj.is_superuser: diff --git a/netbox/netbox/choices.py b/netbox/netbox/choices.py index 4fd730255..5c3110745 100644 --- a/netbox/netbox/choices.py +++ b/netbox/netbox/choices.py @@ -7,8 +7,10 @@ __all__ = ( 'ButtonColorChoices', 'ColorChoices', 'CSVDelimiterChoices', + 'DistanceUnitChoices', 'ImportFormatChoices', 'ImportMethodChoices', + 'WeightUnitChoices', ) @@ -157,3 +159,39 @@ class CSVDelimiterChoices(ChoiceSet): (SEMICOLON, _('Semicolon')), (TAB, _('Tab')), ] + + +class DistanceUnitChoices(ChoiceSet): + + # Metric + UNIT_KILOMETER = 'km' + UNIT_METER = 'm' + + # Imperial + UNIT_MILE = 'mi' + UNIT_FOOT = 'ft' + + CHOICES = ( + (UNIT_KILOMETER, _('Kilometers')), + (UNIT_METER, _('Meters')), + (UNIT_MILE, _('Miles')), + (UNIT_FOOT, _('Feet')), + ) + + +class WeightUnitChoices(ChoiceSet): + + # Metric + UNIT_KILOGRAM = 'kg' + UNIT_GRAM = 'g' + + # Imperial + UNIT_POUND = 'lb' + UNIT_OUNCE = 'oz' + + CHOICES = ( + (UNIT_KILOGRAM, _('Kilograms')), + (UNIT_GRAM, _('Grams')), + (UNIT_POUND, _('Pounds')), + (UNIT_OUNCE, _('Ounces')), + ) diff --git a/netbox/netbox/configuration_testing.py b/netbox/netbox/configuration_testing.py index 346cd89d2..cec05cabb 100644 --- a/netbox/netbox/configuration_testing.py +++ b/netbox/netbox/configuration_testing.py @@ -39,8 +39,6 @@ REDIS = { SECRET_KEY = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' -DJANGO_ADMIN_ENABLED = True - DEFAULT_PERMISSIONS = {} LOGGING = { diff --git a/netbox/netbox/constants.py b/netbox/netbox/constants.py index b8c679ec0..8d20fed45 100644 --- a/netbox/netbox/constants.py +++ b/netbox/netbox/constants.py @@ -31,8 +31,8 @@ ADVISORY_LOCK_KEYS = { # Default view action permission mapping DEFAULT_ACTION_PERMISSIONS = { 'add': {'add'}, - 'import': {'add'}, 'export': {'view'}, + 'bulk_import': {'add'}, 'bulk_edit': {'change'}, 'bulk_delete': {'delete'}, } diff --git a/netbox/netbox/context_managers.py b/netbox/netbox/context_managers.py index ca434df82..7b01cce94 100644 --- a/netbox/netbox/context_managers.py +++ b/netbox/netbox/context_managers.py @@ -1,9 +1,11 @@ from contextlib import contextmanager from netbox.context import current_request, events_queue +from netbox.utils import register_request_processor from extras.events import flush_events +@register_request_processor @contextmanager def event_tracking(request): """ diff --git a/netbox/netbox/filtersets.py b/netbox/netbox/filtersets.py index 637a40bf1..b8fbe7ad5 100644 --- a/netbox/netbox/filtersets.py +++ b/netbox/netbox/filtersets.py @@ -179,6 +179,8 @@ class BaseFilterSet(django_filters.FilterSet): # The filter field has been explicitly defined on the filterset class so we must manually # create the new filter with the same type because there is no guarantee the defined type # is the same as the default type for the field + if field is None: + raise ValueError('Invalid field name/lookup on {}: {}'.format(existing_filter_name, field_name)) resolve_field(field, lookup_expr) # Will raise FieldLookupError if the lookup is invalid filter_cls = type(existing_filter) if lookup_expr == 'empty': @@ -262,7 +264,9 @@ class ChangeLoggedModelFilterSet(BaseFilterSet): action = { 'created_by_request': Q(action=ObjectChangeActionChoices.ACTION_CREATE), 'updated_by_request': Q(action=ObjectChangeActionChoices.ACTION_UPDATE), - 'modified_by_request': Q(action__in=[ObjectChangeActionChoices.ACTION_CREATE, ObjectChangeActionChoices.ACTION_UPDATE]), + 'modified_by_request': Q( + action__in=[ObjectChangeActionChoices.ACTION_CREATE, ObjectChangeActionChoices.ACTION_UPDATE] + ), }.get(name) request_id = value pks = ObjectChange.objects.filter( diff --git a/netbox/netbox/jobs.py b/netbox/netbox/jobs.py index ae8f2f109..3af3af554 100644 --- a/netbox/netbox/jobs.py +++ b/netbox/netbox/jobs.py @@ -2,6 +2,7 @@ import logging from abc import ABC, abstractmethod from datetime import timedelta +from django.core.exceptions import ImproperlyConfigured from django.utils.functional import classproperty from django_pglocks import advisory_lock from rq.timeouts import JobTimeoutException @@ -9,12 +10,30 @@ from rq.timeouts import JobTimeoutException from core.choices import JobStatusChoices from core.models import Job, ObjectType from netbox.constants import ADVISORY_LOCK_KEYS +from netbox.registry import registry __all__ = ( 'JobRunner', + 'system_job', ) +def system_job(interval): + """ + Decorator for registering a `JobRunner` class as system background job. + """ + if type(interval) is not int: + raise ImproperlyConfigured("System job interval must be an integer (minutes).") + + def _wrapper(cls): + registry['system_jobs'][cls] = { + 'interval': interval + } + return cls + + return _wrapper + + class JobRunner(ABC): """ Background Job helper class. @@ -72,6 +91,7 @@ class JobRunner(ABC): kwargs["job_timeout"] = job.object.python_class.job_timeout cls.enqueue( instance=job.object, + name=job.name, user=job.user, schedule_at=new_scheduled_time, interval=job.interval, @@ -129,7 +149,7 @@ class JobRunner(ABC): if job: # If the job parameters haven't changed, don't schedule a new job and keep the current schedule. Otherwise, # delete the existing job and schedule a new job instead. - if (schedule_at and job.scheduled == schedule_at) and (job.interval == interval): + if (not schedule_at or job.scheduled == schedule_at) and (job.interval == interval): return job job.delete() diff --git a/netbox/netbox/middleware.py b/netbox/netbox/middleware.py index 8012965a4..b9424bd7c 100644 --- a/netbox/netbox/middleware.py +++ b/netbox/netbox/middleware.py @@ -1,3 +1,5 @@ +from contextlib import ExitStack + import logging import uuid @@ -10,7 +12,7 @@ from django.db.utils import InternalError from django.http import Http404, HttpResponseRedirect from netbox.config import clear_config, get_config -from netbox.context_managers import event_tracking +from netbox.registry import registry from netbox.views import handler_500 from utilities.api import is_api_request from utilities.error_handlers import handle_rest_api_exception @@ -32,8 +34,10 @@ class CoreMiddleware: # Assign a random unique ID to the request. This will be used for change logging. request.id = uuid.uuid4() - # Enable the event_tracking context manager and process the request. - with event_tracking(request): + # Apply all registered request processors + with ExitStack() as stack: + for request_processor in registry['request_processors']: + stack.enter_context(request_processor(request)) response = self.get_response(request) # Check if language cookie should be renewed diff --git a/netbox/netbox/models/__init__.py b/netbox/netbox/models/__init__.py index aea5f00cc..b1f7cfd48 100644 --- a/netbox/netbox/models/__init__.py +++ b/netbox/netbox/models/__init__.py @@ -3,6 +3,7 @@ from django.contrib.contenttypes.fields import GenericForeignKey from django.core.exceptions import ObjectDoesNotExist from django.core.validators import ValidationError from django.db import models +from django.urls import reverse from django.utils.translation import gettext_lazy as _ from mptt.models import MPTTModel, TreeForeignKey @@ -40,6 +41,9 @@ class NetBoxFeatureSet( def docs_url(self): 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]) + # # Base model classes diff --git a/netbox/netbox/models/mixins.py b/netbox/netbox/models/mixins.py new file mode 100644 index 000000000..dc706c7c2 --- /dev/null +++ b/netbox/netbox/models/mixins.py @@ -0,0 +1,99 @@ +from django.core.exceptions import ValidationError +from django.db import models +from django.utils.translation import gettext_lazy as _ +from netbox.choices import * +from utilities.conversion import to_grams, to_meters + +__all__ = ( + 'DistanceMixin', + 'WeightMixin', +) + + +class WeightMixin(models.Model): + weight = models.DecimalField( + verbose_name=_('weight'), + max_digits=8, + decimal_places=2, + blank=True, + null=True + ) + weight_unit = models.CharField( + verbose_name=_('weight unit'), + max_length=50, + choices=WeightUnitChoices, + blank=True, + null=True, + ) + # Stores the normalized weight (in grams) for database ordering + _abs_weight = models.PositiveBigIntegerField( + blank=True, + null=True + ) + + class Meta: + abstract = True + + def save(self, *args, **kwargs): + + # Store the given weight (if any) in grams for use in database ordering + if self.weight and self.weight_unit: + self._abs_weight = to_grams(self.weight, self.weight_unit) + else: + self._abs_weight = None + + super().save(*args, **kwargs) + + def clean(self): + super().clean() + + # Validate weight and weight_unit + if self.weight and not self.weight_unit: + raise ValidationError(_("Must specify a unit when setting a weight")) + + +class DistanceMixin(models.Model): + distance = models.DecimalField( + verbose_name=_('distance'), + max_digits=8, + decimal_places=2, + blank=True, + null=True + ) + distance_unit = models.CharField( + verbose_name=_('distance unit'), + max_length=50, + choices=DistanceUnitChoices, + blank=True, + null=True, + ) + # Stores the normalized distance (in meters) for database ordering + _abs_distance = models.DecimalField( + max_digits=10, + decimal_places=4, + blank=True, + null=True + ) + + class Meta: + abstract = True + + def save(self, *args, **kwargs): + # Store the given distance (if any) in meters for use in database ordering + if self.distance is not None and self.distance_unit: + self._abs_distance = to_meters(self.distance, self.distance_unit) + else: + self._abs_distance = None + + # Clear distance_unit if no distance is defined + if self.distance is None: + self.distance_unit = None + + super().save(*args, **kwargs) + + def clean(self): + super().clean() + + # Validate distance and distance_unit + if self.distance and not self.distance_unit: + raise ValidationError(_("Must specify a unit when setting a distance")) diff --git a/netbox/netbox/navigation/__init__.py b/netbox/netbox/navigation/__init__.py index b4f7dbd9f..75ca8f440 100644 --- a/netbox/netbox/navigation/__init__.py +++ b/netbox/netbox/navigation/__init__.py @@ -60,7 +60,7 @@ class Menu: # Utility functions # -def get_model_item(app_label, model_name, label, actions=('add', 'import')): +def get_model_item(app_label, model_name, label, actions=('add', 'bulk_import')): return MenuItem( link=f'{app_label}:{model_name}_list', link_text=label, @@ -69,7 +69,7 @@ def get_model_item(app_label, model_name, label, actions=('add', 'import')): ) -def get_model_buttons(app_label, model_name, actions=('add', 'import')): +def get_model_buttons(app_label, model_name, actions=('add', 'bulk_import')): buttons = [] if 'add' in actions: @@ -81,10 +81,10 @@ def get_model_buttons(app_label, model_name, actions=('add', 'import')): permissions=[f'{app_label}.add_{model_name}'] ) ) - if 'import' in actions: + if 'bulk_import' in actions: buttons.append( MenuItemButton( - link=f'{app_label}:{model_name}_import', + link=f'{app_label}:{model_name}_bulk_import', title='Import', icon_class='mdi mdi-upload', permissions=[f'{app_label}.add_{model_name}'] diff --git a/netbox/netbox/navigation/menu.py b/netbox/netbox/navigation/menu.py index 9d8ffaaf8..9148caa8e 100644 --- a/netbox/netbox/navigation/menu.py +++ b/netbox/netbox/navigation/menu.py @@ -33,7 +33,7 @@ ORGANIZATION_MENU = Menu( get_model_item('tenancy', 'contact', _('Contacts')), get_model_item('tenancy', 'contactgroup', _('Contact Groups')), get_model_item('tenancy', 'contactrole', _('Contact Roles')), - get_model_item('tenancy', 'contactassignment', _('Contact Assignments'), actions=['import']), + get_model_item('tenancy', 'contactassignment', _('Contact Assignments'), actions=['bulk_import']), ), ), ), @@ -104,6 +104,12 @@ DEVICES_MENU = Menu( get_model_item('dcim', 'inventoryitemrole', _('Inventory Item Roles')), ), ), + MenuGroup( + label=_('Addressing'), + items=( + get_model_item('dcim', 'macaddress', _('MAC Addresses')), + ), + ), ), ) @@ -194,6 +200,8 @@ IPAM_MENU = Menu( items=( get_model_item('ipam', 'vlan', _('VLANs')), get_model_item('ipam', 'vlangroup', _('VLAN Groups')), + get_model_item('ipam', 'vlantranslationpolicy', _('VLAN Translation Policies')), + get_model_item('ipam', 'vlantranslationrule', _('VLAN Translation Rules')), ), ), MenuGroup( @@ -271,9 +279,22 @@ CIRCUITS_MENU = Menu( items=( get_model_item('circuits', 'circuit', _('Circuits')), get_model_item('circuits', 'circuittype', _('Circuit Types')), + get_model_item('circuits', 'circuittermination', _('Circuit Terminations')), + ), + ), + MenuGroup( + label=_('Virtual Circuits'), + items=( + get_model_item('circuits', 'virtualcircuit', _('Virtual Circuits')), + get_model_item('circuits', 'virtualcircuittype', _('Virtual Circuit Types')), + get_model_item('circuits', 'virtualcircuittermination', _('Virtual Circuit Terminations')), + ), + ), + MenuGroup( + label=_('Groups'), + items=( get_model_item('circuits', 'circuitgroup', _('Circuit Groups')), get_model_item('circuits', 'circuitgroupassignment', _('Group Assignments')), - get_model_item('circuits', 'circuittermination', _('Circuit Terminations')), ), ), MenuGroup( @@ -371,7 +392,7 @@ OPERATIONS_MENU = Menu( label=_('Logging'), items=( get_model_item('extras', 'notificationgroup', _('Notification Groups')), - get_model_item('extras', 'journalentry', _('Journal Entries'), actions=['import']), + get_model_item('extras', 'journalentry', _('Journal Entries'), actions=['bulk_import']), get_model_item('core', 'objectchange', _('Change Log'), actions=[]), ), ), @@ -398,7 +419,7 @@ ADMIN_MENU = Menu( permissions=['users.add_user'] ), MenuItemButton( - link='users:user_import', + link='users:user_bulk_import', title='Import', icon_class='mdi mdi-upload', permissions=['users.add_user'] @@ -418,7 +439,7 @@ ADMIN_MENU = Menu( permissions=['users.add_group'] ), MenuItemButton( - link='users:group_import', + link='users:group_bulk_import', title='Import', icon_class='mdi mdi-upload', permissions=['users.add_group'] diff --git a/netbox/netbox/plugins/__init__.py b/netbox/netbox/plugins/__init__.py index e2f0f22fc..69881a251 100644 --- a/netbox/netbox/plugins/__init__.py +++ b/netbox/netbox/plugins/__init__.py @@ -78,6 +78,7 @@ class PluginConfig(AppConfig): menu_items = None template_extensions = None user_preferences = None + events_pipeline = [] def _load_resource(self, name): # Import from the configured path, if defined. diff --git a/netbox/netbox/plugins/registration.py b/netbox/netbox/plugins/registration.py index c84572794..515405f1b 100644 --- a/netbox/netbox/plugins/registration.py +++ b/netbox/netbox/plugins/registration.py @@ -1,4 +1,5 @@ import inspect +import warnings from django.utils.translation import gettext_lazy as _ from netbox.registry import registry @@ -37,7 +38,12 @@ def register_template_extensions(class_list): # Registration for multiple models models = template_extension.models elif template_extension.model: - # Registration for a single model + # Registration for a single model (deprecated) + warnings.warn( + "PluginTemplateExtension.model is deprecated and will be removed in a future release. Use " + "'models' instead.", + DeprecationWarning + ) models = [template_extension.model] else: # Global registration (no specific models) diff --git a/netbox/netbox/plugins/templates.py b/netbox/netbox/plugins/templates.py index e1f4b7a47..4ea90b4db 100644 --- a/netbox/netbox/plugins/templates.py +++ b/netbox/netbox/plugins/templates.py @@ -21,7 +21,7 @@ class PluginTemplateExtension: * config - Plugin-specific configuration parameters """ models = None - model = None + model = None # Deprecated; use `models` instead def __init__(self, context): self.context = context diff --git a/netbox/netbox/plugins/urls.py b/netbox/netbox/plugins/urls.py index deb20732f..7a9f30c7e 100644 --- a/netbox/netbox/plugins/urls.py +++ b/netbox/netbox/plugins/urls.py @@ -8,7 +8,6 @@ from django.utils.module_loading import import_string, module_has_submodule from . import views -# Initialize URL base, API, and admin URL patterns for plugins plugin_patterns = [] plugin_api_patterns = [ path('', views.PluginsAPIRootView.as_view(), name='api-root'), diff --git a/netbox/netbox/registry.py b/netbox/netbox/registry.py index 0920cbccf..02b741779 100644 --- a/netbox/netbox/registry.py +++ b/netbox/netbox/registry.py @@ -29,7 +29,9 @@ registry = Registry({ 'model_features': dict(), 'models': collections.defaultdict(set), 'plugins': dict(), + 'request_processors': list(), 'search': dict(), + 'system_jobs': dict(), 'tables': collections.defaultdict(dict), 'views': collections.defaultdict(dict), 'widgets': dict(), diff --git a/netbox/netbox/settings.py b/netbox/netbox/settings.py index a8ac68d4d..84b86ba13 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 @@ -108,12 +106,11 @@ DEFAULT_PERMISSIONS = getattr(configuration, 'DEFAULT_PERMISSIONS', { 'users.delete_token': ({'user': '$user'},), }) DEVELOPER = getattr(configuration, 'DEVELOPER', False) -DJANGO_ADMIN_ENABLED = getattr(configuration, 'DJANGO_ADMIN_ENABLED', False) DOCS_ROOT = getattr(configuration, 'DOCS_ROOT', os.path.join(os.path.dirname(BASE_DIR), 'docs')) EMAIL = getattr(configuration, 'EMAIL', {}) -EVENTS_PIPELINE = getattr(configuration, 'EVENTS_PIPELINE', ( +EVENTS_PIPELINE = getattr(configuration, 'EVENTS_PIPELINE', [ 'extras.events.process_event_queue', -)) +]) EXEMPT_VIEW_PERMISSIONS = getattr(configuration, 'EXEMPT_VIEW_PERMISSIONS', []) FIELD_CHOICES = getattr(configuration, 'FIELD_CHOICES', {}) FILE_UPLOAD_MAX_MEMORY_SIZE = getattr(configuration, 'FILE_UPLOAD_MAX_MEMORY_SIZE', 2621440) @@ -225,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.'): @@ -371,7 +378,6 @@ SERVER_EMAIL = EMAIL.get('FROM_EMAIL') # INSTALLED_APPS = [ - 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', @@ -409,8 +415,6 @@ INSTALLED_APPS = [ ] if not DEBUG: INSTALLED_APPS.remove('debug_toolbar') -if not DJANGO_ADMIN_ENABLED: - INSTALLED_APPS.remove('django.contrib.admin') # Middleware MIDDLEWARE = [ @@ -547,7 +551,6 @@ EXEMPT_EXCLUDE_MODELS = ( # All URLs starting with a string listed here are exempt from maintenance mode enforcement MAINTENANCE_EXEMPT_PATHS = ( - f'/{BASE_PATH}admin/', f'/{BASE_PATH}extras/config-revisions/', # Allow modifying the configuration LOGIN_URL, LOGIN_REDIRECT_URL, @@ -588,17 +591,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 # @@ -792,6 +784,10 @@ STRAWBERRY_DJANGO = { PLUGIN_CATALOG_URL = 'https://api.netbox.oss.netboxlabs.com/v1/plugins' +EVENTS_PIPELINE = list(EVENTS_PIPELINE) +if 'extras.events.process_event_queue' not in EVENTS_PIPELINE: + EVENTS_PIPELINE.insert(0, 'extras.events.process_event_queue') + # Register any configured plugins for plugin_name in PLUGINS: try: @@ -862,6 +858,13 @@ for plugin_name in PLUGINS: f"{plugin_name}.{queue}": RQ_PARAMS for queue in plugin_config.queues }) + events_pipeline = plugin_config.events_pipeline + if events_pipeline: + if type(events_pipeline) in (list, tuple): + EVENTS_PIPELINE.extend(events_pipeline) + else: + raise ImproperlyConfigured(f"events_pipline in plugin: {plugin_name} must be a list or tuple") + # UNSUPPORTED FUNCTIONALITY: Import any local overrides. try: from .local_settings import * diff --git a/netbox/netbox/tables/columns.py b/netbox/netbox/tables/columns.py index 0e70a1624..cf6e1f133 100644 --- a/netbox/netbox/tables/columns.py +++ b/netbox/netbox/tables/columns.py @@ -35,6 +35,7 @@ __all__ = ( 'ContentTypesColumn', 'CustomFieldColumn', 'CustomLinkColumn', + 'DistanceColumn', 'DurationColumn', 'LinkedCountColumn', 'MarkdownColumn', @@ -285,7 +286,8 @@ class ActionsColumn(tables.Column): if len(self.actions) == 1 or (self.split_actions and idx == 0): dropdown_class = attrs.css_class button = ( - f'' + f'' f'' ) @@ -302,7 +304,8 @@ class ActionsColumn(tables.Column): html += ( f'' f' {button}' - f' ' + f' ' f' {toggle_text}' f' ' f'' @@ -691,3 +694,16 @@ class ChoicesColumn(tables.Column): value.append(f'({omitted_count} more)') return ', '.join(value) + + +class DistanceColumn(TemplateColumn): + """ + Distance with template code for formatting + """ + template_code = """ + {% load helpers %} + {% if record.distance %}{{ record.distance|floatformat:"-2" }} {{ record.distance_unit }}{% endif %} + """ + + def __init__(self, template_code=template_code, order_by='_abs_distance', **kwargs): + super().__init__(template_code=template_code, order_by=order_by, **kwargs) diff --git a/netbox/netbox/tests/dummy_plugin/__init__.py b/netbox/netbox/tests/dummy_plugin/__init__.py index 3ade8f9df..2ca7c290c 100644 --- a/netbox/netbox/tests/dummy_plugin/__init__.py +++ b/netbox/netbox/tests/dummy_plugin/__init__.py @@ -17,6 +17,14 @@ class DummyPluginConfig(PluginConfig): 'testing-medium', 'testing-high' ] + events_pipeline = [ + 'netbox.tests.dummy_plugin.events.process_events_queue' + ] + + def ready(self): + super().ready() + + from . import jobs # noqa: F401 config = DummyPluginConfig diff --git a/netbox/netbox/tests/dummy_plugin/admin.py b/netbox/netbox/tests/dummy_plugin/admin.py deleted file mode 100644 index 83bc22ad8..000000000 --- a/netbox/netbox/tests/dummy_plugin/admin.py +++ /dev/null @@ -1,9 +0,0 @@ -from django.contrib import admin - -from netbox.admin import admin_site -from .models import DummyModel - - -@admin.register(DummyModel, site=admin_site) -class DummyModelAdmin(admin.ModelAdmin): - list_display = ('name', 'number') diff --git a/netbox/netbox/tests/dummy_plugin/events.py b/netbox/netbox/tests/dummy_plugin/events.py new file mode 100644 index 000000000..934594643 --- /dev/null +++ b/netbox/netbox/tests/dummy_plugin/events.py @@ -0,0 +1,2 @@ +def process_events_queue(events): + pass diff --git a/netbox/netbox/tests/dummy_plugin/jobs.py b/netbox/netbox/tests/dummy_plugin/jobs.py new file mode 100644 index 000000000..3b9dc7a5f --- /dev/null +++ b/netbox/netbox/tests/dummy_plugin/jobs.py @@ -0,0 +1,9 @@ +from core.choices import JobIntervalChoices +from netbox.jobs import JobRunner, system_job + + +@system_job(interval=JobIntervalChoices.INTERVAL_HOURLY) +class DummySystemJob(JobRunner): + + def run(self, *args, **kwargs): + pass diff --git a/netbox/netbox/tests/test_authentication.py b/netbox/netbox/tests/test_authentication.py index ae6d3f4c2..9eb21661d 100644 --- a/netbox/netbox/tests/test_authentication.py +++ b/netbox/netbox/tests/test_authentication.py @@ -4,12 +4,10 @@ from django.conf import settings from django.test import Client from django.test.utils import override_settings from django.urls import reverse -from netaddr import IPNetwork from rest_framework.test import APIClient from core.models import ObjectType -from dcim.models import Site -from ipam.models import Prefix +from dcim.models import Rack, Site from users.models import Group, ObjectPermission, Token, User from utilities.testing import TestCase from utilities.testing.api import APITestCase @@ -410,18 +408,18 @@ class ObjectPermissionAPIViewTestCase(TestCase): ) Site.objects.bulk_create(cls.sites) - cls.prefixes = ( - Prefix(prefix=IPNetwork('10.0.0.0/24'), site=cls.sites[0]), - Prefix(prefix=IPNetwork('10.0.1.0/24'), site=cls.sites[0]), - Prefix(prefix=IPNetwork('10.0.2.0/24'), site=cls.sites[0]), - Prefix(prefix=IPNetwork('10.0.3.0/24'), site=cls.sites[1]), - Prefix(prefix=IPNetwork('10.0.4.0/24'), site=cls.sites[1]), - Prefix(prefix=IPNetwork('10.0.5.0/24'), site=cls.sites[1]), - Prefix(prefix=IPNetwork('10.0.6.0/24'), site=cls.sites[2]), - Prefix(prefix=IPNetwork('10.0.7.0/24'), site=cls.sites[2]), - Prefix(prefix=IPNetwork('10.0.8.0/24'), site=cls.sites[2]), + cls.racks = ( + Rack(name='Rack 1', site=cls.sites[0]), + Rack(name='Rack 2', site=cls.sites[0]), + Rack(name='Rack 3', site=cls.sites[0]), + Rack(name='Rack 4', site=cls.sites[1]), + Rack(name='Rack 5', site=cls.sites[1]), + Rack(name='Rack 6', site=cls.sites[1]), + Rack(name='Rack 7', site=cls.sites[2]), + Rack(name='Rack 8', site=cls.sites[2]), + Rack(name='Rack 9', site=cls.sites[2]), ) - Prefix.objects.bulk_create(cls.prefixes) + Rack.objects.bulk_create(cls.racks) def setUp(self): """ @@ -435,8 +433,7 @@ class ObjectPermissionAPIViewTestCase(TestCase): def test_get_object(self): # Attempt to retrieve object without permission - url = reverse('ipam-api:prefix-detail', - kwargs={'pk': self.prefixes[0].pk}) + url = reverse('dcim-api:rack-detail', kwargs={'pk': self.racks[0].pk}) response = self.client.get(url, **self.header) self.assertEqual(response.status_code, 403) @@ -448,23 +445,21 @@ class ObjectPermissionAPIViewTestCase(TestCase): ) obj_perm.save() obj_perm.users.add(self.user) - obj_perm.object_types.add(ObjectType.objects.get_for_model(Prefix)) + obj_perm.object_types.add(ObjectType.objects.get_for_model(Rack)) # Retrieve permitted object - url = reverse('ipam-api:prefix-detail', - kwargs={'pk': self.prefixes[0].pk}) + url = reverse('dcim-api:rack-detail', kwargs={'pk': self.racks[0].pk}) response = self.client.get(url, **self.header) self.assertEqual(response.status_code, 200) # Attempt to retrieve non-permitted object - url = reverse('ipam-api:prefix-detail', - kwargs={'pk': self.prefixes[3].pk}) + url = reverse('dcim-api:rack-detail', kwargs={'pk': self.racks[3].pk}) response = self.client.get(url, **self.header) self.assertEqual(response.status_code, 404) @override_settings(EXEMPT_VIEW_PERMISSIONS=[]) def test_list_objects(self): - url = reverse('ipam-api:prefix-list') + url = reverse('dcim-api:rack-list') # Attempt to list objects without permission response = self.client.get(url, **self.header) @@ -478,7 +473,7 @@ class ObjectPermissionAPIViewTestCase(TestCase): ) obj_perm.save() obj_perm.users.add(self.user) - obj_perm.object_types.add(ObjectType.objects.get_for_model(Prefix)) + obj_perm.object_types.add(ObjectType.objects.get_for_model(Rack)) # Retrieve all objects. Only permitted objects should be returned. response = self.client.get(url, **self.header) @@ -487,12 +482,12 @@ class ObjectPermissionAPIViewTestCase(TestCase): @override_settings(EXEMPT_VIEW_PERMISSIONS=[]) def test_create_object(self): - url = reverse('ipam-api:prefix-list') + url = reverse('dcim-api:rack-list') data = { - 'prefix': '10.0.9.0/24', + 'name': 'Rack 10', 'site': self.sites[1].pk, } - initial_count = Prefix.objects.count() + initial_count = Rack.objects.count() # Attempt to create an object without permission response = self.client.post(url, data, format='json', **self.header) @@ -506,26 +501,25 @@ class ObjectPermissionAPIViewTestCase(TestCase): ) obj_perm.save() obj_perm.users.add(self.user) - obj_perm.object_types.add(ObjectType.objects.get_for_model(Prefix)) + obj_perm.object_types.add(ObjectType.objects.get_for_model(Rack)) # Attempt to create a non-permitted object response = self.client.post(url, data, format='json', **self.header) self.assertEqual(response.status_code, 403) - self.assertEqual(Prefix.objects.count(), initial_count) + self.assertEqual(Rack.objects.count(), initial_count) # Create a permitted object data['site'] = self.sites[0].pk response = self.client.post(url, data, format='json', **self.header) self.assertEqual(response.status_code, 201) - self.assertEqual(Prefix.objects.count(), initial_count + 1) + self.assertEqual(Rack.objects.count(), initial_count + 1) @override_settings(EXEMPT_VIEW_PERMISSIONS=[]) def test_edit_object(self): # Attempt to edit an object without permission data = {'site': self.sites[0].pk} - url = reverse('ipam-api:prefix-detail', - kwargs={'pk': self.prefixes[0].pk}) + url = reverse('dcim-api:rack-detail', kwargs={'pk': self.racks[0].pk}) response = self.client.patch(url, data, format='json', **self.header) self.assertEqual(response.status_code, 403) @@ -537,26 +531,23 @@ class ObjectPermissionAPIViewTestCase(TestCase): ) obj_perm.save() obj_perm.users.add(self.user) - obj_perm.object_types.add(ObjectType.objects.get_for_model(Prefix)) + obj_perm.object_types.add(ObjectType.objects.get_for_model(Rack)) # Attempt to edit a non-permitted object data = {'site': self.sites[0].pk} - url = reverse('ipam-api:prefix-detail', - kwargs={'pk': self.prefixes[3].pk}) + url = reverse('dcim-api:rack-detail', kwargs={'pk': self.racks[3].pk}) response = self.client.patch(url, data, format='json', **self.header) self.assertEqual(response.status_code, 404) # Edit a permitted object data['status'] = 'reserved' - url = reverse('ipam-api:prefix-detail', - kwargs={'pk': self.prefixes[0].pk}) + url = reverse('dcim-api:rack-detail', kwargs={'pk': self.racks[0].pk}) response = self.client.patch(url, data, format='json', **self.header) self.assertEqual(response.status_code, 200) # Attempt to modify a permitted object to a non-permitted object data['site'] = self.sites[1].pk - url = reverse('ipam-api:prefix-detail', - kwargs={'pk': self.prefixes[0].pk}) + url = reverse('dcim-api:rack-detail', kwargs={'pk': self.racks[0].pk}) response = self.client.patch(url, data, format='json', **self.header) self.assertEqual(response.status_code, 403) @@ -564,8 +555,7 @@ class ObjectPermissionAPIViewTestCase(TestCase): def test_delete_object(self): # Attempt to delete an object without permission - url = reverse('ipam-api:prefix-detail', - kwargs={'pk': self.prefixes[0].pk}) + url = reverse('dcim-api:rack-detail', kwargs={'pk': self.racks[0].pk}) response = self.client.delete(url, format='json', **self.header) self.assertEqual(response.status_code, 403) @@ -577,16 +567,14 @@ class ObjectPermissionAPIViewTestCase(TestCase): ) obj_perm.save() obj_perm.users.add(self.user) - obj_perm.object_types.add(ObjectType.objects.get_for_model(Prefix)) + obj_perm.object_types.add(ObjectType.objects.get_for_model(Rack)) # Attempt to delete a non-permitted object - url = reverse('ipam-api:prefix-detail', - kwargs={'pk': self.prefixes[3].pk}) + url = reverse('dcim-api:rack-detail', kwargs={'pk': self.racks[3].pk}) response = self.client.delete(url, format='json', **self.header) self.assertEqual(response.status_code, 404) # Delete a permitted object - url = reverse('ipam-api:prefix-detail', - kwargs={'pk': self.prefixes[0].pk}) + url = reverse('dcim-api:rack-detail', kwargs={'pk': self.racks[0].pk}) response = self.client.delete(url, format='json', **self.header) self.assertEqual(response.status_code, 204) diff --git a/netbox/netbox/tests/test_import.py b/netbox/netbox/tests/test_import.py index 16711ef72..690a6dc14 100644 --- a/netbox/netbox/tests/test_import.py +++ b/netbox/netbox/tests/test_import.py @@ -37,7 +37,7 @@ class CSVImportTestCase(ModelViewTestCase): } # Form validation should fail with invalid header present - self.assertHttpStatus(self.client.post(self._get_url('import'), data), 200) + self.assertHttpStatus(self.client.post(self._get_url('bulk_import'), data), 200) self.assertEqual(Region.objects.count(), 0) # Correct the CSV header name @@ -45,7 +45,7 @@ class CSVImportTestCase(ModelViewTestCase): data['data'] = self._get_csv_data(csv_data) # Validation should succeed - self.assertHttpStatus(self.client.post(self._get_url('import'), data), 302) + self.assertHttpStatus(self.client.post(self._get_url('bulk_import'), data), 302) self.assertEqual(Region.objects.count(), 3) @override_settings(EXEMPT_VIEW_PERMISSIONS=['*']) @@ -71,10 +71,10 @@ class CSVImportTestCase(ModelViewTestCase): obj_perm.object_types.add(ObjectType.objects.get_for_model(self.model)) # Try GET with model-level permission - self.assertHttpStatus(self.client.get(self._get_url('import')), 200) + self.assertHttpStatus(self.client.get(self._get_url('bulk_import')), 200) # Test POST with permission - self.assertHttpStatus(self.client.post(self._get_url('import'), data), 302) + self.assertHttpStatus(self.client.post(self._get_url('bulk_import'), data), 302) regions = Region.objects.all() self.assertEqual(regions.count(), 4) self.assertEqual( @@ -111,10 +111,10 @@ class CSVImportTestCase(ModelViewTestCase): obj_perm.object_types.add(ObjectType.objects.get_for_model(self.model)) # Try GET with model-level permission - self.assertHttpStatus(self.client.get(self._get_url('import')), 200) + self.assertHttpStatus(self.client.get(self._get_url('bulk_import')), 200) # Test POST with permission - self.assertHttpStatus(self.client.post(self._get_url('import'), data), 200) + self.assertHttpStatus(self.client.post(self._get_url('bulk_import'), data), 200) self.assertEqual(Region.objects.count(), 0) @override_settings(EXEMPT_VIEW_PERMISSIONS=['*']) @@ -138,6 +138,6 @@ class CSVImportTestCase(ModelViewTestCase): ) cf.object_types.set([ObjectType.objects.get_for_model(self.model)]) - self.assertHttpStatus(self.client.post(self._get_url('import'), data), 302) + self.assertHttpStatus(self.client.post(self._get_url('bulk_import'), data), 302) region = Region.objects.get(slug='region-1') self.assertEqual(region.cf['tcf'], 'def-cf-text') diff --git a/netbox/netbox/tests/test_jobs.py b/netbox/netbox/tests/test_jobs.py index 52a7bd97a..e3e24a235 100644 --- a/netbox/netbox/tests/test_jobs.py +++ b/netbox/netbox/tests/test_jobs.py @@ -90,6 +90,15 @@ class EnqueueTest(JobRunnerTestCase): self.assertEqual(job1, job2) self.assertEqual(TestJobRunner.get_jobs(instance).count(), 1) + def test_enqueue_once_twice_same_no_schedule_at(self): + instance = DataSource() + schedule_at = self.get_schedule_at() + job1 = TestJobRunner.enqueue_once(instance, schedule_at=schedule_at) + job2 = TestJobRunner.enqueue_once(instance) + + self.assertEqual(job1, job2) + self.assertEqual(TestJobRunner.get_jobs(instance).count(), 1) + def test_enqueue_once_twice_different_schedule_at(self): instance = DataSource() job1 = TestJobRunner.enqueue_once(instance, schedule_at=self.get_schedule_at()) @@ -127,3 +136,30 @@ class EnqueueTest(JobRunnerTestCase): self.assertNotEqual(job1, job2) self.assertRaises(Job.DoesNotExist, job1.refresh_from_db) self.assertEqual(TestJobRunner.get_jobs(instance).count(), 1) + + +class SystemJobTest(JobRunnerTestCase): + """ + Test that system jobs can be scheduled. + + General functionality already tested by `JobRunnerTest` and `EnqueueTest`. + """ + + def test_scheduling(self): + # Can job be enqueued? + job = TestJobRunner.enqueue(schedule_at=self.get_schedule_at()) + self.assertIsInstance(job, Job) + self.assertEqual(TestJobRunner.get_jobs().count(), 1) + + # Can job be deleted again? + job.delete() + self.assertRaises(Job.DoesNotExist, job.refresh_from_db) + self.assertEqual(TestJobRunner.get_jobs().count(), 0) + + def test_enqueue_once(self): + schedule_at = self.get_schedule_at() + job1 = TestJobRunner.enqueue_once(schedule_at=schedule_at) + job2 = TestJobRunner.enqueue_once(schedule_at=schedule_at) + + self.assertEqual(job1, job2) + self.assertEqual(TestJobRunner.get_jobs().count(), 1) diff --git a/netbox/netbox/tests/test_plugins.py b/netbox/netbox/tests/test_plugins.py index 351fef9e2..264c8e6f9 100644 --- a/netbox/netbox/tests/test_plugins.py +++ b/netbox/netbox/tests/test_plugins.py @@ -5,8 +5,10 @@ from django.core.exceptions import ImproperlyConfigured from django.test import Client, TestCase, override_settings from django.urls import reverse +from core.choices import JobIntervalChoices from netbox.tests.dummy_plugin import config as dummy_config from netbox.tests.dummy_plugin.data_backends import DummyBackend +from netbox.tests.dummy_plugin.jobs import DummySystemJob from netbox.plugins.navigation import PluginMenu from netbox.plugins.utils import get_plugin_config from netbox.graphql.schema import Query @@ -36,12 +38,6 @@ class PluginTest(TestCase): instance.delete() self.assertIsNone(instance.pk) - def test_admin(self): - - # Test admin view URL resolution - url = reverse('admin:dummy_plugin_dummymodel_add') - self.assertEqual(url, '/admin/dummy_plugin/dummymodel/add/') - @override_settings(LOGIN_REQUIRED=False) def test_views(self): @@ -136,6 +132,13 @@ class PluginTest(TestCase): self.assertIn('dummy', registry['data_backends']) self.assertIs(registry['data_backends']['dummy'], DummyBackend) + def test_system_jobs(self): + """ + Check registered system jobs. + """ + self.assertIn(DummySystemJob, registry['system_jobs']) + self.assertEqual(registry['system_jobs'][DummySystemJob]['interval'], JobIntervalChoices.INTERVAL_HOURLY) + def test_queues(self): """ Check that plugin queues are registered with the accurate name. @@ -209,3 +212,9 @@ class PluginTest(TestCase): self.assertEqual(get_plugin_config(plugin, 'foo'), 123) self.assertEqual(get_plugin_config(plugin, 'bar'), None) self.assertEqual(get_plugin_config(plugin, 'bar', default=456), 456) + + def test_events_pipeline(self): + """ + Check that events pipeline is registered. + """ + self.assertIn('netbox.tests.dummy_plugin.events.process_events_queue', settings.EVENTS_PIPELINE) diff --git a/netbox/netbox/tests/test_views.py b/netbox/netbox/tests/test_views.py index ccba73baa..50cfa5755 100644 --- a/netbox/netbox/tests/test_views.py +++ b/netbox/netbox/tests/test_views.py @@ -1,7 +1,7 @@ import urllib.parse from django.urls import reverse -from django.test import override_settings +from django.test import Client, override_settings from dcim.models import Site from netbox.constants import EMPTY_TABLE_TEXT @@ -74,3 +74,21 @@ class SearchViewTestCase(TestCase): self.assertHttpStatus(response, 200) content = str(response.content) self.assertIn(EMPTY_TABLE_TEXT, content) + + +class MediaViewTestCase(TestCase): + + def test_media_login_required(self): + url = reverse('media', kwargs={'path': 'foo.txt'}) + response = Client().get(url) + + # Unauthenticated request should redirect to login page + self.assertHttpStatus(response, 302) + + @override_settings(LOGIN_REQUIRED=False) + def test_media_login_not_required(self): + url = reverse('media', kwargs={'path': 'foo.txt'}) + response = Client().get(url) + + # Unauthenticated request should return a 404 (not found) + self.assertHttpStatus(response, 404) diff --git a/netbox/netbox/urls.py b/netbox/netbox/urls.py index b0175ec04..90d70a357 100644 --- a/netbox/netbox/urls.py +++ b/netbox/netbox/urls.py @@ -2,7 +2,6 @@ from django.conf import settings from django.conf.urls import include from django.urls import path from django.views.decorators.cache import cache_page -from django.views.static import serve from drf_spectacular.views import SpectacularAPIView, SpectacularRedocView, SpectacularSwaggerView from account.views import LoginView, LogoutView @@ -10,7 +9,7 @@ from netbox.api.views import APIRootView, StatusView from netbox.graphql.schema import schema from netbox.graphql.views import NetBoxGraphQLView from netbox.plugins.urls import plugin_patterns, plugin_api_patterns -from netbox.views import HomeView, StaticMediaFailureView, SearchView, htmx +from netbox.views import HomeView, MediaView, StaticMediaFailureView, SearchView, htmx _patterns = [ @@ -69,7 +68,7 @@ _patterns = [ path('graphql/', NetBoxGraphQLView.as_view(schema=schema), name='graphql'), # Serving static media in Django to pipe it through LoginRequiredMiddleware - path('media/', serve, {'document_root': settings.MEDIA_ROOT}), + path('media/', MediaView.as_view(), name='media'), path('media-failure/', StaticMediaFailureView.as_view(), name='media_failure'), # Plugins @@ -77,11 +76,6 @@ _patterns = [ path('api/plugins/', include((plugin_api_patterns, 'plugins-api'))), ] -# Django admin UI -if settings.DJANGO_ADMIN_ENABLED: - from .admin import admin_site - _patterns.append(path('admin/', admin_site.urls)) - # django-debug-toolbar if settings.DEBUG: import debug_toolbar diff --git a/netbox/netbox/utils.py b/netbox/netbox/utils.py index f27d1b5f7..f2c34722c 100644 --- a/netbox/netbox/utils.py +++ b/netbox/netbox/utils.py @@ -3,6 +3,7 @@ from netbox.registry import registry __all__ = ( 'get_data_backend_choices', 'register_data_backend', + 'register_request_processor', ) @@ -24,3 +25,12 @@ def register_data_backend(): return cls return _wrapper + + +def register_request_processor(func): + """ + Decorator for registering a request processor. + """ + registry['request_processors'].append(func) + + return func diff --git a/netbox/netbox/views/errors.py b/netbox/netbox/views/errors.py index 9e8ed5a3a..5872a59cd 100644 --- a/netbox/netbox/views/errors.py +++ b/netbox/netbox/views/errors.py @@ -49,7 +49,7 @@ def handler_500(request, template_name=ERROR_500_TEMPLATE_NAME): template = loader.get_template(template_name) except TemplateDoesNotExist: return HttpResponseServerError('

    Server Error (500)

    ', content_type='text/html') - type_, error, traceback = sys.exc_info() + type_, error = sys.exc_info()[:2] return HttpResponseServerError(template.render({ 'error': error, diff --git a/netbox/netbox/views/generic/bulk_views.py b/netbox/netbox/views/generic/bulk_views.py index 4b2f1ae28..88857ad54 100644 --- a/netbox/netbox/views/generic/bulk_views.py +++ b/netbox/netbox/views/generic/bulk_views.py @@ -661,15 +661,13 @@ class BulkEditView(GetReturnURLMixin, BaseMultiObjectView): elif 'virtual_machine' in request.GET: initial_data['virtual_machine'] = request.GET.get('virtual_machine') - if '_apply' in request.POST: - form = self.form(request.POST, initial=initial_data) - restrict_form_fields(form, request.user) + form = self.form(request.POST, initial=initial_data) + restrict_form_fields(form, request.user) + if '_apply' in request.POST: if form.is_valid(): logger.debug("Form validation was successful") - try: - with transaction.atomic(): updated_objects = self._update_objects(form, request) @@ -697,10 +695,6 @@ class BulkEditView(GetReturnURLMixin, BaseMultiObjectView): else: logger.debug("Form validation failed") - else: - form = self.form(request.POST, initial=initial_data) - restrict_form_fields(form, request.user) - # Retrieve objects being edited table = self.table(self.queryset.filter(pk__in=pk_list), orderable=False) if not table.rows: @@ -744,7 +738,6 @@ class BulkRenameView(GetReturnURLMixin, BaseMultiObjectView): renamed_pks = [] for obj in selected_objects: - # Take a snapshot of change-logged models if hasattr(obj, 'snapshot'): obj.snapshot() @@ -758,7 +751,7 @@ class BulkRenameView(GetReturnURLMixin, BaseMultiObjectView): except re.error: obj.new_name = obj.name else: - obj.new_name = obj.name.replace(find, replace) + obj.new_name = (obj.name or '').replace(find, replace) renamed_pks.append(obj.pk) return renamed_pks @@ -793,6 +786,10 @@ class BulkRenameView(GetReturnURLMixin, BaseMultiObjectView): ) return redirect(self.get_return_url(request)) + except IntegrityError as e: + messages.error(self.request, ", ".join(e.args)) + clear_events.send(sender=self) + except (AbortRequest, PermissionsViolation) as e: logger.debug(e.message) form.add_error(None, e.message) @@ -995,7 +992,8 @@ class BulkComponentCreateView(GetReturnURLMixin, BaseMultiObjectView): form.add_error(field, '{}: {}'.format(obj, ', '.join(e))) # Enforce object-level permissions - if self.queryset.filter(pk__in=[obj.pk for obj in new_components]).count() != len(new_components): + component_ids = [obj.pk for obj in new_components] + if self.queryset.filter(pk__in=component_ids).count() != len(new_components): raise PermissionsViolation except IntegrityError: diff --git a/netbox/netbox/views/generic/feature_views.py b/netbox/netbox/views/generic/feature_views.py index 49862e83f..1e17d5354 100644 --- a/netbox/netbox/views/generic/feature_views.py +++ b/netbox/netbox/views/generic/feature_views.py @@ -143,7 +143,12 @@ class ObjectJobsView(ConditionalLoginRequiredMixin, View): """ Render a list of all Job assigned to an object. For example: - path('data-sources//jobs/', ObjectJobsView.as_view(), name='datasource_jobs', kwargs={'model': DataSource}), + path( + 'data-sources//jobs/', + ObjectJobsView.as_view(), + name='datasource_jobs', + kwargs={'model': DataSource} + ) Attributes: base_template: The name of the template to extend. If not provided, "{app}/{model}.html" will be used. diff --git a/netbox/netbox/views/generic/object_views.py b/netbox/netbox/views/generic/object_views.py index 0686e52b7..fb554ca4f 100644 --- a/netbox/netbox/views/generic/object_views.py +++ b/netbox/netbox/views/generic/object_views.py @@ -233,18 +233,23 @@ class ObjectEditView(GetReturnURLMixin, BaseObjectView): form = self.form(instance=obj, initial=initial_data) restrict_form_fields(form, request.user) - # If this is an HTMX request, return only the rendered form HTML - if htmx_partial(request): - return render(request, self.htmx_template_name, { - 'model': model, - 'object': obj, - 'form': form, - }) - - return render(request, self.template_name, { + context = { 'model': model, 'object': obj, 'form': form, + } + + # If the form is being displayed within a "quick add" widget, + # use the appropriate template + if request.GET.get('_quickadd'): + return render(request, 'htmx/quick_add.html', context) + + # If this is an HTMX request, return only the rendered form HTML + if htmx_partial(request): + return render(request, self.htmx_template_name, context) + + return render(request, self.template_name, { + **context, 'return_url': self.get_return_url(request, obj), 'prerequisite_model': get_prerequisite_model(self.queryset), **self.get_extra_context(request, obj), @@ -259,6 +264,7 @@ class ObjectEditView(GetReturnURLMixin, BaseObjectView): """ logger = logging.getLogger('netbox.views.ObjectEditView') obj = self.get_object(**kwargs) + model = self.queryset.model # Take a snapshot for change logging (if editing an existing object) if obj.pk and hasattr(obj, 'snapshot'): @@ -292,6 +298,12 @@ class ObjectEditView(GetReturnURLMixin, BaseObjectView): msg = f'{msg} {obj}' messages.success(request, msg) + # Object was created via "quick add" modal + if '_quickadd' in request.POST: + return render(request, 'htmx/quick_add_created.html', { + 'object': obj, + }) + # If adding another object, redirect back to the edit form if '_addanother' in request.POST: redirect_url = request.path @@ -324,12 +336,19 @@ class ObjectEditView(GetReturnURLMixin, BaseObjectView): else: logger.debug("Form validation failed") - return render(request, self.template_name, { + context = { + 'model': model, 'object': obj, 'form': form, 'return_url': self.get_return_url(request, obj), **self.get_extra_context(request, obj), - }) + } + + # Form was submitted via a "quick add" widget + if '_quickadd' in request.POST: + return render(request, 'htmx/quick_add.html', context) + + return render(request, self.template_name, context) class ObjectDeleteView(GetReturnURLMixin, BaseObjectView): diff --git a/netbox/netbox/views/misc.py b/netbox/netbox/views/misc.py index c584e99e4..f28b0f7b1 100644 --- a/netbox/netbox/views/misc.py +++ b/netbox/netbox/views/misc.py @@ -8,6 +8,7 @@ from django.core.cache import cache from django.shortcuts import redirect, render from django.utils.translation import gettext_lazy as _ from django.views.generic import View +from django.views.static import serve from django_tables2 import RequestConfig from packaging import version @@ -23,6 +24,7 @@ from utilities.views import ConditionalLoginRequiredMixin __all__ = ( 'HomeView', + 'MediaView', 'SearchView', ) @@ -115,3 +117,11 @@ class SearchView(ConditionalLoginRequiredMixin, View): 'form': form, 'table': table, }) + + +class MediaView(ConditionalLoginRequiredMixin, View): + """ + Wrap Django's serve() view to enforce LOGIN_REQUIRED for static media. + """ + def get(self, request, path): + return serve(request, path, document_root=settings.MEDIA_ROOT) diff --git a/netbox/project-static/dist/graphiql/graphiql.min.js b/netbox/project-static/dist/graphiql/graphiql.min.js index 862ce3a80..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,23 +40249,86 @@ function limitCloseReason(reason, whenTooLong) { \************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.GraphQLError = void 0; +exports.formatError = formatError; +exports.printError = printError; var _isObjectLike = __webpack_require__(/*! ../jsutils/isObjectLike.mjs */ "../../../node_modules/graphql/jsutils/isObjectLike.mjs"); var _location = __webpack_require__(/*! ../language/location.mjs */ "../../../node_modules/graphql/language/location.mjs"); var _printLocation = __webpack_require__(/*! ../language/printLocation.mjs */ "../../../node_modules/graphql/language/printLocation.mjs"); +function toNormalizedOptions(args) { + const firstArg = args[0]; + if (firstArg == null || 'kind' in firstArg || 'length' in firstArg) { + return { + nodes: firstArg, + source: args[1], + positions: args[2], + path: args[3], + originalError: args[4], + extensions: args[5] + }; + } + return firstArg; +} /** * A GraphQLError describes an Error found during the parse, validate, or * execute phases of performing a GraphQL operation. In addition to a message * and stack trace, it also includes information about the locations in a * GraphQL document and/or execution result that correspond to the Error. */ + class GraphQLError extends Error { - constructor(message, options = {}) { + /** + * An array of `{ line, column }` locations within the source GraphQL document + * which correspond to this error. + * + * Errors during validation often contain multiple locations, for example to + * point out two things with the same name. Errors during execution include a + * single location, the field which produced the error. + * + * Enumerable, and appears in the result of JSON.stringify(). + */ + + /** + * An array describing the JSON-path into the execution response which + * corresponds to this error. Only included for errors during execution. + * + * Enumerable, and appears in the result of JSON.stringify(). + */ + + /** + * An array of GraphQL AST Nodes corresponding to this error. + */ + + /** + * The source GraphQL document for the first location of this error. + * + * Note that if this Error represents more than one node, the source may not + * represent nodes after the first node. + */ + + /** + * An array of character offsets within the source GraphQL document + * which correspond to this error. + */ + + /** + * The original error thrown from a field resolver during execution. + */ + + /** + * Extension fields to add to the formatted error. + */ + + /** + * @deprecated Please use the `GraphQLErrorOptions` constructor overload instead. + */ + constructor(message, ...rawArgs) { var _this$nodes, _nodeLocations$, _ref; const { nodes, @@ -23005,22 +40337,22 @@ class GraphQLError extends Error { path, originalError, extensions - } = options; + } = toNormalizedOptions(rawArgs); super(message); this.name = 'GraphQLError'; this.path = path !== null && path !== void 0 ? path : undefined; - this.originalError = originalError !== null && originalError !== void 0 ? originalError : undefined; - // Compute list of blame nodes. + this.originalError = originalError !== null && originalError !== void 0 ? originalError : undefined; // Compute list of blame nodes. + this.nodes = undefinedIfEmpty(Array.isArray(nodes) ? nodes : nodes ? [nodes] : undefined); - const nodeLocations = undefinedIfEmpty((_this$nodes = this.nodes) === null || _this$nodes === void 0 ? void 0 : _this$nodes.map(node => node.loc).filter(loc => loc != null)); - // Compute locations in the source for the given nodes/positions. + const nodeLocations = undefinedIfEmpty((_this$nodes = this.nodes) === null || _this$nodes === void 0 ? void 0 : _this$nodes.map(node => node.loc).filter(loc => loc != null)); // Compute locations in the source for the given nodes/positions. + this.source = source !== null && source !== void 0 ? source : nodeLocations === null || nodeLocations === void 0 ? void 0 : (_nodeLocations$ = nodeLocations[0]) === null || _nodeLocations$ === void 0 ? void 0 : _nodeLocations$.source; this.positions = positions !== null && positions !== void 0 ? positions : nodeLocations === null || nodeLocations === void 0 ? void 0 : nodeLocations.map(loc => loc.start); this.locations = positions && source ? positions.map(pos => (0, _location.getLocation)(source, pos)) : nodeLocations === null || nodeLocations === void 0 ? void 0 : nodeLocations.map(loc => (0, _location.getLocation)(loc.source, loc.start)); const originalExtensions = (0, _isObjectLike.isObjectLike)(originalError === null || originalError === void 0 ? void 0 : originalError.extensions) ? originalError === null || originalError === void 0 ? void 0 : originalError.extensions : undefined; - this.extensions = (_ref = extensions !== null && extensions !== void 0 ? extensions : originalExtensions) !== null && _ref !== void 0 ? _ref : Object.create(null); - // Only properties prescribed by the spec should be enumerable. + this.extensions = (_ref = extensions !== null && extensions !== void 0 ? extensions : originalExtensions) !== null && _ref !== void 0 ? _ref : Object.create(null); // Only properties prescribed by the spec should be enumerable. // Keep the rest as non-enumerable. + Object.defineProperties(this, { message: { writable: true, @@ -23041,17 +40373,18 @@ class GraphQLError extends Error { originalError: { enumerable: false } - }); - // Include (non-enumerable) stack trace. + }); // Include (non-enumerable) stack trace. + /* c8 ignore start */ // FIXME: https://github.com/graphql/graphql-js/issues/2317 - if ((originalError === null || originalError === void 0 ? void 0 : originalError.stack) != null) { + + if (originalError !== null && originalError !== void 0 && originalError.stack) { Object.defineProperty(this, 'stack', { value: originalError.stack, writable: true, configurable: true }); - } else if (Error.captureStackTrace != null) { + } else if (Error.captureStackTrace) { Error.captureStackTrace(this, GraphQLError); } else { Object.defineProperty(this, 'stack', { @@ -23100,6 +40433,29 @@ exports.GraphQLError = GraphQLError; function undefinedIfEmpty(array) { return array === undefined || array.length === 0 ? undefined : array; } +/** + * See: https://spec.graphql.org/draft/#sec-Errors + */ + +/** + * Prints a GraphQLError to a string, representing useful location information + * about the error's position in the source. + * + * @deprecated Please use `error.toString` instead. Will be removed in v17 + */ +function printError(error) { + return error.toString(); +} +/** + * Given a GraphQLError, format it according to the rules described by the + * Response Format, Errors section of the GraphQL Specification. + * + * @deprecated Please use `error.toJSON` instead. Will be removed in v17 + */ + +function formatError(error) { + return error.toJSON(); +} /***/ }), @@ -23109,6 +40465,7 @@ function undefinedIfEmpty(array) { \*****************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -23120,12 +40477,24 @@ Object.defineProperty(exports, "GraphQLError", ({ return _GraphQLError.GraphQLError; } })); +Object.defineProperty(exports, "formatError", ({ + enumerable: true, + get: function () { + return _GraphQLError.formatError; + } +})); Object.defineProperty(exports, "locatedError", ({ enumerable: true, get: function () { return _locatedError.locatedError; } })); +Object.defineProperty(exports, "printError", ({ + enumerable: true, + get: function () { + return _GraphQLError.printError; + } +})); Object.defineProperty(exports, "syntaxError", ({ enumerable: true, get: function () { @@ -23144,6 +40513,7 @@ var _locatedError = __webpack_require__(/*! ./locatedError.mjs */ "../../../node \************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -23157,15 +40527,16 @@ var _GraphQLError = __webpack_require__(/*! ./GraphQLError.mjs */ "../../../node * GraphQL operation, produce a new GraphQLError aware of the location in the * document responsible for the original Error. */ + function locatedError(rawOriginalError, nodes, path) { - var _originalError$nodes; - const originalError = (0, _toError.toError)(rawOriginalError); - // Note: this uses a brand-check to support GraphQL errors originating from other contexts. + var _nodes; + const originalError = (0, _toError.toError)(rawOriginalError); // Note: this uses a brand-check to support GraphQL errors originating from other contexts. + if (isLocatedGraphQLError(originalError)) { return originalError; } return new _GraphQLError.GraphQLError(originalError.message, { - nodes: (_originalError$nodes = originalError.nodes) !== null && _originalError$nodes !== void 0 ? _originalError$nodes : nodes, + nodes: (_nodes = originalError.nodes) !== null && _nodes !== void 0 ? _nodes : nodes, source: originalError.source, positions: originalError.positions, path, @@ -23184,6 +40555,7 @@ function isLocatedGraphQLError(error) { \***********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -23195,6 +40567,7 @@ var _GraphQLError = __webpack_require__(/*! ./GraphQLError.mjs */ "../../../node * Produces a GraphQLError representing a syntax error, containing useful * descriptive information about the syntax error's position in the source. */ + function syntaxError(source, position, description) { return new _GraphQLError.GraphQLError(`Syntax Error: ${description}`, { source, @@ -23204,619 +40577,13 @@ function syntaxError(source, position, description) { /***/ }), -/***/ "../../../node_modules/graphql/execution/IncrementalGraph.mjs": -/*!********************************************************************!*\ - !*** ../../../node_modules/graphql/execution/IncrementalGraph.mjs ***! - \********************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.IncrementalGraph = void 0; -var _BoxedPromiseOrValue = __webpack_require__(/*! ../jsutils/BoxedPromiseOrValue.mjs */ "../../../node_modules/graphql/jsutils/BoxedPromiseOrValue.mjs"); -var _invariant = __webpack_require__(/*! ../jsutils/invariant.mjs */ "../../../node_modules/graphql/jsutils/invariant.mjs"); -var _isPromise = __webpack_require__(/*! ../jsutils/isPromise.mjs */ "../../../node_modules/graphql/jsutils/isPromise.mjs"); -var _promiseWithResolvers = __webpack_require__(/*! ../jsutils/promiseWithResolvers.mjs */ "../../../node_modules/graphql/jsutils/promiseWithResolvers.mjs"); -var _types = __webpack_require__(/*! ./types.mjs */ "../../../node_modules/graphql/execution/types.mjs"); -/** - * @internal - */ -class IncrementalGraph { - constructor() { - this._rootNodes = new Set(); - this._completedQueue = []; - this._nextQueue = []; - } - getNewRootNodes(incrementalDataRecords) { - const initialResultChildren = new Set(); - this._addIncrementalDataRecords(incrementalDataRecords, undefined, initialResultChildren); - return this._promoteNonEmptyToRoot(initialResultChildren); - } - addCompletedSuccessfulExecutionGroup(successfulExecutionGroup) { - for (const deferredFragmentRecord of successfulExecutionGroup.pendingExecutionGroup.deferredFragmentRecords) { - deferredFragmentRecord.pendingExecutionGroups.delete(successfulExecutionGroup.pendingExecutionGroup); - deferredFragmentRecord.successfulExecutionGroups.add(successfulExecutionGroup); - } - const incrementalDataRecords = successfulExecutionGroup.incrementalDataRecords; - if (incrementalDataRecords !== undefined) { - this._addIncrementalDataRecords(incrementalDataRecords, successfulExecutionGroup.pendingExecutionGroup.deferredFragmentRecords); - } - } - *currentCompletedBatch() { - let completed; - while ((completed = this._completedQueue.shift()) !== undefined) { - yield completed; - } - if (this._rootNodes.size === 0) { - for (const resolve of this._nextQueue) { - resolve(undefined); - } - } - } - nextCompletedBatch() { - const { - promise, - resolve - } = (0, _promiseWithResolvers.promiseWithResolvers)(); - this._nextQueue.push(resolve); - return promise; - } - abort() { - for (const resolve of this._nextQueue) { - resolve(undefined); - } - } - hasNext() { - return this._rootNodes.size > 0; - } - completeDeferredFragment(deferredFragmentRecord) { - if (!this._rootNodes.has(deferredFragmentRecord) || deferredFragmentRecord.pendingExecutionGroups.size > 0) { - return; - } - const successfulExecutionGroups = Array.from(deferredFragmentRecord.successfulExecutionGroups); - this._removeRootNode(deferredFragmentRecord); - for (const successfulExecutionGroup of successfulExecutionGroups) { - for (const otherDeferredFragmentRecord of successfulExecutionGroup.pendingExecutionGroup.deferredFragmentRecords) { - otherDeferredFragmentRecord.successfulExecutionGroups.delete(successfulExecutionGroup); - } - } - const newRootNodes = this._promoteNonEmptyToRoot(deferredFragmentRecord.children); - return { - newRootNodes, - successfulExecutionGroups - }; - } - removeDeferredFragment(deferredFragmentRecord) { - if (!this._rootNodes.has(deferredFragmentRecord)) { - return false; - } - this._removeRootNode(deferredFragmentRecord); - return true; - } - removeStream(streamRecord) { - this._removeRootNode(streamRecord); - } - _removeRootNode(deliveryGroup) { - this._rootNodes.delete(deliveryGroup); - } - _addIncrementalDataRecords(incrementalDataRecords, parents, initialResultChildren) { - for (const incrementalDataRecord of incrementalDataRecords) { - if ((0, _types.isPendingExecutionGroup)(incrementalDataRecord)) { - for (const deferredFragmentRecord of incrementalDataRecord.deferredFragmentRecords) { - this._addDeferredFragment(deferredFragmentRecord, initialResultChildren); - deferredFragmentRecord.pendingExecutionGroups.add(incrementalDataRecord); - } - if (this._completesRootNode(incrementalDataRecord)) { - this._onExecutionGroup(incrementalDataRecord); - } - } else if (parents === undefined) { - initialResultChildren !== undefined || (0, _invariant.invariant)(false); - initialResultChildren.add(incrementalDataRecord); - } else { - for (const parent of parents) { - this._addDeferredFragment(parent, initialResultChildren); - parent.children.add(incrementalDataRecord); - } - } - } - } - _promoteNonEmptyToRoot(maybeEmptyNewRootNodes) { - const newRootNodes = []; - for (const node of maybeEmptyNewRootNodes) { - if ((0, _types.isDeferredFragmentRecord)(node)) { - if (node.pendingExecutionGroups.size > 0) { - for (const pendingExecutionGroup of node.pendingExecutionGroups) { - if (!this._completesRootNode(pendingExecutionGroup)) { - this._onExecutionGroup(pendingExecutionGroup); - } - } - this._rootNodes.add(node); - newRootNodes.push(node); - continue; - } - for (const child of node.children) { - maybeEmptyNewRootNodes.add(child); - } - } else { - this._rootNodes.add(node); - newRootNodes.push(node); - // eslint-disable-next-line @typescript-eslint/no-floating-promises - this._onStreamItems(node); - } - } - return newRootNodes; - } - _completesRootNode(pendingExecutionGroup) { - return pendingExecutionGroup.deferredFragmentRecords.some(deferredFragmentRecord => this._rootNodes.has(deferredFragmentRecord)); - } - _addDeferredFragment(deferredFragmentRecord, initialResultChildren) { - if (this._rootNodes.has(deferredFragmentRecord)) { - return; - } - const parent = deferredFragmentRecord.parent; - if (parent === undefined) { - initialResultChildren !== undefined || (0, _invariant.invariant)(false); - initialResultChildren.add(deferredFragmentRecord); - return; - } - parent.children.add(deferredFragmentRecord); - this._addDeferredFragment(parent, initialResultChildren); - } - _onExecutionGroup(pendingExecutionGroup) { - let completedExecutionGroup = pendingExecutionGroup.result; - if (!(completedExecutionGroup instanceof _BoxedPromiseOrValue.BoxedPromiseOrValue)) { - completedExecutionGroup = completedExecutionGroup(); - } - const value = completedExecutionGroup.value; - if ((0, _isPromise.isPromise)(value)) { - // eslint-disable-next-line @typescript-eslint/no-floating-promises - value.then(resolved => this._enqueue(resolved)); - } else { - this._enqueue(value); - } - } - async _onStreamItems(streamRecord) { - let items = []; - let errors = []; - let incrementalDataRecords = []; - const streamItemQueue = streamRecord.streamItemQueue; - let streamItemRecord; - while ((streamItemRecord = streamItemQueue.shift()) !== undefined) { - let result = streamItemRecord instanceof _BoxedPromiseOrValue.BoxedPromiseOrValue ? streamItemRecord.value : streamItemRecord().value; - if ((0, _isPromise.isPromise)(result)) { - if (items.length > 0) { - this._enqueue({ - streamRecord, - result: - // TODO add additional test case or rework for coverage - errors.length > 0 /* c8 ignore start */ ? { - items, - errors - } /* c8 ignore stop */ : { - items - }, - incrementalDataRecords - }); - items = []; - errors = []; - incrementalDataRecords = []; - } - // eslint-disable-next-line no-await-in-loop - result = await result; - // wait an additional tick to coalesce resolving additional promises - // within the queue - // eslint-disable-next-line no-await-in-loop - await Promise.resolve(); - } - if (result.item === undefined) { - if (items.length > 0) { - this._enqueue({ - streamRecord, - result: errors.length > 0 ? { - items, - errors - } : { - items - }, - incrementalDataRecords - }); - } - this._enqueue(result.errors === undefined ? { - streamRecord - } : { - streamRecord, - errors: result.errors - }); - return; - } - items.push(result.item); - if (result.errors !== undefined) { - errors.push(...result.errors); - } - if (result.incrementalDataRecords !== undefined) { - incrementalDataRecords.push(...result.incrementalDataRecords); - } - } - } - *_yieldCurrentCompletedIncrementalData(first) { - yield first; - yield* this.currentCompletedBatch(); - } - _enqueue(completed) { - const next = this._nextQueue.shift(); - if (next !== undefined) { - next(this._yieldCurrentCompletedIncrementalData(completed)); - return; - } - this._completedQueue.push(completed); - } -} -exports.IncrementalGraph = IncrementalGraph; - -/***/ }), - -/***/ "../../../node_modules/graphql/execution/IncrementalPublisher.mjs": -/*!************************************************************************!*\ - !*** ../../../node_modules/graphql/execution/IncrementalPublisher.mjs ***! - \************************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.buildIncrementalResponse = buildIncrementalResponse; -var _invariant = __webpack_require__(/*! ../jsutils/invariant.mjs */ "../../../node_modules/graphql/jsutils/invariant.mjs"); -var _Path = __webpack_require__(/*! ../jsutils/Path.mjs */ "../../../node_modules/graphql/jsutils/Path.mjs"); -var _IncrementalGraph = __webpack_require__(/*! ./IncrementalGraph.mjs */ "../../../node_modules/graphql/execution/IncrementalGraph.mjs"); -var _types = __webpack_require__(/*! ./types.mjs */ "../../../node_modules/graphql/execution/types.mjs"); -function buildIncrementalResponse(context, result, errors, incrementalDataRecords) { - const incrementalPublisher = new IncrementalPublisher(context); - return incrementalPublisher.buildResponse(result, errors, incrementalDataRecords); -} -/** - * This class is used to publish incremental results to the client, enabling semi-concurrent - * execution while preserving result order. - * - * @internal - */ -class IncrementalPublisher { - constructor(context) { - this._context = context; - this._nextId = 0; - this._incrementalGraph = new _IncrementalGraph.IncrementalGraph(); - } - buildResponse(data, errors, incrementalDataRecords) { - const newRootNodes = this._incrementalGraph.getNewRootNodes(incrementalDataRecords); - const pending = this._toPendingResults(newRootNodes); - const initialResult = errors === undefined ? { - data, - pending, - hasNext: true - } : { - errors, - data, - pending, - hasNext: true - }; - return { - initialResult, - subsequentResults: this._subscribe() - }; - } - _toPendingResults(newRootNodes) { - const pendingResults = []; - for (const node of newRootNodes) { - const id = String(this._getNextId()); - node.id = id; - const pendingResult = { - id, - path: (0, _Path.pathToArray)(node.path) - }; - if (node.label !== undefined) { - pendingResult.label = node.label; - } - pendingResults.push(pendingResult); - } - return pendingResults; - } - _getNextId() { - return String(this._nextId++); - } - _subscribe() { - let isDone = false; - const _next = async () => { - if (isDone) { - await this._returnAsyncIteratorsIgnoringErrors(); - return { - value: undefined, - done: true - }; - } - const context = { - pending: [], - incremental: [], - completed: [] - }; - let batch = this._incrementalGraph.currentCompletedBatch(); - do { - for (const completedResult of batch) { - this._handleCompletedIncrementalData(completedResult, context); - } - const { - incremental, - completed - } = context; - if (incremental.length > 0 || completed.length > 0) { - const hasNext = this._incrementalGraph.hasNext(); - if (!hasNext) { - isDone = true; - } - const subsequentIncrementalExecutionResult = { - hasNext - }; - const pending = context.pending; - if (pending.length > 0) { - subsequentIncrementalExecutionResult.pending = pending; - } - if (incremental.length > 0) { - subsequentIncrementalExecutionResult.incremental = incremental; - } - if (completed.length > 0) { - subsequentIncrementalExecutionResult.completed = completed; - } - return { - value: subsequentIncrementalExecutionResult, - done: false - }; - } - // eslint-disable-next-line no-await-in-loop - batch = await this._incrementalGraph.nextCompletedBatch(); - } while (batch !== undefined); - await this._returnAsyncIteratorsIgnoringErrors(); - return { - value: undefined, - done: true - }; - }; - const _return = async () => { - isDone = true; - this._incrementalGraph.abort(); - await this._returnAsyncIterators(); - return { - value: undefined, - done: true - }; - }; - const _throw = async error => { - isDone = true; - this._incrementalGraph.abort(); - await this._returnAsyncIterators(); - return Promise.reject(error); - }; - return { - [Symbol.asyncIterator]() { - return this; - }, - next: _next, - return: _return, - throw: _throw - }; - } - _handleCompletedIncrementalData(completedIncrementalData, context) { - if ((0, _types.isCompletedExecutionGroup)(completedIncrementalData)) { - this._handleCompletedExecutionGroup(completedIncrementalData, context); - } else { - this._handleCompletedStreamItems(completedIncrementalData, context); - } - } - _handleCompletedExecutionGroup(completedExecutionGroup, context) { - if ((0, _types.isFailedExecutionGroup)(completedExecutionGroup)) { - for (const deferredFragmentRecord of completedExecutionGroup.pendingExecutionGroup.deferredFragmentRecords) { - const id = deferredFragmentRecord.id; - if (!this._incrementalGraph.removeDeferredFragment(deferredFragmentRecord)) { - // This can occur if multiple deferred grouped field sets error for a fragment. - continue; - } - id !== undefined || (0, _invariant.invariant)(false); - context.completed.push({ - id, - errors: completedExecutionGroup.errors - }); - } - return; - } - this._incrementalGraph.addCompletedSuccessfulExecutionGroup(completedExecutionGroup); - for (const deferredFragmentRecord of completedExecutionGroup.pendingExecutionGroup.deferredFragmentRecords) { - const completion = this._incrementalGraph.completeDeferredFragment(deferredFragmentRecord); - if (completion === undefined) { - continue; - } - const id = deferredFragmentRecord.id; - id !== undefined || (0, _invariant.invariant)(false); - const incremental = context.incremental; - const { - newRootNodes, - successfulExecutionGroups - } = completion; - context.pending.push(...this._toPendingResults(newRootNodes)); - for (const successfulExecutionGroup of successfulExecutionGroups) { - const { - bestId, - subPath - } = this._getBestIdAndSubPath(id, deferredFragmentRecord, successfulExecutionGroup); - const incrementalEntry = { - ...successfulExecutionGroup.result, - id: bestId - }; - if (subPath !== undefined) { - incrementalEntry.subPath = subPath; - } - incremental.push(incrementalEntry); - } - context.completed.push({ - id - }); - } - } - _handleCompletedStreamItems(streamItemsResult, context) { - const streamRecord = streamItemsResult.streamRecord; - const id = streamRecord.id; - id !== undefined || (0, _invariant.invariant)(false); - if (streamItemsResult.errors !== undefined) { - context.completed.push({ - id, - errors: streamItemsResult.errors - }); - this._incrementalGraph.removeStream(streamRecord); - if ((0, _types.isCancellableStreamRecord)(streamRecord)) { - this._context.cancellableStreams !== undefined || (0, _invariant.invariant)(false); - this._context.cancellableStreams.delete(streamRecord); - streamRecord.earlyReturn().catch(() => { - /* c8 ignore next 1 */ - // ignore error - }); - } - } else if (streamItemsResult.result === undefined) { - context.completed.push({ - id - }); - this._incrementalGraph.removeStream(streamRecord); - if ((0, _types.isCancellableStreamRecord)(streamRecord)) { - this._context.cancellableStreams !== undefined || (0, _invariant.invariant)(false); - this._context.cancellableStreams.delete(streamRecord); - } - } else { - const incrementalEntry = { - id, - ...streamItemsResult.result - }; - context.incremental.push(incrementalEntry); - const incrementalDataRecords = streamItemsResult.incrementalDataRecords; - if (incrementalDataRecords !== undefined) { - const newRootNodes = this._incrementalGraph.getNewRootNodes(incrementalDataRecords); - context.pending.push(...this._toPendingResults(newRootNodes)); - } - } - } - _getBestIdAndSubPath(initialId, initialDeferredFragmentRecord, completedExecutionGroup) { - let maxLength = (0, _Path.pathToArray)(initialDeferredFragmentRecord.path).length; - let bestId = initialId; - for (const deferredFragmentRecord of completedExecutionGroup.pendingExecutionGroup.deferredFragmentRecords) { - if (deferredFragmentRecord === initialDeferredFragmentRecord) { - continue; - } - const id = deferredFragmentRecord.id; - // TODO: add test case for when an fragment has not been released, but might be processed for the shortest path. - /* c8 ignore next 3 */ - if (id === undefined) { - continue; - } - const fragmentPath = (0, _Path.pathToArray)(deferredFragmentRecord.path); - const length = fragmentPath.length; - if (length > maxLength) { - maxLength = length; - bestId = id; - } - } - const subPath = completedExecutionGroup.path.slice(maxLength); - return { - bestId, - subPath: subPath.length > 0 ? subPath : undefined - }; - } - async _returnAsyncIterators() { - const cancellableStreams = this._context.cancellableStreams; - if (cancellableStreams === undefined) { - return; - } - const promises = []; - for (const streamRecord of cancellableStreams) { - if (streamRecord.earlyReturn !== undefined) { - promises.push(streamRecord.earlyReturn()); - } - } - await Promise.all(promises); - } - async _returnAsyncIteratorsIgnoringErrors() { - await this._returnAsyncIterators().catch(() => { - // Ignore errors - }); - } -} - -/***/ }), - -/***/ "../../../node_modules/graphql/execution/buildExecutionPlan.mjs": -/*!**********************************************************************!*\ - !*** ../../../node_modules/graphql/execution/buildExecutionPlan.mjs ***! - \**********************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.buildExecutionPlan = buildExecutionPlan; -var _getBySet = __webpack_require__(/*! ../jsutils/getBySet.mjs */ "../../../node_modules/graphql/jsutils/getBySet.mjs"); -var _isSameSet = __webpack_require__(/*! ../jsutils/isSameSet.mjs */ "../../../node_modules/graphql/jsutils/isSameSet.mjs"); -function buildExecutionPlan(originalGroupedFieldSet, parentDeferUsages = new Set()) { - const groupedFieldSet = new Map(); - const newGroupedFieldSets = new Map(); - for (const [responseKey, fieldGroup] of originalGroupedFieldSet) { - const filteredDeferUsageSet = getFilteredDeferUsageSet(fieldGroup); - if ((0, _isSameSet.isSameSet)(filteredDeferUsageSet, parentDeferUsages)) { - groupedFieldSet.set(responseKey, fieldGroup); - continue; - } - let newGroupedFieldSet = (0, _getBySet.getBySet)(newGroupedFieldSets, filteredDeferUsageSet); - if (newGroupedFieldSet === undefined) { - newGroupedFieldSet = new Map(); - newGroupedFieldSets.set(filteredDeferUsageSet, newGroupedFieldSet); - } - newGroupedFieldSet.set(responseKey, fieldGroup); - } - return { - groupedFieldSet, - newGroupedFieldSets - }; -} -function getFilteredDeferUsageSet(fieldGroup) { - const filteredDeferUsageSet = new Set(); - for (const fieldDetails of fieldGroup) { - const deferUsage = fieldDetails.deferUsage; - if (deferUsage === undefined) { - filteredDeferUsageSet.clear(); - return filteredDeferUsageSet; - } - filteredDeferUsageSet.add(deferUsage); - } - for (const deferUsage of filteredDeferUsageSet) { - let parentDeferUsage = deferUsage.parentDeferUsage; - while (parentDeferUsage !== undefined) { - if (filteredDeferUsageSet.has(parentDeferUsage)) { - filteredDeferUsageSet.delete(deferUsage); - break; - } - parentDeferUsage = parentDeferUsage.parentDeferUsage; - } - } - return filteredDeferUsageSet; -} - -/***/ }), - /***/ "../../../node_modules/graphql/execution/collectFields.mjs": /*!*****************************************************************!*\ !*** ../../../node_modules/graphql/execution/collectFields.mjs ***! \*****************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -23824,9 +40591,6 @@ Object.defineProperty(exports, "__esModule", ({ })); exports.collectFields = collectFields; exports.collectSubfields = collectSubfields; -var _AccumulatorMap = __webpack_require__(/*! ../jsutils/AccumulatorMap.mjs */ "../../../node_modules/graphql/jsutils/AccumulatorMap.mjs"); -var _invariant = __webpack_require__(/*! ../jsutils/invariant.mjs */ "../../../node_modules/graphql/jsutils/invariant.mjs"); -var _ast = __webpack_require__(/*! ../language/ast.mjs */ "../../../node_modules/graphql/language/ast.mjs"); var _kinds = __webpack_require__(/*! ../language/kinds.mjs */ "../../../node_modules/graphql/language/kinds.mjs"); var _definition = __webpack_require__(/*! ../type/definition.mjs */ "../../../node_modules/graphql/type/definition.mjs"); var _directives = __webpack_require__(/*! ../type/directives.mjs */ "../../../node_modules/graphql/type/directives.mjs"); @@ -23841,22 +40605,11 @@ var _values = __webpack_require__(/*! ./values.mjs */ "../../../node_modules/gra * * @internal */ -function collectFields(schema, fragments, variableValues, runtimeType, operation) { - const groupedFieldSet = new _AccumulatorMap.AccumulatorMap(); - const newDeferUsages = []; - const context = { - schema, - fragments, - variableValues, - runtimeType, - operation, - visitedFragmentNames: new Set() - }; - collectFieldsImpl(context, operation.selectionSet, groupedFieldSet, newDeferUsages); - return { - groupedFieldSet, - newDeferUsages - }; + +function collectFields(schema, fragments, variableValues, runtimeType, selectionSet) { + const fields = new Map(); + collectFieldsImpl(schema, fragments, variableValues, runtimeType, selectionSet, fields, new Set()); + return fields; } /** * Given an array of field nodes, collects all of the subfields of the passed @@ -23868,38 +40621,18 @@ function collectFields(schema, fragments, variableValues, runtimeType, operation * * @internal */ -// eslint-disable-next-line max-params -function collectSubfields(schema, fragments, variableValues, operation, returnType, fieldGroup) { - const context = { - schema, - fragments, - variableValues, - runtimeType: returnType, - operation, - visitedFragmentNames: new Set() - }; - const subGroupedFieldSet = new _AccumulatorMap.AccumulatorMap(); - const newDeferUsages = []; - for (const fieldDetail of fieldGroup) { - const node = fieldDetail.node; + +function collectSubfields(schema, fragments, variableValues, returnType, fieldNodes) { + const subFieldNodes = new Map(); + const visitedFragmentNames = new Set(); + for (const node of fieldNodes) { if (node.selectionSet) { - collectFieldsImpl(context, node.selectionSet, subGroupedFieldSet, newDeferUsages, fieldDetail.deferUsage); + collectFieldsImpl(schema, fragments, variableValues, returnType, node.selectionSet, subFieldNodes, visitedFragmentNames); } } - return { - groupedFieldSet: subGroupedFieldSet, - newDeferUsages - }; + return subFieldNodes; } -function collectFieldsImpl(context, selectionSet, groupedFieldSet, newDeferUsages, deferUsage) { - const { - schema, - fragments, - variableValues, - runtimeType, - operation, - visitedFragmentNames - } = context; +function collectFieldsImpl(schema, fragments, variableValues, runtimeType, selectionSet, fields, visitedFragmentNames) { for (const selection of selectionSet.selections) { switch (selection.kind) { case _kinds.Kind.FIELD: @@ -23907,10 +40640,13 @@ function collectFieldsImpl(context, selectionSet, groupedFieldSet, newDeferUsage if (!shouldIncludeNode(variableValues, selection)) { continue; } - groupedFieldSet.add(getFieldEntryKey(selection), { - node: selection, - deferUsage - }); + const name = getFieldEntryKey(selection); + const fieldList = fields.get(name); + if (fieldList !== undefined) { + fieldList.push(selection); + } else { + fields.set(name, [selection]); + } break; } case _kinds.Kind.INLINE_FRAGMENT: @@ -23918,61 +40654,31 @@ function collectFieldsImpl(context, selectionSet, groupedFieldSet, newDeferUsage if (!shouldIncludeNode(variableValues, selection) || !doesFragmentConditionMatch(schema, selection, runtimeType)) { continue; } - const newDeferUsage = getDeferUsage(operation, variableValues, selection, deferUsage); - if (!newDeferUsage) { - collectFieldsImpl(context, selection.selectionSet, groupedFieldSet, newDeferUsages, deferUsage); - } else { - newDeferUsages.push(newDeferUsage); - collectFieldsImpl(context, selection.selectionSet, groupedFieldSet, newDeferUsages, newDeferUsage); - } + collectFieldsImpl(schema, fragments, variableValues, runtimeType, selection.selectionSet, fields, visitedFragmentNames); break; } case _kinds.Kind.FRAGMENT_SPREAD: { const fragName = selection.name.value; - const newDeferUsage = getDeferUsage(operation, variableValues, selection, deferUsage); - if (!newDeferUsage && (visitedFragmentNames.has(fragName) || !shouldIncludeNode(variableValues, selection))) { + if (visitedFragmentNames.has(fragName) || !shouldIncludeNode(variableValues, selection)) { continue; } + visitedFragmentNames.add(fragName); const fragment = fragments[fragName]; - if (fragment == null || !doesFragmentConditionMatch(schema, fragment, runtimeType)) { + if (!fragment || !doesFragmentConditionMatch(schema, fragment, runtimeType)) { continue; } - if (!newDeferUsage) { - visitedFragmentNames.add(fragName); - collectFieldsImpl(context, fragment.selectionSet, groupedFieldSet, newDeferUsages, deferUsage); - } else { - newDeferUsages.push(newDeferUsage); - collectFieldsImpl(context, fragment.selectionSet, groupedFieldSet, newDeferUsages, newDeferUsage); - } + collectFieldsImpl(schema, fragments, variableValues, runtimeType, fragment.selectionSet, fields, visitedFragmentNames); break; } } } } -/** - * Returns an object containing the `@defer` arguments if a field should be - * deferred based on the experimental flag, defer directive present and - * not disabled by the "if" argument. - */ -function getDeferUsage(operation, variableValues, node, parentDeferUsage) { - const defer = (0, _values.getDirectiveValues)(_directives.GraphQLDeferDirective, node, variableValues); - if (!defer) { - return; - } - if (defer.if === false) { - return; - } - operation.operation !== _ast.OperationTypeNode.SUBSCRIPTION || (0, _invariant.invariant)(false, '`@defer` directive not supported on subscription operations. Disable `@defer` by setting the `if` argument to `false`.'); - return { - label: typeof defer.label === 'string' ? defer.label : undefined, - parentDeferUsage - }; -} /** * Determines if a field should be included based on the `@include` and `@skip` * directives, where `@skip` has higher precedence than `@include`. */ + function shouldIncludeNode(variableValues, node) { const skip = (0, _values.getDirectiveValues)(_directives.GraphQLSkipDirective, node, variableValues); if ((skip === null || skip === void 0 ? void 0 : skip.if) === true) { @@ -23987,6 +40693,7 @@ function shouldIncludeNode(variableValues, node) { /** * Determines if a fragment is applicable to the given type. */ + function doesFragmentConditionMatch(schema, fragment, type) { const typeConditionNode = fragment.typeCondition; if (!typeConditionNode) { @@ -24004,6 +40711,7 @@ function doesFragmentConditionMatch(schema, fragment, type) { /** * Implements the logic to compute the key of a given field's entry */ + function getFieldEntryKey(node) { return node.alias ? node.alias.value : node.name.value; } @@ -24016,23 +40724,22 @@ function getFieldEntryKey(node) { \***********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); +exports.assertValidExecutionArguments = assertValidExecutionArguments; exports.buildExecutionContext = buildExecutionContext; exports.buildResolveInfo = buildResolveInfo; -exports.createSourceEventStream = createSourceEventStream; exports.defaultTypeResolver = exports.defaultFieldResolver = void 0; exports.execute = execute; exports.executeSync = executeSync; -exports.experimentalExecuteIncrementally = experimentalExecuteIncrementally; -exports.subscribe = subscribe; -var _BoxedPromiseOrValue = __webpack_require__(/*! ../jsutils/BoxedPromiseOrValue.mjs */ "../../../node_modules/graphql/jsutils/BoxedPromiseOrValue.mjs"); +exports.getFieldDef = getFieldDef; +var _devAssert = __webpack_require__(/*! ../jsutils/devAssert.mjs */ "../../../node_modules/graphql/jsutils/devAssert.mjs"); var _inspect = __webpack_require__(/*! ../jsutils/inspect.mjs */ "../../../node_modules/graphql/jsutils/inspect.mjs"); var _invariant = __webpack_require__(/*! ../jsutils/invariant.mjs */ "../../../node_modules/graphql/jsutils/invariant.mjs"); -var _isAsyncIterable = __webpack_require__(/*! ../jsutils/isAsyncIterable.mjs */ "../../../node_modules/graphql/jsutils/isAsyncIterable.mjs"); var _isIterableObject = __webpack_require__(/*! ../jsutils/isIterableObject.mjs */ "../../../node_modules/graphql/jsutils/isIterableObject.mjs"); var _isObjectLike = __webpack_require__(/*! ../jsutils/isObjectLike.mjs */ "../../../node_modules/graphql/jsutils/isObjectLike.mjs"); var _isPromise = __webpack_require__(/*! ../jsutils/isPromise.mjs */ "../../../node_modules/graphql/jsutils/isPromise.mjs"); @@ -24045,25 +40752,44 @@ var _locatedError = __webpack_require__(/*! ../error/locatedError.mjs */ "../../ var _ast = __webpack_require__(/*! ../language/ast.mjs */ "../../../node_modules/graphql/language/ast.mjs"); var _kinds = __webpack_require__(/*! ../language/kinds.mjs */ "../../../node_modules/graphql/language/kinds.mjs"); var _definition = __webpack_require__(/*! ../type/definition.mjs */ "../../../node_modules/graphql/type/definition.mjs"); -var _directives = __webpack_require__(/*! ../type/directives.mjs */ "../../../node_modules/graphql/type/directives.mjs"); +var _introspection = __webpack_require__(/*! ../type/introspection.mjs */ "../../../node_modules/graphql/type/introspection.mjs"); var _validate = __webpack_require__(/*! ../type/validate.mjs */ "../../../node_modules/graphql/type/validate.mjs"); -var _buildExecutionPlan = __webpack_require__(/*! ./buildExecutionPlan.mjs */ "../../../node_modules/graphql/execution/buildExecutionPlan.mjs"); var _collectFields = __webpack_require__(/*! ./collectFields.mjs */ "../../../node_modules/graphql/execution/collectFields.mjs"); -var _IncrementalPublisher = __webpack_require__(/*! ./IncrementalPublisher.mjs */ "../../../node_modules/graphql/execution/IncrementalPublisher.mjs"); -var _mapAsyncIterable = __webpack_require__(/*! ./mapAsyncIterable.mjs */ "../../../node_modules/graphql/execution/mapAsyncIterable.mjs"); -var _types = __webpack_require__(/*! ./types.mjs */ "../../../node_modules/graphql/execution/types.mjs"); var _values = __webpack_require__(/*! ./values.mjs */ "../../../node_modules/graphql/execution/values.mjs"); -/* eslint-disable max-params */ -// This file contains a lot of such errors but we plan to refactor it anyway -// so just disable it for entire file. /** * A memoized collection of relevant subfields with regard to the return * type. Memoizing ensures the subfields are not repeatedly calculated, which * saves overhead when resolving lists of values. */ -const collectSubfields = (0, _memoize.memoize3)((exeContext, returnType, fieldGroup) => (0, _collectFields.collectSubfields)(exeContext.schema, exeContext.fragments, exeContext.variableValues, exeContext.operation, returnType, fieldGroup)); -const UNEXPECTED_EXPERIMENTAL_DIRECTIVES = 'The provided schema unexpectedly contains experimental directives (@defer or @stream). These directives may only be utilized if experimental execution features are explicitly enabled.'; -const UNEXPECTED_MULTIPLE_PAYLOADS = 'Executing this GraphQL operation would unexpectedly produce multiple payloads (due to @defer or @stream directive)'; + +const collectSubfields = (0, _memoize.memoize3)((exeContext, returnType, fieldNodes) => (0, _collectFields.collectSubfields)(exeContext.schema, exeContext.fragments, exeContext.variableValues, returnType, fieldNodes)); +/** + * Terminology + * + * "Definitions" are the generic name for top-level statements in the document. + * Examples of this include: + * 1) Operations (such as a query) + * 2) Fragments + * + * "Operations" are a generic name for requests in the document. + * Examples of this include: + * 1) query, + * 2) mutation + * + * "Selections" are the definitions that can appear legally and at + * single level of the query. These include: + * 1) field references e.g `a` + * 2) fragment "spreads" e.g. `...c` + * 3) inline fragment "spreads" e.g. `...on Type { a }` + */ + +/** + * Data that must be available at all points during query execution. + * + * Namely, schema of the type system that is currently executing, + * and the fragments defined in the query document + */ + /** * Implements the "Executing requests" section of the GraphQL specification. * @@ -24073,177 +40799,105 @@ const UNEXPECTED_MULTIPLE_PAYLOADS = 'Executing this GraphQL operation would une * * If the arguments to this function do not result in a legal execution context, * a GraphQLError will be thrown immediately explaining the invalid input. - * - * This function does not support incremental delivery (`@defer` and `@stream`). - * If an operation which would defer or stream data is executed with this - * function, it will throw or return a rejected promise. - * Use `experimentalExecuteIncrementally` if you want to support incremental - * delivery. */ function execute(args) { - if (args.schema.getDirective('defer') || args.schema.getDirective('stream')) { - throw new Error(UNEXPECTED_EXPERIMENTAL_DIRECTIVES); - } - const result = experimentalExecuteIncrementally(args); - if (!(0, _isPromise.isPromise)(result)) { - if ('initialResult' in result) { - // This can happen if the operation contains @defer or @stream directives - // and is not validated prior to execution - throw new Error(UNEXPECTED_MULTIPLE_PAYLOADS); - } - return result; - } - return result.then(incrementalResult => { - if ('initialResult' in incrementalResult) { - // This can happen if the operation contains @defer or @stream directives - // and is not validated prior to execution - throw new Error(UNEXPECTED_MULTIPLE_PAYLOADS); - } - return incrementalResult; - }); -} -/** - * Implements the "Executing requests" section of the GraphQL specification, - * including `@defer` and `@stream` as proposed in - * https://github.com/graphql/graphql-spec/pull/742 - * - * This function returns a Promise of an ExperimentalIncrementalExecutionResults - * object. This object either consists of a single ExecutionResult, or an - * object containing an `initialResult` and a stream of `subsequentResults`. - * - * If the arguments to this function do not result in a legal execution context, - * a GraphQLError will be thrown immediately explaining the invalid input. - */ -function experimentalExecuteIncrementally(args) { - // If a valid execution context cannot be created due to incorrect arguments, + // Temporary for v15 to v16 migration. Remove in v17 + arguments.length < 2 || (0, _devAssert.devAssert)(false, 'graphql@16 dropped long-deprecated support for positional arguments, please pass an object instead.'); + const { + schema, + document, + variableValues, + rootValue + } = args; // If arguments are missing or incorrect, throw an error. + + assertValidExecutionArguments(schema, document, variableValues); // If a valid execution context cannot be created due to incorrect arguments, // a "Response" with only errors is returned. - const exeContext = buildExecutionContext(args); - // Return early errors if execution context failed. + + const exeContext = buildExecutionContext(args); // Return early errors if execution context failed. + if (!('schema' in exeContext)) { return { errors: exeContext }; - } - return executeOperation(exeContext); -} -/** - * Implements the "Executing operations" section of the spec. - * - * Returns a Promise that will eventually resolve to the data described by - * The "Response" section of the GraphQL specification. - * - * If errors are encountered while executing a GraphQL field, only that - * field and its descendants will be omitted, and sibling fields will still - * be executed. An execution which encounters errors will still result in a - * resolved Promise. - * - * Errors from sub-fields of a NonNull type may propagate to the top level, - * at which point we still log the error and null the parent field, which - * in this case is the entire response. - */ -function executeOperation(exeContext) { + } // Return a Promise that will eventually resolve to the data described by + // The "Response" section of the GraphQL specification. + // + // If errors are encountered while executing a GraphQL field, only that + // field and its descendants will be omitted, and sibling fields will still + // be executed. An execution which encounters errors will still result in a + // resolved Promise. + // + // Errors from sub-fields of a NonNull type may propagate to the top level, + // at which point we still log the error and null the parent field, which + // in this case is the entire response. + try { const { - operation, - schema, - fragments, - variableValues, - rootValue + operation } = exeContext; - const rootType = schema.getRootType(operation.operation); - if (rootType == null) { - throw new _GraphQLError.GraphQLError(`Schema is not configured to execute ${operation.operation} operation.`, { - nodes: operation + const result = executeOperation(exeContext, operation, rootValue); + if ((0, _isPromise.isPromise)(result)) { + return result.then(data => buildResponse(data, exeContext.errors), error => { + exeContext.errors.push(error); + return buildResponse(null, exeContext.errors); }); } - const collectedFields = (0, _collectFields.collectFields)(schema, fragments, variableValues, rootType, operation); - let groupedFieldSet = collectedFields.groupedFieldSet; - const newDeferUsages = collectedFields.newDeferUsages; - let graphqlWrappedResult; - if (newDeferUsages.length === 0) { - graphqlWrappedResult = executeRootGroupedFieldSet(exeContext, operation.operation, rootType, rootValue, groupedFieldSet, undefined); - } else { - const executionPlan = (0, _buildExecutionPlan.buildExecutionPlan)(groupedFieldSet); - groupedFieldSet = executionPlan.groupedFieldSet; - const newGroupedFieldSets = executionPlan.newGroupedFieldSets; - const newDeferMap = addNewDeferredFragments(newDeferUsages, new Map()); - graphqlWrappedResult = executeRootGroupedFieldSet(exeContext, operation.operation, rootType, rootValue, groupedFieldSet, newDeferMap); - if (newGroupedFieldSets.size > 0) { - const newPendingExecutionGroups = collectExecutionGroups(exeContext, rootType, rootValue, undefined, undefined, newGroupedFieldSets, newDeferMap); - graphqlWrappedResult = withNewExecutionGroups(graphqlWrappedResult, newPendingExecutionGroups); - } - } - if ((0, _isPromise.isPromise)(graphqlWrappedResult)) { - return graphqlWrappedResult.then(resolved => buildDataResponse(exeContext, resolved[0], resolved[1]), error => ({ - data: null, - errors: withError(exeContext.errors, error) - })); - } - return buildDataResponse(exeContext, graphqlWrappedResult[0], graphqlWrappedResult[1]); + return buildResponse(result, exeContext.errors); } catch (error) { - return { - data: null, - errors: withError(exeContext.errors, error) - }; + exeContext.errors.push(error); + return buildResponse(null, exeContext.errors); } } -function withNewExecutionGroups(result, newPendingExecutionGroups) { - if ((0, _isPromise.isPromise)(result)) { - return result.then(resolved => { - addIncrementalDataRecords(resolved, newPendingExecutionGroups); - return resolved; - }); - } - addIncrementalDataRecords(result, newPendingExecutionGroups); - return result; -} -function addIncrementalDataRecords(graphqlWrappedResult, incrementalDataRecords) { - if (incrementalDataRecords === undefined) { - return; - } - if (graphqlWrappedResult[1] === undefined) { - graphqlWrappedResult[1] = [...incrementalDataRecords]; - } else { - graphqlWrappedResult[1].push(...incrementalDataRecords); - } -} -function withError(errors, error) { - return errors === undefined ? [error] : [...errors, error]; -} -function buildDataResponse(exeContext, data, incrementalDataRecords) { - const errors = exeContext.errors; - if (incrementalDataRecords === undefined) { - return errors !== undefined ? { - errors, - data - } : { - data - }; - } - return (0, _IncrementalPublisher.buildIncrementalResponse)(exeContext, data, errors, incrementalDataRecords); -} /** * Also implements the "Executing requests" section of the GraphQL specification. * However, it guarantees to complete synchronously (or throw an error) assuming * that all field resolvers are also synchronous. */ + function executeSync(args) { - const result = experimentalExecuteIncrementally(args); - // Assert that the execution was synchronous. - if ((0, _isPromise.isPromise)(result) || 'initialResult' in result) { + const result = execute(args); // Assert that the execution was synchronous. + + if ((0, _isPromise.isPromise)(result)) { throw new Error('GraphQL execution failed to complete synchronously.'); } return result; } +/** + * Given a completed execution context and data, build the `{ errors, data }` + * response defined by the "Response" section of the GraphQL specification. + */ + +function buildResponse(data, errors) { + return errors.length === 0 ? { + data + } : { + errors, + data + }; +} +/** + * Essential assertions before executing to provide developer feedback for + * improper use of the GraphQL library. + * + * @internal + */ + +function assertValidExecutionArguments(schema, document, rawVariableValues) { + document || (0, _devAssert.devAssert)(false, 'Must provide document.'); // If the schema used for execution is invalid, throw an error. + + (0, _validate.assertValidSchema)(schema); // Variables, if provided, must be an object. + + rawVariableValues == null || (0, _isObjectLike.isObjectLike)(rawVariableValues) || (0, _devAssert.devAssert)(false, 'Variables must be provided as an Object where each property is a variable value. Perhaps look to see if an unparsed JSON string was provided.'); +} /** * Constructs a ExecutionContext object from the arguments passed to * execute, which we will pass throughout the other execution methods. * * Throws a GraphQLError if a valid execution context cannot be created. * - * TODO: consider no longer exporting this function * @internal */ + function buildExecutionContext(args) { var _definition$name, _operation$variableDe; const { @@ -24255,11 +40909,8 @@ function buildExecutionContext(args) { operationName, fieldResolver, typeResolver, - subscribeFieldResolver, - enableEarlyExecution + subscribeFieldResolver } = args; - // If the schema used for execution is invalid, throw an error. - (0, _validate.assertValidSchema)(schema); let operation; const fragments = Object.create(null); for (const definition of document.definitions) { @@ -24277,8 +40928,7 @@ function buildExecutionContext(args) { case _kinds.Kind.FRAGMENT_DEFINITION: fragments[definition.name.value] = definition; break; - default: - // ignore non-executable definitions + default: // ignore non-executable definitions } } if (!operation) { @@ -24286,9 +40936,10 @@ function buildExecutionContext(args) { return [new _GraphQLError.GraphQLError(`Unknown operation named "${operationName}".`)]; } return [new _GraphQLError.GraphQLError('Must provide an operation.')]; - } - // FIXME: https://github.com/graphql/graphql-js/issues/2203 + } // FIXME: https://github.com/graphql/graphql-js/issues/2203 + /* c8 ignore next */ + const variableDefinitions = (_operation$variableDe = operation.variableDefinitions) !== null && _operation$variableDe !== void 0 ? _operation$variableDe : []; const coercedVariableValues = (0, _values.getVariableValues)(schema, variableDefinitions, rawVariableValues !== null && rawVariableValues !== void 0 ? rawVariableValues : {}, { maxErrors: 50 @@ -24306,100 +40957,91 @@ function buildExecutionContext(args) { fieldResolver: fieldResolver !== null && fieldResolver !== void 0 ? fieldResolver : defaultFieldResolver, typeResolver: typeResolver !== null && typeResolver !== void 0 ? typeResolver : defaultTypeResolver, subscribeFieldResolver: subscribeFieldResolver !== null && subscribeFieldResolver !== void 0 ? subscribeFieldResolver : defaultFieldResolver, - enableEarlyExecution: enableEarlyExecution === true, - errors: undefined, - cancellableStreams: undefined + errors: [] }; } -function buildPerEventExecutionContext(exeContext, payload) { - return { - ...exeContext, - rootValue: payload, - errors: undefined - }; -} -function executeRootGroupedFieldSet(exeContext, operation, rootType, rootValue, groupedFieldSet, deferMap) { - switch (operation) { +/** + * Implements the "Executing operations" section of the spec. + */ + +function executeOperation(exeContext, operation, rootValue) { + const rootType = exeContext.schema.getRootType(operation.operation); + if (rootType == null) { + throw new _GraphQLError.GraphQLError(`Schema is not configured to execute ${operation.operation} operation.`, { + nodes: operation + }); + } + const rootFields = (0, _collectFields.collectFields)(exeContext.schema, exeContext.fragments, exeContext.variableValues, rootType, operation.selectionSet); + const path = undefined; + switch (operation.operation) { case _ast.OperationTypeNode.QUERY: - return executeFields(exeContext, rootType, rootValue, undefined, groupedFieldSet, undefined, deferMap); + return executeFields(exeContext, rootType, rootValue, path, rootFields); case _ast.OperationTypeNode.MUTATION: - return executeFieldsSerially(exeContext, rootType, rootValue, undefined, groupedFieldSet, undefined, deferMap); + return executeFieldsSerially(exeContext, rootType, rootValue, path, rootFields); case _ast.OperationTypeNode.SUBSCRIPTION: // TODO: deprecate `subscribe` and move all logic here // Temporary solution until we finish merging execute and subscribe together - return executeFields(exeContext, rootType, rootValue, undefined, groupedFieldSet, undefined, deferMap); + return executeFields(exeContext, rootType, rootValue, path, rootFields); } } /** * Implements the "Executing selection sets" section of the spec * for fields that must be executed serially. */ -function executeFieldsSerially(exeContext, parentType, sourceValue, path, groupedFieldSet, incrementalContext, deferMap) { - return (0, _promiseReduce.promiseReduce)(groupedFieldSet, (graphqlWrappedResult, [responseName, fieldGroup]) => { + +function executeFieldsSerially(exeContext, parentType, sourceValue, path, fields) { + return (0, _promiseReduce.promiseReduce)(fields.entries(), (results, [responseName, fieldNodes]) => { const fieldPath = (0, _Path.addPath)(path, responseName, parentType.name); - const result = executeField(exeContext, parentType, sourceValue, fieldGroup, fieldPath, incrementalContext, deferMap); + const result = executeField(exeContext, parentType, sourceValue, fieldNodes, fieldPath); if (result === undefined) { - return graphqlWrappedResult; + return results; } if ((0, _isPromise.isPromise)(result)) { - return result.then(resolved => { - graphqlWrappedResult[0][responseName] = resolved[0]; - addIncrementalDataRecords(graphqlWrappedResult, resolved[1]); - return graphqlWrappedResult; + return result.then(resolvedResult => { + results[responseName] = resolvedResult; + return results; }); } - graphqlWrappedResult[0][responseName] = result[0]; - addIncrementalDataRecords(graphqlWrappedResult, result[1]); - return graphqlWrappedResult; - }, [Object.create(null), undefined]); + results[responseName] = result; + return results; + }, Object.create(null)); } /** * Implements the "Executing selection sets" section of the spec * for fields that may be executed in parallel. */ -function executeFields(exeContext, parentType, sourceValue, path, groupedFieldSet, incrementalContext, deferMap) { + +function executeFields(exeContext, parentType, sourceValue, path, fields) { const results = Object.create(null); - const graphqlWrappedResult = [results, undefined]; let containsPromise = false; try { - for (const [responseName, fieldGroup] of groupedFieldSet) { + for (const [responseName, fieldNodes] of fields.entries()) { const fieldPath = (0, _Path.addPath)(path, responseName, parentType.name); - const result = executeField(exeContext, parentType, sourceValue, fieldGroup, fieldPath, incrementalContext, deferMap); + const result = executeField(exeContext, parentType, sourceValue, fieldNodes, fieldPath); if (result !== undefined) { + results[responseName] = result; if ((0, _isPromise.isPromise)(result)) { - results[responseName] = result.then(resolved => { - addIncrementalDataRecords(graphqlWrappedResult, resolved[1]); - return resolved[0]; - }); containsPromise = true; - } else { - results[responseName] = result[0]; - addIncrementalDataRecords(graphqlWrappedResult, result[1]); } } } } catch (error) { if (containsPromise) { // Ensure that any promises returned by other fields are handled, as they may also reject. - return (0, _promiseForObject.promiseForObject)(results, () => { - /* noop */ - }).finally(() => { + return (0, _promiseForObject.promiseForObject)(results).finally(() => { throw error; }); } throw error; - } - // If there are no promises, we can just return the object and any incrementalDataRecords + } // If there are no promises, we can just return the object + if (!containsPromise) { - return graphqlWrappedResult; - } - // Otherwise, results is a map from field name to the result of resolving that + return results; + } // Otherwise, results is a map from field name to the result of resolving that // field, which is possibly a promise. Return a promise that will return this // same map, but with any promises replaced with the values they resolved to. - return (0, _promiseForObject.promiseForObject)(results, resolved => [resolved, graphqlWrappedResult[1]]); -} -function toNodes(fieldGroup) { - return fieldGroup.map(fieldDetails => fieldDetails.node); + + return (0, _promiseForObject.promiseForObject)(results); } /** * Implements the "Executing fields" section of the spec @@ -24407,49 +41049,51 @@ function toNodes(fieldGroup) { * calling its resolve function, then calls completeValue to complete promises, * serialize scalars, or execute the sub-selection-set for objects. */ -function executeField(exeContext, parentType, source, fieldGroup, path, incrementalContext, deferMap) { + +function executeField(exeContext, parentType, source, fieldNodes, path) { var _fieldDef$resolve; - const fieldName = fieldGroup[0].node.name.value; - const fieldDef = exeContext.schema.getField(parentType, fieldName); + const fieldDef = getFieldDef(exeContext.schema, parentType, fieldNodes[0]); if (!fieldDef) { return; } const returnType = fieldDef.type; const resolveFn = (_fieldDef$resolve = fieldDef.resolve) !== null && _fieldDef$resolve !== void 0 ? _fieldDef$resolve : exeContext.fieldResolver; - const info = buildResolveInfo(exeContext, fieldDef, toNodes(fieldGroup), parentType, path); - // Get the resolve function, regardless of if its result is normal or abrupt (error). + const info = buildResolveInfo(exeContext, fieldDef, fieldNodes, parentType, path); // Get the resolve function, regardless of if its result is normal or abrupt (error). + try { // Build a JS object of arguments from the field.arguments AST, using the // variables scope to fulfill any variable references. // TODO: find a way to memoize, in case this field is within a List type. - const args = (0, _values.getArgumentValues)(fieldDef, fieldGroup[0].node, exeContext.variableValues); - // The resolve function's optional third argument is a context value that + const args = (0, _values.getArgumentValues)(fieldDef, fieldNodes[0], exeContext.variableValues); // The resolve function's optional third argument is a context value that // is provided to every resolve function within an execution. It is commonly // used to represent an authenticated user, or request-specific caches. + const contextValue = exeContext.contextValue; const result = resolveFn(source, args, contextValue, info); + let completed; if ((0, _isPromise.isPromise)(result)) { - return completePromisedValue(exeContext, returnType, fieldGroup, info, path, result, incrementalContext, deferMap); + completed = result.then(resolved => completeValue(exeContext, returnType, fieldNodes, info, path, resolved)); + } else { + completed = completeValue(exeContext, returnType, fieldNodes, info, path, result); } - const completed = completeValue(exeContext, returnType, fieldGroup, info, path, result, incrementalContext, deferMap); if ((0, _isPromise.isPromise)(completed)) { // Note: we don't rely on a `catch` method, but we do expect "thenable" // to take a second callback for the error case. return completed.then(undefined, rawError => { - handleFieldError(rawError, exeContext, returnType, fieldGroup, path, incrementalContext); - return [null, undefined]; + const error = (0, _locatedError.locatedError)(rawError, fieldNodes, (0, _Path.pathToArray)(path)); + return handleFieldError(error, returnType, exeContext); }); } return completed; } catch (rawError) { - handleFieldError(rawError, exeContext, returnType, fieldGroup, path, incrementalContext); - return [null, undefined]; + const error = (0, _locatedError.locatedError)(rawError, fieldNodes, (0, _Path.pathToArray)(path)); + return handleFieldError(error, returnType, exeContext); } } /** - * TODO: consider no longer exporting this function * @internal */ + function buildResolveInfo(exeContext, fieldDef, fieldNodes, parentType, path) { // The resolve function's optional fourth argument is a collection of // information about the current execution state. @@ -24466,22 +41110,16 @@ function buildResolveInfo(exeContext, fieldDef, fieldNodes, parentType, path) { variableValues: exeContext.variableValues }; } -function handleFieldError(rawError, exeContext, returnType, fieldGroup, path, incrementalContext) { - const error = (0, _locatedError.locatedError)(rawError, toNodes(fieldGroup), (0, _Path.pathToArray)(path)); +function handleFieldError(error, returnType, exeContext) { // If the field type is non-nullable, then it is resolved without any // protection from errors, however it still properly locates the error. if ((0, _definition.isNonNullType)(returnType)) { throw error; - } - // Otherwise, error protection is applied, logging the error and resolving + } // Otherwise, error protection is applied, logging the error and resolving // a null value for this field if one is encountered. - const context = incrementalContext !== null && incrementalContext !== void 0 ? incrementalContext : exeContext; - let errors = context.errors; - if (errors === undefined) { - errors = []; - context.errors = errors; - } - errors.push(error); + + exeContext.errors.push(error); + return null; } /** * Implements the instructions for completeValue as defined in the @@ -24504,271 +41142,94 @@ function handleFieldError(rawError, exeContext, returnType, fieldGroup, path, in * Otherwise, the field type expects a sub-selection set, and will complete the * value by executing all sub-selections. */ -function completeValue(exeContext, returnType, fieldGroup, info, path, result, incrementalContext, deferMap) { + +function completeValue(exeContext, returnType, fieldNodes, info, path, result) { // If result is an Error, throw a located error. if (result instanceof Error) { throw result; - } - // If field type is NonNull, complete for inner type, and throw field error + } // If field type is NonNull, complete for inner type, and throw field error // if result is null. + if ((0, _definition.isNonNullType)(returnType)) { - const completed = completeValue(exeContext, returnType.ofType, fieldGroup, info, path, result, incrementalContext, deferMap); - if (completed[0] === null) { + const completed = completeValue(exeContext, returnType.ofType, fieldNodes, info, path, result); + if (completed === null) { throw new Error(`Cannot return null for non-nullable field ${info.parentType.name}.${info.fieldName}.`); } return completed; - } - // If result value is null or undefined then return null. + } // If result value is null or undefined then return null. + if (result == null) { - return [null, undefined]; - } - // If field type is List, complete each item in the list with the inner type + return null; + } // If field type is List, complete each item in the list with the inner type + if ((0, _definition.isListType)(returnType)) { - return completeListValue(exeContext, returnType, fieldGroup, info, path, result, incrementalContext, deferMap); - } - // If field type is a leaf type, Scalar or Enum, serialize to a valid value, + return completeListValue(exeContext, returnType, fieldNodes, info, path, result); + } // If field type is a leaf type, Scalar or Enum, serialize to a valid value, // returning null if serialization is not possible. + if ((0, _definition.isLeafType)(returnType)) { - return [completeLeafValue(returnType, result), undefined]; - } - // If field type is an abstract type, Interface or Union, determine the + return completeLeafValue(returnType, result); + } // If field type is an abstract type, Interface or Union, determine the // runtime Object type and complete for that type. + if ((0, _definition.isAbstractType)(returnType)) { - return completeAbstractValue(exeContext, returnType, fieldGroup, info, path, result, incrementalContext, deferMap); - } - // If field type is Object, execute and complete all sub-selections. + return completeAbstractValue(exeContext, returnType, fieldNodes, info, path, result); + } // If field type is Object, execute and complete all sub-selections. + if ((0, _definition.isObjectType)(returnType)) { - return completeObjectValue(exeContext, returnType, fieldGroup, info, path, result, incrementalContext, deferMap); + return completeObjectValue(exeContext, returnType, fieldNodes, info, path, result); } /* c8 ignore next 6 */ // Not reachable, all possible output types have been considered. + false || (0, _invariant.invariant)(false, 'Cannot complete value of unexpected output type: ' + (0, _inspect.inspect)(returnType)); } -async function completePromisedValue(exeContext, returnType, fieldGroup, info, path, result, incrementalContext, deferMap) { - try { - const resolved = await result; - let completed = completeValue(exeContext, returnType, fieldGroup, info, path, resolved, incrementalContext, deferMap); - if ((0, _isPromise.isPromise)(completed)) { - completed = await completed; - } - return completed; - } catch (rawError) { - handleFieldError(rawError, exeContext, returnType, fieldGroup, path, incrementalContext); - return [null, undefined]; - } -} -/** - * Returns an object containing info for streaming if a field should be - * streamed based on the experimental flag, stream directive present and - * not disabled by the "if" argument. - */ -function getStreamUsage(exeContext, fieldGroup, path) { - // do not stream inner lists of multi-dimensional lists - if (typeof path.key === 'number') { - return; - } - // TODO: add test for this case (a streamed list nested under a list). - /* c8 ignore next 7 */ - if (fieldGroup._streamUsage !== undefined) { - return fieldGroup._streamUsage; - } - // validation only allows equivalent streams on multiple fields, so it is - // safe to only check the first fieldNode for the stream directive - const stream = (0, _values.getDirectiveValues)(_directives.GraphQLStreamDirective, fieldGroup[0].node, exeContext.variableValues); - if (!stream) { - return; - } - if (stream.if === false) { - return; - } - typeof stream.initialCount === 'number' || (0, _invariant.invariant)(false, 'initialCount must be a number'); - stream.initialCount >= 0 || (0, _invariant.invariant)(false, 'initialCount must be a positive integer'); - exeContext.operation.operation !== _ast.OperationTypeNode.SUBSCRIPTION || (0, _invariant.invariant)(false, '`@stream` directive not supported on subscription operations. Disable `@stream` by setting the `if` argument to `false`.'); - const streamedFieldGroup = fieldGroup.map(fieldDetails => ({ - node: fieldDetails.node, - deferUsage: undefined - })); - const streamUsage = { - initialCount: stream.initialCount, - label: typeof stream.label === 'string' ? stream.label : undefined, - fieldGroup: streamedFieldGroup - }; - fieldGroup._streamUsage = streamUsage; - return streamUsage; -} -/** - * Complete a async iterator value by completing the result and calling - * recursively until all the results are completed. - */ -async function completeAsyncIteratorValue(exeContext, itemType, fieldGroup, info, path, asyncIterator, incrementalContext, deferMap) { - let containsPromise = false; - const completedResults = []; - const graphqlWrappedResult = [completedResults, undefined]; - let index = 0; - const streamUsage = getStreamUsage(exeContext, fieldGroup, path); - const earlyReturn = asyncIterator.return === undefined ? undefined : asyncIterator.return.bind(asyncIterator); - try { - // eslint-disable-next-line no-constant-condition - while (true) { - if (streamUsage && index >= streamUsage.initialCount) { - const streamItemQueue = buildAsyncStreamItemQueue(index, path, asyncIterator, exeContext, streamUsage.fieldGroup, info, itemType); - let streamRecord; - if (earlyReturn === undefined) { - streamRecord = { - label: streamUsage.label, - path, - streamItemQueue - }; - } else { - streamRecord = { - label: streamUsage.label, - path, - earlyReturn, - streamItemQueue - }; - if (exeContext.cancellableStreams === undefined) { - exeContext.cancellableStreams = new Set(); - } - exeContext.cancellableStreams.add(streamRecord); - } - addIncrementalDataRecords(graphqlWrappedResult, [streamRecord]); - break; - } - const itemPath = (0, _Path.addPath)(path, index, undefined); - let iteration; - try { - // eslint-disable-next-line no-await-in-loop - iteration = await asyncIterator.next(); - } catch (rawError) { - throw (0, _locatedError.locatedError)(rawError, toNodes(fieldGroup), (0, _Path.pathToArray)(path)); - } - // TODO: add test case for stream returning done before initialCount - /* c8 ignore next 3 */ - if (iteration.done) { - break; - } - const item = iteration.value; - // TODO: add tests for stream backed by asyncIterator that returns a promise - /* c8 ignore start */ - if ((0, _isPromise.isPromise)(item)) { - completedResults.push(completePromisedListItemValue(item, graphqlWrappedResult, exeContext, itemType, fieldGroup, info, itemPath, incrementalContext, deferMap)); - containsPromise = true; - } else if ( /* c8 ignore stop */ - completeListItemValue(item, completedResults, graphqlWrappedResult, exeContext, itemType, fieldGroup, info, itemPath, incrementalContext, deferMap) - // TODO: add tests for stream backed by asyncIterator that completes to a promise - /* c8 ignore start */) { - containsPromise = true; - } - /* c8 ignore stop */ - index++; - } - } catch (error) { - if (earlyReturn !== undefined) { - earlyReturn().catch(() => { - /* c8 ignore next 1 */ - // ignore error - }); - } - throw error; - } - return containsPromise ? /* c8 ignore start */Promise.all(completedResults).then(resolved => [resolved, graphqlWrappedResult[1]]) : /* c8 ignore stop */graphqlWrappedResult; -} /** * Complete a list value by completing each item in the list with the * inner type */ -function completeListValue(exeContext, returnType, fieldGroup, info, path, result, incrementalContext, deferMap) { - const itemType = returnType.ofType; - if ((0, _isAsyncIterable.isAsyncIterable)(result)) { - const asyncIterator = result[Symbol.asyncIterator](); - return completeAsyncIteratorValue(exeContext, itemType, fieldGroup, info, path, asyncIterator, incrementalContext, deferMap); - } + +function completeListValue(exeContext, returnType, fieldNodes, info, path, result) { if (!(0, _isIterableObject.isIterableObject)(result)) { throw new _GraphQLError.GraphQLError(`Expected Iterable, but did not find one for field "${info.parentType.name}.${info.fieldName}".`); - } - return completeIterableValue(exeContext, itemType, fieldGroup, info, path, result, incrementalContext, deferMap); -} -function completeIterableValue(exeContext, itemType, fieldGroup, info, path, items, incrementalContext, deferMap) { - // This is specified as a simple map, however we're optimizing the path + } // This is specified as a simple map, however we're optimizing the path // where the list contains no Promises by avoiding creating another Promise. + + const itemType = returnType.ofType; let containsPromise = false; - const completedResults = []; - const graphqlWrappedResult = [completedResults, undefined]; - let index = 0; - const streamUsage = getStreamUsage(exeContext, fieldGroup, path); - const iterator = items[Symbol.iterator](); - let iteration = iterator.next(); - while (!iteration.done) { - const item = iteration.value; - if (streamUsage && index >= streamUsage.initialCount) { - const syncStreamRecord = { - label: streamUsage.label, - path, - streamItemQueue: buildSyncStreamItemQueue(item, index, path, iterator, exeContext, streamUsage.fieldGroup, info, itemType) - }; - addIncrementalDataRecords(graphqlWrappedResult, [syncStreamRecord]); - break; - } + const completedResults = Array.from(result, (item, index) => { // No need to modify the info object containing the path, // since from here on it is not ever accessed by resolver functions. const itemPath = (0, _Path.addPath)(path, index, undefined); - if ((0, _isPromise.isPromise)(item)) { - completedResults.push(completePromisedListItemValue(item, graphqlWrappedResult, exeContext, itemType, fieldGroup, info, itemPath, incrementalContext, deferMap)); - containsPromise = true; - } else if (completeListItemValue(item, completedResults, graphqlWrappedResult, exeContext, itemType, fieldGroup, info, itemPath, incrementalContext, deferMap)) { - containsPromise = true; + try { + let completedItem; + if ((0, _isPromise.isPromise)(item)) { + completedItem = item.then(resolved => completeValue(exeContext, itemType, fieldNodes, info, itemPath, resolved)); + } else { + completedItem = completeValue(exeContext, itemType, fieldNodes, info, itemPath, item); + } + if ((0, _isPromise.isPromise)(completedItem)) { + containsPromise = true; // Note: we don't rely on a `catch` method, but we do expect "thenable" + // to take a second callback for the error case. + + return completedItem.then(undefined, rawError => { + const error = (0, _locatedError.locatedError)(rawError, fieldNodes, (0, _Path.pathToArray)(itemPath)); + return handleFieldError(error, itemType, exeContext); + }); + } + return completedItem; + } catch (rawError) { + const error = (0, _locatedError.locatedError)(rawError, fieldNodes, (0, _Path.pathToArray)(itemPath)); + return handleFieldError(error, itemType, exeContext); } - index++; - iteration = iterator.next(); - } - return containsPromise ? Promise.all(completedResults).then(resolved => [resolved, graphqlWrappedResult[1]]) : graphqlWrappedResult; -} -/** - * Complete a list item value by adding it to the completed results. - * - * Returns true if the value is a Promise. - */ -function completeListItemValue(item, completedResults, parent, exeContext, itemType, fieldGroup, info, itemPath, incrementalContext, deferMap) { - try { - const completedItem = completeValue(exeContext, itemType, fieldGroup, info, itemPath, item, incrementalContext, deferMap); - if ((0, _isPromise.isPromise)(completedItem)) { - // Note: we don't rely on a `catch` method, but we do expect "thenable" - // to take a second callback for the error case. - completedResults.push(completedItem.then(resolved => { - addIncrementalDataRecords(parent, resolved[1]); - return resolved[0]; - }, rawError => { - handleFieldError(rawError, exeContext, itemType, fieldGroup, itemPath, incrementalContext); - return null; - })); - return true; - } - completedResults.push(completedItem[0]); - addIncrementalDataRecords(parent, completedItem[1]); - } catch (rawError) { - handleFieldError(rawError, exeContext, itemType, fieldGroup, itemPath, incrementalContext); - completedResults.push(null); - } - return false; -} -async function completePromisedListItemValue(item, parent, exeContext, itemType, fieldGroup, info, itemPath, incrementalContext, deferMap) { - try { - const resolved = await item; - let completed = completeValue(exeContext, itemType, fieldGroup, info, itemPath, resolved, incrementalContext, deferMap); - if ((0, _isPromise.isPromise)(completed)) { - completed = await completed; - } - addIncrementalDataRecords(parent, completed[1]); - return completed[0]; - } catch (rawError) { - handleFieldError(rawError, exeContext, itemType, fieldGroup, itemPath, incrementalContext); - return null; - } + }); + return containsPromise ? Promise.all(completedResults) : completedResults; } /** * Complete a Scalar or Enum by serializing to a valid value, returning * null if serialization is not possible. */ + function completeLeafValue(returnType, result) { const serializedResult = returnType.serialize(result); if (serializedResult == null) { @@ -24780,24 +41241,23 @@ function completeLeafValue(returnType, result) { * Complete a value of an abstract type by determining the runtime object type * of that value, then complete the value for that type. */ -function completeAbstractValue(exeContext, returnType, fieldGroup, info, path, result, incrementalContext, deferMap) { + +function completeAbstractValue(exeContext, returnType, fieldNodes, info, path, result) { var _returnType$resolveTy; const resolveTypeFn = (_returnType$resolveTy = returnType.resolveType) !== null && _returnType$resolveTy !== void 0 ? _returnType$resolveTy : exeContext.typeResolver; const contextValue = exeContext.contextValue; const runtimeType = resolveTypeFn(result, contextValue, info, returnType); if ((0, _isPromise.isPromise)(runtimeType)) { - return runtimeType.then(resolvedRuntimeType => completeObjectValue(exeContext, ensureValidRuntimeType(resolvedRuntimeType, exeContext, returnType, fieldGroup, info, result), fieldGroup, info, path, result, incrementalContext, deferMap)); + return runtimeType.then(resolvedRuntimeType => completeObjectValue(exeContext, ensureValidRuntimeType(resolvedRuntimeType, exeContext, returnType, fieldNodes, info, result), fieldNodes, info, path, result)); } - return completeObjectValue(exeContext, ensureValidRuntimeType(runtimeType, exeContext, returnType, fieldGroup, info, result), fieldGroup, info, path, result, incrementalContext, deferMap); + return completeObjectValue(exeContext, ensureValidRuntimeType(runtimeType, exeContext, returnType, fieldNodes, info, result), fieldNodes, info, path, result); } -function ensureValidRuntimeType(runtimeTypeName, exeContext, returnType, fieldGroup, info, result) { +function ensureValidRuntimeType(runtimeTypeName, exeContext, returnType, fieldNodes, info, result) { if (runtimeTypeName == null) { - throw new _GraphQLError.GraphQLError(`Abstract type "${returnType.name}" must resolve to an Object type at runtime for field "${info.parentType.name}.${info.fieldName}". Either the "${returnType.name}" type should provide a "resolveType" function or each possible type should provide an "isTypeOf" function.`, { - nodes: toNodes(fieldGroup) - }); - } - // releases before 16.0.0 supported returning `GraphQLObjectType` from `resolveType` + throw new _GraphQLError.GraphQLError(`Abstract type "${returnType.name}" must resolve to an Object type at runtime for field "${info.parentType.name}.${info.fieldName}". Either the "${returnType.name}" type should provide a "resolveType" function or each possible type should provide an "isTypeOf" function.`, fieldNodes); + } // releases before 16.0.0 supported returning `GraphQLObjectType` from `resolveType` // TODO: remove in 17.0.0 release + if ((0, _definition.isObjectType)(runtimeTypeName)) { throw new _GraphQLError.GraphQLError('Support for returning GraphQLObjectType from resolveType was removed in graphql-js@16.0.0 please return type name instead.'); } @@ -24807,17 +41267,17 @@ function ensureValidRuntimeType(runtimeTypeName, exeContext, returnType, fieldGr const runtimeType = exeContext.schema.getType(runtimeTypeName); if (runtimeType == null) { throw new _GraphQLError.GraphQLError(`Abstract type "${returnType.name}" was resolved to a type "${runtimeTypeName}" that does not exist inside the schema.`, { - nodes: toNodes(fieldGroup) + nodes: fieldNodes }); } if (!(0, _definition.isObjectType)(runtimeType)) { throw new _GraphQLError.GraphQLError(`Abstract type "${returnType.name}" was resolved to a non-object type "${runtimeTypeName}".`, { - nodes: toNodes(fieldGroup) + nodes: fieldNodes }); } if (!exeContext.schema.isSubType(returnType, runtimeType)) { throw new _GraphQLError.GraphQLError(`Runtime Object type "${runtimeType.name}" is not a possible type for "${returnType.name}".`, { - nodes: toNodes(fieldGroup) + nodes: fieldNodes }); } return runtimeType; @@ -24825,92 +41285,34 @@ function ensureValidRuntimeType(runtimeTypeName, exeContext, returnType, fieldGr /** * Complete an Object value by executing all sub-selections. */ -function completeObjectValue(exeContext, returnType, fieldGroup, info, path, result, incrementalContext, deferMap) { - // If there is an isTypeOf predicate function, call it with the + +function completeObjectValue(exeContext, returnType, fieldNodes, info, path, result) { + // Collect sub-fields to execute to complete this value. + const subFieldNodes = collectSubfields(exeContext, returnType, fieldNodes); // If there is an isTypeOf predicate function, call it with the // current result. If isTypeOf returns false, then raise an error rather // than continuing execution. + if (returnType.isTypeOf) { const isTypeOf = returnType.isTypeOf(result, exeContext.contextValue, info); if ((0, _isPromise.isPromise)(isTypeOf)) { return isTypeOf.then(resolvedIsTypeOf => { if (!resolvedIsTypeOf) { - throw invalidReturnTypeError(returnType, result, fieldGroup); + throw invalidReturnTypeError(returnType, result, fieldNodes); } - return collectAndExecuteSubfields(exeContext, returnType, fieldGroup, path, result, incrementalContext, deferMap); + return executeFields(exeContext, returnType, result, path, subFieldNodes); }); } if (!isTypeOf) { - throw invalidReturnTypeError(returnType, result, fieldGroup); + throw invalidReturnTypeError(returnType, result, fieldNodes); } } - return collectAndExecuteSubfields(exeContext, returnType, fieldGroup, path, result, incrementalContext, deferMap); + return executeFields(exeContext, returnType, result, path, subFieldNodes); } -function invalidReturnTypeError(returnType, result, fieldGroup) { +function invalidReturnTypeError(returnType, result, fieldNodes) { return new _GraphQLError.GraphQLError(`Expected value of type "${returnType.name}" but got: ${(0, _inspect.inspect)(result)}.`, { - nodes: toNodes(fieldGroup) + nodes: fieldNodes }); } -/** - * Instantiates new DeferredFragmentRecords for the given path within an - * incremental data record, returning an updated map of DeferUsage - * objects to DeferredFragmentRecords. - * - * Note: As defer directives may be used with operations returning lists, - * a DeferUsage object may correspond to many DeferredFragmentRecords. - * - * DeferredFragmentRecord creation includes the following steps: - * 1. The new DeferredFragmentRecord is instantiated at the given path. - * 2. The parent result record is calculated from the given incremental data - * record. - * 3. The IncrementalPublisher is notified that a new DeferredFragmentRecord - * with the calculated parent has been added; the record will be released only - * after the parent has completed. - * - */ -function addNewDeferredFragments(newDeferUsages, newDeferMap, path) { - // For each new deferUsage object: - for (const newDeferUsage of newDeferUsages) { - const parentDeferUsage = newDeferUsage.parentDeferUsage; - const parent = parentDeferUsage === undefined ? undefined : deferredFragmentRecordFromDeferUsage(parentDeferUsage, newDeferMap); - // Instantiate the new record. - const deferredFragmentRecord = new _types.DeferredFragmentRecord(path, newDeferUsage.label, parent); - // Update the map. - newDeferMap.set(newDeferUsage, deferredFragmentRecord); - } - return newDeferMap; -} -function deferredFragmentRecordFromDeferUsage(deferUsage, deferMap) { - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion - return deferMap.get(deferUsage); -} -function collectAndExecuteSubfields(exeContext, returnType, fieldGroup, path, result, incrementalContext, deferMap) { - // Collect sub-fields to execute to complete this value. - const collectedSubfields = collectSubfields(exeContext, returnType, fieldGroup); - let groupedFieldSet = collectedSubfields.groupedFieldSet; - const newDeferUsages = collectedSubfields.newDeferUsages; - if (deferMap === undefined && newDeferUsages.length === 0) { - return executeFields(exeContext, returnType, result, path, groupedFieldSet, incrementalContext, undefined); - } - const subExecutionPlan = buildSubExecutionPlan(groupedFieldSet, incrementalContext === null || incrementalContext === void 0 ? void 0 : incrementalContext.deferUsageSet); - groupedFieldSet = subExecutionPlan.groupedFieldSet; - const newGroupedFieldSets = subExecutionPlan.newGroupedFieldSets; - const newDeferMap = addNewDeferredFragments(newDeferUsages, new Map(deferMap), path); - const subFields = executeFields(exeContext, returnType, result, path, groupedFieldSet, incrementalContext, newDeferMap); - if (newGroupedFieldSets.size > 0) { - const newPendingExecutionGroups = collectExecutionGroups(exeContext, returnType, result, path, incrementalContext === null || incrementalContext === void 0 ? void 0 : incrementalContext.deferUsageSet, newGroupedFieldSets, newDeferMap); - return withNewExecutionGroups(subFields, newPendingExecutionGroups); - } - return subFields; -} -function buildSubExecutionPlan(originalGroupedFieldSet, deferUsageSet) { - let executionPlan = originalGroupedFieldSet._executionPlan; - if (executionPlan !== undefined) { - return executionPlan; - } - executionPlan = (0, _buildExecutionPlan.buildExecutionPlan)(originalGroupedFieldSet, deferUsageSet); - originalGroupedFieldSet._executionPlan = executionPlan; - return executionPlan; -} /** * If a resolveType function is not given, then a default resolve behavior is * used which attempts two strategies: @@ -24921,12 +41323,13 @@ function buildSubExecutionPlan(originalGroupedFieldSet, deferUsageSet) { * Otherwise, test each possible type for the abstract type by calling * isTypeOf for the object being coerced, returning the first type that matches. */ + const defaultTypeResolver = function (value, contextValue, info, abstractType) { // First, look for `__typename`. if ((0, _isObjectLike.isObjectLike)(value) && typeof value.__typename === 'string') { return value.__typename; - } - // Otherwise, test each possible type. + } // Otherwise, test each possible type. + const possibleTypes = info.schema.getPossibleTypes(abstractType); const promisedIsTypeOfResults = []; for (let i = 0; i < possibleTypes.length; i++) { @@ -24968,340 +41371,27 @@ const defaultFieldResolver = function (source, args, contextValue, info) { } }; /** - * Implements the "Subscribe" algorithm described in the GraphQL specification. + * This method looks up the field on the given type definition. + * It has special casing for the three introspection fields, + * __schema, __type and __typename. __typename is special because + * it can always be queried as a field, even in situations where no + * other fields are allowed, like on a Union. __schema and __type + * could get automatically added to the query type, but that would + * require mutating type definitions, which would cause issues. * - * Returns a Promise which resolves to either an AsyncIterator (if successful) - * or an ExecutionResult (error). The promise will be rejected if the schema or - * other arguments to this function are invalid, or if the resolved event stream - * is not an async iterable. - * - * If the client-provided arguments to this function do not result in a - * compliant subscription, a GraphQL Response (ExecutionResult) with descriptive - * errors and no data will be returned. - * - * If the source stream could not be created due to faulty subscription resolver - * logic or underlying systems, the promise will resolve to a single - * ExecutionResult containing `errors` and no `data`. - * - * If the operation succeeded, the promise resolves to an AsyncIterator, which - * yields a stream of ExecutionResults representing the response stream. - * - * This function does not support incremental delivery (`@defer` and `@stream`). - * If an operation which would defer or stream data is executed with this - * function, a field error will be raised at the location of the `@defer` or - * `@stream` directive. - * - * Accepts an object with named arguments. + * @internal */ exports.defaultFieldResolver = defaultFieldResolver; -function subscribe(args) { - // If a valid execution context cannot be created due to incorrect arguments, - // a "Response" with only errors is returned. - const exeContext = buildExecutionContext(args); - // Return early errors if execution context failed. - if (!('schema' in exeContext)) { - return { - errors: exeContext - }; +function getFieldDef(schema, parentType, fieldNode) { + const fieldName = fieldNode.name.value; + if (fieldName === _introspection.SchemaMetaFieldDef.name && schema.getQueryType() === parentType) { + return _introspection.SchemaMetaFieldDef; + } else if (fieldName === _introspection.TypeMetaFieldDef.name && schema.getQueryType() === parentType) { + return _introspection.TypeMetaFieldDef; + } else if (fieldName === _introspection.TypeNameMetaFieldDef.name) { + return _introspection.TypeNameMetaFieldDef; } - const resultOrStream = createSourceEventStreamImpl(exeContext); - if ((0, _isPromise.isPromise)(resultOrStream)) { - return resultOrStream.then(resolvedResultOrStream => mapSourceToResponse(exeContext, resolvedResultOrStream)); - } - return mapSourceToResponse(exeContext, resultOrStream); -} -function mapSourceToResponse(exeContext, resultOrStream) { - if (!(0, _isAsyncIterable.isAsyncIterable)(resultOrStream)) { - return resultOrStream; - } - // For each payload yielded from a subscription, map it over the normal - // GraphQL `execute` function, with `payload` as the rootValue. - // This implements the "MapSourceToResponseEvent" algorithm described in - // the GraphQL specification. The `execute` function provides the - // "ExecuteSubscriptionEvent" algorithm, as it is nearly identical to the - // "ExecuteQuery" algorithm, for which `execute` is also used. - return (0, _mapAsyncIterable.mapAsyncIterable)(resultOrStream, payload => executeOperation(buildPerEventExecutionContext(exeContext, payload))); -} -/** - * Implements the "CreateSourceEventStream" algorithm described in the - * GraphQL specification, resolving the subscription source event stream. - * - * Returns a Promise which resolves to either an AsyncIterable (if successful) - * or an ExecutionResult (error). The promise will be rejected if the schema or - * other arguments to this function are invalid, or if the resolved event stream - * is not an async iterable. - * - * If the client-provided arguments to this function do not result in a - * compliant subscription, a GraphQL Response (ExecutionResult) with - * descriptive errors and no data will be returned. - * - * If the the source stream could not be created due to faulty subscription - * resolver logic or underlying systems, the promise will resolve to a single - * ExecutionResult containing `errors` and no `data`. - * - * If the operation succeeded, the promise resolves to the AsyncIterable for the - * event stream returned by the resolver. - * - * A Source Event Stream represents a sequence of events, each of which triggers - * a GraphQL execution for that event. - * - * This may be useful when hosting the stateful subscription service in a - * different process or machine than the stateless GraphQL execution engine, - * or otherwise separating these two steps. For more on this, see the - * "Supporting Subscriptions at Scale" information in the GraphQL specification. - */ -function createSourceEventStream(args) { - // If a valid execution context cannot be created due to incorrect arguments, - // a "Response" with only errors is returned. - const exeContext = buildExecutionContext(args); - // Return early errors if execution context failed. - if (!('schema' in exeContext)) { - return { - errors: exeContext - }; - } - return createSourceEventStreamImpl(exeContext); -} -function createSourceEventStreamImpl(exeContext) { - try { - const eventStream = executeSubscription(exeContext); - if ((0, _isPromise.isPromise)(eventStream)) { - return eventStream.then(undefined, error => ({ - errors: [error] - })); - } - return eventStream; - } catch (error) { - return { - errors: [error] - }; - } -} -function executeSubscription(exeContext) { - const { - schema, - fragments, - operation, - variableValues, - rootValue - } = exeContext; - const rootType = schema.getSubscriptionType(); - if (rootType == null) { - throw new _GraphQLError.GraphQLError('Schema is not configured to execute subscription operation.', { - nodes: operation - }); - } - const { - groupedFieldSet - } = (0, _collectFields.collectFields)(schema, fragments, variableValues, rootType, operation); - const firstRootField = groupedFieldSet.entries().next().value; - const [responseName, fieldGroup] = firstRootField; - const fieldName = fieldGroup[0].node.name.value; - const fieldDef = schema.getField(rootType, fieldName); - const fieldNodes = fieldGroup.map(fieldDetails => fieldDetails.node); - if (!fieldDef) { - throw new _GraphQLError.GraphQLError(`The subscription field "${fieldName}" is not defined.`, { - nodes: fieldNodes - }); - } - const path = (0, _Path.addPath)(undefined, responseName, rootType.name); - const info = buildResolveInfo(exeContext, fieldDef, fieldNodes, rootType, path); - try { - var _fieldDef$subscribe; - // Implements the "ResolveFieldEventStream" algorithm from GraphQL specification. - // It differs from "ResolveFieldValue" due to providing a different `resolveFn`. - // Build a JS object of arguments from the field.arguments AST, using the - // variables scope to fulfill any variable references. - const args = (0, _values.getArgumentValues)(fieldDef, fieldNodes[0], variableValues); - // The resolve function's optional third argument is a context value that - // is provided to every resolve function within an execution. It is commonly - // used to represent an authenticated user, or request-specific caches. - const contextValue = exeContext.contextValue; - // Call the `subscribe()` resolver or the default resolver to produce an - // AsyncIterable yielding raw payloads. - const resolveFn = (_fieldDef$subscribe = fieldDef.subscribe) !== null && _fieldDef$subscribe !== void 0 ? _fieldDef$subscribe : exeContext.subscribeFieldResolver; - const result = resolveFn(rootValue, args, contextValue, info); - if ((0, _isPromise.isPromise)(result)) { - return result.then(assertEventStream).then(undefined, error => { - throw (0, _locatedError.locatedError)(error, fieldNodes, (0, _Path.pathToArray)(path)); - }); - } - return assertEventStream(result); - } catch (error) { - throw (0, _locatedError.locatedError)(error, fieldNodes, (0, _Path.pathToArray)(path)); - } -} -function assertEventStream(result) { - if (result instanceof Error) { - throw result; - } - // Assert field returned an event stream, otherwise yield an error. - if (!(0, _isAsyncIterable.isAsyncIterable)(result)) { - throw new _GraphQLError.GraphQLError('Subscription field must return Async Iterable. ' + `Received: ${(0, _inspect.inspect)(result)}.`); - } - return result; -} -function collectExecutionGroups(exeContext, parentType, sourceValue, path, parentDeferUsages, newGroupedFieldSets, deferMap) { - const newPendingExecutionGroups = []; - for (const [deferUsageSet, groupedFieldSet] of newGroupedFieldSets) { - const deferredFragmentRecords = getDeferredFragmentRecords(deferUsageSet, deferMap); - const pendingExecutionGroup = { - deferredFragmentRecords, - result: undefined - }; - const executor = () => executeExecutionGroup(pendingExecutionGroup, exeContext, parentType, sourceValue, path, groupedFieldSet, { - errors: undefined, - deferUsageSet - }, deferMap); - if (exeContext.enableEarlyExecution) { - pendingExecutionGroup.result = new _BoxedPromiseOrValue.BoxedPromiseOrValue(shouldDefer(parentDeferUsages, deferUsageSet) ? Promise.resolve().then(executor) : executor()); - } else { - pendingExecutionGroup.result = () => new _BoxedPromiseOrValue.BoxedPromiseOrValue(executor()); - } - newPendingExecutionGroups.push(pendingExecutionGroup); - } - return newPendingExecutionGroups; -} -function shouldDefer(parentDeferUsages, deferUsages) { - // If we have a new child defer usage, defer. - // Otherwise, this defer usage was already deferred when it was initially - // encountered, and is now in the midst of executing early, so the new - // deferred grouped fields set can be executed immediately. - return parentDeferUsages === undefined || !Array.from(deferUsages).every(deferUsage => parentDeferUsages.has(deferUsage)); -} -function executeExecutionGroup(pendingExecutionGroup, exeContext, parentType, sourceValue, path, groupedFieldSet, incrementalContext, deferMap) { - let result; - try { - result = executeFields(exeContext, parentType, sourceValue, path, groupedFieldSet, incrementalContext, deferMap); - } catch (error) { - return { - pendingExecutionGroup, - path: (0, _Path.pathToArray)(path), - errors: withError(incrementalContext.errors, error) - }; - } - if ((0, _isPromise.isPromise)(result)) { - return result.then(resolved => buildCompletedExecutionGroup(incrementalContext.errors, pendingExecutionGroup, path, resolved), error => ({ - pendingExecutionGroup, - path: (0, _Path.pathToArray)(path), - errors: withError(incrementalContext.errors, error) - })); - } - return buildCompletedExecutionGroup(incrementalContext.errors, pendingExecutionGroup, path, result); -} -function buildCompletedExecutionGroup(errors, pendingExecutionGroup, path, result) { - return { - pendingExecutionGroup, - path: (0, _Path.pathToArray)(path), - result: errors === undefined ? { - data: result[0] - } : { - data: result[0], - errors - }, - incrementalDataRecords: result[1] - }; -} -function getDeferredFragmentRecords(deferUsages, deferMap) { - return Array.from(deferUsages).map(deferUsage => deferredFragmentRecordFromDeferUsage(deferUsage, deferMap)); -} -function buildSyncStreamItemQueue(initialItem, initialIndex, streamPath, iterator, exeContext, fieldGroup, info, itemType) { - const streamItemQueue = []; - const enableEarlyExecution = exeContext.enableEarlyExecution; - const firstExecutor = () => { - const initialPath = (0, _Path.addPath)(streamPath, initialIndex, undefined); - const firstStreamItem = new _BoxedPromiseOrValue.BoxedPromiseOrValue(completeStreamItem(initialPath, initialItem, exeContext, { - errors: undefined - }, fieldGroup, info, itemType)); - let iteration = iterator.next(); - let currentIndex = initialIndex + 1; - let currentStreamItem = firstStreamItem; - while (!iteration.done) { - // TODO: add test case for early sync termination - /* c8 ignore next 6 */ - if (currentStreamItem instanceof _BoxedPromiseOrValue.BoxedPromiseOrValue) { - const result = currentStreamItem.value; - if (!(0, _isPromise.isPromise)(result) && result.errors !== undefined) { - break; - } - } - const itemPath = (0, _Path.addPath)(streamPath, currentIndex, undefined); - const value = iteration.value; - const currentExecutor = () => completeStreamItem(itemPath, value, exeContext, { - errors: undefined - }, fieldGroup, info, itemType); - currentStreamItem = enableEarlyExecution ? new _BoxedPromiseOrValue.BoxedPromiseOrValue(currentExecutor()) : () => new _BoxedPromiseOrValue.BoxedPromiseOrValue(currentExecutor()); - streamItemQueue.push(currentStreamItem); - iteration = iterator.next(); - currentIndex = initialIndex + 1; - } - streamItemQueue.push(new _BoxedPromiseOrValue.BoxedPromiseOrValue({})); - return firstStreamItem.value; - }; - streamItemQueue.push(enableEarlyExecution ? new _BoxedPromiseOrValue.BoxedPromiseOrValue(Promise.resolve().then(firstExecutor)) : () => new _BoxedPromiseOrValue.BoxedPromiseOrValue(firstExecutor())); - return streamItemQueue; -} -function buildAsyncStreamItemQueue(initialIndex, streamPath, asyncIterator, exeContext, fieldGroup, info, itemType) { - const streamItemQueue = []; - const executor = () => getNextAsyncStreamItemResult(streamItemQueue, streamPath, initialIndex, asyncIterator, exeContext, fieldGroup, info, itemType); - streamItemQueue.push(exeContext.enableEarlyExecution ? new _BoxedPromiseOrValue.BoxedPromiseOrValue(executor()) : () => new _BoxedPromiseOrValue.BoxedPromiseOrValue(executor())); - return streamItemQueue; -} -async function getNextAsyncStreamItemResult(streamItemQueue, streamPath, index, asyncIterator, exeContext, fieldGroup, info, itemType) { - let iteration; - try { - iteration = await asyncIterator.next(); - } catch (error) { - return { - errors: [(0, _locatedError.locatedError)(error, toNodes(fieldGroup), (0, _Path.pathToArray)(streamPath))] - }; - } - if (iteration.done) { - return {}; - } - const itemPath = (0, _Path.addPath)(streamPath, index, undefined); - const result = completeStreamItem(itemPath, iteration.value, exeContext, { - errors: undefined - }, fieldGroup, info, itemType); - const executor = () => getNextAsyncStreamItemResult(streamItemQueue, streamPath, index + 1, asyncIterator, exeContext, fieldGroup, info, itemType); - streamItemQueue.push(exeContext.enableEarlyExecution ? new _BoxedPromiseOrValue.BoxedPromiseOrValue(executor()) : () => new _BoxedPromiseOrValue.BoxedPromiseOrValue(executor())); - return result; -} -function completeStreamItem(itemPath, item, exeContext, incrementalContext, fieldGroup, info, itemType) { - if ((0, _isPromise.isPromise)(item)) { - return completePromisedValue(exeContext, itemType, fieldGroup, info, itemPath, item, incrementalContext, new Map()).then(resolvedItem => buildStreamItemResult(incrementalContext.errors, resolvedItem), error => ({ - errors: withError(incrementalContext.errors, error) - })); - } - let result; - try { - try { - result = completeValue(exeContext, itemType, fieldGroup, info, itemPath, item, incrementalContext, new Map()); - } catch (rawError) { - handleFieldError(rawError, exeContext, itemType, fieldGroup, itemPath, incrementalContext); - result = [null, undefined]; - } - } catch (error) { - return { - errors: withError(incrementalContext.errors, error) - }; - } - if ((0, _isPromise.isPromise)(result)) { - return result.then(undefined, rawError => { - handleFieldError(rawError, exeContext, itemType, fieldGroup, itemPath, incrementalContext); - return [null, undefined]; - }).then(resolvedItem => buildStreamItemResult(incrementalContext.errors, resolvedItem), error => ({ - errors: withError(incrementalContext.errors, error) - })); - } - return buildStreamItemResult(incrementalContext.errors, result); -} -function buildStreamItemResult(errors, result) { - return { - item: result[0], - errors, - incrementalDataRecords: result[1] - }; + return parentType.getFields()[fieldName]; } /***/ }), @@ -25312,6 +41402,7 @@ function buildStreamItemResult(errors, result) { \*********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -25320,7 +41411,7 @@ Object.defineProperty(exports, "__esModule", ({ Object.defineProperty(exports, "createSourceEventStream", ({ enumerable: true, get: function () { - return _execute.createSourceEventStream; + return _subscribe.createSourceEventStream; } })); Object.defineProperty(exports, "defaultFieldResolver", ({ @@ -25347,12 +41438,6 @@ Object.defineProperty(exports, "executeSync", ({ return _execute.executeSync; } })); -Object.defineProperty(exports, "experimentalExecuteIncrementally", ({ - enumerable: true, - get: function () { - return _execute.experimentalExecuteIncrementally; - } -})); Object.defineProperty(exports, "getArgumentValues", ({ enumerable: true, get: function () { @@ -25380,32 +41465,34 @@ Object.defineProperty(exports, "responsePathAsArray", ({ Object.defineProperty(exports, "subscribe", ({ enumerable: true, get: function () { - return _execute.subscribe; + return _subscribe.subscribe; } })); var _Path = __webpack_require__(/*! ../jsutils/Path.mjs */ "../../../node_modules/graphql/jsutils/Path.mjs"); var _execute = __webpack_require__(/*! ./execute.mjs */ "../../../node_modules/graphql/execution/execute.mjs"); +var _subscribe = __webpack_require__(/*! ./subscribe.mjs */ "../../../node_modules/graphql/execution/subscribe.mjs"); var _values = __webpack_require__(/*! ./values.mjs */ "../../../node_modules/graphql/execution/values.mjs"); /***/ }), -/***/ "../../../node_modules/graphql/execution/mapAsyncIterable.mjs": +/***/ "../../../node_modules/graphql/execution/mapAsyncIterator.mjs": /*!********************************************************************!*\ - !*** ../../../node_modules/graphql/execution/mapAsyncIterable.mjs ***! + !*** ../../../node_modules/graphql/execution/mapAsyncIterator.mjs ***! \********************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.mapAsyncIterable = mapAsyncIterable; +exports.mapAsyncIterator = mapAsyncIterator; /** * Given an AsyncIterable and a callback function, return an AsyncIterator * which produces values mapped via calling the callback function. */ -function mapAsyncIterable(iterable, callback) { +function mapAsyncIterator(iterable, callback) { const iterator = iterable[Symbol.asyncIterator](); async function mapResult(result) { if (result.done) { @@ -25455,49 +41542,202 @@ function mapAsyncIterable(iterable, callback) { /***/ }), -/***/ "../../../node_modules/graphql/execution/types.mjs": -/*!*********************************************************!*\ - !*** ../../../node_modules/graphql/execution/types.mjs ***! - \*********************************************************/ -/***/ (function(__unused_webpack_module, exports) { +/***/ "../../../node_modules/graphql/execution/subscribe.mjs": +/*!*************************************************************!*\ + !*** ../../../node_modules/graphql/execution/subscribe.mjs ***! + \*************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.DeferredFragmentRecord = void 0; -exports.isCancellableStreamRecord = isCancellableStreamRecord; -exports.isCompletedExecutionGroup = isCompletedExecutionGroup; -exports.isDeferredFragmentRecord = isDeferredFragmentRecord; -exports.isFailedExecutionGroup = isFailedExecutionGroup; -exports.isPendingExecutionGroup = isPendingExecutionGroup; -function isPendingExecutionGroup(incrementalDataRecord) { - return 'deferredFragmentRecords' in incrementalDataRecord; +exports.createSourceEventStream = createSourceEventStream; +exports.subscribe = subscribe; +var _devAssert = __webpack_require__(/*! ../jsutils/devAssert.mjs */ "../../../node_modules/graphql/jsutils/devAssert.mjs"); +var _inspect = __webpack_require__(/*! ../jsutils/inspect.mjs */ "../../../node_modules/graphql/jsutils/inspect.mjs"); +var _isAsyncIterable = __webpack_require__(/*! ../jsutils/isAsyncIterable.mjs */ "../../../node_modules/graphql/jsutils/isAsyncIterable.mjs"); +var _Path = __webpack_require__(/*! ../jsutils/Path.mjs */ "../../../node_modules/graphql/jsutils/Path.mjs"); +var _GraphQLError = __webpack_require__(/*! ../error/GraphQLError.mjs */ "../../../node_modules/graphql/error/GraphQLError.mjs"); +var _locatedError = __webpack_require__(/*! ../error/locatedError.mjs */ "../../../node_modules/graphql/error/locatedError.mjs"); +var _collectFields = __webpack_require__(/*! ./collectFields.mjs */ "../../../node_modules/graphql/execution/collectFields.mjs"); +var _execute = __webpack_require__(/*! ./execute.mjs */ "../../../node_modules/graphql/execution/execute.mjs"); +var _mapAsyncIterator = __webpack_require__(/*! ./mapAsyncIterator.mjs */ "../../../node_modules/graphql/execution/mapAsyncIterator.mjs"); +var _values = __webpack_require__(/*! ./values.mjs */ "../../../node_modules/graphql/execution/values.mjs"); +/** + * Implements the "Subscribe" algorithm described in the GraphQL specification. + * + * Returns a Promise which resolves to either an AsyncIterator (if successful) + * or an ExecutionResult (error). The promise will be rejected if the schema or + * other arguments to this function are invalid, or if the resolved event stream + * is not an async iterable. + * + * If the client-provided arguments to this function do not result in a + * compliant subscription, a GraphQL Response (ExecutionResult) with + * descriptive errors and no data will be returned. + * + * If the source stream could not be created due to faulty subscription + * resolver logic or underlying systems, the promise will resolve to a single + * ExecutionResult containing `errors` and no `data`. + * + * If the operation succeeded, the promise resolves to an AsyncIterator, which + * yields a stream of ExecutionResults representing the response stream. + * + * Accepts either an object with named arguments, or individual arguments. + */ + +async function subscribe(args) { + // Temporary for v15 to v16 migration. Remove in v17 + arguments.length < 2 || (0, _devAssert.devAssert)(false, 'graphql@16 dropped long-deprecated support for positional arguments, please pass an object instead.'); + const resultOrStream = await createSourceEventStream(args); + if (!(0, _isAsyncIterable.isAsyncIterable)(resultOrStream)) { + return resultOrStream; + } // For each payload yielded from a subscription, map it over the normal + // GraphQL `execute` function, with `payload` as the rootValue. + // This implements the "MapSourceToResponseEvent" algorithm described in + // the GraphQL specification. The `execute` function provides the + // "ExecuteSubscriptionEvent" algorithm, as it is nearly identical to the + // "ExecuteQuery" algorithm, for which `execute` is also used. + + const mapSourceToResponse = payload => (0, _execute.execute)({ + ...args, + rootValue: payload + }); // Map every source value to a ExecutionResult value as described above. + + return (0, _mapAsyncIterator.mapAsyncIterator)(resultOrStream, mapSourceToResponse); } -function isCompletedExecutionGroup(subsequentResult) { - return 'pendingExecutionGroup' in subsequentResult; +function toNormalizedArgs(args) { + const firstArg = args[0]; + if (firstArg && 'document' in firstArg) { + return firstArg; + } + return { + schema: firstArg, + // FIXME: when underlying TS bug fixed, see https://github.com/microsoft/TypeScript/issues/31613 + document: args[1], + rootValue: args[2], + contextValue: args[3], + variableValues: args[4], + operationName: args[5], + subscribeFieldResolver: args[6] + }; } -function isFailedExecutionGroup(completedExecutionGroup) { - return completedExecutionGroup.errors !== undefined; -} -/** @internal */ -class DeferredFragmentRecord { - constructor(path, label, parent) { - this.path = path; - this.label = label; - this.parent = parent; - this.pendingExecutionGroups = new Set(); - this.successfulExecutionGroups = new Set(); - this.children = new Set(); +/** + * Implements the "CreateSourceEventStream" algorithm described in the + * GraphQL specification, resolving the subscription source event stream. + * + * Returns a Promise which resolves to either an AsyncIterable (if successful) + * or an ExecutionResult (error). The promise will be rejected if the schema or + * other arguments to this function are invalid, or if the resolved event stream + * is not an async iterable. + * + * If the client-provided arguments to this function do not result in a + * compliant subscription, a GraphQL Response (ExecutionResult) with + * descriptive errors and no data will be returned. + * + * If the the source stream could not be created due to faulty subscription + * resolver logic or underlying systems, the promise will resolve to a single + * ExecutionResult containing `errors` and no `data`. + * + * If the operation succeeded, the promise resolves to the AsyncIterable for the + * event stream returned by the resolver. + * + * A Source Event Stream represents a sequence of events, each of which triggers + * a GraphQL execution for that event. + * + * This may be useful when hosting the stateful subscription service in a + * different process or machine than the stateless GraphQL execution engine, + * or otherwise separating these two steps. For more on this, see the + * "Supporting Subscriptions at Scale" information in the GraphQL specification. + */ + +async function createSourceEventStream(...rawArgs) { + const args = toNormalizedArgs(rawArgs); + const { + schema, + document, + variableValues + } = args; // If arguments are missing or incorrectly typed, this is an internal + // developer mistake which should throw an early error. + + (0, _execute.assertValidExecutionArguments)(schema, document, variableValues); // If a valid execution context cannot be created due to incorrect arguments, + // a "Response" with only errors is returned. + + const exeContext = (0, _execute.buildExecutionContext)(args); // Return early errors if execution context failed. + + if (!('schema' in exeContext)) { + return { + errors: exeContext + }; + } + try { + const eventStream = await executeSubscription(exeContext); // Assert field returned an event stream, otherwise yield an error. + + if (!(0, _isAsyncIterable.isAsyncIterable)(eventStream)) { + throw new Error('Subscription field must return Async Iterable. ' + `Received: ${(0, _inspect.inspect)(eventStream)}.`); + } + return eventStream; + } catch (error) { + // If it GraphQLError, report it as an ExecutionResult, containing only errors and no data. + // Otherwise treat the error as a system-class error and re-throw it. + if (error instanceof _GraphQLError.GraphQLError) { + return { + errors: [error] + }; + } + throw error; } } -exports.DeferredFragmentRecord = DeferredFragmentRecord; -function isDeferredFragmentRecord(deliveryGroup) { - return deliveryGroup instanceof DeferredFragmentRecord; -} -function isCancellableStreamRecord(deliveryGroup) { - return 'earlyReturn' in deliveryGroup; +async function executeSubscription(exeContext) { + const { + schema, + fragments, + operation, + variableValues, + rootValue + } = exeContext; + const rootType = schema.getSubscriptionType(); + if (rootType == null) { + throw new _GraphQLError.GraphQLError('Schema is not configured to execute subscription operation.', { + nodes: operation + }); + } + const rootFields = (0, _collectFields.collectFields)(schema, fragments, variableValues, rootType, operation.selectionSet); + const [responseName, fieldNodes] = [...rootFields.entries()][0]; + const fieldDef = (0, _execute.getFieldDef)(schema, rootType, fieldNodes[0]); + if (!fieldDef) { + const fieldName = fieldNodes[0].name.value; + throw new _GraphQLError.GraphQLError(`The subscription field "${fieldName}" is not defined.`, { + nodes: fieldNodes + }); + } + const path = (0, _Path.addPath)(undefined, responseName, rootType.name); + const info = (0, _execute.buildResolveInfo)(exeContext, fieldDef, fieldNodes, rootType, path); + try { + var _fieldDef$subscribe; + + // Implements the "ResolveFieldEventStream" algorithm from GraphQL specification. + // It differs from "ResolveFieldValue" due to providing a different `resolveFn`. + // Build a JS object of arguments from the field.arguments AST, using the + // variables scope to fulfill any variable references. + const args = (0, _values.getArgumentValues)(fieldDef, fieldNodes[0], variableValues); // The resolve function's optional third argument is a context value that + // is provided to every resolve function within an execution. It is commonly + // used to represent an authenticated user, or request-specific caches. + + const contextValue = exeContext.contextValue; // Call the `subscribe()` resolver or the default resolver to produce an + // AsyncIterable yielding raw payloads. + + const resolveFn = (_fieldDef$subscribe = fieldDef.subscribe) !== null && _fieldDef$subscribe !== void 0 ? _fieldDef$subscribe : exeContext.subscribeFieldResolver; + const eventStream = await resolveFn(rootValue, args, contextValue, info); + if (eventStream instanceof Error) { + throw eventStream; + } + return eventStream; + } catch (error) { + throw (0, _locatedError.locatedError)(error, fieldNodes, (0, _Path.pathToArray)(path)); + } } /***/ }), @@ -25508,6 +41748,7 @@ function isCancellableStreamRecord(deliveryGroup) { \**********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -25517,6 +41758,7 @@ exports.getArgumentValues = getArgumentValues; exports.getDirectiveValues = getDirectiveValues; exports.getVariableValues = getVariableValues; var _inspect = __webpack_require__(/*! ../jsutils/inspect.mjs */ "../../../node_modules/graphql/jsutils/inspect.mjs"); +var _keyMap = __webpack_require__(/*! ../jsutils/keyMap.mjs */ "../../../node_modules/graphql/jsutils/keyMap.mjs"); var _printPathArray = __webpack_require__(/*! ../jsutils/printPathArray.mjs */ "../../../node_modules/graphql/jsutils/printPathArray.mjs"); var _GraphQLError = __webpack_require__(/*! ../error/GraphQLError.mjs */ "../../../node_modules/graphql/error/GraphQLError.mjs"); var _kinds = __webpack_require__(/*! ../language/kinds.mjs */ "../../../node_modules/graphql/language/kinds.mjs"); @@ -25570,7 +41812,7 @@ function coerceVariableValues(schema, varDefNodes, inputs, onError) { })); continue; } - if (!Object.hasOwn(inputs, varName)) { + if (!hasOwnProperty(inputs, varName)) { if (varDefNode.defaultValue) { coercedValues[varName] = (0, _valueFromAST.valueFromAST)(varDefNode.defaultValue, varType); } else if ((0, _definition.isNonNullType)(varType)) { @@ -25610,18 +41852,20 @@ function coerceVariableValues(schema, varDefNodes, inputs, onError) { * exposed to user code. Care should be taken to not pull values from the * Object prototype. */ + function getArgumentValues(def, node, variableValues) { var _node$arguments; - const coercedValues = {}; - // FIXME: https://github.com/graphql/graphql-js/issues/2203 + const coercedValues = {}; // FIXME: https://github.com/graphql/graphql-js/issues/2203 + /* c8 ignore next */ + const argumentNodes = (_node$arguments = node.arguments) !== null && _node$arguments !== void 0 ? _node$arguments : []; - const argNodeMap = new Map(argumentNodes.map(arg => [arg.name.value, arg])); + const argNodeMap = (0, _keyMap.keyMap)(argumentNodes, arg => arg.name.value); for (const argDef of def.args) { const name = argDef.name; const argType = argDef.type; - const argumentNode = argNodeMap.get(name); - if (argumentNode == null) { + const argumentNode = argNodeMap[name]; + if (!argumentNode) { if (argDef.defaultValue !== undefined) { coercedValues[name] = argDef.defaultValue; } else if ((0, _definition.isNonNullType)(argType)) { @@ -25635,7 +41879,7 @@ function getArgumentValues(def, node, variableValues) { let isNull = valueNode.kind === _kinds.Kind.NULL; if (valueNode.kind === _kinds.Kind.VARIABLE) { const variableName = valueNode.name.value; - if (variableValues == null || !Object.hasOwn(variableValues, variableName)) { + if (variableValues == null || !hasOwnProperty(variableValues, variableName)) { if (argDef.defaultValue !== undefined) { coercedValues[name] = argDef.defaultValue; } else if ((0, _definition.isNonNullType)(argType)) { @@ -25676,6 +41920,7 @@ function getArgumentValues(def, node, variableValues) { * exposed to user code. Care should be taken to not pull values from the * Object prototype. */ + function getDirectiveValues(directiveDef, node, variableValues) { var _node$directives; const directiveNode = (_node$directives = node.directives) === null || _node$directives === void 0 ? void 0 : _node$directives.find(directive => directive.name.value === directiveDef.name); @@ -25683,6 +41928,9 @@ function getDirectiveValues(directiveDef, node, variableValues) { return getArgumentValues(directiveDef, directiveNode, variableValues); } } +function hasOwnProperty(obj, prop) { + return Object.prototype.hasOwnProperty.call(obj, prop); +} /***/ }), @@ -25692,6 +41940,7 @@ function getDirectiveValues(directiveDef, node, variableValues) { \*************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -25699,11 +41948,52 @@ Object.defineProperty(exports, "__esModule", ({ })); exports.graphql = graphql; exports.graphqlSync = graphqlSync; +var _devAssert = __webpack_require__(/*! ./jsutils/devAssert.mjs */ "../../../node_modules/graphql/jsutils/devAssert.mjs"); var _isPromise = __webpack_require__(/*! ./jsutils/isPromise.mjs */ "../../../node_modules/graphql/jsutils/isPromise.mjs"); var _parser = __webpack_require__(/*! ./language/parser.mjs */ "../../../node_modules/graphql/language/parser.mjs"); var _validate = __webpack_require__(/*! ./type/validate.mjs */ "../../../node_modules/graphql/type/validate.mjs"); var _validate2 = __webpack_require__(/*! ./validation/validate.mjs */ "../../../node_modules/graphql/validation/validate.mjs"); var _execute = __webpack_require__(/*! ./execution/execute.mjs */ "../../../node_modules/graphql/execution/execute.mjs"); +/** + * This is the primary entry point function for fulfilling GraphQL operations + * by parsing, validating, and executing a GraphQL document along side a + * GraphQL schema. + * + * More sophisticated GraphQL servers, such as those which persist queries, + * may wish to separate the validation and execution phases to a static time + * tooling step, and a server runtime step. + * + * Accepts either an object with named arguments, or individual arguments: + * + * schema: + * The GraphQL type system to use when validating and executing a query. + * source: + * A GraphQL language formatted string representing the requested operation. + * rootValue: + * The value provided as the first argument to resolver functions on the top + * level type (e.g. the query object type). + * contextValue: + * The context value is provided as an argument to resolver functions after + * field arguments. It is used to pass shared information useful at any point + * during executing this query, for example the currently logged in user and + * connections to databases or other services. + * variableValues: + * A mapping of variable name to runtime value to use for all variables + * defined in the requestString. + * operationName: + * The name of the operation to use if requestString contains multiple + * possible operations. Can be omitted if requestString contains only + * one operation. + * fieldResolver: + * A resolver function to use when one is not provided by the schema. + * If not provided, the default field resolver is used (which looks for a + * value or method on the source value with the field's name). + * typeResolver: + * A type resolver function to use when none is provided by the schema. + * If not provided, the default type resolver is used (which looks for a + * `__typename` field or alternatively calls the `isTypeOf` method). + */ + function graphql(args) { // Always return a Promise for a consistent API. return new Promise(resolve => resolve(graphqlImpl(args))); @@ -25714,15 +42004,18 @@ function graphql(args) { * However, it guarantees to complete synchronously (or throw an error) assuming * that all field resolvers are also synchronous. */ + function graphqlSync(args) { - const result = graphqlImpl(args); - // Assert that the execution was synchronous. + const result = graphqlImpl(args); // Assert that the execution was synchronous. + if ((0, _isPromise.isPromise)(result)) { throw new Error('GraphQL execution failed to complete synchronously.'); } return result; } function graphqlImpl(args) { + // Temporary for v15 to v16 migration. Remove in v17 + arguments.length < 2 || (0, _devAssert.devAssert)(false, 'graphql@16 dropped long-deprecated support for positional arguments, please pass an object instead.'); const { schema, source, @@ -25732,15 +42025,15 @@ function graphqlImpl(args) { operationName, fieldResolver, typeResolver - } = args; - // Validate Schema + } = args; // Validate Schema + const schemaValidationErrors = (0, _validate.validateSchema)(schema); if (schemaValidationErrors.length > 0) { return { errors: schemaValidationErrors }; - } - // Parse + } // Parse + let document; try { document = (0, _parser.parse)(source); @@ -25748,15 +42041,15 @@ function graphqlImpl(args) { return { errors: [syntaxError] }; - } - // Validate + } // Validate + const validationErrors = (0, _validate2.validate)(schema, document); if (validationErrors.length > 0) { return { errors: validationErrors }; - } - // Execute + } // Execute + return (0, _execute.execute)({ schema, document, @@ -25777,6 +42070,7 @@ function graphqlImpl(args) { \***********************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -25848,12 +42142,6 @@ Object.defineProperty(exports, "GraphQLBoolean", ({ return _index.GraphQLBoolean; } })); -Object.defineProperty(exports, "GraphQLDeferDirective", ({ - enumerable: true, - get: function () { - return _index.GraphQLDeferDirective; - } -})); Object.defineProperty(exports, "GraphQLDeprecatedDirective", ({ enumerable: true, get: function () { @@ -25962,12 +42250,6 @@ Object.defineProperty(exports, "GraphQLSpecifiedByDirective", ({ return _index.GraphQLSpecifiedByDirective; } })); -Object.defineProperty(exports, "GraphQLStreamDirective", ({ - enumerable: true, - get: function () { - return _index.GraphQLStreamDirective; - } -})); Object.defineProperty(exports, "GraphQLString", ({ enumerable: true, get: function () { @@ -26430,6 +42712,12 @@ Object.defineProperty(exports, "assertUnionType", ({ return _index.assertUnionType; } })); +Object.defineProperty(exports, "assertValidName", ({ + enumerable: true, + get: function () { + return _index6.assertValidName; + } +})); Object.defineProperty(exports, "assertValidSchema", ({ enumerable: true, get: function () { @@ -26514,12 +42802,6 @@ Object.defineProperty(exports, "executeSync", ({ return _index3.executeSync; } })); -Object.defineProperty(exports, "experimentalExecuteIncrementally", ({ - enumerable: true, - get: function () { - return _index3.experimentalExecuteIncrementally; - } -})); Object.defineProperty(exports, "extendSchema", ({ enumerable: true, get: function () { @@ -26538,6 +42820,12 @@ Object.defineProperty(exports, "findDangerousChanges", ({ return _index6.findDangerousChanges; } })); +Object.defineProperty(exports, "formatError", ({ + enumerable: true, + get: function () { + return _index5.formatError; + } +})); Object.defineProperty(exports, "getArgumentValues", ({ enumerable: true, get: function () { @@ -26586,12 +42874,24 @@ Object.defineProperty(exports, "getOperationAST", ({ return _index6.getOperationAST; } })); +Object.defineProperty(exports, "getOperationRootType", ({ + enumerable: true, + get: function () { + return _index6.getOperationRootType; + } +})); Object.defineProperty(exports, "getVariableValues", ({ enumerable: true, get: function () { return _index3.getVariableValues; } })); +Object.defineProperty(exports, "getVisitFn", ({ + enumerable: true, + get: function () { + return _index2.getVisitFn; + } +})); Object.defineProperty(exports, "graphql", ({ enumerable: true, get: function () { @@ -26712,12 +43012,6 @@ Object.defineProperty(exports, "isNonNullType", ({ return _index.isNonNullType; } })); -Object.defineProperty(exports, "isNullabilityAssertionNode", ({ - enumerable: true, - get: function () { - return _index2.isNullabilityAssertionNode; - } -})); Object.defineProperty(exports, "isNullableType", ({ enumerable: true, get: function () { @@ -26826,6 +43120,12 @@ Object.defineProperty(exports, "isUnionType", ({ return _index.isUnionType; } })); +Object.defineProperty(exports, "isValidNameError", ({ + enumerable: true, + get: function () { + return _index6.isValidNameError; + } +})); Object.defineProperty(exports, "isValueNode", ({ enumerable: true, get: function () { @@ -26880,10 +43180,10 @@ Object.defineProperty(exports, "print", ({ return _index2.print; } })); -Object.defineProperty(exports, "printDirective", ({ +Object.defineProperty(exports, "printError", ({ enumerable: true, get: function () { - return _index6.printDirective; + return _index5.printError; } })); Object.defineProperty(exports, "printIntrospectionSchema", ({ @@ -27053,82 +43353,13 @@ var _index6 = __webpack_require__(/*! ./utilities/index.mjs */ "../../../node_mo /***/ }), -/***/ "../../../node_modules/graphql/jsutils/AccumulatorMap.mjs": -/*!****************************************************************!*\ - !*** ../../../node_modules/graphql/jsutils/AccumulatorMap.mjs ***! - \****************************************************************/ -/***/ (function(__unused_webpack_module, exports) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.AccumulatorMap = void 0; -/** - * ES6 Map with additional `add` method to accumulate items. - */ -class AccumulatorMap extends Map { - get [Symbol.toStringTag]() { - return 'AccumulatorMap'; - } - add(key, item) { - const group = this.get(key); - if (group === undefined) { - this.set(key, [item]); - } else { - group.push(item); - } - } -} -exports.AccumulatorMap = AccumulatorMap; - -/***/ }), - -/***/ "../../../node_modules/graphql/jsutils/BoxedPromiseOrValue.mjs": -/*!*********************************************************************!*\ - !*** ../../../node_modules/graphql/jsutils/BoxedPromiseOrValue.mjs ***! - \*********************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.BoxedPromiseOrValue = void 0; -var _isPromise = __webpack_require__(/*! ./isPromise.mjs */ "../../../node_modules/graphql/jsutils/isPromise.mjs"); -/** - * A BoxedPromiseOrValue is a container for a value or promise where the value - * will be updated when the promise resolves. - * - * A BoxedPromiseOrValue may only be used with promises whose possible - * rejection has already been handled, otherwise this will lead to unhandled - * promise rejections. - * - * @internal - * */ -class BoxedPromiseOrValue { - constructor(value) { - this.value = value; - if ((0, _isPromise.isPromise)(value)) { - // eslint-disable-next-line @typescript-eslint/no-floating-promises - value.then(resolved => { - this.value = resolved; - }); - } - } -} -exports.BoxedPromiseOrValue = BoxedPromiseOrValue; - -/***/ }), - /***/ "../../../node_modules/graphql/jsutils/Path.mjs": /*!******************************************************!*\ !*** ../../../node_modules/graphql/jsutils/Path.mjs ***! \******************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -27149,6 +43380,7 @@ function addPath(prev, key, typename) { /** * Given a Path, return an Array of the path keys. */ + function pathToArray(path) { const flattened = []; let curr = path; @@ -27161,33 +43393,13 @@ function pathToArray(path) { /***/ }), -/***/ "../../../node_modules/graphql/jsutils/capitalize.mjs": -/*!************************************************************!*\ - !*** ../../../node_modules/graphql/jsutils/capitalize.mjs ***! - \************************************************************/ -/***/ (function(__unused_webpack_module, exports) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.capitalize = capitalize; -/** - * Converts the first character of string to upper case and the remaining to lower case. - */ -function capitalize(str) { - return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase(); -} - -/***/ }), - /***/ "../../../node_modules/graphql/jsutils/devAssert.mjs": /*!***********************************************************!*\ !*** ../../../node_modules/graphql/jsutils/devAssert.mjs ***! \***********************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -27195,7 +43407,8 @@ Object.defineProperty(exports, "__esModule", ({ })); exports.devAssert = devAssert; function devAssert(condition, message) { - if (!condition) { + const booleanCondition = Boolean(condition); + if (!booleanCondition) { throw new Error(message); } } @@ -27206,92 +43419,38 @@ function devAssert(condition, message) { /*!************************************************************!*\ !*** ../../../node_modules/graphql/jsutils/didYouMean.mjs ***! \************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { +/***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.didYouMean = didYouMean; -var _formatList = __webpack_require__(/*! ./formatList.mjs */ "../../../node_modules/graphql/jsutils/formatList.mjs"); const MAX_SUGGESTIONS = 5; +/** + * Given [ A, B, C ] return ' Did you mean A, B, or C?'. + */ + function didYouMean(firstArg, secondArg) { - const [subMessage, suggestions] = secondArg ? [firstArg, secondArg] : [undefined, firstArg]; - if (suggestions.length === 0) { - return ''; - } + const [subMessage, suggestionsArg] = secondArg ? [firstArg, secondArg] : [undefined, firstArg]; let message = ' Did you mean '; - if (subMessage != null) { + if (subMessage) { message += subMessage + ' '; } - const suggestionList = (0, _formatList.orList)(suggestions.slice(0, MAX_SUGGESTIONS).map(x => `"${x}"`)); - return message + suggestionList + '?'; -} - -/***/ }), - -/***/ "../../../node_modules/graphql/jsutils/formatList.mjs": -/*!************************************************************!*\ - !*** ../../../node_modules/graphql/jsutils/formatList.mjs ***! - \************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.andList = andList; -exports.orList = orList; -var _invariant = __webpack_require__(/*! ./invariant.mjs */ "../../../node_modules/graphql/jsutils/invariant.mjs"); -/** - * Given [ A, B, C ] return 'A, B, or C'. - */ -function orList(items) { - return formatList('or', items); -} -/** - * Given [ A, B, C ] return 'A, B, and C'. - */ -function andList(items) { - return formatList('and', items); -} -function formatList(conjunction, items) { - items.length !== 0 || (0, _invariant.invariant)(false); - switch (items.length) { + const suggestions = suggestionsArg.map(x => `"${x}"`); + switch (suggestions.length) { + case 0: + return ''; case 1: - return items[0]; + return message + suggestions[0] + '?'; case 2: - return items[0] + ' ' + conjunction + ' ' + items[1]; + return message + suggestions[0] + ' or ' + suggestions[1] + '?'; } - const allButLast = items.slice(0, -1); - const lastItem = items.at(-1); - return allButLast.join(', ') + ', ' + conjunction + ' ' + lastItem; -} - -/***/ }), - -/***/ "../../../node_modules/graphql/jsutils/getBySet.mjs": -/*!**********************************************************!*\ - !*** ../../../node_modules/graphql/jsutils/getBySet.mjs ***! - \**********************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.getBySet = getBySet; -var _isSameSet = __webpack_require__(/*! ./isSameSet.mjs */ "../../../node_modules/graphql/jsutils/isSameSet.mjs"); -function getBySet(map, setToMatch) { - for (const set of map.keys()) { - if ((0, _isSameSet.isSameSet)(set, setToMatch)) { - return map.get(set); - } - } - return undefined; + const selected = suggestions.slice(0, MAX_SUGGESTIONS); + const lastItem = selected.pop(); + return message + selected.join(', ') + ', or ' + lastItem + '?'; } /***/ }), @@ -27300,22 +43459,28 @@ function getBySet(map, setToMatch) { /*!*********************************************************!*\ !*** ../../../node_modules/graphql/jsutils/groupBy.mjs ***! \*********************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { +/***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.groupBy = groupBy; -var _AccumulatorMap = __webpack_require__(/*! ./AccumulatorMap.mjs */ "../../../node_modules/graphql/jsutils/AccumulatorMap.mjs"); /** * Groups array items into a Map, given a function to produce grouping key. */ function groupBy(list, keyFn) { - const result = new _AccumulatorMap.AccumulatorMap(); + const result = new Map(); for (const item of list) { - result.add(keyFn(item), item); + const key = keyFn(item); + const group = result.get(key); + if (group === undefined) { + result.set(key, [item]); + } else { + group.push(item); + } } return result; } @@ -27328,6 +43493,7 @@ function groupBy(list, keyFn) { \**************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -27349,6 +43515,7 @@ function identityFunc(x) { \*********************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -27360,6 +43527,7 @@ const MAX_RECURSIVE_DEPTH = 2; /** * Used to print values in error messages. */ + function inspect(value) { return formatValue(value, []); } @@ -27384,8 +43552,8 @@ function formatObjectValue(value, previouslySeenValues) { } const seenValues = [...previouslySeenValues, value]; if (isJSONable(value)) { - const jsonValue = value.toJSON(); - // check for infinite recursion + const jsonValue = value.toJSON(); // check for infinite recursion + if (jsonValue !== value) { return typeof jsonValue === 'string' ? jsonValue : formatValue(jsonValue, seenValues); } @@ -27447,6 +43615,7 @@ function getObjectTag(object) { \************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -27454,15 +43623,21 @@ Object.defineProperty(exports, "__esModule", ({ })); exports.instanceOf = void 0; var _inspect = __webpack_require__(/*! ./inspect.mjs */ "../../../node_modules/graphql/jsutils/inspect.mjs"); +/* c8 ignore next 3 */ + +const isProduction = globalThis.process && +// eslint-disable-next-line no-undef +"development" === 'production'; /** * A replacement for instanceof which includes an error warning when multi-realm * constructors are detected. * See: https://expressjs.com/en/advanced/best-practice-performance.html#set-node_env-to-production * See: https://webpack.js.org/guides/production/ */ + const instanceOf = exports.instanceOf = /* c8 ignore next 6 */ // FIXME: https://github.com/graphql/graphql-js/issues/2317 -globalThis.process != null && globalThis.process.env.NODE_ENV === 'production' ? function instanceOf(value, constructor) { +isProduction ? function instanceOf(value, constructor) { return value instanceof constructor; } : function instanceOf(value, constructor) { if (value instanceof constructor) { @@ -27470,11 +43645,13 @@ globalThis.process != null && globalThis.process.env.NODE_ENV === 'production' ? } if (typeof value === 'object' && value !== null) { var _value$constructor; + // Prefer Symbol.toStringTag since it is immune to minification. const className = constructor.prototype[Symbol.toStringTag]; const valueClassName = // We still need to support constructor's name to detect conflicts with older versions of this library. - Symbol.toStringTag in value ? value[Symbol.toStringTag] : (_value$constructor = value.constructor) === null || _value$constructor === void 0 ? void 0 : _value$constructor.name; + Symbol.toStringTag in value // @ts-expect-error TS bug see, https://github.com/microsoft/TypeScript/issues/38009 + ? value[Symbol.toStringTag] : (_value$constructor = value.constructor) === null || _value$constructor === void 0 ? void 0 : _value$constructor.name; if (className === valueClassName) { const stringifiedValue = (0, _inspect.inspect)(value); throw new Error(`Cannot use ${className} "${stringifiedValue}" from another module or realm. @@ -27502,6 +43679,7 @@ spurious results.`); \***********************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -27509,7 +43687,8 @@ Object.defineProperty(exports, "__esModule", ({ })); exports.invariant = invariant; function invariant(condition, message) { - if (!condition) { + const booleanCondition = Boolean(condition); + if (!booleanCondition) { throw new Error(message != null ? message : 'Unexpected invariant triggered.'); } } @@ -27522,6 +43701,7 @@ function invariant(condition, message) { \*****************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -27544,6 +43724,7 @@ function isAsyncIterable(maybeAsyncIterable) { \******************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -27579,6 +43760,7 @@ function isIterableObject(maybeIterable) { \**************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -27601,6 +43783,7 @@ function isObjectLike(value) { \***********************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -27617,38 +43800,13 @@ function isPromise(value) { /***/ }), -/***/ "../../../node_modules/graphql/jsutils/isSameSet.mjs": -/*!***********************************************************!*\ - !*** ../../../node_modules/graphql/jsutils/isSameSet.mjs ***! - \***********************************************************/ -/***/ (function(__unused_webpack_module, exports) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.isSameSet = isSameSet; -function isSameSet(setA, setB) { - if (setA.size !== setB.size) { - return false; - } - for (const item of setA) { - if (!setB.has(item)) { - return false; - } - } - return true; -} - -/***/ }), - /***/ "../../../node_modules/graphql/jsutils/keyMap.mjs": /*!********************************************************!*\ !*** ../../../node_modules/graphql/jsutils/keyMap.mjs ***! \********************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -27698,6 +43856,7 @@ function keyMap(list, keyFn) { \***********************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -27737,6 +43896,7 @@ function keyValMap(list, keyFn, valFn) { \**********************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -27763,6 +43923,7 @@ function mapValue(map, fn) { \**********************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -27805,6 +43966,7 @@ function memoize3(fn) { \****************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -27870,6 +44032,7 @@ function isDigit(code) { \****************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -27891,6 +44054,7 @@ function printPathArray(path) { \******************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -27904,15 +44068,14 @@ exports.promiseForObject = promiseForObject; * This is akin to bluebird's `Promise.props`, but implemented only using * `Promise.all` so it will work with any implementation of ES6 promises. */ -async function promiseForObject(object, callback) { - const keys = Object.keys(object); - const values = Object.values(object); - const resolvedValues = await Promise.all(values); - const resolvedObject = Object.create(null); - for (let i = 0; i < keys.length; ++i) { - resolvedObject[keys[i]] = resolvedValues[i]; - } - return callback(resolvedObject); +function promiseForObject(object) { + return Promise.all(Object.values(object)).then(resolvedValues => { + const resolvedObject = Object.create(null); + for (const [i, key] of Object.keys(object).entries()) { + resolvedObject[key] = resolvedValues[i]; + } + return resolvedObject; + }); } /***/ }), @@ -27923,6 +44086,7 @@ async function promiseForObject(object, callback) { \***************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -27947,45 +44111,13 @@ function promiseReduce(values, callbackFn, initialValue) { /***/ }), -/***/ "../../../node_modules/graphql/jsutils/promiseWithResolvers.mjs": -/*!**********************************************************************!*\ - !*** ../../../node_modules/graphql/jsutils/promiseWithResolvers.mjs ***! - \**********************************************************************/ -/***/ (function(__unused_webpack_module, exports) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.promiseWithResolvers = promiseWithResolvers; -/** - * Based on Promise.withResolvers proposal - * https://github.com/tc39/proposal-promise-with-resolvers - */ -function promiseWithResolvers() { - // these are assigned synchronously within the Promise constructor - let resolve; - let reject; - const promise = new Promise((res, rej) => { - resolve = res; - reject = rej; - }); - return { - promise, - resolve, - reject - }; -} - -/***/ }), - /***/ "../../../node_modules/graphql/jsutils/suggestionList.mjs": /*!****************************************************************!*\ !*** ../../../node_modules/graphql/jsutils/suggestionList.mjs ***! \****************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -27997,6 +44129,7 @@ var _naturalCompare = __webpack_require__(/*! ./naturalCompare.mjs */ "../../../ * Given an invalid input string and a list of valid options, returns a filtered * list of valid options sorted based on their similarity with the input. */ + function suggestionList(input, options) { const optionsByDistance = Object.create(null); const lexicalDistance = new LexicalDistance(input); @@ -28026,6 +44159,7 @@ function suggestionList(input, options) { * * This distance can be useful for detecting typos in input or sorting */ + class LexicalDistance { constructor(input) { this._input = input; @@ -28037,8 +44171,8 @@ class LexicalDistance { if (this._input === option) { return 0; } - const optionLowerCase = option.toLowerCase(); - // Any case change counts as a single edit + const optionLowerCase = option.toLowerCase(); // Any case change counts as a single edit + if (this._inputLowerCase === optionLowerCase) { return 1; } @@ -28068,7 +44202,8 @@ class LexicalDistance { // delete currentRow[j - 1] + 1, // insert - upRow[j - 1] + cost); + upRow[j - 1] + cost // substitute + ); if (i > 1 && j > 1 && a[i - 1] === b[j - 2] && a[i - 2] === b[j - 1]) { // transposition const doubleDiagonalCell = rows[(i - 2) % 3][j - 2]; @@ -28078,8 +44213,8 @@ class LexicalDistance { smallestCell = currentCell; } currentRow[j] = currentCell; - } - // Early exit, since distance can't go smaller than smallest element of the previous row. + } // Early exit, since distance can't go smaller than smallest element of the previous row. + if (smallestCell > threshold) { return undefined; } @@ -28105,6 +44240,7 @@ function stringToArray(str) { \*********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -28115,6 +44251,7 @@ var _inspect = __webpack_require__(/*! ./inspect.mjs */ "../../../node_modules/g /** * Sometimes a non-error is thrown, wrap it as an Error instance to ensure a consistent Error interface. */ + function toError(thrownValue) { return thrownValue instanceof Error ? thrownValue : new NonErrorThrown(thrownValue); } @@ -28134,6 +44271,7 @@ class NonErrorThrown extends Error { \**********************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -28162,6 +44300,7 @@ function toObjMap(obj) { \******************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -28174,6 +44313,25 @@ exports.isNode = isNode; * identify the region of the source from which the AST derived. */ class Location { + /** + * The character offset at which this Node begins. + */ + + /** + * The character offset at which this Node ends. + */ + + /** + * The Token at which this Node begins. + */ + + /** + * The Token at which this Node ends. + */ + + /** + * The Source document the AST represents. + */ constructor(startToken, endToken, source) { this.start = startToken.start; this.end = endToken.end; @@ -28197,14 +44355,45 @@ class Location { */ exports.Location = Location; class Token { - // eslint-disable-next-line max-params + /** + * The kind of Token. + */ + + /** + * The character offset at which this Node begins. + */ + + /** + * The character offset at which this Node ends. + */ + + /** + * The 1-indexed line number on which this Token appears. + */ + + /** + * The 1-indexed column number at which this Token begins. + */ + + /** + * For non-punctuation tokens, represents the interpreted value of the token. + * + * Note: is undefined for punctuation tokens, but typed as string for + * convenience in the parser. + */ + + /** + * Tokens exist as nodes in a double-linked-list amongst all tokens + * including ignored tokens. is always the first node and + * the last. + */ constructor(kind, start, end, line, column, value) { this.kind = kind; this.start = start; this.end = end; this.line = line; - this.column = column; - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + this.column = column; // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + this.value = value; this.prev = null; this.next = null; @@ -28221,6 +44410,10 @@ class Token { }; } } +/** + * The list of all possible AST node types. + */ + /** * @internal */ @@ -28232,16 +44425,8 @@ const QueryDocumentKeys = exports.QueryDocumentKeys = { VariableDefinition: ['variable', 'type', 'defaultValue', 'directives'], Variable: ['name'], SelectionSet: ['selections'], - Field: ['alias', 'name', 'arguments', 'directives', 'selectionSet', - // Note: Client Controlled Nullability is experimental and may be changed - // or removed in the future. - 'nullabilityAssertion'], + Field: ['alias', 'name', 'arguments', 'directives', 'selectionSet'], Argument: ['name', 'value'], - // Note: Client Controlled Nullability is experimental and may be changed - // or removed in the future. - ListNullabilityOperator: ['nullabilityAssertion'], - NonNullAssertion: ['nullabilityAssertion'], - ErrorBoundary: ['nullabilityAssertion'], FragmentSpread: ['name', 'directives'], InlineFragment: ['typeCondition', 'directives', 'selectionSet'], FragmentDefinition: ['name', @@ -28284,10 +44469,13 @@ const kindValues = new Set(Object.keys(QueryDocumentKeys)); /** * @internal */ + function isNode(maybeNode) { const maybeKind = maybeNode === null || maybeNode === void 0 ? void 0 : maybeNode.kind; return typeof maybeKind === 'string' && kindValues.has(maybeKind); } +/** Name */ + var OperationTypeNode; (function (OperationTypeNode) { OperationTypeNode['QUERY'] = 'query'; @@ -28303,6 +44491,7 @@ var OperationTypeNode; \**************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -28320,28 +44509,28 @@ var _characterClasses = __webpack_require__(/*! ./characterClasses.mjs */ "../.. * * @internal */ + function dedentBlockStringLines(lines) { - var _firstNonEmptyLine; + var _firstNonEmptyLine2; let commonIndent = Number.MAX_SAFE_INTEGER; let firstNonEmptyLine = null; let lastNonEmptyLine = -1; for (let i = 0; i < lines.length; ++i) { + var _firstNonEmptyLine; const line = lines[i]; const indent = leadingWhitespace(line); if (indent === line.length) { continue; // skip empty lines } - firstNonEmptyLine ??= i; + firstNonEmptyLine = (_firstNonEmptyLine = firstNonEmptyLine) !== null && _firstNonEmptyLine !== void 0 ? _firstNonEmptyLine : i; lastNonEmptyLine = i; if (i !== 0 && indent < commonIndent) { commonIndent = indent; } } - return lines - // Remove common indentation from all lines but first. - .map((line, i) => i === 0 ? line : line.slice(commonIndent)) - // Remove leading and trailing blank lines. - .slice((_firstNonEmptyLine = firstNonEmptyLine) !== null && _firstNonEmptyLine !== void 0 ? _firstNonEmptyLine : 0, lastNonEmptyLine + 1); + return lines // Remove common indentation from all lines but first. + .map((line, i) => i === 0 ? line : line.slice(commonIndent)) // Remove leading and trailing blank lines. + .slice((_firstNonEmptyLine2 = firstNonEmptyLine) !== null && _firstNonEmptyLine2 !== void 0 ? _firstNonEmptyLine2 : 0, lastNonEmptyLine + 1); } function leadingWhitespace(str) { let i = 0; @@ -28353,6 +44542,7 @@ function leadingWhitespace(str) { /** * @internal */ + function isPrintableAsBlockString(value) { if (value === '') { return true; // empty string is printable @@ -28378,10 +44568,12 @@ function isPrintableAsBlockString(value) { case 0x000f: return false; // Has non-printable characters + case 0x000d: // \r return false; // Has \r or \r\n which will be replaced as \n + case 10: // \n if (isEmptyLine && !seenNonEmptyLine) { @@ -28392,12 +44584,13 @@ function isPrintableAsBlockString(value) { hasIndent = false; break; case 9: // \t + case 32: // - hasIndent ||= isEmptyLine; + hasIndent || (hasIndent = isEmptyLine); break; default: - hasCommonIndent &&= hasIndent; + hasCommonIndent && (hasCommonIndent = hasIndent); isEmptyLine = false; } } @@ -28416,24 +44609,25 @@ function isPrintableAsBlockString(value) { * * @internal */ + function printBlockString(value, options) { - const escapedValue = value.replaceAll('"""', '\\"""'); - // Expand a block string's raw value into independent lines. + const escapedValue = value.replace(/"""/g, '\\"""'); // Expand a block string's raw value into independent lines. + const lines = escapedValue.split(/\r\n|[\n\r]/g); - const isSingleLine = lines.length === 1; - // If common indentation is found we can fix some of those cases by adding leading new line - const forceLeadingNewLine = lines.length > 1 && lines.slice(1).every(line => line.length === 0 || (0, _characterClasses.isWhiteSpace)(line.charCodeAt(0))); - // Trailing triple quotes just looks confusing but doesn't force trailing new line - const hasTrailingTripleQuotes = escapedValue.endsWith('\\"""'); - // Trailing quote (single or double) or slash forces trailing new line + const isSingleLine = lines.length === 1; // If common indentation is found we can fix some of those cases by adding leading new line + + const forceLeadingNewLine = lines.length > 1 && lines.slice(1).every(line => line.length === 0 || (0, _characterClasses.isWhiteSpace)(line.charCodeAt(0))); // Trailing triple quotes just looks confusing but doesn't force trailing new line + + const hasTrailingTripleQuotes = escapedValue.endsWith('\\"""'); // Trailing quote (single or double) or slash forces trailing new line + const hasTrailingQuote = value.endsWith('"') && !hasTrailingTripleQuotes; const hasTrailingSlash = value.endsWith('\\'); const forceTrailingNewline = hasTrailingQuote || hasTrailingSlash; const printAsMultipleLines = !(options !== null && options !== void 0 && options.minimize) && ( // add leading and trailing new lines only if it improves readability !isSingleLine || value.length > 70 || forceTrailingNewline || forceLeadingNewLine || hasTrailingTripleQuotes); - let result = ''; - // Format a multi-line block quote to account for leading space. + let result = ''; // Format a multi-line block quote to account for leading space. + const skipLeadingNewLine = isSingleLine && (0, _characterClasses.isWhiteSpace)(value.charCodeAt(0)); if (printAsMultipleLines && !skipLeadingNewLine || forceLeadingNewLine) { result += '\n'; @@ -28453,6 +44647,7 @@ function printBlockString(value, options) { \*******************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -28481,6 +44676,7 @@ function isWhiteSpace(code) { * ``` * @internal */ + function isDigit(code) { return code >= 0x0030 && code <= 0x0039; } @@ -28494,6 +44690,7 @@ function isDigit(code) { * ``` * @internal */ + function isLetter(code) { return code >= 0x0061 && code <= 0x007a || // A-Z @@ -28508,6 +44705,7 @@ function isLetter(code) { * ``` * @internal */ + function isNameStart(code) { return isLetter(code) || code === 0x005f; } @@ -28520,6 +44718,7 @@ function isNameStart(code) { * ``` * @internal */ + function isNameContinue(code) { return isLetter(code) || isDigit(code) || code === 0x005f; } @@ -28532,6 +44731,7 @@ function isNameContinue(code) { \********************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -28543,7 +44743,6 @@ exports.DirectiveLocation = void 0; */ var DirectiveLocation; (function (DirectiveLocation) { - /** Request Definitions */ DirectiveLocation['QUERY'] = 'QUERY'; DirectiveLocation['MUTATION'] = 'MUTATION'; DirectiveLocation['SUBSCRIPTION'] = 'SUBSCRIPTION'; @@ -28552,7 +44751,6 @@ var DirectiveLocation; DirectiveLocation['FRAGMENT_SPREAD'] = 'FRAGMENT_SPREAD'; DirectiveLocation['INLINE_FRAGMENT'] = 'INLINE_FRAGMENT'; DirectiveLocation['VARIABLE_DEFINITION'] = 'VARIABLE_DEFINITION'; - /** Type System Definitions */ DirectiveLocation['SCHEMA'] = 'SCHEMA'; DirectiveLocation['SCALAR'] = 'SCALAR'; DirectiveLocation['OBJECT'] = 'OBJECT'; @@ -28566,6 +44764,12 @@ var DirectiveLocation; DirectiveLocation['INPUT_FIELD_DEFINITION'] = 'INPUT_FIELD_DEFINITION'; })(DirectiveLocation || (exports.DirectiveLocation = DirectiveLocation = {})); +/** + * The enum type representing the directive location values. + * + * @deprecated Please use `DirectiveLocation`. Will be remove in v17. + */ + /***/ }), /***/ "../../../node_modules/graphql/language/index.mjs": @@ -28574,6 +44778,7 @@ var DirectiveLocation; \********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -28645,6 +44850,12 @@ Object.defineProperty(exports, "getLocation", ({ return _location.getLocation; } })); +Object.defineProperty(exports, "getVisitFn", ({ + enumerable: true, + get: function () { + return _visitor.getVisitFn; + } +})); Object.defineProperty(exports, "isConstValueNode", ({ enumerable: true, get: function () { @@ -28663,12 +44874,6 @@ Object.defineProperty(exports, "isExecutableDefinitionNode", ({ return _predicates.isExecutableDefinitionNode; } })); -Object.defineProperty(exports, "isNullabilityAssertionNode", ({ - enumerable: true, - get: function () { - return _predicates.isNullabilityAssertionNode; - } -})); Object.defineProperty(exports, "isSelectionNode", ({ enumerable: true, get: function () { @@ -28786,6 +44991,7 @@ var _directiveLocation = __webpack_require__(/*! ./directiveLocation.mjs */ "../ \********************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -28797,24 +45003,16 @@ exports.Kind = void 0; */ var Kind; (function (Kind) { - /** Name */ Kind['NAME'] = 'Name'; - /** Document */ Kind['DOCUMENT'] = 'Document'; Kind['OPERATION_DEFINITION'] = 'OperationDefinition'; Kind['VARIABLE_DEFINITION'] = 'VariableDefinition'; Kind['SELECTION_SET'] = 'SelectionSet'; Kind['FIELD'] = 'Field'; Kind['ARGUMENT'] = 'Argument'; - /** Nullability Modifiers */ - Kind['LIST_NULLABILITY_OPERATOR'] = 'ListNullabilityOperator'; - Kind['NON_NULL_ASSERTION'] = 'NonNullAssertion'; - Kind['ERROR_BOUNDARY'] = 'ErrorBoundary'; - /** Fragments */ Kind['FRAGMENT_SPREAD'] = 'FragmentSpread'; Kind['INLINE_FRAGMENT'] = 'InlineFragment'; Kind['FRAGMENT_DEFINITION'] = 'FragmentDefinition'; - /** Values */ Kind['VARIABLE'] = 'Variable'; Kind['INT'] = 'IntValue'; Kind['FLOAT'] = 'FloatValue'; @@ -28825,16 +45023,12 @@ var Kind; Kind['LIST'] = 'ListValue'; Kind['OBJECT'] = 'ObjectValue'; Kind['OBJECT_FIELD'] = 'ObjectField'; - /** Directives */ Kind['DIRECTIVE'] = 'Directive'; - /** Types */ Kind['NAMED_TYPE'] = 'NamedType'; Kind['LIST_TYPE'] = 'ListType'; Kind['NON_NULL_TYPE'] = 'NonNullType'; - /** Type System Definitions */ Kind['SCHEMA_DEFINITION'] = 'SchemaDefinition'; Kind['OPERATION_TYPE_DEFINITION'] = 'OperationTypeDefinition'; - /** Type Definitions */ Kind['SCALAR_TYPE_DEFINITION'] = 'ScalarTypeDefinition'; Kind['OBJECT_TYPE_DEFINITION'] = 'ObjectTypeDefinition'; Kind['FIELD_DEFINITION'] = 'FieldDefinition'; @@ -28844,11 +45038,8 @@ var Kind; Kind['ENUM_TYPE_DEFINITION'] = 'EnumTypeDefinition'; Kind['ENUM_VALUE_DEFINITION'] = 'EnumValueDefinition'; Kind['INPUT_OBJECT_TYPE_DEFINITION'] = 'InputObjectTypeDefinition'; - /** Directive Definitions */ Kind['DIRECTIVE_DEFINITION'] = 'DirectiveDefinition'; - /** Type System Extensions */ Kind['SCHEMA_EXTENSION'] = 'SchemaExtension'; - /** Type Extensions */ Kind['SCALAR_TYPE_EXTENSION'] = 'ScalarTypeExtension'; Kind['OBJECT_TYPE_EXTENSION'] = 'ObjectTypeExtension'; Kind['INTERFACE_TYPE_EXTENSION'] = 'InterfaceTypeExtension'; @@ -28857,6 +45048,12 @@ var Kind; Kind['INPUT_OBJECT_TYPE_EXTENSION'] = 'InputObjectTypeExtension'; })(Kind || (exports.Kind = Kind = {})); +/** + * The enum type representing the possible kind values of AST nodes. + * + * @deprecated Please use `Kind`. Will be remove in v17. + */ + /***/ }), /***/ "../../../node_modules/graphql/language/lexer.mjs": @@ -28865,6 +45062,7 @@ var Kind; \********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -28885,7 +45083,23 @@ var _tokenKind = __webpack_require__(/*! ./tokenKind.mjs */ "../../../node_modul * EOF, after which the lexer will repeatedly return the same EOF token * whenever called. */ + class Lexer { + /** + * The previously focused non-ignored token. + */ + + /** + * The currently focused non-ignored token. + */ + + /** + * The (1-indexed) line containing the current token. + */ + + /** + * The character offset at which the current line begins. + */ constructor(source) { const startOfFileToken = new _ast.Token(_tokenKind.TokenKind.SOF, 0, 0, 0, 0); this.source = source; @@ -28900,6 +45114,7 @@ class Lexer { /** * Advances the token stream to the next non-ignored token. */ + advance() { this.lastToken = this.token; const token = this.token = this.lookahead(); @@ -28909,6 +45124,7 @@ class Lexer { * Looks ahead and returns the next non-ignored token, but does not change * the state of Lexer. */ + lookahead() { let token = this.token; if (token.kind !== _tokenKind.TokenKind.EOF) { @@ -28917,10 +45133,10 @@ class Lexer { token = token.next; } else { // Read the next token and form a link in the token linked-list. - const nextToken = readNextToken(this, token.end); - // @ts-expect-error next is only mutable during parsing. - token.next = nextToken; - // @ts-expect-error prev is only mutable during parsing. + const nextToken = readNextToken(this, token.end); // @ts-expect-error next is only mutable during parsing. + + token.next = nextToken; // @ts-expect-error prev is only mutable during parsing. + nextToken.prev = token; token = nextToken; } @@ -28934,7 +45150,7 @@ class Lexer { */ exports.Lexer = Lexer; function isPunctuatorTokenKind(kind) { - return kind === _tokenKind.TokenKind.BANG || kind === _tokenKind.TokenKind.QUESTION_MARK || kind === _tokenKind.TokenKind.DOLLAR || kind === _tokenKind.TokenKind.AMP || kind === _tokenKind.TokenKind.PAREN_L || kind === _tokenKind.TokenKind.PAREN_R || kind === _tokenKind.TokenKind.SPREAD || kind === _tokenKind.TokenKind.COLON || kind === _tokenKind.TokenKind.EQUALS || kind === _tokenKind.TokenKind.AT || kind === _tokenKind.TokenKind.BRACKET_L || kind === _tokenKind.TokenKind.BRACKET_R || kind === _tokenKind.TokenKind.BRACE_L || kind === _tokenKind.TokenKind.PIPE || kind === _tokenKind.TokenKind.BRACE_R; + return kind === _tokenKind.TokenKind.BANG || kind === _tokenKind.TokenKind.DOLLAR || kind === _tokenKind.TokenKind.AMP || kind === _tokenKind.TokenKind.PAREN_L || kind === _tokenKind.TokenKind.PAREN_R || kind === _tokenKind.TokenKind.SPREAD || kind === _tokenKind.TokenKind.COLON || kind === _tokenKind.TokenKind.EQUALS || kind === _tokenKind.TokenKind.AT || kind === _tokenKind.TokenKind.BRACKET_L || kind === _tokenKind.TokenKind.BRACKET_R || kind === _tokenKind.TokenKind.BRACE_L || kind === _tokenKind.TokenKind.PIPE || kind === _tokenKind.TokenKind.BRACE_R; } /** * A Unicode scalar value is any Unicode code point except surrogate code @@ -28944,6 +45160,7 @@ function isPunctuatorTokenKind(kind) { * SourceCharacter :: * - "Any Unicode scalar value" */ + function isUnicodeScalarValue(code) { return code >= 0x0000 && code <= 0xd7ff || code >= 0xe000 && code <= 0x10ffff; } @@ -28955,6 +45172,7 @@ function isUnicodeScalarValue(code) { * encodes a supplementary code point (above U+FFFF), but unpaired surrogate * code points are not valid source characters. */ + function isSupplementaryCodePoint(body, location) { return isLeadingSurrogate(body.charCodeAt(location)) && isTrailingSurrogate(body.charCodeAt(location + 1)); } @@ -28971,6 +45189,7 @@ function isTrailingSurrogate(code) { * Printable ASCII is printed quoted, while other points are printed in Unicode * code point form (ie. U+1234). */ + function printCodePointAt(lexer, location) { const code = lexer.source.body.codePointAt(location); if (code === undefined) { @@ -28979,13 +45198,14 @@ function printCodePointAt(lexer, location) { // Printable ASCII const char = String.fromCodePoint(code); return char === '"' ? "'\"'" : `"${char}"`; - } - // Unicode code point + } // Unicode code point + return 'U+' + code.toString(16).toUpperCase().padStart(4, '0'); } /** * Create a token with line and column location information. */ + function createToken(lexer, kind, start, end, value) { const line = lexer.line; const col = 1 + start - lexer.lineStart; @@ -28998,13 +45218,14 @@ function createToken(lexer, kind, start, end, value) { * punctuators immediately or calls the appropriate helper function for more * complicated tokens. */ + function readNextToken(lexer, start) { const body = lexer.source.body; const bodyLength = body.length; let position = start; while (position < bodyLength) { - const code = body.charCodeAt(position); - // SourceCharacter + const code = body.charCodeAt(position); // SourceCharacter + switch (code) { // Ignored :: // - UnicodeBOM @@ -29021,8 +45242,11 @@ function readNextToken(lexer, start) { // // Comma :: , case 0xfeff: // + case 0x0009: // \t + case 0x0020: // + case 0x002c: // , ++position; @@ -29031,6 +45255,7 @@ function readNextToken(lexer, start) { // - "New Line (U+000A)" // - "Carriage Return (U+000D)" [lookahead != "New Line (U+000A)"] // - "Carriage Return (U+000D)" "New Line (U+000A)" + case 0x000a: // \n ++position; @@ -29048,6 +45273,7 @@ function readNextToken(lexer, start) { lexer.lineStart = position; continue; // Comment + case 0x0023: // # return readComment(lexer, position); @@ -29059,6 +45285,7 @@ function readNextToken(lexer, start) { // - StringValue // // Punctuator :: one of ! $ & ( ) ... : = @ [ ] { | } + case 0x0021: // ! return createToken(lexer, _tokenKind.TokenKind.BANG, position, position + 1); @@ -29104,22 +45331,20 @@ function readNextToken(lexer, start) { case 0x007d: // } return createToken(lexer, _tokenKind.TokenKind.BRACE_R, position, position + 1); - case 0x003f: - // ? - return createToken(lexer, _tokenKind.TokenKind.QUESTION_MARK, position, position + 1); // StringValue + case 0x0022: // " if (body.charCodeAt(position + 1) === 0x0022 && body.charCodeAt(position + 2) === 0x0022) { return readBlockString(lexer, position); } return readString(lexer, position); - } - // IntValue | FloatValue (Digit | -) + } // IntValue | FloatValue (Digit | -) + if ((0, _characterClasses.isDigit)(code) || code === 0x002d) { return readNumber(lexer, position, code); - } - // Name + } // Name + if ((0, _characterClasses.isNameStart)(code)) { return readName(lexer, position); } @@ -29136,17 +45361,18 @@ function readNextToken(lexer, start) { * CommentChar :: SourceCharacter but not LineTerminator * ``` */ + function readComment(lexer, start) { const body = lexer.source.body; const bodyLength = body.length; let position = start + 1; while (position < bodyLength) { - const code = body.charCodeAt(position); - // LineTerminator (\n | \r) + const code = body.charCodeAt(position); // LineTerminator (\n | \r) + if (code === 0x000a || code === 0x000d) { break; - } - // SourceCharacter + } // SourceCharacter + if (isUnicodeScalarValue(code)) { ++position; } else if (isSupplementaryCodePoint(body, position)) { @@ -29186,16 +45412,17 @@ function readComment(lexer, start) { * Sign :: one of + - * ``` */ + function readNumber(lexer, start, firstCode) { const body = lexer.source.body; let position = start; let code = firstCode; - let isFloat = false; - // NegativeSign (-) + let isFloat = false; // NegativeSign (-) + if (code === 0x002d) { code = body.charCodeAt(++position); - } - // Zero (0) + } // Zero (0) + if (code === 0x0030) { code = body.charCodeAt(++position); if ((0, _characterClasses.isDigit)(code)) { @@ -29204,26 +45431,26 @@ function readNumber(lexer, start, firstCode) { } else { position = readDigits(lexer, position, code); code = body.charCodeAt(position); - } - // Full stop (.) + } // Full stop (.) + if (code === 0x002e) { isFloat = true; code = body.charCodeAt(++position); position = readDigits(lexer, position, code); code = body.charCodeAt(position); - } - // E e + } // E e + if (code === 0x0045 || code === 0x0065) { isFloat = true; - code = body.charCodeAt(++position); - // + - + code = body.charCodeAt(++position); // + - + if (code === 0x002b || code === 0x002d) { code = body.charCodeAt(++position); } position = readDigits(lexer, position, code); code = body.charCodeAt(position); - } - // Numbers cannot be followed by . or NameStart + } // Numbers cannot be followed by . or NameStart + if (code === 0x002e || (0, _characterClasses.isNameStart)(code)) { throw (0, _syntaxError.syntaxError)(lexer.source, position, `Invalid number, expected digit but got: ${printCodePointAt(lexer, position)}.`); } @@ -29232,12 +45459,14 @@ function readNumber(lexer, start, firstCode) { /** * Returns the new position in the source after reading one or more digits. */ + function readDigits(lexer, start, firstCode) { if (!(0, _characterClasses.isDigit)(firstCode)) { throw (0, _syntaxError.syntaxError)(lexer.source, start, `Invalid number, expected digit but got: ${printCodePointAt(lexer, start)}.`); } const body = lexer.source.body; let position = start + 1; // +1 to skip first firstCode + while ((0, _characterClasses.isDigit)(body.charCodeAt(position))) { ++position; } @@ -29263,6 +45492,7 @@ function readDigits(lexer, start, firstCode) { * EscapedCharacter :: one of `"` `\` `/` `b` `f` `n` `r` `t` * ``` */ + function readString(lexer, start) { const body = lexer.source.body; const bodyLength = body.length; @@ -29270,13 +45500,13 @@ function readString(lexer, start) { let chunkStart = position; let value = ''; while (position < bodyLength) { - const code = body.charCodeAt(position); - // Closing Quote (") + const code = body.charCodeAt(position); // Closing Quote (") + if (code === 0x0022) { value += body.slice(chunkStart, position); return createToken(lexer, _tokenKind.TokenKind.STRING, start, position + 1, value); - } - // Escape Sequence (\) + } // Escape Sequence (\) + if (code === 0x005c) { value += body.slice(chunkStart, position); const escape = body.charCodeAt(position + 1) === 0x0075 // u @@ -29286,12 +45516,12 @@ function readString(lexer, start) { position += escape.size; chunkStart = position; continue; - } - // LineTerminator (\n | \r) + } // LineTerminator (\n | \r) + if (code === 0x000a || code === 0x000d) { break; - } - // SourceCharacter + } // SourceCharacter + if (isUnicodeScalarValue(code)) { ++position; } else if (isSupplementaryCodePoint(body, position)) { @@ -29301,15 +45531,16 @@ function readString(lexer, start) { } } throw (0, _syntaxError.syntaxError)(lexer.source, position, 'Unterminated string.'); -} +} // The string value and lexed size of an escape sequence. + function readEscapedUnicodeVariableWidth(lexer, position) { const body = lexer.source.body; let point = 0; - let size = 3; - // Cannot be larger than 12 chars (\u{00000000}). + let size = 3; // Cannot be larger than 12 chars (\u{00000000}). + while (size < 12) { - const code = body.charCodeAt(position + size++); - // Closing Brace (}) + const code = body.charCodeAt(position + size++); // Closing Brace (}) + if (code === 0x007d) { // Must be at least 5 chars (\u{0}) and encode a Unicode scalar value. if (size < 5 || !isUnicodeScalarValue(point)) { @@ -29319,8 +45550,8 @@ function readEscapedUnicodeVariableWidth(lexer, position) { value: String.fromCodePoint(point), size }; - } - // Append this hex digit to the code point. + } // Append this hex digit to the code point. + point = point << 4 | readHexDigit(code); if (point < 0) { break; @@ -29336,9 +45567,9 @@ function readEscapedUnicodeFixedWidth(lexer, position) { value: String.fromCodePoint(code), size: 6 }; - } - // GraphQL allows JSON-style surrogate pair escape sequences, but only when + } // GraphQL allows JSON-style surrogate pair escape sequences, but only when // a valid pair is formed. + if (isLeadingSurrogate(code)) { // \u if (body.charCodeAt(position + 6) === 0x005c && body.charCodeAt(position + 7) === 0x0075) { @@ -29366,6 +45597,7 @@ function readEscapedUnicodeFixedWidth(lexer, position) { * * Returns a negative number if any char was not a valid hexadecimal digit. */ + function read16BitHexCode(body, position) { // readHexDigit() returns -1 on error. ORing a negative value with any other // value always produces a negative value. @@ -29385,6 +45617,7 @@ function read16BitHexCode(body, position) { * - `A` `B` `C` `D` `E` `F` * - `a` `b` `c` `d` `e` `f` */ + function readHexDigit(code) { return code >= 0x0030 && code <= 0x0039 // 0-9 ? code - 0x0030 : code >= 0x0041 && code <= 0x0046 // A-F @@ -29403,6 +45636,7 @@ function readHexDigit(code) { * | `r` | U+000D | carriage return | * | `t` | U+0009 | horizontal tab | */ + function readEscapedCharacter(lexer, position) { const body = lexer.source.body; const code = body.charCodeAt(position + 1); @@ -29470,6 +45704,7 @@ function readEscapedCharacter(lexer, position) { * - `\"""` * ``` */ + function readBlockString(lexer, start) { const body = lexer.source.body; const bodyLength = body.length; @@ -29479,8 +45714,8 @@ function readBlockString(lexer, start) { let currentLine = ''; const blockLines = []; while (position < bodyLength) { - const code = body.charCodeAt(position); - // Closing Triple-Quote (""") + const code = body.charCodeAt(position); // Closing Triple-Quote (""") + if (code === 0x0022 && body.charCodeAt(position + 1) === 0x0022 && body.charCodeAt(position + 2) === 0x0022) { currentLine += body.slice(chunkStart, position); blockLines.push(currentLine); @@ -29490,15 +45725,16 @@ function readBlockString(lexer, start) { lexer.line += blockLines.length - 1; lexer.lineStart = lineStart; return token; - } - // Escaped Triple-Quote (\""") + } // Escaped Triple-Quote (\""") + if (code === 0x005c && body.charCodeAt(position + 1) === 0x0022 && body.charCodeAt(position + 2) === 0x0022 && body.charCodeAt(position + 3) === 0x0022) { currentLine += body.slice(chunkStart, position); chunkStart = position + 1; // skip only slash + position += 4; continue; - } - // LineTerminator + } // LineTerminator + if (code === 0x000a || code === 0x000d) { currentLine += body.slice(chunkStart, position); blockLines.push(currentLine); @@ -29511,8 +45747,8 @@ function readBlockString(lexer, start) { chunkStart = position; lineStart = position; continue; - } - // SourceCharacter + } // SourceCharacter + if (isUnicodeScalarValue(code)) { ++position; } else if (isSupplementaryCodePoint(body, position)) { @@ -29531,6 +45767,7 @@ function readBlockString(lexer, start) { * - NameStart NameContinue* [lookahead != NameContinue] * ``` */ + function readName(lexer, start) { const body = lexer.source.body; const bodyLength = body.length; @@ -29554,6 +45791,7 @@ function readName(lexer, start) { \***********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -29562,6 +45800,10 @@ Object.defineProperty(exports, "__esModule", ({ exports.getLocation = getLocation; var _invariant = __webpack_require__(/*! ../jsutils/invariant.mjs */ "../../../node_modules/graphql/jsutils/invariant.mjs"); const LineRegExp = /\r\n|[\n\r]/g; +/** + * Represents a location in a Source. + */ + /** * Takes a Source and a UTF-8 character offset, and returns the corresponding * line and column as a SourceLocation. @@ -29591,6 +45833,7 @@ function getLocation(source, position) { \*********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -29608,6 +45851,10 @@ var _kinds = __webpack_require__(/*! ./kinds.mjs */ "../../../node_modules/graph var _lexer = __webpack_require__(/*! ./lexer.mjs */ "../../../node_modules/graphql/language/lexer.mjs"); var _source = __webpack_require__(/*! ./source.mjs */ "../../../node_modules/graphql/language/source.mjs"); var _tokenKind = __webpack_require__(/*! ./tokenKind.mjs */ "../../../node_modules/graphql/language/tokenKind.mjs"); +/** + * Configuration options to control parser behavior + */ + /** * Given a GraphQL source, parses it into a Document. * Throws GraphQLError if a syntax error is encountered. @@ -29626,6 +45873,7 @@ function parse(source, options) { * * Consider providing the results to the utility function: valueFromAST(). */ + function parseValue(source, options) { const parser = new Parser(source, options); parser.expectToken(_tokenKind.TokenKind.SOF); @@ -29637,6 +45885,7 @@ function parseValue(source, options) { * Similar to parseValue(), but raises a parse error if it encounters a * variable. The return type will be a constant value. */ + function parseConstValue(source, options) { const parser = new Parser(source, options); parser.expectToken(_tokenKind.TokenKind.SOF); @@ -29654,6 +45903,7 @@ function parseConstValue(source, options) { * * Consider providing the results to the utility function: typeFromAST(). */ + function parseType(source, options) { const parser = new Parser(source, options); parser.expectToken(_tokenKind.TokenKind.SOF); @@ -29672,6 +45922,7 @@ function parseType(source, options) { * * @internal */ + class Parser { constructor(source, options = {}) { const sourceObj = (0, _source.isSource)(source) ? source : new _source.Source(source); @@ -29682,17 +45933,19 @@ class Parser { /** * Converts a name lex token into a name parse node. */ + parseName() { const token = this.expectToken(_tokenKind.TokenKind.NAME); return this.node(token, { kind: _kinds.Kind.NAME, value: token.value }); - } - // Implements the parsing rules in the Document section. + } // Implements the parsing rules in the Document section. + /** * Document : Definition+ */ + parseDocument() { return this.node(this._lexer.token, { kind: _kinds.Kind.DOCUMENT, @@ -29722,11 +45975,12 @@ class Parser { * - EnumTypeDefinition * - InputObjectTypeDefinition */ + parseDefinition() { if (this.peek(_tokenKind.TokenKind.BRACE_L)) { return this.parseOperationDefinition(); - } - // Many definitions begin with a description and require a lookahead. + } // Many definitions begin with a description and require a lookahead. + const hasDescription = this.peekDescription(); const keywordToken = hasDescription ? this._lexer.lookahead() : this._lexer.token; if (keywordToken.kind === _tokenKind.TokenKind.NAME) { @@ -29763,13 +46017,14 @@ class Parser { } } throw this.unexpected(keywordToken); - } - // Implements the parsing rules in the Operations section. + } // Implements the parsing rules in the Operations section. + /** * OperationDefinition : * - SelectionSet * - OperationType Name? VariableDefinitions? Directives? SelectionSet */ + parseOperationDefinition() { const start = this._lexer.token; if (this.peek(_tokenKind.TokenKind.BRACE_L)) { @@ -29799,6 +46054,7 @@ class Parser { /** * OperationType : one of query mutation subscription */ + parseOperationType() { const operationToken = this.expectToken(_tokenKind.TokenKind.NAME); switch (operationToken.value) { @@ -29814,12 +46070,14 @@ class Parser { /** * VariableDefinitions : ( VariableDefinition+ ) */ + parseVariableDefinitions() { return this.optionalMany(_tokenKind.TokenKind.PAREN_L, this.parseVariableDefinition, _tokenKind.TokenKind.PAREN_R); } /** * VariableDefinition : Variable : Type DefaultValue? Directives[Const]? */ + parseVariableDefinition() { return this.node(this._lexer.token, { kind: _kinds.Kind.VARIABLE_DEFINITION, @@ -29832,6 +46090,7 @@ class Parser { /** * Variable : $ Name */ + parseVariable() { const start = this._lexer.token; this.expectToken(_tokenKind.TokenKind.DOLLAR); @@ -29845,6 +46104,7 @@ class Parser { * SelectionSet : { Selection+ } * ``` */ + parseSelectionSet() { return this.node(this._lexer.token, { kind: _kinds.Kind.SELECTION_SET, @@ -29857,6 +46117,7 @@ class Parser { * - FragmentSpread * - InlineFragment */ + parseSelection() { return this.peek(_tokenKind.TokenKind.SPREAD) ? this.parseFragment() : this.parseField(); } @@ -29865,6 +46126,7 @@ class Parser { * * Alias : Name : */ + parseField() { const start = this._lexer.token; const nameOrAlias = this.parseName(); @@ -29881,47 +46143,22 @@ class Parser { alias, name, arguments: this.parseArguments(false), - // Experimental support for Client Controlled Nullability changes - // the grammar of Field: - nullabilityAssertion: this.parseNullabilityAssertion(), directives: this.parseDirectives(false), selectionSet: this.peek(_tokenKind.TokenKind.BRACE_L) ? this.parseSelectionSet() : undefined }); } - // TODO: add grammar comment after it finalizes - parseNullabilityAssertion() { - // Note: Client Controlled Nullability is experimental and may be changed or - // removed in the future. - if (this._options.experimentalClientControlledNullability !== true) { - return undefined; - } - const start = this._lexer.token; - let nullabilityAssertion; - if (this.expectOptionalToken(_tokenKind.TokenKind.BRACKET_L)) { - const innerModifier = this.parseNullabilityAssertion(); - this.expectToken(_tokenKind.TokenKind.BRACKET_R); - nullabilityAssertion = this.node(start, { - kind: _kinds.Kind.LIST_NULLABILITY_OPERATOR, - nullabilityAssertion: innerModifier - }); - } - if (this.expectOptionalToken(_tokenKind.TokenKind.BANG)) { - nullabilityAssertion = this.node(start, { - kind: _kinds.Kind.NON_NULL_ASSERTION, - nullabilityAssertion - }); - } else if (this.expectOptionalToken(_tokenKind.TokenKind.QUESTION_MARK)) { - nullabilityAssertion = this.node(start, { - kind: _kinds.Kind.ERROR_BOUNDARY, - nullabilityAssertion - }); - } - return nullabilityAssertion; - } + /** + * Arguments[Const] : ( Argument[?Const]+ ) + */ + parseArguments(isConst) { const item = isConst ? this.parseConstArgument : this.parseArgument; return this.optionalMany(_tokenKind.TokenKind.PAREN_L, item, _tokenKind.TokenKind.PAREN_R); } + /** + * Argument[Const] : Name : Value[?Const] + */ + parseArgument(isConst = false) { const start = this._lexer.token; const name = this.parseName(); @@ -29934,8 +46171,8 @@ class Parser { } parseConstArgument() { return this.parseArgument(true); - } - // Implements the parsing rules in the Fragments section. + } // Implements the parsing rules in the Fragments section. + /** * Corresponds to both FragmentSpread and InlineFragment in the spec. * @@ -29943,6 +46180,7 @@ class Parser { * * InlineFragment : ... TypeCondition? Directives? SelectionSet */ + parseFragment() { const start = this._lexer.token; this.expectToken(_tokenKind.TokenKind.SPREAD); @@ -29967,12 +46205,13 @@ class Parser { * * TypeCondition : NamedType */ + parseFragmentDefinition() { const start = this._lexer.token; - this.expectKeyword('fragment'); - // Legacy support for defining variables within fragments changes + this.expectKeyword('fragment'); // Legacy support for defining variables within fragments changes // the grammar of FragmentDefinition: // - fragment FragmentName VariableDefinitions? on TypeCondition Directives? SelectionSet + if (this._options.allowLegacyFragmentVariables === true) { return this.node(start, { kind: _kinds.Kind.FRAGMENT_DEFINITION, @@ -29994,12 +46233,33 @@ class Parser { /** * FragmentName : Name but not `on` */ + parseFragmentName() { if (this._lexer.token.value === 'on') { throw this.unexpected(); } return this.parseName(); - } + } // Implements the parsing rules in the Values section. + + /** + * Value[Const] : + * - [~Const] Variable + * - IntValue + * - FloatValue + * - StringValue + * - BooleanValue + * - NullValue + * - EnumValue + * - ListValue[?Const] + * - ObjectValue[?Const] + * + * BooleanValue : one of `true` `false` + * + * NullValue : `null` + * + * EnumValue : Name but not `true`, `false` or `null` + */ + parseValueLiteral(isConst) { const token = this._lexer.token; switch (token.kind) { @@ -30072,6 +46332,12 @@ class Parser { block: token.kind === _tokenKind.TokenKind.BLOCK_STRING }); } + /** + * ListValue[Const] : + * - [ ] + * - [ Value[?Const]+ ] + */ + parseList(isConst) { const item = () => this.parseValueLiteral(isConst); return this.node(this._lexer.token, { @@ -30079,6 +46345,14 @@ class Parser { values: this.any(_tokenKind.TokenKind.BRACKET_L, item, _tokenKind.TokenKind.BRACKET_R) }); } + /** + * ``` + * ObjectValue[Const] : + * - { } + * - { ObjectField[?Const]+ } + * ``` + */ + parseObject(isConst) { const item = () => this.parseObjectField(isConst); return this.node(this._lexer.token, { @@ -30086,6 +46360,10 @@ class Parser { fields: this.any(_tokenKind.TokenKind.BRACE_L, item, _tokenKind.TokenKind.BRACE_R) }); } + /** + * ObjectField[Const] : Name : Value[?Const] + */ + parseObjectField(isConst) { const start = this._lexer.token; const name = this.parseName(); @@ -30095,7 +46373,12 @@ class Parser { name, value: this.parseValueLiteral(isConst) }); - } + } // Implements the parsing rules in the Directives section. + + /** + * Directives[Const] : Directive[?Const]+ + */ + parseDirectives(isConst) { const directives = []; while (this.peek(_tokenKind.TokenKind.AT)) { @@ -30106,6 +46389,12 @@ class Parser { parseConstDirectives() { return this.parseDirectives(true); } + /** + * ``` + * Directive[Const] : @ Name Arguments[?Const]? + * ``` + */ + parseDirective(isConst) { const start = this._lexer.token; this.expectToken(_tokenKind.TokenKind.AT); @@ -30114,14 +46403,15 @@ class Parser { name: this.parseName(), arguments: this.parseArguments(isConst) }); - } - // Implements the parsing rules in the Types section. + } // Implements the parsing rules in the Types section. + /** * Type : * - NamedType * - ListType * - NonNullType */ + parseTypeReference() { const start = this._lexer.token; let type; @@ -30146,19 +46436,21 @@ class Parser { /** * NamedType : Name */ + parseNamedType() { return this.node(this._lexer.token, { kind: _kinds.Kind.NAMED_TYPE, name: this.parseName() }); - } - // Implements the parsing rules in the Type Definition section. + } // Implements the parsing rules in the Type Definition section. + peekDescription() { return this.peek(_tokenKind.TokenKind.STRING) || this.peek(_tokenKind.TokenKind.BLOCK_STRING); } /** * Description : StringValue */ + parseDescription() { if (this.peekDescription()) { return this.parseStringLiteral(); @@ -30169,6 +46461,7 @@ class Parser { * SchemaDefinition : Description? schema Directives[Const]? { OperationTypeDefinition+ } * ``` */ + parseSchemaDefinition() { const start = this._lexer.token; const description = this.parseDescription(); @@ -30185,6 +46478,7 @@ class Parser { /** * OperationTypeDefinition : OperationType : NamedType */ + parseOperationTypeDefinition() { const start = this._lexer.token; const operation = this.parseOperationType(); @@ -30199,6 +46493,7 @@ class Parser { /** * ScalarTypeDefinition : Description? scalar Name Directives[Const]? */ + parseScalarTypeDefinition() { const start = this._lexer.token; const description = this.parseDescription(); @@ -30217,6 +46512,7 @@ class Parser { * Description? * type Name ImplementsInterfaces? Directives[Const]? FieldsDefinition? */ + parseObjectTypeDefinition() { const start = this._lexer.token; const description = this.parseDescription(); @@ -30239,6 +46535,7 @@ class Parser { * - implements `&`? NamedType * - ImplementsInterfaces & NamedType */ + parseImplementsInterfaces() { return this.expectOptionalKeyword('implements') ? this.delimitedMany(_tokenKind.TokenKind.AMP, this.parseNamedType) : []; } @@ -30247,6 +46544,7 @@ class Parser { * FieldsDefinition : { FieldDefinition+ } * ``` */ + parseFieldsDefinition() { return this.optionalMany(_tokenKind.TokenKind.BRACE_L, this.parseFieldDefinition, _tokenKind.TokenKind.BRACE_R); } @@ -30254,6 +46552,7 @@ class Parser { * FieldDefinition : * - Description? Name ArgumentsDefinition? : Type Directives[Const]? */ + parseFieldDefinition() { const start = this._lexer.token; const description = this.parseDescription(); @@ -30274,6 +46573,7 @@ class Parser { /** * ArgumentsDefinition : ( InputValueDefinition+ ) */ + parseArgumentDefs() { return this.optionalMany(_tokenKind.TokenKind.PAREN_L, this.parseInputValueDef, _tokenKind.TokenKind.PAREN_R); } @@ -30281,6 +46581,7 @@ class Parser { * InputValueDefinition : * - Description? Name : Type DefaultValue? Directives[Const]? */ + parseInputValueDef() { const start = this._lexer.token; const description = this.parseDescription(); @@ -30305,6 +46606,7 @@ class Parser { * InterfaceTypeDefinition : * - Description? interface Name Directives[Const]? FieldsDefinition? */ + parseInterfaceTypeDefinition() { const start = this._lexer.token; const description = this.parseDescription(); @@ -30326,6 +46628,7 @@ class Parser { * UnionTypeDefinition : * - Description? union Name Directives[Const]? UnionMemberTypes? */ + parseUnionTypeDefinition() { const start = this._lexer.token; const description = this.parseDescription(); @@ -30346,6 +46649,7 @@ class Parser { * - = `|`? NamedType * - UnionMemberTypes | NamedType */ + parseUnionMemberTypes() { return this.expectOptionalToken(_tokenKind.TokenKind.EQUALS) ? this.delimitedMany(_tokenKind.TokenKind.PIPE, this.parseNamedType) : []; } @@ -30353,6 +46657,7 @@ class Parser { * EnumTypeDefinition : * - Description? enum Name Directives[Const]? EnumValuesDefinition? */ + parseEnumTypeDefinition() { const start = this._lexer.token; const description = this.parseDescription(); @@ -30373,12 +46678,14 @@ class Parser { * EnumValuesDefinition : { EnumValueDefinition+ } * ``` */ + parseEnumValuesDefinition() { return this.optionalMany(_tokenKind.TokenKind.BRACE_L, this.parseEnumValueDefinition, _tokenKind.TokenKind.BRACE_R); } /** * EnumValueDefinition : Description? EnumValue Directives[Const]? */ + parseEnumValueDefinition() { const start = this._lexer.token; const description = this.parseDescription(); @@ -30394,6 +46701,7 @@ class Parser { /** * EnumValue : Name but not `true`, `false` or `null` */ + parseEnumValueName() { if (this._lexer.token.value === 'true' || this._lexer.token.value === 'false' || this._lexer.token.value === 'null') { throw (0, _syntaxError.syntaxError)(this._lexer.source, this._lexer.token.start, `${getTokenDesc(this._lexer.token)} is reserved and cannot be used for an enum value.`); @@ -30404,6 +46712,7 @@ class Parser { * InputObjectTypeDefinition : * - Description? input Name Directives[Const]? InputFieldsDefinition? */ + parseInputObjectTypeDefinition() { const start = this._lexer.token; const description = this.parseDescription(); @@ -30424,6 +46733,7 @@ class Parser { * InputFieldsDefinition : { InputValueDefinition+ } * ``` */ + parseInputFieldsDefinition() { return this.optionalMany(_tokenKind.TokenKind.BRACE_L, this.parseInputValueDef, _tokenKind.TokenKind.BRACE_R); } @@ -30440,6 +46750,7 @@ class Parser { * - EnumTypeExtension * - InputObjectTypeDefinition */ + parseTypeSystemExtension() { const keywordToken = this._lexer.lookahead(); if (keywordToken.kind === _tokenKind.TokenKind.NAME) { @@ -30469,6 +46780,7 @@ class Parser { * - extend schema Directives[Const] * ``` */ + parseSchemaExtension() { const start = this._lexer.token; this.expectKeyword('extend'); @@ -30488,6 +46800,7 @@ class Parser { * ScalarTypeExtension : * - extend scalar Name Directives[Const] */ + parseScalarTypeExtension() { const start = this._lexer.token; this.expectKeyword('extend'); @@ -30509,6 +46822,7 @@ class Parser { * - extend type Name ImplementsInterfaces? Directives[Const] * - extend type Name ImplementsInterfaces */ + parseObjectTypeExtension() { const start = this._lexer.token; this.expectKeyword('extend'); @@ -30534,6 +46848,7 @@ class Parser { * - extend interface Name ImplementsInterfaces? Directives[Const] * - extend interface Name ImplementsInterfaces */ + parseInterfaceTypeExtension() { const start = this._lexer.token; this.expectKeyword('extend'); @@ -30558,6 +46873,7 @@ class Parser { * - extend union Name Directives[Const]? UnionMemberTypes * - extend union Name Directives[Const] */ + parseUnionTypeExtension() { const start = this._lexer.token; this.expectKeyword('extend'); @@ -30580,6 +46896,7 @@ class Parser { * - extend enum Name Directives[Const]? EnumValuesDefinition * - extend enum Name Directives[Const] */ + parseEnumTypeExtension() { const start = this._lexer.token; this.expectKeyword('extend'); @@ -30602,6 +46919,7 @@ class Parser { * - extend input Name Directives[Const]? InputFieldsDefinition * - extend input Name Directives[Const] */ + parseInputObjectTypeExtension() { const start = this._lexer.token; this.expectKeyword('extend'); @@ -30625,6 +46943,7 @@ class Parser { * - Description? directive @ Name ArgumentsDefinition? `repeatable`? on DirectiveLocations * ``` */ + parseDirectiveDefinition() { const start = this._lexer.token; const description = this.parseDescription(); @@ -30649,6 +46968,7 @@ class Parser { * - `|`? DirectiveLocation * - DirectiveLocations | DirectiveLocation */ + parseDirectiveLocations() { return this.delimitedMany(_tokenKind.TokenKind.PIPE, this.parseDirectiveLocation); } @@ -30679,20 +46999,22 @@ class Parser { * `INPUT_OBJECT` * `INPUT_FIELD_DEFINITION` */ + parseDirectiveLocation() { const start = this._lexer.token; const name = this.parseName(); - if (Object.hasOwn(_directiveLocation.DirectiveLocation, name.value)) { + if (Object.prototype.hasOwnProperty.call(_directiveLocation.DirectiveLocation, name.value)) { return name; } throw this.unexpected(start); - } - // Core parsing utility functions + } // Core parsing utility functions + /** * Returns a node that, if configured to do so, sets a "loc" field as a * location object, used to identify the place in the source that created a * given parsed object. */ + node(startToken, node) { if (this._options.noLocation !== true) { node.loc = new _ast.Location(startToken, this._lexer.lastToken, this._lexer.source); @@ -30702,6 +47024,7 @@ class Parser { /** * Determines if the next token is of a given kind */ + peek(kind) { return this._lexer.token.kind === kind; } @@ -30709,6 +47032,7 @@ class Parser { * If the next token is of the given kind, return that token after advancing the lexer. * Otherwise, do not change the parser state and throw an error. */ + expectToken(kind) { const token = this._lexer.token; if (token.kind === kind) { @@ -30721,6 +47045,7 @@ class Parser { * If the next token is of the given kind, return "true" after advancing the lexer. * Otherwise, do not change the parser state and return "false". */ + expectOptionalToken(kind) { const token = this._lexer.token; if (token.kind === kind) { @@ -30733,6 +47058,7 @@ class Parser { * If the next token is a given keyword, advance the lexer. * Otherwise, do not change the parser state and throw an error. */ + expectKeyword(value) { const token = this._lexer.token; if (token.kind === _tokenKind.TokenKind.NAME && token.value === value) { @@ -30745,6 +47071,7 @@ class Parser { * If the next token is a given keyword, return "true" after advancing the lexer. * Otherwise, do not change the parser state and return "false". */ + expectOptionalKeyword(value) { const token = this._lexer.token; if (token.kind === _tokenKind.TokenKind.NAME && token.value === value) { @@ -30756,6 +47083,7 @@ class Parser { /** * Helper function for creating an error when an unexpected lexed token is encountered. */ + unexpected(atToken) { const token = atToken !== null && atToken !== void 0 ? atToken : this._lexer.token; return (0, _syntaxError.syntaxError)(this._lexer.source, token.start, `Unexpected ${getTokenDesc(token)}.`); @@ -30765,6 +47093,7 @@ class Parser { * This list begins with a lex token of openKind and ends with a lex token of closeKind. * Advances the parser to the next lex token after the closing token. */ + any(openKind, parseFn, closeKind) { this.expectToken(openKind); const nodes = []; @@ -30779,6 +47108,7 @@ class Parser { * that begins with a lex token of openKind and ends with a lex token of closeKind. * Advances the parser to the next lex token after the closing token. */ + optionalMany(openKind, parseFn, closeKind) { if (this.expectOptionalToken(openKind)) { const nodes = []; @@ -30794,6 +47124,7 @@ class Parser { * This list begins with a lex token of openKind and ends with a lex token of closeKind. * Advances the parser to the next lex token after the closing token. */ + many(openKind, parseFn, closeKind) { this.expectToken(openKind); const nodes = []; @@ -30807,6 +47138,7 @@ class Parser { * This list may begin with a lex token of delimiterKind followed by items separated by lex tokens of tokenKind. * Advances the parser to the next lex token after last item in the list. */ + delimitedMany(delimiterKind, parseFn) { this.expectOptionalToken(delimiterKind); const nodes = []; @@ -30823,7 +47155,7 @@ class Parser { if (maxTokens !== undefined && token.kind !== _tokenKind.TokenKind.EOF) { ++this._tokenCounter; if (this._tokenCounter > maxTokens) { - throw (0, _syntaxError.syntaxError)(this._lexer.source, token.start, `Document contains more than ${maxTokens} tokens. Parsing aborted.`); + throw (0, _syntaxError.syntaxError)(this._lexer.source, token.start, `Document contains more that ${maxTokens} tokens. Parsing aborted.`); } } } @@ -30839,6 +47171,7 @@ function getTokenDesc(token) { /** * A helper function to describe a token kind as a string for debugging. */ + function getTokenKindDesc(kind) { return (0, _lexer.isPunctuatorTokenKind)(kind) ? `"${kind}"` : kind; } @@ -30851,6 +47184,7 @@ function getTokenKindDesc(kind) { \*************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -30859,7 +47193,6 @@ Object.defineProperty(exports, "__esModule", ({ exports.isConstValueNode = isConstValueNode; exports.isDefinitionNode = isDefinitionNode; exports.isExecutableDefinitionNode = isExecutableDefinitionNode; -exports.isNullabilityAssertionNode = isNullabilityAssertionNode; exports.isSelectionNode = isSelectionNode; exports.isTypeDefinitionNode = isTypeDefinitionNode; exports.isTypeExtensionNode = isTypeExtensionNode; @@ -30877,9 +47210,6 @@ function isExecutableDefinitionNode(node) { function isSelectionNode(node) { return node.kind === _kinds.Kind.FIELD || node.kind === _kinds.Kind.FRAGMENT_SPREAD || node.kind === _kinds.Kind.INLINE_FRAGMENT; } -function isNullabilityAssertionNode(node) { - return node.kind === _kinds.Kind.LIST_NULLABILITY_OPERATOR || node.kind === _kinds.Kind.NON_NULL_ASSERTION || node.kind === _kinds.Kind.ERROR_BOUNDARY; -} function isValueNode(node) { return node.kind === _kinds.Kind.VARIABLE || node.kind === _kinds.Kind.INT || node.kind === _kinds.Kind.FLOAT || node.kind === _kinds.Kind.STRING || node.kind === _kinds.Kind.BOOLEAN || node.kind === _kinds.Kind.NULL || node.kind === _kinds.Kind.ENUM || node.kind === _kinds.Kind.LIST || node.kind === _kinds.Kind.OBJECT; } @@ -30910,6 +47240,7 @@ function isTypeExtensionNode(node) { \****************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -30927,6 +47258,7 @@ function printLocation(location) { /** * Render a helpful description of the location in the GraphQL Source document. */ + function printSourceLocation(source, sourceLocation) { const firstLineColumnOffset = source.locationOffset.column - 1; const body = ''.padStart(firstLineColumnOffset) + source.body; @@ -30937,8 +47269,8 @@ function printSourceLocation(source, sourceLocation) { const columnNum = sourceLocation.column + columnOffset; const locationStr = `${source.name}:${lineNum}:${columnNum}\n`; const lines = body.split(/\r\n|[\n\r]/g); - const locationLine = lines[lineIndex]; - // Special case for minified documents + const locationLine = lines[lineIndex]; // Special case for minified documents + if (locationLine.length > 120) { const subLineIndex = Math.floor(columnNum / 80); const subLineColumnNum = columnNum % 80; @@ -30966,6 +47298,7 @@ function printPrefixedLines(lines) { \**************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -30978,14 +47311,24 @@ exports.printString = printString; */ function printString(str) { return `"${str.replace(escapedRegExp, escapedReplacer)}"`; -} -// eslint-disable-next-line no-control-regex +} // eslint-disable-next-line no-control-regex + const escapedRegExp = /[\x00-\x1f\x22\x5c\x7f-\x9f]/g; function escapedReplacer(str) { return escapeSequences[str.charCodeAt(0)]; -} -// prettier-ignore -const escapeSequences = ['\\u0000', '\\u0001', '\\u0002', '\\u0003', '\\u0004', '\\u0005', '\\u0006', '\\u0007', '\\b', '\\t', '\\n', '\\u000B', '\\f', '\\r', '\\u000E', '\\u000F', '\\u0010', '\\u0011', '\\u0012', '\\u0013', '\\u0014', '\\u0015', '\\u0016', '\\u0017', '\\u0018', '\\u0019', '\\u001A', '\\u001B', '\\u001C', '\\u001D', '\\u001E', '\\u001F', '', '', '\\"', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '\\\\', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '\\u007F', '\\u0080', '\\u0081', '\\u0082', '\\u0083', '\\u0084', '\\u0085', '\\u0086', '\\u0087', '\\u0088', '\\u0089', '\\u008A', '\\u008B', '\\u008C', '\\u008D', '\\u008E', '\\u008F', '\\u0090', '\\u0091', '\\u0092', '\\u0093', '\\u0094', '\\u0095', '\\u0096', '\\u0097', '\\u0098', '\\u0099', '\\u009A', '\\u009B', '\\u009C', '\\u009D', '\\u009E', '\\u009F']; +} // prettier-ignore + +const escapeSequences = ['\\u0000', '\\u0001', '\\u0002', '\\u0003', '\\u0004', '\\u0005', '\\u0006', '\\u0007', '\\b', '\\t', '\\n', '\\u000B', '\\f', '\\r', '\\u000E', '\\u000F', '\\u0010', '\\u0011', '\\u0012', '\\u0013', '\\u0014', '\\u0015', '\\u0016', '\\u0017', '\\u0018', '\\u0019', '\\u001A', '\\u001B', '\\u001C', '\\u001D', '\\u001E', '\\u001F', '', '', '\\"', '', '', '', '', '', '', '', '', '', '', '', '', '', +// 2F +'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', +// 3F +'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', +// 4F +'', '', '', '', '', '', '', '', '', '', '', '', '\\\\', '', '', '', +// 5F +'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', +// 6F +'', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '\\u007F', '\\u0080', '\\u0081', '\\u0082', '\\u0083', '\\u0084', '\\u0085', '\\u0086', '\\u0087', '\\u0088', '\\u0089', '\\u008A', '\\u008B', '\\u008C', '\\u008D', '\\u008E', '\\u008F', '\\u0090', '\\u0091', '\\u0092', '\\u0093', '\\u0094', '\\u0095', '\\u0096', '\\u0097', '\\u0098', '\\u0099', '\\u009A', '\\u009B', '\\u009C', '\\u009D', '\\u009E', '\\u009F']; /***/ }), @@ -30995,6 +47338,7 @@ const escapeSequences = ['\\u0000', '\\u0001', '\\u0002', '\\u0003', '\\u0004', \**********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -31008,6 +47352,7 @@ var _visitor = __webpack_require__(/*! ./visitor.mjs */ "../../../node_modules/g * Converts an AST into a string, using one set of reasonable * formatting rules. */ + function print(ast) { return (0, _visitor.visit)(ast, printDocASTReducer); } @@ -31026,9 +47371,9 @@ const printDocASTReducer = { OperationDefinition: { leave(node) { const varDefs = wrap('(', join(node.variableDefinitions, ', '), ')'); - const prefix = join([node.operation, join([node.name, varDefs]), join(node.directives, ' ')], ' '); - // Anonymous queries with no directives or variable definitions can use + const prefix = join([node.operation, join([node.name, varDefs]), join(node.directives, ' ')], ' '); // Anonymous queries with no directives or variable definitions can use // the query short form. + return (prefix === 'query' ? '' : prefix + ' ') + node.selectionSet; } }, @@ -31050,19 +47395,15 @@ const printDocASTReducer = { alias, name, arguments: args, - nullabilityAssertion, directives, selectionSet }) { - const prefix = join([wrap('', alias, ': '), name], ''); + const prefix = wrap('', alias, ': ') + name; let argsLine = prefix + wrap('(', join(args, ', '), ')'); if (argsLine.length > MAX_LINE_LENGTH) { argsLine = prefix + wrap('(\n', indent(join(args, '\n')), '\n)'); } - return join([argsLine, - // Note: Client Controlled Nullability is experimental and may be - // changed or removed in the future. - nullabilityAssertion, wrap(' ', join(directives, ' ')), wrap(' ', selectionSet)]); + return join([argsLine, join(directives, ' '), selectionSet], ' '); } }, Argument: { @@ -31071,28 +47412,6 @@ const printDocASTReducer = { value }) => name + ': ' + value }, - // Nullability Modifiers - ListNullabilityOperator: { - leave({ - nullabilityAssertion - }) { - return join(['[', nullabilityAssertion, ']']); - } - }, - NonNullAssertion: { - leave({ - nullabilityAssertion - }) { - return join([nullabilityAssertion, '!']); - } - }, - ErrorBoundary: { - leave({ - nullabilityAssertion - }) { - return join([nullabilityAssertion, '?']); - } - }, // Fragments FragmentSpread: { leave: ({ @@ -31114,8 +47433,8 @@ const printDocASTReducer = { variableDefinitions, directives, selectionSet - }) => - // Note: fragment variable definitions are experimental and may be changed + } // Note: fragment variable definitions are experimental and may be changed + ) => // or removed in the future. `fragment ${name}${wrap('(', join(variableDefinitions, ', '), ')')} ` + `on ${typeCondition} ${wrap('', join(directives, ' '), ' ')}` + selectionSet }, @@ -31134,7 +47453,7 @@ const printDocASTReducer = { leave: ({ value, block: isBlockString - }) => isBlockString === true ? (0, _blockString.printBlockString)(value) : (0, _printString.printString)(value) + }) => isBlockString ? (0, _blockString.printBlockString)(value) : (0, _printString.printString)(value) }, BooleanValue: { leave: ({ @@ -31152,21 +47471,12 @@ const printDocASTReducer = { ListValue: { leave: ({ values - }) => { - const valuesLine = '[' + join(values, ', ') + ']'; - if (valuesLine.length > MAX_LINE_LENGTH) { - return '[\n' + indent(join(values, '\n')) + '\n]'; - } - return valuesLine; - } + }) => '[' + join(values, ', ') + ']' }, ObjectValue: { leave: ({ fields - }) => { - const fieldsLine = '{ ' + join(fields, ', ') + ' }'; - return fieldsLine.length > MAX_LINE_LENGTH ? block(fields) : fieldsLine; - } + }) => '{' + join(fields, ', ') + '}' }, ObjectField: { leave: ({ @@ -31348,6 +47658,7 @@ const printDocASTReducer = { * Given maybeArray, print an empty string if it is null or empty, otherwise * print all items together separated by separator if provided */ + function join(maybeArray, separator = '') { var _maybeArray$filter$jo; return (_maybeArray$filter$jo = maybeArray === null || maybeArray === void 0 ? void 0 : maybeArray.filter(x => x).join(separator)) !== null && _maybeArray$filter$jo !== void 0 ? _maybeArray$filter$jo : ''; @@ -31355,21 +47666,25 @@ function join(maybeArray, separator = '') { /** * Given array, print each item on its own line, wrapped in an indented `{ }` block. */ + function block(array) { return wrap('{\n', indent(join(array, '\n')), '\n}'); } /** * If maybeString is not null or empty, then wrap with start and end, otherwise print an empty string. */ + function wrap(start, maybeString, end = '') { return maybeString != null && maybeString !== '' ? start + maybeString + end : ''; } function indent(str) { - return wrap(' ', str.replaceAll('\n', '\n ')); + return wrap(' ', str.replace(/\n/g, '\n ')); } function hasMultilineItems(maybeArray) { var _maybeArray$some; + // FIXME: https://github.com/graphql/graphql-js/issues/2203 + /* c8 ignore next */ return (_maybeArray$some = maybeArray === null || maybeArray === void 0 ? void 0 : maybeArray.some(str => str.includes('\n'))) !== null && _maybeArray$some !== void 0 ? _maybeArray$some : false; } @@ -31382,6 +47697,7 @@ function hasMultilineItems(maybeArray) { \*********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -31390,6 +47706,7 @@ Object.defineProperty(exports, "__esModule", ({ exports.Source = void 0; exports.isSource = isSource; var _devAssert = __webpack_require__(/*! ../jsutils/devAssert.mjs */ "../../../node_modules/graphql/jsutils/devAssert.mjs"); +var _inspect = __webpack_require__(/*! ../jsutils/inspect.mjs */ "../../../node_modules/graphql/jsutils/inspect.mjs"); var _instanceOf = __webpack_require__(/*! ../jsutils/instanceOf.mjs */ "../../../node_modules/graphql/jsutils/instanceOf.mjs"); /** * A representation of source input to GraphQL. The `name` and `locationOffset` parameters are @@ -31403,6 +47720,7 @@ class Source { line: 1, column: 1 }) { + typeof body === 'string' || (0, _devAssert.devAssert)(false, `Body must be a string. Received: ${(0, _inspect.inspect)(body)}.`); this.body = body; this.name = name; this.locationOffset = locationOffset; @@ -31431,6 +47749,7 @@ function isSource(source) { \************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -31446,7 +47765,6 @@ var TokenKind; TokenKind['SOF'] = ''; TokenKind['EOF'] = ''; TokenKind['BANG'] = '!'; - TokenKind['QUESTION_MARK'] = '?'; TokenKind['DOLLAR'] = '$'; TokenKind['AMP'] = '&'; TokenKind['PAREN_L'] = '('; @@ -31468,6 +47786,12 @@ var TokenKind; TokenKind['COMMENT'] = 'Comment'; })(TokenKind || (exports.TokenKind = TokenKind = {})); +/** + * The enum type representing the token kinds values. + * + * @deprecated Please use `TokenKind`. Will be remove in v17. + */ + /***/ }), /***/ "../../../node_modules/graphql/language/visitor.mjs": @@ -31476,6 +47800,7 @@ var TokenKind; \**********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -31483,19 +47808,105 @@ Object.defineProperty(exports, "__esModule", ({ })); exports.BREAK = void 0; exports.getEnterLeaveForKind = getEnterLeaveForKind; +exports.getVisitFn = getVisitFn; exports.visit = visit; exports.visitInParallel = visitInParallel; var _devAssert = __webpack_require__(/*! ../jsutils/devAssert.mjs */ "../../../node_modules/graphql/jsutils/devAssert.mjs"); var _inspect = __webpack_require__(/*! ../jsutils/inspect.mjs */ "../../../node_modules/graphql/jsutils/inspect.mjs"); var _ast = __webpack_require__(/*! ./ast.mjs */ "../../../node_modules/graphql/language/ast.mjs"); var _kinds = __webpack_require__(/*! ./kinds.mjs */ "../../../node_modules/graphql/language/kinds.mjs"); +/** + * A visitor is provided to visit, it contains the collection of + * relevant functions to be called during the visitor's traversal. + */ + const BREAK = exports.BREAK = Object.freeze({}); +/** + * visit() will walk through an AST using a depth-first traversal, calling + * the visitor's enter function at each node in the traversal, and calling the + * leave function after visiting that node and all of its child nodes. + * + * By returning different values from the enter and leave functions, the + * behavior of the visitor can be altered, including skipping over a sub-tree of + * the AST (by returning false), editing the AST by returning a value or null + * to remove the value, or to stop the whole traversal by returning BREAK. + * + * When using visit() to edit an AST, the original AST will not be modified, and + * a new version of the AST with the changes applied will be returned from the + * visit function. + * + * ```ts + * const editedAST = visit(ast, { + * enter(node, key, parent, path, ancestors) { + * // @return + * // undefined: no action + * // false: skip visiting this node + * // visitor.BREAK: stop visiting altogether + * // null: delete this node + * // any value: replace this node with the returned value + * }, + * leave(node, key, parent, path, ancestors) { + * // @return + * // undefined: no action + * // false: no action + * // visitor.BREAK: stop visiting altogether + * // null: delete this node + * // any value: replace this node with the returned value + * } + * }); + * ``` + * + * Alternatively to providing enter() and leave() functions, a visitor can + * instead provide functions named the same as the kinds of AST nodes, or + * enter/leave visitors at a named key, leading to three permutations of the + * visitor API: + * + * 1) Named visitors triggered when entering a node of a specific kind. + * + * ```ts + * visit(ast, { + * Kind(node) { + * // enter the "Kind" node + * } + * }) + * ``` + * + * 2) Named visitors that trigger upon entering and leaving a node of a specific kind. + * + * ```ts + * visit(ast, { + * Kind: { + * enter(node) { + * // enter the "Kind" node + * } + * leave(node) { + * // leave the "Kind" node + * } + * } + * }) + * ``` + * + * 3) Generic visitors that trigger upon entering and leaving any node. + * + * ```ts + * visit(ast, { + * enter(node) { + * // enter any node + * }, + * leave(node) { + * // leave any node + * } + * }) + * ``` + */ + function visit(root, visitor, visitorKeys = _ast.QueryDocumentKeys) { const enterLeaveMap = new Map(); for (const kind of Object.values(_kinds.Kind)) { enterLeaveMap.set(kind, getEnterLeaveForKind(visitor, kind)); } /* eslint-disable no-undef-init */ + let stack = undefined; let inArray = Array.isArray(root); let keys = [root]; @@ -31507,6 +47918,7 @@ function visit(root, visitor, visitorKeys = _ast.QueryDocumentKeys) { const path = []; const ancestors = []; /* eslint-enable no-undef-init */ + do { index++; const isLeaving = index === keys.length; @@ -31540,7 +47952,7 @@ function visit(root, visitor, visitorKeys = _ast.QueryDocumentKeys) { edits = stack.edits; inArray = stack.inArray; stack = stack.prev; - } else if (parent != null) { + } else if (parent) { key = inArray ? index : keys[index]; node = parent[key]; if (node === null || node === undefined) { @@ -31580,7 +47992,7 @@ function visit(root, visitor, visitorKeys = _ast.QueryDocumentKeys) { if (isLeaving) { path.pop(); } else { - var _visitorKeys$node$kin; + var _node$kind; stack = { inArray, index, @@ -31589,10 +48001,10 @@ function visit(root, visitor, visitorKeys = _ast.QueryDocumentKeys) { prev: stack }; inArray = Array.isArray(node); - keys = inArray ? node : (_visitorKeys$node$kin = visitorKeys[node.kind]) !== null && _visitorKeys$node$kin !== void 0 ? _visitorKeys$node$kin : []; + keys = inArray ? node : (_node$kind = visitorKeys[node.kind]) !== null && _node$kind !== void 0 ? _node$kind : []; index = -1; edits = []; - if (parent != null) { + if (parent) { ancestors.push(parent); } parent = node; @@ -31600,7 +48012,7 @@ function visit(root, visitor, visitorKeys = _ast.QueryDocumentKeys) { } while (stack !== undefined); if (edits.length !== 0) { // New root - return edits.at(-1)[1]; + return edits[edits.length - 1][1]; } return root; } @@ -31610,6 +48022,7 @@ function visit(root, visitor, visitorKeys = _ast.QueryDocumentKeys) { * * If a prior visitor edits a node, no following visitors will see that node. */ + function visitInParallel(visitors) { const skipping = new Array(visitors.length).fill(null); const mergedVisitor = Object.create(null); @@ -31622,7 +48035,7 @@ function visitInParallel(visitors) { enter, leave } = getEnterLeaveForKind(visitors[i], kind); - hasVisitor ||= enter != null || leave != null; + hasVisitor || (hasVisitor = enter != null || leave != null); enterList[i] = enter; leaveList[i] = leave; } @@ -31670,6 +48083,7 @@ function visitInParallel(visitors) { /** * Given a visitor instance and a node kind, return EnterLeaveVisitor for that kind. */ + function getEnterLeaveForKind(visitor, kind) { const kindVisitor = visitor[kind]; if (typeof kindVisitor === 'object') { @@ -31681,13 +48095,29 @@ function getEnterLeaveForKind(visitor, kind) { enter: kindVisitor, leave: undefined }; - } - // { enter() {}, leave() {} } + } // { enter() {}, leave() {} } + return { enter: visitor.enter, leave: visitor.leave }; } +/** + * Given a visitor instance, if it is leaving or not, and a node kind, return + * the function the visitor runtime should call. + * + * @deprecated Please use `getEnterLeaveForKind` instead. Will be removed in v17 + */ + +/* c8 ignore next 8 */ + +function getVisitFn(visitor, kind, isLeaving) { + const { + enter, + leave + } = getEnterLeaveForKind(visitor, kind); + return isLeaving ? leave : enter; +} /***/ }), @@ -31697,6 +48127,7 @@ function getEnterLeaveForKind(visitor, kind) { \*********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -31704,12 +48135,16 @@ Object.defineProperty(exports, "__esModule", ({ })); exports.assertEnumValueName = assertEnumValueName; exports.assertName = assertName; +var _devAssert = __webpack_require__(/*! ../jsutils/devAssert.mjs */ "../../../node_modules/graphql/jsutils/devAssert.mjs"); var _GraphQLError = __webpack_require__(/*! ../error/GraphQLError.mjs */ "../../../node_modules/graphql/error/GraphQLError.mjs"); var _characterClasses = __webpack_require__(/*! ../language/characterClasses.mjs */ "../../../node_modules/graphql/language/characterClasses.mjs"); /** * Upholds the spec rules about naming. */ + function assertName(name) { + name != null || (0, _devAssert.devAssert)(false, 'Must provide name.'); + typeof name === 'string' || (0, _devAssert.devAssert)(false, 'Expected name to be a string.'); if (name.length === 0) { throw new _GraphQLError.GraphQLError('Expected name to be a non-empty string.'); } @@ -31728,6 +48163,7 @@ function assertName(name) { * * @internal */ + function assertEnumValueName(name) { if (name === 'true' || name === 'false' || name === 'null') { throw new _GraphQLError.GraphQLError(`Enum values cannot be named: ${name}`); @@ -31743,6 +48179,7 @@ function assertEnumValueName(name) { \*********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -31796,6 +48233,7 @@ var _didYouMean = __webpack_require__(/*! ../jsutils/didYouMean.mjs */ "../../.. var _identityFunc = __webpack_require__(/*! ../jsutils/identityFunc.mjs */ "../../../node_modules/graphql/jsutils/identityFunc.mjs"); var _inspect = __webpack_require__(/*! ../jsutils/inspect.mjs */ "../../../node_modules/graphql/jsutils/inspect.mjs"); var _instanceOf = __webpack_require__(/*! ../jsutils/instanceOf.mjs */ "../../../node_modules/graphql/jsutils/instanceOf.mjs"); +var _isObjectLike = __webpack_require__(/*! ../jsutils/isObjectLike.mjs */ "../../../node_modules/graphql/jsutils/isObjectLike.mjs"); var _keyMap = __webpack_require__(/*! ../jsutils/keyMap.mjs */ "../../../node_modules/graphql/jsutils/keyMap.mjs"); var _keyValMap = __webpack_require__(/*! ../jsutils/keyValMap.mjs */ "../../../node_modules/graphql/jsutils/keyValMap.mjs"); var _mapValue = __webpack_require__(/*! ../jsutils/mapValue.mjs */ "../../../node_modules/graphql/jsutils/mapValue.mjs"); @@ -31818,6 +48256,7 @@ function assertType(type) { /** * There are predicates for each kind of GraphQL type. */ + function isScalarType(type) { return (0, _instanceOf.instanceOf)(type, GraphQLScalarType); } @@ -31890,6 +48329,10 @@ function assertNonNullType(type) { } return type; } +/** + * These types may be used as input types for arguments and directives. + */ + function isInputType(type) { return isScalarType(type) || isEnumType(type) || isInputObjectType(type) || isWrappingType(type) && isInputType(type.ofType); } @@ -31899,6 +48342,10 @@ function assertInputType(type) { } return type; } +/** + * These types may be used as output types as the result of fields. + */ + function isOutputType(type) { return isScalarType(type) || isObjectType(type) || isInterfaceType(type) || isUnionType(type) || isEnumType(type) || isWrappingType(type) && isOutputType(type.ofType); } @@ -31908,6 +48355,10 @@ function assertOutputType(type) { } return type; } +/** + * These types may describe types which may be leaf values. + */ + function isLeafType(type) { return isScalarType(type) || isEnumType(type); } @@ -31917,6 +48368,10 @@ function assertLeafType(type) { } return type; } +/** + * These types may describe the parent context of a selection set. + */ + function isCompositeType(type) { return isObjectType(type) || isInterfaceType(type) || isUnionType(type); } @@ -31926,6 +48381,10 @@ function assertCompositeType(type) { } return type; } +/** + * These types may describe the parent context of a selection set. + */ + function isAbstractType(type) { return isInterfaceType(type) || isUnionType(type); } @@ -31954,8 +48413,10 @@ function assertAbstractType(type) { * }) * ``` */ + class GraphQLList { constructor(ofType) { + isType(ofType) || (0, _devAssert.devAssert)(false, `Expected ${(0, _inspect.inspect)(ofType)} to be a GraphQL type.`); this.ofType = ofType; } get [Symbol.toStringTag]() { @@ -31992,6 +48453,7 @@ class GraphQLList { exports.GraphQLList = GraphQLList; class GraphQLNonNull { constructor(ofType) { + isNullableType(ofType) || (0, _devAssert.devAssert)(false, `Expected ${(0, _inspect.inspect)(ofType)} to be a GraphQL nullable type.`); this.ofType = ofType; } get [Symbol.toStringTag]() { @@ -32004,6 +48466,9 @@ class GraphQLNonNull { return this.toString(); } } +/** + * These types wrap and modify other types + */ exports.GraphQLNonNull = GraphQLNonNull; function isWrappingType(type) { return isListType(type) || isNonNullType(type); @@ -32014,6 +48479,10 @@ function assertWrappingType(type) { } return type; } +/** + * These types can all accept null as a value. + */ + function isNullableType(type) { return isType(type) && !isNonNullType(type); } @@ -32028,6 +48497,10 @@ function getNullableType(type) { return isNonNullType(type) ? type.ofType : type; } } +/** + * These named types do not include modifiers like List or NonNull. + */ + function isNamedType(type) { return isScalarType(type) || isObjectType(type) || isInterfaceType(type) || isUnionType(type) || isEnumType(type) || isInputObjectType(type); } @@ -32046,12 +48519,27 @@ function getNamedType(type) { return unwrappedType; } } +/** + * Used while defining GraphQL types to allow for circular references in + * otherwise immutable type definitions. + */ + function resolveReadonlyArrayThunk(thunk) { return typeof thunk === 'function' ? thunk() : thunk; } function resolveObjMapThunk(thunk) { return typeof thunk === 'function' ? thunk() : thunk; } +/** + * Custom extensions + * + * @remarks + * Use a unique identifier name for your extension, for example the name of + * your library or project. Do not use a shortened identifier as this increases + * the risk of conflicts. We recommend you add at most one extension field, + * an object which can contain all the values you need. + */ + /** * Scalar Type Definition * @@ -32096,6 +48584,8 @@ class GraphQLScalarType { this.extensions = (0, _toObjMap.toObjMap)(config.extensions); this.astNode = config.astNode; this.extensionASTNodes = (_config$extensionASTN = config.extensionASTNodes) !== null && _config$extensionASTN !== void 0 ? _config$extensionASTN : []; + config.specifiedByURL == null || typeof config.specifiedByURL === 'string' || (0, _devAssert.devAssert)(false, `${this.name} must provide "specifiedByURL" as a string, ` + `but got: ${(0, _inspect.inspect)(config.specifiedByURL)}.`); + config.serialize == null || typeof config.serialize === 'function' || (0, _devAssert.devAssert)(false, `${this.name} must provide "serialize" function. If this custom Scalar is also used as an input type, ensure "parseValue" and "parseLiteral" functions are also provided.`); if (config.parseLiteral) { typeof config.parseValue === 'function' && typeof config.parseLiteral === 'function' || (0, _devAssert.devAssert)(false, `${this.name} must provide both "parseValue" and "parseLiteral" functions.`); } @@ -32123,6 +48613,7 @@ class GraphQLScalarType { return this.toString(); } } + /** * Object Type Definition * @@ -32173,10 +48664,9 @@ class GraphQLObjectType { this.extensions = (0, _toObjMap.toObjMap)(config.extensions); this.astNode = config.astNode; this.extensionASTNodes = (_config$extensionASTN2 = config.extensionASTNodes) !== null && _config$extensionASTN2 !== void 0 ? _config$extensionASTN2 : []; - // prettier-ignore - // FIXME: blocked by https://github.com/prettier/prettier/issues/14625 - this._fields = defineFieldMap.bind(undefined, config.fields); - this._interfaces = defineInterfaces.bind(undefined, config.interfaces); + this._fields = () => defineFieldMap(config); + this._interfaces = () => defineInterfaces(config); + config.isTypeOf == null || typeof config.isTypeOf === 'function' || (0, _devAssert.devAssert)(false, `${this.name} must provide "isTypeOf" as a function, ` + `but got: ${(0, _inspect.inspect)(config.isTypeOf)}.`); } get [Symbol.toStringTag]() { return 'GraphQLObjectType'; @@ -32213,14 +48703,21 @@ class GraphQLObjectType { } } exports.GraphQLObjectType = GraphQLObjectType; -function defineInterfaces(interfaces) { - return resolveReadonlyArrayThunk(interfaces !== null && interfaces !== void 0 ? interfaces : []); +function defineInterfaces(config) { + var _config$interfaces; + const interfaces = resolveReadonlyArrayThunk((_config$interfaces = config.interfaces) !== null && _config$interfaces !== void 0 ? _config$interfaces : []); + Array.isArray(interfaces) || (0, _devAssert.devAssert)(false, `${config.name} interfaces must be an Array or a function which returns an Array.`); + return interfaces; } -function defineFieldMap(fields) { - const fieldMap = resolveObjMapThunk(fields); +function defineFieldMap(config) { + const fieldMap = resolveObjMapThunk(config.fields); + isPlainObj(fieldMap) || (0, _devAssert.devAssert)(false, `${config.name} fields must be an object with field names as keys or a function which returns such an object.`); return (0, _mapValue.mapValue)(fieldMap, (fieldConfig, fieldName) => { var _fieldConfig$args; + isPlainObj(fieldConfig) || (0, _devAssert.devAssert)(false, `${config.name}.${fieldName} field config must be an object.`); + fieldConfig.resolve == null || typeof fieldConfig.resolve === 'function' || (0, _devAssert.devAssert)(false, `${config.name}.${fieldName} field resolver must be a function if ` + `provided, but got: ${(0, _inspect.inspect)(fieldConfig.resolve)}.`); const argsConfig = (_fieldConfig$args = fieldConfig.args) !== null && _fieldConfig$args !== void 0 ? _fieldConfig$args : {}; + isPlainObj(argsConfig) || (0, _devAssert.devAssert)(false, `${config.name}.${fieldName} args must be an object with argument names as keys.`); return { name: (0, _assertName.assertName)(fieldName), description: fieldConfig.description, @@ -32234,8 +48731,8 @@ function defineFieldMap(fields) { }; }); } -function defineArguments(args) { - return Object.entries(args).map(([argName, argConfig]) => ({ +function defineArguments(config) { + return Object.entries(config).map(([argName, argConfig]) => ({ name: (0, _assertName.assertName)(argName), description: argConfig.description, type: argConfig.type, @@ -32245,6 +48742,9 @@ function defineArguments(args) { astNode: argConfig.astNode })); } +function isPlainObj(obj) { + return (0, _isObjectLike.isObjectLike)(obj) && !Array.isArray(obj); +} function fieldsToFieldsConfig(fields) { return (0, _mapValue.mapValue)(fields, field => ({ description: field.description, @@ -32260,6 +48760,7 @@ function fieldsToFieldsConfig(fields) { /** * @internal */ + function argsToArgsConfig(args) { return (0, _keyValMap.keyValMap)(args, arg => arg.name, arg => ({ description: arg.description, @@ -32273,6 +48774,7 @@ function argsToArgsConfig(args) { function isRequiredArgument(arg) { return isNonNullType(arg.type) && arg.defaultValue === undefined; } + /** * Interface Type Definition * @@ -32301,10 +48803,9 @@ class GraphQLInterfaceType { this.extensions = (0, _toObjMap.toObjMap)(config.extensions); this.astNode = config.astNode; this.extensionASTNodes = (_config$extensionASTN3 = config.extensionASTNodes) !== null && _config$extensionASTN3 !== void 0 ? _config$extensionASTN3 : []; - // prettier-ignore - // FIXME: blocked by https://github.com/prettier/prettier/issues/14625 - this._fields = defineFieldMap.bind(undefined, config.fields); - this._interfaces = defineInterfaces.bind(undefined, config.interfaces); + this._fields = defineFieldMap.bind(undefined, config); + this._interfaces = defineInterfaces.bind(undefined, config); + config.resolveType == null || typeof config.resolveType === 'function' || (0, _devAssert.devAssert)(false, `${this.name} must provide "resolveType" as a function, ` + `but got: ${(0, _inspect.inspect)(config.resolveType)}.`); } get [Symbol.toStringTag]() { return 'GraphQLInterfaceType'; @@ -32340,6 +48841,7 @@ class GraphQLInterfaceType { return this.toString(); } } + /** * Union Type Definition * @@ -32374,7 +48876,8 @@ class GraphQLUnionType { this.extensions = (0, _toObjMap.toObjMap)(config.extensions); this.astNode = config.astNode; this.extensionASTNodes = (_config$extensionASTN4 = config.extensionASTNodes) !== null && _config$extensionASTN4 !== void 0 ? _config$extensionASTN4 : []; - this._types = defineTypes.bind(undefined, config.types); + this._types = defineTypes.bind(undefined, config); + config.resolveType == null || typeof config.resolveType === 'function' || (0, _devAssert.devAssert)(false, `${this.name} must provide "resolveType" as a function, ` + `but got: ${(0, _inspect.inspect)(config.resolveType)}.`); } get [Symbol.toStringTag]() { return 'GraphQLUnionType'; @@ -32404,19 +48907,12 @@ class GraphQLUnionType { } } exports.GraphQLUnionType = GraphQLUnionType; -function defineTypes(types) { - return resolveReadonlyArrayThunk(types); -} -function enumValuesFromConfig(values) { - return Object.entries(values).map(([valueName, valueConfig]) => ({ - name: (0, _assertName.assertEnumValueName)(valueName), - description: valueConfig.description, - value: valueConfig.value !== undefined ? valueConfig.value : valueName, - deprecationReason: valueConfig.deprecationReason, - extensions: (0, _toObjMap.toObjMap)(valueConfig.extensions), - astNode: valueConfig.astNode - })); +function defineTypes(config) { + const types = resolveReadonlyArrayThunk(config.types); + Array.isArray(types) || (0, _devAssert.devAssert)(false, `Must provide Array of types or a function which returns such an array for Union ${config.name}.`); + return types; } + /** * Enum Type Definition * @@ -32440,7 +48936,8 @@ function enumValuesFromConfig(values) { * Note: If a value is not provided in a definition, the name of the enum value * will be used as its internal value. */ -class GraphQLEnumType /* */ { +class GraphQLEnumType { + /* */ constructor(config) { var _config$extensionASTN5; this.name = (0, _assertName.assertName)(config.name); @@ -32448,7 +48945,7 @@ class GraphQLEnumType /* */ { this.extensions = (0, _toObjMap.toObjMap)(config.extensions); this.astNode = config.astNode; this.extensionASTNodes = (_config$extensionASTN5 = config.extensionASTNodes) !== null && _config$extensionASTN5 !== void 0 ? _config$extensionASTN5 : []; - this._values = typeof config.values === 'function' ? config.values : enumValuesFromConfig(config.values); + this._values = typeof config.values === 'function' ? config.values : defineEnumValues(this.name, config.values); this._valueLookup = null; this._nameLookup = null; } @@ -32457,7 +48954,7 @@ class GraphQLEnumType /* */ { } getValues() { if (typeof this._values === 'function') { - this._values = enumValuesFromConfig(this._values()); + this._values = defineEnumValues(this.name, this._values()); } return this._values; } @@ -32467,7 +48964,7 @@ class GraphQLEnumType /* */ { } return this._nameLookup[name]; } - serialize(outputValue /* T */) { + serialize(outputValue) { if (this._valueLookup === null) { this._valueLookup = new Map(this.getValues().map(enumValue => [enumValue.value, enumValue])); } @@ -32477,7 +48974,8 @@ class GraphQLEnumType /* */ { } return enumValue.name; } - parseValue(inputValue) { + parseValue(inputValue) /* T */ + { if (typeof inputValue !== 'string') { const valueStr = (0, _inspect.inspect)(inputValue); throw new _GraphQLError.GraphQLError(`Enum "${this.name}" cannot represent non-string value: ${valueStr}.` + didYouMeanEnumValue(this, valueStr)); @@ -32488,7 +48986,8 @@ class GraphQLEnumType /* */ { } return enumValue.value; } - parseLiteral(valueNode, _variables) { + parseLiteral(valueNode, _variables) /* T */ + { // Note: variables will be resolved to a value before calling this function. if (valueNode.kind !== _kinds.Kind.ENUM) { const valueStr = (0, _printer.print)(valueNode); @@ -32535,6 +49034,21 @@ function didYouMeanEnumValue(enumType, unknownValueStr) { const suggestedValues = (0, _suggestionList.suggestionList)(unknownValueStr, allNames); return (0, _didYouMean.didYouMean)('the enum value', suggestedValues); } +function defineEnumValues(typeName, valueMap) { + isPlainObj(valueMap) || (0, _devAssert.devAssert)(false, `${typeName} values must be an object with value names as keys.`); + return Object.entries(valueMap).map(([valueName, valueConfig]) => { + isPlainObj(valueConfig) || (0, _devAssert.devAssert)(false, `${typeName}.${valueName} must refer to an object with a "value" key ` + `representing an internal value but got: ${(0, _inspect.inspect)(valueConfig)}.`); + return { + name: (0, _assertName.assertEnumValueName)(valueName), + description: valueConfig.description, + value: valueConfig.value !== undefined ? valueConfig.value : valueName, + deprecationReason: valueConfig.deprecationReason, + extensions: (0, _toObjMap.toObjMap)(valueConfig.extensions), + astNode: valueConfig.astNode + }; + }); +} + /** * Input Object Type Definition * @@ -32565,7 +49079,7 @@ class GraphQLInputObjectType { this.astNode = config.astNode; this.extensionASTNodes = (_config$extensionASTN6 = config.extensionASTNodes) !== null && _config$extensionASTN6 !== void 0 ? _config$extensionASTN6 : []; this.isOneOf = (_config$isOneOf = config.isOneOf) !== null && _config$isOneOf !== void 0 ? _config$isOneOf : false; - this._fields = defineInputFieldMap.bind(undefined, config.fields); + this._fields = defineInputFieldMap.bind(undefined, config); } get [Symbol.toStringTag]() { return 'GraphQLInputObjectType'; @@ -32603,17 +49117,21 @@ class GraphQLInputObjectType { } } exports.GraphQLInputObjectType = GraphQLInputObjectType; -function defineInputFieldMap(fields) { - const fieldMap = resolveObjMapThunk(fields); - return (0, _mapValue.mapValue)(fieldMap, (fieldConfig, fieldName) => ({ - name: (0, _assertName.assertName)(fieldName), - description: fieldConfig.description, - type: fieldConfig.type, - defaultValue: fieldConfig.defaultValue, - deprecationReason: fieldConfig.deprecationReason, - extensions: (0, _toObjMap.toObjMap)(fieldConfig.extensions), - astNode: fieldConfig.astNode - })); +function defineInputFieldMap(config) { + const fieldMap = resolveObjMapThunk(config.fields); + isPlainObj(fieldMap) || (0, _devAssert.devAssert)(false, `${config.name} fields must be an object with field names as keys or a function which returns such an object.`); + return (0, _mapValue.mapValue)(fieldMap, (fieldConfig, fieldName) => { + !('resolve' in fieldConfig) || (0, _devAssert.devAssert)(false, `${config.name}.${fieldName} field has a resolve property, but Input Types cannot define resolvers.`); + return { + name: (0, _assertName.assertName)(fieldName), + description: fieldConfig.description, + type: fieldConfig.type, + defaultValue: fieldConfig.defaultValue, + deprecationReason: fieldConfig.deprecationReason, + extensions: (0, _toObjMap.toObjMap)(fieldConfig.extensions), + astNode: fieldConfig.astNode + }; + }); } function isRequiredInputField(field) { return isNonNullType(field.type) && field.defaultValue === undefined; @@ -32627,18 +49145,21 @@ function isRequiredInputField(field) { \*********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.GraphQLStreamDirective = exports.GraphQLSpecifiedByDirective = exports.GraphQLSkipDirective = exports.GraphQLOneOfDirective = exports.GraphQLIncludeDirective = exports.GraphQLDirective = exports.GraphQLDeprecatedDirective = exports.GraphQLDeferDirective = exports.DEFAULT_DEPRECATION_REASON = void 0; +exports.GraphQLSpecifiedByDirective = exports.GraphQLSkipDirective = exports.GraphQLOneOfDirective = exports.GraphQLIncludeDirective = exports.GraphQLDirective = exports.GraphQLDeprecatedDirective = exports.DEFAULT_DEPRECATION_REASON = void 0; exports.assertDirective = assertDirective; exports.isDirective = isDirective; exports.isSpecifiedDirective = isSpecifiedDirective; exports.specifiedDirectives = void 0; +var _devAssert = __webpack_require__(/*! ../jsutils/devAssert.mjs */ "../../../node_modules/graphql/jsutils/devAssert.mjs"); var _inspect = __webpack_require__(/*! ../jsutils/inspect.mjs */ "../../../node_modules/graphql/jsutils/inspect.mjs"); var _instanceOf = __webpack_require__(/*! ../jsutils/instanceOf.mjs */ "../../../node_modules/graphql/jsutils/instanceOf.mjs"); +var _isObjectLike = __webpack_require__(/*! ../jsutils/isObjectLike.mjs */ "../../../node_modules/graphql/jsutils/isObjectLike.mjs"); var _toObjMap = __webpack_require__(/*! ../jsutils/toObjMap.mjs */ "../../../node_modules/graphql/jsutils/toObjMap.mjs"); var _directiveLocation = __webpack_require__(/*! ../language/directiveLocation.mjs */ "../../../node_modules/graphql/language/directiveLocation.mjs"); var _assertName = __webpack_require__(/*! ./assertName.mjs */ "../../../node_modules/graphql/type/assertName.mjs"); @@ -32647,6 +49168,7 @@ var _scalars = __webpack_require__(/*! ./scalars.mjs */ "../../../node_modules/g /** * Test if the given value is a GraphQL directive. */ + function isDirective(directive) { return (0, _instanceOf.instanceOf)(directive, GraphQLDirective); } @@ -32656,6 +49178,16 @@ function assertDirective(directive) { } return directive; } +/** + * Custom extensions + * + * @remarks + * Use a unique identifier name for your extension, for example the name of + * your library or project. Do not use a shortened identifier as this increases + * the risk of conflicts. We recommend you add at most one extension field, + * an object which can contain all the values you need. + */ + /** * Directives are used by the GraphQL runtime as a way of modifying execution * behavior. Type system creators will usually not create these directly. @@ -32669,7 +49201,9 @@ class GraphQLDirective { this.isRepeatable = (_config$isRepeatable = config.isRepeatable) !== null && _config$isRepeatable !== void 0 ? _config$isRepeatable : false; this.extensions = (0, _toObjMap.toObjMap)(config.extensions); this.astNode = config.astNode; + Array.isArray(config.locations) || (0, _devAssert.devAssert)(false, `@${config.name} locations must be an Array.`); const args = (_config$args = config.args) !== null && _config$args !== void 0 ? _config$args : {}; + (0, _isObjectLike.isObjectLike)(args) && !Array.isArray(args) || (0, _devAssert.devAssert)(false, `@${config.name} args must be an object with argument names as keys.`); this.args = (0, _definition.defineArguments)(args); } get [Symbol.toStringTag]() { @@ -32693,6 +49227,7 @@ class GraphQLDirective { return this.toString(); } } + /** * Used to conditionally include fields or fragments. */ @@ -32711,6 +49246,7 @@ const GraphQLIncludeDirective = exports.GraphQLIncludeDirective = new GraphQLDir /** * Used to conditionally skip (exclude) fields or fragments. */ + const GraphQLSkipDirective = exports.GraphQLSkipDirective = new GraphQLDirective({ name: 'skip', description: 'Directs the executor to skip this field or fragment when the `if` argument is true.', @@ -32722,56 +49258,15 @@ const GraphQLSkipDirective = exports.GraphQLSkipDirective = new GraphQLDirective } } }); -/** - * Used to conditionally defer fragments. - */ -const GraphQLDeferDirective = exports.GraphQLDeferDirective = new GraphQLDirective({ - name: 'defer', - description: 'Directs the executor to defer this fragment when the `if` argument is true or undefined.', - locations: [_directiveLocation.DirectiveLocation.FRAGMENT_SPREAD, _directiveLocation.DirectiveLocation.INLINE_FRAGMENT], - args: { - if: { - type: new _definition.GraphQLNonNull(_scalars.GraphQLBoolean), - description: 'Deferred when true or undefined.', - defaultValue: true - }, - label: { - type: _scalars.GraphQLString, - description: 'Unique name' - } - } -}); -/** - * Used to conditionally stream list fields. - */ -const GraphQLStreamDirective = exports.GraphQLStreamDirective = new GraphQLDirective({ - name: 'stream', - description: 'Directs the executor to stream plural fields when the `if` argument is true or undefined.', - locations: [_directiveLocation.DirectiveLocation.FIELD], - args: { - if: { - type: new _definition.GraphQLNonNull(_scalars.GraphQLBoolean), - description: 'Stream when true or undefined.', - defaultValue: true - }, - label: { - type: _scalars.GraphQLString, - description: 'Unique name' - }, - initialCount: { - defaultValue: 0, - type: _scalars.GraphQLInt, - description: 'Number of items to return immediately' - } - } -}); /** * Constant string used for default reason for a deprecation. */ + const DEFAULT_DEPRECATION_REASON = exports.DEFAULT_DEPRECATION_REASON = 'No longer supported'; /** * Used to declare element of a GraphQL schema as deprecated. */ + const GraphQLDeprecatedDirective = exports.GraphQLDeprecatedDirective = new GraphQLDirective({ name: 'deprecated', description: 'Marks an element of a GraphQL schema as no longer supported.', @@ -32787,6 +49282,7 @@ const GraphQLDeprecatedDirective = exports.GraphQLDeprecatedDirective = new Grap /** * Used to provide a URL for specifying the behavior of custom scalar definitions. */ + const GraphQLSpecifiedByDirective = exports.GraphQLSpecifiedByDirective = new GraphQLDirective({ name: 'specifiedBy', description: 'Exposes a URL that specifies the behavior of this scalar.', @@ -32801,6 +49297,7 @@ const GraphQLSpecifiedByDirective = exports.GraphQLSpecifiedByDirective = new Gr /** * Used to indicate an Input Object is a OneOf Input Object. */ + const GraphQLOneOfDirective = exports.GraphQLOneOfDirective = new GraphQLDirective({ name: 'oneOf', description: 'Indicates exactly one field must be supplied and this field must not be `null`.', @@ -32810,6 +49307,7 @@ const GraphQLOneOfDirective = exports.GraphQLOneOfDirective = new GraphQLDirecti /** * The full list of specified directives. */ + const specifiedDirectives = exports.specifiedDirectives = Object.freeze([GraphQLIncludeDirective, GraphQLSkipDirective, GraphQLDeprecatedDirective, GraphQLSpecifiedByDirective, GraphQLOneOfDirective]); function isSpecifiedDirective(directive) { return specifiedDirectives.some(({ @@ -32825,6 +49323,7 @@ function isSpecifiedDirective(directive) { \****************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -32854,12 +49353,6 @@ Object.defineProperty(exports, "GraphQLBoolean", ({ return _scalars.GraphQLBoolean; } })); -Object.defineProperty(exports, "GraphQLDeferDirective", ({ - enumerable: true, - get: function () { - return _directives.GraphQLDeferDirective; - } -})); Object.defineProperty(exports, "GraphQLDeprecatedDirective", ({ enumerable: true, get: function () { @@ -32962,12 +49455,6 @@ Object.defineProperty(exports, "GraphQLSpecifiedByDirective", ({ return _directives.GraphQLSpecifiedByDirective; } })); -Object.defineProperty(exports, "GraphQLStreamDirective", ({ - enumerable: true, - get: function () { - return _directives.GraphQLStreamDirective; - } -})); Object.defineProperty(exports, "GraphQLString", ({ enumerable: true, get: function () { @@ -33392,6 +49879,7 @@ var _assertName = __webpack_require__(/*! ./assertName.mjs */ "../../../node_mod \************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -33474,7 +49962,7 @@ const __Directive = exports.__Directive = new _definition.GraphQLObjectType({ resolve(field, { includeDeprecated }) { - return includeDeprecated === true ? field.args : field.args.filter(arg => arg.deprecationReason == null); + return includeDeprecated ? field.args : field.args.filter(arg => arg.deprecationReason == null); } } }) @@ -33594,6 +50082,7 @@ const __Type = exports.__Type = new _definition.GraphQLObjectType({ } /* c8 ignore next 3 */ // Not reachable, all possible types have been considered) + false || (0, _invariant.invariant)(false, `Unexpected type: "${(0, _inspect.inspect)(type)}".`); } }, @@ -33603,9 +50092,8 @@ const __Type = exports.__Type = new _definition.GraphQLObjectType({ }, description: { type: _scalars.GraphQLString, - resolve: type => - // FIXME: add test case - /* c8 ignore next */ + resolve: (type // FIXME: add test case + ) => /* c8 ignore next */ 'description' in type ? type.description : undefined }, specifiedByURL: { @@ -33625,7 +50113,7 @@ const __Type = exports.__Type = new _definition.GraphQLObjectType({ }) { if ((0, _definition.isObjectType)(type) || (0, _definition.isInterfaceType)(type)) { const fields = Object.values(type.getFields()); - return includeDeprecated === true ? fields : fields.filter(field => field.deprecationReason == null); + return includeDeprecated ? fields : fields.filter(field => field.deprecationReason == null); } } }, @@ -33660,7 +50148,7 @@ const __Type = exports.__Type = new _definition.GraphQLObjectType({ }) { if ((0, _definition.isEnumType)(type)) { const values = type.getValues(); - return includeDeprecated === true ? values : values.filter(field => field.deprecationReason == null); + return includeDeprecated ? values : values.filter(field => field.deprecationReason == null); } } }, @@ -33677,7 +50165,7 @@ const __Type = exports.__Type = new _definition.GraphQLObjectType({ }) { if ((0, _definition.isInputObjectType)(type)) { const values = Object.values(type.getFields()); - return includeDeprecated === true ? values : values.filter(field => field.deprecationReason == null); + return includeDeprecated ? values : values.filter(field => field.deprecationReason == null); } } }, @@ -33718,7 +50206,7 @@ const __Field = exports.__Field = new _definition.GraphQLObjectType({ resolve(field, { includeDeprecated }) { - return includeDeprecated === true ? field.args : field.args.filter(arg => arg.deprecationReason == null); + return includeDeprecated ? field.args : field.args.filter(arg => arg.deprecationReason == null); } }, type: { @@ -33848,6 +50336,7 @@ const __TypeKind = exports.__TypeKind = new _definition.GraphQLEnumType({ * Note that these are GraphQLField and not GraphQLFieldConfig, * so the format for args is different. */ + const SchemaMetaFieldDef = exports.SchemaMetaFieldDef = { name: '__schema', type: new _definition.GraphQLNonNull(__Schema), @@ -33909,6 +50398,7 @@ function isIntrospectionType(type) { \******************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -33927,11 +50417,13 @@ var _definition = __webpack_require__(/*! ./definition.mjs */ "../../../node_mod * Maximum possible Int value as per GraphQL Spec (32-bit signed integer). * n.b. This differs from JavaScript's numbers that are IEEE 754 doubles safe up-to 2^53 - 1 * */ + const GRAPHQL_MAX_INT = exports.GRAPHQL_MAX_INT = 2147483647; /** * Minimum possible Int value as per GraphQL Spec (32-bit signed integer). * n.b. This differs from JavaScript's numbers that are IEEE 754 doubles safe starting at -(2^53 - 1) * */ + const GRAPHQL_MIN_INT = exports.GRAPHQL_MIN_INT = -2147483648; const GraphQLInt = exports.GraphQLInt = new _definition.GraphQLScalarType({ name: 'Int', @@ -34002,9 +50494,7 @@ const GraphQLFloat = exports.GraphQLFloat = new _definition.GraphQLScalarType({ }, parseLiteral(valueNode) { if (valueNode.kind !== _kinds.Kind.FLOAT && valueNode.kind !== _kinds.Kind.INT) { - throw new _GraphQLError.GraphQLError(`Float cannot represent non numeric value: ${(0, _printer.print)(valueNode)}`, { - nodes: valueNode - }); + throw new _GraphQLError.GraphQLError(`Float cannot represent non numeric value: ${(0, _printer.print)(valueNode)}`, valueNode); } return parseFloat(valueNode.value); } @@ -34013,9 +50503,9 @@ const GraphQLString = exports.GraphQLString = new _definition.GraphQLScalarType( name: 'String', description: 'The `String` scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.', serialize(outputValue) { - const coercedValue = serializeObject(outputValue); - // Serialize string, boolean and number values to a string, but do not + const coercedValue = serializeObject(outputValue); // Serialize string, boolean and number values to a string, but do not // attempt to coerce object, function, symbol, or other types as strings. + if (typeof coercedValue === 'string') { return coercedValue; } @@ -34106,10 +50596,10 @@ function isSpecifiedScalarType(type) { return specifiedScalarTypes.some(({ name }) => type.name === name); -} -// Support serializing objects with custom valueOf() or toJSON() functions - +} // Support serializing objects with custom valueOf() or toJSON() functions - // a common way to represent a complex value which can be represented as // a string (ex: MongoDB id objects). + function serializeObject(outputValue) { if ((0, _isObjectLike.isObjectLike)(outputValue)) { if (typeof outputValue.valueOf === 'function') { @@ -34133,6 +50623,7 @@ function serializeObject(outputValue) { \*****************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -34141,8 +50632,10 @@ Object.defineProperty(exports, "__esModule", ({ exports.GraphQLSchema = void 0; exports.assertSchema = assertSchema; exports.isSchema = isSchema; +var _devAssert = __webpack_require__(/*! ../jsutils/devAssert.mjs */ "../../../node_modules/graphql/jsutils/devAssert.mjs"); var _inspect = __webpack_require__(/*! ../jsutils/inspect.mjs */ "../../../node_modules/graphql/jsutils/inspect.mjs"); var _instanceOf = __webpack_require__(/*! ../jsutils/instanceOf.mjs */ "../../../node_modules/graphql/jsutils/instanceOf.mjs"); +var _isObjectLike = __webpack_require__(/*! ../jsutils/isObjectLike.mjs */ "../../../node_modules/graphql/jsutils/isObjectLike.mjs"); var _toObjMap = __webpack_require__(/*! ../jsutils/toObjMap.mjs */ "../../../node_modules/graphql/jsutils/toObjMap.mjs"); var _ast = __webpack_require__(/*! ../language/ast.mjs */ "../../../node_modules/graphql/language/ast.mjs"); var _definition = __webpack_require__(/*! ./definition.mjs */ "../../../node_modules/graphql/type/definition.mjs"); @@ -34151,6 +50644,7 @@ var _introspection = __webpack_require__(/*! ./introspection.mjs */ "../../../no /** * Test if the given value is a GraphQL schema. */ + function isSchema(schema) { return (0, _instanceOf.instanceOf)(schema, GraphQLSchema); } @@ -34160,6 +50654,16 @@ function assertSchema(schema) { } return schema; } +/** + * Custom extensions + * + * @remarks + * Use a unique identifier name for your extension, for example the name of + * your library or project. Do not use a shortened identifier as this increases + * the risk of conflicts. We recommend you add at most one extension field, + * an object which can contain all the values you need. + */ + /** * Schema Definition * @@ -34229,22 +50733,28 @@ function assertSchema(schema) { * ``` */ class GraphQLSchema { + // Used as a cache for validateSchema(). constructor(config) { var _config$extensionASTN, _config$directives; + // If this schema was built from a source known to be valid, then it may be // marked with assumeValid to avoid an additional type system validation. - this.__validationErrors = config.assumeValid === true ? [] : undefined; + this.__validationErrors = config.assumeValid === true ? [] : undefined; // Check for common mistakes during construction to produce early errors. + + (0, _isObjectLike.isObjectLike)(config) || (0, _devAssert.devAssert)(false, 'Must provide configuration object.'); + !config.types || Array.isArray(config.types) || (0, _devAssert.devAssert)(false, `"types" must be Array if provided but got: ${(0, _inspect.inspect)(config.types)}.`); + !config.directives || Array.isArray(config.directives) || (0, _devAssert.devAssert)(false, '"directives" must be Array if provided but got: ' + `${(0, _inspect.inspect)(config.directives)}.`); this.description = config.description; this.extensions = (0, _toObjMap.toObjMap)(config.extensions); this.astNode = config.astNode; this.extensionASTNodes = (_config$extensionASTN = config.extensionASTNodes) !== null && _config$extensionASTN !== void 0 ? _config$extensionASTN : []; this._queryType = config.query; this._mutationType = config.mutation; - this._subscriptionType = config.subscription; - // Provide specified directives (e.g. @include and @skip) by default. - this._directives = (_config$directives = config.directives) !== null && _config$directives !== void 0 ? _config$directives : _directives.specifiedDirectives; - // To preserve order of user-provided types, we add first to add them to + this._subscriptionType = config.subscription; // Provide specified directives (e.g. @include and @skip) by default. + + this._directives = (_config$directives = config.directives) !== null && _config$directives !== void 0 ? _config$directives : _directives.specifiedDirectives; // To preserve order of user-provided types, we add first to add them to // the set of "collected" types, so `collectReferencedTypes` ignore them. + const allReferencedTypes = new Set(config.types); if (config.types != null) { for (const type of config.types) { @@ -34271,17 +50781,18 @@ class GraphQLSchema { } } } - collectReferencedTypes(_introspection.__Schema, allReferencedTypes); - // Storing the resulting map for reference by the schema. + collectReferencedTypes(_introspection.__Schema, allReferencedTypes); // Storing the resulting map for reference by the schema. + this._typeMap = Object.create(null); - this._subTypeMap = new Map(); - // Keep track of all implementations by interface name. + this._subTypeMap = Object.create(null); // Keep track of all implementations by interface name. + this._implementationsMap = Object.create(null); for (const namedType of allReferencedTypes) { if (namedType == null) { continue; } const typeName = namedType.name; + typeName || (0, _devAssert.devAssert)(false, 'One of the provided types for building the Schema is missing a name.'); if (this._typeMap[typeName] !== undefined) { throw new Error(`Schema must contain uniquely named types but contains multiple types named "${typeName}".`); } @@ -34356,17 +50867,25 @@ class GraphQLSchema { }; } isSubType(abstractType, maybeSubType) { - let set = this._subTypeMap.get(abstractType); - if (set === undefined) { + let map = this._subTypeMap[abstractType.name]; + if (map === undefined) { + map = Object.create(null); if ((0, _definition.isUnionType)(abstractType)) { - set = new Set(abstractType.getTypes()); + for (const type of abstractType.getTypes()) { + map[type.name] = true; + } } else { const implementations = this.getImplementations(abstractType); - set = new Set([...implementations.objects, ...implementations.interfaces]); + for (const type of implementations.objects) { + map[type.name] = true; + } + for (const type of implementations.interfaces) { + map[type.name] = true; + } } - this._subTypeMap.set(abstractType, set); + this._subTypeMap[abstractType.name] = map; } - return set.has(maybeSubType); + return map[maybeSubType.name] !== undefined; } getDirectives() { return this._directives; @@ -34374,33 +50893,6 @@ class GraphQLSchema { getDirective(name) { return this.getDirectives().find(directive => directive.name === name); } - /** - * This method looks up the field on the given type definition. - * It has special casing for the three introspection fields, `__schema`, - * `__type` and `__typename`. - * - * `__typename` is special because it can always be queried as a field, even - * in situations where no other fields are allowed, like on a Union. - * - * `__schema` and `__type` could get automatically added to the query type, - * but that would require mutating type definitions, which would cause issues. - */ - getField(parentType, fieldName) { - switch (fieldName) { - case _introspection.SchemaMetaFieldDef.name: - return this.getQueryType() === parentType ? _introspection.SchemaMetaFieldDef : undefined; - case _introspection.TypeMetaFieldDef.name: - return this.getQueryType() === parentType ? _introspection.TypeMetaFieldDef : undefined; - case _introspection.TypeNameMetaFieldDef.name: - return _introspection.TypeNameMetaFieldDef; - } - // this function is part "hot" path inside executor and check presence - // of 'getFields' is faster than to use `!isUnionType` - if ('getFields' in parentType) { - return parentType.getFields()[fieldName]; - } - return undefined; - } toConfig() { return { description: this.description, @@ -34452,6 +50944,7 @@ function collectReferencedTypes(type, typeSet) { \*******************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -34459,9 +50952,6 @@ Object.defineProperty(exports, "__esModule", ({ })); exports.assertValidSchema = assertValidSchema; exports.validateSchema = validateSchema; -var _AccumulatorMap = __webpack_require__(/*! ../jsutils/AccumulatorMap.mjs */ "../../../node_modules/graphql/jsutils/AccumulatorMap.mjs"); -var _capitalize = __webpack_require__(/*! ../jsutils/capitalize.mjs */ "../../../node_modules/graphql/jsutils/capitalize.mjs"); -var _formatList = __webpack_require__(/*! ../jsutils/formatList.mjs */ "../../../node_modules/graphql/jsutils/formatList.mjs"); var _inspect = __webpack_require__(/*! ../jsutils/inspect.mjs */ "../../../node_modules/graphql/jsutils/inspect.mjs"); var _GraphQLError = __webpack_require__(/*! ../error/GraphQLError.mjs */ "../../../node_modules/graphql/error/GraphQLError.mjs"); var _ast = __webpack_require__(/*! ../language/ast.mjs */ "../../../node_modules/graphql/language/ast.mjs"); @@ -34477,20 +50967,21 @@ var _schema = __webpack_require__(/*! ./schema.mjs */ "../../../node_modules/gra * Validation runs synchronously, returning an array of encountered errors, or * an empty array if no errors were encountered and the Schema is valid. */ + function validateSchema(schema) { // First check to ensure the provided value is in fact a GraphQLSchema. - (0, _schema.assertSchema)(schema); - // If this Schema has already been validated, return the previous results. + (0, _schema.assertSchema)(schema); // If this Schema has already been validated, return the previous results. + if (schema.__validationErrors) { return schema.__validationErrors; - } - // Validate the schema, producing a list of errors. + } // Validate the schema, producing a list of errors. + const context = new SchemaValidationContext(schema); validateRootTypes(context); validateDirectives(context); - validateTypes(context); - // Persist the results of validation before returning to ensure validation + validateTypes(context); // Persist the results of validation before returning to ensure validation // does not run multiple times for this schema. + const errors = context.getErrors(); schema.__validationErrors = errors; return errors; @@ -34499,6 +50990,7 @@ function validateSchema(schema) { * Utility function which asserts a schema is valid by throwing an error if * it is invalid. */ + function assertValidSchema(schema) { const errors = validateSchema(schema); if (errors.length !== 0) { @@ -34522,28 +51014,22 @@ class SchemaValidationContext { } function validateRootTypes(context) { const schema = context.schema; - if (schema.getQueryType() == null) { + const queryType = schema.getQueryType(); + if (!queryType) { context.reportError('Query root type must be provided.', schema.astNode); + } else if (!(0, _definition.isObjectType)(queryType)) { + var _getOperationTypeNode; + context.reportError(`Query root type must be Object type, it cannot be ${(0, _inspect.inspect)(queryType)}.`, (_getOperationTypeNode = getOperationTypeNode(schema, _ast.OperationTypeNode.QUERY)) !== null && _getOperationTypeNode !== void 0 ? _getOperationTypeNode : queryType.astNode); } - const rootTypesMap = new _AccumulatorMap.AccumulatorMap(); - for (const operationType of Object.values(_ast.OperationTypeNode)) { - const rootType = schema.getRootType(operationType); - if (rootType != null) { - if (!(0, _definition.isObjectType)(rootType)) { - var _getOperationTypeNode; - const operationTypeStr = (0, _capitalize.capitalize)(operationType); - const rootTypeStr = (0, _inspect.inspect)(rootType); - context.reportError(operationType === _ast.OperationTypeNode.QUERY ? `${operationTypeStr} root type must be Object type, it cannot be ${rootTypeStr}.` : `${operationTypeStr} root type must be Object type if provided, it cannot be ${rootTypeStr}.`, (_getOperationTypeNode = getOperationTypeNode(schema, operationType)) !== null && _getOperationTypeNode !== void 0 ? _getOperationTypeNode : rootType.astNode); - } else { - rootTypesMap.add(rootType, operationType); - } - } + const mutationType = schema.getMutationType(); + if (mutationType && !(0, _definition.isObjectType)(mutationType)) { + var _getOperationTypeNode2; + context.reportError('Mutation root type must be Object type if provided, it cannot be ' + `${(0, _inspect.inspect)(mutationType)}.`, (_getOperationTypeNode2 = getOperationTypeNode(schema, _ast.OperationTypeNode.MUTATION)) !== null && _getOperationTypeNode2 !== void 0 ? _getOperationTypeNode2 : mutationType.astNode); } - for (const [rootType, operationTypes] of rootTypesMap) { - if (operationTypes.length > 1) { - const operationList = (0, _formatList.andList)(operationTypes); - context.reportError(`All root types must be different, "${rootType.name}" type is used as ${operationList} root types.`, operationTypes.map(operationType => getOperationTypeNode(schema, operationType))); - } + const subscriptionType = schema.getSubscriptionType(); + if (subscriptionType && !(0, _definition.isObjectType)(subscriptionType)) { + var _getOperationTypeNode3; + context.reportError('Subscription root type must be Object type if provided, it cannot be ' + `${(0, _inspect.inspect)(subscriptionType)}.`, (_getOperationTypeNode3 = getOperationTypeNode(schema, _ast.OperationTypeNode.SUBSCRIPTION)) !== null && _getOperationTypeNode3 !== void 0 ? _getOperationTypeNode3 : subscriptionType.astNode); } } function getOperationTypeNode(schema, operation) { @@ -34552,7 +51038,9 @@ function getOperationTypeNode(schema, operation) { // FIXME: https://github.com/graphql/graphql-js/issues/2203 schemaNode => { var _schemaNode$operation; - return /* c8 ignore next */(_schemaNode$operation = schemaNode === null || schemaNode === void 0 ? void 0 : schemaNode.operationTypes) !== null && _schemaNode$operation !== void 0 ? _schemaNode$operation : []; + return /* c8 ignore next */( + (_schemaNode$operation = schemaNode === null || schemaNode === void 0 ? void 0 : schemaNode.operationTypes) !== null && _schemaNode$operation !== void 0 ? _schemaNode$operation : [] + ); }).find(operationNode => operationNode.operation === operation)) === null || _flatMap$find === void 0 ? void 0 : _flatMap$find.type; } function validateDirectives(context) { @@ -34561,17 +51049,15 @@ function validateDirectives(context) { if (!(0, _directives.isDirective)(directive)) { context.reportError(`Expected directive but got: ${(0, _inspect.inspect)(directive)}.`, directive === null || directive === void 0 ? void 0 : directive.astNode); continue; - } - // Ensure they are named correctly. - validateName(context, directive); - if (directive.locations.length === 0) { - context.reportError(`Directive @${directive.name} must include 1 or more locations.`, directive.astNode); - } + } // Ensure they are named correctly. + + validateName(context, directive); // TODO: Ensure proper locations. // Ensure the arguments are valid. + for (const arg of directive.args) { // Ensure they are named correctly. - validateName(context, arg); - // Ensure the type is an input type. + validateName(context, arg); // Ensure the type is an input type. + if (!(0, _definition.isInputType)(arg.type)) { context.reportError(`The type of @${directive.name}(${arg.name}:) must be Input Type ` + `but got: ${(0, _inspect.inspect)(arg.type)}.`, arg.astNode); } @@ -34596,20 +51082,20 @@ function validateTypes(context) { if (!(0, _definition.isNamedType)(type)) { context.reportError(`Expected GraphQL named type but got: ${(0, _inspect.inspect)(type)}.`, type.astNode); continue; - } - // Ensure it is named correctly (excluding introspection types). + } // Ensure it is named correctly (excluding introspection types). + if (!(0, _introspection.isIntrospectionType)(type)) { validateName(context, type); } if ((0, _definition.isObjectType)(type)) { // Ensure fields are valid - validateFields(context, type); - // Ensure objects implement the interfaces they claim to. + validateFields(context, type); // Ensure objects implement the interfaces they claim to. + validateInterfaces(context, type); } else if ((0, _definition.isInterfaceType)(type)) { // Ensure fields are valid. - validateFields(context, type); - // Ensure interfaces implement the interfaces they claim to. + validateFields(context, type); // Ensure interfaces implement the interfaces they claim to. + validateInterfaces(context, type); } else if ((0, _definition.isUnionType)(type)) { // Ensure Unions include valid member types. @@ -34619,32 +51105,32 @@ function validateTypes(context) { validateEnumValues(context, type); } else if ((0, _definition.isInputObjectType)(type)) { // Ensure Input Object fields are valid. - validateInputFields(context, type); - // Ensure Input Objects do not contain non-nullable circular references + validateInputFields(context, type); // Ensure Input Objects do not contain non-nullable circular references + validateInputObjectCircularRefs(type); } } } function validateFields(context, type) { - const fields = Object.values(type.getFields()); - // Objects and Interfaces both must define one or more fields. + const fields = Object.values(type.getFields()); // Objects and Interfaces both must define one or more fields. + if (fields.length === 0) { context.reportError(`Type ${type.name} must define one or more fields.`, [type.astNode, ...type.extensionASTNodes]); } for (const field of fields) { // Ensure they are named correctly. - validateName(context, field); - // Ensure the type is an output type + validateName(context, field); // Ensure the type is an output type + if (!(0, _definition.isOutputType)(field.type)) { var _field$astNode; context.reportError(`The type of ${type.name}.${field.name} must be Output Type ` + `but got: ${(0, _inspect.inspect)(field.type)}.`, (_field$astNode = field.astNode) === null || _field$astNode === void 0 ? void 0 : _field$astNode.type); - } - // Ensure the arguments are valid + } // Ensure the arguments are valid + for (const arg of field.args) { - const argName = arg.name; - // Ensure they are named correctly. - validateName(context, arg); - // Ensure the type is an input type + const argName = arg.name; // Ensure they are named correctly. + + validateName(context, arg); // Ensure the type is an input type + if (!(0, _definition.isInputType)(arg.type)) { var _arg$astNode2; context.reportError(`The type of ${type.name}.${field.name}(${argName}:) must be Input ` + `Type but got: ${(0, _inspect.inspect)(arg.type)}.`, (_arg$astNode2 = arg.astNode) === null || _arg$astNode2 === void 0 ? void 0 : _arg$astNode2.type); @@ -34657,7 +51143,7 @@ function validateFields(context, type) { } } function validateInterfaces(context, type) { - const ifaceTypeNames = new Set(); + const ifaceTypeNames = Object.create(null); for (const iface of type.getInterfaces()) { if (!(0, _definition.isInterfaceType)(iface)) { context.reportError(`Type ${(0, _inspect.inspect)(type)} must only implement Interface types, ` + `it cannot implement ${(0, _inspect.inspect)(iface)}.`, getAllImplementsInterfaceNodes(type, iface)); @@ -34667,51 +51153,50 @@ function validateInterfaces(context, type) { context.reportError(`Type ${type.name} cannot implement itself because it would create a circular reference.`, getAllImplementsInterfaceNodes(type, iface)); continue; } - if (ifaceTypeNames.has(iface.name)) { + if (ifaceTypeNames[iface.name]) { context.reportError(`Type ${type.name} can only implement ${iface.name} once.`, getAllImplementsInterfaceNodes(type, iface)); continue; } - ifaceTypeNames.add(iface.name); + ifaceTypeNames[iface.name] = true; validateTypeImplementsAncestors(context, type, iface); validateTypeImplementsInterface(context, type, iface); } } function validateTypeImplementsInterface(context, type, iface) { - const typeFieldMap = type.getFields(); - // Assert each interface field is implemented. + const typeFieldMap = type.getFields(); // Assert each interface field is implemented. + for (const ifaceField of Object.values(iface.getFields())) { const fieldName = ifaceField.name; - const typeField = typeFieldMap[fieldName]; - // Assert interface field exists on type. - if (typeField == null) { + const typeField = typeFieldMap[fieldName]; // Assert interface field exists on type. + + if (!typeField) { context.reportError(`Interface field ${iface.name}.${fieldName} expected but ${type.name} does not provide it.`, [ifaceField.astNode, type.astNode, ...type.extensionASTNodes]); continue; - } - // Assert interface field type is satisfied by type field type, by being + } // Assert interface field type is satisfied by type field type, by being // a valid subtype. (covariant) + if (!(0, _typeComparators.isTypeSubTypeOf)(context.schema, typeField.type, ifaceField.type)) { var _ifaceField$astNode, _typeField$astNode; context.reportError(`Interface field ${iface.name}.${fieldName} expects type ` + `${(0, _inspect.inspect)(ifaceField.type)} but ${type.name}.${fieldName} ` + `is type ${(0, _inspect.inspect)(typeField.type)}.`, [(_ifaceField$astNode = ifaceField.astNode) === null || _ifaceField$astNode === void 0 ? void 0 : _ifaceField$astNode.type, (_typeField$astNode = typeField.astNode) === null || _typeField$astNode === void 0 ? void 0 : _typeField$astNode.type]); - } - // Assert each interface field arg is implemented. + } // Assert each interface field arg is implemented. + for (const ifaceArg of ifaceField.args) { const argName = ifaceArg.name; - const typeArg = typeField.args.find(arg => arg.name === argName); - // Assert interface field arg exists on object field. + const typeArg = typeField.args.find(arg => arg.name === argName); // Assert interface field arg exists on object field. + if (!typeArg) { context.reportError(`Interface field argument ${iface.name}.${fieldName}(${argName}:) expected but ${type.name}.${fieldName} does not provide it.`, [ifaceArg.astNode, typeField.astNode]); continue; - } - // Assert interface field arg type matches object field arg type. + } // Assert interface field arg type matches object field arg type. // (invariant) // TODO: change to contravariant? + if (!(0, _typeComparators.isEqualType)(ifaceArg.type, typeArg.type)) { var _ifaceArg$astNode, _typeArg$astNode; context.reportError(`Interface field argument ${iface.name}.${fieldName}(${argName}:) ` + `expects type ${(0, _inspect.inspect)(ifaceArg.type)} but ` + `${type.name}.${fieldName}(${argName}:) is type ` + `${(0, _inspect.inspect)(typeArg.type)}.`, [(_ifaceArg$astNode = ifaceArg.astNode) === null || _ifaceArg$astNode === void 0 ? void 0 : _ifaceArg$astNode.type, (_typeArg$astNode = typeArg.astNode) === null || _typeArg$astNode === void 0 ? void 0 : _typeArg$astNode.type]); - } - // TODO: validate default values? - } - // Assert additional arguments must not be required. + } // TODO: validate default values? + } // Assert additional arguments must not be required. + for (const typeArg of typeField.args) { const argName = typeArg.name; const ifaceArg = ifaceField.args.find(arg => arg.name === argName); @@ -34734,13 +51219,13 @@ function validateUnionMembers(context, union) { if (memberTypes.length === 0) { context.reportError(`Union type ${union.name} must define one or more member types.`, [union.astNode, ...union.extensionASTNodes]); } - const includedTypeNames = new Set(); + const includedTypeNames = Object.create(null); for (const memberType of memberTypes) { - if (includedTypeNames.has(memberType.name)) { + if (includedTypeNames[memberType.name]) { context.reportError(`Union type ${union.name} can only include type ${memberType.name} once.`, getUnionMemberTypeNodes(union, memberType.name)); continue; } - includedTypeNames.add(memberType.name); + includedTypeNames[memberType.name] = true; if (!(0, _definition.isObjectType)(memberType)) { context.reportError(`Union type ${union.name} can only include Object types, ` + `it cannot include ${(0, _inspect.inspect)(memberType)}.`, getUnionMemberTypeNodes(union, String(memberType))); } @@ -34760,12 +51245,12 @@ function validateInputFields(context, inputObj) { const fields = Object.values(inputObj.getFields()); if (fields.length === 0) { context.reportError(`Input Object type ${inputObj.name} must define one or more fields.`, [inputObj.astNode, ...inputObj.extensionASTNodes]); - } - // Ensure the arguments are valid + } // Ensure the arguments are valid + for (const field of fields) { // Ensure they are named correctly. - validateName(context, field); - // Ensure the type is an input type + validateName(context, field); // Ensure the type is an input type + if (!(0, _definition.isInputType)(field.type)) { var _field$astNode2; context.reportError(`The type of ${inputObj.name}.${field.name} must be Input Type ` + `but got: ${(0, _inspect.inspect)(field.type)}.`, (_field$astNode2 = field.astNode) === null || _field$astNode2 === void 0 ? void 0 : _field$astNode2.type); @@ -34792,20 +51277,20 @@ function createInputObjectCircularRefsValidator(context) { // Modified copy of algorithm from 'src/validation/rules/NoFragmentCycles.js'. // Tracks already visited types to maintain O(N) and to ensure that cycles // are not redundantly reported. - const visitedTypes = new Set(); - // Array of types nodes used to produce meaningful errors - const fieldPath = []; - // Position in the type path + const visitedTypes = Object.create(null); // Array of types nodes used to produce meaningful errors + + const fieldPath = []; // Position in the type path + const fieldPathIndexByTypeName = Object.create(null); - return detectCycleRecursive; - // This does a straight-forward DFS to find cycles. + return detectCycleRecursive; // This does a straight-forward DFS to find cycles. // It does not terminate when a cycle was found but continues to explore // the graph to find all possible cycles. + function detectCycleRecursive(inputObj) { - if (visitedTypes.has(inputObj)) { + if (visitedTypes[inputObj.name]) { return; } - visitedTypes.add(inputObj); + visitedTypes[inputObj.name] = true; fieldPathIndexByTypeName[inputObj.name] = fieldPath.length; const fields = Object.values(inputObj.getFields()); for (const field of fields) { @@ -34831,11 +51316,13 @@ function getAllImplementsInterfaceNodes(type, iface) { astNode, extensionASTNodes } = type; - const nodes = astNode != null ? [astNode, ...extensionASTNodes] : extensionASTNodes; - // FIXME: https://github.com/graphql/graphql-js/issues/2203 + const nodes = astNode != null ? [astNode, ...extensionASTNodes] : extensionASTNodes; // FIXME: https://github.com/graphql/graphql-js/issues/2203 + return nodes.flatMap(typeNode => { var _typeNode$interfaces; - return /* c8 ignore next */(_typeNode$interfaces = typeNode.interfaces) !== null && _typeNode$interfaces !== void 0 ? _typeNode$interfaces : []; + return /* c8 ignore next */( + (_typeNode$interfaces = typeNode.interfaces) !== null && _typeNode$interfaces !== void 0 ? _typeNode$interfaces : [] + ); }).filter(ifaceNode => ifaceNode.name.value === iface.name); } function getUnionMemberTypeNodes(union, typeName) { @@ -34843,11 +51330,13 @@ function getUnionMemberTypeNodes(union, typeName) { astNode, extensionASTNodes } = union; - const nodes = astNode != null ? [astNode, ...extensionASTNodes] : extensionASTNodes; - // FIXME: https://github.com/graphql/graphql-js/issues/2203 + const nodes = astNode != null ? [astNode, ...extensionASTNodes] : extensionASTNodes; // FIXME: https://github.com/graphql/graphql-js/issues/2203 + return nodes.flatMap(unionNode => { var _unionNode$types; - return /* c8 ignore next */(_unionNode$types = unionNode.types) !== null && _unionNode$types !== void 0 ? _unionNode$types : []; + return /* c8 ignore next */( + (_unionNode$types = unionNode.types) !== null && _unionNode$types !== void 0 ? _unionNode$types : [] + ); }).filter(typeNode => typeNode.name.value === typeName); } function getDeprecatedDirectiveNode(definitionNode) { @@ -34863,6 +51352,7 @@ function getDeprecatedDirectiveNode(definitionNode) { \************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -34874,12 +51364,14 @@ var _ast = __webpack_require__(/*! ../language/ast.mjs */ "../../../node_modules var _kinds = __webpack_require__(/*! ../language/kinds.mjs */ "../../../node_modules/graphql/language/kinds.mjs"); var _visitor = __webpack_require__(/*! ../language/visitor.mjs */ "../../../node_modules/graphql/language/visitor.mjs"); var _definition = __webpack_require__(/*! ../type/definition.mjs */ "../../../node_modules/graphql/type/definition.mjs"); +var _introspection = __webpack_require__(/*! ../type/introspection.mjs */ "../../../node_modules/graphql/type/introspection.mjs"); var _typeFromAST = __webpack_require__(/*! ./typeFromAST.mjs */ "../../../node_modules/graphql/utilities/typeFromAST.mjs"); /** * TypeInfo is a utility class which, given a GraphQL schema, can keep track * of the current field and type definitions at any point in a GraphQL document * AST during a recursive descent by calling `enter(node)` and `leave(node)`. */ + class TypeInfo { constructor(schema, /** @@ -34914,22 +51406,34 @@ class TypeInfo { return 'TypeInfo'; } getType() { - return this._typeStack.at(-1); + if (this._typeStack.length > 0) { + return this._typeStack[this._typeStack.length - 1]; + } } getParentType() { - return this._parentTypeStack.at(-1); + if (this._parentTypeStack.length > 0) { + return this._parentTypeStack[this._parentTypeStack.length - 1]; + } } getInputType() { - return this._inputTypeStack.at(-1); + if (this._inputTypeStack.length > 0) { + return this._inputTypeStack[this._inputTypeStack.length - 1]; + } } getParentInputType() { - return this._inputTypeStack.at(-2); + if (this._inputTypeStack.length > 1) { + return this._inputTypeStack[this._inputTypeStack.length - 2]; + } } getFieldDef() { - return this._fieldDefStack.at(-1); + if (this._fieldDefStack.length > 0) { + return this._fieldDefStack[this._fieldDefStack.length - 1]; + } } getDefaultValue() { - return this._defaultValueStack.at(-1); + if (this._defaultValueStack.length > 0) { + return this._defaultValueStack[this._defaultValueStack.length - 1]; + } } getDirective() { return this._directive; @@ -34941,11 +51445,11 @@ class TypeInfo { return this._enumValue; } enter(node) { - const schema = this._schema; - // Note: many of the types below are explicitly typed as "unknown" to drop + const schema = this._schema; // Note: many of the types below are explicitly typed as "unknown" to drop // any assumptions of a valid schema to ensure runtime types are properly // checked before continuing since TypeInfo is used as part of validation // which occurs before guarantees of schema and document validity. + switch (node.kind) { case _kinds.Kind.SELECTION_SET: { @@ -35011,8 +51515,8 @@ class TypeInfo { case _kinds.Kind.LIST: { const listType = (0, _definition.getNullableType)(this.getInputType()); - const itemType = (0, _definition.isListType)(listType) ? listType.ofType : listType; - // List positions never have a default value. + const itemType = (0, _definition.isListType)(listType) ? listType.ofType : listType; // List positions never have a default value. + this._defaultValueStack.push(undefined); this._inputTypeStack.push((0, _definition.isInputType)(itemType) ? itemType : undefined); break; @@ -35024,7 +51528,7 @@ class TypeInfo { let inputField; if ((0, _definition.isInputObjectType)(objectType)) { inputField = objectType.getFields()[node.name.value]; - if (inputField != null) { + if (inputField) { inputFieldType = inputField.type; } } @@ -35042,8 +51546,7 @@ class TypeInfo { this._enumValue = enumValue; break; } - default: - // Ignore other nodes + default: // Ignore other nodes } } leave(node) { @@ -35079,19 +51582,37 @@ class TypeInfo { case _kinds.Kind.ENUM: this._enumValue = null; break; - default: - // Ignore other nodes + default: // Ignore other nodes } } } + +/** + * Not exactly the same as the executor's definition of getFieldDef, in this + * statically evaluated environment we do not always have an Object type, + * and need to handle Interface and Union types. + */ exports.TypeInfo = TypeInfo; function getFieldDef(schema, parentType, fieldNode) { - return schema.getField(parentType, fieldNode.name.value); + const name = fieldNode.name.value; + if (name === _introspection.SchemaMetaFieldDef.name && schema.getQueryType() === parentType) { + return _introspection.SchemaMetaFieldDef; + } + if (name === _introspection.TypeMetaFieldDef.name && schema.getQueryType() === parentType) { + return _introspection.TypeMetaFieldDef; + } + if (name === _introspection.TypeNameMetaFieldDef.name && (0, _definition.isCompositeType)(parentType)) { + return _introspection.TypeNameMetaFieldDef; + } + if ((0, _definition.isObjectType)(parentType) || (0, _definition.isInterfaceType)(parentType)) { + return parentType.getFields()[name]; + } } /** * Creates a new visitor instance which maintains a provided TypeInfo instance * along with visiting visitor. */ + function visitWithTypeInfo(typeInfo, visitor) { return { enter(...args) { @@ -35124,12 +51645,64 @@ function visitWithTypeInfo(typeInfo, visitor) { /***/ }), +/***/ "../../../node_modules/graphql/utilities/assertValidName.mjs": +/*!*******************************************************************!*\ + !*** ../../../node_modules/graphql/utilities/assertValidName.mjs ***! + \*******************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.assertValidName = assertValidName; +exports.isValidNameError = isValidNameError; +var _devAssert = __webpack_require__(/*! ../jsutils/devAssert.mjs */ "../../../node_modules/graphql/jsutils/devAssert.mjs"); +var _GraphQLError = __webpack_require__(/*! ../error/GraphQLError.mjs */ "../../../node_modules/graphql/error/GraphQLError.mjs"); +var _assertName = __webpack_require__(/*! ../type/assertName.mjs */ "../../../node_modules/graphql/type/assertName.mjs"); +/* c8 ignore start */ + +/** + * Upholds the spec rules about naming. + * @deprecated Please use `assertName` instead. Will be removed in v17 + */ + +function assertValidName(name) { + const error = isValidNameError(name); + if (error) { + throw error; + } + return name; +} +/** + * Returns an Error if a name is invalid. + * @deprecated Please use `assertName` instead. Will be removed in v17 + */ + +function isValidNameError(name) { + typeof name === 'string' || (0, _devAssert.devAssert)(false, 'Expected name to be a string.'); + if (name.startsWith('__')) { + return new _GraphQLError.GraphQLError(`Name "${name}" must not begin with "__", which is reserved by GraphQL introspection.`); + } + try { + (0, _assertName.assertName)(name); + } catch (error) { + return error; + } +} +/* c8 ignore stop */ + +/***/ }), + /***/ "../../../node_modules/graphql/utilities/astFromValue.mjs": /*!****************************************************************!*\ !*** ../../../node_modules/graphql/utilities/astFromValue.mjs ***! \****************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -35164,6 +51737,7 @@ var _scalars = __webpack_require__(/*! ../type/scalars.mjs */ "../../../node_mod * | null | NullValue | * */ + function astFromValue(value, type) { if ((0, _definition.isNonNullType)(type)) { const astValue = astFromValue(value, type.ofType); @@ -35171,19 +51745,19 @@ function astFromValue(value, type) { return null; } return astValue; - } - // only explicit null, not undefined, NaN + } // only explicit null, not undefined, NaN + if (value === null) { return { kind: _kinds.Kind.NULL }; - } - // undefined + } // undefined + if (value === undefined) { return null; - } - // Convert JavaScript array to GraphQL list. If the GraphQLType is a list, but + } // Convert JavaScript array to GraphQL list. If the GraphQLType is a list, but // the value is not an array, convert the value using the list's item type. + if ((0, _definition.isListType)(type)) { const itemType = type.ofType; if ((0, _isIterableObject.isIterableObject)(value)) { @@ -35200,9 +51774,9 @@ function astFromValue(value, type) { }; } return astFromValue(value, itemType); - } - // Populate the fields of the input object by creating ASTs from each value + } // Populate the fields of the input object by creating ASTs from each value // in the JavaScript object according to the fields in the input type. + if ((0, _definition.isInputObjectType)(type)) { if (!(0, _isObjectLike.isObjectLike)(value)) { return null; @@ -35232,15 +51806,15 @@ function astFromValue(value, type) { const serialized = type.serialize(value); if (serialized == null) { return null; - } - // Others serialize based on their corresponding JavaScript scalar types. + } // Others serialize based on their corresponding JavaScript scalar types. + if (typeof serialized === 'boolean') { return { kind: _kinds.Kind.BOOLEAN, value: serialized }; - } - // JavaScript numbers can be Int or Float values. + } // JavaScript numbers can be Int or Float values. + if (typeof serialized === 'number' && Number.isFinite(serialized)) { const stringNum = String(serialized); return integerStringRegExp.test(stringNum) ? { @@ -35258,8 +51832,8 @@ function astFromValue(value, type) { kind: _kinds.Kind.ENUM, value: serialized }; - } - // ID types can use Int literals. + } // ID types can use Int literals. + if (type === _scalars.GraphQLID && integerStringRegExp.test(serialized)) { return { kind: _kinds.Kind.INT, @@ -35275,6 +51849,7 @@ function astFromValue(value, type) { } /* c8 ignore next 3 */ // Not reachable, all possible types have been considered. + false || (0, _invariant.invariant)(false, 'Unexpected input type: ' + (0, _inspect.inspect)(type)); } /** @@ -35282,6 +51857,7 @@ function astFromValue(value, type) { * - NegativeSign? 0 * - NegativeSign? NonZeroDigit ( Digit+ )? */ + const integerStringRegExp = /^-?(?:0|[1-9][0-9]*)$/; /***/ }), @@ -35292,6 +51868,7 @@ const integerStringRegExp = /^-?(?:0|[1-9][0-9]*)$/; \******************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -35299,6 +51876,8 @@ Object.defineProperty(exports, "__esModule", ({ })); exports.buildASTSchema = buildASTSchema; exports.buildSchema = buildSchema; +var _devAssert = __webpack_require__(/*! ../jsutils/devAssert.mjs */ "../../../node_modules/graphql/jsutils/devAssert.mjs"); +var _kinds = __webpack_require__(/*! ../language/kinds.mjs */ "../../../node_modules/graphql/language/kinds.mjs"); var _parser = __webpack_require__(/*! ../language/parser.mjs */ "../../../node_modules/graphql/language/parser.mjs"); var _directives = __webpack_require__(/*! ../type/directives.mjs */ "../../../node_modules/graphql/type/directives.mjs"); var _schema = __webpack_require__(/*! ../type/schema.mjs */ "../../../node_modules/graphql/type/schema.mjs"); @@ -35315,6 +51894,7 @@ var _extendSchema = __webpack_require__(/*! ./extendSchema.mjs */ "../../../node * has no resolve methods, so execution will use default resolvers. */ function buildASTSchema(documentAST, options) { + documentAST != null && documentAST.kind === _kinds.Kind.DOCUMENT || (0, _devAssert.devAssert)(false, 'Must provide valid Document AST.'); if ((options === null || options === void 0 ? void 0 : options.assumeValid) !== true && (options === null || options === void 0 ? void 0 : options.assumeValidSDL) !== true) { (0, _validate.assertValidSDL)(documentAST); } @@ -35360,6 +51940,7 @@ function buildASTSchema(documentAST, options) { * A helper function to build a GraphQLSchema directly from a source * document. */ + function buildSchema(source, options) { const document = (0, _parser.parse)(source, { noLocation: options === null || options === void 0 ? void 0 : options.noLocation, @@ -35379,6 +51960,7 @@ function buildSchema(source, options) { \*********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -35408,50 +51990,49 @@ var _valueFromAST = __webpack_require__(/*! ./valueFromAST.mjs */ "../../../node * This function expects a complete introspection result. Don't forget to check * the "errors" field of a server response before calling this function. */ + function buildClientSchema(introspection, options) { - // Even though the `introspection` argument is typed, in most cases it's received - // as an untyped value from the server, so we will do an additional check here. - (0, _isObjectLike.isObjectLike)(introspection) && (0, _isObjectLike.isObjectLike)(introspection.__schema) || (0, _devAssert.devAssert)(false, `Invalid or incomplete introspection result. Ensure that you are passing "data" property of introspection response and no "errors" was returned alongside: ${(0, _inspect.inspect)(introspection)}.`); - // Get the schema from the introspection result. - const schemaIntrospection = introspection.__schema; - // Iterate through all types, getting the type definition for each. - const typeMap = new Map(schemaIntrospection.types.map(typeIntrospection => [typeIntrospection.name, buildType(typeIntrospection)])); - // Include standard types only if they are used. + (0, _isObjectLike.isObjectLike)(introspection) && (0, _isObjectLike.isObjectLike)(introspection.__schema) || (0, _devAssert.devAssert)(false, `Invalid or incomplete introspection result. Ensure that you are passing "data" property of introspection response and no "errors" was returned alongside: ${(0, _inspect.inspect)(introspection)}.`); // Get the schema from the introspection result. + + const schemaIntrospection = introspection.__schema; // Iterate through all types, getting the type definition for each. + + const typeMap = (0, _keyValMap.keyValMap)(schemaIntrospection.types, typeIntrospection => typeIntrospection.name, typeIntrospection => buildType(typeIntrospection)); // Include standard types only if they are used. + for (const stdType of [..._scalars.specifiedScalarTypes, ..._introspection.introspectionTypes]) { - if (typeMap.has(stdType.name)) { - typeMap.set(stdType.name, stdType); + if (typeMap[stdType.name]) { + typeMap[stdType.name] = stdType; } - } - // Get the root Query, Mutation, and Subscription types. - const queryType = schemaIntrospection.queryType != null ? getObjectType(schemaIntrospection.queryType) : null; - const mutationType = schemaIntrospection.mutationType != null ? getObjectType(schemaIntrospection.mutationType) : null; - const subscriptionType = schemaIntrospection.subscriptionType != null ? getObjectType(schemaIntrospection.subscriptionType) : null; - // Get the directives supported by Introspection, assuming empty-set if + } // Get the root Query, Mutation, and Subscription types. + + const queryType = schemaIntrospection.queryType ? getObjectType(schemaIntrospection.queryType) : null; + const mutationType = schemaIntrospection.mutationType ? getObjectType(schemaIntrospection.mutationType) : null; + const subscriptionType = schemaIntrospection.subscriptionType ? getObjectType(schemaIntrospection.subscriptionType) : null; // Get the directives supported by Introspection, assuming empty-set if // directives were not queried for. - const directives = schemaIntrospection.directives != null ? schemaIntrospection.directives.map(buildDirective) : []; - // Then produce and return a Schema with these types. + + const directives = schemaIntrospection.directives ? schemaIntrospection.directives.map(buildDirective) : []; // Then produce and return a Schema with these types. + return new _schema.GraphQLSchema({ description: schemaIntrospection.description, query: queryType, mutation: mutationType, subscription: subscriptionType, - types: [...typeMap.values()], + types: Object.values(typeMap), directives, assumeValid: options === null || options === void 0 ? void 0 : options.assumeValid - }); - // Given a type reference in introspection, return the GraphQLType instance. + }); // Given a type reference in introspection, return the GraphQLType instance. // preferring cached instances before building new instances. + function getType(typeRef) { if (typeRef.kind === _introspection.TypeKind.LIST) { const itemRef = typeRef.ofType; - if (itemRef == null) { + if (!itemRef) { throw new Error('Decorated type deeper than introspection query.'); } return new _definition.GraphQLList(getType(itemRef)); } if (typeRef.kind === _introspection.TypeKind.NON_NULL) { const nullableRef = typeRef.ofType; - if (nullableRef == null) { + if (!nullableRef) { throw new Error('Decorated type deeper than introspection query.'); } const nullableType = getType(nullableRef); @@ -35464,8 +52045,8 @@ function buildClientSchema(introspection, options) { if (!typeName) { throw new Error(`Unknown type reference: ${(0, _inspect.inspect)(typeRef)}.`); } - const type = typeMap.get(typeName); - if (type == null) { + const type = typeMap[typeName]; + if (!type) { throw new Error(`Invalid or incomplete schema, unknown type: ${typeName}. Ensure that a full introspection query is used in order to build a client schema.`); } return type; @@ -35475,9 +52056,9 @@ function buildClientSchema(introspection, options) { } function getInterfaceType(typeRef) { return (0, _definition.assertInterfaceType)(getNamedType(typeRef)); - } - // Given a type's introspection result, construct the correct + } // Given a type's introspection result, construct the correct // GraphQLType instance. + function buildType(type) { // eslint-disable-next-line @typescript-eslint/prefer-optional-chain if (type != null && type.name != null && type.kind != null) { @@ -35514,7 +52095,7 @@ function buildClientSchema(introspection, options) { if (implementingIntrospection.interfaces === null && implementingIntrospection.kind === _introspection.TypeKind.INTERFACE) { return []; } - if (implementingIntrospection.interfaces == null) { + if (!implementingIntrospection.interfaces) { const implementingIntrospectionStr = (0, _inspect.inspect)(implementingIntrospection); throw new Error(`Introspection result missing interfaces: ${implementingIntrospectionStr}.`); } @@ -35537,7 +52118,7 @@ function buildClientSchema(introspection, options) { }); } function buildUnionDef(unionIntrospection) { - if (unionIntrospection.possibleTypes == null) { + if (!unionIntrospection.possibleTypes) { const unionIntrospectionStr = (0, _inspect.inspect)(unionIntrospection); throw new Error(`Introspection result missing possibleTypes: ${unionIntrospectionStr}.`); } @@ -35548,7 +52129,7 @@ function buildClientSchema(introspection, options) { }); } function buildEnumDef(enumIntrospection) { - if (enumIntrospection.enumValues == null) { + if (!enumIntrospection.enumValues) { const enumIntrospectionStr = (0, _inspect.inspect)(enumIntrospection); throw new Error(`Introspection result missing enumValues: ${enumIntrospectionStr}.`); } @@ -35562,7 +52143,7 @@ function buildClientSchema(introspection, options) { }); } function buildInputObjectDef(inputObjectIntrospection) { - if (inputObjectIntrospection.inputFields == null) { + if (!inputObjectIntrospection.inputFields) { const inputObjectIntrospectionStr = (0, _inspect.inspect)(inputObjectIntrospection); throw new Error(`Introspection result missing inputFields: ${inputObjectIntrospectionStr}.`); } @@ -35574,7 +52155,7 @@ function buildClientSchema(introspection, options) { }); } function buildFieldDefMap(typeIntrospection) { - if (typeIntrospection.fields == null) { + if (!typeIntrospection.fields) { throw new Error(`Introspection result missing fields: ${(0, _inspect.inspect)(typeIntrospection)}.`); } return (0, _keyValMap.keyValMap)(typeIntrospection.fields, fieldIntrospection => fieldIntrospection.name, buildField); @@ -35585,7 +52166,7 @@ function buildClientSchema(introspection, options) { const typeStr = (0, _inspect.inspect)(type); throw new Error(`Introspection must provide output type for fields, but received: ${typeStr}.`); } - if (fieldIntrospection.args == null) { + if (!fieldIntrospection.args) { const fieldIntrospectionStr = (0, _inspect.inspect)(fieldIntrospection); throw new Error(`Introspection result missing field args: ${fieldIntrospectionStr}.`); } @@ -35614,11 +52195,11 @@ function buildClientSchema(introspection, options) { }; } function buildDirective(directiveIntrospection) { - if (directiveIntrospection.args == null) { + if (!directiveIntrospection.args) { const directiveIntrospectionStr = (0, _inspect.inspect)(directiveIntrospection); throw new Error(`Introspection result missing directive args: ${directiveIntrospectionStr}.`); } - if (directiveIntrospection.locations == null) { + if (!directiveIntrospection.locations) { const directiveIntrospectionStr = (0, _inspect.inspect)(directiveIntrospection); throw new Error(`Introspection result missing directive locations: ${directiveIntrospectionStr}.`); } @@ -35640,6 +52221,7 @@ function buildClientSchema(introspection, options) { \********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -35689,8 +52271,8 @@ function coerceInputValueImpl(inputValue, type, onError, path) { const itemPath = (0, _Path.addPath)(path, index, undefined); return coerceInputValueImpl(itemValue, itemType, onError, itemPath); }); - } - // Lists accept a non-list value as a list of one. + } // Lists accept a non-list value as a list of one. + return [coerceInputValueImpl(inputValue, itemType, onError, path)]; } if ((0, _definition.isInputObjectType)(type)) { @@ -35712,10 +52294,10 @@ function coerceInputValueImpl(inputValue, type, onError, path) { continue; } coercedValue[field.name] = coerceInputValueImpl(fieldValue, field.type, onError, (0, _Path.addPath)(path, field.name, type.name)); - } - // Ensure every provided field is defined. + } // Ensure every provided field is defined. + for (const fieldName of Object.keys(inputValue)) { - if (fieldDefs[fieldName] == null) { + if (!fieldDefs[fieldName]) { const suggestions = (0, _suggestionList.suggestionList)(fieldName, Object.keys(type.getFields())); onError((0, _Path.pathToArray)(path), inputValue, new _GraphQLError.GraphQLError(`Field "${fieldName}" is not defined by type "${type.name}".` + (0, _didYouMean.didYouMean)(suggestions))); } @@ -35734,10 +52316,10 @@ function coerceInputValueImpl(inputValue, type, onError, path) { return coercedValue; } if ((0, _definition.isLeafType)(type)) { - let parseResult; - // Scalars and Enums determine if an input value is valid via parseValue(), + let parseResult; // Scalars and Enums determine if a input value is valid via parseValue(), // which can throw to indicate failure. If it throws, maintain a reference // to the original error. + try { parseResult = type.parseValue(inputValue); } catch (error) { @@ -35757,6 +52339,7 @@ function coerceInputValueImpl(inputValue, type, onError, path) { } /* c8 ignore next 3 */ // Not reachable, all possible types have been considered. + false || (0, _invariant.invariant)(false, 'Unexpected input type: ' + (0, _inspect.inspect)(type)); } @@ -35768,6 +52351,7 @@ function coerceInputValueImpl(inputValue, type, onError, path) { \*************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -35780,6 +52364,7 @@ var _kinds = __webpack_require__(/*! ../language/kinds.mjs */ "../../../node_mod * concatenate the ASTs together into batched AST, useful for validating many * GraphQL source files which together represent one conceptual application. */ + function concatAST(documents) { const definitions = []; for (const doc of documents) { @@ -35799,6 +52384,7 @@ function concatAST(documents) { \****************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -35806,11 +52392,13 @@ Object.defineProperty(exports, "__esModule", ({ })); exports.extendSchema = extendSchema; exports.extendSchemaImpl = extendSchemaImpl; -var _AccumulatorMap = __webpack_require__(/*! ../jsutils/AccumulatorMap.mjs */ "../../../node_modules/graphql/jsutils/AccumulatorMap.mjs"); +var _devAssert = __webpack_require__(/*! ../jsutils/devAssert.mjs */ "../../../node_modules/graphql/jsutils/devAssert.mjs"); var _inspect = __webpack_require__(/*! ../jsutils/inspect.mjs */ "../../../node_modules/graphql/jsutils/inspect.mjs"); var _invariant = __webpack_require__(/*! ../jsutils/invariant.mjs */ "../../../node_modules/graphql/jsutils/invariant.mjs"); +var _keyMap = __webpack_require__(/*! ../jsutils/keyMap.mjs */ "../../../node_modules/graphql/jsutils/keyMap.mjs"); var _mapValue = __webpack_require__(/*! ../jsutils/mapValue.mjs */ "../../../node_modules/graphql/jsutils/mapValue.mjs"); var _kinds = __webpack_require__(/*! ../language/kinds.mjs */ "../../../node_modules/graphql/language/kinds.mjs"); +var _predicates = __webpack_require__(/*! ../language/predicates.mjs */ "../../../node_modules/graphql/language/predicates.mjs"); var _definition = __webpack_require__(/*! ../type/definition.mjs */ "../../../node_modules/graphql/type/definition.mjs"); var _directives = __webpack_require__(/*! ../type/directives.mjs */ "../../../node_modules/graphql/type/directives.mjs"); var _introspection = __webpack_require__(/*! ../type/introspection.mjs */ "../../../node_modules/graphql/type/introspection.mjs"); @@ -35833,6 +52421,7 @@ var _valueFromAST = __webpack_require__(/*! ./valueFromAST.mjs */ "../../../node */ function extendSchema(schema, documentAST, options) { (0, _schema.assertSchema)(schema); + documentAST != null && documentAST.kind === _kinds.Kind.DOCUMENT || (0, _devAssert.devAssert)(false, 'Must provide valid Document AST.'); if ((options === null || options === void 0 ? void 0 : options.assumeValid) !== true && (options === null || options === void 0 ? void 0 : options.assumeValidSDL) !== true) { (0, _validate.assertValidSDLExtension)(documentAST, schema); } @@ -35843,77 +52432,47 @@ function extendSchema(schema, documentAST, options) { /** * @internal */ + function extendSchemaImpl(schemaConfig, documentAST, options) { - var _schemaDef$descriptio, _schemaDef, _schemaDef$descriptio2, _schemaDef2, _options$assumeValid; + var _schemaDef, _schemaDef$descriptio, _schemaDef2, _options$assumeValid; + // Collect the type definitions and extensions found in the document. const typeDefs = []; - const scalarExtensions = new _AccumulatorMap.AccumulatorMap(); - const objectExtensions = new _AccumulatorMap.AccumulatorMap(); - const interfaceExtensions = new _AccumulatorMap.AccumulatorMap(); - const unionExtensions = new _AccumulatorMap.AccumulatorMap(); - const enumExtensions = new _AccumulatorMap.AccumulatorMap(); - const inputObjectExtensions = new _AccumulatorMap.AccumulatorMap(); - // New directives and types are separate because a directives and types can + const typeExtensionsMap = Object.create(null); // New directives and types are separate because a directives and types can // have the same name. For example, a type named "skip". + const directiveDefs = []; - let schemaDef; - // Schema extensions are collected which may add additional operation types. + let schemaDef; // Schema extensions are collected which may add additional operation types. + const schemaExtensions = []; - let isSchemaChanged = false; for (const def of documentAST.definitions) { - switch (def.kind) { - case _kinds.Kind.SCHEMA_DEFINITION: - schemaDef = def; - break; - case _kinds.Kind.SCHEMA_EXTENSION: - schemaExtensions.push(def); - break; - case _kinds.Kind.DIRECTIVE_DEFINITION: - directiveDefs.push(def); - break; - // Type Definitions - case _kinds.Kind.SCALAR_TYPE_DEFINITION: - case _kinds.Kind.OBJECT_TYPE_DEFINITION: - case _kinds.Kind.INTERFACE_TYPE_DEFINITION: - case _kinds.Kind.UNION_TYPE_DEFINITION: - case _kinds.Kind.ENUM_TYPE_DEFINITION: - case _kinds.Kind.INPUT_OBJECT_TYPE_DEFINITION: - typeDefs.push(def); - break; - // Type System Extensions - case _kinds.Kind.SCALAR_TYPE_EXTENSION: - scalarExtensions.add(def.name.value, def); - break; - case _kinds.Kind.OBJECT_TYPE_EXTENSION: - objectExtensions.add(def.name.value, def); - break; - case _kinds.Kind.INTERFACE_TYPE_EXTENSION: - interfaceExtensions.add(def.name.value, def); - break; - case _kinds.Kind.UNION_TYPE_EXTENSION: - unionExtensions.add(def.name.value, def); - break; - case _kinds.Kind.ENUM_TYPE_EXTENSION: - enumExtensions.add(def.name.value, def); - break; - case _kinds.Kind.INPUT_OBJECT_TYPE_EXTENSION: - inputObjectExtensions.add(def.name.value, def); - break; - default: - continue; + if (def.kind === _kinds.Kind.SCHEMA_DEFINITION) { + schemaDef = def; + } else if (def.kind === _kinds.Kind.SCHEMA_EXTENSION) { + schemaExtensions.push(def); + } else if ((0, _predicates.isTypeDefinitionNode)(def)) { + typeDefs.push(def); + } else if ((0, _predicates.isTypeExtensionNode)(def)) { + const extendedTypeName = def.name.value; + const existingTypeExtensions = typeExtensionsMap[extendedTypeName]; + typeExtensionsMap[extendedTypeName] = existingTypeExtensions ? existingTypeExtensions.concat([def]) : [def]; + } else if (def.kind === _kinds.Kind.DIRECTIVE_DEFINITION) { + directiveDefs.push(def); } - isSchemaChanged = true; - } - // If this document contains no new types, extensions, or directives then + } // If this document contains no new types, extensions, or directives then // return the same unmodified GraphQLSchema instance. - if (!isSchemaChanged) { + + if (Object.keys(typeExtensionsMap).length === 0 && typeDefs.length === 0 && directiveDefs.length === 0 && schemaExtensions.length === 0 && schemaDef == null) { return schemaConfig; } - const typeMap = new Map(schemaConfig.types.map(type => [type.name, extendNamedType(type)])); + const typeMap = Object.create(null); + for (const existingType of schemaConfig.types) { + typeMap[existingType.name] = extendNamedType(existingType); + } for (const typeNode of typeDefs) { - var _stdTypeMap$get; + var _stdTypeMap$name; const name = typeNode.name.value; - typeMap.set(name, (_stdTypeMap$get = stdTypeMap.get(name)) !== null && _stdTypeMap$get !== void 0 ? _stdTypeMap$get : buildType(typeNode)); + typeMap[name] = (_stdTypeMap$name = stdTypeMap[name]) !== null && _stdTypeMap$name !== void 0 ? _stdTypeMap$name : buildType(typeNode); } const operationTypes = { // Get the extended root operation types. @@ -35923,20 +52482,20 @@ function extendSchemaImpl(schemaConfig, documentAST, options) { // Then, incorporate schema definition and all schema extensions. ...(schemaDef && getOperationTypes([schemaDef])), ...getOperationTypes(schemaExtensions) - }; - // Then produce and return a Schema config with these types. + }; // Then produce and return a Schema config with these types. + return { - description: (_schemaDef$descriptio = (_schemaDef = schemaDef) === null || _schemaDef === void 0 ? void 0 : (_schemaDef$descriptio2 = _schemaDef.description) === null || _schemaDef$descriptio2 === void 0 ? void 0 : _schemaDef$descriptio2.value) !== null && _schemaDef$descriptio !== void 0 ? _schemaDef$descriptio : schemaConfig.description, + description: (_schemaDef = schemaDef) === null || _schemaDef === void 0 ? void 0 : (_schemaDef$descriptio = _schemaDef.description) === null || _schemaDef$descriptio === void 0 ? void 0 : _schemaDef$descriptio.value, ...operationTypes, - types: Array.from(typeMap.values()), + types: Object.values(typeMap), directives: [...schemaConfig.directives.map(replaceDirective), ...directiveDefs.map(buildDirective)], - extensions: schemaConfig.extensions, + extensions: Object.create(null), astNode: (_schemaDef2 = schemaDef) !== null && _schemaDef2 !== void 0 ? _schemaDef2 : schemaConfig.astNode, extensionASTNodes: schemaConfig.extensionASTNodes.concat(schemaExtensions), assumeValid: (_options$assumeValid = options === null || options === void 0 ? void 0 : options.assumeValid) !== null && _options$assumeValid !== void 0 ? _options$assumeValid : false - }; - // Below are functions used for producing this schema that have closed over + }; // Below are functions used for producing this schema that have closed over // this scope and have access to the schema, cache, and newly defined types. + function replaceType(type) { if ((0, _definition.isListType)(type)) { // @ts-expect-error @@ -35945,21 +52504,17 @@ function extendSchemaImpl(schemaConfig, documentAST, options) { if ((0, _definition.isNonNullType)(type)) { // @ts-expect-error return new _definition.GraphQLNonNull(replaceType(type.ofType)); - } - // @ts-expect-error FIXME + } // @ts-expect-error FIXME + return replaceNamedType(type); } function replaceNamedType(type) { // Note: While this could make early assertions to get the correctly // typed values, that would throw immediately while type system // validation with validateSchema() will produce more actionable results. - return typeMap.get(type.name); + return typeMap[type.name]; } function replaceDirective(directive) { - if ((0, _directives.isSpecifiedDirective)(directive)) { - // Builtin directives are not extended. - return directive; - } const config = directive.toConfig(); return new _directives.GraphQLDirective({ ...config, @@ -35991,12 +52546,13 @@ function extendSchemaImpl(schemaConfig, documentAST, options) { } /* c8 ignore next 3 */ // Not reachable, all possible type definition nodes have been considered. + false || (0, _invariant.invariant)(false, 'Unexpected type: ' + (0, _inspect.inspect)(type)); } function extendInputObjectType(type) { - var _inputObjectExtension; + var _typeExtensionsMap$co; const config = type.toConfig(); - const extensions = (_inputObjectExtension = inputObjectExtensions.get(config.name)) !== null && _inputObjectExtension !== void 0 ? _inputObjectExtension : []; + const extensions = (_typeExtensionsMap$co = typeExtensionsMap[config.name]) !== null && _typeExtensionsMap$co !== void 0 ? _typeExtensionsMap$co : []; return new _definition.GraphQLInputObjectType({ ...config, fields: () => ({ @@ -36010,9 +52566,9 @@ function extendSchemaImpl(schemaConfig, documentAST, options) { }); } function extendEnumType(type) { - var _enumExtensions$get; + var _typeExtensionsMap$ty; const config = type.toConfig(); - const extensions = (_enumExtensions$get = enumExtensions.get(type.name)) !== null && _enumExtensions$get !== void 0 ? _enumExtensions$get : []; + const extensions = (_typeExtensionsMap$ty = typeExtensionsMap[type.name]) !== null && _typeExtensionsMap$ty !== void 0 ? _typeExtensionsMap$ty : []; return new _definition.GraphQLEnumType({ ...config, values: { @@ -36023,9 +52579,9 @@ function extendSchemaImpl(schemaConfig, documentAST, options) { }); } function extendScalarType(type) { - var _scalarExtensions$get; + var _typeExtensionsMap$co2; const config = type.toConfig(); - const extensions = (_scalarExtensions$get = scalarExtensions.get(config.name)) !== null && _scalarExtensions$get !== void 0 ? _scalarExtensions$get : []; + const extensions = (_typeExtensionsMap$co2 = typeExtensionsMap[config.name]) !== null && _typeExtensionsMap$co2 !== void 0 ? _typeExtensionsMap$co2 : []; let specifiedByURL = config.specifiedByURL; for (const extensionNode of extensions) { var _getSpecifiedByURL; @@ -36038,9 +52594,9 @@ function extendSchemaImpl(schemaConfig, documentAST, options) { }); } function extendObjectType(type) { - var _objectExtensions$get; + var _typeExtensionsMap$co3; const config = type.toConfig(); - const extensions = (_objectExtensions$get = objectExtensions.get(config.name)) !== null && _objectExtensions$get !== void 0 ? _objectExtensions$get : []; + const extensions = (_typeExtensionsMap$co3 = typeExtensionsMap[config.name]) !== null && _typeExtensionsMap$co3 !== void 0 ? _typeExtensionsMap$co3 : []; return new _definition.GraphQLObjectType({ ...config, interfaces: () => [...type.getInterfaces().map(replaceNamedType), ...buildInterfaces(extensions)], @@ -36052,9 +52608,9 @@ function extendSchemaImpl(schemaConfig, documentAST, options) { }); } function extendInterfaceType(type) { - var _interfaceExtensions$; + var _typeExtensionsMap$co4; const config = type.toConfig(); - const extensions = (_interfaceExtensions$ = interfaceExtensions.get(config.name)) !== null && _interfaceExtensions$ !== void 0 ? _interfaceExtensions$ : []; + const extensions = (_typeExtensionsMap$co4 = typeExtensionsMap[config.name]) !== null && _typeExtensionsMap$co4 !== void 0 ? _typeExtensionsMap$co4 : []; return new _definition.GraphQLInterfaceType({ ...config, interfaces: () => [...type.getInterfaces().map(replaceNamedType), ...buildInterfaces(extensions)], @@ -36066,9 +52622,9 @@ function extendSchemaImpl(schemaConfig, documentAST, options) { }); } function extendUnionType(type) { - var _unionExtensions$get; + var _typeExtensionsMap$co5; const config = type.toConfig(); - const extensions = (_unionExtensions$get = unionExtensions.get(config.name)) !== null && _unionExtensions$get !== void 0 ? _unionExtensions$get : []; + const extensions = (_typeExtensionsMap$co5 = typeExtensionsMap[config.name]) !== null && _typeExtensionsMap$co5 !== void 0 ? _typeExtensionsMap$co5 : []; return new _definition.GraphQLUnionType({ ...config, types: () => [...type.getTypes().map(replaceNamedType), ...buildUnionTypes(extensions)], @@ -36092,8 +52648,10 @@ function extendSchemaImpl(schemaConfig, documentAST, options) { const opTypes = {}; for (const node of nodes) { var _node$operationTypes; + // FIXME: https://github.com/graphql/graphql-js/issues/2203 - const operationTypesNodes = /* c8 ignore next */(_node$operationTypes = node.operationTypes) !== null && _node$operationTypes !== void 0 ? _node$operationTypes : []; + const operationTypesNodes = /* c8 ignore next */ + (_node$operationTypes = node.operationTypes) !== null && _node$operationTypes !== void 0 ? _node$operationTypes : []; for (const operationType of operationTypesNodes) { // Note: While this could make early assertions to get the correctly // typed values below, that would throw immediately while type system @@ -36105,9 +52663,9 @@ function extendSchemaImpl(schemaConfig, documentAST, options) { return opTypes; } function getNamedType(node) { - var _stdTypeMap$get2; + var _stdTypeMap$name2; const name = node.name.value; - const type = (_stdTypeMap$get2 = stdTypeMap.get(name)) !== null && _stdTypeMap$get2 !== void 0 ? _stdTypeMap$get2 : typeMap.get(name); + const type = (_stdTypeMap$name2 = stdTypeMap[name]) !== null && _stdTypeMap$name2 !== void 0 ? _stdTypeMap$name2 : typeMap[name]; if (type === undefined) { throw new Error(`Unknown type: "${name}".`); } @@ -36140,8 +52698,10 @@ function extendSchemaImpl(schemaConfig, documentAST, options) { const fieldConfigMap = Object.create(null); for (const node of nodes) { var _node$fields; + // FIXME: https://github.com/graphql/graphql-js/issues/2203 - const nodeFields = /* c8 ignore next */(_node$fields = node.fields) !== null && _node$fields !== void 0 ? _node$fields : []; + const nodeFields = /* c8 ignore next */ + (_node$fields = node.fields) !== null && _node$fields !== void 0 ? _node$fields : []; for (const field of nodeFields) { var _field$description; fieldConfigMap[field.name.value] = { @@ -36160,10 +52720,12 @@ function extendSchemaImpl(schemaConfig, documentAST, options) { } function buildArgumentMap(args) { // FIXME: https://github.com/graphql/graphql-js/issues/2203 - const argsNodes = /* c8 ignore next */args !== null && args !== void 0 ? args : []; + const argsNodes = /* c8 ignore next */ + args !== null && args !== void 0 ? args : []; const argConfigMap = Object.create(null); for (const arg of argsNodes) { var _arg$description; + // Note: While this could make assertions to get the correctly typed // value, that would throw immediately while type system validation // with validateSchema() will produce more actionable results. @@ -36182,10 +52744,13 @@ function extendSchemaImpl(schemaConfig, documentAST, options) { const inputFieldMap = Object.create(null); for (const node of nodes) { var _node$fields2; + // FIXME: https://github.com/graphql/graphql-js/issues/2203 - const fieldsNodes = /* c8 ignore next */(_node$fields2 = node.fields) !== null && _node$fields2 !== void 0 ? _node$fields2 : []; + const fieldsNodes = /* c8 ignore next */ + (_node$fields2 = node.fields) !== null && _node$fields2 !== void 0 ? _node$fields2 : []; for (const field of fieldsNodes) { var _field$description2; + // Note: While this could make assertions to get the correctly typed // value, that would throw immediately while type system validation // with validateSchema() will produce more actionable results. @@ -36205,8 +52770,10 @@ function extendSchemaImpl(schemaConfig, documentAST, options) { const enumValueMap = Object.create(null); for (const node of nodes) { var _node$values; + // FIXME: https://github.com/graphql/graphql-js/issues/2203 - const valuesNodes = /* c8 ignore next */(_node$values = node.values) !== null && _node$values !== void 0 ? _node$values : []; + const valuesNodes = /* c8 ignore next */ + (_node$values = node.values) !== null && _node$values !== void 0 ? _node$values : []; for (const value of valuesNodes) { var _value$description; enumValueMap[value.name.value] = { @@ -36227,7 +52794,9 @@ function extendSchemaImpl(schemaConfig, documentAST, options) { // FIXME: https://github.com/graphql/graphql-js/issues/2203 node => { var _node$interfaces$map, _node$interfaces; - return /* c8 ignore next */(_node$interfaces$map = (_node$interfaces = node.interfaces) === null || _node$interfaces === void 0 ? void 0 : _node$interfaces.map(getNamedType)) !== null && _node$interfaces$map !== void 0 ? _node$interfaces$map : []; + return /* c8 ignore next */( + (_node$interfaces$map = (_node$interfaces = node.interfaces) === null || _node$interfaces === void 0 ? void 0 : _node$interfaces.map(getNamedType)) !== null && _node$interfaces$map !== void 0 ? _node$interfaces$map : [] + ); }); } function buildUnionTypes(nodes) { @@ -36239,16 +52808,19 @@ function extendSchemaImpl(schemaConfig, documentAST, options) { // FIXME: https://github.com/graphql/graphql-js/issues/2203 node => { var _node$types$map, _node$types; - return /* c8 ignore next */(_node$types$map = (_node$types = node.types) === null || _node$types === void 0 ? void 0 : _node$types.map(getNamedType)) !== null && _node$types$map !== void 0 ? _node$types$map : []; + return /* c8 ignore next */( + (_node$types$map = (_node$types = node.types) === null || _node$types === void 0 ? void 0 : _node$types.map(getNamedType)) !== null && _node$types$map !== void 0 ? _node$types$map : [] + ); }); } function buildType(astNode) { + var _typeExtensionsMap$na; const name = astNode.name.value; + const extensionASTNodes = (_typeExtensionsMap$na = typeExtensionsMap[name]) !== null && _typeExtensionsMap$na !== void 0 ? _typeExtensionsMap$na : []; switch (astNode.kind) { case _kinds.Kind.OBJECT_TYPE_DEFINITION: { - var _objectExtensions$get2, _astNode$description; - const extensionASTNodes = (_objectExtensions$get2 = objectExtensions.get(name)) !== null && _objectExtensions$get2 !== void 0 ? _objectExtensions$get2 : []; + var _astNode$description; const allNodes = [astNode, ...extensionASTNodes]; return new _definition.GraphQLObjectType({ name, @@ -36261,8 +52833,7 @@ function extendSchemaImpl(schemaConfig, documentAST, options) { } case _kinds.Kind.INTERFACE_TYPE_DEFINITION: { - var _interfaceExtensions$2, _astNode$description2; - const extensionASTNodes = (_interfaceExtensions$2 = interfaceExtensions.get(name)) !== null && _interfaceExtensions$2 !== void 0 ? _interfaceExtensions$2 : []; + var _astNode$description2; const allNodes = [astNode, ...extensionASTNodes]; return new _definition.GraphQLInterfaceType({ name, @@ -36275,8 +52846,7 @@ function extendSchemaImpl(schemaConfig, documentAST, options) { } case _kinds.Kind.ENUM_TYPE_DEFINITION: { - var _enumExtensions$get2, _astNode$description3; - const extensionASTNodes = (_enumExtensions$get2 = enumExtensions.get(name)) !== null && _enumExtensions$get2 !== void 0 ? _enumExtensions$get2 : []; + var _astNode$description3; const allNodes = [astNode, ...extensionASTNodes]; return new _definition.GraphQLEnumType({ name, @@ -36288,8 +52858,7 @@ function extendSchemaImpl(schemaConfig, documentAST, options) { } case _kinds.Kind.UNION_TYPE_DEFINITION: { - var _unionExtensions$get2, _astNode$description4; - const extensionASTNodes = (_unionExtensions$get2 = unionExtensions.get(name)) !== null && _unionExtensions$get2 !== void 0 ? _unionExtensions$get2 : []; + var _astNode$description4; const allNodes = [astNode, ...extensionASTNodes]; return new _definition.GraphQLUnionType({ name, @@ -36301,8 +52870,7 @@ function extendSchemaImpl(schemaConfig, documentAST, options) { } case _kinds.Kind.SCALAR_TYPE_DEFINITION: { - var _scalarExtensions$get2, _astNode$description5; - const extensionASTNodes = (_scalarExtensions$get2 = scalarExtensions.get(name)) !== null && _scalarExtensions$get2 !== void 0 ? _scalarExtensions$get2 : []; + var _astNode$description5; return new _definition.GraphQLScalarType({ name, description: (_astNode$description5 = astNode.description) === null || _astNode$description5 === void 0 ? void 0 : _astNode$description5.value, @@ -36313,8 +52881,7 @@ function extendSchemaImpl(schemaConfig, documentAST, options) { } case _kinds.Kind.INPUT_OBJECT_TYPE_DEFINITION: { - var _inputObjectExtension2, _astNode$description6; - const extensionASTNodes = (_inputObjectExtension2 = inputObjectExtensions.get(name)) !== null && _inputObjectExtension2 !== void 0 ? _inputObjectExtension2 : []; + var _astNode$description6; const allNodes = [astNode, ...extensionASTNodes]; return new _definition.GraphQLInputObjectType({ name, @@ -36328,27 +52895,30 @@ function extendSchemaImpl(schemaConfig, documentAST, options) { } } } -const stdTypeMap = new Map([..._scalars.specifiedScalarTypes, ..._introspection.introspectionTypes].map(type => [type.name, type])); +const stdTypeMap = (0, _keyMap.keyMap)([..._scalars.specifiedScalarTypes, ..._introspection.introspectionTypes], type => type.name); /** * Given a field or enum value node, returns the string value for the * deprecation reason. */ + function getDeprecationReason(node) { - const deprecated = (0, _values.getDirectiveValues)(_directives.GraphQLDeprecatedDirective, node); - // @ts-expect-error validated by `getDirectiveValues` + const deprecated = (0, _values.getDirectiveValues)(_directives.GraphQLDeprecatedDirective, node); // @ts-expect-error validated by `getDirectiveValues` + return deprecated === null || deprecated === void 0 ? void 0 : deprecated.reason; } /** * Given a scalar node, returns the string value for the specifiedByURL. */ + function getSpecifiedByURL(node) { - const specifiedBy = (0, _values.getDirectiveValues)(_directives.GraphQLSpecifiedByDirective, node); - // @ts-expect-error validated by `getDirectiveValues` + const specifiedBy = (0, _values.getDirectiveValues)(_directives.GraphQLSpecifiedByDirective, node); // @ts-expect-error validated by `getDirectiveValues` + return specifiedBy === null || specifiedBy === void 0 ? void 0 : specifiedBy.url; } /** * Given an input object node, returns if the node should be OneOf. */ + function isOneOf(node) { return Boolean((0, _values.getDirectiveValues)(_directives.GraphQLOneOfDirective, node)); } @@ -36361,6 +52931,7 @@ function isOneOf(node) { \***********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -36417,6 +52988,7 @@ function findBreakingChanges(oldSchema, newSchema) { * Given two schemas, returns an Array containing descriptions of all the types * of potentially dangerous changes covered by the other functions down below. */ + function findDangerousChanges(oldSchema, newSchema) { // @ts-expect-error return findSchemaChanges(oldSchema, newSchema).filter(change => change.type in DangerousChangeType); @@ -36685,8 +53257,8 @@ function isChangeSafeForInputObjectFieldOrFieldArg(oldType, newType) { // moving from non-null to nullable of the same underlying type is safe !(0, _definition.isNonNullType)(newType) && isChangeSafeForInputObjectFieldOrFieldArg(oldType.ofType, newType) ); - } - // if they're both named types, see if their names are equivalent + } // if they're both named types, see if their names are equivalent + return (0, _definition.isNamedType)(newType) && oldType.name === newType.name; } function typeKindName(type) { @@ -36710,6 +53282,7 @@ function typeKindName(type) { } /* c8 ignore next 3 */ // Not reachable, all possible types have been considered. + false || (0, _invariant.invariant)(false, 'Unexpected type: ' + (0, _inspect.inspect)(type)); } function stringifyValue(value, type) { @@ -36755,6 +53328,7 @@ function diff(oldArray, newArray) { \*************************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -36900,6 +53474,7 @@ function getIntrospectionQuery(options) { \*******************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -36912,6 +53487,7 @@ var _kinds = __webpack_require__(/*! ../language/kinds.mjs */ "../../../node_mod * name. If a name is not provided, an operation is only returned if only one is * provided in the document. */ + function getOperationAST(documentAST, operationName) { let operation = null; for (const definition of documentAST.definitions) { @@ -36935,12 +53511,67 @@ function getOperationAST(documentAST, operationName) { /***/ }), +/***/ "../../../node_modules/graphql/utilities/getOperationRootType.mjs": +/*!************************************************************************!*\ + !*** ../../../node_modules/graphql/utilities/getOperationRootType.mjs ***! + \************************************************************************/ +/***/ (function(__unused_webpack_module, exports, __webpack_require__) { + +"use strict"; + + +Object.defineProperty(exports, "__esModule", ({ + value: true +})); +exports.getOperationRootType = getOperationRootType; +var _GraphQLError = __webpack_require__(/*! ../error/GraphQLError.mjs */ "../../../node_modules/graphql/error/GraphQLError.mjs"); +/** + * Extracts the root type of the operation from the schema. + * + * @deprecated Please use `GraphQLSchema.getRootType` instead. Will be removed in v17 + */ +function getOperationRootType(schema, operation) { + if (operation.operation === 'query') { + const queryType = schema.getQueryType(); + if (!queryType) { + throw new _GraphQLError.GraphQLError('Schema does not define the required query root type.', { + nodes: operation + }); + } + return queryType; + } + if (operation.operation === 'mutation') { + const mutationType = schema.getMutationType(); + if (!mutationType) { + throw new _GraphQLError.GraphQLError('Schema is not configured for mutations.', { + nodes: operation + }); + } + return mutationType; + } + if (operation.operation === 'subscription') { + const subscriptionType = schema.getSubscriptionType(); + if (!subscriptionType) { + throw new _GraphQLError.GraphQLError('Schema is not configured for subscriptions.', { + nodes: operation + }); + } + return subscriptionType; + } + throw new _GraphQLError.GraphQLError('Can only have query, mutation and subscription operations.', { + nodes: operation + }); +} + +/***/ }), + /***/ "../../../node_modules/graphql/utilities/index.mjs": /*!*********************************************************!*\ !*** ../../../node_modules/graphql/utilities/index.mjs ***! \*********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -36964,6 +53595,12 @@ Object.defineProperty(exports, "TypeInfo", ({ return _TypeInfo.TypeInfo; } })); +Object.defineProperty(exports, "assertValidName", ({ + enumerable: true, + get: function () { + return _assertValidName.assertValidName; + } +})); Object.defineProperty(exports, "astFromValue", ({ enumerable: true, get: function () { @@ -37036,6 +53673,12 @@ Object.defineProperty(exports, "getOperationAST", ({ return _getOperationAST.getOperationAST; } })); +Object.defineProperty(exports, "getOperationRootType", ({ + enumerable: true, + get: function () { + return _getOperationRootType.getOperationRootType; + } +})); Object.defineProperty(exports, "introspectionFromSchema", ({ enumerable: true, get: function () { @@ -37054,18 +53697,18 @@ Object.defineProperty(exports, "isTypeSubTypeOf", ({ return _typeComparators.isTypeSubTypeOf; } })); +Object.defineProperty(exports, "isValidNameError", ({ + enumerable: true, + get: function () { + return _assertValidName.isValidNameError; + } +})); Object.defineProperty(exports, "lexicographicSortSchema", ({ enumerable: true, get: function () { return _lexicographicSortSchema.lexicographicSortSchema; } })); -Object.defineProperty(exports, "printDirective", ({ - enumerable: true, - get: function () { - return _printSchema.printDirective; - } -})); Object.defineProperty(exports, "printIntrospectionSchema", ({ enumerable: true, get: function () { @@ -37122,6 +53765,7 @@ Object.defineProperty(exports, "visitWithTypeInfo", ({ })); var _getIntrospectionQuery = __webpack_require__(/*! ./getIntrospectionQuery.mjs */ "../../../node_modules/graphql/utilities/getIntrospectionQuery.mjs"); var _getOperationAST = __webpack_require__(/*! ./getOperationAST.mjs */ "../../../node_modules/graphql/utilities/getOperationAST.mjs"); +var _getOperationRootType = __webpack_require__(/*! ./getOperationRootType.mjs */ "../../../node_modules/graphql/utilities/getOperationRootType.mjs"); var _introspectionFromSchema = __webpack_require__(/*! ./introspectionFromSchema.mjs */ "../../../node_modules/graphql/utilities/introspectionFromSchema.mjs"); var _buildClientSchema = __webpack_require__(/*! ./buildClientSchema.mjs */ "../../../node_modules/graphql/utilities/buildClientSchema.mjs"); var _buildASTSchema = __webpack_require__(/*! ./buildASTSchema.mjs */ "../../../node_modules/graphql/utilities/buildASTSchema.mjs"); @@ -37138,6 +53782,7 @@ var _concatAST = __webpack_require__(/*! ./concatAST.mjs */ "../../../node_modul var _separateOperations = __webpack_require__(/*! ./separateOperations.mjs */ "../../../node_modules/graphql/utilities/separateOperations.mjs"); var _stripIgnoredCharacters = __webpack_require__(/*! ./stripIgnoredCharacters.mjs */ "../../../node_modules/graphql/utilities/stripIgnoredCharacters.mjs"); var _typeComparators = __webpack_require__(/*! ./typeComparators.mjs */ "../../../node_modules/graphql/utilities/typeComparators.mjs"); +var _assertValidName = __webpack_require__(/*! ./assertValidName.mjs */ "../../../node_modules/graphql/utilities/assertValidName.mjs"); var _findBreakingChanges = __webpack_require__(/*! ./findBreakingChanges.mjs */ "../../../node_modules/graphql/utilities/findBreakingChanges.mjs"); /***/ }), @@ -37148,6 +53793,7 @@ var _findBreakingChanges = __webpack_require__(/*! ./findBreakingChanges.mjs */ \***************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -37167,6 +53813,7 @@ var _getIntrospectionQuery = __webpack_require__(/*! ./getIntrospectionQuery.mjs * This is the inverse of buildClientSchema. The primary use case is outside * of the server context, for instance when doing schema comparisons. */ + function introspectionFromSchema(schema, options) { const optionsWithDefaults = { specifiedByUrl: true, @@ -37181,7 +53828,7 @@ function introspectionFromSchema(schema, options) { schema, document }); - result.errors == null && result.data != null || (0, _invariant.invariant)(false); + !result.errors && result.data || (0, _invariant.invariant)(false); return result.data; } @@ -37193,6 +53840,7 @@ function introspectionFromSchema(schema, options) { \***************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -37201,6 +53849,7 @@ Object.defineProperty(exports, "__esModule", ({ exports.lexicographicSortSchema = lexicographicSortSchema; var _inspect = __webpack_require__(/*! ../jsutils/inspect.mjs */ "../../../node_modules/graphql/jsutils/inspect.mjs"); var _invariant = __webpack_require__(/*! ../jsutils/invariant.mjs */ "../../../node_modules/graphql/jsutils/invariant.mjs"); +var _keyValMap = __webpack_require__(/*! ../jsutils/keyValMap.mjs */ "../../../node_modules/graphql/jsutils/keyValMap.mjs"); var _naturalCompare = __webpack_require__(/*! ../jsutils/naturalCompare.mjs */ "../../../node_modules/graphql/jsutils/naturalCompare.mjs"); var _definition = __webpack_require__(/*! ../type/definition.mjs */ "../../../node_modules/graphql/type/definition.mjs"); var _directives = __webpack_require__(/*! ../type/directives.mjs */ "../../../node_modules/graphql/type/directives.mjs"); @@ -37211,12 +53860,13 @@ var _schema = __webpack_require__(/*! ../type/schema.mjs */ "../../../node_modul * * This function returns a sorted copy of the given GraphQLSchema. */ + function lexicographicSortSchema(schema) { const schemaConfig = schema.toConfig(); - const typeMap = new Map(sortByName(schemaConfig.types).map(type => [type.name, sortNamedType(type)])); + const typeMap = (0, _keyValMap.keyValMap)(sortByName(schemaConfig.types), type => type.name, sortNamedType); return new _schema.GraphQLSchema({ ...schemaConfig, - types: Array.from(typeMap.values()), + types: Object.values(typeMap), directives: sortByName(schemaConfig.directives).map(sortDirective), query: replaceMaybeType(schemaConfig.query), mutation: replaceMaybeType(schemaConfig.mutation), @@ -37229,12 +53879,12 @@ function lexicographicSortSchema(schema) { } else if ((0, _definition.isNonNullType)(type)) { // @ts-expect-error return new _definition.GraphQLNonNull(replaceType(type.ofType)); - } - // @ts-expect-error FIXME: TS Conversion + } // @ts-expect-error FIXME: TS Conversion + return replaceNamedType(type); } function replaceNamedType(type) { - return typeMap.get(type.name); + return typeMap[type.name]; } function replaceMaybeType(maybeType) { return maybeType && replaceNamedType(maybeType); @@ -37312,6 +53962,7 @@ function lexicographicSortSchema(schema) { } /* c8 ignore next 3 */ // Not reachable, all possible types have been considered. + false || (0, _invariant.invariant)(false, 'Unexpected type: ' + (0, _inspect.inspect)(type)); } } @@ -37341,12 +53992,12 @@ function sortBy(array, mapToKey) { \***************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.printDirective = printDirective; exports.printIntrospectionSchema = printIntrospectionSchema; exports.printSchema = printSchema; exports.printType = printType; @@ -37375,19 +54026,23 @@ function printFilteredSchema(schema, directiveFilter, typeFilter) { return [printSchemaDefinition(schema), ...directives.map(directive => printDirective(directive)), ...types.map(type => printType(type))].filter(Boolean).join('\n\n'); } function printSchemaDefinition(schema) { - const queryType = schema.getQueryType(); - const mutationType = schema.getMutationType(); - const subscriptionType = schema.getSubscriptionType(); - // Special case: When a schema has no root operation types, no valid schema - // definition can be printed. - if (!queryType && !mutationType && !subscriptionType) { + if (schema.description == null && isSchemaOfCommonNames(schema)) { return; } - // Only print a schema definition if there is a description or if it should - // not be omitted because of having default type names. - if (schema.description != null || !hasDefaultRootOperationTypes(schema)) { - return printDescription(schema) + 'schema {\n' + (queryType ? ` query: ${queryType.name}\n` : '') + (mutationType ? ` mutation: ${mutationType.name}\n` : '') + (subscriptionType ? ` subscription: ${subscriptionType.name}\n` : '') + '}'; + const operationTypes = []; + const queryType = schema.getQueryType(); + if (queryType) { + operationTypes.push(` query: ${queryType.name}`); } + const mutationType = schema.getMutationType(); + if (mutationType) { + operationTypes.push(` mutation: ${mutationType.name}`); + } + const subscriptionType = schema.getSubscriptionType(); + if (subscriptionType) { + operationTypes.push(` subscription: ${subscriptionType.name}`); + } + return printDescription(schema) + `schema {\n${operationTypes.join('\n')}\n}`; } /** * GraphQL schema define root types for each type of operation. These types are @@ -37402,16 +54057,23 @@ function printSchemaDefinition(schema) { * } * ``` * - * When using this naming convention, the schema description can be omitted so - * long as these names are only used for operation types. - * - * Note however that if any of these default names are used elsewhere in the - * schema but not as a root operation type, the schema definition must still - * be printed to avoid ambiguity. + * When using this naming convention, the schema description can be omitted. */ -function hasDefaultRootOperationTypes(schema) { - /* eslint-disable eqeqeq */ - return schema.getQueryType() == schema.getType('Query') && schema.getMutationType() == schema.getType('Mutation') && schema.getSubscriptionType() == schema.getType('Subscription'); + +function isSchemaOfCommonNames(schema) { + const queryType = schema.getQueryType(); + if (queryType && queryType.name !== 'Query') { + return false; + } + const mutationType = schema.getMutationType(); + if (mutationType && mutationType.name !== 'Mutation') { + return false; + } + const subscriptionType = schema.getSubscriptionType(); + if (subscriptionType && subscriptionType.name !== 'Subscription') { + return false; + } + return true; } function printType(type) { if ((0, _definition.isScalarType)(type)) { @@ -37434,6 +54096,7 @@ function printType(type) { } /* c8 ignore next 3 */ // Not reachable, all possible types have been considered. + false || (0, _invariant.invariant)(false, 'Unexpected type: ' + (0, _inspect.inspect)(type)); } function printScalar(type) { @@ -37472,9 +54135,9 @@ function printBlock(items) { function printArgs(args, indentation = '') { if (args.length === 0) { return ''; - } - // If every arg does not have a description, print them on one line. - if (args.every(arg => arg.description == null)) { + } // If every arg does not have a description, print them on one line. + + if (args.every(arg => !arg.description)) { return '(' + args.map(printInputValue).join(', ') + ')'; } return '(\n' + args.map((arg, i) => printDescription(arg, ' ' + indentation, !i) + ' ' + indentation + printInputValue(arg)).join('\n') + '\n' + indentation + ')'; @@ -37526,7 +54189,7 @@ function printDescription(def, indentation = '', firstInBlock = true) { block: (0, _blockString.isPrintableAsBlockString)(description) }); const prefix = indentation && !firstInBlock ? '\n' + indentation : indentation; - return prefix + blockString.replaceAll('\n', '\n' + indentation) + '\n'; + return prefix + blockString.replace(/\n/g, '\n' + indentation) + '\n'; } /***/ }), @@ -37537,6 +54200,7 @@ function printDescription(def, indentation = '', firstInBlock = true) { \**********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -37551,10 +54215,11 @@ var _visitor = __webpack_require__(/*! ../language/visitor.mjs */ "../../../node * which contains a single operation as well the fragment definitions it * refers to. */ + function separateOperations(documentAST) { const operations = []; - const depGraph = Object.create(null); - // Populate metadata and build a dependency graph. + const depGraph = Object.create(null); // Populate metadata and build a dependency graph. + for (const definitionNode of documentAST.definitions) { switch (definitionNode.kind) { case _kinds.Kind.OPERATION_DEFINITION: @@ -37563,22 +54228,21 @@ function separateOperations(documentAST) { case _kinds.Kind.FRAGMENT_DEFINITION: depGraph[definitionNode.name.value] = collectDependencies(definitionNode.selectionSet); break; - default: - // ignore non-executable definitions + default: // ignore non-executable definitions } - } - // For each operation, produce a new synthesized AST which includes only what + } // For each operation, produce a new synthesized AST which includes only what // is necessary for completing that operation. + const separatedDocumentASTs = Object.create(null); for (const operation of operations) { const dependencies = new Set(); for (const fragmentName of collectDependencies(operation.selectionSet)) { collectTransitiveDependencies(dependencies, depGraph, fragmentName); - } - // Provides the empty string for anonymous operations. - const operationName = operation.name ? operation.name.value : ''; - // The list of definition nodes to be included for this operation, sorted + } // Provides the empty string for anonymous operations. + + const operationName = operation.name ? operation.name.value : ''; // The list of definition nodes to be included for this operation, sorted // to retain the same order as the original document. + separatedDocumentASTs[operationName] = { kind: _kinds.Kind.DOCUMENT, definitions: documentAST.definitions.filter(node => node === operation || node.kind === _kinds.Kind.FRAGMENT_DEFINITION && dependencies.has(node.name.value)) @@ -37586,6 +54250,7 @@ function separateOperations(documentAST) { } return separatedDocumentASTs; } + // From a dependency graph, collects a list of transitive dependencies by // recursing through a dependency graph. function collectTransitiveDependencies(collected, depGraph, fromName) { @@ -37617,6 +54282,7 @@ function collectDependencies(selectionSet) { \*****************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -37632,6 +54298,7 @@ var _kinds = __webpack_require__(/*! ../language/kinds.mjs */ "../../../node_mod * * @internal */ + function sortValueNode(valueNode) { switch (valueNode.kind) { case _kinds.Kind.OBJECT: @@ -37669,6 +54336,7 @@ function sortFields(fields) { \**************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -37739,6 +54407,7 @@ var _tokenKind = __webpack_require__(/*! ../language/tokenKind.mjs */ "../../../ * """Type description""" type Foo{"""Field description""" bar:String} * ``` */ + function stripIgnoredCharacters(source) { const sourceObj = (0, _source.isSource)(source) ? source : new _source.Source(source); const body = sourceObj.body; @@ -37753,6 +54422,7 @@ function stripIgnoredCharacters(source) { * Also prevent case of non-punctuator token following by spread resulting * in invalid token (e.g. `1...` is invalid Float token). */ + const isNonPunctuator = !(0, _lexer.isPunctuatorTokenKind)(currentToken.kind); if (wasLastAddedTokenNonPunctuator) { if (isNonPunctuator || currentToken.kind === _tokenKind.TokenKind.SPREAD) { @@ -37780,6 +54450,7 @@ function stripIgnoredCharacters(source) { \*******************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -37796,28 +54467,29 @@ function isEqualType(typeA, typeB) { // Equivalent types are equal. if (typeA === typeB) { return true; - } - // If either type is non-null, the other must also be non-null. + } // If either type is non-null, the other must also be non-null. + if ((0, _definition.isNonNullType)(typeA) && (0, _definition.isNonNullType)(typeB)) { return isEqualType(typeA.ofType, typeB.ofType); - } - // If either type is a list, the other must also be a list. + } // If either type is a list, the other must also be a list. + if ((0, _definition.isListType)(typeA) && (0, _definition.isListType)(typeB)) { return isEqualType(typeA.ofType, typeB.ofType); - } - // Otherwise the types are not equal. + } // Otherwise the types are not equal. + return false; } /** * Provided a type and a super type, return true if the first type is either * equal or a subset of the second super type (covariant). */ + function isTypeSubTypeOf(schema, maybeSubType, superType) { // Equivalent type is a valid subtype if (maybeSubType === superType) { return true; - } - // If superType is non-null, maybeSubType must also be non-null. + } // If superType is non-null, maybeSubType must also be non-null. + if ((0, _definition.isNonNullType)(superType)) { if ((0, _definition.isNonNullType)(maybeSubType)) { return isTypeSubTypeOf(schema, maybeSubType.ofType, superType.ofType); @@ -37827,8 +54499,8 @@ function isTypeSubTypeOf(schema, maybeSubType, superType) { if ((0, _definition.isNonNullType)(maybeSubType)) { // If superType is nullable, maybeSubType may be non-null or nullable. return isTypeSubTypeOf(schema, maybeSubType.ofType, superType); - } - // If superType type is a list, maybeSubType type must also be a list. + } // If superType type is a list, maybeSubType type must also be a list. + if ((0, _definition.isListType)(superType)) { if ((0, _definition.isListType)(maybeSubType)) { return isTypeSubTypeOf(schema, maybeSubType.ofType, superType.ofType); @@ -37838,9 +54510,9 @@ function isTypeSubTypeOf(schema, maybeSubType, superType) { if ((0, _definition.isListType)(maybeSubType)) { // If superType is not a list, maybeSubType must also be not a list. return false; - } - // If superType type is an abstract type, check if it is super type of maybeSubType. + } // If superType type is an abstract type, check if it is super type of maybeSubType. // Otherwise, the child type is not a valid subtype of the parent type. + return (0, _definition.isAbstractType)(superType) && ((0, _definition.isInterfaceType)(maybeSubType) || (0, _definition.isObjectType)(maybeSubType)) && schema.isSubType(superType, maybeSubType); } /** @@ -37852,6 +54524,7 @@ function isTypeSubTypeOf(schema, maybeSubType, superType) { * * This function is commutative. */ + function doTypesOverlap(schema, typeA, typeB) { // Equivalent types overlap if (typeA === typeB) { @@ -37862,15 +54535,15 @@ function doTypesOverlap(schema, typeA, typeB) { // If both types are abstract, then determine if there is any intersection // between possible concrete types of each. return schema.getPossibleTypes(typeA).some(type => schema.isSubType(typeB, type)); - } - // Determine if the latter type is a possible concrete type of the former. + } // Determine if the latter type is a possible concrete type of the former. + return schema.isSubType(typeA, typeB); } if ((0, _definition.isAbstractType)(typeB)) { // Determine if the former type is a possible concrete type of the latter. return schema.isSubType(typeB, typeA); - } - // Otherwise the types do not overlap. + } // Otherwise the types do not overlap. + return false; } @@ -37882,6 +54555,7 @@ function doTypesOverlap(schema, typeA, typeB) { \***************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -37915,6 +54589,7 @@ function typeFromAST(schema, typeNode) { \****************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -37923,6 +54598,7 @@ Object.defineProperty(exports, "__esModule", ({ exports.valueFromAST = valueFromAST; var _inspect = __webpack_require__(/*! ../jsutils/inspect.mjs */ "../../../node_modules/graphql/jsutils/inspect.mjs"); var _invariant = __webpack_require__(/*! ../jsutils/invariant.mjs */ "../../../node_modules/graphql/jsutils/invariant.mjs"); +var _keyMap = __webpack_require__(/*! ../jsutils/keyMap.mjs */ "../../../node_modules/graphql/jsutils/keyMap.mjs"); var _kinds = __webpack_require__(/*! ../language/kinds.mjs */ "../../../node_modules/graphql/language/kinds.mjs"); var _definition = __webpack_require__(/*! ../type/definition.mjs */ "../../../node_modules/graphql/type/definition.mjs"); /** @@ -37945,6 +54621,7 @@ var _definition = __webpack_require__(/*! ../type/definition.mjs */ "../../../no * | NullValue | null | * */ + function valueFromAST(valueNode, type, variables) { if (!valueNode) { // When there is no node, then there is also no value. @@ -37960,10 +54637,10 @@ function valueFromAST(valueNode, type, variables) { const variableValue = variables[variableName]; if (variableValue === null && (0, _definition.isNonNullType)(type)) { return; // Invalid: intentionally return no value. - } - // Note: This does no further checking that this variable is correct. + } // Note: This does no further checking that this variable is correct. // This assumes that this query has been validated and the variable // usage here is of the correct type. + return variableValue; } if ((0, _definition.isNonNullType)(type)) { @@ -38009,10 +54686,10 @@ function valueFromAST(valueNode, type, variables) { return; // Invalid: intentionally return no value. } const coercedObj = Object.create(null); - const fieldNodes = new Map(valueNode.fields.map(field => [field.name.value, field])); + const fieldNodes = (0, _keyMap.keyMap)(valueNode.fields, field => field.name.value); for (const field of Object.values(type.getFields())) { - const fieldNode = fieldNodes.get(field.name); - if (fieldNode == null || isMissingVariable(fieldNode.value, variables)) { + const fieldNode = fieldNodes[field.name]; + if (!fieldNode || isMissingVariable(fieldNode.value, variables)) { if (field.defaultValue !== undefined) { coercedObj[field.name] = field.defaultValue; } else if ((0, _definition.isNonNullType)(field.type)) { @@ -38054,10 +54731,11 @@ function valueFromAST(valueNode, type, variables) { } /* c8 ignore next 3 */ // Not reachable, all possible input types have been considered. + false || (0, _invariant.invariant)(false, 'Unexpected input type: ' + (0, _inspect.inspect)(type)); -} -// Returns true if the provided valueNode is a variable which is not defined +} // Returns true if the provided valueNode is a variable which is not defined // in the set of variables. + function isMissingVariable(valueNode, variables) { return valueNode.kind === _kinds.Kind.VARIABLE && (variables == null || variables[valueNode.name.value] === undefined); } @@ -38070,6 +54748,7 @@ function isMissingVariable(valueNode, variables) { \***********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -38094,6 +54773,7 @@ var _kinds = __webpack_require__(/*! ../language/kinds.mjs */ "../../../node_mod * | Null | null | * */ + function valueFromASTUntyped(valueNode, variables) { switch (valueNode.kind) { case _kinds.Kind.NULL: @@ -38123,6 +54803,7 @@ function valueFromASTUntyped(valueNode, variables) { \**********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -38192,14 +54873,14 @@ class ASTValidationContext { let fragments = this._recursivelyReferencedFragments.get(operation); if (!fragments) { fragments = []; - const collectedNames = new Set(); + const collectedNames = Object.create(null); const nodesToVisit = [operation.selectionSet]; let node; while (node = nodesToVisit.pop()) { for (const spread of this.getFragmentSpreads(node)) { const fragName = spread.name.value; - if (!collectedNames.has(fragName)) { - collectedNames.add(fragName); + if (collectedNames[fragName] !== true) { + collectedNames[fragName] = true; const fragment = this.getFragment(fragName); if (fragment) { fragments.push(fragment); @@ -38307,29 +54988,12 @@ exports.ValidationContext = ValidationContext; \**********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); -Object.defineProperty(exports, "DeferStreamDirectiveLabelRule", ({ - enumerable: true, - get: function () { - return _DeferStreamDirectiveLabelRule.DeferStreamDirectiveLabelRule; - } -})); -Object.defineProperty(exports, "DeferStreamDirectiveOnRootFieldRule", ({ - enumerable: true, - get: function () { - return _DeferStreamDirectiveOnRootFieldRule.DeferStreamDirectiveOnRootFieldRule; - } -})); -Object.defineProperty(exports, "DeferStreamDirectiveOnValidOperationsRule", ({ - enumerable: true, - get: function () { - return _DeferStreamDirectiveOnValidOperationsRule.DeferStreamDirectiveOnValidOperationsRule; - } -})); Object.defineProperty(exports, "ExecutableDefinitionsRule", ({ enumerable: true, get: function () { @@ -38462,12 +55126,6 @@ Object.defineProperty(exports, "SingleFieldSubscriptionsRule", ({ return _SingleFieldSubscriptionsRule.SingleFieldSubscriptionsRule; } })); -Object.defineProperty(exports, "StreamDirectiveOnListFieldRule", ({ - enumerable: true, - get: function () { - return _StreamDirectiveOnListFieldRule.StreamDirectiveOnListFieldRule; - } -})); Object.defineProperty(exports, "UniqueArgumentDefinitionNamesRule", ({ enumerable: true, get: function () { @@ -38585,9 +55243,6 @@ Object.defineProperty(exports, "validate", ({ var _validate = __webpack_require__(/*! ./validate.mjs */ "../../../node_modules/graphql/validation/validate.mjs"); var _ValidationContext = __webpack_require__(/*! ./ValidationContext.mjs */ "../../../node_modules/graphql/validation/ValidationContext.mjs"); var _specifiedRules = __webpack_require__(/*! ./specifiedRules.mjs */ "../../../node_modules/graphql/validation/specifiedRules.mjs"); -var _DeferStreamDirectiveLabelRule = __webpack_require__(/*! ./rules/DeferStreamDirectiveLabelRule.mjs */ "../../../node_modules/graphql/validation/rules/DeferStreamDirectiveLabelRule.mjs"); -var _DeferStreamDirectiveOnRootFieldRule = __webpack_require__(/*! ./rules/DeferStreamDirectiveOnRootFieldRule.mjs */ "../../../node_modules/graphql/validation/rules/DeferStreamDirectiveOnRootFieldRule.mjs"); -var _DeferStreamDirectiveOnValidOperationsRule = __webpack_require__(/*! ./rules/DeferStreamDirectiveOnValidOperationsRule.mjs */ "../../../node_modules/graphql/validation/rules/DeferStreamDirectiveOnValidOperationsRule.mjs"); var _ExecutableDefinitionsRule = __webpack_require__(/*! ./rules/ExecutableDefinitionsRule.mjs */ "../../../node_modules/graphql/validation/rules/ExecutableDefinitionsRule.mjs"); var _FieldsOnCorrectTypeRule = __webpack_require__(/*! ./rules/FieldsOnCorrectTypeRule.mjs */ "../../../node_modules/graphql/validation/rules/FieldsOnCorrectTypeRule.mjs"); var _FragmentsOnCompositeTypesRule = __webpack_require__(/*! ./rules/FragmentsOnCompositeTypesRule.mjs */ "../../../node_modules/graphql/validation/rules/FragmentsOnCompositeTypesRule.mjs"); @@ -38605,7 +55260,6 @@ var _PossibleFragmentSpreadsRule = __webpack_require__(/*! ./rules/PossibleFragm var _ProvidedRequiredArgumentsRule = __webpack_require__(/*! ./rules/ProvidedRequiredArgumentsRule.mjs */ "../../../node_modules/graphql/validation/rules/ProvidedRequiredArgumentsRule.mjs"); var _ScalarLeafsRule = __webpack_require__(/*! ./rules/ScalarLeafsRule.mjs */ "../../../node_modules/graphql/validation/rules/ScalarLeafsRule.mjs"); var _SingleFieldSubscriptionsRule = __webpack_require__(/*! ./rules/SingleFieldSubscriptionsRule.mjs */ "../../../node_modules/graphql/validation/rules/SingleFieldSubscriptionsRule.mjs"); -var _StreamDirectiveOnListFieldRule = __webpack_require__(/*! ./rules/StreamDirectiveOnListFieldRule.mjs */ "../../../node_modules/graphql/validation/rules/StreamDirectiveOnListFieldRule.mjs"); var _UniqueArgumentNamesRule = __webpack_require__(/*! ./rules/UniqueArgumentNamesRule.mjs */ "../../../node_modules/graphql/validation/rules/UniqueArgumentNamesRule.mjs"); var _UniqueDirectivesPerLocationRule = __webpack_require__(/*! ./rules/UniqueDirectivesPerLocationRule.mjs */ "../../../node_modules/graphql/validation/rules/UniqueDirectivesPerLocationRule.mjs"); var _UniqueFragmentNamesRule = __webpack_require__(/*! ./rules/UniqueFragmentNamesRule.mjs */ "../../../node_modules/graphql/validation/rules/UniqueFragmentNamesRule.mjs"); @@ -38629,188 +55283,13 @@ var _NoSchemaIntrospectionCustomRule = __webpack_require__(/*! ./rules/custom/No /***/ }), -/***/ "../../../node_modules/graphql/validation/rules/DeferStreamDirectiveLabelRule.mjs": -/*!****************************************************************************************!*\ - !*** ../../../node_modules/graphql/validation/rules/DeferStreamDirectiveLabelRule.mjs ***! - \****************************************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.DeferStreamDirectiveLabelRule = DeferStreamDirectiveLabelRule; -var _GraphQLError = __webpack_require__(/*! ../../error/GraphQLError.mjs */ "../../../node_modules/graphql/error/GraphQLError.mjs"); -var _kinds = __webpack_require__(/*! ../../language/kinds.mjs */ "../../../node_modules/graphql/language/kinds.mjs"); -var _directives = __webpack_require__(/*! ../../type/directives.mjs */ "../../../node_modules/graphql/type/directives.mjs"); -/** - * Defer and stream directive labels are unique - * - * A GraphQL document is only valid if defer and stream directives' label argument is static and unique. - */ -function DeferStreamDirectiveLabelRule(context) { - const knownLabels = new Map(); - return { - Directive(node) { - if (node.name.value === _directives.GraphQLDeferDirective.name || node.name.value === _directives.GraphQLStreamDirective.name) { - var _node$arguments; - const labelArgument = (_node$arguments = node.arguments) === null || _node$arguments === void 0 ? void 0 : _node$arguments.find(arg => arg.name.value === 'label'); - const labelValue = labelArgument === null || labelArgument === void 0 ? void 0 : labelArgument.value; - if (!labelValue) { - return; - } - if (labelValue.kind !== _kinds.Kind.STRING) { - context.reportError(new _GraphQLError.GraphQLError(`Directive "${node.name.value}"'s label argument must be a static string.`, { - nodes: node - })); - return; - } - const knownLabel = knownLabels.get(labelValue.value); - if (knownLabel != null) { - context.reportError(new _GraphQLError.GraphQLError('Defer/Stream directive label argument must be unique.', { - nodes: [knownLabel, node] - })); - } else { - knownLabels.set(labelValue.value, node); - } - } - } - }; -} - -/***/ }), - -/***/ "../../../node_modules/graphql/validation/rules/DeferStreamDirectiveOnRootFieldRule.mjs": -/*!**********************************************************************************************!*\ - !*** ../../../node_modules/graphql/validation/rules/DeferStreamDirectiveOnRootFieldRule.mjs ***! - \**********************************************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.DeferStreamDirectiveOnRootFieldRule = DeferStreamDirectiveOnRootFieldRule; -var _GraphQLError = __webpack_require__(/*! ../../error/GraphQLError.mjs */ "../../../node_modules/graphql/error/GraphQLError.mjs"); -var _directives = __webpack_require__(/*! ../../type/directives.mjs */ "../../../node_modules/graphql/type/directives.mjs"); -/** - * Defer and stream directives are used on valid root field - * - * A GraphQL document is only valid if defer directives are not used on root mutation or subscription types. - */ -function DeferStreamDirectiveOnRootFieldRule(context) { - return { - Directive(node) { - const mutationType = context.getSchema().getMutationType(); - const subscriptionType = context.getSchema().getSubscriptionType(); - const parentType = context.getParentType(); - if (parentType && node.name.value === _directives.GraphQLDeferDirective.name) { - if (mutationType && parentType === mutationType) { - context.reportError(new _GraphQLError.GraphQLError(`Defer directive cannot be used on root mutation type "${parentType.name}".`, { - nodes: node - })); - } - if (subscriptionType && parentType === subscriptionType) { - context.reportError(new _GraphQLError.GraphQLError(`Defer directive cannot be used on root subscription type "${parentType.name}".`, { - nodes: node - })); - } - } - if (parentType && node.name.value === _directives.GraphQLStreamDirective.name) { - if (mutationType && parentType === mutationType) { - context.reportError(new _GraphQLError.GraphQLError(`Stream directive cannot be used on root mutation type "${parentType.name}".`, { - nodes: node - })); - } - if (subscriptionType && parentType === subscriptionType) { - context.reportError(new _GraphQLError.GraphQLError(`Stream directive cannot be used on root subscription type "${parentType.name}".`, { - nodes: node - })); - } - } - } - }; -} - -/***/ }), - -/***/ "../../../node_modules/graphql/validation/rules/DeferStreamDirectiveOnValidOperationsRule.mjs": -/*!****************************************************************************************************!*\ - !*** ../../../node_modules/graphql/validation/rules/DeferStreamDirectiveOnValidOperationsRule.mjs ***! - \****************************************************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.DeferStreamDirectiveOnValidOperationsRule = DeferStreamDirectiveOnValidOperationsRule; -var _GraphQLError = __webpack_require__(/*! ../../error/GraphQLError.mjs */ "../../../node_modules/graphql/error/GraphQLError.mjs"); -var _ast = __webpack_require__(/*! ../../language/ast.mjs */ "../../../node_modules/graphql/language/ast.mjs"); -var _kinds = __webpack_require__(/*! ../../language/kinds.mjs */ "../../../node_modules/graphql/language/kinds.mjs"); -var _directives = __webpack_require__(/*! ../../type/directives.mjs */ "../../../node_modules/graphql/type/directives.mjs"); -function ifArgumentCanBeFalse(node) { - var _node$arguments; - const ifArgument = (_node$arguments = node.arguments) === null || _node$arguments === void 0 ? void 0 : _node$arguments.find(arg => arg.name.value === 'if'); - if (!ifArgument) { - return false; - } - if (ifArgument.value.kind === _kinds.Kind.BOOLEAN) { - if (ifArgument.value.value) { - return false; - } - } else if (ifArgument.value.kind !== _kinds.Kind.VARIABLE) { - return false; - } - return true; -} -/** - * Defer And Stream Directives Are Used On Valid Operations - * - * A GraphQL document is only valid if defer directives are not used on root mutation or subscription types. - */ -function DeferStreamDirectiveOnValidOperationsRule(context) { - const fragmentsUsedOnSubscriptions = new Set(); - return { - OperationDefinition(operation) { - if (operation.operation === _ast.OperationTypeNode.SUBSCRIPTION) { - for (const fragment of context.getRecursivelyReferencedFragments(operation)) { - fragmentsUsedOnSubscriptions.add(fragment.name.value); - } - } - }, - Directive(node, _key, _parent, _path, ancestors) { - const definitionNode = ancestors[2]; - if ('kind' in definitionNode && (definitionNode.kind === _kinds.Kind.FRAGMENT_DEFINITION && fragmentsUsedOnSubscriptions.has(definitionNode.name.value) || definitionNode.kind === _kinds.Kind.OPERATION_DEFINITION && definitionNode.operation === _ast.OperationTypeNode.SUBSCRIPTION)) { - if (node.name.value === _directives.GraphQLDeferDirective.name) { - if (!ifArgumentCanBeFalse(node)) { - context.reportError(new _GraphQLError.GraphQLError('Defer directive not supported on subscription operations. Disable `@defer` by setting the `if` argument to `false`.', { - nodes: node - })); - } - } else if (node.name.value === _directives.GraphQLStreamDirective.name) { - if (!ifArgumentCanBeFalse(node)) { - context.reportError(new _GraphQLError.GraphQLError('Stream directive not supported on subscription operations. Disable `@stream` by setting the `if` argument to `false`.', { - nodes: node - })); - } - } - } - } - }; -} - -/***/ }), - /***/ "../../../node_modules/graphql/validation/rules/ExecutableDefinitionsRule.mjs": /*!************************************************************************************!*\ !*** ../../../node_modules/graphql/validation/rules/ExecutableDefinitionsRule.mjs ***! \************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -38852,6 +55331,7 @@ function ExecutableDefinitionsRule(context) { \**********************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -38880,14 +55360,14 @@ function FieldsOnCorrectTypeRule(context) { if (!fieldDef) { // This field doesn't exist, lets look for suggestions. const schema = context.getSchema(); - const fieldName = node.name.value; - // First determine if there are any suggested types to condition on. - let suggestion = (0, _didYouMean.didYouMean)('to use an inline fragment on', getSuggestedTypeNames(schema, type, fieldName)); - // If there are no suggested types, then perhaps this was a typo? + const fieldName = node.name.value; // First determine if there are any suggested types to condition on. + + let suggestion = (0, _didYouMean.didYouMean)('to use an inline fragment on', getSuggestedTypeNames(schema, type, fieldName)); // If there are no suggested types, then perhaps this was a typo? + if (suggestion === '') { suggestion = (0, _didYouMean.didYouMean)(getSuggestedFieldNames(type, fieldName)); - } - // Report an error, including helpful suggestions. + } // Report an error, including helpful suggestions. + context.reportError(new _GraphQLError.GraphQLError(`Cannot query field "${fieldName}" on type "${type.name}".` + suggestion, { nodes: node })); @@ -38901,6 +55381,7 @@ function FieldsOnCorrectTypeRule(context) { * they implement. If any of those types include the provided field, suggest them, * sorted by how often the type is referenced. */ + function getSuggestedTypeNames(schema, type, fieldName) { if (!(0, _definition.isAbstractType)(type)) { // Must be an Object type, which does not have possible fields. @@ -38909,18 +55390,18 @@ function getSuggestedTypeNames(schema, type, fieldName) { const suggestedTypes = new Set(); const usageCount = Object.create(null); for (const possibleType of schema.getPossibleTypes(type)) { - if (possibleType.getFields()[fieldName] == null) { + if (!possibleType.getFields()[fieldName]) { continue; - } - // This object type defines this field. + } // This object type defines this field. + suggestedTypes.add(possibleType); usageCount[possibleType.name] = 1; for (const possibleInterface of possibleType.getInterfaces()) { var _usageCount$possibleI; - if (possibleInterface.getFields()[fieldName] == null) { + if (!possibleInterface.getFields()[fieldName]) { continue; - } - // This interface type defines this field. + } // This interface type defines this field. + suggestedTypes.add(possibleInterface); usageCount[possibleInterface.name] = ((_usageCount$possibleI = usageCount[possibleInterface.name]) !== null && _usageCount$possibleI !== void 0 ? _usageCount$possibleI : 0) + 1; } @@ -38930,8 +55411,8 @@ function getSuggestedTypeNames(schema, type, fieldName) { const usageCountDiff = usageCount[typeB.name] - usageCount[typeA.name]; if (usageCountDiff !== 0) { return usageCountDiff; - } - // Suggest super types first followed by subtypes + } // Suggest super types first followed by subtypes + if ((0, _definition.isInterfaceType)(typeA) && schema.isSubType(typeA, typeB)) { return -1; } @@ -38945,12 +55426,13 @@ function getSuggestedTypeNames(schema, type, fieldName) { * For the field name provided, determine if there are any similar field names * that may be the result of a typo. */ + function getSuggestedFieldNames(type, fieldName) { if ((0, _definition.isObjectType)(type) || (0, _definition.isInterfaceType)(type)) { const possibleFieldNames = Object.keys(type.getFields()); return (0, _suggestionList.suggestionList)(fieldName, possibleFieldNames); - } - // Otherwise, must be a Union type, which does not define fields. + } // Otherwise, must be a Union type, which does not define fields. + return []; } @@ -38962,6 +55444,7 @@ function getSuggestedFieldNames(type, fieldName) { \****************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -39015,6 +55498,7 @@ function FragmentsOnCompositeTypesRule(context) { \*********************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -39058,28 +55542,31 @@ function KnownArgumentNamesRule(context) { /** * @internal */ + function KnownArgumentNamesOnDirectivesRule(context) { - const directiveArgs = new Map(); + const directiveArgs = Object.create(null); const schema = context.getSchema(); const definedDirectives = schema ? schema.getDirectives() : _directives.specifiedDirectives; for (const directive of definedDirectives) { - directiveArgs.set(directive.name, directive.args.map(arg => arg.name)); + directiveArgs[directive.name] = directive.args.map(arg => arg.name); } const astDefinitions = context.getDocument().definitions; for (const def of astDefinitions) { if (def.kind === _kinds.Kind.DIRECTIVE_DEFINITION) { var _def$arguments; + // FIXME: https://github.com/graphql/graphql-js/issues/2203 + /* c8 ignore next */ const argsNodes = (_def$arguments = def.arguments) !== null && _def$arguments !== void 0 ? _def$arguments : []; - directiveArgs.set(def.name.value, argsNodes.map(arg => arg.name.value)); + directiveArgs[def.name.value] = argsNodes.map(arg => arg.name.value); } } return { Directive(directiveNode) { const directiveName = directiveNode.name.value; - const knownArgs = directiveArgs.get(directiveName); - if (directiveNode.arguments != null && knownArgs != null) { + const knownArgs = directiveArgs[directiveName]; + if (directiveNode.arguments && knownArgs) { for (const argNode of directiveNode.arguments) { const argName = argNode.name.value; if (!knownArgs.includes(argName)) { @@ -39103,6 +55590,7 @@ function KnownArgumentNamesOnDirectivesRule(context) { \******************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -39125,30 +55613,30 @@ var _directives = __webpack_require__(/*! ../../type/directives.mjs */ "../../.. * See https://spec.graphql.org/draft/#sec-Directives-Are-Defined */ function KnownDirectivesRule(context) { - const locationsMap = new Map(); + const locationsMap = Object.create(null); const schema = context.getSchema(); const definedDirectives = schema ? schema.getDirectives() : _directives.specifiedDirectives; for (const directive of definedDirectives) { - locationsMap.set(directive.name, directive.locations); + locationsMap[directive.name] = directive.locations; } const astDefinitions = context.getDocument().definitions; for (const def of astDefinitions) { if (def.kind === _kinds.Kind.DIRECTIVE_DEFINITION) { - locationsMap.set(def.name.value, def.locations.map(name => name.value)); + locationsMap[def.name.value] = def.locations.map(name => name.value); } } return { Directive(node, _key, _parent, _path, ancestors) { const name = node.name.value; - const locations = locationsMap.get(name); - if (locations == null) { + const locations = locationsMap[name]; + if (!locations) { context.reportError(new _GraphQLError.GraphQLError(`Unknown directive "@${name}".`, { nodes: node })); return; } const candidateLocation = getDirectiveLocationForASTPath(ancestors); - if (candidateLocation != null && !locations.includes(candidateLocation)) { + if (candidateLocation && !locations.includes(candidateLocation)) { context.reportError(new _GraphQLError.GraphQLError(`Directive "@${name}" may not be used on ${candidateLocation}.`, { nodes: node })); @@ -39157,8 +55645,8 @@ function KnownDirectivesRule(context) { }; } function getDirectiveLocationForASTPath(ancestors) { - const appliedTo = ancestors.at(-1); - appliedTo != null && 'kind' in appliedTo || (0, _invariant.invariant)(false); + const appliedTo = ancestors[ancestors.length - 1]; + 'kind' in appliedTo || (0, _invariant.invariant)(false); switch (appliedTo.kind) { case _kinds.Kind.OPERATION_DEFINITION: return getDirectiveLocationForOperation(appliedTo.operation); @@ -39199,12 +55687,14 @@ function getDirectiveLocationForASTPath(ancestors) { return _directiveLocation.DirectiveLocation.INPUT_OBJECT; case _kinds.Kind.INPUT_VALUE_DEFINITION: { - const parentNode = ancestors.at(-3); - parentNode != null && 'kind' in parentNode || (0, _invariant.invariant)(false); + const parentNode = ancestors[ancestors.length - 3]; + 'kind' in parentNode || (0, _invariant.invariant)(false); return parentNode.kind === _kinds.Kind.INPUT_OBJECT_TYPE_DEFINITION ? _directiveLocation.DirectiveLocation.INPUT_FIELD_DEFINITION : _directiveLocation.DirectiveLocation.ARGUMENT_DEFINITION; } // Not reachable, all possible types have been considered. - /* c8 ignore next 2 */ + + /* c8 ignore next */ + default: false || (0, _invariant.invariant)(false, 'Unexpected kind: ' + (0, _inspect.inspect)(appliedTo.kind)); } @@ -39228,6 +55718,7 @@ function getDirectiveLocationForOperation(operation) { \*********************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -39265,6 +55756,7 @@ function KnownFragmentNamesRule(context) { \*****************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -39286,23 +55778,26 @@ var _scalars = __webpack_require__(/*! ../../type/scalars.mjs */ "../../../node_ * See https://spec.graphql.org/draft/#sec-Fragment-Spread-Type-Existence */ function KnownTypeNamesRule(context) { - var _context$getSchema$ge, _context$getSchema; - const { - definitions - } = context.getDocument(); - const existingTypesMap = (_context$getSchema$ge = (_context$getSchema = context.getSchema()) === null || _context$getSchema === void 0 ? void 0 : _context$getSchema.getTypeMap()) !== null && _context$getSchema$ge !== void 0 ? _context$getSchema$ge : {}; - const typeNames = new Set([...Object.keys(existingTypesMap), ...definitions.filter(_predicates.isTypeDefinitionNode).map(def => def.name.value)]); + const schema = context.getSchema(); + const existingTypesMap = schema ? schema.getTypeMap() : Object.create(null); + const definedTypes = Object.create(null); + for (const def of context.getDocument().definitions) { + if ((0, _predicates.isTypeDefinitionNode)(def)) { + definedTypes[def.name.value] = true; + } + } + const typeNames = [...Object.keys(existingTypesMap), ...Object.keys(definedTypes)]; return { NamedType(node, _1, parent, _2, ancestors) { const typeName = node.name.value; - if (!typeNames.has(typeName)) { + if (!existingTypesMap[typeName] && !definedTypes[typeName]) { var _ancestors$; const definitionNode = (_ancestors$ = ancestors[2]) !== null && _ancestors$ !== void 0 ? _ancestors$ : parent; const isSDL = definitionNode != null && isSDLNode(definitionNode); - if (isSDL && standardTypeNames.has(typeName)) { + if (isSDL && standardTypeNames.includes(typeName)) { return; } - const suggestedTypes = (0, _suggestionList.suggestionList)(typeName, isSDL ? [...standardTypeNames, ...typeNames] : [...typeNames]); + const suggestedTypes = (0, _suggestionList.suggestionList)(typeName, isSDL ? standardTypeNames.concat(typeNames) : typeNames); context.reportError(new _GraphQLError.GraphQLError(`Unknown type "${typeName}".` + (0, _didYouMean.didYouMean)(suggestedTypes), { nodes: node })); @@ -39310,7 +55805,7 @@ function KnownTypeNamesRule(context) { } }; } -const standardTypeNames = new Set([..._scalars.specifiedScalarTypes, ..._introspection.introspectionTypes].map(type => type.name)); +const standardTypeNames = [..._scalars.specifiedScalarTypes, ..._introspection.introspectionTypes].map(type => type.name); function isSDLNode(value) { return 'kind' in value && ((0, _predicates.isTypeSystemDefinitionNode)(value) || (0, _predicates.isTypeSystemExtensionNode)(value)); } @@ -39323,6 +55818,7 @@ function isSDLNode(value) { \*************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -39363,6 +55859,7 @@ function LoneAnonymousOperationRule(context) { \***********************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -39406,6 +55903,7 @@ function LoneSchemaDefinitionRule(context) { \************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -39429,14 +55927,14 @@ function MaxIntrospectionDepthRule(context) { } const fragment = context.getFragment(fragmentName); if (!fragment) { - // Missing fragments checks are handled by the `KnownFragmentNamesRule`. + // Missing fragments checks are handled by `KnownFragmentNamesRule`. return false; - } - // Rather than following an immutable programming pattern which has + } // Rather than following an immutable programming pattern which has // significant memory and garbage collection overhead, we've opted to // take a mutable approach for efficiency's sake. Importantly visiting a // fragment twice is fine, so long as you don't do one visit inside the // other. + try { visitedFragments[fragmentName] = true; return checkDepth(fragment, visitedFragments, depth); @@ -39446,15 +55944,14 @@ function MaxIntrospectionDepthRule(context) { } if (node.kind === _kinds.Kind.FIELD && ( // check all introspection lists - // TODO: instead of relying on field names, check whether the type is a list node.name.value === 'fields' || node.name.value === 'interfaces' || node.name.value === 'possibleTypes' || node.name.value === 'inputFields')) { // eslint-disable-next-line no-param-reassign depth++; if (depth >= MAX_LISTS_DEPTH) { return true; } - } - // handles fields and inline fragments + } // handles fields and inline fragments + if ('selectionSet' in node && node.selectionSet) { for (const child of node.selectionSet.selections) { if (checkDepth(child, visitedFragments, depth)) { @@ -39486,6 +55983,7 @@ function MaxIntrospectionDepthRule(context) { \*******************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -39504,10 +56002,10 @@ var _GraphQLError = __webpack_require__(/*! ../../error/GraphQLError.mjs */ "../ function NoFragmentCyclesRule(context) { // Tracks already visited fragments to maintain O(N) and to ensure that cycles // are not redundantly reported. - const visitedFrags = new Set(); - // Array of AST nodes used to produce meaningful errors - const spreadPath = []; - // Position in the spread path + const visitedFrags = Object.create(null); // Array of AST nodes used to produce meaningful errors + + const spreadPath = []; // Position in the spread path + const spreadPathIndexByName = Object.create(null); return { OperationDefinition: () => false, @@ -39515,16 +56013,16 @@ function NoFragmentCyclesRule(context) { detectCycleRecursive(node); return false; } - }; - // This does a straight-forward DFS to find cycles. + }; // This does a straight-forward DFS to find cycles. // It does not terminate when a cycle was found but continues to explore // the graph to find all possible cycles. + function detectCycleRecursive(fragment) { - if (visitedFrags.has(fragment.name.value)) { + if (visitedFrags[fragment.name.value]) { return; } const fragmentName = fragment.name.value; - visitedFrags.add(fragmentName); + visitedFrags[fragmentName] = true; const spreadNodes = context.getFragmentSpreads(fragment.selectionSet); if (spreadNodes.length === 0) { return; @@ -39560,6 +56058,7 @@ function NoFragmentCyclesRule(context) { \***********************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -39576,21 +56075,28 @@ var _GraphQLError = __webpack_require__(/*! ../../error/GraphQLError.mjs */ "../ * See https://spec.graphql.org/draft/#sec-All-Variable-Uses-Defined */ function NoUndefinedVariablesRule(context) { + let variableNameDefined = Object.create(null); return { - OperationDefinition(operation) { - var _operation$variableDe; - const variableNameDefined = new Set((_operation$variableDe = operation.variableDefinitions) === null || _operation$variableDe === void 0 ? void 0 : _operation$variableDe.map(node => node.variable.name.value)); - const usages = context.getRecursiveVariableUsages(operation); - for (const { - node - } of usages) { - const varName = node.name.value; - if (!variableNameDefined.has(varName)) { - context.reportError(new _GraphQLError.GraphQLError(operation.name ? `Variable "$${varName}" is not defined by operation "${operation.name.value}".` : `Variable "$${varName}" is not defined.`, { - nodes: [node, operation] - })); + OperationDefinition: { + enter() { + variableNameDefined = Object.create(null); + }, + leave(operation) { + const usages = context.getRecursiveVariableUsages(operation); + for (const { + node + } of usages) { + const varName = node.name.value; + if (variableNameDefined[varName] !== true) { + context.reportError(new _GraphQLError.GraphQLError(operation.name ? `Variable "$${varName}" is not defined by operation "${operation.name.value}".` : `Variable "$${varName}" is not defined.`, { + nodes: [node, operation] + })); + } } } + }, + VariableDefinition(node) { + variableNameDefined[node.variable.name.value] = true; } }; } @@ -39603,6 +56109,7 @@ function NoUndefinedVariablesRule(context) { \********************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -39619,13 +56126,11 @@ var _GraphQLError = __webpack_require__(/*! ../../error/GraphQLError.mjs */ "../ * See https://spec.graphql.org/draft/#sec-Fragments-Must-Be-Used */ function NoUnusedFragmentsRule(context) { - const fragmentNameUsed = new Set(); + const operationDefs = []; const fragmentDefs = []; return { - OperationDefinition(operation) { - for (const fragment of context.getRecursivelyReferencedFragments(operation)) { - fragmentNameUsed.add(fragment.name.value); - } + OperationDefinition(node) { + operationDefs.push(node); return false; }, FragmentDefinition(node) { @@ -39634,9 +56139,15 @@ function NoUnusedFragmentsRule(context) { }, Document: { leave() { + const fragmentNameUsed = Object.create(null); + for (const operation of operationDefs) { + for (const fragment of context.getRecursivelyReferencedFragments(operation)) { + fragmentNameUsed[fragment.name.value] = true; + } + } for (const fragmentDef of fragmentDefs) { const fragName = fragmentDef.name.value; - if (!fragmentNameUsed.has(fragName)) { + if (fragmentNameUsed[fragName] !== true) { context.reportError(new _GraphQLError.GraphQLError(`Fragment "${fragName}" is never used.`, { nodes: fragmentDef })); @@ -39655,6 +56166,7 @@ function NoUnusedFragmentsRule(context) { \********************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -39671,24 +56183,32 @@ var _GraphQLError = __webpack_require__(/*! ../../error/GraphQLError.mjs */ "../ * See https://spec.graphql.org/draft/#sec-All-Variables-Used */ function NoUnusedVariablesRule(context) { + let variableDefs = []; return { - OperationDefinition(operation) { - var _operation$variableDe; - const usages = context.getRecursiveVariableUsages(operation); - const variableNameUsed = new Set(usages.map(({ - node - }) => node.name.value)); - // FIXME: https://github.com/graphql/graphql-js/issues/2203 - /* c8 ignore next */ - const variableDefinitions = (_operation$variableDe = operation.variableDefinitions) !== null && _operation$variableDe !== void 0 ? _operation$variableDe : []; - for (const variableDef of variableDefinitions) { - const variableName = variableDef.variable.name.value; - if (!variableNameUsed.has(variableName)) { - context.reportError(new _GraphQLError.GraphQLError(operation.name ? `Variable "$${variableName}" is never used in operation "${operation.name.value}".` : `Variable "$${variableName}" is never used.`, { - nodes: variableDef - })); + OperationDefinition: { + enter() { + variableDefs = []; + }, + leave(operation) { + const variableNameUsed = Object.create(null); + const usages = context.getRecursiveVariableUsages(operation); + for (const { + node + } of usages) { + variableNameUsed[node.name.value] = true; + } + for (const variableDef of variableDefs) { + const variableName = variableDef.variable.name.value; + if (variableNameUsed[variableName] !== true) { + context.reportError(new _GraphQLError.GraphQLError(operation.name ? `Variable "$${variableName}" is never used in operation "${operation.name.value}".` : `Variable "$${variableName}" is never used.`, { + nodes: variableDef + })); + } } } + }, + VariableDefinition(def) { + variableDefs.push(def); } }; } @@ -39701,6 +56221,7 @@ function NoUnusedVariablesRule(context) { \*******************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -39714,9 +56235,6 @@ var _printer = __webpack_require__(/*! ../../language/printer.mjs */ "../../../n var _definition = __webpack_require__(/*! ../../type/definition.mjs */ "../../../node_modules/graphql/type/definition.mjs"); var _sortValueNode = __webpack_require__(/*! ../../utilities/sortValueNode.mjs */ "../../../node_modules/graphql/utilities/sortValueNode.mjs"); var _typeFromAST = __webpack_require__(/*! ../../utilities/typeFromAST.mjs */ "../../../node_modules/graphql/utilities/typeFromAST.mjs"); -/* eslint-disable max-params */ -// This file contains a lot of such errors but we plan to refactor it anyway -// so just disable it for entire file. function reasonMessage(reason) { if (Array.isArray(reason)) { return reason.map(([responseName, subReason]) => `subfields "${responseName}" conflict because ` + reasonMessage(subReason)).join(' and '); @@ -39732,14 +56250,15 @@ function reasonMessage(reason) { * * See https://spec.graphql.org/draft/#sec-Field-Selection-Merging */ + function OverlappingFieldsCanBeMergedRule(context) { // A memoization for when two fragments are compared "between" each other for // conflicts. Two fragments may be compared many times, so memoizing this can // dramatically improve the performance of this validator. - const comparedFragmentPairs = new PairSet(); - // A cache for the "field map" and list of fragment names found in any given + const comparedFragmentPairs = new PairSet(); // A cache for the "field map" and list of fragment names found in any given // selection set. Selection sets may be asked for this information multiple // times, so this improves the performance of this validator. + const cachedFieldsAndFragmentNames = new Map(); return { SelectionSet(selectionSet) { @@ -39753,6 +56272,7 @@ function OverlappingFieldsCanBeMergedRule(context) { } }; } + /** * Algorithm: * @@ -39812,43 +56332,43 @@ function OverlappingFieldsCanBeMergedRule(context) { // GraphQL Document. function findConflictsWithinSelectionSet(context, cachedFieldsAndFragmentNames, comparedFragmentPairs, parentType, selectionSet) { const conflicts = []; - const [fieldMap, fragmentNames] = getFieldsAndFragmentNames(context, cachedFieldsAndFragmentNames, parentType, selectionSet); - // (A) Find find all conflicts "within" the fields of this selection set. + const [fieldMap, fragmentNames] = getFieldsAndFragmentNames(context, cachedFieldsAndFragmentNames, parentType, selectionSet); // (A) Find find all conflicts "within" the fields of this selection set. // Note: this is the *only place* `collectConflictsWithin` is called. + collectConflictsWithin(context, conflicts, cachedFieldsAndFragmentNames, comparedFragmentPairs, fieldMap); if (fragmentNames.length !== 0) { // (B) Then collect conflicts between these fields and those represented by // each spread fragment name found. for (let i = 0; i < fragmentNames.length; i++) { - collectConflictsBetweenFieldsAndFragment(context, conflicts, cachedFieldsAndFragmentNames, comparedFragmentPairs, false, fieldMap, fragmentNames[i]); - // (C) Then compare this fragment with all other fragments found in this + collectConflictsBetweenFieldsAndFragment(context, conflicts, cachedFieldsAndFragmentNames, comparedFragmentPairs, false, fieldMap, fragmentNames[i]); // (C) Then compare this fragment with all other fragments found in this // selection set to collect conflicts between fragments spread together. // This compares each item in the list of fragment names to every other // item in that same list (except for itself). + for (let j = i + 1; j < fragmentNames.length; j++) { collectConflictsBetweenFragments(context, conflicts, cachedFieldsAndFragmentNames, comparedFragmentPairs, false, fragmentNames[i], fragmentNames[j]); } } } return conflicts; -} -// Collect all conflicts found between a set of fields and a fragment reference +} // Collect all conflicts found between a set of fields and a fragment reference // including via spreading in any nested fragments. + function collectConflictsBetweenFieldsAndFragment(context, conflicts, cachedFieldsAndFragmentNames, comparedFragmentPairs, areMutuallyExclusive, fieldMap, fragmentName) { const fragment = context.getFragment(fragmentName); if (!fragment) { return; } - const [fieldMap2, referencedFragmentNames] = getReferencedFieldsAndFragmentNames(context, cachedFieldsAndFragmentNames, fragment); - // Do not compare a fragment's fieldMap to itself. + const [fieldMap2, referencedFragmentNames] = getReferencedFieldsAndFragmentNames(context, cachedFieldsAndFragmentNames, fragment); // Do not compare a fragment's fieldMap to itself. + if (fieldMap === fieldMap2) { return; - } - // (D) First collect any conflicts between the provided collection of fields + } // (D) First collect any conflicts between the provided collection of fields // and the collection of fields represented by the given fragment. - collectConflictsBetween(context, conflicts, cachedFieldsAndFragmentNames, comparedFragmentPairs, areMutuallyExclusive, fieldMap, fieldMap2); - // (E) Then collect any conflicts between the provided collection of fields + + collectConflictsBetween(context, conflicts, cachedFieldsAndFragmentNames, comparedFragmentPairs, areMutuallyExclusive, fieldMap, fieldMap2); // (E) Then collect any conflicts between the provided collection of fields // and any fragment names found in the given fragment. + for (const referencedFragmentName of referencedFragmentNames) { // Memoize so two fragments are not compared for conflicts more than once. if (comparedFragmentPairs.has(referencedFragmentName, fragmentName, areMutuallyExclusive)) { @@ -39857,15 +56377,15 @@ function collectConflictsBetweenFieldsAndFragment(context, conflicts, cachedFiel comparedFragmentPairs.add(referencedFragmentName, fragmentName, areMutuallyExclusive); collectConflictsBetweenFieldsAndFragment(context, conflicts, cachedFieldsAndFragmentNames, comparedFragmentPairs, areMutuallyExclusive, fieldMap, referencedFragmentName); } -} -// Collect all conflicts found between two fragments, including via spreading in +} // Collect all conflicts found between two fragments, including via spreading in // any nested fragments. + function collectConflictsBetweenFragments(context, conflicts, cachedFieldsAndFragmentNames, comparedFragmentPairs, areMutuallyExclusive, fragmentName1, fragmentName2) { // No need to compare a fragment to itself. if (fragmentName1 === fragmentName2) { return; - } - // Memoize so two fragments are not compared for conflicts more than once. + } // Memoize so two fragments are not compared for conflicts more than once. + if (comparedFragmentPairs.has(fragmentName1, fragmentName2, areMutuallyExclusive)) { return; } @@ -39876,57 +56396,57 @@ function collectConflictsBetweenFragments(context, conflicts, cachedFieldsAndFra return; } const [fieldMap1, referencedFragmentNames1] = getReferencedFieldsAndFragmentNames(context, cachedFieldsAndFragmentNames, fragment1); - const [fieldMap2, referencedFragmentNames2] = getReferencedFieldsAndFragmentNames(context, cachedFieldsAndFragmentNames, fragment2); - // (F) First, collect all conflicts between these two collections of fields + const [fieldMap2, referencedFragmentNames2] = getReferencedFieldsAndFragmentNames(context, cachedFieldsAndFragmentNames, fragment2); // (F) First, collect all conflicts between these two collections of fields // (not including any nested fragments). - collectConflictsBetween(context, conflicts, cachedFieldsAndFragmentNames, comparedFragmentPairs, areMutuallyExclusive, fieldMap1, fieldMap2); - // (G) Then collect conflicts between the first fragment and any nested + + collectConflictsBetween(context, conflicts, cachedFieldsAndFragmentNames, comparedFragmentPairs, areMutuallyExclusive, fieldMap1, fieldMap2); // (G) Then collect conflicts between the first fragment and any nested // fragments spread in the second fragment. + for (const referencedFragmentName2 of referencedFragmentNames2) { collectConflictsBetweenFragments(context, conflicts, cachedFieldsAndFragmentNames, comparedFragmentPairs, areMutuallyExclusive, fragmentName1, referencedFragmentName2); - } - // (G) Then collect conflicts between the second fragment and any nested + } // (G) Then collect conflicts between the second fragment and any nested // fragments spread in the first fragment. + for (const referencedFragmentName1 of referencedFragmentNames1) { collectConflictsBetweenFragments(context, conflicts, cachedFieldsAndFragmentNames, comparedFragmentPairs, areMutuallyExclusive, referencedFragmentName1, fragmentName2); } -} -// Find all conflicts found between two selection sets, including those found +} // Find all conflicts found between two selection sets, including those found // via spreading in fragments. Called when determining if conflicts exist // between the sub-fields of two overlapping fields. + function findConflictsBetweenSubSelectionSets(context, cachedFieldsAndFragmentNames, comparedFragmentPairs, areMutuallyExclusive, parentType1, selectionSet1, parentType2, selectionSet2) { const conflicts = []; const [fieldMap1, fragmentNames1] = getFieldsAndFragmentNames(context, cachedFieldsAndFragmentNames, parentType1, selectionSet1); - const [fieldMap2, fragmentNames2] = getFieldsAndFragmentNames(context, cachedFieldsAndFragmentNames, parentType2, selectionSet2); - // (H) First, collect all conflicts between these two collections of field. - collectConflictsBetween(context, conflicts, cachedFieldsAndFragmentNames, comparedFragmentPairs, areMutuallyExclusive, fieldMap1, fieldMap2); - // (I) Then collect conflicts between the first collection of fields and + const [fieldMap2, fragmentNames2] = getFieldsAndFragmentNames(context, cachedFieldsAndFragmentNames, parentType2, selectionSet2); // (H) First, collect all conflicts between these two collections of field. + + collectConflictsBetween(context, conflicts, cachedFieldsAndFragmentNames, comparedFragmentPairs, areMutuallyExclusive, fieldMap1, fieldMap2); // (I) Then collect conflicts between the first collection of fields and // those referenced by each fragment name associated with the second. + for (const fragmentName2 of fragmentNames2) { collectConflictsBetweenFieldsAndFragment(context, conflicts, cachedFieldsAndFragmentNames, comparedFragmentPairs, areMutuallyExclusive, fieldMap1, fragmentName2); - } - // (I) Then collect conflicts between the second collection of fields and + } // (I) Then collect conflicts between the second collection of fields and // those referenced by each fragment name associated with the first. + for (const fragmentName1 of fragmentNames1) { collectConflictsBetweenFieldsAndFragment(context, conflicts, cachedFieldsAndFragmentNames, comparedFragmentPairs, areMutuallyExclusive, fieldMap2, fragmentName1); - } - // (J) Also collect conflicts between any fragment names by the first and + } // (J) Also collect conflicts between any fragment names by the first and // fragment names by the second. This compares each item in the first set of // names to each item in the second set of names. + for (const fragmentName1 of fragmentNames1) { for (const fragmentName2 of fragmentNames2) { collectConflictsBetweenFragments(context, conflicts, cachedFieldsAndFragmentNames, comparedFragmentPairs, areMutuallyExclusive, fragmentName1, fragmentName2); } } return conflicts; -} -// Collect all Conflicts "within" one collection of fields. +} // Collect all Conflicts "within" one collection of fields. + function collectConflictsWithin(context, conflicts, cachedFieldsAndFragmentNames, comparedFragmentPairs, fieldMap) { // A field map is a keyed collection, where each key represents a response // name and the value at that key is a list of all fields which provide that // response name. For every response name, if there are multiple fields, they // must be compared to find a potential conflict. - for (const [responseName, fields] of fieldMap.entries()) { + for (const [responseName, fields] of Object.entries(fieldMap)) { // This compares every field in the list to every other field in this list // (except to itself). If the list only has one item, nothing needs to // be compared. @@ -39943,21 +56463,21 @@ function collectConflictsWithin(context, conflicts, cachedFieldsAndFragmentNames } } } -} -// Collect all Conflicts between two collections of fields. This is similar to, +} // Collect all Conflicts between two collections of fields. This is similar to, // but different from the `collectConflictsWithin` function above. This check // assumes that `collectConflictsWithin` has already been called on each // provided collection of fields. This is true because this validator traverses // each individual selection set. + function collectConflictsBetween(context, conflicts, cachedFieldsAndFragmentNames, comparedFragmentPairs, parentFieldsAreMutuallyExclusive, fieldMap1, fieldMap2) { // A field map is a keyed collection, where each key represents a response // name and the value at that key is a list of all fields which provide that // response name. For any response name which appears in both provided field // maps, each field from the first field map must be compared to every field // in the second field map to find potential conflicts. - for (const [responseName, fields1] of fieldMap1.entries()) { - const fields2 = fieldMap2.get(responseName); - if (fields2 != null) { + for (const [responseName, fields1] of Object.entries(fieldMap1)) { + const fields2 = fieldMap2[responseName]; + if (fields2) { for (const field1 of fields1) { for (const field2 of fields2) { const conflict = findConflict(context, cachedFieldsAndFragmentNames, comparedFragmentPairs, parentFieldsAreMutuallyExclusive, responseName, field1, field2); @@ -39968,14 +56488,12 @@ function collectConflictsBetween(context, conflicts, cachedFieldsAndFragmentName } } } -} -// Determines if there is a conflict between two particular fields, including +} // Determines if there is a conflict between two particular fields, including // comparing their sub-fields. + function findConflict(context, cachedFieldsAndFragmentNames, comparedFragmentPairs, parentFieldsAreMutuallyExclusive, responseName, field1, field2) { - var _node1$directives, _node2$directives; const [parentType1, node1, def1] = field1; - const [parentType2, node2, def2] = field2; - // If it is known that two fields could not possibly apply at the same + const [parentType2, node2, def2] = field2; // If it is known that two fields could not possibly apply at the same // time, due to the parent types, then it is safe to permit them to diverge // in aliased field or arguments used as they will not present any ambiguity // by differing. @@ -39983,6 +56501,7 @@ function findConflict(context, cachedFieldsAndFragmentNames, comparedFragmentPai // different Object types. Interface or Union types might overlap - if not // in the current state of the schema, then perhaps in some future version, // thus may not safely diverge. + const areMutuallyExclusive = parentFieldsAreMutuallyExclusive || parentType1 !== parentType2 && (0, _definition.isObjectType)(parentType1) && (0, _definition.isObjectType)(parentType2); if (!areMutuallyExclusive) { // Two aliases must refer to the same field. @@ -39990,27 +56509,21 @@ function findConflict(context, cachedFieldsAndFragmentNames, comparedFragmentPai const name2 = node2.name.value; if (name1 !== name2) { return [[responseName, `"${name1}" and "${name2}" are different fields`], [node1], [node2]]; - } - // Two field calls must have the same arguments. + } // Two field calls must have the same arguments. + if (!sameArguments(node1, node2)) { return [[responseName, 'they have differing arguments'], [node1], [node2]]; } - } - // FIXME https://github.com/graphql/graphql-js/issues/2203 - const directives1 = /* c8 ignore next */(_node1$directives = node1.directives) !== null && _node1$directives !== void 0 ? _node1$directives : []; - const directives2 = /* c8 ignore next */(_node2$directives = node2.directives) !== null && _node2$directives !== void 0 ? _node2$directives : []; - if (!sameStreams(directives1, directives2)) { - return [[responseName, 'they have differing stream directives'], [node1], [node2]]; - } - // The return type for each field. + } // The return type for each field. + const type1 = def1 === null || def1 === void 0 ? void 0 : def1.type; const type2 = def2 === null || def2 === void 0 ? void 0 : def2.type; if (type1 && type2 && doTypesConflict(type1, type2)) { return [[responseName, `they return conflicting types "${(0, _inspect.inspect)(type1)}" and "${(0, _inspect.inspect)(type2)}"`], [node1], [node2]]; - } - // Collect and compare sub-fields. Use the same "visited fragment names" list + } // Collect and compare sub-fields. Use the same "visited fragment names" list // for both collections so fields in a fragment reference are never // compared to themselves. + const selectionSet1 = node1.selectionSet; const selectionSet2 = node2.selectionSet; if (selectionSet1 && selectionSet2) { @@ -40027,8 +56540,12 @@ function sameArguments(node1, node2) { if (args2 === undefined || args2.length === 0) { return false; } + /* c8 ignore next */ + if (args1.length !== args2.length) { + /* c8 ignore next */ return false; + /* c8 ignore next */ } const values2 = new Map(args2.map(({ name, @@ -40045,26 +56562,10 @@ function sameArguments(node1, node2) { } function stringifyValue(value) { return (0, _printer.print)((0, _sortValueNode.sortValueNode)(value)); -} -function getStreamDirective(directives) { - return directives.find(directive => directive.name.value === 'stream'); -} -function sameStreams(directives1, directives2) { - const stream1 = getStreamDirective(directives1); - const stream2 = getStreamDirective(directives2); - if (!stream1 && !stream2) { - // both fields do not have streams - return true; - } else if (stream1 && stream2) { - // check if both fields have equivalent streams - return sameArguments(stream1, stream2); - } - // fields have a mix of stream and no stream - return false; -} -// Two types conflict if both types could not apply to a value simultaneously. +} // Two types conflict if both types could not apply to a value simultaneously. // Composite types are ignored as their individual field types will be compared // later recursively. However List and Non-Null types must match. + function doTypesConflict(type1, type2) { if ((0, _definition.isListType)(type1)) { return (0, _definition.isListType)(type2) ? doTypesConflict(type1.ofType, type2.ofType) : true; @@ -40082,24 +56583,24 @@ function doTypesConflict(type1, type2) { return type1 !== type2; } return false; -} -// Given a selection set, return the collection of fields (a mapping of response +} // Given a selection set, return the collection of fields (a mapping of response // name to field nodes and definitions) as well as a list of fragment names // referenced via fragment spreads. + function getFieldsAndFragmentNames(context, cachedFieldsAndFragmentNames, parentType, selectionSet) { const cached = cachedFieldsAndFragmentNames.get(selectionSet); if (cached) { return cached; } - const nodeAndDefs = new Map(); - const fragmentNames = new Set(); + const nodeAndDefs = Object.create(null); + const fragmentNames = Object.create(null); _collectFieldsAndFragmentNames(context, parentType, selectionSet, nodeAndDefs, fragmentNames); - const result = [nodeAndDefs, [...fragmentNames]]; + const result = [nodeAndDefs, Object.keys(fragmentNames)]; cachedFieldsAndFragmentNames.set(selectionSet, result); return result; -} -// Given a reference to a fragment, return the represented collection of fields +} // Given a reference to a fragment, return the represented collection of fields // as well as a list of nested fragment names referenced via fragment spreads. + function getReferencedFieldsAndFragmentNames(context, cachedFieldsAndFragmentNames, fragment) { // Short-circuit building a type from the node if possible. const cached = cachedFieldsAndFragmentNames.get(fragment.selectionSet); @@ -40120,16 +56621,14 @@ function _collectFieldsAndFragmentNames(context, parentType, selectionSet, nodeA fieldDef = parentType.getFields()[fieldName]; } const responseName = selection.alias ? selection.alias.value : fieldName; - let nodeAndDefsList = nodeAndDefs.get(responseName); - if (nodeAndDefsList == null) { - nodeAndDefsList = []; - nodeAndDefs.set(responseName, nodeAndDefsList); + if (!nodeAndDefs[responseName]) { + nodeAndDefs[responseName] = []; } - nodeAndDefsList.push([parentType, selection, fieldDef]); + nodeAndDefs[responseName].push([parentType, selection, fieldDef]); break; } case _kinds.Kind.FRAGMENT_SPREAD: - fragmentNames.add(selection.name.value); + fragmentNames[selection.name.value] = true; break; case _kinds.Kind.INLINE_FRAGMENT: { @@ -40140,9 +56639,9 @@ function _collectFieldsAndFragmentNames(context, parentType, selectionSet, nodeA } } } -} -// Given a series of Conflicts which occurred between two sub-fields, generate +} // Given a series of Conflicts which occurred between two sub-fields, generate // a single Conflict. + function subfieldConflicts(conflicts, responseName, node1, node2) { if (conflicts.length > 0) { return [[responseName, conflicts.map(([reason]) => reason)], [node1, ...conflicts.map(([, fields1]) => fields1).flat()], [node2, ...conflicts.map(([,, fields2]) => fields2).flat()]]; @@ -40151,6 +56650,7 @@ function subfieldConflicts(conflicts, responseName, node1, node2) { /** * A way to keep track of pairs of things when the ordering of the pair does not matter. */ + class PairSet { constructor() { this._data = new Map(); @@ -40161,10 +56661,10 @@ class PairSet { const result = (_this$_data$get = this._data.get(key1)) === null || _this$_data$get === void 0 ? void 0 : _this$_data$get.get(key2); if (result === undefined) { return false; - } - // areMutuallyExclusive being false is a superset of being true, hence if + } // areMutuallyExclusive being false is a superset of being true, hence if // we want to know if this PairSet "has" these two with no exclusivity, // we have to ensure it was added as such. + return areMutuallyExclusive ? true : areMutuallyExclusive === result; } add(a, b, areMutuallyExclusive) { @@ -40186,6 +56686,7 @@ class PairSet { \**************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -40249,6 +56750,7 @@ function getFragmentType(context, name) { \*************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -40270,10 +56772,10 @@ var _definition = __webpack_require__(/*! ../../type/definition.mjs */ "../../.. */ function PossibleTypeExtensionsRule(context) { const schema = context.getSchema(); - const definedTypes = new Map(); + const definedTypes = Object.create(null); for (const def of context.getDocument().definitions) { if ((0, _predicates.isTypeDefinitionNode)(def)) { - definedTypes.set(def.name.value, def); + definedTypes[def.name.value] = def; } } return { @@ -40286,15 +56788,15 @@ function PossibleTypeExtensionsRule(context) { }; function checkExtension(node) { const typeName = node.name.value; - const defNode = definedTypes.get(typeName); + const defNode = definedTypes[typeName]; const existingType = schema === null || schema === void 0 ? void 0 : schema.getType(typeName); let expectedKind; - if (defNode != null) { + if (defNode) { expectedKind = defKindToExtKind[defNode.kind]; } else if (existingType) { expectedKind = typeToExtKind(existingType); } - if (expectedKind != null) { + if (expectedKind) { if (expectedKind !== node.kind) { const kindStr = extensionKindToTypeName(node.kind); context.reportError(new _GraphQLError.GraphQLError(`Cannot extend non-${kindStr} type "${typeName}".`, { @@ -40302,8 +56804,10 @@ function PossibleTypeExtensionsRule(context) { })); } } else { - var _schema$getTypeMap; - const allTypeNames = [...definedTypes.keys(), ...Object.keys((_schema$getTypeMap = schema === null || schema === void 0 ? void 0 : schema.getTypeMap()) !== null && _schema$getTypeMap !== void 0 ? _schema$getTypeMap : {})]; + const allTypeNames = Object.keys({ + ...definedTypes, + ...(schema === null || schema === void 0 ? void 0 : schema.getTypeMap()) + }); const suggestedTypes = (0, _suggestionList.suggestionList)(typeName, allTypeNames); context.reportError(new _GraphQLError.GraphQLError(`Cannot extend type "${typeName}" because it is not defined.` + (0, _didYouMean.didYouMean)(suggestedTypes), { nodes: node.name @@ -40340,6 +56844,7 @@ function typeToExtKind(type) { } /* c8 ignore next 3 */ // Not reachable. All possible types have been considered + false || (0, _invariant.invariant)(false, 'Unexpected type: ' + (0, _inspect.inspect)(type)); } function extensionKindToTypeName(kind) { @@ -40357,7 +56862,9 @@ function extensionKindToTypeName(kind) { case _kinds.Kind.INPUT_OBJECT_TYPE_EXTENSION: return 'input object'; // Not reachable. All possible types have been considered - /* c8 ignore next 2 */ + + /* c8 ignore next */ + default: false || (0, _invariant.invariant)(false, 'Unexpected kind: ' + (0, _inspect.inspect)(kind)); } @@ -40371,6 +56878,7 @@ function extensionKindToTypeName(kind) { \****************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -40379,6 +56887,7 @@ Object.defineProperty(exports, "__esModule", ({ exports.ProvidedRequiredArgumentsOnDirectivesRule = ProvidedRequiredArgumentsOnDirectivesRule; exports.ProvidedRequiredArgumentsRule = ProvidedRequiredArgumentsRule; var _inspect = __webpack_require__(/*! ../../jsutils/inspect.mjs */ "../../../node_modules/graphql/jsutils/inspect.mjs"); +var _keyMap = __webpack_require__(/*! ../../jsutils/keyMap.mjs */ "../../../node_modules/graphql/jsutils/keyMap.mjs"); var _GraphQLError = __webpack_require__(/*! ../../error/GraphQLError.mjs */ "../../../node_modules/graphql/error/GraphQLError.mjs"); var _kinds = __webpack_require__(/*! ../../language/kinds.mjs */ "../../../node_modules/graphql/language/kinds.mjs"); var _printer = __webpack_require__(/*! ../../language/printer.mjs */ "../../../node_modules/graphql/language/printer.mjs"); @@ -40402,7 +56911,8 @@ function ProvidedRequiredArgumentsRule(context) { if (!fieldDef) { return false; } - const providedArgs = new Set( // FIXME: https://github.com/graphql/graphql-js/issues/2203 + const providedArgs = new Set( + // FIXME: https://github.com/graphql/graphql-js/issues/2203 /* c8 ignore next */ (_fieldNode$arguments = fieldNode.arguments) === null || _fieldNode$arguments === void 0 ? void 0 : _fieldNode$arguments.map(arg => arg.name.value)); for (const argDef of fieldDef.args) { @@ -40420,22 +56930,25 @@ function ProvidedRequiredArgumentsRule(context) { /** * @internal */ + function ProvidedRequiredArgumentsOnDirectivesRule(context) { var _schema$getDirectives; - const requiredArgsMap = new Map(); + const requiredArgsMap = Object.create(null); const schema = context.getSchema(); const definedDirectives = (_schema$getDirectives = schema === null || schema === void 0 ? void 0 : schema.getDirectives()) !== null && _schema$getDirectives !== void 0 ? _schema$getDirectives : _directives.specifiedDirectives; for (const directive of definedDirectives) { - requiredArgsMap.set(directive.name, new Map(directive.args.filter(_definition.isRequiredArgument).map(arg => [arg.name, arg]))); + requiredArgsMap[directive.name] = (0, _keyMap.keyMap)(directive.args.filter(_definition.isRequiredArgument), arg => arg.name); } const astDefinitions = context.getDocument().definitions; for (const def of astDefinitions) { if (def.kind === _kinds.Kind.DIRECTIVE_DEFINITION) { var _def$arguments; + // FIXME: https://github.com/graphql/graphql-js/issues/2203 + /* c8 ignore next */ const argNodes = (_def$arguments = def.arguments) !== null && _def$arguments !== void 0 ? _def$arguments : []; - requiredArgsMap.set(def.name.value, new Map(argNodes.filter(isRequiredArgumentNode).map(arg => [arg.name.value, arg]))); + requiredArgsMap[def.name.value] = (0, _keyMap.keyMap)(argNodes.filter(isRequiredArgumentNode), arg => arg.name.value); } } return { @@ -40443,14 +56956,16 @@ function ProvidedRequiredArgumentsOnDirectivesRule(context) { // Validate on leave to allow for deeper errors to appear first. leave(directiveNode) { const directiveName = directiveNode.name.value; - const requiredArgs = requiredArgsMap.get(directiveName); - if (requiredArgs != null) { + const requiredArgs = requiredArgsMap[directiveName]; + if (requiredArgs) { var _directiveNode$argume; + // FIXME: https://github.com/graphql/graphql-js/issues/2203 + /* c8 ignore next */ const argNodes = (_directiveNode$argume = directiveNode.arguments) !== null && _directiveNode$argume !== void 0 ? _directiveNode$argume : []; const argNodeMap = new Set(argNodes.map(arg => arg.name.value)); - for (const [argName, argDef] of requiredArgs.entries()) { + for (const [argName, argDef] of Object.entries(requiredArgs)) { if (!argNodeMap.has(argName)) { const argType = (0, _definition.isType)(argDef.type) ? (0, _inspect.inspect)(argDef.type) : (0, _printer.print)(argDef.type); context.reportError(new _GraphQLError.GraphQLError(`Directive "@${directiveName}" argument "${argName}" of type "${argType}" is required, but it was not provided.`, { @@ -40475,6 +56990,7 @@ function isRequiredArgumentNode(arg) { \**************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -40524,6 +57040,7 @@ function ScalarLeafsRule(context) { \***************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -40533,9 +57050,6 @@ exports.SingleFieldSubscriptionsRule = SingleFieldSubscriptionsRule; var _GraphQLError = __webpack_require__(/*! ../../error/GraphQLError.mjs */ "../../../node_modules/graphql/error/GraphQLError.mjs"); var _kinds = __webpack_require__(/*! ../../language/kinds.mjs */ "../../../node_modules/graphql/language/kinds.mjs"); var _collectFields = __webpack_require__(/*! ../../execution/collectFields.mjs */ "../../../node_modules/graphql/execution/collectFields.mjs"); -function toNodes(fieldGroup) { - return fieldGroup.map(fieldDetails => fieldDetails.node); -} /** * Subscriptions must only include a non-introspection field. * @@ -40560,22 +57074,21 @@ function SingleFieldSubscriptionsRule(context) { fragments[definition.name.value] = definition; } } - const { - groupedFieldSet - } = (0, _collectFields.collectFields)(schema, fragments, variableValues, subscriptionType, node); - if (groupedFieldSet.size > 1) { - const fieldGroups = [...groupedFieldSet.values()]; - const extraFieldGroups = fieldGroups.slice(1); - const extraFieldSelections = extraFieldGroups.flatMap(fieldGroup => toNodes(fieldGroup)); + const fields = (0, _collectFields.collectFields)(schema, fragments, variableValues, subscriptionType, node.selectionSet); + if (fields.size > 1) { + const fieldSelectionLists = [...fields.values()]; + const extraFieldSelectionLists = fieldSelectionLists.slice(1); + const extraFieldSelections = extraFieldSelectionLists.flat(); context.reportError(new _GraphQLError.GraphQLError(operationName != null ? `Subscription "${operationName}" must select only one top level field.` : 'Anonymous Subscription must select only one top level field.', { nodes: extraFieldSelections })); } - for (const fieldGroup of groupedFieldSet.values()) { - const fieldName = toNodes(fieldGroup)[0].name.value; + for (const fieldNodes of fields.values()) { + const field = fieldNodes[0]; + const fieldName = field.name.value; if (fieldName.startsWith('__')) { context.reportError(new _GraphQLError.GraphQLError(operationName != null ? `Subscription "${operationName}" must not select an introspection top level field.` : 'Anonymous Subscription must not select an introspection top level field.', { - nodes: toNodes(fieldGroup) + nodes: fieldNodes })); } } @@ -40587,48 +57100,13 @@ function SingleFieldSubscriptionsRule(context) { /***/ }), -/***/ "../../../node_modules/graphql/validation/rules/StreamDirectiveOnListFieldRule.mjs": -/*!*****************************************************************************************!*\ - !*** ../../../node_modules/graphql/validation/rules/StreamDirectiveOnListFieldRule.mjs ***! - \*****************************************************************************************/ -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - - - -Object.defineProperty(exports, "__esModule", ({ - value: true -})); -exports.StreamDirectiveOnListFieldRule = StreamDirectiveOnListFieldRule; -var _GraphQLError = __webpack_require__(/*! ../../error/GraphQLError.mjs */ "../../../node_modules/graphql/error/GraphQLError.mjs"); -var _definition = __webpack_require__(/*! ../../type/definition.mjs */ "../../../node_modules/graphql/type/definition.mjs"); -var _directives = __webpack_require__(/*! ../../type/directives.mjs */ "../../../node_modules/graphql/type/directives.mjs"); -/** - * Stream directives are used on list fields - * - * A GraphQL document is only valid if stream directives are used on list fields. - */ -function StreamDirectiveOnListFieldRule(context) { - return { - Directive(node) { - const fieldDef = context.getFieldDef(); - const parentType = context.getParentType(); - if (fieldDef && parentType && node.name.value === _directives.GraphQLStreamDirective.name && !((0, _definition.isListType)(fieldDef.type) || (0, _definition.isWrappingType)(fieldDef.type) && (0, _definition.isListType)(fieldDef.type.ofType))) { - context.reportError(new _GraphQLError.GraphQLError(`Stream directive cannot be used on non-list field "${fieldDef.name}" on type "${parentType.name}".`, { - nodes: node - })); - } - } - }; -} - -/***/ }), - /***/ "../../../node_modules/graphql/validation/rules/UniqueArgumentDefinitionNamesRule.mjs": /*!********************************************************************************************!*\ !*** ../../../node_modules/graphql/validation/rules/UniqueArgumentDefinitionNamesRule.mjs ***! \********************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -40647,7 +57125,9 @@ function UniqueArgumentDefinitionNamesRule(context) { return { DirectiveDefinition(directiveNode) { var _directiveNode$argume; + // FIXME: https://github.com/graphql/graphql-js/issues/2203 + /* c8 ignore next */ const argumentNodes = (_directiveNode$argume = directiveNode.arguments) !== null && _directiveNode$argume !== void 0 ? _directiveNode$argume : []; return checkArgUniqueness(`@${directiveNode.name.value}`, argumentNodes); @@ -40659,15 +57139,17 @@ function UniqueArgumentDefinitionNamesRule(context) { }; function checkArgUniquenessPerField(typeNode) { var _typeNode$fields; - const typeName = typeNode.name.value; - // FIXME: https://github.com/graphql/graphql-js/issues/2203 + const typeName = typeNode.name.value; // FIXME: https://github.com/graphql/graphql-js/issues/2203 + /* c8 ignore next */ + const fieldNodes = (_typeNode$fields = typeNode.fields) !== null && _typeNode$fields !== void 0 ? _typeNode$fields : []; for (const fieldDef of fieldNodes) { var _fieldDef$arguments; - const fieldName = fieldDef.name.value; - // FIXME: https://github.com/graphql/graphql-js/issues/2203 + const fieldName = fieldDef.name.value; // FIXME: https://github.com/graphql/graphql-js/issues/2203 + /* c8 ignore next */ + const argumentNodes = (_fieldDef$arguments = fieldDef.arguments) !== null && _fieldDef$arguments !== void 0 ? _fieldDef$arguments : []; checkArgUniqueness(`${typeName}.${fieldName}`, argumentNodes); } @@ -40694,6 +57176,7 @@ function UniqueArgumentDefinitionNamesRule(context) { \**********************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -40717,7 +57200,9 @@ function UniqueArgumentNamesRule(context) { }; function checkArgUniqueness(parentNode) { var _parentNode$arguments; + // FIXME: https://github.com/graphql/graphql-js/issues/2203 + /* c8 ignore next */ const argumentNodes = (_parentNode$arguments = parentNode.arguments) !== null && _parentNode$arguments !== void 0 ? _parentNode$arguments : []; const seenArgs = (0, _groupBy.groupBy)(argumentNodes, arg => arg.name.value); @@ -40739,6 +57224,7 @@ function UniqueArgumentNamesRule(context) { \***********************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -40752,7 +57238,7 @@ var _GraphQLError = __webpack_require__(/*! ../../error/GraphQLError.mjs */ "../ * A GraphQL document is only valid if all defined directives have unique names. */ function UniqueDirectiveNamesRule(context) { - const knownDirectiveNames = new Map(); + const knownDirectiveNames = Object.create(null); const schema = context.getSchema(); return { DirectiveDefinition(node) { @@ -40763,13 +57249,12 @@ function UniqueDirectiveNamesRule(context) { })); return; } - const knownName = knownDirectiveNames.get(directiveName); - if (knownName) { + if (knownDirectiveNames[directiveName]) { context.reportError(new _GraphQLError.GraphQLError(`There can be only one directive named "@${directiveName}".`, { - nodes: [knownName, node.name] + nodes: [knownDirectiveNames[directiveName], node.name] })); } else { - knownDirectiveNames.set(directiveName, node.name); + knownDirectiveNames[directiveName] = node.name; } return false; } @@ -40784,6 +57269,7 @@ function UniqueDirectiveNamesRule(context) { \******************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -40803,20 +57289,20 @@ var _directives = __webpack_require__(/*! ../../type/directives.mjs */ "../../.. * See https://spec.graphql.org/draft/#sec-Directives-Are-Unique-Per-Location */ function UniqueDirectivesPerLocationRule(context) { - const uniqueDirectiveMap = new Map(); + const uniqueDirectiveMap = Object.create(null); const schema = context.getSchema(); const definedDirectives = schema ? schema.getDirectives() : _directives.specifiedDirectives; for (const directive of definedDirectives) { - uniqueDirectiveMap.set(directive.name, !directive.isRepeatable); + uniqueDirectiveMap[directive.name] = !directive.isRepeatable; } const astDefinitions = context.getDocument().definitions; for (const def of astDefinitions) { if (def.kind === _kinds.Kind.DIRECTIVE_DEFINITION) { - uniqueDirectiveMap.set(def.name.value, !def.repeatable); + uniqueDirectiveMap[def.name.value] = !def.repeatable; } } - const schemaDirectives = new Map(); - const typeDirectivesMap = new Map(); + const schemaDirectives = Object.create(null); + const typeDirectivesMap = Object.create(null); return { // Many different AST nodes may contain directives. Rather than listing // them all, just listen for entering any node, and check to see if it @@ -40830,24 +57316,22 @@ function UniqueDirectivesPerLocationRule(context) { seenDirectives = schemaDirectives; } else if ((0, _predicates.isTypeDefinitionNode)(node) || (0, _predicates.isTypeExtensionNode)(node)) { const typeName = node.name.value; - seenDirectives = typeDirectivesMap.get(typeName); + seenDirectives = typeDirectivesMap[typeName]; if (seenDirectives === undefined) { - seenDirectives = new Map(); - typeDirectivesMap.set(typeName, seenDirectives); + typeDirectivesMap[typeName] = seenDirectives = Object.create(null); } } else { - seenDirectives = new Map(); + seenDirectives = Object.create(null); } for (const directive of node.directives) { const directiveName = directive.name.value; - if (uniqueDirectiveMap.get(directiveName) === true) { - const seenDirective = seenDirectives.get(directiveName); - if (seenDirective != null) { + if (uniqueDirectiveMap[directiveName]) { + if (seenDirectives[directiveName]) { context.reportError(new _GraphQLError.GraphQLError(`The directive "@${directiveName}" can only be used once at this location.`, { - nodes: [seenDirective, directive] + nodes: [seenDirectives[directiveName], directive] })); } else { - seenDirectives.set(directiveName, directive); + seenDirectives[directiveName] = directive; } } } @@ -40863,6 +57347,7 @@ function UniqueDirectivesPerLocationRule(context) { \***********************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -40879,7 +57364,7 @@ var _definition = __webpack_require__(/*! ../../type/definition.mjs */ "../../.. function UniqueEnumValueNamesRule(context) { const schema = context.getSchema(); const existingTypeMap = schema ? schema.getTypeMap() : Object.create(null); - const knownValueNames = new Map(); + const knownValueNames = Object.create(null); return { EnumTypeDefinition: checkValueUniqueness, EnumTypeExtension: checkValueUniqueness @@ -40887,14 +57372,14 @@ function UniqueEnumValueNamesRule(context) { function checkValueUniqueness(node) { var _node$values; const typeName = node.name.value; - let valueNames = knownValueNames.get(typeName); - if (valueNames == null) { - valueNames = new Map(); - knownValueNames.set(typeName, valueNames); - } - // FIXME: https://github.com/graphql/graphql-js/issues/2203 + if (!knownValueNames[typeName]) { + knownValueNames[typeName] = Object.create(null); + } // FIXME: https://github.com/graphql/graphql-js/issues/2203 + /* c8 ignore next */ + const valueNodes = (_node$values = node.values) !== null && _node$values !== void 0 ? _node$values : []; + const valueNames = knownValueNames[typeName]; for (const valueDef of valueNodes) { const valueName = valueDef.name.value; const existingType = existingTypeMap[typeName]; @@ -40902,15 +57387,12 @@ function UniqueEnumValueNamesRule(context) { context.reportError(new _GraphQLError.GraphQLError(`Enum value "${typeName}.${valueName}" already exists in the schema. It cannot also be defined in this type extension.`, { nodes: valueDef.name })); - continue; - } - const knownValueName = valueNames.get(valueName); - if (knownValueName != null) { + } else if (valueNames[valueName]) { context.reportError(new _GraphQLError.GraphQLError(`Enum value "${typeName}.${valueName}" can only be defined once.`, { - nodes: [knownValueName, valueDef.name] + nodes: [valueNames[valueName], valueDef.name] })); } else { - valueNames.set(valueName, valueDef.name); + valueNames[valueName] = valueDef.name; } } return false; @@ -40925,6 +57407,7 @@ function UniqueEnumValueNamesRule(context) { \*****************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -40941,7 +57424,7 @@ var _definition = __webpack_require__(/*! ../../type/definition.mjs */ "../../.. function UniqueFieldDefinitionNamesRule(context) { const schema = context.getSchema(); const existingTypeMap = schema ? schema.getTypeMap() : Object.create(null); - const knownFieldNames = new Map(); + const knownFieldNames = Object.create(null); return { InputObjectTypeDefinition: checkFieldUniqueness, InputObjectTypeExtension: checkFieldUniqueness, @@ -40953,29 +57436,26 @@ function UniqueFieldDefinitionNamesRule(context) { function checkFieldUniqueness(node) { var _node$fields; const typeName = node.name.value; - let fieldNames = knownFieldNames.get(typeName); - if (fieldNames == null) { - fieldNames = new Map(); - knownFieldNames.set(typeName, fieldNames); - } - // FIXME: https://github.com/graphql/graphql-js/issues/2203 + if (!knownFieldNames[typeName]) { + knownFieldNames[typeName] = Object.create(null); + } // FIXME: https://github.com/graphql/graphql-js/issues/2203 + /* c8 ignore next */ + const fieldNodes = (_node$fields = node.fields) !== null && _node$fields !== void 0 ? _node$fields : []; + const fieldNames = knownFieldNames[typeName]; for (const fieldDef of fieldNodes) { const fieldName = fieldDef.name.value; if (hasField(existingTypeMap[typeName], fieldName)) { context.reportError(new _GraphQLError.GraphQLError(`Field "${typeName}.${fieldName}" already exists in the schema. It cannot also be defined in this type extension.`, { nodes: fieldDef.name })); - continue; - } - const knownFieldName = fieldNames.get(fieldName); - if (knownFieldName != null) { + } else if (fieldNames[fieldName]) { context.reportError(new _GraphQLError.GraphQLError(`Field "${typeName}.${fieldName}" can only be defined once.`, { - nodes: [knownFieldName, fieldDef.name] + nodes: [fieldNames[fieldName], fieldDef.name] })); } else { - fieldNames.set(fieldName, fieldDef.name); + fieldNames[fieldName] = fieldDef.name; } } return false; @@ -40996,6 +57476,7 @@ function hasField(type, fieldName) { \**********************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -41011,18 +57492,17 @@ var _GraphQLError = __webpack_require__(/*! ../../error/GraphQLError.mjs */ "../ * See https://spec.graphql.org/draft/#sec-Fragment-Name-Uniqueness */ function UniqueFragmentNamesRule(context) { - const knownFragmentNames = new Map(); + const knownFragmentNames = Object.create(null); return { OperationDefinition: () => false, FragmentDefinition(node) { const fragmentName = node.name.value; - const knownFragmentName = knownFragmentNames.get(fragmentName); - if (knownFragmentName != null) { + if (knownFragmentNames[fragmentName]) { context.reportError(new _GraphQLError.GraphQLError(`There can be only one fragment named "${fragmentName}".`, { - nodes: [knownFragmentName, node.name] + nodes: [knownFragmentNames[fragmentName], node.name] })); } else { - knownFragmentNames.set(fragmentName, node.name); + knownFragmentNames[fragmentName] = node.name; } return false; } @@ -41037,6 +57517,7 @@ function UniqueFragmentNamesRule(context) { \************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -41055,28 +57536,27 @@ var _GraphQLError = __webpack_require__(/*! ../../error/GraphQLError.mjs */ "../ */ function UniqueInputFieldNamesRule(context) { const knownNameStack = []; - let knownNames = new Map(); + let knownNames = Object.create(null); return { ObjectValue: { enter() { knownNameStack.push(knownNames); - knownNames = new Map(); + knownNames = Object.create(null); }, leave() { const prevKnownNames = knownNameStack.pop(); - prevKnownNames != null || (0, _invariant.invariant)(false); + prevKnownNames || (0, _invariant.invariant)(false); knownNames = prevKnownNames; } }, ObjectField(node) { const fieldName = node.name.value; - const knownName = knownNames.get(fieldName); - if (knownName != null) { + if (knownNames[fieldName]) { context.reportError(new _GraphQLError.GraphQLError(`There can be only one input field named "${fieldName}".`, { - nodes: [knownName, node.name] + nodes: [knownNames[fieldName], node.name] })); } else { - knownNames.set(fieldName, node.name); + knownNames[fieldName] = node.name; } } }; @@ -41090,6 +57570,7 @@ function UniqueInputFieldNamesRule(context) { \***********************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -41105,18 +57586,17 @@ var _GraphQLError = __webpack_require__(/*! ../../error/GraphQLError.mjs */ "../ * See https://spec.graphql.org/draft/#sec-Operation-Name-Uniqueness */ function UniqueOperationNamesRule(context) { - const knownOperationNames = new Map(); + const knownOperationNames = Object.create(null); return { OperationDefinition(node) { const operationName = node.name; - if (operationName != null) { - const knownOperationName = knownOperationNames.get(operationName.value); - if (knownOperationName != null) { + if (operationName) { + if (knownOperationNames[operationName.value]) { context.reportError(new _GraphQLError.GraphQLError(`There can be only one operation named "${operationName.value}".`, { - nodes: [knownOperationName, operationName] + nodes: [knownOperationNames[operationName.value], operationName] })); } else { - knownOperationNames.set(operationName.value, operationName); + knownOperationNames[operationName.value] = operationName; } } return false; @@ -41133,6 +57613,7 @@ function UniqueOperationNamesRule(context) { \***********************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -41147,7 +57628,7 @@ var _GraphQLError = __webpack_require__(/*! ../../error/GraphQLError.mjs */ "../ */ function UniqueOperationTypesRule(context) { const schema = context.getSchema(); - const definedOperationTypes = new Map(); + const definedOperationTypes = Object.create(null); const existingOperationTypes = schema ? { query: schema.getQueryType(), mutation: schema.getMutationType(), @@ -41159,12 +57640,14 @@ function UniqueOperationTypesRule(context) { }; function checkOperationTypes(node) { var _node$operationTypes; + // See: https://github.com/graphql/graphql-js/issues/2203 + /* c8 ignore next */ const operationTypesNodes = (_node$operationTypes = node.operationTypes) !== null && _node$operationTypes !== void 0 ? _node$operationTypes : []; for (const operationType of operationTypesNodes) { const operation = operationType.operation; - const alreadyDefinedOperationType = definedOperationTypes.get(operation); + const alreadyDefinedOperationType = definedOperationTypes[operation]; if (existingOperationTypes[operation]) { context.reportError(new _GraphQLError.GraphQLError(`Type for ${operation} already defined in the schema. It cannot be redefined.`, { nodes: operationType @@ -41174,7 +57657,7 @@ function UniqueOperationTypesRule(context) { nodes: [alreadyDefinedOperationType, operationType] })); } else { - definedOperationTypes.set(operation, operationType); + definedOperationTypes[operation] = operationType; } } return false; @@ -41189,6 +57672,7 @@ function UniqueOperationTypesRule(context) { \******************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -41202,7 +57686,7 @@ var _GraphQLError = __webpack_require__(/*! ../../error/GraphQLError.mjs */ "../ * A GraphQL document is only valid if all defined types have unique names. */ function UniqueTypeNamesRule(context) { - const knownTypeNames = new Map(); + const knownTypeNames = Object.create(null); const schema = context.getSchema(); return { ScalarTypeDefinition: checkTypeName, @@ -41220,13 +57704,12 @@ function UniqueTypeNamesRule(context) { })); return; } - const knownNameNode = knownTypeNames.get(typeName); - if (knownNameNode != null) { + if (knownTypeNames[typeName]) { context.reportError(new _GraphQLError.GraphQLError(`There can be only one type named "${typeName}".`, { - nodes: [knownNameNode, node.name] + nodes: [knownTypeNames[typeName], node.name] })); } else { - knownTypeNames.set(typeName, node.name); + knownTypeNames[typeName] = node.name; } return false; } @@ -41240,6 +57723,7 @@ function UniqueTypeNamesRule(context) { \**********************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -41257,7 +57741,9 @@ function UniqueVariableNamesRule(context) { return { OperationDefinition(operationNode) { var _operationNode$variab; + // See: https://github.com/graphql/graphql-js/issues/2203 + /* c8 ignore next */ const variableDefinitions = (_operationNode$variab = operationNode.variableDefinitions) !== null && _operationNode$variab !== void 0 ? _operationNode$variab : []; const seenVariableDefinitions = (0, _groupBy.groupBy)(variableDefinitions, node => node.variable.name.value); @@ -41280,6 +57766,7 @@ function UniqueVariableNamesRule(context) { \**********************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -41288,6 +57775,7 @@ Object.defineProperty(exports, "__esModule", ({ exports.ValuesOfCorrectTypeRule = ValuesOfCorrectTypeRule; var _didYouMean = __webpack_require__(/*! ../../jsutils/didYouMean.mjs */ "../../../node_modules/graphql/jsutils/didYouMean.mjs"); var _inspect = __webpack_require__(/*! ../../jsutils/inspect.mjs */ "../../../node_modules/graphql/jsutils/inspect.mjs"); +var _keyMap = __webpack_require__(/*! ../../jsutils/keyMap.mjs */ "../../../node_modules/graphql/jsutils/keyMap.mjs"); var _suggestionList = __webpack_require__(/*! ../../jsutils/suggestionList.mjs */ "../../../node_modules/graphql/jsutils/suggestionList.mjs"); var _GraphQLError = __webpack_require__(/*! ../../error/GraphQLError.mjs */ "../../../node_modules/graphql/error/GraphQLError.mjs"); var _kinds = __webpack_require__(/*! ../../language/kinds.mjs */ "../../../node_modules/graphql/language/kinds.mjs"); @@ -41326,11 +57814,11 @@ function ValuesOfCorrectTypeRule(context) { if (!(0, _definition.isInputObjectType)(type)) { isValidValueNode(context, node); return false; // Don't traverse further. - } - // Ensure every required field exists. - const fieldNodeMap = new Map(node.fields.map(field => [field.name.value, field])); + } // Ensure every required field exists. + + const fieldNodeMap = (0, _keyMap.keyMap)(node.fields, field => field.name.value); for (const fieldDef of Object.values(type.getFields())) { - const fieldNode = fieldNodeMap.get(fieldDef.name); + const fieldNode = fieldNodeMap[fieldDef.name]; if (!fieldNode && (0, _definition.isRequiredInputField)(fieldDef)) { const typeStr = (0, _inspect.inspect)(fieldDef.type); context.reportError(new _GraphQLError.GraphQLError(`Field "${type.name}.${fieldDef.name}" of required type "${typeStr}" was not provided.`, { @@ -41371,6 +57859,7 @@ function ValuesOfCorrectTypeRule(context) { * Any value literal may be a valid representation of a Scalar, depending on * that scalar type. */ + function isValidValueNode(context, node) { // Report any error at the full type expected by the location. const locationType = context.getInputType(); @@ -41384,11 +57873,12 @@ function isValidValueNode(context, node) { nodes: node })); return; - } - // Scalars and Enums determine if a literal value is valid via parseLiteral(), + } // Scalars and Enums determine if a literal value is valid via parseLiteral(), // which may throw or return an invalid value to indicate failure. + try { - const parseResult = type.parseLiteral(node, undefined /* variables */); + const parseResult = type.parseLiteral(node, undefined + /* variables */); if (parseResult === undefined) { const typeStr = (0, _inspect.inspect)(locationType); context.reportError(new _GraphQLError.GraphQLError(`Expected value of type "${typeStr}", found ${(0, _printer.print)(node)}.`, { @@ -41408,8 +57898,8 @@ function isValidValueNode(context, node) { } } function validateOneOfInputObject(context, node, type, fieldNodeMap, variableDefinitions) { - var _fieldNodeMap$get; - const keys = Array.from(fieldNodeMap.keys()); + var _fieldNodeMap$keys$; + const keys = Object.keys(fieldNodeMap); const isNotExactlyOneField = keys.length !== 1; if (isNotExactlyOneField) { context.reportError(new _GraphQLError.GraphQLError(`OneOf Input Object "${type.name}" must specify exactly one key.`, { @@ -41417,7 +57907,7 @@ function validateOneOfInputObject(context, node, type, fieldNodeMap, variableDef })); return; } - const value = (_fieldNodeMap$get = fieldNodeMap.get(keys[0])) === null || _fieldNodeMap$get === void 0 ? void 0 : _fieldNodeMap$get.value; + const value = (_fieldNodeMap$keys$ = fieldNodeMap[keys[0]]) === null || _fieldNodeMap$keys$ === void 0 ? void 0 : _fieldNodeMap$keys$.value; const isNullLiteral = !value || value.kind === _kinds.Kind.NULL; const isVariable = (value === null || value === void 0 ? void 0 : value.kind) === _kinds.Kind.VARIABLE; if (isNullLiteral) { @@ -41446,6 +57936,7 @@ function validateOneOfInputObject(context, node, type, fieldNodeMap, variableDef \*************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -41487,6 +57978,7 @@ function VariablesAreInputTypesRule(context) { \*****************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -41507,11 +57999,11 @@ var _typeFromAST = __webpack_require__(/*! ../../utilities/typeFromAST.mjs */ ". * See https://spec.graphql.org/draft/#sec-All-Variable-Usages-are-Allowed */ function VariablesInAllowedPositionRule(context) { - let varDefMap; + let varDefMap = Object.create(null); return { OperationDefinition: { enter() { - varDefMap = new Map(); + varDefMap = Object.create(null); }, leave(operation) { const usages = context.getRecursiveVariableUsages(operation); @@ -41521,7 +58013,7 @@ function VariablesInAllowedPositionRule(context) { defaultValue } of usages) { const varName = node.name.value; - const varDef = varDefMap.get(varName); + const varDef = varDefMap[varName]; if (varDef && type) { // A var type is allowed if it is the same or more strict (e.g. is // a subtype of) than the expected type. It can be more strict if @@ -41542,7 +58034,7 @@ function VariablesInAllowedPositionRule(context) { } }, VariableDefinition(node) { - varDefMap.set(node.variable.name.value, node); + varDefMap[node.variable.name.value] = node; } }; } @@ -41551,6 +58043,7 @@ function VariablesInAllowedPositionRule(context) { * which includes considering if default values exist for either the variable * or the location at which it is located. */ + function allowedVariableUsage(schema, varType, varDefaultValue, locationType, locationDefaultValue) { if ((0, _definition.isNonNullType)(locationType) && !(0, _definition.isNonNullType)(varType)) { const hasNonNullVariableDefaultValue = varDefaultValue != null && varDefaultValue.kind !== _kinds.Kind.NULL; @@ -41572,6 +58065,7 @@ function allowedVariableUsage(schema, varType, varDefaultValue, locationType, lo \****************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -41657,6 +58151,7 @@ function NoDeprecatedCustomRule(context) { \*************************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -41697,15 +58192,13 @@ function NoSchemaIntrospectionCustomRule(context) { \*******************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.specifiedSDLRules = exports.specifiedRules = exports.recommendedRules = void 0; -var _DeferStreamDirectiveLabelRule = __webpack_require__(/*! ./rules/DeferStreamDirectiveLabelRule.mjs */ "../../../node_modules/graphql/validation/rules/DeferStreamDirectiveLabelRule.mjs"); -var _DeferStreamDirectiveOnRootFieldRule = __webpack_require__(/*! ./rules/DeferStreamDirectiveOnRootFieldRule.mjs */ "../../../node_modules/graphql/validation/rules/DeferStreamDirectiveOnRootFieldRule.mjs"); -var _DeferStreamDirectiveOnValidOperationsRule = __webpack_require__(/*! ./rules/DeferStreamDirectiveOnValidOperationsRule.mjs */ "../../../node_modules/graphql/validation/rules/DeferStreamDirectiveOnValidOperationsRule.mjs"); var _ExecutableDefinitionsRule = __webpack_require__(/*! ./rules/ExecutableDefinitionsRule.mjs */ "../../../node_modules/graphql/validation/rules/ExecutableDefinitionsRule.mjs"); var _FieldsOnCorrectTypeRule = __webpack_require__(/*! ./rules/FieldsOnCorrectTypeRule.mjs */ "../../../node_modules/graphql/validation/rules/FieldsOnCorrectTypeRule.mjs"); var _FragmentsOnCompositeTypesRule = __webpack_require__(/*! ./rules/FragmentsOnCompositeTypesRule.mjs */ "../../../node_modules/graphql/validation/rules/FragmentsOnCompositeTypesRule.mjs"); @@ -41726,7 +58219,6 @@ var _PossibleTypeExtensionsRule = __webpack_require__(/*! ./rules/PossibleTypeEx var _ProvidedRequiredArgumentsRule = __webpack_require__(/*! ./rules/ProvidedRequiredArgumentsRule.mjs */ "../../../node_modules/graphql/validation/rules/ProvidedRequiredArgumentsRule.mjs"); var _ScalarLeafsRule = __webpack_require__(/*! ./rules/ScalarLeafsRule.mjs */ "../../../node_modules/graphql/validation/rules/ScalarLeafsRule.mjs"); var _SingleFieldSubscriptionsRule = __webpack_require__(/*! ./rules/SingleFieldSubscriptionsRule.mjs */ "../../../node_modules/graphql/validation/rules/SingleFieldSubscriptionsRule.mjs"); -var _StreamDirectiveOnListFieldRule = __webpack_require__(/*! ./rules/StreamDirectiveOnListFieldRule.mjs */ "../../../node_modules/graphql/validation/rules/StreamDirectiveOnListFieldRule.mjs"); var _UniqueArgumentDefinitionNamesRule = __webpack_require__(/*! ./rules/UniqueArgumentDefinitionNamesRule.mjs */ "../../../node_modules/graphql/validation/rules/UniqueArgumentDefinitionNamesRule.mjs"); var _UniqueArgumentNamesRule = __webpack_require__(/*! ./rules/UniqueArgumentNamesRule.mjs */ "../../../node_modules/graphql/validation/rules/UniqueArgumentNamesRule.mjs"); var _UniqueDirectiveNamesRule = __webpack_require__(/*! ./rules/UniqueDirectiveNamesRule.mjs */ "../../../node_modules/graphql/validation/rules/UniqueDirectiveNamesRule.mjs"); @@ -41742,14 +58234,7 @@ var _UniqueVariableNamesRule = __webpack_require__(/*! ./rules/UniqueVariableNam var _ValuesOfCorrectTypeRule = __webpack_require__(/*! ./rules/ValuesOfCorrectTypeRule.mjs */ "../../../node_modules/graphql/validation/rules/ValuesOfCorrectTypeRule.mjs"); var _VariablesAreInputTypesRule = __webpack_require__(/*! ./rules/VariablesAreInputTypesRule.mjs */ "../../../node_modules/graphql/validation/rules/VariablesAreInputTypesRule.mjs"); var _VariablesInAllowedPositionRule = __webpack_require__(/*! ./rules/VariablesInAllowedPositionRule.mjs */ "../../../node_modules/graphql/validation/rules/VariablesInAllowedPositionRule.mjs"); -// Spec Section: "Defer And Stream Directive Labels Are Unique" - -// Spec Section: "Defer And Stream Directives Are Used On Valid Root Field" - -// Spec Section: "Defer And Stream Directives Are Used On Valid Operations" - // Spec Section: "Executable Definitions" - // Spec Section: "Field Selections on Objects, Interfaces, and Unions Types" // Spec Section: "Fragments on Composite Types" @@ -41786,8 +58271,6 @@ var _VariablesInAllowedPositionRule = __webpack_require__(/*! ./rules/VariablesI // Spec Section: "Subscriptions with Single Root Field" -// Spec Section: "Stream Directives Are Used On List Fields" - // Spec Section: "Argument Uniqueness" // Spec Section: "Directives Are Unique Per Location" @@ -41817,10 +58300,12 @@ const recommendedRules = exports.recommendedRules = Object.freeze([_MaxIntrospec * The order of the rules in this list has been adjusted to lead to the * most clear output when encountering multiple validation errors. */ -const specifiedRules = exports.specifiedRules = Object.freeze([_ExecutableDefinitionsRule.ExecutableDefinitionsRule, _UniqueOperationNamesRule.UniqueOperationNamesRule, _LoneAnonymousOperationRule.LoneAnonymousOperationRule, _SingleFieldSubscriptionsRule.SingleFieldSubscriptionsRule, _KnownTypeNamesRule.KnownTypeNamesRule, _FragmentsOnCompositeTypesRule.FragmentsOnCompositeTypesRule, _VariablesAreInputTypesRule.VariablesAreInputTypesRule, _ScalarLeafsRule.ScalarLeafsRule, _FieldsOnCorrectTypeRule.FieldsOnCorrectTypeRule, _UniqueFragmentNamesRule.UniqueFragmentNamesRule, _KnownFragmentNamesRule.KnownFragmentNamesRule, _NoUnusedFragmentsRule.NoUnusedFragmentsRule, _PossibleFragmentSpreadsRule.PossibleFragmentSpreadsRule, _NoFragmentCyclesRule.NoFragmentCyclesRule, _UniqueVariableNamesRule.UniqueVariableNamesRule, _NoUndefinedVariablesRule.NoUndefinedVariablesRule, _NoUnusedVariablesRule.NoUnusedVariablesRule, _KnownDirectivesRule.KnownDirectivesRule, _UniqueDirectivesPerLocationRule.UniqueDirectivesPerLocationRule, _DeferStreamDirectiveOnRootFieldRule.DeferStreamDirectiveOnRootFieldRule, _DeferStreamDirectiveOnValidOperationsRule.DeferStreamDirectiveOnValidOperationsRule, _DeferStreamDirectiveLabelRule.DeferStreamDirectiveLabelRule, _StreamDirectiveOnListFieldRule.StreamDirectiveOnListFieldRule, _KnownArgumentNamesRule.KnownArgumentNamesRule, _UniqueArgumentNamesRule.UniqueArgumentNamesRule, _ValuesOfCorrectTypeRule.ValuesOfCorrectTypeRule, _ProvidedRequiredArgumentsRule.ProvidedRequiredArgumentsRule, _VariablesInAllowedPositionRule.VariablesInAllowedPositionRule, _OverlappingFieldsCanBeMergedRule.OverlappingFieldsCanBeMergedRule, _UniqueInputFieldNamesRule.UniqueInputFieldNamesRule, ...recommendedRules]); + +const specifiedRules = exports.specifiedRules = Object.freeze([_ExecutableDefinitionsRule.ExecutableDefinitionsRule, _UniqueOperationNamesRule.UniqueOperationNamesRule, _LoneAnonymousOperationRule.LoneAnonymousOperationRule, _SingleFieldSubscriptionsRule.SingleFieldSubscriptionsRule, _KnownTypeNamesRule.KnownTypeNamesRule, _FragmentsOnCompositeTypesRule.FragmentsOnCompositeTypesRule, _VariablesAreInputTypesRule.VariablesAreInputTypesRule, _ScalarLeafsRule.ScalarLeafsRule, _FieldsOnCorrectTypeRule.FieldsOnCorrectTypeRule, _UniqueFragmentNamesRule.UniqueFragmentNamesRule, _KnownFragmentNamesRule.KnownFragmentNamesRule, _NoUnusedFragmentsRule.NoUnusedFragmentsRule, _PossibleFragmentSpreadsRule.PossibleFragmentSpreadsRule, _NoFragmentCyclesRule.NoFragmentCyclesRule, _UniqueVariableNamesRule.UniqueVariableNamesRule, _NoUndefinedVariablesRule.NoUndefinedVariablesRule, _NoUnusedVariablesRule.NoUnusedVariablesRule, _KnownDirectivesRule.KnownDirectivesRule, _UniqueDirectivesPerLocationRule.UniqueDirectivesPerLocationRule, _KnownArgumentNamesRule.KnownArgumentNamesRule, _UniqueArgumentNamesRule.UniqueArgumentNamesRule, _ValuesOfCorrectTypeRule.ValuesOfCorrectTypeRule, _ProvidedRequiredArgumentsRule.ProvidedRequiredArgumentsRule, _VariablesInAllowedPositionRule.VariablesInAllowedPositionRule, _OverlappingFieldsCanBeMergedRule.OverlappingFieldsCanBeMergedRule, _UniqueInputFieldNamesRule.UniqueInputFieldNamesRule, ...recommendedRules]); /** * @internal */ + const specifiedSDLRules = exports.specifiedSDLRules = Object.freeze([_LoneSchemaDefinitionRule.LoneSchemaDefinitionRule, _UniqueOperationTypesRule.UniqueOperationTypesRule, _UniqueTypeNamesRule.UniqueTypeNamesRule, _UniqueEnumValueNamesRule.UniqueEnumValueNamesRule, _UniqueFieldDefinitionNamesRule.UniqueFieldDefinitionNamesRule, _UniqueArgumentDefinitionNamesRule.UniqueArgumentDefinitionNamesRule, _UniqueDirectiveNamesRule.UniqueDirectiveNamesRule, _KnownTypeNamesRule.KnownTypeNamesRule, _KnownDirectivesRule.KnownDirectivesRule, _UniqueDirectivesPerLocationRule.UniqueDirectivesPerLocationRule, _PossibleTypeExtensionsRule.PossibleTypeExtensionsRule, _KnownArgumentNamesRule.KnownArgumentNamesOnDirectivesRule, _UniqueArgumentNamesRule.UniqueArgumentNamesRule, _UniqueInputFieldNamesRule.UniqueInputFieldNamesRule, _ProvidedRequiredArgumentsRule.ProvidedRequiredArgumentsOnDirectivesRule]); /***/ }), @@ -41831,6 +58316,7 @@ const specifiedSDLRules = exports.specifiedSDLRules = Object.freeze([_LoneSchema \*************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -41840,6 +58326,7 @@ exports.assertValidSDL = assertValidSDL; exports.assertValidSDLExtension = assertValidSDLExtension; exports.validate = validate; exports.validateSDL = validateSDL; +var _devAssert = __webpack_require__(/*! ../jsutils/devAssert.mjs */ "../../../node_modules/graphql/jsutils/devAssert.mjs"); var _GraphQLError = __webpack_require__(/*! ../error/GraphQLError.mjs */ "../../../node_modules/graphql/error/GraphQLError.mjs"); var _visitor = __webpack_require__(/*! ../language/visitor.mjs */ "../../../node_modules/graphql/language/visitor.mjs"); var _validate = __webpack_require__(/*! ../type/validate.mjs */ "../../../node_modules/graphql/type/validate.mjs"); @@ -41866,30 +58353,32 @@ var _ValidationContext = __webpack_require__(/*! ./ValidationContext.mjs */ "../ * Optionally a custom TypeInfo instance may be provided. If not provided, one * will be created from the provided schema. */ + function validate(schema, documentAST, rules = _specifiedRules.specifiedRules, options, /** @deprecated will be removed in 17.0.0 */ typeInfo = new _TypeInfo.TypeInfo(schema)) { var _options$maxErrors; const maxErrors = (_options$maxErrors = options === null || options === void 0 ? void 0 : options.maxErrors) !== null && _options$maxErrors !== void 0 ? _options$maxErrors : 100; - // If the schema used for validation is invalid, throw an error. + documentAST || (0, _devAssert.devAssert)(false, 'Must provide document.'); // If the schema used for validation is invalid, throw an error. + (0, _validate.assertValidSchema)(schema); - const abortError = new _GraphQLError.GraphQLError('Too many validation errors, error limit reached. Validation aborted.'); + const abortObj = Object.freeze({}); const errors = []; const context = new _ValidationContext.ValidationContext(schema, documentAST, typeInfo, error => { if (errors.length >= maxErrors) { - throw abortError; + errors.push(new _GraphQLError.GraphQLError('Too many validation errors, error limit reached. Validation aborted.')); // eslint-disable-next-line @typescript-eslint/no-throw-literal + + throw abortObj; } errors.push(error); - }); - // This uses a specialized visitor which runs multiple visitors in parallel, + }); // This uses a specialized visitor which runs multiple visitors in parallel, // while maintaining the visitor skip and break API. - const visitor = (0, _visitor.visitInParallel)(rules.map(rule => rule(context))); - // Visit the whole document with each instance of all provided rules. + + const visitor = (0, _visitor.visitInParallel)(rules.map(rule => rule(context))); // Visit the whole document with each instance of all provided rules. + try { (0, _visitor.visit)(documentAST, (0, _TypeInfo.visitWithTypeInfo)(typeInfo, visitor)); } catch (e) { - if (e === abortError) { - errors.push(abortError); - } else { + if (e !== abortObj) { throw e; } } @@ -41898,6 +58387,7 @@ typeInfo = new _TypeInfo.TypeInfo(schema)) { /** * @internal */ + function validateSDL(documentAST, schemaToExtend, rules = _specifiedRules.specifiedSDLRules) { const errors = []; const context = new _ValidationContext.SDLValidationContext(documentAST, schemaToExtend, error => { @@ -41913,6 +58403,7 @@ function validateSDL(documentAST, schemaToExtend, rules = _specifiedRules.specif * * @internal */ + function assertValidSDL(documentAST) { const errors = validateSDL(documentAST); if (errors.length !== 0) { @@ -41925,6 +58416,7 @@ function assertValidSDL(documentAST) { * * @internal */ + function assertValidSDLExtension(documentAST, schema) { const errors = validateSDL(documentAST, schema); if (errors.length !== 0) { @@ -41940,6 +58432,7 @@ function assertValidSDLExtension(documentAST, schema) { \*************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -41948,18 +58441,20 @@ Object.defineProperty(exports, "__esModule", ({ exports.versionInfo = exports.version = void 0; // Note: This file is autogenerated using "resources/gen-version.js" script and // automatically updated by "npm version" command. + /** * A string containing the version of the GraphQL.js library */ -const version = exports.version = '17.0.0-alpha.7'; +const version = exports.version = '16.9.0'; /** * An object containing the components of the GraphQL.js version string */ + const versionInfo = exports.versionInfo = Object.freeze({ - major: 17, - minor: 0, + major: 16, + minor: 9, patch: 0, - preReleaseTag: 'alpha.7' + preReleaseTag: null }); /***/ }), @@ -41970,6 +58465,7 @@ const versionInfo = exports.versionInfo = Object.freeze({ \**************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -42001,6 +58497,7 @@ if (true) { \******************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; /*! * is-plain-object * @@ -42043,6 +58540,7 @@ module.exports = function isPlainObject(o) { \***************************************************/ /***/ (function(module) { +"use strict"; /*! * is-primitive * @@ -42067,6 +58565,7 @@ module.exports = function isPrimitive(val) { \**********************************************/ /***/ (function(module) { +"use strict"; var toString = {}.toString; @@ -42082,6 +58581,7 @@ module.exports = Array.isArray || function (arr) { \***********************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; /*! * isobject * @@ -42104,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"); @@ -42797,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"); @@ -48336,6 +64838,7 @@ module.exports = MarkdownIt; \******************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; /* eslint-disable no-bitwise */ @@ -48832,6 +65335,7 @@ exports.parse = urlParse; \****************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; var e = new TextDecoder(); @@ -48901,6 +65405,7 @@ exports.meros = t; \******************************************************/ /***/ (function(module) { +"use strict"; function nullthrows(x, message) { @@ -48925,6 +65430,7 @@ Object.defineProperty(module.exports, "__esModule", ({ \*************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -49879,6 +66385,7 @@ exports.wrap = wrap; \*********************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; /** Highest positive signed 32-bit float value */ @@ -50313,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", ({ @@ -50370,6 +67158,7 @@ exports.RemoveScrollBar = RemoveScrollBar; \******************************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -50393,6 +67182,7 @@ var removedBarSizeVariable = exports.removedBarSizeVariable = '--removed-body-sc \**************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -50446,6 +67236,7 @@ var _utils = __webpack_require__(/*! ./utils */ "../../../node_modules/react-rem \**************************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -50500,6 +67291,7 @@ exports.getGapWidth = getGapWidth; \****************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -50530,6 +67322,7 @@ var _default = exports["default"] = ReactRemoveScroll; \***************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -50720,6 +67513,7 @@ function RemoveScrollSideCar(props) { \*******************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -50798,6 +67592,7 @@ RemoveScroll.classNames = { \*********************************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -50833,6 +67628,7 @@ var nonPassive = exports.nonPassive = passiveSupported ? { \*****************************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -50950,6 +67746,7 @@ exports.handleScroll = handleScroll; \**********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -50972,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", ({ @@ -50989,6 +67787,7 @@ var effectCar = exports.effectCar = (0, _useSidecar.createSidecarMedium)(); \************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -51008,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", ({ @@ -51041,6 +67841,7 @@ exports.styleSingleton = styleSingleton; \***********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -51081,6 +67882,7 @@ exports.styleHookSingleton = styleHookSingleton; \************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -51116,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", ({ @@ -51178,6 +67981,7 @@ exports.stylesheetSingleton = stylesheetSingleton; \************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; /** * @license React * react-jsx-runtime.development.js @@ -52316,6 +69120,7 @@ if (true) { \**************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; if (false) {} else { @@ -52330,6 +69135,7 @@ if (false) {} else { \************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; /*! * set-value * @@ -52476,6 +69282,7 @@ module.exports = setValue; \**********************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -52700,6 +69507,7 @@ exports.vw = vw; \*******************************************************/ /***/ (function(module) { +"use strict"; module.exports = function () { @@ -52742,6 +69550,7 @@ module.exports = function () { \*************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -53310,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]/; @@ -53333,6 +70143,7 @@ exports.Z = regex; \***********************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -53369,6 +70180,7 @@ function assignRef(ref, value) { \***********************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -53407,6 +70219,7 @@ function createCallbackRef(callback) { \*******************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -53483,6 +70296,7 @@ var _refToCallback = __webpack_require__(/*! ./refToCallback */ "../../../node_m \**********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -53520,6 +70334,7 @@ function mergeRefs(refs) { \***************************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -53585,6 +70400,7 @@ function useRefToCallback(ref) { \**************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -53616,6 +70432,7 @@ function transformRef(ref, transformer) { \*************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -53654,6 +70471,7 @@ function useMergeRefs(refs, defaultValue) { \********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -53710,6 +70528,7 @@ function useCallbackRef(initialValue, callback) { \*****************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -53745,6 +70564,7 @@ function useTransformRef(ref, transformer) { \***************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -53769,6 +70589,7 @@ exports.setConfig = setConfig; \************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -53789,6 +70610,7 @@ var env = exports.env = { \****************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -53825,6 +70647,7 @@ function exportSidecar(medium, exported) { \************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -53861,6 +70684,7 @@ function sidecar(importer, errorComponent) { \*************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -53930,6 +70754,7 @@ function useRealSidecar(importer, effect) { \**************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -53992,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", ({ @@ -54103,6 +70929,7 @@ function createSidecarMedium(options) { \*******************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -54171,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. @@ -56439,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, @@ -69028,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; @@ -69051,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) { @@ -69106,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); @@ -69139,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 { @@ -69168,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.' }]); } } @@ -69216,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; @@ -69248,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"); @@ -69309,7 +75042,7 @@ function createContextHook(context) { var _a; const value = React.useContext(context); if (value === null && (options == null ? void 0 : options.nonNull)) { - throw new Error(`Tried to use \`${((_a = options.caller) == null ? void 0 : _a.name) || useGivenContext.caller.name}\` without the necessary context. Make sure to render the \`${context.displayName}Provider\` component higher up the tree.`); + throw new Error(`Tried to use \`${((_a = options.caller) == null ? void 0 : _a.name) || "a component"}\` without the necessary context. Make sure to render the \`${context.displayName}Provider\` component higher up the tree.`); } return value; } @@ -69320,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 = ({ @@ -70153,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, @@ -70221,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, @@ -70265,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, @@ -70304,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; @@ -70415,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(() => { @@ -70427,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", @@ -70454,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" @@ -70609,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, @@ -70632,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({ @@ -70915,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 => { @@ -70930,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({ @@ -71089,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; @@ -71126,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) { @@ -71235,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", @@ -71289,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, @@ -71342,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; @@ -71480,6 +78571,8 @@ function debounce(duration, fn) { }; } function Search() { + "use no memo"; + const { explorerNavStack, push @@ -71541,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, @@ -71562,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 { @@ -71660,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", @@ -71977,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); @@ -71993,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"); } @@ -72004,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"; @@ -72199,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 @@ -72459,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 @@ -72606,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, @@ -72629,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"; @@ -73148,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"; @@ -73502,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); @@ -73592,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 }); @@ -74209,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", ({ @@ -79090,6 +83470,7 @@ async function fetcherReturnToPromise(fetcherResult) { \*********************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -79157,6 +83538,7 @@ exports.__forAwait = __forAwait; \***********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -79190,6 +83572,7 @@ function createGraphiQLFetcher(options) { \***************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -79227,6 +83610,7 @@ var _createFetcher = __webpack_require__(/*! ./createFetcher */ "../../graphiql- \*************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -79343,6 +83727,7 @@ async function getWsFetcher(options, fetcherOpts) { \***************************************************************/ /***/ (function() { +"use strict"; /***/ }), @@ -79353,6 +83738,7 @@ async function getWsFetcher(options, fetcherOpts) { \*******************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -79393,6 +83779,7 @@ function formatResult(result) { \************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -79506,6 +83893,7 @@ function isFieldType(fieldType) { \****************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -79553,6 +83941,7 @@ Object.keys(_operationName).forEach(function (key) { \********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -79660,6 +84049,7 @@ function mergeAst(documentAST, schema) { \*************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -79692,6 +84082,7 @@ function getSelectedOperationName(prevOperations, prevSelectedOperationName, ope \************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -79761,6 +84152,7 @@ Object.keys(_storage).forEach(function (key) { \*******************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -79835,6 +84227,7 @@ const STORAGE_NAMESPACE = "graphiql"; \*********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -79870,6 +84263,7 @@ function createLocalStorage({ \**********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -79972,6 +84366,7 @@ exports.HistoryStore = HistoryStore; \********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -80030,6 +84425,7 @@ Object.keys(_custom).forEach(function (key) { \********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -80092,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", ({ @@ -80715,6 +85112,7 @@ function isChildComponentType(child, component) { \***************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -81015,6 +85413,7 @@ var _utils = __webpack_require__(/*! ./utils */ "../../graphql-language-service/ \*************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -81121,6 +85520,7 @@ exports.getFieldInsertText = getFieldInsertText; \**********************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -81761,6 +86161,7 @@ function unwrapType(state) { \*********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -81983,6 +86384,7 @@ function getDefinitionForArgumentDefinition(path, text, definition) { \**********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -82105,6 +86507,7 @@ function getLocation(node) { \***************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -82298,6 +86701,7 @@ function text(into, content) { \******************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -82433,6 +86837,7 @@ function concatMap(arr, fn) { \*************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -82513,6 +86918,7 @@ var _getHoverInformation = __webpack_require__(/*! ./getHoverInformation */ "../ \********************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -82632,6 +87038,7 @@ exports["default"] = CharacterStream; \****************************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -82686,6 +87093,7 @@ function p(value, style) { \**********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -82890,6 +87298,7 @@ function type(style) { \********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -83014,6 +87423,7 @@ function getContextAtPosition(queryText, cursor, schema, contextToken, options) \****************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -83231,6 +87641,7 @@ function getTypeInfo(schema, tokenState) { \**********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -83392,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", ({ @@ -83613,6 +88025,7 @@ function lex(lexRules, stream) { \**********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -83661,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", ({ @@ -83723,6 +88137,7 @@ var CompletionItemKind; \*********************************************************/ /***/ (function(__unused_webpack_module, exports) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -83788,6 +88203,7 @@ function locToRange(text, loc) { \********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -83828,6 +88244,7 @@ function collectVariables(schema, documentAST) { \************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -83898,6 +88315,7 @@ exports.getFragmentDependenciesForAST = getFragmentDependenciesForAST; \************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -83938,6 +88356,7 @@ function pointToOffset(text, point) { \*********************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -83984,6 +88403,7 @@ const getQueryFacts = exports.getQueryFacts = getOperationFacts; \**************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -84223,6 +88643,7 @@ function getVariablesJSONSchema(variableToType, options) { \*********************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { +"use strict"; Object.defineProperty(exports, "__esModule", ({ @@ -84330,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", ({ @@ -84377,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 @@ -84389,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 @@ -84401,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 @@ -84413,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 @@ -84425,6 +88851,7 @@ __webpack_require__.r(__webpack_exports__); \************************/ /***/ (function(module) { +"use strict"; module.exports = window["React"]; /***/ }), @@ -84435,6 +88862,7 @@ module.exports = window["React"]; \***************************/ /***/ (function(module) { +"use strict"; module.exports = window["ReactDOM"]; /***/ }), @@ -84445,6 +88873,7 @@ module.exports = window["ReactDOM"]; \***********************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; var __create = Object.create; var __defProp = Object.defineProperty; @@ -91606,6 +96035,7 @@ var Transition = Object.assign(TransitionRoot, { Child, Root: TransitionRoot }); \**************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { +"use strict"; if (false) {} else { @@ -91621,6 +96051,7 @@ if (false) {} else { \***************************************************************/ /***/ (function(module) { +"use strict"; function _extends() { @@ -91698,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 ***! @@ -91713,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-external.css b/netbox/project-static/dist/netbox-external.css index 72d40bc92..702520216 100644 Binary files a/netbox/project-static/dist/netbox-external.css and b/netbox/project-static/dist/netbox-external.css differ diff --git a/netbox/project-static/dist/netbox.css b/netbox/project-static/dist/netbox.css index cd66ffa0f..cee6eda68 100644 Binary files a/netbox/project-static/dist/netbox.css and b/netbox/project-static/dist/netbox.css differ diff --git a/netbox/project-static/dist/netbox.js b/netbox/project-static/dist/netbox.js index 969d5c73a..7e516f7f4 100644 Binary files a/netbox/project-static/dist/netbox.js and b/netbox/project-static/dist/netbox.js differ diff --git a/netbox/project-static/dist/netbox.js.map b/netbox/project-static/dist/netbox.js.map index 0f4ac63d3..a8b2c9569 100644 Binary files a/netbox/project-static/dist/netbox.js.map and b/netbox/project-static/dist/netbox.js.map differ diff --git a/netbox/project-static/netbox-graphiql/package.json b/netbox/project-static/netbox-graphiql/package.json index 27257e34c..00218185a 100644 --- a/netbox/project-static/netbox-graphiql/package.json +++ b/netbox/project-static/netbox-graphiql/package.json @@ -1,14 +1,14 @@ { "name": "netbox-graphiql", - "version": "4.1.0", + "version": "4.2.0", "description": "NetBox GraphiQL Custom Front End", "main": "dist/graphiql.js", "license": "Apache-2.0", "private": true, "dependencies": { - "@graphiql/plugin-explorer": "3.2.2", - "graphiql": "3.7.1", - "graphql": "16.9.0", + "@graphiql/plugin-explorer": "3.2.5", + "graphiql": "3.8.3", + "graphql": "16.10.0", "js-cookie": "3.0.5", "react": "18.3.1", "react-dom": "18.3.1" diff --git a/netbox/project-static/package.json b/netbox/project-static/package.json index 0750f397b..f216a4107 100644 --- a/netbox/project-static/package.json +++ b/netbox/project-static/package.json @@ -1,6 +1,6 @@ { "name": "netbox", - "version": "4.0.0", + "version": "4.1.0", "main": "dist/netbox.js", "license": "Apache-2.0", "private": true, @@ -27,11 +27,11 @@ "bootstrap": "5.3.3", "clipboard": "2.0.11", "flatpickr": "4.6.13", - "gridstack": "10.3.1", + "gridstack": "11.3.0", "htmx.org": "1.9.12", "query-string": "9.1.1", - "sass": "1.80.5", - "tom-select": "2.3.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/src/buttons/reslug.ts b/netbox/project-static/src/buttons/reslug.ts index f445854c1..53c21b1f0 100644 --- a/netbox/project-static/src/buttons/reslug.ts +++ b/netbox/project-static/src/buttons/reslug.ts @@ -1,3 +1,5 @@ +import { getElements } from '../util'; + /** * Create a slug from any input string. * @@ -15,34 +17,30 @@ function slugify(slug: string, chars: number): string { } /** - * If a slug field exists, add event listeners to handle automatically generating its value. + * For any slug fields, add event listeners to handle automatically generating slug values. */ export function initReslug(): void { - const slugField = document.getElementById('id_slug') as HTMLInputElement; - const slugButton = document.getElementById('reslug') as HTMLButtonElement; - if (slugField === null || slugButton === null) { - return; - } - const sourceId = slugField.getAttribute('slug-source'); - const sourceField = document.getElementById(`id_${sourceId}`) as HTMLInputElement; + for (const slugButton of getElements('button#reslug')) { + const form = slugButton.form; + if (form == null) continue; + const slugField = form.querySelector('#id_slug') as HTMLInputElement; + if (slugField == null) continue; + const sourceId = slugField.getAttribute('slug-source'); + const sourceField = form.querySelector(`#id_${sourceId}`) as HTMLInputElement; - if (sourceField === null) { - console.error('Unable to find field for slug field.'); - return; - } + const slugLengthAttr = slugField.getAttribute('maxlength'); + let slugLength = 50; - const slugLengthAttr = slugField.getAttribute('maxlength'); - let slugLength = 50; - - if (slugLengthAttr) { - slugLength = Number(slugLengthAttr); - } - sourceField.addEventListener('blur', () => { - if (!slugField.value) { - slugField.value = slugify(sourceField.value, slugLength); + if (slugLengthAttr) { + slugLength = Number(slugLengthAttr); } - }); - slugButton.addEventListener('click', () => { - slugField.value = slugify(sourceField.value, slugLength); - }); + sourceField.addEventListener('blur', () => { + if (!slugField.value) { + slugField.value = slugify(sourceField.value, slugLength); + } + }); + slugButton.addEventListener('click', () => { + slugField.value = slugify(sourceField.value, slugLength); + }); + } } diff --git a/netbox/project-static/src/htmx.ts b/netbox/project-static/src/htmx.ts index f4092036b..6a772011b 100644 --- a/netbox/project-static/src/htmx.ts +++ b/netbox/project-static/src/htmx.ts @@ -4,11 +4,16 @@ import { initSelects } from './select'; import { initObjectSelector } from './objectSelector'; import { initBootstrap } from './bs'; import { initMessages } from './messages'; +import { initQuickAdd } from './quickAdd'; function initDepedencies(): void { - for (const init of [initButtons, initClipboard, initSelects, initObjectSelector, initBootstrap, initMessages]) { - init(); - } + initButtons(); + initClipboard(); + initSelects(); + initObjectSelector(); + initQuickAdd(); + initBootstrap(); + initMessages(); } /** diff --git a/netbox/project-static/src/quickAdd.ts b/netbox/project-static/src/quickAdd.ts new file mode 100644 index 000000000..e038f5d19 --- /dev/null +++ b/netbox/project-static/src/quickAdd.ts @@ -0,0 +1,39 @@ +import { Modal } from 'bootstrap'; + +function handleQuickAddObject(): void { + const quick_add = document.getElementById('quick-add-object'); + if (quick_add == null) return; + + const object_id = quick_add.getAttribute('data-object-id'); + if (object_id == null) return; + const object_repr = quick_add.getAttribute('data-object-repr'); + if (object_repr == null) return; + + const target_id = quick_add.getAttribute('data-target-id'); + if (target_id == null) return; + const target = document.getElementById(target_id); + if (target == null) return; + + //@ts-expect-error tomselect added on init + target.tomselect.addOption({ + id: object_id, + display: object_repr, + }); + //@ts-expect-error tomselect added on init + target.tomselect.addItem(object_id); + + const modal_element = document.getElementById('htmx-modal'); + if (modal_element) { + const modal = Modal.getInstance(modal_element); + if (modal) { + modal.hide(); + } + } +} + +export function initQuickAdd(): void { + const quick_add_modal = document.getElementById('htmx-modal-content'); + if (quick_add_modal) { + quick_add_modal.addEventListener('htmx:afterSwap', () => handleQuickAddObject()); + } +} diff --git a/netbox/project-static/src/select/classes/dynamicTomSelect.ts b/netbox/project-static/src/select/classes/dynamicTomSelect.ts index 72c9fe518..8e44ce6a7 100644 --- a/netbox/project-static/src/select/classes/dynamicTomSelect.ts +++ b/netbox/project-static/src/select/classes/dynamicTomSelect.ts @@ -1,18 +1,17 @@ -import { RecursivePartial, TomInput, TomOption, TomSettings } from 'tom-select/dist/types/types'; -import { addClasses } from 'tom-select/src/vanilla' +import { RecursivePartial, TomOption, TomSettings } from 'tom-select/dist/types/types'; +import { TomInput } from 'tom-select/dist/cjs/types/core'; +import { addClasses } from 'tom-select/src/vanilla.ts'; import queryString from 'query-string'; import TomSelect from 'tom-select'; import type { Stringifiable } from 'query-string'; import { DynamicParamsMap } from './dynamicParamsMap'; // Transitional -import { QueryFilter, PathFilter } from '../types' +import { QueryFilter, PathFilter } from '../types'; import { getElement, replaceAll } from '../../util'; - // Extends TomSelect to provide enhanced fetching of options via the REST API export class DynamicTomSelect extends TomSelect { - public readonly nullOption: Nullable = null; // Transitional code from APISelect @@ -25,7 +24,7 @@ export class DynamicTomSelect extends TomSelect { * Overrides */ - constructor( input_arg: string|TomInput, user_settings: RecursivePartial ) { + constructor(input_arg: string | TomInput, user_settings: RecursivePartial) { super(input_arg, user_settings); // Glean the REST API endpoint URL from the {% endif %} + diff --git a/netbox/templates/extras/dashboard/widgets/rssfeed.html b/netbox/templates/extras/dashboard/widgets/rssfeed.html index 4420783fd..2528c5fc7 100644 --- a/netbox/templates/extras/dashboard/widgets/rssfeed.html +++ b/netbox/templates/extras/dashboard/widgets/rssfeed.html @@ -5,13 +5,17 @@
    {{ entry.title }}
    - {{ entry.summary|safe }} + {{ entry.summary }}
    {% empty %}
    {% trans "No content found" %}
    {% endfor %}
    +{% elif isolated_deployment %} + + {% trans "This RSS feed requires an external connection. Check the ISOLATED_DEPLOYMENT setting." %} + {% else %} {# There was an error retrieving/parsing the feed #} diff --git a/netbox/templates/generic/object_list.html b/netbox/templates/generic/object_list.html index fdd3cd3d8..e6d5505a4 100644 --- a/netbox/templates/generic/object_list.html +++ b/netbox/templates/generic/object_list.html @@ -34,7 +34,7 @@ Context: {% if 'add' in actions %} {% add_button model %} {% endif %} - {% if 'import' in actions %} + {% if 'bulk_import' in actions %} {% import_button model %} {% endif %} {% if 'export' in actions %} diff --git a/netbox/templates/htmx/quick_add.html b/netbox/templates/htmx/quick_add.html new file mode 100644 index 000000000..9473e14a1 --- /dev/null +++ b/netbox/templates/htmx/quick_add.html @@ -0,0 +1,28 @@ +{% load form_helpers %} +{% load helpers %} +{% load i18n %} + + + diff --git a/netbox/templates/htmx/quick_add_created.html b/netbox/templates/htmx/quick_add_created.html new file mode 100644 index 000000000..3b1a24c48 --- /dev/null +++ b/netbox/templates/htmx/quick_add_created.html @@ -0,0 +1,22 @@ +{% load form_helpers %} +{% load helpers %} +{% load i18n %} + + + diff --git a/netbox/templates/inc/user_menu.html b/netbox/templates/inc/user_menu.html index 1b6757416..e27be3323 100644 --- a/netbox/templates/inc/user_menu.html +++ b/netbox/templates/inc/user_menu.html @@ -36,11 +36,6 @@ diff --git a/netbox/templates/ipam/prefix.html b/netbox/templates/ipam/prefix.html index 94307cddb..2416fc0f7 100644 --- a/netbox/templates/ipam/prefix.html +++ b/netbox/templates/ipam/prefix.html @@ -44,17 +44,13 @@ {% endif %} - {% if object.site.region %} - - {% trans "Region" %} - - {% nested_tree object.site.region %} - - - {% endif %} - {% trans "Site" %} - {{ object.site|linkify|placeholder }} + {% trans "Scope" %} + {% if object.scope %} + {{ object.scope|linkify }} ({% trans object.scope_type.name %}) + {% else %} + {{ ''|placeholder }} + {% endif %} {% trans "VLAN" %} diff --git a/netbox/templates/ipam/vlan.html b/netbox/templates/ipam/vlan.html index 95a4f7856..fa480f2f6 100644 --- a/netbox/templates/ipam/vlan.html +++ b/netbox/templates/ipam/vlan.html @@ -62,6 +62,22 @@ {% trans "Description" %} {{ object.description|placeholder }} + + {% trans "Q-in-Q Role" %} + + {% if object.qinq_role %} + {% badge object.get_qinq_role_display bg_color=object.get_qinq_role_color %} + {% else %} + {{ ''|placeholder }} + {% endif %} + + + {% if object.qinq_role == 'cvlan' %} + + {% trans "Q-in-Q SVLAN" %} + {{ object.qinq_svlan|linkify|placeholder }} + + {% endif %} {% trans "L2VPN" %} {{ object.l2vpn_termination.l2vpn|linkify|placeholder }} @@ -92,6 +108,21 @@ {% htmx_table 'ipam:prefix_list' vlan_id=object.pk %} + {% if object.qinq_role == 'svlan' %} +
    +

    + {% trans "Customer VLANs" %} + {% if perms.ipam.add_vlan %} + + {% endif %} +

    + {% htmx_table 'ipam:vlan_list' qinq_svlan_id=object.pk %} +
    + {% endif %} {% plugin_full_width_page object %} diff --git a/netbox/templates/ipam/vlan_edit.html b/netbox/templates/ipam/vlan_edit.html index 814fc6b78..885844580 100644 --- a/netbox/templates/ipam/vlan_edit.html +++ b/netbox/templates/ipam/vlan_edit.html @@ -17,6 +17,14 @@ {% render_field form.tags %} +
    +
    +

    {% trans "Q-in-Q (802.1ad)" %}

    +
    + {% render_field form.qinq_role %} + {% render_field form.qinq_svlan %} +
    +

    {% trans "Tenancy" %}

    diff --git a/netbox/templates/ipam/vlantranslationpolicy.html b/netbox/templates/ipam/vlantranslationpolicy.html new file mode 100644 index 000000000..58a1201d4 --- /dev/null +++ b/netbox/templates/ipam/vlantranslationpolicy.html @@ -0,0 +1,65 @@ +{% extends 'generic/object.html' %} +{% load helpers %} +{% load plugins %} +{% load render_table from django_tables2 %} +{% load i18n %} + +{% block content %} +
    +
    +
    +

    {% trans "VLAN Translation Policy" %}

    + + + + + + + + + + + + + +
    {% trans "Name" %}{{ object.name|placeholder }}
    {% trans "Description" %}{{ object.description|placeholder }}
    {% trans "Rules" %} + {% if object.rules.count %} + {{ object.rules.count }} + {% else %} + 0 + {% endif %} +
    +
    + {% plugin_left_page object %} +
    +
    + {% include 'inc/panels/tags.html' %} + {% include 'inc/panels/custom_fields.html' %} + {% include 'inc/panels/comments.html' %} + {% plugin_right_page object %} +
    +
    +
    +
    +
    +

    + {% trans "VLAN Translation Rules" %} + {% if perms.ipam.add_vlantranslationrule %} + + {% endif %} +

    + {% htmx_table 'ipam:vlantranslationrule_list' policy_id=object.pk %} +
    +
    +
    +
    +
    + {% plugin_full_width_page object %} +
    +
    +{% endblock %} diff --git a/netbox/templates/ipam/vlantranslationrule.html b/netbox/templates/ipam/vlantranslationrule.html new file mode 100644 index 000000000..7f3aad2ad --- /dev/null +++ b/netbox/templates/ipam/vlantranslationrule.html @@ -0,0 +1,45 @@ +{% extends 'generic/object.html' %} +{% load helpers %} +{% load plugins %} +{% load render_table from django_tables2 %} +{% load i18n %} + +{% block content %} +
    +
    +
    +

    {% trans "VLAN Translation Rule" %}

    + + + + + + + + + + + + + + + + + +
    {% trans "Policy" %}{{ object.policy|linkify }}
    {% trans "Local VID" %}{{ object.local_vid }}
    {% trans "Remote VID" %}{{ object.remote_vid }}
    {% trans "Description" %}{{ object.description }}
    +
    + {% plugin_left_page object %} +
    +
    + {% include 'inc/panels/tags.html' %} + {% include 'inc/panels/custom_fields.html' %} + {% include 'inc/panels/comments.html' %} + {% plugin_right_page object %} +
    +
    +
    +
    + {% plugin_full_width_page object %} +
    +
    +{% endblock %} diff --git a/netbox/templates/virtualization/cluster.html b/netbox/templates/virtualization/cluster.html index d79d8075c..4155dacb2 100644 --- a/netbox/templates/virtualization/cluster.html +++ b/netbox/templates/virtualization/cluster.html @@ -39,8 +39,12 @@ - {% trans "Site" %} - {{ object.site|linkify|placeholder }} + {% trans "Scope" %} + {% if object.scope %} + {{ object.scope|linkify }} ({% trans object.scope_type.name %}) + {% else %} + {{ ''|placeholder }} + {% endif %}
    diff --git a/netbox/templates/virtualization/virtualmachine/render_config.html b/netbox/templates/virtualization/virtualmachine/render_config.html index 5e7a0711b..fa6f1723b 100644 --- a/netbox/templates/virtualization/virtualmachine/render_config.html +++ b/netbox/templates/virtualization/virtualmachine/render_config.html @@ -5,7 +5,7 @@ {% block title %}{{ object }} - {% trans "Config" %}{% endblock %} {% block content %} -
    +

    {% trans "Config Template" %}

    @@ -48,19 +48,28 @@
    -
    -

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

    - {% if config_template %} -
    {{ rendered_config }}
    + {% if config_template %} + {% if rendered_config %} +
    +

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

    +
    {{ rendered_config }}
    +
    {% else %} -
    {% trans "No configuration template found" %}
    +
    +

    {% 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/templates/virtualization/vminterface.html b/netbox/templates/virtualization/vminterface.html index 0d679680d..88c9379cf 100644 --- a/netbox/templates/virtualization/vminterface.html +++ b/netbox/templates/virtualization/vminterface.html @@ -14,69 +14,85 @@ {% block content %}
    -
    -

    {% trans "Interface" %}

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    {% trans "Virtual Machine" %}{{ object.virtual_machine|linkify }}
    {% trans "Name" %}{{ object.name }}
    {% trans "Enabled" %} - {% if object.enabled %} - - {% else %} - - {% endif %} -
    {% trans "Parent" %}{{ object.parent|linkify|placeholder }}
    {% trans "Bridge" %}{{ object.bridge|linkify|placeholder }}
    {% trans "VRF" %}{{ object.vrf|linkify|placeholder }}
    {% trans "Description" %}{{ object.description|placeholder }}
    {% trans "MTU" %}{{ object.mtu|placeholder }}
    {% trans "MAC Address" %}{{ object.mac_address|placeholder }}
    {% trans "802.1Q Mode" %}{{ object.get_mode_display|placeholder }}
    {% trans "Tunnel" %}{{ object.tunnel_termination.tunnel|linkify|placeholder }}
    -
    - {% include 'inc/panels/tags.html' %} - {% plugin_left_page object %} +
    +

    {% trans "Interface" %}

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    {% trans "Virtual Machine" %}{{ object.virtual_machine|linkify }}
    {% trans "Name" %}{{ object.name }}
    {% trans "Enabled" %} + {% if object.enabled %} + + {% else %} + + {% endif %} +
    {% trans "Parent" %}{{ object.parent|linkify|placeholder }}
    {% trans "Bridge" %}{{ object.bridge|linkify|placeholder }}
    {% trans "Description" %}{{ object.description|placeholder }}
    {% trans "MTU" %}{{ object.mtu|placeholder }}
    {% trans "802.1Q Mode" %}{{ object.get_mode_display|placeholder }}
    {% trans "Tunnel" %}{{ object.tunnel_termination.tunnel|linkify|placeholder }}
    -
    - {% include 'inc/panels/custom_fields.html' %} - {% include 'ipam/inc/panels/fhrp_groups.html' %} - {% plugin_right_page object %} + {% include 'inc/panels/tags.html' %} + {% plugin_left_page object %} +
    +
    + {% include 'inc/panels/custom_fields.html' %} +
    +

    {% trans "Addressing" %}

    + + + + + + + + + + + + + +
    {% trans "MAC Address" %} + {% if object.mac_address %} + {{ object.mac_address }} + {% trans "Primary" %} + {% else %} + {{ ''|placeholder }} + {% endif %} +
    {% trans "VRF" %}{{ object.vrf|linkify|placeholder }}
    {% trans "VLAN Translation" %}{{ object.vlan_translation_policy|linkify|placeholder }}
    + {% include 'ipam/inc/panels/fhrp_groups.html' %} + {% plugin_right_page object %} +
    @@ -95,11 +111,36 @@
    +
    +
    +
    +

    + {% trans "MAC Addresses" %} + {% if perms.ipam.add_macaddress %} + + {% endif %} +

    + {% htmx_table 'dcim:macaddress_list' vminterface_id=object.pk %} +
    +
    +
    {% include 'inc/panel_table.html' with table=vlan_table heading="VLANs" %}
    +{% if object.vlan_translation_policy %} +
    +
    + {% include 'inc/panel_table.html' with table=vlan_translation_table heading="VLAN Translation" %} +
    +
    +{% endif %}
    {% include 'inc/panel_table.html' with table=child_interfaces_table heading="Child Interfaces" %} diff --git a/netbox/templates/wireless/wirelesslan.html b/netbox/templates/wireless/wirelesslan.html index 493c36132..54473ea54 100644 --- a/netbox/templates/wireless/wirelesslan.html +++ b/netbox/templates/wireless/wirelesslan.html @@ -22,6 +22,14 @@ {% trans "Status" %} {% badge object.get_status_display bg_color=object.get_status_color %} + + {% trans "Scope" %} + {% if object.scope %} + {{ object.scope|linkify }} ({% trans object.scope_type.name %}) + {% else %} + {{ ''|placeholder }} + {% endif %} + {% trans "Description" %} {{ object.description|placeholder }} diff --git a/netbox/tenancy/api/nested_serializers.py b/netbox/tenancy/api/nested_serializers.py deleted file mode 100644 index 5adb78863..000000000 --- a/netbox/tenancy/api/nested_serializers.py +++ /dev/null @@ -1,58 +0,0 @@ -import warnings - -from netbox.api.serializers import WritableNestedSerializer -from serializers_.nested import NestedContactGroupSerializer, NestedTenantGroupSerializer -from tenancy.models import * - -__all__ = [ - 'NestedContactSerializer', - 'NestedContactAssignmentSerializer', - 'NestedContactGroupSerializer', - 'NestedContactRoleSerializer', - 'NestedTenantGroupSerializer', - 'NestedTenantSerializer', -] - -# TODO: Remove in v4.2 -warnings.warn( - "Dedicated nested serializers will be removed in NetBox v4.2. Use Serializer(nested=True) instead.", - DeprecationWarning -) - - -# -# Tenants -# - -class NestedTenantSerializer(WritableNestedSerializer): - - class Meta: - model = Tenant - fields = ['id', 'url', 'display_url', 'display', 'name', 'slug'] - - -# -# Contacts -# - -class NestedContactRoleSerializer(WritableNestedSerializer): - - class Meta: - model = ContactRole - fields = ['id', 'url', 'display_url', 'display', 'name', 'slug'] - - -class NestedContactSerializer(WritableNestedSerializer): - - class Meta: - model = Contact - fields = ['id', 'url', 'display_url', 'display', 'name'] - - -class NestedContactAssignmentSerializer(WritableNestedSerializer): - contact = NestedContactSerializer() - role = NestedContactRoleSerializer - - class Meta: - model = ContactAssignment - fields = ['id', 'url', 'display', 'contact', 'role', 'priority'] diff --git a/netbox/tenancy/forms/forms.py b/netbox/tenancy/forms/forms.py index 114253e7a..0edb36348 100644 --- a/netbox/tenancy/forms/forms.py +++ b/netbox/tenancy/forms/forms.py @@ -25,6 +25,7 @@ class TenancyForm(forms.Form): label=_('Tenant'), queryset=Tenant.objects.all(), required=False, + quick_add=True, query_params={ 'group_id': '$tenant_group' } diff --git a/netbox/tenancy/migrations/0001_squashed_0012.py b/netbox/tenancy/migrations/0001_squashed_0012.py index e8a028a92..8f3f74d9f 100644 --- a/netbox/tenancy/migrations/0001_squashed_0012.py +++ b/netbox/tenancy/migrations/0001_squashed_0012.py @@ -6,7 +6,6 @@ import taggit.managers class Migration(migrations.Migration): - initial = True dependencies = [ @@ -43,7 +42,16 @@ class Migration(migrations.Migration): ('rght', models.PositiveIntegerField(editable=False)), ('tree_id', models.PositiveIntegerField(db_index=True, editable=False)), ('level', models.PositiveIntegerField(editable=False)), - ('parent', mptt.fields.TreeForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='children', to='tenancy.tenantgroup')), + ( + 'parent', + mptt.fields.TreeForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name='children', + to='tenancy.tenantgroup', + ), + ), ], options={ 'ordering': ['name'], @@ -60,7 +68,16 @@ class Migration(migrations.Migration): ('slug', models.SlugField(max_length=100, unique=True)), ('description', models.CharField(blank=True, max_length=200)), ('comments', models.TextField(blank=True)), - ('group', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='tenants', to='tenancy.tenantgroup')), + ( + 'group', + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='tenants', + to='tenancy.tenantgroup', + ), + ), ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), ], options={ diff --git a/netbox/tenancy/migrations/0002_squashed_0011.py b/netbox/tenancy/migrations/0002_squashed_0011.py index 8accd1da9..cfdcb58dd 100644 --- a/netbox/tenancy/migrations/0002_squashed_0011.py +++ b/netbox/tenancy/migrations/0002_squashed_0011.py @@ -7,7 +7,6 @@ import utilities.json class Migration(migrations.Migration): - replaces = [ ('tenancy', '0002_tenant_ordering'), ('tenancy', '0003_contacts'), @@ -18,7 +17,7 @@ class Migration(migrations.Migration): ('tenancy', '0008_unique_constraints'), ('tenancy', '0009_standardize_description_comments'), ('tenancy', '0010_tenant_relax_uniqueness'), - ('tenancy', '0011_contactassignment_tags') + ('tenancy', '0011_contactassignment_tags'), ] dependencies = [ @@ -37,7 +36,10 @@ class Migration(migrations.Migration): fields=[ ('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)), + ( + 'custom_field_data', + models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder), + ), ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), ('name', models.CharField(max_length=100, unique=True)), ('slug', models.SlugField(max_length=100, unique=True)), @@ -53,7 +55,10 @@ class Migration(migrations.Migration): fields=[ ('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)), + ( + 'custom_field_data', + models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder), + ), ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), ('name', models.CharField(max_length=100)), ('slug', models.SlugField(max_length=100)), @@ -62,7 +67,16 @@ class Migration(migrations.Migration): ('rght', models.PositiveIntegerField(editable=False)), ('tree_id', models.PositiveIntegerField(db_index=True, editable=False)), ('level', models.PositiveIntegerField(editable=False)), - ('parent', mptt.fields.TreeForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='children', to='tenancy.contactgroup')), + ( + 'parent', + mptt.fields.TreeForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.CASCADE, + related_name='children', + to='tenancy.contactgroup', + ), + ), ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), ], options={ @@ -75,7 +89,10 @@ class Migration(migrations.Migration): fields=[ ('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)), + ( + 'custom_field_data', + models.JSONField(blank=True, default=dict, encoder=utilities.json.CustomFieldJSONEncoder), + ), ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), ('name', models.CharField(max_length=100)), ('title', models.CharField(blank=True, max_length=100)), @@ -83,7 +100,16 @@ class Migration(migrations.Migration): ('email', models.EmailField(blank=True, max_length=254)), ('address', models.CharField(blank=True, max_length=200)), ('comments', models.TextField(blank=True)), - ('group', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='contacts', to='tenancy.contactgroup')), + ( + 'group', + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name='contacts', + to='tenancy.contactgroup', + ), + ), ('tags', taggit.managers.TaggableManager(through='extras.TaggedItem', to='extras.Tag')), ('link', models.URLField(blank=True)), ], @@ -125,9 +151,24 @@ class Migration(migrations.Migration): ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), ('object_id', models.PositiveBigIntegerField()), ('priority', models.CharField(blank=True, max_length=50)), - ('contact', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='assignments', to='tenancy.contact')), - ('content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.contenttype')), - ('role', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='assignments', to='tenancy.contactrole')), + ( + 'contact', + models.ForeignKey( + on_delete=django.db.models.deletion.PROTECT, related_name='assignments', to='tenancy.contact' + ), + ), + ( + 'content_type', + models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.contenttype'), + ), + ( + 'role', + models.ForeignKey( + on_delete=django.db.models.deletion.PROTECT, + related_name='assignments', + to='tenancy.contactrole', + ), + ), ], options={ 'ordering': ('priority', 'contact'), @@ -140,11 +181,16 @@ class Migration(migrations.Migration): ), migrations.AddConstraint( model_name='contactassignment', - constraint=models.UniqueConstraint(fields=('content_type', 'object_id', 'contact', 'role'), name='tenancy_contactassignment_unique_object_contact_role'), + constraint=models.UniqueConstraint( + fields=('content_type', 'object_id', 'contact', 'role'), + name='tenancy_contactassignment_unique_object_contact_role', + ), ), migrations.AddConstraint( model_name='contactgroup', - constraint=models.UniqueConstraint(fields=('parent', 'name'), name='tenancy_contactgroup_unique_parent_name'), + constraint=models.UniqueConstraint( + fields=('parent', 'name'), name='tenancy_contactgroup_unique_parent_name' + ), ), migrations.AddField( model_name='contact', @@ -163,19 +209,31 @@ class Migration(migrations.Migration): ), migrations.AddConstraint( model_name='tenant', - constraint=models.UniqueConstraint(fields=('group', 'name'), name='tenancy_tenant_unique_group_name', violation_error_message='Tenant name must be unique per group.'), + constraint=models.UniqueConstraint( + fields=('group', 'name'), + name='tenancy_tenant_unique_group_name', + violation_error_message='Tenant name must be unique per group.', + ), ), migrations.AddConstraint( model_name='tenant', - constraint=models.UniqueConstraint(condition=models.Q(('group__isnull', True)), fields=('name',), name='tenancy_tenant_unique_name'), + constraint=models.UniqueConstraint( + condition=models.Q(('group__isnull', True)), fields=('name',), name='tenancy_tenant_unique_name' + ), ), migrations.AddConstraint( model_name='tenant', - constraint=models.UniqueConstraint(fields=('group', 'slug'), name='tenancy_tenant_unique_group_slug', violation_error_message='Tenant slug must be unique per group.'), + constraint=models.UniqueConstraint( + fields=('group', 'slug'), + name='tenancy_tenant_unique_group_slug', + violation_error_message='Tenant slug must be unique per group.', + ), ), migrations.AddConstraint( model_name='tenant', - constraint=models.UniqueConstraint(condition=models.Q(('group__isnull', True)), fields=('slug',), name='tenancy_tenant_unique_slug'), + constraint=models.UniqueConstraint( + condition=models.Q(('group__isnull', True)), fields=('slug',), name='tenancy_tenant_unique_slug' + ), ), migrations.AddField( model_name='contactassignment', diff --git a/netbox/tenancy/migrations/0012_contactassignment_custom_fields.py b/netbox/tenancy/migrations/0012_contactassignment_custom_fields.py index ee6726822..7f681fd91 100644 --- a/netbox/tenancy/migrations/0012_contactassignment_custom_fields.py +++ b/netbox/tenancy/migrations/0012_contactassignment_custom_fields.py @@ -5,7 +5,6 @@ import utilities.json class Migration(migrations.Migration): - dependencies = [ ('tenancy', '0011_contactassignment_tags'), ] diff --git a/netbox/tenancy/migrations/0013_gfk_indexes.py b/netbox/tenancy/migrations/0013_gfk_indexes.py index dd23cefbb..9d58c8932 100644 --- a/netbox/tenancy/migrations/0013_gfk_indexes.py +++ b/netbox/tenancy/migrations/0013_gfk_indexes.py @@ -4,7 +4,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('tenancy', '0012_contactassignment_custom_fields'), ] diff --git a/netbox/tenancy/migrations/0014_contactassignment_ordering.py b/netbox/tenancy/migrations/0014_contactassignment_ordering.py index 66f08aa2a..5e2c39311 100644 --- a/netbox/tenancy/migrations/0014_contactassignment_ordering.py +++ b/netbox/tenancy/migrations/0014_contactassignment_ordering.py @@ -4,7 +4,6 @@ from django.db import migrations class Migration(migrations.Migration): - dependencies = [ ('tenancy', '0013_gfk_indexes'), ] diff --git a/netbox/tenancy/migrations/0015_contactassignment_rename_content_type.py b/netbox/tenancy/migrations/0015_contactassignment_rename_content_type.py index 58b14e10f..f2c1ce190 100644 --- a/netbox/tenancy/migrations/0015_contactassignment_rename_content_type.py +++ b/netbox/tenancy/migrations/0015_contactassignment_rename_content_type.py @@ -2,7 +2,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('contenttypes', '0002_remove_content_type_name'), ('extras', '0111_rename_content_types'), @@ -25,16 +24,13 @@ class Migration(migrations.Migration): ), migrations.AddIndex( model_name='contactassignment', - index=models.Index( - fields=['object_type', 'object_id'], - name='tenancy_con_object__6f20f7_idx' - ), + index=models.Index(fields=['object_type', 'object_id'], name='tenancy_con_object__6f20f7_idx'), ), migrations.AddConstraint( model_name='contactassignment', constraint=models.UniqueConstraint( fields=('object_type', 'object_id', 'contact', 'role'), - name='tenancy_contactassignment_unique_object_contact_role' + name='tenancy_contactassignment_unique_object_contact_role', ), ), ] diff --git a/netbox/tenancy/migrations/0016_charfield_null_choices.py b/netbox/tenancy/migrations/0016_charfield_null_choices.py new file mode 100644 index 000000000..9f5016a13 --- /dev/null +++ b/netbox/tenancy/migrations/0016_charfield_null_choices.py @@ -0,0 +1,25 @@ +from django.db import migrations, models + + +def set_null_values(apps, schema_editor): + """ + Replace empty strings with null values. + """ + ContactAssignment = apps.get_model('tenancy', 'ContactAssignment') + + ContactAssignment.objects.filter(priority='').update(priority=None) + + +class Migration(migrations.Migration): + dependencies = [ + ('tenancy', '0015_contactassignment_rename_content_type'), + ] + + operations = [ + migrations.AlterField( + model_name='contactassignment', + name='priority', + field=models.CharField(blank=True, max_length=50, null=True), + ), + migrations.RunPython(code=set_null_values, reverse_code=migrations.RunPython.noop), + ] diff --git a/netbox/tenancy/migrations/0017_natural_ordering.py b/netbox/tenancy/migrations/0017_natural_ordering.py new file mode 100644 index 000000000..beb98d634 --- /dev/null +++ b/netbox/tenancy/migrations/0017_natural_ordering.py @@ -0,0 +1,26 @@ +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ('tenancy', '0016_charfield_null_choices'), + ('dcim', '0197_natural_sort_collation'), + ] + + operations = [ + migrations.AlterField( + model_name='contact', + name='name', + field=models.CharField(db_collation='natural_sort', max_length=100), + ), + migrations.AlterField( + model_name='tenant', + name='name', + field=models.CharField(db_collation='natural_sort', max_length=100), + ), + migrations.AlterField( + model_name='tenantgroup', + name='name', + field=models.CharField(db_collation='natural_sort', max_length=100, unique=True), + ), + ] diff --git a/netbox/tenancy/models/contacts.py b/netbox/tenancy/models/contacts.py index e31330657..3969c8317 100644 --- a/netbox/tenancy/models/contacts.py +++ b/netbox/tenancy/models/contacts.py @@ -32,17 +32,11 @@ class ContactGroup(NestedGroupModel): verbose_name = _('contact group') verbose_name_plural = _('contact groups') - def get_absolute_url(self): - return reverse('tenancy:contactgroup', args=[self.pk]) - class ContactRole(OrganizationalModel): """ Functional role for a Contact assigned to an object. """ - def get_absolute_url(self): - return reverse('tenancy:contactrole', args=[self.pk]) - class Meta: ordering = ('name',) verbose_name = _('contact role') @@ -62,7 +56,8 @@ class Contact(PrimaryModel): ) name = models.CharField( verbose_name=_('name'), - max_length=100 + max_length=100, + db_collation="natural_sort" ) title = models.CharField( verbose_name=_('title'), @@ -106,9 +101,6 @@ class Contact(PrimaryModel): def __str__(self): return self.name - def get_absolute_url(self): - return reverse('tenancy:contact', args=[self.pk]) - class ContactAssignment(CustomFieldsMixin, ExportTemplatesMixin, TagsMixin, ChangeLoggedModel): object_type = models.ForeignKey( @@ -134,7 +126,8 @@ class ContactAssignment(CustomFieldsMixin, ExportTemplatesMixin, TagsMixin, Chan verbose_name=_('priority'), max_length=50, choices=ContactPriorityChoices, - blank=True + blank=True, + null=True ) clone_fields = ('object_type', 'object_id', 'role', 'priority') diff --git a/netbox/tenancy/models/tenants.py b/netbox/tenancy/models/tenants.py index dfc144dd2..55f0c5933 100644 --- a/netbox/tenancy/models/tenants.py +++ b/netbox/tenancy/models/tenants.py @@ -1,6 +1,5 @@ from django.db import models from django.db.models import Q -from django.urls import reverse from django.utils.translation import gettext_lazy as _ from netbox.models import NestedGroupModel, PrimaryModel @@ -19,7 +18,8 @@ class TenantGroup(NestedGroupModel): name = models.CharField( verbose_name=_('name'), max_length=100, - unique=True + unique=True, + db_collation="natural_sort" ) slug = models.SlugField( verbose_name=_('slug'), @@ -32,9 +32,6 @@ class TenantGroup(NestedGroupModel): verbose_name = _('tenant group') verbose_name_plural = _('tenant groups') - def get_absolute_url(self): - return reverse('tenancy:tenantgroup', args=[self.pk]) - class Tenant(ContactsMixin, PrimaryModel): """ @@ -43,7 +40,8 @@ class Tenant(ContactsMixin, PrimaryModel): """ name = models.CharField( verbose_name=_('name'), - max_length=100 + max_length=100, + db_collation="natural_sort" ) slug = models.SlugField( verbose_name=_('slug'), @@ -90,6 +88,3 @@ class Tenant(ContactsMixin, PrimaryModel): def __str__(self): return self.name - - def get_absolute_url(self): - return reverse('tenancy:tenant', args=[self.pk]) diff --git a/netbox/tenancy/tables/columns.py b/netbox/tenancy/tables/columns.py index ec73cac4a..005bcf737 100644 --- a/netbox/tenancy/tables/columns.py +++ b/netbox/tenancy/tables/columns.py @@ -2,6 +2,7 @@ from django.utils.translation import gettext_lazy as _ import django_tables2 as tables from netbox.tables import columns +from .template_code import * __all__ = ( 'ContactsColumnMixin', @@ -15,15 +16,7 @@ class TenantColumn(tables.TemplateColumn): """ Include the tenant description. """ - template_code = """ - {% if record.tenant %} - {{ record.tenant }} - {% elif record.vrf.tenant %} - {{ record.vrf.tenant }}* - {% else %} - — - {% endif %} - """ + template_code = TENANT_COLUMN def __init__(self, *args, **kwargs): super().__init__(template_code=self.template_code, *args, **kwargs) @@ -36,15 +29,7 @@ class TenantGroupColumn(tables.TemplateColumn): """ Include the tenant group description. """ - template_code = """ - {% if record.tenant and record.tenant.group %} - {{ record.tenant.group }} - {% elif record.vrf.tenant and record.vrf.tenant.group %} - {{ record.vrf.tenant.group }}* - {% else %} - — - {% endif %} - """ + template_code = TENANT_GROUP_COLUMN def __init__(self, accessor=tables.A('tenant__group'), *args, **kwargs): if 'verbose_name' not in kwargs: diff --git a/netbox/tenancy/tables/template_code.py b/netbox/tenancy/tables/template_code.py new file mode 100644 index 000000000..1d15a8708 --- /dev/null +++ b/netbox/tenancy/tables/template_code.py @@ -0,0 +1,19 @@ +TENANT_COLUMN = """ +{% if record.tenant %} + {{ record.tenant }} +{% elif record.vrf.tenant %} + {{ record.vrf.tenant }}* +{% else %} + — +{% endif %} +""" + +TENANT_GROUP_COLUMN = """ +{% if record.tenant and record.tenant.group %} + {{ record.tenant.group }} +{% elif record.vrf.tenant and record.vrf.tenant.group %} + {{ record.vrf.tenant.group }}* +{% else %} + — +{% endif %} +""" diff --git a/netbox/tenancy/tests/test_api.py b/netbox/tenancy/tests/test_api.py index 5a6fe0453..c32ad3826 100644 --- a/netbox/tenancy/tests/test_api.py +++ b/netbox/tenancy/tests/test_api.py @@ -239,9 +239,24 @@ class ContactAssignmentTest(APIViewTestCases.APIViewTestCase): ContactRole.objects.bulk_create(contact_roles) contact_assignments = ( - ContactAssignment(object=sites[0], contact=contacts[0], role=contact_roles[0], priority=ContactPriorityChoices.PRIORITY_PRIMARY), - ContactAssignment(object=sites[0], contact=contacts[1], role=contact_roles[1], priority=ContactPriorityChoices.PRIORITY_SECONDARY), - ContactAssignment(object=sites[0], contact=contacts[2], role=contact_roles[2], priority=ContactPriorityChoices.PRIORITY_TERTIARY), + ContactAssignment( + object=sites[0], + contact=contacts[0], + role=contact_roles[0], + priority=ContactPriorityChoices.PRIORITY_PRIMARY, + ), + ContactAssignment( + object=sites[0], + contact=contacts[1], + role=contact_roles[1], + priority=ContactPriorityChoices.PRIORITY_SECONDARY, + ), + ContactAssignment( + object=sites[0], + contact=contacts[2], + role=contact_roles[2], + priority=ContactPriorityChoices.PRIORITY_TERTIARY, + ), ) ContactAssignment.objects.bulk_create(contact_assignments) diff --git a/netbox/tenancy/urls.py b/netbox/tenancy/urls.py index ad9908c62..cd0caabdc 100644 --- a/netbox/tenancy/urls.py +++ b/netbox/tenancy/urls.py @@ -1,57 +1,27 @@ from django.urls import include, path from utilities.urls import get_model_urls -from . import views +from . import views # noqa F401 app_name = 'tenancy' urlpatterns = [ - # Tenant groups - path('tenant-groups/', views.TenantGroupListView.as_view(), name='tenantgroup_list'), - path('tenant-groups/add/', views.TenantGroupEditView.as_view(), name='tenantgroup_add'), - path('tenant-groups/import/', views.TenantGroupBulkImportView.as_view(), name='tenantgroup_import'), - path('tenant-groups/edit/', views.TenantGroupBulkEditView.as_view(), name='tenantgroup_bulk_edit'), - path('tenant-groups/delete/', views.TenantGroupBulkDeleteView.as_view(), name='tenantgroup_bulk_delete'), + path('tenant-groups/', include(get_model_urls('tenancy', 'tenantgroup', detail=False))), path('tenant-groups//', include(get_model_urls('tenancy', 'tenantgroup'))), - # Tenants - path('tenants/', views.TenantListView.as_view(), name='tenant_list'), - path('tenants/add/', views.TenantEditView.as_view(), name='tenant_add'), - path('tenants/import/', views.TenantBulkImportView.as_view(), name='tenant_import'), - path('tenants/edit/', views.TenantBulkEditView.as_view(), name='tenant_bulk_edit'), - path('tenants/delete/', views.TenantBulkDeleteView.as_view(), name='tenant_bulk_delete'), + path('tenants/', include(get_model_urls('tenancy', 'tenant', detail=False))), path('tenants//', include(get_model_urls('tenancy', 'tenant'))), - # Contact groups - path('contact-groups/', views.ContactGroupListView.as_view(), name='contactgroup_list'), - path('contact-groups/add/', views.ContactGroupEditView.as_view(), name='contactgroup_add'), - path('contact-groups/import/', views.ContactGroupBulkImportView.as_view(), name='contactgroup_import'), - path('contact-groups/edit/', views.ContactGroupBulkEditView.as_view(), name='contactgroup_bulk_edit'), - path('contact-groups/delete/', views.ContactGroupBulkDeleteView.as_view(), name='contactgroup_bulk_delete'), + path('contact-groups/', include(get_model_urls('tenancy', 'contactgroup', detail=False))), path('contact-groups//', include(get_model_urls('tenancy', 'contactgroup'))), - # Contact roles - path('contact-roles/', views.ContactRoleListView.as_view(), name='contactrole_list'), - path('contact-roles/add/', views.ContactRoleEditView.as_view(), name='contactrole_add'), - path('contact-roles/import/', views.ContactRoleBulkImportView.as_view(), name='contactrole_import'), - path('contact-roles/edit/', views.ContactRoleBulkEditView.as_view(), name='contactrole_bulk_edit'), - path('contact-roles/delete/', views.ContactRoleBulkDeleteView.as_view(), name='contactrole_bulk_delete'), + path('contact-roles/', include(get_model_urls('tenancy', 'contactrole', detail=False))), path('contact-roles//', include(get_model_urls('tenancy', 'contactrole'))), - # Contacts - path('contacts/', views.ContactListView.as_view(), name='contact_list'), - path('contacts/add/', views.ContactEditView.as_view(), name='contact_add'), - path('contacts/import/', views.ContactBulkImportView.as_view(), name='contact_import'), - path('contacts/edit/', views.ContactBulkEditView.as_view(), name='contact_bulk_edit'), - path('contacts/delete/', views.ContactBulkDeleteView.as_view(), name='contact_bulk_delete'), + path('contacts/', include(get_model_urls('tenancy', 'contact', detail=False))), path('contacts//', include(get_model_urls('tenancy', 'contact'))), - # Contact assignments - path('contact-assignments/', views.ContactAssignmentListView.as_view(), name='contactassignment_list'), - path('contact-assignments/add/', views.ContactAssignmentEditView.as_view(), name='contactassignment_add'), - path('contact-assignments/import/', views.ContactAssignmentBulkImportView.as_view(), name='contactassignment_import'), - path('contact-assignments/edit/', views.ContactAssignmentBulkEditView.as_view(), name='contactassignment_bulk_edit'), - path('contact-assignments/delete/', views.ContactAssignmentBulkDeleteView.as_view(), name='contactassignment_bulk_delete'), + path('contact-assignments/', include(get_model_urls('tenancy', 'contactassignment', detail=False))), path('contact-assignments//', include(get_model_urls('tenancy', 'contactassignment'))), ] diff --git a/netbox/tenancy/views.py b/netbox/tenancy/views.py index 96b2cb071..0988d2e65 100644 --- a/netbox/tenancy/views.py +++ b/netbox/tenancy/views.py @@ -37,11 +37,12 @@ class ObjectContactsView(generic.ObjectChildrenView): return table + # # Tenant groups # - +@register_model_view(TenantGroup, 'list', path='', detail=False) class TenantGroupListView(generic.ObjectListView): queryset = TenantGroup.objects.add_related_count( TenantGroup.objects.all(), @@ -67,6 +68,7 @@ class TenantGroupView(GetRelatedModelsMixin, generic.ObjectView): } +@register_model_view(TenantGroup, 'add', detail=False) @register_model_view(TenantGroup, 'edit') class TenantGroupEditView(generic.ObjectEditView): queryset = TenantGroup.objects.all() @@ -78,11 +80,13 @@ class TenantGroupDeleteView(generic.ObjectDeleteView): queryset = TenantGroup.objects.all() +@register_model_view(TenantGroup, 'bulk_import', detail=False) class TenantGroupBulkImportView(generic.BulkImportView): queryset = TenantGroup.objects.all() model_form = forms.TenantGroupImportForm +@register_model_view(TenantGroup, 'bulk_edit', path='edit', detail=False) class TenantGroupBulkEditView(generic.BulkEditView): queryset = TenantGroup.objects.add_related_count( TenantGroup.objects.all(), @@ -96,6 +100,7 @@ class TenantGroupBulkEditView(generic.BulkEditView): form = forms.TenantGroupBulkEditForm +@register_model_view(TenantGroup, 'bulk_delete', path='delete', detail=False) class TenantGroupBulkDeleteView(generic.BulkDeleteView): queryset = TenantGroup.objects.add_related_count( TenantGroup.objects.all(), @@ -112,6 +117,7 @@ class TenantGroupBulkDeleteView(generic.BulkDeleteView): # Tenants # +@register_model_view(Tenant, 'list', path='', detail=False) class TenantListView(generic.ObjectListView): queryset = Tenant.objects.all() filterset = filtersets.TenantFilterSet @@ -129,6 +135,7 @@ class TenantView(GetRelatedModelsMixin, generic.ObjectView): } +@register_model_view(Tenant, 'add', detail=False) @register_model_view(Tenant, 'edit') class TenantEditView(generic.ObjectEditView): queryset = Tenant.objects.all() @@ -140,11 +147,13 @@ class TenantDeleteView(generic.ObjectDeleteView): queryset = Tenant.objects.all() +@register_model_view(Tenant, 'bulk_import', detail=False) class TenantBulkImportView(generic.BulkImportView): queryset = Tenant.objects.all() model_form = forms.TenantImportForm +@register_model_view(Tenant, 'bulk_edit', path='edit', detail=False) class TenantBulkEditView(generic.BulkEditView): queryset = Tenant.objects.all() filterset = filtersets.TenantFilterSet @@ -152,6 +161,7 @@ class TenantBulkEditView(generic.BulkEditView): form = forms.TenantBulkEditForm +@register_model_view(Tenant, 'bulk_delete', path='delete', detail=False) class TenantBulkDeleteView(generic.BulkDeleteView): queryset = Tenant.objects.all() filterset = filtersets.TenantFilterSet @@ -167,6 +177,7 @@ class TenantContactsView(ObjectContactsView): # Contact groups # +@register_model_view(ContactGroup, 'list', path='', detail=False) class ContactGroupListView(generic.ObjectListView): queryset = ContactGroup.objects.add_related_count( ContactGroup.objects.all(), @@ -192,6 +203,7 @@ class ContactGroupView(GetRelatedModelsMixin, generic.ObjectView): } +@register_model_view(ContactGroup, 'add', detail=False) @register_model_view(ContactGroup, 'edit') class ContactGroupEditView(generic.ObjectEditView): queryset = ContactGroup.objects.all() @@ -203,11 +215,13 @@ class ContactGroupDeleteView(generic.ObjectDeleteView): queryset = ContactGroup.objects.all() +@register_model_view(ContactGroup, 'bulk_import', detail=False) class ContactGroupBulkImportView(generic.BulkImportView): queryset = ContactGroup.objects.all() model_form = forms.ContactGroupImportForm +@register_model_view(ContactGroup, 'bulk_edit', path='edit', detail=False) class ContactGroupBulkEditView(generic.BulkEditView): queryset = ContactGroup.objects.add_related_count( ContactGroup.objects.all(), @@ -221,6 +235,7 @@ class ContactGroupBulkEditView(generic.BulkEditView): form = forms.ContactGroupBulkEditForm +@register_model_view(ContactGroup, 'bulk_delete', path='delete', detail=False) class ContactGroupBulkDeleteView(generic.BulkDeleteView): queryset = ContactGroup.objects.add_related_count( ContactGroup.objects.all(), @@ -237,6 +252,7 @@ class ContactGroupBulkDeleteView(generic.BulkDeleteView): # Contact roles # +@register_model_view(ContactRole, 'list', path='', detail=False) class ContactRoleListView(generic.ObjectListView): queryset = ContactRole.objects.all() filterset = filtersets.ContactRoleFilterSet @@ -254,6 +270,7 @@ class ContactRoleView(GetRelatedModelsMixin, generic.ObjectView): } +@register_model_view(ContactRole, 'add', detail=False) @register_model_view(ContactRole, 'edit') class ContactRoleEditView(generic.ObjectEditView): queryset = ContactRole.objects.all() @@ -265,11 +282,13 @@ class ContactRoleDeleteView(generic.ObjectDeleteView): queryset = ContactRole.objects.all() +@register_model_view(ContactRole, 'bulk_import', detail=False) class ContactRoleBulkImportView(generic.BulkImportView): queryset = ContactRole.objects.all() model_form = forms.ContactRoleImportForm +@register_model_view(ContactRole, 'bulk_edit', path='edit', detail=False) class ContactRoleBulkEditView(generic.BulkEditView): queryset = ContactRole.objects.all() filterset = filtersets.ContactRoleFilterSet @@ -277,6 +296,7 @@ class ContactRoleBulkEditView(generic.BulkEditView): form = forms.ContactRoleBulkEditForm +@register_model_view(ContactRole, 'bulk_delete', path='delete', detail=False) class ContactRoleBulkDeleteView(generic.BulkDeleteView): queryset = ContactRole.objects.all() filterset = filtersets.ContactRoleFilterSet @@ -287,6 +307,7 @@ class ContactRoleBulkDeleteView(generic.BulkDeleteView): # Contacts # +@register_model_view(Contact, 'list', path='', detail=False) class ContactListView(generic.ObjectListView): queryset = Contact.objects.annotate( assignment_count=count_related(ContactAssignment, 'contact') @@ -301,6 +322,7 @@ class ContactView(generic.ObjectView): queryset = Contact.objects.all() +@register_model_view(Contact, 'add', detail=False) @register_model_view(Contact, 'edit') class ContactEditView(generic.ObjectEditView): queryset = Contact.objects.all() @@ -312,11 +334,13 @@ class ContactDeleteView(generic.ObjectDeleteView): queryset = Contact.objects.all() +@register_model_view(Contact, 'bulk_import', detail=False) class ContactBulkImportView(generic.BulkImportView): queryset = Contact.objects.all() model_form = forms.ContactImportForm +@register_model_view(Contact, 'bulk_edit', path='edit', detail=False) class ContactBulkEditView(generic.BulkEditView): queryset = Contact.objects.annotate( assignment_count=count_related(ContactAssignment, 'contact') @@ -326,6 +350,7 @@ class ContactBulkEditView(generic.BulkEditView): form = forms.ContactBulkEditForm +@register_model_view(Contact, 'bulk_delete', path='delete', detail=False) class ContactBulkDeleteView(generic.BulkDeleteView): queryset = Contact.objects.annotate( assignment_count=count_related(ContactAssignment, 'contact') @@ -333,24 +358,26 @@ class ContactBulkDeleteView(generic.BulkDeleteView): filterset = filtersets.ContactFilterSet table = tables.ContactTable + # # Contact assignments # - +@register_model_view(ContactAssignment, 'list', path='', detail=False) class ContactAssignmentListView(generic.ObjectListView): queryset = ContactAssignment.objects.all() filterset = filtersets.ContactAssignmentFilterSet filterset_form = forms.ContactAssignmentFilterForm table = tables.ContactAssignmentTable actions = { - 'import': {'add'}, 'export': {'view'}, + 'bulk_import': {'add'}, 'bulk_edit': {'change'}, 'bulk_delete': {'delete'}, } +@register_model_view(ContactAssignment, 'add', detail=False) @register_model_view(ContactAssignment, 'edit') class ContactAssignmentEditView(generic.ObjectEditView): queryset = ContactAssignment.objects.all() @@ -370,6 +397,13 @@ class ContactAssignmentEditView(generic.ObjectEditView): } +@register_model_view(ContactAssignment, 'bulk_import', detail=False) +class ContactAssignmentBulkImportView(generic.BulkImportView): + queryset = ContactAssignment.objects.all() + model_form = forms.ContactAssignmentImportForm + + +@register_model_view(ContactAssignment, 'bulk_edit', path='edit', detail=False) class ContactAssignmentBulkEditView(generic.BulkEditView): queryset = ContactAssignment.objects.all() filterset = filtersets.ContactAssignmentFilterSet @@ -377,11 +411,7 @@ class ContactAssignmentBulkEditView(generic.BulkEditView): form = forms.ContactAssignmentBulkEditForm -class ContactAssignmentBulkImportView(generic.BulkImportView): - queryset = ContactAssignment.objects.all() - model_form = forms.ContactAssignmentImportForm - - +@register_model_view(ContactAssignment, 'bulk_delete', path='delete', detail=False) class ContactAssignmentBulkDeleteView(generic.BulkDeleteView): queryset = ContactAssignment.objects.all() filterset = filtersets.ContactAssignmentFilterSet diff --git a/netbox/translations/cs/LC_MESSAGES/django.mo b/netbox/translations/cs/LC_MESSAGES/django.mo index df95c667c..964d8f54c 100644 Binary files a/netbox/translations/cs/LC_MESSAGES/django.mo and b/netbox/translations/cs/LC_MESSAGES/django.mo differ diff --git a/netbox/translations/cs/LC_MESSAGES/django.po b/netbox/translations/cs/LC_MESSAGES/django.po index 2f557dcc9..2a5e42b12 100644 --- a/netbox/translations/cs/LC_MESSAGES/django.po +++ b/netbox/translations/cs/LC_MESSAGES/django.po @@ -7,15 +7,16 @@ # czarnian, 2024 # Jeremy Stretch, 2024 # Pavel Valach, 2024 +# Matěj Gordon, 2025 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-10-28 19:20+0000\n" +"POT-Creation-Date: 2025-01-04 05:02+0000\n" "PO-Revision-Date: 2023-10-30 17:48+0000\n" -"Last-Translator: Pavel Valach, 2024\n" +"Last-Translator: Matěj Gordon, 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" @@ -23,3088 +24,3417 @@ msgstr "" "Language: cs\n" "Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" -#: account/tables.py:27 templates/account/token.html:22 -#: templates/users/token.html:17 users/forms/bulk_import.py:39 -#: users/forms/model_forms.py:112 +#: netbox/account/tables.py:27 netbox/templates/account/token.html:22 +#: netbox/templates/users/token.html:17 netbox/users/forms/bulk_import.py:39 +#: netbox/users/forms/model_forms.py:112 msgid "Key" msgstr "Klíč" -#: account/tables.py:31 users/forms/filtersets.py:132 +#: netbox/account/tables.py:31 netbox/users/forms/filtersets.py:132 msgid "Write Enabled" msgstr "Zapisování povoleno" -#: account/tables.py:35 core/choices.py:86 core/tables/jobs.py:29 -#: core/tables/tasks.py:79 extras/tables/tables.py:335 -#: extras/tables/tables.py:566 templates/account/token.html:43 -#: templates/core/configrevision.html:26 -#: templates/core/configrevision_restore.html:12 templates/core/job.html:69 -#: templates/core/rq_task.html:16 templates/core/rq_task.html:73 -#: templates/core/rq_worker.html:14 -#: templates/extras/htmx/script_result.html:12 -#: templates/extras/journalentry.html:22 templates/generic/object.html:58 -#: templates/users/token.html:35 +#: netbox/account/tables.py:35 netbox/core/choices.py:86 +#: 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 +#: netbox/templates/core/configrevision.html:26 +#: netbox/templates/core/configrevision_restore.html:12 +#: netbox/templates/core/job.html:69 netbox/templates/core/rq_task.html:16 +#: netbox/templates/core/rq_task.html:73 +#: netbox/templates/core/rq_worker.html:14 +#: netbox/templates/extras/htmx/script_result.html:12 +#: netbox/templates/extras/journalentry.html:22 +#: netbox/templates/generic/object.html:58 +#: netbox/templates/users/token.html:35 msgid "Created" msgstr "Vytvořeno" -#: account/tables.py:39 templates/account/token.html:47 -#: templates/users/token.html:39 users/forms/bulk_edit.py:117 -#: users/forms/filtersets.py:136 +#: netbox/account/tables.py:39 netbox/templates/account/token.html:47 +#: netbox/templates/users/token.html:39 netbox/users/forms/bulk_edit.py:117 +#: netbox/users/forms/filtersets.py:136 msgid "Expires" msgstr "Platnost vyprší" -#: account/tables.py:42 users/forms/filtersets.py:141 +#: netbox/account/tables.py:42 netbox/users/forms/filtersets.py:141 msgid "Last Used" msgstr "Naposledy použitý" -#: account/tables.py:45 templates/account/token.html:55 -#: templates/users/token.html:47 users/forms/bulk_edit.py:122 -#: users/forms/model_forms.py:124 +#: netbox/account/tables.py:45 netbox/templates/account/token.html:55 +#: netbox/templates/users/token.html:47 netbox/users/forms/bulk_edit.py:122 +#: netbox/users/forms/model_forms.py:124 msgid "Allowed IPs" msgstr "Povolené IP adresy" -#: account/views.py:114 +#: netbox/account/views.py:114 #, python-brace-format msgid "Logged in as {user}." msgstr "Přihlášen jako {user}." -#: account/views.py:164 +#: netbox/account/views.py:164 msgid "You have logged out." msgstr "Odhlásili jste se." -#: account/views.py:216 +#: netbox/account/views.py:216 msgid "Your preferences have been updated." msgstr "Vaše preference byly aktualizovány." -#: account/views.py:239 +#: netbox/account/views.py:239 msgid "LDAP-authenticated user credentials cannot be changed within NetBox." msgstr "Uživatelské pověření ověřené LDAP nelze v NetBoxu změnit." -#: account/views.py:254 +#: netbox/account/views.py:254 msgid "Your password has been changed successfully." msgstr "Vaše heslo bylo úspěšně změněno." -#: circuits/choices.py:21 dcim/choices.py:20 dcim/choices.py:102 -#: dcim/choices.py:185 dcim/choices.py:237 dcim/choices.py:1530 -#: dcim/choices.py:1606 dcim/choices.py:1656 virtualization/choices.py:20 -#: virtualization/choices.py:45 vpn/choices.py:18 +#: netbox/circuits/choices.py:21 netbox/dcim/choices.py:20 +#: netbox/dcim/choices.py:102 netbox/dcim/choices.py: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 msgid "Planned" msgstr "Plánované" -#: circuits/choices.py:22 netbox/navigation/menu.py:305 +#: netbox/circuits/choices.py:22 netbox/netbox/navigation/menu.py:305 msgid "Provisioning" msgstr "Zajišťování" -#: circuits/choices.py:23 core/tables/tasks.py:22 dcim/choices.py:22 -#: dcim/choices.py:103 dcim/choices.py:184 dcim/choices.py:236 -#: dcim/choices.py:1605 dcim/choices.py:1655 extras/tables/tables.py:495 -#: ipam/choices.py:31 ipam/choices.py:49 ipam/choices.py:69 -#: ipam/choices.py:154 templates/extras/configcontext.html:25 -#: templates/users/user.html:37 users/forms/bulk_edit.py:38 -#: virtualization/choices.py:22 virtualization/choices.py:44 vpn/choices.py:19 -#: wireless/choices.py:25 +#: netbox/circuits/choices.py:23 netbox/core/tables/tasks.py:22 +#: netbox/dcim/choices.py:22 netbox/dcim/choices.py:103 +#: netbox/dcim/choices.py: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/templates/users/user.html:37 netbox/users/forms/bulk_edit.py:38 +#: netbox/virtualization/choices.py:22 netbox/virtualization/choices.py:44 +#: netbox/vpn/choices.py:19 netbox/wireless/choices.py:25 msgid "Active" msgstr "Aktivní" -#: circuits/choices.py:24 dcim/choices.py:183 dcim/choices.py:235 -#: dcim/choices.py:1604 dcim/choices.py:1657 virtualization/choices.py:24 -#: virtualization/choices.py:43 +#: 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 msgid "Offline" msgstr "Vypnuto" -#: circuits/choices.py:25 +#: netbox/circuits/choices.py:25 msgid "Deprovisioning" msgstr "Zrušení přidělování" -#: circuits/choices.py:26 +#: netbox/circuits/choices.py:26 msgid "Decommissioned" msgstr "Vyřazeno z provozu" -#: circuits/choices.py:90 dcim/choices.py:1617 tenancy/choices.py:17 +#: netbox/circuits/choices.py:90 netbox/dcim/choices.py:1619 +#: netbox/tenancy/choices.py:17 msgid "Primary" msgstr "Primární" -#: circuits/choices.py:91 ipam/choices.py:90 tenancy/choices.py:18 +#: netbox/circuits/choices.py:91 netbox/ipam/choices.py:90 +#: netbox/tenancy/choices.py:18 msgid "Secondary" msgstr "Sekundární" -#: circuits/choices.py:92 tenancy/choices.py:19 +#: netbox/circuits/choices.py:92 netbox/tenancy/choices.py:19 msgid "Tertiary" msgstr "Terciární" -#: circuits/choices.py:93 tenancy/choices.py:20 +#: netbox/circuits/choices.py:93 netbox/tenancy/choices.py:20 msgid "Inactive" msgstr "Neaktivní" -#: circuits/filtersets.py:31 circuits/filtersets.py:198 dcim/filtersets.py:98 -#: dcim/filtersets.py:152 dcim/filtersets.py:212 dcim/filtersets.py:333 -#: dcim/filtersets.py:464 dcim/filtersets.py:1021 dcim/filtersets.py:1368 -#: dcim/filtersets.py:1903 dcim/filtersets.py:2146 dcim/filtersets.py:2204 -#: ipam/filtersets.py:339 ipam/filtersets.py:959 -#: virtualization/filtersets.py:45 virtualization/filtersets.py:173 -#: vpn/filtersets.py:358 +#: 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 msgid "Region (ID)" msgstr "Region (ID)" -#: circuits/filtersets.py:38 circuits/filtersets.py:205 dcim/filtersets.py:105 -#: dcim/filtersets.py:158 dcim/filtersets.py:219 dcim/filtersets.py:340 -#: dcim/filtersets.py:471 dcim/filtersets.py:1028 dcim/filtersets.py:1375 -#: dcim/filtersets.py:1910 dcim/filtersets.py:2153 dcim/filtersets.py:2211 -#: extras/filtersets.py:509 ipam/filtersets.py:346 ipam/filtersets.py:966 -#: virtualization/filtersets.py:52 virtualization/filtersets.py:180 -#: vpn/filtersets.py:353 +#: 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 msgid "Region (slug)" msgstr "Region (zkratka)" -#: circuits/filtersets.py:44 circuits/filtersets.py:211 dcim/filtersets.py:128 -#: dcim/filtersets.py:225 dcim/filtersets.py:346 dcim/filtersets.py:477 -#: dcim/filtersets.py:1034 dcim/filtersets.py:1381 dcim/filtersets.py:1916 -#: dcim/filtersets.py:2159 dcim/filtersets.py:2217 ipam/filtersets.py:352 -#: ipam/filtersets.py:972 virtualization/filtersets.py:58 -#: virtualization/filtersets.py:186 +#: 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 msgid "Site group (ID)" msgstr "Skupina stránek (ID)" -#: circuits/filtersets.py:51 circuits/filtersets.py:218 dcim/filtersets.py:135 -#: dcim/filtersets.py:232 dcim/filtersets.py:353 dcim/filtersets.py:484 -#: dcim/filtersets.py:1041 dcim/filtersets.py:1388 dcim/filtersets.py:1923 -#: dcim/filtersets.py:2166 dcim/filtersets.py:2224 extras/filtersets.py:515 -#: ipam/filtersets.py:359 ipam/filtersets.py:979 -#: virtualization/filtersets.py:65 virtualization/filtersets.py:193 +#: 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 msgid "Site group (slug)" msgstr "Skupina stránek (slug)" -#: circuits/filtersets.py:56 circuits/forms/bulk_edit.py:188 -#: circuits/forms/bulk_edit.py:216 circuits/forms/bulk_import.py:124 -#: circuits/forms/filtersets.py:51 circuits/forms/filtersets.py:171 -#: circuits/forms/filtersets.py:209 circuits/forms/model_forms.py:138 -#: circuits/forms/model_forms.py:154 circuits/tables/circuits.py:113 -#: dcim/forms/bulk_edit.py:168 dcim/forms/bulk_edit.py:329 -#: dcim/forms/bulk_edit.py:677 dcim/forms/bulk_edit.py:873 -#: dcim/forms/bulk_import.py:131 dcim/forms/bulk_import.py:230 -#: dcim/forms/bulk_import.py:309 dcim/forms/bulk_import.py:540 -#: dcim/forms/bulk_import.py:1311 dcim/forms/bulk_import.py:1339 -#: dcim/forms/filtersets.py:87 dcim/forms/filtersets.py:225 -#: dcim/forms/filtersets.py:342 dcim/forms/filtersets.py:439 -#: dcim/forms/filtersets.py:753 dcim/forms/filtersets.py:997 -#: dcim/forms/filtersets.py:1021 dcim/forms/filtersets.py:1111 -#: dcim/forms/filtersets.py:1149 dcim/forms/filtersets.py:1584 -#: dcim/forms/filtersets.py:1608 dcim/forms/filtersets.py:1632 -#: dcim/forms/model_forms.py:137 dcim/forms/model_forms.py:165 -#: dcim/forms/model_forms.py:238 dcim/forms/model_forms.py:463 -#: dcim/forms/model_forms.py:723 dcim/forms/object_create.py:391 -#: dcim/tables/devices.py:153 dcim/tables/power.py:26 dcim/tables/power.py:93 -#: dcim/tables/racks.py:122 dcim/tables/racks.py:207 dcim/tables/sites.py:134 -#: extras/filtersets.py:525 ipam/forms/bulk_edit.py:218 -#: ipam/forms/bulk_edit.py:285 ipam/forms/bulk_edit.py:484 -#: ipam/forms/bulk_import.py:171 ipam/forms/bulk_import.py:429 -#: ipam/forms/filtersets.py:153 ipam/forms/filtersets.py:231 -#: ipam/forms/filtersets.py:432 ipam/forms/filtersets.py:489 -#: ipam/forms/model_forms.py:205 ipam/forms/model_forms.py:636 -#: ipam/tables/ip.py:245 ipam/tables/vlans.py:118 ipam/tables/vlans.py:221 -#: templates/circuits/inc/circuit_termination_fields.html:6 -#: templates/dcim/device.html:22 templates/dcim/inc/cable_termination.html:8 -#: templates/dcim/inc/cable_termination.html:33 -#: templates/dcim/location.html:37 templates/dcim/powerpanel.html:22 -#: templates/dcim/rack.html:20 templates/dcim/rackreservation.html:28 -#: templates/dcim/site.html:28 templates/ipam/prefix.html:56 -#: templates/ipam/vlan.html:23 templates/ipam/vlan_edit.html:40 -#: templates/virtualization/cluster.html:42 -#: templates/virtualization/virtualmachine.html:95 -#: virtualization/forms/bulk_edit.py:91 virtualization/forms/bulk_edit.py:109 -#: virtualization/forms/bulk_edit.py:124 -#: virtualization/forms/bulk_import.py:59 -#: virtualization/forms/bulk_import.py:85 -#: virtualization/forms/filtersets.py:79 -#: virtualization/forms/filtersets.py:148 -#: virtualization/forms/model_forms.py:71 -#: virtualization/forms/model_forms.py:104 -#: virtualization/forms/model_forms.py:171 -#: virtualization/tables/clusters.py:77 -#: virtualization/tables/virtualmachines.py:63 vpn/forms/filtersets.py:266 -#: wireless/forms/model_forms.py:76 wireless/forms/model_forms.py:118 +#: 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/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/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/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 msgid "Site" msgstr "Stránky" -#: circuits/filtersets.py:62 circuits/filtersets.py:229 -#: circuits/filtersets.py:274 dcim/filtersets.py:242 dcim/filtersets.py:363 -#: dcim/filtersets.py:458 extras/filtersets.py:531 ipam/filtersets.py:238 -#: ipam/filtersets.py:369 ipam/filtersets.py:989 -#: virtualization/filtersets.py:75 virtualization/filtersets.py:203 -#: vpn/filtersets.py:363 +#: 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 msgid "Site (slug)" msgstr "Místo (slug)" -#: circuits/filtersets.py:67 +#: netbox/circuits/filtersets.py:67 msgid "ASN (ID)" msgstr "ASN (ID)" -#: circuits/filtersets.py:73 circuits/forms/filtersets.py:31 -#: ipam/forms/model_forms.py:159 ipam/models/asns.py:108 -#: ipam/models/asns.py:125 ipam/tables/asn.py:41 templates/ipam/asn.html:20 +#: 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/templates/ipam/asn.html:20 msgid "ASN" msgstr "ASN" -#: circuits/filtersets.py:95 circuits/filtersets.py:122 -#: circuits/filtersets.py:156 circuits/filtersets.py:283 -#: circuits/filtersets.py:325 ipam/filtersets.py:243 +#: 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 msgid "Provider (ID)" msgstr "Poskytovatel (ID)" -#: circuits/filtersets.py:101 circuits/filtersets.py:128 -#: circuits/filtersets.py:162 circuits/filtersets.py:289 -#: circuits/filtersets.py:331 ipam/filtersets.py:249 +#: 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 msgid "Provider (slug)" msgstr "Poskytovatel (slug)" -#: circuits/filtersets.py:167 +#: netbox/circuits/filtersets.py:167 msgid "Provider account (ID)" msgstr "Účet poskytovatele (ID)" -#: circuits/filtersets.py:173 +#: netbox/circuits/filtersets.py:173 msgid "Provider account (account)" msgstr "Účet poskytovatele (účet)" -#: circuits/filtersets.py:178 +#: netbox/circuits/filtersets.py:178 msgid "Provider network (ID)" msgstr "Síť poskytovatele (ID)" -#: circuits/filtersets.py:182 +#: netbox/circuits/filtersets.py:182 msgid "Circuit type (ID)" msgstr "Typ okruhu (ID)" -#: circuits/filtersets.py:188 +#: netbox/circuits/filtersets.py:188 msgid "Circuit type (slug)" msgstr "Typ okruhu (URL zkratka)" -#: circuits/filtersets.py:223 circuits/filtersets.py:268 -#: dcim/filtersets.py:236 dcim/filtersets.py:357 dcim/filtersets.py:452 -#: dcim/filtersets.py:1045 dcim/filtersets.py:1393 dcim/filtersets.py:1928 -#: dcim/filtersets.py:2170 dcim/filtersets.py:2229 ipam/filtersets.py:232 -#: ipam/filtersets.py:363 ipam/filtersets.py:983 -#: virtualization/filtersets.py:69 virtualization/filtersets.py:197 -#: vpn/filtersets.py:368 +#: 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 msgid "Site (ID)" msgstr "Stránky (ID)" -#: circuits/filtersets.py:233 circuits/filtersets.py:237 +#: netbox/circuits/filtersets.py:233 netbox/circuits/filtersets.py:237 msgid "Termination A (ID)" msgstr "Zakončení A (ID)" -#: circuits/filtersets.py:260 circuits/filtersets.py:320 core/filtersets.py:77 -#: core/filtersets.py:136 core/filtersets.py:173 dcim/filtersets.py:751 -#: dcim/filtersets.py:1362 dcim/filtersets.py:2277 extras/filtersets.py:41 -#: extras/filtersets.py:63 extras/filtersets.py:92 extras/filtersets.py:132 -#: extras/filtersets.py:181 extras/filtersets.py:209 extras/filtersets.py:239 -#: extras/filtersets.py:276 extras/filtersets.py:348 extras/filtersets.py:391 -#: extras/filtersets.py:438 extras/filtersets.py:498 extras/filtersets.py:657 -#: extras/filtersets.py:703 ipam/forms/model_forms.py:449 -#: netbox/filtersets.py:282 netbox/forms/__init__.py:22 -#: netbox/forms/base.py:167 templates/htmx/object_selector.html:28 -#: templates/inc/filter_list.html:46 templates/ipam/ipaddress_assign.html:29 -#: templates/search.html:7 templates/search.html:26 tenancy/filtersets.py:99 -#: users/filtersets.py:23 users/filtersets.py:57 users/filtersets.py:102 -#: users/filtersets.py:150 utilities/forms/forms.py:104 -#: utilities/templates/navigation/menu.html:16 +#: 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/templates/htmx/object_selector.html:28 +#: netbox/templates/inc/filter_list.html:46 +#: netbox/templates/ipam/ipaddress_assign.html:29 +#: netbox/templates/search.html:7 netbox/templates/search.html:26 +#: netbox/tenancy/filtersets.py:99 netbox/users/filtersets.py:23 +#: netbox/users/filtersets.py:57 netbox/users/filtersets.py:102 +#: netbox/users/filtersets.py:150 netbox/utilities/forms/forms.py:104 +#: netbox/utilities/templates/navigation/menu.html:16 msgid "Search" msgstr "Vyhledávání" -#: circuits/filtersets.py:264 circuits/forms/bulk_edit.py:172 -#: circuits/forms/bulk_edit.py:246 circuits/forms/bulk_import.py:115 -#: circuits/forms/filtersets.py:198 circuits/forms/filtersets.py:214 -#: circuits/forms/filtersets.py:260 circuits/forms/model_forms.py:111 -#: circuits/forms/model_forms.py:133 circuits/forms/model_forms.py:199 -#: circuits/tables/circuits.py:104 circuits/tables/circuits.py:164 -#: dcim/forms/connections.py:73 templates/circuits/circuit.html:15 -#: templates/circuits/circuitgroupassignment.html:26 -#: templates/circuits/circuittermination.html:19 -#: templates/dcim/inc/cable_termination.html:55 -#: templates/dcim/trace/circuit.html:4 +#: 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/templates/circuits/circuit.html:15 +#: netbox/templates/circuits/circuitgroupassignment.html:26 +#: netbox/templates/circuits/circuittermination.html:19 +#: netbox/templates/dcim/inc/cable_termination.html:55 +#: netbox/templates/dcim/trace/circuit.html:4 msgid "Circuit" msgstr "Okruh" -#: circuits/filtersets.py:278 +#: netbox/circuits/filtersets.py:278 msgid "ProviderNetwork (ID)" msgstr "Síť poskytovatele (ID)" -#: circuits/filtersets.py:335 +#: netbox/circuits/filtersets.py:335 msgid "Circuit (ID)" msgstr "Obvod (ID)" -#: circuits/filtersets.py:341 +#: netbox/circuits/filtersets.py:341 msgid "Circuit (CID)" msgstr "Obvod (CID)" -#: circuits/filtersets.py:345 +#: netbox/circuits/filtersets.py:345 msgid "Circuit group (ID)" msgstr "Skupina obvodů (ID)" -#: circuits/filtersets.py:351 +#: netbox/circuits/filtersets.py:351 msgid "Circuit group (slug)" msgstr "Skupina okruhů (slug)" -#: circuits/forms/bulk_edit.py:30 circuits/forms/filtersets.py:56 -#: circuits/forms/model_forms.py:29 circuits/tables/providers.py:33 -#: dcim/forms/bulk_edit.py:128 dcim/forms/filtersets.py:195 -#: dcim/forms/model_forms.py:123 dcim/tables/sites.py:94 -#: ipam/models/asns.py:126 ipam/tables/asn.py:27 ipam/views.py:213 -#: netbox/navigation/menu.py:172 netbox/navigation/menu.py:175 -#: templates/circuits/provider.html:23 +#: 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/templates/circuits/provider.html:23 msgid "ASNs" msgstr "ASN" -#: circuits/forms/bulk_edit.py:34 circuits/forms/bulk_edit.py:56 -#: circuits/forms/bulk_edit.py:83 circuits/forms/bulk_edit.py:104 -#: circuits/forms/bulk_edit.py:164 circuits/forms/bulk_edit.py:183 -#: circuits/forms/bulk_edit.py:228 core/forms/bulk_edit.py:28 -#: dcim/forms/bulk_create.py:35 dcim/forms/bulk_edit.py:73 -#: dcim/forms/bulk_edit.py:92 dcim/forms/bulk_edit.py:151 -#: dcim/forms/bulk_edit.py:192 dcim/forms/bulk_edit.py:210 -#: dcim/forms/bulk_edit.py:288 dcim/forms/bulk_edit.py:432 -#: dcim/forms/bulk_edit.py:466 dcim/forms/bulk_edit.py:481 -#: dcim/forms/bulk_edit.py:540 dcim/forms/bulk_edit.py:584 -#: dcim/forms/bulk_edit.py:618 dcim/forms/bulk_edit.py:642 -#: dcim/forms/bulk_edit.py:715 dcim/forms/bulk_edit.py:767 -#: dcim/forms/bulk_edit.py:819 dcim/forms/bulk_edit.py:842 -#: dcim/forms/bulk_edit.py:890 dcim/forms/bulk_edit.py:960 -#: dcim/forms/bulk_edit.py:1013 dcim/forms/bulk_edit.py:1048 -#: dcim/forms/bulk_edit.py:1088 dcim/forms/bulk_edit.py:1132 -#: dcim/forms/bulk_edit.py:1177 dcim/forms/bulk_edit.py:1204 -#: dcim/forms/bulk_edit.py:1222 dcim/forms/bulk_edit.py:1240 -#: dcim/forms/bulk_edit.py:1258 dcim/forms/bulk_edit.py:1682 -#: extras/forms/bulk_edit.py:39 extras/forms/bulk_edit.py:149 -#: extras/forms/bulk_edit.py:178 extras/forms/bulk_edit.py:208 -#: extras/forms/bulk_edit.py:256 extras/forms/bulk_edit.py:274 -#: extras/forms/bulk_edit.py:298 extras/forms/bulk_edit.py:312 -#: extras/forms/bulk_edit.py:339 extras/tables/tables.py:79 -#: ipam/forms/bulk_edit.py:53 ipam/forms/bulk_edit.py:73 -#: ipam/forms/bulk_edit.py:93 ipam/forms/bulk_edit.py:117 -#: ipam/forms/bulk_edit.py:146 ipam/forms/bulk_edit.py:175 -#: ipam/forms/bulk_edit.py:194 ipam/forms/bulk_edit.py:276 -#: ipam/forms/bulk_edit.py:321 ipam/forms/bulk_edit.py:369 -#: ipam/forms/bulk_edit.py:412 ipam/forms/bulk_edit.py:428 -#: ipam/forms/bulk_edit.py:516 ipam/forms/bulk_edit.py:547 -#: templates/account/token.html:35 templates/circuits/circuit.html:59 -#: templates/circuits/circuitgroup.html:32 -#: templates/circuits/circuittype.html:26 -#: templates/circuits/inc/circuit_termination_fields.html:88 -#: templates/circuits/provider.html:33 -#: templates/circuits/providernetwork.html:32 -#: templates/core/datasource.html:54 templates/core/plugin.html:80 -#: templates/dcim/cable.html:36 templates/dcim/consoleport.html:44 -#: templates/dcim/consoleserverport.html:44 templates/dcim/device.html:94 -#: templates/dcim/devicebay.html:32 templates/dcim/devicerole.html:30 -#: templates/dcim/devicetype.html:33 templates/dcim/frontport.html:58 -#: templates/dcim/interface.html:69 templates/dcim/inventoryitem.html:60 -#: templates/dcim/inventoryitemrole.html:22 templates/dcim/location.html:33 -#: templates/dcim/manufacturer.html:40 templates/dcim/module.html:73 -#: templates/dcim/modulebay.html:42 templates/dcim/moduletype.html:37 -#: templates/dcim/platform.html:33 templates/dcim/powerfeed.html:40 -#: templates/dcim/poweroutlet.html:40 templates/dcim/powerpanel.html:30 -#: templates/dcim/powerport.html:40 templates/dcim/rack.html:53 -#: templates/dcim/rackreservation.html:62 templates/dcim/rackrole.html:26 -#: templates/dcim/racktype.html:24 templates/dcim/rearport.html:54 -#: templates/dcim/region.html:33 templates/dcim/site.html:60 -#: templates/dcim/sitegroup.html:33 templates/dcim/virtualchassis.html:31 -#: templates/extras/configcontext.html:21 -#: templates/extras/configtemplate.html:17 -#: templates/extras/customfield.html:34 -#: templates/extras/dashboard/widget_add.html:14 -#: templates/extras/eventrule.html:21 templates/extras/exporttemplate.html:19 -#: templates/extras/notificationgroup.html:20 -#: templates/extras/savedfilter.html:17 templates/extras/script_list.html:45 -#: templates/extras/tag.html:20 templates/extras/webhook.html:17 -#: templates/generic/bulk_import.html:120 templates/ipam/aggregate.html:43 -#: templates/ipam/asn.html:42 templates/ipam/asnrange.html:38 -#: templates/ipam/fhrpgroup.html:34 templates/ipam/ipaddress.html:55 -#: templates/ipam/iprange.html:67 templates/ipam/prefix.html:81 -#: templates/ipam/rir.html:26 templates/ipam/role.html:26 -#: templates/ipam/routetarget.html:21 templates/ipam/service.html:50 -#: templates/ipam/servicetemplate.html:27 templates/ipam/vlan.html:62 -#: templates/ipam/vlangroup.html:34 templates/ipam/vrf.html:33 -#: templates/tenancy/contact.html:67 templates/tenancy/contactgroup.html:25 -#: templates/tenancy/contactrole.html:22 templates/tenancy/tenant.html:24 -#: templates/tenancy/tenantgroup.html:33 templates/users/group.html:21 -#: templates/users/objectpermission.html:21 templates/users/token.html:27 -#: templates/virtualization/cluster.html:25 -#: templates/virtualization/clustergroup.html:26 -#: templates/virtualization/clustertype.html:26 -#: templates/virtualization/virtualdisk.html:39 -#: templates/virtualization/virtualmachine.html:31 -#: templates/virtualization/vminterface.html:51 -#: templates/vpn/ikepolicy.html:17 templates/vpn/ikeproposal.html:17 -#: templates/vpn/ipsecpolicy.html:17 templates/vpn/ipsecprofile.html:17 -#: templates/vpn/ipsecprofile.html:40 templates/vpn/ipsecprofile.html:73 -#: templates/vpn/ipsecproposal.html:17 templates/vpn/l2vpn.html:26 -#: templates/vpn/tunnel.html:33 templates/vpn/tunnelgroup.html:30 -#: templates/wireless/wirelesslan.html:26 -#: templates/wireless/wirelesslangroup.html:33 -#: templates/wireless/wirelesslink.html:34 tenancy/forms/bulk_edit.py:32 -#: tenancy/forms/bulk_edit.py:80 tenancy/forms/bulk_edit.py:122 -#: users/forms/bulk_edit.py:64 users/forms/bulk_edit.py:82 -#: users/forms/bulk_edit.py:112 virtualization/forms/bulk_edit.py:32 -#: virtualization/forms/bulk_edit.py:46 virtualization/forms/bulk_edit.py:100 -#: virtualization/forms/bulk_edit.py:177 virtualization/forms/bulk_edit.py:228 -#: virtualization/forms/bulk_edit.py:337 vpn/forms/bulk_edit.py:28 -#: vpn/forms/bulk_edit.py:64 vpn/forms/bulk_edit.py:121 -#: vpn/forms/bulk_edit.py:155 vpn/forms/bulk_edit.py:190 -#: vpn/forms/bulk_edit.py:215 vpn/forms/bulk_edit.py:247 -#: vpn/forms/bulk_edit.py:274 wireless/forms/bulk_edit.py:29 -#: wireless/forms/bulk_edit.py:82 wireless/forms/bulk_edit.py:140 +#: 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/templates/account/token.html:35 +#: netbox/templates/circuits/circuit.html:59 +#: netbox/templates/circuits/circuitgroup.html:32 +#: netbox/templates/circuits/circuittype.html:26 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:88 +#: netbox/templates/circuits/provider.html:33 +#: netbox/templates/circuits/providernetwork.html:32 +#: netbox/templates/core/datasource.html:54 +#: netbox/templates/core/plugin.html:80 netbox/templates/dcim/cable.html:36 +#: netbox/templates/dcim/consoleport.html:44 +#: netbox/templates/dcim/consoleserverport.html:44 +#: netbox/templates/dcim/device.html:94 +#: netbox/templates/dcim/devicebay.html:32 +#: netbox/templates/dcim/devicerole.html:30 +#: netbox/templates/dcim/devicetype.html:33 +#: netbox/templates/dcim/frontport.html:58 +#: netbox/templates/dcim/interface.html:69 +#: netbox/templates/dcim/inventoryitem.html:60 +#: netbox/templates/dcim/inventoryitemrole.html:22 +#: netbox/templates/dcim/location.html:33 +#: netbox/templates/dcim/manufacturer.html:40 +#: netbox/templates/dcim/module.html:73 +#: netbox/templates/dcim/modulebay.html:42 +#: netbox/templates/dcim/moduletype.html:37 +#: netbox/templates/dcim/platform.html:33 +#: netbox/templates/dcim/powerfeed.html:40 +#: netbox/templates/dcim/poweroutlet.html:40 +#: netbox/templates/dcim/powerpanel.html:30 +#: netbox/templates/dcim/powerport.html:40 netbox/templates/dcim/rack.html:53 +#: netbox/templates/dcim/rackreservation.html:62 +#: netbox/templates/dcim/rackrole.html:26 +#: netbox/templates/dcim/racktype.html:24 +#: netbox/templates/dcim/rearport.html:54 netbox/templates/dcim/region.html:33 +#: netbox/templates/dcim/site.html:60 netbox/templates/dcim/sitegroup.html:33 +#: netbox/templates/dcim/virtualchassis.html:31 +#: netbox/templates/extras/configcontext.html:21 +#: netbox/templates/extras/configtemplate.html:17 +#: netbox/templates/extras/customfield.html:34 +#: netbox/templates/extras/dashboard/widget_add.html:14 +#: netbox/templates/extras/eventrule.html:21 +#: netbox/templates/extras/exporttemplate.html:19 +#: netbox/templates/extras/notificationgroup.html:20 +#: netbox/templates/extras/savedfilter.html:17 +#: netbox/templates/extras/script_list.html:46 +#: netbox/templates/extras/tag.html:20 netbox/templates/extras/webhook.html:17 +#: netbox/templates/generic/bulk_import.html:120 +#: netbox/templates/ipam/aggregate.html:43 netbox/templates/ipam/asn.html:42 +#: netbox/templates/ipam/asnrange.html:38 +#: netbox/templates/ipam/fhrpgroup.html:34 +#: netbox/templates/ipam/ipaddress.html:55 +#: netbox/templates/ipam/iprange.html:67 netbox/templates/ipam/prefix.html:81 +#: netbox/templates/ipam/rir.html:26 netbox/templates/ipam/role.html:26 +#: netbox/templates/ipam/routetarget.html:21 +#: netbox/templates/ipam/service.html:50 +#: netbox/templates/ipam/servicetemplate.html:27 +#: netbox/templates/ipam/vlan.html:62 netbox/templates/ipam/vlangroup.html:34 +#: netbox/templates/ipam/vrf.html:33 netbox/templates/tenancy/contact.html:67 +#: netbox/templates/tenancy/contactgroup.html:25 +#: netbox/templates/tenancy/contactrole.html:22 +#: netbox/templates/tenancy/tenant.html:24 +#: netbox/templates/tenancy/tenantgroup.html:33 +#: netbox/templates/users/group.html:21 +#: netbox/templates/users/objectpermission.html:21 +#: netbox/templates/users/token.html:27 +#: netbox/templates/virtualization/cluster.html:25 +#: netbox/templates/virtualization/clustergroup.html:26 +#: netbox/templates/virtualization/clustertype.html:26 +#: netbox/templates/virtualization/virtualdisk.html:39 +#: netbox/templates/virtualization/virtualmachine.html:31 +#: netbox/templates/virtualization/vminterface.html:51 +#: netbox/templates/vpn/ikepolicy.html:17 +#: netbox/templates/vpn/ikeproposal.html:17 +#: netbox/templates/vpn/ipsecpolicy.html:17 +#: netbox/templates/vpn/ipsecprofile.html:17 +#: netbox/templates/vpn/ipsecprofile.html:40 +#: netbox/templates/vpn/ipsecprofile.html:73 +#: netbox/templates/vpn/ipsecproposal.html:17 +#: netbox/templates/vpn/l2vpn.html:26 netbox/templates/vpn/tunnel.html:33 +#: netbox/templates/vpn/tunnelgroup.html:30 +#: netbox/templates/wireless/wirelesslan.html:26 +#: netbox/templates/wireless/wirelesslangroup.html:33 +#: netbox/templates/wireless/wirelesslink.html:34 +#: netbox/tenancy/forms/bulk_edit.py:32 netbox/tenancy/forms/bulk_edit.py:80 +#: netbox/tenancy/forms/bulk_edit.py:122 netbox/users/forms/bulk_edit.py:64 +#: netbox/users/forms/bulk_edit.py:82 netbox/users/forms/bulk_edit.py:112 +#: netbox/virtualization/forms/bulk_edit.py:32 +#: netbox/virtualization/forms/bulk_edit.py:46 +#: netbox/virtualization/forms/bulk_edit.py:100 +#: netbox/virtualization/forms/bulk_edit.py:177 +#: netbox/virtualization/forms/bulk_edit.py:228 +#: netbox/virtualization/forms/bulk_edit.py:337 +#: netbox/vpn/forms/bulk_edit.py:28 netbox/vpn/forms/bulk_edit.py:64 +#: netbox/vpn/forms/bulk_edit.py:121 netbox/vpn/forms/bulk_edit.py:155 +#: netbox/vpn/forms/bulk_edit.py:190 netbox/vpn/forms/bulk_edit.py:215 +#: netbox/vpn/forms/bulk_edit.py:247 netbox/vpn/forms/bulk_edit.py:274 +#: netbox/wireless/forms/bulk_edit.py:29 netbox/wireless/forms/bulk_edit.py:82 +#: netbox/wireless/forms/bulk_edit.py:140 msgid "Description" msgstr "Popis" -#: circuits/forms/bulk_edit.py:51 circuits/forms/bulk_edit.py:73 -#: circuits/forms/bulk_edit.py:123 circuits/forms/bulk_import.py:36 -#: circuits/forms/bulk_import.py:51 circuits/forms/bulk_import.py:74 -#: circuits/forms/filtersets.py:70 circuits/forms/filtersets.py:88 -#: circuits/forms/filtersets.py:116 circuits/forms/filtersets.py:131 -#: circuits/forms/filtersets.py:199 circuits/forms/filtersets.py:232 -#: circuits/forms/filtersets.py:255 circuits/forms/model_forms.py:47 -#: circuits/forms/model_forms.py:61 circuits/forms/model_forms.py:93 -#: circuits/tables/circuits.py:58 circuits/tables/circuits.py:108 -#: circuits/tables/circuits.py:160 circuits/tables/providers.py:72 -#: circuits/tables/providers.py:103 templates/circuits/circuit.html:18 -#: templates/circuits/circuittermination.html:25 -#: templates/circuits/provider.html:20 -#: templates/circuits/provideraccount.html:20 -#: templates/circuits/providernetwork.html:20 -#: templates/dcim/inc/cable_termination.html:51 +#: netbox/circuits/forms/bulk_edit.py: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/templates/circuits/circuit.html:18 +#: netbox/templates/circuits/circuittermination.html:25 +#: netbox/templates/circuits/provider.html:20 +#: netbox/templates/circuits/provideraccount.html:20 +#: netbox/templates/circuits/providernetwork.html:20 +#: netbox/templates/dcim/inc/cable_termination.html:51 msgid "Provider" msgstr "Poskytovatel" -#: circuits/forms/bulk_edit.py:80 circuits/forms/filtersets.py:91 -#: templates/circuits/providernetwork.html:28 +#: netbox/circuits/forms/bulk_edit.py:80 +#: netbox/circuits/forms/filtersets.py:91 +#: netbox/templates/circuits/providernetwork.html:28 msgid "Service ID" msgstr "ID služby" -#: circuits/forms/bulk_edit.py:100 circuits/forms/filtersets.py:107 -#: dcim/forms/bulk_edit.py:206 dcim/forms/bulk_edit.py:604 -#: dcim/forms/bulk_edit.py:804 dcim/forms/bulk_edit.py:1173 -#: dcim/forms/bulk_edit.py:1200 dcim/forms/bulk_edit.py:1678 -#: dcim/forms/filtersets.py:1064 dcim/forms/filtersets.py:1455 -#: dcim/forms/filtersets.py:1479 dcim/tables/devices.py:704 -#: dcim/tables/devices.py:761 dcim/tables/devices.py:1003 -#: dcim/tables/devicetypes.py:249 dcim/tables/devicetypes.py:264 -#: dcim/tables/racks.py:33 extras/forms/bulk_edit.py:270 -#: extras/tables/tables.py:443 templates/circuits/circuittype.html:30 -#: templates/dcim/cable.html:40 templates/dcim/devicerole.html:34 -#: templates/dcim/frontport.html:40 templates/dcim/inventoryitemrole.html:26 -#: templates/dcim/rackrole.html:30 templates/dcim/rearport.html:40 -#: templates/extras/tag.html:26 +#: netbox/circuits/forms/bulk_edit.py: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/templates/circuits/circuittype.html:30 +#: netbox/templates/dcim/cable.html:40 +#: netbox/templates/dcim/devicerole.html:34 +#: netbox/templates/dcim/frontport.html:40 +#: netbox/templates/dcim/inventoryitemrole.html:26 +#: netbox/templates/dcim/rackrole.html:30 +#: netbox/templates/dcim/rearport.html:40 netbox/templates/extras/tag.html:26 msgid "Color" msgstr "Barva" -#: circuits/forms/bulk_edit.py:118 circuits/forms/bulk_import.py:87 -#: circuits/forms/filtersets.py:126 core/forms/bulk_edit.py:18 -#: core/forms/filtersets.py:33 core/tables/change_logging.py:32 -#: core/tables/data.py:20 core/tables/jobs.py:18 dcim/forms/bulk_edit.py:782 -#: dcim/forms/bulk_edit.py:921 dcim/forms/bulk_edit.py:989 -#: dcim/forms/bulk_edit.py:1008 dcim/forms/bulk_edit.py:1031 -#: dcim/forms/bulk_edit.py:1073 dcim/forms/bulk_edit.py:1117 -#: dcim/forms/bulk_edit.py:1168 dcim/forms/bulk_edit.py:1195 -#: dcim/forms/bulk_import.py:188 dcim/forms/bulk_import.py:260 -#: dcim/forms/bulk_import.py:708 dcim/forms/bulk_import.py:734 -#: dcim/forms/bulk_import.py:760 dcim/forms/bulk_import.py:780 -#: dcim/forms/bulk_import.py:863 dcim/forms/bulk_import.py:957 -#: dcim/forms/bulk_import.py:999 dcim/forms/bulk_import.py:1213 -#: dcim/forms/bulk_import.py:1376 dcim/forms/filtersets.py:955 -#: dcim/forms/filtersets.py:1054 dcim/forms/filtersets.py:1175 -#: dcim/forms/filtersets.py:1247 dcim/forms/filtersets.py:1272 -#: dcim/forms/filtersets.py:1296 dcim/forms/filtersets.py:1316 -#: dcim/forms/filtersets.py:1353 dcim/forms/filtersets.py:1450 -#: dcim/forms/filtersets.py:1474 dcim/forms/model_forms.py:703 -#: dcim/forms/model_forms.py:709 dcim/forms/object_import.py:84 -#: dcim/forms/object_import.py:113 dcim/forms/object_import.py:145 -#: dcim/tables/devices.py:178 dcim/tables/devices.py:814 -#: dcim/tables/power.py:77 dcim/tables/racks.py:138 -#: extras/forms/bulk_import.py:42 extras/tables/tables.py:405 -#: extras/tables/tables.py:465 netbox/tables/tables.py:240 -#: templates/circuits/circuit.html:30 templates/core/datasource.html:38 -#: templates/dcim/cable.html:15 templates/dcim/consoleport.html:36 -#: templates/dcim/consoleserverport.html:36 templates/dcim/frontport.html:36 -#: templates/dcim/interface.html:46 templates/dcim/interface.html:169 -#: templates/dcim/interface.html:311 templates/dcim/powerfeed.html:32 -#: templates/dcim/poweroutlet.html:36 templates/dcim/powerport.html:36 -#: templates/dcim/rearport.html:36 templates/extras/eventrule.html:74 -#: templates/virtualization/cluster.html:17 templates/vpn/l2vpn.html:22 -#: templates/wireless/inc/authentication_attrs.html:8 -#: templates/wireless/inc/wirelesslink_interface.html:14 -#: virtualization/forms/bulk_edit.py:60 virtualization/forms/bulk_import.py:41 -#: virtualization/forms/filtersets.py:54 -#: virtualization/forms/model_forms.py:62 virtualization/tables/clusters.py:66 -#: vpn/forms/bulk_edit.py:264 vpn/forms/bulk_import.py:264 -#: vpn/forms/filtersets.py:217 vpn/forms/model_forms.py:84 -#: vpn/forms/model_forms.py:119 vpn/forms/model_forms.py:231 +#: netbox/circuits/forms/bulk_edit.py: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/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/core/datasource.html:38 +#: netbox/templates/dcim/cable.html:15 +#: netbox/templates/dcim/consoleport.html:36 +#: netbox/templates/dcim/consoleserverport.html:36 +#: netbox/templates/dcim/frontport.html:36 +#: netbox/templates/dcim/interface.html:46 +#: netbox/templates/dcim/interface.html:169 +#: netbox/templates/dcim/interface.html:311 +#: netbox/templates/dcim/powerfeed.html:32 +#: netbox/templates/dcim/poweroutlet.html:36 +#: netbox/templates/dcim/powerport.html:36 +#: netbox/templates/dcim/rearport.html:36 +#: netbox/templates/extras/eventrule.html:74 +#: netbox/templates/virtualization/cluster.html:17 +#: netbox/templates/vpn/l2vpn.html:22 +#: netbox/templates/wireless/inc/authentication_attrs.html:8 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:14 +#: netbox/virtualization/forms/bulk_edit.py:60 +#: netbox/virtualization/forms/bulk_import.py:41 +#: netbox/virtualization/forms/filtersets.py:54 +#: netbox/virtualization/forms/model_forms.py:62 +#: netbox/virtualization/tables/clusters.py:66 +#: netbox/vpn/forms/bulk_edit.py:264 netbox/vpn/forms/bulk_import.py:264 +#: netbox/vpn/forms/filtersets.py:217 netbox/vpn/forms/model_forms.py:84 +#: netbox/vpn/forms/model_forms.py:119 netbox/vpn/forms/model_forms.py:231 msgid "Type" msgstr "Typ" -#: circuits/forms/bulk_edit.py:128 circuits/forms/bulk_import.py:80 -#: circuits/forms/filtersets.py:139 circuits/forms/model_forms.py:98 +#: 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 msgid "Provider account" msgstr "Účet poskytovatele" -#: circuits/forms/bulk_edit.py:136 circuits/forms/bulk_import.py:93 -#: circuits/forms/filtersets.py:150 core/forms/filtersets.py:38 -#: core/forms/filtersets.py:79 core/tables/data.py:23 core/tables/jobs.py:26 -#: core/tables/tasks.py:88 dcim/forms/bulk_edit.py:106 -#: dcim/forms/bulk_edit.py:181 dcim/forms/bulk_edit.py:351 -#: dcim/forms/bulk_edit.py:700 dcim/forms/bulk_edit.py:756 -#: dcim/forms/bulk_edit.py:788 dcim/forms/bulk_edit.py:915 -#: dcim/forms/bulk_edit.py:1701 dcim/forms/bulk_import.py:88 -#: dcim/forms/bulk_import.py:147 dcim/forms/bulk_import.py:248 -#: dcim/forms/bulk_import.py:505 dcim/forms/bulk_import.py:659 -#: dcim/forms/bulk_import.py:1207 dcim/forms/bulk_import.py:1371 -#: dcim/forms/bulk_import.py:1435 dcim/forms/filtersets.py:178 -#: dcim/forms/filtersets.py:237 dcim/forms/filtersets.py:359 -#: dcim/forms/filtersets.py:799 dcim/forms/filtersets.py:924 -#: dcim/forms/filtersets.py:958 dcim/forms/filtersets.py:1059 -#: dcim/forms/filtersets.py:1170 dcim/tables/devices.py:140 -#: dcim/tables/devices.py:817 dcim/tables/devices.py:1063 -#: dcim/tables/modules.py:69 dcim/tables/power.py:74 dcim/tables/racks.py:126 -#: dcim/tables/sites.py:82 dcim/tables/sites.py:138 -#: ipam/forms/bulk_edit.py:256 ipam/forms/bulk_edit.py:306 -#: ipam/forms/bulk_edit.py:354 ipam/forms/bulk_edit.py:506 -#: ipam/forms/bulk_import.py:192 ipam/forms/bulk_import.py:257 -#: ipam/forms/bulk_import.py:293 ipam/forms/bulk_import.py:450 -#: ipam/forms/filtersets.py:210 ipam/forms/filtersets.py:281 -#: ipam/forms/filtersets.py:355 ipam/forms/filtersets.py:501 -#: ipam/forms/model_forms.py:468 ipam/tables/ip.py:237 ipam/tables/ip.py:312 -#: ipam/tables/ip.py:363 ipam/tables/ip.py:426 ipam/tables/ip.py:453 -#: ipam/tables/vlans.py:126 ipam/tables/vlans.py:232 -#: templates/circuits/circuit.html:34 templates/core/datasource.html:46 -#: templates/core/job.html:48 templates/core/rq_task.html:81 -#: templates/core/system.html:18 templates/dcim/cable.html:19 -#: templates/dcim/device.html:178 templates/dcim/location.html:45 -#: templates/dcim/module.html:69 templates/dcim/powerfeed.html:36 -#: templates/dcim/rack.html:41 templates/dcim/site.html:43 -#: templates/extras/script_list.html:47 templates/ipam/ipaddress.html:37 -#: templates/ipam/iprange.html:54 templates/ipam/prefix.html:73 -#: templates/ipam/vlan.html:48 templates/virtualization/cluster.html:21 -#: templates/virtualization/virtualmachine.html:19 -#: templates/vpn/tunnel.html:25 templates/wireless/wirelesslan.html:22 -#: templates/wireless/wirelesslink.html:17 users/forms/filtersets.py:32 -#: users/forms/model_forms.py:194 virtualization/forms/bulk_edit.py:70 -#: virtualization/forms/bulk_edit.py:118 -#: virtualization/forms/bulk_import.py:54 -#: virtualization/forms/bulk_import.py:80 -#: virtualization/forms/filtersets.py:62 -#: virtualization/forms/filtersets.py:160 virtualization/tables/clusters.py:74 -#: virtualization/tables/virtualmachines.py:60 vpn/forms/bulk_edit.py:39 -#: vpn/forms/bulk_import.py:37 vpn/forms/filtersets.py:47 -#: vpn/tables/tunnels.py:48 wireless/forms/bulk_edit.py:43 -#: wireless/forms/bulk_edit.py:105 wireless/forms/bulk_import.py:43 -#: wireless/forms/bulk_import.py:84 wireless/forms/filtersets.py:49 -#: wireless/forms/filtersets.py:83 wireless/tables/wirelesslan.py:52 -#: wireless/tables/wirelesslink.py:20 +#: 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/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/templates/circuits/circuit.html:34 +#: 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/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/vlan.html:48 +#: netbox/templates/virtualization/cluster.html:21 +#: netbox/templates/virtualization/virtualmachine.html:19 +#: netbox/templates/vpn/tunnel.html:25 +#: netbox/templates/wireless/wirelesslan.html:22 +#: netbox/templates/wireless/wirelesslink.html:17 +#: netbox/users/forms/filtersets.py: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/tables/clusters.py:74 +#: netbox/virtualization/tables/virtualmachines.py:60 +#: netbox/vpn/forms/bulk_edit.py:39 netbox/vpn/forms/bulk_import.py:37 +#: netbox/vpn/forms/filtersets.py:47 netbox/vpn/tables/tunnels.py:48 +#: netbox/wireless/forms/bulk_edit.py:43 +#: netbox/wireless/forms/bulk_edit.py:105 +#: netbox/wireless/forms/bulk_import.py:43 +#: netbox/wireless/forms/bulk_import.py:84 +#: netbox/wireless/forms/filtersets.py:49 +#: netbox/wireless/forms/filtersets.py:83 +#: netbox/wireless/tables/wirelesslan.py:52 +#: netbox/wireless/tables/wirelesslink.py:20 msgid "Status" msgstr "Stav" -#: circuits/forms/bulk_edit.py:142 circuits/forms/bulk_edit.py:233 -#: circuits/forms/bulk_import.py:98 circuits/forms/bulk_import.py:158 -#: circuits/forms/filtersets.py:119 circuits/forms/filtersets.py:241 -#: dcim/forms/bulk_edit.py:122 dcim/forms/bulk_edit.py:187 -#: dcim/forms/bulk_edit.py:346 dcim/forms/bulk_edit.py:461 -#: dcim/forms/bulk_edit.py:690 dcim/forms/bulk_edit.py:794 -#: dcim/forms/bulk_edit.py:1706 dcim/forms/bulk_import.py:107 -#: dcim/forms/bulk_import.py:152 dcim/forms/bulk_import.py:241 -#: dcim/forms/bulk_import.py:334 dcim/forms/bulk_import.py:479 -#: dcim/forms/bulk_import.py:1219 dcim/forms/bulk_import.py:1428 -#: dcim/forms/filtersets.py:173 dcim/forms/filtersets.py:205 -#: dcim/forms/filtersets.py:323 dcim/forms/filtersets.py:399 -#: dcim/forms/filtersets.py:420 dcim/forms/filtersets.py:722 -#: dcim/forms/filtersets.py:916 dcim/forms/filtersets.py:978 -#: dcim/forms/filtersets.py:1008 dcim/forms/filtersets.py:1130 -#: dcim/tables/power.py:88 extras/filtersets.py:612 -#: extras/forms/filtersets.py:323 extras/forms/filtersets.py:396 -#: ipam/forms/bulk_edit.py:43 ipam/forms/bulk_edit.py:68 -#: ipam/forms/bulk_edit.py:112 ipam/forms/bulk_edit.py:141 -#: ipam/forms/bulk_edit.py:166 ipam/forms/bulk_edit.py:251 -#: ipam/forms/bulk_edit.py:301 ipam/forms/bulk_edit.py:349 -#: ipam/forms/bulk_edit.py:501 ipam/forms/bulk_import.py:38 -#: ipam/forms/bulk_import.py:67 ipam/forms/bulk_import.py:95 -#: ipam/forms/bulk_import.py:115 ipam/forms/bulk_import.py:135 -#: ipam/forms/bulk_import.py:164 ipam/forms/bulk_import.py:250 -#: ipam/forms/bulk_import.py:286 ipam/forms/bulk_import.py:443 -#: ipam/forms/filtersets.py:48 ipam/forms/filtersets.py:68 -#: ipam/forms/filtersets.py:100 ipam/forms/filtersets.py:120 -#: ipam/forms/filtersets.py:143 ipam/forms/filtersets.py:174 -#: ipam/forms/filtersets.py:267 ipam/forms/filtersets.py:310 -#: ipam/forms/filtersets.py:469 ipam/tables/ip.py:456 ipam/tables/vlans.py:229 -#: templates/circuits/circuit.html:38 templates/circuits/circuitgroup.html:36 -#: templates/dcim/cable.html:23 templates/dcim/device.html:79 -#: templates/dcim/location.html:49 templates/dcim/powerfeed.html:44 -#: templates/dcim/rack.html:32 templates/dcim/rackreservation.html:49 -#: templates/dcim/site.html:47 templates/dcim/virtualdevicecontext.html:52 -#: templates/ipam/aggregate.html:30 templates/ipam/asn.html:33 -#: templates/ipam/asnrange.html:29 templates/ipam/ipaddress.html:28 -#: templates/ipam/iprange.html:58 templates/ipam/prefix.html:29 -#: templates/ipam/routetarget.html:17 templates/ipam/vlan.html:39 -#: templates/ipam/vrf.html:20 templates/tenancy/tenant.html:17 -#: templates/virtualization/cluster.html:33 -#: templates/virtualization/virtualmachine.html:39 templates/vpn/l2vpn.html:30 -#: templates/vpn/tunnel.html:49 templates/wireless/wirelesslan.html:34 -#: templates/wireless/wirelesslink.html:25 tenancy/forms/forms.py:25 -#: tenancy/forms/forms.py:48 tenancy/forms/model_forms.py:52 -#: tenancy/tables/columns.py:64 virtualization/forms/bulk_edit.py:76 -#: virtualization/forms/bulk_edit.py:155 -#: virtualization/forms/bulk_import.py:66 -#: virtualization/forms/bulk_import.py:115 -#: virtualization/forms/filtersets.py:47 -#: virtualization/forms/filtersets.py:105 vpn/forms/bulk_edit.py:59 -#: vpn/forms/bulk_edit.py:269 vpn/forms/bulk_import.py:59 -#: vpn/forms/bulk_import.py:258 vpn/forms/filtersets.py:214 -#: wireless/forms/bulk_edit.py:63 wireless/forms/bulk_edit.py:110 -#: wireless/forms/bulk_import.py:55 wireless/forms/bulk_import.py:97 -#: wireless/forms/filtersets.py:35 wireless/forms/filtersets.py:75 +#: netbox/circuits/forms/bulk_edit.py: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/templates/circuits/circuitgroup.html:36 +#: 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 +#: netbox/templates/dcim/rackreservation.html:49 +#: netbox/templates/dcim/site.html:47 +#: netbox/templates/dcim/virtualdevicecontext.html:52 +#: netbox/templates/ipam/aggregate.html:30 netbox/templates/ipam/asn.html:33 +#: netbox/templates/ipam/asnrange.html:29 +#: netbox/templates/ipam/ipaddress.html:28 +#: netbox/templates/ipam/iprange.html:58 netbox/templates/ipam/prefix.html:29 +#: netbox/templates/ipam/routetarget.html:17 +#: netbox/templates/ipam/vlan.html:39 netbox/templates/ipam/vrf.html:20 +#: netbox/templates/tenancy/tenant.html:17 +#: netbox/templates/virtualization/cluster.html:33 +#: netbox/templates/virtualization/virtualmachine.html:39 +#: netbox/templates/vpn/l2vpn.html:30 netbox/templates/vpn/tunnel.html:49 +#: netbox/templates/wireless/wirelesslan.html:34 +#: netbox/templates/wireless/wirelesslink.html:25 +#: netbox/tenancy/forms/forms.py:25 netbox/tenancy/forms/forms.py:48 +#: netbox/tenancy/forms/model_forms.py:52 netbox/tenancy/tables/columns.py:64 +#: netbox/virtualization/forms/bulk_edit.py:76 +#: netbox/virtualization/forms/bulk_edit.py:155 +#: netbox/virtualization/forms/bulk_import.py:66 +#: netbox/virtualization/forms/bulk_import.py:115 +#: netbox/virtualization/forms/filtersets.py:47 +#: netbox/virtualization/forms/filtersets.py:105 +#: netbox/vpn/forms/bulk_edit.py:59 netbox/vpn/forms/bulk_edit.py:269 +#: netbox/vpn/forms/bulk_import.py:59 netbox/vpn/forms/bulk_import.py:258 +#: netbox/vpn/forms/filtersets.py:214 netbox/wireless/forms/bulk_edit.py:63 +#: netbox/wireless/forms/bulk_edit.py:110 +#: netbox/wireless/forms/bulk_import.py:55 +#: netbox/wireless/forms/bulk_import.py:97 +#: netbox/wireless/forms/filtersets.py:35 +#: netbox/wireless/forms/filtersets.py:75 msgid "Tenant" msgstr "Nájemce" -#: circuits/forms/bulk_edit.py:147 circuits/forms/filtersets.py:174 +#: netbox/circuits/forms/bulk_edit.py:147 +#: netbox/circuits/forms/filtersets.py:174 msgid "Install date" msgstr "Datum instalace" -#: circuits/forms/bulk_edit.py:152 circuits/forms/filtersets.py:179 +#: netbox/circuits/forms/bulk_edit.py:152 +#: netbox/circuits/forms/filtersets.py:179 msgid "Termination date" msgstr "Datum ukončení" -#: circuits/forms/bulk_edit.py:158 circuits/forms/filtersets.py:186 +#: netbox/circuits/forms/bulk_edit.py:158 +#: netbox/circuits/forms/filtersets.py:186 msgid "Commit rate (Kbps)" msgstr "Rychlost odevzdání (Kbps)" -#: circuits/forms/bulk_edit.py:173 circuits/forms/model_forms.py:112 +#: netbox/circuits/forms/bulk_edit.py:173 +#: netbox/circuits/forms/model_forms.py:112 msgid "Service Parameters" msgstr "Parametry služby" -#: circuits/forms/bulk_edit.py:174 circuits/forms/model_forms.py:113 -#: circuits/forms/model_forms.py:183 dcim/forms/model_forms.py:139 -#: dcim/forms/model_forms.py:181 dcim/forms/model_forms.py:266 -#: dcim/forms/model_forms.py:323 dcim/forms/model_forms.py:768 -#: dcim/forms/model_forms.py:1692 ipam/forms/model_forms.py:64 -#: ipam/forms/model_forms.py:81 ipam/forms/model_forms.py:115 -#: ipam/forms/model_forms.py:136 ipam/forms/model_forms.py:160 -#: ipam/forms/model_forms.py:232 ipam/forms/model_forms.py:261 -#: ipam/forms/model_forms.py:316 netbox/navigation/menu.py:24 -#: templates/dcim/device_edit.html:85 templates/dcim/htmx/cable_edit.html:72 -#: templates/ipam/ipaddress_bulk_add.html:27 templates/ipam/vlan_edit.html:22 -#: virtualization/forms/model_forms.py:80 -#: virtualization/forms/model_forms.py:222 vpn/forms/bulk_edit.py:78 -#: vpn/forms/filtersets.py:44 vpn/forms/model_forms.py:62 -#: vpn/forms/model_forms.py:147 vpn/forms/model_forms.py:411 -#: wireless/forms/model_forms.py:54 wireless/forms/model_forms.py:170 +#: 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/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/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 msgid "Tenancy" msgstr "Nájem" -#: circuits/forms/bulk_edit.py:193 circuits/forms/bulk_edit.py:217 -#: circuits/forms/model_forms.py:155 circuits/tables/circuits.py:117 -#: templates/circuits/inc/circuit_termination_fields.html:62 -#: templates/circuits/providernetwork.html:17 +#: 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 "Síť poskytovatele" -#: circuits/forms/bulk_edit.py:199 +#: netbox/circuits/forms/bulk_edit.py:199 msgid "Port speed (Kbps)" msgstr "Rychlost portu (Kbps)" -#: circuits/forms/bulk_edit.py:203 +#: netbox/circuits/forms/bulk_edit.py:203 msgid "Upstream speed (Kbps)" msgstr "Odchozí rychlost (Kbps)" -#: circuits/forms/bulk_edit.py:206 dcim/forms/bulk_edit.py:951 -#: dcim/forms/bulk_edit.py:1315 dcim/forms/bulk_edit.py:1332 -#: dcim/forms/bulk_edit.py:1349 dcim/forms/bulk_edit.py:1367 -#: dcim/forms/bulk_edit.py:1455 dcim/forms/bulk_edit.py:1594 -#: dcim/forms/bulk_edit.py:1611 +#: 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 msgid "Mark connected" msgstr "Označit jako zapojené" -#: circuits/forms/bulk_edit.py:219 circuits/forms/model_forms.py:157 -#: templates/circuits/inc/circuit_termination_fields.html:54 -#: templates/dcim/frontport.html:121 templates/dcim/interface.html:193 -#: templates/dcim/rearport.html:111 +#: netbox/circuits/forms/bulk_edit.py:219 +#: netbox/circuits/forms/model_forms.py:157 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:54 +#: netbox/templates/dcim/frontport.html:121 +#: netbox/templates/dcim/interface.html:193 +#: netbox/templates/dcim/rearport.html:111 msgid "Circuit Termination" msgstr "Zakončení okruhu" -#: circuits/forms/bulk_edit.py:221 circuits/forms/model_forms.py:159 +#: netbox/circuits/forms/bulk_edit.py:221 +#: netbox/circuits/forms/model_forms.py:159 msgid "Termination Details" msgstr "Podrobnosti o zakončení" -#: circuits/forms/bulk_edit.py:251 circuits/forms/filtersets.py:268 -#: circuits/tables/circuits.py:168 dcim/forms/model_forms.py:551 -#: templates/circuits/circuitgroupassignment.html:30 -#: templates/dcim/device.html:133 templates/dcim/virtualchassis.html:68 -#: templates/dcim/virtualchassis_edit.html:56 -#: templates/ipam/inc/panels/fhrp_groups.html:26 -#: tenancy/forms/bulk_edit.py:147 tenancy/forms/filtersets.py:110 +#: netbox/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/templates/dcim/device.html:133 +#: netbox/templates/dcim/virtualchassis.html:68 +#: netbox/templates/dcim/virtualchassis_edit.html:56 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:26 +#: netbox/tenancy/forms/bulk_edit.py:147 +#: netbox/tenancy/forms/filtersets.py:110 msgid "Priority" msgstr "Priorita" -#: circuits/forms/bulk_import.py:39 circuits/forms/bulk_import.py:54 -#: circuits/forms/bulk_import.py:77 +#: 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 "Přiřazený poskytovatel" -#: circuits/forms/bulk_import.py:83 +#: netbox/circuits/forms/bulk_import.py:83 msgid "Assigned provider account" msgstr "Přiřazený účet poskytovatele" -#: circuits/forms/bulk_import.py:90 +#: netbox/circuits/forms/bulk_import.py:90 msgid "Type of circuit" msgstr "Typ okruhu" -#: circuits/forms/bulk_import.py:95 dcim/forms/bulk_import.py:90 -#: dcim/forms/bulk_import.py:149 dcim/forms/bulk_import.py:250 -#: dcim/forms/bulk_import.py:507 dcim/forms/bulk_import.py:661 -#: dcim/forms/bulk_import.py:1373 ipam/forms/bulk_import.py:194 -#: ipam/forms/bulk_import.py:259 ipam/forms/bulk_import.py:295 -#: ipam/forms/bulk_import.py:452 virtualization/forms/bulk_import.py:56 -#: virtualization/forms/bulk_import.py:82 vpn/forms/bulk_import.py:39 -#: wireless/forms/bulk_import.py:45 +#: netbox/circuits/forms/bulk_import.py: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 "Provozní stav" -#: circuits/forms/bulk_import.py:102 circuits/forms/bulk_import.py:162 -#: dcim/forms/bulk_import.py:111 dcim/forms/bulk_import.py:156 -#: dcim/forms/bulk_import.py:338 dcim/forms/bulk_import.py:483 -#: dcim/forms/bulk_import.py:1223 dcim/forms/bulk_import.py:1368 -#: dcim/forms/bulk_import.py:1432 ipam/forms/bulk_import.py:42 -#: ipam/forms/bulk_import.py:71 ipam/forms/bulk_import.py:99 -#: ipam/forms/bulk_import.py:119 ipam/forms/bulk_import.py:139 -#: ipam/forms/bulk_import.py:168 ipam/forms/bulk_import.py:254 -#: ipam/forms/bulk_import.py:290 ipam/forms/bulk_import.py:447 -#: virtualization/forms/bulk_import.py:70 -#: virtualization/forms/bulk_import.py:119 vpn/forms/bulk_import.py:63 -#: wireless/forms/bulk_import.py:59 wireless/forms/bulk_import.py:101 +#: netbox/circuits/forms/bulk_import.py: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 "Přidělený nájemce" -#: circuits/forms/bulk_import.py:120 -#: templates/circuits/inc/circuit_termination.html:6 -#: templates/circuits/inc/circuit_termination_fields.html:15 -#: templates/dcim/cable.html:68 templates/dcim/cable.html:72 -#: vpn/forms/bulk_import.py:100 vpn/forms/filtersets.py:77 +#: netbox/circuits/forms/bulk_import.py: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 "Zakončení" -#: circuits/forms/bulk_import.py:130 circuits/forms/filtersets.py:147 -#: circuits/forms/filtersets.py:227 circuits/forms/model_forms.py:144 +#: 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 msgid "Provider network" msgstr "Síť poskytovatele" -#: circuits/forms/filtersets.py:30 circuits/forms/filtersets.py:118 -#: circuits/forms/filtersets.py:200 dcim/forms/bulk_edit.py:338 -#: dcim/forms/bulk_edit.py:441 dcim/forms/bulk_edit.py:682 -#: dcim/forms/bulk_edit.py:729 dcim/forms/bulk_edit.py:882 -#: dcim/forms/bulk_import.py:235 dcim/forms/bulk_import.py:315 -#: dcim/forms/bulk_import.py:546 dcim/forms/bulk_import.py:1317 -#: dcim/forms/bulk_import.py:1351 dcim/forms/filtersets.py:95 -#: dcim/forms/filtersets.py:322 dcim/forms/filtersets.py:356 -#: dcim/forms/filtersets.py:396 dcim/forms/filtersets.py:447 -#: dcim/forms/filtersets.py:719 dcim/forms/filtersets.py:762 -#: dcim/forms/filtersets.py:977 dcim/forms/filtersets.py:1006 -#: dcim/forms/filtersets.py:1026 dcim/forms/filtersets.py:1090 -#: dcim/forms/filtersets.py:1120 dcim/forms/filtersets.py:1129 -#: dcim/forms/filtersets.py:1240 dcim/forms/filtersets.py:1264 -#: dcim/forms/filtersets.py:1289 dcim/forms/filtersets.py:1308 -#: dcim/forms/filtersets.py:1331 dcim/forms/filtersets.py:1442 -#: dcim/forms/filtersets.py:1466 dcim/forms/filtersets.py:1490 -#: dcim/forms/filtersets.py:1508 dcim/forms/filtersets.py:1525 -#: dcim/forms/model_forms.py:180 dcim/forms/model_forms.py:243 -#: dcim/forms/model_forms.py:468 dcim/forms/model_forms.py:728 -#: dcim/tables/devices.py:157 dcim/tables/power.py:30 dcim/tables/racks.py:118 -#: dcim/tables/racks.py:212 extras/filtersets.py:536 -#: extras/forms/filtersets.py:320 ipam/forms/filtersets.py:173 -#: ipam/forms/filtersets.py:414 ipam/forms/filtersets.py:437 -#: ipam/forms/filtersets.py:467 templates/dcim/device.html:26 -#: templates/dcim/device_edit.html:30 -#: templates/dcim/inc/cable_termination.html:12 -#: templates/dcim/location.html:26 templates/dcim/powerpanel.html:26 -#: templates/dcim/rack.html:24 templates/dcim/rackreservation.html:32 -#: virtualization/forms/filtersets.py:46 -#: virtualization/forms/filtersets.py:100 wireless/forms/model_forms.py:87 -#: wireless/forms/model_forms.py:129 +#: netbox/circuits/forms/filtersets.py: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/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 msgid "Location" msgstr "Lokace" -#: circuits/forms/filtersets.py:32 circuits/forms/filtersets.py:120 -#: dcim/forms/filtersets.py:144 dcim/forms/filtersets.py:158 -#: dcim/forms/filtersets.py:174 dcim/forms/filtersets.py:206 -#: dcim/forms/filtersets.py:328 dcim/forms/filtersets.py:400 -#: dcim/forms/filtersets.py:471 dcim/forms/filtersets.py:723 -#: dcim/forms/filtersets.py:1091 netbox/navigation/menu.py:31 -#: netbox/navigation/menu.py:33 tenancy/forms/filtersets.py:42 -#: tenancy/tables/columns.py:70 tenancy/tables/contacts.py:25 -#: tenancy/views.py:19 virtualization/forms/filtersets.py:37 -#: virtualization/forms/filtersets.py:48 -#: virtualization/forms/filtersets.py:106 +#: netbox/circuits/forms/filtersets.py: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/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/tables/contacts.py:25 netbox/tenancy/views.py:19 +#: netbox/virtualization/forms/filtersets.py:37 +#: netbox/virtualization/forms/filtersets.py:48 +#: netbox/virtualization/forms/filtersets.py:106 msgid "Contacts" msgstr "Kontakty" -#: circuits/forms/filtersets.py:37 circuits/forms/filtersets.py:157 -#: dcim/forms/bulk_edit.py:112 dcim/forms/bulk_edit.py:313 -#: dcim/forms/bulk_edit.py:857 dcim/forms/bulk_import.py:93 -#: dcim/forms/filtersets.py:73 dcim/forms/filtersets.py:185 -#: dcim/forms/filtersets.py:211 dcim/forms/filtersets.py:334 -#: dcim/forms/filtersets.py:425 dcim/forms/filtersets.py:739 -#: dcim/forms/filtersets.py:983 dcim/forms/filtersets.py:1013 -#: dcim/forms/filtersets.py:1097 dcim/forms/filtersets.py:1136 -#: dcim/forms/filtersets.py:1576 dcim/forms/filtersets.py:1600 -#: dcim/forms/filtersets.py:1624 dcim/forms/model_forms.py:112 -#: dcim/forms/object_create.py:375 dcim/tables/devices.py:143 -#: dcim/tables/sites.py:85 extras/filtersets.py:503 -#: ipam/forms/bulk_edit.py:208 ipam/forms/bulk_edit.py:474 -#: ipam/forms/filtersets.py:217 ipam/forms/filtersets.py:422 -#: ipam/forms/filtersets.py:475 templates/dcim/device.html:18 -#: templates/dcim/rack.html:16 templates/dcim/rackreservation.html:22 -#: templates/dcim/region.html:26 templates/dcim/site.html:31 -#: templates/ipam/prefix.html:49 templates/ipam/vlan.html:16 -#: virtualization/forms/bulk_edit.py:81 virtualization/forms/filtersets.py:59 -#: virtualization/forms/filtersets.py:133 -#: virtualization/forms/model_forms.py:92 vpn/forms/filtersets.py:257 +#: netbox/circuits/forms/filtersets.py: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/templates/dcim/rackreservation.html:22 +#: netbox/templates/dcim/region.html:26 netbox/templates/dcim/site.html:31 +#: netbox/templates/ipam/prefix.html:49 netbox/templates/ipam/vlan.html:16 +#: netbox/virtualization/forms/bulk_edit.py:81 +#: netbox/virtualization/forms/filtersets.py:59 +#: netbox/virtualization/forms/filtersets.py:133 +#: netbox/virtualization/forms/model_forms.py:92 +#: netbox/vpn/forms/filtersets.py:257 msgid "Region" msgstr "Region" -#: circuits/forms/filtersets.py:42 circuits/forms/filtersets.py:162 -#: dcim/forms/bulk_edit.py:321 dcim/forms/bulk_edit.py:865 -#: dcim/forms/filtersets.py:78 dcim/forms/filtersets.py:190 -#: dcim/forms/filtersets.py:216 dcim/forms/filtersets.py:347 -#: dcim/forms/filtersets.py:430 dcim/forms/filtersets.py:744 -#: dcim/forms/filtersets.py:988 dcim/forms/filtersets.py:1102 -#: dcim/forms/filtersets.py:1141 dcim/forms/object_create.py:383 -#: extras/filtersets.py:520 ipam/forms/bulk_edit.py:213 -#: ipam/forms/bulk_edit.py:479 ipam/forms/filtersets.py:222 -#: ipam/forms/filtersets.py:427 ipam/forms/filtersets.py:480 -#: virtualization/forms/bulk_edit.py:86 virtualization/forms/filtersets.py:69 -#: virtualization/forms/filtersets.py:138 -#: virtualization/forms/model_forms.py:98 +#: netbox/circuits/forms/filtersets.py: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/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 msgid "Site group" msgstr "Skupina stránek" -#: circuits/forms/filtersets.py:65 circuits/forms/filtersets.py:83 -#: circuits/forms/filtersets.py:102 circuits/forms/filtersets.py:117 -#: core/forms/filtersets.py:67 core/forms/filtersets.py:135 -#: dcim/forms/bulk_edit.py:828 dcim/forms/filtersets.py:172 -#: dcim/forms/filtersets.py:204 dcim/forms/filtersets.py:915 -#: dcim/forms/filtersets.py:1007 dcim/forms/filtersets.py:1131 -#: dcim/forms/filtersets.py:1239 dcim/forms/filtersets.py:1263 -#: dcim/forms/filtersets.py:1288 dcim/forms/filtersets.py:1307 -#: dcim/forms/filtersets.py:1327 dcim/forms/filtersets.py:1441 -#: dcim/forms/filtersets.py:1465 dcim/forms/filtersets.py:1489 -#: dcim/forms/filtersets.py:1507 dcim/forms/filtersets.py:1523 -#: extras/forms/bulk_edit.py:90 extras/forms/filtersets.py:44 -#: extras/forms/filtersets.py:134 extras/forms/filtersets.py:165 -#: extras/forms/filtersets.py:205 extras/forms/filtersets.py:221 -#: extras/forms/filtersets.py:252 extras/forms/filtersets.py:276 -#: extras/forms/filtersets.py:441 ipam/forms/filtersets.py:99 -#: ipam/forms/filtersets.py:266 ipam/forms/filtersets.py:307 -#: ipam/forms/filtersets.py:382 ipam/forms/filtersets.py:468 -#: ipam/forms/filtersets.py:527 ipam/forms/filtersets.py:545 -#: netbox/tables/tables.py:256 virtualization/forms/filtersets.py:45 -#: virtualization/forms/filtersets.py:103 -#: virtualization/forms/filtersets.py:198 -#: virtualization/forms/filtersets.py:243 vpn/forms/filtersets.py:213 -#: wireless/forms/bulk_edit.py:150 wireless/forms/filtersets.py:34 -#: wireless/forms/filtersets.py:74 +#: 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 "Atributy" -#: circuits/forms/filtersets.py:73 circuits/tables/circuits.py:63 -#: circuits/tables/providers.py:66 templates/circuits/circuit.html:22 -#: templates/circuits/provideraccount.html:24 +#: netbox/circuits/forms/filtersets.py:73 +#: netbox/circuits/tables/circuits.py:63 +#: netbox/circuits/tables/providers.py:66 +#: netbox/templates/circuits/circuit.html:22 +#: netbox/templates/circuits/provideraccount.html:24 msgid "Account" msgstr "Účet" -#: circuits/forms/filtersets.py:217 +#: netbox/circuits/forms/filtersets.py:217 msgid "Term Side" msgstr "Strana termínu" -#: circuits/forms/filtersets.py:250 extras/forms/model_forms.py:582 -#: ipam/forms/filtersets.py:142 ipam/forms/filtersets.py:546 -#: ipam/forms/model_forms.py:323 templates/extras/configcontext.html:60 -#: templates/ipam/ipaddress.html:59 templates/ipam/vlan_edit.html:30 -#: tenancy/forms/filtersets.py:87 users/forms/model_forms.py:314 +#: 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/templates/extras/configcontext.html:60 +#: netbox/templates/ipam/ipaddress.html:59 +#: netbox/templates/ipam/vlan_edit.html:30 +#: netbox/tenancy/forms/filtersets.py:87 netbox/users/forms/model_forms.py:314 msgid "Assignment" msgstr "Přiřazení" -#: circuits/forms/filtersets.py:265 circuits/forms/model_forms.py:195 -#: circuits/tables/circuits.py:155 dcim/forms/bulk_edit.py:117 -#: dcim/forms/bulk_import.py:100 dcim/forms/model_forms.py:117 -#: dcim/tables/sites.py:89 extras/forms/filtersets.py:480 -#: ipam/filtersets.py:999 ipam/forms/bulk_edit.py:493 -#: ipam/forms/bulk_import.py:436 ipam/forms/model_forms.py:528 -#: ipam/tables/fhrp.py:67 ipam/tables/vlans.py:122 ipam/tables/vlans.py:226 -#: templates/circuits/circuitgroupassignment.html:22 -#: templates/dcim/interface.html:284 templates/dcim/site.html:37 -#: templates/ipam/inc/panels/fhrp_groups.html:23 templates/ipam/vlan.html:27 -#: templates/tenancy/contact.html:21 templates/tenancy/tenant.html:20 -#: templates/users/group.html:6 templates/users/group.html:14 -#: templates/virtualization/cluster.html:29 templates/vpn/tunnel.html:29 -#: templates/wireless/wirelesslan.html:18 tenancy/forms/bulk_edit.py:43 -#: tenancy/forms/bulk_edit.py:94 tenancy/forms/bulk_import.py:40 -#: tenancy/forms/bulk_import.py:81 tenancy/forms/filtersets.py:48 -#: tenancy/forms/filtersets.py:78 tenancy/forms/filtersets.py:97 -#: tenancy/forms/model_forms.py:45 tenancy/forms/model_forms.py:97 -#: tenancy/forms/model_forms.py:122 tenancy/tables/contacts.py:60 -#: tenancy/tables/contacts.py:107 tenancy/tables/tenants.py:42 -#: users/filtersets.py:62 users/filtersets.py:185 users/forms/filtersets.py:31 -#: users/forms/filtersets.py:37 users/forms/filtersets.py:79 -#: virtualization/forms/bulk_edit.py:65 virtualization/forms/bulk_import.py:47 -#: virtualization/forms/filtersets.py:85 -#: virtualization/forms/model_forms.py:66 virtualization/tables/clusters.py:70 -#: vpn/forms/bulk_edit.py:112 vpn/forms/bulk_import.py:158 -#: vpn/forms/filtersets.py:116 vpn/tables/crypto.py:31 -#: vpn/tables/tunnels.py:44 wireless/forms/bulk_edit.py:48 -#: wireless/forms/bulk_import.py:36 wireless/forms/filtersets.py:46 -#: wireless/forms/model_forms.py:40 wireless/tables/wirelesslan.py:48 +#: netbox/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/templates/circuits/circuitgroupassignment.html:22 +#: netbox/templates/dcim/interface.html:284 netbox/templates/dcim/site.html:37 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:23 +#: netbox/templates/ipam/vlan.html:27 netbox/templates/tenancy/contact.html:21 +#: netbox/templates/tenancy/tenant.html:20 netbox/templates/users/group.html:6 +#: netbox/templates/users/group.html:14 +#: netbox/templates/virtualization/cluster.html:29 +#: netbox/templates/vpn/tunnel.html:29 +#: netbox/templates/wireless/wirelesslan.html:18 +#: netbox/tenancy/forms/bulk_edit.py:43 netbox/tenancy/forms/bulk_edit.py:94 +#: netbox/tenancy/forms/bulk_import.py:40 +#: netbox/tenancy/forms/bulk_import.py:81 +#: netbox/tenancy/forms/filtersets.py:48 netbox/tenancy/forms/filtersets.py:78 +#: netbox/tenancy/forms/filtersets.py:97 +#: netbox/tenancy/forms/model_forms.py:45 +#: netbox/tenancy/forms/model_forms.py:97 +#: netbox/tenancy/forms/model_forms.py:122 +#: netbox/tenancy/tables/contacts.py:60 netbox/tenancy/tables/contacts.py:107 +#: netbox/tenancy/tables/tenants.py:42 netbox/users/filtersets.py: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/tables/clusters.py:70 +#: netbox/vpn/forms/bulk_edit.py:112 netbox/vpn/forms/bulk_import.py:158 +#: netbox/vpn/forms/filtersets.py:116 netbox/vpn/tables/crypto.py:31 +#: netbox/vpn/tables/tunnels.py:44 netbox/wireless/forms/bulk_edit.py:48 +#: netbox/wireless/forms/bulk_import.py:36 +#: netbox/wireless/forms/filtersets.py:46 +#: netbox/wireless/forms/model_forms.py:40 +#: netbox/wireless/tables/wirelesslan.py:48 msgid "Group" msgstr "Skupina" -#: circuits/forms/model_forms.py:182 templates/circuits/circuitgroup.html:25 +#: netbox/circuits/forms/model_forms.py:182 +#: netbox/templates/circuits/circuitgroup.html:25 msgid "Circuit Group" msgstr "Skupina okruhů" -#: circuits/models/circuits.py:27 dcim/models/cables.py:67 -#: dcim/models/device_component_templates.py:517 -#: dcim/models/device_component_templates.py:617 -#: dcim/models/device_components.py:975 dcim/models/device_components.py:1049 -#: dcim/models/device_components.py:1204 dcim/models/devices.py:479 -#: dcim/models/racks.py:224 extras/models/tags.py:28 +#: 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/extras/models/tags.py:28 msgid "color" msgstr "barva" -#: circuits/models/circuits.py:36 +#: netbox/circuits/models/circuits.py:36 msgid "circuit type" msgstr "typ obvodu" -#: circuits/models/circuits.py:37 +#: netbox/circuits/models/circuits.py:37 msgid "circuit types" msgstr "typy obvodů" -#: circuits/models/circuits.py:48 +#: netbox/circuits/models/circuits.py:48 msgid "circuit ID" msgstr "ID obvodu" -#: circuits/models/circuits.py:49 +#: netbox/circuits/models/circuits.py:49 msgid "Unique circuit ID" msgstr "Jedinečné ID obvodu" -#: circuits/models/circuits.py:69 core/models/data.py:52 -#: core/models/jobs.py:84 dcim/models/cables.py:49 dcim/models/devices.py:653 -#: dcim/models/devices.py:1173 dcim/models/devices.py:1399 -#: dcim/models/power.py:96 dcim/models/racks.py:297 dcim/models/sites.py:154 -#: dcim/models/sites.py:266 ipam/models/ip.py:253 ipam/models/ip.py:522 -#: ipam/models/ip.py:730 ipam/models/vlans.py:195 -#: virtualization/models/clusters.py:74 -#: virtualization/models/virtualmachines.py:84 vpn/models/tunnels.py:40 -#: wireless/models.py:95 wireless/models.py:159 +#: 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 msgid "status" msgstr "stav" -#: circuits/models/circuits.py:84 templates/core/plugin.html:20 +#: netbox/circuits/models/circuits.py:84 netbox/templates/core/plugin.html:20 msgid "installed" msgstr "nainstalován" -#: circuits/models/circuits.py:89 +#: netbox/circuits/models/circuits.py:89 msgid "terminates" msgstr "ukončí" -#: circuits/models/circuits.py:94 +#: netbox/circuits/models/circuits.py:94 msgid "commit rate (Kbps)" msgstr "rychlost odevzdání (Kbps)" -#: circuits/models/circuits.py:95 +#: netbox/circuits/models/circuits.py:95 msgid "Committed rate" msgstr "Závazná sazba" -#: circuits/models/circuits.py:137 +#: netbox/circuits/models/circuits.py:137 msgid "circuit" msgstr "okruh" -#: circuits/models/circuits.py:138 +#: netbox/circuits/models/circuits.py:138 msgid "circuits" msgstr "okruhy" -#: circuits/models/circuits.py:170 +#: netbox/circuits/models/circuits.py:170 msgid "circuit group" msgstr "skupina obvodů" -#: circuits/models/circuits.py:171 +#: netbox/circuits/models/circuits.py:171 msgid "circuit groups" msgstr "skupiny obvodů" -#: circuits/models/circuits.py:195 ipam/models/fhrp.py:93 -#: tenancy/models/contacts.py:134 +#: netbox/circuits/models/circuits.py:195 netbox/ipam/models/fhrp.py:93 +#: netbox/tenancy/models/contacts.py:134 msgid "priority" msgstr "přednost" -#: circuits/models/circuits.py:213 +#: netbox/circuits/models/circuits.py:213 msgid "Circuit group assignment" msgstr "Přiřazení skupiny obvodů" -#: circuits/models/circuits.py:214 +#: netbox/circuits/models/circuits.py:214 msgid "Circuit group assignments" msgstr "Přiřazení skupin obvodů" -#: circuits/models/circuits.py:240 +#: netbox/circuits/models/circuits.py:240 msgid "termination" msgstr "zakončení" -#: circuits/models/circuits.py:257 +#: netbox/circuits/models/circuits.py:257 msgid "port speed (Kbps)" msgstr "rychlost portu (Kbps)" -#: circuits/models/circuits.py:260 +#: netbox/circuits/models/circuits.py:260 msgid "Physical circuit speed" msgstr "Rychlost fyzického obvodu" -#: circuits/models/circuits.py:265 +#: netbox/circuits/models/circuits.py:265 msgid "upstream speed (Kbps)" msgstr "rychlost proti proudu (Kbps)" -#: circuits/models/circuits.py:266 +#: netbox/circuits/models/circuits.py:266 msgid "Upstream speed, if different from port speed" msgstr "Rychlost proti proudu, pokud se liší od rychlosti portu" -#: circuits/models/circuits.py:271 +#: netbox/circuits/models/circuits.py:271 msgid "cross-connect ID" msgstr "ID křížového připojení" -#: circuits/models/circuits.py:272 +#: netbox/circuits/models/circuits.py:272 msgid "ID of the local cross-connect" msgstr "ID místního křížového připojení" -#: circuits/models/circuits.py:277 +#: netbox/circuits/models/circuits.py:277 msgid "patch panel/port(s)" msgstr "propojovací panel/port(y)" -#: circuits/models/circuits.py:278 +#: netbox/circuits/models/circuits.py:278 msgid "Patch panel ID and port number(s)" msgstr "ID propojovacího panelu a číslo portu/ů" -#: circuits/models/circuits.py:281 -#: dcim/models/device_component_templates.py:61 -#: dcim/models/device_components.py:68 dcim/models/racks.py:685 -#: extras/models/configs.py:45 extras/models/configs.py:219 -#: extras/models/customfields.py:125 extras/models/models.py:61 -#: extras/models/models.py:158 extras/models/models.py:396 -#: extras/models/models.py:511 extras/models/notifications.py:131 -#: extras/models/staging.py:31 extras/models/tags.py:32 -#: netbox/models/__init__.py:110 netbox/models/__init__.py:145 -#: netbox/models/__init__.py:191 users/models/permissions.py:24 -#: users/models/tokens.py:57 users/models/users.py:33 -#: virtualization/models/virtualmachines.py:289 +#: 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/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 msgid "description" msgstr "popis" -#: circuits/models/circuits.py:294 +#: netbox/circuits/models/circuits.py:294 msgid "circuit termination" msgstr "zakončení okruhu" -#: circuits/models/circuits.py:295 +#: netbox/circuits/models/circuits.py:295 msgid "circuit terminations" msgstr "zakončení okruhů" -#: circuits/models/circuits.py:308 +#: netbox/circuits/models/circuits.py:308 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." -#: circuits/models/circuits.py:310 +#: 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." -#: circuits/models/providers.py:22 circuits/models/providers.py:66 -#: circuits/models/providers.py:104 core/models/data.py:39 -#: core/models/jobs.py:45 dcim/models/device_component_templates.py:43 -#: dcim/models/device_components.py:53 dcim/models/devices.py:593 -#: dcim/models/devices.py:1330 dcim/models/devices.py:1395 -#: dcim/models/power.py:39 dcim/models/power.py:92 dcim/models/racks.py:262 -#: dcim/models/sites.py:138 extras/models/configs.py:36 -#: extras/models/configs.py:215 extras/models/customfields.py:92 -#: extras/models/models.py:56 extras/models/models.py:153 -#: extras/models/models.py:296 extras/models/models.py:392 -#: extras/models/models.py:501 extras/models/models.py:596 -#: extras/models/notifications.py:126 extras/models/scripts.py:30 -#: extras/models/staging.py:26 ipam/models/asns.py:18 ipam/models/fhrp.py:25 -#: ipam/models/services.py:52 ipam/models/services.py:88 -#: ipam/models/vlans.py:36 ipam/models/vlans.py:184 ipam/models/vrfs.py:22 -#: ipam/models/vrfs.py:79 netbox/models/__init__.py:137 -#: netbox/models/__init__.py:181 tenancy/models/contacts.py:64 -#: tenancy/models/tenants.py:20 tenancy/models/tenants.py:45 -#: users/models/permissions.py:20 users/models/users.py:28 -#: virtualization/models/clusters.py:57 -#: virtualization/models/virtualmachines.py:72 -#: virtualization/models/virtualmachines.py:279 vpn/models/crypto.py:24 -#: vpn/models/crypto.py:71 vpn/models/crypto.py:131 vpn/models/crypto.py:183 -#: vpn/models/crypto.py:221 vpn/models/l2vpn.py:22 vpn/models/tunnels.py:35 -#: wireless/models.py:51 +#: 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/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/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 msgid "name" msgstr "jméno" -#: circuits/models/providers.py:25 +#: netbox/circuits/models/providers.py:25 msgid "Full name of the provider" msgstr "Celé jméno poskytovatele" -#: circuits/models/providers.py:28 dcim/models/devices.py:86 -#: dcim/models/racks.py:137 dcim/models/sites.py:149 -#: extras/models/models.py:506 ipam/models/asns.py:23 ipam/models/vlans.py:40 -#: netbox/models/__init__.py:141 netbox/models/__init__.py:186 -#: tenancy/models/tenants.py:25 tenancy/models/tenants.py:49 -#: vpn/models/l2vpn.py:27 wireless/models.py:56 +#: netbox/circuits/models/providers.py:28 netbox/dcim/models/devices.py:86 +#: 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 msgid "slug" msgstr "slug" -#: circuits/models/providers.py:42 +#: netbox/circuits/models/providers.py:42 msgid "provider" msgstr "poskytovatel" -#: circuits/models/providers.py:43 +#: netbox/circuits/models/providers.py:43 msgid "providers" msgstr "poskytovatelů" -#: circuits/models/providers.py:63 +#: netbox/circuits/models/providers.py:63 msgid "account ID" msgstr "ID účtu" -#: circuits/models/providers.py:86 +#: netbox/circuits/models/providers.py:86 msgid "provider account" msgstr "účet poskytovatele" -#: circuits/models/providers.py:87 +#: netbox/circuits/models/providers.py:87 msgid "provider accounts" msgstr "účty poskytovatele" -#: circuits/models/providers.py:115 +#: netbox/circuits/models/providers.py:115 msgid "service ID" msgstr "ID služby" -#: circuits/models/providers.py:126 +#: netbox/circuits/models/providers.py:126 msgid "provider network" msgstr "síť poskytovatelů" -#: circuits/models/providers.py:127 +#: netbox/circuits/models/providers.py:127 msgid "provider networks" msgstr "sítě poskytovatelů" -#: circuits/tables/circuits.py:32 circuits/tables/circuits.py:132 -#: circuits/tables/providers.py:18 circuits/tables/providers.py:69 -#: circuits/tables/providers.py:99 core/tables/data.py:16 -#: core/tables/jobs.py:14 core/tables/plugins.py:44 core/tables/tasks.py:11 -#: core/tables/tasks.py:115 dcim/forms/filtersets.py:63 -#: dcim/forms/object_create.py:43 dcim/tables/devices.py:52 -#: dcim/tables/devices.py:92 dcim/tables/devices.py:134 -#: dcim/tables/devices.py:289 dcim/tables/devices.py:392 -#: dcim/tables/devices.py:433 dcim/tables/devices.py:482 -#: dcim/tables/devices.py:531 dcim/tables/devices.py:648 -#: dcim/tables/devices.py:731 dcim/tables/devices.py:778 -#: dcim/tables/devices.py:841 dcim/tables/devices.py:911 -#: dcim/tables/devices.py:974 dcim/tables/devices.py:994 -#: dcim/tables/devices.py:1023 dcim/tables/devices.py:1053 -#: dcim/tables/devicetypes.py:31 dcim/tables/power.py:22 -#: dcim/tables/power.py:62 dcim/tables/racks.py:24 dcim/tables/racks.py:113 -#: dcim/tables/sites.py:24 dcim/tables/sites.py:51 dcim/tables/sites.py:78 -#: dcim/tables/sites.py:130 extras/forms/filtersets.py:213 -#: extras/tables/tables.py:58 extras/tables/tables.py:122 -#: extras/tables/tables.py:155 extras/tables/tables.py:180 -#: extras/tables/tables.py:246 extras/tables/tables.py:361 -#: extras/tables/tables.py:378 extras/tables/tables.py:401 -#: extras/tables/tables.py:439 extras/tables/tables.py:491 -#: extras/tables/tables.py:514 ipam/forms/bulk_edit.py:407 -#: ipam/forms/filtersets.py:386 ipam/tables/asn.py:16 ipam/tables/ip.py:85 -#: ipam/tables/ip.py:160 ipam/tables/services.py:15 ipam/tables/services.py:40 -#: ipam/tables/vlans.py:64 ipam/tables/vlans.py:114 ipam/tables/vrfs.py:26 -#: ipam/tables/vrfs.py:68 templates/circuits/circuitgroup.html:28 -#: templates/circuits/circuittype.html:22 -#: templates/circuits/provideraccount.html:28 -#: templates/circuits/providernetwork.html:24 -#: templates/core/datasource.html:34 templates/core/job.html:44 -#: templates/core/plugin.html:54 templates/core/rq_worker.html:43 -#: templates/dcim/consoleport.html:28 templates/dcim/consoleserverport.html:28 -#: templates/dcim/devicebay.html:24 templates/dcim/devicerole.html:26 -#: templates/dcim/frontport.html:28 -#: templates/dcim/inc/interface_vlans_table.html:5 -#: templates/dcim/inc/panels/inventory_items.html:18 -#: templates/dcim/interface.html:38 templates/dcim/interface.html:165 -#: templates/dcim/inventoryitem.html:28 -#: templates/dcim/inventoryitemrole.html:18 templates/dcim/location.html:29 -#: templates/dcim/manufacturer.html:36 templates/dcim/modulebay.html:30 -#: templates/dcim/platform.html:29 templates/dcim/poweroutlet.html:28 -#: templates/dcim/powerport.html:28 templates/dcim/rackrole.html:22 -#: templates/dcim/rearport.html:28 templates/dcim/region.html:29 -#: templates/dcim/sitegroup.html:29 -#: templates/dcim/virtualdevicecontext.html:18 -#: templates/extras/configcontext.html:13 -#: templates/extras/configtemplate.html:13 -#: templates/extras/customfield.html:13 templates/extras/customlink.html:13 -#: templates/extras/eventrule.html:13 templates/extras/exporttemplate.html:15 -#: templates/extras/notificationgroup.html:14 -#: templates/extras/savedfilter.html:13 templates/extras/script_list.html:44 -#: templates/extras/tag.html:14 templates/extras/webhook.html:13 -#: templates/ipam/asnrange.html:15 templates/ipam/fhrpgroup.html:30 -#: templates/ipam/rir.html:22 templates/ipam/role.html:22 -#: templates/ipam/routetarget.html:13 templates/ipam/service.html:24 -#: templates/ipam/servicetemplate.html:15 templates/ipam/vlan.html:35 -#: templates/ipam/vlangroup.html:30 templates/tenancy/contact.html:25 -#: templates/tenancy/contactgroup.html:21 -#: templates/tenancy/contactrole.html:18 templates/tenancy/tenantgroup.html:29 -#: templates/users/group.html:17 templates/users/objectpermission.html:17 -#: templates/virtualization/cluster.html:13 -#: templates/virtualization/clustergroup.html:22 -#: templates/virtualization/clustertype.html:22 -#: templates/virtualization/virtualdisk.html:25 -#: templates/virtualization/virtualmachine.html:15 -#: templates/virtualization/vminterface.html:25 -#: templates/vpn/ikepolicy.html:13 templates/vpn/ikeproposal.html:13 -#: templates/vpn/ipsecpolicy.html:13 templates/vpn/ipsecprofile.html:13 -#: templates/vpn/ipsecprofile.html:36 templates/vpn/ipsecprofile.html:69 -#: templates/vpn/ipsecproposal.html:13 templates/vpn/l2vpn.html:14 -#: templates/vpn/tunnel.html:21 templates/vpn/tunnelgroup.html:26 -#: templates/wireless/wirelesslangroup.html:29 tenancy/tables/contacts.py:19 -#: tenancy/tables/contacts.py:41 tenancy/tables/contacts.py:56 -#: tenancy/tables/tenants.py:16 tenancy/tables/tenants.py:38 -#: users/tables.py:62 users/tables.py:76 -#: virtualization/forms/bulk_create.py:20 -#: virtualization/forms/object_create.py:13 -#: virtualization/forms/object_create.py:23 -#: virtualization/tables/clusters.py:17 virtualization/tables/clusters.py:39 -#: virtualization/tables/clusters.py:62 -#: virtualization/tables/virtualmachines.py:55 -#: virtualization/tables/virtualmachines.py:139 -#: virtualization/tables/virtualmachines.py:194 vpn/tables/crypto.py:18 -#: vpn/tables/crypto.py:57 vpn/tables/crypto.py:93 vpn/tables/crypto.py:129 -#: vpn/tables/crypto.py:158 vpn/tables/l2vpn.py:23 vpn/tables/tunnels.py:18 -#: vpn/tables/tunnels.py:40 wireless/tables/wirelesslan.py:18 -#: wireless/tables/wirelesslan.py:79 +#: netbox/circuits/tables/circuits.py:32 +#: netbox/circuits/tables/circuits.py:132 +#: netbox/circuits/tables/providers.py:18 +#: netbox/circuits/tables/providers.py:69 +#: netbox/circuits/tables/providers.py:99 netbox/core/tables/data.py:16 +#: netbox/core/tables/jobs.py:14 netbox/core/tables/plugins.py: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/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/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/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/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 +#: netbox/templates/dcim/consoleserverport.html:28 +#: netbox/templates/dcim/devicebay.html:24 +#: netbox/templates/dcim/devicerole.html:26 +#: netbox/templates/dcim/frontport.html:28 +#: netbox/templates/dcim/inc/interface_vlans_table.html:5 +#: netbox/templates/dcim/inc/panels/inventory_items.html:18 +#: netbox/templates/dcim/interface.html:38 +#: netbox/templates/dcim/interface.html:165 +#: netbox/templates/dcim/inventoryitem.html:28 +#: netbox/templates/dcim/inventoryitemrole.html:18 +#: netbox/templates/dcim/location.html:29 +#: netbox/templates/dcim/manufacturer.html:36 +#: netbox/templates/dcim/modulebay.html:30 +#: netbox/templates/dcim/platform.html:29 +#: netbox/templates/dcim/poweroutlet.html:28 +#: netbox/templates/dcim/powerport.html:28 +#: netbox/templates/dcim/rackrole.html:22 +#: netbox/templates/dcim/rearport.html:28 netbox/templates/dcim/region.html:29 +#: netbox/templates/dcim/sitegroup.html:29 +#: netbox/templates/dcim/virtualdevicecontext.html:18 +#: netbox/templates/extras/configcontext.html:13 +#: netbox/templates/extras/configtemplate.html:13 +#: netbox/templates/extras/customfield.html:13 +#: netbox/templates/extras/customlink.html:13 +#: netbox/templates/extras/eventrule.html:13 +#: netbox/templates/extras/exporttemplate.html:15 +#: netbox/templates/extras/notificationgroup.html:14 +#: netbox/templates/extras/savedfilter.html:13 +#: netbox/templates/extras/script_list.html:45 +#: netbox/templates/extras/tag.html:14 netbox/templates/extras/webhook.html:13 +#: netbox/templates/ipam/asnrange.html:15 +#: netbox/templates/ipam/fhrpgroup.html:30 netbox/templates/ipam/rir.html:22 +#: netbox/templates/ipam/role.html:22 +#: netbox/templates/ipam/routetarget.html:13 +#: netbox/templates/ipam/service.html:24 +#: netbox/templates/ipam/servicetemplate.html:15 +#: netbox/templates/ipam/vlan.html:35 netbox/templates/ipam/vlangroup.html:30 +#: netbox/templates/tenancy/contact.html:25 +#: netbox/templates/tenancy/contactgroup.html:21 +#: netbox/templates/tenancy/contactrole.html:18 +#: netbox/templates/tenancy/tenantgroup.html:29 +#: netbox/templates/users/group.html:17 +#: netbox/templates/users/objectpermission.html:17 +#: netbox/templates/virtualization/cluster.html:13 +#: netbox/templates/virtualization/clustergroup.html:22 +#: netbox/templates/virtualization/clustertype.html:22 +#: netbox/templates/virtualization/virtualdisk.html:25 +#: netbox/templates/virtualization/virtualmachine.html:15 +#: netbox/templates/virtualization/vminterface.html:25 +#: netbox/templates/vpn/ikepolicy.html:13 +#: netbox/templates/vpn/ikeproposal.html:13 +#: netbox/templates/vpn/ipsecpolicy.html:13 +#: netbox/templates/vpn/ipsecprofile.html:13 +#: netbox/templates/vpn/ipsecprofile.html:36 +#: netbox/templates/vpn/ipsecprofile.html:69 +#: netbox/templates/vpn/ipsecproposal.html:13 +#: netbox/templates/vpn/l2vpn.html:14 netbox/templates/vpn/tunnel.html:21 +#: netbox/templates/vpn/tunnelgroup.html:26 +#: netbox/templates/wireless/wirelesslangroup.html:29 +#: netbox/tenancy/tables/contacts.py:19 netbox/tenancy/tables/contacts.py:41 +#: netbox/tenancy/tables/contacts.py:56 netbox/tenancy/tables/tenants.py:16 +#: netbox/tenancy/tables/tenants.py:38 netbox/users/tables.py:62 +#: netbox/users/tables.py:76 netbox/virtualization/forms/bulk_create.py:20 +#: netbox/virtualization/forms/object_create.py:13 +#: netbox/virtualization/forms/object_create.py:23 +#: netbox/virtualization/tables/clusters.py:17 +#: netbox/virtualization/tables/clusters.py:39 +#: netbox/virtualization/tables/clusters.py:62 +#: netbox/virtualization/tables/virtualmachines.py:55 +#: netbox/virtualization/tables/virtualmachines.py:139 +#: netbox/virtualization/tables/virtualmachines.py:194 +#: netbox/vpn/tables/crypto.py:18 netbox/vpn/tables/crypto.py:57 +#: netbox/vpn/tables/crypto.py:93 netbox/vpn/tables/crypto.py:129 +#: netbox/vpn/tables/crypto.py:158 netbox/vpn/tables/l2vpn.py:23 +#: netbox/vpn/tables/tunnels.py:18 netbox/vpn/tables/tunnels.py:40 +#: netbox/wireless/tables/wirelesslan.py:18 +#: netbox/wireless/tables/wirelesslan.py:79 msgid "Name" msgstr "Jméno" -#: circuits/tables/circuits.py:41 circuits/tables/circuits.py:138 -#: circuits/tables/providers.py:45 circuits/tables/providers.py:79 -#: netbox/navigation/menu.py:266 netbox/navigation/menu.py:270 -#: netbox/navigation/menu.py:272 templates/circuits/provider.html:57 -#: templates/circuits/provideraccount.html:44 -#: templates/circuits/providernetwork.html:50 +#: 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/templates/circuits/provider.html:57 +#: netbox/templates/circuits/provideraccount.html:44 +#: netbox/templates/circuits/providernetwork.html:50 msgid "Circuits" msgstr "Okruhy" -#: circuits/tables/circuits.py:55 templates/circuits/circuit.html:26 +#: netbox/circuits/tables/circuits.py:55 +#: netbox/templates/circuits/circuit.html:26 msgid "Circuit ID" msgstr "ID okruhu" -#: circuits/tables/circuits.py:69 wireless/forms/model_forms.py:160 +#: netbox/circuits/tables/circuits.py:69 +#: netbox/wireless/forms/model_forms.py:160 msgid "Side A" msgstr "Strana A" -#: circuits/tables/circuits.py:74 +#: netbox/circuits/tables/circuits.py:74 msgid "Side Z" msgstr "Strana Z" -#: circuits/tables/circuits.py:77 templates/circuits/circuit.html:55 +#: netbox/circuits/tables/circuits.py:77 +#: netbox/templates/circuits/circuit.html:55 msgid "Commit Rate" msgstr "Míra odevzdání" -#: circuits/tables/circuits.py:80 circuits/tables/providers.py:48 -#: circuits/tables/providers.py:82 circuits/tables/providers.py:107 -#: dcim/tables/devices.py:1036 dcim/tables/devicetypes.py:92 -#: dcim/tables/modules.py:29 dcim/tables/modules.py:72 dcim/tables/power.py:39 -#: dcim/tables/power.py:96 dcim/tables/racks.py:84 dcim/tables/racks.py:145 -#: dcim/tables/racks.py:225 dcim/tables/sites.py:108 -#: extras/tables/tables.py:582 ipam/tables/asn.py:69 ipam/tables/fhrp.py:34 -#: ipam/tables/ip.py:136 ipam/tables/ip.py:275 ipam/tables/ip.py:329 -#: ipam/tables/ip.py:397 ipam/tables/services.py:24 ipam/tables/services.py:54 -#: ipam/tables/vlans.py:145 ipam/tables/vrfs.py:47 ipam/tables/vrfs.py:72 -#: templates/dcim/htmx/cable_edit.html:89 templates/generic/bulk_edit.html:86 -#: templates/inc/panels/comments.html:5 tenancy/tables/contacts.py:68 -#: tenancy/tables/tenants.py:46 utilities/forms/fields/fields.py:29 -#: virtualization/tables/clusters.py:91 -#: virtualization/tables/virtualmachines.py:82 vpn/tables/crypto.py:37 -#: vpn/tables/crypto.py:74 vpn/tables/crypto.py:109 vpn/tables/crypto.py:140 -#: vpn/tables/crypto.py:173 vpn/tables/l2vpn.py:37 vpn/tables/tunnels.py:61 -#: wireless/tables/wirelesslan.py:27 wireless/tables/wirelesslan.py:58 +#: netbox/circuits/tables/circuits.py: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/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/vpn/tables/crypto.py:37 netbox/vpn/tables/crypto.py:74 +#: netbox/vpn/tables/crypto.py:109 netbox/vpn/tables/crypto.py:140 +#: netbox/vpn/tables/crypto.py:173 netbox/vpn/tables/l2vpn.py:37 +#: netbox/vpn/tables/tunnels.py:61 netbox/wireless/tables/wirelesslan.py:27 +#: netbox/wireless/tables/wirelesslan.py:58 msgid "Comments" msgstr "Komentář" -#: circuits/tables/circuits.py:86 templates/tenancy/contact.html:84 -#: tenancy/tables/contacts.py:73 +#: netbox/circuits/tables/circuits.py:86 +#: netbox/templates/tenancy/contact.html:84 +#: netbox/tenancy/tables/contacts.py:73 msgid "Assignments" msgstr "Úkoly" -#: circuits/tables/providers.py:23 +#: netbox/circuits/tables/providers.py:23 msgid "Accounts" msgstr "Účty" -#: circuits/tables/providers.py:29 +#: netbox/circuits/tables/providers.py:29 msgid "Account Count" msgstr "Počet účtů" -#: circuits/tables/providers.py:39 dcim/tables/sites.py:100 +#: netbox/circuits/tables/providers.py:39 netbox/dcim/tables/sites.py:100 msgid "ASN Count" msgstr "Počet ASN" -#: circuits/views.py:331 +#: 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}." -#: circuits/views.py:380 +#: netbox/circuits/views.py:380 #, python-brace-format msgid "Swapped terminations for circuit {circuit}." msgstr "Vyměněné zakončení pro obvod {circuit}." -#: core/api/views.py:39 +#: netbox/core/api/views.py:39 msgid "This user does not have permission to synchronize this data source." msgstr "Tento uživatel nemá oprávnění synchronizovat tento zdroj dat." -#: core/choices.py:18 +#: netbox/core/choices.py:18 msgid "New" msgstr "Nový" -#: core/choices.py:19 core/constants.py:18 core/tables/tasks.py:15 -#: templates/core/rq_task.html:77 +#: netbox/core/choices.py:19 netbox/core/constants.py:18 +#: netbox/core/tables/tasks.py:15 netbox/templates/core/rq_task.html:77 msgid "Queued" msgstr "Ve frontě" -#: core/choices.py:20 +#: netbox/core/choices.py:20 msgid "Syncing" msgstr "Synchronizace" -#: core/choices.py:21 core/choices.py:57 core/tables/jobs.py:41 -#: templates/core/job.html:86 +#: netbox/core/choices.py:21 netbox/core/choices.py:57 +#: netbox/core/tables/jobs.py:41 netbox/templates/core/job.html:86 msgid "Completed" msgstr "Dokončeno" -#: core/choices.py:22 core/choices.py:59 core/constants.py:20 -#: core/tables/tasks.py:34 dcim/choices.py:187 dcim/choices.py:239 -#: dcim/choices.py:1607 virtualization/choices.py:47 +#: netbox/core/choices.py:22 netbox/core/choices.py:59 +#: netbox/core/constants.py:20 netbox/core/tables/tasks.py:34 +#: netbox/dcim/choices.py:187 netbox/dcim/choices.py:239 +#: netbox/dcim/choices.py:1609 netbox/virtualization/choices.py:47 msgid "Failed" msgstr "Neuspěl" -#: core/choices.py:35 netbox/navigation/menu.py:335 -#: netbox/navigation/menu.py:339 templates/extras/script/base.html:14 -#: templates/extras/script_list.html:7 templates/extras/script_list.html:12 -#: templates/extras/script_result.html:17 +#: netbox/core/choices.py:35 netbox/netbox/navigation/menu.py:335 +#: netbox/netbox/navigation/menu.py:339 +#: netbox/templates/extras/script/base.html:14 +#: netbox/templates/extras/script_list.html:7 +#: netbox/templates/extras/script_list.html:12 +#: netbox/templates/extras/script_result.html:17 msgid "Scripts" msgstr "Skripty" -#: core/choices.py:36 templates/extras/report/base.html:13 +#: netbox/core/choices.py:36 netbox/templates/extras/report/base.html:13 msgid "Reports" msgstr "Zprávy" -#: core/choices.py:54 +#: netbox/core/choices.py:54 msgid "Pending" msgstr "Čeká" -#: core/choices.py:55 core/constants.py:23 core/tables/jobs.py:32 -#: core/tables/tasks.py:38 templates/core/job.html:73 +#: netbox/core/choices.py:55 netbox/core/constants.py:23 +#: netbox/core/tables/jobs.py:32 netbox/core/tables/tasks.py:38 +#: netbox/templates/core/job.html:73 msgid "Scheduled" msgstr "Naplánováno" -#: core/choices.py:56 +#: netbox/core/choices.py:56 msgid "Running" msgstr "Běh" -#: core/choices.py:58 +#: netbox/core/choices.py:58 msgid "Errored" msgstr "Chyba" -#: core/choices.py:87 core/tables/plugins.py:63 -#: templates/generic/object.html:61 +#: netbox/core/choices.py:87 netbox/core/tables/plugins.py:63 +#: netbox/templates/generic/object.html:61 msgid "Updated" msgstr "aktualizováno" -#: core/choices.py:88 +#: netbox/core/choices.py:88 msgid "Deleted" msgstr "Vymazáno" -#: core/constants.py:19 core/tables/tasks.py:30 +#: netbox/core/constants.py:19 netbox/core/tables/tasks.py:30 msgid "Finished" msgstr "Dokončeno" -#: core/constants.py:21 core/tables/jobs.py:38 templates/core/job.html:82 -#: templates/extras/htmx/script_result.html:8 +#: netbox/core/constants.py:21 netbox/core/tables/jobs.py:38 +#: netbox/templates/core/job.html:82 +#: netbox/templates/extras/htmx/script_result.html:8 msgid "Started" msgstr "Zahájeno" -#: core/constants.py:22 core/tables/tasks.py:26 +#: netbox/core/constants.py:22 netbox/core/tables/tasks.py:26 msgid "Deferred" msgstr "Odloženo" -#: core/constants.py:24 +#: netbox/core/constants.py:24 msgid "Stopped" msgstr "Zastaveno" -#: core/constants.py:25 +#: netbox/core/constants.py:25 msgid "Cancelled" msgstr "Zrušeno" -#: core/data_backends.py:32 core/tables/plugins.py:51 -#: templates/core/plugin.html:88 templates/dcim/interface.html:216 +#: netbox/core/data_backends.py:32 netbox/core/tables/plugins.py:51 +#: netbox/templates/core/plugin.html:88 +#: netbox/templates/dcim/interface.html:216 msgid "Local" msgstr "Místní" -#: core/data_backends.py:50 core/tables/change_logging.py:20 -#: templates/account/profile.html:15 templates/users/user.html:17 -#: users/tables.py:31 +#: netbox/core/data_backends.py:50 netbox/core/tables/change_logging.py:20 +#: netbox/templates/account/profile.html:15 +#: netbox/templates/users/user.html:17 netbox/users/tables.py:31 msgid "Username" msgstr "Uživatelské jméno" -#: core/data_backends.py:52 core/data_backends.py:58 +#: netbox/core/data_backends.py:52 netbox/core/data_backends.py:58 msgid "Only used for cloning with HTTP(S)" msgstr "Používá se pouze pro klonování pomocí HTTP (S)" -#: core/data_backends.py:56 templates/account/base.html:23 -#: templates/account/password.html:12 users/forms/model_forms.py:170 +#: netbox/core/data_backends.py:56 netbox/templates/account/base.html:23 +#: netbox/templates/account/password.html:12 +#: netbox/users/forms/model_forms.py:170 msgid "Password" msgstr "Heslo" -#: core/data_backends.py:62 +#: netbox/core/data_backends.py:62 msgid "Branch" msgstr "Větev" -#: core/data_backends.py:120 +#: netbox/core/data_backends.py:120 #, python-brace-format msgid "Fetching remote data failed ({name}): {error}" msgstr "Načítání vzdálených dat se nezdařilo ({name}): {error}" -#: core/data_backends.py:133 +#: netbox/core/data_backends.py:133 msgid "AWS access key ID" msgstr "ID přístupového klíče AWS" -#: core/data_backends.py:137 +#: netbox/core/data_backends.py:137 msgid "AWS secret access key" msgstr "Tajný přístupový klíč AWS" -#: core/events.py:27 +#: netbox/core/events.py:27 msgid "Object created" msgstr "Vytvořený objekt" -#: core/events.py:28 +#: netbox/core/events.py:28 msgid "Object updated" msgstr "Objekt aktualizován" -#: core/events.py:29 +#: netbox/core/events.py:29 msgid "Object deleted" msgstr "Objekt odstraněn" -#: core/events.py:30 +#: netbox/core/events.py:30 msgid "Job started" msgstr "Práce byla zahájena" -#: core/events.py:31 +#: netbox/core/events.py:31 msgid "Job completed" msgstr "Úloha dokončena" -#: core/events.py:32 +#: netbox/core/events.py:32 msgid "Job failed" msgstr "Úloha selhala" -#: core/events.py:33 +#: netbox/core/events.py:33 msgid "Job errored" msgstr "Chyba v úloze" -#: core/filtersets.py:53 extras/filtersets.py:250 extras/filtersets.py:633 -#: extras/filtersets.py:661 +#: netbox/core/filtersets.py:53 netbox/extras/filtersets.py:250 +#: netbox/extras/filtersets.py:633 netbox/extras/filtersets.py:661 msgid "Data source (ID)" msgstr "Zdroj dat (ID)" -#: core/filtersets.py:59 +#: netbox/core/filtersets.py:59 msgid "Data source (name)" msgstr "Zdroj dat (název)" -#: core/filtersets.py:145 dcim/filtersets.py:501 extras/filtersets.py:287 -#: extras/filtersets.py:331 extras/filtersets.py:353 extras/filtersets.py:413 -#: users/filtersets.py:28 +#: netbox/core/filtersets.py:145 netbox/dcim/filtersets.py:501 +#: 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 msgid "User (ID)" msgstr "Uživatel (ID)" -#: core/filtersets.py:151 +#: netbox/core/filtersets.py:151 msgid "User name" msgstr "Uživatelské jméno" -#: core/forms/bulk_edit.py:25 core/forms/filtersets.py:43 -#: core/tables/data.py:26 dcim/forms/bulk_edit.py:1122 -#: dcim/forms/bulk_edit.py:1400 dcim/forms/filtersets.py:1370 -#: dcim/tables/devices.py:553 dcim/tables/devicetypes.py:224 -#: extras/forms/bulk_edit.py:123 extras/forms/bulk_edit.py:187 -#: extras/forms/bulk_edit.py:246 extras/forms/filtersets.py:142 -#: extras/forms/filtersets.py:229 extras/forms/filtersets.py:294 -#: extras/tables/tables.py:162 extras/tables/tables.py:253 -#: extras/tables/tables.py:415 netbox/preferences.py:22 -#: templates/core/datasource.html:42 templates/dcim/interface.html:61 -#: templates/extras/customlink.html:17 templates/extras/eventrule.html:17 -#: templates/extras/savedfilter.html:25 -#: templates/users/objectpermission.html:25 -#: templates/virtualization/vminterface.html:29 users/forms/bulk_edit.py:89 -#: users/forms/filtersets.py:70 users/tables.py:83 -#: virtualization/forms/bulk_edit.py:217 -#: virtualization/forms/filtersets.py:215 +#: 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/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/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 +#: netbox/templates/dcim/interface.html:61 +#: netbox/templates/extras/customlink.html:17 +#: netbox/templates/extras/eventrule.html:17 +#: netbox/templates/extras/savedfilter.html:25 +#: netbox/templates/users/objectpermission.html:25 +#: netbox/templates/virtualization/vminterface.html:29 +#: netbox/users/forms/bulk_edit.py:89 netbox/users/forms/filtersets.py:70 +#: netbox/users/tables.py:83 netbox/virtualization/forms/bulk_edit.py:217 +#: netbox/virtualization/forms/filtersets.py:215 msgid "Enabled" msgstr "Povoleno" -#: core/forms/bulk_edit.py:34 extras/forms/model_forms.py:285 -#: templates/extras/savedfilter.html:52 vpn/forms/filtersets.py:97 -#: vpn/forms/filtersets.py:127 vpn/forms/filtersets.py:151 -#: vpn/forms/filtersets.py:170 vpn/forms/model_forms.py:301 -#: vpn/forms/model_forms.py:321 vpn/forms/model_forms.py:337 -#: vpn/forms/model_forms.py:357 vpn/forms/model_forms.py:380 +#: netbox/core/forms/bulk_edit.py:34 netbox/extras/forms/model_forms.py:285 +#: 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 msgid "Parameters" msgstr "Parametry" -#: core/forms/bulk_edit.py:38 templates/core/datasource.html:68 +#: netbox/core/forms/bulk_edit.py:38 netbox/templates/core/datasource.html:68 msgid "Ignore rules" msgstr "Ignorovat pravidla" -#: core/forms/filtersets.py:30 core/forms/model_forms.py:97 -#: extras/forms/model_forms.py:248 extras/forms/model_forms.py:578 -#: extras/forms/model_forms.py:632 extras/tables/tables.py:191 -#: extras/tables/tables.py:483 extras/tables/tables.py:518 -#: templates/core/datasource.html:31 -#: templates/dcim/device/render_config.html:18 -#: templates/extras/configcontext.html:29 -#: templates/extras/configtemplate.html:21 -#: templates/extras/exporttemplate.html:35 -#: templates/virtualization/virtualmachine/render_config.html:18 +#: netbox/core/forms/filtersets.py: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/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 msgid "Data Source" msgstr "Zdroj dat" -#: core/forms/filtersets.py:55 core/forms/mixins.py:21 +#: netbox/core/forms/filtersets.py:55 netbox/core/forms/mixins.py:21 msgid "File" msgstr "Soubor" -#: core/forms/filtersets.py:60 core/forms/mixins.py:16 -#: extras/forms/filtersets.py:170 extras/forms/filtersets.py:328 -#: extras/forms/filtersets.py:413 +#: 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 msgid "Data source" msgstr "Zdroj dat" -#: core/forms/filtersets.py:70 extras/forms/filtersets.py:440 +#: netbox/core/forms/filtersets.py:70 netbox/extras/forms/filtersets.py:440 msgid "Creation" msgstr "Stvoření" -#: core/forms/filtersets.py:74 core/forms/filtersets.py:160 -#: extras/forms/filtersets.py:461 extras/tables/tables.py:220 -#: extras/tables/tables.py:294 extras/tables/tables.py:326 -#: extras/tables/tables.py:571 templates/core/job.html:38 -#: templates/core/objectchange.html:52 tenancy/tables/contacts.py:90 -#: vpn/tables/l2vpn.py:59 +#: 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/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 +#: netbox/tenancy/tables/contacts.py:90 netbox/vpn/tables/l2vpn.py:59 msgid "Object Type" msgstr "Typ objektu" -#: core/forms/filtersets.py:84 +#: netbox/core/forms/filtersets.py:84 msgid "Created after" msgstr "Vytvořeno po" -#: core/forms/filtersets.py:89 +#: netbox/core/forms/filtersets.py:89 msgid "Created before" msgstr "Vytvořeno dříve" -#: core/forms/filtersets.py:94 +#: netbox/core/forms/filtersets.py:94 msgid "Scheduled after" msgstr "Naplánováno po" -#: core/forms/filtersets.py:99 +#: netbox/core/forms/filtersets.py:99 msgid "Scheduled before" msgstr "Naplánováno dříve" -#: core/forms/filtersets.py:104 +#: netbox/core/forms/filtersets.py:104 msgid "Started after" msgstr "Začalo po" -#: core/forms/filtersets.py:109 +#: netbox/core/forms/filtersets.py:109 msgid "Started before" msgstr "Začalo dříve" -#: core/forms/filtersets.py:114 +#: netbox/core/forms/filtersets.py:114 msgid "Completed after" msgstr "Dokončeno po" -#: core/forms/filtersets.py:119 +#: netbox/core/forms/filtersets.py:119 msgid "Completed before" msgstr "Dokončeno dříve" -#: core/forms/filtersets.py:126 core/forms/filtersets.py:155 -#: dcim/forms/bulk_edit.py:456 dcim/forms/filtersets.py:418 -#: dcim/forms/filtersets.py:462 dcim/forms/model_forms.py:316 -#: extras/forms/filtersets.py:456 extras/forms/filtersets.py:475 -#: extras/tables/tables.py:302 extras/tables/tables.py:342 -#: templates/core/objectchange.html:36 templates/dcim/rackreservation.html:58 -#: templates/extras/savedfilter.html:21 templates/inc/user_menu.html:33 -#: templates/users/token.html:21 templates/users/user.html:6 -#: templates/users/user.html:14 users/filtersets.py:107 -#: users/filtersets.py:174 users/forms/filtersets.py:84 -#: users/forms/filtersets.py:125 users/forms/model_forms.py:155 -#: users/forms/model_forms.py:192 users/tables.py:19 +#: 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/extras/tables/tables.py:302 netbox/extras/tables/tables.py:342 +#: netbox/templates/core/objectchange.html:36 +#: netbox/templates/dcim/rackreservation.html:58 +#: netbox/templates/extras/savedfilter.html:21 +#: netbox/templates/inc/user_menu.html:33 netbox/templates/users/token.html:21 +#: netbox/templates/users/user.html:6 netbox/templates/users/user.html:14 +#: netbox/users/filtersets.py:107 netbox/users/filtersets.py:174 +#: netbox/users/forms/filtersets.py:84 netbox/users/forms/filtersets.py:125 +#: netbox/users/forms/model_forms.py:155 netbox/users/forms/model_forms.py:192 +#: netbox/users/tables.py:19 msgid "User" msgstr "Uživatel" -#: core/forms/filtersets.py:134 core/tables/change_logging.py:15 -#: extras/tables/tables.py:609 extras/tables/tables.py:646 -#: templates/core/objectchange.html:32 +#: netbox/core/forms/filtersets.py:134 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 "Čas" -#: core/forms/filtersets.py:139 extras/forms/filtersets.py:445 +#: netbox/core/forms/filtersets.py:139 netbox/extras/forms/filtersets.py:445 msgid "After" msgstr "Po" -#: core/forms/filtersets.py:144 extras/forms/filtersets.py:450 +#: netbox/core/forms/filtersets.py:144 netbox/extras/forms/filtersets.py:450 msgid "Before" msgstr "Dříve" -#: core/forms/filtersets.py:148 core/tables/change_logging.py:29 -#: extras/forms/model_forms.py:396 templates/core/objectchange.html:46 -#: templates/extras/eventrule.html:71 +#: netbox/core/forms/filtersets.py:148 netbox/core/tables/change_logging.py:29 +#: netbox/extras/forms/model_forms.py:396 +#: netbox/templates/core/objectchange.html:46 +#: netbox/templates/extras/eventrule.html:71 msgid "Action" msgstr "Akce" -#: core/forms/model_forms.py:54 core/tables/data.py:46 -#: templates/core/datafile.html:27 templates/extras/report/base.html:33 -#: templates/extras/script/base.html:32 +#: netbox/core/forms/model_forms.py:54 netbox/core/tables/data.py:46 +#: netbox/templates/core/datafile.html:27 +#: netbox/templates/extras/report/base.html:33 +#: netbox/templates/extras/script/base.html:32 msgid "Source" msgstr "Zdroj" -#: core/forms/model_forms.py:58 +#: netbox/core/forms/model_forms.py:58 msgid "Backend Parameters" msgstr "Parametry backendu" -#: core/forms/model_forms.py:96 +#: netbox/core/forms/model_forms.py:96 msgid "File Upload" msgstr "Nahrávání souboru" -#: core/forms/model_forms.py:108 +#: netbox/core/forms/model_forms.py:108 msgid "Cannot upload a file and sync from an existing file" msgstr "Nelze nahrát soubor a synchronizovat z existujícího souboru" -#: core/forms/model_forms.py:110 +#: netbox/core/forms/model_forms.py:110 msgid "Must upload a file or select a data file to sync" msgstr "" "Musíte nahrát soubor nebo vybrat datový soubor, který chcete synchronizovat" -#: core/forms/model_forms.py:153 templates/dcim/rack_elevation_list.html:6 +#: netbox/core/forms/model_forms.py:153 +#: netbox/templates/dcim/rack_elevation_list.html:6 msgid "Rack Elevations" msgstr "Výšky stojanů" -#: core/forms/model_forms.py:157 dcim/choices.py:1518 -#: dcim/forms/bulk_edit.py:969 dcim/forms/bulk_edit.py:1357 -#: dcim/forms/bulk_edit.py:1375 dcim/tables/racks.py:158 -#: netbox/navigation/menu.py:291 netbox/navigation/menu.py:295 +#: 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 msgid "Power" msgstr "Napájení" -#: core/forms/model_forms.py:159 netbox/navigation/menu.py:154 -#: templates/core/inc/config_data.html:37 +#: netbox/core/forms/model_forms.py:159 netbox/netbox/navigation/menu.py:154 +#: netbox/templates/core/inc/config_data.html:37 msgid "IPAM" msgstr "IPAM" -#: core/forms/model_forms.py:160 netbox/navigation/menu.py:230 -#: templates/core/inc/config_data.html:50 vpn/forms/bulk_edit.py:77 -#: vpn/forms/filtersets.py:43 vpn/forms/model_forms.py:61 -#: vpn/forms/model_forms.py:146 +#: netbox/core/forms/model_forms.py:160 netbox/netbox/navigation/menu.py:230 +#: netbox/templates/core/inc/config_data.html:50 +#: netbox/vpn/forms/bulk_edit.py:77 netbox/vpn/forms/filtersets.py:43 +#: netbox/vpn/forms/model_forms.py:61 netbox/vpn/forms/model_forms.py:146 msgid "Security" msgstr "Zabezpečení" -#: core/forms/model_forms.py:161 templates/core/inc/config_data.html:59 +#: netbox/core/forms/model_forms.py:161 +#: netbox/templates/core/inc/config_data.html:59 msgid "Banners" msgstr "Bannery" -#: core/forms/model_forms.py:162 templates/core/inc/config_data.html:80 +#: netbox/core/forms/model_forms.py:162 +#: netbox/templates/core/inc/config_data.html:80 msgid "Pagination" msgstr "Stránkování" -#: core/forms/model_forms.py:163 extras/forms/bulk_edit.py:92 -#: extras/forms/filtersets.py:47 extras/forms/model_forms.py:116 -#: extras/forms/model_forms.py:129 templates/core/inc/config_data.html:93 +#: 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/model_forms.py:129 +#: netbox/templates/core/inc/config_data.html:93 msgid "Validation" msgstr "Validace" -#: core/forms/model_forms.py:164 templates/account/preferences.html:6 +#: netbox/core/forms/model_forms.py:164 +#: netbox/templates/account/preferences.html:6 msgid "User Preferences" msgstr "Uživatelské předvolby" -#: core/forms/model_forms.py:167 dcim/forms/filtersets.py:732 -#: templates/core/inc/config_data.html:127 users/forms/model_forms.py:64 +#: netbox/core/forms/model_forms.py:167 netbox/dcim/forms/filtersets.py:732 +#: netbox/templates/core/inc/config_data.html:127 +#: netbox/users/forms/model_forms.py:64 msgid "Miscellaneous" msgstr "Různé" -#: core/forms/model_forms.py:169 +#: netbox/core/forms/model_forms.py:169 msgid "Config Revision" msgstr "Revize konfigurace" -#: core/forms/model_forms.py:208 +#: netbox/core/forms/model_forms.py:208 msgid "This parameter has been defined statically and cannot be modified." msgstr "Tento parametr byl definován staticky a nelze jej změnit." -#: core/forms/model_forms.py:216 +#: netbox/core/forms/model_forms.py:216 #, python-brace-format msgid "Current value: {value}" msgstr "Aktuální hodnota: {value}" -#: core/forms/model_forms.py:218 +#: netbox/core/forms/model_forms.py:218 msgid " (default)" msgstr " (výchozí)" -#: core/models/change_logging.py:29 +#: netbox/core/models/change_logging.py:29 msgid "time" msgstr "čas" -#: core/models/change_logging.py:42 +#: netbox/core/models/change_logging.py:42 msgid "user name" msgstr "Uživatelské jméno" -#: core/models/change_logging.py:47 +#: netbox/core/models/change_logging.py:47 msgid "request ID" msgstr "ID požadavku" -#: core/models/change_logging.py:52 extras/models/staging.py:69 +#: netbox/core/models/change_logging.py:52 netbox/extras/models/staging.py:69 msgid "action" msgstr "akce" -#: core/models/change_logging.py:86 +#: netbox/core/models/change_logging.py:86 msgid "pre-change data" msgstr "údaje před změnou" -#: core/models/change_logging.py:92 +#: netbox/core/models/change_logging.py:92 msgid "post-change data" msgstr "údaje po změně" -#: core/models/change_logging.py:106 +#: netbox/core/models/change_logging.py:106 msgid "object change" msgstr "změna objektu" -#: core/models/change_logging.py:107 +#: netbox/core/models/change_logging.py:107 msgid "object changes" msgstr "změny objektu" -#: core/models/change_logging.py:123 +#: netbox/core/models/change_logging.py:123 #, python-brace-format msgid "Change logging is not supported for this object type ({type})." msgstr "Protokolování změn není u tohoto typu objektu podporováno ({type})." -#: core/models/config.py:18 core/models/data.py:266 core/models/files.py:27 -#: core/models/jobs.py:49 extras/models/models.py:730 -#: extras/models/notifications.py:39 extras/models/notifications.py:186 -#: netbox/models/features.py:53 users/models/tokens.py:32 +#: netbox/core/models/config.py:18 netbox/core/models/data.py:266 +#: 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/notifications.py:186 +#: netbox/netbox/models/features.py:53 netbox/users/models/tokens.py:32 msgid "created" msgstr "vytvořil" -#: core/models/config.py:22 +#: netbox/core/models/config.py:22 msgid "comment" msgstr "komentář" -#: core/models/config.py:29 +#: netbox/core/models/config.py:29 msgid "configuration data" msgstr "konfigurační data" -#: core/models/config.py:36 +#: netbox/core/models/config.py:36 msgid "config revision" msgstr "revize konfigurace" -#: core/models/config.py:37 +#: netbox/core/models/config.py:37 msgid "config revisions" msgstr "revize konfigurace" -#: core/models/config.py:41 +#: netbox/core/models/config.py:41 msgid "Default configuration" msgstr "Výchozí konfigurace" -#: core/models/config.py:43 +#: netbox/core/models/config.py:43 msgid "Current configuration" msgstr "Aktuální konfigurace" -#: core/models/config.py:44 +#: netbox/core/models/config.py:44 #, python-brace-format msgid "Config revision #{id}" msgstr "Revize konfigurace #{id}" -#: core/models/data.py:44 dcim/models/cables.py:43 -#: dcim/models/device_component_templates.py:203 -#: dcim/models/device_component_templates.py:237 -#: dcim/models/device_component_templates.py:272 -#: dcim/models/device_component_templates.py:334 -#: dcim/models/device_component_templates.py:413 -#: dcim/models/device_component_templates.py:512 -#: dcim/models/device_component_templates.py:612 -#: dcim/models/device_components.py:283 dcim/models/device_components.py:312 -#: dcim/models/device_components.py:345 dcim/models/device_components.py:463 -#: dcim/models/device_components.py:605 dcim/models/device_components.py:970 -#: dcim/models/device_components.py:1044 dcim/models/power.py:102 -#: extras/models/customfields.py:78 extras/models/search.py:41 -#: virtualization/models/clusters.py:61 vpn/models/l2vpn.py:32 +#: 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/extras/models/search.py:41 +#: netbox/virtualization/models/clusters.py:61 netbox/vpn/models/l2vpn.py:32 msgid "type" msgstr "typ" -#: core/models/data.py:49 extras/choices.py:37 extras/models/models.py:164 -#: extras/tables/tables.py:656 templates/core/datasource.html:58 -#: templates/core/plugin.html:66 +#: netbox/core/models/data.py:49 netbox/extras/choices.py:37 +#: netbox/extras/models/models.py:164 netbox/extras/tables/tables.py:656 +#: netbox/templates/core/datasource.html:58 +#: netbox/templates/core/plugin.html:66 msgid "URL" msgstr "URL" -#: core/models/data.py:59 dcim/models/device_component_templates.py:418 -#: dcim/models/device_components.py:512 extras/models/models.py:70 -#: extras/models/models.py:301 extras/models/models.py:526 -#: users/models/permissions.py:29 +#: netbox/core/models/data.py:59 +#: netbox/dcim/models/device_component_templates.py:418 +#: netbox/dcim/models/device_components.py:512 +#: 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" msgstr "povoleno" -#: core/models/data.py:63 +#: netbox/core/models/data.py:63 msgid "ignore rules" msgstr "ignorovat pravidla" -#: core/models/data.py:65 +#: netbox/core/models/data.py:65 msgid "Patterns (one per line) matching files to ignore when syncing" msgstr "" "Vzory (jeden na řádek) odpovídající soubory, které mají být ignorovány při " "synchronizaci" -#: core/models/data.py:68 extras/models/models.py:534 +#: netbox/core/models/data.py:68 netbox/extras/models/models.py:534 msgid "parameters" msgstr "parametry" -#: core/models/data.py:73 +#: netbox/core/models/data.py:73 msgid "last synced" msgstr "naposledy synchronizováno" -#: core/models/data.py:81 +#: netbox/core/models/data.py:81 msgid "data source" msgstr "zdroj dat" -#: core/models/data.py:82 +#: netbox/core/models/data.py:82 msgid "data sources" msgstr "datové zdroje" -#: core/models/data.py:122 +#: netbox/core/models/data.py:122 #, python-brace-format msgid "Unknown backend type: {type}" msgstr "Neznámý typ backendu: {type}" -#: core/models/data.py:164 +#: netbox/core/models/data.py:164 msgid "Cannot initiate sync; syncing already in progress." msgstr "Synchronizaci nelze spustit; synchronizace již probíhá." -#: core/models/data.py:177 +#: netbox/core/models/data.py:177 msgid "" "There was an error initializing the backend. A dependency needs to be " "installed: " msgstr "" "Při inicializaci backendu došlo k chybě. Je třeba nainstalovat závislost: " -#: core/models/data.py:270 core/models/files.py:31 -#: netbox/models/features.py:59 +#: netbox/core/models/data.py:270 netbox/core/models/files.py:31 +#: netbox/netbox/models/features.py:59 msgid "last updated" msgstr "naposledy aktualizováno" -#: core/models/data.py:280 dcim/models/cables.py:444 +#: netbox/core/models/data.py:280 netbox/dcim/models/cables.py:444 msgid "path" msgstr "cesta" -#: core/models/data.py:283 +#: netbox/core/models/data.py:283 msgid "File path relative to the data source's root" msgstr "Cesta k souboru vzhledem ke kořenovému zdroji dat." -#: core/models/data.py:287 ipam/models/ip.py:503 +#: netbox/core/models/data.py:287 netbox/ipam/models/ip.py:503 msgid "size" msgstr "velikost" -#: core/models/data.py:290 +#: netbox/core/models/data.py:290 msgid "hash" msgstr "hash" -#: core/models/data.py:294 +#: netbox/core/models/data.py:294 msgid "Length must be 64 hexadecimal characters." msgstr "Délka musí být 64 hexadecimálních znaků." -#: core/models/data.py:296 +#: netbox/core/models/data.py:296 msgid "SHA256 hash of the file data" msgstr "SHA256 hash dat souboru" -#: core/models/data.py:313 +#: netbox/core/models/data.py:313 msgid "data file" msgstr "datový soubor" -#: core/models/data.py:314 +#: netbox/core/models/data.py:314 msgid "data files" msgstr "datové soubory" -#: core/models/data.py:401 +#: netbox/core/models/data.py:401 msgid "auto sync record" msgstr "záznam automatické synchronizace" -#: core/models/data.py:402 +#: netbox/core/models/data.py:402 msgid "auto sync records" msgstr "automatická synchronizace záznamů" -#: core/models/files.py:37 +#: netbox/core/models/files.py:37 msgid "file root" msgstr "kořenový soubor" -#: core/models/files.py:42 +#: netbox/core/models/files.py:42 msgid "file path" msgstr "cesta k souboru" -#: core/models/files.py:44 +#: netbox/core/models/files.py:44 msgid "File path relative to the designated root path" msgstr "Cesta k souboru vzhledem k určené kořenové cestě" -#: core/models/files.py:61 +#: netbox/core/models/files.py:61 msgid "managed file" msgstr "spravovaný soubor" -#: core/models/files.py:62 +#: netbox/core/models/files.py:62 msgid "managed files" msgstr "spravované soubory" -#: core/models/jobs.py:53 +#: netbox/core/models/jobs.py:54 msgid "scheduled" msgstr "naplánováno" -#: core/models/jobs.py:58 +#: netbox/core/models/jobs.py:59 msgid "interval" msgstr "interval" -#: core/models/jobs.py:64 +#: netbox/core/models/jobs.py:65 msgid "Recurrence interval (in minutes)" msgstr "Interval opakování (v minutách)" -#: core/models/jobs.py:67 +#: netbox/core/models/jobs.py:68 msgid "started" msgstr "začal" -#: core/models/jobs.py:72 +#: netbox/core/models/jobs.py:73 msgid "completed" msgstr "dokončena" -#: core/models/jobs.py:90 extras/models/models.py:101 -#: extras/models/staging.py:87 +#: netbox/core/models/jobs.py:91 netbox/extras/models/models.py:101 +#: netbox/extras/models/staging.py:87 msgid "data" msgstr "data" -#: core/models/jobs.py:95 +#: netbox/core/models/jobs.py:96 msgid "error" msgstr "chyba" -#: core/models/jobs.py:100 +#: netbox/core/models/jobs.py:101 msgid "job ID" msgstr "ID úlohy" -#: core/models/jobs.py:111 +#: netbox/core/models/jobs.py:112 msgid "job" msgstr "práce" -#: core/models/jobs.py:112 +#: netbox/core/models/jobs.py:113 msgid "jobs" msgstr "pracovní místa" -#: core/models/jobs.py:135 +#: 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})." -#: core/models/jobs.py:185 +#: netbox/core/models/jobs.py:190 #, python-brace-format msgid "Invalid status for job termination. Choices are: {choices}" msgstr "Neplatný stav pro ukončení úlohy. Možnosti jsou: {choices}" -#: core/models/jobs.py:216 +#: 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." -#: core/signals.py:126 +#: netbox/core/signals.py:126 #, python-brace-format msgid "Deletion is prevented by a protection rule: {message}" msgstr "Odstranění brání pravidlo ochrany: {message}" -#: core/tables/change_logging.py:25 templates/account/profile.html:19 -#: templates/users/user.html:21 +#: netbox/core/tables/change_logging.py:25 +#: netbox/templates/account/profile.html:19 +#: netbox/templates/users/user.html:21 msgid "Full Name" msgstr "Celé jméno" -#: core/tables/change_logging.py:37 core/tables/jobs.py:21 -#: extras/choices.py:41 extras/tables/tables.py:279 -#: extras/tables/tables.py:297 extras/tables/tables.py:329 -#: extras/tables/tables.py:409 extras/tables/tables.py:470 -#: extras/tables/tables.py:576 extras/tables/tables.py:616 -#: extras/tables/tables.py:653 netbox/tables/tables.py:244 -#: templates/core/objectchange.html:58 templates/extras/eventrule.html:78 -#: templates/extras/journalentry.html:18 tenancy/tables/contacts.py:93 -#: vpn/tables/l2vpn.py:64 +#: netbox/core/tables/change_logging.py:37 netbox/core/tables/jobs.py:21 +#: netbox/extras/choices.py:41 netbox/extras/tables/tables.py:279 +#: 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/templates/core/objectchange.html:58 +#: netbox/templates/extras/eventrule.html:78 +#: netbox/templates/extras/journalentry.html:18 +#: netbox/tenancy/tables/contacts.py:93 netbox/vpn/tables/l2vpn.py:64 msgid "Object" msgstr "Objekt" -#: core/tables/change_logging.py:42 templates/core/objectchange.html:68 +#: netbox/core/tables/change_logging.py:42 +#: netbox/templates/core/objectchange.html:68 msgid "Request ID" msgstr "ID požadavku" -#: core/tables/config.py:21 users/forms/filtersets.py:44 users/tables.py:39 +#: netbox/core/tables/config.py:21 netbox/users/forms/filtersets.py:44 +#: netbox/users/tables.py:39 msgid "Is Active" msgstr "Je aktivní" -#: core/tables/data.py:50 templates/core/datafile.html:31 +#: netbox/core/tables/data.py:50 netbox/templates/core/datafile.html:31 msgid "Path" msgstr "Cesta" -#: core/tables/data.py:54 templates/extras/inc/result_pending.html:7 +#: netbox/core/tables/data.py:54 +#: netbox/templates/extras/inc/result_pending.html:7 msgid "Last updated" msgstr "Naposledy aktualizováno" -#: core/tables/jobs.py:10 core/tables/tasks.py:76 -#: dcim/tables/devicetypes.py:164 extras/tables/tables.py:216 -#: extras/tables/tables.py:460 netbox/tables/tables.py:189 -#: templates/dcim/virtualchassis_edit.html:52 utilities/forms/forms.py:73 -#: wireless/tables/wirelesslink.py:17 +#: 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/templates/dcim/virtualchassis_edit.html:52 +#: netbox/utilities/forms/forms.py:73 +#: netbox/wireless/tables/wirelesslink.py:17 msgid "ID" msgstr "ID" -#: core/tables/jobs.py:35 +#: netbox/core/tables/jobs.py:35 msgid "Interval" msgstr "Interval" -#: core/tables/plugins.py:14 templates/vpn/ipsecprofile.html:44 -#: vpn/forms/bulk_edit.py:141 vpn/forms/bulk_import.py:172 -#: vpn/tables/crypto.py:61 +#: netbox/core/tables/plugins.py:14 netbox/templates/vpn/ipsecprofile.html:44 +#: netbox/vpn/forms/bulk_edit.py:141 netbox/vpn/forms/bulk_import.py:172 +#: netbox/vpn/tables/crypto.py:61 msgid "Version" msgstr "Verze" -#: core/tables/plugins.py:19 templates/core/datafile.html:38 +#: netbox/core/tables/plugins.py:19 netbox/templates/core/datafile.html:38 msgid "Last Updated" msgstr "Naposledy aktualizováno" -#: core/tables/plugins.py:23 +#: netbox/core/tables/plugins.py:23 msgid "Minimum NetBox Version" msgstr "Minimální verze NetBoxu" -#: core/tables/plugins.py:27 +#: netbox/core/tables/plugins.py:27 msgid "Maximum NetBox Version" msgstr "Maximální verze NetBoxu" -#: core/tables/plugins.py:31 core/tables/plugins.py:74 +#: netbox/core/tables/plugins.py:31 netbox/core/tables/plugins.py:74 msgid "No plugin data found" msgstr "Nebyla nalezena žádná data pluginu" -#: core/tables/plugins.py:48 templates/core/plugin.html:62 +#: netbox/core/tables/plugins.py:48 netbox/templates/core/plugin.html:62 msgid "Author" msgstr "Autor" -#: core/tables/plugins.py:54 +#: netbox/core/tables/plugins.py:54 msgid "Installed" msgstr "Nainstalováno" -#: core/tables/plugins.py:57 templates/core/plugin.html:84 +#: netbox/core/tables/plugins.py:57 netbox/templates/core/plugin.html:84 msgid "Certified" msgstr "Certifikováno" -#: core/tables/plugins.py:60 +#: netbox/core/tables/plugins.py:60 msgid "Published" msgstr "Zveřejněno" -#: core/tables/plugins.py:66 +#: netbox/core/tables/plugins.py:66 msgid "Installed Version" msgstr "Nainstalovaná verze" -#: core/tables/plugins.py:70 +#: netbox/core/tables/plugins.py:70 msgid "Latest Version" msgstr "Nejnovější verze" -#: core/tables/tasks.py:18 +#: netbox/core/tables/tasks.py:18 msgid "Oldest Task" msgstr "Nejstarší úkol" -#: core/tables/tasks.py:42 templates/core/rq_worker_list.html:39 +#: netbox/core/tables/tasks.py:42 netbox/templates/core/rq_worker_list.html:39 msgid "Workers" msgstr "Pracovníci" -#: core/tables/tasks.py:46 vpn/tables/tunnels.py:88 +#: netbox/core/tables/tasks.py:46 netbox/vpn/tables/tunnels.py:88 msgid "Host" msgstr "Hostitel" -#: core/tables/tasks.py:50 ipam/forms/filtersets.py:535 +#: netbox/core/tables/tasks.py:50 netbox/ipam/forms/filtersets.py:535 msgid "Port" msgstr "Přístav" -#: core/tables/tasks.py:54 +#: netbox/core/tables/tasks.py:54 msgid "DB" msgstr "DB" -#: core/tables/tasks.py:58 +#: netbox/core/tables/tasks.py:58 msgid "Scheduler PID" msgstr "Plánovač PID" -#: core/tables/tasks.py:62 +#: netbox/core/tables/tasks.py:62 msgid "No queues found" msgstr "Nebyly nalezeny žádné fronty" -#: core/tables/tasks.py:82 +#: netbox/core/tables/tasks.py:82 msgid "Enqueued" msgstr "Ve frontě" -#: core/tables/tasks.py:85 +#: netbox/core/tables/tasks.py:85 msgid "Ended" msgstr "Ukončeno" -#: core/tables/tasks.py:93 templates/core/rq_task.html:85 +#: netbox/core/tables/tasks.py:93 netbox/templates/core/rq_task.html:85 msgid "Callable" msgstr "Volatelný" -#: core/tables/tasks.py:97 +#: netbox/core/tables/tasks.py:97 msgid "No tasks found" msgstr "Nebyly nalezeny žádné úkoly" -#: core/tables/tasks.py:118 templates/core/rq_worker.html:47 +#: netbox/core/tables/tasks.py:118 netbox/templates/core/rq_worker.html:47 msgid "State" msgstr "státu" -#: core/tables/tasks.py:121 templates/core/rq_worker.html:51 +#: netbox/core/tables/tasks.py:121 netbox/templates/core/rq_worker.html:51 msgid "Birth" msgstr "Narození" -#: core/tables/tasks.py:124 templates/core/rq_worker.html:59 +#: netbox/core/tables/tasks.py:124 netbox/templates/core/rq_worker.html:59 msgid "PID" msgstr "PID" -#: core/tables/tasks.py:128 +#: netbox/core/tables/tasks.py:128 msgid "No workers found" msgstr "Nebyli nalezeni žádní pracovníci" -#: core/views.py:90 +#: netbox/core/views.py:90 #, python-brace-format msgid "Queued job #{id} to sync {datasource}" msgstr "Úloha ve frontě #{id} synchronizovat {datasource}" -#: core/views.py:319 +#: netbox/core/views.py:319 #, python-brace-format msgid "Restored configuration revision #{id}" msgstr "Obnovená revize konfigurace #{id}" -#: core/views.py:412 core/views.py:455 core/views.py:531 +#: 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" -#: core/views.py:463 +#: netbox/core/views.py:463 #, python-brace-format msgid "Job {id} has been deleted." msgstr "Práce {id} byl vymazán." -#: core/views.py:465 +#: netbox/core/views.py:465 #, python-brace-format msgid "Error deleting job {id}: {error}" msgstr "Chyba při mazání úlohy {id}: {error}" -#: core/views.py:478 core/views.py:496 +#: netbox/core/views.py:478 netbox/core/views.py:496 #, python-brace-format msgid "Job {id} not found." msgstr "Práce {id} nenalezeno." -#: core/views.py:484 +#: 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." -#: core/views.py:519 +#: netbox/core/views.py:519 #, python-brace-format msgid "Job {id} has been enqueued." msgstr "Práce {id} byl zařazen do fronty." -#: core/views.py:538 +#: netbox/core/views.py:538 #, python-brace-format msgid "Job {id} has been stopped." msgstr "Práce {id} byl zastaven." -#: core/views.py:540 +#: netbox/core/views.py:540 #, python-brace-format msgid "Failed to stop job {id}" msgstr "Nepodařilo se zastavit úlohu {id}" -#: core/views.py:678 +#: netbox/core/views.py:674 msgid "Plugins catalog could not be loaded" msgstr "Katalog pluginů nelze načíst" -#: core/views.py:712 +#: netbox/core/views.py:708 #, python-brace-format msgid "Plugin {name} not found" msgstr "Plugin {name} nenalezeno" -#: dcim/api/serializers_/devices.py:49 dcim/api/serializers_/devicetypes.py:25 +#: netbox/dcim/api/serializers_/devices.py:49 +#: netbox/dcim/api/serializers_/devicetypes.py:25 msgid "Position (U)" msgstr "Pozice (U)" -#: dcim/api/serializers_/racks.py:112 templates/dcim/rack.html:28 +#: netbox/dcim/api/serializers_/racks.py:112 +#: netbox/templates/dcim/rack.html:28 msgid "Facility ID" msgstr "ID objektu" -#: dcim/choices.py:21 virtualization/choices.py:21 +#: netbox/dcim/choices.py:21 netbox/virtualization/choices.py:21 msgid "Staging" msgstr "Inscenace" -#: dcim/choices.py:23 dcim/choices.py:189 dcim/choices.py:240 -#: dcim/choices.py:1531 virtualization/choices.py:23 -#: virtualization/choices.py:48 +#: 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 msgid "Decommissioning" msgstr "Vyřazení z provozu" -#: dcim/choices.py:24 +#: netbox/dcim/choices.py:24 msgid "Retired" msgstr "Důchodce" -#: dcim/choices.py:65 +#: netbox/dcim/choices.py:65 msgid "2-post frame" msgstr "2-sloupový rám" -#: dcim/choices.py:66 +#: netbox/dcim/choices.py:66 msgid "4-post frame" msgstr "4-sloupový rám" -#: dcim/choices.py:67 +#: netbox/dcim/choices.py:67 msgid "4-post cabinet" msgstr "4-sloupová skříňka" -#: dcim/choices.py:68 +#: netbox/dcim/choices.py:68 msgid "Wall-mounted frame" msgstr "Nástěnný rám" -#: dcim/choices.py:69 +#: netbox/dcim/choices.py:69 msgid "Wall-mounted frame (vertical)" msgstr "Nástěnný rám (vertikální)" -#: dcim/choices.py:70 +#: netbox/dcim/choices.py:70 msgid "Wall-mounted cabinet" msgstr "Nástěnná skříňka" -#: dcim/choices.py:71 +#: netbox/dcim/choices.py:71 msgid "Wall-mounted cabinet (vertical)" msgstr "Nástěnná skříň (vertikální)" -#: dcim/choices.py:83 dcim/choices.py:84 dcim/choices.py:85 dcim/choices.py:86 +#: netbox/dcim/choices.py:83 netbox/dcim/choices.py:84 +#: netbox/dcim/choices.py:85 netbox/dcim/choices.py:86 #, python-brace-format msgid "{n} inches" msgstr "{n} palců" -#: dcim/choices.py:100 ipam/choices.py:32 ipam/choices.py:50 -#: ipam/choices.py:70 ipam/choices.py:155 wireless/choices.py:26 +#: netbox/dcim/choices.py:100 netbox/ipam/choices.py:32 +#: netbox/ipam/choices.py:50 netbox/ipam/choices.py:70 +#: netbox/ipam/choices.py:155 netbox/wireless/choices.py:26 msgid "Reserved" msgstr "Rezervováno" -#: dcim/choices.py:101 templates/dcim/device.html:259 +#: netbox/dcim/choices.py:101 netbox/templates/dcim/device.html:259 msgid "Available" msgstr "K dispozici" -#: dcim/choices.py:104 ipam/choices.py:33 ipam/choices.py:51 -#: ipam/choices.py:71 ipam/choices.py:156 wireless/choices.py:28 +#: netbox/dcim/choices.py:104 netbox/ipam/choices.py:33 +#: netbox/ipam/choices.py:51 netbox/ipam/choices.py:71 +#: netbox/ipam/choices.py:156 netbox/wireless/choices.py:28 msgid "Deprecated" msgstr "Zastaralé" -#: dcim/choices.py:114 templates/dcim/inc/panels/racktype_dimensions.html:41 +#: netbox/dcim/choices.py:114 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:41 msgid "Millimeters" msgstr "Milimetry" -#: dcim/choices.py:115 dcim/choices.py:1553 +#: netbox/dcim/choices.py:115 netbox/dcim/choices.py:1555 msgid "Inches" msgstr "palce" -#: dcim/choices.py:136 dcim/choices.py:207 dcim/choices.py:254 +#: netbox/dcim/choices.py:136 netbox/dcim/choices.py:207 +#: netbox/dcim/choices.py:254 msgid "Front to rear" msgstr "Zepředu dozadu" -#: dcim/choices.py:137 dcim/choices.py:208 dcim/choices.py:255 +#: netbox/dcim/choices.py:137 netbox/dcim/choices.py:208 +#: netbox/dcim/choices.py:255 msgid "Rear to front" msgstr "Zezadu dopředu" -#: dcim/choices.py:151 dcim/forms/bulk_edit.py:68 dcim/forms/bulk_edit.py:87 -#: dcim/forms/bulk_edit.py:173 dcim/forms/bulk_edit.py:1405 -#: dcim/forms/bulk_import.py:60 dcim/forms/bulk_import.py:74 -#: dcim/forms/bulk_import.py:137 dcim/forms/bulk_import.py:566 -#: dcim/forms/bulk_import.py:833 dcim/forms/bulk_import.py:1088 -#: dcim/forms/filtersets.py:234 dcim/forms/model_forms.py:74 -#: dcim/forms/model_forms.py:93 dcim/forms/model_forms.py:170 -#: dcim/forms/model_forms.py:1062 dcim/forms/model_forms.py:1502 -#: dcim/forms/object_import.py:176 dcim/tables/devices.py:656 -#: dcim/tables/devices.py:869 dcim/tables/devices.py:954 -#: extras/tables/tables.py:223 ipam/tables/fhrp.py:59 ipam/tables/ip.py:378 -#: ipam/tables/services.py:44 templates/dcim/interface.html:102 -#: templates/dcim/interface.html:309 templates/dcim/location.html:41 -#: templates/dcim/region.html:37 templates/dcim/sitegroup.html:37 -#: templates/ipam/service.html:28 templates/tenancy/contactgroup.html:29 -#: templates/tenancy/tenantgroup.html:37 -#: templates/virtualization/vminterface.html:39 -#: templates/wireless/wirelesslangroup.html:37 tenancy/forms/bulk_edit.py:27 -#: tenancy/forms/bulk_edit.py:61 tenancy/forms/bulk_import.py:24 -#: tenancy/forms/bulk_import.py:58 tenancy/forms/model_forms.py:25 -#: tenancy/forms/model_forms.py:68 virtualization/forms/bulk_edit.py:207 -#: virtualization/forms/bulk_import.py:151 -#: virtualization/tables/virtualmachines.py:162 wireless/forms/bulk_edit.py:24 -#: wireless/forms/bulk_import.py:21 wireless/forms/model_forms.py:21 +#: 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/templates/dcim/location.html:41 netbox/templates/dcim/region.html:37 +#: netbox/templates/dcim/sitegroup.html:37 +#: netbox/templates/ipam/service.html:28 +#: netbox/templates/tenancy/contactgroup.html:29 +#: netbox/templates/tenancy/tenantgroup.html:37 +#: netbox/templates/virtualization/vminterface.html:39 +#: netbox/templates/wireless/wirelesslangroup.html:37 +#: netbox/tenancy/forms/bulk_edit.py:27 netbox/tenancy/forms/bulk_edit.py:61 +#: netbox/tenancy/forms/bulk_import.py:24 +#: netbox/tenancy/forms/bulk_import.py:58 +#: netbox/tenancy/forms/model_forms.py:25 +#: netbox/tenancy/forms/model_forms.py:68 +#: netbox/virtualization/forms/bulk_edit.py:207 +#: netbox/virtualization/forms/bulk_import.py:151 +#: netbox/virtualization/tables/virtualmachines.py:162 +#: netbox/wireless/forms/bulk_edit.py:24 +#: netbox/wireless/forms/bulk_import.py:21 +#: netbox/wireless/forms/model_forms.py:21 msgid "Parent" msgstr "Rodič" -#: dcim/choices.py:152 +#: netbox/dcim/choices.py:152 msgid "Child" msgstr "Dítě" -#: dcim/choices.py:166 templates/dcim/device.html:340 -#: templates/dcim/rack.html:133 templates/dcim/rack_elevation_list.html:20 -#: templates/dcim/rackreservation.html:76 +#: netbox/dcim/choices.py:166 netbox/templates/dcim/device.html:340 +#: netbox/templates/dcim/rack.html:133 +#: netbox/templates/dcim/rack_elevation_list.html:20 +#: netbox/templates/dcim/rackreservation.html:76 msgid "Front" msgstr "Přední" -#: dcim/choices.py:167 templates/dcim/device.html:346 -#: templates/dcim/rack.html:139 templates/dcim/rack_elevation_list.html:21 -#: templates/dcim/rackreservation.html:82 +#: netbox/dcim/choices.py:167 netbox/templates/dcim/device.html:346 +#: netbox/templates/dcim/rack.html:139 +#: netbox/templates/dcim/rack_elevation_list.html:21 +#: netbox/templates/dcim/rackreservation.html:82 msgid "Rear" msgstr "Zadní" -#: dcim/choices.py:186 dcim/choices.py:238 virtualization/choices.py:46 +#: netbox/dcim/choices.py:186 netbox/dcim/choices.py:238 +#: netbox/virtualization/choices.py:46 msgid "Staged" msgstr "Inscenovaný" -#: dcim/choices.py:188 +#: netbox/dcim/choices.py:188 msgid "Inventory" msgstr "Inventář" -#: dcim/choices.py:209 dcim/choices.py:256 +#: netbox/dcim/choices.py:209 netbox/dcim/choices.py:256 msgid "Left to right" msgstr "Zleva doprava" -#: dcim/choices.py:210 dcim/choices.py:257 +#: netbox/dcim/choices.py:210 netbox/dcim/choices.py:257 msgid "Right to left" msgstr "Zprava doleva" -#: dcim/choices.py:211 dcim/choices.py:258 +#: netbox/dcim/choices.py:211 netbox/dcim/choices.py:258 msgid "Side to rear" msgstr "Ze strany dozadu" -#: dcim/choices.py:212 +#: netbox/dcim/choices.py:212 msgid "Rear to side" msgstr "Zezadu na stranu" -#: dcim/choices.py:213 +#: netbox/dcim/choices.py:213 msgid "Bottom to top" msgstr "Zdola nahoru" -#: dcim/choices.py:214 +#: netbox/dcim/choices.py:214 msgid "Top to bottom" msgstr "Nahoru dolů" -#: dcim/choices.py:215 dcim/choices.py:259 dcim/choices.py:1303 +#: netbox/dcim/choices.py:215 netbox/dcim/choices.py:259 +#: netbox/dcim/choices.py:1305 msgid "Passive" msgstr "pasivní" -#: dcim/choices.py:216 +#: netbox/dcim/choices.py:216 msgid "Mixed" msgstr "Smíšené" -#: dcim/choices.py:484 dcim/choices.py:733 +#: netbox/dcim/choices.py:484 netbox/dcim/choices.py:733 msgid "NEMA (Non-locking)" msgstr "NEMA (bez blokování)" -#: dcim/choices.py:506 dcim/choices.py:755 +#: netbox/dcim/choices.py:506 netbox/dcim/choices.py:755 msgid "NEMA (Locking)" msgstr "NEMA (zamykání)" -#: dcim/choices.py:530 dcim/choices.py:779 +#: netbox/dcim/choices.py:530 netbox/dcim/choices.py:779 msgid "California Style" msgstr "Kalifornský styl" -#: dcim/choices.py:538 +#: netbox/dcim/choices.py:538 msgid "International/ITA" msgstr "Mezinárodní/ITA" -#: dcim/choices.py:573 dcim/choices.py:814 +#: netbox/dcim/choices.py:573 netbox/dcim/choices.py:814 msgid "Proprietary" msgstr "Proprietární" -#: dcim/choices.py:581 dcim/choices.py:824 dcim/choices.py:1219 -#: dcim/choices.py:1221 dcim/choices.py:1447 dcim/choices.py:1449 -#: netbox/navigation/menu.py:200 +#: 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 msgid "Other" msgstr "Ostatní" -#: dcim/choices.py:787 +#: netbox/dcim/choices.py:787 msgid "ITA/International" msgstr "ITA/Mezinárodní" -#: dcim/choices.py:854 +#: netbox/dcim/choices.py:854 msgid "Physical" msgstr "Fyzické" -#: dcim/choices.py:855 dcim/choices.py:1023 +#: netbox/dcim/choices.py:855 netbox/dcim/choices.py:1024 msgid "Virtual" msgstr "Virtuální" -#: dcim/choices.py:856 dcim/choices.py:1097 dcim/forms/bulk_edit.py:1515 -#: dcim/forms/filtersets.py:1330 dcim/forms/model_forms.py:988 -#: dcim/forms/model_forms.py:1397 netbox/navigation/menu.py:140 -#: netbox/navigation/menu.py:144 templates/dcim/interface.html:210 +#: 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 msgid "Wireless" msgstr "Bezdrátové" -#: dcim/choices.py:1021 +#: netbox/dcim/choices.py:1022 msgid "Virtual interfaces" msgstr "Virtuální rozhraní" -#: dcim/choices.py:1024 dcim/forms/bulk_edit.py:1410 -#: dcim/forms/bulk_import.py:840 dcim/forms/model_forms.py:974 -#: dcim/tables/devices.py:660 templates/dcim/interface.html:106 -#: templates/virtualization/vminterface.html:43 -#: virtualization/forms/bulk_edit.py:212 -#: virtualization/forms/bulk_import.py:158 -#: virtualization/tables/virtualmachines.py:166 +#: 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/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 msgid "Bridge" msgstr "Most" -#: dcim/choices.py:1025 +#: netbox/dcim/choices.py:1026 msgid "Link Aggregation Group (LAG)" msgstr "Agregační skupina (LAG)" -#: dcim/choices.py:1029 +#: netbox/dcim/choices.py:1030 msgid "Ethernet (fixed)" msgstr "Ethernet (pevný)" -#: dcim/choices.py:1044 +#: netbox/dcim/choices.py:1046 msgid "Ethernet (modular)" msgstr "Ethernet (modulární)" -#: dcim/choices.py:1081 +#: netbox/dcim/choices.py:1083 msgid "Ethernet (backplane)" msgstr "Ethernet (propojovací deska)" -#: dcim/choices.py:1113 +#: netbox/dcim/choices.py:1115 msgid "Cellular" msgstr "Buněčný" -#: dcim/choices.py:1165 dcim/forms/filtersets.py:383 -#: dcim/forms/filtersets.py:809 dcim/forms/filtersets.py:963 -#: dcim/forms/filtersets.py:1542 templates/dcim/inventoryitem.html:52 -#: templates/dcim/virtualchassis_edit.html:54 +#: 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/templates/dcim/virtualchassis_edit.html:54 msgid "Serial" msgstr "Sériový" -#: dcim/choices.py:1180 +#: netbox/dcim/choices.py:1182 msgid "Coaxial" msgstr "Koaxiální" -#: dcim/choices.py:1200 +#: netbox/dcim/choices.py:1202 msgid "Stacking" msgstr "Stohování" -#: dcim/choices.py:1250 +#: netbox/dcim/choices.py:1252 msgid "Half" msgstr "Poloviční" -#: dcim/choices.py:1251 +#: netbox/dcim/choices.py:1253 msgid "Full" msgstr "Plný" -#: dcim/choices.py:1252 netbox/preferences.py:31 wireless/choices.py:480 +#: netbox/dcim/choices.py:1254 netbox/netbox/preferences.py:31 +#: netbox/wireless/choices.py:480 msgid "Auto" msgstr "Auto" -#: dcim/choices.py:1263 +#: netbox/dcim/choices.py:1265 msgid "Access" msgstr "Přístup" -#: dcim/choices.py:1264 ipam/tables/vlans.py:172 ipam/tables/vlans.py:217 -#: templates/dcim/inc/interface_vlans_table.html:7 +#: 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" -#: dcim/choices.py:1265 +#: netbox/dcim/choices.py:1267 msgid "Tagged (All)" msgstr "Označeno (Vše)" -#: dcim/choices.py:1294 +#: netbox/dcim/choices.py:1296 msgid "IEEE Standard" msgstr "Norma IEEE" -#: dcim/choices.py:1305 +#: netbox/dcim/choices.py:1307 msgid "Passive 24V (2-pair)" msgstr "Pasivní 24V (2 páry)" -#: dcim/choices.py:1306 +#: netbox/dcim/choices.py:1308 msgid "Passive 24V (4-pair)" msgstr "Pasivní 24V (4 páry)" -#: dcim/choices.py:1307 +#: netbox/dcim/choices.py:1309 msgid "Passive 48V (2-pair)" msgstr "Pasivní 48V (2 páry)" -#: dcim/choices.py:1308 +#: netbox/dcim/choices.py:1310 msgid "Passive 48V (4-pair)" msgstr "Pasivní 48V (4 páry)" -#: dcim/choices.py:1378 dcim/choices.py:1488 +#: netbox/dcim/choices.py:1380 netbox/dcim/choices.py:1490 msgid "Copper" msgstr "měď" -#: dcim/choices.py:1401 +#: netbox/dcim/choices.py:1403 msgid "Fiber Optic" msgstr "Optická vlákna" -#: dcim/choices.py:1434 dcim/choices.py:1517 +#: netbox/dcim/choices.py:1436 netbox/dcim/choices.py:1519 msgid "USB" msgstr "USB" -#: dcim/choices.py:1504 +#: netbox/dcim/choices.py:1506 msgid "Fiber" msgstr "Vlákno" -#: dcim/choices.py:1529 dcim/forms/filtersets.py:1227 +#: netbox/dcim/choices.py:1531 netbox/dcim/forms/filtersets.py:1227 msgid "Connected" msgstr "Připojeno" -#: dcim/choices.py:1548 wireless/choices.py:497 +#: netbox/dcim/choices.py:1550 netbox/wireless/choices.py:497 msgid "Kilometers" msgstr "Kilometry" -#: dcim/choices.py:1549 templates/dcim/cable_trace.html:65 -#: wireless/choices.py:498 +#: netbox/dcim/choices.py:1551 netbox/templates/dcim/cable_trace.html:65 +#: netbox/wireless/choices.py:498 msgid "Meters" msgstr "Metry" -#: dcim/choices.py:1550 +#: netbox/dcim/choices.py:1552 msgid "Centimeters" msgstr "Centimetry" -#: dcim/choices.py:1551 wireless/choices.py:499 +#: netbox/dcim/choices.py:1553 netbox/wireless/choices.py:499 msgid "Miles" msgstr "Míle" -#: dcim/choices.py:1552 templates/dcim/cable_trace.html:66 -#: wireless/choices.py:500 +#: netbox/dcim/choices.py:1554 netbox/templates/dcim/cable_trace.html:66 +#: netbox/wireless/choices.py:500 msgid "Feet" msgstr "Stopy" -#: dcim/choices.py:1568 templates/dcim/device.html:327 -#: templates/dcim/rack.html:107 +#: netbox/dcim/choices.py:1570 netbox/templates/dcim/device.html:327 +#: netbox/templates/dcim/rack.html:107 msgid "Kilograms" msgstr "Kilogramy" -#: dcim/choices.py:1569 +#: netbox/dcim/choices.py:1571 msgid "Grams" msgstr "Gramy" -#: dcim/choices.py:1570 templates/dcim/device.html:328 -#: templates/dcim/rack.html:108 +#: netbox/dcim/choices.py:1572 netbox/templates/dcim/device.html:328 +#: netbox/templates/dcim/rack.html:108 msgid "Pounds" msgstr "libry" -#: dcim/choices.py:1571 +#: netbox/dcim/choices.py:1573 msgid "Ounces" msgstr "Unce" -#: dcim/choices.py:1618 +#: netbox/dcim/choices.py:1620 msgid "Redundant" msgstr "Redundantní" -#: dcim/choices.py:1639 +#: netbox/dcim/choices.py:1641 msgid "Single phase" msgstr "Jednofázový" -#: dcim/choices.py:1640 +#: netbox/dcim/choices.py:1642 msgid "Three-phase" msgstr "Třífázový" -#: dcim/fields.py:45 +#: netbox/dcim/fields.py:45 #, python-brace-format msgid "Invalid MAC address format: {value}" msgstr "Neplatný formát MAC adresy: {value}" -#: dcim/fields.py:71 +#: netbox/dcim/fields.py:71 #, python-brace-format msgid "Invalid WWN format: {value}" msgstr "Neplatný formát WWN: {value}" -#: dcim/filtersets.py:86 +#: netbox/dcim/filtersets.py:86 msgid "Parent region (ID)" msgstr "Nadřazená oblast (ID)" -#: dcim/filtersets.py:92 +#: netbox/dcim/filtersets.py:92 msgid "Parent region (slug)" msgstr "Nadřazená oblast (URL zkratka)" -#: dcim/filtersets.py:116 +#: netbox/dcim/filtersets.py:116 msgid "Parent site group (ID)" msgstr "Nadřazená skupina webů (ID)" -#: dcim/filtersets.py:122 +#: netbox/dcim/filtersets.py:122 msgid "Parent site group (slug)" msgstr "Nadřazená skupina stránek (slimák)" -#: dcim/filtersets.py:164 extras/filtersets.py:364 ipam/filtersets.py:841 -#: ipam/filtersets.py:993 +#: netbox/dcim/filtersets.py:164 netbox/extras/filtersets.py:364 +#: netbox/ipam/filtersets.py:843 netbox/ipam/filtersets.py:995 msgid "Group (ID)" msgstr "Skupina (ID)" -#: dcim/filtersets.py:170 +#: netbox/dcim/filtersets.py:170 msgid "Group (slug)" msgstr "Skupina (slug)" -#: dcim/filtersets.py:176 dcim/filtersets.py:181 +#: netbox/dcim/filtersets.py:176 netbox/dcim/filtersets.py:181 msgid "AS (ID)" msgstr "AS (ID)" -#: dcim/filtersets.py:246 +#: netbox/dcim/filtersets.py:246 msgid "Parent location (ID)" msgstr "Nadřazené umístění (ID)" -#: dcim/filtersets.py:252 +#: netbox/dcim/filtersets.py:252 msgid "Parent location (slug)" msgstr "Rodičovské umístění (slug)" -#: dcim/filtersets.py:258 dcim/filtersets.py:369 dcim/filtersets.py:490 -#: dcim/filtersets.py:1057 dcim/filtersets.py:1404 dcim/filtersets.py:2182 +#: 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 "Umístění (ID)" -#: dcim/filtersets.py:265 dcim/filtersets.py:376 dcim/filtersets.py:497 -#: dcim/filtersets.py:1410 extras/filtersets.py:542 +#: 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 "Umístění (slug)" -#: dcim/filtersets.py:296 dcim/filtersets.py:381 dcim/filtersets.py:539 -#: dcim/filtersets.py:678 dcim/filtersets.py:882 dcim/filtersets.py:933 -#: dcim/filtersets.py:973 dcim/filtersets.py:1306 dcim/filtersets.py:1840 +#: 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 msgid "Manufacturer (ID)" msgstr "Výrobce (ID)" -#: dcim/filtersets.py:302 dcim/filtersets.py:387 dcim/filtersets.py:545 -#: dcim/filtersets.py:684 dcim/filtersets.py:888 dcim/filtersets.py:939 -#: dcim/filtersets.py:979 dcim/filtersets.py:1312 dcim/filtersets.py:1846 +#: 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 msgid "Manufacturer (slug)" msgstr "Výrobce (slug)" -#: dcim/filtersets.py:393 +#: netbox/dcim/filtersets.py:393 msgid "Rack type (slug)" msgstr "Typ stojanu (slug)" -#: dcim/filtersets.py:397 +#: netbox/dcim/filtersets.py:397 msgid "Rack type (ID)" msgstr "Typ stojanu (ID)" -#: dcim/filtersets.py:411 dcim/filtersets.py:892 dcim/filtersets.py:994 -#: dcim/filtersets.py:1850 ipam/filtersets.py:381 ipam/filtersets.py:493 -#: ipam/filtersets.py:1003 virtualization/filtersets.py:210 +#: 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 msgid "Role (ID)" msgstr "Role (ID)" -#: dcim/filtersets.py:417 dcim/filtersets.py:898 dcim/filtersets.py:1000 -#: dcim/filtersets.py:1856 extras/filtersets.py:558 ipam/filtersets.py:387 -#: ipam/filtersets.py:499 ipam/filtersets.py:1009 -#: virtualization/filtersets.py:216 +#: 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 msgid "Role (slug)" msgstr "Role (slug)" -#: dcim/filtersets.py:447 dcim/filtersets.py:1062 dcim/filtersets.py:1415 -#: dcim/filtersets.py:2244 +#: netbox/dcim/filtersets.py:447 netbox/dcim/filtersets.py:1062 +#: netbox/dcim/filtersets.py:1415 netbox/dcim/filtersets.py:2244 msgid "Rack (ID)" msgstr "Stojan (ID)" -#: dcim/filtersets.py:507 extras/filtersets.py:293 extras/filtersets.py:337 -#: extras/filtersets.py:359 extras/filtersets.py:419 users/filtersets.py:113 -#: users/filtersets.py:180 +#: netbox/dcim/filtersets.py:507 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živatel (jméno)" -#: dcim/filtersets.py:549 +#: netbox/dcim/filtersets.py:549 msgid "Default platform (ID)" msgstr "Výchozí platforma (ID)" -#: dcim/filtersets.py:555 +#: netbox/dcim/filtersets.py:555 msgid "Default platform (slug)" msgstr "Výchozí platforma (slug)" -#: dcim/filtersets.py:558 dcim/forms/filtersets.py:517 +#: netbox/dcim/filtersets.py:558 netbox/dcim/forms/filtersets.py:517 msgid "Has a front image" msgstr "Má přední obrázek" -#: dcim/filtersets.py:562 dcim/forms/filtersets.py:524 +#: netbox/dcim/filtersets.py:562 netbox/dcim/forms/filtersets.py:524 msgid "Has a rear image" msgstr "Má zadní obrázek" -#: dcim/filtersets.py:567 dcim/filtersets.py:688 dcim/filtersets.py:1131 -#: dcim/forms/filtersets.py:531 dcim/forms/filtersets.py:627 -#: dcim/forms/filtersets.py:848 +#: 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 msgid "Has console ports" msgstr "Má konzolové porty" -#: dcim/filtersets.py:571 dcim/filtersets.py:692 dcim/filtersets.py:1135 -#: dcim/forms/filtersets.py:538 dcim/forms/filtersets.py:634 -#: dcim/forms/filtersets.py:855 +#: 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 msgid "Has console server ports" msgstr "Má porty konzolového serveru" -#: dcim/filtersets.py:575 dcim/filtersets.py:696 dcim/filtersets.py:1139 -#: dcim/forms/filtersets.py:545 dcim/forms/filtersets.py:641 -#: dcim/forms/filtersets.py:862 +#: 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 msgid "Has power ports" msgstr "Má napájecí porty" -#: dcim/filtersets.py:579 dcim/filtersets.py:700 dcim/filtersets.py:1143 -#: dcim/forms/filtersets.py:552 dcim/forms/filtersets.py:648 -#: dcim/forms/filtersets.py:869 +#: 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 msgid "Has power outlets" msgstr "Má elektrické zásuvky" -#: dcim/filtersets.py:583 dcim/filtersets.py:704 dcim/filtersets.py:1147 -#: dcim/forms/filtersets.py:559 dcim/forms/filtersets.py:655 -#: dcim/forms/filtersets.py:876 +#: 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 msgid "Has interfaces" msgstr "Má rozhraní" -#: dcim/filtersets.py:587 dcim/filtersets.py:708 dcim/filtersets.py:1151 -#: dcim/forms/filtersets.py:566 dcim/forms/filtersets.py:662 -#: dcim/forms/filtersets.py:883 +#: 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 msgid "Has pass-through ports" msgstr "Má průchozí porty" -#: dcim/filtersets.py:591 dcim/filtersets.py:1155 dcim/forms/filtersets.py:580 +#: netbox/dcim/filtersets.py:591 netbox/dcim/filtersets.py:1155 +#: netbox/dcim/forms/filtersets.py:580 msgid "Has module bays" msgstr "Má pozice pro moduly" -#: dcim/filtersets.py:595 dcim/filtersets.py:1159 dcim/forms/filtersets.py:573 +#: netbox/dcim/filtersets.py:595 netbox/dcim/filtersets.py:1159 +#: netbox/dcim/forms/filtersets.py:573 msgid "Has device bays" msgstr "Má pozice pro zařízení" -#: dcim/filtersets.py:599 dcim/forms/filtersets.py:587 +#: netbox/dcim/filtersets.py:599 netbox/dcim/forms/filtersets.py:587 msgid "Has inventory items" msgstr "Má položky inventáře" -#: dcim/filtersets.py:756 dcim/filtersets.py:989 dcim/filtersets.py:1436 +#: netbox/dcim/filtersets.py:756 netbox/dcim/filtersets.py:989 +#: netbox/dcim/filtersets.py:1436 msgid "Device type (ID)" msgstr "Typ zařízení (ID)" -#: dcim/filtersets.py:772 dcim/filtersets.py:1317 +#: netbox/dcim/filtersets.py:772 netbox/dcim/filtersets.py:1317 msgid "Module type (ID)" msgstr "Typ modulu (ID)" -#: dcim/filtersets.py:804 dcim/filtersets.py:1591 +#: netbox/dcim/filtersets.py:804 netbox/dcim/filtersets.py:1591 msgid "Power port (ID)" msgstr "Napájecí port (ID)" -#: dcim/filtersets.py:878 dcim/filtersets.py:1836 +#: netbox/dcim/filtersets.py:878 netbox/dcim/filtersets.py:1836 msgid "Parent inventory item (ID)" msgstr "Nadřazená položka inventáře (ID)" -#: dcim/filtersets.py:921 dcim/filtersets.py:947 dcim/filtersets.py:1127 -#: virtualization/filtersets.py:238 +#: netbox/dcim/filtersets.py:921 netbox/dcim/filtersets.py:947 +#: netbox/dcim/filtersets.py:1127 netbox/virtualization/filtersets.py:238 msgid "Config template (ID)" msgstr "Konfigurační šablona (ID)" -#: dcim/filtersets.py:985 +#: netbox/dcim/filtersets.py:985 msgid "Device type (slug)" msgstr "Typ zařízení (slug)" -#: dcim/filtersets.py:1005 +#: netbox/dcim/filtersets.py:1005 msgid "Parent Device (ID)" msgstr "Rodičovské zařízení (ID)" -#: dcim/filtersets.py:1009 virtualization/filtersets.py:220 +#: netbox/dcim/filtersets.py:1009 netbox/virtualization/filtersets.py:220 msgid "Platform (ID)" msgstr "Platforma (ID)" -#: dcim/filtersets.py:1015 extras/filtersets.py:569 -#: virtualization/filtersets.py:226 +#: netbox/dcim/filtersets.py:1015 netbox/extras/filtersets.py:569 +#: netbox/virtualization/filtersets.py:226 msgid "Platform (slug)" msgstr "Platforma (URL zkratka)" -#: dcim/filtersets.py:1051 dcim/filtersets.py:1399 dcim/filtersets.py:1934 -#: dcim/filtersets.py:2176 dcim/filtersets.py:2235 +#: 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 msgid "Site name (slug)" msgstr "Název lokality (slug)" -#: dcim/filtersets.py:1067 +#: netbox/dcim/filtersets.py:1067 msgid "Parent bay (ID)" msgstr "Rodičovská zátoka (ID)" -#: dcim/filtersets.py:1071 +#: netbox/dcim/filtersets.py:1071 msgid "VM cluster (ID)" msgstr "Cluster virtuálních počítačů (ID)" -#: dcim/filtersets.py:1077 extras/filtersets.py:591 -#: virtualization/filtersets.py:136 +#: netbox/dcim/filtersets.py:1077 netbox/extras/filtersets.py:591 +#: netbox/virtualization/filtersets.py:136 msgid "Cluster group (slug)" msgstr "Skupina klastru (slug)" -#: dcim/filtersets.py:1082 virtualization/filtersets.py:130 +#: netbox/dcim/filtersets.py:1082 netbox/virtualization/filtersets.py:130 msgid "Cluster group (ID)" msgstr "Skupina clusteru (ID)" -#: dcim/filtersets.py:1088 +#: netbox/dcim/filtersets.py:1088 msgid "Device model (slug)" msgstr "Model zařízení (slug)" -#: dcim/filtersets.py:1099 dcim/forms/bulk_edit.py:516 +#: netbox/dcim/filtersets.py:1099 netbox/dcim/forms/bulk_edit.py:522 msgid "Is full depth" msgstr "Je plná hloubka" -#: dcim/filtersets.py:1103 dcim/forms/common.py:18 -#: dcim/forms/filtersets.py:818 dcim/forms/filtersets.py:1385 -#: dcim/models/device_components.py:518 virtualization/filtersets.py:230 -#: virtualization/filtersets.py:301 virtualization/forms/filtersets.py:172 -#: virtualization/forms/filtersets.py:223 +#: 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 msgid "MAC address" msgstr "MAC adresa" -#: dcim/filtersets.py:1110 dcim/filtersets.py:1274 -#: dcim/forms/filtersets.py:827 dcim/forms/filtersets.py:930 -#: virtualization/filtersets.py:234 virtualization/forms/filtersets.py:176 +#: 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 msgid "Has a primary IP" msgstr "Má primární IP" -#: dcim/filtersets.py:1114 +#: netbox/dcim/filtersets.py:1114 msgid "Has an out-of-band IP" msgstr "Má IP mimo pásmo" -#: dcim/filtersets.py:1119 +#: netbox/dcim/filtersets.py:1119 msgid "Virtual chassis (ID)" msgstr "Virtuální podvozek (ID)" -#: dcim/filtersets.py:1123 +#: netbox/dcim/filtersets.py:1123 msgid "Is a virtual chassis member" msgstr "Je virtuální člen šasi" -#: dcim/filtersets.py:1164 +#: netbox/dcim/filtersets.py:1164 msgid "OOB IP (ID)" msgstr "OOB IP (ID)" -#: dcim/filtersets.py:1168 +#: netbox/dcim/filtersets.py:1168 msgid "Has virtual device context" msgstr "Má kontext virtuálního zařízení" -#: dcim/filtersets.py:1257 +#: netbox/dcim/filtersets.py:1257 msgid "VDC (ID)" msgstr "VDC (ID)" -#: dcim/filtersets.py:1262 +#: netbox/dcim/filtersets.py:1262 msgid "Device model" msgstr "Model zařízení" -#: dcim/filtersets.py:1267 ipam/filtersets.py:632 vpn/filtersets.py:102 -#: vpn/filtersets.py:401 +#: netbox/dcim/filtersets.py:1267 netbox/ipam/filtersets.py:634 +#: netbox/vpn/filtersets.py:102 netbox/vpn/filtersets.py:401 msgid "Interface (ID)" msgstr "Rozhraní (ID)" -#: dcim/filtersets.py:1323 +#: netbox/dcim/filtersets.py:1323 msgid "Module type (model)" msgstr "Typ modulu (model)" -#: dcim/filtersets.py:1329 +#: netbox/dcim/filtersets.py:1329 msgid "Module bay (ID)" msgstr "Modulová přihrádka (ID)" -#: dcim/filtersets.py:1333 dcim/filtersets.py:1425 ipam/filtersets.py:611 -#: ipam/filtersets.py:851 ipam/filtersets.py:1115 -#: virtualization/filtersets.py:161 vpn/filtersets.py:379 +#: 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 msgid "Device (ID)" msgstr "Zařízení (ID)" -#: dcim/filtersets.py:1421 +#: netbox/dcim/filtersets.py:1421 msgid "Rack (name)" msgstr "Stojan (název)" -#: dcim/filtersets.py:1431 ipam/filtersets.py:606 ipam/filtersets.py:846 -#: ipam/filtersets.py:1121 vpn/filtersets.py:374 +#: 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 "Zařízení (název)" -#: dcim/filtersets.py:1442 +#: netbox/dcim/filtersets.py:1442 msgid "Device type (model)" msgstr "Typ zařízení (model)" -#: dcim/filtersets.py:1447 +#: netbox/dcim/filtersets.py:1447 msgid "Device role (ID)" msgstr "Role zařízení (ID)" -#: dcim/filtersets.py:1453 +#: netbox/dcim/filtersets.py:1453 msgid "Device role (slug)" msgstr "Role zařízení (slug)" -#: dcim/filtersets.py:1458 +#: netbox/dcim/filtersets.py:1458 msgid "Virtual Chassis (ID)" msgstr "Virtuální šasi (ID)" -#: dcim/filtersets.py:1464 dcim/forms/filtersets.py:109 -#: dcim/tables/devices.py:206 netbox/navigation/menu.py:79 -#: templates/dcim/device.html:120 templates/dcim/device_edit.html:93 -#: templates/dcim/virtualchassis.html:20 -#: templates/dcim/virtualchassis_add.html:8 -#: templates/dcim/virtualchassis_edit.html:24 +#: netbox/dcim/filtersets.py:1464 netbox/dcim/forms/filtersets.py:109 +#: netbox/dcim/tables/devices.py:206 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 +#: netbox/templates/dcim/virtualchassis_add.html:8 +#: netbox/templates/dcim/virtualchassis_edit.html:24 msgid "Virtual Chassis" msgstr "Virtuální šasi" -#: dcim/filtersets.py:1488 +#: netbox/dcim/filtersets.py:1488 msgid "Module (ID)" msgstr "Modul (ID)" -#: dcim/filtersets.py:1495 +#: netbox/dcim/filtersets.py:1495 msgid "Cable (ID)" msgstr "Kabel (ID)" -#: dcim/filtersets.py:1604 ipam/forms/bulk_import.py:189 -#: vpn/forms/bulk_import.py:308 +#: netbox/dcim/filtersets.py:1604 netbox/ipam/forms/bulk_import.py:189 +#: netbox/vpn/forms/bulk_import.py:308 msgid "Assigned VLAN" msgstr "Přiřazená VLAN" -#: dcim/filtersets.py:1608 +#: netbox/dcim/filtersets.py:1608 msgid "Assigned VID" msgstr "Přiřazené VID" -#: dcim/filtersets.py:1613 dcim/forms/bulk_edit.py:1489 -#: dcim/forms/bulk_import.py:891 dcim/forms/filtersets.py:1428 -#: dcim/forms/model_forms.py:1378 dcim/models/device_components.py:711 -#: dcim/tables/devices.py:626 ipam/filtersets.py:316 ipam/filtersets.py:327 -#: ipam/filtersets.py:483 ipam/filtersets.py:584 ipam/filtersets.py:595 -#: ipam/forms/bulk_edit.py:242 ipam/forms/bulk_edit.py:298 -#: ipam/forms/bulk_edit.py:340 ipam/forms/bulk_import.py:157 -#: ipam/forms/bulk_import.py:243 ipam/forms/bulk_import.py:279 -#: ipam/forms/filtersets.py:67 ipam/forms/filtersets.py:172 -#: ipam/forms/filtersets.py:309 ipam/forms/model_forms.py:62 -#: ipam/forms/model_forms.py:202 ipam/forms/model_forms.py:247 -#: ipam/forms/model_forms.py:300 ipam/forms/model_forms.py:431 -#: ipam/forms/model_forms.py:445 ipam/forms/model_forms.py:459 -#: ipam/models/ip.py:233 ipam/models/ip.py:512 ipam/models/ip.py:720 -#: ipam/models/vrfs.py:62 ipam/tables/ip.py:242 ipam/tables/ip.py:309 -#: ipam/tables/ip.py:360 ipam/tables/ip.py:450 -#: templates/dcim/interface.html:133 templates/ipam/ipaddress.html:18 -#: templates/ipam/iprange.html:40 templates/ipam/prefix.html:19 -#: templates/ipam/vrf.html:7 templates/ipam/vrf.html:13 -#: templates/virtualization/vminterface.html:47 -#: virtualization/forms/bulk_edit.py:261 -#: virtualization/forms/bulk_import.py:171 -#: virtualization/forms/filtersets.py:228 -#: virtualization/forms/model_forms.py:344 -#: virtualization/models/virtualmachines.py:355 -#: virtualization/tables/virtualmachines.py:143 +#: 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/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 msgid "VRF" msgstr "VRF" -#: dcim/filtersets.py:1619 ipam/filtersets.py:322 ipam/filtersets.py:333 -#: ipam/filtersets.py:489 ipam/filtersets.py:590 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)" -#: dcim/filtersets.py:1624 ipam/filtersets.py:1030 vpn/filtersets.py:342 +#: netbox/dcim/filtersets.py:1624 netbox/ipam/filtersets.py:1032 +#: netbox/vpn/filtersets.py:342 msgid "L2VPN (ID)" msgstr "L2VPN (ID)" -#: dcim/filtersets.py:1630 dcim/forms/filtersets.py:1433 -#: dcim/tables/devices.py:570 ipam/filtersets.py:1036 -#: ipam/forms/filtersets.py:518 ipam/tables/vlans.py:137 -#: templates/dcim/interface.html:93 templates/ipam/vlan.html:66 -#: templates/vpn/l2vpntermination.html:12 -#: virtualization/forms/filtersets.py:233 vpn/forms/bulk_import.py:280 -#: vpn/forms/filtersets.py:246 vpn/forms/model_forms.py:409 -#: vpn/forms/model_forms.py:427 vpn/models/l2vpn.py:63 vpn/tables/l2vpn.py:55 +#: netbox/dcim/filtersets.py: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/templates/vpn/l2vpntermination.html:12 +#: netbox/virtualization/forms/filtersets.py:233 +#: netbox/vpn/forms/bulk_import.py:280 netbox/vpn/forms/filtersets.py:246 +#: netbox/vpn/forms/model_forms.py:409 netbox/vpn/forms/model_forms.py:427 +#: netbox/vpn/models/l2vpn.py:63 netbox/vpn/tables/l2vpn.py:55 msgid "L2VPN" msgstr "L2VPN" -#: dcim/filtersets.py:1662 +#: netbox/dcim/filtersets.py:1662 msgid "Virtual Chassis Interfaces for Device" msgstr "Virtuální rozhraní šasi pro zařízení" -#: dcim/filtersets.py:1667 +#: netbox/dcim/filtersets.py:1667 msgid "Virtual Chassis Interfaces for Device (ID)" msgstr "Virtuální rozhraní šasi pro zařízení (ID)" -#: dcim/filtersets.py:1671 +#: netbox/dcim/filtersets.py:1671 msgid "Kind of interface" msgstr "Druh rozhraní" -#: dcim/filtersets.py:1676 virtualization/filtersets.py:293 +#: netbox/dcim/filtersets.py:1676 netbox/virtualization/filtersets.py:293 msgid "Parent interface (ID)" msgstr "Rodičovské rozhraní (ID)" -#: dcim/filtersets.py:1681 virtualization/filtersets.py:298 +#: netbox/dcim/filtersets.py:1681 netbox/virtualization/filtersets.py:298 msgid "Bridged interface (ID)" msgstr "Přemostěné rozhraní (ID)" -#: dcim/filtersets.py:1686 +#: netbox/dcim/filtersets.py:1686 msgid "LAG interface (ID)" msgstr "Rozhraní LAG (ID)" -#: dcim/filtersets.py:1713 dcim/filtersets.py:1725 -#: dcim/forms/filtersets.py:1345 dcim/forms/model_forms.py:1690 -#: templates/dcim/virtualdevicecontext.html:15 +#: netbox/dcim/filtersets.py:1713 netbox/dcim/filtersets.py:1725 +#: netbox/dcim/forms/filtersets.py:1345 netbox/dcim/forms/model_forms.py:1697 +#: netbox/templates/dcim/virtualdevicecontext.html:15 msgid "Virtual Device Context" msgstr "Kontext virtuálního zařízení" -#: dcim/filtersets.py:1719 +#: netbox/dcim/filtersets.py:1719 msgid "Virtual Device Context (Identifier)" msgstr "Kontext virtuálního zařízení (identifikátor)" -#: dcim/filtersets.py:1730 templates/wireless/wirelesslan.html:11 -#: wireless/forms/model_forms.py:53 +#: netbox/dcim/filtersets.py:1730 +#: netbox/templates/wireless/wirelesslan.html:11 +#: netbox/wireless/forms/model_forms.py:53 msgid "Wireless LAN" msgstr "Bezdrátová síť LAN" -#: dcim/filtersets.py:1734 dcim/tables/devices.py:613 +#: netbox/dcim/filtersets.py:1734 netbox/dcim/tables/devices.py:613 msgid "Wireless link" msgstr "Bezdrátové spojení" -#: dcim/filtersets.py:1803 +#: netbox/dcim/filtersets.py:1803 msgid "Parent module bay (ID)" msgstr "Pozice nadřazeného modulu (ID)" -#: dcim/filtersets.py:1808 +#: netbox/dcim/filtersets.py:1808 msgid "Installed module (ID)" msgstr "Instalovaný modul (ID)" -#: dcim/filtersets.py:1819 +#: netbox/dcim/filtersets.py:1819 msgid "Installed device (ID)" msgstr "Instalované zařízení (ID)" -#: dcim/filtersets.py:1825 +#: netbox/dcim/filtersets.py:1825 msgid "Installed device (name)" msgstr "Instalované zařízení (název)" -#: dcim/filtersets.py:1891 +#: netbox/dcim/filtersets.py:1891 msgid "Master (ID)" msgstr "Mistr (ID)" -#: dcim/filtersets.py:1897 +#: netbox/dcim/filtersets.py:1897 msgid "Master (name)" msgstr "Mistr (jméno)" -#: dcim/filtersets.py:1939 tenancy/filtersets.py:245 +#: netbox/dcim/filtersets.py:1939 netbox/tenancy/filtersets.py:245 msgid "Tenant (ID)" msgstr "Nájemce (ID)" -#: dcim/filtersets.py:1945 extras/filtersets.py:618 tenancy/filtersets.py:251 +#: netbox/dcim/filtersets.py:1945 netbox/extras/filtersets.py:618 +#: netbox/tenancy/filtersets.py:251 msgid "Tenant (slug)" msgstr "Nájemce (slug)" -#: dcim/filtersets.py:1981 dcim/forms/filtersets.py:1077 +#: netbox/dcim/filtersets.py:1981 netbox/dcim/forms/filtersets.py:1077 msgid "Unterminated" msgstr "Neukončený" -#: dcim/filtersets.py:2239 +#: netbox/dcim/filtersets.py:2239 msgid "Power panel (ID)" msgstr "Napájecí panel (ID)" -#: dcim/forms/bulk_create.py:40 extras/forms/filtersets.py:401 -#: extras/forms/model_forms.py:567 extras/forms/model_forms.py:619 -#: netbox/forms/base.py:86 netbox/forms/mixins.py:81 -#: netbox/tables/columns.py:478 -#: templates/circuits/inc/circuit_termination.html:32 -#: templates/generic/bulk_edit.html:65 templates/inc/panels/tags.html:5 -#: utilities/forms/fields/fields.py:81 +#: netbox/dcim/forms/bulk_create.py:40 netbox/extras/forms/filtersets.py: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/templates/circuits/inc/circuit_termination.html:32 +#: netbox/templates/generic/bulk_edit.html:65 +#: netbox/templates/inc/panels/tags.html:5 +#: netbox/utilities/forms/fields/fields.py:81 msgid "Tags" msgstr "Značky" -#: dcim/forms/bulk_create.py:112 dcim/forms/filtersets.py:1498 -#: dcim/forms/model_forms.py:488 dcim/forms/model_forms.py:546 -#: dcim/forms/object_create.py:197 dcim/forms/object_create.py:353 -#: dcim/tables/devices.py:165 dcim/tables/devices.py:707 -#: dcim/tables/devicetypes.py:246 templates/dcim/device.html:43 -#: templates/dcim/device.html:131 templates/dcim/modulebay.html:38 -#: templates/dcim/virtualchassis.html:66 -#: templates/dcim/virtualchassis_edit.html:55 +#: 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/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/templates/dcim/device.html:43 netbox/templates/dcim/device.html:131 +#: netbox/templates/dcim/modulebay.html:38 +#: netbox/templates/dcim/virtualchassis.html:66 +#: netbox/templates/dcim/virtualchassis_edit.html:55 msgid "Position" msgstr "Pozice" -#: dcim/forms/bulk_create.py:114 +#: netbox/dcim/forms/bulk_create.py:114 msgid "" "Alphanumeric ranges are supported. (Must match the number of names being " "created.)" @@ -3112,825 +3442,922 @@ msgstr "" "Podporovány jsou alfanumerické rozsahy. (Musí odpovídat počtu vytvořených " "jmen.)" -#: dcim/forms/bulk_edit.py:132 +#: netbox/dcim/forms/bulk_edit.py:133 msgid "Contact name" msgstr "Kontaktní jméno" -#: dcim/forms/bulk_edit.py:137 +#: netbox/dcim/forms/bulk_edit.py:138 msgid "Contact phone" msgstr "Kontaktní telefon" -#: dcim/forms/bulk_edit.py:143 +#: netbox/dcim/forms/bulk_edit.py:144 msgid "Contact E-mail" msgstr "Kontaktní e-mail" -#: dcim/forms/bulk_edit.py:146 dcim/forms/bulk_import.py:123 -#: dcim/forms/model_forms.py:128 +#: netbox/dcim/forms/bulk_edit.py:147 netbox/dcim/forms/bulk_import.py:123 +#: netbox/dcim/forms/model_forms.py:128 msgid "Time zone" msgstr "Časové pásmo" -#: dcim/forms/bulk_edit.py:224 dcim/forms/bulk_edit.py:495 -#: dcim/forms/bulk_edit.py:559 dcim/forms/bulk_edit.py:632 -#: dcim/forms/bulk_edit.py:656 dcim/forms/bulk_edit.py:740 -#: dcim/forms/bulk_edit.py:1267 dcim/forms/bulk_edit.py:1660 -#: dcim/forms/bulk_import.py:182 dcim/forms/bulk_import.py:371 -#: dcim/forms/bulk_import.py:405 dcim/forms/bulk_import.py:450 -#: dcim/forms/bulk_import.py:486 dcim/forms/bulk_import.py:1082 -#: dcim/forms/filtersets.py:313 dcim/forms/filtersets.py:372 -#: dcim/forms/filtersets.py:494 dcim/forms/filtersets.py:619 -#: dcim/forms/filtersets.py:700 dcim/forms/filtersets.py:782 -#: dcim/forms/filtersets.py:947 dcim/forms/filtersets.py:1539 -#: dcim/forms/model_forms.py:207 dcim/forms/model_forms.py:337 -#: dcim/forms/model_forms.py:349 dcim/forms/model_forms.py:395 -#: dcim/forms/model_forms.py:436 dcim/forms/model_forms.py:1075 -#: dcim/forms/model_forms.py:1515 dcim/forms/object_import.py:187 -#: dcim/tables/devices.py:96 dcim/tables/devices.py:172 -#: dcim/tables/devices.py:940 dcim/tables/devicetypes.py:80 -#: dcim/tables/devicetypes.py:308 dcim/tables/modules.py:20 -#: dcim/tables/modules.py:60 dcim/tables/racks.py:58 dcim/tables/racks.py:132 -#: templates/dcim/devicetype.html:14 templates/dcim/inventoryitem.html:44 -#: templates/dcim/manufacturer.html:33 templates/dcim/modulebay.html:62 -#: templates/dcim/moduletype.html:25 templates/dcim/platform.html:37 -#: templates/dcim/racktype.html:16 +#: 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/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/templates/dcim/manufacturer.html:33 +#: netbox/templates/dcim/modulebay.html:62 +#: netbox/templates/dcim/moduletype.html:25 +#: netbox/templates/dcim/platform.html:37 +#: netbox/templates/dcim/racktype.html:16 msgid "Manufacturer" msgstr "Výrobce" -#: dcim/forms/bulk_edit.py:229 dcim/forms/bulk_edit.py:372 -#: dcim/forms/bulk_import.py:191 dcim/forms/bulk_import.py:263 -#: dcim/forms/filtersets.py:255 -#: templates/dcim/inc/panels/racktype_dimensions.html:6 +#: 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/templates/dcim/inc/panels/racktype_dimensions.html:6 msgid "Form factor" msgstr "Tvarový faktor" -#: dcim/forms/bulk_edit.py:234 dcim/forms/bulk_edit.py:377 -#: dcim/forms/bulk_import.py:199 dcim/forms/bulk_import.py:266 -#: dcim/forms/filtersets.py:260 -#: templates/dcim/inc/panels/racktype_dimensions.html:10 +#: 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/templates/dcim/inc/panels/racktype_dimensions.html:10 msgid "Width" msgstr "Šířka" -#: dcim/forms/bulk_edit.py:240 dcim/forms/bulk_edit.py:383 -#: templates/dcim/devicetype.html:37 +#: netbox/dcim/forms/bulk_edit.py:241 netbox/dcim/forms/bulk_edit.py:389 +#: netbox/dcim/forms/bulk_import.py:280 +#: netbox/templates/dcim/devicetype.html:37 msgid "Height (U)" msgstr "Výška (U)" -#: dcim/forms/bulk_edit.py:249 dcim/forms/bulk_edit.py:388 -#: dcim/forms/filtersets.py:274 +#: netbox/dcim/forms/bulk_edit.py:250 netbox/dcim/forms/bulk_edit.py:394 +#: netbox/dcim/forms/filtersets.py:274 msgid "Descending units" msgstr "Sestupné jednotky" -#: dcim/forms/bulk_edit.py:252 dcim/forms/bulk_edit.py:391 +#: netbox/dcim/forms/bulk_edit.py:253 netbox/dcim/forms/bulk_edit.py:397 msgid "Outer width" msgstr "Vnější šířka" -#: dcim/forms/bulk_edit.py:257 dcim/forms/bulk_edit.py:396 +#: netbox/dcim/forms/bulk_edit.py:258 netbox/dcim/forms/bulk_edit.py:402 msgid "Outer depth" msgstr "Vnější hloubka" -#: dcim/forms/bulk_edit.py:262 dcim/forms/bulk_edit.py:401 -#: dcim/forms/bulk_import.py:204 dcim/forms/bulk_import.py:271 +#: 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 msgid "Outer unit" msgstr "Vnější jednotka" -#: dcim/forms/bulk_edit.py:267 dcim/forms/bulk_edit.py:406 +#: netbox/dcim/forms/bulk_edit.py:268 netbox/dcim/forms/bulk_edit.py:412 msgid "Mounting depth" msgstr "Hloubka montáže" -#: dcim/forms/bulk_edit.py:272 dcim/forms/bulk_edit.py:299 -#: dcim/forms/bulk_edit.py:416 dcim/forms/bulk_edit.py:446 -#: dcim/forms/bulk_edit.py:529 dcim/forms/bulk_edit.py:552 -#: dcim/forms/bulk_edit.py:573 dcim/forms/bulk_edit.py:595 -#: dcim/forms/bulk_import.py:384 dcim/forms/bulk_import.py:416 -#: dcim/forms/filtersets.py:285 dcim/forms/filtersets.py:307 -#: dcim/forms/filtersets.py:327 dcim/forms/filtersets.py:401 -#: dcim/forms/filtersets.py:488 dcim/forms/filtersets.py:594 -#: dcim/forms/filtersets.py:613 dcim/forms/filtersets.py:674 -#: dcim/forms/model_forms.py:221 dcim/forms/model_forms.py:298 -#: dcim/tables/devicetypes.py:106 dcim/tables/modules.py:35 -#: dcim/tables/racks.py:74 dcim/tables/racks.py:172 -#: extras/forms/bulk_edit.py:53 extras/forms/bulk_edit.py:133 -#: extras/forms/bulk_edit.py:183 extras/forms/bulk_edit.py:288 -#: extras/forms/filtersets.py:64 extras/forms/filtersets.py:156 -#: extras/forms/filtersets.py:243 ipam/forms/bulk_edit.py:190 -#: templates/dcim/device.html:324 templates/dcim/devicetype.html:49 -#: templates/dcim/moduletype.html:45 templates/dcim/rack.html:81 -#: templates/dcim/racktype.html:41 templates/extras/configcontext.html:17 -#: templates/extras/customlink.html:25 templates/extras/savedfilter.html:33 -#: templates/ipam/role.html:30 +#: netbox/dcim/forms/bulk_edit.py: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/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/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/racktype.html:41 +#: netbox/templates/extras/configcontext.html:17 +#: netbox/templates/extras/customlink.html:25 +#: netbox/templates/extras/savedfilter.html:33 +#: netbox/templates/ipam/role.html:30 msgid "Weight" msgstr "Hmotnost" -#: dcim/forms/bulk_edit.py:277 dcim/forms/bulk_edit.py:421 -#: dcim/forms/filtersets.py:290 +#: netbox/dcim/forms/bulk_edit.py:278 netbox/dcim/forms/bulk_edit.py:427 +#: netbox/dcim/forms/filtersets.py:290 msgid "Max weight" msgstr "Max. hmotnost" -#: dcim/forms/bulk_edit.py:282 dcim/forms/bulk_edit.py:426 -#: dcim/forms/bulk_edit.py:534 dcim/forms/bulk_edit.py:578 -#: dcim/forms/bulk_import.py:210 dcim/forms/bulk_import.py:283 -#: dcim/forms/bulk_import.py:389 dcim/forms/bulk_import.py:421 -#: dcim/forms/filtersets.py:295 dcim/forms/filtersets.py:598 -#: dcim/forms/filtersets.py:678 +#: 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 msgid "Weight unit" msgstr "Jednotka hmotnosti" -#: dcim/forms/bulk_edit.py:296 dcim/forms/filtersets.py:305 -#: dcim/forms/model_forms.py:217 dcim/forms/model_forms.py:256 -#: templates/dcim/rack.html:45 templates/dcim/racktype.html:13 +#: 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/templates/dcim/rack.html:45 netbox/templates/dcim/racktype.html:13 msgid "Rack Type" msgstr "Typ stojanu" -#: dcim/forms/bulk_edit.py:298 dcim/forms/model_forms.py:220 -#: dcim/forms/model_forms.py:297 +#: netbox/dcim/forms/bulk_edit.py:299 netbox/dcim/forms/model_forms.py:220 +#: netbox/dcim/forms/model_forms.py:297 msgid "Outer Dimensions" msgstr "Vnější rozměry" -#: dcim/forms/bulk_edit.py:301 dcim/forms/model_forms.py:222 -#: dcim/forms/model_forms.py:299 templates/dcim/device.html:315 -#: templates/dcim/inc/panels/racktype_dimensions.html:3 +#: 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/templates/dcim/inc/panels/racktype_dimensions.html:3 msgid "Dimensions" msgstr "Rozměry" -#: dcim/forms/bulk_edit.py:303 dcim/forms/filtersets.py:306 -#: dcim/forms/filtersets.py:326 dcim/forms/model_forms.py:224 -#: templates/dcim/inc/panels/racktype_numbering.html:3 +#: 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/templates/dcim/inc/panels/racktype_numbering.html:3 msgid "Numbering" msgstr "Číslování" -#: dcim/forms/bulk_edit.py:357 dcim/forms/bulk_edit.py:1262 -#: dcim/forms/bulk_edit.py:1655 dcim/forms/bulk_import.py:253 -#: dcim/forms/bulk_import.py:1076 dcim/forms/filtersets.py:367 -#: dcim/forms/filtersets.py:777 dcim/forms/filtersets.py:1534 -#: dcim/forms/model_forms.py:251 dcim/forms/model_forms.py:1070 -#: dcim/forms/model_forms.py:1510 dcim/forms/object_import.py:181 -#: dcim/tables/devices.py:169 dcim/tables/devices.py:809 -#: dcim/tables/devices.py:937 dcim/tables/devicetypes.py:304 -#: dcim/tables/racks.py:129 extras/filtersets.py:552 -#: ipam/forms/bulk_edit.py:261 ipam/forms/bulk_edit.py:311 -#: ipam/forms/bulk_edit.py:359 ipam/forms/bulk_edit.py:511 -#: ipam/forms/bulk_import.py:197 ipam/forms/bulk_import.py:262 -#: ipam/forms/bulk_import.py:298 ipam/forms/bulk_import.py:455 -#: ipam/forms/filtersets.py:237 ipam/forms/filtersets.py:289 -#: ipam/forms/filtersets.py:360 ipam/forms/filtersets.py:509 -#: ipam/forms/model_forms.py:188 ipam/forms/model_forms.py:221 -#: ipam/forms/model_forms.py:250 ipam/forms/model_forms.py:643 -#: ipam/tables/ip.py:258 ipam/tables/ip.py:316 ipam/tables/ip.py:367 -#: ipam/tables/vlans.py:130 ipam/tables/vlans.py:235 -#: templates/dcim/device.html:182 -#: templates/dcim/inc/panels/inventory_items.html:20 -#: templates/dcim/interface.html:223 templates/dcim/inventoryitem.html:36 -#: templates/dcim/rack.html:49 templates/ipam/ipaddress.html:41 -#: templates/ipam/iprange.html:50 templates/ipam/prefix.html:77 -#: templates/ipam/role.html:19 templates/ipam/vlan.html:52 -#: templates/virtualization/virtualmachine.html:23 -#: templates/vpn/tunneltermination.html:17 -#: templates/wireless/inc/wirelesslink_interface.html:20 -#: tenancy/forms/bulk_edit.py:142 tenancy/forms/filtersets.py:107 -#: tenancy/forms/model_forms.py:137 tenancy/tables/contacts.py:102 -#: virtualization/forms/bulk_edit.py:145 -#: virtualization/forms/bulk_import.py:106 -#: virtualization/forms/filtersets.py:157 -#: virtualization/forms/model_forms.py:195 -#: virtualization/tables/virtualmachines.py:75 vpn/forms/bulk_edit.py:87 -#: vpn/forms/bulk_import.py:81 vpn/forms/filtersets.py:85 -#: vpn/forms/model_forms.py:78 vpn/forms/model_forms.py:113 -#: vpn/tables/tunnels.py:82 +#: netbox/dcim/forms/bulk_edit.py: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 "Role" -#: dcim/forms/bulk_edit.py:364 dcim/forms/bulk_edit.py:712 -#: dcim/forms/bulk_edit.py:764 templates/dcim/device.html:104 -#: templates/dcim/module.html:77 templates/dcim/modulebay.html:70 -#: templates/dcim/rack.html:57 templates/virtualization/virtualmachine.html:35 +#: netbox/dcim/forms/bulk_edit.py:363 netbox/dcim/forms/bulk_import.py:260 +#: netbox/dcim/forms/filtersets.py:380 +msgid "Rack type" +msgstr "Typ stojanu" + +#: 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/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 "Sériové číslo" -#: dcim/forms/bulk_edit.py:367 dcim/forms/filtersets.py:387 -#: dcim/forms/filtersets.py:813 dcim/forms/filtersets.py:967 -#: dcim/forms/filtersets.py:1546 +#: 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 msgid "Asset tag" msgstr "Inventární číslo" -#: dcim/forms/bulk_edit.py:411 dcim/forms/bulk_edit.py:524 -#: dcim/forms/bulk_edit.py:568 dcim/forms/bulk_edit.py:705 -#: dcim/forms/bulk_import.py:277 dcim/forms/bulk_import.py:410 -#: dcim/forms/bulk_import.py:580 dcim/forms/filtersets.py:280 -#: dcim/forms/filtersets.py:511 dcim/forms/filtersets.py:669 -#: dcim/forms/filtersets.py:804 templates/dcim/device.html:98 -#: templates/dcim/devicetype.html:65 templates/dcim/moduletype.html:41 -#: templates/dcim/rack.html:65 templates/dcim/racktype.html:28 +#: 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/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 "Proudění vzduchu" -#: dcim/forms/bulk_edit.py:440 dcim/forms/bulk_edit.py:910 -#: dcim/forms/bulk_import.py:322 dcim/forms/bulk_import.py:325 -#: dcim/forms/bulk_import.py:553 dcim/forms/bulk_import.py:1358 -#: dcim/forms/bulk_import.py:1362 dcim/forms/filtersets.py:104 -#: dcim/forms/filtersets.py:324 dcim/forms/filtersets.py:405 -#: dcim/forms/filtersets.py:419 dcim/forms/filtersets.py:457 -#: dcim/forms/filtersets.py:772 dcim/forms/filtersets.py:1035 -#: dcim/forms/filtersets.py:1167 dcim/forms/model_forms.py:264 -#: dcim/forms/model_forms.py:306 dcim/forms/model_forms.py:479 -#: dcim/forms/model_forms.py:755 dcim/forms/object_create.py:400 -#: dcim/tables/devices.py:161 dcim/tables/power.py:70 dcim/tables/racks.py:217 -#: ipam/forms/filtersets.py:442 templates/dcim/device.html:30 -#: templates/dcim/inc/cable_termination.html:16 -#: templates/dcim/powerfeed.html:28 templates/dcim/rack.html:13 -#: templates/dcim/rack/base.html:4 templates/dcim/rackreservation.html:19 -#: templates/dcim/rackreservation.html:36 -#: virtualization/forms/model_forms.py:113 +#: netbox/dcim/forms/bulk_edit.py: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/templates/dcim/device.html:30 +#: netbox/templates/dcim/inc/cable_termination.html:16 +#: netbox/templates/dcim/powerfeed.html:28 netbox/templates/dcim/rack.html:13 +#: netbox/templates/dcim/rack/base.html:4 +#: netbox/templates/dcim/rackreservation.html:19 +#: netbox/templates/dcim/rackreservation.html:36 +#: netbox/virtualization/forms/model_forms.py:113 msgid "Rack" msgstr "Stojan" -#: dcim/forms/bulk_edit.py:444 dcim/forms/bulk_edit.py:730 -#: dcim/forms/filtersets.py:325 dcim/forms/filtersets.py:398 -#: dcim/forms/filtersets.py:481 dcim/forms/filtersets.py:608 -#: dcim/forms/filtersets.py:721 dcim/forms/filtersets.py:942 -#: dcim/forms/model_forms.py:670 dcim/forms/model_forms.py:1580 -#: templates/dcim/device_edit.html:20 +#: 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/templates/dcim/device_edit.html:20 msgid "Hardware" msgstr "Hardware" -#: dcim/forms/bulk_edit.py:500 dcim/forms/bulk_import.py:377 -#: dcim/forms/filtersets.py:499 dcim/forms/model_forms.py:353 +#: 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 msgid "Default platform" msgstr "Výchozí platforma" -#: dcim/forms/bulk_edit.py:505 dcim/forms/bulk_edit.py:564 -#: dcim/forms/filtersets.py:502 dcim/forms/filtersets.py:622 +#: 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 msgid "Part number" msgstr "Číslo dílu" -#: dcim/forms/bulk_edit.py:509 +#: netbox/dcim/forms/bulk_edit.py:515 msgid "U height" msgstr "Výška U pozic" -#: dcim/forms/bulk_edit.py:521 dcim/tables/devicetypes.py:102 +#: netbox/dcim/forms/bulk_edit.py:527 netbox/dcim/tables/devicetypes.py:102 msgid "Exclude from utilization" msgstr "Vyloučit z využití" -#: dcim/forms/bulk_edit.py:550 dcim/forms/model_forms.py:368 -#: dcim/tables/devicetypes.py:77 templates/dcim/device.html:88 -#: templates/dcim/devicebay.html:52 templates/dcim/module.html:61 +#: 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/templates/dcim/devicebay.html:52 +#: netbox/templates/dcim/module.html:61 msgid "Device Type" msgstr "Typ zařízení" -#: dcim/forms/bulk_edit.py:592 dcim/forms/model_forms.py:401 -#: dcim/tables/modules.py:17 dcim/tables/modules.py:65 -#: templates/dcim/module.html:65 templates/dcim/modulebay.html:66 -#: templates/dcim/moduletype.html:22 +#: 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:66 +#: netbox/templates/dcim/module.html:65 +#: netbox/templates/dcim/modulebay.html:66 +#: netbox/templates/dcim/moduletype.html:22 msgid "Module Type" msgstr "Typ modulu" -#: dcim/forms/bulk_edit.py:596 dcim/forms/model_forms.py:371 -#: dcim/forms/model_forms.py:402 templates/dcim/devicetype.html:11 +#: netbox/dcim/forms/bulk_edit.py:602 netbox/dcim/forms/model_forms.py:371 +#: netbox/dcim/forms/model_forms.py:402 +#: netbox/templates/dcim/devicetype.html:11 msgid "Chassis" msgstr "Šasi" -#: dcim/forms/bulk_edit.py:610 dcim/models/devices.py:484 -#: dcim/tables/devices.py:67 +#: netbox/dcim/forms/bulk_edit.py:616 netbox/dcim/models/devices.py:484 +#: netbox/dcim/tables/devices.py:67 msgid "VM role" msgstr "Role virtuálního počítače" -#: dcim/forms/bulk_edit.py:613 dcim/forms/bulk_edit.py:637 -#: dcim/forms/bulk_edit.py:720 dcim/forms/bulk_import.py:434 -#: dcim/forms/bulk_import.py:438 dcim/forms/bulk_import.py:457 -#: dcim/forms/bulk_import.py:461 dcim/forms/bulk_import.py:586 -#: dcim/forms/bulk_import.py:590 dcim/forms/filtersets.py:689 -#: dcim/forms/filtersets.py:705 dcim/forms/filtersets.py:823 -#: dcim/forms/model_forms.py:415 dcim/forms/model_forms.py:441 -#: dcim/forms/model_forms.py:555 virtualization/forms/bulk_import.py:132 -#: virtualization/forms/bulk_import.py:133 -#: virtualization/forms/filtersets.py:188 -#: virtualization/forms/model_forms.py:215 +#: 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 msgid "Config template" msgstr "Konfigurační šablona" -#: dcim/forms/bulk_edit.py:661 dcim/forms/bulk_edit.py:1061 -#: dcim/forms/bulk_import.py:492 dcim/forms/filtersets.py:114 -#: dcim/forms/model_forms.py:501 dcim/forms/model_forms.py:872 -#: dcim/forms/model_forms.py:889 extras/filtersets.py:547 +#: 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 msgid "Device type" msgstr "Typ zařízení" -#: dcim/forms/bulk_edit.py:672 dcim/forms/bulk_import.py:473 -#: dcim/forms/filtersets.py:119 dcim/forms/model_forms.py:509 +#: 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 msgid "Device role" msgstr "Role zařízení" -#: dcim/forms/bulk_edit.py:695 dcim/forms/bulk_import.py:498 -#: dcim/forms/filtersets.py:796 dcim/forms/model_forms.py:451 -#: dcim/forms/model_forms.py:513 dcim/tables/devices.py:182 -#: extras/filtersets.py:563 templates/dcim/device.html:186 -#: templates/dcim/platform.html:26 -#: templates/virtualization/virtualmachine.html:27 -#: virtualization/forms/bulk_edit.py:160 -#: virtualization/forms/bulk_import.py:122 -#: virtualization/forms/filtersets.py:168 -#: virtualization/forms/model_forms.py:203 -#: virtualization/tables/virtualmachines.py:79 +#: 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/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 msgid "Platform" msgstr "Nástupiště" -#: dcim/forms/bulk_edit.py:728 dcim/forms/bulk_edit.py:1281 -#: dcim/forms/bulk_edit.py:1650 dcim/forms/bulk_edit.py:1696 -#: dcim/forms/bulk_import.py:641 dcim/forms/bulk_import.py:703 -#: dcim/forms/bulk_import.py:729 dcim/forms/bulk_import.py:755 -#: dcim/forms/bulk_import.py:775 dcim/forms/bulk_import.py:828 -#: dcim/forms/bulk_import.py:946 dcim/forms/bulk_import.py:994 -#: dcim/forms/bulk_import.py:1011 dcim/forms/bulk_import.py:1023 -#: dcim/forms/bulk_import.py:1071 dcim/forms/bulk_import.py:1422 -#: dcim/forms/connections.py:24 dcim/forms/filtersets.py:131 -#: dcim/forms/filtersets.py:921 dcim/forms/filtersets.py:1051 -#: dcim/forms/filtersets.py:1242 dcim/forms/filtersets.py:1267 -#: dcim/forms/filtersets.py:1291 dcim/forms/filtersets.py:1311 -#: dcim/forms/filtersets.py:1334 dcim/forms/filtersets.py:1444 -#: dcim/forms/filtersets.py:1469 dcim/forms/filtersets.py:1493 -#: dcim/forms/filtersets.py:1511 dcim/forms/filtersets.py:1528 -#: dcim/forms/filtersets.py:1592 dcim/forms/filtersets.py:1616 -#: dcim/forms/filtersets.py:1640 dcim/forms/model_forms.py:633 -#: dcim/forms/model_forms.py:849 dcim/forms/model_forms.py:1208 -#: dcim/forms/model_forms.py:1664 dcim/forms/object_create.py:257 -#: dcim/tables/connections.py:22 dcim/tables/connections.py:41 -#: dcim/tables/connections.py:60 dcim/tables/devices.py:285 -#: dcim/tables/devices.py:371 dcim/tables/devices.py:412 -#: dcim/tables/devices.py:454 dcim/tables/devices.py:505 -#: dcim/tables/devices.py:597 dcim/tables/devices.py:697 -#: dcim/tables/devices.py:754 dcim/tables/devices.py:801 -#: dcim/tables/devices.py:861 dcim/tables/devices.py:930 -#: dcim/tables/devices.py:1057 dcim/tables/modules.py:52 -#: extras/forms/filtersets.py:321 ipam/forms/bulk_import.py:304 -#: ipam/forms/bulk_import.py:481 ipam/forms/filtersets.py:551 -#: ipam/forms/model_forms.py:319 ipam/forms/model_forms.py:679 -#: ipam/forms/model_forms.py:712 ipam/forms/model_forms.py:738 -#: ipam/tables/vlans.py:180 templates/dcim/consoleport.html:20 -#: templates/dcim/consoleserverport.html:20 templates/dcim/device.html:15 -#: templates/dcim/device.html:130 templates/dcim/device_edit.html:10 -#: templates/dcim/devicebay.html:20 templates/dcim/devicebay.html:48 -#: templates/dcim/frontport.html:20 templates/dcim/interface.html:30 -#: templates/dcim/interface.html:161 templates/dcim/inventoryitem.html:20 -#: templates/dcim/module.html:57 templates/dcim/modulebay.html:20 -#: templates/dcim/poweroutlet.html:20 templates/dcim/powerport.html:20 -#: templates/dcim/rearport.html:20 templates/dcim/virtualchassis.html:65 -#: templates/dcim/virtualchassis_edit.html:51 -#: templates/dcim/virtualdevicecontext.html:22 -#: templates/virtualization/virtualmachine.html:114 -#: templates/vpn/tunneltermination.html:23 -#: templates/wireless/inc/wirelesslink_interface.html:6 -#: virtualization/filtersets.py:167 virtualization/forms/bulk_edit.py:137 -#: virtualization/forms/bulk_import.py:99 -#: virtualization/forms/filtersets.py:128 -#: virtualization/forms/model_forms.py:185 -#: virtualization/tables/virtualmachines.py:71 vpn/choices.py:44 -#: vpn/forms/bulk_import.py:86 vpn/forms/bulk_import.py:283 -#: vpn/forms/filtersets.py:275 vpn/forms/model_forms.py:90 -#: vpn/forms/model_forms.py:125 vpn/forms/model_forms.py:236 -#: vpn/forms/model_forms.py:453 wireless/forms/model_forms.py:99 -#: wireless/forms/model_forms.py:141 wireless/tables/wirelesslan.py:75 -msgid "Device" -msgstr "Zařízení" - -#: dcim/forms/bulk_edit.py:731 templates/extras/dashboard/widget_config.html:7 -#: virtualization/forms/bulk_edit.py:191 -msgid "Configuration" -msgstr "Konfigurace" - -#: dcim/forms/bulk_edit.py:745 dcim/forms/bulk_import.py:653 -#: dcim/forms/model_forms.py:647 dcim/forms/model_forms.py:897 -msgid "Module type" -msgstr "Typ modulu" - -#: dcim/forms/bulk_edit.py:799 dcim/forms/bulk_edit.py:984 -#: dcim/forms/bulk_edit.py:1003 dcim/forms/bulk_edit.py:1026 -#: dcim/forms/bulk_edit.py:1068 dcim/forms/bulk_edit.py:1112 -#: dcim/forms/bulk_edit.py:1163 dcim/forms/bulk_edit.py:1190 -#: dcim/forms/bulk_edit.py:1217 dcim/forms/bulk_edit.py:1235 -#: dcim/forms/bulk_edit.py:1253 dcim/forms/filtersets.py:67 -#: dcim/forms/object_create.py:46 templates/dcim/cable.html:32 -#: templates/dcim/consoleport.html:32 templates/dcim/consoleserverport.html:32 -#: templates/dcim/devicebay.html:28 templates/dcim/frontport.html:32 -#: templates/dcim/inc/panels/inventory_items.html:19 -#: templates/dcim/interface.html:42 templates/dcim/inventoryitem.html:32 -#: templates/dcim/modulebay.html:34 templates/dcim/poweroutlet.html:32 -#: templates/dcim/powerport.html:32 templates/dcim/rearport.html:32 -#: templates/extras/customfield.html:26 templates/generic/bulk_import.html:162 -msgid "Label" -msgstr "Štítek" - -#: dcim/forms/bulk_edit.py:808 dcim/forms/filtersets.py:1068 -#: templates/dcim/cable.html:50 -msgid "Length" -msgstr "Délka" - -#: dcim/forms/bulk_edit.py:813 dcim/forms/bulk_import.py:1226 -#: dcim/forms/bulk_import.py:1229 dcim/forms/filtersets.py:1072 -msgid "Length unit" -msgstr "Jednotka délky" - -#: dcim/forms/bulk_edit.py:837 templates/dcim/virtualchassis.html:23 -msgid "Domain" -msgstr "Doména" - -#: dcim/forms/bulk_edit.py:905 dcim/forms/bulk_import.py:1345 -#: dcim/forms/filtersets.py:1158 dcim/forms/model_forms.py:750 -msgid "Power panel" -msgstr "Napájecí panel" - -#: dcim/forms/bulk_edit.py:927 dcim/forms/bulk_import.py:1381 -#: dcim/forms/filtersets.py:1180 templates/dcim/powerfeed.html:83 -msgid "Supply" -msgstr "Zdroj" - -#: dcim/forms/bulk_edit.py:933 dcim/forms/bulk_import.py:1386 -#: dcim/forms/filtersets.py:1185 templates/dcim/powerfeed.html:95 -msgid "Phase" -msgstr "Fáze" - -#: dcim/forms/bulk_edit.py:939 dcim/forms/filtersets.py:1190 -#: templates/dcim/powerfeed.html:87 -msgid "Voltage" -msgstr "Napětí" - -#: dcim/forms/bulk_edit.py:943 dcim/forms/filtersets.py:1194 -#: templates/dcim/powerfeed.html:91 -msgid "Amperage" -msgstr "Proud" - -#: dcim/forms/bulk_edit.py:947 dcim/forms/filtersets.py:1198 -msgid "Max utilization" -msgstr "Maximální využití" - -#: dcim/forms/bulk_edit.py:1036 -msgid "Maximum draw" -msgstr "Maximální příkon" - -#: dcim/forms/bulk_edit.py:1039 dcim/models/device_component_templates.py:282 -#: dcim/models/device_components.py:356 -msgid "Maximum power draw (watts)" -msgstr "Maximální příkon (W)" - -#: dcim/forms/bulk_edit.py:1042 -msgid "Allocated draw" -msgstr "Přidělený příkon" - -#: dcim/forms/bulk_edit.py:1045 dcim/models/device_component_templates.py:289 -#: dcim/models/device_components.py:363 -msgid "Allocated power draw (watts)" -msgstr "Přidělený příkon (W)" - -#: dcim/forms/bulk_edit.py:1078 dcim/forms/bulk_import.py:786 -#: dcim/forms/model_forms.py:953 dcim/forms/model_forms.py:1278 -#: dcim/forms/model_forms.py:1567 dcim/forms/object_import.py:55 -msgid "Power port" -msgstr "Napájecí port" - -#: dcim/forms/bulk_edit.py:1083 dcim/forms/bulk_import.py:793 -msgid "Feed leg" -msgstr "Napájecí větev" - -#: dcim/forms/bulk_edit.py:1129 dcim/forms/bulk_edit.py:1440 -msgid "Management only" -msgstr "Pouze správa" - -#: dcim/forms/bulk_edit.py:1139 dcim/forms/bulk_edit.py:1446 -#: dcim/forms/bulk_import.py:876 dcim/forms/filtersets.py:1394 -#: dcim/forms/object_import.py:90 -#: dcim/models/device_component_templates.py:437 -#: dcim/models/device_components.py:670 -msgid "PoE mode" -msgstr "Režim PoE" - -#: dcim/forms/bulk_edit.py:1145 dcim/forms/bulk_edit.py:1452 -#: dcim/forms/bulk_import.py:882 dcim/forms/filtersets.py:1399 -#: dcim/forms/object_import.py:95 -#: dcim/models/device_component_templates.py:443 -#: dcim/models/device_components.py:676 -msgid "PoE type" -msgstr "Typ PoE" - -#: dcim/forms/bulk_edit.py:1151 dcim/forms/filtersets.py:1404 -#: dcim/forms/object_import.py:100 -msgid "Wireless role" -msgstr "Bezdrátová role" - -#: dcim/forms/bulk_edit.py:1288 dcim/forms/model_forms.py:669 -#: dcim/forms/model_forms.py:1223 dcim/tables/devices.py:313 -#: templates/dcim/consoleport.html:24 templates/dcim/consoleserverport.html:24 -#: templates/dcim/frontport.html:24 templates/dcim/interface.html:34 -#: templates/dcim/module.html:54 templates/dcim/modulebay.html:26 -#: templates/dcim/modulebay.html:58 templates/dcim/poweroutlet.html:24 -#: templates/dcim/powerport.html:24 templates/dcim/rearport.html:24 -msgid "Module" -msgstr "Modul" - -#: dcim/forms/bulk_edit.py:1420 dcim/tables/devices.py:665 -#: templates/dcim/interface.html:110 -msgid "LAG" -msgstr "Agregační skupina" - -#: dcim/forms/bulk_edit.py:1425 dcim/forms/model_forms.py:1305 -msgid "Virtual device contexts" -msgstr "Kontexty virtuálních zařízení" - -#: dcim/forms/bulk_edit.py:1431 dcim/forms/bulk_import.py:714 -#: dcim/forms/bulk_import.py:740 dcim/forms/filtersets.py:1252 -#: dcim/forms/filtersets.py:1277 dcim/forms/filtersets.py:1358 -#: dcim/tables/devices.py:610 -#: templates/circuits/inc/circuit_termination_fields.html:67 -#: templates/dcim/consoleport.html:40 templates/dcim/consoleserverport.html:40 -msgid "Speed" -msgstr "Rychlost" - -#: dcim/forms/bulk_edit.py:1460 dcim/forms/bulk_import.py:885 -#: templates/vpn/ikepolicy.html:25 templates/vpn/ipsecprofile.html:21 -#: templates/vpn/ipsecprofile.html:48 virtualization/forms/bulk_edit.py:233 -#: virtualization/forms/bulk_import.py:165 vpn/forms/bulk_edit.py:146 -#: vpn/forms/bulk_edit.py:232 vpn/forms/bulk_import.py:176 -#: vpn/forms/bulk_import.py:234 vpn/forms/filtersets.py:135 -#: vpn/forms/filtersets.py:178 vpn/forms/filtersets.py:192 -#: vpn/tables/crypto.py:64 vpn/tables/crypto.py:162 -msgid "Mode" -msgstr "Režim" - -#: dcim/forms/bulk_edit.py:1468 dcim/forms/model_forms.py:1354 -#: ipam/forms/bulk_import.py:178 ipam/forms/filtersets.py:498 -#: ipam/models/vlans.py:84 virtualization/forms/bulk_edit.py:240 -#: virtualization/forms/model_forms.py:321 -msgid "VLAN group" -msgstr "Skupina VLAN" - -#: dcim/forms/bulk_edit.py:1476 dcim/forms/model_forms.py:1360 -#: dcim/tables/devices.py:579 virtualization/forms/bulk_edit.py:248 -#: virtualization/forms/model_forms.py:326 -msgid "Untagged VLAN" -msgstr "Neznačené VLAN" - -#: dcim/forms/bulk_edit.py:1484 dcim/forms/model_forms.py:1369 -#: dcim/tables/devices.py:585 virtualization/forms/bulk_edit.py:256 -#: virtualization/forms/model_forms.py:335 -msgid "Tagged VLANs" -msgstr "Označené VLAN" - -#: dcim/forms/bulk_edit.py:1494 dcim/forms/model_forms.py:1341 -msgid "Wireless LAN group" -msgstr "Skupina bezdrátových sítí" - -#: dcim/forms/bulk_edit.py:1499 dcim/forms/model_forms.py:1346 -#: dcim/tables/devices.py:619 netbox/navigation/menu.py:146 -#: templates/dcim/interface.html:280 wireless/tables/wirelesslan.py:24 -msgid "Wireless LANs" -msgstr "Bezdrátové LAN sítě" - -#: dcim/forms/bulk_edit.py:1508 dcim/forms/filtersets.py:1328 -#: dcim/forms/model_forms.py:1390 ipam/forms/bulk_edit.py:286 -#: ipam/forms/bulk_edit.py:378 ipam/forms/filtersets.py:169 -#: templates/dcim/interface.html:122 templates/ipam/prefix.html:95 -#: virtualization/forms/model_forms.py:349 -msgid "Addressing" -msgstr "Adresování" - -#: dcim/forms/bulk_edit.py:1509 dcim/forms/filtersets.py:720 -#: dcim/forms/model_forms.py:1391 virtualization/forms/model_forms.py:350 -msgid "Operation" -msgstr "Operace" - -#: dcim/forms/bulk_edit.py:1510 dcim/forms/filtersets.py:1329 -#: dcim/forms/model_forms.py:987 dcim/forms/model_forms.py:1393 -msgid "PoE" -msgstr "PoE" - -#: dcim/forms/bulk_edit.py:1511 dcim/forms/model_forms.py:1392 -#: templates/dcim/interface.html:99 virtualization/forms/bulk_edit.py:267 -#: virtualization/forms/model_forms.py:351 -msgid "Related Interfaces" -msgstr "Související rozhraní" - -#: dcim/forms/bulk_edit.py:1512 dcim/forms/model_forms.py:1394 -#: virtualization/forms/bulk_edit.py:268 -#: virtualization/forms/model_forms.py:352 -msgid "802.1Q Switching" -msgstr "Přepínání 802.1Q" - -#: dcim/forms/bulk_edit.py:1574 dcim/forms/bulk_edit.py:1576 -msgid "Interface mode must be specified to assign VLANs" -msgstr "Pro přiřazení sítí VLAN musí být zadán režim rozhraní" - -#: dcim/forms/bulk_edit.py:1581 dcim/forms/common.py:50 -msgid "An access interface cannot have tagged VLANs assigned." -msgstr "Přístupovému rozhraní nelze přiřadit označené sítě VLAN." - -#: dcim/forms/bulk_import.py:64 -msgid "Name of parent region" -msgstr "Název nadřazené oblasti" - -#: dcim/forms/bulk_import.py:78 -msgid "Name of parent site group" -msgstr "Název nadřazené skupiny webů" - -#: dcim/forms/bulk_import.py:97 -msgid "Assigned region" -msgstr "Přiřazená oblast" - -#: dcim/forms/bulk_import.py:104 tenancy/forms/bulk_import.py:44 -#: tenancy/forms/bulk_import.py:85 wireless/forms/bulk_import.py:40 -msgid "Assigned group" -msgstr "Přiřazená skupina" - -#: dcim/forms/bulk_import.py:123 -msgid "available options" -msgstr "dostupné možnosti" - -#: dcim/forms/bulk_import.py:134 dcim/forms/bulk_import.py:543 -#: dcim/forms/bulk_import.py:1342 ipam/forms/bulk_import.py:175 -#: ipam/forms/bulk_import.py:433 virtualization/forms/bulk_import.py:63 -#: virtualization/forms/bulk_import.py:89 -msgid "Assigned site" -msgstr "Přiřazené místo" - -#: dcim/forms/bulk_import.py:141 -msgid "Parent location" -msgstr "Rodičovská lokalita" - -#: dcim/forms/bulk_import.py:143 -msgid "Location not found." -msgstr "Místo nenalezeno." - -#: dcim/forms/bulk_import.py:185 -msgid "The manufacturer of this rack type" -msgstr "Výrobce tohoto typu stojanu" - -#: dcim/forms/bulk_import.py:196 -msgid "The lowest-numbered position in the rack" -msgstr "Nejnižší očíslovaná pozice v regálu" - -#: dcim/forms/bulk_import.py:201 dcim/forms/bulk_import.py:268 -msgid "Rail-to-rail width (in inches)" -msgstr "Šířka kolejnice k kolejnici (v palcích)" - -#: dcim/forms/bulk_import.py:207 dcim/forms/bulk_import.py:274 -msgid "Unit for outer dimensions" -msgstr "Jednotka pro vnější rozměry" - -#: dcim/forms/bulk_import.py:213 dcim/forms/bulk_import.py:286 -msgid "Unit for rack weights" -msgstr "Jednotka pro regálové závaží" - -#: dcim/forms/bulk_import.py:245 -msgid "Name of assigned tenant" -msgstr "Jméno přiděleného nájemce" - -#: dcim/forms/bulk_import.py:257 -msgid "Name of assigned role" -msgstr "Název přiřazené role" - -#: dcim/forms/bulk_import.py:280 dcim/forms/bulk_import.py:413 -#: dcim/forms/bulk_import.py:583 -msgid "Airflow direction" -msgstr "Směr proudění vzduchu" - -#: dcim/forms/bulk_import.py:312 -msgid "Parent site" -msgstr "Nadřazený web" - -#: dcim/forms/bulk_import.py:319 dcim/forms/bulk_import.py:1355 -msgid "Rack's location (if any)" -msgstr "Umístění stojanu (pokud existuje)" - -#: dcim/forms/bulk_import.py:328 dcim/forms/model_forms.py:311 -#: dcim/tables/racks.py:222 templates/dcim/rackreservation.html:12 -#: templates/dcim/rackreservation.html:45 -msgid "Units" -msgstr "Jednotky" - -#: dcim/forms/bulk_import.py:331 -msgid "Comma-separated list of individual unit numbers" -msgstr "Seznam jednotlivých čísel jednotek oddělených čárkami" - -#: dcim/forms/bulk_import.py:374 -msgid "The manufacturer which produces this device type" -msgstr "Výrobce, který vyrábí tento typ zařízení" - -#: dcim/forms/bulk_import.py:381 -msgid "The default platform for devices of this type (optional)" -msgstr "Výchozí platforma pro zařízení tohoto typu (volitelné)" - -#: dcim/forms/bulk_import.py:386 -msgid "Device weight" -msgstr "Hmotnost zařízení" - -#: dcim/forms/bulk_import.py:392 -msgid "Unit for device weight" -msgstr "Jednotka pro hmotnost zařízení" - -#: dcim/forms/bulk_import.py:418 -msgid "Module weight" -msgstr "Hmotnost modulu" - -#: dcim/forms/bulk_import.py:424 -msgid "Unit for module weight" -msgstr "Jednotka pro hmotnost modulu" - -#: dcim/forms/bulk_import.py:454 -msgid "Limit platform assignments to this manufacturer" -msgstr "Omezte přiřazení platformy tomuto výrobci" - -#: dcim/forms/bulk_import.py:476 dcim/forms/bulk_import.py:1425 -#: tenancy/forms/bulk_import.py:106 -msgid "Assigned role" -msgstr "Přidělená role" - -#: dcim/forms/bulk_import.py:489 -msgid "Device type manufacturer" -msgstr "Výrobce typu zařízení" - -#: dcim/forms/bulk_import.py:495 -msgid "Device type model" -msgstr "Model typu zařízení" - -#: dcim/forms/bulk_import.py:502 virtualization/forms/bulk_import.py:126 -msgid "Assigned platform" -msgstr "Přiřazená platforma" - -#: dcim/forms/bulk_import.py:510 dcim/forms/bulk_import.py:514 -#: dcim/forms/model_forms.py:536 -msgid "Virtual chassis" -msgstr "Virtuální podvozek" - -#: dcim/forms/bulk_import.py:517 dcim/forms/filtersets.py:728 -#: dcim/forms/filtersets.py:898 dcim/forms/model_forms.py:522 -#: dcim/tables/devices.py:202 extras/filtersets.py:596 -#: extras/forms/filtersets.py:322 ipam/forms/filtersets.py:415 -#: ipam/forms/filtersets.py:447 templates/dcim/device.html:239 -#: templates/virtualization/cluster.html:10 -#: templates/virtualization/virtualmachine.html:92 -#: templates/virtualization/virtualmachine.html:101 -#: virtualization/filtersets.py:157 virtualization/filtersets.py:277 -#: virtualization/forms/bulk_edit.py:129 -#: virtualization/forms/bulk_import.py:92 -#: virtualization/forms/filtersets.py:99 -#: virtualization/forms/filtersets.py:123 -#: virtualization/forms/filtersets.py:204 -#: virtualization/forms/model_forms.py:79 -#: virtualization/forms/model_forms.py:176 -#: virtualization/tables/virtualmachines.py:67 +#: 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/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 msgid "Cluster" msgstr "Klastr" -#: dcim/forms/bulk_import.py:521 +#: 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 "Zařízení" + +#: netbox/dcim/forms/bulk_edit.py:745 +#: netbox/templates/extras/dashboard/widget_config.html:7 +#: netbox/virtualization/forms/bulk_edit.py:191 +msgid "Configuration" +msgstr "Konfigurace" + +#: netbox/dcim/forms/bulk_edit.py:746 netbox/netbox/navigation/menu.py:243 +#: netbox/templates/dcim/device_edit.html:78 +msgid "Virtualization" +msgstr "Virtualizace" + +#: 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 +msgid "Module type" +msgstr "Typ modulu" + +#: 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/object_create.py:46 netbox/templates/dcim/cable.html:32 +#: netbox/templates/dcim/consoleport.html:32 +#: netbox/templates/dcim/consoleserverport.html:32 +#: netbox/templates/dcim/devicebay.html:28 +#: netbox/templates/dcim/frontport.html:32 +#: netbox/templates/dcim/inc/panels/inventory_items.html:19 +#: netbox/templates/dcim/interface.html:42 +#: netbox/templates/dcim/inventoryitem.html:32 +#: netbox/templates/dcim/modulebay.html:34 +#: netbox/templates/dcim/poweroutlet.html:32 +#: netbox/templates/dcim/powerport.html:32 +#: netbox/templates/dcim/rearport.html:32 +#: netbox/templates/extras/customfield.html:26 +#: netbox/templates/generic/bulk_import.html:162 +msgid "Label" +msgstr "Štítek" + +#: netbox/dcim/forms/bulk_edit.py:823 netbox/dcim/forms/filtersets.py:1068 +#: netbox/templates/dcim/cable.html:50 +msgid "Length" +msgstr "Délka" + +#: 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 +msgid "Length unit" +msgstr "Jednotka délky" + +#: netbox/dcim/forms/bulk_edit.py:852 +#: netbox/templates/dcim/virtualchassis.html:23 +msgid "Domain" +msgstr "Doména" + +#: 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 +msgid "Power panel" +msgstr "Napájecí panel" + +#: 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 +msgid "Supply" +msgstr "Zdroj" + +#: 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 +msgid "Phase" +msgstr "Fáze" + +#: netbox/dcim/forms/bulk_edit.py:954 netbox/dcim/forms/filtersets.py:1190 +#: netbox/templates/dcim/powerfeed.html:87 +msgid "Voltage" +msgstr "Napětí" + +#: netbox/dcim/forms/bulk_edit.py:958 netbox/dcim/forms/filtersets.py:1194 +#: netbox/templates/dcim/powerfeed.html:91 +msgid "Amperage" +msgstr "Proud" + +#: netbox/dcim/forms/bulk_edit.py:962 netbox/dcim/forms/filtersets.py:1198 +msgid "Max utilization" +msgstr "Maximální využití" + +#: netbox/dcim/forms/bulk_edit.py:1051 +msgid "Maximum draw" +msgstr "Maximální příkon" + +#: netbox/dcim/forms/bulk_edit.py:1054 +#: netbox/dcim/models/device_component_templates.py:282 +#: netbox/dcim/models/device_components.py:356 +msgid "Maximum power draw (watts)" +msgstr "Maximální příkon (W)" + +#: netbox/dcim/forms/bulk_edit.py:1057 +msgid "Allocated draw" +msgstr "Přidělený příkon" + +#: netbox/dcim/forms/bulk_edit.py:1060 +#: netbox/dcim/models/device_component_templates.py:289 +#: netbox/dcim/models/device_components.py:363 +msgid "Allocated power draw (watts)" +msgstr "Přidělený příkon (W)" + +#: 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 +msgid "Power port" +msgstr "Napájecí port" + +#: netbox/dcim/forms/bulk_edit.py:1098 netbox/dcim/forms/bulk_import.py:815 +msgid "Feed leg" +msgstr "Napájecí větev" + +#: netbox/dcim/forms/bulk_edit.py:1144 netbox/dcim/forms/bulk_edit.py:1462 +msgid "Management only" +msgstr "Pouze správa" + +#: 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/object_import.py:90 +#: netbox/dcim/models/device_component_templates.py:437 +#: netbox/dcim/models/device_components.py:670 +msgid "PoE mode" +msgstr "Režim 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/object_import.py:95 +#: netbox/dcim/models/device_component_templates.py:443 +#: netbox/dcim/models/device_components.py:676 +msgid "PoE type" +msgstr "Typ PoE" + +#: netbox/dcim/forms/bulk_edit.py:1166 netbox/dcim/forms/filtersets.py:1404 +#: netbox/dcim/forms/object_import.py:100 +msgid "Wireless role" +msgstr "Bezdrátová role" + +#: 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/templates/dcim/consoleport.html:24 +#: netbox/templates/dcim/consoleserverport.html:24 +#: netbox/templates/dcim/frontport.html:24 +#: netbox/templates/dcim/interface.html:34 +#: netbox/templates/dcim/module.html:54 +#: netbox/templates/dcim/modulebay.html:26 +#: netbox/templates/dcim/modulebay.html:58 +#: netbox/templates/dcim/poweroutlet.html:24 +#: netbox/templates/dcim/powerport.html:24 +#: netbox/templates/dcim/rearport.html:24 +msgid "Module" +msgstr "Modul" + +#: netbox/dcim/forms/bulk_edit.py:1442 netbox/dcim/tables/devices.py:665 +#: netbox/templates/dcim/interface.html:110 +msgid "LAG" +msgstr "Agregační skupina" + +#: netbox/dcim/forms/bulk_edit.py:1447 netbox/dcim/forms/model_forms.py:1312 +msgid "Virtual device contexts" +msgstr "Kontexty virtuálních zařízení" + +#: 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/templates/dcim/consoleport.html:40 +#: netbox/templates/dcim/consoleserverport.html:40 +msgid "Speed" +msgstr "Rychlost" + +#: netbox/dcim/forms/bulk_edit.py:1482 netbox/dcim/forms/bulk_import.py:907 +#: netbox/templates/vpn/ikepolicy.html:25 +#: netbox/templates/vpn/ipsecprofile.html:21 +#: netbox/templates/vpn/ipsecprofile.html:48 +#: netbox/virtualization/forms/bulk_edit.py:233 +#: netbox/virtualization/forms/bulk_import.py:165 +#: netbox/vpn/forms/bulk_edit.py:146 netbox/vpn/forms/bulk_edit.py:232 +#: netbox/vpn/forms/bulk_import.py:176 netbox/vpn/forms/bulk_import.py:234 +#: netbox/vpn/forms/filtersets.py:135 netbox/vpn/forms/filtersets.py:178 +#: netbox/vpn/forms/filtersets.py:192 netbox/vpn/tables/crypto.py:64 +#: netbox/vpn/tables/crypto.py:162 +msgid "Mode" +msgstr "Režim" + +#: 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 +msgid "VLAN group" +msgstr "Skupina 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 +msgid "Untagged VLAN" +msgstr "Neznačené 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 +msgid "Tagged VLANs" +msgstr "Označené VLAN" + +#: netbox/dcim/forms/bulk_edit.py:1511 +msgid "Add tagged VLANs" +msgstr "Přidat označené VLANy" + +#: netbox/dcim/forms/bulk_edit.py:1520 +msgid "Remove tagged VLANs" +msgstr "Odstranit označené VLANy" + +#: netbox/dcim/forms/bulk_edit.py:1536 netbox/dcim/forms/model_forms.py:1348 +msgid "Wireless LAN group" +msgstr "Skupina bezdrátových sítí" + +#: 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/wireless/tables/wirelesslan.py:24 +msgid "Wireless LANs" +msgstr "Bezdrátové LAN sítě" + +#: 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 +msgid "Addressing" +msgstr "Adresování" + +#: 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 +msgid "Operation" +msgstr "Operace" + +#: 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 +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 +msgid "Related Interfaces" +msgstr "Související rozhraní" + +#: 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 +msgid "802.1Q Switching" +msgstr "Přepínání 802.1Q" + +#: netbox/dcim/forms/bulk_edit.py:1558 +msgid "Add/Remove" +msgstr "Přidat/Odebrat" + +#: netbox/dcim/forms/bulk_edit.py:1617 netbox/dcim/forms/bulk_edit.py:1619 +msgid "Interface mode must be specified to assign VLANs" +msgstr "Pro přiřazení sítí VLAN musí být zadán režim rozhraní" + +#: netbox/dcim/forms/bulk_edit.py:1624 netbox/dcim/forms/common.py:50 +msgid "An access interface cannot have tagged VLANs assigned." +msgstr "Přístupovému rozhraní nelze přiřadit označené sítě VLAN." + +#: netbox/dcim/forms/bulk_import.py:64 +msgid "Name of parent region" +msgstr "Název nadřazené oblasti" + +#: netbox/dcim/forms/bulk_import.py:78 +msgid "Name of parent site group" +msgstr "Název nadřazené skupiny webů" + +#: netbox/dcim/forms/bulk_import.py:97 +msgid "Assigned region" +msgstr "Přiřazená oblast" + +#: netbox/dcim/forms/bulk_import.py:104 netbox/tenancy/forms/bulk_import.py:44 +#: netbox/tenancy/forms/bulk_import.py:85 +#: netbox/wireless/forms/bulk_import.py:40 +msgid "Assigned group" +msgstr "Přiřazená skupina" + +#: netbox/dcim/forms/bulk_import.py:123 +msgid "available options" +msgstr "dostupné možnosti" + +#: 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 +msgid "Assigned site" +msgstr "Přiřazené místo" + +#: netbox/dcim/forms/bulk_import.py:141 +msgid "Parent location" +msgstr "Rodičovská lokalita" + +#: netbox/dcim/forms/bulk_import.py:143 +msgid "Location not found." +msgstr "Místo nenalezeno." + +#: netbox/dcim/forms/bulk_import.py:185 +msgid "The manufacturer of this rack type" +msgstr "Výrobce tohoto typu stojanu" + +#: netbox/dcim/forms/bulk_import.py:196 +msgid "The lowest-numbered position in the rack" +msgstr "Nejnižší očíslovaná pozice v regálu" + +#: netbox/dcim/forms/bulk_import.py:201 netbox/dcim/forms/bulk_import.py:276 +msgid "Rail-to-rail width (in inches)" +msgstr "Šířka kolejnice k kolejnici (v palcích)" + +#: netbox/dcim/forms/bulk_import.py:207 netbox/dcim/forms/bulk_import.py:286 +msgid "Unit for outer dimensions" +msgstr "Jednotka pro vnější rozměry" + +#: netbox/dcim/forms/bulk_import.py:213 netbox/dcim/forms/bulk_import.py:298 +msgid "Unit for rack weights" +msgstr "Jednotka pro regálové závaží" + +#: netbox/dcim/forms/bulk_import.py:245 +msgid "Name of assigned tenant" +msgstr "Jméno přiděleného nájemce" + +#: netbox/dcim/forms/bulk_import.py:257 +msgid "Name of assigned role" +msgstr "Název přiřazené role" + +#: netbox/dcim/forms/bulk_import.py:264 +msgid "Rack type model" +msgstr "Model typu stojanu" + +#: netbox/dcim/forms/bulk_import.py:292 netbox/dcim/forms/bulk_import.py:435 +#: netbox/dcim/forms/bulk_import.py:605 +msgid "Airflow direction" +msgstr "Směr proudění vzduchu" + +#: netbox/dcim/forms/bulk_import.py:324 +msgid "Width must be set if not specifying a rack type." +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 "" + +#: netbox/dcim/forms/bulk_import.py:334 +msgid "Parent site" +msgstr "Nadřazený web" + +#: netbox/dcim/forms/bulk_import.py:341 netbox/dcim/forms/bulk_import.py:1377 +msgid "Rack's location (if any)" +msgstr "Umístění stojanu (pokud existuje)" + +#: netbox/dcim/forms/bulk_import.py:350 netbox/dcim/forms/model_forms.py:311 +#: netbox/dcim/tables/racks.py:222 +#: netbox/templates/dcim/rackreservation.html:12 +#: netbox/templates/dcim/rackreservation.html:45 +msgid "Units" +msgstr "Jednotky" + +#: netbox/dcim/forms/bulk_import.py:353 +msgid "Comma-separated list of individual unit numbers" +msgstr "Seznam jednotlivých čísel jednotek oddělených čárkami" + +#: netbox/dcim/forms/bulk_import.py:396 +msgid "The manufacturer which produces this device type" +msgstr "Výrobce, který vyrábí tento typ zařízení" + +#: netbox/dcim/forms/bulk_import.py:403 +msgid "The default platform for devices of this type (optional)" +msgstr "Výchozí platforma pro zařízení tohoto typu (volitelné)" + +#: netbox/dcim/forms/bulk_import.py:408 +msgid "Device weight" +msgstr "Hmotnost zařízení" + +#: netbox/dcim/forms/bulk_import.py:414 +msgid "Unit for device weight" +msgstr "Jednotka pro hmotnost zařízení" + +#: netbox/dcim/forms/bulk_import.py:440 +msgid "Module weight" +msgstr "Hmotnost modulu" + +#: netbox/dcim/forms/bulk_import.py:446 +msgid "Unit for module weight" +msgstr "Jednotka pro hmotnost modulu" + +#: netbox/dcim/forms/bulk_import.py:476 +msgid "Limit platform assignments to this manufacturer" +msgstr "Omezte přiřazení platformy tomuto výrobci" + +#: netbox/dcim/forms/bulk_import.py:498 netbox/dcim/forms/bulk_import.py:1447 +#: netbox/tenancy/forms/bulk_import.py:106 +msgid "Assigned role" +msgstr "Přidělená role" + +#: netbox/dcim/forms/bulk_import.py:511 +msgid "Device type manufacturer" +msgstr "Výrobce typu zařízení" + +#: netbox/dcim/forms/bulk_import.py:517 +msgid "Device type model" +msgstr "Model typu zařízení" + +#: netbox/dcim/forms/bulk_import.py:524 +#: netbox/virtualization/forms/bulk_import.py:126 +msgid "Assigned platform" +msgstr "Přiřazená platforma" + +#: netbox/dcim/forms/bulk_import.py:532 netbox/dcim/forms/bulk_import.py:536 +#: netbox/dcim/forms/model_forms.py:536 +msgid "Virtual chassis" +msgstr "Virtuální podvozek" + +#: netbox/dcim/forms/bulk_import.py:543 msgid "Virtualization cluster" msgstr "Virtualizační klastr" -#: dcim/forms/bulk_import.py:550 +#: netbox/dcim/forms/bulk_import.py:572 msgid "Assigned location (if any)" msgstr "Přiřazené umístění (pokud existuje)" -#: dcim/forms/bulk_import.py:557 +#: netbox/dcim/forms/bulk_import.py:579 msgid "Assigned rack (if any)" msgstr "Přiřazený stojan (pokud existuje)" -#: dcim/forms/bulk_import.py:560 +#: netbox/dcim/forms/bulk_import.py:582 msgid "Face" msgstr "Tvář" -#: dcim/forms/bulk_import.py:563 +#: netbox/dcim/forms/bulk_import.py:585 msgid "Mounted rack face" msgstr "Namontovaná plocha stojanu" -#: dcim/forms/bulk_import.py:570 +#: netbox/dcim/forms/bulk_import.py:592 msgid "Parent device (for child devices)" msgstr "Rodičovské zařízení (pro podřízená zařízení)" -#: dcim/forms/bulk_import.py:573 +#: netbox/dcim/forms/bulk_import.py:595 msgid "Device bay" msgstr "Místo pro zařízení" -#: dcim/forms/bulk_import.py:577 +#: netbox/dcim/forms/bulk_import.py:599 msgid "Device bay in which this device is installed (for child devices)" msgstr "" "Místo pro zařízení, ve kterém je toto zařízení nainstalováno (pro podřízená " "zařízení)" -#: dcim/forms/bulk_import.py:644 +#: netbox/dcim/forms/bulk_import.py:666 msgid "The device in which this module is installed" msgstr "Zařízení, ve kterém je tento modul nainstalován" -#: dcim/forms/bulk_import.py:647 dcim/forms/model_forms.py:640 +#: netbox/dcim/forms/bulk_import.py:669 netbox/dcim/forms/model_forms.py:640 msgid "Module bay" msgstr "Modulová přihrádka" -#: dcim/forms/bulk_import.py:650 +#: netbox/dcim/forms/bulk_import.py:672 msgid "The module bay in which this module is installed" msgstr "Místo modulu, ve kterém je tento modul nainstalován" -#: dcim/forms/bulk_import.py:656 +#: netbox/dcim/forms/bulk_import.py:678 msgid "The type of module" msgstr "Typ modulu" -#: dcim/forms/bulk_import.py:664 dcim/forms/model_forms.py:656 +#: netbox/dcim/forms/bulk_import.py:686 netbox/dcim/forms/model_forms.py:656 msgid "Replicate components" msgstr "Replikace komponent" -#: dcim/forms/bulk_import.py:666 +#: netbox/dcim/forms/bulk_import.py:688 msgid "" "Automatically populate components associated with this module type (enabled " "by default)" @@ -3938,262 +4365,269 @@ msgstr "" "Automaticky naplnit komponenty přidružené k tomuto typu modulu (ve výchozím " "nastavení povoleno)" -#: dcim/forms/bulk_import.py:669 dcim/forms/model_forms.py:662 +#: netbox/dcim/forms/bulk_import.py:691 netbox/dcim/forms/model_forms.py:662 msgid "Adopt components" msgstr "Přijměte komponenty" -#: dcim/forms/bulk_import.py:671 dcim/forms/model_forms.py:665 +#: netbox/dcim/forms/bulk_import.py:693 netbox/dcim/forms/model_forms.py:665 msgid "Adopt already existing components" msgstr "Přijměte již existující komponenty" -#: dcim/forms/bulk_import.py:711 dcim/forms/bulk_import.py:737 -#: dcim/forms/bulk_import.py:763 +#: netbox/dcim/forms/bulk_import.py:733 netbox/dcim/forms/bulk_import.py:759 +#: netbox/dcim/forms/bulk_import.py:785 msgid "Port type" msgstr "Typ portu" -#: dcim/forms/bulk_import.py:719 dcim/forms/bulk_import.py:745 +#: netbox/dcim/forms/bulk_import.py:741 netbox/dcim/forms/bulk_import.py:767 msgid "Port speed in bps" msgstr "Rychlost portu v bps" -#: dcim/forms/bulk_import.py:783 +#: netbox/dcim/forms/bulk_import.py:805 msgid "Outlet type" msgstr "Typ výstupu" -#: dcim/forms/bulk_import.py:790 +#: netbox/dcim/forms/bulk_import.py:812 msgid "Local power port which feeds this outlet" msgstr "Místní napájecí port, který napájí tuto zásuvku" -#: dcim/forms/bulk_import.py:796 +#: netbox/dcim/forms/bulk_import.py:818 msgid "Electrical phase (for three-phase circuits)" msgstr "Elektrická fáze (pro třífázové obvody)" -#: dcim/forms/bulk_import.py:837 dcim/forms/model_forms.py:1316 -#: virtualization/forms/bulk_import.py:155 -#: virtualization/forms/model_forms.py:305 +#: 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 msgid "Parent interface" msgstr "Nadřazené rozhraní" -#: dcim/forms/bulk_import.py:844 dcim/forms/model_forms.py:1324 -#: virtualization/forms/bulk_import.py:162 -#: virtualization/forms/model_forms.py:313 +#: 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 msgid "Bridged interface" msgstr "Přemostěné rozhraní" -#: dcim/forms/bulk_import.py:847 +#: netbox/dcim/forms/bulk_import.py:869 msgid "Lag" msgstr "Zpoždění" -#: dcim/forms/bulk_import.py:851 +#: netbox/dcim/forms/bulk_import.py:873 msgid "Parent LAG interface" msgstr "Nadřazené rozhraní LAG" -#: dcim/forms/bulk_import.py:854 +#: netbox/dcim/forms/bulk_import.py:876 msgid "Vdcs" msgstr "Vdcs" -#: dcim/forms/bulk_import.py:859 +#: netbox/dcim/forms/bulk_import.py:881 msgid "VDC names separated by commas, encased with double quotes. Example:" msgstr "Názvy VDC oddělené čárkami, uzavřené dvojitými uvozovkami. Příklad:" -#: dcim/forms/bulk_import.py:865 +#: netbox/dcim/forms/bulk_import.py:887 msgid "Physical medium" msgstr "Fyzické médium" -#: dcim/forms/bulk_import.py:868 dcim/forms/filtersets.py:1365 +#: netbox/dcim/forms/bulk_import.py:890 netbox/dcim/forms/filtersets.py:1365 msgid "Duplex" msgstr "Dvoupodlažní" -#: dcim/forms/bulk_import.py:873 +#: netbox/dcim/forms/bulk_import.py:895 msgid "Poe mode" msgstr "Režim Poe" -#: dcim/forms/bulk_import.py:879 +#: netbox/dcim/forms/bulk_import.py:901 msgid "Poe type" msgstr "Typ Poe" -#: dcim/forms/bulk_import.py:888 virtualization/forms/bulk_import.py:168 +#: netbox/dcim/forms/bulk_import.py:910 +#: netbox/virtualization/forms/bulk_import.py:168 msgid "IEEE 802.1Q operational mode (for L2 interfaces)" msgstr "Provozní režim IEEE 802.1Q (pro rozhraní L2)" -#: dcim/forms/bulk_import.py:895 ipam/forms/bulk_import.py:161 -#: ipam/forms/bulk_import.py:247 ipam/forms/bulk_import.py:283 -#: ipam/forms/filtersets.py:201 ipam/forms/filtersets.py:277 -#: ipam/forms/filtersets.py:336 virtualization/forms/bulk_import.py:175 +#: netbox/dcim/forms/bulk_import.py: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 msgid "Assigned VRF" msgstr "Přiřazené VRF" -#: dcim/forms/bulk_import.py:898 +#: netbox/dcim/forms/bulk_import.py:920 msgid "Rf role" msgstr "Rf role" -#: dcim/forms/bulk_import.py:901 +#: netbox/dcim/forms/bulk_import.py:923 msgid "Wireless role (AP/station)" msgstr "Bezdrátová role (AP/stanice)" -#: dcim/forms/bulk_import.py:937 +#: netbox/dcim/forms/bulk_import.py:959 #, python-brace-format msgid "VDC {vdc} is not assigned to device {device}" msgstr "VDC {vdc} není přiřazen k zařízení {device}" -#: dcim/forms/bulk_import.py:951 dcim/forms/model_forms.py:1000 -#: dcim/forms/model_forms.py:1575 dcim/forms/object_import.py:117 +#: 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 msgid "Rear port" msgstr "Zadní port" -#: dcim/forms/bulk_import.py:954 +#: netbox/dcim/forms/bulk_import.py:976 msgid "Corresponding rear port" msgstr "Odpovídající zadní port" -#: dcim/forms/bulk_import.py:959 dcim/forms/bulk_import.py:1000 -#: dcim/forms/bulk_import.py:1216 +#: netbox/dcim/forms/bulk_import.py:981 netbox/dcim/forms/bulk_import.py:1022 +#: netbox/dcim/forms/bulk_import.py:1238 msgid "Physical medium classification" msgstr "Klasifikace fyzického média" -#: dcim/forms/bulk_import.py:1028 dcim/tables/devices.py:822 +#: netbox/dcim/forms/bulk_import.py:1050 netbox/dcim/tables/devices.py:822 msgid "Installed device" msgstr "Nainstalované zařízení" -#: dcim/forms/bulk_import.py:1032 +#: netbox/dcim/forms/bulk_import.py:1054 msgid "Child device installed within this bay" msgstr "Dětské zařízení instalované v této pozici" -#: dcim/forms/bulk_import.py:1034 +#: netbox/dcim/forms/bulk_import.py:1056 msgid "Child device not found." msgstr "Dětské zařízení nebylo nalezeno." -#: dcim/forms/bulk_import.py:1092 +#: netbox/dcim/forms/bulk_import.py:1114 msgid "Parent inventory item" msgstr "Nadřazená položka inventáře" -#: dcim/forms/bulk_import.py:1095 +#: netbox/dcim/forms/bulk_import.py:1117 msgid "Component type" msgstr "Typ komponenty" -#: dcim/forms/bulk_import.py:1099 +#: netbox/dcim/forms/bulk_import.py:1121 msgid "Component Type" msgstr "Typ komponenty" -#: dcim/forms/bulk_import.py:1102 +#: netbox/dcim/forms/bulk_import.py:1124 msgid "Compnent name" msgstr "Název komponenty" -#: dcim/forms/bulk_import.py:1104 +#: netbox/dcim/forms/bulk_import.py:1126 msgid "Component Name" msgstr "Název komponenty" -#: dcim/forms/bulk_import.py:1146 +#: netbox/dcim/forms/bulk_import.py:1168 #, python-brace-format msgid "Component not found: {device} - {component_name}" msgstr "Komponenta nebyla nalezena: {device} - {component_name}" -#: dcim/forms/bulk_import.py:1171 +#: netbox/dcim/forms/bulk_import.py:1193 msgid "Side A device" msgstr "Zařízení na straně A" -#: dcim/forms/bulk_import.py:1174 dcim/forms/bulk_import.py:1192 +#: netbox/dcim/forms/bulk_import.py:1196 netbox/dcim/forms/bulk_import.py:1214 msgid "Device name" msgstr "Název zařízení" -#: dcim/forms/bulk_import.py:1177 +#: netbox/dcim/forms/bulk_import.py:1199 msgid "Side A type" msgstr "Typ strany A" -#: dcim/forms/bulk_import.py:1180 dcim/forms/bulk_import.py:1198 +#: netbox/dcim/forms/bulk_import.py:1202 netbox/dcim/forms/bulk_import.py:1220 msgid "Termination type" msgstr "Typ ukončení" -#: dcim/forms/bulk_import.py:1183 +#: netbox/dcim/forms/bulk_import.py:1205 msgid "Side A name" msgstr "Jméno strany A" -#: dcim/forms/bulk_import.py:1184 dcim/forms/bulk_import.py:1202 +#: netbox/dcim/forms/bulk_import.py:1206 netbox/dcim/forms/bulk_import.py:1224 msgid "Termination name" msgstr "Název ukončení" -#: dcim/forms/bulk_import.py:1189 +#: netbox/dcim/forms/bulk_import.py:1211 msgid "Side B device" msgstr "Zařízení na straně B" -#: dcim/forms/bulk_import.py:1195 +#: netbox/dcim/forms/bulk_import.py:1217 msgid "Side B type" msgstr "Typ strany B" -#: dcim/forms/bulk_import.py:1201 +#: netbox/dcim/forms/bulk_import.py:1223 msgid "Side B name" msgstr "Název strany B" -#: dcim/forms/bulk_import.py:1210 wireless/forms/bulk_import.py:86 +#: netbox/dcim/forms/bulk_import.py:1232 +#: netbox/wireless/forms/bulk_import.py:86 msgid "Connection status" msgstr "Stav připojení" -#: dcim/forms/bulk_import.py:1262 +#: netbox/dcim/forms/bulk_import.py:1284 #, python-brace-format msgid "Side {side_upper}: {device} {termination_object} is already connected" msgstr "Strana {side_upper}: {device} {termination_object} je již připojeno" -#: dcim/forms/bulk_import.py:1268 +#: netbox/dcim/forms/bulk_import.py:1290 #, python-brace-format msgid "{side_upper} side termination not found: {device} {name}" msgstr "Zakončení strany {side_upper} nebylo nalezeno: {device} {name}" -#: dcim/forms/bulk_import.py:1293 dcim/forms/model_forms.py:785 -#: dcim/tables/devices.py:1027 templates/dcim/device.html:132 -#: templates/dcim/virtualchassis.html:27 templates/dcim/virtualchassis.html:67 +#: 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/templates/dcim/virtualchassis.html:27 +#: netbox/templates/dcim/virtualchassis.html:67 msgid "Master" msgstr "Hlavní" -#: dcim/forms/bulk_import.py:1297 +#: netbox/dcim/forms/bulk_import.py:1319 msgid "Master device" msgstr "Hlavní zařízení" -#: dcim/forms/bulk_import.py:1314 +#: netbox/dcim/forms/bulk_import.py:1336 msgid "Name of parent site" msgstr "Název nadřazeného webu" -#: dcim/forms/bulk_import.py:1348 +#: netbox/dcim/forms/bulk_import.py:1370 msgid "Upstream power panel" msgstr "Nadřazený napájecí panel" -#: dcim/forms/bulk_import.py:1378 +#: netbox/dcim/forms/bulk_import.py:1400 msgid "Primary or redundant" msgstr "Primární nebo redundantní" -#: dcim/forms/bulk_import.py:1383 +#: netbox/dcim/forms/bulk_import.py:1405 msgid "Supply type (AC/DC)" msgstr "Typ napájení (AC/DC)" -#: dcim/forms/bulk_import.py:1388 +#: netbox/dcim/forms/bulk_import.py:1410 msgid "Single or three-phase" msgstr "Jednofázové nebo třífázové" -#: dcim/forms/bulk_import.py:1439 dcim/forms/model_forms.py:1670 -#: templates/dcim/device.html:190 templates/dcim/virtualdevicecontext.html:30 -#: templates/virtualization/virtualmachine.html:52 +#: netbox/dcim/forms/bulk_import.py:1461 netbox/dcim/forms/model_forms.py:1677 +#: netbox/templates/dcim/device.html:190 +#: netbox/templates/dcim/virtualdevicecontext.html:30 +#: netbox/templates/virtualization/virtualmachine.html:52 msgid "Primary IPv4" msgstr "Primární IPv4" -#: dcim/forms/bulk_import.py:1443 +#: netbox/dcim/forms/bulk_import.py:1465 msgid "IPv4 address with mask, e.g. 1.2.3.4/24" msgstr "IPv4 adresa s maskou, např. 1.2.3.4/24" -#: dcim/forms/bulk_import.py:1446 dcim/forms/model_forms.py:1679 -#: templates/dcim/device.html:206 templates/dcim/virtualdevicecontext.html:41 -#: templates/virtualization/virtualmachine.html:68 +#: netbox/dcim/forms/bulk_import.py:1468 netbox/dcim/forms/model_forms.py:1686 +#: netbox/templates/dcim/device.html:206 +#: netbox/templates/dcim/virtualdevicecontext.html:41 +#: netbox/templates/virtualization/virtualmachine.html:68 msgid "Primary IPv6" msgstr "Primární IPv6" -#: dcim/forms/bulk_import.py:1450 +#: netbox/dcim/forms/bulk_import.py:1472 msgid "IPv6 address with prefix length, e.g. 2001:db8::1/64" msgstr "IPv6 adresa s délkou předpony, např. 2001:db8: :1/64" -#: dcim/forms/common.py:24 dcim/models/device_components.py:527 -#: templates/dcim/interface.html:57 -#: templates/virtualization/vminterface.html:55 -#: virtualization/forms/bulk_edit.py:225 +#: netbox/dcim/forms/common.py:24 netbox/dcim/models/device_components.py:527 +#: netbox/templates/dcim/interface.html:57 +#: netbox/templates/virtualization/vminterface.html:55 +#: netbox/virtualization/forms/bulk_edit.py:225 msgid "MTU" msgstr "MTU" -#: dcim/forms/common.py:65 +#: netbox/dcim/forms/common.py:65 #, python-brace-format msgid "" "The tagged VLANs ({vlans}) must belong to the same site as the interface's " @@ -4202,7 +4636,7 @@ msgstr "" "Označené VLAN ({vlans}) musí patřit ke stejnému webu jako nadřazené " "zařízení/VM rozhraní, nebo musí být globální" -#: dcim/forms/common.py:126 +#: netbox/dcim/forms/common.py:126 msgid "" "Cannot install module with placeholder values in a module bay with no " "position defined." @@ -4210,7 +4644,7 @@ msgstr "" "Nelze nainstalovat modul se zástupnými hodnotami do pozice modulu bez " "definované polohy." -#: dcim/forms/common.py:131 +#: netbox/dcim/forms/common.py:131 #, python-brace-format msgid "" "Cannot install module with placeholder values in a module bay tree {level} " @@ -4219,187 +4653,198 @@ msgstr "" "Nelze nainstalovat modul se zástupnými hodnotami do stromu modulu {level} na" " stromě, ale {tokens} zadané zástupné symboly." -#: dcim/forms/common.py:144 +#: netbox/dcim/forms/common.py:144 #, python-brace-format msgid "Cannot adopt {model} {name} as it already belongs to a module" msgstr "Nelze adoptovat {model} {name}, protože již patří do modulu" -#: dcim/forms/common.py:153 +#: netbox/dcim/forms/common.py:153 #, python-brace-format msgid "A {model} named {name} already exists" msgstr "{model} pojmenovaný {name} již existuje" -#: dcim/forms/connections.py:49 dcim/forms/model_forms.py:738 -#: dcim/tables/power.py:66 templates/dcim/inc/cable_termination.html:37 -#: templates/dcim/powerfeed.html:24 templates/dcim/powerpanel.html:19 -#: templates/dcim/trace/powerpanel.html:4 +#: netbox/dcim/forms/connections.py:49 netbox/dcim/forms/model_forms.py:738 +#: netbox/dcim/tables/power.py:66 +#: netbox/templates/dcim/inc/cable_termination.html:37 +#: netbox/templates/dcim/powerfeed.html:24 +#: netbox/templates/dcim/powerpanel.html:19 +#: netbox/templates/dcim/trace/powerpanel.html:4 msgid "Power Panel" msgstr "Napájecí panel" -#: dcim/forms/connections.py:58 dcim/forms/model_forms.py:765 -#: templates/dcim/powerfeed.html:21 templates/dcim/powerport.html:80 +#: netbox/dcim/forms/connections.py:58 netbox/dcim/forms/model_forms.py:765 +#: netbox/templates/dcim/powerfeed.html:21 +#: netbox/templates/dcim/powerport.html:80 msgid "Power Feed" msgstr "Napájecí zdroj" -#: dcim/forms/connections.py:81 +#: netbox/dcim/forms/connections.py:81 msgid "Side" msgstr "Strana" -#: dcim/forms/filtersets.py:136 dcim/tables/devices.py:295 +#: netbox/dcim/forms/filtersets.py:136 netbox/dcim/tables/devices.py:295 msgid "Device Status" msgstr "Stav zařízení" -#: dcim/forms/filtersets.py:149 +#: netbox/dcim/forms/filtersets.py:149 msgid "Parent region" msgstr "Nadřazená oblast" -#: dcim/forms/filtersets.py:163 tenancy/forms/bulk_import.py:28 -#: tenancy/forms/bulk_import.py:62 tenancy/forms/filtersets.py:33 -#: tenancy/forms/filtersets.py:62 wireless/forms/bulk_import.py:25 -#: wireless/forms/filtersets.py:25 +#: netbox/dcim/forms/filtersets.py:163 netbox/tenancy/forms/bulk_import.py:28 +#: netbox/tenancy/forms/bulk_import.py:62 +#: netbox/tenancy/forms/filtersets.py:33 netbox/tenancy/forms/filtersets.py:62 +#: netbox/wireless/forms/bulk_import.py:25 +#: netbox/wireless/forms/filtersets.py:25 msgid "Parent group" msgstr "Rodičovská skupina" -#: dcim/forms/filtersets.py:242 templates/dcim/location.html:58 -#: templates/dcim/site.html:56 +#: netbox/dcim/forms/filtersets.py:242 netbox/templates/dcim/location.html:58 +#: netbox/templates/dcim/site.html:56 msgid "Facility" msgstr "Zařízení" -#: dcim/forms/filtersets.py:380 -msgid "Rack type" -msgstr "Typ stojanu" - -#: dcim/forms/filtersets.py:397 +#: netbox/dcim/forms/filtersets.py:397 msgid "Function" msgstr "Funkce" -#: dcim/forms/filtersets.py:483 dcim/forms/model_forms.py:373 -#: templates/inc/panels/image_attachments.html:6 +#: netbox/dcim/forms/filtersets.py:483 netbox/dcim/forms/model_forms.py:373 +#: netbox/templates/inc/panels/image_attachments.html:6 msgid "Images" msgstr "Obrázky" -#: dcim/forms/filtersets.py:486 dcim/forms/filtersets.py:611 -#: dcim/forms/filtersets.py:726 +#: netbox/dcim/forms/filtersets.py:486 netbox/dcim/forms/filtersets.py:611 +#: netbox/dcim/forms/filtersets.py:726 msgid "Components" msgstr "Komponenty" -#: dcim/forms/filtersets.py:506 +#: netbox/dcim/forms/filtersets.py:506 msgid "Subdevice role" msgstr "Role dílčího zařízení" -#: dcim/forms/filtersets.py:790 dcim/tables/racks.py:54 -#: templates/dcim/racktype.html:20 +#: netbox/dcim/forms/filtersets.py:790 netbox/dcim/tables/racks.py:54 +#: netbox/templates/dcim/racktype.html:20 msgid "Model" msgstr "Model" -#: dcim/forms/filtersets.py:834 +#: netbox/dcim/forms/filtersets.py:834 msgid "Has an OOB IP" msgstr "Má IP OOB" -#: dcim/forms/filtersets.py:841 +#: netbox/dcim/forms/filtersets.py:841 msgid "Virtual chassis member" msgstr "Člen virtuálního šasi" -#: dcim/forms/filtersets.py:890 +#: netbox/dcim/forms/filtersets.py:890 msgid "Has virtual device contexts" msgstr "Má kontexty virtuálních zařízení" -#: dcim/forms/filtersets.py:903 extras/filtersets.py:585 -#: ipam/forms/filtersets.py:452 virtualization/forms/filtersets.py:112 +#: netbox/dcim/forms/filtersets.py:903 netbox/extras/filtersets.py:585 +#: netbox/ipam/forms/filtersets.py:452 +#: netbox/virtualization/forms/filtersets.py:112 msgid "Cluster group" msgstr "Skupina klastru" -#: dcim/forms/filtersets.py:1210 +#: netbox/dcim/forms/filtersets.py:1210 msgid "Cabled" msgstr "Kabelový" -#: dcim/forms/filtersets.py:1217 +#: netbox/dcim/forms/filtersets.py:1217 msgid "Occupied" msgstr "Obsazeno" -#: dcim/forms/filtersets.py:1244 dcim/forms/filtersets.py:1269 -#: dcim/forms/filtersets.py:1293 dcim/forms/filtersets.py:1313 -#: dcim/forms/filtersets.py:1336 dcim/tables/devices.py:364 -#: templates/dcim/consoleport.html:55 templates/dcim/consoleserverport.html:55 -#: templates/dcim/frontport.html:69 templates/dcim/interface.html:140 -#: templates/dcim/powerfeed.html:110 templates/dcim/poweroutlet.html:59 -#: templates/dcim/powerport.html:59 templates/dcim/rearport.html:65 +#: netbox/dcim/forms/filtersets.py: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/templates/dcim/consoleport.html:55 +#: netbox/templates/dcim/consoleserverport.html:55 +#: netbox/templates/dcim/frontport.html:69 +#: netbox/templates/dcim/interface.html:140 +#: netbox/templates/dcim/powerfeed.html:110 +#: netbox/templates/dcim/poweroutlet.html:59 +#: netbox/templates/dcim/powerport.html:59 +#: netbox/templates/dcim/rearport.html:65 msgid "Connection" msgstr "Připojení" -#: dcim/forms/filtersets.py:1348 extras/forms/bulk_edit.py:326 -#: extras/forms/bulk_import.py:247 extras/forms/filtersets.py:464 -#: extras/forms/model_forms.py:675 extras/tables/tables.py:579 -#: templates/extras/journalentry.html:30 +#: netbox/dcim/forms/filtersets.py:1348 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 "Druh" -#: dcim/forms/filtersets.py:1377 +#: netbox/dcim/forms/filtersets.py:1377 msgid "Mgmt only" msgstr "Pouze správa" -#: dcim/forms/filtersets.py:1389 dcim/forms/model_forms.py:1383 -#: dcim/models/device_components.py:629 templates/dcim/interface.html:129 +#: 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 msgid "WWN" msgstr "WWN" -#: dcim/forms/filtersets.py:1409 +#: netbox/dcim/forms/filtersets.py:1409 msgid "Wireless channel" msgstr "Bezdrátový kanál" -#: dcim/forms/filtersets.py:1413 +#: netbox/dcim/forms/filtersets.py:1413 msgid "Channel frequency (MHz)" msgstr "Frekvence kanálu (MHz)" -#: dcim/forms/filtersets.py:1417 +#: netbox/dcim/forms/filtersets.py:1417 msgid "Channel width (MHz)" msgstr "Šířka kanálu (MHz)" -#: dcim/forms/filtersets.py:1421 templates/dcim/interface.html:85 +#: netbox/dcim/forms/filtersets.py:1421 +#: netbox/templates/dcim/interface.html:85 msgid "Transmit power (dBm)" msgstr "Vysílací výkon (dBm)" -#: dcim/forms/filtersets.py:1446 dcim/forms/filtersets.py:1471 -#: dcim/tables/devices.py:327 templates/dcim/cable.html:12 -#: templates/dcim/cable_trace.html:46 templates/dcim/frontport.html:77 -#: templates/dcim/htmx/cable_edit.html:50 -#: templates/dcim/inc/connection_endpoints.html:4 -#: templates/dcim/rearport.html:73 templates/dcim/trace/cable.html:7 +#: netbox/dcim/forms/filtersets.py:1446 netbox/dcim/forms/filtersets.py:1471 +#: netbox/dcim/tables/devices.py:327 netbox/templates/dcim/cable.html:12 +#: netbox/templates/dcim/cable_trace.html:46 +#: netbox/templates/dcim/frontport.html:77 +#: netbox/templates/dcim/htmx/cable_edit.html:50 +#: netbox/templates/dcim/inc/connection_endpoints.html:4 +#: netbox/templates/dcim/rearport.html:73 +#: netbox/templates/dcim/trace/cable.html:7 msgid "Cable" msgstr "Kabel" -#: dcim/forms/filtersets.py:1550 dcim/tables/devices.py:949 +#: netbox/dcim/forms/filtersets.py:1550 netbox/dcim/tables/devices.py:949 msgid "Discovered" msgstr "objeveno" -#: dcim/forms/formsets.py:20 +#: netbox/dcim/forms/formsets.py:20 #, python-brace-format msgid "A virtual chassis member already exists in position {vc_position}." msgstr "Člen virtuálního šasi na pozici {vc_position} již existuje." -#: dcim/forms/model_forms.py:140 +#: netbox/dcim/forms/model_forms.py:140 msgid "Contact Info" msgstr "Kontaktní informace" -#: dcim/forms/model_forms.py:195 templates/dcim/rackrole.html:19 +#: netbox/dcim/forms/model_forms.py:195 netbox/templates/dcim/rackrole.html:19 msgid "Rack Role" msgstr "Role stojanu" -#: dcim/forms/model_forms.py:212 dcim/forms/model_forms.py:362 -#: dcim/forms/model_forms.py:446 utilities/forms/fields/fields.py:47 +#: netbox/dcim/forms/model_forms.py:212 netbox/dcim/forms/model_forms.py:362 +#: netbox/dcim/forms/model_forms.py:446 +#: netbox/utilities/forms/fields/fields.py:47 msgid "Slug" msgstr "URL zkratka" -#: dcim/forms/model_forms.py:259 +#: netbox/dcim/forms/model_forms.py:259 msgid "Select a pre-defined rack type, or set physical characteristics below." msgstr "" "Vyberte předdefinovaný typ stojanu nebo nastavte fyzikální vlastnosti níže." -#: dcim/forms/model_forms.py:265 +#: netbox/dcim/forms/model_forms.py:265 msgid "Inventory Control" msgstr "Řízení zásob" -#: dcim/forms/model_forms.py:313 +#: netbox/dcim/forms/model_forms.py:313 msgid "" "Comma-separated list of numeric unit IDs. A range may be specified using a " "hyphen." @@ -4407,144 +4852,171 @@ msgstr "" "Seznam číselných ID jednotek oddělený čárkami. Rozsah lze zadat pomocí " "pomlčky." -#: dcim/forms/model_forms.py:322 dcim/tables/racks.py:202 +#: netbox/dcim/forms/model_forms.py:322 netbox/dcim/tables/racks.py:202 msgid "Reservation" msgstr "Rezervace" -#: dcim/forms/model_forms.py:423 templates/dcim/devicerole.html:23 +#: netbox/dcim/forms/model_forms.py:423 +#: netbox/templates/dcim/devicerole.html:23 msgid "Device Role" msgstr "Role zařízení" -#: dcim/forms/model_forms.py:490 dcim/models/devices.py:644 +#: netbox/dcim/forms/model_forms.py:490 netbox/dcim/models/devices.py:644 msgid "The lowest-numbered unit occupied by the device" msgstr "Nejnižší číslovaná pozice obsazená zařízením" -#: dcim/forms/model_forms.py:547 +#: netbox/dcim/forms/model_forms.py:547 msgid "The position in the virtual chassis this device is identified by" msgstr "Poloha ve virtuálním podvozku tohoto zařízení je identifikována" -#: dcim/forms/model_forms.py:552 +#: netbox/dcim/forms/model_forms.py:552 msgid "The priority of the device in the virtual chassis" msgstr "Priorita zařízení ve virtuálním šasi" -#: dcim/forms/model_forms.py:659 +#: netbox/dcim/forms/model_forms.py:659 msgid "Automatically populate components associated with this module type" msgstr "Automaticky naplnit komponenty přidružené k tomuto typu modulu" -#: dcim/forms/model_forms.py:767 +#: netbox/dcim/forms/model_forms.py:767 msgid "Characteristics" msgstr "Charakteristika" -#: dcim/forms/model_forms.py:1087 +#: netbox/dcim/forms/model_forms.py:914 +#, python-brace-format +msgid "" +"Alphanumeric ranges are supported for bulk creation. Mixed cases and types " +"within a single range are not supported (example: " +"[ge,xe]-0/0/[0-9]). The token {module}, if " +"present, will be automatically replaced with the position value when " +"creating a new module." +msgstr "" + +#: netbox/dcim/forms/model_forms.py:1094 msgid "Console port template" msgstr "Šablona portu konzoly" -#: dcim/forms/model_forms.py:1095 +#: netbox/dcim/forms/model_forms.py:1102 msgid "Console server port template" msgstr "Šablona portu konzolového serveru" -#: dcim/forms/model_forms.py:1103 +#: netbox/dcim/forms/model_forms.py:1110 msgid "Front port template" msgstr "Šablona předního portu" -#: dcim/forms/model_forms.py:1111 +#: netbox/dcim/forms/model_forms.py:1118 msgid "Interface template" msgstr "Šablona rozhraní" -#: dcim/forms/model_forms.py:1119 +#: netbox/dcim/forms/model_forms.py:1126 msgid "Power outlet template" msgstr "Šablona elektrické zásuvky" -#: dcim/forms/model_forms.py:1127 +#: netbox/dcim/forms/model_forms.py:1134 msgid "Power port template" msgstr "Šablona napájecího portu" -#: dcim/forms/model_forms.py:1135 +#: netbox/dcim/forms/model_forms.py:1142 msgid "Rear port template" msgstr "Šablona zadního portu" -#: dcim/forms/model_forms.py:1144 dcim/forms/model_forms.py:1388 -#: dcim/forms/model_forms.py:1551 dcim/forms/model_forms.py:1583 -#: dcim/tables/connections.py:65 ipam/forms/bulk_import.py:318 -#: ipam/forms/model_forms.py:280 ipam/forms/model_forms.py:289 -#: ipam/tables/fhrp.py:64 ipam/tables/ip.py:372 ipam/tables/vlans.py:169 -#: templates/circuits/inc/circuit_termination_fields.html:51 -#: templates/dcim/frontport.html:106 templates/dcim/interface.html:27 -#: templates/dcim/interface.html:184 templates/dcim/interface.html:310 -#: templates/dcim/rearport.html:102 -#: templates/virtualization/vminterface.html:18 -#: templates/vpn/tunneltermination.html:31 -#: templates/wireless/inc/wirelesslink_interface.html:10 -#: templates/wireless/wirelesslink.html:10 -#: templates/wireless/wirelesslink.html:55 -#: virtualization/forms/model_forms.py:348 vpn/forms/bulk_import.py:297 -#: vpn/forms/model_forms.py:436 vpn/forms/model_forms.py:445 -#: wireless/forms/model_forms.py:113 wireless/forms/model_forms.py:155 +#: netbox/dcim/forms/model_forms.py: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 "Rozhraní" -#: dcim/forms/model_forms.py:1145 dcim/forms/model_forms.py:1584 -#: dcim/tables/connections.py:27 templates/dcim/consoleport.html:17 -#: templates/dcim/consoleserverport.html:74 templates/dcim/frontport.html:112 +#: netbox/dcim/forms/model_forms.py:1152 netbox/dcim/forms/model_forms.py:1591 +#: netbox/dcim/tables/connections.py:27 +#: netbox/templates/dcim/consoleport.html:17 +#: netbox/templates/dcim/consoleserverport.html:74 +#: netbox/templates/dcim/frontport.html:112 msgid "Console Port" msgstr "Port konzoly" -#: dcim/forms/model_forms.py:1146 dcim/forms/model_forms.py:1585 -#: templates/dcim/consoleport.html:73 templates/dcim/consoleserverport.html:17 -#: templates/dcim/frontport.html:109 +#: netbox/dcim/forms/model_forms.py:1153 netbox/dcim/forms/model_forms.py:1592 +#: netbox/templates/dcim/consoleport.html:73 +#: netbox/templates/dcim/consoleserverport.html:17 +#: netbox/templates/dcim/frontport.html:109 msgid "Console Server Port" msgstr "Port konzolového serveru" -#: dcim/forms/model_forms.py:1147 dcim/forms/model_forms.py:1586 -#: templates/circuits/inc/circuit_termination_fields.html:52 -#: templates/dcim/consoleport.html:76 templates/dcim/consoleserverport.html:77 -#: templates/dcim/frontport.html:17 templates/dcim/frontport.html:115 -#: templates/dcim/interface.html:187 templates/dcim/rearport.html:105 +#: netbox/dcim/forms/model_forms.py:1154 netbox/dcim/forms/model_forms.py:1593 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:52 +#: netbox/templates/dcim/consoleport.html:76 +#: netbox/templates/dcim/consoleserverport.html:77 +#: netbox/templates/dcim/frontport.html:17 +#: netbox/templates/dcim/frontport.html:115 +#: netbox/templates/dcim/interface.html:187 +#: netbox/templates/dcim/rearport.html:105 msgid "Front Port" msgstr "Přední port" -#: dcim/forms/model_forms.py:1148 dcim/forms/model_forms.py:1587 -#: dcim/tables/devices.py:710 -#: templates/circuits/inc/circuit_termination_fields.html:53 -#: templates/dcim/consoleport.html:79 templates/dcim/consoleserverport.html:80 -#: templates/dcim/frontport.html:50 templates/dcim/frontport.html:118 -#: templates/dcim/interface.html:190 templates/dcim/rearport.html:17 -#: templates/dcim/rearport.html:108 +#: netbox/dcim/forms/model_forms.py:1155 netbox/dcim/forms/model_forms.py:1594 +#: netbox/dcim/tables/devices.py:710 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:53 +#: netbox/templates/dcim/consoleport.html:79 +#: netbox/templates/dcim/consoleserverport.html:80 +#: netbox/templates/dcim/frontport.html:50 +#: netbox/templates/dcim/frontport.html:118 +#: netbox/templates/dcim/interface.html:190 +#: netbox/templates/dcim/rearport.html:17 +#: netbox/templates/dcim/rearport.html:108 msgid "Rear Port" msgstr "Zadní port" -#: dcim/forms/model_forms.py:1149 dcim/forms/model_forms.py:1588 -#: dcim/tables/connections.py:46 dcim/tables/devices.py:512 -#: templates/dcim/poweroutlet.html:44 templates/dcim/powerport.html:17 +#: 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/templates/dcim/powerport.html:17 msgid "Power Port" msgstr "Napájecí port" -#: dcim/forms/model_forms.py:1150 dcim/forms/model_forms.py:1589 -#: templates/dcim/poweroutlet.html:17 templates/dcim/powerport.html:77 +#: netbox/dcim/forms/model_forms.py:1157 netbox/dcim/forms/model_forms.py:1596 +#: netbox/templates/dcim/poweroutlet.html:17 +#: netbox/templates/dcim/powerport.html:77 msgid "Power Outlet" msgstr "Napájecí zásuvka" -#: dcim/forms/model_forms.py:1152 dcim/forms/model_forms.py:1591 +#: netbox/dcim/forms/model_forms.py:1159 netbox/dcim/forms/model_forms.py:1598 msgid "Component Assignment" msgstr "Přiřazení komponent" -#: dcim/forms/model_forms.py:1195 dcim/forms/model_forms.py:1638 +#: netbox/dcim/forms/model_forms.py:1202 netbox/dcim/forms/model_forms.py:1645 msgid "An InventoryItem can only be assigned to a single component." msgstr "InventoryItem lze přiřadit pouze k jedné komponentě." -#: dcim/forms/model_forms.py:1332 +#: netbox/dcim/forms/model_forms.py:1339 msgid "LAG interface" msgstr "Rozhraní LAG" -#: dcim/forms/model_forms.py:1355 +#: netbox/dcim/forms/model_forms.py:1362 msgid "Filter VLANs available for assignment by group." msgstr "Filtrujte sítě VLAN dostupné pro přiřazení podle skupiny." -#: dcim/forms/model_forms.py:1484 +#: netbox/dcim/forms/model_forms.py:1491 msgid "Child Device" msgstr "Podřazené zařízení" -#: dcim/forms/model_forms.py:1485 +#: netbox/dcim/forms/model_forms.py:1492 msgid "" "Child devices must first be created and assigned to the site and rack of the" " parent device." @@ -4552,32 +5024,35 @@ msgstr "" "Podřízená zařízení musí být nejprve vytvořena a přiřazena k staveništi a " "stojanu nadřazeného zařízení." -#: dcim/forms/model_forms.py:1527 +#: netbox/dcim/forms/model_forms.py:1534 msgid "Console port" msgstr "Port konzoly" -#: dcim/forms/model_forms.py:1535 +#: netbox/dcim/forms/model_forms.py:1542 msgid "Console server port" msgstr "Port konzolového serveru" -#: dcim/forms/model_forms.py:1543 +#: netbox/dcim/forms/model_forms.py:1550 msgid "Front port" msgstr "Přední port" -#: dcim/forms/model_forms.py:1559 +#: netbox/dcim/forms/model_forms.py:1566 msgid "Power outlet" msgstr "Napájecí zásuvka" -#: dcim/forms/model_forms.py:1579 templates/dcim/inventoryitem.html:17 +#: netbox/dcim/forms/model_forms.py:1586 +#: netbox/templates/dcim/inventoryitem.html:17 msgid "Inventory Item" msgstr "Položka inventáře" -#: dcim/forms/model_forms.py:1652 templates/dcim/inventoryitemrole.html:15 +#: netbox/dcim/forms/model_forms.py:1659 +#: netbox/templates/dcim/inventoryitemrole.html:15 msgid "Inventory Item Role" msgstr "Role položky inventáře" -#: dcim/forms/object_create.py:48 dcim/forms/object_create.py:199 -#: dcim/forms/object_create.py:355 +#: netbox/dcim/forms/object_create.py:48 +#: netbox/dcim/forms/object_create.py:199 +#: netbox/dcim/forms/object_create.py:347 msgid "" "Alphanumeric ranges are supported. (Must match the number of objects being " "created.)" @@ -4585,7 +5060,7 @@ msgstr "" "Podporovány jsou alfanumerické rozsahy. (Musí odpovídat počtu vytvořených " "objektů.)" -#: dcim/forms/object_create.py:68 +#: netbox/dcim/forms/object_create.py:68 #, python-brace-format msgid "" "The provided pattern specifies {value_count} values, but {pattern_count} are" @@ -4594,17 +5069,18 @@ msgstr "" "Poskytnutý vzor určuje {value_count} hodnot, ale očekáváno je " "{pattern_count}." -#: dcim/forms/object_create.py:110 dcim/forms/object_create.py:271 -#: dcim/tables/devices.py:252 +#: netbox/dcim/forms/object_create.py:110 +#: netbox/dcim/forms/object_create.py:263 netbox/dcim/tables/devices.py:252 msgid "Rear ports" msgstr "Zadní porty" -#: dcim/forms/object_create.py:111 dcim/forms/object_create.py:272 +#: netbox/dcim/forms/object_create.py:111 +#: netbox/dcim/forms/object_create.py:264 msgid "Select one rear port assignment for each front port being created." msgstr "" "Vyberte jedno přiřazení zadního portu pro každý vytvořený přední port." -#: dcim/forms/object_create.py:164 +#: netbox/dcim/forms/object_create.py:164 #, python-brace-format msgid "" "The number of front port templates to be created ({frontport_count}) must " @@ -4613,16 +5089,7 @@ msgstr "" "Počet šablon předních portů, které mají být vytvořeny ({frontport_count}), " "musí odpovídat zvolenému počtu pozic zadních portů ({rearport_count})." -#: dcim/forms/object_create.py:251 -#, python-brace-format -msgid "" -"The string {module} will be replaced with the position of the " -"assigned module, if any." -msgstr "" -"Řetězec {module} bude nahrazen polohou přiřazeného modulu, " -"pokud existuje." - -#: dcim/forms/object_create.py:320 +#: netbox/dcim/forms/object_create.py:312 #, python-brace-format msgid "" "The number of front ports to be created ({frontport_count}) must match the " @@ -4631,81 +5098,84 @@ msgstr "" "Počet předních portů, které mají být vytvořeny ({frontport_count}), musí " "odpovídat zvolenému počtu pozic zadních portů ({rearport_count})." -#: dcim/forms/object_create.py:409 dcim/tables/devices.py:1033 -#: ipam/tables/fhrp.py:31 templates/dcim/virtualchassis.html:53 -#: templates/dcim/virtualchassis_edit.html:47 templates/ipam/fhrpgroup.html:38 +#: netbox/dcim/forms/object_create.py:401 netbox/dcim/tables/devices.py:1033 +#: netbox/ipam/tables/fhrp.py:31 netbox/templates/dcim/virtualchassis.html:53 +#: netbox/templates/dcim/virtualchassis_edit.html:47 +#: netbox/templates/ipam/fhrpgroup.html:38 msgid "Members" msgstr "Členové" -#: dcim/forms/object_create.py:418 +#: netbox/dcim/forms/object_create.py:410 msgid "Initial position" msgstr "Počáteční pozice" -#: dcim/forms/object_create.py:421 +#: netbox/dcim/forms/object_create.py:413 msgid "" "Position of the first member device. Increases by one for each additional " "member." msgstr "Pozice prvního člena. Zvýší se o jeden pro každého dalšího člena." -#: dcim/forms/object_create.py:435 +#: netbox/dcim/forms/object_create.py:427 msgid "A position must be specified for the first VC member." msgstr "Pro prvního člena virtuálnáho šasi musí být specifikována pozice." -#: dcim/models/cables.py:62 dcim/models/device_component_templates.py:55 -#: dcim/models/device_components.py:62 extras/models/customfields.py:111 +#: netbox/dcim/models/cables.py:62 +#: netbox/dcim/models/device_component_templates.py:55 +#: netbox/dcim/models/device_components.py:62 +#: netbox/extras/models/customfields.py:111 msgid "label" msgstr "štítek" -#: dcim/models/cables.py:71 +#: netbox/dcim/models/cables.py:71 msgid "length" msgstr "délka" -#: dcim/models/cables.py:78 +#: netbox/dcim/models/cables.py:78 msgid "length unit" msgstr "jednotka délky" -#: dcim/models/cables.py:95 +#: netbox/dcim/models/cables.py:95 msgid "cable" msgstr "kabel" -#: dcim/models/cables.py:96 +#: netbox/dcim/models/cables.py:96 msgid "cables" msgstr "kabely" -#: dcim/models/cables.py:165 +#: netbox/dcim/models/cables.py:165 msgid "Must specify a unit when setting a cable length" msgstr "Při nastavování délky kabelu je nutné zadat jednotku" -#: dcim/models/cables.py:168 +#: netbox/dcim/models/cables.py:168 msgid "Must define A and B terminations when creating a new cable." msgstr "Při vytváření nového kabelu je nutné definovat zakončení A a B." -#: dcim/models/cables.py:175 +#: netbox/dcim/models/cables.py:175 msgid "Cannot connect different termination types to same end of cable." msgstr "Nelze připojit různé typy zakončení ke stejnému konci kabelu." -#: dcim/models/cables.py:183 +#: netbox/dcim/models/cables.py:183 #, python-brace-format msgid "Incompatible termination types: {type_a} and {type_b}" msgstr "Nekompatibilní typy ukončení: {type_a} a {type_b}" -#: dcim/models/cables.py:193 +#: netbox/dcim/models/cables.py:193 msgid "A and B terminations cannot connect to the same object." msgstr "Koncovky A a B se nemohou připojit ke stejnému objektu." -#: dcim/models/cables.py:260 ipam/models/asns.py:37 +#: netbox/dcim/models/cables.py:260 netbox/ipam/models/asns.py:37 msgid "end" msgstr "konec" -#: dcim/models/cables.py:313 +#: netbox/dcim/models/cables.py:313 msgid "cable termination" msgstr "zakončení kabelu" -#: dcim/models/cables.py:314 +#: netbox/dcim/models/cables.py:314 msgid "cable terminations" msgstr "zakončení kabelů" -#: dcim/models/cables.py:333 +#: netbox/dcim/models/cables.py:333 #, python-brace-format msgid "" "Duplicate termination found for {app_label}.{model} {termination_id}: cable " @@ -4714,37 +5184,37 @@ msgstr "" "Nalezeno duplicitní ukončení pro {app_label}.{model} {termination_id}: kabel" " {cable_pk}" -#: dcim/models/cables.py:343 +#: netbox/dcim/models/cables.py:343 #, python-brace-format msgid "Cables cannot be terminated to {type_display} interfaces" msgstr "Kabely nelze zakončit v {type_display} rozhraní" -#: dcim/models/cables.py:350 +#: netbox/dcim/models/cables.py:350 msgid "Circuit terminations attached to a provider network may not be cabled." msgstr "" "Zakončení okruhů připojené k síti poskytovatele nemusí být kabelovány." -#: dcim/models/cables.py:448 extras/models/configs.py:50 +#: netbox/dcim/models/cables.py:448 netbox/extras/models/configs.py:50 msgid "is active" msgstr "je aktivní" -#: dcim/models/cables.py:452 +#: netbox/dcim/models/cables.py:452 msgid "is complete" msgstr "je kompletní" -#: dcim/models/cables.py:456 +#: netbox/dcim/models/cables.py:456 msgid "is split" msgstr "je rozdělen" -#: dcim/models/cables.py:464 +#: netbox/dcim/models/cables.py:464 msgid "cable path" msgstr "trasa kabelu" -#: dcim/models/cables.py:465 +#: netbox/dcim/models/cables.py:465 msgid "cable paths" msgstr "trasy kabelů" -#: dcim/models/device_component_templates.py:46 +#: netbox/dcim/models/device_component_templates.py:46 #, python-brace-format msgid "" "{module} is accepted as a substitution for the module bay position when " @@ -4753,23 +5223,23 @@ msgstr "" "{module} je akceptován jako náhrada za pozici modulu, když je připojen k " "typu modulu." -#: dcim/models/device_component_templates.py:58 -#: dcim/models/device_components.py:65 +#: netbox/dcim/models/device_component_templates.py:58 +#: netbox/dcim/models/device_components.py:65 msgid "Physical label" msgstr "Fyzický popisek" -#: dcim/models/device_component_templates.py:103 +#: netbox/dcim/models/device_component_templates.py:103 msgid "Component templates cannot be moved to a different device type." msgstr "Šablony komponent nelze přesunout na jiný typ zařízení." -#: dcim/models/device_component_templates.py:154 +#: netbox/dcim/models/device_component_templates.py:154 msgid "" "A component template cannot be associated with both a device type and a " "module type." msgstr "" "Šablonu komponenty nelze přidružit zároveň k typu zařízení a k typu modulu." -#: dcim/models/device_component_templates.py:158 +#: netbox/dcim/models/device_component_templates.py:158 msgid "" "A component template must be associated with either a device type or a " "module type." @@ -4777,135 +5247,135 @@ msgstr "" "Šablona komponenty musí být přiřazena buď k typu zařízení, nebo k typu " "modulu." -#: dcim/models/device_component_templates.py:212 +#: netbox/dcim/models/device_component_templates.py:212 msgid "console port template" msgstr "šablona portu konzoly" -#: dcim/models/device_component_templates.py:213 +#: netbox/dcim/models/device_component_templates.py:213 msgid "console port templates" msgstr "šablony portů konzoly" -#: dcim/models/device_component_templates.py:246 +#: netbox/dcim/models/device_component_templates.py:246 msgid "console server port template" msgstr "šablona portu konzolového serveru" -#: dcim/models/device_component_templates.py:247 +#: netbox/dcim/models/device_component_templates.py:247 msgid "console server port templates" msgstr "šablony portů konzolového serveru" -#: dcim/models/device_component_templates.py:278 -#: dcim/models/device_components.py:352 +#: netbox/dcim/models/device_component_templates.py:278 +#: netbox/dcim/models/device_components.py:352 msgid "maximum draw" msgstr "maximální příkon" -#: dcim/models/device_component_templates.py:285 -#: dcim/models/device_components.py:359 +#: netbox/dcim/models/device_component_templates.py:285 +#: netbox/dcim/models/device_components.py:359 msgid "allocated draw" msgstr "přidělený příkon" -#: dcim/models/device_component_templates.py:295 +#: netbox/dcim/models/device_component_templates.py:295 msgid "power port template" msgstr "šablona napájecího portu" -#: dcim/models/device_component_templates.py:296 +#: netbox/dcim/models/device_component_templates.py:296 msgid "power port templates" msgstr "šablony napájecích portů" -#: dcim/models/device_component_templates.py:315 -#: dcim/models/device_components.py:382 +#: netbox/dcim/models/device_component_templates.py:315 +#: netbox/dcim/models/device_components.py:382 #, python-brace-format msgid "Allocated draw cannot exceed the maximum draw ({maximum_draw}W)." msgstr "Přidělený příkon nesmí překročit maximální příkon ({maximum_draw}W)." -#: dcim/models/device_component_templates.py:347 -#: dcim/models/device_components.py:477 +#: netbox/dcim/models/device_component_templates.py:347 +#: netbox/dcim/models/device_components.py:477 msgid "feed leg" msgstr "napájecí větev" -#: dcim/models/device_component_templates.py:351 -#: dcim/models/device_components.py:481 +#: netbox/dcim/models/device_component_templates.py:351 +#: netbox/dcim/models/device_components.py:481 msgid "Phase (for three-phase feeds)" msgstr "Fáze (pro třífázové napájení)" -#: dcim/models/device_component_templates.py:357 +#: netbox/dcim/models/device_component_templates.py:357 msgid "power outlet template" msgstr "šablona elektrické zásuvky" -#: dcim/models/device_component_templates.py:358 +#: netbox/dcim/models/device_component_templates.py:358 msgid "power outlet templates" msgstr "šablony zásuvek" -#: dcim/models/device_component_templates.py:367 +#: netbox/dcim/models/device_component_templates.py:367 #, python-brace-format msgid "Parent power port ({power_port}) must belong to the same device type" msgstr "" "Rodičovský napájecí port ({power_port}) musí patřit ke stejnému typu " "zařízení" -#: dcim/models/device_component_templates.py:371 +#: netbox/dcim/models/device_component_templates.py:371 #, python-brace-format msgid "Parent power port ({power_port}) must belong to the same module type" msgstr "" "Rodičovský napájecí port ({power_port}) musí patřit ke stejnému typu modulu" -#: dcim/models/device_component_templates.py:423 -#: dcim/models/device_components.py:611 +#: netbox/dcim/models/device_component_templates.py:423 +#: netbox/dcim/models/device_components.py:611 msgid "management only" msgstr "pouze řízení" -#: dcim/models/device_component_templates.py:431 -#: dcim/models/device_components.py:550 +#: netbox/dcim/models/device_component_templates.py:431 +#: netbox/dcim/models/device_components.py:550 msgid "bridge interface" msgstr "rozhraní mostu" -#: dcim/models/device_component_templates.py:449 -#: dcim/models/device_components.py:636 +#: netbox/dcim/models/device_component_templates.py:449 +#: netbox/dcim/models/device_components.py:636 msgid "wireless role" msgstr "bezdrátová role" -#: dcim/models/device_component_templates.py:455 +#: netbox/dcim/models/device_component_templates.py:455 msgid "interface template" msgstr "šablona rozhraní" -#: dcim/models/device_component_templates.py:456 +#: netbox/dcim/models/device_component_templates.py:456 msgid "interface templates" msgstr "šablony rozhraní" -#: dcim/models/device_component_templates.py:463 -#: dcim/models/device_components.py:804 -#: virtualization/models/virtualmachines.py:405 +#: netbox/dcim/models/device_component_templates.py:463 +#: netbox/dcim/models/device_components.py:804 +#: netbox/virtualization/models/virtualmachines.py:405 msgid "An interface cannot be bridged to itself." msgstr "Rozhraní nemůže být přemostěno samo od sebe." -#: dcim/models/device_component_templates.py:466 +#: netbox/dcim/models/device_component_templates.py:466 #, python-brace-format msgid "Bridge interface ({bridge}) must belong to the same device type" msgstr "Rozhraní můstku ({bridge}) musí patřit ke stejnému typu zařízení" -#: dcim/models/device_component_templates.py:470 +#: netbox/dcim/models/device_component_templates.py:470 #, python-brace-format msgid "Bridge interface ({bridge}) must belong to the same module type" msgstr "Rozhraní můstku ({bridge}) musí patřit ke stejnému typu modulu" -#: dcim/models/device_component_templates.py:526 -#: dcim/models/device_components.py:984 +#: netbox/dcim/models/device_component_templates.py:526 +#: netbox/dcim/models/device_components.py:984 msgid "rear port position" msgstr "pozice zadního portu" -#: dcim/models/device_component_templates.py:551 +#: netbox/dcim/models/device_component_templates.py:551 msgid "front port template" msgstr "šablona předního portu" -#: dcim/models/device_component_templates.py:552 +#: netbox/dcim/models/device_component_templates.py:552 msgid "front port templates" msgstr "šablony předního portu" -#: dcim/models/device_component_templates.py:562 +#: netbox/dcim/models/device_component_templates.py:562 #, python-brace-format msgid "Rear port ({name}) must belong to the same device type" msgstr "Zadní port ({name}) musí patřit ke stejnému typu zařízení" -#: dcim/models/device_component_templates.py:568 +#: netbox/dcim/models/device_component_templates.py:568 #, python-brace-format msgid "" "Invalid rear port position ({position}); rear port {name} has only {count} " @@ -4914,48 +5384,48 @@ msgstr "" "Neplatná poloha zadního portu ({position}); zadní port {name} má pouze " "{count} pozice" -#: dcim/models/device_component_templates.py:621 -#: dcim/models/device_components.py:1053 +#: netbox/dcim/models/device_component_templates.py:621 +#: netbox/dcim/models/device_components.py:1053 msgid "positions" msgstr "pozice" -#: dcim/models/device_component_templates.py:632 +#: netbox/dcim/models/device_component_templates.py:632 msgid "rear port template" msgstr "šablona zadního portu" -#: dcim/models/device_component_templates.py:633 +#: netbox/dcim/models/device_component_templates.py:633 msgid "rear port templates" msgstr "šablony zadních portů" -#: dcim/models/device_component_templates.py:662 -#: dcim/models/device_components.py:1103 +#: netbox/dcim/models/device_component_templates.py:662 +#: netbox/dcim/models/device_components.py:1103 msgid "position" msgstr "pozice" -#: dcim/models/device_component_templates.py:665 -#: dcim/models/device_components.py:1106 +#: netbox/dcim/models/device_component_templates.py:665 +#: netbox/dcim/models/device_components.py:1106 msgid "Identifier to reference when renaming installed components" msgstr "" "Identifikátor, na který se má odkazovat při přejmenování nainstalovaných " "komponent" -#: dcim/models/device_component_templates.py:671 +#: netbox/dcim/models/device_component_templates.py:671 msgid "module bay template" msgstr "šablona moduární šachty" -#: dcim/models/device_component_templates.py:672 +#: netbox/dcim/models/device_component_templates.py:672 msgid "module bay templates" msgstr "šablony modulárních šachet" -#: dcim/models/device_component_templates.py:699 +#: netbox/dcim/models/device_component_templates.py:699 msgid "device bay template" msgstr "šablona pozice zařízení" -#: dcim/models/device_component_templates.py:700 +#: netbox/dcim/models/device_component_templates.py:700 msgid "device bay templates" msgstr "šablony rozvaděčů zařízení" -#: dcim/models/device_component_templates.py:713 +#: netbox/dcim/models/device_component_templates.py:713 #, python-brace-format msgid "" "Subdevice role of device type ({device_type}) must be set to \"parent\" to " @@ -4964,201 +5434,206 @@ msgstr "" "Role dílčího zařízení typu zařízení ({device_type}) musí být nastaveno na " "„rodič“, aby bylo možné povolit pozice zařízení." -#: dcim/models/device_component_templates.py:768 -#: dcim/models/device_components.py:1262 +#: netbox/dcim/models/device_component_templates.py:768 +#: netbox/dcim/models/device_components.py:1262 msgid "part ID" msgstr "ID součásti" -#: dcim/models/device_component_templates.py:770 -#: dcim/models/device_components.py:1264 +#: netbox/dcim/models/device_component_templates.py:770 +#: netbox/dcim/models/device_components.py:1264 msgid "Manufacturer-assigned part identifier" msgstr "Identifikátor součásti přiřazený výrobcem" -#: dcim/models/device_component_templates.py:787 +#: netbox/dcim/models/device_component_templates.py:787 msgid "inventory item template" msgstr "šablona položky inventáře" -#: dcim/models/device_component_templates.py:788 +#: netbox/dcim/models/device_component_templates.py:788 msgid "inventory item templates" msgstr "šablony položek inventáře" -#: dcim/models/device_components.py:105 +#: netbox/dcim/models/device_components.py:105 msgid "Components cannot be moved to a different device." msgstr "Komponenty nelze přesunout do jiného zařízení." -#: dcim/models/device_components.py:144 +#: netbox/dcim/models/device_components.py:144 msgid "cable end" msgstr "konec kabelu" -#: dcim/models/device_components.py:150 +#: netbox/dcim/models/device_components.py:150 msgid "mark connected" msgstr "označit připojený" -#: dcim/models/device_components.py:152 +#: netbox/dcim/models/device_components.py:152 msgid "Treat as if a cable is connected" msgstr "Považovat za připojený" -#: dcim/models/device_components.py:170 +#: netbox/dcim/models/device_components.py:170 msgid "Must specify cable end (A or B) when attaching a cable." msgstr "Při připojování kabelu je nutné zadat konec kabelu (A nebo B)." -#: dcim/models/device_components.py:174 +#: netbox/dcim/models/device_components.py:174 msgid "Cable end must not be set without a cable." msgstr "Konec kabelu nesmí být nastaven bez kabelu." -#: dcim/models/device_components.py:178 +#: netbox/dcim/models/device_components.py:178 msgid "Cannot mark as connected with a cable attached." msgstr "Nelze označit jako připojený s připojeným kabelem." -#: dcim/models/device_components.py:202 +#: netbox/dcim/models/device_components.py:202 #, python-brace-format msgid "{class_name} models must declare a parent_object property" msgstr "{class_name} modely musí deklarovat vlastnost parent_object" -#: dcim/models/device_components.py:287 dcim/models/device_components.py:316 -#: dcim/models/device_components.py:349 dcim/models/device_components.py:467 +#: 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 msgid "Physical port type" msgstr "Fyzický typ portu" -#: dcim/models/device_components.py:290 dcim/models/device_components.py:319 +#: netbox/dcim/models/device_components.py:290 +#: netbox/dcim/models/device_components.py:319 msgid "speed" msgstr "rychlost" -#: dcim/models/device_components.py:294 dcim/models/device_components.py:323 +#: netbox/dcim/models/device_components.py:294 +#: netbox/dcim/models/device_components.py:323 msgid "Port speed in bits per second" msgstr "Rychlost portu v bitech za sekundu" -#: dcim/models/device_components.py:300 +#: netbox/dcim/models/device_components.py:300 msgid "console port" msgstr "konzolový port" -#: dcim/models/device_components.py:301 +#: netbox/dcim/models/device_components.py:301 msgid "console ports" msgstr "konzolové porty" -#: dcim/models/device_components.py:329 +#: netbox/dcim/models/device_components.py:329 msgid "console server port" msgstr "port konzolového serveru" -#: dcim/models/device_components.py:330 +#: netbox/dcim/models/device_components.py:330 msgid "console server ports" msgstr "porty konzolového serveru" -#: dcim/models/device_components.py:369 +#: netbox/dcim/models/device_components.py:369 msgid "power port" msgstr "napájecí port" -#: dcim/models/device_components.py:370 +#: netbox/dcim/models/device_components.py:370 msgid "power ports" msgstr "napájecí porty" -#: dcim/models/device_components.py:487 +#: netbox/dcim/models/device_components.py:487 msgid "power outlet" msgstr "elektrická zásuvka" -#: dcim/models/device_components.py:488 +#: netbox/dcim/models/device_components.py:488 msgid "power outlets" msgstr "elektrické zásuvky" -#: dcim/models/device_components.py:499 +#: netbox/dcim/models/device_components.py:499 #, python-brace-format msgid "Parent power port ({power_port}) must belong to the same device" msgstr "" "Rodičovský napájecí port ({power_port}) musí patřit ke stejnému zařízení" -#: dcim/models/device_components.py:530 vpn/models/crypto.py:81 -#: vpn/models/crypto.py:226 +#: netbox/dcim/models/device_components.py:530 netbox/vpn/models/crypto.py:81 +#: netbox/vpn/models/crypto.py:226 msgid "mode" msgstr "režim" -#: dcim/models/device_components.py:534 +#: netbox/dcim/models/device_components.py:534 msgid "IEEE 802.1Q tagging strategy" msgstr "Strategie označování IEEE 802.1Q" -#: dcim/models/device_components.py:542 +#: netbox/dcim/models/device_components.py:542 msgid "parent interface" msgstr "nadřazené rozhraní" -#: dcim/models/device_components.py:602 +#: netbox/dcim/models/device_components.py:602 msgid "parent LAG" msgstr "nadřazená MAS" -#: dcim/models/device_components.py:612 +#: netbox/dcim/models/device_components.py:612 msgid "This interface is used only for out-of-band management" msgstr "Toto rozhraní se používá pouze pro správu mimo pásmo" -#: dcim/models/device_components.py:617 +#: netbox/dcim/models/device_components.py:617 msgid "speed (Kbps)" msgstr "Rychlost (Kbps)" -#: dcim/models/device_components.py:620 +#: netbox/dcim/models/device_components.py:620 msgid "duplex" msgstr "duplexní" -#: dcim/models/device_components.py:630 +#: netbox/dcim/models/device_components.py:630 msgid "64-bit World Wide Name" msgstr "64bitový celosvětový název" -#: dcim/models/device_components.py:642 +#: netbox/dcim/models/device_components.py:642 msgid "wireless channel" msgstr "bezdrátový kanál" -#: dcim/models/device_components.py:649 +#: netbox/dcim/models/device_components.py:649 msgid "channel frequency (MHz)" msgstr "frekvence kanálu (MHz)" -#: dcim/models/device_components.py:650 dcim/models/device_components.py:658 +#: netbox/dcim/models/device_components.py:650 +#: netbox/dcim/models/device_components.py:658 msgid "Populated by selected channel (if set)" msgstr "Vyplněno vybraným kanálem (pokud je nastaven)" -#: dcim/models/device_components.py:664 +#: netbox/dcim/models/device_components.py:664 msgid "transmit power (dBm)" msgstr "vysílací výkon (dBm)" -#: dcim/models/device_components.py:689 wireless/models.py:117 +#: netbox/dcim/models/device_components.py:689 netbox/wireless/models.py:117 msgid "wireless LANs" msgstr "bezdrátové sítě LAN" -#: dcim/models/device_components.py:697 -#: virtualization/models/virtualmachines.py:335 +#: netbox/dcim/models/device_components.py:697 +#: netbox/virtualization/models/virtualmachines.py:335 msgid "untagged VLAN" msgstr "neoznačené VLAN" -#: dcim/models/device_components.py:703 -#: virtualization/models/virtualmachines.py:341 +#: netbox/dcim/models/device_components.py:703 +#: netbox/virtualization/models/virtualmachines.py:341 msgid "tagged VLANs" msgstr "označené VLAN" -#: dcim/models/device_components.py:745 -#: virtualization/models/virtualmachines.py:377 +#: netbox/dcim/models/device_components.py:745 +#: netbox/virtualization/models/virtualmachines.py:377 msgid "interface" msgstr "rozhraní" -#: dcim/models/device_components.py:746 -#: virtualization/models/virtualmachines.py:378 +#: netbox/dcim/models/device_components.py:746 +#: netbox/virtualization/models/virtualmachines.py:378 msgid "interfaces" msgstr "rozhraní" -#: dcim/models/device_components.py:757 +#: netbox/dcim/models/device_components.py:757 #, python-brace-format msgid "{display_type} interfaces cannot have a cable attached." msgstr "{display_type} Rozhraní nemůže mít připojený kabel." -#: dcim/models/device_components.py:765 +#: netbox/dcim/models/device_components.py:765 #, python-brace-format msgid "{display_type} interfaces cannot be marked as connected." msgstr "{display_type} rozhraní nelze označit jako připojená." -#: dcim/models/device_components.py:774 -#: virtualization/models/virtualmachines.py:390 +#: netbox/dcim/models/device_components.py:774 +#: netbox/virtualization/models/virtualmachines.py:390 msgid "An interface cannot be its own parent." msgstr "Rozhraní nemůže být svým vlastním rodičem." -#: dcim/models/device_components.py:778 +#: netbox/dcim/models/device_components.py:778 msgid "Only virtual interfaces may be assigned to a parent interface." msgstr "K nadřazenému rozhraní lze přiřadit pouze virtuální rozhraní." -#: dcim/models/device_components.py:785 +#: netbox/dcim/models/device_components.py:785 #, python-brace-format msgid "" "The selected parent interface ({interface}) belongs to a different device " @@ -5166,7 +5641,7 @@ msgid "" msgstr "" "Vybrané nadřazené rozhraní ({interface}) patří k jinému zařízení ({device})" -#: dcim/models/device_components.py:791 +#: netbox/dcim/models/device_components.py:791 #, python-brace-format msgid "" "The selected parent interface ({interface}) belongs to {device}, which is " @@ -5175,7 +5650,7 @@ msgstr "" "Vybrané nadřazené rozhraní ({interface}) patří {device}, která není součástí" " virtuálního podvozku {virtual_chassis}." -#: dcim/models/device_components.py:811 +#: netbox/dcim/models/device_components.py:811 #, python-brace-format msgid "" "The selected bridge interface ({bridge}) belongs to a different device " @@ -5183,7 +5658,7 @@ msgid "" msgstr "" "Vybrané rozhraní můstku ({bridge}) patří k jinému zařízení ({device})." -#: dcim/models/device_components.py:817 +#: netbox/dcim/models/device_components.py:817 #, python-brace-format msgid "" "The selected bridge interface ({interface}) belongs to {device}, which is " @@ -5192,21 +5667,21 @@ msgstr "" "Vybrané rozhraní můstku ({interface}) patří {device}, která není součástí " "virtuálního podvozku {virtual_chassis}." -#: dcim/models/device_components.py:828 +#: netbox/dcim/models/device_components.py:828 msgid "Virtual interfaces cannot have a parent LAG interface." msgstr "Virtuální rozhraní nemohou mít nadřazené rozhraní LAG." -#: dcim/models/device_components.py:832 +#: netbox/dcim/models/device_components.py:832 msgid "A LAG interface cannot be its own parent." msgstr "Rozhraní MAS nemůže být vlastním rodičem." -#: dcim/models/device_components.py:839 +#: netbox/dcim/models/device_components.py:839 #, python-brace-format msgid "" "The selected LAG interface ({lag}) belongs to a different device ({device})." msgstr "Vybrané rozhraní LAG ({lag}) patří k jinému zařízení ({device})." -#: dcim/models/device_components.py:845 +#: netbox/dcim/models/device_components.py:845 #, python-brace-format msgid "" "The selected LAG interface ({lag}) belongs to {device}, which is not part of" @@ -5215,44 +5690,44 @@ msgstr "" "Vybrané rozhraní LAG ({lag}) patří {device}, která není součástí virtuálního" " podvozku {virtual_chassis}." -#: dcim/models/device_components.py:856 +#: netbox/dcim/models/device_components.py:856 msgid "Virtual interfaces cannot have a PoE mode." msgstr "Virtuální rozhraní nemohou mít režim PoE." -#: dcim/models/device_components.py:860 +#: netbox/dcim/models/device_components.py:860 msgid "Virtual interfaces cannot have a PoE type." msgstr "Virtuální rozhraní nemohou mít typ PoE." -#: dcim/models/device_components.py:866 +#: netbox/dcim/models/device_components.py:866 msgid "Must specify PoE mode when designating a PoE type." msgstr "Při určování typu PoE musí specifikovat režim PoE." -#: dcim/models/device_components.py:873 +#: netbox/dcim/models/device_components.py:873 msgid "Wireless role may be set only on wireless interfaces." msgstr "" "Role bezdrátové sítě může být nastavena pouze na bezdrátových rozhraních." -#: dcim/models/device_components.py:875 +#: netbox/dcim/models/device_components.py:875 msgid "Channel may be set only on wireless interfaces." msgstr "Kanál lze nastavit pouze na bezdrátových rozhraních." -#: dcim/models/device_components.py:881 +#: netbox/dcim/models/device_components.py:881 msgid "Channel frequency may be set only on wireless interfaces." msgstr "Frekvence kanálu může být nastavena pouze na bezdrátových rozhraních." -#: dcim/models/device_components.py:885 +#: netbox/dcim/models/device_components.py:885 msgid "Cannot specify custom frequency with channel selected." msgstr "Nelze určit vlastní frekvenci s vybraným kanálem." -#: dcim/models/device_components.py:891 +#: netbox/dcim/models/device_components.py:891 msgid "Channel width may be set only on wireless interfaces." msgstr "Šířku kanálu lze nastavit pouze na bezdrátových rozhraních." -#: dcim/models/device_components.py:893 +#: netbox/dcim/models/device_components.py:893 msgid "Cannot specify custom width with channel selected." msgstr "Nelze určit vlastní šířku s vybraným kanálem." -#: dcim/models/device_components.py:901 +#: netbox/dcim/models/device_components.py:901 #, python-brace-format msgid "" "The untagged VLAN ({untagged_vlan}) must belong to the same site as the " @@ -5261,24 +5736,24 @@ msgstr "" "Neznačená VLAN ({untagged_vlan}) musí patřit ke stejnému webu jako nadřazené" " zařízení rozhraní, nebo musí být globální." -#: dcim/models/device_components.py:990 +#: netbox/dcim/models/device_components.py:990 msgid "Mapped position on corresponding rear port" msgstr "Mapovaná poloha na odpovídajícím zadním portu" -#: dcim/models/device_components.py:1006 +#: netbox/dcim/models/device_components.py:1006 msgid "front port" msgstr "přední port" -#: dcim/models/device_components.py:1007 +#: netbox/dcim/models/device_components.py:1007 msgid "front ports" msgstr "přední porty" -#: dcim/models/device_components.py:1021 +#: netbox/dcim/models/device_components.py:1021 #, python-brace-format msgid "Rear port ({rear_port}) must belong to the same device" msgstr "Zadní port ({rear_port}) musí patřit ke stejnému zařízení" -#: dcim/models/device_components.py:1029 +#: netbox/dcim/models/device_components.py:1029 #, python-brace-format msgid "" "Invalid rear port position ({rear_port_position}): Rear port {name} has only" @@ -5287,19 +5762,19 @@ msgstr "" "Neplatná poloha zadního portu ({rear_port_position}): Zadní port {name} má " "pouze {positions} pozice." -#: dcim/models/device_components.py:1059 +#: netbox/dcim/models/device_components.py:1059 msgid "Number of front ports which may be mapped" msgstr "Počet předních portů, které lze mapovat" -#: dcim/models/device_components.py:1064 +#: netbox/dcim/models/device_components.py:1064 msgid "rear port" msgstr "zadní port" -#: dcim/models/device_components.py:1065 +#: netbox/dcim/models/device_components.py:1065 msgid "rear ports" msgstr "zadní porty" -#: dcim/models/device_components.py:1079 +#: netbox/dcim/models/device_components.py:1079 #, python-brace-format msgid "" "The number of positions cannot be less than the number of mapped front ports" @@ -5308,147 +5783,150 @@ msgstr "" "Počet pozic nesmí být menší než počet mapovaných předních portů " "({frontport_count})" -#: dcim/models/device_components.py:1120 +#: netbox/dcim/models/device_components.py:1120 msgid "module bay" msgstr "přihrádka modulů" -#: dcim/models/device_components.py:1121 +#: netbox/dcim/models/device_components.py:1121 msgid "module bays" msgstr "pozice modulů" -#: dcim/models/device_components.py:1138 dcim/models/devices.py:1224 +#: netbox/dcim/models/device_components.py:1138 +#: netbox/dcim/models/devices.py:1224 msgid "A module bay cannot belong to a module installed within it." msgstr "Pozice modulu nemůže patřit k modulu nainstalovanému v ní." -#: dcim/models/device_components.py:1164 +#: netbox/dcim/models/device_components.py:1164 msgid "device bay" msgstr "pozice zařízení" -#: dcim/models/device_components.py:1165 +#: netbox/dcim/models/device_components.py:1165 msgid "device bays" msgstr "pozice zařízení" -#: dcim/models/device_components.py:1175 +#: netbox/dcim/models/device_components.py:1175 #, python-brace-format msgid "This type of device ({device_type}) does not support device bays." msgstr "Tento typ zařízení ({device_type}) nepodporuje pozice zařízení." -#: dcim/models/device_components.py:1181 +#: netbox/dcim/models/device_components.py:1181 msgid "Cannot install a device into itself." msgstr "Nelze nainstalovat zařízení do sebe." -#: dcim/models/device_components.py:1189 +#: netbox/dcim/models/device_components.py:1189 #, python-brace-format msgid "" "Cannot install the specified device; device is already installed in {bay}." msgstr "" "Nelze nainstalovat určené zařízení; zařízení je již nainstalováno {bay}." -#: dcim/models/device_components.py:1210 +#: netbox/dcim/models/device_components.py:1210 msgid "inventory item role" msgstr "role položky inventáře" -#: dcim/models/device_components.py:1211 +#: netbox/dcim/models/device_components.py:1211 msgid "inventory item roles" msgstr "role položek zásob" -#: dcim/models/device_components.py:1268 dcim/models/devices.py:607 -#: dcim/models/devices.py:1181 dcim/models/racks.py:313 -#: virtualization/models/virtualmachines.py:131 +#: 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 msgid "serial number" msgstr "sériové číslo" -#: dcim/models/device_components.py:1276 dcim/models/devices.py:615 -#: dcim/models/devices.py:1188 dcim/models/racks.py:320 +#: 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 msgid "asset tag" msgstr "štítek majetku" -#: dcim/models/device_components.py:1277 +#: netbox/dcim/models/device_components.py:1277 msgid "A unique tag used to identify this item" msgstr "Jedinečná značka použitá k identifikaci této položky" -#: dcim/models/device_components.py:1280 +#: netbox/dcim/models/device_components.py:1280 msgid "discovered" msgstr "objeveny" -#: dcim/models/device_components.py:1282 +#: netbox/dcim/models/device_components.py:1282 msgid "This item was automatically discovered" msgstr "Tato položka byla automaticky objevena" -#: dcim/models/device_components.py:1300 +#: netbox/dcim/models/device_components.py:1300 msgid "inventory item" msgstr "položka inventáře" -#: dcim/models/device_components.py:1301 +#: netbox/dcim/models/device_components.py:1301 msgid "inventory items" msgstr "inventární položky" -#: dcim/models/device_components.py:1312 +#: netbox/dcim/models/device_components.py:1312 msgid "Cannot assign self as parent." msgstr "Nelze přiřadit sebe jako rodiče." -#: dcim/models/device_components.py:1320 +#: netbox/dcim/models/device_components.py:1320 msgid "Parent inventory item does not belong to the same device." msgstr "Nadřazená položka inventáře nepatří do stejného zařízení." -#: dcim/models/device_components.py:1326 +#: netbox/dcim/models/device_components.py:1326 msgid "Cannot move an inventory item with dependent children" msgstr "Nelze přesunout položku inventáře se závislými podřízenými" -#: dcim/models/device_components.py:1334 +#: netbox/dcim/models/device_components.py:1334 msgid "Cannot assign inventory item to component on another device" msgstr "Nelze přiřadit skladovou položku ke komponentě na jiném zařízení" -#: dcim/models/devices.py:54 +#: netbox/dcim/models/devices.py:54 msgid "manufacturer" msgstr "výrobce" -#: dcim/models/devices.py:55 +#: netbox/dcim/models/devices.py:55 msgid "manufacturers" msgstr "výrobci" -#: dcim/models/devices.py:82 dcim/models/devices.py:382 -#: dcim/models/racks.py:133 +#: netbox/dcim/models/devices.py:82 netbox/dcim/models/devices.py:382 +#: netbox/dcim/models/racks.py:133 msgid "model" msgstr "modelka" -#: dcim/models/devices.py:95 +#: netbox/dcim/models/devices.py:95 msgid "default platform" msgstr "výchozí platforma" -#: dcim/models/devices.py:98 dcim/models/devices.py:386 +#: netbox/dcim/models/devices.py:98 netbox/dcim/models/devices.py:386 msgid "part number" msgstr "číslo dílu" -#: dcim/models/devices.py:101 dcim/models/devices.py:389 +#: netbox/dcim/models/devices.py:101 netbox/dcim/models/devices.py:389 msgid "Discrete part number (optional)" msgstr "Diskrétní číslo dílu (volitelné)" -#: dcim/models/devices.py:107 dcim/models/racks.py:54 +#: netbox/dcim/models/devices.py:107 netbox/dcim/models/racks.py:54 msgid "height (U)" msgstr "výška (U)" -#: dcim/models/devices.py:111 +#: netbox/dcim/models/devices.py:111 msgid "exclude from utilization" msgstr "vyloučit z využití" -#: dcim/models/devices.py:112 +#: netbox/dcim/models/devices.py:112 msgid "Devices of this type are excluded when calculating rack utilization." msgstr "Zařízení tohoto typu jsou vyloučena při výpočtu využití stojanu." -#: dcim/models/devices.py:116 +#: netbox/dcim/models/devices.py:116 msgid "is full depth" msgstr "je plná hloubka" -#: dcim/models/devices.py:117 +#: netbox/dcim/models/devices.py:117 msgid "Device consumes both front and rear rack faces." msgstr "Zařízení spotřebovává přední i zadní stranu stojanu." -#: dcim/models/devices.py:123 +#: netbox/dcim/models/devices.py:123 msgid "parent/child status" msgstr "stav rodiče/dítěte" -#: dcim/models/devices.py:124 +#: netbox/dcim/models/devices.py:124 msgid "" "Parent devices house child devices in device bays. Leave blank if this " "device type is neither a parent nor a child." @@ -5456,24 +5934,24 @@ msgstr "" "Rodičovská zařízení ukládají podřízená zařízení do pozic zařízení. Pokud " "tento typ zařízení není rodičem ani dítětem, ponechte prázdné." -#: dcim/models/devices.py:128 dcim/models/devices.py:392 -#: dcim/models/devices.py:659 dcim/models/racks.py:324 +#: netbox/dcim/models/devices.py:128 netbox/dcim/models/devices.py:392 +#: netbox/dcim/models/devices.py:659 netbox/dcim/models/racks.py:324 msgid "airflow" msgstr "proud vzduchu" -#: dcim/models/devices.py:204 +#: netbox/dcim/models/devices.py:204 msgid "device type" msgstr "typ zařízení" -#: dcim/models/devices.py:205 +#: netbox/dcim/models/devices.py:205 msgid "device types" msgstr "typy zařízení" -#: dcim/models/devices.py:290 +#: netbox/dcim/models/devices.py:290 msgid "U height must be in increments of 0.5 rack units." msgstr "Výška U musí být v krocích po 0,5 regálových jednotek." -#: dcim/models/devices.py:307 +#: netbox/dcim/models/devices.py:307 #, python-brace-format msgid "" "Device {device} in rack {rack} does not have sufficient space to accommodate" @@ -5482,7 +5960,7 @@ msgstr "" "Zařízení {device} v stojanu {rack} nemá dostatek prostoru pro umístění výšky" " {height}U" -#: dcim/models/devices.py:322 +#: netbox/dcim/models/devices.py:322 #, python-brace-format msgid "" "Unable to set 0U height: Found {racked_instance_count} " @@ -5491,7 +5969,7 @@ msgstr "" "Nelze nastavit výšku 0U: Nalezeno {racked_instance_count} " "instancí již namontované v regálech." -#: dcim/models/devices.py:331 +#: netbox/dcim/models/devices.py:331 msgid "" "Must delete all device bay templates associated with this device before " "declassifying it as a parent device." @@ -5499,155 +5977,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í." -#: dcim/models/devices.py:337 +#: netbox/dcim/models/devices.py:337 msgid "Child device types must be 0U." msgstr "Typ dětského zařízení musí být 0U." -#: dcim/models/devices.py:411 +#: netbox/dcim/models/devices.py:411 msgid "module type" msgstr "typ modulu" -#: dcim/models/devices.py:412 +#: netbox/dcim/models/devices.py:412 msgid "module types" msgstr "typy modulů" -#: dcim/models/devices.py:485 +#: netbox/dcim/models/devices.py:485 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" -#: dcim/models/devices.py:497 +#: netbox/dcim/models/devices.py:497 msgid "device role" msgstr "role zařízení" -#: dcim/models/devices.py:498 +#: netbox/dcim/models/devices.py:498 msgid "device roles" msgstr "role zařízení" -#: dcim/models/devices.py:515 +#: netbox/dcim/models/devices.py:515 msgid "Optionally limit this platform to devices of a certain manufacturer" msgstr "Volitelně omezit tuto platformu na zařízení určitého výrobce" -#: dcim/models/devices.py:527 +#: netbox/dcim/models/devices.py:527 msgid "platform" msgstr "platforma" -#: dcim/models/devices.py:528 +#: netbox/dcim/models/devices.py:528 msgid "platforms" msgstr "platformy" -#: dcim/models/devices.py:576 +#: netbox/dcim/models/devices.py:576 msgid "The function this device serves" msgstr "Funkce, kterou toto zařízení slouží" -#: dcim/models/devices.py:608 +#: netbox/dcim/models/devices.py:608 msgid "Chassis serial number, assigned by the manufacturer" msgstr "Sériové číslo podvozku přidělené výrobcem" -#: dcim/models/devices.py:616 dcim/models/devices.py:1189 +#: netbox/dcim/models/devices.py:616 netbox/dcim/models/devices.py:1189 msgid "A unique tag used to identify this device" msgstr "Jedinečná značka použitá k identifikaci tohoto zařízení" -#: dcim/models/devices.py:643 +#: netbox/dcim/models/devices.py:643 msgid "position (U)" msgstr "poloha (U)" -#: dcim/models/devices.py:650 +#: netbox/dcim/models/devices.py:650 msgid "rack face" msgstr "plocha stojanu" -#: dcim/models/devices.py:670 dcim/models/devices.py:1415 -#: virtualization/models/virtualmachines.py:100 +#: netbox/dcim/models/devices.py:670 netbox/dcim/models/devices.py:1420 +#: netbox/virtualization/models/virtualmachines.py:100 msgid "primary IPv4" msgstr "primární IPv4" -#: dcim/models/devices.py:678 dcim/models/devices.py:1423 -#: virtualization/models/virtualmachines.py:108 +#: netbox/dcim/models/devices.py:678 netbox/dcim/models/devices.py:1428 +#: netbox/virtualization/models/virtualmachines.py:108 msgid "primary IPv6" msgstr "primární IPv6" -#: dcim/models/devices.py:686 +#: netbox/dcim/models/devices.py:686 msgid "out-of-band IP" msgstr "IP mimo pásmo" -#: dcim/models/devices.py:703 +#: netbox/dcim/models/devices.py:703 msgid "VC position" msgstr "Pozice VC" -#: dcim/models/devices.py:706 +#: netbox/dcim/models/devices.py:706 msgid "Virtual chassis position" msgstr "Virtuální poloha podvozku" -#: dcim/models/devices.py:709 +#: netbox/dcim/models/devices.py:709 msgid "VC priority" msgstr "Priorita VC" -#: dcim/models/devices.py:713 +#: netbox/dcim/models/devices.py:713 msgid "Virtual chassis master election priority" msgstr "Priorita volby hlavního virtuálního šasi" -#: dcim/models/devices.py:716 dcim/models/sites.py:207 +#: netbox/dcim/models/devices.py:716 netbox/dcim/models/sites.py:207 msgid "latitude" msgstr "zeměpisná šířka" -#: dcim/models/devices.py:721 dcim/models/devices.py:729 -#: dcim/models/sites.py:212 dcim/models/sites.py:220 +#: netbox/dcim/models/devices.py:721 netbox/dcim/models/devices.py:729 +#: netbox/dcim/models/sites.py:212 netbox/dcim/models/sites.py:220 msgid "GPS coordinate in decimal format (xx.yyyyyy)" msgstr "Souřadnice GPS v desetinném formátu (xx.rrrrrr)" -#: dcim/models/devices.py:724 dcim/models/sites.py:215 +#: netbox/dcim/models/devices.py:724 netbox/dcim/models/sites.py:215 msgid "longitude" msgstr "zeměpisná délka" -#: dcim/models/devices.py:797 +#: netbox/dcim/models/devices.py:797 msgid "Device name must be unique per site." msgstr "Název zařízení musí být pro každou lokalitu jedinečný." -#: dcim/models/devices.py:808 ipam/models/services.py:75 +#: netbox/dcim/models/devices.py:808 netbox/ipam/models/services.py:75 msgid "device" msgstr "zařízení" -#: dcim/models/devices.py:809 +#: netbox/dcim/models/devices.py:809 msgid "devices" msgstr "zařízení" -#: dcim/models/devices.py:835 +#: netbox/dcim/models/devices.py:835 #, python-brace-format msgid "Rack {rack} does not belong to site {site}." msgstr "Stojan {rack} nepatří k webu {site}." -#: dcim/models/devices.py:840 +#: netbox/dcim/models/devices.py:840 #, python-brace-format msgid "Location {location} does not belong to site {site}." msgstr "Lokace {location} nepatří k webu {site}." -#: dcim/models/devices.py:846 +#: netbox/dcim/models/devices.py:846 #, python-brace-format msgid "Rack {rack} does not belong to location {location}." msgstr "Stojan {rack} nepatří do lokality {location}." -#: dcim/models/devices.py:853 +#: netbox/dcim/models/devices.py:853 msgid "Cannot select a rack face without assigning a rack." msgstr "Nelze vybrat plochu stojanu bez přiřazení stojanu." -#: dcim/models/devices.py:857 +#: netbox/dcim/models/devices.py:857 msgid "Cannot select a rack position without assigning a rack." msgstr "Bez přiřazení stojanu nelze vybrat polohu stojanu." -#: dcim/models/devices.py:863 +#: netbox/dcim/models/devices.py:863 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." -#: dcim/models/devices.py:867 +#: netbox/dcim/models/devices.py:867 msgid "Must specify rack face when defining rack position." msgstr "Při definování polohy stojanu je nutné zadat plochu stojanu." -#: dcim/models/devices.py:875 +#: netbox/dcim/models/devices.py:875 #, 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." -#: dcim/models/devices.py:886 +#: netbox/dcim/models/devices.py:886 msgid "" "Child device types cannot be assigned to a rack face. This is an attribute " "of the parent device." @@ -5655,7 +6133,7 @@ msgstr "" "Podřízené typy zařízení nelze přiřadit k ploše stojanu. Toto je atribut " "nadřazeného zařízení." -#: dcim/models/devices.py:893 +#: netbox/dcim/models/devices.py:893 msgid "" "Child device types cannot be assigned to a rack position. This is an " "attribute of the parent device." @@ -5663,7 +6141,7 @@ msgstr "" "Podřízené typy zařízení nelze přiřadit k poloze stojanu. Toto je atribut " "nadřazeného zařízení." -#: dcim/models/devices.py:907 +#: netbox/dcim/models/devices.py:907 #, python-brace-format msgid "" "U{position} is already occupied or does not have sufficient space to " @@ -5672,22 +6150,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)" -#: dcim/models/devices.py:922 +#: netbox/dcim/models/devices.py:922 #, python-brace-format msgid "{ip} is not an IPv4 address." msgstr "{ip} Nejedná se o IPv4 adresu." -#: dcim/models/devices.py:931 dcim/models/devices.py:946 +#: netbox/dcim/models/devices.py:931 netbox/dcim/models/devices.py:946 #, 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í." -#: dcim/models/devices.py:937 +#: netbox/dcim/models/devices.py:937 #, python-brace-format msgid "{ip} is not an IPv6 address." msgstr "{ip} Nejedná se o IPv6 adresu." -#: dcim/models/devices.py:964 +#: netbox/dcim/models/devices.py:964 #, python-brace-format msgid "" "The assigned platform is limited to {platform_manufacturer} device types, " @@ -5696,16 +6174,16 @@ msgstr "" "Přiřazená platforma je omezena na {platform_manufacturer} typy zařízení, ale" " tento typ zařízení patří {devicetype_manufacturer}." -#: dcim/models/devices.py:975 +#: netbox/dcim/models/devices.py:975 #, python-brace-format msgid "The assigned cluster belongs to a different site ({site})" msgstr "Přiřazený cluster patří do jiné lokality ({site})" -#: dcim/models/devices.py:983 +#: netbox/dcim/models/devices.py:983 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." -#: dcim/models/devices.py:988 +#: netbox/dcim/models/devices.py:988 #, python-brace-format msgid "" "Device cannot be removed from virtual chassis {virtual_chassis} because it " @@ -5714,15 +6192,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." -#: dcim/models/devices.py:1196 +#: netbox/dcim/models/devices.py:1196 msgid "module" msgstr "modul" -#: dcim/models/devices.py:1197 +#: netbox/dcim/models/devices.py:1197 msgid "modules" msgstr "moduly" -#: dcim/models/devices.py:1213 +#: netbox/dcim/models/devices.py:1213 #, python-brace-format msgid "" "Module must be installed within a module bay belonging to the assigned " @@ -5730,22 +6208,22 @@ msgid "" msgstr "" "Modul musí být instalován v modulu patřící přiřazenému zařízení ({device})." -#: dcim/models/devices.py:1334 +#: netbox/dcim/models/devices.py:1339 msgid "domain" msgstr "doména" -#: dcim/models/devices.py:1347 dcim/models/devices.py:1348 +#: netbox/dcim/models/devices.py:1352 netbox/dcim/models/devices.py:1353 msgid "virtual chassis" msgstr "virtuální podvozek" -#: dcim/models/devices.py:1363 +#: netbox/dcim/models/devices.py:1368 #, 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." -#: dcim/models/devices.py:1379 +#: netbox/dcim/models/devices.py:1384 #, python-brace-format msgid "" "Unable to delete virtual chassis {self}. There are member interfaces which " @@ -5754,102 +6232,102 @@ msgstr "" "Nelze odstranit virtuální šasi {self}. Existují členská rozhraní, která " "tvoří rozhraní LAG napříč podvozky." -#: dcim/models/devices.py:1404 vpn/models/l2vpn.py:37 +#: netbox/dcim/models/devices.py:1409 netbox/vpn/models/l2vpn.py:37 msgid "identifier" msgstr "identifikátor" -#: dcim/models/devices.py:1405 +#: netbox/dcim/models/devices.py:1410 msgid "Numeric identifier unique to the parent device" msgstr "Numerický identifikátor jedinečný pro nadřazené zařízení" -#: dcim/models/devices.py:1433 extras/models/customfields.py:225 -#: extras/models/models.py:107 extras/models/models.py:694 -#: netbox/models/__init__.py:115 +#: 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:115 msgid "comments" msgstr "komentáře" -#: dcim/models/devices.py:1449 +#: netbox/dcim/models/devices.py:1454 msgid "virtual device context" msgstr "kontext virtuálního zařízení" -#: dcim/models/devices.py:1450 +#: netbox/dcim/models/devices.py:1455 msgid "virtual device contexts" msgstr "kontexty virtuálních zařízení" -#: dcim/models/devices.py:1482 +#: netbox/dcim/models/devices.py:1487 #, python-brace-format msgid "{ip} is not an IPv{family} address." msgstr "{ip} není IPV{family} adresa." -#: dcim/models/devices.py:1488 +#: netbox/dcim/models/devices.py:1493 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í." -#: dcim/models/mixins.py:15 extras/models/configs.py:41 -#: extras/models/models.py:313 extras/models/models.py:522 -#: extras/models/search.py:48 ipam/models/ip.py:194 +#: netbox/dcim/models/mixins.py:15 netbox/extras/models/configs.py:41 +#: netbox/extras/models/models.py:313 netbox/extras/models/models.py:522 +#: netbox/extras/models/search.py:48 netbox/ipam/models/ip.py:194 msgid "weight" msgstr "váha" -#: dcim/models/mixins.py:22 +#: netbox/dcim/models/mixins.py:22 msgid "weight unit" msgstr "hmotnostní jednotka" -#: dcim/models/mixins.py:51 +#: 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" -#: dcim/models/power.py:55 +#: netbox/dcim/models/power.py:55 msgid "power panel" msgstr "napájecí panel" -#: dcim/models/power.py:56 +#: netbox/dcim/models/power.py:56 msgid "power panels" msgstr "napájecí panely" -#: dcim/models/power.py:70 +#: netbox/dcim/models/power.py:70 #, python-brace-format msgid "" "Location {location} ({location_site}) is in a different site than {site}" msgstr "Lokace {location} ({location_site}) je na jiném místě než {site}" -#: dcim/models/power.py:108 +#: netbox/dcim/models/power.py:108 msgid "supply" msgstr "zásobování" -#: dcim/models/power.py:114 +#: netbox/dcim/models/power.py:114 msgid "phase" msgstr "fáze" -#: dcim/models/power.py:120 +#: netbox/dcim/models/power.py:120 msgid "voltage" msgstr "napětí" -#: dcim/models/power.py:125 +#: netbox/dcim/models/power.py:125 msgid "amperage" msgstr "proud proudu" -#: dcim/models/power.py:130 +#: netbox/dcim/models/power.py:130 msgid "max utilization" msgstr "maximální využití" -#: dcim/models/power.py:133 +#: netbox/dcim/models/power.py:133 msgid "Maximum permissible draw (percentage)" msgstr "Maximální přípustné tažení (v procentech)" -#: dcim/models/power.py:136 +#: netbox/dcim/models/power.py:136 msgid "available power" msgstr "dostupný výkon" -#: dcim/models/power.py:164 +#: netbox/dcim/models/power.py:164 msgid "power feed" msgstr "napájecí zdroj" -#: dcim/models/power.py:165 +#: netbox/dcim/models/power.py:165 msgid "power feeds" msgstr "napájecí zdroje" -#: dcim/models/power.py:179 +#: netbox/dcim/models/power.py:179 #, python-brace-format msgid "" "Rack {rack} ({rack_site}) and power panel {powerpanel} ({powerpanel_site}) " @@ -5858,63 +6336,63 @@ msgstr "" "Stojan {rack} ({rack_site}) a napájecí panel {powerpanel} " "({powerpanel_site}) jsou na různých místech." -#: dcim/models/power.py:190 +#: netbox/dcim/models/power.py:190 msgid "Voltage cannot be negative for AC supply" msgstr "Napětí nemůže být záporné pro napájení střídavým proudem" -#: dcim/models/racks.py:47 +#: netbox/dcim/models/racks.py:47 msgid "width" msgstr "Šířka" -#: dcim/models/racks.py:48 +#: netbox/dcim/models/racks.py:48 msgid "Rail-to-rail width" msgstr "Šířka kolejnice k kolejnici" -#: dcim/models/racks.py:56 +#: netbox/dcim/models/racks.py:56 msgid "Height in rack units" msgstr "Výška v regálových jednotkách" -#: dcim/models/racks.py:60 +#: netbox/dcim/models/racks.py:60 msgid "starting unit" msgstr "startovací jednotka" -#: dcim/models/racks.py:62 +#: netbox/dcim/models/racks.py:62 msgid "Starting unit for rack" msgstr "Startovací jednotka pro regál" -#: dcim/models/racks.py:66 +#: netbox/dcim/models/racks.py:66 msgid "descending units" msgstr "sestupné jednotky" -#: dcim/models/racks.py:67 +#: netbox/dcim/models/racks.py:67 msgid "Units are numbered top-to-bottom" msgstr "Jednotky jsou číslovány shora dolů" -#: dcim/models/racks.py:72 +#: netbox/dcim/models/racks.py:72 msgid "outer width" msgstr "vnější šířka" -#: dcim/models/racks.py:75 +#: netbox/dcim/models/racks.py:75 msgid "Outer dimension of rack (width)" msgstr "Vnější rozměr stojanu (šířka)" -#: dcim/models/racks.py:78 +#: netbox/dcim/models/racks.py:78 msgid "outer depth" msgstr "vnější hloubka" -#: dcim/models/racks.py:81 +#: netbox/dcim/models/racks.py:81 msgid "Outer dimension of rack (depth)" msgstr "Vnější rozměr stojanu (hloubka)" -#: dcim/models/racks.py:84 +#: netbox/dcim/models/racks.py:84 msgid "outer unit" msgstr "vnější jednotka" -#: dcim/models/racks.py:90 +#: netbox/dcim/models/racks.py:90 msgid "mounting depth" msgstr "montážní hloubka" -#: dcim/models/racks.py:94 +#: netbox/dcim/models/racks.py:94 msgid "" "Maximum depth of a mounted device, in millimeters. For four-post racks, this" " is the distance between the front and rear rails." @@ -5922,74 +6400,75 @@ msgstr "" "Maximální hloubka namontovaného zařízení v milimetrech. U čtyřsloupkových " "regálů se jedná o vzdálenost mezi přední a zadní kolejnicí." -#: dcim/models/racks.py:102 +#: netbox/dcim/models/racks.py:102 msgid "max weight" msgstr "max. hmotnost" -#: dcim/models/racks.py:105 +#: netbox/dcim/models/racks.py:105 msgid "Maximum load capacity for the rack" msgstr "Maximální nosnost stojanu" -#: dcim/models/racks.py:125 dcim/models/racks.py:252 +#: netbox/dcim/models/racks.py:125 netbox/dcim/models/racks.py:252 msgid "form factor" msgstr "tvarový faktor" -#: dcim/models/racks.py:162 +#: netbox/dcim/models/racks.py:162 msgid "rack type" msgstr "typ stojanu" -#: dcim/models/racks.py:163 +#: netbox/dcim/models/racks.py:163 msgid "rack types" msgstr "typy stojanů" -#: dcim/models/racks.py:180 dcim/models/racks.py:379 +#: netbox/dcim/models/racks.py:180 netbox/dcim/models/racks.py:379 msgid "Must specify a unit when setting an outer width/depth" msgstr "Při nastavování vnější šířky/hloubky musí zadat jednotku" -#: dcim/models/racks.py:184 dcim/models/racks.py:383 +#: netbox/dcim/models/racks.py:184 netbox/dcim/models/racks.py:383 msgid "Must specify a unit when setting a maximum weight" msgstr "Při nastavování maximální hmotnosti musí specifikovat jednotku" -#: dcim/models/racks.py:230 +#: netbox/dcim/models/racks.py:230 msgid "rack role" msgstr "role stojanu" -#: dcim/models/racks.py:231 +#: netbox/dcim/models/racks.py:231 msgid "rack roles" msgstr "role stojanu" -#: dcim/models/racks.py:274 +#: netbox/dcim/models/racks.py:274 msgid "facility ID" msgstr "ID zařízení" -#: dcim/models/racks.py:275 +#: netbox/dcim/models/racks.py:275 msgid "Locally-assigned identifier" msgstr "Lokálně přiřazený identifikátor" -#: dcim/models/racks.py:308 ipam/forms/bulk_import.py:201 -#: ipam/forms/bulk_import.py:266 ipam/forms/bulk_import.py:301 -#: ipam/forms/bulk_import.py:459 virtualization/forms/bulk_import.py:112 +#: 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 msgid "Functional role" msgstr "Funkční role" -#: dcim/models/racks.py:321 +#: netbox/dcim/models/racks.py:321 msgid "A unique tag used to identify this rack" msgstr "Jedinečná značka použitá k identifikaci tohoto stojanu" -#: dcim/models/racks.py:359 +#: netbox/dcim/models/racks.py:359 msgid "rack" msgstr "nosič" -#: dcim/models/racks.py:360 +#: netbox/dcim/models/racks.py:360 msgid "racks" msgstr "regály" -#: dcim/models/racks.py:375 +#: netbox/dcim/models/racks.py:375 #, 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})." -#: dcim/models/racks.py:393 +#: netbox/dcim/models/racks.py:393 #, python-brace-format msgid "" "Rack must be at least {min_height}U tall to house currently installed " @@ -5998,7 +6477,7 @@ msgstr "" "Stojan musí být alespoň {min_height}U vysoký k uložení aktuálně " "nainstalovaných zařízení." -#: dcim/models/racks.py:400 +#: netbox/dcim/models/racks.py:400 #, python-brace-format msgid "" "Rack unit numbering must begin at {position} or less to house currently " @@ -6007,1154 +6486,1238 @@ 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í." -#: dcim/models/racks.py:408 +#: netbox/dcim/models/racks.py:408 #, 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}." -#: dcim/models/racks.py:670 +#: netbox/dcim/models/racks.py:670 msgid "units" msgstr "jednotky" -#: dcim/models/racks.py:696 +#: netbox/dcim/models/racks.py:696 msgid "rack reservation" msgstr "rezervace stojanu" -#: dcim/models/racks.py:697 +#: netbox/dcim/models/racks.py:697 msgid "rack reservations" msgstr "rezervace stojanů" -#: dcim/models/racks.py:714 +#: netbox/dcim/models/racks.py:714 #, python-brace-format msgid "Invalid unit(s) for {height}U rack: {unit_list}" msgstr "Neplatná jednotka (y) pro {height}U stojan: {unit_list}" -#: dcim/models/racks.py:727 +#: netbox/dcim/models/racks.py:727 #, python-brace-format msgid "The following units have already been reserved: {unit_list}" msgstr "Následující jednotky již byly rezervovány: {unit_list}" -#: dcim/models/sites.py:49 +#: netbox/dcim/models/sites.py:49 msgid "A top-level region with this name already exists." msgstr "Oblast nejvyšší úrovně s tímto názvem již existuje." -#: dcim/models/sites.py:59 +#: netbox/dcim/models/sites.py:59 msgid "A top-level region with this slug already exists." msgstr "Oblast nejvyšší úrovně s tímto slimákem již existuje." -#: dcim/models/sites.py:62 +#: netbox/dcim/models/sites.py:62 msgid "region" msgstr "region" -#: dcim/models/sites.py:63 +#: netbox/dcim/models/sites.py:63 msgid "regions" msgstr "regiony" -#: dcim/models/sites.py:102 +#: netbox/dcim/models/sites.py:102 msgid "A top-level site group with this name already exists." msgstr "Skupina webů nejvyšší úrovně s tímto názvem již existuje." -#: dcim/models/sites.py:112 +#: netbox/dcim/models/sites.py:112 msgid "A top-level site group with this slug already exists." msgstr "Skupina webů nejvyšší úrovně s tímto slimákem již existuje." -#: dcim/models/sites.py:115 +#: netbox/dcim/models/sites.py:115 msgid "site group" msgstr "skupina stránek" -#: dcim/models/sites.py:116 +#: netbox/dcim/models/sites.py:116 msgid "site groups" msgstr "skupiny webů" -#: dcim/models/sites.py:141 +#: netbox/dcim/models/sites.py:141 msgid "Full name of the site" msgstr "Úplný název webu" -#: dcim/models/sites.py:181 dcim/models/sites.py:279 +#: netbox/dcim/models/sites.py:181 netbox/dcim/models/sites.py:279 msgid "facility" msgstr "zařízení" -#: dcim/models/sites.py:184 dcim/models/sites.py:282 +#: netbox/dcim/models/sites.py:184 netbox/dcim/models/sites.py:282 msgid "Local facility ID or description" msgstr "ID nebo popis místního zařízení" -#: dcim/models/sites.py:195 +#: netbox/dcim/models/sites.py:195 msgid "physical address" msgstr "fyzická adresa" -#: dcim/models/sites.py:198 +#: netbox/dcim/models/sites.py:198 msgid "Physical location of the building" msgstr "Fyzické umístění budovy" -#: dcim/models/sites.py:201 +#: netbox/dcim/models/sites.py:201 msgid "shipping address" msgstr "dodací adresa" -#: dcim/models/sites.py:204 +#: netbox/dcim/models/sites.py:204 msgid "If different from the physical address" msgstr "Pokud se liší od fyzické adresy" -#: dcim/models/sites.py:238 +#: netbox/dcim/models/sites.py:238 msgid "site" msgstr "stránky" -#: dcim/models/sites.py:239 +#: netbox/dcim/models/sites.py:239 msgid "sites" msgstr "stránky" -#: dcim/models/sites.py:309 +#: netbox/dcim/models/sites.py:309 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." -#: dcim/models/sites.py:319 +#: netbox/dcim/models/sites.py:319 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." -#: dcim/models/sites.py:322 +#: netbox/dcim/models/sites.py:322 msgid "location" msgstr "lokace" -#: dcim/models/sites.py:323 +#: netbox/dcim/models/sites.py:323 msgid "locations" msgstr "lokalitách" -#: dcim/models/sites.py:337 +#: netbox/dcim/models/sites.py:337 #, python-brace-format msgid "Parent location ({parent}) must belong to the same site ({site})." msgstr "Rodičovská lokalita ({parent}) musí patřit ke stejnému webu ({site})." -#: dcim/tables/cables.py:55 +#: netbox/dcim/tables/cables.py:55 msgid "Termination A" msgstr "Ukončení A" -#: dcim/tables/cables.py:60 +#: netbox/dcim/tables/cables.py:60 msgid "Termination B" msgstr "Ukončení B" -#: dcim/tables/cables.py:66 wireless/tables/wirelesslink.py:23 +#: netbox/dcim/tables/cables.py:66 netbox/wireless/tables/wirelesslink.py:23 msgid "Device A" msgstr "Zařízení A" -#: dcim/tables/cables.py:72 wireless/tables/wirelesslink.py:32 +#: netbox/dcim/tables/cables.py:72 netbox/wireless/tables/wirelesslink.py:32 msgid "Device B" msgstr "Zařízení B" -#: dcim/tables/cables.py:78 +#: netbox/dcim/tables/cables.py:78 msgid "Location A" msgstr "Lokalita A" -#: dcim/tables/cables.py:84 +#: netbox/dcim/tables/cables.py:84 msgid "Location B" msgstr "Lokalita B" -#: dcim/tables/cables.py:90 +#: netbox/dcim/tables/cables.py:90 msgid "Rack A" msgstr "Stojan A" -#: dcim/tables/cables.py:96 +#: netbox/dcim/tables/cables.py:96 msgid "Rack B" msgstr "Stojan B" -#: dcim/tables/cables.py:102 +#: netbox/dcim/tables/cables.py:102 msgid "Site A" msgstr "Stránky A" -#: dcim/tables/cables.py:108 +#: netbox/dcim/tables/cables.py:108 msgid "Site B" msgstr "Místo B" -#: dcim/tables/connections.py:31 dcim/tables/connections.py:50 -#: dcim/tables/connections.py:71 -#: templates/dcim/inc/connection_endpoints.html:16 +#: netbox/dcim/tables/connections.py:31 netbox/dcim/tables/connections.py:50 +#: netbox/dcim/tables/connections.py:71 +#: netbox/templates/dcim/inc/connection_endpoints.html:16 msgid "Reachable" msgstr "Dosažitelný" -#: dcim/tables/devices.py:58 dcim/tables/devices.py:106 -#: dcim/tables/racks.py:150 dcim/tables/sites.py:105 dcim/tables/sites.py:148 -#: extras/tables/tables.py:545 netbox/navigation/menu.py:69 -#: netbox/navigation/menu.py:73 netbox/navigation/menu.py:75 -#: virtualization/forms/model_forms.py:122 -#: virtualization/tables/clusters.py:83 virtualization/views.py:206 +#: 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/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 msgid "Devices" msgstr "Přístroje" -#: dcim/tables/devices.py:63 dcim/tables/devices.py:111 -#: virtualization/tables/clusters.py:88 +#: netbox/dcim/tables/devices.py:63 netbox/dcim/tables/devices.py:111 +#: netbox/virtualization/tables/clusters.py:88 msgid "VMs" msgstr "Virtuální stroje" -#: dcim/tables/devices.py:100 dcim/tables/devices.py:216 -#: extras/forms/model_forms.py:630 templates/dcim/device.html:112 -#: templates/dcim/device/render_config.html:11 -#: templates/dcim/device/render_config.html:14 -#: templates/dcim/devicerole.html:44 templates/dcim/platform.html:41 -#: templates/extras/configtemplate.html:10 -#: templates/virtualization/virtualmachine.html:48 -#: templates/virtualization/virtualmachine/render_config.html:11 -#: templates/virtualization/virtualmachine/render_config.html:14 -#: virtualization/tables/virtualmachines.py:107 +#: netbox/dcim/tables/devices.py:100 netbox/dcim/tables/devices.py:216 +#: 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/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 msgid "Config Template" msgstr "Konfigurační šablona" -#: dcim/tables/devices.py:150 templates/dcim/sitegroup.html:26 +#: netbox/dcim/tables/devices.py:150 netbox/templates/dcim/sitegroup.html:26 msgid "Site Group" msgstr "Skupina stránek" -#: dcim/tables/devices.py:187 dcim/tables/devices.py:1068 -#: ipam/forms/bulk_import.py:503 ipam/forms/model_forms.py:306 -#: ipam/forms/model_forms.py:315 ipam/tables/ip.py:356 ipam/tables/ip.py:423 -#: ipam/tables/ip.py:446 templates/ipam/ipaddress.html:11 -#: virtualization/tables/virtualmachines.py:95 +#: 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/templates/ipam/ipaddress.html:11 +#: netbox/virtualization/tables/virtualmachines.py:95 msgid "IP Address" msgstr "IP adresa" -#: dcim/tables/devices.py:191 dcim/tables/devices.py:1072 -#: virtualization/tables/virtualmachines.py:86 +#: netbox/dcim/tables/devices.py:191 netbox/dcim/tables/devices.py:1072 +#: netbox/virtualization/tables/virtualmachines.py:86 msgid "IPv4 Address" msgstr "IPv4 Adresa" -#: dcim/tables/devices.py:195 dcim/tables/devices.py:1076 -#: virtualization/tables/virtualmachines.py:90 +#: netbox/dcim/tables/devices.py:195 netbox/dcim/tables/devices.py:1076 +#: netbox/virtualization/tables/virtualmachines.py:90 msgid "IPv6 Address" msgstr "Adresa IPv6" -#: dcim/tables/devices.py:210 +#: netbox/dcim/tables/devices.py:210 msgid "VC Position" msgstr "Pozice VC" -#: dcim/tables/devices.py:213 +#: netbox/dcim/tables/devices.py:213 msgid "VC Priority" msgstr "Priorita VC" -#: dcim/tables/devices.py:220 templates/dcim/device_edit.html:38 -#: templates/dcim/devicebay_populate.html:16 +#: netbox/dcim/tables/devices.py:220 netbox/templates/dcim/device_edit.html:38 +#: netbox/templates/dcim/devicebay_populate.html:16 msgid "Parent Device" msgstr "Rodičovské zařízení" -#: dcim/tables/devices.py:225 +#: netbox/dcim/tables/devices.py:225 msgid "Position (Device Bay)" msgstr "Pozice (pole pro zařízení)" -#: dcim/tables/devices.py:234 +#: netbox/dcim/tables/devices.py:234 msgid "Console ports" msgstr "Porty konzoly" -#: dcim/tables/devices.py:237 +#: netbox/dcim/tables/devices.py:237 msgid "Console server ports" msgstr "Porty konzolového serveru" -#: dcim/tables/devices.py:240 +#: netbox/dcim/tables/devices.py:240 msgid "Power ports" msgstr "Napájecí porty" -#: dcim/tables/devices.py:243 +#: netbox/dcim/tables/devices.py:243 msgid "Power outlets" msgstr "Elektrické zásuvky" -#: dcim/tables/devices.py:246 dcim/tables/devices.py:1081 -#: dcim/tables/devicetypes.py:128 dcim/views.py:1042 dcim/views.py:1281 -#: dcim/views.py:1977 netbox/navigation/menu.py:94 -#: netbox/navigation/menu.py:250 templates/dcim/device/base.html:37 -#: templates/dcim/device_list.html:43 templates/dcim/devicetype/base.html:34 -#: templates/dcim/inc/moduletype_buttons.html:25 templates/dcim/module.html:34 -#: templates/dcim/virtualdevicecontext.html:61 -#: templates/dcim/virtualdevicecontext.html:81 -#: templates/virtualization/virtualmachine/base.html:27 -#: templates/virtualization/virtualmachine_list.html:14 -#: virtualization/tables/virtualmachines.py:101 virtualization/views.py:366 -#: wireless/tables/wirelesslan.py:55 +#: 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/templates/dcim/device/base.html:37 +#: netbox/templates/dcim/device_list.html:43 +#: netbox/templates/dcim/devicetype/base.html:34 +#: netbox/templates/dcim/inc/moduletype_buttons.html:25 +#: netbox/templates/dcim/module.html:34 +#: netbox/templates/dcim/virtualdevicecontext.html:61 +#: netbox/templates/dcim/virtualdevicecontext.html:81 +#: netbox/templates/virtualization/virtualmachine/base.html:27 +#: netbox/templates/virtualization/virtualmachine_list.html:14 +#: netbox/virtualization/tables/virtualmachines.py:101 +#: netbox/virtualization/views.py:364 netbox/wireless/tables/wirelesslan.py:55 msgid "Interfaces" msgstr "Rozhraní" -#: dcim/tables/devices.py:249 +#: netbox/dcim/tables/devices.py:249 msgid "Front ports" msgstr "Přední porty" -#: dcim/tables/devices.py:255 +#: netbox/dcim/tables/devices.py:255 msgid "Device bays" msgstr "Pozice zařízení" -#: dcim/tables/devices.py:258 +#: netbox/dcim/tables/devices.py:258 msgid "Module bays" msgstr "Modulové pozice" -#: dcim/tables/devices.py:261 +#: netbox/dcim/tables/devices.py:261 msgid "Inventory items" msgstr "Inventární položky" -#: dcim/tables/devices.py:305 dcim/tables/modules.py:56 -#: templates/dcim/modulebay.html:17 +#: netbox/dcim/tables/devices.py:305 netbox/dcim/tables/modules.py:57 +#: netbox/templates/dcim/modulebay.html:17 msgid "Module Bay" msgstr "Modulová přihrádka" -#: dcim/tables/devices.py:318 dcim/tables/devicetypes.py:47 -#: dcim/tables/devicetypes.py:143 dcim/views.py:1117 dcim/views.py:2075 -#: netbox/navigation/menu.py:103 templates/dcim/device/base.html:52 -#: templates/dcim/device_list.html:71 templates/dcim/devicetype/base.html:49 -#: templates/dcim/inc/panels/inventory_items.html:6 -#: templates/dcim/inventoryitemrole.html:32 +#: netbox/dcim/tables/devices.py:318 netbox/dcim/tables/devicetypes.py:47 +#: netbox/dcim/tables/devicetypes.py:143 netbox/dcim/views.py:1115 +#: netbox/dcim/views.py:2073 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 +#: netbox/templates/dcim/inc/panels/inventory_items.html:6 +#: netbox/templates/dcim/inventoryitemrole.html:32 msgid "Inventory Items" msgstr "Inventární položky" -#: dcim/tables/devices.py:333 +#: netbox/dcim/tables/devices.py:333 msgid "Cable Color" msgstr "Barva kabelu" -#: dcim/tables/devices.py:339 +#: netbox/dcim/tables/devices.py:339 msgid "Link Peers" msgstr "Propojit vrstevníky" -#: dcim/tables/devices.py:342 +#: netbox/dcim/tables/devices.py:342 msgid "Mark Connected" msgstr "Označit Připojeno" -#: dcim/tables/devices.py:461 +#: netbox/dcim/tables/devices.py:461 msgid "Maximum draw (W)" msgstr "Maximální tažení (W)" -#: dcim/tables/devices.py:464 +#: netbox/dcim/tables/devices.py:464 msgid "Allocated draw (W)" msgstr "Přidělené losování (W)" -#: dcim/tables/devices.py:558 ipam/forms/model_forms.py:701 -#: ipam/tables/fhrp.py:28 ipam/views.py:596 ipam/views.py:696 -#: netbox/navigation/menu.py:158 netbox/navigation/menu.py:160 -#: templates/dcim/interface.html:339 templates/ipam/ipaddress_bulk_add.html:15 -#: templates/ipam/service.html:40 templates/virtualization/vminterface.html:85 -#: vpn/tables/tunnels.py:98 +#: netbox/dcim/tables/devices.py:558 netbox/ipam/forms/model_forms.py: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/templates/ipam/ipaddress_bulk_add.html:15 +#: netbox/templates/ipam/service.html:40 +#: netbox/templates/virtualization/vminterface.html:85 +#: netbox/vpn/tables/tunnels.py:98 msgid "IP Addresses" msgstr "IP adresy" -#: dcim/tables/devices.py:564 netbox/navigation/menu.py:202 -#: templates/ipam/inc/panels/fhrp_groups.html:6 +#: netbox/dcim/tables/devices.py:564 netbox/netbox/navigation/menu.py:202 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:6 msgid "FHRP Groups" msgstr "Skupiny FHRP" -#: dcim/tables/devices.py:576 templates/dcim/interface.html:89 -#: templates/virtualization/vminterface.html:67 templates/vpn/tunnel.html:18 -#: templates/vpn/tunneltermination.html:13 vpn/forms/bulk_edit.py:76 -#: vpn/forms/bulk_import.py:76 vpn/forms/filtersets.py:42 -#: vpn/forms/filtersets.py:82 vpn/forms/model_forms.py:60 -#: vpn/forms/model_forms.py:145 vpn/tables/tunnels.py:78 +#: netbox/dcim/tables/devices.py:576 netbox/templates/dcim/interface.html:89 +#: netbox/templates/virtualization/vminterface.html:67 +#: netbox/templates/vpn/tunnel.html:18 +#: netbox/templates/vpn/tunneltermination.html:13 +#: netbox/vpn/forms/bulk_edit.py:76 netbox/vpn/forms/bulk_import.py:76 +#: netbox/vpn/forms/filtersets.py:42 netbox/vpn/forms/filtersets.py:82 +#: netbox/vpn/forms/model_forms.py:60 netbox/vpn/forms/model_forms.py:145 +#: netbox/vpn/tables/tunnels.py:78 msgid "Tunnel" msgstr "Tunel" -#: dcim/tables/devices.py:604 dcim/tables/devicetypes.py:227 -#: templates/dcim/interface.html:65 +#: netbox/dcim/tables/devices.py:604 netbox/dcim/tables/devicetypes.py:227 +#: netbox/templates/dcim/interface.html:65 msgid "Management Only" msgstr "Pouze správa" -#: dcim/tables/devices.py:623 +#: netbox/dcim/tables/devices.py:623 msgid "VDCs" msgstr "VDC" -#: dcim/tables/devices.py:873 templates/dcim/modulebay.html:53 +#: netbox/dcim/tables/devices.py:873 netbox/templates/dcim/modulebay.html:53 msgid "Installed Module" msgstr "Instalovaný modul" -#: dcim/tables/devices.py:876 +#: netbox/dcim/tables/devices.py:876 msgid "Module Serial" msgstr "Sériový modul" -#: dcim/tables/devices.py:880 +#: netbox/dcim/tables/devices.py:880 msgid "Module Asset Tag" msgstr "Štítek aktiv modulu" -#: dcim/tables/devices.py:889 +#: netbox/dcim/tables/devices.py:889 msgid "Module Status" msgstr "Stav modulu" -#: dcim/tables/devices.py:944 dcim/tables/devicetypes.py:312 -#: templates/dcim/inventoryitem.html:40 +#: netbox/dcim/tables/devices.py:944 netbox/dcim/tables/devicetypes.py:312 +#: netbox/templates/dcim/inventoryitem.html:40 msgid "Component" msgstr "Komponenta" -#: dcim/tables/devices.py:1000 +#: netbox/dcim/tables/devices.py:1000 msgid "Items" msgstr "Položky" -#: dcim/tables/devicetypes.py:37 netbox/navigation/menu.py:84 -#: netbox/navigation/menu.py:86 +#: netbox/dcim/tables/devicetypes.py:37 netbox/netbox/navigation/menu.py:84 +#: netbox/netbox/navigation/menu.py:86 msgid "Device Types" msgstr "Typy zařízení" -#: dcim/tables/devicetypes.py:42 netbox/navigation/menu.py:87 +#: netbox/dcim/tables/devicetypes.py:42 netbox/netbox/navigation/menu.py:87 msgid "Module Types" msgstr "Typy modulů" -#: dcim/tables/devicetypes.py:52 extras/forms/filtersets.py:371 -#: extras/forms/model_forms.py:537 extras/tables/tables.py:540 -#: netbox/navigation/menu.py:78 +#: 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/netbox/navigation/menu.py:78 msgid "Platforms" msgstr "Platformy" -#: dcim/tables/devicetypes.py:84 templates/dcim/devicetype.html:29 +#: netbox/dcim/tables/devicetypes.py:84 +#: netbox/templates/dcim/devicetype.html:29 msgid "Default Platform" msgstr "Výchozí platforma" -#: dcim/tables/devicetypes.py:88 templates/dcim/devicetype.html:45 +#: netbox/dcim/tables/devicetypes.py:88 +#: netbox/templates/dcim/devicetype.html:45 msgid "Full Depth" msgstr "Plná hloubka" -#: dcim/tables/devicetypes.py:98 +#: netbox/dcim/tables/devicetypes.py:98 msgid "U Height" msgstr "Výška U" -#: dcim/tables/devicetypes.py:113 dcim/tables/modules.py:26 -#: dcim/tables/racks.py:89 +#: netbox/dcim/tables/devicetypes.py:113 netbox/dcim/tables/modules.py:26 +#: netbox/dcim/tables/racks.py:89 msgid "Instances" msgstr "Instance" -#: dcim/tables/devicetypes.py:116 dcim/views.py:982 dcim/views.py:1221 -#: dcim/views.py:1913 netbox/navigation/menu.py:97 -#: templates/dcim/device/base.html:25 templates/dcim/device_list.html:15 -#: templates/dcim/devicetype/base.html:22 -#: templates/dcim/inc/moduletype_buttons.html:13 templates/dcim/module.html:22 +#: netbox/dcim/tables/devicetypes.py:116 netbox/dcim/views.py:980 +#: netbox/dcim/views.py:1219 netbox/dcim/views.py:1911 +#: netbox/netbox/navigation/menu.py:97 +#: netbox/templates/dcim/device/base.html:25 +#: netbox/templates/dcim/device_list.html:15 +#: netbox/templates/dcim/devicetype/base.html:22 +#: netbox/templates/dcim/inc/moduletype_buttons.html:13 +#: netbox/templates/dcim/module.html:22 msgid "Console Ports" msgstr "Porty konzoly" -#: dcim/tables/devicetypes.py:119 dcim/views.py:997 dcim/views.py:1236 -#: dcim/views.py:1929 netbox/navigation/menu.py:98 -#: templates/dcim/device/base.html:28 templates/dcim/device_list.html:22 -#: templates/dcim/devicetype/base.html:25 -#: templates/dcim/inc/moduletype_buttons.html:16 templates/dcim/module.html:25 +#: netbox/dcim/tables/devicetypes.py:119 netbox/dcim/views.py:995 +#: netbox/dcim/views.py:1234 netbox/dcim/views.py:1927 +#: netbox/netbox/navigation/menu.py:98 +#: netbox/templates/dcim/device/base.html:28 +#: netbox/templates/dcim/device_list.html:22 +#: netbox/templates/dcim/devicetype/base.html:25 +#: netbox/templates/dcim/inc/moduletype_buttons.html:16 +#: netbox/templates/dcim/module.html:25 msgid "Console Server Ports" msgstr "Porty konzolového serveru" -#: dcim/tables/devicetypes.py:122 dcim/views.py:1012 dcim/views.py:1251 -#: dcim/views.py:1945 netbox/navigation/menu.py:99 -#: templates/dcim/device/base.html:31 templates/dcim/device_list.html:29 -#: templates/dcim/devicetype/base.html:28 -#: templates/dcim/inc/moduletype_buttons.html:19 templates/dcim/module.html:28 +#: netbox/dcim/tables/devicetypes.py:122 netbox/dcim/views.py:1010 +#: netbox/dcim/views.py:1249 netbox/dcim/views.py:1943 +#: netbox/netbox/navigation/menu.py:99 +#: netbox/templates/dcim/device/base.html:31 +#: netbox/templates/dcim/device_list.html:29 +#: netbox/templates/dcim/devicetype/base.html:28 +#: netbox/templates/dcim/inc/moduletype_buttons.html:19 +#: netbox/templates/dcim/module.html:28 msgid "Power Ports" msgstr "Napájecí porty" -#: dcim/tables/devicetypes.py:125 dcim/views.py:1027 dcim/views.py:1266 -#: dcim/views.py:1961 netbox/navigation/menu.py:100 -#: templates/dcim/device/base.html:34 templates/dcim/device_list.html:36 -#: templates/dcim/devicetype/base.html:31 -#: templates/dcim/inc/moduletype_buttons.html:22 templates/dcim/module.html:31 +#: netbox/dcim/tables/devicetypes.py:125 netbox/dcim/views.py:1025 +#: netbox/dcim/views.py:1264 netbox/dcim/views.py:1959 +#: netbox/netbox/navigation/menu.py:100 +#: netbox/templates/dcim/device/base.html:34 +#: netbox/templates/dcim/device_list.html:36 +#: netbox/templates/dcim/devicetype/base.html:31 +#: netbox/templates/dcim/inc/moduletype_buttons.html:22 +#: netbox/templates/dcim/module.html:31 msgid "Power Outlets" msgstr "Napájecí zásuvky" -#: dcim/tables/devicetypes.py:131 dcim/views.py:1057 dcim/views.py:1296 -#: dcim/views.py:1999 netbox/navigation/menu.py:95 -#: templates/dcim/device/base.html:40 templates/dcim/devicetype/base.html:37 -#: templates/dcim/inc/moduletype_buttons.html:28 templates/dcim/module.html:37 +#: netbox/dcim/tables/devicetypes.py:131 netbox/dcim/views.py:1055 +#: netbox/dcim/views.py:1294 netbox/dcim/views.py:1997 +#: netbox/netbox/navigation/menu.py:95 +#: netbox/templates/dcim/device/base.html:40 +#: netbox/templates/dcim/devicetype/base.html:37 +#: netbox/templates/dcim/inc/moduletype_buttons.html:28 +#: netbox/templates/dcim/module.html:37 msgid "Front Ports" msgstr "Přední porty" -#: dcim/tables/devicetypes.py:134 dcim/views.py:1072 dcim/views.py:1311 -#: dcim/views.py:2015 netbox/navigation/menu.py:96 -#: templates/dcim/device/base.html:43 templates/dcim/device_list.html:50 -#: templates/dcim/devicetype/base.html:40 -#: templates/dcim/inc/moduletype_buttons.html:31 templates/dcim/module.html:40 +#: netbox/dcim/tables/devicetypes.py:134 netbox/dcim/views.py:1070 +#: netbox/dcim/views.py:1309 netbox/dcim/views.py:2013 +#: netbox/netbox/navigation/menu.py:96 +#: netbox/templates/dcim/device/base.html:43 +#: netbox/templates/dcim/device_list.html:50 +#: netbox/templates/dcim/devicetype/base.html:40 +#: netbox/templates/dcim/inc/moduletype_buttons.html:31 +#: netbox/templates/dcim/module.html:40 msgid "Rear Ports" msgstr "Zadní porty" -#: dcim/tables/devicetypes.py:137 dcim/views.py:1102 dcim/views.py:2055 -#: netbox/navigation/menu.py:102 templates/dcim/device/base.html:49 -#: templates/dcim/device_list.html:57 templates/dcim/devicetype/base.html:46 +#: netbox/dcim/tables/devicetypes.py:137 netbox/dcim/views.py:1100 +#: netbox/dcim/views.py:2053 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í" -#: dcim/tables/devicetypes.py:140 dcim/views.py:1087 dcim/views.py:1326 -#: dcim/views.py:2035 netbox/navigation/menu.py:101 -#: templates/dcim/device/base.html:46 templates/dcim/device_list.html:64 -#: templates/dcim/devicetype/base.html:43 -#: templates/dcim/inc/moduletype_buttons.html:34 templates/dcim/module.html:43 +#: netbox/dcim/tables/devicetypes.py:140 netbox/dcim/views.py:1085 +#: netbox/dcim/views.py:1324 netbox/dcim/views.py:2033 +#: netbox/netbox/navigation/menu.py:101 +#: netbox/templates/dcim/device/base.html:46 +#: netbox/templates/dcim/device_list.html:64 +#: netbox/templates/dcim/devicetype/base.html:43 +#: netbox/templates/dcim/inc/moduletype_buttons.html:34 +#: netbox/templates/dcim/module.html:43 msgid "Module Bays" msgstr "Modulové pozice" -#: dcim/tables/power.py:36 netbox/navigation/menu.py:297 -#: templates/dcim/powerpanel.html:51 +#: netbox/dcim/tables/power.py:36 netbox/netbox/navigation/menu.py:297 +#: netbox/templates/dcim/powerpanel.html:51 msgid "Power Feeds" msgstr "Napájecí zdroje" -#: dcim/tables/power.py:80 templates/dcim/powerfeed.html:99 +#: netbox/dcim/tables/power.py:80 netbox/templates/dcim/powerfeed.html:99 msgid "Max Utilization" msgstr "Maximální využití" -#: dcim/tables/power.py:84 +#: netbox/dcim/tables/power.py:84 msgid "Available Power (VA)" msgstr "Dostupný výkon (VA)" -#: dcim/tables/racks.py:30 dcim/tables/sites.py:143 -#: netbox/navigation/menu.py:43 netbox/navigation/menu.py:47 -#: netbox/navigation/menu.py:49 +#: netbox/dcim/tables/racks.py:30 netbox/dcim/tables/sites.py:143 +#: netbox/netbox/navigation/menu.py:43 netbox/netbox/navigation/menu.py:47 +#: netbox/netbox/navigation/menu.py:49 msgid "Racks" msgstr "Stojany" -#: dcim/tables/racks.py:63 dcim/tables/racks.py:142 -#: templates/dcim/device.html:318 -#: templates/dcim/inc/panels/racktype_dimensions.html:14 +#: netbox/dcim/tables/racks.py:63 netbox/dcim/tables/racks.py:142 +#: netbox/templates/dcim/device.html:318 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:14 msgid "Height" msgstr "Výška" -#: dcim/tables/racks.py:67 dcim/tables/racks.py:165 -#: templates/dcim/inc/panels/racktype_dimensions.html:18 +#: netbox/dcim/tables/racks.py:67 netbox/dcim/tables/racks.py:165 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:18 msgid "Outer Width" msgstr "Vnější šířka" -#: dcim/tables/racks.py:71 dcim/tables/racks.py:169 -#: templates/dcim/inc/panels/racktype_dimensions.html:28 +#: netbox/dcim/tables/racks.py:71 netbox/dcim/tables/racks.py:169 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:28 msgid "Outer Depth" msgstr "Vnější hloubka" -#: dcim/tables/racks.py:79 dcim/tables/racks.py:177 +#: netbox/dcim/tables/racks.py:79 netbox/dcim/tables/racks.py:177 msgid "Max Weight" msgstr "Max. hmotnost" -#: dcim/tables/racks.py:154 +#: netbox/dcim/tables/racks.py:154 msgid "Space" msgstr "Prostor" -#: dcim/tables/sites.py:30 dcim/tables/sites.py:57 -#: extras/forms/filtersets.py:351 extras/forms/model_forms.py:517 -#: ipam/forms/bulk_edit.py:131 ipam/forms/model_forms.py:153 -#: ipam/tables/asn.py:66 netbox/navigation/menu.py:15 -#: netbox/navigation/menu.py:17 +#: netbox/dcim/tables/sites.py:30 netbox/dcim/tables/sites.py:57 +#: netbox/extras/forms/filtersets.py: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/netbox/navigation/menu.py:15 netbox/netbox/navigation/menu.py:17 msgid "Sites" msgstr "Stránky" -#: dcim/tests/test_api.py:47 +#: netbox/dcim/tests/test_api.py:47 msgid "Test case must set peer_termination_type" msgstr "Testovací případ musí nastavit peer_termination_type" -#: dcim/views.py:140 +#: netbox/dcim/views.py:138 #, python-brace-format msgid "Disconnected {count} {type}" msgstr "Odpojeno {count} {type}" -#: dcim/views.py:740 netbox/navigation/menu.py:51 +#: netbox/dcim/views.py:738 netbox/netbox/navigation/menu.py:51 msgid "Reservations" msgstr "Rezervace" -#: dcim/views.py:759 templates/dcim/location.html:90 -#: templates/dcim/site.html:140 +#: netbox/dcim/views.py:757 netbox/templates/dcim/location.html:90 +#: netbox/templates/dcim/site.html:140 msgid "Non-Racked Devices" msgstr "Zařízení bez racku" -#: dcim/views.py:2088 extras/forms/model_forms.py:577 -#: templates/extras/configcontext.html:10 -#: virtualization/forms/model_forms.py:225 virtualization/views.py:407 +#: netbox/dcim/views.py:2086 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 msgid "Config Context" msgstr "Kontext konfigurace" -#: dcim/views.py:2098 virtualization/views.py:417 +#: netbox/dcim/views.py:2096 netbox/virtualization/views.py:415 msgid "Render Config" msgstr "Konfigurace rendrování" -#: dcim/views.py:2131 virtualization/views.py:450 +#: 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}" -#: dcim/views.py:2149 extras/tables/tables.py:550 -#: netbox/navigation/menu.py:247 netbox/navigation/menu.py:249 -#: virtualization/views.py:180 +#: 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 msgid "Virtual Machines" msgstr "Virtuální stroje" -#: dcim/views.py:2897 +#: netbox/dcim/views.py:2907 #, python-brace-format msgid "Installed device {device} in bay {device_bay}." msgstr "Nainstalované zařízení {device} v zátoce {device_bay}." -#: dcim/views.py:2938 +#: netbox/dcim/views.py:2948 #, python-brace-format msgid "Removed device {device} from bay {device_bay}." msgstr "Odstraněné zařízení {device} od zátoky {device_bay}." -#: dcim/views.py:3044 ipam/tables/ip.py:234 +#: netbox/dcim/views.py:3054 netbox/ipam/tables/ip.py:234 msgid "Children" msgstr "Děti" -#: dcim/views.py:3510 +#: netbox/dcim/views.py:3520 #, python-brace-format msgid "Added member {device}" msgstr "Přidán člen {device}" -#: dcim/views.py:3557 +#: netbox/dcim/views.py:3567 #, 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." -#: dcim/views.py:3570 +#: netbox/dcim/views.py:3580 #, python-brace-format msgid "Removed {device} from virtual chassis {chassis}" msgstr "Odstraněno {device} z virtuálního šasi {chassis}" -#: extras/api/customfields.py:89 +#: netbox/extras/api/customfields.py:89 #, python-brace-format msgid "Unknown related object(s): {name}" msgstr "Neznámý související objekt (y): {name}" -#: extras/api/serializers_/customfields.py:73 +#: netbox/extras/api/serializers_/customfields.py:73 msgid "Changing the type of custom fields is not supported." msgstr "Změna typu vlastních polí není podporována." -#: extras/api/serializers_/scripts.py:70 extras/api/serializers_/scripts.py:75 +#: netbox/extras/api/serializers_/scripts.py:70 +#: netbox/extras/api/serializers_/scripts.py:75 msgid "Scheduling is not enabled for this script." msgstr "Plánování není pro tento skript povoleno." -#: extras/choices.py:30 extras/forms/misc.py:14 +#: netbox/extras/choices.py:30 netbox/extras/forms/misc.py:14 msgid "Text" msgstr "Text" -#: extras/choices.py:31 +#: netbox/extras/choices.py:31 msgid "Text (long)" msgstr "Text (dlouhý)" -#: extras/choices.py:32 +#: netbox/extras/choices.py:32 msgid "Integer" msgstr "Celočíselné" -#: extras/choices.py:33 +#: netbox/extras/choices.py:33 msgid "Decimal" msgstr "Desetinné" -#: extras/choices.py:34 +#: netbox/extras/choices.py:34 msgid "Boolean (true/false)" msgstr "Boolean (pravda/nepravda)" -#: extras/choices.py:35 +#: netbox/extras/choices.py:35 msgid "Date" msgstr "Rande" -#: extras/choices.py:36 +#: netbox/extras/choices.py:36 msgid "Date & time" msgstr "Datum a čas" -#: extras/choices.py:38 +#: netbox/extras/choices.py:38 msgid "JSON" msgstr "JSON" -#: extras/choices.py:39 +#: netbox/extras/choices.py:39 msgid "Selection" msgstr "Výběr" -#: extras/choices.py:40 +#: netbox/extras/choices.py:40 msgid "Multiple selection" msgstr "Vícenásobný výběr" -#: extras/choices.py:42 +#: netbox/extras/choices.py:42 msgid "Multiple objects" msgstr "Více objektů" -#: extras/choices.py:53 netbox/preferences.py:21 -#: templates/extras/customfield.html:78 vpn/choices.py:20 -#: wireless/choices.py:27 +#: netbox/extras/choices.py:53 netbox/netbox/preferences.py:21 +#: netbox/templates/extras/customfield.html:78 netbox/vpn/choices.py:20 +#: netbox/wireless/choices.py:27 msgid "Disabled" msgstr "Zakázané" -#: extras/choices.py:54 +#: netbox/extras/choices.py:54 msgid "Loose" msgstr "Volný" -#: extras/choices.py:55 +#: netbox/extras/choices.py:55 msgid "Exact" msgstr "Přesný" -#: extras/choices.py:66 +#: netbox/extras/choices.py:66 msgid "Always" msgstr "Vždy" -#: extras/choices.py:67 +#: netbox/extras/choices.py:67 msgid "If set" msgstr "Pokud je nastaveno" -#: extras/choices.py:68 extras/choices.py:81 +#: netbox/extras/choices.py:68 netbox/extras/choices.py:81 msgid "Hidden" msgstr "Skrytý" -#: extras/choices.py:79 +#: netbox/extras/choices.py:79 msgid "Yes" msgstr "Ano" -#: extras/choices.py:80 +#: netbox/extras/choices.py:80 msgid "No" msgstr "Ne" -#: extras/choices.py:108 templates/tenancy/contact.html:57 -#: tenancy/forms/bulk_edit.py:118 wireless/forms/model_forms.py:168 +#: 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 msgid "Link" msgstr "Odkaz" -#: extras/choices.py:124 +#: netbox/extras/choices.py:124 msgid "Newest" msgstr "Nejnovější" -#: extras/choices.py:125 +#: netbox/extras/choices.py:125 msgid "Oldest" msgstr "Nejstarší" -#: extras/choices.py:126 +#: netbox/extras/choices.py:126 msgid "Alphabetical (A-Z)" msgstr "Abecedně (A-Z)" -#: extras/choices.py:127 +#: netbox/extras/choices.py:127 msgid "Alphabetical (Z-A)" msgstr "Abecedně (Z-A)" -#: extras/choices.py:144 extras/choices.py:167 +#: netbox/extras/choices.py:144 netbox/extras/choices.py:167 msgid "Info" msgstr "Informace" -#: extras/choices.py:145 extras/choices.py:168 +#: netbox/extras/choices.py:145 netbox/extras/choices.py:168 msgid "Success" msgstr "Úspěch" -#: extras/choices.py:146 extras/choices.py:169 +#: netbox/extras/choices.py:146 netbox/extras/choices.py:169 msgid "Warning" msgstr "Varování" -#: extras/choices.py:147 +#: netbox/extras/choices.py:147 msgid "Danger" msgstr "Nebezpečí" -#: extras/choices.py:165 +#: netbox/extras/choices.py:165 msgid "Debug" msgstr "Ladění" -#: extras/choices.py:166 netbox/choices.py:101 +#: netbox/extras/choices.py:166 netbox/netbox/choices.py:101 msgid "Default" msgstr "Výchozí" -#: extras/choices.py:170 +#: netbox/extras/choices.py:170 msgid "Failure" msgstr "Porucha" -#: extras/choices.py:186 +#: netbox/extras/choices.py:186 msgid "Hourly" msgstr "Hodinová" -#: extras/choices.py:187 +#: netbox/extras/choices.py:187 msgid "12 hours" msgstr "12 hodin" -#: extras/choices.py:188 +#: netbox/extras/choices.py:188 msgid "Daily" msgstr "Denně" -#: extras/choices.py:189 +#: netbox/extras/choices.py:189 msgid "Weekly" msgstr "Týdenní" -#: extras/choices.py:190 +#: netbox/extras/choices.py:190 msgid "30 days" msgstr "30 dní" -#: extras/choices.py:226 templates/dcim/virtualchassis_edit.html:107 -#: templates/generic/bulk_add_component.html:68 -#: templates/generic/object_edit.html:47 templates/generic/object_edit.html:80 -#: templates/ipam/inc/ipaddress_edit_header.html:7 +#: netbox/extras/choices.py:226 +#: 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/ipam/inc/ipaddress_edit_header.html:7 msgid "Create" msgstr "Vytvořit" -#: extras/choices.py:227 +#: netbox/extras/choices.py:227 msgid "Update" msgstr "Aktualizovat" -#: extras/choices.py:228 templates/circuits/inc/circuit_termination.html:23 -#: templates/dcim/inc/panels/inventory_items.html:37 -#: templates/dcim/powerpanel.html:66 templates/extras/script_list.html:35 -#: templates/generic/bulk_delete.html:20 templates/generic/bulk_delete.html:66 -#: templates/generic/object_delete.html:19 templates/htmx/delete_form.html:57 -#: templates/ipam/inc/panels/fhrp_groups.html:48 -#: templates/users/objectpermission.html:46 -#: utilities/templates/buttons/delete.html:11 +#: netbox/extras/choices.py:228 +#: netbox/templates/circuits/inc/circuit_termination.html:23 +#: netbox/templates/dcim/inc/panels/inventory_items.html:37 +#: netbox/templates/dcim/powerpanel.html:66 +#: netbox/templates/extras/script_list.html:35 +#: netbox/templates/generic/bulk_delete.html:20 +#: netbox/templates/generic/bulk_delete.html:66 +#: netbox/templates/generic/object_delete.html:19 +#: netbox/templates/htmx/delete_form.html:57 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:48 +#: netbox/templates/users/objectpermission.html:46 +#: netbox/utilities/templates/buttons/delete.html:11 msgid "Delete" msgstr "Odstranit" -#: extras/choices.py:252 netbox/choices.py:57 netbox/choices.py:102 +#: netbox/extras/choices.py:252 netbox/netbox/choices.py:57 +#: netbox/netbox/choices.py:102 msgid "Blue" msgstr "Modrý" -#: extras/choices.py:253 netbox/choices.py:56 netbox/choices.py:103 +#: netbox/extras/choices.py:253 netbox/netbox/choices.py:56 +#: netbox/netbox/choices.py:103 msgid "Indigo" msgstr "Indigo" -#: extras/choices.py:254 netbox/choices.py:54 netbox/choices.py:104 +#: netbox/extras/choices.py:254 netbox/netbox/choices.py:54 +#: netbox/netbox/choices.py:104 msgid "Purple" msgstr "Nachový" -#: extras/choices.py:255 netbox/choices.py:51 netbox/choices.py:105 +#: netbox/extras/choices.py:255 netbox/netbox/choices.py:51 +#: netbox/netbox/choices.py:105 msgid "Pink" msgstr "Růžový" -#: extras/choices.py:256 netbox/choices.py:50 netbox/choices.py:106 +#: netbox/extras/choices.py:256 netbox/netbox/choices.py:50 +#: netbox/netbox/choices.py:106 msgid "Red" msgstr "Červené" -#: extras/choices.py:257 netbox/choices.py:68 netbox/choices.py:107 +#: netbox/extras/choices.py:257 netbox/netbox/choices.py:68 +#: netbox/netbox/choices.py:107 msgid "Orange" msgstr "oranžový" -#: extras/choices.py:258 netbox/choices.py:66 netbox/choices.py:108 +#: netbox/extras/choices.py:258 netbox/netbox/choices.py:66 +#: netbox/netbox/choices.py:108 msgid "Yellow" msgstr "Žlutá" -#: extras/choices.py:259 netbox/choices.py:63 netbox/choices.py:109 +#: netbox/extras/choices.py:259 netbox/netbox/choices.py:63 +#: netbox/netbox/choices.py:109 msgid "Green" msgstr "Zelená" -#: extras/choices.py:260 netbox/choices.py:60 netbox/choices.py:110 +#: netbox/extras/choices.py:260 netbox/netbox/choices.py:60 +#: netbox/netbox/choices.py:110 msgid "Teal" msgstr "Šedozelená" -#: extras/choices.py:261 netbox/choices.py:59 netbox/choices.py:111 +#: netbox/extras/choices.py:261 netbox/netbox/choices.py:59 +#: netbox/netbox/choices.py:111 msgid "Cyan" msgstr "Azurová" -#: extras/choices.py:262 netbox/choices.py:112 +#: netbox/extras/choices.py:262 netbox/netbox/choices.py:112 msgid "Gray" msgstr "Šedá" -#: extras/choices.py:263 netbox/choices.py:74 netbox/choices.py:113 +#: netbox/extras/choices.py:263 netbox/netbox/choices.py:74 +#: netbox/netbox/choices.py:113 msgid "Black" msgstr "Černá" -#: extras/choices.py:264 netbox/choices.py:75 netbox/choices.py:114 +#: netbox/extras/choices.py:264 netbox/netbox/choices.py:75 +#: netbox/netbox/choices.py:114 msgid "White" msgstr "Bílá" -#: extras/choices.py:279 extras/forms/model_forms.py:353 -#: extras/forms/model_forms.py:430 templates/extras/webhook.html:10 +#: netbox/extras/choices.py:279 netbox/extras/forms/model_forms.py:353 +#: netbox/extras/forms/model_forms.py:430 +#: netbox/templates/extras/webhook.html:10 msgid "Webhook" msgstr "Webový háček" -#: extras/choices.py:280 extras/forms/model_forms.py:418 -#: templates/extras/script/base.html:29 +#: netbox/extras/choices.py:280 netbox/extras/forms/model_forms.py:418 +#: netbox/templates/extras/script/base.html:29 msgid "Script" msgstr "Skript" -#: extras/choices.py:281 +#: netbox/extras/choices.py:281 msgid "Notification" msgstr "Oznámení" -#: extras/conditions.py:54 +#: netbox/extras/conditions.py:54 #, python-brace-format msgid "Unknown operator: {op}. Must be one of: {operators}" msgstr "Neznámý operátor: {op}. Musí to být jeden z: {operators}" -#: extras/conditions.py:58 +#: netbox/extras/conditions.py:58 #, python-brace-format msgid "Unsupported value type: {value}" msgstr "Nepodporovaný typ hodnoty: {value}" -#: extras/conditions.py:60 +#: netbox/extras/conditions.py:60 #, python-brace-format msgid "Invalid type for {op} operation: {value}" msgstr "Neplatný typ pro {op} Provoz: {value}" -#: extras/conditions.py:137 +#: netbox/extras/conditions.py:137 #, python-brace-format msgid "Ruleset must be a dictionary, not {ruleset}." msgstr "Sada pravidel musí být slovník, ne {ruleset}." -#: extras/conditions.py:142 +#: netbox/extras/conditions.py:142 msgid "Invalid logic type: must be 'AND' or 'OR'. Please check documentation." msgstr "" "Neplatný typ logiky: musí být „AND“ nebo „OR“. Zkontrolujte prosím " "dokumentaci." -#: extras/conditions.py:154 +#: netbox/extras/conditions.py:154 msgid "Incorrect key(s) informed. Please check documentation." msgstr "Nesprávný klíč (klíče) informován. Zkontrolujte prosím dokumentaci." -#: extras/dashboard/forms.py:38 +#: netbox/extras/dashboard/forms.py:38 msgid "Widget type" msgstr "Typ widgetu" -#: extras/dashboard/utils.py:36 +#: netbox/extras/dashboard/utils.py:36 #, python-brace-format msgid "Unregistered widget class: {name}" msgstr "Neregistrovaná třída widgetu: {name}" -#: extras/dashboard/widgets.py:125 +#: netbox/extras/dashboard/widgets.py:125 #, python-brace-format msgid "{class_name} must define a render() method." msgstr "{class_name} musí definovat metodu render ()." -#: extras/dashboard/widgets.py:144 +#: netbox/extras/dashboard/widgets.py:144 msgid "Note" msgstr "Poznámka" -#: extras/dashboard/widgets.py:145 +#: netbox/extras/dashboard/widgets.py:145 msgid "Display some arbitrary custom content. Markdown is supported." msgstr "Zobrazí nějaký libovolný vlastní obsah. Markdown je podporován." -#: extras/dashboard/widgets.py:158 +#: netbox/extras/dashboard/widgets.py:158 msgid "Object Counts" msgstr "Počty objektů" -#: extras/dashboard/widgets.py:159 +#: netbox/extras/dashboard/widgets.py:159 msgid "" "Display a set of NetBox models and the number of objects created for each " "type." msgstr "Zobrazí sadu modelů NetBox a počet objektů vytvořených pro každý typ." -#: extras/dashboard/widgets.py:169 +#: netbox/extras/dashboard/widgets.py:169 msgid "Filters to apply when counting the number of objects" msgstr "Filtry, které se použijí při počítání počtu objektů" -#: extras/dashboard/widgets.py:177 +#: netbox/extras/dashboard/widgets.py:177 msgid "Invalid format. Object filters must be passed as a dictionary." msgstr "Neplatný formát. Objektové filtry musí být předány jako slovník." -#: extras/dashboard/widgets.py:208 +#: netbox/extras/dashboard/widgets.py:208 msgid "Object List" msgstr "Seznam objektů" -#: extras/dashboard/widgets.py:209 +#: netbox/extras/dashboard/widgets.py:209 msgid "Display an arbitrary list of objects." msgstr "Zobrazí libovolný seznam objektů." -#: extras/dashboard/widgets.py:222 +#: netbox/extras/dashboard/widgets.py:222 msgid "The default number of objects to display" msgstr "Výchozí počet objektů k zobrazení" -#: extras/dashboard/widgets.py:234 +#: netbox/extras/dashboard/widgets.py:234 msgid "Invalid format. URL parameters must be passed as a dictionary." msgstr "Neplatný formát. Parametry URL musí být předány jako slovník." -#: extras/dashboard/widgets.py:274 +#: netbox/extras/dashboard/widgets.py:274 msgid "RSS Feed" msgstr "RSS kanál" -#: extras/dashboard/widgets.py:279 +#: netbox/extras/dashboard/widgets.py:279 msgid "Embed an RSS feed from an external website." msgstr "Vložte kanál RSS z externího webu." -#: extras/dashboard/widgets.py:286 +#: netbox/extras/dashboard/widgets.py:286 msgid "Feed URL" msgstr "Adresa URL zdroje" -#: extras/dashboard/widgets.py:291 +#: netbox/extras/dashboard/widgets.py:291 msgid "The maximum number of objects to display" msgstr "Maximální počet objektů, které se mají zobrazit" -#: extras/dashboard/widgets.py:296 +#: netbox/extras/dashboard/widgets.py:296 msgid "How long to stored the cached content (in seconds)" msgstr "Jak dlouho uložit obsah uložený v mezipaměti (v sekundách)" -#: extras/dashboard/widgets.py:348 templates/account/base.html:10 -#: templates/account/bookmarks.html:7 templates/inc/user_menu.html:48 +#: netbox/extras/dashboard/widgets.py:348 +#: netbox/templates/account/base.html:10 +#: netbox/templates/account/bookmarks.html:7 +#: netbox/templates/inc/user_menu.html:48 msgid "Bookmarks" msgstr "Záložky" -#: extras/dashboard/widgets.py:352 +#: netbox/extras/dashboard/widgets.py:352 msgid "Show your personal bookmarks" msgstr "Zobrazit své osobní záložky" -#: extras/events.py:147 +#: netbox/extras/events.py:151 #, python-brace-format msgid "Unknown action type for an event rule: {action_type}" msgstr "Neznámý typ akce pro pravidlo události: {action_type}" -#: extras/events.py:192 +#: netbox/extras/events.py:196 #, python-brace-format msgid "Cannot import events pipeline {name} error: {error}" msgstr "Nelze importovat kanál událostí {name} chyba: {error}" -#: extras/filtersets.py:45 +#: netbox/extras/filtersets.py:45 msgid "Script module (ID)" msgstr "Skriptový modul (ID)" -#: extras/filtersets.py:254 extras/filtersets.py:637 extras/filtersets.py:665 +#: netbox/extras/filtersets.py:254 netbox/extras/filtersets.py:637 +#: netbox/extras/filtersets.py:665 msgid "Data file (ID)" msgstr "Datový soubor (ID)" -#: extras/filtersets.py:370 users/filtersets.py:68 users/filtersets.py:191 +#: netbox/extras/filtersets.py:370 netbox/users/filtersets.py:68 +#: netbox/users/filtersets.py:191 msgid "Group (name)" msgstr "Skupina (název)" -#: extras/filtersets.py:574 virtualization/forms/filtersets.py:118 +#: netbox/extras/filtersets.py:574 +#: netbox/virtualization/forms/filtersets.py:118 msgid "Cluster type" msgstr "Typ clusteru" -#: extras/filtersets.py:580 virtualization/filtersets.py:95 -#: virtualization/filtersets.py:147 +#: netbox/extras/filtersets.py:580 netbox/virtualization/filtersets.py:95 +#: netbox/virtualization/filtersets.py:147 msgid "Cluster type (slug)" msgstr "Typ klastru (slug)" -#: extras/filtersets.py:601 tenancy/forms/forms.py:16 -#: tenancy/forms/forms.py:39 +#: netbox/extras/filtersets.py:601 netbox/tenancy/forms/forms.py:16 +#: netbox/tenancy/forms/forms.py:39 msgid "Tenant group" msgstr "Skupina nájemců" -#: extras/filtersets.py:607 tenancy/filtersets.py:188 -#: tenancy/filtersets.py:208 +#: netbox/extras/filtersets.py:607 netbox/tenancy/filtersets.py:188 +#: netbox/tenancy/filtersets.py:208 msgid "Tenant group (slug)" msgstr "Skupina nájemců (slug)" -#: extras/filtersets.py:623 extras/forms/model_forms.py:495 -#: templates/extras/tag.html:11 +#: netbox/extras/filtersets.py:623 netbox/extras/forms/model_forms.py:495 +#: netbox/templates/extras/tag.html:11 msgid "Tag" msgstr "Značka" -#: extras/filtersets.py:629 +#: netbox/extras/filtersets.py:629 msgid "Tag (slug)" msgstr "Štítek (slug)" -#: extras/filtersets.py:689 extras/forms/filtersets.py:429 +#: netbox/extras/filtersets.py:689 netbox/extras/forms/filtersets.py:429 msgid "Has local config context data" msgstr "Má místní kontextová data konfigurace" -#: extras/forms/bulk_edit.py:35 extras/forms/filtersets.py:60 +#: netbox/extras/forms/bulk_edit.py:35 netbox/extras/forms/filtersets.py:60 msgid "Group name" msgstr "Název skupiny" -#: extras/forms/bulk_edit.py:43 extras/forms/filtersets.py:68 -#: extras/tables/tables.py:65 templates/extras/customfield.html:38 -#: templates/generic/bulk_import.html:118 +#: netbox/extras/forms/bulk_edit.py:43 netbox/extras/forms/filtersets.py:68 +#: 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" -#: extras/forms/bulk_edit.py:48 extras/forms/filtersets.py:75 +#: netbox/extras/forms/bulk_edit.py:48 netbox/extras/forms/filtersets.py:75 msgid "Must be unique" msgstr "Musí být jedinečný" -#: extras/forms/bulk_edit.py:61 extras/forms/bulk_import.py:60 -#: extras/forms/filtersets.py:89 extras/models/customfields.py:209 +#: netbox/extras/forms/bulk_edit.py:61 netbox/extras/forms/bulk_import.py:60 +#: netbox/extras/forms/filtersets.py:89 +#: netbox/extras/models/customfields.py:209 msgid "UI visible" msgstr "Uživatelské rozhraní viditelné" -#: extras/forms/bulk_edit.py:66 extras/forms/bulk_import.py:66 -#: extras/forms/filtersets.py:94 extras/models/customfields.py:216 +#: netbox/extras/forms/bulk_edit.py:66 netbox/extras/forms/bulk_import.py:66 +#: netbox/extras/forms/filtersets.py:94 +#: netbox/extras/models/customfields.py:216 msgid "UI editable" msgstr "Upravitelné uživatelské rozhraní" -#: extras/forms/bulk_edit.py:71 extras/forms/filtersets.py:97 +#: netbox/extras/forms/bulk_edit.py:71 netbox/extras/forms/filtersets.py:97 msgid "Is cloneable" msgstr "Je klonovatelný" -#: extras/forms/bulk_edit.py:76 extras/forms/filtersets.py:104 +#: netbox/extras/forms/bulk_edit.py:76 netbox/extras/forms/filtersets.py:104 msgid "Minimum value" msgstr "Minimální hodnota" -#: extras/forms/bulk_edit.py:80 extras/forms/filtersets.py:108 +#: netbox/extras/forms/bulk_edit.py:80 netbox/extras/forms/filtersets.py:108 msgid "Maximum value" msgstr "Maximální hodnota" -#: extras/forms/bulk_edit.py:84 extras/forms/filtersets.py:112 +#: netbox/extras/forms/bulk_edit.py:84 netbox/extras/forms/filtersets.py:112 msgid "Validation regex" msgstr "Ověření regex" -#: extras/forms/bulk_edit.py:91 extras/forms/filtersets.py:46 -#: extras/forms/model_forms.py:76 templates/extras/customfield.html:70 +#: netbox/extras/forms/bulk_edit.py:91 netbox/extras/forms/filtersets.py:46 +#: netbox/extras/forms/model_forms.py:76 +#: netbox/templates/extras/customfield.html:70 msgid "Behavior" msgstr "Chování" -#: extras/forms/bulk_edit.py:128 extras/forms/filtersets.py:149 +#: netbox/extras/forms/bulk_edit.py:128 netbox/extras/forms/filtersets.py:149 msgid "New window" msgstr "Nové okno" -#: extras/forms/bulk_edit.py:137 +#: netbox/extras/forms/bulk_edit.py:137 msgid "Button class" msgstr "Třída tlačítek" -#: extras/forms/bulk_edit.py:154 extras/forms/filtersets.py:187 -#: extras/models/models.py:409 +#: netbox/extras/forms/bulk_edit.py:154 netbox/extras/forms/filtersets.py:187 +#: netbox/extras/models/models.py:409 msgid "MIME type" msgstr "Typ MIME" -#: extras/forms/bulk_edit.py:159 extras/forms/filtersets.py:190 +#: netbox/extras/forms/bulk_edit.py:159 netbox/extras/forms/filtersets.py:190 msgid "File extension" msgstr "přípona souboru" -#: extras/forms/bulk_edit.py:164 extras/forms/filtersets.py:194 +#: netbox/extras/forms/bulk_edit.py:164 netbox/extras/forms/filtersets.py:194 msgid "As attachment" msgstr "Jako příloha" -#: extras/forms/bulk_edit.py:192 extras/forms/filtersets.py:236 -#: extras/tables/tables.py:256 templates/extras/savedfilter.html:29 +#: netbox/extras/forms/bulk_edit.py:192 netbox/extras/forms/filtersets.py:236 +#: netbox/extras/tables/tables.py:256 +#: netbox/templates/extras/savedfilter.html:29 msgid "Shared" msgstr "Sdílené" -#: extras/forms/bulk_edit.py:215 extras/forms/filtersets.py:265 -#: extras/models/models.py:174 +#: netbox/extras/forms/bulk_edit.py:215 netbox/extras/forms/filtersets.py:265 +#: netbox/extras/models/models.py:174 msgid "HTTP method" msgstr "Metoda HTTP" -#: extras/forms/bulk_edit.py:219 extras/forms/filtersets.py:259 -#: templates/extras/webhook.html:30 +#: netbox/extras/forms/bulk_edit.py:219 netbox/extras/forms/filtersets.py:259 +#: netbox/templates/extras/webhook.html:30 msgid "Payload URL" msgstr "Adresa URL užitečného zatížení" -#: extras/forms/bulk_edit.py:224 extras/models/models.py:214 +#: netbox/extras/forms/bulk_edit.py:224 netbox/extras/models/models.py:214 msgid "SSL verification" msgstr "Ověření SSL" -#: extras/forms/bulk_edit.py:227 templates/extras/webhook.html:38 +#: netbox/extras/forms/bulk_edit.py:227 +#: netbox/templates/extras/webhook.html:38 msgid "Secret" msgstr "Tajemství" -#: extras/forms/bulk_edit.py:232 +#: netbox/extras/forms/bulk_edit.py:232 msgid "CA file path" msgstr "Cesta k souboru CA" -#: extras/forms/bulk_edit.py:253 extras/forms/bulk_import.py:192 -#: extras/forms/model_forms.py:377 +#: netbox/extras/forms/bulk_edit.py:253 netbox/extras/forms/bulk_import.py:192 +#: netbox/extras/forms/model_forms.py:377 msgid "Event types" msgstr "Typy událostí" -#: extras/forms/bulk_edit.py:293 +#: netbox/extras/forms/bulk_edit.py:293 msgid "Is active" msgstr "Je aktivní" -#: extras/forms/bulk_import.py:37 extras/forms/bulk_import.py:118 -#: extras/forms/bulk_import.py:139 extras/forms/bulk_import.py:162 -#: extras/forms/bulk_import.py:186 extras/forms/filtersets.py:137 -#: extras/forms/filtersets.py:224 extras/forms/model_forms.py:47 -#: extras/forms/model_forms.py:205 extras/forms/model_forms.py:237 -#: extras/forms/model_forms.py:278 extras/forms/model_forms.py:372 -#: extras/forms/model_forms.py:489 users/forms/model_forms.py:276 +#: netbox/extras/forms/bulk_import.py:37 +#: netbox/extras/forms/bulk_import.py:118 +#: 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/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/users/forms/model_forms.py:276 msgid "Object types" msgstr "Typy objektů" -#: extras/forms/bulk_import.py:39 extras/forms/bulk_import.py:120 -#: extras/forms/bulk_import.py:141 extras/forms/bulk_import.py:164 -#: extras/forms/bulk_import.py:188 tenancy/forms/bulk_import.py:96 +#: netbox/extras/forms/bulk_import.py:39 +#: netbox/extras/forms/bulk_import.py:120 +#: netbox/extras/forms/bulk_import.py:141 +#: netbox/extras/forms/bulk_import.py:164 +#: netbox/extras/forms/bulk_import.py:188 +#: netbox/tenancy/forms/bulk_import.py:96 msgid "One or more assigned object types" msgstr "Jeden nebo více přiřazených typů objektů" -#: extras/forms/bulk_import.py:44 +#: netbox/extras/forms/bulk_import.py:44 msgid "Field data type (e.g. text, integer, etc.)" msgstr "Datový typ pole (např. text, celé číslo atd.)" -#: extras/forms/bulk_import.py:47 extras/forms/filtersets.py:208 -#: extras/forms/filtersets.py:281 extras/forms/model_forms.py:304 -#: extras/forms/model_forms.py:341 tenancy/forms/filtersets.py:92 +#: 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/tenancy/forms/filtersets.py:92 msgid "Object type" msgstr "Typ objektu" -#: extras/forms/bulk_import.py:50 +#: netbox/extras/forms/bulk_import.py:50 msgid "Object type (for object or multi-object fields)" msgstr "Typ objektu (pro pole objektu nebo více objektů)" -#: extras/forms/bulk_import.py:53 extras/forms/filtersets.py:84 +#: netbox/extras/forms/bulk_import.py:53 netbox/extras/forms/filtersets.py:84 msgid "Choice set" msgstr "Sada na výběr" -#: extras/forms/bulk_import.py:57 +#: netbox/extras/forms/bulk_import.py:57 msgid "Choice set (for selection fields)" msgstr "Sada možností (pro výběrová pole)" -#: extras/forms/bulk_import.py:63 +#: netbox/extras/forms/bulk_import.py:63 msgid "Whether the custom field is displayed in the UI" msgstr "Zda je uživatelské pole zobrazeno v uživatelském rozhraní" -#: extras/forms/bulk_import.py:69 +#: netbox/extras/forms/bulk_import.py:69 msgid "Whether the custom field is editable in the UI" msgstr "Zda je vlastní pole upravitelné v uživatelském rozhraní" -#: extras/forms/bulk_import.py:85 +#: netbox/extras/forms/bulk_import.py:85 msgid "The base set of predefined choices to use (if any)" msgstr "Základní sada předdefinovaných možností k použití (pokud existují)" -#: extras/forms/bulk_import.py:91 +#: netbox/extras/forms/bulk_import.py:91 msgid "" "Quoted string of comma-separated field choices with optional labels " "separated by colon: \"choice1:First Choice,choice2:Second Choice\"" @@ -7162,183 +7725,199 @@ msgstr "" "Uváděný řetězec možností polí oddělených čárkami s volitelnými popisky " "oddělenými dvojtečkou: „výběr:1: první volba, výběra2:druhá volba“" -#: extras/forms/bulk_import.py:123 extras/models/models.py:323 +#: netbox/extras/forms/bulk_import.py:123 netbox/extras/models/models.py:323 msgid "button class" msgstr "třída tlačítek" -#: extras/forms/bulk_import.py:126 extras/models/models.py:327 +#: netbox/extras/forms/bulk_import.py:126 netbox/extras/models/models.py:327 msgid "" "The class of the first link in a group will be used for the dropdown button" msgstr "Třída prvního odkazu ve skupině bude použita pro rozevírací tlačítko" -#: extras/forms/bulk_import.py:193 +#: netbox/extras/forms/bulk_import.py:193 msgid "The event type(s) which will trigger this rule" msgstr "Typ (y) události, které spustí toto pravidlo" -#: extras/forms/bulk_import.py:196 +#: netbox/extras/forms/bulk_import.py:196 msgid "Action object" msgstr "Akční objekt" -#: extras/forms/bulk_import.py:198 +#: netbox/extras/forms/bulk_import.py:198 msgid "Webhook name or script as dotted path module.Class" msgstr "Název nebo skript Webhooku jako tečkovaná cesta module.Class" -#: extras/forms/bulk_import.py:219 +#: netbox/extras/forms/bulk_import.py:219 #, python-brace-format msgid "Webhook {name} not found" msgstr "Webový háček {name} nenalezeno" -#: extras/forms/bulk_import.py:228 +#: netbox/extras/forms/bulk_import.py:228 #, python-brace-format msgid "Script {name} not found" msgstr "Skript {name} nenalezeno" -#: extras/forms/bulk_import.py:244 +#: netbox/extras/forms/bulk_import.py:244 msgid "Assigned object type" msgstr "Typ přiřazeného objektu" -#: extras/forms/bulk_import.py:249 +#: netbox/extras/forms/bulk_import.py:249 msgid "The classification of entry" msgstr "Klasifikace vstupu" -#: extras/forms/bulk_import.py:261 extras/forms/model_forms.py:320 -#: netbox/navigation/menu.py:390 templates/extras/notificationgroup.html:41 -#: templates/users/group.html:29 users/forms/model_forms.py:236 -#: users/forms/model_forms.py:248 users/forms/model_forms.py:300 -#: users/tables.py:102 +#: netbox/extras/forms/bulk_import.py:261 +#: netbox/extras/forms/model_forms.py:320 netbox/netbox/navigation/menu.py:390 +#: 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 +#: netbox/users/tables.py:102 msgid "Users" msgstr "Uživatelé" -#: extras/forms/bulk_import.py:265 +#: netbox/extras/forms/bulk_import.py:265 msgid "User names separated by commas, encased with double quotes" msgstr "Uživatelská jména oddělená čárkami, uzavřená dvojitými uvozovkami" -#: extras/forms/bulk_import.py:268 extras/forms/model_forms.py:315 -#: netbox/navigation/menu.py:410 templates/extras/notificationgroup.html:31 -#: users/forms/model_forms.py:181 users/forms/model_forms.py:193 -#: users/forms/model_forms.py:305 users/tables.py:35 users/tables.py:106 +#: netbox/extras/forms/bulk_import.py:268 +#: netbox/extras/forms/model_forms.py:315 netbox/netbox/navigation/menu.py:410 +#: 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 +#: netbox/users/tables.py:106 msgid "Groups" msgstr "Skupiny" -#: extras/forms/bulk_import.py:272 +#: netbox/extras/forms/bulk_import.py:272 msgid "Group names separated by commas, encased with double quotes" msgstr "Názvy skupin oddělené čárkami, uzavřené dvojitými uvozovkami" -#: extras/forms/filtersets.py:52 extras/forms/model_forms.py:56 +#: netbox/extras/forms/filtersets.py:52 netbox/extras/forms/model_forms.py:56 msgid "Related object type" msgstr "Typ souvisejícího objektu" -#: extras/forms/filtersets.py:57 +#: netbox/extras/forms/filtersets.py:57 msgid "Field type" msgstr "Typ pole" -#: extras/forms/filtersets.py:120 extras/forms/model_forms.py:157 -#: extras/tables/tables.py:91 templates/generic/bulk_import.html:154 +#: netbox/extras/forms/filtersets.py:120 +#: 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" -#: extras/forms/filtersets.py:164 extras/forms/filtersets.py:319 -#: extras/forms/filtersets.py:408 extras/forms/model_forms.py:572 -#: templates/core/job.html:96 templates/extras/eventrule.html:84 +#: 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/templates/extras/eventrule.html:84 msgid "Data" msgstr "Údaje" -#: extras/forms/filtersets.py:175 extras/forms/filtersets.py:333 -#: extras/forms/filtersets.py:418 netbox/choices.py:130 -#: utilities/forms/bulk_import.py:26 +#: netbox/extras/forms/filtersets.py:175 netbox/extras/forms/filtersets.py:333 +#: netbox/extras/forms/filtersets.py:418 netbox/netbox/choices.py:130 +#: netbox/utilities/forms/bulk_import.py:26 msgid "Data file" msgstr "Datový soubor" -#: extras/forms/filtersets.py:183 +#: netbox/extras/forms/filtersets.py:183 msgid "Content types" msgstr "Typy obsahu" -#: extras/forms/filtersets.py:255 extras/models/models.py:179 +#: netbox/extras/forms/filtersets.py:255 netbox/extras/models/models.py:179 msgid "HTTP content type" msgstr "Typ obsahu HTTP" -#: extras/forms/filtersets.py:286 +#: netbox/extras/forms/filtersets.py:286 msgid "Event type" msgstr "Typ události" -#: extras/forms/filtersets.py:291 +#: netbox/extras/forms/filtersets.py:291 msgid "Action type" msgstr "Typ akce" -#: extras/forms/filtersets.py:307 +#: netbox/extras/forms/filtersets.py:307 msgid "Tagged object type" msgstr "Typ označeného objektu" -#: extras/forms/filtersets.py:312 +#: netbox/extras/forms/filtersets.py:312 msgid "Allowed object type" msgstr "Povolený typ objektu" -#: extras/forms/filtersets.py:341 extras/forms/model_forms.py:507 -#: netbox/navigation/menu.py:18 +#: netbox/extras/forms/filtersets.py:341 +#: netbox/extras/forms/model_forms.py:507 netbox/netbox/navigation/menu.py:18 msgid "Regions" msgstr "Regiony" -#: extras/forms/filtersets.py:346 extras/forms/model_forms.py:512 +#: netbox/extras/forms/filtersets.py:346 +#: netbox/extras/forms/model_forms.py:512 msgid "Site groups" msgstr "Skupiny webů" -#: extras/forms/filtersets.py:356 extras/forms/model_forms.py:522 -#: netbox/navigation/menu.py:20 templates/dcim/site.html:127 +#: netbox/extras/forms/filtersets.py:356 +#: netbox/extras/forms/model_forms.py:522 netbox/netbox/navigation/menu.py:20 +#: netbox/templates/dcim/site.html:127 msgid "Locations" msgstr "Lokality" -#: extras/forms/filtersets.py:361 extras/forms/model_forms.py:527 +#: netbox/extras/forms/filtersets.py:361 +#: netbox/extras/forms/model_forms.py:527 msgid "Device types" msgstr "Typy zařízení" -#: extras/forms/filtersets.py:366 extras/forms/model_forms.py:532 +#: netbox/extras/forms/filtersets.py:366 +#: netbox/extras/forms/model_forms.py:532 msgid "Roles" msgstr "Role" -#: extras/forms/filtersets.py:376 extras/forms/model_forms.py:542 +#: netbox/extras/forms/filtersets.py:376 +#: netbox/extras/forms/model_forms.py:542 msgid "Cluster types" msgstr "Typy klastrů" -#: extras/forms/filtersets.py:381 extras/forms/model_forms.py:547 +#: netbox/extras/forms/filtersets.py:381 +#: netbox/extras/forms/model_forms.py:547 msgid "Cluster groups" msgstr "Skupiny klastrů" -#: extras/forms/filtersets.py:386 extras/forms/model_forms.py:552 -#: netbox/navigation/menu.py:255 netbox/navigation/menu.py:257 -#: templates/virtualization/clustertype.html:30 -#: virtualization/tables/clusters.py:23 virtualization/tables/clusters.py:45 +#: 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/templates/virtualization/clustertype.html:30 +#: netbox/virtualization/tables/clusters.py:23 +#: netbox/virtualization/tables/clusters.py:45 msgid "Clusters" msgstr "Klastry" -#: extras/forms/filtersets.py:391 extras/forms/model_forms.py:557 +#: netbox/extras/forms/filtersets.py:391 +#: netbox/extras/forms/model_forms.py:557 msgid "Tenant groups" msgstr "Skupiny nájemců" -#: extras/forms/model_forms.py:49 +#: netbox/extras/forms/model_forms.py:49 msgid "The type(s) of object that have this custom field" msgstr "Typ (y) objektu, který má toto vlastní pole" -#: extras/forms/model_forms.py:52 +#: netbox/extras/forms/model_forms.py:52 msgid "Default value" msgstr "Výchozí hodnota" -#: extras/forms/model_forms.py:58 +#: netbox/extras/forms/model_forms.py:58 msgid "Type of the related object (for object/multi-object fields only)" msgstr "Typ souvisejícího objektu (pouze pro pole objektu/více objektů)" -#: extras/forms/model_forms.py:61 templates/extras/customfield.html:60 +#: netbox/extras/forms/model_forms.py:61 +#: netbox/templates/extras/customfield.html:60 msgid "Related object filter" msgstr "Související filtr objektů" -#: extras/forms/model_forms.py:63 +#: netbox/extras/forms/model_forms.py:63 msgid "Specify query parameters as a JSON object." msgstr "Zadejte parametry dotazu jako objekt JSON." -#: extras/forms/model_forms.py:73 templates/extras/customfield.html:10 +#: netbox/extras/forms/model_forms.py:73 +#: netbox/templates/extras/customfield.html:10 msgid "Custom Field" msgstr "Vlastní pole" -#: extras/forms/model_forms.py:85 +#: netbox/extras/forms/model_forms.py:85 msgid "" "The type of data stored in this field. For object/multi-object fields, " "select the related object type below." @@ -7346,18 +7925,18 @@ msgstr "" "Typ dat uložených v tomto poli. U polí objekt/více objektů vyberte níže " "související typ objektu." -#: extras/forms/model_forms.py:88 +#: netbox/extras/forms/model_forms.py:88 msgid "" "This will be displayed as help text for the form field. Markdown is " "supported." msgstr "" "Zobrazí se jako text nápovědy pro pole formuláře. Je podporován markdown." -#: extras/forms/model_forms.py:143 +#: netbox/extras/forms/model_forms.py:143 msgid "Related Object" msgstr "Související objekt" -#: extras/forms/model_forms.py:169 +#: netbox/extras/forms/model_forms.py:169 msgid "" "Enter one choice per line. An optional label may be specified for each " "choice by appending it with a colon. Example:" @@ -7365,15 +7944,16 @@ msgstr "" "Zadejte jednu volbu na řádek. Pro každou volbu lze zadat volitelný popisek " "přidáním dvojtečky. Příklad:" -#: extras/forms/model_forms.py:212 templates/extras/customlink.html:10 +#: netbox/extras/forms/model_forms.py:212 +#: netbox/templates/extras/customlink.html:10 msgid "Custom Link" msgstr "Vlastní odkaz" -#: extras/forms/model_forms.py:214 +#: netbox/extras/forms/model_forms.py:214 msgid "Templates" msgstr "Šablony" -#: extras/forms/model_forms.py:226 +#: netbox/extras/forms/model_forms.py:226 #, python-brace-format msgid "" "Jinja2 template code for the link text. Reference the object as {example}. " @@ -7382,7 +7962,7 @@ msgstr "" "Kód šablony Jinja2 pro text odkazu. Referovat na objekt jako {example}. " "Odkazy, které se vykreslují jako prázdný text, se nezobrazí." -#: extras/forms/model_forms.py:230 +#: netbox/extras/forms/model_forms.py:230 #, python-brace-format msgid "" "Jinja2 template code for the link URL. Reference the object as {example}." @@ -7390,52 +7970,58 @@ msgstr "" "Kód šablony Jinja2 pro adresu URL odkazu. Referovat na objekt jako " "{example}." -#: extras/forms/model_forms.py:241 extras/forms/model_forms.py:624 +#: netbox/extras/forms/model_forms.py:241 +#: netbox/extras/forms/model_forms.py:624 msgid "Template code" msgstr "Kód šablony" -#: extras/forms/model_forms.py:247 templates/extras/exporttemplate.html:12 +#: netbox/extras/forms/model_forms.py:247 +#: netbox/templates/extras/exporttemplate.html:12 msgid "Export Template" msgstr "Šablona exportu" -#: extras/forms/model_forms.py:249 +#: netbox/extras/forms/model_forms.py:249 msgid "Rendering" msgstr "Vykreslování" -#: extras/forms/model_forms.py:263 extras/forms/model_forms.py:649 +#: netbox/extras/forms/model_forms.py:263 +#: netbox/extras/forms/model_forms.py:649 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." -#: extras/forms/model_forms.py:270 extras/forms/model_forms.py:656 +#: netbox/extras/forms/model_forms.py:270 +#: netbox/extras/forms/model_forms.py:656 msgid "Must specify either local content or a data file" msgstr "Musí zadat místní obsah nebo datový soubor" -#: extras/forms/model_forms.py:284 netbox/forms/mixins.py:70 -#: templates/extras/savedfilter.html:10 +#: netbox/extras/forms/model_forms.py:284 netbox/netbox/forms/mixins.py:70 +#: netbox/templates/extras/savedfilter.html:10 msgid "Saved Filter" msgstr "Uložený filtr" -#: extras/forms/model_forms.py:334 +#: netbox/extras/forms/model_forms.py:334 msgid "A notification group specify at least one user or group." msgstr "Skupina oznámení určuje alespoň jednoho uživatele nebo skupinu." -#: extras/forms/model_forms.py:356 templates/extras/webhook.html:23 +#: netbox/extras/forms/model_forms.py:356 +#: netbox/templates/extras/webhook.html:23 msgid "HTTP Request" msgstr "HTTP požadavek" -#: extras/forms/model_forms.py:358 templates/extras/webhook.html:44 +#: netbox/extras/forms/model_forms.py:358 +#: netbox/templates/extras/webhook.html:44 msgid "SSL" msgstr "SSL" -#: extras/forms/model_forms.py:380 +#: netbox/extras/forms/model_forms.py:380 msgid "Action choice" msgstr "Volba akce" -#: extras/forms/model_forms.py:385 +#: netbox/extras/forms/model_forms.py:385 msgid "Enter conditions in JSON format." msgstr "Zadejte podmínky do JSON Formát." -#: extras/forms/model_forms.py:389 +#: netbox/extras/forms/model_forms.py:389 msgid "" "Enter parameters to pass to the action in JSON format." @@ -7443,109 +8029,111 @@ msgstr "" "Zadejte parametry, které chcete předat akci v JSON Formát." -#: extras/forms/model_forms.py:394 templates/extras/eventrule.html:10 +#: netbox/extras/forms/model_forms.py:394 +#: netbox/templates/extras/eventrule.html:10 msgid "Event Rule" msgstr "Pravidlo události" -#: extras/forms/model_forms.py:395 +#: netbox/extras/forms/model_forms.py:395 msgid "Triggers" msgstr "Spouštěče" -#: extras/forms/model_forms.py:442 +#: netbox/extras/forms/model_forms.py:442 msgid "Notification group" msgstr "Skupina oznámení" -#: extras/forms/model_forms.py:562 netbox/navigation/menu.py:26 -#: tenancy/tables/tenants.py:22 +#: netbox/extras/forms/model_forms.py:562 netbox/netbox/navigation/menu.py:26 +#: netbox/tenancy/tables/tenants.py:22 msgid "Tenants" msgstr "Nájemci" -#: extras/forms/model_forms.py:606 +#: netbox/extras/forms/model_forms.py:606 msgid "Data is populated from the remote source selected below." msgstr "Data jsou vyplněna ze vzdáleného zdroje vybraného níže." -#: extras/forms/model_forms.py:612 +#: netbox/extras/forms/model_forms.py:612 msgid "Must specify either local data or a data file" msgstr "Musí zadat buď lokální data nebo datový soubor" -#: extras/forms/model_forms.py:631 templates/core/datafile.html:55 +#: netbox/extras/forms/model_forms.py:631 +#: netbox/templates/core/datafile.html:55 msgid "Content" msgstr "Obsah" -#: extras/forms/reports.py:17 extras/forms/scripts.py:23 +#: netbox/extras/forms/reports.py:17 netbox/extras/forms/scripts.py:23 msgid "Schedule at" msgstr "Plán na" -#: extras/forms/reports.py:18 +#: netbox/extras/forms/reports.py:18 msgid "Schedule execution of report to a set time" msgstr "Naplánujte spuštění sestavy na nastavený čas" -#: extras/forms/reports.py:23 extras/forms/scripts.py:29 +#: netbox/extras/forms/reports.py:23 netbox/extras/forms/scripts.py:29 msgid "Recurs every" msgstr "Opakuje se každý" -#: extras/forms/reports.py:27 +#: netbox/extras/forms/reports.py:27 msgid "Interval at which this report is re-run (in minutes)" msgstr "Interval, ve kterém je tato zpráva znovu spuštěna (v minutách)" -#: extras/forms/reports.py:35 extras/forms/scripts.py:41 +#: netbox/extras/forms/reports.py:35 netbox/extras/forms/scripts.py:41 #, python-brace-format msgid " (current time: {now})" msgstr " (aktuální čas: {now})" -#: extras/forms/reports.py:45 extras/forms/scripts.py:51 +#: netbox/extras/forms/reports.py:45 netbox/extras/forms/scripts.py:51 msgid "Scheduled time must be in the future." msgstr "Naplánovaný čas musí být v budoucnu." -#: extras/forms/scripts.py:17 +#: netbox/extras/forms/scripts.py:17 msgid "Commit changes" msgstr "Odevzdat změny" -#: extras/forms/scripts.py:18 +#: netbox/extras/forms/scripts.py:18 msgid "Commit changes to the database (uncheck for a dry-run)" msgstr "Odevzdat změny do databáze (zrušte zaškrtnutí u suchého spuštění)" -#: extras/forms/scripts.py:24 +#: netbox/extras/forms/scripts.py:24 msgid "Schedule execution of script to a set time" msgstr "Naplánujte spuštění skriptu na nastavený čas" -#: extras/forms/scripts.py:33 +#: netbox/extras/forms/scripts.py:33 msgid "Interval at which this script is re-run (in minutes)" msgstr "Interval, ve kterém je tento skript znovu spuštěn (v minutách)" -#: extras/jobs.py:49 +#: netbox/extras/jobs.py:47 msgid "Database changes have been reverted automatically." msgstr "Změny v databázi byly automaticky vráceny." -#: extras/jobs.py:55 +#: netbox/extras/jobs.py:53 msgid "Script aborted with error: " msgstr "Skript byl přerušen s chybou: " -#: extras/jobs.py:65 +#: netbox/extras/jobs.py:63 msgid "An exception occurred: " msgstr "Došlo k výjimce: " -#: extras/jobs.py:70 +#: netbox/extras/jobs.py:68 msgid "Database changes have been reverted due to error." msgstr "Změny databáze byly vráceny kvůli chybě." -#: extras/management/commands/reindex.py:66 +#: netbox/extras/management/commands/reindex.py:66 msgid "No indexers found!" msgstr "Nebyly nalezeny žádné indexátory!" -#: extras/models/configs.py:130 +#: netbox/extras/models/configs.py:130 msgid "config context" msgstr "kontext konfigurace" -#: extras/models/configs.py:131 +#: netbox/extras/models/configs.py:131 msgid "config contexts" msgstr "kontexty konfigurace" -#: extras/models/configs.py:149 extras/models/configs.py:205 +#: netbox/extras/models/configs.py:149 netbox/extras/models/configs.py:205 msgid "JSON data must be in object form. Example:" msgstr "Data JSON musí být ve formě objektu. Příklad:" -#: extras/models/configs.py:169 +#: netbox/extras/models/configs.py:169 msgid "" "Local config context data takes precedence over source contexts in the final" " rendered config context" @@ -7553,19 +8141,19 @@ msgstr "" "Lokální kontextová data konfigurace mají přednost před zdrojovými kontexty v" " konečném rendrovaném kontextu konfigurace" -#: extras/models/configs.py:224 +#: netbox/extras/models/configs.py:224 msgid "template code" msgstr "kód šablony" -#: extras/models/configs.py:225 +#: netbox/extras/models/configs.py:225 msgid "Jinja2 template code." msgstr "Kód šablony Jinja2." -#: extras/models/configs.py:228 +#: netbox/extras/models/configs.py:228 msgid "environment parameters" msgstr "parametry prostředí" -#: extras/models/configs.py:233 +#: netbox/extras/models/configs.py:233 msgid "" "Any additional" @@ -7575,39 +8163,39 @@ msgstr "" "href=\"https://jinja.palletsprojects.com/en/3.1.x/api/#jinja2.Environment\">další" " parametry projít při konstrukci prostředí Jinja2." -#: extras/models/configs.py:240 +#: netbox/extras/models/configs.py:240 msgid "config template" msgstr "šablona konfigurace" -#: extras/models/configs.py:241 +#: netbox/extras/models/configs.py:241 msgid "config templates" msgstr "konfigurační šablony" -#: extras/models/customfields.py:75 +#: netbox/extras/models/customfields.py:75 msgid "The object(s) to which this field applies." msgstr "Objekt (objekty), na které se toto pole vztahuje." -#: extras/models/customfields.py:82 +#: netbox/extras/models/customfields.py:82 msgid "The type of data this custom field holds" msgstr "Typ dat obsažených v tomto uživatelském poli" -#: extras/models/customfields.py:89 +#: netbox/extras/models/customfields.py:89 msgid "The type of NetBox object this field maps to (for object fields)" msgstr "Typ objektu NetBox, na který se toto pole mapuje (pro objektová pole)" -#: extras/models/customfields.py:95 +#: netbox/extras/models/customfields.py:95 msgid "Internal field name" msgstr "Název interního pole" -#: extras/models/customfields.py:99 +#: netbox/extras/models/customfields.py:99 msgid "Only alphanumeric characters and underscores are allowed." msgstr "Povoleny jsou pouze alfanumerické znaky a podtržítka." -#: extras/models/customfields.py:104 +#: netbox/extras/models/customfields.py:104 msgid "Double underscores are not permitted in custom field names." msgstr "Dvojité podtržítko není povoleno v názvech vlastních polí." -#: extras/models/customfields.py:115 +#: netbox/extras/models/customfields.py:115 msgid "" "Name of the field as displayed to users (if not provided, 'the field's name " "will be used)" @@ -7615,19 +8203,19 @@ msgstr "" "Název pole zobrazeného uživatelům (pokud není uvedeno, použije se název " "pole)" -#: extras/models/customfields.py:119 extras/models/models.py:317 +#: netbox/extras/models/customfields.py:119 netbox/extras/models/models.py:317 msgid "group name" msgstr "název skupiny" -#: extras/models/customfields.py:122 +#: netbox/extras/models/customfields.py:122 msgid "Custom fields within the same group will be displayed together" msgstr "Vlastní pole ve stejné skupině se zobrazí společně" -#: extras/models/customfields.py:130 +#: netbox/extras/models/customfields.py:130 msgid "required" msgstr "požadované" -#: extras/models/customfields.py:132 +#: netbox/extras/models/customfields.py:132 msgid "" "This field is required when creating new objects or editing an existing " "object." @@ -7635,19 +8223,19 @@ msgstr "" "Toto pole je povinné při vytváření nových objektů nebo při úpravách " "existujícího objektu." -#: extras/models/customfields.py:135 +#: netbox/extras/models/customfields.py:135 msgid "must be unique" msgstr "Musí být unikátní" -#: extras/models/customfields.py:137 +#: netbox/extras/models/customfields.py:137 msgid "The value of this field must be unique for the assigned object" msgstr "Hodnota tohoto pole musí být jedinečná pro přiřazený objekt" -#: extras/models/customfields.py:140 +#: netbox/extras/models/customfields.py:140 msgid "search weight" msgstr "hmotnost vyhledávání" -#: extras/models/customfields.py:143 +#: netbox/extras/models/customfields.py:143 msgid "" "Weighting for search. Lower values are considered more important. Fields " "with a search weight of zero will be ignored." @@ -7655,11 +8243,11 @@ msgstr "" "Vážení pro vyhledávání. Nižší hodnoty jsou považovány za důležitější. Pole s" " váhou vyhledávání nula budou ignorována." -#: extras/models/customfields.py:148 +#: netbox/extras/models/customfields.py:148 msgid "filter logic" msgstr "filtrační logika" -#: extras/models/customfields.py:152 +#: netbox/extras/models/customfields.py:152 msgid "" "Loose matches any instance of a given string; exact matches the entire " "field." @@ -7667,11 +8255,11 @@ msgstr "" "Loose odpovídá libovolné instanci daného řetězce; přesně odpovídá celému " "poli." -#: extras/models/customfields.py:155 +#: netbox/extras/models/customfields.py:155 msgid "default" msgstr "selhání" -#: extras/models/customfields.py:159 +#: netbox/extras/models/customfields.py:159 msgid "" "Default value for the field (must be a JSON value). Encapsulate strings with" " double quotes (e.g. \"Foo\")." @@ -7679,7 +8267,7 @@ msgstr "" "Výchozí hodnota pole (musí být hodnota JSON). Zapouzdřit řetězce s dvojitými" " uvozovkami (např. „Foo“)." -#: extras/models/customfields.py:166 +#: netbox/extras/models/customfields.py:166 msgid "" "Filter the object selection choices using a query_params dict (must be a " "JSON value).Encapsulate strings with double quotes (e.g. \"Foo\")." @@ -7687,35 +8275,35 @@ msgstr "" "Filtrujte volby výběru objektů pomocí dikt query_params (musí být hodnota " "JSON). Zapouzdřete řetězce dvojitými uvozovkami (např. „Foo“)." -#: extras/models/customfields.py:172 +#: netbox/extras/models/customfields.py:172 msgid "display weight" msgstr "hmotnost displeje" -#: extras/models/customfields.py:173 +#: netbox/extras/models/customfields.py:173 msgid "Fields with higher weights appear lower in a form." msgstr "Pole s vyšší hmotností se ve formuláři zobrazují níže." -#: extras/models/customfields.py:178 +#: netbox/extras/models/customfields.py:178 msgid "minimum value" msgstr "minimální hodnota" -#: extras/models/customfields.py:179 +#: netbox/extras/models/customfields.py:179 msgid "Minimum allowed value (for numeric fields)" msgstr "Minimální povolená hodnota (pro číselná pole)" -#: extras/models/customfields.py:184 +#: netbox/extras/models/customfields.py:184 msgid "maximum value" msgstr "maximální hodnota" -#: extras/models/customfields.py:185 +#: netbox/extras/models/customfields.py:185 msgid "Maximum allowed value (for numeric fields)" msgstr "Maximální povolená hodnota (pro číselná pole)" -#: extras/models/customfields.py:191 +#: netbox/extras/models/customfields.py:191 msgid "validation regex" msgstr "validační regex" -#: extras/models/customfields.py:193 +#: netbox/extras/models/customfields.py:193 #, python-brace-format msgid "" "Regular expression to enforce on text field values. Use ^ and $ to force " @@ -7726,186 +8314,188 @@ msgstr "" "vynucení shody celého řetězce. Například, ^ [A-Z]{3}$ omezí " "hodnoty na přesně tři velká písmena." -#: extras/models/customfields.py:201 +#: netbox/extras/models/customfields.py:201 msgid "choice set" msgstr "výběrová sada" -#: extras/models/customfields.py:210 +#: netbox/extras/models/customfields.py:210 msgid "Specifies whether the custom field is displayed in the UI" msgstr "Určuje, zda se uživatelské pole zobrazí v uživatelském rozhraní" -#: extras/models/customfields.py:217 +#: netbox/extras/models/customfields.py:217 msgid "Specifies whether the custom field value can be edited in the UI" msgstr "" "Určuje, zda lze uživatelskou hodnotu pole upravovat v uživatelském rozhraní" -#: extras/models/customfields.py:221 +#: netbox/extras/models/customfields.py:221 msgid "is cloneable" msgstr "je klonovatelný" -#: extras/models/customfields.py:222 +#: netbox/extras/models/customfields.py:222 msgid "Replicate this value when cloning objects" msgstr "Replikujte tuto hodnotu při klonování objektů" -#: extras/models/customfields.py:239 +#: netbox/extras/models/customfields.py:239 msgid "custom field" msgstr "vlastní pole" -#: extras/models/customfields.py:240 +#: netbox/extras/models/customfields.py:240 msgid "custom fields" msgstr "vlastní pole" -#: extras/models/customfields.py:329 +#: netbox/extras/models/customfields.py:329 #, python-brace-format msgid "Invalid default value \"{value}\": {error}" msgstr "Neplatná výchozí hodnota“{value}„: {error}" -#: extras/models/customfields.py:336 +#: netbox/extras/models/customfields.py:336 msgid "A minimum value may be set only for numeric fields" msgstr "Minimální hodnota může být nastavena pouze pro číselná pole" -#: extras/models/customfields.py:338 +#: netbox/extras/models/customfields.py:338 msgid "A maximum value may be set only for numeric fields" msgstr "Maximální hodnota může být nastavena pouze pro číselná pole" -#: extras/models/customfields.py:348 +#: netbox/extras/models/customfields.py:348 msgid "" "Regular expression validation is supported only for text and URL fields" msgstr "" "Ověření regulárních výrazů je podporováno pouze pro textová pole a pole URL" -#: extras/models/customfields.py:354 +#: netbox/extras/models/customfields.py:354 msgid "Uniqueness cannot be enforced for boolean fields" msgstr "Jedinečnost nelze vynutit u booleovských polí" -#: extras/models/customfields.py:364 +#: netbox/extras/models/customfields.py:364 msgid "Selection fields must specify a set of choices." msgstr "Výběrová pole musí specifikovat sadu možností." -#: extras/models/customfields.py:368 +#: netbox/extras/models/customfields.py:368 msgid "Choices may be set only on selection fields." msgstr "Volby lze nastavit pouze na výběrových polích." -#: extras/models/customfields.py:375 +#: netbox/extras/models/customfields.py:375 msgid "Object fields must define an object type." msgstr "Pole objektu musí definovat typ objektu." -#: extras/models/customfields.py:379 +#: netbox/extras/models/customfields.py:379 #, python-brace-format msgid "{type} fields may not define an object type." msgstr "{type} pole nemusí definovat typ objektu." -#: extras/models/customfields.py:386 +#: netbox/extras/models/customfields.py:386 msgid "A related object filter can be defined only for object fields." msgstr "Související filtr objektů lze definovat pouze pro pole objektů." -#: extras/models/customfields.py:390 +#: netbox/extras/models/customfields.py:390 msgid "Filter must be defined as a dictionary mapping attributes to values." msgstr "Filtr musí být definován jako slovník mapující atributy na hodnoty." -#: extras/models/customfields.py:469 +#: netbox/extras/models/customfields.py:469 msgid "True" msgstr "Pravda" -#: extras/models/customfields.py:470 +#: netbox/extras/models/customfields.py:470 msgid "False" msgstr "Nepravdivé" -#: extras/models/customfields.py:560 +#: netbox/extras/models/customfields.py:560 #, python-brace-format msgid "Values must match this regex: {regex}" msgstr "Hodnoty se musí shodovat s tímto regexem: {regex}" -#: extras/models/customfields.py:654 +#: netbox/extras/models/customfields.py:654 msgid "Value must be a string." msgstr "Hodnota musí být řetězec." -#: extras/models/customfields.py:656 +#: netbox/extras/models/customfields.py:656 #, python-brace-format msgid "Value must match regex '{regex}'" msgstr "Hodnota musí odpovídat regex '{regex}'" -#: extras/models/customfields.py:661 +#: netbox/extras/models/customfields.py:661 msgid "Value must be an integer." msgstr "Hodnota musí být celé číslo." -#: extras/models/customfields.py:664 extras/models/customfields.py:679 +#: netbox/extras/models/customfields.py:664 +#: netbox/extras/models/customfields.py:679 #, python-brace-format msgid "Value must be at least {minimum}" msgstr "Hodnota musí být alespoň {minimum}" -#: extras/models/customfields.py:668 extras/models/customfields.py:683 +#: netbox/extras/models/customfields.py:668 +#: netbox/extras/models/customfields.py:683 #, python-brace-format msgid "Value must not exceed {maximum}" msgstr "Hodnota nesmí překročit {maximum}" -#: extras/models/customfields.py:676 +#: netbox/extras/models/customfields.py:676 msgid "Value must be a decimal." msgstr "Hodnota musí být desetinná." -#: extras/models/customfields.py:688 +#: netbox/extras/models/customfields.py:688 msgid "Value must be true or false." msgstr "Hodnota musí být pravdivá nebo nepravdivá." -#: extras/models/customfields.py:696 +#: netbox/extras/models/customfields.py:696 msgid "Date values must be in ISO 8601 format (YYYY-MM-DD)." msgstr "Hodnoty data musí být ve formátu ISO 8601 (RRRR-MM-DD)." -#: extras/models/customfields.py:705 +#: netbox/extras/models/customfields.py:705 msgid "Date and time values must be in ISO 8601 format (YYYY-MM-DD HH:MM:SS)." msgstr "" "Hodnoty data a času musí být ve formátu ISO 8601 (RRRR-MM-DD HH:MM:SS)." -#: extras/models/customfields.py:712 +#: netbox/extras/models/customfields.py:712 #, python-brace-format msgid "Invalid choice ({value}) for choice set {choiceset}." msgstr "Neplatná volba ({value}) pro volitelnou sadu {choiceset}." -#: extras/models/customfields.py:722 +#: netbox/extras/models/customfields.py:722 #, python-brace-format msgid "Invalid choice(s) ({value}) for choice set {choiceset}." msgstr "Neplatná volba (y){value}) pro volitelnou sadu {choiceset}." -#: extras/models/customfields.py:731 +#: netbox/extras/models/customfields.py:731 #, python-brace-format msgid "Value must be an object ID, not {type}" msgstr "Hodnota musí být ID objektu, ne {type}" -#: extras/models/customfields.py:737 +#: netbox/extras/models/customfields.py:737 #, python-brace-format msgid "Value must be a list of object IDs, not {type}" msgstr "Hodnota musí být seznam ID objektů, ne {type}" -#: extras/models/customfields.py:741 +#: netbox/extras/models/customfields.py:741 #, python-brace-format msgid "Found invalid object ID: {id}" msgstr "Nalezeno neplatné ID objektu: {id}" -#: extras/models/customfields.py:744 +#: netbox/extras/models/customfields.py:744 msgid "Required field cannot be empty." msgstr "Povinné pole nesmí být prázdné." -#: extras/models/customfields.py:763 +#: netbox/extras/models/customfields.py:763 msgid "Base set of predefined choices (optional)" msgstr "Základní sada předdefinovaných možností (volitelné)" -#: extras/models/customfields.py:775 +#: netbox/extras/models/customfields.py:775 msgid "Choices are automatically ordered alphabetically" msgstr "Volby jsou automaticky seřazeny abecedně" -#: extras/models/customfields.py:782 +#: netbox/extras/models/customfields.py:782 msgid "custom field choice set" msgstr "vlastní sada výběru polí" -#: extras/models/customfields.py:783 +#: netbox/extras/models/customfields.py:783 msgid "custom field choice sets" msgstr "vlastní sady výběru polí" -#: extras/models/customfields.py:825 +#: netbox/extras/models/customfields.py:825 msgid "Must define base or extra choices." msgstr "Musí definovat základní nebo další možnosti." -#: extras/models/customfields.py:849 +#: netbox/extras/models/customfields.py:849 #, python-brace-format msgid "" "Cannot remove choice {choice} as there are {model} objects which reference " @@ -7914,60 +8504,60 @@ msgstr "" "Nelze odebrat volbu {choice} jak existují {model} objekty, které na něj " "odkazují." -#: extras/models/dashboard.py:18 +#: netbox/extras/models/dashboard.py:18 msgid "layout" msgstr "rozložení" -#: extras/models/dashboard.py:22 +#: netbox/extras/models/dashboard.py:22 msgid "config" msgstr "konfigurace" -#: extras/models/dashboard.py:27 +#: netbox/extras/models/dashboard.py:27 msgid "dashboard" msgstr "přístrojová deska" -#: extras/models/dashboard.py:28 +#: netbox/extras/models/dashboard.py:28 msgid "dashboards" msgstr "řídicí panely" -#: extras/models/models.py:52 +#: netbox/extras/models/models.py:52 msgid "object types" msgstr "typy objektů" -#: extras/models/models.py:53 +#: netbox/extras/models/models.py:53 msgid "The object(s) to which this rule applies." msgstr "Předmět (objekty), na které se toto pravidlo vztahuje." -#: extras/models/models.py:67 +#: netbox/extras/models/models.py:67 msgid "The types of event which will trigger this rule." msgstr "Typy událostí, které spustí toto pravidlo." -#: extras/models/models.py:74 +#: netbox/extras/models/models.py:74 msgid "conditions" msgstr "podmínky" -#: extras/models/models.py:77 +#: netbox/extras/models/models.py:77 msgid "" "A set of conditions which determine whether the event will be generated." msgstr "Sada podmínek, které určují, zda bude událost generována." -#: extras/models/models.py:85 +#: netbox/extras/models/models.py:85 msgid "action type" msgstr "typ akce" -#: extras/models/models.py:104 +#: netbox/extras/models/models.py:104 msgid "Additional data to pass to the action object" msgstr "Další data, která mají být předána objektu akce" -#: extras/models/models.py:116 +#: netbox/extras/models/models.py:116 msgid "event rule" msgstr "pravidlo události" -#: extras/models/models.py:117 +#: netbox/extras/models/models.py:117 msgid "event rules" msgstr "pravidla události" -#: extras/models/models.py:166 +#: netbox/extras/models/models.py:166 msgid "" "This URL will be called using the HTTP method defined when the webhook is " "called. Jinja2 template processing is supported with the same context as the" @@ -7977,7 +8567,7 @@ msgstr "" "webhooku. Zpracování šablony Jinja2 je podporováno ve stejném kontextu jako " "tělo požadavku." -#: extras/models/models.py:181 +#: netbox/extras/models/models.py:181 msgid "" "The complete list of official content types is available tady." -#: extras/models/models.py:186 +#: netbox/extras/models/models.py:186 msgid "additional headers" msgstr "další záhlaví" -#: extras/models/models.py:189 +#: netbox/extras/models/models.py:189 msgid "" "User-supplied HTTP headers to be sent with the request in addition to the " "HTTP content type. Headers should be defined in the format Name: " @@ -8003,11 +8593,11 @@ msgstr "" "Hodnota. Zpracování šablony Jinja2 je podporováno ve stejném kontextu" " jako tělo požadavku (níže)." -#: extras/models/models.py:195 +#: netbox/extras/models/models.py:195 msgid "body template" msgstr "šablona těla" -#: extras/models/models.py:198 +#: netbox/extras/models/models.py:198 msgid "" "Jinja2 template for a custom request body. If blank, a JSON object " "representing the change will be included. Available context data includes: " @@ -8020,11 +8610,11 @@ msgstr "" "uživatelské jméno, identifikační číslo požadavku, " "a data." -#: extras/models/models.py:204 +#: netbox/extras/models/models.py:204 msgid "secret" msgstr "tajemství" -#: extras/models/models.py:208 +#: netbox/extras/models/models.py:208 msgid "" "When provided, the request will include a X-Hook-Signature " "header containing a HMAC hex digest of the payload body using the secret as " @@ -8034,15 +8624,15 @@ msgstr "" " hlavička obsahující hexový přehled HMAC těla užitečného zatížení s použitím" " tajemství jako klíče. Tajemství není v žádosti předáno." -#: extras/models/models.py:215 +#: netbox/extras/models/models.py:215 msgid "Enable SSL certificate verification. Disable with caution!" msgstr "Povolit ověření certifikátu SSL. Zakázat s opatrností!" -#: extras/models/models.py:221 templates/extras/webhook.html:51 +#: netbox/extras/models/models.py:221 netbox/templates/extras/webhook.html:51 msgid "CA File Path" msgstr "Cesta k souboru CA" -#: extras/models/models.py:223 +#: netbox/extras/models/models.py:223 msgid "" "The specific CA certificate file to use for SSL verification. Leave blank to" " use the system defaults." @@ -8050,65 +8640,65 @@ msgstr "" "Specifický soubor certifikátu CA, který se použije pro ověření SSL. Chcete-" "li použít výchozí nastavení systému, ponechte prázdné." -#: extras/models/models.py:234 +#: netbox/extras/models/models.py:234 msgid "webhook" msgstr "webový háček" -#: extras/models/models.py:235 +#: netbox/extras/models/models.py:235 msgid "webhooks" msgstr "webhooky" -#: extras/models/models.py:253 +#: netbox/extras/models/models.py:253 msgid "Do not specify a CA certificate file if SSL verification is disabled." msgstr "" "Pokud je ověřování SSL zakázáno, neurčujte soubor certifikátu certifikační " "autority." -#: extras/models/models.py:293 +#: netbox/extras/models/models.py:293 msgid "The object type(s) to which this link applies." msgstr "Typ objektu (typy), na které se toto spojení vztahuje." -#: extras/models/models.py:305 +#: netbox/extras/models/models.py:305 msgid "link text" msgstr "text odkazu" -#: extras/models/models.py:306 +#: netbox/extras/models/models.py:306 msgid "Jinja2 template code for link text" msgstr "Kód šablony Jinja2 pro text odkazu" -#: extras/models/models.py:309 +#: netbox/extras/models/models.py:309 msgid "link URL" msgstr "URL odkazu" -#: extras/models/models.py:310 +#: netbox/extras/models/models.py:310 msgid "Jinja2 template code for link URL" msgstr "Kód šablony Jinja2 pro URL odkazu" -#: extras/models/models.py:320 +#: netbox/extras/models/models.py:320 msgid "Links with the same group will appear as a dropdown menu" msgstr "Odkazy se stejnou skupinou se zobrazí jako rozbalovací nabídka" -#: extras/models/models.py:330 +#: netbox/extras/models/models.py:330 msgid "new window" msgstr "nové okno" -#: extras/models/models.py:332 +#: netbox/extras/models/models.py:332 msgid "Force link to open in a new window" msgstr "Vynutit otevření odkazu v novém okně" -#: extras/models/models.py:341 +#: netbox/extras/models/models.py:341 msgid "custom link" msgstr "vlastní odkaz" -#: extras/models/models.py:342 +#: netbox/extras/models/models.py:342 msgid "custom links" msgstr "vlastní odkazy" -#: extras/models/models.py:389 +#: netbox/extras/models/models.py:389 msgid "The object type(s) to which this template applies." msgstr "Typ (typy) objektu, na které se tato šablona vztahuje." -#: extras/models/models.py:402 +#: netbox/extras/models/models.py:402 msgid "" "Jinja2 template code. The list of objects being exported is passed as a " "context variable named queryset." @@ -8116,1080 +8706,1146 @@ msgstr "" "Kód šablony Jinja2. Seznam exportovaných objektů je předán jako kontextová " "proměnná s názvem queryset." -#: extras/models/models.py:410 +#: netbox/extras/models/models.py:410 msgid "Defaults to text/plain; charset=utf-8" msgstr "Výchozí hodnota text/prostý; znaková sada = utf-8" -#: extras/models/models.py:413 +#: netbox/extras/models/models.py:413 msgid "file extension" msgstr "přípona souboru" -#: extras/models/models.py:416 +#: netbox/extras/models/models.py:416 msgid "Extension to append to the rendered filename" msgstr "Rozšíření pro připojení k rendrovanému názvu souboru" -#: extras/models/models.py:419 +#: netbox/extras/models/models.py:419 msgid "as attachment" msgstr "jako příloha" -#: extras/models/models.py:421 +#: netbox/extras/models/models.py:421 msgid "Download file as attachment" msgstr "Stáhnout soubor jako přílohu" -#: extras/models/models.py:430 +#: netbox/extras/models/models.py:430 msgid "export template" msgstr "šablona exportu" -#: extras/models/models.py:431 +#: netbox/extras/models/models.py:431 msgid "export templates" msgstr "exportovat šablony" -#: extras/models/models.py:448 +#: netbox/extras/models/models.py:448 #, python-brace-format msgid "\"{name}\" is a reserved name. Please choose a different name." msgstr "„{name}„je vyhrazené jméno. Zvolte prosím jiné jméno." -#: extras/models/models.py:498 +#: netbox/extras/models/models.py:498 msgid "The object type(s) to which this filter applies." msgstr "Typ objektu (typy), na které se tento filtr vztahuje." -#: extras/models/models.py:530 +#: netbox/extras/models/models.py:530 msgid "shared" msgstr "sdílené" -#: extras/models/models.py:543 +#: netbox/extras/models/models.py:543 msgid "saved filter" msgstr "uložený filtr" -#: extras/models/models.py:544 +#: netbox/extras/models/models.py:544 msgid "saved filters" msgstr "uložené filtry" -#: extras/models/models.py:562 +#: netbox/extras/models/models.py:562 msgid "Filter parameters must be stored as a dictionary of keyword arguments." msgstr "" "Parametry filtru musí být uloženy jako slovník argumentů klíčových slov." -#: extras/models/models.py:590 +#: netbox/extras/models/models.py:590 msgid "image height" msgstr "výška obrazu" -#: extras/models/models.py:593 +#: netbox/extras/models/models.py:593 msgid "image width" msgstr "šířka obrazu" -#: extras/models/models.py:610 +#: netbox/extras/models/models.py:610 msgid "image attachment" msgstr "příloha obrázku" -#: extras/models/models.py:611 +#: netbox/extras/models/models.py:611 msgid "image attachments" msgstr "obrazové přílohy" -#: extras/models/models.py:625 +#: netbox/extras/models/models.py:625 #, python-brace-format msgid "Image attachments cannot be assigned to this object type ({type})." msgstr "K tomuto typu objektu nelze přiřadit přílohy obrázků ({type})." -#: extras/models/models.py:688 +#: netbox/extras/models/models.py:688 msgid "kind" msgstr "laskavý" -#: extras/models/models.py:702 +#: netbox/extras/models/models.py:702 msgid "journal entry" msgstr "zápis do deníku" -#: extras/models/models.py:703 +#: netbox/extras/models/models.py:703 msgid "journal entries" msgstr "zápisy do deníku" -#: extras/models/models.py:718 +#: netbox/extras/models/models.py:718 #, 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})." -#: extras/models/models.py:760 +#: netbox/extras/models/models.py:760 msgid "bookmark" msgstr "záložka" -#: extras/models/models.py:761 +#: netbox/extras/models/models.py:761 msgid "bookmarks" msgstr "záložky" -#: extras/models/models.py:774 +#: netbox/extras/models/models.py:774 #, 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})." -#: extras/models/notifications.py:43 +#: netbox/extras/models/notifications.py:43 msgid "read" msgstr "číst" -#: extras/models/notifications.py:66 +#: netbox/extras/models/notifications.py:66 msgid "event" msgstr "událost" -#: extras/models/notifications.py:84 +#: netbox/extras/models/notifications.py:84 msgid "notification" msgstr "oznámení" -#: extras/models/notifications.py:85 +#: netbox/extras/models/notifications.py:85 msgid "notifications" msgstr "oznámení" -#: extras/models/notifications.py:99 extras/models/notifications.py:234 +#: netbox/extras/models/notifications.py:99 +#: netbox/extras/models/notifications.py:234 #, python-brace-format msgid "Objects of this type ({type}) do not support notifications." msgstr "Objekty tohoto typu ({type}) nepodporují oznámení." -#: extras/models/notifications.py:137 users/models/users.py:58 -#: users/models/users.py:77 +#: netbox/extras/models/notifications.py:137 netbox/users/models/users.py:58 +#: netbox/users/models/users.py:77 msgid "groups" msgstr "skupin" -#: extras/models/notifications.py:143 users/models/users.py:93 +#: netbox/extras/models/notifications.py:143 netbox/users/models/users.py:93 msgid "users" msgstr "uživatelé" -#: extras/models/notifications.py:152 +#: netbox/extras/models/notifications.py:152 msgid "notification group" msgstr "oznamovací skupina" -#: extras/models/notifications.py:153 +#: netbox/extras/models/notifications.py:153 msgid "notification groups" msgstr "skupiny oznámení" -#: extras/models/notifications.py:217 +#: netbox/extras/models/notifications.py:217 msgid "subscription" msgstr "předplatné" -#: extras/models/notifications.py:218 +#: netbox/extras/models/notifications.py:218 msgid "subscriptions" msgstr "předplatné" -#: extras/models/scripts.py:42 +#: netbox/extras/models/scripts.py:42 msgid "is executable" msgstr "je spustitelný" -#: extras/models/scripts.py:64 +#: netbox/extras/models/scripts.py:64 msgid "script" msgstr "skript" -#: extras/models/scripts.py:65 +#: netbox/extras/models/scripts.py:65 msgid "scripts" msgstr "skripty" -#: extras/models/scripts.py:111 +#: netbox/extras/models/scripts.py:111 msgid "script module" msgstr "skriptový modul" -#: extras/models/scripts.py:112 +#: netbox/extras/models/scripts.py:112 msgid "script modules" msgstr "skriptové moduly" -#: extras/models/search.py:22 +#: netbox/extras/models/search.py:22 msgid "timestamp" msgstr "časové razítko" -#: extras/models/search.py:37 +#: netbox/extras/models/search.py:37 msgid "field" msgstr "pole" -#: extras/models/search.py:45 +#: netbox/extras/models/search.py:45 msgid "value" msgstr "hodnota" -#: extras/models/search.py:56 +#: netbox/extras/models/search.py:56 msgid "cached value" msgstr "hodnota uložená v mezipaměti" -#: extras/models/search.py:57 +#: netbox/extras/models/search.py:57 msgid "cached values" msgstr "hodnoty uložené v mezipaměti" -#: extras/models/staging.py:44 +#: netbox/extras/models/staging.py:44 msgid "branch" msgstr "větev" -#: extras/models/staging.py:45 +#: netbox/extras/models/staging.py:45 msgid "branches" msgstr "poboček" -#: extras/models/staging.py:97 +#: netbox/extras/models/staging.py:97 msgid "staged change" msgstr "postupná změna" -#: extras/models/staging.py:98 +#: netbox/extras/models/staging.py:98 msgid "staged changes" msgstr "postupné změny" -#: extras/models/tags.py:40 +#: netbox/extras/models/tags.py:40 msgid "The object type(s) to which this tag can be applied." msgstr "Typ objektu (typy), na které lze tento tag použít." -#: extras/models/tags.py:49 +#: netbox/extras/models/tags.py:49 msgid "tag" msgstr "štítek" -#: extras/models/tags.py:50 +#: netbox/extras/models/tags.py:50 msgid "tags" msgstr "tagy" -#: extras/models/tags.py:78 +#: netbox/extras/models/tags.py:78 msgid "tagged item" msgstr "označená položka" -#: extras/models/tags.py:79 +#: netbox/extras/models/tags.py:79 msgid "tagged items" msgstr "označené položky" -#: extras/scripts.py:429 +#: netbox/extras/scripts.py:429 msgid "Script Data" msgstr "Data skriptu" -#: extras/scripts.py:433 +#: netbox/extras/scripts.py:433 msgid "Script Execution Parameters" msgstr "Parametry spuštění skriptu" -#: extras/tables/columns.py:12 templates/htmx/notifications.html:18 +#: netbox/extras/tables/columns.py:12 +#: netbox/templates/htmx/notifications.html:18 msgid "Dismiss" msgstr "Odmítnout" -#: extras/tables/tables.py:62 extras/tables/tables.py:159 -#: extras/tables/tables.py:184 extras/tables/tables.py:250 -#: extras/tables/tables.py:276 extras/tables/tables.py:412 -#: extras/tables/tables.py:446 templates/extras/customfield.html:105 -#: templates/extras/eventrule.html:27 templates/users/objectpermission.html:64 -#: users/tables.py:80 +#: netbox/extras/tables/tables.py:62 netbox/extras/tables/tables.py:159 +#: netbox/extras/tables/tables.py:184 netbox/extras/tables/tables.py:250 +#: netbox/extras/tables/tables.py:276 netbox/extras/tables/tables.py:412 +#: netbox/extras/tables/tables.py:446 +#: netbox/templates/extras/customfield.html:105 +#: netbox/templates/extras/eventrule.html:27 +#: netbox/templates/users/objectpermission.html:64 netbox/users/tables.py:80 msgid "Object Types" msgstr "Typy objektů" -#: extras/tables/tables.py:69 +#: netbox/extras/tables/tables.py:69 msgid "Validate Uniqueness" msgstr "Ověřte jedinečnost" -#: extras/tables/tables.py:73 +#: netbox/extras/tables/tables.py:73 msgid "Visible" msgstr "Viditelné" -#: extras/tables/tables.py:76 +#: netbox/extras/tables/tables.py:76 msgid "Editable" msgstr "Upravitelné" -#: extras/tables/tables.py:82 +#: netbox/extras/tables/tables.py:82 msgid "Related Object Type" msgstr "Typ souvisejícího objektu" -#: extras/tables/tables.py:86 templates/extras/customfield.html:51 +#: netbox/extras/tables/tables.py:86 +#: netbox/templates/extras/customfield.html:51 msgid "Choice Set" msgstr "Sada výběru" -#: extras/tables/tables.py:94 +#: netbox/extras/tables/tables.py:94 msgid "Is Cloneable" msgstr "Je klonovatelný" -#: extras/tables/tables.py:98 templates/extras/customfield.html:118 +#: netbox/extras/tables/tables.py:98 +#: netbox/templates/extras/customfield.html:118 msgid "Minimum Value" msgstr "Minimální hodnota" -#: extras/tables/tables.py:101 templates/extras/customfield.html:122 +#: netbox/extras/tables/tables.py:101 +#: netbox/templates/extras/customfield.html:122 msgid "Maximum Value" msgstr "Maximální hodnota" -#: extras/tables/tables.py:104 +#: netbox/extras/tables/tables.py:104 msgid "Validation Regex" msgstr "Ověření Regex" -#: extras/tables/tables.py:137 +#: netbox/extras/tables/tables.py:137 msgid "Count" msgstr "počítat" -#: extras/tables/tables.py:140 +#: netbox/extras/tables/tables.py:140 msgid "Order Alphabetically" msgstr "Řadit abecedně" -#: extras/tables/tables.py:165 templates/extras/customlink.html:33 +#: netbox/extras/tables/tables.py:165 +#: netbox/templates/extras/customlink.html:33 msgid "New Window" msgstr "Nové okno" -#: extras/tables/tables.py:187 +#: netbox/extras/tables/tables.py:187 msgid "As Attachment" msgstr "Jako příloha" -#: extras/tables/tables.py:195 extras/tables/tables.py:487 -#: extras/tables/tables.py:522 templates/core/datafile.html:24 -#: templates/dcim/device/render_config.html:22 -#: templates/extras/configcontext.html:39 -#: templates/extras/configtemplate.html:31 -#: templates/extras/exporttemplate.html:45 -#: templates/generic/bulk_import.html:35 -#: templates/virtualization/virtualmachine/render_config.html:22 +#: netbox/extras/tables/tables.py: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/generic/bulk_import.html:35 +#: netbox/templates/virtualization/virtualmachine/render_config.html:22 msgid "Data File" msgstr "Datový soubor" -#: extras/tables/tables.py:200 extras/tables/tables.py:499 -#: extras/tables/tables.py:527 +#: netbox/extras/tables/tables.py:200 netbox/extras/tables/tables.py:499 +#: netbox/extras/tables/tables.py:527 msgid "Synced" msgstr "Synchronizováno" -#: extras/tables/tables.py:227 +#: netbox/extras/tables/tables.py:227 msgid "Image" msgstr "Obrázek" -#: extras/tables/tables.py:232 +#: netbox/extras/tables/tables.py:232 msgid "Size (Bytes)" msgstr "Velikost (bajty)" -#: extras/tables/tables.py:339 +#: netbox/extras/tables/tables.py:339 msgid "Read" msgstr "Číst" -#: extras/tables/tables.py:382 +#: netbox/extras/tables/tables.py:382 msgid "SSL Validation" msgstr "Ověření SSL" -#: extras/tables/tables.py:418 templates/extras/eventrule.html:37 +#: netbox/extras/tables/tables.py:418 +#: netbox/templates/extras/eventrule.html:37 msgid "Event Types" msgstr "Typy událostí" -#: extras/tables/tables.py:535 netbox/navigation/menu.py:77 -#: templates/dcim/devicerole.html:8 +#: netbox/extras/tables/tables.py:535 netbox/netbox/navigation/menu.py:77 +#: netbox/templates/dcim/devicerole.html:8 msgid "Device Roles" msgstr "Role zařízení" -#: extras/tables/tables.py:587 +#: netbox/extras/tables/tables.py:587 msgid "Comments (Short)" msgstr "Komentáře (krátký)" -#: extras/tables/tables.py:606 extras/tables/tables.py:640 +#: netbox/extras/tables/tables.py:606 netbox/extras/tables/tables.py:640 msgid "Line" msgstr "Linka" -#: extras/tables/tables.py:613 extras/tables/tables.py:650 +#: netbox/extras/tables/tables.py:613 netbox/extras/tables/tables.py:650 msgid "Level" msgstr "Úroveň" -#: extras/tables/tables.py:619 extras/tables/tables.py:659 +#: netbox/extras/tables/tables.py:619 netbox/extras/tables/tables.py:659 msgid "Message" msgstr "Zpráva" -#: extras/tables/tables.py:643 +#: netbox/extras/tables/tables.py:643 msgid "Method" msgstr "Metoda" -#: extras/validators.py:15 +#: netbox/extras/validators.py:15 #, python-format msgid "Ensure this value is equal to %(limit_value)s." msgstr "Ujistěte se, že tato hodnota se rovná %(limit_value)s." -#: extras/validators.py:26 +#: netbox/extras/validators.py:26 #, python-format msgid "Ensure this value does not equal %(limit_value)s." msgstr "Ujistěte se, že tato hodnota není stejná %(limit_value)s." -#: extras/validators.py:37 +#: netbox/extras/validators.py:37 msgid "This field must be empty." msgstr "Toto pole musí být prázdné." -#: extras/validators.py:52 +#: netbox/extras/validators.py:52 msgid "This field must not be empty." msgstr "Toto pole nesmí být prázdné." -#: extras/validators.py:94 +#: netbox/extras/validators.py:94 msgid "Validation rules must be passed as a dictionary" msgstr "Ověřovací pravidla musí být předána jako slovník" -#: extras/validators.py:119 +#: netbox/extras/validators.py:119 #, python-brace-format msgid "Custom validation failed for {attribute}: {exception}" msgstr "Vlastní ověření se nezdařilo pro {attribute}: {exception}" -#: extras/validators.py:133 +#: netbox/extras/validators.py:133 #, python-brace-format msgid "Invalid attribute \"{name}\" for request" msgstr "Neplatný atribut“{name}„na vyžádání" -#: extras/validators.py:150 +#: netbox/extras/validators.py:150 #, python-brace-format msgid "Invalid attribute \"{name}\" for {model}" msgstr "Neplatný atribut“{name}„pro {model}" -#: extras/views.py:960 +#: netbox/extras/views.py:960 msgid "Your dashboard has been reset." msgstr "Váš řídicí panel byl resetován." -#: extras/views.py:1006 +#: netbox/extras/views.py:1006 msgid "Added widget: " msgstr "Přidán widget: " -#: extras/views.py:1047 +#: netbox/extras/views.py:1047 msgid "Updated widget: " msgstr "Aktualizovaný widget: " -#: extras/views.py:1083 +#: netbox/extras/views.py:1083 msgid "Deleted widget: " msgstr "Odstraněný widget: " -#: extras/views.py:1085 +#: netbox/extras/views.py:1085 msgid "Error deleting widget: " msgstr "Chyba při mazání widgetu: " -#: extras/views.py:1172 +#: netbox/extras/views.py:1175 msgid "Unable to run script: RQ worker process not running." msgstr "Nelze spustit skript: Proces RQ Worker není spuštěn." -#: ipam/api/field_serializers.py:17 +#: netbox/ipam/api/field_serializers.py:17 msgid "Enter a valid IPv4 or IPv6 address with optional mask." msgstr "Zadejte platnou adresu IPv4 nebo IPv6 s volitelnou maskou." -#: ipam/api/field_serializers.py:24 +#: netbox/ipam/api/field_serializers.py:24 #, python-brace-format msgid "Invalid IP address format: {data}" msgstr "Neplatný formát IP adresy: {data}" -#: ipam/api/field_serializers.py:37 +#: netbox/ipam/api/field_serializers.py:37 msgid "Enter a valid IPv4 or IPv6 prefix and mask in CIDR notation." msgstr "Zadejte platnou předponu a masku IPv4 nebo IPv6 v zápisu CIDR." -#: ipam/api/field_serializers.py:44 +#: netbox/ipam/api/field_serializers.py:44 #, python-brace-format msgid "Invalid IP prefix format: {data}" msgstr "Neplatný formát předpony IP: {data}" -#: ipam/api/views.py:358 +#: netbox/ipam/api/views.py:358 msgid "" "Insufficient space is available to accommodate the requested prefix size(s)" msgstr "" "Není k dispozici dostatek místa pro umístění požadované velikosti prefixu" -#: ipam/choices.py:30 +#: netbox/ipam/choices.py:30 msgid "Container" msgstr "Kontejner" -#: ipam/choices.py:72 +#: netbox/ipam/choices.py:72 msgid "DHCP" msgstr "DHCP" -#: ipam/choices.py:73 +#: netbox/ipam/choices.py:73 msgid "SLAAC" msgstr "SLAAK" -#: ipam/choices.py:89 +#: netbox/ipam/choices.py:89 msgid "Loopback" msgstr "Zpětná smyčka" -#: ipam/choices.py:91 +#: netbox/ipam/choices.py:91 msgid "Anycast" msgstr "Anycast" -#: ipam/choices.py:115 +#: netbox/ipam/choices.py:115 msgid "Standard" msgstr "Standardní" -#: ipam/choices.py:120 +#: netbox/ipam/choices.py:120 msgid "CheckPoint" msgstr "Kontrolní bod" -#: ipam/choices.py:123 +#: netbox/ipam/choices.py:123 msgid "Cisco" msgstr "Cisco" -#: ipam/choices.py:137 +#: netbox/ipam/choices.py:137 msgid "Plaintext" msgstr "Prostý text" -#: ipam/fields.py:36 +#: netbox/ipam/fields.py:36 #, python-brace-format msgid "Invalid IP address format: {address}" msgstr "Neplatný formát IP adresy: {address}" -#: ipam/filtersets.py:48 vpn/filtersets.py:304 +#: netbox/ipam/filtersets.py:48 netbox/vpn/filtersets.py:304 msgid "Import target" msgstr "Cíl importu" -#: ipam/filtersets.py:54 vpn/filtersets.py:310 +#: netbox/ipam/filtersets.py:54 netbox/vpn/filtersets.py:310 msgid "Import target (name)" msgstr "Cíl importu (název)" -#: ipam/filtersets.py:59 vpn/filtersets.py:315 +#: netbox/ipam/filtersets.py:59 netbox/vpn/filtersets.py:315 msgid "Export target" msgstr "Cíl exportu" -#: ipam/filtersets.py:65 vpn/filtersets.py:321 +#: netbox/ipam/filtersets.py:65 netbox/vpn/filtersets.py:321 msgid "Export target (name)" msgstr "Cíl exportu (název)" -#: ipam/filtersets.py:86 +#: netbox/ipam/filtersets.py:86 msgid "Importing VRF" msgstr "Import VRF" -#: ipam/filtersets.py:92 +#: netbox/ipam/filtersets.py:92 msgid "Import VRF (RD)" msgstr "Importovat VRF (RD)" -#: ipam/filtersets.py:97 +#: netbox/ipam/filtersets.py:97 msgid "Exporting VRF" msgstr "Export VRF" -#: ipam/filtersets.py:103 +#: netbox/ipam/filtersets.py:103 msgid "Export VRF (RD)" msgstr "Export VRF (RD)" -#: ipam/filtersets.py:108 +#: netbox/ipam/filtersets.py:108 msgid "Importing L2VPN" msgstr "Import L2VPN" -#: ipam/filtersets.py:114 +#: netbox/ipam/filtersets.py:114 msgid "Importing L2VPN (identifier)" msgstr "Import L2VPN (identifikátor)" -#: ipam/filtersets.py:119 +#: netbox/ipam/filtersets.py:119 msgid "Exporting L2VPN" msgstr "Export L2VPN" -#: ipam/filtersets.py:125 +#: netbox/ipam/filtersets.py:125 msgid "Exporting L2VPN (identifier)" msgstr "Export L2VPN (identifikátor)" -#: ipam/filtersets.py:155 ipam/filtersets.py:281 ipam/forms/model_forms.py:229 -#: ipam/tables/ip.py:212 templates/ipam/prefix.html:12 +#: 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 "Předpona" -#: ipam/filtersets.py:159 ipam/filtersets.py:198 ipam/filtersets.py:221 +#: netbox/ipam/filtersets.py:159 netbox/ipam/filtersets.py:198 +#: netbox/ipam/filtersets.py:223 msgid "RIR (ID)" msgstr "RIR (ID)" -#: ipam/filtersets.py:165 ipam/filtersets.py:204 ipam/filtersets.py:227 +#: netbox/ipam/filtersets.py:165 netbox/ipam/filtersets.py:204 +#: netbox/ipam/filtersets.py:229 msgid "RIR (slug)" msgstr "RIR (slug)" -#: ipam/filtersets.py:285 +#: netbox/ipam/filtersets.py:287 msgid "Within prefix" msgstr "V rámci předpony" -#: ipam/filtersets.py:289 +#: netbox/ipam/filtersets.py:291 msgid "Within and including prefix" msgstr "V rámci a včetně prefixu" -#: ipam/filtersets.py:293 +#: netbox/ipam/filtersets.py:295 msgid "Prefixes which contain this prefix or IP" msgstr "Předpony, které obsahují tuto předponu nebo IP" -#: ipam/filtersets.py:304 ipam/filtersets.py:572 ipam/forms/bulk_edit.py:343 -#: ipam/forms/filtersets.py:196 ipam/forms/filtersets.py:331 +#: 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élka masky" -#: ipam/filtersets.py:373 vpn/filtersets.py:427 +#: netbox/ipam/filtersets.py:375 netbox/vpn/filtersets.py:427 msgid "VLAN (ID)" msgstr "VLAN (ID)" -#: ipam/filtersets.py:377 vpn/filtersets.py:422 +#: netbox/ipam/filtersets.py:379 netbox/vpn/filtersets.py:422 msgid "VLAN number (1-4094)" msgstr "Číslo VLAN (1-4094)" -#: ipam/filtersets.py:471 ipam/filtersets.py:475 ipam/filtersets.py:567 -#: ipam/forms/model_forms.py:463 templates/tenancy/contact.html:53 -#: tenancy/forms/bulk_edit.py:113 +#: 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 "Adresa" -#: ipam/filtersets.py:479 +#: netbox/ipam/filtersets.py:481 msgid "Ranges which contain this prefix or IP" msgstr "Rozsahy, které obsahují tuto předponu nebo IP" -#: ipam/filtersets.py:507 ipam/filtersets.py:563 +#: netbox/ipam/filtersets.py:509 netbox/ipam/filtersets.py:565 msgid "Parent prefix" msgstr "Nadřazená předpona" -#: ipam/filtersets.py:616 ipam/filtersets.py:856 ipam/filtersets.py:1131 -#: 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 "Virtuální počítač (název)" -#: ipam/filtersets.py:621 ipam/filtersets.py:861 ipam/filtersets.py:1125 -#: virtualization/filtersets.py:282 virtualization/filtersets.py:321 -#: vpn/filtersets.py:390 +#: 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)" -#: ipam/filtersets.py:627 vpn/filtersets.py:97 vpn/filtersets.py:396 +#: netbox/ipam/filtersets.py:629 netbox/vpn/filtersets.py:97 +#: netbox/vpn/filtersets.py:396 msgid "Interface (name)" msgstr "Rozhraní (název)" -#: ipam/filtersets.py:638 vpn/filtersets.py:108 vpn/filtersets.py:407 +#: 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)" -#: ipam/filtersets.py:643 vpn/filtersets.py:113 +#: netbox/ipam/filtersets.py:645 netbox/vpn/filtersets.py:113 msgid "VM interface (ID)" msgstr "Rozhraní virtuálního počítače (ID)" -#: ipam/filtersets.py:648 +#: netbox/ipam/filtersets.py:650 msgid "FHRP group (ID)" msgstr "Skupina FHRP (ID)" -#: ipam/filtersets.py:652 +#: netbox/ipam/filtersets.py:654 msgid "Is assigned to an interface" msgstr "Je přiřazen k rozhraní" -#: ipam/filtersets.py:656 +#: netbox/ipam/filtersets.py:658 msgid "Is assigned" msgstr "Je přiřazen" -#: ipam/filtersets.py:668 +#: netbox/ipam/filtersets.py:670 msgid "Service (ID)" msgstr "Služba (ID)" -#: ipam/filtersets.py:673 +#: netbox/ipam/filtersets.py:675 msgid "NAT inside IP address (ID)" msgstr "NAT uvnitř IP adresy (ID)" -#: ipam/filtersets.py:1041 ipam/forms/bulk_import.py:322 +#: netbox/ipam/filtersets.py:1043 netbox/ipam/forms/bulk_import.py:322 msgid "Assigned interface" msgstr "Přiřazené rozhraní" -#: ipam/filtersets.py:1046 +#: netbox/ipam/filtersets.py:1048 msgid "Assigned VM interface" msgstr "Přiřazené rozhraní virtuálního počítače" -#: ipam/filtersets.py:1136 +#: netbox/ipam/filtersets.py:1138 msgid "IP address (ID)" msgstr "IP adresa (ID)" -#: ipam/filtersets.py:1142 ipam/models/ip.py:788 +#: netbox/ipam/filtersets.py:1144 netbox/ipam/models/ip.py:788 msgid "IP address" msgstr "IP adresa" -#: ipam/filtersets.py:1167 +#: netbox/ipam/filtersets.py:1169 msgid "Primary IPv4 (ID)" msgstr "Primární IPv4 (ID)" -#: ipam/filtersets.py:1172 +#: netbox/ipam/filtersets.py:1174 msgid "Primary IPv6 (ID)" msgstr "Primární IPv6 (ID)" -#: ipam/formfields.py:14 +#: netbox/ipam/formfields.py:14 msgid "Enter a valid IPv4 or IPv6 address (without a mask)." msgstr "Zadejte platnou adresu IPv4 nebo IPv6 (bez masky)." -#: ipam/formfields.py:32 +#: netbox/ipam/formfields.py:32 #, python-brace-format msgid "Invalid IPv4/IPv6 address format: {address}" msgstr "Neplatný formát adresy IPv4/IPv6: {address}" -#: ipam/formfields.py:37 +#: netbox/ipam/formfields.py:37 msgid "This field requires an IP address without a mask." msgstr "Toto pole vyžaduje IP adresu bez masky." -#: ipam/formfields.py:39 ipam/formfields.py:61 +#: netbox/ipam/formfields.py:39 netbox/ipam/formfields.py:61 msgid "Please specify a valid IPv4 or IPv6 address." msgstr "Zadejte platnou adresu IPv4 nebo IPv6." -#: ipam/formfields.py:44 +#: netbox/ipam/formfields.py:44 msgid "Enter a valid IPv4 or IPv6 address (with CIDR mask)." msgstr "Zadejte platnou adresu IPv4 nebo IPv6 (s maskou CIDR)." -#: ipam/formfields.py:56 +#: netbox/ipam/formfields.py:56 msgid "CIDR mask (e.g. /24) is required." msgstr "Je vyžadována maska CIDR (např. /24)." -#: ipam/forms/bulk_create.py:13 +#: netbox/ipam/forms/bulk_create.py:13 msgid "Address pattern" msgstr "Vzor adresy" -#: ipam/forms/bulk_edit.py:50 +#: netbox/ipam/forms/bulk_edit.py:50 msgid "Enforce unique space" msgstr "Vynutit jedinečný prostor" -#: ipam/forms/bulk_edit.py:88 +#: netbox/ipam/forms/bulk_edit.py:88 msgid "Is private" msgstr "Je soukromý" -#: ipam/forms/bulk_edit.py:109 ipam/forms/bulk_edit.py:138 -#: ipam/forms/bulk_edit.py:163 ipam/forms/bulk_import.py:89 -#: ipam/forms/bulk_import.py:109 ipam/forms/bulk_import.py:129 -#: ipam/forms/filtersets.py:110 ipam/forms/filtersets.py:125 -#: ipam/forms/filtersets.py:148 ipam/forms/model_forms.py:96 -#: ipam/forms/model_forms.py:109 ipam/forms/model_forms.py:131 -#: ipam/forms/model_forms.py:149 ipam/models/asns.py:31 -#: ipam/models/asns.py:103 ipam/models/ip.py:71 ipam/models/ip.py:90 -#: ipam/tables/asn.py:20 ipam/tables/asn.py:45 -#: templates/ipam/aggregate.html:18 templates/ipam/asn.html:27 -#: templates/ipam/asnrange.html:19 templates/ipam/rir.html:19 +#: netbox/ipam/forms/bulk_edit.py: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/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" -#: ipam/forms/bulk_edit.py:171 +#: netbox/ipam/forms/bulk_edit.py:171 msgid "Date added" msgstr "Datum přidání" -#: ipam/forms/bulk_edit.py:229 ipam/forms/model_forms.py:586 -#: ipam/forms/model_forms.py:633 ipam/tables/ip.py:251 -#: templates/ipam/vlan_edit.html:37 templates/ipam/vlangroup.html:27 +#: 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/templates/ipam/vlangroup.html:27 msgid "VLAN Group" msgstr "Skupina VLAN" -#: ipam/forms/bulk_edit.py:234 ipam/forms/bulk_import.py:185 -#: ipam/forms/filtersets.py:256 ipam/forms/model_forms.py:218 -#: ipam/models/vlans.py:234 ipam/tables/ip.py:255 -#: templates/ipam/prefix.html:60 templates/ipam/vlan.html:12 -#: templates/ipam/vlan/base.html:6 templates/ipam/vlan_edit.html:10 -#: templates/wireless/wirelesslan.html:30 vpn/forms/bulk_import.py:304 -#: vpn/forms/filtersets.py:284 vpn/forms/model_forms.py:433 -#: vpn/forms/model_forms.py:452 wireless/forms/bulk_edit.py:55 -#: wireless/forms/bulk_import.py:48 wireless/forms/model_forms.py:48 -#: wireless/models.py:102 +#: 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/templates/ipam/vlan/base.html:6 +#: netbox/templates/ipam/vlan_edit.html:10 +#: netbox/templates/wireless/wirelesslan.html:30 +#: netbox/vpn/forms/bulk_import.py:304 netbox/vpn/forms/filtersets.py:284 +#: netbox/vpn/forms/model_forms.py:433 netbox/vpn/forms/model_forms.py:452 +#: netbox/wireless/forms/bulk_edit.py:55 +#: netbox/wireless/forms/bulk_import.py:48 +#: netbox/wireless/forms/model_forms.py:48 netbox/wireless/models.py:102 msgid "VLAN" msgstr "WLAN" -#: ipam/forms/bulk_edit.py:245 +#: netbox/ipam/forms/bulk_edit.py:245 msgid "Prefix length" msgstr "Délka předpony" -#: ipam/forms/bulk_edit.py:268 ipam/forms/filtersets.py:241 -#: templates/ipam/prefix.html:85 +#: netbox/ipam/forms/bulk_edit.py:268 netbox/ipam/forms/filtersets.py:241 +#: netbox/templates/ipam/prefix.html:85 msgid "Is a pool" msgstr "Je bazén" -#: ipam/forms/bulk_edit.py:273 ipam/forms/bulk_edit.py:318 -#: ipam/forms/filtersets.py:248 ipam/forms/filtersets.py:293 -#: ipam/models/ip.py:272 ipam/models/ip.py:539 +#: netbox/ipam/forms/bulk_edit.py: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 msgid "Treat as fully utilized" msgstr "Zacházejte jako plně využívané" -#: ipam/forms/bulk_edit.py:287 ipam/forms/filtersets.py:171 +#: netbox/ipam/forms/bulk_edit.py:287 netbox/ipam/forms/filtersets.py:171 msgid "VLAN Assignment" msgstr "Přiřazení VLAN" -#: ipam/forms/bulk_edit.py:366 ipam/models/ip.py:772 +#: netbox/ipam/forms/bulk_edit.py:366 netbox/ipam/models/ip.py:772 msgid "DNS name" msgstr "Název DNS" -#: ipam/forms/bulk_edit.py:387 ipam/forms/bulk_edit.py:534 -#: ipam/forms/bulk_import.py:394 ipam/forms/bulk_import.py:469 -#: ipam/forms/bulk_import.py:495 ipam/forms/filtersets.py:390 -#: ipam/forms/filtersets.py:530 templates/ipam/fhrpgroup.html:22 -#: templates/ipam/inc/panels/fhrp_groups.html:24 -#: templates/ipam/service.html:32 templates/ipam/servicetemplate.html:19 +#: netbox/ipam/forms/bulk_edit.py: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/templates/ipam/inc/panels/fhrp_groups.html:24 +#: netbox/templates/ipam/service.html:32 +#: netbox/templates/ipam/servicetemplate.html:19 msgid "Protocol" msgstr "protokolu" -#: ipam/forms/bulk_edit.py:394 ipam/forms/filtersets.py:397 -#: ipam/tables/fhrp.py:22 templates/ipam/fhrpgroup.html:26 +#: netbox/ipam/forms/bulk_edit.py:394 netbox/ipam/forms/filtersets.py:397 +#: netbox/ipam/tables/fhrp.py:22 netbox/templates/ipam/fhrpgroup.html:26 msgid "Group ID" msgstr "ID skupiny" -#: ipam/forms/bulk_edit.py:399 ipam/forms/filtersets.py:402 -#: wireless/forms/bulk_edit.py:68 wireless/forms/bulk_edit.py:115 -#: wireless/forms/bulk_import.py:62 wireless/forms/bulk_import.py:65 -#: wireless/forms/bulk_import.py:104 wireless/forms/bulk_import.py:107 -#: wireless/forms/filtersets.py:54 wireless/forms/filtersets.py:88 +#: netbox/ipam/forms/bulk_edit.py: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 msgid "Authentication type" msgstr "Typ autentizace" -#: ipam/forms/bulk_edit.py:404 ipam/forms/filtersets.py:406 +#: netbox/ipam/forms/bulk_edit.py:404 netbox/ipam/forms/filtersets.py:406 msgid "Authentication key" msgstr "Ověřovací klíč" -#: ipam/forms/bulk_edit.py:421 ipam/forms/filtersets.py:383 -#: ipam/forms/model_forms.py:474 netbox/navigation/menu.py:386 -#: templates/ipam/fhrpgroup.html:49 -#: templates/wireless/inc/authentication_attrs.html:5 -#: wireless/forms/bulk_edit.py:91 wireless/forms/bulk_edit.py:149 -#: wireless/forms/filtersets.py:36 wireless/forms/filtersets.py:76 -#: wireless/forms/model_forms.py:55 wireless/forms/model_forms.py:171 +#: 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/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 msgid "Authentication" msgstr "Autentizace" -#: ipam/forms/bulk_edit.py:436 ipam/forms/model_forms.py:575 +#: netbox/ipam/forms/bulk_edit.py:436 netbox/ipam/forms/model_forms.py:608 msgid "Scope type" msgstr "Typ rozsahu" -#: ipam/forms/bulk_edit.py:439 ipam/forms/bulk_edit.py:453 -#: ipam/forms/model_forms.py:578 ipam/forms/model_forms.py:588 -#: ipam/tables/vlans.py:71 templates/ipam/vlangroup.html:38 +#: 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" -#: ipam/forms/bulk_edit.py:446 ipam/models/vlans.py:60 +#: netbox/ipam/forms/bulk_edit.py:446 netbox/ipam/models/vlans.py:60 msgid "VLAN ID ranges" msgstr "Rozsahy ID VLAN" -#: ipam/forms/bulk_edit.py:525 +#: netbox/ipam/forms/bulk_edit.py:525 msgid "Site & Group" msgstr "Stránky a skupina" -#: ipam/forms/bulk_edit.py:539 ipam/forms/model_forms.py:659 -#: ipam/forms/model_forms.py:691 ipam/tables/services.py:19 -#: ipam/tables/services.py:49 templates/ipam/service.html:36 -#: templates/ipam/servicetemplate.html:23 +#: netbox/ipam/forms/bulk_edit.py:539 netbox/ipam/forms/model_forms.py:692 +#: netbox/ipam/forms/model_forms.py:724 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" -#: ipam/forms/bulk_import.py:48 +#: netbox/ipam/forms/bulk_import.py:48 msgid "Import route targets" msgstr "Importovat cíle trasy" -#: ipam/forms/bulk_import.py:54 +#: netbox/ipam/forms/bulk_import.py:54 msgid "Export route targets" msgstr "Exportovat cíle trasy" -#: ipam/forms/bulk_import.py:92 ipam/forms/bulk_import.py:112 -#: ipam/forms/bulk_import.py:132 +#: netbox/ipam/forms/bulk_import.py:92 netbox/ipam/forms/bulk_import.py:112 +#: netbox/ipam/forms/bulk_import.py:132 msgid "Assigned RIR" msgstr "Přiřazené RIR" -#: ipam/forms/bulk_import.py:182 +#: netbox/ipam/forms/bulk_import.py:182 msgid "VLAN's group (if any)" msgstr "Skupina VLAN (pokud existuje)" -#: ipam/forms/bulk_import.py:308 +#: 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)" -#: ipam/forms/bulk_import.py:311 ipam/forms/bulk_import.py:488 -#: ipam/forms/model_forms.py:685 virtualization/filtersets.py:288 -#: virtualization/filtersets.py:327 virtualization/forms/bulk_edit.py:200 -#: virtualization/forms/bulk_edit.py:326 -#: virtualization/forms/bulk_import.py:146 -#: virtualization/forms/bulk_import.py:207 -#: virtualization/forms/filtersets.py:212 -#: virtualization/forms/filtersets.py:248 -#: virtualization/forms/model_forms.py:288 vpn/forms/bulk_import.py:93 -#: vpn/forms/bulk_import.py:290 +#: 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" -#: ipam/forms/bulk_import.py:315 +#: 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)" -#: ipam/forms/bulk_import.py:325 +#: netbox/ipam/forms/bulk_import.py:325 msgid "Is primary" msgstr "Je primární" -#: ipam/forms/bulk_import.py:326 +#: 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í" -#: ipam/forms/bulk_import.py:365 +#: netbox/ipam/forms/bulk_import.py:330 +msgid "Is out-of-band" +msgstr "" + +#: netbox/ipam/forms/bulk_import.py:331 +msgid "Designate this as the out-of-band IP address for the assigned device" +msgstr "" + +#: netbox/ipam/forms/bulk_import.py:371 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" -#: ipam/forms/bulk_import.py:369 +#: netbox/ipam/forms/bulk_import.py:375 +msgid "No device specified; cannot set as out-of-band IP" +msgstr "" + +#: netbox/ipam/forms/bulk_import.py:379 +msgid "Cannot set out-of-band IP for virtual machines" +msgstr "" + +#: netbox/ipam/forms/bulk_import.py:383 msgid "No interface specified; cannot set as primary IP" msgstr "Není určeno žádné rozhraní; nelze nastavit jako primární IP" -#: ipam/forms/bulk_import.py:398 +#: netbox/ipam/forms/bulk_import.py:387 +msgid "No interface specified; cannot set as out-of-band IP" +msgstr "" + +#: netbox/ipam/forms/bulk_import.py:422 msgid "Auth type" msgstr "Typ autentizace" -#: ipam/forms/bulk_import.py:413 +#: netbox/ipam/forms/bulk_import.py:437 msgid "Scope type (app & model)" msgstr "Typ rozsahu (aplikace a model)" -#: ipam/forms/bulk_import.py:440 +#: netbox/ipam/forms/bulk_import.py:464 msgid "Assigned VLAN group" msgstr "Přiřazená skupina VLAN" -#: ipam/forms/bulk_import.py:471 ipam/forms/bulk_import.py:497 +#: netbox/ipam/forms/bulk_import.py:495 netbox/ipam/forms/bulk_import.py:521 msgid "IP protocol" msgstr "Protokol IP" -#: ipam/forms/bulk_import.py:485 +#: netbox/ipam/forms/bulk_import.py:509 msgid "Required if not assigned to a VM" msgstr "Vyžadováno, pokud není přiřazeno k virtuálnímu počítači" -#: ipam/forms/bulk_import.py:492 +#: netbox/ipam/forms/bulk_import.py:516 msgid "Required if not assigned to a device" msgstr "Požadováno, pokud není přiřazeno k zařízení" -#: ipam/forms/bulk_import.py:517 +#: netbox/ipam/forms/bulk_import.py:541 #, 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." -#: ipam/forms/filtersets.py:47 ipam/forms/model_forms.py:63 -#: netbox/navigation/menu.py:189 vpn/forms/model_forms.py:410 +#: 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 msgid "Route Targets" msgstr "Cíle trasy" -#: ipam/forms/filtersets.py:53 ipam/forms/model_forms.py:50 -#: vpn/forms/filtersets.py:224 vpn/forms/model_forms.py:397 +#: 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 msgid "Import targets" msgstr "Importovat cíle" -#: ipam/forms/filtersets.py:58 ipam/forms/model_forms.py:55 -#: vpn/forms/filtersets.py:229 vpn/forms/model_forms.py:402 +#: 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 msgid "Export targets" msgstr "Cíle exportu" -#: ipam/forms/filtersets.py:73 +#: netbox/ipam/forms/filtersets.py:73 msgid "Imported by VRF" msgstr "Importováno VRF" -#: ipam/forms/filtersets.py:78 +#: netbox/ipam/forms/filtersets.py:78 msgid "Exported by VRF" msgstr "Exportováno VRF" -#: ipam/forms/filtersets.py:87 ipam/tables/ip.py:89 templates/ipam/rir.html:30 +#: netbox/ipam/forms/filtersets.py:87 netbox/ipam/tables/ip.py:89 +#: netbox/templates/ipam/rir.html:30 msgid "Private" msgstr "Soukromé" -#: ipam/forms/filtersets.py:105 ipam/forms/filtersets.py:191 -#: ipam/forms/filtersets.py:272 ipam/forms/filtersets.py:326 +#: netbox/ipam/forms/filtersets.py:105 netbox/ipam/forms/filtersets.py:191 +#: netbox/ipam/forms/filtersets.py:272 netbox/ipam/forms/filtersets.py:326 msgid "Address family" msgstr "Rodina adres" -#: ipam/forms/filtersets.py:119 templates/ipam/asnrange.html:25 +#: netbox/ipam/forms/filtersets.py:119 netbox/templates/ipam/asnrange.html:25 msgid "Range" msgstr "Rozsah" -#: ipam/forms/filtersets.py:128 +#: netbox/ipam/forms/filtersets.py:128 msgid "Start" msgstr "Začít" -#: ipam/forms/filtersets.py:132 +#: netbox/ipam/forms/filtersets.py:132 msgid "End" msgstr "Konec" -#: ipam/forms/filtersets.py:186 +#: netbox/ipam/forms/filtersets.py:186 msgid "Search within" msgstr "Vyhledávání uvnitř" -#: ipam/forms/filtersets.py:207 ipam/forms/filtersets.py:342 +#: netbox/ipam/forms/filtersets.py:207 netbox/ipam/forms/filtersets.py:342 msgid "Present in VRF" msgstr "Přítomnost ve VRF" -#: ipam/forms/filtersets.py:311 +#: netbox/ipam/forms/filtersets.py:311 msgid "Device/VM" msgstr "Zařízení/VM" -#: ipam/forms/filtersets.py:321 +#: netbox/ipam/forms/filtersets.py:321 msgid "Parent Prefix" msgstr "Nadřazená předpona" -#: ipam/forms/filtersets.py:347 +#: netbox/ipam/forms/filtersets.py:347 msgid "Assigned Device" msgstr "Přiřazené zařízení" -#: ipam/forms/filtersets.py:352 +#: netbox/ipam/forms/filtersets.py:352 msgid "Assigned VM" msgstr "Přiřazený virtuální počítač" -#: ipam/forms/filtersets.py:366 +#: netbox/ipam/forms/filtersets.py:366 msgid "Assigned to an interface" msgstr "Přiřazeno k rozhraní" -#: ipam/forms/filtersets.py:373 templates/ipam/ipaddress.html:51 +#: netbox/ipam/forms/filtersets.py:373 netbox/templates/ipam/ipaddress.html:51 msgid "DNS Name" msgstr "Název DNS" -#: ipam/forms/filtersets.py:416 ipam/models/vlans.py:235 ipam/tables/ip.py:176 -#: ipam/tables/vlans.py:82 ipam/views.py:971 netbox/navigation/menu.py:193 -#: netbox/navigation/menu.py:195 +#: 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 msgid "VLANs" msgstr "VLAN" -#: ipam/forms/filtersets.py:457 +#: netbox/ipam/forms/filtersets.py:457 msgid "Contains VLAN ID" msgstr "Obsahuje VLAN ID" -#: ipam/forms/filtersets.py:513 ipam/models/vlans.py:176 -#: templates/ipam/vlan.html:31 +#: netbox/ipam/forms/filtersets.py:513 netbox/ipam/models/vlans.py:192 +#: netbox/templates/ipam/vlan.html:31 msgid "VLAN ID" msgstr "ID VLAN" -#: ipam/forms/filtersets.py:556 ipam/forms/model_forms.py:320 -#: ipam/forms/model_forms.py:713 ipam/forms/model_forms.py:739 -#: ipam/tables/vlans.py:195 templates/virtualization/virtualdisk.html:21 -#: templates/virtualization/virtualmachine.html:12 -#: templates/virtualization/vminterface.html:21 -#: templates/vpn/tunneltermination.html:25 -#: virtualization/forms/filtersets.py:197 -#: virtualization/forms/filtersets.py:242 -#: virtualization/forms/model_forms.py:220 -#: virtualization/tables/virtualmachines.py:135 -#: virtualization/tables/virtualmachines.py:190 vpn/choices.py:45 -#: vpn/forms/filtersets.py:293 vpn/forms/model_forms.py:160 -#: vpn/forms/model_forms.py:171 vpn/forms/model_forms.py:273 -#: vpn/forms/model_forms.py:454 +#: netbox/ipam/forms/filtersets.py: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" -#: ipam/forms/model_forms.py:80 templates/ipam/routetarget.html:10 +#: netbox/ipam/forms/model_forms.py:80 +#: netbox/templates/ipam/routetarget.html:10 msgid "Route Target" msgstr "Cíl trasy" -#: ipam/forms/model_forms.py:114 ipam/tables/ip.py:117 -#: templates/ipam/aggregate.html:11 templates/ipam/prefix.html:38 +#: netbox/ipam/forms/model_forms.py:114 netbox/ipam/tables/ip.py:117 +#: netbox/templates/ipam/aggregate.html:11 +#: netbox/templates/ipam/prefix.html:38 msgid "Aggregate" msgstr "Agregát" -#: ipam/forms/model_forms.py:135 templates/ipam/asnrange.html:12 +#: netbox/ipam/forms/model_forms.py:135 netbox/templates/ipam/asnrange.html:12 msgid "ASN Range" msgstr "Řada ASN" -#: ipam/forms/model_forms.py:231 +#: netbox/ipam/forms/model_forms.py:231 msgid "Site/VLAN Assignment" msgstr "Přiřazení webu/VLAN" -#: ipam/forms/model_forms.py:259 templates/ipam/iprange.html:10 +#: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10 msgid "IP Range" msgstr "Rozsah IP" -#: ipam/forms/model_forms.py:295 ipam/forms/model_forms.py:321 -#: ipam/forms/model_forms.py:473 templates/ipam/fhrpgroup.html:19 +#: 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 msgid "FHRP Group" msgstr "Skupina FHRP" -#: ipam/forms/model_forms.py:310 +#: netbox/ipam/forms/model_forms.py:310 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č" -#: ipam/forms/model_forms.py:325 +#: netbox/ipam/forms/model_forms.py:314 +msgid "Make this the out-of-band IP for the device" +msgstr "" + +#: netbox/ipam/forms/model_forms.py:329 msgid "NAT IP (Inside)" msgstr "NAT IP (uvnitř)" -#: ipam/forms/model_forms.py:384 +#: netbox/ipam/forms/model_forms.py:391 msgid "An IP address can only be assigned to a single object." msgstr "IP adresu lze přiřadit pouze jednomu objektu." -#: ipam/forms/model_forms.py:390 ipam/models/ip.py:897 -msgid "" -"Cannot reassign IP address while it is designated as the primary IP for the " -"parent object" +#: netbox/ipam/forms/model_forms.py:398 +msgid "Cannot reassign primary IP address for the parent device/VM" msgstr "" -"Nelze znovu přiřadit adresu IP, pokud je určena jako primární IP pro " -"nadřazený objekt" -#: ipam/forms/model_forms.py:400 +#: netbox/ipam/forms/model_forms.py:402 +msgid "Cannot reassign out-of-Band IP address for the parent device" +msgstr "" + +#: netbox/ipam/forms/model_forms.py:412 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í." -#: ipam/forms/model_forms.py:475 +#: netbox/ipam/forms/model_forms.py:420 +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 msgid "Virtual IP Address" msgstr "Virtuální IP adresa" -#: ipam/forms/model_forms.py:560 +#: netbox/ipam/forms/model_forms.py:593 msgid "Assignment already exists" msgstr "Přiřazení již existuje" -#: ipam/forms/model_forms.py:569 templates/ipam/vlangroup.html:42 +#: netbox/ipam/forms/model_forms.py:602 +#: netbox/templates/ipam/vlangroup.html:42 msgid "VLAN IDs" msgstr "ID VLAN" -#: ipam/forms/model_forms.py:587 +#: netbox/ipam/forms/model_forms.py:620 msgid "Child VLANs" msgstr "Dětské sítě VLAN" -#: ipam/forms/model_forms.py:664 ipam/forms/model_forms.py:696 +#: netbox/ipam/forms/model_forms.py:697 netbox/ipam/forms/model_forms.py:729 msgid "" "Comma-separated list of one or more port numbers. A range may be specified " "using a hyphen." @@ -9197,131 +9853,132 @@ msgstr "" "Seznam jednoho nebo více čísel portů oddělený čárkami. Rozsah lze zadat " "pomocí pomlčky." -#: ipam/forms/model_forms.py:669 templates/ipam/servicetemplate.html:12 +#: netbox/ipam/forms/model_forms.py:702 +#: netbox/templates/ipam/servicetemplate.html:12 msgid "Service Template" msgstr "Šablona služby" -#: ipam/forms/model_forms.py:716 +#: netbox/ipam/forms/model_forms.py:749 msgid "Port(s)" msgstr "Přístav (y)" -#: ipam/forms/model_forms.py:717 ipam/forms/model_forms.py:745 -#: templates/ipam/service.html:21 +#: 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" -#: ipam/forms/model_forms.py:730 +#: netbox/ipam/forms/model_forms.py:763 msgid "Service template" msgstr "Šablona služby" -#: ipam/forms/model_forms.py:742 +#: netbox/ipam/forms/model_forms.py:775 msgid "From Template" msgstr "Z šablony" -#: ipam/forms/model_forms.py:743 +#: netbox/ipam/forms/model_forms.py:776 msgid "Custom" msgstr "Zvyk" -#: ipam/forms/model_forms.py:773 +#: netbox/ipam/forms/model_forms.py:806 msgid "" "Must specify name, protocol, and port(s) if not using a service template." msgstr "" "Pokud nepoužíváte šablonu služby, musíte zadat název, protokol a port (y)." -#: ipam/models/asns.py:34 +#: netbox/ipam/models/asns.py:34 msgid "start" msgstr "začít" -#: ipam/models/asns.py:51 +#: netbox/ipam/models/asns.py:51 msgid "ASN range" msgstr "Řada ASN" -#: ipam/models/asns.py:52 +#: netbox/ipam/models/asns.py:52 msgid "ASN ranges" msgstr "Rozsahy ASN" -#: ipam/models/asns.py:72 +#: netbox/ipam/models/asns.py:72 #, python-brace-format msgid "Starting ASN ({start}) must be lower than ending ASN ({end})." msgstr "Spuštění ASN ({start}) musí být nižší než koncová ASN ({end})." -#: ipam/models/asns.py:104 +#: netbox/ipam/models/asns.py:104 msgid "Regional Internet Registry responsible for this AS number space" msgstr "Regionální internetový registr odpovědný za tento číselný prostor AS" -#: ipam/models/asns.py:109 +#: netbox/ipam/models/asns.py:109 msgid "16- or 32-bit autonomous system number" msgstr "16- nebo 32bitové autonomní systémové číslo" -#: ipam/models/fhrp.py:22 +#: netbox/ipam/models/fhrp.py:22 msgid "group ID" msgstr "ID skupiny" -#: ipam/models/fhrp.py:30 ipam/models/services.py:22 +#: netbox/ipam/models/fhrp.py:30 netbox/ipam/models/services.py:22 msgid "protocol" msgstr "protokol" -#: ipam/models/fhrp.py:38 wireless/models.py:28 +#: netbox/ipam/models/fhrp.py:38 netbox/wireless/models.py:28 msgid "authentication type" msgstr "typ ověřování" -#: ipam/models/fhrp.py:43 +#: netbox/ipam/models/fhrp.py:43 msgid "authentication key" msgstr "ověřovací klíč" -#: ipam/models/fhrp.py:56 +#: netbox/ipam/models/fhrp.py:56 msgid "FHRP group" msgstr "Skupina FHRP" -#: ipam/models/fhrp.py:57 +#: netbox/ipam/models/fhrp.py:57 msgid "FHRP groups" msgstr "Skupiny FHRP" -#: ipam/models/fhrp.py:113 +#: netbox/ipam/models/fhrp.py:113 msgid "FHRP group assignment" msgstr "Přiřazení skupiny FHRP" -#: ipam/models/fhrp.py:114 +#: netbox/ipam/models/fhrp.py:114 msgid "FHRP group assignments" msgstr "Skupinové přiřazení FHRP" -#: ipam/models/ip.py:65 +#: netbox/ipam/models/ip.py:65 msgid "private" msgstr "soukromá" -#: ipam/models/ip.py:66 +#: netbox/ipam/models/ip.py:66 msgid "IP space managed by this RIR is considered private" msgstr "IP prostor spravovaný tímto RIR je považován za soukromý" -#: ipam/models/ip.py:72 netbox/navigation/menu.py:182 +#: netbox/ipam/models/ip.py:72 netbox/netbox/navigation/menu.py:182 msgid "RIRs" msgstr "RIR" -#: ipam/models/ip.py:84 +#: netbox/ipam/models/ip.py:84 msgid "IPv4 or IPv6 network" msgstr "Síť IPv4 nebo IPv6" -#: ipam/models/ip.py:91 +#: netbox/ipam/models/ip.py:91 msgid "Regional Internet Registry responsible for this IP space" msgstr "Regionální internetový registr odpovědný za tento IP prostor" -#: ipam/models/ip.py:101 +#: netbox/ipam/models/ip.py:101 msgid "date added" msgstr "datum přidání" -#: ipam/models/ip.py:115 +#: netbox/ipam/models/ip.py:115 msgid "aggregate" msgstr "agregát" -#: ipam/models/ip.py:116 +#: netbox/ipam/models/ip.py:116 msgid "aggregates" msgstr "agregáty" -#: ipam/models/ip.py:132 +#: netbox/ipam/models/ip.py:132 msgid "Cannot create aggregate with /0 mask." msgstr "Nelze vytvořit agregát s maskou /0." -#: ipam/models/ip.py:144 +#: netbox/ipam/models/ip.py:144 #, python-brace-format msgid "" "Aggregates cannot overlap. {prefix} is already covered by an existing " @@ -9330,7 +9987,7 @@ msgstr "" "Agregáty se nemohou překrývat. {prefix} je již pokryto stávajícím agregátem " "({aggregate})." -#: ipam/models/ip.py:158 +#: netbox/ipam/models/ip.py:158 #, python-brace-format msgid "" "Prefixes cannot overlap aggregates. {prefix} covers an existing aggregate " @@ -9339,251 +9996,269 @@ msgstr "" "Předpony nemohou překrývat agregáty. {prefix} pokrývá existující agregát " "({aggregate})." -#: ipam/models/ip.py:200 ipam/models/ip.py:737 vpn/models/tunnels.py:114 +#: netbox/ipam/models/ip.py:200 netbox/ipam/models/ip.py:737 +#: netbox/vpn/models/tunnels.py:114 msgid "role" msgstr "role" -#: ipam/models/ip.py:201 +#: netbox/ipam/models/ip.py:201 msgid "roles" msgstr "rolí" -#: ipam/models/ip.py:217 ipam/models/ip.py:293 +#: netbox/ipam/models/ip.py:217 netbox/ipam/models/ip.py:293 msgid "prefix" msgstr "předpona" -#: ipam/models/ip.py:218 +#: netbox/ipam/models/ip.py:218 msgid "IPv4 or IPv6 network with mask" msgstr "Síť IPv4 nebo IPv6 s maskou" -#: ipam/models/ip.py:254 +#: netbox/ipam/models/ip.py:254 msgid "Operational status of this prefix" msgstr "Provozní stav této předpony" -#: ipam/models/ip.py:262 +#: netbox/ipam/models/ip.py:262 msgid "The primary function of this prefix" msgstr "Primární funkce této předpony" -#: ipam/models/ip.py:265 +#: netbox/ipam/models/ip.py:265 msgid "is a pool" msgstr "je bazén" -#: ipam/models/ip.py:267 +#: netbox/ipam/models/ip.py:267 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é" -#: ipam/models/ip.py:270 ipam/models/ip.py:537 +#: netbox/ipam/models/ip.py:270 netbox/ipam/models/ip.py:537 msgid "mark utilized" msgstr "použitá značka" -#: ipam/models/ip.py:294 +#: netbox/ipam/models/ip.py:294 msgid "prefixes" msgstr "předpony" -#: ipam/models/ip.py:317 +#: netbox/ipam/models/ip.py:317 msgid "Cannot create prefix with /0 mask." msgstr "Nelze vytvořit předponu s maskou /0." -#: ipam/models/ip.py:324 ipam/models/ip.py:874 +#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:874 #, python-brace-format msgid "VRF {vrf}" msgstr "VRF {vrf}" -#: ipam/models/ip.py:324 ipam/models/ip.py:874 +#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:874 msgid "global table" msgstr "globální tabulka" -#: ipam/models/ip.py:326 +#: netbox/ipam/models/ip.py:326 #, python-brace-format msgid "Duplicate prefix found in {table}: {prefix}" msgstr "Duplicitní předpona nalezena v {table}: {prefix}" -#: ipam/models/ip.py:495 +#: netbox/ipam/models/ip.py:495 msgid "start address" msgstr "Počáteční adresa" -#: ipam/models/ip.py:496 ipam/models/ip.py:500 ipam/models/ip.py:712 +#: netbox/ipam/models/ip.py:496 netbox/ipam/models/ip.py:500 +#: netbox/ipam/models/ip.py:712 msgid "IPv4 or IPv6 address (with mask)" msgstr "Adresa IPv4 nebo IPv6 (s maskou)" -#: ipam/models/ip.py:499 +#: netbox/ipam/models/ip.py:499 msgid "end address" msgstr "koncová adresa" -#: ipam/models/ip.py:526 +#: netbox/ipam/models/ip.py:526 msgid "Operational status of this range" msgstr "Provozní stav tohoto rozsahu" -#: ipam/models/ip.py:534 +#: netbox/ipam/models/ip.py:534 msgid "The primary function of this range" msgstr "Primární funkce tohoto rozsahu" -#: ipam/models/ip.py:548 +#: netbox/ipam/models/ip.py:548 msgid "IP range" msgstr "Rozsah IP" -#: ipam/models/ip.py:549 +#: netbox/ipam/models/ip.py:549 msgid "IP ranges" msgstr "Rozsahy IP" -#: ipam/models/ip.py:565 +#: netbox/ipam/models/ip.py:565 msgid "Starting and ending IP address versions must match" msgstr "Počáteční a koncová verze IP adresy se musí shodovat" -#: ipam/models/ip.py:571 +#: netbox/ipam/models/ip.py:571 msgid "Starting and ending IP address masks must match" msgstr "Počáteční a koncová maska IP adresy se musí shodovat" -#: ipam/models/ip.py:578 +#: netbox/ipam/models/ip.py:578 #, python-brace-format msgid "" "Ending address must be greater than the starting address ({start_address})" msgstr "Koncová adresa musí být větší než počáteční adresa ({start_address})" -#: ipam/models/ip.py:590 +#: netbox/ipam/models/ip.py:590 #, python-brace-format msgid "Defined addresses overlap with range {overlapping_range} in VRF {vrf}" msgstr "" "Definované adresy se překrývají s rozsahem {overlapping_range} na VRF {vrf}" -#: ipam/models/ip.py:599 +#: netbox/ipam/models/ip.py:599 #, python-brace-format msgid "Defined range exceeds maximum supported size ({max_size})" msgstr "" "Definovaný rozsah přesahuje maximální podporovanou velikost ({max_size})" -#: ipam/models/ip.py:711 tenancy/models/contacts.py:82 +#: netbox/ipam/models/ip.py:711 netbox/tenancy/models/contacts.py:82 msgid "address" msgstr "adresa" -#: ipam/models/ip.py:734 +#: netbox/ipam/models/ip.py:734 msgid "The operational status of this IP" msgstr "Provozní stav tohoto IP" -#: ipam/models/ip.py:741 +#: netbox/ipam/models/ip.py:741 msgid "The functional role of this IP" msgstr "Funkční role tohoto IP" -#: ipam/models/ip.py:765 templates/ipam/ipaddress.html:72 +#: netbox/ipam/models/ip.py:765 netbox/templates/ipam/ipaddress.html:72 msgid "NAT (inside)" msgstr "NAT (uvnitř)" -#: ipam/models/ip.py:766 +#: netbox/ipam/models/ip.py:766 msgid "The IP for which this address is the \"outside\" IP" msgstr "IP, pro kterou je tato adresa „vnější“ IP" -#: ipam/models/ip.py:773 +#: netbox/ipam/models/ip.py:773 msgid "Hostname or FQDN (not case-sensitive)" msgstr "Název hostitele nebo FQDN (nerozlišuje velká a malá písmena)" -#: ipam/models/ip.py:789 ipam/models/services.py:94 +#: netbox/ipam/models/ip.py:789 netbox/ipam/models/services.py:94 msgid "IP addresses" msgstr "IP adresy" -#: ipam/models/ip.py:845 +#: netbox/ipam/models/ip.py:845 msgid "Cannot create IP address with /0 mask." msgstr "Nelze vytvořit IP adresu s maskou /0." -#: ipam/models/ip.py:851 +#: netbox/ipam/models/ip.py:851 #, python-brace-format msgid "{ip} is a network ID, which may not be assigned to an interface." msgstr "{ip} je síťové ID, které nemusí být přiřazeno rozhraní." -#: ipam/models/ip.py:862 +#: netbox/ipam/models/ip.py:862 #, python-brace-format msgid "" "{ip} is a broadcast address, which may not be assigned to an interface." msgstr "{ip} je vysílací adresa, která nemusí být přiřazena k rozhraní." -#: ipam/models/ip.py:876 +#: netbox/ipam/models/ip.py:876 #, python-brace-format msgid "Duplicate IP address found in {table}: {ipaddress}" msgstr "Duplicitní adresa IP nalezena v {table}: {ipaddress}" -#: ipam/models/ip.py:903 +#: netbox/ipam/models/ip.py:897 +msgid "" +"Cannot reassign IP address while it is designated as the primary IP for the " +"parent object" +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 msgid "Only IPv6 addresses can be assigned SLAAC status" msgstr "Stav SLAAC lze přiřadit pouze adresám IPv6" -#: ipam/models/services.py:33 +#: netbox/ipam/models/services.py:33 msgid "port numbers" msgstr "čísla portů" -#: ipam/models/services.py:59 +#: netbox/ipam/models/services.py:59 msgid "service template" msgstr "šablona služby" -#: ipam/models/services.py:60 +#: netbox/ipam/models/services.py:60 msgid "service templates" msgstr "šablony služeb" -#: ipam/models/services.py:95 +#: netbox/ipam/models/services.py:95 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" -#: ipam/models/services.py:102 +#: netbox/ipam/models/services.py:102 msgid "service" msgstr "služba" -#: ipam/models/services.py:103 +#: netbox/ipam/models/services.py:103 msgid "services" msgstr "služby" -#: ipam/models/services.py:117 +#: netbox/ipam/models/services.py:117 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." -#: ipam/models/services.py:119 +#: netbox/ipam/models/services.py:119 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." -#: ipam/models/vlans.py:85 +#: netbox/ipam/models/vlans.py:85 msgid "VLAN groups" msgstr "Skupiny VLAN" -#: ipam/models/vlans.py:95 +#: netbox/ipam/models/vlans.py:95 msgid "Cannot set scope_type without scope_id." msgstr "Nelze nastavit scope_type bez scope_id." -#: ipam/models/vlans.py:97 +#: netbox/ipam/models/vlans.py:97 msgid "Cannot set scope_id without scope_type." msgstr "Nelze nastavit scope_id bez scope_type." -#: ipam/models/vlans.py:101 +#: netbox/ipam/models/vlans.py:105 +#, python-brace-format +msgid "Starting VLAN ID in range ({value}) cannot be less than {minimum}" +msgstr "" + +#: netbox/ipam/models/vlans.py:111 +#, python-brace-format +msgid "Ending VLAN ID in range ({value}) cannot exceed {maximum}" +msgstr "" + +#: 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 "" + +#: netbox/ipam/models/vlans.py:124 msgid "Ranges cannot overlap." msgstr "Rozsahy se nemohou překrývat." -#: ipam/models/vlans.py:106 -#, python-brace-format -msgid "" -"Maximum child VID must be greater than or equal to minimum child VID " -"({value})" -msgstr "" -"Maximální dětský VID musí být větší nebo roven minimálnímu dětskému VID " -"({value})" - -#: ipam/models/vlans.py:165 +#: netbox/ipam/models/vlans.py:181 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)" -#: ipam/models/vlans.py:173 +#: netbox/ipam/models/vlans.py:189 msgid "VLAN group (optional)" msgstr "Skupina VLAN (volitelné)" -#: ipam/models/vlans.py:181 +#: netbox/ipam/models/vlans.py:197 msgid "Numeric VLAN ID (1-4094)" msgstr "Numerické ID VLAN (1-4094)" -#: ipam/models/vlans.py:199 +#: netbox/ipam/models/vlans.py:215 msgid "Operational status of this VLAN" msgstr "Provozní stav této VLAN" -#: ipam/models/vlans.py:207 +#: netbox/ipam/models/vlans.py:223 msgid "The primary function of this VLAN" msgstr "Primární funkce této VLAN" -#: ipam/models/vlans.py:250 +#: netbox/ipam/models/vlans.py:266 #, python-brace-format msgid "" "VLAN is assigned to group {group} (scope: {scope}); cannot also assign to " @@ -9592,164 +10267,166 @@ msgstr "" "VLAN je přiřazena ke skupině {group} (oblast působnosti: {scope}); nelze " "také přiřadit k webu {site}." -#: ipam/models/vlans.py:259 +#: netbox/ipam/models/vlans.py:275 #, 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}" -#: ipam/models/vrfs.py:30 +#: netbox/ipam/models/vrfs.py:30 msgid "route distinguisher" msgstr "rozlišovač trasy" -#: ipam/models/vrfs.py:31 +#: netbox/ipam/models/vrfs.py:31 msgid "Unique route distinguisher (as defined in RFC 4364)" msgstr "Jedinečný rozlišovač tras (podle definice v RFC 4364)" -#: ipam/models/vrfs.py:42 +#: netbox/ipam/models/vrfs.py:42 msgid "enforce unique space" msgstr "vynutit jedinečný prostor" -#: ipam/models/vrfs.py:43 +#: netbox/ipam/models/vrfs.py:43 msgid "Prevent duplicate prefixes/IP addresses within this VRF" msgstr "Zabraňte duplicitním předponům/IP adresám v tomto VRF" -#: ipam/models/vrfs.py:63 netbox/navigation/menu.py:186 -#: netbox/navigation/menu.py:188 +#: netbox/ipam/models/vrfs.py:63 netbox/netbox/navigation/menu.py:186 +#: netbox/netbox/navigation/menu.py:188 msgid "VRFs" msgstr "VRF" -#: ipam/models/vrfs.py:82 +#: netbox/ipam/models/vrfs.py:82 msgid "Route target value (formatted in accordance with RFC 4360)" msgstr "Cílová hodnota trasy (formátovaná v souladu s RFC 4360)" -#: ipam/models/vrfs.py:94 +#: netbox/ipam/models/vrfs.py:94 msgid "route target" msgstr "cíl trasy" -#: ipam/models/vrfs.py:95 +#: netbox/ipam/models/vrfs.py:95 msgid "route targets" msgstr "cíle trasy" -#: ipam/tables/asn.py:52 +#: netbox/ipam/tables/asn.py:52 msgid "ASDOT" msgstr "ASDOT" -#: ipam/tables/asn.py:57 +#: netbox/ipam/tables/asn.py:57 msgid "Site Count" msgstr "Počet stránek" -#: ipam/tables/asn.py:62 +#: netbox/ipam/tables/asn.py:62 msgid "Provider Count" msgstr "Počet poskytovatelů" -#: ipam/tables/ip.py:95 netbox/navigation/menu.py:179 -#: netbox/navigation/menu.py:181 +#: netbox/ipam/tables/ip.py:95 netbox/netbox/navigation/menu.py:179 +#: netbox/netbox/navigation/menu.py:181 msgid "Aggregates" msgstr "Agregáty" -#: ipam/tables/ip.py:125 +#: netbox/ipam/tables/ip.py:125 msgid "Added" msgstr "Přidal" -#: ipam/tables/ip.py:128 ipam/tables/ip.py:166 ipam/tables/vlans.py:142 -#: ipam/views.py:346 netbox/navigation/menu.py:165 -#: netbox/navigation/menu.py:167 templates/ipam/vlan.html:84 +#: 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 msgid "Prefixes" msgstr "Předpony" -#: ipam/tables/ip.py:131 ipam/tables/ip.py:270 ipam/tables/ip.py:324 -#: ipam/tables/vlans.py:86 templates/dcim/device.html:260 -#: templates/ipam/aggregate.html:24 templates/ipam/iprange.html:29 -#: templates/ipam/prefix.html:106 +#: 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/templates/dcim/device.html:260 +#: netbox/templates/ipam/aggregate.html:24 +#: netbox/templates/ipam/iprange.html:29 netbox/templates/ipam/prefix.html:106 msgid "Utilization" msgstr "Využití" -#: ipam/tables/ip.py:171 netbox/navigation/menu.py:161 +#: netbox/ipam/tables/ip.py:171 netbox/netbox/navigation/menu.py:161 msgid "IP Ranges" msgstr "Rozsahy IP" -#: ipam/tables/ip.py:221 +#: netbox/ipam/tables/ip.py:221 msgid "Prefix (Flat)" msgstr "Předpona (plochá)" -#: ipam/tables/ip.py:225 +#: netbox/ipam/tables/ip.py:225 msgid "Depth" msgstr "Hloubka" -#: ipam/tables/ip.py:262 +#: netbox/ipam/tables/ip.py:262 msgid "Pool" msgstr "Bazén" -#: ipam/tables/ip.py:266 ipam/tables/ip.py:320 +#: netbox/ipam/tables/ip.py:266 netbox/ipam/tables/ip.py:320 msgid "Marked Utilized" msgstr "Označeno Využito" -#: ipam/tables/ip.py:304 +#: netbox/ipam/tables/ip.py:304 msgid "Start address" msgstr "Počáteční adresa" -#: ipam/tables/ip.py:383 +#: netbox/ipam/tables/ip.py:383 msgid "NAT (Inside)" msgstr "NAT (uvnitř)" -#: ipam/tables/ip.py:388 +#: netbox/ipam/tables/ip.py:388 msgid "NAT (Outside)" msgstr "NAT (venku)" -#: ipam/tables/ip.py:393 +#: netbox/ipam/tables/ip.py:393 msgid "Assigned" msgstr "Přiřazeno" -#: ipam/tables/ip.py:429 templates/vpn/l2vpntermination.html:16 -#: vpn/forms/filtersets.py:240 +#: netbox/ipam/tables/ip.py:429 netbox/templates/vpn/l2vpntermination.html:16 +#: netbox/vpn/forms/filtersets.py:240 msgid "Assigned Object" msgstr "Přiřazený objekt" -#: ipam/tables/vlans.py:68 +#: netbox/ipam/tables/vlans.py:68 msgid "Scope Type" msgstr "Typ rozsahu" -#: ipam/tables/vlans.py:76 +#: netbox/ipam/tables/vlans.py:76 msgid "VID Ranges" msgstr "Rozsahy VID" -#: ipam/tables/vlans.py:111 ipam/tables/vlans.py:214 -#: templates/dcim/inc/interface_vlans_table.html:4 +#: netbox/ipam/tables/vlans.py:111 netbox/ipam/tables/vlans.py:214 +#: netbox/templates/dcim/inc/interface_vlans_table.html:4 msgid "VID" msgstr "VIDIO" -#: ipam/tables/vrfs.py:30 +#: netbox/ipam/tables/vrfs.py:30 msgid "RD" msgstr "RD" -#: ipam/tables/vrfs.py:33 +#: netbox/ipam/tables/vrfs.py:33 msgid "Unique" msgstr "Unikátní" -#: ipam/tables/vrfs.py:37 vpn/tables/l2vpn.py:27 +#: netbox/ipam/tables/vrfs.py:37 netbox/vpn/tables/l2vpn.py:27 msgid "Import Targets" msgstr "Importovat cíle" -#: ipam/tables/vrfs.py:42 vpn/tables/l2vpn.py:32 +#: netbox/ipam/tables/vrfs.py:42 netbox/vpn/tables/l2vpn.py:32 msgid "Export Targets" msgstr "Cíle exportu" -#: ipam/validators.py:9 +#: netbox/ipam/validators.py:9 #, python-brace-format msgid "{prefix} is not a valid prefix. Did you mean {suggested}?" msgstr "{prefix} není platná předpona. Mysleli jste {suggested}?" -#: ipam/validators.py:16 +#: netbox/ipam/validators.py:16 #, python-format msgid "The prefix length must be less than or equal to %(limit_value)s." msgstr "Délka předpony musí být menší nebo rovna %(limit_value)s." -#: ipam/validators.py:24 +#: netbox/ipam/validators.py:24 #, python-format msgid "The prefix length must be greater than or equal to %(limit_value)s." msgstr "Délka předpony musí být větší nebo rovna %(limit_value)s." -#: ipam/validators.py:33 +#: netbox/ipam/validators.py:33 msgid "" "Only alphanumeric characters, asterisks, hyphens, periods, and underscores " "are allowed in DNS names" @@ -9757,31 +10434,31 @@ msgstr "" "V názvech DNS jsou povoleny pouze alfanumerické znaky, hvězdičky, pomlčky, " "tečky a podtržítka" -#: ipam/views.py:533 +#: netbox/ipam/views.py:533 msgid "Child Prefixes" msgstr "Dětské předpony" -#: ipam/views.py:569 +#: netbox/ipam/views.py:569 msgid "Child Ranges" msgstr "Dětské rozsahy" -#: ipam/views.py:898 +#: netbox/ipam/views.py:898 msgid "Related IPs" msgstr "Související IP adresy" -#: ipam/views.py:1127 +#: netbox/ipam/views.py:1127 msgid "Device Interfaces" msgstr "Rozhraní zařízení" -#: ipam/views.py:1145 +#: netbox/ipam/views.py:1145 msgid "VM Interfaces" msgstr "Rozhraní virtuálních počítačů" -#: netbox/api/fields.py:65 +#: netbox/netbox/api/fields.py:65 msgid "This field may not be blank." msgstr "Toto pole nesmí být prázdné." -#: netbox/api/fields.py:70 +#: netbox/netbox/api/fields.py:70 msgid "" "Value must be passed directly (e.g. \"foo\": 123); do not use a dictionary " "or list." @@ -9789,325 +10466,338 @@ msgstr "" "Hodnota musí být předána přímo (např. „foo“: 123); nepoužívejte slovník ani " "seznam." -#: netbox/api/fields.py:91 +#: netbox/netbox/api/fields.py:91 #, python-brace-format msgid "{value} is not a valid choice." msgstr "{value} není platná volba." -#: netbox/api/fields.py:104 +#: netbox/netbox/api/fields.py:104 #, python-brace-format msgid "Invalid content type: {content_type}" msgstr "Neplatný typ obsahu: {content_type}" -#: netbox/api/fields.py:105 +#: netbox/netbox/api/fields.py:105 msgid "Invalid value. Specify a content type as '.'." msgstr "Neplatná hodnota. Zadejte typ obsahu jako '.„." -#: netbox/api/fields.py:167 +#: netbox/netbox/api/fields.py:167 msgid "Ranges must be specified in the form (lower, upper)." msgstr "Rozsahy musí být specifikovány ve formuláři (dolní, horní)." -#: netbox/api/fields.py:169 +#: netbox/netbox/api/fields.py:169 msgid "Range boundaries must be defined as integers." msgstr "Hranice rozsahu musí být definovány jako celá čísla." -#: netbox/api/serializers/fields.py:40 +#: netbox/netbox/api/serializers/fields.py:40 #, python-brace-format msgid "{class_name} must implement get_view_name()" msgstr "{class_name} musí implementovat get_view_name ()" -#: netbox/authentication/__init__.py:138 +#: netbox/netbox/authentication/__init__.py:138 #, python-brace-format msgid "Invalid permission {permission} for model {model}" msgstr "Neplatné oprávnění {permission} pro model {model}" -#: netbox/choices.py:49 +#: netbox/netbox/choices.py:49 msgid "Dark Red" msgstr "Tmavě červená" -#: netbox/choices.py:52 +#: netbox/netbox/choices.py:52 msgid "Rose" msgstr "růže" -#: netbox/choices.py:53 +#: netbox/netbox/choices.py:53 msgid "Fuchsia" msgstr "Fuchsiová" -#: netbox/choices.py:55 +#: netbox/netbox/choices.py:55 msgid "Dark Purple" msgstr "Tmavě fialová" -#: netbox/choices.py:58 +#: netbox/netbox/choices.py:58 msgid "Light Blue" msgstr "Světle modrá" -#: netbox/choices.py:61 +#: netbox/netbox/choices.py:61 msgid "Aqua" msgstr "Aqua" -#: netbox/choices.py:62 +#: netbox/netbox/choices.py:62 msgid "Dark Green" msgstr "Tmavě zelená" -#: netbox/choices.py:64 +#: netbox/netbox/choices.py:64 msgid "Light Green" msgstr "Světle zelená" -#: netbox/choices.py:65 +#: netbox/netbox/choices.py:65 msgid "Lime" msgstr "Limetka" -#: netbox/choices.py:67 +#: netbox/netbox/choices.py:67 msgid "Amber" msgstr "Jantar" -#: netbox/choices.py:69 +#: netbox/netbox/choices.py:69 msgid "Dark Orange" msgstr "Tmavě oranžová" -#: netbox/choices.py:70 +#: netbox/netbox/choices.py:70 msgid "Brown" msgstr "Hnědý" -#: netbox/choices.py:71 +#: netbox/netbox/choices.py:71 msgid "Light Grey" msgstr "Světle šedá" -#: netbox/choices.py:72 +#: netbox/netbox/choices.py:72 msgid "Grey" msgstr "Šedá" -#: netbox/choices.py:73 +#: netbox/netbox/choices.py:73 msgid "Dark Grey" msgstr "Tmavě šedá" -#: netbox/choices.py:128 +#: netbox/netbox/choices.py:128 msgid "Direct" msgstr "Přímo" -#: netbox/choices.py:129 +#: netbox/netbox/choices.py:129 msgid "Upload" msgstr "Nahrát" -#: netbox/choices.py:141 netbox/choices.py:155 +#: netbox/netbox/choices.py:141 netbox/netbox/choices.py:155 msgid "Auto-detect" msgstr "Automatická detekce" -#: netbox/choices.py:156 +#: netbox/netbox/choices.py:156 msgid "Comma" msgstr "Čárka" -#: netbox/choices.py:157 +#: netbox/netbox/choices.py:157 msgid "Semicolon" msgstr "Středník" -#: netbox/choices.py:158 +#: netbox/netbox/choices.py:158 msgid "Tab" msgstr "Záložka" -#: netbox/config/__init__.py:67 +#: netbox/netbox/config/__init__.py:67 #, python-brace-format msgid "Invalid configuration parameter: {item}" msgstr "Neplatný parametr konfigurace: {item}" -#: netbox/config/parameters.py:22 templates/core/inc/config_data.html:62 +#: netbox/netbox/config/parameters.py:22 +#: netbox/templates/core/inc/config_data.html:62 msgid "Login banner" msgstr "Přihlašovací banner" -#: netbox/config/parameters.py:24 +#: netbox/netbox/config/parameters.py:24 msgid "Additional content to display on the login page" msgstr "Další obsah k zobrazení na přihlašovací stránce" -#: netbox/config/parameters.py:33 templates/core/inc/config_data.html:66 +#: netbox/netbox/config/parameters.py:33 +#: netbox/templates/core/inc/config_data.html:66 msgid "Maintenance banner" msgstr "Banner údržby" -#: netbox/config/parameters.py:35 +#: netbox/netbox/config/parameters.py:35 msgid "Additional content to display when in maintenance mode" msgstr "Další obsah k zobrazení v režimu údržby" -#: netbox/config/parameters.py:44 templates/core/inc/config_data.html:70 +#: netbox/netbox/config/parameters.py:44 +#: netbox/templates/core/inc/config_data.html:70 msgid "Top banner" msgstr "Horní banner" -#: netbox/config/parameters.py:46 +#: netbox/netbox/config/parameters.py:46 msgid "Additional content to display at the top of every page" msgstr "Další obsah, který se má zobrazit v horní části každé stránky" -#: netbox/config/parameters.py:55 templates/core/inc/config_data.html:74 +#: netbox/netbox/config/parameters.py:55 +#: netbox/templates/core/inc/config_data.html:74 msgid "Bottom banner" msgstr "Spodní banner" -#: netbox/config/parameters.py:57 +#: netbox/netbox/config/parameters.py:57 msgid "Additional content to display at the bottom of every page" msgstr "Další obsah, který se má zobrazit v dolní části každé stránky" -#: netbox/config/parameters.py:68 +#: netbox/netbox/config/parameters.py:68 msgid "Globally unique IP space" msgstr "Globálně jedinečný IP prostor" -#: netbox/config/parameters.py:70 +#: netbox/netbox/config/parameters.py:70 msgid "Enforce unique IP addressing within the global table" msgstr "Vynutit jedinečné IP adresování v globální tabulce" -#: netbox/config/parameters.py:75 templates/core/inc/config_data.html:44 +#: netbox/netbox/config/parameters.py:75 +#: netbox/templates/core/inc/config_data.html:44 msgid "Prefer IPv4" msgstr "Upřednostňujte IPv4" -#: netbox/config/parameters.py:77 +#: netbox/netbox/config/parameters.py:77 msgid "Prefer IPv4 addresses over IPv6" msgstr "Upřednostňujte IPv4 adresy před IPv6" -#: netbox/config/parameters.py:84 +#: netbox/netbox/config/parameters.py:84 msgid "Rack unit height" msgstr "Výška regálu" -#: netbox/config/parameters.py:86 +#: netbox/netbox/config/parameters.py:86 msgid "Default unit height for rendered rack elevations" msgstr "Výchozí výška jednotky pro rendrované výšky stojanu" -#: netbox/config/parameters.py:91 +#: netbox/netbox/config/parameters.py:91 msgid "Rack unit width" msgstr "Šířka regálu" -#: netbox/config/parameters.py:93 +#: netbox/netbox/config/parameters.py:93 msgid "Default unit width for rendered rack elevations" msgstr "Výchozí šířka jednotky pro rendrované výšky stojanu" -#: netbox/config/parameters.py:100 +#: netbox/netbox/config/parameters.py:100 msgid "Powerfeed voltage" msgstr "Napájecí napětí" -#: netbox/config/parameters.py:102 +#: netbox/netbox/config/parameters.py:102 msgid "Default voltage for powerfeeds" msgstr "Výchozí napětí pro napájecí zdroje" -#: netbox/config/parameters.py:107 +#: netbox/netbox/config/parameters.py:107 msgid "Powerfeed amperage" msgstr "Napájecí proud" -#: netbox/config/parameters.py:109 +#: netbox/netbox/config/parameters.py:109 msgid "Default amperage for powerfeeds" msgstr "Výchozí proud pro napájecí zdroje" -#: netbox/config/parameters.py:114 +#: netbox/netbox/config/parameters.py:114 msgid "Powerfeed max utilization" msgstr "Maximální využití napájecího zdroje" -#: netbox/config/parameters.py:116 +#: netbox/netbox/config/parameters.py:116 msgid "Default max utilization for powerfeeds" msgstr "Výchozí maximální využití pro napájecí zdroje" -#: netbox/config/parameters.py:123 templates/core/inc/config_data.html:53 +#: netbox/netbox/config/parameters.py:123 +#: netbox/templates/core/inc/config_data.html:53 msgid "Allowed URL schemes" msgstr "Povolená schémata adres URL" -#: netbox/config/parameters.py:128 +#: netbox/netbox/config/parameters.py:128 msgid "Permitted schemes for URLs in user-provided content" msgstr "Povolená schémata pro adresy URL v obsahu poskytovaném uživatelem" -#: netbox/config/parameters.py:136 +#: netbox/netbox/config/parameters.py:136 msgid "Default page size" msgstr "Výchozí velikost stránky" -#: netbox/config/parameters.py:142 +#: netbox/netbox/config/parameters.py:142 msgid "Maximum page size" msgstr "Maximální velikost stránky" -#: netbox/config/parameters.py:150 templates/core/inc/config_data.html:96 +#: netbox/netbox/config/parameters.py:150 +#: netbox/templates/core/inc/config_data.html:96 msgid "Custom validators" msgstr "Vlastní validátory" -#: netbox/config/parameters.py:152 +#: netbox/netbox/config/parameters.py:152 msgid "Custom validation rules (JSON)" msgstr "Vlastní ověřovací pravidla (JSON)" -#: netbox/config/parameters.py:160 templates/core/inc/config_data.html:104 +#: netbox/netbox/config/parameters.py:160 +#: netbox/templates/core/inc/config_data.html:104 msgid "Protection rules" msgstr "Pravidla ochrany" -#: netbox/config/parameters.py:162 +#: netbox/netbox/config/parameters.py:162 msgid "Deletion protection rules (JSON)" msgstr "Pravidla ochrany proti mazání (JSON)" -#: netbox/config/parameters.py:172 templates/core/inc/config_data.html:117 +#: netbox/netbox/config/parameters.py:172 +#: netbox/templates/core/inc/config_data.html:117 msgid "Default preferences" msgstr "Výchozí předvolby" -#: netbox/config/parameters.py:174 +#: netbox/netbox/config/parameters.py:174 msgid "Default preferences for new users" msgstr "Výchozí předvolby pro nové uživatele" -#: netbox/config/parameters.py:181 templates/core/inc/config_data.html:129 +#: netbox/netbox/config/parameters.py:181 +#: netbox/templates/core/inc/config_data.html:129 msgid "Maintenance mode" msgstr "Režim údržby" -#: netbox/config/parameters.py:183 +#: netbox/netbox/config/parameters.py:183 msgid "Enable maintenance mode" msgstr "Povolit režim údržby" -#: netbox/config/parameters.py:188 templates/core/inc/config_data.html:133 +#: netbox/netbox/config/parameters.py:188 +#: netbox/templates/core/inc/config_data.html:133 msgid "GraphQL enabled" msgstr "GraphQL povoleno" -#: netbox/config/parameters.py:190 +#: netbox/netbox/config/parameters.py:190 msgid "Enable the GraphQL API" msgstr "Povolte rozhraní GraphQL API" -#: netbox/config/parameters.py:195 templates/core/inc/config_data.html:137 +#: netbox/netbox/config/parameters.py:195 +#: netbox/templates/core/inc/config_data.html:137 msgid "Changelog retention" msgstr "Zachování seznamu změn" -#: netbox/config/parameters.py:197 +#: netbox/netbox/config/parameters.py:197 msgid "Days to retain changelog history (set to zero for unlimited)" msgstr "Dny pro uchování historie changelogu (neomezeně nastaveno na nulu)" -#: netbox/config/parameters.py:202 +#: netbox/netbox/config/parameters.py:202 msgid "Job result retention" msgstr "Zachování výsledků úlohy" -#: netbox/config/parameters.py:204 +#: netbox/netbox/config/parameters.py:204 msgid "Days to retain job result history (set to zero for unlimited)" msgstr "" "Dny pro uchování historie výsledků úlohy (neomezeně nastaveno na nulu)" -#: netbox/config/parameters.py:209 templates/core/inc/config_data.html:145 +#: netbox/netbox/config/parameters.py:209 +#: netbox/templates/core/inc/config_data.html:145 msgid "Maps URL" msgstr "URL mapy" -#: netbox/config/parameters.py:211 +#: netbox/netbox/config/parameters.py:211 msgid "Base URL for mapping geographic locations" msgstr "Základní adresa URL pro mapování geografických lokalit" -#: netbox/forms/__init__.py:12 +#: netbox/netbox/forms/__init__.py:12 msgid "Partial match" msgstr "Částečná shoda" -#: netbox/forms/__init__.py:13 +#: netbox/netbox/forms/__init__.py:13 msgid "Exact match" msgstr "Přesná shoda" -#: netbox/forms/__init__.py:14 +#: netbox/netbox/forms/__init__.py:14 msgid "Starts with" msgstr "Začíná s" -#: netbox/forms/__init__.py:15 +#: netbox/netbox/forms/__init__.py:15 msgid "Ends with" msgstr "Končí" -#: netbox/forms/__init__.py:16 +#: netbox/netbox/forms/__init__.py:16 msgid "Regex" msgstr "Regex" -#: netbox/forms/__init__.py:34 +#: netbox/netbox/forms/__init__.py:34 msgid "Object type(s)" msgstr "Typ (typy) objektu" -#: netbox/forms/__init__.py:40 +#: netbox/netbox/forms/__init__.py:40 msgid "Lookup" msgstr "Vyhledávání" -#: netbox/forms/base.py:90 +#: netbox/netbox/forms/base.py:90 msgid "" "Tag slugs separated by commas, encased with double quotes (e.g. " "\"tag1,tag2,tag3\")" @@ -10115,414 +10805,425 @@ msgstr "" "Označte slimáky oddělené čárkami, uzavřené dvojitými uvozovkami (např. " "„tag1, tag2, tag3\")" -#: netbox/forms/base.py:120 +#: netbox/netbox/forms/base.py:120 msgid "Add tags" msgstr "Přidat štítky" -#: netbox/forms/base.py:125 +#: netbox/netbox/forms/base.py:125 msgid "Remove tags" msgstr "Odstranit značky" -#: netbox/forms/mixins.py:38 +#: netbox/netbox/forms/mixins.py:38 #, python-brace-format msgid "{class_name} must specify a model class." msgstr "{class_name} musí zadat třídu modelu." -#: netbox/models/features.py:280 +#: netbox/netbox/models/features.py:280 #, python-brace-format msgid "Unknown field name '{name}' in custom field data." msgstr "Neznámý název pole '{name}'v datech vlastního pole." -#: netbox/models/features.py:286 +#: netbox/netbox/models/features.py:286 #, python-brace-format msgid "Invalid value for custom field '{name}': {error}" msgstr "Neplatná hodnota pro vlastní pole '{name}„: {error}" -#: netbox/models/features.py:295 +#: netbox/netbox/models/features.py:295 #, python-brace-format msgid "Custom field '{name}' must have a unique value." msgstr "Vlastní pole '{name}Musí mít jedinečnou hodnotu." -#: netbox/models/features.py:302 +#: netbox/netbox/models/features.py:302 #, python-brace-format msgid "Missing required custom field '{name}'." msgstr "Chybí povinné vlastní pole '{name}„." -#: netbox/models/features.py:462 +#: netbox/netbox/models/features.py:462 msgid "Remote data source" msgstr "Vzdálený zdroj dat" -#: netbox/models/features.py:472 +#: netbox/netbox/models/features.py:472 msgid "data path" msgstr "datová cesta" -#: netbox/models/features.py:476 +#: netbox/netbox/models/features.py:476 msgid "Path to remote file (relative to data source root)" msgstr "Cesta ke vzdálenému souboru (vzhledem k kořenovému zdroji dat)" -#: netbox/models/features.py:479 +#: netbox/netbox/models/features.py:479 msgid "auto sync enabled" msgstr "automatická synchronizace povolena" -#: netbox/models/features.py:481 +#: netbox/netbox/models/features.py:481 msgid "Enable automatic synchronization of data when the data file is updated" msgstr "" "Povolit automatickou synchronizaci dat při aktualizaci datového souboru" -#: netbox/models/features.py:484 +#: netbox/netbox/models/features.py:484 msgid "date synced" msgstr "datum synchronizováno" -#: netbox/models/features.py:578 +#: netbox/netbox/models/features.py:578 #, python-brace-format msgid "{class_name} must implement a sync_data() method." msgstr "{class_name} musí implementovat metodu sync_data ()." -#: netbox/navigation/menu.py:11 +#: netbox/netbox/navigation/menu.py:11 msgid "Organization" msgstr "Organizace" -#: netbox/navigation/menu.py:19 +#: netbox/netbox/navigation/menu.py:19 msgid "Site Groups" msgstr "Skupiny webů" -#: netbox/navigation/menu.py:27 +#: netbox/netbox/navigation/menu.py:27 msgid "Tenant Groups" msgstr "Skupiny nájemců" -#: netbox/navigation/menu.py:34 +#: netbox/netbox/navigation/menu.py:34 msgid "Contact Groups" msgstr "Skupiny kontaktů" -#: netbox/navigation/menu.py:35 templates/tenancy/contactrole.html:8 +#: netbox/netbox/navigation/menu.py:35 +#: netbox/templates/tenancy/contactrole.html:8 msgid "Contact Roles" msgstr "Kontaktní role" -#: netbox/navigation/menu.py:36 +#: netbox/netbox/navigation/menu.py:36 msgid "Contact Assignments" msgstr "Kontaktní přiřazení" -#: netbox/navigation/menu.py:50 +#: netbox/netbox/navigation/menu.py:50 msgid "Rack Roles" msgstr "Role stojanu" -#: netbox/navigation/menu.py:54 +#: netbox/netbox/navigation/menu.py:54 msgid "Elevations" msgstr "Nadmořská výška" -#: netbox/navigation/menu.py:60 netbox/navigation/menu.py:62 +#: netbox/netbox/navigation/menu.py:60 netbox/netbox/navigation/menu.py:62 msgid "Rack Types" msgstr "Typy stojanů" -#: netbox/navigation/menu.py:76 +#: netbox/netbox/navigation/menu.py:76 msgid "Modules" msgstr "Moduly" -#: netbox/navigation/menu.py:80 templates/dcim/device.html:160 -#: templates/dcim/virtualdevicecontext.html:8 +#: netbox/netbox/navigation/menu.py:80 netbox/templates/dcim/device.html:160 +#: netbox/templates/dcim/virtualdevicecontext.html:8 msgid "Virtual Device Contexts" msgstr "Kontexty virtuálních zařízení" -#: netbox/navigation/menu.py:88 +#: netbox/netbox/navigation/menu.py:88 msgid "Manufacturers" msgstr "Výrobci" -#: netbox/navigation/menu.py:92 +#: netbox/netbox/navigation/menu.py:92 msgid "Device Components" msgstr "Komponenty zařízení" -#: netbox/navigation/menu.py:104 templates/dcim/inventoryitemrole.html:8 +#: netbox/netbox/navigation/menu.py:104 +#: netbox/templates/dcim/inventoryitemrole.html:8 msgid "Inventory Item Roles" msgstr "Role položek inventáře" -#: netbox/navigation/menu.py:111 netbox/navigation/menu.py:115 +#: netbox/netbox/navigation/menu.py:111 netbox/netbox/navigation/menu.py:115 msgid "Connections" msgstr "Spojení" -#: netbox/navigation/menu.py:117 +#: netbox/netbox/navigation/menu.py:117 msgid "Cables" msgstr "Kabely" -#: netbox/navigation/menu.py:118 +#: netbox/netbox/navigation/menu.py:118 msgid "Wireless Links" msgstr "Bezdrátové spoje" -#: netbox/navigation/menu.py:121 +#: netbox/netbox/navigation/menu.py:121 msgid "Interface Connections" msgstr "Připojení rozhraní" -#: netbox/navigation/menu.py:126 +#: netbox/netbox/navigation/menu.py:126 msgid "Console Connections" msgstr "Připojení konzoly" -#: netbox/navigation/menu.py:131 +#: netbox/netbox/navigation/menu.py:131 msgid "Power Connections" msgstr "Napájecí připojení" -#: netbox/navigation/menu.py:147 +#: netbox/netbox/navigation/menu.py:147 msgid "Wireless LAN Groups" msgstr "Skupiny bezdrátových sítí" -#: netbox/navigation/menu.py:168 +#: netbox/netbox/navigation/menu.py:168 msgid "Prefix & VLAN Roles" msgstr "Role síťových rozsahů a VLAN" -#: netbox/navigation/menu.py:174 +#: netbox/netbox/navigation/menu.py:174 msgid "ASN Ranges" msgstr "Rozsahy ASN" -#: netbox/navigation/menu.py:196 +#: netbox/netbox/navigation/menu.py:196 msgid "VLAN Groups" msgstr "Skupiny VLAN" -#: netbox/navigation/menu.py:203 +#: netbox/netbox/navigation/menu.py:203 msgid "Service Templates" msgstr "Šablony služeb" -#: netbox/navigation/menu.py:204 templates/dcim/device.html:302 -#: templates/ipam/ipaddress.html:118 -#: templates/virtualization/virtualmachine.html:154 +#: netbox/netbox/navigation/menu.py:204 netbox/templates/dcim/device.html:302 +#: netbox/templates/ipam/ipaddress.html:118 +#: netbox/templates/virtualization/virtualmachine.html:154 msgid "Services" msgstr "Služby" -#: netbox/navigation/menu.py:211 +#: netbox/netbox/navigation/menu.py:211 msgid "VPN" msgstr "VPN" -#: netbox/navigation/menu.py:215 netbox/navigation/menu.py:217 -#: vpn/tables/tunnels.py:24 +#: netbox/netbox/navigation/menu.py:215 netbox/netbox/navigation/menu.py:217 +#: netbox/vpn/tables/tunnels.py:24 msgid "Tunnels" msgstr "Tunely" -#: netbox/navigation/menu.py:218 templates/vpn/tunnelgroup.html:8 +#: netbox/netbox/navigation/menu.py:218 +#: netbox/templates/vpn/tunnelgroup.html:8 msgid "Tunnel Groups" msgstr "Skupiny tunelů" -#: netbox/navigation/menu.py:219 +#: netbox/netbox/navigation/menu.py:219 msgid "Tunnel Terminations" msgstr "Zakončení tunelů" -#: netbox/navigation/menu.py:223 netbox/navigation/menu.py:225 -#: vpn/models/l2vpn.py:64 +#: netbox/netbox/navigation/menu.py:223 netbox/netbox/navigation/menu.py:225 +#: netbox/vpn/models/l2vpn.py:64 msgid "L2VPNs" msgstr "L2VPN" -#: netbox/navigation/menu.py:226 templates/vpn/l2vpn.html:56 -#: templates/vpn/tunnel.html:72 vpn/tables/tunnels.py:58 +#: 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/navigation/menu.py:232 +#: netbox/netbox/navigation/menu.py:232 msgid "IKE Proposals" msgstr "Návrhy IKE" -#: netbox/navigation/menu.py:233 templates/vpn/ikeproposal.html:41 +#: netbox/netbox/navigation/menu.py:233 +#: netbox/templates/vpn/ikeproposal.html:41 msgid "IKE Policies" msgstr "Zásady IKE" -#: netbox/navigation/menu.py:234 +#: netbox/netbox/navigation/menu.py:234 msgid "IPSec Proposals" msgstr "Návrhy IPsec" -#: netbox/navigation/menu.py:235 templates/vpn/ipsecproposal.html:37 +#: netbox/netbox/navigation/menu.py:235 +#: netbox/templates/vpn/ipsecproposal.html:37 msgid "IPSec Policies" msgstr "Zásady protokolu IPsec" -#: netbox/navigation/menu.py:236 templates/vpn/ikepolicy.html:38 -#: templates/vpn/ipsecpolicy.html:25 +#: netbox/netbox/navigation/menu.py:236 netbox/templates/vpn/ikepolicy.html:38 +#: netbox/templates/vpn/ipsecpolicy.html:25 msgid "IPSec Profiles" msgstr "Profily IPsec" -#: netbox/navigation/menu.py:243 templates/dcim/device_edit.html:78 -msgid "Virtualization" -msgstr "Virtualizace" - -#: netbox/navigation/menu.py:251 -#: templates/virtualization/virtualmachine.html:174 -#: templates/virtualization/virtualmachine/base.html:32 -#: templates/virtualization/virtualmachine_list.html:21 -#: virtualization/tables/virtualmachines.py:104 virtualization/views.py:388 +#: netbox/netbox/navigation/menu.py:251 +#: 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 msgid "Virtual Disks" msgstr "Virtuální disky" -#: netbox/navigation/menu.py:258 +#: netbox/netbox/navigation/menu.py:258 msgid "Cluster Types" msgstr "Typy klastrů" -#: netbox/navigation/menu.py:259 +#: netbox/netbox/navigation/menu.py:259 msgid "Cluster Groups" msgstr "Skupiny klastrů" -#: netbox/navigation/menu.py:273 +#: netbox/netbox/navigation/menu.py:273 msgid "Circuit Types" msgstr "Typy obvodů" -#: netbox/navigation/menu.py:274 +#: netbox/netbox/navigation/menu.py:274 msgid "Circuit Groups" msgstr "Skupiny obvodů" -#: netbox/navigation/menu.py:275 templates/circuits/circuit.html:66 +#: netbox/netbox/navigation/menu.py:275 +#: netbox/templates/circuits/circuit.html:66 msgid "Group Assignments" msgstr "Skupinové úkoly" -#: netbox/navigation/menu.py:276 +#: netbox/netbox/navigation/menu.py:276 msgid "Circuit Terminations" msgstr "Ukončení obvodů" -#: netbox/navigation/menu.py:280 netbox/navigation/menu.py:282 +#: netbox/netbox/navigation/menu.py:280 netbox/netbox/navigation/menu.py:282 msgid "Providers" msgstr "Poskytovatelé" -#: netbox/navigation/menu.py:283 templates/circuits/provider.html:51 +#: netbox/netbox/navigation/menu.py:283 +#: netbox/templates/circuits/provider.html:51 msgid "Provider Accounts" msgstr "Účty poskytovatele" -#: netbox/navigation/menu.py:284 +#: netbox/netbox/navigation/menu.py:284 msgid "Provider Networks" msgstr "Sítě poskytovatelů" -#: netbox/navigation/menu.py:298 +#: netbox/netbox/navigation/menu.py:298 msgid "Power Panels" msgstr "Napájecí panely" -#: netbox/navigation/menu.py:309 +#: netbox/netbox/navigation/menu.py:309 msgid "Configurations" msgstr "Konfigurace" -#: netbox/navigation/menu.py:311 +#: netbox/netbox/navigation/menu.py:311 msgid "Config Contexts" msgstr "Kontexty konfigurace" -#: netbox/navigation/menu.py:312 +#: netbox/netbox/navigation/menu.py:312 msgid "Config Templates" msgstr "Konfigurační šablony" -#: netbox/navigation/menu.py:319 netbox/navigation/menu.py:323 +#: netbox/netbox/navigation/menu.py:319 netbox/netbox/navigation/menu.py:323 msgid "Customization" msgstr "Přizpůsobení" -#: netbox/navigation/menu.py:325 templates/dcim/device_edit.html:103 -#: templates/dcim/htmx/cable_edit.html:81 -#: templates/dcim/virtualchassis_add.html:31 -#: templates/dcim/virtualchassis_edit.html:40 -#: templates/generic/bulk_edit.html:76 templates/htmx/form.html:19 -#: templates/inc/filter_list.html:30 templates/inc/panels/custom_fields.html:7 -#: templates/ipam/ipaddress_bulk_add.html:35 templates/ipam/vlan_edit.html:59 +#: netbox/netbox/navigation/menu.py:325 +#: netbox/templates/dcim/device_edit.html:103 +#: netbox/templates/dcim/htmx/cable_edit.html:81 +#: netbox/templates/dcim/virtualchassis_add.html:31 +#: netbox/templates/dcim/virtualchassis_edit.html:40 +#: netbox/templates/generic/bulk_edit.html:76 +#: netbox/templates/htmx/form.html:19 netbox/templates/inc/filter_list.html:30 +#: netbox/templates/inc/panels/custom_fields.html:7 +#: netbox/templates/ipam/ipaddress_bulk_add.html:35 +#: netbox/templates/ipam/vlan_edit.html:59 msgid "Custom Fields" msgstr "Vlastní pole" -#: netbox/navigation/menu.py:326 +#: netbox/netbox/navigation/menu.py:326 msgid "Custom Field Choices" msgstr "Volby uživatelských polí" -#: netbox/navigation/menu.py:327 +#: netbox/netbox/navigation/menu.py:327 msgid "Custom Links" msgstr "Vlastní odkazy" -#: netbox/navigation/menu.py:328 +#: netbox/netbox/navigation/menu.py:328 msgid "Export Templates" msgstr "Exportovat šablony" -#: netbox/navigation/menu.py:329 +#: netbox/netbox/navigation/menu.py:329 msgid "Saved Filters" msgstr "Uložené filtry" -#: netbox/navigation/menu.py:331 +#: netbox/netbox/navigation/menu.py:331 msgid "Image Attachments" msgstr "Přílohy obrázků" -#: netbox/navigation/menu.py:349 +#: netbox/netbox/navigation/menu.py:349 msgid "Operations" msgstr "Operace" -#: netbox/navigation/menu.py:353 +#: netbox/netbox/navigation/menu.py:353 msgid "Integrations" msgstr "Integrace" -#: netbox/navigation/menu.py:355 +#: netbox/netbox/navigation/menu.py:355 msgid "Data Sources" msgstr "Zdroje dat" -#: netbox/navigation/menu.py:356 +#: netbox/netbox/navigation/menu.py:356 msgid "Event Rules" msgstr "Pravidla události" -#: netbox/navigation/menu.py:357 +#: netbox/netbox/navigation/menu.py:357 msgid "Webhooks" msgstr "Webhooky" -#: netbox/navigation/menu.py:361 netbox/navigation/menu.py:365 -#: netbox/views/generic/feature_views.py:153 -#: templates/extras/report/base.html:37 templates/extras/script/base.html:36 +#: netbox/netbox/navigation/menu.py:361 netbox/netbox/navigation/menu.py:365 +#: netbox/netbox/views/generic/feature_views.py:153 +#: netbox/templates/extras/report/base.html:37 +#: netbox/templates/extras/script/base.html:36 msgid "Jobs" msgstr "Pracovní místa" -#: netbox/navigation/menu.py:371 +#: netbox/netbox/navigation/menu.py:371 msgid "Logging" msgstr "Protokolování" -#: netbox/navigation/menu.py:373 +#: netbox/netbox/navigation/menu.py:373 msgid "Notification Groups" msgstr "Skupiny oznámení" -#: netbox/navigation/menu.py:374 +#: netbox/netbox/navigation/menu.py:374 msgid "Journal Entries" msgstr "Záznamy deníku" -#: netbox/navigation/menu.py:375 templates/core/objectchange.html:9 -#: templates/core/objectchange_list.html:4 +#: netbox/netbox/navigation/menu.py:375 +#: netbox/templates/core/objectchange.html:9 +#: netbox/templates/core/objectchange_list.html:4 msgid "Change Log" msgstr "Protokol změn" -#: netbox/navigation/menu.py:382 templates/inc/user_menu.html:29 +#: netbox/netbox/navigation/menu.py:382 netbox/templates/inc/user_menu.html:29 msgid "Admin" msgstr "Administrátor" -#: netbox/navigation/menu.py:430 templates/account/base.html:27 -#: templates/inc/user_menu.html:57 +#: netbox/netbox/navigation/menu.py:430 netbox/templates/account/base.html:27 +#: netbox/templates/inc/user_menu.html:57 msgid "API Tokens" msgstr "Tokeny API" -#: netbox/navigation/menu.py:437 users/forms/model_forms.py:187 -#: users/forms/model_forms.py:195 users/forms/model_forms.py:242 -#: users/forms/model_forms.py:249 +#: netbox/netbox/navigation/menu.py:437 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/navigation/menu.py:445 netbox/navigation/menu.py:449 -#: templates/core/system.html:7 +#: netbox/netbox/navigation/menu.py:445 netbox/netbox/navigation/menu.py:449 +#: netbox/templates/core/system.html:7 msgid "System" msgstr "Systém" -#: netbox/navigation/menu.py:454 netbox/navigation/menu.py:502 -#: templates/500.html:35 templates/account/preferences.html:22 -#: templates/core/plugin.html:13 templates/core/plugin_list.html:7 -#: templates/core/plugin_list.html:12 +#: netbox/netbox/navigation/menu.py:454 netbox/netbox/navigation/menu.py:502 +#: netbox/templates/500.html:35 netbox/templates/account/preferences.html:22 +#: netbox/templates/core/plugin.html:13 +#: netbox/templates/core/plugin_list.html:7 +#: netbox/templates/core/plugin_list.html:12 msgid "Plugins" msgstr "Pluginy" -#: netbox/navigation/menu.py:459 +#: netbox/netbox/navigation/menu.py:459 msgid "Configuration History" msgstr "Historie konfigurace" -#: netbox/navigation/menu.py:465 templates/core/rq_task.html:8 -#: templates/core/rq_task_list.html:22 +#: netbox/netbox/navigation/menu.py:465 netbox/templates/core/rq_task.html:8 +#: netbox/templates/core/rq_task_list.html:22 msgid "Background Tasks" msgstr "Úkoly na pozadí" -#: netbox/plugins/navigation.py:47 netbox/plugins/navigation.py:69 +#: netbox/netbox/plugins/navigation.py:47 +#: netbox/netbox/plugins/navigation.py:69 msgid "Permissions must be passed as a tuple or list." msgstr "Oprávnění musí být předána jako dvojice nebo seznam." -#: netbox/plugins/navigation.py:51 +#: netbox/netbox/plugins/navigation.py:51 msgid "Buttons must be passed as a tuple or list." msgstr "Tlačítka musí být předána jako dvojice nebo seznam." -#: netbox/plugins/navigation.py:73 +#: netbox/netbox/plugins/navigation.py:73 msgid "Button color must be a choice within ButtonColorChoices." msgstr "Barva tlačítka musí být volbou z ButtonColorChoices." -#: netbox/plugins/registration.py:25 +#: netbox/netbox/plugins/registration.py:25 #, python-brace-format msgid "" "PluginTemplateExtension class {template_extension} was passed as an " @@ -10530,7 +11231,7 @@ msgid "" msgstr "" "Třída PluginTemplateExtension {template_extension} byl předán jako instance!" -#: netbox/plugins/registration.py:31 +#: netbox/netbox/plugins/registration.py:31 #, python-brace-format msgid "" "{template_extension} is not a subclass of " @@ -10538,193 +11239,194 @@ msgid "" msgstr "" "{template_extension} není podtřídou Netbox.Plugins.PluginTemplateExtension!" -#: netbox/plugins/registration.py:51 +#: netbox/netbox/plugins/registration.py:51 #, python-brace-format msgid "{item} must be an instance of netbox.plugins.PluginMenuItem" msgstr "{item} musí být instancí Netbox.Plugins.PluginMenuItem" -#: netbox/plugins/registration.py:62 +#: netbox/netbox/plugins/registration.py:62 #, 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/plugins/registration.py:67 +#: netbox/netbox/plugins/registration.py:67 #, python-brace-format msgid "{button} must be an instance of netbox.plugins.PluginMenuButton" msgstr "{button} musí být instancí Netbox.Plugins.PluginMenuButton" -#: netbox/plugins/templates.py:37 +#: netbox/netbox/plugins/templates.py:37 msgid "extra_context must be a dictionary" msgstr "extra_context musí být slovník" -#: netbox/preferences.py:19 +#: netbox/netbox/preferences.py:19 msgid "HTMX Navigation" msgstr "Navigace HTMX" -#: netbox/preferences.py:24 +#: netbox/netbox/preferences.py:24 msgid "Enable dynamic UI navigation" msgstr "Povolit dynamickou navigaci uživatelským rozhraním" -#: netbox/preferences.py:26 +#: netbox/netbox/preferences.py:26 msgid "Experimental feature" msgstr "Experimentální funkce" -#: netbox/preferences.py:29 +#: netbox/netbox/preferences.py:29 msgid "Language" msgstr "Jazyk" -#: netbox/preferences.py:34 +#: netbox/netbox/preferences.py:34 msgid "Forces UI translation to the specified language" msgstr "Vynucuje překlad uživatelského rozhraní do zadaného jazyka" -#: netbox/preferences.py:36 +#: netbox/netbox/preferences.py:36 msgid "Support for translation has been disabled locally" msgstr "Podpora překladu byla lokálně zakázána" -#: netbox/preferences.py:42 +#: netbox/netbox/preferences.py:42 msgid "Page length" msgstr "Délka stránky" -#: netbox/preferences.py:44 +#: netbox/netbox/preferences.py:44 msgid "The default number of objects to display per page" msgstr "Výchozí počet objektů, které se mají zobrazit na stránce" -#: netbox/preferences.py:48 +#: netbox/netbox/preferences.py:48 msgid "Paginator placement" msgstr "Umístění stránkování" -#: netbox/preferences.py:50 +#: netbox/netbox/preferences.py:50 msgid "Bottom" msgstr "Dole" -#: netbox/preferences.py:51 +#: netbox/netbox/preferences.py:51 msgid "Top" msgstr "Nahoře" -#: netbox/preferences.py:52 +#: netbox/netbox/preferences.py:52 msgid "Both" msgstr "Obojí" -#: netbox/preferences.py:55 +#: netbox/netbox/preferences.py:55 msgid "Where the paginator controls will be displayed relative to a table" msgstr "Kde budou ovládací prvky stránkování zobrazeny vzhledem k tabulce" -#: netbox/preferences.py:60 +#: netbox/netbox/preferences.py:60 msgid "Data format" msgstr "Formát dat" -#: netbox/preferences.py:65 +#: netbox/netbox/preferences.py:65 msgid "The preferred syntax for displaying generic data within the UI" msgstr "" "Preferovaná syntaxe pro zobrazení obecných dat v uživatelském rozhraní" -#: netbox/registry.py:14 +#: netbox/netbox/registry.py:14 #, python-brace-format msgid "Invalid store: {key}" msgstr "Neplatné úložiště: {key}" -#: netbox/registry.py:17 +#: netbox/netbox/registry.py:17 msgid "Cannot add stores to registry after initialization" msgstr "Po inicializaci nelze do registru přidat úložiště" -#: netbox/registry.py:20 +#: netbox/netbox/registry.py:20 msgid "Cannot delete stores from registry" msgstr "Nelze odstranit obchody z registru" -#: netbox/settings.py:760 +#: netbox/netbox/settings.py:760 msgid "Czech" msgstr "Čeština" -#: netbox/settings.py:761 +#: netbox/netbox/settings.py:761 msgid "Danish" msgstr "Dánština" -#: netbox/settings.py:762 +#: netbox/netbox/settings.py:762 msgid "German" msgstr "Němčina" -#: netbox/settings.py:763 +#: netbox/netbox/settings.py:763 msgid "English" msgstr "Angličtina" -#: netbox/settings.py:764 +#: netbox/netbox/settings.py:764 msgid "Spanish" msgstr "Španělština" -#: netbox/settings.py:765 +#: netbox/netbox/settings.py:765 msgid "French" msgstr "Francouzština" -#: netbox/settings.py:766 +#: netbox/netbox/settings.py:766 msgid "Italian" msgstr "Italština" -#: netbox/settings.py:767 +#: netbox/netbox/settings.py:767 msgid "Japanese" msgstr "Japonština" -#: netbox/settings.py:768 +#: netbox/netbox/settings.py:768 msgid "Dutch" msgstr "Holandština" -#: netbox/settings.py:769 +#: netbox/netbox/settings.py:769 msgid "Polish" msgstr "Polština" -#: netbox/settings.py:770 +#: netbox/netbox/settings.py:770 msgid "Portuguese" msgstr "Portugalština" -#: netbox/settings.py:771 +#: netbox/netbox/settings.py:771 msgid "Russian" msgstr "Ruština" -#: netbox/settings.py:772 +#: netbox/netbox/settings.py:772 msgid "Turkish" msgstr "Turečtina" -#: netbox/settings.py:773 +#: netbox/netbox/settings.py:773 msgid "Ukrainian" msgstr "Ukrajinština" -#: netbox/settings.py:774 +#: netbox/netbox/settings.py:774 msgid "Chinese" msgstr "Čínština" -#: netbox/tables/columns.py:176 +#: netbox/netbox/tables/columns.py:176 msgid "Select all" msgstr "Vybrat vše" -#: netbox/tables/columns.py:189 +#: netbox/netbox/tables/columns.py:189 msgid "Toggle all" msgstr "Přepnout vše" -#: netbox/tables/columns.py:300 +#: netbox/netbox/tables/columns.py:300 msgid "Toggle Dropdown" msgstr "Přepnout rozevírací nabídku" -#: netbox/tables/columns.py:572 templates/core/job.html:53 +#: netbox/netbox/tables/columns.py:572 netbox/templates/core/job.html:53 msgid "Error" msgstr "Chyba" -#: netbox/tables/tables.py:58 +#: netbox/netbox/tables/tables.py:58 #, python-brace-format msgid "No {model_name} found" msgstr "{model_name} nenalezeno" -#: netbox/tables/tables.py:249 templates/generic/bulk_import.html:117 +#: netbox/netbox/tables/tables.py:249 +#: netbox/templates/generic/bulk_import.html:117 msgid "Field" msgstr "Pole" -#: netbox/tables/tables.py:252 +#: netbox/netbox/tables/tables.py:252 msgid "Value" msgstr "Hodnota" -#: netbox/tests/dummy_plugin/navigation.py:29 +#: netbox/netbox/tests/dummy_plugin/navigation.py:29 msgid "Dummy Plugin" msgstr "Dummy Plugin" -#: netbox/views/generic/bulk_views.py:114 +#: netbox/netbox/views/generic/bulk_views.py:114 #, python-brace-format msgid "" "There was an error rendering the selected export template ({template}): " @@ -10732,56 +11434,56 @@ msgid "" msgstr "" "Při vykreslování vybrané šablony exportu došlo k chybě ({template}): {error}" -#: netbox/views/generic/bulk_views.py:416 +#: netbox/netbox/views/generic/bulk_views.py:416 #, python-brace-format msgid "Row {i}: Object with ID {id} does not exist" msgstr "Řádek {i}: Objekt s ID {id} neexistuje" -#: netbox/views/generic/bulk_views.py:702 -#: netbox/views/generic/bulk_views.py:900 -#: netbox/views/generic/bulk_views.py:948 +#: netbox/netbox/views/generic/bulk_views.py:709 +#: netbox/netbox/views/generic/bulk_views.py:910 +#: netbox/netbox/views/generic/bulk_views.py:958 #, python-brace-format msgid "No {object_type} were selected." msgstr "Ne {object_type} Byly vybrány." -#: netbox/views/generic/bulk_views.py:782 +#: netbox/netbox/views/generic/bulk_views.py:788 #, python-brace-format msgid "Renamed {count} {object_type}" msgstr "Přejmenováno {count} {object_type}" -#: netbox/views/generic/bulk_views.py:878 +#: netbox/netbox/views/generic/bulk_views.py:888 #, python-brace-format msgid "Deleted {count} {object_type}" msgstr "Vymazáno {count} {object_type}" -#: netbox/views/generic/feature_views.py:40 +#: netbox/netbox/views/generic/feature_views.py:40 msgid "Changelog" msgstr "Seznam změn" -#: netbox/views/generic/feature_views.py:93 +#: netbox/netbox/views/generic/feature_views.py:93 msgid "Journal" msgstr "věstníku" -#: netbox/views/generic/feature_views.py:207 +#: netbox/netbox/views/generic/feature_views.py:207 msgid "Unable to synchronize data: No data file set." msgstr "Nelze synchronizovat data: Žádný datový soubor není nastaven." -#: netbox/views/generic/feature_views.py:211 +#: netbox/netbox/views/generic/feature_views.py:211 #, python-brace-format msgid "Synchronized data for {object_type} {object}." msgstr "Synchronizovaná data pro {object_type} {object}." -#: netbox/views/generic/feature_views.py:236 +#: netbox/netbox/views/generic/feature_views.py:236 #, python-brace-format msgid "Synced {count} {object_type}" msgstr "Synchronizováno {count} {object_type}" -#: netbox/views/generic/object_views.py:108 +#: netbox/netbox/views/generic/object_views.py:108 #, python-brace-format msgid "{class_name} must implement get_children()" msgstr "{class_name} musí implementovat get_children ()" -#: netbox/views/misc.py:44 +#: netbox/netbox/views/misc.py:46 msgid "" "There was an error loading the dashboard configuration. A default dashboard " "is in use." @@ -10789,702 +11491,744 @@ msgstr "" "Při načítání konfigurace řídicího panelu došlo k chybě. Používá se výchozí " "řídicí panel." -#: templates/403.html:4 +#: netbox/templates/403.html:4 msgid "Access Denied" msgstr "Přístup odepřen" -#: templates/403.html:9 +#: netbox/templates/403.html:9 msgid "You do not have permission to access this page" msgstr "Nemáte oprávnění k přístupu na tuto stránku" -#: templates/404.html:4 +#: netbox/templates/404.html:4 msgid "Page Not Found" msgstr "Stránka nenalezena" -#: templates/404.html:9 +#: netbox/templates/404.html:9 msgid "The requested page does not exist" msgstr "Požadovaná stránka neexistuje" -#: templates/500.html:7 templates/500.html:18 +#: netbox/templates/500.html:7 netbox/templates/500.html:18 msgid "Server Error" msgstr "Chyba serveru" -#: templates/500.html:23 +#: netbox/templates/500.html:23 msgid "There was a problem with your request. Please contact an administrator" msgstr "Došlo k problému s vaší žádostí. Obraťte se prosím na administrátora" -#: templates/500.html:28 +#: netbox/templates/500.html:28 msgid "The complete exception is provided below" msgstr "Úplná výjimka je uvedena níže" -#: templates/500.html:33 templates/core/system.html:40 +#: netbox/templates/500.html:33 netbox/templates/core/system.html:40 msgid "Python version" msgstr "Verze Python" -#: templates/500.html:34 +#: netbox/templates/500.html:34 msgid "NetBox version" msgstr "Verze NetBox" -#: templates/500.html:36 +#: netbox/templates/500.html:36 msgid "None installed" msgstr "Není nainstalován" -#: templates/500.html:39 +#: netbox/templates/500.html:39 msgid "If further assistance is required, please post to the" msgstr "Pokud je vyžadována další pomoc, pošlete prosím příspěvek na" -#: templates/500.html:39 +#: netbox/templates/500.html:39 msgid "NetBox discussion forum" msgstr "NetBox diskusní fórum" -#: templates/500.html:39 +#: netbox/templates/500.html:39 msgid "on GitHub" msgstr "na GitHubu" -#: templates/500.html:42 templates/base/40x.html:17 +#: netbox/templates/500.html:42 netbox/templates/base/40x.html:17 msgid "Home Page" msgstr "Domovská stránka" -#: templates/account/base.html:7 templates/inc/user_menu.html:45 -#: vpn/forms/bulk_edit.py:255 vpn/forms/filtersets.py:189 -#: vpn/forms/model_forms.py:379 +#: netbox/templates/account/base.html:7 netbox/templates/inc/user_menu.html:45 +#: netbox/vpn/forms/bulk_edit.py:255 netbox/vpn/forms/filtersets.py:189 +#: netbox/vpn/forms/model_forms.py:379 msgid "Profile" msgstr "Profil" -#: templates/account/base.html:13 templates/account/notifications.html:7 -#: templates/inc/user_menu.html:15 +#: netbox/templates/account/base.html:13 +#: netbox/templates/account/notifications.html:7 +#: netbox/templates/inc/user_menu.html:15 msgid "Notifications" msgstr "Oznámení" -#: templates/account/base.html:16 templates/account/subscriptions.html:7 -#: templates/inc/user_menu.html:51 +#: netbox/templates/account/base.html:16 +#: netbox/templates/account/subscriptions.html:7 +#: netbox/templates/inc/user_menu.html:51 msgid "Subscriptions" msgstr "Předplatné" -#: templates/account/base.html:19 templates/inc/user_menu.html:54 +#: netbox/templates/account/base.html:19 +#: netbox/templates/inc/user_menu.html:54 msgid "Preferences" msgstr "Předvolby" -#: templates/account/password.html:5 +#: netbox/templates/account/password.html:5 msgid "Change Password" msgstr "Změnit heslo" -#: templates/account/password.html:19 templates/account/preferences.html:77 -#: templates/core/configrevision_restore.html:63 -#: templates/dcim/devicebay_populate.html:34 -#: templates/dcim/virtualchassis_add_member.html:26 -#: templates/dcim/virtualchassis_edit.html:103 -#: templates/extras/object_journal.html:26 templates/extras/script.html:38 -#: templates/generic/bulk_add_component.html:67 -#: templates/generic/bulk_delete.html:65 templates/generic/bulk_edit.html:106 -#: templates/generic/bulk_import.html:56 templates/generic/bulk_import.html:78 -#: templates/generic/bulk_import.html:100 -#: templates/generic/bulk_remove.html:62 templates/generic/bulk_rename.html:63 -#: templates/generic/confirmation_form.html:19 -#: templates/generic/object_edit.html:72 templates/htmx/delete_form.html:53 -#: templates/htmx/delete_form.html:55 templates/ipam/ipaddress_assign.html:28 -#: templates/virtualization/cluster_add_devices.html:30 +#: netbox/templates/account/password.html:19 +#: netbox/templates/account/preferences.html:77 +#: netbox/templates/core/configrevision_restore.html:63 +#: netbox/templates/dcim/devicebay_populate.html:34 +#: netbox/templates/dcim/virtualchassis_add_member.html:26 +#: netbox/templates/dcim/virtualchassis_edit.html:103 +#: netbox/templates/extras/object_journal.html:26 +#: netbox/templates/extras/script.html:38 +#: netbox/templates/generic/bulk_add_component.html:67 +#: netbox/templates/generic/bulk_delete.html:65 +#: netbox/templates/generic/bulk_edit.html:106 +#: netbox/templates/generic/bulk_import.html:56 +#: netbox/templates/generic/bulk_import.html:78 +#: netbox/templates/generic/bulk_import.html:100 +#: netbox/templates/generic/bulk_remove.html:62 +#: netbox/templates/generic/bulk_rename.html:63 +#: netbox/templates/generic/confirmation_form.html:19 +#: netbox/templates/generic/object_edit.html:72 +#: netbox/templates/htmx/delete_form.html:53 +#: netbox/templates/htmx/delete_form.html:55 +#: netbox/templates/ipam/ipaddress_assign.html:28 +#: netbox/templates/virtualization/cluster_add_devices.html:30 msgid "Cancel" msgstr "Zrušit" -#: templates/account/password.html:20 templates/account/preferences.html:78 -#: templates/dcim/devicebay_populate.html:35 -#: templates/dcim/virtualchassis_add_member.html:28 -#: templates/dcim/virtualchassis_edit.html:105 -#: templates/extras/dashboard/widget_add.html:26 -#: templates/extras/dashboard/widget_config.html:19 -#: templates/extras/object_journal.html:27 -#: templates/generic/object_edit.html:75 -#: utilities/templates/helpers/applied_filters.html:16 -#: utilities/templates/helpers/table_config_form.html:40 +#: netbox/templates/account/password.html:20 +#: netbox/templates/account/preferences.html:78 +#: netbox/templates/dcim/devicebay_populate.html:35 +#: netbox/templates/dcim/virtualchassis_add_member.html:28 +#: netbox/templates/dcim/virtualchassis_edit.html:105 +#: netbox/templates/extras/dashboard/widget_add.html:26 +#: netbox/templates/extras/dashboard/widget_config.html:19 +#: netbox/templates/extras/object_journal.html:27 +#: netbox/templates/generic/object_edit.html:75 +#: netbox/utilities/templates/helpers/applied_filters.html:16 +#: netbox/utilities/templates/helpers/table_config_form.html:40 msgid "Save" msgstr "Uložit" -#: templates/account/preferences.html:34 +#: netbox/templates/account/preferences.html:34 msgid "Table Configurations" msgstr "Konfigurace tabulky" -#: templates/account/preferences.html:39 +#: netbox/templates/account/preferences.html:39 msgid "Clear table preferences" msgstr "Vymazat předvolby tabulky" -#: templates/account/preferences.html:47 +#: netbox/templates/account/preferences.html:47 msgid "Toggle All" msgstr "Přepnout vše" -#: templates/account/preferences.html:49 +#: netbox/templates/account/preferences.html:49 msgid "Table" msgstr "tabulka" -#: templates/account/preferences.html:50 +#: netbox/templates/account/preferences.html:50 msgid "Ordering" msgstr "Objednávání" -#: templates/account/preferences.html:51 +#: netbox/templates/account/preferences.html:51 msgid "Columns" msgstr "Sloupce" -#: templates/account/preferences.html:71 templates/dcim/cable_trace.html:113 -#: templates/extras/object_configcontext.html:43 +#: netbox/templates/account/preferences.html:71 +#: netbox/templates/dcim/cable_trace.html:113 +#: netbox/templates/extras/object_configcontext.html:43 msgid "None found" msgstr "Žádný nenalezen" -#: templates/account/profile.html:6 +#: netbox/templates/account/profile.html:6 msgid "User Profile" msgstr "Profil uživatele" -#: templates/account/profile.html:12 +#: netbox/templates/account/profile.html:12 msgid "Account Details" msgstr "Podrobnosti o účtu" -#: templates/account/profile.html:29 templates/tenancy/contact.html:43 -#: templates/users/user.html:25 tenancy/forms/bulk_edit.py:109 +#: netbox/templates/account/profile.html:29 +#: netbox/templates/tenancy/contact.html:43 +#: netbox/templates/users/user.html:25 netbox/tenancy/forms/bulk_edit.py:109 msgid "Email" msgstr "E-mailem" -#: templates/account/profile.html:33 templates/users/user.html:29 +#: netbox/templates/account/profile.html:33 +#: netbox/templates/users/user.html:29 msgid "Account Created" msgstr "Účet vytvořený" -#: templates/account/profile.html:37 templates/users/user.html:33 +#: netbox/templates/account/profile.html:37 +#: netbox/templates/users/user.html:33 msgid "Last Login" msgstr "Poslední přihlášení" -#: templates/account/profile.html:41 templates/users/user.html:45 +#: netbox/templates/account/profile.html:41 +#: netbox/templates/users/user.html:45 msgid "Superuser" msgstr "Superuživatel" -#: templates/account/profile.html:45 templates/inc/user_menu.html:31 -#: templates/users/user.html:41 +#: netbox/templates/account/profile.html:45 +#: netbox/templates/inc/user_menu.html:31 netbox/templates/users/user.html:41 msgid "Staff" msgstr "Zaměstnanci" -#: templates/account/profile.html:53 templates/users/objectpermission.html:82 -#: templates/users/user.html:53 +#: netbox/templates/account/profile.html:53 +#: netbox/templates/users/objectpermission.html:82 +#: netbox/templates/users/user.html:53 msgid "Assigned Groups" msgstr "Přiřazené skupiny" -#: templates/account/profile.html:58 -#: templates/circuits/circuit_terminations_swap.html:18 -#: templates/circuits/circuit_terminations_swap.html:26 -#: templates/circuits/circuittermination.html:34 -#: templates/circuits/inc/circuit_termination.html:68 -#: templates/core/objectchange.html:124 templates/core/objectchange.html:142 -#: templates/dcim/devicebay.html:59 -#: templates/dcim/inc/panels/inventory_items.html:45 -#: templates/dcim/interface.html:296 templates/dcim/modulebay.html:80 -#: templates/extras/configcontext.html:70 templates/extras/eventrule.html:66 -#: templates/extras/htmx/script_result.html:60 -#: templates/extras/webhook.html:65 templates/extras/webhook.html:75 -#: templates/inc/panel_table.html:13 templates/inc/panels/comments.html:10 -#: templates/ipam/inc/panels/fhrp_groups.html:56 templates/users/group.html:34 -#: templates/users/group.html:44 templates/users/objectpermission.html:77 -#: templates/users/objectpermission.html:87 templates/users/user.html:58 -#: templates/users/user.html:68 +#: netbox/templates/account/profile.html:58 +#: netbox/templates/circuits/circuit_terminations_swap.html:18 +#: netbox/templates/circuits/circuit_terminations_swap.html:26 +#: netbox/templates/circuits/circuittermination.html:34 +#: netbox/templates/circuits/inc/circuit_termination.html:68 +#: netbox/templates/core/objectchange.html:124 +#: 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/modulebay.html:80 +#: netbox/templates/extras/configcontext.html:70 +#: netbox/templates/extras/eventrule.html:66 +#: netbox/templates/extras/htmx/script_result.html:60 +#: netbox/templates/extras/webhook.html:65 +#: netbox/templates/extras/webhook.html:75 +#: netbox/templates/inc/panel_table.html:13 +#: netbox/templates/inc/panels/comments.html:10 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:56 +#: netbox/templates/users/group.html:34 netbox/templates/users/group.html:44 +#: netbox/templates/users/objectpermission.html:77 +#: netbox/templates/users/objectpermission.html:87 +#: netbox/templates/users/user.html:58 netbox/templates/users/user.html:68 msgid "None" msgstr "Žádný" -#: templates/account/profile.html:68 templates/users/user.html:78 +#: netbox/templates/account/profile.html:68 +#: netbox/templates/users/user.html:78 msgid "Recent Activity" msgstr "Nedávná aktivita" -#: templates/account/token.html:8 templates/account/token_list.html:6 +#: netbox/templates/account/token.html:8 +#: netbox/templates/account/token_list.html:6 msgid "My API Tokens" msgstr "Moje tokeny API" -#: templates/account/token.html:11 templates/account/token.html:19 -#: templates/users/token.html:6 templates/users/token.html:14 -#: users/forms/filtersets.py:120 +#: netbox/templates/account/token.html:11 +#: netbox/templates/account/token.html:19 netbox/templates/users/token.html:6 +#: netbox/templates/users/token.html:14 netbox/users/forms/filtersets.py:120 msgid "Token" msgstr "Žeton" -#: templates/account/token.html:39 templates/users/token.html:31 -#: users/forms/bulk_edit.py:107 +#: netbox/templates/account/token.html:39 netbox/templates/users/token.html:31 +#: netbox/users/forms/bulk_edit.py:107 msgid "Write enabled" msgstr "Zapisování povoleno" -#: templates/account/token.html:51 templates/users/token.html:43 +#: netbox/templates/account/token.html:51 netbox/templates/users/token.html:43 msgid "Last used" msgstr "Naposledy použitý" -#: templates/account/token_list.html:12 +#: netbox/templates/account/token_list.html:12 msgid "Add a Token" msgstr "Přidání žetonu" -#: templates/base/base.html:22 templates/home.html:27 +#: netbox/templates/base/base.html:22 netbox/templates/home.html:27 msgid "Home" msgstr "Domov" -#: templates/base/layout.html:25 +#: netbox/templates/base/layout.html:25 msgid "NetBox Motif" msgstr "NetBox motiv" -#: templates/base/layout.html:38 templates/base/layout.html:39 -#: templates/login.html:14 templates/login.html:15 +#: netbox/templates/base/layout.html:38 netbox/templates/base/layout.html:39 +#: netbox/templates/login.html:14 netbox/templates/login.html:15 msgid "NetBox Logo" msgstr "NetBox Logo" -#: templates/base/layout.html:150 templates/base/layout.html:151 +#: netbox/templates/base/layout.html:150 netbox/templates/base/layout.html:151 msgid "Docs" msgstr "Dokumentace" -#: templates/base/layout.html:156 templates/base/layout.html:157 -#: templates/rest_framework/api.html:10 +#: netbox/templates/base/layout.html:156 netbox/templates/base/layout.html:157 +#: netbox/templates/rest_framework/api.html:10 msgid "REST API" msgstr "REST API" -#: templates/base/layout.html:162 templates/base/layout.html:163 +#: netbox/templates/base/layout.html:162 netbox/templates/base/layout.html:163 msgid "REST API documentation" msgstr "Dokumentace REST API" -#: templates/base/layout.html:169 templates/base/layout.html:170 +#: netbox/templates/base/layout.html:169 netbox/templates/base/layout.html:170 msgid "GraphQL API" msgstr "GraphQL API" -#: templates/base/layout.html:185 templates/base/layout.html:186 +#: netbox/templates/base/layout.html:185 netbox/templates/base/layout.html:186 msgid "NetBox Labs Support" msgstr "Podpora NetBox Labs" -#: templates/base/layout.html:194 templates/base/layout.html:195 +#: netbox/templates/base/layout.html:194 netbox/templates/base/layout.html:195 msgid "Source Code" msgstr "Zdrojový kód" -#: templates/base/layout.html:200 templates/base/layout.html:201 +#: netbox/templates/base/layout.html:200 netbox/templates/base/layout.html:201 msgid "Community" msgstr "Komunita" -#: templates/circuits/circuit.html:47 +#: netbox/templates/circuits/circuit.html:47 msgid "Install Date" msgstr "Datum instalace" -#: templates/circuits/circuit.html:51 +#: netbox/templates/circuits/circuit.html:51 msgid "Termination Date" msgstr "Datum ukončení" -#: templates/circuits/circuit.html:70 -#: templates/ipam/inc/panels/fhrp_groups.html:15 +#: netbox/templates/circuits/circuit.html:70 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:15 msgid "Assign Group" msgstr "Přiřadit skupinu" -#: templates/circuits/circuit_terminations_swap.html:4 +#: netbox/templates/circuits/circuit_terminations_swap.html:4 msgid "Swap Circuit Terminations" msgstr "Ukončení výměnných obvodů" -#: templates/circuits/circuit_terminations_swap.html:8 +#: netbox/templates/circuits/circuit_terminations_swap.html:8 #, python-format msgid "Swap these terminations for circuit %(circuit)s?" msgstr "Vyměňte tato zakončení za obvod %(circuit)s?" -#: templates/circuits/circuit_terminations_swap.html:14 +#: netbox/templates/circuits/circuit_terminations_swap.html:14 msgid "A side" msgstr "Strana" -#: templates/circuits/circuit_terminations_swap.html:22 +#: netbox/templates/circuits/circuit_terminations_swap.html:22 msgid "Z side" msgstr "Strana Z" -#: templates/circuits/circuitgroup.html:16 +#: netbox/templates/circuits/circuitgroup.html:16 msgid "Assign Circuit" msgstr "Přiřadit obvod" -#: templates/circuits/circuitgroupassignment.html:19 +#: netbox/templates/circuits/circuitgroupassignment.html:19 msgid "Circuit Group Assignment" msgstr "Přiřazení skupiny obvodů" -#: templates/circuits/circuittype.html:10 +#: netbox/templates/circuits/circuittype.html:10 msgid "Add Circuit" msgstr "Přidat obvod" -#: templates/circuits/circuittype.html:19 +#: netbox/templates/circuits/circuittype.html:19 msgid "Circuit Type" msgstr "Typ obvodu" -#: templates/circuits/inc/circuit_termination.html:10 -#: templates/dcim/manufacturer.html:11 -#: templates/generic/bulk_add_component.html:22 -#: templates/users/objectpermission.html:38 -#: utilities/templates/buttons/add.html:4 -#: utilities/templates/helpers/table_config_form.html:20 +#: netbox/templates/circuits/inc/circuit_termination.html:10 +#: netbox/templates/dcim/manufacturer.html:11 +#: netbox/templates/generic/bulk_add_component.html:22 +#: netbox/templates/users/objectpermission.html:38 +#: netbox/utilities/templates/buttons/add.html:4 +#: netbox/utilities/templates/helpers/table_config_form.html:20 msgid "Add" msgstr "Přidat" -#: templates/circuits/inc/circuit_termination.html:15 -#: templates/circuits/inc/circuit_termination_fields.html:36 -#: templates/dcim/inc/panels/inventory_items.html:32 -#: templates/dcim/powerpanel.html:56 templates/extras/script_list.html:30 -#: templates/generic/object_edit.html:47 -#: templates/ipam/inc/ipaddress_edit_header.html:7 -#: templates/ipam/inc/panels/fhrp_groups.html:43 -#: utilities/templates/buttons/edit.html:3 +#: netbox/templates/circuits/inc/circuit_termination.html:15 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:36 +#: netbox/templates/dcim/inc/panels/inventory_items.html:32 +#: netbox/templates/dcim/powerpanel.html:56 +#: netbox/templates/extras/script_list.html:30 +#: netbox/templates/generic/object_edit.html:47 +#: netbox/templates/ipam/inc/ipaddress_edit_header.html:7 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:43 +#: netbox/utilities/templates/buttons/edit.html:3 msgid "Edit" msgstr "Upravit" -#: templates/circuits/inc/circuit_termination.html:18 +#: netbox/templates/circuits/inc/circuit_termination.html:18 msgid "Swap" msgstr "Výměna" -#: templates/circuits/inc/circuit_termination_fields.html:19 -#: templates/dcim/consoleport.html:59 templates/dcim/consoleserverport.html:60 -#: templates/dcim/powerfeed.html:114 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:19 +#: netbox/templates/dcim/consoleport.html:59 +#: netbox/templates/dcim/consoleserverport.html:60 +#: netbox/templates/dcim/powerfeed.html:114 msgid "Marked as connected" msgstr "Označeno jako připojeno" -#: templates/circuits/inc/circuit_termination_fields.html:21 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:21 msgid "to" msgstr "do" -#: templates/circuits/inc/circuit_termination_fields.html:31 -#: templates/circuits/inc/circuit_termination_fields.html:32 -#: templates/dcim/frontport.html:80 -#: templates/dcim/inc/connection_endpoints.html:7 -#: templates/dcim/interface.html:154 templates/dcim/rearport.html:76 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:31 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:32 +#: netbox/templates/dcim/frontport.html:80 +#: netbox/templates/dcim/inc/connection_endpoints.html:7 +#: netbox/templates/dcim/interface.html:154 +#: netbox/templates/dcim/rearport.html:76 msgid "Trace" msgstr "Stopa" -#: templates/circuits/inc/circuit_termination_fields.html:35 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:35 msgid "Edit cable" msgstr "Upravit kabel" -#: templates/circuits/inc/circuit_termination_fields.html:40 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:40 msgid "Remove cable" msgstr "Odstraňte kabel" -#: templates/circuits/inc/circuit_termination_fields.html:41 -#: templates/dcim/bulk_disconnect.html:5 -#: templates/dcim/device/consoleports.html:12 -#: templates/dcim/device/consoleserverports.html:12 -#: templates/dcim/device/frontports.html:12 -#: templates/dcim/device/interfaces.html:16 -#: templates/dcim/device/poweroutlets.html:12 -#: templates/dcim/device/powerports.html:12 -#: templates/dcim/device/rearports.html:12 templates/dcim/powerpanel.html:61 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:41 +#: netbox/templates/dcim/bulk_disconnect.html:5 +#: netbox/templates/dcim/device/consoleports.html:12 +#: netbox/templates/dcim/device/consoleserverports.html:12 +#: netbox/templates/dcim/device/frontports.html:12 +#: netbox/templates/dcim/device/interfaces.html:16 +#: netbox/templates/dcim/device/poweroutlets.html:12 +#: netbox/templates/dcim/device/powerports.html:12 +#: netbox/templates/dcim/device/rearports.html:12 +#: netbox/templates/dcim/powerpanel.html:61 msgid "Disconnect" msgstr "Odpojit" -#: templates/circuits/inc/circuit_termination_fields.html:48 -#: templates/dcim/consoleport.html:69 templates/dcim/consoleserverport.html:70 -#: templates/dcim/frontport.html:102 templates/dcim/interface.html:180 -#: templates/dcim/interface.html:200 templates/dcim/powerfeed.html:127 -#: templates/dcim/poweroutlet.html:71 templates/dcim/poweroutlet.html:72 -#: templates/dcim/powerport.html:73 templates/dcim/rearport.html:98 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:48 +#: netbox/templates/dcim/consoleport.html:69 +#: netbox/templates/dcim/consoleserverport.html:70 +#: netbox/templates/dcim/frontport.html:102 +#: netbox/templates/dcim/interface.html:180 +#: netbox/templates/dcim/interface.html:200 +#: netbox/templates/dcim/powerfeed.html:127 +#: netbox/templates/dcim/poweroutlet.html:71 +#: netbox/templates/dcim/poweroutlet.html:72 +#: netbox/templates/dcim/powerport.html:73 +#: netbox/templates/dcim/rearport.html:98 msgid "Connect" msgstr "Připojit" -#: templates/circuits/inc/circuit_termination_fields.html:70 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:70 msgid "Downstream" msgstr "Po proudu" -#: templates/circuits/inc/circuit_termination_fields.html:71 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:71 msgid "Upstream" msgstr "Nad proudem" -#: templates/circuits/inc/circuit_termination_fields.html:80 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:80 msgid "Cross-Connect" msgstr "Křížové připojení" -#: templates/circuits/inc/circuit_termination_fields.html:84 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:84 msgid "Patch Panel/Port" msgstr "Patch panel/port" -#: templates/circuits/provider.html:11 +#: netbox/templates/circuits/provider.html:11 msgid "Add circuit" msgstr "Přidat obvod" -#: templates/circuits/provideraccount.html:17 +#: netbox/templates/circuits/provideraccount.html:17 msgid "Provider Account" msgstr "Účet poskytovatele" -#: templates/core/configrevision.html:35 +#: netbox/templates/core/configrevision.html:35 msgid "Configuration Data" msgstr "Konfigurační data" -#: templates/core/configrevision.html:40 +#: netbox/templates/core/configrevision.html:40 msgid "Comment" msgstr "Komentář" -#: templates/core/configrevision_restore.html:8 -#: templates/core/configrevision_restore.html:25 -#: templates/core/configrevision_restore.html:64 +#: netbox/templates/core/configrevision_restore.html:8 +#: netbox/templates/core/configrevision_restore.html:25 +#: netbox/templates/core/configrevision_restore.html:64 msgid "Restore" msgstr "Obnovit" -#: templates/core/configrevision_restore.html:36 +#: netbox/templates/core/configrevision_restore.html:36 msgid "Parameter" msgstr "Parametr" -#: templates/core/configrevision_restore.html:37 +#: netbox/templates/core/configrevision_restore.html:37 msgid "Current Value" msgstr "Aktuální hodnota" -#: templates/core/configrevision_restore.html:38 +#: netbox/templates/core/configrevision_restore.html:38 msgid "New Value" msgstr "Nová hodnota" -#: templates/core/configrevision_restore.html:50 +#: netbox/templates/core/configrevision_restore.html:50 msgid "Changed" msgstr "Změněno" -#: templates/core/datafile.html:42 templates/ipam/iprange.html:25 -#: templates/virtualization/virtualdisk.html:29 -#: virtualization/tables/virtualmachines.py:198 +#: netbox/templates/core/datafile.html:42 +#: netbox/templates/ipam/iprange.html:25 +#: netbox/templates/virtualization/virtualdisk.html:29 +#: netbox/virtualization/tables/virtualmachines.py:198 msgid "Size" msgstr "Velikost" -#: templates/core/datafile.html:43 +#: netbox/templates/core/datafile.html:43 msgid "bytes" msgstr "bajtů" -#: templates/core/datafile.html:46 +#: netbox/templates/core/datafile.html:46 msgid "SHA256 Hash" msgstr "SHA256 hash" -#: templates/core/datasource.html:14 templates/core/datasource.html:20 -#: utilities/templates/buttons/sync.html:5 +#: netbox/templates/core/datasource.html:14 +#: netbox/templates/core/datasource.html:20 +#: netbox/utilities/templates/buttons/sync.html:5 msgid "Sync" msgstr "Synchronizovat" -#: templates/core/datasource.html:50 +#: netbox/templates/core/datasource.html:50 msgid "Last synced" msgstr "Naposledy synchronizováno" -#: templates/core/datasource.html:84 +#: netbox/templates/core/datasource.html:84 msgid "Backend" msgstr "Backend" -#: templates/core/datasource.html:99 +#: netbox/templates/core/datasource.html:99 msgid "No parameters defined" msgstr "Nebyly definovány žádné parametry" -#: templates/core/datasource.html:114 +#: netbox/templates/core/datasource.html:114 msgid "Files" msgstr "Soubory" -#: templates/core/inc/config_data.html:7 +#: netbox/templates/core/inc/config_data.html:7 msgid "Rack elevations" msgstr "Výšky stojanů" -#: templates/core/inc/config_data.html:10 +#: netbox/templates/core/inc/config_data.html:10 msgid "Default unit height" msgstr "Výchozí výška jednotky" -#: templates/core/inc/config_data.html:14 +#: netbox/templates/core/inc/config_data.html:14 msgid "Default unit width" msgstr "Výchozí šířka jednotky" -#: templates/core/inc/config_data.html:20 +#: netbox/templates/core/inc/config_data.html:20 msgid "Power feeds" msgstr "Napájecí zdroje" -#: templates/core/inc/config_data.html:23 +#: netbox/templates/core/inc/config_data.html:23 msgid "Default voltage" msgstr "Výchozí napětí" -#: templates/core/inc/config_data.html:27 +#: netbox/templates/core/inc/config_data.html:27 msgid "Default amperage" msgstr "Výchozí proud" -#: templates/core/inc/config_data.html:31 +#: netbox/templates/core/inc/config_data.html:31 msgid "Default max utilization" msgstr "Výchozí maximální využití" -#: templates/core/inc/config_data.html:40 +#: netbox/templates/core/inc/config_data.html:40 msgid "Enforce global unique" msgstr "Vynutit globální jedinečnost" -#: templates/core/inc/config_data.html:83 +#: netbox/templates/core/inc/config_data.html:83 msgid "Paginate count" msgstr "Počet stránek" -#: templates/core/inc/config_data.html:87 +#: netbox/templates/core/inc/config_data.html:87 msgid "Max page size" msgstr "Maximální velikost stránky" -#: templates/core/inc/config_data.html:114 +#: netbox/templates/core/inc/config_data.html:114 msgid "User preferences" msgstr "Uživatelské preference" -#: templates/core/inc/config_data.html:141 +#: netbox/templates/core/inc/config_data.html:141 msgid "Job retention" msgstr "Zachování pracovních míst" -#: templates/core/job.html:35 templates/core/rq_task.html:12 -#: templates/core/rq_task.html:49 templates/core/rq_task.html:58 +#: netbox/templates/core/job.html:35 netbox/templates/core/rq_task.html:12 +#: netbox/templates/core/rq_task.html:49 netbox/templates/core/rq_task.html:58 msgid "Job" msgstr "Práce" -#: templates/core/job.html:58 templates/extras/journalentry.html:26 +#: netbox/templates/core/job.html:58 +#: netbox/templates/extras/journalentry.html:26 msgid "Created By" msgstr "Vytvořil" -#: templates/core/job.html:66 +#: netbox/templates/core/job.html:66 msgid "Scheduling" msgstr "Plánování" -#: templates/core/job.html:77 +#: netbox/templates/core/job.html:77 #, python-format msgid "every %(interval)s minutes" msgstr "každá %(interval)s minut" -#: templates/core/objectchange.html:29 -#: templates/users/objectpermission.html:42 +#: netbox/templates/core/objectchange.html:29 +#: netbox/templates/users/objectpermission.html:42 msgid "Change" msgstr "Změna" -#: templates/core/objectchange.html:79 +#: netbox/templates/core/objectchange.html:79 msgid "Difference" msgstr "Rozdíl" -#: templates/core/objectchange.html:82 +#: netbox/templates/core/objectchange.html:82 msgid "Previous" msgstr "Předchozí" -#: templates/core/objectchange.html:85 +#: netbox/templates/core/objectchange.html:85 msgid "Next" msgstr "Další" -#: templates/core/objectchange.html:93 +#: netbox/templates/core/objectchange.html:93 msgid "Object Created" msgstr "Vytvořený objekt" -#: templates/core/objectchange.html:95 +#: netbox/templates/core/objectchange.html:95 msgid "Object Deleted" msgstr "Objekt odstraněn" -#: templates/core/objectchange.html:97 +#: netbox/templates/core/objectchange.html:97 msgid "No Changes" msgstr "Žádné změny" -#: templates/core/objectchange.html:111 +#: netbox/templates/core/objectchange.html:111 msgid "Pre-Change Data" msgstr "Data před změnou" -#: templates/core/objectchange.html:122 +#: netbox/templates/core/objectchange.html:122 msgid "Warning: Comparing non-atomic change to previous change record" msgstr "Upozornění: Porovnání neatomové změny s předchozím záznamem změny" -#: templates/core/objectchange.html:131 +#: netbox/templates/core/objectchange.html:131 msgid "Post-Change Data" msgstr "Údaje po změně" -#: templates/core/objectchange.html:162 +#: netbox/templates/core/objectchange.html:162 #, python-format msgid "See All %(count)s Changes" msgstr "Zobrazit vše %(count)s Mění" -#: templates/core/objectchange_list.html:9 -#: templates/extras/object_changelog.html:15 +#: netbox/templates/core/objectchange_list.html:9 +#: netbox/templates/extras/object_changelog.html:15 msgid "Change log retention" msgstr "Změnit uchovávání protokolu" -#: templates/core/objectchange_list.html:9 -#: templates/extras/object_changelog.html:15 +#: netbox/templates/core/objectchange_list.html:9 +#: netbox/templates/extras/object_changelog.html:15 msgid "days" msgstr "dní" -#: templates/core/objectchange_list.html:9 -#: templates/extras/object_changelog.html:15 +#: netbox/templates/core/objectchange_list.html:9 +#: netbox/templates/extras/object_changelog.html:15 msgid "Indefinite" msgstr "Neurčitý" -#: templates/core/plugin.html:22 +#: netbox/templates/core/plugin.html:22 msgid "Not installed" msgstr "Není nainstalován" -#: templates/core/plugin.html:33 +#: netbox/templates/core/plugin.html:33 msgid "Overview" msgstr "Přehled" -#: templates/core/plugin.html:39 +#: netbox/templates/core/plugin.html:39 msgid "Install" msgstr "Nainstalovat" -#: templates/core/plugin.html:51 +#: netbox/templates/core/plugin.html:51 msgid "Plugin Details" msgstr "Podrobnosti o pluginu" -#: templates/core/plugin.html:58 +#: netbox/templates/core/plugin.html:58 msgid "Summary" msgstr "Souhrn" -#: templates/core/plugin.html:76 +#: netbox/templates/core/plugin.html:76 msgid "License" msgstr "Licence" -#: templates/core/plugin.html:96 +#: netbox/templates/core/plugin.html:96 msgid "Version History" msgstr "Historie verzí" -#: templates/core/plugin.html:107 +#: netbox/templates/core/plugin.html:107 msgid "Local Installation Instructions" msgstr "Pokyny k místní instalaci" -#: templates/core/rq_queue_list.html:5 templates/core/rq_queue_list.html:13 -#: templates/core/rq_task_list.html:14 templates/core/rq_worker.html:7 +#: netbox/templates/core/rq_queue_list.html:5 +#: netbox/templates/core/rq_queue_list.html:13 +#: netbox/templates/core/rq_task_list.html:14 +#: netbox/templates/core/rq_worker.html:7 msgid "Background Queues" msgstr "Fronty na pozadí" -#: templates/core/rq_queue_list.html:24 templates/core/rq_queue_list.html:25 -#: templates/core/rq_worker_list.html:49 templates/core/rq_worker_list.html:50 -#: templates/extras/script_result.html:67 -#: templates/extras/script_result.html:69 -#: templates/inc/table_controls_htmx.html:30 -#: templates/inc/table_controls_htmx.html:33 +#: netbox/templates/core/rq_queue_list.html:24 +#: netbox/templates/core/rq_queue_list.html:25 +#: netbox/templates/core/rq_worker_list.html:49 +#: netbox/templates/core/rq_worker_list.html:50 +#: netbox/templates/extras/script_result.html:67 +#: netbox/templates/extras/script_result.html:69 +#: netbox/templates/inc/table_controls_htmx.html:30 +#: netbox/templates/inc/table_controls_htmx.html:33 msgid "Configure Table" msgstr "Konfigurovat tabulku" -#: templates/core/rq_task.html:29 +#: netbox/templates/core/rq_task.html:29 msgid "Stop" msgstr "Zastavit" -#: templates/core/rq_task.html:34 +#: netbox/templates/core/rq_task.html:34 msgid "Requeue" msgstr "Požadavek" -#: templates/core/rq_task.html:39 +#: netbox/templates/core/rq_task.html:39 msgid "Enqueue" msgstr "Zapojte se do fronty" -#: templates/core/rq_task.html:61 +#: netbox/templates/core/rq_task.html:61 msgid "Queue" msgstr "Fronta" -#: templates/core/rq_task.html:65 +#: netbox/templates/core/rq_task.html:65 msgid "Timeout" msgstr "Časový limit" -#: templates/core/rq_task.html:69 +#: netbox/templates/core/rq_task.html:69 msgid "Result TTL" msgstr "Výsledek TTL" -#: templates/core/rq_task.html:89 +#: netbox/templates/core/rq_task.html:89 msgid "Meta" msgstr "Meta" -#: templates/core/rq_task.html:93 +#: netbox/templates/core/rq_task.html:93 msgid "Arguments" msgstr "Argumenty" -#: templates/core/rq_task.html:97 +#: netbox/templates/core/rq_task.html:97 msgid "Keyword Arguments" msgstr "Argumenty klíčových slov" -#: templates/core/rq_task.html:103 +#: netbox/templates/core/rq_task.html:103 msgid "Depends on" msgstr "Závisí na" -#: templates/core/rq_task.html:109 +#: netbox/templates/core/rq_task.html:109 msgid "Exception" msgstr "Výjimka" -#: templates/core/rq_task_list.html:28 +#: netbox/templates/core/rq_task_list.html:28 msgid "tasks in " msgstr "úkoly v " -#: templates/core/rq_task_list.html:33 +#: netbox/templates/core/rq_task_list.html:33 msgid "Queued Jobs" msgstr "Úlohy ve frontě" -#: templates/core/rq_task_list.html:64 templates/extras/script_result.html:86 +#: netbox/templates/core/rq_task_list.html:64 +#: netbox/templates/extras/script_result.html:86 #, python-format msgid "" "Select all %(count)s %(object_type_plural)s matching query" @@ -11492,381 +12236,399 @@ msgstr "" "Vybrat všichni %(count)s %(object_type_plural)s " "odpovídající dotaz" -#: templates/core/rq_worker.html:10 +#: netbox/templates/core/rq_worker.html:10 msgid "Worker Info" msgstr "Informace o pracovníkovi" -#: templates/core/rq_worker.html:31 templates/core/rq_worker.html:40 +#: netbox/templates/core/rq_worker.html:31 +#: netbox/templates/core/rq_worker.html:40 msgid "Worker" msgstr "Pracovník" -#: templates/core/rq_worker.html:55 +#: netbox/templates/core/rq_worker.html:55 msgid "Queues" msgstr "Fronty" -#: templates/core/rq_worker.html:63 +#: netbox/templates/core/rq_worker.html:63 msgid "Curent Job" msgstr "Aktuální úloha" -#: templates/core/rq_worker.html:67 +#: netbox/templates/core/rq_worker.html:67 msgid "Successful job count" msgstr "Počet úspěšných úloh" -#: templates/core/rq_worker.html:71 +#: netbox/templates/core/rq_worker.html:71 msgid "Failed job count" msgstr "Počet neúspěšných úloh" -#: templates/core/rq_worker.html:75 +#: netbox/templates/core/rq_worker.html:75 msgid "Total working time" msgstr "Celková pracovní doba" -#: templates/core/rq_worker.html:76 +#: netbox/templates/core/rq_worker.html:76 msgid "seconds" msgstr "sekund" -#: templates/core/rq_worker_list.html:13 templates/core/rq_worker_list.html:21 +#: netbox/templates/core/rq_worker_list.html:13 +#: netbox/templates/core/rq_worker_list.html:21 msgid "Background Workers" msgstr "Pracovníci na pozadí" -#: templates/core/rq_worker_list.html:29 +#: netbox/templates/core/rq_worker_list.html:29 #, python-format msgid "Workers in %(queue_name)s" msgstr "Pracovníci v %(queue_name)s" -#: templates/core/system.html:11 utilities/templates/buttons/export.html:4 +#: netbox/templates/core/system.html:11 +#: netbox/utilities/templates/buttons/export.html:4 msgid "Export" msgstr "Export" -#: templates/core/system.html:28 +#: netbox/templates/core/system.html:28 msgid "System Status" msgstr "Stav systému" -#: templates/core/system.html:31 +#: netbox/templates/core/system.html:31 msgid "NetBox release" msgstr "Vydání NetBox" -#: templates/core/system.html:44 +#: netbox/templates/core/system.html:44 msgid "Django version" msgstr "Verze Django" -#: templates/core/system.html:48 +#: netbox/templates/core/system.html:48 msgid "PostgreSQL version" msgstr "PostgreSQL verze" -#: templates/core/system.html:52 +#: netbox/templates/core/system.html:52 msgid "Database name" msgstr "Název databáze" -#: templates/core/system.html:56 +#: netbox/templates/core/system.html:56 msgid "Database size" msgstr "Velikost databáze" -#: templates/core/system.html:61 +#: netbox/templates/core/system.html:61 msgid "Unavailable" msgstr "Nedostupné" -#: templates/core/system.html:66 +#: netbox/templates/core/system.html:66 msgid "RQ workers" msgstr "Pracovníci RQ" -#: templates/core/system.html:69 +#: netbox/templates/core/system.html:69 msgid "default queue" msgstr "výchozí fronta" -#: templates/core/system.html:73 +#: netbox/templates/core/system.html:73 msgid "System time" msgstr "Systémový čas" -#: templates/core/system.html:85 +#: netbox/templates/core/system.html:85 msgid "Current Configuration" msgstr "Aktuální konfigurace" -#: templates/dcim/bulk_disconnect.html:9 +#: netbox/templates/dcim/bulk_disconnect.html:9 #, python-format msgid "" "Are you sure you want to disconnect these %(count)s %(obj_type_plural)s?" msgstr "Jste si jisti, že je chcete odpojit %(count)s %(obj_type_plural)s?" -#: templates/dcim/cable_trace.html:10 +#: netbox/templates/dcim/cable_trace.html:10 #, python-format msgid "Cable Trace for %(object_type)s %(object)s" msgstr "Trace kabelů pro %(object_type)s %(object)s" -#: templates/dcim/cable_trace.html:24 templates/dcim/inc/rack_elevation.html:7 +#: netbox/templates/dcim/cable_trace.html:24 +#: netbox/templates/dcim/inc/rack_elevation.html:7 msgid "Download SVG" msgstr "Stáhnout SVG" -#: templates/dcim/cable_trace.html:30 +#: netbox/templates/dcim/cable_trace.html:30 msgid "Asymmetric Path" msgstr "Asymetrická cesta" -#: templates/dcim/cable_trace.html:31 +#: netbox/templates/dcim/cable_trace.html:31 msgid "The nodes below have no links and result in an asymmetric path" msgstr "Níže uvedené uzly nemají žádné odkazy a vedou k asymetrické cestě" -#: templates/dcim/cable_trace.html:38 +#: netbox/templates/dcim/cable_trace.html:38 msgid "Path split" msgstr "Rozdělení cesty" -#: templates/dcim/cable_trace.html:39 +#: netbox/templates/dcim/cable_trace.html:39 msgid "Select a node below to continue" msgstr "Chcete-li pokračovat, vyberte uzel níže" -#: templates/dcim/cable_trace.html:55 +#: netbox/templates/dcim/cable_trace.html:55 msgid "Trace Completed" msgstr "Sledování dokončeno" -#: templates/dcim/cable_trace.html:58 +#: netbox/templates/dcim/cable_trace.html:58 msgid "Total segments" msgstr "Celkem segmentů" -#: templates/dcim/cable_trace.html:62 +#: netbox/templates/dcim/cable_trace.html:62 msgid "Total length" msgstr "Celková délka" -#: templates/dcim/cable_trace.html:77 +#: netbox/templates/dcim/cable_trace.html:77 msgid "No paths found" msgstr "Nebyly nalezeny žádné cesty" -#: templates/dcim/cable_trace.html:85 +#: netbox/templates/dcim/cable_trace.html:85 msgid "Related Paths" msgstr "Související cesty" -#: templates/dcim/cable_trace.html:89 +#: netbox/templates/dcim/cable_trace.html:89 msgid "Origin" msgstr "Původ" -#: templates/dcim/cable_trace.html:90 +#: netbox/templates/dcim/cable_trace.html:90 msgid "Destination" msgstr "Cíl" -#: templates/dcim/cable_trace.html:91 +#: netbox/templates/dcim/cable_trace.html:91 msgid "Segments" msgstr "Segmenty" -#: templates/dcim/cable_trace.html:104 +#: netbox/templates/dcim/cable_trace.html:104 msgid "Incomplete" msgstr "neúplný" -#: templates/dcim/component_list.html:14 +#: netbox/templates/dcim/component_list.html:14 msgid "Rename Selected" msgstr "Přejmenovat vybrané" -#: templates/dcim/consoleport.html:65 templates/dcim/consoleserverport.html:66 -#: templates/dcim/frontport.html:98 templates/dcim/interface.html:176 -#: templates/dcim/poweroutlet.html:69 templates/dcim/powerport.html:69 +#: netbox/templates/dcim/consoleport.html:65 +#: netbox/templates/dcim/consoleserverport.html:66 +#: netbox/templates/dcim/frontport.html:98 +#: netbox/templates/dcim/interface.html:176 +#: netbox/templates/dcim/poweroutlet.html:69 +#: netbox/templates/dcim/powerport.html:69 msgid "Not Connected" msgstr "Není připojen" -#: templates/dcim/device.html:34 +#: netbox/templates/dcim/device.html:34 msgid "Highlight device in rack" msgstr "Zvýrazněte zařízení v stojanu" -#: templates/dcim/device.html:55 +#: netbox/templates/dcim/device.html:55 msgid "Not racked" msgstr "Není v racku" -#: templates/dcim/device.html:62 templates/dcim/site.html:94 +#: netbox/templates/dcim/device.html:62 netbox/templates/dcim/site.html:94 msgid "GPS Coordinates" msgstr "GPS souřadnice" -#: templates/dcim/device.html:68 templates/dcim/site.html:81 -#: templates/dcim/site.html:100 +#: netbox/templates/dcim/device.html:68 netbox/templates/dcim/site.html:81 +#: netbox/templates/dcim/site.html:100 msgid "Map" msgstr "Mapa" -#: templates/dcim/device.html:108 templates/dcim/inventoryitem.html:56 -#: templates/dcim/module.html:81 templates/dcim/modulebay.html:74 -#: templates/dcim/rack.html:61 +#: netbox/templates/dcim/device.html:108 +#: netbox/templates/dcim/inventoryitem.html:56 +#: netbox/templates/dcim/module.html:81 +#: netbox/templates/dcim/modulebay.html:74 netbox/templates/dcim/rack.html:61 msgid "Asset Tag" msgstr "Značka majetku" -#: templates/dcim/device.html:123 +#: netbox/templates/dcim/device.html:123 msgid "View Virtual Chassis" msgstr "Zobrazit virtuální šasi" -#: templates/dcim/device.html:164 +#: netbox/templates/dcim/device.html:164 msgid "Create VDC" msgstr "Vytvořit VDC" -#: templates/dcim/device.html:175 templates/dcim/device_edit.html:64 -#: virtualization/forms/model_forms.py:223 +#: netbox/templates/dcim/device.html:175 +#: netbox/templates/dcim/device_edit.html:64 +#: netbox/virtualization/forms/model_forms.py:223 msgid "Management" msgstr "Řízení" -#: templates/dcim/device.html:195 templates/dcim/device.html:211 -#: templates/dcim/device.html:227 -#: templates/virtualization/virtualmachine.html:57 -#: templates/virtualization/virtualmachine.html:73 +#: netbox/templates/dcim/device.html:195 netbox/templates/dcim/device.html:211 +#: netbox/templates/dcim/device.html:227 +#: netbox/templates/virtualization/virtualmachine.html:57 +#: netbox/templates/virtualization/virtualmachine.html:73 msgid "NAT for" msgstr "NAT pro" -#: templates/dcim/device.html:197 templates/dcim/device.html:213 -#: templates/dcim/device.html:229 -#: templates/virtualization/virtualmachine.html:59 -#: templates/virtualization/virtualmachine.html:75 +#: netbox/templates/dcim/device.html:197 netbox/templates/dcim/device.html:213 +#: netbox/templates/dcim/device.html:229 +#: netbox/templates/virtualization/virtualmachine.html:59 +#: netbox/templates/virtualization/virtualmachine.html:75 msgid "NAT" msgstr "THE NIGHT" -#: templates/dcim/device.html:252 templates/dcim/rack.html:73 +#: netbox/templates/dcim/device.html:252 netbox/templates/dcim/rack.html:73 msgid "Power Utilization" msgstr "Využití energie" -#: templates/dcim/device.html:256 +#: netbox/templates/dcim/device.html:256 msgid "Input" msgstr "Vstup" -#: templates/dcim/device.html:257 +#: netbox/templates/dcim/device.html:257 msgid "Outlets" msgstr "Výstupy" -#: templates/dcim/device.html:258 +#: netbox/templates/dcim/device.html:258 msgid "Allocated" msgstr "Přiděleno" -#: templates/dcim/device.html:268 templates/dcim/device.html:270 -#: templates/dcim/device.html:286 templates/dcim/powerfeed.html:67 +#: netbox/templates/dcim/device.html:268 netbox/templates/dcim/device.html:270 +#: netbox/templates/dcim/device.html:286 +#: netbox/templates/dcim/powerfeed.html:67 msgid "VA" msgstr "VA" -#: templates/dcim/device.html:280 +#: netbox/templates/dcim/device.html:280 msgctxt "Leg of a power feed" msgid "Leg" msgstr "větev" -#: templates/dcim/device.html:306 -#: templates/virtualization/virtualmachine.html:158 +#: netbox/templates/dcim/device.html:306 +#: netbox/templates/virtualization/virtualmachine.html:158 msgid "Add a service" msgstr "Přidat službu" -#: templates/dcim/device/base.html:21 templates/dcim/device_list.html:9 -#: templates/dcim/devicetype/base.html:18 -#: templates/dcim/inc/moduletype_buttons.html:9 templates/dcim/module.html:18 -#: templates/virtualization/virtualmachine/base.html:22 -#: templates/virtualization/virtualmachine_list.html:8 +#: netbox/templates/dcim/device/base.html:21 +#: netbox/templates/dcim/device_list.html:9 +#: netbox/templates/dcim/devicetype/base.html:18 +#: netbox/templates/dcim/inc/moduletype_buttons.html:9 +#: netbox/templates/dcim/module.html:18 +#: netbox/templates/virtualization/virtualmachine/base.html:22 +#: netbox/templates/virtualization/virtualmachine_list.html:8 msgid "Add Components" msgstr "Přidat komponenty" -#: templates/dcim/device/consoleports.html:24 +#: netbox/templates/dcim/device/consoleports.html:24 msgid "Add Console Ports" msgstr "Přidání portů konzoly" -#: templates/dcim/device/consoleserverports.html:24 +#: netbox/templates/dcim/device/consoleserverports.html:24 msgid "Add Console Server Ports" msgstr "Přidání portů konzolového serveru" -#: templates/dcim/device/devicebays.html:10 +#: netbox/templates/dcim/device/devicebays.html:10 msgid "Add Device Bays" msgstr "Přidání pozic zařízení" -#: templates/dcim/device/frontports.html:24 +#: netbox/templates/dcim/device/frontports.html:24 msgid "Add Front Ports" msgstr "Přidat přední porty" -#: templates/dcim/device/inc/interface_table_controls.html:9 +#: netbox/templates/dcim/device/inc/interface_table_controls.html:9 msgid "Hide Enabled" msgstr "Skrýt Povoleno" -#: templates/dcim/device/inc/interface_table_controls.html:10 +#: netbox/templates/dcim/device/inc/interface_table_controls.html:10 msgid "Hide Disabled" msgstr "Skrýt Zakázáno" -#: templates/dcim/device/inc/interface_table_controls.html:11 +#: netbox/templates/dcim/device/inc/interface_table_controls.html:11 msgid "Hide Virtual" msgstr "Skrýt virtuální" -#: templates/dcim/device/inc/interface_table_controls.html:12 +#: netbox/templates/dcim/device/inc/interface_table_controls.html:12 msgid "Hide Disconnected" msgstr "Skrýt odpojeno" -#: templates/dcim/device/interfaces.html:27 +#: netbox/templates/dcim/device/interfaces.html:27 msgid "Add Interfaces" msgstr "Přidat rozhraní" -#: templates/dcim/device/inventory.html:10 -#: templates/dcim/inc/panels/inventory_items.html:10 +#: netbox/templates/dcim/device/inventory.html:10 +#: netbox/templates/dcim/inc/panels/inventory_items.html:10 msgid "Add Inventory Item" msgstr "Přidat položku inventáře" -#: templates/dcim/device/modulebays.html:10 +#: netbox/templates/dcim/device/modulebays.html:10 msgid "Add Module Bays" msgstr "Přidat pozice modulů" -#: templates/dcim/device/poweroutlets.html:24 +#: netbox/templates/dcim/device/poweroutlets.html:24 msgid "Add Power Outlets" msgstr "Přidejte elektrické zásuvky" -#: templates/dcim/device/powerports.html:24 +#: netbox/templates/dcim/device/powerports.html:24 msgid "Add Power Port" msgstr "Přidat napájecí port" -#: templates/dcim/device/rearports.html:24 +#: netbox/templates/dcim/device/rearports.html:24 msgid "Add Rear Ports" msgstr "Přidat zadní porty" -#: templates/dcim/device/render_config.html:5 -#: templates/virtualization/virtualmachine/render_config.html:5 +#: netbox/templates/dcim/device/render_config.html:5 +#: netbox/templates/virtualization/virtualmachine/render_config.html:5 msgid "Config" msgstr "Konfigurace" -#: templates/dcim/device/render_config.html:35 -#: templates/virtualization/virtualmachine/render_config.html:35 +#: netbox/templates/dcim/device/render_config.html:35 +#: netbox/templates/virtualization/virtualmachine/render_config.html:35 msgid "Context Data" msgstr "Kontextová data" -#: templates/dcim/device/render_config.html:53 -#: templates/virtualization/virtualmachine/render_config.html:53 +#: netbox/templates/dcim/device/render_config.html:55 +#: netbox/templates/virtualization/virtualmachine/render_config.html:55 msgid "Rendered Config" msgstr "Rendrovaná konfigurace" -#: templates/dcim/device/render_config.html:55 -#: templates/virtualization/virtualmachine/render_config.html:55 +#: netbox/templates/dcim/device/render_config.html:57 +#: netbox/templates/virtualization/virtualmachine/render_config.html:57 msgid "Download" msgstr "Ke stažení" -#: templates/dcim/device/render_config.html:61 -#: templates/virtualization/virtualmachine/render_config.html:61 -msgid "No configuration template found" -msgstr "Nebyla nalezena žádná šablona konfigurace" +#: 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" -#: templates/dcim/device_edit.html:44 +#: 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." + +#: netbox/templates/dcim/device_edit.html:44 msgid "Parent Bay" msgstr "Mateřská zátoka" -#: templates/dcim/device_edit.html:48 -#: utilities/templates/form_helpers/render_field.html:22 +#: netbox/templates/dcim/device_edit.html:48 +#: netbox/utilities/templates/form_helpers/render_field.html:22 msgid "Regenerate Slug" msgstr "Přegenerovat slug" -#: templates/dcim/device_edit.html:49 templates/generic/bulk_remove.html:21 -#: utilities/templates/helpers/table_config_form.html:23 +#: netbox/templates/dcim/device_edit.html:49 +#: netbox/templates/generic/bulk_remove.html:21 +#: netbox/utilities/templates/helpers/table_config_form.html:23 msgid "Remove" msgstr "Odstranit" -#: templates/dcim/device_edit.html:110 +#: netbox/templates/dcim/device_edit.html:110 msgid "Local Config Context Data" msgstr "Kontextová data místní konfigurace" -#: templates/dcim/device_list.html:82 templates/generic/bulk_rename.html:57 -#: templates/virtualization/virtualmachine/interfaces.html:11 -#: templates/virtualization/virtualmachine/virtual_disks.html:11 +#: netbox/templates/dcim/device_list.html:82 +#: netbox/templates/generic/bulk_rename.html:57 +#: netbox/templates/virtualization/virtualmachine/interfaces.html:11 +#: netbox/templates/virtualization/virtualmachine/virtual_disks.html:11 msgid "Rename" msgstr "Přejmenovat" -#: templates/dcim/devicebay.html:17 +#: netbox/templates/dcim/devicebay.html:17 msgid "Device Bay" msgstr "Rozložení zařízení" -#: templates/dcim/devicebay.html:43 +#: netbox/templates/dcim/devicebay.html:43 msgid "Installed Device" msgstr "Nainstalované zařízení" -#: templates/dcim/devicebay_depopulate.html:6 +#: netbox/templates/dcim/devicebay_depopulate.html:6 #, python-format msgid "Remove %(device)s from %(device_bay)s?" msgstr "Odstranit %(device)s od %(device_bay)s?" -#: templates/dcim/devicebay_depopulate.html:13 +#: netbox/templates/dcim/devicebay_depopulate.html:13 #, python-format msgid "" "Are you sure you want to remove %(device)s from " @@ -11875,430 +12637,449 @@ msgstr "" "Jste si jisti, že chcete odstranit %(device)s od " "%(device_bay)s?" -#: templates/dcim/devicebay_populate.html:13 +#: netbox/templates/dcim/devicebay_populate.html:13 msgid "Populate" msgstr "Obývat" -#: templates/dcim/devicebay_populate.html:22 +#: netbox/templates/dcim/devicebay_populate.html:22 msgid "Bay" msgstr "Záliv" -#: templates/dcim/devicerole.html:14 templates/dcim/platform.html:17 +#: netbox/templates/dcim/devicerole.html:14 +#: netbox/templates/dcim/platform.html:17 msgid "Add Device" msgstr "Přidat zařízení" -#: templates/dcim/devicerole.html:40 +#: netbox/templates/dcim/devicerole.html:40 msgid "VM Role" msgstr "Role virtuálního počítače" -#: templates/dcim/devicetype.html:18 templates/dcim/moduletype.html:29 +#: netbox/templates/dcim/devicetype.html:18 +#: netbox/templates/dcim/moduletype.html:29 msgid "Model Name" msgstr "Název modelu" -#: templates/dcim/devicetype.html:25 templates/dcim/moduletype.html:33 +#: netbox/templates/dcim/devicetype.html:25 +#: netbox/templates/dcim/moduletype.html:33 msgid "Part Number" msgstr "Číslo dílu" -#: templates/dcim/devicetype.html:41 +#: netbox/templates/dcim/devicetype.html:41 msgid "Exclude From Utilization" msgstr "Vyloučit z využití" -#: templates/dcim/devicetype.html:59 +#: netbox/templates/dcim/devicetype.html:59 msgid "Parent/Child" msgstr "Rodič/Dítě" -#: templates/dcim/devicetype.html:71 +#: netbox/templates/dcim/devicetype.html:71 msgid "Front Image" msgstr "Přední obrázek" -#: templates/dcim/devicetype.html:83 +#: netbox/templates/dcim/devicetype.html:83 msgid "Rear Image" msgstr "Zadní obraz" -#: templates/dcim/frontport.html:54 +#: netbox/templates/dcim/frontport.html:54 msgid "Rear Port Position" msgstr "Pozice zadního portu" -#: templates/dcim/frontport.html:72 templates/dcim/interface.html:144 -#: templates/dcim/poweroutlet.html:63 templates/dcim/powerport.html:63 -#: templates/dcim/rearport.html:68 +#: netbox/templates/dcim/frontport.html:72 +#: netbox/templates/dcim/interface.html:144 +#: netbox/templates/dcim/poweroutlet.html:63 +#: netbox/templates/dcim/powerport.html:63 +#: netbox/templates/dcim/rearport.html:68 msgid "Marked as Connected" msgstr "Označeno jako Připojeno" -#: templates/dcim/frontport.html:86 templates/dcim/rearport.html:82 +#: netbox/templates/dcim/frontport.html:86 +#: netbox/templates/dcim/rearport.html:82 msgid "Connection Status" msgstr "Stav připojení" -#: templates/dcim/htmx/cable_edit.html:10 +#: netbox/templates/dcim/htmx/cable_edit.html:10 msgid "A Side" msgstr "Strana A" -#: templates/dcim/htmx/cable_edit.html:30 +#: netbox/templates/dcim/htmx/cable_edit.html:30 msgid "B Side" msgstr "Strana B" -#: templates/dcim/inc/cable_termination.html:65 +#: netbox/templates/dcim/inc/cable_termination.html:65 msgid "No termination" msgstr "Žádné ukončení" -#: templates/dcim/inc/cable_toggle_buttons.html:3 +#: netbox/templates/dcim/inc/cable_toggle_buttons.html:3 msgid "Mark Planned" msgstr "Označit plánované" -#: templates/dcim/inc/cable_toggle_buttons.html:6 +#: netbox/templates/dcim/inc/cable_toggle_buttons.html:6 msgid "Mark Installed" msgstr "Označit nainstalovaný" -#: templates/dcim/inc/connection_endpoints.html:13 +#: netbox/templates/dcim/inc/connection_endpoints.html:13 msgid "Path Status" msgstr "Stav cesty" -#: templates/dcim/inc/connection_endpoints.html:18 +#: netbox/templates/dcim/inc/connection_endpoints.html:18 msgid "Not Reachable" msgstr "Nedostižitelný" -#: templates/dcim/inc/connection_endpoints.html:23 +#: netbox/templates/dcim/inc/connection_endpoints.html:23 msgid "Path Endpoints" msgstr "Koncové body cesty" -#: templates/dcim/inc/endpoint_connection.html:8 -#: templates/dcim/powerfeed.html:120 templates/dcim/rearport.html:94 +#: netbox/templates/dcim/inc/endpoint_connection.html:8 +#: netbox/templates/dcim/powerfeed.html:120 +#: netbox/templates/dcim/rearport.html:94 msgid "Not connected" msgstr "Není připojen" -#: templates/dcim/inc/interface_vlans_table.html:6 +#: netbox/templates/dcim/inc/interface_vlans_table.html:6 msgid "Untagged" msgstr "Neznačeno" -#: templates/dcim/inc/interface_vlans_table.html:37 +#: netbox/templates/dcim/inc/interface_vlans_table.html:37 msgid "No VLANs Assigned" msgstr "Nebyly přiřazeny žádné sítě VLAN" -#: templates/dcim/inc/interface_vlans_table.html:44 -#: templates/ipam/prefix_list.html:16 templates/ipam/prefix_list.html:33 +#: netbox/templates/dcim/inc/interface_vlans_table.html:44 +#: netbox/templates/ipam/prefix_list.html:16 +#: netbox/templates/ipam/prefix_list.html:33 msgid "Clear" msgstr "Průhledná" -#: templates/dcim/inc/interface_vlans_table.html:47 +#: netbox/templates/dcim/inc/interface_vlans_table.html:47 msgid "Clear All" msgstr "Vymazat vše" -#: templates/dcim/inc/panels/racktype_dimensions.html:38 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:38 msgid "Mounting Depth" msgstr "Hloubka montáže" -#: templates/dcim/inc/panels/racktype_numbering.html:6 +#: netbox/templates/dcim/inc/panels/racktype_numbering.html:6 msgid "Starting Unit" msgstr "Startovací jednotka" -#: templates/dcim/inc/panels/racktype_numbering.html:10 +#: netbox/templates/dcim/inc/panels/racktype_numbering.html:10 msgid "Descending Units" msgstr "Sestupné jednotky" -#: templates/dcim/inc/rack_elevation.html:3 +#: netbox/templates/dcim/inc/rack_elevation.html:3 msgid "Rack elevation" msgstr "Výška stojanu" -#: templates/dcim/interface.html:17 +#: netbox/templates/dcim/interface.html:17 msgid "Add Child Interface" msgstr "Přidat podřízené rozhraní" -#: templates/dcim/interface.html:50 +#: netbox/templates/dcim/interface.html:50 msgid "Speed/Duplex" msgstr "Rychlost/Duplex" -#: templates/dcim/interface.html:73 +#: netbox/templates/dcim/interface.html:73 msgid "PoE Mode" msgstr "Režim PoE" -#: templates/dcim/interface.html:77 +#: netbox/templates/dcim/interface.html:77 msgid "PoE Type" msgstr "Typ PoE" -#: templates/dcim/interface.html:81 -#: templates/virtualization/vminterface.html:63 +#: netbox/templates/dcim/interface.html:81 +#: netbox/templates/virtualization/vminterface.html:63 msgid "802.1Q Mode" msgstr "Režim 802.1Q" -#: templates/dcim/interface.html:125 -#: templates/virtualization/vminterface.html:59 +#: netbox/templates/dcim/interface.html:125 +#: netbox/templates/virtualization/vminterface.html:59 msgid "MAC Address" msgstr "MAC adresa" -#: templates/dcim/interface.html:151 +#: netbox/templates/dcim/interface.html:151 msgid "Wireless Link" msgstr "Bezdrátové spojení" -#: templates/dcim/interface.html:218 vpn/choices.py:55 +#: netbox/templates/dcim/interface.html:218 netbox/vpn/choices.py:63 msgid "Peer" msgstr "Peer" -#: templates/dcim/interface.html:230 -#: templates/wireless/inc/wirelesslink_interface.html:26 +#: netbox/templates/dcim/interface.html:230 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:26 msgid "Channel" msgstr "Kanál" -#: templates/dcim/interface.html:239 -#: templates/wireless/inc/wirelesslink_interface.html:32 +#: netbox/templates/dcim/interface.html:239 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:32 msgid "Channel Frequency" msgstr "Frekvence kanálu" -#: templates/dcim/interface.html:242 templates/dcim/interface.html:250 -#: templates/dcim/interface.html:261 templates/dcim/interface.html:269 +#: netbox/templates/dcim/interface.html:242 +#: netbox/templates/dcim/interface.html:250 +#: netbox/templates/dcim/interface.html:261 +#: netbox/templates/dcim/interface.html:269 msgid "MHz" msgstr "MHz" -#: templates/dcim/interface.html:258 -#: templates/wireless/inc/wirelesslink_interface.html:42 +#: netbox/templates/dcim/interface.html:258 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:42 msgid "Channel Width" msgstr "Šířka kanálu" -#: templates/dcim/interface.html:285 templates/wireless/wirelesslan.html:14 -#: templates/wireless/wirelesslink.html:21 wireless/forms/bulk_edit.py:60 -#: wireless/forms/bulk_edit.py:102 wireless/forms/filtersets.py:40 -#: wireless/forms/filtersets.py:80 wireless/models.py:82 -#: wireless/models.py:156 wireless/tables/wirelesslan.py:44 +#: netbox/templates/dcim/interface.html:285 +#: netbox/templates/wireless/wirelesslan.html:14 +#: netbox/templates/wireless/wirelesslink.html:21 +#: netbox/wireless/forms/bulk_edit.py:60 +#: netbox/wireless/forms/bulk_edit.py:102 +#: netbox/wireless/forms/filtersets.py:40 +#: netbox/wireless/forms/filtersets.py:80 netbox/wireless/models.py:82 +#: netbox/wireless/models.py:156 netbox/wireless/tables/wirelesslan.py:44 msgid "SSID" msgstr "SSID" -#: templates/dcim/interface.html:305 +#: netbox/templates/dcim/interface.html:305 msgid "LAG Members" msgstr "Členové MAS" -#: templates/dcim/interface.html:323 +#: netbox/templates/dcim/interface.html:323 msgid "No member interfaces" msgstr "Žádná členská rozhraní" -#: templates/dcim/interface.html:343 templates/ipam/fhrpgroup.html:73 -#: templates/ipam/iprange/ip_addresses.html:7 -#: templates/ipam/prefix/ip_addresses.html:7 -#: templates/virtualization/vminterface.html:89 +#: netbox/templates/dcim/interface.html:343 +#: netbox/templates/ipam/fhrpgroup.html:73 +#: netbox/templates/ipam/iprange/ip_addresses.html:7 +#: netbox/templates/ipam/prefix/ip_addresses.html:7 +#: netbox/templates/virtualization/vminterface.html:89 msgid "Add IP Address" msgstr "Přidat IP adresu" -#: templates/dcim/inventoryitem.html:24 +#: netbox/templates/dcim/inventoryitem.html:24 msgid "Parent Item" msgstr "Nadřazená položka" -#: templates/dcim/inventoryitem.html:48 +#: netbox/templates/dcim/inventoryitem.html:48 msgid "Part ID" msgstr "ID součásti" -#: templates/dcim/location.html:17 +#: netbox/templates/dcim/location.html:17 msgid "Add Child Location" msgstr "Přidat podřízenou polohu" -#: templates/dcim/location.html:77 +#: netbox/templates/dcim/location.html:77 msgid "Child Locations" msgstr "Umístění dětí" -#: templates/dcim/location.html:81 templates/dcim/site.html:131 +#: netbox/templates/dcim/location.html:81 netbox/templates/dcim/site.html:131 msgid "Add a Location" msgstr "Přidání místa" -#: templates/dcim/location.html:94 templates/dcim/site.html:144 +#: netbox/templates/dcim/location.html:94 netbox/templates/dcim/site.html:144 msgid "Add a Device" msgstr "Přidání zařízení" -#: templates/dcim/manufacturer.html:16 +#: netbox/templates/dcim/manufacturer.html:16 msgid "Add Device Type" msgstr "Přidat typ zařízení" -#: templates/dcim/manufacturer.html:21 +#: netbox/templates/dcim/manufacturer.html:21 msgid "Add Module Type" msgstr "Přidat typ modulu" -#: templates/dcim/powerfeed.html:53 +#: netbox/templates/dcim/powerfeed.html:53 msgid "Connected Device" msgstr "Připojené zařízení" -#: templates/dcim/powerfeed.html:63 +#: netbox/templates/dcim/powerfeed.html:63 msgid "Utilization (Allocated" msgstr "Využití (přiděleno" -#: templates/dcim/powerfeed.html:80 +#: netbox/templates/dcim/powerfeed.html:80 msgid "Electrical Characteristics" msgstr "Elektrické charakteristiky" -#: templates/dcim/powerfeed.html:88 +#: netbox/templates/dcim/powerfeed.html:88 msgctxt "Abbreviation for volts" msgid "V" msgstr "V" -#: templates/dcim/powerfeed.html:92 +#: netbox/templates/dcim/powerfeed.html:92 msgctxt "Abbreviation for amperes" msgid "A" msgstr "A" -#: templates/dcim/poweroutlet.html:48 +#: netbox/templates/dcim/poweroutlet.html:48 msgid "Feed Leg" msgstr "Krmná noha" -#: templates/dcim/powerpanel.html:72 +#: netbox/templates/dcim/powerpanel.html:72 msgid "Add Power Feeds" msgstr "Přidání napájecích zdrojů" -#: templates/dcim/powerport.html:44 +#: netbox/templates/dcim/powerport.html:44 msgid "Maximum Draw" msgstr "Maximální losování" -#: templates/dcim/powerport.html:48 +#: netbox/templates/dcim/powerport.html:48 msgid "Allocated Draw" msgstr "Přidělené losování" -#: templates/dcim/rack.html:69 +#: netbox/templates/dcim/rack.html:69 msgid "Space Utilization" msgstr "Využití prostoru" -#: templates/dcim/rack.html:84 templates/dcim/racktype.html:44 +#: netbox/templates/dcim/rack.html:84 netbox/templates/dcim/racktype.html:44 msgid "Rack Weight" msgstr "Hmotnost stojanu" -#: templates/dcim/rack.html:94 templates/dcim/racktype.html:54 +#: netbox/templates/dcim/rack.html:94 netbox/templates/dcim/racktype.html:54 msgid "Maximum Weight" msgstr "Maximální hmotnost" -#: templates/dcim/rack.html:104 +#: netbox/templates/dcim/rack.html:104 msgid "Total Weight" msgstr "Celková hmotnost" -#: templates/dcim/rack.html:125 templates/dcim/rack_elevation_list.html:15 +#: netbox/templates/dcim/rack.html:125 +#: netbox/templates/dcim/rack_elevation_list.html:15 msgid "Images and Labels" msgstr "Obrázky a štítky" -#: templates/dcim/rack.html:126 templates/dcim/rack_elevation_list.html:16 +#: netbox/templates/dcim/rack.html:126 +#: netbox/templates/dcim/rack_elevation_list.html:16 msgid "Images only" msgstr "Pouze obrázky" -#: templates/dcim/rack.html:127 templates/dcim/rack_elevation_list.html:17 +#: netbox/templates/dcim/rack.html:127 +#: netbox/templates/dcim/rack_elevation_list.html:17 msgid "Labels only" msgstr "Pouze štítky" -#: templates/dcim/rack/reservations.html:8 +#: netbox/templates/dcim/rack/reservations.html:8 msgid "Add reservation" msgstr "Přidat rezervaci" -#: templates/dcim/rack_elevation_list.html:12 +#: netbox/templates/dcim/rack_elevation_list.html:12 msgid "View List" msgstr "Zobrazit seznam" -#: templates/dcim/rack_elevation_list.html:14 +#: netbox/templates/dcim/rack_elevation_list.html:14 msgid "Select rack view" msgstr "Vyberte zobrazení stojanu" -#: templates/dcim/rack_elevation_list.html:25 +#: netbox/templates/dcim/rack_elevation_list.html:25 msgid "Sort By" msgstr "Seřadit podle" -#: templates/dcim/rack_elevation_list.html:74 +#: netbox/templates/dcim/rack_elevation_list.html:74 msgid "No Racks Found" msgstr "Nebyly nalezeny žádné stojany" -#: templates/dcim/rack_list.html:8 +#: netbox/templates/dcim/rack_list.html:8 msgid "View Elevations" msgstr "Zobrazení výšek" -#: templates/dcim/rackreservation.html:42 +#: netbox/templates/dcim/rackreservation.html:42 msgid "Reservation Details" msgstr "Podrobnosti o rezervaci" -#: templates/dcim/rackrole.html:10 +#: netbox/templates/dcim/rackrole.html:10 msgid "Add Rack" msgstr "Přidat stojan" -#: templates/dcim/rearport.html:50 +#: netbox/templates/dcim/rearport.html:50 msgid "Positions" msgstr "Pozice" -#: templates/dcim/region.html:17 templates/dcim/sitegroup.html:17 +#: netbox/templates/dcim/region.html:17 +#: netbox/templates/dcim/sitegroup.html:17 msgid "Add Site" msgstr "Přidat web" -#: templates/dcim/region.html:55 +#: netbox/templates/dcim/region.html:55 msgid "Child Regions" msgstr "Dětské regiony" -#: templates/dcim/region.html:59 +#: netbox/templates/dcim/region.html:59 msgid "Add Region" msgstr "Přidat region" -#: templates/dcim/site.html:64 +#: netbox/templates/dcim/site.html:64 msgid "Time Zone" msgstr "Časové pásmo" -#: templates/dcim/site.html:67 +#: netbox/templates/dcim/site.html:67 msgid "UTC" msgstr "UTC" -#: templates/dcim/site.html:68 +#: netbox/templates/dcim/site.html:68 msgid "Site time" msgstr "Čas webu" -#: templates/dcim/site.html:75 +#: netbox/templates/dcim/site.html:75 msgid "Physical Address" msgstr "Fyzická adresa" -#: templates/dcim/site.html:90 +#: netbox/templates/dcim/site.html:90 msgid "Shipping Address" msgstr "Doručovací adresa" -#: templates/dcim/sitegroup.html:55 templates/tenancy/contactgroup.html:46 -#: templates/tenancy/tenantgroup.html:55 -#: templates/wireless/wirelesslangroup.html:55 +#: netbox/templates/dcim/sitegroup.html:55 +#: netbox/templates/tenancy/contactgroup.html:46 +#: netbox/templates/tenancy/tenantgroup.html:55 +#: netbox/templates/wireless/wirelesslangroup.html:55 msgid "Child Groups" msgstr "Skupiny dětí" -#: templates/dcim/sitegroup.html:59 +#: netbox/templates/dcim/sitegroup.html:59 msgid "Add Site Group" msgstr "Přidat skupinu webů" -#: templates/dcim/trace/attachment.html:5 -#: templates/extras/exporttemplate.html:31 +#: netbox/templates/dcim/trace/attachment.html:5 +#: netbox/templates/extras/exporttemplate.html:31 msgid "Attachment" msgstr "Příloha" -#: templates/dcim/virtualchassis.html:57 +#: netbox/templates/dcim/virtualchassis.html:57 msgid "Add Member" msgstr "Přidat člena" -#: templates/dcim/virtualchassis_add.html:18 +#: netbox/templates/dcim/virtualchassis_add.html:18 msgid "Member Devices" msgstr "Členská zařízení" -#: templates/dcim/virtualchassis_add_member.html:10 +#: netbox/templates/dcim/virtualchassis_add_member.html:10 #, python-format msgid "Add New Member to Virtual Chassis %(virtual_chassis)s" msgstr "Přidání nového člena do virtuálního šasi %(virtual_chassis)s" -#: templates/dcim/virtualchassis_add_member.html:19 +#: netbox/templates/dcim/virtualchassis_add_member.html:19 msgid "Add New Member" msgstr "Přidat nového člena" -#: templates/dcim/virtualchassis_add_member.html:27 -#: templates/generic/object_edit.html:78 -#: templates/users/objectpermission.html:31 users/forms/filtersets.py:67 -#: users/forms/model_forms.py:312 +#: netbox/templates/dcim/virtualchassis_add_member.html:27 +#: netbox/templates/generic/object_edit.html:78 +#: netbox/templates/users/objectpermission.html:31 +#: netbox/users/forms/filtersets.py:67 netbox/users/forms/model_forms.py:312 msgid "Actions" msgstr "Akce" -#: templates/dcim/virtualchassis_add_member.html:29 +#: netbox/templates/dcim/virtualchassis_add_member.html:29 msgid "Save & Add Another" msgstr "Uložit a přidat další" -#: templates/dcim/virtualchassis_edit.html:7 +#: netbox/templates/dcim/virtualchassis_edit.html:7 #, python-format msgid "Editing Virtual Chassis %(name)s" msgstr "Úpravy virtuálního šasi %(name)s" -#: templates/dcim/virtualchassis_edit.html:53 +#: netbox/templates/dcim/virtualchassis_edit.html:53 msgid "Rack/Unit" msgstr "Stojan/jednotka" -#: templates/dcim/virtualchassis_remove_member.html:5 +#: netbox/templates/dcim/virtualchassis_remove_member.html:5 msgid "Remove Virtual Chassis Member" msgstr "Odebrat člena virtuálního šasi" -#: templates/dcim/virtualchassis_remove_member.html:9 +#: netbox/templates/dcim/virtualchassis_remove_member.html:9 #, python-format msgid "" "Are you sure you want to remove %(device)s from virtual " @@ -12307,11 +13088,12 @@ msgstr "" "Jste si jisti, že chcete odstranit %(device)s z virtuálního" " šasi %(name)s?" -#: templates/dcim/virtualdevicecontext.html:26 templates/vpn/l2vpn.html:18 +#: netbox/templates/dcim/virtualdevicecontext.html:26 +#: netbox/templates/vpn/l2vpn.html:18 msgid "Identifier" msgstr "Identifikátor" -#: templates/exceptions/import_error.html:6 +#: netbox/templates/exceptions/import_error.html:6 msgid "" "A module import error occurred during this request. Common causes include " "the following:" @@ -12319,11 +13101,11 @@ msgstr "" "Během tohoto požadavku došlo k chybě importu modulu. Mezi běžné příčiny " "patří následující:" -#: templates/exceptions/import_error.html:10 +#: netbox/templates/exceptions/import_error.html:10 msgid "Missing required packages" msgstr "Chybí požadované balíčky" -#: templates/exceptions/import_error.html:11 +#: netbox/templates/exceptions/import_error.html:11 msgid "" "This installation of NetBox might be missing one or more required Python " "packages. These packages are listed in requirements.txt and " @@ -12339,11 +13121,11 @@ msgstr "" "spusťte zmrazení pipů z konzoly a porovnejte výstup se seznamem" " požadovaných balíčků." -#: templates/exceptions/import_error.html:20 +#: netbox/templates/exceptions/import_error.html:20 msgid "WSGI service not restarted after upgrade" msgstr "Služba WSGI nebyla restartována po upgradu" -#: templates/exceptions/import_error.html:21 +#: netbox/templates/exceptions/import_error.html:21 msgid "" "If this installation has recently been upgraded, check that the WSGI service" " (e.g. gunicorn or uWSGI) has been restarted. This ensures that the new code" @@ -12353,7 +13135,7 @@ msgstr "" "restartována služba WSGI (např. gunicorn nebo uWSGi). Tím je zajištěno, že " "nový kód je spuštěn." -#: templates/exceptions/permission_error.html:6 +#: netbox/templates/exceptions/permission_error.html:6 msgid "" "A file permission error was detected while processing this request. Common " "causes include the following:" @@ -12361,11 +13143,11 @@ msgstr "" "Při zpracování tohoto požadavku byla zjištěna chyba oprávnění k souboru. " "Mezi běžné příčiny patří následující:" -#: templates/exceptions/permission_error.html:10 +#: netbox/templates/exceptions/permission_error.html:10 msgid "Insufficient write permission to the media root" msgstr "Nedostatečné oprávnění k zápisu do kořenového adresáře média" -#: templates/exceptions/permission_error.html:11 +#: netbox/templates/exceptions/permission_error.html:11 #, python-format msgid "" "The configured media root is %(media_root)s. Ensure that the " @@ -12376,7 +13158,7 @@ msgstr "" "uživatel NetBox běží tak, jak má přístup k zápisu souborů do všech umístění " "v rámci této cesty." -#: templates/exceptions/programming_error.html:6 +#: netbox/templates/exceptions/programming_error.html:6 msgid "" "A database programming error was detected while processing this request. " "Common causes include the following:" @@ -12384,11 +13166,11 @@ msgstr "" "Při zpracování tohoto požadavku byla zjištěna chyba programování databáze. " "Mezi běžné příčiny patří následující:" -#: templates/exceptions/programming_error.html:10 +#: netbox/templates/exceptions/programming_error.html:10 msgid "Database migrations missing" msgstr "Chybí migrace databáze" -#: templates/exceptions/programming_error.html:11 +#: netbox/templates/exceptions/programming_error.html:11 msgid "" "When upgrading to a new NetBox release, the upgrade script must be run to " "apply any new database migrations. You can run migrations manually by " @@ -12398,11 +13180,11 @@ msgstr "" "možné použít všechny nové migrace databáze. Migrace můžete spouštět ručně " "provedením python3 manage.py migrovat z příkazového řádku." -#: templates/exceptions/programming_error.html:18 +#: netbox/templates/exceptions/programming_error.html:18 msgid "Unsupported PostgreSQL version" msgstr "Nepodporovaná verze PostgreSQL" -#: templates/exceptions/programming_error.html:19 +#: netbox/templates/exceptions/programming_error.html:19 msgid "" "Ensure that PostgreSQL version 12 or later is in use. You can check this by " "connecting to the database using NetBox's credentials and issuing a query " @@ -12412,99 +13194,102 @@ msgstr "" "zkontrolovat připojením k databázi pomocí přihlašovacích údajů NetBoxu a " "zadáním dotazu na VYBERTE VERZI ()." -#: templates/extras/configcontext.html:45 -#: templates/extras/configtemplate.html:37 -#: templates/extras/exporttemplate.html:51 +#: netbox/templates/extras/configcontext.html:45 +#: netbox/templates/extras/configtemplate.html:37 +#: netbox/templates/extras/exporttemplate.html:51 msgid "The data file associated with this object has been deleted" msgstr "Datový soubor přidružený k tomuto objektu byl smazán" -#: templates/extras/configcontext.html:54 -#: templates/extras/configtemplate.html:46 -#: templates/extras/exporttemplate.html:60 +#: netbox/templates/extras/configcontext.html:54 +#: netbox/templates/extras/configtemplate.html:46 +#: netbox/templates/extras/exporttemplate.html:60 msgid "Data Synced" msgstr "Synchronizovaná data" -#: templates/extras/configcontext_list.html:7 -#: templates/extras/configtemplate_list.html:7 -#: templates/extras/exporttemplate_list.html:7 +#: netbox/templates/extras/configcontext_list.html:7 +#: netbox/templates/extras/configtemplate_list.html:7 +#: netbox/templates/extras/exporttemplate_list.html:7 msgid "Sync Data" msgstr "Synchronizace dat" -#: templates/extras/configtemplate.html:56 +#: netbox/templates/extras/configtemplate.html:56 msgid "Environment Parameters" msgstr "Parametry prostředí" -#: templates/extras/configtemplate.html:67 -#: templates/extras/exporttemplate.html:79 +#: netbox/templates/extras/configtemplate.html:67 +#: netbox/templates/extras/exporttemplate.html:79 msgid "Template" msgstr "Šablona" -#: templates/extras/customfield.html:30 templates/extras/customlink.html:21 +#: netbox/templates/extras/customfield.html:30 +#: netbox/templates/extras/customlink.html:21 msgid "Group Name" msgstr "Název skupiny" -#: templates/extras/customfield.html:42 +#: netbox/templates/extras/customfield.html:42 msgid "Must be Unique" msgstr "Musí být jedinečný" -#: templates/extras/customfield.html:46 +#: netbox/templates/extras/customfield.html:46 msgid "Cloneable" msgstr "Klonovatelný" -#: templates/extras/customfield.html:56 +#: netbox/templates/extras/customfield.html:56 msgid "Default Value" msgstr "Výchozí hodnota" -#: templates/extras/customfield.html:73 +#: netbox/templates/extras/customfield.html:73 msgid "Search Weight" msgstr "Hledat Hmotnost" -#: templates/extras/customfield.html:83 +#: netbox/templates/extras/customfield.html:83 msgid "Filter Logic" msgstr "Filtrování logiky" -#: templates/extras/customfield.html:87 +#: netbox/templates/extras/customfield.html:87 msgid "Display Weight" msgstr "Hmotnost displeje" -#: templates/extras/customfield.html:91 +#: netbox/templates/extras/customfield.html:91 msgid "UI Visible" msgstr "Uživatelské rozhraní viditelné" -#: templates/extras/customfield.html:95 +#: netbox/templates/extras/customfield.html:95 msgid "UI Editable" msgstr "Upravitelné uživatelské rozhraní" -#: templates/extras/customfield.html:115 +#: netbox/templates/extras/customfield.html:115 msgid "Validation Rules" msgstr "Ověřovací pravidla" -#: templates/extras/customfield.html:126 +#: netbox/templates/extras/customfield.html:126 msgid "Regular Expression" msgstr "Regulární výraz" -#: templates/extras/customlink.html:29 +#: netbox/templates/extras/customlink.html:29 msgid "Button Class" msgstr "Třída tlačítek" -#: templates/extras/customlink.html:39 templates/extras/exporttemplate.html:66 -#: templates/extras/savedfilter.html:39 +#: netbox/templates/extras/customlink.html:39 +#: netbox/templates/extras/exporttemplate.html:66 +#: netbox/templates/extras/savedfilter.html:39 msgid "Assigned Models" msgstr "Přiřazené modely" -#: templates/extras/customlink.html:52 +#: netbox/templates/extras/customlink.html:52 msgid "Link Text" msgstr "Text odkazu" -#: templates/extras/customlink.html:58 +#: netbox/templates/extras/customlink.html:58 msgid "Link URL" msgstr "URL odkazu" -#: templates/extras/dashboard/reset.html:4 templates/home.html:66 +#: netbox/templates/extras/dashboard/reset.html:4 +#: netbox/templates/home.html:66 msgid "Reset Dashboard" msgstr "Obnovit řídicí panel" -#: templates/extras/dashboard/reset.html:8 +#: netbox/templates/extras/dashboard/reset.html:8 msgid "" "This will remove all configured widgets and restore the " "default dashboard configuration." @@ -12512,7 +13297,7 @@ msgstr "" "Tím se odstraní všichni nakonfigurované widgety a obnovení " "výchozí konfigurace řídicího panelu." -#: templates/extras/dashboard/reset.html:13 +#: netbox/templates/extras/dashboard/reset.html:13 msgid "" "This change affects only your dashboard, and will not impact other " "users." @@ -12520,154 +13305,161 @@ msgstr "" "Tato změna se týká pouze váš řídicí panel, a nebude mít vliv na " "ostatní uživatele." -#: templates/extras/dashboard/widget.html:21 +#: netbox/templates/extras/dashboard/widget.html:21 msgid "widget configuration" msgstr "konfigurace widgetu" -#: templates/extras/dashboard/widget.html:36 +#: netbox/templates/extras/dashboard/widget.html:36 msgid "Close widget" msgstr "Zavřít widget" -#: templates/extras/dashboard/widget_add.html:7 +#: netbox/templates/extras/dashboard/widget_add.html:7 msgid "Add a Widget" msgstr "Přidání widgetu" -#: templates/extras/dashboard/widgets/bookmarks.html:14 +#: netbox/templates/extras/dashboard/widgets/bookmarks.html:14 msgid "No bookmarks have been added yet." msgstr "Zatím nebyly přidány žádné záložky." -#: templates/extras/dashboard/widgets/objectcounts.html:10 +#: netbox/templates/extras/dashboard/widgets/objectcounts.html:10 msgid "No permission" msgstr "Žádné povolení" -#: templates/extras/dashboard/widgets/objectlist.html:6 +#: netbox/templates/extras/dashboard/widgets/objectlist.html:6 msgid "No permission to view this content" msgstr "Žádné oprávnění k prohlížení tohoto obsahu" -#: templates/extras/dashboard/widgets/objectlist.html:10 +#: netbox/templates/extras/dashboard/widgets/objectlist.html:10 msgid "Unable to load content. Invalid view name" msgstr "Nelze načíst obsah. Neplatný název pohledu" -#: templates/extras/dashboard/widgets/rssfeed.html:12 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:12 msgid "No content found" msgstr "Nebyl nalezen žádný obsah" -#: templates/extras/dashboard/widgets/rssfeed.html:18 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:18 msgid "There was a problem fetching the RSS feed" msgstr "Při načítání kanálu RSS došlo k problému" -#: templates/extras/dashboard/widgets/rssfeed.html:21 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:21 msgid "HTTP" msgstr "HTTP" -#: templates/extras/eventrule.html:61 +#: netbox/templates/extras/eventrule.html:61 msgid "Conditions" msgstr "Podmínky" -#: templates/extras/exporttemplate.html:23 +#: netbox/templates/extras/exporttemplate.html:23 msgid "MIME Type" msgstr "Typ MIME" -#: templates/extras/exporttemplate.html:27 +#: netbox/templates/extras/exporttemplate.html:27 msgid "File Extension" msgstr "Přípona souboru" -#: templates/extras/htmx/script_result.html:10 +#: netbox/templates/extras/htmx/script_result.html:10 msgid "Scheduled for" msgstr "Naplánováno na" -#: templates/extras/htmx/script_result.html:15 +#: netbox/templates/extras/htmx/script_result.html:15 msgid "Duration" msgstr "Doba trvání" -#: templates/extras/htmx/script_result.html:23 +#: netbox/templates/extras/htmx/script_result.html:23 msgid "Test Summary" msgstr "Souhrn testu" -#: templates/extras/htmx/script_result.html:43 +#: netbox/templates/extras/htmx/script_result.html:43 msgid "Log" msgstr "Protokol" -#: templates/extras/htmx/script_result.html:56 +#: netbox/templates/extras/htmx/script_result.html:56 msgid "Output" msgstr "Výstup" -#: templates/extras/inc/result_pending.html:4 +#: netbox/templates/extras/inc/result_pending.html:4 msgid "Loading" msgstr "Načítání" -#: templates/extras/inc/result_pending.html:6 +#: netbox/templates/extras/inc/result_pending.html:6 msgid "Results pending" msgstr "Výsledky čekají na vyřízení" -#: templates/extras/journalentry.html:15 +#: netbox/templates/extras/journalentry.html:15 msgid "Journal Entry" msgstr "Zápis do deníku" -#: templates/extras/notificationgroup.html:11 +#: netbox/templates/extras/notificationgroup.html:11 msgid "Notification Group" msgstr "Skupina oznámení" -#: templates/extras/notificationgroup.html:36 -#: templates/extras/notificationgroup.html:46 -#: utilities/templates/widgets/clearable_file_input.html:12 +#: netbox/templates/extras/notificationgroup.html:36 +#: netbox/templates/extras/notificationgroup.html:46 +#: netbox/utilities/templates/widgets/clearable_file_input.html:12 msgid "None assigned" msgstr "Žádné přiřazení" -#: templates/extras/object_configcontext.html:19 +#: netbox/templates/extras/object_configcontext.html:19 msgid "The local config context overwrites all source contexts" msgstr "Místní kontext konfigurace přepíše všechny zdrojové kontexty" -#: templates/extras/object_configcontext.html:25 +#: netbox/templates/extras/object_configcontext.html:25 msgid "Source Contexts" msgstr "Zdrojové kontexty" -#: templates/extras/object_journal.html:17 +#: netbox/templates/extras/object_journal.html:17 msgid "New Journal Entry" msgstr "Nová položka deníku" -#: templates/extras/report/base.html:30 +#: netbox/templates/extras/report/base.html:30 msgid "Report" msgstr "Zpráva" -#: templates/extras/script.html:14 +#: netbox/templates/extras/script.html:14 msgid "You do not have permission to run scripts" msgstr "Nemáte oprávnění spouštět skripty" -#: templates/extras/script.html:41 templates/extras/script.html:45 -#: templates/extras/script_list.html:86 +#: netbox/templates/extras/script.html:41 +#: netbox/templates/extras/script.html:45 +#: netbox/templates/extras/script_list.html:87 msgid "Run Script" msgstr "Spustit skript" -#: templates/extras/script.html:51 templates/extras/script/source.html:10 +#: netbox/templates/extras/script.html:51 +#: netbox/templates/extras/script/source.html:10 msgid "Error loading script" msgstr "Chyba při načítání skriptu" -#: templates/extras/script/jobs.html:16 +#: netbox/templates/extras/script/jobs.html:16 msgid "Script no longer exists in the source file." msgstr "Skript již ve zdrojovém souboru neexistuje." -#: templates/extras/script_list.html:46 +#: netbox/templates/extras/script_list.html:47 msgid "Last Run" msgstr "Poslední běh" -#: templates/extras/script_list.html:61 +#: netbox/templates/extras/script_list.html:62 msgid "Script is no longer present in the source file" msgstr "Skript již není přítomen ve zdrojovém souboru" -#: templates/extras/script_list.html:74 +#: netbox/templates/extras/script_list.html:75 msgid "Never" msgstr "Nikdy" -#: templates/extras/script_list.html:84 +#: netbox/templates/extras/script_list.html:85 msgid "Run Again" msgstr "Spustit znovu" -#: templates/extras/script_list.html:138 +#: netbox/templates/extras/script_list.html:133 +#, python-format +msgid "Could not load scripts from module %(module)s" +msgstr "Nelze načíst skripty z modulu %(module)s" + +#: netbox/templates/extras/script_list.html:141 msgid "No Scripts Found" msgstr "Nenalezeny žádné skripty" -#: templates/extras/script_list.html:141 +#: netbox/templates/extras/script_list.html:144 #, python-format msgid "" "Get started by creating a script from " @@ -12676,81 +13468,83 @@ msgstr "" "Začít od vytvoření skriptu z nahraného" " souboru nebo zdroje dat." -#: templates/extras/script_result.html:35 -#: templates/generic/object_list.html:50 templates/search.html:13 +#: netbox/templates/extras/script_result.html:35 +#: netbox/templates/generic/object_list.html:50 +#: netbox/templates/search.html:13 msgid "Results" msgstr "Výsledky" -#: templates/extras/script_result.html:46 +#: netbox/templates/extras/script_result.html:46 msgid "Log threshold" msgstr "Prahová hodnota protokolu" -#: templates/extras/script_result.html:56 +#: netbox/templates/extras/script_result.html:56 msgid "All" msgstr "Vše" -#: templates/extras/tag.html:32 +#: netbox/templates/extras/tag.html:32 msgid "Tagged Items" msgstr "Označené položky" -#: templates/extras/tag.html:43 +#: netbox/templates/extras/tag.html:43 msgid "Allowed Object Types" msgstr "Povolené typy objektů" -#: templates/extras/tag.html:51 +#: netbox/templates/extras/tag.html:51 msgid "Any" msgstr "Jakýkoliv" -#: templates/extras/tag.html:57 +#: netbox/templates/extras/tag.html:57 msgid "Tagged Item Types" msgstr "Typy označených položek" -#: templates/extras/tag.html:81 +#: netbox/templates/extras/tag.html:81 msgid "Tagged Objects" msgstr "Označené objekty" -#: templates/extras/webhook.html:26 +#: netbox/templates/extras/webhook.html:26 msgid "HTTP Method" msgstr "Metoda HTTP" -#: templates/extras/webhook.html:34 +#: netbox/templates/extras/webhook.html:34 msgid "HTTP Content Type" msgstr "Typ obsahu HTTP" -#: templates/extras/webhook.html:47 +#: netbox/templates/extras/webhook.html:47 msgid "SSL Verification" msgstr "Ověření SSL" -#: templates/extras/webhook.html:60 +#: netbox/templates/extras/webhook.html:60 msgid "Additional Headers" msgstr "Další záhlaví" -#: templates/extras/webhook.html:70 +#: netbox/templates/extras/webhook.html:70 msgid "Body Template" msgstr "Šablona těla" -#: templates/generic/bulk_add_component.html:29 +#: netbox/templates/generic/bulk_add_component.html:29 msgid "Bulk Creation" msgstr "Hromadná tvorba" -#: templates/generic/bulk_add_component.html:34 -#: templates/generic/bulk_delete.html:32 templates/generic/bulk_edit.html:33 +#: netbox/templates/generic/bulk_add_component.html:34 +#: netbox/templates/generic/bulk_delete.html:32 +#: netbox/templates/generic/bulk_edit.html:33 msgid "Selected Objects" msgstr "Vybrané objekty" -#: templates/generic/bulk_add_component.html:58 +#: netbox/templates/generic/bulk_add_component.html:58 msgid "to Add" msgstr "přidat" -#: templates/generic/bulk_delete.html:27 +#: netbox/templates/generic/bulk_delete.html:27 msgid "Bulk Delete" msgstr "Hromadné mazání" -#: templates/generic/bulk_delete.html:49 +#: netbox/templates/generic/bulk_delete.html:49 msgid "Confirm Bulk Deletion" msgstr "Potvrdit hromadné smazání" -#: templates/generic/bulk_delete.html:50 +#: netbox/templates/generic/bulk_delete.html:50 #, python-format msgid "" "The following operation will delete %(count)s " @@ -12760,64 +13554,67 @@ msgstr "" "Následující operace bude smazána %(count)s %(type_plural)s." " Pečlivě zkontrolujte vybrané objekty a potvrďte tuto akci." -#: templates/generic/bulk_edit.html:21 templates/generic/object_edit.html:22 +#: netbox/templates/generic/bulk_edit.html:21 +#: netbox/templates/generic/object_edit.html:22 msgid "Editing" msgstr "Editace" -#: templates/generic/bulk_edit.html:28 +#: netbox/templates/generic/bulk_edit.html:28 msgid "Bulk Edit" msgstr "Hromadné úpravy" -#: templates/generic/bulk_edit.html:107 templates/generic/bulk_rename.html:66 +#: netbox/templates/generic/bulk_edit.html:107 +#: netbox/templates/generic/bulk_rename.html:66 msgid "Apply" msgstr "Aplikujte" -#: templates/generic/bulk_import.html:19 +#: netbox/templates/generic/bulk_import.html:19 msgid "Bulk Import" msgstr "Hromadný import" -#: templates/generic/bulk_import.html:25 +#: netbox/templates/generic/bulk_import.html:25 msgid "Direct Import" msgstr "Přímý import" -#: templates/generic/bulk_import.html:30 +#: netbox/templates/generic/bulk_import.html:30 msgid "Upload File" msgstr "Nahrát soubor" -#: templates/generic/bulk_import.html:58 templates/generic/bulk_import.html:80 -#: templates/generic/bulk_import.html:102 +#: netbox/templates/generic/bulk_import.html:58 +#: netbox/templates/generic/bulk_import.html:80 +#: netbox/templates/generic/bulk_import.html:102 msgid "Submit" msgstr "Předložit" -#: templates/generic/bulk_import.html:113 +#: netbox/templates/generic/bulk_import.html:113 msgid "Field Options" msgstr "Možnosti pole" -#: templates/generic/bulk_import.html:119 +#: netbox/templates/generic/bulk_import.html:119 msgid "Accessor" msgstr "Přídavný" -#: templates/generic/bulk_import.html:148 +#: netbox/templates/generic/bulk_import.html:148 msgid "choices" msgstr "volby" -#: templates/generic/bulk_import.html:161 +#: netbox/templates/generic/bulk_import.html:161 msgid "Import Value" msgstr "Hodnota importu" -#: templates/generic/bulk_import.html:181 +#: netbox/templates/generic/bulk_import.html:181 msgid "Format: YYYY-MM-DD" msgstr "Formát: RRRR-MM-DD" -#: templates/generic/bulk_import.html:183 +#: netbox/templates/generic/bulk_import.html:183 msgid "Specify true or false" msgstr "Zadejte pravdivé nebo nepravdivé" -#: templates/generic/bulk_import.html:195 +#: netbox/templates/generic/bulk_import.html:195 msgid "Required fields must be specified for all objects." msgstr "Povinná pole musí Určeno pro všechny objekty." -#: templates/generic/bulk_import.html:201 +#: netbox/templates/generic/bulk_import.html:201 #, python-format msgid "" "Related objects may be referenced by any unique attribute. For example, " @@ -12827,15 +13624,15 @@ msgstr "" "Například, %(example)s by identifikoval VRF podle jeho " "rozlišovače tras." -#: templates/generic/bulk_remove.html:28 +#: netbox/templates/generic/bulk_remove.html:28 msgid "Bulk Remove" msgstr "Hromadné odstranění" -#: templates/generic/bulk_remove.html:42 +#: netbox/templates/generic/bulk_remove.html:42 msgid "Confirm Bulk Removal" msgstr "Potvrdit hromadné odstranění" -#: templates/generic/bulk_remove.html:43 +#: netbox/templates/generic/bulk_remove.html:43 #, python-format msgid "" "The following operation will remove %(count)s %(obj_type_plural)s from " @@ -12846,72 +13643,72 @@ msgstr "" "%(parent_obj)s. Pečlivě si prosím přečtěte %(obj_type_plural)s bude " "odstraněn a potvrzen níže." -#: templates/generic/bulk_remove.html:64 +#: netbox/templates/generic/bulk_remove.html:64 #, python-format msgid "Remove these %(count)s %(obj_type_plural)s" msgstr "Odstraňte tyto %(count)s %(obj_type_plural)s" -#: templates/generic/bulk_rename.html:20 +#: netbox/templates/generic/bulk_rename.html:20 msgid "Renaming" msgstr "Přejmenování" -#: templates/generic/bulk_rename.html:27 +#: netbox/templates/generic/bulk_rename.html:27 msgid "Bulk Rename" msgstr "Hromadné přejmenování" -#: templates/generic/bulk_rename.html:39 +#: netbox/templates/generic/bulk_rename.html:39 msgid "Current Name" msgstr "Aktuální jméno" -#: templates/generic/bulk_rename.html:40 +#: netbox/templates/generic/bulk_rename.html:40 msgid "New Name" msgstr "Nový název" -#: templates/generic/bulk_rename.html:64 -#: utilities/templates/widgets/markdown_input.html:11 +#: netbox/templates/generic/bulk_rename.html:64 +#: netbox/utilities/templates/widgets/markdown_input.html:11 msgid "Preview" msgstr "Náhled" -#: templates/generic/confirmation_form.html:16 +#: netbox/templates/generic/confirmation_form.html:16 msgid "Are you sure" msgstr "Jsi si jistý" -#: templates/generic/confirmation_form.html:20 +#: netbox/templates/generic/confirmation_form.html:20 msgid "Confirm" msgstr "Potvrdit" -#: templates/generic/object_children.html:47 -#: utilities/templates/buttons/bulk_edit.html:4 +#: netbox/templates/generic/object_children.html:47 +#: netbox/utilities/templates/buttons/bulk_edit.html:4 msgid "Edit Selected" msgstr "Upravit vybrané" -#: templates/generic/object_children.html:61 -#: utilities/templates/buttons/bulk_delete.html:4 +#: netbox/templates/generic/object_children.html:61 +#: netbox/utilities/templates/buttons/bulk_delete.html:4 msgid "Delete Selected" msgstr "Odstranit vybrané" -#: templates/generic/object_edit.html:24 +#: netbox/templates/generic/object_edit.html:24 #, python-format msgid "Add a new %(object_type)s" msgstr "Přidat nový %(object_type)s" -#: templates/generic/object_edit.html:35 +#: netbox/templates/generic/object_edit.html:35 msgid "View model documentation" msgstr "Zobrazit dokumentaci modelu" -#: templates/generic/object_edit.html:36 +#: netbox/templates/generic/object_edit.html:36 msgid "Help" msgstr "Pomoc" -#: templates/generic/object_edit.html:83 +#: netbox/templates/generic/object_edit.html:83 msgid "Create & Add Another" msgstr "Vytvořit a přidat další" -#: templates/generic/object_list.html:57 +#: netbox/templates/generic/object_list.html:57 msgid "Filters" msgstr "Filtry" -#: templates/generic/object_list.html:88 +#: netbox/templates/generic/object_list.html:88 #, python-format msgid "" "Select all %(count)s " @@ -12920,40 +13717,40 @@ msgstr "" "Vybrat všichni %(count)s " "%(object_type_plural)s odpovídající dotaz" -#: templates/home.html:15 +#: netbox/templates/home.html:15 msgid "New Release Available" msgstr "Nová verze k dispozici" -#: templates/home.html:16 +#: netbox/templates/home.html:16 msgid "is available" msgstr "je k dispozici" -#: templates/home.html:18 +#: netbox/templates/home.html:18 msgctxt "Document title" msgid "Upgrade Instructions" msgstr "Pokyny k upgradu" -#: templates/home.html:40 +#: netbox/templates/home.html:40 msgid "Unlock Dashboard" msgstr "Odemknout řídicí panel" -#: templates/home.html:49 +#: netbox/templates/home.html:49 msgid "Lock Dashboard" msgstr "Uzamknout řídicí panel" -#: templates/home.html:60 +#: netbox/templates/home.html:60 msgid "Add Widget" msgstr "Přidat widget" -#: templates/home.html:63 +#: netbox/templates/home.html:63 msgid "Save Layout" msgstr "Uložit rozvržení" -#: templates/htmx/delete_form.html:7 +#: netbox/templates/htmx/delete_form.html:7 msgid "Confirm Deletion" msgstr "Potvrdit odstranění" -#: templates/htmx/delete_form.html:11 +#: netbox/templates/htmx/delete_form.html:11 #, python-format msgid "" "Are you sure you want to delete " @@ -12962,40 +13759,40 @@ msgstr "" "Jsi si jistá, že chceš smazat " "%(object_type)s %(object)s?" -#: templates/htmx/delete_form.html:17 +#: netbox/templates/htmx/delete_form.html:17 msgid "The following objects will be deleted as a result of this action." msgstr "V důsledku této akce budou odstraněny následující objekty." -#: templates/htmx/notifications.html:15 +#: netbox/templates/htmx/notifications.html:15 msgid "ago" msgstr "před" -#: templates/htmx/notifications.html:26 +#: netbox/templates/htmx/notifications.html:26 msgid "No unread notifications" msgstr "Žádná nepřečtená oznámení" -#: templates/htmx/notifications.html:31 +#: netbox/templates/htmx/notifications.html:31 msgid "All notifications" msgstr "Všechna oznámení" -#: templates/htmx/object_selector.html:5 +#: netbox/templates/htmx/object_selector.html:5 msgid "Select" msgstr "Vybrat" -#: templates/inc/filter_list.html:43 -#: utilities/templates/helpers/table_config_form.html:39 +#: netbox/templates/inc/filter_list.html:43 +#: netbox/utilities/templates/helpers/table_config_form.html:39 msgid "Reset" msgstr "Obnovit" -#: templates/inc/light_toggle.html:4 +#: netbox/templates/inc/light_toggle.html:4 msgid "Enable dark mode" msgstr "Povolit tmavý režim" -#: templates/inc/light_toggle.html:7 +#: netbox/templates/inc/light_toggle.html:7 msgid "Enable light mode" msgstr "Povolit světelný režim" -#: templates/inc/missing_prerequisites.html:8 +#: netbox/templates/inc/missing_prerequisites.html:8 #, python-format msgid "" "Before you can add a %(model)s you must first create a " @@ -13004,281 +13801,283 @@ msgstr "" "Než budete moci přidat %(model)s Nejprve musíte vytvořit " "%(prerequisite_model)s." -#: templates/inc/paginator.html:15 +#: netbox/templates/inc/paginator.html:15 msgid "Page selection" msgstr "Výběr stránky" -#: templates/inc/paginator.html:75 +#: netbox/templates/inc/paginator.html:75 #, python-format msgid "Showing %(start)s-%(end)s of %(total)s" msgstr "Zobrazeno %(start)s-%(end)s z %(total)s" -#: templates/inc/paginator.html:82 +#: netbox/templates/inc/paginator.html:82 msgid "Pagination options" msgstr "Možnosti stránkování" -#: templates/inc/paginator.html:86 +#: netbox/templates/inc/paginator.html:86 msgid "Per Page" msgstr "Na stránku" -#: templates/inc/panels/image_attachments.html:10 +#: netbox/templates/inc/panels/image_attachments.html:10 msgid "Attach an image" msgstr "Připojit obrázek" -#: templates/inc/panels/related_objects.html:5 +#: netbox/templates/inc/panels/related_objects.html:5 msgid "Related Objects" msgstr "Související objekty" -#: templates/inc/panels/tags.html:11 +#: netbox/templates/inc/panels/tags.html:11 msgid "No tags assigned" msgstr "Žádné tagy nejsou přiřazeny" -#: templates/inc/sync_warning.html:10 +#: netbox/templates/inc/sync_warning.html:10 msgid "Data is out of sync with upstream file" msgstr "Data nejsou synchronizována s upstream souborem" -#: templates/inc/table_controls_htmx.html:7 +#: netbox/templates/inc/table_controls_htmx.html:7 msgid "Quick search" msgstr "Rychlé vyhledávání" -#: templates/inc/table_controls_htmx.html:20 +#: netbox/templates/inc/table_controls_htmx.html:20 msgid "Saved filter" msgstr "Uložený filtr" -#: templates/inc/table_htmx.html:18 +#: netbox/templates/inc/table_htmx.html:18 msgid "Clear ordering" msgstr "Jasné objednávání" -#: templates/inc/user_menu.html:6 +#: netbox/templates/inc/user_menu.html:6 msgid "Help center" msgstr "Centrum nápovědy" -#: templates/inc/user_menu.html:41 +#: netbox/templates/inc/user_menu.html:41 msgid "Django Admin" msgstr "Správce Django" -#: templates/inc/user_menu.html:61 +#: netbox/templates/inc/user_menu.html:61 msgid "Log Out" msgstr "Odhlásit se" -#: templates/inc/user_menu.html:68 templates/login.html:38 +#: netbox/templates/inc/user_menu.html:68 netbox/templates/login.html:38 msgid "Log In" msgstr "Přihlásit se" -#: templates/ipam/aggregate.html:14 templates/ipam/ipaddress.html:14 -#: templates/ipam/iprange.html:13 templates/ipam/prefix.html:15 +#: netbox/templates/ipam/aggregate.html:14 +#: netbox/templates/ipam/ipaddress.html:14 +#: netbox/templates/ipam/iprange.html:13 netbox/templates/ipam/prefix.html:15 msgid "Family" msgstr "Rodina" -#: templates/ipam/aggregate.html:39 +#: netbox/templates/ipam/aggregate.html:39 msgid "Date Added" msgstr "Datum přidání" -#: templates/ipam/aggregate/prefixes.html:8 -#: templates/ipam/prefix/prefixes.html:8 templates/ipam/role.html:10 +#: netbox/templates/ipam/aggregate/prefixes.html:8 +#: netbox/templates/ipam/prefix/prefixes.html:8 +#: netbox/templates/ipam/role.html:10 msgid "Add Prefix" msgstr "Přidat předponu" -#: templates/ipam/asn.html:23 +#: netbox/templates/ipam/asn.html:23 msgid "AS Number" msgstr "Číslo AS" -#: templates/ipam/fhrpgroup.html:52 +#: netbox/templates/ipam/fhrpgroup.html:52 msgid "Authentication Type" msgstr "Typ ověřování" -#: templates/ipam/fhrpgroup.html:56 +#: netbox/templates/ipam/fhrpgroup.html:56 msgid "Authentication Key" msgstr "Ověřovací klíč" -#: templates/ipam/fhrpgroup.html:69 +#: netbox/templates/ipam/fhrpgroup.html:69 msgid "Virtual IP Addresses" msgstr "Virtuální IP adresy" -#: templates/ipam/inc/ipaddress_edit_header.html:13 +#: netbox/templates/ipam/inc/ipaddress_edit_header.html:13 msgid "Assign IP" msgstr "Přiřadit IP" -#: templates/ipam/inc/ipaddress_edit_header.html:19 +#: netbox/templates/ipam/inc/ipaddress_edit_header.html:19 msgid "Bulk Create" msgstr "Hromadné vytváření" -#: templates/ipam/inc/panels/fhrp_groups.html:10 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:10 msgid "Create Group" msgstr "Vytvořit skupinu" -#: templates/ipam/inc/panels/fhrp_groups.html:25 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:25 msgid "Virtual IPs" msgstr "Virtuální IP" -#: templates/ipam/inc/toggle_available.html:7 +#: netbox/templates/ipam/inc/toggle_available.html:7 msgid "Show Assigned" msgstr "Zobrazit přiřazené" -#: templates/ipam/inc/toggle_available.html:10 +#: netbox/templates/ipam/inc/toggle_available.html:10 msgid "Show Available" msgstr "Zobrazit Dostupné" -#: templates/ipam/inc/toggle_available.html:13 +#: netbox/templates/ipam/inc/toggle_available.html:13 msgid "Show All" msgstr "Zobrazit vše" -#: templates/ipam/ipaddress.html:23 templates/ipam/iprange.html:45 -#: templates/ipam/prefix.html:24 +#: netbox/templates/ipam/ipaddress.html:23 +#: netbox/templates/ipam/iprange.html:45 netbox/templates/ipam/prefix.html:24 msgid "Global" msgstr "Globální" -#: templates/ipam/ipaddress.html:85 +#: netbox/templates/ipam/ipaddress.html:85 msgid "NAT (outside)" msgstr "NAT (vnější)" -#: templates/ipam/ipaddress_assign.html:8 +#: netbox/templates/ipam/ipaddress_assign.html:8 msgid "Assign an IP Address" msgstr "Přiřaďte IP adresu" -#: templates/ipam/ipaddress_assign.html:22 +#: netbox/templates/ipam/ipaddress_assign.html:22 msgid "Select IP Address" msgstr "Vyberte IP adresu" -#: templates/ipam/ipaddress_assign.html:35 +#: netbox/templates/ipam/ipaddress_assign.html:35 msgid "Search Results" msgstr "Výsledky vyhledávání" -#: templates/ipam/ipaddress_bulk_add.html:6 +#: netbox/templates/ipam/ipaddress_bulk_add.html:6 msgid "Bulk Add IP Addresses" msgstr "Hromadné přidávání IP adres" -#: templates/ipam/iprange.html:17 +#: netbox/templates/ipam/iprange.html:17 msgid "Starting Address" msgstr "Počáteční adresa" -#: templates/ipam/iprange.html:21 +#: netbox/templates/ipam/iprange.html:21 msgid "Ending Address" msgstr "Koncová adresa" -#: templates/ipam/iprange.html:33 templates/ipam/prefix.html:110 +#: netbox/templates/ipam/iprange.html:33 netbox/templates/ipam/prefix.html:110 msgid "Marked fully utilized" msgstr "Označeno plně využito" -#: templates/ipam/prefix.html:99 +#: netbox/templates/ipam/prefix.html:99 msgid "Addressing Details" msgstr "Podrobnosti o adresování" -#: templates/ipam/prefix.html:118 +#: netbox/templates/ipam/prefix.html:118 msgid "Child IPs" msgstr "Dětské IP adresy" -#: templates/ipam/prefix.html:126 +#: netbox/templates/ipam/prefix.html:126 msgid "Available IPs" msgstr "Dostupné IP adresy" -#: templates/ipam/prefix.html:138 +#: netbox/templates/ipam/prefix.html:138 msgid "First available IP" msgstr "První dostupná IP" -#: templates/ipam/prefix.html:179 +#: netbox/templates/ipam/prefix.html:179 msgid "Prefix Details" msgstr "Podrobnosti o předponě" -#: templates/ipam/prefix.html:185 +#: netbox/templates/ipam/prefix.html:185 msgid "Network Address" msgstr "Síťová adresa" -#: templates/ipam/prefix.html:189 +#: netbox/templates/ipam/prefix.html:189 msgid "Network Mask" msgstr "Síťová maska" -#: templates/ipam/prefix.html:193 +#: netbox/templates/ipam/prefix.html:193 msgid "Wildcard Mask" msgstr "Zástupná maska" -#: templates/ipam/prefix.html:197 +#: netbox/templates/ipam/prefix.html:197 msgid "Broadcast Address" msgstr "Adresa vysílání" -#: templates/ipam/prefix/ip_ranges.html:7 +#: netbox/templates/ipam/prefix/ip_ranges.html:7 msgid "Add IP Range" msgstr "Přidat rozsah IP" -#: templates/ipam/prefix_list.html:7 +#: netbox/templates/ipam/prefix_list.html:7 msgid "Hide Depth Indicators" msgstr "Skrýt indikátory hloubky" -#: templates/ipam/prefix_list.html:11 +#: netbox/templates/ipam/prefix_list.html:11 msgid "Max Depth" msgstr "Maximální hloubka" -#: templates/ipam/prefix_list.html:28 +#: netbox/templates/ipam/prefix_list.html:28 msgid "Max Length" msgstr "Maximální délka" -#: templates/ipam/rir.html:10 +#: netbox/templates/ipam/rir.html:10 msgid "Add Aggregate" msgstr "Přidat agregát" -#: templates/ipam/routetarget.html:38 +#: netbox/templates/ipam/routetarget.html:38 msgid "Importing VRFs" msgstr "Import souborů VRF" -#: templates/ipam/routetarget.html:44 +#: netbox/templates/ipam/routetarget.html:44 msgid "Exporting VRFs" msgstr "Export souborů VRF" -#: templates/ipam/routetarget.html:52 +#: netbox/templates/ipam/routetarget.html:52 msgid "Importing L2VPNs" msgstr "Import L2VPN" -#: templates/ipam/routetarget.html:58 +#: netbox/templates/ipam/routetarget.html:58 msgid "Exporting L2VPNs" msgstr "Export L2VPN" -#: templates/ipam/vlan.html:88 +#: netbox/templates/ipam/vlan.html:88 msgid "Add a Prefix" msgstr "Přidání předpony" -#: templates/ipam/vlangroup.html:18 +#: netbox/templates/ipam/vlangroup.html:18 msgid "Add VLAN" msgstr "Přidat VLAN" -#: templates/ipam/vrf.html:16 +#: netbox/templates/ipam/vrf.html:16 msgid "Route Distinguisher" msgstr "Rozlišovač tras" -#: templates/ipam/vrf.html:29 +#: netbox/templates/ipam/vrf.html:29 msgid "Unique IP Space" msgstr "Unikátní IP prostor" -#: templates/login.html:29 -#: utilities/templates/form_helpers/render_errors.html:7 +#: netbox/templates/login.html:29 +#: netbox/utilities/templates/form_helpers/render_errors.html:7 msgid "Errors" msgstr "Chyby" -#: templates/login.html:69 +#: netbox/templates/login.html:69 msgid "Sign In" msgstr "Přihlásit se" -#: templates/login.html:77 +#: netbox/templates/login.html:77 msgctxt "Denotes an alternative option" msgid "Or" msgstr "Nebo" -#: templates/media_failure.html:7 +#: netbox/templates/media_failure.html:7 msgid "Static Media Failure - NetBox" msgstr "Selhání statického média - NetBox" -#: templates/media_failure.html:21 +#: netbox/templates/media_failure.html:21 msgid "Static Media Failure" msgstr "Selhání statického média" -#: templates/media_failure.html:23 +#: netbox/templates/media_failure.html:23 msgid "The following static media file failed to load" msgstr "Následující soubor statického média se nepodařilo načíst" -#: templates/media_failure.html:26 +#: netbox/templates/media_failure.html:26 msgid "Check the following" msgstr "Zkontrolujte následující" -#: templates/media_failure.html:29 +#: netbox/templates/media_failure.html:29 msgid "" "manage.py collectstatic was run during the most recent upgrade." " This installs the most recent iteration of each static file into the static" @@ -13288,7 +14087,7 @@ msgstr "" "Tím se nainstaluje nejnovější iterace každého statického souboru do statické" " kořenové cesty." -#: templates/media_failure.html:35 +#: netbox/templates/media_failure.html:35 #, python-format msgid "" "The HTTP service (e.g. nginx or Apache) is configured to serve files from " @@ -13299,7 +14098,7 @@ msgstr "" "obsluhovala soubory z STATIC_ROOT cesta. Odkaz na instalační dokumentace pro další vedení." -#: templates/media_failure.html:47 +#: netbox/templates/media_failure.html:47 #, python-format msgid "" "The file %(filename)s exists in the static root directory and " @@ -13308,548 +14107,572 @@ msgstr "" "Soubor %(filename)s existuje ve statickém kořenovém adresáři a " "je čitelný serverem HTTP." -#: templates/media_failure.html:55 +#: netbox/templates/media_failure.html:55 #, python-format msgid "Click here to attempt loading NetBox again." msgstr "" "Klepněte na tlačítko tady pokusit se znovu " "načíst NetBox." -#: templates/tenancy/contact.html:18 tenancy/filtersets.py:147 -#: tenancy/forms/bulk_edit.py:137 tenancy/forms/filtersets.py:102 -#: tenancy/forms/forms.py:56 tenancy/forms/model_forms.py:106 -#: tenancy/forms/model_forms.py:130 tenancy/tables/contacts.py:98 +#: netbox/templates/tenancy/contact.html:18 netbox/tenancy/filtersets.py: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/model_forms.py:130 +#: netbox/tenancy/tables/contacts.py:98 msgid "Contact" msgstr "Kontaktovat" -#: templates/tenancy/contact.html:29 tenancy/forms/bulk_edit.py:99 +#: netbox/templates/tenancy/contact.html:29 +#: netbox/tenancy/forms/bulk_edit.py:99 msgid "Title" msgstr "Název" -#: templates/tenancy/contact.html:33 tenancy/forms/bulk_edit.py:104 -#: tenancy/tables/contacts.py:64 +#: netbox/templates/tenancy/contact.html:33 +#: netbox/tenancy/forms/bulk_edit.py:104 netbox/tenancy/tables/contacts.py:64 msgid "Phone" msgstr "Telefon" -#: templates/tenancy/contactgroup.html:18 tenancy/forms/forms.py:66 -#: tenancy/forms/model_forms.py:75 +#: netbox/templates/tenancy/contactgroup.html:18 +#: netbox/tenancy/forms/forms.py:66 netbox/tenancy/forms/model_forms.py:75 msgid "Contact Group" msgstr "Kontaktní skupina" -#: templates/tenancy/contactgroup.html:50 +#: netbox/templates/tenancy/contactgroup.html:50 msgid "Add Contact Group" msgstr "Přidat skupinu kontaktů" -#: templates/tenancy/contactrole.html:15 tenancy/filtersets.py:152 -#: tenancy/forms/forms.py:61 tenancy/forms/model_forms.py:87 +#: netbox/templates/tenancy/contactrole.html:15 +#: netbox/tenancy/filtersets.py:152 netbox/tenancy/forms/forms.py:61 +#: netbox/tenancy/forms/model_forms.py:87 msgid "Contact Role" msgstr "Kontaktní role" -#: templates/tenancy/object_contacts.html:9 +#: netbox/templates/tenancy/object_contacts.html:9 msgid "Add a contact" msgstr "Přidání kontaktu" -#: templates/tenancy/tenantgroup.html:17 +#: netbox/templates/tenancy/tenantgroup.html:17 msgid "Add Tenant" msgstr "Přidat nájemce" -#: templates/tenancy/tenantgroup.html:26 tenancy/forms/model_forms.py:32 -#: tenancy/tables/columns.py:51 tenancy/tables/columns.py:61 +#: netbox/templates/tenancy/tenantgroup.html:26 +#: netbox/tenancy/forms/model_forms.py:32 netbox/tenancy/tables/columns.py:51 +#: netbox/tenancy/tables/columns.py:61 msgid "Tenant Group" msgstr "Skupina nájemců" -#: templates/tenancy/tenantgroup.html:59 +#: netbox/templates/tenancy/tenantgroup.html:59 msgid "Add Tenant Group" msgstr "Přidat skupinu nájemců" -#: templates/users/group.html:39 templates/users/user.html:63 +#: netbox/templates/users/group.html:39 netbox/templates/users/user.html:63 msgid "Assigned Permissions" msgstr "Přiřazená oprávnění" -#: templates/users/objectpermission.html:6 -#: templates/users/objectpermission.html:14 users/forms/filtersets.py:66 +#: netbox/templates/users/objectpermission.html:6 +#: netbox/templates/users/objectpermission.html:14 +#: netbox/users/forms/filtersets.py:66 msgid "Permission" msgstr "Povolení" -#: templates/users/objectpermission.html:34 +#: netbox/templates/users/objectpermission.html:34 msgid "View" msgstr "Pohled" -#: templates/users/objectpermission.html:52 users/forms/model_forms.py:315 +#: netbox/templates/users/objectpermission.html:52 +#: netbox/users/forms/model_forms.py:315 msgid "Constraints" msgstr "Omezení" -#: templates/users/objectpermission.html:72 +#: netbox/templates/users/objectpermission.html:72 msgid "Assigned Users" msgstr "Přiřazení uživatelé" -#: templates/virtualization/cluster.html:52 +#: netbox/templates/virtualization/cluster.html:52 msgid "Allocated Resources" msgstr "Přidělené zdroje" -#: templates/virtualization/cluster.html:55 -#: templates/virtualization/virtualmachine.html:125 +#: netbox/templates/virtualization/cluster.html:55 +#: netbox/templates/virtualization/virtualmachine.html:125 msgid "Virtual CPUs" msgstr "Virtuální procesory" -#: templates/virtualization/cluster.html:59 -#: templates/virtualization/virtualmachine.html:129 +#: netbox/templates/virtualization/cluster.html:59 +#: netbox/templates/virtualization/virtualmachine.html:129 msgid "Memory" msgstr "Paměť" -#: templates/virtualization/cluster.html:69 -#: templates/virtualization/virtualmachine.html:140 +#: netbox/templates/virtualization/cluster.html:69 +#: netbox/templates/virtualization/virtualmachine.html:140 msgid "Disk Space" msgstr "Místo na disku" -#: templates/virtualization/cluster/base.html:18 +#: netbox/templates/virtualization/cluster/base.html:18 msgid "Add Virtual Machine" msgstr "Přidat virtuální počítač" -#: templates/virtualization/cluster/base.html:24 +#: netbox/templates/virtualization/cluster/base.html:24 msgid "Assign Device" msgstr "Přiřadit zařízení" -#: templates/virtualization/cluster/devices.html:10 +#: netbox/templates/virtualization/cluster/devices.html:10 msgid "Remove Selected" msgstr "Odstranit vybrané" -#: templates/virtualization/cluster_add_devices.html:9 +#: netbox/templates/virtualization/cluster_add_devices.html:9 #, python-format msgid "Add Device to Cluster %(cluster)s" msgstr "Přidání zařízení do clusteru %(cluster)s" -#: templates/virtualization/cluster_add_devices.html:23 +#: netbox/templates/virtualization/cluster_add_devices.html:23 msgid "Device Selection" msgstr "Výběr zařízení" -#: templates/virtualization/cluster_add_devices.html:31 +#: netbox/templates/virtualization/cluster_add_devices.html:31 msgid "Add Devices" msgstr "Přidat zařízení" -#: templates/virtualization/clustergroup.html:10 -#: templates/virtualization/clustertype.html:10 +#: netbox/templates/virtualization/clustergroup.html:10 +#: netbox/templates/virtualization/clustertype.html:10 msgid "Add Cluster" msgstr "Přidat cluster" -#: templates/virtualization/clustergroup.html:19 -#: virtualization/forms/model_forms.py:50 +#: netbox/templates/virtualization/clustergroup.html:19 +#: netbox/virtualization/forms/model_forms.py:50 msgid "Cluster Group" msgstr "Skupina klastru" -#: templates/virtualization/clustertype.html:19 -#: templates/virtualization/virtualmachine.html:110 -#: virtualization/forms/model_forms.py:36 +#: netbox/templates/virtualization/clustertype.html:19 +#: netbox/templates/virtualization/virtualmachine.html:110 +#: netbox/virtualization/forms/model_forms.py:36 msgid "Cluster Type" msgstr "Typ clusteru" -#: templates/virtualization/virtualdisk.html:18 +#: netbox/templates/virtualization/virtualdisk.html:18 msgid "Virtual Disk" msgstr "Virtuální disk" -#: templates/virtualization/virtualmachine.html:122 -#: virtualization/forms/bulk_edit.py:190 -#: virtualization/forms/model_forms.py:224 +#: netbox/templates/virtualization/virtualmachine.html:122 +#: netbox/virtualization/forms/bulk_edit.py:190 +#: netbox/virtualization/forms/model_forms.py:224 msgid "Resources" msgstr "Zdroje" -#: templates/virtualization/virtualmachine.html:178 +#: netbox/templates/virtualization/virtualmachine.html:178 msgid "Add Virtual Disk" msgstr "Přidat virtuální disk" -#: templates/vpn/ikepolicy.html:10 templates/vpn/ipsecprofile.html:33 -#: vpn/tables/crypto.py:166 +#: 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 msgid "IKE Policy" msgstr "Zásady IKE" -#: templates/vpn/ikepolicy.html:21 +#: netbox/templates/vpn/ikepolicy.html:21 msgid "IKE Version" msgstr "Verze IKE" -#: templates/vpn/ikepolicy.html:29 +#: netbox/templates/vpn/ikepolicy.html:29 msgid "Pre-Shared Key" msgstr "Předsdílený klíč" -#: templates/vpn/ikepolicy.html:33 -#: templates/wireless/inc/authentication_attrs.html:20 +#: netbox/templates/vpn/ikepolicy.html:33 +#: netbox/templates/wireless/inc/authentication_attrs.html:20 msgid "Show Secret" msgstr "Zobrazit tajemství" -#: templates/vpn/ikepolicy.html:57 templates/vpn/ipsecpolicy.html:45 -#: templates/vpn/ipsecprofile.html:52 templates/vpn/ipsecprofile.html:77 -#: vpn/forms/model_forms.py:316 vpn/forms/model_forms.py:352 -#: vpn/tables/crypto.py:68 vpn/tables/crypto.py:134 +#: netbox/templates/vpn/ikepolicy.html:57 +#: netbox/templates/vpn/ipsecpolicy.html:45 +#: netbox/templates/vpn/ipsecprofile.html:52 +#: netbox/templates/vpn/ipsecprofile.html:77 +#: netbox/vpn/forms/model_forms.py:316 netbox/vpn/forms/model_forms.py:352 +#: netbox/vpn/tables/crypto.py:68 netbox/vpn/tables/crypto.py:134 msgid "Proposals" msgstr "Návrhy" -#: templates/vpn/ikeproposal.html:10 +#: netbox/templates/vpn/ikeproposal.html:10 msgid "IKE Proposal" msgstr "Návrh IKE" -#: templates/vpn/ikeproposal.html:21 vpn/forms/bulk_edit.py:97 -#: vpn/forms/bulk_import.py:145 vpn/forms/filtersets.py:101 +#: netbox/templates/vpn/ikeproposal.html:21 netbox/vpn/forms/bulk_edit.py:97 +#: netbox/vpn/forms/bulk_import.py:145 netbox/vpn/forms/filtersets.py:101 msgid "Authentication method" msgstr "Metoda ověřování" -#: templates/vpn/ikeproposal.html:25 templates/vpn/ipsecproposal.html:21 -#: vpn/forms/bulk_edit.py:102 vpn/forms/bulk_edit.py:172 -#: vpn/forms/bulk_import.py:149 vpn/forms/bulk_import.py:195 -#: vpn/forms/filtersets.py:106 vpn/forms/filtersets.py:154 +#: netbox/templates/vpn/ikeproposal.html:25 +#: netbox/templates/vpn/ipsecproposal.html:21 +#: netbox/vpn/forms/bulk_edit.py:102 netbox/vpn/forms/bulk_edit.py:172 +#: netbox/vpn/forms/bulk_import.py:149 netbox/vpn/forms/bulk_import.py:195 +#: netbox/vpn/forms/filtersets.py:106 netbox/vpn/forms/filtersets.py:154 msgid "Encryption algorithm" msgstr "Šifrovací algoritmus" -#: templates/vpn/ikeproposal.html:29 templates/vpn/ipsecproposal.html:25 -#: vpn/forms/bulk_edit.py:107 vpn/forms/bulk_edit.py:177 -#: vpn/forms/bulk_import.py:153 vpn/forms/bulk_import.py:200 -#: vpn/forms/filtersets.py:111 vpn/forms/filtersets.py:159 +#: netbox/templates/vpn/ikeproposal.html:29 +#: netbox/templates/vpn/ipsecproposal.html:25 +#: netbox/vpn/forms/bulk_edit.py:107 netbox/vpn/forms/bulk_edit.py:177 +#: netbox/vpn/forms/bulk_import.py:153 netbox/vpn/forms/bulk_import.py:200 +#: netbox/vpn/forms/filtersets.py:111 netbox/vpn/forms/filtersets.py:159 msgid "Authentication algorithm" msgstr "Algoritmus ověřování" -#: templates/vpn/ikeproposal.html:33 +#: netbox/templates/vpn/ikeproposal.html:33 msgid "DH group" msgstr "Skupina DH" -#: templates/vpn/ikeproposal.html:37 templates/vpn/ipsecproposal.html:29 -#: vpn/forms/bulk_edit.py:182 vpn/models/crypto.py:146 +#: netbox/templates/vpn/ikeproposal.html:37 +#: netbox/templates/vpn/ipsecproposal.html:29 +#: netbox/vpn/forms/bulk_edit.py:182 netbox/vpn/models/crypto.py:146 msgid "SA lifetime (seconds)" msgstr "Životnost SA (sekundy)" -#: templates/vpn/ipsecpolicy.html:10 templates/vpn/ipsecprofile.html:66 -#: vpn/tables/crypto.py:170 +#: netbox/templates/vpn/ipsecpolicy.html:10 +#: netbox/templates/vpn/ipsecprofile.html:66 netbox/vpn/tables/crypto.py:170 msgid "IPSec Policy" msgstr "Zásady IPsec" -#: templates/vpn/ipsecpolicy.html:21 vpn/forms/bulk_edit.py:210 -#: vpn/models/crypto.py:193 +#: netbox/templates/vpn/ipsecpolicy.html:21 netbox/vpn/forms/bulk_edit.py:210 +#: netbox/vpn/models/crypto.py:193 msgid "PFS group" msgstr "Skupina PFS" -#: templates/vpn/ipsecprofile.html:10 vpn/forms/model_forms.py:54 +#: netbox/templates/vpn/ipsecprofile.html:10 +#: netbox/vpn/forms/model_forms.py:54 msgid "IPSec Profile" msgstr "Profil IPsec" -#: templates/vpn/ipsecprofile.html:89 vpn/tables/crypto.py:137 +#: netbox/templates/vpn/ipsecprofile.html:89 netbox/vpn/tables/crypto.py:137 msgid "PFS Group" msgstr "Skupina PFS" -#: templates/vpn/ipsecproposal.html:10 +#: netbox/templates/vpn/ipsecproposal.html:10 msgid "IPSec Proposal" msgstr "Návrh protokolu IPsec" -#: templates/vpn/ipsecproposal.html:33 vpn/forms/bulk_edit.py:186 -#: vpn/models/crypto.py:152 +#: netbox/templates/vpn/ipsecproposal.html:33 +#: netbox/vpn/forms/bulk_edit.py:186 netbox/vpn/models/crypto.py:152 msgid "SA lifetime (KB)" msgstr "Životnost SA (KB)" -#: templates/vpn/l2vpn.html:11 templates/vpn/l2vpntermination.html:9 +#: netbox/templates/vpn/l2vpn.html:11 +#: netbox/templates/vpn/l2vpntermination.html:9 msgid "L2VPN Attributes" msgstr "L2VPN Atributy" -#: templates/vpn/l2vpn.html:60 templates/vpn/tunnel.html:76 +#: netbox/templates/vpn/l2vpn.html:60 netbox/templates/vpn/tunnel.html:76 msgid "Add a Termination" msgstr "Přidat ukončení" -#: templates/vpn/tunnel.html:9 +#: netbox/templates/vpn/tunnel.html:9 msgid "Add Termination" msgstr "Přidat ukončení" -#: templates/vpn/tunnel.html:37 vpn/forms/bulk_edit.py:49 -#: vpn/forms/bulk_import.py:48 vpn/forms/filtersets.py:57 +#: netbox/templates/vpn/tunnel.html:37 netbox/vpn/forms/bulk_edit.py:49 +#: netbox/vpn/forms/bulk_import.py:48 netbox/vpn/forms/filtersets.py:57 msgid "Encapsulation" msgstr "Zapouzdření" -#: templates/vpn/tunnel.html:41 vpn/forms/bulk_edit.py:55 -#: vpn/forms/bulk_import.py:53 vpn/forms/filtersets.py:64 -#: vpn/models/crypto.py:250 vpn/tables/tunnels.py:51 +#: netbox/templates/vpn/tunnel.html:41 netbox/vpn/forms/bulk_edit.py:55 +#: netbox/vpn/forms/bulk_import.py:53 netbox/vpn/forms/filtersets.py:64 +#: netbox/vpn/models/crypto.py:250 netbox/vpn/tables/tunnels.py:51 msgid "IPSec profile" msgstr "Profil IPsec" -#: templates/vpn/tunnel.html:45 vpn/forms/bulk_edit.py:69 -#: vpn/forms/filtersets.py:68 +#: netbox/templates/vpn/tunnel.html:45 netbox/vpn/forms/bulk_edit.py:69 +#: netbox/vpn/forms/filtersets.py:68 msgid "Tunnel ID" msgstr "ID tunelu" -#: templates/vpn/tunnelgroup.html:14 +#: netbox/templates/vpn/tunnelgroup.html:14 msgid "Add Tunnel" msgstr "Přidat tunel" -#: templates/vpn/tunnelgroup.html:23 vpn/forms/model_forms.py:36 -#: vpn/forms/model_forms.py:49 +#: netbox/templates/vpn/tunnelgroup.html:23 netbox/vpn/forms/model_forms.py:36 +#: netbox/vpn/forms/model_forms.py:49 msgid "Tunnel Group" msgstr "Skupina tunelů" -#: templates/vpn/tunneltermination.html:10 +#: netbox/templates/vpn/tunneltermination.html:10 msgid "Tunnel Termination" msgstr "Ukončení tunelu" -#: templates/vpn/tunneltermination.html:35 vpn/forms/bulk_import.py:107 -#: vpn/forms/model_forms.py:102 vpn/forms/model_forms.py:138 -#: vpn/forms/model_forms.py:247 vpn/tables/tunnels.py:101 +#: netbox/templates/vpn/tunneltermination.html:35 +#: netbox/vpn/forms/bulk_import.py:107 netbox/vpn/forms/model_forms.py:102 +#: netbox/vpn/forms/model_forms.py:138 netbox/vpn/forms/model_forms.py:247 +#: netbox/vpn/tables/tunnels.py:101 msgid "Outside IP" msgstr "Mimo IP" -#: templates/vpn/tunneltermination.html:51 +#: netbox/templates/vpn/tunneltermination.html:51 msgid "Peer Terminations" msgstr "Ukončení vrstevníků" -#: templates/wireless/inc/authentication_attrs.html:12 +#: netbox/templates/wireless/inc/authentication_attrs.html:12 msgid "Cipher" msgstr "Šifra" -#: templates/wireless/inc/authentication_attrs.html:16 +#: netbox/templates/wireless/inc/authentication_attrs.html:16 msgid "PSK" msgstr "PSK" -#: templates/wireless/inc/wirelesslink_interface.html:35 -#: templates/wireless/inc/wirelesslink_interface.html:45 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:35 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:45 msgctxt "Abbreviation for megahertz" msgid "MHz" msgstr "MHz" -#: templates/wireless/wirelesslan.html:57 +#: netbox/templates/wireless/wirelesslan.html:57 msgid "Attached Interfaces" msgstr "Připojená rozhraní" -#: templates/wireless/wirelesslangroup.html:17 +#: netbox/templates/wireless/wirelesslangroup.html:17 msgid "Add Wireless LAN" msgstr "Přidat bezdrátovou síť LAN" -#: templates/wireless/wirelesslangroup.html:26 -#: wireless/forms/model_forms.py:28 +#: netbox/templates/wireless/wirelesslangroup.html:26 +#: netbox/wireless/forms/model_forms.py:28 msgid "Wireless LAN Group" msgstr "Skupina bezdrátové sítě LAN" -#: templates/wireless/wirelesslangroup.html:59 +#: netbox/templates/wireless/wirelesslangroup.html:59 msgid "Add Wireless LAN Group" msgstr "Přidat skupinu bezdrátové sítě LAN" -#: templates/wireless/wirelesslink.html:14 +#: netbox/templates/wireless/wirelesslink.html:14 msgid "Link Properties" msgstr "Vlastnosti odkazu" -#: templates/wireless/wirelesslink.html:38 wireless/forms/bulk_edit.py:129 -#: wireless/forms/filtersets.py:102 wireless/forms/model_forms.py:165 +#: 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" -#: tenancy/filtersets.py:28 +#: netbox/tenancy/filtersets.py:28 msgid "Parent contact group (ID)" msgstr "Rodičovská kontaktní skupina (ID)" -#: tenancy/filtersets.py:34 +#: netbox/tenancy/filtersets.py:34 msgid "Parent contact group (slug)" msgstr "Rodičovská kontaktní skupina (slimák)" -#: tenancy/filtersets.py:40 tenancy/filtersets.py:67 tenancy/filtersets.py:110 +#: netbox/tenancy/filtersets.py:40 netbox/tenancy/filtersets.py:67 +#: netbox/tenancy/filtersets.py:110 msgid "Contact group (ID)" msgstr "Kontaktní skupina (ID)" -#: tenancy/filtersets.py:47 tenancy/filtersets.py:74 tenancy/filtersets.py:117 +#: netbox/tenancy/filtersets.py:47 netbox/tenancy/filtersets.py:74 +#: netbox/tenancy/filtersets.py:117 msgid "Contact group (slug)" msgstr "Kontaktní skupina (slug)" -#: tenancy/filtersets.py:104 +#: netbox/tenancy/filtersets.py:104 msgid "Contact (ID)" msgstr "Kontakt (ID)" -#: tenancy/filtersets.py:121 +#: netbox/tenancy/filtersets.py:121 msgid "Contact role (ID)" msgstr "Kontaktní role (ID)" -#: tenancy/filtersets.py:127 +#: netbox/tenancy/filtersets.py:127 msgid "Contact role (slug)" msgstr "Kontaktní role (slug)" -#: tenancy/filtersets.py:158 +#: netbox/tenancy/filtersets.py:158 msgid "Contact group" msgstr "Kontaktní skupina" -#: tenancy/filtersets.py:169 +#: netbox/tenancy/filtersets.py:169 msgid "Parent tenant group (ID)" msgstr "Nadřazená skupina nájemců (ID)" -#: tenancy/filtersets.py:175 +#: netbox/tenancy/filtersets.py:175 msgid "Parent tenant group (slug)" msgstr "Nadřazená skupina nájemců (slimák)" -#: tenancy/filtersets.py:181 tenancy/filtersets.py:201 +#: netbox/tenancy/filtersets.py:181 netbox/tenancy/filtersets.py:201 msgid "Tenant group (ID)" msgstr "Skupina nájemců (ID)" -#: tenancy/filtersets.py:234 +#: netbox/tenancy/filtersets.py:234 msgid "Tenant Group (ID)" msgstr "Skupina nájemců (ID)" -#: tenancy/filtersets.py:241 +#: netbox/tenancy/filtersets.py:241 msgid "Tenant Group (slug)" msgstr "Skupina nájemců (slug)" -#: tenancy/forms/bulk_edit.py:66 +#: netbox/tenancy/forms/bulk_edit.py:66 msgid "Desciption" msgstr "Descipace" -#: tenancy/forms/bulk_import.py:101 +#: netbox/tenancy/forms/bulk_import.py:101 msgid "Assigned contact" msgstr "Přiřazený kontakt" -#: tenancy/models/contacts.py:32 +#: netbox/tenancy/models/contacts.py:32 msgid "contact group" msgstr "kontaktní skupina" -#: tenancy/models/contacts.py:33 +#: netbox/tenancy/models/contacts.py:33 msgid "contact groups" msgstr "kontaktní skupiny" -#: tenancy/models/contacts.py:48 +#: netbox/tenancy/models/contacts.py:48 msgid "contact role" msgstr "kontaktní role" -#: tenancy/models/contacts.py:49 +#: netbox/tenancy/models/contacts.py:49 msgid "contact roles" msgstr "kontaktní role" -#: tenancy/models/contacts.py:68 +#: netbox/tenancy/models/contacts.py:68 msgid "title" msgstr "titul" -#: tenancy/models/contacts.py:73 +#: netbox/tenancy/models/contacts.py:73 msgid "phone" msgstr "telefon" -#: tenancy/models/contacts.py:78 +#: netbox/tenancy/models/contacts.py:78 msgid "email" msgstr "e-mailem" -#: tenancy/models/contacts.py:87 +#: netbox/tenancy/models/contacts.py:87 msgid "link" msgstr "odkaz" -#: tenancy/models/contacts.py:103 +#: netbox/tenancy/models/contacts.py:103 msgid "contact" msgstr "kontaktovat" -#: tenancy/models/contacts.py:104 +#: netbox/tenancy/models/contacts.py:104 msgid "contacts" msgstr "kontakty" -#: tenancy/models/contacts.py:153 +#: netbox/tenancy/models/contacts.py:153 msgid "contact assignment" msgstr "přiřazení kontaktů" -#: tenancy/models/contacts.py:154 +#: netbox/tenancy/models/contacts.py:154 msgid "contact assignments" msgstr "kontaktní přiřazení" -#: tenancy/models/contacts.py:170 +#: netbox/tenancy/models/contacts.py:170 #, python-brace-format msgid "Contacts cannot be assigned to this object type ({type})." msgstr "Kontakty nelze přiřadit k tomuto typu objektu ({type})." -#: tenancy/models/tenants.py:32 +#: netbox/tenancy/models/tenants.py:32 msgid "tenant group" msgstr "skupina nájemců" -#: tenancy/models/tenants.py:33 +#: netbox/tenancy/models/tenants.py:33 msgid "tenant groups" msgstr "skupiny nájemců" -#: tenancy/models/tenants.py:70 +#: netbox/tenancy/models/tenants.py:70 msgid "Tenant name must be unique per group." msgstr "Název nájemce musí být pro každou skupinu jedinečný." -#: tenancy/models/tenants.py:80 +#: netbox/tenancy/models/tenants.py:80 msgid "Tenant slug must be unique per group." msgstr "Slimák nájemce musí být jedinečný pro každou skupinu." -#: tenancy/models/tenants.py:88 +#: netbox/tenancy/models/tenants.py:88 msgid "tenant" msgstr "podnájemník" -#: tenancy/models/tenants.py:89 +#: netbox/tenancy/models/tenants.py:89 msgid "tenants" msgstr "nájemníci" -#: tenancy/tables/contacts.py:112 +#: netbox/tenancy/tables/contacts.py:112 msgid "Contact Title" msgstr "Název kontaktu" -#: tenancy/tables/contacts.py:116 +#: netbox/tenancy/tables/contacts.py:116 msgid "Contact Phone" msgstr "Kontaktní telefon" -#: tenancy/tables/contacts.py:121 +#: netbox/tenancy/tables/contacts.py:121 msgid "Contact Email" msgstr "Kontaktní e-mail" -#: tenancy/tables/contacts.py:125 +#: netbox/tenancy/tables/contacts.py:125 msgid "Contact Address" msgstr "Kontaktní adresa" -#: tenancy/tables/contacts.py:129 +#: netbox/tenancy/tables/contacts.py:129 msgid "Contact Link" msgstr "Kontakt Odkaz" -#: tenancy/tables/contacts.py:133 +#: netbox/tenancy/tables/contacts.py:133 msgid "Contact Description" msgstr "Kontakt Popis" -#: users/filtersets.py:33 users/filtersets.py:73 +#: netbox/users/filtersets.py:33 netbox/users/filtersets.py:73 msgid "Permission (ID)" msgstr "Povolení (ID)" -#: users/filtersets.py:38 users/filtersets.py:78 +#: netbox/users/filtersets.py:38 netbox/users/filtersets.py:78 msgid "Notification group (ID)" msgstr "Skupina oznámení (ID)" -#: users/forms/bulk_edit.py:26 +#: netbox/users/forms/bulk_edit.py:26 msgid "First name" msgstr "Křestní jméno" -#: users/forms/bulk_edit.py:31 +#: netbox/users/forms/bulk_edit.py:31 msgid "Last name" msgstr "Příjmení" -#: users/forms/bulk_edit.py:43 +#: netbox/users/forms/bulk_edit.py:43 msgid "Staff status" msgstr "Stav zaměstnanců" -#: users/forms/bulk_edit.py:48 +#: netbox/users/forms/bulk_edit.py:48 msgid "Superuser status" msgstr "Stav superuživatele" -#: users/forms/bulk_import.py:41 +#: netbox/users/forms/bulk_import.py:41 msgid "If no key is provided, one will be generated automatically." msgstr "Pokud není zadán žádný klíč, bude vygenerován automaticky." -#: users/forms/filtersets.py:51 users/tables.py:42 +#: netbox/users/forms/filtersets.py:51 netbox/users/tables.py:42 msgid "Is Staff" msgstr "Je personál" -#: users/forms/filtersets.py:58 users/tables.py:45 +#: netbox/users/forms/filtersets.py:58 netbox/users/tables.py:45 msgid "Is Superuser" msgstr "Je Superuser" -#: users/forms/filtersets.py:91 users/tables.py:86 +#: netbox/users/forms/filtersets.py:91 netbox/users/tables.py:86 msgid "Can View" msgstr "Může zobrazit" -#: users/forms/filtersets.py:98 users/tables.py:89 +#: netbox/users/forms/filtersets.py:98 netbox/users/tables.py:89 msgid "Can Add" msgstr "Může přidat" -#: users/forms/filtersets.py:105 users/tables.py:92 +#: netbox/users/forms/filtersets.py:105 netbox/users/tables.py:92 msgid "Can Change" msgstr "Může se změnit" -#: users/forms/filtersets.py:112 users/tables.py:95 +#: netbox/users/forms/filtersets.py:112 netbox/users/tables.py:95 msgid "Can Delete" msgstr "Může smazat" -#: users/forms/model_forms.py:62 +#: netbox/users/forms/model_forms.py:62 msgid "User Interface" msgstr "Uživatelské rozhraní" -#: users/forms/model_forms.py:114 +#: netbox/users/forms/model_forms.py:114 msgid "" "Keys must be at least 40 characters in length. Be sure to record " "your key prior to submitting this form, as it may no longer be " @@ -13859,7 +14682,7 @@ msgstr "" "klíč před odesláním tohoto formuláře, protože po vytvoření tokenu " "již nemusí být přístupný." -#: users/forms/model_forms.py:126 +#: netbox/users/forms/model_forms.py:126 msgid "" "Allowed IPv4/IPv6 networks from where the token can be used. Leave blank for" " no restrictions. Example: " @@ -13869,31 +14692,31 @@ msgstr "" "omezení. Příklad: 10.1.1.0/24,192.168.10.16/32,2001: db 8:1: " ":/64" -#: users/forms/model_forms.py:175 +#: netbox/users/forms/model_forms.py:175 msgid "Confirm password" msgstr "Potvrdit heslo" -#: users/forms/model_forms.py:178 +#: netbox/users/forms/model_forms.py:178 msgid "Enter the same password as before, for verification." msgstr "Pro ověření zadejte stejné heslo jako dříve." -#: users/forms/model_forms.py:227 +#: netbox/users/forms/model_forms.py:227 msgid "Passwords do not match! Please check your input and try again." msgstr "Hesla se neshodují! Zkontrolujte prosím svůj vstup a zkuste to znovu." -#: users/forms/model_forms.py:294 +#: netbox/users/forms/model_forms.py:294 msgid "Additional actions" msgstr "Další akce" -#: users/forms/model_forms.py:297 +#: netbox/users/forms/model_forms.py:297 msgid "Actions granted in addition to those listed above" msgstr "Opatření udělená navíc k výše uvedeným opatřením" -#: users/forms/model_forms.py:313 +#: netbox/users/forms/model_forms.py:313 msgid "Objects" msgstr "Objekty" -#: users/forms/model_forms.py:325 +#: netbox/users/forms/model_forms.py:325 msgid "" "JSON expression of a queryset filter that will return only permitted " "objects. Leave null to match all objects of this type. A list of multiple " @@ -13903,76 +14726,76 @@ msgstr "" "hodnotu null, aby odpovídala všem objektům tohoto typu. Seznam více objektů " "bude mít za následek logickou operaci OR." -#: users/forms/model_forms.py:364 +#: netbox/users/forms/model_forms.py:364 msgid "At least one action must be selected." msgstr "Musí být vybrána alespoň jedna akce." -#: users/forms/model_forms.py:382 +#: netbox/users/forms/model_forms.py:382 #, python-brace-format msgid "Invalid filter for {model}: {error}" msgstr "Neplatný filtr pro {model}: {error}" -#: users/models/permissions.py:39 +#: netbox/users/models/permissions.py:39 msgid "The list of actions granted by this permission" msgstr "Seznam akcí udělených tímto povolením" -#: users/models/permissions.py:44 +#: netbox/users/models/permissions.py:44 msgid "constraints" msgstr "omezení" -#: users/models/permissions.py:45 +#: netbox/users/models/permissions.py:45 msgid "" "Queryset filter matching the applicable objects of the selected type(s)" msgstr "" "Filtr Queryset odpovídající použitelným objektům vybraného typu (typů)" -#: users/models/permissions.py:52 +#: netbox/users/models/permissions.py:52 msgid "permission" msgstr "povolení" -#: users/models/permissions.py:53 users/models/users.py:47 +#: netbox/users/models/permissions.py:53 netbox/users/models/users.py:47 msgid "permissions" msgstr "oprávnění" -#: users/models/preferences.py:29 users/models/preferences.py:30 +#: netbox/users/models/preferences.py:29 netbox/users/models/preferences.py:30 msgid "user preferences" msgstr "uživatelské preference" -#: users/models/preferences.py:97 +#: netbox/users/models/preferences.py:97 #, python-brace-format msgid "Key '{path}' is a leaf node; cannot assign new keys" msgstr "Klíč '{path}'je listový uzel; nelze přiřadit nové klíče" -#: users/models/preferences.py:109 +#: netbox/users/models/preferences.py:109 #, python-brace-format msgid "Key '{path}' is a dictionary; cannot assign a non-dictionary value" msgstr "Klíč '{path}'je slovník; nelze přiřadit jinou hodnotu než slovník" -#: users/models/tokens.py:36 +#: netbox/users/models/tokens.py:36 msgid "expires" msgstr "vyprší" -#: users/models/tokens.py:41 +#: netbox/users/models/tokens.py:41 msgid "last used" msgstr "naposledy použitý" -#: users/models/tokens.py:46 +#: netbox/users/models/tokens.py:46 msgid "key" msgstr "klíč" -#: users/models/tokens.py:52 +#: netbox/users/models/tokens.py:52 msgid "write enabled" msgstr "zapisování povoleno" -#: users/models/tokens.py:54 +#: netbox/users/models/tokens.py:54 msgid "Permit create/update/delete operations using this key" msgstr "Povolit vytváření, aktualizace/odstranění operací pomocí tohoto klíče" -#: users/models/tokens.py:65 +#: netbox/users/models/tokens.py:65 msgid "allowed IPs" msgstr "povolené adresy IP" -#: users/models/tokens.py:67 +#: netbox/users/models/tokens.py:67 msgid "" "Allowed IPv4/IPv6 networks from where the token can be used. Leave blank for" " no restrictions. Ex: \"10.1.1.0/24, 192.168.10.16/32, 2001:DB8:1::/64\"" @@ -13980,42 +14803,42 @@ msgstr "" "Povolené sítě IPv4/IPv6, ze kterých lze token použít. Ponechte prázdné bez " "omezení. Příklad: „10.1.1.0/24, 192.168.10.16/32, 2001: DB 8:1: :/64“" -#: users/models/tokens.py:75 +#: netbox/users/models/tokens.py:75 msgid "token" msgstr "žeton" -#: users/models/tokens.py:76 +#: netbox/users/models/tokens.py:76 msgid "tokens" msgstr "žetony" -#: users/models/users.py:57 vpn/models/crypto.py:42 +#: netbox/users/models/users.py:57 netbox/vpn/models/crypto.py:42 msgid "group" msgstr "skupina" -#: users/models/users.py:92 +#: netbox/users/models/users.py:92 msgid "user" msgstr "uživatel" -#: users/models/users.py:104 +#: netbox/users/models/users.py:104 msgid "A user with this username already exists." msgstr "Uživatel s tímto uživatelským jménem již existuje." -#: users/tables.py:98 +#: netbox/users/tables.py:98 msgid "Custom Actions" msgstr "Vlastní akce" -#: utilities/api.py:153 +#: netbox/utilities/api.py:153 #, python-brace-format msgid "Related object not found using the provided attributes: {params}" msgstr "" "Související objekt nebyl nalezen pomocí poskytnutých atributů: {params}" -#: utilities/api.py:156 +#: netbox/utilities/api.py:156 #, python-brace-format msgid "Multiple objects match the provided attributes: {params}" msgstr "Více objektů odpovídá zadaným atributům: {params}" -#: utilities/api.py:168 +#: netbox/utilities/api.py:168 #, python-brace-format msgid "" "Related objects must be referenced by numeric ID or by dictionary of " @@ -14024,42 +14847,42 @@ msgstr "" "Související objekty musí být odkazovány číselným ID nebo slovníkem atributů." " Obdržela nerozpoznanou hodnotu: {value}" -#: utilities/api.py:177 +#: netbox/utilities/api.py:177 #, python-brace-format msgid "Related object not found using the provided numeric ID: {id}" msgstr "Související objekt nebyl nalezen pomocí zadaného číselného ID: {id}" -#: utilities/choices.py:19 +#: netbox/utilities/choices.py:19 #, python-brace-format msgid "{name} has a key defined but CHOICES is not a list" msgstr "{name} má definovaný klíč, ale CHOICES není seznam" -#: utilities/conversion.py:19 +#: netbox/utilities/conversion.py:19 msgid "Weight must be a positive number" msgstr "Hmotnost musí být kladné číslo" -#: utilities/conversion.py:21 +#: netbox/utilities/conversion.py:21 #, python-brace-format msgid "Invalid value '{weight}' for weight (must be a number)" msgstr "Neplatná hodnota '{weight}'pro hmotnost (musí být číslo)" -#: utilities/conversion.py:32 utilities/conversion.py:62 +#: netbox/utilities/conversion.py:32 netbox/utilities/conversion.py:62 #, python-brace-format msgid "Unknown unit {unit}. Must be one of the following: {valid_units}" msgstr "" "Neznámá jednotka {unit}. Musí to být jedna z následujících položek: " "{valid_units}" -#: utilities/conversion.py:45 +#: netbox/utilities/conversion.py:45 msgid "Length must be a positive number" msgstr "Délka musí být kladné číslo" -#: utilities/conversion.py:47 +#: netbox/utilities/conversion.py:47 #, python-brace-format msgid "Invalid value '{length}' for length (must be a number)" msgstr "Neplatná hodnota '{length}'pro délku (musí být číslo)" -#: utilities/error_handlers.py:31 +#: netbox/utilities/error_handlers.py:31 #, python-brace-format msgid "" "Unable to delete {objects}. {count} dependent objects were " @@ -14068,15 +14891,15 @@ msgstr "" "Nelze smazat {objects}. {count} byly nalezeny závislé " "objekty: " -#: utilities/error_handlers.py:33 +#: netbox/utilities/error_handlers.py:33 msgid "More than 50" msgstr "Více než 50" -#: utilities/fields.py:30 +#: netbox/utilities/fields.py:30 msgid "RGB color in hexadecimal. Example: " msgstr "RGB barva v hexadecimálním formátu. Příklad: " -#: utilities/fields.py:159 +#: netbox/utilities/fields.py:159 #, python-format msgid "" "%s(%r) is invalid. to_model parameter to CounterCacheField must be a string " @@ -14085,7 +14908,7 @@ msgstr "" "%s(%r) je neplatný. parametr to_model pro CounterCacheField musí být řetězec" " ve formátu 'app.model'" -#: utilities/fields.py:169 +#: netbox/utilities/fields.py:169 #, python-format msgid "" "%s(%r) is invalid. to_field parameter to CounterCacheField must be a string " @@ -14094,36 +14917,36 @@ msgstr "" "%s(%r) je neplatný. parametr to_field pro CounterCacheField musí být řetězec" " ve formátu 'field'" -#: utilities/forms/bulk_import.py:23 +#: netbox/utilities/forms/bulk_import.py:23 msgid "Enter object data in CSV, JSON or YAML format." msgstr "Zadejte objektová data ve formátu CSV, JSON nebo YAML." -#: utilities/forms/bulk_import.py:36 +#: netbox/utilities/forms/bulk_import.py:36 msgid "CSV delimiter" msgstr "Oddělovač CSV" -#: utilities/forms/bulk_import.py:37 +#: netbox/utilities/forms/bulk_import.py:37 msgid "The character which delimits CSV fields. Applies only to CSV format." msgstr "Znak, který vymezuje pole CSV. Platí pouze pro formát CSV." -#: utilities/forms/bulk_import.py:51 +#: netbox/utilities/forms/bulk_import.py:51 msgid "Form data must be empty when uploading/selecting a file." msgstr "Data formuláře musí být při nahrávání/výběru souboru prázdná." -#: utilities/forms/bulk_import.py:80 +#: netbox/utilities/forms/bulk_import.py:80 #, python-brace-format msgid "Unknown data format: {format}" msgstr "Neznámý formát dat: {format}" -#: utilities/forms/bulk_import.py:100 +#: netbox/utilities/forms/bulk_import.py:100 msgid "Unable to detect data format. Please specify." msgstr "Nelze zjistit formát dat. Prosím upřesněte." -#: utilities/forms/bulk_import.py:123 +#: netbox/utilities/forms/bulk_import.py:123 msgid "Invalid CSV delimiter" msgstr "Neplatný oddělovač CSV" -#: utilities/forms/bulk_import.py:167 +#: netbox/utilities/forms/bulk_import.py:167 msgid "" "Invalid YAML data. Data must be in the form of multiple documents, or a " "single document comprising a list of dictionaries." @@ -14131,7 +14954,7 @@ msgstr "" "Neplatná data YAML. Údaje musí být ve formě více dokumentů nebo jednoho " "dokumentu obsahujícího seznam slovníků." -#: utilities/forms/fields/array.py:20 +#: netbox/utilities/forms/fields/array.py:20 #, python-brace-format msgid "" "Invalid list ({value}). Must be numeric and ranges must be in ascending " @@ -14140,7 +14963,7 @@ msgstr "" "Neplatný seznam ({value}). Musí být číselné a rozsahy musí být ve vzestupném" " pořadí." -#: utilities/forms/fields/array.py:40 +#: netbox/utilities/forms/fields/array.py:40 msgid "" "Specify one or more numeric ranges separated by commas. Example: " "1-5,20-30" @@ -14148,7 +14971,7 @@ msgstr "" "Určete jeden nebo více číselných rozsahů oddělených čárkami. Příklad: " "1-5,20-30" -#: utilities/forms/fields/array.py:47 +#: netbox/utilities/forms/fields/array.py:47 #, python-brace-format msgid "" "Invalid ranges ({value}). Must be a range of integers in ascending order." @@ -14156,17 +14979,18 @@ msgstr "" "Neplatné rozsahy ({value}). Musí to být rozsah celých čísel ve vzestupném " "pořadí." -#: utilities/forms/fields/csv.py:44 +#: netbox/utilities/forms/fields/csv.py:44 #, python-brace-format msgid "Invalid value for a multiple choice field: {value}" msgstr "Neplatná hodnota pro pole s více možnostmi volby: {value}" -#: utilities/forms/fields/csv.py:57 utilities/forms/fields/csv.py:78 +#: netbox/utilities/forms/fields/csv.py:57 +#: netbox/utilities/forms/fields/csv.py:78 #, python-format msgid "Object not found: %(value)s" msgstr "Objekt nenalezen: %(value)s" -#: utilities/forms/fields/csv.py:65 +#: netbox/utilities/forms/fields/csv.py:65 #, python-brace-format msgid "" "\"{value}\" is not a unique value for this field; multiple objects were " @@ -14174,20 +14998,20 @@ msgid "" msgstr "" "„{value}„není jedinečná hodnota pro toto pole; bylo nalezeno více objektů" -#: utilities/forms/fields/csv.py:69 +#: netbox/utilities/forms/fields/csv.py:69 #, python-brace-format msgid "\"{field_name}\" is an invalid accessor field name." msgstr "„{field_name}„je neplatný název pole pro přístup." -#: utilities/forms/fields/csv.py:101 +#: netbox/utilities/forms/fields/csv.py:101 msgid "Object type must be specified as \".\"" msgstr "Typ objektu musí být zadán jako“.„" -#: utilities/forms/fields/csv.py:105 +#: netbox/utilities/forms/fields/csv.py:105 msgid "Invalid object type" msgstr "Neplatný typ objektu" -#: utilities/forms/fields/expandable.py:25 +#: netbox/utilities/forms/fields/expandable.py:25 msgid "" "Alphanumeric ranges are supported for bulk creation. Mixed cases and types " "within a single range are not supported (example: " @@ -14197,7 +15021,7 @@ msgstr "" "případy a typy v rámci jednoho rozsahu nejsou podporovány (příklad: " "[ge, xe] -0/0/ [0-9])." -#: utilities/forms/fields/expandable.py:46 +#: netbox/utilities/forms/fields/expandable.py:46 msgid "" "Specify a numeric range to create multiple IPs.
    Example: " "192.0.2.[1,5,100-254]/24" @@ -14205,7 +15029,7 @@ msgstr "" "Zadejte číselný rozsah pro vytvoření více adres IP.
    Příklad: " "192,0,2. [1,5100-254] /24" -#: utilities/forms/fields/fields.py:31 +#: netbox/utilities/forms/fields/fields.py:31 #, python-brace-format msgid "" " Markdown Syntaxe je podporována" -#: utilities/forms/fields/fields.py:48 +#: netbox/utilities/forms/fields/fields.py:48 msgid "URL-friendly unique shorthand" msgstr "Unikátní zkratka vhodná pro URL" -#: utilities/forms/fields/fields.py:101 +#: netbox/utilities/forms/fields/fields.py:101 msgid "Enter context data in JSON format." msgstr "Zadejte kontextová data do JSON Formát." -#: utilities/forms/fields/fields.py:124 +#: netbox/utilities/forms/fields/fields.py:124 msgid "MAC address must be in EUI-48 format" msgstr "MAC adresa musí být ve formátu EUI-48" -#: utilities/forms/forms.py:52 +#: netbox/utilities/forms/forms.py:52 msgid "Use regular expressions" msgstr "Používejte regulární výrazy" -#: utilities/forms/forms.py:75 +#: netbox/utilities/forms/forms.py:75 msgid "" "Numeric ID of an existing object to update (if not creating a new object)" msgstr "" "Číselné ID existujícího objektu, který se má aktualizovat (pokud nevytvoříte" " nový objekt)" -#: utilities/forms/forms.py:92 +#: netbox/utilities/forms/forms.py:92 #, python-brace-format msgid "Unrecognized header: {name}" msgstr "Nerozpoznaná hlavička: {name}" -#: utilities/forms/forms.py:118 +#: netbox/utilities/forms/forms.py:118 msgid "Available Columns" msgstr "Dostupné sloupce" -#: utilities/forms/forms.py:126 +#: netbox/utilities/forms/forms.py:126 msgid "Selected Columns" msgstr "Vybrané sloupce" -#: utilities/forms/mixins.py:44 +#: netbox/utilities/forms/mixins.py:44 msgid "" "This object has been modified since the form was rendered. Please consult " "the object's change log for details." @@ -14258,13 +15082,13 @@ msgstr "" "Tento objekt byl od vykreslování formuláře změněn. Podrobnosti naleznete v " "protokolu změn objektu." -#: utilities/forms/utils.py:42 utilities/forms/utils.py:68 -#: utilities/forms/utils.py:85 utilities/forms/utils.py:87 +#: netbox/utilities/forms/utils.py:42 netbox/utilities/forms/utils.py:68 +#: netbox/utilities/forms/utils.py:85 netbox/utilities/forms/utils.py:87 #, python-brace-format msgid "Range \"{value}\" is invalid." msgstr "Rozsah“{value}„je neplatný." -#: utilities/forms/utils.py:74 +#: netbox/utilities/forms/utils.py:74 #, python-brace-format msgid "" "Invalid range: Ending value ({end}) must be greater than beginning value " @@ -14273,68 +15097,68 @@ msgstr "" "Neplatný rozsah: Koncová hodnota ({end}) musí být větší než počáteční " "hodnota ({begin})." -#: utilities/forms/utils.py:232 +#: netbox/utilities/forms/utils.py:232 #, python-brace-format msgid "Duplicate or conflicting column header for \"{field}\"" msgstr "Duplicitní nebo konfliktní záhlaví sloupce pro“{field}„" -#: utilities/forms/utils.py:238 +#: netbox/utilities/forms/utils.py:238 #, python-brace-format msgid "Duplicate or conflicting column header for \"{header}\"" msgstr "Duplicitní nebo konfliktní záhlaví sloupce pro“{header}„" -#: utilities/forms/utils.py:247 +#: netbox/utilities/forms/utils.py:247 #, python-brace-format msgid "Row {row}: Expected {count_expected} columns but found {count_found}" msgstr "" "Řádek {row}: Očekávané {count_expected} sloupce, ale nalezeny {count_found}" -#: utilities/forms/utils.py:270 +#: netbox/utilities/forms/utils.py:270 #, python-brace-format msgid "Unexpected column header \"{field}\" found." msgstr "Neočekávané záhlaví sloupce“{field}„nalezeno." -#: utilities/forms/utils.py:272 +#: netbox/utilities/forms/utils.py:272 #, python-brace-format msgid "Column \"{field}\" is not a related object; cannot use dots" msgstr "Sloupec“{field}„není příbuzný objekt; nelze použít tečky" -#: utilities/forms/utils.py:276 +#: netbox/utilities/forms/utils.py:276 #, python-brace-format msgid "Invalid related object attribute for column \"{field}\": {to_field}" msgstr "" "Neplatný atribut souvisejícího objektu pro sloupec“{field}„: {to_field}" -#: utilities/forms/utils.py:284 +#: netbox/utilities/forms/utils.py:284 #, python-brace-format msgid "Required column header \"{header}\" not found." msgstr "Požadovaná záhlaví sloupce“{header}„nenalezeno." -#: utilities/forms/widgets/apiselect.py:124 +#: netbox/utilities/forms/widgets/apiselect.py:124 #, python-brace-format msgid "Missing required value for dynamic query param: '{dynamic_params}'" msgstr "" "Chybí požadovaná hodnota pro parametr dynamického dotazu: '{dynamic_params}'" -#: utilities/forms/widgets/apiselect.py:141 +#: netbox/utilities/forms/widgets/apiselect.py:141 #, python-brace-format msgid "Missing required value for static query param: '{static_params}'" msgstr "" "Chybí požadovaná hodnota pro parametr statického dotazu: '{static_params}'" -#: utilities/password_validation.py:13 +#: netbox/utilities/password_validation.py:13 msgid "Password must have at least one numeral." msgstr "Heslo musí obsahovat alespoň jednu číslici." -#: utilities/password_validation.py:18 +#: netbox/utilities/password_validation.py:18 msgid "Password must have at least one uppercase letter." msgstr "Heslo musí obsahovat alespoň jedno velké písmeno." -#: utilities/password_validation.py:23 +#: netbox/utilities/password_validation.py:23 msgid "Password must have at least one lowercase letter." msgstr "Heslo musí obsahovat alespoň jedno malé písmeno." -#: utilities/password_validation.py:27 +#: netbox/utilities/password_validation.py:27 msgid "" "Your password must contain at least one numeral, one uppercase letter and " "one lowercase letter." @@ -14342,7 +15166,7 @@ msgstr "" "Vaše heslo musí obsahovat alespoň jednu číslici, jedno velké písmeno a jedno" " malé písmeno." -#: utilities/permissions.py:42 +#: netbox/utilities/permissions.py:42 #, python-brace-format msgid "" "Invalid permission name: {name}. Must be in the format " @@ -14351,126 +15175,126 @@ msgstr "" "Neplatný název oprávnění: {name}. Musí být ve formátu " "._" -#: utilities/permissions.py:60 +#: netbox/utilities/permissions.py:60 #, python-brace-format msgid "Unknown app_label/model_name for {name}" msgstr "Neznámý app_label/model_name pro {name}" -#: utilities/request.py:76 +#: netbox/utilities/request.py:76 #, python-brace-format msgid "Invalid IP address set for {header}: {ip}" msgstr "Neplatná IP adresa nastavená pro {header}: {ip}" -#: utilities/tables.py:47 +#: netbox/utilities/tables.py:47 #, python-brace-format msgid "A column named {name} is already defined for table {table_name}" msgstr "Sloupec s názvem {name} je již definován pro tabulku {table_name}" -#: utilities/templates/builtins/customfield_value.html:30 +#: netbox/utilities/templates/builtins/customfield_value.html:30 msgid "Not defined" msgstr "Nedefinováno" -#: utilities/templates/buttons/bookmark.html:9 +#: netbox/utilities/templates/buttons/bookmark.html:9 msgid "Unbookmark" msgstr "Zrušit záložku" -#: utilities/templates/buttons/bookmark.html:13 +#: netbox/utilities/templates/buttons/bookmark.html:13 msgid "Bookmark" msgstr "Záložka" -#: utilities/templates/buttons/clone.html:4 +#: netbox/utilities/templates/buttons/clone.html:4 msgid "Clone" msgstr "Klon" -#: utilities/templates/buttons/export.html:7 +#: netbox/utilities/templates/buttons/export.html:7 msgid "Current View" msgstr "Aktuální pohled" -#: utilities/templates/buttons/export.html:8 +#: netbox/utilities/templates/buttons/export.html:8 msgid "All Data" msgstr "Veškerá data" -#: utilities/templates/buttons/export.html:28 +#: netbox/utilities/templates/buttons/export.html:28 msgid "Add export template" msgstr "Přidat šablonu exportu" -#: utilities/templates/buttons/import.html:4 +#: netbox/utilities/templates/buttons/import.html:4 msgid "Import" msgstr "Importovat" -#: utilities/templates/buttons/subscribe.html:10 +#: netbox/utilities/templates/buttons/subscribe.html:10 msgid "Unsubscribe" msgstr "Odhlásit" -#: utilities/templates/buttons/subscribe.html:14 +#: netbox/utilities/templates/buttons/subscribe.html:14 msgid "Subscribe" msgstr "Přihlásit" -#: utilities/templates/form_helpers/render_field.html:41 +#: netbox/utilities/templates/form_helpers/render_field.html:41 msgid "Copy to clipboard" msgstr "Kopírovat do schránky" -#: utilities/templates/form_helpers/render_field.html:57 +#: netbox/utilities/templates/form_helpers/render_field.html:57 msgid "This field is required" msgstr "Toto pole je povinné" -#: utilities/templates/form_helpers/render_field.html:70 +#: netbox/utilities/templates/form_helpers/render_field.html:70 msgid "Set Null" msgstr "Nastavit Null" -#: utilities/templates/helpers/applied_filters.html:11 +#: netbox/utilities/templates/helpers/applied_filters.html:11 msgid "Clear all" msgstr "Vymazat vše" -#: utilities/templates/helpers/table_config_form.html:8 +#: netbox/utilities/templates/helpers/table_config_form.html:8 msgid "Table Configuration" msgstr "Konfigurace tabulky" -#: utilities/templates/helpers/table_config_form.html:31 +#: netbox/utilities/templates/helpers/table_config_form.html:31 msgid "Move Up" msgstr "Pohyb nahoru" -#: utilities/templates/helpers/table_config_form.html:34 +#: netbox/utilities/templates/helpers/table_config_form.html:34 msgid "Move Down" msgstr "Přesuňte se dolů" -#: utilities/templates/navigation/menu.html:14 +#: netbox/utilities/templates/navigation/menu.html:14 msgid "Search…" msgstr "Hledat..." -#: utilities/templates/navigation/menu.html:14 +#: netbox/utilities/templates/navigation/menu.html:14 msgid "Search NetBox" msgstr "Hledat NetBox" -#: utilities/templates/widgets/apiselect.html:7 +#: netbox/utilities/templates/widgets/apiselect.html:7 msgid "Open selector" msgstr "Otevřít selektor" -#: utilities/templates/widgets/markdown_input.html:6 +#: netbox/utilities/templates/widgets/markdown_input.html:6 msgid "Write" msgstr "Napsat" -#: utilities/testing/views.py:632 +#: netbox/utilities/testing/views.py:632 msgid "The test must define csv_update_data." msgstr "Test musí definovat csv_update_data." -#: utilities/validators.py:65 +#: netbox/utilities/validators.py:65 #, python-brace-format msgid "{value} is not a valid regular expression." msgstr "{value} Není platným regulárním výrazem." -#: utilities/views.py:57 +#: netbox/utilities/views.py:57 #, python-brace-format msgid "{self.__class__.__name__} must implement get_required_permission()" msgstr "" "{self.__class__.__name__} musí implementovat get_required_permissions ()" -#: utilities/views.py:93 +#: netbox/utilities/views.py:93 #, python-brace-format msgid "{class_name} must implement get_required_permission()" msgstr "{class_name} musí implementovat get_required_permissions ()" -#: utilities/views.py:117 +#: netbox/utilities/views.py:117 #, python-brace-format msgid "" "{class_name} has no queryset defined. ObjectPermissionRequiredMixin may only" @@ -14479,61 +15303,63 @@ msgstr "" "{class_name} nemá definovanou sadu dotazů. ObjectPermissionRequiredMixin lze" " použít pouze v pohledech, které definují základní sadu dotazů" -#: virtualization/filtersets.py:79 +#: netbox/virtualization/filtersets.py:79 msgid "Parent group (ID)" msgstr "Nadřazená skupina (ID)" -#: virtualization/filtersets.py:85 +#: netbox/virtualization/filtersets.py:85 msgid "Parent group (slug)" msgstr "Rodičovská skupina (slug)" -#: virtualization/filtersets.py:89 virtualization/filtersets.py:141 +#: netbox/virtualization/filtersets.py:89 +#: netbox/virtualization/filtersets.py:141 msgid "Cluster type (ID)" msgstr "Typ clusteru (ID)" -#: virtualization/filtersets.py:151 virtualization/filtersets.py:271 +#: netbox/virtualization/filtersets.py:151 +#: netbox/virtualization/filtersets.py:271 msgid "Cluster (ID)" msgstr "Klastr (ID)" -#: virtualization/forms/bulk_edit.py:166 -#: virtualization/models/virtualmachines.py:115 +#: netbox/virtualization/forms/bulk_edit.py:166 +#: netbox/virtualization/models/virtualmachines.py:115 msgid "vCPUs" msgstr "VCPU" -#: virtualization/forms/bulk_edit.py:170 +#: netbox/virtualization/forms/bulk_edit.py:170 msgid "Memory (MB)" msgstr "Paměť (MB)" -#: virtualization/forms/bulk_edit.py:174 -msgid "Disk (GB)" -msgstr "Disk (GB)" +#: netbox/virtualization/forms/bulk_edit.py:174 +msgid "Disk (MB)" +msgstr "Disk (MB)" -#: virtualization/forms/bulk_edit.py:334 -#: virtualization/forms/filtersets.py:251 -msgid "Size (GB)" -msgstr "Velikost (GB)" +#: netbox/virtualization/forms/bulk_edit.py:334 +#: netbox/virtualization/forms/filtersets.py:251 +msgid "Size (MB)" +msgstr "Velikost (MB)" -#: virtualization/forms/bulk_import.py:44 +#: netbox/virtualization/forms/bulk_import.py:44 msgid "Type of cluster" msgstr "Typ clusteru" -#: virtualization/forms/bulk_import.py:51 +#: netbox/virtualization/forms/bulk_import.py:51 msgid "Assigned cluster group" msgstr "Přiřazená skupina clusteru" -#: virtualization/forms/bulk_import.py:96 +#: netbox/virtualization/forms/bulk_import.py:96 msgid "Assigned cluster" msgstr "Přiřazený cluster" -#: virtualization/forms/bulk_import.py:103 +#: netbox/virtualization/forms/bulk_import.py:103 msgid "Assigned device within cluster" msgstr "Přiřazené zařízení v rámci clusteru" -#: virtualization/forms/filtersets.py:183 +#: netbox/virtualization/forms/filtersets.py:183 msgid "Serial number" msgstr "Sériové číslo" -#: virtualization/forms/model_forms.py:153 +#: netbox/virtualization/forms/model_forms.py:153 #, python-brace-format msgid "" "{device} belongs to a different site ({device_site}) than the cluster " @@ -14541,50 +15367,50 @@ msgid "" msgstr "" "{device} patří k jinému webu ({device_site}) než cluster ({cluster_site})" -#: virtualization/forms/model_forms.py:192 +#: netbox/virtualization/forms/model_forms.py:192 msgid "Optionally pin this VM to a specific host device within the cluster" msgstr "" "Volitelně připojte tento virtuální počítač ke konkrétnímu hostitelskému " "zařízení v rámci clusteru" -#: virtualization/forms/model_forms.py:221 +#: netbox/virtualization/forms/model_forms.py:221 msgid "Site/Cluster" msgstr "Lokalita/Klastr" -#: virtualization/forms/model_forms.py:244 +#: netbox/virtualization/forms/model_forms.py:244 msgid "Disk size is managed via the attachment of virtual disks." msgstr "Velikost disku je spravována připojením virtuálních disků." -#: virtualization/forms/model_forms.py:372 -#: virtualization/tables/virtualmachines.py:111 +#: netbox/virtualization/forms/model_forms.py:372 +#: netbox/virtualization/tables/virtualmachines.py:111 msgid "Disk" msgstr "Disk" -#: virtualization/models/clusters.py:25 +#: netbox/virtualization/models/clusters.py:25 msgid "cluster type" msgstr "typ clusteru" -#: virtualization/models/clusters.py:26 +#: netbox/virtualization/models/clusters.py:26 msgid "cluster types" msgstr "typy clusterů" -#: virtualization/models/clusters.py:45 +#: netbox/virtualization/models/clusters.py:45 msgid "cluster group" msgstr "klastrová skupina" -#: virtualization/models/clusters.py:46 +#: netbox/virtualization/models/clusters.py:46 msgid "cluster groups" msgstr "klastrové skupiny" -#: virtualization/models/clusters.py:121 +#: netbox/virtualization/models/clusters.py:121 msgid "cluster" msgstr "shluk" -#: virtualization/models/clusters.py:122 +#: netbox/virtualization/models/clusters.py:122 msgid "clusters" msgstr "shluky" -#: virtualization/models/clusters.py:141 +#: netbox/virtualization/models/clusters.py:141 #, python-brace-format msgid "" "{count} devices are assigned as hosts for this cluster but are not in site " @@ -14593,48 +15419,48 @@ msgstr "" "{count} zařízení jsou přiřazena jako hostitelé pro tento cluster, ale nejsou" " na webu {site}" -#: virtualization/models/virtualmachines.py:123 +#: netbox/virtualization/models/virtualmachines.py:123 msgid "memory (MB)" msgstr "Paměť (MB)" -#: virtualization/models/virtualmachines.py:128 +#: netbox/virtualization/models/virtualmachines.py:128 msgid "disk (MB)" msgstr "disk (MB)" -#: virtualization/models/virtualmachines.py:166 +#: netbox/virtualization/models/virtualmachines.py:166 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." -#: virtualization/models/virtualmachines.py:169 +#: netbox/virtualization/models/virtualmachines.py:169 msgid "virtual machine" msgstr "virtuální stroj" -#: virtualization/models/virtualmachines.py:170 +#: netbox/virtualization/models/virtualmachines.py:170 msgid "virtual machines" msgstr "virtuální stroje" -#: virtualization/models/virtualmachines.py:184 +#: netbox/virtualization/models/virtualmachines.py:184 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." -#: virtualization/models/virtualmachines.py:191 +#: netbox/virtualization/models/virtualmachines.py:191 #, 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})." -#: virtualization/models/virtualmachines.py:198 +#: netbox/virtualization/models/virtualmachines.py:198 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." -#: virtualization/models/virtualmachines.py:203 +#: netbox/virtualization/models/virtualmachines.py:203 #, 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})." -#: virtualization/models/virtualmachines.py:215 +#: netbox/virtualization/models/virtualmachines.py:215 #, python-brace-format msgid "" "The specified disk size ({size}) must match the aggregate size of assigned " @@ -14643,17 +15469,17 @@ msgstr "" "Zadaná velikost disku ({size}) musí odpovídat souhrnné velikosti přiřazených" " virtuálních disků ({total_size})." -#: virtualization/models/virtualmachines.py:229 +#: netbox/virtualization/models/virtualmachines.py:229 #, 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.)" -#: virtualization/models/virtualmachines.py:238 +#: netbox/virtualization/models/virtualmachines.py:238 #, 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." -#: virtualization/models/virtualmachines.py:396 +#: netbox/virtualization/models/virtualmachines.py:396 #, python-brace-format msgid "" "The selected parent interface ({parent}) belongs to a different virtual " @@ -14662,7 +15488,7 @@ msgstr "" "Vybrané nadřazené rozhraní ({parent}) patří k jinému virtuálnímu počítači " "({virtual_machine})." -#: virtualization/models/virtualmachines.py:411 +#: netbox/virtualization/models/virtualmachines.py:411 #, python-brace-format msgid "" "The selected bridge interface ({bridge}) belongs to a different virtual " @@ -14671,7 +15497,7 @@ msgstr "" "Vybrané rozhraní můstku ({bridge}) patří k jinému virtuálnímu počítači " "({virtual_machine})." -#: virtualization/models/virtualmachines.py:422 +#: netbox/virtualization/models/virtualmachines.py:422 #, python-brace-format msgid "" "The untagged VLAN ({untagged_vlan}) must belong to the same site as the " @@ -14680,392 +15506,415 @@ 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í." -#: virtualization/models/virtualmachines.py:434 +#: netbox/virtualization/models/virtualmachines.py:434 msgid "size (MB)" msgstr "velikost (MB)" -#: virtualization/models/virtualmachines.py:438 +#: netbox/virtualization/models/virtualmachines.py:438 msgid "virtual disk" msgstr "virtuální disk" -#: virtualization/models/virtualmachines.py:439 +#: netbox/virtualization/models/virtualmachines.py:439 msgid "virtual disks" msgstr "virtuální disky" -#: virtualization/views.py:275 +#: netbox/virtualization/views.py:273 #, python-brace-format msgid "Added {count} devices to cluster {cluster}" msgstr "Přidal {count} zařízení do clusteru {cluster}" -#: virtualization/views.py:310 +#: netbox/virtualization/views.py:308 #, python-brace-format msgid "Removed {count} devices from cluster {cluster}" msgstr "Odstraněno {count} zařízení z clusteru {cluster}" -#: vpn/choices.py:31 +#: netbox/vpn/choices.py:35 msgid "IPsec - Transport" msgstr "IPsec - Přeprava" -#: vpn/choices.py:32 +#: netbox/vpn/choices.py:36 msgid "IPsec - Tunnel" msgstr "IPsec - Tunel" -#: vpn/choices.py:33 +#: netbox/vpn/choices.py:37 msgid "IP-in-IP" msgstr "IP v IP" -#: vpn/choices.py:34 +#: netbox/vpn/choices.py:38 msgid "GRE" msgstr "GREE" -#: vpn/choices.py:56 +#: netbox/vpn/choices.py:39 +msgid "WireGuard" +msgstr "WireGuard" + +#: netbox/vpn/choices.py:40 +msgid "OpenVPN" +msgstr "OpenVPN" + +#: netbox/vpn/choices.py:41 +msgid "L2TP" +msgstr "L2TP" + +#: netbox/vpn/choices.py:42 +msgid "PPTP" +msgstr "PPTP" + +#: netbox/vpn/choices.py:64 msgid "Hub" msgstr "Rozbočovač" -#: vpn/choices.py:57 +#: netbox/vpn/choices.py:65 msgid "Spoke" msgstr "Mluvil" -#: vpn/choices.py:80 +#: netbox/vpn/choices.py:88 msgid "Aggressive" msgstr "Agresivní" -#: vpn/choices.py:81 +#: netbox/vpn/choices.py:89 msgid "Main" msgstr "Hlavní" -#: vpn/choices.py:92 +#: netbox/vpn/choices.py:100 msgid "Pre-shared keys" msgstr "Předsdílené klíče" -#: vpn/choices.py:93 +#: netbox/vpn/choices.py:101 msgid "Certificates" msgstr "Certifikáty" -#: vpn/choices.py:94 +#: netbox/vpn/choices.py:102 msgid "RSA signatures" msgstr "Podpisy RSA" -#: vpn/choices.py:95 +#: netbox/vpn/choices.py:103 msgid "DSA signatures" msgstr "Podpisy DSA" -#: vpn/choices.py:178 vpn/choices.py:179 vpn/choices.py:180 vpn/choices.py:181 -#: vpn/choices.py:182 vpn/choices.py:183 vpn/choices.py:184 vpn/choices.py:185 -#: vpn/choices.py:186 vpn/choices.py:187 vpn/choices.py:188 vpn/choices.py:189 -#: vpn/choices.py:190 vpn/choices.py:191 vpn/choices.py:192 vpn/choices.py:193 -#: vpn/choices.py:194 vpn/choices.py:195 vpn/choices.py:196 vpn/choices.py:197 -#: vpn/choices.py:198 vpn/choices.py:199 vpn/choices.py:200 vpn/choices.py:201 +#: netbox/vpn/choices.py:186 netbox/vpn/choices.py:187 +#: netbox/vpn/choices.py:188 netbox/vpn/choices.py:189 +#: netbox/vpn/choices.py:190 netbox/vpn/choices.py:191 +#: netbox/vpn/choices.py:192 netbox/vpn/choices.py:193 +#: netbox/vpn/choices.py:194 netbox/vpn/choices.py:195 +#: netbox/vpn/choices.py:196 netbox/vpn/choices.py:197 +#: netbox/vpn/choices.py:198 netbox/vpn/choices.py:199 +#: netbox/vpn/choices.py:200 netbox/vpn/choices.py:201 +#: netbox/vpn/choices.py:202 netbox/vpn/choices.py:203 +#: netbox/vpn/choices.py:204 netbox/vpn/choices.py:205 +#: netbox/vpn/choices.py:206 netbox/vpn/choices.py:207 +#: netbox/vpn/choices.py:208 netbox/vpn/choices.py:209 #, python-brace-format msgid "Group {n}" msgstr "Skupina {n}" -#: vpn/choices.py:243 +#: netbox/vpn/choices.py:251 msgid "Ethernet Private LAN" msgstr "Ethernetová soukromá síť LAN" -#: vpn/choices.py:244 +#: netbox/vpn/choices.py:252 msgid "Ethernet Virtual Private LAN" msgstr "Ethernetová virtuální privátní síť LAN" -#: vpn/choices.py:247 +#: netbox/vpn/choices.py:255 msgid "Ethernet Private Tree" msgstr "Ethernetový soukromý strom" -#: vpn/choices.py:248 +#: netbox/vpn/choices.py:256 msgid "Ethernet Virtual Private Tree" msgstr "Virtuální privátní strom Ethernetu" -#: vpn/filtersets.py:41 +#: netbox/vpn/filtersets.py:41 msgid "Tunnel group (ID)" msgstr "Skupina tunelů (ID)" -#: vpn/filtersets.py:47 +#: netbox/vpn/filtersets.py:47 msgid "Tunnel group (slug)" msgstr "Skupina tunelů (slug)" -#: vpn/filtersets.py:54 +#: netbox/vpn/filtersets.py:54 msgid "IPSec profile (ID)" msgstr "Profil IPsec (ID)" -#: vpn/filtersets.py:60 +#: netbox/vpn/filtersets.py:60 msgid "IPSec profile (name)" msgstr "Profil IPsec (název)" -#: vpn/filtersets.py:81 +#: netbox/vpn/filtersets.py:81 msgid "Tunnel (ID)" msgstr "Tunel (ID)" -#: vpn/filtersets.py:87 +#: netbox/vpn/filtersets.py:87 msgid "Tunnel (name)" msgstr "Tunel (název)" -#: vpn/filtersets.py:118 +#: netbox/vpn/filtersets.py:118 msgid "Outside IP (ID)" msgstr "Vnější IP (ID)" -#: vpn/filtersets.py:130 vpn/filtersets.py:263 +#: netbox/vpn/filtersets.py:130 netbox/vpn/filtersets.py:263 msgid "IKE policy (ID)" msgstr "Zásady IKE (ID)" -#: vpn/filtersets.py:136 vpn/filtersets.py:269 +#: netbox/vpn/filtersets.py:136 netbox/vpn/filtersets.py:269 msgid "IKE policy (name)" msgstr "Zásady IKE (název)" -#: vpn/filtersets.py:200 vpn/filtersets.py:273 +#: netbox/vpn/filtersets.py:200 netbox/vpn/filtersets.py:273 msgid "IPSec policy (ID)" msgstr "Zásady IPsec (ID)" -#: vpn/filtersets.py:206 vpn/filtersets.py:279 +#: netbox/vpn/filtersets.py:206 netbox/vpn/filtersets.py:279 msgid "IPSec policy (name)" msgstr "Zásada IPsec (název)" -#: vpn/filtersets.py:348 +#: netbox/vpn/filtersets.py:348 msgid "L2VPN (slug)" msgstr "L2VPN (slug)" -#: vpn/filtersets.py:412 +#: netbox/vpn/filtersets.py:412 msgid "VM Interface (ID)" msgstr "Rozhraní virtuálního počítače (ID)" -#: vpn/filtersets.py:418 +#: netbox/vpn/filtersets.py:418 msgid "VLAN (name)" msgstr "VLAN (název)" -#: vpn/forms/bulk_edit.py:45 vpn/forms/bulk_import.py:42 -#: vpn/forms/filtersets.py:54 +#: netbox/vpn/forms/bulk_edit.py:45 netbox/vpn/forms/bulk_import.py:42 +#: netbox/vpn/forms/filtersets.py:54 msgid "Tunnel group" msgstr "Skupina tunelů" -#: vpn/forms/bulk_edit.py:117 vpn/models/crypto.py:47 +#: netbox/vpn/forms/bulk_edit.py:117 netbox/vpn/models/crypto.py:47 msgid "SA lifetime" msgstr "Životnost SA" -#: vpn/forms/bulk_edit.py:151 wireless/forms/bulk_edit.py:79 -#: wireless/forms/bulk_edit.py:126 wireless/forms/filtersets.py:64 -#: wireless/forms/filtersets.py:98 +#: netbox/vpn/forms/bulk_edit.py:151 netbox/wireless/forms/bulk_edit.py:79 +#: netbox/wireless/forms/bulk_edit.py:126 +#: netbox/wireless/forms/filtersets.py:64 +#: netbox/wireless/forms/filtersets.py:98 msgid "Pre-shared key" msgstr "Předsdílený klíč" -#: vpn/forms/bulk_edit.py:237 vpn/forms/bulk_import.py:239 -#: vpn/forms/filtersets.py:199 vpn/forms/model_forms.py:370 -#: vpn/models/crypto.py:104 +#: netbox/vpn/forms/bulk_edit.py:237 netbox/vpn/forms/bulk_import.py:239 +#: netbox/vpn/forms/filtersets.py:199 netbox/vpn/forms/model_forms.py:370 +#: netbox/vpn/models/crypto.py:104 msgid "IKE policy" msgstr "Zásady IKE" -#: vpn/forms/bulk_edit.py:242 vpn/forms/bulk_import.py:244 -#: vpn/forms/filtersets.py:204 vpn/forms/model_forms.py:374 -#: vpn/models/crypto.py:209 +#: netbox/vpn/forms/bulk_edit.py:242 netbox/vpn/forms/bulk_import.py:244 +#: netbox/vpn/forms/filtersets.py:204 netbox/vpn/forms/model_forms.py:374 +#: netbox/vpn/models/crypto.py:209 msgid "IPSec policy" msgstr "Zásady IPsec" -#: vpn/forms/bulk_import.py:50 +#: netbox/vpn/forms/bulk_import.py:50 msgid "Tunnel encapsulation" msgstr "Zapouzdření tunelu" -#: vpn/forms/bulk_import.py:83 +#: netbox/vpn/forms/bulk_import.py:83 msgid "Operational role" msgstr "Provozní role" -#: vpn/forms/bulk_import.py:90 +#: netbox/vpn/forms/bulk_import.py:90 msgid "Parent device of assigned interface" msgstr "Nadřazené zařízení přiřazeného rozhraní" -#: vpn/forms/bulk_import.py:97 +#: netbox/vpn/forms/bulk_import.py:97 msgid "Parent VM of assigned interface" msgstr "Nadřazený VM přiřazeného rozhraní" -#: vpn/forms/bulk_import.py:104 +#: netbox/vpn/forms/bulk_import.py:104 msgid "Device or virtual machine interface" msgstr "Rozhraní zařízení nebo virtuálního stroje" -#: vpn/forms/bulk_import.py:183 +#: netbox/vpn/forms/bulk_import.py:183 msgid "IKE proposal(s)" msgstr "Návrhy IKE" -#: vpn/forms/bulk_import.py:215 vpn/models/crypto.py:197 +#: netbox/vpn/forms/bulk_import.py:215 netbox/vpn/models/crypto.py:197 msgid "Diffie-Hellman group for Perfect Forward Secrecy" msgstr "Skupina Diffie-Hellman pro Perfect Forward Secrecy" -#: vpn/forms/bulk_import.py:222 +#: netbox/vpn/forms/bulk_import.py:222 msgid "IPSec proposal(s)" msgstr "Návrhy IPsec" -#: vpn/forms/bulk_import.py:236 +#: netbox/vpn/forms/bulk_import.py:236 msgid "IPSec protocol" msgstr "Protokol IPsec" -#: vpn/forms/bulk_import.py:266 +#: netbox/vpn/forms/bulk_import.py:266 msgid "L2VPN type" msgstr "Typ L2VPN" -#: vpn/forms/bulk_import.py:287 +#: netbox/vpn/forms/bulk_import.py:287 msgid "Parent device (for interface)" msgstr "Rodičovské zařízení (pro rozhraní)" -#: vpn/forms/bulk_import.py:294 +#: netbox/vpn/forms/bulk_import.py:294 msgid "Parent virtual machine (for interface)" msgstr "Nadřazený virtuální stroj (pro rozhraní)" -#: vpn/forms/bulk_import.py:301 +#: netbox/vpn/forms/bulk_import.py:301 msgid "Assigned interface (device or VM)" msgstr "Přiřazené rozhraní (zařízení nebo VM)" -#: vpn/forms/bulk_import.py:334 +#: netbox/vpn/forms/bulk_import.py:334 msgid "Cannot import device and VM interface terminations simultaneously." msgstr "" "Nelze importovat zakončení rozhraní zařízení a virtuálního počítače " "současně." -#: vpn/forms/bulk_import.py:336 +#: netbox/vpn/forms/bulk_import.py:336 msgid "Each termination must specify either an interface or a VLAN." msgstr "Každé ukončení musí specifikovat rozhraní nebo VLAN." -#: vpn/forms/bulk_import.py:338 +#: netbox/vpn/forms/bulk_import.py:338 msgid "Cannot assign both an interface and a VLAN." msgstr "Nelze přiřadit rozhraní i VLAN." -#: vpn/forms/filtersets.py:130 +#: netbox/vpn/forms/filtersets.py:130 msgid "IKE version" msgstr "IKE verze" -#: vpn/forms/filtersets.py:142 vpn/forms/filtersets.py:175 -#: vpn/forms/model_forms.py:298 vpn/forms/model_forms.py:334 +#: netbox/vpn/forms/filtersets.py:142 netbox/vpn/forms/filtersets.py:175 +#: netbox/vpn/forms/model_forms.py:298 netbox/vpn/forms/model_forms.py:334 msgid "Proposal" msgstr "Návrh" -#: vpn/forms/filtersets.py:251 +#: netbox/vpn/forms/filtersets.py:251 msgid "Assigned Object Type" msgstr "Typ přiřazeného objektu" -#: vpn/forms/model_forms.py:95 vpn/forms/model_forms.py:130 -#: vpn/forms/model_forms.py:240 vpn/tables/tunnels.py:91 +#: netbox/vpn/forms/model_forms.py:95 netbox/vpn/forms/model_forms.py:130 +#: netbox/vpn/forms/model_forms.py:240 netbox/vpn/tables/tunnels.py:91 msgid "Tunnel interface" msgstr "Rozhraní tunelu" -#: vpn/forms/model_forms.py:150 +#: netbox/vpn/forms/model_forms.py:150 msgid "First Termination" msgstr "První ukončení" -#: vpn/forms/model_forms.py:153 +#: netbox/vpn/forms/model_forms.py:153 msgid "Second Termination" msgstr "Druhé ukončení" -#: vpn/forms/model_forms.py:197 +#: netbox/vpn/forms/model_forms.py:197 msgid "This parameter is required when defining a termination." msgstr "Tento parametr je vyžadován při definování ukončení." -#: vpn/forms/model_forms.py:320 vpn/forms/model_forms.py:356 +#: netbox/vpn/forms/model_forms.py:320 netbox/vpn/forms/model_forms.py:356 msgid "Policy" msgstr "Politika" -#: vpn/forms/model_forms.py:487 +#: netbox/vpn/forms/model_forms.py:487 msgid "A termination must specify an interface or VLAN." msgstr "Ukončení musí specifikovat rozhraní nebo VLAN." -#: vpn/forms/model_forms.py:489 +#: netbox/vpn/forms/model_forms.py:489 msgid "" "A termination can only have one terminating object (an interface or VLAN)." msgstr "Ukončení může mít pouze jeden ukončující objekt (rozhraní nebo VLAN)." -#: vpn/models/crypto.py:33 +#: netbox/vpn/models/crypto.py:33 msgid "encryption algorithm" msgstr "šifrovací algoritmus" -#: vpn/models/crypto.py:37 +#: netbox/vpn/models/crypto.py:37 msgid "authentication algorithm" msgstr "ověřovací algoritmus" -#: vpn/models/crypto.py:44 +#: netbox/vpn/models/crypto.py:44 msgid "Diffie-Hellman group ID" msgstr "ID skupiny Diffie-Hellman" -#: vpn/models/crypto.py:50 +#: netbox/vpn/models/crypto.py:50 msgid "Security association lifetime (in seconds)" msgstr "Životnost asociace zabezpečení (v sekundách)" -#: vpn/models/crypto.py:59 +#: netbox/vpn/models/crypto.py:59 msgid "IKE proposal" msgstr "Návrh IKE" -#: vpn/models/crypto.py:60 +#: netbox/vpn/models/crypto.py:60 msgid "IKE proposals" msgstr "Návrhy IKE" -#: vpn/models/crypto.py:76 +#: netbox/vpn/models/crypto.py:76 msgid "version" msgstr "verze" -#: vpn/models/crypto.py:88 vpn/models/crypto.py:190 +#: netbox/vpn/models/crypto.py:88 netbox/vpn/models/crypto.py:190 msgid "proposals" msgstr "návrhy" -#: vpn/models/crypto.py:91 wireless/models.py:39 +#: netbox/vpn/models/crypto.py:91 netbox/wireless/models.py:39 msgid "pre-shared key" msgstr "předsdílený klíč" -#: vpn/models/crypto.py:105 +#: netbox/vpn/models/crypto.py:105 msgid "IKE policies" msgstr "Zásady IKE" -#: vpn/models/crypto.py:118 +#: netbox/vpn/models/crypto.py:118 msgid "Mode is required for selected IKE version" msgstr "Režim je vyžadován pro vybranou verzi IKE" -#: vpn/models/crypto.py:122 +#: netbox/vpn/models/crypto.py:122 msgid "Mode cannot be used for selected IKE version" msgstr "Režim nelze použít pro vybranou verzi IKE" -#: vpn/models/crypto.py:136 +#: netbox/vpn/models/crypto.py:136 msgid "encryption" msgstr "šifrování" -#: vpn/models/crypto.py:141 +#: netbox/vpn/models/crypto.py:141 msgid "authentication" msgstr "autentizace" -#: vpn/models/crypto.py:149 +#: netbox/vpn/models/crypto.py:149 msgid "Security association lifetime (seconds)" msgstr "Životnost asociace zabezpečení (v sekundách)" -#: vpn/models/crypto.py:155 +#: netbox/vpn/models/crypto.py:155 msgid "Security association lifetime (in kilobytes)" msgstr "Životnost asociace zabezpečení (v kilobajtech)" -#: vpn/models/crypto.py:164 +#: netbox/vpn/models/crypto.py:164 msgid "IPSec proposal" msgstr "Návrh protokolu IPsec" -#: vpn/models/crypto.py:165 +#: netbox/vpn/models/crypto.py:165 msgid "IPSec proposals" msgstr "Návrhy IPsec" -#: vpn/models/crypto.py:178 +#: netbox/vpn/models/crypto.py:178 msgid "Encryption and/or authentication algorithm must be defined" msgstr "Musí být definován šifrovací a/nebo ověřovací algoritmus" -#: vpn/models/crypto.py:210 +#: netbox/vpn/models/crypto.py:210 msgid "IPSec policies" msgstr "Zásady protokolu IPsec" -#: vpn/models/crypto.py:251 +#: netbox/vpn/models/crypto.py:251 msgid "IPSec profiles" msgstr "Profily IPsec" -#: vpn/models/l2vpn.py:116 +#: netbox/vpn/models/l2vpn.py:116 msgid "L2VPN termination" msgstr "Ukončení L2VPN" -#: vpn/models/l2vpn.py:117 +#: netbox/vpn/models/l2vpn.py:117 msgid "L2VPN terminations" msgstr "Ukončení L2VPN" -#: vpn/models/l2vpn.py:135 +#: netbox/vpn/models/l2vpn.py:135 #, python-brace-format msgid "L2VPN Termination already assigned ({assigned_object})" msgstr "Ukončení L2VPN je již přiřazeno ({assigned_object})" -#: vpn/models/l2vpn.py:147 +#: netbox/vpn/models/l2vpn.py:147 #, python-brace-format msgid "" "{l2vpn_type} L2VPNs cannot have more than two terminations; found " @@ -15074,186 +15923,194 @@ msgstr "" "{l2vpn_type} L2VPN nemohou mít více než dvě zakončení; nalezeno " "{terminations_count} již definované." -#: vpn/models/tunnels.py:26 +#: netbox/vpn/models/tunnels.py:26 msgid "tunnel group" msgstr "tunelová skupina" -#: vpn/models/tunnels.py:27 +#: netbox/vpn/models/tunnels.py:27 msgid "tunnel groups" msgstr "tunelové skupiny" -#: vpn/models/tunnels.py:53 +#: netbox/vpn/models/tunnels.py:53 msgid "encapsulation" msgstr "zapouzdření" -#: vpn/models/tunnels.py:72 +#: netbox/vpn/models/tunnels.py:72 msgid "tunnel ID" msgstr "ID tunelu" -#: vpn/models/tunnels.py:94 +#: netbox/vpn/models/tunnels.py:94 msgid "tunnel" msgstr "tunel" -#: vpn/models/tunnels.py:95 +#: netbox/vpn/models/tunnels.py:95 msgid "tunnels" msgstr "tunely" -#: vpn/models/tunnels.py:153 +#: netbox/vpn/models/tunnels.py:153 msgid "An object may be terminated to only one tunnel at a time." msgstr "Objekt může být ukončen pouze v jednom tunelu najednou." -#: vpn/models/tunnels.py:156 +#: netbox/vpn/models/tunnels.py:156 msgid "tunnel termination" msgstr "zakončení tunelu" -#: vpn/models/tunnels.py:157 +#: netbox/vpn/models/tunnels.py:157 msgid "tunnel terminations" msgstr "zakončení tunelu" -#: vpn/models/tunnels.py:174 +#: netbox/vpn/models/tunnels.py:174 #, python-brace-format msgid "{name} is already attached to a tunnel ({tunnel})." msgstr "{name} je již připojen k tunelu ({tunnel})." -#: vpn/tables/crypto.py:22 +#: netbox/vpn/tables/crypto.py:22 msgid "Authentication Method" msgstr "Metoda ověřování" -#: vpn/tables/crypto.py:25 vpn/tables/crypto.py:97 +#: netbox/vpn/tables/crypto.py:25 netbox/vpn/tables/crypto.py:97 msgid "Encryption Algorithm" msgstr "Šifrovací algoritmus" -#: vpn/tables/crypto.py:28 vpn/tables/crypto.py:100 +#: netbox/vpn/tables/crypto.py:28 netbox/vpn/tables/crypto.py:100 msgid "Authentication Algorithm" msgstr "Algoritmus ověřování" -#: vpn/tables/crypto.py:34 +#: netbox/vpn/tables/crypto.py:34 msgid "SA Lifetime" msgstr "Životnost SA" -#: vpn/tables/crypto.py:71 +#: netbox/vpn/tables/crypto.py:71 msgid "Pre-shared Key" msgstr "Předsdílený klíč" -#: vpn/tables/crypto.py:103 +#: netbox/vpn/tables/crypto.py:103 msgid "SA Lifetime (Seconds)" msgstr "Životnost SA (sekundy)" -#: vpn/tables/crypto.py:106 +#: netbox/vpn/tables/crypto.py:106 msgid "SA Lifetime (KB)" msgstr "Životnost SA (KB)" -#: vpn/tables/l2vpn.py:69 +#: netbox/vpn/tables/l2vpn.py:69 msgid "Object Parent" msgstr "Nadřazený objekt" -#: vpn/tables/l2vpn.py:74 +#: netbox/vpn/tables/l2vpn.py:74 msgid "Object Site" msgstr "Objektová lokalita" -#: wireless/choices.py:11 +#: netbox/wireless/choices.py:11 msgid "Access point" msgstr "Přístupový bod" -#: wireless/choices.py:12 +#: netbox/wireless/choices.py:12 msgid "Station" msgstr "Stanice" -#: wireless/choices.py:467 +#: netbox/wireless/choices.py:467 msgid "Open" msgstr "Otevřeno" -#: wireless/choices.py:469 +#: netbox/wireless/choices.py:469 msgid "WPA Personal (PSK)" msgstr "Osobní WPA (PSK)" -#: wireless/choices.py:470 +#: netbox/wireless/choices.py:470 msgid "WPA Enterprise" msgstr "Podnikové WPA" -#: wireless/forms/bulk_edit.py:73 wireless/forms/bulk_edit.py:120 -#: wireless/forms/bulk_import.py:68 wireless/forms/bulk_import.py:71 -#: wireless/forms/bulk_import.py:110 wireless/forms/bulk_import.py:113 -#: wireless/forms/filtersets.py:59 wireless/forms/filtersets.py:93 +#: netbox/wireless/forms/bulk_edit.py:73 +#: netbox/wireless/forms/bulk_edit.py:120 +#: netbox/wireless/forms/bulk_import.py:68 +#: netbox/wireless/forms/bulk_import.py:71 +#: netbox/wireless/forms/bulk_import.py:110 +#: netbox/wireless/forms/bulk_import.py:113 +#: netbox/wireless/forms/filtersets.py:59 +#: netbox/wireless/forms/filtersets.py:93 msgid "Authentication cipher" msgstr "Ověřovací šifra" -#: wireless/forms/bulk_edit.py:134 wireless/forms/bulk_import.py:116 -#: wireless/forms/bulk_import.py:119 wireless/forms/filtersets.py:106 +#: 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" -#: wireless/forms/bulk_import.py:52 +#: netbox/wireless/forms/bulk_import.py:52 msgid "Bridged VLAN" msgstr "Přemostěná VLAN" -#: wireless/forms/bulk_import.py:89 wireless/tables/wirelesslink.py:28 +#: netbox/wireless/forms/bulk_import.py:89 +#: netbox/wireless/tables/wirelesslink.py:28 msgid "Interface A" msgstr "Rozhraní A" -#: wireless/forms/bulk_import.py:93 wireless/tables/wirelesslink.py:37 +#: netbox/wireless/forms/bulk_import.py:93 +#: netbox/wireless/tables/wirelesslink.py:37 msgid "Interface B" msgstr "Rozhraní B" -#: wireless/forms/model_forms.py:161 +#: netbox/wireless/forms/model_forms.py:161 msgid "Side B" msgstr "Strana B" -#: wireless/models.py:31 +#: netbox/wireless/models.py:31 msgid "authentication cipher" msgstr "ověřovací šifra" -#: wireless/models.py:69 +#: netbox/wireless/models.py:69 msgid "wireless LAN group" msgstr "skupina bezdrátových sítí LAN" -#: wireless/models.py:70 +#: netbox/wireless/models.py:70 msgid "wireless LAN groups" msgstr "skupiny bezdrátových sítí LAN" -#: wireless/models.py:116 +#: netbox/wireless/models.py:116 msgid "wireless LAN" msgstr "bezdrátová síť LAN" -#: wireless/models.py:144 +#: netbox/wireless/models.py:144 msgid "interface A" msgstr "rozhraní A" -#: wireless/models.py:151 +#: netbox/wireless/models.py:151 msgid "interface B" msgstr "rozhraní B" -#: wireless/models.py:165 +#: netbox/wireless/models.py:165 msgid "distance" msgstr "vzdálenost" -#: wireless/models.py:172 +#: netbox/wireless/models.py:172 msgid "distance unit" msgstr "jednotka vzdálenosti" -#: wireless/models.py:219 +#: netbox/wireless/models.py:219 msgid "wireless link" msgstr "bezdrátové spojení" -#: wireless/models.py:220 +#: netbox/wireless/models.py:220 msgid "wireless links" msgstr "bezdrátové spoje" -#: wireless/models.py:236 +#: 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" -#: wireless/models.py:242 wireless/models.py:248 +#: netbox/wireless/models.py:242 netbox/wireless/models.py:248 #, python-brace-format msgid "{type} is not a wireless interface." msgstr "{type} není bezdrátové rozhraní." -#: wireless/utils.py:16 +#: netbox/wireless/utils.py:16 #, python-brace-format msgid "Invalid channel value: {channel}" msgstr "Neplatná hodnota kanálu: {channel}" -#: wireless/utils.py:26 +#: netbox/wireless/utils.py:26 #, python-brace-format msgid "Invalid channel attribute: {name}" msgstr "Neplatný atribut kanálu: {name}" diff --git a/netbox/translations/da/LC_MESSAGES/django.mo b/netbox/translations/da/LC_MESSAGES/django.mo index 2390fc9f1..ea7f83ac3 100644 Binary files a/netbox/translations/da/LC_MESSAGES/django.mo and b/netbox/translations/da/LC_MESSAGES/django.mo differ diff --git a/netbox/translations/da/LC_MESSAGES/django.po b/netbox/translations/da/LC_MESSAGES/django.po index e569dd86b..bf9f12abe 100644 --- a/netbox/translations/da/LC_MESSAGES/django.po +++ b/netbox/translations/da/LC_MESSAGES/django.po @@ -14,7 +14,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-10-28 19:20+0000\n" +"POT-Creation-Date: 2024-12-12 05:02+0000\n" "PO-Revision-Date: 2023-10-30 17:48+0000\n" "Last-Translator: Jeremy Stretch, 2024\n" "Language-Team: Danish (https://app.transifex.com/netbox-community/teams/178115/da/)\n" @@ -24,1868 +24,2135 @@ msgstr "" "Language: da\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: account/tables.py:27 templates/account/token.html:22 -#: templates/users/token.html:17 users/forms/bulk_import.py:39 -#: users/forms/model_forms.py:112 +#: netbox/account/tables.py:27 netbox/templates/account/token.html:22 +#: netbox/templates/users/token.html:17 netbox/users/forms/bulk_import.py:39 +#: netbox/users/forms/model_forms.py:112 msgid "Key" msgstr "Nøgle" -#: account/tables.py:31 users/forms/filtersets.py:132 +#: netbox/account/tables.py:31 netbox/users/forms/filtersets.py:132 msgid "Write Enabled" msgstr "Skriv aktiveret" -#: account/tables.py:35 core/choices.py:86 core/tables/jobs.py:29 -#: core/tables/tasks.py:79 extras/tables/tables.py:335 -#: extras/tables/tables.py:566 templates/account/token.html:43 -#: templates/core/configrevision.html:26 -#: templates/core/configrevision_restore.html:12 templates/core/job.html:69 -#: templates/core/rq_task.html:16 templates/core/rq_task.html:73 -#: templates/core/rq_worker.html:14 -#: templates/extras/htmx/script_result.html:12 -#: templates/extras/journalentry.html:22 templates/generic/object.html:58 -#: templates/users/token.html:35 +#: netbox/account/tables.py:35 netbox/core/choices.py:86 +#: 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 +#: netbox/templates/core/configrevision.html:26 +#: netbox/templates/core/configrevision_restore.html:12 +#: netbox/templates/core/job.html:69 netbox/templates/core/rq_task.html:16 +#: netbox/templates/core/rq_task.html:73 +#: netbox/templates/core/rq_worker.html:14 +#: netbox/templates/extras/htmx/script_result.html:12 +#: netbox/templates/extras/journalentry.html:22 +#: netbox/templates/generic/object.html:58 +#: netbox/templates/users/token.html:35 msgid "Created" msgstr "Oprettet" -#: account/tables.py:39 templates/account/token.html:47 -#: templates/users/token.html:39 users/forms/bulk_edit.py:117 -#: users/forms/filtersets.py:136 +#: netbox/account/tables.py:39 netbox/templates/account/token.html:47 +#: netbox/templates/users/token.html:39 netbox/users/forms/bulk_edit.py:117 +#: netbox/users/forms/filtersets.py:136 msgid "Expires" msgstr "Udløber" -#: account/tables.py:42 users/forms/filtersets.py:141 +#: netbox/account/tables.py:42 netbox/users/forms/filtersets.py:141 msgid "Last Used" msgstr "Sidst brugt" -#: account/tables.py:45 templates/account/token.html:55 -#: templates/users/token.html:47 users/forms/bulk_edit.py:122 -#: users/forms/model_forms.py:124 +#: netbox/account/tables.py:45 netbox/templates/account/token.html:55 +#: netbox/templates/users/token.html:47 netbox/users/forms/bulk_edit.py:122 +#: netbox/users/forms/model_forms.py:124 msgid "Allowed IPs" msgstr "Tilladte IP'er" -#: account/views.py:114 +#: netbox/account/views.py:114 #, python-brace-format msgid "Logged in as {user}." msgstr "Logget ind som {user}." -#: account/views.py:164 +#: netbox/account/views.py:164 msgid "You have logged out." msgstr "Du er logget ud." -#: account/views.py:216 +#: netbox/account/views.py:216 msgid "Your preferences have been updated." msgstr "Dine præferencer er blevet opdateret." -#: account/views.py:239 +#: netbox/account/views.py:239 msgid "LDAP-authenticated user credentials cannot be changed within NetBox." msgstr "LDAP-godkendte brugeroplysninger kan ikke ændres i NetBox." -#: account/views.py:254 +#: netbox/account/views.py:254 msgid "Your password has been changed successfully." msgstr "Din adgangskode er blevet ændret." -#: circuits/choices.py:21 dcim/choices.py:20 dcim/choices.py:102 -#: dcim/choices.py:185 dcim/choices.py:237 dcim/choices.py:1530 -#: dcim/choices.py:1606 dcim/choices.py:1656 virtualization/choices.py:20 -#: virtualization/choices.py:45 vpn/choices.py:18 +#: netbox/circuits/choices.py:21 netbox/dcim/choices.py:20 +#: netbox/dcim/choices.py:102 netbox/dcim/choices.py: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 msgid "Planned" msgstr "Planlagt" -#: circuits/choices.py:22 netbox/navigation/menu.py:305 +#: netbox/circuits/choices.py:22 netbox/netbox/navigation/menu.py:305 msgid "Provisioning" msgstr "Opretter" -#: circuits/choices.py:23 core/tables/tasks.py:22 dcim/choices.py:22 -#: dcim/choices.py:103 dcim/choices.py:184 dcim/choices.py:236 -#: dcim/choices.py:1605 dcim/choices.py:1655 extras/tables/tables.py:495 -#: ipam/choices.py:31 ipam/choices.py:49 ipam/choices.py:69 -#: ipam/choices.py:154 templates/extras/configcontext.html:25 -#: templates/users/user.html:37 users/forms/bulk_edit.py:38 -#: virtualization/choices.py:22 virtualization/choices.py:44 vpn/choices.py:19 -#: wireless/choices.py:25 +#: netbox/circuits/choices.py:23 netbox/core/tables/tasks.py:22 +#: netbox/dcim/choices.py:22 netbox/dcim/choices.py:103 +#: netbox/dcim/choices.py: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/templates/users/user.html:37 netbox/users/forms/bulk_edit.py:38 +#: netbox/virtualization/choices.py:22 netbox/virtualization/choices.py:44 +#: netbox/vpn/choices.py:19 netbox/wireless/choices.py:25 msgid "Active" msgstr "Aktiv" -#: circuits/choices.py:24 dcim/choices.py:183 dcim/choices.py:235 -#: dcim/choices.py:1604 dcim/choices.py:1657 virtualization/choices.py:24 -#: virtualization/choices.py:43 +#: 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 msgid "Offline" msgstr "Offline" -#: circuits/choices.py:25 +#: netbox/circuits/choices.py:25 msgid "Deprovisioning" msgstr "Nedlægger" -#: circuits/choices.py:26 +#: netbox/circuits/choices.py:26 msgid "Decommissioned" msgstr "Nedlagt" -#: circuits/choices.py:90 dcim/choices.py:1617 tenancy/choices.py:17 +#: netbox/circuits/choices.py:90 netbox/dcim/choices.py:1619 +#: netbox/tenancy/choices.py:17 msgid "Primary" msgstr "Primær" -#: circuits/choices.py:91 ipam/choices.py:90 tenancy/choices.py:18 +#: netbox/circuits/choices.py:91 netbox/ipam/choices.py:90 +#: netbox/tenancy/choices.py:18 msgid "Secondary" msgstr "Sekundær" -#: circuits/choices.py:92 tenancy/choices.py:19 +#: netbox/circuits/choices.py:92 netbox/tenancy/choices.py:19 msgid "Tertiary" msgstr "Tertiær" -#: circuits/choices.py:93 tenancy/choices.py:20 +#: netbox/circuits/choices.py:93 netbox/tenancy/choices.py:20 msgid "Inactive" msgstr "Inaktiv" -#: circuits/filtersets.py:31 circuits/filtersets.py:198 dcim/filtersets.py:98 -#: dcim/filtersets.py:152 dcim/filtersets.py:212 dcim/filtersets.py:333 -#: dcim/filtersets.py:464 dcim/filtersets.py:1021 dcim/filtersets.py:1368 -#: dcim/filtersets.py:1903 dcim/filtersets.py:2146 dcim/filtersets.py:2204 -#: ipam/filtersets.py:339 ipam/filtersets.py:959 -#: virtualization/filtersets.py:45 virtualization/filtersets.py:173 -#: vpn/filtersets.py:358 +#: 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:339 netbox/ipam/filtersets.py:959 +#: netbox/virtualization/filtersets.py:45 +#: netbox/virtualization/filtersets.py:173 netbox/vpn/filtersets.py:358 msgid "Region (ID)" msgstr "Område (ID)" -#: circuits/filtersets.py:38 circuits/filtersets.py:205 dcim/filtersets.py:105 -#: dcim/filtersets.py:158 dcim/filtersets.py:219 dcim/filtersets.py:340 -#: dcim/filtersets.py:471 dcim/filtersets.py:1028 dcim/filtersets.py:1375 -#: dcim/filtersets.py:1910 dcim/filtersets.py:2153 dcim/filtersets.py:2211 -#: extras/filtersets.py:509 ipam/filtersets.py:346 ipam/filtersets.py:966 -#: virtualization/filtersets.py:52 virtualization/filtersets.py:180 -#: vpn/filtersets.py:353 +#: 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:346 +#: netbox/ipam/filtersets.py:966 netbox/virtualization/filtersets.py:52 +#: netbox/virtualization/filtersets.py:180 netbox/vpn/filtersets.py:353 msgid "Region (slug)" msgstr "Region (slug)" -#: circuits/filtersets.py:44 circuits/filtersets.py:211 dcim/filtersets.py:128 -#: dcim/filtersets.py:225 dcim/filtersets.py:346 dcim/filtersets.py:477 -#: dcim/filtersets.py:1034 dcim/filtersets.py:1381 dcim/filtersets.py:1916 -#: dcim/filtersets.py:2159 dcim/filtersets.py:2217 ipam/filtersets.py:352 -#: ipam/filtersets.py:972 virtualization/filtersets.py:58 -#: virtualization/filtersets.py:186 +#: 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:352 +#: netbox/ipam/filtersets.py:972 netbox/virtualization/filtersets.py:58 +#: netbox/virtualization/filtersets.py:186 msgid "Site group (ID)" msgstr "Områdegruppe (ID)" -#: circuits/filtersets.py:51 circuits/filtersets.py:218 dcim/filtersets.py:135 -#: dcim/filtersets.py:232 dcim/filtersets.py:353 dcim/filtersets.py:484 -#: dcim/filtersets.py:1041 dcim/filtersets.py:1388 dcim/filtersets.py:1923 -#: dcim/filtersets.py:2166 dcim/filtersets.py:2224 extras/filtersets.py:515 -#: ipam/filtersets.py:359 ipam/filtersets.py:979 -#: virtualization/filtersets.py:65 virtualization/filtersets.py:193 +#: 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:359 netbox/ipam/filtersets.py:979 +#: netbox/virtualization/filtersets.py:65 +#: netbox/virtualization/filtersets.py:193 msgid "Site group (slug)" msgstr "Områdegruppe (slug)" -#: circuits/filtersets.py:56 circuits/forms/bulk_edit.py:188 -#: circuits/forms/bulk_edit.py:216 circuits/forms/bulk_import.py:124 -#: circuits/forms/filtersets.py:51 circuits/forms/filtersets.py:171 -#: circuits/forms/filtersets.py:209 circuits/forms/model_forms.py:138 -#: circuits/forms/model_forms.py:154 circuits/tables/circuits.py:113 -#: dcim/forms/bulk_edit.py:168 dcim/forms/bulk_edit.py:329 -#: dcim/forms/bulk_edit.py:677 dcim/forms/bulk_edit.py:873 -#: dcim/forms/bulk_import.py:131 dcim/forms/bulk_import.py:230 -#: dcim/forms/bulk_import.py:309 dcim/forms/bulk_import.py:540 -#: dcim/forms/bulk_import.py:1311 dcim/forms/bulk_import.py:1339 -#: dcim/forms/filtersets.py:87 dcim/forms/filtersets.py:225 -#: dcim/forms/filtersets.py:342 dcim/forms/filtersets.py:439 -#: dcim/forms/filtersets.py:753 dcim/forms/filtersets.py:997 -#: dcim/forms/filtersets.py:1021 dcim/forms/filtersets.py:1111 -#: dcim/forms/filtersets.py:1149 dcim/forms/filtersets.py:1584 -#: dcim/forms/filtersets.py:1608 dcim/forms/filtersets.py:1632 -#: dcim/forms/model_forms.py:137 dcim/forms/model_forms.py:165 -#: dcim/forms/model_forms.py:238 dcim/forms/model_forms.py:463 -#: dcim/forms/model_forms.py:723 dcim/forms/object_create.py:391 -#: dcim/tables/devices.py:153 dcim/tables/power.py:26 dcim/tables/power.py:93 -#: dcim/tables/racks.py:122 dcim/tables/racks.py:207 dcim/tables/sites.py:134 -#: extras/filtersets.py:525 ipam/forms/bulk_edit.py:218 -#: ipam/forms/bulk_edit.py:285 ipam/forms/bulk_edit.py:484 -#: ipam/forms/bulk_import.py:171 ipam/forms/bulk_import.py:429 -#: ipam/forms/filtersets.py:153 ipam/forms/filtersets.py:231 -#: ipam/forms/filtersets.py:432 ipam/forms/filtersets.py:489 -#: ipam/forms/model_forms.py:205 ipam/forms/model_forms.py:636 -#: ipam/tables/ip.py:245 ipam/tables/vlans.py:118 ipam/tables/vlans.py:221 -#: templates/circuits/inc/circuit_termination_fields.html:6 -#: templates/dcim/device.html:22 templates/dcim/inc/cable_termination.html:8 -#: templates/dcim/inc/cable_termination.html:33 -#: templates/dcim/location.html:37 templates/dcim/powerpanel.html:22 -#: templates/dcim/rack.html:20 templates/dcim/rackreservation.html:28 -#: templates/dcim/site.html:28 templates/ipam/prefix.html:56 -#: templates/ipam/vlan.html:23 templates/ipam/vlan_edit.html:40 -#: templates/virtualization/cluster.html:42 -#: templates/virtualization/virtualmachine.html:95 -#: virtualization/forms/bulk_edit.py:91 virtualization/forms/bulk_edit.py:109 -#: virtualization/forms/bulk_edit.py:124 -#: virtualization/forms/bulk_import.py:59 -#: virtualization/forms/bulk_import.py:85 -#: virtualization/forms/filtersets.py:79 -#: virtualization/forms/filtersets.py:148 -#: virtualization/forms/model_forms.py:71 -#: virtualization/forms/model_forms.py:104 -#: virtualization/forms/model_forms.py:171 -#: virtualization/tables/clusters.py:77 -#: virtualization/tables/virtualmachines.py:63 vpn/forms/filtersets.py:266 -#: wireless/forms/model_forms.py:76 wireless/forms/model_forms.py:118 +#: 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/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/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/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 msgid "Site" msgstr "Område" -#: circuits/filtersets.py:62 circuits/filtersets.py:229 -#: circuits/filtersets.py:274 dcim/filtersets.py:242 dcim/filtersets.py:363 -#: dcim/filtersets.py:458 extras/filtersets.py:531 ipam/filtersets.py:238 -#: ipam/filtersets.py:369 ipam/filtersets.py:989 -#: virtualization/filtersets.py:75 virtualization/filtersets.py:203 -#: vpn/filtersets.py:363 +#: 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/virtualization/filtersets.py:75 +#: netbox/virtualization/filtersets.py:203 netbox/vpn/filtersets.py:363 msgid "Site (slug)" msgstr "Område (slug)" -#: circuits/filtersets.py:67 +#: netbox/circuits/filtersets.py:67 msgid "ASN (ID)" msgstr "ASN (ID)" -#: circuits/filtersets.py:73 circuits/forms/filtersets.py:31 -#: ipam/forms/model_forms.py:159 ipam/models/asns.py:108 -#: ipam/models/asns.py:125 ipam/tables/asn.py:41 templates/ipam/asn.html:20 +#: 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/templates/ipam/asn.html:20 msgid "ASN" msgstr "ASN" -#: circuits/filtersets.py:95 circuits/filtersets.py:122 -#: circuits/filtersets.py:156 circuits/filtersets.py:283 -#: circuits/filtersets.py:325 ipam/filtersets.py:243 +#: 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 msgid "Provider (ID)" msgstr "Leverandør (ID)" -#: circuits/filtersets.py:101 circuits/filtersets.py:128 -#: circuits/filtersets.py:162 circuits/filtersets.py:289 -#: circuits/filtersets.py:331 ipam/filtersets.py:249 +#: 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 msgid "Provider (slug)" msgstr "Leverandør (slug)" -#: circuits/filtersets.py:167 +#: netbox/circuits/filtersets.py:167 msgid "Provider account (ID)" msgstr "Leverandørkonto (ID)" -#: circuits/filtersets.py:173 +#: netbox/circuits/filtersets.py:173 msgid "Provider account (account)" msgstr "Leverandørkonto (konto)" -#: circuits/filtersets.py:178 +#: netbox/circuits/filtersets.py:178 msgid "Provider network (ID)" msgstr "Leverandørnetværk (ID)" -#: circuits/filtersets.py:182 +#: netbox/circuits/filtersets.py:182 msgid "Circuit type (ID)" msgstr "Kredsløbstype (ID)" -#: circuits/filtersets.py:188 +#: netbox/circuits/filtersets.py:188 msgid "Circuit type (slug)" msgstr "Kredsløbstype (slug)" -#: circuits/filtersets.py:223 circuits/filtersets.py:268 -#: dcim/filtersets.py:236 dcim/filtersets.py:357 dcim/filtersets.py:452 -#: dcim/filtersets.py:1045 dcim/filtersets.py:1393 dcim/filtersets.py:1928 -#: dcim/filtersets.py:2170 dcim/filtersets.py:2229 ipam/filtersets.py:232 -#: ipam/filtersets.py:363 ipam/filtersets.py:983 -#: virtualization/filtersets.py:69 virtualization/filtersets.py:197 -#: vpn/filtersets.py:368 +#: 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:232 netbox/ipam/filtersets.py:363 +#: netbox/ipam/filtersets.py:983 netbox/virtualization/filtersets.py:69 +#: netbox/virtualization/filtersets.py:197 netbox/vpn/filtersets.py:368 msgid "Site (ID)" msgstr "Område (ID)" -#: circuits/filtersets.py:233 circuits/filtersets.py:237 +#: netbox/circuits/filtersets.py:233 netbox/circuits/filtersets.py:237 msgid "Termination A (ID)" msgstr "Afslutning A (ID)" -#: circuits/filtersets.py:260 circuits/filtersets.py:320 core/filtersets.py:77 -#: core/filtersets.py:136 core/filtersets.py:173 dcim/filtersets.py:751 -#: dcim/filtersets.py:1362 dcim/filtersets.py:2277 extras/filtersets.py:41 -#: extras/filtersets.py:63 extras/filtersets.py:92 extras/filtersets.py:132 -#: extras/filtersets.py:181 extras/filtersets.py:209 extras/filtersets.py:239 -#: extras/filtersets.py:276 extras/filtersets.py:348 extras/filtersets.py:391 -#: extras/filtersets.py:438 extras/filtersets.py:498 extras/filtersets.py:657 -#: extras/filtersets.py:703 ipam/forms/model_forms.py:449 -#: netbox/filtersets.py:282 netbox/forms/__init__.py:22 -#: netbox/forms/base.py:167 templates/htmx/object_selector.html:28 -#: templates/inc/filter_list.html:46 templates/ipam/ipaddress_assign.html:29 -#: templates/search.html:7 templates/search.html:26 tenancy/filtersets.py:99 -#: users/filtersets.py:23 users/filtersets.py:57 users/filtersets.py:102 -#: users/filtersets.py:150 utilities/forms/forms.py:104 -#: utilities/templates/navigation/menu.html:16 +#: 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/templates/htmx/object_selector.html:28 +#: netbox/templates/inc/filter_list.html:46 +#: netbox/templates/ipam/ipaddress_assign.html:29 +#: netbox/templates/search.html:7 netbox/templates/search.html:26 +#: netbox/tenancy/filtersets.py:99 netbox/users/filtersets.py:23 +#: netbox/users/filtersets.py:57 netbox/users/filtersets.py:102 +#: netbox/users/filtersets.py:150 netbox/utilities/forms/forms.py:104 +#: netbox/utilities/templates/navigation/menu.html:16 msgid "Search" msgstr "Søg" -#: circuits/filtersets.py:264 circuits/forms/bulk_edit.py:172 -#: circuits/forms/bulk_edit.py:246 circuits/forms/bulk_import.py:115 -#: circuits/forms/filtersets.py:198 circuits/forms/filtersets.py:214 -#: circuits/forms/filtersets.py:260 circuits/forms/model_forms.py:111 -#: circuits/forms/model_forms.py:133 circuits/forms/model_forms.py:199 -#: circuits/tables/circuits.py:104 circuits/tables/circuits.py:164 -#: dcim/forms/connections.py:73 templates/circuits/circuit.html:15 -#: templates/circuits/circuitgroupassignment.html:26 -#: templates/circuits/circuittermination.html:19 -#: templates/dcim/inc/cable_termination.html:55 -#: templates/dcim/trace/circuit.html:4 +#: 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/templates/circuits/circuit.html:15 +#: netbox/templates/circuits/circuitgroupassignment.html:26 +#: netbox/templates/circuits/circuittermination.html:19 +#: netbox/templates/dcim/inc/cable_termination.html:55 +#: netbox/templates/dcim/trace/circuit.html:4 msgid "Circuit" msgstr "Kredsløb" -#: circuits/filtersets.py:278 +#: netbox/circuits/filtersets.py:278 msgid "ProviderNetwork (ID)" msgstr "Leverandørnetværk (ID)" -#: circuits/filtersets.py:335 +#: netbox/circuits/filtersets.py:335 msgid "Circuit (ID)" msgstr "Kredsløb (ID)" -#: circuits/filtersets.py:341 +#: netbox/circuits/filtersets.py:341 msgid "Circuit (CID)" msgstr "Kredsløb (CID)" -#: circuits/filtersets.py:345 +#: netbox/circuits/filtersets.py:345 msgid "Circuit group (ID)" msgstr "Kredsløbsgruppe (ID)" -#: circuits/filtersets.py:351 +#: netbox/circuits/filtersets.py:351 msgid "Circuit group (slug)" msgstr "Kredsløbsgruppe (slug)" -#: circuits/forms/bulk_edit.py:30 circuits/forms/filtersets.py:56 -#: circuits/forms/model_forms.py:29 circuits/tables/providers.py:33 -#: dcim/forms/bulk_edit.py:128 dcim/forms/filtersets.py:195 -#: dcim/forms/model_forms.py:123 dcim/tables/sites.py:94 -#: ipam/models/asns.py:126 ipam/tables/asn.py:27 ipam/views.py:213 -#: netbox/navigation/menu.py:172 netbox/navigation/menu.py:175 -#: templates/circuits/provider.html:23 +#: 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/templates/circuits/provider.html:23 msgid "ASNs" msgstr "ASN'er" -#: circuits/forms/bulk_edit.py:34 circuits/forms/bulk_edit.py:56 -#: circuits/forms/bulk_edit.py:83 circuits/forms/bulk_edit.py:104 -#: circuits/forms/bulk_edit.py:164 circuits/forms/bulk_edit.py:183 -#: circuits/forms/bulk_edit.py:228 core/forms/bulk_edit.py:28 -#: dcim/forms/bulk_create.py:35 dcim/forms/bulk_edit.py:73 -#: dcim/forms/bulk_edit.py:92 dcim/forms/bulk_edit.py:151 -#: dcim/forms/bulk_edit.py:192 dcim/forms/bulk_edit.py:210 -#: dcim/forms/bulk_edit.py:288 dcim/forms/bulk_edit.py:432 -#: dcim/forms/bulk_edit.py:466 dcim/forms/bulk_edit.py:481 -#: dcim/forms/bulk_edit.py:540 dcim/forms/bulk_edit.py:584 -#: dcim/forms/bulk_edit.py:618 dcim/forms/bulk_edit.py:642 -#: dcim/forms/bulk_edit.py:715 dcim/forms/bulk_edit.py:767 -#: dcim/forms/bulk_edit.py:819 dcim/forms/bulk_edit.py:842 -#: dcim/forms/bulk_edit.py:890 dcim/forms/bulk_edit.py:960 -#: dcim/forms/bulk_edit.py:1013 dcim/forms/bulk_edit.py:1048 -#: dcim/forms/bulk_edit.py:1088 dcim/forms/bulk_edit.py:1132 -#: dcim/forms/bulk_edit.py:1177 dcim/forms/bulk_edit.py:1204 -#: dcim/forms/bulk_edit.py:1222 dcim/forms/bulk_edit.py:1240 -#: dcim/forms/bulk_edit.py:1258 dcim/forms/bulk_edit.py:1682 -#: extras/forms/bulk_edit.py:39 extras/forms/bulk_edit.py:149 -#: extras/forms/bulk_edit.py:178 extras/forms/bulk_edit.py:208 -#: extras/forms/bulk_edit.py:256 extras/forms/bulk_edit.py:274 -#: extras/forms/bulk_edit.py:298 extras/forms/bulk_edit.py:312 -#: extras/forms/bulk_edit.py:339 extras/tables/tables.py:79 -#: ipam/forms/bulk_edit.py:53 ipam/forms/bulk_edit.py:73 -#: ipam/forms/bulk_edit.py:93 ipam/forms/bulk_edit.py:117 -#: ipam/forms/bulk_edit.py:146 ipam/forms/bulk_edit.py:175 -#: ipam/forms/bulk_edit.py:194 ipam/forms/bulk_edit.py:276 -#: ipam/forms/bulk_edit.py:321 ipam/forms/bulk_edit.py:369 -#: ipam/forms/bulk_edit.py:412 ipam/forms/bulk_edit.py:428 -#: ipam/forms/bulk_edit.py:516 ipam/forms/bulk_edit.py:547 -#: templates/account/token.html:35 templates/circuits/circuit.html:59 -#: templates/circuits/circuitgroup.html:32 -#: templates/circuits/circuittype.html:26 -#: templates/circuits/inc/circuit_termination_fields.html:88 -#: templates/circuits/provider.html:33 -#: templates/circuits/providernetwork.html:32 -#: templates/core/datasource.html:54 templates/core/plugin.html:80 -#: templates/dcim/cable.html:36 templates/dcim/consoleport.html:44 -#: templates/dcim/consoleserverport.html:44 templates/dcim/device.html:94 -#: templates/dcim/devicebay.html:32 templates/dcim/devicerole.html:30 -#: templates/dcim/devicetype.html:33 templates/dcim/frontport.html:58 -#: templates/dcim/interface.html:69 templates/dcim/inventoryitem.html:60 -#: templates/dcim/inventoryitemrole.html:22 templates/dcim/location.html:33 -#: templates/dcim/manufacturer.html:40 templates/dcim/module.html:73 -#: templates/dcim/modulebay.html:42 templates/dcim/moduletype.html:37 -#: templates/dcim/platform.html:33 templates/dcim/powerfeed.html:40 -#: templates/dcim/poweroutlet.html:40 templates/dcim/powerpanel.html:30 -#: templates/dcim/powerport.html:40 templates/dcim/rack.html:53 -#: templates/dcim/rackreservation.html:62 templates/dcim/rackrole.html:26 -#: templates/dcim/racktype.html:24 templates/dcim/rearport.html:54 -#: templates/dcim/region.html:33 templates/dcim/site.html:60 -#: templates/dcim/sitegroup.html:33 templates/dcim/virtualchassis.html:31 -#: templates/extras/configcontext.html:21 -#: templates/extras/configtemplate.html:17 -#: templates/extras/customfield.html:34 -#: templates/extras/dashboard/widget_add.html:14 -#: templates/extras/eventrule.html:21 templates/extras/exporttemplate.html:19 -#: templates/extras/notificationgroup.html:20 -#: templates/extras/savedfilter.html:17 templates/extras/script_list.html:45 -#: templates/extras/tag.html:20 templates/extras/webhook.html:17 -#: templates/generic/bulk_import.html:120 templates/ipam/aggregate.html:43 -#: templates/ipam/asn.html:42 templates/ipam/asnrange.html:38 -#: templates/ipam/fhrpgroup.html:34 templates/ipam/ipaddress.html:55 -#: templates/ipam/iprange.html:67 templates/ipam/prefix.html:81 -#: templates/ipam/rir.html:26 templates/ipam/role.html:26 -#: templates/ipam/routetarget.html:21 templates/ipam/service.html:50 -#: templates/ipam/servicetemplate.html:27 templates/ipam/vlan.html:62 -#: templates/ipam/vlangroup.html:34 templates/ipam/vrf.html:33 -#: templates/tenancy/contact.html:67 templates/tenancy/contactgroup.html:25 -#: templates/tenancy/contactrole.html:22 templates/tenancy/tenant.html:24 -#: templates/tenancy/tenantgroup.html:33 templates/users/group.html:21 -#: templates/users/objectpermission.html:21 templates/users/token.html:27 -#: templates/virtualization/cluster.html:25 -#: templates/virtualization/clustergroup.html:26 -#: templates/virtualization/clustertype.html:26 -#: templates/virtualization/virtualdisk.html:39 -#: templates/virtualization/virtualmachine.html:31 -#: templates/virtualization/vminterface.html:51 -#: templates/vpn/ikepolicy.html:17 templates/vpn/ikeproposal.html:17 -#: templates/vpn/ipsecpolicy.html:17 templates/vpn/ipsecprofile.html:17 -#: templates/vpn/ipsecprofile.html:40 templates/vpn/ipsecprofile.html:73 -#: templates/vpn/ipsecproposal.html:17 templates/vpn/l2vpn.html:26 -#: templates/vpn/tunnel.html:33 templates/vpn/tunnelgroup.html:30 -#: templates/wireless/wirelesslan.html:26 -#: templates/wireless/wirelesslangroup.html:33 -#: templates/wireless/wirelesslink.html:34 tenancy/forms/bulk_edit.py:32 -#: tenancy/forms/bulk_edit.py:80 tenancy/forms/bulk_edit.py:122 -#: users/forms/bulk_edit.py:64 users/forms/bulk_edit.py:82 -#: users/forms/bulk_edit.py:112 virtualization/forms/bulk_edit.py:32 -#: virtualization/forms/bulk_edit.py:46 virtualization/forms/bulk_edit.py:100 -#: virtualization/forms/bulk_edit.py:177 virtualization/forms/bulk_edit.py:228 -#: virtualization/forms/bulk_edit.py:337 vpn/forms/bulk_edit.py:28 -#: vpn/forms/bulk_edit.py:64 vpn/forms/bulk_edit.py:121 -#: vpn/forms/bulk_edit.py:155 vpn/forms/bulk_edit.py:190 -#: vpn/forms/bulk_edit.py:215 vpn/forms/bulk_edit.py:247 -#: vpn/forms/bulk_edit.py:274 wireless/forms/bulk_edit.py:29 -#: wireless/forms/bulk_edit.py:82 wireless/forms/bulk_edit.py:140 +#: 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/templates/account/token.html:35 +#: netbox/templates/circuits/circuit.html:59 +#: netbox/templates/circuits/circuitgroup.html:32 +#: netbox/templates/circuits/circuittype.html:26 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:88 +#: netbox/templates/circuits/provider.html:33 +#: netbox/templates/circuits/providernetwork.html:32 +#: netbox/templates/core/datasource.html:54 +#: netbox/templates/core/plugin.html:80 netbox/templates/dcim/cable.html:36 +#: netbox/templates/dcim/consoleport.html:44 +#: netbox/templates/dcim/consoleserverport.html:44 +#: netbox/templates/dcim/device.html:94 +#: netbox/templates/dcim/devicebay.html:32 +#: netbox/templates/dcim/devicerole.html:30 +#: netbox/templates/dcim/devicetype.html:33 +#: netbox/templates/dcim/frontport.html:58 +#: netbox/templates/dcim/interface.html:69 +#: netbox/templates/dcim/inventoryitem.html:60 +#: netbox/templates/dcim/inventoryitemrole.html:22 +#: netbox/templates/dcim/location.html:33 +#: netbox/templates/dcim/manufacturer.html:40 +#: netbox/templates/dcim/module.html:73 +#: netbox/templates/dcim/modulebay.html:42 +#: netbox/templates/dcim/moduletype.html:37 +#: netbox/templates/dcim/platform.html:33 +#: netbox/templates/dcim/powerfeed.html:40 +#: netbox/templates/dcim/poweroutlet.html:40 +#: netbox/templates/dcim/powerpanel.html:30 +#: netbox/templates/dcim/powerport.html:40 netbox/templates/dcim/rack.html:53 +#: netbox/templates/dcim/rackreservation.html:62 +#: netbox/templates/dcim/rackrole.html:26 +#: netbox/templates/dcim/racktype.html:24 +#: netbox/templates/dcim/rearport.html:54 netbox/templates/dcim/region.html:33 +#: netbox/templates/dcim/site.html:60 netbox/templates/dcim/sitegroup.html:33 +#: netbox/templates/dcim/virtualchassis.html:31 +#: netbox/templates/extras/configcontext.html:21 +#: netbox/templates/extras/configtemplate.html:17 +#: netbox/templates/extras/customfield.html:34 +#: netbox/templates/extras/dashboard/widget_add.html:14 +#: netbox/templates/extras/eventrule.html:21 +#: netbox/templates/extras/exporttemplate.html:19 +#: netbox/templates/extras/notificationgroup.html:20 +#: netbox/templates/extras/savedfilter.html:17 +#: netbox/templates/extras/script_list.html:46 +#: netbox/templates/extras/tag.html:20 netbox/templates/extras/webhook.html:17 +#: netbox/templates/generic/bulk_import.html:120 +#: netbox/templates/ipam/aggregate.html:43 netbox/templates/ipam/asn.html:42 +#: netbox/templates/ipam/asnrange.html:38 +#: netbox/templates/ipam/fhrpgroup.html:34 +#: netbox/templates/ipam/ipaddress.html:55 +#: netbox/templates/ipam/iprange.html:67 netbox/templates/ipam/prefix.html:81 +#: netbox/templates/ipam/rir.html:26 netbox/templates/ipam/role.html:26 +#: netbox/templates/ipam/routetarget.html:21 +#: netbox/templates/ipam/service.html:50 +#: netbox/templates/ipam/servicetemplate.html:27 +#: netbox/templates/ipam/vlan.html:62 netbox/templates/ipam/vlangroup.html:34 +#: netbox/templates/ipam/vrf.html:33 netbox/templates/tenancy/contact.html:67 +#: netbox/templates/tenancy/contactgroup.html:25 +#: netbox/templates/tenancy/contactrole.html:22 +#: netbox/templates/tenancy/tenant.html:24 +#: netbox/templates/tenancy/tenantgroup.html:33 +#: netbox/templates/users/group.html:21 +#: netbox/templates/users/objectpermission.html:21 +#: netbox/templates/users/token.html:27 +#: netbox/templates/virtualization/cluster.html:25 +#: netbox/templates/virtualization/clustergroup.html:26 +#: netbox/templates/virtualization/clustertype.html:26 +#: netbox/templates/virtualization/virtualdisk.html:39 +#: netbox/templates/virtualization/virtualmachine.html:31 +#: netbox/templates/virtualization/vminterface.html:51 +#: netbox/templates/vpn/ikepolicy.html:17 +#: netbox/templates/vpn/ikeproposal.html:17 +#: netbox/templates/vpn/ipsecpolicy.html:17 +#: netbox/templates/vpn/ipsecprofile.html:17 +#: netbox/templates/vpn/ipsecprofile.html:40 +#: netbox/templates/vpn/ipsecprofile.html:73 +#: netbox/templates/vpn/ipsecproposal.html:17 +#: netbox/templates/vpn/l2vpn.html:26 netbox/templates/vpn/tunnel.html:33 +#: netbox/templates/vpn/tunnelgroup.html:30 +#: netbox/templates/wireless/wirelesslan.html:26 +#: netbox/templates/wireless/wirelesslangroup.html:33 +#: netbox/templates/wireless/wirelesslink.html:34 +#: netbox/tenancy/forms/bulk_edit.py:32 netbox/tenancy/forms/bulk_edit.py:80 +#: netbox/tenancy/forms/bulk_edit.py:122 netbox/users/forms/bulk_edit.py:64 +#: netbox/users/forms/bulk_edit.py:82 netbox/users/forms/bulk_edit.py:112 +#: netbox/virtualization/forms/bulk_edit.py:32 +#: netbox/virtualization/forms/bulk_edit.py:46 +#: netbox/virtualization/forms/bulk_edit.py:100 +#: netbox/virtualization/forms/bulk_edit.py:177 +#: netbox/virtualization/forms/bulk_edit.py:228 +#: netbox/virtualization/forms/bulk_edit.py:337 +#: netbox/vpn/forms/bulk_edit.py:28 netbox/vpn/forms/bulk_edit.py:64 +#: netbox/vpn/forms/bulk_edit.py:121 netbox/vpn/forms/bulk_edit.py:155 +#: netbox/vpn/forms/bulk_edit.py:190 netbox/vpn/forms/bulk_edit.py:215 +#: netbox/vpn/forms/bulk_edit.py:247 netbox/vpn/forms/bulk_edit.py:274 +#: netbox/wireless/forms/bulk_edit.py:29 netbox/wireless/forms/bulk_edit.py:82 +#: netbox/wireless/forms/bulk_edit.py:140 msgid "Description" msgstr "Beskrivelse" -#: circuits/forms/bulk_edit.py:51 circuits/forms/bulk_edit.py:73 -#: circuits/forms/bulk_edit.py:123 circuits/forms/bulk_import.py:36 -#: circuits/forms/bulk_import.py:51 circuits/forms/bulk_import.py:74 -#: circuits/forms/filtersets.py:70 circuits/forms/filtersets.py:88 -#: circuits/forms/filtersets.py:116 circuits/forms/filtersets.py:131 -#: circuits/forms/filtersets.py:199 circuits/forms/filtersets.py:232 -#: circuits/forms/filtersets.py:255 circuits/forms/model_forms.py:47 -#: circuits/forms/model_forms.py:61 circuits/forms/model_forms.py:93 -#: circuits/tables/circuits.py:58 circuits/tables/circuits.py:108 -#: circuits/tables/circuits.py:160 circuits/tables/providers.py:72 -#: circuits/tables/providers.py:103 templates/circuits/circuit.html:18 -#: templates/circuits/circuittermination.html:25 -#: templates/circuits/provider.html:20 -#: templates/circuits/provideraccount.html:20 -#: templates/circuits/providernetwork.html:20 -#: templates/dcim/inc/cable_termination.html:51 +#: netbox/circuits/forms/bulk_edit.py: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/templates/circuits/circuit.html:18 +#: netbox/templates/circuits/circuittermination.html:25 +#: netbox/templates/circuits/provider.html:20 +#: netbox/templates/circuits/provideraccount.html:20 +#: netbox/templates/circuits/providernetwork.html:20 +#: netbox/templates/dcim/inc/cable_termination.html:51 msgid "Provider" msgstr "Leverandør" -#: circuits/forms/bulk_edit.py:80 circuits/forms/filtersets.py:91 -#: templates/circuits/providernetwork.html:28 +#: netbox/circuits/forms/bulk_edit.py:80 +#: netbox/circuits/forms/filtersets.py:91 +#: netbox/templates/circuits/providernetwork.html:28 msgid "Service ID" msgstr "Tjeneste-id" -#: circuits/forms/bulk_edit.py:100 circuits/forms/filtersets.py:107 -#: dcim/forms/bulk_edit.py:206 dcim/forms/bulk_edit.py:604 -#: dcim/forms/bulk_edit.py:804 dcim/forms/bulk_edit.py:1173 -#: dcim/forms/bulk_edit.py:1200 dcim/forms/bulk_edit.py:1678 -#: dcim/forms/filtersets.py:1064 dcim/forms/filtersets.py:1455 -#: dcim/forms/filtersets.py:1479 dcim/tables/devices.py:704 -#: dcim/tables/devices.py:761 dcim/tables/devices.py:1003 -#: dcim/tables/devicetypes.py:249 dcim/tables/devicetypes.py:264 -#: dcim/tables/racks.py:33 extras/forms/bulk_edit.py:270 -#: extras/tables/tables.py:443 templates/circuits/circuittype.html:30 -#: templates/dcim/cable.html:40 templates/dcim/devicerole.html:34 -#: templates/dcim/frontport.html:40 templates/dcim/inventoryitemrole.html:26 -#: templates/dcim/rackrole.html:30 templates/dcim/rearport.html:40 -#: templates/extras/tag.html:26 +#: netbox/circuits/forms/bulk_edit.py: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/templates/circuits/circuittype.html:30 +#: netbox/templates/dcim/cable.html:40 +#: netbox/templates/dcim/devicerole.html:34 +#: netbox/templates/dcim/frontport.html:40 +#: netbox/templates/dcim/inventoryitemrole.html:26 +#: netbox/templates/dcim/rackrole.html:30 +#: netbox/templates/dcim/rearport.html:40 netbox/templates/extras/tag.html:26 msgid "Color" msgstr "Farve" -#: circuits/forms/bulk_edit.py:118 circuits/forms/bulk_import.py:87 -#: circuits/forms/filtersets.py:126 core/forms/bulk_edit.py:18 -#: core/forms/filtersets.py:33 core/tables/change_logging.py:32 -#: core/tables/data.py:20 core/tables/jobs.py:18 dcim/forms/bulk_edit.py:782 -#: dcim/forms/bulk_edit.py:921 dcim/forms/bulk_edit.py:989 -#: dcim/forms/bulk_edit.py:1008 dcim/forms/bulk_edit.py:1031 -#: dcim/forms/bulk_edit.py:1073 dcim/forms/bulk_edit.py:1117 -#: dcim/forms/bulk_edit.py:1168 dcim/forms/bulk_edit.py:1195 -#: dcim/forms/bulk_import.py:188 dcim/forms/bulk_import.py:260 -#: dcim/forms/bulk_import.py:708 dcim/forms/bulk_import.py:734 -#: dcim/forms/bulk_import.py:760 dcim/forms/bulk_import.py:780 -#: dcim/forms/bulk_import.py:863 dcim/forms/bulk_import.py:957 -#: dcim/forms/bulk_import.py:999 dcim/forms/bulk_import.py:1213 -#: dcim/forms/bulk_import.py:1376 dcim/forms/filtersets.py:955 -#: dcim/forms/filtersets.py:1054 dcim/forms/filtersets.py:1175 -#: dcim/forms/filtersets.py:1247 dcim/forms/filtersets.py:1272 -#: dcim/forms/filtersets.py:1296 dcim/forms/filtersets.py:1316 -#: dcim/forms/filtersets.py:1353 dcim/forms/filtersets.py:1450 -#: dcim/forms/filtersets.py:1474 dcim/forms/model_forms.py:703 -#: dcim/forms/model_forms.py:709 dcim/forms/object_import.py:84 -#: dcim/forms/object_import.py:113 dcim/forms/object_import.py:145 -#: dcim/tables/devices.py:178 dcim/tables/devices.py:814 -#: dcim/tables/power.py:77 dcim/tables/racks.py:138 -#: extras/forms/bulk_import.py:42 extras/tables/tables.py:405 -#: extras/tables/tables.py:465 netbox/tables/tables.py:240 -#: templates/circuits/circuit.html:30 templates/core/datasource.html:38 -#: templates/dcim/cable.html:15 templates/dcim/consoleport.html:36 -#: templates/dcim/consoleserverport.html:36 templates/dcim/frontport.html:36 -#: templates/dcim/interface.html:46 templates/dcim/interface.html:169 -#: templates/dcim/interface.html:311 templates/dcim/powerfeed.html:32 -#: templates/dcim/poweroutlet.html:36 templates/dcim/powerport.html:36 -#: templates/dcim/rearport.html:36 templates/extras/eventrule.html:74 -#: templates/virtualization/cluster.html:17 templates/vpn/l2vpn.html:22 -#: templates/wireless/inc/authentication_attrs.html:8 -#: templates/wireless/inc/wirelesslink_interface.html:14 -#: virtualization/forms/bulk_edit.py:60 virtualization/forms/bulk_import.py:41 -#: virtualization/forms/filtersets.py:54 -#: virtualization/forms/model_forms.py:62 virtualization/tables/clusters.py:66 -#: vpn/forms/bulk_edit.py:264 vpn/forms/bulk_import.py:264 -#: vpn/forms/filtersets.py:217 vpn/forms/model_forms.py:84 -#: vpn/forms/model_forms.py:119 vpn/forms/model_forms.py:231 +#: netbox/circuits/forms/bulk_edit.py: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/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/core/datasource.html:38 +#: netbox/templates/dcim/cable.html:15 +#: netbox/templates/dcim/consoleport.html:36 +#: netbox/templates/dcim/consoleserverport.html:36 +#: netbox/templates/dcim/frontport.html:36 +#: netbox/templates/dcim/interface.html:46 +#: netbox/templates/dcim/interface.html:169 +#: netbox/templates/dcim/interface.html:311 +#: netbox/templates/dcim/powerfeed.html:32 +#: netbox/templates/dcim/poweroutlet.html:36 +#: netbox/templates/dcim/powerport.html:36 +#: netbox/templates/dcim/rearport.html:36 +#: netbox/templates/extras/eventrule.html:74 +#: netbox/templates/virtualization/cluster.html:17 +#: netbox/templates/vpn/l2vpn.html:22 +#: netbox/templates/wireless/inc/authentication_attrs.html:8 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:14 +#: netbox/virtualization/forms/bulk_edit.py:60 +#: netbox/virtualization/forms/bulk_import.py:41 +#: netbox/virtualization/forms/filtersets.py:54 +#: netbox/virtualization/forms/model_forms.py:62 +#: netbox/virtualization/tables/clusters.py:66 +#: netbox/vpn/forms/bulk_edit.py:264 netbox/vpn/forms/bulk_import.py:264 +#: netbox/vpn/forms/filtersets.py:217 netbox/vpn/forms/model_forms.py:84 +#: netbox/vpn/forms/model_forms.py:119 netbox/vpn/forms/model_forms.py:231 msgid "Type" msgstr "Type" -#: circuits/forms/bulk_edit.py:128 circuits/forms/bulk_import.py:80 -#: circuits/forms/filtersets.py:139 circuits/forms/model_forms.py:98 +#: 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 msgid "Provider account" msgstr "Leverandørkonto" -#: circuits/forms/bulk_edit.py:136 circuits/forms/bulk_import.py:93 -#: circuits/forms/filtersets.py:150 core/forms/filtersets.py:38 -#: core/forms/filtersets.py:79 core/tables/data.py:23 core/tables/jobs.py:26 -#: core/tables/tasks.py:88 dcim/forms/bulk_edit.py:106 -#: dcim/forms/bulk_edit.py:181 dcim/forms/bulk_edit.py:351 -#: dcim/forms/bulk_edit.py:700 dcim/forms/bulk_edit.py:756 -#: dcim/forms/bulk_edit.py:788 dcim/forms/bulk_edit.py:915 -#: dcim/forms/bulk_edit.py:1701 dcim/forms/bulk_import.py:88 -#: dcim/forms/bulk_import.py:147 dcim/forms/bulk_import.py:248 -#: dcim/forms/bulk_import.py:505 dcim/forms/bulk_import.py:659 -#: dcim/forms/bulk_import.py:1207 dcim/forms/bulk_import.py:1371 -#: dcim/forms/bulk_import.py:1435 dcim/forms/filtersets.py:178 -#: dcim/forms/filtersets.py:237 dcim/forms/filtersets.py:359 -#: dcim/forms/filtersets.py:799 dcim/forms/filtersets.py:924 -#: dcim/forms/filtersets.py:958 dcim/forms/filtersets.py:1059 -#: dcim/forms/filtersets.py:1170 dcim/tables/devices.py:140 -#: dcim/tables/devices.py:817 dcim/tables/devices.py:1063 -#: dcim/tables/modules.py:69 dcim/tables/power.py:74 dcim/tables/racks.py:126 -#: dcim/tables/sites.py:82 dcim/tables/sites.py:138 -#: ipam/forms/bulk_edit.py:256 ipam/forms/bulk_edit.py:306 -#: ipam/forms/bulk_edit.py:354 ipam/forms/bulk_edit.py:506 -#: ipam/forms/bulk_import.py:192 ipam/forms/bulk_import.py:257 -#: ipam/forms/bulk_import.py:293 ipam/forms/bulk_import.py:450 -#: ipam/forms/filtersets.py:210 ipam/forms/filtersets.py:281 -#: ipam/forms/filtersets.py:355 ipam/forms/filtersets.py:501 -#: ipam/forms/model_forms.py:468 ipam/tables/ip.py:237 ipam/tables/ip.py:312 -#: ipam/tables/ip.py:363 ipam/tables/ip.py:426 ipam/tables/ip.py:453 -#: ipam/tables/vlans.py:126 ipam/tables/vlans.py:232 -#: templates/circuits/circuit.html:34 templates/core/datasource.html:46 -#: templates/core/job.html:48 templates/core/rq_task.html:81 -#: templates/core/system.html:18 templates/dcim/cable.html:19 -#: templates/dcim/device.html:178 templates/dcim/location.html:45 -#: templates/dcim/module.html:69 templates/dcim/powerfeed.html:36 -#: templates/dcim/rack.html:41 templates/dcim/site.html:43 -#: templates/extras/script_list.html:47 templates/ipam/ipaddress.html:37 -#: templates/ipam/iprange.html:54 templates/ipam/prefix.html:73 -#: templates/ipam/vlan.html:48 templates/virtualization/cluster.html:21 -#: templates/virtualization/virtualmachine.html:19 -#: templates/vpn/tunnel.html:25 templates/wireless/wirelesslan.html:22 -#: templates/wireless/wirelesslink.html:17 users/forms/filtersets.py:32 -#: users/forms/model_forms.py:194 virtualization/forms/bulk_edit.py:70 -#: virtualization/forms/bulk_edit.py:118 -#: virtualization/forms/bulk_import.py:54 -#: virtualization/forms/bulk_import.py:80 -#: virtualization/forms/filtersets.py:62 -#: virtualization/forms/filtersets.py:160 virtualization/tables/clusters.py:74 -#: virtualization/tables/virtualmachines.py:60 vpn/forms/bulk_edit.py:39 -#: vpn/forms/bulk_import.py:37 vpn/forms/filtersets.py:47 -#: vpn/tables/tunnels.py:48 wireless/forms/bulk_edit.py:43 -#: wireless/forms/bulk_edit.py:105 wireless/forms/bulk_import.py:43 -#: wireless/forms/bulk_import.py:84 wireless/forms/filtersets.py:49 -#: wireless/forms/filtersets.py:83 wireless/tables/wirelesslan.py:52 -#: wireless/tables/wirelesslink.py:20 +#: 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/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:69 +#: 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/templates/circuits/circuit.html:34 +#: 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/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/vlan.html:48 +#: netbox/templates/virtualization/cluster.html:21 +#: netbox/templates/virtualization/virtualmachine.html:19 +#: netbox/templates/vpn/tunnel.html:25 +#: netbox/templates/wireless/wirelesslan.html:22 +#: netbox/templates/wireless/wirelesslink.html:17 +#: netbox/users/forms/filtersets.py: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/tables/clusters.py:74 +#: netbox/virtualization/tables/virtualmachines.py:60 +#: netbox/vpn/forms/bulk_edit.py:39 netbox/vpn/forms/bulk_import.py:37 +#: netbox/vpn/forms/filtersets.py:47 netbox/vpn/tables/tunnels.py:48 +#: netbox/wireless/forms/bulk_edit.py:43 +#: netbox/wireless/forms/bulk_edit.py:105 +#: netbox/wireless/forms/bulk_import.py:43 +#: netbox/wireless/forms/bulk_import.py:84 +#: netbox/wireless/forms/filtersets.py:49 +#: netbox/wireless/forms/filtersets.py:83 +#: netbox/wireless/tables/wirelesslan.py:52 +#: netbox/wireless/tables/wirelesslink.py:20 msgid "Status" msgstr "Status" -#: circuits/forms/bulk_edit.py:142 circuits/forms/bulk_edit.py:233 -#: circuits/forms/bulk_import.py:98 circuits/forms/bulk_import.py:158 -#: circuits/forms/filtersets.py:119 circuits/forms/filtersets.py:241 -#: dcim/forms/bulk_edit.py:122 dcim/forms/bulk_edit.py:187 -#: dcim/forms/bulk_edit.py:346 dcim/forms/bulk_edit.py:461 -#: dcim/forms/bulk_edit.py:690 dcim/forms/bulk_edit.py:794 -#: dcim/forms/bulk_edit.py:1706 dcim/forms/bulk_import.py:107 -#: dcim/forms/bulk_import.py:152 dcim/forms/bulk_import.py:241 -#: dcim/forms/bulk_import.py:334 dcim/forms/bulk_import.py:479 -#: dcim/forms/bulk_import.py:1219 dcim/forms/bulk_import.py:1428 -#: dcim/forms/filtersets.py:173 dcim/forms/filtersets.py:205 -#: dcim/forms/filtersets.py:323 dcim/forms/filtersets.py:399 -#: dcim/forms/filtersets.py:420 dcim/forms/filtersets.py:722 -#: dcim/forms/filtersets.py:916 dcim/forms/filtersets.py:978 -#: dcim/forms/filtersets.py:1008 dcim/forms/filtersets.py:1130 -#: dcim/tables/power.py:88 extras/filtersets.py:612 -#: extras/forms/filtersets.py:323 extras/forms/filtersets.py:396 -#: ipam/forms/bulk_edit.py:43 ipam/forms/bulk_edit.py:68 -#: ipam/forms/bulk_edit.py:112 ipam/forms/bulk_edit.py:141 -#: ipam/forms/bulk_edit.py:166 ipam/forms/bulk_edit.py:251 -#: ipam/forms/bulk_edit.py:301 ipam/forms/bulk_edit.py:349 -#: ipam/forms/bulk_edit.py:501 ipam/forms/bulk_import.py:38 -#: ipam/forms/bulk_import.py:67 ipam/forms/bulk_import.py:95 -#: ipam/forms/bulk_import.py:115 ipam/forms/bulk_import.py:135 -#: ipam/forms/bulk_import.py:164 ipam/forms/bulk_import.py:250 -#: ipam/forms/bulk_import.py:286 ipam/forms/bulk_import.py:443 -#: ipam/forms/filtersets.py:48 ipam/forms/filtersets.py:68 -#: ipam/forms/filtersets.py:100 ipam/forms/filtersets.py:120 -#: ipam/forms/filtersets.py:143 ipam/forms/filtersets.py:174 -#: ipam/forms/filtersets.py:267 ipam/forms/filtersets.py:310 -#: ipam/forms/filtersets.py:469 ipam/tables/ip.py:456 ipam/tables/vlans.py:229 -#: templates/circuits/circuit.html:38 templates/circuits/circuitgroup.html:36 -#: templates/dcim/cable.html:23 templates/dcim/device.html:79 -#: templates/dcim/location.html:49 templates/dcim/powerfeed.html:44 -#: templates/dcim/rack.html:32 templates/dcim/rackreservation.html:49 -#: templates/dcim/site.html:47 templates/dcim/virtualdevicecontext.html:52 -#: templates/ipam/aggregate.html:30 templates/ipam/asn.html:33 -#: templates/ipam/asnrange.html:29 templates/ipam/ipaddress.html:28 -#: templates/ipam/iprange.html:58 templates/ipam/prefix.html:29 -#: templates/ipam/routetarget.html:17 templates/ipam/vlan.html:39 -#: templates/ipam/vrf.html:20 templates/tenancy/tenant.html:17 -#: templates/virtualization/cluster.html:33 -#: templates/virtualization/virtualmachine.html:39 templates/vpn/l2vpn.html:30 -#: templates/vpn/tunnel.html:49 templates/wireless/wirelesslan.html:34 -#: templates/wireless/wirelesslink.html:25 tenancy/forms/forms.py:25 -#: tenancy/forms/forms.py:48 tenancy/forms/model_forms.py:52 -#: tenancy/tables/columns.py:64 virtualization/forms/bulk_edit.py:76 -#: virtualization/forms/bulk_edit.py:155 -#: virtualization/forms/bulk_import.py:66 -#: virtualization/forms/bulk_import.py:115 -#: virtualization/forms/filtersets.py:47 -#: virtualization/forms/filtersets.py:105 vpn/forms/bulk_edit.py:59 -#: vpn/forms/bulk_edit.py:269 vpn/forms/bulk_import.py:59 -#: vpn/forms/bulk_import.py:258 vpn/forms/filtersets.py:214 -#: wireless/forms/bulk_edit.py:63 wireless/forms/bulk_edit.py:110 -#: wireless/forms/bulk_import.py:55 wireless/forms/bulk_import.py:97 -#: wireless/forms/filtersets.py:35 wireless/forms/filtersets.py:75 +#: netbox/circuits/forms/bulk_edit.py: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/templates/circuits/circuitgroup.html:36 +#: 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 +#: netbox/templates/dcim/rackreservation.html:49 +#: netbox/templates/dcim/site.html:47 +#: netbox/templates/dcim/virtualdevicecontext.html:52 +#: netbox/templates/ipam/aggregate.html:30 netbox/templates/ipam/asn.html:33 +#: netbox/templates/ipam/asnrange.html:29 +#: netbox/templates/ipam/ipaddress.html:28 +#: netbox/templates/ipam/iprange.html:58 netbox/templates/ipam/prefix.html:29 +#: netbox/templates/ipam/routetarget.html:17 +#: netbox/templates/ipam/vlan.html:39 netbox/templates/ipam/vrf.html:20 +#: netbox/templates/tenancy/tenant.html:17 +#: netbox/templates/virtualization/cluster.html:33 +#: netbox/templates/virtualization/virtualmachine.html:39 +#: netbox/templates/vpn/l2vpn.html:30 netbox/templates/vpn/tunnel.html:49 +#: netbox/templates/wireless/wirelesslan.html:34 +#: netbox/templates/wireless/wirelesslink.html:25 +#: netbox/tenancy/forms/forms.py:25 netbox/tenancy/forms/forms.py:48 +#: netbox/tenancy/forms/model_forms.py:52 netbox/tenancy/tables/columns.py:64 +#: netbox/virtualization/forms/bulk_edit.py:76 +#: netbox/virtualization/forms/bulk_edit.py:155 +#: netbox/virtualization/forms/bulk_import.py:66 +#: netbox/virtualization/forms/bulk_import.py:115 +#: netbox/virtualization/forms/filtersets.py:47 +#: netbox/virtualization/forms/filtersets.py:105 +#: netbox/vpn/forms/bulk_edit.py:59 netbox/vpn/forms/bulk_edit.py:269 +#: netbox/vpn/forms/bulk_import.py:59 netbox/vpn/forms/bulk_import.py:258 +#: netbox/vpn/forms/filtersets.py:214 netbox/wireless/forms/bulk_edit.py:63 +#: netbox/wireless/forms/bulk_edit.py:110 +#: netbox/wireless/forms/bulk_import.py:55 +#: netbox/wireless/forms/bulk_import.py:97 +#: netbox/wireless/forms/filtersets.py:35 +#: netbox/wireless/forms/filtersets.py:75 msgid "Tenant" msgstr "Lejer" -#: circuits/forms/bulk_edit.py:147 circuits/forms/filtersets.py:174 +#: netbox/circuits/forms/bulk_edit.py:147 +#: netbox/circuits/forms/filtersets.py:174 msgid "Install date" msgstr "Installationsdato" -#: circuits/forms/bulk_edit.py:152 circuits/forms/filtersets.py:179 +#: netbox/circuits/forms/bulk_edit.py:152 +#: netbox/circuits/forms/filtersets.py:179 msgid "Termination date" msgstr "Opsigelsesdato" -#: circuits/forms/bulk_edit.py:158 circuits/forms/filtersets.py:186 +#: netbox/circuits/forms/bulk_edit.py:158 +#: netbox/circuits/forms/filtersets.py:186 msgid "Commit rate (Kbps)" msgstr "Forpligtelseshastighed (Kbps)" -#: circuits/forms/bulk_edit.py:173 circuits/forms/model_forms.py:112 +#: netbox/circuits/forms/bulk_edit.py:173 +#: netbox/circuits/forms/model_forms.py:112 msgid "Service Parameters" msgstr "Serviceparametre" -#: circuits/forms/bulk_edit.py:174 circuits/forms/model_forms.py:113 -#: circuits/forms/model_forms.py:183 dcim/forms/model_forms.py:139 -#: dcim/forms/model_forms.py:181 dcim/forms/model_forms.py:266 -#: dcim/forms/model_forms.py:323 dcim/forms/model_forms.py:768 -#: dcim/forms/model_forms.py:1692 ipam/forms/model_forms.py:64 -#: ipam/forms/model_forms.py:81 ipam/forms/model_forms.py:115 -#: ipam/forms/model_forms.py:136 ipam/forms/model_forms.py:160 -#: ipam/forms/model_forms.py:232 ipam/forms/model_forms.py:261 -#: ipam/forms/model_forms.py:316 netbox/navigation/menu.py:24 -#: templates/dcim/device_edit.html:85 templates/dcim/htmx/cable_edit.html:72 -#: templates/ipam/ipaddress_bulk_add.html:27 templates/ipam/vlan_edit.html:22 -#: virtualization/forms/model_forms.py:80 -#: virtualization/forms/model_forms.py:222 vpn/forms/bulk_edit.py:78 -#: vpn/forms/filtersets.py:44 vpn/forms/model_forms.py:62 -#: vpn/forms/model_forms.py:147 vpn/forms/model_forms.py:411 -#: wireless/forms/model_forms.py:54 wireless/forms/model_forms.py:170 +#: 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/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/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 msgid "Tenancy" msgstr "Forpagtning" -#: circuits/forms/bulk_edit.py:193 circuits/forms/bulk_edit.py:217 -#: circuits/forms/model_forms.py:155 circuits/tables/circuits.py:117 -#: templates/circuits/inc/circuit_termination_fields.html:62 -#: templates/circuits/providernetwork.html:17 +#: 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 "Leverandørnetværk" -#: circuits/forms/bulk_edit.py:199 +#: netbox/circuits/forms/bulk_edit.py:199 msgid "Port speed (Kbps)" msgstr "Porthastighed (Kbps)" -#: circuits/forms/bulk_edit.py:203 +#: netbox/circuits/forms/bulk_edit.py:203 msgid "Upstream speed (Kbps)" msgstr "Opstrøms hastighed (Kbps)" -#: circuits/forms/bulk_edit.py:206 dcim/forms/bulk_edit.py:951 -#: dcim/forms/bulk_edit.py:1315 dcim/forms/bulk_edit.py:1332 -#: dcim/forms/bulk_edit.py:1349 dcim/forms/bulk_edit.py:1367 -#: dcim/forms/bulk_edit.py:1455 dcim/forms/bulk_edit.py:1594 -#: dcim/forms/bulk_edit.py:1611 +#: 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 msgid "Mark connected" msgstr "Marker tilsluttet" -#: circuits/forms/bulk_edit.py:219 circuits/forms/model_forms.py:157 -#: templates/circuits/inc/circuit_termination_fields.html:54 -#: templates/dcim/frontport.html:121 templates/dcim/interface.html:193 -#: templates/dcim/rearport.html:111 +#: netbox/circuits/forms/bulk_edit.py:219 +#: netbox/circuits/forms/model_forms.py:157 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:54 +#: netbox/templates/dcim/frontport.html:121 +#: netbox/templates/dcim/interface.html:193 +#: netbox/templates/dcim/rearport.html:111 msgid "Circuit Termination" msgstr "Kredsløbsafslutning" -#: circuits/forms/bulk_edit.py:221 circuits/forms/model_forms.py:159 +#: netbox/circuits/forms/bulk_edit.py:221 +#: netbox/circuits/forms/model_forms.py:159 msgid "Termination Details" msgstr "Oplysninger om opsigelse" -#: circuits/forms/bulk_edit.py:251 circuits/forms/filtersets.py:268 -#: circuits/tables/circuits.py:168 dcim/forms/model_forms.py:551 -#: templates/circuits/circuitgroupassignment.html:30 -#: templates/dcim/device.html:133 templates/dcim/virtualchassis.html:68 -#: templates/dcim/virtualchassis_edit.html:56 -#: templates/ipam/inc/panels/fhrp_groups.html:26 -#: tenancy/forms/bulk_edit.py:147 tenancy/forms/filtersets.py:110 +#: netbox/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/templates/dcim/device.html:133 +#: netbox/templates/dcim/virtualchassis.html:68 +#: netbox/templates/dcim/virtualchassis_edit.html:56 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:26 +#: netbox/tenancy/forms/bulk_edit.py:147 +#: netbox/tenancy/forms/filtersets.py:110 msgid "Priority" msgstr "Prioritet" -#: circuits/forms/bulk_import.py:39 circuits/forms/bulk_import.py:54 -#: circuits/forms/bulk_import.py:77 +#: 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 "Tildelt leverandør" -#: circuits/forms/bulk_import.py:83 +#: netbox/circuits/forms/bulk_import.py:83 msgid "Assigned provider account" msgstr "Tildelt leverandørkonto" -#: circuits/forms/bulk_import.py:90 +#: netbox/circuits/forms/bulk_import.py:90 msgid "Type of circuit" msgstr "Kredsløbstype" -#: circuits/forms/bulk_import.py:95 dcim/forms/bulk_import.py:90 -#: dcim/forms/bulk_import.py:149 dcim/forms/bulk_import.py:250 -#: dcim/forms/bulk_import.py:507 dcim/forms/bulk_import.py:661 -#: dcim/forms/bulk_import.py:1373 ipam/forms/bulk_import.py:194 -#: ipam/forms/bulk_import.py:259 ipam/forms/bulk_import.py:295 -#: ipam/forms/bulk_import.py:452 virtualization/forms/bulk_import.py:56 -#: virtualization/forms/bulk_import.py:82 vpn/forms/bulk_import.py:39 -#: wireless/forms/bulk_import.py:45 +#: netbox/circuits/forms/bulk_import.py: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 "Driftsstatus" -#: circuits/forms/bulk_import.py:102 circuits/forms/bulk_import.py:162 -#: dcim/forms/bulk_import.py:111 dcim/forms/bulk_import.py:156 -#: dcim/forms/bulk_import.py:338 dcim/forms/bulk_import.py:483 -#: dcim/forms/bulk_import.py:1223 dcim/forms/bulk_import.py:1368 -#: dcim/forms/bulk_import.py:1432 ipam/forms/bulk_import.py:42 -#: ipam/forms/bulk_import.py:71 ipam/forms/bulk_import.py:99 -#: ipam/forms/bulk_import.py:119 ipam/forms/bulk_import.py:139 -#: ipam/forms/bulk_import.py:168 ipam/forms/bulk_import.py:254 -#: ipam/forms/bulk_import.py:290 ipam/forms/bulk_import.py:447 -#: virtualization/forms/bulk_import.py:70 -#: virtualization/forms/bulk_import.py:119 vpn/forms/bulk_import.py:63 -#: wireless/forms/bulk_import.py:59 wireless/forms/bulk_import.py:101 +#: netbox/circuits/forms/bulk_import.py: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 "Tildelt lejer" -#: circuits/forms/bulk_import.py:120 -#: templates/circuits/inc/circuit_termination.html:6 -#: templates/circuits/inc/circuit_termination_fields.html:15 -#: templates/dcim/cable.html:68 templates/dcim/cable.html:72 -#: vpn/forms/bulk_import.py:100 vpn/forms/filtersets.py:77 +#: netbox/circuits/forms/bulk_import.py: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 "Opsigelse" -#: circuits/forms/bulk_import.py:130 circuits/forms/filtersets.py:147 -#: circuits/forms/filtersets.py:227 circuits/forms/model_forms.py:144 +#: 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 msgid "Provider network" msgstr "Leverandørnetværk" -#: circuits/forms/filtersets.py:30 circuits/forms/filtersets.py:118 -#: circuits/forms/filtersets.py:200 dcim/forms/bulk_edit.py:338 -#: dcim/forms/bulk_edit.py:441 dcim/forms/bulk_edit.py:682 -#: dcim/forms/bulk_edit.py:729 dcim/forms/bulk_edit.py:882 -#: dcim/forms/bulk_import.py:235 dcim/forms/bulk_import.py:315 -#: dcim/forms/bulk_import.py:546 dcim/forms/bulk_import.py:1317 -#: dcim/forms/bulk_import.py:1351 dcim/forms/filtersets.py:95 -#: dcim/forms/filtersets.py:322 dcim/forms/filtersets.py:356 -#: dcim/forms/filtersets.py:396 dcim/forms/filtersets.py:447 -#: dcim/forms/filtersets.py:719 dcim/forms/filtersets.py:762 -#: dcim/forms/filtersets.py:977 dcim/forms/filtersets.py:1006 -#: dcim/forms/filtersets.py:1026 dcim/forms/filtersets.py:1090 -#: dcim/forms/filtersets.py:1120 dcim/forms/filtersets.py:1129 -#: dcim/forms/filtersets.py:1240 dcim/forms/filtersets.py:1264 -#: dcim/forms/filtersets.py:1289 dcim/forms/filtersets.py:1308 -#: dcim/forms/filtersets.py:1331 dcim/forms/filtersets.py:1442 -#: dcim/forms/filtersets.py:1466 dcim/forms/filtersets.py:1490 -#: dcim/forms/filtersets.py:1508 dcim/forms/filtersets.py:1525 -#: dcim/forms/model_forms.py:180 dcim/forms/model_forms.py:243 -#: dcim/forms/model_forms.py:468 dcim/forms/model_forms.py:728 -#: dcim/tables/devices.py:157 dcim/tables/power.py:30 dcim/tables/racks.py:118 -#: dcim/tables/racks.py:212 extras/filtersets.py:536 -#: extras/forms/filtersets.py:320 ipam/forms/filtersets.py:173 -#: ipam/forms/filtersets.py:414 ipam/forms/filtersets.py:437 -#: ipam/forms/filtersets.py:467 templates/dcim/device.html:26 -#: templates/dcim/device_edit.html:30 -#: templates/dcim/inc/cable_termination.html:12 -#: templates/dcim/location.html:26 templates/dcim/powerpanel.html:26 -#: templates/dcim/rack.html:24 templates/dcim/rackreservation.html:32 -#: virtualization/forms/filtersets.py:46 -#: virtualization/forms/filtersets.py:100 wireless/forms/model_forms.py:87 -#: wireless/forms/model_forms.py:129 +#: netbox/circuits/forms/filtersets.py: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/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 msgid "Location" msgstr "Beliggenhed" -#: circuits/forms/filtersets.py:32 circuits/forms/filtersets.py:120 -#: dcim/forms/filtersets.py:144 dcim/forms/filtersets.py:158 -#: dcim/forms/filtersets.py:174 dcim/forms/filtersets.py:206 -#: dcim/forms/filtersets.py:328 dcim/forms/filtersets.py:400 -#: dcim/forms/filtersets.py:471 dcim/forms/filtersets.py:723 -#: dcim/forms/filtersets.py:1091 netbox/navigation/menu.py:31 -#: netbox/navigation/menu.py:33 tenancy/forms/filtersets.py:42 -#: tenancy/tables/columns.py:70 tenancy/tables/contacts.py:25 -#: tenancy/views.py:19 virtualization/forms/filtersets.py:37 -#: virtualization/forms/filtersets.py:48 -#: virtualization/forms/filtersets.py:106 +#: netbox/circuits/forms/filtersets.py: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/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/tables/contacts.py:25 netbox/tenancy/views.py:19 +#: netbox/virtualization/forms/filtersets.py:37 +#: netbox/virtualization/forms/filtersets.py:48 +#: netbox/virtualization/forms/filtersets.py:106 msgid "Contacts" msgstr "Kontakter" -#: circuits/forms/filtersets.py:37 circuits/forms/filtersets.py:157 -#: dcim/forms/bulk_edit.py:112 dcim/forms/bulk_edit.py:313 -#: dcim/forms/bulk_edit.py:857 dcim/forms/bulk_import.py:93 -#: dcim/forms/filtersets.py:73 dcim/forms/filtersets.py:185 -#: dcim/forms/filtersets.py:211 dcim/forms/filtersets.py:334 -#: dcim/forms/filtersets.py:425 dcim/forms/filtersets.py:739 -#: dcim/forms/filtersets.py:983 dcim/forms/filtersets.py:1013 -#: dcim/forms/filtersets.py:1097 dcim/forms/filtersets.py:1136 -#: dcim/forms/filtersets.py:1576 dcim/forms/filtersets.py:1600 -#: dcim/forms/filtersets.py:1624 dcim/forms/model_forms.py:112 -#: dcim/forms/object_create.py:375 dcim/tables/devices.py:143 -#: dcim/tables/sites.py:85 extras/filtersets.py:503 -#: ipam/forms/bulk_edit.py:208 ipam/forms/bulk_edit.py:474 -#: ipam/forms/filtersets.py:217 ipam/forms/filtersets.py:422 -#: ipam/forms/filtersets.py:475 templates/dcim/device.html:18 -#: templates/dcim/rack.html:16 templates/dcim/rackreservation.html:22 -#: templates/dcim/region.html:26 templates/dcim/site.html:31 -#: templates/ipam/prefix.html:49 templates/ipam/vlan.html:16 -#: virtualization/forms/bulk_edit.py:81 virtualization/forms/filtersets.py:59 -#: virtualization/forms/filtersets.py:133 -#: virtualization/forms/model_forms.py:92 vpn/forms/filtersets.py:257 +#: netbox/circuits/forms/filtersets.py: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/templates/dcim/rackreservation.html:22 +#: netbox/templates/dcim/region.html:26 netbox/templates/dcim/site.html:31 +#: netbox/templates/ipam/prefix.html:49 netbox/templates/ipam/vlan.html:16 +#: netbox/virtualization/forms/bulk_edit.py:81 +#: netbox/virtualization/forms/filtersets.py:59 +#: netbox/virtualization/forms/filtersets.py:133 +#: netbox/virtualization/forms/model_forms.py:92 +#: netbox/vpn/forms/filtersets.py:257 msgid "Region" msgstr "Regionen" -#: circuits/forms/filtersets.py:42 circuits/forms/filtersets.py:162 -#: dcim/forms/bulk_edit.py:321 dcim/forms/bulk_edit.py:865 -#: dcim/forms/filtersets.py:78 dcim/forms/filtersets.py:190 -#: dcim/forms/filtersets.py:216 dcim/forms/filtersets.py:347 -#: dcim/forms/filtersets.py:430 dcim/forms/filtersets.py:744 -#: dcim/forms/filtersets.py:988 dcim/forms/filtersets.py:1102 -#: dcim/forms/filtersets.py:1141 dcim/forms/object_create.py:383 -#: extras/filtersets.py:520 ipam/forms/bulk_edit.py:213 -#: ipam/forms/bulk_edit.py:479 ipam/forms/filtersets.py:222 -#: ipam/forms/filtersets.py:427 ipam/forms/filtersets.py:480 -#: virtualization/forms/bulk_edit.py:86 virtualization/forms/filtersets.py:69 -#: virtualization/forms/filtersets.py:138 -#: virtualization/forms/model_forms.py:98 +#: netbox/circuits/forms/filtersets.py: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/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 msgid "Site group" msgstr "Områdegruppe" -#: circuits/forms/filtersets.py:65 circuits/forms/filtersets.py:83 -#: circuits/forms/filtersets.py:102 circuits/forms/filtersets.py:117 -#: core/forms/filtersets.py:67 core/forms/filtersets.py:135 -#: dcim/forms/bulk_edit.py:828 dcim/forms/filtersets.py:172 -#: dcim/forms/filtersets.py:204 dcim/forms/filtersets.py:915 -#: dcim/forms/filtersets.py:1007 dcim/forms/filtersets.py:1131 -#: dcim/forms/filtersets.py:1239 dcim/forms/filtersets.py:1263 -#: dcim/forms/filtersets.py:1288 dcim/forms/filtersets.py:1307 -#: dcim/forms/filtersets.py:1327 dcim/forms/filtersets.py:1441 -#: dcim/forms/filtersets.py:1465 dcim/forms/filtersets.py:1489 -#: dcim/forms/filtersets.py:1507 dcim/forms/filtersets.py:1523 -#: extras/forms/bulk_edit.py:90 extras/forms/filtersets.py:44 -#: extras/forms/filtersets.py:134 extras/forms/filtersets.py:165 -#: extras/forms/filtersets.py:205 extras/forms/filtersets.py:221 -#: extras/forms/filtersets.py:252 extras/forms/filtersets.py:276 -#: extras/forms/filtersets.py:441 ipam/forms/filtersets.py:99 -#: ipam/forms/filtersets.py:266 ipam/forms/filtersets.py:307 -#: ipam/forms/filtersets.py:382 ipam/forms/filtersets.py:468 -#: ipam/forms/filtersets.py:527 ipam/forms/filtersets.py:545 -#: netbox/tables/tables.py:256 virtualization/forms/filtersets.py:45 -#: virtualization/forms/filtersets.py:103 -#: virtualization/forms/filtersets.py:198 -#: virtualization/forms/filtersets.py:243 vpn/forms/filtersets.py:213 -#: wireless/forms/bulk_edit.py:150 wireless/forms/filtersets.py:34 -#: wireless/forms/filtersets.py:74 +#: 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 "Attributter" -#: circuits/forms/filtersets.py:73 circuits/tables/circuits.py:63 -#: circuits/tables/providers.py:66 templates/circuits/circuit.html:22 -#: templates/circuits/provideraccount.html:24 +#: netbox/circuits/forms/filtersets.py:73 +#: netbox/circuits/tables/circuits.py:63 +#: netbox/circuits/tables/providers.py:66 +#: netbox/templates/circuits/circuit.html:22 +#: netbox/templates/circuits/provideraccount.html:24 msgid "Account" msgstr "Konto" -#: circuits/forms/filtersets.py:217 +#: netbox/circuits/forms/filtersets.py:217 msgid "Term Side" msgstr "Termside" -#: circuits/forms/filtersets.py:250 extras/forms/model_forms.py:582 -#: ipam/forms/filtersets.py:142 ipam/forms/filtersets.py:546 -#: ipam/forms/model_forms.py:323 templates/extras/configcontext.html:60 -#: templates/ipam/ipaddress.html:59 templates/ipam/vlan_edit.html:30 -#: tenancy/forms/filtersets.py:87 users/forms/model_forms.py:314 +#: 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/templates/extras/configcontext.html:60 +#: netbox/templates/ipam/ipaddress.html:59 +#: netbox/templates/ipam/vlan_edit.html:30 +#: netbox/tenancy/forms/filtersets.py:87 netbox/users/forms/model_forms.py:314 msgid "Assignment" msgstr "Opgave" -#: circuits/forms/filtersets.py:265 circuits/forms/model_forms.py:195 -#: circuits/tables/circuits.py:155 dcim/forms/bulk_edit.py:117 -#: dcim/forms/bulk_import.py:100 dcim/forms/model_forms.py:117 -#: dcim/tables/sites.py:89 extras/forms/filtersets.py:480 -#: ipam/filtersets.py:999 ipam/forms/bulk_edit.py:493 -#: ipam/forms/bulk_import.py:436 ipam/forms/model_forms.py:528 -#: ipam/tables/fhrp.py:67 ipam/tables/vlans.py:122 ipam/tables/vlans.py:226 -#: templates/circuits/circuitgroupassignment.html:22 -#: templates/dcim/interface.html:284 templates/dcim/site.html:37 -#: templates/ipam/inc/panels/fhrp_groups.html:23 templates/ipam/vlan.html:27 -#: templates/tenancy/contact.html:21 templates/tenancy/tenant.html:20 -#: templates/users/group.html:6 templates/users/group.html:14 -#: templates/virtualization/cluster.html:29 templates/vpn/tunnel.html:29 -#: templates/wireless/wirelesslan.html:18 tenancy/forms/bulk_edit.py:43 -#: tenancy/forms/bulk_edit.py:94 tenancy/forms/bulk_import.py:40 -#: tenancy/forms/bulk_import.py:81 tenancy/forms/filtersets.py:48 -#: tenancy/forms/filtersets.py:78 tenancy/forms/filtersets.py:97 -#: tenancy/forms/model_forms.py:45 tenancy/forms/model_forms.py:97 -#: tenancy/forms/model_forms.py:122 tenancy/tables/contacts.py:60 -#: tenancy/tables/contacts.py:107 tenancy/tables/tenants.py:42 -#: users/filtersets.py:62 users/filtersets.py:185 users/forms/filtersets.py:31 -#: users/forms/filtersets.py:37 users/forms/filtersets.py:79 -#: virtualization/forms/bulk_edit.py:65 virtualization/forms/bulk_import.py:47 -#: virtualization/forms/filtersets.py:85 -#: virtualization/forms/model_forms.py:66 virtualization/tables/clusters.py:70 -#: vpn/forms/bulk_edit.py:112 vpn/forms/bulk_import.py:158 -#: vpn/forms/filtersets.py:116 vpn/tables/crypto.py:31 -#: vpn/tables/tunnels.py:44 wireless/forms/bulk_edit.py:48 -#: wireless/forms/bulk_import.py:36 wireless/forms/filtersets.py:46 -#: wireless/forms/model_forms.py:40 wireless/tables/wirelesslan.py:48 +#: netbox/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:999 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/templates/circuits/circuitgroupassignment.html:22 +#: netbox/templates/dcim/interface.html:284 netbox/templates/dcim/site.html:37 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:23 +#: netbox/templates/ipam/vlan.html:27 netbox/templates/tenancy/contact.html:21 +#: netbox/templates/tenancy/tenant.html:20 netbox/templates/users/group.html:6 +#: netbox/templates/users/group.html:14 +#: netbox/templates/virtualization/cluster.html:29 +#: netbox/templates/vpn/tunnel.html:29 +#: netbox/templates/wireless/wirelesslan.html:18 +#: netbox/tenancy/forms/bulk_edit.py:43 netbox/tenancy/forms/bulk_edit.py:94 +#: netbox/tenancy/forms/bulk_import.py:40 +#: netbox/tenancy/forms/bulk_import.py:81 +#: netbox/tenancy/forms/filtersets.py:48 netbox/tenancy/forms/filtersets.py:78 +#: netbox/tenancy/forms/filtersets.py:97 +#: netbox/tenancy/forms/model_forms.py:45 +#: netbox/tenancy/forms/model_forms.py:97 +#: netbox/tenancy/forms/model_forms.py:122 +#: netbox/tenancy/tables/contacts.py:60 netbox/tenancy/tables/contacts.py:107 +#: netbox/tenancy/tables/tenants.py:42 netbox/users/filtersets.py: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/tables/clusters.py:70 +#: netbox/vpn/forms/bulk_edit.py:112 netbox/vpn/forms/bulk_import.py:158 +#: netbox/vpn/forms/filtersets.py:116 netbox/vpn/tables/crypto.py:31 +#: netbox/vpn/tables/tunnels.py:44 netbox/wireless/forms/bulk_edit.py:48 +#: netbox/wireless/forms/bulk_import.py:36 +#: netbox/wireless/forms/filtersets.py:46 +#: netbox/wireless/forms/model_forms.py:40 +#: netbox/wireless/tables/wirelesslan.py:48 msgid "Group" msgstr "Gruppe" -#: circuits/forms/model_forms.py:182 templates/circuits/circuitgroup.html:25 +#: netbox/circuits/forms/model_forms.py:182 +#: netbox/templates/circuits/circuitgroup.html:25 msgid "Circuit Group" msgstr "Kredsløbsgruppe" -#: circuits/models/circuits.py:27 dcim/models/cables.py:67 -#: dcim/models/device_component_templates.py:517 -#: dcim/models/device_component_templates.py:617 -#: dcim/models/device_components.py:975 dcim/models/device_components.py:1049 -#: dcim/models/device_components.py:1204 dcim/models/devices.py:479 -#: dcim/models/racks.py:224 extras/models/tags.py:28 +#: 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/extras/models/tags.py:28 msgid "color" msgstr "farve" -#: circuits/models/circuits.py:36 +#: netbox/circuits/models/circuits.py:36 msgid "circuit type" msgstr "kredsløbstype" -#: circuits/models/circuits.py:37 +#: netbox/circuits/models/circuits.py:37 msgid "circuit types" msgstr "kredsløbstyper" -#: circuits/models/circuits.py:48 +#: netbox/circuits/models/circuits.py:48 msgid "circuit ID" msgstr "kredsløbs-ID" -#: circuits/models/circuits.py:49 +#: netbox/circuits/models/circuits.py:49 msgid "Unique circuit ID" msgstr "Unikt kredsløbs-ID" -#: circuits/models/circuits.py:69 core/models/data.py:52 -#: core/models/jobs.py:84 dcim/models/cables.py:49 dcim/models/devices.py:653 -#: dcim/models/devices.py:1173 dcim/models/devices.py:1399 -#: dcim/models/power.py:96 dcim/models/racks.py:297 dcim/models/sites.py:154 -#: dcim/models/sites.py:266 ipam/models/ip.py:253 ipam/models/ip.py:522 -#: ipam/models/ip.py:730 ipam/models/vlans.py:195 -#: virtualization/models/clusters.py:74 -#: virtualization/models/virtualmachines.py:84 vpn/models/tunnels.py:40 -#: wireless/models.py:95 wireless/models.py:159 +#: 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 msgid "status" msgstr "status" -#: circuits/models/circuits.py:84 templates/core/plugin.html:20 +#: netbox/circuits/models/circuits.py:84 netbox/templates/core/plugin.html:20 msgid "installed" msgstr "installeret" -#: circuits/models/circuits.py:89 +#: netbox/circuits/models/circuits.py:89 msgid "terminates" msgstr "afsluttes" -#: circuits/models/circuits.py:94 +#: netbox/circuits/models/circuits.py:94 msgid "commit rate (Kbps)" msgstr "forpligtelseshastighed (Kbps)" -#: circuits/models/circuits.py:95 +#: netbox/circuits/models/circuits.py:95 msgid "Committed rate" msgstr "Forpligtet sats" -#: circuits/models/circuits.py:137 +#: netbox/circuits/models/circuits.py:137 msgid "circuit" msgstr "kredsløb" -#: circuits/models/circuits.py:138 +#: netbox/circuits/models/circuits.py:138 msgid "circuits" msgstr "kredsløb" -#: circuits/models/circuits.py:170 +#: netbox/circuits/models/circuits.py:170 msgid "circuit group" msgstr "kredsløbsgruppe" -#: circuits/models/circuits.py:171 +#: netbox/circuits/models/circuits.py:171 msgid "circuit groups" msgstr "kredsløbsgrupper" -#: circuits/models/circuits.py:195 ipam/models/fhrp.py:93 -#: tenancy/models/contacts.py:134 +#: netbox/circuits/models/circuits.py:195 netbox/ipam/models/fhrp.py:93 +#: netbox/tenancy/models/contacts.py:134 msgid "priority" msgstr "prioritet" -#: circuits/models/circuits.py:213 +#: netbox/circuits/models/circuits.py:213 msgid "Circuit group assignment" msgstr "Kredsløbsgruppetildeling" -#: circuits/models/circuits.py:214 +#: netbox/circuits/models/circuits.py:214 msgid "Circuit group assignments" msgstr "Kredsløbsgruppeopgaver" -#: circuits/models/circuits.py:240 +#: netbox/circuits/models/circuits.py:240 msgid "termination" msgstr "afslutning" -#: circuits/models/circuits.py:257 +#: netbox/circuits/models/circuits.py:257 msgid "port speed (Kbps)" msgstr "porthastighed (Kbps)" -#: circuits/models/circuits.py:260 +#: netbox/circuits/models/circuits.py:260 msgid "Physical circuit speed" msgstr "Fysisk kredsløbshastighed" -#: circuits/models/circuits.py:265 +#: netbox/circuits/models/circuits.py:265 msgid "upstream speed (Kbps)" msgstr "opstrømshastighed (Kbps)" -#: circuits/models/circuits.py:266 +#: netbox/circuits/models/circuits.py:266 msgid "Upstream speed, if different from port speed" msgstr "Opstrømshastighed, hvis forskellig fra porthastighed" -#: circuits/models/circuits.py:271 +#: netbox/circuits/models/circuits.py:271 msgid "cross-connect ID" msgstr "krydsforbindelses-id" -#: circuits/models/circuits.py:272 +#: netbox/circuits/models/circuits.py:272 msgid "ID of the local cross-connect" msgstr "ID for den lokale krydsforbindelse" -#: circuits/models/circuits.py:277 +#: netbox/circuits/models/circuits.py:277 msgid "patch panel/port(s)" msgstr "patchpanel/port (er)" -#: circuits/models/circuits.py:278 +#: netbox/circuits/models/circuits.py:278 msgid "Patch panel ID and port number(s)" msgstr "Patchpanelets ID og portnummer" -#: circuits/models/circuits.py:281 -#: dcim/models/device_component_templates.py:61 -#: dcim/models/device_components.py:68 dcim/models/racks.py:685 -#: extras/models/configs.py:45 extras/models/configs.py:219 -#: extras/models/customfields.py:125 extras/models/models.py:61 -#: extras/models/models.py:158 extras/models/models.py:396 -#: extras/models/models.py:511 extras/models/notifications.py:131 -#: extras/models/staging.py:31 extras/models/tags.py:32 -#: netbox/models/__init__.py:110 netbox/models/__init__.py:145 -#: netbox/models/__init__.py:191 users/models/permissions.py:24 -#: users/models/tokens.py:57 users/models/users.py:33 -#: virtualization/models/virtualmachines.py:289 +#: 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/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 msgid "description" msgstr "beskrivelse" -#: circuits/models/circuits.py:294 +#: netbox/circuits/models/circuits.py:294 msgid "circuit termination" msgstr "kredsløbsafslutning" -#: circuits/models/circuits.py:295 +#: netbox/circuits/models/circuits.py:295 msgid "circuit terminations" msgstr "kredsløbsafslutninger" -#: circuits/models/circuits.py:308 +#: netbox/circuits/models/circuits.py:308 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." -#: circuits/models/circuits.py:310 +#: 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." -#: circuits/models/providers.py:22 circuits/models/providers.py:66 -#: circuits/models/providers.py:104 core/models/data.py:39 -#: core/models/jobs.py:45 dcim/models/device_component_templates.py:43 -#: dcim/models/device_components.py:53 dcim/models/devices.py:593 -#: dcim/models/devices.py:1330 dcim/models/devices.py:1395 -#: dcim/models/power.py:39 dcim/models/power.py:92 dcim/models/racks.py:262 -#: dcim/models/sites.py:138 extras/models/configs.py:36 -#: extras/models/configs.py:215 extras/models/customfields.py:92 -#: extras/models/models.py:56 extras/models/models.py:153 -#: extras/models/models.py:296 extras/models/models.py:392 -#: extras/models/models.py:501 extras/models/models.py:596 -#: extras/models/notifications.py:126 extras/models/scripts.py:30 -#: extras/models/staging.py:26 ipam/models/asns.py:18 ipam/models/fhrp.py:25 -#: ipam/models/services.py:52 ipam/models/services.py:88 -#: ipam/models/vlans.py:36 ipam/models/vlans.py:184 ipam/models/vrfs.py:22 -#: ipam/models/vrfs.py:79 netbox/models/__init__.py:137 -#: netbox/models/__init__.py:181 tenancy/models/contacts.py:64 -#: tenancy/models/tenants.py:20 tenancy/models/tenants.py:45 -#: users/models/permissions.py:20 users/models/users.py:28 -#: virtualization/models/clusters.py:57 -#: virtualization/models/virtualmachines.py:72 -#: virtualization/models/virtualmachines.py:279 vpn/models/crypto.py:24 -#: vpn/models/crypto.py:71 vpn/models/crypto.py:131 vpn/models/crypto.py:183 -#: vpn/models/crypto.py:221 vpn/models/l2vpn.py:22 vpn/models/tunnels.py:35 -#: wireless/models.py:51 +#: 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/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/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 msgid "name" msgstr "navn" -#: circuits/models/providers.py:25 +#: netbox/circuits/models/providers.py:25 msgid "Full name of the provider" msgstr "Leverandørens fulde navn" -#: circuits/models/providers.py:28 dcim/models/devices.py:86 -#: dcim/models/racks.py:137 dcim/models/sites.py:149 -#: extras/models/models.py:506 ipam/models/asns.py:23 ipam/models/vlans.py:40 -#: netbox/models/__init__.py:141 netbox/models/__init__.py:186 -#: tenancy/models/tenants.py:25 tenancy/models/tenants.py:49 -#: vpn/models/l2vpn.py:27 wireless/models.py:56 +#: netbox/circuits/models/providers.py:28 netbox/dcim/models/devices.py:86 +#: 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 msgid "slug" msgstr "slug" -#: circuits/models/providers.py:42 +#: netbox/circuits/models/providers.py:42 msgid "provider" msgstr "leverandør" -#: circuits/models/providers.py:43 +#: netbox/circuits/models/providers.py:43 msgid "providers" msgstr "leverandører" -#: circuits/models/providers.py:63 +#: netbox/circuits/models/providers.py:63 msgid "account ID" msgstr "konto-ID" -#: circuits/models/providers.py:86 +#: netbox/circuits/models/providers.py:86 msgid "provider account" msgstr "leverandørkonto" -#: circuits/models/providers.py:87 +#: netbox/circuits/models/providers.py:87 msgid "provider accounts" msgstr "leverandørkonti" -#: circuits/models/providers.py:115 +#: netbox/circuits/models/providers.py:115 msgid "service ID" msgstr "service-id" -#: circuits/models/providers.py:126 +#: netbox/circuits/models/providers.py:126 msgid "provider network" msgstr "leverandørnetværk" -#: circuits/models/providers.py:127 +#: netbox/circuits/models/providers.py:127 msgid "provider networks" msgstr "leverandørnetværk" -#: circuits/tables/circuits.py:32 circuits/tables/circuits.py:132 -#: circuits/tables/providers.py:18 circuits/tables/providers.py:69 -#: circuits/tables/providers.py:99 core/tables/data.py:16 -#: core/tables/jobs.py:14 core/tables/plugins.py:44 core/tables/tasks.py:11 -#: core/tables/tasks.py:115 dcim/forms/filtersets.py:63 -#: dcim/forms/object_create.py:43 dcim/tables/devices.py:52 -#: dcim/tables/devices.py:92 dcim/tables/devices.py:134 -#: dcim/tables/devices.py:289 dcim/tables/devices.py:392 -#: dcim/tables/devices.py:433 dcim/tables/devices.py:482 -#: dcim/tables/devices.py:531 dcim/tables/devices.py:648 -#: dcim/tables/devices.py:731 dcim/tables/devices.py:778 -#: dcim/tables/devices.py:841 dcim/tables/devices.py:911 -#: dcim/tables/devices.py:974 dcim/tables/devices.py:994 -#: dcim/tables/devices.py:1023 dcim/tables/devices.py:1053 -#: dcim/tables/devicetypes.py:31 dcim/tables/power.py:22 -#: dcim/tables/power.py:62 dcim/tables/racks.py:24 dcim/tables/racks.py:113 -#: dcim/tables/sites.py:24 dcim/tables/sites.py:51 dcim/tables/sites.py:78 -#: dcim/tables/sites.py:130 extras/forms/filtersets.py:213 -#: extras/tables/tables.py:58 extras/tables/tables.py:122 -#: extras/tables/tables.py:155 extras/tables/tables.py:180 -#: extras/tables/tables.py:246 extras/tables/tables.py:361 -#: extras/tables/tables.py:378 extras/tables/tables.py:401 -#: extras/tables/tables.py:439 extras/tables/tables.py:491 -#: extras/tables/tables.py:514 ipam/forms/bulk_edit.py:407 -#: ipam/forms/filtersets.py:386 ipam/tables/asn.py:16 ipam/tables/ip.py:85 -#: ipam/tables/ip.py:160 ipam/tables/services.py:15 ipam/tables/services.py:40 -#: ipam/tables/vlans.py:64 ipam/tables/vlans.py:114 ipam/tables/vrfs.py:26 -#: ipam/tables/vrfs.py:68 templates/circuits/circuitgroup.html:28 -#: templates/circuits/circuittype.html:22 -#: templates/circuits/provideraccount.html:28 -#: templates/circuits/providernetwork.html:24 -#: templates/core/datasource.html:34 templates/core/job.html:44 -#: templates/core/plugin.html:54 templates/core/rq_worker.html:43 -#: templates/dcim/consoleport.html:28 templates/dcim/consoleserverport.html:28 -#: templates/dcim/devicebay.html:24 templates/dcim/devicerole.html:26 -#: templates/dcim/frontport.html:28 -#: templates/dcim/inc/interface_vlans_table.html:5 -#: templates/dcim/inc/panels/inventory_items.html:18 -#: templates/dcim/interface.html:38 templates/dcim/interface.html:165 -#: templates/dcim/inventoryitem.html:28 -#: templates/dcim/inventoryitemrole.html:18 templates/dcim/location.html:29 -#: templates/dcim/manufacturer.html:36 templates/dcim/modulebay.html:30 -#: templates/dcim/platform.html:29 templates/dcim/poweroutlet.html:28 -#: templates/dcim/powerport.html:28 templates/dcim/rackrole.html:22 -#: templates/dcim/rearport.html:28 templates/dcim/region.html:29 -#: templates/dcim/sitegroup.html:29 -#: templates/dcim/virtualdevicecontext.html:18 -#: templates/extras/configcontext.html:13 -#: templates/extras/configtemplate.html:13 -#: templates/extras/customfield.html:13 templates/extras/customlink.html:13 -#: templates/extras/eventrule.html:13 templates/extras/exporttemplate.html:15 -#: templates/extras/notificationgroup.html:14 -#: templates/extras/savedfilter.html:13 templates/extras/script_list.html:44 -#: templates/extras/tag.html:14 templates/extras/webhook.html:13 -#: templates/ipam/asnrange.html:15 templates/ipam/fhrpgroup.html:30 -#: templates/ipam/rir.html:22 templates/ipam/role.html:22 -#: templates/ipam/routetarget.html:13 templates/ipam/service.html:24 -#: templates/ipam/servicetemplate.html:15 templates/ipam/vlan.html:35 -#: templates/ipam/vlangroup.html:30 templates/tenancy/contact.html:25 -#: templates/tenancy/contactgroup.html:21 -#: templates/tenancy/contactrole.html:18 templates/tenancy/tenantgroup.html:29 -#: templates/users/group.html:17 templates/users/objectpermission.html:17 -#: templates/virtualization/cluster.html:13 -#: templates/virtualization/clustergroup.html:22 -#: templates/virtualization/clustertype.html:22 -#: templates/virtualization/virtualdisk.html:25 -#: templates/virtualization/virtualmachine.html:15 -#: templates/virtualization/vminterface.html:25 -#: templates/vpn/ikepolicy.html:13 templates/vpn/ikeproposal.html:13 -#: templates/vpn/ipsecpolicy.html:13 templates/vpn/ipsecprofile.html:13 -#: templates/vpn/ipsecprofile.html:36 templates/vpn/ipsecprofile.html:69 -#: templates/vpn/ipsecproposal.html:13 templates/vpn/l2vpn.html:14 -#: templates/vpn/tunnel.html:21 templates/vpn/tunnelgroup.html:26 -#: templates/wireless/wirelesslangroup.html:29 tenancy/tables/contacts.py:19 -#: tenancy/tables/contacts.py:41 tenancy/tables/contacts.py:56 -#: tenancy/tables/tenants.py:16 tenancy/tables/tenants.py:38 -#: users/tables.py:62 users/tables.py:76 -#: virtualization/forms/bulk_create.py:20 -#: virtualization/forms/object_create.py:13 -#: virtualization/forms/object_create.py:23 -#: virtualization/tables/clusters.py:17 virtualization/tables/clusters.py:39 -#: virtualization/tables/clusters.py:62 -#: virtualization/tables/virtualmachines.py:55 -#: virtualization/tables/virtualmachines.py:139 -#: virtualization/tables/virtualmachines.py:194 vpn/tables/crypto.py:18 -#: vpn/tables/crypto.py:57 vpn/tables/crypto.py:93 vpn/tables/crypto.py:129 -#: vpn/tables/crypto.py:158 vpn/tables/l2vpn.py:23 vpn/tables/tunnels.py:18 -#: vpn/tables/tunnels.py:40 wireless/tables/wirelesslan.py:18 -#: wireless/tables/wirelesslan.py:79 +#: netbox/circuits/tables/circuits.py:32 +#: netbox/circuits/tables/circuits.py:132 +#: netbox/circuits/tables/providers.py:18 +#: netbox/circuits/tables/providers.py:69 +#: netbox/circuits/tables/providers.py:99 netbox/core/tables/data.py:16 +#: netbox/core/tables/jobs.py:14 netbox/core/tables/plugins.py: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/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/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/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/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 +#: netbox/templates/dcim/consoleserverport.html:28 +#: netbox/templates/dcim/devicebay.html:24 +#: netbox/templates/dcim/devicerole.html:26 +#: netbox/templates/dcim/frontport.html:28 +#: netbox/templates/dcim/inc/interface_vlans_table.html:5 +#: netbox/templates/dcim/inc/panels/inventory_items.html:18 +#: netbox/templates/dcim/interface.html:38 +#: netbox/templates/dcim/interface.html:165 +#: netbox/templates/dcim/inventoryitem.html:28 +#: netbox/templates/dcim/inventoryitemrole.html:18 +#: netbox/templates/dcim/location.html:29 +#: netbox/templates/dcim/manufacturer.html:36 +#: netbox/templates/dcim/modulebay.html:30 +#: netbox/templates/dcim/platform.html:29 +#: netbox/templates/dcim/poweroutlet.html:28 +#: netbox/templates/dcim/powerport.html:28 +#: netbox/templates/dcim/rackrole.html:22 +#: netbox/templates/dcim/rearport.html:28 netbox/templates/dcim/region.html:29 +#: netbox/templates/dcim/sitegroup.html:29 +#: netbox/templates/dcim/virtualdevicecontext.html:18 +#: netbox/templates/extras/configcontext.html:13 +#: netbox/templates/extras/configtemplate.html:13 +#: netbox/templates/extras/customfield.html:13 +#: netbox/templates/extras/customlink.html:13 +#: netbox/templates/extras/eventrule.html:13 +#: netbox/templates/extras/exporttemplate.html:15 +#: netbox/templates/extras/notificationgroup.html:14 +#: netbox/templates/extras/savedfilter.html:13 +#: netbox/templates/extras/script_list.html:45 +#: netbox/templates/extras/tag.html:14 netbox/templates/extras/webhook.html:13 +#: netbox/templates/ipam/asnrange.html:15 +#: netbox/templates/ipam/fhrpgroup.html:30 netbox/templates/ipam/rir.html:22 +#: netbox/templates/ipam/role.html:22 +#: netbox/templates/ipam/routetarget.html:13 +#: netbox/templates/ipam/service.html:24 +#: netbox/templates/ipam/servicetemplate.html:15 +#: netbox/templates/ipam/vlan.html:35 netbox/templates/ipam/vlangroup.html:30 +#: netbox/templates/tenancy/contact.html:25 +#: netbox/templates/tenancy/contactgroup.html:21 +#: netbox/templates/tenancy/contactrole.html:18 +#: netbox/templates/tenancy/tenantgroup.html:29 +#: netbox/templates/users/group.html:17 +#: netbox/templates/users/objectpermission.html:17 +#: netbox/templates/virtualization/cluster.html:13 +#: netbox/templates/virtualization/clustergroup.html:22 +#: netbox/templates/virtualization/clustertype.html:22 +#: netbox/templates/virtualization/virtualdisk.html:25 +#: netbox/templates/virtualization/virtualmachine.html:15 +#: netbox/templates/virtualization/vminterface.html:25 +#: netbox/templates/vpn/ikepolicy.html:13 +#: netbox/templates/vpn/ikeproposal.html:13 +#: netbox/templates/vpn/ipsecpolicy.html:13 +#: netbox/templates/vpn/ipsecprofile.html:13 +#: netbox/templates/vpn/ipsecprofile.html:36 +#: netbox/templates/vpn/ipsecprofile.html:69 +#: netbox/templates/vpn/ipsecproposal.html:13 +#: netbox/templates/vpn/l2vpn.html:14 netbox/templates/vpn/tunnel.html:21 +#: netbox/templates/vpn/tunnelgroup.html:26 +#: netbox/templates/wireless/wirelesslangroup.html:29 +#: netbox/tenancy/tables/contacts.py:19 netbox/tenancy/tables/contacts.py:41 +#: netbox/tenancy/tables/contacts.py:56 netbox/tenancy/tables/tenants.py:16 +#: netbox/tenancy/tables/tenants.py:38 netbox/users/tables.py:62 +#: netbox/users/tables.py:76 netbox/virtualization/forms/bulk_create.py:20 +#: netbox/virtualization/forms/object_create.py:13 +#: netbox/virtualization/forms/object_create.py:23 +#: netbox/virtualization/tables/clusters.py:17 +#: netbox/virtualization/tables/clusters.py:39 +#: netbox/virtualization/tables/clusters.py:62 +#: netbox/virtualization/tables/virtualmachines.py:55 +#: netbox/virtualization/tables/virtualmachines.py:139 +#: netbox/virtualization/tables/virtualmachines.py:194 +#: netbox/vpn/tables/crypto.py:18 netbox/vpn/tables/crypto.py:57 +#: netbox/vpn/tables/crypto.py:93 netbox/vpn/tables/crypto.py:129 +#: netbox/vpn/tables/crypto.py:158 netbox/vpn/tables/l2vpn.py:23 +#: netbox/vpn/tables/tunnels.py:18 netbox/vpn/tables/tunnels.py:40 +#: netbox/wireless/tables/wirelesslan.py:18 +#: netbox/wireless/tables/wirelesslan.py:79 msgid "Name" msgstr "Navn" -#: circuits/tables/circuits.py:41 circuits/tables/circuits.py:138 -#: circuits/tables/providers.py:45 circuits/tables/providers.py:79 -#: netbox/navigation/menu.py:266 netbox/navigation/menu.py:270 -#: netbox/navigation/menu.py:272 templates/circuits/provider.html:57 -#: templates/circuits/provideraccount.html:44 -#: templates/circuits/providernetwork.html:50 +#: 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/templates/circuits/provider.html:57 +#: netbox/templates/circuits/provideraccount.html:44 +#: netbox/templates/circuits/providernetwork.html:50 msgid "Circuits" msgstr "Kredsløb" -#: circuits/tables/circuits.py:55 templates/circuits/circuit.html:26 +#: netbox/circuits/tables/circuits.py:55 +#: netbox/templates/circuits/circuit.html:26 msgid "Circuit ID" msgstr "Kredsløbs ID" -#: circuits/tables/circuits.py:69 wireless/forms/model_forms.py:160 +#: netbox/circuits/tables/circuits.py:69 +#: netbox/wireless/forms/model_forms.py:160 msgid "Side A" msgstr "Side A" -#: circuits/tables/circuits.py:74 +#: netbox/circuits/tables/circuits.py:74 msgid "Side Z" msgstr "Side Z" -#: circuits/tables/circuits.py:77 templates/circuits/circuit.html:55 +#: netbox/circuits/tables/circuits.py:77 +#: netbox/templates/circuits/circuit.html:55 msgid "Commit Rate" msgstr "Forpligtelsesrate" -#: circuits/tables/circuits.py:80 circuits/tables/providers.py:48 -#: circuits/tables/providers.py:82 circuits/tables/providers.py:107 -#: dcim/tables/devices.py:1036 dcim/tables/devicetypes.py:92 -#: dcim/tables/modules.py:29 dcim/tables/modules.py:72 dcim/tables/power.py:39 -#: dcim/tables/power.py:96 dcim/tables/racks.py:84 dcim/tables/racks.py:145 -#: dcim/tables/racks.py:225 dcim/tables/sites.py:108 -#: extras/tables/tables.py:582 ipam/tables/asn.py:69 ipam/tables/fhrp.py:34 -#: ipam/tables/ip.py:136 ipam/tables/ip.py:275 ipam/tables/ip.py:329 -#: ipam/tables/ip.py:397 ipam/tables/services.py:24 ipam/tables/services.py:54 -#: ipam/tables/vlans.py:145 ipam/tables/vrfs.py:47 ipam/tables/vrfs.py:72 -#: templates/dcim/htmx/cable_edit.html:89 templates/generic/bulk_edit.html:86 -#: templates/inc/panels/comments.html:5 tenancy/tables/contacts.py:68 -#: tenancy/tables/tenants.py:46 utilities/forms/fields/fields.py:29 -#: virtualization/tables/clusters.py:91 -#: virtualization/tables/virtualmachines.py:82 vpn/tables/crypto.py:37 -#: vpn/tables/crypto.py:74 vpn/tables/crypto.py:109 vpn/tables/crypto.py:140 -#: vpn/tables/crypto.py:173 vpn/tables/l2vpn.py:37 vpn/tables/tunnels.py:61 -#: wireless/tables/wirelesslan.py:27 wireless/tables/wirelesslan.py:58 +#: netbox/circuits/tables/circuits.py: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:72 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/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/vpn/tables/crypto.py:37 netbox/vpn/tables/crypto.py:74 +#: netbox/vpn/tables/crypto.py:109 netbox/vpn/tables/crypto.py:140 +#: netbox/vpn/tables/crypto.py:173 netbox/vpn/tables/l2vpn.py:37 +#: netbox/vpn/tables/tunnels.py:61 netbox/wireless/tables/wirelesslan.py:27 +#: netbox/wireless/tables/wirelesslan.py:58 msgid "Comments" msgstr "Bemærkninger" -#: circuits/tables/circuits.py:86 templates/tenancy/contact.html:84 -#: tenancy/tables/contacts.py:73 +#: netbox/circuits/tables/circuits.py:86 +#: netbox/templates/tenancy/contact.html:84 +#: netbox/tenancy/tables/contacts.py:73 msgid "Assignments" msgstr "Opgaver" -#: circuits/tables/providers.py:23 +#: netbox/circuits/tables/providers.py:23 msgid "Accounts" msgstr "Konti" -#: circuits/tables/providers.py:29 +#: netbox/circuits/tables/providers.py:29 msgid "Account Count" msgstr "Kontoantal" -#: circuits/tables/providers.py:39 dcim/tables/sites.py:100 +#: netbox/circuits/tables/providers.py:39 netbox/dcim/tables/sites.py:100 msgid "ASN Count" msgstr "ASN antal" -#: circuits/views.py:331 +#: netbox/circuits/views.py:331 #, python-brace-format msgid "No terminations have been defined for circuit {circuit}." msgstr "Der er ikke defineret nogen afslutninger for kredsløb {circuit}." -#: circuits/views.py:380 +#: netbox/circuits/views.py:380 #, python-brace-format msgid "Swapped terminations for circuit {circuit}." msgstr "Udskiftede afslutninger til kredsløb {circuit}." -#: core/api/views.py:39 +#: netbox/core/api/views.py:39 msgid "This user does not have permission to synchronize this data source." msgstr "Denne bruger har ikke tilladelse til at synkronisere denne datakilde." -#: core/choices.py:18 +#: netbox/core/choices.py:18 msgid "New" msgstr "Ny" -#: core/choices.py:19 core/constants.py:18 core/tables/tasks.py:15 -#: templates/core/rq_task.html:77 +#: netbox/core/choices.py:19 netbox/core/constants.py:18 +#: netbox/core/tables/tasks.py:15 netbox/templates/core/rq_task.html:77 msgid "Queued" msgstr "I kø" -#: core/choices.py:20 +#: netbox/core/choices.py:20 msgid "Syncing" msgstr "Synkroniserer" -#: core/choices.py:21 core/choices.py:57 core/tables/jobs.py:41 -#: templates/core/job.html:86 +#: netbox/core/choices.py:21 netbox/core/choices.py:57 +#: netbox/core/tables/jobs.py:41 netbox/templates/core/job.html:86 msgid "Completed" msgstr "Afsluttet" -#: core/choices.py:22 core/choices.py:59 core/constants.py:20 -#: core/tables/tasks.py:34 dcim/choices.py:187 dcim/choices.py:239 -#: dcim/choices.py:1607 virtualization/choices.py:47 +#: netbox/core/choices.py:22 netbox/core/choices.py:59 +#: netbox/core/constants.py:20 netbox/core/tables/tasks.py:34 +#: netbox/dcim/choices.py:187 netbox/dcim/choices.py:239 +#: netbox/dcim/choices.py:1609 netbox/virtualization/choices.py:47 msgid "Failed" msgstr "Mislykkedes" -#: core/choices.py:35 netbox/navigation/menu.py:335 -#: netbox/navigation/menu.py:339 templates/extras/script/base.html:14 -#: templates/extras/script_list.html:7 templates/extras/script_list.html:12 -#: templates/extras/script_result.html:17 +#: netbox/core/choices.py:35 netbox/netbox/navigation/menu.py:335 +#: netbox/netbox/navigation/menu.py:339 +#: netbox/templates/extras/script/base.html:14 +#: netbox/templates/extras/script_list.html:7 +#: netbox/templates/extras/script_list.html:12 +#: netbox/templates/extras/script_result.html:17 msgid "Scripts" msgstr "Manuskripter" -#: core/choices.py:36 templates/extras/report/base.html:13 +#: netbox/core/choices.py:36 netbox/templates/extras/report/base.html:13 msgid "Reports" msgstr "Rapporter" -#: core/choices.py:54 +#: netbox/core/choices.py:54 msgid "Pending" msgstr "Afventer" -#: core/choices.py:55 core/constants.py:23 core/tables/jobs.py:32 -#: core/tables/tasks.py:38 templates/core/job.html:73 +#: netbox/core/choices.py:55 netbox/core/constants.py:23 +#: netbox/core/tables/jobs.py:32 netbox/core/tables/tasks.py:38 +#: netbox/templates/core/job.html:73 msgid "Scheduled" msgstr "Planlagt" -#: core/choices.py:56 +#: netbox/core/choices.py:56 msgid "Running" msgstr "Løb" -#: core/choices.py:58 +#: netbox/core/choices.py:58 msgid "Errored" msgstr "Fejl" -#: core/choices.py:87 core/tables/plugins.py:63 -#: templates/generic/object.html:61 +#: netbox/core/choices.py:87 netbox/core/tables/plugins.py:63 +#: netbox/templates/generic/object.html:61 msgid "Updated" msgstr "Opdateret" -#: core/choices.py:88 +#: netbox/core/choices.py:88 msgid "Deleted" msgstr "Slettet" -#: core/constants.py:19 core/tables/tasks.py:30 +#: netbox/core/constants.py:19 netbox/core/tables/tasks.py:30 msgid "Finished" msgstr "Færdig" -#: core/constants.py:21 core/tables/jobs.py:38 templates/core/job.html:82 -#: templates/extras/htmx/script_result.html:8 +#: netbox/core/constants.py:21 netbox/core/tables/jobs.py:38 +#: netbox/templates/core/job.html:82 +#: netbox/templates/extras/htmx/script_result.html:8 msgid "Started" msgstr "Startet" -#: core/constants.py:22 core/tables/tasks.py:26 +#: netbox/core/constants.py:22 netbox/core/tables/tasks.py:26 msgid "Deferred" msgstr "Udskudt" -#: core/constants.py:24 +#: netbox/core/constants.py:24 msgid "Stopped" msgstr "Stoppet" -#: core/constants.py:25 +#: netbox/core/constants.py:25 msgid "Cancelled" msgstr "Annulleret" -#: core/data_backends.py:32 core/tables/plugins.py:51 -#: templates/core/plugin.html:88 templates/dcim/interface.html:216 +#: netbox/core/data_backends.py:32 netbox/core/tables/plugins.py:51 +#: netbox/templates/core/plugin.html:88 +#: netbox/templates/dcim/interface.html:216 msgid "Local" msgstr "Lokalt" -#: core/data_backends.py:50 core/tables/change_logging.py:20 -#: templates/account/profile.html:15 templates/users/user.html:17 -#: users/tables.py:31 +#: netbox/core/data_backends.py:50 netbox/core/tables/change_logging.py:20 +#: netbox/templates/account/profile.html:15 +#: netbox/templates/users/user.html:17 netbox/users/tables.py:31 msgid "Username" msgstr "Brugernavn" -#: core/data_backends.py:52 core/data_backends.py:58 +#: netbox/core/data_backends.py:52 netbox/core/data_backends.py:58 msgid "Only used for cloning with HTTP(S)" msgstr "Bruges kun til kloning med HTTP(S)" -#: core/data_backends.py:56 templates/account/base.html:23 -#: templates/account/password.html:12 users/forms/model_forms.py:170 +#: netbox/core/data_backends.py:56 netbox/templates/account/base.html:23 +#: netbox/templates/account/password.html:12 +#: netbox/users/forms/model_forms.py:170 msgid "Password" msgstr "Adgangskode" -#: core/data_backends.py:62 +#: netbox/core/data_backends.py:62 msgid "Branch" msgstr "Afdeling" -#: core/data_backends.py:120 +#: netbox/core/data_backends.py:120 #, python-brace-format msgid "Fetching remote data failed ({name}): {error}" msgstr "Hentning af fjerndata mislykkedes ({name}): {error}" -#: core/data_backends.py:133 +#: netbox/core/data_backends.py:133 msgid "AWS access key ID" msgstr "AWS-adgangsnøgle-id" -#: core/data_backends.py:137 +#: netbox/core/data_backends.py:137 msgid "AWS secret access key" msgstr "AWS hemmelig adgangsnøgle" -#: core/events.py:27 +#: netbox/core/events.py:27 msgid "Object created" msgstr "Objekt oprettet" -#: core/events.py:28 +#: netbox/core/events.py:28 msgid "Object updated" msgstr "Objekt opdateret" -#: core/events.py:29 +#: netbox/core/events.py:29 msgid "Object deleted" msgstr "Objekt slettet" -#: core/events.py:30 +#: netbox/core/events.py:30 msgid "Job started" msgstr "Jobbet påbegyndt" -#: core/events.py:31 +#: netbox/core/events.py:31 msgid "Job completed" msgstr "Jobbet afsluttet" -#: core/events.py:32 +#: netbox/core/events.py:32 msgid "Job failed" msgstr "Jobbet mislykkedes" -#: core/events.py:33 +#: netbox/core/events.py:33 msgid "Job errored" msgstr "Jobfejl" -#: core/filtersets.py:53 extras/filtersets.py:250 extras/filtersets.py:633 -#: extras/filtersets.py:661 +#: netbox/core/filtersets.py:53 netbox/extras/filtersets.py:250 +#: netbox/extras/filtersets.py:633 netbox/extras/filtersets.py:661 msgid "Data source (ID)" msgstr "Datakilde (ID)" -#: core/filtersets.py:59 +#: netbox/core/filtersets.py:59 msgid "Data source (name)" msgstr "Datakilde (navn)" -#: core/filtersets.py:145 dcim/filtersets.py:501 extras/filtersets.py:287 -#: extras/filtersets.py:331 extras/filtersets.py:353 extras/filtersets.py:413 -#: users/filtersets.py:28 +#: netbox/core/filtersets.py:145 netbox/dcim/filtersets.py:501 +#: 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 msgid "User (ID)" msgstr "Bruger (ID)" -#: core/filtersets.py:151 +#: netbox/core/filtersets.py:151 msgid "User name" msgstr "Brugernavn" -#: core/forms/bulk_edit.py:25 core/forms/filtersets.py:43 -#: core/tables/data.py:26 dcim/forms/bulk_edit.py:1122 -#: dcim/forms/bulk_edit.py:1400 dcim/forms/filtersets.py:1370 -#: dcim/tables/devices.py:553 dcim/tables/devicetypes.py:224 -#: extras/forms/bulk_edit.py:123 extras/forms/bulk_edit.py:187 -#: extras/forms/bulk_edit.py:246 extras/forms/filtersets.py:142 -#: extras/forms/filtersets.py:229 extras/forms/filtersets.py:294 -#: extras/tables/tables.py:162 extras/tables/tables.py:253 -#: extras/tables/tables.py:415 netbox/preferences.py:22 -#: templates/core/datasource.html:42 templates/dcim/interface.html:61 -#: templates/extras/customlink.html:17 templates/extras/eventrule.html:17 -#: templates/extras/savedfilter.html:25 -#: templates/users/objectpermission.html:25 -#: templates/virtualization/vminterface.html:29 users/forms/bulk_edit.py:89 -#: users/forms/filtersets.py:70 users/tables.py:83 -#: virtualization/forms/bulk_edit.py:217 -#: virtualization/forms/filtersets.py:215 +#: 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/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/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 +#: netbox/templates/dcim/interface.html:61 +#: netbox/templates/extras/customlink.html:17 +#: netbox/templates/extras/eventrule.html:17 +#: netbox/templates/extras/savedfilter.html:25 +#: netbox/templates/users/objectpermission.html:25 +#: netbox/templates/virtualization/vminterface.html:29 +#: netbox/users/forms/bulk_edit.py:89 netbox/users/forms/filtersets.py:70 +#: netbox/users/tables.py:83 netbox/virtualization/forms/bulk_edit.py:217 +#: netbox/virtualization/forms/filtersets.py:215 msgid "Enabled" msgstr "Aktiveret" -#: core/forms/bulk_edit.py:34 extras/forms/model_forms.py:285 -#: templates/extras/savedfilter.html:52 vpn/forms/filtersets.py:97 -#: vpn/forms/filtersets.py:127 vpn/forms/filtersets.py:151 -#: vpn/forms/filtersets.py:170 vpn/forms/model_forms.py:301 -#: vpn/forms/model_forms.py:321 vpn/forms/model_forms.py:337 -#: vpn/forms/model_forms.py:357 vpn/forms/model_forms.py:380 +#: netbox/core/forms/bulk_edit.py:34 netbox/extras/forms/model_forms.py:285 +#: 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 msgid "Parameters" msgstr "Parametre" -#: core/forms/bulk_edit.py:38 templates/core/datasource.html:68 +#: netbox/core/forms/bulk_edit.py:38 netbox/templates/core/datasource.html:68 msgid "Ignore rules" msgstr "Ignorer regler" -#: core/forms/filtersets.py:30 core/forms/model_forms.py:97 -#: extras/forms/model_forms.py:248 extras/forms/model_forms.py:578 -#: extras/forms/model_forms.py:632 extras/tables/tables.py:191 -#: extras/tables/tables.py:483 extras/tables/tables.py:518 -#: templates/core/datasource.html:31 -#: templates/dcim/device/render_config.html:18 -#: templates/extras/configcontext.html:29 -#: templates/extras/configtemplate.html:21 -#: templates/extras/exporttemplate.html:35 -#: templates/virtualization/virtualmachine/render_config.html:18 +#: netbox/core/forms/filtersets.py: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/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 msgid "Data Source" msgstr "Datakilde" -#: core/forms/filtersets.py:55 core/forms/mixins.py:21 +#: netbox/core/forms/filtersets.py:55 netbox/core/forms/mixins.py:21 msgid "File" msgstr "Fil" -#: core/forms/filtersets.py:60 core/forms/mixins.py:16 -#: extras/forms/filtersets.py:170 extras/forms/filtersets.py:328 -#: extras/forms/filtersets.py:413 +#: 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 msgid "Data source" msgstr "Datakilde" -#: core/forms/filtersets.py:70 extras/forms/filtersets.py:440 +#: netbox/core/forms/filtersets.py:70 netbox/extras/forms/filtersets.py:440 msgid "Creation" msgstr "Skabelse" -#: core/forms/filtersets.py:74 core/forms/filtersets.py:160 -#: extras/forms/filtersets.py:461 extras/tables/tables.py:220 -#: extras/tables/tables.py:294 extras/tables/tables.py:326 -#: extras/tables/tables.py:571 templates/core/job.html:38 -#: templates/core/objectchange.html:52 tenancy/tables/contacts.py:90 -#: vpn/tables/l2vpn.py:59 +#: 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/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 +#: netbox/tenancy/tables/contacts.py:90 netbox/vpn/tables/l2vpn.py:59 msgid "Object Type" msgstr "Objekttype" -#: core/forms/filtersets.py:84 +#: netbox/core/forms/filtersets.py:84 msgid "Created after" msgstr "Oprettet efter" -#: core/forms/filtersets.py:89 +#: netbox/core/forms/filtersets.py:89 msgid "Created before" msgstr "Oprettet før" -#: core/forms/filtersets.py:94 +#: netbox/core/forms/filtersets.py:94 msgid "Scheduled after" msgstr "Planlagt efter" -#: core/forms/filtersets.py:99 +#: netbox/core/forms/filtersets.py:99 msgid "Scheduled before" msgstr "Planlagt før" -#: core/forms/filtersets.py:104 +#: netbox/core/forms/filtersets.py:104 msgid "Started after" msgstr "Startet efter" -#: core/forms/filtersets.py:109 +#: netbox/core/forms/filtersets.py:109 msgid "Started before" msgstr "Startet før" -#: core/forms/filtersets.py:114 +#: netbox/core/forms/filtersets.py:114 msgid "Completed after" msgstr "Færdiggjort efter" -#: core/forms/filtersets.py:119 +#: netbox/core/forms/filtersets.py:119 msgid "Completed before" msgstr "Færdiggjort før" -#: core/forms/filtersets.py:126 core/forms/filtersets.py:155 -#: dcim/forms/bulk_edit.py:456 dcim/forms/filtersets.py:418 -#: dcim/forms/filtersets.py:462 dcim/forms/model_forms.py:316 -#: extras/forms/filtersets.py:456 extras/forms/filtersets.py:475 -#: extras/tables/tables.py:302 extras/tables/tables.py:342 -#: templates/core/objectchange.html:36 templates/dcim/rackreservation.html:58 -#: templates/extras/savedfilter.html:21 templates/inc/user_menu.html:33 -#: templates/users/token.html:21 templates/users/user.html:6 -#: templates/users/user.html:14 users/filtersets.py:107 -#: users/filtersets.py:174 users/forms/filtersets.py:84 -#: users/forms/filtersets.py:125 users/forms/model_forms.py:155 -#: users/forms/model_forms.py:192 users/tables.py:19 +#: 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/extras/tables/tables.py:302 netbox/extras/tables/tables.py:342 +#: netbox/templates/core/objectchange.html:36 +#: netbox/templates/dcim/rackreservation.html:58 +#: netbox/templates/extras/savedfilter.html:21 +#: netbox/templates/inc/user_menu.html:33 netbox/templates/users/token.html:21 +#: netbox/templates/users/user.html:6 netbox/templates/users/user.html:14 +#: netbox/users/filtersets.py:107 netbox/users/filtersets.py:174 +#: netbox/users/forms/filtersets.py:84 netbox/users/forms/filtersets.py:125 +#: netbox/users/forms/model_forms.py:155 netbox/users/forms/model_forms.py:192 +#: netbox/users/tables.py:19 msgid "User" msgstr "Bruger" -#: core/forms/filtersets.py:134 core/tables/change_logging.py:15 -#: extras/tables/tables.py:609 extras/tables/tables.py:646 -#: templates/core/objectchange.html:32 +#: netbox/core/forms/filtersets.py:134 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 "Tid" -#: core/forms/filtersets.py:139 extras/forms/filtersets.py:445 +#: netbox/core/forms/filtersets.py:139 netbox/extras/forms/filtersets.py:445 msgid "After" msgstr "Efter" -#: core/forms/filtersets.py:144 extras/forms/filtersets.py:450 +#: netbox/core/forms/filtersets.py:144 netbox/extras/forms/filtersets.py:450 msgid "Before" msgstr "Før" -#: core/forms/filtersets.py:148 core/tables/change_logging.py:29 -#: extras/forms/model_forms.py:396 templates/core/objectchange.html:46 -#: templates/extras/eventrule.html:71 +#: netbox/core/forms/filtersets.py:148 netbox/core/tables/change_logging.py:29 +#: netbox/extras/forms/model_forms.py:396 +#: netbox/templates/core/objectchange.html:46 +#: netbox/templates/extras/eventrule.html:71 msgid "Action" msgstr "Handling" -#: core/forms/model_forms.py:54 core/tables/data.py:46 -#: templates/core/datafile.html:27 templates/extras/report/base.html:33 -#: templates/extras/script/base.html:32 +#: netbox/core/forms/model_forms.py:54 netbox/core/tables/data.py:46 +#: netbox/templates/core/datafile.html:27 +#: netbox/templates/extras/report/base.html:33 +#: netbox/templates/extras/script/base.html:32 msgid "Source" msgstr "Kilde" -#: core/forms/model_forms.py:58 +#: netbox/core/forms/model_forms.py:58 msgid "Backend Parameters" msgstr "Backend-parametre" -#: core/forms/model_forms.py:96 +#: netbox/core/forms/model_forms.py:96 msgid "File Upload" msgstr "Upload af filer" -#: core/forms/model_forms.py:108 +#: netbox/core/forms/model_forms.py:108 msgid "Cannot upload a file and sync from an existing file" msgstr "Kan ikke uploade en fil og synkronisere fra en eksisterende fil" -#: core/forms/model_forms.py:110 +#: netbox/core/forms/model_forms.py:110 msgid "Must upload a file or select a data file to sync" msgstr "Skal uploade en fil eller vælge en datafil, der skal synkroniseres" -#: core/forms/model_forms.py:153 templates/dcim/rack_elevation_list.html:6 +#: netbox/core/forms/model_forms.py:153 +#: netbox/templates/dcim/rack_elevation_list.html:6 msgid "Rack Elevations" msgstr "Rackhøjder" -#: core/forms/model_forms.py:157 dcim/choices.py:1518 -#: dcim/forms/bulk_edit.py:969 dcim/forms/bulk_edit.py:1357 -#: dcim/forms/bulk_edit.py:1375 dcim/tables/racks.py:158 -#: netbox/navigation/menu.py:291 netbox/navigation/menu.py:295 +#: 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 msgid "Power" msgstr "Strøm" -#: core/forms/model_forms.py:159 netbox/navigation/menu.py:154 -#: templates/core/inc/config_data.html:37 +#: netbox/core/forms/model_forms.py:159 netbox/netbox/navigation/menu.py:154 +#: netbox/templates/core/inc/config_data.html:37 msgid "IPAM" msgstr "IPAM" -#: core/forms/model_forms.py:160 netbox/navigation/menu.py:230 -#: templates/core/inc/config_data.html:50 vpn/forms/bulk_edit.py:77 -#: vpn/forms/filtersets.py:43 vpn/forms/model_forms.py:61 -#: vpn/forms/model_forms.py:146 +#: netbox/core/forms/model_forms.py:160 netbox/netbox/navigation/menu.py:230 +#: netbox/templates/core/inc/config_data.html:50 +#: netbox/vpn/forms/bulk_edit.py:77 netbox/vpn/forms/filtersets.py:43 +#: netbox/vpn/forms/model_forms.py:61 netbox/vpn/forms/model_forms.py:146 msgid "Security" msgstr "Sikkerhed" -#: core/forms/model_forms.py:161 templates/core/inc/config_data.html:59 +#: netbox/core/forms/model_forms.py:161 +#: netbox/templates/core/inc/config_data.html:59 msgid "Banners" msgstr "Bannere" -#: core/forms/model_forms.py:162 templates/core/inc/config_data.html:80 +#: netbox/core/forms/model_forms.py:162 +#: netbox/templates/core/inc/config_data.html:80 msgid "Pagination" msgstr "Paginering" -#: core/forms/model_forms.py:163 extras/forms/bulk_edit.py:92 -#: extras/forms/filtersets.py:47 extras/forms/model_forms.py:116 -#: extras/forms/model_forms.py:129 templates/core/inc/config_data.html:93 +#: 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/model_forms.py:129 +#: netbox/templates/core/inc/config_data.html:93 msgid "Validation" msgstr "Validering" -#: core/forms/model_forms.py:164 templates/account/preferences.html:6 +#: netbox/core/forms/model_forms.py:164 +#: netbox/templates/account/preferences.html:6 msgid "User Preferences" msgstr "Brugerpræferencer" -#: core/forms/model_forms.py:167 dcim/forms/filtersets.py:732 -#: templates/core/inc/config_data.html:127 users/forms/model_forms.py:64 +#: netbox/core/forms/model_forms.py:167 netbox/dcim/forms/filtersets.py:732 +#: netbox/templates/core/inc/config_data.html:127 +#: netbox/users/forms/model_forms.py:64 msgid "Miscellaneous" msgstr "Diverse" -#: core/forms/model_forms.py:169 +#: netbox/core/forms/model_forms.py:169 msgid "Config Revision" msgstr "Konfigurationsrevision" -#: core/forms/model_forms.py:208 +#: netbox/core/forms/model_forms.py:208 msgid "This parameter has been defined statically and cannot be modified." msgstr "Denne parameter er defineret statisk og kan ikke ændres." -#: core/forms/model_forms.py:216 +#: netbox/core/forms/model_forms.py:216 #, python-brace-format msgid "Current value: {value}" msgstr "Nuværende værdi: {value}" -#: core/forms/model_forms.py:218 +#: netbox/core/forms/model_forms.py:218 msgid " (default)" msgstr " (standard)" -#: core/models/change_logging.py:29 +#: netbox/core/models/change_logging.py:29 msgid "time" msgstr "tid" -#: core/models/change_logging.py:42 +#: netbox/core/models/change_logging.py:42 msgid "user name" msgstr "brugernavn" -#: core/models/change_logging.py:47 +#: netbox/core/models/change_logging.py:47 msgid "request ID" msgstr "forespørgsels-id" -#: core/models/change_logging.py:52 extras/models/staging.py:69 +#: netbox/core/models/change_logging.py:52 netbox/extras/models/staging.py:69 msgid "action" msgstr "handling" -#: core/models/change_logging.py:86 +#: netbox/core/models/change_logging.py:86 msgid "pre-change data" msgstr "data forud for ændring" -#: core/models/change_logging.py:92 +#: netbox/core/models/change_logging.py:92 msgid "post-change data" msgstr "data efter ændring" -#: core/models/change_logging.py:106 +#: netbox/core/models/change_logging.py:106 msgid "object change" msgstr "objektændring" -#: core/models/change_logging.py:107 +#: netbox/core/models/change_logging.py:107 msgid "object changes" msgstr "objektændringer" -#: core/models/change_logging.py:123 +#: netbox/core/models/change_logging.py:123 #, python-brace-format msgid "Change logging is not supported for this object type ({type})." msgstr "Ændringslogføring understøttes ikke for denne objekttype ({type})." -#: core/models/config.py:18 core/models/data.py:266 core/models/files.py:27 -#: core/models/jobs.py:49 extras/models/models.py:730 -#: extras/models/notifications.py:39 extras/models/notifications.py:186 -#: netbox/models/features.py:53 users/models/tokens.py:32 +#: netbox/core/models/config.py:18 netbox/core/models/data.py:266 +#: 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/notifications.py:186 +#: netbox/netbox/models/features.py:53 netbox/users/models/tokens.py:32 msgid "created" msgstr "oprettet" -#: core/models/config.py:22 +#: netbox/core/models/config.py:22 msgid "comment" msgstr "kommentar" -#: core/models/config.py:29 +#: netbox/core/models/config.py:29 msgid "configuration data" msgstr "konfigurationsdata" -#: core/models/config.py:36 +#: netbox/core/models/config.py:36 msgid "config revision" msgstr "konfigurationsrevision" -#: core/models/config.py:37 +#: netbox/core/models/config.py:37 msgid "config revisions" msgstr "konfigurationsrevisioner" -#: core/models/config.py:41 +#: netbox/core/models/config.py:41 msgid "Default configuration" msgstr "Standardkonfiguration" -#: core/models/config.py:43 +#: netbox/core/models/config.py:43 msgid "Current configuration" msgstr "Nuværende konfiguration" -#: core/models/config.py:44 +#: netbox/core/models/config.py:44 #, python-brace-format msgid "Config revision #{id}" msgstr "Konfigurationsrevision #{id}" -#: core/models/data.py:44 dcim/models/cables.py:43 -#: dcim/models/device_component_templates.py:203 -#: dcim/models/device_component_templates.py:237 -#: dcim/models/device_component_templates.py:272 -#: dcim/models/device_component_templates.py:334 -#: dcim/models/device_component_templates.py:413 -#: dcim/models/device_component_templates.py:512 -#: dcim/models/device_component_templates.py:612 -#: dcim/models/device_components.py:283 dcim/models/device_components.py:312 -#: dcim/models/device_components.py:345 dcim/models/device_components.py:463 -#: dcim/models/device_components.py:605 dcim/models/device_components.py:970 -#: dcim/models/device_components.py:1044 dcim/models/power.py:102 -#: extras/models/customfields.py:78 extras/models/search.py:41 -#: virtualization/models/clusters.py:61 vpn/models/l2vpn.py:32 +#: 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/extras/models/search.py:41 +#: netbox/virtualization/models/clusters.py:61 netbox/vpn/models/l2vpn.py:32 msgid "type" msgstr "type" -#: core/models/data.py:49 extras/choices.py:37 extras/models/models.py:164 -#: extras/tables/tables.py:656 templates/core/datasource.html:58 -#: templates/core/plugin.html:66 +#: netbox/core/models/data.py:49 netbox/extras/choices.py:37 +#: netbox/extras/models/models.py:164 netbox/extras/tables/tables.py:656 +#: netbox/templates/core/datasource.html:58 +#: netbox/templates/core/plugin.html:66 msgid "URL" msgstr "URL" -#: core/models/data.py:59 dcim/models/device_component_templates.py:418 -#: dcim/models/device_components.py:512 extras/models/models.py:70 -#: extras/models/models.py:301 extras/models/models.py:526 -#: users/models/permissions.py:29 +#: netbox/core/models/data.py:59 +#: netbox/dcim/models/device_component_templates.py:418 +#: netbox/dcim/models/device_components.py:512 +#: 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" msgstr "aktiveret" -#: core/models/data.py:63 +#: netbox/core/models/data.py:63 msgid "ignore rules" msgstr "ignorere regler" -#: core/models/data.py:65 +#: netbox/core/models/data.py:65 msgid "Patterns (one per line) matching files to ignore when syncing" msgstr "" "Mønstre (en pr. linje), der matcher filer, der skal ignoreres ved " "synkronisering" -#: core/models/data.py:68 extras/models/models.py:534 +#: netbox/core/models/data.py:68 netbox/extras/models/models.py:534 msgid "parameters" msgstr "parametre" -#: core/models/data.py:73 +#: netbox/core/models/data.py:73 msgid "last synced" msgstr "sidst synkroniseret" -#: core/models/data.py:81 +#: netbox/core/models/data.py:81 msgid "data source" msgstr "datakilde" -#: core/models/data.py:82 +#: netbox/core/models/data.py:82 msgid "data sources" msgstr "datakilder" -#: core/models/data.py:122 +#: netbox/core/models/data.py:122 #, python-brace-format msgid "Unknown backend type: {type}" msgstr "Ukendt backend-type: {type}" -#: core/models/data.py:164 +#: netbox/core/models/data.py:164 msgid "Cannot initiate sync; syncing already in progress." msgstr "Synkronisering kan ikke startes. Synkronisering er allerede i gang." -#: core/models/data.py:177 +#: netbox/core/models/data.py:177 msgid "" "There was an error initializing the backend. A dependency needs to be " "installed: " @@ -1893,1221 +2160,1283 @@ msgstr "" "Der opstod en fejl ved initialisering af backend. En afhængighed skal " "installeres: " -#: core/models/data.py:270 core/models/files.py:31 -#: netbox/models/features.py:59 +#: netbox/core/models/data.py:270 netbox/core/models/files.py:31 +#: netbox/netbox/models/features.py:59 msgid "last updated" msgstr "sidst opdateret" -#: core/models/data.py:280 dcim/models/cables.py:444 +#: netbox/core/models/data.py:280 netbox/dcim/models/cables.py:444 msgid "path" msgstr "sti" -#: core/models/data.py:283 +#: netbox/core/models/data.py:283 msgid "File path relative to the data source's root" msgstr "Filsti i forhold til datakildens rod" -#: core/models/data.py:287 ipam/models/ip.py:503 +#: netbox/core/models/data.py:287 netbox/ipam/models/ip.py:503 msgid "size" msgstr "størrelse" -#: core/models/data.py:290 +#: netbox/core/models/data.py:290 msgid "hash" msgstr "hash" -#: core/models/data.py:294 +#: netbox/core/models/data.py:294 msgid "Length must be 64 hexadecimal characters." msgstr "Længden skal være 64 hexadecimale tegn." -#: core/models/data.py:296 +#: netbox/core/models/data.py:296 msgid "SHA256 hash of the file data" msgstr "SHA256-hash af fildataene" -#: core/models/data.py:313 +#: netbox/core/models/data.py:313 msgid "data file" msgstr "datafil" -#: core/models/data.py:314 +#: netbox/core/models/data.py:314 msgid "data files" msgstr "datafiler" -#: core/models/data.py:401 +#: netbox/core/models/data.py:401 msgid "auto sync record" msgstr "automatisk synkroniseringsrekord" -#: core/models/data.py:402 +#: netbox/core/models/data.py:402 msgid "auto sync records" msgstr "automatisk synkronisering af poster" -#: core/models/files.py:37 +#: netbox/core/models/files.py:37 msgid "file root" msgstr "root-fil" -#: core/models/files.py:42 +#: netbox/core/models/files.py:42 msgid "file path" msgstr "filsti" -#: core/models/files.py:44 +#: netbox/core/models/files.py:44 msgid "File path relative to the designated root path" msgstr "Filsti i forhold til den angivne rodsti" -#: core/models/files.py:61 +#: netbox/core/models/files.py:61 msgid "managed file" msgstr "administreret fil" -#: core/models/files.py:62 +#: netbox/core/models/files.py:62 msgid "managed files" msgstr "administrerede filer" -#: core/models/jobs.py:53 +#: netbox/core/models/jobs.py:54 msgid "scheduled" msgstr "planlagt" -#: core/models/jobs.py:58 +#: netbox/core/models/jobs.py:59 msgid "interval" msgstr "interval" -#: core/models/jobs.py:64 +#: netbox/core/models/jobs.py:65 msgid "Recurrence interval (in minutes)" msgstr "Gentagelsesinterval (i minutter)" -#: core/models/jobs.py:67 +#: netbox/core/models/jobs.py:68 msgid "started" msgstr "startede" -#: core/models/jobs.py:72 +#: netbox/core/models/jobs.py:73 msgid "completed" msgstr "afsluttet" -#: core/models/jobs.py:90 extras/models/models.py:101 -#: extras/models/staging.py:87 +#: netbox/core/models/jobs.py:91 netbox/extras/models/models.py:101 +#: netbox/extras/models/staging.py:87 msgid "data" msgstr "data" -#: core/models/jobs.py:95 +#: netbox/core/models/jobs.py:96 msgid "error" msgstr "fejl" -#: core/models/jobs.py:100 +#: netbox/core/models/jobs.py:101 msgid "job ID" msgstr "job-ID" -#: core/models/jobs.py:111 +#: netbox/core/models/jobs.py:112 msgid "job" msgstr "job" -#: core/models/jobs.py:112 +#: netbox/core/models/jobs.py:113 msgid "jobs" msgstr "stillinger" -#: core/models/jobs.py:135 +#: netbox/core/models/jobs.py:136 #, python-brace-format msgid "Jobs cannot be assigned to this object type ({type})." msgstr "Job kan ikke tildeles denne objekttype ({type})." -#: core/models/jobs.py:185 +#: netbox/core/models/jobs.py:190 #, python-brace-format msgid "Invalid status for job termination. Choices are: {choices}" msgstr "Ugyldig status for opsigelse af job. Valgmulighederne er: {choices}" -#: core/models/jobs.py:216 +#: netbox/core/models/jobs.py:221 msgid "" "enqueue() cannot be called with values for both schedule_at and immediate." msgstr "" "enqueue () kan ikke kaldes med værdier for både schedule_at og instant." -#: core/signals.py:126 +#: netbox/core/signals.py:126 #, python-brace-format msgid "Deletion is prevented by a protection rule: {message}" msgstr "Sletning forhindres af en beskyttelsesregel: {message}" -#: core/tables/change_logging.py:25 templates/account/profile.html:19 -#: templates/users/user.html:21 +#: netbox/core/tables/change_logging.py:25 +#: netbox/templates/account/profile.html:19 +#: netbox/templates/users/user.html:21 msgid "Full Name" msgstr "Fulde navn" -#: core/tables/change_logging.py:37 core/tables/jobs.py:21 -#: extras/choices.py:41 extras/tables/tables.py:279 -#: extras/tables/tables.py:297 extras/tables/tables.py:329 -#: extras/tables/tables.py:409 extras/tables/tables.py:470 -#: extras/tables/tables.py:576 extras/tables/tables.py:616 -#: extras/tables/tables.py:653 netbox/tables/tables.py:244 -#: templates/core/objectchange.html:58 templates/extras/eventrule.html:78 -#: templates/extras/journalentry.html:18 tenancy/tables/contacts.py:93 -#: vpn/tables/l2vpn.py:64 +#: netbox/core/tables/change_logging.py:37 netbox/core/tables/jobs.py:21 +#: netbox/extras/choices.py:41 netbox/extras/tables/tables.py:279 +#: 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/templates/core/objectchange.html:58 +#: netbox/templates/extras/eventrule.html:78 +#: netbox/templates/extras/journalentry.html:18 +#: netbox/tenancy/tables/contacts.py:93 netbox/vpn/tables/l2vpn.py:64 msgid "Object" msgstr "Objekt" -#: core/tables/change_logging.py:42 templates/core/objectchange.html:68 +#: netbox/core/tables/change_logging.py:42 +#: netbox/templates/core/objectchange.html:68 msgid "Request ID" msgstr "Anmodnings-ID" -#: core/tables/config.py:21 users/forms/filtersets.py:44 users/tables.py:39 +#: netbox/core/tables/config.py:21 netbox/users/forms/filtersets.py:44 +#: netbox/users/tables.py:39 msgid "Is Active" msgstr "Er aktiv" -#: core/tables/data.py:50 templates/core/datafile.html:31 +#: netbox/core/tables/data.py:50 netbox/templates/core/datafile.html:31 msgid "Path" msgstr "Sti" -#: core/tables/data.py:54 templates/extras/inc/result_pending.html:7 +#: netbox/core/tables/data.py:54 +#: netbox/templates/extras/inc/result_pending.html:7 msgid "Last updated" msgstr "Sidst opdateret" -#: core/tables/jobs.py:10 core/tables/tasks.py:76 -#: dcim/tables/devicetypes.py:164 extras/tables/tables.py:216 -#: extras/tables/tables.py:460 netbox/tables/tables.py:189 -#: templates/dcim/virtualchassis_edit.html:52 utilities/forms/forms.py:73 -#: wireless/tables/wirelesslink.py:17 +#: 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/templates/dcim/virtualchassis_edit.html:52 +#: netbox/utilities/forms/forms.py:73 +#: netbox/wireless/tables/wirelesslink.py:17 msgid "ID" msgstr "ID" -#: core/tables/jobs.py:35 +#: netbox/core/tables/jobs.py:35 msgid "Interval" msgstr "Intervaller" -#: core/tables/plugins.py:14 templates/vpn/ipsecprofile.html:44 -#: vpn/forms/bulk_edit.py:141 vpn/forms/bulk_import.py:172 -#: vpn/tables/crypto.py:61 +#: netbox/core/tables/plugins.py:14 netbox/templates/vpn/ipsecprofile.html:44 +#: netbox/vpn/forms/bulk_edit.py:141 netbox/vpn/forms/bulk_import.py:172 +#: netbox/vpn/tables/crypto.py:61 msgid "Version" msgstr "Udgave" -#: core/tables/plugins.py:19 templates/core/datafile.html:38 +#: netbox/core/tables/plugins.py:19 netbox/templates/core/datafile.html:38 msgid "Last Updated" msgstr "Senest opdateret" -#: core/tables/plugins.py:23 +#: netbox/core/tables/plugins.py:23 msgid "Minimum NetBox Version" msgstr "Minimum NetBox-version" -#: core/tables/plugins.py:27 +#: netbox/core/tables/plugins.py:27 msgid "Maximum NetBox Version" msgstr "Maksimal NetBox-version" -#: core/tables/plugins.py:31 core/tables/plugins.py:74 +#: netbox/core/tables/plugins.py:31 netbox/core/tables/plugins.py:74 msgid "No plugin data found" msgstr "Ingen plugin-data fundet" -#: core/tables/plugins.py:48 templates/core/plugin.html:62 +#: netbox/core/tables/plugins.py:48 netbox/templates/core/plugin.html:62 msgid "Author" msgstr "Forfatter" -#: core/tables/plugins.py:54 +#: netbox/core/tables/plugins.py:54 msgid "Installed" msgstr "Installeret" -#: core/tables/plugins.py:57 templates/core/plugin.html:84 +#: netbox/core/tables/plugins.py:57 netbox/templates/core/plugin.html:84 msgid "Certified" msgstr "Certificeret" -#: core/tables/plugins.py:60 +#: netbox/core/tables/plugins.py:60 msgid "Published" msgstr "Udgivet" -#: core/tables/plugins.py:66 +#: netbox/core/tables/plugins.py:66 msgid "Installed Version" msgstr "Installeret version" -#: core/tables/plugins.py:70 +#: netbox/core/tables/plugins.py:70 msgid "Latest Version" msgstr "Seneste version" -#: core/tables/tasks.py:18 +#: netbox/core/tables/tasks.py:18 msgid "Oldest Task" msgstr "Ældste opgave" -#: core/tables/tasks.py:42 templates/core/rq_worker_list.html:39 +#: netbox/core/tables/tasks.py:42 netbox/templates/core/rq_worker_list.html:39 msgid "Workers" msgstr "Arbejdstagere" -#: core/tables/tasks.py:46 vpn/tables/tunnels.py:88 +#: netbox/core/tables/tasks.py:46 netbox/vpn/tables/tunnels.py:88 msgid "Host" msgstr "Værten" -#: core/tables/tasks.py:50 ipam/forms/filtersets.py:535 +#: netbox/core/tables/tasks.py:50 netbox/ipam/forms/filtersets.py:535 msgid "Port" msgstr "Port" -#: core/tables/tasks.py:54 +#: netbox/core/tables/tasks.py:54 msgid "DB" msgstr "DB" -#: core/tables/tasks.py:58 +#: netbox/core/tables/tasks.py:58 msgid "Scheduler PID" msgstr "Scheduler PID" -#: core/tables/tasks.py:62 +#: netbox/core/tables/tasks.py:62 msgid "No queues found" msgstr "Ingen køer fundet" -#: core/tables/tasks.py:82 +#: netbox/core/tables/tasks.py:82 msgid "Enqueued" msgstr "Stillet i kø" -#: core/tables/tasks.py:85 +#: netbox/core/tables/tasks.py:85 msgid "Ended" msgstr "Afsluttet" -#: core/tables/tasks.py:93 templates/core/rq_task.html:85 +#: netbox/core/tables/tasks.py:93 netbox/templates/core/rq_task.html:85 msgid "Callable" msgstr "Opkaldbar" -#: core/tables/tasks.py:97 +#: netbox/core/tables/tasks.py:97 msgid "No tasks found" msgstr "Ingen opgaver fundet" -#: core/tables/tasks.py:118 templates/core/rq_worker.html:47 +#: netbox/core/tables/tasks.py:118 netbox/templates/core/rq_worker.html:47 msgid "State" msgstr "Tilstand" -#: core/tables/tasks.py:121 templates/core/rq_worker.html:51 +#: netbox/core/tables/tasks.py:121 netbox/templates/core/rq_worker.html:51 msgid "Birth" msgstr "Fødsel" -#: core/tables/tasks.py:124 templates/core/rq_worker.html:59 +#: netbox/core/tables/tasks.py:124 netbox/templates/core/rq_worker.html:59 msgid "PID" msgstr "PID" -#: core/tables/tasks.py:128 +#: netbox/core/tables/tasks.py:128 msgid "No workers found" msgstr "Ingen arbejdere fundet" -#: core/views.py:90 +#: netbox/core/views.py:90 #, python-brace-format msgid "Queued job #{id} to sync {datasource}" msgstr "Jobnummer i kø{id} at synkronisere {datasource}" -#: core/views.py:319 +#: netbox/core/views.py:319 #, python-brace-format msgid "Restored configuration revision #{id}" msgstr "Gendannet konfigurationsrevision #{id}" -#: core/views.py:412 core/views.py:455 core/views.py:531 +#: 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 "Job {job_id} ikke fundet" -#: core/views.py:463 +#: netbox/core/views.py:463 #, python-brace-format msgid "Job {id} has been deleted." msgstr "Job {id} er blevet slettet." -#: core/views.py:465 +#: netbox/core/views.py:465 #, python-brace-format msgid "Error deleting job {id}: {error}" msgstr "Fejl ved sletning af job {id}: {error}" -#: core/views.py:478 core/views.py:496 +#: netbox/core/views.py:478 netbox/core/views.py:496 #, python-brace-format msgid "Job {id} not found." msgstr "Job {id} ikke fundet." -#: core/views.py:484 +#: netbox/core/views.py:484 #, python-brace-format msgid "Job {id} has been re-enqueued." msgstr "Job {id} er blevet sat i kø igen." -#: core/views.py:519 +#: netbox/core/views.py:519 #, python-brace-format msgid "Job {id} has been enqueued." msgstr "Job {id} er blevet sat i kø." -#: core/views.py:538 +#: netbox/core/views.py:538 #, python-brace-format msgid "Job {id} has been stopped." msgstr "Job {id} er blevet stoppet." -#: core/views.py:540 +#: netbox/core/views.py:540 #, python-brace-format msgid "Failed to stop job {id}" msgstr "Det lykkedes ikke at stoppe jobbet {id}" -#: core/views.py:678 +#: netbox/core/views.py:674 msgid "Plugins catalog could not be loaded" msgstr "Plugin-kataloget kunne ikke indlæses" -#: core/views.py:712 +#: netbox/core/views.py:708 #, python-brace-format msgid "Plugin {name} not found" msgstr "Plugin {name} ikke fundet" -#: dcim/api/serializers_/devices.py:49 dcim/api/serializers_/devicetypes.py:25 +#: netbox/dcim/api/serializers_/devices.py:49 +#: netbox/dcim/api/serializers_/devicetypes.py:25 msgid "Position (U)" msgstr "Position (U)" -#: dcim/api/serializers_/racks.py:112 templates/dcim/rack.html:28 +#: netbox/dcim/api/serializers_/racks.py:112 +#: netbox/templates/dcim/rack.html:28 msgid "Facility ID" msgstr "Anlægs-id" -#: dcim/choices.py:21 virtualization/choices.py:21 +#: netbox/dcim/choices.py:21 netbox/virtualization/choices.py:21 msgid "Staging" msgstr "Iscenesættelse" -#: dcim/choices.py:23 dcim/choices.py:189 dcim/choices.py:240 -#: dcim/choices.py:1531 virtualization/choices.py:23 -#: virtualization/choices.py:48 +#: 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 msgid "Decommissioning" msgstr "Nedlæggelse" -#: dcim/choices.py:24 +#: netbox/dcim/choices.py:24 msgid "Retired" msgstr "Pensioneret" -#: dcim/choices.py:65 +#: netbox/dcim/choices.py:65 msgid "2-post frame" msgstr "2-stolpe ramme" -#: dcim/choices.py:66 +#: netbox/dcim/choices.py:66 msgid "4-post frame" msgstr "4-stolpe ramme" -#: dcim/choices.py:67 +#: netbox/dcim/choices.py:67 msgid "4-post cabinet" msgstr "4-stolpe skab" -#: dcim/choices.py:68 +#: netbox/dcim/choices.py:68 msgid "Wall-mounted frame" msgstr "Vægmonteret ramme" -#: dcim/choices.py:69 +#: netbox/dcim/choices.py:69 msgid "Wall-mounted frame (vertical)" msgstr "Vægmonteret ramme (lodret)" -#: dcim/choices.py:70 +#: netbox/dcim/choices.py:70 msgid "Wall-mounted cabinet" msgstr "Vægmonteret skab" -#: dcim/choices.py:71 +#: netbox/dcim/choices.py:71 msgid "Wall-mounted cabinet (vertical)" msgstr "Vægmonteret skab (lodret)" -#: dcim/choices.py:83 dcim/choices.py:84 dcim/choices.py:85 dcim/choices.py:86 +#: netbox/dcim/choices.py:83 netbox/dcim/choices.py:84 +#: netbox/dcim/choices.py:85 netbox/dcim/choices.py:86 #, python-brace-format msgid "{n} inches" msgstr "{n} tommer" -#: dcim/choices.py:100 ipam/choices.py:32 ipam/choices.py:50 -#: ipam/choices.py:70 ipam/choices.py:155 wireless/choices.py:26 +#: netbox/dcim/choices.py:100 netbox/ipam/choices.py:32 +#: netbox/ipam/choices.py:50 netbox/ipam/choices.py:70 +#: netbox/ipam/choices.py:155 netbox/wireless/choices.py:26 msgid "Reserved" msgstr "Reserveret" -#: dcim/choices.py:101 templates/dcim/device.html:259 +#: netbox/dcim/choices.py:101 netbox/templates/dcim/device.html:259 msgid "Available" msgstr "Tilgængelig" -#: dcim/choices.py:104 ipam/choices.py:33 ipam/choices.py:51 -#: ipam/choices.py:71 ipam/choices.py:156 wireless/choices.py:28 +#: netbox/dcim/choices.py:104 netbox/ipam/choices.py:33 +#: netbox/ipam/choices.py:51 netbox/ipam/choices.py:71 +#: netbox/ipam/choices.py:156 netbox/wireless/choices.py:28 msgid "Deprecated" msgstr "Forældet" -#: dcim/choices.py:114 templates/dcim/inc/panels/racktype_dimensions.html:41 +#: netbox/dcim/choices.py:114 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:41 msgid "Millimeters" msgstr "Millimeter" -#: dcim/choices.py:115 dcim/choices.py:1553 +#: netbox/dcim/choices.py:115 netbox/dcim/choices.py:1555 msgid "Inches" msgstr "Tommer" -#: dcim/choices.py:136 dcim/choices.py:207 dcim/choices.py:254 +#: netbox/dcim/choices.py:136 netbox/dcim/choices.py:207 +#: netbox/dcim/choices.py:254 msgid "Front to rear" msgstr "Foran til bag" -#: dcim/choices.py:137 dcim/choices.py:208 dcim/choices.py:255 +#: netbox/dcim/choices.py:137 netbox/dcim/choices.py:208 +#: netbox/dcim/choices.py:255 msgid "Rear to front" msgstr "Bagsiden til forsiden" -#: dcim/choices.py:151 dcim/forms/bulk_edit.py:68 dcim/forms/bulk_edit.py:87 -#: dcim/forms/bulk_edit.py:173 dcim/forms/bulk_edit.py:1405 -#: dcim/forms/bulk_import.py:60 dcim/forms/bulk_import.py:74 -#: dcim/forms/bulk_import.py:137 dcim/forms/bulk_import.py:566 -#: dcim/forms/bulk_import.py:833 dcim/forms/bulk_import.py:1088 -#: dcim/forms/filtersets.py:234 dcim/forms/model_forms.py:74 -#: dcim/forms/model_forms.py:93 dcim/forms/model_forms.py:170 -#: dcim/forms/model_forms.py:1062 dcim/forms/model_forms.py:1502 -#: dcim/forms/object_import.py:176 dcim/tables/devices.py:656 -#: dcim/tables/devices.py:869 dcim/tables/devices.py:954 -#: extras/tables/tables.py:223 ipam/tables/fhrp.py:59 ipam/tables/ip.py:378 -#: ipam/tables/services.py:44 templates/dcim/interface.html:102 -#: templates/dcim/interface.html:309 templates/dcim/location.html:41 -#: templates/dcim/region.html:37 templates/dcim/sitegroup.html:37 -#: templates/ipam/service.html:28 templates/tenancy/contactgroup.html:29 -#: templates/tenancy/tenantgroup.html:37 -#: templates/virtualization/vminterface.html:39 -#: templates/wireless/wirelesslangroup.html:37 tenancy/forms/bulk_edit.py:27 -#: tenancy/forms/bulk_edit.py:61 tenancy/forms/bulk_import.py:24 -#: tenancy/forms/bulk_import.py:58 tenancy/forms/model_forms.py:25 -#: tenancy/forms/model_forms.py:68 virtualization/forms/bulk_edit.py:207 -#: virtualization/forms/bulk_import.py:151 -#: virtualization/tables/virtualmachines.py:162 wireless/forms/bulk_edit.py:24 -#: wireless/forms/bulk_import.py:21 wireless/forms/model_forms.py:21 +#: 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/templates/dcim/location.html:41 netbox/templates/dcim/region.html:37 +#: netbox/templates/dcim/sitegroup.html:37 +#: netbox/templates/ipam/service.html:28 +#: netbox/templates/tenancy/contactgroup.html:29 +#: netbox/templates/tenancy/tenantgroup.html:37 +#: netbox/templates/virtualization/vminterface.html:39 +#: netbox/templates/wireless/wirelesslangroup.html:37 +#: netbox/tenancy/forms/bulk_edit.py:27 netbox/tenancy/forms/bulk_edit.py:61 +#: netbox/tenancy/forms/bulk_import.py:24 +#: netbox/tenancy/forms/bulk_import.py:58 +#: netbox/tenancy/forms/model_forms.py:25 +#: netbox/tenancy/forms/model_forms.py:68 +#: netbox/virtualization/forms/bulk_edit.py:207 +#: netbox/virtualization/forms/bulk_import.py:151 +#: netbox/virtualization/tables/virtualmachines.py:162 +#: netbox/wireless/forms/bulk_edit.py:24 +#: netbox/wireless/forms/bulk_import.py:21 +#: netbox/wireless/forms/model_forms.py:21 msgid "Parent" msgstr "Forælder" -#: dcim/choices.py:152 +#: netbox/dcim/choices.py:152 msgid "Child" msgstr "Barn" -#: dcim/choices.py:166 templates/dcim/device.html:340 -#: templates/dcim/rack.html:133 templates/dcim/rack_elevation_list.html:20 -#: templates/dcim/rackreservation.html:76 +#: netbox/dcim/choices.py:166 netbox/templates/dcim/device.html:340 +#: netbox/templates/dcim/rack.html:133 +#: netbox/templates/dcim/rack_elevation_list.html:20 +#: netbox/templates/dcim/rackreservation.html:76 msgid "Front" msgstr "Front" -#: dcim/choices.py:167 templates/dcim/device.html:346 -#: templates/dcim/rack.html:139 templates/dcim/rack_elevation_list.html:21 -#: templates/dcim/rackreservation.html:82 +#: netbox/dcim/choices.py:167 netbox/templates/dcim/device.html:346 +#: netbox/templates/dcim/rack.html:139 +#: netbox/templates/dcim/rack_elevation_list.html:21 +#: netbox/templates/dcim/rackreservation.html:82 msgid "Rear" msgstr "Bageste" -#: dcim/choices.py:186 dcim/choices.py:238 virtualization/choices.py:46 +#: netbox/dcim/choices.py:186 netbox/dcim/choices.py:238 +#: netbox/virtualization/choices.py:46 msgid "Staged" msgstr "Iscenesat" -#: dcim/choices.py:188 +#: netbox/dcim/choices.py:188 msgid "Inventory" msgstr "Inventar" -#: dcim/choices.py:209 dcim/choices.py:256 +#: netbox/dcim/choices.py:209 netbox/dcim/choices.py:256 msgid "Left to right" msgstr "Venstre mod højre" -#: dcim/choices.py:210 dcim/choices.py:257 +#: netbox/dcim/choices.py:210 netbox/dcim/choices.py:257 msgid "Right to left" msgstr "Højre til venstre" -#: dcim/choices.py:211 dcim/choices.py:258 +#: netbox/dcim/choices.py:211 netbox/dcim/choices.py:258 msgid "Side to rear" msgstr "Side til bagside" -#: dcim/choices.py:212 +#: netbox/dcim/choices.py:212 msgid "Rear to side" msgstr "Bag til side" -#: dcim/choices.py:213 +#: netbox/dcim/choices.py:213 msgid "Bottom to top" msgstr "Bund til top" -#: dcim/choices.py:214 +#: netbox/dcim/choices.py:214 msgid "Top to bottom" msgstr "Top til bund" -#: dcim/choices.py:215 dcim/choices.py:259 dcim/choices.py:1303 +#: netbox/dcim/choices.py:215 netbox/dcim/choices.py:259 +#: netbox/dcim/choices.py:1305 msgid "Passive" msgstr "Passiv" -#: dcim/choices.py:216 +#: netbox/dcim/choices.py:216 msgid "Mixed" msgstr "Blandet" -#: dcim/choices.py:484 dcim/choices.py:733 +#: netbox/dcim/choices.py:484 netbox/dcim/choices.py:733 msgid "NEMA (Non-locking)" msgstr "NEMA (Ikke-låsende)" -#: dcim/choices.py:506 dcim/choices.py:755 +#: netbox/dcim/choices.py:506 netbox/dcim/choices.py:755 msgid "NEMA (Locking)" msgstr "NEMA (Låsning)" -#: dcim/choices.py:530 dcim/choices.py:779 +#: netbox/dcim/choices.py:530 netbox/dcim/choices.py:779 msgid "California Style" msgstr "Californiens stil" -#: dcim/choices.py:538 +#: netbox/dcim/choices.py:538 msgid "International/ITA" msgstr "International/ITA" -#: dcim/choices.py:573 dcim/choices.py:814 +#: netbox/dcim/choices.py:573 netbox/dcim/choices.py:814 msgid "Proprietary" msgstr "Proprietær" -#: dcim/choices.py:581 dcim/choices.py:824 dcim/choices.py:1219 -#: dcim/choices.py:1221 dcim/choices.py:1447 dcim/choices.py:1449 -#: netbox/navigation/menu.py:200 +#: 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 msgid "Other" msgstr "Andet" -#: dcim/choices.py:787 +#: netbox/dcim/choices.py:787 msgid "ITA/International" msgstr "ITA/International" -#: dcim/choices.py:854 +#: netbox/dcim/choices.py:854 msgid "Physical" msgstr "Fysisk" -#: dcim/choices.py:855 dcim/choices.py:1023 +#: netbox/dcim/choices.py:855 netbox/dcim/choices.py:1024 msgid "Virtual" msgstr "Virtuel" -#: dcim/choices.py:856 dcim/choices.py:1097 dcim/forms/bulk_edit.py:1515 -#: dcim/forms/filtersets.py:1330 dcim/forms/model_forms.py:988 -#: dcim/forms/model_forms.py:1397 netbox/navigation/menu.py:140 -#: netbox/navigation/menu.py:144 templates/dcim/interface.html:210 +#: 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 msgid "Wireless" msgstr "Trådløs" -#: dcim/choices.py:1021 +#: netbox/dcim/choices.py:1022 msgid "Virtual interfaces" msgstr "Virtuelle grænseflader" -#: dcim/choices.py:1024 dcim/forms/bulk_edit.py:1410 -#: dcim/forms/bulk_import.py:840 dcim/forms/model_forms.py:974 -#: dcim/tables/devices.py:660 templates/dcim/interface.html:106 -#: templates/virtualization/vminterface.html:43 -#: virtualization/forms/bulk_edit.py:212 -#: virtualization/forms/bulk_import.py:158 -#: virtualization/tables/virtualmachines.py:166 +#: 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/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 msgid "Bridge" msgstr "Bro" -#: dcim/choices.py:1025 +#: netbox/dcim/choices.py:1026 msgid "Link Aggregation Group (LAG)" msgstr "Link Aggregation Group (LAG)" -#: dcim/choices.py:1029 +#: netbox/dcim/choices.py:1030 msgid "Ethernet (fixed)" msgstr "Ethernet (fast)" -#: dcim/choices.py:1044 +#: netbox/dcim/choices.py:1046 msgid "Ethernet (modular)" msgstr "Ethernet (modulopbygget)" -#: dcim/choices.py:1081 +#: netbox/dcim/choices.py:1083 msgid "Ethernet (backplane)" msgstr "Ethernet (bagplan)" -#: dcim/choices.py:1113 +#: netbox/dcim/choices.py:1115 msgid "Cellular" msgstr "Cellulær" -#: dcim/choices.py:1165 dcim/forms/filtersets.py:383 -#: dcim/forms/filtersets.py:809 dcim/forms/filtersets.py:963 -#: dcim/forms/filtersets.py:1542 templates/dcim/inventoryitem.html:52 -#: templates/dcim/virtualchassis_edit.html:54 +#: 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/templates/dcim/virtualchassis_edit.html:54 msgid "Serial" msgstr "Seriel" -#: dcim/choices.py:1180 +#: netbox/dcim/choices.py:1182 msgid "Coaxial" msgstr "Koaksial" -#: dcim/choices.py:1200 +#: netbox/dcim/choices.py:1202 msgid "Stacking" msgstr "Stabling" -#: dcim/choices.py:1250 +#: netbox/dcim/choices.py:1252 msgid "Half" msgstr "Halvdelen" -#: dcim/choices.py:1251 +#: netbox/dcim/choices.py:1253 msgid "Full" msgstr "Fuld" -#: dcim/choices.py:1252 netbox/preferences.py:31 wireless/choices.py:480 +#: netbox/dcim/choices.py:1254 netbox/netbox/preferences.py:31 +#: netbox/wireless/choices.py:480 msgid "Auto" msgstr "Auto" -#: dcim/choices.py:1263 +#: netbox/dcim/choices.py:1265 msgid "Access" msgstr "Adgang" -#: dcim/choices.py:1264 ipam/tables/vlans.py:172 ipam/tables/vlans.py:217 -#: templates/dcim/inc/interface_vlans_table.html:7 +#: 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 "Markeret" -#: dcim/choices.py:1265 +#: netbox/dcim/choices.py:1267 msgid "Tagged (All)" msgstr "Tagget (Alle)" -#: dcim/choices.py:1294 +#: netbox/dcim/choices.py:1296 msgid "IEEE Standard" msgstr "IEEE-standard" -#: dcim/choices.py:1305 +#: netbox/dcim/choices.py:1307 msgid "Passive 24V (2-pair)" msgstr "Passiv 24V (2-par)" -#: dcim/choices.py:1306 +#: netbox/dcim/choices.py:1308 msgid "Passive 24V (4-pair)" msgstr "Passiv 24V (4-par)" -#: dcim/choices.py:1307 +#: netbox/dcim/choices.py:1309 msgid "Passive 48V (2-pair)" msgstr "Passiv 48V (2-par)" -#: dcim/choices.py:1308 +#: netbox/dcim/choices.py:1310 msgid "Passive 48V (4-pair)" msgstr "Passiv 48V (4-par)" -#: dcim/choices.py:1378 dcim/choices.py:1488 +#: netbox/dcim/choices.py:1380 netbox/dcim/choices.py:1490 msgid "Copper" msgstr "Kobber" -#: dcim/choices.py:1401 +#: netbox/dcim/choices.py:1403 msgid "Fiber Optic" msgstr "Fiberoptisk" -#: dcim/choices.py:1434 dcim/choices.py:1517 +#: netbox/dcim/choices.py:1436 netbox/dcim/choices.py:1519 msgid "USB" msgstr "USB" -#: dcim/choices.py:1504 +#: netbox/dcim/choices.py:1506 msgid "Fiber" msgstr "Fiber" -#: dcim/choices.py:1529 dcim/forms/filtersets.py:1227 +#: netbox/dcim/choices.py:1531 netbox/dcim/forms/filtersets.py:1227 msgid "Connected" msgstr "Tilsluttet" -#: dcim/choices.py:1548 wireless/choices.py:497 +#: netbox/dcim/choices.py:1550 netbox/wireless/choices.py:497 msgid "Kilometers" msgstr "Kilometer" -#: dcim/choices.py:1549 templates/dcim/cable_trace.html:65 -#: wireless/choices.py:498 +#: netbox/dcim/choices.py:1551 netbox/templates/dcim/cable_trace.html:65 +#: netbox/wireless/choices.py:498 msgid "Meters" msgstr "Meter" -#: dcim/choices.py:1550 +#: netbox/dcim/choices.py:1552 msgid "Centimeters" msgstr "Centimeter" -#: dcim/choices.py:1551 wireless/choices.py:499 +#: netbox/dcim/choices.py:1553 netbox/wireless/choices.py:499 msgid "Miles" msgstr "Mil" -#: dcim/choices.py:1552 templates/dcim/cable_trace.html:66 -#: wireless/choices.py:500 +#: netbox/dcim/choices.py:1554 netbox/templates/dcim/cable_trace.html:66 +#: netbox/wireless/choices.py:500 msgid "Feet" msgstr "Fod" -#: dcim/choices.py:1568 templates/dcim/device.html:327 -#: templates/dcim/rack.html:107 +#: netbox/dcim/choices.py:1570 netbox/templates/dcim/device.html:327 +#: netbox/templates/dcim/rack.html:107 msgid "Kilograms" msgstr "Kilogram" -#: dcim/choices.py:1569 +#: netbox/dcim/choices.py:1571 msgid "Grams" msgstr "Gram" -#: dcim/choices.py:1570 templates/dcim/device.html:328 -#: templates/dcim/rack.html:108 +#: netbox/dcim/choices.py:1572 netbox/templates/dcim/device.html:328 +#: netbox/templates/dcim/rack.html:108 msgid "Pounds" msgstr "pund" -#: dcim/choices.py:1571 +#: netbox/dcim/choices.py:1573 msgid "Ounces" msgstr "Ounce" -#: dcim/choices.py:1618 +#: netbox/dcim/choices.py:1620 msgid "Redundant" msgstr "Redundant" -#: dcim/choices.py:1639 +#: netbox/dcim/choices.py:1641 msgid "Single phase" msgstr "Enkeltfase" -#: dcim/choices.py:1640 +#: netbox/dcim/choices.py:1642 msgid "Three-phase" msgstr "Trefaset" -#: dcim/fields.py:45 +#: netbox/dcim/fields.py:45 #, python-brace-format msgid "Invalid MAC address format: {value}" msgstr "Ugyldigt MAC-adresseformat: {value}" -#: dcim/fields.py:71 +#: netbox/dcim/fields.py:71 #, python-brace-format msgid "Invalid WWN format: {value}" msgstr "Ugyldigt WWN-format: {value}" -#: dcim/filtersets.py:86 +#: netbox/dcim/filtersets.py:86 msgid "Parent region (ID)" msgstr "Overordnet region (ID)" -#: dcim/filtersets.py:92 +#: netbox/dcim/filtersets.py:92 msgid "Parent region (slug)" msgstr "Forældreregion (slug)" -#: dcim/filtersets.py:116 +#: netbox/dcim/filtersets.py:116 msgid "Parent site group (ID)" msgstr "Overordnet områdegruppe (ID)" -#: dcim/filtersets.py:122 +#: netbox/dcim/filtersets.py:122 msgid "Parent site group (slug)" msgstr "Overordnet områdegruppe (slug)" -#: dcim/filtersets.py:164 extras/filtersets.py:364 ipam/filtersets.py:841 -#: ipam/filtersets.py:993 +#: netbox/dcim/filtersets.py:164 netbox/extras/filtersets.py:364 +#: netbox/ipam/filtersets.py:841 netbox/ipam/filtersets.py:993 msgid "Group (ID)" msgstr "Gruppe (ID)" -#: dcim/filtersets.py:170 +#: netbox/dcim/filtersets.py:170 msgid "Group (slug)" msgstr "Gruppe (slug)" -#: dcim/filtersets.py:176 dcim/filtersets.py:181 +#: netbox/dcim/filtersets.py:176 netbox/dcim/filtersets.py:181 msgid "AS (ID)" msgstr "AS (ID)" -#: dcim/filtersets.py:246 +#: netbox/dcim/filtersets.py:246 msgid "Parent location (ID)" msgstr "Overordnet placering (ID)" -#: dcim/filtersets.py:252 +#: netbox/dcim/filtersets.py:252 msgid "Parent location (slug)" msgstr "Forældreplacering (slug)" -#: dcim/filtersets.py:258 dcim/filtersets.py:369 dcim/filtersets.py:490 -#: dcim/filtersets.py:1057 dcim/filtersets.py:1404 dcim/filtersets.py:2182 +#: 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 "Placering (ID)" -#: dcim/filtersets.py:265 dcim/filtersets.py:376 dcim/filtersets.py:497 -#: dcim/filtersets.py:1410 extras/filtersets.py:542 +#: 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 "Placering (slug)" -#: dcim/filtersets.py:296 dcim/filtersets.py:381 dcim/filtersets.py:539 -#: dcim/filtersets.py:678 dcim/filtersets.py:882 dcim/filtersets.py:933 -#: dcim/filtersets.py:973 dcim/filtersets.py:1306 dcim/filtersets.py:1840 +#: 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 msgid "Manufacturer (ID)" msgstr "Producent (ID)" -#: dcim/filtersets.py:302 dcim/filtersets.py:387 dcim/filtersets.py:545 -#: dcim/filtersets.py:684 dcim/filtersets.py:888 dcim/filtersets.py:939 -#: dcim/filtersets.py:979 dcim/filtersets.py:1312 dcim/filtersets.py:1846 +#: 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 msgid "Manufacturer (slug)" msgstr "Producent (slug)" -#: dcim/filtersets.py:393 +#: netbox/dcim/filtersets.py:393 msgid "Rack type (slug)" msgstr "Racktype (slug)" -#: dcim/filtersets.py:397 +#: netbox/dcim/filtersets.py:397 msgid "Rack type (ID)" msgstr "Racktype (ID)" -#: dcim/filtersets.py:411 dcim/filtersets.py:892 dcim/filtersets.py:994 -#: dcim/filtersets.py:1850 ipam/filtersets.py:381 ipam/filtersets.py:493 -#: ipam/filtersets.py:1003 virtualization/filtersets.py:210 +#: 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 msgid "Role (ID)" msgstr "Rolle (ID)" -#: dcim/filtersets.py:417 dcim/filtersets.py:898 dcim/filtersets.py:1000 -#: dcim/filtersets.py:1856 extras/filtersets.py:558 ipam/filtersets.py:387 -#: ipam/filtersets.py:499 ipam/filtersets.py:1009 -#: virtualization/filtersets.py:216 +#: 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/virtualization/filtersets.py:216 msgid "Role (slug)" msgstr "Rolle (slug)" -#: dcim/filtersets.py:447 dcim/filtersets.py:1062 dcim/filtersets.py:1415 -#: dcim/filtersets.py:2244 +#: netbox/dcim/filtersets.py:447 netbox/dcim/filtersets.py:1062 +#: netbox/dcim/filtersets.py:1415 netbox/dcim/filtersets.py:2244 msgid "Rack (ID)" msgstr "Rack (ID)" -#: dcim/filtersets.py:507 extras/filtersets.py:293 extras/filtersets.py:337 -#: extras/filtersets.py:359 extras/filtersets.py:419 users/filtersets.py:113 -#: users/filtersets.py:180 +#: netbox/dcim/filtersets.py:507 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 "Bruger (navn)" -#: dcim/filtersets.py:549 +#: netbox/dcim/filtersets.py:549 msgid "Default platform (ID)" msgstr "Standardplatform (ID)" -#: dcim/filtersets.py:555 +#: netbox/dcim/filtersets.py:555 msgid "Default platform (slug)" msgstr "Standardplatform (slug)" -#: dcim/filtersets.py:558 dcim/forms/filtersets.py:517 +#: netbox/dcim/filtersets.py:558 netbox/dcim/forms/filtersets.py:517 msgid "Has a front image" msgstr "Har et frontbillede" -#: dcim/filtersets.py:562 dcim/forms/filtersets.py:524 +#: netbox/dcim/filtersets.py:562 netbox/dcim/forms/filtersets.py:524 msgid "Has a rear image" msgstr "Har et bagbillede" -#: dcim/filtersets.py:567 dcim/filtersets.py:688 dcim/filtersets.py:1131 -#: dcim/forms/filtersets.py:531 dcim/forms/filtersets.py:627 -#: dcim/forms/filtersets.py:848 +#: 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 msgid "Has console ports" msgstr "Har konsolporte" -#: dcim/filtersets.py:571 dcim/filtersets.py:692 dcim/filtersets.py:1135 -#: dcim/forms/filtersets.py:538 dcim/forms/filtersets.py:634 -#: dcim/forms/filtersets.py:855 +#: 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 msgid "Has console server ports" msgstr "Har konsolserverporte" -#: dcim/filtersets.py:575 dcim/filtersets.py:696 dcim/filtersets.py:1139 -#: dcim/forms/filtersets.py:545 dcim/forms/filtersets.py:641 -#: dcim/forms/filtersets.py:862 +#: 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 msgid "Has power ports" msgstr "Har strømstik" -#: dcim/filtersets.py:579 dcim/filtersets.py:700 dcim/filtersets.py:1143 -#: dcim/forms/filtersets.py:552 dcim/forms/filtersets.py:648 -#: dcim/forms/filtersets.py:869 +#: 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 msgid "Has power outlets" msgstr "Har strømudtag" -#: dcim/filtersets.py:583 dcim/filtersets.py:704 dcim/filtersets.py:1147 -#: dcim/forms/filtersets.py:559 dcim/forms/filtersets.py:655 -#: dcim/forms/filtersets.py:876 +#: 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 msgid "Has interfaces" msgstr "Har grænseflader" -#: dcim/filtersets.py:587 dcim/filtersets.py:708 dcim/filtersets.py:1151 -#: dcim/forms/filtersets.py:566 dcim/forms/filtersets.py:662 -#: dcim/forms/filtersets.py:883 +#: 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 msgid "Has pass-through ports" msgstr "Har gennemgangsporte" -#: dcim/filtersets.py:591 dcim/filtersets.py:1155 dcim/forms/filtersets.py:580 +#: netbox/dcim/filtersets.py:591 netbox/dcim/filtersets.py:1155 +#: netbox/dcim/forms/filtersets.py:580 msgid "Has module bays" msgstr "Har modulpladser" -#: dcim/filtersets.py:595 dcim/filtersets.py:1159 dcim/forms/filtersets.py:573 +#: netbox/dcim/filtersets.py:595 netbox/dcim/filtersets.py:1159 +#: netbox/dcim/forms/filtersets.py:573 msgid "Has device bays" msgstr "Har enhedsbugter" -#: dcim/filtersets.py:599 dcim/forms/filtersets.py:587 +#: netbox/dcim/filtersets.py:599 netbox/dcim/forms/filtersets.py:587 msgid "Has inventory items" msgstr "Har lagervarer" -#: dcim/filtersets.py:756 dcim/filtersets.py:989 dcim/filtersets.py:1436 +#: netbox/dcim/filtersets.py:756 netbox/dcim/filtersets.py:989 +#: netbox/dcim/filtersets.py:1436 msgid "Device type (ID)" msgstr "Enhedstype (ID)" -#: dcim/filtersets.py:772 dcim/filtersets.py:1317 +#: netbox/dcim/filtersets.py:772 netbox/dcim/filtersets.py:1317 msgid "Module type (ID)" msgstr "Modultype (ID)" -#: dcim/filtersets.py:804 dcim/filtersets.py:1591 +#: netbox/dcim/filtersets.py:804 netbox/dcim/filtersets.py:1591 msgid "Power port (ID)" msgstr "Strømstik (ID)" -#: dcim/filtersets.py:878 dcim/filtersets.py:1836 +#: netbox/dcim/filtersets.py:878 netbox/dcim/filtersets.py:1836 msgid "Parent inventory item (ID)" msgstr "Overordnet beholdningspost (ID)" -#: dcim/filtersets.py:921 dcim/filtersets.py:947 dcim/filtersets.py:1127 -#: virtualization/filtersets.py:238 +#: netbox/dcim/filtersets.py:921 netbox/dcim/filtersets.py:947 +#: netbox/dcim/filtersets.py:1127 netbox/virtualization/filtersets.py:238 msgid "Config template (ID)" msgstr "Konfigurationsskabelon (ID)" -#: dcim/filtersets.py:985 +#: netbox/dcim/filtersets.py:985 msgid "Device type (slug)" msgstr "Enhedstype (slug)" -#: dcim/filtersets.py:1005 +#: netbox/dcim/filtersets.py:1005 msgid "Parent Device (ID)" msgstr "Overordnet enhed (ID)" -#: dcim/filtersets.py:1009 virtualization/filtersets.py:220 +#: netbox/dcim/filtersets.py:1009 netbox/virtualization/filtersets.py:220 msgid "Platform (ID)" msgstr "Platform (ID)" -#: dcim/filtersets.py:1015 extras/filtersets.py:569 -#: virtualization/filtersets.py:226 +#: netbox/dcim/filtersets.py:1015 netbox/extras/filtersets.py:569 +#: netbox/virtualization/filtersets.py:226 msgid "Platform (slug)" msgstr "Platform (slug)" -#: dcim/filtersets.py:1051 dcim/filtersets.py:1399 dcim/filtersets.py:1934 -#: dcim/filtersets.py:2176 dcim/filtersets.py:2235 +#: 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 msgid "Site name (slug)" msgstr "Områdenavn (slug)" -#: dcim/filtersets.py:1067 +#: netbox/dcim/filtersets.py:1067 msgid "Parent bay (ID)" msgstr "Forældrebugt (ID)" -#: dcim/filtersets.py:1071 +#: netbox/dcim/filtersets.py:1071 msgid "VM cluster (ID)" msgstr "VM-klynge (ID)" -#: dcim/filtersets.py:1077 extras/filtersets.py:591 -#: virtualization/filtersets.py:136 +#: netbox/dcim/filtersets.py:1077 netbox/extras/filtersets.py:591 +#: netbox/virtualization/filtersets.py:136 msgid "Cluster group (slug)" msgstr "Clustergruppe (slug)" -#: dcim/filtersets.py:1082 virtualization/filtersets.py:130 +#: netbox/dcim/filtersets.py:1082 netbox/virtualization/filtersets.py:130 msgid "Cluster group (ID)" msgstr "Klyngegruppe (ID)" -#: dcim/filtersets.py:1088 +#: netbox/dcim/filtersets.py:1088 msgid "Device model (slug)" msgstr "Enhedsmodel (slug)" -#: dcim/filtersets.py:1099 dcim/forms/bulk_edit.py:516 +#: netbox/dcim/filtersets.py:1099 netbox/dcim/forms/bulk_edit.py:522 msgid "Is full depth" msgstr "Er fuld dybde" -#: dcim/filtersets.py:1103 dcim/forms/common.py:18 -#: dcim/forms/filtersets.py:818 dcim/forms/filtersets.py:1385 -#: dcim/models/device_components.py:518 virtualization/filtersets.py:230 -#: virtualization/filtersets.py:301 virtualization/forms/filtersets.py:172 -#: virtualization/forms/filtersets.py:223 +#: 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 msgid "MAC address" msgstr "MAC-adresse" -#: dcim/filtersets.py:1110 dcim/filtersets.py:1274 -#: dcim/forms/filtersets.py:827 dcim/forms/filtersets.py:930 -#: virtualization/filtersets.py:234 virtualization/forms/filtersets.py:176 +#: 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 msgid "Has a primary IP" msgstr "Har en primær IP" -#: dcim/filtersets.py:1114 +#: netbox/dcim/filtersets.py:1114 msgid "Has an out-of-band IP" msgstr "Har en IP uden for båndet" -#: dcim/filtersets.py:1119 +#: netbox/dcim/filtersets.py:1119 msgid "Virtual chassis (ID)" msgstr "Virtuelt kabinet (ID)" -#: dcim/filtersets.py:1123 +#: netbox/dcim/filtersets.py:1123 msgid "Is a virtual chassis member" msgstr "Er et virtuelt chassismedlem" -#: dcim/filtersets.py:1164 +#: netbox/dcim/filtersets.py:1164 msgid "OOB IP (ID)" msgstr "OOB IP (ID)" -#: dcim/filtersets.py:1168 +#: netbox/dcim/filtersets.py:1168 msgid "Has virtual device context" msgstr "Har virtuel enhedskontekst" -#: dcim/filtersets.py:1257 +#: netbox/dcim/filtersets.py:1257 msgid "VDC (ID)" msgstr "VDC (ID)" -#: dcim/filtersets.py:1262 +#: netbox/dcim/filtersets.py:1262 msgid "Device model" msgstr "Enhedsmodel" -#: dcim/filtersets.py:1267 ipam/filtersets.py:632 vpn/filtersets.py:102 -#: vpn/filtersets.py:401 +#: netbox/dcim/filtersets.py:1267 netbox/ipam/filtersets.py:632 +#: netbox/vpn/filtersets.py:102 netbox/vpn/filtersets.py:401 msgid "Interface (ID)" msgstr "Grænseflade (ID)" -#: dcim/filtersets.py:1323 +#: netbox/dcim/filtersets.py:1323 msgid "Module type (model)" msgstr "Modultype (model)" -#: dcim/filtersets.py:1329 +#: netbox/dcim/filtersets.py:1329 msgid "Module bay (ID)" msgstr "Modulplads (ID)" -#: dcim/filtersets.py:1333 dcim/filtersets.py:1425 ipam/filtersets.py:611 -#: ipam/filtersets.py:851 ipam/filtersets.py:1115 -#: virtualization/filtersets.py:161 vpn/filtersets.py:379 +#: 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/vpn/filtersets.py:379 msgid "Device (ID)" msgstr "Enhed (ID)" -#: dcim/filtersets.py:1421 +#: netbox/dcim/filtersets.py:1421 msgid "Rack (name)" msgstr "Rack (navn)" -#: dcim/filtersets.py:1431 ipam/filtersets.py:606 ipam/filtersets.py:846 -#: ipam/filtersets.py:1121 vpn/filtersets.py:374 +#: netbox/dcim/filtersets.py:1431 netbox/ipam/filtersets.py:606 +#: netbox/ipam/filtersets.py:846 netbox/ipam/filtersets.py:1121 +#: netbox/vpn/filtersets.py:374 msgid "Device (name)" msgstr "Enhed (navn)" -#: dcim/filtersets.py:1442 +#: netbox/dcim/filtersets.py:1442 msgid "Device type (model)" msgstr "Enhedstype (model)" -#: dcim/filtersets.py:1447 +#: netbox/dcim/filtersets.py:1447 msgid "Device role (ID)" msgstr "Enhedsrolle (ID)" -#: dcim/filtersets.py:1453 +#: netbox/dcim/filtersets.py:1453 msgid "Device role (slug)" msgstr "Enhedsrolle (slug)" -#: dcim/filtersets.py:1458 +#: netbox/dcim/filtersets.py:1458 msgid "Virtual Chassis (ID)" msgstr "Virtuelt kabinet (ID)" -#: dcim/filtersets.py:1464 dcim/forms/filtersets.py:109 -#: dcim/tables/devices.py:206 netbox/navigation/menu.py:79 -#: templates/dcim/device.html:120 templates/dcim/device_edit.html:93 -#: templates/dcim/virtualchassis.html:20 -#: templates/dcim/virtualchassis_add.html:8 -#: templates/dcim/virtualchassis_edit.html:24 +#: netbox/dcim/filtersets.py:1464 netbox/dcim/forms/filtersets.py:109 +#: netbox/dcim/tables/devices.py:206 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 +#: netbox/templates/dcim/virtualchassis_add.html:8 +#: netbox/templates/dcim/virtualchassis_edit.html:24 msgid "Virtual Chassis" msgstr "Virtuelt kabinet" -#: dcim/filtersets.py:1488 +#: netbox/dcim/filtersets.py:1488 msgid "Module (ID)" msgstr "Modul (ID)" -#: dcim/filtersets.py:1495 +#: netbox/dcim/filtersets.py:1495 msgid "Cable (ID)" msgstr "Kabel (ID)" -#: dcim/filtersets.py:1604 ipam/forms/bulk_import.py:189 -#: vpn/forms/bulk_import.py:308 +#: netbox/dcim/filtersets.py:1604 netbox/ipam/forms/bulk_import.py:189 +#: netbox/vpn/forms/bulk_import.py:308 msgid "Assigned VLAN" msgstr "Tildelt VLAN" -#: dcim/filtersets.py:1608 +#: netbox/dcim/filtersets.py:1608 msgid "Assigned VID" msgstr "Tildelt VID" -#: dcim/filtersets.py:1613 dcim/forms/bulk_edit.py:1489 -#: dcim/forms/bulk_import.py:891 dcim/forms/filtersets.py:1428 -#: dcim/forms/model_forms.py:1378 dcim/models/device_components.py:711 -#: dcim/tables/devices.py:626 ipam/filtersets.py:316 ipam/filtersets.py:327 -#: ipam/filtersets.py:483 ipam/filtersets.py:584 ipam/filtersets.py:595 -#: ipam/forms/bulk_edit.py:242 ipam/forms/bulk_edit.py:298 -#: ipam/forms/bulk_edit.py:340 ipam/forms/bulk_import.py:157 -#: ipam/forms/bulk_import.py:243 ipam/forms/bulk_import.py:279 -#: ipam/forms/filtersets.py:67 ipam/forms/filtersets.py:172 -#: ipam/forms/filtersets.py:309 ipam/forms/model_forms.py:62 -#: ipam/forms/model_forms.py:202 ipam/forms/model_forms.py:247 -#: ipam/forms/model_forms.py:300 ipam/forms/model_forms.py:431 -#: ipam/forms/model_forms.py:445 ipam/forms/model_forms.py:459 -#: ipam/models/ip.py:233 ipam/models/ip.py:512 ipam/models/ip.py:720 -#: ipam/models/vrfs.py:62 ipam/tables/ip.py:242 ipam/tables/ip.py:309 -#: ipam/tables/ip.py:360 ipam/tables/ip.py:450 -#: templates/dcim/interface.html:133 templates/ipam/ipaddress.html:18 -#: templates/ipam/iprange.html:40 templates/ipam/prefix.html:19 -#: templates/ipam/vrf.html:7 templates/ipam/vrf.html:13 -#: templates/virtualization/vminterface.html:47 -#: virtualization/forms/bulk_edit.py:261 -#: virtualization/forms/bulk_import.py:171 -#: virtualization/forms/filtersets.py:228 -#: virtualization/forms/model_forms.py:344 -#: virtualization/models/virtualmachines.py:355 -#: virtualization/tables/virtualmachines.py:143 +#: 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:316 +#: netbox/ipam/filtersets.py:327 netbox/ipam/filtersets.py:483 +#: netbox/ipam/filtersets.py:584 netbox/ipam/filtersets.py:595 +#: netbox/ipam/forms/bulk_edit.py: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/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 msgid "VRF" msgstr "VRF" -#: dcim/filtersets.py:1619 ipam/filtersets.py:322 ipam/filtersets.py:333 -#: ipam/filtersets.py:489 ipam/filtersets.py:590 ipam/filtersets.py:601 +#: 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 msgid "VRF (RD)" msgstr "VRF (RED.)" -#: dcim/filtersets.py:1624 ipam/filtersets.py:1030 vpn/filtersets.py:342 +#: netbox/dcim/filtersets.py:1624 netbox/ipam/filtersets.py:1030 +#: netbox/vpn/filtersets.py:342 msgid "L2VPN (ID)" msgstr "L2VPN (ID)" -#: dcim/filtersets.py:1630 dcim/forms/filtersets.py:1433 -#: dcim/tables/devices.py:570 ipam/filtersets.py:1036 -#: ipam/forms/filtersets.py:518 ipam/tables/vlans.py:137 -#: templates/dcim/interface.html:93 templates/ipam/vlan.html:66 -#: templates/vpn/l2vpntermination.html:12 -#: virtualization/forms/filtersets.py:233 vpn/forms/bulk_import.py:280 -#: vpn/forms/filtersets.py:246 vpn/forms/model_forms.py:409 -#: vpn/forms/model_forms.py:427 vpn/models/l2vpn.py:63 vpn/tables/l2vpn.py:55 +#: netbox/dcim/filtersets.py:1630 netbox/dcim/forms/filtersets.py:1433 +#: netbox/dcim/tables/devices.py:570 netbox/ipam/filtersets.py:1036 +#: 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 +#: netbox/virtualization/forms/filtersets.py:233 +#: netbox/vpn/forms/bulk_import.py:280 netbox/vpn/forms/filtersets.py:246 +#: netbox/vpn/forms/model_forms.py:409 netbox/vpn/forms/model_forms.py:427 +#: netbox/vpn/models/l2vpn.py:63 netbox/vpn/tables/l2vpn.py:55 msgid "L2VPN" msgstr "L2VPN" -#: dcim/filtersets.py:1662 +#: netbox/dcim/filtersets.py:1662 msgid "Virtual Chassis Interfaces for Device" msgstr "Virtuelle chassis-grænseflader til enhed" -#: dcim/filtersets.py:1667 +#: netbox/dcim/filtersets.py:1667 msgid "Virtual Chassis Interfaces for Device (ID)" msgstr "Virtuelle chassisgrænseflader til enhed (ID)" -#: dcim/filtersets.py:1671 +#: netbox/dcim/filtersets.py:1671 msgid "Kind of interface" msgstr "Slags grænseflade" -#: dcim/filtersets.py:1676 virtualization/filtersets.py:293 +#: netbox/dcim/filtersets.py:1676 netbox/virtualization/filtersets.py:293 msgid "Parent interface (ID)" msgstr "Overordnet grænseflade (ID)" -#: dcim/filtersets.py:1681 virtualization/filtersets.py:298 +#: netbox/dcim/filtersets.py:1681 netbox/virtualization/filtersets.py:298 msgid "Bridged interface (ID)" msgstr "Broet grænseflade (ID)" -#: dcim/filtersets.py:1686 +#: netbox/dcim/filtersets.py:1686 msgid "LAG interface (ID)" msgstr "LAG-grænseflade (ID)" -#: dcim/filtersets.py:1713 dcim/filtersets.py:1725 -#: dcim/forms/filtersets.py:1345 dcim/forms/model_forms.py:1690 -#: templates/dcim/virtualdevicecontext.html:15 +#: netbox/dcim/filtersets.py:1713 netbox/dcim/filtersets.py:1725 +#: netbox/dcim/forms/filtersets.py:1345 netbox/dcim/forms/model_forms.py:1697 +#: netbox/templates/dcim/virtualdevicecontext.html:15 msgid "Virtual Device Context" msgstr "Virtuel enhedskontekst" -#: dcim/filtersets.py:1719 +#: netbox/dcim/filtersets.py:1719 msgid "Virtual Device Context (Identifier)" msgstr "Virtuel enhedskontekst (identifikator)" -#: dcim/filtersets.py:1730 templates/wireless/wirelesslan.html:11 -#: wireless/forms/model_forms.py:53 +#: netbox/dcim/filtersets.py:1730 +#: netbox/templates/wireless/wirelesslan.html:11 +#: netbox/wireless/forms/model_forms.py:53 msgid "Wireless LAN" msgstr "Trådløst LAN" -#: dcim/filtersets.py:1734 dcim/tables/devices.py:613 +#: netbox/dcim/filtersets.py:1734 netbox/dcim/tables/devices.py:613 msgid "Wireless link" msgstr "Trådløs forbindelse" -#: dcim/filtersets.py:1803 +#: netbox/dcim/filtersets.py:1803 msgid "Parent module bay (ID)" msgstr "Forældremodulplads (ID)" -#: dcim/filtersets.py:1808 +#: netbox/dcim/filtersets.py:1808 msgid "Installed module (ID)" msgstr "Installeret modul (ID)" -#: dcim/filtersets.py:1819 +#: netbox/dcim/filtersets.py:1819 msgid "Installed device (ID)" msgstr "Installeret enhed (ID)" -#: dcim/filtersets.py:1825 +#: netbox/dcim/filtersets.py:1825 msgid "Installed device (name)" msgstr "Installeret enhed (navn)" -#: dcim/filtersets.py:1891 +#: netbox/dcim/filtersets.py:1891 msgid "Master (ID)" msgstr "Master (ID)" -#: dcim/filtersets.py:1897 +#: netbox/dcim/filtersets.py:1897 msgid "Master (name)" msgstr "Master (navn)" -#: dcim/filtersets.py:1939 tenancy/filtersets.py:245 +#: netbox/dcim/filtersets.py:1939 netbox/tenancy/filtersets.py:245 msgid "Tenant (ID)" msgstr "Lejer (ID)" -#: dcim/filtersets.py:1945 extras/filtersets.py:618 tenancy/filtersets.py:251 +#: netbox/dcim/filtersets.py:1945 netbox/extras/filtersets.py:618 +#: netbox/tenancy/filtersets.py:251 msgid "Tenant (slug)" msgstr "Lejer (snegle)" -#: dcim/filtersets.py:1981 dcim/forms/filtersets.py:1077 +#: netbox/dcim/filtersets.py:1981 netbox/dcim/forms/filtersets.py:1077 msgid "Unterminated" msgstr "Uafsluttede" -#: dcim/filtersets.py:2239 +#: netbox/dcim/filtersets.py:2239 msgid "Power panel (ID)" msgstr "Strømpanel (ID)" -#: dcim/forms/bulk_create.py:40 extras/forms/filtersets.py:401 -#: extras/forms/model_forms.py:567 extras/forms/model_forms.py:619 -#: netbox/forms/base.py:86 netbox/forms/mixins.py:81 -#: netbox/tables/columns.py:478 -#: templates/circuits/inc/circuit_termination.html:32 -#: templates/generic/bulk_edit.html:65 templates/inc/panels/tags.html:5 -#: utilities/forms/fields/fields.py:81 +#: netbox/dcim/forms/bulk_create.py:40 netbox/extras/forms/filtersets.py: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/templates/circuits/inc/circuit_termination.html:32 +#: netbox/templates/generic/bulk_edit.html:65 +#: netbox/templates/inc/panels/tags.html:5 +#: netbox/utilities/forms/fields/fields.py:81 msgid "Tags" msgstr "Mærker" -#: dcim/forms/bulk_create.py:112 dcim/forms/filtersets.py:1498 -#: dcim/forms/model_forms.py:488 dcim/forms/model_forms.py:546 -#: dcim/forms/object_create.py:197 dcim/forms/object_create.py:353 -#: dcim/tables/devices.py:165 dcim/tables/devices.py:707 -#: dcim/tables/devicetypes.py:246 templates/dcim/device.html:43 -#: templates/dcim/device.html:131 templates/dcim/modulebay.html:38 -#: templates/dcim/virtualchassis.html:66 -#: templates/dcim/virtualchassis_edit.html:55 +#: 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/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/templates/dcim/device.html:43 netbox/templates/dcim/device.html:131 +#: netbox/templates/dcim/modulebay.html:38 +#: netbox/templates/dcim/virtualchassis.html:66 +#: netbox/templates/dcim/virtualchassis_edit.html:55 msgid "Position" msgstr "Position" -#: dcim/forms/bulk_create.py:114 +#: netbox/dcim/forms/bulk_create.py:114 msgid "" "Alphanumeric ranges are supported. (Must match the number of names being " "created.)" @@ -3115,823 +3444,920 @@ msgstr "" "Alfanumeriske intervaller understøttes. (Skal svare til antallet af navne, " "der oprettes.)" -#: dcim/forms/bulk_edit.py:132 +#: netbox/dcim/forms/bulk_edit.py:133 msgid "Contact name" msgstr "Kontaktens navn" -#: dcim/forms/bulk_edit.py:137 +#: netbox/dcim/forms/bulk_edit.py:138 msgid "Contact phone" msgstr "Kontakt telefon" -#: dcim/forms/bulk_edit.py:143 +#: netbox/dcim/forms/bulk_edit.py:144 msgid "Contact E-mail" msgstr "Kontakt E-mail" -#: dcim/forms/bulk_edit.py:146 dcim/forms/bulk_import.py:123 -#: dcim/forms/model_forms.py:128 +#: netbox/dcim/forms/bulk_edit.py:147 netbox/dcim/forms/bulk_import.py:123 +#: netbox/dcim/forms/model_forms.py:128 msgid "Time zone" msgstr "Tidszone" -#: dcim/forms/bulk_edit.py:224 dcim/forms/bulk_edit.py:495 -#: dcim/forms/bulk_edit.py:559 dcim/forms/bulk_edit.py:632 -#: dcim/forms/bulk_edit.py:656 dcim/forms/bulk_edit.py:740 -#: dcim/forms/bulk_edit.py:1267 dcim/forms/bulk_edit.py:1660 -#: dcim/forms/bulk_import.py:182 dcim/forms/bulk_import.py:371 -#: dcim/forms/bulk_import.py:405 dcim/forms/bulk_import.py:450 -#: dcim/forms/bulk_import.py:486 dcim/forms/bulk_import.py:1082 -#: dcim/forms/filtersets.py:313 dcim/forms/filtersets.py:372 -#: dcim/forms/filtersets.py:494 dcim/forms/filtersets.py:619 -#: dcim/forms/filtersets.py:700 dcim/forms/filtersets.py:782 -#: dcim/forms/filtersets.py:947 dcim/forms/filtersets.py:1539 -#: dcim/forms/model_forms.py:207 dcim/forms/model_forms.py:337 -#: dcim/forms/model_forms.py:349 dcim/forms/model_forms.py:395 -#: dcim/forms/model_forms.py:436 dcim/forms/model_forms.py:1075 -#: dcim/forms/model_forms.py:1515 dcim/forms/object_import.py:187 -#: dcim/tables/devices.py:96 dcim/tables/devices.py:172 -#: dcim/tables/devices.py:940 dcim/tables/devicetypes.py:80 -#: dcim/tables/devicetypes.py:308 dcim/tables/modules.py:20 -#: dcim/tables/modules.py:60 dcim/tables/racks.py:58 dcim/tables/racks.py:132 -#: templates/dcim/devicetype.html:14 templates/dcim/inventoryitem.html:44 -#: templates/dcim/manufacturer.html:33 templates/dcim/modulebay.html:62 -#: templates/dcim/moduletype.html:25 templates/dcim/platform.html:37 -#: templates/dcim/racktype.html:16 +#: 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/tables/modules.py:60 +#: 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/templates/dcim/manufacturer.html:33 +#: netbox/templates/dcim/modulebay.html:62 +#: netbox/templates/dcim/moduletype.html:25 +#: netbox/templates/dcim/platform.html:37 +#: netbox/templates/dcim/racktype.html:16 msgid "Manufacturer" msgstr "Producent" -#: dcim/forms/bulk_edit.py:229 dcim/forms/bulk_edit.py:372 -#: dcim/forms/bulk_import.py:191 dcim/forms/bulk_import.py:263 -#: dcim/forms/filtersets.py:255 -#: templates/dcim/inc/panels/racktype_dimensions.html:6 +#: 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/templates/dcim/inc/panels/racktype_dimensions.html:6 msgid "Form factor" msgstr "Formfaktor" -#: dcim/forms/bulk_edit.py:234 dcim/forms/bulk_edit.py:377 -#: dcim/forms/bulk_import.py:199 dcim/forms/bulk_import.py:266 -#: dcim/forms/filtersets.py:260 -#: templates/dcim/inc/panels/racktype_dimensions.html:10 +#: 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/templates/dcim/inc/panels/racktype_dimensions.html:10 msgid "Width" msgstr "Bredde" -#: dcim/forms/bulk_edit.py:240 dcim/forms/bulk_edit.py:383 -#: templates/dcim/devicetype.html:37 +#: netbox/dcim/forms/bulk_edit.py:241 netbox/dcim/forms/bulk_edit.py:389 +#: netbox/dcim/forms/bulk_import.py:280 +#: netbox/templates/dcim/devicetype.html:37 msgid "Height (U)" msgstr "Højde (U)" -#: dcim/forms/bulk_edit.py:249 dcim/forms/bulk_edit.py:388 -#: dcim/forms/filtersets.py:274 +#: netbox/dcim/forms/bulk_edit.py:250 netbox/dcim/forms/bulk_edit.py:394 +#: netbox/dcim/forms/filtersets.py:274 msgid "Descending units" msgstr "Faldende enheder" -#: dcim/forms/bulk_edit.py:252 dcim/forms/bulk_edit.py:391 +#: netbox/dcim/forms/bulk_edit.py:253 netbox/dcim/forms/bulk_edit.py:397 msgid "Outer width" msgstr "Udvendig bredde" -#: dcim/forms/bulk_edit.py:257 dcim/forms/bulk_edit.py:396 +#: netbox/dcim/forms/bulk_edit.py:258 netbox/dcim/forms/bulk_edit.py:402 msgid "Outer depth" msgstr "Ydre dybde" -#: dcim/forms/bulk_edit.py:262 dcim/forms/bulk_edit.py:401 -#: dcim/forms/bulk_import.py:204 dcim/forms/bulk_import.py:271 +#: 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 msgid "Outer unit" msgstr "Ydre enhed" -#: dcim/forms/bulk_edit.py:267 dcim/forms/bulk_edit.py:406 +#: netbox/dcim/forms/bulk_edit.py:268 netbox/dcim/forms/bulk_edit.py:412 msgid "Mounting depth" msgstr "Monteringsdybde" -#: dcim/forms/bulk_edit.py:272 dcim/forms/bulk_edit.py:299 -#: dcim/forms/bulk_edit.py:416 dcim/forms/bulk_edit.py:446 -#: dcim/forms/bulk_edit.py:529 dcim/forms/bulk_edit.py:552 -#: dcim/forms/bulk_edit.py:573 dcim/forms/bulk_edit.py:595 -#: dcim/forms/bulk_import.py:384 dcim/forms/bulk_import.py:416 -#: dcim/forms/filtersets.py:285 dcim/forms/filtersets.py:307 -#: dcim/forms/filtersets.py:327 dcim/forms/filtersets.py:401 -#: dcim/forms/filtersets.py:488 dcim/forms/filtersets.py:594 -#: dcim/forms/filtersets.py:613 dcim/forms/filtersets.py:674 -#: dcim/forms/model_forms.py:221 dcim/forms/model_forms.py:298 -#: dcim/tables/devicetypes.py:106 dcim/tables/modules.py:35 -#: dcim/tables/racks.py:74 dcim/tables/racks.py:172 -#: extras/forms/bulk_edit.py:53 extras/forms/bulk_edit.py:133 -#: extras/forms/bulk_edit.py:183 extras/forms/bulk_edit.py:288 -#: extras/forms/filtersets.py:64 extras/forms/filtersets.py:156 -#: extras/forms/filtersets.py:243 ipam/forms/bulk_edit.py:190 -#: templates/dcim/device.html:324 templates/dcim/devicetype.html:49 -#: templates/dcim/moduletype.html:45 templates/dcim/rack.html:81 -#: templates/dcim/racktype.html:41 templates/extras/configcontext.html:17 -#: templates/extras/customlink.html:25 templates/extras/savedfilter.html:33 -#: templates/ipam/role.html:30 +#: netbox/dcim/forms/bulk_edit.py: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/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/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/racktype.html:41 +#: netbox/templates/extras/configcontext.html:17 +#: netbox/templates/extras/customlink.html:25 +#: netbox/templates/extras/savedfilter.html:33 +#: netbox/templates/ipam/role.html:30 msgid "Weight" msgstr "Vægt" -#: dcim/forms/bulk_edit.py:277 dcim/forms/bulk_edit.py:421 -#: dcim/forms/filtersets.py:290 +#: netbox/dcim/forms/bulk_edit.py:278 netbox/dcim/forms/bulk_edit.py:427 +#: netbox/dcim/forms/filtersets.py:290 msgid "Max weight" msgstr "Maks. Vægt" -#: dcim/forms/bulk_edit.py:282 dcim/forms/bulk_edit.py:426 -#: dcim/forms/bulk_edit.py:534 dcim/forms/bulk_edit.py:578 -#: dcim/forms/bulk_import.py:210 dcim/forms/bulk_import.py:283 -#: dcim/forms/bulk_import.py:389 dcim/forms/bulk_import.py:421 -#: dcim/forms/filtersets.py:295 dcim/forms/filtersets.py:598 -#: dcim/forms/filtersets.py:678 +#: 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 msgid "Weight unit" msgstr "Vægtenhed" -#: dcim/forms/bulk_edit.py:296 dcim/forms/filtersets.py:305 -#: dcim/forms/model_forms.py:217 dcim/forms/model_forms.py:256 -#: templates/dcim/rack.html:45 templates/dcim/racktype.html:13 +#: 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/templates/dcim/rack.html:45 netbox/templates/dcim/racktype.html:13 msgid "Rack Type" msgstr "Racktype" -#: dcim/forms/bulk_edit.py:298 dcim/forms/model_forms.py:220 -#: dcim/forms/model_forms.py:297 +#: netbox/dcim/forms/bulk_edit.py:299 netbox/dcim/forms/model_forms.py:220 +#: netbox/dcim/forms/model_forms.py:297 msgid "Outer Dimensions" msgstr "Udvendige mål" -#: dcim/forms/bulk_edit.py:301 dcim/forms/model_forms.py:222 -#: dcim/forms/model_forms.py:299 templates/dcim/device.html:315 -#: templates/dcim/inc/panels/racktype_dimensions.html:3 +#: 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/templates/dcim/inc/panels/racktype_dimensions.html:3 msgid "Dimensions" msgstr "Dimensioner" -#: dcim/forms/bulk_edit.py:303 dcim/forms/filtersets.py:306 -#: dcim/forms/filtersets.py:326 dcim/forms/model_forms.py:224 -#: templates/dcim/inc/panels/racktype_numbering.html:3 +#: 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/templates/dcim/inc/panels/racktype_numbering.html:3 msgid "Numbering" msgstr "Nummerering" -#: dcim/forms/bulk_edit.py:357 dcim/forms/bulk_edit.py:1262 -#: dcim/forms/bulk_edit.py:1655 dcim/forms/bulk_import.py:253 -#: dcim/forms/bulk_import.py:1076 dcim/forms/filtersets.py:367 -#: dcim/forms/filtersets.py:777 dcim/forms/filtersets.py:1534 -#: dcim/forms/model_forms.py:251 dcim/forms/model_forms.py:1070 -#: dcim/forms/model_forms.py:1510 dcim/forms/object_import.py:181 -#: dcim/tables/devices.py:169 dcim/tables/devices.py:809 -#: dcim/tables/devices.py:937 dcim/tables/devicetypes.py:304 -#: dcim/tables/racks.py:129 extras/filtersets.py:552 -#: ipam/forms/bulk_edit.py:261 ipam/forms/bulk_edit.py:311 -#: ipam/forms/bulk_edit.py:359 ipam/forms/bulk_edit.py:511 -#: ipam/forms/bulk_import.py:197 ipam/forms/bulk_import.py:262 -#: ipam/forms/bulk_import.py:298 ipam/forms/bulk_import.py:455 -#: ipam/forms/filtersets.py:237 ipam/forms/filtersets.py:289 -#: ipam/forms/filtersets.py:360 ipam/forms/filtersets.py:509 -#: ipam/forms/model_forms.py:188 ipam/forms/model_forms.py:221 -#: ipam/forms/model_forms.py:250 ipam/forms/model_forms.py:643 -#: ipam/tables/ip.py:258 ipam/tables/ip.py:316 ipam/tables/ip.py:367 -#: ipam/tables/vlans.py:130 ipam/tables/vlans.py:235 -#: templates/dcim/device.html:182 -#: templates/dcim/inc/panels/inventory_items.html:20 -#: templates/dcim/interface.html:223 templates/dcim/inventoryitem.html:36 -#: templates/dcim/rack.html:49 templates/ipam/ipaddress.html:41 -#: templates/ipam/iprange.html:50 templates/ipam/prefix.html:77 -#: templates/ipam/role.html:19 templates/ipam/vlan.html:52 -#: templates/virtualization/virtualmachine.html:23 -#: templates/vpn/tunneltermination.html:17 -#: templates/wireless/inc/wirelesslink_interface.html:20 -#: tenancy/forms/bulk_edit.py:142 tenancy/forms/filtersets.py:107 -#: tenancy/forms/model_forms.py:137 tenancy/tables/contacts.py:102 -#: virtualization/forms/bulk_edit.py:145 -#: virtualization/forms/bulk_import.py:106 -#: virtualization/forms/filtersets.py:157 -#: virtualization/forms/model_forms.py:195 -#: virtualization/tables/virtualmachines.py:75 vpn/forms/bulk_edit.py:87 -#: vpn/forms/bulk_import.py:81 vpn/forms/filtersets.py:85 -#: vpn/forms/model_forms.py:78 vpn/forms/model_forms.py:113 -#: vpn/tables/tunnels.py:82 +#: netbox/dcim/forms/bulk_edit.py: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" -#: dcim/forms/bulk_edit.py:364 dcim/forms/bulk_edit.py:712 -#: dcim/forms/bulk_edit.py:764 templates/dcim/device.html:104 -#: templates/dcim/module.html:77 templates/dcim/modulebay.html:70 -#: templates/dcim/rack.html:57 templates/virtualization/virtualmachine.html:35 +#: netbox/dcim/forms/bulk_edit.py:363 netbox/dcim/forms/bulk_import.py:260 +#: netbox/dcim/forms/filtersets.py:380 +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/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" -#: dcim/forms/bulk_edit.py:367 dcim/forms/filtersets.py:387 -#: dcim/forms/filtersets.py:813 dcim/forms/filtersets.py:967 -#: dcim/forms/filtersets.py:1546 +#: 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 msgid "Asset tag" msgstr "Aktivemærke" -#: dcim/forms/bulk_edit.py:411 dcim/forms/bulk_edit.py:524 -#: dcim/forms/bulk_edit.py:568 dcim/forms/bulk_edit.py:705 -#: dcim/forms/bulk_import.py:277 dcim/forms/bulk_import.py:410 -#: dcim/forms/bulk_import.py:580 dcim/forms/filtersets.py:280 -#: dcim/forms/filtersets.py:511 dcim/forms/filtersets.py:669 -#: dcim/forms/filtersets.py:804 templates/dcim/device.html:98 -#: templates/dcim/devicetype.html:65 templates/dcim/moduletype.html:41 -#: templates/dcim/rack.html:65 templates/dcim/racktype.html:28 +#: 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/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 "Luftstrøm" -#: dcim/forms/bulk_edit.py:440 dcim/forms/bulk_edit.py:910 -#: dcim/forms/bulk_import.py:322 dcim/forms/bulk_import.py:325 -#: dcim/forms/bulk_import.py:553 dcim/forms/bulk_import.py:1358 -#: dcim/forms/bulk_import.py:1362 dcim/forms/filtersets.py:104 -#: dcim/forms/filtersets.py:324 dcim/forms/filtersets.py:405 -#: dcim/forms/filtersets.py:419 dcim/forms/filtersets.py:457 -#: dcim/forms/filtersets.py:772 dcim/forms/filtersets.py:1035 -#: dcim/forms/filtersets.py:1167 dcim/forms/model_forms.py:264 -#: dcim/forms/model_forms.py:306 dcim/forms/model_forms.py:479 -#: dcim/forms/model_forms.py:755 dcim/forms/object_create.py:400 -#: dcim/tables/devices.py:161 dcim/tables/power.py:70 dcim/tables/racks.py:217 -#: ipam/forms/filtersets.py:442 templates/dcim/device.html:30 -#: templates/dcim/inc/cable_termination.html:16 -#: templates/dcim/powerfeed.html:28 templates/dcim/rack.html:13 -#: templates/dcim/rack/base.html:4 templates/dcim/rackreservation.html:19 -#: templates/dcim/rackreservation.html:36 -#: virtualization/forms/model_forms.py:113 +#: netbox/dcim/forms/bulk_edit.py: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/templates/dcim/device.html:30 +#: netbox/templates/dcim/inc/cable_termination.html:16 +#: netbox/templates/dcim/powerfeed.html:28 netbox/templates/dcim/rack.html:13 +#: netbox/templates/dcim/rack/base.html:4 +#: netbox/templates/dcim/rackreservation.html:19 +#: netbox/templates/dcim/rackreservation.html:36 +#: netbox/virtualization/forms/model_forms.py:113 msgid "Rack" msgstr "Rack" -#: dcim/forms/bulk_edit.py:444 dcim/forms/bulk_edit.py:730 -#: dcim/forms/filtersets.py:325 dcim/forms/filtersets.py:398 -#: dcim/forms/filtersets.py:481 dcim/forms/filtersets.py:608 -#: dcim/forms/filtersets.py:721 dcim/forms/filtersets.py:942 -#: dcim/forms/model_forms.py:670 dcim/forms/model_forms.py:1580 -#: templates/dcim/device_edit.html:20 +#: 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/templates/dcim/device_edit.html:20 msgid "Hardware" msgstr "Hardware" -#: dcim/forms/bulk_edit.py:500 dcim/forms/bulk_import.py:377 -#: dcim/forms/filtersets.py:499 dcim/forms/model_forms.py:353 +#: 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 msgid "Default platform" msgstr "Standardplatform" -#: dcim/forms/bulk_edit.py:505 dcim/forms/bulk_edit.py:564 -#: dcim/forms/filtersets.py:502 dcim/forms/filtersets.py:622 +#: 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 msgid "Part number" msgstr "Varenummer" -#: dcim/forms/bulk_edit.py:509 +#: netbox/dcim/forms/bulk_edit.py:515 msgid "U height" msgstr "U højde" -#: dcim/forms/bulk_edit.py:521 dcim/tables/devicetypes.py:102 +#: netbox/dcim/forms/bulk_edit.py:527 netbox/dcim/tables/devicetypes.py:102 msgid "Exclude from utilization" msgstr "Ekskluder fra udnyttelse" -#: dcim/forms/bulk_edit.py:550 dcim/forms/model_forms.py:368 -#: dcim/tables/devicetypes.py:77 templates/dcim/device.html:88 -#: templates/dcim/devicebay.html:52 templates/dcim/module.html:61 +#: 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/templates/dcim/devicebay.html:52 +#: netbox/templates/dcim/module.html:61 msgid "Device Type" msgstr "Enhedstype" -#: dcim/forms/bulk_edit.py:592 dcim/forms/model_forms.py:401 -#: dcim/tables/modules.py:17 dcim/tables/modules.py:65 -#: templates/dcim/module.html:65 templates/dcim/modulebay.html:66 -#: templates/dcim/moduletype.html:22 +#: 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/templates/dcim/module.html:65 +#: netbox/templates/dcim/modulebay.html:66 +#: netbox/templates/dcim/moduletype.html:22 msgid "Module Type" msgstr "Modultype" -#: dcim/forms/bulk_edit.py:596 dcim/forms/model_forms.py:371 -#: dcim/forms/model_forms.py:402 templates/dcim/devicetype.html:11 +#: netbox/dcim/forms/bulk_edit.py:602 netbox/dcim/forms/model_forms.py:371 +#: netbox/dcim/forms/model_forms.py:402 +#: netbox/templates/dcim/devicetype.html:11 msgid "Chassis" msgstr "Chassis" -#: dcim/forms/bulk_edit.py:610 dcim/models/devices.py:484 -#: dcim/tables/devices.py:67 +#: netbox/dcim/forms/bulk_edit.py:616 netbox/dcim/models/devices.py:484 +#: netbox/dcim/tables/devices.py:67 msgid "VM role" msgstr "VM-rolle" -#: dcim/forms/bulk_edit.py:613 dcim/forms/bulk_edit.py:637 -#: dcim/forms/bulk_edit.py:720 dcim/forms/bulk_import.py:434 -#: dcim/forms/bulk_import.py:438 dcim/forms/bulk_import.py:457 -#: dcim/forms/bulk_import.py:461 dcim/forms/bulk_import.py:586 -#: dcim/forms/bulk_import.py:590 dcim/forms/filtersets.py:689 -#: dcim/forms/filtersets.py:705 dcim/forms/filtersets.py:823 -#: dcim/forms/model_forms.py:415 dcim/forms/model_forms.py:441 -#: dcim/forms/model_forms.py:555 virtualization/forms/bulk_import.py:132 -#: virtualization/forms/bulk_import.py:133 -#: virtualization/forms/filtersets.py:188 -#: virtualization/forms/model_forms.py:215 +#: 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 msgid "Config template" msgstr "Konfigurationsskabelon" -#: dcim/forms/bulk_edit.py:661 dcim/forms/bulk_edit.py:1061 -#: dcim/forms/bulk_import.py:492 dcim/forms/filtersets.py:114 -#: dcim/forms/model_forms.py:501 dcim/forms/model_forms.py:872 -#: dcim/forms/model_forms.py:889 extras/filtersets.py:547 +#: 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 msgid "Device type" msgstr "Enhedstype" -#: dcim/forms/bulk_edit.py:672 dcim/forms/bulk_import.py:473 -#: dcim/forms/filtersets.py:119 dcim/forms/model_forms.py:509 +#: 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 msgid "Device role" msgstr "Enhedsrolle" -#: dcim/forms/bulk_edit.py:695 dcim/forms/bulk_import.py:498 -#: dcim/forms/filtersets.py:796 dcim/forms/model_forms.py:451 -#: dcim/forms/model_forms.py:513 dcim/tables/devices.py:182 -#: extras/filtersets.py:563 templates/dcim/device.html:186 -#: templates/dcim/platform.html:26 -#: templates/virtualization/virtualmachine.html:27 -#: virtualization/forms/bulk_edit.py:160 -#: virtualization/forms/bulk_import.py:122 -#: virtualization/forms/filtersets.py:168 -#: virtualization/forms/model_forms.py:203 -#: virtualization/tables/virtualmachines.py:79 +#: 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/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 msgid "Platform" msgstr "Platformen" -#: dcim/forms/bulk_edit.py:728 dcim/forms/bulk_edit.py:1281 -#: dcim/forms/bulk_edit.py:1650 dcim/forms/bulk_edit.py:1696 -#: dcim/forms/bulk_import.py:641 dcim/forms/bulk_import.py:703 -#: dcim/forms/bulk_import.py:729 dcim/forms/bulk_import.py:755 -#: dcim/forms/bulk_import.py:775 dcim/forms/bulk_import.py:828 -#: dcim/forms/bulk_import.py:946 dcim/forms/bulk_import.py:994 -#: dcim/forms/bulk_import.py:1011 dcim/forms/bulk_import.py:1023 -#: dcim/forms/bulk_import.py:1071 dcim/forms/bulk_import.py:1422 -#: dcim/forms/connections.py:24 dcim/forms/filtersets.py:131 -#: dcim/forms/filtersets.py:921 dcim/forms/filtersets.py:1051 -#: dcim/forms/filtersets.py:1242 dcim/forms/filtersets.py:1267 -#: dcim/forms/filtersets.py:1291 dcim/forms/filtersets.py:1311 -#: dcim/forms/filtersets.py:1334 dcim/forms/filtersets.py:1444 -#: dcim/forms/filtersets.py:1469 dcim/forms/filtersets.py:1493 -#: dcim/forms/filtersets.py:1511 dcim/forms/filtersets.py:1528 -#: dcim/forms/filtersets.py:1592 dcim/forms/filtersets.py:1616 -#: dcim/forms/filtersets.py:1640 dcim/forms/model_forms.py:633 -#: dcim/forms/model_forms.py:849 dcim/forms/model_forms.py:1208 -#: dcim/forms/model_forms.py:1664 dcim/forms/object_create.py:257 -#: dcim/tables/connections.py:22 dcim/tables/connections.py:41 -#: dcim/tables/connections.py:60 dcim/tables/devices.py:285 -#: dcim/tables/devices.py:371 dcim/tables/devices.py:412 -#: dcim/tables/devices.py:454 dcim/tables/devices.py:505 -#: dcim/tables/devices.py:597 dcim/tables/devices.py:697 -#: dcim/tables/devices.py:754 dcim/tables/devices.py:801 -#: dcim/tables/devices.py:861 dcim/tables/devices.py:930 -#: dcim/tables/devices.py:1057 dcim/tables/modules.py:52 -#: extras/forms/filtersets.py:321 ipam/forms/bulk_import.py:304 -#: ipam/forms/bulk_import.py:481 ipam/forms/filtersets.py:551 -#: ipam/forms/model_forms.py:319 ipam/forms/model_forms.py:679 -#: ipam/forms/model_forms.py:712 ipam/forms/model_forms.py:738 -#: ipam/tables/vlans.py:180 templates/dcim/consoleport.html:20 -#: templates/dcim/consoleserverport.html:20 templates/dcim/device.html:15 -#: templates/dcim/device.html:130 templates/dcim/device_edit.html:10 -#: templates/dcim/devicebay.html:20 templates/dcim/devicebay.html:48 -#: templates/dcim/frontport.html:20 templates/dcim/interface.html:30 -#: templates/dcim/interface.html:161 templates/dcim/inventoryitem.html:20 -#: templates/dcim/module.html:57 templates/dcim/modulebay.html:20 -#: templates/dcim/poweroutlet.html:20 templates/dcim/powerport.html:20 -#: templates/dcim/rearport.html:20 templates/dcim/virtualchassis.html:65 -#: templates/dcim/virtualchassis_edit.html:51 -#: templates/dcim/virtualdevicecontext.html:22 -#: templates/virtualization/virtualmachine.html:114 -#: templates/vpn/tunneltermination.html:23 -#: templates/wireless/inc/wirelesslink_interface.html:6 -#: virtualization/filtersets.py:167 virtualization/forms/bulk_edit.py:137 -#: virtualization/forms/bulk_import.py:99 -#: virtualization/forms/filtersets.py:128 -#: virtualization/forms/model_forms.py:185 -#: virtualization/tables/virtualmachines.py:71 vpn/choices.py:44 -#: vpn/forms/bulk_import.py:86 vpn/forms/bulk_import.py:283 -#: vpn/forms/filtersets.py:275 vpn/forms/model_forms.py:90 -#: vpn/forms/model_forms.py:125 vpn/forms/model_forms.py:236 -#: vpn/forms/model_forms.py:453 wireless/forms/model_forms.py:99 -#: wireless/forms/model_forms.py:141 wireless/tables/wirelesslan.py:75 -msgid "Device" -msgstr "Enhed" - -#: dcim/forms/bulk_edit.py:731 templates/extras/dashboard/widget_config.html:7 -#: virtualization/forms/bulk_edit.py:191 -msgid "Configuration" -msgstr "Konfiguration" - -#: dcim/forms/bulk_edit.py:745 dcim/forms/bulk_import.py:653 -#: dcim/forms/model_forms.py:647 dcim/forms/model_forms.py:897 -msgid "Module type" -msgstr "Modultype" - -#: dcim/forms/bulk_edit.py:799 dcim/forms/bulk_edit.py:984 -#: dcim/forms/bulk_edit.py:1003 dcim/forms/bulk_edit.py:1026 -#: dcim/forms/bulk_edit.py:1068 dcim/forms/bulk_edit.py:1112 -#: dcim/forms/bulk_edit.py:1163 dcim/forms/bulk_edit.py:1190 -#: dcim/forms/bulk_edit.py:1217 dcim/forms/bulk_edit.py:1235 -#: dcim/forms/bulk_edit.py:1253 dcim/forms/filtersets.py:67 -#: dcim/forms/object_create.py:46 templates/dcim/cable.html:32 -#: templates/dcim/consoleport.html:32 templates/dcim/consoleserverport.html:32 -#: templates/dcim/devicebay.html:28 templates/dcim/frontport.html:32 -#: templates/dcim/inc/panels/inventory_items.html:19 -#: templates/dcim/interface.html:42 templates/dcim/inventoryitem.html:32 -#: templates/dcim/modulebay.html:34 templates/dcim/poweroutlet.html:32 -#: templates/dcim/powerport.html:32 templates/dcim/rearport.html:32 -#: templates/extras/customfield.html:26 templates/generic/bulk_import.html:162 -msgid "Label" -msgstr "Mærke" - -#: dcim/forms/bulk_edit.py:808 dcim/forms/filtersets.py:1068 -#: templates/dcim/cable.html:50 -msgid "Length" -msgstr "Længde" - -#: dcim/forms/bulk_edit.py:813 dcim/forms/bulk_import.py:1226 -#: dcim/forms/bulk_import.py:1229 dcim/forms/filtersets.py:1072 -msgid "Length unit" -msgstr "Længdeenhed" - -#: dcim/forms/bulk_edit.py:837 templates/dcim/virtualchassis.html:23 -msgid "Domain" -msgstr "domæne" - -#: dcim/forms/bulk_edit.py:905 dcim/forms/bulk_import.py:1345 -#: dcim/forms/filtersets.py:1158 dcim/forms/model_forms.py:750 -msgid "Power panel" -msgstr "Strømpanel" - -#: dcim/forms/bulk_edit.py:927 dcim/forms/bulk_import.py:1381 -#: dcim/forms/filtersets.py:1180 templates/dcim/powerfeed.html:83 -msgid "Supply" -msgstr "Forsyning" - -#: dcim/forms/bulk_edit.py:933 dcim/forms/bulk_import.py:1386 -#: dcim/forms/filtersets.py:1185 templates/dcim/powerfeed.html:95 -msgid "Phase" -msgstr "Fase" - -#: dcim/forms/bulk_edit.py:939 dcim/forms/filtersets.py:1190 -#: templates/dcim/powerfeed.html:87 -msgid "Voltage" -msgstr "Spænding" - -#: dcim/forms/bulk_edit.py:943 dcim/forms/filtersets.py:1194 -#: templates/dcim/powerfeed.html:91 -msgid "Amperage" -msgstr "Strømstyrke" - -#: dcim/forms/bulk_edit.py:947 dcim/forms/filtersets.py:1198 -msgid "Max utilization" -msgstr "Maksimal udnyttelse" - -#: dcim/forms/bulk_edit.py:1036 -msgid "Maximum draw" -msgstr "Maksimal trækning" - -#: dcim/forms/bulk_edit.py:1039 dcim/models/device_component_templates.py:282 -#: dcim/models/device_components.py:356 -msgid "Maximum power draw (watts)" -msgstr "Maksimal forbrug (watt)" - -#: dcim/forms/bulk_edit.py:1042 -msgid "Allocated draw" -msgstr "Tildelt lodtrækning" - -#: dcim/forms/bulk_edit.py:1045 dcim/models/device_component_templates.py:289 -#: dcim/models/device_components.py:363 -msgid "Allocated power draw (watts)" -msgstr "Allokeret forbrug (watt)" - -#: dcim/forms/bulk_edit.py:1078 dcim/forms/bulk_import.py:786 -#: dcim/forms/model_forms.py:953 dcim/forms/model_forms.py:1278 -#: dcim/forms/model_forms.py:1567 dcim/forms/object_import.py:55 -msgid "Power port" -msgstr "Strømstik" - -#: dcim/forms/bulk_edit.py:1083 dcim/forms/bulk_import.py:793 -msgid "Feed leg" -msgstr "Foderben" - -#: dcim/forms/bulk_edit.py:1129 dcim/forms/bulk_edit.py:1440 -msgid "Management only" -msgstr "Kun ledelse" - -#: dcim/forms/bulk_edit.py:1139 dcim/forms/bulk_edit.py:1446 -#: dcim/forms/bulk_import.py:876 dcim/forms/filtersets.py:1394 -#: dcim/forms/object_import.py:90 -#: dcim/models/device_component_templates.py:437 -#: dcim/models/device_components.py:670 -msgid "PoE mode" -msgstr "PoE-tilstand" - -#: dcim/forms/bulk_edit.py:1145 dcim/forms/bulk_edit.py:1452 -#: dcim/forms/bulk_import.py:882 dcim/forms/filtersets.py:1399 -#: dcim/forms/object_import.py:95 -#: dcim/models/device_component_templates.py:443 -#: dcim/models/device_components.py:676 -msgid "PoE type" -msgstr "PoE-type" - -#: dcim/forms/bulk_edit.py:1151 dcim/forms/filtersets.py:1404 -#: dcim/forms/object_import.py:100 -msgid "Wireless role" -msgstr "Trådløs rolle" - -#: dcim/forms/bulk_edit.py:1288 dcim/forms/model_forms.py:669 -#: dcim/forms/model_forms.py:1223 dcim/tables/devices.py:313 -#: templates/dcim/consoleport.html:24 templates/dcim/consoleserverport.html:24 -#: templates/dcim/frontport.html:24 templates/dcim/interface.html:34 -#: templates/dcim/module.html:54 templates/dcim/modulebay.html:26 -#: templates/dcim/modulebay.html:58 templates/dcim/poweroutlet.html:24 -#: templates/dcim/powerport.html:24 templates/dcim/rearport.html:24 -msgid "Module" -msgstr "Modul" - -#: dcim/forms/bulk_edit.py:1420 dcim/tables/devices.py:665 -#: templates/dcim/interface.html:110 -msgid "LAG" -msgstr "FORSINKELSE" - -#: dcim/forms/bulk_edit.py:1425 dcim/forms/model_forms.py:1305 -msgid "Virtual device contexts" -msgstr "Virtuelle enhedskontekster" - -#: dcim/forms/bulk_edit.py:1431 dcim/forms/bulk_import.py:714 -#: dcim/forms/bulk_import.py:740 dcim/forms/filtersets.py:1252 -#: dcim/forms/filtersets.py:1277 dcim/forms/filtersets.py:1358 -#: dcim/tables/devices.py:610 -#: templates/circuits/inc/circuit_termination_fields.html:67 -#: templates/dcim/consoleport.html:40 templates/dcim/consoleserverport.html:40 -msgid "Speed" -msgstr "Hastighed" - -#: dcim/forms/bulk_edit.py:1460 dcim/forms/bulk_import.py:885 -#: templates/vpn/ikepolicy.html:25 templates/vpn/ipsecprofile.html:21 -#: templates/vpn/ipsecprofile.html:48 virtualization/forms/bulk_edit.py:233 -#: virtualization/forms/bulk_import.py:165 vpn/forms/bulk_edit.py:146 -#: vpn/forms/bulk_edit.py:232 vpn/forms/bulk_import.py:176 -#: vpn/forms/bulk_import.py:234 vpn/forms/filtersets.py:135 -#: vpn/forms/filtersets.py:178 vpn/forms/filtersets.py:192 -#: vpn/tables/crypto.py:64 vpn/tables/crypto.py:162 -msgid "Mode" -msgstr "Tilstand" - -#: dcim/forms/bulk_edit.py:1468 dcim/forms/model_forms.py:1354 -#: ipam/forms/bulk_import.py:178 ipam/forms/filtersets.py:498 -#: ipam/models/vlans.py:84 virtualization/forms/bulk_edit.py:240 -#: virtualization/forms/model_forms.py:321 -msgid "VLAN group" -msgstr "VLAN-gruppe" - -#: dcim/forms/bulk_edit.py:1476 dcim/forms/model_forms.py:1360 -#: dcim/tables/devices.py:579 virtualization/forms/bulk_edit.py:248 -#: virtualization/forms/model_forms.py:326 -msgid "Untagged VLAN" -msgstr "Umærket VLAN" - -#: dcim/forms/bulk_edit.py:1484 dcim/forms/model_forms.py:1369 -#: dcim/tables/devices.py:585 virtualization/forms/bulk_edit.py:256 -#: virtualization/forms/model_forms.py:335 -msgid "Tagged VLANs" -msgstr "Mærkede VLAN'er" - -#: dcim/forms/bulk_edit.py:1494 dcim/forms/model_forms.py:1341 -msgid "Wireless LAN group" -msgstr "Trådløs LAN-gruppe" - -#: dcim/forms/bulk_edit.py:1499 dcim/forms/model_forms.py:1346 -#: dcim/tables/devices.py:619 netbox/navigation/menu.py:146 -#: templates/dcim/interface.html:280 wireless/tables/wirelesslan.py:24 -msgid "Wireless LANs" -msgstr "Trådløse LAN" - -#: dcim/forms/bulk_edit.py:1508 dcim/forms/filtersets.py:1328 -#: dcim/forms/model_forms.py:1390 ipam/forms/bulk_edit.py:286 -#: ipam/forms/bulk_edit.py:378 ipam/forms/filtersets.py:169 -#: templates/dcim/interface.html:122 templates/ipam/prefix.html:95 -#: virtualization/forms/model_forms.py:349 -msgid "Addressing" -msgstr "Adressering" - -#: dcim/forms/bulk_edit.py:1509 dcim/forms/filtersets.py:720 -#: dcim/forms/model_forms.py:1391 virtualization/forms/model_forms.py:350 -msgid "Operation" -msgstr "Betjening" - -#: dcim/forms/bulk_edit.py:1510 dcim/forms/filtersets.py:1329 -#: dcim/forms/model_forms.py:987 dcim/forms/model_forms.py:1393 -msgid "PoE" -msgstr "PoE" - -#: dcim/forms/bulk_edit.py:1511 dcim/forms/model_forms.py:1392 -#: templates/dcim/interface.html:99 virtualization/forms/bulk_edit.py:267 -#: virtualization/forms/model_forms.py:351 -msgid "Related Interfaces" -msgstr "Relaterede grænseflader" - -#: dcim/forms/bulk_edit.py:1512 dcim/forms/model_forms.py:1394 -#: virtualization/forms/bulk_edit.py:268 -#: virtualization/forms/model_forms.py:352 -msgid "802.1Q Switching" -msgstr "802.1Q-skift" - -#: dcim/forms/bulk_edit.py:1574 dcim/forms/bulk_edit.py:1576 -msgid "Interface mode must be specified to assign VLANs" -msgstr "Interfacetilstand skal specificeres for at tildele VLAN'er" - -#: dcim/forms/bulk_edit.py:1581 dcim/forms/common.py:50 -msgid "An access interface cannot have tagged VLANs assigned." -msgstr "En adgangsgrænseflade kan ikke have tildelt taggede VLAN'er." - -#: dcim/forms/bulk_import.py:64 -msgid "Name of parent region" -msgstr "Navn på overordnet region" - -#: dcim/forms/bulk_import.py:78 -msgid "Name of parent site group" -msgstr "Navn på overordnet områdegruppe" - -#: dcim/forms/bulk_import.py:97 -msgid "Assigned region" -msgstr "Tildelt region" - -#: dcim/forms/bulk_import.py:104 tenancy/forms/bulk_import.py:44 -#: tenancy/forms/bulk_import.py:85 wireless/forms/bulk_import.py:40 -msgid "Assigned group" -msgstr "Tildelt gruppe" - -#: dcim/forms/bulk_import.py:123 -msgid "available options" -msgstr "tilgængelige muligheder" - -#: dcim/forms/bulk_import.py:134 dcim/forms/bulk_import.py:543 -#: dcim/forms/bulk_import.py:1342 ipam/forms/bulk_import.py:175 -#: ipam/forms/bulk_import.py:433 virtualization/forms/bulk_import.py:63 -#: virtualization/forms/bulk_import.py:89 -msgid "Assigned site" -msgstr "Tildelt område" - -#: dcim/forms/bulk_import.py:141 -msgid "Parent location" -msgstr "Forældreplacering" - -#: dcim/forms/bulk_import.py:143 -msgid "Location not found." -msgstr "Placering ikke fundet." - -#: dcim/forms/bulk_import.py:185 -msgid "The manufacturer of this rack type" -msgstr "Producenten af denne racktype" - -#: dcim/forms/bulk_import.py:196 -msgid "The lowest-numbered position in the rack" -msgstr "Den laveste nummererede position i racket" - -#: dcim/forms/bulk_import.py:201 dcim/forms/bulk_import.py:268 -msgid "Rail-to-rail width (in inches)" -msgstr "Skinne-til-skinne-bredde (i tommer)" - -#: dcim/forms/bulk_import.py:207 dcim/forms/bulk_import.py:274 -msgid "Unit for outer dimensions" -msgstr "Enhed til udvendige mål" - -#: dcim/forms/bulk_import.py:213 dcim/forms/bulk_import.py:286 -msgid "Unit for rack weights" -msgstr "Enhed til rackvægte" - -#: dcim/forms/bulk_import.py:245 -msgid "Name of assigned tenant" -msgstr "Navn på tildelt lejer" - -#: dcim/forms/bulk_import.py:257 -msgid "Name of assigned role" -msgstr "Navn på tildelt rolle" - -#: dcim/forms/bulk_import.py:280 dcim/forms/bulk_import.py:413 -#: dcim/forms/bulk_import.py:583 -msgid "Airflow direction" -msgstr "Luftstrømsretning" - -#: dcim/forms/bulk_import.py:312 -msgid "Parent site" -msgstr "Overordnet område" - -#: dcim/forms/bulk_import.py:319 dcim/forms/bulk_import.py:1355 -msgid "Rack's location (if any)" -msgstr "Rackets placering (hvis nogen)" - -#: dcim/forms/bulk_import.py:328 dcim/forms/model_forms.py:311 -#: dcim/tables/racks.py:222 templates/dcim/rackreservation.html:12 -#: templates/dcim/rackreservation.html:45 -msgid "Units" -msgstr "Enheder" - -#: dcim/forms/bulk_import.py:331 -msgid "Comma-separated list of individual unit numbers" -msgstr "Kommasepareret liste over individuelle enhedsnumre" - -#: dcim/forms/bulk_import.py:374 -msgid "The manufacturer which produces this device type" -msgstr "Producenten, der fremstiller denne enhedstype" - -#: dcim/forms/bulk_import.py:381 -msgid "The default platform for devices of this type (optional)" -msgstr "Standardplatformen for enheder af denne type (valgfrit)" - -#: dcim/forms/bulk_import.py:386 -msgid "Device weight" -msgstr "Enhedsvægt" - -#: dcim/forms/bulk_import.py:392 -msgid "Unit for device weight" -msgstr "Enhed til enhedens vægt" - -#: dcim/forms/bulk_import.py:418 -msgid "Module weight" -msgstr "Modulvægt" - -#: dcim/forms/bulk_import.py:424 -msgid "Unit for module weight" -msgstr "Enhed til modulvægt" - -#: dcim/forms/bulk_import.py:454 -msgid "Limit platform assignments to this manufacturer" -msgstr "Begræns platformstildelinger til denne producent" - -#: dcim/forms/bulk_import.py:476 dcim/forms/bulk_import.py:1425 -#: tenancy/forms/bulk_import.py:106 -msgid "Assigned role" -msgstr "Tildelt rolle" - -#: dcim/forms/bulk_import.py:489 -msgid "Device type manufacturer" -msgstr "Producent af enhedstype" - -#: dcim/forms/bulk_import.py:495 -msgid "Device type model" -msgstr "Enhedstypemodel" - -#: dcim/forms/bulk_import.py:502 virtualization/forms/bulk_import.py:126 -msgid "Assigned platform" -msgstr "Tildelt platform" - -#: dcim/forms/bulk_import.py:510 dcim/forms/bulk_import.py:514 -#: dcim/forms/model_forms.py:536 -msgid "Virtual chassis" -msgstr "Virtuelt kabinet" - -#: dcim/forms/bulk_import.py:517 dcim/forms/filtersets.py:728 -#: dcim/forms/filtersets.py:898 dcim/forms/model_forms.py:522 -#: dcim/tables/devices.py:202 extras/filtersets.py:596 -#: extras/forms/filtersets.py:322 ipam/forms/filtersets.py:415 -#: ipam/forms/filtersets.py:447 templates/dcim/device.html:239 -#: templates/virtualization/cluster.html:10 -#: templates/virtualization/virtualmachine.html:92 -#: templates/virtualization/virtualmachine.html:101 -#: virtualization/filtersets.py:157 virtualization/filtersets.py:277 -#: virtualization/forms/bulk_edit.py:129 -#: virtualization/forms/bulk_import.py:92 -#: virtualization/forms/filtersets.py:99 -#: virtualization/forms/filtersets.py:123 -#: virtualization/forms/filtersets.py:204 -#: virtualization/forms/model_forms.py:79 -#: virtualization/forms/model_forms.py:176 -#: virtualization/tables/virtualmachines.py:67 +#: 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/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 msgid "Cluster" msgstr "Klynge" -#: dcim/forms/bulk_import.py:521 +#: 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:52 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 "Enhed" + +#: netbox/dcim/forms/bulk_edit.py:745 +#: netbox/templates/extras/dashboard/widget_config.html:7 +#: netbox/virtualization/forms/bulk_edit.py:191 +msgid "Configuration" +msgstr "Konfiguration" + +#: netbox/dcim/forms/bulk_edit.py:746 netbox/netbox/navigation/menu.py:243 +#: netbox/templates/dcim/device_edit.html:78 +msgid "Virtualization" +msgstr "Virtualisering" + +#: 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 +msgid "Module type" +msgstr "Modultype" + +#: 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/object_create.py:46 netbox/templates/dcim/cable.html:32 +#: netbox/templates/dcim/consoleport.html:32 +#: netbox/templates/dcim/consoleserverport.html:32 +#: netbox/templates/dcim/devicebay.html:28 +#: netbox/templates/dcim/frontport.html:32 +#: netbox/templates/dcim/inc/panels/inventory_items.html:19 +#: netbox/templates/dcim/interface.html:42 +#: netbox/templates/dcim/inventoryitem.html:32 +#: netbox/templates/dcim/modulebay.html:34 +#: netbox/templates/dcim/poweroutlet.html:32 +#: netbox/templates/dcim/powerport.html:32 +#: netbox/templates/dcim/rearport.html:32 +#: netbox/templates/extras/customfield.html:26 +#: netbox/templates/generic/bulk_import.html:162 +msgid "Label" +msgstr "Mærke" + +#: netbox/dcim/forms/bulk_edit.py:823 netbox/dcim/forms/filtersets.py:1068 +#: netbox/templates/dcim/cable.html:50 +msgid "Length" +msgstr "Længde" + +#: 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 +msgid "Length unit" +msgstr "Længdeenhed" + +#: netbox/dcim/forms/bulk_edit.py:852 +#: 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 +msgid "Power panel" +msgstr "Strømpanel" + +#: 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 +msgid "Supply" +msgstr "Forsyning" + +#: 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 +msgid "Phase" +msgstr "Fase" + +#: netbox/dcim/forms/bulk_edit.py:954 netbox/dcim/forms/filtersets.py:1190 +#: netbox/templates/dcim/powerfeed.html:87 +msgid "Voltage" +msgstr "Spænding" + +#: netbox/dcim/forms/bulk_edit.py:958 netbox/dcim/forms/filtersets.py:1194 +#: netbox/templates/dcim/powerfeed.html:91 +msgid "Amperage" +msgstr "Strømstyrke" + +#: netbox/dcim/forms/bulk_edit.py:962 netbox/dcim/forms/filtersets.py:1198 +msgid "Max utilization" +msgstr "Maksimal udnyttelse" + +#: netbox/dcim/forms/bulk_edit.py:1051 +msgid "Maximum draw" +msgstr "Maksimal trækning" + +#: netbox/dcim/forms/bulk_edit.py:1054 +#: netbox/dcim/models/device_component_templates.py:282 +#: netbox/dcim/models/device_components.py:356 +msgid "Maximum power draw (watts)" +msgstr "Maksimal forbrug (watt)" + +#: netbox/dcim/forms/bulk_edit.py:1057 +msgid "Allocated draw" +msgstr "Tildelt lodtrækning" + +#: netbox/dcim/forms/bulk_edit.py:1060 +#: netbox/dcim/models/device_component_templates.py:289 +#: netbox/dcim/models/device_components.py:363 +msgid "Allocated power draw (watts)" +msgstr "Allokeret forbrug (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 +msgid "Power port" +msgstr "Strømstik" + +#: netbox/dcim/forms/bulk_edit.py:1098 netbox/dcim/forms/bulk_import.py:815 +msgid "Feed leg" +msgstr "Foderben" + +#: netbox/dcim/forms/bulk_edit.py:1144 netbox/dcim/forms/bulk_edit.py:1462 +msgid "Management only" +msgstr "Kun ledelse" + +#: 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/object_import.py:90 +#: netbox/dcim/models/device_component_templates.py:437 +#: netbox/dcim/models/device_components.py:670 +msgid "PoE mode" +msgstr "PoE-tilstand" + +#: 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/object_import.py:95 +#: netbox/dcim/models/device_component_templates.py:443 +#: netbox/dcim/models/device_components.py:676 +msgid "PoE type" +msgstr "PoE-type" + +#: netbox/dcim/forms/bulk_edit.py:1166 netbox/dcim/forms/filtersets.py:1404 +#: netbox/dcim/forms/object_import.py:100 +msgid "Wireless role" +msgstr "Trådløs rolle" + +#: 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/templates/dcim/consoleport.html:24 +#: netbox/templates/dcim/consoleserverport.html:24 +#: netbox/templates/dcim/frontport.html:24 +#: netbox/templates/dcim/interface.html:34 +#: netbox/templates/dcim/module.html:54 +#: netbox/templates/dcim/modulebay.html:26 +#: netbox/templates/dcim/modulebay.html:58 +#: netbox/templates/dcim/poweroutlet.html:24 +#: netbox/templates/dcim/powerport.html:24 +#: netbox/templates/dcim/rearport.html:24 +msgid "Module" +msgstr "Modul" + +#: netbox/dcim/forms/bulk_edit.py:1442 netbox/dcim/tables/devices.py:665 +#: netbox/templates/dcim/interface.html:110 +msgid "LAG" +msgstr "FORSINKELSE" + +#: netbox/dcim/forms/bulk_edit.py:1447 netbox/dcim/forms/model_forms.py:1312 +msgid "Virtual device contexts" +msgstr "Virtuelle enhedskontekster" + +#: 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/templates/dcim/consoleport.html:40 +#: netbox/templates/dcim/consoleserverport.html:40 +msgid "Speed" +msgstr "Hastighed" + +#: netbox/dcim/forms/bulk_edit.py:1482 netbox/dcim/forms/bulk_import.py:907 +#: netbox/templates/vpn/ikepolicy.html:25 +#: netbox/templates/vpn/ipsecprofile.html:21 +#: netbox/templates/vpn/ipsecprofile.html:48 +#: netbox/virtualization/forms/bulk_edit.py:233 +#: netbox/virtualization/forms/bulk_import.py:165 +#: netbox/vpn/forms/bulk_edit.py:146 netbox/vpn/forms/bulk_edit.py:232 +#: netbox/vpn/forms/bulk_import.py:176 netbox/vpn/forms/bulk_import.py:234 +#: netbox/vpn/forms/filtersets.py:135 netbox/vpn/forms/filtersets.py:178 +#: netbox/vpn/forms/filtersets.py:192 netbox/vpn/tables/crypto.py:64 +#: netbox/vpn/tables/crypto.py:162 +msgid "Mode" +msgstr "Tilstand" + +#: 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 +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 +msgid "Untagged VLAN" +msgstr "Umærket 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 +msgid "Tagged VLANs" +msgstr "Mærkede VLAN'er" + +#: netbox/dcim/forms/bulk_edit.py:1511 +msgid "Add tagged VLANs" +msgstr "" + +#: netbox/dcim/forms/bulk_edit.py:1520 +msgid "Remove tagged VLANs" +msgstr "" + +#: netbox/dcim/forms/bulk_edit.py:1536 netbox/dcim/forms/model_forms.py:1348 +msgid "Wireless LAN group" +msgstr "Trådløs LAN-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/wireless/tables/wirelesslan.py:24 +msgid "Wireless LANs" +msgstr "Trådløse 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 +msgid "Addressing" +msgstr "Adressering" + +#: 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 +msgid "Operation" +msgstr "Betjening" + +#: 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 +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 +msgid "Related Interfaces" +msgstr "Relaterede grænseflader" + +#: 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 +msgid "802.1Q Switching" +msgstr "802.1Q-skift" + +#: netbox/dcim/forms/bulk_edit.py:1558 +msgid "Add/Remove" +msgstr "" + +#: netbox/dcim/forms/bulk_edit.py:1617 netbox/dcim/forms/bulk_edit.py:1619 +msgid "Interface mode must be specified to assign VLANs" +msgstr "Interfacetilstand skal specificeres for at tildele VLAN'er" + +#: netbox/dcim/forms/bulk_edit.py:1624 netbox/dcim/forms/common.py:50 +msgid "An access interface cannot have tagged VLANs assigned." +msgstr "En adgangsgrænseflade kan ikke have tildelt taggede VLAN'er." + +#: netbox/dcim/forms/bulk_import.py:64 +msgid "Name of parent region" +msgstr "Navn på overordnet region" + +#: netbox/dcim/forms/bulk_import.py:78 +msgid "Name of parent site group" +msgstr "Navn på overordnet områdegruppe" + +#: netbox/dcim/forms/bulk_import.py:97 +msgid "Assigned region" +msgstr "Tildelt region" + +#: netbox/dcim/forms/bulk_import.py:104 netbox/tenancy/forms/bulk_import.py:44 +#: netbox/tenancy/forms/bulk_import.py:85 +#: netbox/wireless/forms/bulk_import.py:40 +msgid "Assigned group" +msgstr "Tildelt gruppe" + +#: netbox/dcim/forms/bulk_import.py:123 +msgid "available options" +msgstr "tilgængelige muligheder" + +#: 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 +msgid "Assigned site" +msgstr "Tildelt område" + +#: netbox/dcim/forms/bulk_import.py:141 +msgid "Parent location" +msgstr "Forældreplacering" + +#: netbox/dcim/forms/bulk_import.py:143 +msgid "Location not found." +msgstr "Placering ikke fundet." + +#: netbox/dcim/forms/bulk_import.py:185 +msgid "The manufacturer of this rack type" +msgstr "Producenten af denne racktype" + +#: netbox/dcim/forms/bulk_import.py:196 +msgid "The lowest-numbered position in the rack" +msgstr "Den laveste nummererede position i racket" + +#: netbox/dcim/forms/bulk_import.py:201 netbox/dcim/forms/bulk_import.py:276 +msgid "Rail-to-rail width (in inches)" +msgstr "Skinne-til-skinne-bredde (i tommer)" + +#: netbox/dcim/forms/bulk_import.py:207 netbox/dcim/forms/bulk_import.py:286 +msgid "Unit for outer dimensions" +msgstr "Enhed til udvendige mål" + +#: netbox/dcim/forms/bulk_import.py:213 netbox/dcim/forms/bulk_import.py:298 +msgid "Unit for rack weights" +msgstr "Enhed til rackvægte" + +#: netbox/dcim/forms/bulk_import.py:245 +msgid "Name of assigned tenant" +msgstr "Navn på tildelt lejer" + +#: netbox/dcim/forms/bulk_import.py:257 +msgid "Name of assigned role" +msgstr "Navn på tildelt rolle" + +#: netbox/dcim/forms/bulk_import.py:264 +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 +msgid "Airflow direction" +msgstr "Luftstrømsretning" + +#: netbox/dcim/forms/bulk_import.py:324 +msgid "Width must be set if not specifying a rack type." +msgstr "" + +#: netbox/dcim/forms/bulk_import.py:326 +msgid "U height must be set if not specifying a rack type." +msgstr "" + +#: netbox/dcim/forms/bulk_import.py:334 +msgid "Parent site" +msgstr "Overordnet område" + +#: netbox/dcim/forms/bulk_import.py:341 netbox/dcim/forms/bulk_import.py:1377 +msgid "Rack's location (if any)" +msgstr "Rackets placering (hvis nogen)" + +#: netbox/dcim/forms/bulk_import.py:350 netbox/dcim/forms/model_forms.py:311 +#: netbox/dcim/tables/racks.py:222 +#: netbox/templates/dcim/rackreservation.html:12 +#: netbox/templates/dcim/rackreservation.html:45 +msgid "Units" +msgstr "Enheder" + +#: netbox/dcim/forms/bulk_import.py:353 +msgid "Comma-separated list of individual unit numbers" +msgstr "Kommasepareret liste over individuelle enhedsnumre" + +#: netbox/dcim/forms/bulk_import.py:396 +msgid "The manufacturer which produces this device type" +msgstr "Producenten, der fremstiller denne enhedstype" + +#: netbox/dcim/forms/bulk_import.py:403 +msgid "The default platform for devices of this type (optional)" +msgstr "Standardplatformen for enheder af denne type (valgfrit)" + +#: netbox/dcim/forms/bulk_import.py:408 +msgid "Device weight" +msgstr "Enhedsvægt" + +#: netbox/dcim/forms/bulk_import.py:414 +msgid "Unit for device weight" +msgstr "Enhed til enhedens vægt" + +#: netbox/dcim/forms/bulk_import.py:440 +msgid "Module weight" +msgstr "Modulvægt" + +#: netbox/dcim/forms/bulk_import.py:446 +msgid "Unit for module weight" +msgstr "Enhed til modulvægt" + +#: netbox/dcim/forms/bulk_import.py:476 +msgid "Limit platform assignments to this manufacturer" +msgstr "Begræns platformstildelinger til denne producent" + +#: netbox/dcim/forms/bulk_import.py:498 netbox/dcim/forms/bulk_import.py:1447 +#: netbox/tenancy/forms/bulk_import.py:106 +msgid "Assigned role" +msgstr "Tildelt rolle" + +#: netbox/dcim/forms/bulk_import.py:511 +msgid "Device type manufacturer" +msgstr "Producent af enhedstype" + +#: netbox/dcim/forms/bulk_import.py:517 +msgid "Device type model" +msgstr "Enhedstypemodel" + +#: netbox/dcim/forms/bulk_import.py:524 +#: netbox/virtualization/forms/bulk_import.py:126 +msgid "Assigned platform" +msgstr "Tildelt platform" + +#: netbox/dcim/forms/bulk_import.py:532 netbox/dcim/forms/bulk_import.py:536 +#: netbox/dcim/forms/model_forms.py:536 +msgid "Virtual chassis" +msgstr "Virtuelt kabinet" + +#: netbox/dcim/forms/bulk_import.py:543 msgid "Virtualization cluster" msgstr "Virtualiseringsklynge" -#: dcim/forms/bulk_import.py:550 +#: netbox/dcim/forms/bulk_import.py:572 msgid "Assigned location (if any)" msgstr "Tildelt placering (hvis nogen)" -#: dcim/forms/bulk_import.py:557 +#: netbox/dcim/forms/bulk_import.py:579 msgid "Assigned rack (if any)" msgstr "Tildelt rack (hvis et sådant findes)" -#: dcim/forms/bulk_import.py:560 +#: netbox/dcim/forms/bulk_import.py:582 msgid "Face" msgstr "Ansigt" -#: dcim/forms/bulk_import.py:563 +#: netbox/dcim/forms/bulk_import.py:585 msgid "Mounted rack face" msgstr "Monteret rackflade" -#: dcim/forms/bulk_import.py:570 +#: netbox/dcim/forms/bulk_import.py:592 msgid "Parent device (for child devices)" msgstr "Overordnet enhed (til underordnede enheder)" -#: dcim/forms/bulk_import.py:573 +#: netbox/dcim/forms/bulk_import.py:595 msgid "Device bay" msgstr "Enhedsplads" -#: dcim/forms/bulk_import.py:577 +#: netbox/dcim/forms/bulk_import.py:599 msgid "Device bay in which this device is installed (for child devices)" msgstr "Enhedsplads, hvor denne enhed er installeret (til børneenheder)" -#: dcim/forms/bulk_import.py:644 +#: netbox/dcim/forms/bulk_import.py:666 msgid "The device in which this module is installed" msgstr "Enheden, hvor dette modul er installeret" -#: dcim/forms/bulk_import.py:647 dcim/forms/model_forms.py:640 +#: netbox/dcim/forms/bulk_import.py:669 netbox/dcim/forms/model_forms.py:640 msgid "Module bay" msgstr "Modulplads" -#: dcim/forms/bulk_import.py:650 +#: netbox/dcim/forms/bulk_import.py:672 msgid "The module bay in which this module is installed" msgstr "Modulrummet, hvor dette modul er installeret" -#: dcim/forms/bulk_import.py:656 +#: netbox/dcim/forms/bulk_import.py:678 msgid "The type of module" msgstr "Typen af modul" -#: dcim/forms/bulk_import.py:664 dcim/forms/model_forms.py:656 +#: netbox/dcim/forms/bulk_import.py:686 netbox/dcim/forms/model_forms.py:656 msgid "Replicate components" msgstr "Replikerer komponenter" -#: dcim/forms/bulk_import.py:666 +#: netbox/dcim/forms/bulk_import.py:688 msgid "" "Automatically populate components associated with this module type (enabled " "by default)" @@ -3939,265 +4365,272 @@ msgstr "" "Udfyld automatisk komponenter, der er knyttet til denne modultype (aktiveret" " som standard)" -#: dcim/forms/bulk_import.py:669 dcim/forms/model_forms.py:662 +#: netbox/dcim/forms/bulk_import.py:691 netbox/dcim/forms/model_forms.py:662 msgid "Adopt components" msgstr "Vedtage komponenter" -#: dcim/forms/bulk_import.py:671 dcim/forms/model_forms.py:665 +#: netbox/dcim/forms/bulk_import.py:693 netbox/dcim/forms/model_forms.py:665 msgid "Adopt already existing components" msgstr "Vedtage allerede eksisterende komponenter" -#: dcim/forms/bulk_import.py:711 dcim/forms/bulk_import.py:737 -#: dcim/forms/bulk_import.py:763 +#: netbox/dcim/forms/bulk_import.py:733 netbox/dcim/forms/bulk_import.py:759 +#: netbox/dcim/forms/bulk_import.py:785 msgid "Port type" msgstr "Porttype" -#: dcim/forms/bulk_import.py:719 dcim/forms/bulk_import.py:745 +#: netbox/dcim/forms/bulk_import.py:741 netbox/dcim/forms/bulk_import.py:767 msgid "Port speed in bps" msgstr "Porthastighed i bps" -#: dcim/forms/bulk_import.py:783 +#: netbox/dcim/forms/bulk_import.py:805 msgid "Outlet type" msgstr "Udtagstype" -#: dcim/forms/bulk_import.py:790 +#: netbox/dcim/forms/bulk_import.py:812 msgid "Local power port which feeds this outlet" msgstr "Lokalt strømstik, der forsyner dette strømudtag" -#: dcim/forms/bulk_import.py:796 +#: netbox/dcim/forms/bulk_import.py:818 msgid "Electrical phase (for three-phase circuits)" msgstr "Elektrisk fase (til trefasede kredsløb)" -#: dcim/forms/bulk_import.py:837 dcim/forms/model_forms.py:1316 -#: virtualization/forms/bulk_import.py:155 -#: virtualization/forms/model_forms.py:305 +#: 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 msgid "Parent interface" msgstr "Forældregrænseflade" -#: dcim/forms/bulk_import.py:844 dcim/forms/model_forms.py:1324 -#: virtualization/forms/bulk_import.py:162 -#: virtualization/forms/model_forms.py:313 +#: 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 msgid "Bridged interface" msgstr "Brobaseret grænseflade" -#: dcim/forms/bulk_import.py:847 +#: netbox/dcim/forms/bulk_import.py:869 msgid "Lag" msgstr "Forsinkelse" -#: dcim/forms/bulk_import.py:851 +#: netbox/dcim/forms/bulk_import.py:873 msgid "Parent LAG interface" msgstr "Overordnet LAG-grænseflade" -#: dcim/forms/bulk_import.py:854 +#: netbox/dcim/forms/bulk_import.py:876 msgid "Vdcs" msgstr "Vdcs" -#: dcim/forms/bulk_import.py:859 +#: netbox/dcim/forms/bulk_import.py:881 msgid "VDC names separated by commas, encased with double quotes. Example:" msgstr "" "VDC-navne adskilt af kommaer, indkapslet med dobbelte anførselstegn. " "Eksempel:" -#: dcim/forms/bulk_import.py:865 +#: netbox/dcim/forms/bulk_import.py:887 msgid "Physical medium" msgstr "Fysisk medium" -#: dcim/forms/bulk_import.py:868 dcim/forms/filtersets.py:1365 +#: netbox/dcim/forms/bulk_import.py:890 netbox/dcim/forms/filtersets.py:1365 msgid "Duplex" msgstr "Duplex" -#: dcim/forms/bulk_import.py:873 +#: netbox/dcim/forms/bulk_import.py:895 msgid "Poe mode" msgstr "Poe-tilstand" -#: dcim/forms/bulk_import.py:879 +#: netbox/dcim/forms/bulk_import.py:901 msgid "Poe type" msgstr "Poe-type" -#: dcim/forms/bulk_import.py:888 virtualization/forms/bulk_import.py:168 +#: netbox/dcim/forms/bulk_import.py:910 +#: netbox/virtualization/forms/bulk_import.py:168 msgid "IEEE 802.1Q operational mode (for L2 interfaces)" msgstr "IEEE 802.1Q driftstilstand (til L2-grænseflader)" -#: dcim/forms/bulk_import.py:895 ipam/forms/bulk_import.py:161 -#: ipam/forms/bulk_import.py:247 ipam/forms/bulk_import.py:283 -#: ipam/forms/filtersets.py:201 ipam/forms/filtersets.py:277 -#: ipam/forms/filtersets.py:336 virtualization/forms/bulk_import.py:175 +#: netbox/dcim/forms/bulk_import.py: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 msgid "Assigned VRF" msgstr "Tildelt VRF" -#: dcim/forms/bulk_import.py:898 +#: netbox/dcim/forms/bulk_import.py:920 msgid "Rf role" msgstr "Rf-rolle" -#: dcim/forms/bulk_import.py:901 +#: netbox/dcim/forms/bulk_import.py:923 msgid "Wireless role (AP/station)" msgstr "Trådløs rolle (AP/station)" -#: dcim/forms/bulk_import.py:937 +#: netbox/dcim/forms/bulk_import.py:959 #, python-brace-format msgid "VDC {vdc} is not assigned to device {device}" msgstr "VDC {vdc} er ikke tildelt enheden {device}" -#: dcim/forms/bulk_import.py:951 dcim/forms/model_forms.py:1000 -#: dcim/forms/model_forms.py:1575 dcim/forms/object_import.py:117 +#: 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 msgid "Rear port" msgstr "Bageste port" -#: dcim/forms/bulk_import.py:954 +#: netbox/dcim/forms/bulk_import.py:976 msgid "Corresponding rear port" msgstr "Tilsvarende bagport" -#: dcim/forms/bulk_import.py:959 dcim/forms/bulk_import.py:1000 -#: dcim/forms/bulk_import.py:1216 +#: netbox/dcim/forms/bulk_import.py:981 netbox/dcim/forms/bulk_import.py:1022 +#: netbox/dcim/forms/bulk_import.py:1238 msgid "Physical medium classification" msgstr "Klassificering af fysisk medium" -#: dcim/forms/bulk_import.py:1028 dcim/tables/devices.py:822 +#: netbox/dcim/forms/bulk_import.py:1050 netbox/dcim/tables/devices.py:822 msgid "Installed device" msgstr "Installeret enhed" -#: dcim/forms/bulk_import.py:1032 +#: netbox/dcim/forms/bulk_import.py:1054 msgid "Child device installed within this bay" msgstr "Børneenhed installeret i denne bugt" -#: dcim/forms/bulk_import.py:1034 +#: netbox/dcim/forms/bulk_import.py:1056 msgid "Child device not found." msgstr "Børneenhed blev ikke fundet." -#: dcim/forms/bulk_import.py:1092 +#: netbox/dcim/forms/bulk_import.py:1114 msgid "Parent inventory item" msgstr "Overordnet beholdningspost" -#: dcim/forms/bulk_import.py:1095 +#: netbox/dcim/forms/bulk_import.py:1117 msgid "Component type" msgstr "Komponenttype" -#: dcim/forms/bulk_import.py:1099 +#: netbox/dcim/forms/bulk_import.py:1121 msgid "Component Type" msgstr "Komponenttype" -#: dcim/forms/bulk_import.py:1102 +#: netbox/dcim/forms/bulk_import.py:1124 msgid "Compnent name" msgstr "Komponentnavn" -#: dcim/forms/bulk_import.py:1104 +#: netbox/dcim/forms/bulk_import.py:1126 msgid "Component Name" msgstr "Komponentnavn" -#: dcim/forms/bulk_import.py:1146 +#: netbox/dcim/forms/bulk_import.py:1168 #, python-brace-format msgid "Component not found: {device} - {component_name}" msgstr "Komponent ikke fundet: {device} - {component_name}" -#: dcim/forms/bulk_import.py:1171 +#: netbox/dcim/forms/bulk_import.py:1193 msgid "Side A device" msgstr "Side A-enhed" -#: dcim/forms/bulk_import.py:1174 dcim/forms/bulk_import.py:1192 +#: netbox/dcim/forms/bulk_import.py:1196 netbox/dcim/forms/bulk_import.py:1214 msgid "Device name" msgstr "Enhedsnavn" -#: dcim/forms/bulk_import.py:1177 +#: netbox/dcim/forms/bulk_import.py:1199 msgid "Side A type" msgstr "Side A type" -#: dcim/forms/bulk_import.py:1180 dcim/forms/bulk_import.py:1198 +#: netbox/dcim/forms/bulk_import.py:1202 netbox/dcim/forms/bulk_import.py:1220 msgid "Termination type" msgstr "Afslutningstype" -#: dcim/forms/bulk_import.py:1183 +#: netbox/dcim/forms/bulk_import.py:1205 msgid "Side A name" msgstr "Side A navn" -#: dcim/forms/bulk_import.py:1184 dcim/forms/bulk_import.py:1202 +#: netbox/dcim/forms/bulk_import.py:1206 netbox/dcim/forms/bulk_import.py:1224 msgid "Termination name" msgstr "Opsigelsesnavn" -#: dcim/forms/bulk_import.py:1189 +#: netbox/dcim/forms/bulk_import.py:1211 msgid "Side B device" msgstr "Side B-enhed" -#: dcim/forms/bulk_import.py:1195 +#: netbox/dcim/forms/bulk_import.py:1217 msgid "Side B type" msgstr "Side B type" -#: dcim/forms/bulk_import.py:1201 +#: netbox/dcim/forms/bulk_import.py:1223 msgid "Side B name" msgstr "Side B navn" -#: dcim/forms/bulk_import.py:1210 wireless/forms/bulk_import.py:86 +#: netbox/dcim/forms/bulk_import.py:1232 +#: netbox/wireless/forms/bulk_import.py:86 msgid "Connection status" msgstr "Forbindelsesstatus" -#: dcim/forms/bulk_import.py:1262 +#: netbox/dcim/forms/bulk_import.py:1284 #, python-brace-format msgid "Side {side_upper}: {device} {termination_object} is already connected" msgstr "" "Side {side_upper}: {device} {termination_object} er allerede tilsluttet" -#: dcim/forms/bulk_import.py:1268 +#: netbox/dcim/forms/bulk_import.py:1290 #, python-brace-format msgid "{side_upper} side termination not found: {device} {name}" msgstr "{side_upper} sideafslutning ikke fundet: {device} {name}" -#: dcim/forms/bulk_import.py:1293 dcim/forms/model_forms.py:785 -#: dcim/tables/devices.py:1027 templates/dcim/device.html:132 -#: templates/dcim/virtualchassis.html:27 templates/dcim/virtualchassis.html:67 +#: 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/templates/dcim/virtualchassis.html:27 +#: netbox/templates/dcim/virtualchassis.html:67 msgid "Master" msgstr "Mester" -#: dcim/forms/bulk_import.py:1297 +#: netbox/dcim/forms/bulk_import.py:1319 msgid "Master device" msgstr "Hovedenhed" -#: dcim/forms/bulk_import.py:1314 +#: netbox/dcim/forms/bulk_import.py:1336 msgid "Name of parent site" msgstr "Navn på overordnet område" -#: dcim/forms/bulk_import.py:1348 +#: netbox/dcim/forms/bulk_import.py:1370 msgid "Upstream power panel" msgstr "Hoved strømpanel" -#: dcim/forms/bulk_import.py:1378 +#: netbox/dcim/forms/bulk_import.py:1400 msgid "Primary or redundant" msgstr "Primær eller redundant" -#: dcim/forms/bulk_import.py:1383 +#: netbox/dcim/forms/bulk_import.py:1405 msgid "Supply type (AC/DC)" msgstr "Forsyningstype (AC/DC)" -#: dcim/forms/bulk_import.py:1388 +#: netbox/dcim/forms/bulk_import.py:1410 msgid "Single or three-phase" msgstr "Enkelt- eller trefaset" -#: dcim/forms/bulk_import.py:1439 dcim/forms/model_forms.py:1670 -#: templates/dcim/device.html:190 templates/dcim/virtualdevicecontext.html:30 -#: templates/virtualization/virtualmachine.html:52 +#: netbox/dcim/forms/bulk_import.py:1461 netbox/dcim/forms/model_forms.py:1677 +#: netbox/templates/dcim/device.html:190 +#: netbox/templates/dcim/virtualdevicecontext.html:30 +#: netbox/templates/virtualization/virtualmachine.html:52 msgid "Primary IPv4" msgstr "Primær IPv4" -#: dcim/forms/bulk_import.py:1443 +#: netbox/dcim/forms/bulk_import.py:1465 msgid "IPv4 address with mask, e.g. 1.2.3.4/24" msgstr "IP-adresse med maske, fx 1.2.3.4/24" -#: dcim/forms/bulk_import.py:1446 dcim/forms/model_forms.py:1679 -#: templates/dcim/device.html:206 templates/dcim/virtualdevicecontext.html:41 -#: templates/virtualization/virtualmachine.html:68 +#: netbox/dcim/forms/bulk_import.py:1468 netbox/dcim/forms/model_forms.py:1686 +#: netbox/templates/dcim/device.html:206 +#: netbox/templates/dcim/virtualdevicecontext.html:41 +#: netbox/templates/virtualization/virtualmachine.html:68 msgid "Primary IPv6" msgstr "Primær IPv6" -#: dcim/forms/bulk_import.py:1450 +#: netbox/dcim/forms/bulk_import.py:1472 msgid "IPv6 address with prefix length, e.g. 2001:db8::1/64" msgstr "IPv6-adresse med præfix-længde, fx 2001:db8::1/64" -#: dcim/forms/common.py:24 dcim/models/device_components.py:527 -#: templates/dcim/interface.html:57 -#: templates/virtualization/vminterface.html:55 -#: virtualization/forms/bulk_edit.py:225 +#: netbox/dcim/forms/common.py:24 netbox/dcim/models/device_components.py:527 +#: netbox/templates/dcim/interface.html:57 +#: netbox/templates/virtualization/vminterface.html:55 +#: netbox/virtualization/forms/bulk_edit.py:225 msgid "MTU" msgstr "MTU" -#: dcim/forms/common.py:65 +#: netbox/dcim/forms/common.py:65 #, python-brace-format msgid "" "The tagged VLANs ({vlans}) must belong to the same site as the interface's " @@ -4206,7 +4639,7 @@ msgstr "" "De mærkede VLAN'er ({vlans}) skal tilhøre det samme område som grænsefladens" " overordnede enhed/VM, eller de skal være globale" -#: dcim/forms/common.py:126 +#: netbox/dcim/forms/common.py:126 msgid "" "Cannot install module with placeholder values in a module bay with no " "position defined." @@ -4214,7 +4647,7 @@ msgstr "" "Kan ikke installere modul med pladsholderværdier i en modulplads uden " "defineret position." -#: dcim/forms/common.py:131 +#: netbox/dcim/forms/common.py:131 #, python-brace-format msgid "" "Cannot install module with placeholder values in a module bay tree {level} " @@ -4223,187 +4656,198 @@ msgstr "" "Kan ikke installere modul med pladsholderværdier i et modullaurbærtræ " "{level} i træet, men {tokens} pladsholdere givet." -#: dcim/forms/common.py:144 +#: netbox/dcim/forms/common.py:144 #, python-brace-format msgid "Cannot adopt {model} {name} as it already belongs to a module" msgstr "Kan ikke adoptere {model} {name} da det allerede hører til et modul" -#: dcim/forms/common.py:153 +#: netbox/dcim/forms/common.py:153 #, python-brace-format msgid "A {model} named {name} already exists" msgstr "EN {model} som hedder {name} findes allerede" -#: dcim/forms/connections.py:49 dcim/forms/model_forms.py:738 -#: dcim/tables/power.py:66 templates/dcim/inc/cable_termination.html:37 -#: templates/dcim/powerfeed.html:24 templates/dcim/powerpanel.html:19 -#: templates/dcim/trace/powerpanel.html:4 +#: netbox/dcim/forms/connections.py:49 netbox/dcim/forms/model_forms.py:738 +#: netbox/dcim/tables/power.py:66 +#: netbox/templates/dcim/inc/cable_termination.html:37 +#: netbox/templates/dcim/powerfeed.html:24 +#: netbox/templates/dcim/powerpanel.html:19 +#: netbox/templates/dcim/trace/powerpanel.html:4 msgid "Power Panel" msgstr "Strømpanel" -#: dcim/forms/connections.py:58 dcim/forms/model_forms.py:765 -#: templates/dcim/powerfeed.html:21 templates/dcim/powerport.html:80 +#: netbox/dcim/forms/connections.py:58 netbox/dcim/forms/model_forms.py:765 +#: netbox/templates/dcim/powerfeed.html:21 +#: netbox/templates/dcim/powerport.html:80 msgid "Power Feed" msgstr "Strømforsyning" -#: dcim/forms/connections.py:81 +#: netbox/dcim/forms/connections.py:81 msgid "Side" msgstr "Side" -#: dcim/forms/filtersets.py:136 dcim/tables/devices.py:295 +#: netbox/dcim/forms/filtersets.py:136 netbox/dcim/tables/devices.py:295 msgid "Device Status" msgstr "Enhedsstatus" -#: dcim/forms/filtersets.py:149 +#: netbox/dcim/forms/filtersets.py:149 msgid "Parent region" msgstr "Overordnet region" -#: dcim/forms/filtersets.py:163 tenancy/forms/bulk_import.py:28 -#: tenancy/forms/bulk_import.py:62 tenancy/forms/filtersets.py:33 -#: tenancy/forms/filtersets.py:62 wireless/forms/bulk_import.py:25 -#: wireless/forms/filtersets.py:25 +#: netbox/dcim/forms/filtersets.py:163 netbox/tenancy/forms/bulk_import.py:28 +#: netbox/tenancy/forms/bulk_import.py:62 +#: netbox/tenancy/forms/filtersets.py:33 netbox/tenancy/forms/filtersets.py:62 +#: netbox/wireless/forms/bulk_import.py:25 +#: netbox/wireless/forms/filtersets.py:25 msgid "Parent group" msgstr "Forældregruppe" -#: dcim/forms/filtersets.py:242 templates/dcim/location.html:58 -#: templates/dcim/site.html:56 +#: netbox/dcim/forms/filtersets.py:242 netbox/templates/dcim/location.html:58 +#: netbox/templates/dcim/site.html:56 msgid "Facility" msgstr "Faciliteterne" -#: dcim/forms/filtersets.py:380 -msgid "Rack type" -msgstr "Racktype" - -#: dcim/forms/filtersets.py:397 +#: netbox/dcim/forms/filtersets.py:397 msgid "Function" msgstr "Funktion" -#: dcim/forms/filtersets.py:483 dcim/forms/model_forms.py:373 -#: templates/inc/panels/image_attachments.html:6 +#: netbox/dcim/forms/filtersets.py:483 netbox/dcim/forms/model_forms.py:373 +#: netbox/templates/inc/panels/image_attachments.html:6 msgid "Images" msgstr "Billeder" -#: dcim/forms/filtersets.py:486 dcim/forms/filtersets.py:611 -#: dcim/forms/filtersets.py:726 +#: netbox/dcim/forms/filtersets.py:486 netbox/dcim/forms/filtersets.py:611 +#: netbox/dcim/forms/filtersets.py:726 msgid "Components" msgstr "Komponenter" -#: dcim/forms/filtersets.py:506 +#: netbox/dcim/forms/filtersets.py:506 msgid "Subdevice role" msgstr "Underenhedsrolle" -#: dcim/forms/filtersets.py:790 dcim/tables/racks.py:54 -#: templates/dcim/racktype.html:20 +#: netbox/dcim/forms/filtersets.py:790 netbox/dcim/tables/racks.py:54 +#: netbox/templates/dcim/racktype.html:20 msgid "Model" msgstr "Modellen" -#: dcim/forms/filtersets.py:834 +#: netbox/dcim/forms/filtersets.py:834 msgid "Has an OOB IP" msgstr "Har en OOB IP" -#: dcim/forms/filtersets.py:841 +#: netbox/dcim/forms/filtersets.py:841 msgid "Virtual chassis member" msgstr "Virtuelt chassismedlem" -#: dcim/forms/filtersets.py:890 +#: netbox/dcim/forms/filtersets.py:890 msgid "Has virtual device contexts" msgstr "Har virtuelle enhedskontekster" -#: dcim/forms/filtersets.py:903 extras/filtersets.py:585 -#: ipam/forms/filtersets.py:452 virtualization/forms/filtersets.py:112 +#: netbox/dcim/forms/filtersets.py:903 netbox/extras/filtersets.py:585 +#: netbox/ipam/forms/filtersets.py:452 +#: netbox/virtualization/forms/filtersets.py:112 msgid "Cluster group" msgstr "Klyngegruppe" -#: dcim/forms/filtersets.py:1210 +#: netbox/dcim/forms/filtersets.py:1210 msgid "Cabled" msgstr "Kablet" -#: dcim/forms/filtersets.py:1217 +#: netbox/dcim/forms/filtersets.py:1217 msgid "Occupied" msgstr "Besat" -#: dcim/forms/filtersets.py:1244 dcim/forms/filtersets.py:1269 -#: dcim/forms/filtersets.py:1293 dcim/forms/filtersets.py:1313 -#: dcim/forms/filtersets.py:1336 dcim/tables/devices.py:364 -#: templates/dcim/consoleport.html:55 templates/dcim/consoleserverport.html:55 -#: templates/dcim/frontport.html:69 templates/dcim/interface.html:140 -#: templates/dcim/powerfeed.html:110 templates/dcim/poweroutlet.html:59 -#: templates/dcim/powerport.html:59 templates/dcim/rearport.html:65 +#: netbox/dcim/forms/filtersets.py: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/templates/dcim/consoleport.html:55 +#: netbox/templates/dcim/consoleserverport.html:55 +#: netbox/templates/dcim/frontport.html:69 +#: netbox/templates/dcim/interface.html:140 +#: netbox/templates/dcim/powerfeed.html:110 +#: netbox/templates/dcim/poweroutlet.html:59 +#: netbox/templates/dcim/powerport.html:59 +#: netbox/templates/dcim/rearport.html:65 msgid "Connection" msgstr "Forbindelse" -#: dcim/forms/filtersets.py:1348 extras/forms/bulk_edit.py:326 -#: extras/forms/bulk_import.py:247 extras/forms/filtersets.py:464 -#: extras/forms/model_forms.py:675 extras/tables/tables.py:579 -#: templates/extras/journalentry.html:30 +#: netbox/dcim/forms/filtersets.py:1348 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 "Venlig" -#: dcim/forms/filtersets.py:1377 +#: netbox/dcim/forms/filtersets.py:1377 msgid "Mgmt only" msgstr "Kun Mgmt" -#: dcim/forms/filtersets.py:1389 dcim/forms/model_forms.py:1383 -#: dcim/models/device_components.py:629 templates/dcim/interface.html:129 +#: 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 msgid "WWN" msgstr "WWN" -#: dcim/forms/filtersets.py:1409 +#: netbox/dcim/forms/filtersets.py:1409 msgid "Wireless channel" msgstr "Trådløs kanal" -#: dcim/forms/filtersets.py:1413 +#: netbox/dcim/forms/filtersets.py:1413 msgid "Channel frequency (MHz)" msgstr "Kanalfrekvens (MHz)" -#: dcim/forms/filtersets.py:1417 +#: netbox/dcim/forms/filtersets.py:1417 msgid "Channel width (MHz)" msgstr "Kanalbredde (MHz)" -#: dcim/forms/filtersets.py:1421 templates/dcim/interface.html:85 +#: netbox/dcim/forms/filtersets.py:1421 +#: netbox/templates/dcim/interface.html:85 msgid "Transmit power (dBm)" msgstr "Sendeeffekt (dBm)" -#: dcim/forms/filtersets.py:1446 dcim/forms/filtersets.py:1471 -#: dcim/tables/devices.py:327 templates/dcim/cable.html:12 -#: templates/dcim/cable_trace.html:46 templates/dcim/frontport.html:77 -#: templates/dcim/htmx/cable_edit.html:50 -#: templates/dcim/inc/connection_endpoints.html:4 -#: templates/dcim/rearport.html:73 templates/dcim/trace/cable.html:7 +#: netbox/dcim/forms/filtersets.py:1446 netbox/dcim/forms/filtersets.py:1471 +#: netbox/dcim/tables/devices.py:327 netbox/templates/dcim/cable.html:12 +#: netbox/templates/dcim/cable_trace.html:46 +#: netbox/templates/dcim/frontport.html:77 +#: netbox/templates/dcim/htmx/cable_edit.html:50 +#: netbox/templates/dcim/inc/connection_endpoints.html:4 +#: netbox/templates/dcim/rearport.html:73 +#: netbox/templates/dcim/trace/cable.html:7 msgid "Cable" msgstr "Kabel" -#: dcim/forms/filtersets.py:1550 dcim/tables/devices.py:949 +#: netbox/dcim/forms/filtersets.py:1550 netbox/dcim/tables/devices.py:949 msgid "Discovered" msgstr "Opdaget" -#: dcim/forms/formsets.py:20 +#: netbox/dcim/forms/formsets.py:20 #, python-brace-format msgid "A virtual chassis member already exists in position {vc_position}." msgstr "Et virtuelt chassiselement findes allerede på plads {vc_position}." -#: dcim/forms/model_forms.py:140 +#: netbox/dcim/forms/model_forms.py:140 msgid "Contact Info" msgstr "Kontaktoplysninger" -#: dcim/forms/model_forms.py:195 templates/dcim/rackrole.html:19 +#: netbox/dcim/forms/model_forms.py:195 netbox/templates/dcim/rackrole.html:19 msgid "Rack Role" msgstr "Rackrolle" -#: dcim/forms/model_forms.py:212 dcim/forms/model_forms.py:362 -#: dcim/forms/model_forms.py:446 utilities/forms/fields/fields.py:47 +#: netbox/dcim/forms/model_forms.py:212 netbox/dcim/forms/model_forms.py:362 +#: netbox/dcim/forms/model_forms.py:446 +#: netbox/utilities/forms/fields/fields.py:47 msgid "Slug" msgstr "Slug" -#: dcim/forms/model_forms.py:259 +#: netbox/dcim/forms/model_forms.py:259 msgid "Select a pre-defined rack type, or set physical characteristics below." msgstr "" "Vælg en foruddefineret racktype, eller angiv fysiske egenskaber nedenfor." -#: dcim/forms/model_forms.py:265 +#: netbox/dcim/forms/model_forms.py:265 msgid "Inventory Control" msgstr "Lagerstyring" -#: dcim/forms/model_forms.py:313 +#: netbox/dcim/forms/model_forms.py:313 msgid "" "Comma-separated list of numeric unit IDs. A range may be specified using a " "hyphen." @@ -4411,145 +4855,172 @@ msgstr "" "Kommasepareret liste over numeriske enheds-id'er. Et interval kan angives " "ved hjælp af en bindestreg." -#: dcim/forms/model_forms.py:322 dcim/tables/racks.py:202 +#: netbox/dcim/forms/model_forms.py:322 netbox/dcim/tables/racks.py:202 msgid "Reservation" msgstr "Reservation" -#: dcim/forms/model_forms.py:423 templates/dcim/devicerole.html:23 +#: netbox/dcim/forms/model_forms.py:423 +#: netbox/templates/dcim/devicerole.html:23 msgid "Device Role" msgstr "Enhedsrolle" -#: dcim/forms/model_forms.py:490 dcim/models/devices.py:644 +#: netbox/dcim/forms/model_forms.py:490 netbox/dcim/models/devices.py:644 msgid "The lowest-numbered unit occupied by the device" msgstr "Den lavest nummererede enhed, der er besat af enheden" -#: dcim/forms/model_forms.py:547 +#: netbox/dcim/forms/model_forms.py:547 msgid "The position in the virtual chassis this device is identified by" msgstr "" "Placeringen i det virtuelle chassis, som denne enhed identificeres ved" -#: dcim/forms/model_forms.py:552 +#: netbox/dcim/forms/model_forms.py:552 msgid "The priority of the device in the virtual chassis" msgstr "Enhedens prioritet i det virtuelle chassis" -#: dcim/forms/model_forms.py:659 +#: netbox/dcim/forms/model_forms.py:659 msgid "Automatically populate components associated with this module type" msgstr "Udfyld automatisk komponenter, der er knyttet til denne modultype" -#: dcim/forms/model_forms.py:767 +#: netbox/dcim/forms/model_forms.py:767 msgid "Characteristics" msgstr "Karakteristika" -#: dcim/forms/model_forms.py:1087 +#: netbox/dcim/forms/model_forms.py:914 +#, python-brace-format +msgid "" +"Alphanumeric ranges are supported for bulk creation. Mixed cases and types " +"within a single range are not supported (example: " +"[ge,xe]-0/0/[0-9]). The token {module}, if " +"present, will be automatically replaced with the position value when " +"creating a new module." +msgstr "" + +#: netbox/dcim/forms/model_forms.py:1094 msgid "Console port template" msgstr "Konsolportskabelon" -#: dcim/forms/model_forms.py:1095 +#: netbox/dcim/forms/model_forms.py:1102 msgid "Console server port template" msgstr "Konsolserverportskabelon" -#: dcim/forms/model_forms.py:1103 +#: netbox/dcim/forms/model_forms.py:1110 msgid "Front port template" msgstr "Frontportskabelon" -#: dcim/forms/model_forms.py:1111 +#: netbox/dcim/forms/model_forms.py:1118 msgid "Interface template" msgstr "Grænsefladeskabelon" -#: dcim/forms/model_forms.py:1119 +#: netbox/dcim/forms/model_forms.py:1126 msgid "Power outlet template" msgstr "Skabelon til strømudtag" -#: dcim/forms/model_forms.py:1127 +#: netbox/dcim/forms/model_forms.py:1134 msgid "Power port template" msgstr "Strømstikskabelon" -#: dcim/forms/model_forms.py:1135 +#: netbox/dcim/forms/model_forms.py:1142 msgid "Rear port template" msgstr "Bagport skabelon" -#: dcim/forms/model_forms.py:1144 dcim/forms/model_forms.py:1388 -#: dcim/forms/model_forms.py:1551 dcim/forms/model_forms.py:1583 -#: dcim/tables/connections.py:65 ipam/forms/bulk_import.py:318 -#: ipam/forms/model_forms.py:280 ipam/forms/model_forms.py:289 -#: ipam/tables/fhrp.py:64 ipam/tables/ip.py:372 ipam/tables/vlans.py:169 -#: templates/circuits/inc/circuit_termination_fields.html:51 -#: templates/dcim/frontport.html:106 templates/dcim/interface.html:27 -#: templates/dcim/interface.html:184 templates/dcim/interface.html:310 -#: templates/dcim/rearport.html:102 -#: templates/virtualization/vminterface.html:18 -#: templates/vpn/tunneltermination.html:31 -#: templates/wireless/inc/wirelesslink_interface.html:10 -#: templates/wireless/wirelesslink.html:10 -#: templates/wireless/wirelesslink.html:55 -#: virtualization/forms/model_forms.py:348 vpn/forms/bulk_import.py:297 -#: vpn/forms/model_forms.py:436 vpn/forms/model_forms.py:445 -#: wireless/forms/model_forms.py:113 wireless/forms/model_forms.py:155 +#: netbox/dcim/forms/model_forms.py: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 "Grænseflade" -#: dcim/forms/model_forms.py:1145 dcim/forms/model_forms.py:1584 -#: dcim/tables/connections.py:27 templates/dcim/consoleport.html:17 -#: templates/dcim/consoleserverport.html:74 templates/dcim/frontport.html:112 +#: netbox/dcim/forms/model_forms.py:1152 netbox/dcim/forms/model_forms.py:1591 +#: netbox/dcim/tables/connections.py:27 +#: netbox/templates/dcim/consoleport.html:17 +#: netbox/templates/dcim/consoleserverport.html:74 +#: netbox/templates/dcim/frontport.html:112 msgid "Console Port" msgstr "Konsolport" -#: dcim/forms/model_forms.py:1146 dcim/forms/model_forms.py:1585 -#: templates/dcim/consoleport.html:73 templates/dcim/consoleserverport.html:17 -#: templates/dcim/frontport.html:109 +#: netbox/dcim/forms/model_forms.py:1153 netbox/dcim/forms/model_forms.py:1592 +#: netbox/templates/dcim/consoleport.html:73 +#: netbox/templates/dcim/consoleserverport.html:17 +#: netbox/templates/dcim/frontport.html:109 msgid "Console Server Port" msgstr "Konsolserverport" -#: dcim/forms/model_forms.py:1147 dcim/forms/model_forms.py:1586 -#: templates/circuits/inc/circuit_termination_fields.html:52 -#: templates/dcim/consoleport.html:76 templates/dcim/consoleserverport.html:77 -#: templates/dcim/frontport.html:17 templates/dcim/frontport.html:115 -#: templates/dcim/interface.html:187 templates/dcim/rearport.html:105 +#: netbox/dcim/forms/model_forms.py:1154 netbox/dcim/forms/model_forms.py:1593 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:52 +#: netbox/templates/dcim/consoleport.html:76 +#: netbox/templates/dcim/consoleserverport.html:77 +#: netbox/templates/dcim/frontport.html:17 +#: netbox/templates/dcim/frontport.html:115 +#: netbox/templates/dcim/interface.html:187 +#: netbox/templates/dcim/rearport.html:105 msgid "Front Port" msgstr "Frontport" -#: dcim/forms/model_forms.py:1148 dcim/forms/model_forms.py:1587 -#: dcim/tables/devices.py:710 -#: templates/circuits/inc/circuit_termination_fields.html:53 -#: templates/dcim/consoleport.html:79 templates/dcim/consoleserverport.html:80 -#: templates/dcim/frontport.html:50 templates/dcim/frontport.html:118 -#: templates/dcim/interface.html:190 templates/dcim/rearport.html:17 -#: templates/dcim/rearport.html:108 +#: netbox/dcim/forms/model_forms.py:1155 netbox/dcim/forms/model_forms.py:1594 +#: netbox/dcim/tables/devices.py:710 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:53 +#: netbox/templates/dcim/consoleport.html:79 +#: netbox/templates/dcim/consoleserverport.html:80 +#: netbox/templates/dcim/frontport.html:50 +#: netbox/templates/dcim/frontport.html:118 +#: netbox/templates/dcim/interface.html:190 +#: netbox/templates/dcim/rearport.html:17 +#: netbox/templates/dcim/rearport.html:108 msgid "Rear Port" msgstr "Bageste port" -#: dcim/forms/model_forms.py:1149 dcim/forms/model_forms.py:1588 -#: dcim/tables/connections.py:46 dcim/tables/devices.py:512 -#: templates/dcim/poweroutlet.html:44 templates/dcim/powerport.html:17 +#: 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/templates/dcim/powerport.html:17 msgid "Power Port" msgstr "Strømstik" -#: dcim/forms/model_forms.py:1150 dcim/forms/model_forms.py:1589 -#: templates/dcim/poweroutlet.html:17 templates/dcim/powerport.html:77 +#: netbox/dcim/forms/model_forms.py:1157 netbox/dcim/forms/model_forms.py:1596 +#: netbox/templates/dcim/poweroutlet.html:17 +#: netbox/templates/dcim/powerport.html:77 msgid "Power Outlet" msgstr "Strømudtag" -#: dcim/forms/model_forms.py:1152 dcim/forms/model_forms.py:1591 +#: netbox/dcim/forms/model_forms.py:1159 netbox/dcim/forms/model_forms.py:1598 msgid "Component Assignment" msgstr "Komponenttildeling" -#: dcim/forms/model_forms.py:1195 dcim/forms/model_forms.py:1638 +#: netbox/dcim/forms/model_forms.py:1202 netbox/dcim/forms/model_forms.py:1645 msgid "An InventoryItem can only be assigned to a single component." msgstr "En InventoryItem kan kun tildeles til en enkelt komponent." -#: dcim/forms/model_forms.py:1332 +#: netbox/dcim/forms/model_forms.py:1339 msgid "LAG interface" msgstr "LAG-grænseflade" -#: dcim/forms/model_forms.py:1355 +#: netbox/dcim/forms/model_forms.py:1362 msgid "Filter VLANs available for assignment by group." msgstr "Filtrer VLAN'er, der er tilgængelige til tildeling efter gruppe." -#: dcim/forms/model_forms.py:1484 +#: netbox/dcim/forms/model_forms.py:1491 msgid "Child Device" msgstr "Børneenhed" -#: dcim/forms/model_forms.py:1485 +#: netbox/dcim/forms/model_forms.py:1492 msgid "" "Child devices must first be created and assigned to the site and rack of the" " parent device." @@ -4557,32 +5028,35 @@ msgstr "" "Underordnede enheder skal først oprettes og tildeles til den overordnede " "enheds område og rack." -#: dcim/forms/model_forms.py:1527 +#: netbox/dcim/forms/model_forms.py:1534 msgid "Console port" msgstr "Konsolport" -#: dcim/forms/model_forms.py:1535 +#: netbox/dcim/forms/model_forms.py:1542 msgid "Console server port" msgstr "Konsolserverport" -#: dcim/forms/model_forms.py:1543 +#: netbox/dcim/forms/model_forms.py:1550 msgid "Front port" msgstr "Frontport" -#: dcim/forms/model_forms.py:1559 +#: netbox/dcim/forms/model_forms.py:1566 msgid "Power outlet" msgstr "Strømudtag" -#: dcim/forms/model_forms.py:1579 templates/dcim/inventoryitem.html:17 +#: netbox/dcim/forms/model_forms.py:1586 +#: netbox/templates/dcim/inventoryitem.html:17 msgid "Inventory Item" msgstr "Lagergenstand" -#: dcim/forms/model_forms.py:1652 templates/dcim/inventoryitemrole.html:15 +#: netbox/dcim/forms/model_forms.py:1659 +#: netbox/templates/dcim/inventoryitemrole.html:15 msgid "Inventory Item Role" msgstr "Lagervarrolle" -#: dcim/forms/object_create.py:48 dcim/forms/object_create.py:199 -#: dcim/forms/object_create.py:355 +#: netbox/dcim/forms/object_create.py:48 +#: netbox/dcim/forms/object_create.py:199 +#: netbox/dcim/forms/object_create.py:347 msgid "" "Alphanumeric ranges are supported. (Must match the number of objects being " "created.)" @@ -4590,7 +5064,7 @@ msgstr "" "Alfanumeriske intervaller understøttes. (Skal svare til antallet af " "objekter, der oprettes.)" -#: dcim/forms/object_create.py:68 +#: netbox/dcim/forms/object_create.py:68 #, python-brace-format msgid "" "The provided pattern specifies {value_count} values, but {pattern_count} are" @@ -4599,16 +5073,17 @@ msgstr "" "Det medfølgende mønster specificerer {value_count} Værdier, men " "{pattern_count} forventes." -#: dcim/forms/object_create.py:110 dcim/forms/object_create.py:271 -#: dcim/tables/devices.py:252 +#: netbox/dcim/forms/object_create.py:110 +#: netbox/dcim/forms/object_create.py:263 netbox/dcim/tables/devices.py:252 msgid "Rear ports" msgstr "Bageste porte" -#: dcim/forms/object_create.py:111 dcim/forms/object_create.py:272 +#: netbox/dcim/forms/object_create.py:111 +#: netbox/dcim/forms/object_create.py:264 msgid "Select one rear port assignment for each front port being created." msgstr "Vælg en bagporttildeling for hver frontport, der oprettes." -#: dcim/forms/object_create.py:164 +#: netbox/dcim/forms/object_create.py:164 #, python-brace-format msgid "" "The number of front port templates to be created ({frontport_count}) must " @@ -4617,16 +5092,7 @@ msgstr "" "Antallet af frontportskabeloner, der skal oprettes ({frontport_count}) skal " "matche det valgte antal bageste portpositioner ({rearport_count})." -#: dcim/forms/object_create.py:251 -#, python-brace-format -msgid "" -"The string {module} will be replaced with the position of the " -"assigned module, if any." -msgstr "" -"Strengen {module} vil blive erstattet med placeringen af det " -"tildelte modul, hvis det er tilfældet." - -#: dcim/forms/object_create.py:320 +#: netbox/dcim/forms/object_create.py:312 #, python-brace-format msgid "" "The number of front ports to be created ({frontport_count}) must match the " @@ -4635,84 +5101,87 @@ msgstr "" "Antallet af frontporte, der skal oprettes ({frontport_count}) skal matche " "det valgte antal bageste portpositioner ({rearport_count})." -#: dcim/forms/object_create.py:409 dcim/tables/devices.py:1033 -#: ipam/tables/fhrp.py:31 templates/dcim/virtualchassis.html:53 -#: templates/dcim/virtualchassis_edit.html:47 templates/ipam/fhrpgroup.html:38 +#: netbox/dcim/forms/object_create.py:401 netbox/dcim/tables/devices.py:1033 +#: netbox/ipam/tables/fhrp.py:31 netbox/templates/dcim/virtualchassis.html:53 +#: netbox/templates/dcim/virtualchassis_edit.html:47 +#: netbox/templates/ipam/fhrpgroup.html:38 msgid "Members" msgstr "Medlemmer" -#: dcim/forms/object_create.py:418 +#: netbox/dcim/forms/object_create.py:410 msgid "Initial position" msgstr "Udgangsposition" -#: dcim/forms/object_create.py:421 +#: netbox/dcim/forms/object_create.py:413 msgid "" "Position of the first member device. Increases by one for each additional " "member." msgstr "" "Placering af den første medlemsenhed. Stiges med en for hvert ekstra medlem." -#: dcim/forms/object_create.py:435 +#: netbox/dcim/forms/object_create.py:427 msgid "A position must be specified for the first VC member." msgstr "En stilling skal specificeres for det første VC-medlem." -#: dcim/models/cables.py:62 dcim/models/device_component_templates.py:55 -#: dcim/models/device_components.py:62 extras/models/customfields.py:111 +#: netbox/dcim/models/cables.py:62 +#: netbox/dcim/models/device_component_templates.py:55 +#: netbox/dcim/models/device_components.py:62 +#: netbox/extras/models/customfields.py:111 msgid "label" msgstr "etiket" -#: dcim/models/cables.py:71 +#: netbox/dcim/models/cables.py:71 msgid "length" msgstr "længde" -#: dcim/models/cables.py:78 +#: netbox/dcim/models/cables.py:78 msgid "length unit" msgstr "længdeenhed" -#: dcim/models/cables.py:95 +#: netbox/dcim/models/cables.py:95 msgid "cable" msgstr "kabel" -#: dcim/models/cables.py:96 +#: netbox/dcim/models/cables.py:96 msgid "cables" msgstr "ledninger" -#: dcim/models/cables.py:165 +#: netbox/dcim/models/cables.py:165 msgid "Must specify a unit when setting a cable length" msgstr "Skal angive en enhed, når du indstiller en kabellængde" -#: dcim/models/cables.py:168 +#: netbox/dcim/models/cables.py:168 msgid "Must define A and B terminations when creating a new cable." msgstr "Skal definere A- og B-afslutninger, når du opretter et nyt kabel." -#: dcim/models/cables.py:175 +#: netbox/dcim/models/cables.py:175 msgid "Cannot connect different termination types to same end of cable." msgstr "" "Kan ikke tilslutte forskellige termineringstyper til samme ende af kablet." -#: dcim/models/cables.py:183 +#: netbox/dcim/models/cables.py:183 #, python-brace-format msgid "Incompatible termination types: {type_a} and {type_b}" msgstr "Inkompatible opsigelsestyper: {type_a} og {type_b}" -#: dcim/models/cables.py:193 +#: netbox/dcim/models/cables.py:193 msgid "A and B terminations cannot connect to the same object." msgstr "" "A- og B-terminationer kan ikke oprette forbindelse til det samme objekt." -#: dcim/models/cables.py:260 ipam/models/asns.py:37 +#: netbox/dcim/models/cables.py:260 netbox/ipam/models/asns.py:37 msgid "end" msgstr "slutning" -#: dcim/models/cables.py:313 +#: netbox/dcim/models/cables.py:313 msgid "cable termination" msgstr "kabelafslutning" -#: dcim/models/cables.py:314 +#: netbox/dcim/models/cables.py:314 msgid "cable terminations" msgstr "kabelafslutninger" -#: dcim/models/cables.py:333 +#: netbox/dcim/models/cables.py:333 #, python-brace-format msgid "" "Duplicate termination found for {app_label}.{model} {termination_id}: cable " @@ -4721,38 +5190,38 @@ msgstr "" "Duplikat opsigelse fundet for {app_label}.{model} {termination_id}: kabel " "{cable_pk}" -#: dcim/models/cables.py:343 +#: netbox/dcim/models/cables.py:343 #, python-brace-format msgid "Cables cannot be terminated to {type_display} interfaces" msgstr "Kabler kan ikke afsluttes til {type_display} grænseflader" -#: dcim/models/cables.py:350 +#: netbox/dcim/models/cables.py:350 msgid "Circuit terminations attached to a provider network may not be cabled." msgstr "" "Kredsløbsterminationer, der er knyttet til et leverandørnetværk, er muligvis" " ikke kablet." -#: dcim/models/cables.py:448 extras/models/configs.py:50 +#: netbox/dcim/models/cables.py:448 netbox/extras/models/configs.py:50 msgid "is active" msgstr "er aktiv" -#: dcim/models/cables.py:452 +#: netbox/dcim/models/cables.py:452 msgid "is complete" msgstr "er komplet" -#: dcim/models/cables.py:456 +#: netbox/dcim/models/cables.py:456 msgid "is split" msgstr "er splittet" -#: dcim/models/cables.py:464 +#: netbox/dcim/models/cables.py:464 msgid "cable path" msgstr "kabelbane" -#: dcim/models/cables.py:465 +#: netbox/dcim/models/cables.py:465 msgid "cable paths" msgstr "kabelstier" -#: dcim/models/device_component_templates.py:46 +#: netbox/dcim/models/device_component_templates.py:46 #, python-brace-format msgid "" "{module} is accepted as a substitution for the module bay position when " @@ -4761,16 +5230,16 @@ msgstr "" "{module} accepteres som erstatning for modulpladsens position, når den er " "knyttet til en modultype." -#: dcim/models/device_component_templates.py:58 -#: dcim/models/device_components.py:65 +#: netbox/dcim/models/device_component_templates.py:58 +#: netbox/dcim/models/device_components.py:65 msgid "Physical label" msgstr "Fysisk etiket" -#: dcim/models/device_component_templates.py:103 +#: netbox/dcim/models/device_component_templates.py:103 msgid "Component templates cannot be moved to a different device type." msgstr "Komponentskabeloner kan ikke flyttes til en anden enhedstype." -#: dcim/models/device_component_templates.py:154 +#: netbox/dcim/models/device_component_templates.py:154 msgid "" "A component template cannot be associated with both a device type and a " "module type." @@ -4778,7 +5247,7 @@ msgstr "" "En komponentskabelon kan ikke knyttes til både en enhedstype og en " "modultype." -#: dcim/models/device_component_templates.py:158 +#: netbox/dcim/models/device_component_templates.py:158 msgid "" "A component template must be associated with either a device type or a " "module type." @@ -4786,134 +5255,134 @@ msgstr "" "En komponentskabelon skal være tilknyttet enten en enhedstype eller en " "modultype." -#: dcim/models/device_component_templates.py:212 +#: netbox/dcim/models/device_component_templates.py:212 msgid "console port template" msgstr "skabelon til konsolport" -#: dcim/models/device_component_templates.py:213 +#: netbox/dcim/models/device_component_templates.py:213 msgid "console port templates" msgstr "konsolportskabeloner" -#: dcim/models/device_component_templates.py:246 +#: netbox/dcim/models/device_component_templates.py:246 msgid "console server port template" msgstr "skabelon til konsolserverport" -#: dcim/models/device_component_templates.py:247 +#: netbox/dcim/models/device_component_templates.py:247 msgid "console server port templates" msgstr "skabeloner til konsolserverportskabeloner" -#: dcim/models/device_component_templates.py:278 -#: dcim/models/device_components.py:352 +#: netbox/dcim/models/device_component_templates.py:278 +#: netbox/dcim/models/device_components.py:352 msgid "maximum draw" msgstr "maksimal trækning" -#: dcim/models/device_component_templates.py:285 -#: dcim/models/device_components.py:359 +#: netbox/dcim/models/device_component_templates.py:285 +#: netbox/dcim/models/device_components.py:359 msgid "allocated draw" msgstr "tildelt lodtrækning" -#: dcim/models/device_component_templates.py:295 +#: netbox/dcim/models/device_component_templates.py:295 msgid "power port template" msgstr "strømstikskabelon" -#: dcim/models/device_component_templates.py:296 +#: netbox/dcim/models/device_component_templates.py:296 msgid "power port templates" msgstr "strømstikskabeloner" -#: dcim/models/device_component_templates.py:315 -#: dcim/models/device_components.py:382 +#: netbox/dcim/models/device_component_templates.py:315 +#: netbox/dcim/models/device_components.py:382 #, python-brace-format msgid "Allocated draw cannot exceed the maximum draw ({maximum_draw}W)." msgstr "" "Tildelt lodtrækning kan ikke overstige den maksimale trækning " "({maximum_draw}W)." -#: dcim/models/device_component_templates.py:347 -#: dcim/models/device_components.py:477 +#: netbox/dcim/models/device_component_templates.py:347 +#: netbox/dcim/models/device_components.py:477 msgid "feed leg" msgstr "foderben" -#: dcim/models/device_component_templates.py:351 -#: dcim/models/device_components.py:481 +#: netbox/dcim/models/device_component_templates.py:351 +#: netbox/dcim/models/device_components.py:481 msgid "Phase (for three-phase feeds)" msgstr "Fase (til trefasefoedninger)" -#: dcim/models/device_component_templates.py:357 +#: netbox/dcim/models/device_component_templates.py:357 msgid "power outlet template" msgstr "Strømudtag skabelon" -#: dcim/models/device_component_templates.py:358 +#: netbox/dcim/models/device_component_templates.py:358 msgid "power outlet templates" msgstr "strømudtagsskabeloner" -#: dcim/models/device_component_templates.py:367 +#: netbox/dcim/models/device_component_templates.py:367 #, python-brace-format msgid "Parent power port ({power_port}) must belong to the same device type" msgstr "Hovedstrømstik ({power_port}) skal tilhøre samme enhedstype" -#: dcim/models/device_component_templates.py:371 +#: netbox/dcim/models/device_component_templates.py:371 #, python-brace-format msgid "Parent power port ({power_port}) must belong to the same module type" msgstr "Hovedstrømstik ({power_port}) skal tilhøre samme modultype" -#: dcim/models/device_component_templates.py:423 -#: dcim/models/device_components.py:611 +#: netbox/dcim/models/device_component_templates.py:423 +#: netbox/dcim/models/device_components.py:611 msgid "management only" msgstr "Kun ledelse" -#: dcim/models/device_component_templates.py:431 -#: dcim/models/device_components.py:550 +#: netbox/dcim/models/device_component_templates.py:431 +#: netbox/dcim/models/device_components.py:550 msgid "bridge interface" msgstr "brogrænseflade" -#: dcim/models/device_component_templates.py:449 -#: dcim/models/device_components.py:636 +#: netbox/dcim/models/device_component_templates.py:449 +#: netbox/dcim/models/device_components.py:636 msgid "wireless role" msgstr "trådløs rolle" -#: dcim/models/device_component_templates.py:455 +#: netbox/dcim/models/device_component_templates.py:455 msgid "interface template" msgstr "grænseflade skabelon" -#: dcim/models/device_component_templates.py:456 +#: netbox/dcim/models/device_component_templates.py:456 msgid "interface templates" msgstr "interface skabeloner" -#: dcim/models/device_component_templates.py:463 -#: dcim/models/device_components.py:804 -#: virtualization/models/virtualmachines.py:405 +#: netbox/dcim/models/device_component_templates.py:463 +#: netbox/dcim/models/device_components.py:804 +#: netbox/virtualization/models/virtualmachines.py:405 msgid "An interface cannot be bridged to itself." msgstr "En grænseflade kan ikke kobles til sig selv." -#: dcim/models/device_component_templates.py:466 +#: netbox/dcim/models/device_component_templates.py:466 #, python-brace-format msgid "Bridge interface ({bridge}) must belong to the same device type" msgstr "Brogrænseflade ({bridge}) skal tilhøre samme enhedstype" -#: dcim/models/device_component_templates.py:470 +#: netbox/dcim/models/device_component_templates.py:470 #, python-brace-format msgid "Bridge interface ({bridge}) must belong to the same module type" msgstr "Brogrænseflade ({bridge}) skal tilhøre samme modultype" -#: dcim/models/device_component_templates.py:526 -#: dcim/models/device_components.py:984 +#: netbox/dcim/models/device_component_templates.py:526 +#: netbox/dcim/models/device_components.py:984 msgid "rear port position" msgstr "bageste portposition" -#: dcim/models/device_component_templates.py:551 +#: netbox/dcim/models/device_component_templates.py:551 msgid "front port template" msgstr "skabelon til frontport" -#: dcim/models/device_component_templates.py:552 +#: netbox/dcim/models/device_component_templates.py:552 msgid "front port templates" msgstr "frontportskabeloner" -#: dcim/models/device_component_templates.py:562 +#: netbox/dcim/models/device_component_templates.py:562 #, python-brace-format msgid "Rear port ({name}) must belong to the same device type" msgstr "Bageste port ({name}) skal tilhøre samme enhedstype" -#: dcim/models/device_component_templates.py:568 +#: netbox/dcim/models/device_component_templates.py:568 #, python-brace-format msgid "" "Invalid rear port position ({position}); rear port {name} has only {count} " @@ -4922,47 +5391,47 @@ msgstr "" "Ugyldig bageste portposition ({position}); bageste port {name} har kun " "{count} positioner" -#: dcim/models/device_component_templates.py:621 -#: dcim/models/device_components.py:1053 +#: netbox/dcim/models/device_component_templates.py:621 +#: netbox/dcim/models/device_components.py:1053 msgid "positions" msgstr "positioner" -#: dcim/models/device_component_templates.py:632 +#: netbox/dcim/models/device_component_templates.py:632 msgid "rear port template" msgstr "bagport skabelon" -#: dcim/models/device_component_templates.py:633 +#: netbox/dcim/models/device_component_templates.py:633 msgid "rear port templates" msgstr "bageste portskabeloner" -#: dcim/models/device_component_templates.py:662 -#: dcim/models/device_components.py:1103 +#: netbox/dcim/models/device_component_templates.py:662 +#: netbox/dcim/models/device_components.py:1103 msgid "position" msgstr "position" -#: dcim/models/device_component_templates.py:665 -#: dcim/models/device_components.py:1106 +#: netbox/dcim/models/device_component_templates.py:665 +#: netbox/dcim/models/device_components.py:1106 msgid "Identifier to reference when renaming installed components" msgstr "" "Identifikator, der skal refereres til, når installerede komponenter omdøbes" -#: dcim/models/device_component_templates.py:671 +#: netbox/dcim/models/device_component_templates.py:671 msgid "module bay template" msgstr "modulbugtsskabelon" -#: dcim/models/device_component_templates.py:672 +#: netbox/dcim/models/device_component_templates.py:672 msgid "module bay templates" msgstr "modulbugtsskabeloner" -#: dcim/models/device_component_templates.py:699 +#: netbox/dcim/models/device_component_templates.py:699 msgid "device bay template" msgstr "skabelon til enhedsplads" -#: dcim/models/device_component_templates.py:700 +#: netbox/dcim/models/device_component_templates.py:700 msgid "device bay templates" msgstr "skabeloner til enhedsplads" -#: dcim/models/device_component_templates.py:713 +#: netbox/dcim/models/device_component_templates.py:713 #, python-brace-format msgid "" "Subdevice role of device type ({device_type}) must be set to \"parent\" to " @@ -4971,200 +5440,205 @@ msgstr "" "Underenhedsrolle for enhedstypen ({device_type}) skal indstilles til " "„forælder“ for at tillade enhedspladser." -#: dcim/models/device_component_templates.py:768 -#: dcim/models/device_components.py:1262 +#: netbox/dcim/models/device_component_templates.py:768 +#: netbox/dcim/models/device_components.py:1262 msgid "part ID" msgstr "del-ID" -#: dcim/models/device_component_templates.py:770 -#: dcim/models/device_components.py:1264 +#: netbox/dcim/models/device_component_templates.py:770 +#: netbox/dcim/models/device_components.py:1264 msgid "Manufacturer-assigned part identifier" msgstr "Producenttildelt artikel-id" -#: dcim/models/device_component_templates.py:787 +#: netbox/dcim/models/device_component_templates.py:787 msgid "inventory item template" msgstr "lagervareskabelon" -#: dcim/models/device_component_templates.py:788 +#: netbox/dcim/models/device_component_templates.py:788 msgid "inventory item templates" msgstr "lagervareskabeloner" -#: dcim/models/device_components.py:105 +#: netbox/dcim/models/device_components.py:105 msgid "Components cannot be moved to a different device." msgstr "Komponenter kan ikke flyttes til en anden enhed." -#: dcim/models/device_components.py:144 +#: netbox/dcim/models/device_components.py:144 msgid "cable end" msgstr "kabelende" -#: dcim/models/device_components.py:150 +#: netbox/dcim/models/device_components.py:150 msgid "mark connected" msgstr "mærke tilsluttet" -#: dcim/models/device_components.py:152 +#: netbox/dcim/models/device_components.py:152 msgid "Treat as if a cable is connected" msgstr "Behandl som om et kabel er tilsluttet" -#: dcim/models/device_components.py:170 +#: netbox/dcim/models/device_components.py:170 msgid "Must specify cable end (A or B) when attaching a cable." msgstr "Du skal angive kabelenden (A eller B), når du tilslutter et kabel." -#: dcim/models/device_components.py:174 +#: netbox/dcim/models/device_components.py:174 msgid "Cable end must not be set without a cable." msgstr "Kabelenden må ikke indstilles uden et kabel." -#: dcim/models/device_components.py:178 +#: netbox/dcim/models/device_components.py:178 msgid "Cannot mark as connected with a cable attached." msgstr "Kan ikke markere som tilsluttet med et tilsluttet kabel." -#: dcim/models/device_components.py:202 +#: netbox/dcim/models/device_components.py:202 #, python-brace-format msgid "{class_name} models must declare a parent_object property" msgstr "{class_name} modeller skal erklære en parent_object egenskab" -#: dcim/models/device_components.py:287 dcim/models/device_components.py:316 -#: dcim/models/device_components.py:349 dcim/models/device_components.py:467 +#: 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 msgid "Physical port type" msgstr "Fysisk porttype" -#: dcim/models/device_components.py:290 dcim/models/device_components.py:319 +#: netbox/dcim/models/device_components.py:290 +#: netbox/dcim/models/device_components.py:319 msgid "speed" msgstr "hastighed" -#: dcim/models/device_components.py:294 dcim/models/device_components.py:323 +#: netbox/dcim/models/device_components.py:294 +#: netbox/dcim/models/device_components.py:323 msgid "Port speed in bits per second" msgstr "Porthastighed i bit pr. sekund" -#: dcim/models/device_components.py:300 +#: netbox/dcim/models/device_components.py:300 msgid "console port" msgstr "konsolport" -#: dcim/models/device_components.py:301 +#: netbox/dcim/models/device_components.py:301 msgid "console ports" msgstr "konsolporte" -#: dcim/models/device_components.py:329 +#: netbox/dcim/models/device_components.py:329 msgid "console server port" msgstr "Konsolserverport" -#: dcim/models/device_components.py:330 +#: netbox/dcim/models/device_components.py:330 msgid "console server ports" msgstr "konsolserverporte" -#: dcim/models/device_components.py:369 +#: netbox/dcim/models/device_components.py:369 msgid "power port" msgstr "strømstik" -#: dcim/models/device_components.py:370 +#: netbox/dcim/models/device_components.py:370 msgid "power ports" msgstr "strømstik" -#: dcim/models/device_components.py:487 +#: netbox/dcim/models/device_components.py:487 msgid "power outlet" msgstr "strømudtag" -#: dcim/models/device_components.py:488 +#: netbox/dcim/models/device_components.py:488 msgid "power outlets" msgstr "strømudtag" -#: dcim/models/device_components.py:499 +#: netbox/dcim/models/device_components.py:499 #, python-brace-format msgid "Parent power port ({power_port}) must belong to the same device" msgstr "Hovedstrømstik ({power_port}) skal tilhøre den samme enhed" -#: dcim/models/device_components.py:530 vpn/models/crypto.py:81 -#: vpn/models/crypto.py:226 +#: netbox/dcim/models/device_components.py:530 netbox/vpn/models/crypto.py:81 +#: netbox/vpn/models/crypto.py:226 msgid "mode" msgstr "tilstand" -#: dcim/models/device_components.py:534 +#: netbox/dcim/models/device_components.py:534 msgid "IEEE 802.1Q tagging strategy" msgstr "IEEE 802.1Q-mærkningsstrategi" -#: dcim/models/device_components.py:542 +#: netbox/dcim/models/device_components.py:542 msgid "parent interface" msgstr "forældregrænseflade" -#: dcim/models/device_components.py:602 +#: netbox/dcim/models/device_components.py:602 msgid "parent LAG" msgstr "forældreLAG" -#: dcim/models/device_components.py:612 +#: netbox/dcim/models/device_components.py:612 msgid "This interface is used only for out-of-band management" msgstr "Denne grænseflade bruges kun til administration uden for båndet" -#: dcim/models/device_components.py:617 +#: netbox/dcim/models/device_components.py:617 msgid "speed (Kbps)" msgstr "hastighed (Kbps)" -#: dcim/models/device_components.py:620 +#: netbox/dcim/models/device_components.py:620 msgid "duplex" msgstr "duplex" -#: dcim/models/device_components.py:630 +#: netbox/dcim/models/device_components.py:630 msgid "64-bit World Wide Name" msgstr "64-bit verdensomspændende navn" -#: dcim/models/device_components.py:642 +#: netbox/dcim/models/device_components.py:642 msgid "wireless channel" msgstr "trådløs kanal" -#: dcim/models/device_components.py:649 +#: netbox/dcim/models/device_components.py:649 msgid "channel frequency (MHz)" msgstr "kanalfrekvens (MHz)" -#: dcim/models/device_components.py:650 dcim/models/device_components.py:658 +#: netbox/dcim/models/device_components.py:650 +#: netbox/dcim/models/device_components.py:658 msgid "Populated by selected channel (if set)" msgstr "Udfyldt af valgt kanal (hvis indstillet)" -#: dcim/models/device_components.py:664 +#: netbox/dcim/models/device_components.py:664 msgid "transmit power (dBm)" msgstr "sendeeffekt (dBm)" -#: dcim/models/device_components.py:689 wireless/models.py:117 +#: netbox/dcim/models/device_components.py:689 netbox/wireless/models.py:117 msgid "wireless LANs" msgstr "trådløse LAN" -#: dcim/models/device_components.py:697 -#: virtualization/models/virtualmachines.py:335 +#: netbox/dcim/models/device_components.py:697 +#: netbox/virtualization/models/virtualmachines.py:335 msgid "untagged VLAN" msgstr "umærket VLAN" -#: dcim/models/device_components.py:703 -#: virtualization/models/virtualmachines.py:341 +#: netbox/dcim/models/device_components.py:703 +#: netbox/virtualization/models/virtualmachines.py:341 msgid "tagged VLANs" msgstr "mærkede VLAN'er" -#: dcim/models/device_components.py:745 -#: virtualization/models/virtualmachines.py:377 +#: netbox/dcim/models/device_components.py:745 +#: netbox/virtualization/models/virtualmachines.py:377 msgid "interface" msgstr "grænseflade" -#: dcim/models/device_components.py:746 -#: virtualization/models/virtualmachines.py:378 +#: netbox/dcim/models/device_components.py:746 +#: netbox/virtualization/models/virtualmachines.py:378 msgid "interfaces" msgstr "grænseflader" -#: dcim/models/device_components.py:757 +#: netbox/dcim/models/device_components.py:757 #, python-brace-format msgid "{display_type} interfaces cannot have a cable attached." msgstr "{display_type} grænseflader kan ikke have et kabel tilsluttet." -#: dcim/models/device_components.py:765 +#: netbox/dcim/models/device_components.py:765 #, python-brace-format msgid "{display_type} interfaces cannot be marked as connected." msgstr "{display_type} grænseflader kan ikke markeres som tilsluttet." -#: dcim/models/device_components.py:774 -#: virtualization/models/virtualmachines.py:390 +#: netbox/dcim/models/device_components.py:774 +#: netbox/virtualization/models/virtualmachines.py:390 msgid "An interface cannot be its own parent." msgstr "En grænseflade kan ikke være sin egen forælder." -#: dcim/models/device_components.py:778 +#: netbox/dcim/models/device_components.py:778 msgid "Only virtual interfaces may be assigned to a parent interface." msgstr "Kun virtuelle grænseflader kan tildeles en overordnet grænseflade." -#: dcim/models/device_components.py:785 +#: netbox/dcim/models/device_components.py:785 #, python-brace-format msgid "" "The selected parent interface ({interface}) belongs to a different device " @@ -5173,7 +5647,7 @@ msgstr "" "Den valgte overordnede grænseflade ({interface}) tilhører en anden enhed " "({device})" -#: dcim/models/device_components.py:791 +#: netbox/dcim/models/device_components.py:791 #, python-brace-format msgid "" "The selected parent interface ({interface}) belongs to {device}, which is " @@ -5182,7 +5656,7 @@ msgstr "" "Den valgte overordnede grænseflade ({interface}) tilhører {device}, som ikke" " er en del af det virtuelle chassis {virtual_chassis}." -#: dcim/models/device_components.py:811 +#: netbox/dcim/models/device_components.py:811 #, python-brace-format msgid "" "The selected bridge interface ({bridge}) belongs to a different device " @@ -5190,7 +5664,7 @@ msgid "" msgstr "" "Den valgte brogrænseflade ({bridge}) tilhører en anden enhed ({device})." -#: dcim/models/device_components.py:817 +#: netbox/dcim/models/device_components.py:817 #, python-brace-format msgid "" "The selected bridge interface ({interface}) belongs to {device}, which is " @@ -5199,22 +5673,22 @@ msgstr "" "Den valgte brogrænseflade ({interface}) tilhører {device}, som ikke er en " "del af det virtuelle chassis {virtual_chassis}." -#: dcim/models/device_components.py:828 +#: netbox/dcim/models/device_components.py:828 msgid "Virtual interfaces cannot have a parent LAG interface." msgstr "Virtuelle grænseflader kan ikke have en overordnet LAG-grænseflade." -#: dcim/models/device_components.py:832 +#: netbox/dcim/models/device_components.py:832 msgid "A LAG interface cannot be its own parent." msgstr "En LAG-grænseflade kan ikke være dens egen overordnede." -#: dcim/models/device_components.py:839 +#: netbox/dcim/models/device_components.py:839 #, python-brace-format msgid "" "The selected LAG interface ({lag}) belongs to a different device ({device})." msgstr "" "Den valgte LAG-grænseflade ({lag}) tilhører en anden enhed ({device})." -#: dcim/models/device_components.py:845 +#: netbox/dcim/models/device_components.py:845 #, python-brace-format msgid "" "The selected LAG interface ({lag}) belongs to {device}, which is not part of" @@ -5223,43 +5697,43 @@ msgstr "" "Den valgte LAG-grænseflade ({lag}) tilhører {device}, som ikke er en del af " "det virtuelle chassis {virtual_chassis}." -#: dcim/models/device_components.py:856 +#: netbox/dcim/models/device_components.py:856 msgid "Virtual interfaces cannot have a PoE mode." msgstr "Virtuelle grænseflader kan ikke have en PoE-tilstand." -#: dcim/models/device_components.py:860 +#: netbox/dcim/models/device_components.py:860 msgid "Virtual interfaces cannot have a PoE type." msgstr "Virtuelle grænseflader kan ikke have en PoE-type." -#: dcim/models/device_components.py:866 +#: netbox/dcim/models/device_components.py:866 msgid "Must specify PoE mode when designating a PoE type." msgstr "Skal angive PoE-tilstand, når du angiver en PoE-type." -#: dcim/models/device_components.py:873 +#: netbox/dcim/models/device_components.py:873 msgid "Wireless role may be set only on wireless interfaces." msgstr "Trådløs rolle kan kun indstilles på trådløse grænseflader." -#: dcim/models/device_components.py:875 +#: netbox/dcim/models/device_components.py:875 msgid "Channel may be set only on wireless interfaces." msgstr "Kanal kan kun indstilles på trådløse grænseflader." -#: dcim/models/device_components.py:881 +#: netbox/dcim/models/device_components.py:881 msgid "Channel frequency may be set only on wireless interfaces." msgstr "Kanalfrekvensen kan kun indstilles på trådløse grænseflader." -#: dcim/models/device_components.py:885 +#: netbox/dcim/models/device_components.py:885 msgid "Cannot specify custom frequency with channel selected." msgstr "Kan ikke angive brugerdefineret frekvens med valgt kanal." -#: dcim/models/device_components.py:891 +#: netbox/dcim/models/device_components.py:891 msgid "Channel width may be set only on wireless interfaces." msgstr "Kanalbredden kan kun indstilles på trådløse grænseflader." -#: dcim/models/device_components.py:893 +#: netbox/dcim/models/device_components.py:893 msgid "Cannot specify custom width with channel selected." msgstr "Kan ikke angive brugerdefineret bredde med valgt kanal." -#: dcim/models/device_components.py:901 +#: netbox/dcim/models/device_components.py:901 #, python-brace-format msgid "" "The untagged VLAN ({untagged_vlan}) must belong to the same site as the " @@ -5268,24 +5742,24 @@ msgstr "" "Den umærkede VLAN ({untagged_vlan}) skal tilhøre det samme område som " "grænsefladens overordnede enhed, eller det skal være globalt." -#: dcim/models/device_components.py:990 +#: netbox/dcim/models/device_components.py:990 msgid "Mapped position on corresponding rear port" msgstr "Kortlagt position på tilsvarende bageste port" -#: dcim/models/device_components.py:1006 +#: netbox/dcim/models/device_components.py:1006 msgid "front port" msgstr "Frontport" -#: dcim/models/device_components.py:1007 +#: netbox/dcim/models/device_components.py:1007 msgid "front ports" msgstr "frontporte" -#: dcim/models/device_components.py:1021 +#: netbox/dcim/models/device_components.py:1021 #, python-brace-format msgid "Rear port ({rear_port}) must belong to the same device" msgstr "Bageste port ({rear_port}) skal tilhøre den samme enhed" -#: dcim/models/device_components.py:1029 +#: netbox/dcim/models/device_components.py:1029 #, python-brace-format msgid "" "Invalid rear port position ({rear_port_position}): Rear port {name} has only" @@ -5294,19 +5768,19 @@ msgstr "" "Ugyldig bageste portposition ({rear_port_position}): Bageste port {name} har" " kun {positions} positioner." -#: dcim/models/device_components.py:1059 +#: netbox/dcim/models/device_components.py:1059 msgid "Number of front ports which may be mapped" msgstr "Antal frontporte, der kan kortlægges" -#: dcim/models/device_components.py:1064 +#: netbox/dcim/models/device_components.py:1064 msgid "rear port" msgstr "bageste port" -#: dcim/models/device_components.py:1065 +#: netbox/dcim/models/device_components.py:1065 msgid "rear ports" msgstr "bageste porte" -#: dcim/models/device_components.py:1079 +#: netbox/dcim/models/device_components.py:1079 #, python-brace-format msgid "" "The number of positions cannot be less than the number of mapped front ports" @@ -5315,36 +5789,37 @@ msgstr "" "Antallet af positioner kan ikke være mindre end antallet af kortlagte " "frontporte ({frontport_count})" -#: dcim/models/device_components.py:1120 +#: netbox/dcim/models/device_components.py:1120 msgid "module bay" msgstr "modulplads" -#: dcim/models/device_components.py:1121 +#: netbox/dcim/models/device_components.py:1121 msgid "module bays" msgstr "modulpladser" -#: dcim/models/device_components.py:1138 dcim/models/devices.py:1224 +#: netbox/dcim/models/device_components.py:1138 +#: netbox/dcim/models/devices.py:1224 msgid "A module bay cannot belong to a module installed within it." msgstr "En modulplads kan ikke tilhøre et modul, der er installeret i den." -#: dcim/models/device_components.py:1164 +#: netbox/dcim/models/device_components.py:1164 msgid "device bay" msgstr "enhedsplads" -#: dcim/models/device_components.py:1165 +#: netbox/dcim/models/device_components.py:1165 msgid "device bays" msgstr "enhedsbugter" -#: dcim/models/device_components.py:1175 +#: netbox/dcim/models/device_components.py:1175 #, python-brace-format msgid "This type of device ({device_type}) does not support device bays." msgstr "Denne type enhed ({device_type}) understøtter ikke enhedsbugter." -#: dcim/models/device_components.py:1181 +#: netbox/dcim/models/device_components.py:1181 msgid "Cannot install a device into itself." msgstr "Kan ikke installere en enhed i sig selv." -#: dcim/models/device_components.py:1189 +#: netbox/dcim/models/device_components.py:1189 #, python-brace-format msgid "" "Cannot install the specified device; device is already installed in {bay}." @@ -5352,111 +5827,113 @@ msgstr "" "Kan ikke installere den angivne enhed; enheden er allerede installeret i " "{bay}." -#: dcim/models/device_components.py:1210 +#: netbox/dcim/models/device_components.py:1210 msgid "inventory item role" msgstr "lagervarerolle" -#: dcim/models/device_components.py:1211 +#: netbox/dcim/models/device_components.py:1211 msgid "inventory item roles" msgstr "lagervareroller" -#: dcim/models/device_components.py:1268 dcim/models/devices.py:607 -#: dcim/models/devices.py:1181 dcim/models/racks.py:313 -#: virtualization/models/virtualmachines.py:131 +#: 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 msgid "serial number" msgstr "serienummer" -#: dcim/models/device_components.py:1276 dcim/models/devices.py:615 -#: dcim/models/devices.py:1188 dcim/models/racks.py:320 +#: 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 msgid "asset tag" msgstr "aktivmærke" -#: dcim/models/device_components.py:1277 +#: netbox/dcim/models/device_components.py:1277 msgid "A unique tag used to identify this item" msgstr "Et unikt tag, der bruges til at identificere dette element" -#: dcim/models/device_components.py:1280 +#: netbox/dcim/models/device_components.py:1280 msgid "discovered" msgstr "opdaget" -#: dcim/models/device_components.py:1282 +#: netbox/dcim/models/device_components.py:1282 msgid "This item was automatically discovered" msgstr "Dette element blev automatisk opdaget" -#: dcim/models/device_components.py:1300 +#: netbox/dcim/models/device_components.py:1300 msgid "inventory item" msgstr "lagerpost" -#: dcim/models/device_components.py:1301 +#: netbox/dcim/models/device_components.py:1301 msgid "inventory items" msgstr "lagervarer" -#: dcim/models/device_components.py:1312 +#: netbox/dcim/models/device_components.py:1312 msgid "Cannot assign self as parent." msgstr "Kan ikke tildele mig selv som forælder." -#: dcim/models/device_components.py:1320 +#: netbox/dcim/models/device_components.py:1320 msgid "Parent inventory item does not belong to the same device." msgstr "Overordnet lagervare tilhører ikke den samme enhed." -#: dcim/models/device_components.py:1326 +#: netbox/dcim/models/device_components.py:1326 msgid "Cannot move an inventory item with dependent children" msgstr "Kan ikke flytte en lagervare med afhængige underordnede" -#: dcim/models/device_components.py:1334 +#: netbox/dcim/models/device_components.py:1334 msgid "Cannot assign inventory item to component on another device" msgstr "Kan ikke tildele lagervare til komponent på en anden enhed" -#: dcim/models/devices.py:54 +#: netbox/dcim/models/devices.py:54 msgid "manufacturer" msgstr "fabrikant" -#: dcim/models/devices.py:55 +#: netbox/dcim/models/devices.py:55 msgid "manufacturers" msgstr "producenter" -#: dcim/models/devices.py:82 dcim/models/devices.py:382 -#: dcim/models/racks.py:133 +#: netbox/dcim/models/devices.py:82 netbox/dcim/models/devices.py:382 +#: netbox/dcim/models/racks.py:133 msgid "model" msgstr "model" -#: dcim/models/devices.py:95 +#: netbox/dcim/models/devices.py:95 msgid "default platform" msgstr "standard platform" -#: dcim/models/devices.py:98 dcim/models/devices.py:386 +#: netbox/dcim/models/devices.py:98 netbox/dcim/models/devices.py:386 msgid "part number" msgstr "varenummer" -#: dcim/models/devices.py:101 dcim/models/devices.py:389 +#: netbox/dcim/models/devices.py:101 netbox/dcim/models/devices.py:389 msgid "Discrete part number (optional)" msgstr "Diskret varenummer (valgfrit)" -#: dcim/models/devices.py:107 dcim/models/racks.py:54 +#: netbox/dcim/models/devices.py:107 netbox/dcim/models/racks.py:54 msgid "height (U)" msgstr "højde (U)" -#: dcim/models/devices.py:111 +#: netbox/dcim/models/devices.py:111 msgid "exclude from utilization" msgstr "udelukke fra udnyttelse" -#: dcim/models/devices.py:112 +#: netbox/dcim/models/devices.py:112 msgid "Devices of this type are excluded when calculating rack utilization." msgstr "Enheder af denne type er udelukket ved beregning af rackudnyttelse." -#: dcim/models/devices.py:116 +#: netbox/dcim/models/devices.py:116 msgid "is full depth" msgstr "er fuld dybde" -#: dcim/models/devices.py:117 +#: netbox/dcim/models/devices.py:117 msgid "Device consumes both front and rear rack faces." msgstr "Enheden bruger både forreste og bageste rackflader." -#: dcim/models/devices.py:123 +#: netbox/dcim/models/devices.py:123 msgid "parent/child status" msgstr "forældre/børns status" -#: dcim/models/devices.py:124 +#: netbox/dcim/models/devices.py:124 msgid "" "Parent devices house child devices in device bays. Leave blank if this " "device type is neither a parent nor a child." @@ -5464,24 +5941,24 @@ msgstr "" "Overordnede enheder huser underordnede enheder i enhedspladser. Lad det stå " "tomt, hvis denne enhedstype hverken er forælder eller barn." -#: dcim/models/devices.py:128 dcim/models/devices.py:392 -#: dcim/models/devices.py:659 dcim/models/racks.py:324 +#: netbox/dcim/models/devices.py:128 netbox/dcim/models/devices.py:392 +#: netbox/dcim/models/devices.py:659 netbox/dcim/models/racks.py:324 msgid "airflow" msgstr "luftstrøm" -#: dcim/models/devices.py:204 +#: netbox/dcim/models/devices.py:204 msgid "device type" msgstr "enhedstype" -#: dcim/models/devices.py:205 +#: netbox/dcim/models/devices.py:205 msgid "device types" msgstr "enhedstyper" -#: dcim/models/devices.py:290 +#: netbox/dcim/models/devices.py:290 msgid "U height must be in increments of 0.5 rack units." msgstr "U-højden skal være i trin på 0,5 reoler." -#: dcim/models/devices.py:307 +#: netbox/dcim/models/devices.py:307 #, python-brace-format msgid "" "Device {device} in rack {rack} does not have sufficient space to accommodate" @@ -5490,7 +5967,7 @@ msgstr "" "Enhed {device} i rack {rack} har ikke tilstrækkelig plads til at rumme en " "højde på {height}U" -#: dcim/models/devices.py:322 +#: netbox/dcim/models/devices.py:322 #, python-brace-format msgid "" "Unable to set 0U height: Found {racked_instance_count} " @@ -5500,7 +5977,7 @@ msgstr "" "href=\"{url}\">{racked_instance_count} tilfælde allerede monteret i " "racker." -#: dcim/models/devices.py:331 +#: netbox/dcim/models/devices.py:331 msgid "" "Must delete all device bay templates associated with this device before " "declassifying it as a parent device." @@ -5508,155 +5985,155 @@ msgstr "" "Du skal slette alle skabeloner til enhedsbugter, der er knyttet til denne " "enhed, før du afklassificerer den som en overordnet enhed." -#: dcim/models/devices.py:337 +#: netbox/dcim/models/devices.py:337 msgid "Child device types must be 0U." msgstr "Børneenhedstyper skal være 0U." -#: dcim/models/devices.py:411 +#: netbox/dcim/models/devices.py:411 msgid "module type" msgstr "modultype" -#: dcim/models/devices.py:412 +#: netbox/dcim/models/devices.py:412 msgid "module types" msgstr "modultyper" -#: dcim/models/devices.py:485 +#: netbox/dcim/models/devices.py:485 msgid "Virtual machines may be assigned to this role" msgstr "Virtuelle maskiner kan tildeles denne rolle" -#: dcim/models/devices.py:497 +#: netbox/dcim/models/devices.py:497 msgid "device role" msgstr "enhedsrolle" -#: dcim/models/devices.py:498 +#: netbox/dcim/models/devices.py:498 msgid "device roles" msgstr "enhedsroller" -#: dcim/models/devices.py:515 +#: netbox/dcim/models/devices.py:515 msgid "Optionally limit this platform to devices of a certain manufacturer" msgstr "Begræns eventuelt denne platform til enheder fra en bestemt producent" -#: dcim/models/devices.py:527 +#: netbox/dcim/models/devices.py:527 msgid "platform" msgstr "platform" -#: dcim/models/devices.py:528 +#: netbox/dcim/models/devices.py:528 msgid "platforms" msgstr "platforme" -#: dcim/models/devices.py:576 +#: netbox/dcim/models/devices.py:576 msgid "The function this device serves" msgstr "Funktionen denne enhed tjener" -#: dcim/models/devices.py:608 +#: netbox/dcim/models/devices.py:608 msgid "Chassis serial number, assigned by the manufacturer" msgstr "Chassisserienummer, tildelt af producenten" -#: dcim/models/devices.py:616 dcim/models/devices.py:1189 +#: netbox/dcim/models/devices.py:616 netbox/dcim/models/devices.py:1189 msgid "A unique tag used to identify this device" msgstr "Et unikt tag, der bruges til at identificere denne enhed" -#: dcim/models/devices.py:643 +#: netbox/dcim/models/devices.py:643 msgid "position (U)" msgstr "position (U)" -#: dcim/models/devices.py:650 +#: netbox/dcim/models/devices.py:650 msgid "rack face" msgstr "rackflade" -#: dcim/models/devices.py:670 dcim/models/devices.py:1415 -#: virtualization/models/virtualmachines.py:100 +#: netbox/dcim/models/devices.py:670 netbox/dcim/models/devices.py:1420 +#: netbox/virtualization/models/virtualmachines.py:100 msgid "primary IPv4" msgstr "Primær IPv4" -#: dcim/models/devices.py:678 dcim/models/devices.py:1423 -#: virtualization/models/virtualmachines.py:108 +#: netbox/dcim/models/devices.py:678 netbox/dcim/models/devices.py:1428 +#: netbox/virtualization/models/virtualmachines.py:108 msgid "primary IPv6" msgstr "Primær IPv6" -#: dcim/models/devices.py:686 +#: netbox/dcim/models/devices.py:686 msgid "out-of-band IP" msgstr "IP uden for båndet" -#: dcim/models/devices.py:703 +#: netbox/dcim/models/devices.py:703 msgid "VC position" msgstr "VC position" -#: dcim/models/devices.py:706 +#: netbox/dcim/models/devices.py:706 msgid "Virtual chassis position" msgstr "Virtuel chassisposition" -#: dcim/models/devices.py:709 +#: netbox/dcim/models/devices.py:709 msgid "VC priority" msgstr "VC-prioritet" -#: dcim/models/devices.py:713 +#: netbox/dcim/models/devices.py:713 msgid "Virtual chassis master election priority" msgstr "Virtuelt kabinetthovedvalgsprioritet" -#: dcim/models/devices.py:716 dcim/models/sites.py:207 +#: netbox/dcim/models/devices.py:716 netbox/dcim/models/sites.py:207 msgid "latitude" msgstr "breddegrad" -#: dcim/models/devices.py:721 dcim/models/devices.py:729 -#: dcim/models/sites.py:212 dcim/models/sites.py:220 +#: netbox/dcim/models/devices.py:721 netbox/dcim/models/devices.py:729 +#: netbox/dcim/models/sites.py:212 netbox/dcim/models/sites.py:220 msgid "GPS coordinate in decimal format (xx.yyyyyy)" msgstr "GPS-koordinat i decimalformat (xx.ååååå)" -#: dcim/models/devices.py:724 dcim/models/sites.py:215 +#: netbox/dcim/models/devices.py:724 netbox/dcim/models/sites.py:215 msgid "longitude" msgstr "længde" -#: dcim/models/devices.py:797 +#: netbox/dcim/models/devices.py:797 msgid "Device name must be unique per site." msgstr "Enhedsnavnet skal være entydigt pr. område." -#: dcim/models/devices.py:808 ipam/models/services.py:75 +#: netbox/dcim/models/devices.py:808 netbox/ipam/models/services.py:75 msgid "device" msgstr "enhed" -#: dcim/models/devices.py:809 +#: netbox/dcim/models/devices.py:809 msgid "devices" msgstr "enheder" -#: dcim/models/devices.py:835 +#: netbox/dcim/models/devices.py:835 #, python-brace-format msgid "Rack {rack} does not belong to site {site}." msgstr "Rack {rack} hører ikke til område {site}." -#: dcim/models/devices.py:840 +#: netbox/dcim/models/devices.py:840 #, python-brace-format msgid "Location {location} does not belong to site {site}." msgstr "Lokation {location} hører ikke til området {site}." -#: dcim/models/devices.py:846 +#: netbox/dcim/models/devices.py:846 #, python-brace-format msgid "Rack {rack} does not belong to location {location}." msgstr "Rack {rack} hører ikke til placering {location}." -#: dcim/models/devices.py:853 +#: netbox/dcim/models/devices.py:853 msgid "Cannot select a rack face without assigning a rack." msgstr "Kan ikke vælge en rackflade uden at tildele et rack." -#: dcim/models/devices.py:857 +#: netbox/dcim/models/devices.py:857 msgid "Cannot select a rack position without assigning a rack." msgstr "Kan ikke vælge en rackposition uden at tildele et rack." -#: dcim/models/devices.py:863 +#: netbox/dcim/models/devices.py:863 msgid "Position must be in increments of 0.5 rack units." msgstr "Positionen skal være i trin på 0,5 reoler." -#: dcim/models/devices.py:867 +#: netbox/dcim/models/devices.py:867 msgid "Must specify rack face when defining rack position." msgstr "Skal angive rackflade, når du definerer rackposition." -#: dcim/models/devices.py:875 +#: netbox/dcim/models/devices.py:875 #, 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." -#: dcim/models/devices.py:886 +#: netbox/dcim/models/devices.py:886 msgid "" "Child device types cannot be assigned to a rack face. This is an attribute " "of the parent device." @@ -5664,7 +6141,7 @@ msgstr "" "Underordnede enhedstyper kan ikke tildeles en rackflade. Dette er en " "attribut for den overordnede enhed." -#: dcim/models/devices.py:893 +#: netbox/dcim/models/devices.py:893 msgid "" "Child device types cannot be assigned to a rack position. This is an " "attribute of the parent device." @@ -5672,7 +6149,7 @@ msgstr "" "Underordnede enhedstyper kan ikke tildeles en rackposition. Dette er en " "attribut for den overordnede enhed." -#: dcim/models/devices.py:907 +#: netbox/dcim/models/devices.py:907 #, python-brace-format msgid "" "U{position} is already occupied or does not have sufficient space to " @@ -5681,22 +6158,22 @@ msgstr "" "U{position} er allerede besat eller ikke har tilstrækkelig plads til at " "rumme denne enhedstype: {device_type} ({u_height}U)" -#: dcim/models/devices.py:922 +#: netbox/dcim/models/devices.py:922 #, python-brace-format msgid "{ip} is not an IPv4 address." msgstr "{ip} er ikke en IPv4-adresse." -#: dcim/models/devices.py:931 dcim/models/devices.py:946 +#: netbox/dcim/models/devices.py:931 netbox/dcim/models/devices.py:946 #, 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." -#: dcim/models/devices.py:937 +#: netbox/dcim/models/devices.py:937 #, python-brace-format msgid "{ip} is not an IPv6 address." msgstr "{ip} Det er ikke en IPv6-adresse." -#: dcim/models/devices.py:964 +#: netbox/dcim/models/devices.py:964 #, python-brace-format msgid "" "The assigned platform is limited to {platform_manufacturer} device types, " @@ -5705,18 +6182,18 @@ msgstr "" "Den tildelte platform er begrænset til {platform_manufacturer} enhedstyper, " "men denne enheds type hører til {devicetype_manufacturer}." -#: dcim/models/devices.py:975 +#: netbox/dcim/models/devices.py:975 #, python-brace-format msgid "The assigned cluster belongs to a different site ({site})" msgstr "Det tildelte cluster tilhører et andet område ({site})" -#: dcim/models/devices.py:983 +#: netbox/dcim/models/devices.py:983 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 " "defineret." -#: dcim/models/devices.py:988 +#: netbox/dcim/models/devices.py:988 #, python-brace-format msgid "" "Device cannot be removed from virtual chassis {virtual_chassis} because it " @@ -5725,15 +6202,15 @@ msgstr "" "Enheden kan ikke fjernes fra det virtuelle chassis {virtual_chassis} fordi " "det i øjeblikket er udpeget som sin herre." -#: dcim/models/devices.py:1196 +#: netbox/dcim/models/devices.py:1196 msgid "module" msgstr "modul" -#: dcim/models/devices.py:1197 +#: netbox/dcim/models/devices.py:1197 msgid "modules" msgstr "moduler" -#: dcim/models/devices.py:1213 +#: netbox/dcim/models/devices.py:1213 #, python-brace-format msgid "" "Module must be installed within a module bay belonging to the assigned " @@ -5742,21 +6219,21 @@ msgstr "" "Modulet skal installeres i en modulplads, der tilhører den tildelte enhed " "({device})." -#: dcim/models/devices.py:1334 +#: netbox/dcim/models/devices.py:1339 msgid "domain" msgstr "domæne" -#: dcim/models/devices.py:1347 dcim/models/devices.py:1348 +#: netbox/dcim/models/devices.py:1352 netbox/dcim/models/devices.py:1353 msgid "virtual chassis" msgstr "virtuelt chassis" -#: dcim/models/devices.py:1363 +#: netbox/dcim/models/devices.py:1368 #, 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." -#: dcim/models/devices.py:1379 +#: netbox/dcim/models/devices.py:1384 #, python-brace-format msgid "" "Unable to delete virtual chassis {self}. There are member interfaces which " @@ -5765,102 +6242,102 @@ msgstr "" "Kan ikke slette virtuelt chassis {self}. Der er medlemsgrænseflader, der " "danner LAG-grænseflader på tværs af chassiserne." -#: dcim/models/devices.py:1404 vpn/models/l2vpn.py:37 +#: netbox/dcim/models/devices.py:1409 netbox/vpn/models/l2vpn.py:37 msgid "identifier" msgstr "identificere" -#: dcim/models/devices.py:1405 +#: netbox/dcim/models/devices.py:1410 msgid "Numeric identifier unique to the parent device" msgstr "Numerisk identifikator, der er unik for den overordnede enhed" -#: dcim/models/devices.py:1433 extras/models/customfields.py:225 -#: extras/models/models.py:107 extras/models/models.py:694 -#: netbox/models/__init__.py:115 +#: 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:115 msgid "comments" msgstr "kommenterer" -#: dcim/models/devices.py:1449 +#: netbox/dcim/models/devices.py:1454 msgid "virtual device context" msgstr "virtuel enhedskontekst" -#: dcim/models/devices.py:1450 +#: netbox/dcim/models/devices.py:1455 msgid "virtual device contexts" msgstr "virtuelle enhedskontekster" -#: dcim/models/devices.py:1482 +#: netbox/dcim/models/devices.py:1487 #, python-brace-format msgid "{ip} is not an IPv{family} address." msgstr "{ip} er ikke en IPV{family} adresse." -#: dcim/models/devices.py:1488 +#: netbox/dcim/models/devices.py:1493 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." -#: dcim/models/mixins.py:15 extras/models/configs.py:41 -#: extras/models/models.py:313 extras/models/models.py:522 -#: extras/models/search.py:48 ipam/models/ip.py:194 +#: netbox/dcim/models/mixins.py:15 netbox/extras/models/configs.py:41 +#: netbox/extras/models/models.py:313 netbox/extras/models/models.py:522 +#: netbox/extras/models/search.py:48 netbox/ipam/models/ip.py:194 msgid "weight" msgstr "vægt" -#: dcim/models/mixins.py:22 +#: netbox/dcim/models/mixins.py:22 msgid "weight unit" msgstr "vægtenhed" -#: dcim/models/mixins.py:51 +#: 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" -#: dcim/models/power.py:55 +#: netbox/dcim/models/power.py:55 msgid "power panel" msgstr "strømpanel" -#: dcim/models/power.py:56 +#: netbox/dcim/models/power.py:56 msgid "power panels" msgstr "strømpaneler" -#: dcim/models/power.py:70 +#: netbox/dcim/models/power.py:70 #, python-brace-format msgid "" "Location {location} ({location_site}) is in a different site than {site}" msgstr "Lokation {location} ({location_site}) er i et andet område end {site}" -#: dcim/models/power.py:108 +#: netbox/dcim/models/power.py:108 msgid "supply" msgstr "levere" -#: dcim/models/power.py:114 +#: netbox/dcim/models/power.py:114 msgid "phase" msgstr "overgang" -#: dcim/models/power.py:120 +#: netbox/dcim/models/power.py:120 msgid "voltage" msgstr "spænding" -#: dcim/models/power.py:125 +#: netbox/dcim/models/power.py:125 msgid "amperage" msgstr "strømstyrke" -#: dcim/models/power.py:130 +#: netbox/dcim/models/power.py:130 msgid "max utilization" msgstr "maksimal udnyttelse" -#: dcim/models/power.py:133 +#: netbox/dcim/models/power.py:133 msgid "Maximum permissible draw (percentage)" msgstr "Maksimal tilladt trækning (procent)" -#: dcim/models/power.py:136 +#: netbox/dcim/models/power.py:136 msgid "available power" msgstr "tilgængelig strøm" -#: dcim/models/power.py:164 +#: netbox/dcim/models/power.py:164 msgid "power feed" msgstr "strømforsyning" -#: dcim/models/power.py:165 +#: netbox/dcim/models/power.py:165 msgid "power feeds" msgstr "strømforsyninger" -#: dcim/models/power.py:179 +#: netbox/dcim/models/power.py:179 #, python-brace-format msgid "" "Rack {rack} ({rack_site}) and power panel {powerpanel} ({powerpanel_site}) " @@ -5869,63 +6346,63 @@ msgstr "" "Rack {rack} ({rack_site}) og strømpanel {powerpanel} ({powerpanel_site}) er " "på forskellige områder." -#: dcim/models/power.py:190 +#: netbox/dcim/models/power.py:190 msgid "Voltage cannot be negative for AC supply" msgstr "Spænding kan ikke være negativ for vekselstrømsforsyning" -#: dcim/models/racks.py:47 +#: netbox/dcim/models/racks.py:47 msgid "width" msgstr "bredde" -#: dcim/models/racks.py:48 +#: netbox/dcim/models/racks.py:48 msgid "Rail-to-rail width" msgstr "Skinne-til-skinne-bredde" -#: dcim/models/racks.py:56 +#: netbox/dcim/models/racks.py:56 msgid "Height in rack units" msgstr "Højde i reoler" -#: dcim/models/racks.py:60 +#: netbox/dcim/models/racks.py:60 msgid "starting unit" msgstr "startenhed" -#: dcim/models/racks.py:62 +#: netbox/dcim/models/racks.py:62 msgid "Starting unit for rack" msgstr "Startenhed til rack" -#: dcim/models/racks.py:66 +#: netbox/dcim/models/racks.py:66 msgid "descending units" msgstr "faldende enheder" -#: dcim/models/racks.py:67 +#: netbox/dcim/models/racks.py:67 msgid "Units are numbered top-to-bottom" msgstr "Enhederne er nummereret fra top til bund" -#: dcim/models/racks.py:72 +#: netbox/dcim/models/racks.py:72 msgid "outer width" msgstr "ydre bredde" -#: dcim/models/racks.py:75 +#: netbox/dcim/models/racks.py:75 msgid "Outer dimension of rack (width)" msgstr "Udvendig dimension af rack (bredde)" -#: dcim/models/racks.py:78 +#: netbox/dcim/models/racks.py:78 msgid "outer depth" msgstr "ydre dybde" -#: dcim/models/racks.py:81 +#: netbox/dcim/models/racks.py:81 msgid "Outer dimension of rack (depth)" msgstr "Udvendig dimension af rack (dybde)" -#: dcim/models/racks.py:84 +#: netbox/dcim/models/racks.py:84 msgid "outer unit" msgstr "ydre enhed" -#: dcim/models/racks.py:90 +#: netbox/dcim/models/racks.py:90 msgid "mounting depth" msgstr "monteringsdybde" -#: dcim/models/racks.py:94 +#: netbox/dcim/models/racks.py:94 msgid "" "Maximum depth of a mounted device, in millimeters. For four-post racks, this" " is the distance between the front and rear rails." @@ -5933,74 +6410,75 @@ msgstr "" "Maksimal dybde af en monteret enhed, i millimeter. For stativer med fire " "stolper er dette afstanden mellem for- og bagskinner." -#: dcim/models/racks.py:102 +#: netbox/dcim/models/racks.py:102 msgid "max weight" msgstr "max vægt" -#: dcim/models/racks.py:105 +#: netbox/dcim/models/racks.py:105 msgid "Maximum load capacity for the rack" msgstr "Maksimal belastningskapacitet for stativet" -#: dcim/models/racks.py:125 dcim/models/racks.py:252 +#: netbox/dcim/models/racks.py:125 netbox/dcim/models/racks.py:252 msgid "form factor" msgstr "formfaktor" -#: dcim/models/racks.py:162 +#: netbox/dcim/models/racks.py:162 msgid "rack type" msgstr "racktype" -#: dcim/models/racks.py:163 +#: netbox/dcim/models/racks.py:163 msgid "rack types" msgstr "racktyper" -#: dcim/models/racks.py:180 dcim/models/racks.py:379 +#: netbox/dcim/models/racks.py:180 netbox/dcim/models/racks.py:379 msgid "Must specify a unit when setting an outer width/depth" msgstr "Skal angive en enhed, når der indstilles en ydre bredde/dybde" -#: dcim/models/racks.py:184 dcim/models/racks.py:383 +#: netbox/dcim/models/racks.py:184 netbox/dcim/models/racks.py:383 msgid "Must specify a unit when setting a maximum weight" msgstr "Skal angive en enhed, når der indstilles en maksimal vægt" -#: dcim/models/racks.py:230 +#: netbox/dcim/models/racks.py:230 msgid "rack role" msgstr "rackrolle" -#: dcim/models/racks.py:231 +#: netbox/dcim/models/racks.py:231 msgid "rack roles" msgstr "rackroller" -#: dcim/models/racks.py:274 +#: netbox/dcim/models/racks.py:274 msgid "facility ID" msgstr "facilitets-id" -#: dcim/models/racks.py:275 +#: netbox/dcim/models/racks.py:275 msgid "Locally-assigned identifier" msgstr "Lokalt tildelt identifikator" -#: dcim/models/racks.py:308 ipam/forms/bulk_import.py:201 -#: ipam/forms/bulk_import.py:266 ipam/forms/bulk_import.py:301 -#: ipam/forms/bulk_import.py:459 virtualization/forms/bulk_import.py:112 +#: 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 msgid "Functional role" msgstr "Funktionel rolle" -#: dcim/models/racks.py:321 +#: netbox/dcim/models/racks.py:321 msgid "A unique tag used to identify this rack" msgstr "Et unikt tag, der bruges til at identificere dette rack" -#: dcim/models/racks.py:359 +#: netbox/dcim/models/racks.py:359 msgid "rack" msgstr "rack" -#: dcim/models/racks.py:360 +#: netbox/dcim/models/racks.py:360 msgid "racks" msgstr "stativer" -#: dcim/models/racks.py:375 +#: netbox/dcim/models/racks.py:375 #, python-brace-format msgid "Assigned location must belong to parent site ({site})." msgstr "Den tildelte lokation skal tilhøre det overordnede område ({site})." -#: dcim/models/racks.py:393 +#: netbox/dcim/models/racks.py:393 #, python-brace-format msgid "" "Rack must be at least {min_height}U tall to house currently installed " @@ -6009,7 +6487,7 @@ msgstr "" "Rack skal være mindst {min_height}Du er høj til at huse aktuelt installerede" " enheder." -#: dcim/models/racks.py:400 +#: netbox/dcim/models/racks.py:400 #, python-brace-format msgid "" "Rack unit numbering must begin at {position} or less to house currently " @@ -6018,891 +6496,953 @@ msgstr "" "Nummerering af rackenheder skal begynde kl {position} eller mindre til at " "huse aktuelt installerede enheder." -#: dcim/models/racks.py:408 +#: netbox/dcim/models/racks.py:408 #, python-brace-format msgid "Location must be from the same site, {site}." msgstr "Lokation skal være fra samme område, {site}." -#: dcim/models/racks.py:670 +#: netbox/dcim/models/racks.py:670 msgid "units" msgstr "enkeltdele" -#: dcim/models/racks.py:696 +#: netbox/dcim/models/racks.py:696 msgid "rack reservation" msgstr "reservation af rack" -#: dcim/models/racks.py:697 +#: netbox/dcim/models/racks.py:697 msgid "rack reservations" msgstr "rackreservationer" -#: dcim/models/racks.py:714 +#: netbox/dcim/models/racks.py:714 #, python-brace-format msgid "Invalid unit(s) for {height}U rack: {unit_list}" msgstr "Ugyldig enhed (er) for {height}U-stativ: {unit_list}" -#: dcim/models/racks.py:727 +#: netbox/dcim/models/racks.py:727 #, python-brace-format msgid "The following units have already been reserved: {unit_list}" msgstr "Følgende enheder er allerede reserveret: {unit_list}" -#: dcim/models/sites.py:49 +#: netbox/dcim/models/sites.py:49 msgid "A top-level region with this name already exists." msgstr "Der findes allerede en region på øverste niveau med dette navn." -#: dcim/models/sites.py:59 +#: netbox/dcim/models/sites.py:59 msgid "A top-level region with this slug already exists." msgstr "Der findes allerede en region på øverste niveau med dette slug." -#: dcim/models/sites.py:62 +#: netbox/dcim/models/sites.py:62 msgid "region" msgstr "område" -#: dcim/models/sites.py:63 +#: netbox/dcim/models/sites.py:63 msgid "regions" msgstr "regioner" -#: dcim/models/sites.py:102 +#: netbox/dcim/models/sites.py:102 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." -#: dcim/models/sites.py:112 +#: netbox/dcim/models/sites.py:112 msgid "A top-level site group with this slug already exists." msgstr "Der findes allerede en områdegruppe på øverste niveau med dette slug." -#: dcim/models/sites.py:115 +#: netbox/dcim/models/sites.py:115 msgid "site group" msgstr "områdegruppe" -#: dcim/models/sites.py:116 +#: netbox/dcim/models/sites.py:116 msgid "site groups" msgstr "områdegrupper" -#: dcim/models/sites.py:141 +#: netbox/dcim/models/sites.py:141 msgid "Full name of the site" msgstr "Områdets fulde navn" -#: dcim/models/sites.py:181 dcim/models/sites.py:279 +#: netbox/dcim/models/sites.py:181 netbox/dcim/models/sites.py:279 msgid "facility" msgstr "facilitet" -#: dcim/models/sites.py:184 dcim/models/sites.py:282 +#: netbox/dcim/models/sites.py:184 netbox/dcim/models/sites.py:282 msgid "Local facility ID or description" msgstr "Lokalt facilitets-id eller beskrivelse" -#: dcim/models/sites.py:195 +#: netbox/dcim/models/sites.py:195 msgid "physical address" msgstr "Fysisk adresse" -#: dcim/models/sites.py:198 +#: netbox/dcim/models/sites.py:198 msgid "Physical location of the building" msgstr "Bygningens fysiske placering" -#: dcim/models/sites.py:201 +#: netbox/dcim/models/sites.py:201 msgid "shipping address" msgstr "leveringsadresse" -#: dcim/models/sites.py:204 +#: netbox/dcim/models/sites.py:204 msgid "If different from the physical address" msgstr "Hvis forskellig fra den fysiske adresse" -#: dcim/models/sites.py:238 +#: netbox/dcim/models/sites.py:238 msgid "site" msgstr "Område" -#: dcim/models/sites.py:239 +#: netbox/dcim/models/sites.py:239 msgid "sites" msgstr "Områder" -#: dcim/models/sites.py:309 +#: netbox/dcim/models/sites.py:309 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." -#: dcim/models/sites.py:319 +#: netbox/dcim/models/sites.py:319 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." -#: dcim/models/sites.py:322 +#: netbox/dcim/models/sites.py:322 msgid "location" msgstr "beliggenhed" -#: dcim/models/sites.py:323 +#: netbox/dcim/models/sites.py:323 msgid "locations" msgstr "steder" -#: dcim/models/sites.py:337 +#: netbox/dcim/models/sites.py:337 #, python-brace-format msgid "Parent location ({parent}) must belong to the same site ({site})." msgstr "Hovedlokation ({parent}) skal tilhøre det samme område ({site})." -#: dcim/tables/cables.py:55 +#: netbox/dcim/tables/cables.py:55 msgid "Termination A" msgstr "Opsigelse A" -#: dcim/tables/cables.py:60 +#: netbox/dcim/tables/cables.py:60 msgid "Termination B" msgstr "Opsigelse B" -#: dcim/tables/cables.py:66 wireless/tables/wirelesslink.py:23 +#: netbox/dcim/tables/cables.py:66 netbox/wireless/tables/wirelesslink.py:23 msgid "Device A" msgstr "Enhed A" -#: dcim/tables/cables.py:72 wireless/tables/wirelesslink.py:32 +#: netbox/dcim/tables/cables.py:72 netbox/wireless/tables/wirelesslink.py:32 msgid "Device B" msgstr "Enhed B" -#: dcim/tables/cables.py:78 +#: netbox/dcim/tables/cables.py:78 msgid "Location A" msgstr "Sted A" -#: dcim/tables/cables.py:84 +#: netbox/dcim/tables/cables.py:84 msgid "Location B" msgstr "Sted B" -#: dcim/tables/cables.py:90 +#: netbox/dcim/tables/cables.py:90 msgid "Rack A" msgstr "Rack A" -#: dcim/tables/cables.py:96 +#: netbox/dcim/tables/cables.py:96 msgid "Rack B" msgstr "Rack B" -#: dcim/tables/cables.py:102 +#: netbox/dcim/tables/cables.py:102 msgid "Site A" msgstr "Område A" -#: dcim/tables/cables.py:108 +#: netbox/dcim/tables/cables.py:108 msgid "Site B" msgstr "Område B" -#: dcim/tables/connections.py:31 dcim/tables/connections.py:50 -#: dcim/tables/connections.py:71 -#: templates/dcim/inc/connection_endpoints.html:16 +#: netbox/dcim/tables/connections.py:31 netbox/dcim/tables/connections.py:50 +#: netbox/dcim/tables/connections.py:71 +#: netbox/templates/dcim/inc/connection_endpoints.html:16 msgid "Reachable" msgstr "Tilgængelig" -#: dcim/tables/devices.py:58 dcim/tables/devices.py:106 -#: dcim/tables/racks.py:150 dcim/tables/sites.py:105 dcim/tables/sites.py:148 -#: extras/tables/tables.py:545 netbox/navigation/menu.py:69 -#: netbox/navigation/menu.py:73 netbox/navigation/menu.py:75 -#: virtualization/forms/model_forms.py:122 -#: virtualization/tables/clusters.py:83 virtualization/views.py:206 +#: 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/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 msgid "Devices" msgstr "Enheder" -#: dcim/tables/devices.py:63 dcim/tables/devices.py:111 -#: virtualization/tables/clusters.py:88 +#: netbox/dcim/tables/devices.py:63 netbox/dcim/tables/devices.py:111 +#: netbox/virtualization/tables/clusters.py:88 msgid "VMs" msgstr "VM'er" -#: dcim/tables/devices.py:100 dcim/tables/devices.py:216 -#: extras/forms/model_forms.py:630 templates/dcim/device.html:112 -#: templates/dcim/device/render_config.html:11 -#: templates/dcim/device/render_config.html:14 -#: templates/dcim/devicerole.html:44 templates/dcim/platform.html:41 -#: templates/extras/configtemplate.html:10 -#: templates/virtualization/virtualmachine.html:48 -#: templates/virtualization/virtualmachine/render_config.html:11 -#: templates/virtualization/virtualmachine/render_config.html:14 -#: virtualization/tables/virtualmachines.py:107 +#: netbox/dcim/tables/devices.py:100 netbox/dcim/tables/devices.py:216 +#: 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/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 msgid "Config Template" msgstr "Konfigurationsskabelon" -#: dcim/tables/devices.py:150 templates/dcim/sitegroup.html:26 +#: netbox/dcim/tables/devices.py:150 netbox/templates/dcim/sitegroup.html:26 msgid "Site Group" msgstr "Områdegruppe" -#: dcim/tables/devices.py:187 dcim/tables/devices.py:1068 -#: ipam/forms/bulk_import.py:503 ipam/forms/model_forms.py:306 -#: ipam/forms/model_forms.py:315 ipam/tables/ip.py:356 ipam/tables/ip.py:423 -#: ipam/tables/ip.py:446 templates/ipam/ipaddress.html:11 -#: virtualization/tables/virtualmachines.py:95 +#: 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/templates/ipam/ipaddress.html:11 +#: netbox/virtualization/tables/virtualmachines.py:95 msgid "IP Address" msgstr "IP adresse" -#: dcim/tables/devices.py:191 dcim/tables/devices.py:1072 -#: virtualization/tables/virtualmachines.py:86 +#: netbox/dcim/tables/devices.py:191 netbox/dcim/tables/devices.py:1072 +#: netbox/virtualization/tables/virtualmachines.py:86 msgid "IPv4 Address" msgstr "IPv4-adresse" -#: dcim/tables/devices.py:195 dcim/tables/devices.py:1076 -#: virtualization/tables/virtualmachines.py:90 +#: netbox/dcim/tables/devices.py:195 netbox/dcim/tables/devices.py:1076 +#: netbox/virtualization/tables/virtualmachines.py:90 msgid "IPv6 Address" msgstr "IPv6-adresse" -#: dcim/tables/devices.py:210 +#: netbox/dcim/tables/devices.py:210 msgid "VC Position" msgstr "VC Position" -#: dcim/tables/devices.py:213 +#: netbox/dcim/tables/devices.py:213 msgid "VC Priority" msgstr "VC-prioritet" -#: dcim/tables/devices.py:220 templates/dcim/device_edit.html:38 -#: templates/dcim/devicebay_populate.html:16 +#: netbox/dcim/tables/devices.py:220 netbox/templates/dcim/device_edit.html:38 +#: netbox/templates/dcim/devicebay_populate.html:16 msgid "Parent Device" msgstr "Forældreenhed" -#: dcim/tables/devices.py:225 +#: netbox/dcim/tables/devices.py:225 msgid "Position (Device Bay)" msgstr "Position (enhedsplads)" -#: dcim/tables/devices.py:234 +#: netbox/dcim/tables/devices.py:234 msgid "Console ports" msgstr "Konsolporte" -#: dcim/tables/devices.py:237 +#: netbox/dcim/tables/devices.py:237 msgid "Console server ports" msgstr "Konsolserverporte" -#: dcim/tables/devices.py:240 +#: netbox/dcim/tables/devices.py:240 msgid "Power ports" msgstr "Strømstik" -#: dcim/tables/devices.py:243 +#: netbox/dcim/tables/devices.py:243 msgid "Power outlets" msgstr "Strømudtag" -#: dcim/tables/devices.py:246 dcim/tables/devices.py:1081 -#: dcim/tables/devicetypes.py:128 dcim/views.py:1042 dcim/views.py:1281 -#: dcim/views.py:1977 netbox/navigation/menu.py:94 -#: netbox/navigation/menu.py:250 templates/dcim/device/base.html:37 -#: templates/dcim/device_list.html:43 templates/dcim/devicetype/base.html:34 -#: templates/dcim/inc/moduletype_buttons.html:25 templates/dcim/module.html:34 -#: templates/dcim/virtualdevicecontext.html:61 -#: templates/dcim/virtualdevicecontext.html:81 -#: templates/virtualization/virtualmachine/base.html:27 -#: templates/virtualization/virtualmachine_list.html:14 -#: virtualization/tables/virtualmachines.py:101 virtualization/views.py:366 -#: wireless/tables/wirelesslan.py:55 +#: 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/templates/dcim/device/base.html:37 +#: netbox/templates/dcim/device_list.html:43 +#: netbox/templates/dcim/devicetype/base.html:34 +#: netbox/templates/dcim/inc/moduletype_buttons.html:25 +#: netbox/templates/dcim/module.html:34 +#: netbox/templates/dcim/virtualdevicecontext.html:61 +#: netbox/templates/dcim/virtualdevicecontext.html:81 +#: netbox/templates/virtualization/virtualmachine/base.html:27 +#: netbox/templates/virtualization/virtualmachine_list.html:14 +#: netbox/virtualization/tables/virtualmachines.py:101 +#: netbox/virtualization/views.py:364 netbox/wireless/tables/wirelesslan.py:55 msgid "Interfaces" msgstr "Grænseflader" -#: dcim/tables/devices.py:249 +#: netbox/dcim/tables/devices.py:249 msgid "Front ports" msgstr "Frontporte" -#: dcim/tables/devices.py:255 +#: netbox/dcim/tables/devices.py:255 msgid "Device bays" msgstr "Enhedsbugter" -#: dcim/tables/devices.py:258 +#: netbox/dcim/tables/devices.py:258 msgid "Module bays" msgstr "Modulpladser" -#: dcim/tables/devices.py:261 +#: netbox/dcim/tables/devices.py:261 msgid "Inventory items" msgstr "Lagervarer" -#: dcim/tables/devices.py:305 dcim/tables/modules.py:56 -#: templates/dcim/modulebay.html:17 +#: netbox/dcim/tables/devices.py:305 netbox/dcim/tables/modules.py:56 +#: netbox/templates/dcim/modulebay.html:17 msgid "Module Bay" msgstr "Modulbugt" -#: dcim/tables/devices.py:318 dcim/tables/devicetypes.py:47 -#: dcim/tables/devicetypes.py:143 dcim/views.py:1117 dcim/views.py:2075 -#: netbox/navigation/menu.py:103 templates/dcim/device/base.html:52 -#: templates/dcim/device_list.html:71 templates/dcim/devicetype/base.html:49 -#: templates/dcim/inc/panels/inventory_items.html:6 -#: templates/dcim/inventoryitemrole.html:32 +#: netbox/dcim/tables/devices.py:318 netbox/dcim/tables/devicetypes.py:47 +#: netbox/dcim/tables/devicetypes.py:143 netbox/dcim/views.py:1115 +#: netbox/dcim/views.py:2073 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 +#: netbox/templates/dcim/inc/panels/inventory_items.html:6 +#: netbox/templates/dcim/inventoryitemrole.html:32 msgid "Inventory Items" msgstr "Lagervarer" -#: dcim/tables/devices.py:333 +#: netbox/dcim/tables/devices.py:333 msgid "Cable Color" msgstr "Kabelfarve" -#: dcim/tables/devices.py:339 +#: netbox/dcim/tables/devices.py:339 msgid "Link Peers" msgstr "Link jævnaldrende" -#: dcim/tables/devices.py:342 +#: netbox/dcim/tables/devices.py:342 msgid "Mark Connected" msgstr "Marker tilsluttet" -#: dcim/tables/devices.py:461 +#: netbox/dcim/tables/devices.py:461 msgid "Maximum draw (W)" msgstr "Maksimal trækkraft (W)" -#: dcim/tables/devices.py:464 +#: netbox/dcim/tables/devices.py:464 msgid "Allocated draw (W)" msgstr "Tildelt lodtrækning (W)" -#: dcim/tables/devices.py:558 ipam/forms/model_forms.py:701 -#: ipam/tables/fhrp.py:28 ipam/views.py:596 ipam/views.py:696 -#: netbox/navigation/menu.py:158 netbox/navigation/menu.py:160 -#: templates/dcim/interface.html:339 templates/ipam/ipaddress_bulk_add.html:15 -#: templates/ipam/service.html:40 templates/virtualization/vminterface.html:85 -#: vpn/tables/tunnels.py:98 +#: netbox/dcim/tables/devices.py:558 netbox/ipam/forms/model_forms.py: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/templates/ipam/ipaddress_bulk_add.html:15 +#: netbox/templates/ipam/service.html:40 +#: netbox/templates/virtualization/vminterface.html:85 +#: netbox/vpn/tables/tunnels.py:98 msgid "IP Addresses" msgstr "IP-adresser" -#: dcim/tables/devices.py:564 netbox/navigation/menu.py:202 -#: templates/ipam/inc/panels/fhrp_groups.html:6 +#: netbox/dcim/tables/devices.py:564 netbox/netbox/navigation/menu.py:202 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:6 msgid "FHRP Groups" msgstr "FHRP Grupper" -#: dcim/tables/devices.py:576 templates/dcim/interface.html:89 -#: templates/virtualization/vminterface.html:67 templates/vpn/tunnel.html:18 -#: templates/vpn/tunneltermination.html:13 vpn/forms/bulk_edit.py:76 -#: vpn/forms/bulk_import.py:76 vpn/forms/filtersets.py:42 -#: vpn/forms/filtersets.py:82 vpn/forms/model_forms.py:60 -#: vpn/forms/model_forms.py:145 vpn/tables/tunnels.py:78 +#: netbox/dcim/tables/devices.py:576 netbox/templates/dcim/interface.html:89 +#: netbox/templates/virtualization/vminterface.html:67 +#: netbox/templates/vpn/tunnel.html:18 +#: netbox/templates/vpn/tunneltermination.html:13 +#: netbox/vpn/forms/bulk_edit.py:76 netbox/vpn/forms/bulk_import.py:76 +#: netbox/vpn/forms/filtersets.py:42 netbox/vpn/forms/filtersets.py:82 +#: netbox/vpn/forms/model_forms.py:60 netbox/vpn/forms/model_forms.py:145 +#: netbox/vpn/tables/tunnels.py:78 msgid "Tunnel" msgstr "Tunnel" -#: dcim/tables/devices.py:604 dcim/tables/devicetypes.py:227 -#: templates/dcim/interface.html:65 +#: netbox/dcim/tables/devices.py:604 netbox/dcim/tables/devicetypes.py:227 +#: netbox/templates/dcim/interface.html:65 msgid "Management Only" msgstr "Kun ledelse" -#: dcim/tables/devices.py:623 +#: netbox/dcim/tables/devices.py:623 msgid "VDCs" msgstr "VDC'er" -#: dcim/tables/devices.py:873 templates/dcim/modulebay.html:53 +#: netbox/dcim/tables/devices.py:873 netbox/templates/dcim/modulebay.html:53 msgid "Installed Module" msgstr "Installeret modul" -#: dcim/tables/devices.py:876 +#: netbox/dcim/tables/devices.py:876 msgid "Module Serial" msgstr "Seriel modul" -#: dcim/tables/devices.py:880 +#: netbox/dcim/tables/devices.py:880 msgid "Module Asset Tag" msgstr "Modulaktivmærke" -#: dcim/tables/devices.py:889 +#: netbox/dcim/tables/devices.py:889 msgid "Module Status" msgstr "Modulstatus" -#: dcim/tables/devices.py:944 dcim/tables/devicetypes.py:312 -#: templates/dcim/inventoryitem.html:40 +#: netbox/dcim/tables/devices.py:944 netbox/dcim/tables/devicetypes.py:312 +#: netbox/templates/dcim/inventoryitem.html:40 msgid "Component" msgstr "Komponent" -#: dcim/tables/devices.py:1000 +#: netbox/dcim/tables/devices.py:1000 msgid "Items" msgstr "Varer" -#: dcim/tables/devicetypes.py:37 netbox/navigation/menu.py:84 -#: netbox/navigation/menu.py:86 +#: netbox/dcim/tables/devicetypes.py:37 netbox/netbox/navigation/menu.py:84 +#: netbox/netbox/navigation/menu.py:86 msgid "Device Types" msgstr "Enhedstyper" -#: dcim/tables/devicetypes.py:42 netbox/navigation/menu.py:87 +#: netbox/dcim/tables/devicetypes.py:42 netbox/netbox/navigation/menu.py:87 msgid "Module Types" msgstr "Modultyper" -#: dcim/tables/devicetypes.py:52 extras/forms/filtersets.py:371 -#: extras/forms/model_forms.py:537 extras/tables/tables.py:540 -#: netbox/navigation/menu.py:78 +#: 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/netbox/navigation/menu.py:78 msgid "Platforms" msgstr "Platforme" -#: dcim/tables/devicetypes.py:84 templates/dcim/devicetype.html:29 +#: netbox/dcim/tables/devicetypes.py:84 +#: netbox/templates/dcim/devicetype.html:29 msgid "Default Platform" msgstr "Standardplatform" -#: dcim/tables/devicetypes.py:88 templates/dcim/devicetype.html:45 +#: netbox/dcim/tables/devicetypes.py:88 +#: netbox/templates/dcim/devicetype.html:45 msgid "Full Depth" msgstr "Fuld dybde" -#: dcim/tables/devicetypes.py:98 +#: netbox/dcim/tables/devicetypes.py:98 msgid "U Height" msgstr "U Højde" -#: dcim/tables/devicetypes.py:113 dcim/tables/modules.py:26 -#: dcim/tables/racks.py:89 +#: netbox/dcim/tables/devicetypes.py:113 netbox/dcim/tables/modules.py:26 +#: netbox/dcim/tables/racks.py:89 msgid "Instances" msgstr "forekomster" -#: dcim/tables/devicetypes.py:116 dcim/views.py:982 dcim/views.py:1221 -#: dcim/views.py:1913 netbox/navigation/menu.py:97 -#: templates/dcim/device/base.html:25 templates/dcim/device_list.html:15 -#: templates/dcim/devicetype/base.html:22 -#: templates/dcim/inc/moduletype_buttons.html:13 templates/dcim/module.html:22 +#: netbox/dcim/tables/devicetypes.py:116 netbox/dcim/views.py:980 +#: netbox/dcim/views.py:1219 netbox/dcim/views.py:1911 +#: netbox/netbox/navigation/menu.py:97 +#: netbox/templates/dcim/device/base.html:25 +#: netbox/templates/dcim/device_list.html:15 +#: netbox/templates/dcim/devicetype/base.html:22 +#: netbox/templates/dcim/inc/moduletype_buttons.html:13 +#: netbox/templates/dcim/module.html:22 msgid "Console Ports" msgstr "Konsolporte" -#: dcim/tables/devicetypes.py:119 dcim/views.py:997 dcim/views.py:1236 -#: dcim/views.py:1929 netbox/navigation/menu.py:98 -#: templates/dcim/device/base.html:28 templates/dcim/device_list.html:22 -#: templates/dcim/devicetype/base.html:25 -#: templates/dcim/inc/moduletype_buttons.html:16 templates/dcim/module.html:25 +#: netbox/dcim/tables/devicetypes.py:119 netbox/dcim/views.py:995 +#: netbox/dcim/views.py:1234 netbox/dcim/views.py:1927 +#: netbox/netbox/navigation/menu.py:98 +#: netbox/templates/dcim/device/base.html:28 +#: netbox/templates/dcim/device_list.html:22 +#: netbox/templates/dcim/devicetype/base.html:25 +#: netbox/templates/dcim/inc/moduletype_buttons.html:16 +#: netbox/templates/dcim/module.html:25 msgid "Console Server Ports" msgstr "Konsolserverporte" -#: dcim/tables/devicetypes.py:122 dcim/views.py:1012 dcim/views.py:1251 -#: dcim/views.py:1945 netbox/navigation/menu.py:99 -#: templates/dcim/device/base.html:31 templates/dcim/device_list.html:29 -#: templates/dcim/devicetype/base.html:28 -#: templates/dcim/inc/moduletype_buttons.html:19 templates/dcim/module.html:28 +#: netbox/dcim/tables/devicetypes.py:122 netbox/dcim/views.py:1010 +#: netbox/dcim/views.py:1249 netbox/dcim/views.py:1943 +#: netbox/netbox/navigation/menu.py:99 +#: netbox/templates/dcim/device/base.html:31 +#: netbox/templates/dcim/device_list.html:29 +#: netbox/templates/dcim/devicetype/base.html:28 +#: netbox/templates/dcim/inc/moduletype_buttons.html:19 +#: netbox/templates/dcim/module.html:28 msgid "Power Ports" msgstr "Strømstik" -#: dcim/tables/devicetypes.py:125 dcim/views.py:1027 dcim/views.py:1266 -#: dcim/views.py:1961 netbox/navigation/menu.py:100 -#: templates/dcim/device/base.html:34 templates/dcim/device_list.html:36 -#: templates/dcim/devicetype/base.html:31 -#: templates/dcim/inc/moduletype_buttons.html:22 templates/dcim/module.html:31 +#: netbox/dcim/tables/devicetypes.py:125 netbox/dcim/views.py:1025 +#: netbox/dcim/views.py:1264 netbox/dcim/views.py:1959 +#: netbox/netbox/navigation/menu.py:100 +#: netbox/templates/dcim/device/base.html:34 +#: netbox/templates/dcim/device_list.html:36 +#: netbox/templates/dcim/devicetype/base.html:31 +#: netbox/templates/dcim/inc/moduletype_buttons.html:22 +#: netbox/templates/dcim/module.html:31 msgid "Power Outlets" msgstr "Strømudtag" -#: dcim/tables/devicetypes.py:131 dcim/views.py:1057 dcim/views.py:1296 -#: dcim/views.py:1999 netbox/navigation/menu.py:95 -#: templates/dcim/device/base.html:40 templates/dcim/devicetype/base.html:37 -#: templates/dcim/inc/moduletype_buttons.html:28 templates/dcim/module.html:37 +#: netbox/dcim/tables/devicetypes.py:131 netbox/dcim/views.py:1055 +#: netbox/dcim/views.py:1294 netbox/dcim/views.py:1997 +#: netbox/netbox/navigation/menu.py:95 +#: netbox/templates/dcim/device/base.html:40 +#: netbox/templates/dcim/devicetype/base.html:37 +#: netbox/templates/dcim/inc/moduletype_buttons.html:28 +#: netbox/templates/dcim/module.html:37 msgid "Front Ports" msgstr "Frontporte" -#: dcim/tables/devicetypes.py:134 dcim/views.py:1072 dcim/views.py:1311 -#: dcim/views.py:2015 netbox/navigation/menu.py:96 -#: templates/dcim/device/base.html:43 templates/dcim/device_list.html:50 -#: templates/dcim/devicetype/base.html:40 -#: templates/dcim/inc/moduletype_buttons.html:31 templates/dcim/module.html:40 +#: netbox/dcim/tables/devicetypes.py:134 netbox/dcim/views.py:1070 +#: netbox/dcim/views.py:1309 netbox/dcim/views.py:2013 +#: netbox/netbox/navigation/menu.py:96 +#: netbox/templates/dcim/device/base.html:43 +#: netbox/templates/dcim/device_list.html:50 +#: netbox/templates/dcim/devicetype/base.html:40 +#: netbox/templates/dcim/inc/moduletype_buttons.html:31 +#: netbox/templates/dcim/module.html:40 msgid "Rear Ports" msgstr "Bageste porte" -#: dcim/tables/devicetypes.py:137 dcim/views.py:1102 dcim/views.py:2055 -#: netbox/navigation/menu.py:102 templates/dcim/device/base.html:49 -#: templates/dcim/device_list.html:57 templates/dcim/devicetype/base.html:46 +#: netbox/dcim/tables/devicetypes.py:137 netbox/dcim/views.py:1100 +#: netbox/dcim/views.py:2053 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" -#: dcim/tables/devicetypes.py:140 dcim/views.py:1087 dcim/views.py:1326 -#: dcim/views.py:2035 netbox/navigation/menu.py:101 -#: templates/dcim/device/base.html:46 templates/dcim/device_list.html:64 -#: templates/dcim/devicetype/base.html:43 -#: templates/dcim/inc/moduletype_buttons.html:34 templates/dcim/module.html:43 +#: netbox/dcim/tables/devicetypes.py:140 netbox/dcim/views.py:1085 +#: netbox/dcim/views.py:1324 netbox/dcim/views.py:2033 +#: netbox/netbox/navigation/menu.py:101 +#: netbox/templates/dcim/device/base.html:46 +#: netbox/templates/dcim/device_list.html:64 +#: netbox/templates/dcim/devicetype/base.html:43 +#: netbox/templates/dcim/inc/moduletype_buttons.html:34 +#: netbox/templates/dcim/module.html:43 msgid "Module Bays" msgstr "Modulbugter" -#: dcim/tables/power.py:36 netbox/navigation/menu.py:297 -#: templates/dcim/powerpanel.html:51 +#: netbox/dcim/tables/power.py:36 netbox/netbox/navigation/menu.py:297 +#: netbox/templates/dcim/powerpanel.html:51 msgid "Power Feeds" msgstr "Strømforsyninger" -#: dcim/tables/power.py:80 templates/dcim/powerfeed.html:99 +#: netbox/dcim/tables/power.py:80 netbox/templates/dcim/powerfeed.html:99 msgid "Max Utilization" msgstr "Maksimal udnyttelse" -#: dcim/tables/power.py:84 +#: netbox/dcim/tables/power.py:84 msgid "Available Power (VA)" msgstr "Tilgængelig effekt (VA)" -#: dcim/tables/racks.py:30 dcim/tables/sites.py:143 -#: netbox/navigation/menu.py:43 netbox/navigation/menu.py:47 -#: netbox/navigation/menu.py:49 +#: netbox/dcim/tables/racks.py:30 netbox/dcim/tables/sites.py:143 +#: netbox/netbox/navigation/menu.py:43 netbox/netbox/navigation/menu.py:47 +#: netbox/netbox/navigation/menu.py:49 msgid "Racks" msgstr "Racker" -#: dcim/tables/racks.py:63 dcim/tables/racks.py:142 -#: templates/dcim/device.html:318 -#: templates/dcim/inc/panels/racktype_dimensions.html:14 +#: netbox/dcim/tables/racks.py:63 netbox/dcim/tables/racks.py:142 +#: netbox/templates/dcim/device.html:318 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:14 msgid "Height" msgstr "Højde" -#: dcim/tables/racks.py:67 dcim/tables/racks.py:165 -#: templates/dcim/inc/panels/racktype_dimensions.html:18 +#: netbox/dcim/tables/racks.py:67 netbox/dcim/tables/racks.py:165 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:18 msgid "Outer Width" msgstr "Udvendig bredde" -#: dcim/tables/racks.py:71 dcim/tables/racks.py:169 -#: templates/dcim/inc/panels/racktype_dimensions.html:28 +#: netbox/dcim/tables/racks.py:71 netbox/dcim/tables/racks.py:169 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:28 msgid "Outer Depth" msgstr "Ydre dybde" -#: dcim/tables/racks.py:79 dcim/tables/racks.py:177 +#: netbox/dcim/tables/racks.py:79 netbox/dcim/tables/racks.py:177 msgid "Max Weight" msgstr "Maks. Vægt" -#: dcim/tables/racks.py:154 +#: netbox/dcim/tables/racks.py:154 msgid "Space" msgstr "Rummet" -#: dcim/tables/sites.py:30 dcim/tables/sites.py:57 -#: extras/forms/filtersets.py:351 extras/forms/model_forms.py:517 -#: ipam/forms/bulk_edit.py:131 ipam/forms/model_forms.py:153 -#: ipam/tables/asn.py:66 netbox/navigation/menu.py:15 -#: netbox/navigation/menu.py:17 +#: netbox/dcim/tables/sites.py:30 netbox/dcim/tables/sites.py:57 +#: netbox/extras/forms/filtersets.py: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/netbox/navigation/menu.py:15 netbox/netbox/navigation/menu.py:17 msgid "Sites" msgstr "Områder" -#: dcim/tests/test_api.py:47 +#: netbox/dcim/tests/test_api.py:47 msgid "Test case must set peer_termination_type" msgstr "Testcase skal indstille peer_termination_type" -#: dcim/views.py:140 +#: netbox/dcim/views.py:138 #, python-brace-format msgid "Disconnected {count} {type}" msgstr "Afbrudt {count} {type}" -#: dcim/views.py:740 netbox/navigation/menu.py:51 +#: netbox/dcim/views.py:738 netbox/netbox/navigation/menu.py:51 msgid "Reservations" msgstr "Reservationer" -#: dcim/views.py:759 templates/dcim/location.html:90 -#: templates/dcim/site.html:140 +#: netbox/dcim/views.py:757 netbox/templates/dcim/location.html:90 +#: netbox/templates/dcim/site.html:140 msgid "Non-Racked Devices" msgstr "Enheder uden rack" -#: dcim/views.py:2088 extras/forms/model_forms.py:577 -#: templates/extras/configcontext.html:10 -#: virtualization/forms/model_forms.py:225 virtualization/views.py:407 +#: netbox/dcim/views.py:2086 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 msgid "Config Context" msgstr "Konfigurationskontekst" -#: dcim/views.py:2098 virtualization/views.py:417 +#: netbox/dcim/views.py:2096 netbox/virtualization/views.py:415 msgid "Render Config" msgstr "Gengivelseskonfiguration" -#: dcim/views.py:2131 virtualization/views.py:450 +#: 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}" -#: dcim/views.py:2149 extras/tables/tables.py:550 -#: netbox/navigation/menu.py:247 netbox/navigation/menu.py:249 -#: virtualization/views.py:180 +#: 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 msgid "Virtual Machines" msgstr "Virtuelle maskiner" -#: dcim/views.py:2897 +#: netbox/dcim/views.py:2907 #, python-brace-format msgid "Installed device {device} in bay {device_bay}." msgstr "Installeret enhed {device} i bugten {device_bay}." -#: dcim/views.py:2938 +#: netbox/dcim/views.py:2948 #, python-brace-format msgid "Removed device {device} from bay {device_bay}." msgstr "Fjernet enhed {device} fra bugten {device_bay}." -#: dcim/views.py:3044 ipam/tables/ip.py:234 +#: netbox/dcim/views.py:3054 netbox/ipam/tables/ip.py:234 msgid "Children" msgstr "Børn" -#: dcim/views.py:3510 +#: netbox/dcim/views.py:3520 #, python-brace-format msgid "Added member {device}" msgstr "Tilføjet medlem {device}" -#: dcim/views.py:3557 +#: netbox/dcim/views.py:3567 #, python-brace-format msgid "Unable to remove master device {device} from the virtual chassis." msgstr "Kan ikke fjerne masterenheden {device} fra det virtuelle chassis." -#: dcim/views.py:3570 +#: netbox/dcim/views.py:3580 #, python-brace-format msgid "Removed {device} from virtual chassis {chassis}" msgstr "Fjernet {device} fra virtuelt chassis {chassis}" -#: extras/api/customfields.py:89 +#: netbox/extras/api/customfields.py:89 #, python-brace-format msgid "Unknown related object(s): {name}" msgstr "Ukendt relateret objekt (er): {name}" -#: extras/api/serializers_/customfields.py:73 +#: netbox/extras/api/serializers_/customfields.py:73 msgid "Changing the type of custom fields is not supported." msgstr "Ændring af typen af brugerdefinerede felter understøttes ikke." -#: extras/api/serializers_/scripts.py:70 extras/api/serializers_/scripts.py:75 +#: netbox/extras/api/serializers_/scripts.py:70 +#: netbox/extras/api/serializers_/scripts.py:75 msgid "Scheduling is not enabled for this script." msgstr "Planlægning er ikke aktiveret for dette script." -#: extras/choices.py:30 extras/forms/misc.py:14 +#: netbox/extras/choices.py:30 netbox/extras/forms/misc.py:14 msgid "Text" msgstr "Tekst" -#: extras/choices.py:31 +#: netbox/extras/choices.py:31 msgid "Text (long)" msgstr "Tekst (lang)" -#: extras/choices.py:32 +#: netbox/extras/choices.py:32 msgid "Integer" msgstr "Heltal" -#: extras/choices.py:33 +#: netbox/extras/choices.py:33 msgid "Decimal" msgstr "Decimaltal" -#: extras/choices.py:34 +#: netbox/extras/choices.py:34 msgid "Boolean (true/false)" msgstr "Boolsk (sandt/falsk)" -#: extras/choices.py:35 +#: netbox/extras/choices.py:35 msgid "Date" msgstr "Dato" -#: extras/choices.py:36 +#: netbox/extras/choices.py:36 msgid "Date & time" msgstr "Dato & klokkeslæt" -#: extras/choices.py:38 +#: netbox/extras/choices.py:38 msgid "JSON" msgstr "JSON" -#: extras/choices.py:39 +#: netbox/extras/choices.py:39 msgid "Selection" msgstr "Udvælgelse" -#: extras/choices.py:40 +#: netbox/extras/choices.py:40 msgid "Multiple selection" msgstr "Flere valg" -#: extras/choices.py:42 +#: netbox/extras/choices.py:42 msgid "Multiple objects" msgstr "Flere objekter" -#: extras/choices.py:53 netbox/preferences.py:21 -#: templates/extras/customfield.html:78 vpn/choices.py:20 -#: wireless/choices.py:27 +#: netbox/extras/choices.py:53 netbox/netbox/preferences.py:21 +#: netbox/templates/extras/customfield.html:78 netbox/vpn/choices.py:20 +#: netbox/wireless/choices.py:27 msgid "Disabled" msgstr "Handicappede" -#: extras/choices.py:54 +#: netbox/extras/choices.py:54 msgid "Loose" msgstr "Løs" -#: extras/choices.py:55 +#: netbox/extras/choices.py:55 msgid "Exact" msgstr "Præcis" -#: extras/choices.py:66 +#: netbox/extras/choices.py:66 msgid "Always" msgstr "Altid" -#: extras/choices.py:67 +#: netbox/extras/choices.py:67 msgid "If set" msgstr "Hvis indstillet" -#: extras/choices.py:68 extras/choices.py:81 +#: netbox/extras/choices.py:68 netbox/extras/choices.py:81 msgid "Hidden" msgstr "Skjult" -#: extras/choices.py:79 +#: netbox/extras/choices.py:79 msgid "Yes" msgstr "Ja" -#: extras/choices.py:80 +#: netbox/extras/choices.py:80 msgid "No" msgstr "Nej" -#: extras/choices.py:108 templates/tenancy/contact.html:57 -#: tenancy/forms/bulk_edit.py:118 wireless/forms/model_forms.py:168 +#: 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 msgid "Link" msgstr "Forbindelse" -#: extras/choices.py:124 +#: netbox/extras/choices.py:124 msgid "Newest" msgstr "Nyeste" -#: extras/choices.py:125 +#: netbox/extras/choices.py:125 msgid "Oldest" msgstr "Ældste" -#: extras/choices.py:126 +#: netbox/extras/choices.py:126 msgid "Alphabetical (A-Z)" msgstr "Alfabetisk (A-Z)" -#: extras/choices.py:127 +#: netbox/extras/choices.py:127 msgid "Alphabetical (Z-A)" msgstr "Alfabetisk (Z-A)" -#: extras/choices.py:144 extras/choices.py:167 +#: netbox/extras/choices.py:144 netbox/extras/choices.py:167 msgid "Info" msgstr "Info" -#: extras/choices.py:145 extras/choices.py:168 +#: netbox/extras/choices.py:145 netbox/extras/choices.py:168 msgid "Success" msgstr "Succes" -#: extras/choices.py:146 extras/choices.py:169 +#: netbox/extras/choices.py:146 netbox/extras/choices.py:169 msgid "Warning" msgstr "Advarsel" -#: extras/choices.py:147 +#: netbox/extras/choices.py:147 msgid "Danger" msgstr "Fare" -#: extras/choices.py:165 +#: netbox/extras/choices.py:165 msgid "Debug" msgstr "Fejlfinding" -#: extras/choices.py:166 netbox/choices.py:101 +#: netbox/extras/choices.py:166 netbox/netbox/choices.py:101 msgid "Default" msgstr "Standard" -#: extras/choices.py:170 +#: netbox/extras/choices.py:170 msgid "Failure" msgstr "Fejl" -#: extras/choices.py:186 +#: netbox/extras/choices.py:186 msgid "Hourly" msgstr "Hver time" -#: extras/choices.py:187 +#: netbox/extras/choices.py:187 msgid "12 hours" msgstr "12 timer" -#: extras/choices.py:188 +#: netbox/extras/choices.py:188 msgid "Daily" msgstr "Dagligt" -#: extras/choices.py:189 +#: netbox/extras/choices.py:189 msgid "Weekly" msgstr "Ugentlig" -#: extras/choices.py:190 +#: netbox/extras/choices.py:190 msgid "30 days" msgstr "30 dage" -#: extras/choices.py:226 templates/dcim/virtualchassis_edit.html:107 -#: templates/generic/bulk_add_component.html:68 -#: templates/generic/object_edit.html:47 templates/generic/object_edit.html:80 -#: templates/ipam/inc/ipaddress_edit_header.html:7 +#: netbox/extras/choices.py:226 +#: 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/ipam/inc/ipaddress_edit_header.html:7 msgid "Create" msgstr "Opret" -#: extras/choices.py:227 +#: netbox/extras/choices.py:227 msgid "Update" msgstr "Opdatere" -#: extras/choices.py:228 templates/circuits/inc/circuit_termination.html:23 -#: templates/dcim/inc/panels/inventory_items.html:37 -#: templates/dcim/powerpanel.html:66 templates/extras/script_list.html:35 -#: templates/generic/bulk_delete.html:20 templates/generic/bulk_delete.html:66 -#: templates/generic/object_delete.html:19 templates/htmx/delete_form.html:57 -#: templates/ipam/inc/panels/fhrp_groups.html:48 -#: templates/users/objectpermission.html:46 -#: utilities/templates/buttons/delete.html:11 +#: netbox/extras/choices.py:228 +#: netbox/templates/circuits/inc/circuit_termination.html:23 +#: netbox/templates/dcim/inc/panels/inventory_items.html:37 +#: netbox/templates/dcim/powerpanel.html:66 +#: netbox/templates/extras/script_list.html:35 +#: netbox/templates/generic/bulk_delete.html:20 +#: netbox/templates/generic/bulk_delete.html:66 +#: netbox/templates/generic/object_delete.html:19 +#: netbox/templates/htmx/delete_form.html:57 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:48 +#: netbox/templates/users/objectpermission.html:46 +#: netbox/utilities/templates/buttons/delete.html:11 msgid "Delete" msgstr "Slet" -#: extras/choices.py:252 netbox/choices.py:57 netbox/choices.py:102 +#: netbox/extras/choices.py:252 netbox/netbox/choices.py:57 +#: netbox/netbox/choices.py:102 msgid "Blue" msgstr "Blå" -#: extras/choices.py:253 netbox/choices.py:56 netbox/choices.py:103 +#: netbox/extras/choices.py:253 netbox/netbox/choices.py:56 +#: netbox/netbox/choices.py:103 msgid "Indigo" msgstr "indigo" -#: extras/choices.py:254 netbox/choices.py:54 netbox/choices.py:104 +#: netbox/extras/choices.py:254 netbox/netbox/choices.py:54 +#: netbox/netbox/choices.py:104 msgid "Purple" msgstr "Lilla" -#: extras/choices.py:255 netbox/choices.py:51 netbox/choices.py:105 +#: netbox/extras/choices.py:255 netbox/netbox/choices.py:51 +#: netbox/netbox/choices.py:105 msgid "Pink" msgstr "Lyserød" -#: extras/choices.py:256 netbox/choices.py:50 netbox/choices.py:106 +#: netbox/extras/choices.py:256 netbox/netbox/choices.py:50 +#: netbox/netbox/choices.py:106 msgid "Red" msgstr "Rød" -#: extras/choices.py:257 netbox/choices.py:68 netbox/choices.py:107 +#: netbox/extras/choices.py:257 netbox/netbox/choices.py:68 +#: netbox/netbox/choices.py:107 msgid "Orange" msgstr "orange" -#: extras/choices.py:258 netbox/choices.py:66 netbox/choices.py:108 +#: netbox/extras/choices.py:258 netbox/netbox/choices.py:66 +#: netbox/netbox/choices.py:108 msgid "Yellow" msgstr "Gul" -#: extras/choices.py:259 netbox/choices.py:63 netbox/choices.py:109 +#: netbox/extras/choices.py:259 netbox/netbox/choices.py:63 +#: netbox/netbox/choices.py:109 msgid "Green" msgstr "Grøn" -#: extras/choices.py:260 netbox/choices.py:60 netbox/choices.py:110 +#: netbox/extras/choices.py:260 netbox/netbox/choices.py:60 +#: netbox/netbox/choices.py:110 msgid "Teal" msgstr "krikand" -#: extras/choices.py:261 netbox/choices.py:59 netbox/choices.py:111 +#: netbox/extras/choices.py:261 netbox/netbox/choices.py:59 +#: netbox/netbox/choices.py:111 msgid "Cyan" msgstr "Cyan" -#: extras/choices.py:262 netbox/choices.py:112 +#: netbox/extras/choices.py:262 netbox/netbox/choices.py:112 msgid "Gray" msgstr "Grå" -#: extras/choices.py:263 netbox/choices.py:74 netbox/choices.py:113 +#: netbox/extras/choices.py:263 netbox/netbox/choices.py:74 +#: netbox/netbox/choices.py:113 msgid "Black" msgstr "Sort" -#: extras/choices.py:264 netbox/choices.py:75 netbox/choices.py:114 +#: netbox/extras/choices.py:264 netbox/netbox/choices.py:75 +#: netbox/netbox/choices.py:114 msgid "White" msgstr "Hvid" -#: extras/choices.py:279 extras/forms/model_forms.py:353 -#: extras/forms/model_forms.py:430 templates/extras/webhook.html:10 +#: netbox/extras/choices.py:279 netbox/extras/forms/model_forms.py:353 +#: netbox/extras/forms/model_forms.py:430 +#: netbox/templates/extras/webhook.html:10 msgid "Webhook" msgstr "Webhook" -#: extras/choices.py:280 extras/forms/model_forms.py:418 -#: templates/extras/script/base.html:29 +#: netbox/extras/choices.py:280 netbox/extras/forms/model_forms.py:418 +#: netbox/templates/extras/script/base.html:29 msgid "Script" msgstr "Manuskript" -#: extras/choices.py:281 +#: netbox/extras/choices.py:281 msgid "Notification" msgstr "Meddelelse" -#: extras/conditions.py:54 +#: netbox/extras/conditions.py:54 #, python-brace-format msgid "Unknown operator: {op}. Must be one of: {operators}" msgstr "Ukendt operatør: {op}. Skal være en af: {operators}" -#: extras/conditions.py:58 +#: netbox/extras/conditions.py:58 #, python-brace-format msgid "Unsupported value type: {value}" msgstr "Ikke-understøttet værditype: {value}" -#: extras/conditions.py:60 +#: netbox/extras/conditions.py:60 #, python-brace-format msgid "Invalid type for {op} operation: {value}" msgstr "Ugyldig type for {op} Betjening: {value}" -#: extras/conditions.py:137 +#: netbox/extras/conditions.py:137 #, python-brace-format msgid "Ruleset must be a dictionary, not {ruleset}." msgstr "Regelsæt skal være en ordbog, ikke {ruleset}." -#: extras/conditions.py:142 +#: netbox/extras/conditions.py:142 msgid "Invalid logic type: must be 'AND' or 'OR'. Please check documentation." msgstr "" "Ugyldig logiktype: skal være 'OG' eller 'OR'. Tjek venligst dokumentationen." -#: extras/conditions.py:154 +#: netbox/extras/conditions.py:154 msgid "Incorrect key(s) informed. Please check documentation." msgstr "Forkert nøgle (r) informeret. Tjek venligst dokumentationen." -#: extras/dashboard/forms.py:38 +#: netbox/extras/dashboard/forms.py:38 msgid "Widget type" msgstr "Widgettype" -#: extras/dashboard/utils.py:36 +#: netbox/extras/dashboard/utils.py:36 #, python-brace-format msgid "Unregistered widget class: {name}" msgstr "Uregistreret widget klasse: {name}" -#: extras/dashboard/widgets.py:125 +#: netbox/extras/dashboard/widgets.py:125 #, python-brace-format msgid "{class_name} must define a render() method." msgstr "{class_name} skal definere en render () -metode." -#: extras/dashboard/widgets.py:144 +#: netbox/extras/dashboard/widgets.py:144 msgid "Note" msgstr "Bemærk" -#: extras/dashboard/widgets.py:145 +#: netbox/extras/dashboard/widgets.py:145 msgid "Display some arbitrary custom content. Markdown is supported." msgstr "Vis noget vilkårligt brugerdefineret indhold. Markdown understøttes." -#: extras/dashboard/widgets.py:158 +#: netbox/extras/dashboard/widgets.py:158 msgid "Object Counts" msgstr "Objekttællinger" -#: extras/dashboard/widgets.py:159 +#: netbox/extras/dashboard/widgets.py:159 msgid "" "Display a set of NetBox models and the number of objects created for each " "type." @@ -6910,266 +7450,288 @@ msgstr "" "Vis et sæt NetBox-modeller og antallet af objekter, der er oprettet for hver" " type." -#: extras/dashboard/widgets.py:169 +#: netbox/extras/dashboard/widgets.py:169 msgid "Filters to apply when counting the number of objects" msgstr "Filtre, der skal anvendes, når antallet af objekter tælles" -#: extras/dashboard/widgets.py:177 +#: netbox/extras/dashboard/widgets.py:177 msgid "Invalid format. Object filters must be passed as a dictionary." msgstr "Ugyldigt format. Objektfiltre skal sendes som en ordbog." -#: extras/dashboard/widgets.py:208 +#: netbox/extras/dashboard/widgets.py:208 msgid "Object List" msgstr "Objektliste" -#: extras/dashboard/widgets.py:209 +#: netbox/extras/dashboard/widgets.py:209 msgid "Display an arbitrary list of objects." msgstr "Vis en vilkårlig liste over objekter." -#: extras/dashboard/widgets.py:222 +#: netbox/extras/dashboard/widgets.py:222 msgid "The default number of objects to display" msgstr "Standardantallet af objekter, der skal vises" -#: extras/dashboard/widgets.py:234 +#: netbox/extras/dashboard/widgets.py:234 msgid "Invalid format. URL parameters must be passed as a dictionary." msgstr "Ugyldigt format. URL-parametre skal sendes som en ordbog." -#: extras/dashboard/widgets.py:274 +#: netbox/extras/dashboard/widgets.py:274 msgid "RSS Feed" msgstr "RSS-feed" -#: extras/dashboard/widgets.py:279 +#: netbox/extras/dashboard/widgets.py:279 msgid "Embed an RSS feed from an external website." msgstr "Indlejr et RSS-feed fra en ekstern hjemmeside." -#: extras/dashboard/widgets.py:286 +#: netbox/extras/dashboard/widgets.py:286 msgid "Feed URL" msgstr "Foderwebadresse" -#: extras/dashboard/widgets.py:291 +#: netbox/extras/dashboard/widgets.py:291 msgid "The maximum number of objects to display" msgstr "Det maksimale antal objekter, der skal vises" -#: extras/dashboard/widgets.py:296 +#: netbox/extras/dashboard/widgets.py:296 msgid "How long to stored the cached content (in seconds)" msgstr "Hvor længe det cachelagrede indhold skal gemmes (i sekunder)" -#: extras/dashboard/widgets.py:348 templates/account/base.html:10 -#: templates/account/bookmarks.html:7 templates/inc/user_menu.html:48 +#: netbox/extras/dashboard/widgets.py:348 +#: netbox/templates/account/base.html:10 +#: netbox/templates/account/bookmarks.html:7 +#: netbox/templates/inc/user_menu.html:48 msgid "Bookmarks" msgstr "Bogmærker" -#: extras/dashboard/widgets.py:352 +#: netbox/extras/dashboard/widgets.py:352 msgid "Show your personal bookmarks" msgstr "Vis dine personlige bogmærker" -#: extras/events.py:147 +#: netbox/extras/events.py:147 #, python-brace-format msgid "Unknown action type for an event rule: {action_type}" msgstr "Ukendt handlingstype for en hændelsesregel: {action_type}" -#: extras/events.py:192 +#: netbox/extras/events.py:192 #, python-brace-format msgid "Cannot import events pipeline {name} error: {error}" msgstr "Kan ikke importere hændelsespipeline {name} fejl: {error}" -#: extras/filtersets.py:45 +#: netbox/extras/filtersets.py:45 msgid "Script module (ID)" msgstr "Script-modul (ID)" -#: extras/filtersets.py:254 extras/filtersets.py:637 extras/filtersets.py:665 +#: netbox/extras/filtersets.py:254 netbox/extras/filtersets.py:637 +#: netbox/extras/filtersets.py:665 msgid "Data file (ID)" msgstr "Datafil (ID)" -#: extras/filtersets.py:370 users/filtersets.py:68 users/filtersets.py:191 +#: netbox/extras/filtersets.py:370 netbox/users/filtersets.py:68 +#: netbox/users/filtersets.py:191 msgid "Group (name)" msgstr "Gruppe (navn)" -#: extras/filtersets.py:574 virtualization/forms/filtersets.py:118 +#: netbox/extras/filtersets.py:574 +#: netbox/virtualization/forms/filtersets.py:118 msgid "Cluster type" msgstr "Klyngetype" -#: extras/filtersets.py:580 virtualization/filtersets.py:95 -#: virtualization/filtersets.py:147 +#: netbox/extras/filtersets.py:580 netbox/virtualization/filtersets.py:95 +#: netbox/virtualization/filtersets.py:147 msgid "Cluster type (slug)" msgstr "Clustertype (slug)" -#: extras/filtersets.py:601 tenancy/forms/forms.py:16 -#: tenancy/forms/forms.py:39 +#: netbox/extras/filtersets.py:601 netbox/tenancy/forms/forms.py:16 +#: netbox/tenancy/forms/forms.py:39 msgid "Tenant group" msgstr "Lejergruppe" -#: extras/filtersets.py:607 tenancy/filtersets.py:188 -#: tenancy/filtersets.py:208 +#: netbox/extras/filtersets.py:607 netbox/tenancy/filtersets.py:188 +#: netbox/tenancy/filtersets.py:208 msgid "Tenant group (slug)" msgstr "Lejergruppe (slug)" -#: extras/filtersets.py:623 extras/forms/model_forms.py:495 -#: templates/extras/tag.html:11 +#: netbox/extras/filtersets.py:623 netbox/extras/forms/model_forms.py:495 +#: netbox/templates/extras/tag.html:11 msgid "Tag" msgstr "Mærke" -#: extras/filtersets.py:629 +#: netbox/extras/filtersets.py:629 msgid "Tag (slug)" msgstr "Tag (slug)" -#: extras/filtersets.py:689 extras/forms/filtersets.py:429 +#: netbox/extras/filtersets.py:689 netbox/extras/forms/filtersets.py:429 msgid "Has local config context data" msgstr "Har lokale konfigurationskontekstdata" -#: extras/forms/bulk_edit.py:35 extras/forms/filtersets.py:60 +#: netbox/extras/forms/bulk_edit.py:35 netbox/extras/forms/filtersets.py:60 msgid "Group name" msgstr "Gruppenavn" -#: extras/forms/bulk_edit.py:43 extras/forms/filtersets.py:68 -#: extras/tables/tables.py:65 templates/extras/customfield.html:38 -#: templates/generic/bulk_import.html:118 +#: netbox/extras/forms/bulk_edit.py:43 netbox/extras/forms/filtersets.py:68 +#: 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" -#: extras/forms/bulk_edit.py:48 extras/forms/filtersets.py:75 +#: netbox/extras/forms/bulk_edit.py:48 netbox/extras/forms/filtersets.py:75 msgid "Must be unique" msgstr "Skal være unik" -#: extras/forms/bulk_edit.py:61 extras/forms/bulk_import.py:60 -#: extras/forms/filtersets.py:89 extras/models/customfields.py:209 +#: netbox/extras/forms/bulk_edit.py:61 netbox/extras/forms/bulk_import.py:60 +#: netbox/extras/forms/filtersets.py:89 +#: netbox/extras/models/customfields.py:209 msgid "UI visible" msgstr "UI synlig" -#: extras/forms/bulk_edit.py:66 extras/forms/bulk_import.py:66 -#: extras/forms/filtersets.py:94 extras/models/customfields.py:216 +#: netbox/extras/forms/bulk_edit.py:66 netbox/extras/forms/bulk_import.py:66 +#: netbox/extras/forms/filtersets.py:94 +#: netbox/extras/models/customfields.py:216 msgid "UI editable" msgstr "Brugergrænseflade redigerbar" -#: extras/forms/bulk_edit.py:71 extras/forms/filtersets.py:97 +#: netbox/extras/forms/bulk_edit.py:71 netbox/extras/forms/filtersets.py:97 msgid "Is cloneable" msgstr "Kan klones" -#: extras/forms/bulk_edit.py:76 extras/forms/filtersets.py:104 +#: netbox/extras/forms/bulk_edit.py:76 netbox/extras/forms/filtersets.py:104 msgid "Minimum value" msgstr "Minimumsværdi" -#: extras/forms/bulk_edit.py:80 extras/forms/filtersets.py:108 +#: netbox/extras/forms/bulk_edit.py:80 netbox/extras/forms/filtersets.py:108 msgid "Maximum value" msgstr "Maksimal værdi" -#: extras/forms/bulk_edit.py:84 extras/forms/filtersets.py:112 +#: netbox/extras/forms/bulk_edit.py:84 netbox/extras/forms/filtersets.py:112 msgid "Validation regex" msgstr "Validering regex" -#: extras/forms/bulk_edit.py:91 extras/forms/filtersets.py:46 -#: extras/forms/model_forms.py:76 templates/extras/customfield.html:70 +#: netbox/extras/forms/bulk_edit.py:91 netbox/extras/forms/filtersets.py:46 +#: netbox/extras/forms/model_forms.py:76 +#: netbox/templates/extras/customfield.html:70 msgid "Behavior" msgstr "Adfærd" -#: extras/forms/bulk_edit.py:128 extras/forms/filtersets.py:149 +#: netbox/extras/forms/bulk_edit.py:128 netbox/extras/forms/filtersets.py:149 msgid "New window" msgstr "Nyt vindue" -#: extras/forms/bulk_edit.py:137 +#: netbox/extras/forms/bulk_edit.py:137 msgid "Button class" msgstr "Knapklasse" -#: extras/forms/bulk_edit.py:154 extras/forms/filtersets.py:187 -#: extras/models/models.py:409 +#: netbox/extras/forms/bulk_edit.py:154 netbox/extras/forms/filtersets.py:187 +#: netbox/extras/models/models.py:409 msgid "MIME type" msgstr "MIME-type" -#: extras/forms/bulk_edit.py:159 extras/forms/filtersets.py:190 +#: netbox/extras/forms/bulk_edit.py:159 netbox/extras/forms/filtersets.py:190 msgid "File extension" msgstr "Filudvidelse" -#: extras/forms/bulk_edit.py:164 extras/forms/filtersets.py:194 +#: netbox/extras/forms/bulk_edit.py:164 netbox/extras/forms/filtersets.py:194 msgid "As attachment" msgstr "Som vedhæftet fil" -#: extras/forms/bulk_edit.py:192 extras/forms/filtersets.py:236 -#: extras/tables/tables.py:256 templates/extras/savedfilter.html:29 +#: netbox/extras/forms/bulk_edit.py:192 netbox/extras/forms/filtersets.py:236 +#: netbox/extras/tables/tables.py:256 +#: netbox/templates/extras/savedfilter.html:29 msgid "Shared" msgstr "Delt" -#: extras/forms/bulk_edit.py:215 extras/forms/filtersets.py:265 -#: extras/models/models.py:174 +#: netbox/extras/forms/bulk_edit.py:215 netbox/extras/forms/filtersets.py:265 +#: netbox/extras/models/models.py:174 msgid "HTTP method" msgstr "HTTP-metode" -#: extras/forms/bulk_edit.py:219 extras/forms/filtersets.py:259 -#: templates/extras/webhook.html:30 +#: netbox/extras/forms/bulk_edit.py:219 netbox/extras/forms/filtersets.py:259 +#: netbox/templates/extras/webhook.html:30 msgid "Payload URL" msgstr "Nyttelast-URL" -#: extras/forms/bulk_edit.py:224 extras/models/models.py:214 +#: netbox/extras/forms/bulk_edit.py:224 netbox/extras/models/models.py:214 msgid "SSL verification" msgstr "SSL verifikation" -#: extras/forms/bulk_edit.py:227 templates/extras/webhook.html:38 +#: netbox/extras/forms/bulk_edit.py:227 +#: netbox/templates/extras/webhook.html:38 msgid "Secret" msgstr "Hemmelighed" -#: extras/forms/bulk_edit.py:232 +#: netbox/extras/forms/bulk_edit.py:232 msgid "CA file path" msgstr "CA-filsti" -#: extras/forms/bulk_edit.py:253 extras/forms/bulk_import.py:192 -#: extras/forms/model_forms.py:377 +#: netbox/extras/forms/bulk_edit.py:253 netbox/extras/forms/bulk_import.py:192 +#: netbox/extras/forms/model_forms.py:377 msgid "Event types" msgstr "Begivenhedstyper" -#: extras/forms/bulk_edit.py:293 +#: netbox/extras/forms/bulk_edit.py:293 msgid "Is active" msgstr "Er aktiv" -#: extras/forms/bulk_import.py:37 extras/forms/bulk_import.py:118 -#: extras/forms/bulk_import.py:139 extras/forms/bulk_import.py:162 -#: extras/forms/bulk_import.py:186 extras/forms/filtersets.py:137 -#: extras/forms/filtersets.py:224 extras/forms/model_forms.py:47 -#: extras/forms/model_forms.py:205 extras/forms/model_forms.py:237 -#: extras/forms/model_forms.py:278 extras/forms/model_forms.py:372 -#: extras/forms/model_forms.py:489 users/forms/model_forms.py:276 +#: netbox/extras/forms/bulk_import.py:37 +#: netbox/extras/forms/bulk_import.py:118 +#: 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/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/users/forms/model_forms.py:276 msgid "Object types" msgstr "Objekttyper" -#: extras/forms/bulk_import.py:39 extras/forms/bulk_import.py:120 -#: extras/forms/bulk_import.py:141 extras/forms/bulk_import.py:164 -#: extras/forms/bulk_import.py:188 tenancy/forms/bulk_import.py:96 +#: netbox/extras/forms/bulk_import.py:39 +#: netbox/extras/forms/bulk_import.py:120 +#: netbox/extras/forms/bulk_import.py:141 +#: netbox/extras/forms/bulk_import.py:164 +#: netbox/extras/forms/bulk_import.py:188 +#: netbox/tenancy/forms/bulk_import.py:96 msgid "One or more assigned object types" msgstr "En eller flere tildelte objekttyper" -#: extras/forms/bulk_import.py:44 +#: netbox/extras/forms/bulk_import.py:44 msgid "Field data type (e.g. text, integer, etc.)" msgstr "Feltdatatype (f.eks. tekst, heltal osv.)" -#: extras/forms/bulk_import.py:47 extras/forms/filtersets.py:208 -#: extras/forms/filtersets.py:281 extras/forms/model_forms.py:304 -#: extras/forms/model_forms.py:341 tenancy/forms/filtersets.py:92 +#: 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/tenancy/forms/filtersets.py:92 msgid "Object type" msgstr "Objekttype" -#: extras/forms/bulk_import.py:50 +#: netbox/extras/forms/bulk_import.py:50 msgid "Object type (for object or multi-object fields)" msgstr "Objekttype (for objekt- eller flerobjektfelter)" -#: extras/forms/bulk_import.py:53 extras/forms/filtersets.py:84 +#: netbox/extras/forms/bulk_import.py:53 netbox/extras/forms/filtersets.py:84 msgid "Choice set" msgstr "Valgsæt" -#: extras/forms/bulk_import.py:57 +#: netbox/extras/forms/bulk_import.py:57 msgid "Choice set (for selection fields)" msgstr "Valgsæt (til markeringsfelter)" -#: extras/forms/bulk_import.py:63 +#: netbox/extras/forms/bulk_import.py:63 msgid "Whether the custom field is displayed in the UI" msgstr "Om det brugerdefinerede felt vises i brugergrænsefladen" -#: extras/forms/bulk_import.py:69 +#: netbox/extras/forms/bulk_import.py:69 msgid "Whether the custom field is editable in the UI" msgstr "Om det brugerdefinerede felt kan redigeres i brugergrænsefladen" -#: extras/forms/bulk_import.py:85 +#: netbox/extras/forms/bulk_import.py:85 msgid "The base set of predefined choices to use (if any)" msgstr "Basissættet af foruddefinerede valg, der skal bruges (hvis nogen)" -#: extras/forms/bulk_import.py:91 +#: netbox/extras/forms/bulk_import.py:91 msgid "" "Quoted string of comma-separated field choices with optional labels " "separated by colon: \"choice1:First Choice,choice2:Second Choice\"" @@ -7177,184 +7739,200 @@ msgstr "" "Citeret streng med kommaseparerede feltvalg med valgfri etiketter adskilt af" " kolon: „Valg1:Første valg, valg2:andet valg“" -#: extras/forms/bulk_import.py:123 extras/models/models.py:323 +#: netbox/extras/forms/bulk_import.py:123 netbox/extras/models/models.py:323 msgid "button class" msgstr "knapklasse" -#: extras/forms/bulk_import.py:126 extras/models/models.py:327 +#: netbox/extras/forms/bulk_import.py:126 netbox/extras/models/models.py:327 msgid "" "The class of the first link in a group will be used for the dropdown button" msgstr "" "Klassen for det første link i en gruppe vil blive brugt til rullemenuen" -#: extras/forms/bulk_import.py:193 +#: netbox/extras/forms/bulk_import.py:193 msgid "The event type(s) which will trigger this rule" msgstr "Hændelsestype (r), der udløser denne regel" -#: extras/forms/bulk_import.py:196 +#: netbox/extras/forms/bulk_import.py:196 msgid "Action object" msgstr "Handlingsobjekt" -#: extras/forms/bulk_import.py:198 +#: netbox/extras/forms/bulk_import.py:198 msgid "Webhook name or script as dotted path module.Class" msgstr "Webhook-navn eller script som stiplet sti module.Class" -#: extras/forms/bulk_import.py:219 +#: netbox/extras/forms/bulk_import.py:219 #, python-brace-format msgid "Webhook {name} not found" msgstr "Webhook {name} ikke fundet" -#: extras/forms/bulk_import.py:228 +#: netbox/extras/forms/bulk_import.py:228 #, python-brace-format msgid "Script {name} not found" msgstr "Manuskript {name} ikke fundet" -#: extras/forms/bulk_import.py:244 +#: netbox/extras/forms/bulk_import.py:244 msgid "Assigned object type" msgstr "Tildelt objekttype" -#: extras/forms/bulk_import.py:249 +#: netbox/extras/forms/bulk_import.py:249 msgid "The classification of entry" msgstr "Klassificering af indrejse" -#: extras/forms/bulk_import.py:261 extras/forms/model_forms.py:320 -#: netbox/navigation/menu.py:390 templates/extras/notificationgroup.html:41 -#: templates/users/group.html:29 users/forms/model_forms.py:236 -#: users/forms/model_forms.py:248 users/forms/model_forms.py:300 -#: users/tables.py:102 +#: netbox/extras/forms/bulk_import.py:261 +#: netbox/extras/forms/model_forms.py:320 netbox/netbox/navigation/menu.py:390 +#: 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 +#: netbox/users/tables.py:102 msgid "Users" msgstr "Brugere" -#: extras/forms/bulk_import.py:265 +#: netbox/extras/forms/bulk_import.py:265 msgid "User names separated by commas, encased with double quotes" msgstr "Brugernavne adskilt af kommaer, indkapslet med dobbelte anførselstegn" -#: extras/forms/bulk_import.py:268 extras/forms/model_forms.py:315 -#: netbox/navigation/menu.py:410 templates/extras/notificationgroup.html:31 -#: users/forms/model_forms.py:181 users/forms/model_forms.py:193 -#: users/forms/model_forms.py:305 users/tables.py:35 users/tables.py:106 +#: netbox/extras/forms/bulk_import.py:268 +#: netbox/extras/forms/model_forms.py:315 netbox/netbox/navigation/menu.py:410 +#: 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 +#: netbox/users/tables.py:106 msgid "Groups" msgstr "Grupper" -#: extras/forms/bulk_import.py:272 +#: netbox/extras/forms/bulk_import.py:272 msgid "Group names separated by commas, encased with double quotes" msgstr "Gruppenavne adskilt af kommaer, indkapslet med dobbelte anførselstegn" -#: extras/forms/filtersets.py:52 extras/forms/model_forms.py:56 +#: netbox/extras/forms/filtersets.py:52 netbox/extras/forms/model_forms.py:56 msgid "Related object type" msgstr "Relateret objekttype" -#: extras/forms/filtersets.py:57 +#: netbox/extras/forms/filtersets.py:57 msgid "Field type" msgstr "Felttype" -#: extras/forms/filtersets.py:120 extras/forms/model_forms.py:157 -#: extras/tables/tables.py:91 templates/generic/bulk_import.html:154 +#: netbox/extras/forms/filtersets.py:120 +#: netbox/extras/forms/model_forms.py:157 netbox/extras/tables/tables.py:91 +#: netbox/templates/generic/bulk_import.html:154 msgid "Choices" msgstr "Valg" -#: extras/forms/filtersets.py:164 extras/forms/filtersets.py:319 -#: extras/forms/filtersets.py:408 extras/forms/model_forms.py:572 -#: templates/core/job.html:96 templates/extras/eventrule.html:84 +#: 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/templates/extras/eventrule.html:84 msgid "Data" msgstr "Data" -#: extras/forms/filtersets.py:175 extras/forms/filtersets.py:333 -#: extras/forms/filtersets.py:418 netbox/choices.py:130 -#: utilities/forms/bulk_import.py:26 +#: netbox/extras/forms/filtersets.py:175 netbox/extras/forms/filtersets.py:333 +#: netbox/extras/forms/filtersets.py:418 netbox/netbox/choices.py:130 +#: netbox/utilities/forms/bulk_import.py:26 msgid "Data file" msgstr "Datafiler" -#: extras/forms/filtersets.py:183 +#: netbox/extras/forms/filtersets.py:183 msgid "Content types" msgstr "Indholdstyper" -#: extras/forms/filtersets.py:255 extras/models/models.py:179 +#: netbox/extras/forms/filtersets.py:255 netbox/extras/models/models.py:179 msgid "HTTP content type" msgstr "HTTP-indholdstype" -#: extras/forms/filtersets.py:286 +#: netbox/extras/forms/filtersets.py:286 msgid "Event type" msgstr "Begivenhedstype" -#: extras/forms/filtersets.py:291 +#: netbox/extras/forms/filtersets.py:291 msgid "Action type" msgstr "Handlingstype" -#: extras/forms/filtersets.py:307 +#: netbox/extras/forms/filtersets.py:307 msgid "Tagged object type" msgstr "Tagget objekttype" -#: extras/forms/filtersets.py:312 +#: netbox/extras/forms/filtersets.py:312 msgid "Allowed object type" msgstr "Tilladt objekttype" -#: extras/forms/filtersets.py:341 extras/forms/model_forms.py:507 -#: netbox/navigation/menu.py:18 +#: netbox/extras/forms/filtersets.py:341 +#: netbox/extras/forms/model_forms.py:507 netbox/netbox/navigation/menu.py:18 msgid "Regions" msgstr "Regioner" -#: extras/forms/filtersets.py:346 extras/forms/model_forms.py:512 +#: netbox/extras/forms/filtersets.py:346 +#: netbox/extras/forms/model_forms.py:512 msgid "Site groups" msgstr "Områdegrupper" -#: extras/forms/filtersets.py:356 extras/forms/model_forms.py:522 -#: netbox/navigation/menu.py:20 templates/dcim/site.html:127 +#: netbox/extras/forms/filtersets.py:356 +#: netbox/extras/forms/model_forms.py:522 netbox/netbox/navigation/menu.py:20 +#: netbox/templates/dcim/site.html:127 msgid "Locations" msgstr "Steder" -#: extras/forms/filtersets.py:361 extras/forms/model_forms.py:527 +#: netbox/extras/forms/filtersets.py:361 +#: netbox/extras/forms/model_forms.py:527 msgid "Device types" msgstr "Enhedstyper" -#: extras/forms/filtersets.py:366 extras/forms/model_forms.py:532 +#: netbox/extras/forms/filtersets.py:366 +#: netbox/extras/forms/model_forms.py:532 msgid "Roles" msgstr "Roller" -#: extras/forms/filtersets.py:376 extras/forms/model_forms.py:542 +#: netbox/extras/forms/filtersets.py:376 +#: netbox/extras/forms/model_forms.py:542 msgid "Cluster types" msgstr "Klyngetyper" -#: extras/forms/filtersets.py:381 extras/forms/model_forms.py:547 +#: netbox/extras/forms/filtersets.py:381 +#: netbox/extras/forms/model_forms.py:547 msgid "Cluster groups" msgstr "Klyngegrupper" -#: extras/forms/filtersets.py:386 extras/forms/model_forms.py:552 -#: netbox/navigation/menu.py:255 netbox/navigation/menu.py:257 -#: templates/virtualization/clustertype.html:30 -#: virtualization/tables/clusters.py:23 virtualization/tables/clusters.py:45 +#: 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/templates/virtualization/clustertype.html:30 +#: netbox/virtualization/tables/clusters.py:23 +#: netbox/virtualization/tables/clusters.py:45 msgid "Clusters" msgstr "Klynger" -#: extras/forms/filtersets.py:391 extras/forms/model_forms.py:557 +#: netbox/extras/forms/filtersets.py:391 +#: netbox/extras/forms/model_forms.py:557 msgid "Tenant groups" msgstr "Lejergrupper" -#: extras/forms/model_forms.py:49 +#: netbox/extras/forms/model_forms.py:49 msgid "The type(s) of object that have this custom field" msgstr "Type (r) af objekt, der har dette brugerdefinerede felt" -#: extras/forms/model_forms.py:52 +#: netbox/extras/forms/model_forms.py:52 msgid "Default value" msgstr "Standardværdi" -#: extras/forms/model_forms.py:58 +#: netbox/extras/forms/model_forms.py:58 msgid "Type of the related object (for object/multi-object fields only)" msgstr "Type af det relaterede objekt (kun for objekt-/flerobjektfelter)" -#: extras/forms/model_forms.py:61 templates/extras/customfield.html:60 +#: netbox/extras/forms/model_forms.py:61 +#: netbox/templates/extras/customfield.html:60 msgid "Related object filter" msgstr "Relateret objektfilter" -#: extras/forms/model_forms.py:63 +#: netbox/extras/forms/model_forms.py:63 msgid "Specify query parameters as a JSON object." msgstr "Angiv forespørgselsparametre som et JSON-objekt." -#: extras/forms/model_forms.py:73 templates/extras/customfield.html:10 +#: netbox/extras/forms/model_forms.py:73 +#: netbox/templates/extras/customfield.html:10 msgid "Custom Field" msgstr "Brugerdefineret felt" -#: extras/forms/model_forms.py:85 +#: netbox/extras/forms/model_forms.py:85 msgid "" "The type of data stored in this field. For object/multi-object fields, " "select the related object type below." @@ -7362,18 +7940,18 @@ msgstr "" "Den type data, der er gemt i dette felt. For objekt/flerobjektfelter skal du" " vælge den relaterede objekttype nedenfor." -#: extras/forms/model_forms.py:88 +#: netbox/extras/forms/model_forms.py:88 msgid "" "This will be displayed as help text for the form field. Markdown is " "supported." msgstr "" "Dette vises som hjælpetekst til formularfeltet. Markdown understøttes." -#: extras/forms/model_forms.py:143 +#: netbox/extras/forms/model_forms.py:143 msgid "Related Object" msgstr "Relateret objekt" -#: extras/forms/model_forms.py:169 +#: netbox/extras/forms/model_forms.py:169 msgid "" "Enter one choice per line. An optional label may be specified for each " "choice by appending it with a colon. Example:" @@ -7381,15 +7959,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:" -#: extras/forms/model_forms.py:212 templates/extras/customlink.html:10 +#: netbox/extras/forms/model_forms.py:212 +#: netbox/templates/extras/customlink.html:10 msgid "Custom Link" msgstr "Brugerdefineret link" -#: extras/forms/model_forms.py:214 +#: netbox/extras/forms/model_forms.py:214 msgid "Templates" msgstr "Skabeloner" -#: extras/forms/model_forms.py:226 +#: netbox/extras/forms/model_forms.py:226 #, python-brace-format msgid "" "Jinja2 template code for the link text. Reference the object as {example}. " @@ -7398,60 +7977,66 @@ msgstr "" "Jinja2 skabelonkode til linkteksten. Henvis objektet som {example}. Links, " "der gengives som tom tekst, vises ikke." -#: extras/forms/model_forms.py:230 +#: netbox/extras/forms/model_forms.py:230 #, 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}." -#: extras/forms/model_forms.py:241 extras/forms/model_forms.py:624 +#: netbox/extras/forms/model_forms.py:241 +#: netbox/extras/forms/model_forms.py:624 msgid "Template code" msgstr "Skabelonkode" -#: extras/forms/model_forms.py:247 templates/extras/exporttemplate.html:12 +#: netbox/extras/forms/model_forms.py:247 +#: netbox/templates/extras/exporttemplate.html:12 msgid "Export Template" msgstr "Eksport skabelon" -#: extras/forms/model_forms.py:249 +#: netbox/extras/forms/model_forms.py:249 msgid "Rendering" msgstr "Gengivelse" -#: extras/forms/model_forms.py:263 extras/forms/model_forms.py:649 +#: netbox/extras/forms/model_forms.py:263 +#: netbox/extras/forms/model_forms.py:649 msgid "Template content is populated from the remote source selected below." msgstr "" "Skabelonindhold udfyldes fra den fjerntliggende kilde, der er valgt " "nedenfor." -#: extras/forms/model_forms.py:270 extras/forms/model_forms.py:656 +#: netbox/extras/forms/model_forms.py:270 +#: netbox/extras/forms/model_forms.py:656 msgid "Must specify either local content or a data file" msgstr "Skal angive enten lokalt indhold eller en datafil" -#: extras/forms/model_forms.py:284 netbox/forms/mixins.py:70 -#: templates/extras/savedfilter.html:10 +#: netbox/extras/forms/model_forms.py:284 netbox/netbox/forms/mixins.py:70 +#: netbox/templates/extras/savedfilter.html:10 msgid "Saved Filter" msgstr "Gemt filter" -#: extras/forms/model_forms.py:334 +#: netbox/extras/forms/model_forms.py:334 msgid "A notification group specify at least one user or group." msgstr "En meddelelsesgruppe angiver mindst én bruger eller gruppe." -#: extras/forms/model_forms.py:356 templates/extras/webhook.html:23 +#: netbox/extras/forms/model_forms.py:356 +#: netbox/templates/extras/webhook.html:23 msgid "HTTP Request" msgstr "HTTP-anmodning" -#: extras/forms/model_forms.py:358 templates/extras/webhook.html:44 +#: netbox/extras/forms/model_forms.py:358 +#: netbox/templates/extras/webhook.html:44 msgid "SSL" msgstr "SSL" -#: extras/forms/model_forms.py:380 +#: netbox/extras/forms/model_forms.py:380 msgid "Action choice" msgstr "Valg af handling" -#: extras/forms/model_forms.py:385 +#: netbox/extras/forms/model_forms.py:385 msgid "Enter conditions in JSON format." msgstr "Indtast betingelser i JSON formatere." -#: extras/forms/model_forms.py:389 +#: netbox/extras/forms/model_forms.py:389 msgid "" "Enter parameters to pass to the action in JSON format." @@ -7459,109 +8044,111 @@ msgstr "" "Indtast parametre, der skal overføres til handlingen i JSON formatere." -#: extras/forms/model_forms.py:394 templates/extras/eventrule.html:10 +#: netbox/extras/forms/model_forms.py:394 +#: netbox/templates/extras/eventrule.html:10 msgid "Event Rule" msgstr "Begivenhedsregel" -#: extras/forms/model_forms.py:395 +#: netbox/extras/forms/model_forms.py:395 msgid "Triggers" msgstr "Udløsere" -#: extras/forms/model_forms.py:442 +#: netbox/extras/forms/model_forms.py:442 msgid "Notification group" msgstr "Meddelelsesgruppe" -#: extras/forms/model_forms.py:562 netbox/navigation/menu.py:26 -#: tenancy/tables/tenants.py:22 +#: netbox/extras/forms/model_forms.py:562 netbox/netbox/navigation/menu.py:26 +#: netbox/tenancy/tables/tenants.py:22 msgid "Tenants" msgstr "Lejere" -#: extras/forms/model_forms.py:606 +#: netbox/extras/forms/model_forms.py:606 msgid "Data is populated from the remote source selected below." msgstr "Data udfyldes fra den fjerntliggende kilde, der er valgt nedenfor." -#: extras/forms/model_forms.py:612 +#: netbox/extras/forms/model_forms.py:612 msgid "Must specify either local data or a data file" msgstr "Skal angive enten lokale data eller en datafil" -#: extras/forms/model_forms.py:631 templates/core/datafile.html:55 +#: netbox/extras/forms/model_forms.py:631 +#: netbox/templates/core/datafile.html:55 msgid "Content" msgstr "Indhold" -#: extras/forms/reports.py:17 extras/forms/scripts.py:23 +#: netbox/extras/forms/reports.py:17 netbox/extras/forms/scripts.py:23 msgid "Schedule at" msgstr "Planlæg kl" -#: extras/forms/reports.py:18 +#: netbox/extras/forms/reports.py:18 msgid "Schedule execution of report to a set time" msgstr "Planlæg udførelse af rapport til et bestemt tidspunkt" -#: extras/forms/reports.py:23 extras/forms/scripts.py:29 +#: netbox/extras/forms/reports.py:23 netbox/extras/forms/scripts.py:29 msgid "Recurs every" msgstr "Gentager hver" -#: extras/forms/reports.py:27 +#: netbox/extras/forms/reports.py:27 msgid "Interval at which this report is re-run (in minutes)" msgstr "Interval, hvor denne rapport genkøres (i minutter)" -#: extras/forms/reports.py:35 extras/forms/scripts.py:41 +#: netbox/extras/forms/reports.py:35 netbox/extras/forms/scripts.py:41 #, python-brace-format msgid " (current time: {now})" msgstr " (Aktuel tid: {now})" -#: extras/forms/reports.py:45 extras/forms/scripts.py:51 +#: netbox/extras/forms/reports.py:45 netbox/extras/forms/scripts.py:51 msgid "Scheduled time must be in the future." msgstr "Planlagt tid skal være i fremtiden." -#: extras/forms/scripts.py:17 +#: netbox/extras/forms/scripts.py:17 msgid "Commit changes" msgstr "Foretag ændringer" -#: extras/forms/scripts.py:18 +#: netbox/extras/forms/scripts.py:18 msgid "Commit changes to the database (uncheck for a dry-run)" msgstr "Send ændringer i databasen (fjern markeringen for en tørkørsel)" -#: extras/forms/scripts.py:24 +#: netbox/extras/forms/scripts.py:24 msgid "Schedule execution of script to a set time" msgstr "Planlæg udførelse af script til et bestemt tidspunkt" -#: extras/forms/scripts.py:33 +#: netbox/extras/forms/scripts.py:33 msgid "Interval at which this script is re-run (in minutes)" msgstr "Interval, hvor scriptet køres igen (i minutter)" -#: extras/jobs.py:49 +#: netbox/extras/jobs.py:47 msgid "Database changes have been reverted automatically." msgstr "Databaseændringer er blevet tilbageført automatisk." -#: extras/jobs.py:55 +#: netbox/extras/jobs.py:53 msgid "Script aborted with error: " msgstr "Script afbrudt med fejl: " -#: extras/jobs.py:65 +#: netbox/extras/jobs.py:63 msgid "An exception occurred: " msgstr "Der opstod en undtagelse: " -#: extras/jobs.py:70 +#: netbox/extras/jobs.py:68 msgid "Database changes have been reverted due to error." msgstr "Databaseændringer er blevet tilbageført på grund af fejl." -#: extras/management/commands/reindex.py:66 +#: netbox/extras/management/commands/reindex.py:66 msgid "No indexers found!" msgstr "Ingen indekser fundet!" -#: extras/models/configs.py:130 +#: netbox/extras/models/configs.py:130 msgid "config context" msgstr "konfigurationskontekst" -#: extras/models/configs.py:131 +#: netbox/extras/models/configs.py:131 msgid "config contexts" msgstr "konfigurationskontekster" -#: extras/models/configs.py:149 extras/models/configs.py:205 +#: netbox/extras/models/configs.py:149 netbox/extras/models/configs.py:205 msgid "JSON data must be in object form. Example:" msgstr "JSON-data skal være i objektform. Eksempel:" -#: extras/models/configs.py:169 +#: netbox/extras/models/configs.py:169 msgid "" "Local config context data takes precedence over source contexts in the final" " rendered config context" @@ -7569,19 +8156,19 @@ msgstr "" "Lokale konfigurationskontekstdata har forrang frem for kildekontekster i den" " endelige gengivne konfigurationskontekst" -#: extras/models/configs.py:224 +#: netbox/extras/models/configs.py:224 msgid "template code" msgstr "skabelonkode" -#: extras/models/configs.py:225 +#: netbox/extras/models/configs.py:225 msgid "Jinja2 template code." msgstr "Jinja2 skabelonkode." -#: extras/models/configs.py:228 +#: netbox/extras/models/configs.py:228 msgid "environment parameters" msgstr "miljøparametre" -#: extras/models/configs.py:233 +#: netbox/extras/models/configs.py:233 msgid "" "Any additional" @@ -7591,41 +8178,41 @@ msgstr "" "href=\"https://jinja.palletsprojects.com/en/3.1.x/api/#jinja2.Environment\">yderligere" " parametre at passere, når man konstruerer Jinja2-miljøet." -#: extras/models/configs.py:240 +#: netbox/extras/models/configs.py:240 msgid "config template" msgstr "konfigurationsskabelon" -#: extras/models/configs.py:241 +#: netbox/extras/models/configs.py:241 msgid "config templates" msgstr "konfigurationsskabeloner" -#: extras/models/customfields.py:75 +#: netbox/extras/models/customfields.py:75 msgid "The object(s) to which this field applies." msgstr "Det eller de objekter, som dette felt gælder for." -#: extras/models/customfields.py:82 +#: netbox/extras/models/customfields.py:82 msgid "The type of data this custom field holds" msgstr "Den type data, som dette brugerdefinerede felt indeholder" -#: extras/models/customfields.py:89 +#: netbox/extras/models/customfields.py:89 msgid "The type of NetBox object this field maps to (for object fields)" msgstr "" "Typen af NetBox-objekt, som dette felt knytter sig til (for objektfelter)" -#: extras/models/customfields.py:95 +#: netbox/extras/models/customfields.py:95 msgid "Internal field name" msgstr "Internt feltnavn" -#: extras/models/customfields.py:99 +#: netbox/extras/models/customfields.py:99 msgid "Only alphanumeric characters and underscores are allowed." msgstr "Kun alfanumeriske tegn og understregninger er tilladt." -#: extras/models/customfields.py:104 +#: netbox/extras/models/customfields.py:104 msgid "Double underscores are not permitted in custom field names." msgstr "" "Dobbelte understregninger er ikke tilladt i brugerdefinerede feltnavne." -#: extras/models/customfields.py:115 +#: netbox/extras/models/customfields.py:115 msgid "" "Name of the field as displayed to users (if not provided, 'the field's name " "will be used)" @@ -7633,19 +8220,19 @@ msgstr "" "Navnet på feltet som vist for brugerne (hvis det ikke er angivet, vil " "'feltets navn blive brugt)" -#: extras/models/customfields.py:119 extras/models/models.py:317 +#: netbox/extras/models/customfields.py:119 netbox/extras/models/models.py:317 msgid "group name" msgstr "Gruppenavn" -#: extras/models/customfields.py:122 +#: netbox/extras/models/customfields.py:122 msgid "Custom fields within the same group will be displayed together" msgstr "Brugerdefinerede felter inden for samme gruppe vises sammen" -#: extras/models/customfields.py:130 +#: netbox/extras/models/customfields.py:130 msgid "required" msgstr "påkrævet" -#: extras/models/customfields.py:132 +#: netbox/extras/models/customfields.py:132 msgid "" "This field is required when creating new objects or editing an existing " "object." @@ -7653,19 +8240,19 @@ msgstr "" "Dette felt er påkrævet, når du opretter nye objekter eller redigerer et " "eksisterende objekt." -#: extras/models/customfields.py:135 +#: netbox/extras/models/customfields.py:135 msgid "must be unique" msgstr "skal være unik" -#: extras/models/customfields.py:137 +#: netbox/extras/models/customfields.py:137 msgid "The value of this field must be unique for the assigned object" msgstr "Værdien af dette felt skal være unik for det tildelte objekt" -#: extras/models/customfields.py:140 +#: netbox/extras/models/customfields.py:140 msgid "search weight" msgstr "søgevægt" -#: extras/models/customfields.py:143 +#: netbox/extras/models/customfields.py:143 msgid "" "Weighting for search. Lower values are considered more important. Fields " "with a search weight of zero will be ignored." @@ -7673,11 +8260,11 @@ msgstr "" "Vægtning til søgning. Lavere værdier betragtes som vigtigere. Felter med en " "søgevægt på nul ignoreres." -#: extras/models/customfields.py:148 +#: netbox/extras/models/customfields.py:148 msgid "filter logic" msgstr "filterlogik" -#: extras/models/customfields.py:152 +#: netbox/extras/models/customfields.py:152 msgid "" "Loose matches any instance of a given string; exact matches the entire " "field." @@ -7685,11 +8272,11 @@ msgstr "" "Loose matcher enhver forekomst af en given streng; nøjagtigt matcher hele " "feltet." -#: extras/models/customfields.py:155 +#: netbox/extras/models/customfields.py:155 msgid "default" msgstr "standard" -#: extras/models/customfields.py:159 +#: netbox/extras/models/customfields.py:159 msgid "" "Default value for the field (must be a JSON value). Encapsulate strings with" " double quotes (e.g. \"Foo\")." @@ -7697,7 +8284,7 @@ msgstr "" "Standardværdi for feltet (skal være en JSON-værdi). Indkapsle strenge med " "dobbelte anførselstegn (f.eks. „Foo“)." -#: extras/models/customfields.py:166 +#: netbox/extras/models/customfields.py:166 msgid "" "Filter the object selection choices using a query_params dict (must be a " "JSON value).Encapsulate strings with double quotes (e.g. \"Foo\")." @@ -7705,35 +8292,35 @@ msgstr "" "Filtrer objektvalg ved hjælp af en query_params-dict (skal være en JSON-" "værdi) .Indkapsle strenge med dobbelte anførselstegn (f.eks. „Foo“)." -#: extras/models/customfields.py:172 +#: netbox/extras/models/customfields.py:172 msgid "display weight" msgstr "displayvægt" -#: extras/models/customfields.py:173 +#: netbox/extras/models/customfields.py:173 msgid "Fields with higher weights appear lower in a form." msgstr "Felter med højere vægte vises lavere i en formular." -#: extras/models/customfields.py:178 +#: netbox/extras/models/customfields.py:178 msgid "minimum value" msgstr "minimumsværdi" -#: extras/models/customfields.py:179 +#: netbox/extras/models/customfields.py:179 msgid "Minimum allowed value (for numeric fields)" msgstr "Mindste tilladte værdi (for numeriske felter)" -#: extras/models/customfields.py:184 +#: netbox/extras/models/customfields.py:184 msgid "maximum value" msgstr "maksimal værdi" -#: extras/models/customfields.py:185 +#: netbox/extras/models/customfields.py:185 msgid "Maximum allowed value (for numeric fields)" msgstr "Maksimal tilladt værdi (for numeriske felter)" -#: extras/models/customfields.py:191 +#: netbox/extras/models/customfields.py:191 msgid "validation regex" msgstr "validering regex" -#: extras/models/customfields.py:193 +#: netbox/extras/models/customfields.py:193 #, python-brace-format msgid "" "Regular expression to enforce on text field values. Use ^ and $ to force " @@ -7744,189 +8331,191 @@ msgstr "" "tvinge matchning af hele strengen. For eksempel ^ [A-Z]{3}$ vil" " begrænse værdierne til nøjagtigt tre store bogstaver." -#: extras/models/customfields.py:201 +#: netbox/extras/models/customfields.py:201 msgid "choice set" msgstr "valgsæt" -#: extras/models/customfields.py:210 +#: netbox/extras/models/customfields.py:210 msgid "Specifies whether the custom field is displayed in the UI" msgstr "Angiver, om det brugerdefinerede felt vises i brugergrænsefladen" -#: extras/models/customfields.py:217 +#: netbox/extras/models/customfields.py:217 msgid "Specifies whether the custom field value can be edited in the UI" msgstr "" "Angiver, om den brugerdefinerede feltværdi kan redigeres i " "brugergrænsefladen" -#: extras/models/customfields.py:221 +#: netbox/extras/models/customfields.py:221 msgid "is cloneable" msgstr "kan klones" -#: extras/models/customfields.py:222 +#: netbox/extras/models/customfields.py:222 msgid "Replicate this value when cloning objects" msgstr "Repliker denne værdi ved kloning af objekter" -#: extras/models/customfields.py:239 +#: netbox/extras/models/customfields.py:239 msgid "custom field" msgstr "brugerdefineret felt" -#: extras/models/customfields.py:240 +#: netbox/extras/models/customfields.py:240 msgid "custom fields" msgstr "brugerdefinerede felter" -#: extras/models/customfields.py:329 +#: netbox/extras/models/customfields.py:329 #, python-brace-format msgid "Invalid default value \"{value}\": {error}" msgstr "Ugyldig standardværdi“{value}„: {error}" -#: extras/models/customfields.py:336 +#: netbox/extras/models/customfields.py:336 msgid "A minimum value may be set only for numeric fields" msgstr "En minimumsværdi kan kun indstilles for numeriske felter" -#: extras/models/customfields.py:338 +#: netbox/extras/models/customfields.py:338 msgid "A maximum value may be set only for numeric fields" msgstr "En maksimumsværdi kan kun indstilles for numeriske felter" -#: extras/models/customfields.py:348 +#: netbox/extras/models/customfields.py:348 msgid "" "Regular expression validation is supported only for text and URL fields" msgstr "" "Validering af regulære udtryk understøttes kun for tekst- og URL-felter" -#: extras/models/customfields.py:354 +#: netbox/extras/models/customfields.py:354 msgid "Uniqueness cannot be enforced for boolean fields" msgstr "Unikhed kan ikke håndhæves for boolske felter" -#: extras/models/customfields.py:364 +#: netbox/extras/models/customfields.py:364 msgid "Selection fields must specify a set of choices." msgstr "Markeringsfelter skal angive et sæt valgmuligheder." -#: extras/models/customfields.py:368 +#: netbox/extras/models/customfields.py:368 msgid "Choices may be set only on selection fields." msgstr "Valg kan kun indstilles i markeringsfelter." -#: extras/models/customfields.py:375 +#: netbox/extras/models/customfields.py:375 msgid "Object fields must define an object type." msgstr "Objektfelter skal definere en objekttype." -#: extras/models/customfields.py:379 +#: netbox/extras/models/customfields.py:379 #, python-brace-format msgid "{type} fields may not define an object type." msgstr "{type} felter definerer muligvis ikke en objekttype." -#: extras/models/customfields.py:386 +#: netbox/extras/models/customfields.py:386 msgid "A related object filter can be defined only for object fields." msgstr "Et relateret objektfilter kan kun defineres for objektfelter." -#: extras/models/customfields.py:390 +#: netbox/extras/models/customfields.py:390 msgid "Filter must be defined as a dictionary mapping attributes to values." msgstr "" "Filter skal defineres som en ordbog, der knytter attributter til værdier." -#: extras/models/customfields.py:469 +#: netbox/extras/models/customfields.py:469 msgid "True" msgstr "Sandt" -#: extras/models/customfields.py:470 +#: netbox/extras/models/customfields.py:470 msgid "False" msgstr "Falsk" -#: extras/models/customfields.py:560 +#: netbox/extras/models/customfields.py:560 #, python-brace-format msgid "Values must match this regex: {regex}" msgstr "Værdier skal matche denne regex: {regex}" -#: extras/models/customfields.py:654 +#: netbox/extras/models/customfields.py:654 msgid "Value must be a string." msgstr "Værdien skal være en streng." -#: extras/models/customfields.py:656 +#: netbox/extras/models/customfields.py:656 #, python-brace-format msgid "Value must match regex '{regex}'" msgstr "Værdien skal matche regex '{regex}'" -#: extras/models/customfields.py:661 +#: netbox/extras/models/customfields.py:661 msgid "Value must be an integer." msgstr "Værdien skal være et heltal." -#: extras/models/customfields.py:664 extras/models/customfields.py:679 +#: netbox/extras/models/customfields.py:664 +#: netbox/extras/models/customfields.py:679 #, python-brace-format msgid "Value must be at least {minimum}" msgstr "Værdien skal være mindst {minimum}" -#: extras/models/customfields.py:668 extras/models/customfields.py:683 +#: netbox/extras/models/customfields.py:668 +#: netbox/extras/models/customfields.py:683 #, python-brace-format msgid "Value must not exceed {maximum}" msgstr "Værdien må ikke overstige {maximum}" -#: extras/models/customfields.py:676 +#: netbox/extras/models/customfields.py:676 msgid "Value must be a decimal." msgstr "Værdien skal være en decimal." -#: extras/models/customfields.py:688 +#: netbox/extras/models/customfields.py:688 msgid "Value must be true or false." msgstr "Værdien skal være sand eller falsk." -#: extras/models/customfields.py:696 +#: netbox/extras/models/customfields.py:696 msgid "Date values must be in ISO 8601 format (YYYY-MM-DD)." msgstr "Datoværdierne skal være i ISO 8601-format (ÅÅÅÅ-MM-DD)." -#: extras/models/customfields.py:705 +#: netbox/extras/models/customfields.py:705 msgid "Date and time values must be in ISO 8601 format (YYYY-MM-DD HH:MM:SS)." msgstr "" "Dato- og klokkeslætsværdierne skal være i ISO 8601-format (ÅÅÅÅÅ-MM-DD " "HH:MM:SS)." -#: extras/models/customfields.py:712 +#: netbox/extras/models/customfields.py:712 #, python-brace-format msgid "Invalid choice ({value}) for choice set {choiceset}." msgstr "Ugyldigt valg ({value}) til valgsæt {choiceset}." -#: extras/models/customfields.py:722 +#: netbox/extras/models/customfields.py:722 #, python-brace-format msgid "Invalid choice(s) ({value}) for choice set {choiceset}." msgstr "Ugyldige valg (er) ({value}) til valgsæt {choiceset}." -#: extras/models/customfields.py:731 +#: netbox/extras/models/customfields.py:731 #, python-brace-format msgid "Value must be an object ID, not {type}" msgstr "Værdien skal være et objekt-id, ikke {type}" -#: extras/models/customfields.py:737 +#: netbox/extras/models/customfields.py:737 #, python-brace-format msgid "Value must be a list of object IDs, not {type}" msgstr "Værdien skal være en liste over objekt-id'er, ikke {type}" -#: extras/models/customfields.py:741 +#: netbox/extras/models/customfields.py:741 #, python-brace-format msgid "Found invalid object ID: {id}" msgstr "Fundet ugyldigt objekt-id: {id}" -#: extras/models/customfields.py:744 +#: netbox/extras/models/customfields.py:744 msgid "Required field cannot be empty." msgstr "Obligatorisk felt kan ikke være tomt." -#: extras/models/customfields.py:763 +#: netbox/extras/models/customfields.py:763 msgid "Base set of predefined choices (optional)" msgstr "Basisæt af foruddefinerede valg (valgfrit)" -#: extras/models/customfields.py:775 +#: netbox/extras/models/customfields.py:775 msgid "Choices are automatically ordered alphabetically" msgstr "Valg sorteres automatisk alfabetisk" -#: extras/models/customfields.py:782 +#: netbox/extras/models/customfields.py:782 msgid "custom field choice set" msgstr "brugerdefineret felt valgsæt" -#: extras/models/customfields.py:783 +#: netbox/extras/models/customfields.py:783 msgid "custom field choice sets" msgstr "brugerdefinerede feltvalgssæt" -#: extras/models/customfields.py:825 +#: netbox/extras/models/customfields.py:825 msgid "Must define base or extra choices." msgstr "Skal definere base eller ekstra valg." -#: extras/models/customfields.py:849 +#: netbox/extras/models/customfields.py:849 #, python-brace-format msgid "" "Cannot remove choice {choice} as there are {model} objects which reference " @@ -7935,61 +8524,61 @@ msgstr "" "Kan ikke fjerne valg {choice} som der er {model} objekter, der henviser til " "det." -#: extras/models/dashboard.py:18 +#: netbox/extras/models/dashboard.py:18 msgid "layout" msgstr "layout" -#: extras/models/dashboard.py:22 +#: netbox/extras/models/dashboard.py:22 msgid "config" msgstr "config" -#: extras/models/dashboard.py:27 +#: netbox/extras/models/dashboard.py:27 msgid "dashboard" msgstr "dashboard" -#: extras/models/dashboard.py:28 +#: netbox/extras/models/dashboard.py:28 msgid "dashboards" msgstr "dashboards" -#: extras/models/models.py:52 +#: netbox/extras/models/models.py:52 msgid "object types" msgstr "objekttyper" -#: extras/models/models.py:53 +#: netbox/extras/models/models.py:53 msgid "The object(s) to which this rule applies." msgstr "Det eller de objekter, som denne regel gælder for." -#: extras/models/models.py:67 +#: netbox/extras/models/models.py:67 msgid "The types of event which will trigger this rule." msgstr "De typer af begivenheder, der udløser denne regel." -#: extras/models/models.py:74 +#: netbox/extras/models/models.py:74 msgid "conditions" msgstr "betingelser" -#: extras/models/models.py:77 +#: netbox/extras/models/models.py:77 msgid "" "A set of conditions which determine whether the event will be generated." msgstr "" "Et sæt betingelser, der bestemmer, om begivenheden vil blive genereret." -#: extras/models/models.py:85 +#: netbox/extras/models/models.py:85 msgid "action type" msgstr "handlingstype" -#: extras/models/models.py:104 +#: netbox/extras/models/models.py:104 msgid "Additional data to pass to the action object" msgstr "Yderligere data, der skal videregives til handlingsobjektet" -#: extras/models/models.py:116 +#: netbox/extras/models/models.py:116 msgid "event rule" msgstr "hændelsesregel" -#: extras/models/models.py:117 +#: netbox/extras/models/models.py:117 msgid "event rules" msgstr "begivenhedsregler" -#: extras/models/models.py:166 +#: netbox/extras/models/models.py:166 msgid "" "This URL will be called using the HTTP method defined when the webhook is " "called. Jinja2 template processing is supported with the same context as the" @@ -7999,7 +8588,7 @@ msgstr "" "webhooken kaldes. Jinja2-skabelonbehandling understøttes med samme kontekst " "som anmodningsorganet." -#: extras/models/models.py:181 +#: netbox/extras/models/models.py:181 msgid "" "The complete list of official content types is available her." -#: extras/models/models.py:186 +#: netbox/extras/models/models.py:186 msgid "additional headers" msgstr "yderligere overskrifter" -#: extras/models/models.py:189 +#: netbox/extras/models/models.py:189 msgid "" "User-supplied HTTP headers to be sent with the request in addition to the " "HTTP content type. Headers should be defined in the format Name: " @@ -8025,11 +8614,11 @@ msgstr "" "Værdi. Jinja2-skabelonbehandling understøttes med samme kontekst som " "anmodningsorganet (nedenfor)." -#: extras/models/models.py:195 +#: netbox/extras/models/models.py:195 msgid "body template" msgstr "kropsskabelon" -#: extras/models/models.py:198 +#: netbox/extras/models/models.py:198 msgid "" "Jinja2 template for a custom request body. If blank, a JSON object " "representing the change will be included. Available context data includes: " @@ -8042,11 +8631,11 @@ msgstr "" "tidsstempel, brugernavn, forespørgsels-" "id, og data." -#: extras/models/models.py:204 +#: netbox/extras/models/models.py:204 msgid "secret" msgstr "hemmelighed" -#: extras/models/models.py:208 +#: netbox/extras/models/models.py:208 msgid "" "When provided, the request will include a X-Hook-Signature " "header containing a HMAC hex digest of the payload body using the secret as " @@ -8057,15 +8646,15 @@ msgstr "" "nyttelastkroppen ved hjælp af hemmeligheden som nøgle. Hemmeligheden " "overføres ikke i anmodningen." -#: extras/models/models.py:215 +#: netbox/extras/models/models.py:215 msgid "Enable SSL certificate verification. Disable with caution!" msgstr "Aktivér SSL-certifikatbekræftelse. Deaktiver med forsigtighed!" -#: extras/models/models.py:221 templates/extras/webhook.html:51 +#: netbox/extras/models/models.py:221 netbox/templates/extras/webhook.html:51 msgid "CA File Path" msgstr "CA-filsti" -#: extras/models/models.py:223 +#: netbox/extras/models/models.py:223 msgid "" "The specific CA certificate file to use for SSL verification. Leave blank to" " use the system defaults." @@ -8073,63 +8662,63 @@ msgstr "" "Den specifikke CA-certifikatfil, der skal bruges til SSL-bekræftelse. Lad " "det være tomt for at bruge systemstandardindstillingerne." -#: extras/models/models.py:234 +#: netbox/extras/models/models.py:234 msgid "webhook" msgstr "webhook" -#: extras/models/models.py:235 +#: netbox/extras/models/models.py:235 msgid "webhooks" msgstr "webhooks" -#: extras/models/models.py:253 +#: netbox/extras/models/models.py:253 msgid "Do not specify a CA certificate file if SSL verification is disabled." msgstr "Angiv ikke en CA-certifikatfil, hvis SSL-bekræftelse er deaktiveret." -#: extras/models/models.py:293 +#: netbox/extras/models/models.py:293 msgid "The object type(s) to which this link applies." msgstr "Den eller de objekttyper, som dette link gælder for." -#: extras/models/models.py:305 +#: netbox/extras/models/models.py:305 msgid "link text" msgstr "linktekst" -#: extras/models/models.py:306 +#: netbox/extras/models/models.py:306 msgid "Jinja2 template code for link text" msgstr "Jinja2 skabelonkode til linktekst" -#: extras/models/models.py:309 +#: netbox/extras/models/models.py:309 msgid "link URL" msgstr "Link-URL" -#: extras/models/models.py:310 +#: netbox/extras/models/models.py:310 msgid "Jinja2 template code for link URL" msgstr "Jinja2 skabelonkode til link URL" -#: extras/models/models.py:320 +#: netbox/extras/models/models.py:320 msgid "Links with the same group will appear as a dropdown menu" msgstr "Links med den samme gruppe vises som en rullemenu" -#: extras/models/models.py:330 +#: netbox/extras/models/models.py:330 msgid "new window" msgstr "nyt vindue" -#: extras/models/models.py:332 +#: netbox/extras/models/models.py:332 msgid "Force link to open in a new window" msgstr "Tving link til at åbne i et nyt vindue" -#: extras/models/models.py:341 +#: netbox/extras/models/models.py:341 msgid "custom link" msgstr "brugerdefineret link" -#: extras/models/models.py:342 +#: netbox/extras/models/models.py:342 msgid "custom links" msgstr "brugerdefinerede links" -#: extras/models/models.py:389 +#: netbox/extras/models/models.py:389 msgid "The object type(s) to which this template applies." msgstr "Den eller de objekttyper, som denne skabelon gælder for." -#: extras/models/models.py:402 +#: netbox/extras/models/models.py:402 msgid "" "Jinja2 template code. The list of objects being exported is passed as a " "context variable named queryset." @@ -8137,1079 +8726,1145 @@ msgstr "" "Jinja2 skabelonkode. Listen over objekter, der eksporteres, sendes som en " "kontekstvariabel med navnet Queryset." -#: extras/models/models.py:410 +#: netbox/extras/models/models.py:410 msgid "Defaults to text/plain; charset=utf-8" msgstr "Standard til tekst/almindelig; tegnsæt = utf-8" -#: extras/models/models.py:413 +#: netbox/extras/models/models.py:413 msgid "file extension" msgstr "filtypenavn" -#: extras/models/models.py:416 +#: netbox/extras/models/models.py:416 msgid "Extension to append to the rendered filename" msgstr "Udvidelse, der skal tilføjes til det gengivne filnavn" -#: extras/models/models.py:419 +#: netbox/extras/models/models.py:419 msgid "as attachment" msgstr "som vedhæftet fil" -#: extras/models/models.py:421 +#: netbox/extras/models/models.py:421 msgid "Download file as attachment" msgstr "Download fil som vedhæftet fil" -#: extras/models/models.py:430 +#: netbox/extras/models/models.py:430 msgid "export template" msgstr "eksport skabelon" -#: extras/models/models.py:431 +#: netbox/extras/models/models.py:431 msgid "export templates" msgstr "eksport skabeloner" -#: extras/models/models.py:448 +#: netbox/extras/models/models.py:448 #, python-brace-format msgid "\"{name}\" is a reserved name. Please choose a different name." msgstr "„{name}„Det er et reserveret navn. Vælg et andet navn." -#: extras/models/models.py:498 +#: netbox/extras/models/models.py:498 msgid "The object type(s) to which this filter applies." msgstr "Den eller de objekttyper, som dette filter gælder for." -#: extras/models/models.py:530 +#: netbox/extras/models/models.py:530 msgid "shared" msgstr "delt" -#: extras/models/models.py:543 +#: netbox/extras/models/models.py:543 msgid "saved filter" msgstr "gemt filter" -#: extras/models/models.py:544 +#: netbox/extras/models/models.py:544 msgid "saved filters" msgstr "gemte filtre" -#: extras/models/models.py:562 +#: netbox/extras/models/models.py:562 msgid "Filter parameters must be stored as a dictionary of keyword arguments." msgstr "Filterparametre skal gemmes som en ordbog med søgeordsargumenter." -#: extras/models/models.py:590 +#: netbox/extras/models/models.py:590 msgid "image height" msgstr "billedets højde" -#: extras/models/models.py:593 +#: netbox/extras/models/models.py:593 msgid "image width" msgstr "billedbredde" -#: extras/models/models.py:610 +#: netbox/extras/models/models.py:610 msgid "image attachment" msgstr "billed vedhæftet fil" -#: extras/models/models.py:611 +#: netbox/extras/models/models.py:611 msgid "image attachments" msgstr "billed vedhæftede filer" -#: extras/models/models.py:625 +#: netbox/extras/models/models.py:625 #, python-brace-format msgid "Image attachments cannot be assigned to this object type ({type})." msgstr "Billedvedhæftede filer kan ikke tildeles denne objekttype ({type})." -#: extras/models/models.py:688 +#: netbox/extras/models/models.py:688 msgid "kind" msgstr "venlig" -#: extras/models/models.py:702 +#: netbox/extras/models/models.py:702 msgid "journal entry" msgstr "journalindtastning" -#: extras/models/models.py:703 +#: netbox/extras/models/models.py:703 msgid "journal entries" msgstr "journalposter" -#: extras/models/models.py:718 +#: netbox/extras/models/models.py:718 #, python-brace-format msgid "Journaling is not supported for this object type ({type})." msgstr "Journalføring understøttes ikke for denne objekttype ({type})." -#: extras/models/models.py:760 +#: netbox/extras/models/models.py:760 msgid "bookmark" msgstr "bogmærke" -#: extras/models/models.py:761 +#: netbox/extras/models/models.py:761 msgid "bookmarks" msgstr "bogmærker" -#: extras/models/models.py:774 +#: netbox/extras/models/models.py:774 #, python-brace-format msgid "Bookmarks cannot be assigned to this object type ({type})." msgstr "Bogmærker kan ikke tildeles denne objekttype ({type})." -#: extras/models/notifications.py:43 +#: netbox/extras/models/notifications.py:43 msgid "read" msgstr "læse" -#: extras/models/notifications.py:66 +#: netbox/extras/models/notifications.py:66 msgid "event" msgstr "event" -#: extras/models/notifications.py:84 +#: netbox/extras/models/notifications.py:84 msgid "notification" msgstr "anmeldelse" -#: extras/models/notifications.py:85 +#: netbox/extras/models/notifications.py:85 msgid "notifications" msgstr "notifikationer" -#: extras/models/notifications.py:99 extras/models/notifications.py:234 +#: netbox/extras/models/notifications.py:99 +#: netbox/extras/models/notifications.py:234 #, python-brace-format msgid "Objects of this type ({type}) do not support notifications." msgstr "Objekter af denne type ({type}) understøtter ikke underretninger." -#: extras/models/notifications.py:137 users/models/users.py:58 -#: users/models/users.py:77 +#: netbox/extras/models/notifications.py:137 netbox/users/models/users.py:58 +#: netbox/users/models/users.py:77 msgid "groups" msgstr "grupperer" -#: extras/models/notifications.py:143 users/models/users.py:93 +#: netbox/extras/models/notifications.py:143 netbox/users/models/users.py:93 msgid "users" msgstr "brugere" -#: extras/models/notifications.py:152 +#: netbox/extras/models/notifications.py:152 msgid "notification group" msgstr "meddelelsesgruppe" -#: extras/models/notifications.py:153 +#: netbox/extras/models/notifications.py:153 msgid "notification groups" msgstr "meddelelsesgrupper" -#: extras/models/notifications.py:217 +#: netbox/extras/models/notifications.py:217 msgid "subscription" msgstr "abonnement" -#: extras/models/notifications.py:218 +#: netbox/extras/models/notifications.py:218 msgid "subscriptions" msgstr "abonnementer" -#: extras/models/scripts.py:42 +#: netbox/extras/models/scripts.py:42 msgid "is executable" msgstr "er eksekverbar" -#: extras/models/scripts.py:64 +#: netbox/extras/models/scripts.py:64 msgid "script" msgstr "manuskriptet" -#: extras/models/scripts.py:65 +#: netbox/extras/models/scripts.py:65 msgid "scripts" msgstr "manuskripter" -#: extras/models/scripts.py:111 +#: netbox/extras/models/scripts.py:111 msgid "script module" msgstr "script-modul" -#: extras/models/scripts.py:112 +#: netbox/extras/models/scripts.py:112 msgid "script modules" msgstr "script-moduler" -#: extras/models/search.py:22 +#: netbox/extras/models/search.py:22 msgid "timestamp" msgstr "tidsstempel" -#: extras/models/search.py:37 +#: netbox/extras/models/search.py:37 msgid "field" msgstr "mark" -#: extras/models/search.py:45 +#: netbox/extras/models/search.py:45 msgid "value" msgstr "værdsætte" -#: extras/models/search.py:56 +#: netbox/extras/models/search.py:56 msgid "cached value" msgstr "cachelagret værdi" -#: extras/models/search.py:57 +#: netbox/extras/models/search.py:57 msgid "cached values" msgstr "cachelagrede værdier" -#: extras/models/staging.py:44 +#: netbox/extras/models/staging.py:44 msgid "branch" msgstr "gren" -#: extras/models/staging.py:45 +#: netbox/extras/models/staging.py:45 msgid "branches" msgstr "grene" -#: extras/models/staging.py:97 +#: netbox/extras/models/staging.py:97 msgid "staged change" msgstr "iscenesat ændring" -#: extras/models/staging.py:98 +#: netbox/extras/models/staging.py:98 msgid "staged changes" msgstr "iscenesatte ændringer" -#: extras/models/tags.py:40 +#: netbox/extras/models/tags.py:40 msgid "The object type(s) to which this tag can be applied." msgstr "Den eller de objekttyper, som dette mærke kan anvendes på." -#: extras/models/tags.py:49 +#: netbox/extras/models/tags.py:49 msgid "tag" msgstr "mærke" -#: extras/models/tags.py:50 +#: netbox/extras/models/tags.py:50 msgid "tags" msgstr "tagger" -#: extras/models/tags.py:78 +#: netbox/extras/models/tags.py:78 msgid "tagged item" msgstr "tagget vare" -#: extras/models/tags.py:79 +#: netbox/extras/models/tags.py:79 msgid "tagged items" msgstr "mærkede varer" -#: extras/scripts.py:429 +#: netbox/extras/scripts.py:429 msgid "Script Data" msgstr "Scriptdata" -#: extras/scripts.py:433 +#: netbox/extras/scripts.py:433 msgid "Script Execution Parameters" msgstr "Parametre for udførelse af script" -#: extras/tables/columns.py:12 templates/htmx/notifications.html:18 +#: netbox/extras/tables/columns.py:12 +#: netbox/templates/htmx/notifications.html:18 msgid "Dismiss" msgstr "Afvis" -#: extras/tables/tables.py:62 extras/tables/tables.py:159 -#: extras/tables/tables.py:184 extras/tables/tables.py:250 -#: extras/tables/tables.py:276 extras/tables/tables.py:412 -#: extras/tables/tables.py:446 templates/extras/customfield.html:105 -#: templates/extras/eventrule.html:27 templates/users/objectpermission.html:64 -#: users/tables.py:80 +#: netbox/extras/tables/tables.py:62 netbox/extras/tables/tables.py:159 +#: netbox/extras/tables/tables.py:184 netbox/extras/tables/tables.py:250 +#: netbox/extras/tables/tables.py:276 netbox/extras/tables/tables.py:412 +#: netbox/extras/tables/tables.py:446 +#: netbox/templates/extras/customfield.html:105 +#: netbox/templates/extras/eventrule.html:27 +#: netbox/templates/users/objectpermission.html:64 netbox/users/tables.py:80 msgid "Object Types" msgstr "Objekttyper" -#: extras/tables/tables.py:69 +#: netbox/extras/tables/tables.py:69 msgid "Validate Uniqueness" msgstr "Valider unikhed" -#: extras/tables/tables.py:73 +#: netbox/extras/tables/tables.py:73 msgid "Visible" msgstr "Synlig" -#: extras/tables/tables.py:76 +#: netbox/extras/tables/tables.py:76 msgid "Editable" msgstr "Redigerbar" -#: extras/tables/tables.py:82 +#: netbox/extras/tables/tables.py:82 msgid "Related Object Type" msgstr "Relateret objekttype" -#: extras/tables/tables.py:86 templates/extras/customfield.html:51 +#: netbox/extras/tables/tables.py:86 +#: netbox/templates/extras/customfield.html:51 msgid "Choice Set" msgstr "Valgsæt" -#: extras/tables/tables.py:94 +#: netbox/extras/tables/tables.py:94 msgid "Is Cloneable" msgstr "Kan klones" -#: extras/tables/tables.py:98 templates/extras/customfield.html:118 +#: netbox/extras/tables/tables.py:98 +#: netbox/templates/extras/customfield.html:118 msgid "Minimum Value" msgstr "Minimumsværdi" -#: extras/tables/tables.py:101 templates/extras/customfield.html:122 +#: netbox/extras/tables/tables.py:101 +#: netbox/templates/extras/customfield.html:122 msgid "Maximum Value" msgstr "Maksimal værdi" -#: extras/tables/tables.py:104 +#: netbox/extras/tables/tables.py:104 msgid "Validation Regex" msgstr "Validering Regex" -#: extras/tables/tables.py:137 +#: netbox/extras/tables/tables.py:137 msgid "Count" msgstr "Tælle" -#: extras/tables/tables.py:140 +#: netbox/extras/tables/tables.py:140 msgid "Order Alphabetically" msgstr "Ordre alfabetisk" -#: extras/tables/tables.py:165 templates/extras/customlink.html:33 +#: netbox/extras/tables/tables.py:165 +#: netbox/templates/extras/customlink.html:33 msgid "New Window" msgstr "Nyt vindue" -#: extras/tables/tables.py:187 +#: netbox/extras/tables/tables.py:187 msgid "As Attachment" msgstr "Som vedhæftet fil" -#: extras/tables/tables.py:195 extras/tables/tables.py:487 -#: extras/tables/tables.py:522 templates/core/datafile.html:24 -#: templates/dcim/device/render_config.html:22 -#: templates/extras/configcontext.html:39 -#: templates/extras/configtemplate.html:31 -#: templates/extras/exporttemplate.html:45 -#: templates/generic/bulk_import.html:35 -#: templates/virtualization/virtualmachine/render_config.html:22 +#: netbox/extras/tables/tables.py: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/generic/bulk_import.html:35 +#: netbox/templates/virtualization/virtualmachine/render_config.html:22 msgid "Data File" msgstr "Datafiler" -#: extras/tables/tables.py:200 extras/tables/tables.py:499 -#: extras/tables/tables.py:527 +#: netbox/extras/tables/tables.py:200 netbox/extras/tables/tables.py:499 +#: netbox/extras/tables/tables.py:527 msgid "Synced" msgstr "Synkroniseret" -#: extras/tables/tables.py:227 +#: netbox/extras/tables/tables.py:227 msgid "Image" msgstr "Billede" -#: extras/tables/tables.py:232 +#: netbox/extras/tables/tables.py:232 msgid "Size (Bytes)" msgstr "Størrelse (byte)" -#: extras/tables/tables.py:339 +#: netbox/extras/tables/tables.py:339 msgid "Read" msgstr "Læs" -#: extras/tables/tables.py:382 +#: netbox/extras/tables/tables.py:382 msgid "SSL Validation" msgstr "SSL Validering" -#: extras/tables/tables.py:418 templates/extras/eventrule.html:37 +#: netbox/extras/tables/tables.py:418 +#: netbox/templates/extras/eventrule.html:37 msgid "Event Types" msgstr "Begivenhedstyper" -#: extras/tables/tables.py:535 netbox/navigation/menu.py:77 -#: templates/dcim/devicerole.html:8 +#: netbox/extras/tables/tables.py:535 netbox/netbox/navigation/menu.py:77 +#: netbox/templates/dcim/devicerole.html:8 msgid "Device Roles" msgstr "Enhedsroller" -#: extras/tables/tables.py:587 +#: netbox/extras/tables/tables.py:587 msgid "Comments (Short)" msgstr "Kommentarer (kort)" -#: extras/tables/tables.py:606 extras/tables/tables.py:640 +#: netbox/extras/tables/tables.py:606 netbox/extras/tables/tables.py:640 msgid "Line" msgstr "Linje" -#: extras/tables/tables.py:613 extras/tables/tables.py:650 +#: netbox/extras/tables/tables.py:613 netbox/extras/tables/tables.py:650 msgid "Level" msgstr "Niveau" -#: extras/tables/tables.py:619 extras/tables/tables.py:659 +#: netbox/extras/tables/tables.py:619 netbox/extras/tables/tables.py:659 msgid "Message" msgstr "Besked" -#: extras/tables/tables.py:643 +#: netbox/extras/tables/tables.py:643 msgid "Method" msgstr "Fremgangsmåde" -#: extras/validators.py:15 +#: netbox/extras/validators.py:15 #, python-format msgid "Ensure this value is equal to %(limit_value)s." msgstr "Sørg for, at denne værdi er lig med %(limit_value)s." -#: extras/validators.py:26 +#: netbox/extras/validators.py:26 #, python-format msgid "Ensure this value does not equal %(limit_value)s." msgstr "Sørg for, at denne værdi ikke er lig %(limit_value)s." -#: extras/validators.py:37 +#: netbox/extras/validators.py:37 msgid "This field must be empty." msgstr "Dette felt skal være tomt." -#: extras/validators.py:52 +#: netbox/extras/validators.py:52 msgid "This field must not be empty." msgstr "Dette felt må ikke være tomt." -#: extras/validators.py:94 +#: netbox/extras/validators.py:94 msgid "Validation rules must be passed as a dictionary" msgstr "Valideringsregler skal godkendes som en ordbog" -#: extras/validators.py:119 +#: netbox/extras/validators.py:119 #, python-brace-format msgid "Custom validation failed for {attribute}: {exception}" msgstr "Brugerdefineret validering mislykkedes for {attribute}: {exception}" -#: extras/validators.py:133 +#: netbox/extras/validators.py:133 #, python-brace-format msgid "Invalid attribute \"{name}\" for request" msgstr "Ugyldig attribut“{name}„på forespørgsel" -#: extras/validators.py:150 +#: netbox/extras/validators.py:150 #, python-brace-format msgid "Invalid attribute \"{name}\" for {model}" msgstr "Ugyldig attribut“{name}„til {model}" -#: extras/views.py:960 +#: netbox/extras/views.py:960 msgid "Your dashboard has been reset." msgstr "Dit dashboard er blevet nulstillet." -#: extras/views.py:1006 +#: netbox/extras/views.py:1006 msgid "Added widget: " msgstr "Tilføjet widget: " -#: extras/views.py:1047 +#: netbox/extras/views.py:1047 msgid "Updated widget: " msgstr "Opdateret widget: " -#: extras/views.py:1083 +#: netbox/extras/views.py:1083 msgid "Deleted widget: " msgstr "Slettet widget: " -#: extras/views.py:1085 +#: netbox/extras/views.py:1085 msgid "Error deleting widget: " msgstr "Fejl ved sletning af widget: " -#: extras/views.py:1172 +#: netbox/extras/views.py:1175 msgid "Unable to run script: RQ worker process not running." msgstr "Kan ikke køre script: RQ-arbejderprocessen kører ikke." -#: ipam/api/field_serializers.py:17 +#: netbox/ipam/api/field_serializers.py:17 msgid "Enter a valid IPv4 or IPv6 address with optional mask." msgstr "Indtast en gyldig IPv4- eller IPv6-adresse med valgfri maske." -#: ipam/api/field_serializers.py:24 +#: netbox/ipam/api/field_serializers.py:24 #, python-brace-format msgid "Invalid IP address format: {data}" msgstr "Ugyldigt IP-adresseformat: {data}" -#: ipam/api/field_serializers.py:37 +#: netbox/ipam/api/field_serializers.py:37 msgid "Enter a valid IPv4 or IPv6 prefix and mask in CIDR notation." msgstr "Indtast et gyldigt IPv4- eller IPv6-præfiks og maske i CIDR-notation." -#: ipam/api/field_serializers.py:44 +#: netbox/ipam/api/field_serializers.py:44 #, python-brace-format msgid "Invalid IP prefix format: {data}" msgstr "Ugyldigt IP-præfiksformat: {data}" -#: ipam/api/views.py:358 +#: netbox/ipam/api/views.py:358 msgid "" "Insufficient space is available to accommodate the requested prefix size(s)" msgstr "" "Der er utilstrækkelig plads til at rumme den ønskede præfiksstørrelse (r)" -#: ipam/choices.py:30 +#: netbox/ipam/choices.py:30 msgid "Container" msgstr "Container" -#: ipam/choices.py:72 +#: netbox/ipam/choices.py:72 msgid "DHCP" msgstr "DHCP" -#: ipam/choices.py:73 +#: netbox/ipam/choices.py:73 msgid "SLAAC" msgstr "SLAAK" -#: ipam/choices.py:89 +#: netbox/ipam/choices.py:89 msgid "Loopback" msgstr "Loopback" -#: ipam/choices.py:91 +#: netbox/ipam/choices.py:91 msgid "Anycast" msgstr "Anycast" -#: ipam/choices.py:115 +#: netbox/ipam/choices.py:115 msgid "Standard" msgstr "Standard" -#: ipam/choices.py:120 +#: netbox/ipam/choices.py:120 msgid "CheckPoint" msgstr "Kontrolpunkt" -#: ipam/choices.py:123 +#: netbox/ipam/choices.py:123 msgid "Cisco" msgstr "Cisco" -#: ipam/choices.py:137 +#: netbox/ipam/choices.py:137 msgid "Plaintext" msgstr "Almindelig tekst" -#: ipam/fields.py:36 +#: netbox/ipam/fields.py:36 #, python-brace-format msgid "Invalid IP address format: {address}" msgstr "Ugyldigt IP-adresseformat: {address}" -#: ipam/filtersets.py:48 vpn/filtersets.py:304 +#: netbox/ipam/filtersets.py:48 netbox/vpn/filtersets.py:304 msgid "Import target" msgstr "Importmål" -#: ipam/filtersets.py:54 vpn/filtersets.py:310 +#: netbox/ipam/filtersets.py:54 netbox/vpn/filtersets.py:310 msgid "Import target (name)" msgstr "Importmål (navn)" -#: ipam/filtersets.py:59 vpn/filtersets.py:315 +#: netbox/ipam/filtersets.py:59 netbox/vpn/filtersets.py:315 msgid "Export target" msgstr "Eksportmål" -#: ipam/filtersets.py:65 vpn/filtersets.py:321 +#: netbox/ipam/filtersets.py:65 netbox/vpn/filtersets.py:321 msgid "Export target (name)" msgstr "Eksportmål (navn)" -#: ipam/filtersets.py:86 +#: netbox/ipam/filtersets.py:86 msgid "Importing VRF" msgstr "Importere VRF" -#: ipam/filtersets.py:92 +#: netbox/ipam/filtersets.py:92 msgid "Import VRF (RD)" msgstr "Importer VRF (RD)" -#: ipam/filtersets.py:97 +#: netbox/ipam/filtersets.py:97 msgid "Exporting VRF" msgstr "Eksport af VRF" -#: ipam/filtersets.py:103 +#: netbox/ipam/filtersets.py:103 msgid "Export VRF (RD)" msgstr "Eksport VRF (RD)" -#: ipam/filtersets.py:108 +#: netbox/ipam/filtersets.py:108 msgid "Importing L2VPN" msgstr "Importerer L2VPN" -#: ipam/filtersets.py:114 +#: netbox/ipam/filtersets.py:114 msgid "Importing L2VPN (identifier)" msgstr "Importerer L2VPN (identifikator)" -#: ipam/filtersets.py:119 +#: netbox/ipam/filtersets.py:119 msgid "Exporting L2VPN" msgstr "Eksport af L2VPN" -#: ipam/filtersets.py:125 +#: netbox/ipam/filtersets.py:125 msgid "Exporting L2VPN (identifier)" msgstr "Eksport af L2VPN (identifikator)" -#: ipam/filtersets.py:155 ipam/filtersets.py:281 ipam/forms/model_forms.py:229 -#: ipam/tables/ip.py:212 templates/ipam/prefix.html:12 +#: netbox/ipam/filtersets.py:155 netbox/ipam/filtersets.py:281 +#: netbox/ipam/forms/model_forms.py:229 netbox/ipam/tables/ip.py:212 +#: netbox/templates/ipam/prefix.html:12 msgid "Prefix" msgstr "Præfiks" -#: ipam/filtersets.py:159 ipam/filtersets.py:198 ipam/filtersets.py:221 +#: netbox/ipam/filtersets.py:159 netbox/ipam/filtersets.py:198 +#: netbox/ipam/filtersets.py:221 msgid "RIR (ID)" msgstr "RIR (ID)" -#: ipam/filtersets.py:165 ipam/filtersets.py:204 ipam/filtersets.py:227 +#: netbox/ipam/filtersets.py:165 netbox/ipam/filtersets.py:204 +#: netbox/ipam/filtersets.py:227 msgid "RIR (slug)" msgstr "RIR (slug)" -#: ipam/filtersets.py:285 +#: netbox/ipam/filtersets.py:285 msgid "Within prefix" msgstr "Inden for præfiks" -#: ipam/filtersets.py:289 +#: netbox/ipam/filtersets.py:289 msgid "Within and including prefix" msgstr "Inden for og med præfiks" -#: ipam/filtersets.py:293 +#: netbox/ipam/filtersets.py:293 msgid "Prefixes which contain this prefix or IP" msgstr "Præfikser, der indeholder dette præfiks eller IP" -#: ipam/filtersets.py:304 ipam/filtersets.py:572 ipam/forms/bulk_edit.py:343 -#: ipam/forms/filtersets.py:196 ipam/forms/filtersets.py:331 +#: netbox/ipam/filtersets.py:304 netbox/ipam/filtersets.py:572 +#: netbox/ipam/forms/bulk_edit.py:343 netbox/ipam/forms/filtersets.py:196 +#: netbox/ipam/forms/filtersets.py:331 msgid "Mask length" msgstr "Maskelængde" -#: ipam/filtersets.py:373 vpn/filtersets.py:427 +#: netbox/ipam/filtersets.py:373 netbox/vpn/filtersets.py:427 msgid "VLAN (ID)" msgstr "VLAN (ID)" -#: ipam/filtersets.py:377 vpn/filtersets.py:422 +#: netbox/ipam/filtersets.py:377 netbox/vpn/filtersets.py:422 msgid "VLAN number (1-4094)" msgstr "VLAN-nummer (1-4094)" -#: ipam/filtersets.py:471 ipam/filtersets.py:475 ipam/filtersets.py:567 -#: ipam/forms/model_forms.py:463 templates/tenancy/contact.html:53 -#: tenancy/forms/bulk_edit.py:113 +#: netbox/ipam/filtersets.py:471 netbox/ipam/filtersets.py:475 +#: netbox/ipam/filtersets.py:567 netbox/ipam/forms/model_forms.py:496 +#: netbox/templates/tenancy/contact.html:53 +#: netbox/tenancy/forms/bulk_edit.py:113 msgid "Address" msgstr "Adresse" -#: ipam/filtersets.py:479 +#: netbox/ipam/filtersets.py:479 msgid "Ranges which contain this prefix or IP" msgstr "Intervaller, der indeholder dette præfiks eller IP" -#: ipam/filtersets.py:507 ipam/filtersets.py:563 +#: netbox/ipam/filtersets.py:507 netbox/ipam/filtersets.py:563 msgid "Parent prefix" msgstr "Forældrepræfiks" -#: ipam/filtersets.py:616 ipam/filtersets.py:856 ipam/filtersets.py:1131 -#: vpn/filtersets.py:385 +#: netbox/ipam/filtersets.py:616 netbox/ipam/filtersets.py:856 +#: netbox/ipam/filtersets.py:1131 netbox/vpn/filtersets.py:385 msgid "Virtual machine (name)" msgstr "Virtuel maskine (navn)" -#: ipam/filtersets.py:621 ipam/filtersets.py:861 ipam/filtersets.py:1125 -#: virtualization/filtersets.py:282 virtualization/filtersets.py:321 -#: vpn/filtersets.py:390 +#: netbox/ipam/filtersets.py:621 netbox/ipam/filtersets.py:861 +#: netbox/ipam/filtersets.py:1125 netbox/virtualization/filtersets.py:282 +#: netbox/virtualization/filtersets.py:321 netbox/vpn/filtersets.py:390 msgid "Virtual machine (ID)" msgstr "Virtuel maskine (ID)" -#: ipam/filtersets.py:627 vpn/filtersets.py:97 vpn/filtersets.py:396 +#: netbox/ipam/filtersets.py:627 netbox/vpn/filtersets.py:97 +#: netbox/vpn/filtersets.py:396 msgid "Interface (name)" msgstr "Grænseflade (navn)" -#: ipam/filtersets.py:638 vpn/filtersets.py:108 vpn/filtersets.py:407 +#: netbox/ipam/filtersets.py:638 netbox/vpn/filtersets.py:108 +#: netbox/vpn/filtersets.py:407 msgid "VM interface (name)" msgstr "VM-grænseflade (navn)" -#: ipam/filtersets.py:643 vpn/filtersets.py:113 +#: netbox/ipam/filtersets.py:643 netbox/vpn/filtersets.py:113 msgid "VM interface (ID)" msgstr "VM-grænseflade (ID)" -#: ipam/filtersets.py:648 +#: netbox/ipam/filtersets.py:648 msgid "FHRP group (ID)" msgstr "FHRP-gruppe (ID)" -#: ipam/filtersets.py:652 +#: netbox/ipam/filtersets.py:652 msgid "Is assigned to an interface" msgstr "Tildeles til en grænseflade" -#: ipam/filtersets.py:656 +#: netbox/ipam/filtersets.py:656 msgid "Is assigned" msgstr "Er tildelt" -#: ipam/filtersets.py:668 +#: netbox/ipam/filtersets.py:668 msgid "Service (ID)" msgstr "Tjeneste (ID)" -#: ipam/filtersets.py:673 +#: netbox/ipam/filtersets.py:673 msgid "NAT inside IP address (ID)" msgstr "NAT inde i IP-adresse (ID)" -#: ipam/filtersets.py:1041 ipam/forms/bulk_import.py:322 +#: netbox/ipam/filtersets.py:1041 netbox/ipam/forms/bulk_import.py:322 msgid "Assigned interface" msgstr "Tildelt grænseflade" -#: ipam/filtersets.py:1046 +#: netbox/ipam/filtersets.py:1046 msgid "Assigned VM interface" msgstr "Tildelt VM grænseflade" -#: ipam/filtersets.py:1136 +#: netbox/ipam/filtersets.py:1136 msgid "IP address (ID)" msgstr "IP-adresse (ID)" -#: ipam/filtersets.py:1142 ipam/models/ip.py:788 +#: netbox/ipam/filtersets.py:1142 netbox/ipam/models/ip.py:788 msgid "IP address" msgstr "IP adresse" -#: ipam/filtersets.py:1167 +#: netbox/ipam/filtersets.py:1167 msgid "Primary IPv4 (ID)" msgstr "Primær IPv4 (ID)" -#: ipam/filtersets.py:1172 +#: netbox/ipam/filtersets.py:1172 msgid "Primary IPv6 (ID)" msgstr "Primær IPv6 (ID)" -#: ipam/formfields.py:14 +#: netbox/ipam/formfields.py:14 msgid "Enter a valid IPv4 or IPv6 address (without a mask)." msgstr "Indtast en gyldig IPv4- eller IPv6-adresse (uden maske)." -#: ipam/formfields.py:32 +#: netbox/ipam/formfields.py:32 #, python-brace-format msgid "Invalid IPv4/IPv6 address format: {address}" msgstr "Ugyldigt IPv4/IPv6-adresseformat: {address}" -#: ipam/formfields.py:37 +#: netbox/ipam/formfields.py:37 msgid "This field requires an IP address without a mask." msgstr "Dette felt kræver en IP-adresse uden maske." -#: ipam/formfields.py:39 ipam/formfields.py:61 +#: netbox/ipam/formfields.py:39 netbox/ipam/formfields.py:61 msgid "Please specify a valid IPv4 or IPv6 address." msgstr "Angiv en gyldig IPv4- eller IPv6-adresse." -#: ipam/formfields.py:44 +#: netbox/ipam/formfields.py:44 msgid "Enter a valid IPv4 or IPv6 address (with CIDR mask)." msgstr "Indtast en gyldig IPv4- eller IPv6-adresse (med CIDR-maske)." -#: ipam/formfields.py:56 +#: netbox/ipam/formfields.py:56 msgid "CIDR mask (e.g. /24) is required." msgstr "CIDR-maske (f.eks. /24) er påkrævet." -#: ipam/forms/bulk_create.py:13 +#: netbox/ipam/forms/bulk_create.py:13 msgid "Address pattern" msgstr "Adressemønster" -#: ipam/forms/bulk_edit.py:50 +#: netbox/ipam/forms/bulk_edit.py:50 msgid "Enforce unique space" msgstr "Håndhæv unikt rum" -#: ipam/forms/bulk_edit.py:88 +#: netbox/ipam/forms/bulk_edit.py:88 msgid "Is private" msgstr "Er privat" -#: ipam/forms/bulk_edit.py:109 ipam/forms/bulk_edit.py:138 -#: ipam/forms/bulk_edit.py:163 ipam/forms/bulk_import.py:89 -#: ipam/forms/bulk_import.py:109 ipam/forms/bulk_import.py:129 -#: ipam/forms/filtersets.py:110 ipam/forms/filtersets.py:125 -#: ipam/forms/filtersets.py:148 ipam/forms/model_forms.py:96 -#: ipam/forms/model_forms.py:109 ipam/forms/model_forms.py:131 -#: ipam/forms/model_forms.py:149 ipam/models/asns.py:31 -#: ipam/models/asns.py:103 ipam/models/ip.py:71 ipam/models/ip.py:90 -#: ipam/tables/asn.py:20 ipam/tables/asn.py:45 -#: templates/ipam/aggregate.html:18 templates/ipam/asn.html:27 -#: templates/ipam/asnrange.html:19 templates/ipam/rir.html:19 +#: netbox/ipam/forms/bulk_edit.py: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/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" -#: ipam/forms/bulk_edit.py:171 +#: netbox/ipam/forms/bulk_edit.py:171 msgid "Date added" msgstr "Dato tilføjet" -#: ipam/forms/bulk_edit.py:229 ipam/forms/model_forms.py:586 -#: ipam/forms/model_forms.py:633 ipam/tables/ip.py:251 -#: templates/ipam/vlan_edit.html:37 templates/ipam/vlangroup.html:27 +#: 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/templates/ipam/vlangroup.html:27 msgid "VLAN Group" msgstr "VLAN-gruppen" -#: ipam/forms/bulk_edit.py:234 ipam/forms/bulk_import.py:185 -#: ipam/forms/filtersets.py:256 ipam/forms/model_forms.py:218 -#: ipam/models/vlans.py:234 ipam/tables/ip.py:255 -#: templates/ipam/prefix.html:60 templates/ipam/vlan.html:12 -#: templates/ipam/vlan/base.html:6 templates/ipam/vlan_edit.html:10 -#: templates/wireless/wirelesslan.html:30 vpn/forms/bulk_import.py:304 -#: vpn/forms/filtersets.py:284 vpn/forms/model_forms.py:433 -#: vpn/forms/model_forms.py:452 wireless/forms/bulk_edit.py:55 -#: wireless/forms/bulk_import.py:48 wireless/forms/model_forms.py:48 -#: wireless/models.py:102 +#: 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/templates/ipam/vlan/base.html:6 +#: netbox/templates/ipam/vlan_edit.html:10 +#: netbox/templates/wireless/wirelesslan.html:30 +#: netbox/vpn/forms/bulk_import.py:304 netbox/vpn/forms/filtersets.py:284 +#: netbox/vpn/forms/model_forms.py:433 netbox/vpn/forms/model_forms.py:452 +#: netbox/wireless/forms/bulk_edit.py:55 +#: netbox/wireless/forms/bulk_import.py:48 +#: netbox/wireless/forms/model_forms.py:48 netbox/wireless/models.py:102 msgid "VLAN" msgstr "VLAN" -#: ipam/forms/bulk_edit.py:245 +#: netbox/ipam/forms/bulk_edit.py:245 msgid "Prefix length" msgstr "Præfikslængde" -#: ipam/forms/bulk_edit.py:268 ipam/forms/filtersets.py:241 -#: templates/ipam/prefix.html:85 +#: netbox/ipam/forms/bulk_edit.py:268 netbox/ipam/forms/filtersets.py:241 +#: netbox/templates/ipam/prefix.html:85 msgid "Is a pool" msgstr "Er en pool" -#: ipam/forms/bulk_edit.py:273 ipam/forms/bulk_edit.py:318 -#: ipam/forms/filtersets.py:248 ipam/forms/filtersets.py:293 -#: ipam/models/ip.py:272 ipam/models/ip.py:539 +#: netbox/ipam/forms/bulk_edit.py: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 msgid "Treat as fully utilized" msgstr "Behandl som fuldt udnyttet" -#: ipam/forms/bulk_edit.py:287 ipam/forms/filtersets.py:171 +#: netbox/ipam/forms/bulk_edit.py:287 netbox/ipam/forms/filtersets.py:171 msgid "VLAN Assignment" msgstr "VLAN-tildeling" -#: ipam/forms/bulk_edit.py:366 ipam/models/ip.py:772 +#: netbox/ipam/forms/bulk_edit.py:366 netbox/ipam/models/ip.py:772 msgid "DNS name" msgstr "DNS-navn" -#: ipam/forms/bulk_edit.py:387 ipam/forms/bulk_edit.py:534 -#: ipam/forms/bulk_import.py:394 ipam/forms/bulk_import.py:469 -#: ipam/forms/bulk_import.py:495 ipam/forms/filtersets.py:390 -#: ipam/forms/filtersets.py:530 templates/ipam/fhrpgroup.html:22 -#: templates/ipam/inc/panels/fhrp_groups.html:24 -#: templates/ipam/service.html:32 templates/ipam/servicetemplate.html:19 +#: netbox/ipam/forms/bulk_edit.py: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/templates/ipam/inc/panels/fhrp_groups.html:24 +#: netbox/templates/ipam/service.html:32 +#: netbox/templates/ipam/servicetemplate.html:19 msgid "Protocol" msgstr "protokol" -#: ipam/forms/bulk_edit.py:394 ipam/forms/filtersets.py:397 -#: ipam/tables/fhrp.py:22 templates/ipam/fhrpgroup.html:26 +#: netbox/ipam/forms/bulk_edit.py:394 netbox/ipam/forms/filtersets.py:397 +#: netbox/ipam/tables/fhrp.py:22 netbox/templates/ipam/fhrpgroup.html:26 msgid "Group ID" msgstr "Gruppe-ID" -#: ipam/forms/bulk_edit.py:399 ipam/forms/filtersets.py:402 -#: wireless/forms/bulk_edit.py:68 wireless/forms/bulk_edit.py:115 -#: wireless/forms/bulk_import.py:62 wireless/forms/bulk_import.py:65 -#: wireless/forms/bulk_import.py:104 wireless/forms/bulk_import.py:107 -#: wireless/forms/filtersets.py:54 wireless/forms/filtersets.py:88 +#: netbox/ipam/forms/bulk_edit.py: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 msgid "Authentication type" msgstr "Autentificeringstype" -#: ipam/forms/bulk_edit.py:404 ipam/forms/filtersets.py:406 +#: netbox/ipam/forms/bulk_edit.py:404 netbox/ipam/forms/filtersets.py:406 msgid "Authentication key" msgstr "Autentificeringsnøgle" -#: ipam/forms/bulk_edit.py:421 ipam/forms/filtersets.py:383 -#: ipam/forms/model_forms.py:474 netbox/navigation/menu.py:386 -#: templates/ipam/fhrpgroup.html:49 -#: templates/wireless/inc/authentication_attrs.html:5 -#: wireless/forms/bulk_edit.py:91 wireless/forms/bulk_edit.py:149 -#: wireless/forms/filtersets.py:36 wireless/forms/filtersets.py:76 -#: wireless/forms/model_forms.py:55 wireless/forms/model_forms.py:171 +#: 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/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 msgid "Authentication" msgstr "Autentificering" -#: ipam/forms/bulk_edit.py:436 ipam/forms/model_forms.py:575 +#: netbox/ipam/forms/bulk_edit.py:436 netbox/ipam/forms/model_forms.py:608 msgid "Scope type" msgstr "Områdetype" -#: ipam/forms/bulk_edit.py:439 ipam/forms/bulk_edit.py:453 -#: ipam/forms/model_forms.py:578 ipam/forms/model_forms.py:588 -#: ipam/tables/vlans.py:71 templates/ipam/vlangroup.html:38 +#: 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" -#: ipam/forms/bulk_edit.py:446 ipam/models/vlans.py:60 +#: netbox/ipam/forms/bulk_edit.py:446 netbox/ipam/models/vlans.py:60 msgid "VLAN ID ranges" msgstr "VLAN-ID-intervaller" -#: ipam/forms/bulk_edit.py:525 +#: netbox/ipam/forms/bulk_edit.py:525 msgid "Site & Group" msgstr "Område & Gruppe" -#: ipam/forms/bulk_edit.py:539 ipam/forms/model_forms.py:659 -#: ipam/forms/model_forms.py:691 ipam/tables/services.py:19 -#: ipam/tables/services.py:49 templates/ipam/service.html:36 -#: templates/ipam/servicetemplate.html:23 +#: netbox/ipam/forms/bulk_edit.py:539 netbox/ipam/forms/model_forms.py:692 +#: netbox/ipam/forms/model_forms.py:724 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" -#: ipam/forms/bulk_import.py:48 +#: netbox/ipam/forms/bulk_import.py:48 msgid "Import route targets" msgstr "Importer rutemål" -#: ipam/forms/bulk_import.py:54 +#: netbox/ipam/forms/bulk_import.py:54 msgid "Export route targets" msgstr "Eksporter rutemål" -#: ipam/forms/bulk_import.py:92 ipam/forms/bulk_import.py:112 -#: ipam/forms/bulk_import.py:132 +#: netbox/ipam/forms/bulk_import.py:92 netbox/ipam/forms/bulk_import.py:112 +#: netbox/ipam/forms/bulk_import.py:132 msgid "Assigned RIR" msgstr "Tildelt RIR" -#: ipam/forms/bulk_import.py:182 +#: netbox/ipam/forms/bulk_import.py:182 msgid "VLAN's group (if any)" msgstr "VLANs gruppe (hvis nogen)" -#: ipam/forms/bulk_import.py:308 +#: netbox/ipam/forms/bulk_import.py:308 msgid "Parent device of assigned interface (if any)" msgstr "Overordnet enhed med tildelt grænseflade (hvis nogen)" -#: ipam/forms/bulk_import.py:311 ipam/forms/bulk_import.py:488 -#: ipam/forms/model_forms.py:685 virtualization/filtersets.py:288 -#: virtualization/filtersets.py:327 virtualization/forms/bulk_edit.py:200 -#: virtualization/forms/bulk_edit.py:326 -#: virtualization/forms/bulk_import.py:146 -#: virtualization/forms/bulk_import.py:207 -#: virtualization/forms/filtersets.py:212 -#: virtualization/forms/filtersets.py:248 -#: virtualization/forms/model_forms.py:288 vpn/forms/bulk_import.py:93 -#: vpn/forms/bulk_import.py:290 +#: 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" -#: ipam/forms/bulk_import.py:315 +#: netbox/ipam/forms/bulk_import.py:315 msgid "Parent VM of assigned interface (if any)" msgstr "Overordnet VM for tildelt grænseflade (hvis nogen)" -#: ipam/forms/bulk_import.py:325 +#: netbox/ipam/forms/bulk_import.py:325 msgid "Is primary" msgstr "Er primær" -#: ipam/forms/bulk_import.py:326 +#: 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" -#: ipam/forms/bulk_import.py:365 +#: netbox/ipam/forms/bulk_import.py:330 +msgid "Is out-of-band" +msgstr "" + +#: netbox/ipam/forms/bulk_import.py:331 +msgid "Designate this as the out-of-band IP address for the assigned device" +msgstr "" + +#: netbox/ipam/forms/bulk_import.py:371 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" -#: ipam/forms/bulk_import.py:369 +#: netbox/ipam/forms/bulk_import.py:375 +msgid "No device specified; cannot set as out-of-band IP" +msgstr "" + +#: netbox/ipam/forms/bulk_import.py:379 +msgid "Cannot set out-of-band IP for virtual machines" +msgstr "" + +#: netbox/ipam/forms/bulk_import.py:383 msgid "No interface specified; cannot set as primary IP" msgstr "Ingen grænseflade angivet; kan ikke indstilles som primær IP" -#: ipam/forms/bulk_import.py:398 +#: netbox/ipam/forms/bulk_import.py:387 +msgid "No interface specified; cannot set as out-of-band IP" +msgstr "" + +#: netbox/ipam/forms/bulk_import.py:422 msgid "Auth type" msgstr "Autentificeringstype" -#: ipam/forms/bulk_import.py:413 +#: netbox/ipam/forms/bulk_import.py:437 msgid "Scope type (app & model)" msgstr "Omfangstype (app og model)" -#: ipam/forms/bulk_import.py:440 +#: netbox/ipam/forms/bulk_import.py:464 msgid "Assigned VLAN group" msgstr "Tildelt VLAN-gruppe" -#: ipam/forms/bulk_import.py:471 ipam/forms/bulk_import.py:497 +#: netbox/ipam/forms/bulk_import.py:495 netbox/ipam/forms/bulk_import.py:521 msgid "IP protocol" msgstr "IP-protokol" -#: ipam/forms/bulk_import.py:485 +#: netbox/ipam/forms/bulk_import.py:509 msgid "Required if not assigned to a VM" msgstr "Påkrævet, hvis den ikke er tildelt en VM" -#: ipam/forms/bulk_import.py:492 +#: netbox/ipam/forms/bulk_import.py:516 msgid "Required if not assigned to a device" msgstr "Påkrævet, hvis den ikke er tildelt en enhed" -#: ipam/forms/bulk_import.py:517 +#: netbox/ipam/forms/bulk_import.py:541 #, python-brace-format msgid "{ip} is not assigned to this device/VM." msgstr "{ip} er ikke tildelt denne enhed/VM." -#: ipam/forms/filtersets.py:47 ipam/forms/model_forms.py:63 -#: netbox/navigation/menu.py:189 vpn/forms/model_forms.py:410 +#: 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 msgid "Route Targets" msgstr "Rutemål" -#: ipam/forms/filtersets.py:53 ipam/forms/model_forms.py:50 -#: vpn/forms/filtersets.py:224 vpn/forms/model_forms.py:397 +#: 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 msgid "Import targets" msgstr "Importmål" -#: ipam/forms/filtersets.py:58 ipam/forms/model_forms.py:55 -#: vpn/forms/filtersets.py:229 vpn/forms/model_forms.py:402 +#: 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 msgid "Export targets" msgstr "Eksportmål" -#: ipam/forms/filtersets.py:73 +#: netbox/ipam/forms/filtersets.py:73 msgid "Imported by VRF" msgstr "Importeret af VRF" -#: ipam/forms/filtersets.py:78 +#: netbox/ipam/forms/filtersets.py:78 msgid "Exported by VRF" msgstr "Eksporteret af VRF" -#: ipam/forms/filtersets.py:87 ipam/tables/ip.py:89 templates/ipam/rir.html:30 +#: netbox/ipam/forms/filtersets.py:87 netbox/ipam/tables/ip.py:89 +#: netbox/templates/ipam/rir.html:30 msgid "Private" msgstr "Privat" -#: ipam/forms/filtersets.py:105 ipam/forms/filtersets.py:191 -#: ipam/forms/filtersets.py:272 ipam/forms/filtersets.py:326 +#: netbox/ipam/forms/filtersets.py:105 netbox/ipam/forms/filtersets.py:191 +#: netbox/ipam/forms/filtersets.py:272 netbox/ipam/forms/filtersets.py:326 msgid "Address family" msgstr "Adressefamilie" -#: ipam/forms/filtersets.py:119 templates/ipam/asnrange.html:25 +#: netbox/ipam/forms/filtersets.py:119 netbox/templates/ipam/asnrange.html:25 msgid "Range" msgstr "Rækkevidde" -#: ipam/forms/filtersets.py:128 +#: netbox/ipam/forms/filtersets.py:128 msgid "Start" msgstr "Start" -#: ipam/forms/filtersets.py:132 +#: netbox/ipam/forms/filtersets.py:132 msgid "End" msgstr "Slut" -#: ipam/forms/filtersets.py:186 +#: netbox/ipam/forms/filtersets.py:186 msgid "Search within" msgstr "Søg inden for" -#: ipam/forms/filtersets.py:207 ipam/forms/filtersets.py:342 +#: netbox/ipam/forms/filtersets.py:207 netbox/ipam/forms/filtersets.py:342 msgid "Present in VRF" msgstr "Til stede i VRF" -#: ipam/forms/filtersets.py:311 +#: netbox/ipam/forms/filtersets.py:311 msgid "Device/VM" msgstr "Enhed/VM" -#: ipam/forms/filtersets.py:321 +#: netbox/ipam/forms/filtersets.py:321 msgid "Parent Prefix" msgstr "Forældrepræfiks" -#: ipam/forms/filtersets.py:347 +#: netbox/ipam/forms/filtersets.py:347 msgid "Assigned Device" msgstr "Tildelt enhed" -#: ipam/forms/filtersets.py:352 +#: netbox/ipam/forms/filtersets.py:352 msgid "Assigned VM" msgstr "Tildelt VM" -#: ipam/forms/filtersets.py:366 +#: netbox/ipam/forms/filtersets.py:366 msgid "Assigned to an interface" msgstr "Tildelt til en grænseflade" -#: ipam/forms/filtersets.py:373 templates/ipam/ipaddress.html:51 +#: netbox/ipam/forms/filtersets.py:373 netbox/templates/ipam/ipaddress.html:51 msgid "DNS Name" msgstr "DNS-navn" -#: ipam/forms/filtersets.py:416 ipam/models/vlans.py:235 ipam/tables/ip.py:176 -#: ipam/tables/vlans.py:82 ipam/views.py:971 netbox/navigation/menu.py:193 -#: netbox/navigation/menu.py:195 +#: 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 msgid "VLANs" msgstr "VLAN'er" -#: ipam/forms/filtersets.py:457 +#: netbox/ipam/forms/filtersets.py:457 msgid "Contains VLAN ID" msgstr "Indeholder VLAN ID" -#: ipam/forms/filtersets.py:513 ipam/models/vlans.py:176 -#: templates/ipam/vlan.html:31 +#: netbox/ipam/forms/filtersets.py:513 netbox/ipam/models/vlans.py:192 +#: netbox/templates/ipam/vlan.html:31 msgid "VLAN ID" msgstr "VLAN-ID" -#: ipam/forms/filtersets.py:556 ipam/forms/model_forms.py:320 -#: ipam/forms/model_forms.py:713 ipam/forms/model_forms.py:739 -#: ipam/tables/vlans.py:195 templates/virtualization/virtualdisk.html:21 -#: templates/virtualization/virtualmachine.html:12 -#: templates/virtualization/vminterface.html:21 -#: templates/vpn/tunneltermination.html:25 -#: virtualization/forms/filtersets.py:197 -#: virtualization/forms/filtersets.py:242 -#: virtualization/forms/model_forms.py:220 -#: virtualization/tables/virtualmachines.py:135 -#: virtualization/tables/virtualmachines.py:190 vpn/choices.py:45 -#: vpn/forms/filtersets.py:293 vpn/forms/model_forms.py:160 -#: vpn/forms/model_forms.py:171 vpn/forms/model_forms.py:273 -#: vpn/forms/model_forms.py:454 +#: netbox/ipam/forms/filtersets.py: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" -#: ipam/forms/model_forms.py:80 templates/ipam/routetarget.html:10 +#: netbox/ipam/forms/model_forms.py:80 +#: netbox/templates/ipam/routetarget.html:10 msgid "Route Target" msgstr "Rutemål" -#: ipam/forms/model_forms.py:114 ipam/tables/ip.py:117 -#: templates/ipam/aggregate.html:11 templates/ipam/prefix.html:38 +#: netbox/ipam/forms/model_forms.py:114 netbox/ipam/tables/ip.py:117 +#: netbox/templates/ipam/aggregate.html:11 +#: netbox/templates/ipam/prefix.html:38 msgid "Aggregate" msgstr "Aggregeret" -#: ipam/forms/model_forms.py:135 templates/ipam/asnrange.html:12 +#: netbox/ipam/forms/model_forms.py:135 netbox/templates/ipam/asnrange.html:12 msgid "ASN Range" msgstr "ASN-rækkevidde" -#: ipam/forms/model_forms.py:231 +#: netbox/ipam/forms/model_forms.py:231 msgid "Site/VLAN Assignment" msgstr "Område/VLAN-tildeling" -#: ipam/forms/model_forms.py:259 templates/ipam/iprange.html:10 +#: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10 msgid "IP Range" msgstr "IP-rækkevidde" -#: ipam/forms/model_forms.py:295 ipam/forms/model_forms.py:321 -#: ipam/forms/model_forms.py:473 templates/ipam/fhrpgroup.html:19 +#: 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 msgid "FHRP Group" msgstr "FHRP-gruppen" -#: ipam/forms/model_forms.py:310 +#: netbox/ipam/forms/model_forms.py:310 msgid "Make this the primary IP for the device/VM" msgstr "Gør dette til den primære IP for enheden/VM" -#: ipam/forms/model_forms.py:325 +#: netbox/ipam/forms/model_forms.py:314 +msgid "Make this the out-of-band IP for the device" +msgstr "" + +#: netbox/ipam/forms/model_forms.py:329 msgid "NAT IP (Inside)" msgstr "NAT IP (indvendigt)" -#: ipam/forms/model_forms.py:384 +#: netbox/ipam/forms/model_forms.py:391 msgid "An IP address can only be assigned to a single object." msgstr "En IP-adresse kan kun tildeles et enkelt objekt." -#: ipam/forms/model_forms.py:390 ipam/models/ip.py:897 -msgid "" -"Cannot reassign IP address while it is designated as the primary IP for the " -"parent object" +#: netbox/ipam/forms/model_forms.py:398 +msgid "Cannot reassign primary IP address for the parent device/VM" msgstr "" -"Kan ikke omtildele IP-adresse, mens den er angivet som den primære IP for " -"det overordnede objekt" -#: ipam/forms/model_forms.py:400 +#: netbox/ipam/forms/model_forms.py:402 +msgid "Cannot reassign out-of-Band IP address for the parent device" +msgstr "" + +#: netbox/ipam/forms/model_forms.py:412 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." -#: ipam/forms/model_forms.py:475 +#: netbox/ipam/forms/model_forms.py:420 +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 msgid "Virtual IP Address" msgstr "Virtuel IP-adresse" -#: ipam/forms/model_forms.py:560 +#: netbox/ipam/forms/model_forms.py:593 msgid "Assignment already exists" msgstr "Opgaven findes allerede" -#: ipam/forms/model_forms.py:569 templates/ipam/vlangroup.html:42 +#: netbox/ipam/forms/model_forms.py:602 +#: netbox/templates/ipam/vlangroup.html:42 msgid "VLAN IDs" msgstr "VLAN-id'er" -#: ipam/forms/model_forms.py:587 +#: netbox/ipam/forms/model_forms.py:620 msgid "Child VLANs" msgstr "VLAN'er til børn" -#: ipam/forms/model_forms.py:664 ipam/forms/model_forms.py:696 +#: netbox/ipam/forms/model_forms.py:697 netbox/ipam/forms/model_forms.py:729 msgid "" "Comma-separated list of one or more port numbers. A range may be specified " "using a hyphen." @@ -9217,132 +9872,133 @@ msgstr "" "Kommasepareret liste over et eller flere portnumre. Et interval kan angives " "ved hjælp af en bindestreg." -#: ipam/forms/model_forms.py:669 templates/ipam/servicetemplate.html:12 +#: netbox/ipam/forms/model_forms.py:702 +#: netbox/templates/ipam/servicetemplate.html:12 msgid "Service Template" msgstr "Serviceskabelon" -#: ipam/forms/model_forms.py:716 +#: netbox/ipam/forms/model_forms.py:749 msgid "Port(s)" msgstr "Havn (er)" -#: ipam/forms/model_forms.py:717 ipam/forms/model_forms.py:745 -#: templates/ipam/service.html:21 +#: netbox/ipam/forms/model_forms.py:750 netbox/ipam/forms/model_forms.py:778 +#: netbox/templates/ipam/service.html:21 msgid "Service" msgstr "Serviceydelse" -#: ipam/forms/model_forms.py:730 +#: netbox/ipam/forms/model_forms.py:763 msgid "Service template" msgstr "Serviceskabelon" -#: ipam/forms/model_forms.py:742 +#: netbox/ipam/forms/model_forms.py:775 msgid "From Template" msgstr "Fra skabelon" -#: ipam/forms/model_forms.py:743 +#: netbox/ipam/forms/model_forms.py:776 msgid "Custom" msgstr "Brugerdefineret" -#: ipam/forms/model_forms.py:773 +#: netbox/ipam/forms/model_forms.py:806 msgid "" "Must specify name, protocol, and port(s) if not using a service template." msgstr "" "Du skal angive navn, protokol og port (er), hvis du ikke bruger en " "serviceskabelon." -#: ipam/models/asns.py:34 +#: netbox/ipam/models/asns.py:34 msgid "start" msgstr "start" -#: ipam/models/asns.py:51 +#: netbox/ipam/models/asns.py:51 msgid "ASN range" msgstr "ASN rækkevidde" -#: ipam/models/asns.py:52 +#: netbox/ipam/models/asns.py:52 msgid "ASN ranges" msgstr "ASN intervaller" -#: ipam/models/asns.py:72 +#: netbox/ipam/models/asns.py:72 #, python-brace-format msgid "Starting ASN ({start}) must be lower than ending ASN ({end})." msgstr "Start ASN ({start}) skal være lavere end slutningen af ASN ({end})." -#: ipam/models/asns.py:104 +#: netbox/ipam/models/asns.py:104 msgid "Regional Internet Registry responsible for this AS number space" msgstr "Regionalt internetregister, der er ansvarlig for dette AS-nummerrum" -#: ipam/models/asns.py:109 +#: netbox/ipam/models/asns.py:109 msgid "16- or 32-bit autonomous system number" msgstr "16- eller 32-bit autonomt systemnummer" -#: ipam/models/fhrp.py:22 +#: netbox/ipam/models/fhrp.py:22 msgid "group ID" msgstr "Gruppe-ID" -#: ipam/models/fhrp.py:30 ipam/models/services.py:22 +#: netbox/ipam/models/fhrp.py:30 netbox/ipam/models/services.py:22 msgid "protocol" msgstr "protokol" -#: ipam/models/fhrp.py:38 wireless/models.py:28 +#: netbox/ipam/models/fhrp.py:38 netbox/wireless/models.py:28 msgid "authentication type" msgstr "autentificeringstype" -#: ipam/models/fhrp.py:43 +#: netbox/ipam/models/fhrp.py:43 msgid "authentication key" msgstr "autentificeringsnøgle" -#: ipam/models/fhrp.py:56 +#: netbox/ipam/models/fhrp.py:56 msgid "FHRP group" msgstr "FHRP-gruppe" -#: ipam/models/fhrp.py:57 +#: netbox/ipam/models/fhrp.py:57 msgid "FHRP groups" msgstr "FHRP-grupper" -#: ipam/models/fhrp.py:113 +#: netbox/ipam/models/fhrp.py:113 msgid "FHRP group assignment" msgstr "FHRP-gruppeopgave" -#: ipam/models/fhrp.py:114 +#: netbox/ipam/models/fhrp.py:114 msgid "FHRP group assignments" msgstr "FHRP gruppeopgaver" -#: ipam/models/ip.py:65 +#: netbox/ipam/models/ip.py:65 msgid "private" msgstr "privat" -#: ipam/models/ip.py:66 +#: netbox/ipam/models/ip.py:66 msgid "IP space managed by this RIR is considered private" msgstr "IP-plads administreret af denne RIR betragtes som privat" -#: ipam/models/ip.py:72 netbox/navigation/menu.py:182 +#: netbox/ipam/models/ip.py:72 netbox/netbox/navigation/menu.py:182 msgid "RIRs" msgstr "RIR'er" -#: ipam/models/ip.py:84 +#: netbox/ipam/models/ip.py:84 msgid "IPv4 or IPv6 network" msgstr "IPv4- eller IPv6-netværk" -#: ipam/models/ip.py:91 +#: netbox/ipam/models/ip.py:91 msgid "Regional Internet Registry responsible for this IP space" msgstr "Regionalt internetregister, der er ansvarlig for dette IP-rum" -#: ipam/models/ip.py:101 +#: netbox/ipam/models/ip.py:101 msgid "date added" msgstr "dato tilføjet" -#: ipam/models/ip.py:115 +#: netbox/ipam/models/ip.py:115 msgid "aggregate" msgstr "aggregat" -#: ipam/models/ip.py:116 +#: netbox/ipam/models/ip.py:116 msgid "aggregates" msgstr "aggregater" -#: ipam/models/ip.py:132 +#: netbox/ipam/models/ip.py:132 msgid "Cannot create aggregate with /0 mask." msgstr "Kan ikke oprette aggregat med /0-maske." -#: ipam/models/ip.py:144 +#: netbox/ipam/models/ip.py:144 #, python-brace-format msgid "" "Aggregates cannot overlap. {prefix} is already covered by an existing " @@ -9351,7 +10007,7 @@ msgstr "" "Aggregater kan ikke overlappe hinanden. {prefix} er allerede dækket af et " "eksisterende aggregat ({aggregate})." -#: ipam/models/ip.py:158 +#: netbox/ipam/models/ip.py:158 #, python-brace-format msgid "" "Prefixes cannot overlap aggregates. {prefix} covers an existing aggregate " @@ -9360,255 +10016,273 @@ msgstr "" "Præfikser kan ikke overlappe aggregater. {prefix} dækker et eksisterende " "aggregat ({aggregate})." -#: ipam/models/ip.py:200 ipam/models/ip.py:737 vpn/models/tunnels.py:114 +#: netbox/ipam/models/ip.py:200 netbox/ipam/models/ip.py:737 +#: netbox/vpn/models/tunnels.py:114 msgid "role" msgstr "rolle" -#: ipam/models/ip.py:201 +#: netbox/ipam/models/ip.py:201 msgid "roles" msgstr "roller" -#: ipam/models/ip.py:217 ipam/models/ip.py:293 +#: netbox/ipam/models/ip.py:217 netbox/ipam/models/ip.py:293 msgid "prefix" msgstr "præfiks" -#: ipam/models/ip.py:218 +#: netbox/ipam/models/ip.py:218 msgid "IPv4 or IPv6 network with mask" msgstr "IPv4- eller IPv6-netværk med maske" -#: ipam/models/ip.py:254 +#: netbox/ipam/models/ip.py:254 msgid "Operational status of this prefix" msgstr "Driftsstatus for dette præfiks" -#: ipam/models/ip.py:262 +#: netbox/ipam/models/ip.py:262 msgid "The primary function of this prefix" msgstr "Den primære funktion af dette præfiks" -#: ipam/models/ip.py:265 +#: netbox/ipam/models/ip.py:265 msgid "is a pool" msgstr "er en pool" -#: ipam/models/ip.py:267 +#: netbox/ipam/models/ip.py:267 msgid "All IP addresses within this prefix are considered usable" msgstr "Alle IP-adresser inden for dette præfiks betragtes som brugbare" -#: ipam/models/ip.py:270 ipam/models/ip.py:537 +#: netbox/ipam/models/ip.py:270 netbox/ipam/models/ip.py:537 msgid "mark utilized" msgstr "brugt mærke" -#: ipam/models/ip.py:294 +#: netbox/ipam/models/ip.py:294 msgid "prefixes" msgstr "præfikser" -#: ipam/models/ip.py:317 +#: netbox/ipam/models/ip.py:317 msgid "Cannot create prefix with /0 mask." msgstr "Kan ikke oprette præfiks med /0-maske." -#: ipam/models/ip.py:324 ipam/models/ip.py:874 +#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:874 #, python-brace-format msgid "VRF {vrf}" msgstr "VRF {vrf}" -#: ipam/models/ip.py:324 ipam/models/ip.py:874 +#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:874 msgid "global table" msgstr "global tabel" -#: ipam/models/ip.py:326 +#: netbox/ipam/models/ip.py:326 #, python-brace-format msgid "Duplicate prefix found in {table}: {prefix}" msgstr "Duplikat præfiks fundet i {table}: {prefix}" -#: ipam/models/ip.py:495 +#: netbox/ipam/models/ip.py:495 msgid "start address" msgstr "startadresse" -#: ipam/models/ip.py:496 ipam/models/ip.py:500 ipam/models/ip.py:712 +#: netbox/ipam/models/ip.py:496 netbox/ipam/models/ip.py:500 +#: netbox/ipam/models/ip.py:712 msgid "IPv4 or IPv6 address (with mask)" msgstr "IPv4- eller IPv6-adresse (med maske)" -#: ipam/models/ip.py:499 +#: netbox/ipam/models/ip.py:499 msgid "end address" msgstr "slutadresse" -#: ipam/models/ip.py:526 +#: netbox/ipam/models/ip.py:526 msgid "Operational status of this range" msgstr "Driftsstatus for denne rækkevidde" -#: ipam/models/ip.py:534 +#: netbox/ipam/models/ip.py:534 msgid "The primary function of this range" msgstr "Den primære funktion af dette interval" -#: ipam/models/ip.py:548 +#: netbox/ipam/models/ip.py:548 msgid "IP range" msgstr "IP-rækkevidde" -#: ipam/models/ip.py:549 +#: netbox/ipam/models/ip.py:549 msgid "IP ranges" msgstr "IP-intervaller" -#: ipam/models/ip.py:565 +#: netbox/ipam/models/ip.py:565 msgid "Starting and ending IP address versions must match" msgstr "Startende og afsluttende IP-adresseversioner skal matche" -#: ipam/models/ip.py:571 +#: netbox/ipam/models/ip.py:571 msgid "Starting and ending IP address masks must match" msgstr "Startende og afsluttende IP-adressemasker skal matche" -#: ipam/models/ip.py:578 +#: netbox/ipam/models/ip.py:578 #, python-brace-format msgid "" "Ending address must be greater than the starting address ({start_address})" msgstr "Slutadressen skal være større end startadressen ({start_address})" -#: ipam/models/ip.py:590 +#: netbox/ipam/models/ip.py:590 #, python-brace-format msgid "Defined addresses overlap with range {overlapping_range} in VRF {vrf}" msgstr "" "Definerede adresser overlapper med rækkevidde {overlapping_range} i VRF " "{vrf}" -#: ipam/models/ip.py:599 +#: netbox/ipam/models/ip.py:599 #, python-brace-format msgid "Defined range exceeds maximum supported size ({max_size})" msgstr "" "Defineret interval overstiger den maksimale understøttede størrelse " "({max_size})" -#: ipam/models/ip.py:711 tenancy/models/contacts.py:82 +#: netbox/ipam/models/ip.py:711 netbox/tenancy/models/contacts.py:82 msgid "address" msgstr "adresse" -#: ipam/models/ip.py:734 +#: netbox/ipam/models/ip.py:734 msgid "The operational status of this IP" msgstr "Den operationelle status for denne IP" -#: ipam/models/ip.py:741 +#: netbox/ipam/models/ip.py:741 msgid "The functional role of this IP" msgstr "Den funktionelle rolle af denne IP" -#: ipam/models/ip.py:765 templates/ipam/ipaddress.html:72 +#: netbox/ipam/models/ip.py:765 netbox/templates/ipam/ipaddress.html:72 msgid "NAT (inside)" msgstr "NAT (indvendigt)" -#: ipam/models/ip.py:766 +#: netbox/ipam/models/ip.py:766 msgid "The IP for which this address is the \"outside\" IP" msgstr "Den IP, som denne adresse er den „eksterne“ IP for" -#: ipam/models/ip.py:773 +#: netbox/ipam/models/ip.py:773 msgid "Hostname or FQDN (not case-sensitive)" msgstr "Værtsnavn eller FQDN (skelner ikke mellem store og små bogstaver)" -#: ipam/models/ip.py:789 ipam/models/services.py:94 +#: netbox/ipam/models/ip.py:789 netbox/ipam/models/services.py:94 msgid "IP addresses" msgstr "IP-adresser" -#: ipam/models/ip.py:845 +#: netbox/ipam/models/ip.py:845 msgid "Cannot create IP address with /0 mask." msgstr "Kan ikke oprette IP-adresse med /0-maske." -#: ipam/models/ip.py:851 +#: netbox/ipam/models/ip.py:851 #, python-brace-format msgid "{ip} is a network ID, which may not be assigned to an interface." msgstr "{ip} er et netværks-id, som muligvis ikke tildeles en grænseflade." -#: ipam/models/ip.py:862 +#: netbox/ipam/models/ip.py:862 #, python-brace-format msgid "" "{ip} is a broadcast address, which may not be assigned to an interface." msgstr "" "{ip} er en udsendelsesadresse, som muligvis ikke tildeles en grænseflade." -#: ipam/models/ip.py:876 +#: netbox/ipam/models/ip.py:876 #, python-brace-format msgid "Duplicate IP address found in {table}: {ipaddress}" msgstr "Duplikat IP-adresse fundet i {table}: {ipaddress}" -#: ipam/models/ip.py:903 +#: netbox/ipam/models/ip.py:897 +msgid "" +"Cannot reassign IP address while it is designated as the primary IP for the " +"parent object" +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 msgid "Only IPv6 addresses can be assigned SLAAC status" msgstr "Kun IPv6-adresser kan tildeles SLAAC-status" -#: ipam/models/services.py:33 +#: netbox/ipam/models/services.py:33 msgid "port numbers" msgstr "portnumre" -#: ipam/models/services.py:59 +#: netbox/ipam/models/services.py:59 msgid "service template" msgstr "service skabelon" -#: ipam/models/services.py:60 +#: netbox/ipam/models/services.py:60 msgid "service templates" msgstr "service skabeloner" -#: ipam/models/services.py:95 +#: netbox/ipam/models/services.py:95 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" -#: ipam/models/services.py:102 +#: netbox/ipam/models/services.py:102 msgid "service" msgstr "tjeneste" -#: ipam/models/services.py:103 +#: netbox/ipam/models/services.py:103 msgid "services" msgstr "ydelser" -#: ipam/models/services.py:117 +#: netbox/ipam/models/services.py:117 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." -#: ipam/models/services.py:119 +#: netbox/ipam/models/services.py:119 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." -#: ipam/models/vlans.py:85 +#: netbox/ipam/models/vlans.py:85 msgid "VLAN groups" msgstr "VLAN-grupper" -#: ipam/models/vlans.py:95 +#: netbox/ipam/models/vlans.py:95 msgid "Cannot set scope_type without scope_id." msgstr "Kan ikke indstille scope_type uden scope_id." -#: ipam/models/vlans.py:97 +#: netbox/ipam/models/vlans.py:97 msgid "Cannot set scope_id without scope_type." msgstr "Kan ikke indstille scope_id uden scope_type." -#: ipam/models/vlans.py:101 +#: netbox/ipam/models/vlans.py:105 +#, python-brace-format +msgid "Starting VLAN ID in range ({value}) cannot be less than {minimum}" +msgstr "" + +#: netbox/ipam/models/vlans.py:111 +#, python-brace-format +msgid "Ending VLAN ID in range ({value}) cannot exceed {maximum}" +msgstr "" + +#: 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 "" + +#: netbox/ipam/models/vlans.py:124 msgid "Ranges cannot overlap." msgstr "Intervaller kan ikke overlappe hinanden." -#: ipam/models/vlans.py:106 -#, python-brace-format -msgid "" -"Maximum child VID must be greater than or equal to minimum child VID " -"({value})" -msgstr "" -"Maksimal børneVID skal være større end eller lig med minimum børns VID " -"({value})" - -#: ipam/models/vlans.py:165 +#: netbox/ipam/models/vlans.py:181 msgid "The specific site to which this VLAN is assigned (if any)" msgstr "Det specifikke område, som dette VLAN er tildelt (hvis nogen)" -#: ipam/models/vlans.py:173 +#: netbox/ipam/models/vlans.py:189 msgid "VLAN group (optional)" msgstr "VLAN-gruppe (valgfrit)" -#: ipam/models/vlans.py:181 +#: netbox/ipam/models/vlans.py:197 msgid "Numeric VLAN ID (1-4094)" msgstr "Numerisk VLAN-id (1-4094)" -#: ipam/models/vlans.py:199 +#: netbox/ipam/models/vlans.py:215 msgid "Operational status of this VLAN" msgstr "Driftsstatus for dette VLAN" -#: ipam/models/vlans.py:207 +#: netbox/ipam/models/vlans.py:223 msgid "The primary function of this VLAN" msgstr "Den primære funktion af denne VLAN" -#: ipam/models/vlans.py:250 +#: netbox/ipam/models/vlans.py:266 #, python-brace-format msgid "" "VLAN is assigned to group {group} (scope: {scope}); cannot also assign to " @@ -9617,165 +10291,167 @@ msgstr "" "VLAN er tildelt til gruppe {group} (anvendelsesområde: {scope}); kan ikke " "også tildele til området {site}." -#: ipam/models/vlans.py:259 +#: netbox/ipam/models/vlans.py:275 #, 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}" -#: ipam/models/vrfs.py:30 +#: netbox/ipam/models/vrfs.py:30 msgid "route distinguisher" msgstr "ruteadskillelse" -#: ipam/models/vrfs.py:31 +#: netbox/ipam/models/vrfs.py:31 msgid "Unique route distinguisher (as defined in RFC 4364)" msgstr "Unik ruteadskillelse (som defineret i RFC 4364)" -#: ipam/models/vrfs.py:42 +#: netbox/ipam/models/vrfs.py:42 msgid "enforce unique space" msgstr "håndhæv unikt rum" -#: ipam/models/vrfs.py:43 +#: netbox/ipam/models/vrfs.py:43 msgid "Prevent duplicate prefixes/IP addresses within this VRF" msgstr "Undgå dublerede præfikser/IP-adresser inden for denne VRF" -#: ipam/models/vrfs.py:63 netbox/navigation/menu.py:186 -#: netbox/navigation/menu.py:188 +#: netbox/ipam/models/vrfs.py:63 netbox/netbox/navigation/menu.py:186 +#: netbox/netbox/navigation/menu.py:188 msgid "VRFs" msgstr "VRF'er" -#: ipam/models/vrfs.py:82 +#: netbox/ipam/models/vrfs.py:82 msgid "Route target value (formatted in accordance with RFC 4360)" msgstr "Rutemålværdi (formateret i overensstemmelse med RFC 4360)" -#: ipam/models/vrfs.py:94 +#: netbox/ipam/models/vrfs.py:94 msgid "route target" msgstr "rute mål" -#: ipam/models/vrfs.py:95 +#: netbox/ipam/models/vrfs.py:95 msgid "route targets" msgstr "rutemål" -#: ipam/tables/asn.py:52 +#: netbox/ipam/tables/asn.py:52 msgid "ASDOT" msgstr "ASDOT" -#: ipam/tables/asn.py:57 +#: netbox/ipam/tables/asn.py:57 msgid "Site Count" msgstr "Antal områder" -#: ipam/tables/asn.py:62 +#: netbox/ipam/tables/asn.py:62 msgid "Provider Count" msgstr "Antal leverandøre" -#: ipam/tables/ip.py:95 netbox/navigation/menu.py:179 -#: netbox/navigation/menu.py:181 +#: netbox/ipam/tables/ip.py:95 netbox/netbox/navigation/menu.py:179 +#: netbox/netbox/navigation/menu.py:181 msgid "Aggregates" msgstr "Aggregater" -#: ipam/tables/ip.py:125 +#: netbox/ipam/tables/ip.py:125 msgid "Added" msgstr "Tilføjet" -#: ipam/tables/ip.py:128 ipam/tables/ip.py:166 ipam/tables/vlans.py:142 -#: ipam/views.py:346 netbox/navigation/menu.py:165 -#: netbox/navigation/menu.py:167 templates/ipam/vlan.html:84 +#: 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 msgid "Prefixes" msgstr "Præfikser" -#: ipam/tables/ip.py:131 ipam/tables/ip.py:270 ipam/tables/ip.py:324 -#: ipam/tables/vlans.py:86 templates/dcim/device.html:260 -#: templates/ipam/aggregate.html:24 templates/ipam/iprange.html:29 -#: templates/ipam/prefix.html:106 +#: 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/templates/dcim/device.html:260 +#: netbox/templates/ipam/aggregate.html:24 +#: netbox/templates/ipam/iprange.html:29 netbox/templates/ipam/prefix.html:106 msgid "Utilization" msgstr "Udnyttelse" -#: ipam/tables/ip.py:171 netbox/navigation/menu.py:161 +#: netbox/ipam/tables/ip.py:171 netbox/netbox/navigation/menu.py:161 msgid "IP Ranges" msgstr "IP-intervaller" -#: ipam/tables/ip.py:221 +#: netbox/ipam/tables/ip.py:221 msgid "Prefix (Flat)" msgstr "Præfiks (flad)" -#: ipam/tables/ip.py:225 +#: netbox/ipam/tables/ip.py:225 msgid "Depth" msgstr "Dybde" -#: ipam/tables/ip.py:262 +#: netbox/ipam/tables/ip.py:262 msgid "Pool" msgstr "Svømmebassin" -#: ipam/tables/ip.py:266 ipam/tables/ip.py:320 +#: netbox/ipam/tables/ip.py:266 netbox/ipam/tables/ip.py:320 msgid "Marked Utilized" msgstr "Markeret Udnyttet" -#: ipam/tables/ip.py:304 +#: netbox/ipam/tables/ip.py:304 msgid "Start address" msgstr "Startadresse" -#: ipam/tables/ip.py:383 +#: netbox/ipam/tables/ip.py:383 msgid "NAT (Inside)" msgstr "NAT (indvendigt)" -#: ipam/tables/ip.py:388 +#: netbox/ipam/tables/ip.py:388 msgid "NAT (Outside)" msgstr "NAT (udenfor)" -#: ipam/tables/ip.py:393 +#: netbox/ipam/tables/ip.py:393 msgid "Assigned" msgstr "Tildelt" -#: ipam/tables/ip.py:429 templates/vpn/l2vpntermination.html:16 -#: vpn/forms/filtersets.py:240 +#: netbox/ipam/tables/ip.py:429 netbox/templates/vpn/l2vpntermination.html:16 +#: netbox/vpn/forms/filtersets.py:240 msgid "Assigned Object" msgstr "Tildelt objekt" -#: ipam/tables/vlans.py:68 +#: netbox/ipam/tables/vlans.py:68 msgid "Scope Type" msgstr "Områdetype" -#: ipam/tables/vlans.py:76 +#: netbox/ipam/tables/vlans.py:76 msgid "VID Ranges" msgstr "VID intervaller" -#: ipam/tables/vlans.py:111 ipam/tables/vlans.py:214 -#: templates/dcim/inc/interface_vlans_table.html:4 +#: netbox/ipam/tables/vlans.py:111 netbox/ipam/tables/vlans.py:214 +#: netbox/templates/dcim/inc/interface_vlans_table.html:4 msgid "VID" msgstr "VIDEO" -#: ipam/tables/vrfs.py:30 +#: netbox/ipam/tables/vrfs.py:30 msgid "RD" msgstr "RD" -#: ipam/tables/vrfs.py:33 +#: netbox/ipam/tables/vrfs.py:33 msgid "Unique" msgstr "Unik" -#: ipam/tables/vrfs.py:37 vpn/tables/l2vpn.py:27 +#: netbox/ipam/tables/vrfs.py:37 netbox/vpn/tables/l2vpn.py:27 msgid "Import Targets" msgstr "Importmål" -#: ipam/tables/vrfs.py:42 vpn/tables/l2vpn.py:32 +#: netbox/ipam/tables/vrfs.py:42 netbox/vpn/tables/l2vpn.py:32 msgid "Export Targets" msgstr "Eksportmål" -#: ipam/validators.py:9 +#: netbox/ipam/validators.py:9 #, python-brace-format msgid "{prefix} is not a valid prefix. Did you mean {suggested}?" msgstr "{prefix} er ikke et gyldigt præfiks. Mente du {suggested}?" -#: ipam/validators.py:16 +#: netbox/ipam/validators.py:16 #, python-format msgid "The prefix length must be less than or equal to %(limit_value)s." msgstr "Præfikslængden skal være mindre end eller lig med %(limit_value)s." -#: ipam/validators.py:24 +#: netbox/ipam/validators.py:24 #, python-format msgid "The prefix length must be greater than or equal to %(limit_value)s." msgstr "Præfikslængden skal være større end eller lig med %(limit_value)s." -#: ipam/validators.py:33 +#: netbox/ipam/validators.py:33 msgid "" "Only alphanumeric characters, asterisks, hyphens, periods, and underscores " "are allowed in DNS names" @@ -9783,31 +10459,31 @@ msgstr "" "Kun alfanumeriske tegn, stjerner, bindestreger, punktum og understregninger " "er tilladt i DNS-navne" -#: ipam/views.py:533 +#: netbox/ipam/views.py:533 msgid "Child Prefixes" msgstr "Børnepræfikser" -#: ipam/views.py:569 +#: netbox/ipam/views.py:569 msgid "Child Ranges" msgstr "Børneområder" -#: ipam/views.py:898 +#: netbox/ipam/views.py:898 msgid "Related IPs" msgstr "Relaterede IP'er" -#: ipam/views.py:1127 +#: netbox/ipam/views.py:1127 msgid "Device Interfaces" msgstr "Enhedsgrænseflader" -#: ipam/views.py:1145 +#: netbox/ipam/views.py:1145 msgid "VM Interfaces" msgstr "VM-grænseflader" -#: netbox/api/fields.py:65 +#: netbox/netbox/api/fields.py:65 msgid "This field may not be blank." msgstr "Dette felt må ikke være tomt." -#: netbox/api/fields.py:70 +#: netbox/netbox/api/fields.py:70 msgid "" "Value must be passed directly (e.g. \"foo\": 123); do not use a dictionary " "or list." @@ -9815,328 +10491,341 @@ msgstr "" "Værdien skal sendes direkte (f.eks. „foo“: 123); brug ikke en ordbog eller " "liste." -#: netbox/api/fields.py:91 +#: netbox/netbox/api/fields.py:91 #, python-brace-format msgid "{value} is not a valid choice." msgstr "{value} Det er ikke et gyldigt valg." -#: netbox/api/fields.py:104 +#: netbox/netbox/api/fields.py:104 #, python-brace-format msgid "Invalid content type: {content_type}" msgstr "Ugyldig indholdstype: {content_type}" -#: netbox/api/fields.py:105 +#: netbox/netbox/api/fields.py:105 msgid "Invalid value. Specify a content type as '.'." msgstr "Ugyldig værdi. Angiv en indholdstype som '.„." -#: netbox/api/fields.py:167 +#: netbox/netbox/api/fields.py:167 msgid "Ranges must be specified in the form (lower, upper)." msgstr "Intervaller skal specificeres i formularen (nedre, øvre)." -#: netbox/api/fields.py:169 +#: netbox/netbox/api/fields.py:169 msgid "Range boundaries must be defined as integers." msgstr "Områdegrænser skal defineres som heltal." -#: netbox/api/serializers/fields.py:40 +#: netbox/netbox/api/serializers/fields.py:40 #, python-brace-format msgid "{class_name} must implement get_view_name()" msgstr "{class_name} skal implementere get_view_name ()" -#: netbox/authentication/__init__.py:138 +#: netbox/netbox/authentication/__init__.py:138 #, python-brace-format msgid "Invalid permission {permission} for model {model}" msgstr "Ugyldig tilladelse {permission} til model {model}" -#: netbox/choices.py:49 +#: netbox/netbox/choices.py:49 msgid "Dark Red" msgstr "Mørk rød" -#: netbox/choices.py:52 +#: netbox/netbox/choices.py:52 msgid "Rose" msgstr "Rose" -#: netbox/choices.py:53 +#: netbox/netbox/choices.py:53 msgid "Fuchsia" msgstr "Fuchsia" -#: netbox/choices.py:55 +#: netbox/netbox/choices.py:55 msgid "Dark Purple" msgstr "Mørk lilla" -#: netbox/choices.py:58 +#: netbox/netbox/choices.py:58 msgid "Light Blue" msgstr "Lyseblå" -#: netbox/choices.py:61 +#: netbox/netbox/choices.py:61 msgid "Aqua" msgstr "Aqua" -#: netbox/choices.py:62 +#: netbox/netbox/choices.py:62 msgid "Dark Green" msgstr "Mørkegrøn" -#: netbox/choices.py:64 +#: netbox/netbox/choices.py:64 msgid "Light Green" msgstr "Lysegrøn" -#: netbox/choices.py:65 +#: netbox/netbox/choices.py:65 msgid "Lime" msgstr "Citron" -#: netbox/choices.py:67 +#: netbox/netbox/choices.py:67 msgid "Amber" msgstr "Rav" -#: netbox/choices.py:69 +#: netbox/netbox/choices.py:69 msgid "Dark Orange" msgstr "Mørk orange" -#: netbox/choices.py:70 +#: netbox/netbox/choices.py:70 msgid "Brown" msgstr "Brun" -#: netbox/choices.py:71 +#: netbox/netbox/choices.py:71 msgid "Light Grey" msgstr "Lysegrå" -#: netbox/choices.py:72 +#: netbox/netbox/choices.py:72 msgid "Grey" msgstr "Grå" -#: netbox/choices.py:73 +#: netbox/netbox/choices.py:73 msgid "Dark Grey" msgstr "Mørkegrå" -#: netbox/choices.py:128 +#: netbox/netbox/choices.py:128 msgid "Direct" msgstr "Direkte" -#: netbox/choices.py:129 +#: netbox/netbox/choices.py:129 msgid "Upload" msgstr "Upload" -#: netbox/choices.py:141 netbox/choices.py:155 +#: netbox/netbox/choices.py:141 netbox/netbox/choices.py:155 msgid "Auto-detect" msgstr "Automatisk registrering" -#: netbox/choices.py:156 +#: netbox/netbox/choices.py:156 msgid "Comma" msgstr "Komma" -#: netbox/choices.py:157 +#: netbox/netbox/choices.py:157 msgid "Semicolon" msgstr "Semikolon" -#: netbox/choices.py:158 +#: netbox/netbox/choices.py:158 msgid "Tab" msgstr "faneblad" -#: netbox/config/__init__.py:67 +#: netbox/netbox/config/__init__.py:67 #, python-brace-format msgid "Invalid configuration parameter: {item}" msgstr "Ugyldig konfigurationsparameter: {item}" -#: netbox/config/parameters.py:22 templates/core/inc/config_data.html:62 +#: netbox/netbox/config/parameters.py:22 +#: netbox/templates/core/inc/config_data.html:62 msgid "Login banner" msgstr "Login banner" -#: netbox/config/parameters.py:24 +#: netbox/netbox/config/parameters.py:24 msgid "Additional content to display on the login page" msgstr "Yderligere indhold, der skal vises på login-siden" -#: netbox/config/parameters.py:33 templates/core/inc/config_data.html:66 +#: netbox/netbox/config/parameters.py:33 +#: netbox/templates/core/inc/config_data.html:66 msgid "Maintenance banner" msgstr "Vedligeholdelsesbanner" -#: netbox/config/parameters.py:35 +#: netbox/netbox/config/parameters.py:35 msgid "Additional content to display when in maintenance mode" msgstr "" "Yderligere indhold, der skal vises, når du er i vedligeholdelsestilstand" -#: netbox/config/parameters.py:44 templates/core/inc/config_data.html:70 +#: netbox/netbox/config/parameters.py:44 +#: netbox/templates/core/inc/config_data.html:70 msgid "Top banner" msgstr "Top banner" -#: netbox/config/parameters.py:46 +#: netbox/netbox/config/parameters.py:46 msgid "Additional content to display at the top of every page" msgstr "Yderligere indhold, der skal vises øverst på hver side" -#: netbox/config/parameters.py:55 templates/core/inc/config_data.html:74 +#: netbox/netbox/config/parameters.py:55 +#: netbox/templates/core/inc/config_data.html:74 msgid "Bottom banner" msgstr "Nederste banner" -#: netbox/config/parameters.py:57 +#: netbox/netbox/config/parameters.py:57 msgid "Additional content to display at the bottom of every page" msgstr "Yderligere indhold, der skal vises nederst på hver side" -#: netbox/config/parameters.py:68 +#: netbox/netbox/config/parameters.py:68 msgid "Globally unique IP space" msgstr "Globalt unikt IP-rum" -#: netbox/config/parameters.py:70 +#: netbox/netbox/config/parameters.py:70 msgid "Enforce unique IP addressing within the global table" msgstr "Håndhæv unik IP-adressering i den globale tabel" -#: netbox/config/parameters.py:75 templates/core/inc/config_data.html:44 +#: netbox/netbox/config/parameters.py:75 +#: netbox/templates/core/inc/config_data.html:44 msgid "Prefer IPv4" msgstr "Foretrækker IPv4" -#: netbox/config/parameters.py:77 +#: netbox/netbox/config/parameters.py:77 msgid "Prefer IPv4 addresses over IPv6" msgstr "Foretrækker IPv4-adresser frem for IPv6" -#: netbox/config/parameters.py:84 +#: netbox/netbox/config/parameters.py:84 msgid "Rack unit height" msgstr "Rackenhedshøjde" -#: netbox/config/parameters.py:86 +#: netbox/netbox/config/parameters.py:86 msgid "Default unit height for rendered rack elevations" msgstr "Standard enhedshøjde for renderede rackhøjder" -#: netbox/config/parameters.py:91 +#: netbox/netbox/config/parameters.py:91 msgid "Rack unit width" msgstr "Rack-enhedens bredde" -#: netbox/config/parameters.py:93 +#: netbox/netbox/config/parameters.py:93 msgid "Default unit width for rendered rack elevations" msgstr "Standard enhedsbredde for renderede rackhøjder" -#: netbox/config/parameters.py:100 +#: netbox/netbox/config/parameters.py:100 msgid "Powerfeed voltage" msgstr "Strømforsyningsspænding" -#: netbox/config/parameters.py:102 +#: netbox/netbox/config/parameters.py:102 msgid "Default voltage for powerfeeds" msgstr "Standardspænding for strømforsyninger" -#: netbox/config/parameters.py:107 +#: netbox/netbox/config/parameters.py:107 msgid "Powerfeed amperage" msgstr "Strømforsyning strømstyrke" -#: netbox/config/parameters.py:109 +#: netbox/netbox/config/parameters.py:109 msgid "Default amperage for powerfeeds" msgstr "Standard strømstyrke for strømforsyninger" -#: netbox/config/parameters.py:114 +#: netbox/netbox/config/parameters.py:114 msgid "Powerfeed max utilization" msgstr "Maksimalt strømforbrug" -#: netbox/config/parameters.py:116 +#: netbox/netbox/config/parameters.py:116 msgid "Default max utilization for powerfeeds" msgstr "Standard maks. forbrug af strømforsyninger" -#: netbox/config/parameters.py:123 templates/core/inc/config_data.html:53 +#: netbox/netbox/config/parameters.py:123 +#: netbox/templates/core/inc/config_data.html:53 msgid "Allowed URL schemes" msgstr "Tilladte URL-skemaer" -#: netbox/config/parameters.py:128 +#: netbox/netbox/config/parameters.py:128 msgid "Permitted schemes for URLs in user-provided content" msgstr "Tilladte ordninger for webadresser i brugerangivet indhold" -#: netbox/config/parameters.py:136 +#: netbox/netbox/config/parameters.py:136 msgid "Default page size" msgstr "Standard sidestørrelse" -#: netbox/config/parameters.py:142 +#: netbox/netbox/config/parameters.py:142 msgid "Maximum page size" msgstr "Maksimal sidestørrelse" -#: netbox/config/parameters.py:150 templates/core/inc/config_data.html:96 +#: netbox/netbox/config/parameters.py:150 +#: netbox/templates/core/inc/config_data.html:96 msgid "Custom validators" msgstr "Brugerdefinerede validatorer" -#: netbox/config/parameters.py:152 +#: netbox/netbox/config/parameters.py:152 msgid "Custom validation rules (JSON)" msgstr "Brugerdefinerede valideringsregler (JSON)" -#: netbox/config/parameters.py:160 templates/core/inc/config_data.html:104 +#: netbox/netbox/config/parameters.py:160 +#: netbox/templates/core/inc/config_data.html:104 msgid "Protection rules" msgstr "Beskyttelsesregler" -#: netbox/config/parameters.py:162 +#: netbox/netbox/config/parameters.py:162 msgid "Deletion protection rules (JSON)" msgstr "Regler for beskyttelse mod sletning (JSON)" -#: netbox/config/parameters.py:172 templates/core/inc/config_data.html:117 +#: netbox/netbox/config/parameters.py:172 +#: netbox/templates/core/inc/config_data.html:117 msgid "Default preferences" msgstr "Standardindstillinger" -#: netbox/config/parameters.py:174 +#: netbox/netbox/config/parameters.py:174 msgid "Default preferences for new users" msgstr "Standardindstillinger for nye brugere" -#: netbox/config/parameters.py:181 templates/core/inc/config_data.html:129 +#: netbox/netbox/config/parameters.py:181 +#: netbox/templates/core/inc/config_data.html:129 msgid "Maintenance mode" msgstr "Vedligeholdelsestilstand" -#: netbox/config/parameters.py:183 +#: netbox/netbox/config/parameters.py:183 msgid "Enable maintenance mode" msgstr "Aktivér vedligeholdelsestilstand" -#: netbox/config/parameters.py:188 templates/core/inc/config_data.html:133 +#: netbox/netbox/config/parameters.py:188 +#: netbox/templates/core/inc/config_data.html:133 msgid "GraphQL enabled" msgstr "GraphQL aktiveret" -#: netbox/config/parameters.py:190 +#: netbox/netbox/config/parameters.py:190 msgid "Enable the GraphQL API" msgstr "Aktivér GraphQL API" -#: netbox/config/parameters.py:195 templates/core/inc/config_data.html:137 +#: netbox/netbox/config/parameters.py:195 +#: netbox/templates/core/inc/config_data.html:137 msgid "Changelog retention" msgstr "Opbevaring af ændringslog" -#: netbox/config/parameters.py:197 +#: netbox/netbox/config/parameters.py:197 msgid "Days to retain changelog history (set to zero for unlimited)" msgstr "" "Dage til at bevare changeloghistorik (indstillet til nul for ubegrænset)" -#: netbox/config/parameters.py:202 +#: netbox/netbox/config/parameters.py:202 msgid "Job result retention" msgstr "Bevaring af jobresultater" -#: netbox/config/parameters.py:204 +#: netbox/netbox/config/parameters.py:204 msgid "Days to retain job result history (set to zero for unlimited)" msgstr "" "Dage til opbevaring af jobresultathistorik (indstillet til nul for " "ubegrænset)" -#: netbox/config/parameters.py:209 templates/core/inc/config_data.html:145 +#: netbox/netbox/config/parameters.py:209 +#: netbox/templates/core/inc/config_data.html:145 msgid "Maps URL" msgstr "Kort URL" -#: netbox/config/parameters.py:211 +#: netbox/netbox/config/parameters.py:211 msgid "Base URL for mapping geographic locations" msgstr "Basis URL til kortlægning af geografiske placeringer" -#: netbox/forms/__init__.py:12 +#: netbox/netbox/forms/__init__.py:12 msgid "Partial match" msgstr "Delvis kamp" -#: netbox/forms/__init__.py:13 +#: netbox/netbox/forms/__init__.py:13 msgid "Exact match" msgstr "Præcis match" -#: netbox/forms/__init__.py:14 +#: netbox/netbox/forms/__init__.py:14 msgid "Starts with" msgstr "Begynder med" -#: netbox/forms/__init__.py:15 +#: netbox/netbox/forms/__init__.py:15 msgid "Ends with" msgstr "Slutter med" -#: netbox/forms/__init__.py:16 +#: netbox/netbox/forms/__init__.py:16 msgid "Regex" msgstr "Regex" -#: netbox/forms/__init__.py:34 +#: netbox/netbox/forms/__init__.py:34 msgid "Object type(s)" msgstr "Objekttype (er)" -#: netbox/forms/__init__.py:40 +#: netbox/netbox/forms/__init__.py:40 msgid "Lookup" msgstr "Opslag" -#: netbox/forms/base.py:90 +#: netbox/netbox/forms/base.py:90 msgid "" "Tag slugs separated by commas, encased with double quotes (e.g. " "\"tag1,tag2,tag3\")" @@ -10144,413 +10833,424 @@ msgstr "" "Tag slugs adskilt af kommaer, indkapslet med dobbelte anførselstegn (f.eks. " "„tag1, tag2, tag3\")" -#: netbox/forms/base.py:120 +#: netbox/netbox/forms/base.py:120 msgid "Add tags" msgstr "Tilføj tags" -#: netbox/forms/base.py:125 +#: netbox/netbox/forms/base.py:125 msgid "Remove tags" msgstr "Fjern tags" -#: netbox/forms/mixins.py:38 +#: netbox/netbox/forms/mixins.py:38 #, python-brace-format msgid "{class_name} must specify a model class." msgstr "{class_name} skal angive en modelklasse." -#: netbox/models/features.py:280 +#: netbox/netbox/models/features.py:280 #, python-brace-format msgid "Unknown field name '{name}' in custom field data." msgstr "Ukendt feltnavn '{name}'i brugerdefinerede feltdata." -#: netbox/models/features.py:286 +#: netbox/netbox/models/features.py:286 #, python-brace-format msgid "Invalid value for custom field '{name}': {error}" msgstr "Ugyldig værdi for brugerdefineret felt '{name}„: {error}" -#: netbox/models/features.py:295 +#: netbox/netbox/models/features.py:295 #, python-brace-format msgid "Custom field '{name}' must have a unique value." msgstr "Brugerdefineret felt '{name}“ skal have en unik værdi." -#: netbox/models/features.py:302 +#: netbox/netbox/models/features.py:302 #, python-brace-format msgid "Missing required custom field '{name}'." msgstr "Mangler påkrævet brugerdefineret felt '{name}„." -#: netbox/models/features.py:462 +#: netbox/netbox/models/features.py:462 msgid "Remote data source" msgstr "Fjerndatakilde" -#: netbox/models/features.py:472 +#: netbox/netbox/models/features.py:472 msgid "data path" msgstr "datastie" -#: netbox/models/features.py:476 +#: netbox/netbox/models/features.py:476 msgid "Path to remote file (relative to data source root)" msgstr "Sti til fjernfil (i forhold til datakildens rod)" -#: netbox/models/features.py:479 +#: netbox/netbox/models/features.py:479 msgid "auto sync enabled" msgstr "automatisk synkronisering aktiveret" -#: netbox/models/features.py:481 +#: netbox/netbox/models/features.py:481 msgid "Enable automatic synchronization of data when the data file is updated" msgstr "Aktivér automatisk synkronisering af data, når datafilen opdateres" -#: netbox/models/features.py:484 +#: netbox/netbox/models/features.py:484 msgid "date synced" msgstr "dato synkroniseret" -#: netbox/models/features.py:578 +#: netbox/netbox/models/features.py:578 #, python-brace-format msgid "{class_name} must implement a sync_data() method." msgstr "{class_name} skal implementere en sync_data () metode." -#: netbox/navigation/menu.py:11 +#: netbox/netbox/navigation/menu.py:11 msgid "Organization" msgstr "Organisation" -#: netbox/navigation/menu.py:19 +#: netbox/netbox/navigation/menu.py:19 msgid "Site Groups" msgstr "Områdegrupper" -#: netbox/navigation/menu.py:27 +#: netbox/netbox/navigation/menu.py:27 msgid "Tenant Groups" msgstr "Lejergrupper" -#: netbox/navigation/menu.py:34 +#: netbox/netbox/navigation/menu.py:34 msgid "Contact Groups" msgstr "Kontaktgrupper" -#: netbox/navigation/menu.py:35 templates/tenancy/contactrole.html:8 +#: netbox/netbox/navigation/menu.py:35 +#: netbox/templates/tenancy/contactrole.html:8 msgid "Contact Roles" msgstr "Kontaktroller" -#: netbox/navigation/menu.py:36 +#: netbox/netbox/navigation/menu.py:36 msgid "Contact Assignments" msgstr "Kontaktopgaver" -#: netbox/navigation/menu.py:50 +#: netbox/netbox/navigation/menu.py:50 msgid "Rack Roles" msgstr "Rackroller" -#: netbox/navigation/menu.py:54 +#: netbox/netbox/navigation/menu.py:54 msgid "Elevations" msgstr "Forhøjninger" -#: netbox/navigation/menu.py:60 netbox/navigation/menu.py:62 +#: netbox/netbox/navigation/menu.py:60 netbox/netbox/navigation/menu.py:62 msgid "Rack Types" msgstr "Racktyper" -#: netbox/navigation/menu.py:76 +#: netbox/netbox/navigation/menu.py:76 msgid "Modules" msgstr "Moduler" -#: netbox/navigation/menu.py:80 templates/dcim/device.html:160 -#: templates/dcim/virtualdevicecontext.html:8 +#: netbox/netbox/navigation/menu.py:80 netbox/templates/dcim/device.html:160 +#: netbox/templates/dcim/virtualdevicecontext.html:8 msgid "Virtual Device Contexts" msgstr "Virtuelle enhedskontekster" -#: netbox/navigation/menu.py:88 +#: netbox/netbox/navigation/menu.py:88 msgid "Manufacturers" msgstr "Producenter" -#: netbox/navigation/menu.py:92 +#: netbox/netbox/navigation/menu.py:92 msgid "Device Components" msgstr "Enhedskomponenter" -#: netbox/navigation/menu.py:104 templates/dcim/inventoryitemrole.html:8 +#: netbox/netbox/navigation/menu.py:104 +#: netbox/templates/dcim/inventoryitemrole.html:8 msgid "Inventory Item Roles" msgstr "Lagervareroller" -#: netbox/navigation/menu.py:111 netbox/navigation/menu.py:115 +#: netbox/netbox/navigation/menu.py:111 netbox/netbox/navigation/menu.py:115 msgid "Connections" msgstr "Forbindelser" -#: netbox/navigation/menu.py:117 +#: netbox/netbox/navigation/menu.py:117 msgid "Cables" msgstr "Kabler" -#: netbox/navigation/menu.py:118 +#: netbox/netbox/navigation/menu.py:118 msgid "Wireless Links" msgstr "Trådløse links" -#: netbox/navigation/menu.py:121 +#: netbox/netbox/navigation/menu.py:121 msgid "Interface Connections" msgstr "Grænsefladeforbindelser" -#: netbox/navigation/menu.py:126 +#: netbox/netbox/navigation/menu.py:126 msgid "Console Connections" msgstr "Konsolforbindelser" -#: netbox/navigation/menu.py:131 +#: netbox/netbox/navigation/menu.py:131 msgid "Power Connections" msgstr "Strømtilslutninger" -#: netbox/navigation/menu.py:147 +#: netbox/netbox/navigation/menu.py:147 msgid "Wireless LAN Groups" msgstr "Trådløse LAN-grupper" -#: netbox/navigation/menu.py:168 +#: netbox/netbox/navigation/menu.py:168 msgid "Prefix & VLAN Roles" msgstr "Præfiks- og VLAN-roller" -#: netbox/navigation/menu.py:174 +#: netbox/netbox/navigation/menu.py:174 msgid "ASN Ranges" msgstr "ASN-intervaller" -#: netbox/navigation/menu.py:196 +#: netbox/netbox/navigation/menu.py:196 msgid "VLAN Groups" msgstr "VLAN Grupper" -#: netbox/navigation/menu.py:203 +#: netbox/netbox/navigation/menu.py:203 msgid "Service Templates" msgstr "Serviceskabeloner" -#: netbox/navigation/menu.py:204 templates/dcim/device.html:302 -#: templates/ipam/ipaddress.html:118 -#: templates/virtualization/virtualmachine.html:154 +#: netbox/netbox/navigation/menu.py:204 netbox/templates/dcim/device.html:302 +#: netbox/templates/ipam/ipaddress.html:118 +#: netbox/templates/virtualization/virtualmachine.html:154 msgid "Services" msgstr "Serviceydelser" -#: netbox/navigation/menu.py:211 +#: netbox/netbox/navigation/menu.py:211 msgid "VPN" msgstr "VPN" -#: netbox/navigation/menu.py:215 netbox/navigation/menu.py:217 -#: vpn/tables/tunnels.py:24 +#: netbox/netbox/navigation/menu.py:215 netbox/netbox/navigation/menu.py:217 +#: netbox/vpn/tables/tunnels.py:24 msgid "Tunnels" msgstr "Tunneler" -#: netbox/navigation/menu.py:218 templates/vpn/tunnelgroup.html:8 +#: netbox/netbox/navigation/menu.py:218 +#: netbox/templates/vpn/tunnelgroup.html:8 msgid "Tunnel Groups" msgstr "Tunnelgrupper" -#: netbox/navigation/menu.py:219 +#: netbox/netbox/navigation/menu.py:219 msgid "Tunnel Terminations" msgstr "Tunnelafslutninger" -#: netbox/navigation/menu.py:223 netbox/navigation/menu.py:225 -#: vpn/models/l2vpn.py:64 +#: netbox/netbox/navigation/menu.py:223 netbox/netbox/navigation/menu.py:225 +#: netbox/vpn/models/l2vpn.py:64 msgid "L2VPNs" msgstr "L2VPN'er" -#: netbox/navigation/menu.py:226 templates/vpn/l2vpn.html:56 -#: templates/vpn/tunnel.html:72 vpn/tables/tunnels.py:58 +#: 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/navigation/menu.py:232 +#: netbox/netbox/navigation/menu.py:232 msgid "IKE Proposals" msgstr "IKE-forslag" -#: netbox/navigation/menu.py:233 templates/vpn/ikeproposal.html:41 +#: netbox/netbox/navigation/menu.py:233 +#: netbox/templates/vpn/ikeproposal.html:41 msgid "IKE Policies" msgstr "IKE politikker" -#: netbox/navigation/menu.py:234 +#: netbox/netbox/navigation/menu.py:234 msgid "IPSec Proposals" msgstr "IPsec-forslag" -#: netbox/navigation/menu.py:235 templates/vpn/ipsecproposal.html:37 +#: netbox/netbox/navigation/menu.py:235 +#: netbox/templates/vpn/ipsecproposal.html:37 msgid "IPSec Policies" msgstr "IPsec-politikker" -#: netbox/navigation/menu.py:236 templates/vpn/ikepolicy.html:38 -#: templates/vpn/ipsecpolicy.html:25 +#: netbox/netbox/navigation/menu.py:236 netbox/templates/vpn/ikepolicy.html:38 +#: netbox/templates/vpn/ipsecpolicy.html:25 msgid "IPSec Profiles" msgstr "IPsec-profiler" -#: netbox/navigation/menu.py:243 templates/dcim/device_edit.html:78 -msgid "Virtualization" -msgstr "Virtualisering" - -#: netbox/navigation/menu.py:251 -#: templates/virtualization/virtualmachine.html:174 -#: templates/virtualization/virtualmachine/base.html:32 -#: templates/virtualization/virtualmachine_list.html:21 -#: virtualization/tables/virtualmachines.py:104 virtualization/views.py:388 +#: netbox/netbox/navigation/menu.py:251 +#: 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 msgid "Virtual Disks" msgstr "Virtuelle diske" -#: netbox/navigation/menu.py:258 +#: netbox/netbox/navigation/menu.py:258 msgid "Cluster Types" msgstr "Klyngetyper" -#: netbox/navigation/menu.py:259 +#: netbox/netbox/navigation/menu.py:259 msgid "Cluster Groups" msgstr "Klyngegrupper" -#: netbox/navigation/menu.py:273 +#: netbox/netbox/navigation/menu.py:273 msgid "Circuit Types" msgstr "Kredsløbstyper" -#: netbox/navigation/menu.py:274 +#: netbox/netbox/navigation/menu.py:274 msgid "Circuit Groups" msgstr "Kredsløbsgrupper" -#: netbox/navigation/menu.py:275 templates/circuits/circuit.html:66 +#: netbox/netbox/navigation/menu.py:275 +#: netbox/templates/circuits/circuit.html:66 msgid "Group Assignments" msgstr "Gruppeopgaver" -#: netbox/navigation/menu.py:276 +#: netbox/netbox/navigation/menu.py:276 msgid "Circuit Terminations" msgstr "Kredsløbsafslutninger" -#: netbox/navigation/menu.py:280 netbox/navigation/menu.py:282 +#: netbox/netbox/navigation/menu.py:280 netbox/netbox/navigation/menu.py:282 msgid "Providers" msgstr "Leverandøre" -#: netbox/navigation/menu.py:283 templates/circuits/provider.html:51 +#: netbox/netbox/navigation/menu.py:283 +#: netbox/templates/circuits/provider.html:51 msgid "Provider Accounts" msgstr "Leverandørkonti" -#: netbox/navigation/menu.py:284 +#: netbox/netbox/navigation/menu.py:284 msgid "Provider Networks" msgstr "Leverandørnetværk" -#: netbox/navigation/menu.py:298 +#: netbox/netbox/navigation/menu.py:298 msgid "Power Panels" msgstr "Strømpaneler" -#: netbox/navigation/menu.py:309 +#: netbox/netbox/navigation/menu.py:309 msgid "Configurations" msgstr "Konfigurationer" -#: netbox/navigation/menu.py:311 +#: netbox/netbox/navigation/menu.py:311 msgid "Config Contexts" msgstr "Konfigurationskontekster" -#: netbox/navigation/menu.py:312 +#: netbox/netbox/navigation/menu.py:312 msgid "Config Templates" msgstr "Konfigurationsskabeloner" -#: netbox/navigation/menu.py:319 netbox/navigation/menu.py:323 +#: netbox/netbox/navigation/menu.py:319 netbox/netbox/navigation/menu.py:323 msgid "Customization" msgstr "Tilpasning" -#: netbox/navigation/menu.py:325 templates/dcim/device_edit.html:103 -#: templates/dcim/htmx/cable_edit.html:81 -#: templates/dcim/virtualchassis_add.html:31 -#: templates/dcim/virtualchassis_edit.html:40 -#: templates/generic/bulk_edit.html:76 templates/htmx/form.html:19 -#: templates/inc/filter_list.html:30 templates/inc/panels/custom_fields.html:7 -#: templates/ipam/ipaddress_bulk_add.html:35 templates/ipam/vlan_edit.html:59 +#: netbox/netbox/navigation/menu.py:325 +#: netbox/templates/dcim/device_edit.html:103 +#: netbox/templates/dcim/htmx/cable_edit.html:81 +#: netbox/templates/dcim/virtualchassis_add.html:31 +#: netbox/templates/dcim/virtualchassis_edit.html:40 +#: netbox/templates/generic/bulk_edit.html:76 +#: netbox/templates/htmx/form.html:19 netbox/templates/inc/filter_list.html:30 +#: netbox/templates/inc/panels/custom_fields.html:7 +#: netbox/templates/ipam/ipaddress_bulk_add.html:35 +#: netbox/templates/ipam/vlan_edit.html:59 msgid "Custom Fields" msgstr "Brugerdefinerede felter" -#: netbox/navigation/menu.py:326 +#: netbox/netbox/navigation/menu.py:326 msgid "Custom Field Choices" msgstr "Brugerdefinerede feltvalg" -#: netbox/navigation/menu.py:327 +#: netbox/netbox/navigation/menu.py:327 msgid "Custom Links" msgstr "Brugerdefinerede links" -#: netbox/navigation/menu.py:328 +#: netbox/netbox/navigation/menu.py:328 msgid "Export Templates" msgstr "Eksport skabeloner" -#: netbox/navigation/menu.py:329 +#: netbox/netbox/navigation/menu.py:329 msgid "Saved Filters" msgstr "Gemte filtre" -#: netbox/navigation/menu.py:331 +#: netbox/netbox/navigation/menu.py:331 msgid "Image Attachments" msgstr "Billedvedhæftede filer" -#: netbox/navigation/menu.py:349 +#: netbox/netbox/navigation/menu.py:349 msgid "Operations" msgstr "Operationer" -#: netbox/navigation/menu.py:353 +#: netbox/netbox/navigation/menu.py:353 msgid "Integrations" msgstr "Integrationer" -#: netbox/navigation/menu.py:355 +#: netbox/netbox/navigation/menu.py:355 msgid "Data Sources" msgstr "Datakilder" -#: netbox/navigation/menu.py:356 +#: netbox/netbox/navigation/menu.py:356 msgid "Event Rules" msgstr "Begivenhedsregler" -#: netbox/navigation/menu.py:357 +#: netbox/netbox/navigation/menu.py:357 msgid "Webhooks" msgstr "Webhooks" -#: netbox/navigation/menu.py:361 netbox/navigation/menu.py:365 -#: netbox/views/generic/feature_views.py:153 -#: templates/extras/report/base.html:37 templates/extras/script/base.html:36 +#: netbox/netbox/navigation/menu.py:361 netbox/netbox/navigation/menu.py:365 +#: netbox/netbox/views/generic/feature_views.py:153 +#: netbox/templates/extras/report/base.html:37 +#: netbox/templates/extras/script/base.html:36 msgid "Jobs" msgstr "Job" -#: netbox/navigation/menu.py:371 +#: netbox/netbox/navigation/menu.py:371 msgid "Logging" msgstr "Logning" -#: netbox/navigation/menu.py:373 +#: netbox/netbox/navigation/menu.py:373 msgid "Notification Groups" msgstr "Meddelelsesgrupper" -#: netbox/navigation/menu.py:374 +#: netbox/netbox/navigation/menu.py:374 msgid "Journal Entries" msgstr "Journalposter" -#: netbox/navigation/menu.py:375 templates/core/objectchange.html:9 -#: templates/core/objectchange_list.html:4 +#: netbox/netbox/navigation/menu.py:375 +#: netbox/templates/core/objectchange.html:9 +#: netbox/templates/core/objectchange_list.html:4 msgid "Change Log" msgstr "Ændringslog" -#: netbox/navigation/menu.py:382 templates/inc/user_menu.html:29 +#: netbox/netbox/navigation/menu.py:382 netbox/templates/inc/user_menu.html:29 msgid "Admin" msgstr "Administrator" -#: netbox/navigation/menu.py:430 templates/account/base.html:27 -#: templates/inc/user_menu.html:57 +#: netbox/netbox/navigation/menu.py:430 netbox/templates/account/base.html:27 +#: netbox/templates/inc/user_menu.html:57 msgid "API Tokens" msgstr "API-tokens" -#: netbox/navigation/menu.py:437 users/forms/model_forms.py:187 -#: users/forms/model_forms.py:195 users/forms/model_forms.py:242 -#: users/forms/model_forms.py:249 +#: netbox/netbox/navigation/menu.py:437 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/navigation/menu.py:445 netbox/navigation/menu.py:449 -#: templates/core/system.html:7 +#: netbox/netbox/navigation/menu.py:445 netbox/netbox/navigation/menu.py:449 +#: netbox/templates/core/system.html:7 msgid "System" msgstr "Systemet" -#: netbox/navigation/menu.py:454 netbox/navigation/menu.py:502 -#: templates/500.html:35 templates/account/preferences.html:22 -#: templates/core/plugin.html:13 templates/core/plugin_list.html:7 -#: templates/core/plugin_list.html:12 +#: netbox/netbox/navigation/menu.py:454 netbox/netbox/navigation/menu.py:502 +#: netbox/templates/500.html:35 netbox/templates/account/preferences.html:22 +#: netbox/templates/core/plugin.html:13 +#: netbox/templates/core/plugin_list.html:7 +#: netbox/templates/core/plugin_list.html:12 msgid "Plugins" msgstr "Plugins" -#: netbox/navigation/menu.py:459 +#: netbox/netbox/navigation/menu.py:459 msgid "Configuration History" msgstr "Konfigurationshistorik" -#: netbox/navigation/menu.py:465 templates/core/rq_task.html:8 -#: templates/core/rq_task_list.html:22 +#: netbox/netbox/navigation/menu.py:465 netbox/templates/core/rq_task.html:8 +#: netbox/templates/core/rq_task_list.html:22 msgid "Background Tasks" msgstr "Baggrundsopgaver" -#: netbox/plugins/navigation.py:47 netbox/plugins/navigation.py:69 +#: netbox/netbox/plugins/navigation.py:47 +#: netbox/netbox/plugins/navigation.py:69 msgid "Permissions must be passed as a tuple or list." msgstr "Tilladelser skal videregives som en tuple eller liste." -#: netbox/plugins/navigation.py:51 +#: netbox/netbox/plugins/navigation.py:51 msgid "Buttons must be passed as a tuple or list." msgstr "Knapper skal sendes som en tuple eller liste." -#: netbox/plugins/navigation.py:73 +#: netbox/netbox/plugins/navigation.py:73 msgid "Button color must be a choice within ButtonColorChoices." msgstr "Knapfarve skal være et valg inden for ButtonColorChoices." -#: netbox/plugins/registration.py:25 +#: netbox/netbox/plugins/registration.py:25 #, python-brace-format msgid "" "PluginTemplateExtension class {template_extension} was passed as an " @@ -10559,7 +11259,7 @@ msgstr "" "PluginTemplateExtension klasse {template_extension} blev vedtaget som en " "instans!" -#: netbox/plugins/registration.py:31 +#: netbox/netbox/plugins/registration.py:31 #, python-brace-format msgid "" "{template_extension} is not a subclass of " @@ -10568,194 +11268,195 @@ msgstr "" "{template_extension} er ikke en underklasse af " "Netbox.Plugins.PluginTemplateExtension!" -#: netbox/plugins/registration.py:51 +#: netbox/netbox/plugins/registration.py:51 #, 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/plugins/registration.py:62 +#: netbox/netbox/plugins/registration.py:62 #, 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/plugins/registration.py:67 +#: netbox/netbox/plugins/registration.py:67 #, python-brace-format msgid "{button} must be an instance of netbox.plugins.PluginMenuButton" msgstr "{button} skal være en forekomst af Netbox.Plugins.PluginMenuButton" -#: netbox/plugins/templates.py:37 +#: netbox/netbox/plugins/templates.py:37 msgid "extra_context must be a dictionary" msgstr "extra_context skal være en ordbog" -#: netbox/preferences.py:19 +#: netbox/netbox/preferences.py:19 msgid "HTMX Navigation" msgstr "HTMX Navigation" -#: netbox/preferences.py:24 +#: netbox/netbox/preferences.py:24 msgid "Enable dynamic UI navigation" msgstr "Aktivér dynamisk UI navigation" -#: netbox/preferences.py:26 +#: netbox/netbox/preferences.py:26 msgid "Experimental feature" msgstr "Eksperimentel funktion" -#: netbox/preferences.py:29 +#: netbox/netbox/preferences.py:29 msgid "Language" msgstr "Sprog" -#: netbox/preferences.py:34 +#: netbox/netbox/preferences.py:34 msgid "Forces UI translation to the specified language" msgstr "Tvinger UI oversættelse til det angivne sprog" -#: netbox/preferences.py:36 +#: netbox/netbox/preferences.py:36 msgid "Support for translation has been disabled locally" msgstr "Understøttelse af oversættelse er blevet deaktiveret lokalt" -#: netbox/preferences.py:42 +#: netbox/netbox/preferences.py:42 msgid "Page length" msgstr "Sidelængde" -#: netbox/preferences.py:44 +#: netbox/netbox/preferences.py:44 msgid "The default number of objects to display per page" msgstr "Standardantallet af objekter, der skal vises pr. side" -#: netbox/preferences.py:48 +#: netbox/netbox/preferences.py:48 msgid "Paginator placement" msgstr "Paginatorplacering" -#: netbox/preferences.py:50 +#: netbox/netbox/preferences.py:50 msgid "Bottom" msgstr "Nederst" -#: netbox/preferences.py:51 +#: netbox/netbox/preferences.py:51 msgid "Top" msgstr "Øverst" -#: netbox/preferences.py:52 +#: netbox/netbox/preferences.py:52 msgid "Both" msgstr "Begge dele" -#: netbox/preferences.py:55 +#: netbox/netbox/preferences.py:55 msgid "Where the paginator controls will be displayed relative to a table" msgstr "Hvor paginatorkontrolelementerne vises i forhold til en tabel" -#: netbox/preferences.py:60 +#: netbox/netbox/preferences.py:60 msgid "Data format" msgstr "Dataformat" -#: netbox/preferences.py:65 +#: netbox/netbox/preferences.py:65 msgid "The preferred syntax for displaying generic data within the UI" msgstr "" "Den foretrukne syntaks til visning af generiske data i brugergrænsefladen" -#: netbox/registry.py:14 +#: netbox/netbox/registry.py:14 #, python-brace-format msgid "Invalid store: {key}" msgstr "Ugyldig butik: {key}" -#: netbox/registry.py:17 +#: netbox/netbox/registry.py:17 msgid "Cannot add stores to registry after initialization" msgstr "" "Kan ikke tilføje butikker til registreringsdatabasen efter initialisering" -#: netbox/registry.py:20 +#: netbox/netbox/registry.py:20 msgid "Cannot delete stores from registry" msgstr "Kan ikke slette butikker fra registreringsdatabasen" -#: netbox/settings.py:760 +#: netbox/netbox/settings.py:760 msgid "Czech" msgstr "Tjekkisk" -#: netbox/settings.py:761 +#: netbox/netbox/settings.py:761 msgid "Danish" msgstr "dansk" -#: netbox/settings.py:762 +#: netbox/netbox/settings.py:762 msgid "German" msgstr "Tysk" -#: netbox/settings.py:763 +#: netbox/netbox/settings.py:763 msgid "English" msgstr "engelsk" -#: netbox/settings.py:764 +#: netbox/netbox/settings.py:764 msgid "Spanish" msgstr "spansk" -#: netbox/settings.py:765 +#: netbox/netbox/settings.py:765 msgid "French" msgstr "franskmænd" -#: netbox/settings.py:766 +#: netbox/netbox/settings.py:766 msgid "Italian" msgstr "Italiensk" -#: netbox/settings.py:767 +#: netbox/netbox/settings.py:767 msgid "Japanese" msgstr "Japansk" -#: netbox/settings.py:768 +#: netbox/netbox/settings.py:768 msgid "Dutch" msgstr "Hollandsk" -#: netbox/settings.py:769 +#: netbox/netbox/settings.py:769 msgid "Polish" msgstr "Polere" -#: netbox/settings.py:770 +#: netbox/netbox/settings.py:770 msgid "Portuguese" msgstr "portugisisk" -#: netbox/settings.py:771 +#: netbox/netbox/settings.py:771 msgid "Russian" msgstr "Russisk" -#: netbox/settings.py:772 +#: netbox/netbox/settings.py:772 msgid "Turkish" msgstr "Tyrkisk" -#: netbox/settings.py:773 +#: netbox/netbox/settings.py:773 msgid "Ukrainian" msgstr "Ukrainsk" -#: netbox/settings.py:774 +#: netbox/netbox/settings.py:774 msgid "Chinese" msgstr "kinesisk" -#: netbox/tables/columns.py:176 +#: netbox/netbox/tables/columns.py:176 msgid "Select all" msgstr "Vælg alle" -#: netbox/tables/columns.py:189 +#: netbox/netbox/tables/columns.py:189 msgid "Toggle all" msgstr "Skift alle" -#: netbox/tables/columns.py:300 +#: netbox/netbox/tables/columns.py:300 msgid "Toggle Dropdown" msgstr "Skift rullemenuen" -#: netbox/tables/columns.py:572 templates/core/job.html:53 +#: netbox/netbox/tables/columns.py:572 netbox/templates/core/job.html:53 msgid "Error" msgstr "Fejl" -#: netbox/tables/tables.py:58 +#: netbox/netbox/tables/tables.py:58 #, python-brace-format msgid "No {model_name} found" msgstr "Nej {model_name} fundet" -#: netbox/tables/tables.py:249 templates/generic/bulk_import.html:117 +#: netbox/netbox/tables/tables.py:249 +#: netbox/templates/generic/bulk_import.html:117 msgid "Field" msgstr "Mark" -#: netbox/tables/tables.py:252 +#: netbox/netbox/tables/tables.py:252 msgid "Value" msgstr "Værdi" -#: netbox/tests/dummy_plugin/navigation.py:29 +#: netbox/netbox/tests/dummy_plugin/navigation.py:29 msgid "Dummy Plugin" msgstr "Dummy-plugin" -#: netbox/views/generic/bulk_views.py:114 +#: netbox/netbox/views/generic/bulk_views.py:114 #, python-brace-format msgid "" "There was an error rendering the selected export template ({template}): " @@ -10764,56 +11465,56 @@ msgstr "" "Der opstod en fejl ved gengivelse af den valgte eksportskabelon " "({template}): {error}" -#: netbox/views/generic/bulk_views.py:416 +#: netbox/netbox/views/generic/bulk_views.py:416 #, python-brace-format msgid "Row {i}: Object with ID {id} does not exist" msgstr "Række {i}: Objekt med ID {id} findes ikke" -#: netbox/views/generic/bulk_views.py:702 -#: netbox/views/generic/bulk_views.py:900 -#: netbox/views/generic/bulk_views.py:948 +#: netbox/netbox/views/generic/bulk_views.py:709 +#: netbox/netbox/views/generic/bulk_views.py:910 +#: netbox/netbox/views/generic/bulk_views.py:958 #, python-brace-format msgid "No {object_type} were selected." msgstr "Nej {object_type} blev udvalgt." -#: netbox/views/generic/bulk_views.py:782 +#: netbox/netbox/views/generic/bulk_views.py:788 #, python-brace-format msgid "Renamed {count} {object_type}" msgstr "Omdøbt {count} {object_type}" -#: netbox/views/generic/bulk_views.py:878 +#: netbox/netbox/views/generic/bulk_views.py:888 #, python-brace-format msgid "Deleted {count} {object_type}" msgstr "Slettet {count} {object_type}" -#: netbox/views/generic/feature_views.py:40 +#: netbox/netbox/views/generic/feature_views.py:40 msgid "Changelog" msgstr "Ændringslog" -#: netbox/views/generic/feature_views.py:93 +#: netbox/netbox/views/generic/feature_views.py:93 msgid "Journal" msgstr "Tidsskrift" -#: netbox/views/generic/feature_views.py:207 +#: netbox/netbox/views/generic/feature_views.py:207 msgid "Unable to synchronize data: No data file set." msgstr "Kan ikke synkronisere data: Der er ikke angivet nogen datafil." -#: netbox/views/generic/feature_views.py:211 +#: netbox/netbox/views/generic/feature_views.py:211 #, python-brace-format msgid "Synchronized data for {object_type} {object}." msgstr "Synkroniserede data for {object_type} {object}." -#: netbox/views/generic/feature_views.py:236 +#: netbox/netbox/views/generic/feature_views.py:236 #, python-brace-format msgid "Synced {count} {object_type}" msgstr "Synkroniseret {count} {object_type}" -#: netbox/views/generic/object_views.py:108 +#: netbox/netbox/views/generic/object_views.py:108 #, python-brace-format msgid "{class_name} must implement get_children()" msgstr "{class_name} skal implementere get_children ()" -#: netbox/views/misc.py:44 +#: netbox/netbox/views/misc.py:46 msgid "" "There was an error loading the dashboard configuration. A default dashboard " "is in use." @@ -10821,703 +11522,745 @@ msgstr "" "Der opstod en fejl ved indlæsning af instrumentbrætkonfigurationen. Et " "standarddashboard er i brug." -#: templates/403.html:4 +#: netbox/templates/403.html:4 msgid "Access Denied" msgstr "Adgang nægtet" -#: templates/403.html:9 +#: netbox/templates/403.html:9 msgid "You do not have permission to access this page" msgstr "Du har ikke tilladelse til at få adgang til denne side" -#: templates/404.html:4 +#: netbox/templates/404.html:4 msgid "Page Not Found" msgstr "Siden blev ikke fundet" -#: templates/404.html:9 +#: netbox/templates/404.html:9 msgid "The requested page does not exist" msgstr "Den ønskede side findes ikke" -#: templates/500.html:7 templates/500.html:18 +#: netbox/templates/500.html:7 netbox/templates/500.html:18 msgid "Server Error" msgstr "Serverfejl" -#: templates/500.html:23 +#: netbox/templates/500.html:23 msgid "There was a problem with your request. Please contact an administrator" msgstr "Der opstod et problem med din anmodning. Kontakt en administrator" -#: templates/500.html:28 +#: netbox/templates/500.html:28 msgid "The complete exception is provided below" msgstr "Den fuldstændige undtagelse er angivet nedenfor" -#: templates/500.html:33 templates/core/system.html:40 +#: netbox/templates/500.html:33 netbox/templates/core/system.html:40 msgid "Python version" msgstr "Python-version" -#: templates/500.html:34 +#: netbox/templates/500.html:34 msgid "NetBox version" msgstr "NetBox-version" -#: templates/500.html:36 +#: netbox/templates/500.html:36 msgid "None installed" msgstr "Ingen installeret" -#: templates/500.html:39 +#: netbox/templates/500.html:39 msgid "If further assistance is required, please post to the" msgstr "Hvis der er behov for yderligere hjælp, bedes du sende til" -#: templates/500.html:39 +#: netbox/templates/500.html:39 msgid "NetBox discussion forum" msgstr "NetBox diskussionsforum" -#: templates/500.html:39 +#: netbox/templates/500.html:39 msgid "on GitHub" msgstr "på GitHub" -#: templates/500.html:42 templates/base/40x.html:17 +#: netbox/templates/500.html:42 netbox/templates/base/40x.html:17 msgid "Home Page" msgstr "Hjemmesiden" -#: templates/account/base.html:7 templates/inc/user_menu.html:45 -#: vpn/forms/bulk_edit.py:255 vpn/forms/filtersets.py:189 -#: vpn/forms/model_forms.py:379 +#: netbox/templates/account/base.html:7 netbox/templates/inc/user_menu.html:45 +#: netbox/vpn/forms/bulk_edit.py:255 netbox/vpn/forms/filtersets.py:189 +#: netbox/vpn/forms/model_forms.py:379 msgid "Profile" msgstr "Profil" -#: templates/account/base.html:13 templates/account/notifications.html:7 -#: templates/inc/user_menu.html:15 +#: netbox/templates/account/base.html:13 +#: netbox/templates/account/notifications.html:7 +#: netbox/templates/inc/user_menu.html:15 msgid "Notifications" msgstr "Meddelelser" -#: templates/account/base.html:16 templates/account/subscriptions.html:7 -#: templates/inc/user_menu.html:51 +#: netbox/templates/account/base.html:16 +#: netbox/templates/account/subscriptions.html:7 +#: netbox/templates/inc/user_menu.html:51 msgid "Subscriptions" msgstr "Abonnementer" -#: templates/account/base.html:19 templates/inc/user_menu.html:54 +#: netbox/templates/account/base.html:19 +#: netbox/templates/inc/user_menu.html:54 msgid "Preferences" msgstr "Præferencer" -#: templates/account/password.html:5 +#: netbox/templates/account/password.html:5 msgid "Change Password" msgstr "Skift adgangskode" -#: templates/account/password.html:19 templates/account/preferences.html:77 -#: templates/core/configrevision_restore.html:63 -#: templates/dcim/devicebay_populate.html:34 -#: templates/dcim/virtualchassis_add_member.html:26 -#: templates/dcim/virtualchassis_edit.html:103 -#: templates/extras/object_journal.html:26 templates/extras/script.html:38 -#: templates/generic/bulk_add_component.html:67 -#: templates/generic/bulk_delete.html:65 templates/generic/bulk_edit.html:106 -#: templates/generic/bulk_import.html:56 templates/generic/bulk_import.html:78 -#: templates/generic/bulk_import.html:100 -#: templates/generic/bulk_remove.html:62 templates/generic/bulk_rename.html:63 -#: templates/generic/confirmation_form.html:19 -#: templates/generic/object_edit.html:72 templates/htmx/delete_form.html:53 -#: templates/htmx/delete_form.html:55 templates/ipam/ipaddress_assign.html:28 -#: templates/virtualization/cluster_add_devices.html:30 +#: netbox/templates/account/password.html:19 +#: netbox/templates/account/preferences.html:77 +#: netbox/templates/core/configrevision_restore.html:63 +#: netbox/templates/dcim/devicebay_populate.html:34 +#: netbox/templates/dcim/virtualchassis_add_member.html:26 +#: netbox/templates/dcim/virtualchassis_edit.html:103 +#: netbox/templates/extras/object_journal.html:26 +#: netbox/templates/extras/script.html:38 +#: netbox/templates/generic/bulk_add_component.html:67 +#: netbox/templates/generic/bulk_delete.html:65 +#: netbox/templates/generic/bulk_edit.html:106 +#: netbox/templates/generic/bulk_import.html:56 +#: netbox/templates/generic/bulk_import.html:78 +#: netbox/templates/generic/bulk_import.html:100 +#: netbox/templates/generic/bulk_remove.html:62 +#: netbox/templates/generic/bulk_rename.html:63 +#: netbox/templates/generic/confirmation_form.html:19 +#: netbox/templates/generic/object_edit.html:72 +#: netbox/templates/htmx/delete_form.html:53 +#: netbox/templates/htmx/delete_form.html:55 +#: netbox/templates/ipam/ipaddress_assign.html:28 +#: netbox/templates/virtualization/cluster_add_devices.html:30 msgid "Cancel" msgstr "Annuller" -#: templates/account/password.html:20 templates/account/preferences.html:78 -#: templates/dcim/devicebay_populate.html:35 -#: templates/dcim/virtualchassis_add_member.html:28 -#: templates/dcim/virtualchassis_edit.html:105 -#: templates/extras/dashboard/widget_add.html:26 -#: templates/extras/dashboard/widget_config.html:19 -#: templates/extras/object_journal.html:27 -#: templates/generic/object_edit.html:75 -#: utilities/templates/helpers/applied_filters.html:16 -#: utilities/templates/helpers/table_config_form.html:40 +#: netbox/templates/account/password.html:20 +#: netbox/templates/account/preferences.html:78 +#: netbox/templates/dcim/devicebay_populate.html:35 +#: netbox/templates/dcim/virtualchassis_add_member.html:28 +#: netbox/templates/dcim/virtualchassis_edit.html:105 +#: netbox/templates/extras/dashboard/widget_add.html:26 +#: netbox/templates/extras/dashboard/widget_config.html:19 +#: netbox/templates/extras/object_journal.html:27 +#: netbox/templates/generic/object_edit.html:75 +#: netbox/utilities/templates/helpers/applied_filters.html:16 +#: netbox/utilities/templates/helpers/table_config_form.html:40 msgid "Save" msgstr "Gem" -#: templates/account/preferences.html:34 +#: netbox/templates/account/preferences.html:34 msgid "Table Configurations" msgstr "Tabelkonfigurationer" -#: templates/account/preferences.html:39 +#: netbox/templates/account/preferences.html:39 msgid "Clear table preferences" msgstr "Ryd tabelindstillinger" -#: templates/account/preferences.html:47 +#: netbox/templates/account/preferences.html:47 msgid "Toggle All" msgstr "Skift alle" -#: templates/account/preferences.html:49 +#: netbox/templates/account/preferences.html:49 msgid "Table" msgstr "Tabel" -#: templates/account/preferences.html:50 +#: netbox/templates/account/preferences.html:50 msgid "Ordering" msgstr "Bestilling" -#: templates/account/preferences.html:51 +#: netbox/templates/account/preferences.html:51 msgid "Columns" msgstr "Kolonner" -#: templates/account/preferences.html:71 templates/dcim/cable_trace.html:113 -#: templates/extras/object_configcontext.html:43 +#: netbox/templates/account/preferences.html:71 +#: netbox/templates/dcim/cable_trace.html:113 +#: netbox/templates/extras/object_configcontext.html:43 msgid "None found" msgstr "Ingen fundet" -#: templates/account/profile.html:6 +#: netbox/templates/account/profile.html:6 msgid "User Profile" msgstr "Brugerprofil" -#: templates/account/profile.html:12 +#: netbox/templates/account/profile.html:12 msgid "Account Details" msgstr "Kontooplysninger" -#: templates/account/profile.html:29 templates/tenancy/contact.html:43 -#: templates/users/user.html:25 tenancy/forms/bulk_edit.py:109 +#: netbox/templates/account/profile.html:29 +#: netbox/templates/tenancy/contact.html:43 +#: netbox/templates/users/user.html:25 netbox/tenancy/forms/bulk_edit.py:109 msgid "Email" msgstr "E-mail" -#: templates/account/profile.html:33 templates/users/user.html:29 +#: netbox/templates/account/profile.html:33 +#: netbox/templates/users/user.html:29 msgid "Account Created" msgstr "Konto oprettet" -#: templates/account/profile.html:37 templates/users/user.html:33 +#: netbox/templates/account/profile.html:37 +#: netbox/templates/users/user.html:33 msgid "Last Login" msgstr "Sidste login" -#: templates/account/profile.html:41 templates/users/user.html:45 +#: netbox/templates/account/profile.html:41 +#: netbox/templates/users/user.html:45 msgid "Superuser" msgstr "Superbruger" -#: templates/account/profile.html:45 templates/inc/user_menu.html:31 -#: templates/users/user.html:41 +#: netbox/templates/account/profile.html:45 +#: netbox/templates/inc/user_menu.html:31 netbox/templates/users/user.html:41 msgid "Staff" msgstr "Personale" -#: templates/account/profile.html:53 templates/users/objectpermission.html:82 -#: templates/users/user.html:53 +#: netbox/templates/account/profile.html:53 +#: netbox/templates/users/objectpermission.html:82 +#: netbox/templates/users/user.html:53 msgid "Assigned Groups" msgstr "Tildelte grupper" -#: templates/account/profile.html:58 -#: templates/circuits/circuit_terminations_swap.html:18 -#: templates/circuits/circuit_terminations_swap.html:26 -#: templates/circuits/circuittermination.html:34 -#: templates/circuits/inc/circuit_termination.html:68 -#: templates/core/objectchange.html:124 templates/core/objectchange.html:142 -#: templates/dcim/devicebay.html:59 -#: templates/dcim/inc/panels/inventory_items.html:45 -#: templates/dcim/interface.html:296 templates/dcim/modulebay.html:80 -#: templates/extras/configcontext.html:70 templates/extras/eventrule.html:66 -#: templates/extras/htmx/script_result.html:60 -#: templates/extras/webhook.html:65 templates/extras/webhook.html:75 -#: templates/inc/panel_table.html:13 templates/inc/panels/comments.html:10 -#: templates/ipam/inc/panels/fhrp_groups.html:56 templates/users/group.html:34 -#: templates/users/group.html:44 templates/users/objectpermission.html:77 -#: templates/users/objectpermission.html:87 templates/users/user.html:58 -#: templates/users/user.html:68 +#: netbox/templates/account/profile.html:58 +#: netbox/templates/circuits/circuit_terminations_swap.html:18 +#: netbox/templates/circuits/circuit_terminations_swap.html:26 +#: netbox/templates/circuits/circuittermination.html:34 +#: netbox/templates/circuits/inc/circuit_termination.html:68 +#: netbox/templates/core/objectchange.html:124 +#: 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/modulebay.html:80 +#: netbox/templates/extras/configcontext.html:70 +#: netbox/templates/extras/eventrule.html:66 +#: netbox/templates/extras/htmx/script_result.html:60 +#: netbox/templates/extras/webhook.html:65 +#: netbox/templates/extras/webhook.html:75 +#: netbox/templates/inc/panel_table.html:13 +#: netbox/templates/inc/panels/comments.html:10 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:56 +#: netbox/templates/users/group.html:34 netbox/templates/users/group.html:44 +#: netbox/templates/users/objectpermission.html:77 +#: netbox/templates/users/objectpermission.html:87 +#: netbox/templates/users/user.html:58 netbox/templates/users/user.html:68 msgid "None" msgstr "Ingen" -#: templates/account/profile.html:68 templates/users/user.html:78 +#: netbox/templates/account/profile.html:68 +#: netbox/templates/users/user.html:78 msgid "Recent Activity" msgstr "Seneste aktivitet" -#: templates/account/token.html:8 templates/account/token_list.html:6 +#: netbox/templates/account/token.html:8 +#: netbox/templates/account/token_list.html:6 msgid "My API Tokens" msgstr "Mine API-tokens" -#: templates/account/token.html:11 templates/account/token.html:19 -#: templates/users/token.html:6 templates/users/token.html:14 -#: users/forms/filtersets.py:120 +#: netbox/templates/account/token.html:11 +#: netbox/templates/account/token.html:19 netbox/templates/users/token.html:6 +#: netbox/templates/users/token.html:14 netbox/users/forms/filtersets.py:120 msgid "Token" msgstr "Token" -#: templates/account/token.html:39 templates/users/token.html:31 -#: users/forms/bulk_edit.py:107 +#: netbox/templates/account/token.html:39 netbox/templates/users/token.html:31 +#: netbox/users/forms/bulk_edit.py:107 msgid "Write enabled" msgstr "Skriv aktiveret" -#: templates/account/token.html:51 templates/users/token.html:43 +#: netbox/templates/account/token.html:51 netbox/templates/users/token.html:43 msgid "Last used" msgstr "Sidst brugt" -#: templates/account/token_list.html:12 +#: netbox/templates/account/token_list.html:12 msgid "Add a Token" msgstr "Tilføj en token" -#: templates/base/base.html:22 templates/home.html:27 +#: netbox/templates/base/base.html:22 netbox/templates/home.html:27 msgid "Home" msgstr "Hjem" -#: templates/base/layout.html:25 +#: netbox/templates/base/layout.html:25 msgid "NetBox Motif" msgstr "NetBox Motiv" -#: templates/base/layout.html:38 templates/base/layout.html:39 -#: templates/login.html:14 templates/login.html:15 +#: netbox/templates/base/layout.html:38 netbox/templates/base/layout.html:39 +#: netbox/templates/login.html:14 netbox/templates/login.html:15 msgid "NetBox Logo" msgstr "NetBox-logoet" -#: templates/base/layout.html:150 templates/base/layout.html:151 +#: netbox/templates/base/layout.html:150 netbox/templates/base/layout.html:151 msgid "Docs" msgstr "Dokumenter" -#: templates/base/layout.html:156 templates/base/layout.html:157 -#: templates/rest_framework/api.html:10 +#: netbox/templates/base/layout.html:156 netbox/templates/base/layout.html:157 +#: netbox/templates/rest_framework/api.html:10 msgid "REST API" msgstr "REST API" -#: templates/base/layout.html:162 templates/base/layout.html:163 +#: netbox/templates/base/layout.html:162 netbox/templates/base/layout.html:163 msgid "REST API documentation" msgstr "REST API-dokumentation" -#: templates/base/layout.html:169 templates/base/layout.html:170 +#: netbox/templates/base/layout.html:169 netbox/templates/base/layout.html:170 msgid "GraphQL API" msgstr "GraphQL-API" -#: templates/base/layout.html:185 templates/base/layout.html:186 +#: netbox/templates/base/layout.html:185 netbox/templates/base/layout.html:186 msgid "NetBox Labs Support" msgstr "NetBox Labs Support" -#: templates/base/layout.html:194 templates/base/layout.html:195 +#: netbox/templates/base/layout.html:194 netbox/templates/base/layout.html:195 msgid "Source Code" msgstr "Kildekode" -#: templates/base/layout.html:200 templates/base/layout.html:201 +#: netbox/templates/base/layout.html:200 netbox/templates/base/layout.html:201 msgid "Community" msgstr "Fællesskab" -#: templates/circuits/circuit.html:47 +#: netbox/templates/circuits/circuit.html:47 msgid "Install Date" msgstr "Installationsdato" -#: templates/circuits/circuit.html:51 +#: netbox/templates/circuits/circuit.html:51 msgid "Termination Date" msgstr "Opsigelsesdato" -#: templates/circuits/circuit.html:70 -#: templates/ipam/inc/panels/fhrp_groups.html:15 +#: netbox/templates/circuits/circuit.html:70 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:15 msgid "Assign Group" msgstr "Tildel gruppe" -#: templates/circuits/circuit_terminations_swap.html:4 +#: netbox/templates/circuits/circuit_terminations_swap.html:4 msgid "Swap Circuit Terminations" msgstr "Udskiftningskredsløbsafslutninger" -#: templates/circuits/circuit_terminations_swap.html:8 +#: netbox/templates/circuits/circuit_terminations_swap.html:8 #, python-format msgid "Swap these terminations for circuit %(circuit)s?" msgstr "Byt disse afslutninger til kredsløb %(circuit)s?" -#: templates/circuits/circuit_terminations_swap.html:14 +#: netbox/templates/circuits/circuit_terminations_swap.html:14 msgid "A side" msgstr "En side" -#: templates/circuits/circuit_terminations_swap.html:22 +#: netbox/templates/circuits/circuit_terminations_swap.html:22 msgid "Z side" msgstr "Z-siden" -#: templates/circuits/circuitgroup.html:16 +#: netbox/templates/circuits/circuitgroup.html:16 msgid "Assign Circuit" msgstr "Tildel kredsløb" -#: templates/circuits/circuitgroupassignment.html:19 +#: netbox/templates/circuits/circuitgroupassignment.html:19 msgid "Circuit Group Assignment" msgstr "Kredsløbsgruppetildeling" -#: templates/circuits/circuittype.html:10 +#: netbox/templates/circuits/circuittype.html:10 msgid "Add Circuit" msgstr "Tilføj kredsløb" -#: templates/circuits/circuittype.html:19 +#: netbox/templates/circuits/circuittype.html:19 msgid "Circuit Type" msgstr "Kredsløbstype" -#: templates/circuits/inc/circuit_termination.html:10 -#: templates/dcim/manufacturer.html:11 -#: templates/generic/bulk_add_component.html:22 -#: templates/users/objectpermission.html:38 -#: utilities/templates/buttons/add.html:4 -#: utilities/templates/helpers/table_config_form.html:20 +#: netbox/templates/circuits/inc/circuit_termination.html:10 +#: netbox/templates/dcim/manufacturer.html:11 +#: netbox/templates/generic/bulk_add_component.html:22 +#: netbox/templates/users/objectpermission.html:38 +#: netbox/utilities/templates/buttons/add.html:4 +#: netbox/utilities/templates/helpers/table_config_form.html:20 msgid "Add" msgstr "Tilføj" -#: templates/circuits/inc/circuit_termination.html:15 -#: templates/circuits/inc/circuit_termination_fields.html:36 -#: templates/dcim/inc/panels/inventory_items.html:32 -#: templates/dcim/powerpanel.html:56 templates/extras/script_list.html:30 -#: templates/generic/object_edit.html:47 -#: templates/ipam/inc/ipaddress_edit_header.html:7 -#: templates/ipam/inc/panels/fhrp_groups.html:43 -#: utilities/templates/buttons/edit.html:3 +#: netbox/templates/circuits/inc/circuit_termination.html:15 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:36 +#: netbox/templates/dcim/inc/panels/inventory_items.html:32 +#: netbox/templates/dcim/powerpanel.html:56 +#: netbox/templates/extras/script_list.html:30 +#: netbox/templates/generic/object_edit.html:47 +#: netbox/templates/ipam/inc/ipaddress_edit_header.html:7 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:43 +#: netbox/utilities/templates/buttons/edit.html:3 msgid "Edit" msgstr "Rediger" -#: templates/circuits/inc/circuit_termination.html:18 +#: netbox/templates/circuits/inc/circuit_termination.html:18 msgid "Swap" msgstr "Bytte" -#: templates/circuits/inc/circuit_termination_fields.html:19 -#: templates/dcim/consoleport.html:59 templates/dcim/consoleserverport.html:60 -#: templates/dcim/powerfeed.html:114 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:19 +#: netbox/templates/dcim/consoleport.html:59 +#: netbox/templates/dcim/consoleserverport.html:60 +#: netbox/templates/dcim/powerfeed.html:114 msgid "Marked as connected" msgstr "Markeret som tilsluttet" -#: templates/circuits/inc/circuit_termination_fields.html:21 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:21 msgid "to" msgstr "til" -#: templates/circuits/inc/circuit_termination_fields.html:31 -#: templates/circuits/inc/circuit_termination_fields.html:32 -#: templates/dcim/frontport.html:80 -#: templates/dcim/inc/connection_endpoints.html:7 -#: templates/dcim/interface.html:154 templates/dcim/rearport.html:76 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:31 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:32 +#: netbox/templates/dcim/frontport.html:80 +#: netbox/templates/dcim/inc/connection_endpoints.html:7 +#: netbox/templates/dcim/interface.html:154 +#: netbox/templates/dcim/rearport.html:76 msgid "Trace" msgstr "Spor" -#: templates/circuits/inc/circuit_termination_fields.html:35 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:35 msgid "Edit cable" msgstr "Rediger kabel" -#: templates/circuits/inc/circuit_termination_fields.html:40 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:40 msgid "Remove cable" msgstr "Fjern kablet" -#: templates/circuits/inc/circuit_termination_fields.html:41 -#: templates/dcim/bulk_disconnect.html:5 -#: templates/dcim/device/consoleports.html:12 -#: templates/dcim/device/consoleserverports.html:12 -#: templates/dcim/device/frontports.html:12 -#: templates/dcim/device/interfaces.html:16 -#: templates/dcim/device/poweroutlets.html:12 -#: templates/dcim/device/powerports.html:12 -#: templates/dcim/device/rearports.html:12 templates/dcim/powerpanel.html:61 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:41 +#: netbox/templates/dcim/bulk_disconnect.html:5 +#: netbox/templates/dcim/device/consoleports.html:12 +#: netbox/templates/dcim/device/consoleserverports.html:12 +#: netbox/templates/dcim/device/frontports.html:12 +#: netbox/templates/dcim/device/interfaces.html:16 +#: netbox/templates/dcim/device/poweroutlets.html:12 +#: netbox/templates/dcim/device/powerports.html:12 +#: netbox/templates/dcim/device/rearports.html:12 +#: netbox/templates/dcim/powerpanel.html:61 msgid "Disconnect" msgstr "Afbryd forbindelsen" -#: templates/circuits/inc/circuit_termination_fields.html:48 -#: templates/dcim/consoleport.html:69 templates/dcim/consoleserverport.html:70 -#: templates/dcim/frontport.html:102 templates/dcim/interface.html:180 -#: templates/dcim/interface.html:200 templates/dcim/powerfeed.html:127 -#: templates/dcim/poweroutlet.html:71 templates/dcim/poweroutlet.html:72 -#: templates/dcim/powerport.html:73 templates/dcim/rearport.html:98 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:48 +#: netbox/templates/dcim/consoleport.html:69 +#: netbox/templates/dcim/consoleserverport.html:70 +#: netbox/templates/dcim/frontport.html:102 +#: netbox/templates/dcim/interface.html:180 +#: netbox/templates/dcim/interface.html:200 +#: netbox/templates/dcim/powerfeed.html:127 +#: netbox/templates/dcim/poweroutlet.html:71 +#: netbox/templates/dcim/poweroutlet.html:72 +#: netbox/templates/dcim/powerport.html:73 +#: netbox/templates/dcim/rearport.html:98 msgid "Connect" msgstr "Forbind" -#: templates/circuits/inc/circuit_termination_fields.html:70 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:70 msgid "Downstream" msgstr "Nedstrøms" -#: templates/circuits/inc/circuit_termination_fields.html:71 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:71 msgid "Upstream" msgstr "Opstrøms" -#: templates/circuits/inc/circuit_termination_fields.html:80 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:80 msgid "Cross-Connect" msgstr "Krydsforbindelse" -#: templates/circuits/inc/circuit_termination_fields.html:84 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:84 msgid "Patch Panel/Port" msgstr "Patchpanel/port" -#: templates/circuits/provider.html:11 +#: netbox/templates/circuits/provider.html:11 msgid "Add circuit" msgstr "Tilføj kredsløb" -#: templates/circuits/provideraccount.html:17 +#: netbox/templates/circuits/provideraccount.html:17 msgid "Provider Account" msgstr "Leverandørkonto" -#: templates/core/configrevision.html:35 +#: netbox/templates/core/configrevision.html:35 msgid "Configuration Data" msgstr "Konfigurationsdata" -#: templates/core/configrevision.html:40 +#: netbox/templates/core/configrevision.html:40 msgid "Comment" msgstr "Kommentar" -#: templates/core/configrevision_restore.html:8 -#: templates/core/configrevision_restore.html:25 -#: templates/core/configrevision_restore.html:64 +#: netbox/templates/core/configrevision_restore.html:8 +#: netbox/templates/core/configrevision_restore.html:25 +#: netbox/templates/core/configrevision_restore.html:64 msgid "Restore" msgstr "Gendan" -#: templates/core/configrevision_restore.html:36 +#: netbox/templates/core/configrevision_restore.html:36 msgid "Parameter" msgstr "Parameter" -#: templates/core/configrevision_restore.html:37 +#: netbox/templates/core/configrevision_restore.html:37 msgid "Current Value" msgstr "Nuværende værdi" -#: templates/core/configrevision_restore.html:38 +#: netbox/templates/core/configrevision_restore.html:38 msgid "New Value" msgstr "Ny værdi" -#: templates/core/configrevision_restore.html:50 +#: netbox/templates/core/configrevision_restore.html:50 msgid "Changed" msgstr "Ændret" -#: templates/core/datafile.html:42 templates/ipam/iprange.html:25 -#: templates/virtualization/virtualdisk.html:29 -#: virtualization/tables/virtualmachines.py:198 +#: netbox/templates/core/datafile.html:42 +#: netbox/templates/ipam/iprange.html:25 +#: netbox/templates/virtualization/virtualdisk.html:29 +#: netbox/virtualization/tables/virtualmachines.py:198 msgid "Size" msgstr "Størrelse" -#: templates/core/datafile.html:43 +#: netbox/templates/core/datafile.html:43 msgid "bytes" msgstr "bytes" -#: templates/core/datafile.html:46 +#: netbox/templates/core/datafile.html:46 msgid "SHA256 Hash" msgstr "SHA256 Hash" -#: templates/core/datasource.html:14 templates/core/datasource.html:20 -#: utilities/templates/buttons/sync.html:5 +#: netbox/templates/core/datasource.html:14 +#: netbox/templates/core/datasource.html:20 +#: netbox/utilities/templates/buttons/sync.html:5 msgid "Sync" msgstr "Synkroniser" -#: templates/core/datasource.html:50 +#: netbox/templates/core/datasource.html:50 msgid "Last synced" msgstr "Sidst synkroniseret" -#: templates/core/datasource.html:84 +#: netbox/templates/core/datasource.html:84 msgid "Backend" msgstr "Backend" -#: templates/core/datasource.html:99 +#: netbox/templates/core/datasource.html:99 msgid "No parameters defined" msgstr "Ingen parametre defineret" -#: templates/core/datasource.html:114 +#: netbox/templates/core/datasource.html:114 msgid "Files" msgstr "filer" -#: templates/core/inc/config_data.html:7 +#: netbox/templates/core/inc/config_data.html:7 msgid "Rack elevations" msgstr "Rackhøjder" -#: templates/core/inc/config_data.html:10 +#: netbox/templates/core/inc/config_data.html:10 msgid "Default unit height" msgstr "Standard enhedshøjde" -#: templates/core/inc/config_data.html:14 +#: netbox/templates/core/inc/config_data.html:14 msgid "Default unit width" msgstr "Standard enhedsbredde" -#: templates/core/inc/config_data.html:20 +#: netbox/templates/core/inc/config_data.html:20 msgid "Power feeds" msgstr "Strømforsyninger" -#: templates/core/inc/config_data.html:23 +#: netbox/templates/core/inc/config_data.html:23 msgid "Default voltage" msgstr "Standard spænding" -#: templates/core/inc/config_data.html:27 +#: netbox/templates/core/inc/config_data.html:27 msgid "Default amperage" msgstr "Standard strømstyrke" -#: templates/core/inc/config_data.html:31 +#: netbox/templates/core/inc/config_data.html:31 msgid "Default max utilization" msgstr "Standard maksimal udnyttelse" -#: templates/core/inc/config_data.html:40 +#: netbox/templates/core/inc/config_data.html:40 msgid "Enforce global unique" msgstr "Håndhæv global unik" -#: templates/core/inc/config_data.html:83 +#: netbox/templates/core/inc/config_data.html:83 msgid "Paginate count" msgstr "Paginatantal" -#: templates/core/inc/config_data.html:87 +#: netbox/templates/core/inc/config_data.html:87 msgid "Max page size" msgstr "Maks. Sidestørrelse" -#: templates/core/inc/config_data.html:114 +#: netbox/templates/core/inc/config_data.html:114 msgid "User preferences" msgstr "Brugerpræferencer" -#: templates/core/inc/config_data.html:141 +#: netbox/templates/core/inc/config_data.html:141 msgid "Job retention" msgstr "Jobfastholdelse" -#: templates/core/job.html:35 templates/core/rq_task.html:12 -#: templates/core/rq_task.html:49 templates/core/rq_task.html:58 +#: netbox/templates/core/job.html:35 netbox/templates/core/rq_task.html:12 +#: netbox/templates/core/rq_task.html:49 netbox/templates/core/rq_task.html:58 msgid "Job" msgstr "Job" -#: templates/core/job.html:58 templates/extras/journalentry.html:26 +#: netbox/templates/core/job.html:58 +#: netbox/templates/extras/journalentry.html:26 msgid "Created By" msgstr "Oprettet af" -#: templates/core/job.html:66 +#: netbox/templates/core/job.html:66 msgid "Scheduling" msgstr "Planlægning" -#: templates/core/job.html:77 +#: netbox/templates/core/job.html:77 #, python-format msgid "every %(interval)s minutes" msgstr "hver %(interval)s minutter" -#: templates/core/objectchange.html:29 -#: templates/users/objectpermission.html:42 +#: netbox/templates/core/objectchange.html:29 +#: netbox/templates/users/objectpermission.html:42 msgid "Change" msgstr "Ændre" -#: templates/core/objectchange.html:79 +#: netbox/templates/core/objectchange.html:79 msgid "Difference" msgstr "Forskel" -#: templates/core/objectchange.html:82 +#: netbox/templates/core/objectchange.html:82 msgid "Previous" msgstr "Tidligere" -#: templates/core/objectchange.html:85 +#: netbox/templates/core/objectchange.html:85 msgid "Next" msgstr "Næste" -#: templates/core/objectchange.html:93 +#: netbox/templates/core/objectchange.html:93 msgid "Object Created" msgstr "Objekt oprettet" -#: templates/core/objectchange.html:95 +#: netbox/templates/core/objectchange.html:95 msgid "Object Deleted" msgstr "Objekt slettet" -#: templates/core/objectchange.html:97 +#: netbox/templates/core/objectchange.html:97 msgid "No Changes" msgstr "Ingen ændringer" -#: templates/core/objectchange.html:111 +#: netbox/templates/core/objectchange.html:111 msgid "Pre-Change Data" msgstr "Data før ændring" -#: templates/core/objectchange.html:122 +#: netbox/templates/core/objectchange.html:122 msgid "Warning: Comparing non-atomic change to previous change record" msgstr "" "Advarsel: Sammenligning af ikke-atomær ændring med tidligere ændringsrekord" -#: templates/core/objectchange.html:131 +#: netbox/templates/core/objectchange.html:131 msgid "Post-Change Data" msgstr "Data efter ændring" -#: templates/core/objectchange.html:162 +#: netbox/templates/core/objectchange.html:162 #, python-format msgid "See All %(count)s Changes" msgstr "Se alle %(count)s Ændringer" -#: templates/core/objectchange_list.html:9 -#: templates/extras/object_changelog.html:15 +#: netbox/templates/core/objectchange_list.html:9 +#: netbox/templates/extras/object_changelog.html:15 msgid "Change log retention" msgstr "Ændre logopbevaring" -#: templates/core/objectchange_list.html:9 -#: templates/extras/object_changelog.html:15 +#: netbox/templates/core/objectchange_list.html:9 +#: netbox/templates/extras/object_changelog.html:15 msgid "days" msgstr "dage" -#: templates/core/objectchange_list.html:9 -#: templates/extras/object_changelog.html:15 +#: netbox/templates/core/objectchange_list.html:9 +#: netbox/templates/extras/object_changelog.html:15 msgid "Indefinite" msgstr "Ubestemt" -#: templates/core/plugin.html:22 +#: netbox/templates/core/plugin.html:22 msgid "Not installed" msgstr "Ikke installeret" -#: templates/core/plugin.html:33 +#: netbox/templates/core/plugin.html:33 msgid "Overview" msgstr "Oversigt" -#: templates/core/plugin.html:39 +#: netbox/templates/core/plugin.html:39 msgid "Install" msgstr "Installere" -#: templates/core/plugin.html:51 +#: netbox/templates/core/plugin.html:51 msgid "Plugin Details" msgstr "Plugin Detaljer" -#: templates/core/plugin.html:58 +#: netbox/templates/core/plugin.html:58 msgid "Summary" msgstr "Resumé" -#: templates/core/plugin.html:76 +#: netbox/templates/core/plugin.html:76 msgid "License" msgstr "Licens" -#: templates/core/plugin.html:96 +#: netbox/templates/core/plugin.html:96 msgid "Version History" msgstr "Versionshistorik" -#: templates/core/plugin.html:107 +#: netbox/templates/core/plugin.html:107 msgid "Local Installation Instructions" msgstr "Lokale installationsinstruktioner" -#: templates/core/rq_queue_list.html:5 templates/core/rq_queue_list.html:13 -#: templates/core/rq_task_list.html:14 templates/core/rq_worker.html:7 +#: netbox/templates/core/rq_queue_list.html:5 +#: netbox/templates/core/rq_queue_list.html:13 +#: netbox/templates/core/rq_task_list.html:14 +#: netbox/templates/core/rq_worker.html:7 msgid "Background Queues" msgstr "Baggrundskøer" -#: templates/core/rq_queue_list.html:24 templates/core/rq_queue_list.html:25 -#: templates/core/rq_worker_list.html:49 templates/core/rq_worker_list.html:50 -#: templates/extras/script_result.html:67 -#: templates/extras/script_result.html:69 -#: templates/inc/table_controls_htmx.html:30 -#: templates/inc/table_controls_htmx.html:33 +#: netbox/templates/core/rq_queue_list.html:24 +#: netbox/templates/core/rq_queue_list.html:25 +#: netbox/templates/core/rq_worker_list.html:49 +#: netbox/templates/core/rq_worker_list.html:50 +#: netbox/templates/extras/script_result.html:67 +#: netbox/templates/extras/script_result.html:69 +#: netbox/templates/inc/table_controls_htmx.html:30 +#: netbox/templates/inc/table_controls_htmx.html:33 msgid "Configure Table" msgstr "Konfigurer tabel" -#: templates/core/rq_task.html:29 +#: netbox/templates/core/rq_task.html:29 msgid "Stop" msgstr "Stop" -#: templates/core/rq_task.html:34 +#: netbox/templates/core/rq_task.html:34 msgid "Requeue" msgstr "Requeue" -#: templates/core/rq_task.html:39 +#: netbox/templates/core/rq_task.html:39 msgid "Enqueue" msgstr "Kø" -#: templates/core/rq_task.html:61 +#: netbox/templates/core/rq_task.html:61 msgid "Queue" msgstr "Kø" -#: templates/core/rq_task.html:65 +#: netbox/templates/core/rq_task.html:65 msgid "Timeout" msgstr "Timeout" -#: templates/core/rq_task.html:69 +#: netbox/templates/core/rq_task.html:69 msgid "Result TTL" msgstr "Resultat TTL" -#: templates/core/rq_task.html:89 +#: netbox/templates/core/rq_task.html:89 msgid "Meta" msgstr "Meta" -#: templates/core/rq_task.html:93 +#: netbox/templates/core/rq_task.html:93 msgid "Arguments" msgstr "Argumenter" -#: templates/core/rq_task.html:97 +#: netbox/templates/core/rq_task.html:97 msgid "Keyword Arguments" msgstr "Søgeordsargumenter" -#: templates/core/rq_task.html:103 +#: netbox/templates/core/rq_task.html:103 msgid "Depends on" msgstr "Afhænger af" -#: templates/core/rq_task.html:109 +#: netbox/templates/core/rq_task.html:109 msgid "Exception" msgstr "Undtagelse" -#: templates/core/rq_task_list.html:28 +#: netbox/templates/core/rq_task_list.html:28 msgid "tasks in " msgstr "opgaver i " -#: templates/core/rq_task_list.html:33 +#: netbox/templates/core/rq_task_list.html:33 msgid "Queued Jobs" msgstr "Jobmuligheder i kø" -#: templates/core/rq_task_list.html:64 templates/extras/script_result.html:86 +#: netbox/templates/core/rq_task_list.html:64 +#: netbox/templates/extras/script_result.html:86 #, python-format msgid "" "Select all %(count)s %(object_type_plural)s matching query" @@ -11525,382 +12268,400 @@ msgstr "" "Vælg alle %(count)s %(object_type_plural)s matchende " "forespørgsel" -#: templates/core/rq_worker.html:10 +#: netbox/templates/core/rq_worker.html:10 msgid "Worker Info" msgstr "Arbejderinfo" -#: templates/core/rq_worker.html:31 templates/core/rq_worker.html:40 +#: netbox/templates/core/rq_worker.html:31 +#: netbox/templates/core/rq_worker.html:40 msgid "Worker" msgstr "Arbejdstageren" -#: templates/core/rq_worker.html:55 +#: netbox/templates/core/rq_worker.html:55 msgid "Queues" msgstr "Køer" -#: templates/core/rq_worker.html:63 +#: netbox/templates/core/rq_worker.html:63 msgid "Curent Job" msgstr "Nuværende job" -#: templates/core/rq_worker.html:67 +#: netbox/templates/core/rq_worker.html:67 msgid "Successful job count" msgstr "Antal vellykkede job" -#: templates/core/rq_worker.html:71 +#: netbox/templates/core/rq_worker.html:71 msgid "Failed job count" msgstr "Antal mislykkede job" -#: templates/core/rq_worker.html:75 +#: netbox/templates/core/rq_worker.html:75 msgid "Total working time" msgstr "Samlet arbejdstid" -#: templates/core/rq_worker.html:76 +#: netbox/templates/core/rq_worker.html:76 msgid "seconds" msgstr "sekunder" -#: templates/core/rq_worker_list.html:13 templates/core/rq_worker_list.html:21 +#: netbox/templates/core/rq_worker_list.html:13 +#: netbox/templates/core/rq_worker_list.html:21 msgid "Background Workers" msgstr "Baggrundsarbejdere" -#: templates/core/rq_worker_list.html:29 +#: netbox/templates/core/rq_worker_list.html:29 #, python-format msgid "Workers in %(queue_name)s" msgstr "Arbejdere i %(queue_name)s" -#: templates/core/system.html:11 utilities/templates/buttons/export.html:4 +#: netbox/templates/core/system.html:11 +#: netbox/utilities/templates/buttons/export.html:4 msgid "Export" msgstr "Eksport" -#: templates/core/system.html:28 +#: netbox/templates/core/system.html:28 msgid "System Status" msgstr "Systemstatus" -#: templates/core/system.html:31 +#: netbox/templates/core/system.html:31 msgid "NetBox release" msgstr "NetBox-udgivelse" -#: templates/core/system.html:44 +#: netbox/templates/core/system.html:44 msgid "Django version" msgstr "Django version" -#: templates/core/system.html:48 +#: netbox/templates/core/system.html:48 msgid "PostgreSQL version" msgstr "PostgreSQL-version" -#: templates/core/system.html:52 +#: netbox/templates/core/system.html:52 msgid "Database name" msgstr "Databasenavn" -#: templates/core/system.html:56 +#: netbox/templates/core/system.html:56 msgid "Database size" msgstr "Databasestørrelse" -#: templates/core/system.html:61 +#: netbox/templates/core/system.html:61 msgid "Unavailable" msgstr "Ikke tilgængelig" -#: templates/core/system.html:66 +#: netbox/templates/core/system.html:66 msgid "RQ workers" msgstr "RQ-arbejdere" -#: templates/core/system.html:69 +#: netbox/templates/core/system.html:69 msgid "default queue" msgstr "standardkø" -#: templates/core/system.html:73 +#: netbox/templates/core/system.html:73 msgid "System time" msgstr "Systemtid" -#: templates/core/system.html:85 +#: netbox/templates/core/system.html:85 msgid "Current Configuration" msgstr "Nuværende konfiguration" -#: templates/dcim/bulk_disconnect.html:9 +#: netbox/templates/dcim/bulk_disconnect.html:9 #, python-format msgid "" "Are you sure you want to disconnect these %(count)s %(obj_type_plural)s?" msgstr "" "Er du sikker på, at du vil afbryde disse %(count)s %(obj_type_plural)s?" -#: templates/dcim/cable_trace.html:10 +#: netbox/templates/dcim/cable_trace.html:10 #, python-format msgid "Cable Trace for %(object_type)s %(object)s" msgstr "Kabelspor til %(object_type)s %(object)s" -#: templates/dcim/cable_trace.html:24 templates/dcim/inc/rack_elevation.html:7 +#: netbox/templates/dcim/cable_trace.html:24 +#: netbox/templates/dcim/inc/rack_elevation.html:7 msgid "Download SVG" msgstr "Hent SVG" -#: templates/dcim/cable_trace.html:30 +#: netbox/templates/dcim/cable_trace.html:30 msgid "Asymmetric Path" msgstr "Asymmetrisk sti" -#: templates/dcim/cable_trace.html:31 +#: netbox/templates/dcim/cable_trace.html:31 msgid "The nodes below have no links and result in an asymmetric path" msgstr "Noderne nedenfor har ingen links og resulterer i en asymmetrisk sti" -#: templates/dcim/cable_trace.html:38 +#: netbox/templates/dcim/cable_trace.html:38 msgid "Path split" msgstr "Stiopdeling" -#: templates/dcim/cable_trace.html:39 +#: netbox/templates/dcim/cable_trace.html:39 msgid "Select a node below to continue" msgstr "Vælg en node nedenfor for at fortsætte" -#: templates/dcim/cable_trace.html:55 +#: netbox/templates/dcim/cable_trace.html:55 msgid "Trace Completed" msgstr "Sporing afsluttet" -#: templates/dcim/cable_trace.html:58 +#: netbox/templates/dcim/cable_trace.html:58 msgid "Total segments" msgstr "Segmenter i alt" -#: templates/dcim/cable_trace.html:62 +#: netbox/templates/dcim/cable_trace.html:62 msgid "Total length" msgstr "Samlet længde" -#: templates/dcim/cable_trace.html:77 +#: netbox/templates/dcim/cable_trace.html:77 msgid "No paths found" msgstr "Ingen stier fundet" -#: templates/dcim/cable_trace.html:85 +#: netbox/templates/dcim/cable_trace.html:85 msgid "Related Paths" msgstr "Relaterede stier" -#: templates/dcim/cable_trace.html:89 +#: netbox/templates/dcim/cable_trace.html:89 msgid "Origin" msgstr "Oprindelse" -#: templates/dcim/cable_trace.html:90 +#: netbox/templates/dcim/cable_trace.html:90 msgid "Destination" msgstr "Bestemmelsessted" -#: templates/dcim/cable_trace.html:91 +#: netbox/templates/dcim/cable_trace.html:91 msgid "Segments" msgstr "Segmenter" -#: templates/dcim/cable_trace.html:104 +#: netbox/templates/dcim/cable_trace.html:104 msgid "Incomplete" msgstr "Ufuldstændig" -#: templates/dcim/component_list.html:14 +#: netbox/templates/dcim/component_list.html:14 msgid "Rename Selected" msgstr "Omdøb markeret" -#: templates/dcim/consoleport.html:65 templates/dcim/consoleserverport.html:66 -#: templates/dcim/frontport.html:98 templates/dcim/interface.html:176 -#: templates/dcim/poweroutlet.html:69 templates/dcim/powerport.html:69 +#: netbox/templates/dcim/consoleport.html:65 +#: netbox/templates/dcim/consoleserverport.html:66 +#: netbox/templates/dcim/frontport.html:98 +#: netbox/templates/dcim/interface.html:176 +#: netbox/templates/dcim/poweroutlet.html:69 +#: netbox/templates/dcim/powerport.html:69 msgid "Not Connected" msgstr "Ikke tilsluttet" -#: templates/dcim/device.html:34 +#: netbox/templates/dcim/device.html:34 msgid "Highlight device in rack" msgstr "Fremhæv enhed i rack" -#: templates/dcim/device.html:55 +#: netbox/templates/dcim/device.html:55 msgid "Not racked" msgstr "Ikke racket" -#: templates/dcim/device.html:62 templates/dcim/site.html:94 +#: netbox/templates/dcim/device.html:62 netbox/templates/dcim/site.html:94 msgid "GPS Coordinates" msgstr "GPS-koordinater" -#: templates/dcim/device.html:68 templates/dcim/site.html:81 -#: templates/dcim/site.html:100 +#: netbox/templates/dcim/device.html:68 netbox/templates/dcim/site.html:81 +#: netbox/templates/dcim/site.html:100 msgid "Map" msgstr "Kort" -#: templates/dcim/device.html:108 templates/dcim/inventoryitem.html:56 -#: templates/dcim/module.html:81 templates/dcim/modulebay.html:74 -#: templates/dcim/rack.html:61 +#: netbox/templates/dcim/device.html:108 +#: netbox/templates/dcim/inventoryitem.html:56 +#: netbox/templates/dcim/module.html:81 +#: netbox/templates/dcim/modulebay.html:74 netbox/templates/dcim/rack.html:61 msgid "Asset Tag" msgstr "Aktivemærke" -#: templates/dcim/device.html:123 +#: netbox/templates/dcim/device.html:123 msgid "View Virtual Chassis" msgstr "Se virtuelt kabinet" -#: templates/dcim/device.html:164 +#: netbox/templates/dcim/device.html:164 msgid "Create VDC" msgstr "Opret VDC" -#: templates/dcim/device.html:175 templates/dcim/device_edit.html:64 -#: virtualization/forms/model_forms.py:223 +#: netbox/templates/dcim/device.html:175 +#: netbox/templates/dcim/device_edit.html:64 +#: netbox/virtualization/forms/model_forms.py:223 msgid "Management" msgstr "Ledelse" -#: templates/dcim/device.html:195 templates/dcim/device.html:211 -#: templates/dcim/device.html:227 -#: templates/virtualization/virtualmachine.html:57 -#: templates/virtualization/virtualmachine.html:73 +#: netbox/templates/dcim/device.html:195 netbox/templates/dcim/device.html:211 +#: netbox/templates/dcim/device.html:227 +#: netbox/templates/virtualization/virtualmachine.html:57 +#: netbox/templates/virtualization/virtualmachine.html:73 msgid "NAT for" msgstr "NAT til" -#: templates/dcim/device.html:197 templates/dcim/device.html:213 -#: templates/dcim/device.html:229 -#: templates/virtualization/virtualmachine.html:59 -#: templates/virtualization/virtualmachine.html:75 +#: netbox/templates/dcim/device.html:197 netbox/templates/dcim/device.html:213 +#: netbox/templates/dcim/device.html:229 +#: netbox/templates/virtualization/virtualmachine.html:59 +#: netbox/templates/virtualization/virtualmachine.html:75 msgid "NAT" msgstr "NATTO" -#: templates/dcim/device.html:252 templates/dcim/rack.html:73 +#: netbox/templates/dcim/device.html:252 netbox/templates/dcim/rack.html:73 msgid "Power Utilization" msgstr "Strømforbrug" -#: templates/dcim/device.html:256 +#: netbox/templates/dcim/device.html:256 msgid "Input" msgstr "Indgang" -#: templates/dcim/device.html:257 +#: netbox/templates/dcim/device.html:257 msgid "Outlets" msgstr "Udtag" -#: templates/dcim/device.html:258 +#: netbox/templates/dcim/device.html:258 msgid "Allocated" msgstr "Allokeret" -#: templates/dcim/device.html:268 templates/dcim/device.html:270 -#: templates/dcim/device.html:286 templates/dcim/powerfeed.html:67 +#: netbox/templates/dcim/device.html:268 netbox/templates/dcim/device.html:270 +#: netbox/templates/dcim/device.html:286 +#: netbox/templates/dcim/powerfeed.html:67 msgid "VA" msgstr "VA" -#: templates/dcim/device.html:280 +#: netbox/templates/dcim/device.html:280 msgctxt "Leg of a power feed" msgid "Leg" msgstr "Ben" -#: templates/dcim/device.html:306 -#: templates/virtualization/virtualmachine.html:158 +#: netbox/templates/dcim/device.html:306 +#: netbox/templates/virtualization/virtualmachine.html:158 msgid "Add a service" msgstr "Tilføj en tjeneste" -#: templates/dcim/device/base.html:21 templates/dcim/device_list.html:9 -#: templates/dcim/devicetype/base.html:18 -#: templates/dcim/inc/moduletype_buttons.html:9 templates/dcim/module.html:18 -#: templates/virtualization/virtualmachine/base.html:22 -#: templates/virtualization/virtualmachine_list.html:8 +#: netbox/templates/dcim/device/base.html:21 +#: netbox/templates/dcim/device_list.html:9 +#: netbox/templates/dcim/devicetype/base.html:18 +#: netbox/templates/dcim/inc/moduletype_buttons.html:9 +#: netbox/templates/dcim/module.html:18 +#: netbox/templates/virtualization/virtualmachine/base.html:22 +#: netbox/templates/virtualization/virtualmachine_list.html:8 msgid "Add Components" msgstr "Tilføj komponenter" -#: templates/dcim/device/consoleports.html:24 +#: netbox/templates/dcim/device/consoleports.html:24 msgid "Add Console Ports" msgstr "Tilføj konsolporte" -#: templates/dcim/device/consoleserverports.html:24 +#: netbox/templates/dcim/device/consoleserverports.html:24 msgid "Add Console Server Ports" msgstr "Tilføj konsolserverporte" -#: templates/dcim/device/devicebays.html:10 +#: netbox/templates/dcim/device/devicebays.html:10 msgid "Add Device Bays" msgstr "Tilføj enhedsbugter" -#: templates/dcim/device/frontports.html:24 +#: netbox/templates/dcim/device/frontports.html:24 msgid "Add Front Ports" msgstr "Tilføj frontporte" -#: templates/dcim/device/inc/interface_table_controls.html:9 +#: netbox/templates/dcim/device/inc/interface_table_controls.html:9 msgid "Hide Enabled" msgstr "Skjul Aktiveret" -#: templates/dcim/device/inc/interface_table_controls.html:10 +#: netbox/templates/dcim/device/inc/interface_table_controls.html:10 msgid "Hide Disabled" msgstr "Skjul Deaktiveret" -#: templates/dcim/device/inc/interface_table_controls.html:11 +#: netbox/templates/dcim/device/inc/interface_table_controls.html:11 msgid "Hide Virtual" msgstr "Skjul virtuelt" -#: templates/dcim/device/inc/interface_table_controls.html:12 +#: netbox/templates/dcim/device/inc/interface_table_controls.html:12 msgid "Hide Disconnected" msgstr "Skjul frakoblet" -#: templates/dcim/device/interfaces.html:27 +#: netbox/templates/dcim/device/interfaces.html:27 msgid "Add Interfaces" msgstr "Tilføj grænseflader" -#: templates/dcim/device/inventory.html:10 -#: templates/dcim/inc/panels/inventory_items.html:10 +#: netbox/templates/dcim/device/inventory.html:10 +#: netbox/templates/dcim/inc/panels/inventory_items.html:10 msgid "Add Inventory Item" msgstr "Tilføj lagervare" -#: templates/dcim/device/modulebays.html:10 +#: netbox/templates/dcim/device/modulebays.html:10 msgid "Add Module Bays" msgstr "Tilføj modulpladser" -#: templates/dcim/device/poweroutlets.html:24 +#: netbox/templates/dcim/device/poweroutlets.html:24 msgid "Add Power Outlets" msgstr "Tilføj strømudtag" -#: templates/dcim/device/powerports.html:24 +#: netbox/templates/dcim/device/powerports.html:24 msgid "Add Power Port" msgstr "Tilføj strømstik" -#: templates/dcim/device/rearports.html:24 +#: netbox/templates/dcim/device/rearports.html:24 msgid "Add Rear Ports" msgstr "Tilføj bageste porte" -#: templates/dcim/device/render_config.html:5 -#: templates/virtualization/virtualmachine/render_config.html:5 +#: netbox/templates/dcim/device/render_config.html:5 +#: netbox/templates/virtualization/virtualmachine/render_config.html:5 msgid "Config" msgstr "Konfiguration" -#: templates/dcim/device/render_config.html:35 -#: templates/virtualization/virtualmachine/render_config.html:35 +#: netbox/templates/dcim/device/render_config.html:35 +#: netbox/templates/virtualization/virtualmachine/render_config.html:35 msgid "Context Data" msgstr "Kontekstdata" -#: templates/dcim/device/render_config.html:53 -#: templates/virtualization/virtualmachine/render_config.html:53 +#: netbox/templates/dcim/device/render_config.html:55 +#: netbox/templates/virtualization/virtualmachine/render_config.html:55 msgid "Rendered Config" msgstr "Renderet konfiguration" -#: templates/dcim/device/render_config.html:55 -#: templates/virtualization/virtualmachine/render_config.html:55 +#: netbox/templates/dcim/device/render_config.html:57 +#: netbox/templates/virtualization/virtualmachine/render_config.html:57 msgid "Download" msgstr "Hent" -#: templates/dcim/device/render_config.html:61 -#: templates/virtualization/virtualmachine/render_config.html:61 -msgid "No configuration template found" -msgstr "Ingen konfigurationsskabelon fundet" +#: netbox/templates/dcim/device/render_config.html:64 +#: netbox/templates/virtualization/virtualmachine/render_config.html:64 +msgid "Error rendering template" +msgstr "" -#: templates/dcim/device_edit.html:44 +#: 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" -#: templates/dcim/device_edit.html:48 -#: utilities/templates/form_helpers/render_field.html:22 +#: netbox/templates/dcim/device_edit.html:48 +#: netbox/utilities/templates/form_helpers/render_field.html:22 msgid "Regenerate Slug" msgstr "Regenerer slug" -#: templates/dcim/device_edit.html:49 templates/generic/bulk_remove.html:21 -#: utilities/templates/helpers/table_config_form.html:23 +#: netbox/templates/dcim/device_edit.html:49 +#: netbox/templates/generic/bulk_remove.html:21 +#: netbox/utilities/templates/helpers/table_config_form.html:23 msgid "Remove" msgstr "Fjern" -#: templates/dcim/device_edit.html:110 +#: netbox/templates/dcim/device_edit.html:110 msgid "Local Config Context Data" msgstr "Lokale konfigurationskontekstdata" -#: templates/dcim/device_list.html:82 templates/generic/bulk_rename.html:57 -#: templates/virtualization/virtualmachine/interfaces.html:11 -#: templates/virtualization/virtualmachine/virtual_disks.html:11 +#: netbox/templates/dcim/device_list.html:82 +#: netbox/templates/generic/bulk_rename.html:57 +#: netbox/templates/virtualization/virtualmachine/interfaces.html:11 +#: netbox/templates/virtualization/virtualmachine/virtual_disks.html:11 msgid "Rename" msgstr "Omdøb" -#: templates/dcim/devicebay.html:17 +#: netbox/templates/dcim/devicebay.html:17 msgid "Device Bay" msgstr "Enhedsplads" -#: templates/dcim/devicebay.html:43 +#: netbox/templates/dcim/devicebay.html:43 msgid "Installed Device" msgstr "Installeret enhed" -#: templates/dcim/devicebay_depopulate.html:6 +#: netbox/templates/dcim/devicebay_depopulate.html:6 #, python-format msgid "Remove %(device)s from %(device_bay)s?" msgstr "Fjern %(device)s fra %(device_bay)s?" -#: templates/dcim/devicebay_depopulate.html:13 +#: netbox/templates/dcim/devicebay_depopulate.html:13 #, python-format msgid "" "Are you sure you want to remove %(device)s from " @@ -11909,430 +12670,449 @@ msgstr "" "Er du sikker på, at du vil fjerne %(device)s fra " "%(device_bay)s?" -#: templates/dcim/devicebay_populate.html:13 +#: netbox/templates/dcim/devicebay_populate.html:13 msgid "Populate" msgstr "Befolkning" -#: templates/dcim/devicebay_populate.html:22 +#: netbox/templates/dcim/devicebay_populate.html:22 msgid "Bay" msgstr "Bugt" -#: templates/dcim/devicerole.html:14 templates/dcim/platform.html:17 +#: netbox/templates/dcim/devicerole.html:14 +#: netbox/templates/dcim/platform.html:17 msgid "Add Device" msgstr "Tilføj enhed" -#: templates/dcim/devicerole.html:40 +#: netbox/templates/dcim/devicerole.html:40 msgid "VM Role" msgstr "VM-rolle" -#: templates/dcim/devicetype.html:18 templates/dcim/moduletype.html:29 +#: netbox/templates/dcim/devicetype.html:18 +#: netbox/templates/dcim/moduletype.html:29 msgid "Model Name" msgstr "Modelnavn" -#: templates/dcim/devicetype.html:25 templates/dcim/moduletype.html:33 +#: netbox/templates/dcim/devicetype.html:25 +#: netbox/templates/dcim/moduletype.html:33 msgid "Part Number" msgstr "Varenummer" -#: templates/dcim/devicetype.html:41 +#: netbox/templates/dcim/devicetype.html:41 msgid "Exclude From Utilization" msgstr "Ekskluder fra udnyttelse" -#: templates/dcim/devicetype.html:59 +#: netbox/templates/dcim/devicetype.html:59 msgid "Parent/Child" msgstr "Forælder/barn" -#: templates/dcim/devicetype.html:71 +#: netbox/templates/dcim/devicetype.html:71 msgid "Front Image" msgstr "Frontbillede" -#: templates/dcim/devicetype.html:83 +#: netbox/templates/dcim/devicetype.html:83 msgid "Rear Image" msgstr "Bagbillede" -#: templates/dcim/frontport.html:54 +#: netbox/templates/dcim/frontport.html:54 msgid "Rear Port Position" msgstr "Bageste portposition" -#: templates/dcim/frontport.html:72 templates/dcim/interface.html:144 -#: templates/dcim/poweroutlet.html:63 templates/dcim/powerport.html:63 -#: templates/dcim/rearport.html:68 +#: netbox/templates/dcim/frontport.html:72 +#: netbox/templates/dcim/interface.html:144 +#: netbox/templates/dcim/poweroutlet.html:63 +#: netbox/templates/dcim/powerport.html:63 +#: netbox/templates/dcim/rearport.html:68 msgid "Marked as Connected" msgstr "Markeret som tilsluttet" -#: templates/dcim/frontport.html:86 templates/dcim/rearport.html:82 +#: netbox/templates/dcim/frontport.html:86 +#: netbox/templates/dcim/rearport.html:82 msgid "Connection Status" msgstr "Forbindelsesstatus" -#: templates/dcim/htmx/cable_edit.html:10 +#: netbox/templates/dcim/htmx/cable_edit.html:10 msgid "A Side" msgstr "En side" -#: templates/dcim/htmx/cable_edit.html:30 +#: netbox/templates/dcim/htmx/cable_edit.html:30 msgid "B Side" msgstr "B-side" -#: templates/dcim/inc/cable_termination.html:65 +#: netbox/templates/dcim/inc/cable_termination.html:65 msgid "No termination" msgstr "Ingen opsigelse" -#: templates/dcim/inc/cable_toggle_buttons.html:3 +#: netbox/templates/dcim/inc/cable_toggle_buttons.html:3 msgid "Mark Planned" msgstr "Marker planlagt" -#: templates/dcim/inc/cable_toggle_buttons.html:6 +#: netbox/templates/dcim/inc/cable_toggle_buttons.html:6 msgid "Mark Installed" msgstr "Marker installeret" -#: templates/dcim/inc/connection_endpoints.html:13 +#: netbox/templates/dcim/inc/connection_endpoints.html:13 msgid "Path Status" msgstr "Stistatus" -#: templates/dcim/inc/connection_endpoints.html:18 +#: netbox/templates/dcim/inc/connection_endpoints.html:18 msgid "Not Reachable" msgstr "Ikke tilgængelig" -#: templates/dcim/inc/connection_endpoints.html:23 +#: netbox/templates/dcim/inc/connection_endpoints.html:23 msgid "Path Endpoints" msgstr "Stiendepunkter" -#: templates/dcim/inc/endpoint_connection.html:8 -#: templates/dcim/powerfeed.html:120 templates/dcim/rearport.html:94 +#: netbox/templates/dcim/inc/endpoint_connection.html:8 +#: netbox/templates/dcim/powerfeed.html:120 +#: netbox/templates/dcim/rearport.html:94 msgid "Not connected" msgstr "Ikke tilsluttet" -#: templates/dcim/inc/interface_vlans_table.html:6 +#: netbox/templates/dcim/inc/interface_vlans_table.html:6 msgid "Untagged" msgstr "Umærket" -#: templates/dcim/inc/interface_vlans_table.html:37 +#: netbox/templates/dcim/inc/interface_vlans_table.html:37 msgid "No VLANs Assigned" msgstr "Ingen VLAN'er tildelt" -#: templates/dcim/inc/interface_vlans_table.html:44 -#: templates/ipam/prefix_list.html:16 templates/ipam/prefix_list.html:33 +#: netbox/templates/dcim/inc/interface_vlans_table.html:44 +#: netbox/templates/ipam/prefix_list.html:16 +#: netbox/templates/ipam/prefix_list.html:33 msgid "Clear" msgstr "Klar" -#: templates/dcim/inc/interface_vlans_table.html:47 +#: netbox/templates/dcim/inc/interface_vlans_table.html:47 msgid "Clear All" msgstr "Ryd alle" -#: templates/dcim/inc/panels/racktype_dimensions.html:38 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:38 msgid "Mounting Depth" msgstr "Monteringsdybde" -#: templates/dcim/inc/panels/racktype_numbering.html:6 +#: netbox/templates/dcim/inc/panels/racktype_numbering.html:6 msgid "Starting Unit" msgstr "Startenhed" -#: templates/dcim/inc/panels/racktype_numbering.html:10 +#: netbox/templates/dcim/inc/panels/racktype_numbering.html:10 msgid "Descending Units" msgstr "Faldende enheder" -#: templates/dcim/inc/rack_elevation.html:3 +#: netbox/templates/dcim/inc/rack_elevation.html:3 msgid "Rack elevation" msgstr "Rackhøjde" -#: templates/dcim/interface.html:17 +#: netbox/templates/dcim/interface.html:17 msgid "Add Child Interface" msgstr "Tilføj underordnet grænseflade" -#: templates/dcim/interface.html:50 +#: netbox/templates/dcim/interface.html:50 msgid "Speed/Duplex" msgstr "Hastighed/Duplex" -#: templates/dcim/interface.html:73 +#: netbox/templates/dcim/interface.html:73 msgid "PoE Mode" msgstr "PoE-tilstand" -#: templates/dcim/interface.html:77 +#: netbox/templates/dcim/interface.html:77 msgid "PoE Type" msgstr "PoE-type" -#: templates/dcim/interface.html:81 -#: templates/virtualization/vminterface.html:63 +#: netbox/templates/dcim/interface.html:81 +#: netbox/templates/virtualization/vminterface.html:63 msgid "802.1Q Mode" msgstr "802.1Q-tilstand" -#: templates/dcim/interface.html:125 -#: templates/virtualization/vminterface.html:59 +#: netbox/templates/dcim/interface.html:125 +#: netbox/templates/virtualization/vminterface.html:59 msgid "MAC Address" msgstr "MAC-adresse" -#: templates/dcim/interface.html:151 +#: netbox/templates/dcim/interface.html:151 msgid "Wireless Link" msgstr "Trådløs forbindelse" -#: templates/dcim/interface.html:218 vpn/choices.py:55 +#: netbox/templates/dcim/interface.html:218 netbox/vpn/choices.py:63 msgid "Peer" msgstr "jævnaldrende" -#: templates/dcim/interface.html:230 -#: templates/wireless/inc/wirelesslink_interface.html:26 +#: netbox/templates/dcim/interface.html:230 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:26 msgid "Channel" msgstr "Kanal" -#: templates/dcim/interface.html:239 -#: templates/wireless/inc/wirelesslink_interface.html:32 +#: netbox/templates/dcim/interface.html:239 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:32 msgid "Channel Frequency" msgstr "Kanalfrekvens" -#: templates/dcim/interface.html:242 templates/dcim/interface.html:250 -#: templates/dcim/interface.html:261 templates/dcim/interface.html:269 +#: netbox/templates/dcim/interface.html:242 +#: netbox/templates/dcim/interface.html:250 +#: netbox/templates/dcim/interface.html:261 +#: netbox/templates/dcim/interface.html:269 msgid "MHz" msgstr "MHz" -#: templates/dcim/interface.html:258 -#: templates/wireless/inc/wirelesslink_interface.html:42 +#: netbox/templates/dcim/interface.html:258 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:42 msgid "Channel Width" msgstr "Kanalbredde" -#: templates/dcim/interface.html:285 templates/wireless/wirelesslan.html:14 -#: templates/wireless/wirelesslink.html:21 wireless/forms/bulk_edit.py:60 -#: wireless/forms/bulk_edit.py:102 wireless/forms/filtersets.py:40 -#: wireless/forms/filtersets.py:80 wireless/models.py:82 -#: wireless/models.py:156 wireless/tables/wirelesslan.py:44 +#: netbox/templates/dcim/interface.html:285 +#: netbox/templates/wireless/wirelesslan.html:14 +#: netbox/templates/wireless/wirelesslink.html:21 +#: netbox/wireless/forms/bulk_edit.py:60 +#: netbox/wireless/forms/bulk_edit.py:102 +#: netbox/wireless/forms/filtersets.py:40 +#: netbox/wireless/forms/filtersets.py:80 netbox/wireless/models.py:82 +#: netbox/wireless/models.py:156 netbox/wireless/tables/wirelesslan.py:44 msgid "SSID" msgstr "SSID" -#: templates/dcim/interface.html:305 +#: netbox/templates/dcim/interface.html:305 msgid "LAG Members" msgstr "LAG-medlemmer" -#: templates/dcim/interface.html:323 +#: netbox/templates/dcim/interface.html:323 msgid "No member interfaces" msgstr "Ingen medlemsgrænseflader" -#: templates/dcim/interface.html:343 templates/ipam/fhrpgroup.html:73 -#: templates/ipam/iprange/ip_addresses.html:7 -#: templates/ipam/prefix/ip_addresses.html:7 -#: templates/virtualization/vminterface.html:89 +#: netbox/templates/dcim/interface.html:343 +#: netbox/templates/ipam/fhrpgroup.html:73 +#: netbox/templates/ipam/iprange/ip_addresses.html:7 +#: netbox/templates/ipam/prefix/ip_addresses.html:7 +#: netbox/templates/virtualization/vminterface.html:89 msgid "Add IP Address" msgstr "Tilføj IP-adresse" -#: templates/dcim/inventoryitem.html:24 +#: netbox/templates/dcim/inventoryitem.html:24 msgid "Parent Item" msgstr "Overordnet element" -#: templates/dcim/inventoryitem.html:48 +#: netbox/templates/dcim/inventoryitem.html:48 msgid "Part ID" msgstr "Artikel-ID" -#: templates/dcim/location.html:17 +#: netbox/templates/dcim/location.html:17 msgid "Add Child Location" msgstr "Tilføj underordnet placering" -#: templates/dcim/location.html:77 +#: netbox/templates/dcim/location.html:77 msgid "Child Locations" msgstr "Børneplaceringer" -#: templates/dcim/location.html:81 templates/dcim/site.html:131 +#: netbox/templates/dcim/location.html:81 netbox/templates/dcim/site.html:131 msgid "Add a Location" msgstr "Tilføj en placering" -#: templates/dcim/location.html:94 templates/dcim/site.html:144 +#: netbox/templates/dcim/location.html:94 netbox/templates/dcim/site.html:144 msgid "Add a Device" msgstr "Tilføj en enhed" -#: templates/dcim/manufacturer.html:16 +#: netbox/templates/dcim/manufacturer.html:16 msgid "Add Device Type" msgstr "Tilføj enhedstype" -#: templates/dcim/manufacturer.html:21 +#: netbox/templates/dcim/manufacturer.html:21 msgid "Add Module Type" msgstr "Tilføj modultype" -#: templates/dcim/powerfeed.html:53 +#: netbox/templates/dcim/powerfeed.html:53 msgid "Connected Device" msgstr "Tilsluttet enhed" -#: templates/dcim/powerfeed.html:63 +#: netbox/templates/dcim/powerfeed.html:63 msgid "Utilization (Allocated" msgstr "Udnyttelse (allokeret" -#: templates/dcim/powerfeed.html:80 +#: netbox/templates/dcim/powerfeed.html:80 msgid "Electrical Characteristics" msgstr "Elektriske egenskaber" -#: templates/dcim/powerfeed.html:88 +#: netbox/templates/dcim/powerfeed.html:88 msgctxt "Abbreviation for volts" msgid "V" msgstr "V" -#: templates/dcim/powerfeed.html:92 +#: netbox/templates/dcim/powerfeed.html:92 msgctxt "Abbreviation for amperes" msgid "A" msgstr "EN" -#: templates/dcim/poweroutlet.html:48 +#: netbox/templates/dcim/poweroutlet.html:48 msgid "Feed Leg" msgstr "Foderben" -#: templates/dcim/powerpanel.html:72 +#: netbox/templates/dcim/powerpanel.html:72 msgid "Add Power Feeds" msgstr "Tilføj strømforsyninger" -#: templates/dcim/powerport.html:44 +#: netbox/templates/dcim/powerport.html:44 msgid "Maximum Draw" msgstr "Maksimal lodtrækning" -#: templates/dcim/powerport.html:48 +#: netbox/templates/dcim/powerport.html:48 msgid "Allocated Draw" msgstr "Tildelt lodtrækning" -#: templates/dcim/rack.html:69 +#: netbox/templates/dcim/rack.html:69 msgid "Space Utilization" msgstr "Rumudnyttelse" -#: templates/dcim/rack.html:84 templates/dcim/racktype.html:44 +#: netbox/templates/dcim/rack.html:84 netbox/templates/dcim/racktype.html:44 msgid "Rack Weight" msgstr "Rackvægt" -#: templates/dcim/rack.html:94 templates/dcim/racktype.html:54 +#: netbox/templates/dcim/rack.html:94 netbox/templates/dcim/racktype.html:54 msgid "Maximum Weight" msgstr "Maksimal vægt" -#: templates/dcim/rack.html:104 +#: netbox/templates/dcim/rack.html:104 msgid "Total Weight" msgstr "Samlet vægt" -#: templates/dcim/rack.html:125 templates/dcim/rack_elevation_list.html:15 +#: netbox/templates/dcim/rack.html:125 +#: netbox/templates/dcim/rack_elevation_list.html:15 msgid "Images and Labels" msgstr "Billeder og etiketter" -#: templates/dcim/rack.html:126 templates/dcim/rack_elevation_list.html:16 +#: netbox/templates/dcim/rack.html:126 +#: netbox/templates/dcim/rack_elevation_list.html:16 msgid "Images only" msgstr "Kun billeder" -#: templates/dcim/rack.html:127 templates/dcim/rack_elevation_list.html:17 +#: netbox/templates/dcim/rack.html:127 +#: netbox/templates/dcim/rack_elevation_list.html:17 msgid "Labels only" msgstr "Kun etiketter" -#: templates/dcim/rack/reservations.html:8 +#: netbox/templates/dcim/rack/reservations.html:8 msgid "Add reservation" msgstr "Tilføj reservation" -#: templates/dcim/rack_elevation_list.html:12 +#: netbox/templates/dcim/rack_elevation_list.html:12 msgid "View List" msgstr "Vis liste" -#: templates/dcim/rack_elevation_list.html:14 +#: netbox/templates/dcim/rack_elevation_list.html:14 msgid "Select rack view" msgstr "Vælg rackvisning" -#: templates/dcim/rack_elevation_list.html:25 +#: netbox/templates/dcim/rack_elevation_list.html:25 msgid "Sort By" msgstr "Sorter efter" -#: templates/dcim/rack_elevation_list.html:74 +#: netbox/templates/dcim/rack_elevation_list.html:74 msgid "No Racks Found" msgstr "Ingen racker fundet" -#: templates/dcim/rack_list.html:8 +#: netbox/templates/dcim/rack_list.html:8 msgid "View Elevations" msgstr "Se højder" -#: templates/dcim/rackreservation.html:42 +#: netbox/templates/dcim/rackreservation.html:42 msgid "Reservation Details" msgstr "Reservationsoplysninger" -#: templates/dcim/rackrole.html:10 +#: netbox/templates/dcim/rackrole.html:10 msgid "Add Rack" msgstr "Tilføj Rack" -#: templates/dcim/rearport.html:50 +#: netbox/templates/dcim/rearport.html:50 msgid "Positions" msgstr "Positioner" -#: templates/dcim/region.html:17 templates/dcim/sitegroup.html:17 +#: netbox/templates/dcim/region.html:17 +#: netbox/templates/dcim/sitegroup.html:17 msgid "Add Site" msgstr "Tilføj område" -#: templates/dcim/region.html:55 +#: netbox/templates/dcim/region.html:55 msgid "Child Regions" msgstr "Børneregioner" -#: templates/dcim/region.html:59 +#: netbox/templates/dcim/region.html:59 msgid "Add Region" msgstr "Tilføj region" -#: templates/dcim/site.html:64 +#: netbox/templates/dcim/site.html:64 msgid "Time Zone" msgstr "Tidszone" -#: templates/dcim/site.html:67 +#: netbox/templates/dcim/site.html:67 msgid "UTC" msgstr "UTC" -#: templates/dcim/site.html:68 +#: netbox/templates/dcim/site.html:68 msgid "Site time" msgstr "Områdetid" -#: templates/dcim/site.html:75 +#: netbox/templates/dcim/site.html:75 msgid "Physical Address" msgstr "Fysisk adresse" -#: templates/dcim/site.html:90 +#: netbox/templates/dcim/site.html:90 msgid "Shipping Address" msgstr "Leveringsadresse" -#: templates/dcim/sitegroup.html:55 templates/tenancy/contactgroup.html:46 -#: templates/tenancy/tenantgroup.html:55 -#: templates/wireless/wirelesslangroup.html:55 +#: netbox/templates/dcim/sitegroup.html:55 +#: netbox/templates/tenancy/contactgroup.html:46 +#: netbox/templates/tenancy/tenantgroup.html:55 +#: netbox/templates/wireless/wirelesslangroup.html:55 msgid "Child Groups" msgstr "Børnegrupper" -#: templates/dcim/sitegroup.html:59 +#: netbox/templates/dcim/sitegroup.html:59 msgid "Add Site Group" msgstr "Tilføj områdegruppe" -#: templates/dcim/trace/attachment.html:5 -#: templates/extras/exporttemplate.html:31 +#: netbox/templates/dcim/trace/attachment.html:5 +#: netbox/templates/extras/exporttemplate.html:31 msgid "Attachment" msgstr "Vedhæftet fil" -#: templates/dcim/virtualchassis.html:57 +#: netbox/templates/dcim/virtualchassis.html:57 msgid "Add Member" msgstr "Tilføj medlem" -#: templates/dcim/virtualchassis_add.html:18 +#: netbox/templates/dcim/virtualchassis_add.html:18 msgid "Member Devices" msgstr "Medlemsenheder" -#: templates/dcim/virtualchassis_add_member.html:10 +#: netbox/templates/dcim/virtualchassis_add_member.html:10 #, python-format msgid "Add New Member to Virtual Chassis %(virtual_chassis)s" msgstr "Føj nyt medlem til virtuelt kabinet %(virtual_chassis)s" -#: templates/dcim/virtualchassis_add_member.html:19 +#: netbox/templates/dcim/virtualchassis_add_member.html:19 msgid "Add New Member" msgstr "Tilføj nyt medlem" -#: templates/dcim/virtualchassis_add_member.html:27 -#: templates/generic/object_edit.html:78 -#: templates/users/objectpermission.html:31 users/forms/filtersets.py:67 -#: users/forms/model_forms.py:312 +#: netbox/templates/dcim/virtualchassis_add_member.html:27 +#: netbox/templates/generic/object_edit.html:78 +#: netbox/templates/users/objectpermission.html:31 +#: netbox/users/forms/filtersets.py:67 netbox/users/forms/model_forms.py:312 msgid "Actions" msgstr "Handlinger" -#: templates/dcim/virtualchassis_add_member.html:29 +#: netbox/templates/dcim/virtualchassis_add_member.html:29 msgid "Save & Add Another" msgstr "Gem og tilføj en anden" -#: templates/dcim/virtualchassis_edit.html:7 +#: netbox/templates/dcim/virtualchassis_edit.html:7 #, python-format msgid "Editing Virtual Chassis %(name)s" msgstr "Redigering af virtuelt kabinet %(name)s" -#: templates/dcim/virtualchassis_edit.html:53 +#: netbox/templates/dcim/virtualchassis_edit.html:53 msgid "Rack/Unit" msgstr "Rack/enhed" -#: templates/dcim/virtualchassis_remove_member.html:5 +#: netbox/templates/dcim/virtualchassis_remove_member.html:5 msgid "Remove Virtual Chassis Member" msgstr "Fjern Virtual Chassis-medlem" -#: templates/dcim/virtualchassis_remove_member.html:9 +#: netbox/templates/dcim/virtualchassis_remove_member.html:9 #, python-format msgid "" "Are you sure you want to remove %(device)s from virtual " @@ -12341,11 +13121,12 @@ msgstr "" "Er du sikker på, at du vil fjerne %(device)s fra virtuelt " "chassis %(name)s?" -#: templates/dcim/virtualdevicecontext.html:26 templates/vpn/l2vpn.html:18 +#: netbox/templates/dcim/virtualdevicecontext.html:26 +#: netbox/templates/vpn/l2vpn.html:18 msgid "Identifier" msgstr "Identifikator" -#: templates/exceptions/import_error.html:6 +#: netbox/templates/exceptions/import_error.html:6 msgid "" "A module import error occurred during this request. Common causes include " "the following:" @@ -12353,11 +13134,11 @@ msgstr "" "Der opstod en modulimportfejl under denne anmodning. Almindelige årsager " "omfatter følgende:" -#: templates/exceptions/import_error.html:10 +#: netbox/templates/exceptions/import_error.html:10 msgid "Missing required packages" msgstr "Mangler nødvendige pakker" -#: templates/exceptions/import_error.html:11 +#: netbox/templates/exceptions/import_error.html:11 msgid "" "This installation of NetBox might be missing one or more required Python " "packages. These packages are listed in requirements.txt and " @@ -12373,11 +13154,11 @@ msgstr "" "installerede pakker, skal du køre pip frysning fra konsollen og" " sammenlign output med listen over nødvendige pakker." -#: templates/exceptions/import_error.html:20 +#: netbox/templates/exceptions/import_error.html:20 msgid "WSGI service not restarted after upgrade" msgstr "WSGI-tjenesten genstartes ikke efter opgradering" -#: templates/exceptions/import_error.html:21 +#: netbox/templates/exceptions/import_error.html:21 msgid "" "If this installation has recently been upgraded, check that the WSGI service" " (e.g. gunicorn or uWSGI) has been restarted. This ensures that the new code" @@ -12387,7 +13168,7 @@ msgstr "" " at WSGI-tjenesten (f.eks. gunicorn eller uWSGi) er blevet genstartet. Dette" " sikrer, at den nye kode kører." -#: templates/exceptions/permission_error.html:6 +#: netbox/templates/exceptions/permission_error.html:6 msgid "" "A file permission error was detected while processing this request. Common " "causes include the following:" @@ -12395,11 +13176,11 @@ msgstr "" "Der blev registreret en filtilladelsesfejl under behandlingen af denne " "anmodning. Almindelige årsager omfatter følgende:" -#: templates/exceptions/permission_error.html:10 +#: netbox/templates/exceptions/permission_error.html:10 msgid "Insufficient write permission to the media root" msgstr "Utilstrækkelig skrivetilladelse til medieroten" -#: templates/exceptions/permission_error.html:11 +#: netbox/templates/exceptions/permission_error.html:11 #, python-format msgid "" "The configured media root is %(media_root)s. Ensure that the " @@ -12410,7 +13191,7 @@ msgstr "" "brugeren NetBox kører som har adgang til at skrive filer til alle " "placeringer inden for denne sti." -#: templates/exceptions/programming_error.html:6 +#: netbox/templates/exceptions/programming_error.html:6 msgid "" "A database programming error was detected while processing this request. " "Common causes include the following:" @@ -12418,11 +13199,11 @@ msgstr "" "Der blev opdaget en databaseprogrammeringsfejl under behandlingen af denne " "anmodning. Almindelige årsager omfatter følgende:" -#: templates/exceptions/programming_error.html:10 +#: netbox/templates/exceptions/programming_error.html:10 msgid "Database migrations missing" msgstr "Databasemigreringer mangler" -#: templates/exceptions/programming_error.html:11 +#: netbox/templates/exceptions/programming_error.html:11 msgid "" "When upgrading to a new NetBox release, the upgrade script must be run to " "apply any new database migrations. You can run migrations manually by " @@ -12433,11 +13214,11 @@ msgstr "" "manuelt ved at udføre python3 manage.py migrere fra " "kommandolinjen." -#: templates/exceptions/programming_error.html:18 +#: netbox/templates/exceptions/programming_error.html:18 msgid "Unsupported PostgreSQL version" msgstr "Ikke-understøttet PostgreSQL-version" -#: templates/exceptions/programming_error.html:19 +#: netbox/templates/exceptions/programming_error.html:19 msgid "" "Ensure that PostgreSQL version 12 or later is in use. You can check this by " "connecting to the database using NetBox's credentials and issuing a query " @@ -12448,99 +13229,102 @@ msgstr "" "legitimationsoplysninger og sende en forespørgsel til VÆLG VERSION " "()." -#: templates/extras/configcontext.html:45 -#: templates/extras/configtemplate.html:37 -#: templates/extras/exporttemplate.html:51 +#: netbox/templates/extras/configcontext.html:45 +#: netbox/templates/extras/configtemplate.html:37 +#: netbox/templates/extras/exporttemplate.html:51 msgid "The data file associated with this object has been deleted" msgstr "Datafilen, der er knyttet til dette objekt, er blevet slettet" -#: templates/extras/configcontext.html:54 -#: templates/extras/configtemplate.html:46 -#: templates/extras/exporttemplate.html:60 +#: netbox/templates/extras/configcontext.html:54 +#: netbox/templates/extras/configtemplate.html:46 +#: netbox/templates/extras/exporttemplate.html:60 msgid "Data Synced" msgstr "Data synkroniseret" -#: templates/extras/configcontext_list.html:7 -#: templates/extras/configtemplate_list.html:7 -#: templates/extras/exporttemplate_list.html:7 +#: netbox/templates/extras/configcontext_list.html:7 +#: netbox/templates/extras/configtemplate_list.html:7 +#: netbox/templates/extras/exporttemplate_list.html:7 msgid "Sync Data" msgstr "Synkroniser data" -#: templates/extras/configtemplate.html:56 +#: netbox/templates/extras/configtemplate.html:56 msgid "Environment Parameters" msgstr "Miljøparametre" -#: templates/extras/configtemplate.html:67 -#: templates/extras/exporttemplate.html:79 +#: netbox/templates/extras/configtemplate.html:67 +#: netbox/templates/extras/exporttemplate.html:79 msgid "Template" msgstr "Skabelon" -#: templates/extras/customfield.html:30 templates/extras/customlink.html:21 +#: netbox/templates/extras/customfield.html:30 +#: netbox/templates/extras/customlink.html:21 msgid "Group Name" msgstr "Gruppenavn" -#: templates/extras/customfield.html:42 +#: netbox/templates/extras/customfield.html:42 msgid "Must be Unique" msgstr "Skal være unik" -#: templates/extras/customfield.html:46 +#: netbox/templates/extras/customfield.html:46 msgid "Cloneable" msgstr "Klonbar" -#: templates/extras/customfield.html:56 +#: netbox/templates/extras/customfield.html:56 msgid "Default Value" msgstr "Standardværdi" -#: templates/extras/customfield.html:73 +#: netbox/templates/extras/customfield.html:73 msgid "Search Weight" msgstr "Søg Vægt" -#: templates/extras/customfield.html:83 +#: netbox/templates/extras/customfield.html:83 msgid "Filter Logic" msgstr "Filterlogik" -#: templates/extras/customfield.html:87 +#: netbox/templates/extras/customfield.html:87 msgid "Display Weight" msgstr "Skærmvægt" -#: templates/extras/customfield.html:91 +#: netbox/templates/extras/customfield.html:91 msgid "UI Visible" msgstr "Brugergrænseflade Synlig" -#: templates/extras/customfield.html:95 +#: netbox/templates/extras/customfield.html:95 msgid "UI Editable" msgstr "Brugergrænseflade Redigerbar" -#: templates/extras/customfield.html:115 +#: netbox/templates/extras/customfield.html:115 msgid "Validation Rules" msgstr "Valideringsregler" -#: templates/extras/customfield.html:126 +#: netbox/templates/extras/customfield.html:126 msgid "Regular Expression" msgstr "Regelmæssigt udtryk" -#: templates/extras/customlink.html:29 +#: netbox/templates/extras/customlink.html:29 msgid "Button Class" msgstr "Knapklasse" -#: templates/extras/customlink.html:39 templates/extras/exporttemplate.html:66 -#: templates/extras/savedfilter.html:39 +#: netbox/templates/extras/customlink.html:39 +#: netbox/templates/extras/exporttemplate.html:66 +#: netbox/templates/extras/savedfilter.html:39 msgid "Assigned Models" msgstr "Tildelte modeller" -#: templates/extras/customlink.html:52 +#: netbox/templates/extras/customlink.html:52 msgid "Link Text" msgstr "Linktekst" -#: templates/extras/customlink.html:58 +#: netbox/templates/extras/customlink.html:58 msgid "Link URL" msgstr "Link URL" -#: templates/extras/dashboard/reset.html:4 templates/home.html:66 +#: netbox/templates/extras/dashboard/reset.html:4 +#: netbox/templates/home.html:66 msgid "Reset Dashboard" msgstr "Nulstil Dashboard" -#: templates/extras/dashboard/reset.html:8 +#: netbox/templates/extras/dashboard/reset.html:8 msgid "" "This will remove all configured widgets and restore the " "default dashboard configuration." @@ -12548,7 +13332,7 @@ msgstr "" "Dette vil fjerne alle konfigurerede widgets og gendan " "standard instrumentbrætkonfiguration." -#: templates/extras/dashboard/reset.html:13 +#: netbox/templates/extras/dashboard/reset.html:13 msgid "" "This change affects only your dashboard, and will not impact other " "users." @@ -12556,154 +13340,161 @@ msgstr "" "Denne ændring påvirker kun dit dashboard, og vil ikke påvirke andre " "brugere." -#: templates/extras/dashboard/widget.html:21 +#: netbox/templates/extras/dashboard/widget.html:21 msgid "widget configuration" msgstr "widget konfiguration" -#: templates/extras/dashboard/widget.html:36 +#: netbox/templates/extras/dashboard/widget.html:36 msgid "Close widget" msgstr "Luk widget" -#: templates/extras/dashboard/widget_add.html:7 +#: netbox/templates/extras/dashboard/widget_add.html:7 msgid "Add a Widget" msgstr "Tilføj en widget" -#: templates/extras/dashboard/widgets/bookmarks.html:14 +#: netbox/templates/extras/dashboard/widgets/bookmarks.html:14 msgid "No bookmarks have been added yet." msgstr "Der er endnu ikke tilføjet nogen bogmærker." -#: templates/extras/dashboard/widgets/objectcounts.html:10 +#: netbox/templates/extras/dashboard/widgets/objectcounts.html:10 msgid "No permission" msgstr "Ingen tilladelse" -#: templates/extras/dashboard/widgets/objectlist.html:6 +#: netbox/templates/extras/dashboard/widgets/objectlist.html:6 msgid "No permission to view this content" msgstr "Ingen tilladelse til at se dette indhold" -#: templates/extras/dashboard/widgets/objectlist.html:10 +#: netbox/templates/extras/dashboard/widgets/objectlist.html:10 msgid "Unable to load content. Invalid view name" msgstr "Kan ikke indlæse indhold. Ugyldigt visningsnavn" -#: templates/extras/dashboard/widgets/rssfeed.html:12 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:12 msgid "No content found" msgstr "Intet indhold fundet" -#: templates/extras/dashboard/widgets/rssfeed.html:18 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:18 msgid "There was a problem fetching the RSS feed" msgstr "Der opstod et problem med at hente RSS-feedet" -#: templates/extras/dashboard/widgets/rssfeed.html:21 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:21 msgid "HTTP" msgstr "HTTP" -#: templates/extras/eventrule.html:61 +#: netbox/templates/extras/eventrule.html:61 msgid "Conditions" msgstr "Betingelser" -#: templates/extras/exporttemplate.html:23 +#: netbox/templates/extras/exporttemplate.html:23 msgid "MIME Type" msgstr "MIME-type" -#: templates/extras/exporttemplate.html:27 +#: netbox/templates/extras/exporttemplate.html:27 msgid "File Extension" msgstr "Filendelse" -#: templates/extras/htmx/script_result.html:10 +#: netbox/templates/extras/htmx/script_result.html:10 msgid "Scheduled for" msgstr "Planlagt til" -#: templates/extras/htmx/script_result.html:15 +#: netbox/templates/extras/htmx/script_result.html:15 msgid "Duration" msgstr "Varighed" -#: templates/extras/htmx/script_result.html:23 +#: netbox/templates/extras/htmx/script_result.html:23 msgid "Test Summary" msgstr "Testoversigt" -#: templates/extras/htmx/script_result.html:43 +#: netbox/templates/extras/htmx/script_result.html:43 msgid "Log" msgstr "Log" -#: templates/extras/htmx/script_result.html:56 +#: netbox/templates/extras/htmx/script_result.html:56 msgid "Output" msgstr "Udgang" -#: templates/extras/inc/result_pending.html:4 +#: netbox/templates/extras/inc/result_pending.html:4 msgid "Loading" msgstr "Indlæser" -#: templates/extras/inc/result_pending.html:6 +#: netbox/templates/extras/inc/result_pending.html:6 msgid "Results pending" msgstr "Resultater afventende" -#: templates/extras/journalentry.html:15 +#: netbox/templates/extras/journalentry.html:15 msgid "Journal Entry" msgstr "Journalindtastning" -#: templates/extras/notificationgroup.html:11 +#: netbox/templates/extras/notificationgroup.html:11 msgid "Notification Group" msgstr "Meddelelsesgruppe" -#: templates/extras/notificationgroup.html:36 -#: templates/extras/notificationgroup.html:46 -#: utilities/templates/widgets/clearable_file_input.html:12 +#: netbox/templates/extras/notificationgroup.html:36 +#: netbox/templates/extras/notificationgroup.html:46 +#: netbox/utilities/templates/widgets/clearable_file_input.html:12 msgid "None assigned" msgstr "Ingen tildelt" -#: templates/extras/object_configcontext.html:19 +#: netbox/templates/extras/object_configcontext.html:19 msgid "The local config context overwrites all source contexts" msgstr "Den lokale konfigurationskontekst overskriver alle kildekontekster" -#: templates/extras/object_configcontext.html:25 +#: netbox/templates/extras/object_configcontext.html:25 msgid "Source Contexts" msgstr "Kildekontekster" -#: templates/extras/object_journal.html:17 +#: netbox/templates/extras/object_journal.html:17 msgid "New Journal Entry" msgstr "Ny journalpost" -#: templates/extras/report/base.html:30 +#: netbox/templates/extras/report/base.html:30 msgid "Report" msgstr "Rapport" -#: templates/extras/script.html:14 +#: netbox/templates/extras/script.html:14 msgid "You do not have permission to run scripts" msgstr "Du har ikke tilladelse til at køre scripts" -#: templates/extras/script.html:41 templates/extras/script.html:45 -#: templates/extras/script_list.html:86 +#: netbox/templates/extras/script.html:41 +#: netbox/templates/extras/script.html:45 +#: netbox/templates/extras/script_list.html:87 msgid "Run Script" msgstr "Kør script" -#: templates/extras/script.html:51 templates/extras/script/source.html:10 +#: netbox/templates/extras/script.html:51 +#: netbox/templates/extras/script/source.html:10 msgid "Error loading script" msgstr "Fejl ved indlæsning af script" -#: templates/extras/script/jobs.html:16 +#: netbox/templates/extras/script/jobs.html:16 msgid "Script no longer exists in the source file." msgstr "Script findes ikke længere i kildefilen." -#: templates/extras/script_list.html:46 +#: netbox/templates/extras/script_list.html:47 msgid "Last Run" msgstr "Sidste løb" -#: templates/extras/script_list.html:61 +#: netbox/templates/extras/script_list.html:62 msgid "Script is no longer present in the source file" msgstr "Script findes ikke længere i kildefilen" -#: templates/extras/script_list.html:74 +#: netbox/templates/extras/script_list.html:75 msgid "Never" msgstr "Aldrig" -#: templates/extras/script_list.html:84 +#: netbox/templates/extras/script_list.html:85 msgid "Run Again" msgstr "Kør igen" -#: templates/extras/script_list.html:138 +#: netbox/templates/extras/script_list.html:133 +#, python-format +msgid "Could not load scripts from module %(module)s" +msgstr "" + +#: netbox/templates/extras/script_list.html:141 msgid "No Scripts Found" msgstr "Ingen scripts fundet" -#: templates/extras/script_list.html:141 +#: netbox/templates/extras/script_list.html:144 #, python-format msgid "" "Get started by creating a script from " @@ -12712,81 +13503,83 @@ msgstr "" "Kom i gang med Oprettelse af et script" " fra en uploadet fil eller datakilde." -#: templates/extras/script_result.html:35 -#: templates/generic/object_list.html:50 templates/search.html:13 +#: netbox/templates/extras/script_result.html:35 +#: netbox/templates/generic/object_list.html:50 +#: netbox/templates/search.html:13 msgid "Results" msgstr "Resultater" -#: templates/extras/script_result.html:46 +#: netbox/templates/extras/script_result.html:46 msgid "Log threshold" msgstr "Logtærskel" -#: templates/extras/script_result.html:56 +#: netbox/templates/extras/script_result.html:56 msgid "All" msgstr "Alle" -#: templates/extras/tag.html:32 +#: netbox/templates/extras/tag.html:32 msgid "Tagged Items" msgstr "Mærkede varer" -#: templates/extras/tag.html:43 +#: netbox/templates/extras/tag.html:43 msgid "Allowed Object Types" msgstr "Tilladte objekttyper" -#: templates/extras/tag.html:51 +#: netbox/templates/extras/tag.html:51 msgid "Any" msgstr "Enhver" -#: templates/extras/tag.html:57 +#: netbox/templates/extras/tag.html:57 msgid "Tagged Item Types" msgstr "Mærkede varetyper" -#: templates/extras/tag.html:81 +#: netbox/templates/extras/tag.html:81 msgid "Tagged Objects" msgstr "Mærkede objekter" -#: templates/extras/webhook.html:26 +#: netbox/templates/extras/webhook.html:26 msgid "HTTP Method" msgstr "HTTP-metode" -#: templates/extras/webhook.html:34 +#: netbox/templates/extras/webhook.html:34 msgid "HTTP Content Type" msgstr "HTTP-indholdstype" -#: templates/extras/webhook.html:47 +#: netbox/templates/extras/webhook.html:47 msgid "SSL Verification" msgstr "SSL Bekræftelse" -#: templates/extras/webhook.html:60 +#: netbox/templates/extras/webhook.html:60 msgid "Additional Headers" msgstr "Yderligere overskrifter" -#: templates/extras/webhook.html:70 +#: netbox/templates/extras/webhook.html:70 msgid "Body Template" msgstr "Kropsskabelon" -#: templates/generic/bulk_add_component.html:29 +#: netbox/templates/generic/bulk_add_component.html:29 msgid "Bulk Creation" msgstr "Masseoprettelse" -#: templates/generic/bulk_add_component.html:34 -#: templates/generic/bulk_delete.html:32 templates/generic/bulk_edit.html:33 +#: netbox/templates/generic/bulk_add_component.html:34 +#: netbox/templates/generic/bulk_delete.html:32 +#: netbox/templates/generic/bulk_edit.html:33 msgid "Selected Objects" msgstr "Markerede objekter" -#: templates/generic/bulk_add_component.html:58 +#: netbox/templates/generic/bulk_add_component.html:58 msgid "to Add" msgstr "at tilføje" -#: templates/generic/bulk_delete.html:27 +#: netbox/templates/generic/bulk_delete.html:27 msgid "Bulk Delete" msgstr "Massesletning" -#: templates/generic/bulk_delete.html:49 +#: netbox/templates/generic/bulk_delete.html:49 msgid "Confirm Bulk Deletion" msgstr "Bekræft massesletning" -#: templates/generic/bulk_delete.html:50 +#: netbox/templates/generic/bulk_delete.html:50 #, python-format msgid "" "The following operation will delete %(count)s " @@ -12796,65 +13589,68 @@ msgstr "" "Følgende handling slettes %(count)s %(type_plural)s. " "Gennemgå omhyggeligt de valgte objekter og bekræft denne handling." -#: templates/generic/bulk_edit.html:21 templates/generic/object_edit.html:22 +#: netbox/templates/generic/bulk_edit.html:21 +#: netbox/templates/generic/object_edit.html:22 msgid "Editing" msgstr "Redigering" -#: templates/generic/bulk_edit.html:28 +#: netbox/templates/generic/bulk_edit.html:28 msgid "Bulk Edit" msgstr "Masseredigering" -#: templates/generic/bulk_edit.html:107 templates/generic/bulk_rename.html:66 +#: netbox/templates/generic/bulk_edit.html:107 +#: netbox/templates/generic/bulk_rename.html:66 msgid "Apply" msgstr "Anvend" -#: templates/generic/bulk_import.html:19 +#: netbox/templates/generic/bulk_import.html:19 msgid "Bulk Import" msgstr "Masseimport" -#: templates/generic/bulk_import.html:25 +#: netbox/templates/generic/bulk_import.html:25 msgid "Direct Import" msgstr "Direkte import" -#: templates/generic/bulk_import.html:30 +#: netbox/templates/generic/bulk_import.html:30 msgid "Upload File" msgstr "Upload fil" -#: templates/generic/bulk_import.html:58 templates/generic/bulk_import.html:80 -#: templates/generic/bulk_import.html:102 +#: netbox/templates/generic/bulk_import.html:58 +#: netbox/templates/generic/bulk_import.html:80 +#: netbox/templates/generic/bulk_import.html:102 msgid "Submit" msgstr "Indsend" -#: templates/generic/bulk_import.html:113 +#: netbox/templates/generic/bulk_import.html:113 msgid "Field Options" msgstr "Feltindstillinger" -#: templates/generic/bulk_import.html:119 +#: netbox/templates/generic/bulk_import.html:119 msgid "Accessor" msgstr "Tilbehør" -#: templates/generic/bulk_import.html:148 +#: netbox/templates/generic/bulk_import.html:148 msgid "choices" msgstr "valg" -#: templates/generic/bulk_import.html:161 +#: netbox/templates/generic/bulk_import.html:161 msgid "Import Value" msgstr "Importværdi" -#: templates/generic/bulk_import.html:181 +#: netbox/templates/generic/bulk_import.html:181 msgid "Format: YYYY-MM-DD" msgstr "Format: ÅÅÅÅ-MM-DD" -#: templates/generic/bulk_import.html:183 +#: netbox/templates/generic/bulk_import.html:183 msgid "Specify true or false" msgstr "Angiv sandt eller falsk" -#: templates/generic/bulk_import.html:195 +#: netbox/templates/generic/bulk_import.html:195 msgid "Required fields must be specified for all objects." msgstr "" "Obligatoriske felter skal specificeres for alle objekter." -#: templates/generic/bulk_import.html:201 +#: netbox/templates/generic/bulk_import.html:201 #, python-format msgid "" "Related objects may be referenced by any unique attribute. For example, " @@ -12864,15 +13660,15 @@ msgstr "" " For eksempel %(example)s ville identificere en VRF ved dens " "ruteadskillelse." -#: templates/generic/bulk_remove.html:28 +#: netbox/templates/generic/bulk_remove.html:28 msgid "Bulk Remove" msgstr "Massefjernelse" -#: templates/generic/bulk_remove.html:42 +#: netbox/templates/generic/bulk_remove.html:42 msgid "Confirm Bulk Removal" msgstr "Bekræft massefjernelse" -#: templates/generic/bulk_remove.html:43 +#: netbox/templates/generic/bulk_remove.html:43 #, python-format msgid "" "The following operation will remove %(count)s %(obj_type_plural)s from " @@ -12883,72 +13679,72 @@ msgstr "" "%(parent_obj)s. Gennemgå venligst omhyggeligt %(obj_type_plural)s skal " "fjernes og bekræftes nedenfor." -#: templates/generic/bulk_remove.html:64 +#: netbox/templates/generic/bulk_remove.html:64 #, python-format msgid "Remove these %(count)s %(obj_type_plural)s" msgstr "Fjern disse %(count)s %(obj_type_plural)s" -#: templates/generic/bulk_rename.html:20 +#: netbox/templates/generic/bulk_rename.html:20 msgid "Renaming" msgstr "Omdøbning" -#: templates/generic/bulk_rename.html:27 +#: netbox/templates/generic/bulk_rename.html:27 msgid "Bulk Rename" msgstr "Masseomdøb" -#: templates/generic/bulk_rename.html:39 +#: netbox/templates/generic/bulk_rename.html:39 msgid "Current Name" msgstr "Nuværende navn" -#: templates/generic/bulk_rename.html:40 +#: netbox/templates/generic/bulk_rename.html:40 msgid "New Name" msgstr "Nyt navn" -#: templates/generic/bulk_rename.html:64 -#: utilities/templates/widgets/markdown_input.html:11 +#: netbox/templates/generic/bulk_rename.html:64 +#: netbox/utilities/templates/widgets/markdown_input.html:11 msgid "Preview" msgstr "Forhåndsvisning" -#: templates/generic/confirmation_form.html:16 +#: netbox/templates/generic/confirmation_form.html:16 msgid "Are you sure" msgstr "Er du sikker" -#: templates/generic/confirmation_form.html:20 +#: netbox/templates/generic/confirmation_form.html:20 msgid "Confirm" msgstr "Bekræft" -#: templates/generic/object_children.html:47 -#: utilities/templates/buttons/bulk_edit.html:4 +#: netbox/templates/generic/object_children.html:47 +#: netbox/utilities/templates/buttons/bulk_edit.html:4 msgid "Edit Selected" msgstr "Rediger markeret" -#: templates/generic/object_children.html:61 -#: utilities/templates/buttons/bulk_delete.html:4 +#: netbox/templates/generic/object_children.html:61 +#: netbox/utilities/templates/buttons/bulk_delete.html:4 msgid "Delete Selected" msgstr "Slet markeret" -#: templates/generic/object_edit.html:24 +#: netbox/templates/generic/object_edit.html:24 #, python-format msgid "Add a new %(object_type)s" msgstr "Tilføj en ny %(object_type)s" -#: templates/generic/object_edit.html:35 +#: netbox/templates/generic/object_edit.html:35 msgid "View model documentation" msgstr "Se modeldokumentation" -#: templates/generic/object_edit.html:36 +#: netbox/templates/generic/object_edit.html:36 msgid "Help" msgstr "Hjælp" -#: templates/generic/object_edit.html:83 +#: netbox/templates/generic/object_edit.html:83 msgid "Create & Add Another" msgstr "Opret og tilføj en anden" -#: templates/generic/object_list.html:57 +#: netbox/templates/generic/object_list.html:57 msgid "Filters" msgstr "Filtre" -#: templates/generic/object_list.html:88 +#: netbox/templates/generic/object_list.html:88 #, python-format msgid "" "Select all %(count)s " @@ -12957,40 +13753,40 @@ msgstr "" "Vælg alle %(count)s " "%(object_type_plural)s matchende forespørgsel" -#: templates/home.html:15 +#: netbox/templates/home.html:15 msgid "New Release Available" msgstr "Ny udgivelse tilgængelig" -#: templates/home.html:16 +#: netbox/templates/home.html:16 msgid "is available" msgstr "er tilgængelig" -#: templates/home.html:18 +#: netbox/templates/home.html:18 msgctxt "Document title" msgid "Upgrade Instructions" msgstr "Opgraderingsinstruktioner" -#: templates/home.html:40 +#: netbox/templates/home.html:40 msgid "Unlock Dashboard" msgstr "Lås instrumentbrættet op" -#: templates/home.html:49 +#: netbox/templates/home.html:49 msgid "Lock Dashboard" msgstr "Lås instrumentbrættet" -#: templates/home.html:60 +#: netbox/templates/home.html:60 msgid "Add Widget" msgstr "Tilføj widget" -#: templates/home.html:63 +#: netbox/templates/home.html:63 msgid "Save Layout" msgstr "Gem layout" -#: templates/htmx/delete_form.html:7 +#: netbox/templates/htmx/delete_form.html:7 msgid "Confirm Deletion" msgstr "Bekræft sletning" -#: templates/htmx/delete_form.html:11 +#: netbox/templates/htmx/delete_form.html:11 #, python-format msgid "" "Are you sure you want to delete " @@ -12999,40 +13795,40 @@ msgstr "" "Er du sikker på, at du vil slet " "%(object_type)s %(object)s?" -#: templates/htmx/delete_form.html:17 +#: netbox/templates/htmx/delete_form.html:17 msgid "The following objects will be deleted as a result of this action." msgstr "Følgende objekter slettes som følge af denne handling." -#: templates/htmx/notifications.html:15 +#: netbox/templates/htmx/notifications.html:15 msgid "ago" msgstr "siden" -#: templates/htmx/notifications.html:26 +#: netbox/templates/htmx/notifications.html:26 msgid "No unread notifications" msgstr "Ingen ulæste meddelelser" -#: templates/htmx/notifications.html:31 +#: netbox/templates/htmx/notifications.html:31 msgid "All notifications" msgstr "Alle notifikationer" -#: templates/htmx/object_selector.html:5 +#: netbox/templates/htmx/object_selector.html:5 msgid "Select" msgstr "Vælg" -#: templates/inc/filter_list.html:43 -#: utilities/templates/helpers/table_config_form.html:39 +#: netbox/templates/inc/filter_list.html:43 +#: netbox/utilities/templates/helpers/table_config_form.html:39 msgid "Reset" msgstr "Nulstil" -#: templates/inc/light_toggle.html:4 +#: netbox/templates/inc/light_toggle.html:4 msgid "Enable dark mode" msgstr "Aktivér mørk tilstand" -#: templates/inc/light_toggle.html:7 +#: netbox/templates/inc/light_toggle.html:7 msgid "Enable light mode" msgstr "Aktivér lystilstand" -#: templates/inc/missing_prerequisites.html:8 +#: netbox/templates/inc/missing_prerequisites.html:8 #, python-format msgid "" "Before you can add a %(model)s you must first create a " @@ -13041,281 +13837,283 @@ msgstr "" "Før du kan tilføje en %(model)s Du skal først oprette en " "%(prerequisite_model)s." -#: templates/inc/paginator.html:15 +#: netbox/templates/inc/paginator.html:15 msgid "Page selection" msgstr "Valg af side" -#: templates/inc/paginator.html:75 +#: netbox/templates/inc/paginator.html:75 #, python-format msgid "Showing %(start)s-%(end)s of %(total)s" msgstr "udviser %(start)s-%(end)s af %(total)s" -#: templates/inc/paginator.html:82 +#: netbox/templates/inc/paginator.html:82 msgid "Pagination options" msgstr "Pagineringsindstillinger" -#: templates/inc/paginator.html:86 +#: netbox/templates/inc/paginator.html:86 msgid "Per Page" msgstr "Per side" -#: templates/inc/panels/image_attachments.html:10 +#: netbox/templates/inc/panels/image_attachments.html:10 msgid "Attach an image" msgstr "Vedhæft et billede" -#: templates/inc/panels/related_objects.html:5 +#: netbox/templates/inc/panels/related_objects.html:5 msgid "Related Objects" msgstr "Relaterede objekter" -#: templates/inc/panels/tags.html:11 +#: netbox/templates/inc/panels/tags.html:11 msgid "No tags assigned" msgstr "Ingen tags tildelt" -#: templates/inc/sync_warning.html:10 +#: netbox/templates/inc/sync_warning.html:10 msgid "Data is out of sync with upstream file" msgstr "Data er ude af synkronisering med opstrømsfilen" -#: templates/inc/table_controls_htmx.html:7 +#: netbox/templates/inc/table_controls_htmx.html:7 msgid "Quick search" msgstr "Hurtig søgning" -#: templates/inc/table_controls_htmx.html:20 +#: netbox/templates/inc/table_controls_htmx.html:20 msgid "Saved filter" msgstr "Gemt filter" -#: templates/inc/table_htmx.html:18 +#: netbox/templates/inc/table_htmx.html:18 msgid "Clear ordering" msgstr "Klar bestilling" -#: templates/inc/user_menu.html:6 +#: netbox/templates/inc/user_menu.html:6 msgid "Help center" msgstr "Hjælpecenter" -#: templates/inc/user_menu.html:41 +#: netbox/templates/inc/user_menu.html:41 msgid "Django Admin" msgstr "Django Admin" -#: templates/inc/user_menu.html:61 +#: netbox/templates/inc/user_menu.html:61 msgid "Log Out" msgstr "Log ud" -#: templates/inc/user_menu.html:68 templates/login.html:38 +#: netbox/templates/inc/user_menu.html:68 netbox/templates/login.html:38 msgid "Log In" msgstr "Log ind" -#: templates/ipam/aggregate.html:14 templates/ipam/ipaddress.html:14 -#: templates/ipam/iprange.html:13 templates/ipam/prefix.html:15 +#: netbox/templates/ipam/aggregate.html:14 +#: netbox/templates/ipam/ipaddress.html:14 +#: netbox/templates/ipam/iprange.html:13 netbox/templates/ipam/prefix.html:15 msgid "Family" msgstr "Familie" -#: templates/ipam/aggregate.html:39 +#: netbox/templates/ipam/aggregate.html:39 msgid "Date Added" msgstr "Dato tilføjet" -#: templates/ipam/aggregate/prefixes.html:8 -#: templates/ipam/prefix/prefixes.html:8 templates/ipam/role.html:10 +#: netbox/templates/ipam/aggregate/prefixes.html:8 +#: netbox/templates/ipam/prefix/prefixes.html:8 +#: netbox/templates/ipam/role.html:10 msgid "Add Prefix" msgstr "Tilføj præfiks" -#: templates/ipam/asn.html:23 +#: netbox/templates/ipam/asn.html:23 msgid "AS Number" msgstr "AS-nummer" -#: templates/ipam/fhrpgroup.html:52 +#: netbox/templates/ipam/fhrpgroup.html:52 msgid "Authentication Type" msgstr "Autentificeringstype" -#: templates/ipam/fhrpgroup.html:56 +#: netbox/templates/ipam/fhrpgroup.html:56 msgid "Authentication Key" msgstr "Autentificeringsnøgle" -#: templates/ipam/fhrpgroup.html:69 +#: netbox/templates/ipam/fhrpgroup.html:69 msgid "Virtual IP Addresses" msgstr "Virtuelle IP-adresser" -#: templates/ipam/inc/ipaddress_edit_header.html:13 +#: netbox/templates/ipam/inc/ipaddress_edit_header.html:13 msgid "Assign IP" msgstr "Tildel IP" -#: templates/ipam/inc/ipaddress_edit_header.html:19 +#: netbox/templates/ipam/inc/ipaddress_edit_header.html:19 msgid "Bulk Create" msgstr "Masseoprettelse" -#: templates/ipam/inc/panels/fhrp_groups.html:10 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:10 msgid "Create Group" msgstr "Opret gruppe" -#: templates/ipam/inc/panels/fhrp_groups.html:25 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:25 msgid "Virtual IPs" msgstr "Virtuelle IP'er" -#: templates/ipam/inc/toggle_available.html:7 +#: netbox/templates/ipam/inc/toggle_available.html:7 msgid "Show Assigned" msgstr "Vis tildelt" -#: templates/ipam/inc/toggle_available.html:10 +#: netbox/templates/ipam/inc/toggle_available.html:10 msgid "Show Available" msgstr "Vis tilgængelig" -#: templates/ipam/inc/toggle_available.html:13 +#: netbox/templates/ipam/inc/toggle_available.html:13 msgid "Show All" msgstr "Vis alle" -#: templates/ipam/ipaddress.html:23 templates/ipam/iprange.html:45 -#: templates/ipam/prefix.html:24 +#: netbox/templates/ipam/ipaddress.html:23 +#: netbox/templates/ipam/iprange.html:45 netbox/templates/ipam/prefix.html:24 msgid "Global" msgstr "Globalt" -#: templates/ipam/ipaddress.html:85 +#: netbox/templates/ipam/ipaddress.html:85 msgid "NAT (outside)" msgstr "NAT (udenfor)" -#: templates/ipam/ipaddress_assign.html:8 +#: netbox/templates/ipam/ipaddress_assign.html:8 msgid "Assign an IP Address" msgstr "Tildel en IP-adresse" -#: templates/ipam/ipaddress_assign.html:22 +#: netbox/templates/ipam/ipaddress_assign.html:22 msgid "Select IP Address" msgstr "Vælg IP-adresse" -#: templates/ipam/ipaddress_assign.html:35 +#: netbox/templates/ipam/ipaddress_assign.html:35 msgid "Search Results" msgstr "Søgeresultater" -#: templates/ipam/ipaddress_bulk_add.html:6 +#: netbox/templates/ipam/ipaddress_bulk_add.html:6 msgid "Bulk Add IP Addresses" msgstr "Massetilføjelse af IP-adresser" -#: templates/ipam/iprange.html:17 +#: netbox/templates/ipam/iprange.html:17 msgid "Starting Address" msgstr "Startadresse" -#: templates/ipam/iprange.html:21 +#: netbox/templates/ipam/iprange.html:21 msgid "Ending Address" msgstr "Slutadresse" -#: templates/ipam/iprange.html:33 templates/ipam/prefix.html:110 +#: netbox/templates/ipam/iprange.html:33 netbox/templates/ipam/prefix.html:110 msgid "Marked fully utilized" msgstr "Markeret fuldt udnyttet" -#: templates/ipam/prefix.html:99 +#: netbox/templates/ipam/prefix.html:99 msgid "Addressing Details" msgstr "Adresseringsoplysninger" -#: templates/ipam/prefix.html:118 +#: netbox/templates/ipam/prefix.html:118 msgid "Child IPs" msgstr "Børne-IP'er" -#: templates/ipam/prefix.html:126 +#: netbox/templates/ipam/prefix.html:126 msgid "Available IPs" msgstr "Tilgængelige IP'er" -#: templates/ipam/prefix.html:138 +#: netbox/templates/ipam/prefix.html:138 msgid "First available IP" msgstr "Første tilgængelige IP" -#: templates/ipam/prefix.html:179 +#: netbox/templates/ipam/prefix.html:179 msgid "Prefix Details" msgstr "Præfiksdetaljer" -#: templates/ipam/prefix.html:185 +#: netbox/templates/ipam/prefix.html:185 msgid "Network Address" msgstr "Netværksadresse" -#: templates/ipam/prefix.html:189 +#: netbox/templates/ipam/prefix.html:189 msgid "Network Mask" msgstr "Netværksmaske" -#: templates/ipam/prefix.html:193 +#: netbox/templates/ipam/prefix.html:193 msgid "Wildcard Mask" msgstr "Jokertegnmaske" -#: templates/ipam/prefix.html:197 +#: netbox/templates/ipam/prefix.html:197 msgid "Broadcast Address" msgstr "Broadcast-adresse" -#: templates/ipam/prefix/ip_ranges.html:7 +#: netbox/templates/ipam/prefix/ip_ranges.html:7 msgid "Add IP Range" msgstr "Tilføj IP-rækkevidde" -#: templates/ipam/prefix_list.html:7 +#: netbox/templates/ipam/prefix_list.html:7 msgid "Hide Depth Indicators" msgstr "Skjul dybdeindikatorer" -#: templates/ipam/prefix_list.html:11 +#: netbox/templates/ipam/prefix_list.html:11 msgid "Max Depth" msgstr "Maks. Dybde" -#: templates/ipam/prefix_list.html:28 +#: netbox/templates/ipam/prefix_list.html:28 msgid "Max Length" msgstr "Maks. Længde" -#: templates/ipam/rir.html:10 +#: netbox/templates/ipam/rir.html:10 msgid "Add Aggregate" msgstr "Tilføj aggregat" -#: templates/ipam/routetarget.html:38 +#: netbox/templates/ipam/routetarget.html:38 msgid "Importing VRFs" msgstr "Importere VRF'er" -#: templates/ipam/routetarget.html:44 +#: netbox/templates/ipam/routetarget.html:44 msgid "Exporting VRFs" msgstr "Eksport af VRF'er" -#: templates/ipam/routetarget.html:52 +#: netbox/templates/ipam/routetarget.html:52 msgid "Importing L2VPNs" msgstr "Import af L2VPN'er" -#: templates/ipam/routetarget.html:58 +#: netbox/templates/ipam/routetarget.html:58 msgid "Exporting L2VPNs" msgstr "Eksport af L2VPN'er" -#: templates/ipam/vlan.html:88 +#: netbox/templates/ipam/vlan.html:88 msgid "Add a Prefix" msgstr "Tilføj et præfiks" -#: templates/ipam/vlangroup.html:18 +#: netbox/templates/ipam/vlangroup.html:18 msgid "Add VLAN" msgstr "Tilføj VLAN" -#: templates/ipam/vrf.html:16 +#: netbox/templates/ipam/vrf.html:16 msgid "Route Distinguisher" msgstr "Ruteadskillelse" -#: templates/ipam/vrf.html:29 +#: netbox/templates/ipam/vrf.html:29 msgid "Unique IP Space" msgstr "Unik IP-plads" -#: templates/login.html:29 -#: utilities/templates/form_helpers/render_errors.html:7 +#: netbox/templates/login.html:29 +#: netbox/utilities/templates/form_helpers/render_errors.html:7 msgid "Errors" msgstr "Fejl" -#: templates/login.html:69 +#: netbox/templates/login.html:69 msgid "Sign In" msgstr "Log ind" -#: templates/login.html:77 +#: netbox/templates/login.html:77 msgctxt "Denotes an alternative option" msgid "Or" msgstr "Eller" -#: templates/media_failure.html:7 +#: netbox/templates/media_failure.html:7 msgid "Static Media Failure - NetBox" msgstr "Statisk mediefejl - NetBox" -#: templates/media_failure.html:21 +#: netbox/templates/media_failure.html:21 msgid "Static Media Failure" msgstr "Statisk mediefejl" -#: templates/media_failure.html:23 +#: netbox/templates/media_failure.html:23 msgid "The following static media file failed to load" msgstr "Følgende statiske mediefil kunne ikke indlæses" -#: templates/media_failure.html:26 +#: netbox/templates/media_failure.html:26 msgid "Check the following" msgstr "Kontroller følgende" -#: templates/media_failure.html:29 +#: netbox/templates/media_failure.html:29 msgid "" "manage.py collectstatic was run during the most recent upgrade." " This installs the most recent iteration of each static file into the static" @@ -13325,7 +14123,7 @@ msgstr "" "opgradering. Dette installerer den seneste iteration af hver statisk fil i " "den statiske rodsti." -#: templates/media_failure.html:35 +#: netbox/templates/media_failure.html:35 #, python-format msgid "" "The HTTP service (e.g. nginx or Apache) is configured to serve files from " @@ -13337,7 +14135,7 @@ msgstr "" "href=\"%(docs_url)s\">installationsdokumentationen for yderligere " "vejledning." -#: templates/media_failure.html:47 +#: netbox/templates/media_failure.html:47 #, python-format msgid "" "The file %(filename)s exists in the static root directory and " @@ -13346,547 +14144,570 @@ msgstr "" "Filen %(filename)s findes i den statiske rodmappe og kan læses " "af HTTP-serveren." -#: templates/media_failure.html:55 +#: netbox/templates/media_failure.html:55 #, python-format msgid "Click here to attempt loading NetBox again." msgstr "" "Klik her for at forsøge at indlæse NetBox igen." -#: templates/tenancy/contact.html:18 tenancy/filtersets.py:147 -#: tenancy/forms/bulk_edit.py:137 tenancy/forms/filtersets.py:102 -#: tenancy/forms/forms.py:56 tenancy/forms/model_forms.py:106 -#: tenancy/forms/model_forms.py:130 tenancy/tables/contacts.py:98 +#: netbox/templates/tenancy/contact.html:18 netbox/tenancy/filtersets.py: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/model_forms.py:130 +#: netbox/tenancy/tables/contacts.py:98 msgid "Contact" msgstr "Kontakt" -#: templates/tenancy/contact.html:29 tenancy/forms/bulk_edit.py:99 +#: netbox/templates/tenancy/contact.html:29 +#: netbox/tenancy/forms/bulk_edit.py:99 msgid "Title" msgstr "Titel" -#: templates/tenancy/contact.html:33 tenancy/forms/bulk_edit.py:104 -#: tenancy/tables/contacts.py:64 +#: netbox/templates/tenancy/contact.html:33 +#: netbox/tenancy/forms/bulk_edit.py:104 netbox/tenancy/tables/contacts.py:64 msgid "Phone" msgstr "Telefonen" -#: templates/tenancy/contactgroup.html:18 tenancy/forms/forms.py:66 -#: tenancy/forms/model_forms.py:75 +#: netbox/templates/tenancy/contactgroup.html:18 +#: netbox/tenancy/forms/forms.py:66 netbox/tenancy/forms/model_forms.py:75 msgid "Contact Group" msgstr "Kontaktgruppe" -#: templates/tenancy/contactgroup.html:50 +#: netbox/templates/tenancy/contactgroup.html:50 msgid "Add Contact Group" msgstr "Tilføj kontaktgruppe" -#: templates/tenancy/contactrole.html:15 tenancy/filtersets.py:152 -#: tenancy/forms/forms.py:61 tenancy/forms/model_forms.py:87 +#: netbox/templates/tenancy/contactrole.html:15 +#: netbox/tenancy/filtersets.py:152 netbox/tenancy/forms/forms.py:61 +#: netbox/tenancy/forms/model_forms.py:87 msgid "Contact Role" msgstr "Kontaktrolle" -#: templates/tenancy/object_contacts.html:9 +#: netbox/templates/tenancy/object_contacts.html:9 msgid "Add a contact" msgstr "Tilføj en kontakt" -#: templates/tenancy/tenantgroup.html:17 +#: netbox/templates/tenancy/tenantgroup.html:17 msgid "Add Tenant" msgstr "Tilføj lejer" -#: templates/tenancy/tenantgroup.html:26 tenancy/forms/model_forms.py:32 -#: tenancy/tables/columns.py:51 tenancy/tables/columns.py:61 +#: netbox/templates/tenancy/tenantgroup.html:26 +#: netbox/tenancy/forms/model_forms.py:32 netbox/tenancy/tables/columns.py:51 +#: netbox/tenancy/tables/columns.py:61 msgid "Tenant Group" msgstr "Lejergruppe" -#: templates/tenancy/tenantgroup.html:59 +#: netbox/templates/tenancy/tenantgroup.html:59 msgid "Add Tenant Group" msgstr "Tilføj lejergruppe" -#: templates/users/group.html:39 templates/users/user.html:63 +#: netbox/templates/users/group.html:39 netbox/templates/users/user.html:63 msgid "Assigned Permissions" msgstr "Tildelte tilladelser" -#: templates/users/objectpermission.html:6 -#: templates/users/objectpermission.html:14 users/forms/filtersets.py:66 +#: netbox/templates/users/objectpermission.html:6 +#: netbox/templates/users/objectpermission.html:14 +#: netbox/users/forms/filtersets.py:66 msgid "Permission" msgstr "Tilladelse" -#: templates/users/objectpermission.html:34 +#: netbox/templates/users/objectpermission.html:34 msgid "View" msgstr "Udsigt" -#: templates/users/objectpermission.html:52 users/forms/model_forms.py:315 +#: netbox/templates/users/objectpermission.html:52 +#: netbox/users/forms/model_forms.py:315 msgid "Constraints" msgstr "Begrænsninger" -#: templates/users/objectpermission.html:72 +#: netbox/templates/users/objectpermission.html:72 msgid "Assigned Users" msgstr "Tildelte brugere" -#: templates/virtualization/cluster.html:52 +#: netbox/templates/virtualization/cluster.html:52 msgid "Allocated Resources" msgstr "Tildelte ressourcer" -#: templates/virtualization/cluster.html:55 -#: templates/virtualization/virtualmachine.html:125 +#: netbox/templates/virtualization/cluster.html:55 +#: netbox/templates/virtualization/virtualmachine.html:125 msgid "Virtual CPUs" msgstr "Virtuelle CPU'er" -#: templates/virtualization/cluster.html:59 -#: templates/virtualization/virtualmachine.html:129 +#: netbox/templates/virtualization/cluster.html:59 +#: netbox/templates/virtualization/virtualmachine.html:129 msgid "Memory" msgstr "Hukommelse" -#: templates/virtualization/cluster.html:69 -#: templates/virtualization/virtualmachine.html:140 +#: netbox/templates/virtualization/cluster.html:69 +#: netbox/templates/virtualization/virtualmachine.html:140 msgid "Disk Space" msgstr "Diskplads" -#: templates/virtualization/cluster/base.html:18 +#: netbox/templates/virtualization/cluster/base.html:18 msgid "Add Virtual Machine" msgstr "Tilføj virtuel maskine" -#: templates/virtualization/cluster/base.html:24 +#: netbox/templates/virtualization/cluster/base.html:24 msgid "Assign Device" msgstr "Tildel enhed" -#: templates/virtualization/cluster/devices.html:10 +#: netbox/templates/virtualization/cluster/devices.html:10 msgid "Remove Selected" msgstr "Fjern markeret" -#: templates/virtualization/cluster_add_devices.html:9 +#: netbox/templates/virtualization/cluster_add_devices.html:9 #, python-format msgid "Add Device to Cluster %(cluster)s" msgstr "Føj enhed til klynge %(cluster)s" -#: templates/virtualization/cluster_add_devices.html:23 +#: netbox/templates/virtualization/cluster_add_devices.html:23 msgid "Device Selection" msgstr "Valg af enhed" -#: templates/virtualization/cluster_add_devices.html:31 +#: netbox/templates/virtualization/cluster_add_devices.html:31 msgid "Add Devices" msgstr "Tilføj enheder" -#: templates/virtualization/clustergroup.html:10 -#: templates/virtualization/clustertype.html:10 +#: netbox/templates/virtualization/clustergroup.html:10 +#: netbox/templates/virtualization/clustertype.html:10 msgid "Add Cluster" msgstr "Tilføj klynge" -#: templates/virtualization/clustergroup.html:19 -#: virtualization/forms/model_forms.py:50 +#: netbox/templates/virtualization/clustergroup.html:19 +#: netbox/virtualization/forms/model_forms.py:50 msgid "Cluster Group" msgstr "Klyngegruppe" -#: templates/virtualization/clustertype.html:19 -#: templates/virtualization/virtualmachine.html:110 -#: virtualization/forms/model_forms.py:36 +#: netbox/templates/virtualization/clustertype.html:19 +#: netbox/templates/virtualization/virtualmachine.html:110 +#: netbox/virtualization/forms/model_forms.py:36 msgid "Cluster Type" msgstr "Klyngetype" -#: templates/virtualization/virtualdisk.html:18 +#: netbox/templates/virtualization/virtualdisk.html:18 msgid "Virtual Disk" msgstr "Virtuel disk" -#: templates/virtualization/virtualmachine.html:122 -#: virtualization/forms/bulk_edit.py:190 -#: virtualization/forms/model_forms.py:224 +#: netbox/templates/virtualization/virtualmachine.html:122 +#: netbox/virtualization/forms/bulk_edit.py:190 +#: netbox/virtualization/forms/model_forms.py:224 msgid "Resources" msgstr "Ressourcer" -#: templates/virtualization/virtualmachine.html:178 +#: netbox/templates/virtualization/virtualmachine.html:178 msgid "Add Virtual Disk" msgstr "Tilføj virtuel disk" -#: templates/vpn/ikepolicy.html:10 templates/vpn/ipsecprofile.html:33 -#: vpn/tables/crypto.py:166 +#: 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" msgstr "IKE-politik" -#: templates/vpn/ikepolicy.html:21 +#: netbox/templates/vpn/ikepolicy.html:21 msgid "IKE Version" msgstr "IKE-udgave" -#: templates/vpn/ikepolicy.html:29 +#: netbox/templates/vpn/ikepolicy.html:29 msgid "Pre-Shared Key" msgstr "Foruddelt nøgle" -#: templates/vpn/ikepolicy.html:33 -#: templates/wireless/inc/authentication_attrs.html:20 +#: netbox/templates/vpn/ikepolicy.html:33 +#: netbox/templates/wireless/inc/authentication_attrs.html:20 msgid "Show Secret" msgstr "Vis hemmelighed" -#: templates/vpn/ikepolicy.html:57 templates/vpn/ipsecpolicy.html:45 -#: templates/vpn/ipsecprofile.html:52 templates/vpn/ipsecprofile.html:77 -#: vpn/forms/model_forms.py:316 vpn/forms/model_forms.py:352 -#: vpn/tables/crypto.py:68 vpn/tables/crypto.py:134 +#: netbox/templates/vpn/ikepolicy.html:57 +#: netbox/templates/vpn/ipsecpolicy.html:45 +#: netbox/templates/vpn/ipsecprofile.html:52 +#: netbox/templates/vpn/ipsecprofile.html:77 +#: netbox/vpn/forms/model_forms.py:316 netbox/vpn/forms/model_forms.py:352 +#: netbox/vpn/tables/crypto.py:68 netbox/vpn/tables/crypto.py:134 msgid "Proposals" msgstr "Forslag" -#: templates/vpn/ikeproposal.html:10 +#: netbox/templates/vpn/ikeproposal.html:10 msgid "IKE Proposal" msgstr "IKE-forslag" -#: templates/vpn/ikeproposal.html:21 vpn/forms/bulk_edit.py:97 -#: vpn/forms/bulk_import.py:145 vpn/forms/filtersets.py:101 +#: netbox/templates/vpn/ikeproposal.html:21 netbox/vpn/forms/bulk_edit.py:97 +#: netbox/vpn/forms/bulk_import.py:145 netbox/vpn/forms/filtersets.py:101 msgid "Authentication method" msgstr "Autentificeringsmetode" -#: templates/vpn/ikeproposal.html:25 templates/vpn/ipsecproposal.html:21 -#: vpn/forms/bulk_edit.py:102 vpn/forms/bulk_edit.py:172 -#: vpn/forms/bulk_import.py:149 vpn/forms/bulk_import.py:195 -#: vpn/forms/filtersets.py:106 vpn/forms/filtersets.py:154 +#: netbox/templates/vpn/ikeproposal.html:25 +#: netbox/templates/vpn/ipsecproposal.html:21 +#: netbox/vpn/forms/bulk_edit.py:102 netbox/vpn/forms/bulk_edit.py:172 +#: netbox/vpn/forms/bulk_import.py:149 netbox/vpn/forms/bulk_import.py:195 +#: netbox/vpn/forms/filtersets.py:106 netbox/vpn/forms/filtersets.py:154 msgid "Encryption algorithm" msgstr "Krypteringsalgoritme" -#: templates/vpn/ikeproposal.html:29 templates/vpn/ipsecproposal.html:25 -#: vpn/forms/bulk_edit.py:107 vpn/forms/bulk_edit.py:177 -#: vpn/forms/bulk_import.py:153 vpn/forms/bulk_import.py:200 -#: vpn/forms/filtersets.py:111 vpn/forms/filtersets.py:159 +#: netbox/templates/vpn/ikeproposal.html:29 +#: netbox/templates/vpn/ipsecproposal.html:25 +#: netbox/vpn/forms/bulk_edit.py:107 netbox/vpn/forms/bulk_edit.py:177 +#: netbox/vpn/forms/bulk_import.py:153 netbox/vpn/forms/bulk_import.py:200 +#: netbox/vpn/forms/filtersets.py:111 netbox/vpn/forms/filtersets.py:159 msgid "Authentication algorithm" msgstr "Autentificeringsalgoritme" -#: templates/vpn/ikeproposal.html:33 +#: netbox/templates/vpn/ikeproposal.html:33 msgid "DH group" msgstr "DH-gruppen" -#: templates/vpn/ikeproposal.html:37 templates/vpn/ipsecproposal.html:29 -#: vpn/forms/bulk_edit.py:182 vpn/models/crypto.py:146 +#: netbox/templates/vpn/ikeproposal.html:37 +#: netbox/templates/vpn/ipsecproposal.html:29 +#: netbox/vpn/forms/bulk_edit.py:182 netbox/vpn/models/crypto.py:146 msgid "SA lifetime (seconds)" msgstr "SA levetid (sekunder)" -#: templates/vpn/ipsecpolicy.html:10 templates/vpn/ipsecprofile.html:66 -#: vpn/tables/crypto.py:170 +#: netbox/templates/vpn/ipsecpolicy.html:10 +#: netbox/templates/vpn/ipsecprofile.html:66 netbox/vpn/tables/crypto.py:170 msgid "IPSec Policy" msgstr "IPsec-politik" -#: templates/vpn/ipsecpolicy.html:21 vpn/forms/bulk_edit.py:210 -#: vpn/models/crypto.py:193 +#: netbox/templates/vpn/ipsecpolicy.html:21 netbox/vpn/forms/bulk_edit.py:210 +#: netbox/vpn/models/crypto.py:193 msgid "PFS group" msgstr "PFS-gruppe" -#: templates/vpn/ipsecprofile.html:10 vpn/forms/model_forms.py:54 +#: netbox/templates/vpn/ipsecprofile.html:10 +#: netbox/vpn/forms/model_forms.py:54 msgid "IPSec Profile" msgstr "IPsec-profil" -#: templates/vpn/ipsecprofile.html:89 vpn/tables/crypto.py:137 +#: netbox/templates/vpn/ipsecprofile.html:89 netbox/vpn/tables/crypto.py:137 msgid "PFS Group" msgstr "PFS-gruppen" -#: templates/vpn/ipsecproposal.html:10 +#: netbox/templates/vpn/ipsecproposal.html:10 msgid "IPSec Proposal" msgstr "IPsec-forslag" -#: templates/vpn/ipsecproposal.html:33 vpn/forms/bulk_edit.py:186 -#: vpn/models/crypto.py:152 +#: netbox/templates/vpn/ipsecproposal.html:33 +#: netbox/vpn/forms/bulk_edit.py:186 netbox/vpn/models/crypto.py:152 msgid "SA lifetime (KB)" msgstr "SA-levetid (KB)" -#: templates/vpn/l2vpn.html:11 templates/vpn/l2vpntermination.html:9 +#: netbox/templates/vpn/l2vpn.html:11 +#: netbox/templates/vpn/l2vpntermination.html:9 msgid "L2VPN Attributes" msgstr "L2VPN Egenskaber" -#: templates/vpn/l2vpn.html:60 templates/vpn/tunnel.html:76 +#: netbox/templates/vpn/l2vpn.html:60 netbox/templates/vpn/tunnel.html:76 msgid "Add a Termination" msgstr "Tilføj en opsigelse" -#: templates/vpn/tunnel.html:9 +#: netbox/templates/vpn/tunnel.html:9 msgid "Add Termination" msgstr "Tilføj opsigelse" -#: templates/vpn/tunnel.html:37 vpn/forms/bulk_edit.py:49 -#: vpn/forms/bulk_import.py:48 vpn/forms/filtersets.py:57 +#: netbox/templates/vpn/tunnel.html:37 netbox/vpn/forms/bulk_edit.py:49 +#: netbox/vpn/forms/bulk_import.py:48 netbox/vpn/forms/filtersets.py:57 msgid "Encapsulation" msgstr "Indkapsling" -#: templates/vpn/tunnel.html:41 vpn/forms/bulk_edit.py:55 -#: vpn/forms/bulk_import.py:53 vpn/forms/filtersets.py:64 -#: vpn/models/crypto.py:250 vpn/tables/tunnels.py:51 +#: netbox/templates/vpn/tunnel.html:41 netbox/vpn/forms/bulk_edit.py:55 +#: netbox/vpn/forms/bulk_import.py:53 netbox/vpn/forms/filtersets.py:64 +#: netbox/vpn/models/crypto.py:250 netbox/vpn/tables/tunnels.py:51 msgid "IPSec profile" msgstr "IPsec-profil" -#: templates/vpn/tunnel.html:45 vpn/forms/bulk_edit.py:69 -#: vpn/forms/filtersets.py:68 +#: netbox/templates/vpn/tunnel.html:45 netbox/vpn/forms/bulk_edit.py:69 +#: netbox/vpn/forms/filtersets.py:68 msgid "Tunnel ID" msgstr "Tunnel-ID" -#: templates/vpn/tunnelgroup.html:14 +#: netbox/templates/vpn/tunnelgroup.html:14 msgid "Add Tunnel" msgstr "Tilføj tunnel" -#: templates/vpn/tunnelgroup.html:23 vpn/forms/model_forms.py:36 -#: vpn/forms/model_forms.py:49 +#: netbox/templates/vpn/tunnelgroup.html:23 netbox/vpn/forms/model_forms.py:36 +#: netbox/vpn/forms/model_forms.py:49 msgid "Tunnel Group" msgstr "Tunnelgruppe" -#: templates/vpn/tunneltermination.html:10 +#: netbox/templates/vpn/tunneltermination.html:10 msgid "Tunnel Termination" msgstr "Tunnelafslutning" -#: templates/vpn/tunneltermination.html:35 vpn/forms/bulk_import.py:107 -#: vpn/forms/model_forms.py:102 vpn/forms/model_forms.py:138 -#: vpn/forms/model_forms.py:247 vpn/tables/tunnels.py:101 +#: netbox/templates/vpn/tunneltermination.html:35 +#: netbox/vpn/forms/bulk_import.py:107 netbox/vpn/forms/model_forms.py:102 +#: netbox/vpn/forms/model_forms.py:138 netbox/vpn/forms/model_forms.py:247 +#: netbox/vpn/tables/tunnels.py:101 msgid "Outside IP" msgstr "Udenfor IP" -#: templates/vpn/tunneltermination.html:51 +#: netbox/templates/vpn/tunneltermination.html:51 msgid "Peer Terminations" msgstr "Peer-opsigelser" -#: templates/wireless/inc/authentication_attrs.html:12 +#: netbox/templates/wireless/inc/authentication_attrs.html:12 msgid "Cipher" msgstr "Kryptering" -#: templates/wireless/inc/authentication_attrs.html:16 +#: netbox/templates/wireless/inc/authentication_attrs.html:16 msgid "PSK" msgstr "PSK" -#: templates/wireless/inc/wirelesslink_interface.html:35 -#: templates/wireless/inc/wirelesslink_interface.html:45 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:35 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:45 msgctxt "Abbreviation for megahertz" msgid "MHz" msgstr "MHz" -#: templates/wireless/wirelesslan.html:57 +#: netbox/templates/wireless/wirelesslan.html:57 msgid "Attached Interfaces" msgstr "Vedhæftede grænseflader" -#: templates/wireless/wirelesslangroup.html:17 +#: netbox/templates/wireless/wirelesslangroup.html:17 msgid "Add Wireless LAN" msgstr "Tilføj trådløst LAN" -#: templates/wireless/wirelesslangroup.html:26 -#: wireless/forms/model_forms.py:28 +#: netbox/templates/wireless/wirelesslangroup.html:26 +#: netbox/wireless/forms/model_forms.py:28 msgid "Wireless LAN Group" msgstr "Trådløs LAN-gruppe" -#: templates/wireless/wirelesslangroup.html:59 +#: netbox/templates/wireless/wirelesslangroup.html:59 msgid "Add Wireless LAN Group" msgstr "Tilføj trådløs LAN-gruppe" -#: templates/wireless/wirelesslink.html:14 +#: netbox/templates/wireless/wirelesslink.html:14 msgid "Link Properties" msgstr "Linkegenskaber" -#: templates/wireless/wirelesslink.html:38 wireless/forms/bulk_edit.py:129 -#: wireless/forms/filtersets.py:102 wireless/forms/model_forms.py:165 +#: 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" -#: tenancy/filtersets.py:28 +#: netbox/tenancy/filtersets.py:28 msgid "Parent contact group (ID)" msgstr "Forældrekontaktgruppe (ID)" -#: tenancy/filtersets.py:34 +#: netbox/tenancy/filtersets.py:34 msgid "Parent contact group (slug)" msgstr "Forældrekontaktgruppe (slug)" -#: tenancy/filtersets.py:40 tenancy/filtersets.py:67 tenancy/filtersets.py:110 +#: netbox/tenancy/filtersets.py:40 netbox/tenancy/filtersets.py:67 +#: netbox/tenancy/filtersets.py:110 msgid "Contact group (ID)" msgstr "Kontaktgruppe (ID)" -#: tenancy/filtersets.py:47 tenancy/filtersets.py:74 tenancy/filtersets.py:117 +#: netbox/tenancy/filtersets.py:47 netbox/tenancy/filtersets.py:74 +#: netbox/tenancy/filtersets.py:117 msgid "Contact group (slug)" msgstr "Kontaktgruppe (slug)" -#: tenancy/filtersets.py:104 +#: netbox/tenancy/filtersets.py:104 msgid "Contact (ID)" msgstr "Kontakt (ID)" -#: tenancy/filtersets.py:121 +#: netbox/tenancy/filtersets.py:121 msgid "Contact role (ID)" msgstr "Kontaktrolle (ID)" -#: tenancy/filtersets.py:127 +#: netbox/tenancy/filtersets.py:127 msgid "Contact role (slug)" msgstr "Kontaktrolle (slug)" -#: tenancy/filtersets.py:158 +#: netbox/tenancy/filtersets.py:158 msgid "Contact group" msgstr "Kontaktgruppe" -#: tenancy/filtersets.py:169 +#: netbox/tenancy/filtersets.py:169 msgid "Parent tenant group (ID)" msgstr "Overordnet lejergruppe (ID)" -#: tenancy/filtersets.py:175 +#: netbox/tenancy/filtersets.py:175 msgid "Parent tenant group (slug)" msgstr "Forældrelejergruppe (slug)" -#: tenancy/filtersets.py:181 tenancy/filtersets.py:201 +#: netbox/tenancy/filtersets.py:181 netbox/tenancy/filtersets.py:201 msgid "Tenant group (ID)" msgstr "Lejergruppe (ID)" -#: tenancy/filtersets.py:234 +#: netbox/tenancy/filtersets.py:234 msgid "Tenant Group (ID)" msgstr "Lejergruppe (ID)" -#: tenancy/filtersets.py:241 +#: netbox/tenancy/filtersets.py:241 msgid "Tenant Group (slug)" msgstr "Lejergruppe (slug)" -#: tenancy/forms/bulk_edit.py:66 +#: netbox/tenancy/forms/bulk_edit.py:66 msgid "Desciption" msgstr "Descipation" -#: tenancy/forms/bulk_import.py:101 +#: netbox/tenancy/forms/bulk_import.py:101 msgid "Assigned contact" msgstr "Tildelt kontakt" -#: tenancy/models/contacts.py:32 +#: netbox/tenancy/models/contacts.py:32 msgid "contact group" msgstr "kontaktgruppe" -#: tenancy/models/contacts.py:33 +#: netbox/tenancy/models/contacts.py:33 msgid "contact groups" msgstr "kontaktgrupper" -#: tenancy/models/contacts.py:48 +#: netbox/tenancy/models/contacts.py:48 msgid "contact role" msgstr "kontaktrolle" -#: tenancy/models/contacts.py:49 +#: netbox/tenancy/models/contacts.py:49 msgid "contact roles" msgstr "kontaktroller" -#: tenancy/models/contacts.py:68 +#: netbox/tenancy/models/contacts.py:68 msgid "title" msgstr "titel" -#: tenancy/models/contacts.py:73 +#: netbox/tenancy/models/contacts.py:73 msgid "phone" msgstr "telefon" -#: tenancy/models/contacts.py:78 +#: netbox/tenancy/models/contacts.py:78 msgid "email" msgstr "e-mail" -#: tenancy/models/contacts.py:87 +#: netbox/tenancy/models/contacts.py:87 msgid "link" msgstr "link" -#: tenancy/models/contacts.py:103 +#: netbox/tenancy/models/contacts.py:103 msgid "contact" msgstr "kontakt" -#: tenancy/models/contacts.py:104 +#: netbox/tenancy/models/contacts.py:104 msgid "contacts" msgstr "kontakter" -#: tenancy/models/contacts.py:153 +#: netbox/tenancy/models/contacts.py:153 msgid "contact assignment" msgstr "kontaktopgave" -#: tenancy/models/contacts.py:154 +#: netbox/tenancy/models/contacts.py:154 msgid "contact assignments" msgstr "kontaktopgaver" -#: tenancy/models/contacts.py:170 +#: netbox/tenancy/models/contacts.py:170 #, python-brace-format msgid "Contacts cannot be assigned to this object type ({type})." msgstr "Kontakter kan ikke tildeles denne objekttype ({type})." -#: tenancy/models/tenants.py:32 +#: netbox/tenancy/models/tenants.py:32 msgid "tenant group" msgstr "lejergruppe" -#: tenancy/models/tenants.py:33 +#: netbox/tenancy/models/tenants.py:33 msgid "tenant groups" msgstr "lejergrupper" -#: tenancy/models/tenants.py:70 +#: netbox/tenancy/models/tenants.py:70 msgid "Tenant name must be unique per group." msgstr "Lejernavnet skal være entydigt pr. Gruppe." -#: tenancy/models/tenants.py:80 +#: netbox/tenancy/models/tenants.py:80 msgid "Tenant slug must be unique per group." msgstr "Lejer-slug skal være unik pr. Gruppe." -#: tenancy/models/tenants.py:88 +#: netbox/tenancy/models/tenants.py:88 msgid "tenant" msgstr "lejer" -#: tenancy/models/tenants.py:89 +#: netbox/tenancy/models/tenants.py:89 msgid "tenants" msgstr "lejere" -#: tenancy/tables/contacts.py:112 +#: netbox/tenancy/tables/contacts.py:112 msgid "Contact Title" msgstr "Kontakt Titel" -#: tenancy/tables/contacts.py:116 +#: netbox/tenancy/tables/contacts.py:116 msgid "Contact Phone" msgstr "Kontakt Telefon" -#: tenancy/tables/contacts.py:121 +#: netbox/tenancy/tables/contacts.py:121 msgid "Contact Email" msgstr "Kontakt Email" -#: tenancy/tables/contacts.py:125 +#: netbox/tenancy/tables/contacts.py:125 msgid "Contact Address" msgstr "Kontaktadresse" -#: tenancy/tables/contacts.py:129 +#: netbox/tenancy/tables/contacts.py:129 msgid "Contact Link" msgstr "Kontakt Link" -#: tenancy/tables/contacts.py:133 +#: netbox/tenancy/tables/contacts.py:133 msgid "Contact Description" msgstr "Kontakt Beskrivelse" -#: users/filtersets.py:33 users/filtersets.py:73 +#: netbox/users/filtersets.py:33 netbox/users/filtersets.py:73 msgid "Permission (ID)" msgstr "Tilladelse (ID)" -#: users/filtersets.py:38 users/filtersets.py:78 +#: netbox/users/filtersets.py:38 netbox/users/filtersets.py:78 msgid "Notification group (ID)" msgstr "Meddelelsesgruppe (ID)" -#: users/forms/bulk_edit.py:26 +#: netbox/users/forms/bulk_edit.py:26 msgid "First name" msgstr "Fornavn" -#: users/forms/bulk_edit.py:31 +#: netbox/users/forms/bulk_edit.py:31 msgid "Last name" msgstr "Efternavn" -#: users/forms/bulk_edit.py:43 +#: netbox/users/forms/bulk_edit.py:43 msgid "Staff status" msgstr "Medarbejderstatus" -#: users/forms/bulk_edit.py:48 +#: netbox/users/forms/bulk_edit.py:48 msgid "Superuser status" msgstr "Superbrugerstatus" -#: users/forms/bulk_import.py:41 +#: netbox/users/forms/bulk_import.py:41 msgid "If no key is provided, one will be generated automatically." msgstr "Hvis der ikke er angivet nogen nøgle, genereres en automatisk." -#: users/forms/filtersets.py:51 users/tables.py:42 +#: netbox/users/forms/filtersets.py:51 netbox/users/tables.py:42 msgid "Is Staff" msgstr "Er personale" -#: users/forms/filtersets.py:58 users/tables.py:45 +#: netbox/users/forms/filtersets.py:58 netbox/users/tables.py:45 msgid "Is Superuser" msgstr "Er Superbruger" -#: users/forms/filtersets.py:91 users/tables.py:86 +#: netbox/users/forms/filtersets.py:91 netbox/users/tables.py:86 msgid "Can View" msgstr "Kan se" -#: users/forms/filtersets.py:98 users/tables.py:89 +#: netbox/users/forms/filtersets.py:98 netbox/users/tables.py:89 msgid "Can Add" msgstr "Kan tilføje" -#: users/forms/filtersets.py:105 users/tables.py:92 +#: netbox/users/forms/filtersets.py:105 netbox/users/tables.py:92 msgid "Can Change" msgstr "Kan ændre sig" -#: users/forms/filtersets.py:112 users/tables.py:95 +#: netbox/users/forms/filtersets.py:112 netbox/users/tables.py:95 msgid "Can Delete" msgstr "Kan slette" -#: users/forms/model_forms.py:62 +#: netbox/users/forms/model_forms.py:62 msgid "User Interface" msgstr "Brugergrænseflade" -#: users/forms/model_forms.py:114 +#: netbox/users/forms/model_forms.py:114 msgid "" "Keys must be at least 40 characters in length. Be sure to record " "your key prior to submitting this form, as it may no longer be " @@ -13896,7 +14717,7 @@ msgstr "" "nøgle før indsendelse af denne formular, da den muligvis ikke " "længere er tilgængelig, når tokenet er oprettet." -#: users/forms/model_forms.py:126 +#: netbox/users/forms/model_forms.py:126 msgid "" "Allowed IPv4/IPv6 networks from where the token can be used. Leave blank for" " no restrictions. Example: " @@ -13906,32 +14727,32 @@ msgstr "" "uden begrænsninger. Eksempel: 10.1.1.0/24.192.168.10.16/32.2001: db " "8:1: :/64" -#: users/forms/model_forms.py:175 +#: netbox/users/forms/model_forms.py:175 msgid "Confirm password" msgstr "Bekræft adgangskode" -#: users/forms/model_forms.py:178 +#: netbox/users/forms/model_forms.py:178 msgid "Enter the same password as before, for verification." msgstr "Indtast den samme adgangskode som før, til bekræftelse." -#: users/forms/model_forms.py:227 +#: netbox/users/forms/model_forms.py:227 msgid "Passwords do not match! Please check your input and try again." msgstr "" "Adgangskoder stemmer ikke overens! Kontroller dit input, og prøv igen." -#: users/forms/model_forms.py:294 +#: netbox/users/forms/model_forms.py:294 msgid "Additional actions" msgstr "Yderligere tiltag" -#: users/forms/model_forms.py:297 +#: netbox/users/forms/model_forms.py:297 msgid "Actions granted in addition to those listed above" msgstr "Foranstaltninger, der er ydet ud over dem, der er anført ovenfor" -#: users/forms/model_forms.py:313 +#: netbox/users/forms/model_forms.py:313 msgid "Objects" msgstr "Objekter" -#: users/forms/model_forms.py:325 +#: netbox/users/forms/model_forms.py:325 msgid "" "JSON expression of a queryset filter that will return only permitted " "objects. Leave null to match all objects of this type. A list of multiple " @@ -13941,77 +14762,77 @@ msgstr "" "Efterlad null for at matche alle objekter af denne type. En liste over flere" " objekter vil resultere i en logisk OR-operation." -#: users/forms/model_forms.py:364 +#: netbox/users/forms/model_forms.py:364 msgid "At least one action must be selected." msgstr "Mindst en handling skal vælges." -#: users/forms/model_forms.py:382 +#: netbox/users/forms/model_forms.py:382 #, python-brace-format msgid "Invalid filter for {model}: {error}" msgstr "Ugyldigt filter for {model}: {error}" -#: users/models/permissions.py:39 +#: netbox/users/models/permissions.py:39 msgid "The list of actions granted by this permission" msgstr "Listen over handlinger givet ved denne tilladelse" -#: users/models/permissions.py:44 +#: netbox/users/models/permissions.py:44 msgid "constraints" msgstr "restriktioner" -#: users/models/permissions.py:45 +#: netbox/users/models/permissions.py:45 msgid "" "Queryset filter matching the applicable objects of the selected type(s)" msgstr "" "Queryset-filter, der matcher de relevante objekter af den eller de valgte " "type" -#: users/models/permissions.py:52 +#: netbox/users/models/permissions.py:52 msgid "permission" msgstr "tilladelse" -#: users/models/permissions.py:53 users/models/users.py:47 +#: netbox/users/models/permissions.py:53 netbox/users/models/users.py:47 msgid "permissions" msgstr "tilladelser" -#: users/models/preferences.py:29 users/models/preferences.py:30 +#: netbox/users/models/preferences.py:29 netbox/users/models/preferences.py:30 msgid "user preferences" msgstr "brugerpræferencer" -#: users/models/preferences.py:97 +#: netbox/users/models/preferences.py:97 #, python-brace-format msgid "Key '{path}' is a leaf node; cannot assign new keys" msgstr "Nøgle '{path}'er en bladnode; kan ikke tildele nye nøgler" -#: users/models/preferences.py:109 +#: netbox/users/models/preferences.py:109 #, python-brace-format msgid "Key '{path}' is a dictionary; cannot assign a non-dictionary value" msgstr "Nøgle '{path}'er en ordbog; kan ikke tildele en ikke-ordbogsværdi" -#: users/models/tokens.py:36 +#: netbox/users/models/tokens.py:36 msgid "expires" msgstr "udløber" -#: users/models/tokens.py:41 +#: netbox/users/models/tokens.py:41 msgid "last used" msgstr "sidst brugt" -#: users/models/tokens.py:46 +#: netbox/users/models/tokens.py:46 msgid "key" msgstr "nøgle" -#: users/models/tokens.py:52 +#: netbox/users/models/tokens.py:52 msgid "write enabled" msgstr "skrive aktiveret" -#: users/models/tokens.py:54 +#: netbox/users/models/tokens.py:54 msgid "Permit create/update/delete operations using this key" msgstr "Tillad oprette/opdatere/slette handlinger ved hjælp af denne nøgle" -#: users/models/tokens.py:65 +#: netbox/users/models/tokens.py:65 msgid "allowed IPs" msgstr "tilladte IP'er" -#: users/models/tokens.py:67 +#: netbox/users/models/tokens.py:67 msgid "" "Allowed IPv4/IPv6 networks from where the token can be used. Leave blank for" " no restrictions. Ex: \"10.1.1.0/24, 192.168.10.16/32, 2001:DB8:1::/64\"" @@ -14020,43 +14841,43 @@ msgstr "" "uden begrænsninger. Eksempel: „10.1.1.0/24, 192.168.10.16/32, 2001: DB 8:1: " ":/64\"" -#: users/models/tokens.py:75 +#: netbox/users/models/tokens.py:75 msgid "token" msgstr "symbolet" -#: users/models/tokens.py:76 +#: netbox/users/models/tokens.py:76 msgid "tokens" msgstr "tokens" -#: users/models/users.py:57 vpn/models/crypto.py:42 +#: netbox/users/models/users.py:57 netbox/vpn/models/crypto.py:42 msgid "group" msgstr "gruppe" -#: users/models/users.py:92 +#: netbox/users/models/users.py:92 msgid "user" msgstr "bruger" -#: users/models/users.py:104 +#: netbox/users/models/users.py:104 msgid "A user with this username already exists." msgstr "Der findes allerede en bruger med dette brugernavn." -#: users/tables.py:98 +#: netbox/users/tables.py:98 msgid "Custom Actions" msgstr "Brugerdefinerede handlinger" -#: utilities/api.py:153 +#: netbox/utilities/api.py:153 #, python-brace-format msgid "Related object not found using the provided attributes: {params}" msgstr "" "Relateret objekt blev ikke fundet ved hjælp af de angivne attributter: " "{params}" -#: utilities/api.py:156 +#: netbox/utilities/api.py:156 #, python-brace-format msgid "Multiple objects match the provided attributes: {params}" msgstr "Flere objekter matcher de angivne attributter: {params}" -#: utilities/api.py:168 +#: netbox/utilities/api.py:168 #, python-brace-format msgid "" "Related objects must be referenced by numeric ID or by dictionary of " @@ -14065,42 +14886,42 @@ msgstr "" "Relaterede objekter skal refereres med numerisk id eller ved ordbog over " "attributter. Modtaget en ukendt værdi: {value}" -#: utilities/api.py:177 +#: netbox/utilities/api.py:177 #, python-brace-format msgid "Related object not found using the provided numeric ID: {id}" msgstr "" "Relateret objekt blev ikke fundet ved hjælp af det angivne numeriske ID: " "{id}" -#: utilities/choices.py:19 +#: netbox/utilities/choices.py:19 #, python-brace-format msgid "{name} has a key defined but CHOICES is not a list" msgstr "{name} har en nøgle defineret, men CHOICES er ikke en liste" -#: utilities/conversion.py:19 +#: netbox/utilities/conversion.py:19 msgid "Weight must be a positive number" msgstr "Vægt skal være et positivt tal" -#: utilities/conversion.py:21 +#: netbox/utilities/conversion.py:21 #, 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)" -#: utilities/conversion.py:32 utilities/conversion.py:62 +#: netbox/utilities/conversion.py:32 netbox/utilities/conversion.py:62 #, python-brace-format msgid "Unknown unit {unit}. Must be one of the following: {valid_units}" msgstr "Ukendt enhed {unit}. Skal være en af følgende: {valid_units}" -#: utilities/conversion.py:45 +#: netbox/utilities/conversion.py:45 msgid "Length must be a positive number" msgstr "Længden skal være et positivt tal" -#: utilities/conversion.py:47 +#: netbox/utilities/conversion.py:47 #, 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)" -#: utilities/error_handlers.py:31 +#: netbox/utilities/error_handlers.py:31 #, python-brace-format msgid "" "Unable to delete {objects}. {count} dependent objects were " @@ -14109,15 +14930,15 @@ msgstr "" "Kan ikke slette {objects}. {count} afhængige objekter blev " "fundet: " -#: utilities/error_handlers.py:33 +#: netbox/utilities/error_handlers.py:33 msgid "More than 50" msgstr "Mere end 50" -#: utilities/fields.py:30 +#: netbox/utilities/fields.py:30 msgid "RGB color in hexadecimal. Example: " msgstr "RGB-farve i hexadecimalt. Eksempel: " -#: utilities/fields.py:159 +#: netbox/utilities/fields.py:159 #, python-format msgid "" "%s(%r) is invalid. to_model parameter to CounterCacheField must be a string " @@ -14126,7 +14947,7 @@ msgstr "" "%s(%r) er ugyldig. to_model parameter til counterCacheField skal være en " "streng i formatet 'app.model'" -#: utilities/fields.py:169 +#: netbox/utilities/fields.py:169 #, python-format msgid "" "%s(%r) is invalid. to_field parameter to CounterCacheField must be a string " @@ -14135,36 +14956,36 @@ msgstr "" "%s(%r) er ugyldig. to_field-parameteren til counterCacheField skal være en " "streng i formatet 'felt'" -#: utilities/forms/bulk_import.py:23 +#: netbox/utilities/forms/bulk_import.py:23 msgid "Enter object data in CSV, JSON or YAML format." msgstr "Indtast objektdata i CSV-, JSON- eller YAML-format." -#: utilities/forms/bulk_import.py:36 +#: netbox/utilities/forms/bulk_import.py:36 msgid "CSV delimiter" msgstr "CSV afgrænser" -#: utilities/forms/bulk_import.py:37 +#: netbox/utilities/forms/bulk_import.py:37 msgid "The character which delimits CSV fields. Applies only to CSV format." msgstr "Det tegn, der afgrænser CSV-felter. Gælder kun for CSV-format." -#: utilities/forms/bulk_import.py:51 +#: netbox/utilities/forms/bulk_import.py:51 msgid "Form data must be empty when uploading/selecting a file." msgstr "Formulardata skal være tomme, når du uploader eller vælger en fil." -#: utilities/forms/bulk_import.py:80 +#: netbox/utilities/forms/bulk_import.py:80 #, python-brace-format msgid "Unknown data format: {format}" msgstr "Ukendt dataformat: {format}" -#: utilities/forms/bulk_import.py:100 +#: netbox/utilities/forms/bulk_import.py:100 msgid "Unable to detect data format. Please specify." msgstr "Kan ikke registrere dataformat. Angiv venligst." -#: utilities/forms/bulk_import.py:123 +#: netbox/utilities/forms/bulk_import.py:123 msgid "Invalid CSV delimiter" msgstr "Ugyldig CSV-afgrænsning" -#: utilities/forms/bulk_import.py:167 +#: netbox/utilities/forms/bulk_import.py:167 msgid "" "Invalid YAML data. Data must be in the form of multiple documents, or a " "single document comprising a list of dictionaries." @@ -14172,7 +14993,7 @@ msgstr "" "Ugyldige YAML-data. Data skal være i form af flere dokumenter, eller et " "enkelt dokument, der omfatter en liste over ordbøger." -#: utilities/forms/fields/array.py:20 +#: netbox/utilities/forms/fields/array.py:20 #, python-brace-format msgid "" "Invalid list ({value}). Must be numeric and ranges must be in ascending " @@ -14181,7 +15002,7 @@ msgstr "" "Ugyldig liste ({value}). Skal være numerisk, og intervaller skal være i " "stigende rækkefølge." -#: utilities/forms/fields/array.py:40 +#: netbox/utilities/forms/fields/array.py:40 msgid "" "Specify one or more numeric ranges separated by commas. Example: " "1-5,20-30" @@ -14189,7 +15010,7 @@ msgstr "" "Angiv et eller flere numeriske områder adskilt af kommaer. Eksempel: " "1-5,20-30" -#: utilities/forms/fields/array.py:47 +#: netbox/utilities/forms/fields/array.py:47 #, python-brace-format msgid "" "Invalid ranges ({value}). Must be a range of integers in ascending order." @@ -14197,17 +15018,18 @@ msgstr "" "Ugyldige intervaller ({value}). Skal være en række heltal i stigende " "rækkefølge." -#: utilities/forms/fields/csv.py:44 +#: netbox/utilities/forms/fields/csv.py:44 #, python-brace-format msgid "Invalid value for a multiple choice field: {value}" msgstr "Ugyldig værdi for et flervalgsfelt: {value}" -#: utilities/forms/fields/csv.py:57 utilities/forms/fields/csv.py:78 +#: netbox/utilities/forms/fields/csv.py:57 +#: netbox/utilities/forms/fields/csv.py:78 #, python-format msgid "Object not found: %(value)s" msgstr "Objektet blev ikke fundet: %(value)s" -#: utilities/forms/fields/csv.py:65 +#: netbox/utilities/forms/fields/csv.py:65 #, python-brace-format msgid "" "\"{value}\" is not a unique value for this field; multiple objects were " @@ -14215,20 +15037,20 @@ msgid "" msgstr "" "„{value}„er ikke en unik værdi for dette felt; flere objekter blev fundet" -#: utilities/forms/fields/csv.py:69 +#: netbox/utilities/forms/fields/csv.py:69 #, python-brace-format msgid "\"{field_name}\" is an invalid accessor field name." msgstr "„{field_name}„er et ugyldigt adgangsfeltnavn." -#: utilities/forms/fields/csv.py:101 +#: netbox/utilities/forms/fields/csv.py:101 msgid "Object type must be specified as \".\"" msgstr "Objekttype skal angives som“.„" -#: utilities/forms/fields/csv.py:105 +#: netbox/utilities/forms/fields/csv.py:105 msgid "Invalid object type" msgstr "Ugyldig objekttype" -#: utilities/forms/fields/expandable.py:25 +#: netbox/utilities/forms/fields/expandable.py:25 msgid "" "Alphanumeric ranges are supported for bulk creation. Mixed cases and types " "within a single range are not supported (example: " @@ -14238,7 +15060,7 @@ msgstr "" "og typer inden for et enkelt område understøttes ikke (eksempel: [ge, " "xe] -0/0/ [0-9])." -#: utilities/forms/fields/expandable.py:46 +#: netbox/utilities/forms/fields/expandable.py:46 msgid "" "Specify a numeric range to create multiple IPs.
    Example: " "192.0.2.[1,5,100-254]/24" @@ -14246,7 +15068,7 @@ msgstr "" "Angiv et numerisk interval for at oprette flere IP'er.
    Eksempel: " "192.0.2. [1.5,100-254] /24" -#: utilities/forms/fields/fields.py:31 +#: netbox/utilities/forms/fields/fields.py:31 #, python-brace-format msgid "" " Markdown Syntaks understøttes" -#: utilities/forms/fields/fields.py:48 +#: netbox/utilities/forms/fields/fields.py:48 msgid "URL-friendly unique shorthand" msgstr "URL-venlig unik stenografi" -#: utilities/forms/fields/fields.py:101 +#: netbox/utilities/forms/fields/fields.py:101 msgid "Enter context data in JSON format." msgstr "Indtast kontekstdata i JSON formatere." -#: utilities/forms/fields/fields.py:124 +#: netbox/utilities/forms/fields/fields.py:124 msgid "MAC address must be in EUI-48 format" msgstr "MAC-adressen skal være i EUI-48-format" -#: utilities/forms/forms.py:52 +#: netbox/utilities/forms/forms.py:52 msgid "Use regular expressions" msgstr "Brug regulære udtryk" -#: utilities/forms/forms.py:75 +#: netbox/utilities/forms/forms.py:75 msgid "" "Numeric ID of an existing object to update (if not creating a new object)" msgstr "" "Numerisk id for et eksisterende objekt, der skal opdateres (hvis der ikke " "oprettes et nyt objekt)" -#: utilities/forms/forms.py:92 +#: netbox/utilities/forms/forms.py:92 #, python-brace-format msgid "Unrecognized header: {name}" msgstr "Ikke-genkendt header: {name}" -#: utilities/forms/forms.py:118 +#: netbox/utilities/forms/forms.py:118 msgid "Available Columns" msgstr "Tilgængelige kolonner" -#: utilities/forms/forms.py:126 +#: netbox/utilities/forms/forms.py:126 msgid "Selected Columns" msgstr "Udvalgte kolonner" -#: utilities/forms/mixins.py:44 +#: netbox/utilities/forms/mixins.py:44 msgid "" "This object has been modified since the form was rendered. Please consult " "the object's change log for details." @@ -14299,13 +15121,13 @@ msgstr "" "Dette objekt er blevet ændret, siden formularen blev gengivet. Se objektets " "ændringslog for detaljer." -#: utilities/forms/utils.py:42 utilities/forms/utils.py:68 -#: utilities/forms/utils.py:85 utilities/forms/utils.py:87 +#: netbox/utilities/forms/utils.py:42 netbox/utilities/forms/utils.py:68 +#: netbox/utilities/forms/utils.py:85 netbox/utilities/forms/utils.py:87 #, python-brace-format msgid "Range \"{value}\" is invalid." msgstr "Rækkevidde“{value}„er ugyldig." -#: utilities/forms/utils.py:74 +#: netbox/utilities/forms/utils.py:74 #, python-brace-format msgid "" "Invalid range: Ending value ({end}) must be greater than beginning value " @@ -14314,67 +15136,67 @@ msgstr "" "Ugyldigt område: Slutværdi ({end}) skal være større end startværdien " "({begin})." -#: utilities/forms/utils.py:232 +#: netbox/utilities/forms/utils.py:232 #, python-brace-format msgid "Duplicate or conflicting column header for \"{field}\"" msgstr "Duplikat eller modstridende kolonneoverskrift for“{field}„" -#: utilities/forms/utils.py:238 +#: netbox/utilities/forms/utils.py:238 #, python-brace-format msgid "Duplicate or conflicting column header for \"{header}\"" msgstr "Duplikat eller modstridende kolonneoverskrift for“{header}„" -#: utilities/forms/utils.py:247 +#: netbox/utilities/forms/utils.py:247 #, python-brace-format msgid "Row {row}: Expected {count_expected} columns but found {count_found}" msgstr "" "Række {row}: Forventet {count_expected} kolonner, men fundet {count_found}" -#: utilities/forms/utils.py:270 +#: netbox/utilities/forms/utils.py:270 #, python-brace-format msgid "Unexpected column header \"{field}\" found." msgstr "Uventet kolonneoverskrift“{field}„fundet." -#: utilities/forms/utils.py:272 +#: netbox/utilities/forms/utils.py:272 #, python-brace-format msgid "Column \"{field}\" is not a related object; cannot use dots" msgstr "Kolonne“{field}„er ikke et beslægtet objekt; kan ikke bruge prikker" -#: utilities/forms/utils.py:276 +#: netbox/utilities/forms/utils.py:276 #, python-brace-format msgid "Invalid related object attribute for column \"{field}\": {to_field}" msgstr "Ugyldig relateret objektattribut for kolonne“{field}„: {to_field}" -#: utilities/forms/utils.py:284 +#: netbox/utilities/forms/utils.py:284 #, python-brace-format msgid "Required column header \"{header}\" not found." msgstr "Påkrævet kolonneoverskrift“{header}„Ikke fundet." -#: utilities/forms/widgets/apiselect.py:124 +#: netbox/utilities/forms/widgets/apiselect.py:124 #, python-brace-format msgid "Missing required value for dynamic query param: '{dynamic_params}'" msgstr "" "Mangler påkrævet værdi for dynamisk forespørgselsparam: '{dynamic_params}'" -#: utilities/forms/widgets/apiselect.py:141 +#: netbox/utilities/forms/widgets/apiselect.py:141 #, python-brace-format msgid "Missing required value for static query param: '{static_params}'" msgstr "" "Mangler påkrævet værdi for statisk forespørgselsparam: '{static_params}'" -#: utilities/password_validation.py:13 +#: netbox/utilities/password_validation.py:13 msgid "Password must have at least one numeral." msgstr "Adgangskoden skal have mindst et tal." -#: utilities/password_validation.py:18 +#: netbox/utilities/password_validation.py:18 msgid "Password must have at least one uppercase letter." msgstr "Adgangskoden skal have mindst et stort bogstav." -#: utilities/password_validation.py:23 +#: netbox/utilities/password_validation.py:23 msgid "Password must have at least one lowercase letter." msgstr "Adgangskoden skal have mindst et lille bogstav." -#: utilities/password_validation.py:27 +#: netbox/utilities/password_validation.py:27 msgid "" "Your password must contain at least one numeral, one uppercase letter and " "one lowercase letter." @@ -14382,7 +15204,7 @@ msgstr "" "Din adgangskode skal indeholde mindst et tal, et stort bogstav og et lille " "bogstav." -#: utilities/permissions.py:42 +#: netbox/utilities/permissions.py:42 #, python-brace-format msgid "" "Invalid permission name: {name}. Must be in the format " @@ -14391,127 +15213,127 @@ msgstr "" "Ugyldigt tilladelsesnavn: {name}. Skal være i formatet " "._" -#: utilities/permissions.py:60 +#: netbox/utilities/permissions.py:60 #, python-brace-format msgid "Unknown app_label/model_name for {name}" msgstr "Ukendt app_label/modelnavn til {name}" -#: utilities/request.py:76 +#: netbox/utilities/request.py:76 #, python-brace-format msgid "Invalid IP address set for {header}: {ip}" msgstr "Ugyldig IP-adresse indstillet til {header}: {ip}" -#: utilities/tables.py:47 +#: netbox/utilities/tables.py:47 #, python-brace-format msgid "A column named {name} is already defined for table {table_name}" msgstr "" "En kolonne med navnet {name} er allerede defineret for tabel {table_name}" -#: utilities/templates/builtins/customfield_value.html:30 +#: netbox/utilities/templates/builtins/customfield_value.html:30 msgid "Not defined" msgstr "Ikke defineret" -#: utilities/templates/buttons/bookmark.html:9 +#: netbox/utilities/templates/buttons/bookmark.html:9 msgid "Unbookmark" msgstr "Fjern bogmærke" -#: utilities/templates/buttons/bookmark.html:13 +#: netbox/utilities/templates/buttons/bookmark.html:13 msgid "Bookmark" msgstr "Bogmærke" -#: utilities/templates/buttons/clone.html:4 +#: netbox/utilities/templates/buttons/clone.html:4 msgid "Clone" msgstr "Klon" -#: utilities/templates/buttons/export.html:7 +#: netbox/utilities/templates/buttons/export.html:7 msgid "Current View" msgstr "Nuværende visning" -#: utilities/templates/buttons/export.html:8 +#: netbox/utilities/templates/buttons/export.html:8 msgid "All Data" msgstr "Alle data" -#: utilities/templates/buttons/export.html:28 +#: netbox/utilities/templates/buttons/export.html:28 msgid "Add export template" msgstr "Tilføj eksportskabelon" -#: utilities/templates/buttons/import.html:4 +#: netbox/utilities/templates/buttons/import.html:4 msgid "Import" msgstr "Importere" -#: utilities/templates/buttons/subscribe.html:10 +#: netbox/utilities/templates/buttons/subscribe.html:10 msgid "Unsubscribe" msgstr "Afmeld" -#: utilities/templates/buttons/subscribe.html:14 +#: netbox/utilities/templates/buttons/subscribe.html:14 msgid "Subscribe" msgstr "Abonner" -#: utilities/templates/form_helpers/render_field.html:41 +#: netbox/utilities/templates/form_helpers/render_field.html:41 msgid "Copy to clipboard" msgstr "Kopier til udklipsholder" -#: utilities/templates/form_helpers/render_field.html:57 +#: netbox/utilities/templates/form_helpers/render_field.html:57 msgid "This field is required" msgstr "Dette felt er påkrævet" -#: utilities/templates/form_helpers/render_field.html:70 +#: netbox/utilities/templates/form_helpers/render_field.html:70 msgid "Set Null" msgstr "Indstil Null" -#: utilities/templates/helpers/applied_filters.html:11 +#: netbox/utilities/templates/helpers/applied_filters.html:11 msgid "Clear all" msgstr "Ryd alle" -#: utilities/templates/helpers/table_config_form.html:8 +#: netbox/utilities/templates/helpers/table_config_form.html:8 msgid "Table Configuration" msgstr "Tabelkonfiguration" -#: utilities/templates/helpers/table_config_form.html:31 +#: netbox/utilities/templates/helpers/table_config_form.html:31 msgid "Move Up" msgstr "Flyt op" -#: utilities/templates/helpers/table_config_form.html:34 +#: netbox/utilities/templates/helpers/table_config_form.html:34 msgid "Move Down" msgstr "Flyt ned" -#: utilities/templates/navigation/menu.html:14 +#: netbox/utilities/templates/navigation/menu.html:14 msgid "Search…" msgstr "Søg..." -#: utilities/templates/navigation/menu.html:14 +#: netbox/utilities/templates/navigation/menu.html:14 msgid "Search NetBox" msgstr "Søg i NetBox" -#: utilities/templates/widgets/apiselect.html:7 +#: netbox/utilities/templates/widgets/apiselect.html:7 msgid "Open selector" msgstr "Åbn vælger" -#: utilities/templates/widgets/markdown_input.html:6 +#: netbox/utilities/templates/widgets/markdown_input.html:6 msgid "Write" msgstr "Skrive" -#: utilities/testing/views.py:632 +#: netbox/utilities/testing/views.py:632 msgid "The test must define csv_update_data." msgstr "Testen skal definere csv_update_data." -#: utilities/validators.py:65 +#: netbox/utilities/validators.py:65 #, python-brace-format msgid "{value} is not a valid regular expression." msgstr "{value} er ikke et gyldigt regulært udtryk." -#: utilities/views.py:57 +#: netbox/utilities/views.py:57 #, python-brace-format msgid "{self.__class__.__name__} must implement get_required_permission()" msgstr "" "{self.__class__.__name__} skal implementere get_required_permissions ()" -#: utilities/views.py:93 +#: netbox/utilities/views.py:93 #, python-brace-format msgid "{class_name} must implement get_required_permission()" msgstr "{class_name} skal implementere get_required_permissions ()" -#: utilities/views.py:117 +#: netbox/utilities/views.py:117 #, python-brace-format msgid "" "{class_name} has no queryset defined. ObjectPermissionRequiredMixin may only" @@ -14520,61 +15342,63 @@ msgstr "" "{class_name} har intet queryset defineret. ObjectPermissionRequiredMixin må " "kun bruges på visninger, der definerer et basisqueryset" -#: virtualization/filtersets.py:79 +#: netbox/virtualization/filtersets.py:79 msgid "Parent group (ID)" msgstr "Forældregruppe (ID)" -#: virtualization/filtersets.py:85 +#: netbox/virtualization/filtersets.py:85 msgid "Parent group (slug)" msgstr "Forældregruppe (slug)" -#: virtualization/filtersets.py:89 virtualization/filtersets.py:141 +#: netbox/virtualization/filtersets.py:89 +#: netbox/virtualization/filtersets.py:141 msgid "Cluster type (ID)" msgstr "Klyngetype (ID)" -#: virtualization/filtersets.py:151 virtualization/filtersets.py:271 +#: netbox/virtualization/filtersets.py:151 +#: netbox/virtualization/filtersets.py:271 msgid "Cluster (ID)" msgstr "Klynge (ID)" -#: virtualization/forms/bulk_edit.py:166 -#: virtualization/models/virtualmachines.py:115 +#: netbox/virtualization/forms/bulk_edit.py:166 +#: netbox/virtualization/models/virtualmachines.py:115 msgid "vCPUs" msgstr "vCPU'er" -#: virtualization/forms/bulk_edit.py:170 +#: netbox/virtualization/forms/bulk_edit.py:170 msgid "Memory (MB)" msgstr "Hukommelse (MB)" -#: virtualization/forms/bulk_edit.py:174 -msgid "Disk (GB)" -msgstr "Disk (GB)" +#: netbox/virtualization/forms/bulk_edit.py:174 +msgid "Disk (MB)" +msgstr "" -#: virtualization/forms/bulk_edit.py:334 -#: virtualization/forms/filtersets.py:251 -msgid "Size (GB)" -msgstr "Størrelse (GB)" +#: netbox/virtualization/forms/bulk_edit.py:334 +#: netbox/virtualization/forms/filtersets.py:251 +msgid "Size (MB)" +msgstr "" -#: virtualization/forms/bulk_import.py:44 +#: netbox/virtualization/forms/bulk_import.py:44 msgid "Type of cluster" msgstr "Type klynge" -#: virtualization/forms/bulk_import.py:51 +#: netbox/virtualization/forms/bulk_import.py:51 msgid "Assigned cluster group" msgstr "Tildelt klyngegruppe" -#: virtualization/forms/bulk_import.py:96 +#: netbox/virtualization/forms/bulk_import.py:96 msgid "Assigned cluster" msgstr "Tildelt klynge" -#: virtualization/forms/bulk_import.py:103 +#: netbox/virtualization/forms/bulk_import.py:103 msgid "Assigned device within cluster" msgstr "Tildelt enhed inden for klynge" -#: virtualization/forms/filtersets.py:183 +#: netbox/virtualization/forms/filtersets.py:183 msgid "Serial number" msgstr "Serienummer" -#: virtualization/forms/model_forms.py:153 +#: netbox/virtualization/forms/model_forms.py:153 #, python-brace-format msgid "" "{device} belongs to a different site ({device_site}) than the cluster " @@ -14583,48 +15407,48 @@ msgstr "" "{device} tilhører et andet område ({device_site}) end cluster " "({cluster_site})" -#: virtualization/forms/model_forms.py:192 +#: netbox/virtualization/forms/model_forms.py:192 msgid "Optionally pin this VM to a specific host device within the cluster" msgstr "Fastgør eventuelt denne VM til en bestemt værtsenhed i klyngen" -#: virtualization/forms/model_forms.py:221 +#: netbox/virtualization/forms/model_forms.py:221 msgid "Site/Cluster" msgstr "Område/Cluster" -#: virtualization/forms/model_forms.py:244 +#: netbox/virtualization/forms/model_forms.py:244 msgid "Disk size is managed via the attachment of virtual disks." msgstr "Diskstørrelse styres via vedhæftning af virtuelle diske." -#: virtualization/forms/model_forms.py:372 -#: virtualization/tables/virtualmachines.py:111 +#: netbox/virtualization/forms/model_forms.py:372 +#: netbox/virtualization/tables/virtualmachines.py:111 msgid "Disk" msgstr "Disken" -#: virtualization/models/clusters.py:25 +#: netbox/virtualization/models/clusters.py:25 msgid "cluster type" msgstr "klyngetype" -#: virtualization/models/clusters.py:26 +#: netbox/virtualization/models/clusters.py:26 msgid "cluster types" msgstr "klyngetyper" -#: virtualization/models/clusters.py:45 +#: netbox/virtualization/models/clusters.py:45 msgid "cluster group" msgstr "klyngegruppe" -#: virtualization/models/clusters.py:46 +#: netbox/virtualization/models/clusters.py:46 msgid "cluster groups" msgstr "klyngegrupper" -#: virtualization/models/clusters.py:121 +#: netbox/virtualization/models/clusters.py:121 msgid "cluster" msgstr "klynge" -#: virtualization/models/clusters.py:122 +#: netbox/virtualization/models/clusters.py:122 msgid "clusters" msgstr "klynger" -#: virtualization/models/clusters.py:141 +#: netbox/virtualization/models/clusters.py:141 #, python-brace-format msgid "" "{count} devices are assigned as hosts for this cluster but are not in site " @@ -14633,47 +15457,47 @@ msgstr "" "{count} enheder er tildelt som hostene til dette cluster, men er ikke på " "område {site}" -#: virtualization/models/virtualmachines.py:123 +#: netbox/virtualization/models/virtualmachines.py:123 msgid "memory (MB)" msgstr "hukommelse (MB)" -#: virtualization/models/virtualmachines.py:128 +#: netbox/virtualization/models/virtualmachines.py:128 msgid "disk (MB)" msgstr "disk (MB)" -#: virtualization/models/virtualmachines.py:166 +#: netbox/virtualization/models/virtualmachines.py:166 msgid "Virtual machine name must be unique per cluster." msgstr "Navnet på den virtuelle maskine skal være entydigt pr. klynge." -#: virtualization/models/virtualmachines.py:169 +#: netbox/virtualization/models/virtualmachines.py:169 msgid "virtual machine" msgstr "virtuel maskine" -#: virtualization/models/virtualmachines.py:170 +#: netbox/virtualization/models/virtualmachines.py:170 msgid "virtual machines" msgstr "virtuelle maskiner" -#: virtualization/models/virtualmachines.py:184 +#: netbox/virtualization/models/virtualmachines.py:184 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." -#: virtualization/models/virtualmachines.py:191 +#: netbox/virtualization/models/virtualmachines.py:191 #, 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})." -#: virtualization/models/virtualmachines.py:198 +#: netbox/virtualization/models/virtualmachines.py:198 msgid "Must specify a cluster when assigning a host device." msgstr "Skal angive en klynge, når du tildeler en værtsenhed." -#: virtualization/models/virtualmachines.py:203 +#: netbox/virtualization/models/virtualmachines.py:203 #, 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})." -#: virtualization/models/virtualmachines.py:215 +#: netbox/virtualization/models/virtualmachines.py:215 #, python-brace-format msgid "" "The specified disk size ({size}) must match the aggregate size of assigned " @@ -14682,17 +15506,17 @@ msgstr "" "Den angivne diskstørrelse ({size}) skal matche den samlede størrelse af " "tildelte virtuelle diske ({total_size})." -#: virtualization/models/virtualmachines.py:229 +#: netbox/virtualization/models/virtualmachines.py:229 #, 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.)" -#: virtualization/models/virtualmachines.py:238 +#: netbox/virtualization/models/virtualmachines.py:238 #, 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." -#: virtualization/models/virtualmachines.py:396 +#: netbox/virtualization/models/virtualmachines.py:396 #, python-brace-format msgid "" "The selected parent interface ({parent}) belongs to a different virtual " @@ -14701,7 +15525,7 @@ msgstr "" "Den valgte overordnede grænseflade ({parent}) tilhører en anden virtuel " "maskine ({virtual_machine})." -#: virtualization/models/virtualmachines.py:411 +#: netbox/virtualization/models/virtualmachines.py:411 #, python-brace-format msgid "" "The selected bridge interface ({bridge}) belongs to a different virtual " @@ -14710,7 +15534,7 @@ msgstr "" "Den valgte brogrænseflade ({bridge}) tilhører en anden virtuel maskine " "({virtual_machine})." -#: virtualization/models/virtualmachines.py:422 +#: netbox/virtualization/models/virtualmachines.py:422 #, python-brace-format msgid "" "The untagged VLAN ({untagged_vlan}) must belong to the same site as the " @@ -14719,392 +15543,415 @@ 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." -#: virtualization/models/virtualmachines.py:434 +#: netbox/virtualization/models/virtualmachines.py:434 msgid "size (MB)" msgstr "størrelse (MB)" -#: virtualization/models/virtualmachines.py:438 +#: netbox/virtualization/models/virtualmachines.py:438 msgid "virtual disk" msgstr "virtuel disk" -#: virtualization/models/virtualmachines.py:439 +#: netbox/virtualization/models/virtualmachines.py:439 msgid "virtual disks" msgstr "virtuelle diske" -#: virtualization/views.py:275 +#: netbox/virtualization/views.py:273 #, python-brace-format msgid "Added {count} devices to cluster {cluster}" msgstr "Tilføjet {count} enheder til klynge {cluster}" -#: virtualization/views.py:310 +#: netbox/virtualization/views.py:308 #, python-brace-format msgid "Removed {count} devices from cluster {cluster}" msgstr "Fjernet {count} enheder fra klynge {cluster}" -#: vpn/choices.py:31 +#: netbox/vpn/choices.py:35 msgid "IPsec - Transport" msgstr "IPsec - Transport" -#: vpn/choices.py:32 +#: netbox/vpn/choices.py:36 msgid "IPsec - Tunnel" msgstr "IPsec - Tunnel" -#: vpn/choices.py:33 +#: netbox/vpn/choices.py:37 msgid "IP-in-IP" msgstr "IP-i-IP" -#: vpn/choices.py:34 +#: netbox/vpn/choices.py:38 msgid "GRE" msgstr "GREE" -#: vpn/choices.py:56 +#: netbox/vpn/choices.py:39 +msgid "WireGuard" +msgstr "" + +#: netbox/vpn/choices.py:40 +msgid "OpenVPN" +msgstr "" + +#: netbox/vpn/choices.py:41 +msgid "L2TP" +msgstr "" + +#: netbox/vpn/choices.py:42 +msgid "PPTP" +msgstr "" + +#: netbox/vpn/choices.py:64 msgid "Hub" msgstr "Hub" -#: vpn/choices.py:57 +#: netbox/vpn/choices.py:65 msgid "Spoke" msgstr "Talede" -#: vpn/choices.py:80 +#: netbox/vpn/choices.py:88 msgid "Aggressive" msgstr "Aggressiv" -#: vpn/choices.py:81 +#: netbox/vpn/choices.py:89 msgid "Main" msgstr "Vigtigste" -#: vpn/choices.py:92 +#: netbox/vpn/choices.py:100 msgid "Pre-shared keys" msgstr "Foruddelte nøgler" -#: vpn/choices.py:93 +#: netbox/vpn/choices.py:101 msgid "Certificates" msgstr "Certifikater" -#: vpn/choices.py:94 +#: netbox/vpn/choices.py:102 msgid "RSA signatures" msgstr "RSA signaturer" -#: vpn/choices.py:95 +#: netbox/vpn/choices.py:103 msgid "DSA signatures" msgstr "DSA signaturer" -#: vpn/choices.py:178 vpn/choices.py:179 vpn/choices.py:180 vpn/choices.py:181 -#: vpn/choices.py:182 vpn/choices.py:183 vpn/choices.py:184 vpn/choices.py:185 -#: vpn/choices.py:186 vpn/choices.py:187 vpn/choices.py:188 vpn/choices.py:189 -#: vpn/choices.py:190 vpn/choices.py:191 vpn/choices.py:192 vpn/choices.py:193 -#: vpn/choices.py:194 vpn/choices.py:195 vpn/choices.py:196 vpn/choices.py:197 -#: vpn/choices.py:198 vpn/choices.py:199 vpn/choices.py:200 vpn/choices.py:201 +#: netbox/vpn/choices.py:186 netbox/vpn/choices.py:187 +#: netbox/vpn/choices.py:188 netbox/vpn/choices.py:189 +#: netbox/vpn/choices.py:190 netbox/vpn/choices.py:191 +#: netbox/vpn/choices.py:192 netbox/vpn/choices.py:193 +#: netbox/vpn/choices.py:194 netbox/vpn/choices.py:195 +#: netbox/vpn/choices.py:196 netbox/vpn/choices.py:197 +#: netbox/vpn/choices.py:198 netbox/vpn/choices.py:199 +#: netbox/vpn/choices.py:200 netbox/vpn/choices.py:201 +#: netbox/vpn/choices.py:202 netbox/vpn/choices.py:203 +#: netbox/vpn/choices.py:204 netbox/vpn/choices.py:205 +#: netbox/vpn/choices.py:206 netbox/vpn/choices.py:207 +#: netbox/vpn/choices.py:208 netbox/vpn/choices.py:209 #, python-brace-format msgid "Group {n}" msgstr "Gruppe {n}" -#: vpn/choices.py:243 +#: netbox/vpn/choices.py:251 msgid "Ethernet Private LAN" msgstr "Ethernet Privat LAN" -#: vpn/choices.py:244 +#: netbox/vpn/choices.py:252 msgid "Ethernet Virtual Private LAN" msgstr "Ethernet virtuelt privat LAN" -#: vpn/choices.py:247 +#: netbox/vpn/choices.py:255 msgid "Ethernet Private Tree" msgstr "Ethernet privat træ" -#: vpn/choices.py:248 +#: netbox/vpn/choices.py:256 msgid "Ethernet Virtual Private Tree" msgstr "Ethernet virtuelt privat træ" -#: vpn/filtersets.py:41 +#: netbox/vpn/filtersets.py:41 msgid "Tunnel group (ID)" msgstr "Tunnelgruppe (ID)" -#: vpn/filtersets.py:47 +#: netbox/vpn/filtersets.py:47 msgid "Tunnel group (slug)" msgstr "Tunnelgruppe (slug)" -#: vpn/filtersets.py:54 +#: netbox/vpn/filtersets.py:54 msgid "IPSec profile (ID)" msgstr "IPsec-profil (ID)" -#: vpn/filtersets.py:60 +#: netbox/vpn/filtersets.py:60 msgid "IPSec profile (name)" msgstr "IPsec-profil (navn)" -#: vpn/filtersets.py:81 +#: netbox/vpn/filtersets.py:81 msgid "Tunnel (ID)" msgstr "Tunnel (ID)" -#: vpn/filtersets.py:87 +#: netbox/vpn/filtersets.py:87 msgid "Tunnel (name)" msgstr "Tunnel (navn)" -#: vpn/filtersets.py:118 +#: netbox/vpn/filtersets.py:118 msgid "Outside IP (ID)" msgstr "Udenfor IP (ID)" -#: vpn/filtersets.py:130 vpn/filtersets.py:263 +#: netbox/vpn/filtersets.py:130 netbox/vpn/filtersets.py:263 msgid "IKE policy (ID)" msgstr "IKE-politik (ID)" -#: vpn/filtersets.py:136 vpn/filtersets.py:269 +#: netbox/vpn/filtersets.py:136 netbox/vpn/filtersets.py:269 msgid "IKE policy (name)" msgstr "IKE-politik (navn)" -#: vpn/filtersets.py:200 vpn/filtersets.py:273 +#: netbox/vpn/filtersets.py:200 netbox/vpn/filtersets.py:273 msgid "IPSec policy (ID)" msgstr "IPsec-politik (ID)" -#: vpn/filtersets.py:206 vpn/filtersets.py:279 +#: netbox/vpn/filtersets.py:206 netbox/vpn/filtersets.py:279 msgid "IPSec policy (name)" msgstr "IPsec-politik (navn)" -#: vpn/filtersets.py:348 +#: netbox/vpn/filtersets.py:348 msgid "L2VPN (slug)" msgstr "L2VPN (slug)" -#: vpn/filtersets.py:412 +#: netbox/vpn/filtersets.py:412 msgid "VM Interface (ID)" msgstr "VM-grænseflade (ID)" -#: vpn/filtersets.py:418 +#: netbox/vpn/filtersets.py:418 msgid "VLAN (name)" msgstr "VLAN (navn)" -#: vpn/forms/bulk_edit.py:45 vpn/forms/bulk_import.py:42 -#: vpn/forms/filtersets.py:54 +#: netbox/vpn/forms/bulk_edit.py:45 netbox/vpn/forms/bulk_import.py:42 +#: netbox/vpn/forms/filtersets.py:54 msgid "Tunnel group" msgstr "Tunnelgruppe" -#: vpn/forms/bulk_edit.py:117 vpn/models/crypto.py:47 +#: netbox/vpn/forms/bulk_edit.py:117 netbox/vpn/models/crypto.py:47 msgid "SA lifetime" msgstr "SA levetid" -#: vpn/forms/bulk_edit.py:151 wireless/forms/bulk_edit.py:79 -#: wireless/forms/bulk_edit.py:126 wireless/forms/filtersets.py:64 -#: wireless/forms/filtersets.py:98 +#: netbox/vpn/forms/bulk_edit.py:151 netbox/wireless/forms/bulk_edit.py:79 +#: netbox/wireless/forms/bulk_edit.py:126 +#: netbox/wireless/forms/filtersets.py:64 +#: netbox/wireless/forms/filtersets.py:98 msgid "Pre-shared key" msgstr "Foruddelt nøgle" -#: vpn/forms/bulk_edit.py:237 vpn/forms/bulk_import.py:239 -#: vpn/forms/filtersets.py:199 vpn/forms/model_forms.py:370 -#: vpn/models/crypto.py:104 +#: netbox/vpn/forms/bulk_edit.py:237 netbox/vpn/forms/bulk_import.py:239 +#: netbox/vpn/forms/filtersets.py:199 netbox/vpn/forms/model_forms.py:370 +#: netbox/vpn/models/crypto.py:104 msgid "IKE policy" msgstr "IKE-politik" -#: vpn/forms/bulk_edit.py:242 vpn/forms/bulk_import.py:244 -#: vpn/forms/filtersets.py:204 vpn/forms/model_forms.py:374 -#: vpn/models/crypto.py:209 +#: netbox/vpn/forms/bulk_edit.py:242 netbox/vpn/forms/bulk_import.py:244 +#: netbox/vpn/forms/filtersets.py:204 netbox/vpn/forms/model_forms.py:374 +#: netbox/vpn/models/crypto.py:209 msgid "IPSec policy" msgstr "IPsec-politik" -#: vpn/forms/bulk_import.py:50 +#: netbox/vpn/forms/bulk_import.py:50 msgid "Tunnel encapsulation" msgstr "Tunnelindkapsling" -#: vpn/forms/bulk_import.py:83 +#: netbox/vpn/forms/bulk_import.py:83 msgid "Operational role" msgstr "Operationel rolle" -#: vpn/forms/bulk_import.py:90 +#: netbox/vpn/forms/bulk_import.py:90 msgid "Parent device of assigned interface" msgstr "Overordnet enhed til tildelt grænseflade" -#: vpn/forms/bulk_import.py:97 +#: netbox/vpn/forms/bulk_import.py:97 msgid "Parent VM of assigned interface" msgstr "Overordnet VM for tildelt grænseflade" -#: vpn/forms/bulk_import.py:104 +#: netbox/vpn/forms/bulk_import.py:104 msgid "Device or virtual machine interface" msgstr "Enheds- eller virtuel maskingrænseflade" -#: vpn/forms/bulk_import.py:183 +#: netbox/vpn/forms/bulk_import.py:183 msgid "IKE proposal(s)" msgstr "IKE-forslag" -#: vpn/forms/bulk_import.py:215 vpn/models/crypto.py:197 +#: netbox/vpn/forms/bulk_import.py:215 netbox/vpn/models/crypto.py:197 msgid "Diffie-Hellman group for Perfect Forward Secrecy" msgstr "Diffie-Hellman-gruppe til Perfect Forward Secrecy" -#: vpn/forms/bulk_import.py:222 +#: netbox/vpn/forms/bulk_import.py:222 msgid "IPSec proposal(s)" msgstr "IPsec-forslag" -#: vpn/forms/bulk_import.py:236 +#: netbox/vpn/forms/bulk_import.py:236 msgid "IPSec protocol" msgstr "IPsec-protokol" -#: vpn/forms/bulk_import.py:266 +#: netbox/vpn/forms/bulk_import.py:266 msgid "L2VPN type" msgstr "L2VPN-type" -#: vpn/forms/bulk_import.py:287 +#: netbox/vpn/forms/bulk_import.py:287 msgid "Parent device (for interface)" msgstr "Forældreenhed (til grænseflade)" -#: vpn/forms/bulk_import.py:294 +#: netbox/vpn/forms/bulk_import.py:294 msgid "Parent virtual machine (for interface)" msgstr "Virtuel forældremaskine (til grænseflade)" -#: vpn/forms/bulk_import.py:301 +#: netbox/vpn/forms/bulk_import.py:301 msgid "Assigned interface (device or VM)" msgstr "Tildelt grænseflade (enhed eller VM)" -#: vpn/forms/bulk_import.py:334 +#: netbox/vpn/forms/bulk_import.py:334 msgid "Cannot import device and VM interface terminations simultaneously." msgstr "Kan ikke importere enheds- og VM-grænsefladeafslutninger samtidigt." -#: vpn/forms/bulk_import.py:336 +#: netbox/vpn/forms/bulk_import.py:336 msgid "Each termination must specify either an interface or a VLAN." msgstr "Hver afslutning skal angive enten en grænseflade eller et VLAN." -#: vpn/forms/bulk_import.py:338 +#: netbox/vpn/forms/bulk_import.py:338 msgid "Cannot assign both an interface and a VLAN." msgstr "Kan ikke tildele både en grænseflade og et VLAN." -#: vpn/forms/filtersets.py:130 +#: netbox/vpn/forms/filtersets.py:130 msgid "IKE version" msgstr "IKE-udgave" -#: vpn/forms/filtersets.py:142 vpn/forms/filtersets.py:175 -#: vpn/forms/model_forms.py:298 vpn/forms/model_forms.py:334 +#: netbox/vpn/forms/filtersets.py:142 netbox/vpn/forms/filtersets.py:175 +#: netbox/vpn/forms/model_forms.py:298 netbox/vpn/forms/model_forms.py:334 msgid "Proposal" msgstr "Forslag" -#: vpn/forms/filtersets.py:251 +#: netbox/vpn/forms/filtersets.py:251 msgid "Assigned Object Type" msgstr "Tildelt objekttype" -#: vpn/forms/model_forms.py:95 vpn/forms/model_forms.py:130 -#: vpn/forms/model_forms.py:240 vpn/tables/tunnels.py:91 +#: netbox/vpn/forms/model_forms.py:95 netbox/vpn/forms/model_forms.py:130 +#: netbox/vpn/forms/model_forms.py:240 netbox/vpn/tables/tunnels.py:91 msgid "Tunnel interface" msgstr "Tunnelgrænseflade" -#: vpn/forms/model_forms.py:150 +#: netbox/vpn/forms/model_forms.py:150 msgid "First Termination" msgstr "Første opsigelse" -#: vpn/forms/model_forms.py:153 +#: netbox/vpn/forms/model_forms.py:153 msgid "Second Termination" msgstr "Anden opsigelse" -#: vpn/forms/model_forms.py:197 +#: netbox/vpn/forms/model_forms.py:197 msgid "This parameter is required when defining a termination." msgstr "Denne parameter er påkrævet, når der defineres en opsigelse." -#: vpn/forms/model_forms.py:320 vpn/forms/model_forms.py:356 +#: netbox/vpn/forms/model_forms.py:320 netbox/vpn/forms/model_forms.py:356 msgid "Policy" msgstr "Politik" -#: vpn/forms/model_forms.py:487 +#: netbox/vpn/forms/model_forms.py:487 msgid "A termination must specify an interface or VLAN." msgstr "En opsigelse skal angive en grænseflade eller VLAN." -#: vpn/forms/model_forms.py:489 +#: netbox/vpn/forms/model_forms.py:489 msgid "" "A termination can only have one terminating object (an interface or VLAN)." msgstr "" "En terminering kan kun have et afsluttende objekt (en grænseflade eller " "VLAN)." -#: vpn/models/crypto.py:33 +#: netbox/vpn/models/crypto.py:33 msgid "encryption algorithm" msgstr "krypteringsalgoritme" -#: vpn/models/crypto.py:37 +#: netbox/vpn/models/crypto.py:37 msgid "authentication algorithm" msgstr "autentificeringsalgoritme" -#: vpn/models/crypto.py:44 +#: netbox/vpn/models/crypto.py:44 msgid "Diffie-Hellman group ID" msgstr "Diffie-Hellman gruppe-ID" -#: vpn/models/crypto.py:50 +#: netbox/vpn/models/crypto.py:50 msgid "Security association lifetime (in seconds)" msgstr "Sikkerhedsforeningens levetid (i sekunder)" -#: vpn/models/crypto.py:59 +#: netbox/vpn/models/crypto.py:59 msgid "IKE proposal" msgstr "IKE-forslag" -#: vpn/models/crypto.py:60 +#: netbox/vpn/models/crypto.py:60 msgid "IKE proposals" msgstr "IKE-forslag" -#: vpn/models/crypto.py:76 +#: netbox/vpn/models/crypto.py:76 msgid "version" msgstr "udgave" -#: vpn/models/crypto.py:88 vpn/models/crypto.py:190 +#: netbox/vpn/models/crypto.py:88 netbox/vpn/models/crypto.py:190 msgid "proposals" msgstr "forslag" -#: vpn/models/crypto.py:91 wireless/models.py:39 +#: netbox/vpn/models/crypto.py:91 netbox/wireless/models.py:39 msgid "pre-shared key" msgstr "foruddelt nøgle" -#: vpn/models/crypto.py:105 +#: netbox/vpn/models/crypto.py:105 msgid "IKE policies" msgstr "IKE politikker" -#: vpn/models/crypto.py:118 +#: netbox/vpn/models/crypto.py:118 msgid "Mode is required for selected IKE version" msgstr "Tilstand er påkrævet for valgt IKE-version" -#: vpn/models/crypto.py:122 +#: netbox/vpn/models/crypto.py:122 msgid "Mode cannot be used for selected IKE version" msgstr "Tilstand kan ikke bruges til valgt IKE-version" -#: vpn/models/crypto.py:136 +#: netbox/vpn/models/crypto.py:136 msgid "encryption" msgstr "kryptering" -#: vpn/models/crypto.py:141 +#: netbox/vpn/models/crypto.py:141 msgid "authentication" msgstr "autentificering" -#: vpn/models/crypto.py:149 +#: netbox/vpn/models/crypto.py:149 msgid "Security association lifetime (seconds)" msgstr "Sikkerhedsassocieringens levetid (sekunder)" -#: vpn/models/crypto.py:155 +#: netbox/vpn/models/crypto.py:155 msgid "Security association lifetime (in kilobytes)" msgstr "Sikkerhedsassocieringens levetid (i kilobyte)" -#: vpn/models/crypto.py:164 +#: netbox/vpn/models/crypto.py:164 msgid "IPSec proposal" msgstr "IPsec-forslag" -#: vpn/models/crypto.py:165 +#: netbox/vpn/models/crypto.py:165 msgid "IPSec proposals" msgstr "IPsec-forslag" -#: vpn/models/crypto.py:178 +#: netbox/vpn/models/crypto.py:178 msgid "Encryption and/or authentication algorithm must be defined" msgstr "Kryptering og/eller autentificeringsalgoritme skal defineres" -#: vpn/models/crypto.py:210 +#: netbox/vpn/models/crypto.py:210 msgid "IPSec policies" msgstr "IPsec-politikker" -#: vpn/models/crypto.py:251 +#: netbox/vpn/models/crypto.py:251 msgid "IPSec profiles" msgstr "IPsec-profiler" -#: vpn/models/l2vpn.py:116 +#: netbox/vpn/models/l2vpn.py:116 msgid "L2VPN termination" msgstr "L2VPN-opsigelse" -#: vpn/models/l2vpn.py:117 +#: netbox/vpn/models/l2vpn.py:117 msgid "L2VPN terminations" msgstr "L2VPN-opsigelser" -#: vpn/models/l2vpn.py:135 +#: netbox/vpn/models/l2vpn.py:135 #, python-brace-format msgid "L2VPN Termination already assigned ({assigned_object})" msgstr "L2VPN-opsigelse er allerede tildelt ({assigned_object})" -#: vpn/models/l2vpn.py:147 +#: netbox/vpn/models/l2vpn.py:147 #, python-brace-format msgid "" "{l2vpn_type} L2VPNs cannot have more than two terminations; found " @@ -15113,186 +15960,194 @@ msgstr "" "{l2vpn_type} L2VPN'er kan ikke have mere end to terminationer; fundet " "{terminations_count} allerede defineret." -#: vpn/models/tunnels.py:26 +#: netbox/vpn/models/tunnels.py:26 msgid "tunnel group" msgstr "tunnelgruppe" -#: vpn/models/tunnels.py:27 +#: netbox/vpn/models/tunnels.py:27 msgid "tunnel groups" msgstr "tunnelgrupper" -#: vpn/models/tunnels.py:53 +#: netbox/vpn/models/tunnels.py:53 msgid "encapsulation" msgstr "indkapsling" -#: vpn/models/tunnels.py:72 +#: netbox/vpn/models/tunnels.py:72 msgid "tunnel ID" msgstr "Tunnel-ID" -#: vpn/models/tunnels.py:94 +#: netbox/vpn/models/tunnels.py:94 msgid "tunnel" msgstr "tunnel" -#: vpn/models/tunnels.py:95 +#: netbox/vpn/models/tunnels.py:95 msgid "tunnels" msgstr "tunneler" -#: vpn/models/tunnels.py:153 +#: netbox/vpn/models/tunnels.py:153 msgid "An object may be terminated to only one tunnel at a time." msgstr "Et objekt må kun afsluttes til en tunnel ad gangen." -#: vpn/models/tunnels.py:156 +#: netbox/vpn/models/tunnels.py:156 msgid "tunnel termination" msgstr "tunnelafslutning" -#: vpn/models/tunnels.py:157 +#: netbox/vpn/models/tunnels.py:157 msgid "tunnel terminations" msgstr "tunnelafslutninger" -#: vpn/models/tunnels.py:174 +#: netbox/vpn/models/tunnels.py:174 #, python-brace-format msgid "{name} is already attached to a tunnel ({tunnel})." msgstr "{name} er allerede knyttet til en tunnel ({tunnel})." -#: vpn/tables/crypto.py:22 +#: netbox/vpn/tables/crypto.py:22 msgid "Authentication Method" msgstr "Autentificeringsmetode" -#: vpn/tables/crypto.py:25 vpn/tables/crypto.py:97 +#: netbox/vpn/tables/crypto.py:25 netbox/vpn/tables/crypto.py:97 msgid "Encryption Algorithm" msgstr "Krypteringsalgoritme" -#: vpn/tables/crypto.py:28 vpn/tables/crypto.py:100 +#: netbox/vpn/tables/crypto.py:28 netbox/vpn/tables/crypto.py:100 msgid "Authentication Algorithm" msgstr "Autentificeringsalgoritme" -#: vpn/tables/crypto.py:34 +#: netbox/vpn/tables/crypto.py:34 msgid "SA Lifetime" msgstr "SA levetid" -#: vpn/tables/crypto.py:71 +#: netbox/vpn/tables/crypto.py:71 msgid "Pre-shared Key" msgstr "Foruddelt nøgle" -#: vpn/tables/crypto.py:103 +#: netbox/vpn/tables/crypto.py:103 msgid "SA Lifetime (Seconds)" msgstr "SA levetid (sekunder)" -#: vpn/tables/crypto.py:106 +#: netbox/vpn/tables/crypto.py:106 msgid "SA Lifetime (KB)" msgstr "SA levetid (KB)" -#: vpn/tables/l2vpn.py:69 +#: netbox/vpn/tables/l2vpn.py:69 msgid "Object Parent" msgstr "Objektforælder" -#: vpn/tables/l2vpn.py:74 +#: netbox/vpn/tables/l2vpn.py:74 msgid "Object Site" msgstr "Objektområde" -#: wireless/choices.py:11 +#: netbox/wireless/choices.py:11 msgid "Access point" msgstr "Adgangspunkt" -#: wireless/choices.py:12 +#: netbox/wireless/choices.py:12 msgid "Station" msgstr "Stationen" -#: wireless/choices.py:467 +#: netbox/wireless/choices.py:467 msgid "Open" msgstr "Åbn" -#: wireless/choices.py:469 +#: netbox/wireless/choices.py:469 msgid "WPA Personal (PSK)" msgstr "WPA Personlig (PSK)" -#: wireless/choices.py:470 +#: netbox/wireless/choices.py:470 msgid "WPA Enterprise" msgstr "WPA-virksomhed" -#: wireless/forms/bulk_edit.py:73 wireless/forms/bulk_edit.py:120 -#: wireless/forms/bulk_import.py:68 wireless/forms/bulk_import.py:71 -#: wireless/forms/bulk_import.py:110 wireless/forms/bulk_import.py:113 -#: wireless/forms/filtersets.py:59 wireless/forms/filtersets.py:93 +#: netbox/wireless/forms/bulk_edit.py:73 +#: netbox/wireless/forms/bulk_edit.py:120 +#: netbox/wireless/forms/bulk_import.py:68 +#: netbox/wireless/forms/bulk_import.py:71 +#: netbox/wireless/forms/bulk_import.py:110 +#: netbox/wireless/forms/bulk_import.py:113 +#: netbox/wireless/forms/filtersets.py:59 +#: netbox/wireless/forms/filtersets.py:93 msgid "Authentication cipher" msgstr "Autentificeringskryptering" -#: wireless/forms/bulk_edit.py:134 wireless/forms/bulk_import.py:116 -#: wireless/forms/bulk_import.py:119 wireless/forms/filtersets.py:106 +#: 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" -#: wireless/forms/bulk_import.py:52 +#: netbox/wireless/forms/bulk_import.py:52 msgid "Bridged VLAN" msgstr "Broet VLAN" -#: wireless/forms/bulk_import.py:89 wireless/tables/wirelesslink.py:28 +#: netbox/wireless/forms/bulk_import.py:89 +#: netbox/wireless/tables/wirelesslink.py:28 msgid "Interface A" msgstr "Grænseflade A" -#: wireless/forms/bulk_import.py:93 wireless/tables/wirelesslink.py:37 +#: netbox/wireless/forms/bulk_import.py:93 +#: netbox/wireless/tables/wirelesslink.py:37 msgid "Interface B" msgstr "Grænseflade B" -#: wireless/forms/model_forms.py:161 +#: netbox/wireless/forms/model_forms.py:161 msgid "Side B" msgstr "Side B" -#: wireless/models.py:31 +#: netbox/wireless/models.py:31 msgid "authentication cipher" msgstr "autentificeringskryptering" -#: wireless/models.py:69 +#: netbox/wireless/models.py:69 msgid "wireless LAN group" msgstr "trådløs LAN-gruppe" -#: wireless/models.py:70 +#: netbox/wireless/models.py:70 msgid "wireless LAN groups" msgstr "trådløse LAN-grupper" -#: wireless/models.py:116 +#: netbox/wireless/models.py:116 msgid "wireless LAN" msgstr "trådløst LAN" -#: wireless/models.py:144 +#: netbox/wireless/models.py:144 msgid "interface A" msgstr "grænseflade A" -#: wireless/models.py:151 +#: netbox/wireless/models.py:151 msgid "interface B" msgstr "grænseflade B" -#: wireless/models.py:165 +#: netbox/wireless/models.py:165 msgid "distance" msgstr "afstand" -#: wireless/models.py:172 +#: netbox/wireless/models.py:172 msgid "distance unit" msgstr "afstandsenhed" -#: wireless/models.py:219 +#: netbox/wireless/models.py:219 msgid "wireless link" msgstr "trådløst link" -#: wireless/models.py:220 +#: netbox/wireless/models.py:220 msgid "wireless links" msgstr "trådløse links" -#: wireless/models.py:236 +#: 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" -#: wireless/models.py:242 wireless/models.py:248 +#: netbox/wireless/models.py:242 netbox/wireless/models.py:248 #, python-brace-format msgid "{type} is not a wireless interface." msgstr "{type} er ikke en trådløs grænseflade." -#: wireless/utils.py:16 +#: netbox/wireless/utils.py:16 #, python-brace-format msgid "Invalid channel value: {channel}" msgstr "Ugyldig kanalværdi: {channel}" -#: wireless/utils.py:26 +#: netbox/wireless/utils.py:26 #, python-brace-format msgid "Invalid channel attribute: {name}" msgstr "Ugyldig kanalattribut: {name}" diff --git a/netbox/translations/de/LC_MESSAGES/django.mo b/netbox/translations/de/LC_MESSAGES/django.mo index fdcad7156..1a628bec8 100644 Binary files a/netbox/translations/de/LC_MESSAGES/django.mo and b/netbox/translations/de/LC_MESSAGES/django.mo differ diff --git a/netbox/translations/de/LC_MESSAGES/django.po b/netbox/translations/de/LC_MESSAGES/django.po index e2964dc56..37178c46e 100644 --- a/netbox/translations/de/LC_MESSAGES/django.po +++ b/netbox/translations/de/LC_MESSAGES/django.po @@ -8,9 +8,9 @@ # Niklas, 2024 # fepilins, 2024 # Steffen, 2024 +# haagehan, 2024 # Jeremy Stretch, 2024 # Robin Reinhardt, 2024 -# haagehan, 2024 # chbally, 2024 # #, fuzzy @@ -18,7 +18,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-10-28 19:20+0000\n" +"POT-Creation-Date: 2024-12-12 05:02+0000\n" "PO-Revision-Date: 2023-10-30 17:48+0000\n" "Last-Translator: chbally, 2024\n" "Language-Team: German (https://app.transifex.com/netbox-community/teams/178115/de/)\n" @@ -28,1877 +28,2144 @@ msgstr "" "Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: account/tables.py:27 templates/account/token.html:22 -#: templates/users/token.html:17 users/forms/bulk_import.py:39 -#: users/forms/model_forms.py:112 +#: netbox/account/tables.py:27 netbox/templates/account/token.html:22 +#: netbox/templates/users/token.html:17 netbox/users/forms/bulk_import.py:39 +#: netbox/users/forms/model_forms.py:112 msgid "Key" msgstr "Schlüssel" -#: account/tables.py:31 users/forms/filtersets.py:132 +#: netbox/account/tables.py:31 netbox/users/forms/filtersets.py:132 msgid "Write Enabled" msgstr "Schreibberechtigung" -#: account/tables.py:35 core/choices.py:86 core/tables/jobs.py:29 -#: core/tables/tasks.py:79 extras/tables/tables.py:335 -#: extras/tables/tables.py:566 templates/account/token.html:43 -#: templates/core/configrevision.html:26 -#: templates/core/configrevision_restore.html:12 templates/core/job.html:69 -#: templates/core/rq_task.html:16 templates/core/rq_task.html:73 -#: templates/core/rq_worker.html:14 -#: templates/extras/htmx/script_result.html:12 -#: templates/extras/journalentry.html:22 templates/generic/object.html:58 -#: templates/users/token.html:35 +#: netbox/account/tables.py:35 netbox/core/choices.py:86 +#: 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 +#: netbox/templates/core/configrevision.html:26 +#: netbox/templates/core/configrevision_restore.html:12 +#: netbox/templates/core/job.html:69 netbox/templates/core/rq_task.html:16 +#: netbox/templates/core/rq_task.html:73 +#: netbox/templates/core/rq_worker.html:14 +#: netbox/templates/extras/htmx/script_result.html:12 +#: netbox/templates/extras/journalentry.html:22 +#: netbox/templates/generic/object.html:58 +#: netbox/templates/users/token.html:35 msgid "Created" msgstr "Erstellt" -#: account/tables.py:39 templates/account/token.html:47 -#: templates/users/token.html:39 users/forms/bulk_edit.py:117 -#: users/forms/filtersets.py:136 +#: netbox/account/tables.py:39 netbox/templates/account/token.html:47 +#: netbox/templates/users/token.html:39 netbox/users/forms/bulk_edit.py:117 +#: netbox/users/forms/filtersets.py:136 msgid "Expires" msgstr "Läuft ab" -#: account/tables.py:42 users/forms/filtersets.py:141 +#: netbox/account/tables.py:42 netbox/users/forms/filtersets.py:141 msgid "Last Used" msgstr "Zuletzt verwendet" -#: account/tables.py:45 templates/account/token.html:55 -#: templates/users/token.html:47 users/forms/bulk_edit.py:122 -#: users/forms/model_forms.py:124 +#: netbox/account/tables.py:45 netbox/templates/account/token.html:55 +#: netbox/templates/users/token.html:47 netbox/users/forms/bulk_edit.py:122 +#: netbox/users/forms/model_forms.py:124 msgid "Allowed IPs" msgstr "Erlaubte IP-Adressen" -#: account/views.py:114 +#: netbox/account/views.py:114 #, python-brace-format msgid "Logged in as {user}." msgstr "Angemeldet als {user}." -#: account/views.py:164 +#: netbox/account/views.py:164 msgid "You have logged out." msgstr "Du hast dich abgemeldet." -#: account/views.py:216 +#: netbox/account/views.py:216 msgid "Your preferences have been updated." msgstr "Ihre Einstellungen wurden aktualisiert." -#: account/views.py:239 +#: netbox/account/views.py:239 msgid "LDAP-authenticated user credentials cannot be changed within NetBox." msgstr "" "Die LDAP Zugangsdaten können nicht innerhalb von NetBox geändert werden." -#: account/views.py:254 +#: netbox/account/views.py:254 msgid "Your password has been changed successfully." msgstr "Dein Passwort wurde erfolgreich geändert." -#: circuits/choices.py:21 dcim/choices.py:20 dcim/choices.py:102 -#: dcim/choices.py:185 dcim/choices.py:237 dcim/choices.py:1530 -#: dcim/choices.py:1606 dcim/choices.py:1656 virtualization/choices.py:20 -#: virtualization/choices.py:45 vpn/choices.py:18 +#: netbox/circuits/choices.py:21 netbox/dcim/choices.py:20 +#: netbox/dcim/choices.py:102 netbox/dcim/choices.py: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 msgid "Planned" msgstr "Geplant" -#: circuits/choices.py:22 netbox/navigation/menu.py:305 +#: netbox/circuits/choices.py:22 netbox/netbox/navigation/menu.py:305 msgid "Provisioning" msgstr "Provisionierung" -#: circuits/choices.py:23 core/tables/tasks.py:22 dcim/choices.py:22 -#: dcim/choices.py:103 dcim/choices.py:184 dcim/choices.py:236 -#: dcim/choices.py:1605 dcim/choices.py:1655 extras/tables/tables.py:495 -#: ipam/choices.py:31 ipam/choices.py:49 ipam/choices.py:69 -#: ipam/choices.py:154 templates/extras/configcontext.html:25 -#: templates/users/user.html:37 users/forms/bulk_edit.py:38 -#: virtualization/choices.py:22 virtualization/choices.py:44 vpn/choices.py:19 -#: wireless/choices.py:25 +#: netbox/circuits/choices.py:23 netbox/core/tables/tasks.py:22 +#: netbox/dcim/choices.py:22 netbox/dcim/choices.py:103 +#: netbox/dcim/choices.py: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/templates/users/user.html:37 netbox/users/forms/bulk_edit.py:38 +#: netbox/virtualization/choices.py:22 netbox/virtualization/choices.py:44 +#: netbox/vpn/choices.py:19 netbox/wireless/choices.py:25 msgid "Active" msgstr "Aktiv" -#: circuits/choices.py:24 dcim/choices.py:183 dcim/choices.py:235 -#: dcim/choices.py:1604 dcim/choices.py:1657 virtualization/choices.py:24 -#: virtualization/choices.py:43 +#: 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 msgid "Offline" msgstr "Offline" -#: circuits/choices.py:25 +#: netbox/circuits/choices.py:25 msgid "Deprovisioning" msgstr "Deprovisionierung" -#: circuits/choices.py:26 +#: netbox/circuits/choices.py:26 msgid "Decommissioned" msgstr "Stillgelegt" -#: circuits/choices.py:90 dcim/choices.py:1617 tenancy/choices.py:17 +#: netbox/circuits/choices.py:90 netbox/dcim/choices.py:1619 +#: netbox/tenancy/choices.py:17 msgid "Primary" msgstr "Primär" -#: circuits/choices.py:91 ipam/choices.py:90 tenancy/choices.py:18 +#: netbox/circuits/choices.py:91 netbox/ipam/choices.py:90 +#: netbox/tenancy/choices.py:18 msgid "Secondary" msgstr "Sekundär" -#: circuits/choices.py:92 tenancy/choices.py:19 +#: netbox/circuits/choices.py:92 netbox/tenancy/choices.py:19 msgid "Tertiary" msgstr "Tertiär" -#: circuits/choices.py:93 tenancy/choices.py:20 +#: netbox/circuits/choices.py:93 netbox/tenancy/choices.py:20 msgid "Inactive" msgstr "Inaktiv" -#: circuits/filtersets.py:31 circuits/filtersets.py:198 dcim/filtersets.py:98 -#: dcim/filtersets.py:152 dcim/filtersets.py:212 dcim/filtersets.py:333 -#: dcim/filtersets.py:464 dcim/filtersets.py:1021 dcim/filtersets.py:1368 -#: dcim/filtersets.py:1903 dcim/filtersets.py:2146 dcim/filtersets.py:2204 -#: ipam/filtersets.py:339 ipam/filtersets.py:959 -#: virtualization/filtersets.py:45 virtualization/filtersets.py:173 -#: vpn/filtersets.py:358 +#: 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:339 netbox/ipam/filtersets.py:959 +#: netbox/virtualization/filtersets.py:45 +#: netbox/virtualization/filtersets.py:173 netbox/vpn/filtersets.py:358 msgid "Region (ID)" msgstr "Region (ID)" -#: circuits/filtersets.py:38 circuits/filtersets.py:205 dcim/filtersets.py:105 -#: dcim/filtersets.py:158 dcim/filtersets.py:219 dcim/filtersets.py:340 -#: dcim/filtersets.py:471 dcim/filtersets.py:1028 dcim/filtersets.py:1375 -#: dcim/filtersets.py:1910 dcim/filtersets.py:2153 dcim/filtersets.py:2211 -#: extras/filtersets.py:509 ipam/filtersets.py:346 ipam/filtersets.py:966 -#: virtualization/filtersets.py:52 virtualization/filtersets.py:180 -#: vpn/filtersets.py:353 +#: 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:346 +#: netbox/ipam/filtersets.py:966 netbox/virtualization/filtersets.py:52 +#: netbox/virtualization/filtersets.py:180 netbox/vpn/filtersets.py:353 msgid "Region (slug)" msgstr "Region (URL-Slug)" -#: circuits/filtersets.py:44 circuits/filtersets.py:211 dcim/filtersets.py:128 -#: dcim/filtersets.py:225 dcim/filtersets.py:346 dcim/filtersets.py:477 -#: dcim/filtersets.py:1034 dcim/filtersets.py:1381 dcim/filtersets.py:1916 -#: dcim/filtersets.py:2159 dcim/filtersets.py:2217 ipam/filtersets.py:352 -#: ipam/filtersets.py:972 virtualization/filtersets.py:58 -#: virtualization/filtersets.py:186 +#: 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:352 +#: netbox/ipam/filtersets.py:972 netbox/virtualization/filtersets.py:58 +#: netbox/virtualization/filtersets.py:186 msgid "Site group (ID)" msgstr "Standortgruppe (ID)" -#: circuits/filtersets.py:51 circuits/filtersets.py:218 dcim/filtersets.py:135 -#: dcim/filtersets.py:232 dcim/filtersets.py:353 dcim/filtersets.py:484 -#: dcim/filtersets.py:1041 dcim/filtersets.py:1388 dcim/filtersets.py:1923 -#: dcim/filtersets.py:2166 dcim/filtersets.py:2224 extras/filtersets.py:515 -#: ipam/filtersets.py:359 ipam/filtersets.py:979 -#: virtualization/filtersets.py:65 virtualization/filtersets.py:193 +#: 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:359 netbox/ipam/filtersets.py:979 +#: netbox/virtualization/filtersets.py:65 +#: netbox/virtualization/filtersets.py:193 msgid "Site group (slug)" msgstr "Standortgruppe (URL-Slug)" -#: circuits/filtersets.py:56 circuits/forms/bulk_edit.py:188 -#: circuits/forms/bulk_edit.py:216 circuits/forms/bulk_import.py:124 -#: circuits/forms/filtersets.py:51 circuits/forms/filtersets.py:171 -#: circuits/forms/filtersets.py:209 circuits/forms/model_forms.py:138 -#: circuits/forms/model_forms.py:154 circuits/tables/circuits.py:113 -#: dcim/forms/bulk_edit.py:168 dcim/forms/bulk_edit.py:329 -#: dcim/forms/bulk_edit.py:677 dcim/forms/bulk_edit.py:873 -#: dcim/forms/bulk_import.py:131 dcim/forms/bulk_import.py:230 -#: dcim/forms/bulk_import.py:309 dcim/forms/bulk_import.py:540 -#: dcim/forms/bulk_import.py:1311 dcim/forms/bulk_import.py:1339 -#: dcim/forms/filtersets.py:87 dcim/forms/filtersets.py:225 -#: dcim/forms/filtersets.py:342 dcim/forms/filtersets.py:439 -#: dcim/forms/filtersets.py:753 dcim/forms/filtersets.py:997 -#: dcim/forms/filtersets.py:1021 dcim/forms/filtersets.py:1111 -#: dcim/forms/filtersets.py:1149 dcim/forms/filtersets.py:1584 -#: dcim/forms/filtersets.py:1608 dcim/forms/filtersets.py:1632 -#: dcim/forms/model_forms.py:137 dcim/forms/model_forms.py:165 -#: dcim/forms/model_forms.py:238 dcim/forms/model_forms.py:463 -#: dcim/forms/model_forms.py:723 dcim/forms/object_create.py:391 -#: dcim/tables/devices.py:153 dcim/tables/power.py:26 dcim/tables/power.py:93 -#: dcim/tables/racks.py:122 dcim/tables/racks.py:207 dcim/tables/sites.py:134 -#: extras/filtersets.py:525 ipam/forms/bulk_edit.py:218 -#: ipam/forms/bulk_edit.py:285 ipam/forms/bulk_edit.py:484 -#: ipam/forms/bulk_import.py:171 ipam/forms/bulk_import.py:429 -#: ipam/forms/filtersets.py:153 ipam/forms/filtersets.py:231 -#: ipam/forms/filtersets.py:432 ipam/forms/filtersets.py:489 -#: ipam/forms/model_forms.py:205 ipam/forms/model_forms.py:636 -#: ipam/tables/ip.py:245 ipam/tables/vlans.py:118 ipam/tables/vlans.py:221 -#: templates/circuits/inc/circuit_termination_fields.html:6 -#: templates/dcim/device.html:22 templates/dcim/inc/cable_termination.html:8 -#: templates/dcim/inc/cable_termination.html:33 -#: templates/dcim/location.html:37 templates/dcim/powerpanel.html:22 -#: templates/dcim/rack.html:20 templates/dcim/rackreservation.html:28 -#: templates/dcim/site.html:28 templates/ipam/prefix.html:56 -#: templates/ipam/vlan.html:23 templates/ipam/vlan_edit.html:40 -#: templates/virtualization/cluster.html:42 -#: templates/virtualization/virtualmachine.html:95 -#: virtualization/forms/bulk_edit.py:91 virtualization/forms/bulk_edit.py:109 -#: virtualization/forms/bulk_edit.py:124 -#: virtualization/forms/bulk_import.py:59 -#: virtualization/forms/bulk_import.py:85 -#: virtualization/forms/filtersets.py:79 -#: virtualization/forms/filtersets.py:148 -#: virtualization/forms/model_forms.py:71 -#: virtualization/forms/model_forms.py:104 -#: virtualization/forms/model_forms.py:171 -#: virtualization/tables/clusters.py:77 -#: virtualization/tables/virtualmachines.py:63 vpn/forms/filtersets.py:266 -#: wireless/forms/model_forms.py:76 wireless/forms/model_forms.py:118 +#: 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/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/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/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 msgid "Site" msgstr "Standort" -#: circuits/filtersets.py:62 circuits/filtersets.py:229 -#: circuits/filtersets.py:274 dcim/filtersets.py:242 dcim/filtersets.py:363 -#: dcim/filtersets.py:458 extras/filtersets.py:531 ipam/filtersets.py:238 -#: ipam/filtersets.py:369 ipam/filtersets.py:989 -#: virtualization/filtersets.py:75 virtualization/filtersets.py:203 -#: vpn/filtersets.py:363 +#: 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/virtualization/filtersets.py:75 +#: netbox/virtualization/filtersets.py:203 netbox/vpn/filtersets.py:363 msgid "Site (slug)" msgstr "Standort (URL-Slug)" -#: circuits/filtersets.py:67 +#: netbox/circuits/filtersets.py:67 msgid "ASN (ID)" msgstr "ASN (ID)" -#: circuits/filtersets.py:73 circuits/forms/filtersets.py:31 -#: ipam/forms/model_forms.py:159 ipam/models/asns.py:108 -#: ipam/models/asns.py:125 ipam/tables/asn.py:41 templates/ipam/asn.html:20 +#: 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/templates/ipam/asn.html:20 msgid "ASN" msgstr "ASN" -#: circuits/filtersets.py:95 circuits/filtersets.py:122 -#: circuits/filtersets.py:156 circuits/filtersets.py:283 -#: circuits/filtersets.py:325 ipam/filtersets.py:243 +#: 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 msgid "Provider (ID)" msgstr "Provider (ID)" -#: circuits/filtersets.py:101 circuits/filtersets.py:128 -#: circuits/filtersets.py:162 circuits/filtersets.py:289 -#: circuits/filtersets.py:331 ipam/filtersets.py:249 +#: 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 msgid "Provider (slug)" msgstr "Provider (URL-Slug)" -#: circuits/filtersets.py:167 +#: netbox/circuits/filtersets.py:167 msgid "Provider account (ID)" msgstr "Providerkonto (ID)" -#: circuits/filtersets.py:173 +#: netbox/circuits/filtersets.py:173 msgid "Provider account (account)" msgstr "Providerkonto (Konto)" -#: circuits/filtersets.py:178 +#: netbox/circuits/filtersets.py:178 msgid "Provider network (ID)" msgstr "Providernetzwerk (ID)" -#: circuits/filtersets.py:182 +#: netbox/circuits/filtersets.py:182 msgid "Circuit type (ID)" msgstr "Transportnetz Typ (ID)" -#: circuits/filtersets.py:188 +#: netbox/circuits/filtersets.py:188 msgid "Circuit type (slug)" msgstr "Transportnetz Typ (URL-Slug)" -#: circuits/filtersets.py:223 circuits/filtersets.py:268 -#: dcim/filtersets.py:236 dcim/filtersets.py:357 dcim/filtersets.py:452 -#: dcim/filtersets.py:1045 dcim/filtersets.py:1393 dcim/filtersets.py:1928 -#: dcim/filtersets.py:2170 dcim/filtersets.py:2229 ipam/filtersets.py:232 -#: ipam/filtersets.py:363 ipam/filtersets.py:983 -#: virtualization/filtersets.py:69 virtualization/filtersets.py:197 -#: vpn/filtersets.py:368 +#: 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:232 netbox/ipam/filtersets.py:363 +#: netbox/ipam/filtersets.py:983 netbox/virtualization/filtersets.py:69 +#: netbox/virtualization/filtersets.py:197 netbox/vpn/filtersets.py:368 msgid "Site (ID)" msgstr "Standort (ID)" -#: circuits/filtersets.py:233 circuits/filtersets.py:237 +#: netbox/circuits/filtersets.py:233 netbox/circuits/filtersets.py:237 msgid "Termination A (ID)" msgstr "Abschlusspunkt A (ID)" -#: circuits/filtersets.py:260 circuits/filtersets.py:320 core/filtersets.py:77 -#: core/filtersets.py:136 core/filtersets.py:173 dcim/filtersets.py:751 -#: dcim/filtersets.py:1362 dcim/filtersets.py:2277 extras/filtersets.py:41 -#: extras/filtersets.py:63 extras/filtersets.py:92 extras/filtersets.py:132 -#: extras/filtersets.py:181 extras/filtersets.py:209 extras/filtersets.py:239 -#: extras/filtersets.py:276 extras/filtersets.py:348 extras/filtersets.py:391 -#: extras/filtersets.py:438 extras/filtersets.py:498 extras/filtersets.py:657 -#: extras/filtersets.py:703 ipam/forms/model_forms.py:449 -#: netbox/filtersets.py:282 netbox/forms/__init__.py:22 -#: netbox/forms/base.py:167 templates/htmx/object_selector.html:28 -#: templates/inc/filter_list.html:46 templates/ipam/ipaddress_assign.html:29 -#: templates/search.html:7 templates/search.html:26 tenancy/filtersets.py:99 -#: users/filtersets.py:23 users/filtersets.py:57 users/filtersets.py:102 -#: users/filtersets.py:150 utilities/forms/forms.py:104 -#: utilities/templates/navigation/menu.html:16 +#: 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/templates/htmx/object_selector.html:28 +#: netbox/templates/inc/filter_list.html:46 +#: netbox/templates/ipam/ipaddress_assign.html:29 +#: netbox/templates/search.html:7 netbox/templates/search.html:26 +#: netbox/tenancy/filtersets.py:99 netbox/users/filtersets.py:23 +#: netbox/users/filtersets.py:57 netbox/users/filtersets.py:102 +#: netbox/users/filtersets.py:150 netbox/utilities/forms/forms.py:104 +#: netbox/utilities/templates/navigation/menu.html:16 msgid "Search" msgstr "Suche" -#: circuits/filtersets.py:264 circuits/forms/bulk_edit.py:172 -#: circuits/forms/bulk_edit.py:246 circuits/forms/bulk_import.py:115 -#: circuits/forms/filtersets.py:198 circuits/forms/filtersets.py:214 -#: circuits/forms/filtersets.py:260 circuits/forms/model_forms.py:111 -#: circuits/forms/model_forms.py:133 circuits/forms/model_forms.py:199 -#: circuits/tables/circuits.py:104 circuits/tables/circuits.py:164 -#: dcim/forms/connections.py:73 templates/circuits/circuit.html:15 -#: templates/circuits/circuitgroupassignment.html:26 -#: templates/circuits/circuittermination.html:19 -#: templates/dcim/inc/cable_termination.html:55 -#: templates/dcim/trace/circuit.html:4 +#: 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/templates/circuits/circuit.html:15 +#: netbox/templates/circuits/circuitgroupassignment.html:26 +#: 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" -#: circuits/filtersets.py:278 +#: netbox/circuits/filtersets.py:278 msgid "ProviderNetwork (ID)" msgstr "Providernetzwerk (ID)" -#: circuits/filtersets.py:335 +#: netbox/circuits/filtersets.py:335 msgid "Circuit (ID)" msgstr "Transportnetz (ID)" -#: circuits/filtersets.py:341 +#: netbox/circuits/filtersets.py:341 msgid "Circuit (CID)" msgstr "Transportnetz (CID)" -#: circuits/filtersets.py:345 +#: netbox/circuits/filtersets.py:345 msgid "Circuit group (ID)" msgstr "Transportnetzgruppe (ID)" -#: circuits/filtersets.py:351 +#: netbox/circuits/filtersets.py:351 msgid "Circuit group (slug)" msgstr "Transportnetzgruppe (SLUG)" -#: circuits/forms/bulk_edit.py:30 circuits/forms/filtersets.py:56 -#: circuits/forms/model_forms.py:29 circuits/tables/providers.py:33 -#: dcim/forms/bulk_edit.py:128 dcim/forms/filtersets.py:195 -#: dcim/forms/model_forms.py:123 dcim/tables/sites.py:94 -#: ipam/models/asns.py:126 ipam/tables/asn.py:27 ipam/views.py:213 -#: netbox/navigation/menu.py:172 netbox/navigation/menu.py:175 -#: templates/circuits/provider.html:23 +#: 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/templates/circuits/provider.html:23 msgid "ASNs" msgstr "ASNs" -#: circuits/forms/bulk_edit.py:34 circuits/forms/bulk_edit.py:56 -#: circuits/forms/bulk_edit.py:83 circuits/forms/bulk_edit.py:104 -#: circuits/forms/bulk_edit.py:164 circuits/forms/bulk_edit.py:183 -#: circuits/forms/bulk_edit.py:228 core/forms/bulk_edit.py:28 -#: dcim/forms/bulk_create.py:35 dcim/forms/bulk_edit.py:73 -#: dcim/forms/bulk_edit.py:92 dcim/forms/bulk_edit.py:151 -#: dcim/forms/bulk_edit.py:192 dcim/forms/bulk_edit.py:210 -#: dcim/forms/bulk_edit.py:288 dcim/forms/bulk_edit.py:432 -#: dcim/forms/bulk_edit.py:466 dcim/forms/bulk_edit.py:481 -#: dcim/forms/bulk_edit.py:540 dcim/forms/bulk_edit.py:584 -#: dcim/forms/bulk_edit.py:618 dcim/forms/bulk_edit.py:642 -#: dcim/forms/bulk_edit.py:715 dcim/forms/bulk_edit.py:767 -#: dcim/forms/bulk_edit.py:819 dcim/forms/bulk_edit.py:842 -#: dcim/forms/bulk_edit.py:890 dcim/forms/bulk_edit.py:960 -#: dcim/forms/bulk_edit.py:1013 dcim/forms/bulk_edit.py:1048 -#: dcim/forms/bulk_edit.py:1088 dcim/forms/bulk_edit.py:1132 -#: dcim/forms/bulk_edit.py:1177 dcim/forms/bulk_edit.py:1204 -#: dcim/forms/bulk_edit.py:1222 dcim/forms/bulk_edit.py:1240 -#: dcim/forms/bulk_edit.py:1258 dcim/forms/bulk_edit.py:1682 -#: extras/forms/bulk_edit.py:39 extras/forms/bulk_edit.py:149 -#: extras/forms/bulk_edit.py:178 extras/forms/bulk_edit.py:208 -#: extras/forms/bulk_edit.py:256 extras/forms/bulk_edit.py:274 -#: extras/forms/bulk_edit.py:298 extras/forms/bulk_edit.py:312 -#: extras/forms/bulk_edit.py:339 extras/tables/tables.py:79 -#: ipam/forms/bulk_edit.py:53 ipam/forms/bulk_edit.py:73 -#: ipam/forms/bulk_edit.py:93 ipam/forms/bulk_edit.py:117 -#: ipam/forms/bulk_edit.py:146 ipam/forms/bulk_edit.py:175 -#: ipam/forms/bulk_edit.py:194 ipam/forms/bulk_edit.py:276 -#: ipam/forms/bulk_edit.py:321 ipam/forms/bulk_edit.py:369 -#: ipam/forms/bulk_edit.py:412 ipam/forms/bulk_edit.py:428 -#: ipam/forms/bulk_edit.py:516 ipam/forms/bulk_edit.py:547 -#: templates/account/token.html:35 templates/circuits/circuit.html:59 -#: templates/circuits/circuitgroup.html:32 -#: templates/circuits/circuittype.html:26 -#: templates/circuits/inc/circuit_termination_fields.html:88 -#: templates/circuits/provider.html:33 -#: templates/circuits/providernetwork.html:32 -#: templates/core/datasource.html:54 templates/core/plugin.html:80 -#: templates/dcim/cable.html:36 templates/dcim/consoleport.html:44 -#: templates/dcim/consoleserverport.html:44 templates/dcim/device.html:94 -#: templates/dcim/devicebay.html:32 templates/dcim/devicerole.html:30 -#: templates/dcim/devicetype.html:33 templates/dcim/frontport.html:58 -#: templates/dcim/interface.html:69 templates/dcim/inventoryitem.html:60 -#: templates/dcim/inventoryitemrole.html:22 templates/dcim/location.html:33 -#: templates/dcim/manufacturer.html:40 templates/dcim/module.html:73 -#: templates/dcim/modulebay.html:42 templates/dcim/moduletype.html:37 -#: templates/dcim/platform.html:33 templates/dcim/powerfeed.html:40 -#: templates/dcim/poweroutlet.html:40 templates/dcim/powerpanel.html:30 -#: templates/dcim/powerport.html:40 templates/dcim/rack.html:53 -#: templates/dcim/rackreservation.html:62 templates/dcim/rackrole.html:26 -#: templates/dcim/racktype.html:24 templates/dcim/rearport.html:54 -#: templates/dcim/region.html:33 templates/dcim/site.html:60 -#: templates/dcim/sitegroup.html:33 templates/dcim/virtualchassis.html:31 -#: templates/extras/configcontext.html:21 -#: templates/extras/configtemplate.html:17 -#: templates/extras/customfield.html:34 -#: templates/extras/dashboard/widget_add.html:14 -#: templates/extras/eventrule.html:21 templates/extras/exporttemplate.html:19 -#: templates/extras/notificationgroup.html:20 -#: templates/extras/savedfilter.html:17 templates/extras/script_list.html:45 -#: templates/extras/tag.html:20 templates/extras/webhook.html:17 -#: templates/generic/bulk_import.html:120 templates/ipam/aggregate.html:43 -#: templates/ipam/asn.html:42 templates/ipam/asnrange.html:38 -#: templates/ipam/fhrpgroup.html:34 templates/ipam/ipaddress.html:55 -#: templates/ipam/iprange.html:67 templates/ipam/prefix.html:81 -#: templates/ipam/rir.html:26 templates/ipam/role.html:26 -#: templates/ipam/routetarget.html:21 templates/ipam/service.html:50 -#: templates/ipam/servicetemplate.html:27 templates/ipam/vlan.html:62 -#: templates/ipam/vlangroup.html:34 templates/ipam/vrf.html:33 -#: templates/tenancy/contact.html:67 templates/tenancy/contactgroup.html:25 -#: templates/tenancy/contactrole.html:22 templates/tenancy/tenant.html:24 -#: templates/tenancy/tenantgroup.html:33 templates/users/group.html:21 -#: templates/users/objectpermission.html:21 templates/users/token.html:27 -#: templates/virtualization/cluster.html:25 -#: templates/virtualization/clustergroup.html:26 -#: templates/virtualization/clustertype.html:26 -#: templates/virtualization/virtualdisk.html:39 -#: templates/virtualization/virtualmachine.html:31 -#: templates/virtualization/vminterface.html:51 -#: templates/vpn/ikepolicy.html:17 templates/vpn/ikeproposal.html:17 -#: templates/vpn/ipsecpolicy.html:17 templates/vpn/ipsecprofile.html:17 -#: templates/vpn/ipsecprofile.html:40 templates/vpn/ipsecprofile.html:73 -#: templates/vpn/ipsecproposal.html:17 templates/vpn/l2vpn.html:26 -#: templates/vpn/tunnel.html:33 templates/vpn/tunnelgroup.html:30 -#: templates/wireless/wirelesslan.html:26 -#: templates/wireless/wirelesslangroup.html:33 -#: templates/wireless/wirelesslink.html:34 tenancy/forms/bulk_edit.py:32 -#: tenancy/forms/bulk_edit.py:80 tenancy/forms/bulk_edit.py:122 -#: users/forms/bulk_edit.py:64 users/forms/bulk_edit.py:82 -#: users/forms/bulk_edit.py:112 virtualization/forms/bulk_edit.py:32 -#: virtualization/forms/bulk_edit.py:46 virtualization/forms/bulk_edit.py:100 -#: virtualization/forms/bulk_edit.py:177 virtualization/forms/bulk_edit.py:228 -#: virtualization/forms/bulk_edit.py:337 vpn/forms/bulk_edit.py:28 -#: vpn/forms/bulk_edit.py:64 vpn/forms/bulk_edit.py:121 -#: vpn/forms/bulk_edit.py:155 vpn/forms/bulk_edit.py:190 -#: vpn/forms/bulk_edit.py:215 vpn/forms/bulk_edit.py:247 -#: vpn/forms/bulk_edit.py:274 wireless/forms/bulk_edit.py:29 -#: wireless/forms/bulk_edit.py:82 wireless/forms/bulk_edit.py:140 +#: 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/templates/account/token.html:35 +#: netbox/templates/circuits/circuit.html:59 +#: netbox/templates/circuits/circuitgroup.html:32 +#: netbox/templates/circuits/circuittype.html:26 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:88 +#: netbox/templates/circuits/provider.html:33 +#: netbox/templates/circuits/providernetwork.html:32 +#: netbox/templates/core/datasource.html:54 +#: netbox/templates/core/plugin.html:80 netbox/templates/dcim/cable.html:36 +#: netbox/templates/dcim/consoleport.html:44 +#: netbox/templates/dcim/consoleserverport.html:44 +#: netbox/templates/dcim/device.html:94 +#: netbox/templates/dcim/devicebay.html:32 +#: netbox/templates/dcim/devicerole.html:30 +#: netbox/templates/dcim/devicetype.html:33 +#: netbox/templates/dcim/frontport.html:58 +#: netbox/templates/dcim/interface.html:69 +#: netbox/templates/dcim/inventoryitem.html:60 +#: netbox/templates/dcim/inventoryitemrole.html:22 +#: netbox/templates/dcim/location.html:33 +#: netbox/templates/dcim/manufacturer.html:40 +#: netbox/templates/dcim/module.html:73 +#: netbox/templates/dcim/modulebay.html:42 +#: netbox/templates/dcim/moduletype.html:37 +#: netbox/templates/dcim/platform.html:33 +#: netbox/templates/dcim/powerfeed.html:40 +#: netbox/templates/dcim/poweroutlet.html:40 +#: netbox/templates/dcim/powerpanel.html:30 +#: netbox/templates/dcim/powerport.html:40 netbox/templates/dcim/rack.html:53 +#: netbox/templates/dcim/rackreservation.html:62 +#: netbox/templates/dcim/rackrole.html:26 +#: netbox/templates/dcim/racktype.html:24 +#: netbox/templates/dcim/rearport.html:54 netbox/templates/dcim/region.html:33 +#: netbox/templates/dcim/site.html:60 netbox/templates/dcim/sitegroup.html:33 +#: netbox/templates/dcim/virtualchassis.html:31 +#: netbox/templates/extras/configcontext.html:21 +#: netbox/templates/extras/configtemplate.html:17 +#: netbox/templates/extras/customfield.html:34 +#: netbox/templates/extras/dashboard/widget_add.html:14 +#: netbox/templates/extras/eventrule.html:21 +#: netbox/templates/extras/exporttemplate.html:19 +#: netbox/templates/extras/notificationgroup.html:20 +#: netbox/templates/extras/savedfilter.html:17 +#: netbox/templates/extras/script_list.html:46 +#: netbox/templates/extras/tag.html:20 netbox/templates/extras/webhook.html:17 +#: netbox/templates/generic/bulk_import.html:120 +#: netbox/templates/ipam/aggregate.html:43 netbox/templates/ipam/asn.html:42 +#: netbox/templates/ipam/asnrange.html:38 +#: netbox/templates/ipam/fhrpgroup.html:34 +#: netbox/templates/ipam/ipaddress.html:55 +#: netbox/templates/ipam/iprange.html:67 netbox/templates/ipam/prefix.html:81 +#: netbox/templates/ipam/rir.html:26 netbox/templates/ipam/role.html:26 +#: netbox/templates/ipam/routetarget.html:21 +#: netbox/templates/ipam/service.html:50 +#: netbox/templates/ipam/servicetemplate.html:27 +#: netbox/templates/ipam/vlan.html:62 netbox/templates/ipam/vlangroup.html:34 +#: netbox/templates/ipam/vrf.html:33 netbox/templates/tenancy/contact.html:67 +#: netbox/templates/tenancy/contactgroup.html:25 +#: netbox/templates/tenancy/contactrole.html:22 +#: netbox/templates/tenancy/tenant.html:24 +#: netbox/templates/tenancy/tenantgroup.html:33 +#: netbox/templates/users/group.html:21 +#: netbox/templates/users/objectpermission.html:21 +#: netbox/templates/users/token.html:27 +#: netbox/templates/virtualization/cluster.html:25 +#: netbox/templates/virtualization/clustergroup.html:26 +#: netbox/templates/virtualization/clustertype.html:26 +#: netbox/templates/virtualization/virtualdisk.html:39 +#: netbox/templates/virtualization/virtualmachine.html:31 +#: netbox/templates/virtualization/vminterface.html:51 +#: netbox/templates/vpn/ikepolicy.html:17 +#: netbox/templates/vpn/ikeproposal.html:17 +#: netbox/templates/vpn/ipsecpolicy.html:17 +#: netbox/templates/vpn/ipsecprofile.html:17 +#: netbox/templates/vpn/ipsecprofile.html:40 +#: netbox/templates/vpn/ipsecprofile.html:73 +#: netbox/templates/vpn/ipsecproposal.html:17 +#: netbox/templates/vpn/l2vpn.html:26 netbox/templates/vpn/tunnel.html:33 +#: netbox/templates/vpn/tunnelgroup.html:30 +#: netbox/templates/wireless/wirelesslan.html:26 +#: netbox/templates/wireless/wirelesslangroup.html:33 +#: netbox/templates/wireless/wirelesslink.html:34 +#: netbox/tenancy/forms/bulk_edit.py:32 netbox/tenancy/forms/bulk_edit.py:80 +#: netbox/tenancy/forms/bulk_edit.py:122 netbox/users/forms/bulk_edit.py:64 +#: netbox/users/forms/bulk_edit.py:82 netbox/users/forms/bulk_edit.py:112 +#: netbox/virtualization/forms/bulk_edit.py:32 +#: netbox/virtualization/forms/bulk_edit.py:46 +#: netbox/virtualization/forms/bulk_edit.py:100 +#: netbox/virtualization/forms/bulk_edit.py:177 +#: netbox/virtualization/forms/bulk_edit.py:228 +#: netbox/virtualization/forms/bulk_edit.py:337 +#: netbox/vpn/forms/bulk_edit.py:28 netbox/vpn/forms/bulk_edit.py:64 +#: netbox/vpn/forms/bulk_edit.py:121 netbox/vpn/forms/bulk_edit.py:155 +#: netbox/vpn/forms/bulk_edit.py:190 netbox/vpn/forms/bulk_edit.py:215 +#: netbox/vpn/forms/bulk_edit.py:247 netbox/vpn/forms/bulk_edit.py:274 +#: netbox/wireless/forms/bulk_edit.py:29 netbox/wireless/forms/bulk_edit.py:82 +#: netbox/wireless/forms/bulk_edit.py:140 msgid "Description" msgstr "Beschreibung" -#: circuits/forms/bulk_edit.py:51 circuits/forms/bulk_edit.py:73 -#: circuits/forms/bulk_edit.py:123 circuits/forms/bulk_import.py:36 -#: circuits/forms/bulk_import.py:51 circuits/forms/bulk_import.py:74 -#: circuits/forms/filtersets.py:70 circuits/forms/filtersets.py:88 -#: circuits/forms/filtersets.py:116 circuits/forms/filtersets.py:131 -#: circuits/forms/filtersets.py:199 circuits/forms/filtersets.py:232 -#: circuits/forms/filtersets.py:255 circuits/forms/model_forms.py:47 -#: circuits/forms/model_forms.py:61 circuits/forms/model_forms.py:93 -#: circuits/tables/circuits.py:58 circuits/tables/circuits.py:108 -#: circuits/tables/circuits.py:160 circuits/tables/providers.py:72 -#: circuits/tables/providers.py:103 templates/circuits/circuit.html:18 -#: templates/circuits/circuittermination.html:25 -#: templates/circuits/provider.html:20 -#: templates/circuits/provideraccount.html:20 -#: templates/circuits/providernetwork.html:20 -#: templates/dcim/inc/cable_termination.html:51 +#: netbox/circuits/forms/bulk_edit.py: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/templates/circuits/circuit.html:18 +#: netbox/templates/circuits/circuittermination.html:25 +#: netbox/templates/circuits/provider.html:20 +#: netbox/templates/circuits/provideraccount.html:20 +#: netbox/templates/circuits/providernetwork.html:20 +#: netbox/templates/dcim/inc/cable_termination.html:51 msgid "Provider" msgstr "Provider" -#: circuits/forms/bulk_edit.py:80 circuits/forms/filtersets.py:91 -#: templates/circuits/providernetwork.html:28 +#: netbox/circuits/forms/bulk_edit.py:80 +#: netbox/circuits/forms/filtersets.py:91 +#: netbox/templates/circuits/providernetwork.html:28 msgid "Service ID" msgstr "Dienst ID" -#: circuits/forms/bulk_edit.py:100 circuits/forms/filtersets.py:107 -#: dcim/forms/bulk_edit.py:206 dcim/forms/bulk_edit.py:604 -#: dcim/forms/bulk_edit.py:804 dcim/forms/bulk_edit.py:1173 -#: dcim/forms/bulk_edit.py:1200 dcim/forms/bulk_edit.py:1678 -#: dcim/forms/filtersets.py:1064 dcim/forms/filtersets.py:1455 -#: dcim/forms/filtersets.py:1479 dcim/tables/devices.py:704 -#: dcim/tables/devices.py:761 dcim/tables/devices.py:1003 -#: dcim/tables/devicetypes.py:249 dcim/tables/devicetypes.py:264 -#: dcim/tables/racks.py:33 extras/forms/bulk_edit.py:270 -#: extras/tables/tables.py:443 templates/circuits/circuittype.html:30 -#: templates/dcim/cable.html:40 templates/dcim/devicerole.html:34 -#: templates/dcim/frontport.html:40 templates/dcim/inventoryitemrole.html:26 -#: templates/dcim/rackrole.html:30 templates/dcim/rearport.html:40 -#: templates/extras/tag.html:26 +#: netbox/circuits/forms/bulk_edit.py: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/templates/circuits/circuittype.html:30 +#: netbox/templates/dcim/cable.html:40 +#: netbox/templates/dcim/devicerole.html:34 +#: netbox/templates/dcim/frontport.html:40 +#: netbox/templates/dcim/inventoryitemrole.html:26 +#: netbox/templates/dcim/rackrole.html:30 +#: netbox/templates/dcim/rearport.html:40 netbox/templates/extras/tag.html:26 msgid "Color" msgstr "Farbe" -#: circuits/forms/bulk_edit.py:118 circuits/forms/bulk_import.py:87 -#: circuits/forms/filtersets.py:126 core/forms/bulk_edit.py:18 -#: core/forms/filtersets.py:33 core/tables/change_logging.py:32 -#: core/tables/data.py:20 core/tables/jobs.py:18 dcim/forms/bulk_edit.py:782 -#: dcim/forms/bulk_edit.py:921 dcim/forms/bulk_edit.py:989 -#: dcim/forms/bulk_edit.py:1008 dcim/forms/bulk_edit.py:1031 -#: dcim/forms/bulk_edit.py:1073 dcim/forms/bulk_edit.py:1117 -#: dcim/forms/bulk_edit.py:1168 dcim/forms/bulk_edit.py:1195 -#: dcim/forms/bulk_import.py:188 dcim/forms/bulk_import.py:260 -#: dcim/forms/bulk_import.py:708 dcim/forms/bulk_import.py:734 -#: dcim/forms/bulk_import.py:760 dcim/forms/bulk_import.py:780 -#: dcim/forms/bulk_import.py:863 dcim/forms/bulk_import.py:957 -#: dcim/forms/bulk_import.py:999 dcim/forms/bulk_import.py:1213 -#: dcim/forms/bulk_import.py:1376 dcim/forms/filtersets.py:955 -#: dcim/forms/filtersets.py:1054 dcim/forms/filtersets.py:1175 -#: dcim/forms/filtersets.py:1247 dcim/forms/filtersets.py:1272 -#: dcim/forms/filtersets.py:1296 dcim/forms/filtersets.py:1316 -#: dcim/forms/filtersets.py:1353 dcim/forms/filtersets.py:1450 -#: dcim/forms/filtersets.py:1474 dcim/forms/model_forms.py:703 -#: dcim/forms/model_forms.py:709 dcim/forms/object_import.py:84 -#: dcim/forms/object_import.py:113 dcim/forms/object_import.py:145 -#: dcim/tables/devices.py:178 dcim/tables/devices.py:814 -#: dcim/tables/power.py:77 dcim/tables/racks.py:138 -#: extras/forms/bulk_import.py:42 extras/tables/tables.py:405 -#: extras/tables/tables.py:465 netbox/tables/tables.py:240 -#: templates/circuits/circuit.html:30 templates/core/datasource.html:38 -#: templates/dcim/cable.html:15 templates/dcim/consoleport.html:36 -#: templates/dcim/consoleserverport.html:36 templates/dcim/frontport.html:36 -#: templates/dcim/interface.html:46 templates/dcim/interface.html:169 -#: templates/dcim/interface.html:311 templates/dcim/powerfeed.html:32 -#: templates/dcim/poweroutlet.html:36 templates/dcim/powerport.html:36 -#: templates/dcim/rearport.html:36 templates/extras/eventrule.html:74 -#: templates/virtualization/cluster.html:17 templates/vpn/l2vpn.html:22 -#: templates/wireless/inc/authentication_attrs.html:8 -#: templates/wireless/inc/wirelesslink_interface.html:14 -#: virtualization/forms/bulk_edit.py:60 virtualization/forms/bulk_import.py:41 -#: virtualization/forms/filtersets.py:54 -#: virtualization/forms/model_forms.py:62 virtualization/tables/clusters.py:66 -#: vpn/forms/bulk_edit.py:264 vpn/forms/bulk_import.py:264 -#: vpn/forms/filtersets.py:217 vpn/forms/model_forms.py:84 -#: vpn/forms/model_forms.py:119 vpn/forms/model_forms.py:231 +#: netbox/circuits/forms/bulk_edit.py: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/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/core/datasource.html:38 +#: netbox/templates/dcim/cable.html:15 +#: netbox/templates/dcim/consoleport.html:36 +#: netbox/templates/dcim/consoleserverport.html:36 +#: netbox/templates/dcim/frontport.html:36 +#: netbox/templates/dcim/interface.html:46 +#: netbox/templates/dcim/interface.html:169 +#: netbox/templates/dcim/interface.html:311 +#: netbox/templates/dcim/powerfeed.html:32 +#: netbox/templates/dcim/poweroutlet.html:36 +#: netbox/templates/dcim/powerport.html:36 +#: netbox/templates/dcim/rearport.html:36 +#: netbox/templates/extras/eventrule.html:74 +#: netbox/templates/virtualization/cluster.html:17 +#: netbox/templates/vpn/l2vpn.html:22 +#: netbox/templates/wireless/inc/authentication_attrs.html:8 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:14 +#: netbox/virtualization/forms/bulk_edit.py:60 +#: netbox/virtualization/forms/bulk_import.py:41 +#: netbox/virtualization/forms/filtersets.py:54 +#: netbox/virtualization/forms/model_forms.py:62 +#: netbox/virtualization/tables/clusters.py:66 +#: netbox/vpn/forms/bulk_edit.py:264 netbox/vpn/forms/bulk_import.py:264 +#: netbox/vpn/forms/filtersets.py:217 netbox/vpn/forms/model_forms.py:84 +#: netbox/vpn/forms/model_forms.py:119 netbox/vpn/forms/model_forms.py:231 msgid "Type" msgstr "Typ" -#: circuits/forms/bulk_edit.py:128 circuits/forms/bulk_import.py:80 -#: circuits/forms/filtersets.py:139 circuits/forms/model_forms.py:98 +#: 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 msgid "Provider account" msgstr "Providerkonto" -#: circuits/forms/bulk_edit.py:136 circuits/forms/bulk_import.py:93 -#: circuits/forms/filtersets.py:150 core/forms/filtersets.py:38 -#: core/forms/filtersets.py:79 core/tables/data.py:23 core/tables/jobs.py:26 -#: core/tables/tasks.py:88 dcim/forms/bulk_edit.py:106 -#: dcim/forms/bulk_edit.py:181 dcim/forms/bulk_edit.py:351 -#: dcim/forms/bulk_edit.py:700 dcim/forms/bulk_edit.py:756 -#: dcim/forms/bulk_edit.py:788 dcim/forms/bulk_edit.py:915 -#: dcim/forms/bulk_edit.py:1701 dcim/forms/bulk_import.py:88 -#: dcim/forms/bulk_import.py:147 dcim/forms/bulk_import.py:248 -#: dcim/forms/bulk_import.py:505 dcim/forms/bulk_import.py:659 -#: dcim/forms/bulk_import.py:1207 dcim/forms/bulk_import.py:1371 -#: dcim/forms/bulk_import.py:1435 dcim/forms/filtersets.py:178 -#: dcim/forms/filtersets.py:237 dcim/forms/filtersets.py:359 -#: dcim/forms/filtersets.py:799 dcim/forms/filtersets.py:924 -#: dcim/forms/filtersets.py:958 dcim/forms/filtersets.py:1059 -#: dcim/forms/filtersets.py:1170 dcim/tables/devices.py:140 -#: dcim/tables/devices.py:817 dcim/tables/devices.py:1063 -#: dcim/tables/modules.py:69 dcim/tables/power.py:74 dcim/tables/racks.py:126 -#: dcim/tables/sites.py:82 dcim/tables/sites.py:138 -#: ipam/forms/bulk_edit.py:256 ipam/forms/bulk_edit.py:306 -#: ipam/forms/bulk_edit.py:354 ipam/forms/bulk_edit.py:506 -#: ipam/forms/bulk_import.py:192 ipam/forms/bulk_import.py:257 -#: ipam/forms/bulk_import.py:293 ipam/forms/bulk_import.py:450 -#: ipam/forms/filtersets.py:210 ipam/forms/filtersets.py:281 -#: ipam/forms/filtersets.py:355 ipam/forms/filtersets.py:501 -#: ipam/forms/model_forms.py:468 ipam/tables/ip.py:237 ipam/tables/ip.py:312 -#: ipam/tables/ip.py:363 ipam/tables/ip.py:426 ipam/tables/ip.py:453 -#: ipam/tables/vlans.py:126 ipam/tables/vlans.py:232 -#: templates/circuits/circuit.html:34 templates/core/datasource.html:46 -#: templates/core/job.html:48 templates/core/rq_task.html:81 -#: templates/core/system.html:18 templates/dcim/cable.html:19 -#: templates/dcim/device.html:178 templates/dcim/location.html:45 -#: templates/dcim/module.html:69 templates/dcim/powerfeed.html:36 -#: templates/dcim/rack.html:41 templates/dcim/site.html:43 -#: templates/extras/script_list.html:47 templates/ipam/ipaddress.html:37 -#: templates/ipam/iprange.html:54 templates/ipam/prefix.html:73 -#: templates/ipam/vlan.html:48 templates/virtualization/cluster.html:21 -#: templates/virtualization/virtualmachine.html:19 -#: templates/vpn/tunnel.html:25 templates/wireless/wirelesslan.html:22 -#: templates/wireless/wirelesslink.html:17 users/forms/filtersets.py:32 -#: users/forms/model_forms.py:194 virtualization/forms/bulk_edit.py:70 -#: virtualization/forms/bulk_edit.py:118 -#: virtualization/forms/bulk_import.py:54 -#: virtualization/forms/bulk_import.py:80 -#: virtualization/forms/filtersets.py:62 -#: virtualization/forms/filtersets.py:160 virtualization/tables/clusters.py:74 -#: virtualization/tables/virtualmachines.py:60 vpn/forms/bulk_edit.py:39 -#: vpn/forms/bulk_import.py:37 vpn/forms/filtersets.py:47 -#: vpn/tables/tunnels.py:48 wireless/forms/bulk_edit.py:43 -#: wireless/forms/bulk_edit.py:105 wireless/forms/bulk_import.py:43 -#: wireless/forms/bulk_import.py:84 wireless/forms/filtersets.py:49 -#: wireless/forms/filtersets.py:83 wireless/tables/wirelesslan.py:52 -#: wireless/tables/wirelesslink.py:20 +#: 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/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:69 +#: 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/templates/circuits/circuit.html:34 +#: 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/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/vlan.html:48 +#: netbox/templates/virtualization/cluster.html:21 +#: netbox/templates/virtualization/virtualmachine.html:19 +#: netbox/templates/vpn/tunnel.html:25 +#: netbox/templates/wireless/wirelesslan.html:22 +#: netbox/templates/wireless/wirelesslink.html:17 +#: netbox/users/forms/filtersets.py: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/tables/clusters.py:74 +#: netbox/virtualization/tables/virtualmachines.py:60 +#: netbox/vpn/forms/bulk_edit.py:39 netbox/vpn/forms/bulk_import.py:37 +#: netbox/vpn/forms/filtersets.py:47 netbox/vpn/tables/tunnels.py:48 +#: netbox/wireless/forms/bulk_edit.py:43 +#: netbox/wireless/forms/bulk_edit.py:105 +#: netbox/wireless/forms/bulk_import.py:43 +#: netbox/wireless/forms/bulk_import.py:84 +#: netbox/wireless/forms/filtersets.py:49 +#: netbox/wireless/forms/filtersets.py:83 +#: netbox/wireless/tables/wirelesslan.py:52 +#: netbox/wireless/tables/wirelesslink.py:20 msgid "Status" msgstr "Status" -#: circuits/forms/bulk_edit.py:142 circuits/forms/bulk_edit.py:233 -#: circuits/forms/bulk_import.py:98 circuits/forms/bulk_import.py:158 -#: circuits/forms/filtersets.py:119 circuits/forms/filtersets.py:241 -#: dcim/forms/bulk_edit.py:122 dcim/forms/bulk_edit.py:187 -#: dcim/forms/bulk_edit.py:346 dcim/forms/bulk_edit.py:461 -#: dcim/forms/bulk_edit.py:690 dcim/forms/bulk_edit.py:794 -#: dcim/forms/bulk_edit.py:1706 dcim/forms/bulk_import.py:107 -#: dcim/forms/bulk_import.py:152 dcim/forms/bulk_import.py:241 -#: dcim/forms/bulk_import.py:334 dcim/forms/bulk_import.py:479 -#: dcim/forms/bulk_import.py:1219 dcim/forms/bulk_import.py:1428 -#: dcim/forms/filtersets.py:173 dcim/forms/filtersets.py:205 -#: dcim/forms/filtersets.py:323 dcim/forms/filtersets.py:399 -#: dcim/forms/filtersets.py:420 dcim/forms/filtersets.py:722 -#: dcim/forms/filtersets.py:916 dcim/forms/filtersets.py:978 -#: dcim/forms/filtersets.py:1008 dcim/forms/filtersets.py:1130 -#: dcim/tables/power.py:88 extras/filtersets.py:612 -#: extras/forms/filtersets.py:323 extras/forms/filtersets.py:396 -#: ipam/forms/bulk_edit.py:43 ipam/forms/bulk_edit.py:68 -#: ipam/forms/bulk_edit.py:112 ipam/forms/bulk_edit.py:141 -#: ipam/forms/bulk_edit.py:166 ipam/forms/bulk_edit.py:251 -#: ipam/forms/bulk_edit.py:301 ipam/forms/bulk_edit.py:349 -#: ipam/forms/bulk_edit.py:501 ipam/forms/bulk_import.py:38 -#: ipam/forms/bulk_import.py:67 ipam/forms/bulk_import.py:95 -#: ipam/forms/bulk_import.py:115 ipam/forms/bulk_import.py:135 -#: ipam/forms/bulk_import.py:164 ipam/forms/bulk_import.py:250 -#: ipam/forms/bulk_import.py:286 ipam/forms/bulk_import.py:443 -#: ipam/forms/filtersets.py:48 ipam/forms/filtersets.py:68 -#: ipam/forms/filtersets.py:100 ipam/forms/filtersets.py:120 -#: ipam/forms/filtersets.py:143 ipam/forms/filtersets.py:174 -#: ipam/forms/filtersets.py:267 ipam/forms/filtersets.py:310 -#: ipam/forms/filtersets.py:469 ipam/tables/ip.py:456 ipam/tables/vlans.py:229 -#: templates/circuits/circuit.html:38 templates/circuits/circuitgroup.html:36 -#: templates/dcim/cable.html:23 templates/dcim/device.html:79 -#: templates/dcim/location.html:49 templates/dcim/powerfeed.html:44 -#: templates/dcim/rack.html:32 templates/dcim/rackreservation.html:49 -#: templates/dcim/site.html:47 templates/dcim/virtualdevicecontext.html:52 -#: templates/ipam/aggregate.html:30 templates/ipam/asn.html:33 -#: templates/ipam/asnrange.html:29 templates/ipam/ipaddress.html:28 -#: templates/ipam/iprange.html:58 templates/ipam/prefix.html:29 -#: templates/ipam/routetarget.html:17 templates/ipam/vlan.html:39 -#: templates/ipam/vrf.html:20 templates/tenancy/tenant.html:17 -#: templates/virtualization/cluster.html:33 -#: templates/virtualization/virtualmachine.html:39 templates/vpn/l2vpn.html:30 -#: templates/vpn/tunnel.html:49 templates/wireless/wirelesslan.html:34 -#: templates/wireless/wirelesslink.html:25 tenancy/forms/forms.py:25 -#: tenancy/forms/forms.py:48 tenancy/forms/model_forms.py:52 -#: tenancy/tables/columns.py:64 virtualization/forms/bulk_edit.py:76 -#: virtualization/forms/bulk_edit.py:155 -#: virtualization/forms/bulk_import.py:66 -#: virtualization/forms/bulk_import.py:115 -#: virtualization/forms/filtersets.py:47 -#: virtualization/forms/filtersets.py:105 vpn/forms/bulk_edit.py:59 -#: vpn/forms/bulk_edit.py:269 vpn/forms/bulk_import.py:59 -#: vpn/forms/bulk_import.py:258 vpn/forms/filtersets.py:214 -#: wireless/forms/bulk_edit.py:63 wireless/forms/bulk_edit.py:110 -#: wireless/forms/bulk_import.py:55 wireless/forms/bulk_import.py:97 -#: wireless/forms/filtersets.py:35 wireless/forms/filtersets.py:75 +#: netbox/circuits/forms/bulk_edit.py: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/templates/circuits/circuitgroup.html:36 +#: 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 +#: netbox/templates/dcim/rackreservation.html:49 +#: netbox/templates/dcim/site.html:47 +#: netbox/templates/dcim/virtualdevicecontext.html:52 +#: netbox/templates/ipam/aggregate.html:30 netbox/templates/ipam/asn.html:33 +#: netbox/templates/ipam/asnrange.html:29 +#: netbox/templates/ipam/ipaddress.html:28 +#: netbox/templates/ipam/iprange.html:58 netbox/templates/ipam/prefix.html:29 +#: netbox/templates/ipam/routetarget.html:17 +#: netbox/templates/ipam/vlan.html:39 netbox/templates/ipam/vrf.html:20 +#: netbox/templates/tenancy/tenant.html:17 +#: netbox/templates/virtualization/cluster.html:33 +#: netbox/templates/virtualization/virtualmachine.html:39 +#: netbox/templates/vpn/l2vpn.html:30 netbox/templates/vpn/tunnel.html:49 +#: netbox/templates/wireless/wirelesslan.html:34 +#: netbox/templates/wireless/wirelesslink.html:25 +#: netbox/tenancy/forms/forms.py:25 netbox/tenancy/forms/forms.py:48 +#: netbox/tenancy/forms/model_forms.py:52 netbox/tenancy/tables/columns.py:64 +#: netbox/virtualization/forms/bulk_edit.py:76 +#: netbox/virtualization/forms/bulk_edit.py:155 +#: netbox/virtualization/forms/bulk_import.py:66 +#: netbox/virtualization/forms/bulk_import.py:115 +#: netbox/virtualization/forms/filtersets.py:47 +#: netbox/virtualization/forms/filtersets.py:105 +#: netbox/vpn/forms/bulk_edit.py:59 netbox/vpn/forms/bulk_edit.py:269 +#: netbox/vpn/forms/bulk_import.py:59 netbox/vpn/forms/bulk_import.py:258 +#: netbox/vpn/forms/filtersets.py:214 netbox/wireless/forms/bulk_edit.py:63 +#: netbox/wireless/forms/bulk_edit.py:110 +#: netbox/wireless/forms/bulk_import.py:55 +#: netbox/wireless/forms/bulk_import.py:97 +#: netbox/wireless/forms/filtersets.py:35 +#: netbox/wireless/forms/filtersets.py:75 msgid "Tenant" msgstr "Mandant" -#: circuits/forms/bulk_edit.py:147 circuits/forms/filtersets.py:174 +#: netbox/circuits/forms/bulk_edit.py:147 +#: netbox/circuits/forms/filtersets.py:174 msgid "Install date" msgstr "Datum der Installation" -#: circuits/forms/bulk_edit.py:152 circuits/forms/filtersets.py:179 +#: netbox/circuits/forms/bulk_edit.py:152 +#: netbox/circuits/forms/filtersets.py:179 msgid "Termination date" msgstr "Kündigungsdatum" -#: circuits/forms/bulk_edit.py:158 circuits/forms/filtersets.py:186 +#: netbox/circuits/forms/bulk_edit.py:158 +#: netbox/circuits/forms/filtersets.py:186 msgid "Commit rate (Kbps)" msgstr "Vereinbarte Bandbreite (Kbps)" -#: circuits/forms/bulk_edit.py:173 circuits/forms/model_forms.py:112 +#: netbox/circuits/forms/bulk_edit.py:173 +#: netbox/circuits/forms/model_forms.py:112 msgid "Service Parameters" msgstr "Service Parameter" -#: circuits/forms/bulk_edit.py:174 circuits/forms/model_forms.py:113 -#: circuits/forms/model_forms.py:183 dcim/forms/model_forms.py:139 -#: dcim/forms/model_forms.py:181 dcim/forms/model_forms.py:266 -#: dcim/forms/model_forms.py:323 dcim/forms/model_forms.py:768 -#: dcim/forms/model_forms.py:1692 ipam/forms/model_forms.py:64 -#: ipam/forms/model_forms.py:81 ipam/forms/model_forms.py:115 -#: ipam/forms/model_forms.py:136 ipam/forms/model_forms.py:160 -#: ipam/forms/model_forms.py:232 ipam/forms/model_forms.py:261 -#: ipam/forms/model_forms.py:316 netbox/navigation/menu.py:24 -#: templates/dcim/device_edit.html:85 templates/dcim/htmx/cable_edit.html:72 -#: templates/ipam/ipaddress_bulk_add.html:27 templates/ipam/vlan_edit.html:22 -#: virtualization/forms/model_forms.py:80 -#: virtualization/forms/model_forms.py:222 vpn/forms/bulk_edit.py:78 -#: vpn/forms/filtersets.py:44 vpn/forms/model_forms.py:62 -#: vpn/forms/model_forms.py:147 vpn/forms/model_forms.py:411 -#: wireless/forms/model_forms.py:54 wireless/forms/model_forms.py:170 +#: 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/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/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 msgid "Tenancy" msgstr "Mandantenverhältnis" -#: circuits/forms/bulk_edit.py:193 circuits/forms/bulk_edit.py:217 -#: circuits/forms/model_forms.py:155 circuits/tables/circuits.py:117 -#: templates/circuits/inc/circuit_termination_fields.html:62 -#: templates/circuits/providernetwork.html:17 +#: 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" -#: circuits/forms/bulk_edit.py:199 +#: netbox/circuits/forms/bulk_edit.py:199 msgid "Port speed (Kbps)" msgstr "Portgeschwindigkeit (Kbit/s)" -#: circuits/forms/bulk_edit.py:203 +#: netbox/circuits/forms/bulk_edit.py:203 msgid "Upstream speed (Kbps)" msgstr "Upstream Geschwindigkeit (Kbps)" -#: circuits/forms/bulk_edit.py:206 dcim/forms/bulk_edit.py:951 -#: dcim/forms/bulk_edit.py:1315 dcim/forms/bulk_edit.py:1332 -#: dcim/forms/bulk_edit.py:1349 dcim/forms/bulk_edit.py:1367 -#: dcim/forms/bulk_edit.py:1455 dcim/forms/bulk_edit.py:1594 -#: dcim/forms/bulk_edit.py:1611 +#: 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 msgid "Mark connected" msgstr "Als verbunden markieren" -#: circuits/forms/bulk_edit.py:219 circuits/forms/model_forms.py:157 -#: templates/circuits/inc/circuit_termination_fields.html:54 -#: templates/dcim/frontport.html:121 templates/dcim/interface.html:193 -#: templates/dcim/rearport.html:111 +#: netbox/circuits/forms/bulk_edit.py:219 +#: netbox/circuits/forms/model_forms.py:157 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:54 +#: netbox/templates/dcim/frontport.html:121 +#: netbox/templates/dcim/interface.html:193 +#: netbox/templates/dcim/rearport.html:111 msgid "Circuit Termination" msgstr "Transportnetzabschlusspunkt" -#: circuits/forms/bulk_edit.py:221 circuits/forms/model_forms.py:159 +#: netbox/circuits/forms/bulk_edit.py:221 +#: netbox/circuits/forms/model_forms.py:159 msgid "Termination Details" msgstr "Einzelheiten zum Abschlusspunkt" -#: circuits/forms/bulk_edit.py:251 circuits/forms/filtersets.py:268 -#: circuits/tables/circuits.py:168 dcim/forms/model_forms.py:551 -#: templates/circuits/circuitgroupassignment.html:30 -#: templates/dcim/device.html:133 templates/dcim/virtualchassis.html:68 -#: templates/dcim/virtualchassis_edit.html:56 -#: templates/ipam/inc/panels/fhrp_groups.html:26 -#: tenancy/forms/bulk_edit.py:147 tenancy/forms/filtersets.py:110 +#: netbox/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/templates/dcim/device.html:133 +#: netbox/templates/dcim/virtualchassis.html:68 +#: netbox/templates/dcim/virtualchassis_edit.html:56 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:26 +#: netbox/tenancy/forms/bulk_edit.py:147 +#: netbox/tenancy/forms/filtersets.py:110 msgid "Priority" msgstr "Priorität" -#: circuits/forms/bulk_import.py:39 circuits/forms/bulk_import.py:54 -#: circuits/forms/bulk_import.py:77 +#: 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" -#: circuits/forms/bulk_import.py:83 +#: netbox/circuits/forms/bulk_import.py:83 msgid "Assigned provider account" msgstr "Zugewiesenes Providerkonto" -#: circuits/forms/bulk_import.py:90 +#: netbox/circuits/forms/bulk_import.py:90 msgid "Type of circuit" msgstr "Transportnetz Typ" -#: circuits/forms/bulk_import.py:95 dcim/forms/bulk_import.py:90 -#: dcim/forms/bulk_import.py:149 dcim/forms/bulk_import.py:250 -#: dcim/forms/bulk_import.py:507 dcim/forms/bulk_import.py:661 -#: dcim/forms/bulk_import.py:1373 ipam/forms/bulk_import.py:194 -#: ipam/forms/bulk_import.py:259 ipam/forms/bulk_import.py:295 -#: ipam/forms/bulk_import.py:452 virtualization/forms/bulk_import.py:56 -#: virtualization/forms/bulk_import.py:82 vpn/forms/bulk_import.py:39 -#: wireless/forms/bulk_import.py:45 +#: netbox/circuits/forms/bulk_import.py: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" -#: circuits/forms/bulk_import.py:102 circuits/forms/bulk_import.py:162 -#: dcim/forms/bulk_import.py:111 dcim/forms/bulk_import.py:156 -#: dcim/forms/bulk_import.py:338 dcim/forms/bulk_import.py:483 -#: dcim/forms/bulk_import.py:1223 dcim/forms/bulk_import.py:1368 -#: dcim/forms/bulk_import.py:1432 ipam/forms/bulk_import.py:42 -#: ipam/forms/bulk_import.py:71 ipam/forms/bulk_import.py:99 -#: ipam/forms/bulk_import.py:119 ipam/forms/bulk_import.py:139 -#: ipam/forms/bulk_import.py:168 ipam/forms/bulk_import.py:254 -#: ipam/forms/bulk_import.py:290 ipam/forms/bulk_import.py:447 -#: virtualization/forms/bulk_import.py:70 -#: virtualization/forms/bulk_import.py:119 vpn/forms/bulk_import.py:63 -#: wireless/forms/bulk_import.py:59 wireless/forms/bulk_import.py:101 +#: netbox/circuits/forms/bulk_import.py: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" -#: circuits/forms/bulk_import.py:120 -#: templates/circuits/inc/circuit_termination.html:6 -#: templates/circuits/inc/circuit_termination_fields.html:15 -#: templates/dcim/cable.html:68 templates/dcim/cable.html:72 -#: vpn/forms/bulk_import.py:100 vpn/forms/filtersets.py:77 +#: netbox/circuits/forms/bulk_import.py: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" -#: circuits/forms/bulk_import.py:130 circuits/forms/filtersets.py:147 -#: circuits/forms/filtersets.py:227 circuits/forms/model_forms.py:144 +#: 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 msgid "Provider network" msgstr "Providernetzwerk" -#: circuits/forms/filtersets.py:30 circuits/forms/filtersets.py:118 -#: circuits/forms/filtersets.py:200 dcim/forms/bulk_edit.py:338 -#: dcim/forms/bulk_edit.py:441 dcim/forms/bulk_edit.py:682 -#: dcim/forms/bulk_edit.py:729 dcim/forms/bulk_edit.py:882 -#: dcim/forms/bulk_import.py:235 dcim/forms/bulk_import.py:315 -#: dcim/forms/bulk_import.py:546 dcim/forms/bulk_import.py:1317 -#: dcim/forms/bulk_import.py:1351 dcim/forms/filtersets.py:95 -#: dcim/forms/filtersets.py:322 dcim/forms/filtersets.py:356 -#: dcim/forms/filtersets.py:396 dcim/forms/filtersets.py:447 -#: dcim/forms/filtersets.py:719 dcim/forms/filtersets.py:762 -#: dcim/forms/filtersets.py:977 dcim/forms/filtersets.py:1006 -#: dcim/forms/filtersets.py:1026 dcim/forms/filtersets.py:1090 -#: dcim/forms/filtersets.py:1120 dcim/forms/filtersets.py:1129 -#: dcim/forms/filtersets.py:1240 dcim/forms/filtersets.py:1264 -#: dcim/forms/filtersets.py:1289 dcim/forms/filtersets.py:1308 -#: dcim/forms/filtersets.py:1331 dcim/forms/filtersets.py:1442 -#: dcim/forms/filtersets.py:1466 dcim/forms/filtersets.py:1490 -#: dcim/forms/filtersets.py:1508 dcim/forms/filtersets.py:1525 -#: dcim/forms/model_forms.py:180 dcim/forms/model_forms.py:243 -#: dcim/forms/model_forms.py:468 dcim/forms/model_forms.py:728 -#: dcim/tables/devices.py:157 dcim/tables/power.py:30 dcim/tables/racks.py:118 -#: dcim/tables/racks.py:212 extras/filtersets.py:536 -#: extras/forms/filtersets.py:320 ipam/forms/filtersets.py:173 -#: ipam/forms/filtersets.py:414 ipam/forms/filtersets.py:437 -#: ipam/forms/filtersets.py:467 templates/dcim/device.html:26 -#: templates/dcim/device_edit.html:30 -#: templates/dcim/inc/cable_termination.html:12 -#: templates/dcim/location.html:26 templates/dcim/powerpanel.html:26 -#: templates/dcim/rack.html:24 templates/dcim/rackreservation.html:32 -#: virtualization/forms/filtersets.py:46 -#: virtualization/forms/filtersets.py:100 wireless/forms/model_forms.py:87 -#: wireless/forms/model_forms.py:129 +#: netbox/circuits/forms/filtersets.py: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/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 msgid "Location" msgstr "Lokation" -#: circuits/forms/filtersets.py:32 circuits/forms/filtersets.py:120 -#: dcim/forms/filtersets.py:144 dcim/forms/filtersets.py:158 -#: dcim/forms/filtersets.py:174 dcim/forms/filtersets.py:206 -#: dcim/forms/filtersets.py:328 dcim/forms/filtersets.py:400 -#: dcim/forms/filtersets.py:471 dcim/forms/filtersets.py:723 -#: dcim/forms/filtersets.py:1091 netbox/navigation/menu.py:31 -#: netbox/navigation/menu.py:33 tenancy/forms/filtersets.py:42 -#: tenancy/tables/columns.py:70 tenancy/tables/contacts.py:25 -#: tenancy/views.py:19 virtualization/forms/filtersets.py:37 -#: virtualization/forms/filtersets.py:48 -#: virtualization/forms/filtersets.py:106 +#: netbox/circuits/forms/filtersets.py: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/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/tables/contacts.py:25 netbox/tenancy/views.py:19 +#: netbox/virtualization/forms/filtersets.py:37 +#: netbox/virtualization/forms/filtersets.py:48 +#: netbox/virtualization/forms/filtersets.py:106 msgid "Contacts" msgstr "Kontakte" -#: circuits/forms/filtersets.py:37 circuits/forms/filtersets.py:157 -#: dcim/forms/bulk_edit.py:112 dcim/forms/bulk_edit.py:313 -#: dcim/forms/bulk_edit.py:857 dcim/forms/bulk_import.py:93 -#: dcim/forms/filtersets.py:73 dcim/forms/filtersets.py:185 -#: dcim/forms/filtersets.py:211 dcim/forms/filtersets.py:334 -#: dcim/forms/filtersets.py:425 dcim/forms/filtersets.py:739 -#: dcim/forms/filtersets.py:983 dcim/forms/filtersets.py:1013 -#: dcim/forms/filtersets.py:1097 dcim/forms/filtersets.py:1136 -#: dcim/forms/filtersets.py:1576 dcim/forms/filtersets.py:1600 -#: dcim/forms/filtersets.py:1624 dcim/forms/model_forms.py:112 -#: dcim/forms/object_create.py:375 dcim/tables/devices.py:143 -#: dcim/tables/sites.py:85 extras/filtersets.py:503 -#: ipam/forms/bulk_edit.py:208 ipam/forms/bulk_edit.py:474 -#: ipam/forms/filtersets.py:217 ipam/forms/filtersets.py:422 -#: ipam/forms/filtersets.py:475 templates/dcim/device.html:18 -#: templates/dcim/rack.html:16 templates/dcim/rackreservation.html:22 -#: templates/dcim/region.html:26 templates/dcim/site.html:31 -#: templates/ipam/prefix.html:49 templates/ipam/vlan.html:16 -#: virtualization/forms/bulk_edit.py:81 virtualization/forms/filtersets.py:59 -#: virtualization/forms/filtersets.py:133 -#: virtualization/forms/model_forms.py:92 vpn/forms/filtersets.py:257 +#: netbox/circuits/forms/filtersets.py: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/templates/dcim/rackreservation.html:22 +#: netbox/templates/dcim/region.html:26 netbox/templates/dcim/site.html:31 +#: netbox/templates/ipam/prefix.html:49 netbox/templates/ipam/vlan.html:16 +#: netbox/virtualization/forms/bulk_edit.py:81 +#: netbox/virtualization/forms/filtersets.py:59 +#: netbox/virtualization/forms/filtersets.py:133 +#: netbox/virtualization/forms/model_forms.py:92 +#: netbox/vpn/forms/filtersets.py:257 msgid "Region" msgstr "Region" -#: circuits/forms/filtersets.py:42 circuits/forms/filtersets.py:162 -#: dcim/forms/bulk_edit.py:321 dcim/forms/bulk_edit.py:865 -#: dcim/forms/filtersets.py:78 dcim/forms/filtersets.py:190 -#: dcim/forms/filtersets.py:216 dcim/forms/filtersets.py:347 -#: dcim/forms/filtersets.py:430 dcim/forms/filtersets.py:744 -#: dcim/forms/filtersets.py:988 dcim/forms/filtersets.py:1102 -#: dcim/forms/filtersets.py:1141 dcim/forms/object_create.py:383 -#: extras/filtersets.py:520 ipam/forms/bulk_edit.py:213 -#: ipam/forms/bulk_edit.py:479 ipam/forms/filtersets.py:222 -#: ipam/forms/filtersets.py:427 ipam/forms/filtersets.py:480 -#: virtualization/forms/bulk_edit.py:86 virtualization/forms/filtersets.py:69 -#: virtualization/forms/filtersets.py:138 -#: virtualization/forms/model_forms.py:98 +#: netbox/circuits/forms/filtersets.py: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/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 msgid "Site group" msgstr "Standortgruppe" -#: circuits/forms/filtersets.py:65 circuits/forms/filtersets.py:83 -#: circuits/forms/filtersets.py:102 circuits/forms/filtersets.py:117 -#: core/forms/filtersets.py:67 core/forms/filtersets.py:135 -#: dcim/forms/bulk_edit.py:828 dcim/forms/filtersets.py:172 -#: dcim/forms/filtersets.py:204 dcim/forms/filtersets.py:915 -#: dcim/forms/filtersets.py:1007 dcim/forms/filtersets.py:1131 -#: dcim/forms/filtersets.py:1239 dcim/forms/filtersets.py:1263 -#: dcim/forms/filtersets.py:1288 dcim/forms/filtersets.py:1307 -#: dcim/forms/filtersets.py:1327 dcim/forms/filtersets.py:1441 -#: dcim/forms/filtersets.py:1465 dcim/forms/filtersets.py:1489 -#: dcim/forms/filtersets.py:1507 dcim/forms/filtersets.py:1523 -#: extras/forms/bulk_edit.py:90 extras/forms/filtersets.py:44 -#: extras/forms/filtersets.py:134 extras/forms/filtersets.py:165 -#: extras/forms/filtersets.py:205 extras/forms/filtersets.py:221 -#: extras/forms/filtersets.py:252 extras/forms/filtersets.py:276 -#: extras/forms/filtersets.py:441 ipam/forms/filtersets.py:99 -#: ipam/forms/filtersets.py:266 ipam/forms/filtersets.py:307 -#: ipam/forms/filtersets.py:382 ipam/forms/filtersets.py:468 -#: ipam/forms/filtersets.py:527 ipam/forms/filtersets.py:545 -#: netbox/tables/tables.py:256 virtualization/forms/filtersets.py:45 -#: virtualization/forms/filtersets.py:103 -#: virtualization/forms/filtersets.py:198 -#: virtualization/forms/filtersets.py:243 vpn/forms/filtersets.py:213 -#: wireless/forms/bulk_edit.py:150 wireless/forms/filtersets.py:34 -#: wireless/forms/filtersets.py:74 +#: 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" -#: circuits/forms/filtersets.py:73 circuits/tables/circuits.py:63 -#: circuits/tables/providers.py:66 templates/circuits/circuit.html:22 -#: templates/circuits/provideraccount.html:24 +#: netbox/circuits/forms/filtersets.py:73 +#: netbox/circuits/tables/circuits.py:63 +#: netbox/circuits/tables/providers.py:66 +#: netbox/templates/circuits/circuit.html:22 +#: netbox/templates/circuits/provideraccount.html:24 msgid "Account" msgstr "Konto" -#: circuits/forms/filtersets.py:217 +#: netbox/circuits/forms/filtersets.py:217 msgid "Term Side" msgstr "Terminationsseite" -#: circuits/forms/filtersets.py:250 extras/forms/model_forms.py:582 -#: ipam/forms/filtersets.py:142 ipam/forms/filtersets.py:546 -#: ipam/forms/model_forms.py:323 templates/extras/configcontext.html:60 -#: templates/ipam/ipaddress.html:59 templates/ipam/vlan_edit.html:30 -#: tenancy/forms/filtersets.py:87 users/forms/model_forms.py:314 +#: 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/templates/extras/configcontext.html:60 +#: netbox/templates/ipam/ipaddress.html:59 +#: netbox/templates/ipam/vlan_edit.html:30 +#: netbox/tenancy/forms/filtersets.py:87 netbox/users/forms/model_forms.py:314 msgid "Assignment" msgstr "Zuweisung" -#: circuits/forms/filtersets.py:265 circuits/forms/model_forms.py:195 -#: circuits/tables/circuits.py:155 dcim/forms/bulk_edit.py:117 -#: dcim/forms/bulk_import.py:100 dcim/forms/model_forms.py:117 -#: dcim/tables/sites.py:89 extras/forms/filtersets.py:480 -#: ipam/filtersets.py:999 ipam/forms/bulk_edit.py:493 -#: ipam/forms/bulk_import.py:436 ipam/forms/model_forms.py:528 -#: ipam/tables/fhrp.py:67 ipam/tables/vlans.py:122 ipam/tables/vlans.py:226 -#: templates/circuits/circuitgroupassignment.html:22 -#: templates/dcim/interface.html:284 templates/dcim/site.html:37 -#: templates/ipam/inc/panels/fhrp_groups.html:23 templates/ipam/vlan.html:27 -#: templates/tenancy/contact.html:21 templates/tenancy/tenant.html:20 -#: templates/users/group.html:6 templates/users/group.html:14 -#: templates/virtualization/cluster.html:29 templates/vpn/tunnel.html:29 -#: templates/wireless/wirelesslan.html:18 tenancy/forms/bulk_edit.py:43 -#: tenancy/forms/bulk_edit.py:94 tenancy/forms/bulk_import.py:40 -#: tenancy/forms/bulk_import.py:81 tenancy/forms/filtersets.py:48 -#: tenancy/forms/filtersets.py:78 tenancy/forms/filtersets.py:97 -#: tenancy/forms/model_forms.py:45 tenancy/forms/model_forms.py:97 -#: tenancy/forms/model_forms.py:122 tenancy/tables/contacts.py:60 -#: tenancy/tables/contacts.py:107 tenancy/tables/tenants.py:42 -#: users/filtersets.py:62 users/filtersets.py:185 users/forms/filtersets.py:31 -#: users/forms/filtersets.py:37 users/forms/filtersets.py:79 -#: virtualization/forms/bulk_edit.py:65 virtualization/forms/bulk_import.py:47 -#: virtualization/forms/filtersets.py:85 -#: virtualization/forms/model_forms.py:66 virtualization/tables/clusters.py:70 -#: vpn/forms/bulk_edit.py:112 vpn/forms/bulk_import.py:158 -#: vpn/forms/filtersets.py:116 vpn/tables/crypto.py:31 -#: vpn/tables/tunnels.py:44 wireless/forms/bulk_edit.py:48 -#: wireless/forms/bulk_import.py:36 wireless/forms/filtersets.py:46 -#: wireless/forms/model_forms.py:40 wireless/tables/wirelesslan.py:48 +#: netbox/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:999 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/templates/circuits/circuitgroupassignment.html:22 +#: netbox/templates/dcim/interface.html:284 netbox/templates/dcim/site.html:37 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:23 +#: netbox/templates/ipam/vlan.html:27 netbox/templates/tenancy/contact.html:21 +#: netbox/templates/tenancy/tenant.html:20 netbox/templates/users/group.html:6 +#: netbox/templates/users/group.html:14 +#: netbox/templates/virtualization/cluster.html:29 +#: netbox/templates/vpn/tunnel.html:29 +#: netbox/templates/wireless/wirelesslan.html:18 +#: netbox/tenancy/forms/bulk_edit.py:43 netbox/tenancy/forms/bulk_edit.py:94 +#: netbox/tenancy/forms/bulk_import.py:40 +#: netbox/tenancy/forms/bulk_import.py:81 +#: netbox/tenancy/forms/filtersets.py:48 netbox/tenancy/forms/filtersets.py:78 +#: netbox/tenancy/forms/filtersets.py:97 +#: netbox/tenancy/forms/model_forms.py:45 +#: netbox/tenancy/forms/model_forms.py:97 +#: netbox/tenancy/forms/model_forms.py:122 +#: netbox/tenancy/tables/contacts.py:60 netbox/tenancy/tables/contacts.py:107 +#: netbox/tenancy/tables/tenants.py:42 netbox/users/filtersets.py: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/tables/clusters.py:70 +#: netbox/vpn/forms/bulk_edit.py:112 netbox/vpn/forms/bulk_import.py:158 +#: netbox/vpn/forms/filtersets.py:116 netbox/vpn/tables/crypto.py:31 +#: netbox/vpn/tables/tunnels.py:44 netbox/wireless/forms/bulk_edit.py:48 +#: netbox/wireless/forms/bulk_import.py:36 +#: netbox/wireless/forms/filtersets.py:46 +#: netbox/wireless/forms/model_forms.py:40 +#: netbox/wireless/tables/wirelesslan.py:48 msgid "Group" msgstr "Gruppe" -#: circuits/forms/model_forms.py:182 templates/circuits/circuitgroup.html:25 +#: netbox/circuits/forms/model_forms.py:182 +#: netbox/templates/circuits/circuitgroup.html:25 msgid "Circuit Group" msgstr "Transportnetzgruppe" -#: circuits/models/circuits.py:27 dcim/models/cables.py:67 -#: dcim/models/device_component_templates.py:517 -#: dcim/models/device_component_templates.py:617 -#: dcim/models/device_components.py:975 dcim/models/device_components.py:1049 -#: dcim/models/device_components.py:1204 dcim/models/devices.py:479 -#: dcim/models/racks.py:224 extras/models/tags.py:28 +#: 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/extras/models/tags.py:28 msgid "color" msgstr "Farbe" -#: circuits/models/circuits.py:36 +#: netbox/circuits/models/circuits.py:36 msgid "circuit type" msgstr "Transportnetztyp" -#: circuits/models/circuits.py:37 +#: netbox/circuits/models/circuits.py:37 msgid "circuit types" msgstr "Transportnetztypen" -#: circuits/models/circuits.py:48 +#: netbox/circuits/models/circuits.py:48 msgid "circuit ID" msgstr "Transportnetz-ID" -#: circuits/models/circuits.py:49 +#: netbox/circuits/models/circuits.py:49 msgid "Unique circuit ID" msgstr "Eindeutige Transportnetz-ID" -#: circuits/models/circuits.py:69 core/models/data.py:52 -#: core/models/jobs.py:84 dcim/models/cables.py:49 dcim/models/devices.py:653 -#: dcim/models/devices.py:1173 dcim/models/devices.py:1399 -#: dcim/models/power.py:96 dcim/models/racks.py:297 dcim/models/sites.py:154 -#: dcim/models/sites.py:266 ipam/models/ip.py:253 ipam/models/ip.py:522 -#: ipam/models/ip.py:730 ipam/models/vlans.py:195 -#: virtualization/models/clusters.py:74 -#: virtualization/models/virtualmachines.py:84 vpn/models/tunnels.py:40 -#: wireless/models.py:95 wireless/models.py:159 +#: 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 msgid "status" msgstr "Status" -#: circuits/models/circuits.py:84 templates/core/plugin.html:20 +#: netbox/circuits/models/circuits.py:84 netbox/templates/core/plugin.html:20 msgid "installed" msgstr "installiert" -#: circuits/models/circuits.py:89 +#: netbox/circuits/models/circuits.py:89 msgid "terminates" msgstr "endet" -#: circuits/models/circuits.py:94 +#: netbox/circuits/models/circuits.py:94 msgid "commit rate (Kbps)" msgstr "garantierte Bandbreite (Kbps)" -#: circuits/models/circuits.py:95 +#: netbox/circuits/models/circuits.py:95 msgid "Committed rate" msgstr "Garantierte Bandbreite" -#: circuits/models/circuits.py:137 +#: netbox/circuits/models/circuits.py:137 msgid "circuit" msgstr "Transportnetz" -#: circuits/models/circuits.py:138 +#: netbox/circuits/models/circuits.py:138 msgid "circuits" msgstr "Transportnetze" -#: circuits/models/circuits.py:170 +#: netbox/circuits/models/circuits.py:170 msgid "circuit group" msgstr "Transportnetzgruppe" -#: circuits/models/circuits.py:171 +#: netbox/circuits/models/circuits.py:171 msgid "circuit groups" msgstr "Transportnetzgruppen" -#: circuits/models/circuits.py:195 ipam/models/fhrp.py:93 -#: tenancy/models/contacts.py:134 +#: netbox/circuits/models/circuits.py:195 netbox/ipam/models/fhrp.py:93 +#: netbox/tenancy/models/contacts.py:134 msgid "priority" msgstr "Priorität" -#: circuits/models/circuits.py:213 +#: netbox/circuits/models/circuits.py:213 msgid "Circuit group assignment" msgstr "Transportnetzzuweisung" -#: circuits/models/circuits.py:214 +#: netbox/circuits/models/circuits.py:214 msgid "Circuit group assignments" msgstr "Transportnetzzuweisungen" -#: circuits/models/circuits.py:240 +#: netbox/circuits/models/circuits.py:240 msgid "termination" msgstr "Abschlusspunkt" -#: circuits/models/circuits.py:257 +#: netbox/circuits/models/circuits.py:257 msgid "port speed (Kbps)" msgstr "Portgeschwindigkeit (Kbps)" -#: circuits/models/circuits.py:260 +#: netbox/circuits/models/circuits.py:260 msgid "Physical circuit speed" msgstr "Physikalische Transportnetzgeschwindigkeit" -#: circuits/models/circuits.py:265 +#: netbox/circuits/models/circuits.py:265 msgid "upstream speed (Kbps)" msgstr "Upstream Geschwindigkeit (Kbps)" -#: circuits/models/circuits.py:266 +#: netbox/circuits/models/circuits.py:266 msgid "Upstream speed, if different from port speed" msgstr "" "Upstream Geschwindigkeit, falls sie von der Portgeschwindigkeit abweicht" -#: circuits/models/circuits.py:271 +#: netbox/circuits/models/circuits.py:271 msgid "cross-connect ID" msgstr "Cross-Connect-ID" -#: circuits/models/circuits.py:272 +#: netbox/circuits/models/circuits.py:272 msgid "ID of the local cross-connect" msgstr "ID des lokalen Cross-Connects" -#: circuits/models/circuits.py:277 +#: netbox/circuits/models/circuits.py:277 msgid "patch panel/port(s)" msgstr "Patchpanel/Anschluss" -#: circuits/models/circuits.py:278 +#: netbox/circuits/models/circuits.py:278 msgid "Patch panel ID and port number(s)" msgstr "Patchpanel-ID und Anschlussnummer(n)" -#: circuits/models/circuits.py:281 -#: dcim/models/device_component_templates.py:61 -#: dcim/models/device_components.py:68 dcim/models/racks.py:685 -#: extras/models/configs.py:45 extras/models/configs.py:219 -#: extras/models/customfields.py:125 extras/models/models.py:61 -#: extras/models/models.py:158 extras/models/models.py:396 -#: extras/models/models.py:511 extras/models/notifications.py:131 -#: extras/models/staging.py:31 extras/models/tags.py:32 -#: netbox/models/__init__.py:110 netbox/models/__init__.py:145 -#: netbox/models/__init__.py:191 users/models/permissions.py:24 -#: users/models/tokens.py:57 users/models/users.py:33 -#: virtualization/models/virtualmachines.py:289 +#: 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/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 msgid "description" msgstr "Beschreibung" -#: circuits/models/circuits.py:294 +#: netbox/circuits/models/circuits.py:294 msgid "circuit termination" msgstr "Transportnetzabschlusspunkt" -#: circuits/models/circuits.py:295 +#: netbox/circuits/models/circuits.py:295 msgid "circuit terminations" msgstr "Transportnetzabschlusspunkte" -#: circuits/models/circuits.py:308 +#: netbox/circuits/models/circuits.py:308 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." -#: circuits/models/circuits.py:310 +#: 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." -#: circuits/models/providers.py:22 circuits/models/providers.py:66 -#: circuits/models/providers.py:104 core/models/data.py:39 -#: core/models/jobs.py:45 dcim/models/device_component_templates.py:43 -#: dcim/models/device_components.py:53 dcim/models/devices.py:593 -#: dcim/models/devices.py:1330 dcim/models/devices.py:1395 -#: dcim/models/power.py:39 dcim/models/power.py:92 dcim/models/racks.py:262 -#: dcim/models/sites.py:138 extras/models/configs.py:36 -#: extras/models/configs.py:215 extras/models/customfields.py:92 -#: extras/models/models.py:56 extras/models/models.py:153 -#: extras/models/models.py:296 extras/models/models.py:392 -#: extras/models/models.py:501 extras/models/models.py:596 -#: extras/models/notifications.py:126 extras/models/scripts.py:30 -#: extras/models/staging.py:26 ipam/models/asns.py:18 ipam/models/fhrp.py:25 -#: ipam/models/services.py:52 ipam/models/services.py:88 -#: ipam/models/vlans.py:36 ipam/models/vlans.py:184 ipam/models/vrfs.py:22 -#: ipam/models/vrfs.py:79 netbox/models/__init__.py:137 -#: netbox/models/__init__.py:181 tenancy/models/contacts.py:64 -#: tenancy/models/tenants.py:20 tenancy/models/tenants.py:45 -#: users/models/permissions.py:20 users/models/users.py:28 -#: virtualization/models/clusters.py:57 -#: virtualization/models/virtualmachines.py:72 -#: virtualization/models/virtualmachines.py:279 vpn/models/crypto.py:24 -#: vpn/models/crypto.py:71 vpn/models/crypto.py:131 vpn/models/crypto.py:183 -#: vpn/models/crypto.py:221 vpn/models/l2vpn.py:22 vpn/models/tunnels.py:35 -#: wireless/models.py:51 +#: 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/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/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 msgid "name" msgstr "Name" -#: circuits/models/providers.py:25 +#: netbox/circuits/models/providers.py:25 msgid "Full name of the provider" msgstr "Vollständiger Name des Providers" -#: circuits/models/providers.py:28 dcim/models/devices.py:86 -#: dcim/models/racks.py:137 dcim/models/sites.py:149 -#: extras/models/models.py:506 ipam/models/asns.py:23 ipam/models/vlans.py:40 -#: netbox/models/__init__.py:141 netbox/models/__init__.py:186 -#: tenancy/models/tenants.py:25 tenancy/models/tenants.py:49 -#: vpn/models/l2vpn.py:27 wireless/models.py:56 +#: netbox/circuits/models/providers.py:28 netbox/dcim/models/devices.py:86 +#: 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 msgid "slug" msgstr "URL-Slug" -#: circuits/models/providers.py:42 +#: netbox/circuits/models/providers.py:42 msgid "provider" msgstr "Provider" -#: circuits/models/providers.py:43 +#: netbox/circuits/models/providers.py:43 msgid "providers" msgstr "Provider" -#: circuits/models/providers.py:63 +#: netbox/circuits/models/providers.py:63 msgid "account ID" msgstr "Konto ID" -#: circuits/models/providers.py:86 +#: netbox/circuits/models/providers.py:86 msgid "provider account" msgstr "Providerkonto" -#: circuits/models/providers.py:87 +#: netbox/circuits/models/providers.py:87 msgid "provider accounts" msgstr "Providerkonten" -#: circuits/models/providers.py:115 +#: netbox/circuits/models/providers.py:115 msgid "service ID" msgstr "Dienst-ID" -#: circuits/models/providers.py:126 +#: netbox/circuits/models/providers.py:126 msgid "provider network" msgstr "Providernetzwerk" -#: circuits/models/providers.py:127 +#: netbox/circuits/models/providers.py:127 msgid "provider networks" msgstr "Providernetzwerke" -#: circuits/tables/circuits.py:32 circuits/tables/circuits.py:132 -#: circuits/tables/providers.py:18 circuits/tables/providers.py:69 -#: circuits/tables/providers.py:99 core/tables/data.py:16 -#: core/tables/jobs.py:14 core/tables/plugins.py:44 core/tables/tasks.py:11 -#: core/tables/tasks.py:115 dcim/forms/filtersets.py:63 -#: dcim/forms/object_create.py:43 dcim/tables/devices.py:52 -#: dcim/tables/devices.py:92 dcim/tables/devices.py:134 -#: dcim/tables/devices.py:289 dcim/tables/devices.py:392 -#: dcim/tables/devices.py:433 dcim/tables/devices.py:482 -#: dcim/tables/devices.py:531 dcim/tables/devices.py:648 -#: dcim/tables/devices.py:731 dcim/tables/devices.py:778 -#: dcim/tables/devices.py:841 dcim/tables/devices.py:911 -#: dcim/tables/devices.py:974 dcim/tables/devices.py:994 -#: dcim/tables/devices.py:1023 dcim/tables/devices.py:1053 -#: dcim/tables/devicetypes.py:31 dcim/tables/power.py:22 -#: dcim/tables/power.py:62 dcim/tables/racks.py:24 dcim/tables/racks.py:113 -#: dcim/tables/sites.py:24 dcim/tables/sites.py:51 dcim/tables/sites.py:78 -#: dcim/tables/sites.py:130 extras/forms/filtersets.py:213 -#: extras/tables/tables.py:58 extras/tables/tables.py:122 -#: extras/tables/tables.py:155 extras/tables/tables.py:180 -#: extras/tables/tables.py:246 extras/tables/tables.py:361 -#: extras/tables/tables.py:378 extras/tables/tables.py:401 -#: extras/tables/tables.py:439 extras/tables/tables.py:491 -#: extras/tables/tables.py:514 ipam/forms/bulk_edit.py:407 -#: ipam/forms/filtersets.py:386 ipam/tables/asn.py:16 ipam/tables/ip.py:85 -#: ipam/tables/ip.py:160 ipam/tables/services.py:15 ipam/tables/services.py:40 -#: ipam/tables/vlans.py:64 ipam/tables/vlans.py:114 ipam/tables/vrfs.py:26 -#: ipam/tables/vrfs.py:68 templates/circuits/circuitgroup.html:28 -#: templates/circuits/circuittype.html:22 -#: templates/circuits/provideraccount.html:28 -#: templates/circuits/providernetwork.html:24 -#: templates/core/datasource.html:34 templates/core/job.html:44 -#: templates/core/plugin.html:54 templates/core/rq_worker.html:43 -#: templates/dcim/consoleport.html:28 templates/dcim/consoleserverport.html:28 -#: templates/dcim/devicebay.html:24 templates/dcim/devicerole.html:26 -#: templates/dcim/frontport.html:28 -#: templates/dcim/inc/interface_vlans_table.html:5 -#: templates/dcim/inc/panels/inventory_items.html:18 -#: templates/dcim/interface.html:38 templates/dcim/interface.html:165 -#: templates/dcim/inventoryitem.html:28 -#: templates/dcim/inventoryitemrole.html:18 templates/dcim/location.html:29 -#: templates/dcim/manufacturer.html:36 templates/dcim/modulebay.html:30 -#: templates/dcim/platform.html:29 templates/dcim/poweroutlet.html:28 -#: templates/dcim/powerport.html:28 templates/dcim/rackrole.html:22 -#: templates/dcim/rearport.html:28 templates/dcim/region.html:29 -#: templates/dcim/sitegroup.html:29 -#: templates/dcim/virtualdevicecontext.html:18 -#: templates/extras/configcontext.html:13 -#: templates/extras/configtemplate.html:13 -#: templates/extras/customfield.html:13 templates/extras/customlink.html:13 -#: templates/extras/eventrule.html:13 templates/extras/exporttemplate.html:15 -#: templates/extras/notificationgroup.html:14 -#: templates/extras/savedfilter.html:13 templates/extras/script_list.html:44 -#: templates/extras/tag.html:14 templates/extras/webhook.html:13 -#: templates/ipam/asnrange.html:15 templates/ipam/fhrpgroup.html:30 -#: templates/ipam/rir.html:22 templates/ipam/role.html:22 -#: templates/ipam/routetarget.html:13 templates/ipam/service.html:24 -#: templates/ipam/servicetemplate.html:15 templates/ipam/vlan.html:35 -#: templates/ipam/vlangroup.html:30 templates/tenancy/contact.html:25 -#: templates/tenancy/contactgroup.html:21 -#: templates/tenancy/contactrole.html:18 templates/tenancy/tenantgroup.html:29 -#: templates/users/group.html:17 templates/users/objectpermission.html:17 -#: templates/virtualization/cluster.html:13 -#: templates/virtualization/clustergroup.html:22 -#: templates/virtualization/clustertype.html:22 -#: templates/virtualization/virtualdisk.html:25 -#: templates/virtualization/virtualmachine.html:15 -#: templates/virtualization/vminterface.html:25 -#: templates/vpn/ikepolicy.html:13 templates/vpn/ikeproposal.html:13 -#: templates/vpn/ipsecpolicy.html:13 templates/vpn/ipsecprofile.html:13 -#: templates/vpn/ipsecprofile.html:36 templates/vpn/ipsecprofile.html:69 -#: templates/vpn/ipsecproposal.html:13 templates/vpn/l2vpn.html:14 -#: templates/vpn/tunnel.html:21 templates/vpn/tunnelgroup.html:26 -#: templates/wireless/wirelesslangroup.html:29 tenancy/tables/contacts.py:19 -#: tenancy/tables/contacts.py:41 tenancy/tables/contacts.py:56 -#: tenancy/tables/tenants.py:16 tenancy/tables/tenants.py:38 -#: users/tables.py:62 users/tables.py:76 -#: virtualization/forms/bulk_create.py:20 -#: virtualization/forms/object_create.py:13 -#: virtualization/forms/object_create.py:23 -#: virtualization/tables/clusters.py:17 virtualization/tables/clusters.py:39 -#: virtualization/tables/clusters.py:62 -#: virtualization/tables/virtualmachines.py:55 -#: virtualization/tables/virtualmachines.py:139 -#: virtualization/tables/virtualmachines.py:194 vpn/tables/crypto.py:18 -#: vpn/tables/crypto.py:57 vpn/tables/crypto.py:93 vpn/tables/crypto.py:129 -#: vpn/tables/crypto.py:158 vpn/tables/l2vpn.py:23 vpn/tables/tunnels.py:18 -#: vpn/tables/tunnels.py:40 wireless/tables/wirelesslan.py:18 -#: wireless/tables/wirelesslan.py:79 +#: netbox/circuits/tables/circuits.py:32 +#: netbox/circuits/tables/circuits.py:132 +#: netbox/circuits/tables/providers.py:18 +#: netbox/circuits/tables/providers.py:69 +#: netbox/circuits/tables/providers.py:99 netbox/core/tables/data.py:16 +#: netbox/core/tables/jobs.py:14 netbox/core/tables/plugins.py: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/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/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/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/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 +#: netbox/templates/dcim/consoleserverport.html:28 +#: netbox/templates/dcim/devicebay.html:24 +#: netbox/templates/dcim/devicerole.html:26 +#: netbox/templates/dcim/frontport.html:28 +#: netbox/templates/dcim/inc/interface_vlans_table.html:5 +#: netbox/templates/dcim/inc/panels/inventory_items.html:18 +#: netbox/templates/dcim/interface.html:38 +#: netbox/templates/dcim/interface.html:165 +#: netbox/templates/dcim/inventoryitem.html:28 +#: netbox/templates/dcim/inventoryitemrole.html:18 +#: netbox/templates/dcim/location.html:29 +#: netbox/templates/dcim/manufacturer.html:36 +#: netbox/templates/dcim/modulebay.html:30 +#: netbox/templates/dcim/platform.html:29 +#: netbox/templates/dcim/poweroutlet.html:28 +#: netbox/templates/dcim/powerport.html:28 +#: netbox/templates/dcim/rackrole.html:22 +#: netbox/templates/dcim/rearport.html:28 netbox/templates/dcim/region.html:29 +#: netbox/templates/dcim/sitegroup.html:29 +#: netbox/templates/dcim/virtualdevicecontext.html:18 +#: netbox/templates/extras/configcontext.html:13 +#: netbox/templates/extras/configtemplate.html:13 +#: netbox/templates/extras/customfield.html:13 +#: netbox/templates/extras/customlink.html:13 +#: netbox/templates/extras/eventrule.html:13 +#: netbox/templates/extras/exporttemplate.html:15 +#: netbox/templates/extras/notificationgroup.html:14 +#: netbox/templates/extras/savedfilter.html:13 +#: netbox/templates/extras/script_list.html:45 +#: netbox/templates/extras/tag.html:14 netbox/templates/extras/webhook.html:13 +#: netbox/templates/ipam/asnrange.html:15 +#: netbox/templates/ipam/fhrpgroup.html:30 netbox/templates/ipam/rir.html:22 +#: netbox/templates/ipam/role.html:22 +#: netbox/templates/ipam/routetarget.html:13 +#: netbox/templates/ipam/service.html:24 +#: netbox/templates/ipam/servicetemplate.html:15 +#: netbox/templates/ipam/vlan.html:35 netbox/templates/ipam/vlangroup.html:30 +#: netbox/templates/tenancy/contact.html:25 +#: netbox/templates/tenancy/contactgroup.html:21 +#: netbox/templates/tenancy/contactrole.html:18 +#: netbox/templates/tenancy/tenantgroup.html:29 +#: netbox/templates/users/group.html:17 +#: netbox/templates/users/objectpermission.html:17 +#: netbox/templates/virtualization/cluster.html:13 +#: netbox/templates/virtualization/clustergroup.html:22 +#: netbox/templates/virtualization/clustertype.html:22 +#: netbox/templates/virtualization/virtualdisk.html:25 +#: netbox/templates/virtualization/virtualmachine.html:15 +#: netbox/templates/virtualization/vminterface.html:25 +#: netbox/templates/vpn/ikepolicy.html:13 +#: netbox/templates/vpn/ikeproposal.html:13 +#: netbox/templates/vpn/ipsecpolicy.html:13 +#: netbox/templates/vpn/ipsecprofile.html:13 +#: netbox/templates/vpn/ipsecprofile.html:36 +#: netbox/templates/vpn/ipsecprofile.html:69 +#: netbox/templates/vpn/ipsecproposal.html:13 +#: netbox/templates/vpn/l2vpn.html:14 netbox/templates/vpn/tunnel.html:21 +#: netbox/templates/vpn/tunnelgroup.html:26 +#: netbox/templates/wireless/wirelesslangroup.html:29 +#: netbox/tenancy/tables/contacts.py:19 netbox/tenancy/tables/contacts.py:41 +#: netbox/tenancy/tables/contacts.py:56 netbox/tenancy/tables/tenants.py:16 +#: netbox/tenancy/tables/tenants.py:38 netbox/users/tables.py:62 +#: netbox/users/tables.py:76 netbox/virtualization/forms/bulk_create.py:20 +#: netbox/virtualization/forms/object_create.py:13 +#: netbox/virtualization/forms/object_create.py:23 +#: netbox/virtualization/tables/clusters.py:17 +#: netbox/virtualization/tables/clusters.py:39 +#: netbox/virtualization/tables/clusters.py:62 +#: netbox/virtualization/tables/virtualmachines.py:55 +#: netbox/virtualization/tables/virtualmachines.py:139 +#: netbox/virtualization/tables/virtualmachines.py:194 +#: netbox/vpn/tables/crypto.py:18 netbox/vpn/tables/crypto.py:57 +#: netbox/vpn/tables/crypto.py:93 netbox/vpn/tables/crypto.py:129 +#: netbox/vpn/tables/crypto.py:158 netbox/vpn/tables/l2vpn.py:23 +#: netbox/vpn/tables/tunnels.py:18 netbox/vpn/tables/tunnels.py:40 +#: netbox/wireless/tables/wirelesslan.py:18 +#: netbox/wireless/tables/wirelesslan.py:79 msgid "Name" msgstr "Name" -#: circuits/tables/circuits.py:41 circuits/tables/circuits.py:138 -#: circuits/tables/providers.py:45 circuits/tables/providers.py:79 -#: netbox/navigation/menu.py:266 netbox/navigation/menu.py:270 -#: netbox/navigation/menu.py:272 templates/circuits/provider.html:57 -#: templates/circuits/provideraccount.html:44 -#: templates/circuits/providernetwork.html:50 +#: 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/templates/circuits/provider.html:57 +#: netbox/templates/circuits/provideraccount.html:44 +#: netbox/templates/circuits/providernetwork.html:50 msgid "Circuits" msgstr "Transportnetze" -#: circuits/tables/circuits.py:55 templates/circuits/circuit.html:26 +#: netbox/circuits/tables/circuits.py:55 +#: netbox/templates/circuits/circuit.html:26 msgid "Circuit ID" msgstr "Transportnetz-ID" -#: circuits/tables/circuits.py:69 wireless/forms/model_forms.py:160 +#: netbox/circuits/tables/circuits.py:69 +#: netbox/wireless/forms/model_forms.py:160 msgid "Side A" msgstr "Seite A" -#: circuits/tables/circuits.py:74 +#: netbox/circuits/tables/circuits.py:74 msgid "Side Z" msgstr "Seite Z" -#: circuits/tables/circuits.py:77 templates/circuits/circuit.html:55 +#: netbox/circuits/tables/circuits.py:77 +#: netbox/templates/circuits/circuit.html:55 msgid "Commit Rate" msgstr "Garantierte Bandbreite" -#: circuits/tables/circuits.py:80 circuits/tables/providers.py:48 -#: circuits/tables/providers.py:82 circuits/tables/providers.py:107 -#: dcim/tables/devices.py:1036 dcim/tables/devicetypes.py:92 -#: dcim/tables/modules.py:29 dcim/tables/modules.py:72 dcim/tables/power.py:39 -#: dcim/tables/power.py:96 dcim/tables/racks.py:84 dcim/tables/racks.py:145 -#: dcim/tables/racks.py:225 dcim/tables/sites.py:108 -#: extras/tables/tables.py:582 ipam/tables/asn.py:69 ipam/tables/fhrp.py:34 -#: ipam/tables/ip.py:136 ipam/tables/ip.py:275 ipam/tables/ip.py:329 -#: ipam/tables/ip.py:397 ipam/tables/services.py:24 ipam/tables/services.py:54 -#: ipam/tables/vlans.py:145 ipam/tables/vrfs.py:47 ipam/tables/vrfs.py:72 -#: templates/dcim/htmx/cable_edit.html:89 templates/generic/bulk_edit.html:86 -#: templates/inc/panels/comments.html:5 tenancy/tables/contacts.py:68 -#: tenancy/tables/tenants.py:46 utilities/forms/fields/fields.py:29 -#: virtualization/tables/clusters.py:91 -#: virtualization/tables/virtualmachines.py:82 vpn/tables/crypto.py:37 -#: vpn/tables/crypto.py:74 vpn/tables/crypto.py:109 vpn/tables/crypto.py:140 -#: vpn/tables/crypto.py:173 vpn/tables/l2vpn.py:37 vpn/tables/tunnels.py:61 -#: wireless/tables/wirelesslan.py:27 wireless/tables/wirelesslan.py:58 +#: netbox/circuits/tables/circuits.py: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:72 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/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/vpn/tables/crypto.py:37 netbox/vpn/tables/crypto.py:74 +#: netbox/vpn/tables/crypto.py:109 netbox/vpn/tables/crypto.py:140 +#: netbox/vpn/tables/crypto.py:173 netbox/vpn/tables/l2vpn.py:37 +#: netbox/vpn/tables/tunnels.py:61 netbox/wireless/tables/wirelesslan.py:27 +#: netbox/wireless/tables/wirelesslan.py:58 msgid "Comments" msgstr "Kommentare" -#: circuits/tables/circuits.py:86 templates/tenancy/contact.html:84 -#: tenancy/tables/contacts.py:73 +#: netbox/circuits/tables/circuits.py:86 +#: netbox/templates/tenancy/contact.html:84 +#: netbox/tenancy/tables/contacts.py:73 msgid "Assignments" msgstr "Zuweisungen" -#: circuits/tables/providers.py:23 +#: netbox/circuits/tables/providers.py:23 msgid "Accounts" msgstr "Konten" -#: circuits/tables/providers.py:29 +#: netbox/circuits/tables/providers.py:29 msgid "Account Count" msgstr "Anzahl der Konten" -#: circuits/tables/providers.py:39 dcim/tables/sites.py:100 +#: netbox/circuits/tables/providers.py:39 netbox/dcim/tables/sites.py:100 msgid "ASN Count" msgstr "ASN-Anzahl" -#: circuits/views.py:331 +#: netbox/circuits/views.py:331 #, python-brace-format msgid "No terminations have been defined for circuit {circuit}." msgstr "Keine Terminierung wurde für das Transportnetz {circuit}definiert" -#: circuits/views.py:380 +#: netbox/circuits/views.py:380 #, python-brace-format msgid "Swapped terminations for circuit {circuit}." msgstr "Tausche Terminierungen für Transportnetz {circuit}" -#: core/api/views.py:39 +#: netbox/core/api/views.py:39 msgid "This user does not have permission to synchronize this data source." msgstr "" "Dieser Benutzer ist nicht berechtigt, diese Datenquelle zu synchronisieren." -#: core/choices.py:18 +#: netbox/core/choices.py:18 msgid "New" msgstr "Neu" -#: core/choices.py:19 core/constants.py:18 core/tables/tasks.py:15 -#: templates/core/rq_task.html:77 +#: netbox/core/choices.py:19 netbox/core/constants.py:18 +#: netbox/core/tables/tasks.py:15 netbox/templates/core/rq_task.html:77 msgid "Queued" msgstr "In der Warteschlange" -#: core/choices.py:20 +#: netbox/core/choices.py:20 msgid "Syncing" msgstr "Synchronisieren" -#: core/choices.py:21 core/choices.py:57 core/tables/jobs.py:41 -#: templates/core/job.html:86 +#: netbox/core/choices.py:21 netbox/core/choices.py:57 +#: netbox/core/tables/jobs.py:41 netbox/templates/core/job.html:86 msgid "Completed" msgstr "Abgeschlossen" -#: core/choices.py:22 core/choices.py:59 core/constants.py:20 -#: core/tables/tasks.py:34 dcim/choices.py:187 dcim/choices.py:239 -#: dcim/choices.py:1607 virtualization/choices.py:47 +#: netbox/core/choices.py:22 netbox/core/choices.py:59 +#: netbox/core/constants.py:20 netbox/core/tables/tasks.py:34 +#: netbox/dcim/choices.py:187 netbox/dcim/choices.py:239 +#: netbox/dcim/choices.py:1609 netbox/virtualization/choices.py:47 msgid "Failed" msgstr "Fehlgeschlagen" -#: core/choices.py:35 netbox/navigation/menu.py:335 -#: netbox/navigation/menu.py:339 templates/extras/script/base.html:14 -#: templates/extras/script_list.html:7 templates/extras/script_list.html:12 -#: templates/extras/script_result.html:17 +#: netbox/core/choices.py:35 netbox/netbox/navigation/menu.py:335 +#: netbox/netbox/navigation/menu.py:339 +#: netbox/templates/extras/script/base.html:14 +#: netbox/templates/extras/script_list.html:7 +#: netbox/templates/extras/script_list.html:12 +#: netbox/templates/extras/script_result.html:17 msgid "Scripts" msgstr "Skripte" -#: core/choices.py:36 templates/extras/report/base.html:13 +#: netbox/core/choices.py:36 netbox/templates/extras/report/base.html:13 msgid "Reports" msgstr "Berichte" -#: core/choices.py:54 +#: netbox/core/choices.py:54 msgid "Pending" msgstr "Ausstehend" -#: core/choices.py:55 core/constants.py:23 core/tables/jobs.py:32 -#: core/tables/tasks.py:38 templates/core/job.html:73 +#: netbox/core/choices.py:55 netbox/core/constants.py:23 +#: netbox/core/tables/jobs.py:32 netbox/core/tables/tasks.py:38 +#: netbox/templates/core/job.html:73 msgid "Scheduled" msgstr "Geplant" -#: core/choices.py:56 +#: netbox/core/choices.py:56 msgid "Running" msgstr "Laufend" -#: core/choices.py:58 +#: netbox/core/choices.py:58 msgid "Errored" msgstr "Fehlgeschlagen" -#: core/choices.py:87 core/tables/plugins.py:63 -#: templates/generic/object.html:61 +#: netbox/core/choices.py:87 netbox/core/tables/plugins.py:63 +#: netbox/templates/generic/object.html:61 msgid "Updated" msgstr "Aktualisiert" -#: core/choices.py:88 +#: netbox/core/choices.py:88 msgid "Deleted" msgstr "Gelöscht" -#: core/constants.py:19 core/tables/tasks.py:30 +#: netbox/core/constants.py:19 netbox/core/tables/tasks.py:30 msgid "Finished" msgstr "Fertig" -#: core/constants.py:21 core/tables/jobs.py:38 templates/core/job.html:82 -#: templates/extras/htmx/script_result.html:8 +#: netbox/core/constants.py:21 netbox/core/tables/jobs.py:38 +#: netbox/templates/core/job.html:82 +#: netbox/templates/extras/htmx/script_result.html:8 msgid "Started" msgstr "Gestartet" -#: core/constants.py:22 core/tables/tasks.py:26 +#: netbox/core/constants.py:22 netbox/core/tables/tasks.py:26 msgid "Deferred" msgstr "Aufgeschoben" -#: core/constants.py:24 +#: netbox/core/constants.py:24 msgid "Stopped" msgstr "Gestoppt" -#: core/constants.py:25 +#: netbox/core/constants.py:25 msgid "Cancelled" msgstr "Abgebrochen" -#: core/data_backends.py:32 core/tables/plugins.py:51 -#: templates/core/plugin.html:88 templates/dcim/interface.html:216 +#: netbox/core/data_backends.py:32 netbox/core/tables/plugins.py:51 +#: netbox/templates/core/plugin.html:88 +#: netbox/templates/dcim/interface.html:216 msgid "Local" msgstr "Lokal" -#: core/data_backends.py:50 core/tables/change_logging.py:20 -#: templates/account/profile.html:15 templates/users/user.html:17 -#: users/tables.py:31 +#: netbox/core/data_backends.py:50 netbox/core/tables/change_logging.py:20 +#: netbox/templates/account/profile.html:15 +#: netbox/templates/users/user.html:17 netbox/users/tables.py:31 msgid "Username" msgstr "Nutzername" -#: core/data_backends.py:52 core/data_backends.py:58 +#: netbox/core/data_backends.py:52 netbox/core/data_backends.py:58 msgid "Only used for cloning with HTTP(S)" msgstr "Wird nur für das Klonen über HTTP(S) verwendet" -#: core/data_backends.py:56 templates/account/base.html:23 -#: templates/account/password.html:12 users/forms/model_forms.py:170 +#: netbox/core/data_backends.py:56 netbox/templates/account/base.html:23 +#: netbox/templates/account/password.html:12 +#: netbox/users/forms/model_forms.py:170 msgid "Password" msgstr "Passwort" -#: core/data_backends.py:62 +#: netbox/core/data_backends.py:62 msgid "Branch" msgstr "Branch" -#: core/data_backends.py:120 +#: netbox/core/data_backends.py:120 #, python-brace-format msgid "Fetching remote data failed ({name}): {error}" msgstr "Abrufen der Remotedaten ist fehlgeschlagen ({name}): {error}" -#: core/data_backends.py:133 +#: netbox/core/data_backends.py:133 msgid "AWS access key ID" msgstr "AWS-Zugriffsschlüssel-ID" -#: core/data_backends.py:137 +#: netbox/core/data_backends.py:137 msgid "AWS secret access key" msgstr "Geheimer AWS-Zugriffsschlüssel" -#: core/events.py:27 +#: netbox/core/events.py:27 msgid "Object created" msgstr "Objekt erstellt" -#: core/events.py:28 +#: netbox/core/events.py:28 msgid "Object updated" msgstr "Objekt aktualisiert" -#: core/events.py:29 +#: netbox/core/events.py:29 msgid "Object deleted" msgstr "Objekt gelöscht" -#: core/events.py:30 +#: netbox/core/events.py:30 msgid "Job started" msgstr "Job wurde gestartet" -#: core/events.py:31 +#: netbox/core/events.py:31 msgid "Job completed" msgstr "Job wurde abgeschlossen" -#: core/events.py:32 +#: netbox/core/events.py:32 msgid "Job failed" msgstr "Job fehlgeschlagen" -#: core/events.py:33 +#: netbox/core/events.py:33 msgid "Job errored" msgstr "Job ist fehlerhaft" -#: core/filtersets.py:53 extras/filtersets.py:250 extras/filtersets.py:633 -#: extras/filtersets.py:661 +#: netbox/core/filtersets.py:53 netbox/extras/filtersets.py:250 +#: netbox/extras/filtersets.py:633 netbox/extras/filtersets.py:661 msgid "Data source (ID)" msgstr "Datenquelle (ID)" -#: core/filtersets.py:59 +#: netbox/core/filtersets.py:59 msgid "Data source (name)" msgstr "Datenquelle (Name)" -#: core/filtersets.py:145 dcim/filtersets.py:501 extras/filtersets.py:287 -#: extras/filtersets.py:331 extras/filtersets.py:353 extras/filtersets.py:413 -#: users/filtersets.py:28 +#: netbox/core/filtersets.py:145 netbox/dcim/filtersets.py:501 +#: 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 msgid "User (ID)" msgstr "Benutzer (ID)" -#: core/filtersets.py:151 +#: netbox/core/filtersets.py:151 msgid "User name" msgstr "Benutzername" -#: core/forms/bulk_edit.py:25 core/forms/filtersets.py:43 -#: core/tables/data.py:26 dcim/forms/bulk_edit.py:1122 -#: dcim/forms/bulk_edit.py:1400 dcim/forms/filtersets.py:1370 -#: dcim/tables/devices.py:553 dcim/tables/devicetypes.py:224 -#: extras/forms/bulk_edit.py:123 extras/forms/bulk_edit.py:187 -#: extras/forms/bulk_edit.py:246 extras/forms/filtersets.py:142 -#: extras/forms/filtersets.py:229 extras/forms/filtersets.py:294 -#: extras/tables/tables.py:162 extras/tables/tables.py:253 -#: extras/tables/tables.py:415 netbox/preferences.py:22 -#: templates/core/datasource.html:42 templates/dcim/interface.html:61 -#: templates/extras/customlink.html:17 templates/extras/eventrule.html:17 -#: templates/extras/savedfilter.html:25 -#: templates/users/objectpermission.html:25 -#: templates/virtualization/vminterface.html:29 users/forms/bulk_edit.py:89 -#: users/forms/filtersets.py:70 users/tables.py:83 -#: virtualization/forms/bulk_edit.py:217 -#: virtualization/forms/filtersets.py:215 +#: 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/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/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 +#: netbox/templates/dcim/interface.html:61 +#: netbox/templates/extras/customlink.html:17 +#: netbox/templates/extras/eventrule.html:17 +#: netbox/templates/extras/savedfilter.html:25 +#: netbox/templates/users/objectpermission.html:25 +#: netbox/templates/virtualization/vminterface.html:29 +#: netbox/users/forms/bulk_edit.py:89 netbox/users/forms/filtersets.py:70 +#: netbox/users/tables.py:83 netbox/virtualization/forms/bulk_edit.py:217 +#: netbox/virtualization/forms/filtersets.py:215 msgid "Enabled" msgstr "Aktiviert" -#: core/forms/bulk_edit.py:34 extras/forms/model_forms.py:285 -#: templates/extras/savedfilter.html:52 vpn/forms/filtersets.py:97 -#: vpn/forms/filtersets.py:127 vpn/forms/filtersets.py:151 -#: vpn/forms/filtersets.py:170 vpn/forms/model_forms.py:301 -#: vpn/forms/model_forms.py:321 vpn/forms/model_forms.py:337 -#: vpn/forms/model_forms.py:357 vpn/forms/model_forms.py:380 +#: netbox/core/forms/bulk_edit.py:34 netbox/extras/forms/model_forms.py:285 +#: 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 msgid "Parameters" msgstr "Parameter" -#: core/forms/bulk_edit.py:38 templates/core/datasource.html:68 +#: netbox/core/forms/bulk_edit.py:38 netbox/templates/core/datasource.html:68 msgid "Ignore rules" msgstr "Regeln ignorieren" -#: core/forms/filtersets.py:30 core/forms/model_forms.py:97 -#: extras/forms/model_forms.py:248 extras/forms/model_forms.py:578 -#: extras/forms/model_forms.py:632 extras/tables/tables.py:191 -#: extras/tables/tables.py:483 extras/tables/tables.py:518 -#: templates/core/datasource.html:31 -#: templates/dcim/device/render_config.html:18 -#: templates/extras/configcontext.html:29 -#: templates/extras/configtemplate.html:21 -#: templates/extras/exporttemplate.html:35 -#: templates/virtualization/virtualmachine/render_config.html:18 +#: netbox/core/forms/filtersets.py: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/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 msgid "Data Source" msgstr "Datenquelle" -#: core/forms/filtersets.py:55 core/forms/mixins.py:21 +#: netbox/core/forms/filtersets.py:55 netbox/core/forms/mixins.py:21 msgid "File" msgstr "Datei" -#: core/forms/filtersets.py:60 core/forms/mixins.py:16 -#: extras/forms/filtersets.py:170 extras/forms/filtersets.py:328 -#: extras/forms/filtersets.py:413 +#: 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 msgid "Data source" msgstr "Datenquelle" -#: core/forms/filtersets.py:70 extras/forms/filtersets.py:440 +#: netbox/core/forms/filtersets.py:70 netbox/extras/forms/filtersets.py:440 msgid "Creation" msgstr "Erstellung" -#: core/forms/filtersets.py:74 core/forms/filtersets.py:160 -#: extras/forms/filtersets.py:461 extras/tables/tables.py:220 -#: extras/tables/tables.py:294 extras/tables/tables.py:326 -#: extras/tables/tables.py:571 templates/core/job.html:38 -#: templates/core/objectchange.html:52 tenancy/tables/contacts.py:90 -#: vpn/tables/l2vpn.py:59 +#: 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/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 +#: netbox/tenancy/tables/contacts.py:90 netbox/vpn/tables/l2vpn.py:59 msgid "Object Type" msgstr "Objekttyp" -#: core/forms/filtersets.py:84 +#: netbox/core/forms/filtersets.py:84 msgid "Created after" msgstr "Erstellt nach" -#: core/forms/filtersets.py:89 +#: netbox/core/forms/filtersets.py:89 msgid "Created before" msgstr "Erstellt vor" -#: core/forms/filtersets.py:94 +#: netbox/core/forms/filtersets.py:94 msgid "Scheduled after" msgstr "Geplant nach" -#: core/forms/filtersets.py:99 +#: netbox/core/forms/filtersets.py:99 msgid "Scheduled before" msgstr "Geplant vor" -#: core/forms/filtersets.py:104 +#: netbox/core/forms/filtersets.py:104 msgid "Started after" msgstr "Begonnen nach" -#: core/forms/filtersets.py:109 +#: netbox/core/forms/filtersets.py:109 msgid "Started before" msgstr "Begonnen vor" -#: core/forms/filtersets.py:114 +#: netbox/core/forms/filtersets.py:114 msgid "Completed after" msgstr "Abgeschlossen nach" -#: core/forms/filtersets.py:119 +#: netbox/core/forms/filtersets.py:119 msgid "Completed before" msgstr "Abgeschlossen vor" -#: core/forms/filtersets.py:126 core/forms/filtersets.py:155 -#: dcim/forms/bulk_edit.py:456 dcim/forms/filtersets.py:418 -#: dcim/forms/filtersets.py:462 dcim/forms/model_forms.py:316 -#: extras/forms/filtersets.py:456 extras/forms/filtersets.py:475 -#: extras/tables/tables.py:302 extras/tables/tables.py:342 -#: templates/core/objectchange.html:36 templates/dcim/rackreservation.html:58 -#: templates/extras/savedfilter.html:21 templates/inc/user_menu.html:33 -#: templates/users/token.html:21 templates/users/user.html:6 -#: templates/users/user.html:14 users/filtersets.py:107 -#: users/filtersets.py:174 users/forms/filtersets.py:84 -#: users/forms/filtersets.py:125 users/forms/model_forms.py:155 -#: users/forms/model_forms.py:192 users/tables.py:19 +#: 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/extras/tables/tables.py:302 netbox/extras/tables/tables.py:342 +#: netbox/templates/core/objectchange.html:36 +#: netbox/templates/dcim/rackreservation.html:58 +#: netbox/templates/extras/savedfilter.html:21 +#: netbox/templates/inc/user_menu.html:33 netbox/templates/users/token.html:21 +#: netbox/templates/users/user.html:6 netbox/templates/users/user.html:14 +#: netbox/users/filtersets.py:107 netbox/users/filtersets.py:174 +#: netbox/users/forms/filtersets.py:84 netbox/users/forms/filtersets.py:125 +#: netbox/users/forms/model_forms.py:155 netbox/users/forms/model_forms.py:192 +#: netbox/users/tables.py:19 msgid "User" msgstr "Nutzer" -#: core/forms/filtersets.py:134 core/tables/change_logging.py:15 -#: extras/tables/tables.py:609 extras/tables/tables.py:646 -#: templates/core/objectchange.html:32 +#: netbox/core/forms/filtersets.py:134 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" -#: core/forms/filtersets.py:139 extras/forms/filtersets.py:445 +#: netbox/core/forms/filtersets.py:139 netbox/extras/forms/filtersets.py:445 msgid "After" msgstr "Nach" -#: core/forms/filtersets.py:144 extras/forms/filtersets.py:450 +#: netbox/core/forms/filtersets.py:144 netbox/extras/forms/filtersets.py:450 msgid "Before" msgstr "Vorher" -#: core/forms/filtersets.py:148 core/tables/change_logging.py:29 -#: extras/forms/model_forms.py:396 templates/core/objectchange.html:46 -#: templates/extras/eventrule.html:71 +#: netbox/core/forms/filtersets.py:148 netbox/core/tables/change_logging.py:29 +#: netbox/extras/forms/model_forms.py:396 +#: netbox/templates/core/objectchange.html:46 +#: netbox/templates/extras/eventrule.html:71 msgid "Action" msgstr "Aktion" -#: core/forms/model_forms.py:54 core/tables/data.py:46 -#: templates/core/datafile.html:27 templates/extras/report/base.html:33 -#: templates/extras/script/base.html:32 +#: netbox/core/forms/model_forms.py:54 netbox/core/tables/data.py:46 +#: netbox/templates/core/datafile.html:27 +#: netbox/templates/extras/report/base.html:33 +#: netbox/templates/extras/script/base.html:32 msgid "Source" msgstr "Quelle" -#: core/forms/model_forms.py:58 +#: netbox/core/forms/model_forms.py:58 msgid "Backend Parameters" msgstr "Backendparameter" -#: core/forms/model_forms.py:96 +#: netbox/core/forms/model_forms.py:96 msgid "File Upload" msgstr "Datei hochladen" -#: core/forms/model_forms.py:108 +#: netbox/core/forms/model_forms.py:108 msgid "Cannot upload a file and sync from an existing file" msgstr "" "Eine Datei kann nicht hochgeladen und aus einer vorhandenen Datei " "synchronisiert werden" -#: core/forms/model_forms.py:110 +#: netbox/core/forms/model_forms.py:110 msgid "Must upload a file or select a data file to sync" msgstr "" "Lade eine Datei hoch oder wähle eine Datendatei zur Synchronisierung aus" -#: core/forms/model_forms.py:153 templates/dcim/rack_elevation_list.html:6 +#: netbox/core/forms/model_forms.py:153 +#: netbox/templates/dcim/rack_elevation_list.html:6 msgid "Rack Elevations" msgstr "Rackübersichten" -#: core/forms/model_forms.py:157 dcim/choices.py:1518 -#: dcim/forms/bulk_edit.py:969 dcim/forms/bulk_edit.py:1357 -#: dcim/forms/bulk_edit.py:1375 dcim/tables/racks.py:158 -#: netbox/navigation/menu.py:291 netbox/navigation/menu.py:295 +#: 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 msgid "Power" msgstr "Stromversorgung" -#: core/forms/model_forms.py:159 netbox/navigation/menu.py:154 -#: templates/core/inc/config_data.html:37 +#: netbox/core/forms/model_forms.py:159 netbox/netbox/navigation/menu.py:154 +#: netbox/templates/core/inc/config_data.html:37 msgid "IPAM" msgstr "IPAM" -#: core/forms/model_forms.py:160 netbox/navigation/menu.py:230 -#: templates/core/inc/config_data.html:50 vpn/forms/bulk_edit.py:77 -#: vpn/forms/filtersets.py:43 vpn/forms/model_forms.py:61 -#: vpn/forms/model_forms.py:146 +#: netbox/core/forms/model_forms.py:160 netbox/netbox/navigation/menu.py:230 +#: netbox/templates/core/inc/config_data.html:50 +#: netbox/vpn/forms/bulk_edit.py:77 netbox/vpn/forms/filtersets.py:43 +#: netbox/vpn/forms/model_forms.py:61 netbox/vpn/forms/model_forms.py:146 msgid "Security" msgstr "Sicherheit" -#: core/forms/model_forms.py:161 templates/core/inc/config_data.html:59 +#: netbox/core/forms/model_forms.py:161 +#: netbox/templates/core/inc/config_data.html:59 msgid "Banners" msgstr "Banner" -#: core/forms/model_forms.py:162 templates/core/inc/config_data.html:80 +#: netbox/core/forms/model_forms.py:162 +#: netbox/templates/core/inc/config_data.html:80 msgid "Pagination" msgstr "Seitenumbruch" -#: core/forms/model_forms.py:163 extras/forms/bulk_edit.py:92 -#: extras/forms/filtersets.py:47 extras/forms/model_forms.py:116 -#: extras/forms/model_forms.py:129 templates/core/inc/config_data.html:93 +#: 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/model_forms.py:129 +#: netbox/templates/core/inc/config_data.html:93 msgid "Validation" msgstr "Validierung" -#: core/forms/model_forms.py:164 templates/account/preferences.html:6 +#: netbox/core/forms/model_forms.py:164 +#: netbox/templates/account/preferences.html:6 msgid "User Preferences" msgstr "Benutzereinstellungen" -#: core/forms/model_forms.py:167 dcim/forms/filtersets.py:732 -#: templates/core/inc/config_data.html:127 users/forms/model_forms.py:64 +#: netbox/core/forms/model_forms.py:167 netbox/dcim/forms/filtersets.py:732 +#: netbox/templates/core/inc/config_data.html:127 +#: netbox/users/forms/model_forms.py:64 msgid "Miscellaneous" msgstr "Diverses" -#: core/forms/model_forms.py:169 +#: netbox/core/forms/model_forms.py:169 msgid "Config Revision" msgstr "Konfigurationsverlauf" -#: core/forms/model_forms.py:208 +#: netbox/core/forms/model_forms.py:208 msgid "This parameter has been defined statically and cannot be modified." msgstr "" "Dieser Parameter wurde statisch definiert und kann nicht geändert werden." -#: core/forms/model_forms.py:216 +#: netbox/core/forms/model_forms.py:216 #, python-brace-format msgid "Current value: {value}" msgstr "Aktueller Wert: {value}" -#: core/forms/model_forms.py:218 +#: netbox/core/forms/model_forms.py:218 msgid " (default)" msgstr " (Standard)" -#: core/models/change_logging.py:29 +#: netbox/core/models/change_logging.py:29 msgid "time" msgstr "Zeit" -#: core/models/change_logging.py:42 +#: netbox/core/models/change_logging.py:42 msgid "user name" msgstr "Benutzername" -#: core/models/change_logging.py:47 +#: netbox/core/models/change_logging.py:47 msgid "request ID" msgstr "Anfrage-ID" -#: core/models/change_logging.py:52 extras/models/staging.py:69 +#: netbox/core/models/change_logging.py:52 netbox/extras/models/staging.py:69 msgid "action" msgstr "Aktion" -#: core/models/change_logging.py:86 +#: netbox/core/models/change_logging.py:86 msgid "pre-change data" msgstr "Daten vor der Änderung" -#: core/models/change_logging.py:92 +#: netbox/core/models/change_logging.py:92 msgid "post-change data" msgstr "Daten nach der Änderung" -#: core/models/change_logging.py:106 +#: netbox/core/models/change_logging.py:106 msgid "object change" msgstr "Objekt ändern" -#: core/models/change_logging.py:107 +#: netbox/core/models/change_logging.py:107 msgid "object changes" msgstr "Objektänderungen" -#: core/models/change_logging.py:123 +#: netbox/core/models/change_logging.py:123 #, python-brace-format msgid "Change logging is not supported for this object type ({type})." msgstr "" "Die Änderungsprotokollierung wird für diesen Objekttyp nicht unterstützt " "({type})." -#: core/models/config.py:18 core/models/data.py:266 core/models/files.py:27 -#: core/models/jobs.py:49 extras/models/models.py:730 -#: extras/models/notifications.py:39 extras/models/notifications.py:186 -#: netbox/models/features.py:53 users/models/tokens.py:32 +#: netbox/core/models/config.py:18 netbox/core/models/data.py:266 +#: 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/notifications.py:186 +#: netbox/netbox/models/features.py:53 netbox/users/models/tokens.py:32 msgid "created" msgstr "erstellt" -#: core/models/config.py:22 +#: netbox/core/models/config.py:22 msgid "comment" msgstr "Kommentar" -#: core/models/config.py:29 +#: netbox/core/models/config.py:29 msgid "configuration data" msgstr "Konfigurationsdaten" -#: core/models/config.py:36 +#: netbox/core/models/config.py:36 msgid "config revision" msgstr "Konfigurationsrevisionen" -#: core/models/config.py:37 +#: netbox/core/models/config.py:37 msgid "config revisions" msgstr "Konfigurationsrevisionen" -#: core/models/config.py:41 +#: netbox/core/models/config.py:41 msgid "Default configuration" msgstr "Standardkonfiguration" -#: core/models/config.py:43 +#: netbox/core/models/config.py:43 msgid "Current configuration" msgstr "Aktuelle Konfiguration" -#: core/models/config.py:44 +#: netbox/core/models/config.py:44 #, python-brace-format msgid "Config revision #{id}" msgstr "Konfigurationsrevision #{id}" -#: core/models/data.py:44 dcim/models/cables.py:43 -#: dcim/models/device_component_templates.py:203 -#: dcim/models/device_component_templates.py:237 -#: dcim/models/device_component_templates.py:272 -#: dcim/models/device_component_templates.py:334 -#: dcim/models/device_component_templates.py:413 -#: dcim/models/device_component_templates.py:512 -#: dcim/models/device_component_templates.py:612 -#: dcim/models/device_components.py:283 dcim/models/device_components.py:312 -#: dcim/models/device_components.py:345 dcim/models/device_components.py:463 -#: dcim/models/device_components.py:605 dcim/models/device_components.py:970 -#: dcim/models/device_components.py:1044 dcim/models/power.py:102 -#: extras/models/customfields.py:78 extras/models/search.py:41 -#: virtualization/models/clusters.py:61 vpn/models/l2vpn.py:32 +#: 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/extras/models/search.py:41 +#: netbox/virtualization/models/clusters.py:61 netbox/vpn/models/l2vpn.py:32 msgid "type" msgstr "Typ" -#: core/models/data.py:49 extras/choices.py:37 extras/models/models.py:164 -#: extras/tables/tables.py:656 templates/core/datasource.html:58 -#: templates/core/plugin.html:66 +#: netbox/core/models/data.py:49 netbox/extras/choices.py:37 +#: netbox/extras/models/models.py:164 netbox/extras/tables/tables.py:656 +#: netbox/templates/core/datasource.html:58 +#: netbox/templates/core/plugin.html:66 msgid "URL" msgstr "URL" -#: core/models/data.py:59 dcim/models/device_component_templates.py:418 -#: dcim/models/device_components.py:512 extras/models/models.py:70 -#: extras/models/models.py:301 extras/models/models.py:526 -#: users/models/permissions.py:29 +#: netbox/core/models/data.py:59 +#: netbox/dcim/models/device_component_templates.py:418 +#: netbox/dcim/models/device_components.py:512 +#: 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" msgstr "aktiviert" -#: core/models/data.py:63 +#: netbox/core/models/data.py:63 msgid "ignore rules" msgstr "Regeln ignorieren" -#: core/models/data.py:65 +#: netbox/core/models/data.py:65 msgid "Patterns (one per line) matching files to ignore when syncing" msgstr "" "Muster (eines pro Zeile), welche Dateien entsprechen, die beim " "Synchronisieren ignoriert werden sollen" -#: core/models/data.py:68 extras/models/models.py:534 +#: netbox/core/models/data.py:68 netbox/extras/models/models.py:534 msgid "parameters" msgstr "Parameter" -#: core/models/data.py:73 +#: netbox/core/models/data.py:73 msgid "last synced" msgstr "zuletzt synchronisiert" -#: core/models/data.py:81 +#: netbox/core/models/data.py:81 msgid "data source" msgstr "Datenquelle" -#: core/models/data.py:82 +#: netbox/core/models/data.py:82 msgid "data sources" msgstr "Datenquellen" -#: core/models/data.py:122 +#: netbox/core/models/data.py:122 #, python-brace-format msgid "Unknown backend type: {type}" msgstr "Unbekannter Backendtyp: {type}" -#: core/models/data.py:164 +#: netbox/core/models/data.py:164 msgid "Cannot initiate sync; syncing already in progress." msgstr "Synchronisierung kann nicht initiiert werden: Läuft bereits." -#: core/models/data.py:177 +#: netbox/core/models/data.py:177 msgid "" "There was an error initializing the backend. A dependency needs to be " "installed: " @@ -1906,1224 +2173,1286 @@ msgstr "" "Beim Initialisieren des Backends ist ein Fehler aufgetreten. Eine " "Abhängigkeit muss installiert werden: " -#: core/models/data.py:270 core/models/files.py:31 -#: netbox/models/features.py:59 +#: netbox/core/models/data.py:270 netbox/core/models/files.py:31 +#: netbox/netbox/models/features.py:59 msgid "last updated" msgstr "zuletzt aktualisiert" -#: core/models/data.py:280 dcim/models/cables.py:444 +#: netbox/core/models/data.py:280 netbox/dcim/models/cables.py:444 msgid "path" msgstr "Pfad" -#: core/models/data.py:283 +#: netbox/core/models/data.py:283 msgid "File path relative to the data source's root" msgstr "Dateipfad relativ zum Stammverzeichnis des Daten Verzeichnisses" -#: core/models/data.py:287 ipam/models/ip.py:503 +#: netbox/core/models/data.py:287 netbox/ipam/models/ip.py:503 msgid "size" msgstr "Größe" -#: core/models/data.py:290 +#: netbox/core/models/data.py:290 msgid "hash" msgstr "Prüfsumme" -#: core/models/data.py:294 +#: netbox/core/models/data.py:294 msgid "Length must be 64 hexadecimal characters." msgstr "Die Länge muss 64 Hexadezimalzeichen betragen." -#: core/models/data.py:296 +#: netbox/core/models/data.py:296 msgid "SHA256 hash of the file data" msgstr "SHA256-Hash des Dateiinhalts" -#: core/models/data.py:313 +#: netbox/core/models/data.py:313 msgid "data file" msgstr "Datendatei" -#: core/models/data.py:314 +#: netbox/core/models/data.py:314 msgid "data files" msgstr "Datendateien" -#: core/models/data.py:401 +#: netbox/core/models/data.py:401 msgid "auto sync record" msgstr "Auto-Sync-Aufnahme" -#: core/models/data.py:402 +#: netbox/core/models/data.py:402 msgid "auto sync records" msgstr "Auto-Sync-Aufnahmen" -#: core/models/files.py:37 +#: netbox/core/models/files.py:37 msgid "file root" msgstr "Stammverzeichnis der Datei" -#: core/models/files.py:42 +#: netbox/core/models/files.py:42 msgid "file path" msgstr "Dateipfad" -#: core/models/files.py:44 +#: netbox/core/models/files.py:44 msgid "File path relative to the designated root path" msgstr "Dateipfad relativ zum angegebenen Stammpfad" -#: core/models/files.py:61 +#: netbox/core/models/files.py:61 msgid "managed file" msgstr "verwaltete Datei" -#: core/models/files.py:62 +#: netbox/core/models/files.py:62 msgid "managed files" msgstr "verwaltete Dateien" -#: core/models/jobs.py:53 +#: netbox/core/models/jobs.py:54 msgid "scheduled" msgstr "geplant" -#: core/models/jobs.py:58 +#: netbox/core/models/jobs.py:59 msgid "interval" msgstr "Intervall" -#: core/models/jobs.py:64 +#: netbox/core/models/jobs.py:65 msgid "Recurrence interval (in minutes)" msgstr "Wiederholungsintervall (in Minuten)" -#: core/models/jobs.py:67 +#: netbox/core/models/jobs.py:68 msgid "started" msgstr "gestartet" -#: core/models/jobs.py:72 +#: netbox/core/models/jobs.py:73 msgid "completed" msgstr "abgeschlossen" -#: core/models/jobs.py:90 extras/models/models.py:101 -#: extras/models/staging.py:87 +#: netbox/core/models/jobs.py:91 netbox/extras/models/models.py:101 +#: netbox/extras/models/staging.py:87 msgid "data" msgstr "Daten" -#: core/models/jobs.py:95 +#: netbox/core/models/jobs.py:96 msgid "error" msgstr "Fehler" -#: core/models/jobs.py:100 +#: netbox/core/models/jobs.py:101 msgid "job ID" msgstr "Job-ID" -#: core/models/jobs.py:111 +#: netbox/core/models/jobs.py:112 msgid "job" msgstr "Job" -#: core/models/jobs.py:112 +#: netbox/core/models/jobs.py:113 msgid "jobs" msgstr "Jobs" -#: core/models/jobs.py:135 +#: netbox/core/models/jobs.py:136 #, python-brace-format msgid "Jobs cannot be assigned to this object type ({type})." msgstr "Jobs können diesem Objekttyp nicht zugewiesen werden ({type})." -#: core/models/jobs.py:185 +#: netbox/core/models/jobs.py:190 #, python-brace-format msgid "Invalid status for job termination. Choices are: {choices}" msgstr "" "Ungültiger Status für die Beendigung des Jobs. Es stehen folgende Optionen " "zur Auswahl: {choices}" -#: core/models/jobs.py:216 +#: netbox/core/models/jobs.py:221 msgid "" "enqueue() cannot be called with values for both schedule_at and immediate." msgstr "" "enqueue () kann nicht mit Werten sowohl für schedule_at als auch für " "immediate aufgerufen werden." -#: core/signals.py:126 +#: netbox/core/signals.py:126 #, python-brace-format msgid "Deletion is prevented by a protection rule: {message}" msgstr "Das Löschen wird durch eine Schutzregel verhindert: {message}" -#: core/tables/change_logging.py:25 templates/account/profile.html:19 -#: templates/users/user.html:21 +#: netbox/core/tables/change_logging.py:25 +#: netbox/templates/account/profile.html:19 +#: netbox/templates/users/user.html:21 msgid "Full Name" msgstr "Vollständiger Name" -#: core/tables/change_logging.py:37 core/tables/jobs.py:21 -#: extras/choices.py:41 extras/tables/tables.py:279 -#: extras/tables/tables.py:297 extras/tables/tables.py:329 -#: extras/tables/tables.py:409 extras/tables/tables.py:470 -#: extras/tables/tables.py:576 extras/tables/tables.py:616 -#: extras/tables/tables.py:653 netbox/tables/tables.py:244 -#: templates/core/objectchange.html:58 templates/extras/eventrule.html:78 -#: templates/extras/journalentry.html:18 tenancy/tables/contacts.py:93 -#: vpn/tables/l2vpn.py:64 +#: netbox/core/tables/change_logging.py:37 netbox/core/tables/jobs.py:21 +#: netbox/extras/choices.py:41 netbox/extras/tables/tables.py:279 +#: 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/templates/core/objectchange.html:58 +#: netbox/templates/extras/eventrule.html:78 +#: netbox/templates/extras/journalentry.html:18 +#: netbox/tenancy/tables/contacts.py:93 netbox/vpn/tables/l2vpn.py:64 msgid "Object" msgstr "Objekt" -#: core/tables/change_logging.py:42 templates/core/objectchange.html:68 +#: netbox/core/tables/change_logging.py:42 +#: netbox/templates/core/objectchange.html:68 msgid "Request ID" msgstr "Anfragen-ID" -#: core/tables/config.py:21 users/forms/filtersets.py:44 users/tables.py:39 +#: netbox/core/tables/config.py:21 netbox/users/forms/filtersets.py:44 +#: netbox/users/tables.py:39 msgid "Is Active" msgstr "Ist aktiv" -#: core/tables/data.py:50 templates/core/datafile.html:31 +#: netbox/core/tables/data.py:50 netbox/templates/core/datafile.html:31 msgid "Path" msgstr "Pfad" -#: core/tables/data.py:54 templates/extras/inc/result_pending.html:7 +#: netbox/core/tables/data.py:54 +#: netbox/templates/extras/inc/result_pending.html:7 msgid "Last updated" msgstr "Letzte Aktualisierung" -#: core/tables/jobs.py:10 core/tables/tasks.py:76 -#: dcim/tables/devicetypes.py:164 extras/tables/tables.py:216 -#: extras/tables/tables.py:460 netbox/tables/tables.py:189 -#: templates/dcim/virtualchassis_edit.html:52 utilities/forms/forms.py:73 -#: wireless/tables/wirelesslink.py:17 +#: 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/templates/dcim/virtualchassis_edit.html:52 +#: netbox/utilities/forms/forms.py:73 +#: netbox/wireless/tables/wirelesslink.py:17 msgid "ID" msgstr "ID" -#: core/tables/jobs.py:35 +#: netbox/core/tables/jobs.py:35 msgid "Interval" msgstr "Intervall" -#: core/tables/plugins.py:14 templates/vpn/ipsecprofile.html:44 -#: vpn/forms/bulk_edit.py:141 vpn/forms/bulk_import.py:172 -#: vpn/tables/crypto.py:61 +#: netbox/core/tables/plugins.py:14 netbox/templates/vpn/ipsecprofile.html:44 +#: netbox/vpn/forms/bulk_edit.py:141 netbox/vpn/forms/bulk_import.py:172 +#: netbox/vpn/tables/crypto.py:61 msgid "Version" msgstr "Version" -#: core/tables/plugins.py:19 templates/core/datafile.html:38 +#: netbox/core/tables/plugins.py:19 netbox/templates/core/datafile.html:38 msgid "Last Updated" msgstr "Zuletzt aktualisiert" -#: core/tables/plugins.py:23 +#: netbox/core/tables/plugins.py:23 msgid "Minimum NetBox Version" msgstr "Minimale Netbox-Version" -#: core/tables/plugins.py:27 +#: netbox/core/tables/plugins.py:27 msgid "Maximum NetBox Version" msgstr "Maximale NetBox-Version" -#: core/tables/plugins.py:31 core/tables/plugins.py:74 +#: netbox/core/tables/plugins.py:31 netbox/core/tables/plugins.py:74 msgid "No plugin data found" msgstr "Keine Plugin-Daten gefunden" -#: core/tables/plugins.py:48 templates/core/plugin.html:62 +#: netbox/core/tables/plugins.py:48 netbox/templates/core/plugin.html:62 msgid "Author" msgstr "Autor" -#: core/tables/plugins.py:54 +#: netbox/core/tables/plugins.py:54 msgid "Installed" msgstr "Installiert" -#: core/tables/plugins.py:57 templates/core/plugin.html:84 +#: netbox/core/tables/plugins.py:57 netbox/templates/core/plugin.html:84 msgid "Certified" msgstr "Zertifiziert" -#: core/tables/plugins.py:60 +#: netbox/core/tables/plugins.py:60 msgid "Published" msgstr "Veröffentlicht" -#: core/tables/plugins.py:66 +#: netbox/core/tables/plugins.py:66 msgid "Installed Version" msgstr "Installierte Version" -#: core/tables/plugins.py:70 +#: netbox/core/tables/plugins.py:70 msgid "Latest Version" msgstr "Neuste Version" -#: core/tables/tasks.py:18 +#: netbox/core/tables/tasks.py:18 msgid "Oldest Task" msgstr "Älteste Aufgabe" -#: core/tables/tasks.py:42 templates/core/rq_worker_list.html:39 +#: netbox/core/tables/tasks.py:42 netbox/templates/core/rq_worker_list.html:39 msgid "Workers" msgstr "Arbeiter" -#: core/tables/tasks.py:46 vpn/tables/tunnels.py:88 +#: netbox/core/tables/tasks.py:46 netbox/vpn/tables/tunnels.py:88 msgid "Host" msgstr "Host" -#: core/tables/tasks.py:50 ipam/forms/filtersets.py:535 +#: netbox/core/tables/tasks.py:50 netbox/ipam/forms/filtersets.py:535 msgid "Port" msgstr "Port" -#: core/tables/tasks.py:54 +#: netbox/core/tables/tasks.py:54 msgid "DB" msgstr "DB" -#: core/tables/tasks.py:58 +#: netbox/core/tables/tasks.py:58 msgid "Scheduler PID" msgstr "Scheduler-PID" -#: core/tables/tasks.py:62 +#: netbox/core/tables/tasks.py:62 msgid "No queues found" msgstr "Keine Warteschlangen gefunden" -#: core/tables/tasks.py:82 +#: netbox/core/tables/tasks.py:82 msgid "Enqueued" msgstr "In Warteschlange eingereiht" -#: core/tables/tasks.py:85 +#: netbox/core/tables/tasks.py:85 msgid "Ended" msgstr "Beendet" -#: core/tables/tasks.py:93 templates/core/rq_task.html:85 +#: netbox/core/tables/tasks.py:93 netbox/templates/core/rq_task.html:85 msgid "Callable" msgstr "Abrufbar" -#: core/tables/tasks.py:97 +#: netbox/core/tables/tasks.py:97 msgid "No tasks found" msgstr "Keine Aufgaben gefunden" -#: core/tables/tasks.py:118 templates/core/rq_worker.html:47 +#: netbox/core/tables/tasks.py:118 netbox/templates/core/rq_worker.html:47 msgid "State" msgstr "Zustand" -#: core/tables/tasks.py:121 templates/core/rq_worker.html:51 +#: netbox/core/tables/tasks.py:121 netbox/templates/core/rq_worker.html:51 msgid "Birth" msgstr "Geburt" -#: core/tables/tasks.py:124 templates/core/rq_worker.html:59 +#: netbox/core/tables/tasks.py:124 netbox/templates/core/rq_worker.html:59 msgid "PID" msgstr "PID" -#: core/tables/tasks.py:128 +#: netbox/core/tables/tasks.py:128 msgid "No workers found" msgstr "Kein Job gefunden" -#: core/views.py:90 +#: netbox/core/views.py:90 #, python-brace-format msgid "Queued job #{id} to sync {datasource}" msgstr "Warteschlangen Job {id}beim Synchronisieren {datasource}" -#: core/views.py:319 +#: netbox/core/views.py:319 #, python-brace-format msgid "Restored configuration revision #{id}" msgstr "Wiederhergestellte Konfigurationsrevision # {id}" -#: core/views.py:412 core/views.py:455 core/views.py:531 +#: 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 "Job{job_id} nicht gefunden" -#: core/views.py:463 +#: netbox/core/views.py:463 #, python-brace-format msgid "Job {id} has been deleted." msgstr "Job {id}wurde gelöscht" -#: core/views.py:465 +#: netbox/core/views.py:465 #, python-brace-format msgid "Error deleting job {id}: {error}" msgstr "Fehler beim Job löschen {id}: {error}" -#: core/views.py:478 core/views.py:496 +#: netbox/core/views.py:478 netbox/core/views.py:496 #, python-brace-format msgid "Job {id} not found." msgstr "Job {id}nicht gefunden" -#: core/views.py:484 +#: netbox/core/views.py:484 #, python-brace-format msgid "Job {id} has been re-enqueued." msgstr "Job {id}erneut in Warteschlange eingereiht" -#: core/views.py:519 +#: netbox/core/views.py:519 #, python-brace-format msgid "Job {id} has been enqueued." msgstr "Job {id}in Warteschlange eingereiht" -#: core/views.py:538 +#: netbox/core/views.py:538 #, python-brace-format msgid "Job {id} has been stopped." msgstr "Job {id}wurde gestoppt" -#: core/views.py:540 +#: netbox/core/views.py:540 #, python-brace-format msgid "Failed to stop job {id}" msgstr "Fehler beim Stoppen des Job {id}" -#: core/views.py:678 +#: netbox/core/views.py:674 msgid "Plugins catalog could not be loaded" msgstr "Der Plugin-Katalog konnte nicht geladen werden" -#: core/views.py:712 +#: netbox/core/views.py:708 #, python-brace-format msgid "Plugin {name} not found" msgstr "Plugin {name} nicht gefunden" -#: dcim/api/serializers_/devices.py:49 dcim/api/serializers_/devicetypes.py:25 +#: netbox/dcim/api/serializers_/devices.py:49 +#: netbox/dcim/api/serializers_/devicetypes.py:25 msgid "Position (U)" msgstr "Position (HE)" -#: dcim/api/serializers_/racks.py:112 templates/dcim/rack.html:28 +#: netbox/dcim/api/serializers_/racks.py:112 +#: netbox/templates/dcim/rack.html:28 msgid "Facility ID" msgstr "Einrichtungs-ID" -#: dcim/choices.py:21 virtualization/choices.py:21 +#: netbox/dcim/choices.py:21 netbox/virtualization/choices.py:21 msgid "Staging" msgstr "Bereitstellung" -#: dcim/choices.py:23 dcim/choices.py:189 dcim/choices.py:240 -#: dcim/choices.py:1531 virtualization/choices.py:23 -#: virtualization/choices.py:48 +#: 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 msgid "Decommissioning" msgstr "Außerbetriebnahme" -#: dcim/choices.py:24 +#: netbox/dcim/choices.py:24 msgid "Retired" msgstr "Ausser Dienst" -#: dcim/choices.py:65 +#: netbox/dcim/choices.py:65 msgid "2-post frame" msgstr "Rahmengestell mit 2 Montageschienen" -#: dcim/choices.py:66 +#: netbox/dcim/choices.py:66 msgid "4-post frame" msgstr "Rahmengestell mit 4 Montageschienen" -#: dcim/choices.py:67 +#: netbox/dcim/choices.py:67 msgid "4-post cabinet" msgstr "Schrank mit 4 Montageschienen" -#: dcim/choices.py:68 +#: netbox/dcim/choices.py:68 msgid "Wall-mounted frame" msgstr "Wandhalterung" -#: dcim/choices.py:69 +#: netbox/dcim/choices.py:69 msgid "Wall-mounted frame (vertical)" msgstr "Wandhalterung (hochkant)" -#: dcim/choices.py:70 +#: netbox/dcim/choices.py:70 msgid "Wall-mounted cabinet" msgstr "Wandschrank" -#: dcim/choices.py:71 +#: netbox/dcim/choices.py:71 msgid "Wall-mounted cabinet (vertical)" msgstr "Wandschrank (hochkant)" -#: dcim/choices.py:83 dcim/choices.py:84 dcim/choices.py:85 dcim/choices.py:86 +#: netbox/dcim/choices.py:83 netbox/dcim/choices.py:84 +#: netbox/dcim/choices.py:85 netbox/dcim/choices.py:86 #, python-brace-format msgid "{n} inches" msgstr "{n} Zoll" -#: dcim/choices.py:100 ipam/choices.py:32 ipam/choices.py:50 -#: ipam/choices.py:70 ipam/choices.py:155 wireless/choices.py:26 +#: netbox/dcim/choices.py:100 netbox/ipam/choices.py:32 +#: netbox/ipam/choices.py:50 netbox/ipam/choices.py:70 +#: netbox/ipam/choices.py:155 netbox/wireless/choices.py:26 msgid "Reserved" msgstr "Reserviert" -#: dcim/choices.py:101 templates/dcim/device.html:259 +#: netbox/dcim/choices.py:101 netbox/templates/dcim/device.html:259 msgid "Available" msgstr "Verfügbar" -#: dcim/choices.py:104 ipam/choices.py:33 ipam/choices.py:51 -#: ipam/choices.py:71 ipam/choices.py:156 wireless/choices.py:28 +#: netbox/dcim/choices.py:104 netbox/ipam/choices.py:33 +#: netbox/ipam/choices.py:51 netbox/ipam/choices.py:71 +#: netbox/ipam/choices.py:156 netbox/wireless/choices.py:28 msgid "Deprecated" msgstr "Veraltet" -#: dcim/choices.py:114 templates/dcim/inc/panels/racktype_dimensions.html:41 +#: netbox/dcim/choices.py:114 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:41 msgid "Millimeters" msgstr "Millimeter" -#: dcim/choices.py:115 dcim/choices.py:1553 +#: netbox/dcim/choices.py:115 netbox/dcim/choices.py:1555 msgid "Inches" msgstr "Zoll" -#: dcim/choices.py:136 dcim/choices.py:207 dcim/choices.py:254 +#: netbox/dcim/choices.py:136 netbox/dcim/choices.py:207 +#: netbox/dcim/choices.py:254 msgid "Front to rear" msgstr "Front- zu Rückseite" -#: dcim/choices.py:137 dcim/choices.py:208 dcim/choices.py:255 +#: netbox/dcim/choices.py:137 netbox/dcim/choices.py:208 +#: netbox/dcim/choices.py:255 msgid "Rear to front" msgstr "Rück- zu Frontseite" -#: dcim/choices.py:151 dcim/forms/bulk_edit.py:68 dcim/forms/bulk_edit.py:87 -#: dcim/forms/bulk_edit.py:173 dcim/forms/bulk_edit.py:1405 -#: dcim/forms/bulk_import.py:60 dcim/forms/bulk_import.py:74 -#: dcim/forms/bulk_import.py:137 dcim/forms/bulk_import.py:566 -#: dcim/forms/bulk_import.py:833 dcim/forms/bulk_import.py:1088 -#: dcim/forms/filtersets.py:234 dcim/forms/model_forms.py:74 -#: dcim/forms/model_forms.py:93 dcim/forms/model_forms.py:170 -#: dcim/forms/model_forms.py:1062 dcim/forms/model_forms.py:1502 -#: dcim/forms/object_import.py:176 dcim/tables/devices.py:656 -#: dcim/tables/devices.py:869 dcim/tables/devices.py:954 -#: extras/tables/tables.py:223 ipam/tables/fhrp.py:59 ipam/tables/ip.py:378 -#: ipam/tables/services.py:44 templates/dcim/interface.html:102 -#: templates/dcim/interface.html:309 templates/dcim/location.html:41 -#: templates/dcim/region.html:37 templates/dcim/sitegroup.html:37 -#: templates/ipam/service.html:28 templates/tenancy/contactgroup.html:29 -#: templates/tenancy/tenantgroup.html:37 -#: templates/virtualization/vminterface.html:39 -#: templates/wireless/wirelesslangroup.html:37 tenancy/forms/bulk_edit.py:27 -#: tenancy/forms/bulk_edit.py:61 tenancy/forms/bulk_import.py:24 -#: tenancy/forms/bulk_import.py:58 tenancy/forms/model_forms.py:25 -#: tenancy/forms/model_forms.py:68 virtualization/forms/bulk_edit.py:207 -#: virtualization/forms/bulk_import.py:151 -#: virtualization/tables/virtualmachines.py:162 wireless/forms/bulk_edit.py:24 -#: wireless/forms/bulk_import.py:21 wireless/forms/model_forms.py:21 +#: 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/templates/dcim/location.html:41 netbox/templates/dcim/region.html:37 +#: netbox/templates/dcim/sitegroup.html:37 +#: netbox/templates/ipam/service.html:28 +#: netbox/templates/tenancy/contactgroup.html:29 +#: netbox/templates/tenancy/tenantgroup.html:37 +#: netbox/templates/virtualization/vminterface.html:39 +#: netbox/templates/wireless/wirelesslangroup.html:37 +#: netbox/tenancy/forms/bulk_edit.py:27 netbox/tenancy/forms/bulk_edit.py:61 +#: netbox/tenancy/forms/bulk_import.py:24 +#: netbox/tenancy/forms/bulk_import.py:58 +#: netbox/tenancy/forms/model_forms.py:25 +#: netbox/tenancy/forms/model_forms.py:68 +#: netbox/virtualization/forms/bulk_edit.py:207 +#: netbox/virtualization/forms/bulk_import.py:151 +#: netbox/virtualization/tables/virtualmachines.py:162 +#: netbox/wireless/forms/bulk_edit.py:24 +#: netbox/wireless/forms/bulk_import.py:21 +#: netbox/wireless/forms/model_forms.py:21 msgid "Parent" msgstr "Übergeordnet" -#: dcim/choices.py:152 +#: netbox/dcim/choices.py:152 msgid "Child" msgstr "Untergeordnet" -#: dcim/choices.py:166 templates/dcim/device.html:340 -#: templates/dcim/rack.html:133 templates/dcim/rack_elevation_list.html:20 -#: templates/dcim/rackreservation.html:76 +#: netbox/dcim/choices.py:166 netbox/templates/dcim/device.html:340 +#: netbox/templates/dcim/rack.html:133 +#: netbox/templates/dcim/rack_elevation_list.html:20 +#: netbox/templates/dcim/rackreservation.html:76 msgid "Front" msgstr "Frontseite" -#: dcim/choices.py:167 templates/dcim/device.html:346 -#: templates/dcim/rack.html:139 templates/dcim/rack_elevation_list.html:21 -#: templates/dcim/rackreservation.html:82 +#: netbox/dcim/choices.py:167 netbox/templates/dcim/device.html:346 +#: netbox/templates/dcim/rack.html:139 +#: netbox/templates/dcim/rack_elevation_list.html:21 +#: netbox/templates/dcim/rackreservation.html:82 msgid "Rear" msgstr "Rückseite" -#: dcim/choices.py:186 dcim/choices.py:238 virtualization/choices.py:46 +#: netbox/dcim/choices.py:186 netbox/dcim/choices.py:238 +#: netbox/virtualization/choices.py:46 msgid "Staged" msgstr "Vorbereitet" -#: dcim/choices.py:188 +#: netbox/dcim/choices.py:188 msgid "Inventory" msgstr "Inventar" -#: dcim/choices.py:209 dcim/choices.py:256 +#: netbox/dcim/choices.py:209 netbox/dcim/choices.py:256 msgid "Left to right" msgstr "Links nach rechts" -#: dcim/choices.py:210 dcim/choices.py:257 +#: netbox/dcim/choices.py:210 netbox/dcim/choices.py:257 msgid "Right to left" msgstr "Rechts nach links" -#: dcim/choices.py:211 dcim/choices.py:258 +#: netbox/dcim/choices.py:211 netbox/dcim/choices.py:258 msgid "Side to rear" msgstr "Seite nach hinten" -#: dcim/choices.py:212 +#: netbox/dcim/choices.py:212 msgid "Rear to side" msgstr "Von hinten zur Seite" -#: dcim/choices.py:213 +#: netbox/dcim/choices.py:213 msgid "Bottom to top" msgstr "Von unten nach oben" -#: dcim/choices.py:214 +#: netbox/dcim/choices.py:214 msgid "Top to bottom" msgstr "Von oben nach unten" -#: dcim/choices.py:215 dcim/choices.py:259 dcim/choices.py:1303 +#: netbox/dcim/choices.py:215 netbox/dcim/choices.py:259 +#: netbox/dcim/choices.py:1305 msgid "Passive" msgstr "Passiv" -#: dcim/choices.py:216 +#: netbox/dcim/choices.py:216 msgid "Mixed" msgstr "Gemischt" -#: dcim/choices.py:484 dcim/choices.py:733 +#: netbox/dcim/choices.py:484 netbox/dcim/choices.py:733 msgid "NEMA (Non-locking)" msgstr "NEMA (nicht verriegelnd)" -#: dcim/choices.py:506 dcim/choices.py:755 +#: netbox/dcim/choices.py:506 netbox/dcim/choices.py:755 msgid "NEMA (Locking)" msgstr "NEMA (verriegelnd)" -#: dcim/choices.py:530 dcim/choices.py:779 +#: netbox/dcim/choices.py:530 netbox/dcim/choices.py:779 msgid "California Style" msgstr "Kalifornischer Stil" -#: dcim/choices.py:538 +#: netbox/dcim/choices.py:538 msgid "International/ITA" msgstr "International/ITA" -#: dcim/choices.py:573 dcim/choices.py:814 +#: netbox/dcim/choices.py:573 netbox/dcim/choices.py:814 msgid "Proprietary" msgstr "Propritär" -#: dcim/choices.py:581 dcim/choices.py:824 dcim/choices.py:1219 -#: dcim/choices.py:1221 dcim/choices.py:1447 dcim/choices.py:1449 -#: netbox/navigation/menu.py:200 +#: 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 msgid "Other" msgstr "Andere" -#: dcim/choices.py:787 +#: netbox/dcim/choices.py:787 msgid "ITA/International" msgstr "ITA/International" -#: dcim/choices.py:854 +#: netbox/dcim/choices.py:854 msgid "Physical" msgstr "Physikalisch" -#: dcim/choices.py:855 dcim/choices.py:1023 +#: netbox/dcim/choices.py:855 netbox/dcim/choices.py:1024 msgid "Virtual" msgstr "Virtuell" -#: dcim/choices.py:856 dcim/choices.py:1097 dcim/forms/bulk_edit.py:1515 -#: dcim/forms/filtersets.py:1330 dcim/forms/model_forms.py:988 -#: dcim/forms/model_forms.py:1397 netbox/navigation/menu.py:140 -#: netbox/navigation/menu.py:144 templates/dcim/interface.html:210 +#: 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 msgid "Wireless" msgstr "Funknetze" -#: dcim/choices.py:1021 +#: netbox/dcim/choices.py:1022 msgid "Virtual interfaces" msgstr "Virtuelle Schnittstellen" -#: dcim/choices.py:1024 dcim/forms/bulk_edit.py:1410 -#: dcim/forms/bulk_import.py:840 dcim/forms/model_forms.py:974 -#: dcim/tables/devices.py:660 templates/dcim/interface.html:106 -#: templates/virtualization/vminterface.html:43 -#: virtualization/forms/bulk_edit.py:212 -#: virtualization/forms/bulk_import.py:158 -#: virtualization/tables/virtualmachines.py:166 +#: 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/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 msgid "Bridge" msgstr "Bridge" -#: dcim/choices.py:1025 +#: netbox/dcim/choices.py:1026 msgid "Link Aggregation Group (LAG)" msgstr "Link Aggregation Group (LAG)" -#: dcim/choices.py:1029 +#: netbox/dcim/choices.py:1030 msgid "Ethernet (fixed)" msgstr "Ethernet (fest)" -#: dcim/choices.py:1044 +#: netbox/dcim/choices.py:1046 msgid "Ethernet (modular)" msgstr "Ethernet (modular)" -#: dcim/choices.py:1081 +#: netbox/dcim/choices.py:1083 msgid "Ethernet (backplane)" msgstr "Ethernet (Backplane)" -#: dcim/choices.py:1113 +#: netbox/dcim/choices.py:1115 msgid "Cellular" msgstr "Mobilfunk" -#: dcim/choices.py:1165 dcim/forms/filtersets.py:383 -#: dcim/forms/filtersets.py:809 dcim/forms/filtersets.py:963 -#: dcim/forms/filtersets.py:1542 templates/dcim/inventoryitem.html:52 -#: templates/dcim/virtualchassis_edit.html:54 +#: 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/templates/dcim/virtualchassis_edit.html:54 msgid "Serial" msgstr "Seriell" -#: dcim/choices.py:1180 +#: netbox/dcim/choices.py:1182 msgid "Coaxial" msgstr "Koaxial" -#: dcim/choices.py:1200 +#: netbox/dcim/choices.py:1202 msgid "Stacking" msgstr "Stapelnd" -#: dcim/choices.py:1250 +#: netbox/dcim/choices.py:1252 msgid "Half" msgstr "Halb" -#: dcim/choices.py:1251 +#: netbox/dcim/choices.py:1253 msgid "Full" msgstr "Voll" -#: dcim/choices.py:1252 netbox/preferences.py:31 wireless/choices.py:480 +#: netbox/dcim/choices.py:1254 netbox/netbox/preferences.py:31 +#: netbox/wireless/choices.py:480 msgid "Auto" msgstr "Automatisch" -#: dcim/choices.py:1263 +#: netbox/dcim/choices.py:1265 msgid "Access" msgstr "Untagged" -#: dcim/choices.py:1264 ipam/tables/vlans.py:172 ipam/tables/vlans.py:217 -#: templates/dcim/inc/interface_vlans_table.html:7 +#: 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 "Tagged" -#: dcim/choices.py:1265 +#: netbox/dcim/choices.py:1267 msgid "Tagged (All)" msgstr "Tagged (Alle)" -#: dcim/choices.py:1294 +#: netbox/dcim/choices.py:1296 msgid "IEEE Standard" msgstr "IEEE-Standard" -#: dcim/choices.py:1305 +#: netbox/dcim/choices.py:1307 msgid "Passive 24V (2-pair)" msgstr "Passiv 24 V (2 Paare)" -#: dcim/choices.py:1306 +#: netbox/dcim/choices.py:1308 msgid "Passive 24V (4-pair)" msgstr "Passiv 24 V (4 Paare)" -#: dcim/choices.py:1307 +#: netbox/dcim/choices.py:1309 msgid "Passive 48V (2-pair)" msgstr "Passiv 48 V (2 Paare)" -#: dcim/choices.py:1308 +#: netbox/dcim/choices.py:1310 msgid "Passive 48V (4-pair)" msgstr "Passiv 48 V (4 Paare)" -#: dcim/choices.py:1378 dcim/choices.py:1488 +#: netbox/dcim/choices.py:1380 netbox/dcim/choices.py:1490 msgid "Copper" msgstr "Kupfer" -#: dcim/choices.py:1401 +#: netbox/dcim/choices.py:1403 msgid "Fiber Optic" msgstr "Glasfaser" -#: dcim/choices.py:1434 dcim/choices.py:1517 +#: netbox/dcim/choices.py:1436 netbox/dcim/choices.py:1519 msgid "USB" msgstr "USB" -#: dcim/choices.py:1504 +#: netbox/dcim/choices.py:1506 msgid "Fiber" msgstr "Faser" -#: dcim/choices.py:1529 dcim/forms/filtersets.py:1227 +#: netbox/dcim/choices.py:1531 netbox/dcim/forms/filtersets.py:1227 msgid "Connected" msgstr "Verbunden" -#: dcim/choices.py:1548 wireless/choices.py:497 +#: netbox/dcim/choices.py:1550 netbox/wireless/choices.py:497 msgid "Kilometers" msgstr "Kilometer" -#: dcim/choices.py:1549 templates/dcim/cable_trace.html:65 -#: wireless/choices.py:498 +#: netbox/dcim/choices.py:1551 netbox/templates/dcim/cable_trace.html:65 +#: netbox/wireless/choices.py:498 msgid "Meters" msgstr "Meter" -#: dcim/choices.py:1550 +#: netbox/dcim/choices.py:1552 msgid "Centimeters" msgstr "Zentimeter" -#: dcim/choices.py:1551 wireless/choices.py:499 +#: netbox/dcim/choices.py:1553 netbox/wireless/choices.py:499 msgid "Miles" msgstr "Meilen" -#: dcim/choices.py:1552 templates/dcim/cable_trace.html:66 -#: wireless/choices.py:500 +#: netbox/dcim/choices.py:1554 netbox/templates/dcim/cable_trace.html:66 +#: netbox/wireless/choices.py:500 msgid "Feet" msgstr "Fuß" -#: dcim/choices.py:1568 templates/dcim/device.html:327 -#: templates/dcim/rack.html:107 +#: netbox/dcim/choices.py:1570 netbox/templates/dcim/device.html:327 +#: netbox/templates/dcim/rack.html:107 msgid "Kilograms" msgstr "Kilogramm" -#: dcim/choices.py:1569 +#: netbox/dcim/choices.py:1571 msgid "Grams" msgstr "Gramm" -#: dcim/choices.py:1570 templates/dcim/device.html:328 -#: templates/dcim/rack.html:108 +#: netbox/dcim/choices.py:1572 netbox/templates/dcim/device.html:328 +#: netbox/templates/dcim/rack.html:108 msgid "Pounds" msgstr "Pfund" -#: dcim/choices.py:1571 +#: netbox/dcim/choices.py:1573 msgid "Ounces" msgstr "Unzen" -#: dcim/choices.py:1618 +#: netbox/dcim/choices.py:1620 msgid "Redundant" msgstr "Redundant" -#: dcim/choices.py:1639 +#: netbox/dcim/choices.py:1641 msgid "Single phase" msgstr "Einphasig" -#: dcim/choices.py:1640 +#: netbox/dcim/choices.py:1642 msgid "Three-phase" msgstr "Dreiphasig" -#: dcim/fields.py:45 +#: netbox/dcim/fields.py:45 #, python-brace-format msgid "Invalid MAC address format: {value}" msgstr "Ungültiges MAC-Adressformat: {value}" -#: dcim/fields.py:71 +#: netbox/dcim/fields.py:71 #, python-brace-format msgid "Invalid WWN format: {value}" msgstr "Ungültiges WWN-Format: {value}" -#: dcim/filtersets.py:86 +#: netbox/dcim/filtersets.py:86 msgid "Parent region (ID)" msgstr "Übergeordnete Region (ID)" -#: dcim/filtersets.py:92 +#: netbox/dcim/filtersets.py:92 msgid "Parent region (slug)" msgstr "Übergeordnete Region (URL-Slug)" -#: dcim/filtersets.py:116 +#: netbox/dcim/filtersets.py:116 msgid "Parent site group (ID)" msgstr "Übergeordnete Standortgruppe (ID)" -#: dcim/filtersets.py:122 +#: netbox/dcim/filtersets.py:122 msgid "Parent site group (slug)" msgstr "Übergeordnete Standortgruppe (URL-Slug)" -#: dcim/filtersets.py:164 extras/filtersets.py:364 ipam/filtersets.py:841 -#: ipam/filtersets.py:993 +#: netbox/dcim/filtersets.py:164 netbox/extras/filtersets.py:364 +#: netbox/ipam/filtersets.py:841 netbox/ipam/filtersets.py:993 msgid "Group (ID)" msgstr "Gruppe (ID)" -#: dcim/filtersets.py:170 +#: netbox/dcim/filtersets.py:170 msgid "Group (slug)" msgstr "Gruppe (URL-Slug)" -#: dcim/filtersets.py:176 dcim/filtersets.py:181 +#: netbox/dcim/filtersets.py:176 netbox/dcim/filtersets.py:181 msgid "AS (ID)" msgstr "AS (ID)" -#: dcim/filtersets.py:246 +#: netbox/dcim/filtersets.py:246 msgid "Parent location (ID)" msgstr "Übergeordnete Lokation (ID)" -#: dcim/filtersets.py:252 +#: netbox/dcim/filtersets.py:252 msgid "Parent location (slug)" msgstr "Übergeordnete Lokation (URL-Slug)" -#: dcim/filtersets.py:258 dcim/filtersets.py:369 dcim/filtersets.py:490 -#: dcim/filtersets.py:1057 dcim/filtersets.py:1404 dcim/filtersets.py:2182 +#: 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)" -#: dcim/filtersets.py:265 dcim/filtersets.py:376 dcim/filtersets.py:497 -#: dcim/filtersets.py:1410 extras/filtersets.py:542 +#: 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)" -#: dcim/filtersets.py:296 dcim/filtersets.py:381 dcim/filtersets.py:539 -#: dcim/filtersets.py:678 dcim/filtersets.py:882 dcim/filtersets.py:933 -#: dcim/filtersets.py:973 dcim/filtersets.py:1306 dcim/filtersets.py:1840 +#: 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 msgid "Manufacturer (ID)" msgstr "Hersteller (ID)" -#: dcim/filtersets.py:302 dcim/filtersets.py:387 dcim/filtersets.py:545 -#: dcim/filtersets.py:684 dcim/filtersets.py:888 dcim/filtersets.py:939 -#: dcim/filtersets.py:979 dcim/filtersets.py:1312 dcim/filtersets.py:1846 +#: 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 msgid "Manufacturer (slug)" msgstr "Hersteller (Slug)" -#: dcim/filtersets.py:393 +#: netbox/dcim/filtersets.py:393 msgid "Rack type (slug)" msgstr "Regaltyp (slug)" -#: dcim/filtersets.py:397 +#: netbox/dcim/filtersets.py:397 msgid "Rack type (ID)" msgstr "Racktyp (ID)" -#: dcim/filtersets.py:411 dcim/filtersets.py:892 dcim/filtersets.py:994 -#: dcim/filtersets.py:1850 ipam/filtersets.py:381 ipam/filtersets.py:493 -#: ipam/filtersets.py:1003 virtualization/filtersets.py:210 +#: 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 msgid "Role (ID)" msgstr "Rolle (ID)" -#: dcim/filtersets.py:417 dcim/filtersets.py:898 dcim/filtersets.py:1000 -#: dcim/filtersets.py:1856 extras/filtersets.py:558 ipam/filtersets.py:387 -#: ipam/filtersets.py:499 ipam/filtersets.py:1009 -#: virtualization/filtersets.py:216 +#: 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/virtualization/filtersets.py:216 msgid "Role (slug)" msgstr "Rolle (URL-Slug)" -#: dcim/filtersets.py:447 dcim/filtersets.py:1062 dcim/filtersets.py:1415 -#: dcim/filtersets.py:2244 +#: netbox/dcim/filtersets.py:447 netbox/dcim/filtersets.py:1062 +#: netbox/dcim/filtersets.py:1415 netbox/dcim/filtersets.py:2244 msgid "Rack (ID)" msgstr "Rack (ID)" -#: dcim/filtersets.py:507 extras/filtersets.py:293 extras/filtersets.py:337 -#: extras/filtersets.py:359 extras/filtersets.py:419 users/filtersets.py:113 -#: users/filtersets.py:180 +#: netbox/dcim/filtersets.py:507 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)" -#: dcim/filtersets.py:549 +#: netbox/dcim/filtersets.py:549 msgid "Default platform (ID)" msgstr "Standard-Betriebssystem (ID)" -#: dcim/filtersets.py:555 +#: netbox/dcim/filtersets.py:555 msgid "Default platform (slug)" msgstr "Standard-Betriebssystem (URL-Slug)" -#: dcim/filtersets.py:558 dcim/forms/filtersets.py:517 +#: netbox/dcim/filtersets.py:558 netbox/dcim/forms/filtersets.py:517 msgid "Has a front image" msgstr "Hat ein Frontalbild" -#: dcim/filtersets.py:562 dcim/forms/filtersets.py:524 +#: netbox/dcim/filtersets.py:562 netbox/dcim/forms/filtersets.py:524 msgid "Has a rear image" msgstr "Hat ein Rückseitenbild" -#: dcim/filtersets.py:567 dcim/filtersets.py:688 dcim/filtersets.py:1131 -#: dcim/forms/filtersets.py:531 dcim/forms/filtersets.py:627 -#: dcim/forms/filtersets.py:848 +#: 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 msgid "Has console ports" msgstr "Hat Konsolenanschlüsse" -#: dcim/filtersets.py:571 dcim/filtersets.py:692 dcim/filtersets.py:1135 -#: dcim/forms/filtersets.py:538 dcim/forms/filtersets.py:634 -#: dcim/forms/filtersets.py:855 +#: 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 msgid "Has console server ports" msgstr "Hat Konsolenserveranschlüsse" -#: dcim/filtersets.py:575 dcim/filtersets.py:696 dcim/filtersets.py:1139 -#: dcim/forms/filtersets.py:545 dcim/forms/filtersets.py:641 -#: dcim/forms/filtersets.py:862 +#: 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 msgid "Has power ports" msgstr "Hat Stromanschlüsse" -#: dcim/filtersets.py:579 dcim/filtersets.py:700 dcim/filtersets.py:1143 -#: dcim/forms/filtersets.py:552 dcim/forms/filtersets.py:648 -#: dcim/forms/filtersets.py:869 +#: 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 msgid "Has power outlets" msgstr "Hat Steckdosen" -#: dcim/filtersets.py:583 dcim/filtersets.py:704 dcim/filtersets.py:1147 -#: dcim/forms/filtersets.py:559 dcim/forms/filtersets.py:655 -#: dcim/forms/filtersets.py:876 +#: 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 msgid "Has interfaces" msgstr "Hat Schnittstellen" -#: dcim/filtersets.py:587 dcim/filtersets.py:708 dcim/filtersets.py:1151 -#: dcim/forms/filtersets.py:566 dcim/forms/filtersets.py:662 -#: dcim/forms/filtersets.py:883 +#: 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 msgid "Has pass-through ports" msgstr "Hat durchgereichte Anschlüsse" -#: dcim/filtersets.py:591 dcim/filtersets.py:1155 dcim/forms/filtersets.py:580 +#: netbox/dcim/filtersets.py:591 netbox/dcim/filtersets.py:1155 +#: netbox/dcim/forms/filtersets.py:580 msgid "Has module bays" msgstr "Hat Moduleinsätze" -#: dcim/filtersets.py:595 dcim/filtersets.py:1159 dcim/forms/filtersets.py:573 +#: netbox/dcim/filtersets.py:595 netbox/dcim/filtersets.py:1159 +#: netbox/dcim/forms/filtersets.py:573 msgid "Has device bays" msgstr "Hat Geräteeinsätze" -#: dcim/filtersets.py:599 dcim/forms/filtersets.py:587 +#: netbox/dcim/filtersets.py:599 netbox/dcim/forms/filtersets.py:587 msgid "Has inventory items" msgstr "Hat Inventargegenstände" -#: dcim/filtersets.py:756 dcim/filtersets.py:989 dcim/filtersets.py:1436 +#: netbox/dcim/filtersets.py:756 netbox/dcim/filtersets.py:989 +#: netbox/dcim/filtersets.py:1436 msgid "Device type (ID)" msgstr "Gerätetyp (ID)" -#: dcim/filtersets.py:772 dcim/filtersets.py:1317 +#: netbox/dcim/filtersets.py:772 netbox/dcim/filtersets.py:1317 msgid "Module type (ID)" msgstr "Modultyp (ID)" -#: dcim/filtersets.py:804 dcim/filtersets.py:1591 +#: netbox/dcim/filtersets.py:804 netbox/dcim/filtersets.py:1591 msgid "Power port (ID)" msgstr "Stromanschluss (ID)" -#: dcim/filtersets.py:878 dcim/filtersets.py:1836 +#: netbox/dcim/filtersets.py:878 netbox/dcim/filtersets.py:1836 msgid "Parent inventory item (ID)" msgstr "Übergeordneter Inventarartikel (ID)" -#: dcim/filtersets.py:921 dcim/filtersets.py:947 dcim/filtersets.py:1127 -#: virtualization/filtersets.py:238 +#: netbox/dcim/filtersets.py:921 netbox/dcim/filtersets.py:947 +#: netbox/dcim/filtersets.py:1127 netbox/virtualization/filtersets.py:238 msgid "Config template (ID)" msgstr "Konfigurationsvorlage (ID)" -#: dcim/filtersets.py:985 +#: netbox/dcim/filtersets.py:985 msgid "Device type (slug)" msgstr "Gerätetyp (Slug)" -#: dcim/filtersets.py:1005 +#: netbox/dcim/filtersets.py:1005 msgid "Parent Device (ID)" msgstr "Übergeordnetes Gerät (ID)" -#: dcim/filtersets.py:1009 virtualization/filtersets.py:220 +#: netbox/dcim/filtersets.py:1009 netbox/virtualization/filtersets.py:220 msgid "Platform (ID)" msgstr "Betriebssystem (ID)" -#: dcim/filtersets.py:1015 extras/filtersets.py:569 -#: virtualization/filtersets.py:226 +#: netbox/dcim/filtersets.py:1015 netbox/extras/filtersets.py:569 +#: netbox/virtualization/filtersets.py:226 msgid "Platform (slug)" msgstr "Betriebssystem (URL-Slug)" -#: dcim/filtersets.py:1051 dcim/filtersets.py:1399 dcim/filtersets.py:1934 -#: dcim/filtersets.py:2176 dcim/filtersets.py:2235 +#: 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 msgid "Site name (slug)" msgstr "Standortname (URL-Slug)" -#: dcim/filtersets.py:1067 +#: netbox/dcim/filtersets.py:1067 msgid "Parent bay (ID)" msgstr "Übergeordneter Schacht (ID)" -#: dcim/filtersets.py:1071 +#: netbox/dcim/filtersets.py:1071 msgid "VM cluster (ID)" msgstr "VM-Cluster (ID)" -#: dcim/filtersets.py:1077 extras/filtersets.py:591 -#: virtualization/filtersets.py:136 +#: netbox/dcim/filtersets.py:1077 netbox/extras/filtersets.py:591 +#: netbox/virtualization/filtersets.py:136 msgid "Cluster group (slug)" msgstr "Clustergruppe (URL-Slug)" -#: dcim/filtersets.py:1082 virtualization/filtersets.py:130 +#: netbox/dcim/filtersets.py:1082 netbox/virtualization/filtersets.py:130 msgid "Cluster group (ID)" msgstr "Clustergruppe (ID)" -#: dcim/filtersets.py:1088 +#: netbox/dcim/filtersets.py:1088 msgid "Device model (slug)" msgstr "Gerätemodell (URL-Slug)" -#: dcim/filtersets.py:1099 dcim/forms/bulk_edit.py:516 +#: netbox/dcim/filtersets.py:1099 netbox/dcim/forms/bulk_edit.py:522 msgid "Is full depth" msgstr "Hat volle Tiefe" -#: dcim/filtersets.py:1103 dcim/forms/common.py:18 -#: dcim/forms/filtersets.py:818 dcim/forms/filtersets.py:1385 -#: dcim/models/device_components.py:518 virtualization/filtersets.py:230 -#: virtualization/filtersets.py:301 virtualization/forms/filtersets.py:172 -#: virtualization/forms/filtersets.py:223 +#: 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 msgid "MAC address" msgstr "MAC-Adresse" -#: dcim/filtersets.py:1110 dcim/filtersets.py:1274 -#: dcim/forms/filtersets.py:827 dcim/forms/filtersets.py:930 -#: virtualization/filtersets.py:234 virtualization/forms/filtersets.py:176 +#: 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 msgid "Has a primary IP" msgstr "Hat eine primäre IP" -#: dcim/filtersets.py:1114 +#: netbox/dcim/filtersets.py:1114 msgid "Has an out-of-band IP" msgstr "Hat eine Out-of-Band-IP" -#: dcim/filtersets.py:1119 +#: netbox/dcim/filtersets.py:1119 msgid "Virtual chassis (ID)" msgstr "Virtuelles Gehäuse (ID)" -#: dcim/filtersets.py:1123 +#: netbox/dcim/filtersets.py:1123 msgid "Is a virtual chassis member" msgstr "Ist ein virtuelles Gehäuse-Mitglied" -#: dcim/filtersets.py:1164 +#: netbox/dcim/filtersets.py:1164 msgid "OOB IP (ID)" msgstr "OOB IP (ID)" -#: dcim/filtersets.py:1168 +#: netbox/dcim/filtersets.py:1168 msgid "Has virtual device context" msgstr "Hat Virtual Device Context" -#: dcim/filtersets.py:1257 +#: netbox/dcim/filtersets.py:1257 msgid "VDC (ID)" msgstr "VDC (ID)" -#: dcim/filtersets.py:1262 +#: netbox/dcim/filtersets.py:1262 msgid "Device model" msgstr "Modell des Geräts" -#: dcim/filtersets.py:1267 ipam/filtersets.py:632 vpn/filtersets.py:102 -#: vpn/filtersets.py:401 +#: netbox/dcim/filtersets.py:1267 netbox/ipam/filtersets.py:632 +#: netbox/vpn/filtersets.py:102 netbox/vpn/filtersets.py:401 msgid "Interface (ID)" msgstr "Schnittstelle (ID)" -#: dcim/filtersets.py:1323 +#: netbox/dcim/filtersets.py:1323 msgid "Module type (model)" msgstr "Modultyp (Modell)" -#: dcim/filtersets.py:1329 +#: netbox/dcim/filtersets.py:1329 msgid "Module bay (ID)" msgstr "Modulschacht (ID)" -#: dcim/filtersets.py:1333 dcim/filtersets.py:1425 ipam/filtersets.py:611 -#: ipam/filtersets.py:851 ipam/filtersets.py:1115 -#: virtualization/filtersets.py:161 vpn/filtersets.py:379 +#: 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/vpn/filtersets.py:379 msgid "Device (ID)" msgstr "Gerät (ID)" -#: dcim/filtersets.py:1421 +#: netbox/dcim/filtersets.py:1421 msgid "Rack (name)" msgstr "Rack (Name)" -#: dcim/filtersets.py:1431 ipam/filtersets.py:606 ipam/filtersets.py:846 -#: ipam/filtersets.py:1121 vpn/filtersets.py:374 +#: netbox/dcim/filtersets.py:1431 netbox/ipam/filtersets.py:606 +#: netbox/ipam/filtersets.py:846 netbox/ipam/filtersets.py:1121 +#: netbox/vpn/filtersets.py:374 msgid "Device (name)" msgstr "Gerät (Name)" -#: dcim/filtersets.py:1442 +#: netbox/dcim/filtersets.py:1442 msgid "Device type (model)" msgstr "Gerätetyp (Modell)" -#: dcim/filtersets.py:1447 +#: netbox/dcim/filtersets.py:1447 msgid "Device role (ID)" msgstr "Geräterolle (ID)" -#: dcim/filtersets.py:1453 +#: netbox/dcim/filtersets.py:1453 msgid "Device role (slug)" msgstr "Geräterolle (URL-Slug)" -#: dcim/filtersets.py:1458 +#: netbox/dcim/filtersets.py:1458 msgid "Virtual Chassis (ID)" msgstr "Virtuelles Gehäuse (ID)" -#: dcim/filtersets.py:1464 dcim/forms/filtersets.py:109 -#: dcim/tables/devices.py:206 netbox/navigation/menu.py:79 -#: templates/dcim/device.html:120 templates/dcim/device_edit.html:93 -#: templates/dcim/virtualchassis.html:20 -#: templates/dcim/virtualchassis_add.html:8 -#: templates/dcim/virtualchassis_edit.html:24 +#: netbox/dcim/filtersets.py:1464 netbox/dcim/forms/filtersets.py:109 +#: netbox/dcim/tables/devices.py:206 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 +#: netbox/templates/dcim/virtualchassis_add.html:8 +#: netbox/templates/dcim/virtualchassis_edit.html:24 msgid "Virtual Chassis" msgstr "Virtuelles Gehäuse" -#: dcim/filtersets.py:1488 +#: netbox/dcim/filtersets.py:1488 msgid "Module (ID)" msgstr "Modul (ID)" -#: dcim/filtersets.py:1495 +#: netbox/dcim/filtersets.py:1495 msgid "Cable (ID)" msgstr "Kabel (ID)" -#: dcim/filtersets.py:1604 ipam/forms/bulk_import.py:189 -#: vpn/forms/bulk_import.py:308 +#: netbox/dcim/filtersets.py:1604 netbox/ipam/forms/bulk_import.py:189 +#: netbox/vpn/forms/bulk_import.py:308 msgid "Assigned VLAN" msgstr "Zugewiesenes VLAN" -#: dcim/filtersets.py:1608 +#: netbox/dcim/filtersets.py:1608 msgid "Assigned VID" msgstr "Zugewiesene VID" -#: dcim/filtersets.py:1613 dcim/forms/bulk_edit.py:1489 -#: dcim/forms/bulk_import.py:891 dcim/forms/filtersets.py:1428 -#: dcim/forms/model_forms.py:1378 dcim/models/device_components.py:711 -#: dcim/tables/devices.py:626 ipam/filtersets.py:316 ipam/filtersets.py:327 -#: ipam/filtersets.py:483 ipam/filtersets.py:584 ipam/filtersets.py:595 -#: ipam/forms/bulk_edit.py:242 ipam/forms/bulk_edit.py:298 -#: ipam/forms/bulk_edit.py:340 ipam/forms/bulk_import.py:157 -#: ipam/forms/bulk_import.py:243 ipam/forms/bulk_import.py:279 -#: ipam/forms/filtersets.py:67 ipam/forms/filtersets.py:172 -#: ipam/forms/filtersets.py:309 ipam/forms/model_forms.py:62 -#: ipam/forms/model_forms.py:202 ipam/forms/model_forms.py:247 -#: ipam/forms/model_forms.py:300 ipam/forms/model_forms.py:431 -#: ipam/forms/model_forms.py:445 ipam/forms/model_forms.py:459 -#: ipam/models/ip.py:233 ipam/models/ip.py:512 ipam/models/ip.py:720 -#: ipam/models/vrfs.py:62 ipam/tables/ip.py:242 ipam/tables/ip.py:309 -#: ipam/tables/ip.py:360 ipam/tables/ip.py:450 -#: templates/dcim/interface.html:133 templates/ipam/ipaddress.html:18 -#: templates/ipam/iprange.html:40 templates/ipam/prefix.html:19 -#: templates/ipam/vrf.html:7 templates/ipam/vrf.html:13 -#: templates/virtualization/vminterface.html:47 -#: virtualization/forms/bulk_edit.py:261 -#: virtualization/forms/bulk_import.py:171 -#: virtualization/forms/filtersets.py:228 -#: virtualization/forms/model_forms.py:344 -#: virtualization/models/virtualmachines.py:355 -#: virtualization/tables/virtualmachines.py:143 +#: 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:316 +#: netbox/ipam/filtersets.py:327 netbox/ipam/filtersets.py:483 +#: netbox/ipam/filtersets.py:584 netbox/ipam/filtersets.py:595 +#: netbox/ipam/forms/bulk_edit.py: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/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 msgid "VRF" msgstr "VRF" -#: dcim/filtersets.py:1619 ipam/filtersets.py:322 ipam/filtersets.py:333 -#: ipam/filtersets.py:489 ipam/filtersets.py:590 ipam/filtersets.py:601 +#: 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 msgid "VRF (RD)" msgstr "VRF (RD)" -#: dcim/filtersets.py:1624 ipam/filtersets.py:1030 vpn/filtersets.py:342 +#: netbox/dcim/filtersets.py:1624 netbox/ipam/filtersets.py:1030 +#: netbox/vpn/filtersets.py:342 msgid "L2VPN (ID)" msgstr "L2VPN (ID)" -#: dcim/filtersets.py:1630 dcim/forms/filtersets.py:1433 -#: dcim/tables/devices.py:570 ipam/filtersets.py:1036 -#: ipam/forms/filtersets.py:518 ipam/tables/vlans.py:137 -#: templates/dcim/interface.html:93 templates/ipam/vlan.html:66 -#: templates/vpn/l2vpntermination.html:12 -#: virtualization/forms/filtersets.py:233 vpn/forms/bulk_import.py:280 -#: vpn/forms/filtersets.py:246 vpn/forms/model_forms.py:409 -#: vpn/forms/model_forms.py:427 vpn/models/l2vpn.py:63 vpn/tables/l2vpn.py:55 +#: netbox/dcim/filtersets.py:1630 netbox/dcim/forms/filtersets.py:1433 +#: netbox/dcim/tables/devices.py:570 netbox/ipam/filtersets.py:1036 +#: 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 +#: netbox/virtualization/forms/filtersets.py:233 +#: netbox/vpn/forms/bulk_import.py:280 netbox/vpn/forms/filtersets.py:246 +#: netbox/vpn/forms/model_forms.py:409 netbox/vpn/forms/model_forms.py:427 +#: netbox/vpn/models/l2vpn.py:63 netbox/vpn/tables/l2vpn.py:55 msgid "L2VPN" msgstr "L2VPN" -#: dcim/filtersets.py:1662 +#: netbox/dcim/filtersets.py:1662 msgid "Virtual Chassis Interfaces for Device" msgstr "Virtuelle Gehäuseschnittstellen für Gerät" -#: dcim/filtersets.py:1667 +#: netbox/dcim/filtersets.py:1667 msgid "Virtual Chassis Interfaces for Device (ID)" msgstr "Virtuelle Gehäuseschnittstellen für Gerät (ID)" -#: dcim/filtersets.py:1671 +#: netbox/dcim/filtersets.py:1671 msgid "Kind of interface" msgstr "Art der Schnittstelle" -#: dcim/filtersets.py:1676 virtualization/filtersets.py:293 +#: netbox/dcim/filtersets.py:1676 netbox/virtualization/filtersets.py:293 msgid "Parent interface (ID)" msgstr "Übergeordnete Schnittstelle (ID)" -#: dcim/filtersets.py:1681 virtualization/filtersets.py:298 +#: netbox/dcim/filtersets.py:1681 netbox/virtualization/filtersets.py:298 msgid "Bridged interface (ID)" msgstr "Überbrückte Schnittstelle (ID)" -#: dcim/filtersets.py:1686 +#: netbox/dcim/filtersets.py:1686 msgid "LAG interface (ID)" msgstr "LAG-Schnittstelle (ID)" -#: dcim/filtersets.py:1713 dcim/filtersets.py:1725 -#: dcim/forms/filtersets.py:1345 dcim/forms/model_forms.py:1690 -#: templates/dcim/virtualdevicecontext.html:15 +#: netbox/dcim/filtersets.py:1713 netbox/dcim/filtersets.py:1725 +#: netbox/dcim/forms/filtersets.py:1345 netbox/dcim/forms/model_forms.py:1697 +#: netbox/templates/dcim/virtualdevicecontext.html:15 msgid "Virtual Device Context" msgstr "Virtual Device Context" -#: dcim/filtersets.py:1719 +#: netbox/dcim/filtersets.py:1719 msgid "Virtual Device Context (Identifier)" msgstr "Virtual Device Context (Identifier)" -#: dcim/filtersets.py:1730 templates/wireless/wirelesslan.html:11 -#: wireless/forms/model_forms.py:53 +#: netbox/dcim/filtersets.py:1730 +#: netbox/templates/wireless/wirelesslan.html:11 +#: netbox/wireless/forms/model_forms.py:53 msgid "Wireless LAN" msgstr "WLAN" -#: dcim/filtersets.py:1734 dcim/tables/devices.py:613 +#: netbox/dcim/filtersets.py:1734 netbox/dcim/tables/devices.py:613 msgid "Wireless link" msgstr "WLAN Verbindung" -#: dcim/filtersets.py:1803 +#: netbox/dcim/filtersets.py:1803 msgid "Parent module bay (ID)" msgstr "Hauptmodulschacht (ID)" -#: dcim/filtersets.py:1808 +#: netbox/dcim/filtersets.py:1808 msgid "Installed module (ID)" msgstr "Installiertes Modul (ID)" -#: dcim/filtersets.py:1819 +#: netbox/dcim/filtersets.py:1819 msgid "Installed device (ID)" msgstr "Installiertes Gerät (ID)" -#: dcim/filtersets.py:1825 +#: netbox/dcim/filtersets.py:1825 msgid "Installed device (name)" msgstr "Installiertes Gerät (Name)" -#: dcim/filtersets.py:1891 +#: netbox/dcim/filtersets.py:1891 msgid "Master (ID)" msgstr "Master (ID)" -#: dcim/filtersets.py:1897 +#: netbox/dcim/filtersets.py:1897 msgid "Master (name)" msgstr "Master (Name)" -#: dcim/filtersets.py:1939 tenancy/filtersets.py:245 +#: netbox/dcim/filtersets.py:1939 netbox/tenancy/filtersets.py:245 msgid "Tenant (ID)" msgstr "Mandant (ID)" -#: dcim/filtersets.py:1945 extras/filtersets.py:618 tenancy/filtersets.py:251 +#: netbox/dcim/filtersets.py:1945 netbox/extras/filtersets.py:618 +#: netbox/tenancy/filtersets.py:251 msgid "Tenant (slug)" msgstr "Mandant (URL-Slug)" -#: dcim/filtersets.py:1981 dcim/forms/filtersets.py:1077 +#: netbox/dcim/filtersets.py:1981 netbox/dcim/forms/filtersets.py:1077 msgid "Unterminated" msgstr "Nicht terminiert" -#: dcim/filtersets.py:2239 +#: netbox/dcim/filtersets.py:2239 msgid "Power panel (ID)" msgstr "Stromverteiler (ID)" -#: dcim/forms/bulk_create.py:40 extras/forms/filtersets.py:401 -#: extras/forms/model_forms.py:567 extras/forms/model_forms.py:619 -#: netbox/forms/base.py:86 netbox/forms/mixins.py:81 -#: netbox/tables/columns.py:478 -#: templates/circuits/inc/circuit_termination.html:32 -#: templates/generic/bulk_edit.html:65 templates/inc/panels/tags.html:5 -#: utilities/forms/fields/fields.py:81 +#: netbox/dcim/forms/bulk_create.py:40 netbox/extras/forms/filtersets.py: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/templates/circuits/inc/circuit_termination.html:32 +#: netbox/templates/generic/bulk_edit.html:65 +#: netbox/templates/inc/panels/tags.html:5 +#: netbox/utilities/forms/fields/fields.py:81 msgid "Tags" msgstr "Tags" -#: dcim/forms/bulk_create.py:112 dcim/forms/filtersets.py:1498 -#: dcim/forms/model_forms.py:488 dcim/forms/model_forms.py:546 -#: dcim/forms/object_create.py:197 dcim/forms/object_create.py:353 -#: dcim/tables/devices.py:165 dcim/tables/devices.py:707 -#: dcim/tables/devicetypes.py:246 templates/dcim/device.html:43 -#: templates/dcim/device.html:131 templates/dcim/modulebay.html:38 -#: templates/dcim/virtualchassis.html:66 -#: templates/dcim/virtualchassis_edit.html:55 +#: 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/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/templates/dcim/device.html:43 netbox/templates/dcim/device.html:131 +#: netbox/templates/dcim/modulebay.html:38 +#: netbox/templates/dcim/virtualchassis.html:66 +#: netbox/templates/dcim/virtualchassis_edit.html:55 msgid "Position" msgstr "Position" -#: dcim/forms/bulk_create.py:114 +#: netbox/dcim/forms/bulk_create.py:114 msgid "" "Alphanumeric ranges are supported. (Must match the number of names being " "created.)" @@ -3131,827 +3460,925 @@ msgstr "" "Alphanumerische Bereiche werden unterstützt. (Muss der Anzahl der Namen " "entsprechen, die erstellt werden.)" -#: dcim/forms/bulk_edit.py:132 +#: netbox/dcim/forms/bulk_edit.py:133 msgid "Contact name" msgstr "Name des Kontakts" -#: dcim/forms/bulk_edit.py:137 +#: netbox/dcim/forms/bulk_edit.py:138 msgid "Contact phone" msgstr "Telefon des Kontakts" -#: dcim/forms/bulk_edit.py:143 +#: netbox/dcim/forms/bulk_edit.py:144 msgid "Contact E-mail" msgstr "E-Mail des Kontakts" -#: dcim/forms/bulk_edit.py:146 dcim/forms/bulk_import.py:123 -#: dcim/forms/model_forms.py:128 +#: netbox/dcim/forms/bulk_edit.py:147 netbox/dcim/forms/bulk_import.py:123 +#: netbox/dcim/forms/model_forms.py:128 msgid "Time zone" msgstr "Zeitzone" -#: dcim/forms/bulk_edit.py:224 dcim/forms/bulk_edit.py:495 -#: dcim/forms/bulk_edit.py:559 dcim/forms/bulk_edit.py:632 -#: dcim/forms/bulk_edit.py:656 dcim/forms/bulk_edit.py:740 -#: dcim/forms/bulk_edit.py:1267 dcim/forms/bulk_edit.py:1660 -#: dcim/forms/bulk_import.py:182 dcim/forms/bulk_import.py:371 -#: dcim/forms/bulk_import.py:405 dcim/forms/bulk_import.py:450 -#: dcim/forms/bulk_import.py:486 dcim/forms/bulk_import.py:1082 -#: dcim/forms/filtersets.py:313 dcim/forms/filtersets.py:372 -#: dcim/forms/filtersets.py:494 dcim/forms/filtersets.py:619 -#: dcim/forms/filtersets.py:700 dcim/forms/filtersets.py:782 -#: dcim/forms/filtersets.py:947 dcim/forms/filtersets.py:1539 -#: dcim/forms/model_forms.py:207 dcim/forms/model_forms.py:337 -#: dcim/forms/model_forms.py:349 dcim/forms/model_forms.py:395 -#: dcim/forms/model_forms.py:436 dcim/forms/model_forms.py:1075 -#: dcim/forms/model_forms.py:1515 dcim/forms/object_import.py:187 -#: dcim/tables/devices.py:96 dcim/tables/devices.py:172 -#: dcim/tables/devices.py:940 dcim/tables/devicetypes.py:80 -#: dcim/tables/devicetypes.py:308 dcim/tables/modules.py:20 -#: dcim/tables/modules.py:60 dcim/tables/racks.py:58 dcim/tables/racks.py:132 -#: templates/dcim/devicetype.html:14 templates/dcim/inventoryitem.html:44 -#: templates/dcim/manufacturer.html:33 templates/dcim/modulebay.html:62 -#: templates/dcim/moduletype.html:25 templates/dcim/platform.html:37 -#: templates/dcim/racktype.html:16 +#: 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/tables/modules.py:60 +#: 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/templates/dcim/manufacturer.html:33 +#: netbox/templates/dcim/modulebay.html:62 +#: netbox/templates/dcim/moduletype.html:25 +#: netbox/templates/dcim/platform.html:37 +#: netbox/templates/dcim/racktype.html:16 msgid "Manufacturer" msgstr "Hersteller" -#: dcim/forms/bulk_edit.py:229 dcim/forms/bulk_edit.py:372 -#: dcim/forms/bulk_import.py:191 dcim/forms/bulk_import.py:263 -#: dcim/forms/filtersets.py:255 -#: templates/dcim/inc/panels/racktype_dimensions.html:6 +#: 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/templates/dcim/inc/panels/racktype_dimensions.html:6 msgid "Form factor" msgstr "Formfaktor" -#: dcim/forms/bulk_edit.py:234 dcim/forms/bulk_edit.py:377 -#: dcim/forms/bulk_import.py:199 dcim/forms/bulk_import.py:266 -#: dcim/forms/filtersets.py:260 -#: templates/dcim/inc/panels/racktype_dimensions.html:10 +#: 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/templates/dcim/inc/panels/racktype_dimensions.html:10 msgid "Width" msgstr "Breite" -#: dcim/forms/bulk_edit.py:240 dcim/forms/bulk_edit.py:383 -#: templates/dcim/devicetype.html:37 +#: netbox/dcim/forms/bulk_edit.py:241 netbox/dcim/forms/bulk_edit.py:389 +#: netbox/dcim/forms/bulk_import.py:280 +#: netbox/templates/dcim/devicetype.html:37 msgid "Height (U)" msgstr "Höhe (HE)" -#: dcim/forms/bulk_edit.py:249 dcim/forms/bulk_edit.py:388 -#: dcim/forms/filtersets.py:274 +#: netbox/dcim/forms/bulk_edit.py:250 netbox/dcim/forms/bulk_edit.py:394 +#: netbox/dcim/forms/filtersets.py:274 msgid "Descending units" msgstr "Absteigende Höheneinheiten (HE)" -#: dcim/forms/bulk_edit.py:252 dcim/forms/bulk_edit.py:391 +#: netbox/dcim/forms/bulk_edit.py:253 netbox/dcim/forms/bulk_edit.py:397 msgid "Outer width" msgstr "Äußere Breite" -#: dcim/forms/bulk_edit.py:257 dcim/forms/bulk_edit.py:396 +#: netbox/dcim/forms/bulk_edit.py:258 netbox/dcim/forms/bulk_edit.py:402 msgid "Outer depth" msgstr "Äußere Tiefe" -#: dcim/forms/bulk_edit.py:262 dcim/forms/bulk_edit.py:401 -#: dcim/forms/bulk_import.py:204 dcim/forms/bulk_import.py:271 +#: 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 msgid "Outer unit" msgstr "Äußere Einheit" -#: dcim/forms/bulk_edit.py:267 dcim/forms/bulk_edit.py:406 +#: netbox/dcim/forms/bulk_edit.py:268 netbox/dcim/forms/bulk_edit.py:412 msgid "Mounting depth" msgstr "Einbautiefe" -#: dcim/forms/bulk_edit.py:272 dcim/forms/bulk_edit.py:299 -#: dcim/forms/bulk_edit.py:416 dcim/forms/bulk_edit.py:446 -#: dcim/forms/bulk_edit.py:529 dcim/forms/bulk_edit.py:552 -#: dcim/forms/bulk_edit.py:573 dcim/forms/bulk_edit.py:595 -#: dcim/forms/bulk_import.py:384 dcim/forms/bulk_import.py:416 -#: dcim/forms/filtersets.py:285 dcim/forms/filtersets.py:307 -#: dcim/forms/filtersets.py:327 dcim/forms/filtersets.py:401 -#: dcim/forms/filtersets.py:488 dcim/forms/filtersets.py:594 -#: dcim/forms/filtersets.py:613 dcim/forms/filtersets.py:674 -#: dcim/forms/model_forms.py:221 dcim/forms/model_forms.py:298 -#: dcim/tables/devicetypes.py:106 dcim/tables/modules.py:35 -#: dcim/tables/racks.py:74 dcim/tables/racks.py:172 -#: extras/forms/bulk_edit.py:53 extras/forms/bulk_edit.py:133 -#: extras/forms/bulk_edit.py:183 extras/forms/bulk_edit.py:288 -#: extras/forms/filtersets.py:64 extras/forms/filtersets.py:156 -#: extras/forms/filtersets.py:243 ipam/forms/bulk_edit.py:190 -#: templates/dcim/device.html:324 templates/dcim/devicetype.html:49 -#: templates/dcim/moduletype.html:45 templates/dcim/rack.html:81 -#: templates/dcim/racktype.html:41 templates/extras/configcontext.html:17 -#: templates/extras/customlink.html:25 templates/extras/savedfilter.html:33 -#: templates/ipam/role.html:30 +#: netbox/dcim/forms/bulk_edit.py: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/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/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/racktype.html:41 +#: netbox/templates/extras/configcontext.html:17 +#: netbox/templates/extras/customlink.html:25 +#: netbox/templates/extras/savedfilter.html:33 +#: netbox/templates/ipam/role.html:30 msgid "Weight" msgstr "Gewicht" -#: dcim/forms/bulk_edit.py:277 dcim/forms/bulk_edit.py:421 -#: dcim/forms/filtersets.py:290 +#: netbox/dcim/forms/bulk_edit.py:278 netbox/dcim/forms/bulk_edit.py:427 +#: netbox/dcim/forms/filtersets.py:290 msgid "Max weight" msgstr "Maximales Gewicht" -#: dcim/forms/bulk_edit.py:282 dcim/forms/bulk_edit.py:426 -#: dcim/forms/bulk_edit.py:534 dcim/forms/bulk_edit.py:578 -#: dcim/forms/bulk_import.py:210 dcim/forms/bulk_import.py:283 -#: dcim/forms/bulk_import.py:389 dcim/forms/bulk_import.py:421 -#: dcim/forms/filtersets.py:295 dcim/forms/filtersets.py:598 -#: dcim/forms/filtersets.py:678 +#: 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 msgid "Weight unit" msgstr "Gewichtseinheit" -#: dcim/forms/bulk_edit.py:296 dcim/forms/filtersets.py:305 -#: dcim/forms/model_forms.py:217 dcim/forms/model_forms.py:256 -#: templates/dcim/rack.html:45 templates/dcim/racktype.html:13 +#: 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/templates/dcim/rack.html:45 netbox/templates/dcim/racktype.html:13 msgid "Rack Type" msgstr "Rack-Typ" -#: dcim/forms/bulk_edit.py:298 dcim/forms/model_forms.py:220 -#: dcim/forms/model_forms.py:297 +#: netbox/dcim/forms/bulk_edit.py:299 netbox/dcim/forms/model_forms.py:220 +#: netbox/dcim/forms/model_forms.py:297 msgid "Outer Dimensions" msgstr "Äußere Abmessungen" -#: dcim/forms/bulk_edit.py:301 dcim/forms/model_forms.py:222 -#: dcim/forms/model_forms.py:299 templates/dcim/device.html:315 -#: templates/dcim/inc/panels/racktype_dimensions.html:3 +#: 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/templates/dcim/inc/panels/racktype_dimensions.html:3 msgid "Dimensions" msgstr "Abmessungen" -#: dcim/forms/bulk_edit.py:303 dcim/forms/filtersets.py:306 -#: dcim/forms/filtersets.py:326 dcim/forms/model_forms.py:224 -#: templates/dcim/inc/panels/racktype_numbering.html:3 +#: 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/templates/dcim/inc/panels/racktype_numbering.html:3 msgid "Numbering" msgstr "Nummerierung" -#: dcim/forms/bulk_edit.py:357 dcim/forms/bulk_edit.py:1262 -#: dcim/forms/bulk_edit.py:1655 dcim/forms/bulk_import.py:253 -#: dcim/forms/bulk_import.py:1076 dcim/forms/filtersets.py:367 -#: dcim/forms/filtersets.py:777 dcim/forms/filtersets.py:1534 -#: dcim/forms/model_forms.py:251 dcim/forms/model_forms.py:1070 -#: dcim/forms/model_forms.py:1510 dcim/forms/object_import.py:181 -#: dcim/tables/devices.py:169 dcim/tables/devices.py:809 -#: dcim/tables/devices.py:937 dcim/tables/devicetypes.py:304 -#: dcim/tables/racks.py:129 extras/filtersets.py:552 -#: ipam/forms/bulk_edit.py:261 ipam/forms/bulk_edit.py:311 -#: ipam/forms/bulk_edit.py:359 ipam/forms/bulk_edit.py:511 -#: ipam/forms/bulk_import.py:197 ipam/forms/bulk_import.py:262 -#: ipam/forms/bulk_import.py:298 ipam/forms/bulk_import.py:455 -#: ipam/forms/filtersets.py:237 ipam/forms/filtersets.py:289 -#: ipam/forms/filtersets.py:360 ipam/forms/filtersets.py:509 -#: ipam/forms/model_forms.py:188 ipam/forms/model_forms.py:221 -#: ipam/forms/model_forms.py:250 ipam/forms/model_forms.py:643 -#: ipam/tables/ip.py:258 ipam/tables/ip.py:316 ipam/tables/ip.py:367 -#: ipam/tables/vlans.py:130 ipam/tables/vlans.py:235 -#: templates/dcim/device.html:182 -#: templates/dcim/inc/panels/inventory_items.html:20 -#: templates/dcim/interface.html:223 templates/dcim/inventoryitem.html:36 -#: templates/dcim/rack.html:49 templates/ipam/ipaddress.html:41 -#: templates/ipam/iprange.html:50 templates/ipam/prefix.html:77 -#: templates/ipam/role.html:19 templates/ipam/vlan.html:52 -#: templates/virtualization/virtualmachine.html:23 -#: templates/vpn/tunneltermination.html:17 -#: templates/wireless/inc/wirelesslink_interface.html:20 -#: tenancy/forms/bulk_edit.py:142 tenancy/forms/filtersets.py:107 -#: tenancy/forms/model_forms.py:137 tenancy/tables/contacts.py:102 -#: virtualization/forms/bulk_edit.py:145 -#: virtualization/forms/bulk_import.py:106 -#: virtualization/forms/filtersets.py:157 -#: virtualization/forms/model_forms.py:195 -#: virtualization/tables/virtualmachines.py:75 vpn/forms/bulk_edit.py:87 -#: vpn/forms/bulk_import.py:81 vpn/forms/filtersets.py:85 -#: vpn/forms/model_forms.py:78 vpn/forms/model_forms.py:113 -#: vpn/tables/tunnels.py:82 +#: netbox/dcim/forms/bulk_edit.py: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" -#: dcim/forms/bulk_edit.py:364 dcim/forms/bulk_edit.py:712 -#: dcim/forms/bulk_edit.py:764 templates/dcim/device.html:104 -#: templates/dcim/module.html:77 templates/dcim/modulebay.html:70 -#: templates/dcim/rack.html:57 templates/virtualization/virtualmachine.html:35 +#: netbox/dcim/forms/bulk_edit.py:363 netbox/dcim/forms/bulk_import.py:260 +#: netbox/dcim/forms/filtersets.py:380 +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/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" -#: dcim/forms/bulk_edit.py:367 dcim/forms/filtersets.py:387 -#: dcim/forms/filtersets.py:813 dcim/forms/filtersets.py:967 -#: dcim/forms/filtersets.py:1546 +#: 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 msgid "Asset tag" msgstr "Asset-Tag" -#: dcim/forms/bulk_edit.py:411 dcim/forms/bulk_edit.py:524 -#: dcim/forms/bulk_edit.py:568 dcim/forms/bulk_edit.py:705 -#: dcim/forms/bulk_import.py:277 dcim/forms/bulk_import.py:410 -#: dcim/forms/bulk_import.py:580 dcim/forms/filtersets.py:280 -#: dcim/forms/filtersets.py:511 dcim/forms/filtersets.py:669 -#: dcim/forms/filtersets.py:804 templates/dcim/device.html:98 -#: templates/dcim/devicetype.html:65 templates/dcim/moduletype.html:41 -#: templates/dcim/rack.html:65 templates/dcim/racktype.html:28 +#: 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/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 "Luftstrom" -#: dcim/forms/bulk_edit.py:440 dcim/forms/bulk_edit.py:910 -#: dcim/forms/bulk_import.py:322 dcim/forms/bulk_import.py:325 -#: dcim/forms/bulk_import.py:553 dcim/forms/bulk_import.py:1358 -#: dcim/forms/bulk_import.py:1362 dcim/forms/filtersets.py:104 -#: dcim/forms/filtersets.py:324 dcim/forms/filtersets.py:405 -#: dcim/forms/filtersets.py:419 dcim/forms/filtersets.py:457 -#: dcim/forms/filtersets.py:772 dcim/forms/filtersets.py:1035 -#: dcim/forms/filtersets.py:1167 dcim/forms/model_forms.py:264 -#: dcim/forms/model_forms.py:306 dcim/forms/model_forms.py:479 -#: dcim/forms/model_forms.py:755 dcim/forms/object_create.py:400 -#: dcim/tables/devices.py:161 dcim/tables/power.py:70 dcim/tables/racks.py:217 -#: ipam/forms/filtersets.py:442 templates/dcim/device.html:30 -#: templates/dcim/inc/cable_termination.html:16 -#: templates/dcim/powerfeed.html:28 templates/dcim/rack.html:13 -#: templates/dcim/rack/base.html:4 templates/dcim/rackreservation.html:19 -#: templates/dcim/rackreservation.html:36 -#: virtualization/forms/model_forms.py:113 +#: netbox/dcim/forms/bulk_edit.py: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/templates/dcim/device.html:30 +#: netbox/templates/dcim/inc/cable_termination.html:16 +#: netbox/templates/dcim/powerfeed.html:28 netbox/templates/dcim/rack.html:13 +#: netbox/templates/dcim/rack/base.html:4 +#: netbox/templates/dcim/rackreservation.html:19 +#: netbox/templates/dcim/rackreservation.html:36 +#: netbox/virtualization/forms/model_forms.py:113 msgid "Rack" msgstr "Rack" -#: dcim/forms/bulk_edit.py:444 dcim/forms/bulk_edit.py:730 -#: dcim/forms/filtersets.py:325 dcim/forms/filtersets.py:398 -#: dcim/forms/filtersets.py:481 dcim/forms/filtersets.py:608 -#: dcim/forms/filtersets.py:721 dcim/forms/filtersets.py:942 -#: dcim/forms/model_forms.py:670 dcim/forms/model_forms.py:1580 -#: templates/dcim/device_edit.html:20 +#: 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/templates/dcim/device_edit.html:20 msgid "Hardware" msgstr "Hardware" -#: dcim/forms/bulk_edit.py:500 dcim/forms/bulk_import.py:377 -#: dcim/forms/filtersets.py:499 dcim/forms/model_forms.py:353 +#: 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 msgid "Default platform" msgstr "Standard-Betriebssystem" -#: dcim/forms/bulk_edit.py:505 dcim/forms/bulk_edit.py:564 -#: dcim/forms/filtersets.py:502 dcim/forms/filtersets.py:622 +#: 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 msgid "Part number" msgstr "Artikelnummer" -#: dcim/forms/bulk_edit.py:509 +#: netbox/dcim/forms/bulk_edit.py:515 msgid "U height" msgstr "Höheneinheit" -#: dcim/forms/bulk_edit.py:521 dcim/tables/devicetypes.py:102 +#: netbox/dcim/forms/bulk_edit.py:527 netbox/dcim/tables/devicetypes.py:102 msgid "Exclude from utilization" msgstr "Von der Nutzung ausschließen" -#: dcim/forms/bulk_edit.py:550 dcim/forms/model_forms.py:368 -#: dcim/tables/devicetypes.py:77 templates/dcim/device.html:88 -#: templates/dcim/devicebay.html:52 templates/dcim/module.html:61 +#: 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/templates/dcim/devicebay.html:52 +#: netbox/templates/dcim/module.html:61 msgid "Device Type" msgstr "Gerätetyp" -#: dcim/forms/bulk_edit.py:592 dcim/forms/model_forms.py:401 -#: dcim/tables/modules.py:17 dcim/tables/modules.py:65 -#: templates/dcim/module.html:65 templates/dcim/modulebay.html:66 -#: templates/dcim/moduletype.html:22 +#: 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/templates/dcim/module.html:65 +#: netbox/templates/dcim/modulebay.html:66 +#: netbox/templates/dcim/moduletype.html:22 msgid "Module Type" msgstr "Modultyp" -#: dcim/forms/bulk_edit.py:596 dcim/forms/model_forms.py:371 -#: dcim/forms/model_forms.py:402 templates/dcim/devicetype.html:11 +#: netbox/dcim/forms/bulk_edit.py:602 netbox/dcim/forms/model_forms.py:371 +#: netbox/dcim/forms/model_forms.py:402 +#: netbox/templates/dcim/devicetype.html:11 msgid "Chassis" msgstr "Gehäuse" -#: dcim/forms/bulk_edit.py:610 dcim/models/devices.py:484 -#: dcim/tables/devices.py:67 +#: netbox/dcim/forms/bulk_edit.py:616 netbox/dcim/models/devices.py:484 +#: netbox/dcim/tables/devices.py:67 msgid "VM role" msgstr "VM-Rolle" -#: dcim/forms/bulk_edit.py:613 dcim/forms/bulk_edit.py:637 -#: dcim/forms/bulk_edit.py:720 dcim/forms/bulk_import.py:434 -#: dcim/forms/bulk_import.py:438 dcim/forms/bulk_import.py:457 -#: dcim/forms/bulk_import.py:461 dcim/forms/bulk_import.py:586 -#: dcim/forms/bulk_import.py:590 dcim/forms/filtersets.py:689 -#: dcim/forms/filtersets.py:705 dcim/forms/filtersets.py:823 -#: dcim/forms/model_forms.py:415 dcim/forms/model_forms.py:441 -#: dcim/forms/model_forms.py:555 virtualization/forms/bulk_import.py:132 -#: virtualization/forms/bulk_import.py:133 -#: virtualization/forms/filtersets.py:188 -#: virtualization/forms/model_forms.py:215 +#: 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 msgid "Config template" msgstr "Konfigurationsvorlage" -#: dcim/forms/bulk_edit.py:661 dcim/forms/bulk_edit.py:1061 -#: dcim/forms/bulk_import.py:492 dcim/forms/filtersets.py:114 -#: dcim/forms/model_forms.py:501 dcim/forms/model_forms.py:872 -#: dcim/forms/model_forms.py:889 extras/filtersets.py:547 +#: 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 msgid "Device type" msgstr "Gerätetyp" -#: dcim/forms/bulk_edit.py:672 dcim/forms/bulk_import.py:473 -#: dcim/forms/filtersets.py:119 dcim/forms/model_forms.py:509 +#: 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 msgid "Device role" msgstr "Geräterolle" -#: dcim/forms/bulk_edit.py:695 dcim/forms/bulk_import.py:498 -#: dcim/forms/filtersets.py:796 dcim/forms/model_forms.py:451 -#: dcim/forms/model_forms.py:513 dcim/tables/devices.py:182 -#: extras/filtersets.py:563 templates/dcim/device.html:186 -#: templates/dcim/platform.html:26 -#: templates/virtualization/virtualmachine.html:27 -#: virtualization/forms/bulk_edit.py:160 -#: virtualization/forms/bulk_import.py:122 -#: virtualization/forms/filtersets.py:168 -#: virtualization/forms/model_forms.py:203 -#: virtualization/tables/virtualmachines.py:79 +#: 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/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 msgid "Platform" msgstr "Betriebssystem" -#: dcim/forms/bulk_edit.py:728 dcim/forms/bulk_edit.py:1281 -#: dcim/forms/bulk_edit.py:1650 dcim/forms/bulk_edit.py:1696 -#: dcim/forms/bulk_import.py:641 dcim/forms/bulk_import.py:703 -#: dcim/forms/bulk_import.py:729 dcim/forms/bulk_import.py:755 -#: dcim/forms/bulk_import.py:775 dcim/forms/bulk_import.py:828 -#: dcim/forms/bulk_import.py:946 dcim/forms/bulk_import.py:994 -#: dcim/forms/bulk_import.py:1011 dcim/forms/bulk_import.py:1023 -#: dcim/forms/bulk_import.py:1071 dcim/forms/bulk_import.py:1422 -#: dcim/forms/connections.py:24 dcim/forms/filtersets.py:131 -#: dcim/forms/filtersets.py:921 dcim/forms/filtersets.py:1051 -#: dcim/forms/filtersets.py:1242 dcim/forms/filtersets.py:1267 -#: dcim/forms/filtersets.py:1291 dcim/forms/filtersets.py:1311 -#: dcim/forms/filtersets.py:1334 dcim/forms/filtersets.py:1444 -#: dcim/forms/filtersets.py:1469 dcim/forms/filtersets.py:1493 -#: dcim/forms/filtersets.py:1511 dcim/forms/filtersets.py:1528 -#: dcim/forms/filtersets.py:1592 dcim/forms/filtersets.py:1616 -#: dcim/forms/filtersets.py:1640 dcim/forms/model_forms.py:633 -#: dcim/forms/model_forms.py:849 dcim/forms/model_forms.py:1208 -#: dcim/forms/model_forms.py:1664 dcim/forms/object_create.py:257 -#: dcim/tables/connections.py:22 dcim/tables/connections.py:41 -#: dcim/tables/connections.py:60 dcim/tables/devices.py:285 -#: dcim/tables/devices.py:371 dcim/tables/devices.py:412 -#: dcim/tables/devices.py:454 dcim/tables/devices.py:505 -#: dcim/tables/devices.py:597 dcim/tables/devices.py:697 -#: dcim/tables/devices.py:754 dcim/tables/devices.py:801 -#: dcim/tables/devices.py:861 dcim/tables/devices.py:930 -#: dcim/tables/devices.py:1057 dcim/tables/modules.py:52 -#: extras/forms/filtersets.py:321 ipam/forms/bulk_import.py:304 -#: ipam/forms/bulk_import.py:481 ipam/forms/filtersets.py:551 -#: ipam/forms/model_forms.py:319 ipam/forms/model_forms.py:679 -#: ipam/forms/model_forms.py:712 ipam/forms/model_forms.py:738 -#: ipam/tables/vlans.py:180 templates/dcim/consoleport.html:20 -#: templates/dcim/consoleserverport.html:20 templates/dcim/device.html:15 -#: templates/dcim/device.html:130 templates/dcim/device_edit.html:10 -#: templates/dcim/devicebay.html:20 templates/dcim/devicebay.html:48 -#: templates/dcim/frontport.html:20 templates/dcim/interface.html:30 -#: templates/dcim/interface.html:161 templates/dcim/inventoryitem.html:20 -#: templates/dcim/module.html:57 templates/dcim/modulebay.html:20 -#: templates/dcim/poweroutlet.html:20 templates/dcim/powerport.html:20 -#: templates/dcim/rearport.html:20 templates/dcim/virtualchassis.html:65 -#: templates/dcim/virtualchassis_edit.html:51 -#: templates/dcim/virtualdevicecontext.html:22 -#: templates/virtualization/virtualmachine.html:114 -#: templates/vpn/tunneltermination.html:23 -#: templates/wireless/inc/wirelesslink_interface.html:6 -#: virtualization/filtersets.py:167 virtualization/forms/bulk_edit.py:137 -#: virtualization/forms/bulk_import.py:99 -#: virtualization/forms/filtersets.py:128 -#: virtualization/forms/model_forms.py:185 -#: virtualization/tables/virtualmachines.py:71 vpn/choices.py:44 -#: vpn/forms/bulk_import.py:86 vpn/forms/bulk_import.py:283 -#: vpn/forms/filtersets.py:275 vpn/forms/model_forms.py:90 -#: vpn/forms/model_forms.py:125 vpn/forms/model_forms.py:236 -#: vpn/forms/model_forms.py:453 wireless/forms/model_forms.py:99 -#: wireless/forms/model_forms.py:141 wireless/tables/wirelesslan.py:75 +#: netbox/dcim/forms/bulk_edit.py: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/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 +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:52 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" -#: dcim/forms/bulk_edit.py:731 templates/extras/dashboard/widget_config.html:7 -#: virtualization/forms/bulk_edit.py:191 +#: netbox/dcim/forms/bulk_edit.py:745 +#: netbox/templates/extras/dashboard/widget_config.html:7 +#: netbox/virtualization/forms/bulk_edit.py:191 msgid "Configuration" msgstr "Konfiguration" -#: dcim/forms/bulk_edit.py:745 dcim/forms/bulk_import.py:653 -#: dcim/forms/model_forms.py:647 dcim/forms/model_forms.py:897 +#: netbox/dcim/forms/bulk_edit.py:746 netbox/netbox/navigation/menu.py:243 +#: 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 msgid "Module type" msgstr "Modultyp" -#: dcim/forms/bulk_edit.py:799 dcim/forms/bulk_edit.py:984 -#: dcim/forms/bulk_edit.py:1003 dcim/forms/bulk_edit.py:1026 -#: dcim/forms/bulk_edit.py:1068 dcim/forms/bulk_edit.py:1112 -#: dcim/forms/bulk_edit.py:1163 dcim/forms/bulk_edit.py:1190 -#: dcim/forms/bulk_edit.py:1217 dcim/forms/bulk_edit.py:1235 -#: dcim/forms/bulk_edit.py:1253 dcim/forms/filtersets.py:67 -#: dcim/forms/object_create.py:46 templates/dcim/cable.html:32 -#: templates/dcim/consoleport.html:32 templates/dcim/consoleserverport.html:32 -#: templates/dcim/devicebay.html:28 templates/dcim/frontport.html:32 -#: templates/dcim/inc/panels/inventory_items.html:19 -#: templates/dcim/interface.html:42 templates/dcim/inventoryitem.html:32 -#: templates/dcim/modulebay.html:34 templates/dcim/poweroutlet.html:32 -#: templates/dcim/powerport.html:32 templates/dcim/rearport.html:32 -#: templates/extras/customfield.html:26 templates/generic/bulk_import.html:162 +#: netbox/dcim/forms/bulk_edit.py: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/object_create.py:46 netbox/templates/dcim/cable.html:32 +#: netbox/templates/dcim/consoleport.html:32 +#: netbox/templates/dcim/consoleserverport.html:32 +#: netbox/templates/dcim/devicebay.html:28 +#: netbox/templates/dcim/frontport.html:32 +#: netbox/templates/dcim/inc/panels/inventory_items.html:19 +#: netbox/templates/dcim/interface.html:42 +#: netbox/templates/dcim/inventoryitem.html:32 +#: netbox/templates/dcim/modulebay.html:34 +#: netbox/templates/dcim/poweroutlet.html:32 +#: netbox/templates/dcim/powerport.html:32 +#: netbox/templates/dcim/rearport.html:32 +#: netbox/templates/extras/customfield.html:26 +#: netbox/templates/generic/bulk_import.html:162 msgid "Label" msgstr "Label" -#: dcim/forms/bulk_edit.py:808 dcim/forms/filtersets.py:1068 -#: templates/dcim/cable.html:50 +#: netbox/dcim/forms/bulk_edit.py:823 netbox/dcim/forms/filtersets.py:1068 +#: netbox/templates/dcim/cable.html:50 msgid "Length" msgstr "Länge" -#: dcim/forms/bulk_edit.py:813 dcim/forms/bulk_import.py:1226 -#: dcim/forms/bulk_import.py:1229 dcim/forms/filtersets.py:1072 +#: 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 msgid "Length unit" msgstr "Längeneinheit" -#: dcim/forms/bulk_edit.py:837 templates/dcim/virtualchassis.html:23 +#: netbox/dcim/forms/bulk_edit.py:852 +#: netbox/templates/dcim/virtualchassis.html:23 msgid "Domain" msgstr "Domäne" -#: dcim/forms/bulk_edit.py:905 dcim/forms/bulk_import.py:1345 -#: dcim/forms/filtersets.py:1158 dcim/forms/model_forms.py:750 +#: 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 msgid "Power panel" msgstr "Stromverteiler" -#: dcim/forms/bulk_edit.py:927 dcim/forms/bulk_import.py:1381 -#: dcim/forms/filtersets.py:1180 templates/dcim/powerfeed.html:83 +#: 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 msgid "Supply" msgstr "Versorgung" -#: dcim/forms/bulk_edit.py:933 dcim/forms/bulk_import.py:1386 -#: dcim/forms/filtersets.py:1185 templates/dcim/powerfeed.html:95 +#: 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 msgid "Phase" msgstr "Phase" -#: dcim/forms/bulk_edit.py:939 dcim/forms/filtersets.py:1190 -#: templates/dcim/powerfeed.html:87 +#: netbox/dcim/forms/bulk_edit.py:954 netbox/dcim/forms/filtersets.py:1190 +#: netbox/templates/dcim/powerfeed.html:87 msgid "Voltage" msgstr "Spannung" -#: dcim/forms/bulk_edit.py:943 dcim/forms/filtersets.py:1194 -#: templates/dcim/powerfeed.html:91 +#: netbox/dcim/forms/bulk_edit.py:958 netbox/dcim/forms/filtersets.py:1194 +#: netbox/templates/dcim/powerfeed.html:91 msgid "Amperage" msgstr "Stromstärke" -#: dcim/forms/bulk_edit.py:947 dcim/forms/filtersets.py:1198 +#: netbox/dcim/forms/bulk_edit.py:962 netbox/dcim/forms/filtersets.py:1198 msgid "Max utilization" msgstr "Max. Auslastung" -#: dcim/forms/bulk_edit.py:1036 +#: netbox/dcim/forms/bulk_edit.py:1051 msgid "Maximum draw" msgstr "Maximale Auslastung" -#: dcim/forms/bulk_edit.py:1039 dcim/models/device_component_templates.py:282 -#: dcim/models/device_components.py:356 +#: netbox/dcim/forms/bulk_edit.py:1054 +#: netbox/dcim/models/device_component_templates.py:282 +#: netbox/dcim/models/device_components.py:356 msgid "Maximum power draw (watts)" msgstr "Maximale Leistungsaufnahme (Watt)" -#: dcim/forms/bulk_edit.py:1042 +#: netbox/dcim/forms/bulk_edit.py:1057 msgid "Allocated draw" msgstr "Zugewiesene Leistungsaufnahme" -#: dcim/forms/bulk_edit.py:1045 dcim/models/device_component_templates.py:289 -#: dcim/models/device_components.py:363 +#: netbox/dcim/forms/bulk_edit.py:1060 +#: netbox/dcim/models/device_component_templates.py:289 +#: netbox/dcim/models/device_components.py:363 msgid "Allocated power draw (watts)" msgstr "Zugewiesene Leistungsaufnahme (Watt)" -#: dcim/forms/bulk_edit.py:1078 dcim/forms/bulk_import.py:786 -#: dcim/forms/model_forms.py:953 dcim/forms/model_forms.py:1278 -#: dcim/forms/model_forms.py:1567 dcim/forms/object_import.py:55 +#: 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 msgid "Power port" msgstr "Stromanschluss" -#: dcim/forms/bulk_edit.py:1083 dcim/forms/bulk_import.py:793 +#: netbox/dcim/forms/bulk_edit.py:1098 netbox/dcim/forms/bulk_import.py:815 msgid "Feed leg" msgstr "Phasenlage" -#: dcim/forms/bulk_edit.py:1129 dcim/forms/bulk_edit.py:1440 +#: netbox/dcim/forms/bulk_edit.py:1144 netbox/dcim/forms/bulk_edit.py:1462 msgid "Management only" msgstr "Nur Management" -#: dcim/forms/bulk_edit.py:1139 dcim/forms/bulk_edit.py:1446 -#: dcim/forms/bulk_import.py:876 dcim/forms/filtersets.py:1394 -#: dcim/forms/object_import.py:90 -#: dcim/models/device_component_templates.py:437 -#: dcim/models/device_components.py:670 +#: 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/object_import.py:90 +#: netbox/dcim/models/device_component_templates.py:437 +#: netbox/dcim/models/device_components.py:670 msgid "PoE mode" msgstr "PoE-Modus" -#: dcim/forms/bulk_edit.py:1145 dcim/forms/bulk_edit.py:1452 -#: dcim/forms/bulk_import.py:882 dcim/forms/filtersets.py:1399 -#: dcim/forms/object_import.py:95 -#: dcim/models/device_component_templates.py:443 -#: dcim/models/device_components.py:676 +#: 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/object_import.py:95 +#: netbox/dcim/models/device_component_templates.py:443 +#: netbox/dcim/models/device_components.py:676 msgid "PoE type" msgstr "PoE-Typ" -#: dcim/forms/bulk_edit.py:1151 dcim/forms/filtersets.py:1404 -#: dcim/forms/object_import.py:100 +#: netbox/dcim/forms/bulk_edit.py:1166 netbox/dcim/forms/filtersets.py:1404 +#: netbox/dcim/forms/object_import.py:100 msgid "Wireless role" msgstr "WLAN Funktion" -#: dcim/forms/bulk_edit.py:1288 dcim/forms/model_forms.py:669 -#: dcim/forms/model_forms.py:1223 dcim/tables/devices.py:313 -#: templates/dcim/consoleport.html:24 templates/dcim/consoleserverport.html:24 -#: templates/dcim/frontport.html:24 templates/dcim/interface.html:34 -#: templates/dcim/module.html:54 templates/dcim/modulebay.html:26 -#: templates/dcim/modulebay.html:58 templates/dcim/poweroutlet.html:24 -#: templates/dcim/powerport.html:24 templates/dcim/rearport.html:24 +#: 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/templates/dcim/consoleport.html:24 +#: netbox/templates/dcim/consoleserverport.html:24 +#: netbox/templates/dcim/frontport.html:24 +#: netbox/templates/dcim/interface.html:34 +#: netbox/templates/dcim/module.html:54 +#: netbox/templates/dcim/modulebay.html:26 +#: netbox/templates/dcim/modulebay.html:58 +#: netbox/templates/dcim/poweroutlet.html:24 +#: netbox/templates/dcim/powerport.html:24 +#: netbox/templates/dcim/rearport.html:24 msgid "Module" msgstr "Modul" -#: dcim/forms/bulk_edit.py:1420 dcim/tables/devices.py:665 -#: templates/dcim/interface.html:110 +#: netbox/dcim/forms/bulk_edit.py:1442 netbox/dcim/tables/devices.py:665 +#: netbox/templates/dcim/interface.html:110 msgid "LAG" msgstr "LAG" -#: dcim/forms/bulk_edit.py:1425 dcim/forms/model_forms.py:1305 +#: netbox/dcim/forms/bulk_edit.py:1447 netbox/dcim/forms/model_forms.py:1312 msgid "Virtual device contexts" msgstr "Virtual Device Contexts" -#: dcim/forms/bulk_edit.py:1431 dcim/forms/bulk_import.py:714 -#: dcim/forms/bulk_import.py:740 dcim/forms/filtersets.py:1252 -#: dcim/forms/filtersets.py:1277 dcim/forms/filtersets.py:1358 -#: dcim/tables/devices.py:610 -#: templates/circuits/inc/circuit_termination_fields.html:67 -#: templates/dcim/consoleport.html:40 templates/dcim/consoleserverport.html:40 +#: 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/templates/dcim/consoleport.html:40 +#: netbox/templates/dcim/consoleserverport.html:40 msgid "Speed" msgstr "Geschwindigkeit" -#: dcim/forms/bulk_edit.py:1460 dcim/forms/bulk_import.py:885 -#: templates/vpn/ikepolicy.html:25 templates/vpn/ipsecprofile.html:21 -#: templates/vpn/ipsecprofile.html:48 virtualization/forms/bulk_edit.py:233 -#: virtualization/forms/bulk_import.py:165 vpn/forms/bulk_edit.py:146 -#: vpn/forms/bulk_edit.py:232 vpn/forms/bulk_import.py:176 -#: vpn/forms/bulk_import.py:234 vpn/forms/filtersets.py:135 -#: vpn/forms/filtersets.py:178 vpn/forms/filtersets.py:192 -#: vpn/tables/crypto.py:64 vpn/tables/crypto.py:162 +#: netbox/dcim/forms/bulk_edit.py:1482 netbox/dcim/forms/bulk_import.py:907 +#: netbox/templates/vpn/ikepolicy.html:25 +#: netbox/templates/vpn/ipsecprofile.html:21 +#: netbox/templates/vpn/ipsecprofile.html:48 +#: netbox/virtualization/forms/bulk_edit.py:233 +#: netbox/virtualization/forms/bulk_import.py:165 +#: netbox/vpn/forms/bulk_edit.py:146 netbox/vpn/forms/bulk_edit.py:232 +#: netbox/vpn/forms/bulk_import.py:176 netbox/vpn/forms/bulk_import.py:234 +#: netbox/vpn/forms/filtersets.py:135 netbox/vpn/forms/filtersets.py:178 +#: netbox/vpn/forms/filtersets.py:192 netbox/vpn/tables/crypto.py:64 +#: netbox/vpn/tables/crypto.py:162 msgid "Mode" msgstr "Modus" -#: dcim/forms/bulk_edit.py:1468 dcim/forms/model_forms.py:1354 -#: ipam/forms/bulk_import.py:178 ipam/forms/filtersets.py:498 -#: ipam/models/vlans.py:84 virtualization/forms/bulk_edit.py:240 -#: virtualization/forms/model_forms.py:321 +#: 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 msgid "VLAN group" msgstr "VLAN-Gruppe" -#: dcim/forms/bulk_edit.py:1476 dcim/forms/model_forms.py:1360 -#: dcim/tables/devices.py:579 virtualization/forms/bulk_edit.py:248 -#: virtualization/forms/model_forms.py:326 +#: 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 msgid "Untagged VLAN" msgstr "Untagged VLAN" -#: dcim/forms/bulk_edit.py:1484 dcim/forms/model_forms.py:1369 -#: dcim/tables/devices.py:585 virtualization/forms/bulk_edit.py:256 -#: virtualization/forms/model_forms.py:335 +#: 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 "Getaggte VLANs" -#: dcim/forms/bulk_edit.py:1494 dcim/forms/model_forms.py:1341 +#: netbox/dcim/forms/bulk_edit.py:1511 +msgid "Add tagged VLANs" +msgstr "Hinzufügen eines getaggten VLANs" + +#: netbox/dcim/forms/bulk_edit.py:1520 +msgid "Remove tagged VLANs" +msgstr "Getaggte VLANs entfernen" + +#: netbox/dcim/forms/bulk_edit.py:1536 netbox/dcim/forms/model_forms.py:1348 msgid "Wireless LAN group" msgstr "WLAN-Gruppe" -#: dcim/forms/bulk_edit.py:1499 dcim/forms/model_forms.py:1346 -#: dcim/tables/devices.py:619 netbox/navigation/menu.py:146 -#: templates/dcim/interface.html:280 wireless/tables/wirelesslan.py:24 +#: 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/wireless/tables/wirelesslan.py:24 msgid "Wireless LANs" msgstr "WLANs" -#: dcim/forms/bulk_edit.py:1508 dcim/forms/filtersets.py:1328 -#: dcim/forms/model_forms.py:1390 ipam/forms/bulk_edit.py:286 -#: ipam/forms/bulk_edit.py:378 ipam/forms/filtersets.py:169 -#: templates/dcim/interface.html:122 templates/ipam/prefix.html:95 -#: virtualization/forms/model_forms.py:349 +#: netbox/dcim/forms/bulk_edit.py: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 msgid "Addressing" msgstr "Adressierung" -#: dcim/forms/bulk_edit.py:1509 dcim/forms/filtersets.py:720 -#: dcim/forms/model_forms.py:1391 virtualization/forms/model_forms.py:350 +#: 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 msgid "Operation" msgstr "Dienst / Port" -#: dcim/forms/bulk_edit.py:1510 dcim/forms/filtersets.py:1329 -#: dcim/forms/model_forms.py:987 dcim/forms/model_forms.py:1393 +#: 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 msgid "PoE" msgstr "PoE" -#: dcim/forms/bulk_edit.py:1511 dcim/forms/model_forms.py:1392 -#: templates/dcim/interface.html:99 virtualization/forms/bulk_edit.py:267 -#: virtualization/forms/model_forms.py:351 +#: 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 msgid "Related Interfaces" msgstr "Verwandte Schnittstellen" -#: dcim/forms/bulk_edit.py:1512 dcim/forms/model_forms.py:1394 -#: virtualization/forms/bulk_edit.py:268 -#: virtualization/forms/model_forms.py:352 +#: 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 msgid "802.1Q Switching" msgstr "802.1Q-Switching" -#: dcim/forms/bulk_edit.py:1574 dcim/forms/bulk_edit.py:1576 +#: netbox/dcim/forms/bulk_edit.py:1558 +msgid "Add/Remove" +msgstr "Hinzufügen/Entfernen" + +#: netbox/dcim/forms/bulk_edit.py:1617 netbox/dcim/forms/bulk_edit.py:1619 msgid "Interface mode must be specified to assign VLANs" msgstr "Der Schnittstellenmodus muss gesetzt werden, um VLANs zuzuweisen" -#: dcim/forms/bulk_edit.py:1581 dcim/forms/common.py:50 +#: netbox/dcim/forms/bulk_edit.py:1624 netbox/dcim/forms/common.py:50 msgid "An access interface cannot have tagged VLANs assigned." msgstr "" "Einer Endgeräteschnittstelle (Access) können keine getaggten VLANs " "zugewiesen sein." -#: dcim/forms/bulk_import.py:64 +#: netbox/dcim/forms/bulk_import.py:64 msgid "Name of parent region" msgstr "Name der übergeordneten Region" -#: dcim/forms/bulk_import.py:78 +#: netbox/dcim/forms/bulk_import.py:78 msgid "Name of parent site group" msgstr "Name der übergeordneten Standortgruppe" -#: dcim/forms/bulk_import.py:97 +#: netbox/dcim/forms/bulk_import.py:97 msgid "Assigned region" msgstr "Zugewiesene Region" -#: dcim/forms/bulk_import.py:104 tenancy/forms/bulk_import.py:44 -#: tenancy/forms/bulk_import.py:85 wireless/forms/bulk_import.py:40 +#: netbox/dcim/forms/bulk_import.py:104 netbox/tenancy/forms/bulk_import.py:44 +#: netbox/tenancy/forms/bulk_import.py:85 +#: netbox/wireless/forms/bulk_import.py:40 msgid "Assigned group" msgstr "Zugewiesene Gruppe" -#: dcim/forms/bulk_import.py:123 +#: netbox/dcim/forms/bulk_import.py:123 msgid "available options" msgstr "verfügbare Optionen" -#: dcim/forms/bulk_import.py:134 dcim/forms/bulk_import.py:543 -#: dcim/forms/bulk_import.py:1342 ipam/forms/bulk_import.py:175 -#: ipam/forms/bulk_import.py:433 virtualization/forms/bulk_import.py:63 -#: virtualization/forms/bulk_import.py:89 +#: 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 msgid "Assigned site" msgstr "Zugewiesener Standort" -#: dcim/forms/bulk_import.py:141 +#: netbox/dcim/forms/bulk_import.py:141 msgid "Parent location" msgstr "Übergeordnete Lokation" -#: dcim/forms/bulk_import.py:143 +#: netbox/dcim/forms/bulk_import.py:143 msgid "Location not found." msgstr "Lokation wurde nicht gefunden." -#: dcim/forms/bulk_import.py:185 +#: netbox/dcim/forms/bulk_import.py:185 msgid "The manufacturer of this rack type" msgstr "Der Hersteller dieses Racktyps" -#: dcim/forms/bulk_import.py:196 +#: netbox/dcim/forms/bulk_import.py:196 msgid "The lowest-numbered position in the rack" msgstr "Die Position mit der niedrigsten Nummer im Rack" -#: dcim/forms/bulk_import.py:201 dcim/forms/bulk_import.py:268 +#: netbox/dcim/forms/bulk_import.py:201 netbox/dcim/forms/bulk_import.py:276 msgid "Rail-to-rail width (in inches)" msgstr "Breite von Schiene zu Schiene (in Zoll)" -#: dcim/forms/bulk_import.py:207 dcim/forms/bulk_import.py:274 +#: netbox/dcim/forms/bulk_import.py:207 netbox/dcim/forms/bulk_import.py:286 msgid "Unit for outer dimensions" msgstr "Einheit für Außenmaße" -#: dcim/forms/bulk_import.py:213 dcim/forms/bulk_import.py:286 +#: netbox/dcim/forms/bulk_import.py:213 netbox/dcim/forms/bulk_import.py:298 msgid "Unit for rack weights" msgstr "Einheit für Rackgewichte" -#: dcim/forms/bulk_import.py:245 +#: netbox/dcim/forms/bulk_import.py:245 msgid "Name of assigned tenant" msgstr "Name des zugewiesenen Mandanten " -#: dcim/forms/bulk_import.py:257 +#: netbox/dcim/forms/bulk_import.py:257 msgid "Name of assigned role" msgstr "Name der zugewiesenen Rolle" -#: dcim/forms/bulk_import.py:280 dcim/forms/bulk_import.py:413 -#: dcim/forms/bulk_import.py:583 +#: netbox/dcim/forms/bulk_import.py:264 +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 msgid "Airflow direction" msgstr "Richtung des Luftstroms" -#: dcim/forms/bulk_import.py:312 +#: netbox/dcim/forms/bulk_import.py:324 +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 +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 msgid "Parent site" msgstr "Übergeordneter Standort" -#: dcim/forms/bulk_import.py:319 dcim/forms/bulk_import.py:1355 +#: netbox/dcim/forms/bulk_import.py:341 netbox/dcim/forms/bulk_import.py:1377 msgid "Rack's location (if any)" msgstr "Lokation des Racks (falls vorhanden)" -#: dcim/forms/bulk_import.py:328 dcim/forms/model_forms.py:311 -#: dcim/tables/racks.py:222 templates/dcim/rackreservation.html:12 -#: templates/dcim/rackreservation.html:45 +#: netbox/dcim/forms/bulk_import.py:350 netbox/dcim/forms/model_forms.py:311 +#: netbox/dcim/tables/racks.py:222 +#: netbox/templates/dcim/rackreservation.html:12 +#: netbox/templates/dcim/rackreservation.html:45 msgid "Units" msgstr "Einheiten" -#: dcim/forms/bulk_import.py:331 +#: netbox/dcim/forms/bulk_import.py:353 msgid "Comma-separated list of individual unit numbers" msgstr "Kommagetrennte Liste einzelner Einheitennummern" -#: dcim/forms/bulk_import.py:374 +#: netbox/dcim/forms/bulk_import.py:396 msgid "The manufacturer which produces this device type" msgstr "Der Hersteller, der diesen Gerätetyp herstellt" -#: dcim/forms/bulk_import.py:381 +#: netbox/dcim/forms/bulk_import.py:403 msgid "The default platform for devices of this type (optional)" msgstr "Das Standard-Betriebssystem für Geräte diesen Typs (optional)" -#: dcim/forms/bulk_import.py:386 +#: netbox/dcim/forms/bulk_import.py:408 msgid "Device weight" msgstr "Gewicht des Geräts" -#: dcim/forms/bulk_import.py:392 +#: netbox/dcim/forms/bulk_import.py:414 msgid "Unit for device weight" msgstr "Einheit für das Gerätegewicht" -#: dcim/forms/bulk_import.py:418 +#: netbox/dcim/forms/bulk_import.py:440 msgid "Module weight" msgstr "Gewicht des Moduls" -#: dcim/forms/bulk_import.py:424 +#: netbox/dcim/forms/bulk_import.py:446 msgid "Unit for module weight" msgstr "Einheit für das Modulgewicht" -#: dcim/forms/bulk_import.py:454 +#: netbox/dcim/forms/bulk_import.py:476 msgid "Limit platform assignments to this manufacturer" msgstr "Betriebssystem-Zuweisungen auf diesen Hersteller beschränken" -#: dcim/forms/bulk_import.py:476 dcim/forms/bulk_import.py:1425 -#: tenancy/forms/bulk_import.py:106 +#: netbox/dcim/forms/bulk_import.py:498 netbox/dcim/forms/bulk_import.py:1447 +#: netbox/tenancy/forms/bulk_import.py:106 msgid "Assigned role" msgstr "Zugewiesene Rolle" -#: dcim/forms/bulk_import.py:489 +#: netbox/dcim/forms/bulk_import.py:511 msgid "Device type manufacturer" msgstr "Gerätetyp Hersteller" -#: dcim/forms/bulk_import.py:495 +#: netbox/dcim/forms/bulk_import.py:517 msgid "Device type model" msgstr "Gerätetyp Modell" -#: dcim/forms/bulk_import.py:502 virtualization/forms/bulk_import.py:126 +#: netbox/dcim/forms/bulk_import.py:524 +#: netbox/virtualization/forms/bulk_import.py:126 msgid "Assigned platform" msgstr "Zugewiesenes Betriebssystem" -#: dcim/forms/bulk_import.py:510 dcim/forms/bulk_import.py:514 -#: dcim/forms/model_forms.py:536 +#: netbox/dcim/forms/bulk_import.py:532 netbox/dcim/forms/bulk_import.py:536 +#: netbox/dcim/forms/model_forms.py:536 msgid "Virtual chassis" msgstr "Virtuelles Gehäuse" -#: dcim/forms/bulk_import.py:517 dcim/forms/filtersets.py:728 -#: dcim/forms/filtersets.py:898 dcim/forms/model_forms.py:522 -#: dcim/tables/devices.py:202 extras/filtersets.py:596 -#: extras/forms/filtersets.py:322 ipam/forms/filtersets.py:415 -#: ipam/forms/filtersets.py:447 templates/dcim/device.html:239 -#: templates/virtualization/cluster.html:10 -#: templates/virtualization/virtualmachine.html:92 -#: templates/virtualization/virtualmachine.html:101 -#: virtualization/filtersets.py:157 virtualization/filtersets.py:277 -#: virtualization/forms/bulk_edit.py:129 -#: virtualization/forms/bulk_import.py:92 -#: virtualization/forms/filtersets.py:99 -#: virtualization/forms/filtersets.py:123 -#: virtualization/forms/filtersets.py:204 -#: virtualization/forms/model_forms.py:79 -#: virtualization/forms/model_forms.py:176 -#: virtualization/tables/virtualmachines.py:67 -msgid "Cluster" -msgstr "Cluster" - -#: dcim/forms/bulk_import.py:521 +#: netbox/dcim/forms/bulk_import.py:543 msgid "Virtualization cluster" msgstr "Virtualisierungscluster" -#: dcim/forms/bulk_import.py:550 +#: netbox/dcim/forms/bulk_import.py:572 msgid "Assigned location (if any)" msgstr "Zugewiesene Lokation (falls vorhanden)" -#: dcim/forms/bulk_import.py:557 +#: netbox/dcim/forms/bulk_import.py:579 msgid "Assigned rack (if any)" msgstr "Zugewiesenes Rack (falls vorhanden)" -#: dcim/forms/bulk_import.py:560 +#: netbox/dcim/forms/bulk_import.py:582 msgid "Face" msgstr "Ausrichtung" -#: dcim/forms/bulk_import.py:563 +#: netbox/dcim/forms/bulk_import.py:585 msgid "Mounted rack face" msgstr "Montierte Rackseite" -#: dcim/forms/bulk_import.py:570 +#: netbox/dcim/forms/bulk_import.py:592 msgid "Parent device (for child devices)" msgstr "Übergeordnetes Gerät (für untergeordnete Geräte)" -#: dcim/forms/bulk_import.py:573 +#: netbox/dcim/forms/bulk_import.py:595 msgid "Device bay" msgstr "Geräteeinsatz" -#: dcim/forms/bulk_import.py:577 +#: netbox/dcim/forms/bulk_import.py:599 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)" -#: dcim/forms/bulk_import.py:644 +#: netbox/dcim/forms/bulk_import.py:666 msgid "The device in which this module is installed" msgstr "Das Gerät, in dem dieses Modul installiert ist" -#: dcim/forms/bulk_import.py:647 dcim/forms/model_forms.py:640 +#: netbox/dcim/forms/bulk_import.py:669 netbox/dcim/forms/model_forms.py:640 msgid "Module bay" msgstr "Moduleinsatz" -#: dcim/forms/bulk_import.py:650 +#: netbox/dcim/forms/bulk_import.py:672 msgid "The module bay in which this module is installed" msgstr "Der Modulschacht, in dem dieses Modul installiert ist" -#: dcim/forms/bulk_import.py:656 +#: netbox/dcim/forms/bulk_import.py:678 msgid "The type of module" msgstr "Der Typ des Moduls" -#: dcim/forms/bulk_import.py:664 dcim/forms/model_forms.py:656 +#: netbox/dcim/forms/bulk_import.py:686 netbox/dcim/forms/model_forms.py:656 msgid "Replicate components" msgstr "Komponenten replizieren" -#: dcim/forms/bulk_import.py:666 +#: netbox/dcim/forms/bulk_import.py:688 msgid "" "Automatically populate components associated with this module type (enabled " "by default)" @@ -3959,265 +4386,272 @@ msgstr "" "Automatisches Ausfüllen von Komponenten, die diesem Modultyp zugeordnet sind" " (standardmäßig aktiviert)" -#: dcim/forms/bulk_import.py:669 dcim/forms/model_forms.py:662 +#: netbox/dcim/forms/bulk_import.py:691 netbox/dcim/forms/model_forms.py:662 msgid "Adopt components" msgstr "Komponenten übernehmen" -#: dcim/forms/bulk_import.py:671 dcim/forms/model_forms.py:665 +#: netbox/dcim/forms/bulk_import.py:693 netbox/dcim/forms/model_forms.py:665 msgid "Adopt already existing components" msgstr "Übernehmen Sie bereits bestehende Komponenten" -#: dcim/forms/bulk_import.py:711 dcim/forms/bulk_import.py:737 -#: dcim/forms/bulk_import.py:763 +#: netbox/dcim/forms/bulk_import.py:733 netbox/dcim/forms/bulk_import.py:759 +#: netbox/dcim/forms/bulk_import.py:785 msgid "Port type" msgstr "Anschlusstyp" -#: dcim/forms/bulk_import.py:719 dcim/forms/bulk_import.py:745 +#: netbox/dcim/forms/bulk_import.py:741 netbox/dcim/forms/bulk_import.py:767 msgid "Port speed in bps" msgstr "Anschlussgeschwindigkeit in Bit/s" -#: dcim/forms/bulk_import.py:783 +#: netbox/dcim/forms/bulk_import.py:805 msgid "Outlet type" msgstr "Ausgangstyp" -#: dcim/forms/bulk_import.py:790 +#: netbox/dcim/forms/bulk_import.py:812 msgid "Local power port which feeds this outlet" msgstr "Lokaler Stromanschluss, der diese Steckdose speist" -#: dcim/forms/bulk_import.py:796 +#: netbox/dcim/forms/bulk_import.py:818 msgid "Electrical phase (for three-phase circuits)" msgstr "Elektrische Phase (für dreiphasige Stromkreise)" -#: dcim/forms/bulk_import.py:837 dcim/forms/model_forms.py:1316 -#: virtualization/forms/bulk_import.py:155 -#: virtualization/forms/model_forms.py:305 +#: 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 msgid "Parent interface" msgstr "Übergeordnete Schnittstelle" -#: dcim/forms/bulk_import.py:844 dcim/forms/model_forms.py:1324 -#: virtualization/forms/bulk_import.py:162 -#: virtualization/forms/model_forms.py:313 +#: 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 msgid "Bridged interface" msgstr "Überbrückte Schnittstelle" -#: dcim/forms/bulk_import.py:847 +#: netbox/dcim/forms/bulk_import.py:869 msgid "Lag" msgstr "Lag" -#: dcim/forms/bulk_import.py:851 +#: netbox/dcim/forms/bulk_import.py:873 msgid "Parent LAG interface" msgstr "Übergeordnete LAG-Schnittstelle" -#: dcim/forms/bulk_import.py:854 +#: netbox/dcim/forms/bulk_import.py:876 msgid "Vdcs" msgstr "Vdcs" -#: dcim/forms/bulk_import.py:859 +#: netbox/dcim/forms/bulk_import.py:881 msgid "VDC names separated by commas, encased with double quotes. Example:" msgstr "" "VDC-Namen, getrennt durch Kommas, umgeben von doppelten Anführungszeichen. " "Beispiel:" -#: dcim/forms/bulk_import.py:865 +#: netbox/dcim/forms/bulk_import.py:887 msgid "Physical medium" msgstr "Physikalisches Medium" -#: dcim/forms/bulk_import.py:868 dcim/forms/filtersets.py:1365 +#: netbox/dcim/forms/bulk_import.py:890 netbox/dcim/forms/filtersets.py:1365 msgid "Duplex" msgstr "Duplex" -#: dcim/forms/bulk_import.py:873 +#: netbox/dcim/forms/bulk_import.py:895 msgid "Poe mode" msgstr "PoE-Modus" -#: dcim/forms/bulk_import.py:879 +#: netbox/dcim/forms/bulk_import.py:901 msgid "Poe type" msgstr "PoE-Typ" -#: dcim/forms/bulk_import.py:888 virtualization/forms/bulk_import.py:168 +#: netbox/dcim/forms/bulk_import.py:910 +#: netbox/virtualization/forms/bulk_import.py:168 msgid "IEEE 802.1Q operational mode (for L2 interfaces)" msgstr "IEEE 802.1Q-Betriebsmodus (für L2-Schnittstellen)" -#: dcim/forms/bulk_import.py:895 ipam/forms/bulk_import.py:161 -#: ipam/forms/bulk_import.py:247 ipam/forms/bulk_import.py:283 -#: ipam/forms/filtersets.py:201 ipam/forms/filtersets.py:277 -#: ipam/forms/filtersets.py:336 virtualization/forms/bulk_import.py:175 +#: netbox/dcim/forms/bulk_import.py: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 msgid "Assigned VRF" msgstr "Zugewiesenes VRF" -#: dcim/forms/bulk_import.py:898 +#: netbox/dcim/forms/bulk_import.py:920 msgid "Rf role" msgstr "Rf-Rolle" -#: dcim/forms/bulk_import.py:901 +#: netbox/dcim/forms/bulk_import.py:923 msgid "Wireless role (AP/station)" msgstr "WLAN Rolle (AP/Station)" -#: dcim/forms/bulk_import.py:937 +#: netbox/dcim/forms/bulk_import.py:959 #, python-brace-format msgid "VDC {vdc} is not assigned to device {device}" msgstr "VDC {vdc} ist dem Gerät {device} nicht zugewiesen" -#: dcim/forms/bulk_import.py:951 dcim/forms/model_forms.py:1000 -#: dcim/forms/model_forms.py:1575 dcim/forms/object_import.py:117 +#: 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 msgid "Rear port" msgstr "Rückseitenanschluss" -#: dcim/forms/bulk_import.py:954 +#: netbox/dcim/forms/bulk_import.py:976 msgid "Corresponding rear port" msgstr "Entsprechender Rückanschluss" -#: dcim/forms/bulk_import.py:959 dcim/forms/bulk_import.py:1000 -#: dcim/forms/bulk_import.py:1216 +#: netbox/dcim/forms/bulk_import.py:981 netbox/dcim/forms/bulk_import.py:1022 +#: netbox/dcim/forms/bulk_import.py:1238 msgid "Physical medium classification" msgstr "Klassifizierung des physikalischen Mediums" -#: dcim/forms/bulk_import.py:1028 dcim/tables/devices.py:822 +#: netbox/dcim/forms/bulk_import.py:1050 netbox/dcim/tables/devices.py:822 msgid "Installed device" msgstr "Installiertes Gerät" -#: dcim/forms/bulk_import.py:1032 +#: netbox/dcim/forms/bulk_import.py:1054 msgid "Child device installed within this bay" msgstr "In diesem Schacht installiertes untergeordnetes Gerät" -#: dcim/forms/bulk_import.py:1034 +#: netbox/dcim/forms/bulk_import.py:1056 msgid "Child device not found." msgstr "Untergeordnetes Gerät wurde nicht gefunden." -#: dcim/forms/bulk_import.py:1092 +#: netbox/dcim/forms/bulk_import.py:1114 msgid "Parent inventory item" msgstr "Artikel aus dem übergeordneten Inventar" -#: dcim/forms/bulk_import.py:1095 +#: netbox/dcim/forms/bulk_import.py:1117 msgid "Component type" msgstr "Komponententyp" -#: dcim/forms/bulk_import.py:1099 +#: netbox/dcim/forms/bulk_import.py:1121 msgid "Component Type" msgstr "Komponententyp" -#: dcim/forms/bulk_import.py:1102 +#: netbox/dcim/forms/bulk_import.py:1124 msgid "Compnent name" msgstr "Name der Komponente" -#: dcim/forms/bulk_import.py:1104 +#: netbox/dcim/forms/bulk_import.py:1126 msgid "Component Name" msgstr "Name der Komponente" -#: dcim/forms/bulk_import.py:1146 +#: netbox/dcim/forms/bulk_import.py:1168 #, python-brace-format msgid "Component not found: {device} - {component_name}" msgstr "Komponente wurde nicht gefunden: {device} - {component_name}" -#: dcim/forms/bulk_import.py:1171 +#: netbox/dcim/forms/bulk_import.py:1193 msgid "Side A device" msgstr "Gerät Seite A" -#: dcim/forms/bulk_import.py:1174 dcim/forms/bulk_import.py:1192 +#: netbox/dcim/forms/bulk_import.py:1196 netbox/dcim/forms/bulk_import.py:1214 msgid "Device name" msgstr "Name des Geräts" -#: dcim/forms/bulk_import.py:1177 +#: netbox/dcim/forms/bulk_import.py:1199 msgid "Side A type" msgstr "Typ Seite A" -#: dcim/forms/bulk_import.py:1180 dcim/forms/bulk_import.py:1198 +#: netbox/dcim/forms/bulk_import.py:1202 netbox/dcim/forms/bulk_import.py:1220 msgid "Termination type" msgstr "Typ des Abschlusspunktes" -#: dcim/forms/bulk_import.py:1183 +#: netbox/dcim/forms/bulk_import.py:1205 msgid "Side A name" msgstr "Name der Seite A" -#: dcim/forms/bulk_import.py:1184 dcim/forms/bulk_import.py:1202 +#: netbox/dcim/forms/bulk_import.py:1206 netbox/dcim/forms/bulk_import.py:1224 msgid "Termination name" msgstr "Name des Abschlusspunktes" -#: dcim/forms/bulk_import.py:1189 +#: netbox/dcim/forms/bulk_import.py:1211 msgid "Side B device" msgstr "Gerät Seite B" -#: dcim/forms/bulk_import.py:1195 +#: netbox/dcim/forms/bulk_import.py:1217 msgid "Side B type" msgstr "Typ Seite B" -#: dcim/forms/bulk_import.py:1201 +#: netbox/dcim/forms/bulk_import.py:1223 msgid "Side B name" msgstr "Name der Seite B" -#: dcim/forms/bulk_import.py:1210 wireless/forms/bulk_import.py:86 +#: netbox/dcim/forms/bulk_import.py:1232 +#: netbox/wireless/forms/bulk_import.py:86 msgid "Connection status" msgstr "Status der Verbindung" -#: dcim/forms/bulk_import.py:1262 +#: netbox/dcim/forms/bulk_import.py:1284 #, python-brace-format msgid "Side {side_upper}: {device} {termination_object} is already connected" msgstr "" "Seite {side_upper}: {device} {termination_object} ist bereits verbunden" -#: dcim/forms/bulk_import.py:1268 +#: netbox/dcim/forms/bulk_import.py:1290 #, python-brace-format msgid "{side_upper} side termination not found: {device} {name}" msgstr "{side_upper} Seitlicher Abschluss nicht gefunden: {device} {name}" -#: dcim/forms/bulk_import.py:1293 dcim/forms/model_forms.py:785 -#: dcim/tables/devices.py:1027 templates/dcim/device.html:132 -#: templates/dcim/virtualchassis.html:27 templates/dcim/virtualchassis.html:67 +#: 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/templates/dcim/virtualchassis.html:27 +#: netbox/templates/dcim/virtualchassis.html:67 msgid "Master" msgstr "Master" -#: dcim/forms/bulk_import.py:1297 +#: netbox/dcim/forms/bulk_import.py:1319 msgid "Master device" msgstr "Mastergerät" -#: dcim/forms/bulk_import.py:1314 +#: netbox/dcim/forms/bulk_import.py:1336 msgid "Name of parent site" msgstr "Name des übergeordneten Standorts" -#: dcim/forms/bulk_import.py:1348 +#: netbox/dcim/forms/bulk_import.py:1370 msgid "Upstream power panel" msgstr "vorgeschalteter Stromverteiler" -#: dcim/forms/bulk_import.py:1378 +#: netbox/dcim/forms/bulk_import.py:1400 msgid "Primary or redundant" msgstr "Primär oder redundant" -#: dcim/forms/bulk_import.py:1383 +#: netbox/dcim/forms/bulk_import.py:1405 msgid "Supply type (AC/DC)" msgstr "Versorgungsart (AC/DC)" -#: dcim/forms/bulk_import.py:1388 +#: netbox/dcim/forms/bulk_import.py:1410 msgid "Single or three-phase" msgstr "Ein- oder Dreiphasig" -#: dcim/forms/bulk_import.py:1439 dcim/forms/model_forms.py:1670 -#: templates/dcim/device.html:190 templates/dcim/virtualdevicecontext.html:30 -#: templates/virtualization/virtualmachine.html:52 +#: netbox/dcim/forms/bulk_import.py:1461 netbox/dcim/forms/model_forms.py:1677 +#: 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" -#: dcim/forms/bulk_import.py:1443 +#: netbox/dcim/forms/bulk_import.py:1465 msgid "IPv4 address with mask, e.g. 1.2.3.4/24" msgstr "IPv4-Adresse mit Maske, z. B. 1.2.3.4/24" -#: dcim/forms/bulk_import.py:1446 dcim/forms/model_forms.py:1679 -#: templates/dcim/device.html:206 templates/dcim/virtualdevicecontext.html:41 -#: templates/virtualization/virtualmachine.html:68 +#: netbox/dcim/forms/bulk_import.py:1468 netbox/dcim/forms/model_forms.py:1686 +#: 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" -#: dcim/forms/bulk_import.py:1450 +#: netbox/dcim/forms/bulk_import.py:1472 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" -#: dcim/forms/common.py:24 dcim/models/device_components.py:527 -#: templates/dcim/interface.html:57 -#: templates/virtualization/vminterface.html:55 -#: virtualization/forms/bulk_edit.py:225 +#: netbox/dcim/forms/common.py:24 netbox/dcim/models/device_components.py:527 +#: netbox/templates/dcim/interface.html:57 +#: netbox/templates/virtualization/vminterface.html:55 +#: netbox/virtualization/forms/bulk_edit.py:225 msgid "MTU" msgstr "MTU" -#: dcim/forms/common.py:65 +#: netbox/dcim/forms/common.py:65 #, python-brace-format msgid "" "The tagged VLANs ({vlans}) must belong to the same site as the interface's " @@ -4227,7 +4661,7 @@ msgstr "" "übergeordnete Gerät/die übergeordnete VM der Schnittstelle, oder sie müssen " "global sein" -#: dcim/forms/common.py:126 +#: netbox/dcim/forms/common.py:126 msgid "" "Cannot install module with placeholder values in a module bay with no " "position defined." @@ -4235,7 +4669,7 @@ msgstr "" "Das Modul mit Platzhalterwerten kann nicht in einem Modulschacht ohne " "definierte Position installiert werden." -#: dcim/forms/common.py:131 +#: netbox/dcim/forms/common.py:131 #, python-brace-format msgid "" "Cannot install module with placeholder values in a module bay tree {level} " @@ -4244,189 +4678,200 @@ msgstr "" "Modul mit Platzhalterwerten kann nicht in einem Modul-Baytree installiert " "werden {level} in einem Baum, aber {tokens} Platzhalter angegeben." -#: dcim/forms/common.py:144 +#: netbox/dcim/forms/common.py:144 #, python-brace-format msgid "Cannot adopt {model} {name} as it already belongs to a module" msgstr "" "Kann nicht adoptieren {model} {name} da es schon zu einem Modul gehört" -#: dcim/forms/common.py:153 +#: netbox/dcim/forms/common.py:153 #, python-brace-format msgid "A {model} named {name} already exists" msgstr "Ein {model} genannt {name} existiert bereits" -#: dcim/forms/connections.py:49 dcim/forms/model_forms.py:738 -#: dcim/tables/power.py:66 templates/dcim/inc/cable_termination.html:37 -#: templates/dcim/powerfeed.html:24 templates/dcim/powerpanel.html:19 -#: templates/dcim/trace/powerpanel.html:4 +#: netbox/dcim/forms/connections.py:49 netbox/dcim/forms/model_forms.py:738 +#: netbox/dcim/tables/power.py:66 +#: netbox/templates/dcim/inc/cable_termination.html:37 +#: netbox/templates/dcim/powerfeed.html:24 +#: netbox/templates/dcim/powerpanel.html:19 +#: netbox/templates/dcim/trace/powerpanel.html:4 msgid "Power Panel" msgstr "Stromverteiler" -#: dcim/forms/connections.py:58 dcim/forms/model_forms.py:765 -#: templates/dcim/powerfeed.html:21 templates/dcim/powerport.html:80 +#: netbox/dcim/forms/connections.py:58 netbox/dcim/forms/model_forms.py:765 +#: netbox/templates/dcim/powerfeed.html:21 +#: netbox/templates/dcim/powerport.html:80 msgid "Power Feed" msgstr "Stromzufuhr" -#: dcim/forms/connections.py:81 +#: netbox/dcim/forms/connections.py:81 msgid "Side" msgstr "Seite" -#: dcim/forms/filtersets.py:136 dcim/tables/devices.py:295 +#: netbox/dcim/forms/filtersets.py:136 netbox/dcim/tables/devices.py:295 msgid "Device Status" msgstr "Gerätestatus" -#: dcim/forms/filtersets.py:149 +#: netbox/dcim/forms/filtersets.py:149 msgid "Parent region" msgstr "Übergeordnete Region" -#: dcim/forms/filtersets.py:163 tenancy/forms/bulk_import.py:28 -#: tenancy/forms/bulk_import.py:62 tenancy/forms/filtersets.py:33 -#: tenancy/forms/filtersets.py:62 wireless/forms/bulk_import.py:25 -#: wireless/forms/filtersets.py:25 +#: netbox/dcim/forms/filtersets.py:163 netbox/tenancy/forms/bulk_import.py:28 +#: netbox/tenancy/forms/bulk_import.py:62 +#: netbox/tenancy/forms/filtersets.py:33 netbox/tenancy/forms/filtersets.py:62 +#: netbox/wireless/forms/bulk_import.py:25 +#: netbox/wireless/forms/filtersets.py:25 msgid "Parent group" msgstr "Übergeordnete Gruppe" -#: dcim/forms/filtersets.py:242 templates/dcim/location.html:58 -#: templates/dcim/site.html:56 +#: netbox/dcim/forms/filtersets.py:242 netbox/templates/dcim/location.html:58 +#: netbox/templates/dcim/site.html:56 msgid "Facility" msgstr "Einrichtung" -#: dcim/forms/filtersets.py:380 -msgid "Rack type" -msgstr "Racktyp" - -#: dcim/forms/filtersets.py:397 +#: netbox/dcim/forms/filtersets.py:397 msgid "Function" msgstr "Funktion" -#: dcim/forms/filtersets.py:483 dcim/forms/model_forms.py:373 -#: templates/inc/panels/image_attachments.html:6 +#: netbox/dcim/forms/filtersets.py:483 netbox/dcim/forms/model_forms.py:373 +#: netbox/templates/inc/panels/image_attachments.html:6 msgid "Images" msgstr "Bilder" -#: dcim/forms/filtersets.py:486 dcim/forms/filtersets.py:611 -#: dcim/forms/filtersets.py:726 +#: netbox/dcim/forms/filtersets.py:486 netbox/dcim/forms/filtersets.py:611 +#: netbox/dcim/forms/filtersets.py:726 msgid "Components" msgstr "Komponenten" -#: dcim/forms/filtersets.py:506 +#: netbox/dcim/forms/filtersets.py:506 msgid "Subdevice role" msgstr "Rolle des Untergeräts" -#: dcim/forms/filtersets.py:790 dcim/tables/racks.py:54 -#: templates/dcim/racktype.html:20 +#: netbox/dcim/forms/filtersets.py:790 netbox/dcim/tables/racks.py:54 +#: netbox/templates/dcim/racktype.html:20 msgid "Model" msgstr "Modell" -#: dcim/forms/filtersets.py:834 +#: netbox/dcim/forms/filtersets.py:834 msgid "Has an OOB IP" msgstr "Hat eine OOB-IP" -#: dcim/forms/filtersets.py:841 +#: netbox/dcim/forms/filtersets.py:841 msgid "Virtual chassis member" msgstr "Virtuelles Gehäusemitglied" -#: dcim/forms/filtersets.py:890 +#: netbox/dcim/forms/filtersets.py:890 msgid "Has virtual device contexts" msgstr "Hat Virtual Device Contexts" -#: dcim/forms/filtersets.py:903 extras/filtersets.py:585 -#: ipam/forms/filtersets.py:452 virtualization/forms/filtersets.py:112 +#: netbox/dcim/forms/filtersets.py:903 netbox/extras/filtersets.py:585 +#: netbox/ipam/forms/filtersets.py:452 +#: netbox/virtualization/forms/filtersets.py:112 msgid "Cluster group" msgstr "Clustergruppe" -#: dcim/forms/filtersets.py:1210 +#: netbox/dcim/forms/filtersets.py:1210 msgid "Cabled" msgstr "Verkabelt" -#: dcim/forms/filtersets.py:1217 +#: netbox/dcim/forms/filtersets.py:1217 msgid "Occupied" msgstr "Belegt" -#: dcim/forms/filtersets.py:1244 dcim/forms/filtersets.py:1269 -#: dcim/forms/filtersets.py:1293 dcim/forms/filtersets.py:1313 -#: dcim/forms/filtersets.py:1336 dcim/tables/devices.py:364 -#: templates/dcim/consoleport.html:55 templates/dcim/consoleserverport.html:55 -#: templates/dcim/frontport.html:69 templates/dcim/interface.html:140 -#: templates/dcim/powerfeed.html:110 templates/dcim/poweroutlet.html:59 -#: templates/dcim/powerport.html:59 templates/dcim/rearport.html:65 +#: netbox/dcim/forms/filtersets.py: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/templates/dcim/consoleport.html:55 +#: netbox/templates/dcim/consoleserverport.html:55 +#: netbox/templates/dcim/frontport.html:69 +#: netbox/templates/dcim/interface.html:140 +#: netbox/templates/dcim/powerfeed.html:110 +#: netbox/templates/dcim/poweroutlet.html:59 +#: netbox/templates/dcim/powerport.html:59 +#: netbox/templates/dcim/rearport.html:65 msgid "Connection" msgstr "Verbindung" -#: dcim/forms/filtersets.py:1348 extras/forms/bulk_edit.py:326 -#: extras/forms/bulk_import.py:247 extras/forms/filtersets.py:464 -#: extras/forms/model_forms.py:675 extras/tables/tables.py:579 -#: templates/extras/journalentry.html:30 +#: netbox/dcim/forms/filtersets.py:1348 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 "Art" -#: dcim/forms/filtersets.py:1377 +#: netbox/dcim/forms/filtersets.py:1377 msgid "Mgmt only" msgstr "Nur Verwaltung" -#: dcim/forms/filtersets.py:1389 dcim/forms/model_forms.py:1383 -#: dcim/models/device_components.py:629 templates/dcim/interface.html:129 +#: 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 msgid "WWN" msgstr "WWN" -#: dcim/forms/filtersets.py:1409 +#: netbox/dcim/forms/filtersets.py:1409 msgid "Wireless channel" msgstr "WLAN Kanal" -#: dcim/forms/filtersets.py:1413 +#: netbox/dcim/forms/filtersets.py:1413 msgid "Channel frequency (MHz)" msgstr "Kanalfrequenz (MHz)" -#: dcim/forms/filtersets.py:1417 +#: netbox/dcim/forms/filtersets.py:1417 msgid "Channel width (MHz)" msgstr "Kanalbreite (MHz)" -#: dcim/forms/filtersets.py:1421 templates/dcim/interface.html:85 +#: netbox/dcim/forms/filtersets.py:1421 +#: netbox/templates/dcim/interface.html:85 msgid "Transmit power (dBm)" msgstr "Sendeleistung (dBm)" -#: dcim/forms/filtersets.py:1446 dcim/forms/filtersets.py:1471 -#: dcim/tables/devices.py:327 templates/dcim/cable.html:12 -#: templates/dcim/cable_trace.html:46 templates/dcim/frontport.html:77 -#: templates/dcim/htmx/cable_edit.html:50 -#: templates/dcim/inc/connection_endpoints.html:4 -#: templates/dcim/rearport.html:73 templates/dcim/trace/cable.html:7 +#: netbox/dcim/forms/filtersets.py:1446 netbox/dcim/forms/filtersets.py:1471 +#: netbox/dcim/tables/devices.py:327 netbox/templates/dcim/cable.html:12 +#: netbox/templates/dcim/cable_trace.html:46 +#: netbox/templates/dcim/frontport.html:77 +#: netbox/templates/dcim/htmx/cable_edit.html:50 +#: netbox/templates/dcim/inc/connection_endpoints.html:4 +#: netbox/templates/dcim/rearport.html:73 +#: netbox/templates/dcim/trace/cable.html:7 msgid "Cable" msgstr "Kabel" -#: dcim/forms/filtersets.py:1550 dcim/tables/devices.py:949 +#: netbox/dcim/forms/filtersets.py:1550 netbox/dcim/tables/devices.py:949 msgid "Discovered" msgstr "Erfasst" -#: dcim/forms/formsets.py:20 +#: netbox/dcim/forms/formsets.py:20 #, python-brace-format msgid "A virtual chassis member already exists in position {vc_position}." msgstr "Ein virtuelles Chassismitglied ist bereits in Position {vc_position}." -#: dcim/forms/model_forms.py:140 +#: netbox/dcim/forms/model_forms.py:140 msgid "Contact Info" msgstr "Kontaktinformationen" -#: dcim/forms/model_forms.py:195 templates/dcim/rackrole.html:19 +#: netbox/dcim/forms/model_forms.py:195 netbox/templates/dcim/rackrole.html:19 msgid "Rack Role" msgstr "Rackrolle" -#: dcim/forms/model_forms.py:212 dcim/forms/model_forms.py:362 -#: dcim/forms/model_forms.py:446 utilities/forms/fields/fields.py:47 +#: netbox/dcim/forms/model_forms.py:212 netbox/dcim/forms/model_forms.py:362 +#: netbox/dcim/forms/model_forms.py:446 +#: netbox/utilities/forms/fields/fields.py:47 msgid "Slug" msgstr "URL-Slug" -#: dcim/forms/model_forms.py:259 +#: netbox/dcim/forms/model_forms.py:259 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." -#: dcim/forms/model_forms.py:265 +#: netbox/dcim/forms/model_forms.py:265 msgid "Inventory Control" msgstr "Inventarsteuerung" -#: dcim/forms/model_forms.py:313 +#: netbox/dcim/forms/model_forms.py:313 msgid "" "Comma-separated list of numeric unit IDs. A range may be specified using a " "hyphen." @@ -4434,148 +4879,180 @@ msgstr "" "Kommagetrennte Liste numerischer Einheiten-IDs. Ein Bereich kann mit einem " "Bindestrich angegeben werden." -#: dcim/forms/model_forms.py:322 dcim/tables/racks.py:202 +#: netbox/dcim/forms/model_forms.py:322 netbox/dcim/tables/racks.py:202 msgid "Reservation" msgstr "Reservierung" -#: dcim/forms/model_forms.py:423 templates/dcim/devicerole.html:23 +#: netbox/dcim/forms/model_forms.py:423 +#: netbox/templates/dcim/devicerole.html:23 msgid "Device Role" msgstr "Rolle des Geräts" -#: dcim/forms/model_forms.py:490 dcim/models/devices.py:644 +#: netbox/dcim/forms/model_forms.py:490 netbox/dcim/models/devices.py:644 msgid "The lowest-numbered unit occupied by the device" msgstr "Die HE mit der niedrigsten Nummer, die vom Gerät belegt ist" -#: dcim/forms/model_forms.py:547 +#: netbox/dcim/forms/model_forms.py:547 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" -#: dcim/forms/model_forms.py:552 +#: netbox/dcim/forms/model_forms.py:552 msgid "The priority of the device in the virtual chassis" msgstr "Die Priorität des Geräts im virtuellen Gehäuse" -#: dcim/forms/model_forms.py:659 +#: netbox/dcim/forms/model_forms.py:659 msgid "Automatically populate components associated with this module type" msgstr "" "Füllen Sie automatisch Komponenten aus, die diesem Modultyp zugeordnet sind" -#: dcim/forms/model_forms.py:767 +#: netbox/dcim/forms/model_forms.py:767 msgid "Characteristics" msgstr "Charakteristiken" -#: dcim/forms/model_forms.py:1087 +#: netbox/dcim/forms/model_forms.py:914 +#, python-brace-format +msgid "" +"Alphanumeric ranges are supported for bulk creation. Mixed cases and types " +"within a single range are not supported (example: " +"[ge,xe]-0/0/[0-9]). The token {module}, if " +"present, will be automatically replaced with the position value when " +"creating a new module." +msgstr "" +"Alphanumerische Bereiche werden für die Massenerstellung unterstützt. Groß- " +"und Kleinschreibung und Typen innerhalb eines einzigen Bereichs werden nicht" +" unterstützt (Beispiel: [ge, xe] -0/0/ [0-9]). Das Token " +"{module}, falls vorhanden, wird beim Erstellen eines neuen " +"Moduls automatisch durch den Positionswert ersetzt." + +#: netbox/dcim/forms/model_forms.py:1094 msgid "Console port template" msgstr "Konsolenanschlussvorlage" -#: dcim/forms/model_forms.py:1095 +#: netbox/dcim/forms/model_forms.py:1102 msgid "Console server port template" msgstr "Port-Vorlage für Konsolenserver" -#: dcim/forms/model_forms.py:1103 +#: netbox/dcim/forms/model_forms.py:1110 msgid "Front port template" msgstr "Frontanschluss-Vorlage" -#: dcim/forms/model_forms.py:1111 +#: netbox/dcim/forms/model_forms.py:1118 msgid "Interface template" msgstr "Schnittstellen-Vorlage" -#: dcim/forms/model_forms.py:1119 +#: netbox/dcim/forms/model_forms.py:1126 msgid "Power outlet template" msgstr "Vorlage für Steckdosen" -#: dcim/forms/model_forms.py:1127 +#: netbox/dcim/forms/model_forms.py:1134 msgid "Power port template" msgstr "Vorlage für Stromverteiler" -#: dcim/forms/model_forms.py:1135 +#: netbox/dcim/forms/model_forms.py:1142 msgid "Rear port template" msgstr "Vorlage für den hinteren Anschluss" -#: dcim/forms/model_forms.py:1144 dcim/forms/model_forms.py:1388 -#: dcim/forms/model_forms.py:1551 dcim/forms/model_forms.py:1583 -#: dcim/tables/connections.py:65 ipam/forms/bulk_import.py:318 -#: ipam/forms/model_forms.py:280 ipam/forms/model_forms.py:289 -#: ipam/tables/fhrp.py:64 ipam/tables/ip.py:372 ipam/tables/vlans.py:169 -#: templates/circuits/inc/circuit_termination_fields.html:51 -#: templates/dcim/frontport.html:106 templates/dcim/interface.html:27 -#: templates/dcim/interface.html:184 templates/dcim/interface.html:310 -#: templates/dcim/rearport.html:102 -#: templates/virtualization/vminterface.html:18 -#: templates/vpn/tunneltermination.html:31 -#: templates/wireless/inc/wirelesslink_interface.html:10 -#: templates/wireless/wirelesslink.html:10 -#: templates/wireless/wirelesslink.html:55 -#: virtualization/forms/model_forms.py:348 vpn/forms/bulk_import.py:297 -#: vpn/forms/model_forms.py:436 vpn/forms/model_forms.py:445 -#: wireless/forms/model_forms.py:113 wireless/forms/model_forms.py:155 +#: netbox/dcim/forms/model_forms.py: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" -#: dcim/forms/model_forms.py:1145 dcim/forms/model_forms.py:1584 -#: dcim/tables/connections.py:27 templates/dcim/consoleport.html:17 -#: templates/dcim/consoleserverport.html:74 templates/dcim/frontport.html:112 +#: netbox/dcim/forms/model_forms.py:1152 netbox/dcim/forms/model_forms.py:1591 +#: netbox/dcim/tables/connections.py:27 +#: netbox/templates/dcim/consoleport.html:17 +#: netbox/templates/dcim/consoleserverport.html:74 +#: netbox/templates/dcim/frontport.html:112 msgid "Console Port" msgstr "Konsolenanschluss" -#: dcim/forms/model_forms.py:1146 dcim/forms/model_forms.py:1585 -#: templates/dcim/consoleport.html:73 templates/dcim/consoleserverport.html:17 -#: templates/dcim/frontport.html:109 +#: netbox/dcim/forms/model_forms.py:1153 netbox/dcim/forms/model_forms.py:1592 +#: netbox/templates/dcim/consoleport.html:73 +#: netbox/templates/dcim/consoleserverport.html:17 +#: netbox/templates/dcim/frontport.html:109 msgid "Console Server Port" msgstr "Konsolenserveranschluss" -#: dcim/forms/model_forms.py:1147 dcim/forms/model_forms.py:1586 -#: templates/circuits/inc/circuit_termination_fields.html:52 -#: templates/dcim/consoleport.html:76 templates/dcim/consoleserverport.html:77 -#: templates/dcim/frontport.html:17 templates/dcim/frontport.html:115 -#: templates/dcim/interface.html:187 templates/dcim/rearport.html:105 +#: netbox/dcim/forms/model_forms.py:1154 netbox/dcim/forms/model_forms.py:1593 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:52 +#: netbox/templates/dcim/consoleport.html:76 +#: netbox/templates/dcim/consoleserverport.html:77 +#: netbox/templates/dcim/frontport.html:17 +#: netbox/templates/dcim/frontport.html:115 +#: netbox/templates/dcim/interface.html:187 +#: netbox/templates/dcim/rearport.html:105 msgid "Front Port" msgstr "Frontanschluss" -#: dcim/forms/model_forms.py:1148 dcim/forms/model_forms.py:1587 -#: dcim/tables/devices.py:710 -#: templates/circuits/inc/circuit_termination_fields.html:53 -#: templates/dcim/consoleport.html:79 templates/dcim/consoleserverport.html:80 -#: templates/dcim/frontport.html:50 templates/dcim/frontport.html:118 -#: templates/dcim/interface.html:190 templates/dcim/rearport.html:17 -#: templates/dcim/rearport.html:108 +#: netbox/dcim/forms/model_forms.py:1155 netbox/dcim/forms/model_forms.py:1594 +#: netbox/dcim/tables/devices.py:710 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:53 +#: netbox/templates/dcim/consoleport.html:79 +#: netbox/templates/dcim/consoleserverport.html:80 +#: netbox/templates/dcim/frontport.html:50 +#: netbox/templates/dcim/frontport.html:118 +#: netbox/templates/dcim/interface.html:190 +#: netbox/templates/dcim/rearport.html:17 +#: netbox/templates/dcim/rearport.html:108 msgid "Rear Port" msgstr "Rückanschluss" -#: dcim/forms/model_forms.py:1149 dcim/forms/model_forms.py:1588 -#: dcim/tables/connections.py:46 dcim/tables/devices.py:512 -#: templates/dcim/poweroutlet.html:44 templates/dcim/powerport.html:17 +#: 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/templates/dcim/powerport.html:17 msgid "Power Port" msgstr "Stromanschluss" -#: dcim/forms/model_forms.py:1150 dcim/forms/model_forms.py:1589 -#: templates/dcim/poweroutlet.html:17 templates/dcim/powerport.html:77 +#: netbox/dcim/forms/model_forms.py:1157 netbox/dcim/forms/model_forms.py:1596 +#: netbox/templates/dcim/poweroutlet.html:17 +#: netbox/templates/dcim/powerport.html:77 msgid "Power Outlet" msgstr "Stromabgang" -#: dcim/forms/model_forms.py:1152 dcim/forms/model_forms.py:1591 +#: netbox/dcim/forms/model_forms.py:1159 netbox/dcim/forms/model_forms.py:1598 msgid "Component Assignment" msgstr "Komponentenzuweisung" -#: dcim/forms/model_forms.py:1195 dcim/forms/model_forms.py:1638 +#: netbox/dcim/forms/model_forms.py:1202 netbox/dcim/forms/model_forms.py:1645 msgid "An InventoryItem can only be assigned to a single component." msgstr "" "Ein InventoryItem kann nur einer einzelnen Komponente zugewiesen werden." -#: dcim/forms/model_forms.py:1332 +#: netbox/dcim/forms/model_forms.py:1339 msgid "LAG interface" msgstr "LAG-Schnittstelle" -#: dcim/forms/model_forms.py:1355 +#: netbox/dcim/forms/model_forms.py:1362 msgid "Filter VLANs available for assignment by group." msgstr "Filtern Sie VLANs, die für die Zuweisung nach Gruppen verfügbar sind." -#: dcim/forms/model_forms.py:1484 +#: netbox/dcim/forms/model_forms.py:1491 msgid "Child Device" msgstr "untergeordnetes Gerät" -#: dcim/forms/model_forms.py:1485 +#: netbox/dcim/forms/model_forms.py:1492 msgid "" "Child devices must first be created and assigned to the site and rack of the" " parent device." @@ -4583,32 +5060,35 @@ msgstr "" "Untergeordnete Geräte müssen zuerst erstellt und dem Standort und dem Rack " "des übergeordneten Geräts zugewiesen werden." -#: dcim/forms/model_forms.py:1527 +#: netbox/dcim/forms/model_forms.py:1534 msgid "Console port" msgstr "Konsolenanschluss" -#: dcim/forms/model_forms.py:1535 +#: netbox/dcim/forms/model_forms.py:1542 msgid "Console server port" msgstr "Konsolenserveranschluss" -#: dcim/forms/model_forms.py:1543 +#: netbox/dcim/forms/model_forms.py:1550 msgid "Front port" msgstr "Frontanschluss" -#: dcim/forms/model_forms.py:1559 +#: netbox/dcim/forms/model_forms.py:1566 msgid "Power outlet" msgstr "Stromabgang" -#: dcim/forms/model_forms.py:1579 templates/dcim/inventoryitem.html:17 +#: netbox/dcim/forms/model_forms.py:1586 +#: netbox/templates/dcim/inventoryitem.html:17 msgid "Inventory Item" msgstr "Inventar-Artikel" -#: dcim/forms/model_forms.py:1652 templates/dcim/inventoryitemrole.html:15 +#: netbox/dcim/forms/model_forms.py:1659 +#: netbox/templates/dcim/inventoryitemrole.html:15 msgid "Inventory Item Role" msgstr "Rolle des Inventarartikels" -#: dcim/forms/object_create.py:48 dcim/forms/object_create.py:199 -#: dcim/forms/object_create.py:355 +#: netbox/dcim/forms/object_create.py:48 +#: netbox/dcim/forms/object_create.py:199 +#: netbox/dcim/forms/object_create.py:347 msgid "" "Alphanumeric ranges are supported. (Must match the number of objects being " "created.)" @@ -4616,7 +5096,7 @@ msgstr "" "Alphanumerische Bereiche werden unterstützt. (Muss der Anzahl der Objekte " "entsprechen, die erstellt werden.)" -#: dcim/forms/object_create.py:68 +#: netbox/dcim/forms/object_create.py:68 #, python-brace-format msgid "" "The provided pattern specifies {value_count} values, but {pattern_count} are" @@ -4625,18 +5105,19 @@ msgstr "" "Das bereitgestellte Muster spezifiziert {value_count} Werte, aber " "{pattern_count} werden erwartet." -#: dcim/forms/object_create.py:110 dcim/forms/object_create.py:271 -#: dcim/tables/devices.py:252 +#: netbox/dcim/forms/object_create.py:110 +#: netbox/dcim/forms/object_create.py:263 netbox/dcim/tables/devices.py:252 msgid "Rear ports" msgstr "Rückanschlüsse" -#: dcim/forms/object_create.py:111 dcim/forms/object_create.py:272 +#: netbox/dcim/forms/object_create.py:111 +#: netbox/dcim/forms/object_create.py:264 msgid "Select one rear port assignment for each front port being created." msgstr "" "Wählen Sie für jeden zu erstellenden Frontanschluss eine hintere Anschluss-" "Zuweisung aus." -#: dcim/forms/object_create.py:164 +#: netbox/dcim/forms/object_create.py:164 #, python-brace-format msgid "" "The number of front port templates to be created ({frontport_count}) must " @@ -4646,16 +5127,7 @@ msgstr "" "muss mit der ausgewählten Anzahl der hinteren Anschlusspositionen " "übereinstimmen ({rearport_count})." -#: dcim/forms/object_create.py:251 -#, python-brace-format -msgid "" -"The string {module} will be replaced with the position of the " -"assigned module, if any." -msgstr "" -"Die Zeichenkette {module} wird durch die Position des " -"zugewiesenen Moduls ersetzt, falls vorhanden." - -#: dcim/forms/object_create.py:320 +#: netbox/dcim/forms/object_create.py:312 #, python-brace-format msgid "" "The number of front ports to be created ({frontport_count}) must match the " @@ -4665,17 +5137,18 @@ msgstr "" "der ausgewählten Anzahl der hinteren Anschlusspositionen übereinstimmen " "({rearport_count})." -#: dcim/forms/object_create.py:409 dcim/tables/devices.py:1033 -#: ipam/tables/fhrp.py:31 templates/dcim/virtualchassis.html:53 -#: templates/dcim/virtualchassis_edit.html:47 templates/ipam/fhrpgroup.html:38 +#: netbox/dcim/forms/object_create.py:401 netbox/dcim/tables/devices.py:1033 +#: netbox/ipam/tables/fhrp.py:31 netbox/templates/dcim/virtualchassis.html:53 +#: netbox/templates/dcim/virtualchassis_edit.html:47 +#: netbox/templates/ipam/fhrpgroup.html:38 msgid "Members" msgstr "Mitglieder" -#: dcim/forms/object_create.py:418 +#: netbox/dcim/forms/object_create.py:410 msgid "Initial position" msgstr "Ausgangsposition" -#: dcim/forms/object_create.py:421 +#: netbox/dcim/forms/object_create.py:413 msgid "" "Position of the first member device. Increases by one for each additional " "member." @@ -4683,70 +5156,72 @@ msgstr "" "Position des ersten Mitgliedsgeräts. Erhöht sich für jedes weitere Mitglied " "um eins." -#: dcim/forms/object_create.py:435 +#: netbox/dcim/forms/object_create.py:427 msgid "A position must be specified for the first VC member." msgstr "Für das erste VC-Mitglied muss eine Position angegeben werden." -#: dcim/models/cables.py:62 dcim/models/device_component_templates.py:55 -#: dcim/models/device_components.py:62 extras/models/customfields.py:111 +#: netbox/dcim/models/cables.py:62 +#: netbox/dcim/models/device_component_templates.py:55 +#: netbox/dcim/models/device_components.py:62 +#: netbox/extras/models/customfields.py:111 msgid "label" msgstr "Label" -#: dcim/models/cables.py:71 +#: netbox/dcim/models/cables.py:71 msgid "length" msgstr "Länge" -#: dcim/models/cables.py:78 +#: netbox/dcim/models/cables.py:78 msgid "length unit" msgstr "Längeneinheit" -#: dcim/models/cables.py:95 +#: netbox/dcim/models/cables.py:95 msgid "cable" msgstr "Kabel" -#: dcim/models/cables.py:96 +#: netbox/dcim/models/cables.py:96 msgid "cables" msgstr "Kabel" -#: dcim/models/cables.py:165 +#: netbox/dcim/models/cables.py:165 msgid "Must specify a unit when setting a cable length" msgstr "Bei der Eingabe einer Kabellänge muss eine Einheit angegeben werden" -#: dcim/models/cables.py:168 +#: netbox/dcim/models/cables.py:168 msgid "Must define A and B terminations when creating a new cable." msgstr "" "Beim Erstellen eines neuen Kabels müssen A- und B-Anschlüsse definiert " "werden." -#: dcim/models/cables.py:175 +#: netbox/dcim/models/cables.py:175 msgid "Cannot connect different termination types to same end of cable." msgstr "" "Verschiedene Anschlusstypen können nicht an dasselbe Kabelende angeschlossen" " werden." -#: dcim/models/cables.py:183 +#: netbox/dcim/models/cables.py:183 #, python-brace-format msgid "Incompatible termination types: {type_a} and {type_b}" msgstr "Inkompatible Verbindungssarten: {type_a} und {type_b}" -#: dcim/models/cables.py:193 +#: netbox/dcim/models/cables.py:193 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." -#: dcim/models/cables.py:260 ipam/models/asns.py:37 +#: netbox/dcim/models/cables.py:260 netbox/ipam/models/asns.py:37 msgid "end" msgstr "Ende" -#: dcim/models/cables.py:313 +#: netbox/dcim/models/cables.py:313 msgid "cable termination" msgstr "Kabelabschlusspunkt" -#: dcim/models/cables.py:314 +#: netbox/dcim/models/cables.py:314 msgid "cable terminations" msgstr "Kabelabschlusspunkte" -#: dcim/models/cables.py:333 +#: netbox/dcim/models/cables.py:333 #, python-brace-format msgid "" "Duplicate termination found for {app_label}.{model} {termination_id}: cable " @@ -4755,38 +5230,38 @@ msgstr "" "Doppelte Terminierung gefunden für {app_label}.{model} {termination_id}: " "Kabel {cable_pk}" -#: dcim/models/cables.py:343 +#: netbox/dcim/models/cables.py:343 #, python-brace-format msgid "Cables cannot be terminated to {type_display} interfaces" msgstr "Kabel können nicht an {type_display} Schnittstellen terminiert werden" -#: dcim/models/cables.py:350 +#: netbox/dcim/models/cables.py:350 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." -#: dcim/models/cables.py:448 extras/models/configs.py:50 +#: netbox/dcim/models/cables.py:448 netbox/extras/models/configs.py:50 msgid "is active" msgstr "ist aktiv" -#: dcim/models/cables.py:452 +#: netbox/dcim/models/cables.py:452 msgid "is complete" msgstr "ist abgeschlossen" -#: dcim/models/cables.py:456 +#: netbox/dcim/models/cables.py:456 msgid "is split" msgstr "ist aufgeteilt" -#: dcim/models/cables.py:464 +#: netbox/dcim/models/cables.py:464 msgid "cable path" msgstr "Kabelweg" -#: dcim/models/cables.py:465 +#: netbox/dcim/models/cables.py:465 msgid "cable paths" msgstr "Kabelwege" -#: dcim/models/device_component_templates.py:46 +#: netbox/dcim/models/device_component_templates.py:46 #, python-brace-format msgid "" "{module} is accepted as a substitution for the module bay position when " @@ -4795,18 +5270,18 @@ msgstr "" "{module} wird als Ersatz für die Position des Modulschachts akzeptiert, wenn" " es an einen Modultyp angehängt wird." -#: dcim/models/device_component_templates.py:58 -#: dcim/models/device_components.py:65 +#: netbox/dcim/models/device_component_templates.py:58 +#: netbox/dcim/models/device_components.py:65 msgid "Physical label" msgstr "Physisches Label" -#: dcim/models/device_component_templates.py:103 +#: netbox/dcim/models/device_component_templates.py:103 msgid "Component templates cannot be moved to a different device type." msgstr "" "Komponentenvorlagen können nicht auf einen anderen Gerätetyp verschoben " "werden." -#: dcim/models/device_component_templates.py:154 +#: netbox/dcim/models/device_component_templates.py:154 msgid "" "A component template cannot be associated with both a device type and a " "module type." @@ -4814,7 +5289,7 @@ msgstr "" "Eine Komponentenvorlage kann nicht gleichzeitig einem Gerätetyp und einem " "Modultyp zugeordnet werden." -#: dcim/models/device_component_templates.py:158 +#: netbox/dcim/models/device_component_templates.py:158 msgid "" "A component template must be associated with either a device type or a " "module type." @@ -4822,138 +5297,138 @@ msgstr "" "Eine Komponentenvorlage muss entweder einem Gerätetyp oder einem Modultyp " "zugeordnet sein." -#: dcim/models/device_component_templates.py:212 +#: netbox/dcim/models/device_component_templates.py:212 msgid "console port template" msgstr "Vorlage für Konsolenanschluss" -#: dcim/models/device_component_templates.py:213 +#: netbox/dcim/models/device_component_templates.py:213 msgid "console port templates" msgstr "Vorlagen für Konsolenanschlüsse" -#: dcim/models/device_component_templates.py:246 +#: netbox/dcim/models/device_component_templates.py:246 msgid "console server port template" msgstr "Portvorlage für Konsolenserver" -#: dcim/models/device_component_templates.py:247 +#: netbox/dcim/models/device_component_templates.py:247 msgid "console server port templates" msgstr "Portvorlagen für Konsolenserver" -#: dcim/models/device_component_templates.py:278 -#: dcim/models/device_components.py:352 +#: netbox/dcim/models/device_component_templates.py:278 +#: netbox/dcim/models/device_components.py:352 msgid "maximum draw" msgstr "maximale Leistungsaufnahme" -#: dcim/models/device_component_templates.py:285 -#: dcim/models/device_components.py:359 +#: netbox/dcim/models/device_component_templates.py:285 +#: netbox/dcim/models/device_components.py:359 msgid "allocated draw" msgstr "zugewiesene Leistungsaufnahme" -#: dcim/models/device_component_templates.py:295 +#: netbox/dcim/models/device_component_templates.py:295 msgid "power port template" msgstr "Vorlage für Stromanschluss" -#: dcim/models/device_component_templates.py:296 +#: netbox/dcim/models/device_component_templates.py:296 msgid "power port templates" msgstr "Vorlagen für Stromanschlüsse" -#: dcim/models/device_component_templates.py:315 -#: dcim/models/device_components.py:382 +#: netbox/dcim/models/device_component_templates.py:315 +#: netbox/dcim/models/device_components.py:382 #, 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." -#: dcim/models/device_component_templates.py:347 -#: dcim/models/device_components.py:477 +#: netbox/dcim/models/device_component_templates.py:347 +#: netbox/dcim/models/device_components.py:477 msgid "feed leg" msgstr "Phasenlage" -#: dcim/models/device_component_templates.py:351 -#: dcim/models/device_components.py:481 +#: netbox/dcim/models/device_component_templates.py:351 +#: netbox/dcim/models/device_components.py:481 msgid "Phase (for three-phase feeds)" msgstr "Phase (bei dreiphasiger Stromzufuhr)" -#: dcim/models/device_component_templates.py:357 +#: netbox/dcim/models/device_component_templates.py:357 msgid "power outlet template" msgstr "Vorlage für Stromabgang" -#: dcim/models/device_component_templates.py:358 +#: netbox/dcim/models/device_component_templates.py:358 msgid "power outlet templates" msgstr "Vorlagen für Steckdosen" -#: dcim/models/device_component_templates.py:367 +#: netbox/dcim/models/device_component_templates.py:367 #, 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" -#: dcim/models/device_component_templates.py:371 +#: netbox/dcim/models/device_component_templates.py:371 #, 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" -#: dcim/models/device_component_templates.py:423 -#: dcim/models/device_components.py:611 +#: netbox/dcim/models/device_component_templates.py:423 +#: netbox/dcim/models/device_components.py:611 msgid "management only" msgstr "Nur Verwaltung" -#: dcim/models/device_component_templates.py:431 -#: dcim/models/device_components.py:550 +#: netbox/dcim/models/device_component_templates.py:431 +#: netbox/dcim/models/device_components.py:550 msgid "bridge interface" msgstr "Bridge-Schnittstelle" -#: dcim/models/device_component_templates.py:449 -#: dcim/models/device_components.py:636 +#: netbox/dcim/models/device_component_templates.py:449 +#: netbox/dcim/models/device_components.py:636 msgid "wireless role" msgstr "WLAN Rolle" -#: dcim/models/device_component_templates.py:455 +#: netbox/dcim/models/device_component_templates.py:455 msgid "interface template" msgstr "Schnittstellenvorlage" -#: dcim/models/device_component_templates.py:456 +#: netbox/dcim/models/device_component_templates.py:456 msgid "interface templates" msgstr "Schnittstellenvorlagen" -#: dcim/models/device_component_templates.py:463 -#: dcim/models/device_components.py:804 -#: virtualization/models/virtualmachines.py:405 +#: netbox/dcim/models/device_component_templates.py:463 +#: netbox/dcim/models/device_components.py:804 +#: netbox/virtualization/models/virtualmachines.py:405 msgid "An interface cannot be bridged to itself." msgstr "Eine Schnittstelle kann nicht zu sich selbst überbrückt werden." -#: dcim/models/device_component_templates.py:466 +#: netbox/dcim/models/device_component_templates.py:466 #, 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" -#: dcim/models/device_component_templates.py:470 +#: netbox/dcim/models/device_component_templates.py:470 #, python-brace-format msgid "Bridge interface ({bridge}) must belong to the same module type" msgstr "Bridge-Schnittstelle ({bridge}) muss zum gleichen Modultyp gehören" -#: dcim/models/device_component_templates.py:526 -#: dcim/models/device_components.py:984 +#: netbox/dcim/models/device_component_templates.py:526 +#: netbox/dcim/models/device_components.py:984 msgid "rear port position" msgstr "Position des Rückanschlusses" -#: dcim/models/device_component_templates.py:551 +#: netbox/dcim/models/device_component_templates.py:551 msgid "front port template" msgstr "Frontanschluss-Vorlage" -#: dcim/models/device_component_templates.py:552 +#: netbox/dcim/models/device_component_templates.py:552 msgid "front port templates" msgstr "Frontanschluss-Vorlagen" -#: dcim/models/device_component_templates.py:562 +#: netbox/dcim/models/device_component_templates.py:562 #, 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" -#: dcim/models/device_component_templates.py:568 +#: netbox/dcim/models/device_component_templates.py:568 #, python-brace-format msgid "" "Invalid rear port position ({position}); rear port {name} has only {count} " @@ -4962,47 +5437,47 @@ msgstr "" "Ungültige Position des hinteren Anschlusses ({position}); hinterer Anschluss" " {name} hat nur {count} Positionen" -#: dcim/models/device_component_templates.py:621 -#: dcim/models/device_components.py:1053 +#: netbox/dcim/models/device_component_templates.py:621 +#: netbox/dcim/models/device_components.py:1053 msgid "positions" msgstr "Positionen" -#: dcim/models/device_component_templates.py:632 +#: netbox/dcim/models/device_component_templates.py:632 msgid "rear port template" msgstr "Vorlage für den Rückanschluss" -#: dcim/models/device_component_templates.py:633 +#: netbox/dcim/models/device_component_templates.py:633 msgid "rear port templates" msgstr "Vorlagen für Rückanschlüsse" -#: dcim/models/device_component_templates.py:662 -#: dcim/models/device_components.py:1103 +#: netbox/dcim/models/device_component_templates.py:662 +#: netbox/dcim/models/device_components.py:1103 msgid "position" msgstr "Position" -#: dcim/models/device_component_templates.py:665 -#: dcim/models/device_components.py:1106 +#: netbox/dcim/models/device_component_templates.py:665 +#: netbox/dcim/models/device_components.py:1106 msgid "Identifier to reference when renaming installed components" msgstr "" "Bezeichner, auf den beim Umbenennen installierter Komponenten verwiesen wird" -#: dcim/models/device_component_templates.py:671 +#: netbox/dcim/models/device_component_templates.py:671 msgid "module bay template" msgstr "Vorlage für Moduleinsatz" -#: dcim/models/device_component_templates.py:672 +#: netbox/dcim/models/device_component_templates.py:672 msgid "module bay templates" msgstr "Vorlagen für Moduleinsätze" -#: dcim/models/device_component_templates.py:699 +#: netbox/dcim/models/device_component_templates.py:699 msgid "device bay template" msgstr "Vorlage für Geräteeinsatz" -#: dcim/models/device_component_templates.py:700 +#: netbox/dcim/models/device_component_templates.py:700 msgid "device bay templates" msgstr "Vorlagen für Geräteeinsätze" -#: dcim/models/device_component_templates.py:713 +#: netbox/dcim/models/device_component_templates.py:713 #, python-brace-format msgid "" "Subdevice role of device type ({device_type}) must be set to \"parent\" to " @@ -5011,209 +5486,214 @@ msgstr "" "Untergeräterolle des Gerätetyps ({device_type}) muss auf „Übergeordnet“ " "gesetzt sein, um Geräteschächte zuzulassen." -#: dcim/models/device_component_templates.py:768 -#: dcim/models/device_components.py:1262 +#: netbox/dcim/models/device_component_templates.py:768 +#: netbox/dcim/models/device_components.py:1262 msgid "part ID" msgstr "Teile-ID" -#: dcim/models/device_component_templates.py:770 -#: dcim/models/device_components.py:1264 +#: netbox/dcim/models/device_component_templates.py:770 +#: netbox/dcim/models/device_components.py:1264 msgid "Manufacturer-assigned part identifier" msgstr "Vom Hersteller zugewiesene Teile-ID" -#: dcim/models/device_component_templates.py:787 +#: netbox/dcim/models/device_component_templates.py:787 msgid "inventory item template" msgstr "Vorlage für Inventarartikel" -#: dcim/models/device_component_templates.py:788 +#: netbox/dcim/models/device_component_templates.py:788 msgid "inventory item templates" msgstr "Vorlagen für Inventarartikel" -#: dcim/models/device_components.py:105 +#: netbox/dcim/models/device_components.py:105 msgid "Components cannot be moved to a different device." msgstr "Komponenten können nicht auf ein anderes Gerät verschoben werden." -#: dcim/models/device_components.py:144 +#: netbox/dcim/models/device_components.py:144 msgid "cable end" msgstr "Kabelende" -#: dcim/models/device_components.py:150 +#: netbox/dcim/models/device_components.py:150 msgid "mark connected" msgstr "als verbunden markieren" -#: dcim/models/device_components.py:152 +#: netbox/dcim/models/device_components.py:152 msgid "Treat as if a cable is connected" msgstr "So behandeln, als ob ein Kabel angeschlossen wäre" -#: dcim/models/device_components.py:170 +#: netbox/dcim/models/device_components.py:170 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." -#: dcim/models/device_components.py:174 +#: netbox/dcim/models/device_components.py:174 msgid "Cable end must not be set without a cable." msgstr "Das Kabelende darf nicht ohne Kabel verlegt werden." -#: dcim/models/device_components.py:178 +#: netbox/dcim/models/device_components.py:178 msgid "Cannot mark as connected with a cable attached." msgstr "Mit angeschlossenem Kabel kann nicht als verbunden markiert werden." -#: dcim/models/device_components.py:202 +#: netbox/dcim/models/device_components.py:202 #, python-brace-format msgid "{class_name} models must declare a parent_object property" msgstr "" "{class_name} Modelle müssen eine parent_object-Eigenschaft deklarieren" -#: dcim/models/device_components.py:287 dcim/models/device_components.py:316 -#: dcim/models/device_components.py:349 dcim/models/device_components.py:467 +#: 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 msgid "Physical port type" msgstr "Physischer Anschlusstyp" -#: dcim/models/device_components.py:290 dcim/models/device_components.py:319 +#: netbox/dcim/models/device_components.py:290 +#: netbox/dcim/models/device_components.py:319 msgid "speed" msgstr "Geschwindigkeit" -#: dcim/models/device_components.py:294 dcim/models/device_components.py:323 +#: netbox/dcim/models/device_components.py:294 +#: netbox/dcim/models/device_components.py:323 msgid "Port speed in bits per second" msgstr "Anschlussgeschwindigkeit in Bit pro Sekunde" -#: dcim/models/device_components.py:300 +#: netbox/dcim/models/device_components.py:300 msgid "console port" msgstr "Konsolenanschluss" -#: dcim/models/device_components.py:301 +#: netbox/dcim/models/device_components.py:301 msgid "console ports" msgstr "Konsolenanschlüsse" -#: dcim/models/device_components.py:329 +#: netbox/dcim/models/device_components.py:329 msgid "console server port" msgstr "Konsolenserveranschluss" -#: dcim/models/device_components.py:330 +#: netbox/dcim/models/device_components.py:330 msgid "console server ports" msgstr "Konsolenserveranschlüsse" -#: dcim/models/device_components.py:369 +#: netbox/dcim/models/device_components.py:369 msgid "power port" msgstr "Stromanschluss" -#: dcim/models/device_components.py:370 +#: netbox/dcim/models/device_components.py:370 msgid "power ports" msgstr "Stromanschlüsse" -#: dcim/models/device_components.py:487 +#: netbox/dcim/models/device_components.py:487 msgid "power outlet" msgstr "Stromabgang" -#: dcim/models/device_components.py:488 +#: netbox/dcim/models/device_components.py:488 msgid "power outlets" msgstr "Steckdosen" -#: dcim/models/device_components.py:499 +#: netbox/dcim/models/device_components.py:499 #, 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" -#: dcim/models/device_components.py:530 vpn/models/crypto.py:81 -#: vpn/models/crypto.py:226 +#: netbox/dcim/models/device_components.py:530 netbox/vpn/models/crypto.py:81 +#: netbox/vpn/models/crypto.py:226 msgid "mode" msgstr "Modus" -#: dcim/models/device_components.py:534 +#: netbox/dcim/models/device_components.py:534 msgid "IEEE 802.1Q tagging strategy" msgstr "IEEE 802.1Q-Tagging-Strategie" -#: dcim/models/device_components.py:542 +#: netbox/dcim/models/device_components.py:542 msgid "parent interface" msgstr "übergeordnete Schnittstelle" -#: dcim/models/device_components.py:602 +#: netbox/dcim/models/device_components.py:602 msgid "parent LAG" msgstr "übergeordnete LAG" -#: dcim/models/device_components.py:612 +#: 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" -#: dcim/models/device_components.py:617 +#: netbox/dcim/models/device_components.py:617 msgid "speed (Kbps)" msgstr "Geschwindigkeit (Kbps)" -#: dcim/models/device_components.py:620 +#: netbox/dcim/models/device_components.py:620 msgid "duplex" msgstr "Duplex" -#: dcim/models/device_components.py:630 +#: netbox/dcim/models/device_components.py:630 msgid "64-bit World Wide Name" msgstr "Weltweiter 64-Bit-Name" -#: dcim/models/device_components.py:642 +#: netbox/dcim/models/device_components.py:642 msgid "wireless channel" msgstr "WLAN Kanal" -#: dcim/models/device_components.py:649 +#: netbox/dcim/models/device_components.py:649 msgid "channel frequency (MHz)" msgstr "Kanalfrequenz (MHz)" -#: dcim/models/device_components.py:650 dcim/models/device_components.py:658 +#: 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)" -#: dcim/models/device_components.py:664 +#: netbox/dcim/models/device_components.py:664 msgid "transmit power (dBm)" msgstr "Sendeleistung (dBm)" -#: dcim/models/device_components.py:689 wireless/models.py:117 +#: netbox/dcim/models/device_components.py:689 netbox/wireless/models.py:117 msgid "wireless LANs" msgstr "WLANs" -#: dcim/models/device_components.py:697 -#: virtualization/models/virtualmachines.py:335 +#: netbox/dcim/models/device_components.py:697 +#: netbox/virtualization/models/virtualmachines.py:335 msgid "untagged VLAN" msgstr "untagged VLAN" -#: dcim/models/device_components.py:703 -#: virtualization/models/virtualmachines.py:341 +#: netbox/dcim/models/device_components.py:703 +#: netbox/virtualization/models/virtualmachines.py:341 msgid "tagged VLANs" msgstr "tagged VLANs" -#: dcim/models/device_components.py:745 -#: virtualization/models/virtualmachines.py:377 +#: netbox/dcim/models/device_components.py:745 +#: netbox/virtualization/models/virtualmachines.py:377 msgid "interface" msgstr "Schnittstelle" -#: dcim/models/device_components.py:746 -#: virtualization/models/virtualmachines.py:378 +#: netbox/dcim/models/device_components.py:746 +#: netbox/virtualization/models/virtualmachines.py:378 msgid "interfaces" msgstr "Schnittstellen" -#: dcim/models/device_components.py:757 +#: netbox/dcim/models/device_components.py:757 #, python-brace-format msgid "{display_type} interfaces cannot have a cable attached." msgstr "" "{display_type} An Schnittstellen kann kein Kabel angeschlossen werden." -#: dcim/models/device_components.py:765 +#: netbox/dcim/models/device_components.py:765 #, python-brace-format msgid "{display_type} interfaces cannot be marked as connected." msgstr "" "{display_type} Schnittstellen können nicht als verbunden markiert werden." -#: dcim/models/device_components.py:774 -#: virtualization/models/virtualmachines.py:390 +#: netbox/dcim/models/device_components.py:774 +#: netbox/virtualization/models/virtualmachines.py:390 msgid "An interface cannot be its own parent." msgstr "" "Eine Schnittstelle kann nicht seine eigene übergeordnete Schnittstelle sein." -#: dcim/models/device_components.py:778 +#: netbox/dcim/models/device_components.py:778 msgid "Only virtual interfaces may be assigned to a parent interface." msgstr "" "Nur virtuelle Schnittstellen können einer übergeordneten Schnittstelle " "zugewiesen werden." -#: dcim/models/device_components.py:785 +#: netbox/dcim/models/device_components.py:785 #, python-brace-format msgid "" "The selected parent interface ({interface}) belongs to a different device " @@ -5222,7 +5702,7 @@ msgstr "" "Die ausgewählte übergeordnete Schnittstelle ({interface}) gehört zu einem " "anderen Gerät ({device})" -#: dcim/models/device_components.py:791 +#: netbox/dcim/models/device_components.py:791 #, python-brace-format msgid "" "The selected parent interface ({interface}) belongs to {device}, which is " @@ -5231,7 +5711,7 @@ msgstr "" "Die ausgewählte übergeordnete Schnittstelle ({interface}) gehört zu " "{device}, das nicht Teil des virtuellen Chassis ist {virtual_chassis}." -#: dcim/models/device_components.py:811 +#: netbox/dcim/models/device_components.py:811 #, python-brace-format msgid "" "The selected bridge interface ({bridge}) belongs to a different device " @@ -5240,26 +5720,26 @@ msgstr "" "Die gewählte Bridge-Schnittstelle ({bridge}) gehört zu einem anderen Gerät " "({device})." -#: dcim/models/device_components.py:817 +#: netbox/dcim/models/device_components.py:817 #, python-brace-format msgid "" "The selected bridge interface ({interface}) belongs to {device}, which is " "not part of virtual chassis {virtual_chassis}." msgstr "" "Die gewählte Bridge-Schnittstelle ({interface}) gehört zu {device}, das " -"nicht Teil des virtuellen Chassis ist {virtual_chassis}." +"nicht Teil des virtuellen Chassis {virtual_chassis}ist." -#: dcim/models/device_components.py:828 +#: netbox/dcim/models/device_components.py:828 msgid "Virtual interfaces cannot have a parent LAG interface." msgstr "" "Virtuelle Schnittstellen können keine übergeordnete LAG-Schnittstelle haben." -#: dcim/models/device_components.py:832 +#: netbox/dcim/models/device_components.py:832 msgid "A LAG interface cannot be its own parent." msgstr "" "Eine LAG-Schnittstelle nicht seine eigene übergeordnete Schnittstelle sein." -#: dcim/models/device_components.py:839 +#: netbox/dcim/models/device_components.py:839 #, python-brace-format msgid "" "The selected LAG interface ({lag}) belongs to a different device ({device})." @@ -5267,59 +5747,59 @@ msgstr "" "Die gewählte LAG-Schnittstelle ({lag}) gehört zu einem anderen Gerät " "({device})." -#: dcim/models/device_components.py:845 +#: netbox/dcim/models/device_components.py:845 #, python-brace-format msgid "" "The selected LAG interface ({lag}) belongs to {device}, which is not part of" " virtual chassis {virtual_chassis}." msgstr "" "Die gewählte LAG-Schnittstelle ({lag}) gehört zu {device}, das nicht Teil " -"des virtuellen Chassis ist {virtual_chassis}." +"des virtuellen Chassis {virtual_chassis} ist." -#: dcim/models/device_components.py:856 +#: netbox/dcim/models/device_components.py:856 msgid "Virtual interfaces cannot have a PoE mode." msgstr "Virtuelle Schnittstellen können keinen PoE-Modus haben." -#: dcim/models/device_components.py:860 +#: netbox/dcim/models/device_components.py:860 msgid "Virtual interfaces cannot have a PoE type." msgstr "Virtuelle Schnittstellen können keinen PoE-Typ haben." -#: dcim/models/device_components.py:866 +#: netbox/dcim/models/device_components.py:866 msgid "Must specify PoE mode when designating a PoE type." msgstr "" "Bei der Festlegung eines PoE-Typs muss der PoE-Modus angegeben werden." -#: dcim/models/device_components.py:873 +#: netbox/dcim/models/device_components.py:873 msgid "Wireless role may be set only on wireless interfaces." msgstr "Die WLAN-Rolle kann nur auf Funkschnittstellen festgelegt werden." -#: dcim/models/device_components.py:875 +#: netbox/dcim/models/device_components.py:875 msgid "Channel may be set only on wireless interfaces." msgstr "Der Kanal kann nur an drahtlosen Schnittstellen eingestellt werden." -#: dcim/models/device_components.py:881 +#: netbox/dcim/models/device_components.py:881 msgid "Channel frequency may be set only on wireless interfaces." msgstr "" "Die Kanalfrequenz kann nur an drahtlosen Schnittstellen eingestellt werden." -#: dcim/models/device_components.py:885 +#: netbox/dcim/models/device_components.py:885 msgid "Cannot specify custom frequency with channel selected." msgstr "" "Bei ausgewähltem Kanal kann keine benutzerdefinierte Frequenz angegeben " "werden." -#: dcim/models/device_components.py:891 +#: netbox/dcim/models/device_components.py:891 msgid "Channel width may be set only on wireless interfaces." msgstr "" "Die Kanalbreite kann nur an drahtlosen Schnittstellen eingestellt werden." -#: dcim/models/device_components.py:893 +#: netbox/dcim/models/device_components.py:893 msgid "Cannot specify custom width with channel selected." msgstr "" "Bei ausgewähltem Kanal kann keine benutzerdefinierte Breite angegeben " "werden." -#: dcim/models/device_components.py:901 +#: netbox/dcim/models/device_components.py:901 #, python-brace-format msgid "" "The untagged VLAN ({untagged_vlan}) must belong to the same site as the " @@ -5328,24 +5808,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." -#: dcim/models/device_components.py:990 +#: netbox/dcim/models/device_components.py:990 msgid "Mapped position on corresponding rear port" msgstr "Abgebildete Position am entsprechenden hinteren Anschluss" -#: dcim/models/device_components.py:1006 +#: netbox/dcim/models/device_components.py:1006 msgid "front port" msgstr "Frontanschluss" -#: dcim/models/device_components.py:1007 +#: netbox/dcim/models/device_components.py:1007 msgid "front ports" msgstr "Frontanschlüsse" -#: dcim/models/device_components.py:1021 +#: netbox/dcim/models/device_components.py:1021 #, 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" -#: dcim/models/device_components.py:1029 +#: netbox/dcim/models/device_components.py:1029 #, python-brace-format msgid "" "Invalid rear port position ({rear_port_position}): Rear port {name} has only" @@ -5354,19 +5834,19 @@ msgstr "" "Ungültige Position des hinteren Anschlusses ({rear_port_position}): Hinterer" " Anschluss {name} hat nur {positions} Stellungen." -#: dcim/models/device_components.py:1059 +#: netbox/dcim/models/device_components.py:1059 msgid "Number of front ports which may be mapped" msgstr "Anzahl der Frontanschlüsse, die zugeordnet werden können" -#: dcim/models/device_components.py:1064 +#: netbox/dcim/models/device_components.py:1064 msgid "rear port" msgstr "Rückanschluss" -#: dcim/models/device_components.py:1065 +#: netbox/dcim/models/device_components.py:1065 msgid "rear ports" msgstr "Rückanschlüsse" -#: dcim/models/device_components.py:1079 +#: netbox/dcim/models/device_components.py:1079 #, python-brace-format msgid "" "The number of positions cannot be less than the number of mapped front ports" @@ -5375,37 +5855,38 @@ msgstr "" "Die Anzahl der Positionen darf nicht kleiner sein als die Anzahl der " "zugewiesenen Vorderanschlüsse ({frontport_count})" -#: dcim/models/device_components.py:1120 +#: netbox/dcim/models/device_components.py:1120 msgid "module bay" msgstr "Moduleinsatz" -#: dcim/models/device_components.py:1121 +#: netbox/dcim/models/device_components.py:1121 msgid "module bays" msgstr "Moduleinsätze" -#: dcim/models/device_components.py:1138 dcim/models/devices.py:1224 +#: netbox/dcim/models/device_components.py:1138 +#: netbox/dcim/models/devices.py:1224 msgid "A module bay cannot belong to a module installed within it." msgstr "" "Ein Modulschacht kann nicht zu einem darin installierten Modul gehören." -#: dcim/models/device_components.py:1164 +#: netbox/dcim/models/device_components.py:1164 msgid "device bay" msgstr "Geräteeinsatz" -#: dcim/models/device_components.py:1165 +#: netbox/dcim/models/device_components.py:1165 msgid "device bays" msgstr "Geräteeinsätze" -#: dcim/models/device_components.py:1175 +#: netbox/dcim/models/device_components.py:1175 #, 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." -#: dcim/models/device_components.py:1181 +#: netbox/dcim/models/device_components.py:1181 msgid "Cannot install a device into itself." msgstr "Ein Gerät kann nicht in sich selbst installiert werden." -#: dcim/models/device_components.py:1189 +#: netbox/dcim/models/device_components.py:1189 #, python-brace-format msgid "" "Cannot install the specified device; device is already installed in {bay}." @@ -5413,120 +5894,122 @@ msgstr "" "Das angegebene Gerät kann nicht installiert werden; Das Gerät ist bereits " "installiert in {bay}." -#: dcim/models/device_components.py:1210 +#: netbox/dcim/models/device_components.py:1210 msgid "inventory item role" msgstr "Inventarartikelrolle" -#: dcim/models/device_components.py:1211 +#: netbox/dcim/models/device_components.py:1211 msgid "inventory item roles" msgstr "Inventarartikelrollen" -#: dcim/models/device_components.py:1268 dcim/models/devices.py:607 -#: dcim/models/devices.py:1181 dcim/models/racks.py:313 -#: virtualization/models/virtualmachines.py:131 +#: 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 msgid "serial number" msgstr "Seriennummer" -#: dcim/models/device_components.py:1276 dcim/models/devices.py:615 -#: dcim/models/devices.py:1188 dcim/models/racks.py:320 +#: 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 msgid "asset tag" msgstr "Asset-Tag" -#: dcim/models/device_components.py:1277 +#: netbox/dcim/models/device_components.py:1277 msgid "A unique tag used to identify this item" msgstr "" "Ein eindeutiges Etikett, das zur Identifizierung dieses Artikels verwendet " "wird" -#: dcim/models/device_components.py:1280 +#: netbox/dcim/models/device_components.py:1280 msgid "discovered" msgstr "erkannt" -#: dcim/models/device_components.py:1282 +#: netbox/dcim/models/device_components.py:1282 msgid "This item was automatically discovered" msgstr "Dieser Artikel wurde automatisch erkannt" -#: dcim/models/device_components.py:1300 +#: netbox/dcim/models/device_components.py:1300 msgid "inventory item" msgstr "Inventarartikel" -#: dcim/models/device_components.py:1301 +#: netbox/dcim/models/device_components.py:1301 msgid "inventory items" msgstr "Inventarartikel" -#: dcim/models/device_components.py:1312 +#: netbox/dcim/models/device_components.py:1312 msgid "Cannot assign self as parent." msgstr "Kann sich nicht als übergeordnetes Objekt zuweisen." -#: dcim/models/device_components.py:1320 +#: netbox/dcim/models/device_components.py:1320 msgid "Parent inventory item does not belong to the same device." msgstr "Der Artikel im übergeordneten Inventar gehört nicht zum selben Gerät." -#: dcim/models/device_components.py:1326 +#: netbox/dcim/models/device_components.py:1326 msgid "Cannot move an inventory item with dependent children" msgstr "" "Ein Inventargegenstand mit untergeordneten Inventargegenständen kann nicht " "bewegt werden" -#: dcim/models/device_components.py:1334 +#: netbox/dcim/models/device_components.py:1334 msgid "Cannot assign inventory item to component on another device" msgstr "" "Inventargegenstand kann nicht einer Komponente auf einem anderen Gerät " "zugewiesen werden" -#: dcim/models/devices.py:54 +#: netbox/dcim/models/devices.py:54 msgid "manufacturer" msgstr "Hersteller" -#: dcim/models/devices.py:55 +#: netbox/dcim/models/devices.py:55 msgid "manufacturers" msgstr "Hersteller" -#: dcim/models/devices.py:82 dcim/models/devices.py:382 -#: dcim/models/racks.py:133 +#: netbox/dcim/models/devices.py:82 netbox/dcim/models/devices.py:382 +#: netbox/dcim/models/racks.py:133 msgid "model" msgstr "Modell" -#: dcim/models/devices.py:95 +#: netbox/dcim/models/devices.py:95 msgid "default platform" msgstr "Standard-Betriebssystem" -#: dcim/models/devices.py:98 dcim/models/devices.py:386 +#: netbox/dcim/models/devices.py:98 netbox/dcim/models/devices.py:386 msgid "part number" msgstr "Teilenummer" -#: dcim/models/devices.py:101 dcim/models/devices.py:389 +#: netbox/dcim/models/devices.py:101 netbox/dcim/models/devices.py:389 msgid "Discrete part number (optional)" msgstr "Diskrete Teilenummer (optional)" -#: dcim/models/devices.py:107 dcim/models/racks.py:54 +#: netbox/dcim/models/devices.py:107 netbox/dcim/models/racks.py:54 msgid "height (U)" msgstr "Höhe (HE)" -#: dcim/models/devices.py:111 +#: netbox/dcim/models/devices.py:111 msgid "exclude from utilization" msgstr "von der Auslastung ausschließen" -#: dcim/models/devices.py:112 +#: netbox/dcim/models/devices.py:112 msgid "Devices of this type are excluded when calculating rack utilization." msgstr "" "Geräte diesen Typs sind bei der Berechnung der Rackauslastung " "ausgeschlossen." -#: dcim/models/devices.py:116 +#: netbox/dcim/models/devices.py:116 msgid "is full depth" msgstr "hat volle Tiefe" -#: dcim/models/devices.py:117 +#: netbox/dcim/models/devices.py:117 msgid "Device consumes both front and rear rack faces." msgstr "" "Das Gerät verbraucht sowohl die vordere als auch die hintere Rackfront." -#: dcim/models/devices.py:123 +#: netbox/dcim/models/devices.py:123 msgid "parent/child status" msgstr "Über-/Untergeordnetenstatus" -#: dcim/models/devices.py:124 +#: netbox/dcim/models/devices.py:124 msgid "" "Parent devices house child devices in device bays. Leave blank if this " "device type is neither a parent nor a child." @@ -5535,25 +6018,25 @@ msgstr "" "untergebracht. Lassen Sie das Feld leer, wenn es sich bei diesem Gerätetyp " "weder um ein übergeordnetes noch um ein untergeordnetes handelt." -#: dcim/models/devices.py:128 dcim/models/devices.py:392 -#: dcim/models/devices.py:659 dcim/models/racks.py:324 +#: netbox/dcim/models/devices.py:128 netbox/dcim/models/devices.py:392 +#: netbox/dcim/models/devices.py:659 netbox/dcim/models/racks.py:324 msgid "airflow" msgstr "Luftstrom" -#: dcim/models/devices.py:204 +#: netbox/dcim/models/devices.py:204 msgid "device type" msgstr "Gerätetyp" -#: dcim/models/devices.py:205 +#: netbox/dcim/models/devices.py:205 msgid "device types" msgstr "Gerätetypen" -#: dcim/models/devices.py:290 +#: netbox/dcim/models/devices.py:290 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." -#: dcim/models/devices.py:307 +#: netbox/dcim/models/devices.py:307 #, python-brace-format msgid "" "Device {device} in rack {rack} does not have sufficient space to accommodate" @@ -5562,7 +6045,7 @@ msgstr "" "Gerät {device} im Rack {rack} hat nicht genug Platz für eine Höhe von " "{height}HE" -#: dcim/models/devices.py:322 +#: netbox/dcim/models/devices.py:322 #, python-brace-format msgid "" "Unable to set 0U height: Found {racked_instance_count} " @@ -5572,7 +6055,7 @@ msgstr "" "href=\"{url}\">{racked_instance_count} Instanzen bereits in Racks " "montiert." -#: dcim/models/devices.py:331 +#: netbox/dcim/models/devices.py:331 msgid "" "Must delete all device bay templates associated with this device before " "declassifying it as a parent device." @@ -5580,156 +6063,156 @@ msgstr "" "Alle mit diesem Gerät verknüpften Geräteschachtvorlagen müssen gelöscht " "werden, bevor es als übergeordnetes Gerät freigegeben wird." -#: dcim/models/devices.py:337 +#: netbox/dcim/models/devices.py:337 msgid "Child device types must be 0U." msgstr "Untergeordnete Gerätetypen müssen 0 HE sein." -#: dcim/models/devices.py:411 +#: netbox/dcim/models/devices.py:411 msgid "module type" msgstr "Modultyp" -#: dcim/models/devices.py:412 +#: netbox/dcim/models/devices.py:412 msgid "module types" msgstr "Modultypen" -#: dcim/models/devices.py:485 +#: netbox/dcim/models/devices.py:485 msgid "Virtual machines may be assigned to this role" msgstr "Virtuelle Maschinen können dieser Rolle zugewiesen werden" -#: dcim/models/devices.py:497 +#: netbox/dcim/models/devices.py:497 msgid "device role" msgstr "Geräterolle" -#: dcim/models/devices.py:498 +#: netbox/dcim/models/devices.py:498 msgid "device roles" msgstr "Geräterollen" -#: dcim/models/devices.py:515 +#: netbox/dcim/models/devices.py:515 msgid "Optionally limit this platform to devices of a certain manufacturer" msgstr "" "Beschränken Sie dieses Betriebssystem optional auf Geräte eines bestimmten " "Herstellers" -#: dcim/models/devices.py:527 +#: netbox/dcim/models/devices.py:527 msgid "platform" msgstr "Betriebssystem" -#: dcim/models/devices.py:528 +#: netbox/dcim/models/devices.py:528 msgid "platforms" msgstr "Betriebssysteme" -#: dcim/models/devices.py:576 +#: netbox/dcim/models/devices.py:576 msgid "The function this device serves" msgstr "Die Funktion, die dieses Gerät erfüllt" -#: dcim/models/devices.py:608 +#: netbox/dcim/models/devices.py:608 msgid "Chassis serial number, assigned by the manufacturer" msgstr "vom Hersteller vergebene Gehäuse-Seriennummer" -#: dcim/models/devices.py:616 dcim/models/devices.py:1189 +#: netbox/dcim/models/devices.py:616 netbox/dcim/models/devices.py:1189 msgid "A unique tag used to identify this device" msgstr "" "Ein eindeutiger Wert, der zur Identifizierung dieses Geräts verwendet wird" -#: dcim/models/devices.py:643 +#: netbox/dcim/models/devices.py:643 msgid "position (U)" msgstr "Position (HE)" -#: dcim/models/devices.py:650 +#: netbox/dcim/models/devices.py:650 msgid "rack face" msgstr "Rackseite" -#: dcim/models/devices.py:670 dcim/models/devices.py:1415 -#: virtualization/models/virtualmachines.py:100 +#: netbox/dcim/models/devices.py:670 netbox/dcim/models/devices.py:1420 +#: netbox/virtualization/models/virtualmachines.py:100 msgid "primary IPv4" msgstr "primäre IPv4-Adresse" -#: dcim/models/devices.py:678 dcim/models/devices.py:1423 -#: virtualization/models/virtualmachines.py:108 +#: netbox/dcim/models/devices.py:678 netbox/dcim/models/devices.py:1428 +#: netbox/virtualization/models/virtualmachines.py:108 msgid "primary IPv6" msgstr "primäre IPv6-Adresse" -#: dcim/models/devices.py:686 +#: netbox/dcim/models/devices.py:686 msgid "out-of-band IP" msgstr "Out-of-Band-IP-Adresse" -#: dcim/models/devices.py:703 +#: netbox/dcim/models/devices.py:703 msgid "VC position" msgstr "VC-Position" -#: dcim/models/devices.py:706 +#: netbox/dcim/models/devices.py:706 msgid "Virtual chassis position" msgstr "Position des virtuellen Gehäuses" -#: dcim/models/devices.py:709 +#: netbox/dcim/models/devices.py:709 msgid "VC priority" msgstr "VC-Priorität" -#: dcim/models/devices.py:713 +#: netbox/dcim/models/devices.py:713 msgid "Virtual chassis master election priority" msgstr "Priorität bei der Masterwahl für virtuelle Gehäuse" -#: dcim/models/devices.py:716 dcim/models/sites.py:207 +#: netbox/dcim/models/devices.py:716 netbox/dcim/models/sites.py:207 msgid "latitude" msgstr "Breitengrad" -#: dcim/models/devices.py:721 dcim/models/devices.py:729 -#: dcim/models/sites.py:212 dcim/models/sites.py:220 +#: netbox/dcim/models/devices.py:721 netbox/dcim/models/devices.py:729 +#: netbox/dcim/models/sites.py:212 netbox/dcim/models/sites.py:220 msgid "GPS coordinate in decimal format (xx.yyyyyy)" msgstr "GPS-Koordinate im Dezimalformat (xx.yyyyyy)" -#: dcim/models/devices.py:724 dcim/models/sites.py:215 +#: netbox/dcim/models/devices.py:724 netbox/dcim/models/sites.py:215 msgid "longitude" msgstr "Längengrad" -#: dcim/models/devices.py:797 +#: netbox/dcim/models/devices.py:797 msgid "Device name must be unique per site." msgstr "Der Name des Geräts muss pro Standort eindeutig sein." -#: dcim/models/devices.py:808 ipam/models/services.py:75 +#: netbox/dcim/models/devices.py:808 netbox/ipam/models/services.py:75 msgid "device" msgstr "Gerät" -#: dcim/models/devices.py:809 +#: netbox/dcim/models/devices.py:809 msgid "devices" msgstr "Geräte" -#: dcim/models/devices.py:835 +#: netbox/dcim/models/devices.py:835 #, python-brace-format msgid "Rack {rack} does not belong to site {site}." msgstr "Rack {rack} gehört nicht zum Standort {site}." -#: dcim/models/devices.py:840 +#: netbox/dcim/models/devices.py:840 #, python-brace-format msgid "Location {location} does not belong to site {site}." msgstr "Lokation {location} gehört nicht zum Standort {site}." -#: dcim/models/devices.py:846 +#: netbox/dcim/models/devices.py:846 #, python-brace-format msgid "Rack {rack} does not belong to location {location}." msgstr "Rack {rack} gehört nicht zur Lokation {location}." -#: dcim/models/devices.py:853 +#: netbox/dcim/models/devices.py:853 msgid "Cannot select a rack face without assigning a rack." msgstr "" "Es ist nicht möglich, eine Rackseite auszuwählen, ohne ein Rack zuzuweisen." -#: dcim/models/devices.py:857 +#: netbox/dcim/models/devices.py:857 msgid "Cannot select a rack position without assigning a rack." msgstr "" "Es ist nicht möglich, eine Rackposition auszuwählen, ohne ein Rack " "zuzuweisen." -#: dcim/models/devices.py:863 +#: netbox/dcim/models/devices.py:863 msgid "Position must be in increments of 0.5 rack units." msgstr "Die Position muss in Schritten von 0,5 Höheneinheiten erfolgen." -#: dcim/models/devices.py:867 +#: netbox/dcim/models/devices.py:867 msgid "Must specify rack face when defining rack position." msgstr "" "Bei der Definition der Rackposition muss die Rackseite angegeben werden." -#: dcim/models/devices.py:875 +#: netbox/dcim/models/devices.py:875 #, python-brace-format msgid "" "A 0U device type ({device_type}) cannot be assigned to a rack position." @@ -5737,7 +6220,7 @@ msgstr "" "Ein 0 HE-Gerätetyp ({device_type}) kann keiner Höheneinheit zugewiesen " "werden." -#: dcim/models/devices.py:886 +#: netbox/dcim/models/devices.py:886 msgid "" "Child device types cannot be assigned to a rack face. This is an attribute " "of the parent device." @@ -5745,7 +6228,7 @@ msgstr "" "Untergeordnete Gerätetypen können keiner Rackseite zugewiesen werden. Dies " "ist ein Attribut des übergeordneten Geräts." -#: dcim/models/devices.py:893 +#: netbox/dcim/models/devices.py:893 msgid "" "Child device types cannot be assigned to a rack position. This is an " "attribute of the parent device." @@ -5753,7 +6236,7 @@ msgstr "" "Untergeordnete Gerätetypen können keiner Rackposition zugewiesen werden. " "Dies ist ein Attribut des übergeordneten Geräts." -#: dcim/models/devices.py:907 +#: netbox/dcim/models/devices.py:907 #, python-brace-format msgid "" "U{position} is already occupied or does not have sufficient space to " @@ -5762,22 +6245,22 @@ msgstr "" "HE{position} ist bereits belegt oder verfügt nicht über ausreichend " "Speicherplatz für diesen Gerätetyp: {device_type} ({u_height}HE)" -#: dcim/models/devices.py:922 +#: netbox/dcim/models/devices.py:922 #, python-brace-format msgid "{ip} is not an IPv4 address." msgstr "{ip} ist keine IPv4-Adresse." -#: dcim/models/devices.py:931 dcim/models/devices.py:946 +#: netbox/dcim/models/devices.py:931 netbox/dcim/models/devices.py:946 #, 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." -#: dcim/models/devices.py:937 +#: netbox/dcim/models/devices.py:937 #, python-brace-format msgid "{ip} is not an IPv6 address." msgstr "{ip} ist keine IPv6-Adresse." -#: dcim/models/devices.py:964 +#: netbox/dcim/models/devices.py:964 #, python-brace-format msgid "" "The assigned platform is limited to {platform_manufacturer} device types, " @@ -5786,18 +6269,18 @@ msgstr "" "Das zugewiesene Betriebssystem ist beschränkt auf {platform_manufacturer} " "Gerätetypen, aber der Typ dieses Geräts gehört zu {devicetype_manufacturer}." -#: dcim/models/devices.py:975 +#: netbox/dcim/models/devices.py:975 #, python-brace-format msgid "The assigned cluster belongs to a different site ({site})" msgstr "Der zugewiesene Cluster gehört zu einem anderen Standort ({site})" -#: dcim/models/devices.py:983 +#: netbox/dcim/models/devices.py:983 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" " definiert sein." -#: dcim/models/devices.py:988 +#: netbox/dcim/models/devices.py:988 #, python-brace-format msgid "" "Device cannot be removed from virtual chassis {virtual_chassis} because it " @@ -5806,15 +6289,15 @@ msgstr "" "Gerät kann nicht aus dem virtuellen Gehäuse entfernt werden " "{virtual_chassis} weil es derzeit der Master ist." -#: dcim/models/devices.py:1196 +#: netbox/dcim/models/devices.py:1196 msgid "module" msgstr "Modul" -#: dcim/models/devices.py:1197 +#: netbox/dcim/models/devices.py:1197 msgid "modules" msgstr "Module" -#: dcim/models/devices.py:1213 +#: netbox/dcim/models/devices.py:1213 #, python-brace-format msgid "" "Module must be installed within a module bay belonging to the assigned " @@ -5823,15 +6306,15 @@ msgstr "" "Das Modul muss in einem Modulschacht installiert werden, der zum " "zugewiesenen Gerät gehört ({device})." -#: dcim/models/devices.py:1334 +#: netbox/dcim/models/devices.py:1339 msgid "domain" msgstr "Domäne" -#: dcim/models/devices.py:1347 dcim/models/devices.py:1348 +#: netbox/dcim/models/devices.py:1352 netbox/dcim/models/devices.py:1353 msgid "virtual chassis" msgstr "virtuelles Gehäuse" -#: dcim/models/devices.py:1363 +#: netbox/dcim/models/devices.py:1368 #, python-brace-format msgid "" "The selected master ({master}) is not assigned to this virtual chassis." @@ -5839,7 +6322,7 @@ msgstr "" "Der gewählte Master ({master}) ist diesem virtuellen Chassis nicht " "zugewiesen." -#: dcim/models/devices.py:1379 +#: netbox/dcim/models/devices.py:1384 #, python-brace-format msgid "" "Unable to delete virtual chassis {self}. There are member interfaces which " @@ -5848,63 +6331,63 @@ msgstr "" "Das virtuelle Gehäuse kann nicht gelöscht werden {self}. Es gibt " "Mitgliedsschnittstellen, die gehäuseübergreifende LAG-Schnittstellen bilden." -#: dcim/models/devices.py:1404 vpn/models/l2vpn.py:37 +#: netbox/dcim/models/devices.py:1409 netbox/vpn/models/l2vpn.py:37 msgid "identifier" msgstr "identifizieren" -#: dcim/models/devices.py:1405 +#: netbox/dcim/models/devices.py:1410 msgid "Numeric identifier unique to the parent device" msgstr "Numerische Kennung, die für das übergeordnete Gerät eindeutig ist" -#: dcim/models/devices.py:1433 extras/models/customfields.py:225 -#: extras/models/models.py:107 extras/models/models.py:694 -#: netbox/models/__init__.py:115 +#: 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:115 msgid "comments" msgstr "Kommentare" -#: dcim/models/devices.py:1449 +#: netbox/dcim/models/devices.py:1454 msgid "virtual device context" msgstr "Virtual Device Context" -#: dcim/models/devices.py:1450 +#: netbox/dcim/models/devices.py:1455 msgid "virtual device contexts" msgstr "Virtual Device Context" -#: dcim/models/devices.py:1482 +#: netbox/dcim/models/devices.py:1487 #, python-brace-format msgid "{ip} is not an IPv{family} address." msgstr "{ip} ist keine IPv{family}-Adresse." -#: dcim/models/devices.py:1488 +#: netbox/dcim/models/devices.py:1493 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." -#: dcim/models/mixins.py:15 extras/models/configs.py:41 -#: extras/models/models.py:313 extras/models/models.py:522 -#: extras/models/search.py:48 ipam/models/ip.py:194 +#: netbox/dcim/models/mixins.py:15 netbox/extras/models/configs.py:41 +#: netbox/extras/models/models.py:313 netbox/extras/models/models.py:522 +#: netbox/extras/models/search.py:48 netbox/ipam/models/ip.py:194 msgid "weight" msgstr "Gewicht" -#: dcim/models/mixins.py:22 +#: netbox/dcim/models/mixins.py:22 msgid "weight unit" msgstr "Gewichtseinheit" -#: dcim/models/mixins.py:51 +#: netbox/dcim/models/mixins.py:51 msgid "Must specify a unit when setting a weight" msgstr "" "Wenn ein Gewicht eingegeben wird, muss auch eine Einheit eingegeben werden." -#: dcim/models/power.py:55 +#: netbox/dcim/models/power.py:55 msgid "power panel" msgstr "Stromverteiler" -#: dcim/models/power.py:56 +#: netbox/dcim/models/power.py:56 msgid "power panels" msgstr "Stromverteiler" -#: dcim/models/power.py:70 +#: netbox/dcim/models/power.py:70 #, python-brace-format msgid "" "Location {location} ({location_site}) is in a different site than {site}" @@ -5912,43 +6395,43 @@ msgstr "" "Lokation {location} ({location_site}) befindet sich auf einem anderen " "Standort als {site}" -#: dcim/models/power.py:108 +#: netbox/dcim/models/power.py:108 msgid "supply" msgstr "liefern" -#: dcim/models/power.py:114 +#: netbox/dcim/models/power.py:114 msgid "phase" msgstr "Phase" -#: dcim/models/power.py:120 +#: netbox/dcim/models/power.py:120 msgid "voltage" msgstr "Spannung" -#: dcim/models/power.py:125 +#: netbox/dcim/models/power.py:125 msgid "amperage" msgstr "Stromstärke" -#: dcim/models/power.py:130 +#: netbox/dcim/models/power.py:130 msgid "max utilization" msgstr "maximale Auslastung" -#: dcim/models/power.py:133 +#: netbox/dcim/models/power.py:133 msgid "Maximum permissible draw (percentage)" msgstr "Maximal zulässige Auslastung (in Prozent)" -#: dcim/models/power.py:136 +#: netbox/dcim/models/power.py:136 msgid "available power" msgstr "verfügbare Leistung" -#: dcim/models/power.py:164 +#: netbox/dcim/models/power.py:164 msgid "power feed" msgstr "Stromzufuhr" -#: dcim/models/power.py:165 +#: netbox/dcim/models/power.py:165 msgid "power feeds" msgstr "Stromzufuhren" -#: dcim/models/power.py:179 +#: netbox/dcim/models/power.py:179 #, python-brace-format msgid "" "Rack {rack} ({rack_site}) and power panel {powerpanel} ({powerpanel_site}) " @@ -5957,63 +6440,63 @@ msgstr "" "Rack {rack} ({rack_site}) und Stromverteiler {powerpanel} " "({powerpanel_site}) befinden sich an verschiedenen Sites." -#: dcim/models/power.py:190 +#: netbox/dcim/models/power.py:190 msgid "Voltage cannot be negative for AC supply" msgstr "Die Spannung darf für die Wechselstromversorgung nicht negativ sein" -#: dcim/models/racks.py:47 +#: netbox/dcim/models/racks.py:47 msgid "width" msgstr "Breite" -#: dcim/models/racks.py:48 +#: netbox/dcim/models/racks.py:48 msgid "Rail-to-rail width" msgstr "Breite von Schiene zu Schiene" -#: dcim/models/racks.py:56 +#: netbox/dcim/models/racks.py:56 msgid "Height in rack units" msgstr "Höhe in Höheneinheiten (HE)" -#: dcim/models/racks.py:60 +#: netbox/dcim/models/racks.py:60 msgid "starting unit" msgstr "Start HE" -#: dcim/models/racks.py:62 +#: netbox/dcim/models/racks.py:62 msgid "Starting unit for rack" msgstr "Start HE für Rack" -#: dcim/models/racks.py:66 +#: netbox/dcim/models/racks.py:66 msgid "descending units" msgstr "absteigende Höheneinheiten" -#: dcim/models/racks.py:67 +#: netbox/dcim/models/racks.py:67 msgid "Units are numbered top-to-bottom" msgstr "Die Höheneinheiten sind von oben nach unten nummeriert" -#: dcim/models/racks.py:72 +#: netbox/dcim/models/racks.py:72 msgid "outer width" msgstr "äußere Breite" -#: dcim/models/racks.py:75 +#: netbox/dcim/models/racks.py:75 msgid "Outer dimension of rack (width)" msgstr "Außenabmessungen des Racks (Breite)" -#: dcim/models/racks.py:78 +#: netbox/dcim/models/racks.py:78 msgid "outer depth" msgstr "äußere Tiefe" -#: dcim/models/racks.py:81 +#: netbox/dcim/models/racks.py:81 msgid "Outer dimension of rack (depth)" msgstr "Außenabmessung des Racks (Tiefe)" -#: dcim/models/racks.py:84 +#: netbox/dcim/models/racks.py:84 msgid "outer unit" msgstr "Maßeinheit" -#: dcim/models/racks.py:90 +#: netbox/dcim/models/racks.py:90 msgid "mounting depth" msgstr "Einbautiefe" -#: dcim/models/racks.py:94 +#: netbox/dcim/models/racks.py:94 msgid "" "Maximum depth of a mounted device, in millimeters. For four-post racks, this" " is the distance between the front and rear rails." @@ -6021,78 +6504,79 @@ msgstr "" "Maximale Tiefe eines montierten Geräts in Millimetern. Bei Racks mit vier " "Pfosten ist dies der Abstand zwischen den vorderen und hinteren Schienen." -#: dcim/models/racks.py:102 +#: netbox/dcim/models/racks.py:102 msgid "max weight" msgstr "maximales Gewicht" -#: dcim/models/racks.py:105 +#: netbox/dcim/models/racks.py:105 msgid "Maximum load capacity for the rack" msgstr "Maximale Tragfähigkeit des Racks" -#: dcim/models/racks.py:125 dcim/models/racks.py:252 +#: netbox/dcim/models/racks.py:125 netbox/dcim/models/racks.py:252 msgid "form factor" msgstr "Formfaktor" -#: dcim/models/racks.py:162 +#: netbox/dcim/models/racks.py:162 msgid "rack type" msgstr "Racktyp" -#: dcim/models/racks.py:163 +#: netbox/dcim/models/racks.py:163 msgid "rack types" msgstr "Racktypen" -#: dcim/models/racks.py:180 dcim/models/racks.py:379 +#: netbox/dcim/models/racks.py:180 netbox/dcim/models/racks.py:379 msgid "Must specify a unit when setting an outer width/depth" msgstr "" "Muss eine Einheit angeben, wenn eine äußere Breite/Tiefe eingestellt wird" -#: dcim/models/racks.py:184 dcim/models/racks.py:383 +#: netbox/dcim/models/racks.py:184 netbox/dcim/models/racks.py:383 msgid "Must specify a unit when setting a maximum weight" msgstr "" "Bei der Einstellung eines Höchstgewichts muss eine Einheit angegeben werden" -#: dcim/models/racks.py:230 +#: netbox/dcim/models/racks.py:230 msgid "rack role" msgstr "Rolle des Rack" -#: dcim/models/racks.py:231 +#: netbox/dcim/models/racks.py:231 msgid "rack roles" msgstr "Rackrollen" -#: dcim/models/racks.py:274 +#: netbox/dcim/models/racks.py:274 msgid "facility ID" msgstr "Einrichtungs-ID" -#: dcim/models/racks.py:275 +#: netbox/dcim/models/racks.py:275 msgid "Locally-assigned identifier" msgstr "Lokal zugewiesener Bezeichner" -#: dcim/models/racks.py:308 ipam/forms/bulk_import.py:201 -#: ipam/forms/bulk_import.py:266 ipam/forms/bulk_import.py:301 -#: ipam/forms/bulk_import.py:459 virtualization/forms/bulk_import.py:112 +#: 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 msgid "Functional role" msgstr "Funktionelle Rolle" -#: dcim/models/racks.py:321 +#: netbox/dcim/models/racks.py:321 msgid "A unique tag used to identify this rack" msgstr "" "Ein eindeutiger Wert, das zur Identifizierung dieses Racks verwendet wird" -#: dcim/models/racks.py:359 +#: netbox/dcim/models/racks.py:359 msgid "rack" msgstr "Rack" -#: dcim/models/racks.py:360 +#: netbox/dcim/models/racks.py:360 msgid "racks" msgstr "Racks" -#: dcim/models/racks.py:375 +#: netbox/dcim/models/racks.py:375 #, python-brace-format msgid "Assigned location must belong to parent site ({site})." msgstr "" "Die zugewiesene Lokation muss zum übergeordneten Standort gehören ({site})." -#: dcim/models/racks.py:393 +#: netbox/dcim/models/racks.py:393 #, python-brace-format msgid "" "Rack must be at least {min_height}U tall to house currently installed " @@ -6101,7 +6585,7 @@ msgstr "" "Das Rack muss mindestens {min_height}HE groß sein, um aktuell installierten " "Geräte unterzubringen." -#: dcim/models/racks.py:400 +#: netbox/dcim/models/racks.py:400 #, python-brace-format msgid "" "Rack unit numbering must begin at {position} or less to house currently " @@ -6110,905 +6594,967 @@ msgstr "" "Die Nummerierung der Höheneinheiten muss bei {position} oder weniger " "beginnen, um die aktuell installierten Geräte unterzubringen." -#: dcim/models/racks.py:408 +#: netbox/dcim/models/racks.py:408 #, python-brace-format msgid "Location must be from the same site, {site}." msgstr "Die Lokation muss vom selben Standort stammen, {site}." -#: dcim/models/racks.py:670 +#: netbox/dcim/models/racks.py:670 msgid "units" msgstr "Einheiten" -#: dcim/models/racks.py:696 +#: netbox/dcim/models/racks.py:696 msgid "rack reservation" msgstr "HE-Reservierung" -#: dcim/models/racks.py:697 +#: netbox/dcim/models/racks.py:697 msgid "rack reservations" msgstr "Rackreservierungen" -#: dcim/models/racks.py:714 +#: netbox/dcim/models/racks.py:714 #, 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}" -#: dcim/models/racks.py:727 +#: netbox/dcim/models/racks.py:727 #, python-brace-format msgid "The following units have already been reserved: {unit_list}" msgstr "Die folgenden Einheiten wurden bereits reserviert: {unit_list}" -#: dcim/models/sites.py:49 +#: netbox/dcim/models/sites.py:49 msgid "A top-level region with this name already exists." msgstr "" "Eine Region der obersten Ebene mit diesem Namen ist bereits vorhanden." -#: dcim/models/sites.py:59 +#: netbox/dcim/models/sites.py:59 msgid "A top-level region with this slug already exists." msgstr "Eine Top-Level-Region mit dieser URL-Slug existiert bereits." -#: dcim/models/sites.py:62 +#: netbox/dcim/models/sites.py:62 msgid "region" msgstr "Region" -#: dcim/models/sites.py:63 +#: netbox/dcim/models/sites.py:63 msgid "regions" msgstr "Regionen" -#: dcim/models/sites.py:102 +#: netbox/dcim/models/sites.py:102 msgid "A top-level site group with this name already exists." msgstr "" "Eine Standortgruppe auf oberster Ebene mit diesem Namen ist bereits " "vorhanden." -#: dcim/models/sites.py:112 +#: netbox/dcim/models/sites.py:112 msgid "A top-level site group with this slug already exists." msgstr "" "Eine Standortgruppe auf oberster Ebene mit diesem URL-Slug existiert " "bereits." -#: dcim/models/sites.py:115 +#: netbox/dcim/models/sites.py:115 msgid "site group" msgstr "Standortgruppe" -#: dcim/models/sites.py:116 +#: netbox/dcim/models/sites.py:116 msgid "site groups" msgstr "Standortgruppen" -#: dcim/models/sites.py:141 +#: netbox/dcim/models/sites.py:141 msgid "Full name of the site" msgstr "Vollständiger Name des Standorts" -#: dcim/models/sites.py:181 dcim/models/sites.py:279 +#: netbox/dcim/models/sites.py:181 netbox/dcim/models/sites.py:279 msgid "facility" msgstr "Einrichtung" -#: dcim/models/sites.py:184 dcim/models/sites.py:282 +#: netbox/dcim/models/sites.py:184 netbox/dcim/models/sites.py:282 msgid "Local facility ID or description" msgstr "Lokale Einrichtungs-ID oder Beschreibung" -#: dcim/models/sites.py:195 +#: netbox/dcim/models/sites.py:195 msgid "physical address" msgstr "physische Adresse" -#: dcim/models/sites.py:198 +#: netbox/dcim/models/sites.py:198 msgid "Physical location of the building" msgstr "Physischer Standort des Gebäudes" -#: dcim/models/sites.py:201 +#: netbox/dcim/models/sites.py:201 msgid "shipping address" msgstr "Lieferadresse" -#: dcim/models/sites.py:204 +#: netbox/dcim/models/sites.py:204 msgid "If different from the physical address" msgstr "Falls anders als die physische Adresse" -#: dcim/models/sites.py:238 +#: netbox/dcim/models/sites.py:238 msgid "site" msgstr "Standort" -#: dcim/models/sites.py:239 +#: netbox/dcim/models/sites.py:239 msgid "sites" msgstr "Standorte" -#: dcim/models/sites.py:309 +#: netbox/dcim/models/sites.py:309 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." -#: dcim/models/sites.py:319 +#: netbox/dcim/models/sites.py:319 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." -#: dcim/models/sites.py:322 +#: netbox/dcim/models/sites.py:322 msgid "location" msgstr "Lokation" -#: dcim/models/sites.py:323 +#: netbox/dcim/models/sites.py:323 msgid "locations" msgstr "Lokationen" -#: dcim/models/sites.py:337 +#: netbox/dcim/models/sites.py:337 #, python-brace-format msgid "Parent location ({parent}) must belong to the same site ({site})." msgstr "" "Übergeordneter Standort ({parent}) muss zum gleichen Standort gehören " "({site})." -#: dcim/tables/cables.py:55 +#: netbox/dcim/tables/cables.py:55 msgid "Termination A" msgstr "Abschlusspunkt A" -#: dcim/tables/cables.py:60 +#: netbox/dcim/tables/cables.py:60 msgid "Termination B" msgstr "Abschlusspunkt B" -#: dcim/tables/cables.py:66 wireless/tables/wirelesslink.py:23 +#: netbox/dcim/tables/cables.py:66 netbox/wireless/tables/wirelesslink.py:23 msgid "Device A" msgstr "Gerät A" -#: dcim/tables/cables.py:72 wireless/tables/wirelesslink.py:32 +#: netbox/dcim/tables/cables.py:72 netbox/wireless/tables/wirelesslink.py:32 msgid "Device B" msgstr "Gerät B" -#: dcim/tables/cables.py:78 +#: netbox/dcim/tables/cables.py:78 msgid "Location A" msgstr "Standort A" -#: dcim/tables/cables.py:84 +#: netbox/dcim/tables/cables.py:84 msgid "Location B" msgstr "Standort B" -#: dcim/tables/cables.py:90 +#: netbox/dcim/tables/cables.py:90 msgid "Rack A" msgstr "Rack A" -#: dcim/tables/cables.py:96 +#: netbox/dcim/tables/cables.py:96 msgid "Rack B" msgstr "Rack B" -#: dcim/tables/cables.py:102 +#: netbox/dcim/tables/cables.py:102 msgid "Site A" msgstr "Standort A" -#: dcim/tables/cables.py:108 +#: netbox/dcim/tables/cables.py:108 msgid "Site B" msgstr "Standort B" -#: dcim/tables/connections.py:31 dcim/tables/connections.py:50 -#: dcim/tables/connections.py:71 -#: templates/dcim/inc/connection_endpoints.html:16 +#: netbox/dcim/tables/connections.py:31 netbox/dcim/tables/connections.py:50 +#: netbox/dcim/tables/connections.py:71 +#: netbox/templates/dcim/inc/connection_endpoints.html:16 msgid "Reachable" msgstr "Erreichbar" -#: dcim/tables/devices.py:58 dcim/tables/devices.py:106 -#: dcim/tables/racks.py:150 dcim/tables/sites.py:105 dcim/tables/sites.py:148 -#: extras/tables/tables.py:545 netbox/navigation/menu.py:69 -#: netbox/navigation/menu.py:73 netbox/navigation/menu.py:75 -#: virtualization/forms/model_forms.py:122 -#: virtualization/tables/clusters.py:83 virtualization/views.py:206 +#: 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/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 msgid "Devices" msgstr "Geräte" -#: dcim/tables/devices.py:63 dcim/tables/devices.py:111 -#: virtualization/tables/clusters.py:88 +#: netbox/dcim/tables/devices.py:63 netbox/dcim/tables/devices.py:111 +#: netbox/virtualization/tables/clusters.py:88 msgid "VMs" msgstr "VMs" -#: dcim/tables/devices.py:100 dcim/tables/devices.py:216 -#: extras/forms/model_forms.py:630 templates/dcim/device.html:112 -#: templates/dcim/device/render_config.html:11 -#: templates/dcim/device/render_config.html:14 -#: templates/dcim/devicerole.html:44 templates/dcim/platform.html:41 -#: templates/extras/configtemplate.html:10 -#: templates/virtualization/virtualmachine.html:48 -#: templates/virtualization/virtualmachine/render_config.html:11 -#: templates/virtualization/virtualmachine/render_config.html:14 -#: virtualization/tables/virtualmachines.py:107 +#: netbox/dcim/tables/devices.py:100 netbox/dcim/tables/devices.py:216 +#: 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/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 msgid "Config Template" msgstr "Konfigvorlage" -#: dcim/tables/devices.py:150 templates/dcim/sitegroup.html:26 +#: netbox/dcim/tables/devices.py:150 netbox/templates/dcim/sitegroup.html:26 msgid "Site Group" msgstr "Standortgruppe" -#: dcim/tables/devices.py:187 dcim/tables/devices.py:1068 -#: ipam/forms/bulk_import.py:503 ipam/forms/model_forms.py:306 -#: ipam/forms/model_forms.py:315 ipam/tables/ip.py:356 ipam/tables/ip.py:423 -#: ipam/tables/ip.py:446 templates/ipam/ipaddress.html:11 -#: virtualization/tables/virtualmachines.py:95 +#: 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/templates/ipam/ipaddress.html:11 +#: netbox/virtualization/tables/virtualmachines.py:95 msgid "IP Address" msgstr "IP-Adresse" -#: dcim/tables/devices.py:191 dcim/tables/devices.py:1072 -#: virtualization/tables/virtualmachines.py:86 +#: netbox/dcim/tables/devices.py:191 netbox/dcim/tables/devices.py:1072 +#: netbox/virtualization/tables/virtualmachines.py:86 msgid "IPv4 Address" msgstr "IPv4-Adresse" -#: dcim/tables/devices.py:195 dcim/tables/devices.py:1076 -#: virtualization/tables/virtualmachines.py:90 +#: netbox/dcim/tables/devices.py:195 netbox/dcim/tables/devices.py:1076 +#: netbox/virtualization/tables/virtualmachines.py:90 msgid "IPv6 Address" msgstr "IPv6-Adresse" -#: dcim/tables/devices.py:210 +#: netbox/dcim/tables/devices.py:210 msgid "VC Position" msgstr "VC-Position" -#: dcim/tables/devices.py:213 +#: netbox/dcim/tables/devices.py:213 msgid "VC Priority" msgstr "VC-Priorität" -#: dcim/tables/devices.py:220 templates/dcim/device_edit.html:38 -#: templates/dcim/devicebay_populate.html:16 +#: netbox/dcim/tables/devices.py:220 netbox/templates/dcim/device_edit.html:38 +#: netbox/templates/dcim/devicebay_populate.html:16 msgid "Parent Device" msgstr "Übergeordnetes Gerät" -#: dcim/tables/devices.py:225 +#: netbox/dcim/tables/devices.py:225 msgid "Position (Device Bay)" msgstr "Position (Geräteschacht)" -#: dcim/tables/devices.py:234 +#: netbox/dcim/tables/devices.py:234 msgid "Console ports" msgstr "Konsolenanschlüsse" -#: dcim/tables/devices.py:237 +#: netbox/dcim/tables/devices.py:237 msgid "Console server ports" msgstr "Konsolenserveranschlüsse" -#: dcim/tables/devices.py:240 +#: netbox/dcim/tables/devices.py:240 msgid "Power ports" msgstr "Stromanschlüsse" -#: dcim/tables/devices.py:243 +#: netbox/dcim/tables/devices.py:243 msgid "Power outlets" msgstr "Steckdosen" -#: dcim/tables/devices.py:246 dcim/tables/devices.py:1081 -#: dcim/tables/devicetypes.py:128 dcim/views.py:1042 dcim/views.py:1281 -#: dcim/views.py:1977 netbox/navigation/menu.py:94 -#: netbox/navigation/menu.py:250 templates/dcim/device/base.html:37 -#: templates/dcim/device_list.html:43 templates/dcim/devicetype/base.html:34 -#: templates/dcim/inc/moduletype_buttons.html:25 templates/dcim/module.html:34 -#: templates/dcim/virtualdevicecontext.html:61 -#: templates/dcim/virtualdevicecontext.html:81 -#: templates/virtualization/virtualmachine/base.html:27 -#: templates/virtualization/virtualmachine_list.html:14 -#: virtualization/tables/virtualmachines.py:101 virtualization/views.py:366 -#: wireless/tables/wirelesslan.py:55 +#: 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/templates/dcim/device/base.html:37 +#: netbox/templates/dcim/device_list.html:43 +#: netbox/templates/dcim/devicetype/base.html:34 +#: netbox/templates/dcim/inc/moduletype_buttons.html:25 +#: netbox/templates/dcim/module.html:34 +#: netbox/templates/dcim/virtualdevicecontext.html:61 +#: netbox/templates/dcim/virtualdevicecontext.html:81 +#: netbox/templates/virtualization/virtualmachine/base.html:27 +#: netbox/templates/virtualization/virtualmachine_list.html:14 +#: netbox/virtualization/tables/virtualmachines.py:101 +#: netbox/virtualization/views.py:364 netbox/wireless/tables/wirelesslan.py:55 msgid "Interfaces" msgstr "Schnittstellen" -#: dcim/tables/devices.py:249 +#: netbox/dcim/tables/devices.py:249 msgid "Front ports" msgstr "Frontanschlüsse" -#: dcim/tables/devices.py:255 +#: netbox/dcim/tables/devices.py:255 msgid "Device bays" msgstr "Geräteeinsätze" -#: dcim/tables/devices.py:258 +#: netbox/dcim/tables/devices.py:258 msgid "Module bays" msgstr "Moduleinsätze" -#: dcim/tables/devices.py:261 +#: netbox/dcim/tables/devices.py:261 msgid "Inventory items" msgstr "Inventarartikel" -#: dcim/tables/devices.py:305 dcim/tables/modules.py:56 -#: templates/dcim/modulebay.html:17 +#: netbox/dcim/tables/devices.py:305 netbox/dcim/tables/modules.py:56 +#: netbox/templates/dcim/modulebay.html:17 msgid "Module Bay" msgstr "Moduleinsatz" -#: dcim/tables/devices.py:318 dcim/tables/devicetypes.py:47 -#: dcim/tables/devicetypes.py:143 dcim/views.py:1117 dcim/views.py:2075 -#: netbox/navigation/menu.py:103 templates/dcim/device/base.html:52 -#: templates/dcim/device_list.html:71 templates/dcim/devicetype/base.html:49 -#: templates/dcim/inc/panels/inventory_items.html:6 -#: templates/dcim/inventoryitemrole.html:32 +#: netbox/dcim/tables/devices.py:318 netbox/dcim/tables/devicetypes.py:47 +#: netbox/dcim/tables/devicetypes.py:143 netbox/dcim/views.py:1115 +#: netbox/dcim/views.py:2073 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 +#: netbox/templates/dcim/inc/panels/inventory_items.html:6 +#: netbox/templates/dcim/inventoryitemrole.html:32 msgid "Inventory Items" msgstr "Inventarartikel" -#: dcim/tables/devices.py:333 +#: netbox/dcim/tables/devices.py:333 msgid "Cable Color" msgstr "Farbe des Kabels" -#: dcim/tables/devices.py:339 +#: netbox/dcim/tables/devices.py:339 msgid "Link Peers" msgstr "Verbindungsenden" -#: dcim/tables/devices.py:342 +#: netbox/dcim/tables/devices.py:342 msgid "Mark Connected" msgstr "Als verbunden markieren" -#: dcim/tables/devices.py:461 +#: netbox/dcim/tables/devices.py:461 msgid "Maximum draw (W)" msgstr "Maximaler Stromverbrauch (W)" -#: dcim/tables/devices.py:464 +#: netbox/dcim/tables/devices.py:464 msgid "Allocated draw (W)" msgstr "Zugewiesener Stromverbrauch (W)" -#: dcim/tables/devices.py:558 ipam/forms/model_forms.py:701 -#: ipam/tables/fhrp.py:28 ipam/views.py:596 ipam/views.py:696 -#: netbox/navigation/menu.py:158 netbox/navigation/menu.py:160 -#: templates/dcim/interface.html:339 templates/ipam/ipaddress_bulk_add.html:15 -#: templates/ipam/service.html:40 templates/virtualization/vminterface.html:85 -#: vpn/tables/tunnels.py:98 +#: netbox/dcim/tables/devices.py:558 netbox/ipam/forms/model_forms.py: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/templates/ipam/ipaddress_bulk_add.html:15 +#: netbox/templates/ipam/service.html:40 +#: netbox/templates/virtualization/vminterface.html:85 +#: netbox/vpn/tables/tunnels.py:98 msgid "IP Addresses" msgstr "IP-Adressen" -#: dcim/tables/devices.py:564 netbox/navigation/menu.py:202 -#: templates/ipam/inc/panels/fhrp_groups.html:6 +#: netbox/dcim/tables/devices.py:564 netbox/netbox/navigation/menu.py:202 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:6 msgid "FHRP Groups" msgstr "FHRP-Gruppen" -#: dcim/tables/devices.py:576 templates/dcim/interface.html:89 -#: templates/virtualization/vminterface.html:67 templates/vpn/tunnel.html:18 -#: templates/vpn/tunneltermination.html:13 vpn/forms/bulk_edit.py:76 -#: vpn/forms/bulk_import.py:76 vpn/forms/filtersets.py:42 -#: vpn/forms/filtersets.py:82 vpn/forms/model_forms.py:60 -#: vpn/forms/model_forms.py:145 vpn/tables/tunnels.py:78 +#: netbox/dcim/tables/devices.py:576 netbox/templates/dcim/interface.html:89 +#: netbox/templates/virtualization/vminterface.html:67 +#: netbox/templates/vpn/tunnel.html:18 +#: netbox/templates/vpn/tunneltermination.html:13 +#: netbox/vpn/forms/bulk_edit.py:76 netbox/vpn/forms/bulk_import.py:76 +#: netbox/vpn/forms/filtersets.py:42 netbox/vpn/forms/filtersets.py:82 +#: netbox/vpn/forms/model_forms.py:60 netbox/vpn/forms/model_forms.py:145 +#: netbox/vpn/tables/tunnels.py:78 msgid "Tunnel" msgstr "Tunnel" -#: dcim/tables/devices.py:604 dcim/tables/devicetypes.py:227 -#: templates/dcim/interface.html:65 +#: netbox/dcim/tables/devices.py:604 netbox/dcim/tables/devicetypes.py:227 +#: netbox/templates/dcim/interface.html:65 msgid "Management Only" msgstr "Nur zur Verwaltung" -#: dcim/tables/devices.py:623 +#: netbox/dcim/tables/devices.py:623 msgid "VDCs" msgstr "VDCs" -#: dcim/tables/devices.py:873 templates/dcim/modulebay.html:53 +#: netbox/dcim/tables/devices.py:873 netbox/templates/dcim/modulebay.html:53 msgid "Installed Module" msgstr "Installiertes Modul" -#: dcim/tables/devices.py:876 +#: netbox/dcim/tables/devices.py:876 msgid "Module Serial" msgstr "Seriennummer des Moduls" -#: dcim/tables/devices.py:880 +#: netbox/dcim/tables/devices.py:880 msgid "Module Asset Tag" msgstr "Modul-Asset-Tag" -#: dcim/tables/devices.py:889 +#: netbox/dcim/tables/devices.py:889 msgid "Module Status" msgstr "Status des Moduls" -#: dcim/tables/devices.py:944 dcim/tables/devicetypes.py:312 -#: templates/dcim/inventoryitem.html:40 +#: netbox/dcim/tables/devices.py:944 netbox/dcim/tables/devicetypes.py:312 +#: netbox/templates/dcim/inventoryitem.html:40 msgid "Component" msgstr "Komponente" -#: dcim/tables/devices.py:1000 +#: netbox/dcim/tables/devices.py:1000 msgid "Items" msgstr "Artikel" -#: dcim/tables/devicetypes.py:37 netbox/navigation/menu.py:84 -#: netbox/navigation/menu.py:86 +#: netbox/dcim/tables/devicetypes.py:37 netbox/netbox/navigation/menu.py:84 +#: netbox/netbox/navigation/menu.py:86 msgid "Device Types" msgstr "Gerätetypen" -#: dcim/tables/devicetypes.py:42 netbox/navigation/menu.py:87 +#: netbox/dcim/tables/devicetypes.py:42 netbox/netbox/navigation/menu.py:87 msgid "Module Types" msgstr "Modultypen" -#: dcim/tables/devicetypes.py:52 extras/forms/filtersets.py:371 -#: extras/forms/model_forms.py:537 extras/tables/tables.py:540 -#: netbox/navigation/menu.py:78 +#: 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/netbox/navigation/menu.py:78 msgid "Platforms" msgstr "Betriebssysteme" -#: dcim/tables/devicetypes.py:84 templates/dcim/devicetype.html:29 +#: netbox/dcim/tables/devicetypes.py:84 +#: netbox/templates/dcim/devicetype.html:29 msgid "Default Platform" msgstr "Standard-Betriebssystem" -#: dcim/tables/devicetypes.py:88 templates/dcim/devicetype.html:45 +#: netbox/dcim/tables/devicetypes.py:88 +#: netbox/templates/dcim/devicetype.html:45 msgid "Full Depth" msgstr "Volle Tiefe" -#: dcim/tables/devicetypes.py:98 +#: netbox/dcim/tables/devicetypes.py:98 msgid "U Height" msgstr "Höhe in HE" -#: dcim/tables/devicetypes.py:113 dcim/tables/modules.py:26 -#: dcim/tables/racks.py:89 +#: netbox/dcim/tables/devicetypes.py:113 netbox/dcim/tables/modules.py:26 +#: netbox/dcim/tables/racks.py:89 msgid "Instances" msgstr "Instanzen" -#: dcim/tables/devicetypes.py:116 dcim/views.py:982 dcim/views.py:1221 -#: dcim/views.py:1913 netbox/navigation/menu.py:97 -#: templates/dcim/device/base.html:25 templates/dcim/device_list.html:15 -#: templates/dcim/devicetype/base.html:22 -#: templates/dcim/inc/moduletype_buttons.html:13 templates/dcim/module.html:22 +#: netbox/dcim/tables/devicetypes.py:116 netbox/dcim/views.py:980 +#: netbox/dcim/views.py:1219 netbox/dcim/views.py:1911 +#: netbox/netbox/navigation/menu.py:97 +#: netbox/templates/dcim/device/base.html:25 +#: netbox/templates/dcim/device_list.html:15 +#: netbox/templates/dcim/devicetype/base.html:22 +#: netbox/templates/dcim/inc/moduletype_buttons.html:13 +#: netbox/templates/dcim/module.html:22 msgid "Console Ports" msgstr "Konsolenanschlüsse" -#: dcim/tables/devicetypes.py:119 dcim/views.py:997 dcim/views.py:1236 -#: dcim/views.py:1929 netbox/navigation/menu.py:98 -#: templates/dcim/device/base.html:28 templates/dcim/device_list.html:22 -#: templates/dcim/devicetype/base.html:25 -#: templates/dcim/inc/moduletype_buttons.html:16 templates/dcim/module.html:25 +#: netbox/dcim/tables/devicetypes.py:119 netbox/dcim/views.py:995 +#: netbox/dcim/views.py:1234 netbox/dcim/views.py:1927 +#: netbox/netbox/navigation/menu.py:98 +#: netbox/templates/dcim/device/base.html:28 +#: netbox/templates/dcim/device_list.html:22 +#: netbox/templates/dcim/devicetype/base.html:25 +#: netbox/templates/dcim/inc/moduletype_buttons.html:16 +#: netbox/templates/dcim/module.html:25 msgid "Console Server Ports" msgstr "Konsolenserveranschlüsse" -#: dcim/tables/devicetypes.py:122 dcim/views.py:1012 dcim/views.py:1251 -#: dcim/views.py:1945 netbox/navigation/menu.py:99 -#: templates/dcim/device/base.html:31 templates/dcim/device_list.html:29 -#: templates/dcim/devicetype/base.html:28 -#: templates/dcim/inc/moduletype_buttons.html:19 templates/dcim/module.html:28 +#: netbox/dcim/tables/devicetypes.py:122 netbox/dcim/views.py:1010 +#: netbox/dcim/views.py:1249 netbox/dcim/views.py:1943 +#: netbox/netbox/navigation/menu.py:99 +#: netbox/templates/dcim/device/base.html:31 +#: netbox/templates/dcim/device_list.html:29 +#: netbox/templates/dcim/devicetype/base.html:28 +#: netbox/templates/dcim/inc/moduletype_buttons.html:19 +#: netbox/templates/dcim/module.html:28 msgid "Power Ports" msgstr "Stromanschlüsse" -#: dcim/tables/devicetypes.py:125 dcim/views.py:1027 dcim/views.py:1266 -#: dcim/views.py:1961 netbox/navigation/menu.py:100 -#: templates/dcim/device/base.html:34 templates/dcim/device_list.html:36 -#: templates/dcim/devicetype/base.html:31 -#: templates/dcim/inc/moduletype_buttons.html:22 templates/dcim/module.html:31 +#: netbox/dcim/tables/devicetypes.py:125 netbox/dcim/views.py:1025 +#: netbox/dcim/views.py:1264 netbox/dcim/views.py:1959 +#: netbox/netbox/navigation/menu.py:100 +#: netbox/templates/dcim/device/base.html:34 +#: netbox/templates/dcim/device_list.html:36 +#: netbox/templates/dcim/devicetype/base.html:31 +#: netbox/templates/dcim/inc/moduletype_buttons.html:22 +#: netbox/templates/dcim/module.html:31 msgid "Power Outlets" msgstr "Steckdosen" -#: dcim/tables/devicetypes.py:131 dcim/views.py:1057 dcim/views.py:1296 -#: dcim/views.py:1999 netbox/navigation/menu.py:95 -#: templates/dcim/device/base.html:40 templates/dcim/devicetype/base.html:37 -#: templates/dcim/inc/moduletype_buttons.html:28 templates/dcim/module.html:37 +#: netbox/dcim/tables/devicetypes.py:131 netbox/dcim/views.py:1055 +#: netbox/dcim/views.py:1294 netbox/dcim/views.py:1997 +#: netbox/netbox/navigation/menu.py:95 +#: netbox/templates/dcim/device/base.html:40 +#: netbox/templates/dcim/devicetype/base.html:37 +#: netbox/templates/dcim/inc/moduletype_buttons.html:28 +#: netbox/templates/dcim/module.html:37 msgid "Front Ports" msgstr "Frontanschlüsse" -#: dcim/tables/devicetypes.py:134 dcim/views.py:1072 dcim/views.py:1311 -#: dcim/views.py:2015 netbox/navigation/menu.py:96 -#: templates/dcim/device/base.html:43 templates/dcim/device_list.html:50 -#: templates/dcim/devicetype/base.html:40 -#: templates/dcim/inc/moduletype_buttons.html:31 templates/dcim/module.html:40 +#: netbox/dcim/tables/devicetypes.py:134 netbox/dcim/views.py:1070 +#: netbox/dcim/views.py:1309 netbox/dcim/views.py:2013 +#: netbox/netbox/navigation/menu.py:96 +#: netbox/templates/dcim/device/base.html:43 +#: netbox/templates/dcim/device_list.html:50 +#: netbox/templates/dcim/devicetype/base.html:40 +#: netbox/templates/dcim/inc/moduletype_buttons.html:31 +#: netbox/templates/dcim/module.html:40 msgid "Rear Ports" msgstr "Rückanschlüsse" -#: dcim/tables/devicetypes.py:137 dcim/views.py:1102 dcim/views.py:2055 -#: netbox/navigation/menu.py:102 templates/dcim/device/base.html:49 -#: templates/dcim/device_list.html:57 templates/dcim/devicetype/base.html:46 +#: netbox/dcim/tables/devicetypes.py:137 netbox/dcim/views.py:1100 +#: netbox/dcim/views.py:2053 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" -#: dcim/tables/devicetypes.py:140 dcim/views.py:1087 dcim/views.py:1326 -#: dcim/views.py:2035 netbox/navigation/menu.py:101 -#: templates/dcim/device/base.html:46 templates/dcim/device_list.html:64 -#: templates/dcim/devicetype/base.html:43 -#: templates/dcim/inc/moduletype_buttons.html:34 templates/dcim/module.html:43 +#: netbox/dcim/tables/devicetypes.py:140 netbox/dcim/views.py:1085 +#: netbox/dcim/views.py:1324 netbox/dcim/views.py:2033 +#: netbox/netbox/navigation/menu.py:101 +#: netbox/templates/dcim/device/base.html:46 +#: netbox/templates/dcim/device_list.html:64 +#: netbox/templates/dcim/devicetype/base.html:43 +#: netbox/templates/dcim/inc/moduletype_buttons.html:34 +#: netbox/templates/dcim/module.html:43 msgid "Module Bays" msgstr "Moduleinsätze" -#: dcim/tables/power.py:36 netbox/navigation/menu.py:297 -#: templates/dcim/powerpanel.html:51 +#: netbox/dcim/tables/power.py:36 netbox/netbox/navigation/menu.py:297 +#: netbox/templates/dcim/powerpanel.html:51 msgid "Power Feeds" msgstr "Stromzufuhren" -#: dcim/tables/power.py:80 templates/dcim/powerfeed.html:99 +#: netbox/dcim/tables/power.py:80 netbox/templates/dcim/powerfeed.html:99 msgid "Max Utilization" msgstr "Max. Auslastung" -#: dcim/tables/power.py:84 +#: netbox/dcim/tables/power.py:84 msgid "Available Power (VA)" msgstr "Verfügbare Leistung (VA)" -#: dcim/tables/racks.py:30 dcim/tables/sites.py:143 -#: netbox/navigation/menu.py:43 netbox/navigation/menu.py:47 -#: netbox/navigation/menu.py:49 +#: netbox/dcim/tables/racks.py:30 netbox/dcim/tables/sites.py:143 +#: netbox/netbox/navigation/menu.py:43 netbox/netbox/navigation/menu.py:47 +#: netbox/netbox/navigation/menu.py:49 msgid "Racks" msgstr "Racks" -#: dcim/tables/racks.py:63 dcim/tables/racks.py:142 -#: templates/dcim/device.html:318 -#: templates/dcim/inc/panels/racktype_dimensions.html:14 +#: netbox/dcim/tables/racks.py:63 netbox/dcim/tables/racks.py:142 +#: netbox/templates/dcim/device.html:318 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:14 msgid "Height" msgstr "Höhe" -#: dcim/tables/racks.py:67 dcim/tables/racks.py:165 -#: templates/dcim/inc/panels/racktype_dimensions.html:18 +#: netbox/dcim/tables/racks.py:67 netbox/dcim/tables/racks.py:165 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:18 msgid "Outer Width" msgstr "Äußere Breite" -#: dcim/tables/racks.py:71 dcim/tables/racks.py:169 -#: templates/dcim/inc/panels/racktype_dimensions.html:28 +#: netbox/dcim/tables/racks.py:71 netbox/dcim/tables/racks.py:169 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:28 msgid "Outer Depth" msgstr "Äußere Tiefe" -#: dcim/tables/racks.py:79 dcim/tables/racks.py:177 +#: netbox/dcim/tables/racks.py:79 netbox/dcim/tables/racks.py:177 msgid "Max Weight" msgstr "Maximales Gewicht" -#: dcim/tables/racks.py:154 +#: netbox/dcim/tables/racks.py:154 msgid "Space" msgstr "Platz" -#: dcim/tables/sites.py:30 dcim/tables/sites.py:57 -#: extras/forms/filtersets.py:351 extras/forms/model_forms.py:517 -#: ipam/forms/bulk_edit.py:131 ipam/forms/model_forms.py:153 -#: ipam/tables/asn.py:66 netbox/navigation/menu.py:15 -#: netbox/navigation/menu.py:17 +#: netbox/dcim/tables/sites.py:30 netbox/dcim/tables/sites.py:57 +#: netbox/extras/forms/filtersets.py: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/netbox/navigation/menu.py:15 netbox/netbox/navigation/menu.py:17 msgid "Sites" msgstr "Standorte" -#: dcim/tests/test_api.py:47 +#: netbox/dcim/tests/test_api.py:47 msgid "Test case must set peer_termination_type" msgstr "Der Testfall muss peer_termination_type setzen" -#: dcim/views.py:140 +#: netbox/dcim/views.py:138 #, python-brace-format msgid "Disconnected {count} {type}" msgstr "Verbindung von {count} {type} unterbrochen" -#: dcim/views.py:740 netbox/navigation/menu.py:51 +#: netbox/dcim/views.py:738 netbox/netbox/navigation/menu.py:51 msgid "Reservations" msgstr "Rackreservierungen" -#: dcim/views.py:759 templates/dcim/location.html:90 -#: templates/dcim/site.html:140 +#: netbox/dcim/views.py:757 netbox/templates/dcim/location.html:90 +#: netbox/templates/dcim/site.html:140 msgid "Non-Racked Devices" msgstr "Nicht in einem Rack befindliche Geräte" -#: dcim/views.py:2088 extras/forms/model_forms.py:577 -#: templates/extras/configcontext.html:10 -#: virtualization/forms/model_forms.py:225 virtualization/views.py:407 +#: netbox/dcim/views.py:2086 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 msgid "Config Context" msgstr "Konfigurationsvorlage" -#: dcim/views.py:2098 virtualization/views.py:417 +#: netbox/dcim/views.py:2096 netbox/virtualization/views.py:415 msgid "Render Config" msgstr "Konfiguration rendern" -#: dcim/views.py:2131 virtualization/views.py:450 +#: 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}" -#: dcim/views.py:2149 extras/tables/tables.py:550 -#: netbox/navigation/menu.py:247 netbox/navigation/menu.py:249 -#: virtualization/views.py:180 +#: 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 msgid "Virtual Machines" msgstr "Virtuelle Maschinen" -#: dcim/views.py:2897 +#: netbox/dcim/views.py:2907 #, python-brace-format msgid "Installed device {device} in bay {device_bay}." msgstr "Gerät {device} im Schacht {device_bay} installiert." -#: dcim/views.py:2938 +#: netbox/dcim/views.py:2948 #, python-brace-format msgid "Removed device {device} from bay {device_bay}." msgstr "Gerät {device} im Schacht {device_bay} entfernt." -#: dcim/views.py:3044 ipam/tables/ip.py:234 +#: netbox/dcim/views.py:3054 netbox/ipam/tables/ip.py:234 msgid "Children" msgstr "Untergeordnet" -#: dcim/views.py:3510 +#: netbox/dcim/views.py:3520 #, python-brace-format msgid "Added member {device}" msgstr "Mitglied hinzugefügt {device}" -#: dcim/views.py:3557 +#: netbox/dcim/views.py:3567 #, 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." -#: dcim/views.py:3570 +#: netbox/dcim/views.py:3580 #, python-brace-format msgid "Removed {device} from virtual chassis {chassis}" msgstr "{device} vom virtuellen Gehäuse {chassis} entfernt." -#: extras/api/customfields.py:89 +#: netbox/extras/api/customfields.py:89 #, python-brace-format msgid "Unknown related object(s): {name}" msgstr "Unbekanntes verwandtes Objekt (e): {name}" -#: extras/api/serializers_/customfields.py:73 +#: netbox/extras/api/serializers_/customfields.py:73 msgid "Changing the type of custom fields is not supported." msgstr "" "Das Ändern des Typs von benutzerdefinierten Feldern wird nicht unterstützt." -#: extras/api/serializers_/scripts.py:70 extras/api/serializers_/scripts.py:75 +#: netbox/extras/api/serializers_/scripts.py:70 +#: netbox/extras/api/serializers_/scripts.py:75 msgid "Scheduling is not enabled for this script." msgstr "Die Planung ist für dieses Skript nicht aktiviert." -#: extras/choices.py:30 extras/forms/misc.py:14 +#: netbox/extras/choices.py:30 netbox/extras/forms/misc.py:14 msgid "Text" msgstr "Text" -#: extras/choices.py:31 +#: netbox/extras/choices.py:31 msgid "Text (long)" msgstr "Text (lang)" -#: extras/choices.py:32 +#: netbox/extras/choices.py:32 msgid "Integer" msgstr "Ganzzahl" -#: extras/choices.py:33 +#: netbox/extras/choices.py:33 msgid "Decimal" msgstr "Dezimal" -#: extras/choices.py:34 +#: netbox/extras/choices.py:34 msgid "Boolean (true/false)" msgstr "Boolean (wahr/falsch)" -#: extras/choices.py:35 +#: netbox/extras/choices.py:35 msgid "Date" msgstr "Datum" -#: extras/choices.py:36 +#: netbox/extras/choices.py:36 msgid "Date & time" msgstr "Datum & Uhrzeit" -#: extras/choices.py:38 +#: netbox/extras/choices.py:38 msgid "JSON" msgstr "JSON" -#: extras/choices.py:39 +#: netbox/extras/choices.py:39 msgid "Selection" msgstr "Auswahl" -#: extras/choices.py:40 +#: netbox/extras/choices.py:40 msgid "Multiple selection" msgstr "Mehrfachauswahl" -#: extras/choices.py:42 +#: netbox/extras/choices.py:42 msgid "Multiple objects" msgstr "Mehrere Objekte" -#: extras/choices.py:53 netbox/preferences.py:21 -#: templates/extras/customfield.html:78 vpn/choices.py:20 -#: wireless/choices.py:27 +#: netbox/extras/choices.py:53 netbox/netbox/preferences.py:21 +#: netbox/templates/extras/customfield.html:78 netbox/vpn/choices.py:20 +#: netbox/wireless/choices.py:27 msgid "Disabled" msgstr "Deaktiviert" -#: extras/choices.py:54 +#: netbox/extras/choices.py:54 msgid "Loose" msgstr "Lose" -#: extras/choices.py:55 +#: netbox/extras/choices.py:55 msgid "Exact" msgstr "Exakt" -#: extras/choices.py:66 +#: netbox/extras/choices.py:66 msgid "Always" msgstr "Immer" -#: extras/choices.py:67 +#: netbox/extras/choices.py:67 msgid "If set" msgstr "Wenn gesetzt" -#: extras/choices.py:68 extras/choices.py:81 +#: netbox/extras/choices.py:68 netbox/extras/choices.py:81 msgid "Hidden" msgstr "Versteckt" -#: extras/choices.py:79 +#: netbox/extras/choices.py:79 msgid "Yes" msgstr "Ja" -#: extras/choices.py:80 +#: netbox/extras/choices.py:80 msgid "No" msgstr "Nein" -#: extras/choices.py:108 templates/tenancy/contact.html:57 -#: tenancy/forms/bulk_edit.py:118 wireless/forms/model_forms.py:168 +#: 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 msgid "Link" msgstr "Link" -#: extras/choices.py:124 +#: netbox/extras/choices.py:124 msgid "Newest" msgstr "Neuestes" -#: extras/choices.py:125 +#: netbox/extras/choices.py:125 msgid "Oldest" msgstr "Älteste" -#: extras/choices.py:126 +#: netbox/extras/choices.py:126 msgid "Alphabetical (A-Z)" msgstr "Alphabetisch (A-Z)" -#: extras/choices.py:127 +#: netbox/extras/choices.py:127 msgid "Alphabetical (Z-A)" msgstr "Alphabetisch (Z-A)" -#: extras/choices.py:144 extras/choices.py:167 +#: netbox/extras/choices.py:144 netbox/extras/choices.py:167 msgid "Info" msgstr "Info" -#: extras/choices.py:145 extras/choices.py:168 +#: netbox/extras/choices.py:145 netbox/extras/choices.py:168 msgid "Success" msgstr "Erfolg" -#: extras/choices.py:146 extras/choices.py:169 +#: netbox/extras/choices.py:146 netbox/extras/choices.py:169 msgid "Warning" msgstr "Warnung" -#: extras/choices.py:147 +#: netbox/extras/choices.py:147 msgid "Danger" msgstr "Gefahr" -#: extras/choices.py:165 +#: netbox/extras/choices.py:165 msgid "Debug" msgstr "Debug" -#: extras/choices.py:166 netbox/choices.py:101 +#: netbox/extras/choices.py:166 netbox/netbox/choices.py:101 msgid "Default" msgstr "Standard" -#: extras/choices.py:170 +#: netbox/extras/choices.py:170 msgid "Failure" msgstr "Fehlschlag" -#: extras/choices.py:186 +#: netbox/extras/choices.py:186 msgid "Hourly" msgstr "Stündlich" -#: extras/choices.py:187 +#: netbox/extras/choices.py:187 msgid "12 hours" msgstr "12 Stunden" -#: extras/choices.py:188 +#: netbox/extras/choices.py:188 msgid "Daily" msgstr "täglich" -#: extras/choices.py:189 +#: netbox/extras/choices.py:189 msgid "Weekly" msgstr "Wöchentlich" -#: extras/choices.py:190 +#: netbox/extras/choices.py:190 msgid "30 days" msgstr "30 Tage" -#: extras/choices.py:226 templates/dcim/virtualchassis_edit.html:107 -#: templates/generic/bulk_add_component.html:68 -#: templates/generic/object_edit.html:47 templates/generic/object_edit.html:80 -#: templates/ipam/inc/ipaddress_edit_header.html:7 +#: netbox/extras/choices.py:226 +#: 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/ipam/inc/ipaddress_edit_header.html:7 msgid "Create" msgstr "Erstellen" -#: extras/choices.py:227 +#: netbox/extras/choices.py:227 msgid "Update" msgstr "Aktualisieren" -#: extras/choices.py:228 templates/circuits/inc/circuit_termination.html:23 -#: templates/dcim/inc/panels/inventory_items.html:37 -#: templates/dcim/powerpanel.html:66 templates/extras/script_list.html:35 -#: templates/generic/bulk_delete.html:20 templates/generic/bulk_delete.html:66 -#: templates/generic/object_delete.html:19 templates/htmx/delete_form.html:57 -#: templates/ipam/inc/panels/fhrp_groups.html:48 -#: templates/users/objectpermission.html:46 -#: utilities/templates/buttons/delete.html:11 +#: netbox/extras/choices.py:228 +#: netbox/templates/circuits/inc/circuit_termination.html:23 +#: netbox/templates/dcim/inc/panels/inventory_items.html:37 +#: netbox/templates/dcim/powerpanel.html:66 +#: netbox/templates/extras/script_list.html:35 +#: netbox/templates/generic/bulk_delete.html:20 +#: netbox/templates/generic/bulk_delete.html:66 +#: netbox/templates/generic/object_delete.html:19 +#: netbox/templates/htmx/delete_form.html:57 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:48 +#: netbox/templates/users/objectpermission.html:46 +#: netbox/utilities/templates/buttons/delete.html:11 msgid "Delete" msgstr "Löschen" -#: extras/choices.py:252 netbox/choices.py:57 netbox/choices.py:102 +#: netbox/extras/choices.py:252 netbox/netbox/choices.py:57 +#: netbox/netbox/choices.py:102 msgid "Blue" msgstr "Blau" -#: extras/choices.py:253 netbox/choices.py:56 netbox/choices.py:103 +#: netbox/extras/choices.py:253 netbox/netbox/choices.py:56 +#: netbox/netbox/choices.py:103 msgid "Indigo" msgstr "Indigo" -#: extras/choices.py:254 netbox/choices.py:54 netbox/choices.py:104 +#: netbox/extras/choices.py:254 netbox/netbox/choices.py:54 +#: netbox/netbox/choices.py:104 msgid "Purple" msgstr "Purpur" -#: extras/choices.py:255 netbox/choices.py:51 netbox/choices.py:105 +#: netbox/extras/choices.py:255 netbox/netbox/choices.py:51 +#: netbox/netbox/choices.py:105 msgid "Pink" msgstr "Pink" -#: extras/choices.py:256 netbox/choices.py:50 netbox/choices.py:106 +#: netbox/extras/choices.py:256 netbox/netbox/choices.py:50 +#: netbox/netbox/choices.py:106 msgid "Red" msgstr "Rot" -#: extras/choices.py:257 netbox/choices.py:68 netbox/choices.py:107 +#: netbox/extras/choices.py:257 netbox/netbox/choices.py:68 +#: netbox/netbox/choices.py:107 msgid "Orange" msgstr "Orange" -#: extras/choices.py:258 netbox/choices.py:66 netbox/choices.py:108 +#: netbox/extras/choices.py:258 netbox/netbox/choices.py:66 +#: netbox/netbox/choices.py:108 msgid "Yellow" msgstr "Gelb" -#: extras/choices.py:259 netbox/choices.py:63 netbox/choices.py:109 +#: netbox/extras/choices.py:259 netbox/netbox/choices.py:63 +#: netbox/netbox/choices.py:109 msgid "Green" msgstr "Grün" -#: extras/choices.py:260 netbox/choices.py:60 netbox/choices.py:110 +#: netbox/extras/choices.py:260 netbox/netbox/choices.py:60 +#: netbox/netbox/choices.py:110 msgid "Teal" msgstr "Türkis" -#: extras/choices.py:261 netbox/choices.py:59 netbox/choices.py:111 +#: netbox/extras/choices.py:261 netbox/netbox/choices.py:59 +#: netbox/netbox/choices.py:111 msgid "Cyan" msgstr "Cyanblau" -#: extras/choices.py:262 netbox/choices.py:112 +#: netbox/extras/choices.py:262 netbox/netbox/choices.py:112 msgid "Gray" msgstr "Grau" -#: extras/choices.py:263 netbox/choices.py:74 netbox/choices.py:113 +#: netbox/extras/choices.py:263 netbox/netbox/choices.py:74 +#: netbox/netbox/choices.py:113 msgid "Black" msgstr "Schwarz" -#: extras/choices.py:264 netbox/choices.py:75 netbox/choices.py:114 +#: netbox/extras/choices.py:264 netbox/netbox/choices.py:75 +#: netbox/netbox/choices.py:114 msgid "White" msgstr "Weiß" -#: extras/choices.py:279 extras/forms/model_forms.py:353 -#: extras/forms/model_forms.py:430 templates/extras/webhook.html:10 +#: netbox/extras/choices.py:279 netbox/extras/forms/model_forms.py:353 +#: netbox/extras/forms/model_forms.py:430 +#: netbox/templates/extras/webhook.html:10 msgid "Webhook" msgstr "Webhook" -#: extras/choices.py:280 extras/forms/model_forms.py:418 -#: templates/extras/script/base.html:29 +#: netbox/extras/choices.py:280 netbox/extras/forms/model_forms.py:418 +#: netbox/templates/extras/script/base.html:29 msgid "Script" msgstr "Skript" -#: extras/choices.py:281 +#: netbox/extras/choices.py:281 msgid "Notification" msgstr "Benachrichtigung" -#: extras/conditions.py:54 +#: netbox/extras/conditions.py:54 #, python-brace-format msgid "Unknown operator: {op}. Must be one of: {operators}" msgstr "" "Unbekannter Operator: {op}. Muss einer von den folgenden sein: {operators}" -#: extras/conditions.py:58 +#: netbox/extras/conditions.py:58 #, python-brace-format msgid "Unsupported value type: {value}" msgstr "Nicht unterstützter Wertetyp: {value}" -#: extras/conditions.py:60 +#: netbox/extras/conditions.py:60 #, python-brace-format msgid "Invalid type for {op} operation: {value}" msgstr "Ungültiger Typ für {op} Dienst / Port: {value}" -#: extras/conditions.py:137 +#: netbox/extras/conditions.py:137 #, python-brace-format msgid "Ruleset must be a dictionary, not {ruleset}." msgstr "Der Regelsatz muss ein Dictionary sein, nicht {ruleset}." -#: extras/conditions.py:142 +#: netbox/extras/conditions.py:142 msgid "Invalid logic type: must be 'AND' or 'OR'. Please check documentation." msgstr "" "Ungültiger Logik-Typ: es muss 'AND' oder 'OR' sein. Siehe Dokumentation" -#: extras/conditions.py:154 +#: netbox/extras/conditions.py:154 msgid "Incorrect key(s) informed. Please check documentation." msgstr "Inkorrekte Key(s) rückgemeldet. Bitte die Dokumentation checken." -#: extras/dashboard/forms.py:38 +#: netbox/extras/dashboard/forms.py:38 msgid "Widget type" msgstr "Widget-Typ" -#: extras/dashboard/utils.py:36 +#: netbox/extras/dashboard/utils.py:36 #, python-brace-format msgid "Unregistered widget class: {name}" msgstr "Nicht registrierte Widget-Klasse: {name}" -#: extras/dashboard/widgets.py:125 +#: netbox/extras/dashboard/widgets.py:125 #, python-brace-format msgid "{class_name} must define a render() method." msgstr "{class_name} muss eine render () -Methode definieren." -#: extras/dashboard/widgets.py:144 +#: netbox/extras/dashboard/widgets.py:144 msgid "Note" msgstr "Hinweis" -#: extras/dashboard/widgets.py:145 +#: netbox/extras/dashboard/widgets.py:145 msgid "Display some arbitrary custom content. Markdown is supported." msgstr "" "Zeigt einige beliebige benutzerdefinierte Inhalte an. Markdown wird " "unterstützt." -#: extras/dashboard/widgets.py:158 +#: netbox/extras/dashboard/widgets.py:158 msgid "Object Counts" msgstr "Anzahl der Objekte" -#: extras/dashboard/widgets.py:159 +#: netbox/extras/dashboard/widgets.py:159 msgid "" "Display a set of NetBox models and the number of objects created for each " "type." @@ -7016,273 +7562,295 @@ msgstr "" "Zeigt eine Reihe von NetBox-Modellen und die Anzahl der für jeden Typ " "erstellten Objekte an." -#: extras/dashboard/widgets.py:169 +#: netbox/extras/dashboard/widgets.py:169 msgid "Filters to apply when counting the number of objects" msgstr "Filter, die beim Zählen der Anzahl der Objekte angewendet werden" -#: extras/dashboard/widgets.py:177 +#: netbox/extras/dashboard/widgets.py:177 msgid "Invalid format. Object filters must be passed as a dictionary." msgstr "" "Ungültiges Format. Objektfilter müssen als Wörterbuch übergeben werden." -#: extras/dashboard/widgets.py:208 +#: netbox/extras/dashboard/widgets.py:208 msgid "Object List" msgstr "Liste der Objekte" -#: extras/dashboard/widgets.py:209 +#: netbox/extras/dashboard/widgets.py:209 msgid "Display an arbitrary list of objects." msgstr "Zeigt eine beliebige Liste von Objekten an." -#: extras/dashboard/widgets.py:222 +#: netbox/extras/dashboard/widgets.py:222 msgid "The default number of objects to display" msgstr "Die Standardanzahl der anzuzeigenden Objekte" -#: extras/dashboard/widgets.py:234 +#: netbox/extras/dashboard/widgets.py:234 msgid "Invalid format. URL parameters must be passed as a dictionary." msgstr "" "Ungültiges Format. URL-Parameter müssen als Verzeichnis übergeben werden." -#: extras/dashboard/widgets.py:274 +#: netbox/extras/dashboard/widgets.py:274 msgid "RSS Feed" msgstr "RSS-Feed" -#: extras/dashboard/widgets.py:279 +#: netbox/extras/dashboard/widgets.py:279 msgid "Embed an RSS feed from an external website." msgstr "Betten Sie einen RSS-Feed von einer externen Website ein." -#: extras/dashboard/widgets.py:286 +#: netbox/extras/dashboard/widgets.py:286 msgid "Feed URL" msgstr "Feed-URL" -#: extras/dashboard/widgets.py:291 +#: netbox/extras/dashboard/widgets.py:291 msgid "The maximum number of objects to display" msgstr "Die maximale Anzahl der anzuzeigenden Objekte" -#: extras/dashboard/widgets.py:296 +#: netbox/extras/dashboard/widgets.py:296 msgid "How long to stored the cached content (in seconds)" msgstr "Wie lange soll der Inhalt zwischengespeichert werden (in Sekunden)" -#: extras/dashboard/widgets.py:348 templates/account/base.html:10 -#: templates/account/bookmarks.html:7 templates/inc/user_menu.html:48 +#: netbox/extras/dashboard/widgets.py:348 +#: netbox/templates/account/base.html:10 +#: netbox/templates/account/bookmarks.html:7 +#: netbox/templates/inc/user_menu.html:48 msgid "Bookmarks" msgstr "Lesezeichen" -#: extras/dashboard/widgets.py:352 +#: netbox/extras/dashboard/widgets.py:352 msgid "Show your personal bookmarks" msgstr "Zeige persönliche Lesezeichen an" -#: extras/events.py:147 +#: netbox/extras/events.py:147 #, python-brace-format msgid "Unknown action type for an event rule: {action_type}" msgstr "Unbekannter Aktionstyp für eine Ereignisregel: {action_type}" -#: extras/events.py:192 +#: netbox/extras/events.py:192 #, python-brace-format msgid "Cannot import events pipeline {name} error: {error}" msgstr "Ereignispipeline kann nicht importiert werden {name} Fehler: {error}" -#: extras/filtersets.py:45 +#: netbox/extras/filtersets.py:45 msgid "Script module (ID)" msgstr "Skriptmodul (ID)" -#: extras/filtersets.py:254 extras/filtersets.py:637 extras/filtersets.py:665 +#: netbox/extras/filtersets.py:254 netbox/extras/filtersets.py:637 +#: netbox/extras/filtersets.py:665 msgid "Data file (ID)" msgstr "Datei (ID)" -#: extras/filtersets.py:370 users/filtersets.py:68 users/filtersets.py:191 +#: netbox/extras/filtersets.py:370 netbox/users/filtersets.py:68 +#: netbox/users/filtersets.py:191 msgid "Group (name)" msgstr "Gruppe (Name)" -#: extras/filtersets.py:574 virtualization/forms/filtersets.py:118 +#: netbox/extras/filtersets.py:574 +#: netbox/virtualization/forms/filtersets.py:118 msgid "Cluster type" msgstr "Clustertyp" -#: extras/filtersets.py:580 virtualization/filtersets.py:95 -#: virtualization/filtersets.py:147 +#: netbox/extras/filtersets.py:580 netbox/virtualization/filtersets.py:95 +#: netbox/virtualization/filtersets.py:147 msgid "Cluster type (slug)" msgstr "Clustertyp (URL-Slug)" -#: extras/filtersets.py:601 tenancy/forms/forms.py:16 -#: tenancy/forms/forms.py:39 +#: netbox/extras/filtersets.py:601 netbox/tenancy/forms/forms.py:16 +#: netbox/tenancy/forms/forms.py:39 msgid "Tenant group" msgstr "Mandantengruppe" -#: extras/filtersets.py:607 tenancy/filtersets.py:188 -#: tenancy/filtersets.py:208 +#: netbox/extras/filtersets.py:607 netbox/tenancy/filtersets.py:188 +#: netbox/tenancy/filtersets.py:208 msgid "Tenant group (slug)" msgstr "Mandantengruppe (URL-Slug)" -#: extras/filtersets.py:623 extras/forms/model_forms.py:495 -#: templates/extras/tag.html:11 +#: netbox/extras/filtersets.py:623 netbox/extras/forms/model_forms.py:495 +#: netbox/templates/extras/tag.html:11 msgid "Tag" msgstr "Schlagwort" -#: extras/filtersets.py:629 +#: netbox/extras/filtersets.py:629 msgid "Tag (slug)" msgstr "Schlagwort (URL-Slug)" -#: extras/filtersets.py:689 extras/forms/filtersets.py:429 +#: netbox/extras/filtersets.py:689 netbox/extras/forms/filtersets.py:429 msgid "Has local config context data" msgstr "Hat lokale Konfigurationskontextdaten" -#: extras/forms/bulk_edit.py:35 extras/forms/filtersets.py:60 +#: netbox/extras/forms/bulk_edit.py:35 netbox/extras/forms/filtersets.py:60 msgid "Group name" msgstr "Name der Gruppe" -#: extras/forms/bulk_edit.py:43 extras/forms/filtersets.py:68 -#: extras/tables/tables.py:65 templates/extras/customfield.html:38 -#: templates/generic/bulk_import.html:118 +#: netbox/extras/forms/bulk_edit.py:43 netbox/extras/forms/filtersets.py:68 +#: netbox/extras/tables/tables.py:65 +#: netbox/templates/extras/customfield.html:38 +#: netbox/templates/generic/bulk_import.html:118 msgid "Required" msgstr "Erforderlich" -#: extras/forms/bulk_edit.py:48 extras/forms/filtersets.py:75 +#: netbox/extras/forms/bulk_edit.py:48 netbox/extras/forms/filtersets.py:75 msgid "Must be unique" msgstr "Muss einzigartig sein" -#: extras/forms/bulk_edit.py:61 extras/forms/bulk_import.py:60 -#: extras/forms/filtersets.py:89 extras/models/customfields.py:209 +#: netbox/extras/forms/bulk_edit.py:61 netbox/extras/forms/bulk_import.py:60 +#: netbox/extras/forms/filtersets.py:89 +#: netbox/extras/models/customfields.py:209 msgid "UI visible" msgstr "UI sichtbar" -#: extras/forms/bulk_edit.py:66 extras/forms/bulk_import.py:66 -#: extras/forms/filtersets.py:94 extras/models/customfields.py:216 +#: netbox/extras/forms/bulk_edit.py:66 netbox/extras/forms/bulk_import.py:66 +#: netbox/extras/forms/filtersets.py:94 +#: netbox/extras/models/customfields.py:216 msgid "UI editable" msgstr "UI editierbar" -#: extras/forms/bulk_edit.py:71 extras/forms/filtersets.py:97 +#: netbox/extras/forms/bulk_edit.py:71 netbox/extras/forms/filtersets.py:97 msgid "Is cloneable" msgstr "Ist klonbar" -#: extras/forms/bulk_edit.py:76 extras/forms/filtersets.py:104 +#: netbox/extras/forms/bulk_edit.py:76 netbox/extras/forms/filtersets.py:104 msgid "Minimum value" msgstr "Minimaler Wert" -#: extras/forms/bulk_edit.py:80 extras/forms/filtersets.py:108 +#: netbox/extras/forms/bulk_edit.py:80 netbox/extras/forms/filtersets.py:108 msgid "Maximum value" msgstr "Maximaler Wert" -#: extras/forms/bulk_edit.py:84 extras/forms/filtersets.py:112 +#: netbox/extras/forms/bulk_edit.py:84 netbox/extras/forms/filtersets.py:112 msgid "Validation regex" msgstr "Regex für die Überprüfung" -#: extras/forms/bulk_edit.py:91 extras/forms/filtersets.py:46 -#: extras/forms/model_forms.py:76 templates/extras/customfield.html:70 +#: netbox/extras/forms/bulk_edit.py:91 netbox/extras/forms/filtersets.py:46 +#: netbox/extras/forms/model_forms.py:76 +#: netbox/templates/extras/customfield.html:70 msgid "Behavior" msgstr "Verhalten" -#: extras/forms/bulk_edit.py:128 extras/forms/filtersets.py:149 +#: netbox/extras/forms/bulk_edit.py:128 netbox/extras/forms/filtersets.py:149 msgid "New window" msgstr "Neues Fenster" -#: extras/forms/bulk_edit.py:137 +#: netbox/extras/forms/bulk_edit.py:137 msgid "Button class" msgstr "Button-Klasse" -#: extras/forms/bulk_edit.py:154 extras/forms/filtersets.py:187 -#: extras/models/models.py:409 +#: netbox/extras/forms/bulk_edit.py:154 netbox/extras/forms/filtersets.py:187 +#: netbox/extras/models/models.py:409 msgid "MIME type" msgstr "MIME-Typ" -#: extras/forms/bulk_edit.py:159 extras/forms/filtersets.py:190 +#: netbox/extras/forms/bulk_edit.py:159 netbox/extras/forms/filtersets.py:190 msgid "File extension" msgstr "Dateiendung" -#: extras/forms/bulk_edit.py:164 extras/forms/filtersets.py:194 +#: netbox/extras/forms/bulk_edit.py:164 netbox/extras/forms/filtersets.py:194 msgid "As attachment" msgstr "Als Anlage" -#: extras/forms/bulk_edit.py:192 extras/forms/filtersets.py:236 -#: extras/tables/tables.py:256 templates/extras/savedfilter.html:29 +#: netbox/extras/forms/bulk_edit.py:192 netbox/extras/forms/filtersets.py:236 +#: netbox/extras/tables/tables.py:256 +#: netbox/templates/extras/savedfilter.html:29 msgid "Shared" msgstr "Geteilt" -#: extras/forms/bulk_edit.py:215 extras/forms/filtersets.py:265 -#: extras/models/models.py:174 +#: netbox/extras/forms/bulk_edit.py:215 netbox/extras/forms/filtersets.py:265 +#: netbox/extras/models/models.py:174 msgid "HTTP method" msgstr "HTTP-Method" -#: extras/forms/bulk_edit.py:219 extras/forms/filtersets.py:259 -#: templates/extras/webhook.html:30 +#: netbox/extras/forms/bulk_edit.py:219 netbox/extras/forms/filtersets.py:259 +#: netbox/templates/extras/webhook.html:30 msgid "Payload URL" msgstr "Payload-URL" -#: extras/forms/bulk_edit.py:224 extras/models/models.py:214 +#: netbox/extras/forms/bulk_edit.py:224 netbox/extras/models/models.py:214 msgid "SSL verification" msgstr "SSL-Verifizierung" -#: extras/forms/bulk_edit.py:227 templates/extras/webhook.html:38 +#: netbox/extras/forms/bulk_edit.py:227 +#: netbox/templates/extras/webhook.html:38 msgid "Secret" msgstr "Secret" -#: extras/forms/bulk_edit.py:232 +#: netbox/extras/forms/bulk_edit.py:232 msgid "CA file path" msgstr "CA-Dateipfad" -#: extras/forms/bulk_edit.py:253 extras/forms/bulk_import.py:192 -#: extras/forms/model_forms.py:377 +#: netbox/extras/forms/bulk_edit.py:253 netbox/extras/forms/bulk_import.py:192 +#: netbox/extras/forms/model_forms.py:377 msgid "Event types" msgstr "Ereignistypen" -#: extras/forms/bulk_edit.py:293 +#: netbox/extras/forms/bulk_edit.py:293 msgid "Is active" msgstr "Ist aktiv" -#: extras/forms/bulk_import.py:37 extras/forms/bulk_import.py:118 -#: extras/forms/bulk_import.py:139 extras/forms/bulk_import.py:162 -#: extras/forms/bulk_import.py:186 extras/forms/filtersets.py:137 -#: extras/forms/filtersets.py:224 extras/forms/model_forms.py:47 -#: extras/forms/model_forms.py:205 extras/forms/model_forms.py:237 -#: extras/forms/model_forms.py:278 extras/forms/model_forms.py:372 -#: extras/forms/model_forms.py:489 users/forms/model_forms.py:276 +#: netbox/extras/forms/bulk_import.py:37 +#: netbox/extras/forms/bulk_import.py:118 +#: 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/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/users/forms/model_forms.py:276 msgid "Object types" msgstr "Typen von Objekten" -#: extras/forms/bulk_import.py:39 extras/forms/bulk_import.py:120 -#: extras/forms/bulk_import.py:141 extras/forms/bulk_import.py:164 -#: extras/forms/bulk_import.py:188 tenancy/forms/bulk_import.py:96 +#: netbox/extras/forms/bulk_import.py:39 +#: netbox/extras/forms/bulk_import.py:120 +#: netbox/extras/forms/bulk_import.py:141 +#: netbox/extras/forms/bulk_import.py:164 +#: netbox/extras/forms/bulk_import.py:188 +#: netbox/tenancy/forms/bulk_import.py:96 msgid "One or more assigned object types" msgstr "Ein oder mehrere zugewiesene Objekttypen" -#: extras/forms/bulk_import.py:44 +#: netbox/extras/forms/bulk_import.py:44 msgid "Field data type (e.g. text, integer, etc.)" msgstr "Felddatentyp (z. B. Text, Integer usw.)" -#: extras/forms/bulk_import.py:47 extras/forms/filtersets.py:208 -#: extras/forms/filtersets.py:281 extras/forms/model_forms.py:304 -#: extras/forms/model_forms.py:341 tenancy/forms/filtersets.py:92 +#: 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/tenancy/forms/filtersets.py:92 msgid "Object type" msgstr "Typ des Objekts" -#: extras/forms/bulk_import.py:50 +#: netbox/extras/forms/bulk_import.py:50 msgid "Object type (for object or multi-object fields)" msgstr "Objekttyp (für Objekt- oder Mehrfachobjektfelder)" -#: extras/forms/bulk_import.py:53 extras/forms/filtersets.py:84 +#: netbox/extras/forms/bulk_import.py:53 netbox/extras/forms/filtersets.py:84 msgid "Choice set" msgstr "Auswahlset" -#: extras/forms/bulk_import.py:57 +#: netbox/extras/forms/bulk_import.py:57 msgid "Choice set (for selection fields)" msgstr "Auswahlset (für Auswahlfelder)" -#: extras/forms/bulk_import.py:63 +#: netbox/extras/forms/bulk_import.py:63 msgid "Whether the custom field is displayed in the UI" msgstr "" "Ob das benutzerdefinierte Feld in der Benutzeroberfläche angezeigt wird" -#: extras/forms/bulk_import.py:69 +#: netbox/extras/forms/bulk_import.py:69 msgid "Whether the custom field is editable in the UI" msgstr "" "Ob das benutzerdefinierte Feld in der Benutzeroberfläche bearbeitet werden " "kann" -#: extras/forms/bulk_import.py:85 +#: netbox/extras/forms/bulk_import.py:85 msgid "The base set of predefined choices to use (if any)" msgstr "" "Der Basissatz vordefinierter Auswahlmöglichkeiten, die verwendet werden " "sollen (falls vorhanden)" -#: extras/forms/bulk_import.py:91 +#: netbox/extras/forms/bulk_import.py:91 msgid "" "Quoted string of comma-separated field choices with optional labels " "separated by colon: \"choice1:First Choice,choice2:Second Choice\"" @@ -7291,188 +7859,204 @@ msgstr "" "optionalen Bezeichnungen, die durch einen Doppelpunkt getrennt sind: " "„Choice1:First Choice, Choice2:Second Choice“" -#: extras/forms/bulk_import.py:123 extras/models/models.py:323 +#: netbox/extras/forms/bulk_import.py:123 netbox/extras/models/models.py:323 msgid "button class" msgstr "Button-Klasse" -#: extras/forms/bulk_import.py:126 extras/models/models.py:327 +#: netbox/extras/forms/bulk_import.py:126 netbox/extras/models/models.py:327 msgid "" "The class of the first link in a group will be used for the dropdown button" msgstr "" "Die Klasse des ersten Links in einer Gruppe wird für den Dropdown-Button " "verwendet" -#: extras/forms/bulk_import.py:193 +#: netbox/extras/forms/bulk_import.py:193 msgid "The event type(s) which will trigger this rule" msgstr "Ereignistype(n), die diese Regel auslösen" -#: extras/forms/bulk_import.py:196 +#: netbox/extras/forms/bulk_import.py:196 msgid "Action object" msgstr "Aktionsobjekt" -#: extras/forms/bulk_import.py:198 +#: netbox/extras/forms/bulk_import.py:198 msgid "Webhook name or script as dotted path module.Class" msgstr "Webhook-Name oder Skript als gepunkteter Pfad module.Class" -#: extras/forms/bulk_import.py:219 +#: netbox/extras/forms/bulk_import.py:219 #, python-brace-format msgid "Webhook {name} not found" msgstr "Webhook {name} nicht gefunden" -#: extras/forms/bulk_import.py:228 +#: netbox/extras/forms/bulk_import.py:228 #, python-brace-format msgid "Script {name} not found" msgstr "Skript {name} nicht gefunden" -#: extras/forms/bulk_import.py:244 +#: netbox/extras/forms/bulk_import.py:244 msgid "Assigned object type" msgstr "Zugewiesener Objekttyp" -#: extras/forms/bulk_import.py:249 +#: netbox/extras/forms/bulk_import.py:249 msgid "The classification of entry" msgstr "Die Klassifizierung des Eintrags" -#: extras/forms/bulk_import.py:261 extras/forms/model_forms.py:320 -#: netbox/navigation/menu.py:390 templates/extras/notificationgroup.html:41 -#: templates/users/group.html:29 users/forms/model_forms.py:236 -#: users/forms/model_forms.py:248 users/forms/model_forms.py:300 -#: users/tables.py:102 +#: netbox/extras/forms/bulk_import.py:261 +#: netbox/extras/forms/model_forms.py:320 netbox/netbox/navigation/menu.py:390 +#: 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 +#: netbox/users/tables.py:102 msgid "Users" msgstr "Benutzer" -#: extras/forms/bulk_import.py:265 +#: netbox/extras/forms/bulk_import.py:265 msgid "User names separated by commas, encased with double quotes" msgstr "" "Durch Kommas getrennte Benutzernamen, umgeben von doppelten " "Anführungszeichen" -#: extras/forms/bulk_import.py:268 extras/forms/model_forms.py:315 -#: netbox/navigation/menu.py:410 templates/extras/notificationgroup.html:31 -#: users/forms/model_forms.py:181 users/forms/model_forms.py:193 -#: users/forms/model_forms.py:305 users/tables.py:35 users/tables.py:106 +#: netbox/extras/forms/bulk_import.py:268 +#: netbox/extras/forms/model_forms.py:315 netbox/netbox/navigation/menu.py:410 +#: 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 +#: netbox/users/tables.py:106 msgid "Groups" msgstr "Gruppen" -#: extras/forms/bulk_import.py:272 +#: netbox/extras/forms/bulk_import.py:272 msgid "Group names separated by commas, encased with double quotes" msgstr "" "Gruppennamen, getrennt durch Kommas, umgeben von doppelten Anführungszeichen" -#: extras/forms/filtersets.py:52 extras/forms/model_forms.py:56 +#: netbox/extras/forms/filtersets.py:52 netbox/extras/forms/model_forms.py:56 msgid "Related object type" msgstr "Verwandter Objekttyp" -#: extras/forms/filtersets.py:57 +#: netbox/extras/forms/filtersets.py:57 msgid "Field type" msgstr "Feld-Typ" -#: extras/forms/filtersets.py:120 extras/forms/model_forms.py:157 -#: extras/tables/tables.py:91 templates/generic/bulk_import.html:154 +#: netbox/extras/forms/filtersets.py:120 +#: 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" -#: extras/forms/filtersets.py:164 extras/forms/filtersets.py:319 -#: extras/forms/filtersets.py:408 extras/forms/model_forms.py:572 -#: templates/core/job.html:96 templates/extras/eventrule.html:84 +#: 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/templates/extras/eventrule.html:84 msgid "Data" msgstr "Daten" -#: extras/forms/filtersets.py:175 extras/forms/filtersets.py:333 -#: extras/forms/filtersets.py:418 netbox/choices.py:130 -#: utilities/forms/bulk_import.py:26 +#: netbox/extras/forms/filtersets.py:175 netbox/extras/forms/filtersets.py:333 +#: netbox/extras/forms/filtersets.py:418 netbox/netbox/choices.py:130 +#: netbox/utilities/forms/bulk_import.py:26 msgid "Data file" msgstr "Datei" -#: extras/forms/filtersets.py:183 +#: netbox/extras/forms/filtersets.py:183 msgid "Content types" msgstr "Inhaltstypen" -#: extras/forms/filtersets.py:255 extras/models/models.py:179 +#: netbox/extras/forms/filtersets.py:255 netbox/extras/models/models.py:179 msgid "HTTP content type" msgstr "HTTP-Inhaltstyp" -#: extras/forms/filtersets.py:286 +#: netbox/extras/forms/filtersets.py:286 msgid "Event type" msgstr "Ereignistyp" -#: extras/forms/filtersets.py:291 +#: netbox/extras/forms/filtersets.py:291 msgid "Action type" msgstr "Typ der Aktion" -#: extras/forms/filtersets.py:307 +#: netbox/extras/forms/filtersets.py:307 msgid "Tagged object type" msgstr "Typ des markierten Objekts" -#: extras/forms/filtersets.py:312 +#: netbox/extras/forms/filtersets.py:312 msgid "Allowed object type" msgstr "Erlaubter Objekttyp" -#: extras/forms/filtersets.py:341 extras/forms/model_forms.py:507 -#: netbox/navigation/menu.py:18 +#: netbox/extras/forms/filtersets.py:341 +#: netbox/extras/forms/model_forms.py:507 netbox/netbox/navigation/menu.py:18 msgid "Regions" msgstr "Regionen" -#: extras/forms/filtersets.py:346 extras/forms/model_forms.py:512 +#: netbox/extras/forms/filtersets.py:346 +#: netbox/extras/forms/model_forms.py:512 msgid "Site groups" msgstr "Standortgruppen" -#: extras/forms/filtersets.py:356 extras/forms/model_forms.py:522 -#: netbox/navigation/menu.py:20 templates/dcim/site.html:127 +#: netbox/extras/forms/filtersets.py:356 +#: netbox/extras/forms/model_forms.py:522 netbox/netbox/navigation/menu.py:20 +#: netbox/templates/dcim/site.html:127 msgid "Locations" msgstr "Lokationen" -#: extras/forms/filtersets.py:361 extras/forms/model_forms.py:527 +#: netbox/extras/forms/filtersets.py:361 +#: netbox/extras/forms/model_forms.py:527 msgid "Device types" msgstr "Gerätetypen" -#: extras/forms/filtersets.py:366 extras/forms/model_forms.py:532 +#: netbox/extras/forms/filtersets.py:366 +#: netbox/extras/forms/model_forms.py:532 msgid "Roles" msgstr "Prefix und VLAN-Rollen" -#: extras/forms/filtersets.py:376 extras/forms/model_forms.py:542 +#: netbox/extras/forms/filtersets.py:376 +#: netbox/extras/forms/model_forms.py:542 msgid "Cluster types" msgstr "Clustertypen" -#: extras/forms/filtersets.py:381 extras/forms/model_forms.py:547 +#: netbox/extras/forms/filtersets.py:381 +#: netbox/extras/forms/model_forms.py:547 msgid "Cluster groups" msgstr "Clustergruppen" -#: extras/forms/filtersets.py:386 extras/forms/model_forms.py:552 -#: netbox/navigation/menu.py:255 netbox/navigation/menu.py:257 -#: templates/virtualization/clustertype.html:30 -#: virtualization/tables/clusters.py:23 virtualization/tables/clusters.py:45 +#: 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/templates/virtualization/clustertype.html:30 +#: netbox/virtualization/tables/clusters.py:23 +#: netbox/virtualization/tables/clusters.py:45 msgid "Clusters" msgstr "Cluster" -#: extras/forms/filtersets.py:391 extras/forms/model_forms.py:557 +#: netbox/extras/forms/filtersets.py:391 +#: netbox/extras/forms/model_forms.py:557 msgid "Tenant groups" msgstr "Mandantengruppen" -#: extras/forms/model_forms.py:49 +#: netbox/extras/forms/model_forms.py:49 msgid "The type(s) of object that have this custom field" msgstr "Die Objekttypen, die dieses benutzerdefinierte Feld haben" -#: extras/forms/model_forms.py:52 +#: netbox/extras/forms/model_forms.py:52 msgid "Default value" msgstr "Vorgabewert" -#: extras/forms/model_forms.py:58 +#: netbox/extras/forms/model_forms.py:58 msgid "Type of the related object (for object/multi-object fields only)" msgstr "Typ des zugehörigen Objekts (nur für Objekt-/Mehrfachobjektfelder)" -#: extras/forms/model_forms.py:61 templates/extras/customfield.html:60 +#: netbox/extras/forms/model_forms.py:61 +#: netbox/templates/extras/customfield.html:60 msgid "Related object filter" msgstr "Filter für verwandte Objekte" -#: extras/forms/model_forms.py:63 +#: netbox/extras/forms/model_forms.py:63 msgid "Specify query parameters as a JSON object." msgstr "Geben Sie Abfrageparameter als JSON-Objekt an." -#: extras/forms/model_forms.py:73 templates/extras/customfield.html:10 +#: netbox/extras/forms/model_forms.py:73 +#: netbox/templates/extras/customfield.html:10 msgid "Custom Field" msgstr "Benutzerdefiniertes Feld" -#: extras/forms/model_forms.py:85 +#: netbox/extras/forms/model_forms.py:85 msgid "" "The type of data stored in this field. For object/multi-object fields, " "select the related object type below." @@ -7480,7 +8064,7 @@ msgstr "" "Die Art der in diesem Feld gespeicherten Daten. Wählen Sie für " "Objekt-/Multiobjekt-Felder unten den zugehörigen Objekttyp aus." -#: extras/forms/model_forms.py:88 +#: netbox/extras/forms/model_forms.py:88 msgid "" "This will be displayed as help text for the form field. Markdown is " "supported." @@ -7488,11 +8072,11 @@ msgstr "" "Dies wird als Hilfetext für das Formularfeld angezeigt. Markdown wird " "unterstützt." -#: extras/forms/model_forms.py:143 +#: netbox/extras/forms/model_forms.py:143 msgid "Related Object" msgstr "Verwandtes Objekt" -#: extras/forms/model_forms.py:169 +#: netbox/extras/forms/model_forms.py:169 msgid "" "Enter one choice per line. An optional label may be specified for each " "choice by appending it with a colon. Example:" @@ -7501,15 +8085,16 @@ msgstr "" "Bezeichnung angegeben werden, indem ein Doppelpunkt angehängt wird. " "Beispiel:" -#: extras/forms/model_forms.py:212 templates/extras/customlink.html:10 +#: netbox/extras/forms/model_forms.py:212 +#: netbox/templates/extras/customlink.html:10 msgid "Custom Link" msgstr "Benutzerdefinierter Link" -#: extras/forms/model_forms.py:214 +#: netbox/extras/forms/model_forms.py:214 msgid "Templates" msgstr "Vorlagen" -#: extras/forms/model_forms.py:226 +#: netbox/extras/forms/model_forms.py:226 #, python-brace-format msgid "" "Jinja2 template code for the link text. Reference the object as {example}. " @@ -7519,7 +8104,7 @@ msgstr "" "{example}. Links, die als leerer Text dargestellt werden, werden nicht " "angezeigt." -#: extras/forms/model_forms.py:230 +#: netbox/extras/forms/model_forms.py:230 #, python-brace-format msgid "" "Jinja2 template code for the link URL. Reference the object as {example}." @@ -7527,169 +8112,177 @@ msgstr "" "Jinja2-Vorlagencode für die Link-URL. Verweisen Sie auf das Objekt als " "{example}." -#: extras/forms/model_forms.py:241 extras/forms/model_forms.py:624 +#: netbox/extras/forms/model_forms.py:241 +#: netbox/extras/forms/model_forms.py:624 msgid "Template code" msgstr "Vorlagencode" -#: extras/forms/model_forms.py:247 templates/extras/exporttemplate.html:12 +#: netbox/extras/forms/model_forms.py:247 +#: netbox/templates/extras/exporttemplate.html:12 msgid "Export Template" msgstr "Vorlage exportieren" -#: extras/forms/model_forms.py:249 +#: netbox/extras/forms/model_forms.py:249 msgid "Rendering" msgstr "Rendern" -#: extras/forms/model_forms.py:263 extras/forms/model_forms.py:649 +#: netbox/extras/forms/model_forms.py:263 +#: netbox/extras/forms/model_forms.py:649 msgid "Template content is populated from the remote source selected below." msgstr "" "Der Vorlageninhalt wird aus der unten ausgewählten Remote-Quelle gefüllt." -#: extras/forms/model_forms.py:270 extras/forms/model_forms.py:656 +#: netbox/extras/forms/model_forms.py:270 +#: netbox/extras/forms/model_forms.py:656 msgid "Must specify either local content or a data file" msgstr "Muss entweder lokalen Inhalt oder eine Datendatei angeben" -#: extras/forms/model_forms.py:284 netbox/forms/mixins.py:70 -#: templates/extras/savedfilter.html:10 +#: netbox/extras/forms/model_forms.py:284 netbox/netbox/forms/mixins.py:70 +#: netbox/templates/extras/savedfilter.html:10 msgid "Saved Filter" msgstr "Gespeicherter Filter" -#: extras/forms/model_forms.py:334 +#: netbox/extras/forms/model_forms.py:334 msgid "A notification group specify at least one user or group." msgstr "" "Eine Benachrichtigungsgruppe muss mindestens einen Benutzer oder eine Gruppe" " haben." -#: extras/forms/model_forms.py:356 templates/extras/webhook.html:23 +#: netbox/extras/forms/model_forms.py:356 +#: netbox/templates/extras/webhook.html:23 msgid "HTTP Request" msgstr "HTTP-Request" -#: extras/forms/model_forms.py:358 templates/extras/webhook.html:44 +#: netbox/extras/forms/model_forms.py:358 +#: netbox/templates/extras/webhook.html:44 msgid "SSL" msgstr "SSL" -#: extras/forms/model_forms.py:380 +#: netbox/extras/forms/model_forms.py:380 msgid "Action choice" msgstr "Wahl der Aktion" -#: extras/forms/model_forms.py:385 +#: netbox/extras/forms/model_forms.py:385 msgid "Enter conditions in JSON format." msgstr "" "Geben Sie die Bedingungen ein in JSON - " "Format." -#: extras/forms/model_forms.py:389 +#: netbox/extras/forms/model_forms.py:389 msgid "" "Enter parameters to pass to the action in JSON format." msgstr "" -"Geben Sie Parameter ein, die an die Aktion übergeben werden sollen JSON formatieren." +"Geben Sie Parameter ein, die an die Aktion übergeben werden sollen, in JSON formatiert." -#: extras/forms/model_forms.py:394 templates/extras/eventrule.html:10 +#: netbox/extras/forms/model_forms.py:394 +#: netbox/templates/extras/eventrule.html:10 msgid "Event Rule" msgstr "Ereignisregel" -#: extras/forms/model_forms.py:395 +#: netbox/extras/forms/model_forms.py:395 msgid "Triggers" msgstr "Trigger" -#: extras/forms/model_forms.py:442 +#: netbox/extras/forms/model_forms.py:442 msgid "Notification group" msgstr "Benachrichtigungsgruppe" -#: extras/forms/model_forms.py:562 netbox/navigation/menu.py:26 -#: tenancy/tables/tenants.py:22 +#: netbox/extras/forms/model_forms.py:562 netbox/netbox/navigation/menu.py:26 +#: netbox/tenancy/tables/tenants.py:22 msgid "Tenants" msgstr "Mandanten" -#: extras/forms/model_forms.py:606 +#: netbox/extras/forms/model_forms.py:606 msgid "Data is populated from the remote source selected below." msgstr "Die Daten werden aus der unten ausgewählten Remote-Quelle gefüllt." -#: extras/forms/model_forms.py:612 +#: netbox/extras/forms/model_forms.py:612 msgid "Must specify either local data or a data file" msgstr "Muss entweder lokale Daten oder eine Datendatei angeben" -#: extras/forms/model_forms.py:631 templates/core/datafile.html:55 +#: netbox/extras/forms/model_forms.py:631 +#: netbox/templates/core/datafile.html:55 msgid "Content" msgstr "Inhalt" -#: extras/forms/reports.py:17 extras/forms/scripts.py:23 +#: netbox/extras/forms/reports.py:17 netbox/extras/forms/scripts.py:23 msgid "Schedule at" msgstr "geplant am" -#: extras/forms/reports.py:18 +#: netbox/extras/forms/reports.py:18 msgid "Schedule execution of report to a set time" msgstr "Planen Sie die Ausführung des Berichts auf eine festgelegte Zeit" -#: extras/forms/reports.py:23 extras/forms/scripts.py:29 +#: netbox/extras/forms/reports.py:23 netbox/extras/forms/scripts.py:29 msgid "Recurs every" msgstr "Wiederholt sich alle" -#: extras/forms/reports.py:27 +#: netbox/extras/forms/reports.py:27 msgid "Interval at which this report is re-run (in minutes)" msgstr "Intervall, in dem dieser Bericht erneut ausgeführt wird (in Minuten)" -#: extras/forms/reports.py:35 extras/forms/scripts.py:41 +#: netbox/extras/forms/reports.py:35 netbox/extras/forms/scripts.py:41 #, python-brace-format msgid " (current time: {now})" msgstr " (aktuelle Uhrzeit: {now})" -#: extras/forms/reports.py:45 extras/forms/scripts.py:51 +#: netbox/extras/forms/reports.py:45 netbox/extras/forms/scripts.py:51 msgid "Scheduled time must be in the future." msgstr "Die geplante Zeit muss in der Zukunft liegen." -#: extras/forms/scripts.py:17 +#: netbox/extras/forms/scripts.py:17 msgid "Commit changes" msgstr "Änderungen übernehmen" -#: extras/forms/scripts.py:18 +#: netbox/extras/forms/scripts.py:18 msgid "Commit changes to the database (uncheck for a dry-run)" msgstr "" "Änderungen in die Datenbank übernehmen (bei einem Probelauf das Häkchen " "entfernen)" -#: extras/forms/scripts.py:24 +#: netbox/extras/forms/scripts.py:24 msgid "Schedule execution of script to a set time" msgstr "Planen Sie die Ausführung des Skripts auf eine festgelegte Zeit" -#: extras/forms/scripts.py:33 +#: netbox/extras/forms/scripts.py:33 msgid "Interval at which this script is re-run (in minutes)" msgstr "Intervall, in dem dieses Skript erneut ausgeführt wird (in Minuten)" -#: extras/jobs.py:49 +#: netbox/extras/jobs.py:47 msgid "Database changes have been reverted automatically." msgstr "Datenbankänderungen wurden automatisch rückgängig gemacht." -#: extras/jobs.py:55 +#: netbox/extras/jobs.py:53 msgid "Script aborted with error: " msgstr "Das Skript wurde mit einem Fehler abgebrochen: " -#: extras/jobs.py:65 +#: netbox/extras/jobs.py:63 msgid "An exception occurred: " msgstr "Eine Ausnahme ist aufgetreten: " -#: extras/jobs.py:70 +#: netbox/extras/jobs.py:68 msgid "Database changes have been reverted due to error." msgstr "Datenbankänderungen wurden aufgrund eines Fehlers rückgängig gemacht." -#: extras/management/commands/reindex.py:66 +#: netbox/extras/management/commands/reindex.py:66 msgid "No indexers found!" msgstr "Keine Indexer gefunden!" -#: extras/models/configs.py:130 +#: netbox/extras/models/configs.py:130 msgid "config context" msgstr "Konfigurationsvorlage" -#: extras/models/configs.py:131 +#: netbox/extras/models/configs.py:131 msgid "config contexts" msgstr "Konfigurationsvorlage" -#: extras/models/configs.py:149 extras/models/configs.py:205 +#: netbox/extras/models/configs.py:149 netbox/extras/models/configs.py:205 msgid "JSON data must be in object form. Example:" msgstr "JSON-Daten müssen in Objektform vorliegen. Beispiel:" -#: extras/models/configs.py:169 +#: netbox/extras/models/configs.py:169 msgid "" "Local config context data takes precedence over source contexts in the final" " rendered config context" @@ -7697,19 +8290,19 @@ msgstr "" "Lokale Konfigurationskontextdaten haben im endgültigen gerenderten " "Konfigurationskontext Vorrang vor Quellkontexten" -#: extras/models/configs.py:224 +#: netbox/extras/models/configs.py:224 msgid "template code" msgstr "Vorlagen-Code" -#: extras/models/configs.py:225 +#: netbox/extras/models/configs.py:225 msgid "Jinja2 template code." msgstr "Jinja2-Vorlagen-Code." -#: extras/models/configs.py:228 +#: netbox/extras/models/configs.py:228 msgid "environment parameters" msgstr "Umgebungsparameter" -#: extras/models/configs.py:233 +#: netbox/extras/models/configs.py:233 msgid "" "Any additional" @@ -7719,43 +8312,43 @@ msgstr "" "href=\"https://jinja.palletsprojects.com/en/3.1.x/api/#jinja2.Environment\">zusätzliche" " Parameter um beim Aufbau der Jinja2-Umgebung zu bestehen." -#: extras/models/configs.py:240 +#: netbox/extras/models/configs.py:240 msgid "config template" msgstr "Konfigurationsvorlage" -#: extras/models/configs.py:241 +#: netbox/extras/models/configs.py:241 msgid "config templates" msgstr "Konfigurationsvorlagen" -#: extras/models/customfields.py:75 +#: netbox/extras/models/customfields.py:75 msgid "The object(s) to which this field applies." msgstr "Objekt(e), für die dieses Feld gilt." -#: extras/models/customfields.py:82 +#: netbox/extras/models/customfields.py:82 msgid "The type of data this custom field holds" msgstr "Der Datentyp, den dieses benutzerdefinierte Feld enthält" -#: extras/models/customfields.py:89 +#: netbox/extras/models/customfields.py:89 msgid "The type of NetBox object this field maps to (for object fields)" msgstr "" "Der Typ des NetBox-Objekts, dem dieses Feld zugeordnet ist (für " "Objektfelder)" -#: extras/models/customfields.py:95 +#: netbox/extras/models/customfields.py:95 msgid "Internal field name" msgstr "Interner Feldname" -#: extras/models/customfields.py:99 +#: netbox/extras/models/customfields.py:99 msgid "Only alphanumeric characters and underscores are allowed." msgstr "Nur alphanumerische Zeichen und Unterstriche sind zulässig." -#: extras/models/customfields.py:104 +#: netbox/extras/models/customfields.py:104 msgid "Double underscores are not permitted in custom field names." msgstr "" "Doppelte Unterstriche sind in den Namen benutzerdefinierter Felder nicht " "zulässig." -#: extras/models/customfields.py:115 +#: netbox/extras/models/customfields.py:115 msgid "" "Name of the field as displayed to users (if not provided, 'the field's name " "will be used)" @@ -7763,21 +8356,21 @@ msgstr "" "Name des Feldes, wie er den Benutzern angezeigt wird (falls nicht angegeben," " wird der Name des Felds verwendet)" -#: extras/models/customfields.py:119 extras/models/models.py:317 +#: netbox/extras/models/customfields.py:119 netbox/extras/models/models.py:317 msgid "group name" msgstr "Name der Gruppe" -#: extras/models/customfields.py:122 +#: netbox/extras/models/customfields.py:122 msgid "Custom fields within the same group will be displayed together" msgstr "" "Benutzerdefinierte Felder innerhalb derselben Gruppe werden zusammen " "angezeigt" -#: extras/models/customfields.py:130 +#: netbox/extras/models/customfields.py:130 msgid "required" msgstr "erforderlich" -#: extras/models/customfields.py:132 +#: netbox/extras/models/customfields.py:132 msgid "" "This field is required when creating new objects or editing an existing " "object." @@ -7785,20 +8378,20 @@ msgstr "" "Dieses Feld ist erforderlich, wenn Sie neue Objekte erstellen oder ein " "vorhandenes Objekt bearbeiten." -#: extras/models/customfields.py:135 +#: netbox/extras/models/customfields.py:135 msgid "must be unique" msgstr "muss einzigartig sein" -#: extras/models/customfields.py:137 +#: netbox/extras/models/customfields.py:137 msgid "The value of this field must be unique for the assigned object" msgstr "" "Der Wert dieses Feldes muss für das zugewiesene Objekt eindeutig sein." -#: extras/models/customfields.py:140 +#: netbox/extras/models/customfields.py:140 msgid "search weight" msgstr "Gewichtung der Suche" -#: extras/models/customfields.py:143 +#: netbox/extras/models/customfields.py:143 msgid "" "Weighting for search. Lower values are considered more important. Fields " "with a search weight of zero will be ignored." @@ -7806,11 +8399,11 @@ msgstr "" "Gewichtung für die Suche. Niedrigere Werte werden als wichtiger angesehen. " "Felder mit einem Suchgewicht von Null werden ignoriert." -#: extras/models/customfields.py:148 +#: netbox/extras/models/customfields.py:148 msgid "filter logic" msgstr "Filterlogik" -#: extras/models/customfields.py:152 +#: netbox/extras/models/customfields.py:152 msgid "" "Loose matches any instance of a given string; exact matches the entire " "field." @@ -7818,11 +8411,11 @@ msgstr "" "Loose entspricht einer beliebigen Instanz einer bestimmten Zeichenfolge; " "exact entspricht dem gesamten Feld." -#: extras/models/customfields.py:155 +#: netbox/extras/models/customfields.py:155 msgid "default" msgstr "Standard" -#: extras/models/customfields.py:159 +#: netbox/extras/models/customfields.py:159 msgid "" "Default value for the field (must be a JSON value). Encapsulate strings with" " double quotes (e.g. \"Foo\")." @@ -7830,7 +8423,7 @@ msgstr "" "Standardwert für das Feld (muss ein JSON-Wert sein). Kapsele Zeichenketten " "mit doppelten Anführungszeichen ein (z. B. „Foo“)." -#: extras/models/customfields.py:166 +#: netbox/extras/models/customfields.py:166 msgid "" "Filter the object selection choices using a query_params dict (must be a " "JSON value).Encapsulate strings with double quotes (e.g. \"Foo\")." @@ -7839,36 +8432,36 @@ msgstr "" "(muss ein JSON-Wert sein). Kapseln Sie Zeichenketten mit doppelten " "Anführungszeichen ein (z. B. „Foo“)." -#: extras/models/customfields.py:172 +#: netbox/extras/models/customfields.py:172 msgid "display weight" msgstr "Gewicht anzeigen" -#: extras/models/customfields.py:173 +#: 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." -#: extras/models/customfields.py:178 +#: netbox/extras/models/customfields.py:178 msgid "minimum value" msgstr "minimaler Wert" -#: extras/models/customfields.py:179 +#: netbox/extras/models/customfields.py:179 msgid "Minimum allowed value (for numeric fields)" msgstr "Zulässiger Mindestwert (für numerische Felder)" -#: extras/models/customfields.py:184 +#: netbox/extras/models/customfields.py:184 msgid "maximum value" msgstr "maximaler Wert" -#: extras/models/customfields.py:185 +#: netbox/extras/models/customfields.py:185 msgid "Maximum allowed value (for numeric fields)" msgstr "Zulässiger Maximalwert (für numerische Felder)" -#: extras/models/customfields.py:191 +#: netbox/extras/models/customfields.py:191 msgid "validation regex" msgstr "Regex für die Validierung" -#: extras/models/customfields.py:193 +#: netbox/extras/models/customfields.py:193 #, python-brace-format msgid "" "Regular expression to enforce on text field values. Use ^ and $ to force " @@ -7880,195 +8473,197 @@ msgstr "" "Beispiel ^ [A-Z]{3}$ begrenzt die Werte auf genau drei " "Großbuchstaben." -#: extras/models/customfields.py:201 +#: netbox/extras/models/customfields.py:201 msgid "choice set" msgstr "Auswahlset" -#: extras/models/customfields.py:210 +#: netbox/extras/models/customfields.py:210 msgid "Specifies whether the custom field is displayed in the UI" msgstr "" "Gibt an, ob das benutzerdefinierte Feld in der Benutzeroberfläche angezeigt " "wird" -#: extras/models/customfields.py:217 +#: netbox/extras/models/customfields.py:217 msgid "Specifies whether the custom field value can be edited in the UI" msgstr "" "Gibt an, ob der Wert des benutzerdefinierten Felds in der Benutzeroberfläche" " bearbeitet werden kann." -#: extras/models/customfields.py:221 +#: netbox/extras/models/customfields.py:221 msgid "is cloneable" msgstr "ist klonbar" -#: extras/models/customfields.py:222 +#: netbox/extras/models/customfields.py:222 msgid "Replicate this value when cloning objects" msgstr "Replizieren Sie diesen Wert beim Klonen von Objekten" -#: extras/models/customfields.py:239 +#: netbox/extras/models/customfields.py:239 msgid "custom field" msgstr "benutzerdefiniertes Feld" -#: extras/models/customfields.py:240 +#: netbox/extras/models/customfields.py:240 msgid "custom fields" msgstr "benutzerdefinierte Felder" -#: extras/models/customfields.py:329 +#: netbox/extras/models/customfields.py:329 #, python-brace-format msgid "Invalid default value \"{value}\": {error}" msgstr "Ungültiger Standardwert \"{value}\": {error}" -#: extras/models/customfields.py:336 +#: netbox/extras/models/customfields.py:336 msgid "A minimum value may be set only for numeric fields" msgstr "Ein Mindestwert kann nur für numerische Felder festgelegt werden" -#: extras/models/customfields.py:338 +#: netbox/extras/models/customfields.py:338 msgid "A maximum value may be set only for numeric fields" msgstr "Ein Maximalwert kann nur für numerische Felder festgelegt werden" -#: extras/models/customfields.py:348 +#: netbox/extras/models/customfields.py:348 msgid "" "Regular expression validation is supported only for text and URL fields" msgstr "" "Die Überprüfung regulärer Ausdrücke wird nur für Text- und URL-Felder " "unterstützt" -#: extras/models/customfields.py:354 +#: netbox/extras/models/customfields.py:354 msgid "Uniqueness cannot be enforced for boolean fields" msgstr "Eindeutigkeit kann für boolesche Felder nicht erzwungen werden" -#: extras/models/customfields.py:364 +#: netbox/extras/models/customfields.py:364 msgid "Selection fields must specify a set of choices." msgstr "Auswahlfelder müssen eine Reihe von Auswahlmöglichkeiten enthalten." -#: extras/models/customfields.py:368 +#: netbox/extras/models/customfields.py:368 msgid "Choices may be set only on selection fields." msgstr "Auswahlmöglichkeiten können nur für Auswahlfelder festgelegt werden." -#: extras/models/customfields.py:375 +#: netbox/extras/models/customfields.py:375 msgid "Object fields must define an object type." msgstr "Objektfelder müssen einen Objekttyp definieren." -#: extras/models/customfields.py:379 +#: netbox/extras/models/customfields.py:379 #, python-brace-format msgid "{type} fields may not define an object type." msgstr "{type} Felder definieren möglicherweise keinen Objekttyp." -#: extras/models/customfields.py:386 +#: netbox/extras/models/customfields.py:386 msgid "A related object filter can be defined only for object fields." msgstr "" "Ein verwandter Objektfilter kann nur für Objektfelder definiert werden." -#: extras/models/customfields.py:390 +#: netbox/extras/models/customfields.py:390 msgid "Filter must be defined as a dictionary mapping attributes to values." msgstr "" "Der Filter muss als Wörterbuch definiert werden, das Attributen Werten " "zuordnet." -#: extras/models/customfields.py:469 +#: netbox/extras/models/customfields.py:469 msgid "True" msgstr "Wahr" -#: extras/models/customfields.py:470 +#: netbox/extras/models/customfields.py:470 msgid "False" msgstr "Falsch" -#: extras/models/customfields.py:560 +#: netbox/extras/models/customfields.py:560 #, python-brace-format msgid "Values must match this regex: {regex}" msgstr "" "Die Werte müssen mit diesem Regex übereinstimmen: {regex}" -#: extras/models/customfields.py:654 +#: netbox/extras/models/customfields.py:654 msgid "Value must be a string." msgstr "Der Wert muss eine Zeichenfolge sein." -#: extras/models/customfields.py:656 +#: netbox/extras/models/customfields.py:656 #, python-brace-format msgid "Value must match regex '{regex}'" msgstr "Wert muss mit Regex '{regex}' übereinstimmen" -#: extras/models/customfields.py:661 +#: netbox/extras/models/customfields.py:661 msgid "Value must be an integer." msgstr "Der Wert muss eine Ganzzahl sein." -#: extras/models/customfields.py:664 extras/models/customfields.py:679 +#: netbox/extras/models/customfields.py:664 +#: netbox/extras/models/customfields.py:679 #, python-brace-format msgid "Value must be at least {minimum}" msgstr "Wert muss mindestens {minimum} sein" -#: extras/models/customfields.py:668 extras/models/customfields.py:683 +#: netbox/extras/models/customfields.py:668 +#: netbox/extras/models/customfields.py:683 #, python-brace-format msgid "Value must not exceed {maximum}" msgstr "Wert darf nicht {maximum} überschreiten" -#: extras/models/customfields.py:676 +#: netbox/extras/models/customfields.py:676 msgid "Value must be a decimal." msgstr "Der Wert muss eine Dezimalzahl sein." -#: extras/models/customfields.py:688 +#: netbox/extras/models/customfields.py:688 msgid "Value must be true or false." msgstr "Der Wert muss wahr oder falsch sein." -#: extras/models/customfields.py:696 +#: netbox/extras/models/customfields.py:696 msgid "Date values must be in ISO 8601 format (YYYY-MM-DD)." msgstr "Datumswerte müssen im ISO 8601-Format (YYYY-MM-DD) vorliegen." -#: extras/models/customfields.py:705 +#: netbox/extras/models/customfields.py:705 msgid "Date and time values must be in ISO 8601 format (YYYY-MM-DD HH:MM:SS)." msgstr "" "Datums- und Uhrzeitwerte müssen im ISO 8601-Format (YYYY-MM-DD HH:MM:SS) " "vorliegen." -#: extras/models/customfields.py:712 +#: netbox/extras/models/customfields.py:712 #, python-brace-format msgid "Invalid choice ({value}) for choice set {choiceset}." msgstr "Ungültige Auswahl ({value}) für Auswahlsatz {choiceset}." -#: extras/models/customfields.py:722 +#: netbox/extras/models/customfields.py:722 #, python-brace-format msgid "Invalid choice(s) ({value}) for choice set {choiceset}." msgstr "Ungültige Auswahl (en) ({value}) für Auswahlsatz {choiceset}." -#: extras/models/customfields.py:731 +#: netbox/extras/models/customfields.py:731 #, python-brace-format msgid "Value must be an object ID, not {type}" msgstr "Der Wert muss eine Objekt-ID sein, nicht {type}" -#: extras/models/customfields.py:737 +#: netbox/extras/models/customfields.py:737 #, python-brace-format msgid "Value must be a list of object IDs, not {type}" msgstr "Der Wert muss eine Liste von Objekt-IDs sein, nicht {type}" -#: extras/models/customfields.py:741 +#: netbox/extras/models/customfields.py:741 #, python-brace-format msgid "Found invalid object ID: {id}" msgstr "Ungültige Objekt-ID gefunden: {id}" -#: extras/models/customfields.py:744 +#: netbox/extras/models/customfields.py:744 msgid "Required field cannot be empty." msgstr "Das erforderliche Feld darf nicht leer sein." -#: extras/models/customfields.py:763 +#: netbox/extras/models/customfields.py:763 msgid "Base set of predefined choices (optional)" msgstr "Basissatz vordefinierter Auswahlmöglichkeiten (optional)" -#: extras/models/customfields.py:775 +#: netbox/extras/models/customfields.py:775 msgid "Choices are automatically ordered alphabetically" msgstr "Die Auswahlmöglichkeiten werden automatisch alphabetisch sortiert" -#: extras/models/customfields.py:782 +#: netbox/extras/models/customfields.py:782 msgid "custom field choice set" msgstr "benutzerdefinierter Feldauswahlsatz" -#: extras/models/customfields.py:783 +#: netbox/extras/models/customfields.py:783 msgid "custom field choice sets" msgstr "Benutzerdefinierte Feldoptionen" -#: extras/models/customfields.py:825 +#: netbox/extras/models/customfields.py:825 msgid "Must define base or extra choices." msgstr "Muss Basis- oder zusätzliche Auswahlmöglichkeiten definieren." -#: extras/models/customfields.py:849 +#: netbox/extras/models/customfields.py:849 #, python-brace-format msgid "" "Cannot remove choice {choice} as there are {model} objects which reference " @@ -8077,61 +8672,61 @@ msgstr "" "Auswahl kann nicht entfernt werden {choice} es gibt {model} Objekte, die " "darauf verweisen." -#: extras/models/dashboard.py:18 +#: netbox/extras/models/dashboard.py:18 msgid "layout" msgstr "Layout" -#: extras/models/dashboard.py:22 +#: netbox/extras/models/dashboard.py:22 msgid "config" msgstr "Konfiguration" -#: extras/models/dashboard.py:27 +#: netbox/extras/models/dashboard.py:27 msgid "dashboard" msgstr "Dashboard" -#: extras/models/dashboard.py:28 +#: netbox/extras/models/dashboard.py:28 msgid "dashboards" msgstr "Dashboards" -#: extras/models/models.py:52 +#: netbox/extras/models/models.py:52 msgid "object types" msgstr "Objekttypen" -#: extras/models/models.py:53 +#: netbox/extras/models/models.py:53 msgid "The object(s) to which this rule applies." msgstr "Die Objekte, für die diese Regel gilt." -#: extras/models/models.py:67 +#: netbox/extras/models/models.py:67 msgid "The types of event which will trigger this rule." msgstr "Die Ereignistypen, die diese Regel auslösen." -#: extras/models/models.py:74 +#: netbox/extras/models/models.py:74 msgid "conditions" msgstr "Dienste" -#: extras/models/models.py:77 +#: netbox/extras/models/models.py:77 msgid "" "A set of conditions which determine whether the event will be generated." msgstr "" "Eine Reihe von Bedingungen, die bestimmen, ob das Ereignis generiert wird." -#: extras/models/models.py:85 +#: netbox/extras/models/models.py:85 msgid "action type" msgstr "Aktionstyp" -#: extras/models/models.py:104 +#: netbox/extras/models/models.py:104 msgid "Additional data to pass to the action object" msgstr "Zusätzliche Daten, die an das Aktionsobjekt übergeben werden" -#: extras/models/models.py:116 +#: netbox/extras/models/models.py:116 msgid "event rule" msgstr "Ereignisregel" -#: extras/models/models.py:117 +#: netbox/extras/models/models.py:117 msgid "event rules" msgstr "Ereignisregeln" -#: extras/models/models.py:166 +#: netbox/extras/models/models.py:166 msgid "" "This URL will be called using the HTTP method defined when the webhook is " "called. Jinja2 template processing is supported with the same context as the" @@ -8141,7 +8736,7 @@ msgstr "" "definiert wurde. Die Verarbeitung von Jinja2-Vorlagen wird im gleichen " "Kontext wie der Anforderungstext unterstützt." -#: extras/models/models.py:181 +#: netbox/extras/models/models.py:181 msgid "" "The complete list of official content types is available hier." -#: extras/models/models.py:186 +#: netbox/extras/models/models.py:186 msgid "additional headers" msgstr "zusätzliche Kopfzeilen" -#: extras/models/models.py:189 +#: netbox/extras/models/models.py:189 msgid "" "User-supplied HTTP headers to be sent with the request in addition to the " "HTTP content type. Headers should be defined in the format Name: " @@ -8167,11 +8762,11 @@ msgstr "" "definiert werden Name: Wert. Die Jinja2-Vorlagenverarbeitung " "wird im gleichen Kontext wie der Anforderungstext (unten) unterstützt." -#: extras/models/models.py:195 +#: netbox/extras/models/models.py:195 msgid "body template" msgstr "Body Template" -#: extras/models/models.py:198 +#: netbox/extras/models/models.py:198 msgid "" "Jinja2 template for a custom request body. If blank, a JSON object " "representing the change will be included. Available context data includes: " @@ -8184,11 +8779,11 @@ msgstr "" "Modell, Zeitstempel, Nutzername, " "Anforderungs_ID, und Daten." -#: extras/models/models.py:204 +#: netbox/extras/models/models.py:204 msgid "secret" msgstr "Geheimer Schlüssel" -#: extras/models/models.py:208 +#: netbox/extras/models/models.py:208 msgid "" "When provided, the request will include a X-Hook-Signature " "header containing a HMAC hex digest of the payload body using the secret as " @@ -8199,16 +8794,16 @@ msgstr "" "Geheimnis als Schlüssel verwendet wird. Das Geheimnis wird in der Anfrage " "nicht übertragen." -#: extras/models/models.py:215 +#: netbox/extras/models/models.py:215 msgid "Enable SSL certificate verification. Disable with caution!" msgstr "" "Aktivieren Sie die SSL-Zertifikatsüberprüfung. Mit Vorsicht deaktivieren!" -#: extras/models/models.py:221 templates/extras/webhook.html:51 +#: netbox/extras/models/models.py:221 netbox/templates/extras/webhook.html:51 msgid "CA File Path" msgstr "CA-Dateipfad" -#: extras/models/models.py:223 +#: netbox/extras/models/models.py:223 msgid "" "The specific CA certificate file to use for SSL verification. Leave blank to" " use the system defaults." @@ -8217,65 +8812,65 @@ msgstr "" "werden soll. Lassen Sie das Feld leer, um die Systemstandardwerte zu " "verwenden." -#: extras/models/models.py:234 +#: netbox/extras/models/models.py:234 msgid "webhook" msgstr "Webhook" -#: extras/models/models.py:235 +#: netbox/extras/models/models.py:235 msgid "webhooks" msgstr "Webhooks" -#: extras/models/models.py:253 +#: netbox/extras/models/models.py:253 msgid "Do not specify a CA certificate file if SSL verification is disabled." msgstr "" "Geben Sie keine CA-Zertifikatsdatei an, wenn die SSL-Überprüfung deaktiviert" " ist." -#: extras/models/models.py:293 +#: netbox/extras/models/models.py:293 msgid "The object type(s) to which this link applies." msgstr "Die Objekttyp(en), für die dieser Link gilt." -#: extras/models/models.py:305 +#: netbox/extras/models/models.py:305 msgid "link text" msgstr "Linktext" -#: extras/models/models.py:306 +#: netbox/extras/models/models.py:306 msgid "Jinja2 template code for link text" msgstr "Jinja2-Vorlagencode für Linktext" -#: extras/models/models.py:309 +#: netbox/extras/models/models.py:309 msgid "link URL" msgstr "Link-URL" -#: extras/models/models.py:310 +#: netbox/extras/models/models.py:310 msgid "Jinja2 template code for link URL" msgstr "Jinja2-Vorlagencode für Link-URL" -#: extras/models/models.py:320 +#: netbox/extras/models/models.py:320 msgid "Links with the same group will appear as a dropdown menu" msgstr "Links mit derselben Gruppe werden als Drop-down-Menü angezeigt" -#: extras/models/models.py:330 +#: netbox/extras/models/models.py:330 msgid "new window" msgstr "neues Fenster" -#: extras/models/models.py:332 +#: netbox/extras/models/models.py:332 msgid "Force link to open in a new window" msgstr "Link erzwingen, in einem neuen Fenster zu öffnen" -#: extras/models/models.py:341 +#: netbox/extras/models/models.py:341 msgid "custom link" msgstr "benutzerdefinierter Link" -#: extras/models/models.py:342 +#: netbox/extras/models/models.py:342 msgid "custom links" msgstr "benutzerdefinierte Links" -#: extras/models/models.py:389 +#: netbox/extras/models/models.py:389 msgid "The object type(s) to which this template applies." msgstr "Die Objekttyp(en), für die diese Vorlage gilt." -#: extras/models/models.py:402 +#: netbox/extras/models/models.py:402 msgid "" "Jinja2 template code. The list of objects being exported is passed as a " "context variable named queryset." @@ -8283,1092 +8878,1168 @@ msgstr "" "Jinja2-Vorlagencode. Die Liste der exportierten Objekte wird als " "Kontextvariable mit dem Namen übergeben Abfragesatz." -#: extras/models/models.py:410 +#: netbox/extras/models/models.py:410 msgid "Defaults to text/plain; charset=utf-8" msgstr "Die Standardeinstellung ist text/plain; charset=utf-8" -#: extras/models/models.py:413 +#: netbox/extras/models/models.py:413 msgid "file extension" msgstr "Dateierweiterung" -#: extras/models/models.py:416 +#: netbox/extras/models/models.py:416 msgid "Extension to append to the rendered filename" msgstr "Erweiterung, die an den gerenderten Dateinamen angehängt werden soll" -#: extras/models/models.py:419 +#: netbox/extras/models/models.py:419 msgid "as attachment" msgstr "als Anlage" -#: extras/models/models.py:421 +#: netbox/extras/models/models.py:421 msgid "Download file as attachment" msgstr "Datei als Anlage herunterladen" -#: extras/models/models.py:430 +#: netbox/extras/models/models.py:430 msgid "export template" msgstr "Vorlage exportieren" -#: extras/models/models.py:431 +#: netbox/extras/models/models.py:431 msgid "export templates" msgstr "Exportvorlagen" -#: extras/models/models.py:448 +#: netbox/extras/models/models.py:448 #, python-brace-format msgid "\"{name}\" is a reserved name. Please choose a different name." msgstr "" "„{name}\"ist ein reservierter Name. Bitte wählen Sie einen anderen Namen." -#: extras/models/models.py:498 +#: netbox/extras/models/models.py:498 msgid "The object type(s) to which this filter applies." msgstr "Der/Die Objekttyp (en), für die dieser Filter gilt." -#: extras/models/models.py:530 +#: netbox/extras/models/models.py:530 msgid "shared" msgstr "geteilt" -#: extras/models/models.py:543 +#: netbox/extras/models/models.py:543 msgid "saved filter" msgstr "gespeicherter Filter" -#: extras/models/models.py:544 +#: netbox/extras/models/models.py:544 msgid "saved filters" msgstr "gespeicherte Filter" -#: extras/models/models.py:562 +#: netbox/extras/models/models.py:562 msgid "Filter parameters must be stored as a dictionary of keyword arguments." msgstr "" "Filterparameter müssen als Wörterbuch mit Schlüsselwortargumenten " "gespeichert werden." -#: extras/models/models.py:590 +#: netbox/extras/models/models.py:590 msgid "image height" msgstr "Höhe des Bildes" -#: extras/models/models.py:593 +#: netbox/extras/models/models.py:593 msgid "image width" msgstr "Breite des Bildes" -#: extras/models/models.py:610 +#: netbox/extras/models/models.py:610 msgid "image attachment" msgstr "Bildanhang" -#: extras/models/models.py:611 +#: netbox/extras/models/models.py:611 msgid "image attachments" msgstr "Bildanhänge" -#: extras/models/models.py:625 +#: netbox/extras/models/models.py:625 #, python-brace-format msgid "Image attachments cannot be assigned to this object type ({type})." msgstr "Bildanhänge können diesem Objekttyp nicht zugewiesen werden ({type})." -#: extras/models/models.py:688 +#: netbox/extras/models/models.py:688 msgid "kind" msgstr "Typ" -#: extras/models/models.py:702 +#: netbox/extras/models/models.py:702 msgid "journal entry" msgstr "Journaleintrag" -#: extras/models/models.py:703 +#: netbox/extras/models/models.py:703 msgid "journal entries" msgstr "Journaleinträge" -#: extras/models/models.py:718 +#: netbox/extras/models/models.py:718 #, python-brace-format msgid "Journaling is not supported for this object type ({type})." msgstr "Journaling wird für diesen Objekttyp nicht unterstützt ({type})." -#: extras/models/models.py:760 +#: netbox/extras/models/models.py:760 msgid "bookmark" msgstr "Lesezeichen" -#: extras/models/models.py:761 +#: netbox/extras/models/models.py:761 msgid "bookmarks" msgstr "Lesezeichen" -#: extras/models/models.py:774 +#: netbox/extras/models/models.py:774 #, python-brace-format msgid "Bookmarks cannot be assigned to this object type ({type})." msgstr "Diesem Objekttyp können keine Lesezeichen zugewiesen werden ({type})." -#: extras/models/notifications.py:43 +#: netbox/extras/models/notifications.py:43 msgid "read" msgstr "lesen" -#: extras/models/notifications.py:66 +#: netbox/extras/models/notifications.py:66 msgid "event" msgstr "Ereignis" -#: extras/models/notifications.py:84 +#: netbox/extras/models/notifications.py:84 msgid "notification" msgstr "Benachrichtigung" -#: extras/models/notifications.py:85 +#: netbox/extras/models/notifications.py:85 msgid "notifications" msgstr "Benachrichtigungen" -#: extras/models/notifications.py:99 extras/models/notifications.py:234 +#: netbox/extras/models/notifications.py:99 +#: netbox/extras/models/notifications.py:234 #, python-brace-format msgid "Objects of this type ({type}) do not support notifications." msgstr "Objekte dieses Typs ({type}) unterstützen keine Benachrichtigungen." -#: extras/models/notifications.py:137 users/models/users.py:58 -#: users/models/users.py:77 +#: netbox/extras/models/notifications.py:137 netbox/users/models/users.py:58 +#: netbox/users/models/users.py:77 msgid "groups" msgstr "Gruppen" -#: extras/models/notifications.py:143 users/models/users.py:93 +#: netbox/extras/models/notifications.py:143 netbox/users/models/users.py:93 msgid "users" msgstr "Benutzer" -#: extras/models/notifications.py:152 +#: netbox/extras/models/notifications.py:152 msgid "notification group" msgstr "Benachrichtigungsgruppe" -#: extras/models/notifications.py:153 +#: netbox/extras/models/notifications.py:153 msgid "notification groups" msgstr "Benachrichtigungsgruppen" -#: extras/models/notifications.py:217 +#: netbox/extras/models/notifications.py:217 msgid "subscription" msgstr "Abonnement" -#: extras/models/notifications.py:218 +#: netbox/extras/models/notifications.py:218 msgid "subscriptions" msgstr "Abonnements" -#: extras/models/scripts.py:42 +#: netbox/extras/models/scripts.py:42 msgid "is executable" msgstr "ist ausführbar" -#: extras/models/scripts.py:64 +#: netbox/extras/models/scripts.py:64 msgid "script" msgstr "Skript" -#: extras/models/scripts.py:65 +#: netbox/extras/models/scripts.py:65 msgid "scripts" msgstr "Skripte" -#: extras/models/scripts.py:111 +#: netbox/extras/models/scripts.py:111 msgid "script module" msgstr "Skriptmodul" -#: extras/models/scripts.py:112 +#: netbox/extras/models/scripts.py:112 msgid "script modules" msgstr "Skriptmodule" -#: extras/models/search.py:22 +#: netbox/extras/models/search.py:22 msgid "timestamp" msgstr "Zeitstempel" -#: extras/models/search.py:37 +#: netbox/extras/models/search.py:37 msgid "field" msgstr "Feld" -#: extras/models/search.py:45 +#: netbox/extras/models/search.py:45 msgid "value" msgstr "Wert" -#: extras/models/search.py:56 +#: netbox/extras/models/search.py:56 msgid "cached value" msgstr "zwischengespeicherter Wert" -#: extras/models/search.py:57 +#: netbox/extras/models/search.py:57 msgid "cached values" msgstr "zwischengespeicherte Werte" -#: extras/models/staging.py:44 +#: netbox/extras/models/staging.py:44 msgid "branch" msgstr "Branch" -#: extras/models/staging.py:45 +#: netbox/extras/models/staging.py:45 msgid "branches" msgstr "Branches" -#: extras/models/staging.py:97 +#: netbox/extras/models/staging.py:97 msgid "staged change" msgstr "vorbereitete Änderung" -#: extras/models/staging.py:98 +#: netbox/extras/models/staging.py:98 msgid "staged changes" msgstr "vorbereitete Änderungen" -#: extras/models/tags.py:40 +#: netbox/extras/models/tags.py:40 msgid "The object type(s) to which this tag can be applied." msgstr "Die Objekttyp (en), auf die dieses Tag angewendet werden kann." -#: extras/models/tags.py:49 +#: netbox/extras/models/tags.py:49 msgid "tag" msgstr "Tag" -#: extras/models/tags.py:50 +#: netbox/extras/models/tags.py:50 msgid "tags" msgstr "Tags" -#: extras/models/tags.py:78 +#: netbox/extras/models/tags.py:78 msgid "tagged item" msgstr "markierter Artikel" -#: extras/models/tags.py:79 +#: netbox/extras/models/tags.py:79 msgid "tagged items" msgstr "markierte Artikel" -#: extras/scripts.py:429 +#: netbox/extras/scripts.py:429 msgid "Script Data" msgstr "Skriptdaten" -#: extras/scripts.py:433 +#: netbox/extras/scripts.py:433 msgid "Script Execution Parameters" msgstr "Parameter für die Skriptausführung" -#: extras/tables/columns.py:12 templates/htmx/notifications.html:18 +#: netbox/extras/tables/columns.py:12 +#: netbox/templates/htmx/notifications.html:18 msgid "Dismiss" msgstr "Abweisen" -#: extras/tables/tables.py:62 extras/tables/tables.py:159 -#: extras/tables/tables.py:184 extras/tables/tables.py:250 -#: extras/tables/tables.py:276 extras/tables/tables.py:412 -#: extras/tables/tables.py:446 templates/extras/customfield.html:105 -#: templates/extras/eventrule.html:27 templates/users/objectpermission.html:64 -#: users/tables.py:80 +#: netbox/extras/tables/tables.py:62 netbox/extras/tables/tables.py:159 +#: netbox/extras/tables/tables.py:184 netbox/extras/tables/tables.py:250 +#: netbox/extras/tables/tables.py:276 netbox/extras/tables/tables.py:412 +#: netbox/extras/tables/tables.py:446 +#: netbox/templates/extras/customfield.html:105 +#: netbox/templates/extras/eventrule.html:27 +#: netbox/templates/users/objectpermission.html:64 netbox/users/tables.py:80 msgid "Object Types" msgstr "Objekttypen" -#: extras/tables/tables.py:69 +#: netbox/extras/tables/tables.py:69 msgid "Validate Uniqueness" msgstr "Überprüfen Sie die Eindeutigkeit" -#: extras/tables/tables.py:73 +#: netbox/extras/tables/tables.py:73 msgid "Visible" msgstr "Sichtbar" -#: extras/tables/tables.py:76 +#: netbox/extras/tables/tables.py:76 msgid "Editable" msgstr "Editierbar" -#: extras/tables/tables.py:82 +#: netbox/extras/tables/tables.py:82 msgid "Related Object Type" msgstr "Verwandter Objekttyp" -#: extras/tables/tables.py:86 templates/extras/customfield.html:51 +#: netbox/extras/tables/tables.py:86 +#: netbox/templates/extras/customfield.html:51 msgid "Choice Set" msgstr "Auswahlset" -#: extras/tables/tables.py:94 +#: netbox/extras/tables/tables.py:94 msgid "Is Cloneable" msgstr "Ist klonbar" -#: extras/tables/tables.py:98 templates/extras/customfield.html:118 +#: netbox/extras/tables/tables.py:98 +#: netbox/templates/extras/customfield.html:118 msgid "Minimum Value" msgstr "Minimaler Wert" -#: extras/tables/tables.py:101 templates/extras/customfield.html:122 +#: netbox/extras/tables/tables.py:101 +#: netbox/templates/extras/customfield.html:122 msgid "Maximum Value" msgstr "Maximaler Wert" -#: extras/tables/tables.py:104 +#: netbox/extras/tables/tables.py:104 msgid "Validation Regex" msgstr "Überprüfung Regex" -#: extras/tables/tables.py:137 +#: netbox/extras/tables/tables.py:137 msgid "Count" msgstr "Anzahl" -#: extras/tables/tables.py:140 +#: netbox/extras/tables/tables.py:140 msgid "Order Alphabetically" msgstr "Alphabetisch sortieren" -#: extras/tables/tables.py:165 templates/extras/customlink.html:33 +#: netbox/extras/tables/tables.py:165 +#: netbox/templates/extras/customlink.html:33 msgid "New Window" msgstr "Neues Fenster" -#: extras/tables/tables.py:187 +#: netbox/extras/tables/tables.py:187 msgid "As Attachment" msgstr "Als Anlage" -#: extras/tables/tables.py:195 extras/tables/tables.py:487 -#: extras/tables/tables.py:522 templates/core/datafile.html:24 -#: templates/dcim/device/render_config.html:22 -#: templates/extras/configcontext.html:39 -#: templates/extras/configtemplate.html:31 -#: templates/extras/exporttemplate.html:45 -#: templates/generic/bulk_import.html:35 -#: templates/virtualization/virtualmachine/render_config.html:22 +#: netbox/extras/tables/tables.py: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/generic/bulk_import.html:35 +#: netbox/templates/virtualization/virtualmachine/render_config.html:22 msgid "Data File" msgstr "Datendatei" -#: extras/tables/tables.py:200 extras/tables/tables.py:499 -#: extras/tables/tables.py:527 +#: netbox/extras/tables/tables.py:200 netbox/extras/tables/tables.py:499 +#: netbox/extras/tables/tables.py:527 msgid "Synced" msgstr "Synchronisiert" -#: extras/tables/tables.py:227 +#: netbox/extras/tables/tables.py:227 msgid "Image" msgstr "Bild" -#: extras/tables/tables.py:232 +#: netbox/extras/tables/tables.py:232 msgid "Size (Bytes)" msgstr "Größe (Byte)" -#: extras/tables/tables.py:339 +#: netbox/extras/tables/tables.py:339 msgid "Read" msgstr "Lesen" -#: extras/tables/tables.py:382 +#: netbox/extras/tables/tables.py:382 msgid "SSL Validation" msgstr "SSL-Validierung" -#: extras/tables/tables.py:418 templates/extras/eventrule.html:37 +#: netbox/extras/tables/tables.py:418 +#: netbox/templates/extras/eventrule.html:37 msgid "Event Types" msgstr "Ereignistypen" -#: extras/tables/tables.py:535 netbox/navigation/menu.py:77 -#: templates/dcim/devicerole.html:8 +#: netbox/extras/tables/tables.py:535 netbox/netbox/navigation/menu.py:77 +#: netbox/templates/dcim/devicerole.html:8 msgid "Device Roles" msgstr "Geräterollen" -#: extras/tables/tables.py:587 +#: netbox/extras/tables/tables.py:587 msgid "Comments (Short)" msgstr "Kommentare (Kurz)" -#: extras/tables/tables.py:606 extras/tables/tables.py:640 +#: netbox/extras/tables/tables.py:606 netbox/extras/tables/tables.py:640 msgid "Line" msgstr "Linie" -#: extras/tables/tables.py:613 extras/tables/tables.py:650 +#: netbox/extras/tables/tables.py:613 netbox/extras/tables/tables.py:650 msgid "Level" msgstr "Stufe" -#: extras/tables/tables.py:619 extras/tables/tables.py:659 +#: netbox/extras/tables/tables.py:619 netbox/extras/tables/tables.py:659 msgid "Message" msgstr "Nachricht" -#: extras/tables/tables.py:643 +#: netbox/extras/tables/tables.py:643 msgid "Method" msgstr "Methode" -#: extras/validators.py:15 +#: netbox/extras/validators.py:15 #, python-format msgid "Ensure this value is equal to %(limit_value)s." msgstr "Stellen Sie sicher, dass dieser Wert gleich ist %(limit_value)s." -#: extras/validators.py:26 +#: netbox/extras/validators.py:26 #, python-format msgid "Ensure this value does not equal %(limit_value)s." msgstr "" "Stellen Sie sicher, dass dieser Wert nicht gleich ist %(limit_value)s." -#: extras/validators.py:37 +#: netbox/extras/validators.py:37 msgid "This field must be empty." msgstr "Dieses Feld muss leer sein." -#: extras/validators.py:52 +#: netbox/extras/validators.py:52 msgid "This field must not be empty." msgstr "Dieses Feld darf nicht leer sein." -#: extras/validators.py:94 +#: netbox/extras/validators.py:94 msgid "Validation rules must be passed as a dictionary" msgstr "Validierungsregeln müssen als Wörterbuch übergeben werden" -#: extras/validators.py:119 +#: netbox/extras/validators.py:119 #, python-brace-format msgid "Custom validation failed for {attribute}: {exception}" msgstr "" "Die benutzerdefinierte Überprüfung ist fehlgeschlagen für {attribute}: " "{exception}" -#: extras/validators.py:133 +#: netbox/extras/validators.py:133 #, python-brace-format msgid "Invalid attribute \"{name}\" for request" -msgstr "Ungültiges Attribut“{name}„zur Anfrage" +msgstr "Ungültiges Attribut \"{name}\" zur Anfrage" -#: extras/validators.py:150 +#: netbox/extras/validators.py:150 #, python-brace-format msgid "Invalid attribute \"{name}\" for {model}" -msgstr "Ungültiges Attribut“{name}„für {model}" +msgstr "Ungültiges Attribut “{name}\" für {model}" -#: extras/views.py:960 +#: netbox/extras/views.py:960 msgid "Your dashboard has been reset." msgstr "Ihr Dashboard wurde zurückgesetzt." -#: extras/views.py:1006 +#: netbox/extras/views.py:1006 msgid "Added widget: " msgstr "Hinzugefügtes Widget:" -#: extras/views.py:1047 +#: netbox/extras/views.py:1047 msgid "Updated widget: " msgstr "Aktualisiertes Widget: " -#: extras/views.py:1083 +#: netbox/extras/views.py:1083 msgid "Deleted widget: " msgstr "Gelöschtes Widget: " -#: extras/views.py:1085 +#: netbox/extras/views.py:1085 msgid "Error deleting widget: " msgstr "Fehler beim Löschen des Widgets: " -#: extras/views.py:1172 +#: netbox/extras/views.py:1175 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." -#: ipam/api/field_serializers.py:17 +#: netbox/ipam/api/field_serializers.py:17 msgid "Enter a valid IPv4 or IPv6 address with optional mask." msgstr "" "Geben Sie eine gültige IPv4- oder IPv6-Adresse mit optionaler Maske ein." -#: ipam/api/field_serializers.py:24 +#: netbox/ipam/api/field_serializers.py:24 #, python-brace-format msgid "Invalid IP address format: {data}" msgstr "Ungültiges IP-Adressformat: {data}" -#: ipam/api/field_serializers.py:37 +#: netbox/ipam/api/field_serializers.py:37 msgid "Enter a valid IPv4 or IPv6 prefix and mask in CIDR notation." msgstr "" "Geben Sie ein gültiges IPv4- oder IPv6-Präfix und eine Maske in CIDR-" "Notation ein." -#: ipam/api/field_serializers.py:44 +#: netbox/ipam/api/field_serializers.py:44 #, python-brace-format msgid "Invalid IP prefix format: {data}" msgstr "Ungültiges IP-Präfixformat: {data}" -#: ipam/api/views.py:358 +#: netbox/ipam/api/views.py:358 msgid "" "Insufficient space is available to accommodate the requested prefix size(s)" msgstr "" "Für die angeforderte (n) Präfixgröße (n) ist nicht genügend Speicherplatz " "verfügbar" -#: ipam/choices.py:30 +#: netbox/ipam/choices.py:30 msgid "Container" msgstr "Container" -#: ipam/choices.py:72 +#: netbox/ipam/choices.py:72 msgid "DHCP" msgstr "DHCP" -#: ipam/choices.py:73 +#: netbox/ipam/choices.py:73 msgid "SLAAC" msgstr "SLAAC" -#: ipam/choices.py:89 +#: netbox/ipam/choices.py:89 msgid "Loopback" msgstr "Loopback" -#: ipam/choices.py:91 +#: netbox/ipam/choices.py:91 msgid "Anycast" msgstr "Anycast" -#: ipam/choices.py:115 +#: netbox/ipam/choices.py:115 msgid "Standard" msgstr "Standard" -#: ipam/choices.py:120 +#: netbox/ipam/choices.py:120 msgid "CheckPoint" msgstr "Checkpoint" -#: ipam/choices.py:123 +#: netbox/ipam/choices.py:123 msgid "Cisco" msgstr "Cisco" -#: ipam/choices.py:137 +#: netbox/ipam/choices.py:137 msgid "Plaintext" msgstr "Klartext" -#: ipam/fields.py:36 +#: netbox/ipam/fields.py:36 #, python-brace-format msgid "Invalid IP address format: {address}" msgstr "Ungültiges IP-Adressformat: {address}" -#: ipam/filtersets.py:48 vpn/filtersets.py:304 +#: netbox/ipam/filtersets.py:48 netbox/vpn/filtersets.py:304 msgid "Import target" msgstr "Ziel importieren" -#: ipam/filtersets.py:54 vpn/filtersets.py:310 +#: netbox/ipam/filtersets.py:54 netbox/vpn/filtersets.py:310 msgid "Import target (name)" msgstr "Importziel (Name)" -#: ipam/filtersets.py:59 vpn/filtersets.py:315 +#: netbox/ipam/filtersets.py:59 netbox/vpn/filtersets.py:315 msgid "Export target" msgstr "Ziel exportieren" -#: ipam/filtersets.py:65 vpn/filtersets.py:321 +#: netbox/ipam/filtersets.py:65 netbox/vpn/filtersets.py:321 msgid "Export target (name)" msgstr "Exportziel (Name)" -#: ipam/filtersets.py:86 +#: netbox/ipam/filtersets.py:86 msgid "Importing VRF" msgstr "VRF importieren" -#: ipam/filtersets.py:92 +#: netbox/ipam/filtersets.py:92 msgid "Import VRF (RD)" msgstr "VRF (RD) importieren" -#: ipam/filtersets.py:97 +#: netbox/ipam/filtersets.py:97 msgid "Exporting VRF" msgstr "VRF exportieren" -#: ipam/filtersets.py:103 +#: netbox/ipam/filtersets.py:103 msgid "Export VRF (RD)" msgstr "VRF (RD) exportieren" -#: ipam/filtersets.py:108 +#: netbox/ipam/filtersets.py:108 msgid "Importing L2VPN" msgstr "L2VPN importieren" -#: ipam/filtersets.py:114 +#: netbox/ipam/filtersets.py:114 msgid "Importing L2VPN (identifier)" msgstr "L2VPN importieren (Identifier)" -#: ipam/filtersets.py:119 +#: netbox/ipam/filtersets.py:119 msgid "Exporting L2VPN" msgstr "L2VPN exportieren" -#: ipam/filtersets.py:125 +#: netbox/ipam/filtersets.py:125 msgid "Exporting L2VPN (identifier)" msgstr "L2VPN exportieren (Identifier)" -#: ipam/filtersets.py:155 ipam/filtersets.py:281 ipam/forms/model_forms.py:229 -#: ipam/tables/ip.py:212 templates/ipam/prefix.html:12 +#: netbox/ipam/filtersets.py:155 netbox/ipam/filtersets.py:281 +#: netbox/ipam/forms/model_forms.py:229 netbox/ipam/tables/ip.py:212 +#: netbox/templates/ipam/prefix.html:12 msgid "Prefix" msgstr "Prefix" -#: ipam/filtersets.py:159 ipam/filtersets.py:198 ipam/filtersets.py:221 +#: netbox/ipam/filtersets.py:159 netbox/ipam/filtersets.py:198 +#: netbox/ipam/filtersets.py:221 msgid "RIR (ID)" msgstr "RIR (ID)" -#: ipam/filtersets.py:165 ipam/filtersets.py:204 ipam/filtersets.py:227 +#: netbox/ipam/filtersets.py:165 netbox/ipam/filtersets.py:204 +#: netbox/ipam/filtersets.py:227 msgid "RIR (slug)" msgstr "RIR (URL-Slug)" -#: ipam/filtersets.py:285 +#: netbox/ipam/filtersets.py:285 msgid "Within prefix" msgstr "Innerhalb des Prefixes" -#: ipam/filtersets.py:289 +#: netbox/ipam/filtersets.py:289 msgid "Within and including prefix" msgstr "Innerhalb und einschließlich Präfix" -#: ipam/filtersets.py:293 +#: netbox/ipam/filtersets.py:293 msgid "Prefixes which contain this prefix or IP" msgstr "Präfixe, die dieses Präfix oder diese IP enthalten" -#: ipam/filtersets.py:304 ipam/filtersets.py:572 ipam/forms/bulk_edit.py:343 -#: ipam/forms/filtersets.py:196 ipam/forms/filtersets.py:331 +#: netbox/ipam/filtersets.py:304 netbox/ipam/filtersets.py:572 +#: netbox/ipam/forms/bulk_edit.py:343 netbox/ipam/forms/filtersets.py:196 +#: netbox/ipam/forms/filtersets.py:331 msgid "Mask length" msgstr "Länge der Maske" -#: ipam/filtersets.py:373 vpn/filtersets.py:427 +#: netbox/ipam/filtersets.py:373 netbox/vpn/filtersets.py:427 msgid "VLAN (ID)" msgstr "VLAN (ID)" -#: ipam/filtersets.py:377 vpn/filtersets.py:422 +#: netbox/ipam/filtersets.py:377 netbox/vpn/filtersets.py:422 msgid "VLAN number (1-4094)" msgstr "VLAN-Nummer (1-4094)" -#: ipam/filtersets.py:471 ipam/filtersets.py:475 ipam/filtersets.py:567 -#: ipam/forms/model_forms.py:463 templates/tenancy/contact.html:53 -#: tenancy/forms/bulk_edit.py:113 +#: netbox/ipam/filtersets.py:471 netbox/ipam/filtersets.py:475 +#: netbox/ipam/filtersets.py:567 netbox/ipam/forms/model_forms.py:496 +#: netbox/templates/tenancy/contact.html:53 +#: netbox/tenancy/forms/bulk_edit.py:113 msgid "Address" msgstr "Adresse" -#: ipam/filtersets.py:479 +#: netbox/ipam/filtersets.py:479 msgid "Ranges which contain this prefix or IP" msgstr "Bereiche, die dieses Präfix oder diese IP enthalten" -#: ipam/filtersets.py:507 ipam/filtersets.py:563 +#: netbox/ipam/filtersets.py:507 netbox/ipam/filtersets.py:563 msgid "Parent prefix" msgstr "Übergeordnetes Präfix" -#: ipam/filtersets.py:616 ipam/filtersets.py:856 ipam/filtersets.py:1131 -#: vpn/filtersets.py:385 +#: netbox/ipam/filtersets.py:616 netbox/ipam/filtersets.py:856 +#: netbox/ipam/filtersets.py:1131 netbox/vpn/filtersets.py:385 msgid "Virtual machine (name)" msgstr "Virtuelle Maschine (Name)" -#: ipam/filtersets.py:621 ipam/filtersets.py:861 ipam/filtersets.py:1125 -#: virtualization/filtersets.py:282 virtualization/filtersets.py:321 -#: vpn/filtersets.py:390 +#: netbox/ipam/filtersets.py:621 netbox/ipam/filtersets.py:861 +#: netbox/ipam/filtersets.py:1125 netbox/virtualization/filtersets.py:282 +#: netbox/virtualization/filtersets.py:321 netbox/vpn/filtersets.py:390 msgid "Virtual machine (ID)" msgstr "Virtuelle Maschine (ID)" -#: ipam/filtersets.py:627 vpn/filtersets.py:97 vpn/filtersets.py:396 +#: netbox/ipam/filtersets.py:627 netbox/vpn/filtersets.py:97 +#: netbox/vpn/filtersets.py:396 msgid "Interface (name)" msgstr "Schnittstelle (Name)" -#: ipam/filtersets.py:638 vpn/filtersets.py:108 vpn/filtersets.py:407 +#: netbox/ipam/filtersets.py:638 netbox/vpn/filtersets.py:108 +#: netbox/vpn/filtersets.py:407 msgid "VM interface (name)" msgstr "VM-Schnittstelle (Name)" -#: ipam/filtersets.py:643 vpn/filtersets.py:113 +#: netbox/ipam/filtersets.py:643 netbox/vpn/filtersets.py:113 msgid "VM interface (ID)" msgstr "VM-Schnittstelle (ID)" -#: ipam/filtersets.py:648 +#: netbox/ipam/filtersets.py:648 msgid "FHRP group (ID)" msgstr "FHRP-Gruppe (ID)" -#: ipam/filtersets.py:652 +#: netbox/ipam/filtersets.py:652 msgid "Is assigned to an interface" msgstr "Ist einer Schnittstelle zugewiesen" -#: ipam/filtersets.py:656 +#: netbox/ipam/filtersets.py:656 msgid "Is assigned" msgstr "Ist zugewiesen" -#: ipam/filtersets.py:668 +#: netbox/ipam/filtersets.py:668 msgid "Service (ID)" msgstr "Dienst (ID)" -#: ipam/filtersets.py:673 +#: netbox/ipam/filtersets.py:673 msgid "NAT inside IP address (ID)" msgstr "NAT innerhalb der IP-Adresse (ID)" -#: ipam/filtersets.py:1041 ipam/forms/bulk_import.py:322 +#: netbox/ipam/filtersets.py:1041 netbox/ipam/forms/bulk_import.py:322 msgid "Assigned interface" msgstr "Zugewiesene Schnittstelle" -#: ipam/filtersets.py:1046 +#: netbox/ipam/filtersets.py:1046 msgid "Assigned VM interface" msgstr "Zugewiesene VM-Schnittstelle" -#: ipam/filtersets.py:1136 +#: netbox/ipam/filtersets.py:1136 msgid "IP address (ID)" msgstr "IP-Adresse (ID)" -#: ipam/filtersets.py:1142 ipam/models/ip.py:788 +#: netbox/ipam/filtersets.py:1142 netbox/ipam/models/ip.py:788 msgid "IP address" msgstr "IP-Adresse" -#: ipam/filtersets.py:1167 +#: netbox/ipam/filtersets.py:1167 msgid "Primary IPv4 (ID)" msgstr "Primäre IPv4 (ID)" -#: ipam/filtersets.py:1172 +#: netbox/ipam/filtersets.py:1172 msgid "Primary IPv6 (ID)" msgstr "Primäre IPv6 (ID)" -#: ipam/formfields.py:14 +#: netbox/ipam/formfields.py:14 msgid "Enter a valid IPv4 or IPv6 address (without a mask)." msgstr "Geben Sie eine gültige IPv4- oder IPv6-Adresse (ohne Maske) ein." -#: ipam/formfields.py:32 +#: netbox/ipam/formfields.py:32 #, python-brace-format msgid "Invalid IPv4/IPv6 address format: {address}" msgstr "Ungültiges IPv4/IPv6-Adressformat: {address}" -#: ipam/formfields.py:37 +#: netbox/ipam/formfields.py:37 msgid "This field requires an IP address without a mask." msgstr "Dieses Feld erfordert eine IP-Adresse ohne Maske." -#: ipam/formfields.py:39 ipam/formfields.py:61 +#: netbox/ipam/formfields.py:39 netbox/ipam/formfields.py:61 msgid "Please specify a valid IPv4 or IPv6 address." msgstr "Bitte geben Sie eine gültige IPv4- oder IPv6-Adresse an." -#: ipam/formfields.py:44 +#: netbox/ipam/formfields.py:44 msgid "Enter a valid IPv4 or IPv6 address (with CIDR mask)." msgstr "Geben Sie eine gültige IPv4- oder IPv6-Adresse (mit CIDR-Maske) ein." -#: ipam/formfields.py:56 +#: netbox/ipam/formfields.py:56 msgid "CIDR mask (e.g. /24) is required." msgstr "Eine CIDR-Maske (z. B. /24) ist erforderlich." -#: ipam/forms/bulk_create.py:13 +#: netbox/ipam/forms/bulk_create.py:13 msgid "Address pattern" msgstr "Adressmuster" -#: ipam/forms/bulk_edit.py:50 +#: netbox/ipam/forms/bulk_edit.py:50 msgid "Enforce unique space" msgstr "Erzwingen Sie einzigartigen Speicherplatz" -#: ipam/forms/bulk_edit.py:88 +#: netbox/ipam/forms/bulk_edit.py:88 msgid "Is private" msgstr "Ist privat" -#: ipam/forms/bulk_edit.py:109 ipam/forms/bulk_edit.py:138 -#: ipam/forms/bulk_edit.py:163 ipam/forms/bulk_import.py:89 -#: ipam/forms/bulk_import.py:109 ipam/forms/bulk_import.py:129 -#: ipam/forms/filtersets.py:110 ipam/forms/filtersets.py:125 -#: ipam/forms/filtersets.py:148 ipam/forms/model_forms.py:96 -#: ipam/forms/model_forms.py:109 ipam/forms/model_forms.py:131 -#: ipam/forms/model_forms.py:149 ipam/models/asns.py:31 -#: ipam/models/asns.py:103 ipam/models/ip.py:71 ipam/models/ip.py:90 -#: ipam/tables/asn.py:20 ipam/tables/asn.py:45 -#: templates/ipam/aggregate.html:18 templates/ipam/asn.html:27 -#: templates/ipam/asnrange.html:19 templates/ipam/rir.html:19 +#: netbox/ipam/forms/bulk_edit.py: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/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" -#: ipam/forms/bulk_edit.py:171 +#: netbox/ipam/forms/bulk_edit.py:171 msgid "Date added" msgstr "hinzugefügt am" -#: ipam/forms/bulk_edit.py:229 ipam/forms/model_forms.py:586 -#: ipam/forms/model_forms.py:633 ipam/tables/ip.py:251 -#: templates/ipam/vlan_edit.html:37 templates/ipam/vlangroup.html:27 +#: 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/templates/ipam/vlangroup.html:27 msgid "VLAN Group" msgstr "VLAN-Gruppe" -#: ipam/forms/bulk_edit.py:234 ipam/forms/bulk_import.py:185 -#: ipam/forms/filtersets.py:256 ipam/forms/model_forms.py:218 -#: ipam/models/vlans.py:234 ipam/tables/ip.py:255 -#: templates/ipam/prefix.html:60 templates/ipam/vlan.html:12 -#: templates/ipam/vlan/base.html:6 templates/ipam/vlan_edit.html:10 -#: templates/wireless/wirelesslan.html:30 vpn/forms/bulk_import.py:304 -#: vpn/forms/filtersets.py:284 vpn/forms/model_forms.py:433 -#: vpn/forms/model_forms.py:452 wireless/forms/bulk_edit.py:55 -#: wireless/forms/bulk_import.py:48 wireless/forms/model_forms.py:48 -#: wireless/models.py:102 +#: 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/templates/ipam/vlan/base.html:6 +#: netbox/templates/ipam/vlan_edit.html:10 +#: netbox/templates/wireless/wirelesslan.html:30 +#: netbox/vpn/forms/bulk_import.py:304 netbox/vpn/forms/filtersets.py:284 +#: netbox/vpn/forms/model_forms.py:433 netbox/vpn/forms/model_forms.py:452 +#: netbox/wireless/forms/bulk_edit.py:55 +#: netbox/wireless/forms/bulk_import.py:48 +#: netbox/wireless/forms/model_forms.py:48 netbox/wireless/models.py:102 msgid "VLAN" msgstr "VLAN" -#: ipam/forms/bulk_edit.py:245 +#: netbox/ipam/forms/bulk_edit.py:245 msgid "Prefix length" msgstr "Länge des Prefixes" -#: ipam/forms/bulk_edit.py:268 ipam/forms/filtersets.py:241 -#: templates/ipam/prefix.html:85 +#: netbox/ipam/forms/bulk_edit.py:268 netbox/ipam/forms/filtersets.py:241 +#: netbox/templates/ipam/prefix.html:85 msgid "Is a pool" msgstr "Ist ein Pool" -#: ipam/forms/bulk_edit.py:273 ipam/forms/bulk_edit.py:318 -#: ipam/forms/filtersets.py:248 ipam/forms/filtersets.py:293 -#: ipam/models/ip.py:272 ipam/models/ip.py:539 +#: netbox/ipam/forms/bulk_edit.py: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 msgid "Treat as fully utilized" msgstr "Als voll ausgelastet behandeln" -#: ipam/forms/bulk_edit.py:287 ipam/forms/filtersets.py:171 +#: netbox/ipam/forms/bulk_edit.py:287 netbox/ipam/forms/filtersets.py:171 msgid "VLAN Assignment" msgstr "VLAN-Zuweisung" -#: ipam/forms/bulk_edit.py:366 ipam/models/ip.py:772 +#: netbox/ipam/forms/bulk_edit.py:366 netbox/ipam/models/ip.py:772 msgid "DNS name" msgstr "DNS-Name" -#: ipam/forms/bulk_edit.py:387 ipam/forms/bulk_edit.py:534 -#: ipam/forms/bulk_import.py:394 ipam/forms/bulk_import.py:469 -#: ipam/forms/bulk_import.py:495 ipam/forms/filtersets.py:390 -#: ipam/forms/filtersets.py:530 templates/ipam/fhrpgroup.html:22 -#: templates/ipam/inc/panels/fhrp_groups.html:24 -#: templates/ipam/service.html:32 templates/ipam/servicetemplate.html:19 +#: netbox/ipam/forms/bulk_edit.py: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/templates/ipam/inc/panels/fhrp_groups.html:24 +#: netbox/templates/ipam/service.html:32 +#: netbox/templates/ipam/servicetemplate.html:19 msgid "Protocol" msgstr "Protokoll" -#: ipam/forms/bulk_edit.py:394 ipam/forms/filtersets.py:397 -#: ipam/tables/fhrp.py:22 templates/ipam/fhrpgroup.html:26 +#: netbox/ipam/forms/bulk_edit.py:394 netbox/ipam/forms/filtersets.py:397 +#: netbox/ipam/tables/fhrp.py:22 netbox/templates/ipam/fhrpgroup.html:26 msgid "Group ID" msgstr "Gruppen-ID" -#: ipam/forms/bulk_edit.py:399 ipam/forms/filtersets.py:402 -#: wireless/forms/bulk_edit.py:68 wireless/forms/bulk_edit.py:115 -#: wireless/forms/bulk_import.py:62 wireless/forms/bulk_import.py:65 -#: wireless/forms/bulk_import.py:104 wireless/forms/bulk_import.py:107 -#: wireless/forms/filtersets.py:54 wireless/forms/filtersets.py:88 +#: netbox/ipam/forms/bulk_edit.py: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 msgid "Authentication type" msgstr "Typ der Authentifizierung" -#: ipam/forms/bulk_edit.py:404 ipam/forms/filtersets.py:406 +#: netbox/ipam/forms/bulk_edit.py:404 netbox/ipam/forms/filtersets.py:406 msgid "Authentication key" msgstr "Authentifizierungsschlüssel" -#: ipam/forms/bulk_edit.py:421 ipam/forms/filtersets.py:383 -#: ipam/forms/model_forms.py:474 netbox/navigation/menu.py:386 -#: templates/ipam/fhrpgroup.html:49 -#: templates/wireless/inc/authentication_attrs.html:5 -#: wireless/forms/bulk_edit.py:91 wireless/forms/bulk_edit.py:149 -#: wireless/forms/filtersets.py:36 wireless/forms/filtersets.py:76 -#: wireless/forms/model_forms.py:55 wireless/forms/model_forms.py:171 +#: 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/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 msgid "Authentication" msgstr "Authentifizierung" -#: ipam/forms/bulk_edit.py:436 ipam/forms/model_forms.py:575 +#: netbox/ipam/forms/bulk_edit.py:436 netbox/ipam/forms/model_forms.py:608 msgid "Scope type" msgstr "Art des Geltungsbereichs" -#: ipam/forms/bulk_edit.py:439 ipam/forms/bulk_edit.py:453 -#: ipam/forms/model_forms.py:578 ipam/forms/model_forms.py:588 -#: ipam/tables/vlans.py:71 templates/ipam/vlangroup.html:38 +#: 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" -#: ipam/forms/bulk_edit.py:446 ipam/models/vlans.py:60 +#: netbox/ipam/forms/bulk_edit.py:446 netbox/ipam/models/vlans.py:60 msgid "VLAN ID ranges" msgstr "VLAN-ID-Bereiche" -#: ipam/forms/bulk_edit.py:525 +#: netbox/ipam/forms/bulk_edit.py:525 msgid "Site & Group" msgstr "Standort und Gruppe" -#: ipam/forms/bulk_edit.py:539 ipam/forms/model_forms.py:659 -#: ipam/forms/model_forms.py:691 ipam/tables/services.py:19 -#: ipam/tables/services.py:49 templates/ipam/service.html:36 -#: templates/ipam/servicetemplate.html:23 +#: netbox/ipam/forms/bulk_edit.py:539 netbox/ipam/forms/model_forms.py:692 +#: netbox/ipam/forms/model_forms.py:724 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" -#: ipam/forms/bulk_import.py:48 +#: netbox/ipam/forms/bulk_import.py:48 msgid "Import route targets" msgstr "Routenziele importieren" -#: ipam/forms/bulk_import.py:54 +#: netbox/ipam/forms/bulk_import.py:54 msgid "Export route targets" msgstr "Routenziele exportieren" -#: ipam/forms/bulk_import.py:92 ipam/forms/bulk_import.py:112 -#: ipam/forms/bulk_import.py:132 +#: netbox/ipam/forms/bulk_import.py:92 netbox/ipam/forms/bulk_import.py:112 +#: netbox/ipam/forms/bulk_import.py:132 msgid "Assigned RIR" msgstr "Zugewiesenes RIR" -#: ipam/forms/bulk_import.py:182 +#: netbox/ipam/forms/bulk_import.py:182 msgid "VLAN's group (if any)" msgstr "VLAN-Gruppe (falls vorhanden)" -#: ipam/forms/bulk_import.py:308 +#: netbox/ipam/forms/bulk_import.py:308 msgid "Parent device of assigned interface (if any)" msgstr "Übergeordnetes Gerät der zugewiesenen Schnittstelle (falls vorhanden)" -#: ipam/forms/bulk_import.py:311 ipam/forms/bulk_import.py:488 -#: ipam/forms/model_forms.py:685 virtualization/filtersets.py:288 -#: virtualization/filtersets.py:327 virtualization/forms/bulk_edit.py:200 -#: virtualization/forms/bulk_edit.py:326 -#: virtualization/forms/bulk_import.py:146 -#: virtualization/forms/bulk_import.py:207 -#: virtualization/forms/filtersets.py:212 -#: virtualization/forms/filtersets.py:248 -#: virtualization/forms/model_forms.py:288 vpn/forms/bulk_import.py:93 -#: vpn/forms/bulk_import.py:290 +#: 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" -#: ipam/forms/bulk_import.py:315 +#: netbox/ipam/forms/bulk_import.py:315 msgid "Parent VM of assigned interface (if any)" msgstr "Übergeordnete VM der zugewiesenen Schnittstelle (falls vorhanden)" -#: ipam/forms/bulk_import.py:325 +#: netbox/ipam/forms/bulk_import.py:325 msgid "Is primary" msgstr "Ist primär" -#: ipam/forms/bulk_import.py:326 +#: 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" -#: ipam/forms/bulk_import.py:365 +#: netbox/ipam/forms/bulk_import.py:330 +msgid "Is out-of-band" +msgstr "Ist Out-Of-Band" + +#: netbox/ipam/forms/bulk_import.py:331 +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 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" -#: ipam/forms/bulk_import.py:369 +#: netbox/ipam/forms/bulk_import.py:375 +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 +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 msgid "No interface specified; cannot set as primary IP" msgstr "" "Keine Schnittstelle angegeben; kann nicht als primäre IP festgelegt werden" -#: ipam/forms/bulk_import.py:398 +#: netbox/ipam/forms/bulk_import.py:387 +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 msgid "Auth type" msgstr "Authentifizierungstyp" -#: ipam/forms/bulk_import.py:413 +#: netbox/ipam/forms/bulk_import.py:437 msgid "Scope type (app & model)" msgstr "Art des Umfangs (App und Modell)" -#: ipam/forms/bulk_import.py:440 +#: netbox/ipam/forms/bulk_import.py:464 msgid "Assigned VLAN group" msgstr "Zugewiesene VLAN-Gruppe" -#: ipam/forms/bulk_import.py:471 ipam/forms/bulk_import.py:497 +#: netbox/ipam/forms/bulk_import.py:495 netbox/ipam/forms/bulk_import.py:521 msgid "IP protocol" msgstr "IP-Protokoll" -#: ipam/forms/bulk_import.py:485 +#: netbox/ipam/forms/bulk_import.py:509 msgid "Required if not assigned to a VM" msgstr "Erforderlich, wenn es keiner VM zugewiesen ist" -#: ipam/forms/bulk_import.py:492 +#: netbox/ipam/forms/bulk_import.py:516 msgid "Required if not assigned to a device" msgstr "Erforderlich, wenn es keinem Gerät zugewiesen ist" -#: ipam/forms/bulk_import.py:517 +#: netbox/ipam/forms/bulk_import.py:541 #, python-brace-format msgid "{ip} is not assigned to this device/VM." msgstr "{ip} ist diesem Gerät/dieser VM nicht zugewiesen." -#: ipam/forms/filtersets.py:47 ipam/forms/model_forms.py:63 -#: netbox/navigation/menu.py:189 vpn/forms/model_forms.py:410 +#: 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 msgid "Route Targets" msgstr "Routenziele" -#: ipam/forms/filtersets.py:53 ipam/forms/model_forms.py:50 -#: vpn/forms/filtersets.py:224 vpn/forms/model_forms.py:397 +#: 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 msgid "Import targets" msgstr "Ziele importieren" -#: ipam/forms/filtersets.py:58 ipam/forms/model_forms.py:55 -#: vpn/forms/filtersets.py:229 vpn/forms/model_forms.py:402 +#: 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 msgid "Export targets" msgstr "Ziele exportieren" -#: ipam/forms/filtersets.py:73 +#: netbox/ipam/forms/filtersets.py:73 msgid "Imported by VRF" msgstr "Importiert von VRF" -#: ipam/forms/filtersets.py:78 +#: netbox/ipam/forms/filtersets.py:78 msgid "Exported by VRF" msgstr "Exportiert von VRF" -#: ipam/forms/filtersets.py:87 ipam/tables/ip.py:89 templates/ipam/rir.html:30 +#: netbox/ipam/forms/filtersets.py:87 netbox/ipam/tables/ip.py:89 +#: netbox/templates/ipam/rir.html:30 msgid "Private" msgstr "Privat" -#: ipam/forms/filtersets.py:105 ipam/forms/filtersets.py:191 -#: ipam/forms/filtersets.py:272 ipam/forms/filtersets.py:326 +#: netbox/ipam/forms/filtersets.py:105 netbox/ipam/forms/filtersets.py:191 +#: netbox/ipam/forms/filtersets.py:272 netbox/ipam/forms/filtersets.py:326 msgid "Address family" msgstr "Adressfamilie" -#: ipam/forms/filtersets.py:119 templates/ipam/asnrange.html:25 +#: netbox/ipam/forms/filtersets.py:119 netbox/templates/ipam/asnrange.html:25 msgid "Range" msgstr "Bereich" -#: ipam/forms/filtersets.py:128 +#: netbox/ipam/forms/filtersets.py:128 msgid "Start" msgstr "Start" -#: ipam/forms/filtersets.py:132 +#: netbox/ipam/forms/filtersets.py:132 msgid "End" msgstr "Ende" -#: ipam/forms/filtersets.py:186 +#: netbox/ipam/forms/filtersets.py:186 msgid "Search within" msgstr "Suche innerhalb" -#: ipam/forms/filtersets.py:207 ipam/forms/filtersets.py:342 +#: netbox/ipam/forms/filtersets.py:207 netbox/ipam/forms/filtersets.py:342 msgid "Present in VRF" msgstr "In VRF präsent" -#: ipam/forms/filtersets.py:311 +#: netbox/ipam/forms/filtersets.py:311 msgid "Device/VM" msgstr "Gerät/VM" -#: ipam/forms/filtersets.py:321 +#: netbox/ipam/forms/filtersets.py:321 msgid "Parent Prefix" msgstr "Übergeordnetes Prefix" -#: ipam/forms/filtersets.py:347 +#: netbox/ipam/forms/filtersets.py:347 msgid "Assigned Device" msgstr "Zugewiesenes Gerät" -#: ipam/forms/filtersets.py:352 +#: netbox/ipam/forms/filtersets.py:352 msgid "Assigned VM" msgstr "Zugewiesene VM" -#: ipam/forms/filtersets.py:366 +#: netbox/ipam/forms/filtersets.py:366 msgid "Assigned to an interface" msgstr "Einer Schnittstelle zugewiesen" -#: ipam/forms/filtersets.py:373 templates/ipam/ipaddress.html:51 +#: netbox/ipam/forms/filtersets.py:373 netbox/templates/ipam/ipaddress.html:51 msgid "DNS Name" msgstr "DNS-Name" -#: ipam/forms/filtersets.py:416 ipam/models/vlans.py:235 ipam/tables/ip.py:176 -#: ipam/tables/vlans.py:82 ipam/views.py:971 netbox/navigation/menu.py:193 -#: netbox/navigation/menu.py:195 +#: 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 msgid "VLANs" msgstr "VLANs" -#: ipam/forms/filtersets.py:457 +#: netbox/ipam/forms/filtersets.py:457 msgid "Contains VLAN ID" msgstr "Enthält VLAN-ID" -#: ipam/forms/filtersets.py:513 ipam/models/vlans.py:176 -#: templates/ipam/vlan.html:31 +#: netbox/ipam/forms/filtersets.py:513 netbox/ipam/models/vlans.py:192 +#: netbox/templates/ipam/vlan.html:31 msgid "VLAN ID" msgstr "VLAN-ID" -#: ipam/forms/filtersets.py:556 ipam/forms/model_forms.py:320 -#: ipam/forms/model_forms.py:713 ipam/forms/model_forms.py:739 -#: ipam/tables/vlans.py:195 templates/virtualization/virtualdisk.html:21 -#: templates/virtualization/virtualmachine.html:12 -#: templates/virtualization/vminterface.html:21 -#: templates/vpn/tunneltermination.html:25 -#: virtualization/forms/filtersets.py:197 -#: virtualization/forms/filtersets.py:242 -#: virtualization/forms/model_forms.py:220 -#: virtualization/tables/virtualmachines.py:135 -#: virtualization/tables/virtualmachines.py:190 vpn/choices.py:45 -#: vpn/forms/filtersets.py:293 vpn/forms/model_forms.py:160 -#: vpn/forms/model_forms.py:171 vpn/forms/model_forms.py:273 -#: vpn/forms/model_forms.py:454 +#: netbox/ipam/forms/filtersets.py: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" -#: ipam/forms/model_forms.py:80 templates/ipam/routetarget.html:10 +#: netbox/ipam/forms/model_forms.py:80 +#: netbox/templates/ipam/routetarget.html:10 msgid "Route Target" msgstr "Ziel der Route" -#: ipam/forms/model_forms.py:114 ipam/tables/ip.py:117 -#: templates/ipam/aggregate.html:11 templates/ipam/prefix.html:38 +#: netbox/ipam/forms/model_forms.py:114 netbox/ipam/tables/ip.py:117 +#: netbox/templates/ipam/aggregate.html:11 +#: netbox/templates/ipam/prefix.html:38 msgid "Aggregate" msgstr "Aggregat" -#: ipam/forms/model_forms.py:135 templates/ipam/asnrange.html:12 +#: netbox/ipam/forms/model_forms.py:135 netbox/templates/ipam/asnrange.html:12 msgid "ASN Range" msgstr "ASN-Bereich" -#: ipam/forms/model_forms.py:231 +#: netbox/ipam/forms/model_forms.py:231 msgid "Site/VLAN Assignment" msgstr "Standort-/VLAN-Zuweisung" -#: ipam/forms/model_forms.py:259 templates/ipam/iprange.html:10 +#: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10 msgid "IP Range" msgstr "IP-Bereich" -#: ipam/forms/model_forms.py:295 ipam/forms/model_forms.py:321 -#: ipam/forms/model_forms.py:473 templates/ipam/fhrpgroup.html:19 +#: 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 msgid "FHRP Group" msgstr "FHRP-Gruppe" -#: ipam/forms/model_forms.py:310 +#: netbox/ipam/forms/model_forms.py:310 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" -#: ipam/forms/model_forms.py:325 +#: netbox/ipam/forms/model_forms.py:314 +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 msgid "NAT IP (Inside)" msgstr "NAT IP (innen)" -#: ipam/forms/model_forms.py:384 +#: netbox/ipam/forms/model_forms.py:391 msgid "An IP address can only be assigned to a single object." msgstr "Eine IP-Adresse kann nur einem einzigen Objekt zugewiesen werden." -#: ipam/forms/model_forms.py:390 ipam/models/ip.py:897 -msgid "" -"Cannot reassign IP address while it is designated as the primary IP for the " -"parent object" +#: netbox/ipam/forms/model_forms.py:398 +msgid "Cannot reassign primary IP address for the parent device/VM" msgstr "" -"Die IP-Adresse kann nicht neu zugewiesen werden, solange sie als primäre IP " -"für das übergeordnete Objekt festgelegt ist" +"Die primäre IP-Adresse für das übergeordnete Gerät/die virtuelle Maschine " +"kann nicht neu zugewiesen werden" -#: ipam/forms/model_forms.py:400 +#: netbox/ipam/forms/model_forms.py:402 +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 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." -#: ipam/forms/model_forms.py:475 +#: netbox/ipam/forms/model_forms.py:420 +msgid "" +"Only IP addresses assigned to a device interface can be designated as the " +"out-of-band IP for a device." +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 msgid "Virtual IP Address" msgstr "Virtuelle IP-Adresse" -#: ipam/forms/model_forms.py:560 +#: netbox/ipam/forms/model_forms.py:593 msgid "Assignment already exists" msgstr "Zuweisung ist bereits vorhanden" -#: ipam/forms/model_forms.py:569 templates/ipam/vlangroup.html:42 +#: netbox/ipam/forms/model_forms.py:602 +#: netbox/templates/ipam/vlangroup.html:42 msgid "VLAN IDs" msgstr "VLAN-IDs" -#: ipam/forms/model_forms.py:587 +#: netbox/ipam/forms/model_forms.py:620 msgid "Child VLANs" msgstr "Untergeordnete VLANs" -#: ipam/forms/model_forms.py:664 ipam/forms/model_forms.py:696 +#: netbox/ipam/forms/model_forms.py:697 netbox/ipam/forms/model_forms.py:729 msgid "" "Comma-separated list of one or more port numbers. A range may be specified " "using a hyphen." @@ -9376,136 +10047,137 @@ msgstr "" "Kommagetrennte Liste mit einer oder mehreren Portnummern. Ein Bereich kann " "mit einem Bindestrich angegeben werden." -#: ipam/forms/model_forms.py:669 templates/ipam/servicetemplate.html:12 +#: netbox/ipam/forms/model_forms.py:702 +#: netbox/templates/ipam/servicetemplate.html:12 msgid "Service Template" msgstr "Vorlage für den Service" -#: ipam/forms/model_forms.py:716 +#: netbox/ipam/forms/model_forms.py:749 msgid "Port(s)" msgstr "Port(s)" -#: ipam/forms/model_forms.py:717 ipam/forms/model_forms.py:745 -#: templates/ipam/service.html:21 +#: 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" -#: ipam/forms/model_forms.py:730 +#: netbox/ipam/forms/model_forms.py:763 msgid "Service template" msgstr "Dienstevorlagen (Ports)" -#: ipam/forms/model_forms.py:742 +#: netbox/ipam/forms/model_forms.py:775 msgid "From Template" msgstr "Aus Vorlage" -#: ipam/forms/model_forms.py:743 +#: netbox/ipam/forms/model_forms.py:776 msgid "Custom" msgstr "Benutzerdefiniert" -#: ipam/forms/model_forms.py:773 +#: netbox/ipam/forms/model_forms.py:806 msgid "" "Must specify name, protocol, and port(s) if not using a service template." msgstr "" "Muss Name, Protokoll und Port(s) angeben, wenn keine Dienstevorlage " "verwendet wird." -#: ipam/models/asns.py:34 +#: netbox/ipam/models/asns.py:34 msgid "start" msgstr "Start" -#: ipam/models/asns.py:51 +#: netbox/ipam/models/asns.py:51 msgid "ASN range" msgstr "ASN-Bereich" -#: ipam/models/asns.py:52 +#: netbox/ipam/models/asns.py:52 msgid "ASN ranges" msgstr "ASN-Bereiche" -#: ipam/models/asns.py:72 +#: netbox/ipam/models/asns.py:72 #, python-brace-format msgid "Starting ASN ({start}) must be lower than ending ASN ({end})." msgstr "" "ASN wird gestartet ({start}) muss niedriger sein als das Ende der ASN " "({end})." -#: ipam/models/asns.py:104 +#: netbox/ipam/models/asns.py:104 msgid "Regional Internet Registry responsible for this AS number space" msgstr "" "Regionale Internetregistrierung, die für diesen AS-Nummernraum zuständig ist" -#: ipam/models/asns.py:109 +#: netbox/ipam/models/asns.py:109 msgid "16- or 32-bit autonomous system number" msgstr "16- oder 32-Bit-Autonome Systemnummer" -#: ipam/models/fhrp.py:22 +#: netbox/ipam/models/fhrp.py:22 msgid "group ID" msgstr "Gruppen-ID" -#: ipam/models/fhrp.py:30 ipam/models/services.py:22 +#: netbox/ipam/models/fhrp.py:30 netbox/ipam/models/services.py:22 msgid "protocol" msgstr "Protokoll" -#: ipam/models/fhrp.py:38 wireless/models.py:28 +#: netbox/ipam/models/fhrp.py:38 netbox/wireless/models.py:28 msgid "authentication type" msgstr "Authentifizierungstyp" -#: ipam/models/fhrp.py:43 +#: netbox/ipam/models/fhrp.py:43 msgid "authentication key" msgstr "Authentifizierungsschlüssel" -#: ipam/models/fhrp.py:56 +#: netbox/ipam/models/fhrp.py:56 msgid "FHRP group" msgstr "FHRP-Gruppe" -#: ipam/models/fhrp.py:57 +#: netbox/ipam/models/fhrp.py:57 msgid "FHRP groups" msgstr "FHRP-Gruppen" -#: ipam/models/fhrp.py:113 +#: netbox/ipam/models/fhrp.py:113 msgid "FHRP group assignment" msgstr "FHRP-Gruppenzuweisung" -#: ipam/models/fhrp.py:114 +#: netbox/ipam/models/fhrp.py:114 msgid "FHRP group assignments" msgstr "FHRP-Gruppenaufgaben" -#: ipam/models/ip.py:65 +#: netbox/ipam/models/ip.py:65 msgid "private" msgstr "Privat" -#: ipam/models/ip.py:66 +#: netbox/ipam/models/ip.py:66 msgid "IP space managed by this RIR is considered private" msgstr "Der von diesem RIR verwaltete IP-Bereich gilt als privat" -#: ipam/models/ip.py:72 netbox/navigation/menu.py:182 +#: netbox/ipam/models/ip.py:72 netbox/netbox/navigation/menu.py:182 msgid "RIRs" msgstr "RIRs" -#: ipam/models/ip.py:84 +#: netbox/ipam/models/ip.py:84 msgid "IPv4 or IPv6 network" msgstr "IPv4- oder IPv6-Netzwerk" -#: ipam/models/ip.py:91 +#: netbox/ipam/models/ip.py:91 msgid "Regional Internet Registry responsible for this IP space" msgstr "" "Regionale Internetregistrierung, die für diesen IP-Bereich zuständig ist" -#: ipam/models/ip.py:101 +#: netbox/ipam/models/ip.py:101 msgid "date added" msgstr "Datum hinzugefügt" -#: ipam/models/ip.py:115 +#: netbox/ipam/models/ip.py:115 msgid "aggregate" msgstr "Aggregat" -#: ipam/models/ip.py:116 +#: netbox/ipam/models/ip.py:116 msgid "aggregates" msgstr "Aggregate" -#: ipam/models/ip.py:132 +#: netbox/ipam/models/ip.py:132 msgid "Cannot create aggregate with /0 mask." msgstr "Ein Aggregat mit der Maske /0 kann nicht erstellt werden." -#: ipam/models/ip.py:144 +#: netbox/ipam/models/ip.py:144 #, python-brace-format msgid "" "Aggregates cannot overlap. {prefix} is already covered by an existing " @@ -9514,7 +10186,7 @@ msgstr "" "Aggregate können sich nicht überschneiden. {prefix} wird bereits von einem " "vorhandenen Aggregat abgedeckt ({aggregate})." -#: ipam/models/ip.py:158 +#: netbox/ipam/models/ip.py:158 #, python-brace-format msgid "" "Prefixes cannot overlap aggregates. {prefix} covers an existing aggregate " @@ -9523,161 +10195,163 @@ msgstr "" "Präfixe können Aggregate nicht überlappen. {prefix} deckt ein vorhandenes " "Aggregat ab ({aggregate})." -#: ipam/models/ip.py:200 ipam/models/ip.py:737 vpn/models/tunnels.py:114 +#: netbox/ipam/models/ip.py:200 netbox/ipam/models/ip.py:737 +#: netbox/vpn/models/tunnels.py:114 msgid "role" msgstr "Rolle" -#: ipam/models/ip.py:201 +#: netbox/ipam/models/ip.py:201 msgid "roles" msgstr "Rollen" -#: ipam/models/ip.py:217 ipam/models/ip.py:293 +#: netbox/ipam/models/ip.py:217 netbox/ipam/models/ip.py:293 msgid "prefix" msgstr "Prefix" -#: ipam/models/ip.py:218 +#: netbox/ipam/models/ip.py:218 msgid "IPv4 or IPv6 network with mask" msgstr "IPv4- oder IPv6-Netzwerk mit Maske" -#: ipam/models/ip.py:254 +#: netbox/ipam/models/ip.py:254 msgid "Operational status of this prefix" msgstr "Betriebsstatus dieses Prefixes" -#: ipam/models/ip.py:262 +#: netbox/ipam/models/ip.py:262 msgid "The primary function of this prefix" msgstr "Die Hauptfunktion dieses Prefixes" -#: ipam/models/ip.py:265 +#: netbox/ipam/models/ip.py:265 msgid "is a pool" msgstr "ist ein Pool" -#: ipam/models/ip.py:267 +#: 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" -#: ipam/models/ip.py:270 ipam/models/ip.py:537 +#: netbox/ipam/models/ip.py:270 netbox/ipam/models/ip.py:537 msgid "mark utilized" msgstr "als verwendet markieren" -#: ipam/models/ip.py:294 +#: netbox/ipam/models/ip.py:294 msgid "prefixes" msgstr "Prefixe" -#: ipam/models/ip.py:317 +#: netbox/ipam/models/ip.py:317 msgid "Cannot create prefix with /0 mask." msgstr "Prefix mit der Maske /0 kann nicht erstellt werden." -#: ipam/models/ip.py:324 ipam/models/ip.py:874 +#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:874 #, python-brace-format msgid "VRF {vrf}" msgstr "VRF {vrf}" -#: ipam/models/ip.py:324 ipam/models/ip.py:874 +#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:874 msgid "global table" msgstr "globale Tabelle" -#: ipam/models/ip.py:326 +#: netbox/ipam/models/ip.py:326 #, python-brace-format msgid "Duplicate prefix found in {table}: {prefix}" msgstr "Doppeltes Prefix gefunden in {table}: {prefix}" -#: ipam/models/ip.py:495 +#: netbox/ipam/models/ip.py:495 msgid "start address" msgstr "Startadresse" -#: ipam/models/ip.py:496 ipam/models/ip.py:500 ipam/models/ip.py:712 +#: netbox/ipam/models/ip.py:496 netbox/ipam/models/ip.py:500 +#: netbox/ipam/models/ip.py:712 msgid "IPv4 or IPv6 address (with mask)" msgstr "IPv4- oder IPv6-Adresse (mit Maske)" -#: ipam/models/ip.py:499 +#: netbox/ipam/models/ip.py:499 msgid "end address" msgstr "Endadresse" -#: ipam/models/ip.py:526 +#: netbox/ipam/models/ip.py:526 msgid "Operational status of this range" msgstr "Betriebsstatus dieses Bereichs" -#: ipam/models/ip.py:534 +#: netbox/ipam/models/ip.py:534 msgid "The primary function of this range" msgstr "Die Hauptfunktion dieses Bereichs" -#: ipam/models/ip.py:548 +#: netbox/ipam/models/ip.py:548 msgid "IP range" msgstr "IP-Bereich" -#: ipam/models/ip.py:549 +#: netbox/ipam/models/ip.py:549 msgid "IP ranges" msgstr "IP-Bereiche" -#: ipam/models/ip.py:565 +#: netbox/ipam/models/ip.py:565 msgid "Starting and ending IP address versions must match" msgstr "Die Versionen der Anfangs- und Endadresse müssen übereinstimmen" -#: ipam/models/ip.py:571 +#: netbox/ipam/models/ip.py:571 msgid "Starting and ending IP address masks must match" msgstr "Die Masken für Start- und Endadressen müssen übereinstimmen" -#: ipam/models/ip.py:578 +#: netbox/ipam/models/ip.py:578 #, python-brace-format msgid "" "Ending address must be greater than the starting address ({start_address})" msgstr "" "Die Endadresse muss größer als die Startadresse sein ({start_address})" -#: ipam/models/ip.py:590 +#: netbox/ipam/models/ip.py:590 #, python-brace-format msgid "Defined addresses overlap with range {overlapping_range} in VRF {vrf}" msgstr "" "Definierte Adressen überschneiden sich mit dem Bereich {overlapping_range} " "im VRF {vrf}" -#: ipam/models/ip.py:599 +#: netbox/ipam/models/ip.py:599 #, 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})" -#: ipam/models/ip.py:711 tenancy/models/contacts.py:82 +#: netbox/ipam/models/ip.py:711 netbox/tenancy/models/contacts.py:82 msgid "address" msgstr "Adresse" -#: ipam/models/ip.py:734 +#: netbox/ipam/models/ip.py:734 msgid "The operational status of this IP" msgstr "Der Betriebsstatus dieser IP" -#: ipam/models/ip.py:741 +#: netbox/ipam/models/ip.py:741 msgid "The functional role of this IP" msgstr "Die funktionale Rolle dieser IP" -#: ipam/models/ip.py:765 templates/ipam/ipaddress.html:72 +#: netbox/ipam/models/ip.py:765 netbox/templates/ipam/ipaddress.html:72 msgid "NAT (inside)" msgstr "NAT (innen)" -#: ipam/models/ip.py:766 +#: netbox/ipam/models/ip.py:766 msgid "The IP for which this address is the \"outside\" IP" msgstr "Die IP, für die diese Adresse die „externe“ IP ist" -#: ipam/models/ip.py:773 +#: netbox/ipam/models/ip.py:773 msgid "Hostname or FQDN (not case-sensitive)" msgstr "Hostname oder FQDN (Groß- und Kleinschreibung nicht beachten)" -#: ipam/models/ip.py:789 ipam/models/services.py:94 +#: netbox/ipam/models/ip.py:789 netbox/ipam/models/services.py:94 msgid "IP addresses" msgstr "IP-Adressen" -#: ipam/models/ip.py:845 +#: netbox/ipam/models/ip.py:845 msgid "Cannot create IP address with /0 mask." msgstr "Die IP-Adresse mit der Maske /0 kann nicht erstellt werden." -#: ipam/models/ip.py:851 +#: netbox/ipam/models/ip.py:851 #, python-brace-format msgid "{ip} is a network ID, which may not be assigned to an interface." msgstr "" "{ip} ist eine Netzwerk-ID, die keiner Schnittstelle zugewiesen werden darf." -#: ipam/models/ip.py:862 +#: netbox/ipam/models/ip.py:862 #, python-brace-format msgid "" "{ip} is a broadcast address, which may not be assigned to an interface." @@ -9685,102 +10359,122 @@ msgstr "" "{ip} ist eine Broadcast-Adresse, die keiner Schnittstelle zugewiesen werden " "darf." -#: ipam/models/ip.py:876 +#: netbox/ipam/models/ip.py:876 #, python-brace-format msgid "Duplicate IP address found in {table}: {ipaddress}" msgstr "Doppelte IP-Adresse gefunden in {table}: {ipaddress}" -#: ipam/models/ip.py:903 +#: netbox/ipam/models/ip.py:897 +msgid "" +"Cannot reassign IP address while it is designated as the primary IP for the " +"parent object" +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 msgid "Only IPv6 addresses can be assigned SLAAC status" msgstr "Nur IPv6-Adressen kann der SLAAC-Status zugewiesen werden" -#: ipam/models/services.py:33 +#: netbox/ipam/models/services.py:33 msgid "port numbers" msgstr "Portnummern" -#: ipam/models/services.py:59 +#: netbox/ipam/models/services.py:59 msgid "service template" msgstr "Servicevorlage" -#: ipam/models/services.py:60 +#: netbox/ipam/models/services.py:60 msgid "service templates" msgstr "Servicevorlagen" -#: ipam/models/services.py:95 +#: netbox/ipam/models/services.py:95 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" -#: ipam/models/services.py:102 +#: netbox/ipam/models/services.py:102 msgid "service" msgstr "Dienst / Port" -#: ipam/models/services.py:103 +#: netbox/ipam/models/services.py:103 msgid "services" msgstr "Dienste (Ports)" -#: ipam/models/services.py:117 +#: netbox/ipam/models/services.py:117 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." -#: ipam/models/services.py:119 +#: netbox/ipam/models/services.py:119 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." -#: ipam/models/vlans.py:85 +#: netbox/ipam/models/vlans.py:85 msgid "VLAN groups" msgstr "VLAN-Gruppen" -#: ipam/models/vlans.py:95 +#: netbox/ipam/models/vlans.py:95 msgid "Cannot set scope_type without scope_id." msgstr "scope_type kann nicht ohne scope_id gesetzt werden." -#: ipam/models/vlans.py:97 +#: netbox/ipam/models/vlans.py:97 msgid "Cannot set scope_id without scope_type." msgstr "scope_id kann nicht ohne scope_type gesetzt werden." -#: ipam/models/vlans.py:101 +#: netbox/ipam/models/vlans.py:105 +#, 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 +#, 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 +#, python-brace-format +msgid "" +"Ending VLAN ID in range must be greater than or equal to the starting VLAN " +"ID ({range})" +msgstr "" +"Die End-VLAN-ID im Bereich muss größer oder gleich der Start-VLAN-ID sein " +"({range})" + +#: netbox/ipam/models/vlans.py:124 msgid "Ranges cannot overlap." msgstr "Bereiche dürfen sich nicht überschneiden." -#: ipam/models/vlans.py:106 -#, python-brace-format -msgid "" -"Maximum child VID must be greater than or equal to minimum child VID " -"({value})" -msgstr "" -"Die maximale untergeordnete VID muss größer oder gleich der Mindest-VID für " -"untergeordnete VIDs sein ({value})" - -#: ipam/models/vlans.py:165 +#: netbox/ipam/models/vlans.py:181 msgid "The specific site to which this VLAN is assigned (if any)" msgstr "" "Der spezifische Standort, der dieses VLAN zugewiesen ist (falls vorhanden)" -#: ipam/models/vlans.py:173 +#: netbox/ipam/models/vlans.py:189 msgid "VLAN group (optional)" msgstr "VLAN-Gruppe (optional)" -#: ipam/models/vlans.py:181 +#: netbox/ipam/models/vlans.py:197 msgid "Numeric VLAN ID (1-4094)" msgstr "Numerische VLAN-ID (1-4094)" -#: ipam/models/vlans.py:199 +#: netbox/ipam/models/vlans.py:215 msgid "Operational status of this VLAN" msgstr "Betriebsstatus dieses VLAN" -#: ipam/models/vlans.py:207 +#: netbox/ipam/models/vlans.py:223 msgid "The primary function of this VLAN" msgstr "Die Hauptfunktion dieses VLAN" -#: ipam/models/vlans.py:250 +#: netbox/ipam/models/vlans.py:266 #, python-brace-format msgid "" "VLAN is assigned to group {group} (scope: {scope}); cannot also assign to " @@ -9789,165 +10483,167 @@ msgstr "" "VLAN ist der Gruppe {group} (Scope: {scope}) zugewiesen; kann nicht auch dem" " Standort {site} zugewiesen werden." -#: ipam/models/vlans.py:259 +#: netbox/ipam/models/vlans.py:275 #, 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}" -#: ipam/models/vrfs.py:30 +#: netbox/ipam/models/vrfs.py:30 msgid "route distinguisher" msgstr "Routenunterscheidungsmerkmal" -#: ipam/models/vrfs.py:31 +#: netbox/ipam/models/vrfs.py:31 msgid "Unique route distinguisher (as defined in RFC 4364)" msgstr "Eindeutiger Routenbezeichner (wie in RFC 4364 definiert)" -#: ipam/models/vrfs.py:42 +#: netbox/ipam/models/vrfs.py:42 msgid "enforce unique space" msgstr "einzigartigen Raum erzwingen" -#: ipam/models/vrfs.py:43 +#: 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" -#: ipam/models/vrfs.py:63 netbox/navigation/menu.py:186 -#: netbox/navigation/menu.py:188 +#: netbox/ipam/models/vrfs.py:63 netbox/netbox/navigation/menu.py:186 +#: netbox/netbox/navigation/menu.py:188 msgid "VRFs" msgstr "VRFs" -#: ipam/models/vrfs.py:82 +#: netbox/ipam/models/vrfs.py:82 msgid "Route target value (formatted in accordance with RFC 4360)" msgstr "Routenzielwert (formatiert gemäß RFC 4360)" -#: ipam/models/vrfs.py:94 +#: netbox/ipam/models/vrfs.py:94 msgid "route target" msgstr "Ziel der Route" -#: ipam/models/vrfs.py:95 +#: netbox/ipam/models/vrfs.py:95 msgid "route targets" msgstr "Routenziele" -#: ipam/tables/asn.py:52 +#: netbox/ipam/tables/asn.py:52 msgid "ASDOT" msgstr "ALS PUNKT" -#: ipam/tables/asn.py:57 +#: netbox/ipam/tables/asn.py:57 msgid "Site Count" msgstr "Anzahl der Standorte" -#: ipam/tables/asn.py:62 +#: netbox/ipam/tables/asn.py:62 msgid "Provider Count" msgstr "Anzahl der Provider" -#: ipam/tables/ip.py:95 netbox/navigation/menu.py:179 -#: netbox/navigation/menu.py:181 +#: netbox/ipam/tables/ip.py:95 netbox/netbox/navigation/menu.py:179 +#: netbox/netbox/navigation/menu.py:181 msgid "Aggregates" msgstr "Aggregate" -#: ipam/tables/ip.py:125 +#: netbox/ipam/tables/ip.py:125 msgid "Added" msgstr "Hinzugefügt" -#: ipam/tables/ip.py:128 ipam/tables/ip.py:166 ipam/tables/vlans.py:142 -#: ipam/views.py:346 netbox/navigation/menu.py:165 -#: netbox/navigation/menu.py:167 templates/ipam/vlan.html:84 +#: 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 msgid "Prefixes" msgstr "Prefixe" -#: ipam/tables/ip.py:131 ipam/tables/ip.py:270 ipam/tables/ip.py:324 -#: ipam/tables/vlans.py:86 templates/dcim/device.html:260 -#: templates/ipam/aggregate.html:24 templates/ipam/iprange.html:29 -#: templates/ipam/prefix.html:106 +#: 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/templates/dcim/device.html:260 +#: netbox/templates/ipam/aggregate.html:24 +#: netbox/templates/ipam/iprange.html:29 netbox/templates/ipam/prefix.html:106 msgid "Utilization" msgstr "Auslastung" -#: ipam/tables/ip.py:171 netbox/navigation/menu.py:161 +#: netbox/ipam/tables/ip.py:171 netbox/netbox/navigation/menu.py:161 msgid "IP Ranges" msgstr "IP-Bereiche" -#: ipam/tables/ip.py:221 +#: netbox/ipam/tables/ip.py:221 msgid "Prefix (Flat)" msgstr "Prefix (flach)" -#: ipam/tables/ip.py:225 +#: netbox/ipam/tables/ip.py:225 msgid "Depth" msgstr "Tiefe" -#: ipam/tables/ip.py:262 +#: netbox/ipam/tables/ip.py:262 msgid "Pool" msgstr "Pool" -#: ipam/tables/ip.py:266 ipam/tables/ip.py:320 +#: netbox/ipam/tables/ip.py:266 netbox/ipam/tables/ip.py:320 msgid "Marked Utilized" msgstr "Als ausgenutzt markiert" -#: ipam/tables/ip.py:304 +#: netbox/ipam/tables/ip.py:304 msgid "Start address" msgstr "Startadresse" -#: ipam/tables/ip.py:383 +#: netbox/ipam/tables/ip.py:383 msgid "NAT (Inside)" msgstr "NAT (Innen)" -#: ipam/tables/ip.py:388 +#: netbox/ipam/tables/ip.py:388 msgid "NAT (Outside)" msgstr "NAT (Außen)" -#: ipam/tables/ip.py:393 +#: netbox/ipam/tables/ip.py:393 msgid "Assigned" msgstr "Zugewiesen" -#: ipam/tables/ip.py:429 templates/vpn/l2vpntermination.html:16 -#: vpn/forms/filtersets.py:240 +#: netbox/ipam/tables/ip.py:429 netbox/templates/vpn/l2vpntermination.html:16 +#: netbox/vpn/forms/filtersets.py:240 msgid "Assigned Object" msgstr "Zugewiesenes Objekt" -#: ipam/tables/vlans.py:68 +#: netbox/ipam/tables/vlans.py:68 msgid "Scope Type" msgstr "Art des Geltungsbereichs" -#: ipam/tables/vlans.py:76 +#: netbox/ipam/tables/vlans.py:76 msgid "VID Ranges" msgstr "VID-Bereiche" -#: ipam/tables/vlans.py:111 ipam/tables/vlans.py:214 -#: templates/dcim/inc/interface_vlans_table.html:4 +#: netbox/ipam/tables/vlans.py:111 netbox/ipam/tables/vlans.py:214 +#: netbox/templates/dcim/inc/interface_vlans_table.html:4 msgid "VID" msgstr "VID" -#: ipam/tables/vrfs.py:30 +#: netbox/ipam/tables/vrfs.py:30 msgid "RD" msgstr "RD" -#: ipam/tables/vrfs.py:33 +#: netbox/ipam/tables/vrfs.py:33 msgid "Unique" msgstr "Einzigartig" -#: ipam/tables/vrfs.py:37 vpn/tables/l2vpn.py:27 +#: netbox/ipam/tables/vrfs.py:37 netbox/vpn/tables/l2vpn.py:27 msgid "Import Targets" msgstr "Ziele importieren" -#: ipam/tables/vrfs.py:42 vpn/tables/l2vpn.py:32 +#: netbox/ipam/tables/vrfs.py:42 netbox/vpn/tables/l2vpn.py:32 msgid "Export Targets" msgstr "Ziele exportieren" -#: ipam/validators.py:9 +#: netbox/ipam/validators.py:9 #, python-brace-format msgid "{prefix} is not a valid prefix. Did you mean {suggested}?" msgstr "{prefix} ist kein gültiges Präfix. Meinten Sie {suggested}?" -#: ipam/validators.py:16 +#: netbox/ipam/validators.py:16 #, python-format msgid "The prefix length must be less than or equal to %(limit_value)s." msgstr "Die Präfixlänge muss kleiner oder gleich sein %(limit_value)s." -#: ipam/validators.py:24 +#: netbox/ipam/validators.py:24 #, python-format msgid "The prefix length must be greater than or equal to %(limit_value)s." msgstr "Die Präfixlänge muss größer oder gleich sein %(limit_value)s." -#: ipam/validators.py:33 +#: netbox/ipam/validators.py:33 msgid "" "Only alphanumeric characters, asterisks, hyphens, periods, and underscores " "are allowed in DNS names" @@ -9955,31 +10651,31 @@ msgstr "" "In DNS-Namen sind nur alphanumerische Zeichen, Sternchen, Bindestriche, " "Punkte und Unterstriche zulässig" -#: ipam/views.py:533 +#: netbox/ipam/views.py:533 msgid "Child Prefixes" msgstr "untergeordnete Prefixe" -#: ipam/views.py:569 +#: netbox/ipam/views.py:569 msgid "Child Ranges" msgstr "untergeordnete Bereiche" -#: ipam/views.py:898 +#: netbox/ipam/views.py:898 msgid "Related IPs" msgstr "Verwandte IPs" -#: ipam/views.py:1127 +#: netbox/ipam/views.py:1127 msgid "Device Interfaces" msgstr "Geräteschnittstellen" -#: ipam/views.py:1145 +#: netbox/ipam/views.py:1145 msgid "VM Interfaces" msgstr "VM-Schnittstellen" -#: netbox/api/fields.py:65 +#: netbox/netbox/api/fields.py:65 msgid "This field may not be blank." msgstr "Dieses Feld darf nicht leer sein." -#: netbox/api/fields.py:70 +#: netbox/netbox/api/fields.py:70 msgid "" "Value must be passed directly (e.g. \"foo\": 123); do not use a dictionary " "or list." @@ -9987,330 +10683,343 @@ msgstr "" "Der Wert muss direkt übergeben werden (z. B. „foo“: 123); verwende kein " "Wörterbuch oder keine Liste." -#: netbox/api/fields.py:91 +#: netbox/netbox/api/fields.py:91 #, python-brace-format msgid "{value} is not a valid choice." msgstr "{value} ist keine gültige Auswahl." -#: netbox/api/fields.py:104 +#: netbox/netbox/api/fields.py:104 #, python-brace-format msgid "Invalid content type: {content_type}" msgstr "Ungültiger Inhaltstyp: {content_type}" -#: netbox/api/fields.py:105 +#: netbox/netbox/api/fields.py:105 msgid "Invalid value. Specify a content type as '.'." msgstr "" "Ungültiger Wert. Geben Sie einen Inhaltstyp an'.'." -#: netbox/api/fields.py:167 +#: netbox/netbox/api/fields.py:167 msgid "Ranges must be specified in the form (lower, upper)." msgstr "Bereiche müssen in der Form (unten, oben) angegeben werden." -#: netbox/api/fields.py:169 +#: netbox/netbox/api/fields.py:169 msgid "Range boundaries must be defined as integers." msgstr "Bereichsgrenzen müssen als ganze Zahlen (Integer) definiert werden." -#: netbox/api/serializers/fields.py:40 +#: netbox/netbox/api/serializers/fields.py:40 #, python-brace-format msgid "{class_name} must implement get_view_name()" msgstr "{class_name} muss get_view_name () implementieren" -#: netbox/authentication/__init__.py:138 +#: netbox/netbox/authentication/__init__.py:138 #, python-brace-format msgid "Invalid permission {permission} for model {model}" msgstr "Ungültige Erlaubnis {permission} für Modell {model}" -#: netbox/choices.py:49 +#: netbox/netbox/choices.py:49 msgid "Dark Red" msgstr "Dunkelrot" -#: netbox/choices.py:52 +#: netbox/netbox/choices.py:52 msgid "Rose" msgstr "Rose" -#: netbox/choices.py:53 +#: netbox/netbox/choices.py:53 msgid "Fuchsia" msgstr "Fuchsia" -#: netbox/choices.py:55 +#: netbox/netbox/choices.py:55 msgid "Dark Purple" msgstr "Dunkles Violett" -#: netbox/choices.py:58 +#: netbox/netbox/choices.py:58 msgid "Light Blue" msgstr "Hellblau" -#: netbox/choices.py:61 +#: netbox/netbox/choices.py:61 msgid "Aqua" msgstr "Aquamarin" -#: netbox/choices.py:62 +#: netbox/netbox/choices.py:62 msgid "Dark Green" msgstr "Dunkelgrün" -#: netbox/choices.py:64 +#: netbox/netbox/choices.py:64 msgid "Light Green" msgstr "Hellgrün" -#: netbox/choices.py:65 +#: netbox/netbox/choices.py:65 msgid "Lime" msgstr "Limette" -#: netbox/choices.py:67 +#: netbox/netbox/choices.py:67 msgid "Amber" msgstr "Bernstein" -#: netbox/choices.py:69 +#: netbox/netbox/choices.py:69 msgid "Dark Orange" msgstr "Dunkles Orange" -#: netbox/choices.py:70 +#: netbox/netbox/choices.py:70 msgid "Brown" msgstr "Braun" -#: netbox/choices.py:71 +#: netbox/netbox/choices.py:71 msgid "Light Grey" msgstr "Hellgrau" -#: netbox/choices.py:72 +#: netbox/netbox/choices.py:72 msgid "Grey" msgstr "Grau" -#: netbox/choices.py:73 +#: netbox/netbox/choices.py:73 msgid "Dark Grey" msgstr "Dunkelgrau" -#: netbox/choices.py:128 +#: netbox/netbox/choices.py:128 msgid "Direct" msgstr "Direkt" -#: netbox/choices.py:129 +#: netbox/netbox/choices.py:129 msgid "Upload" msgstr "Hochladen" -#: netbox/choices.py:141 netbox/choices.py:155 +#: netbox/netbox/choices.py:141 netbox/netbox/choices.py:155 msgid "Auto-detect" msgstr "Auto-Erkennung" -#: netbox/choices.py:156 +#: netbox/netbox/choices.py:156 msgid "Comma" msgstr "Komma" -#: netbox/choices.py:157 +#: netbox/netbox/choices.py:157 msgid "Semicolon" msgstr "Semikolon" -#: netbox/choices.py:158 +#: netbox/netbox/choices.py:158 msgid "Tab" msgstr "Tab" -#: netbox/config/__init__.py:67 +#: netbox/netbox/config/__init__.py:67 #, python-brace-format msgid "Invalid configuration parameter: {item}" msgstr "Ungültiger Konfigurationsparameter: {item}" -#: netbox/config/parameters.py:22 templates/core/inc/config_data.html:62 +#: netbox/netbox/config/parameters.py:22 +#: netbox/templates/core/inc/config_data.html:62 msgid "Login banner" msgstr "Login-Banner" -#: netbox/config/parameters.py:24 +#: netbox/netbox/config/parameters.py:24 msgid "Additional content to display on the login page" msgstr "Zusätzliche Inhalte zur Anzeige auf der Anmeldeseite" -#: netbox/config/parameters.py:33 templates/core/inc/config_data.html:66 +#: netbox/netbox/config/parameters.py:33 +#: netbox/templates/core/inc/config_data.html:66 msgid "Maintenance banner" msgstr "Banner zur Wartung" -#: netbox/config/parameters.py:35 +#: netbox/netbox/config/parameters.py:35 msgid "Additional content to display when in maintenance mode" msgstr "Zusätzliche Inhalte, die im Wartungsmodus angezeigt werden" -#: netbox/config/parameters.py:44 templates/core/inc/config_data.html:70 +#: netbox/netbox/config/parameters.py:44 +#: netbox/templates/core/inc/config_data.html:70 msgid "Top banner" msgstr "Oberes Banner" -#: netbox/config/parameters.py:46 +#: netbox/netbox/config/parameters.py:46 msgid "Additional content to display at the top of every page" msgstr "Zusätzliche Inhalte, die oben auf jeder Seite angezeigt werden" -#: netbox/config/parameters.py:55 templates/core/inc/config_data.html:74 +#: netbox/netbox/config/parameters.py:55 +#: netbox/templates/core/inc/config_data.html:74 msgid "Bottom banner" msgstr "Unteres Banner" -#: netbox/config/parameters.py:57 +#: netbox/netbox/config/parameters.py:57 msgid "Additional content to display at the bottom of every page" msgstr "Zusätzliche Inhalte, die am Ende jeder Seite angezeigt werden" -#: netbox/config/parameters.py:68 +#: netbox/netbox/config/parameters.py:68 msgid "Globally unique IP space" msgstr "Weltweit einzigartiger IP-Raum" -#: netbox/config/parameters.py:70 +#: netbox/netbox/config/parameters.py:70 msgid "Enforce unique IP addressing within the global table" msgstr "" "Erzwingen Sie eine eindeutige IP-Adressierung innerhalb der globalen Tabelle" -#: netbox/config/parameters.py:75 templates/core/inc/config_data.html:44 +#: netbox/netbox/config/parameters.py:75 +#: netbox/templates/core/inc/config_data.html:44 msgid "Prefer IPv4" msgstr "IPv4 bevorzugen" -#: netbox/config/parameters.py:77 +#: netbox/netbox/config/parameters.py:77 msgid "Prefer IPv4 addresses over IPv6" msgstr "Bevorzugen Sie IPv4-Adressen gegenüber IPv6" -#: netbox/config/parameters.py:84 +#: netbox/netbox/config/parameters.py:84 msgid "Rack unit height" msgstr "Höhe der Rackeinheit in HE" -#: netbox/config/parameters.py:86 +#: netbox/netbox/config/parameters.py:86 msgid "Default unit height for rendered rack elevations" msgstr "Standardhöhe für gerenderte Rackhöhen" -#: netbox/config/parameters.py:91 +#: netbox/netbox/config/parameters.py:91 msgid "Rack unit width" msgstr "Breite der Rackeinheit" -#: netbox/config/parameters.py:93 +#: netbox/netbox/config/parameters.py:93 msgid "Default unit width for rendered rack elevations" msgstr "Standardbreite für gerenderte Rackhöhen" -#: netbox/config/parameters.py:100 +#: netbox/netbox/config/parameters.py:100 msgid "Powerfeed voltage" msgstr "Spannung der Stromzufuhr" -#: netbox/config/parameters.py:102 +#: netbox/netbox/config/parameters.py:102 msgid "Default voltage for powerfeeds" msgstr "Standardspannung der Stromzufuhr" -#: netbox/config/parameters.py:107 +#: netbox/netbox/config/parameters.py:107 msgid "Powerfeed amperage" msgstr "Stromstärke der Stromzufuhr" -#: netbox/config/parameters.py:109 +#: netbox/netbox/config/parameters.py:109 msgid "Default amperage for powerfeeds" msgstr "Standardstromstärke für Stromzufuhren" -#: netbox/config/parameters.py:114 +#: netbox/netbox/config/parameters.py:114 msgid "Powerfeed max utilization" msgstr "Maximale Auslastung der Stromzufuhr" -#: netbox/config/parameters.py:116 +#: netbox/netbox/config/parameters.py:116 msgid "Default max utilization for powerfeeds" msgstr "Standardwert für die maximale Auslastung der Stromzufuhr" -#: netbox/config/parameters.py:123 templates/core/inc/config_data.html:53 +#: netbox/netbox/config/parameters.py:123 +#: netbox/templates/core/inc/config_data.html:53 msgid "Allowed URL schemes" msgstr "Zulässige URL-Schemata" -#: netbox/config/parameters.py:128 +#: netbox/netbox/config/parameters.py:128 msgid "Permitted schemes for URLs in user-provided content" msgstr "Zulässige Schemata für URLs in vom Benutzer bereitgestellten Inhalten" -#: netbox/config/parameters.py:136 +#: netbox/netbox/config/parameters.py:136 msgid "Default page size" msgstr "Standard-Seitengröße" -#: netbox/config/parameters.py:142 +#: netbox/netbox/config/parameters.py:142 msgid "Maximum page size" msgstr "Maximale Seitengröße" -#: netbox/config/parameters.py:150 templates/core/inc/config_data.html:96 +#: netbox/netbox/config/parameters.py:150 +#: netbox/templates/core/inc/config_data.html:96 msgid "Custom validators" msgstr "Benutzerdefinierte Validatoren" -#: netbox/config/parameters.py:152 +#: netbox/netbox/config/parameters.py:152 msgid "Custom validation rules (JSON)" msgstr "Benutzerdefinierte Validierungsregeln (JSON)" -#: netbox/config/parameters.py:160 templates/core/inc/config_data.html:104 +#: netbox/netbox/config/parameters.py:160 +#: netbox/templates/core/inc/config_data.html:104 msgid "Protection rules" msgstr "Schutzregeln" -#: netbox/config/parameters.py:162 +#: netbox/netbox/config/parameters.py:162 msgid "Deletion protection rules (JSON)" msgstr "Löschschutzregeln (JSON)" -#: netbox/config/parameters.py:172 templates/core/inc/config_data.html:117 +#: netbox/netbox/config/parameters.py:172 +#: netbox/templates/core/inc/config_data.html:117 msgid "Default preferences" msgstr "Standardeinstellungen" -#: netbox/config/parameters.py:174 +#: netbox/netbox/config/parameters.py:174 msgid "Default preferences for new users" msgstr "Standardeinstellungen für neue Benutzer" -#: netbox/config/parameters.py:181 templates/core/inc/config_data.html:129 +#: netbox/netbox/config/parameters.py:181 +#: netbox/templates/core/inc/config_data.html:129 msgid "Maintenance mode" msgstr "Wartungsmodus" -#: netbox/config/parameters.py:183 +#: netbox/netbox/config/parameters.py:183 msgid "Enable maintenance mode" msgstr "Wartungsmodus aktivieren" -#: netbox/config/parameters.py:188 templates/core/inc/config_data.html:133 +#: netbox/netbox/config/parameters.py:188 +#: netbox/templates/core/inc/config_data.html:133 msgid "GraphQL enabled" msgstr "GraphQL aktiviert" -#: netbox/config/parameters.py:190 +#: netbox/netbox/config/parameters.py:190 msgid "Enable the GraphQL API" msgstr "Aktiviere die GraphQL API" -#: netbox/config/parameters.py:195 templates/core/inc/config_data.html:137 +#: netbox/netbox/config/parameters.py:195 +#: netbox/templates/core/inc/config_data.html:137 msgid "Changelog retention" msgstr "Aufbewahrung des Changelogs" -#: netbox/config/parameters.py:197 +#: netbox/netbox/config/parameters.py:197 msgid "Days to retain changelog history (set to zero for unlimited)" msgstr "" "Tage zur Aufbewahrung des Changelog-Verlaufs (für unbegrenzt auf Null zu " "setzen)" -#: netbox/config/parameters.py:202 +#: netbox/netbox/config/parameters.py:202 msgid "Job result retention" msgstr "Beibehaltung der Arbeitsergebnisse" -#: netbox/config/parameters.py:204 +#: netbox/netbox/config/parameters.py:204 msgid "Days to retain job result history (set to zero for unlimited)" msgstr "" "Tage zur Aufbewahrung des Auftragsergebnisverlaufs (für unbegrenzt auf Null " "gesetzt)" -#: netbox/config/parameters.py:209 templates/core/inc/config_data.html:145 +#: netbox/netbox/config/parameters.py:209 +#: netbox/templates/core/inc/config_data.html:145 msgid "Maps URL" msgstr "Landkarten-URL" -#: netbox/config/parameters.py:211 +#: netbox/netbox/config/parameters.py:211 msgid "Base URL for mapping geographic locations" msgstr "Basis-URL für die Kartierung geografischer Standorte" -#: netbox/forms/__init__.py:12 +#: netbox/netbox/forms/__init__.py:12 msgid "Partial match" msgstr "Teilweise Übereinstimmung" -#: netbox/forms/__init__.py:13 +#: netbox/netbox/forms/__init__.py:13 msgid "Exact match" msgstr "Exakte Übereinstimmung" -#: netbox/forms/__init__.py:14 +#: netbox/netbox/forms/__init__.py:14 msgid "Starts with" msgstr "Beginnt mit" -#: netbox/forms/__init__.py:15 +#: netbox/netbox/forms/__init__.py:15 msgid "Ends with" msgstr "Endet mit" -#: netbox/forms/__init__.py:16 +#: netbox/netbox/forms/__init__.py:16 msgid "Regex" msgstr "Regex" -#: netbox/forms/__init__.py:34 +#: netbox/netbox/forms/__init__.py:34 msgid "Object type(s)" msgstr "Objekttyp(en)" -#: netbox/forms/__init__.py:40 +#: netbox/netbox/forms/__init__.py:40 msgid "Lookup" msgstr "Suchen" -#: netbox/forms/base.py:90 +#: netbox/netbox/forms/base.py:90 msgid "" "Tag slugs separated by commas, encased with double quotes (e.g. " "\"tag1,tag2,tag3\")" @@ -10318,417 +11027,428 @@ msgstr "" "Tag-URL-Slugs, getrennt durch Kommas, umgeben von doppelten " "Anführungszeichen (z. B. „tag1, tag2, tag3\")" -#: netbox/forms/base.py:120 +#: netbox/netbox/forms/base.py:120 msgid "Add tags" msgstr "Tags hinzufügen" -#: netbox/forms/base.py:125 +#: netbox/netbox/forms/base.py:125 msgid "Remove tags" msgstr "Tags entfernen" -#: netbox/forms/mixins.py:38 +#: netbox/netbox/forms/mixins.py:38 #, python-brace-format msgid "{class_name} must specify a model class." msgstr "{class_name} muss eine Modellklasse angeben." -#: netbox/models/features.py:280 +#: netbox/netbox/models/features.py:280 #, python-brace-format msgid "Unknown field name '{name}' in custom field data." msgstr "Unbekannter Feldname '{name}'in benutzerdefinierten Felddaten." -#: netbox/models/features.py:286 +#: netbox/netbox/models/features.py:286 #, python-brace-format msgid "Invalid value for custom field '{name}': {error}" msgstr "Ungültiger Wert für das benutzerdefinierte Feld '{name}': {error}" -#: netbox/models/features.py:295 +#: netbox/netbox/models/features.py:295 #, python-brace-format msgid "Custom field '{name}' must have a unique value." msgstr "Benutzerdefiniertes Feld '{name}'muss einen eindeutigen Wert haben." -#: netbox/models/features.py:302 +#: netbox/netbox/models/features.py:302 #, python-brace-format msgid "Missing required custom field '{name}'." msgstr "Erforderliches benutzerdefiniertes Feld fehlt '{name}'." -#: netbox/models/features.py:462 +#: netbox/netbox/models/features.py:462 msgid "Remote data source" msgstr "Entfernte Datenquelle" -#: netbox/models/features.py:472 +#: netbox/netbox/models/features.py:472 msgid "data path" msgstr "Datenpfad" -#: netbox/models/features.py:476 +#: netbox/netbox/models/features.py:476 msgid "Path to remote file (relative to data source root)" msgstr "Pfad zur Remote-Datei (relativ zum Stammverzeichnis)" -#: netbox/models/features.py:479 +#: netbox/netbox/models/features.py:479 msgid "auto sync enabled" msgstr "Auto-Sync aktiviert" -#: netbox/models/features.py:481 +#: netbox/netbox/models/features.py:481 msgid "Enable automatic synchronization of data when the data file is updated" msgstr "" "Automatische Synchronisation von Daten aktivieren, wenn die Datendatei " "aktualisiert wird" -#: netbox/models/features.py:484 +#: netbox/netbox/models/features.py:484 msgid "date synced" msgstr "Datum der Synchronisierung " -#: netbox/models/features.py:578 +#: netbox/netbox/models/features.py:578 #, python-brace-format msgid "{class_name} must implement a sync_data() method." msgstr "{class_name} muss eine sync_data () -Methode implementieren." -#: netbox/navigation/menu.py:11 +#: netbox/netbox/navigation/menu.py:11 msgid "Organization" msgstr "Organisation" -#: netbox/navigation/menu.py:19 +#: netbox/netbox/navigation/menu.py:19 msgid "Site Groups" msgstr "Standortgruppen" -#: netbox/navigation/menu.py:27 +#: netbox/netbox/navigation/menu.py:27 msgid "Tenant Groups" msgstr "Mandantengruppen" -#: netbox/navigation/menu.py:34 +#: netbox/netbox/navigation/menu.py:34 msgid "Contact Groups" msgstr "Kontaktgruppen" -#: netbox/navigation/menu.py:35 templates/tenancy/contactrole.html:8 +#: netbox/netbox/navigation/menu.py:35 +#: netbox/templates/tenancy/contactrole.html:8 msgid "Contact Roles" msgstr "Kontaktrollen" -#: netbox/navigation/menu.py:36 +#: netbox/netbox/navigation/menu.py:36 msgid "Contact Assignments" msgstr "Kontaktzuweisungen" -#: netbox/navigation/menu.py:50 +#: netbox/netbox/navigation/menu.py:50 msgid "Rack Roles" msgstr "Rackrollen" -#: netbox/navigation/menu.py:54 +#: netbox/netbox/navigation/menu.py:54 msgid "Elevations" msgstr "Rackübersichten" -#: netbox/navigation/menu.py:60 netbox/navigation/menu.py:62 +#: netbox/netbox/navigation/menu.py:60 netbox/netbox/navigation/menu.py:62 msgid "Rack Types" msgstr "Racktypen" -#: netbox/navigation/menu.py:76 +#: netbox/netbox/navigation/menu.py:76 msgid "Modules" msgstr "Module" -#: netbox/navigation/menu.py:80 templates/dcim/device.html:160 -#: templates/dcim/virtualdevicecontext.html:8 +#: netbox/netbox/navigation/menu.py:80 netbox/templates/dcim/device.html:160 +#: netbox/templates/dcim/virtualdevicecontext.html:8 msgid "Virtual Device Contexts" msgstr "Virtual Device Context" -#: netbox/navigation/menu.py:88 +#: netbox/netbox/navigation/menu.py:88 msgid "Manufacturers" msgstr "Hersteller" -#: netbox/navigation/menu.py:92 +#: netbox/netbox/navigation/menu.py:92 msgid "Device Components" msgstr "Gerätekomponenten" -#: netbox/navigation/menu.py:104 templates/dcim/inventoryitemrole.html:8 +#: netbox/netbox/navigation/menu.py:104 +#: netbox/templates/dcim/inventoryitemrole.html:8 msgid "Inventory Item Roles" msgstr "Inventarartikelrollen" -#: netbox/navigation/menu.py:111 netbox/navigation/menu.py:115 +#: netbox/netbox/navigation/menu.py:111 netbox/netbox/navigation/menu.py:115 msgid "Connections" msgstr "Verbindungen" -#: netbox/navigation/menu.py:117 +#: netbox/netbox/navigation/menu.py:117 msgid "Cables" msgstr "Kabel" -#: netbox/navigation/menu.py:118 +#: netbox/netbox/navigation/menu.py:118 msgid "Wireless Links" msgstr "Funkverbindungen" -#: netbox/navigation/menu.py:121 +#: netbox/netbox/navigation/menu.py:121 msgid "Interface Connections" msgstr "Schnittstellenverbindungen" -#: netbox/navigation/menu.py:126 +#: netbox/netbox/navigation/menu.py:126 msgid "Console Connections" msgstr "Konsolenverbindungen" -#: netbox/navigation/menu.py:131 +#: netbox/netbox/navigation/menu.py:131 msgid "Power Connections" msgstr "Stromverbindungen" -#: netbox/navigation/menu.py:147 +#: netbox/netbox/navigation/menu.py:147 msgid "Wireless LAN Groups" msgstr "WLAN-Gruppen" -#: netbox/navigation/menu.py:168 +#: netbox/netbox/navigation/menu.py:168 msgid "Prefix & VLAN Roles" msgstr "Prefix- und VLAN-Rollen" -#: netbox/navigation/menu.py:174 +#: netbox/netbox/navigation/menu.py:174 msgid "ASN Ranges" msgstr "ASN-Bereiche" -#: netbox/navigation/menu.py:196 +#: netbox/netbox/navigation/menu.py:196 msgid "VLAN Groups" msgstr "VLAN-Gruppen" -#: netbox/navigation/menu.py:203 +#: netbox/netbox/navigation/menu.py:203 msgid "Service Templates" msgstr "Dienstevorlagen (Ports)" -#: netbox/navigation/menu.py:204 templates/dcim/device.html:302 -#: templates/ipam/ipaddress.html:118 -#: templates/virtualization/virtualmachine.html:154 +#: netbox/netbox/navigation/menu.py:204 netbox/templates/dcim/device.html:302 +#: netbox/templates/ipam/ipaddress.html:118 +#: netbox/templates/virtualization/virtualmachine.html:154 msgid "Services" msgstr "Dienste (Ports)" -#: netbox/navigation/menu.py:211 +#: netbox/netbox/navigation/menu.py:211 msgid "VPN" msgstr "VPN" -#: netbox/navigation/menu.py:215 netbox/navigation/menu.py:217 -#: vpn/tables/tunnels.py:24 +#: netbox/netbox/navigation/menu.py:215 netbox/netbox/navigation/menu.py:217 +#: netbox/vpn/tables/tunnels.py:24 msgid "Tunnels" msgstr "Tunnel" -#: netbox/navigation/menu.py:218 templates/vpn/tunnelgroup.html:8 +#: netbox/netbox/navigation/menu.py:218 +#: netbox/templates/vpn/tunnelgroup.html:8 msgid "Tunnel Groups" msgstr "Tunnelgruppen" -#: netbox/navigation/menu.py:219 +#: netbox/netbox/navigation/menu.py:219 msgid "Tunnel Terminations" msgstr "Tunnelabschlusspunkte" -#: netbox/navigation/menu.py:223 netbox/navigation/menu.py:225 -#: vpn/models/l2vpn.py:64 +#: netbox/netbox/navigation/menu.py:223 netbox/netbox/navigation/menu.py:225 +#: netbox/vpn/models/l2vpn.py:64 msgid "L2VPNs" msgstr "L2VPNs" -#: netbox/navigation/menu.py:226 templates/vpn/l2vpn.html:56 -#: templates/vpn/tunnel.html:72 vpn/tables/tunnels.py:58 +#: 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/navigation/menu.py:232 +#: netbox/netbox/navigation/menu.py:232 msgid "IKE Proposals" msgstr "IKE-Vorschläge" -#: netbox/navigation/menu.py:233 templates/vpn/ikeproposal.html:41 +#: netbox/netbox/navigation/menu.py:233 +#: netbox/templates/vpn/ikeproposal.html:41 msgid "IKE Policies" msgstr "IKE-Richtlinien" -#: netbox/navigation/menu.py:234 +#: netbox/netbox/navigation/menu.py:234 msgid "IPSec Proposals" msgstr "IPSec-Vorschläge" -#: netbox/navigation/menu.py:235 templates/vpn/ipsecproposal.html:37 +#: netbox/netbox/navigation/menu.py:235 +#: netbox/templates/vpn/ipsecproposal.html:37 msgid "IPSec Policies" msgstr "IPSec-Richtlinien" -#: netbox/navigation/menu.py:236 templates/vpn/ikepolicy.html:38 -#: templates/vpn/ipsecpolicy.html:25 +#: netbox/netbox/navigation/menu.py:236 netbox/templates/vpn/ikepolicy.html:38 +#: netbox/templates/vpn/ipsecpolicy.html:25 msgid "IPSec Profiles" msgstr "IPSec-Profile" -#: netbox/navigation/menu.py:243 templates/dcim/device_edit.html:78 -msgid "Virtualization" -msgstr "Virtualisierung" - -#: netbox/navigation/menu.py:251 -#: templates/virtualization/virtualmachine.html:174 -#: templates/virtualization/virtualmachine/base.html:32 -#: templates/virtualization/virtualmachine_list.html:21 -#: virtualization/tables/virtualmachines.py:104 virtualization/views.py:388 +#: netbox/netbox/navigation/menu.py:251 +#: 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 msgid "Virtual Disks" msgstr "Virtuelle Festplatten" -#: netbox/navigation/menu.py:258 +#: netbox/netbox/navigation/menu.py:258 msgid "Cluster Types" msgstr "Clustertypen" -#: netbox/navigation/menu.py:259 +#: netbox/netbox/navigation/menu.py:259 msgid "Cluster Groups" msgstr "Clustergruppen" -#: netbox/navigation/menu.py:273 +#: netbox/netbox/navigation/menu.py:273 msgid "Circuit Types" msgstr "Transportnetztypen" -#: netbox/navigation/menu.py:274 +#: netbox/netbox/navigation/menu.py:274 msgid "Circuit Groups" msgstr "Transportnetzgruppe" -#: netbox/navigation/menu.py:275 templates/circuits/circuit.html:66 +#: netbox/netbox/navigation/menu.py:275 +#: netbox/templates/circuits/circuit.html:66 msgid "Group Assignments" msgstr "Gruppenzuweisung" -#: netbox/navigation/menu.py:276 +#: netbox/netbox/navigation/menu.py:276 msgid "Circuit Terminations" msgstr "Transportnetzabschlusspunkt" -#: netbox/navigation/menu.py:280 netbox/navigation/menu.py:282 +#: netbox/netbox/navigation/menu.py:280 netbox/netbox/navigation/menu.py:282 msgid "Providers" msgstr "Provider" -#: netbox/navigation/menu.py:283 templates/circuits/provider.html:51 +#: netbox/netbox/navigation/menu.py:283 +#: netbox/templates/circuits/provider.html:51 msgid "Provider Accounts" msgstr "Providerkonten" -#: netbox/navigation/menu.py:284 +#: netbox/netbox/navigation/menu.py:284 msgid "Provider Networks" msgstr "Provider Netzwerke" -#: netbox/navigation/menu.py:298 +#: netbox/netbox/navigation/menu.py:298 msgid "Power Panels" msgstr "Stromverteiler" -#: netbox/navigation/menu.py:309 +#: netbox/netbox/navigation/menu.py:309 msgid "Configurations" msgstr "Konfigurationen" -#: netbox/navigation/menu.py:311 +#: netbox/netbox/navigation/menu.py:311 msgid "Config Contexts" msgstr "Konfigurationsvorlage" -#: netbox/navigation/menu.py:312 +#: netbox/netbox/navigation/menu.py:312 msgid "Config Templates" msgstr "Config-Vorlagen" -#: netbox/navigation/menu.py:319 netbox/navigation/menu.py:323 +#: netbox/netbox/navigation/menu.py:319 netbox/netbox/navigation/menu.py:323 msgid "Customization" msgstr "Personalisierung" -#: netbox/navigation/menu.py:325 templates/dcim/device_edit.html:103 -#: templates/dcim/htmx/cable_edit.html:81 -#: templates/dcim/virtualchassis_add.html:31 -#: templates/dcim/virtualchassis_edit.html:40 -#: templates/generic/bulk_edit.html:76 templates/htmx/form.html:19 -#: templates/inc/filter_list.html:30 templates/inc/panels/custom_fields.html:7 -#: templates/ipam/ipaddress_bulk_add.html:35 templates/ipam/vlan_edit.html:59 +#: netbox/netbox/navigation/menu.py:325 +#: netbox/templates/dcim/device_edit.html:103 +#: netbox/templates/dcim/htmx/cable_edit.html:81 +#: netbox/templates/dcim/virtualchassis_add.html:31 +#: netbox/templates/dcim/virtualchassis_edit.html:40 +#: netbox/templates/generic/bulk_edit.html:76 +#: netbox/templates/htmx/form.html:19 netbox/templates/inc/filter_list.html:30 +#: netbox/templates/inc/panels/custom_fields.html:7 +#: netbox/templates/ipam/ipaddress_bulk_add.html:35 +#: netbox/templates/ipam/vlan_edit.html:59 msgid "Custom Fields" msgstr "Benutzerdefinierte Felder" -#: netbox/navigation/menu.py:326 +#: netbox/netbox/navigation/menu.py:326 msgid "Custom Field Choices" msgstr "Benutzerdefinierte Feldoptionen" -#: netbox/navigation/menu.py:327 +#: netbox/netbox/navigation/menu.py:327 msgid "Custom Links" msgstr "Benutzerdefinierte Links" -#: netbox/navigation/menu.py:328 +#: netbox/netbox/navigation/menu.py:328 msgid "Export Templates" msgstr "Exportvorlagen" -#: netbox/navigation/menu.py:329 +#: netbox/netbox/navigation/menu.py:329 msgid "Saved Filters" msgstr "Gespeicherte Filter" -#: netbox/navigation/menu.py:331 +#: netbox/netbox/navigation/menu.py:331 msgid "Image Attachments" msgstr "Bildanhänge" -#: netbox/navigation/menu.py:349 +#: netbox/netbox/navigation/menu.py:349 msgid "Operations" msgstr "Operationen" -#: netbox/navigation/menu.py:353 +#: netbox/netbox/navigation/menu.py:353 msgid "Integrations" msgstr "Integrationen" -#: netbox/navigation/menu.py:355 +#: netbox/netbox/navigation/menu.py:355 msgid "Data Sources" msgstr "Datenquellen" -#: netbox/navigation/menu.py:356 +#: netbox/netbox/navigation/menu.py:356 msgid "Event Rules" msgstr "Ereignisregeln" -#: netbox/navigation/menu.py:357 +#: netbox/netbox/navigation/menu.py:357 msgid "Webhooks" msgstr "Webhooks" -#: netbox/navigation/menu.py:361 netbox/navigation/menu.py:365 -#: netbox/views/generic/feature_views.py:153 -#: templates/extras/report/base.html:37 templates/extras/script/base.html:36 +#: netbox/netbox/navigation/menu.py:361 netbox/netbox/navigation/menu.py:365 +#: netbox/netbox/views/generic/feature_views.py:153 +#: netbox/templates/extras/report/base.html:37 +#: netbox/templates/extras/script/base.html:36 msgid "Jobs" msgstr "Jobs" -#: netbox/navigation/menu.py:371 +#: netbox/netbox/navigation/menu.py:371 msgid "Logging" msgstr "Protokollierung" -#: netbox/navigation/menu.py:373 +#: netbox/netbox/navigation/menu.py:373 msgid "Notification Groups" msgstr "Benachrichtigungsgruppen" -#: netbox/navigation/menu.py:374 +#: netbox/netbox/navigation/menu.py:374 msgid "Journal Entries" msgstr "Journaleinträge" -#: netbox/navigation/menu.py:375 templates/core/objectchange.html:9 -#: templates/core/objectchange_list.html:4 +#: netbox/netbox/navigation/menu.py:375 +#: netbox/templates/core/objectchange.html:9 +#: netbox/templates/core/objectchange_list.html:4 msgid "Change Log" msgstr "Änderungsprotokoll" -#: netbox/navigation/menu.py:382 templates/inc/user_menu.html:29 +#: netbox/netbox/navigation/menu.py:382 netbox/templates/inc/user_menu.html:29 msgid "Admin" msgstr "Admin" -#: netbox/navigation/menu.py:430 templates/account/base.html:27 -#: templates/inc/user_menu.html:57 +#: netbox/netbox/navigation/menu.py:430 netbox/templates/account/base.html:27 +#: netbox/templates/inc/user_menu.html:57 msgid "API Tokens" msgstr "API-Token" -#: netbox/navigation/menu.py:437 users/forms/model_forms.py:187 -#: users/forms/model_forms.py:195 users/forms/model_forms.py:242 -#: users/forms/model_forms.py:249 +#: netbox/netbox/navigation/menu.py:437 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/navigation/menu.py:445 netbox/navigation/menu.py:449 -#: templates/core/system.html:7 +#: netbox/netbox/navigation/menu.py:445 netbox/netbox/navigation/menu.py:449 +#: netbox/templates/core/system.html:7 msgid "System" msgstr "System" -#: netbox/navigation/menu.py:454 netbox/navigation/menu.py:502 -#: templates/500.html:35 templates/account/preferences.html:22 -#: templates/core/plugin.html:13 templates/core/plugin_list.html:7 -#: templates/core/plugin_list.html:12 +#: netbox/netbox/navigation/menu.py:454 netbox/netbox/navigation/menu.py:502 +#: netbox/templates/500.html:35 netbox/templates/account/preferences.html:22 +#: netbox/templates/core/plugin.html:13 +#: netbox/templates/core/plugin_list.html:7 +#: netbox/templates/core/plugin_list.html:12 msgid "Plugins" msgstr "Plugins" -#: netbox/navigation/menu.py:459 +#: netbox/netbox/navigation/menu.py:459 msgid "Configuration History" msgstr "Konfigurationsverlauf" -#: netbox/navigation/menu.py:465 templates/core/rq_task.html:8 -#: templates/core/rq_task_list.html:22 +#: netbox/netbox/navigation/menu.py:465 netbox/templates/core/rq_task.html:8 +#: netbox/templates/core/rq_task_list.html:22 msgid "Background Tasks" msgstr "Hintergrundaufgaben" -#: netbox/plugins/navigation.py:47 netbox/plugins/navigation.py:69 +#: netbox/netbox/plugins/navigation.py:47 +#: netbox/netbox/plugins/navigation.py:69 msgid "Permissions must be passed as a tuple or list." msgstr "Berechtigungen müssen als Tupel oder Liste übergeben werden." -#: netbox/plugins/navigation.py:51 +#: netbox/netbox/plugins/navigation.py:51 msgid "Buttons must be passed as a tuple or list." msgstr "Schaltflächen müssen als Tupel oder Liste übergeben werden." -#: netbox/plugins/navigation.py:73 +#: netbox/netbox/plugins/navigation.py:73 msgid "Button color must be a choice within ButtonColorChoices." msgstr "" "Die Farbe der Schaltfläche muss innerhalb von ButtonColorChoices ausgewählt " "werden." -#: netbox/plugins/registration.py:25 +#: netbox/netbox/plugins/registration.py:25 #, python-brace-format msgid "" "PluginTemplateExtension class {template_extension} was passed as an " @@ -10737,7 +11457,7 @@ msgstr "" "PluginTemplateExtension-Klasse {template_extension} wurde als Instanz " "übergeben!" -#: netbox/plugins/registration.py:31 +#: netbox/netbox/plugins/registration.py:31 #, python-brace-format msgid "" "{template_extension} is not a subclass of " @@ -10746,198 +11466,199 @@ msgstr "" "{template_extension} ist keine Unterklasse von " "NetBox.Plugins.PluginTemplateExtension!" -#: netbox/plugins/registration.py:51 +#: netbox/netbox/plugins/registration.py:51 #, python-brace-format msgid "{item} must be an instance of netbox.plugins.PluginMenuItem" msgstr "{item} muss eine Instanz von NetBox.Plugins.PluginMenuItem sein" -#: netbox/plugins/registration.py:62 +#: netbox/netbox/plugins/registration.py:62 #, 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/plugins/registration.py:67 +#: netbox/netbox/plugins/registration.py:67 #, python-brace-format msgid "{button} must be an instance of netbox.plugins.PluginMenuButton" msgstr "{button} muss eine Instanz von NetBox.Plugins.PluginMenuButton sein" -#: netbox/plugins/templates.py:37 +#: netbox/netbox/plugins/templates.py:37 msgid "extra_context must be a dictionary" msgstr "extra_context muss ein Dictionary sein" -#: netbox/preferences.py:19 +#: netbox/netbox/preferences.py:19 msgid "HTMX Navigation" msgstr "HTMX-Navigation" -#: netbox/preferences.py:24 +#: netbox/netbox/preferences.py:24 msgid "Enable dynamic UI navigation" msgstr "Dynamische UI-Navigation aktivieren" -#: netbox/preferences.py:26 +#: netbox/netbox/preferences.py:26 msgid "Experimental feature" msgstr "Experimentelle Funktion" -#: netbox/preferences.py:29 +#: netbox/netbox/preferences.py:29 msgid "Language" msgstr "Sprache" -#: netbox/preferences.py:34 +#: netbox/netbox/preferences.py:34 msgid "Forces UI translation to the specified language" msgstr "" "Erzwingt die Übersetzung der Benutzeroberfläche in die angegebene Sprache" -#: netbox/preferences.py:36 +#: netbox/netbox/preferences.py:36 msgid "Support for translation has been disabled locally" msgstr "Die Unterstützung für Übersetzungen wurde lokal deaktiviert" -#: netbox/preferences.py:42 +#: netbox/netbox/preferences.py:42 msgid "Page length" msgstr "Länge der Seite" -#: netbox/preferences.py:44 +#: netbox/netbox/preferences.py:44 msgid "The default number of objects to display per page" msgstr "Die Standardanzahl der pro Seite anzuzeigenden Objekte" -#: netbox/preferences.py:48 +#: netbox/netbox/preferences.py:48 msgid "Paginator placement" msgstr "Platzierung des Paginators" -#: netbox/preferences.py:50 +#: netbox/netbox/preferences.py:50 msgid "Bottom" msgstr "Unten" -#: netbox/preferences.py:51 +#: netbox/netbox/preferences.py:51 msgid "Top" msgstr "Oben" -#: netbox/preferences.py:52 +#: netbox/netbox/preferences.py:52 msgid "Both" msgstr "Beide" -#: netbox/preferences.py:55 +#: netbox/netbox/preferences.py:55 msgid "Where the paginator controls will be displayed relative to a table" msgstr "" "Wo die Seiten-Steuerelemente relativ zu einer Tabelle angezeigt werden" -#: netbox/preferences.py:60 +#: netbox/netbox/preferences.py:60 msgid "Data format" msgstr "Datenformat" -#: netbox/preferences.py:65 +#: netbox/netbox/preferences.py:65 msgid "The preferred syntax for displaying generic data within the UI" msgstr "" "Die bevorzugte Syntax für die Anzeige generischer Daten in der " "Benutzeroberfläche" -#: netbox/registry.py:14 +#: netbox/netbox/registry.py:14 #, python-brace-format msgid "Invalid store: {key}" msgstr "Ungültiger Shop: {key}" -#: netbox/registry.py:17 +#: netbox/netbox/registry.py:17 msgid "Cannot add stores to registry after initialization" msgstr "" "Stores können nach der Initialisierung nicht zur Registrierung hinzugefügt " "werden" -#: netbox/registry.py:20 +#: netbox/netbox/registry.py:20 msgid "Cannot delete stores from registry" msgstr "Stores können nicht aus der Registrierung gelöscht werden" -#: netbox/settings.py:760 +#: netbox/netbox/settings.py:760 msgid "Czech" msgstr "Tschechisch" -#: netbox/settings.py:761 +#: netbox/netbox/settings.py:761 msgid "Danish" msgstr "Dänisch" -#: netbox/settings.py:762 +#: netbox/netbox/settings.py:762 msgid "German" msgstr "Deutsch" -#: netbox/settings.py:763 +#: netbox/netbox/settings.py:763 msgid "English" msgstr "Englisch" -#: netbox/settings.py:764 +#: netbox/netbox/settings.py:764 msgid "Spanish" msgstr "Spanisch" -#: netbox/settings.py:765 +#: netbox/netbox/settings.py:765 msgid "French" msgstr "Französisch" -#: netbox/settings.py:766 +#: netbox/netbox/settings.py:766 msgid "Italian" msgstr "Italenisch" -#: netbox/settings.py:767 +#: netbox/netbox/settings.py:767 msgid "Japanese" msgstr "Japanisch" -#: netbox/settings.py:768 +#: netbox/netbox/settings.py:768 msgid "Dutch" msgstr "Niederländisch" -#: netbox/settings.py:769 +#: netbox/netbox/settings.py:769 msgid "Polish" msgstr "Polnisch" -#: netbox/settings.py:770 +#: netbox/netbox/settings.py:770 msgid "Portuguese" msgstr "Portugiesisch" -#: netbox/settings.py:771 +#: netbox/netbox/settings.py:771 msgid "Russian" msgstr "Russisch" -#: netbox/settings.py:772 +#: netbox/netbox/settings.py:772 msgid "Turkish" msgstr "Türkisch" -#: netbox/settings.py:773 +#: netbox/netbox/settings.py:773 msgid "Ukrainian" msgstr "Ukrainisch" -#: netbox/settings.py:774 +#: netbox/netbox/settings.py:774 msgid "Chinese" msgstr "Chinesisch" -#: netbox/tables/columns.py:176 +#: netbox/netbox/tables/columns.py:176 msgid "Select all" msgstr "Alles auswählen" -#: netbox/tables/columns.py:189 +#: netbox/netbox/tables/columns.py:189 msgid "Toggle all" msgstr "Alles umschalten" -#: netbox/tables/columns.py:300 +#: netbox/netbox/tables/columns.py:300 msgid "Toggle Dropdown" msgstr "Dropdown umschalten" -#: netbox/tables/columns.py:572 templates/core/job.html:53 +#: netbox/netbox/tables/columns.py:572 netbox/templates/core/job.html:53 msgid "Error" msgstr "Fehler" -#: netbox/tables/tables.py:58 +#: netbox/netbox/tables/tables.py:58 #, python-brace-format msgid "No {model_name} found" msgstr "Kein {model_name} gefunden" -#: netbox/tables/tables.py:249 templates/generic/bulk_import.html:117 +#: netbox/netbox/tables/tables.py:249 +#: netbox/templates/generic/bulk_import.html:117 msgid "Field" msgstr "Feld" -#: netbox/tables/tables.py:252 +#: netbox/netbox/tables/tables.py:252 msgid "Value" msgstr "Wert" -#: netbox/tests/dummy_plugin/navigation.py:29 +#: netbox/netbox/tests/dummy_plugin/navigation.py:29 msgid "Dummy Plugin" msgstr "Dummy-Plugin" -#: netbox/views/generic/bulk_views.py:114 +#: netbox/netbox/views/generic/bulk_views.py:114 #, python-brace-format msgid "" "There was an error rendering the selected export template ({template}): " @@ -10946,56 +11667,56 @@ msgstr "" "Beim Rendern der ausgewählten Exportvorlage ist ein Fehler aufgetreten " "({template}): {error}" -#: netbox/views/generic/bulk_views.py:416 +#: netbox/netbox/views/generic/bulk_views.py:416 #, python-brace-format msgid "Row {i}: Object with ID {id} does not exist" msgstr "Reihe {i}: Objekt mit ID {id} existiert nicht" -#: netbox/views/generic/bulk_views.py:702 -#: netbox/views/generic/bulk_views.py:900 -#: netbox/views/generic/bulk_views.py:948 +#: netbox/netbox/views/generic/bulk_views.py:709 +#: netbox/netbox/views/generic/bulk_views.py:910 +#: netbox/netbox/views/generic/bulk_views.py:958 #, python-brace-format msgid "No {object_type} were selected." msgstr "Kein {object_type}ausgewählt" -#: netbox/views/generic/bulk_views.py:782 +#: netbox/netbox/views/generic/bulk_views.py:788 #, python-brace-format msgid "Renamed {count} {object_type}" msgstr "Umbenannt {count} {object_type}" -#: netbox/views/generic/bulk_views.py:878 +#: netbox/netbox/views/generic/bulk_views.py:888 #, python-brace-format msgid "Deleted {count} {object_type}" msgstr "Gelöscht {count} {object_type}" -#: netbox/views/generic/feature_views.py:40 +#: netbox/netbox/views/generic/feature_views.py:40 msgid "Changelog" msgstr "Changelog" -#: netbox/views/generic/feature_views.py:93 +#: netbox/netbox/views/generic/feature_views.py:93 msgid "Journal" msgstr "Journal" -#: netbox/views/generic/feature_views.py:207 +#: netbox/netbox/views/generic/feature_views.py:207 msgid "Unable to synchronize data: No data file set." msgstr "Synchronisation nicht möglich: Keine Datei ausgewählt bzw. gesetzt." -#: netbox/views/generic/feature_views.py:211 +#: netbox/netbox/views/generic/feature_views.py:211 #, python-brace-format msgid "Synchronized data for {object_type} {object}." msgstr "Daten synchronisiert für {object_type} {object}." -#: netbox/views/generic/feature_views.py:236 +#: netbox/netbox/views/generic/feature_views.py:236 #, python-brace-format msgid "Synced {count} {object_type}" msgstr "Synchronisiert {count} {object_type}" -#: netbox/views/generic/object_views.py:108 +#: netbox/netbox/views/generic/object_views.py:108 #, python-brace-format msgid "{class_name} must implement get_children()" msgstr "{class_name} muss get_children () implementieren" -#: netbox/views/misc.py:44 +#: netbox/netbox/views/misc.py:46 msgid "" "There was an error loading the dashboard configuration. A default dashboard " "is in use." @@ -11003,707 +11724,749 @@ msgstr "" "Beim Laden der Dashboardkonfiguration ist ein Fehler aufgetreten. Ein " "Standarddashboard wird verwendet." -#: templates/403.html:4 +#: netbox/templates/403.html:4 msgid "Access Denied" msgstr "Zugriff verweigert" -#: templates/403.html:9 +#: netbox/templates/403.html:9 msgid "You do not have permission to access this page" msgstr "Sie sind nicht berechtigt, auf diese Seite zuzugreifen" -#: templates/404.html:4 +#: netbox/templates/404.html:4 msgid "Page Not Found" msgstr "Seite wurde nicht gefunden" -#: templates/404.html:9 +#: netbox/templates/404.html:9 msgid "The requested page does not exist" msgstr "Die angeforderte Seite existiert nicht" -#: templates/500.html:7 templates/500.html:18 +#: netbox/templates/500.html:7 netbox/templates/500.html:18 msgid "Server Error" msgstr "Serverfehler" -#: templates/500.html:23 +#: netbox/templates/500.html:23 msgid "There was a problem with your request. Please contact an administrator" msgstr "" "Bei Ihrer Anfrage ist ein Problem aufgetreten. Bitte kontaktieren Sie einen " "Administrator" -#: templates/500.html:28 +#: netbox/templates/500.html:28 msgid "The complete exception is provided below" msgstr "Die vollständige Ausnahme finden Sie unten." -#: templates/500.html:33 templates/core/system.html:40 +#: netbox/templates/500.html:33 netbox/templates/core/system.html:40 msgid "Python version" msgstr "Python-Version" -#: templates/500.html:34 +#: netbox/templates/500.html:34 msgid "NetBox version" msgstr "NetBox-Version" -#: templates/500.html:36 +#: netbox/templates/500.html:36 msgid "None installed" msgstr "Keine installiert" -#: templates/500.html:39 +#: netbox/templates/500.html:39 msgid "If further assistance is required, please post to the" msgstr "" "Wenn Sie weitere Unterstützung benötigen, senden Sie bitte eine E-Mail an" -#: templates/500.html:39 +#: netbox/templates/500.html:39 msgid "NetBox discussion forum" msgstr "NetBox-Diskussionsforum" -#: templates/500.html:39 +#: netbox/templates/500.html:39 msgid "on GitHub" msgstr "auf GitHub" -#: templates/500.html:42 templates/base/40x.html:17 +#: netbox/templates/500.html:42 netbox/templates/base/40x.html:17 msgid "Home Page" msgstr "Startseite" -#: templates/account/base.html:7 templates/inc/user_menu.html:45 -#: vpn/forms/bulk_edit.py:255 vpn/forms/filtersets.py:189 -#: vpn/forms/model_forms.py:379 +#: netbox/templates/account/base.html:7 netbox/templates/inc/user_menu.html:45 +#: netbox/vpn/forms/bulk_edit.py:255 netbox/vpn/forms/filtersets.py:189 +#: netbox/vpn/forms/model_forms.py:379 msgid "Profile" msgstr "Profil" -#: templates/account/base.html:13 templates/account/notifications.html:7 -#: templates/inc/user_menu.html:15 +#: netbox/templates/account/base.html:13 +#: netbox/templates/account/notifications.html:7 +#: netbox/templates/inc/user_menu.html:15 msgid "Notifications" msgstr "Benachrichtigungen" -#: templates/account/base.html:16 templates/account/subscriptions.html:7 -#: templates/inc/user_menu.html:51 +#: netbox/templates/account/base.html:16 +#: netbox/templates/account/subscriptions.html:7 +#: netbox/templates/inc/user_menu.html:51 msgid "Subscriptions" msgstr "Abos" -#: templates/account/base.html:19 templates/inc/user_menu.html:54 +#: netbox/templates/account/base.html:19 +#: netbox/templates/inc/user_menu.html:54 msgid "Preferences" msgstr "Einstellungen" -#: templates/account/password.html:5 +#: netbox/templates/account/password.html:5 msgid "Change Password" msgstr "Passwort ändern" -#: templates/account/password.html:19 templates/account/preferences.html:77 -#: templates/core/configrevision_restore.html:63 -#: templates/dcim/devicebay_populate.html:34 -#: templates/dcim/virtualchassis_add_member.html:26 -#: templates/dcim/virtualchassis_edit.html:103 -#: templates/extras/object_journal.html:26 templates/extras/script.html:38 -#: templates/generic/bulk_add_component.html:67 -#: templates/generic/bulk_delete.html:65 templates/generic/bulk_edit.html:106 -#: templates/generic/bulk_import.html:56 templates/generic/bulk_import.html:78 -#: templates/generic/bulk_import.html:100 -#: templates/generic/bulk_remove.html:62 templates/generic/bulk_rename.html:63 -#: templates/generic/confirmation_form.html:19 -#: templates/generic/object_edit.html:72 templates/htmx/delete_form.html:53 -#: templates/htmx/delete_form.html:55 templates/ipam/ipaddress_assign.html:28 -#: templates/virtualization/cluster_add_devices.html:30 +#: netbox/templates/account/password.html:19 +#: netbox/templates/account/preferences.html:77 +#: netbox/templates/core/configrevision_restore.html:63 +#: netbox/templates/dcim/devicebay_populate.html:34 +#: netbox/templates/dcim/virtualchassis_add_member.html:26 +#: netbox/templates/dcim/virtualchassis_edit.html:103 +#: netbox/templates/extras/object_journal.html:26 +#: netbox/templates/extras/script.html:38 +#: netbox/templates/generic/bulk_add_component.html:67 +#: netbox/templates/generic/bulk_delete.html:65 +#: netbox/templates/generic/bulk_edit.html:106 +#: netbox/templates/generic/bulk_import.html:56 +#: netbox/templates/generic/bulk_import.html:78 +#: netbox/templates/generic/bulk_import.html:100 +#: netbox/templates/generic/bulk_remove.html:62 +#: netbox/templates/generic/bulk_rename.html:63 +#: netbox/templates/generic/confirmation_form.html:19 +#: netbox/templates/generic/object_edit.html:72 +#: netbox/templates/htmx/delete_form.html:53 +#: netbox/templates/htmx/delete_form.html:55 +#: netbox/templates/ipam/ipaddress_assign.html:28 +#: netbox/templates/virtualization/cluster_add_devices.html:30 msgid "Cancel" msgstr "Abbrechen" -#: templates/account/password.html:20 templates/account/preferences.html:78 -#: templates/dcim/devicebay_populate.html:35 -#: templates/dcim/virtualchassis_add_member.html:28 -#: templates/dcim/virtualchassis_edit.html:105 -#: templates/extras/dashboard/widget_add.html:26 -#: templates/extras/dashboard/widget_config.html:19 -#: templates/extras/object_journal.html:27 -#: templates/generic/object_edit.html:75 -#: utilities/templates/helpers/applied_filters.html:16 -#: utilities/templates/helpers/table_config_form.html:40 +#: netbox/templates/account/password.html:20 +#: netbox/templates/account/preferences.html:78 +#: netbox/templates/dcim/devicebay_populate.html:35 +#: netbox/templates/dcim/virtualchassis_add_member.html:28 +#: netbox/templates/dcim/virtualchassis_edit.html:105 +#: netbox/templates/extras/dashboard/widget_add.html:26 +#: netbox/templates/extras/dashboard/widget_config.html:19 +#: netbox/templates/extras/object_journal.html:27 +#: netbox/templates/generic/object_edit.html:75 +#: netbox/utilities/templates/helpers/applied_filters.html:16 +#: netbox/utilities/templates/helpers/table_config_form.html:40 msgid "Save" msgstr "Speichern" -#: templates/account/preferences.html:34 +#: netbox/templates/account/preferences.html:34 msgid "Table Configurations" msgstr "Tabellenkonfigurationen" -#: templates/account/preferences.html:39 +#: netbox/templates/account/preferences.html:39 msgid "Clear table preferences" msgstr "Tabelleneinstellungen löschen" -#: templates/account/preferences.html:47 +#: netbox/templates/account/preferences.html:47 msgid "Toggle All" msgstr "Alles umschalten" -#: templates/account/preferences.html:49 +#: netbox/templates/account/preferences.html:49 msgid "Table" msgstr "Tabelle" -#: templates/account/preferences.html:50 +#: netbox/templates/account/preferences.html:50 msgid "Ordering" msgstr "Sortierung" -#: templates/account/preferences.html:51 +#: netbox/templates/account/preferences.html:51 msgid "Columns" msgstr "Spalten" -#: templates/account/preferences.html:71 templates/dcim/cable_trace.html:113 -#: templates/extras/object_configcontext.html:43 +#: netbox/templates/account/preferences.html:71 +#: netbox/templates/dcim/cable_trace.html:113 +#: netbox/templates/extras/object_configcontext.html:43 msgid "None found" msgstr "Keine gefunden" -#: templates/account/profile.html:6 +#: netbox/templates/account/profile.html:6 msgid "User Profile" msgstr "Benutzerprofil" -#: templates/account/profile.html:12 +#: netbox/templates/account/profile.html:12 msgid "Account Details" msgstr "Kontodetails" -#: templates/account/profile.html:29 templates/tenancy/contact.html:43 -#: templates/users/user.html:25 tenancy/forms/bulk_edit.py:109 +#: netbox/templates/account/profile.html:29 +#: netbox/templates/tenancy/contact.html:43 +#: netbox/templates/users/user.html:25 netbox/tenancy/forms/bulk_edit.py:109 msgid "Email" msgstr "E-Mail" -#: templates/account/profile.html:33 templates/users/user.html:29 +#: netbox/templates/account/profile.html:33 +#: netbox/templates/users/user.html:29 msgid "Account Created" msgstr "Konto erstellt" -#: templates/account/profile.html:37 templates/users/user.html:33 +#: netbox/templates/account/profile.html:37 +#: netbox/templates/users/user.html:33 msgid "Last Login" msgstr "Letzte Anmeldung" -#: templates/account/profile.html:41 templates/users/user.html:45 +#: netbox/templates/account/profile.html:41 +#: netbox/templates/users/user.html:45 msgid "Superuser" msgstr "Superuser" -#: templates/account/profile.html:45 templates/inc/user_menu.html:31 -#: templates/users/user.html:41 +#: netbox/templates/account/profile.html:45 +#: netbox/templates/inc/user_menu.html:31 netbox/templates/users/user.html:41 msgid "Staff" msgstr "Mitarbeiter" -#: templates/account/profile.html:53 templates/users/objectpermission.html:82 -#: templates/users/user.html:53 +#: netbox/templates/account/profile.html:53 +#: netbox/templates/users/objectpermission.html:82 +#: netbox/templates/users/user.html:53 msgid "Assigned Groups" msgstr "Zugewiesene Gruppen" -#: templates/account/profile.html:58 -#: templates/circuits/circuit_terminations_swap.html:18 -#: templates/circuits/circuit_terminations_swap.html:26 -#: templates/circuits/circuittermination.html:34 -#: templates/circuits/inc/circuit_termination.html:68 -#: templates/core/objectchange.html:124 templates/core/objectchange.html:142 -#: templates/dcim/devicebay.html:59 -#: templates/dcim/inc/panels/inventory_items.html:45 -#: templates/dcim/interface.html:296 templates/dcim/modulebay.html:80 -#: templates/extras/configcontext.html:70 templates/extras/eventrule.html:66 -#: templates/extras/htmx/script_result.html:60 -#: templates/extras/webhook.html:65 templates/extras/webhook.html:75 -#: templates/inc/panel_table.html:13 templates/inc/panels/comments.html:10 -#: templates/ipam/inc/panels/fhrp_groups.html:56 templates/users/group.html:34 -#: templates/users/group.html:44 templates/users/objectpermission.html:77 -#: templates/users/objectpermission.html:87 templates/users/user.html:58 -#: templates/users/user.html:68 +#: netbox/templates/account/profile.html:58 +#: netbox/templates/circuits/circuit_terminations_swap.html:18 +#: netbox/templates/circuits/circuit_terminations_swap.html:26 +#: netbox/templates/circuits/circuittermination.html:34 +#: netbox/templates/circuits/inc/circuit_termination.html:68 +#: netbox/templates/core/objectchange.html:124 +#: 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/modulebay.html:80 +#: netbox/templates/extras/configcontext.html:70 +#: netbox/templates/extras/eventrule.html:66 +#: netbox/templates/extras/htmx/script_result.html:60 +#: netbox/templates/extras/webhook.html:65 +#: netbox/templates/extras/webhook.html:75 +#: netbox/templates/inc/panel_table.html:13 +#: netbox/templates/inc/panels/comments.html:10 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:56 +#: netbox/templates/users/group.html:34 netbox/templates/users/group.html:44 +#: netbox/templates/users/objectpermission.html:77 +#: netbox/templates/users/objectpermission.html:87 +#: netbox/templates/users/user.html:58 netbox/templates/users/user.html:68 msgid "None" msgstr "Keine" -#: templates/account/profile.html:68 templates/users/user.html:78 +#: netbox/templates/account/profile.html:68 +#: netbox/templates/users/user.html:78 msgid "Recent Activity" msgstr "Letzte Aktivität" -#: templates/account/token.html:8 templates/account/token_list.html:6 +#: netbox/templates/account/token.html:8 +#: netbox/templates/account/token_list.html:6 msgid "My API Tokens" msgstr "Meine API-Token" -#: templates/account/token.html:11 templates/account/token.html:19 -#: templates/users/token.html:6 templates/users/token.html:14 -#: users/forms/filtersets.py:120 +#: netbox/templates/account/token.html:11 +#: netbox/templates/account/token.html:19 netbox/templates/users/token.html:6 +#: netbox/templates/users/token.html:14 netbox/users/forms/filtersets.py:120 msgid "Token" msgstr "API-Token" -#: templates/account/token.html:39 templates/users/token.html:31 -#: users/forms/bulk_edit.py:107 +#: netbox/templates/account/token.html:39 netbox/templates/users/token.html:31 +#: netbox/users/forms/bulk_edit.py:107 msgid "Write enabled" msgstr "Schreiben aktiviert" -#: templates/account/token.html:51 templates/users/token.html:43 +#: netbox/templates/account/token.html:51 netbox/templates/users/token.html:43 msgid "Last used" msgstr "Zuletzt benutzt" -#: templates/account/token_list.html:12 +#: netbox/templates/account/token_list.html:12 msgid "Add a Token" msgstr "Einen API-Token hinzufügen" -#: templates/base/base.html:22 templates/home.html:27 +#: netbox/templates/base/base.html:22 netbox/templates/home.html:27 msgid "Home" msgstr "Home" -#: templates/base/layout.html:25 +#: netbox/templates/base/layout.html:25 msgid "NetBox Motif" msgstr "NetBox-Motiv" -#: templates/base/layout.html:38 templates/base/layout.html:39 -#: templates/login.html:14 templates/login.html:15 +#: netbox/templates/base/layout.html:38 netbox/templates/base/layout.html:39 +#: netbox/templates/login.html:14 netbox/templates/login.html:15 msgid "NetBox Logo" msgstr "NetBox-Logo" -#: templates/base/layout.html:150 templates/base/layout.html:151 +#: netbox/templates/base/layout.html:150 netbox/templates/base/layout.html:151 msgid "Docs" msgstr "Doku" -#: templates/base/layout.html:156 templates/base/layout.html:157 -#: templates/rest_framework/api.html:10 +#: netbox/templates/base/layout.html:156 netbox/templates/base/layout.html:157 +#: netbox/templates/rest_framework/api.html:10 msgid "REST API" msgstr "REST-API" -#: templates/base/layout.html:162 templates/base/layout.html:163 +#: netbox/templates/base/layout.html:162 netbox/templates/base/layout.html:163 msgid "REST API documentation" msgstr "REST-API-Dokumentation" -#: templates/base/layout.html:169 templates/base/layout.html:170 +#: netbox/templates/base/layout.html:169 netbox/templates/base/layout.html:170 msgid "GraphQL API" msgstr "GraphQL-API" -#: templates/base/layout.html:185 templates/base/layout.html:186 +#: netbox/templates/base/layout.html:185 netbox/templates/base/layout.html:186 msgid "NetBox Labs Support" msgstr "NetBox Labs Support" -#: templates/base/layout.html:194 templates/base/layout.html:195 +#: netbox/templates/base/layout.html:194 netbox/templates/base/layout.html:195 msgid "Source Code" msgstr "Quellcode" -#: templates/base/layout.html:200 templates/base/layout.html:201 +#: netbox/templates/base/layout.html:200 netbox/templates/base/layout.html:201 msgid "Community" msgstr "Community" -#: templates/circuits/circuit.html:47 +#: netbox/templates/circuits/circuit.html:47 msgid "Install Date" msgstr "Datum der Installation" -#: templates/circuits/circuit.html:51 +#: netbox/templates/circuits/circuit.html:51 msgid "Termination Date" msgstr "Kündigungsdatum" -#: templates/circuits/circuit.html:70 -#: templates/ipam/inc/panels/fhrp_groups.html:15 +#: netbox/templates/circuits/circuit.html:70 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:15 msgid "Assign Group" msgstr "Gruppe zuweisen" -#: templates/circuits/circuit_terminations_swap.html:4 +#: netbox/templates/circuits/circuit_terminations_swap.html:4 msgid "Swap Circuit Terminations" msgstr "Transportnetzabschlüsse austauschen" -#: templates/circuits/circuit_terminations_swap.html:8 +#: netbox/templates/circuits/circuit_terminations_swap.html:8 #, python-format msgid "Swap these terminations for circuit %(circuit)s?" msgstr "Tauschen Sie diese Abschlüsse gegen Tranportnetz aus: %(circuit)s?" -#: templates/circuits/circuit_terminations_swap.html:14 +#: netbox/templates/circuits/circuit_terminations_swap.html:14 msgid "A side" msgstr "A Seite" -#: templates/circuits/circuit_terminations_swap.html:22 +#: netbox/templates/circuits/circuit_terminations_swap.html:22 msgid "Z side" msgstr "Z-Seite" -#: templates/circuits/circuitgroup.html:16 +#: netbox/templates/circuits/circuitgroup.html:16 msgid "Assign Circuit" msgstr "Zugewiesenes Transportnetz" -#: templates/circuits/circuitgroupassignment.html:19 +#: netbox/templates/circuits/circuitgroupassignment.html:19 msgid "Circuit Group Assignment" msgstr "Zugewiesene Transportnetzgruppe" -#: templates/circuits/circuittype.html:10 +#: netbox/templates/circuits/circuittype.html:10 msgid "Add Circuit" msgstr "Transportnetz hinzufügen" -#: templates/circuits/circuittype.html:19 +#: netbox/templates/circuits/circuittype.html:19 msgid "Circuit Type" msgstr "Transportnetz Typ" -#: templates/circuits/inc/circuit_termination.html:10 -#: templates/dcim/manufacturer.html:11 -#: templates/generic/bulk_add_component.html:22 -#: templates/users/objectpermission.html:38 -#: utilities/templates/buttons/add.html:4 -#: utilities/templates/helpers/table_config_form.html:20 +#: netbox/templates/circuits/inc/circuit_termination.html:10 +#: netbox/templates/dcim/manufacturer.html:11 +#: netbox/templates/generic/bulk_add_component.html:22 +#: netbox/templates/users/objectpermission.html:38 +#: netbox/utilities/templates/buttons/add.html:4 +#: netbox/utilities/templates/helpers/table_config_form.html:20 msgid "Add" msgstr "Hinzufügen" -#: templates/circuits/inc/circuit_termination.html:15 -#: templates/circuits/inc/circuit_termination_fields.html:36 -#: templates/dcim/inc/panels/inventory_items.html:32 -#: templates/dcim/powerpanel.html:56 templates/extras/script_list.html:30 -#: templates/generic/object_edit.html:47 -#: templates/ipam/inc/ipaddress_edit_header.html:7 -#: templates/ipam/inc/panels/fhrp_groups.html:43 -#: utilities/templates/buttons/edit.html:3 +#: netbox/templates/circuits/inc/circuit_termination.html:15 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:36 +#: netbox/templates/dcim/inc/panels/inventory_items.html:32 +#: netbox/templates/dcim/powerpanel.html:56 +#: netbox/templates/extras/script_list.html:30 +#: netbox/templates/generic/object_edit.html:47 +#: netbox/templates/ipam/inc/ipaddress_edit_header.html:7 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:43 +#: netbox/utilities/templates/buttons/edit.html:3 msgid "Edit" msgstr "Bearbeiten" -#: templates/circuits/inc/circuit_termination.html:18 +#: netbox/templates/circuits/inc/circuit_termination.html:18 msgid "Swap" msgstr "Tauschen" -#: templates/circuits/inc/circuit_termination_fields.html:19 -#: templates/dcim/consoleport.html:59 templates/dcim/consoleserverport.html:60 -#: templates/dcim/powerfeed.html:114 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:19 +#: netbox/templates/dcim/consoleport.html:59 +#: netbox/templates/dcim/consoleserverport.html:60 +#: netbox/templates/dcim/powerfeed.html:114 msgid "Marked as connected" msgstr "Als verbunden markiert" -#: templates/circuits/inc/circuit_termination_fields.html:21 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:21 msgid "to" msgstr "zu" -#: templates/circuits/inc/circuit_termination_fields.html:31 -#: templates/circuits/inc/circuit_termination_fields.html:32 -#: templates/dcim/frontport.html:80 -#: templates/dcim/inc/connection_endpoints.html:7 -#: templates/dcim/interface.html:154 templates/dcim/rearport.html:76 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:31 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:32 +#: netbox/templates/dcim/frontport.html:80 +#: netbox/templates/dcim/inc/connection_endpoints.html:7 +#: netbox/templates/dcim/interface.html:154 +#: netbox/templates/dcim/rearport.html:76 msgid "Trace" msgstr "Trace" -#: templates/circuits/inc/circuit_termination_fields.html:35 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:35 msgid "Edit cable" msgstr "Kabel bearbeiten" -#: templates/circuits/inc/circuit_termination_fields.html:40 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:40 msgid "Remove cable" msgstr "Kabel entfernen" -#: templates/circuits/inc/circuit_termination_fields.html:41 -#: templates/dcim/bulk_disconnect.html:5 -#: templates/dcim/device/consoleports.html:12 -#: templates/dcim/device/consoleserverports.html:12 -#: templates/dcim/device/frontports.html:12 -#: templates/dcim/device/interfaces.html:16 -#: templates/dcim/device/poweroutlets.html:12 -#: templates/dcim/device/powerports.html:12 -#: templates/dcim/device/rearports.html:12 templates/dcim/powerpanel.html:61 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:41 +#: netbox/templates/dcim/bulk_disconnect.html:5 +#: netbox/templates/dcim/device/consoleports.html:12 +#: netbox/templates/dcim/device/consoleserverports.html:12 +#: netbox/templates/dcim/device/frontports.html:12 +#: netbox/templates/dcim/device/interfaces.html:16 +#: netbox/templates/dcim/device/poweroutlets.html:12 +#: netbox/templates/dcim/device/powerports.html:12 +#: netbox/templates/dcim/device/rearports.html:12 +#: netbox/templates/dcim/powerpanel.html:61 msgid "Disconnect" msgstr "Trennen" -#: templates/circuits/inc/circuit_termination_fields.html:48 -#: templates/dcim/consoleport.html:69 templates/dcim/consoleserverport.html:70 -#: templates/dcim/frontport.html:102 templates/dcim/interface.html:180 -#: templates/dcim/interface.html:200 templates/dcim/powerfeed.html:127 -#: templates/dcim/poweroutlet.html:71 templates/dcim/poweroutlet.html:72 -#: templates/dcim/powerport.html:73 templates/dcim/rearport.html:98 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:48 +#: netbox/templates/dcim/consoleport.html:69 +#: netbox/templates/dcim/consoleserverport.html:70 +#: netbox/templates/dcim/frontport.html:102 +#: netbox/templates/dcim/interface.html:180 +#: netbox/templates/dcim/interface.html:200 +#: netbox/templates/dcim/powerfeed.html:127 +#: netbox/templates/dcim/poweroutlet.html:71 +#: netbox/templates/dcim/poweroutlet.html:72 +#: netbox/templates/dcim/powerport.html:73 +#: netbox/templates/dcim/rearport.html:98 msgid "Connect" msgstr "Verbinden" -#: templates/circuits/inc/circuit_termination_fields.html:70 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:70 msgid "Downstream" msgstr "Downstream" -#: templates/circuits/inc/circuit_termination_fields.html:71 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:71 msgid "Upstream" msgstr "Upstream" -#: templates/circuits/inc/circuit_termination_fields.html:80 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:80 msgid "Cross-Connect" msgstr "Cross-Connect" -#: templates/circuits/inc/circuit_termination_fields.html:84 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:84 msgid "Patch Panel/Port" msgstr "Patchpanel/Anschluss" -#: templates/circuits/provider.html:11 +#: netbox/templates/circuits/provider.html:11 msgid "Add circuit" msgstr "Transportnetz hinzufügen" -#: templates/circuits/provideraccount.html:17 +#: netbox/templates/circuits/provideraccount.html:17 msgid "Provider Account" msgstr "Providerkonto" -#: templates/core/configrevision.html:35 +#: netbox/templates/core/configrevision.html:35 msgid "Configuration Data" msgstr "Daten zur Konfiguration" -#: templates/core/configrevision.html:40 +#: netbox/templates/core/configrevision.html:40 msgid "Comment" msgstr "Kommentar" -#: templates/core/configrevision_restore.html:8 -#: templates/core/configrevision_restore.html:25 -#: templates/core/configrevision_restore.html:64 +#: netbox/templates/core/configrevision_restore.html:8 +#: netbox/templates/core/configrevision_restore.html:25 +#: netbox/templates/core/configrevision_restore.html:64 msgid "Restore" msgstr "Wiederherstellen" -#: templates/core/configrevision_restore.html:36 +#: netbox/templates/core/configrevision_restore.html:36 msgid "Parameter" msgstr "Parameter" -#: templates/core/configrevision_restore.html:37 +#: netbox/templates/core/configrevision_restore.html:37 msgid "Current Value" msgstr "Aktueller Wert" -#: templates/core/configrevision_restore.html:38 +#: netbox/templates/core/configrevision_restore.html:38 msgid "New Value" msgstr "Neuer Wert" -#: templates/core/configrevision_restore.html:50 +#: netbox/templates/core/configrevision_restore.html:50 msgid "Changed" msgstr "Geändert" -#: templates/core/datafile.html:42 templates/ipam/iprange.html:25 -#: templates/virtualization/virtualdisk.html:29 -#: virtualization/tables/virtualmachines.py:198 +#: netbox/templates/core/datafile.html:42 +#: netbox/templates/ipam/iprange.html:25 +#: netbox/templates/virtualization/virtualdisk.html:29 +#: netbox/virtualization/tables/virtualmachines.py:198 msgid "Size" msgstr "Größe" -#: templates/core/datafile.html:43 +#: netbox/templates/core/datafile.html:43 msgid "bytes" msgstr "Bytes" -#: templates/core/datafile.html:46 +#: netbox/templates/core/datafile.html:46 msgid "SHA256 Hash" msgstr "SHA256-Hash" -#: templates/core/datasource.html:14 templates/core/datasource.html:20 -#: utilities/templates/buttons/sync.html:5 +#: netbox/templates/core/datasource.html:14 +#: netbox/templates/core/datasource.html:20 +#: netbox/utilities/templates/buttons/sync.html:5 msgid "Sync" msgstr "Synchronisieren" -#: templates/core/datasource.html:50 +#: netbox/templates/core/datasource.html:50 msgid "Last synced" msgstr "Zuletzt synchronisiert" -#: templates/core/datasource.html:84 +#: netbox/templates/core/datasource.html:84 msgid "Backend" msgstr "Backend" -#: templates/core/datasource.html:99 +#: netbox/templates/core/datasource.html:99 msgid "No parameters defined" msgstr "Keine Parameter definiert" -#: templates/core/datasource.html:114 +#: netbox/templates/core/datasource.html:114 msgid "Files" msgstr "Dateien" -#: templates/core/inc/config_data.html:7 +#: netbox/templates/core/inc/config_data.html:7 msgid "Rack elevations" msgstr "Rackübersichten" -#: templates/core/inc/config_data.html:10 +#: netbox/templates/core/inc/config_data.html:10 msgid "Default unit height" msgstr "Standardhöhe der Einheit" -#: templates/core/inc/config_data.html:14 +#: netbox/templates/core/inc/config_data.html:14 msgid "Default unit width" msgstr "Standardbreite der Einheit" -#: templates/core/inc/config_data.html:20 +#: netbox/templates/core/inc/config_data.html:20 msgid "Power feeds" msgstr "Stromzufuhren" -#: templates/core/inc/config_data.html:23 +#: netbox/templates/core/inc/config_data.html:23 msgid "Default voltage" msgstr "Standardspannung" -#: templates/core/inc/config_data.html:27 +#: netbox/templates/core/inc/config_data.html:27 msgid "Default amperage" msgstr "Standardstromstärke" -#: templates/core/inc/config_data.html:31 +#: netbox/templates/core/inc/config_data.html:31 msgid "Default max utilization" msgstr "Maximale Standardauslastung" -#: templates/core/inc/config_data.html:40 +#: netbox/templates/core/inc/config_data.html:40 msgid "Enforce global unique" msgstr "Weltweit einzigartig durchsetzen" -#: templates/core/inc/config_data.html:83 +#: netbox/templates/core/inc/config_data.html:83 msgid "Paginate count" msgstr "Anzahl der Seiten" -#: templates/core/inc/config_data.html:87 +#: netbox/templates/core/inc/config_data.html:87 msgid "Max page size" msgstr "Max. Seitengröße" -#: templates/core/inc/config_data.html:114 +#: netbox/templates/core/inc/config_data.html:114 msgid "User preferences" msgstr "Benutzereinstellungen" -#: templates/core/inc/config_data.html:141 +#: netbox/templates/core/inc/config_data.html:141 msgid "Job retention" msgstr "Beibehaltung der Arbeitsplätze" -#: templates/core/job.html:35 templates/core/rq_task.html:12 -#: templates/core/rq_task.html:49 templates/core/rq_task.html:58 +#: netbox/templates/core/job.html:35 netbox/templates/core/rq_task.html:12 +#: netbox/templates/core/rq_task.html:49 netbox/templates/core/rq_task.html:58 msgid "Job" msgstr "Job" -#: templates/core/job.html:58 templates/extras/journalentry.html:26 +#: netbox/templates/core/job.html:58 +#: netbox/templates/extras/journalentry.html:26 msgid "Created By" msgstr "Erstellt von" -#: templates/core/job.html:66 +#: netbox/templates/core/job.html:66 msgid "Scheduling" msgstr "Terminplanung" -#: templates/core/job.html:77 +#: netbox/templates/core/job.html:77 #, python-format msgid "every %(interval)s minutes" msgstr "jeden %(interval)s Minuten" -#: templates/core/objectchange.html:29 -#: templates/users/objectpermission.html:42 +#: netbox/templates/core/objectchange.html:29 +#: netbox/templates/users/objectpermission.html:42 msgid "Change" msgstr "Änderung" -#: templates/core/objectchange.html:79 +#: netbox/templates/core/objectchange.html:79 msgid "Difference" msgstr "Unterschied" -#: templates/core/objectchange.html:82 +#: netbox/templates/core/objectchange.html:82 msgid "Previous" msgstr "Vorherige" -#: templates/core/objectchange.html:85 +#: netbox/templates/core/objectchange.html:85 msgid "Next" msgstr "Nächste" -#: templates/core/objectchange.html:93 +#: netbox/templates/core/objectchange.html:93 msgid "Object Created" msgstr "Objekt erstellt" -#: templates/core/objectchange.html:95 +#: netbox/templates/core/objectchange.html:95 msgid "Object Deleted" msgstr "Objekt gelöscht" -#: templates/core/objectchange.html:97 +#: netbox/templates/core/objectchange.html:97 msgid "No Changes" msgstr "Keine Änderungen" -#: templates/core/objectchange.html:111 +#: netbox/templates/core/objectchange.html:111 msgid "Pre-Change Data" msgstr "Daten vor der Änderung" -#: templates/core/objectchange.html:122 +#: netbox/templates/core/objectchange.html:122 msgid "Warning: Comparing non-atomic change to previous change record" msgstr "" "Warnung: Vergleich nichtatomarer Änderungen mit dem vorherigen " "Änderungsdatensatz" -#: templates/core/objectchange.html:131 +#: netbox/templates/core/objectchange.html:131 msgid "Post-Change Data" msgstr "Daten nach der Änderung" -#: templates/core/objectchange.html:162 +#: netbox/templates/core/objectchange.html:162 #, python-format msgid "See All %(count)s Changes" msgstr "Alles ansehen %(count)s Änderungen" -#: templates/core/objectchange_list.html:9 -#: templates/extras/object_changelog.html:15 +#: netbox/templates/core/objectchange_list.html:9 +#: netbox/templates/extras/object_changelog.html:15 msgid "Change log retention" msgstr "Aufbewahrung von Protokollen ändern" -#: templates/core/objectchange_list.html:9 -#: templates/extras/object_changelog.html:15 +#: netbox/templates/core/objectchange_list.html:9 +#: netbox/templates/extras/object_changelog.html:15 msgid "days" msgstr "Tage" -#: templates/core/objectchange_list.html:9 -#: templates/extras/object_changelog.html:15 +#: netbox/templates/core/objectchange_list.html:9 +#: netbox/templates/extras/object_changelog.html:15 msgid "Indefinite" msgstr "Unbestimmt" -#: templates/core/plugin.html:22 +#: netbox/templates/core/plugin.html:22 msgid "Not installed" msgstr "Nicht installiert" -#: templates/core/plugin.html:33 +#: netbox/templates/core/plugin.html:33 msgid "Overview" msgstr "Überblick" -#: templates/core/plugin.html:39 +#: netbox/templates/core/plugin.html:39 msgid "Install" msgstr "Installieren" -#: templates/core/plugin.html:51 +#: netbox/templates/core/plugin.html:51 msgid "Plugin Details" msgstr "Plugin Details" -#: templates/core/plugin.html:58 +#: netbox/templates/core/plugin.html:58 msgid "Summary" msgstr "Zusammenfassung" -#: templates/core/plugin.html:76 +#: netbox/templates/core/plugin.html:76 msgid "License" msgstr "Lizenz" -#: templates/core/plugin.html:96 +#: netbox/templates/core/plugin.html:96 msgid "Version History" msgstr "Versionshistorie" -#: templates/core/plugin.html:107 +#: netbox/templates/core/plugin.html:107 msgid "Local Installation Instructions" msgstr "Lokale Installationsanweisungen" -#: templates/core/rq_queue_list.html:5 templates/core/rq_queue_list.html:13 -#: templates/core/rq_task_list.html:14 templates/core/rq_worker.html:7 +#: netbox/templates/core/rq_queue_list.html:5 +#: netbox/templates/core/rq_queue_list.html:13 +#: netbox/templates/core/rq_task_list.html:14 +#: netbox/templates/core/rq_worker.html:7 msgid "Background Queues" msgstr "Hintergrundaufgaben" -#: templates/core/rq_queue_list.html:24 templates/core/rq_queue_list.html:25 -#: templates/core/rq_worker_list.html:49 templates/core/rq_worker_list.html:50 -#: templates/extras/script_result.html:67 -#: templates/extras/script_result.html:69 -#: templates/inc/table_controls_htmx.html:30 -#: templates/inc/table_controls_htmx.html:33 +#: netbox/templates/core/rq_queue_list.html:24 +#: netbox/templates/core/rq_queue_list.html:25 +#: netbox/templates/core/rq_worker_list.html:49 +#: netbox/templates/core/rq_worker_list.html:50 +#: netbox/templates/extras/script_result.html:67 +#: netbox/templates/extras/script_result.html:69 +#: netbox/templates/inc/table_controls_htmx.html:30 +#: netbox/templates/inc/table_controls_htmx.html:33 msgid "Configure Table" msgstr "Tabelle konfigurieren" -#: templates/core/rq_task.html:29 +#: netbox/templates/core/rq_task.html:29 msgid "Stop" msgstr "Stopp" -#: templates/core/rq_task.html:34 +#: netbox/templates/core/rq_task.html:34 msgid "Requeue" msgstr "Warteschlange" -#: templates/core/rq_task.html:39 +#: netbox/templates/core/rq_task.html:39 msgid "Enqueue" msgstr "Warteschlange" -#: templates/core/rq_task.html:61 +#: netbox/templates/core/rq_task.html:61 msgid "Queue" msgstr "Warteschlange" -#: templates/core/rq_task.html:65 +#: netbox/templates/core/rq_task.html:65 msgid "Timeout" msgstr "Auszeit" -#: templates/core/rq_task.html:69 +#: netbox/templates/core/rq_task.html:69 msgid "Result TTL" msgstr "Ergebnis TTL" -#: templates/core/rq_task.html:89 +#: netbox/templates/core/rq_task.html:89 msgid "Meta" msgstr "Meta" -#: templates/core/rq_task.html:93 +#: netbox/templates/core/rq_task.html:93 msgid "Arguments" msgstr "Argumente" -#: templates/core/rq_task.html:97 +#: netbox/templates/core/rq_task.html:97 msgid "Keyword Arguments" msgstr "Stichwort-Argumente" -#: templates/core/rq_task.html:103 +#: netbox/templates/core/rq_task.html:103 msgid "Depends on" msgstr "Hängt davon ab" -#: templates/core/rq_task.html:109 +#: netbox/templates/core/rq_task.html:109 msgid "Exception" msgstr "Ausnahme" -#: templates/core/rq_task_list.html:28 +#: netbox/templates/core/rq_task_list.html:28 msgid "tasks in " msgstr "Aufgaben in " -#: templates/core/rq_task_list.html:33 +#: netbox/templates/core/rq_task_list.html:33 msgid "Queued Jobs" msgstr "Jobs in der Warteschlange" -#: templates/core/rq_task_list.html:64 templates/extras/script_result.html:86 +#: netbox/templates/core/rq_task_list.html:64 +#: netbox/templates/extras/script_result.html:86 #, python-format msgid "" "Select all %(count)s %(object_type_plural)s matching query" @@ -11711,383 +12474,401 @@ msgstr "" "Wählen alles %(count)s %(object_type_plural)s passende " "Abfrage" -#: templates/core/rq_worker.html:10 +#: netbox/templates/core/rq_worker.html:10 msgid "Worker Info" msgstr "Informationen zum Arbeitnehmer" -#: templates/core/rq_worker.html:31 templates/core/rq_worker.html:40 +#: netbox/templates/core/rq_worker.html:31 +#: netbox/templates/core/rq_worker.html:40 msgid "Worker" msgstr "Arbeiter" -#: templates/core/rq_worker.html:55 +#: netbox/templates/core/rq_worker.html:55 msgid "Queues" msgstr "Warteschlangen" -#: templates/core/rq_worker.html:63 +#: netbox/templates/core/rq_worker.html:63 msgid "Curent Job" msgstr "Aktuelle Jobs" -#: templates/core/rq_worker.html:67 +#: netbox/templates/core/rq_worker.html:67 msgid "Successful job count" msgstr "Erfolgreiche Jobzählung" -#: templates/core/rq_worker.html:71 +#: netbox/templates/core/rq_worker.html:71 msgid "Failed job count" msgstr "Anzahl fehlgeschlagener Jobs" -#: templates/core/rq_worker.html:75 +#: netbox/templates/core/rq_worker.html:75 msgid "Total working time" msgstr "Gesamtarbeitszeit" -#: templates/core/rq_worker.html:76 +#: netbox/templates/core/rq_worker.html:76 msgid "seconds" msgstr "Sekunden" -#: templates/core/rq_worker_list.html:13 templates/core/rq_worker_list.html:21 +#: netbox/templates/core/rq_worker_list.html:13 +#: netbox/templates/core/rq_worker_list.html:21 msgid "Background Workers" msgstr "Berufstätige im Hintergrund" -#: templates/core/rq_worker_list.html:29 +#: netbox/templates/core/rq_worker_list.html:29 #, python-format msgid "Workers in %(queue_name)s" msgstr "Arbeiter in %(queue_name)s" -#: templates/core/system.html:11 utilities/templates/buttons/export.html:4 +#: netbox/templates/core/system.html:11 +#: netbox/utilities/templates/buttons/export.html:4 msgid "Export" msgstr "Exportieren" -#: templates/core/system.html:28 +#: netbox/templates/core/system.html:28 msgid "System Status" msgstr "Systemstatus" -#: templates/core/system.html:31 +#: netbox/templates/core/system.html:31 msgid "NetBox release" msgstr "NetBox-Release" -#: templates/core/system.html:44 +#: netbox/templates/core/system.html:44 msgid "Django version" msgstr "Django-Version" -#: templates/core/system.html:48 +#: netbox/templates/core/system.html:48 msgid "PostgreSQL version" msgstr "PostgreSQL-Version" -#: templates/core/system.html:52 +#: netbox/templates/core/system.html:52 msgid "Database name" msgstr "Datenbankname" -#: templates/core/system.html:56 +#: netbox/templates/core/system.html:56 msgid "Database size" msgstr "Datenbankgröße" -#: templates/core/system.html:61 +#: netbox/templates/core/system.html:61 msgid "Unavailable" msgstr "Nicht verfügbar" -#: templates/core/system.html:66 +#: netbox/templates/core/system.html:66 msgid "RQ workers" msgstr "RQ-Mitarbeiter" -#: templates/core/system.html:69 +#: netbox/templates/core/system.html:69 msgid "default queue" msgstr "Standardwarteschlange" -#: templates/core/system.html:73 +#: netbox/templates/core/system.html:73 msgid "System time" msgstr "Systemzeit" -#: templates/core/system.html:85 +#: netbox/templates/core/system.html:85 msgid "Current Configuration" msgstr "Aktuelle Konfiguration" -#: templates/dcim/bulk_disconnect.html:9 +#: netbox/templates/dcim/bulk_disconnect.html:9 #, python-format msgid "" "Are you sure you want to disconnect these %(count)s %(obj_type_plural)s?" msgstr "Möchten Sie diese wirklich trennen? %(count)s %(obj_type_plural)s?" -#: templates/dcim/cable_trace.html:10 +#: netbox/templates/dcim/cable_trace.html:10 #, python-format msgid "Cable Trace for %(object_type)s %(object)s" msgstr "Cable Trace für %(object_type)s %(object)s" -#: templates/dcim/cable_trace.html:24 templates/dcim/inc/rack_elevation.html:7 +#: netbox/templates/dcim/cable_trace.html:24 +#: netbox/templates/dcim/inc/rack_elevation.html:7 msgid "Download SVG" msgstr "SVG herunterladen" -#: templates/dcim/cable_trace.html:30 +#: netbox/templates/dcim/cable_trace.html:30 msgid "Asymmetric Path" msgstr "Asymmetrischer Pfad" -#: templates/dcim/cable_trace.html:31 +#: netbox/templates/dcim/cable_trace.html:31 msgid "The nodes below have no links and result in an asymmetric path" msgstr "" "Die darunter liegenden Knoten haben keine Links und führen zu einem " "asymmetrischen Pfad" -#: templates/dcim/cable_trace.html:38 +#: netbox/templates/dcim/cable_trace.html:38 msgid "Path split" msgstr "Pfad geteilt" -#: templates/dcim/cable_trace.html:39 +#: netbox/templates/dcim/cable_trace.html:39 msgid "Select a node below to continue" msgstr "Wählen Sie unten einen Knoten aus, um fortzufahren" -#: templates/dcim/cable_trace.html:55 +#: netbox/templates/dcim/cable_trace.html:55 msgid "Trace Completed" msgstr "Ablaufverfolgung abgeschlossen" -#: templates/dcim/cable_trace.html:58 +#: netbox/templates/dcim/cable_trace.html:58 msgid "Total segments" msgstr "Gesamtzahl der Segmente" -#: templates/dcim/cable_trace.html:62 +#: netbox/templates/dcim/cable_trace.html:62 msgid "Total length" msgstr "Gesamtlänge" -#: templates/dcim/cable_trace.html:77 +#: netbox/templates/dcim/cable_trace.html:77 msgid "No paths found" msgstr "Keine Pfade gefunden" -#: templates/dcim/cable_trace.html:85 +#: netbox/templates/dcim/cable_trace.html:85 msgid "Related Paths" msgstr "Verwandte Pfade" -#: templates/dcim/cable_trace.html:89 +#: netbox/templates/dcim/cable_trace.html:89 msgid "Origin" msgstr "Herkunft" -#: templates/dcim/cable_trace.html:90 +#: netbox/templates/dcim/cable_trace.html:90 msgid "Destination" msgstr "Ziel" -#: templates/dcim/cable_trace.html:91 +#: netbox/templates/dcim/cable_trace.html:91 msgid "Segments" msgstr "Segmente" -#: templates/dcim/cable_trace.html:104 +#: netbox/templates/dcim/cable_trace.html:104 msgid "Incomplete" msgstr "Unvollständig" -#: templates/dcim/component_list.html:14 +#: netbox/templates/dcim/component_list.html:14 msgid "Rename Selected" msgstr "Ausgewählte umbenennen" -#: templates/dcim/consoleport.html:65 templates/dcim/consoleserverport.html:66 -#: templates/dcim/frontport.html:98 templates/dcim/interface.html:176 -#: templates/dcim/poweroutlet.html:69 templates/dcim/powerport.html:69 +#: netbox/templates/dcim/consoleport.html:65 +#: netbox/templates/dcim/consoleserverport.html:66 +#: netbox/templates/dcim/frontport.html:98 +#: netbox/templates/dcim/interface.html:176 +#: netbox/templates/dcim/poweroutlet.html:69 +#: netbox/templates/dcim/powerport.html:69 msgid "Not Connected" msgstr "Nicht verbunden" -#: templates/dcim/device.html:34 +#: netbox/templates/dcim/device.html:34 msgid "Highlight device in rack" msgstr "Gerät im Rack hervorheben" -#: templates/dcim/device.html:55 +#: netbox/templates/dcim/device.html:55 msgid "Not racked" msgstr "Nicht eingebaut" -#: templates/dcim/device.html:62 templates/dcim/site.html:94 +#: netbox/templates/dcim/device.html:62 netbox/templates/dcim/site.html:94 msgid "GPS Coordinates" msgstr "GPS-Koordinaten" -#: templates/dcim/device.html:68 templates/dcim/site.html:81 -#: templates/dcim/site.html:100 +#: netbox/templates/dcim/device.html:68 netbox/templates/dcim/site.html:81 +#: netbox/templates/dcim/site.html:100 msgid "Map" msgstr "Karte" -#: templates/dcim/device.html:108 templates/dcim/inventoryitem.html:56 -#: templates/dcim/module.html:81 templates/dcim/modulebay.html:74 -#: templates/dcim/rack.html:61 +#: netbox/templates/dcim/device.html:108 +#: netbox/templates/dcim/inventoryitem.html:56 +#: netbox/templates/dcim/module.html:81 +#: netbox/templates/dcim/modulebay.html:74 netbox/templates/dcim/rack.html:61 msgid "Asset Tag" msgstr "Asset-Tag" -#: templates/dcim/device.html:123 +#: netbox/templates/dcim/device.html:123 msgid "View Virtual Chassis" msgstr "Virtuelles Gehäuse anzeigen" -#: templates/dcim/device.html:164 +#: netbox/templates/dcim/device.html:164 msgid "Create VDC" msgstr "VDC erstellen" -#: templates/dcim/device.html:175 templates/dcim/device_edit.html:64 -#: virtualization/forms/model_forms.py:223 +#: netbox/templates/dcim/device.html:175 +#: netbox/templates/dcim/device_edit.html:64 +#: netbox/virtualization/forms/model_forms.py:223 msgid "Management" msgstr "Management" -#: templates/dcim/device.html:195 templates/dcim/device.html:211 -#: templates/dcim/device.html:227 -#: templates/virtualization/virtualmachine.html:57 -#: templates/virtualization/virtualmachine.html:73 +#: netbox/templates/dcim/device.html:195 netbox/templates/dcim/device.html:211 +#: netbox/templates/dcim/device.html:227 +#: netbox/templates/virtualization/virtualmachine.html:57 +#: netbox/templates/virtualization/virtualmachine.html:73 msgid "NAT for" msgstr "NAT für" -#: templates/dcim/device.html:197 templates/dcim/device.html:213 -#: templates/dcim/device.html:229 -#: templates/virtualization/virtualmachine.html:59 -#: templates/virtualization/virtualmachine.html:75 +#: netbox/templates/dcim/device.html:197 netbox/templates/dcim/device.html:213 +#: netbox/templates/dcim/device.html:229 +#: netbox/templates/virtualization/virtualmachine.html:59 +#: netbox/templates/virtualization/virtualmachine.html:75 msgid "NAT" msgstr "NAT" -#: templates/dcim/device.html:252 templates/dcim/rack.html:73 +#: netbox/templates/dcim/device.html:252 netbox/templates/dcim/rack.html:73 msgid "Power Utilization" msgstr "Energienutzung" -#: templates/dcim/device.html:256 +#: netbox/templates/dcim/device.html:256 msgid "Input" msgstr "Eingabe" -#: templates/dcim/device.html:257 +#: netbox/templates/dcim/device.html:257 msgid "Outlets" msgstr "Abgänge" -#: templates/dcim/device.html:258 +#: netbox/templates/dcim/device.html:258 msgid "Allocated" msgstr "Zugeteilt" -#: templates/dcim/device.html:268 templates/dcim/device.html:270 -#: templates/dcim/device.html:286 templates/dcim/powerfeed.html:67 +#: netbox/templates/dcim/device.html:268 netbox/templates/dcim/device.html:270 +#: netbox/templates/dcim/device.html:286 +#: netbox/templates/dcim/powerfeed.html:67 msgid "VA" msgstr "VA" -#: templates/dcim/device.html:280 +#: netbox/templates/dcim/device.html:280 msgctxt "Leg of a power feed" msgid "Leg" msgstr "Bein" -#: templates/dcim/device.html:306 -#: templates/virtualization/virtualmachine.html:158 +#: netbox/templates/dcim/device.html:306 +#: netbox/templates/virtualization/virtualmachine.html:158 msgid "Add a service" msgstr "Einen Dienst hinzufügen" -#: templates/dcim/device/base.html:21 templates/dcim/device_list.html:9 -#: templates/dcim/devicetype/base.html:18 -#: templates/dcim/inc/moduletype_buttons.html:9 templates/dcim/module.html:18 -#: templates/virtualization/virtualmachine/base.html:22 -#: templates/virtualization/virtualmachine_list.html:8 +#: netbox/templates/dcim/device/base.html:21 +#: netbox/templates/dcim/device_list.html:9 +#: netbox/templates/dcim/devicetype/base.html:18 +#: netbox/templates/dcim/inc/moduletype_buttons.html:9 +#: netbox/templates/dcim/module.html:18 +#: netbox/templates/virtualization/virtualmachine/base.html:22 +#: netbox/templates/virtualization/virtualmachine_list.html:8 msgid "Add Components" msgstr "Komponenten hinzufügen" -#: templates/dcim/device/consoleports.html:24 +#: netbox/templates/dcim/device/consoleports.html:24 msgid "Add Console Ports" msgstr "Konsolenanschlüsse hinzufügen" -#: templates/dcim/device/consoleserverports.html:24 +#: netbox/templates/dcim/device/consoleserverports.html:24 msgid "Add Console Server Ports" msgstr "Konsolenserveranschlüsse hinzufügen" -#: templates/dcim/device/devicebays.html:10 +#: netbox/templates/dcim/device/devicebays.html:10 msgid "Add Device Bays" msgstr "Geräteeinsätze hinzufügen" -#: templates/dcim/device/frontports.html:24 +#: netbox/templates/dcim/device/frontports.html:24 msgid "Add Front Ports" msgstr "Frontanschlüsse hinzufügen" -#: templates/dcim/device/inc/interface_table_controls.html:9 +#: netbox/templates/dcim/device/inc/interface_table_controls.html:9 msgid "Hide Enabled" msgstr "Aktivierte ausblenden" -#: templates/dcim/device/inc/interface_table_controls.html:10 +#: netbox/templates/dcim/device/inc/interface_table_controls.html:10 msgid "Hide Disabled" msgstr "Deaktivierte ausblenden" -#: templates/dcim/device/inc/interface_table_controls.html:11 +#: netbox/templates/dcim/device/inc/interface_table_controls.html:11 msgid "Hide Virtual" msgstr "Virtuelle ausblenden" -#: templates/dcim/device/inc/interface_table_controls.html:12 +#: netbox/templates/dcim/device/inc/interface_table_controls.html:12 msgid "Hide Disconnected" msgstr "Getrennte ausblenden" -#: templates/dcim/device/interfaces.html:27 +#: netbox/templates/dcim/device/interfaces.html:27 msgid "Add Interfaces" msgstr "Schnittstellen hinzufügen" -#: templates/dcim/device/inventory.html:10 -#: templates/dcim/inc/panels/inventory_items.html:10 +#: netbox/templates/dcim/device/inventory.html:10 +#: netbox/templates/dcim/inc/panels/inventory_items.html:10 msgid "Add Inventory Item" msgstr "Inventargegenstand hinzufügen" -#: templates/dcim/device/modulebays.html:10 +#: netbox/templates/dcim/device/modulebays.html:10 msgid "Add Module Bays" msgstr "Moduleinsätze hinzufügen" -#: templates/dcim/device/poweroutlets.html:24 +#: netbox/templates/dcim/device/poweroutlets.html:24 msgid "Add Power Outlets" msgstr "Steckdosen hinzufügen" -#: templates/dcim/device/powerports.html:24 +#: netbox/templates/dcim/device/powerports.html:24 msgid "Add Power Port" msgstr "Stromanschluss hinzufügen" -#: templates/dcim/device/rearports.html:24 +#: netbox/templates/dcim/device/rearports.html:24 msgid "Add Rear Ports" msgstr "Rückanschlüsse hinzufügen" -#: templates/dcim/device/render_config.html:5 -#: templates/virtualization/virtualmachine/render_config.html:5 +#: netbox/templates/dcim/device/render_config.html:5 +#: netbox/templates/virtualization/virtualmachine/render_config.html:5 msgid "Config" msgstr "Konfig" -#: templates/dcim/device/render_config.html:35 -#: templates/virtualization/virtualmachine/render_config.html:35 +#: netbox/templates/dcim/device/render_config.html:35 +#: netbox/templates/virtualization/virtualmachine/render_config.html:35 msgid "Context Data" msgstr "Kontextdaten" -#: templates/dcim/device/render_config.html:53 -#: templates/virtualization/virtualmachine/render_config.html:53 +#: netbox/templates/dcim/device/render_config.html:55 +#: netbox/templates/virtualization/virtualmachine/render_config.html:55 msgid "Rendered Config" msgstr "Gerenderte Konfiguration" -#: templates/dcim/device/render_config.html:55 -#: templates/virtualization/virtualmachine/render_config.html:55 +#: netbox/templates/dcim/device/render_config.html:57 +#: netbox/templates/virtualization/virtualmachine/render_config.html:57 msgid "Download" msgstr "Herunterladen" -#: templates/dcim/device/render_config.html:61 -#: templates/virtualization/virtualmachine/render_config.html:61 -msgid "No configuration template found" -msgstr "Keine Konfigurationsvorlage gefunden" +#: 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" -#: templates/dcim/device_edit.html:44 +#: 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." + +#: netbox/templates/dcim/device_edit.html:44 msgid "Parent Bay" msgstr "Übergeordneter Einsatz" -#: templates/dcim/device_edit.html:48 -#: utilities/templates/form_helpers/render_field.html:22 +#: netbox/templates/dcim/device_edit.html:48 +#: netbox/utilities/templates/form_helpers/render_field.html:22 msgid "Regenerate Slug" msgstr "URL-Slug regenerieren" -#: templates/dcim/device_edit.html:49 templates/generic/bulk_remove.html:21 -#: utilities/templates/helpers/table_config_form.html:23 +#: netbox/templates/dcim/device_edit.html:49 +#: netbox/templates/generic/bulk_remove.html:21 +#: netbox/utilities/templates/helpers/table_config_form.html:23 msgid "Remove" msgstr "entfernen" -#: templates/dcim/device_edit.html:110 +#: netbox/templates/dcim/device_edit.html:110 msgid "Local Config Context Data" msgstr "Lokale Konfigurationskontextdaten" -#: templates/dcim/device_list.html:82 templates/generic/bulk_rename.html:57 -#: templates/virtualization/virtualmachine/interfaces.html:11 -#: templates/virtualization/virtualmachine/virtual_disks.html:11 +#: netbox/templates/dcim/device_list.html:82 +#: netbox/templates/generic/bulk_rename.html:57 +#: netbox/templates/virtualization/virtualmachine/interfaces.html:11 +#: netbox/templates/virtualization/virtualmachine/virtual_disks.html:11 msgid "Rename" msgstr "Umbenennen" -#: templates/dcim/devicebay.html:17 +#: netbox/templates/dcim/devicebay.html:17 msgid "Device Bay" msgstr "Geräteeinsatz" -#: templates/dcim/devicebay.html:43 +#: netbox/templates/dcim/devicebay.html:43 msgid "Installed Device" msgstr "Installiertes Gerät" -#: templates/dcim/devicebay_depopulate.html:6 +#: netbox/templates/dcim/devicebay_depopulate.html:6 #, python-format msgid "Remove %(device)s from %(device_bay)s?" msgstr "entferne %(device)s von %(device_bay)s?" -#: templates/dcim/devicebay_depopulate.html:13 +#: netbox/templates/dcim/devicebay_depopulate.html:13 #, python-format msgid "" "Are you sure you want to remove %(device)s from " @@ -12096,430 +12877,449 @@ msgstr "" "Sind Sie sicher, dass Sie entfernen möchten %(device)s von " "%(device_bay)s?" -#: templates/dcim/devicebay_populate.html:13 +#: netbox/templates/dcim/devicebay_populate.html:13 msgid "Populate" msgstr "Bestücken" -#: templates/dcim/devicebay_populate.html:22 +#: netbox/templates/dcim/devicebay_populate.html:22 msgid "Bay" msgstr "Einsatz" -#: templates/dcim/devicerole.html:14 templates/dcim/platform.html:17 +#: netbox/templates/dcim/devicerole.html:14 +#: netbox/templates/dcim/platform.html:17 msgid "Add Device" msgstr "Gerät hinzufügen" -#: templates/dcim/devicerole.html:40 +#: netbox/templates/dcim/devicerole.html:40 msgid "VM Role" msgstr "VM-Rolle" -#: templates/dcim/devicetype.html:18 templates/dcim/moduletype.html:29 +#: netbox/templates/dcim/devicetype.html:18 +#: netbox/templates/dcim/moduletype.html:29 msgid "Model Name" msgstr "Name des Modells" -#: templates/dcim/devicetype.html:25 templates/dcim/moduletype.html:33 +#: netbox/templates/dcim/devicetype.html:25 +#: netbox/templates/dcim/moduletype.html:33 msgid "Part Number" msgstr "Teilnummer" -#: templates/dcim/devicetype.html:41 +#: netbox/templates/dcim/devicetype.html:41 msgid "Exclude From Utilization" msgstr "Von der Auslastung ausschließen" -#: templates/dcim/devicetype.html:59 +#: netbox/templates/dcim/devicetype.html:59 msgid "Parent/Child" msgstr "Übergeordnet/Untergeordnet" -#: templates/dcim/devicetype.html:71 +#: netbox/templates/dcim/devicetype.html:71 msgid "Front Image" msgstr "Vorderes Bild" -#: templates/dcim/devicetype.html:83 +#: netbox/templates/dcim/devicetype.html:83 msgid "Rear Image" msgstr "Hinteres Bild" -#: templates/dcim/frontport.html:54 +#: netbox/templates/dcim/frontport.html:54 msgid "Rear Port Position" msgstr "Position des Rück-Anschlusses" -#: templates/dcim/frontport.html:72 templates/dcim/interface.html:144 -#: templates/dcim/poweroutlet.html:63 templates/dcim/powerport.html:63 -#: templates/dcim/rearport.html:68 +#: netbox/templates/dcim/frontport.html:72 +#: netbox/templates/dcim/interface.html:144 +#: netbox/templates/dcim/poweroutlet.html:63 +#: netbox/templates/dcim/powerport.html:63 +#: netbox/templates/dcim/rearport.html:68 msgid "Marked as Connected" msgstr "Als verbunden markiert" -#: templates/dcim/frontport.html:86 templates/dcim/rearport.html:82 +#: netbox/templates/dcim/frontport.html:86 +#: netbox/templates/dcim/rearport.html:82 msgid "Connection Status" msgstr "Status der Verbindung" -#: templates/dcim/htmx/cable_edit.html:10 +#: netbox/templates/dcim/htmx/cable_edit.html:10 msgid "A Side" msgstr "A-Seite" -#: templates/dcim/htmx/cable_edit.html:30 +#: netbox/templates/dcim/htmx/cable_edit.html:30 msgid "B Side" msgstr "B-Seite" -#: templates/dcim/inc/cable_termination.html:65 +#: netbox/templates/dcim/inc/cable_termination.html:65 msgid "No termination" msgstr "Kein Abschlusspunkt" -#: templates/dcim/inc/cable_toggle_buttons.html:3 +#: netbox/templates/dcim/inc/cable_toggle_buttons.html:3 msgid "Mark Planned" msgstr "Als geplant markieren" -#: templates/dcim/inc/cable_toggle_buttons.html:6 +#: netbox/templates/dcim/inc/cable_toggle_buttons.html:6 msgid "Mark Installed" msgstr "Als installiert markieren" -#: templates/dcim/inc/connection_endpoints.html:13 +#: netbox/templates/dcim/inc/connection_endpoints.html:13 msgid "Path Status" msgstr "Pfadstatus" -#: templates/dcim/inc/connection_endpoints.html:18 +#: netbox/templates/dcim/inc/connection_endpoints.html:18 msgid "Not Reachable" msgstr "Nicht erreichbar" -#: templates/dcim/inc/connection_endpoints.html:23 +#: netbox/templates/dcim/inc/connection_endpoints.html:23 msgid "Path Endpoints" msgstr "Pfadendpunkte" -#: templates/dcim/inc/endpoint_connection.html:8 -#: templates/dcim/powerfeed.html:120 templates/dcim/rearport.html:94 +#: netbox/templates/dcim/inc/endpoint_connection.html:8 +#: netbox/templates/dcim/powerfeed.html:120 +#: netbox/templates/dcim/rearport.html:94 msgid "Not connected" msgstr "Nicht verbunden" -#: templates/dcim/inc/interface_vlans_table.html:6 +#: netbox/templates/dcim/inc/interface_vlans_table.html:6 msgid "Untagged" msgstr "Untagged" -#: templates/dcim/inc/interface_vlans_table.html:37 +#: netbox/templates/dcim/inc/interface_vlans_table.html:37 msgid "No VLANs Assigned" msgstr "Keine VLANs zugewiesen" -#: templates/dcim/inc/interface_vlans_table.html:44 -#: templates/ipam/prefix_list.html:16 templates/ipam/prefix_list.html:33 +#: netbox/templates/dcim/inc/interface_vlans_table.html:44 +#: netbox/templates/ipam/prefix_list.html:16 +#: netbox/templates/ipam/prefix_list.html:33 msgid "Clear" msgstr "Lösche" -#: templates/dcim/inc/interface_vlans_table.html:47 +#: netbox/templates/dcim/inc/interface_vlans_table.html:47 msgid "Clear All" msgstr "Alles löschen" -#: templates/dcim/inc/panels/racktype_dimensions.html:38 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:38 msgid "Mounting Depth" msgstr "Einbautiefe" -#: templates/dcim/inc/panels/racktype_numbering.html:6 +#: netbox/templates/dcim/inc/panels/racktype_numbering.html:6 msgid "Starting Unit" msgstr "Start HE" -#: templates/dcim/inc/panels/racktype_numbering.html:10 +#: netbox/templates/dcim/inc/panels/racktype_numbering.html:10 msgid "Descending Units" msgstr "Absteigende HE's" -#: templates/dcim/inc/rack_elevation.html:3 +#: netbox/templates/dcim/inc/rack_elevation.html:3 msgid "Rack elevation" msgstr "Höhe des Racks" -#: templates/dcim/interface.html:17 +#: netbox/templates/dcim/interface.html:17 msgid "Add Child Interface" msgstr "Untergeordnete Schnittstelle hinzufügen" -#: templates/dcim/interface.html:50 +#: netbox/templates/dcim/interface.html:50 msgid "Speed/Duplex" msgstr "Geschwindigkeit/Duplex" -#: templates/dcim/interface.html:73 +#: netbox/templates/dcim/interface.html:73 msgid "PoE Mode" msgstr "PoE-Modus" -#: templates/dcim/interface.html:77 +#: netbox/templates/dcim/interface.html:77 msgid "PoE Type" msgstr "PoE-Typ" -#: templates/dcim/interface.html:81 -#: templates/virtualization/vminterface.html:63 +#: netbox/templates/dcim/interface.html:81 +#: netbox/templates/virtualization/vminterface.html:63 msgid "802.1Q Mode" msgstr "802.1Q-Modus" -#: templates/dcim/interface.html:125 -#: templates/virtualization/vminterface.html:59 +#: netbox/templates/dcim/interface.html:125 +#: netbox/templates/virtualization/vminterface.html:59 msgid "MAC Address" msgstr "MAC-Adresse" -#: templates/dcim/interface.html:151 +#: netbox/templates/dcim/interface.html:151 msgid "Wireless Link" msgstr "Funkverbindung" -#: templates/dcim/interface.html:218 vpn/choices.py:55 +#: netbox/templates/dcim/interface.html:218 netbox/vpn/choices.py:63 msgid "Peer" msgstr "Peer" -#: templates/dcim/interface.html:230 -#: templates/wireless/inc/wirelesslink_interface.html:26 +#: netbox/templates/dcim/interface.html:230 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:26 msgid "Channel" msgstr "Kanal" -#: templates/dcim/interface.html:239 -#: templates/wireless/inc/wirelesslink_interface.html:32 +#: netbox/templates/dcim/interface.html:239 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:32 msgid "Channel Frequency" msgstr "Kanal-Frequenz" -#: templates/dcim/interface.html:242 templates/dcim/interface.html:250 -#: templates/dcim/interface.html:261 templates/dcim/interface.html:269 +#: netbox/templates/dcim/interface.html:242 +#: netbox/templates/dcim/interface.html:250 +#: netbox/templates/dcim/interface.html:261 +#: netbox/templates/dcim/interface.html:269 msgid "MHz" msgstr "MHz" -#: templates/dcim/interface.html:258 -#: templates/wireless/inc/wirelesslink_interface.html:42 +#: netbox/templates/dcim/interface.html:258 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:42 msgid "Channel Width" msgstr "Kanal-Breite" -#: templates/dcim/interface.html:285 templates/wireless/wirelesslan.html:14 -#: templates/wireless/wirelesslink.html:21 wireless/forms/bulk_edit.py:60 -#: wireless/forms/bulk_edit.py:102 wireless/forms/filtersets.py:40 -#: wireless/forms/filtersets.py:80 wireless/models.py:82 -#: wireless/models.py:156 wireless/tables/wirelesslan.py:44 +#: netbox/templates/dcim/interface.html:285 +#: netbox/templates/wireless/wirelesslan.html:14 +#: netbox/templates/wireless/wirelesslink.html:21 +#: netbox/wireless/forms/bulk_edit.py:60 +#: netbox/wireless/forms/bulk_edit.py:102 +#: netbox/wireless/forms/filtersets.py:40 +#: netbox/wireless/forms/filtersets.py:80 netbox/wireless/models.py:82 +#: netbox/wireless/models.py:156 netbox/wireless/tables/wirelesslan.py:44 msgid "SSID" msgstr "SSID" -#: templates/dcim/interface.html:305 +#: netbox/templates/dcim/interface.html:305 msgid "LAG Members" msgstr "LAG-Mitglieder" -#: templates/dcim/interface.html:323 +#: netbox/templates/dcim/interface.html:323 msgid "No member interfaces" msgstr "Keine Mitgliederschnittstellen" -#: templates/dcim/interface.html:343 templates/ipam/fhrpgroup.html:73 -#: templates/ipam/iprange/ip_addresses.html:7 -#: templates/ipam/prefix/ip_addresses.html:7 -#: templates/virtualization/vminterface.html:89 +#: netbox/templates/dcim/interface.html:343 +#: netbox/templates/ipam/fhrpgroup.html:73 +#: netbox/templates/ipam/iprange/ip_addresses.html:7 +#: netbox/templates/ipam/prefix/ip_addresses.html:7 +#: netbox/templates/virtualization/vminterface.html:89 msgid "Add IP Address" msgstr "IP-Adresse hinzufügen" -#: templates/dcim/inventoryitem.html:24 +#: netbox/templates/dcim/inventoryitem.html:24 msgid "Parent Item" msgstr "Übergeordneter Artikel" -#: templates/dcim/inventoryitem.html:48 +#: netbox/templates/dcim/inventoryitem.html:48 msgid "Part ID" msgstr "Teile-ID" -#: templates/dcim/location.html:17 +#: netbox/templates/dcim/location.html:17 msgid "Add Child Location" msgstr "Untergeordnete Lokation hinzufügen" -#: templates/dcim/location.html:77 +#: netbox/templates/dcim/location.html:77 msgid "Child Locations" msgstr "Untergeordnete Lokationen" -#: templates/dcim/location.html:81 templates/dcim/site.html:131 +#: netbox/templates/dcim/location.html:81 netbox/templates/dcim/site.html:131 msgid "Add a Location" msgstr "Einen Lokation hinzufügen" -#: templates/dcim/location.html:94 templates/dcim/site.html:144 +#: netbox/templates/dcim/location.html:94 netbox/templates/dcim/site.html:144 msgid "Add a Device" msgstr "Ein Gerät hinzufügen" -#: templates/dcim/manufacturer.html:16 +#: netbox/templates/dcim/manufacturer.html:16 msgid "Add Device Type" msgstr "Gerätetyp hinzufügen" -#: templates/dcim/manufacturer.html:21 +#: netbox/templates/dcim/manufacturer.html:21 msgid "Add Module Type" msgstr "Modultyp hinzufügen" -#: templates/dcim/powerfeed.html:53 +#: netbox/templates/dcim/powerfeed.html:53 msgid "Connected Device" msgstr "Verbundenes Gerät" -#: templates/dcim/powerfeed.html:63 +#: netbox/templates/dcim/powerfeed.html:63 msgid "Utilization (Allocated" msgstr "Auslastung (zugewiesen)" -#: templates/dcim/powerfeed.html:80 +#: netbox/templates/dcim/powerfeed.html:80 msgid "Electrical Characteristics" msgstr "Elektrische Eigenschaften" -#: templates/dcim/powerfeed.html:88 +#: netbox/templates/dcim/powerfeed.html:88 msgctxt "Abbreviation for volts" msgid "V" msgstr "V" -#: templates/dcim/powerfeed.html:92 +#: netbox/templates/dcim/powerfeed.html:92 msgctxt "Abbreviation for amperes" msgid "A" msgstr "A" -#: templates/dcim/poweroutlet.html:48 +#: netbox/templates/dcim/poweroutlet.html:48 msgid "Feed Leg" msgstr "Phasenlage" -#: templates/dcim/powerpanel.html:72 +#: netbox/templates/dcim/powerpanel.html:72 msgid "Add Power Feeds" msgstr "Stromzufuhr hinzufügen" -#: templates/dcim/powerport.html:44 +#: netbox/templates/dcim/powerport.html:44 msgid "Maximum Draw" msgstr "maximale Auslastung" -#: templates/dcim/powerport.html:48 +#: netbox/templates/dcim/powerport.html:48 msgid "Allocated Draw" msgstr "zugewiesene Auslastung" -#: templates/dcim/rack.html:69 +#: netbox/templates/dcim/rack.html:69 msgid "Space Utilization" msgstr "Höheneinheitennutzung" -#: templates/dcim/rack.html:84 templates/dcim/racktype.html:44 +#: netbox/templates/dcim/rack.html:84 netbox/templates/dcim/racktype.html:44 msgid "Rack Weight" msgstr "Gewicht des Racks" -#: templates/dcim/rack.html:94 templates/dcim/racktype.html:54 +#: netbox/templates/dcim/rack.html:94 netbox/templates/dcim/racktype.html:54 msgid "Maximum Weight" msgstr "Maximales Gewicht" -#: templates/dcim/rack.html:104 +#: netbox/templates/dcim/rack.html:104 msgid "Total Weight" msgstr "Gesamtgewicht" -#: templates/dcim/rack.html:125 templates/dcim/rack_elevation_list.html:15 +#: netbox/templates/dcim/rack.html:125 +#: netbox/templates/dcim/rack_elevation_list.html:15 msgid "Images and Labels" msgstr "Bilder und Beschriftungen" -#: templates/dcim/rack.html:126 templates/dcim/rack_elevation_list.html:16 +#: netbox/templates/dcim/rack.html:126 +#: netbox/templates/dcim/rack_elevation_list.html:16 msgid "Images only" msgstr "Nur Bilder" -#: templates/dcim/rack.html:127 templates/dcim/rack_elevation_list.html:17 +#: netbox/templates/dcim/rack.html:127 +#: netbox/templates/dcim/rack_elevation_list.html:17 msgid "Labels only" msgstr "Nur Beschriftungen" -#: templates/dcim/rack/reservations.html:8 +#: netbox/templates/dcim/rack/reservations.html:8 msgid "Add reservation" msgstr "Reservierung hinzufügen" -#: templates/dcim/rack_elevation_list.html:12 +#: netbox/templates/dcim/rack_elevation_list.html:12 msgid "View List" msgstr "Liste ansehen" -#: templates/dcim/rack_elevation_list.html:14 +#: netbox/templates/dcim/rack_elevation_list.html:14 msgid "Select rack view" msgstr "Wählen Sie eine Rackansicht" -#: templates/dcim/rack_elevation_list.html:25 +#: netbox/templates/dcim/rack_elevation_list.html:25 msgid "Sort By" msgstr "Sortieren nach" -#: templates/dcim/rack_elevation_list.html:74 +#: netbox/templates/dcim/rack_elevation_list.html:74 msgid "No Racks Found" msgstr "Keine Racks gefunden" -#: templates/dcim/rack_list.html:8 +#: netbox/templates/dcim/rack_list.html:8 msgid "View Elevations" msgstr "Höhen anzeigen" -#: templates/dcim/rackreservation.html:42 +#: netbox/templates/dcim/rackreservation.html:42 msgid "Reservation Details" msgstr "Einzelheiten der Reservierung" -#: templates/dcim/rackrole.html:10 +#: netbox/templates/dcim/rackrole.html:10 msgid "Add Rack" msgstr "Rack hinzufügen" -#: templates/dcim/rearport.html:50 +#: netbox/templates/dcim/rearport.html:50 msgid "Positions" msgstr "Positionen" -#: templates/dcim/region.html:17 templates/dcim/sitegroup.html:17 +#: netbox/templates/dcim/region.html:17 +#: netbox/templates/dcim/sitegroup.html:17 msgid "Add Site" msgstr "Standort hinzufügen" -#: templates/dcim/region.html:55 +#: netbox/templates/dcim/region.html:55 msgid "Child Regions" msgstr "Untergeordnete Regionen" -#: templates/dcim/region.html:59 +#: netbox/templates/dcim/region.html:59 msgid "Add Region" msgstr "Region hinzufügen" -#: templates/dcim/site.html:64 +#: netbox/templates/dcim/site.html:64 msgid "Time Zone" msgstr "Zeitzone" -#: templates/dcim/site.html:67 +#: netbox/templates/dcim/site.html:67 msgid "UTC" msgstr "UTC" -#: templates/dcim/site.html:68 +#: netbox/templates/dcim/site.html:68 msgid "Site time" msgstr "Uhrzeit am Standort" -#: templates/dcim/site.html:75 +#: netbox/templates/dcim/site.html:75 msgid "Physical Address" msgstr "Physische Adresse" -#: templates/dcim/site.html:90 +#: netbox/templates/dcim/site.html:90 msgid "Shipping Address" msgstr "Lieferadresse" -#: templates/dcim/sitegroup.html:55 templates/tenancy/contactgroup.html:46 -#: templates/tenancy/tenantgroup.html:55 -#: templates/wireless/wirelesslangroup.html:55 +#: netbox/templates/dcim/sitegroup.html:55 +#: netbox/templates/tenancy/contactgroup.html:46 +#: netbox/templates/tenancy/tenantgroup.html:55 +#: netbox/templates/wireless/wirelesslangroup.html:55 msgid "Child Groups" msgstr "Untergeordnete Gruppen" -#: templates/dcim/sitegroup.html:59 +#: netbox/templates/dcim/sitegroup.html:59 msgid "Add Site Group" msgstr "Standortgruppe hinzufügen" -#: templates/dcim/trace/attachment.html:5 -#: templates/extras/exporttemplate.html:31 +#: netbox/templates/dcim/trace/attachment.html:5 +#: netbox/templates/extras/exporttemplate.html:31 msgid "Attachment" msgstr "Anlage" -#: templates/dcim/virtualchassis.html:57 +#: netbox/templates/dcim/virtualchassis.html:57 msgid "Add Member" msgstr "Mitglied hinzufügen" -#: templates/dcim/virtualchassis_add.html:18 +#: netbox/templates/dcim/virtualchassis_add.html:18 msgid "Member Devices" msgstr "Mitgliedsgeräte" -#: templates/dcim/virtualchassis_add_member.html:10 +#: netbox/templates/dcim/virtualchassis_add_member.html:10 #, python-format msgid "Add New Member to Virtual Chassis %(virtual_chassis)s" msgstr "Neues Mitglied zu virtuellem Gehäuse hinzufügen %(virtual_chassis)s" -#: templates/dcim/virtualchassis_add_member.html:19 +#: netbox/templates/dcim/virtualchassis_add_member.html:19 msgid "Add New Member" msgstr "Neues Mitglied hinzufügen" -#: templates/dcim/virtualchassis_add_member.html:27 -#: templates/generic/object_edit.html:78 -#: templates/users/objectpermission.html:31 users/forms/filtersets.py:67 -#: users/forms/model_forms.py:312 +#: netbox/templates/dcim/virtualchassis_add_member.html:27 +#: netbox/templates/generic/object_edit.html:78 +#: netbox/templates/users/objectpermission.html:31 +#: netbox/users/forms/filtersets.py:67 netbox/users/forms/model_forms.py:312 msgid "Actions" msgstr "Aktionen" -#: templates/dcim/virtualchassis_add_member.html:29 +#: netbox/templates/dcim/virtualchassis_add_member.html:29 msgid "Save & Add Another" msgstr "Speichern & weiteres hinzufügen" -#: templates/dcim/virtualchassis_edit.html:7 +#: netbox/templates/dcim/virtualchassis_edit.html:7 #, python-format msgid "Editing Virtual Chassis %(name)s" msgstr "Virtuelles Gehäuse %(name)s bearbeiten" -#: templates/dcim/virtualchassis_edit.html:53 +#: netbox/templates/dcim/virtualchassis_edit.html:53 msgid "Rack/Unit" msgstr "Rack/Einheit" -#: templates/dcim/virtualchassis_remove_member.html:5 +#: netbox/templates/dcim/virtualchassis_remove_member.html:5 msgid "Remove Virtual Chassis Member" msgstr "Virtuelles Gehäusemitglied entfernen" -#: templates/dcim/virtualchassis_remove_member.html:9 +#: netbox/templates/dcim/virtualchassis_remove_member.html:9 #, python-format msgid "" "Are you sure you want to remove %(device)s from virtual " @@ -12528,11 +13328,12 @@ msgstr "" "Sind Sie sicher, dass Sie entfernen möchten %(device)s aus " "dem virtuellen Gehäuse %(name)s?" -#: templates/dcim/virtualdevicecontext.html:26 templates/vpn/l2vpn.html:18 +#: netbox/templates/dcim/virtualdevicecontext.html:26 +#: netbox/templates/vpn/l2vpn.html:18 msgid "Identifier" msgstr "Identifier" -#: templates/exceptions/import_error.html:6 +#: netbox/templates/exceptions/import_error.html:6 msgid "" "A module import error occurred during this request. Common causes include " "the following:" @@ -12540,11 +13341,11 @@ msgstr "" "Während dieser Anfrage ist ein Modulimportfehler aufgetreten. Zu den " "häufigsten Ursachen gehören die folgenden:" -#: templates/exceptions/import_error.html:10 +#: netbox/templates/exceptions/import_error.html:10 msgid "Missing required packages" msgstr "Erforderliche Pakete fehlen" -#: templates/exceptions/import_error.html:11 +#: netbox/templates/exceptions/import_error.html:11 msgid "" "This installation of NetBox might be missing one or more required Python " "packages. These packages are listed in requirements.txt and " @@ -12561,11 +13362,11 @@ msgstr "" " aus einfrieren von der Konsole aus und vergleichen Sie die " "Ausgabe mit der Liste der benötigten Pakete." -#: templates/exceptions/import_error.html:20 +#: netbox/templates/exceptions/import_error.html:20 msgid "WSGI service not restarted after upgrade" msgstr "Der WSGI-Dienst wurde nach dem Upgrade nicht neu gestartet" -#: templates/exceptions/import_error.html:21 +#: netbox/templates/exceptions/import_error.html:21 msgid "" "If this installation has recently been upgraded, check that the WSGI service" " (e.g. gunicorn or uWSGI) has been restarted. This ensures that the new code" @@ -12575,7 +13376,7 @@ msgstr "" "WSGI-Dienst (z. B. gunicorn oder uWSGI) neu gestartet wurde. Dadurch wird " "sichergestellt, dass der neue Code ausgeführt wird." -#: templates/exceptions/permission_error.html:6 +#: netbox/templates/exceptions/permission_error.html:6 msgid "" "A file permission error was detected while processing this request. Common " "causes include the following:" @@ -12583,11 +13384,11 @@ msgstr "" "Bei der Verarbeitung dieser Anfrage wurde ein Dateiberechtigungsfehler " "festgestellt. Zu den häufigsten Ursachen gehören die folgenden:" -#: templates/exceptions/permission_error.html:10 +#: netbox/templates/exceptions/permission_error.html:10 msgid "Insufficient write permission to the media root" msgstr "Ungenügende Schreibrechte im Medienverzeichnis" -#: templates/exceptions/permission_error.html:11 +#: netbox/templates/exceptions/permission_error.html:11 #, python-format msgid "" "The configured media root is %(media_root)s. Ensure that the " @@ -12598,7 +13399,7 @@ msgstr "" " Sie sicher, dass der Benutzer NetBox ausgeführt wird und Zugriff hat, um " "Dateien innerhalb dieses Pfads zu schreiben." -#: templates/exceptions/programming_error.html:6 +#: netbox/templates/exceptions/programming_error.html:6 msgid "" "A database programming error was detected while processing this request. " "Common causes include the following:" @@ -12606,11 +13407,11 @@ msgstr "" "Bei der Verarbeitung dieser Anfrage wurde ein Datenbankprogrammierfehler " "festgestellt. Zu den häufigsten Ursachen gehören die folgenden:" -#: templates/exceptions/programming_error.html:10 +#: netbox/templates/exceptions/programming_error.html:10 msgid "Database migrations missing" msgstr "Datenbankmigrationen fehlen" -#: templates/exceptions/programming_error.html:11 +#: netbox/templates/exceptions/programming_error.html:11 msgid "" "When upgrading to a new NetBox release, the upgrade script must be run to " "apply any new database migrations. You can run migrations manually by " @@ -12621,11 +13422,11 @@ msgstr "" "Migrationen manuell anwenden, indem Sie python3 manage.py " "migrate von der Befehlszeile aus ausführen." -#: templates/exceptions/programming_error.html:18 +#: netbox/templates/exceptions/programming_error.html:18 msgid "Unsupported PostgreSQL version" msgstr "PostgreSQL-Version wird nicht unterstützt" -#: templates/exceptions/programming_error.html:19 +#: netbox/templates/exceptions/programming_error.html:19 msgid "" "Ensure that PostgreSQL version 12 or later is in use. You can check this by " "connecting to the database using NetBox's credentials and issuing a query " @@ -12636,99 +13437,102 @@ msgstr "" "NetBox eine Verbindung zur Datenbank herstellen und eine Abfrage mit " "SELECT VERSION()ausführen." -#: templates/extras/configcontext.html:45 -#: templates/extras/configtemplate.html:37 -#: templates/extras/exporttemplate.html:51 +#: netbox/templates/extras/configcontext.html:45 +#: netbox/templates/extras/configtemplate.html:37 +#: netbox/templates/extras/exporttemplate.html:51 msgid "The data file associated with this object has been deleted" msgstr "Die mit diesem Objekt verknüpfte Datei wurde gelöscht" -#: templates/extras/configcontext.html:54 -#: templates/extras/configtemplate.html:46 -#: templates/extras/exporttemplate.html:60 +#: netbox/templates/extras/configcontext.html:54 +#: netbox/templates/extras/configtemplate.html:46 +#: netbox/templates/extras/exporttemplate.html:60 msgid "Data Synced" msgstr "Daten synchronisiert" -#: templates/extras/configcontext_list.html:7 -#: templates/extras/configtemplate_list.html:7 -#: templates/extras/exporttemplate_list.html:7 +#: netbox/templates/extras/configcontext_list.html:7 +#: netbox/templates/extras/configtemplate_list.html:7 +#: netbox/templates/extras/exporttemplate_list.html:7 msgid "Sync Data" msgstr "Daten synchronisieren" -#: templates/extras/configtemplate.html:56 +#: netbox/templates/extras/configtemplate.html:56 msgid "Environment Parameters" msgstr "Umgebungsparameter" -#: templates/extras/configtemplate.html:67 -#: templates/extras/exporttemplate.html:79 +#: netbox/templates/extras/configtemplate.html:67 +#: netbox/templates/extras/exporttemplate.html:79 msgid "Template" msgstr "Vorlage" -#: templates/extras/customfield.html:30 templates/extras/customlink.html:21 +#: netbox/templates/extras/customfield.html:30 +#: netbox/templates/extras/customlink.html:21 msgid "Group Name" msgstr "Name der Gruppe" -#: templates/extras/customfield.html:42 +#: netbox/templates/extras/customfield.html:42 msgid "Must be Unique" msgstr "Muss einzigartig sein" -#: templates/extras/customfield.html:46 +#: netbox/templates/extras/customfield.html:46 msgid "Cloneable" msgstr "Klonbar" -#: templates/extras/customfield.html:56 +#: netbox/templates/extras/customfield.html:56 msgid "Default Value" msgstr "Standardwert" -#: templates/extras/customfield.html:73 +#: netbox/templates/extras/customfield.html:73 msgid "Search Weight" msgstr "Gewichtung in Suche" -#: templates/extras/customfield.html:83 +#: netbox/templates/extras/customfield.html:83 msgid "Filter Logic" msgstr "Filterlogik" -#: templates/extras/customfield.html:87 +#: netbox/templates/extras/customfield.html:87 msgid "Display Weight" msgstr "Gewicht anzeigen" -#: templates/extras/customfield.html:91 +#: netbox/templates/extras/customfield.html:91 msgid "UI Visible" msgstr "UI Sichtbar" -#: templates/extras/customfield.html:95 +#: netbox/templates/extras/customfield.html:95 msgid "UI Editable" msgstr "UI editierbar" -#: templates/extras/customfield.html:115 +#: netbox/templates/extras/customfield.html:115 msgid "Validation Rules" msgstr "Validierungsregeln" -#: templates/extras/customfield.html:126 +#: netbox/templates/extras/customfield.html:126 msgid "Regular Expression" msgstr "Regulärer Ausdruck" -#: templates/extras/customlink.html:29 +#: netbox/templates/extras/customlink.html:29 msgid "Button Class" msgstr "Button-Klasse" -#: templates/extras/customlink.html:39 templates/extras/exporttemplate.html:66 -#: templates/extras/savedfilter.html:39 +#: netbox/templates/extras/customlink.html:39 +#: netbox/templates/extras/exporttemplate.html:66 +#: netbox/templates/extras/savedfilter.html:39 msgid "Assigned Models" msgstr "Zugewiesene Modelle" -#: templates/extras/customlink.html:52 +#: netbox/templates/extras/customlink.html:52 msgid "Link Text" msgstr "Linktext" -#: templates/extras/customlink.html:58 +#: netbox/templates/extras/customlink.html:58 msgid "Link URL" msgstr "Link-URL" -#: templates/extras/dashboard/reset.html:4 templates/home.html:66 +#: netbox/templates/extras/dashboard/reset.html:4 +#: netbox/templates/home.html:66 msgid "Reset Dashboard" msgstr "Dashboard zurücksetzen" -#: templates/extras/dashboard/reset.html:8 +#: netbox/templates/extras/dashboard/reset.html:8 msgid "" "This will remove all configured widgets and restore the " "default dashboard configuration." @@ -12736,7 +13540,7 @@ msgstr "" "Das werden alle konfigurierte Widgets entfernt und die " "Standard-Dashboard-Konfiguration wieder hergestellt." -#: templates/extras/dashboard/reset.html:13 +#: netbox/templates/extras/dashboard/reset.html:13 msgid "" "This change affects only your dashboard, and will not impact other " "users." @@ -12744,154 +13548,161 @@ msgstr "" "Diese Änderung betrifft nur dein Dashboard und hat keine Auswirkungen" " auf andere Benutzer." -#: templates/extras/dashboard/widget.html:21 +#: netbox/templates/extras/dashboard/widget.html:21 msgid "widget configuration" msgstr "Wiget Konfiguration" -#: templates/extras/dashboard/widget.html:36 +#: netbox/templates/extras/dashboard/widget.html:36 msgid "Close widget" msgstr "Schließe Widget" -#: templates/extras/dashboard/widget_add.html:7 +#: netbox/templates/extras/dashboard/widget_add.html:7 msgid "Add a Widget" msgstr "Ein Widget hinzufügen" -#: templates/extras/dashboard/widgets/bookmarks.html:14 +#: netbox/templates/extras/dashboard/widgets/bookmarks.html:14 msgid "No bookmarks have been added yet." msgstr "Es wurden noch keine Lesezeichen hinzugefügt." -#: templates/extras/dashboard/widgets/objectcounts.html:10 +#: netbox/templates/extras/dashboard/widgets/objectcounts.html:10 msgid "No permission" msgstr "Keine Berechtigung" -#: templates/extras/dashboard/widgets/objectlist.html:6 +#: netbox/templates/extras/dashboard/widgets/objectlist.html:6 msgid "No permission to view this content" msgstr "Keine Berechtigung, diesen Inhalt anzusehen" -#: templates/extras/dashboard/widgets/objectlist.html:10 +#: netbox/templates/extras/dashboard/widgets/objectlist.html:10 msgid "Unable to load content. Invalid view name" msgstr "Inhalt kann nicht geladen werden. Ungültiger Name des Views" -#: templates/extras/dashboard/widgets/rssfeed.html:12 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:12 msgid "No content found" msgstr "Kein Inhalt gefunden" -#: templates/extras/dashboard/widgets/rssfeed.html:18 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:18 msgid "There was a problem fetching the RSS feed" msgstr "Beim Abrufen des RSS-Feeds ist ein Problem aufgetreten" -#: templates/extras/dashboard/widgets/rssfeed.html:21 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:21 msgid "HTTP" msgstr "HTTP" -#: templates/extras/eventrule.html:61 +#: netbox/templates/extras/eventrule.html:61 msgid "Conditions" msgstr "Dienst" -#: templates/extras/exporttemplate.html:23 +#: netbox/templates/extras/exporttemplate.html:23 msgid "MIME Type" msgstr "MIME-Typ" -#: templates/extras/exporttemplate.html:27 +#: netbox/templates/extras/exporttemplate.html:27 msgid "File Extension" msgstr "Dateiendung" -#: templates/extras/htmx/script_result.html:10 +#: netbox/templates/extras/htmx/script_result.html:10 msgid "Scheduled for" msgstr "Geplant für" -#: templates/extras/htmx/script_result.html:15 +#: netbox/templates/extras/htmx/script_result.html:15 msgid "Duration" msgstr "Dauer" -#: templates/extras/htmx/script_result.html:23 +#: netbox/templates/extras/htmx/script_result.html:23 msgid "Test Summary" msgstr "Zusammenfassung des Tests" -#: templates/extras/htmx/script_result.html:43 +#: netbox/templates/extras/htmx/script_result.html:43 msgid "Log" msgstr "Log" -#: templates/extras/htmx/script_result.html:56 +#: netbox/templates/extras/htmx/script_result.html:56 msgid "Output" msgstr "Ausgabe" -#: templates/extras/inc/result_pending.html:4 +#: netbox/templates/extras/inc/result_pending.html:4 msgid "Loading" msgstr "Wird geladen" -#: templates/extras/inc/result_pending.html:6 +#: netbox/templates/extras/inc/result_pending.html:6 msgid "Results pending" msgstr "Ergebnisse ausstehend" -#: templates/extras/journalentry.html:15 +#: netbox/templates/extras/journalentry.html:15 msgid "Journal Entry" msgstr "Journaleintrag" -#: templates/extras/notificationgroup.html:11 +#: netbox/templates/extras/notificationgroup.html:11 msgid "Notification Group" msgstr "Benachrichtigungsgruppe" -#: templates/extras/notificationgroup.html:36 -#: templates/extras/notificationgroup.html:46 -#: utilities/templates/widgets/clearable_file_input.html:12 +#: netbox/templates/extras/notificationgroup.html:36 +#: netbox/templates/extras/notificationgroup.html:46 +#: netbox/utilities/templates/widgets/clearable_file_input.html:12 msgid "None assigned" msgstr "Keine zugewiesen" -#: templates/extras/object_configcontext.html:19 +#: netbox/templates/extras/object_configcontext.html:19 msgid "The local config context overwrites all source contexts" msgstr "Der lokale Config-Kontext überschreibt alle Quellkontexte" -#: templates/extras/object_configcontext.html:25 +#: netbox/templates/extras/object_configcontext.html:25 msgid "Source Contexts" msgstr "Quellkontexte" -#: templates/extras/object_journal.html:17 +#: netbox/templates/extras/object_journal.html:17 msgid "New Journal Entry" msgstr "Neuer Journaleintrag" -#: templates/extras/report/base.html:30 +#: netbox/templates/extras/report/base.html:30 msgid "Report" msgstr "Bericht" -#: templates/extras/script.html:14 +#: netbox/templates/extras/script.html:14 msgid "You do not have permission to run scripts" msgstr "Sie sind nicht berechtigt, Skripts auszuführen" -#: templates/extras/script.html:41 templates/extras/script.html:45 -#: templates/extras/script_list.html:86 +#: netbox/templates/extras/script.html:41 +#: netbox/templates/extras/script.html:45 +#: netbox/templates/extras/script_list.html:87 msgid "Run Script" msgstr "Skript ausführen" -#: templates/extras/script.html:51 templates/extras/script/source.html:10 +#: netbox/templates/extras/script.html:51 +#: netbox/templates/extras/script/source.html:10 msgid "Error loading script" msgstr "Fehler beim Laden des Skripts" -#: templates/extras/script/jobs.html:16 +#: netbox/templates/extras/script/jobs.html:16 msgid "Script no longer exists in the source file." msgstr "Das Skript ist in der Quelldatei nicht mehr vorhanden." -#: templates/extras/script_list.html:46 +#: netbox/templates/extras/script_list.html:47 msgid "Last Run" msgstr "Letzter Lauf" -#: templates/extras/script_list.html:61 +#: netbox/templates/extras/script_list.html:62 msgid "Script is no longer present in the source file" msgstr "Das Skript ist in der Quelldatei nicht mehr vorhanden" -#: templates/extras/script_list.html:74 +#: netbox/templates/extras/script_list.html:75 msgid "Never" msgstr "Niemals" -#: templates/extras/script_list.html:84 +#: netbox/templates/extras/script_list.html:85 msgid "Run Again" msgstr "Nochmal ausführen" -#: templates/extras/script_list.html:138 +#: netbox/templates/extras/script_list.html:133 +#, python-format +msgid "Could not load scripts from module %(module)s" +msgstr "Skripte konnten nicht aus dem Modul geladen werden %(module)s" + +#: netbox/templates/extras/script_list.html:141 msgid "No Scripts Found" msgstr "Keine Skripte gefunden" -#: templates/extras/script_list.html:141 +#: netbox/templates/extras/script_list.html:144 #, python-format msgid "" "Get started by creating a script from " @@ -12900,81 +13711,83 @@ msgstr "" "Fangen Sie an mit ein Skript erstellen" " aus einer hochgeladenen Datei oder Datenquelle." -#: templates/extras/script_result.html:35 -#: templates/generic/object_list.html:50 templates/search.html:13 +#: netbox/templates/extras/script_result.html:35 +#: netbox/templates/generic/object_list.html:50 +#: netbox/templates/search.html:13 msgid "Results" msgstr "Ergebnisse" -#: templates/extras/script_result.html:46 +#: netbox/templates/extras/script_result.html:46 msgid "Log threshold" msgstr "Schwellenwert protokollieren" -#: templates/extras/script_result.html:56 +#: netbox/templates/extras/script_result.html:56 msgid "All" msgstr "Alle" -#: templates/extras/tag.html:32 +#: netbox/templates/extras/tag.html:32 msgid "Tagged Items" msgstr "Getaggte Artikel" -#: templates/extras/tag.html:43 +#: netbox/templates/extras/tag.html:43 msgid "Allowed Object Types" msgstr "Erlaubte Objekttypen" -#: templates/extras/tag.html:51 +#: netbox/templates/extras/tag.html:51 msgid "Any" msgstr "Irgendein" -#: templates/extras/tag.html:57 +#: netbox/templates/extras/tag.html:57 msgid "Tagged Item Types" msgstr "Artikeltypen mit Tags" -#: templates/extras/tag.html:81 +#: netbox/templates/extras/tag.html:81 msgid "Tagged Objects" msgstr "Getaggte Objekte" -#: templates/extras/webhook.html:26 +#: netbox/templates/extras/webhook.html:26 msgid "HTTP Method" msgstr "HTTP-Methode" -#: templates/extras/webhook.html:34 +#: netbox/templates/extras/webhook.html:34 msgid "HTTP Content Type" msgstr "HTTP-Inhaltstyp" -#: templates/extras/webhook.html:47 +#: netbox/templates/extras/webhook.html:47 msgid "SSL Verification" msgstr "SSL-Verifizierung" -#: templates/extras/webhook.html:60 +#: netbox/templates/extras/webhook.html:60 msgid "Additional Headers" msgstr "Zusätzliche Header" -#: templates/extras/webhook.html:70 +#: netbox/templates/extras/webhook.html:70 msgid "Body Template" msgstr "Body Template" -#: templates/generic/bulk_add_component.html:29 +#: netbox/templates/generic/bulk_add_component.html:29 msgid "Bulk Creation" msgstr "Massenerstellung" -#: templates/generic/bulk_add_component.html:34 -#: templates/generic/bulk_delete.html:32 templates/generic/bulk_edit.html:33 +#: netbox/templates/generic/bulk_add_component.html:34 +#: netbox/templates/generic/bulk_delete.html:32 +#: netbox/templates/generic/bulk_edit.html:33 msgid "Selected Objects" msgstr "Ausgewählte Objekte" -#: templates/generic/bulk_add_component.html:58 +#: netbox/templates/generic/bulk_add_component.html:58 msgid "to Add" msgstr "hinzufügen" -#: templates/generic/bulk_delete.html:27 +#: netbox/templates/generic/bulk_delete.html:27 msgid "Bulk Delete" msgstr "Massenlöschung" -#: templates/generic/bulk_delete.html:49 +#: netbox/templates/generic/bulk_delete.html:49 msgid "Confirm Bulk Deletion" msgstr "Massenlöschung bestätigen" -#: templates/generic/bulk_delete.html:50 +#: netbox/templates/generic/bulk_delete.html:50 #, python-format msgid "" "The following operation will delete %(count)s " @@ -12985,66 +13798,69 @@ msgstr "" "%(type_plural)s. Bitte überprüfen Sie die ausgewählten Objekte sorgfältig " "und bestätigen Sie diese Aktion." -#: templates/generic/bulk_edit.html:21 templates/generic/object_edit.html:22 +#: netbox/templates/generic/bulk_edit.html:21 +#: netbox/templates/generic/object_edit.html:22 msgid "Editing" msgstr "Bearbeitung" -#: templates/generic/bulk_edit.html:28 +#: netbox/templates/generic/bulk_edit.html:28 msgid "Bulk Edit" msgstr "Massenbearbeitung" -#: templates/generic/bulk_edit.html:107 templates/generic/bulk_rename.html:66 +#: netbox/templates/generic/bulk_edit.html:107 +#: netbox/templates/generic/bulk_rename.html:66 msgid "Apply" msgstr "Anwenden" -#: templates/generic/bulk_import.html:19 +#: netbox/templates/generic/bulk_import.html:19 msgid "Bulk Import" msgstr "Massenimport" -#: templates/generic/bulk_import.html:25 +#: netbox/templates/generic/bulk_import.html:25 msgid "Direct Import" msgstr "Direkter Import" -#: templates/generic/bulk_import.html:30 +#: netbox/templates/generic/bulk_import.html:30 msgid "Upload File" msgstr "Datei hochladen" -#: templates/generic/bulk_import.html:58 templates/generic/bulk_import.html:80 -#: templates/generic/bulk_import.html:102 +#: netbox/templates/generic/bulk_import.html:58 +#: netbox/templates/generic/bulk_import.html:80 +#: netbox/templates/generic/bulk_import.html:102 msgid "Submit" msgstr "Einreichen" -#: templates/generic/bulk_import.html:113 +#: netbox/templates/generic/bulk_import.html:113 msgid "Field Options" msgstr "Feldeigenschaften" -#: templates/generic/bulk_import.html:119 +#: netbox/templates/generic/bulk_import.html:119 msgid "Accessor" msgstr "Datentyp" -#: templates/generic/bulk_import.html:148 +#: netbox/templates/generic/bulk_import.html:148 msgid "choices" msgstr "Auswahlmöglichkeiten" -#: templates/generic/bulk_import.html:161 +#: netbox/templates/generic/bulk_import.html:161 msgid "Import Value" msgstr "Wert importieren" -#: templates/generic/bulk_import.html:181 +#: netbox/templates/generic/bulk_import.html:181 msgid "Format: YYYY-MM-DD" msgstr "Format: YYYY-MM-DD" -#: templates/generic/bulk_import.html:183 +#: netbox/templates/generic/bulk_import.html:183 msgid "Specify true or false" msgstr "Geben Sie wahr oder falsch an" -#: templates/generic/bulk_import.html:195 +#: netbox/templates/generic/bulk_import.html:195 msgid "Required fields must be specified for all objects." msgstr "" "Erforderliche Felder müssen für alle Objekte angegeben " "werden." -#: templates/generic/bulk_import.html:201 +#: netbox/templates/generic/bulk_import.html:201 #, python-format msgid "" "Related objects may be referenced by any unique attribute. For example, " @@ -13054,15 +13870,15 @@ msgstr "" "werden. Zum Beispiel %(example)s würde ein VRF anhand seines " "Routenunterscheiders identifizieren." -#: templates/generic/bulk_remove.html:28 +#: netbox/templates/generic/bulk_remove.html:28 msgid "Bulk Remove" msgstr "Massen-Entfernung" -#: templates/generic/bulk_remove.html:42 +#: netbox/templates/generic/bulk_remove.html:42 msgid "Confirm Bulk Removal" msgstr "Bestätigen Sie die Massenentfernung" -#: templates/generic/bulk_remove.html:43 +#: netbox/templates/generic/bulk_remove.html:43 #, python-format msgid "" "The following operation will remove %(count)s %(obj_type_plural)s from " @@ -13073,72 +13889,72 @@ msgstr "" "%(parent_obj)s. Bitte überprüfen Sie sorgfältig die %(obj_type_plural)s muss" " entfernt werden und unten bestätigt werden." -#: templates/generic/bulk_remove.html:64 +#: netbox/templates/generic/bulk_remove.html:64 #, python-format msgid "Remove these %(count)s %(obj_type_plural)s" msgstr "Entferne diese %(count)s %(obj_type_plural)s" -#: templates/generic/bulk_rename.html:20 +#: netbox/templates/generic/bulk_rename.html:20 msgid "Renaming" msgstr "Umbenennen" -#: templates/generic/bulk_rename.html:27 +#: netbox/templates/generic/bulk_rename.html:27 msgid "Bulk Rename" msgstr "Massen-Umbenennung" -#: templates/generic/bulk_rename.html:39 +#: netbox/templates/generic/bulk_rename.html:39 msgid "Current Name" msgstr "Aktueller Name" -#: templates/generic/bulk_rename.html:40 +#: netbox/templates/generic/bulk_rename.html:40 msgid "New Name" msgstr "Neuer Name" -#: templates/generic/bulk_rename.html:64 -#: utilities/templates/widgets/markdown_input.html:11 +#: netbox/templates/generic/bulk_rename.html:64 +#: netbox/utilities/templates/widgets/markdown_input.html:11 msgid "Preview" msgstr "Vorschau" -#: templates/generic/confirmation_form.html:16 +#: netbox/templates/generic/confirmation_form.html:16 msgid "Are you sure" msgstr "Bist du sicher" -#: templates/generic/confirmation_form.html:20 +#: netbox/templates/generic/confirmation_form.html:20 msgid "Confirm" msgstr "Bestätigen" -#: templates/generic/object_children.html:47 -#: utilities/templates/buttons/bulk_edit.html:4 +#: netbox/templates/generic/object_children.html:47 +#: netbox/utilities/templates/buttons/bulk_edit.html:4 msgid "Edit Selected" msgstr "Ausgewählte bearbeiten" -#: templates/generic/object_children.html:61 -#: utilities/templates/buttons/bulk_delete.html:4 +#: netbox/templates/generic/object_children.html:61 +#: netbox/utilities/templates/buttons/bulk_delete.html:4 msgid "Delete Selected" msgstr "Ausgewählte löschen" -#: templates/generic/object_edit.html:24 +#: netbox/templates/generic/object_edit.html:24 #, python-format msgid "Add a new %(object_type)s" msgstr "Füge ein neues %(object_type)s hinzu" -#: templates/generic/object_edit.html:35 +#: netbox/templates/generic/object_edit.html:35 msgid "View model documentation" msgstr "Modelldokumentation anzeigen" -#: templates/generic/object_edit.html:36 +#: netbox/templates/generic/object_edit.html:36 msgid "Help" msgstr "Hilfe" -#: templates/generic/object_edit.html:83 +#: netbox/templates/generic/object_edit.html:83 msgid "Create & Add Another" msgstr "Erstellen & Neues hinzufügen" -#: templates/generic/object_list.html:57 +#: netbox/templates/generic/object_list.html:57 msgid "Filters" msgstr "Filter" -#: templates/generic/object_list.html:88 +#: netbox/templates/generic/object_list.html:88 #, python-format msgid "" "Select all %(count)s " @@ -13147,40 +13963,40 @@ msgstr "" "Wählen alles %(count)s " "%(object_type_plural)s passende Abfrage" -#: templates/home.html:15 +#: netbox/templates/home.html:15 msgid "New Release Available" msgstr "Neue Version verfügbar" -#: templates/home.html:16 +#: netbox/templates/home.html:16 msgid "is available" msgstr "ist verfügbar" -#: templates/home.html:18 +#: netbox/templates/home.html:18 msgctxt "Document title" msgid "Upgrade Instructions" msgstr "Anweisungen zum Upgrade" -#: templates/home.html:40 +#: netbox/templates/home.html:40 msgid "Unlock Dashboard" msgstr "Dashboard entsperren" -#: templates/home.html:49 +#: netbox/templates/home.html:49 msgid "Lock Dashboard" msgstr "Dashboard sperren" -#: templates/home.html:60 +#: netbox/templates/home.html:60 msgid "Add Widget" msgstr "Widget hinzufügen" -#: templates/home.html:63 +#: netbox/templates/home.html:63 msgid "Save Layout" msgstr "Layout speichern" -#: templates/htmx/delete_form.html:7 +#: netbox/templates/htmx/delete_form.html:7 msgid "Confirm Deletion" msgstr "Löschen bestätigen" -#: templates/htmx/delete_form.html:11 +#: netbox/templates/htmx/delete_form.html:11 #, python-format msgid "" "Are you sure you want to delete " @@ -13189,40 +14005,40 @@ msgstr "" "Bist du sicher, dass du %(object_type)s %(object)s löschen willst?" -#: templates/htmx/delete_form.html:17 +#: netbox/templates/htmx/delete_form.html:17 msgid "The following objects will be deleted as a result of this action." msgstr "Die folgenden Objekte werden als Ergebnis dieser Aktion gelöscht." -#: templates/htmx/notifications.html:15 +#: netbox/templates/htmx/notifications.html:15 msgid "ago" msgstr "vor" -#: templates/htmx/notifications.html:26 +#: netbox/templates/htmx/notifications.html:26 msgid "No unread notifications" msgstr "Keine ungelesenen Benachrichtigungen" -#: templates/htmx/notifications.html:31 +#: netbox/templates/htmx/notifications.html:31 msgid "All notifications" msgstr "Alle Benachrichtigungen" -#: templates/htmx/object_selector.html:5 +#: netbox/templates/htmx/object_selector.html:5 msgid "Select" msgstr "Auswählen" -#: templates/inc/filter_list.html:43 -#: utilities/templates/helpers/table_config_form.html:39 +#: netbox/templates/inc/filter_list.html:43 +#: netbox/utilities/templates/helpers/table_config_form.html:39 msgid "Reset" msgstr "Zurücksetzen" -#: templates/inc/light_toggle.html:4 +#: netbox/templates/inc/light_toggle.html:4 msgid "Enable dark mode" msgstr "Dunkle Ansicht aktivieren" -#: templates/inc/light_toggle.html:7 +#: netbox/templates/inc/light_toggle.html:7 msgid "Enable light mode" msgstr "Helle Ansicht aktivieren" -#: templates/inc/missing_prerequisites.html:8 +#: netbox/templates/inc/missing_prerequisites.html:8 #, python-format msgid "" "Before you can add a %(model)s you must first create a " @@ -13231,281 +14047,283 @@ msgstr "" "Bevor Sie ein %(model)s hinzufügen können, müssen Sie zunächst ein " "%(prerequisite_model)s erstellen." -#: templates/inc/paginator.html:15 +#: netbox/templates/inc/paginator.html:15 msgid "Page selection" msgstr "Auswahl der Seite" -#: templates/inc/paginator.html:75 +#: netbox/templates/inc/paginator.html:75 #, python-format msgid "Showing %(start)s-%(end)s of %(total)s" msgstr "Zeige %(start)s-%(end)s von %(total)s" -#: templates/inc/paginator.html:82 +#: netbox/templates/inc/paginator.html:82 msgid "Pagination options" msgstr "Optionen für die Seitennummerierung" -#: templates/inc/paginator.html:86 +#: netbox/templates/inc/paginator.html:86 msgid "Per Page" msgstr "pro Seite" -#: templates/inc/panels/image_attachments.html:10 +#: netbox/templates/inc/panels/image_attachments.html:10 msgid "Attach an image" msgstr "Ein Bild anhängen" -#: templates/inc/panels/related_objects.html:5 +#: netbox/templates/inc/panels/related_objects.html:5 msgid "Related Objects" msgstr "Verwandte Objekte" -#: templates/inc/panels/tags.html:11 +#: netbox/templates/inc/panels/tags.html:11 msgid "No tags assigned" msgstr "Keine Tags zugewiesen" -#: templates/inc/sync_warning.html:10 +#: netbox/templates/inc/sync_warning.html:10 msgid "Data is out of sync with upstream file" msgstr "Die Daten sind nicht mit der Upstream-Datei synchronisiert" -#: templates/inc/table_controls_htmx.html:7 +#: netbox/templates/inc/table_controls_htmx.html:7 msgid "Quick search" msgstr "Schnellsuche" -#: templates/inc/table_controls_htmx.html:20 +#: netbox/templates/inc/table_controls_htmx.html:20 msgid "Saved filter" msgstr "Gespeicherte Filter" -#: templates/inc/table_htmx.html:18 +#: netbox/templates/inc/table_htmx.html:18 msgid "Clear ordering" msgstr "Reihenfolge löschen" -#: templates/inc/user_menu.html:6 +#: netbox/templates/inc/user_menu.html:6 msgid "Help center" msgstr "Hilfecenter" -#: templates/inc/user_menu.html:41 +#: netbox/templates/inc/user_menu.html:41 msgid "Django Admin" msgstr "Django-Admin" -#: templates/inc/user_menu.html:61 +#: netbox/templates/inc/user_menu.html:61 msgid "Log Out" msgstr "Abmelden" -#: templates/inc/user_menu.html:68 templates/login.html:38 +#: netbox/templates/inc/user_menu.html:68 netbox/templates/login.html:38 msgid "Log In" msgstr "Anmelden" -#: templates/ipam/aggregate.html:14 templates/ipam/ipaddress.html:14 -#: templates/ipam/iprange.html:13 templates/ipam/prefix.html:15 +#: netbox/templates/ipam/aggregate.html:14 +#: netbox/templates/ipam/ipaddress.html:14 +#: netbox/templates/ipam/iprange.html:13 netbox/templates/ipam/prefix.html:15 msgid "Family" msgstr "Familie" -#: templates/ipam/aggregate.html:39 +#: netbox/templates/ipam/aggregate.html:39 msgid "Date Added" msgstr "hinzugefügt am" -#: templates/ipam/aggregate/prefixes.html:8 -#: templates/ipam/prefix/prefixes.html:8 templates/ipam/role.html:10 +#: netbox/templates/ipam/aggregate/prefixes.html:8 +#: netbox/templates/ipam/prefix/prefixes.html:8 +#: netbox/templates/ipam/role.html:10 msgid "Add Prefix" msgstr "Prefix hinzufügen" -#: templates/ipam/asn.html:23 +#: netbox/templates/ipam/asn.html:23 msgid "AS Number" msgstr "AS-Nummer" -#: templates/ipam/fhrpgroup.html:52 +#: netbox/templates/ipam/fhrpgroup.html:52 msgid "Authentication Type" msgstr "Art der Authentifizierung" -#: templates/ipam/fhrpgroup.html:56 +#: netbox/templates/ipam/fhrpgroup.html:56 msgid "Authentication Key" msgstr "Authentifizierungsschlüssel" -#: templates/ipam/fhrpgroup.html:69 +#: netbox/templates/ipam/fhrpgroup.html:69 msgid "Virtual IP Addresses" msgstr "Virtuelle IP-Adressen" -#: templates/ipam/inc/ipaddress_edit_header.html:13 +#: netbox/templates/ipam/inc/ipaddress_edit_header.html:13 msgid "Assign IP" msgstr "IP zuweisen" -#: templates/ipam/inc/ipaddress_edit_header.html:19 +#: netbox/templates/ipam/inc/ipaddress_edit_header.html:19 msgid "Bulk Create" msgstr "Massen-Erstellung" -#: templates/ipam/inc/panels/fhrp_groups.html:10 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:10 msgid "Create Group" msgstr "Gruppe erstellen" -#: templates/ipam/inc/panels/fhrp_groups.html:25 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:25 msgid "Virtual IPs" msgstr "Virtuelle IPs" -#: templates/ipam/inc/toggle_available.html:7 +#: netbox/templates/ipam/inc/toggle_available.html:7 msgid "Show Assigned" msgstr "Zugewiesene anzeigen" -#: templates/ipam/inc/toggle_available.html:10 +#: netbox/templates/ipam/inc/toggle_available.html:10 msgid "Show Available" msgstr "Verfügbare anzeigen" -#: templates/ipam/inc/toggle_available.html:13 +#: netbox/templates/ipam/inc/toggle_available.html:13 msgid "Show All" msgstr "Alles anzeigen" -#: templates/ipam/ipaddress.html:23 templates/ipam/iprange.html:45 -#: templates/ipam/prefix.html:24 +#: netbox/templates/ipam/ipaddress.html:23 +#: netbox/templates/ipam/iprange.html:45 netbox/templates/ipam/prefix.html:24 msgid "Global" msgstr "Weltweit" -#: templates/ipam/ipaddress.html:85 +#: netbox/templates/ipam/ipaddress.html:85 msgid "NAT (outside)" msgstr "NAT (außen)" -#: templates/ipam/ipaddress_assign.html:8 +#: netbox/templates/ipam/ipaddress_assign.html:8 msgid "Assign an IP Address" msgstr "Eine IP-Adresse zuweisen" -#: templates/ipam/ipaddress_assign.html:22 +#: netbox/templates/ipam/ipaddress_assign.html:22 msgid "Select IP Address" msgstr "Wählen Sie die IP-Adresse" -#: templates/ipam/ipaddress_assign.html:35 +#: netbox/templates/ipam/ipaddress_assign.html:35 msgid "Search Results" msgstr "Suchergebnisse" -#: templates/ipam/ipaddress_bulk_add.html:6 +#: netbox/templates/ipam/ipaddress_bulk_add.html:6 msgid "Bulk Add IP Addresses" msgstr "IP-Adressen massenweise hinzufügen" -#: templates/ipam/iprange.html:17 +#: netbox/templates/ipam/iprange.html:17 msgid "Starting Address" msgstr "Startadresse" -#: templates/ipam/iprange.html:21 +#: netbox/templates/ipam/iprange.html:21 msgid "Ending Address" msgstr "Endadresse" -#: templates/ipam/iprange.html:33 templates/ipam/prefix.html:110 +#: netbox/templates/ipam/iprange.html:33 netbox/templates/ipam/prefix.html:110 msgid "Marked fully utilized" msgstr "Als voll belegt markiert" -#: templates/ipam/prefix.html:99 +#: netbox/templates/ipam/prefix.html:99 msgid "Addressing Details" msgstr "Angaben zur Adressierung" -#: templates/ipam/prefix.html:118 +#: netbox/templates/ipam/prefix.html:118 msgid "Child IPs" msgstr "untergeordnete IPs" -#: templates/ipam/prefix.html:126 +#: netbox/templates/ipam/prefix.html:126 msgid "Available IPs" msgstr "Verfügbare IPs" -#: templates/ipam/prefix.html:138 +#: netbox/templates/ipam/prefix.html:138 msgid "First available IP" msgstr "Erste verfügbare IP" -#: templates/ipam/prefix.html:179 +#: netbox/templates/ipam/prefix.html:179 msgid "Prefix Details" msgstr "Präfix-Details" -#: templates/ipam/prefix.html:185 +#: netbox/templates/ipam/prefix.html:185 msgid "Network Address" msgstr "Netzwerkadresse" -#: templates/ipam/prefix.html:189 +#: netbox/templates/ipam/prefix.html:189 msgid "Network Mask" msgstr "Netzwerkmaske" -#: templates/ipam/prefix.html:193 +#: netbox/templates/ipam/prefix.html:193 msgid "Wildcard Mask" msgstr "Wildcardmaske" -#: templates/ipam/prefix.html:197 +#: netbox/templates/ipam/prefix.html:197 msgid "Broadcast Address" msgstr "Broadcast-Adresse" -#: templates/ipam/prefix/ip_ranges.html:7 +#: netbox/templates/ipam/prefix/ip_ranges.html:7 msgid "Add IP Range" msgstr "IP-Bereich hinzufügen" -#: templates/ipam/prefix_list.html:7 +#: netbox/templates/ipam/prefix_list.html:7 msgid "Hide Depth Indicators" msgstr "Tiefenindikatoren ausblenden" -#: templates/ipam/prefix_list.html:11 +#: netbox/templates/ipam/prefix_list.html:11 msgid "Max Depth" msgstr "Max. Tiefe" -#: templates/ipam/prefix_list.html:28 +#: netbox/templates/ipam/prefix_list.html:28 msgid "Max Length" msgstr "Max. Länge" -#: templates/ipam/rir.html:10 +#: netbox/templates/ipam/rir.html:10 msgid "Add Aggregate" msgstr "Aggregat hinzufügen" -#: templates/ipam/routetarget.html:38 +#: netbox/templates/ipam/routetarget.html:38 msgid "Importing VRFs" msgstr "VRFs importieren" -#: templates/ipam/routetarget.html:44 +#: netbox/templates/ipam/routetarget.html:44 msgid "Exporting VRFs" msgstr "VRFs exportieren" -#: templates/ipam/routetarget.html:52 +#: netbox/templates/ipam/routetarget.html:52 msgid "Importing L2VPNs" msgstr "L2VPNs importieren" -#: templates/ipam/routetarget.html:58 +#: netbox/templates/ipam/routetarget.html:58 msgid "Exporting L2VPNs" msgstr "L2VPNs exportieren" -#: templates/ipam/vlan.html:88 +#: netbox/templates/ipam/vlan.html:88 msgid "Add a Prefix" msgstr "Präfix hinzufügen" -#: templates/ipam/vlangroup.html:18 +#: netbox/templates/ipam/vlangroup.html:18 msgid "Add VLAN" msgstr "VLAN hinzufügen" -#: templates/ipam/vrf.html:16 +#: netbox/templates/ipam/vrf.html:16 msgid "Route Distinguisher" msgstr "Routenunterscheidungsmerkmal" -#: templates/ipam/vrf.html:29 +#: netbox/templates/ipam/vrf.html:29 msgid "Unique IP Space" msgstr "Einzigartiger IP-Raum" -#: templates/login.html:29 -#: utilities/templates/form_helpers/render_errors.html:7 +#: netbox/templates/login.html:29 +#: netbox/utilities/templates/form_helpers/render_errors.html:7 msgid "Errors" msgstr "Fehler" -#: templates/login.html:69 +#: netbox/templates/login.html:69 msgid "Sign In" msgstr "Anmelden" -#: templates/login.html:77 +#: netbox/templates/login.html:77 msgctxt "Denotes an alternative option" msgid "Or" msgstr "Oder" -#: templates/media_failure.html:7 +#: netbox/templates/media_failure.html:7 msgid "Static Media Failure - NetBox" msgstr "Statischer Medienfehler - NetBox" -#: templates/media_failure.html:21 +#: netbox/templates/media_failure.html:21 msgid "Static Media Failure" msgstr "Statischer Medienfehler" -#: templates/media_failure.html:23 +#: netbox/templates/media_failure.html:23 msgid "The following static media file failed to load" msgstr "Die folgende statische Mediendatei konnte nicht geladen werden" -#: templates/media_failure.html:26 +#: netbox/templates/media_failure.html:26 msgid "Check the following" msgstr "Überprüfe das Folgende" -#: templates/media_failure.html:29 +#: netbox/templates/media_failure.html:29 msgid "" "manage.py collectstatic was run during the most recent upgrade." " This installs the most recent iteration of each static file into the static" @@ -13515,7 +14333,7 @@ msgstr "" "Upgrades ausgeführt. Dadurch wird die neueste Iteration jeder statischen " "Datei im statischen Stammpfad installiert." -#: templates/media_failure.html:35 +#: netbox/templates/media_failure.html:35 #, python-format msgid "" "The HTTP service (e.g. nginx or Apache) is configured to serve files from " @@ -13527,7 +14345,7 @@ msgstr "" "href=\"%(docs_url)s\">the installation documentation für weitere " "Anleitungen." -#: templates/media_failure.html:47 +#: netbox/templates/media_failure.html:47 #, python-format msgid "" "The file %(filename)s exists in the static root directory and " @@ -13536,550 +14354,574 @@ msgstr "" "Die Datei%(filename)s existiert im statischen Stammverzeichnis " "und ist für den HTTP-Server lesbar." -#: templates/media_failure.html:55 +#: netbox/templates/media_failure.html:55 #, python-format msgid "Click here to attempt loading NetBox again." msgstr "" "Klicken Sie hier um erneut zu versuchen, NetBox" " zu laden." -#: templates/tenancy/contact.html:18 tenancy/filtersets.py:147 -#: tenancy/forms/bulk_edit.py:137 tenancy/forms/filtersets.py:102 -#: tenancy/forms/forms.py:56 tenancy/forms/model_forms.py:106 -#: tenancy/forms/model_forms.py:130 tenancy/tables/contacts.py:98 +#: netbox/templates/tenancy/contact.html:18 netbox/tenancy/filtersets.py: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/model_forms.py:130 +#: netbox/tenancy/tables/contacts.py:98 msgid "Contact" msgstr "Kontakt" -#: templates/tenancy/contact.html:29 tenancy/forms/bulk_edit.py:99 +#: netbox/templates/tenancy/contact.html:29 +#: netbox/tenancy/forms/bulk_edit.py:99 msgid "Title" msgstr "Titel" -#: templates/tenancy/contact.html:33 tenancy/forms/bulk_edit.py:104 -#: tenancy/tables/contacts.py:64 +#: netbox/templates/tenancy/contact.html:33 +#: netbox/tenancy/forms/bulk_edit.py:104 netbox/tenancy/tables/contacts.py:64 msgid "Phone" msgstr "Telefon" -#: templates/tenancy/contactgroup.html:18 tenancy/forms/forms.py:66 -#: tenancy/forms/model_forms.py:75 +#: netbox/templates/tenancy/contactgroup.html:18 +#: netbox/tenancy/forms/forms.py:66 netbox/tenancy/forms/model_forms.py:75 msgid "Contact Group" msgstr "Kontaktgruppe" -#: templates/tenancy/contactgroup.html:50 +#: netbox/templates/tenancy/contactgroup.html:50 msgid "Add Contact Group" msgstr "Kontaktgruppe hinzufügen" -#: templates/tenancy/contactrole.html:15 tenancy/filtersets.py:152 -#: tenancy/forms/forms.py:61 tenancy/forms/model_forms.py:87 +#: netbox/templates/tenancy/contactrole.html:15 +#: netbox/tenancy/filtersets.py:152 netbox/tenancy/forms/forms.py:61 +#: netbox/tenancy/forms/model_forms.py:87 msgid "Contact Role" msgstr "Kontaktrolle" -#: templates/tenancy/object_contacts.html:9 +#: netbox/templates/tenancy/object_contacts.html:9 msgid "Add a contact" msgstr "Einen Kontakt hinzufügen" -#: templates/tenancy/tenantgroup.html:17 +#: netbox/templates/tenancy/tenantgroup.html:17 msgid "Add Tenant" msgstr "Mandant hinzufügen" -#: templates/tenancy/tenantgroup.html:26 tenancy/forms/model_forms.py:32 -#: tenancy/tables/columns.py:51 tenancy/tables/columns.py:61 +#: netbox/templates/tenancy/tenantgroup.html:26 +#: netbox/tenancy/forms/model_forms.py:32 netbox/tenancy/tables/columns.py:51 +#: netbox/tenancy/tables/columns.py:61 msgid "Tenant Group" msgstr "Mandantengruppe" -#: templates/tenancy/tenantgroup.html:59 +#: netbox/templates/tenancy/tenantgroup.html:59 msgid "Add Tenant Group" msgstr "Mandantengruppe hinzufügen" -#: templates/users/group.html:39 templates/users/user.html:63 +#: netbox/templates/users/group.html:39 netbox/templates/users/user.html:63 msgid "Assigned Permissions" msgstr "Zugewiesene Berechtigungen" -#: templates/users/objectpermission.html:6 -#: templates/users/objectpermission.html:14 users/forms/filtersets.py:66 +#: netbox/templates/users/objectpermission.html:6 +#: netbox/templates/users/objectpermission.html:14 +#: netbox/users/forms/filtersets.py:66 msgid "Permission" msgstr "Berechtigung" -#: templates/users/objectpermission.html:34 +#: netbox/templates/users/objectpermission.html:34 msgid "View" msgstr "Ansicht" -#: templates/users/objectpermission.html:52 users/forms/model_forms.py:315 +#: netbox/templates/users/objectpermission.html:52 +#: netbox/users/forms/model_forms.py:315 msgid "Constraints" msgstr "Einschränkungen" -#: templates/users/objectpermission.html:72 +#: netbox/templates/users/objectpermission.html:72 msgid "Assigned Users" msgstr "Zugewiesene Benutzer" -#: templates/virtualization/cluster.html:52 +#: netbox/templates/virtualization/cluster.html:52 msgid "Allocated Resources" msgstr "Zugewiesene Ressourcen" -#: templates/virtualization/cluster.html:55 -#: templates/virtualization/virtualmachine.html:125 +#: netbox/templates/virtualization/cluster.html:55 +#: netbox/templates/virtualization/virtualmachine.html:125 msgid "Virtual CPUs" msgstr "Virtuelle CPUs" -#: templates/virtualization/cluster.html:59 -#: templates/virtualization/virtualmachine.html:129 +#: netbox/templates/virtualization/cluster.html:59 +#: netbox/templates/virtualization/virtualmachine.html:129 msgid "Memory" msgstr "Arbeitsspeicher" -#: templates/virtualization/cluster.html:69 -#: templates/virtualization/virtualmachine.html:140 +#: netbox/templates/virtualization/cluster.html:69 +#: netbox/templates/virtualization/virtualmachine.html:140 msgid "Disk Space" msgstr "Speicherplatz" -#: templates/virtualization/cluster/base.html:18 +#: netbox/templates/virtualization/cluster/base.html:18 msgid "Add Virtual Machine" msgstr "Virtuelle Maschine hinzufügen" -#: templates/virtualization/cluster/base.html:24 +#: netbox/templates/virtualization/cluster/base.html:24 msgid "Assign Device" msgstr "Gerät zuweisen" -#: templates/virtualization/cluster/devices.html:10 +#: netbox/templates/virtualization/cluster/devices.html:10 msgid "Remove Selected" msgstr "Ausgewähltes entfernen" -#: templates/virtualization/cluster_add_devices.html:9 +#: netbox/templates/virtualization/cluster_add_devices.html:9 #, python-format msgid "Add Device to Cluster %(cluster)s" msgstr "Gerät zum Cluster hinzufügen %(cluster)s" -#: templates/virtualization/cluster_add_devices.html:23 +#: netbox/templates/virtualization/cluster_add_devices.html:23 msgid "Device Selection" msgstr "Geräte-Auswahl" -#: templates/virtualization/cluster_add_devices.html:31 +#: netbox/templates/virtualization/cluster_add_devices.html:31 msgid "Add Devices" msgstr "Geräte hinzufügen" -#: templates/virtualization/clustergroup.html:10 -#: templates/virtualization/clustertype.html:10 +#: netbox/templates/virtualization/clustergroup.html:10 +#: netbox/templates/virtualization/clustertype.html:10 msgid "Add Cluster" msgstr "Cluster hinzufügen" -#: templates/virtualization/clustergroup.html:19 -#: virtualization/forms/model_forms.py:50 +#: netbox/templates/virtualization/clustergroup.html:19 +#: netbox/virtualization/forms/model_forms.py:50 msgid "Cluster Group" msgstr "Clustergruppe" -#: templates/virtualization/clustertype.html:19 -#: templates/virtualization/virtualmachine.html:110 -#: virtualization/forms/model_forms.py:36 +#: netbox/templates/virtualization/clustertype.html:19 +#: netbox/templates/virtualization/virtualmachine.html:110 +#: netbox/virtualization/forms/model_forms.py:36 msgid "Cluster Type" msgstr "Cluster-Typ" -#: templates/virtualization/virtualdisk.html:18 +#: netbox/templates/virtualization/virtualdisk.html:18 msgid "Virtual Disk" msgstr "Virtuelle Festplatte" -#: templates/virtualization/virtualmachine.html:122 -#: virtualization/forms/bulk_edit.py:190 -#: virtualization/forms/model_forms.py:224 +#: netbox/templates/virtualization/virtualmachine.html:122 +#: netbox/virtualization/forms/bulk_edit.py:190 +#: netbox/virtualization/forms/model_forms.py:224 msgid "Resources" msgstr "Ressourcen" -#: templates/virtualization/virtualmachine.html:178 +#: netbox/templates/virtualization/virtualmachine.html:178 msgid "Add Virtual Disk" msgstr "Virtuelles Laufwerk hinzufügen" -#: templates/vpn/ikepolicy.html:10 templates/vpn/ipsecprofile.html:33 -#: vpn/tables/crypto.py:166 +#: 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 msgid "IKE Policy" msgstr "IKE-Richtlinie" -#: templates/vpn/ikepolicy.html:21 +#: netbox/templates/vpn/ikepolicy.html:21 msgid "IKE Version" msgstr "IKE-Version" -#: templates/vpn/ikepolicy.html:29 +#: netbox/templates/vpn/ikepolicy.html:29 msgid "Pre-Shared Key" -msgstr "Vorab geteilter Schlüssel" +msgstr "Pre-Shared Key" -#: templates/vpn/ikepolicy.html:33 -#: templates/wireless/inc/authentication_attrs.html:20 +#: netbox/templates/vpn/ikepolicy.html:33 +#: netbox/templates/wireless/inc/authentication_attrs.html:20 msgid "Show Secret" msgstr "Secret anzeigen" -#: templates/vpn/ikepolicy.html:57 templates/vpn/ipsecpolicy.html:45 -#: templates/vpn/ipsecprofile.html:52 templates/vpn/ipsecprofile.html:77 -#: vpn/forms/model_forms.py:316 vpn/forms/model_forms.py:352 -#: vpn/tables/crypto.py:68 vpn/tables/crypto.py:134 +#: netbox/templates/vpn/ikepolicy.html:57 +#: netbox/templates/vpn/ipsecpolicy.html:45 +#: netbox/templates/vpn/ipsecprofile.html:52 +#: netbox/templates/vpn/ipsecprofile.html:77 +#: netbox/vpn/forms/model_forms.py:316 netbox/vpn/forms/model_forms.py:352 +#: netbox/vpn/tables/crypto.py:68 netbox/vpn/tables/crypto.py:134 msgid "Proposals" msgstr "Vorschläge" -#: templates/vpn/ikeproposal.html:10 +#: netbox/templates/vpn/ikeproposal.html:10 msgid "IKE Proposal" msgstr "IKE-Vorschlag" -#: templates/vpn/ikeproposal.html:21 vpn/forms/bulk_edit.py:97 -#: vpn/forms/bulk_import.py:145 vpn/forms/filtersets.py:101 +#: netbox/templates/vpn/ikeproposal.html:21 netbox/vpn/forms/bulk_edit.py:97 +#: netbox/vpn/forms/bulk_import.py:145 netbox/vpn/forms/filtersets.py:101 msgid "Authentication method" msgstr "Authentifizierungsmethode" -#: templates/vpn/ikeproposal.html:25 templates/vpn/ipsecproposal.html:21 -#: vpn/forms/bulk_edit.py:102 vpn/forms/bulk_edit.py:172 -#: vpn/forms/bulk_import.py:149 vpn/forms/bulk_import.py:195 -#: vpn/forms/filtersets.py:106 vpn/forms/filtersets.py:154 +#: netbox/templates/vpn/ikeproposal.html:25 +#: netbox/templates/vpn/ipsecproposal.html:21 +#: netbox/vpn/forms/bulk_edit.py:102 netbox/vpn/forms/bulk_edit.py:172 +#: netbox/vpn/forms/bulk_import.py:149 netbox/vpn/forms/bulk_import.py:195 +#: netbox/vpn/forms/filtersets.py:106 netbox/vpn/forms/filtersets.py:154 msgid "Encryption algorithm" msgstr "Verschlüsselungsalgorithmus" -#: templates/vpn/ikeproposal.html:29 templates/vpn/ipsecproposal.html:25 -#: vpn/forms/bulk_edit.py:107 vpn/forms/bulk_edit.py:177 -#: vpn/forms/bulk_import.py:153 vpn/forms/bulk_import.py:200 -#: vpn/forms/filtersets.py:111 vpn/forms/filtersets.py:159 +#: netbox/templates/vpn/ikeproposal.html:29 +#: netbox/templates/vpn/ipsecproposal.html:25 +#: netbox/vpn/forms/bulk_edit.py:107 netbox/vpn/forms/bulk_edit.py:177 +#: netbox/vpn/forms/bulk_import.py:153 netbox/vpn/forms/bulk_import.py:200 +#: netbox/vpn/forms/filtersets.py:111 netbox/vpn/forms/filtersets.py:159 msgid "Authentication algorithm" msgstr "Authentifizierungsalgorithmus" -#: templates/vpn/ikeproposal.html:33 +#: netbox/templates/vpn/ikeproposal.html:33 msgid "DH group" msgstr "DH-Gruppe" -#: templates/vpn/ikeproposal.html:37 templates/vpn/ipsecproposal.html:29 -#: vpn/forms/bulk_edit.py:182 vpn/models/crypto.py:146 +#: netbox/templates/vpn/ikeproposal.html:37 +#: netbox/templates/vpn/ipsecproposal.html:29 +#: netbox/vpn/forms/bulk_edit.py:182 netbox/vpn/models/crypto.py:146 msgid "SA lifetime (seconds)" msgstr "SA-Lebensdauer (Sekunden)" -#: templates/vpn/ipsecpolicy.html:10 templates/vpn/ipsecprofile.html:66 -#: vpn/tables/crypto.py:170 +#: netbox/templates/vpn/ipsecpolicy.html:10 +#: netbox/templates/vpn/ipsecprofile.html:66 netbox/vpn/tables/crypto.py:170 msgid "IPSec Policy" msgstr "IPSec-Richtlinie" -#: templates/vpn/ipsecpolicy.html:21 vpn/forms/bulk_edit.py:210 -#: vpn/models/crypto.py:193 +#: netbox/templates/vpn/ipsecpolicy.html:21 netbox/vpn/forms/bulk_edit.py:210 +#: netbox/vpn/models/crypto.py:193 msgid "PFS group" msgstr "PFS-Gruppe" -#: templates/vpn/ipsecprofile.html:10 vpn/forms/model_forms.py:54 +#: netbox/templates/vpn/ipsecprofile.html:10 +#: netbox/vpn/forms/model_forms.py:54 msgid "IPSec Profile" msgstr "IPSec-Profil" -#: templates/vpn/ipsecprofile.html:89 vpn/tables/crypto.py:137 +#: netbox/templates/vpn/ipsecprofile.html:89 netbox/vpn/tables/crypto.py:137 msgid "PFS Group" msgstr "PFS-Gruppe" -#: templates/vpn/ipsecproposal.html:10 +#: netbox/templates/vpn/ipsecproposal.html:10 msgid "IPSec Proposal" msgstr "IPSec-Vorschlag" -#: templates/vpn/ipsecproposal.html:33 vpn/forms/bulk_edit.py:186 -#: vpn/models/crypto.py:152 +#: netbox/templates/vpn/ipsecproposal.html:33 +#: netbox/vpn/forms/bulk_edit.py:186 netbox/vpn/models/crypto.py:152 msgid "SA lifetime (KB)" msgstr "SA-Lebensdauer (KB)" -#: templates/vpn/l2vpn.html:11 templates/vpn/l2vpntermination.html:9 +#: netbox/templates/vpn/l2vpn.html:11 +#: netbox/templates/vpn/l2vpntermination.html:9 msgid "L2VPN Attributes" msgstr "L2VPN-Attribute" -#: templates/vpn/l2vpn.html:60 templates/vpn/tunnel.html:76 +#: netbox/templates/vpn/l2vpn.html:60 netbox/templates/vpn/tunnel.html:76 msgid "Add a Termination" msgstr "Abschlusspunkt hinzufügen" -#: templates/vpn/tunnel.html:9 +#: netbox/templates/vpn/tunnel.html:9 msgid "Add Termination" msgstr "Abschlusspunkt hinzufügen" -#: templates/vpn/tunnel.html:37 vpn/forms/bulk_edit.py:49 -#: vpn/forms/bulk_import.py:48 vpn/forms/filtersets.py:57 +#: netbox/templates/vpn/tunnel.html:37 netbox/vpn/forms/bulk_edit.py:49 +#: netbox/vpn/forms/bulk_import.py:48 netbox/vpn/forms/filtersets.py:57 msgid "Encapsulation" msgstr "Verkapselung" -#: templates/vpn/tunnel.html:41 vpn/forms/bulk_edit.py:55 -#: vpn/forms/bulk_import.py:53 vpn/forms/filtersets.py:64 -#: vpn/models/crypto.py:250 vpn/tables/tunnels.py:51 +#: netbox/templates/vpn/tunnel.html:41 netbox/vpn/forms/bulk_edit.py:55 +#: netbox/vpn/forms/bulk_import.py:53 netbox/vpn/forms/filtersets.py:64 +#: netbox/vpn/models/crypto.py:250 netbox/vpn/tables/tunnels.py:51 msgid "IPSec profile" msgstr "IPSec-Profil" -#: templates/vpn/tunnel.html:45 vpn/forms/bulk_edit.py:69 -#: vpn/forms/filtersets.py:68 +#: netbox/templates/vpn/tunnel.html:45 netbox/vpn/forms/bulk_edit.py:69 +#: netbox/vpn/forms/filtersets.py:68 msgid "Tunnel ID" msgstr "Tunnel-ID" -#: templates/vpn/tunnelgroup.html:14 +#: netbox/templates/vpn/tunnelgroup.html:14 msgid "Add Tunnel" msgstr "Tunnel hinzufügen" -#: templates/vpn/tunnelgroup.html:23 vpn/forms/model_forms.py:36 -#: vpn/forms/model_forms.py:49 +#: netbox/templates/vpn/tunnelgroup.html:23 netbox/vpn/forms/model_forms.py:36 +#: netbox/vpn/forms/model_forms.py:49 msgid "Tunnel Group" msgstr "Tunnelgruppe" -#: templates/vpn/tunneltermination.html:10 +#: netbox/templates/vpn/tunneltermination.html:10 msgid "Tunnel Termination" msgstr "Tunnelabschlusspunkt" -#: templates/vpn/tunneltermination.html:35 vpn/forms/bulk_import.py:107 -#: vpn/forms/model_forms.py:102 vpn/forms/model_forms.py:138 -#: vpn/forms/model_forms.py:247 vpn/tables/tunnels.py:101 +#: netbox/templates/vpn/tunneltermination.html:35 +#: netbox/vpn/forms/bulk_import.py:107 netbox/vpn/forms/model_forms.py:102 +#: netbox/vpn/forms/model_forms.py:138 netbox/vpn/forms/model_forms.py:247 +#: netbox/vpn/tables/tunnels.py:101 msgid "Outside IP" msgstr "Öffentliche / Outside IP" -#: templates/vpn/tunneltermination.html:51 +#: netbox/templates/vpn/tunneltermination.html:51 msgid "Peer Terminations" msgstr "Peer-Abschlusspunkt" -#: templates/wireless/inc/authentication_attrs.html:12 +#: netbox/templates/wireless/inc/authentication_attrs.html:12 msgid "Cipher" msgstr "Chiffre" -#: templates/wireless/inc/authentication_attrs.html:16 +#: netbox/templates/wireless/inc/authentication_attrs.html:16 msgid "PSK" msgstr "PSK" -#: templates/wireless/inc/wirelesslink_interface.html:35 -#: templates/wireless/inc/wirelesslink_interface.html:45 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:35 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:45 msgctxt "Abbreviation for megahertz" msgid "MHz" msgstr "MHz" -#: templates/wireless/wirelesslan.html:57 +#: netbox/templates/wireless/wirelesslan.html:57 msgid "Attached Interfaces" msgstr "Angehängte Schnittstellen" -#: templates/wireless/wirelesslangroup.html:17 +#: netbox/templates/wireless/wirelesslangroup.html:17 msgid "Add Wireless LAN" msgstr "WLAN hinzufügen" -#: templates/wireless/wirelesslangroup.html:26 -#: wireless/forms/model_forms.py:28 +#: netbox/templates/wireless/wirelesslangroup.html:26 +#: netbox/wireless/forms/model_forms.py:28 msgid "Wireless LAN Group" msgstr "WLAN-Gruppe" -#: templates/wireless/wirelesslangroup.html:59 +#: netbox/templates/wireless/wirelesslangroup.html:59 msgid "Add Wireless LAN Group" msgstr "WLAN-Gruppe hinzufügen" -#: templates/wireless/wirelesslink.html:14 +#: netbox/templates/wireless/wirelesslink.html:14 msgid "Link Properties" msgstr "Link-Eigenschaften" -#: templates/wireless/wirelesslink.html:38 wireless/forms/bulk_edit.py:129 -#: wireless/forms/filtersets.py:102 wireless/forms/model_forms.py:165 +#: 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" -#: tenancy/filtersets.py:28 +#: netbox/tenancy/filtersets.py:28 msgid "Parent contact group (ID)" msgstr "Übergeordnete Kontaktgruppe (ID)" -#: tenancy/filtersets.py:34 +#: netbox/tenancy/filtersets.py:34 msgid "Parent contact group (slug)" msgstr "Übergeordnete Kontaktgruppe (URL-Slug)" -#: tenancy/filtersets.py:40 tenancy/filtersets.py:67 tenancy/filtersets.py:110 +#: netbox/tenancy/filtersets.py:40 netbox/tenancy/filtersets.py:67 +#: netbox/tenancy/filtersets.py:110 msgid "Contact group (ID)" msgstr "Kontaktgruppe (ID)" -#: tenancy/filtersets.py:47 tenancy/filtersets.py:74 tenancy/filtersets.py:117 +#: netbox/tenancy/filtersets.py:47 netbox/tenancy/filtersets.py:74 +#: netbox/tenancy/filtersets.py:117 msgid "Contact group (slug)" msgstr "Kontaktgruppe (URL-Slug)" -#: tenancy/filtersets.py:104 +#: netbox/tenancy/filtersets.py:104 msgid "Contact (ID)" msgstr "Kontakt (ID)" -#: tenancy/filtersets.py:121 +#: netbox/tenancy/filtersets.py:121 msgid "Contact role (ID)" msgstr "Kontaktrolle (ID)" -#: tenancy/filtersets.py:127 +#: netbox/tenancy/filtersets.py:127 msgid "Contact role (slug)" msgstr "Kontaktrolle (URL-Slug)" -#: tenancy/filtersets.py:158 +#: netbox/tenancy/filtersets.py:158 msgid "Contact group" msgstr "Kontaktgruppe" -#: tenancy/filtersets.py:169 +#: netbox/tenancy/filtersets.py:169 msgid "Parent tenant group (ID)" msgstr "Übergeordnete Mandantengruppe (ID)" -#: tenancy/filtersets.py:175 +#: netbox/tenancy/filtersets.py:175 msgid "Parent tenant group (slug)" msgstr "Übergeordnete Mandantengruppe (URL-Slug)" -#: tenancy/filtersets.py:181 tenancy/filtersets.py:201 +#: netbox/tenancy/filtersets.py:181 netbox/tenancy/filtersets.py:201 msgid "Tenant group (ID)" msgstr "Mandantengruppe (ID)" -#: tenancy/filtersets.py:234 +#: netbox/tenancy/filtersets.py:234 msgid "Tenant Group (ID)" msgstr "Mandantengruppe (ID)" -#: tenancy/filtersets.py:241 +#: netbox/tenancy/filtersets.py:241 msgid "Tenant Group (slug)" msgstr "Mandantengruppe (URL-Slug)" -#: tenancy/forms/bulk_edit.py:66 +#: netbox/tenancy/forms/bulk_edit.py:66 msgid "Desciption" msgstr "Beschreibung" -#: tenancy/forms/bulk_import.py:101 +#: netbox/tenancy/forms/bulk_import.py:101 msgid "Assigned contact" msgstr "Zugewiesener Kontakt" -#: tenancy/models/contacts.py:32 +#: netbox/tenancy/models/contacts.py:32 msgid "contact group" msgstr "Kontaktgruppe" -#: tenancy/models/contacts.py:33 +#: netbox/tenancy/models/contacts.py:33 msgid "contact groups" msgstr "Kontaktgruppen" -#: tenancy/models/contacts.py:48 +#: netbox/tenancy/models/contacts.py:48 msgid "contact role" msgstr "Kontaktrolle" -#: tenancy/models/contacts.py:49 +#: netbox/tenancy/models/contacts.py:49 msgid "contact roles" msgstr "Kontaktrollen" -#: tenancy/models/contacts.py:68 +#: netbox/tenancy/models/contacts.py:68 msgid "title" msgstr "Titel" -#: tenancy/models/contacts.py:73 +#: netbox/tenancy/models/contacts.py:73 msgid "phone" msgstr "Telefon" -#: tenancy/models/contacts.py:78 +#: netbox/tenancy/models/contacts.py:78 msgid "email" msgstr "E-Mail" -#: tenancy/models/contacts.py:87 +#: netbox/tenancy/models/contacts.py:87 msgid "link" msgstr "Link" -#: tenancy/models/contacts.py:103 +#: netbox/tenancy/models/contacts.py:103 msgid "contact" msgstr "Kontakt" -#: tenancy/models/contacts.py:104 +#: netbox/tenancy/models/contacts.py:104 msgid "contacts" msgstr "Kontakte" -#: tenancy/models/contacts.py:153 +#: netbox/tenancy/models/contacts.py:153 msgid "contact assignment" msgstr "Kontaktzuweisung" -#: tenancy/models/contacts.py:154 +#: netbox/tenancy/models/contacts.py:154 msgid "contact assignments" msgstr "Kontaktzuweisungen" -#: tenancy/models/contacts.py:170 +#: netbox/tenancy/models/contacts.py:170 #, python-brace-format msgid "Contacts cannot be assigned to this object type ({type})." msgstr "Kontakte können diesem Objekttyp nicht zugewiesen werden ({type})." -#: tenancy/models/tenants.py:32 +#: netbox/tenancy/models/tenants.py:32 msgid "tenant group" msgstr "Mandantengruppe" -#: tenancy/models/tenants.py:33 +#: netbox/tenancy/models/tenants.py:33 msgid "tenant groups" msgstr "Mandantengruppen" -#: tenancy/models/tenants.py:70 +#: netbox/tenancy/models/tenants.py:70 msgid "Tenant name must be unique per group." msgstr "Der Mandantenname muss pro Gruppe eindeutig sein." -#: tenancy/models/tenants.py:80 +#: netbox/tenancy/models/tenants.py:80 msgid "Tenant slug must be unique per group." msgstr "" "Die URL-freundliche Mandantenbezeichnung (URL-Slug) muss pro Gruppe " "einzigartig sein." -#: tenancy/models/tenants.py:88 +#: netbox/tenancy/models/tenants.py:88 msgid "tenant" msgstr "Mandant" -#: tenancy/models/tenants.py:89 +#: netbox/tenancy/models/tenants.py:89 msgid "tenants" msgstr "Mandanten" -#: tenancy/tables/contacts.py:112 +#: netbox/tenancy/tables/contacts.py:112 msgid "Contact Title" msgstr "Kontakt-Titel" -#: tenancy/tables/contacts.py:116 +#: netbox/tenancy/tables/contacts.py:116 msgid "Contact Phone" msgstr "Kontakt-Telefon" -#: tenancy/tables/contacts.py:121 +#: netbox/tenancy/tables/contacts.py:121 msgid "Contact Email" msgstr "Kontakt-E-Mail" -#: tenancy/tables/contacts.py:125 +#: netbox/tenancy/tables/contacts.py:125 msgid "Contact Address" msgstr "Kontakt-Adresse" -#: tenancy/tables/contacts.py:129 +#: netbox/tenancy/tables/contacts.py:129 msgid "Contact Link" msgstr "Kontakt-Link" -#: tenancy/tables/contacts.py:133 +#: netbox/tenancy/tables/contacts.py:133 msgid "Contact Description" msgstr "Kontakt-Beschreibung" -#: users/filtersets.py:33 users/filtersets.py:73 +#: netbox/users/filtersets.py:33 netbox/users/filtersets.py:73 msgid "Permission (ID)" msgstr "Berechtigung (ID)" -#: users/filtersets.py:38 users/filtersets.py:78 +#: netbox/users/filtersets.py:38 netbox/users/filtersets.py:78 msgid "Notification group (ID)" msgstr "Benachrichtigungsgruppe (ID)" -#: users/forms/bulk_edit.py:26 +#: netbox/users/forms/bulk_edit.py:26 msgid "First name" msgstr "Vorname" -#: users/forms/bulk_edit.py:31 +#: netbox/users/forms/bulk_edit.py:31 msgid "Last name" msgstr "Nachname" -#: users/forms/bulk_edit.py:43 +#: netbox/users/forms/bulk_edit.py:43 msgid "Staff status" msgstr "Mitarbeiter-Status" -#: users/forms/bulk_edit.py:48 +#: netbox/users/forms/bulk_edit.py:48 msgid "Superuser status" msgstr "Superuser-Status" -#: users/forms/bulk_import.py:41 +#: netbox/users/forms/bulk_import.py:41 msgid "If no key is provided, one will be generated automatically." msgstr "Wenn kein Schlüssel angegeben wird, wird automatisch einer generiert." -#: users/forms/filtersets.py:51 users/tables.py:42 +#: netbox/users/forms/filtersets.py:51 netbox/users/tables.py:42 msgid "Is Staff" msgstr "Ist Mitarbeiter" -#: users/forms/filtersets.py:58 users/tables.py:45 +#: netbox/users/forms/filtersets.py:58 netbox/users/tables.py:45 msgid "Is Superuser" msgstr "Ist Superuser" -#: users/forms/filtersets.py:91 users/tables.py:86 +#: netbox/users/forms/filtersets.py:91 netbox/users/tables.py:86 msgid "Can View" msgstr "Kann ansehen" -#: users/forms/filtersets.py:98 users/tables.py:89 +#: netbox/users/forms/filtersets.py:98 netbox/users/tables.py:89 msgid "Can Add" msgstr "Kann hinzufügen" -#: users/forms/filtersets.py:105 users/tables.py:92 +#: netbox/users/forms/filtersets.py:105 netbox/users/tables.py:92 msgid "Can Change" msgstr "Kann ändern" -#: users/forms/filtersets.py:112 users/tables.py:95 +#: netbox/users/forms/filtersets.py:112 netbox/users/tables.py:95 msgid "Can Delete" msgstr "Kann löschen" -#: users/forms/model_forms.py:62 +#: netbox/users/forms/model_forms.py:62 msgid "User Interface" msgstr "Benutzeroberfläche" -#: users/forms/model_forms.py:114 +#: netbox/users/forms/model_forms.py:114 msgid "" "Keys must be at least 40 characters in length. Be sure to record " "your key prior to submitting this form, as it may no longer be " @@ -14090,7 +14932,7 @@ msgstr "" "da er möglicherweise nicht mehr zugänglich ist, sobald das Token erstellt " "wurde." -#: users/forms/model_forms.py:126 +#: netbox/users/forms/model_forms.py:126 msgid "" "Allowed IPv4/IPv6 networks from where the token can be used. Leave blank for" " no restrictions. Example: " @@ -14101,33 +14943,33 @@ msgstr "" "möchten. Beispiel: 10.1.1.0/24, 192.168.10.16/32.2001:db 8:1: " ":/64" -#: users/forms/model_forms.py:175 +#: netbox/users/forms/model_forms.py:175 msgid "Confirm password" msgstr "Passwort bestätigen" -#: users/forms/model_forms.py:178 +#: netbox/users/forms/model_forms.py:178 msgid "Enter the same password as before, for verification." msgstr "Geben Sie zur Überprüfung dasselbe Passwort wie zuvor ein." -#: users/forms/model_forms.py:227 +#: netbox/users/forms/model_forms.py:227 msgid "Passwords do not match! Please check your input and try again." msgstr "" "Passwörter stimmen nicht überein! Bitte überprüfen Sie Ihre Eingabe und " "versuchen Sie es erneut." -#: users/forms/model_forms.py:294 +#: netbox/users/forms/model_forms.py:294 msgid "Additional actions" msgstr "Zusätzliche Aktionen" -#: users/forms/model_forms.py:297 +#: netbox/users/forms/model_forms.py:297 msgid "Actions granted in addition to those listed above" msgstr "Zusätzlich zu den oben aufgeführten Maßnahmen gewährte Maßnahmen" -#: users/forms/model_forms.py:313 +#: netbox/users/forms/model_forms.py:313 msgid "Objects" msgstr "Objekte" -#: users/forms/model_forms.py:325 +#: netbox/users/forms/model_forms.py:325 msgid "" "JSON expression of a queryset filter that will return only permitted " "objects. Leave null to match all objects of this type. A list of multiple " @@ -14138,82 +14980,82 @@ msgstr "" "entsprechen. Eine Liste mehrerer Objekte führt zu einer logischen ODER-" "Operation." -#: users/forms/model_forms.py:364 +#: netbox/users/forms/model_forms.py:364 msgid "At least one action must be selected." msgstr "Es muss mindestens eine Aktion ausgewählt werden." -#: users/forms/model_forms.py:382 +#: netbox/users/forms/model_forms.py:382 #, python-brace-format msgid "Invalid filter for {model}: {error}" msgstr "Ungültiger Filter für {model}: {error}" -#: users/models/permissions.py:39 +#: netbox/users/models/permissions.py:39 msgid "The list of actions granted by this permission" msgstr "Die Liste der Aktionen, die durch diese Berechtigung gewährt wurden" -#: users/models/permissions.py:44 +#: netbox/users/models/permissions.py:44 msgid "constraints" msgstr "Einschränkungen" -#: users/models/permissions.py:45 +#: netbox/users/models/permissions.py:45 msgid "" "Queryset filter matching the applicable objects of the selected type(s)" msgstr "" "Queryset-Filter, der den entsprechenden Objekten der ausgewählten Typen " "entspricht" -#: users/models/permissions.py:52 +#: netbox/users/models/permissions.py:52 msgid "permission" msgstr "Berechtigung" -#: users/models/permissions.py:53 users/models/users.py:47 +#: netbox/users/models/permissions.py:53 netbox/users/models/users.py:47 msgid "permissions" msgstr "Berechtigungen" -#: users/models/preferences.py:29 users/models/preferences.py:30 +#: netbox/users/models/preferences.py:29 netbox/users/models/preferences.py:30 msgid "user preferences" msgstr "Benutzereinstellungen" -#: users/models/preferences.py:97 +#: netbox/users/models/preferences.py:97 #, python-brace-format msgid "Key '{path}' is a leaf node; cannot assign new keys" msgstr "" "Schlüssel '{path}'ist ein Blattknoten; es können keine neuen Schlüssel " "zugewiesen werden" -#: users/models/preferences.py:109 +#: netbox/users/models/preferences.py:109 #, python-brace-format msgid "Key '{path}' is a dictionary; cannot assign a non-dictionary value" msgstr "" "Schlüssel '{path}'ist ein Wörterbuch; es kann kein Wert zugewiesen werden, " "der nicht aus dem Wörterbuch stammt" -#: users/models/tokens.py:36 +#: netbox/users/models/tokens.py:36 msgid "expires" msgstr "läuft ab" -#: users/models/tokens.py:41 +#: netbox/users/models/tokens.py:41 msgid "last used" msgstr "zuletzt benutzt" -#: users/models/tokens.py:46 +#: netbox/users/models/tokens.py:46 msgid "key" msgstr "Schlüssel" -#: users/models/tokens.py:52 +#: netbox/users/models/tokens.py:52 msgid "write enabled" msgstr "Schreiben aktiviert" -#: users/models/tokens.py:54 +#: netbox/users/models/tokens.py:54 msgid "Permit create/update/delete operations using this key" msgstr "" "Lasse Erstellen/Aktualisieren/Löschen Vorgänge mit diesem Schlüssel zu" -#: users/models/tokens.py:65 +#: netbox/users/models/tokens.py:65 msgid "allowed IPs" msgstr "erlaubte IPs" -#: users/models/tokens.py:67 +#: netbox/users/models/tokens.py:67 msgid "" "Allowed IPv4/IPv6 networks from where the token can be used. Leave blank for" " no restrictions. Ex: \"10.1.1.0/24, 192.168.10.16/32, 2001:DB8:1::/64\"" @@ -14222,43 +15064,43 @@ msgstr "" "kann. Lassen Sie das Feld leer, wenn Sie keine Einschränkungen haben " "möchten. Beispiel: „10.1.1.0/24, 192.168.10.16/32, 2001:DB 8:1: :/64\"" -#: users/models/tokens.py:75 +#: netbox/users/models/tokens.py:75 msgid "token" msgstr "Token" -#: users/models/tokens.py:76 +#: netbox/users/models/tokens.py:76 msgid "tokens" msgstr "Token" -#: users/models/users.py:57 vpn/models/crypto.py:42 +#: netbox/users/models/users.py:57 netbox/vpn/models/crypto.py:42 msgid "group" msgstr "Gruppe" -#: users/models/users.py:92 +#: netbox/users/models/users.py:92 msgid "user" msgstr "Benutzer" -#: users/models/users.py:104 +#: netbox/users/models/users.py:104 msgid "A user with this username already exists." msgstr "Ein Benutzer mit diesem Benutzernamen existiert bereits." -#: users/tables.py:98 +#: netbox/users/tables.py:98 msgid "Custom Actions" msgstr "Benutzerdefinierte Aktionen" -#: utilities/api.py:153 +#: netbox/utilities/api.py:153 #, python-brace-format msgid "Related object not found using the provided attributes: {params}" msgstr "" "Verwandtes Objekt wurde mit den angegebenen Attributen nicht gefunden: " "{params}" -#: utilities/api.py:156 +#: netbox/utilities/api.py:156 #, python-brace-format msgid "Multiple objects match the provided attributes: {params}" msgstr "Mehrere Objekte entsprechen den angegebenen Attributen: {params}" -#: utilities/api.py:168 +#: netbox/utilities/api.py:168 #, python-brace-format msgid "" "Related objects must be referenced by numeric ID or by dictionary of " @@ -14268,43 +15110,43 @@ msgstr "" "Attributverzeichnisses referenziert werden. Es wurde ein unbekannter Wert " "empfangen: {value}" -#: utilities/api.py:177 +#: netbox/utilities/api.py:177 #, python-brace-format msgid "Related object not found using the provided numeric ID: {id}" msgstr "" "Verwandtes Objekt wurde mit der angegebenen numerischen ID nicht gefunden: " "{id}" -#: utilities/choices.py:19 +#: netbox/utilities/choices.py:19 #, python-brace-format msgid "{name} has a key defined but CHOICES is not a list" msgstr "{name} hat einen Schlüssel definiert, aber CHOICES ist keine Liste" -#: utilities/conversion.py:19 +#: netbox/utilities/conversion.py:19 msgid "Weight must be a positive number" msgstr "Das Gewicht muss eine positive Zahl sein" -#: utilities/conversion.py:21 +#: netbox/utilities/conversion.py:21 #, 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)" -#: utilities/conversion.py:32 utilities/conversion.py:62 +#: netbox/utilities/conversion.py:32 netbox/utilities/conversion.py:62 #, python-brace-format msgid "Unknown unit {unit}. Must be one of the following: {valid_units}" msgstr "" "Unbekannte Einheit {unit}. Es muss eine der folgenden sein: {valid_units}" -#: utilities/conversion.py:45 +#: netbox/utilities/conversion.py:45 msgid "Length must be a positive number" msgstr "Die Länge muss eine positive Zahl sein" -#: utilities/conversion.py:47 +#: netbox/utilities/conversion.py:47 #, 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)" -#: utilities/error_handlers.py:31 +#: netbox/utilities/error_handlers.py:31 #, python-brace-format msgid "" "Unable to delete {objects}. {count} dependent objects were " @@ -14313,15 +15155,15 @@ msgstr "" "Löschen von {objects} nicht möglich. {count} abhängige " "Objekte wurden gefunden: " -#: utilities/error_handlers.py:33 +#: netbox/utilities/error_handlers.py:33 msgid "More than 50" msgstr "Mehr als 50" -#: utilities/fields.py:30 +#: netbox/utilities/fields.py:30 msgid "RGB color in hexadecimal. Example: " msgstr "RGB Farbe in hexadezimaler Form. Beispiel:" -#: utilities/fields.py:159 +#: netbox/utilities/fields.py:159 #, python-format msgid "" "%s(%r) is invalid. to_model parameter to CounterCacheField must be a string " @@ -14330,7 +15172,7 @@ msgstr "" "%s(%r) ist ungültig. Der to_model-Parameter für CounterCacheField muss eine " "Zeichenfolge im Format 'app.model' sein" -#: utilities/fields.py:169 +#: netbox/utilities/fields.py:169 #, python-format msgid "" "%s(%r) is invalid. to_field parameter to CounterCacheField must be a string " @@ -14339,37 +15181,37 @@ msgstr "" "%s(%r) ist ungültig. Der to_field-Parameter für CounterCacheField muss eine " "Zeichenfolge im Format 'field' sein" -#: utilities/forms/bulk_import.py:23 +#: netbox/utilities/forms/bulk_import.py:23 msgid "Enter object data in CSV, JSON or YAML format." msgstr "Geben Sie Objektdaten im CSV-, JSON- oder YAML-Format ein." -#: utilities/forms/bulk_import.py:36 +#: netbox/utilities/forms/bulk_import.py:36 msgid "CSV delimiter" msgstr "CSV-Trennzeichen" -#: utilities/forms/bulk_import.py:37 +#: netbox/utilities/forms/bulk_import.py:37 msgid "The character which delimits CSV fields. Applies only to CSV format." msgstr "Das Zeichen, das CSV-Felder begrenzt. Gilt nur für das CSV-Format." -#: utilities/forms/bulk_import.py:51 +#: netbox/utilities/forms/bulk_import.py:51 msgid "Form data must be empty when uploading/selecting a file." msgstr "" "Formulardaten müssen leer sein, wenn eine Datei hochladen/ausgewählt wird." -#: utilities/forms/bulk_import.py:80 +#: netbox/utilities/forms/bulk_import.py:80 #, python-brace-format msgid "Unknown data format: {format}" msgstr "Unbekanntes Datenformat: {format}" -#: utilities/forms/bulk_import.py:100 +#: netbox/utilities/forms/bulk_import.py:100 msgid "Unable to detect data format. Please specify." msgstr "Das Datenformat konnte nicht erkannt werden. Bitte spezifizieren Sie." -#: utilities/forms/bulk_import.py:123 +#: netbox/utilities/forms/bulk_import.py:123 msgid "Invalid CSV delimiter" msgstr "Ungültiges CSV-Trennzeichen" -#: utilities/forms/bulk_import.py:167 +#: netbox/utilities/forms/bulk_import.py:167 msgid "" "Invalid YAML data. Data must be in the form of multiple documents, or a " "single document comprising a list of dictionaries." @@ -14377,7 +15219,7 @@ msgstr "" "Ungültige YAML-Daten. Die Daten müssen in Form mehrerer Dokumente oder eines" " einzelnen Dokuments vorliegen, das eine Liste von Wörterbüchern umfasst." -#: utilities/forms/fields/array.py:20 +#: netbox/utilities/forms/fields/array.py:20 #, python-brace-format msgid "" "Invalid list ({value}). Must be numeric and ranges must be in ascending " @@ -14386,7 +15228,7 @@ msgstr "" "Ungültige Liste ({value}). Muss numerisch sein und Bereiche müssen in " "aufsteigender Reihenfolge sein." -#: utilities/forms/fields/array.py:40 +#: netbox/utilities/forms/fields/array.py:40 msgid "" "Specify one or more numeric ranges separated by commas. Example: " "1-5,20-30" @@ -14394,7 +15236,7 @@ msgstr "" "Geben Sie einen oder mehrere numerische Bereiche an, die durch Kommas " "getrennt sind. Beispiel: 1-5,20-30" -#: utilities/forms/fields/array.py:47 +#: netbox/utilities/forms/fields/array.py:47 #, python-brace-format msgid "" "Invalid ranges ({value}). Must be a range of integers in ascending order." @@ -14402,17 +15244,18 @@ msgstr "" "Ungültige Bereiche ({value}). Muss ein Bereich von ganzen Zahlen in " "aufsteigender Reihenfolge sein." -#: utilities/forms/fields/csv.py:44 +#: netbox/utilities/forms/fields/csv.py:44 #, python-brace-format msgid "Invalid value for a multiple choice field: {value}" msgstr "Ungültiger Wert für ein Multiple-Choice-Feld: {value}" -#: utilities/forms/fields/csv.py:57 utilities/forms/fields/csv.py:78 +#: netbox/utilities/forms/fields/csv.py:57 +#: netbox/utilities/forms/fields/csv.py:78 #, python-format msgid "Object not found: %(value)s" msgstr "Objekt wurde nicht gefunden: %(value)s" -#: utilities/forms/fields/csv.py:65 +#: netbox/utilities/forms/fields/csv.py:65 #, python-brace-format msgid "" "\"{value}\" is not a unique value for this field; multiple objects were " @@ -14421,20 +15264,20 @@ msgstr "" "„{value}\"ist kein eindeutiger Wert für dieses Feld; es wurden mehrere " "Objekte gefunden" -#: utilities/forms/fields/csv.py:69 +#: netbox/utilities/forms/fields/csv.py:69 #, python-brace-format msgid "\"{field_name}\" is an invalid accessor field name." msgstr "„{field_name}\"ist ein ungültiger Zugriffs-Feldname." -#: utilities/forms/fields/csv.py:101 +#: netbox/utilities/forms/fields/csv.py:101 msgid "Object type must be specified as \".\"" msgstr "Der Objekttyp muss als \".“ angegeben werden." -#: utilities/forms/fields/csv.py:105 +#: netbox/utilities/forms/fields/csv.py:105 msgid "Invalid object type" msgstr "Ungültiger Objekttyp" -#: utilities/forms/fields/expandable.py:25 +#: netbox/utilities/forms/fields/expandable.py:25 msgid "" "Alphanumeric ranges are supported for bulk creation. Mixed cases and types " "within a single range are not supported (example: " @@ -14444,7 +15287,7 @@ msgstr "" "und Kleinschreibung und Typen innerhalb eines einzigen Bereichs werden nicht" " unterstützt (Beispiel: [ge, xe] -0/0/ [0-9])." -#: utilities/forms/fields/expandable.py:46 +#: netbox/utilities/forms/fields/expandable.py:46 msgid "" "Specify a numeric range to create multiple IPs.
    Example: " "192.0.2.[1,5,100-254]/24" @@ -14452,7 +15295,7 @@ msgstr "" "Geben Sie einen numerischen Bereich an, um mehrere IPs zu erstellen.
    Beispiel: 192,0,2. [1.5,100-254] /24" -#: utilities/forms/fields/fields.py:31 +#: netbox/utilities/forms/fields/fields.py:31 #, python-brace-format msgid "" " Markdown Syntax wird unterstützt" -#: utilities/forms/fields/fields.py:48 +#: netbox/utilities/forms/fields/fields.py:48 msgid "URL-friendly unique shorthand" msgstr "URL-freundliche, einzigartige Kurzschrift" -#: utilities/forms/fields/fields.py:101 +#: netbox/utilities/forms/fields/fields.py:101 msgid "Enter context data in JSON format." msgstr "" "Geben Sie Kontextdaten im JSON Format ein." -#: utilities/forms/fields/fields.py:124 +#: netbox/utilities/forms/fields/fields.py:124 msgid "MAC address must be in EUI-48 format" msgstr "Die MAC-Adresse muss im EUI-48-Format sein" -#: utilities/forms/forms.py:52 +#: netbox/utilities/forms/forms.py:52 msgid "Use regular expressions" msgstr "Verwenden Sie reguläre Ausdrücke" -#: utilities/forms/forms.py:75 +#: netbox/utilities/forms/forms.py:75 msgid "" "Numeric ID of an existing object to update (if not creating a new object)" msgstr "" "Numerische ID eines vorhandenen Objekts, das aktualisiert werden soll (wenn " "kein neues Objekt erstellt wird)" -#: utilities/forms/forms.py:92 +#: netbox/utilities/forms/forms.py:92 #, python-brace-format msgid "Unrecognized header: {name}" msgstr "Unbekannter Header: {name}" -#: utilities/forms/forms.py:118 +#: netbox/utilities/forms/forms.py:118 msgid "Available Columns" msgstr "Verfügbare Spalten" -#: utilities/forms/forms.py:126 +#: netbox/utilities/forms/forms.py:126 msgid "Selected Columns" msgstr "Ausgewählte Spalten" -#: utilities/forms/mixins.py:44 +#: netbox/utilities/forms/mixins.py:44 msgid "" "This object has been modified since the form was rendered. Please consult " "the object's change log for details." @@ -14506,13 +15349,13 @@ msgstr "" "Dieses Objekt wurde seit dem Rendern des Formulars geändert. Einzelheiten " "entnehmen Sie bitte dem Änderungsprotokoll des Objekts." -#: utilities/forms/utils.py:42 utilities/forms/utils.py:68 -#: utilities/forms/utils.py:85 utilities/forms/utils.py:87 +#: netbox/utilities/forms/utils.py:42 netbox/utilities/forms/utils.py:68 +#: netbox/utilities/forms/utils.py:85 netbox/utilities/forms/utils.py:87 #, python-brace-format msgid "Range \"{value}\" is invalid." msgstr "Bereich “{value}\" ist ungültig." -#: utilities/forms/utils.py:74 +#: netbox/utilities/forms/utils.py:74 #, python-brace-format msgid "" "Invalid range: Ending value ({end}) must be greater than beginning value " @@ -14521,71 +15364,71 @@ msgstr "" "Ungültiger Bereich: Der Endwert ({end}) muss größer als der Anfangswert " "({begin}) sein." -#: utilities/forms/utils.py:232 +#: netbox/utilities/forms/utils.py:232 #, python-brace-format msgid "Duplicate or conflicting column header for \"{field}\"" msgstr "Doppelte oder widersprüchliche Spaltenüberschrift für“{field}“" -#: utilities/forms/utils.py:238 +#: netbox/utilities/forms/utils.py:238 #, python-brace-format msgid "Duplicate or conflicting column header for \"{header}\"" msgstr "Doppelte oder widersprüchliche Spaltenüberschrift für“{header}“" -#: utilities/forms/utils.py:247 +#: netbox/utilities/forms/utils.py:247 #, python-brace-format msgid "Row {row}: Expected {count_expected} columns but found {count_found}" msgstr "" "Reihe {row}: {count_expected} Spalten erwartet, aber {count_found} gefunden" -#: utilities/forms/utils.py:270 +#: netbox/utilities/forms/utils.py:270 #, python-brace-format msgid "Unexpected column header \"{field}\" found." msgstr "Unerwartete Spaltenüberschrift“{field}„gefunden." -#: utilities/forms/utils.py:272 +#: netbox/utilities/forms/utils.py:272 #, python-brace-format msgid "Column \"{field}\" is not a related object; cannot use dots" msgstr "" "Spalte“{field}\"ist kein verwandtes Objekt; Punkte können nicht verwendet " "werden" -#: utilities/forms/utils.py:276 +#: netbox/utilities/forms/utils.py:276 #, python-brace-format msgid "Invalid related object attribute for column \"{field}\": {to_field}" -msgstr "Ungültiges verwandtes Objektattribut für Spalte“{field}„: {to_field}" +msgstr "Ungültiges verwandtes Objektattribut für Spalte“{field}\": {to_field}" -#: utilities/forms/utils.py:284 +#: netbox/utilities/forms/utils.py:284 #, python-brace-format msgid "Required column header \"{header}\" not found." msgstr "Erforderliche Spaltenüberschrift“{header}„nicht gefunden." -#: utilities/forms/widgets/apiselect.py:124 +#: netbox/utilities/forms/widgets/apiselect.py:124 #, python-brace-format msgid "Missing required value for dynamic query param: '{dynamic_params}'" msgstr "" "Fehlender erforderlicher Wert für den dynamischen Abfrageparameter: " "'{dynamic_params}'" -#: utilities/forms/widgets/apiselect.py:141 +#: netbox/utilities/forms/widgets/apiselect.py:141 #, python-brace-format msgid "Missing required value for static query param: '{static_params}'" msgstr "" "Fehlender erforderlicher Wert für den statischen Abfrageparameter: " "'{static_params}'" -#: utilities/password_validation.py:13 +#: netbox/utilities/password_validation.py:13 msgid "Password must have at least one numeral." msgstr "Das Passwort muss mindestens eine Ziffer enthalten." -#: utilities/password_validation.py:18 +#: netbox/utilities/password_validation.py:18 msgid "Password must have at least one uppercase letter." msgstr "Das Passwort muss mindestens einen Großbuchstaben enthalten." -#: utilities/password_validation.py:23 +#: netbox/utilities/password_validation.py:23 msgid "Password must have at least one lowercase letter." msgstr "Das Passwort muss mindestens einen Kleinbuchstaben enthalten." -#: utilities/password_validation.py:27 +#: netbox/utilities/password_validation.py:27 msgid "" "Your password must contain at least one numeral, one uppercase letter and " "one lowercase letter." @@ -14593,7 +15436,7 @@ msgstr "" "Ihr Passwort muss mindestens eine Ziffer, einen Großbuchstaben und einen " "Kleinbuchstaben enthalten." -#: utilities/permissions.py:42 +#: netbox/utilities/permissions.py:42 #, python-brace-format msgid "" "Invalid permission name: {name}. Must be in the format " @@ -14602,128 +15445,128 @@ msgstr "" "Ungültiger Berechtigungsname: {name}. Muss im Format " "._ sein." -#: utilities/permissions.py:60 +#: netbox/utilities/permissions.py:60 #, python-brace-format msgid "Unknown app_label/model_name for {name}" msgstr "Unbekanntes app_label/model_name für {name}" -#: utilities/request.py:76 +#: netbox/utilities/request.py:76 #, python-brace-format msgid "Invalid IP address set for {header}: {ip}" msgstr "Ungültige IP-Adresse gesetzt für {header}: {ip}" -#: utilities/tables.py:47 +#: netbox/utilities/tables.py:47 #, python-brace-format msgid "A column named {name} is already defined for table {table_name}" msgstr "" "Eine Spalte mit dem Namen {name} ist bereits für die Tabelle {table_name} " "definiert" -#: utilities/templates/builtins/customfield_value.html:30 +#: netbox/utilities/templates/builtins/customfield_value.html:30 msgid "Not defined" msgstr "Nicht definiert" -#: utilities/templates/buttons/bookmark.html:9 +#: netbox/utilities/templates/buttons/bookmark.html:9 msgid "Unbookmark" msgstr "Lesezeichen aufheben" -#: utilities/templates/buttons/bookmark.html:13 +#: netbox/utilities/templates/buttons/bookmark.html:13 msgid "Bookmark" msgstr "Lesezeichen setzen" -#: utilities/templates/buttons/clone.html:4 +#: netbox/utilities/templates/buttons/clone.html:4 msgid "Clone" msgstr "Klonen" -#: utilities/templates/buttons/export.html:7 +#: netbox/utilities/templates/buttons/export.html:7 msgid "Current View" msgstr "Aktuelle Ansicht" -#: utilities/templates/buttons/export.html:8 +#: netbox/utilities/templates/buttons/export.html:8 msgid "All Data" msgstr "Alle Daten" -#: utilities/templates/buttons/export.html:28 +#: netbox/utilities/templates/buttons/export.html:28 msgid "Add export template" msgstr "Exportvorlage hinzufügen" -#: utilities/templates/buttons/import.html:4 +#: netbox/utilities/templates/buttons/import.html:4 msgid "Import" msgstr "Importieren" -#: utilities/templates/buttons/subscribe.html:10 +#: netbox/utilities/templates/buttons/subscribe.html:10 msgid "Unsubscribe" msgstr "Nicht abonnieren" -#: utilities/templates/buttons/subscribe.html:14 +#: netbox/utilities/templates/buttons/subscribe.html:14 msgid "Subscribe" msgstr "Abonnieren" -#: utilities/templates/form_helpers/render_field.html:41 +#: netbox/utilities/templates/form_helpers/render_field.html:41 msgid "Copy to clipboard" msgstr "In die Zwischenablage kopieren" -#: utilities/templates/form_helpers/render_field.html:57 +#: netbox/utilities/templates/form_helpers/render_field.html:57 msgid "This field is required" msgstr "Dieses Feld ist erforderlich" -#: utilities/templates/form_helpers/render_field.html:70 +#: netbox/utilities/templates/form_helpers/render_field.html:70 msgid "Set Null" msgstr "Auf Null setzen" -#: utilities/templates/helpers/applied_filters.html:11 +#: netbox/utilities/templates/helpers/applied_filters.html:11 msgid "Clear all" msgstr "Alles löschen" -#: utilities/templates/helpers/table_config_form.html:8 +#: netbox/utilities/templates/helpers/table_config_form.html:8 msgid "Table Configuration" msgstr "Tabellenkonfiguration" -#: utilities/templates/helpers/table_config_form.html:31 +#: netbox/utilities/templates/helpers/table_config_form.html:31 msgid "Move Up" msgstr "Nach oben bewegen" -#: utilities/templates/helpers/table_config_form.html:34 +#: netbox/utilities/templates/helpers/table_config_form.html:34 msgid "Move Down" msgstr "Nach unten bewegen" -#: utilities/templates/navigation/menu.html:14 +#: netbox/utilities/templates/navigation/menu.html:14 msgid "Search…" msgstr "Suchen..." -#: utilities/templates/navigation/menu.html:14 +#: netbox/utilities/templates/navigation/menu.html:14 msgid "Search NetBox" msgstr "Suche NetBox" -#: utilities/templates/widgets/apiselect.html:7 +#: netbox/utilities/templates/widgets/apiselect.html:7 msgid "Open selector" msgstr "Selektor öffnen" -#: utilities/templates/widgets/markdown_input.html:6 +#: netbox/utilities/templates/widgets/markdown_input.html:6 msgid "Write" msgstr "Schreiben" -#: utilities/testing/views.py:632 +#: netbox/utilities/testing/views.py:632 msgid "The test must define csv_update_data." msgstr "Der Test muss csv_update_data definieren." -#: utilities/validators.py:65 +#: netbox/utilities/validators.py:65 #, python-brace-format msgid "{value} is not a valid regular expression." msgstr "{value} ist kein gültiger regulärer Ausdruck." -#: utilities/views.py:57 +#: netbox/utilities/views.py:57 #, python-brace-format msgid "{self.__class__.__name__} must implement get_required_permission()" msgstr "" "{self.__class__.__name__} muss get_required_permission() implementieren" -#: utilities/views.py:93 +#: netbox/utilities/views.py:93 #, python-brace-format msgid "{class_name} must implement get_required_permission()" msgstr "{class_name} muss get_required_permission() implementieren" -#: utilities/views.py:117 +#: netbox/utilities/views.py:117 #, python-brace-format msgid "" "{class_name} has no queryset defined. ObjectPermissionRequiredMixin may only" @@ -14733,61 +15576,63 @@ msgstr "" "darf nur für Ansichten verwendet werden, die einen Basis-Abfragesatz " "definieren" -#: virtualization/filtersets.py:79 +#: netbox/virtualization/filtersets.py:79 msgid "Parent group (ID)" msgstr "Übergeordnete Gruppe (ID)" -#: virtualization/filtersets.py:85 +#: netbox/virtualization/filtersets.py:85 msgid "Parent group (slug)" msgstr "Übergeordnete Gruppe (URL-Slug)" -#: virtualization/filtersets.py:89 virtualization/filtersets.py:141 +#: netbox/virtualization/filtersets.py:89 +#: netbox/virtualization/filtersets.py:141 msgid "Cluster type (ID)" msgstr "Clustertyp (ID)" -#: virtualization/filtersets.py:151 virtualization/filtersets.py:271 +#: netbox/virtualization/filtersets.py:151 +#: netbox/virtualization/filtersets.py:271 msgid "Cluster (ID)" msgstr "Cluster (ID)" -#: virtualization/forms/bulk_edit.py:166 -#: virtualization/models/virtualmachines.py:115 +#: netbox/virtualization/forms/bulk_edit.py:166 +#: netbox/virtualization/models/virtualmachines.py:115 msgid "vCPUs" msgstr "vCPUs" -#: virtualization/forms/bulk_edit.py:170 +#: netbox/virtualization/forms/bulk_edit.py:170 msgid "Memory (MB)" msgstr "Speicher (MB)" -#: virtualization/forms/bulk_edit.py:174 -msgid "Disk (GB)" -msgstr "Festplatte (GB)" +#: netbox/virtualization/forms/bulk_edit.py:174 +msgid "Disk (MB)" +msgstr "Festplatte (MB)" -#: virtualization/forms/bulk_edit.py:334 -#: virtualization/forms/filtersets.py:251 -msgid "Size (GB)" -msgstr "Größe (GB)" +#: netbox/virtualization/forms/bulk_edit.py:334 +#: netbox/virtualization/forms/filtersets.py:251 +msgid "Size (MB)" +msgstr "Größe (MB)" -#: virtualization/forms/bulk_import.py:44 +#: netbox/virtualization/forms/bulk_import.py:44 msgid "Type of cluster" msgstr "Art des Clusters" -#: virtualization/forms/bulk_import.py:51 +#: netbox/virtualization/forms/bulk_import.py:51 msgid "Assigned cluster group" msgstr "Zugewiesene Clustergruppe" -#: virtualization/forms/bulk_import.py:96 +#: netbox/virtualization/forms/bulk_import.py:96 msgid "Assigned cluster" msgstr "Zugewiesener Cluster" -#: virtualization/forms/bulk_import.py:103 +#: netbox/virtualization/forms/bulk_import.py:103 msgid "Assigned device within cluster" msgstr "Zugewiesenes Gerät innerhalb des Clusters" -#: virtualization/forms/filtersets.py:183 +#: netbox/virtualization/forms/filtersets.py:183 msgid "Serial number" msgstr "Seriennummer" -#: virtualization/forms/model_forms.py:153 +#: netbox/virtualization/forms/model_forms.py:153 #, python-brace-format msgid "" "{device} belongs to a different site ({device_site}) than the cluster " @@ -14796,52 +15641,52 @@ msgstr "" "{device} gehört zu einerm anderen Standort ({device_site}) als das Cluster " "({cluster_site})" -#: virtualization/forms/model_forms.py:192 +#: netbox/virtualization/forms/model_forms.py:192 msgid "Optionally pin this VM to a specific host device within the cluster" msgstr "" -"Pinnen Sie diese VM optional an ein bestimmtes Host-Gerät innerhalb des " +"Verbinden Sie diese VM optional an ein bestimmtes Host-Gerät innerhalb des " "Clusters an" -#: virtualization/forms/model_forms.py:221 +#: netbox/virtualization/forms/model_forms.py:221 msgid "Site/Cluster" msgstr "Standort/Cluster" -#: virtualization/forms/model_forms.py:244 +#: netbox/virtualization/forms/model_forms.py:244 msgid "Disk size is managed via the attachment of virtual disks." msgstr "" "Die Festplattengröße wird durch das Anhängen virtueller Festplatten " "verwaltet." -#: virtualization/forms/model_forms.py:372 -#: virtualization/tables/virtualmachines.py:111 +#: netbox/virtualization/forms/model_forms.py:372 +#: netbox/virtualization/tables/virtualmachines.py:111 msgid "Disk" msgstr "Festplatte" -#: virtualization/models/clusters.py:25 +#: netbox/virtualization/models/clusters.py:25 msgid "cluster type" msgstr "Clustertyp" -#: virtualization/models/clusters.py:26 +#: netbox/virtualization/models/clusters.py:26 msgid "cluster types" msgstr "Clustertypen" -#: virtualization/models/clusters.py:45 +#: netbox/virtualization/models/clusters.py:45 msgid "cluster group" msgstr "Clustergruppe" -#: virtualization/models/clusters.py:46 +#: netbox/virtualization/models/clusters.py:46 msgid "cluster groups" msgstr "Clustergruppen" -#: virtualization/models/clusters.py:121 +#: netbox/virtualization/models/clusters.py:121 msgid "cluster" msgstr "Cluster" -#: virtualization/models/clusters.py:122 +#: netbox/virtualization/models/clusters.py:122 msgid "clusters" msgstr "Cluster" -#: virtualization/models/clusters.py:141 +#: netbox/virtualization/models/clusters.py:141 #, python-brace-format msgid "" "{count} devices are assigned as hosts for this cluster but are not in site " @@ -14850,33 +15695,33 @@ msgstr "" "{count} Geräte sind als Hosts für diesen Cluster zugewiesen, befinden sich " "aber nicht an dem Standort {site}" -#: virtualization/models/virtualmachines.py:123 +#: netbox/virtualization/models/virtualmachines.py:123 msgid "memory (MB)" msgstr "Speicher (MB)" -#: virtualization/models/virtualmachines.py:128 +#: netbox/virtualization/models/virtualmachines.py:128 msgid "disk (MB)" msgstr "Festplatte (MB)" -#: virtualization/models/virtualmachines.py:166 +#: netbox/virtualization/models/virtualmachines.py:166 msgid "Virtual machine name must be unique per cluster." msgstr "Der Name der virtuellen Maschine muss pro Cluster eindeutig sein." -#: virtualization/models/virtualmachines.py:169 +#: netbox/virtualization/models/virtualmachines.py:169 msgid "virtual machine" msgstr "virtuelle Maschine" -#: virtualization/models/virtualmachines.py:170 +#: netbox/virtualization/models/virtualmachines.py:170 msgid "virtual machines" msgstr "virtuelle Maschinen" -#: virtualization/models/virtualmachines.py:184 +#: netbox/virtualization/models/virtualmachines.py:184 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." -#: virtualization/models/virtualmachines.py:191 +#: netbox/virtualization/models/virtualmachines.py:191 #, python-brace-format msgid "" "The selected cluster ({cluster}) is not assigned to this site ({site})." @@ -14884,11 +15729,11 @@ msgstr "" "Das ausgewählte Cluster ({cluster}) ist diesem Standort nicht zugeordnet " "({site})." -#: virtualization/models/virtualmachines.py:198 +#: netbox/virtualization/models/virtualmachines.py:198 msgid "Must specify a cluster when assigning a host device." msgstr "Bei der Zuweisung eines Hostgeräts muss ein Cluster angegeben werden." -#: virtualization/models/virtualmachines.py:203 +#: netbox/virtualization/models/virtualmachines.py:203 #, python-brace-format msgid "" "The selected device ({device}) is not assigned to this cluster ({cluster})." @@ -14896,7 +15741,7 @@ msgstr "" "Das gewählte Gerät ({device}) ist diesem Cluster nicht zugewiesen " "({cluster})." -#: virtualization/models/virtualmachines.py:215 +#: netbox/virtualization/models/virtualmachines.py:215 #, python-brace-format msgid "" "The specified disk size ({size}) must match the aggregate size of assigned " @@ -14905,18 +15750,18 @@ msgstr "" "Die angegebene Festplattengröße ({size}) muss der Gesamtgröße der " "zugewiesenen virtuellen Laufwerke entsprechen ({total_size})." -#: virtualization/models/virtualmachines.py:229 +#: netbox/virtualization/models/virtualmachines.py:229 #, 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.)" -#: virtualization/models/virtualmachines.py:238 +#: netbox/virtualization/models/virtualmachines.py:238 #, 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." -#: virtualization/models/virtualmachines.py:396 +#: netbox/virtualization/models/virtualmachines.py:396 #, python-brace-format msgid "" "The selected parent interface ({parent}) belongs to a different virtual " @@ -14925,7 +15770,7 @@ msgstr "" "Die ausgewählte übergeordnete Schnittstelle ({parent}) gehört zu einer " "anderen virtuellen Maschine ({virtual_machine})." -#: virtualization/models/virtualmachines.py:411 +#: netbox/virtualization/models/virtualmachines.py:411 #, python-brace-format msgid "" "The selected bridge interface ({bridge}) belongs to a different virtual " @@ -14934,7 +15779,7 @@ msgstr "" "Die gewählte Bridge-Schnittstelle ({bridge}) gehört zu einer anderen " "virtuellen Maschine ({virtual_machine})." -#: virtualization/models/virtualmachines.py:422 +#: netbox/virtualization/models/virtualmachines.py:422 #, python-brace-format msgid "" "The untagged VLAN ({untagged_vlan}) must belong to the same site as the " @@ -14944,400 +15789,423 @@ msgstr "" "wie die übergeordnete virtuelle Maschine der Schnittstelle, oder sie muss " "global sein." -#: virtualization/models/virtualmachines.py:434 +#: netbox/virtualization/models/virtualmachines.py:434 msgid "size (MB)" msgstr "Größe (MB)" -#: virtualization/models/virtualmachines.py:438 +#: netbox/virtualization/models/virtualmachines.py:438 msgid "virtual disk" msgstr "virtuelle Festplatte" -#: virtualization/models/virtualmachines.py:439 +#: netbox/virtualization/models/virtualmachines.py:439 msgid "virtual disks" msgstr "virtuelle Festplatten" -#: virtualization/views.py:275 +#: netbox/virtualization/views.py:273 #, python-brace-format msgid "Added {count} devices to cluster {cluster}" msgstr "Füge {count} Geräte zum Cluster {cluster}hinzu " -#: virtualization/views.py:310 +#: netbox/virtualization/views.py:308 #, python-brace-format msgid "Removed {count} devices from cluster {cluster}" msgstr "Entferne {count}Geräte vom Cluster {cluster}" -#: vpn/choices.py:31 +#: netbox/vpn/choices.py:35 msgid "IPsec - Transport" msgstr "IPSec - Transport" -#: vpn/choices.py:32 +#: netbox/vpn/choices.py:36 msgid "IPsec - Tunnel" msgstr "IPSec-Tunnel" -#: vpn/choices.py:33 +#: netbox/vpn/choices.py:37 msgid "IP-in-IP" msgstr "IP-in-IP" -#: vpn/choices.py:34 +#: netbox/vpn/choices.py:38 msgid "GRE" msgstr "GRE" -#: vpn/choices.py:56 +#: netbox/vpn/choices.py:39 +msgid "WireGuard" +msgstr "WireGuard" + +#: netbox/vpn/choices.py:40 +msgid "OpenVPN" +msgstr "OpenVPN" + +#: netbox/vpn/choices.py:41 +msgid "L2TP" +msgstr "L2TP" + +#: netbox/vpn/choices.py:42 +msgid "PPTP" +msgstr "PPTP" + +#: netbox/vpn/choices.py:64 msgid "Hub" msgstr "Hub" -#: vpn/choices.py:57 +#: netbox/vpn/choices.py:65 msgid "Spoke" msgstr "Spoke" -#: vpn/choices.py:80 +#: netbox/vpn/choices.py:88 msgid "Aggressive" msgstr "Aggressiv" -#: vpn/choices.py:81 +#: netbox/vpn/choices.py:89 msgid "Main" msgstr "Haupt" -#: vpn/choices.py:92 +#: netbox/vpn/choices.py:100 msgid "Pre-shared keys" msgstr "Vorab geteilte Schlüssel (Preshared Keys)" -#: vpn/choices.py:93 +#: netbox/vpn/choices.py:101 msgid "Certificates" msgstr "Zertifikate" -#: vpn/choices.py:94 +#: netbox/vpn/choices.py:102 msgid "RSA signatures" msgstr "RSA-Signaturen" -#: vpn/choices.py:95 +#: netbox/vpn/choices.py:103 msgid "DSA signatures" msgstr "DSA-Signaturen" -#: vpn/choices.py:178 vpn/choices.py:179 vpn/choices.py:180 vpn/choices.py:181 -#: vpn/choices.py:182 vpn/choices.py:183 vpn/choices.py:184 vpn/choices.py:185 -#: vpn/choices.py:186 vpn/choices.py:187 vpn/choices.py:188 vpn/choices.py:189 -#: vpn/choices.py:190 vpn/choices.py:191 vpn/choices.py:192 vpn/choices.py:193 -#: vpn/choices.py:194 vpn/choices.py:195 vpn/choices.py:196 vpn/choices.py:197 -#: vpn/choices.py:198 vpn/choices.py:199 vpn/choices.py:200 vpn/choices.py:201 +#: netbox/vpn/choices.py:186 netbox/vpn/choices.py:187 +#: netbox/vpn/choices.py:188 netbox/vpn/choices.py:189 +#: netbox/vpn/choices.py:190 netbox/vpn/choices.py:191 +#: netbox/vpn/choices.py:192 netbox/vpn/choices.py:193 +#: netbox/vpn/choices.py:194 netbox/vpn/choices.py:195 +#: netbox/vpn/choices.py:196 netbox/vpn/choices.py:197 +#: netbox/vpn/choices.py:198 netbox/vpn/choices.py:199 +#: netbox/vpn/choices.py:200 netbox/vpn/choices.py:201 +#: netbox/vpn/choices.py:202 netbox/vpn/choices.py:203 +#: netbox/vpn/choices.py:204 netbox/vpn/choices.py:205 +#: netbox/vpn/choices.py:206 netbox/vpn/choices.py:207 +#: netbox/vpn/choices.py:208 netbox/vpn/choices.py:209 #, python-brace-format msgid "Group {n}" msgstr "Gruppe {n}" -#: vpn/choices.py:243 +#: netbox/vpn/choices.py:251 msgid "Ethernet Private LAN" msgstr "Privates Ethernet-LAN" -#: vpn/choices.py:244 +#: netbox/vpn/choices.py:252 msgid "Ethernet Virtual Private LAN" msgstr "Virtuelles privates Ethernet-LAN" -#: vpn/choices.py:247 +#: netbox/vpn/choices.py:255 msgid "Ethernet Private Tree" msgstr "Privater Ethernet-Baum" -#: vpn/choices.py:248 +#: netbox/vpn/choices.py:256 msgid "Ethernet Virtual Private Tree" msgstr "Virtueller privater Ethernet-Baum" -#: vpn/filtersets.py:41 +#: netbox/vpn/filtersets.py:41 msgid "Tunnel group (ID)" msgstr "Tunnelgruppe (ID)" -#: vpn/filtersets.py:47 +#: netbox/vpn/filtersets.py:47 msgid "Tunnel group (slug)" msgstr "Tunnelgruppe (URL-Slug)" -#: vpn/filtersets.py:54 +#: netbox/vpn/filtersets.py:54 msgid "IPSec profile (ID)" msgstr "IPSec-Profil (ID)" -#: vpn/filtersets.py:60 +#: netbox/vpn/filtersets.py:60 msgid "IPSec profile (name)" msgstr "IPSec-Profil (Name)" -#: vpn/filtersets.py:81 +#: netbox/vpn/filtersets.py:81 msgid "Tunnel (ID)" msgstr "Tunnel (ID)" -#: vpn/filtersets.py:87 +#: netbox/vpn/filtersets.py:87 msgid "Tunnel (name)" msgstr "Tunnel (Name)" -#: vpn/filtersets.py:118 +#: netbox/vpn/filtersets.py:118 msgid "Outside IP (ID)" msgstr "Externe IP (ID)" -#: vpn/filtersets.py:130 vpn/filtersets.py:263 +#: netbox/vpn/filtersets.py:130 netbox/vpn/filtersets.py:263 msgid "IKE policy (ID)" msgstr "IKE-Richtlinie (ID)" -#: vpn/filtersets.py:136 vpn/filtersets.py:269 +#: netbox/vpn/filtersets.py:136 netbox/vpn/filtersets.py:269 msgid "IKE policy (name)" msgstr "IKE-Richtlinie (Name)" -#: vpn/filtersets.py:200 vpn/filtersets.py:273 +#: netbox/vpn/filtersets.py:200 netbox/vpn/filtersets.py:273 msgid "IPSec policy (ID)" msgstr "IPSec-Richtlinie (ID)" -#: vpn/filtersets.py:206 vpn/filtersets.py:279 +#: netbox/vpn/filtersets.py:206 netbox/vpn/filtersets.py:279 msgid "IPSec policy (name)" msgstr "IPSec-Richtlinie (Name)" -#: vpn/filtersets.py:348 +#: netbox/vpn/filtersets.py:348 msgid "L2VPN (slug)" msgstr "L2VPN (URL-Slug)" -#: vpn/filtersets.py:412 +#: netbox/vpn/filtersets.py:412 msgid "VM Interface (ID)" msgstr "VM-Schnittstelle (ID)" -#: vpn/filtersets.py:418 +#: netbox/vpn/filtersets.py:418 msgid "VLAN (name)" msgstr "VLAN (Name)" -#: vpn/forms/bulk_edit.py:45 vpn/forms/bulk_import.py:42 -#: vpn/forms/filtersets.py:54 +#: netbox/vpn/forms/bulk_edit.py:45 netbox/vpn/forms/bulk_import.py:42 +#: netbox/vpn/forms/filtersets.py:54 msgid "Tunnel group" msgstr "Tunnelgruppe" -#: vpn/forms/bulk_edit.py:117 vpn/models/crypto.py:47 +#: netbox/vpn/forms/bulk_edit.py:117 netbox/vpn/models/crypto.py:47 msgid "SA lifetime" msgstr "SA-Lebendauer" -#: vpn/forms/bulk_edit.py:151 wireless/forms/bulk_edit.py:79 -#: wireless/forms/bulk_edit.py:126 wireless/forms/filtersets.py:64 -#: wireless/forms/filtersets.py:98 +#: netbox/vpn/forms/bulk_edit.py:151 netbox/wireless/forms/bulk_edit.py:79 +#: netbox/wireless/forms/bulk_edit.py:126 +#: netbox/wireless/forms/filtersets.py:64 +#: netbox/wireless/forms/filtersets.py:98 msgid "Pre-shared key" msgstr "Vorab geteilter Schlüssel (Pre-shared key)" -#: vpn/forms/bulk_edit.py:237 vpn/forms/bulk_import.py:239 -#: vpn/forms/filtersets.py:199 vpn/forms/model_forms.py:370 -#: vpn/models/crypto.py:104 +#: netbox/vpn/forms/bulk_edit.py:237 netbox/vpn/forms/bulk_import.py:239 +#: netbox/vpn/forms/filtersets.py:199 netbox/vpn/forms/model_forms.py:370 +#: netbox/vpn/models/crypto.py:104 msgid "IKE policy" msgstr "IKE-Richtlinie" -#: vpn/forms/bulk_edit.py:242 vpn/forms/bulk_import.py:244 -#: vpn/forms/filtersets.py:204 vpn/forms/model_forms.py:374 -#: vpn/models/crypto.py:209 +#: netbox/vpn/forms/bulk_edit.py:242 netbox/vpn/forms/bulk_import.py:244 +#: netbox/vpn/forms/filtersets.py:204 netbox/vpn/forms/model_forms.py:374 +#: netbox/vpn/models/crypto.py:209 msgid "IPSec policy" msgstr "IPSec-Richtlinie" -#: vpn/forms/bulk_import.py:50 +#: netbox/vpn/forms/bulk_import.py:50 msgid "Tunnel encapsulation" msgstr "Tunnelkapselung" -#: vpn/forms/bulk_import.py:83 +#: netbox/vpn/forms/bulk_import.py:83 msgid "Operational role" msgstr "Operative Rolle" -#: vpn/forms/bulk_import.py:90 +#: netbox/vpn/forms/bulk_import.py:90 msgid "Parent device of assigned interface" msgstr "Übergeordnetes Gerät der zugewiesenen Schnittstelle" -#: vpn/forms/bulk_import.py:97 +#: netbox/vpn/forms/bulk_import.py:97 msgid "Parent VM of assigned interface" msgstr "Übergeordnete VM der zugewiesenen Schnittstelle" -#: vpn/forms/bulk_import.py:104 +#: netbox/vpn/forms/bulk_import.py:104 msgid "Device or virtual machine interface" msgstr "Geräte- oder VM-Schnittstelle" -#: vpn/forms/bulk_import.py:183 +#: netbox/vpn/forms/bulk_import.py:183 msgid "IKE proposal(s)" msgstr "IKE-Vorschlag (e)" -#: vpn/forms/bulk_import.py:215 vpn/models/crypto.py:197 +#: netbox/vpn/forms/bulk_import.py:215 netbox/vpn/models/crypto.py:197 msgid "Diffie-Hellman group for Perfect Forward Secrecy" msgstr "Diffie-Hellman-Gruppe für Perfect Forward Secrecy" -#: vpn/forms/bulk_import.py:222 +#: netbox/vpn/forms/bulk_import.py:222 msgid "IPSec proposal(s)" msgstr "IPSec-Vorschlag (e)" -#: vpn/forms/bulk_import.py:236 +#: netbox/vpn/forms/bulk_import.py:236 msgid "IPSec protocol" msgstr "IPSec-Protokoll" -#: vpn/forms/bulk_import.py:266 +#: netbox/vpn/forms/bulk_import.py:266 msgid "L2VPN type" msgstr "L2VPN-Typ" -#: vpn/forms/bulk_import.py:287 +#: netbox/vpn/forms/bulk_import.py:287 msgid "Parent device (for interface)" msgstr "Übergeordnetes Gerät (für Schnittstelle)" -#: vpn/forms/bulk_import.py:294 +#: netbox/vpn/forms/bulk_import.py:294 msgid "Parent virtual machine (for interface)" msgstr "Übergeordnete virtuelle Maschine (für Schnittstelle)" -#: vpn/forms/bulk_import.py:301 +#: netbox/vpn/forms/bulk_import.py:301 msgid "Assigned interface (device or VM)" msgstr "Zugewiesene Schnittstelle (Gerät oder VM)" -#: vpn/forms/bulk_import.py:334 +#: netbox/vpn/forms/bulk_import.py:334 msgid "Cannot import device and VM interface terminations simultaneously." msgstr "" "Geräte- und VM-Schnittstellenabschlüsse können nicht gleichzeitig importiert" " werden." -#: vpn/forms/bulk_import.py:336 +#: netbox/vpn/forms/bulk_import.py:336 msgid "Each termination must specify either an interface or a VLAN." msgstr "" "Bei jeder Terminierung muss entweder eine Schnittstelle oder ein VLAN " "angegeben werden." -#: vpn/forms/bulk_import.py:338 +#: netbox/vpn/forms/bulk_import.py:338 msgid "Cannot assign both an interface and a VLAN." msgstr "" "Es kann nicht sowohl eine Schnittstelle als auch ein VLAN zugewiesen werden." -#: vpn/forms/filtersets.py:130 +#: netbox/vpn/forms/filtersets.py:130 msgid "IKE version" msgstr "IKE-Ausführung" -#: vpn/forms/filtersets.py:142 vpn/forms/filtersets.py:175 -#: vpn/forms/model_forms.py:298 vpn/forms/model_forms.py:334 +#: netbox/vpn/forms/filtersets.py:142 netbox/vpn/forms/filtersets.py:175 +#: netbox/vpn/forms/model_forms.py:298 netbox/vpn/forms/model_forms.py:334 msgid "Proposal" msgstr "Vorschlag" -#: vpn/forms/filtersets.py:251 +#: netbox/vpn/forms/filtersets.py:251 msgid "Assigned Object Type" msgstr "Zugewiesener Objekttyp" -#: vpn/forms/model_forms.py:95 vpn/forms/model_forms.py:130 -#: vpn/forms/model_forms.py:240 vpn/tables/tunnels.py:91 +#: netbox/vpn/forms/model_forms.py:95 netbox/vpn/forms/model_forms.py:130 +#: netbox/vpn/forms/model_forms.py:240 netbox/vpn/tables/tunnels.py:91 msgid "Tunnel interface" msgstr "Tunnelschnittstelle" -#: vpn/forms/model_forms.py:150 +#: netbox/vpn/forms/model_forms.py:150 msgid "First Termination" msgstr "Erster Endpunkt" -#: vpn/forms/model_forms.py:153 +#: netbox/vpn/forms/model_forms.py:153 msgid "Second Termination" msgstr "Zweiter Endpunkt" -#: vpn/forms/model_forms.py:197 +#: netbox/vpn/forms/model_forms.py:197 msgid "This parameter is required when defining a termination." msgstr "" "Dieser Parameter ist erforderlich, wenn ein Abschlusspunkt definiert wird." -#: vpn/forms/model_forms.py:320 vpn/forms/model_forms.py:356 +#: netbox/vpn/forms/model_forms.py:320 netbox/vpn/forms/model_forms.py:356 msgid "Policy" msgstr "Richtlinie" -#: vpn/forms/model_forms.py:487 +#: netbox/vpn/forms/model_forms.py:487 msgid "A termination must specify an interface or VLAN." msgstr "Eine Terminierung muss eine Schnittstelle oder ein VLAN angeben." -#: vpn/forms/model_forms.py:489 +#: netbox/vpn/forms/model_forms.py:489 msgid "" "A termination can only have one terminating object (an interface or VLAN)." msgstr "" "Eine Terminierung kann nur ein Terminierungsobjekt haben (eine Schnittstelle" " oder ein VLAN)." -#: vpn/models/crypto.py:33 +#: netbox/vpn/models/crypto.py:33 msgid "encryption algorithm" msgstr "Verschlüsselungsalgorithmus" -#: vpn/models/crypto.py:37 +#: netbox/vpn/models/crypto.py:37 msgid "authentication algorithm" msgstr "Authentifizierungsalgorithmus" -#: vpn/models/crypto.py:44 +#: netbox/vpn/models/crypto.py:44 msgid "Diffie-Hellman group ID" msgstr "Diffie-Hellman-Gruppen-ID" -#: vpn/models/crypto.py:50 +#: netbox/vpn/models/crypto.py:50 msgid "Security association lifetime (in seconds)" msgstr "Lebensdauer der Sicherheitsverbindung (in Sekunden)" -#: vpn/models/crypto.py:59 +#: netbox/vpn/models/crypto.py:59 msgid "IKE proposal" msgstr "IKE-Vorschlag" -#: vpn/models/crypto.py:60 +#: netbox/vpn/models/crypto.py:60 msgid "IKE proposals" msgstr "IKE-Vorschläge" -#: vpn/models/crypto.py:76 +#: netbox/vpn/models/crypto.py:76 msgid "version" msgstr "Version" -#: vpn/models/crypto.py:88 vpn/models/crypto.py:190 +#: netbox/vpn/models/crypto.py:88 netbox/vpn/models/crypto.py:190 msgid "proposals" msgstr "Vorschläge" -#: vpn/models/crypto.py:91 wireless/models.py:39 +#: netbox/vpn/models/crypto.py:91 netbox/wireless/models.py:39 msgid "pre-shared key" msgstr "vorab geteilter Schlüssel" -#: vpn/models/crypto.py:105 +#: netbox/vpn/models/crypto.py:105 msgid "IKE policies" msgstr "IKE-Richtlinien" -#: vpn/models/crypto.py:118 +#: netbox/vpn/models/crypto.py:118 msgid "Mode is required for selected IKE version" msgstr "Der Modus ist für die ausgewählte IKE-Version erforderlich" -#: vpn/models/crypto.py:122 +#: netbox/vpn/models/crypto.py:122 msgid "Mode cannot be used for selected IKE version" msgstr "Der Modus kann nicht für die ausgewählte IKE-Version verwendet werden" -#: vpn/models/crypto.py:136 +#: netbox/vpn/models/crypto.py:136 msgid "encryption" msgstr "Verschlüsselung" -#: vpn/models/crypto.py:141 +#: netbox/vpn/models/crypto.py:141 msgid "authentication" msgstr "Authentifizierung" -#: vpn/models/crypto.py:149 +#: netbox/vpn/models/crypto.py:149 msgid "Security association lifetime (seconds)" msgstr "Lebensdauer der Sicherheitsverbindung (Sekunden)" -#: vpn/models/crypto.py:155 +#: netbox/vpn/models/crypto.py:155 msgid "Security association lifetime (in kilobytes)" msgstr "Lebensdauer der Sicherheitsverbindung (in Kilobyte)" -#: vpn/models/crypto.py:164 +#: netbox/vpn/models/crypto.py:164 msgid "IPSec proposal" msgstr "IPSec-Vorschlag" -#: vpn/models/crypto.py:165 +#: netbox/vpn/models/crypto.py:165 msgid "IPSec proposals" msgstr "IPSec-Vorschläge" -#: vpn/models/crypto.py:178 +#: netbox/vpn/models/crypto.py:178 msgid "Encryption and/or authentication algorithm must be defined" msgstr "" "Der Verschlüsselungs- und/oder Authentifizierungsalgorithmus muss definiert " "werden" -#: vpn/models/crypto.py:210 +#: netbox/vpn/models/crypto.py:210 msgid "IPSec policies" msgstr "IPSec-Richtlinien" -#: vpn/models/crypto.py:251 +#: netbox/vpn/models/crypto.py:251 msgid "IPSec profiles" msgstr "IPSec-Profile" -#: vpn/models/l2vpn.py:116 +#: netbox/vpn/models/l2vpn.py:116 msgid "L2VPN termination" msgstr "L2VPN-Abschlusspunkt" -#: vpn/models/l2vpn.py:117 +#: netbox/vpn/models/l2vpn.py:117 msgid "L2VPN terminations" msgstr "L2VPN-Abschlusspunkte" -#: vpn/models/l2vpn.py:135 +#: netbox/vpn/models/l2vpn.py:135 #, python-brace-format msgid "L2VPN Termination already assigned ({assigned_object})" msgstr "L2VPN-Terminierung wurde bereits zugewiesen ({assigned_object})" -#: vpn/models/l2vpn.py:147 +#: netbox/vpn/models/l2vpn.py:147 #, python-brace-format msgid "" "{l2vpn_type} L2VPNs cannot have more than two terminations; found " @@ -15346,187 +16214,195 @@ msgstr "" "{l2vpn_type} L2VPNs können nicht mehr als zwei Terminierungen haben; " "gefunden {terminations_count} bereits definiert." -#: vpn/models/tunnels.py:26 +#: netbox/vpn/models/tunnels.py:26 msgid "tunnel group" msgstr "Tunnelgruppe" -#: vpn/models/tunnels.py:27 +#: netbox/vpn/models/tunnels.py:27 msgid "tunnel groups" msgstr "Tunnelgruppen" -#: vpn/models/tunnels.py:53 +#: netbox/vpn/models/tunnels.py:53 msgid "encapsulation" msgstr "Encapsulation" -#: vpn/models/tunnels.py:72 +#: netbox/vpn/models/tunnels.py:72 msgid "tunnel ID" msgstr "Tunnel-ID" -#: vpn/models/tunnels.py:94 +#: netbox/vpn/models/tunnels.py:94 msgid "tunnel" msgstr "Tunnel" -#: vpn/models/tunnels.py:95 +#: netbox/vpn/models/tunnels.py:95 msgid "tunnels" msgstr "Tunnel" -#: vpn/models/tunnels.py:153 +#: netbox/vpn/models/tunnels.py:153 msgid "An object may be terminated to only one tunnel at a time." msgstr "Ein Objekt kann jeweils nur an einem Tunnel terminiert werden." -#: vpn/models/tunnels.py:156 +#: netbox/vpn/models/tunnels.py:156 msgid "tunnel termination" msgstr "Tunnelabschlusspunkt" -#: vpn/models/tunnels.py:157 +#: netbox/vpn/models/tunnels.py:157 msgid "tunnel terminations" msgstr "Tunnelabschlusspunkte" -#: vpn/models/tunnels.py:174 +#: netbox/vpn/models/tunnels.py:174 #, python-brace-format msgid "{name} is already attached to a tunnel ({tunnel})." msgstr "{name} ist bereits an einen Tunnel angeschlossen ({tunnel})." -#: vpn/tables/crypto.py:22 +#: netbox/vpn/tables/crypto.py:22 msgid "Authentication Method" msgstr "Authentifizierungsmethode" -#: vpn/tables/crypto.py:25 vpn/tables/crypto.py:97 +#: netbox/vpn/tables/crypto.py:25 netbox/vpn/tables/crypto.py:97 msgid "Encryption Algorithm" msgstr "Verschlüsselungsalgorithmus" -#: vpn/tables/crypto.py:28 vpn/tables/crypto.py:100 +#: netbox/vpn/tables/crypto.py:28 netbox/vpn/tables/crypto.py:100 msgid "Authentication Algorithm" msgstr "Authentifizierungsalgorithmus" -#: vpn/tables/crypto.py:34 +#: netbox/vpn/tables/crypto.py:34 msgid "SA Lifetime" msgstr "SA-Lebensdauer" -#: vpn/tables/crypto.py:71 +#: netbox/vpn/tables/crypto.py:71 msgid "Pre-shared Key" msgstr "Vorab geteilter Schlüssel" -#: vpn/tables/crypto.py:103 +#: netbox/vpn/tables/crypto.py:103 msgid "SA Lifetime (Seconds)" msgstr "SA-Lebensdauer (Sekunden)" -#: vpn/tables/crypto.py:106 +#: netbox/vpn/tables/crypto.py:106 msgid "SA Lifetime (KB)" msgstr "SA-Lebensdauer (KB)" -#: vpn/tables/l2vpn.py:69 +#: netbox/vpn/tables/l2vpn.py:69 msgid "Object Parent" msgstr "Übergeordnetes Objekt" -#: vpn/tables/l2vpn.py:74 +#: netbox/vpn/tables/l2vpn.py:74 msgid "Object Site" msgstr "Objektstandort" -#: wireless/choices.py:11 +#: netbox/wireless/choices.py:11 msgid "Access point" msgstr "Accesspoint" -#: wireless/choices.py:12 +#: netbox/wireless/choices.py:12 msgid "Station" msgstr "Client" -#: wireless/choices.py:467 +#: netbox/wireless/choices.py:467 msgid "Open" msgstr "Offen" -#: wireless/choices.py:469 +#: netbox/wireless/choices.py:469 msgid "WPA Personal (PSK)" msgstr "WPA Persönlich (PSK)" -#: wireless/choices.py:470 +#: netbox/wireless/choices.py:470 msgid "WPA Enterprise" msgstr "WPA Enterprise" -#: wireless/forms/bulk_edit.py:73 wireless/forms/bulk_edit.py:120 -#: wireless/forms/bulk_import.py:68 wireless/forms/bulk_import.py:71 -#: wireless/forms/bulk_import.py:110 wireless/forms/bulk_import.py:113 -#: wireless/forms/filtersets.py:59 wireless/forms/filtersets.py:93 +#: netbox/wireless/forms/bulk_edit.py:73 +#: netbox/wireless/forms/bulk_edit.py:120 +#: netbox/wireless/forms/bulk_import.py:68 +#: netbox/wireless/forms/bulk_import.py:71 +#: netbox/wireless/forms/bulk_import.py:110 +#: netbox/wireless/forms/bulk_import.py:113 +#: netbox/wireless/forms/filtersets.py:59 +#: netbox/wireless/forms/filtersets.py:93 msgid "Authentication cipher" msgstr "Authentifizierungchiffre" -#: wireless/forms/bulk_edit.py:134 wireless/forms/bulk_import.py:116 -#: wireless/forms/bulk_import.py:119 wireless/forms/filtersets.py:106 +#: 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" -#: wireless/forms/bulk_import.py:52 +#: netbox/wireless/forms/bulk_import.py:52 msgid "Bridged VLAN" msgstr "Bridged VLAN" -#: wireless/forms/bulk_import.py:89 wireless/tables/wirelesslink.py:28 +#: netbox/wireless/forms/bulk_import.py:89 +#: netbox/wireless/tables/wirelesslink.py:28 msgid "Interface A" msgstr "Schnittstelle A" -#: wireless/forms/bulk_import.py:93 wireless/tables/wirelesslink.py:37 +#: netbox/wireless/forms/bulk_import.py:93 +#: netbox/wireless/tables/wirelesslink.py:37 msgid "Interface B" msgstr "Schnittstelle B" -#: wireless/forms/model_forms.py:161 +#: netbox/wireless/forms/model_forms.py:161 msgid "Side B" msgstr "Seite B" -#: wireless/models.py:31 +#: netbox/wireless/models.py:31 msgid "authentication cipher" msgstr "Authentifizierungchiffre" -#: wireless/models.py:69 +#: netbox/wireless/models.py:69 msgid "wireless LAN group" msgstr "WLAN-Gruppe" -#: wireless/models.py:70 +#: netbox/wireless/models.py:70 msgid "wireless LAN groups" msgstr "WLAN-Gruppen" -#: wireless/models.py:116 +#: netbox/wireless/models.py:116 msgid "wireless LAN" msgstr "WLAN" -#: wireless/models.py:144 +#: netbox/wireless/models.py:144 msgid "interface A" msgstr "Schnittstelle A" -#: wireless/models.py:151 +#: netbox/wireless/models.py:151 msgid "interface B" msgstr "Schnittstelle B" -#: wireless/models.py:165 +#: netbox/wireless/models.py:165 msgid "distance" msgstr "Entfernung" -#: wireless/models.py:172 +#: netbox/wireless/models.py:172 msgid "distance unit" msgstr "Entfernungseinheit" -#: wireless/models.py:219 +#: netbox/wireless/models.py:219 msgid "wireless link" msgstr "Funkverbindung" -#: wireless/models.py:220 +#: netbox/wireless/models.py:220 msgid "wireless links" msgstr "Funkverbindungen" -#: wireless/models.py:236 +#: netbox/wireless/models.py:236 msgid "Must specify a unit when setting a wireless distance" msgstr "" "Beim Einstellen einer Funkentfernung muss eine Einheit angegeben werden" -#: wireless/models.py:242 wireless/models.py:248 +#: netbox/wireless/models.py:242 netbox/wireless/models.py:248 #, python-brace-format msgid "{type} is not a wireless interface." msgstr "{type} ist keine Funkschnittstelle." -#: wireless/utils.py:16 +#: netbox/wireless/utils.py:16 #, python-brace-format msgid "Invalid channel value: {channel}" msgstr "Ungültiger Kanalwert: {channel}" -#: wireless/utils.py:26 +#: netbox/wireless/utils.py:26 #, python-brace-format msgid "Invalid channel attribute: {name}" msgstr "Ungültiges Kanalattribut: {name}" diff --git a/netbox/translations/en/LC_MESSAGES/django.po b/netbox/translations/en/LC_MESSAGES/django.po index 01e151c84..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: 2024-11-08 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" @@ -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:1530 -#: netbox/dcim/choices.py:1606 netbox/dcim/choices.py:1656 -#: 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:1605 netbox/dcim/choices.py:1655 -#: 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:1604 -#: netbox/dcim/choices.py:1657 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:1617 +#: 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:339 netbox/ipam/filtersets.py:959 -#: 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:346 -#: netbox/ipam/filtersets.py:966 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:352 -#: netbox/ipam/filtersets.py:972 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:359 netbox/ipam/filtersets.py:979 -#: 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:678 -#: netbox/dcim/forms/bulk_edit.py:883 netbox/dcim/forms/bulk_import.py:131 -#: netbox/dcim/forms/bulk_import.py:230 netbox/dcim/forms/bulk_import.py:309 -#: netbox/dcim/forms/bulk_import.py:540 netbox/dcim/forms/bulk_import.py:1311 -#: netbox/dcim/forms/bulk_import.py:1339 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:391 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:429 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:636 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/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:238 -#: netbox/ipam/filtersets.py:369 netbox/ipam/filtersets.py:989 -#: 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:243 +#: 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:249 +#: 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:232 netbox/ipam/filtersets.py:363 -#: netbox/ipam/filtersets.py:983 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:449 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:433 -#: netbox/dcim/forms/bulk_edit.py:467 netbox/dcim/forms/bulk_edit.py:482 -#: netbox/dcim/forms/bulk_edit.py:541 netbox/dcim/forms/bulk_edit.py:585 -#: netbox/dcim/forms/bulk_edit.py:619 netbox/dcim/forms/bulk_edit.py:643 -#: netbox/dcim/forms/bulk_edit.py:716 netbox/dcim/forms/bulk_edit.py:777 -#: netbox/dcim/forms/bulk_edit.py:829 netbox/dcim/forms/bulk_edit.py:852 -#: netbox/dcim/forms/bulk_edit.py:900 netbox/dcim/forms/bulk_edit.py:970 -#: netbox/dcim/forms/bulk_edit.py:1023 netbox/dcim/forms/bulk_edit.py:1058 -#: netbox/dcim/forms/bulk_edit.py:1098 netbox/dcim/forms/bulk_edit.py:1142 -#: netbox/dcim/forms/bulk_edit.py:1187 netbox/dcim/forms/bulk_edit.py:1214 -#: netbox/dcim/forms/bulk_edit.py:1232 netbox/dcim/forms/bulk_edit.py:1250 -#: netbox/dcim/forms/bulk_edit.py:1268 netbox/dcim/forms/bulk_edit.py:1720 -#: 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,12 +506,13 @@ 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 +#: netbox/templates/dcim/moduletype.html:39 #: netbox/templates/dcim/platform.html:33 #: netbox/templates/dcim/powerfeed.html:40 #: netbox/templates/dcim/poweroutlet.html:40 @@ -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:605 netbox/dcim/forms/bulk_edit.py:814 -#: netbox/dcim/forms/bulk_edit.py:1183 netbox/dcim/forms/bulk_edit.py:1210 -#: netbox/dcim/forms/bulk_edit.py:1716 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:792 netbox/dcim/forms/bulk_edit.py:931 -#: 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_import.py:188 -#: netbox/dcim/forms/bulk_import.py:260 netbox/dcim/forms/bulk_import.py:708 -#: netbox/dcim/forms/bulk_import.py:734 netbox/dcim/forms/bulk_import.py:760 -#: netbox/dcim/forms/bulk_import.py:780 netbox/dcim/forms/bulk_import.py:863 -#: netbox/dcim/forms/bulk_import.py:957 netbox/dcim/forms/bulk_import.py:999 -#: netbox/dcim/forms/bulk_import.py:1213 netbox/dcim/forms/bulk_import.py:1376 -#: 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: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: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:701 -#: netbox/dcim/forms/bulk_edit.py:766 netbox/dcim/forms/bulk_edit.py:798 -#: netbox/dcim/forms/bulk_edit.py:925 netbox/dcim/forms/bulk_edit.py:1739 -#: 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:505 -#: netbox/dcim/forms/bulk_import.py:659 netbox/dcim/forms/bulk_import.py:1207 -#: netbox/dcim/forms/bulk_import.py:1371 netbox/dcim/forms/bulk_import.py:1435 -#: 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:69 -#: 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:450 -#: 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:468 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: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 @@ -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:462 netbox/dcim/forms/bulk_edit.py:691 -#: netbox/dcim/forms/bulk_edit.py:804 netbox/dcim/forms/bulk_edit.py:1744 -#: 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:334 -#: netbox/dcim/forms/bulk_import.py:479 netbox/dcim/forms/bulk_import.py:1219 -#: netbox/dcim/forms/bulk_import.py:1428 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:443 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: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 @@ -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:1692 -#: 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:316 +#: 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/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" +#: 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:961 -#: netbox/dcim/forms/bulk_edit.py:1325 netbox/dcim/forms/bulk_edit.py:1342 -#: netbox/dcim/forms/bulk_edit.py:1359 netbox/dcim/forms/bulk_edit.py:1377 -#: netbox/dcim/forms/bulk_edit.py:1472 netbox/dcim/forms/bulk_edit.py:1632 -#: netbox/dcim/forms/bulk_edit.py:1649 +#: 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:507 netbox/dcim/forms/bulk_import.py:661 -#: netbox/dcim/forms/bulk_import.py:1373 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:452 -#: 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:338 netbox/dcim/forms/bulk_import.py:483 -#: netbox/dcim/forms/bulk_import.py:1223 netbox/dcim/forms/bulk_import.py:1368 -#: netbox/dcim/forms/bulk_import.py:1432 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:447 -#: 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:442 netbox/dcim/forms/bulk_edit.py:683 -#: netbox/dcim/forms/bulk_edit.py:738 netbox/dcim/forms/bulk_edit.py:892 -#: netbox/dcim/forms/bulk_import.py:235 netbox/dcim/forms/bulk_import.py:315 -#: netbox/dcim/forms/bulk_import.py:546 netbox/dcim/forms/bulk_import.py:1317 -#: netbox/dcim/forms/bulk_import.py:1351 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: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: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: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: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:867 -#: 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:375 -#: 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/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:875 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/dcim/forms/object_create.py:383 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/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: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:838 -#: 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:1552 -#: 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:323 +#: 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:999 netbox/ipam/forms/bulk_edit.py:493 -#: netbox/ipam/forms/bulk_import.py:436 netbox/ipam/forms/model_forms.py:528 -#: 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: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: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: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:84 netbox/dcim/models/cables.py:49 -#: netbox/dcim/models/devices.py:653 netbox/dcim/models/devices.py:1173 -#: netbox/dcim/models/devices.py:1399 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:195 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: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/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: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: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/core/models/jobs.py:45 +#: 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:1330 netbox/dcim/models/devices.py:1395 -#: 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: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 #: 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:184 -#: 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: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: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:88 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:72 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: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: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: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: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:1607 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:1132 -#: netbox/dcim/forms/bulk_edit.py:1410 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:457 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:1518 -#: netbox/dcim/forms/bulk_edit.py:979 netbox/dcim/forms/bulk_edit.py:1367 -#: netbox/dcim/forms/bulk_edit.py:1385 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/files.py:27 netbox/core/models/jobs.py:49 -#: netbox/extras/models/models.py:730 netbox/extras/models/notifications.py:39 +#: 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: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,58 +2624,63 @@ msgstr "" msgid "managed files" msgstr "" -#: netbox/core/models/jobs.py:53 +#: 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 "" -#: netbox/core/models/jobs.py:58 +#: netbox/core/models/jobs.py:59 msgid "interval" msgstr "" -#: netbox/core/models/jobs.py:64 +#: netbox/core/models/jobs.py:65 msgid "Recurrence interval (in minutes)" msgstr "" -#: netbox/core/models/jobs.py:67 +#: netbox/core/models/jobs.py:68 msgid "started" msgstr "" -#: netbox/core/models/jobs.py:72 +#: netbox/core/models/jobs.py:73 msgid "completed" msgstr "" -#: netbox/core/models/jobs.py:90 netbox/extras/models/models.py:101 -#: netbox/extras/models/staging.py:87 +#: netbox/core/models/jobs.py:91 netbox/extras/models/models.py:101 +#: netbox/extras/models/staging.py:95 msgid "data" msgstr "" -#: netbox/core/models/jobs.py:95 +#: netbox/core/models/jobs.py:96 msgid "error" msgstr "" -#: netbox/core/models/jobs.py:100 +#: netbox/core/models/jobs.py:101 msgid "job ID" msgstr "" -#: netbox/core/models/jobs.py:111 +#: netbox/core/models/jobs.py:112 msgid "job" msgstr "" -#: netbox/core/models/jobs.py:112 +#: netbox/core/models/jobs.py:113 msgid "jobs" msgstr "" -#: netbox/core/models/jobs.py:135 +#: netbox/core/models/jobs.py:136 #, python-brace-format msgid "Jobs cannot be assigned to this object type ({type})." msgstr "" -#: netbox/core/models/jobs.py:185 +#: netbox/core/models/jobs.py:190 #, python-brace-format msgid "Invalid status for job termination. Choices are: {choices}" msgstr "" -#: netbox/core/models/jobs.py:216 +#: 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:678 +#: netbox/core/views.py:601 msgid "Plugins catalog could not be loaded" msgstr "" -#: netbox/core/views.py:712 +#: netbox/core/views.py:635 #, 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:1531 -#: 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:1553 +#: 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:1415 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:566 netbox/dcim/forms/bulk_import.py:833 -#: netbox/dcim/forms/bulk_import.py:1088 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:1062 -#: netbox/dcim/forms/model_forms.py:1502 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: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 @@ -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:1303 +#: netbox/dcim/choices.py:1307 msgid "Passive" msgstr "" @@ -2669,9 +3114,9 @@ msgid "Proprietary" msgstr "" #: netbox/dcim/choices.py:581 netbox/dcim/choices.py:824 -#: netbox/dcim/choices.py:1219 netbox/dcim/choices.py:1221 -#: netbox/dcim/choices.py:1447 netbox/dcim/choices.py:1449 -#: netbox/netbox/navigation/menu.py:200 +#: netbox/dcim/choices.py:1221 netbox/dcim/choices.py:1223 +#: netbox/dcim/choices.py:1451 netbox/dcim/choices.py:1453 +#: netbox/netbox/navigation/menu.py:208 msgid "Other" msgstr "" @@ -2683,184 +3128,170 @@ msgstr "" msgid "Physical" msgstr "" -#: netbox/dcim/choices.py:855 netbox/dcim/choices.py:1023 +#: netbox/dcim/choices.py:855 netbox/dcim/choices.py:1024 msgid "Virtual" msgstr "" -#: netbox/dcim/choices.py:856 netbox/dcim/choices.py:1097 -#: netbox/dcim/forms/bulk_edit.py:1558 netbox/dcim/forms/filtersets.py:1330 -#: netbox/dcim/forms/model_forms.py:988 netbox/dcim/forms/model_forms.py:1397 -#: netbox/netbox/navigation/menu.py:140 netbox/netbox/navigation/menu.py:144 -#: netbox/templates/dcim/interface.html:210 +#: netbox/dcim/choices.py:856 netbox/dcim/choices.py:1099 +#: 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 "" -#: netbox/dcim/choices.py:1021 +#: netbox/dcim/choices.py:1022 msgid "Virtual interfaces" msgstr "" -#: netbox/dcim/choices.py:1024 netbox/dcim/forms/bulk_edit.py:1423 -#: netbox/dcim/forms/bulk_import.py:840 netbox/dcim/forms/model_forms.py:974 -#: 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 "" -#: netbox/dcim/choices.py:1025 +#: netbox/dcim/choices.py:1026 msgid "Link Aggregation Group (LAG)" msgstr "" -#: netbox/dcim/choices.py:1029 +#: netbox/dcim/choices.py:1030 msgid "Ethernet (fixed)" msgstr "" -#: netbox/dcim/choices.py:1044 +#: netbox/dcim/choices.py:1046 msgid "Ethernet (modular)" msgstr "" -#: netbox/dcim/choices.py:1081 +#: netbox/dcim/choices.py:1083 msgid "Ethernet (backplane)" msgstr "" -#: netbox/dcim/choices.py:1113 +#: netbox/dcim/choices.py:1115 msgid "Cellular" msgstr "" -#: netbox/dcim/choices.py:1165 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 "" -#: netbox/dcim/choices.py:1180 +#: netbox/dcim/choices.py:1182 msgid "Coaxial" msgstr "" -#: netbox/dcim/choices.py:1200 +#: netbox/dcim/choices.py:1202 msgid "Stacking" msgstr "" -#: netbox/dcim/choices.py:1250 +#: netbox/dcim/choices.py:1252 msgid "Half" msgstr "" -#: netbox/dcim/choices.py:1251 +#: netbox/dcim/choices.py:1253 msgid "Full" msgstr "" -#: netbox/dcim/choices.py:1252 netbox/netbox/preferences.py:31 +#: netbox/dcim/choices.py:1254 netbox/netbox/preferences.py:31 #: netbox/wireless/choices.py:480 msgid "Auto" msgstr "" -#: netbox/dcim/choices.py:1263 +#: netbox/dcim/choices.py:1266 msgid "Access" msgstr "" -#: netbox/dcim/choices.py:1264 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:1265 +#: netbox/dcim/choices.py:1268 msgid "Tagged (All)" msgstr "" -#: netbox/dcim/choices.py:1294 +#: 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:1305 +#: netbox/dcim/choices.py:1309 msgid "Passive 24V (2-pair)" msgstr "" -#: netbox/dcim/choices.py:1306 +#: netbox/dcim/choices.py:1310 msgid "Passive 24V (4-pair)" msgstr "" -#: netbox/dcim/choices.py:1307 +#: netbox/dcim/choices.py:1311 msgid "Passive 48V (2-pair)" msgstr "" -#: netbox/dcim/choices.py:1308 +#: netbox/dcim/choices.py:1312 msgid "Passive 48V (4-pair)" msgstr "" -#: netbox/dcim/choices.py:1378 netbox/dcim/choices.py:1488 +#: netbox/dcim/choices.py:1382 netbox/dcim/choices.py:1492 msgid "Copper" msgstr "" -#: netbox/dcim/choices.py:1401 +#: netbox/dcim/choices.py:1405 msgid "Fiber Optic" msgstr "" -#: netbox/dcim/choices.py:1434 netbox/dcim/choices.py:1517 +#: netbox/dcim/choices.py:1438 netbox/dcim/choices.py:1521 msgid "USB" msgstr "" -#: netbox/dcim/choices.py:1504 +#: netbox/dcim/choices.py:1508 msgid "Fiber" msgstr "" -#: netbox/dcim/choices.py:1529 netbox/dcim/forms/filtersets.py:1227 +#: netbox/dcim/choices.py:1533 netbox/dcim/forms/filtersets.py:1228 msgid "Connected" msgstr "" -#: netbox/dcim/choices.py:1548 netbox/wireless/choices.py:497 +#: netbox/dcim/choices.py:1552 netbox/netbox/choices.py:175 msgid "Kilometers" msgstr "" -#: netbox/dcim/choices.py:1549 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:1550 +#: netbox/dcim/choices.py:1554 msgid "Centimeters" msgstr "" -#: netbox/dcim/choices.py:1551 netbox/wireless/choices.py:499 +#: netbox/dcim/choices.py:1555 netbox/netbox/choices.py:177 msgid "Miles" msgstr "" -#: netbox/dcim/choices.py:1552 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:1568 netbox/templates/dcim/device.html:327 -#: netbox/templates/dcim/rack.html:107 -msgid "Kilograms" -msgstr "" - -#: netbox/dcim/choices.py:1569 -msgid "Grams" -msgstr "" - -#: netbox/dcim/choices.py:1570 netbox/templates/dcim/device.html:328 -#: netbox/templates/dcim/rack.html:108 -msgid "Pounds" -msgstr "" - -#: netbox/dcim/choices.py:1571 -msgid "Ounces" -msgstr "" - -#: netbox/dcim/choices.py:1618 +#: netbox/dcim/choices.py:1604 msgid "Redundant" msgstr "" -#: netbox/dcim/choices.py:1639 +#: netbox/dcim/choices.py:1625 msgid "Single phase" msgstr "" -#: netbox/dcim/choices.py:1640 +#: 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:841 netbox/ipam/filtersets.py:993 +#: 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:381 netbox/ipam/filtersets.py:493 -#: netbox/ipam/filtersets.py:1003 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:387 -#: netbox/ipam/filtersets.py:499 netbox/ipam/filtersets.py:1009 -#: 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:517 +#: 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:1500 netbox/dcim/models/devices.py:1521 +#: 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:632 -#: 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:611 netbox/ipam/filtersets.py:851 -#: netbox/ipam/filtersets.py:1115 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:606 -#: netbox/ipam/filtersets.py:846 netbox/ipam/filtersets.py:1121 -#: 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:1526 -#: netbox/dcim/forms/bulk_import.py:891 netbox/dcim/forms/filtersets.py:1428 -#: netbox/dcim/forms/model_forms.py:1378 -#: 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/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:431 -#: netbox/ipam/forms/model_forms.py:445 netbox/ipam/forms/model_forms.py:459 -#: 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: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 "" -#: 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: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:1030 +#: 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:1036 -#: 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:373 +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:1690 +#: 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:311 +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:353 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,112 +3874,113 @@ 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:496 -#: netbox/dcim/forms/bulk_edit.py:560 netbox/dcim/forms/bulk_edit.py:633 -#: netbox/dcim/forms/bulk_edit.py:657 netbox/dcim/forms/bulk_edit.py:750 -#: netbox/dcim/forms/bulk_edit.py:1277 netbox/dcim/forms/bulk_edit.py:1698 -#: netbox/dcim/forms/bulk_import.py:182 netbox/dcim/forms/bulk_import.py:371 -#: netbox/dcim/forms/bulk_import.py:405 netbox/dcim/forms/bulk_import.py:450 -#: netbox/dcim/forms/bulk_import.py:486 netbox/dcim/forms/bulk_import.py:1082 -#: 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:1075 -#: netbox/dcim/forms/model_forms.py:1515 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/racks.py:58 -#: netbox/dcim/tables/racks.py:132 netbox/templates/dcim/devicetype.html:14 -#: netbox/templates/dcim/inventoryitem.html:44 +#: 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: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 +#: 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:373 -#: netbox/dcim/forms/bulk_import.py:191 netbox/dcim/forms/bulk_import.py:263 -#: 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:378 -#: netbox/dcim/forms/bulk_import.py:199 netbox/dcim/forms/bulk_import.py:266 -#: 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:384 +#: 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:389 -#: 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:392 +#: 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:397 +#: 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:402 -#: netbox/dcim/forms/bulk_import.py:204 netbox/dcim/forms/bulk_import.py:271 +#: 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:407 +#: 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:417 netbox/dcim/forms/bulk_edit.py:447 -#: netbox/dcim/forms/bulk_edit.py:530 netbox/dcim/forms/bulk_edit.py:553 -#: netbox/dcim/forms/bulk_edit.py:574 netbox/dcim/forms/bulk_edit.py:596 -#: netbox/dcim/forms/bulk_import.py:384 netbox/dcim/forms/bulk_import.py:416 -#: 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 +#: 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 @@ -3511,124 +3989,86 @@ msgstr "" msgid "Weight" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:278 netbox/dcim/forms/bulk_edit.py:422 -#: 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:427 -#: netbox/dcim/forms/bulk_edit.py:535 netbox/dcim/forms/bulk_edit.py:579 -#: netbox/dcim/forms/bulk_import.py:210 netbox/dcim/forms/bulk_import.py:283 -#: netbox/dcim/forms/bulk_import.py:389 netbox/dcim/forms/bulk_import.py:421 -#: 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:1272 -#: netbox/dcim/forms/bulk_edit.py:1693 netbox/dcim/forms/bulk_import.py:253 -#: netbox/dcim/forms/bulk_import.py:1076 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:1070 -#: netbox/dcim/forms/model_forms.py:1510 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:455 -#: 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:643 -#: 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" +#: 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:365 netbox/dcim/forms/bulk_edit.py:713 -#: netbox/dcim/forms/bulk_edit.py:774 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:368 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:412 netbox/dcim/forms/bulk_edit.py:525 -#: netbox/dcim/forms/bulk_edit.py:569 netbox/dcim/forms/bulk_edit.py:706 -#: netbox/dcim/forms/bulk_import.py:277 netbox/dcim/forms/bulk_import.py:410 -#: netbox/dcim/forms/bulk_import.py:580 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:441 netbox/dcim/forms/bulk_edit.py:920 -#: netbox/dcim/forms/bulk_import.py:322 netbox/dcim/forms/bulk_import.py:325 -#: netbox/dcim/forms/bulk_import.py:553 netbox/dcim/forms/bulk_import.py:1358 -#: netbox/dcim/forms/bulk_import.py:1362 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:400 -#: 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 @@ -3639,208 +4079,142 @@ msgstr "" msgid "Rack" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:445 netbox/dcim/forms/bulk_edit.py:739 -#: 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:1580 +#: 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:501 netbox/dcim/forms/bulk_import.py:377 -#: 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:506 netbox/dcim/forms/bulk_edit.py:565 -#: 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:510 +#: netbox/dcim/forms/bulk_edit.py:518 msgid "U height" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:522 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:551 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:593 netbox/dcim/forms/model_forms.py:401 -#: netbox/dcim/tables/modules.py:17 netbox/dcim/tables/modules.py:65 +#: 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:597 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:611 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:614 netbox/dcim/forms/bulk_edit.py:638 -#: netbox/dcim/forms/bulk_edit.py:721 netbox/dcim/forms/bulk_import.py:434 -#: netbox/dcim/forms/bulk_import.py:438 netbox/dcim/forms/bulk_import.py:457 -#: netbox/dcim/forms/bulk_import.py:461 netbox/dcim/forms/bulk_import.py:586 -#: netbox/dcim/forms/bulk_import.py:590 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:662 netbox/dcim/forms/bulk_edit.py:1071 -#: netbox/dcim/forms/bulk_import.py:492 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:673 netbox/dcim/forms/bulk_import.py:473 -#: 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:696 netbox/dcim/forms/bulk_import.py:498 -#: 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:210 +#: netbox/virtualization/tables/virtualmachines.py:49 msgid "Platform" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:726 netbox/dcim/forms/bulk_import.py:517 -#: 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:78 +#: netbox/virtualization/forms/model_forms.py:183 +#: netbox/virtualization/tables/virtualmachines.py:37 msgid "Cluster" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:737 netbox/dcim/forms/bulk_edit.py:1291 -#: netbox/dcim/forms/bulk_edit.py:1688 netbox/dcim/forms/bulk_edit.py:1734 -#: netbox/dcim/forms/bulk_import.py:641 netbox/dcim/forms/bulk_import.py:703 -#: netbox/dcim/forms/bulk_import.py:729 netbox/dcim/forms/bulk_import.py:755 -#: netbox/dcim/forms/bulk_import.py:775 netbox/dcim/forms/bulk_import.py:828 -#: netbox/dcim/forms/bulk_import.py:946 netbox/dcim/forms/bulk_import.py:994 -#: netbox/dcim/forms/bulk_import.py:1011 netbox/dcim/forms/bulk_import.py:1023 -#: netbox/dcim/forms/bulk_import.py:1071 netbox/dcim/forms/bulk_import.py:1422 -#: 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:1208 -#: netbox/dcim/forms/model_forms.py:1664 netbox/dcim/forms/object_create.py:257 -#: netbox/dcim/tables/connections.py:22 netbox/dcim/tables/connections.py:41 -#: netbox/dcim/tables/connections.py:60 netbox/dcim/tables/devices.py: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:52 -#: netbox/extras/forms/filtersets.py:321 netbox/ipam/forms/bulk_import.py:304 -#: netbox/ipam/forms/bulk_import.py:481 netbox/ipam/forms/filtersets.py:551 -#: netbox/ipam/forms/model_forms.py:319 netbox/ipam/forms/model_forms.py:679 -#: netbox/ipam/forms/model_forms.py:712 netbox/ipam/forms/model_forms.py:738 -#: 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:44 -#: netbox/vpn/forms/bulk_import.py:86 netbox/vpn/forms/bulk_import.py:283 -#: netbox/vpn/forms/filtersets.py:275 netbox/vpn/forms/model_forms.py:90 -#: netbox/vpn/forms/model_forms.py:125 netbox/vpn/forms/model_forms.py:236 -#: netbox/vpn/forms/model_forms.py:453 netbox/wireless/forms/model_forms.py:99 -#: netbox/wireless/forms/model_forms.py:141 -#: netbox/wireless/tables/wirelesslan.py:75 -msgid "Device" -msgstr "" - -#: netbox/dcim/forms/bulk_edit.py:740 +#: 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:741 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:755 netbox/dcim/forms/bulk_import.py:653 -#: 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:809 netbox/dcim/forms/bulk_edit.py:994 -#: netbox/dcim/forms/bulk_edit.py:1013 netbox/dcim/forms/bulk_edit.py:1036 -#: netbox/dcim/forms/bulk_edit.py:1078 netbox/dcim/forms/bulk_edit.py:1122 -#: netbox/dcim/forms/bulk_edit.py:1173 netbox/dcim/forms/bulk_edit.py:1200 -#: netbox/dcim/forms/bulk_edit.py:1227 netbox/dcim/forms/bulk_edit.py:1245 -#: netbox/dcim/forms/bulk_edit.py:1263 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 @@ -3858,107 +4232,107 @@ msgstr "" msgid "Label" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:818 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:823 netbox/dcim/forms/bulk_import.py:1226 -#: netbox/dcim/forms/bulk_import.py:1229 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:847 +#: netbox/dcim/forms/bulk_edit.py:855 #: netbox/templates/dcim/virtualchassis.html:23 msgid "Domain" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:915 netbox/dcim/forms/bulk_import.py:1345 -#: 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:937 netbox/dcim/forms/bulk_import.py:1381 -#: 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:943 netbox/dcim/forms/bulk_import.py:1386 -#: 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:949 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:953 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:957 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:1046 +#: netbox/dcim/forms/bulk_edit.py:1054 msgid "Maximum draw" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:1049 -#: 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:1052 +#: netbox/dcim/forms/bulk_edit.py:1060 msgid "Allocated draw" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:1055 -#: 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:1088 netbox/dcim/forms/bulk_import.py:786 -#: netbox/dcim/forms/model_forms.py:953 netbox/dcim/forms/model_forms.py:1278 -#: netbox/dcim/forms/model_forms.py:1567 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:1093 netbox/dcim/forms/bulk_import.py:793 +#: netbox/dcim/forms/bulk_edit.py:1101 netbox/dcim/forms/bulk_import.py:820 msgid "Feed leg" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:1139 netbox/dcim/forms/bulk_edit.py:1457 +#: netbox/dcim/forms/bulk_edit.py:1147 netbox/dcim/forms/bulk_edit.py:1465 msgid "Management only" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:1149 netbox/dcim/forms/bulk_edit.py:1463 -#: netbox/dcim/forms/bulk_import.py:876 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:1155 netbox/dcim/forms/bulk_edit.py:1469 -#: netbox/dcim/forms/bulk_import.py:882 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:1161 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:1298 netbox/dcim/forms/model_forms.py:669 -#: netbox/dcim/forms/model_forms.py:1223 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 @@ -3971,31 +4345,31 @@ msgstr "" msgid "Module" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:1437 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:1442 netbox/dcim/forms/model_forms.py:1305 +#: 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:1448 netbox/dcim/forms/bulk_import.py:714 -#: netbox/dcim/forms/bulk_import.py:740 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:1477 netbox/dcim/forms/bulk_import.py:885 +#: 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 @@ -4004,582 +4378,636 @@ msgstr "" msgid "Mode" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:1485 netbox/dcim/forms/model_forms.py:1354 -#: 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 "" -#: netbox/dcim/forms/bulk_edit.py:1494 netbox/dcim/forms/model_forms.py:1360 -#: 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:340 msgid "Untagged VLAN" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:1503 netbox/dcim/forms/model_forms.py:1369 -#: 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:349 msgid "Tagged VLANs" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:1506 +#: netbox/dcim/forms/bulk_edit.py:1514 msgid "Add tagged VLANs" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:1515 +#: netbox/dcim/forms/bulk_edit.py:1523 msgid "Remove tagged VLANs" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:1531 netbox/dcim/forms/model_forms.py:1341 +#: 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 "" + +#: 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:1536 netbox/dcim/forms/model_forms.py:1346 -#: 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:1545 netbox/dcim/forms/filtersets.py:1328 -#: netbox/dcim/forms/model_forms.py:1390 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:1546 netbox/dcim/forms/filtersets.py:720 -#: netbox/dcim/forms/model_forms.py:1391 -#: 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:1547 netbox/dcim/forms/filtersets.py:1329 -#: netbox/dcim/forms/model_forms.py:987 netbox/dcim/forms/model_forms.py:1393 +#: 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:1548 netbox/dcim/forms/model_forms.py:1392 -#: 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:380 msgid "Related Interfaces" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:1549 netbox/dcim/forms/model_forms.py:1394 -#: 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:383 msgid "802.1Q Switching" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:1553 +#: netbox/dcim/forms/bulk_edit.py:1571 msgid "Add/Remove" msgstr "" -#: netbox/dcim/forms/bulk_edit.py:1612 netbox/dcim/forms/bulk_edit.py:1614 +#: 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:1619 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:543 -#: netbox/dcim/forms/bulk_import.py:1342 netbox/ipam/forms/bulk_import.py:175 -#: netbox/ipam/forms/bulk_import.py:433 -#: 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:268 +#: 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:274 +#: 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:286 +#: 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:280 netbox/dcim/forms/bulk_import.py:413 -#: netbox/dcim/forms/bulk_import.py:583 +#: netbox/dcim/forms/bulk_import.py:266 +msgid "Rack type model" +msgstr "" + +#: 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:312 +#: 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:328 +msgid "U height must be set if not specifying a rack type." +msgstr "" + +#: netbox/dcim/forms/bulk_import.py:336 msgid "Parent site" msgstr "" -#: netbox/dcim/forms/bulk_import.py:319 netbox/dcim/forms/bulk_import.py:1355 +#: 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:328 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:331 +#: netbox/dcim/forms/bulk_import.py:355 msgid "Comma-separated list of individual unit numbers" msgstr "" -#: netbox/dcim/forms/bulk_import.py:374 +#: netbox/dcim/forms/bulk_import.py:398 msgid "The manufacturer which produces this device type" msgstr "" -#: netbox/dcim/forms/bulk_import.py:381 +#: netbox/dcim/forms/bulk_import.py:405 msgid "The default platform for devices of this type (optional)" msgstr "" -#: netbox/dcim/forms/bulk_import.py:386 +#: netbox/dcim/forms/bulk_import.py:410 msgid "Device weight" msgstr "" -#: netbox/dcim/forms/bulk_import.py:392 +#: netbox/dcim/forms/bulk_import.py:416 msgid "Unit for device weight" msgstr "" -#: netbox/dcim/forms/bulk_import.py:418 +#: netbox/dcim/forms/bulk_import.py:442 msgid "Module weight" msgstr "" -#: netbox/dcim/forms/bulk_import.py:424 +#: netbox/dcim/forms/bulk_import.py:448 msgid "Unit for module weight" msgstr "" -#: netbox/dcim/forms/bulk_import.py:454 +#: netbox/dcim/forms/bulk_import.py:481 msgid "Limit platform assignments to this manufacturer" msgstr "" -#: netbox/dcim/forms/bulk_import.py:476 netbox/dcim/forms/bulk_import.py:1425 +#: 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:489 +#: netbox/dcim/forms/bulk_import.py:516 msgid "Device type manufacturer" msgstr "" -#: netbox/dcim/forms/bulk_import.py:495 +#: netbox/dcim/forms/bulk_import.py:522 msgid "Device type model" msgstr "" -#: netbox/dcim/forms/bulk_import.py:502 -#: 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:510 netbox/dcim/forms/bulk_import.py:514 -#: 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:521 +#: netbox/dcim/forms/bulk_import.py:548 msgid "Virtualization cluster" msgstr "" -#: netbox/dcim/forms/bulk_import.py:550 +#: netbox/dcim/forms/bulk_import.py:577 msgid "Assigned location (if any)" msgstr "" -#: netbox/dcim/forms/bulk_import.py:557 +#: netbox/dcim/forms/bulk_import.py:584 msgid "Assigned rack (if any)" msgstr "" -#: netbox/dcim/forms/bulk_import.py:560 +#: netbox/dcim/forms/bulk_import.py:587 msgid "Face" msgstr "" -#: netbox/dcim/forms/bulk_import.py:563 +#: netbox/dcim/forms/bulk_import.py:590 msgid "Mounted rack face" msgstr "" -#: netbox/dcim/forms/bulk_import.py:570 +#: netbox/dcim/forms/bulk_import.py:597 msgid "Parent device (for child devices)" msgstr "" -#: netbox/dcim/forms/bulk_import.py:573 +#: netbox/dcim/forms/bulk_import.py:600 msgid "Device bay" msgstr "" -#: netbox/dcim/forms/bulk_import.py:577 +#: 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:644 +#: netbox/dcim/forms/bulk_import.py:671 msgid "The device in which this module is installed" msgstr "" -#: netbox/dcim/forms/bulk_import.py:647 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:650 +#: netbox/dcim/forms/bulk_import.py:677 msgid "The module bay in which this module is installed" msgstr "" -#: netbox/dcim/forms/bulk_import.py:656 +#: netbox/dcim/forms/bulk_import.py:683 msgid "The type of module" msgstr "" -#: netbox/dcim/forms/bulk_import.py:664 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:666 +#: 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:669 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:671 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:711 netbox/dcim/forms/bulk_import.py:737 -#: netbox/dcim/forms/bulk_import.py:763 +#: 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:719 netbox/dcim/forms/bulk_import.py:745 +#: 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:783 +#: netbox/dcim/forms/bulk_import.py:810 msgid "Outlet type" msgstr "" -#: netbox/dcim/forms/bulk_import.py:790 +#: netbox/dcim/forms/bulk_import.py:817 msgid "Local power port which feeds this outlet" msgstr "" -#: netbox/dcim/forms/bulk_import.py:796 +#: netbox/dcim/forms/bulk_import.py:823 msgid "Electrical phase (for three-phase circuits)" msgstr "" -#: netbox/dcim/forms/bulk_import.py:837 netbox/dcim/forms/model_forms.py:1316 -#: 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:844 netbox/dcim/forms/model_forms.py:1324 -#: 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:847 +#: netbox/dcim/forms/bulk_import.py:877 msgid "Lag" msgstr "" -#: netbox/dcim/forms/bulk_import.py:851 +#: netbox/dcim/forms/bulk_import.py:881 msgid "Parent LAG interface" msgstr "" -#: netbox/dcim/forms/bulk_import.py:854 +#: netbox/dcim/forms/bulk_import.py:884 msgid "Vdcs" msgstr "" -#: netbox/dcim/forms/bulk_import.py:859 +#: 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:865 +#: netbox/dcim/forms/bulk_import.py:895 msgid "Physical medium" msgstr "" -#: netbox/dcim/forms/bulk_import.py:868 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:873 +#: netbox/dcim/forms/bulk_import.py:903 msgid "Poe mode" msgstr "" -#: netbox/dcim/forms/bulk_import.py:879 +#: netbox/dcim/forms/bulk_import.py:909 msgid "Poe type" msgstr "" -#: netbox/dcim/forms/bulk_import.py:888 -#: 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:895 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:898 +#: netbox/dcim/forms/bulk_import.py:928 msgid "Rf role" msgstr "" -#: netbox/dcim/forms/bulk_import.py:901 +#: netbox/dcim/forms/bulk_import.py:931 msgid "Wireless role (AP/station)" msgstr "" -#: netbox/dcim/forms/bulk_import.py:937 +#: 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:951 netbox/dcim/forms/model_forms.py:1000 -#: netbox/dcim/forms/model_forms.py:1575 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:954 +#: netbox/dcim/forms/bulk_import.py:984 msgid "Corresponding rear port" msgstr "" -#: netbox/dcim/forms/bulk_import.py:959 netbox/dcim/forms/bulk_import.py:1000 -#: netbox/dcim/forms/bulk_import.py:1216 +#: 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:1028 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:1032 +#: netbox/dcim/forms/bulk_import.py:1062 msgid "Child device installed within this bay" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1034 +#: netbox/dcim/forms/bulk_import.py:1064 msgid "Child device not found." msgstr "" -#: netbox/dcim/forms/bulk_import.py:1092 +#: netbox/dcim/forms/bulk_import.py:1122 msgid "Parent inventory item" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1095 +#: netbox/dcim/forms/bulk_import.py:1125 msgid "Component type" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1099 +#: netbox/dcim/forms/bulk_import.py:1129 msgid "Component Type" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1102 +#: netbox/dcim/forms/bulk_import.py:1132 msgid "Compnent name" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1104 +#: netbox/dcim/forms/bulk_import.py:1134 msgid "Component Name" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1146 +#: netbox/dcim/forms/bulk_import.py:1181 #, python-brace-format msgid "Component not found: {device} - {component_name}" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1171 +#: 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: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 "" + +#: 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:1174 netbox/dcim/forms/bulk_import.py:1192 +#: netbox/dcim/forms/bulk_import.py:1293 netbox/dcim/forms/bulk_import.py:1311 msgid "Device name" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1177 +#: netbox/dcim/forms/bulk_import.py:1296 msgid "Side A type" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1180 netbox/dcim/forms/bulk_import.py:1198 -msgid "Termination type" -msgstr "" - -#: netbox/dcim/forms/bulk_import.py:1183 +#: netbox/dcim/forms/bulk_import.py:1302 msgid "Side A name" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1184 netbox/dcim/forms/bulk_import.py:1202 +#: netbox/dcim/forms/bulk_import.py:1303 netbox/dcim/forms/bulk_import.py:1321 msgid "Termination name" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1189 +#: netbox/dcim/forms/bulk_import.py:1308 msgid "Side B device" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1195 +#: netbox/dcim/forms/bulk_import.py:1314 msgid "Side B type" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1201 +#: netbox/dcim/forms/bulk_import.py:1320 msgid "Side B name" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1210 -#: 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:1262 +#: 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:1268 +#: 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:1293 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:1297 +#: netbox/dcim/forms/bulk_import.py:1416 msgid "Master device" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1314 +#: netbox/dcim/forms/bulk_import.py:1433 msgid "Name of parent site" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1348 +#: netbox/dcim/forms/bulk_import.py:1467 msgid "Upstream power panel" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1378 +#: netbox/dcim/forms/bulk_import.py:1497 msgid "Primary or redundant" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1383 +#: netbox/dcim/forms/bulk_import.py:1502 msgid "Supply type (AC/DC)" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1388 +#: netbox/dcim/forms/bulk_import.py:1507 msgid "Single or three-phase" msgstr "" -#: netbox/dcim/forms/bulk_import.py:1439 netbox/dcim/forms/model_forms.py:1670 +#: 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:1443 +#: 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:1446 netbox/dcim/forms/model_forms.py:1679 +#: 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:1450 +#: 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 @@ -4588,139 +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:380 -msgid "Rack type" -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:1383 -#: 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 @@ -4730,125 +5152,146 @@ 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: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." 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:1087 +#: netbox/dcim/forms/model_forms.py:926 +#, python-brace-format +msgid "" +"Alphanumeric ranges are supported for bulk creation. Mixed cases and types " +"within a single range are not supported (example: [ge,xe]-0/0/[0-9]). The token {module}, if present, will be automatically " +"replaced with the position value when creating a new module." +msgstr "" + +#: netbox/dcim/forms/model_forms.py:1107 msgid "Console port template" msgstr "" -#: netbox/dcim/forms/model_forms.py:1095 +#: netbox/dcim/forms/model_forms.py:1115 msgid "Console server port template" msgstr "" -#: netbox/dcim/forms/model_forms.py:1103 +#: netbox/dcim/forms/model_forms.py:1123 msgid "Front port template" msgstr "" -#: netbox/dcim/forms/model_forms.py:1111 +#: netbox/dcim/forms/model_forms.py:1131 msgid "Interface template" msgstr "" -#: netbox/dcim/forms/model_forms.py:1119 +#: netbox/dcim/forms/model_forms.py:1139 msgid "Power outlet template" msgstr "" -#: netbox/dcim/forms/model_forms.py:1127 +#: netbox/dcim/forms/model_forms.py:1147 msgid "Power port template" msgstr "" -#: netbox/dcim/forms/model_forms.py:1135 +#: netbox/dcim/forms/model_forms.py:1155 msgid "Rear port template" msgstr "" -#: netbox/dcim/forms/model_forms.py:1144 netbox/dcim/forms/model_forms.py:1388 -#: netbox/dcim/forms/model_forms.py:1551 netbox/dcim/forms/model_forms.py:1583 -#: 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:1145 netbox/dcim/forms/model_forms.py:1584 +#: 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 @@ -4856,104 +5299,130 @@ msgstr "" msgid "Console Port" msgstr "" -#: netbox/dcim/forms/model_forms.py:1146 netbox/dcim/forms/model_forms.py:1585 +#: 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:1147 netbox/dcim/forms/model_forms.py:1586 -#: 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:1148 netbox/dcim/forms/model_forms.py:1587 -#: 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:1149 netbox/dcim/forms/model_forms.py:1588 -#: 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:1150 netbox/dcim/forms/model_forms.py:1589 +#: 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:1152 netbox/dcim/forms/model_forms.py:1591 +#: netbox/dcim/forms/model_forms.py:1172 netbox/dcim/forms/model_forms.py:1643 msgid "Component Assignment" msgstr "" -#: netbox/dcim/forms/model_forms.py:1195 netbox/dcim/forms/model_forms.py:1638 +#: 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:1332 +#: netbox/dcim/forms/model_forms.py:1355 msgid "LAG interface" msgstr "" -#: netbox/dcim/forms/model_forms.py:1355 +#: netbox/dcim/forms/model_forms.py:1378 msgid "Filter VLANs available for assignment by group." msgstr "" -#: netbox/dcim/forms/model_forms.py:1484 +#: netbox/dcim/forms/model_forms.py:1533 msgid "Child Device" msgstr "" -#: netbox/dcim/forms/model_forms.py:1485 +#: 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:1527 +#: netbox/dcim/forms/model_forms.py:1576 msgid "Console port" msgstr "" -#: netbox/dcim/forms/model_forms.py:1535 +#: netbox/dcim/forms/model_forms.py:1584 msgid "Console server port" msgstr "" -#: netbox/dcim/forms/model_forms.py:1543 +#: netbox/dcim/forms/model_forms.py:1592 msgid "Front port" msgstr "" -#: netbox/dcim/forms/model_forms.py:1559 +#: netbox/dcim/forms/model_forms.py:1608 msgid "Power outlet" msgstr "" -#: netbox/dcim/forms/model_forms.py:1579 +#: netbox/dcim/forms/model_forms.py:1630 #: netbox/templates/dcim/inventoryitem.html:17 msgid "Inventory Item" msgstr "" -#: netbox/dcim/forms/model_forms.py:1652 +#: 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: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 "" + #: netbox/dcim/forms/object_create.py:48 netbox/dcim/forms/object_create.py:199 -#: netbox/dcim/forms/object_create.py:355 +#: netbox/dcim/forms/object_create.py:347 msgid "" "Alphanumeric ranges are supported. (Must match the number of objects being " "created.)" @@ -4967,12 +5436,12 @@ msgid "" msgstr "" #: netbox/dcim/forms/object_create.py:110 -#: netbox/dcim/forms/object_create.py:271 netbox/dcim/tables/devices.py:252 +#: netbox/dcim/forms/object_create.py:263 netbox/dcim/tables/devices.py:262 msgid "Rear ports" msgstr "" #: netbox/dcim/forms/object_create.py:111 -#: netbox/dcim/forms/object_create.py:272 +#: netbox/dcim/forms/object_create.py:264 msgid "Select one rear port assignment for each front port being created." msgstr "" @@ -4983,44 +5452,37 @@ msgid "" "match the selected number of rear port positions ({rearport_count})." msgstr "" -#: netbox/dcim/forms/object_create.py:251 -#, python-brace-format -msgid "" -"The string {module} will be replaced with the position of the " -"assigned module, if any." -msgstr "" - -#: netbox/dcim/forms/object_create.py:320 +#: netbox/dcim/forms/object_create.py:312 #, python-brace-format msgid "" "The number of front ports to be created ({frontport_count}) must match the " "selected number of rear port positions ({rearport_count})." msgstr "" -#: netbox/dcim/forms/object_create.py:409 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 msgid "Members" msgstr "" -#: netbox/dcim/forms/object_create.py:418 +#: netbox/dcim/forms/object_create.py:410 msgid "Initial position" msgstr "" -#: netbox/dcim/forms/object_create.py:421 +#: netbox/dcim/forms/object_create.py:413 msgid "" "Position of the first member device. Increases by one for each additional " "member." msgstr "" -#: netbox/dcim/forms/object_create.py:435 +#: 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 "" @@ -5033,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 "" @@ -5117,1005 +5579,1036 @@ 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/devices.py:1224 +#: netbox/dcim/models/device_components.py:1178 +#: netbox/dcim/models/devices.py:1225 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: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: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:606 netbox/dcim/models/devices.py:1192 +#: 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: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 "" -#: 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 "" -#: 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: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:1193 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:1415 -#: netbox/virtualization/models/virtualmachines.py:100 +#: 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:678 netbox/dcim/models/devices.py:1423 -#: netbox/virtualization/models/virtualmachines.py:108 +#: 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:686 +#: netbox/dcim/models/devices.py:679 msgid "out-of-band IP" msgstr "" -#: 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 "" -#: 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:825 #, python-brace-format msgid "Rack {rack} does not belong to site {site}." msgstr "" -#: netbox/dcim/models/devices.py:840 +#: netbox/dcim/models/devices.py:830 #, python-brace-format msgid "Location {location} does not belong to site {site}." msgstr "" -#: netbox/dcim/models/devices.py:846 +#: netbox/dcim/models/devices.py:836 #, python-brace-format msgid "Rack {rack} does not belong to location {location}." msgstr "" -#: netbox/dcim/models/devices.py:853 +#: netbox/dcim/models/devices.py:843 msgid "Cannot select a rack face without assigning a rack." msgstr "" -#: netbox/dcim/models/devices.py:857 +#: netbox/dcim/models/devices.py:847 msgid "Cannot select a rack position without assigning a rack." msgstr "" -#: netbox/dcim/models/devices.py:863 +#: netbox/dcim/models/devices.py:853 msgid "Position must be in increments of 0.5 rack units." msgstr "" -#: netbox/dcim/models/devices.py:867 +#: netbox/dcim/models/devices.py:857 msgid "Must specify rack face when defining rack position." msgstr "" -#: netbox/dcim/models/devices.py:875 +#: 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:886 +#: 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:893 +#: 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:907 +#: 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:922 +#: netbox/dcim/models/devices.py:912 #, 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: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:937 +#: netbox/dcim/models/devices.py:930 #, python-brace-format msgid "{ip} is not an IPv6 address." msgstr "" -#: netbox/dcim/models/devices.py:964 +#: 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:975 +#: 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:983 +#: 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:986 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: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:1196 +#: netbox/dcim/models/devices.py:1200 msgid "module" msgstr "" -#: netbox/dcim/models/devices.py:1197 +#: 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:1334 +#: netbox/dcim/models/devices.py:1341 msgid "domain" msgstr "" -#: netbox/dcim/models/devices.py:1347 netbox/dcim/models/devices.py:1348 +#: netbox/dcim/models/devices.py:1354 netbox/dcim/models/devices.py:1355 msgid "virtual chassis" msgstr "" -#: netbox/dcim/models/devices.py:1363 +#: 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:1379 +#: 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:1404 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:1405 +#: netbox/dcim/models/devices.py:1410 msgid "Numeric identifier unique to the parent device" msgstr "" -#: netbox/dcim/models/devices.py:1433 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:115 +#: netbox/netbox/models/__init__.py:119 msgid "comments" msgstr "" -#: netbox/dcim/models/devices.py:1449 +#: netbox/dcim/models/devices.py:1454 msgid "virtual device context" msgstr "" -#: netbox/dcim/models/devices.py:1450 +#: netbox/dcim/models/devices.py:1455 msgid "virtual device contexts" msgstr "" -#: netbox/dcim/models/devices.py:1482 +#: netbox/dcim/models/devices.py:1484 #, python-brace-format msgid "{ip} is not an IPv{family} address." msgstr "" -#: netbox/dcim/models/devices.py:1488 +#: netbox/dcim/models/devices.py:1490 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:1522 +msgid "MAC addresses" msgstr "" -#: netbox/dcim/models/mixins.py:22 -msgid "weight unit" +#: 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/mixins.py:51 -msgid "Must specify a unit when setting a weight" +#: 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}." msgstr "" #: netbox/dcim/models/power.py:55 @@ -6126,104 +6619,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 "" @@ -6245,7 +6738,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 "" @@ -6257,180 +6750,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:459 -#: 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: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: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 "" -#: 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 "" -#: 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 "" -#: 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 "" -#: 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 "" @@ -6443,11 +6936,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 "" @@ -6481,23 +6974,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:206 +#: netbox/virtualization/tables/clusters.py:87 +#: 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:92 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 @@ -6507,70 +7000,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:503 netbox/ipam/forms/model_forms.py:306 -#: netbox/ipam/forms/model_forms.py:315 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: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 "" -#: 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:1042 -#: netbox/dcim/views.py:1281 netbox/dcim/views.py:1977 -#: 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: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 @@ -6580,35 +7069,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:366 netbox/wireless/tables/wirelesslan.py:55 +#: netbox/virtualization/tables/virtualmachines.py:71 +#: netbox/virtualization/views.py:383 netbox/wireless/tables/wirelesslan.py:63 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:56 +#: 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:1117 -#: netbox/dcim/views.py:2075 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: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 @@ -6617,85 +7106,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:701 -#: 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 "" @@ -6733,8 +7226,8 @@ msgstr "" msgid "Instances" msgstr "" -#: netbox/dcim/tables/devicetypes.py:116 netbox/dcim/views.py:982 -#: netbox/dcim/views.py:1221 netbox/dcim/views.py:1913 +#: 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 @@ -6744,8 +7237,8 @@ msgstr "" msgid "Console Ports" msgstr "" -#: netbox/dcim/tables/devicetypes.py:119 netbox/dcim/views.py:997 -#: netbox/dcim/views.py:1236 netbox/dcim/views.py:1929 +#: 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 @@ -6755,8 +7248,8 @@ msgstr "" msgid "Console Server Ports" msgstr "" -#: netbox/dcim/tables/devicetypes.py:122 netbox/dcim/views.py:1012 -#: netbox/dcim/views.py:1251 netbox/dcim/views.py:1945 +#: 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 @@ -6766,8 +7259,8 @@ msgstr "" msgid "Power Ports" msgstr "" -#: netbox/dcim/tables/devicetypes.py:125 netbox/dcim/views.py:1027 -#: netbox/dcim/views.py:1266 netbox/dcim/views.py:1961 +#: 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 @@ -6777,8 +7270,8 @@ msgstr "" msgid "Power Outlets" msgstr "" -#: netbox/dcim/tables/devicetypes.py:131 netbox/dcim/views.py:1057 -#: netbox/dcim/views.py:1296 netbox/dcim/views.py:1999 +#: 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 @@ -6787,8 +7280,8 @@ msgstr "" msgid "Front Ports" msgstr "" -#: netbox/dcim/tables/devicetypes.py:134 netbox/dcim/views.py:1072 -#: netbox/dcim/views.py:1311 netbox/dcim/views.py:2015 +#: 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 @@ -6798,16 +7291,16 @@ msgstr "" msgid "Rear Ports" msgstr "" -#: netbox/dcim/tables/devicetypes.py:137 netbox/dcim/views.py:1102 -#: netbox/dcim/views.py:2055 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:1087 -#: netbox/dcim/views.py:1326 netbox/dcim/views.py:2035 +#: 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 @@ -6817,7 +7310,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 "" @@ -6836,103 +7329,103 @@ 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 "" -#: netbox/dcim/views.py:140 +#: netbox/dcim/views.py:139 #, python-brace-format msgid "Disconnected {count} {type}" msgstr "" -#: netbox/dcim/views.py:740 netbox/netbox/navigation/menu.py:51 +#: netbox/dcim/views.py:826 netbox/netbox/navigation/menu.py:51 msgid "Reservations" msgstr "" -#: netbox/dcim/views.py:759 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:2088 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:225 -#: netbox/virtualization/views.py:407 +#: netbox/virtualization/forms/model_forms.py:232 +#: netbox/virtualization/views.py:424 msgid "Config Context" msgstr "" -#: netbox/dcim/views.py:2098 netbox/virtualization/views.py:417 +#: netbox/dcim/views.py:2260 netbox/virtualization/views.py:434 msgid "Render Config" msgstr "" -#: netbox/dcim/views.py:2131 netbox/virtualization/views.py:450 +#: 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:2149 netbox/extras/tables/tables.py:550 -#: netbox/netbox/navigation/menu.py:247 netbox/netbox/navigation/menu.py:249 -#: netbox/virtualization/views.py:180 +#: 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:2907 +#: netbox/dcim/views.py:3146 #, python-brace-format msgid "Installed device {device} in bay {device_bay}." msgstr "" -#: netbox/dcim/views.py:2948 +#: netbox/dcim/views.py:3187 #, 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:3303 netbox/ipam/tables/ip.py:180 msgid "Children" msgstr "" -#: netbox/dcim/views.py:3520 +#: netbox/dcim/views.py:3770 #, python-brace-format msgid "Added member {device}" msgstr "" -#: netbox/dcim/views.py:3567 +#: netbox/dcim/views.py:3819 #, python-brace-format msgid "Unable to remove master device {device} from the virtual chassis." msgstr "" -#: netbox/dcim/views.py:3580 +#: netbox/dcim/views.py:3832 #, python-brace-format msgid "Removed {device} from virtual chassis {chassis}" msgstr "" @@ -7031,7 +7524,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 "" @@ -7071,7 +7564,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 "" @@ -7079,22 +7572,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 "" @@ -7104,6 +7585,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 "" @@ -7127,67 +7609,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 "" @@ -7294,38 +7776,42 @@ 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 "" -#: netbox/extras/events.py:147 +#: netbox/extras/events.py:151 #, python-brace-format msgid "Unknown action type for an event rule: {action_type}" msgstr "" -#: netbox/extras/events.py:192 +#: netbox/extras/events.py:196 #, python-brace-format msgid "Cannot import events pipeline {name} error: {error}" msgstr "" @@ -7345,17 +7831,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 "" @@ -7585,7 +8071,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 @@ -7598,7 +8084,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 @@ -7631,7 +8118,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 "" @@ -7691,7 +8178,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 @@ -7901,26 +8388,32 @@ msgstr "" msgid "Interval at which this script is re-run (in minutes)" msgstr "" -#: netbox/extras/jobs.py:49 +#: netbox/extras/jobs.py:47 msgid "Database changes have been reverted automatically." msgstr "" -#: netbox/extras/jobs.py:55 +#: netbox/extras/jobs.py:53 msgid "Script aborted with error: " msgstr "" -#: netbox/extras/jobs.py:65 +#: netbox/extras/jobs.py:63 msgid "An exception occurred: " msgstr "" -#: netbox/extras/jobs.py:70 +#: netbox/extras/jobs.py:68 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 "" @@ -8250,27 +8743,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 " @@ -8540,20 +9033,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 "" @@ -8645,19 +9138,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 "" @@ -8858,27 +9351,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:1172 +#: netbox/extras/views.py:1244 msgid "Unable to run script: RQ worker process not running." msgstr "" @@ -8900,7 +9393,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 "" @@ -8941,182 +9434,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:281 -#: 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:221 +#: 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:227 +#: netbox/ipam/filtersets.py:168 netbox/ipam/filtersets.py:207 +#: netbox/ipam/filtersets.py:232 msgid "RIR (slug)" msgstr "" -#: netbox/ipam/filtersets.py:285 +#: netbox/ipam/filtersets.py:290 msgid "Within prefix" msgstr "" -#: netbox/ipam/filtersets.py:289 +#: netbox/ipam/filtersets.py:294 msgid "Within and including prefix" msgstr "" -#: netbox/ipam/filtersets.py:293 +#: netbox/ipam/filtersets.py:298 msgid "Prefixes which contain this prefix or IP" msgstr "" -#: netbox/ipam/filtersets.py:304 netbox/ipam/filtersets.py:572 -#: 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:373 netbox/vpn/filtersets.py:427 +#: netbox/ipam/filtersets.py:342 netbox/vpn/filtersets.py:427 msgid "VLAN (ID)" msgstr "" -#: netbox/ipam/filtersets.py:377 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:471 netbox/ipam/filtersets.py:475 -#: netbox/ipam/filtersets.py:567 netbox/ipam/forms/model_forms.py:463 +#: 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:479 +#: netbox/ipam/filtersets.py:448 msgid "Ranges which contain this prefix or IP" msgstr "" -#: netbox/ipam/filtersets.py:507 netbox/ipam/filtersets.py:563 +#: netbox/ipam/filtersets.py:476 netbox/ipam/filtersets.py:532 msgid "Parent prefix" msgstr "" -#: netbox/ipam/filtersets.py:616 netbox/ipam/filtersets.py:856 -#: netbox/ipam/filtersets.py:1131 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/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/vpn/filtersets.py:396 -msgid "Interface (name)" -msgstr "" - -#: netbox/ipam/filtersets.py:638 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 -msgid "VM interface (ID)" -msgstr "" - -#: netbox/ipam/filtersets.py:648 +#: netbox/ipam/filtersets.py:617 msgid "FHRP group (ID)" msgstr "" -#: netbox/ipam/filtersets.py:652 +#: netbox/ipam/filtersets.py:621 msgid "Is assigned to an interface" msgstr "" -#: netbox/ipam/filtersets.py:656 +#: netbox/ipam/filtersets.py:625 msgid "Is assigned" msgstr "" -#: netbox/ipam/filtersets.py:668 +#: netbox/ipam/filtersets.py:637 msgid "Service (ID)" msgstr "" -#: netbox/ipam/filtersets.py:673 +#: netbox/ipam/filtersets.py:642 msgid "NAT inside IP address (ID)" msgstr "" -#: netbox/ipam/filtersets.py:1041 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:1046 +#: 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:1136 +#: 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:1142 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:1167 +#: netbox/ipam/filtersets.py:1194 msgid "Primary IPv4 (ID)" msgstr "" -#: netbox/ipam/filtersets.py:1172 +#: netbox/ipam/filtersets.py:1199 msgid "Primary IPv6 (ID)" msgstr "" @@ -9149,439 +9634,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:586 -#: netbox/ipam/forms/model_forms.py:633 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:201 +#: 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:234 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 "" -#: 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:394 netbox/ipam/forms/bulk_import.py:469 -#: netbox/ipam/forms/bulk_import.py:495 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:474 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:575 -msgid "Scope type" -msgstr "" - -#: netbox/ipam/forms/bulk_edit.py:439 netbox/ipam/forms/bulk_edit.py:453 -#: netbox/ipam/forms/model_forms.py:578 netbox/ipam/forms/model_forms.py:588 -#: 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:659 -#: netbox/ipam/forms/model_forms.py:691 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:488 -#: netbox/ipam/forms/model_forms.py:685 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:365 +#: netbox/ipam/forms/bulk_import.py:329 +msgid "Is out-of-band" +msgstr "" + +#: 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:370 msgid "No device or virtual machine specified; cannot set as primary IP" msgstr "" -#: netbox/ipam/forms/bulk_import.py:369 +#: 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:378 +msgid "Cannot set out-of-band IP for virtual machines" +msgstr "" + +#: netbox/ipam/forms/bulk_import.py:382 msgid "No interface specified; cannot set as primary IP" msgstr "" -#: netbox/ipam/forms/bulk_import.py:398 +#: 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:421 msgid "Auth type" msgstr "" -#: netbox/ipam/forms/bulk_import.py:413 -msgid "Scope type (app & model)" -msgstr "" - -#: netbox/ipam/forms/bulk_import.py:440 +#: netbox/ipam/forms/bulk_import.py:463 msgid "Assigned VLAN group" msgstr "" -#: netbox/ipam/forms/bulk_import.py:471 netbox/ipam/forms/bulk_import.py:497 +#: 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:485 +#: netbox/ipam/forms/bulk_import.py:544 msgid "Required if not assigned to a VM" msgstr "" -#: netbox/ipam/forms/bulk_import.py:492 +#: netbox/ipam/forms/bulk_import.py:551 msgid "Required if not assigned to a device" msgstr "" -#: netbox/ipam/forms/bulk_import.py:517 +#: 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:235 -#: 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:176 +#: 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:320 -#: netbox/ipam/forms/model_forms.py:713 netbox/ipam/forms/model_forms.py:739 -#: 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:45 -#: netbox/vpn/forms/filtersets.py:293 netbox/vpn/forms/model_forms.py:160 -#: netbox/vpn/forms/model_forms.py:171 netbox/vpn/forms/model_forms.py:273 -#: netbox/vpn/forms/model_forms.py:454 -msgid "Virtual Machine" -msgstr "" - -#: 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:321 -#: netbox/ipam/forms/model_forms.py:473 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:325 +#: 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:331 msgid "NAT IP (Inside)" msgstr "" -#: netbox/ipam/forms/model_forms.py:384 +#: 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:390 netbox/ipam/models/ip.py:897 -msgid "" -"Cannot reassign IP address while it is designated as the primary IP for the " -"parent object" +#: 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:400 +#: 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:414 msgid "" "Only IP addresses assigned to an interface can be designated as primary IPs." msgstr "" -#: netbox/ipam/forms/model_forms.py:475 +#: 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:510 msgid "Virtual IP Address" msgstr "" -#: netbox/ipam/forms/model_forms.py:560 +#: netbox/ipam/forms/model_forms.py:595 msgid "Assignment already exists" msgstr "" -#: netbox/ipam/forms/model_forms.py:569 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:587 +#: netbox/ipam/forms/model_forms.py:622 msgid "Child VLANs" msgstr "" -#: netbox/ipam/forms/model_forms.py:664 netbox/ipam/forms/model_forms.py:696 +#: 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:669 +#: netbox/ipam/forms/model_forms.py:744 #: netbox/templates/ipam/servicetemplate.html:12 msgid "Service Template" msgstr "" -#: netbox/ipam/forms/model_forms.py:716 +#: netbox/ipam/forms/model_forms.py:791 msgid "Port(s)" msgstr "" -#: netbox/ipam/forms/model_forms.py:717 netbox/ipam/forms/model_forms.py:745 -#: netbox/templates/ipam/service.html:21 -msgid "Service" -msgstr "" - -#: netbox/ipam/forms/model_forms.py:730 +#: netbox/ipam/forms/model_forms.py:805 msgid "Service template" msgstr "" -#: netbox/ipam/forms/model_forms.py:742 +#: netbox/ipam/forms/model_forms.py:817 msgid "From Template" msgstr "" -#: netbox/ipam/forms/model_forms.py:743 +#: netbox/ipam/forms/model_forms.py:818 msgid "Custom" msgstr "" -#: netbox/ipam/forms/model_forms.py:773 +#: netbox/ipam/forms/model_forms.py:848 msgid "" "Must specify name, protocol, and port(s) if not using a service template." msgstr "" @@ -9598,28 +10089,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 "" @@ -9635,11 +10126,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 "" @@ -9651,165 +10142,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 "" @@ -9829,151 +10315,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:903 +#: 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: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:101 +#: 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:110 +#, python-brace-format +msgid "Ending VLAN ID in range ({value}) cannot exceed {maximum}" +msgstr "" + +#: 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:123 msgid "Ranges cannot overlap." msgstr "" -#: netbox/ipam/models/vlans.py:106 -#, python-brace-format -msgid "" -"Maximum child VID must be greater than or equal to minimum child VID " -"({value})" -msgstr "" - -#: netbox/ipam/models/vlans.py:165 +#: netbox/ipam/models/vlans.py:180 msgid "The specific site to which this VLAN is assigned (if any)" msgstr "" -#: netbox/ipam/models/vlans.py:173 +#: netbox/ipam/models/vlans.py:188 msgid "VLAN group (optional)" msgstr "" -#: netbox/ipam/models/vlans.py:181 +#: 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:199 +#: netbox/ipam/models/vlans.py:214 msgid "Operational status of this VLAN" msgstr "" -#: netbox/ipam/models/vlans.py:207 +#: netbox/ipam/models/vlans.py:222 msgid "The primary function of this VLAN" msgstr "" -#: netbox/ipam/models/vlans.py:250 +#: 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:259 +#: 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 "" @@ -9989,84 +10512,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 "" -#: 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 "" -#: netbox/ipam/tables/ip.py:388 +#: netbox/ipam/tables/ip.py:340 msgid "NAT (Outside)" msgstr "" -#: 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 "" -#: 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 "" @@ -10104,23 +10644,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 "" @@ -10166,90 +10706,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}" @@ -10532,6 +11090,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 "" @@ -10591,174 +11169,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:388 +#: 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 @@ -10767,96 +11370,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 @@ -10864,11 +11467,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 "" @@ -10886,30 +11489,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 "" @@ -10991,79 +11594,79 @@ 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 "" @@ -11097,19 +11700,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:907 -#: netbox/netbox/views/generic/bulk_views.py:955 +#: 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:789 +#: netbox/netbox/views/generic/bulk_views.py:782 #, python-brace-format msgid "Renamed {count} {object_type}" msgstr "" -#: netbox/netbox/views/generic/bulk_views.py:885 +#: netbox/netbox/views/generic/bulk_views.py:882 #, python-brace-format msgid "Deleted {count} {object_type}" msgstr "" @@ -11122,16 +11725,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 "" @@ -11141,7 +11744,7 @@ msgstr "" msgid "{class_name} must implement get_children()" msgstr "" -#: netbox/netbox/views/misc.py:44 +#: netbox/netbox/views/misc.py:46 msgid "" "There was an error loading the dashboard configuration. A default dashboard " "is in use." @@ -11203,9 +11806,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 "" @@ -11217,11 +11820,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 "" @@ -11249,6 +11852,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" @@ -11344,7 +11948,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 @@ -11431,15 +12035,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 "" @@ -11487,7 +12092,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 @@ -11502,35 +12107,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 @@ -11543,33 +12152,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 "" @@ -11581,6 +12190,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 "" @@ -11613,7 +12243,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 "" @@ -12051,8 +12681,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 "" @@ -12075,7 +12705,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" @@ -12091,7 +12721,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 "" @@ -12218,19 +12848,23 @@ msgstr "" msgid "Context Data" msgstr "" -#: netbox/templates/dcim/device/render_config.html:53 -#: netbox/templates/virtualization/virtualmachine/render_config.html:53 +#: 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:55 -#: netbox/templates/virtualization/virtualmachine/render_config.html:55 +#: 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:61 -#: netbox/templates/virtualization/virtualmachine/render_config.html:61 -msgid "No configuration template found" +#: 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 @@ -12297,12 +12931,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 "" @@ -12327,8 +12961,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" @@ -12428,76 +13062,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:395 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:55 -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 "" @@ -12517,6 +13153,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 "" @@ -12547,7 +13187,7 @@ msgctxt "Abbreviation for amperes" msgid "A" msgstr "" -#: netbox/templates/dcim/poweroutlet.html:48 +#: netbox/templates/dcim/poweroutlet.html:58 msgid "Feed Leg" msgstr "" @@ -12946,11 +13586,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 "" @@ -13373,6 +14019,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" @@ -13442,15 +14100,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 "" @@ -13547,43 +14201,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 "" @@ -13623,14 +14277,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 "" @@ -13699,7 +14369,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 "" @@ -13715,7 +14385,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 "" @@ -13724,7 +14394,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 "" @@ -13738,8 +14408,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 "" @@ -13770,21 +14440,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 "" @@ -13820,13 +14490,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 "" @@ -13835,8 +14505,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 "" @@ -13844,6 +14514,10 @@ 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" @@ -13866,7 +14540,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 "" @@ -13912,11 +14586,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 "" @@ -13942,10 +14616,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" @@ -13953,7 +14623,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 "" @@ -13976,8 +14646,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 "" @@ -14000,7 +14670,7 @@ msgctxt "Abbreviation for megahertz" msgid "MHz" msgstr "" -#: netbox/templates/wireless/wirelesslan.html:57 +#: netbox/templates/wireless/wirelesslan.html:65 msgid "Attached Interfaces" msgstr "" @@ -14009,7 +14679,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 "" @@ -14021,13 +14691,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 "" @@ -14098,47 +14761,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 "" @@ -14151,19 +14814,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 "" @@ -14373,7 +15036,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 "" @@ -14416,25 +15079,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 "" @@ -14450,18 +15113,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 " @@ -14660,12 +15323,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 "" @@ -14786,10 +15449,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 "" @@ -14820,268 +15487,279 @@ 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 -msgid "Disk (GB)" +#: netbox/virtualization/forms/bulk_edit.py:156 +msgid "Disk (MB)" msgstr "" -#: netbox/virtualization/forms/bulk_edit.py:334 -#: netbox/virtualization/forms/filtersets.py:251 -msgid "Size (GB)" +#: 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: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: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 "" -#: 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:275 +#: netbox/virtualization/views.py:291 #, python-brace-format msgid "Added {count} devices to cluster {cluster}" msgstr "" -#: netbox/virtualization/views.py:310 +#: netbox/virtualization/views.py:326 #, python-brace-format msgid "Removed {count} devices from cluster {cluster}" msgstr "" -#: netbox/vpn/choices.py:31 +#: netbox/vpn/choices.py:35 msgid "IPsec - Transport" msgstr "" -#: netbox/vpn/choices.py:32 +#: netbox/vpn/choices.py:36 msgid "IPsec - Tunnel" msgstr "" -#: netbox/vpn/choices.py:33 +#: netbox/vpn/choices.py:37 msgid "IP-in-IP" msgstr "" -#: netbox/vpn/choices.py:34 +#: netbox/vpn/choices.py:38 msgid "GRE" msgstr "" -#: netbox/vpn/choices.py:56 -msgid "Hub" +#: netbox/vpn/choices.py:39 +msgid "WireGuard" msgstr "" -#: netbox/vpn/choices.py:57 -msgid "Spoke" +#: netbox/vpn/choices.py:40 +msgid "OpenVPN" msgstr "" -#: netbox/vpn/choices.py:80 +#: netbox/vpn/choices.py:41 +msgid "L2TP" +msgstr "" + +#: netbox/vpn/choices.py:42 +msgid "PPTP" +msgstr "" + +#: netbox/vpn/choices.py:88 msgid "Aggressive" msgstr "" -#: netbox/vpn/choices.py:81 +#: netbox/vpn/choices.py:89 msgid "Main" msgstr "" -#: netbox/vpn/choices.py:92 +#: netbox/vpn/choices.py:100 msgid "Pre-shared keys" msgstr "" -#: netbox/vpn/choices.py:93 +#: netbox/vpn/choices.py:101 msgid "Certificates" msgstr "" -#: netbox/vpn/choices.py:94 +#: netbox/vpn/choices.py:102 msgid "RSA signatures" msgstr "" -#: netbox/vpn/choices.py:95 +#: netbox/vpn/choices.py:103 msgid "DSA signatures" msgstr "" -#: netbox/vpn/choices.py:178 netbox/vpn/choices.py:179 -#: netbox/vpn/choices.py:180 netbox/vpn/choices.py:181 -#: netbox/vpn/choices.py:182 netbox/vpn/choices.py:183 -#: netbox/vpn/choices.py:184 netbox/vpn/choices.py:185 #: netbox/vpn/choices.py:186 netbox/vpn/choices.py:187 #: netbox/vpn/choices.py:188 netbox/vpn/choices.py:189 #: netbox/vpn/choices.py:190 netbox/vpn/choices.py:191 @@ -15090,23 +15768,27 @@ msgstr "" #: netbox/vpn/choices.py:196 netbox/vpn/choices.py:197 #: netbox/vpn/choices.py:198 netbox/vpn/choices.py:199 #: netbox/vpn/choices.py:200 netbox/vpn/choices.py:201 +#: netbox/vpn/choices.py:202 netbox/vpn/choices.py:203 +#: netbox/vpn/choices.py:204 netbox/vpn/choices.py:205 +#: netbox/vpn/choices.py:206 netbox/vpn/choices.py:207 +#: netbox/vpn/choices.py:208 netbox/vpn/choices.py:209 #, python-brace-format msgid "Group {n}" msgstr "" -#: netbox/vpn/choices.py:243 +#: netbox/vpn/choices.py:251 msgid "Ethernet Private LAN" msgstr "" -#: netbox/vpn/choices.py:244 +#: netbox/vpn/choices.py:252 msgid "Ethernet Virtual Private LAN" msgstr "" -#: netbox/vpn/choices.py:247 +#: netbox/vpn/choices.py:255 msgid "Ethernet Private Tree" msgstr "" -#: netbox/vpn/choices.py:248 +#: netbox/vpn/choices.py:256 msgid "Ethernet Virtual Private Tree" msgstr "" @@ -15171,26 +15853,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 "" @@ -15198,10 +15880,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 "" @@ -15218,7 +15896,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 "" @@ -15263,7 +15941,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 "" @@ -15271,32 +15949,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 "" @@ -15309,31 +15983,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 "" @@ -15341,19 +16015,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 "" @@ -15373,32 +16047,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 " @@ -15413,35 +16087,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 "" @@ -15502,50 +16176,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 "" @@ -15553,35 +16220,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 "" diff --git a/netbox/translations/es/LC_MESSAGES/django.mo b/netbox/translations/es/LC_MESSAGES/django.mo index 86fb45730..47dfa187f 100644 Binary files a/netbox/translations/es/LC_MESSAGES/django.mo and b/netbox/translations/es/LC_MESSAGES/django.mo differ diff --git a/netbox/translations/es/LC_MESSAGES/django.po b/netbox/translations/es/LC_MESSAGES/django.po index ee77d76fc..7bedaedaa 100644 --- a/netbox/translations/es/LC_MESSAGES/django.po +++ b/netbox/translations/es/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-10-28 19:20+0000\n" +"POT-Creation-Date: 2024-12-12 05:02+0000\n" "PO-Revision-Date: 2023-10-30 17:48+0000\n" "Last-Translator: Jeremy Stretch, 2024\n" "Language-Team: Spanish (https://app.transifex.com/netbox-community/teams/178115/es/)\n" @@ -21,1874 +21,2141 @@ msgstr "" "Language: es\n" "Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" -#: account/tables.py:27 templates/account/token.html:22 -#: templates/users/token.html:17 users/forms/bulk_import.py:39 -#: users/forms/model_forms.py:112 +#: netbox/account/tables.py:27 netbox/templates/account/token.html:22 +#: netbox/templates/users/token.html:17 netbox/users/forms/bulk_import.py:39 +#: netbox/users/forms/model_forms.py:112 msgid "Key" msgstr "Llave" -#: account/tables.py:31 users/forms/filtersets.py:132 +#: netbox/account/tables.py:31 netbox/users/forms/filtersets.py:132 msgid "Write Enabled" msgstr "Escritura habilitada" -#: account/tables.py:35 core/choices.py:86 core/tables/jobs.py:29 -#: core/tables/tasks.py:79 extras/tables/tables.py:335 -#: extras/tables/tables.py:566 templates/account/token.html:43 -#: templates/core/configrevision.html:26 -#: templates/core/configrevision_restore.html:12 templates/core/job.html:69 -#: templates/core/rq_task.html:16 templates/core/rq_task.html:73 -#: templates/core/rq_worker.html:14 -#: templates/extras/htmx/script_result.html:12 -#: templates/extras/journalentry.html:22 templates/generic/object.html:58 -#: templates/users/token.html:35 +#: netbox/account/tables.py:35 netbox/core/choices.py:86 +#: 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 +#: netbox/templates/core/configrevision.html:26 +#: netbox/templates/core/configrevision_restore.html:12 +#: netbox/templates/core/job.html:69 netbox/templates/core/rq_task.html:16 +#: netbox/templates/core/rq_task.html:73 +#: netbox/templates/core/rq_worker.html:14 +#: netbox/templates/extras/htmx/script_result.html:12 +#: netbox/templates/extras/journalentry.html:22 +#: netbox/templates/generic/object.html:58 +#: netbox/templates/users/token.html:35 msgid "Created" msgstr "Creado" -#: account/tables.py:39 templates/account/token.html:47 -#: templates/users/token.html:39 users/forms/bulk_edit.py:117 -#: users/forms/filtersets.py:136 +#: netbox/account/tables.py:39 netbox/templates/account/token.html:47 +#: netbox/templates/users/token.html:39 netbox/users/forms/bulk_edit.py:117 +#: netbox/users/forms/filtersets.py:136 msgid "Expires" msgstr "Caduca" -#: account/tables.py:42 users/forms/filtersets.py:141 +#: netbox/account/tables.py:42 netbox/users/forms/filtersets.py:141 msgid "Last Used" msgstr "Utilizado por última vez" -#: account/tables.py:45 templates/account/token.html:55 -#: templates/users/token.html:47 users/forms/bulk_edit.py:122 -#: users/forms/model_forms.py:124 +#: netbox/account/tables.py:45 netbox/templates/account/token.html:55 +#: netbox/templates/users/token.html:47 netbox/users/forms/bulk_edit.py:122 +#: netbox/users/forms/model_forms.py:124 msgid "Allowed IPs" msgstr "IPs permitidas" -#: account/views.py:114 +#: netbox/account/views.py:114 #, python-brace-format msgid "Logged in as {user}." msgstr "Ha iniciado sesión como {user}." -#: account/views.py:164 +#: netbox/account/views.py:164 msgid "You have logged out." msgstr "Has cerrado sesión." -#: account/views.py:216 +#: netbox/account/views.py:216 msgid "Your preferences have been updated." msgstr "Se han actualizado tus preferencias." -#: account/views.py:239 +#: netbox/account/views.py:239 msgid "LDAP-authenticated user credentials cannot be changed within NetBox." msgstr "" "Las credenciales de usuario autenticadas por LDAP no se pueden cambiar en " "NetBox." -#: account/views.py:254 +#: netbox/account/views.py:254 msgid "Your password has been changed successfully." msgstr "La contraseña se ha cambiado correctamente." -#: circuits/choices.py:21 dcim/choices.py:20 dcim/choices.py:102 -#: dcim/choices.py:185 dcim/choices.py:237 dcim/choices.py:1530 -#: dcim/choices.py:1606 dcim/choices.py:1656 virtualization/choices.py:20 -#: virtualization/choices.py:45 vpn/choices.py:18 +#: netbox/circuits/choices.py:21 netbox/dcim/choices.py:20 +#: netbox/dcim/choices.py:102 netbox/dcim/choices.py: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 msgid "Planned" msgstr "Planificado" -#: circuits/choices.py:22 netbox/navigation/menu.py:305 +#: netbox/circuits/choices.py:22 netbox/netbox/navigation/menu.py:305 msgid "Provisioning" msgstr "Aprovisionamiento" -#: circuits/choices.py:23 core/tables/tasks.py:22 dcim/choices.py:22 -#: dcim/choices.py:103 dcim/choices.py:184 dcim/choices.py:236 -#: dcim/choices.py:1605 dcim/choices.py:1655 extras/tables/tables.py:495 -#: ipam/choices.py:31 ipam/choices.py:49 ipam/choices.py:69 -#: ipam/choices.py:154 templates/extras/configcontext.html:25 -#: templates/users/user.html:37 users/forms/bulk_edit.py:38 -#: virtualization/choices.py:22 virtualization/choices.py:44 vpn/choices.py:19 -#: wireless/choices.py:25 +#: netbox/circuits/choices.py:23 netbox/core/tables/tasks.py:22 +#: netbox/dcim/choices.py:22 netbox/dcim/choices.py:103 +#: netbox/dcim/choices.py: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/templates/users/user.html:37 netbox/users/forms/bulk_edit.py:38 +#: netbox/virtualization/choices.py:22 netbox/virtualization/choices.py:44 +#: netbox/vpn/choices.py:19 netbox/wireless/choices.py:25 msgid "Active" msgstr "Activo" -#: circuits/choices.py:24 dcim/choices.py:183 dcim/choices.py:235 -#: dcim/choices.py:1604 dcim/choices.py:1657 virtualization/choices.py:24 -#: virtualization/choices.py:43 +#: 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 msgid "Offline" msgstr "Desconectado" -#: circuits/choices.py:25 +#: netbox/circuits/choices.py:25 msgid "Deprovisioning" msgstr "Desaprovisionamiento" -#: circuits/choices.py:26 +#: netbox/circuits/choices.py:26 msgid "Decommissioned" msgstr "Desmantelado" -#: circuits/choices.py:90 dcim/choices.py:1617 tenancy/choices.py:17 +#: netbox/circuits/choices.py:90 netbox/dcim/choices.py:1619 +#: netbox/tenancy/choices.py:17 msgid "Primary" msgstr "Primaria" -#: circuits/choices.py:91 ipam/choices.py:90 tenancy/choices.py:18 +#: netbox/circuits/choices.py:91 netbox/ipam/choices.py:90 +#: netbox/tenancy/choices.py:18 msgid "Secondary" msgstr "Secundaria" -#: circuits/choices.py:92 tenancy/choices.py:19 +#: netbox/circuits/choices.py:92 netbox/tenancy/choices.py:19 msgid "Tertiary" msgstr "Terciario" -#: circuits/choices.py:93 tenancy/choices.py:20 +#: netbox/circuits/choices.py:93 netbox/tenancy/choices.py:20 msgid "Inactive" msgstr "Inactivo" -#: circuits/filtersets.py:31 circuits/filtersets.py:198 dcim/filtersets.py:98 -#: dcim/filtersets.py:152 dcim/filtersets.py:212 dcim/filtersets.py:333 -#: dcim/filtersets.py:464 dcim/filtersets.py:1021 dcim/filtersets.py:1368 -#: dcim/filtersets.py:1903 dcim/filtersets.py:2146 dcim/filtersets.py:2204 -#: ipam/filtersets.py:339 ipam/filtersets.py:959 -#: virtualization/filtersets.py:45 virtualization/filtersets.py:173 -#: vpn/filtersets.py:358 +#: 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:339 netbox/ipam/filtersets.py:959 +#: netbox/virtualization/filtersets.py:45 +#: netbox/virtualization/filtersets.py:173 netbox/vpn/filtersets.py:358 msgid "Region (ID)" msgstr "Región (ID)" -#: circuits/filtersets.py:38 circuits/filtersets.py:205 dcim/filtersets.py:105 -#: dcim/filtersets.py:158 dcim/filtersets.py:219 dcim/filtersets.py:340 -#: dcim/filtersets.py:471 dcim/filtersets.py:1028 dcim/filtersets.py:1375 -#: dcim/filtersets.py:1910 dcim/filtersets.py:2153 dcim/filtersets.py:2211 -#: extras/filtersets.py:509 ipam/filtersets.py:346 ipam/filtersets.py:966 -#: virtualization/filtersets.py:52 virtualization/filtersets.py:180 -#: vpn/filtersets.py:353 +#: 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:346 +#: netbox/ipam/filtersets.py:966 netbox/virtualization/filtersets.py:52 +#: netbox/virtualization/filtersets.py:180 netbox/vpn/filtersets.py:353 msgid "Region (slug)" msgstr "Región (slug)" -#: circuits/filtersets.py:44 circuits/filtersets.py:211 dcim/filtersets.py:128 -#: dcim/filtersets.py:225 dcim/filtersets.py:346 dcim/filtersets.py:477 -#: dcim/filtersets.py:1034 dcim/filtersets.py:1381 dcim/filtersets.py:1916 -#: dcim/filtersets.py:2159 dcim/filtersets.py:2217 ipam/filtersets.py:352 -#: ipam/filtersets.py:972 virtualization/filtersets.py:58 -#: virtualization/filtersets.py:186 +#: 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:352 +#: netbox/ipam/filtersets.py:972 netbox/virtualization/filtersets.py:58 +#: netbox/virtualization/filtersets.py:186 msgid "Site group (ID)" msgstr "Grupo de sitios (ID)" -#: circuits/filtersets.py:51 circuits/filtersets.py:218 dcim/filtersets.py:135 -#: dcim/filtersets.py:232 dcim/filtersets.py:353 dcim/filtersets.py:484 -#: dcim/filtersets.py:1041 dcim/filtersets.py:1388 dcim/filtersets.py:1923 -#: dcim/filtersets.py:2166 dcim/filtersets.py:2224 extras/filtersets.py:515 -#: ipam/filtersets.py:359 ipam/filtersets.py:979 -#: virtualization/filtersets.py:65 virtualization/filtersets.py:193 +#: 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:359 netbox/ipam/filtersets.py:979 +#: netbox/virtualization/filtersets.py:65 +#: netbox/virtualization/filtersets.py:193 msgid "Site group (slug)" msgstr "Grupo de sitios (slug)" -#: circuits/filtersets.py:56 circuits/forms/bulk_edit.py:188 -#: circuits/forms/bulk_edit.py:216 circuits/forms/bulk_import.py:124 -#: circuits/forms/filtersets.py:51 circuits/forms/filtersets.py:171 -#: circuits/forms/filtersets.py:209 circuits/forms/model_forms.py:138 -#: circuits/forms/model_forms.py:154 circuits/tables/circuits.py:113 -#: dcim/forms/bulk_edit.py:168 dcim/forms/bulk_edit.py:329 -#: dcim/forms/bulk_edit.py:677 dcim/forms/bulk_edit.py:873 -#: dcim/forms/bulk_import.py:131 dcim/forms/bulk_import.py:230 -#: dcim/forms/bulk_import.py:309 dcim/forms/bulk_import.py:540 -#: dcim/forms/bulk_import.py:1311 dcim/forms/bulk_import.py:1339 -#: dcim/forms/filtersets.py:87 dcim/forms/filtersets.py:225 -#: dcim/forms/filtersets.py:342 dcim/forms/filtersets.py:439 -#: dcim/forms/filtersets.py:753 dcim/forms/filtersets.py:997 -#: dcim/forms/filtersets.py:1021 dcim/forms/filtersets.py:1111 -#: dcim/forms/filtersets.py:1149 dcim/forms/filtersets.py:1584 -#: dcim/forms/filtersets.py:1608 dcim/forms/filtersets.py:1632 -#: dcim/forms/model_forms.py:137 dcim/forms/model_forms.py:165 -#: dcim/forms/model_forms.py:238 dcim/forms/model_forms.py:463 -#: dcim/forms/model_forms.py:723 dcim/forms/object_create.py:391 -#: dcim/tables/devices.py:153 dcim/tables/power.py:26 dcim/tables/power.py:93 -#: dcim/tables/racks.py:122 dcim/tables/racks.py:207 dcim/tables/sites.py:134 -#: extras/filtersets.py:525 ipam/forms/bulk_edit.py:218 -#: ipam/forms/bulk_edit.py:285 ipam/forms/bulk_edit.py:484 -#: ipam/forms/bulk_import.py:171 ipam/forms/bulk_import.py:429 -#: ipam/forms/filtersets.py:153 ipam/forms/filtersets.py:231 -#: ipam/forms/filtersets.py:432 ipam/forms/filtersets.py:489 -#: ipam/forms/model_forms.py:205 ipam/forms/model_forms.py:636 -#: ipam/tables/ip.py:245 ipam/tables/vlans.py:118 ipam/tables/vlans.py:221 -#: templates/circuits/inc/circuit_termination_fields.html:6 -#: templates/dcim/device.html:22 templates/dcim/inc/cable_termination.html:8 -#: templates/dcim/inc/cable_termination.html:33 -#: templates/dcim/location.html:37 templates/dcim/powerpanel.html:22 -#: templates/dcim/rack.html:20 templates/dcim/rackreservation.html:28 -#: templates/dcim/site.html:28 templates/ipam/prefix.html:56 -#: templates/ipam/vlan.html:23 templates/ipam/vlan_edit.html:40 -#: templates/virtualization/cluster.html:42 -#: templates/virtualization/virtualmachine.html:95 -#: virtualization/forms/bulk_edit.py:91 virtualization/forms/bulk_edit.py:109 -#: virtualization/forms/bulk_edit.py:124 -#: virtualization/forms/bulk_import.py:59 -#: virtualization/forms/bulk_import.py:85 -#: virtualization/forms/filtersets.py:79 -#: virtualization/forms/filtersets.py:148 -#: virtualization/forms/model_forms.py:71 -#: virtualization/forms/model_forms.py:104 -#: virtualization/forms/model_forms.py:171 -#: virtualization/tables/clusters.py:77 -#: virtualization/tables/virtualmachines.py:63 vpn/forms/filtersets.py:266 -#: wireless/forms/model_forms.py:76 wireless/forms/model_forms.py:118 +#: 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/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/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/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 msgid "Site" msgstr "Sitio" -#: circuits/filtersets.py:62 circuits/filtersets.py:229 -#: circuits/filtersets.py:274 dcim/filtersets.py:242 dcim/filtersets.py:363 -#: dcim/filtersets.py:458 extras/filtersets.py:531 ipam/filtersets.py:238 -#: ipam/filtersets.py:369 ipam/filtersets.py:989 -#: virtualization/filtersets.py:75 virtualization/filtersets.py:203 -#: vpn/filtersets.py:363 +#: 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/virtualization/filtersets.py:75 +#: netbox/virtualization/filtersets.py:203 netbox/vpn/filtersets.py:363 msgid "Site (slug)" msgstr "Sitio (babosa)" -#: circuits/filtersets.py:67 +#: netbox/circuits/filtersets.py:67 msgid "ASN (ID)" msgstr "ASN (ID)" -#: circuits/filtersets.py:73 circuits/forms/filtersets.py:31 -#: ipam/forms/model_forms.py:159 ipam/models/asns.py:108 -#: ipam/models/asns.py:125 ipam/tables/asn.py:41 templates/ipam/asn.html:20 +#: 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/templates/ipam/asn.html:20 msgid "ASN" msgstr "ASN" -#: circuits/filtersets.py:95 circuits/filtersets.py:122 -#: circuits/filtersets.py:156 circuits/filtersets.py:283 -#: circuits/filtersets.py:325 ipam/filtersets.py:243 +#: 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 msgid "Provider (ID)" msgstr "Proveedor (ID)" -#: circuits/filtersets.py:101 circuits/filtersets.py:128 -#: circuits/filtersets.py:162 circuits/filtersets.py:289 -#: circuits/filtersets.py:331 ipam/filtersets.py:249 +#: 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 msgid "Provider (slug)" msgstr "Proveedor (babosa)" -#: circuits/filtersets.py:167 +#: netbox/circuits/filtersets.py:167 msgid "Provider account (ID)" msgstr "Cuenta de proveedor (ID)" -#: circuits/filtersets.py:173 +#: netbox/circuits/filtersets.py:173 msgid "Provider account (account)" msgstr "Cuenta de proveedor (cuenta)" -#: circuits/filtersets.py:178 +#: netbox/circuits/filtersets.py:178 msgid "Provider network (ID)" msgstr "Red de proveedores (ID)" -#: circuits/filtersets.py:182 +#: netbox/circuits/filtersets.py:182 msgid "Circuit type (ID)" msgstr "Tipo de circuito (ID)" -#: circuits/filtersets.py:188 +#: netbox/circuits/filtersets.py:188 msgid "Circuit type (slug)" msgstr "Tipo de circuito (slug)" -#: circuits/filtersets.py:223 circuits/filtersets.py:268 -#: dcim/filtersets.py:236 dcim/filtersets.py:357 dcim/filtersets.py:452 -#: dcim/filtersets.py:1045 dcim/filtersets.py:1393 dcim/filtersets.py:1928 -#: dcim/filtersets.py:2170 dcim/filtersets.py:2229 ipam/filtersets.py:232 -#: ipam/filtersets.py:363 ipam/filtersets.py:983 -#: virtualization/filtersets.py:69 virtualization/filtersets.py:197 -#: vpn/filtersets.py:368 +#: 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:232 netbox/ipam/filtersets.py:363 +#: netbox/ipam/filtersets.py:983 netbox/virtualization/filtersets.py:69 +#: netbox/virtualization/filtersets.py:197 netbox/vpn/filtersets.py:368 msgid "Site (ID)" msgstr "Sitio (ID)" -#: circuits/filtersets.py:233 circuits/filtersets.py:237 +#: netbox/circuits/filtersets.py:233 netbox/circuits/filtersets.py:237 msgid "Termination A (ID)" msgstr "Terminación A (ID)" -#: circuits/filtersets.py:260 circuits/filtersets.py:320 core/filtersets.py:77 -#: core/filtersets.py:136 core/filtersets.py:173 dcim/filtersets.py:751 -#: dcim/filtersets.py:1362 dcim/filtersets.py:2277 extras/filtersets.py:41 -#: extras/filtersets.py:63 extras/filtersets.py:92 extras/filtersets.py:132 -#: extras/filtersets.py:181 extras/filtersets.py:209 extras/filtersets.py:239 -#: extras/filtersets.py:276 extras/filtersets.py:348 extras/filtersets.py:391 -#: extras/filtersets.py:438 extras/filtersets.py:498 extras/filtersets.py:657 -#: extras/filtersets.py:703 ipam/forms/model_forms.py:449 -#: netbox/filtersets.py:282 netbox/forms/__init__.py:22 -#: netbox/forms/base.py:167 templates/htmx/object_selector.html:28 -#: templates/inc/filter_list.html:46 templates/ipam/ipaddress_assign.html:29 -#: templates/search.html:7 templates/search.html:26 tenancy/filtersets.py:99 -#: users/filtersets.py:23 users/filtersets.py:57 users/filtersets.py:102 -#: users/filtersets.py:150 utilities/forms/forms.py:104 -#: utilities/templates/navigation/menu.html:16 +#: 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/templates/htmx/object_selector.html:28 +#: netbox/templates/inc/filter_list.html:46 +#: netbox/templates/ipam/ipaddress_assign.html:29 +#: netbox/templates/search.html:7 netbox/templates/search.html:26 +#: netbox/tenancy/filtersets.py:99 netbox/users/filtersets.py:23 +#: netbox/users/filtersets.py:57 netbox/users/filtersets.py:102 +#: netbox/users/filtersets.py:150 netbox/utilities/forms/forms.py:104 +#: netbox/utilities/templates/navigation/menu.html:16 msgid "Search" msgstr "Búsqueda" -#: circuits/filtersets.py:264 circuits/forms/bulk_edit.py:172 -#: circuits/forms/bulk_edit.py:246 circuits/forms/bulk_import.py:115 -#: circuits/forms/filtersets.py:198 circuits/forms/filtersets.py:214 -#: circuits/forms/filtersets.py:260 circuits/forms/model_forms.py:111 -#: circuits/forms/model_forms.py:133 circuits/forms/model_forms.py:199 -#: circuits/tables/circuits.py:104 circuits/tables/circuits.py:164 -#: dcim/forms/connections.py:73 templates/circuits/circuit.html:15 -#: templates/circuits/circuitgroupassignment.html:26 -#: templates/circuits/circuittermination.html:19 -#: templates/dcim/inc/cable_termination.html:55 -#: templates/dcim/trace/circuit.html:4 +#: 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/templates/circuits/circuit.html:15 +#: netbox/templates/circuits/circuitgroupassignment.html:26 +#: 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" -#: circuits/filtersets.py:278 +#: netbox/circuits/filtersets.py:278 msgid "ProviderNetwork (ID)" msgstr "Red de proveedores (ID)" -#: circuits/filtersets.py:335 +#: netbox/circuits/filtersets.py:335 msgid "Circuit (ID)" msgstr "Circuito (ID)" -#: circuits/filtersets.py:341 +#: netbox/circuits/filtersets.py:341 msgid "Circuit (CID)" msgstr "Circuito (CID)" -#: circuits/filtersets.py:345 +#: netbox/circuits/filtersets.py:345 msgid "Circuit group (ID)" msgstr "Grupo de circuitos (ID)" -#: circuits/filtersets.py:351 +#: netbox/circuits/filtersets.py:351 msgid "Circuit group (slug)" msgstr "Grupo de circuitos (slug)" -#: circuits/forms/bulk_edit.py:30 circuits/forms/filtersets.py:56 -#: circuits/forms/model_forms.py:29 circuits/tables/providers.py:33 -#: dcim/forms/bulk_edit.py:128 dcim/forms/filtersets.py:195 -#: dcim/forms/model_forms.py:123 dcim/tables/sites.py:94 -#: ipam/models/asns.py:126 ipam/tables/asn.py:27 ipam/views.py:213 -#: netbox/navigation/menu.py:172 netbox/navigation/menu.py:175 -#: templates/circuits/provider.html:23 +#: 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/templates/circuits/provider.html:23 msgid "ASNs" msgstr "ASNs" -#: circuits/forms/bulk_edit.py:34 circuits/forms/bulk_edit.py:56 -#: circuits/forms/bulk_edit.py:83 circuits/forms/bulk_edit.py:104 -#: circuits/forms/bulk_edit.py:164 circuits/forms/bulk_edit.py:183 -#: circuits/forms/bulk_edit.py:228 core/forms/bulk_edit.py:28 -#: dcim/forms/bulk_create.py:35 dcim/forms/bulk_edit.py:73 -#: dcim/forms/bulk_edit.py:92 dcim/forms/bulk_edit.py:151 -#: dcim/forms/bulk_edit.py:192 dcim/forms/bulk_edit.py:210 -#: dcim/forms/bulk_edit.py:288 dcim/forms/bulk_edit.py:432 -#: dcim/forms/bulk_edit.py:466 dcim/forms/bulk_edit.py:481 -#: dcim/forms/bulk_edit.py:540 dcim/forms/bulk_edit.py:584 -#: dcim/forms/bulk_edit.py:618 dcim/forms/bulk_edit.py:642 -#: dcim/forms/bulk_edit.py:715 dcim/forms/bulk_edit.py:767 -#: dcim/forms/bulk_edit.py:819 dcim/forms/bulk_edit.py:842 -#: dcim/forms/bulk_edit.py:890 dcim/forms/bulk_edit.py:960 -#: dcim/forms/bulk_edit.py:1013 dcim/forms/bulk_edit.py:1048 -#: dcim/forms/bulk_edit.py:1088 dcim/forms/bulk_edit.py:1132 -#: dcim/forms/bulk_edit.py:1177 dcim/forms/bulk_edit.py:1204 -#: dcim/forms/bulk_edit.py:1222 dcim/forms/bulk_edit.py:1240 -#: dcim/forms/bulk_edit.py:1258 dcim/forms/bulk_edit.py:1682 -#: extras/forms/bulk_edit.py:39 extras/forms/bulk_edit.py:149 -#: extras/forms/bulk_edit.py:178 extras/forms/bulk_edit.py:208 -#: extras/forms/bulk_edit.py:256 extras/forms/bulk_edit.py:274 -#: extras/forms/bulk_edit.py:298 extras/forms/bulk_edit.py:312 -#: extras/forms/bulk_edit.py:339 extras/tables/tables.py:79 -#: ipam/forms/bulk_edit.py:53 ipam/forms/bulk_edit.py:73 -#: ipam/forms/bulk_edit.py:93 ipam/forms/bulk_edit.py:117 -#: ipam/forms/bulk_edit.py:146 ipam/forms/bulk_edit.py:175 -#: ipam/forms/bulk_edit.py:194 ipam/forms/bulk_edit.py:276 -#: ipam/forms/bulk_edit.py:321 ipam/forms/bulk_edit.py:369 -#: ipam/forms/bulk_edit.py:412 ipam/forms/bulk_edit.py:428 -#: ipam/forms/bulk_edit.py:516 ipam/forms/bulk_edit.py:547 -#: templates/account/token.html:35 templates/circuits/circuit.html:59 -#: templates/circuits/circuitgroup.html:32 -#: templates/circuits/circuittype.html:26 -#: templates/circuits/inc/circuit_termination_fields.html:88 -#: templates/circuits/provider.html:33 -#: templates/circuits/providernetwork.html:32 -#: templates/core/datasource.html:54 templates/core/plugin.html:80 -#: templates/dcim/cable.html:36 templates/dcim/consoleport.html:44 -#: templates/dcim/consoleserverport.html:44 templates/dcim/device.html:94 -#: templates/dcim/devicebay.html:32 templates/dcim/devicerole.html:30 -#: templates/dcim/devicetype.html:33 templates/dcim/frontport.html:58 -#: templates/dcim/interface.html:69 templates/dcim/inventoryitem.html:60 -#: templates/dcim/inventoryitemrole.html:22 templates/dcim/location.html:33 -#: templates/dcim/manufacturer.html:40 templates/dcim/module.html:73 -#: templates/dcim/modulebay.html:42 templates/dcim/moduletype.html:37 -#: templates/dcim/platform.html:33 templates/dcim/powerfeed.html:40 -#: templates/dcim/poweroutlet.html:40 templates/dcim/powerpanel.html:30 -#: templates/dcim/powerport.html:40 templates/dcim/rack.html:53 -#: templates/dcim/rackreservation.html:62 templates/dcim/rackrole.html:26 -#: templates/dcim/racktype.html:24 templates/dcim/rearport.html:54 -#: templates/dcim/region.html:33 templates/dcim/site.html:60 -#: templates/dcim/sitegroup.html:33 templates/dcim/virtualchassis.html:31 -#: templates/extras/configcontext.html:21 -#: templates/extras/configtemplate.html:17 -#: templates/extras/customfield.html:34 -#: templates/extras/dashboard/widget_add.html:14 -#: templates/extras/eventrule.html:21 templates/extras/exporttemplate.html:19 -#: templates/extras/notificationgroup.html:20 -#: templates/extras/savedfilter.html:17 templates/extras/script_list.html:45 -#: templates/extras/tag.html:20 templates/extras/webhook.html:17 -#: templates/generic/bulk_import.html:120 templates/ipam/aggregate.html:43 -#: templates/ipam/asn.html:42 templates/ipam/asnrange.html:38 -#: templates/ipam/fhrpgroup.html:34 templates/ipam/ipaddress.html:55 -#: templates/ipam/iprange.html:67 templates/ipam/prefix.html:81 -#: templates/ipam/rir.html:26 templates/ipam/role.html:26 -#: templates/ipam/routetarget.html:21 templates/ipam/service.html:50 -#: templates/ipam/servicetemplate.html:27 templates/ipam/vlan.html:62 -#: templates/ipam/vlangroup.html:34 templates/ipam/vrf.html:33 -#: templates/tenancy/contact.html:67 templates/tenancy/contactgroup.html:25 -#: templates/tenancy/contactrole.html:22 templates/tenancy/tenant.html:24 -#: templates/tenancy/tenantgroup.html:33 templates/users/group.html:21 -#: templates/users/objectpermission.html:21 templates/users/token.html:27 -#: templates/virtualization/cluster.html:25 -#: templates/virtualization/clustergroup.html:26 -#: templates/virtualization/clustertype.html:26 -#: templates/virtualization/virtualdisk.html:39 -#: templates/virtualization/virtualmachine.html:31 -#: templates/virtualization/vminterface.html:51 -#: templates/vpn/ikepolicy.html:17 templates/vpn/ikeproposal.html:17 -#: templates/vpn/ipsecpolicy.html:17 templates/vpn/ipsecprofile.html:17 -#: templates/vpn/ipsecprofile.html:40 templates/vpn/ipsecprofile.html:73 -#: templates/vpn/ipsecproposal.html:17 templates/vpn/l2vpn.html:26 -#: templates/vpn/tunnel.html:33 templates/vpn/tunnelgroup.html:30 -#: templates/wireless/wirelesslan.html:26 -#: templates/wireless/wirelesslangroup.html:33 -#: templates/wireless/wirelesslink.html:34 tenancy/forms/bulk_edit.py:32 -#: tenancy/forms/bulk_edit.py:80 tenancy/forms/bulk_edit.py:122 -#: users/forms/bulk_edit.py:64 users/forms/bulk_edit.py:82 -#: users/forms/bulk_edit.py:112 virtualization/forms/bulk_edit.py:32 -#: virtualization/forms/bulk_edit.py:46 virtualization/forms/bulk_edit.py:100 -#: virtualization/forms/bulk_edit.py:177 virtualization/forms/bulk_edit.py:228 -#: virtualization/forms/bulk_edit.py:337 vpn/forms/bulk_edit.py:28 -#: vpn/forms/bulk_edit.py:64 vpn/forms/bulk_edit.py:121 -#: vpn/forms/bulk_edit.py:155 vpn/forms/bulk_edit.py:190 -#: vpn/forms/bulk_edit.py:215 vpn/forms/bulk_edit.py:247 -#: vpn/forms/bulk_edit.py:274 wireless/forms/bulk_edit.py:29 -#: wireless/forms/bulk_edit.py:82 wireless/forms/bulk_edit.py:140 +#: 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/templates/account/token.html:35 +#: netbox/templates/circuits/circuit.html:59 +#: netbox/templates/circuits/circuitgroup.html:32 +#: netbox/templates/circuits/circuittype.html:26 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:88 +#: netbox/templates/circuits/provider.html:33 +#: netbox/templates/circuits/providernetwork.html:32 +#: netbox/templates/core/datasource.html:54 +#: netbox/templates/core/plugin.html:80 netbox/templates/dcim/cable.html:36 +#: netbox/templates/dcim/consoleport.html:44 +#: netbox/templates/dcim/consoleserverport.html:44 +#: netbox/templates/dcim/device.html:94 +#: netbox/templates/dcim/devicebay.html:32 +#: netbox/templates/dcim/devicerole.html:30 +#: netbox/templates/dcim/devicetype.html:33 +#: netbox/templates/dcim/frontport.html:58 +#: netbox/templates/dcim/interface.html:69 +#: netbox/templates/dcim/inventoryitem.html:60 +#: netbox/templates/dcim/inventoryitemrole.html:22 +#: netbox/templates/dcim/location.html:33 +#: netbox/templates/dcim/manufacturer.html:40 +#: netbox/templates/dcim/module.html:73 +#: netbox/templates/dcim/modulebay.html:42 +#: netbox/templates/dcim/moduletype.html:37 +#: netbox/templates/dcim/platform.html:33 +#: netbox/templates/dcim/powerfeed.html:40 +#: netbox/templates/dcim/poweroutlet.html:40 +#: netbox/templates/dcim/powerpanel.html:30 +#: netbox/templates/dcim/powerport.html:40 netbox/templates/dcim/rack.html:53 +#: netbox/templates/dcim/rackreservation.html:62 +#: netbox/templates/dcim/rackrole.html:26 +#: netbox/templates/dcim/racktype.html:24 +#: netbox/templates/dcim/rearport.html:54 netbox/templates/dcim/region.html:33 +#: netbox/templates/dcim/site.html:60 netbox/templates/dcim/sitegroup.html:33 +#: netbox/templates/dcim/virtualchassis.html:31 +#: netbox/templates/extras/configcontext.html:21 +#: netbox/templates/extras/configtemplate.html:17 +#: netbox/templates/extras/customfield.html:34 +#: netbox/templates/extras/dashboard/widget_add.html:14 +#: netbox/templates/extras/eventrule.html:21 +#: netbox/templates/extras/exporttemplate.html:19 +#: netbox/templates/extras/notificationgroup.html:20 +#: netbox/templates/extras/savedfilter.html:17 +#: netbox/templates/extras/script_list.html:46 +#: netbox/templates/extras/tag.html:20 netbox/templates/extras/webhook.html:17 +#: netbox/templates/generic/bulk_import.html:120 +#: netbox/templates/ipam/aggregate.html:43 netbox/templates/ipam/asn.html:42 +#: netbox/templates/ipam/asnrange.html:38 +#: netbox/templates/ipam/fhrpgroup.html:34 +#: netbox/templates/ipam/ipaddress.html:55 +#: netbox/templates/ipam/iprange.html:67 netbox/templates/ipam/prefix.html:81 +#: netbox/templates/ipam/rir.html:26 netbox/templates/ipam/role.html:26 +#: netbox/templates/ipam/routetarget.html:21 +#: netbox/templates/ipam/service.html:50 +#: netbox/templates/ipam/servicetemplate.html:27 +#: netbox/templates/ipam/vlan.html:62 netbox/templates/ipam/vlangroup.html:34 +#: netbox/templates/ipam/vrf.html:33 netbox/templates/tenancy/contact.html:67 +#: netbox/templates/tenancy/contactgroup.html:25 +#: netbox/templates/tenancy/contactrole.html:22 +#: netbox/templates/tenancy/tenant.html:24 +#: netbox/templates/tenancy/tenantgroup.html:33 +#: netbox/templates/users/group.html:21 +#: netbox/templates/users/objectpermission.html:21 +#: netbox/templates/users/token.html:27 +#: netbox/templates/virtualization/cluster.html:25 +#: netbox/templates/virtualization/clustergroup.html:26 +#: netbox/templates/virtualization/clustertype.html:26 +#: netbox/templates/virtualization/virtualdisk.html:39 +#: netbox/templates/virtualization/virtualmachine.html:31 +#: netbox/templates/virtualization/vminterface.html:51 +#: netbox/templates/vpn/ikepolicy.html:17 +#: netbox/templates/vpn/ikeproposal.html:17 +#: netbox/templates/vpn/ipsecpolicy.html:17 +#: netbox/templates/vpn/ipsecprofile.html:17 +#: netbox/templates/vpn/ipsecprofile.html:40 +#: netbox/templates/vpn/ipsecprofile.html:73 +#: netbox/templates/vpn/ipsecproposal.html:17 +#: netbox/templates/vpn/l2vpn.html:26 netbox/templates/vpn/tunnel.html:33 +#: netbox/templates/vpn/tunnelgroup.html:30 +#: netbox/templates/wireless/wirelesslan.html:26 +#: netbox/templates/wireless/wirelesslangroup.html:33 +#: netbox/templates/wireless/wirelesslink.html:34 +#: netbox/tenancy/forms/bulk_edit.py:32 netbox/tenancy/forms/bulk_edit.py:80 +#: netbox/tenancy/forms/bulk_edit.py:122 netbox/users/forms/bulk_edit.py:64 +#: netbox/users/forms/bulk_edit.py:82 netbox/users/forms/bulk_edit.py:112 +#: netbox/virtualization/forms/bulk_edit.py:32 +#: netbox/virtualization/forms/bulk_edit.py:46 +#: netbox/virtualization/forms/bulk_edit.py:100 +#: netbox/virtualization/forms/bulk_edit.py:177 +#: netbox/virtualization/forms/bulk_edit.py:228 +#: netbox/virtualization/forms/bulk_edit.py:337 +#: netbox/vpn/forms/bulk_edit.py:28 netbox/vpn/forms/bulk_edit.py:64 +#: netbox/vpn/forms/bulk_edit.py:121 netbox/vpn/forms/bulk_edit.py:155 +#: netbox/vpn/forms/bulk_edit.py:190 netbox/vpn/forms/bulk_edit.py:215 +#: netbox/vpn/forms/bulk_edit.py:247 netbox/vpn/forms/bulk_edit.py:274 +#: netbox/wireless/forms/bulk_edit.py:29 netbox/wireless/forms/bulk_edit.py:82 +#: netbox/wireless/forms/bulk_edit.py:140 msgid "Description" msgstr "Descripción" -#: circuits/forms/bulk_edit.py:51 circuits/forms/bulk_edit.py:73 -#: circuits/forms/bulk_edit.py:123 circuits/forms/bulk_import.py:36 -#: circuits/forms/bulk_import.py:51 circuits/forms/bulk_import.py:74 -#: circuits/forms/filtersets.py:70 circuits/forms/filtersets.py:88 -#: circuits/forms/filtersets.py:116 circuits/forms/filtersets.py:131 -#: circuits/forms/filtersets.py:199 circuits/forms/filtersets.py:232 -#: circuits/forms/filtersets.py:255 circuits/forms/model_forms.py:47 -#: circuits/forms/model_forms.py:61 circuits/forms/model_forms.py:93 -#: circuits/tables/circuits.py:58 circuits/tables/circuits.py:108 -#: circuits/tables/circuits.py:160 circuits/tables/providers.py:72 -#: circuits/tables/providers.py:103 templates/circuits/circuit.html:18 -#: templates/circuits/circuittermination.html:25 -#: templates/circuits/provider.html:20 -#: templates/circuits/provideraccount.html:20 -#: templates/circuits/providernetwork.html:20 -#: templates/dcim/inc/cable_termination.html:51 +#: netbox/circuits/forms/bulk_edit.py: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/templates/circuits/circuit.html:18 +#: netbox/templates/circuits/circuittermination.html:25 +#: netbox/templates/circuits/provider.html:20 +#: netbox/templates/circuits/provideraccount.html:20 +#: netbox/templates/circuits/providernetwork.html:20 +#: netbox/templates/dcim/inc/cable_termination.html:51 msgid "Provider" msgstr "Proveedor" -#: circuits/forms/bulk_edit.py:80 circuits/forms/filtersets.py:91 -#: templates/circuits/providernetwork.html:28 +#: netbox/circuits/forms/bulk_edit.py:80 +#: netbox/circuits/forms/filtersets.py:91 +#: netbox/templates/circuits/providernetwork.html:28 msgid "Service ID" msgstr "ID de servicio" -#: circuits/forms/bulk_edit.py:100 circuits/forms/filtersets.py:107 -#: dcim/forms/bulk_edit.py:206 dcim/forms/bulk_edit.py:604 -#: dcim/forms/bulk_edit.py:804 dcim/forms/bulk_edit.py:1173 -#: dcim/forms/bulk_edit.py:1200 dcim/forms/bulk_edit.py:1678 -#: dcim/forms/filtersets.py:1064 dcim/forms/filtersets.py:1455 -#: dcim/forms/filtersets.py:1479 dcim/tables/devices.py:704 -#: dcim/tables/devices.py:761 dcim/tables/devices.py:1003 -#: dcim/tables/devicetypes.py:249 dcim/tables/devicetypes.py:264 -#: dcim/tables/racks.py:33 extras/forms/bulk_edit.py:270 -#: extras/tables/tables.py:443 templates/circuits/circuittype.html:30 -#: templates/dcim/cable.html:40 templates/dcim/devicerole.html:34 -#: templates/dcim/frontport.html:40 templates/dcim/inventoryitemrole.html:26 -#: templates/dcim/rackrole.html:30 templates/dcim/rearport.html:40 -#: templates/extras/tag.html:26 +#: netbox/circuits/forms/bulk_edit.py: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/templates/circuits/circuittype.html:30 +#: netbox/templates/dcim/cable.html:40 +#: netbox/templates/dcim/devicerole.html:34 +#: netbox/templates/dcim/frontport.html:40 +#: netbox/templates/dcim/inventoryitemrole.html:26 +#: netbox/templates/dcim/rackrole.html:30 +#: netbox/templates/dcim/rearport.html:40 netbox/templates/extras/tag.html:26 msgid "Color" msgstr "Color" -#: circuits/forms/bulk_edit.py:118 circuits/forms/bulk_import.py:87 -#: circuits/forms/filtersets.py:126 core/forms/bulk_edit.py:18 -#: core/forms/filtersets.py:33 core/tables/change_logging.py:32 -#: core/tables/data.py:20 core/tables/jobs.py:18 dcim/forms/bulk_edit.py:782 -#: dcim/forms/bulk_edit.py:921 dcim/forms/bulk_edit.py:989 -#: dcim/forms/bulk_edit.py:1008 dcim/forms/bulk_edit.py:1031 -#: dcim/forms/bulk_edit.py:1073 dcim/forms/bulk_edit.py:1117 -#: dcim/forms/bulk_edit.py:1168 dcim/forms/bulk_edit.py:1195 -#: dcim/forms/bulk_import.py:188 dcim/forms/bulk_import.py:260 -#: dcim/forms/bulk_import.py:708 dcim/forms/bulk_import.py:734 -#: dcim/forms/bulk_import.py:760 dcim/forms/bulk_import.py:780 -#: dcim/forms/bulk_import.py:863 dcim/forms/bulk_import.py:957 -#: dcim/forms/bulk_import.py:999 dcim/forms/bulk_import.py:1213 -#: dcim/forms/bulk_import.py:1376 dcim/forms/filtersets.py:955 -#: dcim/forms/filtersets.py:1054 dcim/forms/filtersets.py:1175 -#: dcim/forms/filtersets.py:1247 dcim/forms/filtersets.py:1272 -#: dcim/forms/filtersets.py:1296 dcim/forms/filtersets.py:1316 -#: dcim/forms/filtersets.py:1353 dcim/forms/filtersets.py:1450 -#: dcim/forms/filtersets.py:1474 dcim/forms/model_forms.py:703 -#: dcim/forms/model_forms.py:709 dcim/forms/object_import.py:84 -#: dcim/forms/object_import.py:113 dcim/forms/object_import.py:145 -#: dcim/tables/devices.py:178 dcim/tables/devices.py:814 -#: dcim/tables/power.py:77 dcim/tables/racks.py:138 -#: extras/forms/bulk_import.py:42 extras/tables/tables.py:405 -#: extras/tables/tables.py:465 netbox/tables/tables.py:240 -#: templates/circuits/circuit.html:30 templates/core/datasource.html:38 -#: templates/dcim/cable.html:15 templates/dcim/consoleport.html:36 -#: templates/dcim/consoleserverport.html:36 templates/dcim/frontport.html:36 -#: templates/dcim/interface.html:46 templates/dcim/interface.html:169 -#: templates/dcim/interface.html:311 templates/dcim/powerfeed.html:32 -#: templates/dcim/poweroutlet.html:36 templates/dcim/powerport.html:36 -#: templates/dcim/rearport.html:36 templates/extras/eventrule.html:74 -#: templates/virtualization/cluster.html:17 templates/vpn/l2vpn.html:22 -#: templates/wireless/inc/authentication_attrs.html:8 -#: templates/wireless/inc/wirelesslink_interface.html:14 -#: virtualization/forms/bulk_edit.py:60 virtualization/forms/bulk_import.py:41 -#: virtualization/forms/filtersets.py:54 -#: virtualization/forms/model_forms.py:62 virtualization/tables/clusters.py:66 -#: vpn/forms/bulk_edit.py:264 vpn/forms/bulk_import.py:264 -#: vpn/forms/filtersets.py:217 vpn/forms/model_forms.py:84 -#: vpn/forms/model_forms.py:119 vpn/forms/model_forms.py:231 +#: netbox/circuits/forms/bulk_edit.py: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/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/core/datasource.html:38 +#: netbox/templates/dcim/cable.html:15 +#: netbox/templates/dcim/consoleport.html:36 +#: netbox/templates/dcim/consoleserverport.html:36 +#: netbox/templates/dcim/frontport.html:36 +#: netbox/templates/dcim/interface.html:46 +#: netbox/templates/dcim/interface.html:169 +#: netbox/templates/dcim/interface.html:311 +#: netbox/templates/dcim/powerfeed.html:32 +#: netbox/templates/dcim/poweroutlet.html:36 +#: netbox/templates/dcim/powerport.html:36 +#: netbox/templates/dcim/rearport.html:36 +#: netbox/templates/extras/eventrule.html:74 +#: netbox/templates/virtualization/cluster.html:17 +#: netbox/templates/vpn/l2vpn.html:22 +#: netbox/templates/wireless/inc/authentication_attrs.html:8 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:14 +#: netbox/virtualization/forms/bulk_edit.py:60 +#: netbox/virtualization/forms/bulk_import.py:41 +#: netbox/virtualization/forms/filtersets.py:54 +#: netbox/virtualization/forms/model_forms.py:62 +#: netbox/virtualization/tables/clusters.py:66 +#: netbox/vpn/forms/bulk_edit.py:264 netbox/vpn/forms/bulk_import.py:264 +#: netbox/vpn/forms/filtersets.py:217 netbox/vpn/forms/model_forms.py:84 +#: netbox/vpn/forms/model_forms.py:119 netbox/vpn/forms/model_forms.py:231 msgid "Type" msgstr "Tipo" -#: circuits/forms/bulk_edit.py:128 circuits/forms/bulk_import.py:80 -#: circuits/forms/filtersets.py:139 circuits/forms/model_forms.py:98 +#: 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 msgid "Provider account" msgstr "Cuenta de proveedor" -#: circuits/forms/bulk_edit.py:136 circuits/forms/bulk_import.py:93 -#: circuits/forms/filtersets.py:150 core/forms/filtersets.py:38 -#: core/forms/filtersets.py:79 core/tables/data.py:23 core/tables/jobs.py:26 -#: core/tables/tasks.py:88 dcim/forms/bulk_edit.py:106 -#: dcim/forms/bulk_edit.py:181 dcim/forms/bulk_edit.py:351 -#: dcim/forms/bulk_edit.py:700 dcim/forms/bulk_edit.py:756 -#: dcim/forms/bulk_edit.py:788 dcim/forms/bulk_edit.py:915 -#: dcim/forms/bulk_edit.py:1701 dcim/forms/bulk_import.py:88 -#: dcim/forms/bulk_import.py:147 dcim/forms/bulk_import.py:248 -#: dcim/forms/bulk_import.py:505 dcim/forms/bulk_import.py:659 -#: dcim/forms/bulk_import.py:1207 dcim/forms/bulk_import.py:1371 -#: dcim/forms/bulk_import.py:1435 dcim/forms/filtersets.py:178 -#: dcim/forms/filtersets.py:237 dcim/forms/filtersets.py:359 -#: dcim/forms/filtersets.py:799 dcim/forms/filtersets.py:924 -#: dcim/forms/filtersets.py:958 dcim/forms/filtersets.py:1059 -#: dcim/forms/filtersets.py:1170 dcim/tables/devices.py:140 -#: dcim/tables/devices.py:817 dcim/tables/devices.py:1063 -#: dcim/tables/modules.py:69 dcim/tables/power.py:74 dcim/tables/racks.py:126 -#: dcim/tables/sites.py:82 dcim/tables/sites.py:138 -#: ipam/forms/bulk_edit.py:256 ipam/forms/bulk_edit.py:306 -#: ipam/forms/bulk_edit.py:354 ipam/forms/bulk_edit.py:506 -#: ipam/forms/bulk_import.py:192 ipam/forms/bulk_import.py:257 -#: ipam/forms/bulk_import.py:293 ipam/forms/bulk_import.py:450 -#: ipam/forms/filtersets.py:210 ipam/forms/filtersets.py:281 -#: ipam/forms/filtersets.py:355 ipam/forms/filtersets.py:501 -#: ipam/forms/model_forms.py:468 ipam/tables/ip.py:237 ipam/tables/ip.py:312 -#: ipam/tables/ip.py:363 ipam/tables/ip.py:426 ipam/tables/ip.py:453 -#: ipam/tables/vlans.py:126 ipam/tables/vlans.py:232 -#: templates/circuits/circuit.html:34 templates/core/datasource.html:46 -#: templates/core/job.html:48 templates/core/rq_task.html:81 -#: templates/core/system.html:18 templates/dcim/cable.html:19 -#: templates/dcim/device.html:178 templates/dcim/location.html:45 -#: templates/dcim/module.html:69 templates/dcim/powerfeed.html:36 -#: templates/dcim/rack.html:41 templates/dcim/site.html:43 -#: templates/extras/script_list.html:47 templates/ipam/ipaddress.html:37 -#: templates/ipam/iprange.html:54 templates/ipam/prefix.html:73 -#: templates/ipam/vlan.html:48 templates/virtualization/cluster.html:21 -#: templates/virtualization/virtualmachine.html:19 -#: templates/vpn/tunnel.html:25 templates/wireless/wirelesslan.html:22 -#: templates/wireless/wirelesslink.html:17 users/forms/filtersets.py:32 -#: users/forms/model_forms.py:194 virtualization/forms/bulk_edit.py:70 -#: virtualization/forms/bulk_edit.py:118 -#: virtualization/forms/bulk_import.py:54 -#: virtualization/forms/bulk_import.py:80 -#: virtualization/forms/filtersets.py:62 -#: virtualization/forms/filtersets.py:160 virtualization/tables/clusters.py:74 -#: virtualization/tables/virtualmachines.py:60 vpn/forms/bulk_edit.py:39 -#: vpn/forms/bulk_import.py:37 vpn/forms/filtersets.py:47 -#: vpn/tables/tunnels.py:48 wireless/forms/bulk_edit.py:43 -#: wireless/forms/bulk_edit.py:105 wireless/forms/bulk_import.py:43 -#: wireless/forms/bulk_import.py:84 wireless/forms/filtersets.py:49 -#: wireless/forms/filtersets.py:83 wireless/tables/wirelesslan.py:52 -#: wireless/tables/wirelesslink.py:20 +#: 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/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:69 +#: 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/templates/circuits/circuit.html:34 +#: 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/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/vlan.html:48 +#: netbox/templates/virtualization/cluster.html:21 +#: netbox/templates/virtualization/virtualmachine.html:19 +#: netbox/templates/vpn/tunnel.html:25 +#: netbox/templates/wireless/wirelesslan.html:22 +#: netbox/templates/wireless/wirelesslink.html:17 +#: netbox/users/forms/filtersets.py: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/tables/clusters.py:74 +#: netbox/virtualization/tables/virtualmachines.py:60 +#: netbox/vpn/forms/bulk_edit.py:39 netbox/vpn/forms/bulk_import.py:37 +#: netbox/vpn/forms/filtersets.py:47 netbox/vpn/tables/tunnels.py:48 +#: netbox/wireless/forms/bulk_edit.py:43 +#: netbox/wireless/forms/bulk_edit.py:105 +#: netbox/wireless/forms/bulk_import.py:43 +#: netbox/wireless/forms/bulk_import.py:84 +#: netbox/wireless/forms/filtersets.py:49 +#: netbox/wireless/forms/filtersets.py:83 +#: netbox/wireless/tables/wirelesslan.py:52 +#: netbox/wireless/tables/wirelesslink.py:20 msgid "Status" msgstr "Estado" -#: circuits/forms/bulk_edit.py:142 circuits/forms/bulk_edit.py:233 -#: circuits/forms/bulk_import.py:98 circuits/forms/bulk_import.py:158 -#: circuits/forms/filtersets.py:119 circuits/forms/filtersets.py:241 -#: dcim/forms/bulk_edit.py:122 dcim/forms/bulk_edit.py:187 -#: dcim/forms/bulk_edit.py:346 dcim/forms/bulk_edit.py:461 -#: dcim/forms/bulk_edit.py:690 dcim/forms/bulk_edit.py:794 -#: dcim/forms/bulk_edit.py:1706 dcim/forms/bulk_import.py:107 -#: dcim/forms/bulk_import.py:152 dcim/forms/bulk_import.py:241 -#: dcim/forms/bulk_import.py:334 dcim/forms/bulk_import.py:479 -#: dcim/forms/bulk_import.py:1219 dcim/forms/bulk_import.py:1428 -#: dcim/forms/filtersets.py:173 dcim/forms/filtersets.py:205 -#: dcim/forms/filtersets.py:323 dcim/forms/filtersets.py:399 -#: dcim/forms/filtersets.py:420 dcim/forms/filtersets.py:722 -#: dcim/forms/filtersets.py:916 dcim/forms/filtersets.py:978 -#: dcim/forms/filtersets.py:1008 dcim/forms/filtersets.py:1130 -#: dcim/tables/power.py:88 extras/filtersets.py:612 -#: extras/forms/filtersets.py:323 extras/forms/filtersets.py:396 -#: ipam/forms/bulk_edit.py:43 ipam/forms/bulk_edit.py:68 -#: ipam/forms/bulk_edit.py:112 ipam/forms/bulk_edit.py:141 -#: ipam/forms/bulk_edit.py:166 ipam/forms/bulk_edit.py:251 -#: ipam/forms/bulk_edit.py:301 ipam/forms/bulk_edit.py:349 -#: ipam/forms/bulk_edit.py:501 ipam/forms/bulk_import.py:38 -#: ipam/forms/bulk_import.py:67 ipam/forms/bulk_import.py:95 -#: ipam/forms/bulk_import.py:115 ipam/forms/bulk_import.py:135 -#: ipam/forms/bulk_import.py:164 ipam/forms/bulk_import.py:250 -#: ipam/forms/bulk_import.py:286 ipam/forms/bulk_import.py:443 -#: ipam/forms/filtersets.py:48 ipam/forms/filtersets.py:68 -#: ipam/forms/filtersets.py:100 ipam/forms/filtersets.py:120 -#: ipam/forms/filtersets.py:143 ipam/forms/filtersets.py:174 -#: ipam/forms/filtersets.py:267 ipam/forms/filtersets.py:310 -#: ipam/forms/filtersets.py:469 ipam/tables/ip.py:456 ipam/tables/vlans.py:229 -#: templates/circuits/circuit.html:38 templates/circuits/circuitgroup.html:36 -#: templates/dcim/cable.html:23 templates/dcim/device.html:79 -#: templates/dcim/location.html:49 templates/dcim/powerfeed.html:44 -#: templates/dcim/rack.html:32 templates/dcim/rackreservation.html:49 -#: templates/dcim/site.html:47 templates/dcim/virtualdevicecontext.html:52 -#: templates/ipam/aggregate.html:30 templates/ipam/asn.html:33 -#: templates/ipam/asnrange.html:29 templates/ipam/ipaddress.html:28 -#: templates/ipam/iprange.html:58 templates/ipam/prefix.html:29 -#: templates/ipam/routetarget.html:17 templates/ipam/vlan.html:39 -#: templates/ipam/vrf.html:20 templates/tenancy/tenant.html:17 -#: templates/virtualization/cluster.html:33 -#: templates/virtualization/virtualmachine.html:39 templates/vpn/l2vpn.html:30 -#: templates/vpn/tunnel.html:49 templates/wireless/wirelesslan.html:34 -#: templates/wireless/wirelesslink.html:25 tenancy/forms/forms.py:25 -#: tenancy/forms/forms.py:48 tenancy/forms/model_forms.py:52 -#: tenancy/tables/columns.py:64 virtualization/forms/bulk_edit.py:76 -#: virtualization/forms/bulk_edit.py:155 -#: virtualization/forms/bulk_import.py:66 -#: virtualization/forms/bulk_import.py:115 -#: virtualization/forms/filtersets.py:47 -#: virtualization/forms/filtersets.py:105 vpn/forms/bulk_edit.py:59 -#: vpn/forms/bulk_edit.py:269 vpn/forms/bulk_import.py:59 -#: vpn/forms/bulk_import.py:258 vpn/forms/filtersets.py:214 -#: wireless/forms/bulk_edit.py:63 wireless/forms/bulk_edit.py:110 -#: wireless/forms/bulk_import.py:55 wireless/forms/bulk_import.py:97 -#: wireless/forms/filtersets.py:35 wireless/forms/filtersets.py:75 +#: netbox/circuits/forms/bulk_edit.py: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/templates/circuits/circuitgroup.html:36 +#: 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 +#: netbox/templates/dcim/rackreservation.html:49 +#: netbox/templates/dcim/site.html:47 +#: netbox/templates/dcim/virtualdevicecontext.html:52 +#: netbox/templates/ipam/aggregate.html:30 netbox/templates/ipam/asn.html:33 +#: netbox/templates/ipam/asnrange.html:29 +#: netbox/templates/ipam/ipaddress.html:28 +#: netbox/templates/ipam/iprange.html:58 netbox/templates/ipam/prefix.html:29 +#: netbox/templates/ipam/routetarget.html:17 +#: netbox/templates/ipam/vlan.html:39 netbox/templates/ipam/vrf.html:20 +#: netbox/templates/tenancy/tenant.html:17 +#: netbox/templates/virtualization/cluster.html:33 +#: netbox/templates/virtualization/virtualmachine.html:39 +#: netbox/templates/vpn/l2vpn.html:30 netbox/templates/vpn/tunnel.html:49 +#: netbox/templates/wireless/wirelesslan.html:34 +#: netbox/templates/wireless/wirelesslink.html:25 +#: netbox/tenancy/forms/forms.py:25 netbox/tenancy/forms/forms.py:48 +#: netbox/tenancy/forms/model_forms.py:52 netbox/tenancy/tables/columns.py:64 +#: netbox/virtualization/forms/bulk_edit.py:76 +#: netbox/virtualization/forms/bulk_edit.py:155 +#: netbox/virtualization/forms/bulk_import.py:66 +#: netbox/virtualization/forms/bulk_import.py:115 +#: netbox/virtualization/forms/filtersets.py:47 +#: netbox/virtualization/forms/filtersets.py:105 +#: netbox/vpn/forms/bulk_edit.py:59 netbox/vpn/forms/bulk_edit.py:269 +#: netbox/vpn/forms/bulk_import.py:59 netbox/vpn/forms/bulk_import.py:258 +#: netbox/vpn/forms/filtersets.py:214 netbox/wireless/forms/bulk_edit.py:63 +#: netbox/wireless/forms/bulk_edit.py:110 +#: netbox/wireless/forms/bulk_import.py:55 +#: netbox/wireless/forms/bulk_import.py:97 +#: netbox/wireless/forms/filtersets.py:35 +#: netbox/wireless/forms/filtersets.py:75 msgid "Tenant" msgstr "Inquilino" -#: circuits/forms/bulk_edit.py:147 circuits/forms/filtersets.py:174 +#: netbox/circuits/forms/bulk_edit.py:147 +#: netbox/circuits/forms/filtersets.py:174 msgid "Install date" msgstr "Fecha de instalación" -#: circuits/forms/bulk_edit.py:152 circuits/forms/filtersets.py:179 +#: netbox/circuits/forms/bulk_edit.py:152 +#: netbox/circuits/forms/filtersets.py:179 msgid "Termination date" msgstr "Fecha de terminación" -#: circuits/forms/bulk_edit.py:158 circuits/forms/filtersets.py:186 +#: netbox/circuits/forms/bulk_edit.py:158 +#: netbox/circuits/forms/filtersets.py:186 msgid "Commit rate (Kbps)" msgstr "Velocidad de confirmación (Kbps)" -#: circuits/forms/bulk_edit.py:173 circuits/forms/model_forms.py:112 +#: netbox/circuits/forms/bulk_edit.py:173 +#: netbox/circuits/forms/model_forms.py:112 msgid "Service Parameters" msgstr "Parámetros de servicio" -#: circuits/forms/bulk_edit.py:174 circuits/forms/model_forms.py:113 -#: circuits/forms/model_forms.py:183 dcim/forms/model_forms.py:139 -#: dcim/forms/model_forms.py:181 dcim/forms/model_forms.py:266 -#: dcim/forms/model_forms.py:323 dcim/forms/model_forms.py:768 -#: dcim/forms/model_forms.py:1692 ipam/forms/model_forms.py:64 -#: ipam/forms/model_forms.py:81 ipam/forms/model_forms.py:115 -#: ipam/forms/model_forms.py:136 ipam/forms/model_forms.py:160 -#: ipam/forms/model_forms.py:232 ipam/forms/model_forms.py:261 -#: ipam/forms/model_forms.py:316 netbox/navigation/menu.py:24 -#: templates/dcim/device_edit.html:85 templates/dcim/htmx/cable_edit.html:72 -#: templates/ipam/ipaddress_bulk_add.html:27 templates/ipam/vlan_edit.html:22 -#: virtualization/forms/model_forms.py:80 -#: virtualization/forms/model_forms.py:222 vpn/forms/bulk_edit.py:78 -#: vpn/forms/filtersets.py:44 vpn/forms/model_forms.py:62 -#: vpn/forms/model_forms.py:147 vpn/forms/model_forms.py:411 -#: wireless/forms/model_forms.py:54 wireless/forms/model_forms.py:170 +#: 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/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/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 msgid "Tenancy" msgstr "Arrendamiento" -#: circuits/forms/bulk_edit.py:193 circuits/forms/bulk_edit.py:217 -#: circuits/forms/model_forms.py:155 circuits/tables/circuits.py:117 -#: templates/circuits/inc/circuit_termination_fields.html:62 -#: templates/circuits/providernetwork.html:17 +#: 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 "Red de proveedores" -#: circuits/forms/bulk_edit.py:199 +#: netbox/circuits/forms/bulk_edit.py:199 msgid "Port speed (Kbps)" msgstr "Velocidad del puerto (Kbps)" -#: circuits/forms/bulk_edit.py:203 +#: netbox/circuits/forms/bulk_edit.py:203 msgid "Upstream speed (Kbps)" msgstr "Velocidad de subida (Kbps)" -#: circuits/forms/bulk_edit.py:206 dcim/forms/bulk_edit.py:951 -#: dcim/forms/bulk_edit.py:1315 dcim/forms/bulk_edit.py:1332 -#: dcim/forms/bulk_edit.py:1349 dcim/forms/bulk_edit.py:1367 -#: dcim/forms/bulk_edit.py:1455 dcim/forms/bulk_edit.py:1594 -#: dcim/forms/bulk_edit.py:1611 +#: 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 msgid "Mark connected" msgstr "Marcar conectado" -#: circuits/forms/bulk_edit.py:219 circuits/forms/model_forms.py:157 -#: templates/circuits/inc/circuit_termination_fields.html:54 -#: templates/dcim/frontport.html:121 templates/dcim/interface.html:193 -#: templates/dcim/rearport.html:111 +#: netbox/circuits/forms/bulk_edit.py:219 +#: netbox/circuits/forms/model_forms.py:157 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:54 +#: netbox/templates/dcim/frontport.html:121 +#: netbox/templates/dcim/interface.html:193 +#: netbox/templates/dcim/rearport.html:111 msgid "Circuit Termination" msgstr "Terminación del circuito" -#: circuits/forms/bulk_edit.py:221 circuits/forms/model_forms.py:159 +#: netbox/circuits/forms/bulk_edit.py:221 +#: netbox/circuits/forms/model_forms.py:159 msgid "Termination Details" msgstr "Detalles de terminación" -#: circuits/forms/bulk_edit.py:251 circuits/forms/filtersets.py:268 -#: circuits/tables/circuits.py:168 dcim/forms/model_forms.py:551 -#: templates/circuits/circuitgroupassignment.html:30 -#: templates/dcim/device.html:133 templates/dcim/virtualchassis.html:68 -#: templates/dcim/virtualchassis_edit.html:56 -#: templates/ipam/inc/panels/fhrp_groups.html:26 -#: tenancy/forms/bulk_edit.py:147 tenancy/forms/filtersets.py:110 +#: netbox/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/templates/dcim/device.html:133 +#: netbox/templates/dcim/virtualchassis.html:68 +#: netbox/templates/dcim/virtualchassis_edit.html:56 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:26 +#: netbox/tenancy/forms/bulk_edit.py:147 +#: netbox/tenancy/forms/filtersets.py:110 msgid "Priority" msgstr "Prioridad" -#: circuits/forms/bulk_import.py:39 circuits/forms/bulk_import.py:54 -#: circuits/forms/bulk_import.py:77 +#: 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 "Proveedor asignado" -#: circuits/forms/bulk_import.py:83 +#: netbox/circuits/forms/bulk_import.py:83 msgid "Assigned provider account" msgstr "Cuenta de proveedor asignada" -#: circuits/forms/bulk_import.py:90 +#: netbox/circuits/forms/bulk_import.py:90 msgid "Type of circuit" msgstr "Tipo de circuito" -#: circuits/forms/bulk_import.py:95 dcim/forms/bulk_import.py:90 -#: dcim/forms/bulk_import.py:149 dcim/forms/bulk_import.py:250 -#: dcim/forms/bulk_import.py:507 dcim/forms/bulk_import.py:661 -#: dcim/forms/bulk_import.py:1373 ipam/forms/bulk_import.py:194 -#: ipam/forms/bulk_import.py:259 ipam/forms/bulk_import.py:295 -#: ipam/forms/bulk_import.py:452 virtualization/forms/bulk_import.py:56 -#: virtualization/forms/bulk_import.py:82 vpn/forms/bulk_import.py:39 -#: wireless/forms/bulk_import.py:45 +#: netbox/circuits/forms/bulk_import.py: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 "Estado operativo" -#: circuits/forms/bulk_import.py:102 circuits/forms/bulk_import.py:162 -#: dcim/forms/bulk_import.py:111 dcim/forms/bulk_import.py:156 -#: dcim/forms/bulk_import.py:338 dcim/forms/bulk_import.py:483 -#: dcim/forms/bulk_import.py:1223 dcim/forms/bulk_import.py:1368 -#: dcim/forms/bulk_import.py:1432 ipam/forms/bulk_import.py:42 -#: ipam/forms/bulk_import.py:71 ipam/forms/bulk_import.py:99 -#: ipam/forms/bulk_import.py:119 ipam/forms/bulk_import.py:139 -#: ipam/forms/bulk_import.py:168 ipam/forms/bulk_import.py:254 -#: ipam/forms/bulk_import.py:290 ipam/forms/bulk_import.py:447 -#: virtualization/forms/bulk_import.py:70 -#: virtualization/forms/bulk_import.py:119 vpn/forms/bulk_import.py:63 -#: wireless/forms/bulk_import.py:59 wireless/forms/bulk_import.py:101 +#: netbox/circuits/forms/bulk_import.py: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 "Inquilino asignado" -#: circuits/forms/bulk_import.py:120 -#: templates/circuits/inc/circuit_termination.html:6 -#: templates/circuits/inc/circuit_termination_fields.html:15 -#: templates/dcim/cable.html:68 templates/dcim/cable.html:72 -#: vpn/forms/bulk_import.py:100 vpn/forms/filtersets.py:77 +#: netbox/circuits/forms/bulk_import.py: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 "Terminación" -#: circuits/forms/bulk_import.py:130 circuits/forms/filtersets.py:147 -#: circuits/forms/filtersets.py:227 circuits/forms/model_forms.py:144 +#: 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 msgid "Provider network" msgstr "Red de proveedores" -#: circuits/forms/filtersets.py:30 circuits/forms/filtersets.py:118 -#: circuits/forms/filtersets.py:200 dcim/forms/bulk_edit.py:338 -#: dcim/forms/bulk_edit.py:441 dcim/forms/bulk_edit.py:682 -#: dcim/forms/bulk_edit.py:729 dcim/forms/bulk_edit.py:882 -#: dcim/forms/bulk_import.py:235 dcim/forms/bulk_import.py:315 -#: dcim/forms/bulk_import.py:546 dcim/forms/bulk_import.py:1317 -#: dcim/forms/bulk_import.py:1351 dcim/forms/filtersets.py:95 -#: dcim/forms/filtersets.py:322 dcim/forms/filtersets.py:356 -#: dcim/forms/filtersets.py:396 dcim/forms/filtersets.py:447 -#: dcim/forms/filtersets.py:719 dcim/forms/filtersets.py:762 -#: dcim/forms/filtersets.py:977 dcim/forms/filtersets.py:1006 -#: dcim/forms/filtersets.py:1026 dcim/forms/filtersets.py:1090 -#: dcim/forms/filtersets.py:1120 dcim/forms/filtersets.py:1129 -#: dcim/forms/filtersets.py:1240 dcim/forms/filtersets.py:1264 -#: dcim/forms/filtersets.py:1289 dcim/forms/filtersets.py:1308 -#: dcim/forms/filtersets.py:1331 dcim/forms/filtersets.py:1442 -#: dcim/forms/filtersets.py:1466 dcim/forms/filtersets.py:1490 -#: dcim/forms/filtersets.py:1508 dcim/forms/filtersets.py:1525 -#: dcim/forms/model_forms.py:180 dcim/forms/model_forms.py:243 -#: dcim/forms/model_forms.py:468 dcim/forms/model_forms.py:728 -#: dcim/tables/devices.py:157 dcim/tables/power.py:30 dcim/tables/racks.py:118 -#: dcim/tables/racks.py:212 extras/filtersets.py:536 -#: extras/forms/filtersets.py:320 ipam/forms/filtersets.py:173 -#: ipam/forms/filtersets.py:414 ipam/forms/filtersets.py:437 -#: ipam/forms/filtersets.py:467 templates/dcim/device.html:26 -#: templates/dcim/device_edit.html:30 -#: templates/dcim/inc/cable_termination.html:12 -#: templates/dcim/location.html:26 templates/dcim/powerpanel.html:26 -#: templates/dcim/rack.html:24 templates/dcim/rackreservation.html:32 -#: virtualization/forms/filtersets.py:46 -#: virtualization/forms/filtersets.py:100 wireless/forms/model_forms.py:87 -#: wireless/forms/model_forms.py:129 +#: netbox/circuits/forms/filtersets.py: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/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 msgid "Location" msgstr "Ubicación" -#: circuits/forms/filtersets.py:32 circuits/forms/filtersets.py:120 -#: dcim/forms/filtersets.py:144 dcim/forms/filtersets.py:158 -#: dcim/forms/filtersets.py:174 dcim/forms/filtersets.py:206 -#: dcim/forms/filtersets.py:328 dcim/forms/filtersets.py:400 -#: dcim/forms/filtersets.py:471 dcim/forms/filtersets.py:723 -#: dcim/forms/filtersets.py:1091 netbox/navigation/menu.py:31 -#: netbox/navigation/menu.py:33 tenancy/forms/filtersets.py:42 -#: tenancy/tables/columns.py:70 tenancy/tables/contacts.py:25 -#: tenancy/views.py:19 virtualization/forms/filtersets.py:37 -#: virtualization/forms/filtersets.py:48 -#: virtualization/forms/filtersets.py:106 +#: netbox/circuits/forms/filtersets.py: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/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/tables/contacts.py:25 netbox/tenancy/views.py:19 +#: netbox/virtualization/forms/filtersets.py:37 +#: netbox/virtualization/forms/filtersets.py:48 +#: netbox/virtualization/forms/filtersets.py:106 msgid "Contacts" msgstr "Contactos" -#: circuits/forms/filtersets.py:37 circuits/forms/filtersets.py:157 -#: dcim/forms/bulk_edit.py:112 dcim/forms/bulk_edit.py:313 -#: dcim/forms/bulk_edit.py:857 dcim/forms/bulk_import.py:93 -#: dcim/forms/filtersets.py:73 dcim/forms/filtersets.py:185 -#: dcim/forms/filtersets.py:211 dcim/forms/filtersets.py:334 -#: dcim/forms/filtersets.py:425 dcim/forms/filtersets.py:739 -#: dcim/forms/filtersets.py:983 dcim/forms/filtersets.py:1013 -#: dcim/forms/filtersets.py:1097 dcim/forms/filtersets.py:1136 -#: dcim/forms/filtersets.py:1576 dcim/forms/filtersets.py:1600 -#: dcim/forms/filtersets.py:1624 dcim/forms/model_forms.py:112 -#: dcim/forms/object_create.py:375 dcim/tables/devices.py:143 -#: dcim/tables/sites.py:85 extras/filtersets.py:503 -#: ipam/forms/bulk_edit.py:208 ipam/forms/bulk_edit.py:474 -#: ipam/forms/filtersets.py:217 ipam/forms/filtersets.py:422 -#: ipam/forms/filtersets.py:475 templates/dcim/device.html:18 -#: templates/dcim/rack.html:16 templates/dcim/rackreservation.html:22 -#: templates/dcim/region.html:26 templates/dcim/site.html:31 -#: templates/ipam/prefix.html:49 templates/ipam/vlan.html:16 -#: virtualization/forms/bulk_edit.py:81 virtualization/forms/filtersets.py:59 -#: virtualization/forms/filtersets.py:133 -#: virtualization/forms/model_forms.py:92 vpn/forms/filtersets.py:257 +#: netbox/circuits/forms/filtersets.py: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/templates/dcim/rackreservation.html:22 +#: netbox/templates/dcim/region.html:26 netbox/templates/dcim/site.html:31 +#: netbox/templates/ipam/prefix.html:49 netbox/templates/ipam/vlan.html:16 +#: netbox/virtualization/forms/bulk_edit.py:81 +#: netbox/virtualization/forms/filtersets.py:59 +#: netbox/virtualization/forms/filtersets.py:133 +#: netbox/virtualization/forms/model_forms.py:92 +#: netbox/vpn/forms/filtersets.py:257 msgid "Region" msgstr "Región" -#: circuits/forms/filtersets.py:42 circuits/forms/filtersets.py:162 -#: dcim/forms/bulk_edit.py:321 dcim/forms/bulk_edit.py:865 -#: dcim/forms/filtersets.py:78 dcim/forms/filtersets.py:190 -#: dcim/forms/filtersets.py:216 dcim/forms/filtersets.py:347 -#: dcim/forms/filtersets.py:430 dcim/forms/filtersets.py:744 -#: dcim/forms/filtersets.py:988 dcim/forms/filtersets.py:1102 -#: dcim/forms/filtersets.py:1141 dcim/forms/object_create.py:383 -#: extras/filtersets.py:520 ipam/forms/bulk_edit.py:213 -#: ipam/forms/bulk_edit.py:479 ipam/forms/filtersets.py:222 -#: ipam/forms/filtersets.py:427 ipam/forms/filtersets.py:480 -#: virtualization/forms/bulk_edit.py:86 virtualization/forms/filtersets.py:69 -#: virtualization/forms/filtersets.py:138 -#: virtualization/forms/model_forms.py:98 +#: netbox/circuits/forms/filtersets.py: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/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 msgid "Site group" msgstr "Grupo de sitios" -#: circuits/forms/filtersets.py:65 circuits/forms/filtersets.py:83 -#: circuits/forms/filtersets.py:102 circuits/forms/filtersets.py:117 -#: core/forms/filtersets.py:67 core/forms/filtersets.py:135 -#: dcim/forms/bulk_edit.py:828 dcim/forms/filtersets.py:172 -#: dcim/forms/filtersets.py:204 dcim/forms/filtersets.py:915 -#: dcim/forms/filtersets.py:1007 dcim/forms/filtersets.py:1131 -#: dcim/forms/filtersets.py:1239 dcim/forms/filtersets.py:1263 -#: dcim/forms/filtersets.py:1288 dcim/forms/filtersets.py:1307 -#: dcim/forms/filtersets.py:1327 dcim/forms/filtersets.py:1441 -#: dcim/forms/filtersets.py:1465 dcim/forms/filtersets.py:1489 -#: dcim/forms/filtersets.py:1507 dcim/forms/filtersets.py:1523 -#: extras/forms/bulk_edit.py:90 extras/forms/filtersets.py:44 -#: extras/forms/filtersets.py:134 extras/forms/filtersets.py:165 -#: extras/forms/filtersets.py:205 extras/forms/filtersets.py:221 -#: extras/forms/filtersets.py:252 extras/forms/filtersets.py:276 -#: extras/forms/filtersets.py:441 ipam/forms/filtersets.py:99 -#: ipam/forms/filtersets.py:266 ipam/forms/filtersets.py:307 -#: ipam/forms/filtersets.py:382 ipam/forms/filtersets.py:468 -#: ipam/forms/filtersets.py:527 ipam/forms/filtersets.py:545 -#: netbox/tables/tables.py:256 virtualization/forms/filtersets.py:45 -#: virtualization/forms/filtersets.py:103 -#: virtualization/forms/filtersets.py:198 -#: virtualization/forms/filtersets.py:243 vpn/forms/filtersets.py:213 -#: wireless/forms/bulk_edit.py:150 wireless/forms/filtersets.py:34 -#: wireless/forms/filtersets.py:74 +#: 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 "Atributos" -#: circuits/forms/filtersets.py:73 circuits/tables/circuits.py:63 -#: circuits/tables/providers.py:66 templates/circuits/circuit.html:22 -#: templates/circuits/provideraccount.html:24 +#: netbox/circuits/forms/filtersets.py:73 +#: netbox/circuits/tables/circuits.py:63 +#: netbox/circuits/tables/providers.py:66 +#: netbox/templates/circuits/circuit.html:22 +#: netbox/templates/circuits/provideraccount.html:24 msgid "Account" msgstr "Cuenta" -#: circuits/forms/filtersets.py:217 +#: netbox/circuits/forms/filtersets.py:217 msgid "Term Side" msgstr "Lado del término" -#: circuits/forms/filtersets.py:250 extras/forms/model_forms.py:582 -#: ipam/forms/filtersets.py:142 ipam/forms/filtersets.py:546 -#: ipam/forms/model_forms.py:323 templates/extras/configcontext.html:60 -#: templates/ipam/ipaddress.html:59 templates/ipam/vlan_edit.html:30 -#: tenancy/forms/filtersets.py:87 users/forms/model_forms.py:314 +#: 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/templates/extras/configcontext.html:60 +#: netbox/templates/ipam/ipaddress.html:59 +#: netbox/templates/ipam/vlan_edit.html:30 +#: netbox/tenancy/forms/filtersets.py:87 netbox/users/forms/model_forms.py:314 msgid "Assignment" msgstr "Asignación" -#: circuits/forms/filtersets.py:265 circuits/forms/model_forms.py:195 -#: circuits/tables/circuits.py:155 dcim/forms/bulk_edit.py:117 -#: dcim/forms/bulk_import.py:100 dcim/forms/model_forms.py:117 -#: dcim/tables/sites.py:89 extras/forms/filtersets.py:480 -#: ipam/filtersets.py:999 ipam/forms/bulk_edit.py:493 -#: ipam/forms/bulk_import.py:436 ipam/forms/model_forms.py:528 -#: ipam/tables/fhrp.py:67 ipam/tables/vlans.py:122 ipam/tables/vlans.py:226 -#: templates/circuits/circuitgroupassignment.html:22 -#: templates/dcim/interface.html:284 templates/dcim/site.html:37 -#: templates/ipam/inc/panels/fhrp_groups.html:23 templates/ipam/vlan.html:27 -#: templates/tenancy/contact.html:21 templates/tenancy/tenant.html:20 -#: templates/users/group.html:6 templates/users/group.html:14 -#: templates/virtualization/cluster.html:29 templates/vpn/tunnel.html:29 -#: templates/wireless/wirelesslan.html:18 tenancy/forms/bulk_edit.py:43 -#: tenancy/forms/bulk_edit.py:94 tenancy/forms/bulk_import.py:40 -#: tenancy/forms/bulk_import.py:81 tenancy/forms/filtersets.py:48 -#: tenancy/forms/filtersets.py:78 tenancy/forms/filtersets.py:97 -#: tenancy/forms/model_forms.py:45 tenancy/forms/model_forms.py:97 -#: tenancy/forms/model_forms.py:122 tenancy/tables/contacts.py:60 -#: tenancy/tables/contacts.py:107 tenancy/tables/tenants.py:42 -#: users/filtersets.py:62 users/filtersets.py:185 users/forms/filtersets.py:31 -#: users/forms/filtersets.py:37 users/forms/filtersets.py:79 -#: virtualization/forms/bulk_edit.py:65 virtualization/forms/bulk_import.py:47 -#: virtualization/forms/filtersets.py:85 -#: virtualization/forms/model_forms.py:66 virtualization/tables/clusters.py:70 -#: vpn/forms/bulk_edit.py:112 vpn/forms/bulk_import.py:158 -#: vpn/forms/filtersets.py:116 vpn/tables/crypto.py:31 -#: vpn/tables/tunnels.py:44 wireless/forms/bulk_edit.py:48 -#: wireless/forms/bulk_import.py:36 wireless/forms/filtersets.py:46 -#: wireless/forms/model_forms.py:40 wireless/tables/wirelesslan.py:48 +#: netbox/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:999 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/templates/circuits/circuitgroupassignment.html:22 +#: netbox/templates/dcim/interface.html:284 netbox/templates/dcim/site.html:37 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:23 +#: netbox/templates/ipam/vlan.html:27 netbox/templates/tenancy/contact.html:21 +#: netbox/templates/tenancy/tenant.html:20 netbox/templates/users/group.html:6 +#: netbox/templates/users/group.html:14 +#: netbox/templates/virtualization/cluster.html:29 +#: netbox/templates/vpn/tunnel.html:29 +#: netbox/templates/wireless/wirelesslan.html:18 +#: netbox/tenancy/forms/bulk_edit.py:43 netbox/tenancy/forms/bulk_edit.py:94 +#: netbox/tenancy/forms/bulk_import.py:40 +#: netbox/tenancy/forms/bulk_import.py:81 +#: netbox/tenancy/forms/filtersets.py:48 netbox/tenancy/forms/filtersets.py:78 +#: netbox/tenancy/forms/filtersets.py:97 +#: netbox/tenancy/forms/model_forms.py:45 +#: netbox/tenancy/forms/model_forms.py:97 +#: netbox/tenancy/forms/model_forms.py:122 +#: netbox/tenancy/tables/contacts.py:60 netbox/tenancy/tables/contacts.py:107 +#: netbox/tenancy/tables/tenants.py:42 netbox/users/filtersets.py: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/tables/clusters.py:70 +#: netbox/vpn/forms/bulk_edit.py:112 netbox/vpn/forms/bulk_import.py:158 +#: netbox/vpn/forms/filtersets.py:116 netbox/vpn/tables/crypto.py:31 +#: netbox/vpn/tables/tunnels.py:44 netbox/wireless/forms/bulk_edit.py:48 +#: netbox/wireless/forms/bulk_import.py:36 +#: netbox/wireless/forms/filtersets.py:46 +#: netbox/wireless/forms/model_forms.py:40 +#: netbox/wireless/tables/wirelesslan.py:48 msgid "Group" msgstr "Grupo" -#: circuits/forms/model_forms.py:182 templates/circuits/circuitgroup.html:25 +#: netbox/circuits/forms/model_forms.py:182 +#: netbox/templates/circuits/circuitgroup.html:25 msgid "Circuit Group" msgstr "Grupo de circuitos" -#: circuits/models/circuits.py:27 dcim/models/cables.py:67 -#: dcim/models/device_component_templates.py:517 -#: dcim/models/device_component_templates.py:617 -#: dcim/models/device_components.py:975 dcim/models/device_components.py:1049 -#: dcim/models/device_components.py:1204 dcim/models/devices.py:479 -#: dcim/models/racks.py:224 extras/models/tags.py:28 +#: 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/extras/models/tags.py:28 msgid "color" msgstr "color" -#: circuits/models/circuits.py:36 +#: netbox/circuits/models/circuits.py:36 msgid "circuit type" msgstr "tipo de circuito" -#: circuits/models/circuits.py:37 +#: netbox/circuits/models/circuits.py:37 msgid "circuit types" msgstr "tipos de circuitos" -#: circuits/models/circuits.py:48 +#: netbox/circuits/models/circuits.py:48 msgid "circuit ID" msgstr "ID de circuito" -#: circuits/models/circuits.py:49 +#: netbox/circuits/models/circuits.py:49 msgid "Unique circuit ID" msgstr "ID de circuito único" -#: circuits/models/circuits.py:69 core/models/data.py:52 -#: core/models/jobs.py:84 dcim/models/cables.py:49 dcim/models/devices.py:653 -#: dcim/models/devices.py:1173 dcim/models/devices.py:1399 -#: dcim/models/power.py:96 dcim/models/racks.py:297 dcim/models/sites.py:154 -#: dcim/models/sites.py:266 ipam/models/ip.py:253 ipam/models/ip.py:522 -#: ipam/models/ip.py:730 ipam/models/vlans.py:195 -#: virtualization/models/clusters.py:74 -#: virtualization/models/virtualmachines.py:84 vpn/models/tunnels.py:40 -#: wireless/models.py:95 wireless/models.py:159 +#: 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 msgid "status" msgstr "estado" -#: circuits/models/circuits.py:84 templates/core/plugin.html:20 +#: netbox/circuits/models/circuits.py:84 netbox/templates/core/plugin.html:20 msgid "installed" msgstr "instalada" -#: circuits/models/circuits.py:89 +#: netbox/circuits/models/circuits.py:89 msgid "terminates" msgstr "termina" -#: circuits/models/circuits.py:94 +#: netbox/circuits/models/circuits.py:94 msgid "commit rate (Kbps)" msgstr "velocidad de confirmación (Kbps)" -#: circuits/models/circuits.py:95 +#: netbox/circuits/models/circuits.py:95 msgid "Committed rate" msgstr "Tarifa comprometida" -#: circuits/models/circuits.py:137 +#: netbox/circuits/models/circuits.py:137 msgid "circuit" msgstr "circuito" -#: circuits/models/circuits.py:138 +#: netbox/circuits/models/circuits.py:138 msgid "circuits" msgstr "circuitos" -#: circuits/models/circuits.py:170 +#: netbox/circuits/models/circuits.py:170 msgid "circuit group" msgstr "grupo de circuitos" -#: circuits/models/circuits.py:171 +#: netbox/circuits/models/circuits.py:171 msgid "circuit groups" msgstr "grupos de circuitos" -#: circuits/models/circuits.py:195 ipam/models/fhrp.py:93 -#: tenancy/models/contacts.py:134 +#: netbox/circuits/models/circuits.py:195 netbox/ipam/models/fhrp.py:93 +#: netbox/tenancy/models/contacts.py:134 msgid "priority" msgstr "prioridad" -#: circuits/models/circuits.py:213 +#: netbox/circuits/models/circuits.py:213 msgid "Circuit group assignment" msgstr "Asignación de grupos de circuitos" -#: circuits/models/circuits.py:214 +#: netbox/circuits/models/circuits.py:214 msgid "Circuit group assignments" msgstr "Asignaciones de grupos de circuitos" -#: circuits/models/circuits.py:240 +#: netbox/circuits/models/circuits.py:240 msgid "termination" msgstr "terminación" -#: circuits/models/circuits.py:257 +#: netbox/circuits/models/circuits.py:257 msgid "port speed (Kbps)" msgstr "velocidad de puerto (Kbps)" -#: circuits/models/circuits.py:260 +#: netbox/circuits/models/circuits.py:260 msgid "Physical circuit speed" msgstr "Velocidad del circuito físico" -#: circuits/models/circuits.py:265 +#: netbox/circuits/models/circuits.py:265 msgid "upstream speed (Kbps)" msgstr "velocidad de subida (Kbps)" -#: circuits/models/circuits.py:266 +#: netbox/circuits/models/circuits.py:266 msgid "Upstream speed, if different from port speed" msgstr "Velocidad ascendente, si es diferente de la velocidad del puerto" -#: circuits/models/circuits.py:271 +#: netbox/circuits/models/circuits.py:271 msgid "cross-connect ID" msgstr "ID de conexión cruzada" -#: circuits/models/circuits.py:272 +#: netbox/circuits/models/circuits.py:272 msgid "ID of the local cross-connect" msgstr "ID de la conexión cruzada local" -#: circuits/models/circuits.py:277 +#: netbox/circuits/models/circuits.py:277 msgid "patch panel/port(s)" msgstr "panel de parche/puerto(s)" -#: circuits/models/circuits.py:278 +#: netbox/circuits/models/circuits.py:278 msgid "Patch panel ID and port number(s)" msgstr "ID del panel de conexiones y números de puerto" -#: circuits/models/circuits.py:281 -#: dcim/models/device_component_templates.py:61 -#: dcim/models/device_components.py:68 dcim/models/racks.py:685 -#: extras/models/configs.py:45 extras/models/configs.py:219 -#: extras/models/customfields.py:125 extras/models/models.py:61 -#: extras/models/models.py:158 extras/models/models.py:396 -#: extras/models/models.py:511 extras/models/notifications.py:131 -#: extras/models/staging.py:31 extras/models/tags.py:32 -#: netbox/models/__init__.py:110 netbox/models/__init__.py:145 -#: netbox/models/__init__.py:191 users/models/permissions.py:24 -#: users/models/tokens.py:57 users/models/users.py:33 -#: virtualization/models/virtualmachines.py:289 +#: 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/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 msgid "description" msgstr "descripción" -#: circuits/models/circuits.py:294 +#: netbox/circuits/models/circuits.py:294 msgid "circuit termination" msgstr "terminación de circuito" -#: circuits/models/circuits.py:295 +#: netbox/circuits/models/circuits.py:295 msgid "circuit terminations" msgstr "terminaciones de circuitos" -#: circuits/models/circuits.py:308 +#: netbox/circuits/models/circuits.py:308 msgid "" "A circuit termination must attach to either a site or a provider network." msgstr "" "Una terminación de circuito debe conectarse a un sitio o a una red de " "proveedores." -#: circuits/models/circuits.py:310 +#: netbox/circuits/models/circuits.py:310 msgid "" "A circuit termination cannot attach to both a site and a provider network." msgstr "" "Una terminación de circuito no puede conectarse tanto a un sitio como a una " "red de proveedores." -#: circuits/models/providers.py:22 circuits/models/providers.py:66 -#: circuits/models/providers.py:104 core/models/data.py:39 -#: core/models/jobs.py:45 dcim/models/device_component_templates.py:43 -#: dcim/models/device_components.py:53 dcim/models/devices.py:593 -#: dcim/models/devices.py:1330 dcim/models/devices.py:1395 -#: dcim/models/power.py:39 dcim/models/power.py:92 dcim/models/racks.py:262 -#: dcim/models/sites.py:138 extras/models/configs.py:36 -#: extras/models/configs.py:215 extras/models/customfields.py:92 -#: extras/models/models.py:56 extras/models/models.py:153 -#: extras/models/models.py:296 extras/models/models.py:392 -#: extras/models/models.py:501 extras/models/models.py:596 -#: extras/models/notifications.py:126 extras/models/scripts.py:30 -#: extras/models/staging.py:26 ipam/models/asns.py:18 ipam/models/fhrp.py:25 -#: ipam/models/services.py:52 ipam/models/services.py:88 -#: ipam/models/vlans.py:36 ipam/models/vlans.py:184 ipam/models/vrfs.py:22 -#: ipam/models/vrfs.py:79 netbox/models/__init__.py:137 -#: netbox/models/__init__.py:181 tenancy/models/contacts.py:64 -#: tenancy/models/tenants.py:20 tenancy/models/tenants.py:45 -#: users/models/permissions.py:20 users/models/users.py:28 -#: virtualization/models/clusters.py:57 -#: virtualization/models/virtualmachines.py:72 -#: virtualization/models/virtualmachines.py:279 vpn/models/crypto.py:24 -#: vpn/models/crypto.py:71 vpn/models/crypto.py:131 vpn/models/crypto.py:183 -#: vpn/models/crypto.py:221 vpn/models/l2vpn.py:22 vpn/models/tunnels.py:35 -#: wireless/models.py:51 +#: 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/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/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 msgid "name" msgstr "nombre" -#: circuits/models/providers.py:25 +#: netbox/circuits/models/providers.py:25 msgid "Full name of the provider" msgstr "Nombre completo del proveedor" -#: circuits/models/providers.py:28 dcim/models/devices.py:86 -#: dcim/models/racks.py:137 dcim/models/sites.py:149 -#: extras/models/models.py:506 ipam/models/asns.py:23 ipam/models/vlans.py:40 -#: netbox/models/__init__.py:141 netbox/models/__init__.py:186 -#: tenancy/models/tenants.py:25 tenancy/models/tenants.py:49 -#: vpn/models/l2vpn.py:27 wireless/models.py:56 +#: netbox/circuits/models/providers.py:28 netbox/dcim/models/devices.py:86 +#: 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 msgid "slug" msgstr "pegar" -#: circuits/models/providers.py:42 +#: netbox/circuits/models/providers.py:42 msgid "provider" msgstr "proveedora" -#: circuits/models/providers.py:43 +#: netbox/circuits/models/providers.py:43 msgid "providers" msgstr "proveedores" -#: circuits/models/providers.py:63 +#: netbox/circuits/models/providers.py:63 msgid "account ID" msgstr "ID de cuenta" -#: circuits/models/providers.py:86 +#: netbox/circuits/models/providers.py:86 msgid "provider account" msgstr "cuenta de proveedor" -#: circuits/models/providers.py:87 +#: netbox/circuits/models/providers.py:87 msgid "provider accounts" msgstr "cuentas de proveedores" -#: circuits/models/providers.py:115 +#: netbox/circuits/models/providers.py:115 msgid "service ID" msgstr "ID de servicio" -#: circuits/models/providers.py:126 +#: netbox/circuits/models/providers.py:126 msgid "provider network" msgstr "red de proveedores" -#: circuits/models/providers.py:127 +#: netbox/circuits/models/providers.py:127 msgid "provider networks" msgstr "redes de proveedores" -#: circuits/tables/circuits.py:32 circuits/tables/circuits.py:132 -#: circuits/tables/providers.py:18 circuits/tables/providers.py:69 -#: circuits/tables/providers.py:99 core/tables/data.py:16 -#: core/tables/jobs.py:14 core/tables/plugins.py:44 core/tables/tasks.py:11 -#: core/tables/tasks.py:115 dcim/forms/filtersets.py:63 -#: dcim/forms/object_create.py:43 dcim/tables/devices.py:52 -#: dcim/tables/devices.py:92 dcim/tables/devices.py:134 -#: dcim/tables/devices.py:289 dcim/tables/devices.py:392 -#: dcim/tables/devices.py:433 dcim/tables/devices.py:482 -#: dcim/tables/devices.py:531 dcim/tables/devices.py:648 -#: dcim/tables/devices.py:731 dcim/tables/devices.py:778 -#: dcim/tables/devices.py:841 dcim/tables/devices.py:911 -#: dcim/tables/devices.py:974 dcim/tables/devices.py:994 -#: dcim/tables/devices.py:1023 dcim/tables/devices.py:1053 -#: dcim/tables/devicetypes.py:31 dcim/tables/power.py:22 -#: dcim/tables/power.py:62 dcim/tables/racks.py:24 dcim/tables/racks.py:113 -#: dcim/tables/sites.py:24 dcim/tables/sites.py:51 dcim/tables/sites.py:78 -#: dcim/tables/sites.py:130 extras/forms/filtersets.py:213 -#: extras/tables/tables.py:58 extras/tables/tables.py:122 -#: extras/tables/tables.py:155 extras/tables/tables.py:180 -#: extras/tables/tables.py:246 extras/tables/tables.py:361 -#: extras/tables/tables.py:378 extras/tables/tables.py:401 -#: extras/tables/tables.py:439 extras/tables/tables.py:491 -#: extras/tables/tables.py:514 ipam/forms/bulk_edit.py:407 -#: ipam/forms/filtersets.py:386 ipam/tables/asn.py:16 ipam/tables/ip.py:85 -#: ipam/tables/ip.py:160 ipam/tables/services.py:15 ipam/tables/services.py:40 -#: ipam/tables/vlans.py:64 ipam/tables/vlans.py:114 ipam/tables/vrfs.py:26 -#: ipam/tables/vrfs.py:68 templates/circuits/circuitgroup.html:28 -#: templates/circuits/circuittype.html:22 -#: templates/circuits/provideraccount.html:28 -#: templates/circuits/providernetwork.html:24 -#: templates/core/datasource.html:34 templates/core/job.html:44 -#: templates/core/plugin.html:54 templates/core/rq_worker.html:43 -#: templates/dcim/consoleport.html:28 templates/dcim/consoleserverport.html:28 -#: templates/dcim/devicebay.html:24 templates/dcim/devicerole.html:26 -#: templates/dcim/frontport.html:28 -#: templates/dcim/inc/interface_vlans_table.html:5 -#: templates/dcim/inc/panels/inventory_items.html:18 -#: templates/dcim/interface.html:38 templates/dcim/interface.html:165 -#: templates/dcim/inventoryitem.html:28 -#: templates/dcim/inventoryitemrole.html:18 templates/dcim/location.html:29 -#: templates/dcim/manufacturer.html:36 templates/dcim/modulebay.html:30 -#: templates/dcim/platform.html:29 templates/dcim/poweroutlet.html:28 -#: templates/dcim/powerport.html:28 templates/dcim/rackrole.html:22 -#: templates/dcim/rearport.html:28 templates/dcim/region.html:29 -#: templates/dcim/sitegroup.html:29 -#: templates/dcim/virtualdevicecontext.html:18 -#: templates/extras/configcontext.html:13 -#: templates/extras/configtemplate.html:13 -#: templates/extras/customfield.html:13 templates/extras/customlink.html:13 -#: templates/extras/eventrule.html:13 templates/extras/exporttemplate.html:15 -#: templates/extras/notificationgroup.html:14 -#: templates/extras/savedfilter.html:13 templates/extras/script_list.html:44 -#: templates/extras/tag.html:14 templates/extras/webhook.html:13 -#: templates/ipam/asnrange.html:15 templates/ipam/fhrpgroup.html:30 -#: templates/ipam/rir.html:22 templates/ipam/role.html:22 -#: templates/ipam/routetarget.html:13 templates/ipam/service.html:24 -#: templates/ipam/servicetemplate.html:15 templates/ipam/vlan.html:35 -#: templates/ipam/vlangroup.html:30 templates/tenancy/contact.html:25 -#: templates/tenancy/contactgroup.html:21 -#: templates/tenancy/contactrole.html:18 templates/tenancy/tenantgroup.html:29 -#: templates/users/group.html:17 templates/users/objectpermission.html:17 -#: templates/virtualization/cluster.html:13 -#: templates/virtualization/clustergroup.html:22 -#: templates/virtualization/clustertype.html:22 -#: templates/virtualization/virtualdisk.html:25 -#: templates/virtualization/virtualmachine.html:15 -#: templates/virtualization/vminterface.html:25 -#: templates/vpn/ikepolicy.html:13 templates/vpn/ikeproposal.html:13 -#: templates/vpn/ipsecpolicy.html:13 templates/vpn/ipsecprofile.html:13 -#: templates/vpn/ipsecprofile.html:36 templates/vpn/ipsecprofile.html:69 -#: templates/vpn/ipsecproposal.html:13 templates/vpn/l2vpn.html:14 -#: templates/vpn/tunnel.html:21 templates/vpn/tunnelgroup.html:26 -#: templates/wireless/wirelesslangroup.html:29 tenancy/tables/contacts.py:19 -#: tenancy/tables/contacts.py:41 tenancy/tables/contacts.py:56 -#: tenancy/tables/tenants.py:16 tenancy/tables/tenants.py:38 -#: users/tables.py:62 users/tables.py:76 -#: virtualization/forms/bulk_create.py:20 -#: virtualization/forms/object_create.py:13 -#: virtualization/forms/object_create.py:23 -#: virtualization/tables/clusters.py:17 virtualization/tables/clusters.py:39 -#: virtualization/tables/clusters.py:62 -#: virtualization/tables/virtualmachines.py:55 -#: virtualization/tables/virtualmachines.py:139 -#: virtualization/tables/virtualmachines.py:194 vpn/tables/crypto.py:18 -#: vpn/tables/crypto.py:57 vpn/tables/crypto.py:93 vpn/tables/crypto.py:129 -#: vpn/tables/crypto.py:158 vpn/tables/l2vpn.py:23 vpn/tables/tunnels.py:18 -#: vpn/tables/tunnels.py:40 wireless/tables/wirelesslan.py:18 -#: wireless/tables/wirelesslan.py:79 +#: netbox/circuits/tables/circuits.py:32 +#: netbox/circuits/tables/circuits.py:132 +#: netbox/circuits/tables/providers.py:18 +#: netbox/circuits/tables/providers.py:69 +#: netbox/circuits/tables/providers.py:99 netbox/core/tables/data.py:16 +#: netbox/core/tables/jobs.py:14 netbox/core/tables/plugins.py: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/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/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/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/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 +#: netbox/templates/dcim/consoleserverport.html:28 +#: netbox/templates/dcim/devicebay.html:24 +#: netbox/templates/dcim/devicerole.html:26 +#: netbox/templates/dcim/frontport.html:28 +#: netbox/templates/dcim/inc/interface_vlans_table.html:5 +#: netbox/templates/dcim/inc/panels/inventory_items.html:18 +#: netbox/templates/dcim/interface.html:38 +#: netbox/templates/dcim/interface.html:165 +#: netbox/templates/dcim/inventoryitem.html:28 +#: netbox/templates/dcim/inventoryitemrole.html:18 +#: netbox/templates/dcim/location.html:29 +#: netbox/templates/dcim/manufacturer.html:36 +#: netbox/templates/dcim/modulebay.html:30 +#: netbox/templates/dcim/platform.html:29 +#: netbox/templates/dcim/poweroutlet.html:28 +#: netbox/templates/dcim/powerport.html:28 +#: netbox/templates/dcim/rackrole.html:22 +#: netbox/templates/dcim/rearport.html:28 netbox/templates/dcim/region.html:29 +#: netbox/templates/dcim/sitegroup.html:29 +#: netbox/templates/dcim/virtualdevicecontext.html:18 +#: netbox/templates/extras/configcontext.html:13 +#: netbox/templates/extras/configtemplate.html:13 +#: netbox/templates/extras/customfield.html:13 +#: netbox/templates/extras/customlink.html:13 +#: netbox/templates/extras/eventrule.html:13 +#: netbox/templates/extras/exporttemplate.html:15 +#: netbox/templates/extras/notificationgroup.html:14 +#: netbox/templates/extras/savedfilter.html:13 +#: netbox/templates/extras/script_list.html:45 +#: netbox/templates/extras/tag.html:14 netbox/templates/extras/webhook.html:13 +#: netbox/templates/ipam/asnrange.html:15 +#: netbox/templates/ipam/fhrpgroup.html:30 netbox/templates/ipam/rir.html:22 +#: netbox/templates/ipam/role.html:22 +#: netbox/templates/ipam/routetarget.html:13 +#: netbox/templates/ipam/service.html:24 +#: netbox/templates/ipam/servicetemplate.html:15 +#: netbox/templates/ipam/vlan.html:35 netbox/templates/ipam/vlangroup.html:30 +#: netbox/templates/tenancy/contact.html:25 +#: netbox/templates/tenancy/contactgroup.html:21 +#: netbox/templates/tenancy/contactrole.html:18 +#: netbox/templates/tenancy/tenantgroup.html:29 +#: netbox/templates/users/group.html:17 +#: netbox/templates/users/objectpermission.html:17 +#: netbox/templates/virtualization/cluster.html:13 +#: netbox/templates/virtualization/clustergroup.html:22 +#: netbox/templates/virtualization/clustertype.html:22 +#: netbox/templates/virtualization/virtualdisk.html:25 +#: netbox/templates/virtualization/virtualmachine.html:15 +#: netbox/templates/virtualization/vminterface.html:25 +#: netbox/templates/vpn/ikepolicy.html:13 +#: netbox/templates/vpn/ikeproposal.html:13 +#: netbox/templates/vpn/ipsecpolicy.html:13 +#: netbox/templates/vpn/ipsecprofile.html:13 +#: netbox/templates/vpn/ipsecprofile.html:36 +#: netbox/templates/vpn/ipsecprofile.html:69 +#: netbox/templates/vpn/ipsecproposal.html:13 +#: netbox/templates/vpn/l2vpn.html:14 netbox/templates/vpn/tunnel.html:21 +#: netbox/templates/vpn/tunnelgroup.html:26 +#: netbox/templates/wireless/wirelesslangroup.html:29 +#: netbox/tenancy/tables/contacts.py:19 netbox/tenancy/tables/contacts.py:41 +#: netbox/tenancy/tables/contacts.py:56 netbox/tenancy/tables/tenants.py:16 +#: netbox/tenancy/tables/tenants.py:38 netbox/users/tables.py:62 +#: netbox/users/tables.py:76 netbox/virtualization/forms/bulk_create.py:20 +#: netbox/virtualization/forms/object_create.py:13 +#: netbox/virtualization/forms/object_create.py:23 +#: netbox/virtualization/tables/clusters.py:17 +#: netbox/virtualization/tables/clusters.py:39 +#: netbox/virtualization/tables/clusters.py:62 +#: netbox/virtualization/tables/virtualmachines.py:55 +#: netbox/virtualization/tables/virtualmachines.py:139 +#: netbox/virtualization/tables/virtualmachines.py:194 +#: netbox/vpn/tables/crypto.py:18 netbox/vpn/tables/crypto.py:57 +#: netbox/vpn/tables/crypto.py:93 netbox/vpn/tables/crypto.py:129 +#: netbox/vpn/tables/crypto.py:158 netbox/vpn/tables/l2vpn.py:23 +#: netbox/vpn/tables/tunnels.py:18 netbox/vpn/tables/tunnels.py:40 +#: netbox/wireless/tables/wirelesslan.py:18 +#: netbox/wireless/tables/wirelesslan.py:79 msgid "Name" msgstr "Nombre" -#: circuits/tables/circuits.py:41 circuits/tables/circuits.py:138 -#: circuits/tables/providers.py:45 circuits/tables/providers.py:79 -#: netbox/navigation/menu.py:266 netbox/navigation/menu.py:270 -#: netbox/navigation/menu.py:272 templates/circuits/provider.html:57 -#: templates/circuits/provideraccount.html:44 -#: templates/circuits/providernetwork.html:50 +#: 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/templates/circuits/provider.html:57 +#: netbox/templates/circuits/provideraccount.html:44 +#: netbox/templates/circuits/providernetwork.html:50 msgid "Circuits" msgstr "Circuitos" -#: circuits/tables/circuits.py:55 templates/circuits/circuit.html:26 +#: netbox/circuits/tables/circuits.py:55 +#: netbox/templates/circuits/circuit.html:26 msgid "Circuit ID" msgstr "ID de circuito" -#: circuits/tables/circuits.py:69 wireless/forms/model_forms.py:160 +#: netbox/circuits/tables/circuits.py:69 +#: netbox/wireless/forms/model_forms.py:160 msgid "Side A" msgstr "Lado A" -#: circuits/tables/circuits.py:74 +#: netbox/circuits/tables/circuits.py:74 msgid "Side Z" msgstr "Lado Z" -#: circuits/tables/circuits.py:77 templates/circuits/circuit.html:55 +#: netbox/circuits/tables/circuits.py:77 +#: netbox/templates/circuits/circuit.html:55 msgid "Commit Rate" msgstr "Tasa de compromiso" -#: circuits/tables/circuits.py:80 circuits/tables/providers.py:48 -#: circuits/tables/providers.py:82 circuits/tables/providers.py:107 -#: dcim/tables/devices.py:1036 dcim/tables/devicetypes.py:92 -#: dcim/tables/modules.py:29 dcim/tables/modules.py:72 dcim/tables/power.py:39 -#: dcim/tables/power.py:96 dcim/tables/racks.py:84 dcim/tables/racks.py:145 -#: dcim/tables/racks.py:225 dcim/tables/sites.py:108 -#: extras/tables/tables.py:582 ipam/tables/asn.py:69 ipam/tables/fhrp.py:34 -#: ipam/tables/ip.py:136 ipam/tables/ip.py:275 ipam/tables/ip.py:329 -#: ipam/tables/ip.py:397 ipam/tables/services.py:24 ipam/tables/services.py:54 -#: ipam/tables/vlans.py:145 ipam/tables/vrfs.py:47 ipam/tables/vrfs.py:72 -#: templates/dcim/htmx/cable_edit.html:89 templates/generic/bulk_edit.html:86 -#: templates/inc/panels/comments.html:5 tenancy/tables/contacts.py:68 -#: tenancy/tables/tenants.py:46 utilities/forms/fields/fields.py:29 -#: virtualization/tables/clusters.py:91 -#: virtualization/tables/virtualmachines.py:82 vpn/tables/crypto.py:37 -#: vpn/tables/crypto.py:74 vpn/tables/crypto.py:109 vpn/tables/crypto.py:140 -#: vpn/tables/crypto.py:173 vpn/tables/l2vpn.py:37 vpn/tables/tunnels.py:61 -#: wireless/tables/wirelesslan.py:27 wireless/tables/wirelesslan.py:58 +#: netbox/circuits/tables/circuits.py: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:72 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/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/vpn/tables/crypto.py:37 netbox/vpn/tables/crypto.py:74 +#: netbox/vpn/tables/crypto.py:109 netbox/vpn/tables/crypto.py:140 +#: netbox/vpn/tables/crypto.py:173 netbox/vpn/tables/l2vpn.py:37 +#: netbox/vpn/tables/tunnels.py:61 netbox/wireless/tables/wirelesslan.py:27 +#: netbox/wireless/tables/wirelesslan.py:58 msgid "Comments" msgstr "Comentarios" -#: circuits/tables/circuits.py:86 templates/tenancy/contact.html:84 -#: tenancy/tables/contacts.py:73 +#: netbox/circuits/tables/circuits.py:86 +#: netbox/templates/tenancy/contact.html:84 +#: netbox/tenancy/tables/contacts.py:73 msgid "Assignments" msgstr "Asignaciones" -#: circuits/tables/providers.py:23 +#: netbox/circuits/tables/providers.py:23 msgid "Accounts" msgstr "Cuentas" -#: circuits/tables/providers.py:29 +#: netbox/circuits/tables/providers.py:29 msgid "Account Count" msgstr "Recuento de cuentas" -#: circuits/tables/providers.py:39 dcim/tables/sites.py:100 +#: netbox/circuits/tables/providers.py:39 netbox/dcim/tables/sites.py:100 msgid "ASN Count" msgstr "Recuento de ASN" -#: circuits/views.py:331 +#: netbox/circuits/views.py:331 #, python-brace-format msgid "No terminations have been defined for circuit {circuit}." msgstr "No se han definido terminaciones para el circuito {circuit}." -#: circuits/views.py:380 +#: netbox/circuits/views.py:380 #, python-brace-format msgid "Swapped terminations for circuit {circuit}." msgstr "Terminaciones intercambiadas por circuito {circuit}." -#: core/api/views.py:39 +#: netbox/core/api/views.py:39 msgid "This user does not have permission to synchronize this data source." msgstr "Este usuario no tiene permiso para sincronizar esta fuente de datos." -#: core/choices.py:18 +#: netbox/core/choices.py:18 msgid "New" msgstr "Nuevo" -#: core/choices.py:19 core/constants.py:18 core/tables/tasks.py:15 -#: templates/core/rq_task.html:77 +#: netbox/core/choices.py:19 netbox/core/constants.py:18 +#: netbox/core/tables/tasks.py:15 netbox/templates/core/rq_task.html:77 msgid "Queued" msgstr "En cola" -#: core/choices.py:20 +#: netbox/core/choices.py:20 msgid "Syncing" msgstr "Sincronización" -#: core/choices.py:21 core/choices.py:57 core/tables/jobs.py:41 -#: templates/core/job.html:86 +#: netbox/core/choices.py:21 netbox/core/choices.py:57 +#: netbox/core/tables/jobs.py:41 netbox/templates/core/job.html:86 msgid "Completed" msgstr "Completado" -#: core/choices.py:22 core/choices.py:59 core/constants.py:20 -#: core/tables/tasks.py:34 dcim/choices.py:187 dcim/choices.py:239 -#: dcim/choices.py:1607 virtualization/choices.py:47 +#: netbox/core/choices.py:22 netbox/core/choices.py:59 +#: netbox/core/constants.py:20 netbox/core/tables/tasks.py:34 +#: netbox/dcim/choices.py:187 netbox/dcim/choices.py:239 +#: netbox/dcim/choices.py:1609 netbox/virtualization/choices.py:47 msgid "Failed" msgstr "Falló" -#: core/choices.py:35 netbox/navigation/menu.py:335 -#: netbox/navigation/menu.py:339 templates/extras/script/base.html:14 -#: templates/extras/script_list.html:7 templates/extras/script_list.html:12 -#: templates/extras/script_result.html:17 +#: netbox/core/choices.py:35 netbox/netbox/navigation/menu.py:335 +#: netbox/netbox/navigation/menu.py:339 +#: netbox/templates/extras/script/base.html:14 +#: netbox/templates/extras/script_list.html:7 +#: netbox/templates/extras/script_list.html:12 +#: netbox/templates/extras/script_result.html:17 msgid "Scripts" msgstr "Guiones" -#: core/choices.py:36 templates/extras/report/base.html:13 +#: netbox/core/choices.py:36 netbox/templates/extras/report/base.html:13 msgid "Reports" msgstr "Informes" -#: core/choices.py:54 +#: netbox/core/choices.py:54 msgid "Pending" msgstr "Pendiente" -#: core/choices.py:55 core/constants.py:23 core/tables/jobs.py:32 -#: core/tables/tasks.py:38 templates/core/job.html:73 +#: netbox/core/choices.py:55 netbox/core/constants.py:23 +#: netbox/core/tables/jobs.py:32 netbox/core/tables/tasks.py:38 +#: netbox/templates/core/job.html:73 msgid "Scheduled" msgstr "Programado" -#: core/choices.py:56 +#: netbox/core/choices.py:56 msgid "Running" msgstr "Corriendo" -#: core/choices.py:58 +#: netbox/core/choices.py:58 msgid "Errored" msgstr "Erróneo" -#: core/choices.py:87 core/tables/plugins.py:63 -#: templates/generic/object.html:61 +#: netbox/core/choices.py:87 netbox/core/tables/plugins.py:63 +#: netbox/templates/generic/object.html:61 msgid "Updated" msgstr "Actualizado" -#: core/choices.py:88 +#: netbox/core/choices.py:88 msgid "Deleted" msgstr "Eliminado" -#: core/constants.py:19 core/tables/tasks.py:30 +#: netbox/core/constants.py:19 netbox/core/tables/tasks.py:30 msgid "Finished" msgstr "Terminado" -#: core/constants.py:21 core/tables/jobs.py:38 templates/core/job.html:82 -#: templates/extras/htmx/script_result.html:8 +#: netbox/core/constants.py:21 netbox/core/tables/jobs.py:38 +#: netbox/templates/core/job.html:82 +#: netbox/templates/extras/htmx/script_result.html:8 msgid "Started" msgstr "Empezado" -#: core/constants.py:22 core/tables/tasks.py:26 +#: netbox/core/constants.py:22 netbox/core/tables/tasks.py:26 msgid "Deferred" msgstr "Aplazado" -#: core/constants.py:24 +#: netbox/core/constants.py:24 msgid "Stopped" msgstr "Detenido" -#: core/constants.py:25 +#: netbox/core/constants.py:25 msgid "Cancelled" msgstr "Cancelado" -#: core/data_backends.py:32 core/tables/plugins.py:51 -#: templates/core/plugin.html:88 templates/dcim/interface.html:216 +#: netbox/core/data_backends.py:32 netbox/core/tables/plugins.py:51 +#: netbox/templates/core/plugin.html:88 +#: netbox/templates/dcim/interface.html:216 msgid "Local" msgstr "Local" -#: core/data_backends.py:50 core/tables/change_logging.py:20 -#: templates/account/profile.html:15 templates/users/user.html:17 -#: users/tables.py:31 +#: netbox/core/data_backends.py:50 netbox/core/tables/change_logging.py:20 +#: netbox/templates/account/profile.html:15 +#: netbox/templates/users/user.html:17 netbox/users/tables.py:31 msgid "Username" msgstr "Nombre de usuario" -#: core/data_backends.py:52 core/data_backends.py:58 +#: netbox/core/data_backends.py:52 netbox/core/data_backends.py:58 msgid "Only used for cloning with HTTP(S)" msgstr "Solo se usa para clonar con HTTP (S)" -#: core/data_backends.py:56 templates/account/base.html:23 -#: templates/account/password.html:12 users/forms/model_forms.py:170 +#: netbox/core/data_backends.py:56 netbox/templates/account/base.html:23 +#: netbox/templates/account/password.html:12 +#: netbox/users/forms/model_forms.py:170 msgid "Password" msgstr "Contraseña" -#: core/data_backends.py:62 +#: netbox/core/data_backends.py:62 msgid "Branch" msgstr "Rama" -#: core/data_backends.py:120 +#: netbox/core/data_backends.py:120 #, python-brace-format msgid "Fetching remote data failed ({name}): {error}" msgstr "Fallo al obtener datos remotos ({name}): {error}" -#: core/data_backends.py:133 +#: netbox/core/data_backends.py:133 msgid "AWS access key ID" msgstr "ID de clave de acceso de AWS" -#: core/data_backends.py:137 +#: netbox/core/data_backends.py:137 msgid "AWS secret access key" msgstr "Clave de acceso secreta de AWS" -#: core/events.py:27 +#: netbox/core/events.py:27 msgid "Object created" msgstr "Objeto creado" -#: core/events.py:28 +#: netbox/core/events.py:28 msgid "Object updated" msgstr "Objeto actualizado" -#: core/events.py:29 +#: netbox/core/events.py:29 msgid "Object deleted" msgstr "Objeto eliminado" -#: core/events.py:30 +#: netbox/core/events.py:30 msgid "Job started" msgstr "Trabajo iniciado" -#: core/events.py:31 +#: netbox/core/events.py:31 msgid "Job completed" msgstr "Trabajo completado" -#: core/events.py:32 +#: netbox/core/events.py:32 msgid "Job failed" msgstr "Fallo en el trabajo" -#: core/events.py:33 +#: netbox/core/events.py:33 msgid "Job errored" msgstr "Error en el trabajo" -#: core/filtersets.py:53 extras/filtersets.py:250 extras/filtersets.py:633 -#: extras/filtersets.py:661 +#: netbox/core/filtersets.py:53 netbox/extras/filtersets.py:250 +#: netbox/extras/filtersets.py:633 netbox/extras/filtersets.py:661 msgid "Data source (ID)" msgstr "Fuente de datos (ID)" -#: core/filtersets.py:59 +#: netbox/core/filtersets.py:59 msgid "Data source (name)" msgstr "Fuente de datos (nombre)" -#: core/filtersets.py:145 dcim/filtersets.py:501 extras/filtersets.py:287 -#: extras/filtersets.py:331 extras/filtersets.py:353 extras/filtersets.py:413 -#: users/filtersets.py:28 +#: netbox/core/filtersets.py:145 netbox/dcim/filtersets.py:501 +#: 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 msgid "User (ID)" msgstr "Usuario (ID)" -#: core/filtersets.py:151 +#: netbox/core/filtersets.py:151 msgid "User name" msgstr "Nombre de usuario" -#: core/forms/bulk_edit.py:25 core/forms/filtersets.py:43 -#: core/tables/data.py:26 dcim/forms/bulk_edit.py:1122 -#: dcim/forms/bulk_edit.py:1400 dcim/forms/filtersets.py:1370 -#: dcim/tables/devices.py:553 dcim/tables/devicetypes.py:224 -#: extras/forms/bulk_edit.py:123 extras/forms/bulk_edit.py:187 -#: extras/forms/bulk_edit.py:246 extras/forms/filtersets.py:142 -#: extras/forms/filtersets.py:229 extras/forms/filtersets.py:294 -#: extras/tables/tables.py:162 extras/tables/tables.py:253 -#: extras/tables/tables.py:415 netbox/preferences.py:22 -#: templates/core/datasource.html:42 templates/dcim/interface.html:61 -#: templates/extras/customlink.html:17 templates/extras/eventrule.html:17 -#: templates/extras/savedfilter.html:25 -#: templates/users/objectpermission.html:25 -#: templates/virtualization/vminterface.html:29 users/forms/bulk_edit.py:89 -#: users/forms/filtersets.py:70 users/tables.py:83 -#: virtualization/forms/bulk_edit.py:217 -#: virtualization/forms/filtersets.py:215 +#: 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/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/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 +#: netbox/templates/dcim/interface.html:61 +#: netbox/templates/extras/customlink.html:17 +#: netbox/templates/extras/eventrule.html:17 +#: netbox/templates/extras/savedfilter.html:25 +#: netbox/templates/users/objectpermission.html:25 +#: netbox/templates/virtualization/vminterface.html:29 +#: netbox/users/forms/bulk_edit.py:89 netbox/users/forms/filtersets.py:70 +#: netbox/users/tables.py:83 netbox/virtualization/forms/bulk_edit.py:217 +#: netbox/virtualization/forms/filtersets.py:215 msgid "Enabled" msgstr "Habilitado" -#: core/forms/bulk_edit.py:34 extras/forms/model_forms.py:285 -#: templates/extras/savedfilter.html:52 vpn/forms/filtersets.py:97 -#: vpn/forms/filtersets.py:127 vpn/forms/filtersets.py:151 -#: vpn/forms/filtersets.py:170 vpn/forms/model_forms.py:301 -#: vpn/forms/model_forms.py:321 vpn/forms/model_forms.py:337 -#: vpn/forms/model_forms.py:357 vpn/forms/model_forms.py:380 +#: netbox/core/forms/bulk_edit.py:34 netbox/extras/forms/model_forms.py:285 +#: 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 msgid "Parameters" msgstr "Parámetros" -#: core/forms/bulk_edit.py:38 templates/core/datasource.html:68 +#: netbox/core/forms/bulk_edit.py:38 netbox/templates/core/datasource.html:68 msgid "Ignore rules" msgstr "Ignorar las reglas" -#: core/forms/filtersets.py:30 core/forms/model_forms.py:97 -#: extras/forms/model_forms.py:248 extras/forms/model_forms.py:578 -#: extras/forms/model_forms.py:632 extras/tables/tables.py:191 -#: extras/tables/tables.py:483 extras/tables/tables.py:518 -#: templates/core/datasource.html:31 -#: templates/dcim/device/render_config.html:18 -#: templates/extras/configcontext.html:29 -#: templates/extras/configtemplate.html:21 -#: templates/extras/exporttemplate.html:35 -#: templates/virtualization/virtualmachine/render_config.html:18 +#: netbox/core/forms/filtersets.py: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/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 msgid "Data Source" msgstr "Fuente de datos" -#: core/forms/filtersets.py:55 core/forms/mixins.py:21 +#: netbox/core/forms/filtersets.py:55 netbox/core/forms/mixins.py:21 msgid "File" msgstr "Expediente" -#: core/forms/filtersets.py:60 core/forms/mixins.py:16 -#: extras/forms/filtersets.py:170 extras/forms/filtersets.py:328 -#: extras/forms/filtersets.py:413 +#: 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 msgid "Data source" msgstr "Fuente de datos" -#: core/forms/filtersets.py:70 extras/forms/filtersets.py:440 +#: netbox/core/forms/filtersets.py:70 netbox/extras/forms/filtersets.py:440 msgid "Creation" msgstr "Creación" -#: core/forms/filtersets.py:74 core/forms/filtersets.py:160 -#: extras/forms/filtersets.py:461 extras/tables/tables.py:220 -#: extras/tables/tables.py:294 extras/tables/tables.py:326 -#: extras/tables/tables.py:571 templates/core/job.html:38 -#: templates/core/objectchange.html:52 tenancy/tables/contacts.py:90 -#: vpn/tables/l2vpn.py:59 +#: 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/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 +#: netbox/tenancy/tables/contacts.py:90 netbox/vpn/tables/l2vpn.py:59 msgid "Object Type" msgstr "Tipo de objeto" -#: core/forms/filtersets.py:84 +#: netbox/core/forms/filtersets.py:84 msgid "Created after" msgstr "Creado después" -#: core/forms/filtersets.py:89 +#: netbox/core/forms/filtersets.py:89 msgid "Created before" msgstr "Creado antes" -#: core/forms/filtersets.py:94 +#: netbox/core/forms/filtersets.py:94 msgid "Scheduled after" msgstr "Programado después" -#: core/forms/filtersets.py:99 +#: netbox/core/forms/filtersets.py:99 msgid "Scheduled before" msgstr "Programado antes" -#: core/forms/filtersets.py:104 +#: netbox/core/forms/filtersets.py:104 msgid "Started after" msgstr "Comenzó después" -#: core/forms/filtersets.py:109 +#: netbox/core/forms/filtersets.py:109 msgid "Started before" msgstr "Comenzó antes" -#: core/forms/filtersets.py:114 +#: netbox/core/forms/filtersets.py:114 msgid "Completed after" msgstr "Completado después" -#: core/forms/filtersets.py:119 +#: netbox/core/forms/filtersets.py:119 msgid "Completed before" msgstr "Completado antes" -#: core/forms/filtersets.py:126 core/forms/filtersets.py:155 -#: dcim/forms/bulk_edit.py:456 dcim/forms/filtersets.py:418 -#: dcim/forms/filtersets.py:462 dcim/forms/model_forms.py:316 -#: extras/forms/filtersets.py:456 extras/forms/filtersets.py:475 -#: extras/tables/tables.py:302 extras/tables/tables.py:342 -#: templates/core/objectchange.html:36 templates/dcim/rackreservation.html:58 -#: templates/extras/savedfilter.html:21 templates/inc/user_menu.html:33 -#: templates/users/token.html:21 templates/users/user.html:6 -#: templates/users/user.html:14 users/filtersets.py:107 -#: users/filtersets.py:174 users/forms/filtersets.py:84 -#: users/forms/filtersets.py:125 users/forms/model_forms.py:155 -#: users/forms/model_forms.py:192 users/tables.py:19 +#: 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/extras/tables/tables.py:302 netbox/extras/tables/tables.py:342 +#: netbox/templates/core/objectchange.html:36 +#: netbox/templates/dcim/rackreservation.html:58 +#: netbox/templates/extras/savedfilter.html:21 +#: netbox/templates/inc/user_menu.html:33 netbox/templates/users/token.html:21 +#: netbox/templates/users/user.html:6 netbox/templates/users/user.html:14 +#: netbox/users/filtersets.py:107 netbox/users/filtersets.py:174 +#: netbox/users/forms/filtersets.py:84 netbox/users/forms/filtersets.py:125 +#: netbox/users/forms/model_forms.py:155 netbox/users/forms/model_forms.py:192 +#: netbox/users/tables.py:19 msgid "User" msgstr "usuario" -#: core/forms/filtersets.py:134 core/tables/change_logging.py:15 -#: extras/tables/tables.py:609 extras/tables/tables.py:646 -#: templates/core/objectchange.html:32 +#: netbox/core/forms/filtersets.py:134 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 "Hora" -#: core/forms/filtersets.py:139 extras/forms/filtersets.py:445 +#: netbox/core/forms/filtersets.py:139 netbox/extras/forms/filtersets.py:445 msgid "After" msgstr "Después" -#: core/forms/filtersets.py:144 extras/forms/filtersets.py:450 +#: netbox/core/forms/filtersets.py:144 netbox/extras/forms/filtersets.py:450 msgid "Before" msgstr "Antes" -#: core/forms/filtersets.py:148 core/tables/change_logging.py:29 -#: extras/forms/model_forms.py:396 templates/core/objectchange.html:46 -#: templates/extras/eventrule.html:71 +#: netbox/core/forms/filtersets.py:148 netbox/core/tables/change_logging.py:29 +#: netbox/extras/forms/model_forms.py:396 +#: netbox/templates/core/objectchange.html:46 +#: netbox/templates/extras/eventrule.html:71 msgid "Action" msgstr "Acción" -#: core/forms/model_forms.py:54 core/tables/data.py:46 -#: templates/core/datafile.html:27 templates/extras/report/base.html:33 -#: templates/extras/script/base.html:32 +#: netbox/core/forms/model_forms.py:54 netbox/core/tables/data.py:46 +#: netbox/templates/core/datafile.html:27 +#: netbox/templates/extras/report/base.html:33 +#: netbox/templates/extras/script/base.html:32 msgid "Source" msgstr "Fuente" -#: core/forms/model_forms.py:58 +#: netbox/core/forms/model_forms.py:58 msgid "Backend Parameters" msgstr "Parámetros de backend" -#: core/forms/model_forms.py:96 +#: netbox/core/forms/model_forms.py:96 msgid "File Upload" msgstr "Carga de archivos" -#: core/forms/model_forms.py:108 +#: netbox/core/forms/model_forms.py:108 msgid "Cannot upload a file and sync from an existing file" msgstr "" "No se puede cargar un archivo y sincronizarlo desde un archivo existente" -#: core/forms/model_forms.py:110 +#: netbox/core/forms/model_forms.py:110 msgid "Must upload a file or select a data file to sync" msgstr "" "Debe cargar un archivo o seleccionar un archivo de datos para sincronizarlo" -#: core/forms/model_forms.py:153 templates/dcim/rack_elevation_list.html:6 +#: netbox/core/forms/model_forms.py:153 +#: netbox/templates/dcim/rack_elevation_list.html:6 msgid "Rack Elevations" msgstr "Elevaciones de estanterías" -#: core/forms/model_forms.py:157 dcim/choices.py:1518 -#: dcim/forms/bulk_edit.py:969 dcim/forms/bulk_edit.py:1357 -#: dcim/forms/bulk_edit.py:1375 dcim/tables/racks.py:158 -#: netbox/navigation/menu.py:291 netbox/navigation/menu.py:295 +#: 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 msgid "Power" msgstr "Potencia" -#: core/forms/model_forms.py:159 netbox/navigation/menu.py:154 -#: templates/core/inc/config_data.html:37 +#: netbox/core/forms/model_forms.py:159 netbox/netbox/navigation/menu.py:154 +#: netbox/templates/core/inc/config_data.html:37 msgid "IPAM" msgstr "IPAM" -#: core/forms/model_forms.py:160 netbox/navigation/menu.py:230 -#: templates/core/inc/config_data.html:50 vpn/forms/bulk_edit.py:77 -#: vpn/forms/filtersets.py:43 vpn/forms/model_forms.py:61 -#: vpn/forms/model_forms.py:146 +#: netbox/core/forms/model_forms.py:160 netbox/netbox/navigation/menu.py:230 +#: netbox/templates/core/inc/config_data.html:50 +#: netbox/vpn/forms/bulk_edit.py:77 netbox/vpn/forms/filtersets.py:43 +#: netbox/vpn/forms/model_forms.py:61 netbox/vpn/forms/model_forms.py:146 msgid "Security" msgstr "Seguridad" -#: core/forms/model_forms.py:161 templates/core/inc/config_data.html:59 +#: netbox/core/forms/model_forms.py:161 +#: netbox/templates/core/inc/config_data.html:59 msgid "Banners" msgstr "Banners" -#: core/forms/model_forms.py:162 templates/core/inc/config_data.html:80 +#: netbox/core/forms/model_forms.py:162 +#: netbox/templates/core/inc/config_data.html:80 msgid "Pagination" msgstr "Paginación" -#: core/forms/model_forms.py:163 extras/forms/bulk_edit.py:92 -#: extras/forms/filtersets.py:47 extras/forms/model_forms.py:116 -#: extras/forms/model_forms.py:129 templates/core/inc/config_data.html:93 +#: 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/model_forms.py:129 +#: netbox/templates/core/inc/config_data.html:93 msgid "Validation" msgstr "Validación" -#: core/forms/model_forms.py:164 templates/account/preferences.html:6 +#: netbox/core/forms/model_forms.py:164 +#: netbox/templates/account/preferences.html:6 msgid "User Preferences" msgstr "Preferencias de usuario" -#: core/forms/model_forms.py:167 dcim/forms/filtersets.py:732 -#: templates/core/inc/config_data.html:127 users/forms/model_forms.py:64 +#: netbox/core/forms/model_forms.py:167 netbox/dcim/forms/filtersets.py:732 +#: netbox/templates/core/inc/config_data.html:127 +#: netbox/users/forms/model_forms.py:64 msgid "Miscellaneous" msgstr "Misceláneo" -#: core/forms/model_forms.py:169 +#: netbox/core/forms/model_forms.py:169 msgid "Config Revision" msgstr "Revisión de configuración" -#: core/forms/model_forms.py:208 +#: netbox/core/forms/model_forms.py:208 msgid "This parameter has been defined statically and cannot be modified." msgstr "Este parámetro se ha definido estáticamente y no se puede modificar." -#: core/forms/model_forms.py:216 +#: netbox/core/forms/model_forms.py:216 #, python-brace-format msgid "Current value: {value}" msgstr "Valor actual: {value}" -#: core/forms/model_forms.py:218 +#: netbox/core/forms/model_forms.py:218 msgid " (default)" msgstr " (predeterminado)" -#: core/models/change_logging.py:29 +#: netbox/core/models/change_logging.py:29 msgid "time" msgstr "tiempo" -#: core/models/change_logging.py:42 +#: netbox/core/models/change_logging.py:42 msgid "user name" msgstr "nombre de usuario" -#: core/models/change_logging.py:47 +#: netbox/core/models/change_logging.py:47 msgid "request ID" msgstr "ID de solicitud" -#: core/models/change_logging.py:52 extras/models/staging.py:69 +#: netbox/core/models/change_logging.py:52 netbox/extras/models/staging.py:69 msgid "action" msgstr "acción" -#: core/models/change_logging.py:86 +#: netbox/core/models/change_logging.py:86 msgid "pre-change data" msgstr "datos de cambio previo" -#: core/models/change_logging.py:92 +#: netbox/core/models/change_logging.py:92 msgid "post-change data" msgstr "datos posteriores al cambio" -#: core/models/change_logging.py:106 +#: netbox/core/models/change_logging.py:106 msgid "object change" msgstr "cambio de objeto" -#: core/models/change_logging.py:107 +#: netbox/core/models/change_logging.py:107 msgid "object changes" msgstr "cambios de objetos" -#: core/models/change_logging.py:123 +#: netbox/core/models/change_logging.py:123 #, python-brace-format msgid "Change logging is not supported for this object type ({type})." msgstr "" "El registro de cambios no es compatible con este tipo de objeto ({type})." -#: core/models/config.py:18 core/models/data.py:266 core/models/files.py:27 -#: core/models/jobs.py:49 extras/models/models.py:730 -#: extras/models/notifications.py:39 extras/models/notifications.py:186 -#: netbox/models/features.py:53 users/models/tokens.py:32 +#: netbox/core/models/config.py:18 netbox/core/models/data.py:266 +#: 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/notifications.py:186 +#: netbox/netbox/models/features.py:53 netbox/users/models/tokens.py:32 msgid "created" msgstr "creado" -#: core/models/config.py:22 +#: netbox/core/models/config.py:22 msgid "comment" msgstr "comentario" -#: core/models/config.py:29 +#: netbox/core/models/config.py:29 msgid "configuration data" msgstr "datos de configuración" -#: core/models/config.py:36 +#: netbox/core/models/config.py:36 msgid "config revision" msgstr "revisión de configuración" -#: core/models/config.py:37 +#: netbox/core/models/config.py:37 msgid "config revisions" msgstr "revisiones de configuración" -#: core/models/config.py:41 +#: netbox/core/models/config.py:41 msgid "Default configuration" msgstr "Configuración predeterminada" -#: core/models/config.py:43 +#: netbox/core/models/config.py:43 msgid "Current configuration" msgstr "Configuración actual" -#: core/models/config.py:44 +#: netbox/core/models/config.py:44 #, python-brace-format msgid "Config revision #{id}" msgstr "Revisión de configuración #{id}" -#: core/models/data.py:44 dcim/models/cables.py:43 -#: dcim/models/device_component_templates.py:203 -#: dcim/models/device_component_templates.py:237 -#: dcim/models/device_component_templates.py:272 -#: dcim/models/device_component_templates.py:334 -#: dcim/models/device_component_templates.py:413 -#: dcim/models/device_component_templates.py:512 -#: dcim/models/device_component_templates.py:612 -#: dcim/models/device_components.py:283 dcim/models/device_components.py:312 -#: dcim/models/device_components.py:345 dcim/models/device_components.py:463 -#: dcim/models/device_components.py:605 dcim/models/device_components.py:970 -#: dcim/models/device_components.py:1044 dcim/models/power.py:102 -#: extras/models/customfields.py:78 extras/models/search.py:41 -#: virtualization/models/clusters.py:61 vpn/models/l2vpn.py:32 +#: 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/extras/models/search.py:41 +#: netbox/virtualization/models/clusters.py:61 netbox/vpn/models/l2vpn.py:32 msgid "type" msgstr "tipo" -#: core/models/data.py:49 extras/choices.py:37 extras/models/models.py:164 -#: extras/tables/tables.py:656 templates/core/datasource.html:58 -#: templates/core/plugin.html:66 +#: netbox/core/models/data.py:49 netbox/extras/choices.py:37 +#: netbox/extras/models/models.py:164 netbox/extras/tables/tables.py:656 +#: netbox/templates/core/datasource.html:58 +#: netbox/templates/core/plugin.html:66 msgid "URL" msgstr "URL" -#: core/models/data.py:59 dcim/models/device_component_templates.py:418 -#: dcim/models/device_components.py:512 extras/models/models.py:70 -#: extras/models/models.py:301 extras/models/models.py:526 -#: users/models/permissions.py:29 +#: netbox/core/models/data.py:59 +#: netbox/dcim/models/device_component_templates.py:418 +#: netbox/dcim/models/device_components.py:512 +#: 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" msgstr "habilitado" -#: core/models/data.py:63 +#: netbox/core/models/data.py:63 msgid "ignore rules" msgstr "ignorar reglas" -#: core/models/data.py:65 +#: netbox/core/models/data.py:65 msgid "Patterns (one per line) matching files to ignore when syncing" msgstr "" "Patrones (uno por línea) que coinciden con los archivos para ignorarlos al " "sincronizar" -#: core/models/data.py:68 extras/models/models.py:534 +#: netbox/core/models/data.py:68 netbox/extras/models/models.py:534 msgid "parameters" msgstr "parámetros" -#: core/models/data.py:73 +#: netbox/core/models/data.py:73 msgid "last synced" msgstr "sincronizado por última vez" -#: core/models/data.py:81 +#: netbox/core/models/data.py:81 msgid "data source" msgstr "fuente de datos" -#: core/models/data.py:82 +#: netbox/core/models/data.py:82 msgid "data sources" msgstr "fuentes de datos" -#: core/models/data.py:122 +#: netbox/core/models/data.py:122 #, python-brace-format msgid "Unknown backend type: {type}" msgstr "Tipo de backend desconocido: {type}" -#: core/models/data.py:164 +#: netbox/core/models/data.py:164 msgid "Cannot initiate sync; syncing already in progress." msgstr "" "No se puede iniciar la sincronización; la sincronización ya está en curso." -#: core/models/data.py:177 +#: netbox/core/models/data.py:177 msgid "" "There was an error initializing the backend. A dependency needs to be " "installed: " @@ -1896,1224 +2163,1286 @@ msgstr "" "Se ha producido un error al inicializar el backend. Es necesario instalar " "una dependencia: " -#: core/models/data.py:270 core/models/files.py:31 -#: netbox/models/features.py:59 +#: netbox/core/models/data.py:270 netbox/core/models/files.py:31 +#: netbox/netbox/models/features.py:59 msgid "last updated" msgstr "última actualización" -#: core/models/data.py:280 dcim/models/cables.py:444 +#: netbox/core/models/data.py:280 netbox/dcim/models/cables.py:444 msgid "path" msgstr "ruta" -#: core/models/data.py:283 +#: netbox/core/models/data.py:283 msgid "File path relative to the data source's root" msgstr "Ruta del archivo relativa a la raíz de la fuente de datos" -#: core/models/data.py:287 ipam/models/ip.py:503 +#: netbox/core/models/data.py:287 netbox/ipam/models/ip.py:503 msgid "size" msgstr "tamaño" -#: core/models/data.py:290 +#: netbox/core/models/data.py:290 msgid "hash" msgstr "picadillo" -#: core/models/data.py:294 +#: netbox/core/models/data.py:294 msgid "Length must be 64 hexadecimal characters." msgstr "La longitud debe ser de 64 caracteres hexadecimales." -#: core/models/data.py:296 +#: netbox/core/models/data.py:296 msgid "SHA256 hash of the file data" msgstr "Hash SHA256 de los datos del archivo" -#: core/models/data.py:313 +#: netbox/core/models/data.py:313 msgid "data file" msgstr "archivo de datos" -#: core/models/data.py:314 +#: netbox/core/models/data.py:314 msgid "data files" msgstr "archivos de datos" -#: core/models/data.py:401 +#: netbox/core/models/data.py:401 msgid "auto sync record" msgstr "registro de sincronización automática" -#: core/models/data.py:402 +#: netbox/core/models/data.py:402 msgid "auto sync records" msgstr "sincronización automática de registros" -#: core/models/files.py:37 +#: netbox/core/models/files.py:37 msgid "file root" msgstr "raíz del archivo" -#: core/models/files.py:42 +#: netbox/core/models/files.py:42 msgid "file path" msgstr "ruta del archivo" -#: core/models/files.py:44 +#: netbox/core/models/files.py:44 msgid "File path relative to the designated root path" msgstr "Ruta del archivo relativa a la ruta raíz designada" -#: core/models/files.py:61 +#: netbox/core/models/files.py:61 msgid "managed file" msgstr "archivo gestionado" -#: core/models/files.py:62 +#: netbox/core/models/files.py:62 msgid "managed files" msgstr "archivos gestionados" -#: core/models/jobs.py:53 +#: netbox/core/models/jobs.py:54 msgid "scheduled" msgstr "programado" -#: core/models/jobs.py:58 +#: netbox/core/models/jobs.py:59 msgid "interval" msgstr "intervalo" -#: core/models/jobs.py:64 +#: netbox/core/models/jobs.py:65 msgid "Recurrence interval (in minutes)" msgstr "Intervalo de recurrencia (en minutos)" -#: core/models/jobs.py:67 +#: netbox/core/models/jobs.py:68 msgid "started" msgstr "iniciado" -#: core/models/jobs.py:72 +#: netbox/core/models/jobs.py:73 msgid "completed" msgstr "completado" -#: core/models/jobs.py:90 extras/models/models.py:101 -#: extras/models/staging.py:87 +#: netbox/core/models/jobs.py:91 netbox/extras/models/models.py:101 +#: netbox/extras/models/staging.py:87 msgid "data" msgstr "dato" -#: core/models/jobs.py:95 +#: netbox/core/models/jobs.py:96 msgid "error" msgstr "error" -#: core/models/jobs.py:100 +#: netbox/core/models/jobs.py:101 msgid "job ID" msgstr "ID de trabajo" -#: core/models/jobs.py:111 +#: netbox/core/models/jobs.py:112 msgid "job" msgstr "trabajo" -#: core/models/jobs.py:112 +#: netbox/core/models/jobs.py:113 msgid "jobs" msgstr "trabajos" -#: core/models/jobs.py:135 +#: netbox/core/models/jobs.py:136 #, python-brace-format msgid "Jobs cannot be assigned to this object type ({type})." msgstr "No se pueden asignar trabajos a este tipo de objeto ({type})." -#: core/models/jobs.py:185 +#: netbox/core/models/jobs.py:190 #, python-brace-format msgid "Invalid status for job termination. Choices are: {choices}" msgstr "" "Estado no válido para la terminación del trabajo. Las opciones son: " "{choices}" -#: core/models/jobs.py:216 +#: netbox/core/models/jobs.py:221 msgid "" "enqueue() cannot be called with values for both schedule_at and immediate." msgstr "" "no se puede llamar a enqueue () con valores tanto para schedule_at como para" " immediate." -#: core/signals.py:126 +#: netbox/core/signals.py:126 #, python-brace-format msgid "Deletion is prevented by a protection rule: {message}" msgstr "La eliminación se impide mediante una regla de protección: {message}" -#: core/tables/change_logging.py:25 templates/account/profile.html:19 -#: templates/users/user.html:21 +#: netbox/core/tables/change_logging.py:25 +#: netbox/templates/account/profile.html:19 +#: netbox/templates/users/user.html:21 msgid "Full Name" msgstr "Nombre completo" -#: core/tables/change_logging.py:37 core/tables/jobs.py:21 -#: extras/choices.py:41 extras/tables/tables.py:279 -#: extras/tables/tables.py:297 extras/tables/tables.py:329 -#: extras/tables/tables.py:409 extras/tables/tables.py:470 -#: extras/tables/tables.py:576 extras/tables/tables.py:616 -#: extras/tables/tables.py:653 netbox/tables/tables.py:244 -#: templates/core/objectchange.html:58 templates/extras/eventrule.html:78 -#: templates/extras/journalentry.html:18 tenancy/tables/contacts.py:93 -#: vpn/tables/l2vpn.py:64 +#: netbox/core/tables/change_logging.py:37 netbox/core/tables/jobs.py:21 +#: netbox/extras/choices.py:41 netbox/extras/tables/tables.py:279 +#: 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/templates/core/objectchange.html:58 +#: netbox/templates/extras/eventrule.html:78 +#: netbox/templates/extras/journalentry.html:18 +#: netbox/tenancy/tables/contacts.py:93 netbox/vpn/tables/l2vpn.py:64 msgid "Object" msgstr "Objeto" -#: core/tables/change_logging.py:42 templates/core/objectchange.html:68 +#: netbox/core/tables/change_logging.py:42 +#: netbox/templates/core/objectchange.html:68 msgid "Request ID" msgstr "ID de solicitud" -#: core/tables/config.py:21 users/forms/filtersets.py:44 users/tables.py:39 +#: netbox/core/tables/config.py:21 netbox/users/forms/filtersets.py:44 +#: netbox/users/tables.py:39 msgid "Is Active" msgstr "Está activo" -#: core/tables/data.py:50 templates/core/datafile.html:31 +#: netbox/core/tables/data.py:50 netbox/templates/core/datafile.html:31 msgid "Path" msgstr "Ruta" -#: core/tables/data.py:54 templates/extras/inc/result_pending.html:7 +#: netbox/core/tables/data.py:54 +#: netbox/templates/extras/inc/result_pending.html:7 msgid "Last updated" msgstr "Última actualización" -#: core/tables/jobs.py:10 core/tables/tasks.py:76 -#: dcim/tables/devicetypes.py:164 extras/tables/tables.py:216 -#: extras/tables/tables.py:460 netbox/tables/tables.py:189 -#: templates/dcim/virtualchassis_edit.html:52 utilities/forms/forms.py:73 -#: wireless/tables/wirelesslink.py:17 +#: 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/templates/dcim/virtualchassis_edit.html:52 +#: netbox/utilities/forms/forms.py:73 +#: netbox/wireless/tables/wirelesslink.py:17 msgid "ID" msgstr "ID" -#: core/tables/jobs.py:35 +#: netbox/core/tables/jobs.py:35 msgid "Interval" msgstr "Intervalo" -#: core/tables/plugins.py:14 templates/vpn/ipsecprofile.html:44 -#: vpn/forms/bulk_edit.py:141 vpn/forms/bulk_import.py:172 -#: vpn/tables/crypto.py:61 +#: netbox/core/tables/plugins.py:14 netbox/templates/vpn/ipsecprofile.html:44 +#: netbox/vpn/forms/bulk_edit.py:141 netbox/vpn/forms/bulk_import.py:172 +#: netbox/vpn/tables/crypto.py:61 msgid "Version" msgstr "Versión" -#: core/tables/plugins.py:19 templates/core/datafile.html:38 +#: netbox/core/tables/plugins.py:19 netbox/templates/core/datafile.html:38 msgid "Last Updated" msgstr "Última actualización" -#: core/tables/plugins.py:23 +#: netbox/core/tables/plugins.py:23 msgid "Minimum NetBox Version" msgstr "Versión mínima de NetBox" -#: core/tables/plugins.py:27 +#: netbox/core/tables/plugins.py:27 msgid "Maximum NetBox Version" msgstr "Versión máxima de NetBox" -#: core/tables/plugins.py:31 core/tables/plugins.py:74 +#: netbox/core/tables/plugins.py:31 netbox/core/tables/plugins.py:74 msgid "No plugin data found" msgstr "No se han encontrado datos de complementos" -#: core/tables/plugins.py:48 templates/core/plugin.html:62 +#: netbox/core/tables/plugins.py:48 netbox/templates/core/plugin.html:62 msgid "Author" msgstr "autor" -#: core/tables/plugins.py:54 +#: netbox/core/tables/plugins.py:54 msgid "Installed" msgstr "Instalado" -#: core/tables/plugins.py:57 templates/core/plugin.html:84 +#: netbox/core/tables/plugins.py:57 netbox/templates/core/plugin.html:84 msgid "Certified" msgstr "Certificado" -#: core/tables/plugins.py:60 +#: netbox/core/tables/plugins.py:60 msgid "Published" msgstr "Publicado" -#: core/tables/plugins.py:66 +#: netbox/core/tables/plugins.py:66 msgid "Installed Version" msgstr "Versión instalada" -#: core/tables/plugins.py:70 +#: netbox/core/tables/plugins.py:70 msgid "Latest Version" msgstr "Versión más reciente" -#: core/tables/tasks.py:18 +#: netbox/core/tables/tasks.py:18 msgid "Oldest Task" msgstr "Tarea más antigua" -#: core/tables/tasks.py:42 templates/core/rq_worker_list.html:39 +#: netbox/core/tables/tasks.py:42 netbox/templates/core/rq_worker_list.html:39 msgid "Workers" msgstr "Trabajadores" -#: core/tables/tasks.py:46 vpn/tables/tunnels.py:88 +#: netbox/core/tables/tasks.py:46 netbox/vpn/tables/tunnels.py:88 msgid "Host" msgstr "Anfitrión" -#: core/tables/tasks.py:50 ipam/forms/filtersets.py:535 +#: netbox/core/tables/tasks.py:50 netbox/ipam/forms/filtersets.py:535 msgid "Port" msgstr "Puerto" -#: core/tables/tasks.py:54 +#: netbox/core/tables/tasks.py:54 msgid "DB" msgstr "DB" -#: core/tables/tasks.py:58 +#: netbox/core/tables/tasks.py:58 msgid "Scheduler PID" msgstr "PID del planificador" -#: core/tables/tasks.py:62 +#: netbox/core/tables/tasks.py:62 msgid "No queues found" msgstr "No se han encontrado colas" -#: core/tables/tasks.py:82 +#: netbox/core/tables/tasks.py:82 msgid "Enqueued" msgstr "En cola" -#: core/tables/tasks.py:85 +#: netbox/core/tables/tasks.py:85 msgid "Ended" msgstr "Finalizado" -#: core/tables/tasks.py:93 templates/core/rq_task.html:85 +#: netbox/core/tables/tasks.py:93 netbox/templates/core/rq_task.html:85 msgid "Callable" msgstr "Invocable" -#: core/tables/tasks.py:97 +#: netbox/core/tables/tasks.py:97 msgid "No tasks found" msgstr "No se ha encontrado ninguna tarea" -#: core/tables/tasks.py:118 templates/core/rq_worker.html:47 +#: netbox/core/tables/tasks.py:118 netbox/templates/core/rq_worker.html:47 msgid "State" msgstr "Estado" -#: core/tables/tasks.py:121 templates/core/rq_worker.html:51 +#: netbox/core/tables/tasks.py:121 netbox/templates/core/rq_worker.html:51 msgid "Birth" msgstr "Nacimiento" -#: core/tables/tasks.py:124 templates/core/rq_worker.html:59 +#: netbox/core/tables/tasks.py:124 netbox/templates/core/rq_worker.html:59 msgid "PID" msgstr "PAGADO" -#: core/tables/tasks.py:128 +#: netbox/core/tables/tasks.py:128 msgid "No workers found" msgstr "No se encontró ningún trabajador" -#: core/views.py:90 +#: netbox/core/views.py:90 #, python-brace-format msgid "Queued job #{id} to sync {datasource}" msgstr "N.º de trabajo en cola{id} sincronizar {datasource}" -#: core/views.py:319 +#: netbox/core/views.py:319 #, python-brace-format msgid "Restored configuration revision #{id}" msgstr "Revisión de la configuración restaurada #{id}" -#: core/views.py:412 core/views.py:455 core/views.py:531 +#: 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 "Trabajo {job_id} no se encontró" -#: core/views.py:463 +#: netbox/core/views.py:463 #, python-brace-format msgid "Job {id} has been deleted." msgstr "Trabajo {id} se ha eliminado." -#: core/views.py:465 +#: netbox/core/views.py:465 #, python-brace-format msgid "Error deleting job {id}: {error}" msgstr "Error al eliminar el trabajo {id}: {error}" -#: core/views.py:478 core/views.py:496 +#: netbox/core/views.py:478 netbox/core/views.py:496 #, python-brace-format msgid "Job {id} not found." msgstr "Trabajo {id} no se encontró." -#: core/views.py:484 +#: netbox/core/views.py:484 #, python-brace-format msgid "Job {id} has been re-enqueued." msgstr "Trabajo {id} se ha vuelto a poner en cola." -#: core/views.py:519 +#: netbox/core/views.py:519 #, python-brace-format msgid "Job {id} has been enqueued." msgstr "Trabajo {id} ha sido puesto en cola." -#: core/views.py:538 +#: netbox/core/views.py:538 #, python-brace-format msgid "Job {id} has been stopped." msgstr "Trabajo {id} se ha detenido." -#: core/views.py:540 +#: netbox/core/views.py:540 #, python-brace-format msgid "Failed to stop job {id}" msgstr "No se pudo detener el trabajo {id}" -#: core/views.py:678 +#: netbox/core/views.py:674 msgid "Plugins catalog could not be loaded" msgstr "No se pudo cargar el catálogo de complementos" -#: core/views.py:712 +#: netbox/core/views.py:708 #, python-brace-format msgid "Plugin {name} not found" msgstr "Plugin {name} no se encontró" -#: dcim/api/serializers_/devices.py:49 dcim/api/serializers_/devicetypes.py:25 +#: netbox/dcim/api/serializers_/devices.py:49 +#: netbox/dcim/api/serializers_/devicetypes.py:25 msgid "Position (U)" msgstr "Posición (U)" -#: dcim/api/serializers_/racks.py:112 templates/dcim/rack.html:28 +#: netbox/dcim/api/serializers_/racks.py:112 +#: netbox/templates/dcim/rack.html:28 msgid "Facility ID" msgstr "ID de la instalación" -#: dcim/choices.py:21 virtualization/choices.py:21 +#: netbox/dcim/choices.py:21 netbox/virtualization/choices.py:21 msgid "Staging" msgstr "Puesta en escena" -#: dcim/choices.py:23 dcim/choices.py:189 dcim/choices.py:240 -#: dcim/choices.py:1531 virtualization/choices.py:23 -#: virtualization/choices.py:48 +#: 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 msgid "Decommissioning" msgstr "Desmantelamiento" -#: dcim/choices.py:24 +#: netbox/dcim/choices.py:24 msgid "Retired" msgstr "Retirado" -#: dcim/choices.py:65 +#: netbox/dcim/choices.py:65 msgid "2-post frame" msgstr "Marco de 2 postes" -#: dcim/choices.py:66 +#: netbox/dcim/choices.py:66 msgid "4-post frame" msgstr "Marco de 4 postes" -#: dcim/choices.py:67 +#: netbox/dcim/choices.py:67 msgid "4-post cabinet" msgstr "Armario de 4 postes" -#: dcim/choices.py:68 +#: netbox/dcim/choices.py:68 msgid "Wall-mounted frame" msgstr "Marco de pared" -#: dcim/choices.py:69 +#: netbox/dcim/choices.py:69 msgid "Wall-mounted frame (vertical)" msgstr "Marco de pared (vertical)" -#: dcim/choices.py:70 +#: netbox/dcim/choices.py:70 msgid "Wall-mounted cabinet" msgstr "Armario de pared" -#: dcim/choices.py:71 +#: netbox/dcim/choices.py:71 msgid "Wall-mounted cabinet (vertical)" msgstr "Armario de pared (vertical)" -#: dcim/choices.py:83 dcim/choices.py:84 dcim/choices.py:85 dcim/choices.py:86 +#: netbox/dcim/choices.py:83 netbox/dcim/choices.py:84 +#: netbox/dcim/choices.py:85 netbox/dcim/choices.py:86 #, python-brace-format msgid "{n} inches" msgstr "{n} pulgadas" -#: dcim/choices.py:100 ipam/choices.py:32 ipam/choices.py:50 -#: ipam/choices.py:70 ipam/choices.py:155 wireless/choices.py:26 +#: netbox/dcim/choices.py:100 netbox/ipam/choices.py:32 +#: netbox/ipam/choices.py:50 netbox/ipam/choices.py:70 +#: netbox/ipam/choices.py:155 netbox/wireless/choices.py:26 msgid "Reserved" msgstr "Reservado" -#: dcim/choices.py:101 templates/dcim/device.html:259 +#: netbox/dcim/choices.py:101 netbox/templates/dcim/device.html:259 msgid "Available" msgstr "Disponible" -#: dcim/choices.py:104 ipam/choices.py:33 ipam/choices.py:51 -#: ipam/choices.py:71 ipam/choices.py:156 wireless/choices.py:28 +#: netbox/dcim/choices.py:104 netbox/ipam/choices.py:33 +#: netbox/ipam/choices.py:51 netbox/ipam/choices.py:71 +#: netbox/ipam/choices.py:156 netbox/wireless/choices.py:28 msgid "Deprecated" msgstr "Obsoleto" -#: dcim/choices.py:114 templates/dcim/inc/panels/racktype_dimensions.html:41 +#: netbox/dcim/choices.py:114 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:41 msgid "Millimeters" msgstr "Milímetros" -#: dcim/choices.py:115 dcim/choices.py:1553 +#: netbox/dcim/choices.py:115 netbox/dcim/choices.py:1555 msgid "Inches" msgstr "Pulgadas" -#: dcim/choices.py:136 dcim/choices.py:207 dcim/choices.py:254 +#: netbox/dcim/choices.py:136 netbox/dcim/choices.py:207 +#: netbox/dcim/choices.py:254 msgid "Front to rear" msgstr "De adelante hacia atrás" -#: dcim/choices.py:137 dcim/choices.py:208 dcim/choices.py:255 +#: netbox/dcim/choices.py:137 netbox/dcim/choices.py:208 +#: netbox/dcim/choices.py:255 msgid "Rear to front" msgstr "De atrás hacia adelante" -#: dcim/choices.py:151 dcim/forms/bulk_edit.py:68 dcim/forms/bulk_edit.py:87 -#: dcim/forms/bulk_edit.py:173 dcim/forms/bulk_edit.py:1405 -#: dcim/forms/bulk_import.py:60 dcim/forms/bulk_import.py:74 -#: dcim/forms/bulk_import.py:137 dcim/forms/bulk_import.py:566 -#: dcim/forms/bulk_import.py:833 dcim/forms/bulk_import.py:1088 -#: dcim/forms/filtersets.py:234 dcim/forms/model_forms.py:74 -#: dcim/forms/model_forms.py:93 dcim/forms/model_forms.py:170 -#: dcim/forms/model_forms.py:1062 dcim/forms/model_forms.py:1502 -#: dcim/forms/object_import.py:176 dcim/tables/devices.py:656 -#: dcim/tables/devices.py:869 dcim/tables/devices.py:954 -#: extras/tables/tables.py:223 ipam/tables/fhrp.py:59 ipam/tables/ip.py:378 -#: ipam/tables/services.py:44 templates/dcim/interface.html:102 -#: templates/dcim/interface.html:309 templates/dcim/location.html:41 -#: templates/dcim/region.html:37 templates/dcim/sitegroup.html:37 -#: templates/ipam/service.html:28 templates/tenancy/contactgroup.html:29 -#: templates/tenancy/tenantgroup.html:37 -#: templates/virtualization/vminterface.html:39 -#: templates/wireless/wirelesslangroup.html:37 tenancy/forms/bulk_edit.py:27 -#: tenancy/forms/bulk_edit.py:61 tenancy/forms/bulk_import.py:24 -#: tenancy/forms/bulk_import.py:58 tenancy/forms/model_forms.py:25 -#: tenancy/forms/model_forms.py:68 virtualization/forms/bulk_edit.py:207 -#: virtualization/forms/bulk_import.py:151 -#: virtualization/tables/virtualmachines.py:162 wireless/forms/bulk_edit.py:24 -#: wireless/forms/bulk_import.py:21 wireless/forms/model_forms.py:21 +#: 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/templates/dcim/location.html:41 netbox/templates/dcim/region.html:37 +#: netbox/templates/dcim/sitegroup.html:37 +#: netbox/templates/ipam/service.html:28 +#: netbox/templates/tenancy/contactgroup.html:29 +#: netbox/templates/tenancy/tenantgroup.html:37 +#: netbox/templates/virtualization/vminterface.html:39 +#: netbox/templates/wireless/wirelesslangroup.html:37 +#: netbox/tenancy/forms/bulk_edit.py:27 netbox/tenancy/forms/bulk_edit.py:61 +#: netbox/tenancy/forms/bulk_import.py:24 +#: netbox/tenancy/forms/bulk_import.py:58 +#: netbox/tenancy/forms/model_forms.py:25 +#: netbox/tenancy/forms/model_forms.py:68 +#: netbox/virtualization/forms/bulk_edit.py:207 +#: netbox/virtualization/forms/bulk_import.py:151 +#: netbox/virtualization/tables/virtualmachines.py:162 +#: netbox/wireless/forms/bulk_edit.py:24 +#: netbox/wireless/forms/bulk_import.py:21 +#: netbox/wireless/forms/model_forms.py:21 msgid "Parent" msgstr "Padre" -#: dcim/choices.py:152 +#: netbox/dcim/choices.py:152 msgid "Child" msgstr "Niño" -#: dcim/choices.py:166 templates/dcim/device.html:340 -#: templates/dcim/rack.html:133 templates/dcim/rack_elevation_list.html:20 -#: templates/dcim/rackreservation.html:76 +#: netbox/dcim/choices.py:166 netbox/templates/dcim/device.html:340 +#: netbox/templates/dcim/rack.html:133 +#: netbox/templates/dcim/rack_elevation_list.html:20 +#: netbox/templates/dcim/rackreservation.html:76 msgid "Front" msgstr "Delantera" -#: dcim/choices.py:167 templates/dcim/device.html:346 -#: templates/dcim/rack.html:139 templates/dcim/rack_elevation_list.html:21 -#: templates/dcim/rackreservation.html:82 +#: netbox/dcim/choices.py:167 netbox/templates/dcim/device.html:346 +#: netbox/templates/dcim/rack.html:139 +#: netbox/templates/dcim/rack_elevation_list.html:21 +#: netbox/templates/dcim/rackreservation.html:82 msgid "Rear" msgstr "Trasera" -#: dcim/choices.py:186 dcim/choices.py:238 virtualization/choices.py:46 +#: netbox/dcim/choices.py:186 netbox/dcim/choices.py:238 +#: netbox/virtualization/choices.py:46 msgid "Staged" msgstr "Escenificado" -#: dcim/choices.py:188 +#: netbox/dcim/choices.py:188 msgid "Inventory" msgstr "Inventario" -#: dcim/choices.py:209 dcim/choices.py:256 +#: netbox/dcim/choices.py:209 netbox/dcim/choices.py:256 msgid "Left to right" msgstr "De izquierda a derecha" -#: dcim/choices.py:210 dcim/choices.py:257 +#: netbox/dcim/choices.py:210 netbox/dcim/choices.py:257 msgid "Right to left" msgstr "De derecha a izquierda" -#: dcim/choices.py:211 dcim/choices.py:258 +#: netbox/dcim/choices.py:211 netbox/dcim/choices.py:258 msgid "Side to rear" msgstr "De lado a atrás" -#: dcim/choices.py:212 +#: netbox/dcim/choices.py:212 msgid "Rear to side" msgstr "De atrás hacia los lados" -#: dcim/choices.py:213 +#: netbox/dcim/choices.py:213 msgid "Bottom to top" msgstr "De abajo hacia arriba" -#: dcim/choices.py:214 +#: netbox/dcim/choices.py:214 msgid "Top to bottom" msgstr "De arriba a abajo" -#: dcim/choices.py:215 dcim/choices.py:259 dcim/choices.py:1303 +#: netbox/dcim/choices.py:215 netbox/dcim/choices.py:259 +#: netbox/dcim/choices.py:1305 msgid "Passive" msgstr "Pasivo" -#: dcim/choices.py:216 +#: netbox/dcim/choices.py:216 msgid "Mixed" msgstr "Mezclado" -#: dcim/choices.py:484 dcim/choices.py:733 +#: netbox/dcim/choices.py:484 netbox/dcim/choices.py:733 msgid "NEMA (Non-locking)" msgstr "NEMA (sin bloqueo)" -#: dcim/choices.py:506 dcim/choices.py:755 +#: netbox/dcim/choices.py:506 netbox/dcim/choices.py:755 msgid "NEMA (Locking)" msgstr "NEMA (Bloqueo)" -#: dcim/choices.py:530 dcim/choices.py:779 +#: netbox/dcim/choices.py:530 netbox/dcim/choices.py:779 msgid "California Style" msgstr "Estilo californiano" -#: dcim/choices.py:538 +#: netbox/dcim/choices.py:538 msgid "International/ITA" msgstr "Internacional/ITA" -#: dcim/choices.py:573 dcim/choices.py:814 +#: netbox/dcim/choices.py:573 netbox/dcim/choices.py:814 msgid "Proprietary" msgstr "Proprietario" -#: dcim/choices.py:581 dcim/choices.py:824 dcim/choices.py:1219 -#: dcim/choices.py:1221 dcim/choices.py:1447 dcim/choices.py:1449 -#: netbox/navigation/menu.py:200 +#: 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 msgid "Other" msgstr "Otros" -#: dcim/choices.py:787 +#: netbox/dcim/choices.py:787 msgid "ITA/International" msgstr "ITA/Internacional" -#: dcim/choices.py:854 +#: netbox/dcim/choices.py:854 msgid "Physical" msgstr "Físico" -#: dcim/choices.py:855 dcim/choices.py:1023 +#: netbox/dcim/choices.py:855 netbox/dcim/choices.py:1024 msgid "Virtual" msgstr "Virtual" -#: dcim/choices.py:856 dcim/choices.py:1097 dcim/forms/bulk_edit.py:1515 -#: dcim/forms/filtersets.py:1330 dcim/forms/model_forms.py:988 -#: dcim/forms/model_forms.py:1397 netbox/navigation/menu.py:140 -#: netbox/navigation/menu.py:144 templates/dcim/interface.html:210 +#: 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 msgid "Wireless" msgstr "inalámbrico" -#: dcim/choices.py:1021 +#: netbox/dcim/choices.py:1022 msgid "Virtual interfaces" msgstr "Interfaces virtuales" -#: dcim/choices.py:1024 dcim/forms/bulk_edit.py:1410 -#: dcim/forms/bulk_import.py:840 dcim/forms/model_forms.py:974 -#: dcim/tables/devices.py:660 templates/dcim/interface.html:106 -#: templates/virtualization/vminterface.html:43 -#: virtualization/forms/bulk_edit.py:212 -#: virtualization/forms/bulk_import.py:158 -#: virtualization/tables/virtualmachines.py:166 +#: 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/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 msgid "Bridge" msgstr "puente" -#: dcim/choices.py:1025 +#: netbox/dcim/choices.py:1026 msgid "Link Aggregation Group (LAG)" msgstr "Grupo de agregación de enlaces (LAG)" -#: dcim/choices.py:1029 +#: netbox/dcim/choices.py:1030 msgid "Ethernet (fixed)" msgstr "Ethernet (fijo)" -#: dcim/choices.py:1044 +#: netbox/dcim/choices.py:1046 msgid "Ethernet (modular)" msgstr "Ethernet (modular)" -#: dcim/choices.py:1081 +#: netbox/dcim/choices.py:1083 msgid "Ethernet (backplane)" msgstr "Ethernet (placa base)" -#: dcim/choices.py:1113 +#: netbox/dcim/choices.py:1115 msgid "Cellular" msgstr "Celular" -#: dcim/choices.py:1165 dcim/forms/filtersets.py:383 -#: dcim/forms/filtersets.py:809 dcim/forms/filtersets.py:963 -#: dcim/forms/filtersets.py:1542 templates/dcim/inventoryitem.html:52 -#: templates/dcim/virtualchassis_edit.html:54 +#: 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/templates/dcim/virtualchassis_edit.html:54 msgid "Serial" msgstr "serie" -#: dcim/choices.py:1180 +#: netbox/dcim/choices.py:1182 msgid "Coaxial" msgstr "Coaxial" -#: dcim/choices.py:1200 +#: netbox/dcim/choices.py:1202 msgid "Stacking" msgstr "Apilamiento" -#: dcim/choices.py:1250 +#: netbox/dcim/choices.py:1252 msgid "Half" msgstr "Mitad" -#: dcim/choices.py:1251 +#: netbox/dcim/choices.py:1253 msgid "Full" msgstr "Lleno" -#: dcim/choices.py:1252 netbox/preferences.py:31 wireless/choices.py:480 +#: netbox/dcim/choices.py:1254 netbox/netbox/preferences.py:31 +#: netbox/wireless/choices.py:480 msgid "Auto" msgstr "Auto" -#: dcim/choices.py:1263 +#: netbox/dcim/choices.py:1265 msgid "Access" msgstr "Acceso" -#: dcim/choices.py:1264 ipam/tables/vlans.py:172 ipam/tables/vlans.py:217 -#: templates/dcim/inc/interface_vlans_table.html:7 +#: 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 "Etiquetado" -#: dcim/choices.py:1265 +#: netbox/dcim/choices.py:1267 msgid "Tagged (All)" msgstr "Etiquetado (Todos)" -#: dcim/choices.py:1294 +#: netbox/dcim/choices.py:1296 msgid "IEEE Standard" msgstr "Estándar IEEE" -#: dcim/choices.py:1305 +#: netbox/dcim/choices.py:1307 msgid "Passive 24V (2-pair)" msgstr "Pasivo 24 V (2 pares)" -#: dcim/choices.py:1306 +#: netbox/dcim/choices.py:1308 msgid "Passive 24V (4-pair)" msgstr "Pasivo de 24 V (4 pares)" -#: dcim/choices.py:1307 +#: netbox/dcim/choices.py:1309 msgid "Passive 48V (2-pair)" msgstr "Pasivo 48 V (2 pares)" -#: dcim/choices.py:1308 +#: netbox/dcim/choices.py:1310 msgid "Passive 48V (4-pair)" msgstr "Pasivo de 48 V (4 pares)" -#: dcim/choices.py:1378 dcim/choices.py:1488 +#: netbox/dcim/choices.py:1380 netbox/dcim/choices.py:1490 msgid "Copper" msgstr "Cobre" -#: dcim/choices.py:1401 +#: netbox/dcim/choices.py:1403 msgid "Fiber Optic" msgstr "Fibra óptica" -#: dcim/choices.py:1434 dcim/choices.py:1517 +#: netbox/dcim/choices.py:1436 netbox/dcim/choices.py:1519 msgid "USB" msgstr "USB" -#: dcim/choices.py:1504 +#: netbox/dcim/choices.py:1506 msgid "Fiber" msgstr "Fibra" -#: dcim/choices.py:1529 dcim/forms/filtersets.py:1227 +#: netbox/dcim/choices.py:1531 netbox/dcim/forms/filtersets.py:1227 msgid "Connected" msgstr "Conectado" -#: dcim/choices.py:1548 wireless/choices.py:497 +#: netbox/dcim/choices.py:1550 netbox/wireless/choices.py:497 msgid "Kilometers" msgstr "Kilómetros" -#: dcim/choices.py:1549 templates/dcim/cable_trace.html:65 -#: wireless/choices.py:498 +#: netbox/dcim/choices.py:1551 netbox/templates/dcim/cable_trace.html:65 +#: netbox/wireless/choices.py:498 msgid "Meters" msgstr "Medidores" -#: dcim/choices.py:1550 +#: netbox/dcim/choices.py:1552 msgid "Centimeters" msgstr "Centímetros" -#: dcim/choices.py:1551 wireless/choices.py:499 +#: netbox/dcim/choices.py:1553 netbox/wireless/choices.py:499 msgid "Miles" msgstr "Millas" -#: dcim/choices.py:1552 templates/dcim/cable_trace.html:66 -#: wireless/choices.py:500 +#: netbox/dcim/choices.py:1554 netbox/templates/dcim/cable_trace.html:66 +#: netbox/wireless/choices.py:500 msgid "Feet" msgstr "Pies" -#: dcim/choices.py:1568 templates/dcim/device.html:327 -#: templates/dcim/rack.html:107 +#: netbox/dcim/choices.py:1570 netbox/templates/dcim/device.html:327 +#: netbox/templates/dcim/rack.html:107 msgid "Kilograms" msgstr "Kilogramos" -#: dcim/choices.py:1569 +#: netbox/dcim/choices.py:1571 msgid "Grams" msgstr "Gramos" -#: dcim/choices.py:1570 templates/dcim/device.html:328 -#: templates/dcim/rack.html:108 +#: netbox/dcim/choices.py:1572 netbox/templates/dcim/device.html:328 +#: netbox/templates/dcim/rack.html:108 msgid "Pounds" msgstr "Libras" -#: dcim/choices.py:1571 +#: netbox/dcim/choices.py:1573 msgid "Ounces" msgstr "Onzas" -#: dcim/choices.py:1618 +#: netbox/dcim/choices.py:1620 msgid "Redundant" msgstr "Redundante" -#: dcim/choices.py:1639 +#: netbox/dcim/choices.py:1641 msgid "Single phase" msgstr "Monofásico" -#: dcim/choices.py:1640 +#: netbox/dcim/choices.py:1642 msgid "Three-phase" msgstr "Trifásico" -#: dcim/fields.py:45 +#: netbox/dcim/fields.py:45 #, python-brace-format msgid "Invalid MAC address format: {value}" msgstr "Formato de dirección MAC no válido: {value}" -#: dcim/fields.py:71 +#: netbox/dcim/fields.py:71 #, python-brace-format msgid "Invalid WWN format: {value}" msgstr "Formato WWN no válido: {value}" -#: dcim/filtersets.py:86 +#: netbox/dcim/filtersets.py:86 msgid "Parent region (ID)" msgstr "Región principal (ID)" -#: dcim/filtersets.py:92 +#: netbox/dcim/filtersets.py:92 msgid "Parent region (slug)" msgstr "Región principal (babosa)" -#: dcim/filtersets.py:116 +#: netbox/dcim/filtersets.py:116 msgid "Parent site group (ID)" msgstr "Grupo de sitio principal (ID)" -#: dcim/filtersets.py:122 +#: netbox/dcim/filtersets.py:122 msgid "Parent site group (slug)" msgstr "Grupo de sitios principal (slug)" -#: dcim/filtersets.py:164 extras/filtersets.py:364 ipam/filtersets.py:841 -#: ipam/filtersets.py:993 +#: netbox/dcim/filtersets.py:164 netbox/extras/filtersets.py:364 +#: netbox/ipam/filtersets.py:841 netbox/ipam/filtersets.py:993 msgid "Group (ID)" msgstr "Grupo (ID)" -#: dcim/filtersets.py:170 +#: netbox/dcim/filtersets.py:170 msgid "Group (slug)" msgstr "Grupo (babosa)" -#: dcim/filtersets.py:176 dcim/filtersets.py:181 +#: netbox/dcim/filtersets.py:176 netbox/dcim/filtersets.py:181 msgid "AS (ID)" msgstr "COMO (ID)" -#: dcim/filtersets.py:246 +#: netbox/dcim/filtersets.py:246 msgid "Parent location (ID)" msgstr "Ubicación principal (ID)" -#: dcim/filtersets.py:252 +#: netbox/dcim/filtersets.py:252 msgid "Parent location (slug)" msgstr "Ubicación principal (slug)" -#: dcim/filtersets.py:258 dcim/filtersets.py:369 dcim/filtersets.py:490 -#: dcim/filtersets.py:1057 dcim/filtersets.py:1404 dcim/filtersets.py:2182 +#: 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 "Ubicación (ID)" -#: dcim/filtersets.py:265 dcim/filtersets.py:376 dcim/filtersets.py:497 -#: dcim/filtersets.py:1410 extras/filtersets.py:542 +#: 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 "Ubicación (babosa)" -#: dcim/filtersets.py:296 dcim/filtersets.py:381 dcim/filtersets.py:539 -#: dcim/filtersets.py:678 dcim/filtersets.py:882 dcim/filtersets.py:933 -#: dcim/filtersets.py:973 dcim/filtersets.py:1306 dcim/filtersets.py:1840 +#: 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 msgid "Manufacturer (ID)" msgstr "Fabricante (ID)" -#: dcim/filtersets.py:302 dcim/filtersets.py:387 dcim/filtersets.py:545 -#: dcim/filtersets.py:684 dcim/filtersets.py:888 dcim/filtersets.py:939 -#: dcim/filtersets.py:979 dcim/filtersets.py:1312 dcim/filtersets.py:1846 +#: 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 msgid "Manufacturer (slug)" msgstr "Fabricante (babosa)" -#: dcim/filtersets.py:393 +#: netbox/dcim/filtersets.py:393 msgid "Rack type (slug)" msgstr "Tipo de bastidor (babosa)" -#: dcim/filtersets.py:397 +#: netbox/dcim/filtersets.py:397 msgid "Rack type (ID)" msgstr "Tipo de bastidor (ID)" -#: dcim/filtersets.py:411 dcim/filtersets.py:892 dcim/filtersets.py:994 -#: dcim/filtersets.py:1850 ipam/filtersets.py:381 ipam/filtersets.py:493 -#: ipam/filtersets.py:1003 virtualization/filtersets.py:210 +#: 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 msgid "Role (ID)" msgstr "Función (ID)" -#: dcim/filtersets.py:417 dcim/filtersets.py:898 dcim/filtersets.py:1000 -#: dcim/filtersets.py:1856 extras/filtersets.py:558 ipam/filtersets.py:387 -#: ipam/filtersets.py:499 ipam/filtersets.py:1009 -#: virtualization/filtersets.py:216 +#: 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/virtualization/filtersets.py:216 msgid "Role (slug)" msgstr "Rol (babosa)" -#: dcim/filtersets.py:447 dcim/filtersets.py:1062 dcim/filtersets.py:1415 -#: dcim/filtersets.py:2244 +#: netbox/dcim/filtersets.py:447 netbox/dcim/filtersets.py:1062 +#: netbox/dcim/filtersets.py:1415 netbox/dcim/filtersets.py:2244 msgid "Rack (ID)" msgstr "Rack (ID)" -#: dcim/filtersets.py:507 extras/filtersets.py:293 extras/filtersets.py:337 -#: extras/filtersets.py:359 extras/filtersets.py:419 users/filtersets.py:113 -#: users/filtersets.py:180 +#: netbox/dcim/filtersets.py:507 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 "Usuario (nombre)" -#: dcim/filtersets.py:549 +#: netbox/dcim/filtersets.py:549 msgid "Default platform (ID)" msgstr "Plataforma predeterminada (ID)" -#: dcim/filtersets.py:555 +#: netbox/dcim/filtersets.py:555 msgid "Default platform (slug)" msgstr "Plataforma predeterminada (slug)" -#: dcim/filtersets.py:558 dcim/forms/filtersets.py:517 +#: netbox/dcim/filtersets.py:558 netbox/dcim/forms/filtersets.py:517 msgid "Has a front image" msgstr "Tiene una imagen frontal" -#: dcim/filtersets.py:562 dcim/forms/filtersets.py:524 +#: netbox/dcim/filtersets.py:562 netbox/dcim/forms/filtersets.py:524 msgid "Has a rear image" msgstr "Tiene una imagen trasera" -#: dcim/filtersets.py:567 dcim/filtersets.py:688 dcim/filtersets.py:1131 -#: dcim/forms/filtersets.py:531 dcim/forms/filtersets.py:627 -#: dcim/forms/filtersets.py:848 +#: 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 msgid "Has console ports" msgstr "Tiene puertos de consola" -#: dcim/filtersets.py:571 dcim/filtersets.py:692 dcim/filtersets.py:1135 -#: dcim/forms/filtersets.py:538 dcim/forms/filtersets.py:634 -#: dcim/forms/filtersets.py:855 +#: 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 msgid "Has console server ports" msgstr "Tiene puertos de servidor de consola" -#: dcim/filtersets.py:575 dcim/filtersets.py:696 dcim/filtersets.py:1139 -#: dcim/forms/filtersets.py:545 dcim/forms/filtersets.py:641 -#: dcim/forms/filtersets.py:862 +#: 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 msgid "Has power ports" msgstr "Tiene puertos de alimentación" -#: dcim/filtersets.py:579 dcim/filtersets.py:700 dcim/filtersets.py:1143 -#: dcim/forms/filtersets.py:552 dcim/forms/filtersets.py:648 -#: dcim/forms/filtersets.py:869 +#: 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 msgid "Has power outlets" msgstr "Tiene tomas de corriente" -#: dcim/filtersets.py:583 dcim/filtersets.py:704 dcim/filtersets.py:1147 -#: dcim/forms/filtersets.py:559 dcim/forms/filtersets.py:655 -#: dcim/forms/filtersets.py:876 +#: 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 msgid "Has interfaces" msgstr "Tiene interfaces" -#: dcim/filtersets.py:587 dcim/filtersets.py:708 dcim/filtersets.py:1151 -#: dcim/forms/filtersets.py:566 dcim/forms/filtersets.py:662 -#: dcim/forms/filtersets.py:883 +#: 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 msgid "Has pass-through ports" msgstr "Tiene puertos de paso" -#: dcim/filtersets.py:591 dcim/filtersets.py:1155 dcim/forms/filtersets.py:580 +#: netbox/dcim/filtersets.py:591 netbox/dcim/filtersets.py:1155 +#: netbox/dcim/forms/filtersets.py:580 msgid "Has module bays" msgstr "Tiene compartimentos para módulos" -#: dcim/filtersets.py:595 dcim/filtersets.py:1159 dcim/forms/filtersets.py:573 +#: netbox/dcim/filtersets.py:595 netbox/dcim/filtersets.py:1159 +#: netbox/dcim/forms/filtersets.py:573 msgid "Has device bays" msgstr "Tiene compartimentos para dispositivos" -#: dcim/filtersets.py:599 dcim/forms/filtersets.py:587 +#: netbox/dcim/filtersets.py:599 netbox/dcim/forms/filtersets.py:587 msgid "Has inventory items" msgstr "Tiene artículos de inventario" -#: dcim/filtersets.py:756 dcim/filtersets.py:989 dcim/filtersets.py:1436 +#: netbox/dcim/filtersets.py:756 netbox/dcim/filtersets.py:989 +#: netbox/dcim/filtersets.py:1436 msgid "Device type (ID)" msgstr "Tipo de dispositivo (ID)" -#: dcim/filtersets.py:772 dcim/filtersets.py:1317 +#: netbox/dcim/filtersets.py:772 netbox/dcim/filtersets.py:1317 msgid "Module type (ID)" msgstr "Tipo de módulo (ID)" -#: dcim/filtersets.py:804 dcim/filtersets.py:1591 +#: netbox/dcim/filtersets.py:804 netbox/dcim/filtersets.py:1591 msgid "Power port (ID)" msgstr "Puerto de alimentación (ID)" -#: dcim/filtersets.py:878 dcim/filtersets.py:1836 +#: netbox/dcim/filtersets.py:878 netbox/dcim/filtersets.py:1836 msgid "Parent inventory item (ID)" msgstr "Artículo del inventario principal (ID)" -#: dcim/filtersets.py:921 dcim/filtersets.py:947 dcim/filtersets.py:1127 -#: virtualization/filtersets.py:238 +#: netbox/dcim/filtersets.py:921 netbox/dcim/filtersets.py:947 +#: netbox/dcim/filtersets.py:1127 netbox/virtualization/filtersets.py:238 msgid "Config template (ID)" msgstr "Plantilla de configuración (ID)" -#: dcim/filtersets.py:985 +#: netbox/dcim/filtersets.py:985 msgid "Device type (slug)" msgstr "Tipo de dispositivo (slug)" -#: dcim/filtersets.py:1005 +#: netbox/dcim/filtersets.py:1005 msgid "Parent Device (ID)" msgstr "Dispositivo principal (ID)" -#: dcim/filtersets.py:1009 virtualization/filtersets.py:220 +#: netbox/dcim/filtersets.py:1009 netbox/virtualization/filtersets.py:220 msgid "Platform (ID)" msgstr "Plataforma (ID)" -#: dcim/filtersets.py:1015 extras/filtersets.py:569 -#: virtualization/filtersets.py:226 +#: netbox/dcim/filtersets.py:1015 netbox/extras/filtersets.py:569 +#: netbox/virtualization/filtersets.py:226 msgid "Platform (slug)" msgstr "Plataforma (babosa)" -#: dcim/filtersets.py:1051 dcim/filtersets.py:1399 dcim/filtersets.py:1934 -#: dcim/filtersets.py:2176 dcim/filtersets.py:2235 +#: 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 msgid "Site name (slug)" msgstr "Nombre del sitio (slug)" -#: dcim/filtersets.py:1067 +#: netbox/dcim/filtersets.py:1067 msgid "Parent bay (ID)" msgstr "Bahía principal (ID)" -#: dcim/filtersets.py:1071 +#: netbox/dcim/filtersets.py:1071 msgid "VM cluster (ID)" msgstr "Clúster de máquinas virtuales (ID)" -#: dcim/filtersets.py:1077 extras/filtersets.py:591 -#: virtualization/filtersets.py:136 +#: netbox/dcim/filtersets.py:1077 netbox/extras/filtersets.py:591 +#: netbox/virtualization/filtersets.py:136 msgid "Cluster group (slug)" msgstr "Grupo de racimos (babosa)" -#: dcim/filtersets.py:1082 virtualization/filtersets.py:130 +#: netbox/dcim/filtersets.py:1082 netbox/virtualization/filtersets.py:130 msgid "Cluster group (ID)" msgstr "Grupo de clústeres (ID)" -#: dcim/filtersets.py:1088 +#: netbox/dcim/filtersets.py:1088 msgid "Device model (slug)" msgstr "Modelo de dispositivo (slug)" -#: dcim/filtersets.py:1099 dcim/forms/bulk_edit.py:516 +#: netbox/dcim/filtersets.py:1099 netbox/dcim/forms/bulk_edit.py:522 msgid "Is full depth" msgstr "Es de profundidad total" -#: dcim/filtersets.py:1103 dcim/forms/common.py:18 -#: dcim/forms/filtersets.py:818 dcim/forms/filtersets.py:1385 -#: dcim/models/device_components.py:518 virtualization/filtersets.py:230 -#: virtualization/filtersets.py:301 virtualization/forms/filtersets.py:172 -#: virtualization/forms/filtersets.py:223 +#: 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 msgid "MAC address" msgstr "Dirección MAC" -#: dcim/filtersets.py:1110 dcim/filtersets.py:1274 -#: dcim/forms/filtersets.py:827 dcim/forms/filtersets.py:930 -#: virtualization/filtersets.py:234 virtualization/forms/filtersets.py:176 +#: 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 msgid "Has a primary IP" msgstr "Tiene una IP principal" -#: dcim/filtersets.py:1114 +#: netbox/dcim/filtersets.py:1114 msgid "Has an out-of-band IP" msgstr "Tiene una IP fuera de banda" -#: dcim/filtersets.py:1119 +#: netbox/dcim/filtersets.py:1119 msgid "Virtual chassis (ID)" msgstr "Chasis virtual (ID)" -#: dcim/filtersets.py:1123 +#: netbox/dcim/filtersets.py:1123 msgid "Is a virtual chassis member" msgstr "Es un miembro del chasis virtual" -#: dcim/filtersets.py:1164 +#: netbox/dcim/filtersets.py:1164 msgid "OOB IP (ID)" msgstr "LOB VIP (ID)" -#: dcim/filtersets.py:1168 +#: netbox/dcim/filtersets.py:1168 msgid "Has virtual device context" msgstr "Tiene contexto de dispositivo virtual" -#: dcim/filtersets.py:1257 +#: netbox/dcim/filtersets.py:1257 msgid "VDC (ID)" msgstr "VDC (IDENTIFICACIÓN)" -#: dcim/filtersets.py:1262 +#: netbox/dcim/filtersets.py:1262 msgid "Device model" msgstr "Modelo de dispositivo" -#: dcim/filtersets.py:1267 ipam/filtersets.py:632 vpn/filtersets.py:102 -#: vpn/filtersets.py:401 +#: netbox/dcim/filtersets.py:1267 netbox/ipam/filtersets.py:632 +#: netbox/vpn/filtersets.py:102 netbox/vpn/filtersets.py:401 msgid "Interface (ID)" msgstr "Interfaz (ID)" -#: dcim/filtersets.py:1323 +#: netbox/dcim/filtersets.py:1323 msgid "Module type (model)" msgstr "Tipo de módulo (modelo)" -#: dcim/filtersets.py:1329 +#: netbox/dcim/filtersets.py:1329 msgid "Module bay (ID)" msgstr "Bahía de módulos (ID)" -#: dcim/filtersets.py:1333 dcim/filtersets.py:1425 ipam/filtersets.py:611 -#: ipam/filtersets.py:851 ipam/filtersets.py:1115 -#: virtualization/filtersets.py:161 vpn/filtersets.py:379 +#: 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/vpn/filtersets.py:379 msgid "Device (ID)" msgstr "Dispositivo (ID)" -#: dcim/filtersets.py:1421 +#: netbox/dcim/filtersets.py:1421 msgid "Rack (name)" msgstr "Rack (nombre)" -#: dcim/filtersets.py:1431 ipam/filtersets.py:606 ipam/filtersets.py:846 -#: ipam/filtersets.py:1121 vpn/filtersets.py:374 +#: netbox/dcim/filtersets.py:1431 netbox/ipam/filtersets.py:606 +#: netbox/ipam/filtersets.py:846 netbox/ipam/filtersets.py:1121 +#: netbox/vpn/filtersets.py:374 msgid "Device (name)" msgstr "Dispositivo (nombre)" -#: dcim/filtersets.py:1442 +#: netbox/dcim/filtersets.py:1442 msgid "Device type (model)" msgstr "Tipo de dispositivo (modelo)" -#: dcim/filtersets.py:1447 +#: netbox/dcim/filtersets.py:1447 msgid "Device role (ID)" msgstr "Función del dispositivo (ID)" -#: dcim/filtersets.py:1453 +#: netbox/dcim/filtersets.py:1453 msgid "Device role (slug)" msgstr "Función del dispositivo (slug)" -#: dcim/filtersets.py:1458 +#: netbox/dcim/filtersets.py:1458 msgid "Virtual Chassis (ID)" msgstr "Chasis virtual (ID)" -#: dcim/filtersets.py:1464 dcim/forms/filtersets.py:109 -#: dcim/tables/devices.py:206 netbox/navigation/menu.py:79 -#: templates/dcim/device.html:120 templates/dcim/device_edit.html:93 -#: templates/dcim/virtualchassis.html:20 -#: templates/dcim/virtualchassis_add.html:8 -#: templates/dcim/virtualchassis_edit.html:24 +#: netbox/dcim/filtersets.py:1464 netbox/dcim/forms/filtersets.py:109 +#: netbox/dcim/tables/devices.py:206 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 +#: netbox/templates/dcim/virtualchassis_add.html:8 +#: netbox/templates/dcim/virtualchassis_edit.html:24 msgid "Virtual Chassis" msgstr "Chasis virtual" -#: dcim/filtersets.py:1488 +#: netbox/dcim/filtersets.py:1488 msgid "Module (ID)" msgstr "Módulo (ID)" -#: dcim/filtersets.py:1495 +#: netbox/dcim/filtersets.py:1495 msgid "Cable (ID)" msgstr "Cable (ID)" -#: dcim/filtersets.py:1604 ipam/forms/bulk_import.py:189 -#: vpn/forms/bulk_import.py:308 +#: netbox/dcim/filtersets.py:1604 netbox/ipam/forms/bulk_import.py:189 +#: netbox/vpn/forms/bulk_import.py:308 msgid "Assigned VLAN" msgstr "VLAN asignada" -#: dcim/filtersets.py:1608 +#: netbox/dcim/filtersets.py:1608 msgid "Assigned VID" msgstr "VID asignado" -#: dcim/filtersets.py:1613 dcim/forms/bulk_edit.py:1489 -#: dcim/forms/bulk_import.py:891 dcim/forms/filtersets.py:1428 -#: dcim/forms/model_forms.py:1378 dcim/models/device_components.py:711 -#: dcim/tables/devices.py:626 ipam/filtersets.py:316 ipam/filtersets.py:327 -#: ipam/filtersets.py:483 ipam/filtersets.py:584 ipam/filtersets.py:595 -#: ipam/forms/bulk_edit.py:242 ipam/forms/bulk_edit.py:298 -#: ipam/forms/bulk_edit.py:340 ipam/forms/bulk_import.py:157 -#: ipam/forms/bulk_import.py:243 ipam/forms/bulk_import.py:279 -#: ipam/forms/filtersets.py:67 ipam/forms/filtersets.py:172 -#: ipam/forms/filtersets.py:309 ipam/forms/model_forms.py:62 -#: ipam/forms/model_forms.py:202 ipam/forms/model_forms.py:247 -#: ipam/forms/model_forms.py:300 ipam/forms/model_forms.py:431 -#: ipam/forms/model_forms.py:445 ipam/forms/model_forms.py:459 -#: ipam/models/ip.py:233 ipam/models/ip.py:512 ipam/models/ip.py:720 -#: ipam/models/vrfs.py:62 ipam/tables/ip.py:242 ipam/tables/ip.py:309 -#: ipam/tables/ip.py:360 ipam/tables/ip.py:450 -#: templates/dcim/interface.html:133 templates/ipam/ipaddress.html:18 -#: templates/ipam/iprange.html:40 templates/ipam/prefix.html:19 -#: templates/ipam/vrf.html:7 templates/ipam/vrf.html:13 -#: templates/virtualization/vminterface.html:47 -#: virtualization/forms/bulk_edit.py:261 -#: virtualization/forms/bulk_import.py:171 -#: virtualization/forms/filtersets.py:228 -#: virtualization/forms/model_forms.py:344 -#: virtualization/models/virtualmachines.py:355 -#: virtualization/tables/virtualmachines.py:143 +#: 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:316 +#: netbox/ipam/filtersets.py:327 netbox/ipam/filtersets.py:483 +#: netbox/ipam/filtersets.py:584 netbox/ipam/filtersets.py:595 +#: netbox/ipam/forms/bulk_edit.py: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/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 msgid "VRF" msgstr "VRF" -#: dcim/filtersets.py:1619 ipam/filtersets.py:322 ipam/filtersets.py:333 -#: ipam/filtersets.py:489 ipam/filtersets.py:590 ipam/filtersets.py:601 +#: 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 msgid "VRF (RD)" msgstr "VRF (ROJO)" -#: dcim/filtersets.py:1624 ipam/filtersets.py:1030 vpn/filtersets.py:342 +#: netbox/dcim/filtersets.py:1624 netbox/ipam/filtersets.py:1030 +#: netbox/vpn/filtersets.py:342 msgid "L2VPN (ID)" msgstr "L2VPN (ID)" -#: dcim/filtersets.py:1630 dcim/forms/filtersets.py:1433 -#: dcim/tables/devices.py:570 ipam/filtersets.py:1036 -#: ipam/forms/filtersets.py:518 ipam/tables/vlans.py:137 -#: templates/dcim/interface.html:93 templates/ipam/vlan.html:66 -#: templates/vpn/l2vpntermination.html:12 -#: virtualization/forms/filtersets.py:233 vpn/forms/bulk_import.py:280 -#: vpn/forms/filtersets.py:246 vpn/forms/model_forms.py:409 -#: vpn/forms/model_forms.py:427 vpn/models/l2vpn.py:63 vpn/tables/l2vpn.py:55 +#: netbox/dcim/filtersets.py:1630 netbox/dcim/forms/filtersets.py:1433 +#: netbox/dcim/tables/devices.py:570 netbox/ipam/filtersets.py:1036 +#: 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 +#: netbox/virtualization/forms/filtersets.py:233 +#: netbox/vpn/forms/bulk_import.py:280 netbox/vpn/forms/filtersets.py:246 +#: netbox/vpn/forms/model_forms.py:409 netbox/vpn/forms/model_forms.py:427 +#: netbox/vpn/models/l2vpn.py:63 netbox/vpn/tables/l2vpn.py:55 msgid "L2VPN" msgstr "L2VPN" -#: dcim/filtersets.py:1662 +#: netbox/dcim/filtersets.py:1662 msgid "Virtual Chassis Interfaces for Device" msgstr "Interfaces de chasis virtuales para dispositivos" -#: dcim/filtersets.py:1667 +#: netbox/dcim/filtersets.py:1667 msgid "Virtual Chassis Interfaces for Device (ID)" msgstr "Interfaces de chasis virtuales para dispositivos (ID)" -#: dcim/filtersets.py:1671 +#: netbox/dcim/filtersets.py:1671 msgid "Kind of interface" msgstr "Tipo de interfaz" -#: dcim/filtersets.py:1676 virtualization/filtersets.py:293 +#: netbox/dcim/filtersets.py:1676 netbox/virtualization/filtersets.py:293 msgid "Parent interface (ID)" msgstr "Interfaz principal (ID)" -#: dcim/filtersets.py:1681 virtualization/filtersets.py:298 +#: netbox/dcim/filtersets.py:1681 netbox/virtualization/filtersets.py:298 msgid "Bridged interface (ID)" msgstr "Interfaz puenteada (ID)" -#: dcim/filtersets.py:1686 +#: netbox/dcim/filtersets.py:1686 msgid "LAG interface (ID)" msgstr "Interfaz LAG (ID)" -#: dcim/filtersets.py:1713 dcim/filtersets.py:1725 -#: dcim/forms/filtersets.py:1345 dcim/forms/model_forms.py:1690 -#: templates/dcim/virtualdevicecontext.html:15 +#: netbox/dcim/filtersets.py:1713 netbox/dcim/filtersets.py:1725 +#: netbox/dcim/forms/filtersets.py:1345 netbox/dcim/forms/model_forms.py:1697 +#: netbox/templates/dcim/virtualdevicecontext.html:15 msgid "Virtual Device Context" msgstr "Contexto de dispositivo virtual" -#: dcim/filtersets.py:1719 +#: netbox/dcim/filtersets.py:1719 msgid "Virtual Device Context (Identifier)" msgstr "Contexto de dispositivo virtual (identificador)" -#: dcim/filtersets.py:1730 templates/wireless/wirelesslan.html:11 -#: wireless/forms/model_forms.py:53 +#: netbox/dcim/filtersets.py:1730 +#: netbox/templates/wireless/wirelesslan.html:11 +#: netbox/wireless/forms/model_forms.py:53 msgid "Wireless LAN" msgstr "LAN inalámbrica" -#: dcim/filtersets.py:1734 dcim/tables/devices.py:613 +#: netbox/dcim/filtersets.py:1734 netbox/dcim/tables/devices.py:613 msgid "Wireless link" msgstr "Enlace inalámbrico" -#: dcim/filtersets.py:1803 +#: netbox/dcim/filtersets.py:1803 msgid "Parent module bay (ID)" msgstr "Compartimento del módulo principal (ID)" -#: dcim/filtersets.py:1808 +#: netbox/dcim/filtersets.py:1808 msgid "Installed module (ID)" msgstr "Módulo instalado (ID)" -#: dcim/filtersets.py:1819 +#: netbox/dcim/filtersets.py:1819 msgid "Installed device (ID)" msgstr "Dispositivo instalado (ID)" -#: dcim/filtersets.py:1825 +#: netbox/dcim/filtersets.py:1825 msgid "Installed device (name)" msgstr "Dispositivo instalado (nombre)" -#: dcim/filtersets.py:1891 +#: netbox/dcim/filtersets.py:1891 msgid "Master (ID)" msgstr "Maestro (ID)" -#: dcim/filtersets.py:1897 +#: netbox/dcim/filtersets.py:1897 msgid "Master (name)" msgstr "Maestro (nombre)" -#: dcim/filtersets.py:1939 tenancy/filtersets.py:245 +#: netbox/dcim/filtersets.py:1939 netbox/tenancy/filtersets.py:245 msgid "Tenant (ID)" msgstr "Inquilino (ID)" -#: dcim/filtersets.py:1945 extras/filtersets.py:618 tenancy/filtersets.py:251 +#: netbox/dcim/filtersets.py:1945 netbox/extras/filtersets.py:618 +#: netbox/tenancy/filtersets.py:251 msgid "Tenant (slug)" msgstr "Inquilino (babosa)" -#: dcim/filtersets.py:1981 dcim/forms/filtersets.py:1077 +#: netbox/dcim/filtersets.py:1981 netbox/dcim/forms/filtersets.py:1077 msgid "Unterminated" msgstr "Inacabado" -#: dcim/filtersets.py:2239 +#: netbox/dcim/filtersets.py:2239 msgid "Power panel (ID)" msgstr "Panel de alimentación (ID)" -#: dcim/forms/bulk_create.py:40 extras/forms/filtersets.py:401 -#: extras/forms/model_forms.py:567 extras/forms/model_forms.py:619 -#: netbox/forms/base.py:86 netbox/forms/mixins.py:81 -#: netbox/tables/columns.py:478 -#: templates/circuits/inc/circuit_termination.html:32 -#: templates/generic/bulk_edit.html:65 templates/inc/panels/tags.html:5 -#: utilities/forms/fields/fields.py:81 +#: netbox/dcim/forms/bulk_create.py:40 netbox/extras/forms/filtersets.py: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/templates/circuits/inc/circuit_termination.html:32 +#: netbox/templates/generic/bulk_edit.html:65 +#: netbox/templates/inc/panels/tags.html:5 +#: netbox/utilities/forms/fields/fields.py:81 msgid "Tags" msgstr "Etiquetas" -#: dcim/forms/bulk_create.py:112 dcim/forms/filtersets.py:1498 -#: dcim/forms/model_forms.py:488 dcim/forms/model_forms.py:546 -#: dcim/forms/object_create.py:197 dcim/forms/object_create.py:353 -#: dcim/tables/devices.py:165 dcim/tables/devices.py:707 -#: dcim/tables/devicetypes.py:246 templates/dcim/device.html:43 -#: templates/dcim/device.html:131 templates/dcim/modulebay.html:38 -#: templates/dcim/virtualchassis.html:66 -#: templates/dcim/virtualchassis_edit.html:55 +#: 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/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/templates/dcim/device.html:43 netbox/templates/dcim/device.html:131 +#: netbox/templates/dcim/modulebay.html:38 +#: netbox/templates/dcim/virtualchassis.html:66 +#: netbox/templates/dcim/virtualchassis_edit.html:55 msgid "Position" msgstr "Posición" -#: dcim/forms/bulk_create.py:114 +#: netbox/dcim/forms/bulk_create.py:114 msgid "" "Alphanumeric ranges are supported. (Must match the number of names being " "created.)" @@ -3121,826 +3450,923 @@ msgstr "" "Se admiten los rangos alfanuméricos. (Debe coincidir con el número de " "nombres que se están creando)." -#: dcim/forms/bulk_edit.py:132 +#: netbox/dcim/forms/bulk_edit.py:133 msgid "Contact name" msgstr "Nombre de contacto" -#: dcim/forms/bulk_edit.py:137 +#: netbox/dcim/forms/bulk_edit.py:138 msgid "Contact phone" msgstr "Teléfono de contacto" -#: dcim/forms/bulk_edit.py:143 +#: netbox/dcim/forms/bulk_edit.py:144 msgid "Contact E-mail" msgstr "Correo electrónico de contacto" -#: dcim/forms/bulk_edit.py:146 dcim/forms/bulk_import.py:123 -#: dcim/forms/model_forms.py:128 +#: netbox/dcim/forms/bulk_edit.py:147 netbox/dcim/forms/bulk_import.py:123 +#: netbox/dcim/forms/model_forms.py:128 msgid "Time zone" msgstr "Zona horaria" -#: dcim/forms/bulk_edit.py:224 dcim/forms/bulk_edit.py:495 -#: dcim/forms/bulk_edit.py:559 dcim/forms/bulk_edit.py:632 -#: dcim/forms/bulk_edit.py:656 dcim/forms/bulk_edit.py:740 -#: dcim/forms/bulk_edit.py:1267 dcim/forms/bulk_edit.py:1660 -#: dcim/forms/bulk_import.py:182 dcim/forms/bulk_import.py:371 -#: dcim/forms/bulk_import.py:405 dcim/forms/bulk_import.py:450 -#: dcim/forms/bulk_import.py:486 dcim/forms/bulk_import.py:1082 -#: dcim/forms/filtersets.py:313 dcim/forms/filtersets.py:372 -#: dcim/forms/filtersets.py:494 dcim/forms/filtersets.py:619 -#: dcim/forms/filtersets.py:700 dcim/forms/filtersets.py:782 -#: dcim/forms/filtersets.py:947 dcim/forms/filtersets.py:1539 -#: dcim/forms/model_forms.py:207 dcim/forms/model_forms.py:337 -#: dcim/forms/model_forms.py:349 dcim/forms/model_forms.py:395 -#: dcim/forms/model_forms.py:436 dcim/forms/model_forms.py:1075 -#: dcim/forms/model_forms.py:1515 dcim/forms/object_import.py:187 -#: dcim/tables/devices.py:96 dcim/tables/devices.py:172 -#: dcim/tables/devices.py:940 dcim/tables/devicetypes.py:80 -#: dcim/tables/devicetypes.py:308 dcim/tables/modules.py:20 -#: dcim/tables/modules.py:60 dcim/tables/racks.py:58 dcim/tables/racks.py:132 -#: templates/dcim/devicetype.html:14 templates/dcim/inventoryitem.html:44 -#: templates/dcim/manufacturer.html:33 templates/dcim/modulebay.html:62 -#: templates/dcim/moduletype.html:25 templates/dcim/platform.html:37 -#: templates/dcim/racktype.html:16 +#: 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/tables/modules.py:60 +#: 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/templates/dcim/manufacturer.html:33 +#: netbox/templates/dcim/modulebay.html:62 +#: netbox/templates/dcim/moduletype.html:25 +#: netbox/templates/dcim/platform.html:37 +#: netbox/templates/dcim/racktype.html:16 msgid "Manufacturer" msgstr "fabricante" -#: dcim/forms/bulk_edit.py:229 dcim/forms/bulk_edit.py:372 -#: dcim/forms/bulk_import.py:191 dcim/forms/bulk_import.py:263 -#: dcim/forms/filtersets.py:255 -#: templates/dcim/inc/panels/racktype_dimensions.html:6 +#: 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/templates/dcim/inc/panels/racktype_dimensions.html:6 msgid "Form factor" msgstr "Factor de forma" -#: dcim/forms/bulk_edit.py:234 dcim/forms/bulk_edit.py:377 -#: dcim/forms/bulk_import.py:199 dcim/forms/bulk_import.py:266 -#: dcim/forms/filtersets.py:260 -#: templates/dcim/inc/panels/racktype_dimensions.html:10 +#: 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/templates/dcim/inc/panels/racktype_dimensions.html:10 msgid "Width" msgstr "Anchura" -#: dcim/forms/bulk_edit.py:240 dcim/forms/bulk_edit.py:383 -#: templates/dcim/devicetype.html:37 +#: netbox/dcim/forms/bulk_edit.py:241 netbox/dcim/forms/bulk_edit.py:389 +#: netbox/dcim/forms/bulk_import.py:280 +#: netbox/templates/dcim/devicetype.html:37 msgid "Height (U)" msgstr "Altura (U)" -#: dcim/forms/bulk_edit.py:249 dcim/forms/bulk_edit.py:388 -#: dcim/forms/filtersets.py:274 +#: netbox/dcim/forms/bulk_edit.py:250 netbox/dcim/forms/bulk_edit.py:394 +#: netbox/dcim/forms/filtersets.py:274 msgid "Descending units" msgstr "Unidades descendentes" -#: dcim/forms/bulk_edit.py:252 dcim/forms/bulk_edit.py:391 +#: netbox/dcim/forms/bulk_edit.py:253 netbox/dcim/forms/bulk_edit.py:397 msgid "Outer width" msgstr "Anchura exterior" -#: dcim/forms/bulk_edit.py:257 dcim/forms/bulk_edit.py:396 +#: netbox/dcim/forms/bulk_edit.py:258 netbox/dcim/forms/bulk_edit.py:402 msgid "Outer depth" msgstr "Profundidad exterior" -#: dcim/forms/bulk_edit.py:262 dcim/forms/bulk_edit.py:401 -#: dcim/forms/bulk_import.py:204 dcim/forms/bulk_import.py:271 +#: 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 msgid "Outer unit" msgstr "Unidad exterior" -#: dcim/forms/bulk_edit.py:267 dcim/forms/bulk_edit.py:406 +#: netbox/dcim/forms/bulk_edit.py:268 netbox/dcim/forms/bulk_edit.py:412 msgid "Mounting depth" msgstr "Profundidad de montaje" -#: dcim/forms/bulk_edit.py:272 dcim/forms/bulk_edit.py:299 -#: dcim/forms/bulk_edit.py:416 dcim/forms/bulk_edit.py:446 -#: dcim/forms/bulk_edit.py:529 dcim/forms/bulk_edit.py:552 -#: dcim/forms/bulk_edit.py:573 dcim/forms/bulk_edit.py:595 -#: dcim/forms/bulk_import.py:384 dcim/forms/bulk_import.py:416 -#: dcim/forms/filtersets.py:285 dcim/forms/filtersets.py:307 -#: dcim/forms/filtersets.py:327 dcim/forms/filtersets.py:401 -#: dcim/forms/filtersets.py:488 dcim/forms/filtersets.py:594 -#: dcim/forms/filtersets.py:613 dcim/forms/filtersets.py:674 -#: dcim/forms/model_forms.py:221 dcim/forms/model_forms.py:298 -#: dcim/tables/devicetypes.py:106 dcim/tables/modules.py:35 -#: dcim/tables/racks.py:74 dcim/tables/racks.py:172 -#: extras/forms/bulk_edit.py:53 extras/forms/bulk_edit.py:133 -#: extras/forms/bulk_edit.py:183 extras/forms/bulk_edit.py:288 -#: extras/forms/filtersets.py:64 extras/forms/filtersets.py:156 -#: extras/forms/filtersets.py:243 ipam/forms/bulk_edit.py:190 -#: templates/dcim/device.html:324 templates/dcim/devicetype.html:49 -#: templates/dcim/moduletype.html:45 templates/dcim/rack.html:81 -#: templates/dcim/racktype.html:41 templates/extras/configcontext.html:17 -#: templates/extras/customlink.html:25 templates/extras/savedfilter.html:33 -#: templates/ipam/role.html:30 +#: netbox/dcim/forms/bulk_edit.py: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/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/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/racktype.html:41 +#: netbox/templates/extras/configcontext.html:17 +#: netbox/templates/extras/customlink.html:25 +#: netbox/templates/extras/savedfilter.html:33 +#: netbox/templates/ipam/role.html:30 msgid "Weight" msgstr "Peso" -#: dcim/forms/bulk_edit.py:277 dcim/forms/bulk_edit.py:421 -#: dcim/forms/filtersets.py:290 +#: netbox/dcim/forms/bulk_edit.py:278 netbox/dcim/forms/bulk_edit.py:427 +#: netbox/dcim/forms/filtersets.py:290 msgid "Max weight" msgstr "Peso máximo" -#: dcim/forms/bulk_edit.py:282 dcim/forms/bulk_edit.py:426 -#: dcim/forms/bulk_edit.py:534 dcim/forms/bulk_edit.py:578 -#: dcim/forms/bulk_import.py:210 dcim/forms/bulk_import.py:283 -#: dcim/forms/bulk_import.py:389 dcim/forms/bulk_import.py:421 -#: dcim/forms/filtersets.py:295 dcim/forms/filtersets.py:598 -#: dcim/forms/filtersets.py:678 +#: 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 msgid "Weight unit" msgstr "Unidad de peso" -#: dcim/forms/bulk_edit.py:296 dcim/forms/filtersets.py:305 -#: dcim/forms/model_forms.py:217 dcim/forms/model_forms.py:256 -#: templates/dcim/rack.html:45 templates/dcim/racktype.html:13 +#: 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/templates/dcim/rack.html:45 netbox/templates/dcim/racktype.html:13 msgid "Rack Type" msgstr "Tipo de bastidor" -#: dcim/forms/bulk_edit.py:298 dcim/forms/model_forms.py:220 -#: dcim/forms/model_forms.py:297 +#: netbox/dcim/forms/bulk_edit.py:299 netbox/dcim/forms/model_forms.py:220 +#: netbox/dcim/forms/model_forms.py:297 msgid "Outer Dimensions" msgstr "Dimensiones exteriores" -#: dcim/forms/bulk_edit.py:301 dcim/forms/model_forms.py:222 -#: dcim/forms/model_forms.py:299 templates/dcim/device.html:315 -#: templates/dcim/inc/panels/racktype_dimensions.html:3 +#: 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/templates/dcim/inc/panels/racktype_dimensions.html:3 msgid "Dimensions" msgstr "Dimensiones" -#: dcim/forms/bulk_edit.py:303 dcim/forms/filtersets.py:306 -#: dcim/forms/filtersets.py:326 dcim/forms/model_forms.py:224 -#: templates/dcim/inc/panels/racktype_numbering.html:3 +#: 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/templates/dcim/inc/panels/racktype_numbering.html:3 msgid "Numbering" msgstr "Numeración" -#: dcim/forms/bulk_edit.py:357 dcim/forms/bulk_edit.py:1262 -#: dcim/forms/bulk_edit.py:1655 dcim/forms/bulk_import.py:253 -#: dcim/forms/bulk_import.py:1076 dcim/forms/filtersets.py:367 -#: dcim/forms/filtersets.py:777 dcim/forms/filtersets.py:1534 -#: dcim/forms/model_forms.py:251 dcim/forms/model_forms.py:1070 -#: dcim/forms/model_forms.py:1510 dcim/forms/object_import.py:181 -#: dcim/tables/devices.py:169 dcim/tables/devices.py:809 -#: dcim/tables/devices.py:937 dcim/tables/devicetypes.py:304 -#: dcim/tables/racks.py:129 extras/filtersets.py:552 -#: ipam/forms/bulk_edit.py:261 ipam/forms/bulk_edit.py:311 -#: ipam/forms/bulk_edit.py:359 ipam/forms/bulk_edit.py:511 -#: ipam/forms/bulk_import.py:197 ipam/forms/bulk_import.py:262 -#: ipam/forms/bulk_import.py:298 ipam/forms/bulk_import.py:455 -#: ipam/forms/filtersets.py:237 ipam/forms/filtersets.py:289 -#: ipam/forms/filtersets.py:360 ipam/forms/filtersets.py:509 -#: ipam/forms/model_forms.py:188 ipam/forms/model_forms.py:221 -#: ipam/forms/model_forms.py:250 ipam/forms/model_forms.py:643 -#: ipam/tables/ip.py:258 ipam/tables/ip.py:316 ipam/tables/ip.py:367 -#: ipam/tables/vlans.py:130 ipam/tables/vlans.py:235 -#: templates/dcim/device.html:182 -#: templates/dcim/inc/panels/inventory_items.html:20 -#: templates/dcim/interface.html:223 templates/dcim/inventoryitem.html:36 -#: templates/dcim/rack.html:49 templates/ipam/ipaddress.html:41 -#: templates/ipam/iprange.html:50 templates/ipam/prefix.html:77 -#: templates/ipam/role.html:19 templates/ipam/vlan.html:52 -#: templates/virtualization/virtualmachine.html:23 -#: templates/vpn/tunneltermination.html:17 -#: templates/wireless/inc/wirelesslink_interface.html:20 -#: tenancy/forms/bulk_edit.py:142 tenancy/forms/filtersets.py:107 -#: tenancy/forms/model_forms.py:137 tenancy/tables/contacts.py:102 -#: virtualization/forms/bulk_edit.py:145 -#: virtualization/forms/bulk_import.py:106 -#: virtualization/forms/filtersets.py:157 -#: virtualization/forms/model_forms.py:195 -#: virtualization/tables/virtualmachines.py:75 vpn/forms/bulk_edit.py:87 -#: vpn/forms/bulk_import.py:81 vpn/forms/filtersets.py:85 -#: vpn/forms/model_forms.py:78 vpn/forms/model_forms.py:113 -#: vpn/tables/tunnels.py:82 +#: netbox/dcim/forms/bulk_edit.py: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" -#: dcim/forms/bulk_edit.py:364 dcim/forms/bulk_edit.py:712 -#: dcim/forms/bulk_edit.py:764 templates/dcim/device.html:104 -#: templates/dcim/module.html:77 templates/dcim/modulebay.html:70 -#: templates/dcim/rack.html:57 templates/virtualization/virtualmachine.html:35 +#: netbox/dcim/forms/bulk_edit.py:363 netbox/dcim/forms/bulk_import.py:260 +#: netbox/dcim/forms/filtersets.py:380 +msgid "Rack type" +msgstr "Tipo de bastidor" + +#: 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/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 "Número de serie" -#: dcim/forms/bulk_edit.py:367 dcim/forms/filtersets.py:387 -#: dcim/forms/filtersets.py:813 dcim/forms/filtersets.py:967 -#: dcim/forms/filtersets.py:1546 +#: 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 msgid "Asset tag" msgstr "Etiqueta de activo" -#: dcim/forms/bulk_edit.py:411 dcim/forms/bulk_edit.py:524 -#: dcim/forms/bulk_edit.py:568 dcim/forms/bulk_edit.py:705 -#: dcim/forms/bulk_import.py:277 dcim/forms/bulk_import.py:410 -#: dcim/forms/bulk_import.py:580 dcim/forms/filtersets.py:280 -#: dcim/forms/filtersets.py:511 dcim/forms/filtersets.py:669 -#: dcim/forms/filtersets.py:804 templates/dcim/device.html:98 -#: templates/dcim/devicetype.html:65 templates/dcim/moduletype.html:41 -#: templates/dcim/rack.html:65 templates/dcim/racktype.html:28 +#: 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/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 "Flujo de aire" -#: dcim/forms/bulk_edit.py:440 dcim/forms/bulk_edit.py:910 -#: dcim/forms/bulk_import.py:322 dcim/forms/bulk_import.py:325 -#: dcim/forms/bulk_import.py:553 dcim/forms/bulk_import.py:1358 -#: dcim/forms/bulk_import.py:1362 dcim/forms/filtersets.py:104 -#: dcim/forms/filtersets.py:324 dcim/forms/filtersets.py:405 -#: dcim/forms/filtersets.py:419 dcim/forms/filtersets.py:457 -#: dcim/forms/filtersets.py:772 dcim/forms/filtersets.py:1035 -#: dcim/forms/filtersets.py:1167 dcim/forms/model_forms.py:264 -#: dcim/forms/model_forms.py:306 dcim/forms/model_forms.py:479 -#: dcim/forms/model_forms.py:755 dcim/forms/object_create.py:400 -#: dcim/tables/devices.py:161 dcim/tables/power.py:70 dcim/tables/racks.py:217 -#: ipam/forms/filtersets.py:442 templates/dcim/device.html:30 -#: templates/dcim/inc/cable_termination.html:16 -#: templates/dcim/powerfeed.html:28 templates/dcim/rack.html:13 -#: templates/dcim/rack/base.html:4 templates/dcim/rackreservation.html:19 -#: templates/dcim/rackreservation.html:36 -#: virtualization/forms/model_forms.py:113 +#: netbox/dcim/forms/bulk_edit.py: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/templates/dcim/device.html:30 +#: netbox/templates/dcim/inc/cable_termination.html:16 +#: netbox/templates/dcim/powerfeed.html:28 netbox/templates/dcim/rack.html:13 +#: netbox/templates/dcim/rack/base.html:4 +#: netbox/templates/dcim/rackreservation.html:19 +#: netbox/templates/dcim/rackreservation.html:36 +#: netbox/virtualization/forms/model_forms.py:113 msgid "Rack" msgstr "Estante" -#: dcim/forms/bulk_edit.py:444 dcim/forms/bulk_edit.py:730 -#: dcim/forms/filtersets.py:325 dcim/forms/filtersets.py:398 -#: dcim/forms/filtersets.py:481 dcim/forms/filtersets.py:608 -#: dcim/forms/filtersets.py:721 dcim/forms/filtersets.py:942 -#: dcim/forms/model_forms.py:670 dcim/forms/model_forms.py:1580 -#: templates/dcim/device_edit.html:20 +#: 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/templates/dcim/device_edit.html:20 msgid "Hardware" msgstr "Hardware" -#: dcim/forms/bulk_edit.py:500 dcim/forms/bulk_import.py:377 -#: dcim/forms/filtersets.py:499 dcim/forms/model_forms.py:353 +#: 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 msgid "Default platform" msgstr "Plataforma predeterminada" -#: dcim/forms/bulk_edit.py:505 dcim/forms/bulk_edit.py:564 -#: dcim/forms/filtersets.py:502 dcim/forms/filtersets.py:622 +#: 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 msgid "Part number" msgstr "Número de pieza" -#: dcim/forms/bulk_edit.py:509 +#: netbox/dcim/forms/bulk_edit.py:515 msgid "U height" msgstr "Altura en U" -#: dcim/forms/bulk_edit.py:521 dcim/tables/devicetypes.py:102 +#: netbox/dcim/forms/bulk_edit.py:527 netbox/dcim/tables/devicetypes.py:102 msgid "Exclude from utilization" msgstr "Excluir de la utilización" -#: dcim/forms/bulk_edit.py:550 dcim/forms/model_forms.py:368 -#: dcim/tables/devicetypes.py:77 templates/dcim/device.html:88 -#: templates/dcim/devicebay.html:52 templates/dcim/module.html:61 +#: 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/templates/dcim/devicebay.html:52 +#: netbox/templates/dcim/module.html:61 msgid "Device Type" msgstr "Tipo de dispositivo" -#: dcim/forms/bulk_edit.py:592 dcim/forms/model_forms.py:401 -#: dcim/tables/modules.py:17 dcim/tables/modules.py:65 -#: templates/dcim/module.html:65 templates/dcim/modulebay.html:66 -#: templates/dcim/moduletype.html:22 +#: 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/templates/dcim/module.html:65 +#: netbox/templates/dcim/modulebay.html:66 +#: netbox/templates/dcim/moduletype.html:22 msgid "Module Type" msgstr "Tipo de módulo" -#: dcim/forms/bulk_edit.py:596 dcim/forms/model_forms.py:371 -#: dcim/forms/model_forms.py:402 templates/dcim/devicetype.html:11 +#: netbox/dcim/forms/bulk_edit.py:602 netbox/dcim/forms/model_forms.py:371 +#: netbox/dcim/forms/model_forms.py:402 +#: netbox/templates/dcim/devicetype.html:11 msgid "Chassis" msgstr "Chasis" -#: dcim/forms/bulk_edit.py:610 dcim/models/devices.py:484 -#: dcim/tables/devices.py:67 +#: netbox/dcim/forms/bulk_edit.py:616 netbox/dcim/models/devices.py:484 +#: netbox/dcim/tables/devices.py:67 msgid "VM role" msgstr "Función de máquina virtual" -#: dcim/forms/bulk_edit.py:613 dcim/forms/bulk_edit.py:637 -#: dcim/forms/bulk_edit.py:720 dcim/forms/bulk_import.py:434 -#: dcim/forms/bulk_import.py:438 dcim/forms/bulk_import.py:457 -#: dcim/forms/bulk_import.py:461 dcim/forms/bulk_import.py:586 -#: dcim/forms/bulk_import.py:590 dcim/forms/filtersets.py:689 -#: dcim/forms/filtersets.py:705 dcim/forms/filtersets.py:823 -#: dcim/forms/model_forms.py:415 dcim/forms/model_forms.py:441 -#: dcim/forms/model_forms.py:555 virtualization/forms/bulk_import.py:132 -#: virtualization/forms/bulk_import.py:133 -#: virtualization/forms/filtersets.py:188 -#: virtualization/forms/model_forms.py:215 +#: 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 msgid "Config template" msgstr "Plantilla de configuración" -#: dcim/forms/bulk_edit.py:661 dcim/forms/bulk_edit.py:1061 -#: dcim/forms/bulk_import.py:492 dcim/forms/filtersets.py:114 -#: dcim/forms/model_forms.py:501 dcim/forms/model_forms.py:872 -#: dcim/forms/model_forms.py:889 extras/filtersets.py:547 +#: 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 msgid "Device type" msgstr "Tipo de dispositivo" -#: dcim/forms/bulk_edit.py:672 dcim/forms/bulk_import.py:473 -#: dcim/forms/filtersets.py:119 dcim/forms/model_forms.py:509 +#: 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 msgid "Device role" msgstr "Función del dispositivo" -#: dcim/forms/bulk_edit.py:695 dcim/forms/bulk_import.py:498 -#: dcim/forms/filtersets.py:796 dcim/forms/model_forms.py:451 -#: dcim/forms/model_forms.py:513 dcim/tables/devices.py:182 -#: extras/filtersets.py:563 templates/dcim/device.html:186 -#: templates/dcim/platform.html:26 -#: templates/virtualization/virtualmachine.html:27 -#: virtualization/forms/bulk_edit.py:160 -#: virtualization/forms/bulk_import.py:122 -#: virtualization/forms/filtersets.py:168 -#: virtualization/forms/model_forms.py:203 -#: virtualization/tables/virtualmachines.py:79 +#: 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/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 msgid "Platform" msgstr "Plataforma" -#: dcim/forms/bulk_edit.py:728 dcim/forms/bulk_edit.py:1281 -#: dcim/forms/bulk_edit.py:1650 dcim/forms/bulk_edit.py:1696 -#: dcim/forms/bulk_import.py:641 dcim/forms/bulk_import.py:703 -#: dcim/forms/bulk_import.py:729 dcim/forms/bulk_import.py:755 -#: dcim/forms/bulk_import.py:775 dcim/forms/bulk_import.py:828 -#: dcim/forms/bulk_import.py:946 dcim/forms/bulk_import.py:994 -#: dcim/forms/bulk_import.py:1011 dcim/forms/bulk_import.py:1023 -#: dcim/forms/bulk_import.py:1071 dcim/forms/bulk_import.py:1422 -#: dcim/forms/connections.py:24 dcim/forms/filtersets.py:131 -#: dcim/forms/filtersets.py:921 dcim/forms/filtersets.py:1051 -#: dcim/forms/filtersets.py:1242 dcim/forms/filtersets.py:1267 -#: dcim/forms/filtersets.py:1291 dcim/forms/filtersets.py:1311 -#: dcim/forms/filtersets.py:1334 dcim/forms/filtersets.py:1444 -#: dcim/forms/filtersets.py:1469 dcim/forms/filtersets.py:1493 -#: dcim/forms/filtersets.py:1511 dcim/forms/filtersets.py:1528 -#: dcim/forms/filtersets.py:1592 dcim/forms/filtersets.py:1616 -#: dcim/forms/filtersets.py:1640 dcim/forms/model_forms.py:633 -#: dcim/forms/model_forms.py:849 dcim/forms/model_forms.py:1208 -#: dcim/forms/model_forms.py:1664 dcim/forms/object_create.py:257 -#: dcim/tables/connections.py:22 dcim/tables/connections.py:41 -#: dcim/tables/connections.py:60 dcim/tables/devices.py:285 -#: dcim/tables/devices.py:371 dcim/tables/devices.py:412 -#: dcim/tables/devices.py:454 dcim/tables/devices.py:505 -#: dcim/tables/devices.py:597 dcim/tables/devices.py:697 -#: dcim/tables/devices.py:754 dcim/tables/devices.py:801 -#: dcim/tables/devices.py:861 dcim/tables/devices.py:930 -#: dcim/tables/devices.py:1057 dcim/tables/modules.py:52 -#: extras/forms/filtersets.py:321 ipam/forms/bulk_import.py:304 -#: ipam/forms/bulk_import.py:481 ipam/forms/filtersets.py:551 -#: ipam/forms/model_forms.py:319 ipam/forms/model_forms.py:679 -#: ipam/forms/model_forms.py:712 ipam/forms/model_forms.py:738 -#: ipam/tables/vlans.py:180 templates/dcim/consoleport.html:20 -#: templates/dcim/consoleserverport.html:20 templates/dcim/device.html:15 -#: templates/dcim/device.html:130 templates/dcim/device_edit.html:10 -#: templates/dcim/devicebay.html:20 templates/dcim/devicebay.html:48 -#: templates/dcim/frontport.html:20 templates/dcim/interface.html:30 -#: templates/dcim/interface.html:161 templates/dcim/inventoryitem.html:20 -#: templates/dcim/module.html:57 templates/dcim/modulebay.html:20 -#: templates/dcim/poweroutlet.html:20 templates/dcim/powerport.html:20 -#: templates/dcim/rearport.html:20 templates/dcim/virtualchassis.html:65 -#: templates/dcim/virtualchassis_edit.html:51 -#: templates/dcim/virtualdevicecontext.html:22 -#: templates/virtualization/virtualmachine.html:114 -#: templates/vpn/tunneltermination.html:23 -#: templates/wireless/inc/wirelesslink_interface.html:6 -#: virtualization/filtersets.py:167 virtualization/forms/bulk_edit.py:137 -#: virtualization/forms/bulk_import.py:99 -#: virtualization/forms/filtersets.py:128 -#: virtualization/forms/model_forms.py:185 -#: virtualization/tables/virtualmachines.py:71 vpn/choices.py:44 -#: vpn/forms/bulk_import.py:86 vpn/forms/bulk_import.py:283 -#: vpn/forms/filtersets.py:275 vpn/forms/model_forms.py:90 -#: vpn/forms/model_forms.py:125 vpn/forms/model_forms.py:236 -#: vpn/forms/model_forms.py:453 wireless/forms/model_forms.py:99 -#: wireless/forms/model_forms.py:141 wireless/tables/wirelesslan.py:75 +#: netbox/dcim/forms/bulk_edit.py: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/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 +msgid "Cluster" +msgstr "Clúster" + +#: 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:52 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" -#: dcim/forms/bulk_edit.py:731 templates/extras/dashboard/widget_config.html:7 -#: virtualization/forms/bulk_edit.py:191 +#: netbox/dcim/forms/bulk_edit.py:745 +#: netbox/templates/extras/dashboard/widget_config.html:7 +#: netbox/virtualization/forms/bulk_edit.py:191 msgid "Configuration" msgstr "Configuración" -#: dcim/forms/bulk_edit.py:745 dcim/forms/bulk_import.py:653 -#: dcim/forms/model_forms.py:647 dcim/forms/model_forms.py:897 +#: netbox/dcim/forms/bulk_edit.py:746 netbox/netbox/navigation/menu.py:243 +#: netbox/templates/dcim/device_edit.html:78 +msgid "Virtualization" +msgstr "Virtualización" + +#: 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 msgid "Module type" msgstr "Tipo de módulo" -#: dcim/forms/bulk_edit.py:799 dcim/forms/bulk_edit.py:984 -#: dcim/forms/bulk_edit.py:1003 dcim/forms/bulk_edit.py:1026 -#: dcim/forms/bulk_edit.py:1068 dcim/forms/bulk_edit.py:1112 -#: dcim/forms/bulk_edit.py:1163 dcim/forms/bulk_edit.py:1190 -#: dcim/forms/bulk_edit.py:1217 dcim/forms/bulk_edit.py:1235 -#: dcim/forms/bulk_edit.py:1253 dcim/forms/filtersets.py:67 -#: dcim/forms/object_create.py:46 templates/dcim/cable.html:32 -#: templates/dcim/consoleport.html:32 templates/dcim/consoleserverport.html:32 -#: templates/dcim/devicebay.html:28 templates/dcim/frontport.html:32 -#: templates/dcim/inc/panels/inventory_items.html:19 -#: templates/dcim/interface.html:42 templates/dcim/inventoryitem.html:32 -#: templates/dcim/modulebay.html:34 templates/dcim/poweroutlet.html:32 -#: templates/dcim/powerport.html:32 templates/dcim/rearport.html:32 -#: templates/extras/customfield.html:26 templates/generic/bulk_import.html:162 +#: netbox/dcim/forms/bulk_edit.py: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/object_create.py:46 netbox/templates/dcim/cable.html:32 +#: netbox/templates/dcim/consoleport.html:32 +#: netbox/templates/dcim/consoleserverport.html:32 +#: netbox/templates/dcim/devicebay.html:28 +#: netbox/templates/dcim/frontport.html:32 +#: netbox/templates/dcim/inc/panels/inventory_items.html:19 +#: netbox/templates/dcim/interface.html:42 +#: netbox/templates/dcim/inventoryitem.html:32 +#: netbox/templates/dcim/modulebay.html:34 +#: netbox/templates/dcim/poweroutlet.html:32 +#: netbox/templates/dcim/powerport.html:32 +#: netbox/templates/dcim/rearport.html:32 +#: netbox/templates/extras/customfield.html:26 +#: netbox/templates/generic/bulk_import.html:162 msgid "Label" msgstr "Etiqueta" -#: dcim/forms/bulk_edit.py:808 dcim/forms/filtersets.py:1068 -#: templates/dcim/cable.html:50 +#: netbox/dcim/forms/bulk_edit.py:823 netbox/dcim/forms/filtersets.py:1068 +#: netbox/templates/dcim/cable.html:50 msgid "Length" msgstr "Longitud" -#: dcim/forms/bulk_edit.py:813 dcim/forms/bulk_import.py:1226 -#: dcim/forms/bulk_import.py:1229 dcim/forms/filtersets.py:1072 +#: 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 msgid "Length unit" msgstr "Unidad de longitud" -#: dcim/forms/bulk_edit.py:837 templates/dcim/virtualchassis.html:23 +#: netbox/dcim/forms/bulk_edit.py:852 +#: netbox/templates/dcim/virtualchassis.html:23 msgid "Domain" msgstr "Dominio" -#: dcim/forms/bulk_edit.py:905 dcim/forms/bulk_import.py:1345 -#: dcim/forms/filtersets.py:1158 dcim/forms/model_forms.py:750 +#: 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 msgid "Power panel" msgstr "Panel de alimentación" -#: dcim/forms/bulk_edit.py:927 dcim/forms/bulk_import.py:1381 -#: dcim/forms/filtersets.py:1180 templates/dcim/powerfeed.html:83 +#: 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 msgid "Supply" msgstr "Suministro" -#: dcim/forms/bulk_edit.py:933 dcim/forms/bulk_import.py:1386 -#: dcim/forms/filtersets.py:1185 templates/dcim/powerfeed.html:95 +#: 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 msgid "Phase" msgstr "Fase" -#: dcim/forms/bulk_edit.py:939 dcim/forms/filtersets.py:1190 -#: templates/dcim/powerfeed.html:87 +#: netbox/dcim/forms/bulk_edit.py:954 netbox/dcim/forms/filtersets.py:1190 +#: netbox/templates/dcim/powerfeed.html:87 msgid "Voltage" msgstr "Tensión" -#: dcim/forms/bulk_edit.py:943 dcim/forms/filtersets.py:1194 -#: templates/dcim/powerfeed.html:91 +#: netbox/dcim/forms/bulk_edit.py:958 netbox/dcim/forms/filtersets.py:1194 +#: netbox/templates/dcim/powerfeed.html:91 msgid "Amperage" msgstr "Amperaje" -#: dcim/forms/bulk_edit.py:947 dcim/forms/filtersets.py:1198 +#: netbox/dcim/forms/bulk_edit.py:962 netbox/dcim/forms/filtersets.py:1198 msgid "Max utilization" msgstr "Utilización máxima" -#: dcim/forms/bulk_edit.py:1036 +#: netbox/dcim/forms/bulk_edit.py:1051 msgid "Maximum draw" msgstr "Sorteo máximo" -#: dcim/forms/bulk_edit.py:1039 dcim/models/device_component_templates.py:282 -#: dcim/models/device_components.py:356 +#: netbox/dcim/forms/bulk_edit.py:1054 +#: netbox/dcim/models/device_component_templates.py:282 +#: netbox/dcim/models/device_components.py:356 msgid "Maximum power draw (watts)" msgstr "Consumo máximo de energía (vatios)" -#: dcim/forms/bulk_edit.py:1042 +#: netbox/dcim/forms/bulk_edit.py:1057 msgid "Allocated draw" msgstr "Sorteo asignado" -#: dcim/forms/bulk_edit.py:1045 dcim/models/device_component_templates.py:289 -#: dcim/models/device_components.py:363 +#: netbox/dcim/forms/bulk_edit.py:1060 +#: netbox/dcim/models/device_component_templates.py:289 +#: netbox/dcim/models/device_components.py:363 msgid "Allocated power draw (watts)" msgstr "Consumo de energía asignado (vatios)" -#: dcim/forms/bulk_edit.py:1078 dcim/forms/bulk_import.py:786 -#: dcim/forms/model_forms.py:953 dcim/forms/model_forms.py:1278 -#: dcim/forms/model_forms.py:1567 dcim/forms/object_import.py:55 +#: 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 msgid "Power port" msgstr "Puerto de alimentación" -#: dcim/forms/bulk_edit.py:1083 dcim/forms/bulk_import.py:793 +#: netbox/dcim/forms/bulk_edit.py:1098 netbox/dcim/forms/bulk_import.py:815 msgid "Feed leg" msgstr "Pierna de alimentación" -#: dcim/forms/bulk_edit.py:1129 dcim/forms/bulk_edit.py:1440 +#: netbox/dcim/forms/bulk_edit.py:1144 netbox/dcim/forms/bulk_edit.py:1462 msgid "Management only" msgstr "Solo administración" -#: dcim/forms/bulk_edit.py:1139 dcim/forms/bulk_edit.py:1446 -#: dcim/forms/bulk_import.py:876 dcim/forms/filtersets.py:1394 -#: dcim/forms/object_import.py:90 -#: dcim/models/device_component_templates.py:437 -#: dcim/models/device_components.py:670 +#: 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/object_import.py:90 +#: netbox/dcim/models/device_component_templates.py:437 +#: netbox/dcim/models/device_components.py:670 msgid "PoE mode" msgstr "Modo PoE" -#: dcim/forms/bulk_edit.py:1145 dcim/forms/bulk_edit.py:1452 -#: dcim/forms/bulk_import.py:882 dcim/forms/filtersets.py:1399 -#: dcim/forms/object_import.py:95 -#: dcim/models/device_component_templates.py:443 -#: dcim/models/device_components.py:676 +#: 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/object_import.py:95 +#: netbox/dcim/models/device_component_templates.py:443 +#: netbox/dcim/models/device_components.py:676 msgid "PoE type" msgstr "Tipo de PoE" -#: dcim/forms/bulk_edit.py:1151 dcim/forms/filtersets.py:1404 -#: dcim/forms/object_import.py:100 +#: netbox/dcim/forms/bulk_edit.py:1166 netbox/dcim/forms/filtersets.py:1404 +#: netbox/dcim/forms/object_import.py:100 msgid "Wireless role" msgstr "Función inalámbrica" -#: dcim/forms/bulk_edit.py:1288 dcim/forms/model_forms.py:669 -#: dcim/forms/model_forms.py:1223 dcim/tables/devices.py:313 -#: templates/dcim/consoleport.html:24 templates/dcim/consoleserverport.html:24 -#: templates/dcim/frontport.html:24 templates/dcim/interface.html:34 -#: templates/dcim/module.html:54 templates/dcim/modulebay.html:26 -#: templates/dcim/modulebay.html:58 templates/dcim/poweroutlet.html:24 -#: templates/dcim/powerport.html:24 templates/dcim/rearport.html:24 +#: 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/templates/dcim/consoleport.html:24 +#: netbox/templates/dcim/consoleserverport.html:24 +#: netbox/templates/dcim/frontport.html:24 +#: netbox/templates/dcim/interface.html:34 +#: netbox/templates/dcim/module.html:54 +#: netbox/templates/dcim/modulebay.html:26 +#: netbox/templates/dcim/modulebay.html:58 +#: netbox/templates/dcim/poweroutlet.html:24 +#: netbox/templates/dcim/powerport.html:24 +#: netbox/templates/dcim/rearport.html:24 msgid "Module" msgstr "Módulo" -#: dcim/forms/bulk_edit.py:1420 dcim/tables/devices.py:665 -#: templates/dcim/interface.html:110 +#: netbox/dcim/forms/bulk_edit.py:1442 netbox/dcim/tables/devices.py:665 +#: netbox/templates/dcim/interface.html:110 msgid "LAG" msgstr "DESFASE" -#: dcim/forms/bulk_edit.py:1425 dcim/forms/model_forms.py:1305 +#: netbox/dcim/forms/bulk_edit.py:1447 netbox/dcim/forms/model_forms.py:1312 msgid "Virtual device contexts" msgstr "Contextos de dispositivos virtuales" -#: dcim/forms/bulk_edit.py:1431 dcim/forms/bulk_import.py:714 -#: dcim/forms/bulk_import.py:740 dcim/forms/filtersets.py:1252 -#: dcim/forms/filtersets.py:1277 dcim/forms/filtersets.py:1358 -#: dcim/tables/devices.py:610 -#: templates/circuits/inc/circuit_termination_fields.html:67 -#: templates/dcim/consoleport.html:40 templates/dcim/consoleserverport.html:40 +#: 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/templates/dcim/consoleport.html:40 +#: netbox/templates/dcim/consoleserverport.html:40 msgid "Speed" msgstr "Velocidad" -#: dcim/forms/bulk_edit.py:1460 dcim/forms/bulk_import.py:885 -#: templates/vpn/ikepolicy.html:25 templates/vpn/ipsecprofile.html:21 -#: templates/vpn/ipsecprofile.html:48 virtualization/forms/bulk_edit.py:233 -#: virtualization/forms/bulk_import.py:165 vpn/forms/bulk_edit.py:146 -#: vpn/forms/bulk_edit.py:232 vpn/forms/bulk_import.py:176 -#: vpn/forms/bulk_import.py:234 vpn/forms/filtersets.py:135 -#: vpn/forms/filtersets.py:178 vpn/forms/filtersets.py:192 -#: vpn/tables/crypto.py:64 vpn/tables/crypto.py:162 +#: netbox/dcim/forms/bulk_edit.py:1482 netbox/dcim/forms/bulk_import.py:907 +#: netbox/templates/vpn/ikepolicy.html:25 +#: netbox/templates/vpn/ipsecprofile.html:21 +#: netbox/templates/vpn/ipsecprofile.html:48 +#: netbox/virtualization/forms/bulk_edit.py:233 +#: netbox/virtualization/forms/bulk_import.py:165 +#: netbox/vpn/forms/bulk_edit.py:146 netbox/vpn/forms/bulk_edit.py:232 +#: netbox/vpn/forms/bulk_import.py:176 netbox/vpn/forms/bulk_import.py:234 +#: netbox/vpn/forms/filtersets.py:135 netbox/vpn/forms/filtersets.py:178 +#: netbox/vpn/forms/filtersets.py:192 netbox/vpn/tables/crypto.py:64 +#: netbox/vpn/tables/crypto.py:162 msgid "Mode" msgstr "Modo" -#: dcim/forms/bulk_edit.py:1468 dcim/forms/model_forms.py:1354 -#: ipam/forms/bulk_import.py:178 ipam/forms/filtersets.py:498 -#: ipam/models/vlans.py:84 virtualization/forms/bulk_edit.py:240 -#: virtualization/forms/model_forms.py:321 +#: 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 msgid "VLAN group" msgstr "Grupo de VLAN" -#: dcim/forms/bulk_edit.py:1476 dcim/forms/model_forms.py:1360 -#: dcim/tables/devices.py:579 virtualization/forms/bulk_edit.py:248 -#: virtualization/forms/model_forms.py:326 +#: 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 msgid "Untagged VLAN" msgstr "VLAN sin etiquetar" -#: dcim/forms/bulk_edit.py:1484 dcim/forms/model_forms.py:1369 -#: dcim/tables/devices.py:585 virtualization/forms/bulk_edit.py:256 -#: virtualization/forms/model_forms.py:335 +#: 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 etiquetadas" -#: dcim/forms/bulk_edit.py:1494 dcim/forms/model_forms.py:1341 +#: netbox/dcim/forms/bulk_edit.py:1511 +msgid "Add tagged VLANs" +msgstr "" + +#: netbox/dcim/forms/bulk_edit.py:1520 +msgid "Remove tagged VLANs" +msgstr "" + +#: netbox/dcim/forms/bulk_edit.py:1536 netbox/dcim/forms/model_forms.py:1348 msgid "Wireless LAN group" msgstr "Grupo LAN inalámbrico" -#: dcim/forms/bulk_edit.py:1499 dcim/forms/model_forms.py:1346 -#: dcim/tables/devices.py:619 netbox/navigation/menu.py:146 -#: templates/dcim/interface.html:280 wireless/tables/wirelesslan.py:24 +#: 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/wireless/tables/wirelesslan.py:24 msgid "Wireless LANs" msgstr "LAN inalámbricas" -#: dcim/forms/bulk_edit.py:1508 dcim/forms/filtersets.py:1328 -#: dcim/forms/model_forms.py:1390 ipam/forms/bulk_edit.py:286 -#: ipam/forms/bulk_edit.py:378 ipam/forms/filtersets.py:169 -#: templates/dcim/interface.html:122 templates/ipam/prefix.html:95 -#: virtualization/forms/model_forms.py:349 +#: netbox/dcim/forms/bulk_edit.py: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 msgid "Addressing" msgstr "Dirigiéndose" -#: dcim/forms/bulk_edit.py:1509 dcim/forms/filtersets.py:720 -#: dcim/forms/model_forms.py:1391 virtualization/forms/model_forms.py:350 +#: 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 msgid "Operation" msgstr "Operación" -#: dcim/forms/bulk_edit.py:1510 dcim/forms/filtersets.py:1329 -#: dcim/forms/model_forms.py:987 dcim/forms/model_forms.py:1393 +#: 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 msgid "PoE" msgstr "PoE" -#: dcim/forms/bulk_edit.py:1511 dcim/forms/model_forms.py:1392 -#: templates/dcim/interface.html:99 virtualization/forms/bulk_edit.py:267 -#: virtualization/forms/model_forms.py:351 +#: 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 msgid "Related Interfaces" msgstr "Interfaces relacionadas" -#: dcim/forms/bulk_edit.py:1512 dcim/forms/model_forms.py:1394 -#: virtualization/forms/bulk_edit.py:268 -#: virtualization/forms/model_forms.py:352 +#: 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 msgid "802.1Q Switching" msgstr "Conmutación 802.1Q" -#: dcim/forms/bulk_edit.py:1574 dcim/forms/bulk_edit.py:1576 +#: netbox/dcim/forms/bulk_edit.py:1558 +msgid "Add/Remove" +msgstr "" + +#: netbox/dcim/forms/bulk_edit.py:1617 netbox/dcim/forms/bulk_edit.py:1619 msgid "Interface mode must be specified to assign VLANs" msgstr "Se debe especificar el modo de interfaz para asignar las VLAN" -#: dcim/forms/bulk_edit.py:1581 dcim/forms/common.py:50 +#: netbox/dcim/forms/bulk_edit.py:1624 netbox/dcim/forms/common.py:50 msgid "An access interface cannot have tagged VLANs assigned." msgstr "Una interfaz de acceso no puede tener asignadas VLAN etiquetadas." -#: dcim/forms/bulk_import.py:64 +#: netbox/dcim/forms/bulk_import.py:64 msgid "Name of parent region" msgstr "Nombre de la región principal" -#: dcim/forms/bulk_import.py:78 +#: netbox/dcim/forms/bulk_import.py:78 msgid "Name of parent site group" msgstr "Nombre del grupo de sitios principal" -#: dcim/forms/bulk_import.py:97 +#: netbox/dcim/forms/bulk_import.py:97 msgid "Assigned region" msgstr "Región asignada" -#: dcim/forms/bulk_import.py:104 tenancy/forms/bulk_import.py:44 -#: tenancy/forms/bulk_import.py:85 wireless/forms/bulk_import.py:40 +#: netbox/dcim/forms/bulk_import.py:104 netbox/tenancy/forms/bulk_import.py:44 +#: netbox/tenancy/forms/bulk_import.py:85 +#: netbox/wireless/forms/bulk_import.py:40 msgid "Assigned group" msgstr "Grupo asignado" -#: dcim/forms/bulk_import.py:123 +#: netbox/dcim/forms/bulk_import.py:123 msgid "available options" msgstr "opciones disponibles" -#: dcim/forms/bulk_import.py:134 dcim/forms/bulk_import.py:543 -#: dcim/forms/bulk_import.py:1342 ipam/forms/bulk_import.py:175 -#: ipam/forms/bulk_import.py:433 virtualization/forms/bulk_import.py:63 -#: virtualization/forms/bulk_import.py:89 +#: 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 msgid "Assigned site" msgstr "Sitio asignado" -#: dcim/forms/bulk_import.py:141 +#: netbox/dcim/forms/bulk_import.py:141 msgid "Parent location" msgstr "Ubicación de los padres" -#: dcim/forms/bulk_import.py:143 +#: netbox/dcim/forms/bulk_import.py:143 msgid "Location not found." msgstr "No se encontró la ubicación." -#: dcim/forms/bulk_import.py:185 +#: netbox/dcim/forms/bulk_import.py:185 msgid "The manufacturer of this rack type" msgstr "El fabricante de este tipo de bastidor" -#: dcim/forms/bulk_import.py:196 +#: netbox/dcim/forms/bulk_import.py:196 msgid "The lowest-numbered position in the rack" msgstr "La posición con el número más bajo del estante" -#: dcim/forms/bulk_import.py:201 dcim/forms/bulk_import.py:268 +#: netbox/dcim/forms/bulk_import.py:201 netbox/dcim/forms/bulk_import.py:276 msgid "Rail-to-rail width (in inches)" msgstr "Ancho de raíl a raíl (en pulgadas)" -#: dcim/forms/bulk_import.py:207 dcim/forms/bulk_import.py:274 +#: netbox/dcim/forms/bulk_import.py:207 netbox/dcim/forms/bulk_import.py:286 msgid "Unit for outer dimensions" msgstr "Unidad para dimensiones exteriores" -#: dcim/forms/bulk_import.py:213 dcim/forms/bulk_import.py:286 +#: netbox/dcim/forms/bulk_import.py:213 netbox/dcim/forms/bulk_import.py:298 msgid "Unit for rack weights" msgstr "Unidad para pesas de cremallera" -#: dcim/forms/bulk_import.py:245 +#: netbox/dcim/forms/bulk_import.py:245 msgid "Name of assigned tenant" msgstr "Nombre del inquilino asignado" -#: dcim/forms/bulk_import.py:257 +#: netbox/dcim/forms/bulk_import.py:257 msgid "Name of assigned role" msgstr "Nombre de la función asignada" -#: dcim/forms/bulk_import.py:280 dcim/forms/bulk_import.py:413 -#: dcim/forms/bulk_import.py:583 +#: netbox/dcim/forms/bulk_import.py:264 +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 msgid "Airflow direction" msgstr "Dirección del flujo de aire" -#: dcim/forms/bulk_import.py:312 +#: netbox/dcim/forms/bulk_import.py:324 +msgid "Width must be set if not specifying a rack type." +msgstr "" + +#: netbox/dcim/forms/bulk_import.py:326 +msgid "U height must be set if not specifying a rack type." +msgstr "" + +#: netbox/dcim/forms/bulk_import.py:334 msgid "Parent site" msgstr "Sitio para padres" -#: dcim/forms/bulk_import.py:319 dcim/forms/bulk_import.py:1355 +#: netbox/dcim/forms/bulk_import.py:341 netbox/dcim/forms/bulk_import.py:1377 msgid "Rack's location (if any)" msgstr "Ubicación del bastidor (si existe)" -#: dcim/forms/bulk_import.py:328 dcim/forms/model_forms.py:311 -#: dcim/tables/racks.py:222 templates/dcim/rackreservation.html:12 -#: templates/dcim/rackreservation.html:45 +#: netbox/dcim/forms/bulk_import.py:350 netbox/dcim/forms/model_forms.py:311 +#: netbox/dcim/tables/racks.py:222 +#: netbox/templates/dcim/rackreservation.html:12 +#: netbox/templates/dcim/rackreservation.html:45 msgid "Units" msgstr "Unidades" -#: dcim/forms/bulk_import.py:331 +#: netbox/dcim/forms/bulk_import.py:353 msgid "Comma-separated list of individual unit numbers" msgstr "Lista separada por comas de números de unidades individuales" -#: dcim/forms/bulk_import.py:374 +#: netbox/dcim/forms/bulk_import.py:396 msgid "The manufacturer which produces this device type" msgstr "El fabricante que produce este tipo de dispositivo" -#: dcim/forms/bulk_import.py:381 +#: netbox/dcim/forms/bulk_import.py:403 msgid "The default platform for devices of this type (optional)" msgstr "" "La plataforma predeterminada para dispositivos de este tipo (opcional)" -#: dcim/forms/bulk_import.py:386 +#: netbox/dcim/forms/bulk_import.py:408 msgid "Device weight" msgstr "Peso del dispositivo" -#: dcim/forms/bulk_import.py:392 +#: netbox/dcim/forms/bulk_import.py:414 msgid "Unit for device weight" msgstr "Unidad para el peso del dispositivo" -#: dcim/forms/bulk_import.py:418 +#: netbox/dcim/forms/bulk_import.py:440 msgid "Module weight" msgstr "Peso del módulo" -#: dcim/forms/bulk_import.py:424 +#: netbox/dcim/forms/bulk_import.py:446 msgid "Unit for module weight" msgstr "Unidad para el peso del módulo" -#: dcim/forms/bulk_import.py:454 +#: netbox/dcim/forms/bulk_import.py:476 msgid "Limit platform assignments to this manufacturer" msgstr "Limite las asignaciones de plataforma a este fabricante" -#: dcim/forms/bulk_import.py:476 dcim/forms/bulk_import.py:1425 -#: tenancy/forms/bulk_import.py:106 +#: netbox/dcim/forms/bulk_import.py:498 netbox/dcim/forms/bulk_import.py:1447 +#: netbox/tenancy/forms/bulk_import.py:106 msgid "Assigned role" msgstr "Función asignada" -#: dcim/forms/bulk_import.py:489 +#: netbox/dcim/forms/bulk_import.py:511 msgid "Device type manufacturer" msgstr "Fabricante del tipo de dispositivo" -#: dcim/forms/bulk_import.py:495 +#: netbox/dcim/forms/bulk_import.py:517 msgid "Device type model" msgstr "Modelo de tipo de dispositivo" -#: dcim/forms/bulk_import.py:502 virtualization/forms/bulk_import.py:126 +#: netbox/dcim/forms/bulk_import.py:524 +#: netbox/virtualization/forms/bulk_import.py:126 msgid "Assigned platform" msgstr "Plataforma asignada" -#: dcim/forms/bulk_import.py:510 dcim/forms/bulk_import.py:514 -#: dcim/forms/model_forms.py:536 +#: netbox/dcim/forms/bulk_import.py:532 netbox/dcim/forms/bulk_import.py:536 +#: netbox/dcim/forms/model_forms.py:536 msgid "Virtual chassis" msgstr "Chasis virtual" -#: dcim/forms/bulk_import.py:517 dcim/forms/filtersets.py:728 -#: dcim/forms/filtersets.py:898 dcim/forms/model_forms.py:522 -#: dcim/tables/devices.py:202 extras/filtersets.py:596 -#: extras/forms/filtersets.py:322 ipam/forms/filtersets.py:415 -#: ipam/forms/filtersets.py:447 templates/dcim/device.html:239 -#: templates/virtualization/cluster.html:10 -#: templates/virtualization/virtualmachine.html:92 -#: templates/virtualization/virtualmachine.html:101 -#: virtualization/filtersets.py:157 virtualization/filtersets.py:277 -#: virtualization/forms/bulk_edit.py:129 -#: virtualization/forms/bulk_import.py:92 -#: virtualization/forms/filtersets.py:99 -#: virtualization/forms/filtersets.py:123 -#: virtualization/forms/filtersets.py:204 -#: virtualization/forms/model_forms.py:79 -#: virtualization/forms/model_forms.py:176 -#: virtualization/tables/virtualmachines.py:67 -msgid "Cluster" -msgstr "Clúster" - -#: dcim/forms/bulk_import.py:521 +#: netbox/dcim/forms/bulk_import.py:543 msgid "Virtualization cluster" msgstr "Clúster de virtualización" -#: dcim/forms/bulk_import.py:550 +#: netbox/dcim/forms/bulk_import.py:572 msgid "Assigned location (if any)" msgstr "Ubicación asignada (si la hay)" -#: dcim/forms/bulk_import.py:557 +#: netbox/dcim/forms/bulk_import.py:579 msgid "Assigned rack (if any)" msgstr "Bastidor asignado (si lo hay)" -#: dcim/forms/bulk_import.py:560 +#: netbox/dcim/forms/bulk_import.py:582 msgid "Face" msgstr "Cara" -#: dcim/forms/bulk_import.py:563 +#: netbox/dcim/forms/bulk_import.py:585 msgid "Mounted rack face" msgstr "Cara de bastidor montada" -#: dcim/forms/bulk_import.py:570 +#: netbox/dcim/forms/bulk_import.py:592 msgid "Parent device (for child devices)" msgstr "Dispositivo principal (para dispositivos infantiles)" -#: dcim/forms/bulk_import.py:573 +#: netbox/dcim/forms/bulk_import.py:595 msgid "Device bay" msgstr "Compartimento para dispositivos" -#: dcim/forms/bulk_import.py:577 +#: netbox/dcim/forms/bulk_import.py:599 msgid "Device bay in which this device is installed (for child devices)" msgstr "" "Compartimento de dispositivos en el que está instalado este dispositivo " "(para dispositivos infantiles)" -#: dcim/forms/bulk_import.py:644 +#: netbox/dcim/forms/bulk_import.py:666 msgid "The device in which this module is installed" msgstr "El dispositivo en el que está instalado este módulo" -#: dcim/forms/bulk_import.py:647 dcim/forms/model_forms.py:640 +#: netbox/dcim/forms/bulk_import.py:669 netbox/dcim/forms/model_forms.py:640 msgid "Module bay" msgstr "Compartimento de módulos" -#: dcim/forms/bulk_import.py:650 +#: netbox/dcim/forms/bulk_import.py:672 msgid "The module bay in which this module is installed" msgstr "El compartimiento del módulo en el que está instalado este módulo" -#: dcim/forms/bulk_import.py:656 +#: netbox/dcim/forms/bulk_import.py:678 msgid "The type of module" msgstr "El tipo de módulo" -#: dcim/forms/bulk_import.py:664 dcim/forms/model_forms.py:656 +#: netbox/dcim/forms/bulk_import.py:686 netbox/dcim/forms/model_forms.py:656 msgid "Replicate components" msgstr "Replicar componentes" -#: dcim/forms/bulk_import.py:666 +#: netbox/dcim/forms/bulk_import.py:688 msgid "" "Automatically populate components associated with this module type (enabled " "by default)" @@ -3948,264 +4374,271 @@ msgstr "" "Rellenar automáticamente los componentes asociados a este tipo de módulo " "(activado de forma predeterminada)" -#: dcim/forms/bulk_import.py:669 dcim/forms/model_forms.py:662 +#: netbox/dcim/forms/bulk_import.py:691 netbox/dcim/forms/model_forms.py:662 msgid "Adopt components" msgstr "Adopte componentes" -#: dcim/forms/bulk_import.py:671 dcim/forms/model_forms.py:665 +#: netbox/dcim/forms/bulk_import.py:693 netbox/dcim/forms/model_forms.py:665 msgid "Adopt already existing components" msgstr "Adopte los componentes ya existentes" -#: dcim/forms/bulk_import.py:711 dcim/forms/bulk_import.py:737 -#: dcim/forms/bulk_import.py:763 +#: netbox/dcim/forms/bulk_import.py:733 netbox/dcim/forms/bulk_import.py:759 +#: netbox/dcim/forms/bulk_import.py:785 msgid "Port type" msgstr "Tipo de puerto" -#: dcim/forms/bulk_import.py:719 dcim/forms/bulk_import.py:745 +#: netbox/dcim/forms/bulk_import.py:741 netbox/dcim/forms/bulk_import.py:767 msgid "Port speed in bps" msgstr "Velocidad de puerto en bps" -#: dcim/forms/bulk_import.py:783 +#: netbox/dcim/forms/bulk_import.py:805 msgid "Outlet type" msgstr "Tipo de toma" -#: dcim/forms/bulk_import.py:790 +#: netbox/dcim/forms/bulk_import.py:812 msgid "Local power port which feeds this outlet" msgstr "Puerto de alimentación local que alimenta esta toma" -#: dcim/forms/bulk_import.py:796 +#: netbox/dcim/forms/bulk_import.py:818 msgid "Electrical phase (for three-phase circuits)" msgstr "Fase eléctrica (para circuitos trifásicos)" -#: dcim/forms/bulk_import.py:837 dcim/forms/model_forms.py:1316 -#: virtualization/forms/bulk_import.py:155 -#: virtualization/forms/model_forms.py:305 +#: 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 msgid "Parent interface" msgstr "Interfaz principal" -#: dcim/forms/bulk_import.py:844 dcim/forms/model_forms.py:1324 -#: virtualization/forms/bulk_import.py:162 -#: virtualization/forms/model_forms.py:313 +#: 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 msgid "Bridged interface" msgstr "Interfaz puenteada" -#: dcim/forms/bulk_import.py:847 +#: netbox/dcim/forms/bulk_import.py:869 msgid "Lag" msgstr "Retraso" -#: dcim/forms/bulk_import.py:851 +#: netbox/dcim/forms/bulk_import.py:873 msgid "Parent LAG interface" msgstr "Interfaz LAG principal" -#: dcim/forms/bulk_import.py:854 +#: netbox/dcim/forms/bulk_import.py:876 msgid "Vdcs" msgstr "VDC" -#: dcim/forms/bulk_import.py:859 +#: netbox/dcim/forms/bulk_import.py:881 msgid "VDC names separated by commas, encased with double quotes. Example:" msgstr "" "Los nombres de los VDC están separados por comas y entre comillas dobles. " "Ejemplo:" -#: dcim/forms/bulk_import.py:865 +#: netbox/dcim/forms/bulk_import.py:887 msgid "Physical medium" msgstr "Medio físico" -#: dcim/forms/bulk_import.py:868 dcim/forms/filtersets.py:1365 +#: netbox/dcim/forms/bulk_import.py:890 netbox/dcim/forms/filtersets.py:1365 msgid "Duplex" msgstr "Dúplex" -#: dcim/forms/bulk_import.py:873 +#: netbox/dcim/forms/bulk_import.py:895 msgid "Poe mode" msgstr "Modo Poe" -#: dcim/forms/bulk_import.py:879 +#: netbox/dcim/forms/bulk_import.py:901 msgid "Poe type" msgstr "Tipo de Poe" -#: dcim/forms/bulk_import.py:888 virtualization/forms/bulk_import.py:168 +#: netbox/dcim/forms/bulk_import.py:910 +#: netbox/virtualization/forms/bulk_import.py:168 msgid "IEEE 802.1Q operational mode (for L2 interfaces)" msgstr "Modo operativo IEEE 802.1Q (para interfaces L2)" -#: dcim/forms/bulk_import.py:895 ipam/forms/bulk_import.py:161 -#: ipam/forms/bulk_import.py:247 ipam/forms/bulk_import.py:283 -#: ipam/forms/filtersets.py:201 ipam/forms/filtersets.py:277 -#: ipam/forms/filtersets.py:336 virtualization/forms/bulk_import.py:175 +#: netbox/dcim/forms/bulk_import.py: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 msgid "Assigned VRF" msgstr "VRF asignado" -#: dcim/forms/bulk_import.py:898 +#: netbox/dcim/forms/bulk_import.py:920 msgid "Rf role" msgstr "Rol RF" -#: dcim/forms/bulk_import.py:901 +#: netbox/dcim/forms/bulk_import.py:923 msgid "Wireless role (AP/station)" msgstr "Función inalámbrica (AP/estación)" -#: dcim/forms/bulk_import.py:937 +#: netbox/dcim/forms/bulk_import.py:959 #, python-brace-format msgid "VDC {vdc} is not assigned to device {device}" msgstr "VDC {vdc} no está asignado al dispositivo {device}" -#: dcim/forms/bulk_import.py:951 dcim/forms/model_forms.py:1000 -#: dcim/forms/model_forms.py:1575 dcim/forms/object_import.py:117 +#: 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 msgid "Rear port" msgstr "Puerto trasero" -#: dcim/forms/bulk_import.py:954 +#: netbox/dcim/forms/bulk_import.py:976 msgid "Corresponding rear port" msgstr "Puerto trasero correspondiente" -#: dcim/forms/bulk_import.py:959 dcim/forms/bulk_import.py:1000 -#: dcim/forms/bulk_import.py:1216 +#: netbox/dcim/forms/bulk_import.py:981 netbox/dcim/forms/bulk_import.py:1022 +#: netbox/dcim/forms/bulk_import.py:1238 msgid "Physical medium classification" msgstr "Clasificación de medios físicos" -#: dcim/forms/bulk_import.py:1028 dcim/tables/devices.py:822 +#: netbox/dcim/forms/bulk_import.py:1050 netbox/dcim/tables/devices.py:822 msgid "Installed device" msgstr "Dispositivo instalado" -#: dcim/forms/bulk_import.py:1032 +#: netbox/dcim/forms/bulk_import.py:1054 msgid "Child device installed within this bay" msgstr "Dispositivo infantil instalado en esta bahía" -#: dcim/forms/bulk_import.py:1034 +#: netbox/dcim/forms/bulk_import.py:1056 msgid "Child device not found." msgstr "No se encontró el dispositivo infantil." -#: dcim/forms/bulk_import.py:1092 +#: netbox/dcim/forms/bulk_import.py:1114 msgid "Parent inventory item" msgstr "Artículo del inventario principal" -#: dcim/forms/bulk_import.py:1095 +#: netbox/dcim/forms/bulk_import.py:1117 msgid "Component type" msgstr "Tipo de componente" -#: dcim/forms/bulk_import.py:1099 +#: netbox/dcim/forms/bulk_import.py:1121 msgid "Component Type" msgstr "Tipo de componente" -#: dcim/forms/bulk_import.py:1102 +#: netbox/dcim/forms/bulk_import.py:1124 msgid "Compnent name" msgstr "Nombre del componente" -#: dcim/forms/bulk_import.py:1104 +#: netbox/dcim/forms/bulk_import.py:1126 msgid "Component Name" msgstr "Nombre del componente" -#: dcim/forms/bulk_import.py:1146 +#: netbox/dcim/forms/bulk_import.py:1168 #, python-brace-format msgid "Component not found: {device} - {component_name}" msgstr "No se encontró el componente: {device} - {component_name}" -#: dcim/forms/bulk_import.py:1171 +#: netbox/dcim/forms/bulk_import.py:1193 msgid "Side A device" msgstr "Dispositivo del lado A" -#: dcim/forms/bulk_import.py:1174 dcim/forms/bulk_import.py:1192 +#: netbox/dcim/forms/bulk_import.py:1196 netbox/dcim/forms/bulk_import.py:1214 msgid "Device name" msgstr "Nombre del dispositivo" -#: dcim/forms/bulk_import.py:1177 +#: netbox/dcim/forms/bulk_import.py:1199 msgid "Side A type" msgstr "Tipo de lado A" -#: dcim/forms/bulk_import.py:1180 dcim/forms/bulk_import.py:1198 +#: netbox/dcim/forms/bulk_import.py:1202 netbox/dcim/forms/bulk_import.py:1220 msgid "Termination type" msgstr "Tipo de terminación" -#: dcim/forms/bulk_import.py:1183 +#: netbox/dcim/forms/bulk_import.py:1205 msgid "Side A name" msgstr "Nombre de la cara A" -#: dcim/forms/bulk_import.py:1184 dcim/forms/bulk_import.py:1202 +#: netbox/dcim/forms/bulk_import.py:1206 netbox/dcim/forms/bulk_import.py:1224 msgid "Termination name" msgstr "Nombre de terminación" -#: dcim/forms/bulk_import.py:1189 +#: netbox/dcim/forms/bulk_import.py:1211 msgid "Side B device" msgstr "Dispositivo Side B" -#: dcim/forms/bulk_import.py:1195 +#: netbox/dcim/forms/bulk_import.py:1217 msgid "Side B type" msgstr "Tipo de lado B" -#: dcim/forms/bulk_import.py:1201 +#: netbox/dcim/forms/bulk_import.py:1223 msgid "Side B name" msgstr "Nombre de la cara B" -#: dcim/forms/bulk_import.py:1210 wireless/forms/bulk_import.py:86 +#: netbox/dcim/forms/bulk_import.py:1232 +#: netbox/wireless/forms/bulk_import.py:86 msgid "Connection status" msgstr "Estado de conexión" -#: dcim/forms/bulk_import.py:1262 +#: netbox/dcim/forms/bulk_import.py:1284 #, python-brace-format msgid "Side {side_upper}: {device} {termination_object} is already connected" msgstr "Lado {side_upper}: {device} {termination_object} ya está conectado" -#: dcim/forms/bulk_import.py:1268 +#: netbox/dcim/forms/bulk_import.py:1290 #, python-brace-format msgid "{side_upper} side termination not found: {device} {name}" msgstr "{side_upper} no se encontró la terminación lateral: {device} {name}" -#: dcim/forms/bulk_import.py:1293 dcim/forms/model_forms.py:785 -#: dcim/tables/devices.py:1027 templates/dcim/device.html:132 -#: templates/dcim/virtualchassis.html:27 templates/dcim/virtualchassis.html:67 +#: 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/templates/dcim/virtualchassis.html:27 +#: netbox/templates/dcim/virtualchassis.html:67 msgid "Master" msgstr "Maestro" -#: dcim/forms/bulk_import.py:1297 +#: netbox/dcim/forms/bulk_import.py:1319 msgid "Master device" msgstr "Dispositivo maestro" -#: dcim/forms/bulk_import.py:1314 +#: netbox/dcim/forms/bulk_import.py:1336 msgid "Name of parent site" msgstr "Nombre del sitio principal" -#: dcim/forms/bulk_import.py:1348 +#: netbox/dcim/forms/bulk_import.py:1370 msgid "Upstream power panel" msgstr "Panel de alimentación ascendente" -#: dcim/forms/bulk_import.py:1378 +#: netbox/dcim/forms/bulk_import.py:1400 msgid "Primary or redundant" msgstr "Primario o redundante" -#: dcim/forms/bulk_import.py:1383 +#: netbox/dcim/forms/bulk_import.py:1405 msgid "Supply type (AC/DC)" msgstr "Tipo de alimentación (AC/DC)" -#: dcim/forms/bulk_import.py:1388 +#: netbox/dcim/forms/bulk_import.py:1410 msgid "Single or three-phase" msgstr "Monofásico o trifásico" -#: dcim/forms/bulk_import.py:1439 dcim/forms/model_forms.py:1670 -#: templates/dcim/device.html:190 templates/dcim/virtualdevicecontext.html:30 -#: templates/virtualization/virtualmachine.html:52 +#: netbox/dcim/forms/bulk_import.py:1461 netbox/dcim/forms/model_forms.py:1677 +#: netbox/templates/dcim/device.html:190 +#: netbox/templates/dcim/virtualdevicecontext.html:30 +#: netbox/templates/virtualization/virtualmachine.html:52 msgid "Primary IPv4" msgstr "IPv4 principal" -#: dcim/forms/bulk_import.py:1443 +#: netbox/dcim/forms/bulk_import.py:1465 msgid "IPv4 address with mask, e.g. 1.2.3.4/24" msgstr "Dirección IPv4 con máscara, p. ej. 1.2.3.4/24" -#: dcim/forms/bulk_import.py:1446 dcim/forms/model_forms.py:1679 -#: templates/dcim/device.html:206 templates/dcim/virtualdevicecontext.html:41 -#: templates/virtualization/virtualmachine.html:68 +#: netbox/dcim/forms/bulk_import.py:1468 netbox/dcim/forms/model_forms.py:1686 +#: netbox/templates/dcim/device.html:206 +#: netbox/templates/dcim/virtualdevicecontext.html:41 +#: netbox/templates/virtualization/virtualmachine.html:68 msgid "Primary IPv6" msgstr "IPv6 principal" -#: dcim/forms/bulk_import.py:1450 +#: netbox/dcim/forms/bulk_import.py:1472 msgid "IPv6 address with prefix length, e.g. 2001:db8::1/64" msgstr "Dirección IPv6 con longitud de prefijo, por ejemplo, 2001:db8: :1/64" -#: dcim/forms/common.py:24 dcim/models/device_components.py:527 -#: templates/dcim/interface.html:57 -#: templates/virtualization/vminterface.html:55 -#: virtualization/forms/bulk_edit.py:225 +#: netbox/dcim/forms/common.py:24 netbox/dcim/models/device_components.py:527 +#: netbox/templates/dcim/interface.html:57 +#: netbox/templates/virtualization/vminterface.html:55 +#: netbox/virtualization/forms/bulk_edit.py:225 msgid "MTU" msgstr "MUT" -#: dcim/forms/common.py:65 +#: netbox/dcim/forms/common.py:65 #, python-brace-format msgid "" "The tagged VLANs ({vlans}) must belong to the same site as the interface's " @@ -4214,7 +4647,7 @@ msgstr "" "Las VLAN etiquetadas ({vlans}) deben pertenecer al mismo sitio que el " "dispositivo o máquina virtual principal de la interfaz o deben ser globales" -#: dcim/forms/common.py:126 +#: netbox/dcim/forms/common.py:126 msgid "" "Cannot install module with placeholder values in a module bay with no " "position defined." @@ -4222,7 +4655,7 @@ msgstr "" "No se puede instalar el módulo con valores de marcador de posición en un " "compartimento de módulos sin una posición definida." -#: dcim/forms/common.py:131 +#: netbox/dcim/forms/common.py:131 #, python-brace-format msgid "" "Cannot install module with placeholder values in a module bay tree {level} " @@ -4232,188 +4665,199 @@ msgstr "" "árbol de compartimentos de módulos {level} en un árbol, pero {tokens} " "marcadores de posición dados." -#: dcim/forms/common.py:144 +#: netbox/dcim/forms/common.py:144 #, python-brace-format msgid "Cannot adopt {model} {name} as it already belongs to a module" msgstr "No puede adoptar {model} {name} porque ya pertenece a un módulo" -#: dcim/forms/common.py:153 +#: netbox/dcim/forms/common.py:153 #, python-brace-format msgid "A {model} named {name} already exists" msgstr "UN {model} llamado {name} ya existe" -#: dcim/forms/connections.py:49 dcim/forms/model_forms.py:738 -#: dcim/tables/power.py:66 templates/dcim/inc/cable_termination.html:37 -#: templates/dcim/powerfeed.html:24 templates/dcim/powerpanel.html:19 -#: templates/dcim/trace/powerpanel.html:4 +#: netbox/dcim/forms/connections.py:49 netbox/dcim/forms/model_forms.py:738 +#: netbox/dcim/tables/power.py:66 +#: netbox/templates/dcim/inc/cable_termination.html:37 +#: netbox/templates/dcim/powerfeed.html:24 +#: netbox/templates/dcim/powerpanel.html:19 +#: netbox/templates/dcim/trace/powerpanel.html:4 msgid "Power Panel" msgstr "Panel de alimentación" -#: dcim/forms/connections.py:58 dcim/forms/model_forms.py:765 -#: templates/dcim/powerfeed.html:21 templates/dcim/powerport.html:80 +#: netbox/dcim/forms/connections.py:58 netbox/dcim/forms/model_forms.py:765 +#: netbox/templates/dcim/powerfeed.html:21 +#: netbox/templates/dcim/powerport.html:80 msgid "Power Feed" msgstr "Alimentación eléctrica" -#: dcim/forms/connections.py:81 +#: netbox/dcim/forms/connections.py:81 msgid "Side" msgstr "Lado" -#: dcim/forms/filtersets.py:136 dcim/tables/devices.py:295 +#: netbox/dcim/forms/filtersets.py:136 netbox/dcim/tables/devices.py:295 msgid "Device Status" msgstr "Estado del dispositivo" -#: dcim/forms/filtersets.py:149 +#: netbox/dcim/forms/filtersets.py:149 msgid "Parent region" msgstr "Región principal" -#: dcim/forms/filtersets.py:163 tenancy/forms/bulk_import.py:28 -#: tenancy/forms/bulk_import.py:62 tenancy/forms/filtersets.py:33 -#: tenancy/forms/filtersets.py:62 wireless/forms/bulk_import.py:25 -#: wireless/forms/filtersets.py:25 +#: netbox/dcim/forms/filtersets.py:163 netbox/tenancy/forms/bulk_import.py:28 +#: netbox/tenancy/forms/bulk_import.py:62 +#: netbox/tenancy/forms/filtersets.py:33 netbox/tenancy/forms/filtersets.py:62 +#: netbox/wireless/forms/bulk_import.py:25 +#: netbox/wireless/forms/filtersets.py:25 msgid "Parent group" msgstr "Grupo de padres" -#: dcim/forms/filtersets.py:242 templates/dcim/location.html:58 -#: templates/dcim/site.html:56 +#: netbox/dcim/forms/filtersets.py:242 netbox/templates/dcim/location.html:58 +#: netbox/templates/dcim/site.html:56 msgid "Facility" msgstr "Instalación" -#: dcim/forms/filtersets.py:380 -msgid "Rack type" -msgstr "Tipo de bastidor" - -#: dcim/forms/filtersets.py:397 +#: netbox/dcim/forms/filtersets.py:397 msgid "Function" msgstr "Función" -#: dcim/forms/filtersets.py:483 dcim/forms/model_forms.py:373 -#: templates/inc/panels/image_attachments.html:6 +#: netbox/dcim/forms/filtersets.py:483 netbox/dcim/forms/model_forms.py:373 +#: netbox/templates/inc/panels/image_attachments.html:6 msgid "Images" msgstr "Imágenes" -#: dcim/forms/filtersets.py:486 dcim/forms/filtersets.py:611 -#: dcim/forms/filtersets.py:726 +#: netbox/dcim/forms/filtersets.py:486 netbox/dcim/forms/filtersets.py:611 +#: netbox/dcim/forms/filtersets.py:726 msgid "Components" msgstr "Componentes" -#: dcim/forms/filtersets.py:506 +#: netbox/dcim/forms/filtersets.py:506 msgid "Subdevice role" msgstr "Función de subdispositivo" -#: dcim/forms/filtersets.py:790 dcim/tables/racks.py:54 -#: templates/dcim/racktype.html:20 +#: netbox/dcim/forms/filtersets.py:790 netbox/dcim/tables/racks.py:54 +#: netbox/templates/dcim/racktype.html:20 msgid "Model" msgstr "modelo" -#: dcim/forms/filtersets.py:834 +#: netbox/dcim/forms/filtersets.py:834 msgid "Has an OOB IP" msgstr "Tiene una IP OOB" -#: dcim/forms/filtersets.py:841 +#: netbox/dcim/forms/filtersets.py:841 msgid "Virtual chassis member" msgstr "Miembro del chasis virtual" -#: dcim/forms/filtersets.py:890 +#: netbox/dcim/forms/filtersets.py:890 msgid "Has virtual device contexts" msgstr "Tiene contextos de dispositivos virtuales" -#: dcim/forms/filtersets.py:903 extras/filtersets.py:585 -#: ipam/forms/filtersets.py:452 virtualization/forms/filtersets.py:112 +#: netbox/dcim/forms/filtersets.py:903 netbox/extras/filtersets.py:585 +#: netbox/ipam/forms/filtersets.py:452 +#: netbox/virtualization/forms/filtersets.py:112 msgid "Cluster group" msgstr "Grupo de clústeres" -#: dcim/forms/filtersets.py:1210 +#: netbox/dcim/forms/filtersets.py:1210 msgid "Cabled" msgstr "Cableado" -#: dcim/forms/filtersets.py:1217 +#: netbox/dcim/forms/filtersets.py:1217 msgid "Occupied" msgstr "Ocupado" -#: dcim/forms/filtersets.py:1244 dcim/forms/filtersets.py:1269 -#: dcim/forms/filtersets.py:1293 dcim/forms/filtersets.py:1313 -#: dcim/forms/filtersets.py:1336 dcim/tables/devices.py:364 -#: templates/dcim/consoleport.html:55 templates/dcim/consoleserverport.html:55 -#: templates/dcim/frontport.html:69 templates/dcim/interface.html:140 -#: templates/dcim/powerfeed.html:110 templates/dcim/poweroutlet.html:59 -#: templates/dcim/powerport.html:59 templates/dcim/rearport.html:65 +#: netbox/dcim/forms/filtersets.py: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/templates/dcim/consoleport.html:55 +#: netbox/templates/dcim/consoleserverport.html:55 +#: netbox/templates/dcim/frontport.html:69 +#: netbox/templates/dcim/interface.html:140 +#: netbox/templates/dcim/powerfeed.html:110 +#: netbox/templates/dcim/poweroutlet.html:59 +#: netbox/templates/dcim/powerport.html:59 +#: netbox/templates/dcim/rearport.html:65 msgid "Connection" msgstr "Conexión" -#: dcim/forms/filtersets.py:1348 extras/forms/bulk_edit.py:326 -#: extras/forms/bulk_import.py:247 extras/forms/filtersets.py:464 -#: extras/forms/model_forms.py:675 extras/tables/tables.py:579 -#: templates/extras/journalentry.html:30 +#: netbox/dcim/forms/filtersets.py:1348 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 "Amable" -#: dcim/forms/filtersets.py:1377 +#: netbox/dcim/forms/filtersets.py:1377 msgid "Mgmt only" msgstr "Solo administración" -#: dcim/forms/filtersets.py:1389 dcim/forms/model_forms.py:1383 -#: dcim/models/device_components.py:629 templates/dcim/interface.html:129 +#: 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 msgid "WWN" msgstr "WWN" -#: dcim/forms/filtersets.py:1409 +#: netbox/dcim/forms/filtersets.py:1409 msgid "Wireless channel" msgstr "Canal inalámbrico" -#: dcim/forms/filtersets.py:1413 +#: netbox/dcim/forms/filtersets.py:1413 msgid "Channel frequency (MHz)" msgstr "Frecuencia de canal (MHz)" -#: dcim/forms/filtersets.py:1417 +#: netbox/dcim/forms/filtersets.py:1417 msgid "Channel width (MHz)" msgstr "Ancho de canal (MHz)" -#: dcim/forms/filtersets.py:1421 templates/dcim/interface.html:85 +#: netbox/dcim/forms/filtersets.py:1421 +#: netbox/templates/dcim/interface.html:85 msgid "Transmit power (dBm)" msgstr "Potencia de transmisión (dBm)" -#: dcim/forms/filtersets.py:1446 dcim/forms/filtersets.py:1471 -#: dcim/tables/devices.py:327 templates/dcim/cable.html:12 -#: templates/dcim/cable_trace.html:46 templates/dcim/frontport.html:77 -#: templates/dcim/htmx/cable_edit.html:50 -#: templates/dcim/inc/connection_endpoints.html:4 -#: templates/dcim/rearport.html:73 templates/dcim/trace/cable.html:7 +#: netbox/dcim/forms/filtersets.py:1446 netbox/dcim/forms/filtersets.py:1471 +#: netbox/dcim/tables/devices.py:327 netbox/templates/dcim/cable.html:12 +#: netbox/templates/dcim/cable_trace.html:46 +#: netbox/templates/dcim/frontport.html:77 +#: netbox/templates/dcim/htmx/cable_edit.html:50 +#: netbox/templates/dcim/inc/connection_endpoints.html:4 +#: netbox/templates/dcim/rearport.html:73 +#: netbox/templates/dcim/trace/cable.html:7 msgid "Cable" msgstr "Cable" -#: dcim/forms/filtersets.py:1550 dcim/tables/devices.py:949 +#: netbox/dcim/forms/filtersets.py:1550 netbox/dcim/tables/devices.py:949 msgid "Discovered" msgstr "Descubierto" -#: dcim/forms/formsets.py:20 +#: netbox/dcim/forms/formsets.py:20 #, python-brace-format msgid "A virtual chassis member already exists in position {vc_position}." msgstr "Ya existe un miembro del chasis virtual en posición {vc_position}." -#: dcim/forms/model_forms.py:140 +#: netbox/dcim/forms/model_forms.py:140 msgid "Contact Info" msgstr "Información de contacto" -#: dcim/forms/model_forms.py:195 templates/dcim/rackrole.html:19 +#: netbox/dcim/forms/model_forms.py:195 netbox/templates/dcim/rackrole.html:19 msgid "Rack Role" msgstr "Rol de bastidor" -#: dcim/forms/model_forms.py:212 dcim/forms/model_forms.py:362 -#: dcim/forms/model_forms.py:446 utilities/forms/fields/fields.py:47 +#: netbox/dcim/forms/model_forms.py:212 netbox/dcim/forms/model_forms.py:362 +#: netbox/dcim/forms/model_forms.py:446 +#: netbox/utilities/forms/fields/fields.py:47 msgid "Slug" msgstr "Babosa" -#: dcim/forms/model_forms.py:259 +#: netbox/dcim/forms/model_forms.py:259 msgid "Select a pre-defined rack type, or set physical characteristics below." msgstr "" "Seleccione un tipo de bastidor predefinido o defina las características " "físicas a continuación." -#: dcim/forms/model_forms.py:265 +#: netbox/dcim/forms/model_forms.py:265 msgid "Inventory Control" msgstr "Control de inventario" -#: dcim/forms/model_forms.py:313 +#: netbox/dcim/forms/model_forms.py:313 msgid "" "Comma-separated list of numeric unit IDs. A range may be specified using a " "hyphen." @@ -4421,146 +4865,173 @@ msgstr "" "Lista de identificadores de unidades numéricas separados por comas. Se puede" " especificar un rango mediante un guión." -#: dcim/forms/model_forms.py:322 dcim/tables/racks.py:202 +#: netbox/dcim/forms/model_forms.py:322 netbox/dcim/tables/racks.py:202 msgid "Reservation" msgstr "Reservación" -#: dcim/forms/model_forms.py:423 templates/dcim/devicerole.html:23 +#: netbox/dcim/forms/model_forms.py:423 +#: netbox/templates/dcim/devicerole.html:23 msgid "Device Role" msgstr "Función del dispositivo" -#: dcim/forms/model_forms.py:490 dcim/models/devices.py:644 +#: netbox/dcim/forms/model_forms.py:490 netbox/dcim/models/devices.py:644 msgid "The lowest-numbered unit occupied by the device" msgstr "La unidad con el número más bajo ocupado por el dispositivo" -#: dcim/forms/model_forms.py:547 +#: netbox/dcim/forms/model_forms.py:547 msgid "The position in the virtual chassis this device is identified by" msgstr "" "La posición en el chasis virtual por la que se identifica este dispositivo" -#: dcim/forms/model_forms.py:552 +#: netbox/dcim/forms/model_forms.py:552 msgid "The priority of the device in the virtual chassis" msgstr "La prioridad del dispositivo en el chasis virtual" -#: dcim/forms/model_forms.py:659 +#: netbox/dcim/forms/model_forms.py:659 msgid "Automatically populate components associated with this module type" msgstr "" "Rellenar automáticamente los componentes asociados a este tipo de módulo" -#: dcim/forms/model_forms.py:767 +#: netbox/dcim/forms/model_forms.py:767 msgid "Characteristics" msgstr "Características" -#: dcim/forms/model_forms.py:1087 +#: netbox/dcim/forms/model_forms.py:914 +#, python-brace-format +msgid "" +"Alphanumeric ranges are supported for bulk creation. Mixed cases and types " +"within a single range are not supported (example: " +"[ge,xe]-0/0/[0-9]). The token {module}, if " +"present, will be automatically replaced with the position value when " +"creating a new module." +msgstr "" + +#: netbox/dcim/forms/model_forms.py:1094 msgid "Console port template" msgstr "Plantilla de puerto de consola" -#: dcim/forms/model_forms.py:1095 +#: netbox/dcim/forms/model_forms.py:1102 msgid "Console server port template" msgstr "Plantilla de puerto de servidor de consola" -#: dcim/forms/model_forms.py:1103 +#: netbox/dcim/forms/model_forms.py:1110 msgid "Front port template" msgstr "Plantilla de puerto frontal" -#: dcim/forms/model_forms.py:1111 +#: netbox/dcim/forms/model_forms.py:1118 msgid "Interface template" msgstr "Plantilla de interfaz" -#: dcim/forms/model_forms.py:1119 +#: netbox/dcim/forms/model_forms.py:1126 msgid "Power outlet template" msgstr "Plantilla de toma de corriente" -#: dcim/forms/model_forms.py:1127 +#: netbox/dcim/forms/model_forms.py:1134 msgid "Power port template" msgstr "Plantilla de puerto de alimentación" -#: dcim/forms/model_forms.py:1135 +#: netbox/dcim/forms/model_forms.py:1142 msgid "Rear port template" msgstr "Plantilla de puerto trasero" -#: dcim/forms/model_forms.py:1144 dcim/forms/model_forms.py:1388 -#: dcim/forms/model_forms.py:1551 dcim/forms/model_forms.py:1583 -#: dcim/tables/connections.py:65 ipam/forms/bulk_import.py:318 -#: ipam/forms/model_forms.py:280 ipam/forms/model_forms.py:289 -#: ipam/tables/fhrp.py:64 ipam/tables/ip.py:372 ipam/tables/vlans.py:169 -#: templates/circuits/inc/circuit_termination_fields.html:51 -#: templates/dcim/frontport.html:106 templates/dcim/interface.html:27 -#: templates/dcim/interface.html:184 templates/dcim/interface.html:310 -#: templates/dcim/rearport.html:102 -#: templates/virtualization/vminterface.html:18 -#: templates/vpn/tunneltermination.html:31 -#: templates/wireless/inc/wirelesslink_interface.html:10 -#: templates/wireless/wirelesslink.html:10 -#: templates/wireless/wirelesslink.html:55 -#: virtualization/forms/model_forms.py:348 vpn/forms/bulk_import.py:297 -#: vpn/forms/model_forms.py:436 vpn/forms/model_forms.py:445 -#: wireless/forms/model_forms.py:113 wireless/forms/model_forms.py:155 +#: netbox/dcim/forms/model_forms.py: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" -#: dcim/forms/model_forms.py:1145 dcim/forms/model_forms.py:1584 -#: dcim/tables/connections.py:27 templates/dcim/consoleport.html:17 -#: templates/dcim/consoleserverport.html:74 templates/dcim/frontport.html:112 +#: netbox/dcim/forms/model_forms.py:1152 netbox/dcim/forms/model_forms.py:1591 +#: netbox/dcim/tables/connections.py:27 +#: netbox/templates/dcim/consoleport.html:17 +#: netbox/templates/dcim/consoleserverport.html:74 +#: netbox/templates/dcim/frontport.html:112 msgid "Console Port" msgstr "Puerto de consola" -#: dcim/forms/model_forms.py:1146 dcim/forms/model_forms.py:1585 -#: templates/dcim/consoleport.html:73 templates/dcim/consoleserverport.html:17 -#: templates/dcim/frontport.html:109 +#: netbox/dcim/forms/model_forms.py:1153 netbox/dcim/forms/model_forms.py:1592 +#: 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" -#: dcim/forms/model_forms.py:1147 dcim/forms/model_forms.py:1586 -#: templates/circuits/inc/circuit_termination_fields.html:52 -#: templates/dcim/consoleport.html:76 templates/dcim/consoleserverport.html:77 -#: templates/dcim/frontport.html:17 templates/dcim/frontport.html:115 -#: templates/dcim/interface.html:187 templates/dcim/rearport.html:105 +#: netbox/dcim/forms/model_forms.py:1154 netbox/dcim/forms/model_forms.py:1593 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:52 +#: netbox/templates/dcim/consoleport.html:76 +#: netbox/templates/dcim/consoleserverport.html:77 +#: netbox/templates/dcim/frontport.html:17 +#: netbox/templates/dcim/frontport.html:115 +#: netbox/templates/dcim/interface.html:187 +#: netbox/templates/dcim/rearport.html:105 msgid "Front Port" msgstr "Puerto frontal" -#: dcim/forms/model_forms.py:1148 dcim/forms/model_forms.py:1587 -#: dcim/tables/devices.py:710 -#: templates/circuits/inc/circuit_termination_fields.html:53 -#: templates/dcim/consoleport.html:79 templates/dcim/consoleserverport.html:80 -#: templates/dcim/frontport.html:50 templates/dcim/frontport.html:118 -#: templates/dcim/interface.html:190 templates/dcim/rearport.html:17 -#: templates/dcim/rearport.html:108 +#: netbox/dcim/forms/model_forms.py:1155 netbox/dcim/forms/model_forms.py:1594 +#: netbox/dcim/tables/devices.py:710 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:53 +#: netbox/templates/dcim/consoleport.html:79 +#: netbox/templates/dcim/consoleserverport.html:80 +#: netbox/templates/dcim/frontport.html:50 +#: netbox/templates/dcim/frontport.html:118 +#: netbox/templates/dcim/interface.html:190 +#: netbox/templates/dcim/rearport.html:17 +#: netbox/templates/dcim/rearport.html:108 msgid "Rear Port" msgstr "Puerto trasero" -#: dcim/forms/model_forms.py:1149 dcim/forms/model_forms.py:1588 -#: dcim/tables/connections.py:46 dcim/tables/devices.py:512 -#: templates/dcim/poweroutlet.html:44 templates/dcim/powerport.html:17 +#: 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/templates/dcim/powerport.html:17 msgid "Power Port" msgstr "Puerto de alimentación" -#: dcim/forms/model_forms.py:1150 dcim/forms/model_forms.py:1589 -#: templates/dcim/poweroutlet.html:17 templates/dcim/powerport.html:77 +#: netbox/dcim/forms/model_forms.py:1157 netbox/dcim/forms/model_forms.py:1596 +#: netbox/templates/dcim/poweroutlet.html:17 +#: netbox/templates/dcim/powerport.html:77 msgid "Power Outlet" msgstr "Toma de corriente" -#: dcim/forms/model_forms.py:1152 dcim/forms/model_forms.py:1591 +#: netbox/dcim/forms/model_forms.py:1159 netbox/dcim/forms/model_forms.py:1598 msgid "Component Assignment" msgstr "Asignación de componentes" -#: dcim/forms/model_forms.py:1195 dcim/forms/model_forms.py:1638 +#: netbox/dcim/forms/model_forms.py:1202 netbox/dcim/forms/model_forms.py:1645 msgid "An InventoryItem can only be assigned to a single component." msgstr "Un InventoryItem solo se puede asignar a un único componente." -#: dcim/forms/model_forms.py:1332 +#: netbox/dcim/forms/model_forms.py:1339 msgid "LAG interface" msgstr "Interfaz LAG" -#: dcim/forms/model_forms.py:1355 +#: netbox/dcim/forms/model_forms.py:1362 msgid "Filter VLANs available for assignment by group." msgstr "Filtre las VLAN disponibles para la asignación por grupo." -#: dcim/forms/model_forms.py:1484 +#: netbox/dcim/forms/model_forms.py:1491 msgid "Child Device" msgstr "Dispositivo infantil" -#: dcim/forms/model_forms.py:1485 +#: netbox/dcim/forms/model_forms.py:1492 msgid "" "Child devices must first be created and assigned to the site and rack of the" " parent device." @@ -4568,32 +5039,35 @@ msgstr "" "Los dispositivos secundarios primero deben crearse y asignarse al sitio y al" " rack del dispositivo principal." -#: dcim/forms/model_forms.py:1527 +#: netbox/dcim/forms/model_forms.py:1534 msgid "Console port" msgstr "Puerto de consola" -#: dcim/forms/model_forms.py:1535 +#: netbox/dcim/forms/model_forms.py:1542 msgid "Console server port" msgstr "Puerto de servidor de consola" -#: dcim/forms/model_forms.py:1543 +#: netbox/dcim/forms/model_forms.py:1550 msgid "Front port" msgstr "Puerto frontal" -#: dcim/forms/model_forms.py:1559 +#: netbox/dcim/forms/model_forms.py:1566 msgid "Power outlet" msgstr "toma de corriente" -#: dcim/forms/model_forms.py:1579 templates/dcim/inventoryitem.html:17 +#: netbox/dcim/forms/model_forms.py:1586 +#: netbox/templates/dcim/inventoryitem.html:17 msgid "Inventory Item" msgstr "Artículo de inventario" -#: dcim/forms/model_forms.py:1652 templates/dcim/inventoryitemrole.html:15 +#: netbox/dcim/forms/model_forms.py:1659 +#: netbox/templates/dcim/inventoryitemrole.html:15 msgid "Inventory Item Role" msgstr "Función del artículo de inventario" -#: dcim/forms/object_create.py:48 dcim/forms/object_create.py:199 -#: dcim/forms/object_create.py:355 +#: netbox/dcim/forms/object_create.py:48 +#: netbox/dcim/forms/object_create.py:199 +#: netbox/dcim/forms/object_create.py:347 msgid "" "Alphanumeric ranges are supported. (Must match the number of objects being " "created.)" @@ -4601,7 +5075,7 @@ msgstr "" "Se admiten los rangos alfanuméricos. (Debe coincidir con el número de " "objetos que se están creando)." -#: dcim/forms/object_create.py:68 +#: netbox/dcim/forms/object_create.py:68 #, python-brace-format msgid "" "The provided pattern specifies {value_count} values, but {pattern_count} are" @@ -4610,18 +5084,19 @@ msgstr "" "El patrón proporcionado especifica {value_count} valores, pero " "{pattern_count} se esperan." -#: dcim/forms/object_create.py:110 dcim/forms/object_create.py:271 -#: dcim/tables/devices.py:252 +#: netbox/dcim/forms/object_create.py:110 +#: netbox/dcim/forms/object_create.py:263 netbox/dcim/tables/devices.py:252 msgid "Rear ports" msgstr "Puertos traseros" -#: dcim/forms/object_create.py:111 dcim/forms/object_create.py:272 +#: netbox/dcim/forms/object_create.py:111 +#: netbox/dcim/forms/object_create.py:264 msgid "Select one rear port assignment for each front port being created." msgstr "" "Seleccione una asignación de puerto posterior para cada puerto frontal que " "se vaya a crear." -#: dcim/forms/object_create.py:164 +#: netbox/dcim/forms/object_create.py:164 #, python-brace-format msgid "" "The number of front port templates to be created ({frontport_count}) must " @@ -4631,16 +5106,7 @@ msgstr "" "({frontport_count}) debe coincidir con el número seleccionado de posiciones " "de los puertos traseros ({rearport_count})." -#: dcim/forms/object_create.py:251 -#, python-brace-format -msgid "" -"The string {module} will be replaced with the position of the " -"assigned module, if any." -msgstr "" -"La cadena {module} se sustituirá por la posición del módulo " -"asignado, si lo hubiera." - -#: dcim/forms/object_create.py:320 +#: netbox/dcim/forms/object_create.py:312 #, python-brace-format msgid "" "The number of front ports to be created ({frontport_count}) must match the " @@ -4650,17 +5116,18 @@ msgstr "" "coincidir con el número seleccionado de posiciones de los puertos traseros " "({rearport_count})." -#: dcim/forms/object_create.py:409 dcim/tables/devices.py:1033 -#: ipam/tables/fhrp.py:31 templates/dcim/virtualchassis.html:53 -#: templates/dcim/virtualchassis_edit.html:47 templates/ipam/fhrpgroup.html:38 +#: netbox/dcim/forms/object_create.py:401 netbox/dcim/tables/devices.py:1033 +#: netbox/ipam/tables/fhrp.py:31 netbox/templates/dcim/virtualchassis.html:53 +#: netbox/templates/dcim/virtualchassis_edit.html:47 +#: netbox/templates/ipam/fhrpgroup.html:38 msgid "Members" msgstr "Miembros" -#: dcim/forms/object_create.py:418 +#: netbox/dcim/forms/object_create.py:410 msgid "Initial position" msgstr "Posición inicial" -#: dcim/forms/object_create.py:421 +#: netbox/dcim/forms/object_create.py:413 msgid "" "Position of the first member device. Increases by one for each additional " "member." @@ -4668,67 +5135,69 @@ msgstr "" "Posición del primer dispositivo miembro. Aumenta en uno por cada miembro " "adicional." -#: dcim/forms/object_create.py:435 +#: netbox/dcim/forms/object_create.py:427 msgid "A position must be specified for the first VC member." msgstr "Se debe especificar un puesto para el primer miembro del VC." -#: dcim/models/cables.py:62 dcim/models/device_component_templates.py:55 -#: dcim/models/device_components.py:62 extras/models/customfields.py:111 +#: netbox/dcim/models/cables.py:62 +#: netbox/dcim/models/device_component_templates.py:55 +#: netbox/dcim/models/device_components.py:62 +#: netbox/extras/models/customfields.py:111 msgid "label" msgstr "etiqueta" -#: dcim/models/cables.py:71 +#: netbox/dcim/models/cables.py:71 msgid "length" msgstr "longitud" -#: dcim/models/cables.py:78 +#: netbox/dcim/models/cables.py:78 msgid "length unit" msgstr "unidad de longitud" -#: dcim/models/cables.py:95 +#: netbox/dcim/models/cables.py:95 msgid "cable" msgstr "cable" -#: dcim/models/cables.py:96 +#: netbox/dcim/models/cables.py:96 msgid "cables" msgstr "cables" -#: dcim/models/cables.py:165 +#: netbox/dcim/models/cables.py:165 msgid "Must specify a unit when setting a cable length" msgstr "Debe especificar una unidad al configurar la longitud de un cable" -#: dcim/models/cables.py:168 +#: netbox/dcim/models/cables.py:168 msgid "Must define A and B terminations when creating a new cable." msgstr "Debe definir las terminaciones A y B al crear un cable nuevo." -#: dcim/models/cables.py:175 +#: netbox/dcim/models/cables.py:175 msgid "Cannot connect different termination types to same end of cable." msgstr "" "No se pueden conectar diferentes tipos de terminaciones al mismo extremo del" " cable." -#: dcim/models/cables.py:183 +#: netbox/dcim/models/cables.py:183 #, python-brace-format msgid "Incompatible termination types: {type_a} and {type_b}" msgstr "Tipos de terminación incompatibles: {type_a} y {type_b}" -#: dcim/models/cables.py:193 +#: netbox/dcim/models/cables.py:193 msgid "A and B terminations cannot connect to the same object." msgstr "Las terminaciones A y B no pueden conectarse al mismo objeto." -#: dcim/models/cables.py:260 ipam/models/asns.py:37 +#: netbox/dcim/models/cables.py:260 netbox/ipam/models/asns.py:37 msgid "end" msgstr "fin" -#: dcim/models/cables.py:313 +#: netbox/dcim/models/cables.py:313 msgid "cable termination" msgstr "terminación de cable" -#: dcim/models/cables.py:314 +#: netbox/dcim/models/cables.py:314 msgid "cable terminations" msgstr "terminaciones de cables" -#: dcim/models/cables.py:333 +#: netbox/dcim/models/cables.py:333 #, python-brace-format msgid "" "Duplicate termination found for {app_label}.{model} {termination_id}: cable " @@ -4737,38 +5206,38 @@ msgstr "" "Se encontró una terminación duplicada para {app_label}.{model} " "{termination_id}: cable {cable_pk}" -#: dcim/models/cables.py:343 +#: netbox/dcim/models/cables.py:343 #, python-brace-format msgid "Cables cannot be terminated to {type_display} interfaces" msgstr "Los cables no se pueden terminar en {type_display} interfaz" -#: dcim/models/cables.py:350 +#: netbox/dcim/models/cables.py:350 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." -#: dcim/models/cables.py:448 extras/models/configs.py:50 +#: netbox/dcim/models/cables.py:448 netbox/extras/models/configs.py:50 msgid "is active" msgstr "está activo" -#: dcim/models/cables.py:452 +#: netbox/dcim/models/cables.py:452 msgid "is complete" msgstr "está completo" -#: dcim/models/cables.py:456 +#: netbox/dcim/models/cables.py:456 msgid "is split" msgstr "está dividido" -#: dcim/models/cables.py:464 +#: netbox/dcim/models/cables.py:464 msgid "cable path" msgstr "ruta de cable" -#: dcim/models/cables.py:465 +#: netbox/dcim/models/cables.py:465 msgid "cable paths" msgstr "rutas de cable" -#: dcim/models/device_component_templates.py:46 +#: netbox/dcim/models/device_component_templates.py:46 #, python-brace-format msgid "" "{module} is accepted as a substitution for the module bay position when " @@ -4777,18 +5246,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." -#: dcim/models/device_component_templates.py:58 -#: dcim/models/device_components.py:65 +#: netbox/dcim/models/device_component_templates.py:58 +#: netbox/dcim/models/device_components.py:65 msgid "Physical label" msgstr "Etiqueta física" -#: dcim/models/device_component_templates.py:103 +#: netbox/dcim/models/device_component_templates.py:103 msgid "Component templates cannot be moved to a different device type." msgstr "" "Las plantillas de componentes no se pueden mover a un tipo de dispositivo " "diferente." -#: dcim/models/device_component_templates.py:154 +#: netbox/dcim/models/device_component_templates.py:154 msgid "" "A component template cannot be associated with both a device type and a " "module type." @@ -4796,7 +5265,7 @@ msgstr "" "Una plantilla de componente no se puede asociar a un tipo de dispositivo ni " "a un tipo de módulo." -#: dcim/models/device_component_templates.py:158 +#: netbox/dcim/models/device_component_templates.py:158 msgid "" "A component template must be associated with either a device type or a " "module type." @@ -4804,138 +5273,138 @@ msgstr "" "Una plantilla de componente debe estar asociada a un tipo de dispositivo o a" " un tipo de módulo." -#: dcim/models/device_component_templates.py:212 +#: netbox/dcim/models/device_component_templates.py:212 msgid "console port template" msgstr "plantilla de puerto de consola" -#: dcim/models/device_component_templates.py:213 +#: netbox/dcim/models/device_component_templates.py:213 msgid "console port templates" msgstr "plantillas de puertos de consola" -#: dcim/models/device_component_templates.py:246 +#: netbox/dcim/models/device_component_templates.py:246 msgid "console server port template" msgstr "plantilla de puerto de servidor de consola" -#: dcim/models/device_component_templates.py:247 +#: netbox/dcim/models/device_component_templates.py:247 msgid "console server port templates" msgstr "plantillas de puertos de servidor de consola" -#: dcim/models/device_component_templates.py:278 -#: dcim/models/device_components.py:352 +#: netbox/dcim/models/device_component_templates.py:278 +#: netbox/dcim/models/device_components.py:352 msgid "maximum draw" msgstr "sorteo máximo" -#: dcim/models/device_component_templates.py:285 -#: dcim/models/device_components.py:359 +#: netbox/dcim/models/device_component_templates.py:285 +#: netbox/dcim/models/device_components.py:359 msgid "allocated draw" msgstr "sorteo asignado" -#: dcim/models/device_component_templates.py:295 +#: netbox/dcim/models/device_component_templates.py:295 msgid "power port template" msgstr "plantilla de puerto de alimentación" -#: dcim/models/device_component_templates.py:296 +#: netbox/dcim/models/device_component_templates.py:296 msgid "power port templates" msgstr "plantillas de puertos de alimentación" -#: dcim/models/device_component_templates.py:315 -#: dcim/models/device_components.py:382 +#: netbox/dcim/models/device_component_templates.py:315 +#: netbox/dcim/models/device_components.py:382 #, 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)." -#: dcim/models/device_component_templates.py:347 -#: dcim/models/device_components.py:477 +#: netbox/dcim/models/device_component_templates.py:347 +#: netbox/dcim/models/device_components.py:477 msgid "feed leg" msgstr "pierna de alimentación" -#: dcim/models/device_component_templates.py:351 -#: dcim/models/device_components.py:481 +#: netbox/dcim/models/device_component_templates.py:351 +#: netbox/dcim/models/device_components.py:481 msgid "Phase (for three-phase feeds)" msgstr "Fase (para alimentaciones trifásicas)" -#: dcim/models/device_component_templates.py:357 +#: netbox/dcim/models/device_component_templates.py:357 msgid "power outlet template" msgstr "plantilla de toma de corriente" -#: dcim/models/device_component_templates.py:358 +#: netbox/dcim/models/device_component_templates.py:358 msgid "power outlet templates" msgstr "plantillas de tomas de corriente" -#: dcim/models/device_component_templates.py:367 +#: netbox/dcim/models/device_component_templates.py:367 #, 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" -#: dcim/models/device_component_templates.py:371 +#: netbox/dcim/models/device_component_templates.py:371 #, 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" -#: dcim/models/device_component_templates.py:423 -#: dcim/models/device_components.py:611 +#: netbox/dcim/models/device_component_templates.py:423 +#: netbox/dcim/models/device_components.py:611 msgid "management only" msgstr "solo administración" -#: dcim/models/device_component_templates.py:431 -#: dcim/models/device_components.py:550 +#: netbox/dcim/models/device_component_templates.py:431 +#: netbox/dcim/models/device_components.py:550 msgid "bridge interface" msgstr "interfaz de puente" -#: dcim/models/device_component_templates.py:449 -#: dcim/models/device_components.py:636 +#: netbox/dcim/models/device_component_templates.py:449 +#: netbox/dcim/models/device_components.py:636 msgid "wireless role" msgstr "función inalámbrica" -#: dcim/models/device_component_templates.py:455 +#: netbox/dcim/models/device_component_templates.py:455 msgid "interface template" msgstr "plantilla de interfaz" -#: dcim/models/device_component_templates.py:456 +#: netbox/dcim/models/device_component_templates.py:456 msgid "interface templates" msgstr "plantillas de interfaz" -#: dcim/models/device_component_templates.py:463 -#: dcim/models/device_components.py:804 -#: virtualization/models/virtualmachines.py:405 +#: netbox/dcim/models/device_component_templates.py:463 +#: netbox/dcim/models/device_components.py:804 +#: netbox/virtualization/models/virtualmachines.py:405 msgid "An interface cannot be bridged to itself." msgstr "Una interfaz no se puede conectar a sí misma." -#: dcim/models/device_component_templates.py:466 +#: netbox/dcim/models/device_component_templates.py:466 #, 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" -#: dcim/models/device_component_templates.py:470 +#: netbox/dcim/models/device_component_templates.py:470 #, 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" -#: dcim/models/device_component_templates.py:526 -#: dcim/models/device_components.py:984 +#: netbox/dcim/models/device_component_templates.py:526 +#: netbox/dcim/models/device_components.py:984 msgid "rear port position" msgstr "posición del puerto trasero" -#: dcim/models/device_component_templates.py:551 +#: netbox/dcim/models/device_component_templates.py:551 msgid "front port template" msgstr "plantilla de puerto frontal" -#: dcim/models/device_component_templates.py:552 +#: netbox/dcim/models/device_component_templates.py:552 msgid "front port templates" msgstr "plantillas de puertos frontales" -#: dcim/models/device_component_templates.py:562 +#: netbox/dcim/models/device_component_templates.py:562 #, 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" -#: dcim/models/device_component_templates.py:568 +#: netbox/dcim/models/device_component_templates.py:568 #, python-brace-format msgid "" "Invalid rear port position ({position}); rear port {name} has only {count} " @@ -4944,48 +5413,48 @@ msgstr "" "Posición del puerto trasero no válida ({position}); puerto trasero {name} " "solo tiene {count} posiciones" -#: dcim/models/device_component_templates.py:621 -#: dcim/models/device_components.py:1053 +#: netbox/dcim/models/device_component_templates.py:621 +#: netbox/dcim/models/device_components.py:1053 msgid "positions" msgstr "posiciones" -#: dcim/models/device_component_templates.py:632 +#: netbox/dcim/models/device_component_templates.py:632 msgid "rear port template" msgstr "plantilla de puerto trasero" -#: dcim/models/device_component_templates.py:633 +#: netbox/dcim/models/device_component_templates.py:633 msgid "rear port templates" msgstr "plantillas de puertos traseros" -#: dcim/models/device_component_templates.py:662 -#: dcim/models/device_components.py:1103 +#: netbox/dcim/models/device_component_templates.py:662 +#: netbox/dcim/models/device_components.py:1103 msgid "position" msgstr "posición" -#: dcim/models/device_component_templates.py:665 -#: dcim/models/device_components.py:1106 +#: netbox/dcim/models/device_component_templates.py:665 +#: netbox/dcim/models/device_components.py:1106 msgid "Identifier to reference when renaming installed components" msgstr "" "Identificador al que se debe hacer referencia al cambiar el nombre de los " "componentes instalados" -#: dcim/models/device_component_templates.py:671 +#: netbox/dcim/models/device_component_templates.py:671 msgid "module bay template" msgstr "plantilla de bahía de módulos" -#: dcim/models/device_component_templates.py:672 +#: netbox/dcim/models/device_component_templates.py:672 msgid "module bay templates" msgstr "plantillas de compartimentos de módulos" -#: dcim/models/device_component_templates.py:699 +#: netbox/dcim/models/device_component_templates.py:699 msgid "device bay template" msgstr "plantilla de compartimento de dispositivos" -#: dcim/models/device_component_templates.py:700 +#: netbox/dcim/models/device_component_templates.py:700 msgid "device bay templates" msgstr "plantillas de compartimentos de dispositivos" -#: dcim/models/device_component_templates.py:713 +#: netbox/dcim/models/device_component_templates.py:713 #, python-brace-format msgid "" "Subdevice role of device type ({device_type}) must be set to \"parent\" to " @@ -4995,202 +5464,207 @@ msgstr "" "configurarse como «principal» para permitir compartimentos para " "dispositivos." -#: dcim/models/device_component_templates.py:768 -#: dcim/models/device_components.py:1262 +#: netbox/dcim/models/device_component_templates.py:768 +#: netbox/dcim/models/device_components.py:1262 msgid "part ID" msgstr "ID de pieza" -#: dcim/models/device_component_templates.py:770 -#: dcim/models/device_components.py:1264 +#: netbox/dcim/models/device_component_templates.py:770 +#: netbox/dcim/models/device_components.py:1264 msgid "Manufacturer-assigned part identifier" msgstr "Identificador de pieza asignado por el fabricante" -#: dcim/models/device_component_templates.py:787 +#: netbox/dcim/models/device_component_templates.py:787 msgid "inventory item template" msgstr "plantilla de artículos de inventario" -#: dcim/models/device_component_templates.py:788 +#: netbox/dcim/models/device_component_templates.py:788 msgid "inventory item templates" msgstr "plantillas de artículos de inventario" -#: dcim/models/device_components.py:105 +#: netbox/dcim/models/device_components.py:105 msgid "Components cannot be moved to a different device." msgstr "Los componentes no se pueden mover a un dispositivo diferente." -#: dcim/models/device_components.py:144 +#: netbox/dcim/models/device_components.py:144 msgid "cable end" msgstr "extremo del cable" -#: dcim/models/device_components.py:150 +#: netbox/dcim/models/device_components.py:150 msgid "mark connected" msgstr "marcar conectado" -#: dcim/models/device_components.py:152 +#: netbox/dcim/models/device_components.py:152 msgid "Treat as if a cable is connected" msgstr "Tratar como si hubiera un cable conectado" -#: dcim/models/device_components.py:170 +#: netbox/dcim/models/device_components.py:170 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." -#: dcim/models/device_components.py:174 +#: netbox/dcim/models/device_components.py:174 msgid "Cable end must not be set without a cable." msgstr "El extremo del cable no se debe colocar sin cable." -#: dcim/models/device_components.py:178 +#: netbox/dcim/models/device_components.py:178 msgid "Cannot mark as connected with a cable attached." msgstr "No se puede marcar como conectado con un cable conectado." -#: dcim/models/device_components.py:202 +#: netbox/dcim/models/device_components.py:202 #, python-brace-format msgid "{class_name} models must declare a parent_object property" msgstr "{class_name} los modelos deben declarar una propiedad parent_object" -#: dcim/models/device_components.py:287 dcim/models/device_components.py:316 -#: dcim/models/device_components.py:349 dcim/models/device_components.py:467 +#: 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 msgid "Physical port type" msgstr "Tipo de puerto físico" -#: dcim/models/device_components.py:290 dcim/models/device_components.py:319 +#: netbox/dcim/models/device_components.py:290 +#: netbox/dcim/models/device_components.py:319 msgid "speed" msgstr "velocidad" -#: dcim/models/device_components.py:294 dcim/models/device_components.py:323 +#: netbox/dcim/models/device_components.py:294 +#: netbox/dcim/models/device_components.py:323 msgid "Port speed in bits per second" msgstr "Velocidad de puerto en bits por segundo" -#: dcim/models/device_components.py:300 +#: netbox/dcim/models/device_components.py:300 msgid "console port" msgstr "puerto de consola" -#: dcim/models/device_components.py:301 +#: netbox/dcim/models/device_components.py:301 msgid "console ports" msgstr "puertos de consola" -#: dcim/models/device_components.py:329 +#: netbox/dcim/models/device_components.py:329 msgid "console server port" msgstr "puerto de servidor de consola" -#: dcim/models/device_components.py:330 +#: netbox/dcim/models/device_components.py:330 msgid "console server ports" msgstr "puertos de servidor de consola" -#: dcim/models/device_components.py:369 +#: netbox/dcim/models/device_components.py:369 msgid "power port" msgstr "puerto de alimentación" -#: dcim/models/device_components.py:370 +#: netbox/dcim/models/device_components.py:370 msgid "power ports" msgstr "puertos de alimentación" -#: dcim/models/device_components.py:487 +#: netbox/dcim/models/device_components.py:487 msgid "power outlet" msgstr "toma de corriente" -#: dcim/models/device_components.py:488 +#: netbox/dcim/models/device_components.py:488 msgid "power outlets" msgstr "tomas de corriente" -#: dcim/models/device_components.py:499 +#: netbox/dcim/models/device_components.py:499 #, 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" -#: dcim/models/device_components.py:530 vpn/models/crypto.py:81 -#: vpn/models/crypto.py:226 +#: netbox/dcim/models/device_components.py:530 netbox/vpn/models/crypto.py:81 +#: netbox/vpn/models/crypto.py:226 msgid "mode" msgstr "modo" -#: dcim/models/device_components.py:534 +#: netbox/dcim/models/device_components.py:534 msgid "IEEE 802.1Q tagging strategy" msgstr "Estrategia de etiquetado IEEE 802.1Q" -#: dcim/models/device_components.py:542 +#: netbox/dcim/models/device_components.py:542 msgid "parent interface" msgstr "interfaz principal" -#: dcim/models/device_components.py:602 +#: netbox/dcim/models/device_components.py:602 msgid "parent LAG" msgstr "LAG principal" -#: dcim/models/device_components.py:612 +#: 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" -#: dcim/models/device_components.py:617 +#: netbox/dcim/models/device_components.py:617 msgid "speed (Kbps)" msgstr "velocidad (Kbps)" -#: dcim/models/device_components.py:620 +#: netbox/dcim/models/device_components.py:620 msgid "duplex" msgstr "dúplex" -#: dcim/models/device_components.py:630 +#: netbox/dcim/models/device_components.py:630 msgid "64-bit World Wide Name" msgstr "Nombre mundial de 64 bits" -#: dcim/models/device_components.py:642 +#: netbox/dcim/models/device_components.py:642 msgid "wireless channel" msgstr "canal inalámbrico" -#: dcim/models/device_components.py:649 +#: netbox/dcim/models/device_components.py:649 msgid "channel frequency (MHz)" msgstr "frecuencia de canal (MHz)" -#: dcim/models/device_components.py:650 dcim/models/device_components.py:658 +#: 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)" -#: dcim/models/device_components.py:664 +#: netbox/dcim/models/device_components.py:664 msgid "transmit power (dBm)" msgstr "potencia de transmisión (dBm)" -#: dcim/models/device_components.py:689 wireless/models.py:117 +#: netbox/dcim/models/device_components.py:689 netbox/wireless/models.py:117 msgid "wireless LANs" msgstr "LAN inalámbricas" -#: dcim/models/device_components.py:697 -#: virtualization/models/virtualmachines.py:335 +#: netbox/dcim/models/device_components.py:697 +#: netbox/virtualization/models/virtualmachines.py:335 msgid "untagged VLAN" msgstr "VLAN sin etiquetar" -#: dcim/models/device_components.py:703 -#: virtualization/models/virtualmachines.py:341 +#: netbox/dcim/models/device_components.py:703 +#: netbox/virtualization/models/virtualmachines.py:341 msgid "tagged VLANs" msgstr "VLAN etiquetadas" -#: dcim/models/device_components.py:745 -#: virtualization/models/virtualmachines.py:377 +#: netbox/dcim/models/device_components.py:745 +#: netbox/virtualization/models/virtualmachines.py:377 msgid "interface" msgstr "interfaz" -#: dcim/models/device_components.py:746 -#: virtualization/models/virtualmachines.py:378 +#: netbox/dcim/models/device_components.py:746 +#: netbox/virtualization/models/virtualmachines.py:378 msgid "interfaces" msgstr "interfaz" -#: dcim/models/device_components.py:757 +#: netbox/dcim/models/device_components.py:757 #, python-brace-format msgid "{display_type} interfaces cannot have a cable attached." msgstr "{display_type} las interfaces no pueden tener un cable conectado." -#: dcim/models/device_components.py:765 +#: netbox/dcim/models/device_components.py:765 #, python-brace-format msgid "{display_type} interfaces cannot be marked as connected." msgstr "{display_type} las interfaces no se pueden marcar como conectadas." -#: dcim/models/device_components.py:774 -#: virtualization/models/virtualmachines.py:390 +#: netbox/dcim/models/device_components.py:774 +#: netbox/virtualization/models/virtualmachines.py:390 msgid "An interface cannot be its own parent." msgstr "Una interfaz no puede ser su propia interfaz principal." -#: dcim/models/device_components.py:778 +#: netbox/dcim/models/device_components.py:778 msgid "Only virtual interfaces may be assigned to a parent interface." msgstr "Solo se pueden asignar interfaces virtuales a una interfaz principal." -#: dcim/models/device_components.py:785 +#: netbox/dcim/models/device_components.py:785 #, python-brace-format msgid "" "The selected parent interface ({interface}) belongs to a different device " @@ -5199,7 +5673,7 @@ msgstr "" "La interfaz principal seleccionada ({interface}) pertenece a un dispositivo " "diferente ({device})" -#: dcim/models/device_components.py:791 +#: netbox/dcim/models/device_components.py:791 #, python-brace-format msgid "" "The selected parent interface ({interface}) belongs to {device}, which is " @@ -5208,7 +5682,7 @@ msgstr "" "La interfaz principal seleccionada ({interface}) pertenece a {device}, que " "no forma parte del chasis virtual {virtual_chassis}." -#: dcim/models/device_components.py:811 +#: netbox/dcim/models/device_components.py:811 #, python-brace-format msgid "" "The selected bridge interface ({bridge}) belongs to a different device " @@ -5217,7 +5691,7 @@ msgstr "" "La interfaz de puente seleccionada ({bridge}) pertenece a un dispositivo " "diferente ({device})." -#: dcim/models/device_components.py:817 +#: netbox/dcim/models/device_components.py:817 #, python-brace-format msgid "" "The selected bridge interface ({interface}) belongs to {device}, which is " @@ -5226,15 +5700,15 @@ msgstr "" "La interfaz de puente seleccionada ({interface}) pertenece a {device}, que " "no forma parte del chasis virtual {virtual_chassis}." -#: dcim/models/device_components.py:828 +#: netbox/dcim/models/device_components.py:828 msgid "Virtual interfaces cannot have a parent LAG interface." msgstr "Las interfaces virtuales no pueden tener una interfaz LAG principal." -#: dcim/models/device_components.py:832 +#: netbox/dcim/models/device_components.py:832 msgid "A LAG interface cannot be its own parent." msgstr "Una interfaz LAG no puede ser su propia interfaz principal." -#: dcim/models/device_components.py:839 +#: netbox/dcim/models/device_components.py:839 #, python-brace-format msgid "" "The selected LAG interface ({lag}) belongs to a different device ({device})." @@ -5242,7 +5716,7 @@ msgstr "" "La interfaz LAG seleccionada ({lag}) pertenece a un dispositivo diferente " "({device})." -#: dcim/models/device_components.py:845 +#: netbox/dcim/models/device_components.py:845 #, python-brace-format msgid "" "The selected LAG interface ({lag}) belongs to {device}, which is not part of" @@ -5251,51 +5725,51 @@ msgstr "" "La interfaz LAG seleccionada ({lag}) pertenece a {device}, que no forma " "parte del chasis virtual {virtual_chassis}." -#: dcim/models/device_components.py:856 +#: netbox/dcim/models/device_components.py:856 msgid "Virtual interfaces cannot have a PoE mode." msgstr "Las interfaces virtuales no pueden tener un modo PoE." -#: dcim/models/device_components.py:860 +#: netbox/dcim/models/device_components.py:860 msgid "Virtual interfaces cannot have a PoE type." msgstr "Las interfaces virtuales no pueden tener un tipo PoE." -#: dcim/models/device_components.py:866 +#: netbox/dcim/models/device_components.py:866 msgid "Must specify PoE mode when designating a PoE type." msgstr "Debe especificar el modo PoE al designar un tipo de PoE." -#: dcim/models/device_components.py:873 +#: netbox/dcim/models/device_components.py:873 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." -#: dcim/models/device_components.py:875 +#: netbox/dcim/models/device_components.py:875 msgid "Channel may be set only on wireless interfaces." msgstr "El canal solo se puede configurar en las interfaces inalámbricas." -#: dcim/models/device_components.py:881 +#: netbox/dcim/models/device_components.py:881 msgid "Channel frequency may be set only on wireless interfaces." msgstr "" "La frecuencia del canal solo se puede configurar en las interfaces " "inalámbricas." -#: dcim/models/device_components.py:885 +#: netbox/dcim/models/device_components.py:885 msgid "Cannot specify custom frequency with channel selected." msgstr "" "No se puede especificar la frecuencia personalizada con el canal " "seleccionado." -#: dcim/models/device_components.py:891 +#: netbox/dcim/models/device_components.py:891 msgid "Channel width may be set only on wireless interfaces." msgstr "" "El ancho del canal solo se puede establecer en las interfaces inalámbricas." -#: dcim/models/device_components.py:893 +#: netbox/dcim/models/device_components.py:893 msgid "Cannot specify custom width with channel selected." msgstr "" "No se puede especificar un ancho personalizado con el canal seleccionado." -#: dcim/models/device_components.py:901 +#: netbox/dcim/models/device_components.py:901 #, python-brace-format msgid "" "The untagged VLAN ({untagged_vlan}) must belong to the same site as the " @@ -5304,24 +5778,24 @@ msgstr "" "La VLAN sin etiquetar ({untagged_vlan}) debe pertenecer al mismo sitio que " "el dispositivo principal de la interfaz o debe ser global." -#: dcim/models/device_components.py:990 +#: netbox/dcim/models/device_components.py:990 msgid "Mapped position on corresponding rear port" msgstr "Posición mapeada en el puerto trasero correspondiente" -#: dcim/models/device_components.py:1006 +#: netbox/dcim/models/device_components.py:1006 msgid "front port" msgstr "puerto frontal" -#: dcim/models/device_components.py:1007 +#: netbox/dcim/models/device_components.py:1007 msgid "front ports" msgstr "puertos frontales" -#: dcim/models/device_components.py:1021 +#: netbox/dcim/models/device_components.py:1021 #, python-brace-format msgid "Rear port ({rear_port}) must belong to the same device" msgstr "Puerto trasero ({rear_port}) debe pertenecer al mismo dispositivo" -#: dcim/models/device_components.py:1029 +#: netbox/dcim/models/device_components.py:1029 #, python-brace-format msgid "" "Invalid rear port position ({rear_port_position}): Rear port {name} has only" @@ -5330,19 +5804,19 @@ msgstr "" "Posición del puerto trasero no válida ({rear_port_position}): puerto trasero" " {name} solo tiene {positions} posiciones." -#: dcim/models/device_components.py:1059 +#: netbox/dcim/models/device_components.py:1059 msgid "Number of front ports which may be mapped" msgstr "Número de puertos frontales que se pueden mapear" -#: dcim/models/device_components.py:1064 +#: netbox/dcim/models/device_components.py:1064 msgid "rear port" msgstr "puerto trasero" -#: dcim/models/device_components.py:1065 +#: netbox/dcim/models/device_components.py:1065 msgid "rear ports" msgstr "puertos traseros" -#: dcim/models/device_components.py:1079 +#: netbox/dcim/models/device_components.py:1079 #, python-brace-format msgid "" "The number of positions cannot be less than the number of mapped front ports" @@ -5351,39 +5825,40 @@ msgstr "" "El número de posiciones no puede ser inferior al número de puertos frontales" " mapeados ({frontport_count})" -#: dcim/models/device_components.py:1120 +#: netbox/dcim/models/device_components.py:1120 msgid "module bay" msgstr "compartimiento de módulos" -#: dcim/models/device_components.py:1121 +#: netbox/dcim/models/device_components.py:1121 msgid "module bays" msgstr "compartimentos de módulos" -#: dcim/models/device_components.py:1138 dcim/models/devices.py:1224 +#: netbox/dcim/models/device_components.py:1138 +#: netbox/dcim/models/devices.py:1224 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." -#: dcim/models/device_components.py:1164 +#: netbox/dcim/models/device_components.py:1164 msgid "device bay" msgstr "compartimiento de dispositivos" -#: dcim/models/device_components.py:1165 +#: netbox/dcim/models/device_components.py:1165 msgid "device bays" msgstr "compartimentos para dispositivos" -#: dcim/models/device_components.py:1175 +#: netbox/dcim/models/device_components.py:1175 #, 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." -#: dcim/models/device_components.py:1181 +#: netbox/dcim/models/device_components.py:1181 msgid "Cannot install a device into itself." msgstr "No se puede instalar un dispositivo en sí mismo." -#: dcim/models/device_components.py:1189 +#: netbox/dcim/models/device_components.py:1189 #, python-brace-format msgid "" "Cannot install the specified device; device is already installed in {bay}." @@ -5391,116 +5866,118 @@ msgstr "" "No se puede instalar el dispositivo especificado; el dispositivo ya está " "instalado en {bay}." -#: dcim/models/device_components.py:1210 +#: netbox/dcim/models/device_components.py:1210 msgid "inventory item role" msgstr "rol de artículo de inventario" -#: dcim/models/device_components.py:1211 +#: netbox/dcim/models/device_components.py:1211 msgid "inventory item roles" msgstr "roles de artículos de inventario" -#: dcim/models/device_components.py:1268 dcim/models/devices.py:607 -#: dcim/models/devices.py:1181 dcim/models/racks.py:313 -#: virtualization/models/virtualmachines.py:131 +#: 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 msgid "serial number" msgstr "número de serie" -#: dcim/models/device_components.py:1276 dcim/models/devices.py:615 -#: dcim/models/devices.py:1188 dcim/models/racks.py:320 +#: 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 msgid "asset tag" msgstr "etiqueta de activo" -#: dcim/models/device_components.py:1277 +#: netbox/dcim/models/device_components.py:1277 msgid "A unique tag used to identify this item" msgstr "Una etiqueta única que se utiliza para identificar este artículo" -#: dcim/models/device_components.py:1280 +#: netbox/dcim/models/device_components.py:1280 msgid "discovered" msgstr "descubierto" -#: dcim/models/device_components.py:1282 +#: netbox/dcim/models/device_components.py:1282 msgid "This item was automatically discovered" msgstr "Este artículo se descubrió automáticamente" -#: dcim/models/device_components.py:1300 +#: netbox/dcim/models/device_components.py:1300 msgid "inventory item" msgstr "artículo de inventario" -#: dcim/models/device_components.py:1301 +#: netbox/dcim/models/device_components.py:1301 msgid "inventory items" msgstr "artículos de inventario" -#: dcim/models/device_components.py:1312 +#: netbox/dcim/models/device_components.py:1312 msgid "Cannot assign self as parent." msgstr "No se puede asignar a sí mismo como padre." -#: dcim/models/device_components.py:1320 +#: netbox/dcim/models/device_components.py:1320 msgid "Parent inventory item does not belong to the same device." msgstr "" "El artículo del inventario principal no pertenece al mismo dispositivo." -#: dcim/models/device_components.py:1326 +#: netbox/dcim/models/device_components.py:1326 msgid "Cannot move an inventory item with dependent children" msgstr "No se puede mover un artículo del inventario con hijos a cargo" -#: dcim/models/device_components.py:1334 +#: netbox/dcim/models/device_components.py:1334 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" -#: dcim/models/devices.py:54 +#: netbox/dcim/models/devices.py:54 msgid "manufacturer" msgstr "fabricante" -#: dcim/models/devices.py:55 +#: netbox/dcim/models/devices.py:55 msgid "manufacturers" msgstr "fabricantes" -#: dcim/models/devices.py:82 dcim/models/devices.py:382 -#: dcim/models/racks.py:133 +#: netbox/dcim/models/devices.py:82 netbox/dcim/models/devices.py:382 +#: netbox/dcim/models/racks.py:133 msgid "model" msgstr "modelo" -#: dcim/models/devices.py:95 +#: netbox/dcim/models/devices.py:95 msgid "default platform" msgstr "plataforma predeterminada" -#: dcim/models/devices.py:98 dcim/models/devices.py:386 +#: netbox/dcim/models/devices.py:98 netbox/dcim/models/devices.py:386 msgid "part number" msgstr "número de pieza" -#: dcim/models/devices.py:101 dcim/models/devices.py:389 +#: netbox/dcim/models/devices.py:101 netbox/dcim/models/devices.py:389 msgid "Discrete part number (optional)" msgstr "Número de pieza discreto (opcional)" -#: dcim/models/devices.py:107 dcim/models/racks.py:54 +#: netbox/dcim/models/devices.py:107 netbox/dcim/models/racks.py:54 msgid "height (U)" msgstr "altura (U)" -#: dcim/models/devices.py:111 +#: netbox/dcim/models/devices.py:111 msgid "exclude from utilization" msgstr "excluir de la utilización" -#: dcim/models/devices.py:112 +#: netbox/dcim/models/devices.py:112 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." -#: dcim/models/devices.py:116 +#: netbox/dcim/models/devices.py:116 msgid "is full depth" msgstr "es de profundidad total" -#: dcim/models/devices.py:117 +#: netbox/dcim/models/devices.py:117 msgid "Device consumes both front and rear rack faces." msgstr "El dispositivo consume las caras delantera y trasera del bastidor." -#: dcim/models/devices.py:123 +#: netbox/dcim/models/devices.py:123 msgid "parent/child status" msgstr "estado de padre/hijo" -#: dcim/models/devices.py:124 +#: netbox/dcim/models/devices.py:124 msgid "" "Parent devices house child devices in device bays. Leave blank if this " "device type is neither a parent nor a child." @@ -5509,24 +5986,24 @@ msgstr "" "compartimentos para dispositivos. Déjelo en blanco si este tipo de " "dispositivo no es para padres ni para niños." -#: dcim/models/devices.py:128 dcim/models/devices.py:392 -#: dcim/models/devices.py:659 dcim/models/racks.py:324 +#: netbox/dcim/models/devices.py:128 netbox/dcim/models/devices.py:392 +#: netbox/dcim/models/devices.py:659 netbox/dcim/models/racks.py:324 msgid "airflow" msgstr "flujo de aire" -#: dcim/models/devices.py:204 +#: netbox/dcim/models/devices.py:204 msgid "device type" msgstr "tipo de dispositivo" -#: dcim/models/devices.py:205 +#: netbox/dcim/models/devices.py:205 msgid "device types" msgstr "tipos de dispositivos" -#: dcim/models/devices.py:290 +#: netbox/dcim/models/devices.py:290 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." -#: dcim/models/devices.py:307 +#: netbox/dcim/models/devices.py:307 #, python-brace-format msgid "" "Device {device} in rack {rack} does not have sufficient space to accommodate" @@ -5535,7 +6012,7 @@ msgstr "" "Dispositivo {device} en un estante {rack} no tiene espacio suficiente para " "acomodar una altura de {height}U" -#: dcim/models/devices.py:322 +#: netbox/dcim/models/devices.py:322 #, python-brace-format msgid "" "Unable to set 0U height: Found {racked_instance_count} " @@ -5545,7 +6022,7 @@ msgstr "" "href=\"{url}\">{racked_instance_count} instancias ya está montado dentro" " de bastidores." -#: dcim/models/devices.py:331 +#: netbox/dcim/models/devices.py:331 msgid "" "Must delete all device bay templates associated with this device before " "declassifying it as a parent device." @@ -5554,155 +6031,155 @@ msgstr "" "asociadas a este dispositivo antes de desclasificarlo como dispositivo " "principal." -#: dcim/models/devices.py:337 +#: netbox/dcim/models/devices.py:337 msgid "Child device types must be 0U." msgstr "Los tipos de dispositivos secundarios deben ser 0U." -#: dcim/models/devices.py:411 +#: netbox/dcim/models/devices.py:411 msgid "module type" msgstr "tipo de módulo" -#: dcim/models/devices.py:412 +#: netbox/dcim/models/devices.py:412 msgid "module types" msgstr "tipos de módulos" -#: dcim/models/devices.py:485 +#: netbox/dcim/models/devices.py:485 msgid "Virtual machines may be assigned to this role" msgstr "Se pueden asignar máquinas virtuales a esta función" -#: dcim/models/devices.py:497 +#: netbox/dcim/models/devices.py:497 msgid "device role" msgstr "rol del dispositivo" -#: dcim/models/devices.py:498 +#: netbox/dcim/models/devices.py:498 msgid "device roles" msgstr "funciones del dispositivo" -#: dcim/models/devices.py:515 +#: netbox/dcim/models/devices.py:515 msgid "Optionally limit this platform to devices of a certain manufacturer" msgstr "" "Si lo desea, limite esta plataforma a dispositivos de un fabricante " "determinado." -#: dcim/models/devices.py:527 +#: netbox/dcim/models/devices.py:527 msgid "platform" msgstr "plataforma" -#: dcim/models/devices.py:528 +#: netbox/dcim/models/devices.py:528 msgid "platforms" msgstr "plataformas" -#: dcim/models/devices.py:576 +#: netbox/dcim/models/devices.py:576 msgid "The function this device serves" msgstr "La función que cumple este dispositivo" -#: dcim/models/devices.py:608 +#: netbox/dcim/models/devices.py:608 msgid "Chassis serial number, assigned by the manufacturer" msgstr "Número de serie del chasis, asignado por el fabricante" -#: dcim/models/devices.py:616 dcim/models/devices.py:1189 +#: netbox/dcim/models/devices.py:616 netbox/dcim/models/devices.py:1189 msgid "A unique tag used to identify this device" msgstr "Una etiqueta única que se utiliza para identificar este dispositivo" -#: dcim/models/devices.py:643 +#: netbox/dcim/models/devices.py:643 msgid "position (U)" msgstr "posición (U)" -#: dcim/models/devices.py:650 +#: netbox/dcim/models/devices.py:650 msgid "rack face" msgstr "cara del estante" -#: dcim/models/devices.py:670 dcim/models/devices.py:1415 -#: virtualization/models/virtualmachines.py:100 +#: netbox/dcim/models/devices.py:670 netbox/dcim/models/devices.py:1420 +#: netbox/virtualization/models/virtualmachines.py:100 msgid "primary IPv4" msgstr "IPv4 principal" -#: dcim/models/devices.py:678 dcim/models/devices.py:1423 -#: virtualization/models/virtualmachines.py:108 +#: netbox/dcim/models/devices.py:678 netbox/dcim/models/devices.py:1428 +#: netbox/virtualization/models/virtualmachines.py:108 msgid "primary IPv6" msgstr "IPv6 principal" -#: dcim/models/devices.py:686 +#: netbox/dcim/models/devices.py:686 msgid "out-of-band IP" msgstr "IP fuera de banda" -#: dcim/models/devices.py:703 +#: netbox/dcim/models/devices.py:703 msgid "VC position" msgstr "Posición VC" -#: dcim/models/devices.py:706 +#: netbox/dcim/models/devices.py:706 msgid "Virtual chassis position" msgstr "Posición virtual del chasis" -#: dcim/models/devices.py:709 +#: netbox/dcim/models/devices.py:709 msgid "VC priority" msgstr "Prioridad VC" -#: dcim/models/devices.py:713 +#: netbox/dcim/models/devices.py:713 msgid "Virtual chassis master election priority" msgstr "Prioridad de elección del maestro del chasis virtual" -#: dcim/models/devices.py:716 dcim/models/sites.py:207 +#: netbox/dcim/models/devices.py:716 netbox/dcim/models/sites.py:207 msgid "latitude" msgstr "latitud" -#: dcim/models/devices.py:721 dcim/models/devices.py:729 -#: dcim/models/sites.py:212 dcim/models/sites.py:220 +#: netbox/dcim/models/devices.py:721 netbox/dcim/models/devices.py:729 +#: netbox/dcim/models/sites.py:212 netbox/dcim/models/sites.py:220 msgid "GPS coordinate in decimal format (xx.yyyyyy)" msgstr "Coordenada GPS en formato decimal (xx.aaaaa)" -#: dcim/models/devices.py:724 dcim/models/sites.py:215 +#: netbox/dcim/models/devices.py:724 netbox/dcim/models/sites.py:215 msgid "longitude" msgstr "longitud" -#: dcim/models/devices.py:797 +#: netbox/dcim/models/devices.py:797 msgid "Device name must be unique per site." msgstr "El nombre del dispositivo debe ser único por sitio." -#: dcim/models/devices.py:808 ipam/models/services.py:75 +#: netbox/dcim/models/devices.py:808 netbox/ipam/models/services.py:75 msgid "device" msgstr "dispositivo" -#: dcim/models/devices.py:809 +#: netbox/dcim/models/devices.py:809 msgid "devices" msgstr "dispositivos" -#: dcim/models/devices.py:835 +#: netbox/dcim/models/devices.py:835 #, python-brace-format msgid "Rack {rack} does not belong to site {site}." msgstr "Estante {rack} no pertenece al sitio {site}." -#: dcim/models/devices.py:840 +#: netbox/dcim/models/devices.py:840 #, python-brace-format msgid "Location {location} does not belong to site {site}." msgstr "Ubicación {location} no pertenece al sitio {site}." -#: dcim/models/devices.py:846 +#: netbox/dcim/models/devices.py:846 #, python-brace-format msgid "Rack {rack} does not belong to location {location}." msgstr "Estante {rack} no pertenece a la ubicación {location}." -#: dcim/models/devices.py:853 +#: netbox/dcim/models/devices.py:853 msgid "Cannot select a rack face without assigning a rack." msgstr "No se puede seleccionar una cara de bastidor sin asignar un bastidor." -#: dcim/models/devices.py:857 +#: netbox/dcim/models/devices.py:857 msgid "Cannot select a rack position without assigning a rack." msgstr "" "No se puede seleccionar una posición de cremallera sin asignar una " "cremallera." -#: dcim/models/devices.py:863 +#: netbox/dcim/models/devices.py:863 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." -#: dcim/models/devices.py:867 +#: netbox/dcim/models/devices.py:867 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." -#: dcim/models/devices.py:875 +#: netbox/dcim/models/devices.py:875 #, python-brace-format msgid "" "A 0U device type ({device_type}) cannot be assigned to a rack position." @@ -5710,7 +6187,7 @@ msgstr "" "Un tipo de dispositivo 0U ({device_type}) no se puede asignar a una posición" " de estantería." -#: dcim/models/devices.py:886 +#: netbox/dcim/models/devices.py:886 msgid "" "Child device types cannot be assigned to a rack face. This is an attribute " "of the parent device." @@ -5718,7 +6195,7 @@ msgstr "" "Los tipos de dispositivos secundarios no se pueden asignar a la cara de un " "bastidor. Este es un atributo del dispositivo principal." -#: dcim/models/devices.py:893 +#: netbox/dcim/models/devices.py:893 msgid "" "Child device types cannot be assigned to a rack position. This is an " "attribute of the parent device." @@ -5726,7 +6203,7 @@ msgstr "" "Los tipos de dispositivos secundarios no se pueden asignar a una posición de" " bastidor. Este es un atributo del dispositivo principal." -#: dcim/models/devices.py:907 +#: netbox/dcim/models/devices.py:907 #, python-brace-format msgid "" "U{position} is already occupied or does not have sufficient space to " @@ -5735,23 +6212,23 @@ msgstr "" "U{position} ya está ocupado o no tiene espacio suficiente para este tipo de " "dispositivo: {device_type} ({u_height}U)" -#: dcim/models/devices.py:922 +#: netbox/dcim/models/devices.py:922 #, python-brace-format msgid "{ip} is not an IPv4 address." msgstr "{ip} no es una dirección IPv4." -#: dcim/models/devices.py:931 dcim/models/devices.py:946 +#: netbox/dcim/models/devices.py:931 netbox/dcim/models/devices.py:946 #, 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." -#: dcim/models/devices.py:937 +#: netbox/dcim/models/devices.py:937 #, python-brace-format msgid "{ip} is not an IPv6 address." msgstr "{ip} no es una dirección IPv6." -#: dcim/models/devices.py:964 +#: netbox/dcim/models/devices.py:964 #, python-brace-format msgid "" "The assigned platform is limited to {platform_manufacturer} device types, " @@ -5761,17 +6238,17 @@ msgstr "" "dispositivos, pero el tipo de este dispositivo pertenece a " "{devicetype_manufacturer}." -#: dcim/models/devices.py:975 +#: netbox/dcim/models/devices.py:975 #, python-brace-format msgid "The assigned cluster belongs to a different site ({site})" msgstr "El clúster asignado pertenece a un sitio diferente ({site})" -#: dcim/models/devices.py:983 +#: netbox/dcim/models/devices.py:983 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." -#: dcim/models/devices.py:988 +#: netbox/dcim/models/devices.py:988 #, python-brace-format msgid "" "Device cannot be removed from virtual chassis {virtual_chassis} because it " @@ -5780,15 +6257,15 @@ msgstr "" "El dispositivo no se puede extraer del chasis virtual {virtual_chassis} " "porque actualmente está designado como su maestro." -#: dcim/models/devices.py:1196 +#: netbox/dcim/models/devices.py:1196 msgid "module" msgstr "módulo" -#: dcim/models/devices.py:1197 +#: netbox/dcim/models/devices.py:1197 msgid "modules" msgstr "módulos" -#: dcim/models/devices.py:1213 +#: netbox/dcim/models/devices.py:1213 #, python-brace-format msgid "" "Module must be installed within a module bay belonging to the assigned " @@ -5797,22 +6274,22 @@ msgstr "" "El módulo debe instalarse en un compartimiento de módulos que pertenezca al " "dispositivo asignado ({device})." -#: dcim/models/devices.py:1334 +#: netbox/dcim/models/devices.py:1339 msgid "domain" msgstr "dominio" -#: dcim/models/devices.py:1347 dcim/models/devices.py:1348 +#: netbox/dcim/models/devices.py:1352 netbox/dcim/models/devices.py:1353 msgid "virtual chassis" msgstr "chasis virtual" -#: dcim/models/devices.py:1363 +#: netbox/dcim/models/devices.py:1368 #, 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." -#: dcim/models/devices.py:1379 +#: netbox/dcim/models/devices.py:1384 #, python-brace-format msgid "" "Unable to delete virtual chassis {self}. There are member interfaces which " @@ -5821,105 +6298,105 @@ msgstr "" "No se puede eliminar el chasis virtual {self}. Hay interfaces miembros que " "forman interfaces LAG entre chasis." -#: dcim/models/devices.py:1404 vpn/models/l2vpn.py:37 +#: netbox/dcim/models/devices.py:1409 netbox/vpn/models/l2vpn.py:37 msgid "identifier" msgstr "identificador" -#: dcim/models/devices.py:1405 +#: netbox/dcim/models/devices.py:1410 msgid "Numeric identifier unique to the parent device" msgstr "Identificador numérico exclusivo del dispositivo principal" -#: dcim/models/devices.py:1433 extras/models/customfields.py:225 -#: extras/models/models.py:107 extras/models/models.py:694 -#: netbox/models/__init__.py:115 +#: 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:115 msgid "comments" msgstr "comentarios" -#: dcim/models/devices.py:1449 +#: netbox/dcim/models/devices.py:1454 msgid "virtual device context" msgstr "contexto de dispositivo virtual" -#: dcim/models/devices.py:1450 +#: netbox/dcim/models/devices.py:1455 msgid "virtual device contexts" msgstr "contextos de dispositivos virtuales" -#: dcim/models/devices.py:1482 +#: netbox/dcim/models/devices.py:1487 #, python-brace-format msgid "{ip} is not an IPv{family} address." msgstr "{ip} no es un IPv{family} dirección." -#: dcim/models/devices.py:1488 +#: netbox/dcim/models/devices.py:1493 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." -#: dcim/models/mixins.py:15 extras/models/configs.py:41 -#: extras/models/models.py:313 extras/models/models.py:522 -#: extras/models/search.py:48 ipam/models/ip.py:194 +#: netbox/dcim/models/mixins.py:15 netbox/extras/models/configs.py:41 +#: netbox/extras/models/models.py:313 netbox/extras/models/models.py:522 +#: netbox/extras/models/search.py:48 netbox/ipam/models/ip.py:194 msgid "weight" msgstr "peso" -#: dcim/models/mixins.py:22 +#: netbox/dcim/models/mixins.py:22 msgid "weight unit" msgstr "unidad de peso" -#: dcim/models/mixins.py:51 +#: netbox/dcim/models/mixins.py:51 msgid "Must specify a unit when setting a weight" msgstr "Debe especificar una unidad al establecer un peso" -#: dcim/models/power.py:55 +#: netbox/dcim/models/power.py:55 msgid "power panel" msgstr "panel de alimentación" -#: dcim/models/power.py:56 +#: netbox/dcim/models/power.py:56 msgid "power panels" msgstr "paneles de alimentación" -#: dcim/models/power.py:70 +#: netbox/dcim/models/power.py:70 #, python-brace-format msgid "" "Location {location} ({location_site}) is in a different site than {site}" msgstr "" "Ubicación {location} ({location_site}) está en un sitio diferente al {site}" -#: dcim/models/power.py:108 +#: netbox/dcim/models/power.py:108 msgid "supply" msgstr "suministrar" -#: dcim/models/power.py:114 +#: netbox/dcim/models/power.py:114 msgid "phase" msgstr "fase" -#: dcim/models/power.py:120 +#: netbox/dcim/models/power.py:120 msgid "voltage" msgstr "voltaje" -#: dcim/models/power.py:125 +#: netbox/dcim/models/power.py:125 msgid "amperage" msgstr "amperaje" -#: dcim/models/power.py:130 +#: netbox/dcim/models/power.py:130 msgid "max utilization" msgstr "utilización máxima" -#: dcim/models/power.py:133 +#: netbox/dcim/models/power.py:133 msgid "Maximum permissible draw (percentage)" msgstr "Consumo máximo permitido (porcentaje)" -#: dcim/models/power.py:136 +#: netbox/dcim/models/power.py:136 msgid "available power" msgstr "potencia disponible" -#: dcim/models/power.py:164 +#: netbox/dcim/models/power.py:164 msgid "power feed" msgstr "alimentación" -#: dcim/models/power.py:165 +#: netbox/dcim/models/power.py:165 msgid "power feeds" msgstr "fuentes de alimentación" -#: dcim/models/power.py:179 +#: netbox/dcim/models/power.py:179 #, python-brace-format msgid "" "Rack {rack} ({rack_site}) and power panel {powerpanel} ({powerpanel_site}) " @@ -5928,64 +6405,64 @@ msgstr "" "Estante {rack} ({rack_site}) y panel de alimentación {powerpanel} " "({powerpanel_site}) están en diferentes sitios." -#: dcim/models/power.py:190 +#: netbox/dcim/models/power.py:190 msgid "Voltage cannot be negative for AC supply" msgstr "" "La tensión no puede ser negativa para el suministro de corriente alterna" -#: dcim/models/racks.py:47 +#: netbox/dcim/models/racks.py:47 msgid "width" msgstr "anchura" -#: dcim/models/racks.py:48 +#: netbox/dcim/models/racks.py:48 msgid "Rail-to-rail width" msgstr "Ancho de riel a riel" -#: dcim/models/racks.py:56 +#: netbox/dcim/models/racks.py:56 msgid "Height in rack units" msgstr "Altura en unidades de estantería" -#: dcim/models/racks.py:60 +#: netbox/dcim/models/racks.py:60 msgid "starting unit" msgstr "unidad de arranque" -#: dcim/models/racks.py:62 +#: netbox/dcim/models/racks.py:62 msgid "Starting unit for rack" msgstr "Unidad de arranque para bastidor" -#: dcim/models/racks.py:66 +#: netbox/dcim/models/racks.py:66 msgid "descending units" msgstr "unidades descendentes" -#: dcim/models/racks.py:67 +#: netbox/dcim/models/racks.py:67 msgid "Units are numbered top-to-bottom" msgstr "Las unidades están numeradas de arriba a abajo" -#: dcim/models/racks.py:72 +#: netbox/dcim/models/racks.py:72 msgid "outer width" msgstr "ancho exterior" -#: dcim/models/racks.py:75 +#: netbox/dcim/models/racks.py:75 msgid "Outer dimension of rack (width)" msgstr "Dimensión exterior del estante (ancho)" -#: dcim/models/racks.py:78 +#: netbox/dcim/models/racks.py:78 msgid "outer depth" msgstr "profundidad exterior" -#: dcim/models/racks.py:81 +#: netbox/dcim/models/racks.py:81 msgid "Outer dimension of rack (depth)" msgstr "Dimensión exterior del bastidor (profundidad)" -#: dcim/models/racks.py:84 +#: netbox/dcim/models/racks.py:84 msgid "outer unit" msgstr "unidad exterior" -#: dcim/models/racks.py:90 +#: netbox/dcim/models/racks.py:90 msgid "mounting depth" msgstr "profundidad de montaje" -#: dcim/models/racks.py:94 +#: netbox/dcim/models/racks.py:94 msgid "" "Maximum depth of a mounted device, in millimeters. For four-post racks, this" " is the distance between the front and rear rails." @@ -5994,76 +6471,77 @@ msgstr "" "los estantes de cuatro postes, esta es la distancia entre los rieles " "delantero y trasero." -#: dcim/models/racks.py:102 +#: netbox/dcim/models/racks.py:102 msgid "max weight" msgstr "peso máximo" -#: dcim/models/racks.py:105 +#: netbox/dcim/models/racks.py:105 msgid "Maximum load capacity for the rack" msgstr "Capacidad de carga máxima del bastidor" -#: dcim/models/racks.py:125 dcim/models/racks.py:252 +#: netbox/dcim/models/racks.py:125 netbox/dcim/models/racks.py:252 msgid "form factor" msgstr "factor de forma" -#: dcim/models/racks.py:162 +#: netbox/dcim/models/racks.py:162 msgid "rack type" msgstr "tipo de bastidor" -#: dcim/models/racks.py:163 +#: netbox/dcim/models/racks.py:163 msgid "rack types" msgstr "tipos de estanterías" -#: dcim/models/racks.py:180 dcim/models/racks.py:379 +#: netbox/dcim/models/racks.py:180 netbox/dcim/models/racks.py:379 msgid "Must specify a unit when setting an outer width/depth" msgstr "" "Debe especificar una unidad al establecer una anchura o profundidad " "exteriores" -#: dcim/models/racks.py:184 dcim/models/racks.py:383 +#: netbox/dcim/models/racks.py:184 netbox/dcim/models/racks.py:383 msgid "Must specify a unit when setting a maximum weight" msgstr "Debe especificar una unidad al establecer un peso máximo" -#: dcim/models/racks.py:230 +#: netbox/dcim/models/racks.py:230 msgid "rack role" msgstr "rol de bastidor" -#: dcim/models/racks.py:231 +#: netbox/dcim/models/racks.py:231 msgid "rack roles" msgstr "roles de seguimiento" -#: dcim/models/racks.py:274 +#: netbox/dcim/models/racks.py:274 msgid "facility ID" msgstr "ID de la instalación" -#: dcim/models/racks.py:275 +#: netbox/dcim/models/racks.py:275 msgid "Locally-assigned identifier" msgstr "Identificador asignado localmente" -#: dcim/models/racks.py:308 ipam/forms/bulk_import.py:201 -#: ipam/forms/bulk_import.py:266 ipam/forms/bulk_import.py:301 -#: ipam/forms/bulk_import.py:459 virtualization/forms/bulk_import.py:112 +#: 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 msgid "Functional role" msgstr "Función funcional" -#: dcim/models/racks.py:321 +#: netbox/dcim/models/racks.py:321 msgid "A unique tag used to identify this rack" msgstr "Una etiqueta única que se utiliza para identificar este estante" -#: dcim/models/racks.py:359 +#: netbox/dcim/models/racks.py:359 msgid "rack" msgstr "estante" -#: dcim/models/racks.py:360 +#: netbox/dcim/models/racks.py:360 msgid "racks" msgstr "bastidores" -#: dcim/models/racks.py:375 +#: netbox/dcim/models/racks.py:375 #, python-brace-format msgid "Assigned location must belong to parent site ({site})." msgstr "La ubicación asignada debe pertenecer al sitio principal ({site})." -#: dcim/models/racks.py:393 +#: netbox/dcim/models/racks.py:393 #, python-brace-format msgid "" "Rack must be at least {min_height}U tall to house currently installed " @@ -6072,7 +6550,7 @@ msgstr "" "El estante debe tener al menos {min_height}Hablo para alojar los " "dispositivos instalados actualmente." -#: dcim/models/racks.py:400 +#: netbox/dcim/models/racks.py:400 #, python-brace-format msgid "" "Rack unit numbering must begin at {position} or less to house currently " @@ -6081,893 +6559,955 @@ msgstr "" "La numeración de las unidades del bastidor debe comenzar en {position} o " "menos para alojar los dispositivos actualmente instalados." -#: dcim/models/racks.py:408 +#: netbox/dcim/models/racks.py:408 #, python-brace-format msgid "Location must be from the same site, {site}." msgstr "La ubicación debe ser del mismo sitio, {site}." -#: dcim/models/racks.py:670 +#: netbox/dcim/models/racks.py:670 msgid "units" msgstr "unidades" -#: dcim/models/racks.py:696 +#: netbox/dcim/models/racks.py:696 msgid "rack reservation" msgstr "reserva de seguimiento" -#: dcim/models/racks.py:697 +#: netbox/dcim/models/racks.py:697 msgid "rack reservations" msgstr "Seguimiento de reservas" -#: dcim/models/racks.py:714 +#: netbox/dcim/models/racks.py:714 #, 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}" -#: dcim/models/racks.py:727 +#: netbox/dcim/models/racks.py:727 #, python-brace-format msgid "The following units have already been reserved: {unit_list}" msgstr "Ya se han reservado las siguientes unidades: {unit_list}" -#: dcim/models/sites.py:49 +#: netbox/dcim/models/sites.py:49 msgid "A top-level region with this name already exists." msgstr "Ya existe una región de nivel superior con este nombre." -#: dcim/models/sites.py:59 +#: netbox/dcim/models/sites.py:59 msgid "A top-level region with this slug already exists." msgstr "Ya existe una región de alto nivel con esta babosa." -#: dcim/models/sites.py:62 +#: netbox/dcim/models/sites.py:62 msgid "region" msgstr "región" -#: dcim/models/sites.py:63 +#: netbox/dcim/models/sites.py:63 msgid "regions" msgstr "regiones" -#: dcim/models/sites.py:102 +#: netbox/dcim/models/sites.py:102 msgid "A top-level site group with this name already exists." msgstr "Ya existe un grupo de sitio de nivel superior con este nombre." -#: dcim/models/sites.py:112 +#: netbox/dcim/models/sites.py:112 msgid "A top-level site group with this slug already exists." msgstr "Ya existe un grupo de sitios de nivel superior con este slug." -#: dcim/models/sites.py:115 +#: netbox/dcim/models/sites.py:115 msgid "site group" msgstr "grupo de sitios" -#: dcim/models/sites.py:116 +#: netbox/dcim/models/sites.py:116 msgid "site groups" msgstr "grupos de sitios" -#: dcim/models/sites.py:141 +#: netbox/dcim/models/sites.py:141 msgid "Full name of the site" msgstr "Nombre completo del sitio" -#: dcim/models/sites.py:181 dcim/models/sites.py:279 +#: netbox/dcim/models/sites.py:181 netbox/dcim/models/sites.py:279 msgid "facility" msgstr "instalaciones" -#: dcim/models/sites.py:184 dcim/models/sites.py:282 +#: netbox/dcim/models/sites.py:184 netbox/dcim/models/sites.py:282 msgid "Local facility ID or description" msgstr "ID o descripción de la instalación local" -#: dcim/models/sites.py:195 +#: netbox/dcim/models/sites.py:195 msgid "physical address" msgstr "dirección física" -#: dcim/models/sites.py:198 +#: netbox/dcim/models/sites.py:198 msgid "Physical location of the building" msgstr "Ubicación física del edificio" -#: dcim/models/sites.py:201 +#: netbox/dcim/models/sites.py:201 msgid "shipping address" msgstr "dirección de envío" -#: dcim/models/sites.py:204 +#: netbox/dcim/models/sites.py:204 msgid "If different from the physical address" msgstr "Si es diferente de la dirección física" -#: dcim/models/sites.py:238 +#: netbox/dcim/models/sites.py:238 msgid "site" msgstr "sitio" -#: dcim/models/sites.py:239 +#: netbox/dcim/models/sites.py:239 msgid "sites" msgstr "sitios" -#: dcim/models/sites.py:309 +#: netbox/dcim/models/sites.py:309 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." -#: dcim/models/sites.py:319 +#: netbox/dcim/models/sites.py:319 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." -#: dcim/models/sites.py:322 +#: netbox/dcim/models/sites.py:322 msgid "location" msgstr "ubicación" -#: dcim/models/sites.py:323 +#: netbox/dcim/models/sites.py:323 msgid "locations" msgstr "ubicaciones" -#: dcim/models/sites.py:337 +#: netbox/dcim/models/sites.py:337 #, python-brace-format msgid "Parent location ({parent}) must belong to the same site ({site})." msgstr "" "Ubicación de los padres ({parent}) debe pertenecer al mismo sitio ({site})." -#: dcim/tables/cables.py:55 +#: netbox/dcim/tables/cables.py:55 msgid "Termination A" msgstr "Terminación A" -#: dcim/tables/cables.py:60 +#: netbox/dcim/tables/cables.py:60 msgid "Termination B" msgstr "Terminación B" -#: dcim/tables/cables.py:66 wireless/tables/wirelesslink.py:23 +#: netbox/dcim/tables/cables.py:66 netbox/wireless/tables/wirelesslink.py:23 msgid "Device A" msgstr "Dispositivo A" -#: dcim/tables/cables.py:72 wireless/tables/wirelesslink.py:32 +#: netbox/dcim/tables/cables.py:72 netbox/wireless/tables/wirelesslink.py:32 msgid "Device B" msgstr "Dispositivo B" -#: dcim/tables/cables.py:78 +#: netbox/dcim/tables/cables.py:78 msgid "Location A" msgstr "Ubicación A" -#: dcim/tables/cables.py:84 +#: netbox/dcim/tables/cables.py:84 msgid "Location B" msgstr "Ubicación B" -#: dcim/tables/cables.py:90 +#: netbox/dcim/tables/cables.py:90 msgid "Rack A" msgstr "Bastidor A" -#: dcim/tables/cables.py:96 +#: netbox/dcim/tables/cables.py:96 msgid "Rack B" msgstr "Estante B" -#: dcim/tables/cables.py:102 +#: netbox/dcim/tables/cables.py:102 msgid "Site A" msgstr "Sitio A" -#: dcim/tables/cables.py:108 +#: netbox/dcim/tables/cables.py:108 msgid "Site B" msgstr "Sitio B" -#: dcim/tables/connections.py:31 dcim/tables/connections.py:50 -#: dcim/tables/connections.py:71 -#: templates/dcim/inc/connection_endpoints.html:16 +#: netbox/dcim/tables/connections.py:31 netbox/dcim/tables/connections.py:50 +#: netbox/dcim/tables/connections.py:71 +#: netbox/templates/dcim/inc/connection_endpoints.html:16 msgid "Reachable" msgstr "Accesible" -#: dcim/tables/devices.py:58 dcim/tables/devices.py:106 -#: dcim/tables/racks.py:150 dcim/tables/sites.py:105 dcim/tables/sites.py:148 -#: extras/tables/tables.py:545 netbox/navigation/menu.py:69 -#: netbox/navigation/menu.py:73 netbox/navigation/menu.py:75 -#: virtualization/forms/model_forms.py:122 -#: virtualization/tables/clusters.py:83 virtualization/views.py:206 +#: 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/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 msgid "Devices" msgstr "Dispositivos" -#: dcim/tables/devices.py:63 dcim/tables/devices.py:111 -#: virtualization/tables/clusters.py:88 +#: netbox/dcim/tables/devices.py:63 netbox/dcim/tables/devices.py:111 +#: netbox/virtualization/tables/clusters.py:88 msgid "VMs" msgstr "VM" -#: dcim/tables/devices.py:100 dcim/tables/devices.py:216 -#: extras/forms/model_forms.py:630 templates/dcim/device.html:112 -#: templates/dcim/device/render_config.html:11 -#: templates/dcim/device/render_config.html:14 -#: templates/dcim/devicerole.html:44 templates/dcim/platform.html:41 -#: templates/extras/configtemplate.html:10 -#: templates/virtualization/virtualmachine.html:48 -#: templates/virtualization/virtualmachine/render_config.html:11 -#: templates/virtualization/virtualmachine/render_config.html:14 -#: virtualization/tables/virtualmachines.py:107 +#: netbox/dcim/tables/devices.py:100 netbox/dcim/tables/devices.py:216 +#: 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/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 msgid "Config Template" msgstr "Plantilla de configuración" -#: dcim/tables/devices.py:150 templates/dcim/sitegroup.html:26 +#: netbox/dcim/tables/devices.py:150 netbox/templates/dcim/sitegroup.html:26 msgid "Site Group" msgstr "Grupo de sitios" -#: dcim/tables/devices.py:187 dcim/tables/devices.py:1068 -#: ipam/forms/bulk_import.py:503 ipam/forms/model_forms.py:306 -#: ipam/forms/model_forms.py:315 ipam/tables/ip.py:356 ipam/tables/ip.py:423 -#: ipam/tables/ip.py:446 templates/ipam/ipaddress.html:11 -#: virtualization/tables/virtualmachines.py:95 +#: 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/templates/ipam/ipaddress.html:11 +#: netbox/virtualization/tables/virtualmachines.py:95 msgid "IP Address" msgstr "Dirección IP" -#: dcim/tables/devices.py:191 dcim/tables/devices.py:1072 -#: virtualization/tables/virtualmachines.py:86 +#: netbox/dcim/tables/devices.py:191 netbox/dcim/tables/devices.py:1072 +#: netbox/virtualization/tables/virtualmachines.py:86 msgid "IPv4 Address" msgstr "Dirección IPv4" -#: dcim/tables/devices.py:195 dcim/tables/devices.py:1076 -#: virtualization/tables/virtualmachines.py:90 +#: netbox/dcim/tables/devices.py:195 netbox/dcim/tables/devices.py:1076 +#: netbox/virtualization/tables/virtualmachines.py:90 msgid "IPv6 Address" msgstr "Dirección IPv6" -#: dcim/tables/devices.py:210 +#: netbox/dcim/tables/devices.py:210 msgid "VC Position" msgstr "Posición VC" -#: dcim/tables/devices.py:213 +#: netbox/dcim/tables/devices.py:213 msgid "VC Priority" msgstr "Prioridad VC" -#: dcim/tables/devices.py:220 templates/dcim/device_edit.html:38 -#: templates/dcim/devicebay_populate.html:16 +#: netbox/dcim/tables/devices.py:220 netbox/templates/dcim/device_edit.html:38 +#: netbox/templates/dcim/devicebay_populate.html:16 msgid "Parent Device" msgstr "Dispositivo principal" -#: dcim/tables/devices.py:225 +#: netbox/dcim/tables/devices.py:225 msgid "Position (Device Bay)" msgstr "Posición (bahía de dispositivos)" -#: dcim/tables/devices.py:234 +#: netbox/dcim/tables/devices.py:234 msgid "Console ports" msgstr "Puertos de consola" -#: dcim/tables/devices.py:237 +#: netbox/dcim/tables/devices.py:237 msgid "Console server ports" msgstr "Puertos de servidor de consola" -#: dcim/tables/devices.py:240 +#: netbox/dcim/tables/devices.py:240 msgid "Power ports" msgstr "Puertos de alimentación" -#: dcim/tables/devices.py:243 +#: netbox/dcim/tables/devices.py:243 msgid "Power outlets" msgstr "tomas de corriente" -#: dcim/tables/devices.py:246 dcim/tables/devices.py:1081 -#: dcim/tables/devicetypes.py:128 dcim/views.py:1042 dcim/views.py:1281 -#: dcim/views.py:1977 netbox/navigation/menu.py:94 -#: netbox/navigation/menu.py:250 templates/dcim/device/base.html:37 -#: templates/dcim/device_list.html:43 templates/dcim/devicetype/base.html:34 -#: templates/dcim/inc/moduletype_buttons.html:25 templates/dcim/module.html:34 -#: templates/dcim/virtualdevicecontext.html:61 -#: templates/dcim/virtualdevicecontext.html:81 -#: templates/virtualization/virtualmachine/base.html:27 -#: templates/virtualization/virtualmachine_list.html:14 -#: virtualization/tables/virtualmachines.py:101 virtualization/views.py:366 -#: wireless/tables/wirelesslan.py:55 +#: 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/templates/dcim/device/base.html:37 +#: netbox/templates/dcim/device_list.html:43 +#: netbox/templates/dcim/devicetype/base.html:34 +#: netbox/templates/dcim/inc/moduletype_buttons.html:25 +#: netbox/templates/dcim/module.html:34 +#: netbox/templates/dcim/virtualdevicecontext.html:61 +#: netbox/templates/dcim/virtualdevicecontext.html:81 +#: netbox/templates/virtualization/virtualmachine/base.html:27 +#: netbox/templates/virtualization/virtualmachine_list.html:14 +#: netbox/virtualization/tables/virtualmachines.py:101 +#: netbox/virtualization/views.py:364 netbox/wireless/tables/wirelesslan.py:55 msgid "Interfaces" msgstr "Interfaces" -#: dcim/tables/devices.py:249 +#: netbox/dcim/tables/devices.py:249 msgid "Front ports" msgstr "Puertos frontales" -#: dcim/tables/devices.py:255 +#: netbox/dcim/tables/devices.py:255 msgid "Device bays" msgstr "Compartimentos para dispositivos" -#: dcim/tables/devices.py:258 +#: netbox/dcim/tables/devices.py:258 msgid "Module bays" msgstr "Bahías de módulos" -#: dcim/tables/devices.py:261 +#: netbox/dcim/tables/devices.py:261 msgid "Inventory items" msgstr "Artículos de inventario" -#: dcim/tables/devices.py:305 dcim/tables/modules.py:56 -#: templates/dcim/modulebay.html:17 +#: netbox/dcim/tables/devices.py:305 netbox/dcim/tables/modules.py:56 +#: netbox/templates/dcim/modulebay.html:17 msgid "Module Bay" msgstr "Bahía de módulos" -#: dcim/tables/devices.py:318 dcim/tables/devicetypes.py:47 -#: dcim/tables/devicetypes.py:143 dcim/views.py:1117 dcim/views.py:2075 -#: netbox/navigation/menu.py:103 templates/dcim/device/base.html:52 -#: templates/dcim/device_list.html:71 templates/dcim/devicetype/base.html:49 -#: templates/dcim/inc/panels/inventory_items.html:6 -#: templates/dcim/inventoryitemrole.html:32 +#: netbox/dcim/tables/devices.py:318 netbox/dcim/tables/devicetypes.py:47 +#: netbox/dcim/tables/devicetypes.py:143 netbox/dcim/views.py:1115 +#: netbox/dcim/views.py:2073 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 +#: netbox/templates/dcim/inc/panels/inventory_items.html:6 +#: netbox/templates/dcim/inventoryitemrole.html:32 msgid "Inventory Items" msgstr "Artículos de inventario" -#: dcim/tables/devices.py:333 +#: netbox/dcim/tables/devices.py:333 msgid "Cable Color" msgstr "Color del cable" -#: dcim/tables/devices.py:339 +#: netbox/dcim/tables/devices.py:339 msgid "Link Peers" msgstr "Vincula a tus compañeros" -#: dcim/tables/devices.py:342 +#: netbox/dcim/tables/devices.py:342 msgid "Mark Connected" msgstr "Marcar conectado" -#: dcim/tables/devices.py:461 +#: netbox/dcim/tables/devices.py:461 msgid "Maximum draw (W)" msgstr "Consumo máximo (W)" -#: dcim/tables/devices.py:464 +#: netbox/dcim/tables/devices.py:464 msgid "Allocated draw (W)" msgstr "Sorteo asignado (W)" -#: dcim/tables/devices.py:558 ipam/forms/model_forms.py:701 -#: ipam/tables/fhrp.py:28 ipam/views.py:596 ipam/views.py:696 -#: netbox/navigation/menu.py:158 netbox/navigation/menu.py:160 -#: templates/dcim/interface.html:339 templates/ipam/ipaddress_bulk_add.html:15 -#: templates/ipam/service.html:40 templates/virtualization/vminterface.html:85 -#: vpn/tables/tunnels.py:98 +#: netbox/dcim/tables/devices.py:558 netbox/ipam/forms/model_forms.py: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/templates/ipam/ipaddress_bulk_add.html:15 +#: netbox/templates/ipam/service.html:40 +#: netbox/templates/virtualization/vminterface.html:85 +#: netbox/vpn/tables/tunnels.py:98 msgid "IP Addresses" msgstr "Direcciones IP" -#: dcim/tables/devices.py:564 netbox/navigation/menu.py:202 -#: templates/ipam/inc/panels/fhrp_groups.html:6 +#: netbox/dcim/tables/devices.py:564 netbox/netbox/navigation/menu.py:202 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:6 msgid "FHRP Groups" msgstr "Grupos FHRP" -#: dcim/tables/devices.py:576 templates/dcim/interface.html:89 -#: templates/virtualization/vminterface.html:67 templates/vpn/tunnel.html:18 -#: templates/vpn/tunneltermination.html:13 vpn/forms/bulk_edit.py:76 -#: vpn/forms/bulk_import.py:76 vpn/forms/filtersets.py:42 -#: vpn/forms/filtersets.py:82 vpn/forms/model_forms.py:60 -#: vpn/forms/model_forms.py:145 vpn/tables/tunnels.py:78 +#: netbox/dcim/tables/devices.py:576 netbox/templates/dcim/interface.html:89 +#: netbox/templates/virtualization/vminterface.html:67 +#: netbox/templates/vpn/tunnel.html:18 +#: netbox/templates/vpn/tunneltermination.html:13 +#: netbox/vpn/forms/bulk_edit.py:76 netbox/vpn/forms/bulk_import.py:76 +#: netbox/vpn/forms/filtersets.py:42 netbox/vpn/forms/filtersets.py:82 +#: netbox/vpn/forms/model_forms.py:60 netbox/vpn/forms/model_forms.py:145 +#: netbox/vpn/tables/tunnels.py:78 msgid "Tunnel" msgstr "Túnel" -#: dcim/tables/devices.py:604 dcim/tables/devicetypes.py:227 -#: templates/dcim/interface.html:65 +#: netbox/dcim/tables/devices.py:604 netbox/dcim/tables/devicetypes.py:227 +#: netbox/templates/dcim/interface.html:65 msgid "Management Only" msgstr "Solo administración" -#: dcim/tables/devices.py:623 +#: netbox/dcim/tables/devices.py:623 msgid "VDCs" msgstr "VDC" -#: dcim/tables/devices.py:873 templates/dcim/modulebay.html:53 +#: netbox/dcim/tables/devices.py:873 netbox/templates/dcim/modulebay.html:53 msgid "Installed Module" msgstr "Módulo instalado" -#: dcim/tables/devices.py:876 +#: netbox/dcim/tables/devices.py:876 msgid "Module Serial" msgstr "Serie del módulo" -#: dcim/tables/devices.py:880 +#: netbox/dcim/tables/devices.py:880 msgid "Module Asset Tag" msgstr "Etiqueta de activo del módulo" -#: dcim/tables/devices.py:889 +#: netbox/dcim/tables/devices.py:889 msgid "Module Status" msgstr "Estado del módulo" -#: dcim/tables/devices.py:944 dcim/tables/devicetypes.py:312 -#: templates/dcim/inventoryitem.html:40 +#: netbox/dcim/tables/devices.py:944 netbox/dcim/tables/devicetypes.py:312 +#: netbox/templates/dcim/inventoryitem.html:40 msgid "Component" msgstr "Componente" -#: dcim/tables/devices.py:1000 +#: netbox/dcim/tables/devices.py:1000 msgid "Items" msgstr "Artículos" -#: dcim/tables/devicetypes.py:37 netbox/navigation/menu.py:84 -#: netbox/navigation/menu.py:86 +#: netbox/dcim/tables/devicetypes.py:37 netbox/netbox/navigation/menu.py:84 +#: netbox/netbox/navigation/menu.py:86 msgid "Device Types" msgstr "Tipos de dispositivos" -#: dcim/tables/devicetypes.py:42 netbox/navigation/menu.py:87 +#: netbox/dcim/tables/devicetypes.py:42 netbox/netbox/navigation/menu.py:87 msgid "Module Types" msgstr "Tipos de módulos" -#: dcim/tables/devicetypes.py:52 extras/forms/filtersets.py:371 -#: extras/forms/model_forms.py:537 extras/tables/tables.py:540 -#: netbox/navigation/menu.py:78 +#: 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/netbox/navigation/menu.py:78 msgid "Platforms" msgstr "Plataformas" -#: dcim/tables/devicetypes.py:84 templates/dcim/devicetype.html:29 +#: netbox/dcim/tables/devicetypes.py:84 +#: netbox/templates/dcim/devicetype.html:29 msgid "Default Platform" msgstr "Plataforma predeterminada" -#: dcim/tables/devicetypes.py:88 templates/dcim/devicetype.html:45 +#: netbox/dcim/tables/devicetypes.py:88 +#: netbox/templates/dcim/devicetype.html:45 msgid "Full Depth" msgstr "Profundidad total" -#: dcim/tables/devicetypes.py:98 +#: netbox/dcim/tables/devicetypes.py:98 msgid "U Height" msgstr "Altura en U" -#: dcim/tables/devicetypes.py:113 dcim/tables/modules.py:26 -#: dcim/tables/racks.py:89 +#: netbox/dcim/tables/devicetypes.py:113 netbox/dcim/tables/modules.py:26 +#: netbox/dcim/tables/racks.py:89 msgid "Instances" msgstr "Instancias" -#: dcim/tables/devicetypes.py:116 dcim/views.py:982 dcim/views.py:1221 -#: dcim/views.py:1913 netbox/navigation/menu.py:97 -#: templates/dcim/device/base.html:25 templates/dcim/device_list.html:15 -#: templates/dcim/devicetype/base.html:22 -#: templates/dcim/inc/moduletype_buttons.html:13 templates/dcim/module.html:22 +#: netbox/dcim/tables/devicetypes.py:116 netbox/dcim/views.py:980 +#: netbox/dcim/views.py:1219 netbox/dcim/views.py:1911 +#: netbox/netbox/navigation/menu.py:97 +#: netbox/templates/dcim/device/base.html:25 +#: netbox/templates/dcim/device_list.html:15 +#: netbox/templates/dcim/devicetype/base.html:22 +#: netbox/templates/dcim/inc/moduletype_buttons.html:13 +#: netbox/templates/dcim/module.html:22 msgid "Console Ports" msgstr "Puertos de consola" -#: dcim/tables/devicetypes.py:119 dcim/views.py:997 dcim/views.py:1236 -#: dcim/views.py:1929 netbox/navigation/menu.py:98 -#: templates/dcim/device/base.html:28 templates/dcim/device_list.html:22 -#: templates/dcim/devicetype/base.html:25 -#: templates/dcim/inc/moduletype_buttons.html:16 templates/dcim/module.html:25 +#: netbox/dcim/tables/devicetypes.py:119 netbox/dcim/views.py:995 +#: netbox/dcim/views.py:1234 netbox/dcim/views.py:1927 +#: netbox/netbox/navigation/menu.py:98 +#: netbox/templates/dcim/device/base.html:28 +#: netbox/templates/dcim/device_list.html:22 +#: netbox/templates/dcim/devicetype/base.html:25 +#: netbox/templates/dcim/inc/moduletype_buttons.html:16 +#: netbox/templates/dcim/module.html:25 msgid "Console Server Ports" msgstr "Puertos de servidor de consola" -#: dcim/tables/devicetypes.py:122 dcim/views.py:1012 dcim/views.py:1251 -#: dcim/views.py:1945 netbox/navigation/menu.py:99 -#: templates/dcim/device/base.html:31 templates/dcim/device_list.html:29 -#: templates/dcim/devicetype/base.html:28 -#: templates/dcim/inc/moduletype_buttons.html:19 templates/dcim/module.html:28 +#: netbox/dcim/tables/devicetypes.py:122 netbox/dcim/views.py:1010 +#: netbox/dcim/views.py:1249 netbox/dcim/views.py:1943 +#: netbox/netbox/navigation/menu.py:99 +#: netbox/templates/dcim/device/base.html:31 +#: netbox/templates/dcim/device_list.html:29 +#: netbox/templates/dcim/devicetype/base.html:28 +#: netbox/templates/dcim/inc/moduletype_buttons.html:19 +#: netbox/templates/dcim/module.html:28 msgid "Power Ports" msgstr "Puertos de alimentación" -#: dcim/tables/devicetypes.py:125 dcim/views.py:1027 dcim/views.py:1266 -#: dcim/views.py:1961 netbox/navigation/menu.py:100 -#: templates/dcim/device/base.html:34 templates/dcim/device_list.html:36 -#: templates/dcim/devicetype/base.html:31 -#: templates/dcim/inc/moduletype_buttons.html:22 templates/dcim/module.html:31 +#: netbox/dcim/tables/devicetypes.py:125 netbox/dcim/views.py:1025 +#: netbox/dcim/views.py:1264 netbox/dcim/views.py:1959 +#: netbox/netbox/navigation/menu.py:100 +#: netbox/templates/dcim/device/base.html:34 +#: netbox/templates/dcim/device_list.html:36 +#: netbox/templates/dcim/devicetype/base.html:31 +#: netbox/templates/dcim/inc/moduletype_buttons.html:22 +#: netbox/templates/dcim/module.html:31 msgid "Power Outlets" msgstr "Tomas de corriente" -#: dcim/tables/devicetypes.py:131 dcim/views.py:1057 dcim/views.py:1296 -#: dcim/views.py:1999 netbox/navigation/menu.py:95 -#: templates/dcim/device/base.html:40 templates/dcim/devicetype/base.html:37 -#: templates/dcim/inc/moduletype_buttons.html:28 templates/dcim/module.html:37 +#: netbox/dcim/tables/devicetypes.py:131 netbox/dcim/views.py:1055 +#: netbox/dcim/views.py:1294 netbox/dcim/views.py:1997 +#: netbox/netbox/navigation/menu.py:95 +#: netbox/templates/dcim/device/base.html:40 +#: netbox/templates/dcim/devicetype/base.html:37 +#: netbox/templates/dcim/inc/moduletype_buttons.html:28 +#: netbox/templates/dcim/module.html:37 msgid "Front Ports" msgstr "Puertos frontales" -#: dcim/tables/devicetypes.py:134 dcim/views.py:1072 dcim/views.py:1311 -#: dcim/views.py:2015 netbox/navigation/menu.py:96 -#: templates/dcim/device/base.html:43 templates/dcim/device_list.html:50 -#: templates/dcim/devicetype/base.html:40 -#: templates/dcim/inc/moduletype_buttons.html:31 templates/dcim/module.html:40 +#: netbox/dcim/tables/devicetypes.py:134 netbox/dcim/views.py:1070 +#: netbox/dcim/views.py:1309 netbox/dcim/views.py:2013 +#: netbox/netbox/navigation/menu.py:96 +#: netbox/templates/dcim/device/base.html:43 +#: netbox/templates/dcim/device_list.html:50 +#: netbox/templates/dcim/devicetype/base.html:40 +#: netbox/templates/dcim/inc/moduletype_buttons.html:31 +#: netbox/templates/dcim/module.html:40 msgid "Rear Ports" msgstr "Puertos traseros" -#: dcim/tables/devicetypes.py:137 dcim/views.py:1102 dcim/views.py:2055 -#: netbox/navigation/menu.py:102 templates/dcim/device/base.html:49 -#: templates/dcim/device_list.html:57 templates/dcim/devicetype/base.html:46 +#: netbox/dcim/tables/devicetypes.py:137 netbox/dcim/views.py:1100 +#: netbox/dcim/views.py:2053 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" -#: dcim/tables/devicetypes.py:140 dcim/views.py:1087 dcim/views.py:1326 -#: dcim/views.py:2035 netbox/navigation/menu.py:101 -#: templates/dcim/device/base.html:46 templates/dcim/device_list.html:64 -#: templates/dcim/devicetype/base.html:43 -#: templates/dcim/inc/moduletype_buttons.html:34 templates/dcim/module.html:43 +#: netbox/dcim/tables/devicetypes.py:140 netbox/dcim/views.py:1085 +#: netbox/dcim/views.py:1324 netbox/dcim/views.py:2033 +#: netbox/netbox/navigation/menu.py:101 +#: netbox/templates/dcim/device/base.html:46 +#: netbox/templates/dcim/device_list.html:64 +#: netbox/templates/dcim/devicetype/base.html:43 +#: netbox/templates/dcim/inc/moduletype_buttons.html:34 +#: netbox/templates/dcim/module.html:43 msgid "Module Bays" msgstr "Bahías de módulos" -#: dcim/tables/power.py:36 netbox/navigation/menu.py:297 -#: templates/dcim/powerpanel.html:51 +#: netbox/dcim/tables/power.py:36 netbox/netbox/navigation/menu.py:297 +#: netbox/templates/dcim/powerpanel.html:51 msgid "Power Feeds" msgstr "Fuentes de alimentación" -#: dcim/tables/power.py:80 templates/dcim/powerfeed.html:99 +#: netbox/dcim/tables/power.py:80 netbox/templates/dcim/powerfeed.html:99 msgid "Max Utilization" msgstr "Utilización máxima" -#: dcim/tables/power.py:84 +#: netbox/dcim/tables/power.py:84 msgid "Available Power (VA)" msgstr "Potencia disponible (VA)" -#: dcim/tables/racks.py:30 dcim/tables/sites.py:143 -#: netbox/navigation/menu.py:43 netbox/navigation/menu.py:47 -#: netbox/navigation/menu.py:49 +#: netbox/dcim/tables/racks.py:30 netbox/dcim/tables/sites.py:143 +#: netbox/netbox/navigation/menu.py:43 netbox/netbox/navigation/menu.py:47 +#: netbox/netbox/navigation/menu.py:49 msgid "Racks" msgstr "Bastidores" -#: dcim/tables/racks.py:63 dcim/tables/racks.py:142 -#: templates/dcim/device.html:318 -#: templates/dcim/inc/panels/racktype_dimensions.html:14 +#: netbox/dcim/tables/racks.py:63 netbox/dcim/tables/racks.py:142 +#: netbox/templates/dcim/device.html:318 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:14 msgid "Height" msgstr "Altura" -#: dcim/tables/racks.py:67 dcim/tables/racks.py:165 -#: templates/dcim/inc/panels/racktype_dimensions.html:18 +#: netbox/dcim/tables/racks.py:67 netbox/dcim/tables/racks.py:165 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:18 msgid "Outer Width" msgstr "Anchura exterior" -#: dcim/tables/racks.py:71 dcim/tables/racks.py:169 -#: templates/dcim/inc/panels/racktype_dimensions.html:28 +#: netbox/dcim/tables/racks.py:71 netbox/dcim/tables/racks.py:169 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:28 msgid "Outer Depth" msgstr "Profundidad exterior" -#: dcim/tables/racks.py:79 dcim/tables/racks.py:177 +#: netbox/dcim/tables/racks.py:79 netbox/dcim/tables/racks.py:177 msgid "Max Weight" msgstr "Peso máximo" -#: dcim/tables/racks.py:154 +#: netbox/dcim/tables/racks.py:154 msgid "Space" msgstr "Espacio" -#: dcim/tables/sites.py:30 dcim/tables/sites.py:57 -#: extras/forms/filtersets.py:351 extras/forms/model_forms.py:517 -#: ipam/forms/bulk_edit.py:131 ipam/forms/model_forms.py:153 -#: ipam/tables/asn.py:66 netbox/navigation/menu.py:15 -#: netbox/navigation/menu.py:17 +#: netbox/dcim/tables/sites.py:30 netbox/dcim/tables/sites.py:57 +#: netbox/extras/forms/filtersets.py: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/netbox/navigation/menu.py:15 netbox/netbox/navigation/menu.py:17 msgid "Sites" msgstr "Sitios" -#: dcim/tests/test_api.py:47 +#: netbox/dcim/tests/test_api.py:47 msgid "Test case must set peer_termination_type" msgstr "El caso de prueba debe establecer peer_termination_type" -#: dcim/views.py:140 +#: netbox/dcim/views.py:138 #, python-brace-format msgid "Disconnected {count} {type}" msgstr "Desconectado {count} {type}" -#: dcim/views.py:740 netbox/navigation/menu.py:51 +#: netbox/dcim/views.py:738 netbox/netbox/navigation/menu.py:51 msgid "Reservations" msgstr "Reservaciones" -#: dcim/views.py:759 templates/dcim/location.html:90 -#: templates/dcim/site.html:140 +#: netbox/dcim/views.py:757 netbox/templates/dcim/location.html:90 +#: netbox/templates/dcim/site.html:140 msgid "Non-Racked Devices" msgstr "Dispositivos no rakeados" -#: dcim/views.py:2088 extras/forms/model_forms.py:577 -#: templates/extras/configcontext.html:10 -#: virtualization/forms/model_forms.py:225 virtualization/views.py:407 +#: netbox/dcim/views.py:2086 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 msgid "Config Context" msgstr "Contexto de configuración" -#: dcim/views.py:2098 virtualization/views.py:417 +#: netbox/dcim/views.py:2096 netbox/virtualization/views.py:415 msgid "Render Config" msgstr "Configuración de renderizado" -#: dcim/views.py:2131 virtualization/views.py:450 +#: 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}" -#: dcim/views.py:2149 extras/tables/tables.py:550 -#: netbox/navigation/menu.py:247 netbox/navigation/menu.py:249 -#: virtualization/views.py:180 +#: 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 msgid "Virtual Machines" msgstr "Máquinas virtuales" -#: dcim/views.py:2897 +#: netbox/dcim/views.py:2907 #, python-brace-format msgid "Installed device {device} in bay {device_bay}." msgstr "Dispositivo instalado {device} en la bahía {device_bay}." -#: dcim/views.py:2938 +#: netbox/dcim/views.py:2948 #, python-brace-format msgid "Removed device {device} from bay {device_bay}." msgstr "Dispositivo eliminado {device} desde la bahía {device_bay}." -#: dcim/views.py:3044 ipam/tables/ip.py:234 +#: netbox/dcim/views.py:3054 netbox/ipam/tables/ip.py:234 msgid "Children" msgstr "Niños" -#: dcim/views.py:3510 +#: netbox/dcim/views.py:3520 #, python-brace-format msgid "Added member {device}" msgstr "Miembro agregado {device}" -#: dcim/views.py:3557 +#: netbox/dcim/views.py:3567 #, 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." -#: dcim/views.py:3570 +#: netbox/dcim/views.py:3580 #, python-brace-format msgid "Removed {device} from virtual chassis {chassis}" msgstr "Eliminado {device} desde un chasis virtual {chassis}" -#: extras/api/customfields.py:89 +#: netbox/extras/api/customfields.py:89 #, python-brace-format msgid "Unknown related object(s): {name}" msgstr "Objeto (s) relacionado (s) desconocido (s): {name}" -#: extras/api/serializers_/customfields.py:73 +#: netbox/extras/api/serializers_/customfields.py:73 msgid "Changing the type of custom fields is not supported." msgstr "No se admite cambiar el tipo de campos personalizados." -#: extras/api/serializers_/scripts.py:70 extras/api/serializers_/scripts.py:75 +#: netbox/extras/api/serializers_/scripts.py:70 +#: netbox/extras/api/serializers_/scripts.py:75 msgid "Scheduling is not enabled for this script." msgstr "La programación no está habilitada para este script." -#: extras/choices.py:30 extras/forms/misc.py:14 +#: netbox/extras/choices.py:30 netbox/extras/forms/misc.py:14 msgid "Text" msgstr "Texto" -#: extras/choices.py:31 +#: netbox/extras/choices.py:31 msgid "Text (long)" msgstr "Texto (largo)" -#: extras/choices.py:32 +#: netbox/extras/choices.py:32 msgid "Integer" msgstr "Número entero" -#: extras/choices.py:33 +#: netbox/extras/choices.py:33 msgid "Decimal" msgstr "Decimal" -#: extras/choices.py:34 +#: netbox/extras/choices.py:34 msgid "Boolean (true/false)" msgstr "Booleano (verdadero o falso)" -#: extras/choices.py:35 +#: netbox/extras/choices.py:35 msgid "Date" msgstr "Fecha" -#: extras/choices.py:36 +#: netbox/extras/choices.py:36 msgid "Date & time" msgstr "Fecha y hora" -#: extras/choices.py:38 +#: netbox/extras/choices.py:38 msgid "JSON" msgstr "JSON" -#: extras/choices.py:39 +#: netbox/extras/choices.py:39 msgid "Selection" msgstr "Selección" -#: extras/choices.py:40 +#: netbox/extras/choices.py:40 msgid "Multiple selection" msgstr "Selección múltiple" -#: extras/choices.py:42 +#: netbox/extras/choices.py:42 msgid "Multiple objects" msgstr "Objetos múltiples" -#: extras/choices.py:53 netbox/preferences.py:21 -#: templates/extras/customfield.html:78 vpn/choices.py:20 -#: wireless/choices.py:27 +#: netbox/extras/choices.py:53 netbox/netbox/preferences.py:21 +#: netbox/templates/extras/customfield.html:78 netbox/vpn/choices.py:20 +#: netbox/wireless/choices.py:27 msgid "Disabled" msgstr "Discapacitado" -#: extras/choices.py:54 +#: netbox/extras/choices.py:54 msgid "Loose" msgstr "Suelto" -#: extras/choices.py:55 +#: netbox/extras/choices.py:55 msgid "Exact" msgstr "Exacto" -#: extras/choices.py:66 +#: netbox/extras/choices.py:66 msgid "Always" msgstr "Siempre" -#: extras/choices.py:67 +#: netbox/extras/choices.py:67 msgid "If set" msgstr "Si está configurado" -#: extras/choices.py:68 extras/choices.py:81 +#: netbox/extras/choices.py:68 netbox/extras/choices.py:81 msgid "Hidden" msgstr "Oculto" -#: extras/choices.py:79 +#: netbox/extras/choices.py:79 msgid "Yes" msgstr "Sí" -#: extras/choices.py:80 +#: netbox/extras/choices.py:80 msgid "No" msgstr "No" -#: extras/choices.py:108 templates/tenancy/contact.html:57 -#: tenancy/forms/bulk_edit.py:118 wireless/forms/model_forms.py:168 +#: 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 msgid "Link" msgstr "Enlace" -#: extras/choices.py:124 +#: netbox/extras/choices.py:124 msgid "Newest" msgstr "El más reciente" -#: extras/choices.py:125 +#: netbox/extras/choices.py:125 msgid "Oldest" msgstr "El más antiguo" -#: extras/choices.py:126 +#: netbox/extras/choices.py:126 msgid "Alphabetical (A-Z)" msgstr "Alfabético (A-Z)" -#: extras/choices.py:127 +#: netbox/extras/choices.py:127 msgid "Alphabetical (Z-A)" msgstr "Alfabético (Z-A)" -#: extras/choices.py:144 extras/choices.py:167 +#: netbox/extras/choices.py:144 netbox/extras/choices.py:167 msgid "Info" msgstr "Información" -#: extras/choices.py:145 extras/choices.py:168 +#: netbox/extras/choices.py:145 netbox/extras/choices.py:168 msgid "Success" msgstr "Éxito" -#: extras/choices.py:146 extras/choices.py:169 +#: netbox/extras/choices.py:146 netbox/extras/choices.py:169 msgid "Warning" msgstr "Advertencia" -#: extras/choices.py:147 +#: netbox/extras/choices.py:147 msgid "Danger" msgstr "Peligro" -#: extras/choices.py:165 +#: netbox/extras/choices.py:165 msgid "Debug" msgstr "Depurar" -#: extras/choices.py:166 netbox/choices.py:101 +#: netbox/extras/choices.py:166 netbox/netbox/choices.py:101 msgid "Default" msgstr "Predeterminado" -#: extras/choices.py:170 +#: netbox/extras/choices.py:170 msgid "Failure" msgstr "Fracaso" -#: extras/choices.py:186 +#: netbox/extras/choices.py:186 msgid "Hourly" msgstr "Cada hora" -#: extras/choices.py:187 +#: netbox/extras/choices.py:187 msgid "12 hours" msgstr "12 horas" -#: extras/choices.py:188 +#: netbox/extras/choices.py:188 msgid "Daily" msgstr "Diariamente" -#: extras/choices.py:189 +#: netbox/extras/choices.py:189 msgid "Weekly" msgstr "Semanal" -#: extras/choices.py:190 +#: netbox/extras/choices.py:190 msgid "30 days" msgstr "30 días" -#: extras/choices.py:226 templates/dcim/virtualchassis_edit.html:107 -#: templates/generic/bulk_add_component.html:68 -#: templates/generic/object_edit.html:47 templates/generic/object_edit.html:80 -#: templates/ipam/inc/ipaddress_edit_header.html:7 +#: netbox/extras/choices.py:226 +#: 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/ipam/inc/ipaddress_edit_header.html:7 msgid "Create" msgstr "Crear" -#: extras/choices.py:227 +#: netbox/extras/choices.py:227 msgid "Update" msgstr "Actualización" -#: extras/choices.py:228 templates/circuits/inc/circuit_termination.html:23 -#: templates/dcim/inc/panels/inventory_items.html:37 -#: templates/dcim/powerpanel.html:66 templates/extras/script_list.html:35 -#: templates/generic/bulk_delete.html:20 templates/generic/bulk_delete.html:66 -#: templates/generic/object_delete.html:19 templates/htmx/delete_form.html:57 -#: templates/ipam/inc/panels/fhrp_groups.html:48 -#: templates/users/objectpermission.html:46 -#: utilities/templates/buttons/delete.html:11 +#: netbox/extras/choices.py:228 +#: netbox/templates/circuits/inc/circuit_termination.html:23 +#: netbox/templates/dcim/inc/panels/inventory_items.html:37 +#: netbox/templates/dcim/powerpanel.html:66 +#: netbox/templates/extras/script_list.html:35 +#: netbox/templates/generic/bulk_delete.html:20 +#: netbox/templates/generic/bulk_delete.html:66 +#: netbox/templates/generic/object_delete.html:19 +#: netbox/templates/htmx/delete_form.html:57 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:48 +#: netbox/templates/users/objectpermission.html:46 +#: netbox/utilities/templates/buttons/delete.html:11 msgid "Delete" msgstr "Eliminar" -#: extras/choices.py:252 netbox/choices.py:57 netbox/choices.py:102 +#: netbox/extras/choices.py:252 netbox/netbox/choices.py:57 +#: netbox/netbox/choices.py:102 msgid "Blue" msgstr "Azul" -#: extras/choices.py:253 netbox/choices.py:56 netbox/choices.py:103 +#: netbox/extras/choices.py:253 netbox/netbox/choices.py:56 +#: netbox/netbox/choices.py:103 msgid "Indigo" msgstr "añil" -#: extras/choices.py:254 netbox/choices.py:54 netbox/choices.py:104 +#: netbox/extras/choices.py:254 netbox/netbox/choices.py:54 +#: netbox/netbox/choices.py:104 msgid "Purple" msgstr "Morado" -#: extras/choices.py:255 netbox/choices.py:51 netbox/choices.py:105 +#: netbox/extras/choices.py:255 netbox/netbox/choices.py:51 +#: netbox/netbox/choices.py:105 msgid "Pink" msgstr "Rosado" -#: extras/choices.py:256 netbox/choices.py:50 netbox/choices.py:106 +#: netbox/extras/choices.py:256 netbox/netbox/choices.py:50 +#: netbox/netbox/choices.py:106 msgid "Red" msgstr "rojo" -#: extras/choices.py:257 netbox/choices.py:68 netbox/choices.py:107 +#: netbox/extras/choices.py:257 netbox/netbox/choices.py:68 +#: netbox/netbox/choices.py:107 msgid "Orange" msgstr "naranja" -#: extras/choices.py:258 netbox/choices.py:66 netbox/choices.py:108 +#: netbox/extras/choices.py:258 netbox/netbox/choices.py:66 +#: netbox/netbox/choices.py:108 msgid "Yellow" msgstr "Amarillo" -#: extras/choices.py:259 netbox/choices.py:63 netbox/choices.py:109 +#: netbox/extras/choices.py:259 netbox/netbox/choices.py:63 +#: netbox/netbox/choices.py:109 msgid "Green" msgstr "Verde" -#: extras/choices.py:260 netbox/choices.py:60 netbox/choices.py:110 +#: netbox/extras/choices.py:260 netbox/netbox/choices.py:60 +#: netbox/netbox/choices.py:110 msgid "Teal" msgstr "Verde azulado" -#: extras/choices.py:261 netbox/choices.py:59 netbox/choices.py:111 +#: netbox/extras/choices.py:261 netbox/netbox/choices.py:59 +#: netbox/netbox/choices.py:111 msgid "Cyan" msgstr "Cian" -#: extras/choices.py:262 netbox/choices.py:112 +#: netbox/extras/choices.py:262 netbox/netbox/choices.py:112 msgid "Gray" msgstr "Gris" -#: extras/choices.py:263 netbox/choices.py:74 netbox/choices.py:113 +#: netbox/extras/choices.py:263 netbox/netbox/choices.py:74 +#: netbox/netbox/choices.py:113 msgid "Black" msgstr "Negro" -#: extras/choices.py:264 netbox/choices.py:75 netbox/choices.py:114 +#: netbox/extras/choices.py:264 netbox/netbox/choices.py:75 +#: netbox/netbox/choices.py:114 msgid "White" msgstr "blanco" -#: extras/choices.py:279 extras/forms/model_forms.py:353 -#: extras/forms/model_forms.py:430 templates/extras/webhook.html:10 +#: netbox/extras/choices.py:279 netbox/extras/forms/model_forms.py:353 +#: netbox/extras/forms/model_forms.py:430 +#: netbox/templates/extras/webhook.html:10 msgid "Webhook" msgstr "Webhook" -#: extras/choices.py:280 extras/forms/model_forms.py:418 -#: templates/extras/script/base.html:29 +#: netbox/extras/choices.py:280 netbox/extras/forms/model_forms.py:418 +#: netbox/templates/extras/script/base.html:29 msgid "Script" msgstr "Guión" -#: extras/choices.py:281 +#: netbox/extras/choices.py:281 msgid "Notification" msgstr "Notificación" -#: extras/conditions.py:54 +#: netbox/extras/conditions.py:54 #, python-brace-format msgid "Unknown operator: {op}. Must be one of: {operators}" msgstr "Operador desconocido: {op}. Debe ser uno de: {operators}" -#: extras/conditions.py:58 +#: netbox/extras/conditions.py:58 #, python-brace-format msgid "Unsupported value type: {value}" msgstr "Tipo de valor no admitido: {value}" -#: extras/conditions.py:60 +#: netbox/extras/conditions.py:60 #, python-brace-format msgid "Invalid type for {op} operation: {value}" msgstr "Tipo no válido para {op} operación: {value}" -#: extras/conditions.py:137 +#: netbox/extras/conditions.py:137 #, python-brace-format msgid "Ruleset must be a dictionary, not {ruleset}." msgstr "El conjunto de reglas debe ser un diccionario, no {ruleset}." -#: extras/conditions.py:142 +#: netbox/extras/conditions.py:142 msgid "Invalid logic type: must be 'AND' or 'OR'. Please check documentation." msgstr "" "Tipo de lógica no válido: debe ser «AND» u «OR». Consulte la documentación." -#: extras/conditions.py:154 +#: netbox/extras/conditions.py:154 msgid "Incorrect key(s) informed. Please check documentation." msgstr "" "Se informó de claves incorrectas. Por favor, consulte la documentación." -#: extras/dashboard/forms.py:38 +#: netbox/extras/dashboard/forms.py:38 msgid "Widget type" msgstr "Tipo de widget" -#: extras/dashboard/utils.py:36 +#: netbox/extras/dashboard/utils.py:36 #, python-brace-format msgid "Unregistered widget class: {name}" msgstr "Clase de widget no registrada: {name}" -#: extras/dashboard/widgets.py:125 +#: netbox/extras/dashboard/widgets.py:125 #, python-brace-format msgid "{class_name} must define a render() method." msgstr "{class_name} debe definir un método render ()." -#: extras/dashboard/widgets.py:144 +#: netbox/extras/dashboard/widgets.py:144 msgid "Note" msgstr "Nota" -#: extras/dashboard/widgets.py:145 +#: netbox/extras/dashboard/widgets.py:145 msgid "Display some arbitrary custom content. Markdown is supported." msgstr "Muestra contenido personalizado arbitrario. Markdown es compatible." -#: extras/dashboard/widgets.py:158 +#: netbox/extras/dashboard/widgets.py:158 msgid "Object Counts" msgstr "Recuentos de objetos" -#: extras/dashboard/widgets.py:159 +#: netbox/extras/dashboard/widgets.py:159 msgid "" "Display a set of NetBox models and the number of objects created for each " "type." @@ -6975,270 +7515,292 @@ msgstr "" "Muestre un conjunto de modelos de NetBox y el número de objetos creados para" " cada tipo." -#: extras/dashboard/widgets.py:169 +#: netbox/extras/dashboard/widgets.py:169 msgid "Filters to apply when counting the number of objects" msgstr "Filtros para aplicar al contar el número de objetos" -#: extras/dashboard/widgets.py:177 +#: netbox/extras/dashboard/widgets.py:177 msgid "Invalid format. Object filters must be passed as a dictionary." msgstr "" "Formato no válido. Los filtros de objetos se deben pasar como un " "diccionario." -#: extras/dashboard/widgets.py:208 +#: netbox/extras/dashboard/widgets.py:208 msgid "Object List" msgstr "Lista de objetos" -#: extras/dashboard/widgets.py:209 +#: netbox/extras/dashboard/widgets.py:209 msgid "Display an arbitrary list of objects." msgstr "Muestra una lista arbitraria de objetos." -#: extras/dashboard/widgets.py:222 +#: netbox/extras/dashboard/widgets.py:222 msgid "The default number of objects to display" msgstr "El número predeterminado de objetos que se van a mostrar" -#: extras/dashboard/widgets.py:234 +#: netbox/extras/dashboard/widgets.py:234 msgid "Invalid format. URL parameters must be passed as a dictionary." msgstr "" "Formato no válido. Los parámetros de URL se deben pasar como un diccionario." -#: extras/dashboard/widgets.py:274 +#: netbox/extras/dashboard/widgets.py:274 msgid "RSS Feed" msgstr "Fuente RSS" -#: extras/dashboard/widgets.py:279 +#: netbox/extras/dashboard/widgets.py:279 msgid "Embed an RSS feed from an external website." msgstr "Inserte una fuente RSS desde un sitio web externo." -#: extras/dashboard/widgets.py:286 +#: netbox/extras/dashboard/widgets.py:286 msgid "Feed URL" msgstr "URL del feed" -#: extras/dashboard/widgets.py:291 +#: netbox/extras/dashboard/widgets.py:291 msgid "The maximum number of objects to display" msgstr "El número máximo de objetos que se van a mostrar" -#: extras/dashboard/widgets.py:296 +#: netbox/extras/dashboard/widgets.py:296 msgid "How long to stored the cached content (in seconds)" msgstr "Cuánto tiempo se debe almacenar el contenido en caché (en segundos)" -#: extras/dashboard/widgets.py:348 templates/account/base.html:10 -#: templates/account/bookmarks.html:7 templates/inc/user_menu.html:48 +#: netbox/extras/dashboard/widgets.py:348 +#: netbox/templates/account/base.html:10 +#: netbox/templates/account/bookmarks.html:7 +#: netbox/templates/inc/user_menu.html:48 msgid "Bookmarks" msgstr "Marcadores" -#: extras/dashboard/widgets.py:352 +#: netbox/extras/dashboard/widgets.py:352 msgid "Show your personal bookmarks" msgstr "Muestra tus marcadores personales" -#: extras/events.py:147 +#: netbox/extras/events.py:147 #, 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}" -#: extras/events.py:192 +#: netbox/extras/events.py:192 #, python-brace-format msgid "Cannot import events pipeline {name} error: {error}" msgstr "No se puede importar la canalización de eventos {name} error: {error}" -#: extras/filtersets.py:45 +#: netbox/extras/filtersets.py:45 msgid "Script module (ID)" msgstr "Módulo de script (ID)" -#: extras/filtersets.py:254 extras/filtersets.py:637 extras/filtersets.py:665 +#: netbox/extras/filtersets.py:254 netbox/extras/filtersets.py:637 +#: netbox/extras/filtersets.py:665 msgid "Data file (ID)" msgstr "Archivo de datos (ID)" -#: extras/filtersets.py:370 users/filtersets.py:68 users/filtersets.py:191 +#: netbox/extras/filtersets.py:370 netbox/users/filtersets.py:68 +#: netbox/users/filtersets.py:191 msgid "Group (name)" msgstr "Grupo (nombre)" -#: extras/filtersets.py:574 virtualization/forms/filtersets.py:118 +#: netbox/extras/filtersets.py:574 +#: netbox/virtualization/forms/filtersets.py:118 msgid "Cluster type" msgstr "Tipo de clúster" -#: extras/filtersets.py:580 virtualization/filtersets.py:95 -#: virtualization/filtersets.py:147 +#: netbox/extras/filtersets.py:580 netbox/virtualization/filtersets.py:95 +#: netbox/virtualization/filtersets.py:147 msgid "Cluster type (slug)" msgstr "Tipo de clúster (babosa)" -#: extras/filtersets.py:601 tenancy/forms/forms.py:16 -#: tenancy/forms/forms.py:39 +#: netbox/extras/filtersets.py:601 netbox/tenancy/forms/forms.py:16 +#: netbox/tenancy/forms/forms.py:39 msgid "Tenant group" msgstr "Grupo de inquilinos" -#: extras/filtersets.py:607 tenancy/filtersets.py:188 -#: tenancy/filtersets.py:208 +#: netbox/extras/filtersets.py:607 netbox/tenancy/filtersets.py:188 +#: netbox/tenancy/filtersets.py:208 msgid "Tenant group (slug)" msgstr "Grupo de inquilinos (slug)" -#: extras/filtersets.py:623 extras/forms/model_forms.py:495 -#: templates/extras/tag.html:11 +#: netbox/extras/filtersets.py:623 netbox/extras/forms/model_forms.py:495 +#: netbox/templates/extras/tag.html:11 msgid "Tag" msgstr "Etiqueta" -#: extras/filtersets.py:629 +#: netbox/extras/filtersets.py:629 msgid "Tag (slug)" msgstr "Etiqueta (babosa)" -#: extras/filtersets.py:689 extras/forms/filtersets.py:429 +#: netbox/extras/filtersets.py:689 netbox/extras/forms/filtersets.py:429 msgid "Has local config context data" msgstr "Tiene datos de contexto de configuración local" -#: extras/forms/bulk_edit.py:35 extras/forms/filtersets.py:60 +#: netbox/extras/forms/bulk_edit.py:35 netbox/extras/forms/filtersets.py:60 msgid "Group name" msgstr "Nombre del grupo" -#: extras/forms/bulk_edit.py:43 extras/forms/filtersets.py:68 -#: extras/tables/tables.py:65 templates/extras/customfield.html:38 -#: templates/generic/bulk_import.html:118 +#: netbox/extras/forms/bulk_edit.py:43 netbox/extras/forms/filtersets.py:68 +#: netbox/extras/tables/tables.py:65 +#: netbox/templates/extras/customfield.html:38 +#: netbox/templates/generic/bulk_import.html:118 msgid "Required" msgstr "Obligatorio" -#: extras/forms/bulk_edit.py:48 extras/forms/filtersets.py:75 +#: netbox/extras/forms/bulk_edit.py:48 netbox/extras/forms/filtersets.py:75 msgid "Must be unique" msgstr "Debe ser único" -#: extras/forms/bulk_edit.py:61 extras/forms/bulk_import.py:60 -#: extras/forms/filtersets.py:89 extras/models/customfields.py:209 +#: netbox/extras/forms/bulk_edit.py:61 netbox/extras/forms/bulk_import.py:60 +#: netbox/extras/forms/filtersets.py:89 +#: netbox/extras/models/customfields.py:209 msgid "UI visible" msgstr "Interfaz de usuario visible" -#: extras/forms/bulk_edit.py:66 extras/forms/bulk_import.py:66 -#: extras/forms/filtersets.py:94 extras/models/customfields.py:216 +#: netbox/extras/forms/bulk_edit.py:66 netbox/extras/forms/bulk_import.py:66 +#: netbox/extras/forms/filtersets.py:94 +#: netbox/extras/models/customfields.py:216 msgid "UI editable" msgstr "Interfaz de usuario editable" -#: extras/forms/bulk_edit.py:71 extras/forms/filtersets.py:97 +#: netbox/extras/forms/bulk_edit.py:71 netbox/extras/forms/filtersets.py:97 msgid "Is cloneable" msgstr "Es clonable" -#: extras/forms/bulk_edit.py:76 extras/forms/filtersets.py:104 +#: netbox/extras/forms/bulk_edit.py:76 netbox/extras/forms/filtersets.py:104 msgid "Minimum value" msgstr "Valor mínimo" -#: extras/forms/bulk_edit.py:80 extras/forms/filtersets.py:108 +#: netbox/extras/forms/bulk_edit.py:80 netbox/extras/forms/filtersets.py:108 msgid "Maximum value" msgstr "Valor máximo" -#: extras/forms/bulk_edit.py:84 extras/forms/filtersets.py:112 +#: netbox/extras/forms/bulk_edit.py:84 netbox/extras/forms/filtersets.py:112 msgid "Validation regex" msgstr "Regex de validación" -#: extras/forms/bulk_edit.py:91 extras/forms/filtersets.py:46 -#: extras/forms/model_forms.py:76 templates/extras/customfield.html:70 +#: netbox/extras/forms/bulk_edit.py:91 netbox/extras/forms/filtersets.py:46 +#: netbox/extras/forms/model_forms.py:76 +#: netbox/templates/extras/customfield.html:70 msgid "Behavior" msgstr "Comportamiento" -#: extras/forms/bulk_edit.py:128 extras/forms/filtersets.py:149 +#: netbox/extras/forms/bulk_edit.py:128 netbox/extras/forms/filtersets.py:149 msgid "New window" msgstr "Ventana nueva" -#: extras/forms/bulk_edit.py:137 +#: netbox/extras/forms/bulk_edit.py:137 msgid "Button class" msgstr "Clase de botones" -#: extras/forms/bulk_edit.py:154 extras/forms/filtersets.py:187 -#: extras/models/models.py:409 +#: netbox/extras/forms/bulk_edit.py:154 netbox/extras/forms/filtersets.py:187 +#: netbox/extras/models/models.py:409 msgid "MIME type" msgstr "Tipo MIME" -#: extras/forms/bulk_edit.py:159 extras/forms/filtersets.py:190 +#: netbox/extras/forms/bulk_edit.py:159 netbox/extras/forms/filtersets.py:190 msgid "File extension" msgstr "Extensión de archivo" -#: extras/forms/bulk_edit.py:164 extras/forms/filtersets.py:194 +#: netbox/extras/forms/bulk_edit.py:164 netbox/extras/forms/filtersets.py:194 msgid "As attachment" msgstr "Como archivo adjunto" -#: extras/forms/bulk_edit.py:192 extras/forms/filtersets.py:236 -#: extras/tables/tables.py:256 templates/extras/savedfilter.html:29 +#: netbox/extras/forms/bulk_edit.py:192 netbox/extras/forms/filtersets.py:236 +#: netbox/extras/tables/tables.py:256 +#: netbox/templates/extras/savedfilter.html:29 msgid "Shared" msgstr "Compartido" -#: extras/forms/bulk_edit.py:215 extras/forms/filtersets.py:265 -#: extras/models/models.py:174 +#: netbox/extras/forms/bulk_edit.py:215 netbox/extras/forms/filtersets.py:265 +#: netbox/extras/models/models.py:174 msgid "HTTP method" msgstr "Método HTTP" -#: extras/forms/bulk_edit.py:219 extras/forms/filtersets.py:259 -#: templates/extras/webhook.html:30 +#: netbox/extras/forms/bulk_edit.py:219 netbox/extras/forms/filtersets.py:259 +#: netbox/templates/extras/webhook.html:30 msgid "Payload URL" msgstr "URL de carga" -#: extras/forms/bulk_edit.py:224 extras/models/models.py:214 +#: netbox/extras/forms/bulk_edit.py:224 netbox/extras/models/models.py:214 msgid "SSL verification" msgstr "Verificación SSL" -#: extras/forms/bulk_edit.py:227 templates/extras/webhook.html:38 +#: netbox/extras/forms/bulk_edit.py:227 +#: netbox/templates/extras/webhook.html:38 msgid "Secret" msgstr "Secreto" -#: extras/forms/bulk_edit.py:232 +#: netbox/extras/forms/bulk_edit.py:232 msgid "CA file path" msgstr "Ruta del archivo CA" -#: extras/forms/bulk_edit.py:253 extras/forms/bulk_import.py:192 -#: extras/forms/model_forms.py:377 +#: netbox/extras/forms/bulk_edit.py:253 netbox/extras/forms/bulk_import.py:192 +#: netbox/extras/forms/model_forms.py:377 msgid "Event types" msgstr "Tipos de eventos" -#: extras/forms/bulk_edit.py:293 +#: netbox/extras/forms/bulk_edit.py:293 msgid "Is active" msgstr "Está activo" -#: extras/forms/bulk_import.py:37 extras/forms/bulk_import.py:118 -#: extras/forms/bulk_import.py:139 extras/forms/bulk_import.py:162 -#: extras/forms/bulk_import.py:186 extras/forms/filtersets.py:137 -#: extras/forms/filtersets.py:224 extras/forms/model_forms.py:47 -#: extras/forms/model_forms.py:205 extras/forms/model_forms.py:237 -#: extras/forms/model_forms.py:278 extras/forms/model_forms.py:372 -#: extras/forms/model_forms.py:489 users/forms/model_forms.py:276 +#: netbox/extras/forms/bulk_import.py:37 +#: netbox/extras/forms/bulk_import.py:118 +#: 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/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/users/forms/model_forms.py:276 msgid "Object types" msgstr "Tipos de objetos" -#: extras/forms/bulk_import.py:39 extras/forms/bulk_import.py:120 -#: extras/forms/bulk_import.py:141 extras/forms/bulk_import.py:164 -#: extras/forms/bulk_import.py:188 tenancy/forms/bulk_import.py:96 +#: netbox/extras/forms/bulk_import.py:39 +#: netbox/extras/forms/bulk_import.py:120 +#: netbox/extras/forms/bulk_import.py:141 +#: netbox/extras/forms/bulk_import.py:164 +#: netbox/extras/forms/bulk_import.py:188 +#: netbox/tenancy/forms/bulk_import.py:96 msgid "One or more assigned object types" msgstr "Uno o más tipos de objetos asignados" -#: extras/forms/bulk_import.py:44 +#: netbox/extras/forms/bulk_import.py:44 msgid "Field data type (e.g. text, integer, etc.)" msgstr "Tipo de datos de campo (por ejemplo, texto, entero, etc.)" -#: extras/forms/bulk_import.py:47 extras/forms/filtersets.py:208 -#: extras/forms/filtersets.py:281 extras/forms/model_forms.py:304 -#: extras/forms/model_forms.py:341 tenancy/forms/filtersets.py:92 +#: 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/tenancy/forms/filtersets.py:92 msgid "Object type" msgstr "Tipo de objeto" -#: extras/forms/bulk_import.py:50 +#: netbox/extras/forms/bulk_import.py:50 msgid "Object type (for object or multi-object fields)" msgstr "Tipo de objeto (para campos de objetos o de varios objetos)" -#: extras/forms/bulk_import.py:53 extras/forms/filtersets.py:84 +#: netbox/extras/forms/bulk_import.py:53 netbox/extras/forms/filtersets.py:84 msgid "Choice set" msgstr "Set de elección" -#: extras/forms/bulk_import.py:57 +#: netbox/extras/forms/bulk_import.py:57 msgid "Choice set (for selection fields)" msgstr "Conjunto de opciones (para campos de selección)" -#: extras/forms/bulk_import.py:63 +#: netbox/extras/forms/bulk_import.py:63 msgid "Whether the custom field is displayed in the UI" msgstr "Si el campo personalizado se muestra en la interfaz de usuario" -#: extras/forms/bulk_import.py:69 +#: netbox/extras/forms/bulk_import.py:69 msgid "Whether the custom field is editable in the UI" msgstr "Si el campo personalizado se puede editar en la interfaz de usuario" -#: extras/forms/bulk_import.py:85 +#: netbox/extras/forms/bulk_import.py:85 msgid "The base set of predefined choices to use (if any)" msgstr "" "El conjunto base de opciones predefinidas que se van a utilizar (si las hay)" -#: extras/forms/bulk_import.py:91 +#: netbox/extras/forms/bulk_import.py:91 msgid "" "Quoted string of comma-separated field choices with optional labels " "separated by colon: \"choice1:First Choice,choice2:Second Choice\"" @@ -7247,184 +7809,200 @@ msgstr "" " opcionales separadas por dos puntos: «Choice1:First Choice, Choice2:Second " "Choice»" -#: extras/forms/bulk_import.py:123 extras/models/models.py:323 +#: netbox/extras/forms/bulk_import.py:123 netbox/extras/models/models.py:323 msgid "button class" msgstr "clase de botones" -#: extras/forms/bulk_import.py:126 extras/models/models.py:327 +#: netbox/extras/forms/bulk_import.py:126 netbox/extras/models/models.py:327 msgid "" "The class of the first link in a group will be used for the dropdown button" msgstr "" "La clase del primer enlace de un grupo se usará para el botón desplegable" -#: extras/forms/bulk_import.py:193 +#: netbox/extras/forms/bulk_import.py:193 msgid "The event type(s) which will trigger this rule" msgstr "Los tipos de eventos que activarán esta regla" -#: extras/forms/bulk_import.py:196 +#: netbox/extras/forms/bulk_import.py:196 msgid "Action object" msgstr "Objeto de acción" -#: extras/forms/bulk_import.py:198 +#: netbox/extras/forms/bulk_import.py:198 msgid "Webhook name or script as dotted path module.Class" msgstr "Nombre o script del webhook como ruta punteada module.Class" -#: extras/forms/bulk_import.py:219 +#: netbox/extras/forms/bulk_import.py:219 #, python-brace-format msgid "Webhook {name} not found" msgstr "Webhook {name} no se encontró" -#: extras/forms/bulk_import.py:228 +#: netbox/extras/forms/bulk_import.py:228 #, python-brace-format msgid "Script {name} not found" msgstr "Guión {name} no se encontró" -#: extras/forms/bulk_import.py:244 +#: netbox/extras/forms/bulk_import.py:244 msgid "Assigned object type" msgstr "Tipo de objeto asignado" -#: extras/forms/bulk_import.py:249 +#: netbox/extras/forms/bulk_import.py:249 msgid "The classification of entry" msgstr "La clasificación de entrada" -#: extras/forms/bulk_import.py:261 extras/forms/model_forms.py:320 -#: netbox/navigation/menu.py:390 templates/extras/notificationgroup.html:41 -#: templates/users/group.html:29 users/forms/model_forms.py:236 -#: users/forms/model_forms.py:248 users/forms/model_forms.py:300 -#: users/tables.py:102 +#: netbox/extras/forms/bulk_import.py:261 +#: netbox/extras/forms/model_forms.py:320 netbox/netbox/navigation/menu.py:390 +#: 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 +#: netbox/users/tables.py:102 msgid "Users" msgstr "usuarios" -#: extras/forms/bulk_import.py:265 +#: netbox/extras/forms/bulk_import.py:265 msgid "User names separated by commas, encased with double quotes" msgstr "Nombres de usuario separados por comas y entre comillas dobles" -#: extras/forms/bulk_import.py:268 extras/forms/model_forms.py:315 -#: netbox/navigation/menu.py:410 templates/extras/notificationgroup.html:31 -#: users/forms/model_forms.py:181 users/forms/model_forms.py:193 -#: users/forms/model_forms.py:305 users/tables.py:35 users/tables.py:106 +#: netbox/extras/forms/bulk_import.py:268 +#: netbox/extras/forms/model_forms.py:315 netbox/netbox/navigation/menu.py:410 +#: 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 +#: netbox/users/tables.py:106 msgid "Groups" msgstr "Grupos" -#: extras/forms/bulk_import.py:272 +#: netbox/extras/forms/bulk_import.py:272 msgid "Group names separated by commas, encased with double quotes" msgstr "Nombres de grupos separados por comas y entre comillas" -#: extras/forms/filtersets.py:52 extras/forms/model_forms.py:56 +#: netbox/extras/forms/filtersets.py:52 netbox/extras/forms/model_forms.py:56 msgid "Related object type" msgstr "Tipo de objeto relacionado" -#: extras/forms/filtersets.py:57 +#: netbox/extras/forms/filtersets.py:57 msgid "Field type" msgstr "Tipo de campo" -#: extras/forms/filtersets.py:120 extras/forms/model_forms.py:157 -#: extras/tables/tables.py:91 templates/generic/bulk_import.html:154 +#: netbox/extras/forms/filtersets.py:120 +#: netbox/extras/forms/model_forms.py:157 netbox/extras/tables/tables.py:91 +#: netbox/templates/generic/bulk_import.html:154 msgid "Choices" msgstr "Opciones" -#: extras/forms/filtersets.py:164 extras/forms/filtersets.py:319 -#: extras/forms/filtersets.py:408 extras/forms/model_forms.py:572 -#: templates/core/job.html:96 templates/extras/eventrule.html:84 +#: 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/templates/extras/eventrule.html:84 msgid "Data" msgstr "Datos" -#: extras/forms/filtersets.py:175 extras/forms/filtersets.py:333 -#: extras/forms/filtersets.py:418 netbox/choices.py:130 -#: utilities/forms/bulk_import.py:26 +#: netbox/extras/forms/filtersets.py:175 netbox/extras/forms/filtersets.py:333 +#: netbox/extras/forms/filtersets.py:418 netbox/netbox/choices.py:130 +#: netbox/utilities/forms/bulk_import.py:26 msgid "Data file" msgstr "Archivo de datos" -#: extras/forms/filtersets.py:183 +#: netbox/extras/forms/filtersets.py:183 msgid "Content types" msgstr "Tipos de contenido" -#: extras/forms/filtersets.py:255 extras/models/models.py:179 +#: netbox/extras/forms/filtersets.py:255 netbox/extras/models/models.py:179 msgid "HTTP content type" msgstr "Tipo de contenido HTTP" -#: extras/forms/filtersets.py:286 +#: netbox/extras/forms/filtersets.py:286 msgid "Event type" msgstr "Tipo de evento" -#: extras/forms/filtersets.py:291 +#: netbox/extras/forms/filtersets.py:291 msgid "Action type" msgstr "Tipo de acción" -#: extras/forms/filtersets.py:307 +#: netbox/extras/forms/filtersets.py:307 msgid "Tagged object type" msgstr "Tipo de objeto etiquetado" -#: extras/forms/filtersets.py:312 +#: netbox/extras/forms/filtersets.py:312 msgid "Allowed object type" msgstr "Tipo de objeto permitido" -#: extras/forms/filtersets.py:341 extras/forms/model_forms.py:507 -#: netbox/navigation/menu.py:18 +#: netbox/extras/forms/filtersets.py:341 +#: netbox/extras/forms/model_forms.py:507 netbox/netbox/navigation/menu.py:18 msgid "Regions" msgstr "Regiones" -#: extras/forms/filtersets.py:346 extras/forms/model_forms.py:512 +#: netbox/extras/forms/filtersets.py:346 +#: netbox/extras/forms/model_forms.py:512 msgid "Site groups" msgstr "Grupos de sitios" -#: extras/forms/filtersets.py:356 extras/forms/model_forms.py:522 -#: netbox/navigation/menu.py:20 templates/dcim/site.html:127 +#: netbox/extras/forms/filtersets.py:356 +#: netbox/extras/forms/model_forms.py:522 netbox/netbox/navigation/menu.py:20 +#: netbox/templates/dcim/site.html:127 msgid "Locations" msgstr "Ubicaciones" -#: extras/forms/filtersets.py:361 extras/forms/model_forms.py:527 +#: netbox/extras/forms/filtersets.py:361 +#: netbox/extras/forms/model_forms.py:527 msgid "Device types" msgstr "Tipos de dispositivos" -#: extras/forms/filtersets.py:366 extras/forms/model_forms.py:532 +#: netbox/extras/forms/filtersets.py:366 +#: netbox/extras/forms/model_forms.py:532 msgid "Roles" msgstr "Funciones" -#: extras/forms/filtersets.py:376 extras/forms/model_forms.py:542 +#: netbox/extras/forms/filtersets.py:376 +#: netbox/extras/forms/model_forms.py:542 msgid "Cluster types" msgstr "Tipos de clústeres" -#: extras/forms/filtersets.py:381 extras/forms/model_forms.py:547 +#: netbox/extras/forms/filtersets.py:381 +#: netbox/extras/forms/model_forms.py:547 msgid "Cluster groups" msgstr "Grupos de clústeres" -#: extras/forms/filtersets.py:386 extras/forms/model_forms.py:552 -#: netbox/navigation/menu.py:255 netbox/navigation/menu.py:257 -#: templates/virtualization/clustertype.html:30 -#: virtualization/tables/clusters.py:23 virtualization/tables/clusters.py:45 +#: 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/templates/virtualization/clustertype.html:30 +#: netbox/virtualization/tables/clusters.py:23 +#: netbox/virtualization/tables/clusters.py:45 msgid "Clusters" msgstr "Clústers" -#: extras/forms/filtersets.py:391 extras/forms/model_forms.py:557 +#: netbox/extras/forms/filtersets.py:391 +#: netbox/extras/forms/model_forms.py:557 msgid "Tenant groups" msgstr "Grupos de inquilinos" -#: extras/forms/model_forms.py:49 +#: netbox/extras/forms/model_forms.py:49 msgid "The type(s) of object that have this custom field" msgstr "Los tipos de objeto que tienen este campo personalizado" -#: extras/forms/model_forms.py:52 +#: netbox/extras/forms/model_forms.py:52 msgid "Default value" msgstr "Valor predeterminado" -#: extras/forms/model_forms.py:58 +#: netbox/extras/forms/model_forms.py:58 msgid "Type of the related object (for object/multi-object fields only)" msgstr "Tipo del objeto relacionado (solo para campos de objeto/multiobjeto)" -#: extras/forms/model_forms.py:61 templates/extras/customfield.html:60 +#: netbox/extras/forms/model_forms.py:61 +#: netbox/templates/extras/customfield.html:60 msgid "Related object filter" msgstr "Filtro de objetos relacionados" -#: extras/forms/model_forms.py:63 +#: netbox/extras/forms/model_forms.py:63 msgid "Specify query parameters as a JSON object." msgstr "Especifique los parámetros de consulta como un objeto JSON." -#: extras/forms/model_forms.py:73 templates/extras/customfield.html:10 +#: netbox/extras/forms/model_forms.py:73 +#: netbox/templates/extras/customfield.html:10 msgid "Custom Field" msgstr "Campo personalizado" -#: extras/forms/model_forms.py:85 +#: netbox/extras/forms/model_forms.py:85 msgid "" "The type of data stored in this field. For object/multi-object fields, " "select the related object type below." @@ -7432,7 +8010,7 @@ msgstr "" "El tipo de datos almacenados en este campo. Para los campos de objetos o " "multiobjetos, seleccione el tipo de objeto relacionado a continuación." -#: extras/forms/model_forms.py:88 +#: netbox/extras/forms/model_forms.py:88 msgid "" "This will be displayed as help text for the form field. Markdown is " "supported." @@ -7440,11 +8018,11 @@ msgstr "" "Esto se mostrará como texto de ayuda para el campo del formulario. Markdown " "es compatible." -#: extras/forms/model_forms.py:143 +#: netbox/extras/forms/model_forms.py:143 msgid "Related Object" msgstr "Objeto relacionado" -#: extras/forms/model_forms.py:169 +#: netbox/extras/forms/model_forms.py:169 msgid "" "Enter one choice per line. An optional label may be specified for each " "choice by appending it with a colon. Example:" @@ -7452,15 +8030,16 @@ msgstr "" "Introduzca una opción por línea. Se puede especificar una etiqueta opcional " "para cada elección añadiendo dos puntos. Ejemplo:" -#: extras/forms/model_forms.py:212 templates/extras/customlink.html:10 +#: netbox/extras/forms/model_forms.py:212 +#: netbox/templates/extras/customlink.html:10 msgid "Custom Link" msgstr "Vínculo personalizado" -#: extras/forms/model_forms.py:214 +#: netbox/extras/forms/model_forms.py:214 msgid "Templates" msgstr "Plantillas" -#: extras/forms/model_forms.py:226 +#: netbox/extras/forms/model_forms.py:226 #, python-brace-format msgid "" "Jinja2 template code for the link text. Reference the object as {example}. " @@ -7470,7 +8049,7 @@ msgstr "" "objeto como {example}. Los enlaces que se muestren como texto vacío no se " "mostrarán." -#: extras/forms/model_forms.py:230 +#: netbox/extras/forms/model_forms.py:230 #, python-brace-format msgid "" "Jinja2 template code for the link URL. Reference the object as {example}." @@ -7478,56 +8057,62 @@ msgstr "" "Código de plantilla Jinja2 para la URL del enlace. Haga referencia al objeto" " como {example}." -#: extras/forms/model_forms.py:241 extras/forms/model_forms.py:624 +#: netbox/extras/forms/model_forms.py:241 +#: netbox/extras/forms/model_forms.py:624 msgid "Template code" msgstr "Código de plantilla" -#: extras/forms/model_forms.py:247 templates/extras/exporttemplate.html:12 +#: netbox/extras/forms/model_forms.py:247 +#: netbox/templates/extras/exporttemplate.html:12 msgid "Export Template" msgstr "Plantilla de exportación" -#: extras/forms/model_forms.py:249 +#: netbox/extras/forms/model_forms.py:249 msgid "Rendering" msgstr "Renderización" -#: extras/forms/model_forms.py:263 extras/forms/model_forms.py:649 +#: netbox/extras/forms/model_forms.py:263 +#: netbox/extras/forms/model_forms.py:649 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." -#: extras/forms/model_forms.py:270 extras/forms/model_forms.py:656 +#: netbox/extras/forms/model_forms.py:270 +#: netbox/extras/forms/model_forms.py:656 msgid "Must specify either local content or a data file" msgstr "Debe especificar el contenido local o un archivo de datos" -#: extras/forms/model_forms.py:284 netbox/forms/mixins.py:70 -#: templates/extras/savedfilter.html:10 +#: netbox/extras/forms/model_forms.py:284 netbox/netbox/forms/mixins.py:70 +#: netbox/templates/extras/savedfilter.html:10 msgid "Saved Filter" msgstr "Filtro guardado" -#: extras/forms/model_forms.py:334 +#: netbox/extras/forms/model_forms.py:334 msgid "A notification group specify at least one user or group." msgstr "Un grupo de notificaciones especifica al menos un usuario o grupo." -#: extras/forms/model_forms.py:356 templates/extras/webhook.html:23 +#: netbox/extras/forms/model_forms.py:356 +#: netbox/templates/extras/webhook.html:23 msgid "HTTP Request" msgstr "Solicitud HTTP" -#: extras/forms/model_forms.py:358 templates/extras/webhook.html:44 +#: netbox/extras/forms/model_forms.py:358 +#: netbox/templates/extras/webhook.html:44 msgid "SSL" msgstr "SSL" -#: extras/forms/model_forms.py:380 +#: netbox/extras/forms/model_forms.py:380 msgid "Action choice" msgstr "Elección de acción" -#: extras/forms/model_forms.py:385 +#: netbox/extras/forms/model_forms.py:385 msgid "Enter conditions in JSON format." msgstr "" "Introduzca las condiciones en JSON " "formato." -#: extras/forms/model_forms.py:389 +#: netbox/extras/forms/model_forms.py:389 msgid "" "Enter parameters to pass to the action in JSON format." @@ -7535,112 +8120,114 @@ msgstr "" "Introduzca los parámetros para pasar a la acción en JSON formato." -#: extras/forms/model_forms.py:394 templates/extras/eventrule.html:10 +#: netbox/extras/forms/model_forms.py:394 +#: netbox/templates/extras/eventrule.html:10 msgid "Event Rule" msgstr "Regla del evento" -#: extras/forms/model_forms.py:395 +#: netbox/extras/forms/model_forms.py:395 msgid "Triggers" msgstr "Disparadores" -#: extras/forms/model_forms.py:442 +#: netbox/extras/forms/model_forms.py:442 msgid "Notification group" msgstr "Grupo de notificaciones" -#: extras/forms/model_forms.py:562 netbox/navigation/menu.py:26 -#: tenancy/tables/tenants.py:22 +#: netbox/extras/forms/model_forms.py:562 netbox/netbox/navigation/menu.py:26 +#: netbox/tenancy/tables/tenants.py:22 msgid "Tenants" msgstr "Inquilinos" -#: extras/forms/model_forms.py:606 +#: netbox/extras/forms/model_forms.py:606 msgid "Data is populated from the remote source selected below." msgstr "" "Los datos se rellenan desde la fuente remota seleccionada a continuación." -#: extras/forms/model_forms.py:612 +#: netbox/extras/forms/model_forms.py:612 msgid "Must specify either local data or a data file" msgstr "Debe especificar datos locales o un archivo de datos" -#: extras/forms/model_forms.py:631 templates/core/datafile.html:55 +#: netbox/extras/forms/model_forms.py:631 +#: netbox/templates/core/datafile.html:55 msgid "Content" msgstr "Contenido" -#: extras/forms/reports.py:17 extras/forms/scripts.py:23 +#: netbox/extras/forms/reports.py:17 netbox/extras/forms/scripts.py:23 msgid "Schedule at" msgstr "Programe en" -#: extras/forms/reports.py:18 +#: netbox/extras/forms/reports.py:18 msgid "Schedule execution of report to a set time" msgstr "Programe la ejecución del informe a una hora determinada" -#: extras/forms/reports.py:23 extras/forms/scripts.py:29 +#: netbox/extras/forms/reports.py:23 netbox/extras/forms/scripts.py:29 msgid "Recurs every" msgstr "Se repite cada" -#: extras/forms/reports.py:27 +#: netbox/extras/forms/reports.py:27 msgid "Interval at which this report is re-run (in minutes)" msgstr "Intervalo en el que se vuelve a ejecutar este informe (en minutos)" -#: extras/forms/reports.py:35 extras/forms/scripts.py:41 +#: netbox/extras/forms/reports.py:35 netbox/extras/forms/scripts.py:41 #, python-brace-format msgid " (current time: {now})" msgstr " (hora actual: {now})" -#: extras/forms/reports.py:45 extras/forms/scripts.py:51 +#: netbox/extras/forms/reports.py:45 netbox/extras/forms/scripts.py:51 msgid "Scheduled time must be in the future." msgstr "La hora programada debe estar en el futuro." -#: extras/forms/scripts.py:17 +#: netbox/extras/forms/scripts.py:17 msgid "Commit changes" msgstr "Confirmar cambios" -#: extras/forms/scripts.py:18 +#: netbox/extras/forms/scripts.py:18 msgid "Commit changes to the database (uncheck for a dry-run)" msgstr "" "Confirme los cambios en la base de datos (desactive la casilla para una " "ejecución en seco)" -#: extras/forms/scripts.py:24 +#: netbox/extras/forms/scripts.py:24 msgid "Schedule execution of script to a set time" msgstr "Programe la ejecución del script a una hora determinada" -#: extras/forms/scripts.py:33 +#: netbox/extras/forms/scripts.py:33 msgid "Interval at which this script is re-run (in minutes)" msgstr "Intervalo en el que se vuelve a ejecutar este script (en minutos)" -#: extras/jobs.py:49 +#: netbox/extras/jobs.py:47 msgid "Database changes have been reverted automatically." msgstr "Los cambios en la base de datos se han revertido automáticamente." -#: extras/jobs.py:55 +#: netbox/extras/jobs.py:53 msgid "Script aborted with error: " msgstr "Secuencia de comandos abortada con un error: " -#: extras/jobs.py:65 +#: netbox/extras/jobs.py:63 msgid "An exception occurred: " msgstr "Se ha producido una excepción: " -#: extras/jobs.py:70 +#: netbox/extras/jobs.py:68 msgid "Database changes have been reverted due to error." msgstr "Los cambios en la base de datos se han revertido debido a un error." -#: extras/management/commands/reindex.py:66 +#: netbox/extras/management/commands/reindex.py:66 msgid "No indexers found!" msgstr "¡No se encontró ningún indexador!" -#: extras/models/configs.py:130 +#: netbox/extras/models/configs.py:130 msgid "config context" msgstr "contexto de configuración" -#: extras/models/configs.py:131 +#: netbox/extras/models/configs.py:131 msgid "config contexts" msgstr "contextos de configuración" -#: extras/models/configs.py:149 extras/models/configs.py:205 +#: netbox/extras/models/configs.py:149 netbox/extras/models/configs.py:205 msgid "JSON data must be in object form. Example:" msgstr "Los datos JSON deben estar en forma de objeto. Ejemplo:" -#: extras/models/configs.py:169 +#: netbox/extras/models/configs.py:169 msgid "" "Local config context data takes precedence over source contexts in the final" " rendered config context" @@ -7648,19 +8235,19 @@ msgstr "" "Los datos del contexto de configuración local tienen prioridad sobre los " "contextos de origen en el contexto de configuración renderizado final." -#: extras/models/configs.py:224 +#: netbox/extras/models/configs.py:224 msgid "template code" msgstr "código de plantilla" -#: extras/models/configs.py:225 +#: netbox/extras/models/configs.py:225 msgid "Jinja2 template code." msgstr "Código de plantilla Jinja2." -#: extras/models/configs.py:228 +#: netbox/extras/models/configs.py:228 msgid "environment parameters" msgstr "parámetros ambientales" -#: extras/models/configs.py:233 +#: netbox/extras/models/configs.py:233 msgid "" "Any additional" @@ -7670,43 +8257,43 @@ msgstr "" "href=\"https://jinja.palletsprojects.com/en/3.1.x/api/#jinja2.Environment\">parámetros" " adicionales para pasar al construir el entorno Jinja2." -#: extras/models/configs.py:240 +#: netbox/extras/models/configs.py:240 msgid "config template" msgstr "plantilla de configuración" -#: extras/models/configs.py:241 +#: netbox/extras/models/configs.py:241 msgid "config templates" msgstr "plantillas de configuración" -#: extras/models/customfields.py:75 +#: netbox/extras/models/customfields.py:75 msgid "The object(s) to which this field applies." msgstr "Los objetos a los que se aplica este campo." -#: extras/models/customfields.py:82 +#: netbox/extras/models/customfields.py:82 msgid "The type of data this custom field holds" msgstr "El tipo de datos que contiene este campo personalizado" -#: extras/models/customfields.py:89 +#: netbox/extras/models/customfields.py:89 msgid "The type of NetBox object this field maps to (for object fields)" msgstr "" "El tipo de objeto NetBox al que se asigna este campo (para campos de " "objetos)" -#: extras/models/customfields.py:95 +#: netbox/extras/models/customfields.py:95 msgid "Internal field name" msgstr "Nombre del campo interno" -#: extras/models/customfields.py:99 +#: netbox/extras/models/customfields.py:99 msgid "Only alphanumeric characters and underscores are allowed." msgstr "Solo se permiten caracteres alfanuméricos y guiones bajos." -#: extras/models/customfields.py:104 +#: netbox/extras/models/customfields.py:104 msgid "Double underscores are not permitted in custom field names." msgstr "" "No se permiten los guiones dobles de subrayado en los nombres de campo " "personalizados." -#: extras/models/customfields.py:115 +#: netbox/extras/models/customfields.py:115 msgid "" "Name of the field as displayed to users (if not provided, 'the field's name " "will be used)" @@ -7714,19 +8301,19 @@ msgstr "" "Nombre del campo tal como se muestra a los usuarios (si no se proporciona, " "se usará el nombre del campo)" -#: extras/models/customfields.py:119 extras/models/models.py:317 +#: netbox/extras/models/customfields.py:119 netbox/extras/models/models.py:317 msgid "group name" msgstr "nombre del grupo" -#: extras/models/customfields.py:122 +#: netbox/extras/models/customfields.py:122 msgid "Custom fields within the same group will be displayed together" msgstr "Los campos personalizados del mismo grupo se mostrarán juntos" -#: extras/models/customfields.py:130 +#: netbox/extras/models/customfields.py:130 msgid "required" msgstr "requerido" -#: extras/models/customfields.py:132 +#: netbox/extras/models/customfields.py:132 msgid "" "This field is required when creating new objects or editing an existing " "object." @@ -7734,19 +8321,19 @@ msgstr "" "Este campo es obligatorio para crear objetos nuevos o editar un objeto " "existente." -#: extras/models/customfields.py:135 +#: netbox/extras/models/customfields.py:135 msgid "must be unique" msgstr "debe ser único" -#: extras/models/customfields.py:137 +#: netbox/extras/models/customfields.py:137 msgid "The value of this field must be unique for the assigned object" msgstr "El valor de este campo debe ser único para el objeto asignado" -#: extras/models/customfields.py:140 +#: netbox/extras/models/customfields.py:140 msgid "search weight" msgstr "peso de búsqueda" -#: extras/models/customfields.py:143 +#: netbox/extras/models/customfields.py:143 msgid "" "Weighting for search. Lower values are considered more important. Fields " "with a search weight of zero will be ignored." @@ -7754,11 +8341,11 @@ msgstr "" "Ponderación para la búsqueda. Los valores más bajos se consideran más " "importantes. Los campos con un peso de búsqueda de cero se ignorarán." -#: extras/models/customfields.py:148 +#: netbox/extras/models/customfields.py:148 msgid "filter logic" msgstr "lógica de filtros" -#: extras/models/customfields.py:152 +#: netbox/extras/models/customfields.py:152 msgid "" "Loose matches any instance of a given string; exact matches the entire " "field." @@ -7766,11 +8353,11 @@ msgstr "" "Loose coincide con cualquier instancia de una cadena determinada; exact " "coincide con todo el campo." -#: extras/models/customfields.py:155 +#: netbox/extras/models/customfields.py:155 msgid "default" msgstr "predeterminado" -#: extras/models/customfields.py:159 +#: netbox/extras/models/customfields.py:159 msgid "" "Default value for the field (must be a JSON value). Encapsulate strings with" " double quotes (e.g. \"Foo\")." @@ -7778,7 +8365,7 @@ msgstr "" "Valor predeterminado para el campo (debe ser un valor JSON). Encapsula " "cadenas con comillas dobles (por ejemplo, «Foo»)." -#: extras/models/customfields.py:166 +#: netbox/extras/models/customfields.py:166 msgid "" "Filter the object selection choices using a query_params dict (must be a " "JSON value).Encapsulate strings with double quotes (e.g. \"Foo\")." @@ -7787,35 +8374,35 @@ msgstr "" "query_params (debe ser un valor JSON). Encapsula cadenas con comillas dobles" " (por ejemplo, «Foo»)." -#: extras/models/customfields.py:172 +#: netbox/extras/models/customfields.py:172 msgid "display weight" msgstr "peso de la pantalla" -#: extras/models/customfields.py:173 +#: netbox/extras/models/customfields.py:173 msgid "Fields with higher weights appear lower in a form." msgstr "Los campos con pesos más altos aparecen más abajo en un formulario." -#: extras/models/customfields.py:178 +#: netbox/extras/models/customfields.py:178 msgid "minimum value" msgstr "valor mínimo" -#: extras/models/customfields.py:179 +#: netbox/extras/models/customfields.py:179 msgid "Minimum allowed value (for numeric fields)" msgstr "Valor mínimo permitido (para campos numéricos)" -#: extras/models/customfields.py:184 +#: netbox/extras/models/customfields.py:184 msgid "maximum value" msgstr "valor máximo" -#: extras/models/customfields.py:185 +#: netbox/extras/models/customfields.py:185 msgid "Maximum allowed value (for numeric fields)" msgstr "Valor máximo permitido (para campos numéricos)" -#: extras/models/customfields.py:191 +#: netbox/extras/models/customfields.py:191 msgid "validation regex" msgstr "expresión regular de validación" -#: extras/models/customfields.py:193 +#: netbox/extras/models/customfields.py:193 #, python-brace-format msgid "" "Regular expression to enforce on text field values. Use ^ and $ to force " @@ -7826,196 +8413,198 @@ msgstr "" "y $ para forzar la coincidencia de toda la cadena. Por ejemplo, ^ " "[A-Z]{3}$ limitará los valores a exactamente tres letras mayúsculas." -#: extras/models/customfields.py:201 +#: netbox/extras/models/customfields.py:201 msgid "choice set" msgstr "conjunto de opciones" -#: extras/models/customfields.py:210 +#: netbox/extras/models/customfields.py:210 msgid "Specifies whether the custom field is displayed in the UI" msgstr "" "Especifica si el campo personalizado se muestra en la interfaz de usuario" -#: extras/models/customfields.py:217 +#: netbox/extras/models/customfields.py:217 msgid "Specifies whether the custom field value can be edited in the UI" msgstr "" "Especifica si el valor del campo personalizado se puede editar en la " "interfaz de usuario" -#: extras/models/customfields.py:221 +#: netbox/extras/models/customfields.py:221 msgid "is cloneable" msgstr "es clonable" -#: extras/models/customfields.py:222 +#: netbox/extras/models/customfields.py:222 msgid "Replicate this value when cloning objects" msgstr "Replique este valor al clonar objetos" -#: extras/models/customfields.py:239 +#: netbox/extras/models/customfields.py:239 msgid "custom field" msgstr "campo personalizado" -#: extras/models/customfields.py:240 +#: netbox/extras/models/customfields.py:240 msgid "custom fields" msgstr "campos personalizados" -#: extras/models/customfields.py:329 +#: netbox/extras/models/customfields.py:329 #, python-brace-format msgid "Invalid default value \"{value}\": {error}" msgstr "Valor predeterminado no válido»{value}«: {error}" -#: extras/models/customfields.py:336 +#: netbox/extras/models/customfields.py:336 msgid "A minimum value may be set only for numeric fields" msgstr "Solo se puede establecer un valor mínimo para los campos numéricos" -#: extras/models/customfields.py:338 +#: netbox/extras/models/customfields.py:338 msgid "A maximum value may be set only for numeric fields" msgstr "Solo se puede establecer un valor máximo para los campos numéricos" -#: extras/models/customfields.py:348 +#: netbox/extras/models/customfields.py:348 msgid "" "Regular expression validation is supported only for text and URL fields" msgstr "" "La validación de expresiones regulares solo se admite para campos de texto y" " URL" -#: extras/models/customfields.py:354 +#: netbox/extras/models/customfields.py:354 msgid "Uniqueness cannot be enforced for boolean fields" msgstr "La unicidad no se puede aplicar a los campos booleanos" -#: extras/models/customfields.py:364 +#: netbox/extras/models/customfields.py:364 msgid "Selection fields must specify a set of choices." msgstr "Los campos de selección deben especificar un conjunto de opciones." -#: extras/models/customfields.py:368 +#: netbox/extras/models/customfields.py:368 msgid "Choices may be set only on selection fields." msgstr "Las elecciones solo se pueden establecer en los campos de selección." -#: extras/models/customfields.py:375 +#: netbox/extras/models/customfields.py:375 msgid "Object fields must define an object type." msgstr "Los campos de objeto deben definir un tipo de objeto." -#: extras/models/customfields.py:379 +#: netbox/extras/models/customfields.py:379 #, python-brace-format msgid "{type} fields may not define an object type." msgstr "{type} es posible que los campos no definan un tipo de objeto." -#: extras/models/customfields.py:386 +#: netbox/extras/models/customfields.py:386 msgid "A related object filter can be defined only for object fields." msgstr "" "Un filtro de objetos relacionados solo se puede definir para los campos de " "objetos." -#: extras/models/customfields.py:390 +#: netbox/extras/models/customfields.py:390 msgid "Filter must be defined as a dictionary mapping attributes to values." msgstr "" "El filtro debe definirse como un diccionario que asigna atributos a valores." -#: extras/models/customfields.py:469 +#: netbox/extras/models/customfields.py:469 msgid "True" msgstr "Cierto" -#: extras/models/customfields.py:470 +#: netbox/extras/models/customfields.py:470 msgid "False" msgstr "Falso" -#: extras/models/customfields.py:560 +#: netbox/extras/models/customfields.py:560 #, python-brace-format msgid "Values must match this regex: {regex}" msgstr "" "Los valores deben coincidir con esta expresión regular: {regex}" -#: extras/models/customfields.py:654 +#: netbox/extras/models/customfields.py:654 msgid "Value must be a string." msgstr "El valor debe ser una cadena." -#: extras/models/customfields.py:656 +#: netbox/extras/models/customfields.py:656 #, python-brace-format msgid "Value must match regex '{regex}'" msgstr "El valor debe coincidir con la expresión regular '{regex}'" -#: extras/models/customfields.py:661 +#: netbox/extras/models/customfields.py:661 msgid "Value must be an integer." msgstr "El valor debe ser un número entero." -#: extras/models/customfields.py:664 extras/models/customfields.py:679 +#: netbox/extras/models/customfields.py:664 +#: netbox/extras/models/customfields.py:679 #, python-brace-format msgid "Value must be at least {minimum}" msgstr "El valor debe ser al menos {minimum}" -#: extras/models/customfields.py:668 extras/models/customfields.py:683 +#: netbox/extras/models/customfields.py:668 +#: netbox/extras/models/customfields.py:683 #, python-brace-format msgid "Value must not exceed {maximum}" msgstr "El valor no debe superar {maximum}" -#: extras/models/customfields.py:676 +#: netbox/extras/models/customfields.py:676 msgid "Value must be a decimal." msgstr "El valor debe ser decimal." -#: extras/models/customfields.py:688 +#: netbox/extras/models/customfields.py:688 msgid "Value must be true or false." msgstr "El valor debe ser verdadero o falso." -#: extras/models/customfields.py:696 +#: netbox/extras/models/customfields.py:696 msgid "Date values must be in ISO 8601 format (YYYY-MM-DD)." msgstr "Los valores de fecha deben estar en formato ISO 8601 (AAAA-MM-DD)." -#: extras/models/customfields.py:705 +#: netbox/extras/models/customfields.py:705 msgid "Date and time values must be in ISO 8601 format (YYYY-MM-DD HH:MM:SS)." msgstr "" "Los valores de fecha y hora deben estar en formato ISO 8601 (AAAA-MM-DD " "HH:MM:SS)." -#: extras/models/customfields.py:712 +#: netbox/extras/models/customfields.py:712 #, python-brace-format msgid "Invalid choice ({value}) for choice set {choiceset}." msgstr "" "Elección no válida ({value}) para el conjunto de opciones {choiceset}." -#: extras/models/customfields.py:722 +#: netbox/extras/models/customfields.py:722 #, python-brace-format msgid "Invalid choice(s) ({value}) for choice set {choiceset}." msgstr "" "Elecciones no válidas ({value}) para el conjunto de opciones {choiceset}." -#: extras/models/customfields.py:731 +#: netbox/extras/models/customfields.py:731 #, python-brace-format msgid "Value must be an object ID, not {type}" msgstr "El valor debe ser un ID de objeto, no {type}" -#: extras/models/customfields.py:737 +#: netbox/extras/models/customfields.py:737 #, python-brace-format msgid "Value must be a list of object IDs, not {type}" msgstr "El valor debe ser una lista de identificadores de objetos, no {type}" -#: extras/models/customfields.py:741 +#: netbox/extras/models/customfields.py:741 #, python-brace-format msgid "Found invalid object ID: {id}" msgstr "Se encontró un ID de objeto no válido: {id}" -#: extras/models/customfields.py:744 +#: netbox/extras/models/customfields.py:744 msgid "Required field cannot be empty." msgstr "El campo obligatorio no puede estar vacío." -#: extras/models/customfields.py:763 +#: netbox/extras/models/customfields.py:763 msgid "Base set of predefined choices (optional)" msgstr "Conjunto básico de opciones predefinidas (opcional)" -#: extras/models/customfields.py:775 +#: netbox/extras/models/customfields.py:775 msgid "Choices are automatically ordered alphabetically" msgstr "Las opciones se ordenan alfabéticamente automáticamente" -#: extras/models/customfields.py:782 +#: netbox/extras/models/customfields.py:782 msgid "custom field choice set" msgstr "conjunto de opciones de campo personalizadas" -#: extras/models/customfields.py:783 +#: netbox/extras/models/customfields.py:783 msgid "custom field choice sets" msgstr "conjuntos de opciones de campo personalizadas" -#: extras/models/customfields.py:825 +#: netbox/extras/models/customfields.py:825 msgid "Must define base or extra choices." msgstr "Debe definir opciones básicas o adicionales." -#: extras/models/customfields.py:849 +#: netbox/extras/models/customfields.py:849 #, python-brace-format msgid "" "Cannot remove choice {choice} as there are {model} objects which reference " @@ -8024,60 +8613,60 @@ msgstr "" "No se puede eliminar la opción {choice} como los hay {model} objetos que " "hacen referencia a él." -#: extras/models/dashboard.py:18 +#: netbox/extras/models/dashboard.py:18 msgid "layout" msgstr "diseño" -#: extras/models/dashboard.py:22 +#: netbox/extras/models/dashboard.py:22 msgid "config" msgstr "configuración" -#: extras/models/dashboard.py:27 +#: netbox/extras/models/dashboard.py:27 msgid "dashboard" msgstr "salpicadero" -#: extras/models/dashboard.py:28 +#: netbox/extras/models/dashboard.py:28 msgid "dashboards" msgstr "tableros" -#: extras/models/models.py:52 +#: netbox/extras/models/models.py:52 msgid "object types" msgstr "tipos de objetos" -#: extras/models/models.py:53 +#: netbox/extras/models/models.py:53 msgid "The object(s) to which this rule applies." msgstr "Los objetos a los que se aplica esta regla." -#: extras/models/models.py:67 +#: netbox/extras/models/models.py:67 msgid "The types of event which will trigger this rule." msgstr "Los tipos de eventos que activarán esta regla." -#: extras/models/models.py:74 +#: netbox/extras/models/models.py:74 msgid "conditions" msgstr "condiciones" -#: extras/models/models.py:77 +#: netbox/extras/models/models.py:77 msgid "" "A set of conditions which determine whether the event will be generated." msgstr "Conjunto de condiciones que determinan si se generará el evento." -#: extras/models/models.py:85 +#: netbox/extras/models/models.py:85 msgid "action type" msgstr "tipo de acción" -#: extras/models/models.py:104 +#: netbox/extras/models/models.py:104 msgid "Additional data to pass to the action object" msgstr "Datos adicionales para pasar al objeto de acción" -#: extras/models/models.py:116 +#: netbox/extras/models/models.py:116 msgid "event rule" msgstr "regla de evento" -#: extras/models/models.py:117 +#: netbox/extras/models/models.py:117 msgid "event rules" msgstr "reglas del evento" -#: extras/models/models.py:166 +#: netbox/extras/models/models.py:166 msgid "" "This URL will be called using the HTTP method defined when the webhook is " "called. Jinja2 template processing is supported with the same context as the" @@ -8087,7 +8676,7 @@ msgstr "" "webhook. El procesamiento de plantillas de Jinja2 se admite en el mismo " "contexto que el cuerpo de la solicitud." -#: extras/models/models.py:181 +#: netbox/extras/models/models.py:181 msgid "" "The complete list of official content types is available aquí." -#: extras/models/models.py:186 +#: netbox/extras/models/models.py:186 msgid "additional headers" msgstr "encabezados adicionales" -#: extras/models/models.py:189 +#: netbox/extras/models/models.py:189 msgid "" "User-supplied HTTP headers to be sent with the request in addition to the " "HTTP content type. Headers should be defined in the format Name: " @@ -8114,11 +8703,11 @@ msgstr "" " Jinja2 se admite en el mismo contexto que el cuerpo de la solicitud (a " "continuación)." -#: extras/models/models.py:195 +#: netbox/extras/models/models.py:195 msgid "body template" msgstr "plantilla corporal" -#: extras/models/models.py:198 +#: netbox/extras/models/models.py:198 msgid "" "Jinja2 template for a custom request body. If blank, a JSON object " "representing the change will be included. Available context data includes: " @@ -8131,11 +8720,11 @@ msgstr "" "marca de tiempo, nombre de usuario, " "id_solicitud, y dato." -#: extras/models/models.py:204 +#: netbox/extras/models/models.py:204 msgid "secret" msgstr "secreto" -#: extras/models/models.py:208 +#: netbox/extras/models/models.py:208 msgid "" "When provided, the request will include a X-Hook-Signature " "header containing a HMAC hex digest of the payload body using the secret as " @@ -8146,16 +8735,16 @@ msgstr "" "carga utilizando el secreto como clave. El secreto no se transmite en la " "solicitud." -#: extras/models/models.py:215 +#: netbox/extras/models/models.py:215 msgid "Enable SSL certificate verification. Disable with caution!" msgstr "" "Habilita la verificación del certificado SSL. ¡Desactívala con precaución!" -#: extras/models/models.py:221 templates/extras/webhook.html:51 +#: netbox/extras/models/models.py:221 netbox/templates/extras/webhook.html:51 msgid "CA File Path" msgstr "Ruta del archivo CA" -#: extras/models/models.py:223 +#: netbox/extras/models/models.py:223 msgid "" "The specific CA certificate file to use for SSL verification. Leave blank to" " use the system defaults." @@ -8164,65 +8753,65 @@ msgstr "" "verificación SSL. Déjelo en blanco para usar los valores predeterminados del" " sistema." -#: extras/models/models.py:234 +#: netbox/extras/models/models.py:234 msgid "webhook" msgstr "webhook" -#: extras/models/models.py:235 +#: netbox/extras/models/models.py:235 msgid "webhooks" msgstr "webhooks" -#: extras/models/models.py:253 +#: netbox/extras/models/models.py:253 msgid "Do not specify a CA certificate file if SSL verification is disabled." msgstr "" "No especifique un archivo de certificado de CA si la verificación SSL está " "deshabilitada." -#: extras/models/models.py:293 +#: netbox/extras/models/models.py:293 msgid "The object type(s) to which this link applies." msgstr "Los tipos de objeto a los que se aplica este enlace." -#: extras/models/models.py:305 +#: netbox/extras/models/models.py:305 msgid "link text" msgstr "texto de enlace" -#: extras/models/models.py:306 +#: netbox/extras/models/models.py:306 msgid "Jinja2 template code for link text" msgstr "Código de plantilla Jinja2 para texto de enlace" -#: extras/models/models.py:309 +#: netbox/extras/models/models.py:309 msgid "link URL" msgstr "URL del enlace" -#: extras/models/models.py:310 +#: netbox/extras/models/models.py:310 msgid "Jinja2 template code for link URL" msgstr "Código de plantilla Jinja2 para la URL del enlace" -#: extras/models/models.py:320 +#: netbox/extras/models/models.py:320 msgid "Links with the same group will appear as a dropdown menu" msgstr "Los enlaces con el mismo grupo aparecerán en un menú desplegable" -#: extras/models/models.py:330 +#: netbox/extras/models/models.py:330 msgid "new window" msgstr "ventana nueva" -#: extras/models/models.py:332 +#: netbox/extras/models/models.py:332 msgid "Force link to open in a new window" msgstr "Forzar que el enlace se abra en una ventana nueva" -#: extras/models/models.py:341 +#: netbox/extras/models/models.py:341 msgid "custom link" msgstr "enlace personalizado" -#: extras/models/models.py:342 +#: netbox/extras/models/models.py:342 msgid "custom links" msgstr "enlaces personalizados" -#: extras/models/models.py:389 +#: netbox/extras/models/models.py:389 msgid "The object type(s) to which this template applies." msgstr "Los tipos de objeto a los que se aplica esta plantilla." -#: extras/models/models.py:402 +#: netbox/extras/models/models.py:402 msgid "" "Jinja2 template code. The list of objects being exported is passed as a " "context variable named queryset." @@ -8230,1088 +8819,1154 @@ msgstr "" "Código de plantilla Jinja2. La lista de objetos que se exportan se pasa como" " una variable de contexto denominada conjunto de consultas." -#: extras/models/models.py:410 +#: netbox/extras/models/models.py:410 msgid "Defaults to text/plain; charset=utf-8" msgstr "El valor predeterminado es texto/plano; charset=utf-8" -#: extras/models/models.py:413 +#: netbox/extras/models/models.py:413 msgid "file extension" msgstr "extensión de archivo" -#: extras/models/models.py:416 +#: netbox/extras/models/models.py:416 msgid "Extension to append to the rendered filename" msgstr "Extensión para añadir al nombre de archivo renderizado" -#: extras/models/models.py:419 +#: netbox/extras/models/models.py:419 msgid "as attachment" msgstr "como adjunto" -#: extras/models/models.py:421 +#: netbox/extras/models/models.py:421 msgid "Download file as attachment" msgstr "Descargar archivo como archivo adjunto" -#: extras/models/models.py:430 +#: netbox/extras/models/models.py:430 msgid "export template" msgstr "plantilla de exportación" -#: extras/models/models.py:431 +#: netbox/extras/models/models.py:431 msgid "export templates" msgstr "plantillas de exportación" -#: extras/models/models.py:448 +#: netbox/extras/models/models.py:448 #, python-brace-format msgid "\"{name}\" is a reserved name. Please choose a different name." msgstr "«{name}\"es un nombre reservado. Elija un nombre diferente." -#: extras/models/models.py:498 +#: netbox/extras/models/models.py:498 msgid "The object type(s) to which this filter applies." msgstr "Los tipos de objeto a los que se aplica este filtro." -#: extras/models/models.py:530 +#: netbox/extras/models/models.py:530 msgid "shared" msgstr "compartido" -#: extras/models/models.py:543 +#: netbox/extras/models/models.py:543 msgid "saved filter" msgstr "filtro guardado" -#: extras/models/models.py:544 +#: netbox/extras/models/models.py:544 msgid "saved filters" msgstr "filtros guardados" -#: extras/models/models.py:562 +#: netbox/extras/models/models.py:562 msgid "Filter parameters must be stored as a dictionary of keyword arguments." msgstr "" "Los parámetros de filtro se deben almacenar como un diccionario de " "argumentos de palabras clave." -#: extras/models/models.py:590 +#: netbox/extras/models/models.py:590 msgid "image height" msgstr "altura de la imagen" -#: extras/models/models.py:593 +#: netbox/extras/models/models.py:593 msgid "image width" msgstr "ancho de imagen" -#: extras/models/models.py:610 +#: netbox/extras/models/models.py:610 msgid "image attachment" msgstr "adjunto de imagen" -#: extras/models/models.py:611 +#: netbox/extras/models/models.py:611 msgid "image attachments" msgstr "archivos adjuntos de imágenes" -#: extras/models/models.py:625 +#: netbox/extras/models/models.py:625 #, python-brace-format msgid "Image attachments cannot be assigned to this object type ({type})." msgstr "" "Los archivos adjuntos de imágenes no se pueden asignar a este tipo de objeto" " ({type})." -#: extras/models/models.py:688 +#: netbox/extras/models/models.py:688 msgid "kind" msgstr "amable" -#: extras/models/models.py:702 +#: netbox/extras/models/models.py:702 msgid "journal entry" msgstr "entrada de diario" -#: extras/models/models.py:703 +#: netbox/extras/models/models.py:703 msgid "journal entries" msgstr "entradas de diario" -#: extras/models/models.py:718 +#: netbox/extras/models/models.py:718 #, 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})." -#: extras/models/models.py:760 +#: netbox/extras/models/models.py:760 msgid "bookmark" msgstr "marcalibros" -#: extras/models/models.py:761 +#: netbox/extras/models/models.py:761 msgid "bookmarks" msgstr "marcapáginas" -#: extras/models/models.py:774 +#: netbox/extras/models/models.py:774 #, 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})." -#: extras/models/notifications.py:43 +#: netbox/extras/models/notifications.py:43 msgid "read" msgstr "leer" -#: extras/models/notifications.py:66 +#: netbox/extras/models/notifications.py:66 msgid "event" msgstr "acto" -#: extras/models/notifications.py:84 +#: netbox/extras/models/notifications.py:84 msgid "notification" msgstr "notificación" -#: extras/models/notifications.py:85 +#: netbox/extras/models/notifications.py:85 msgid "notifications" msgstr "notificaciones" -#: extras/models/notifications.py:99 extras/models/notifications.py:234 +#: netbox/extras/models/notifications.py:99 +#: netbox/extras/models/notifications.py:234 #, python-brace-format msgid "Objects of this type ({type}) do not support notifications." msgstr "Objetos de este tipo ({type}) no admiten notificaciones." -#: extras/models/notifications.py:137 users/models/users.py:58 -#: users/models/users.py:77 +#: netbox/extras/models/notifications.py:137 netbox/users/models/users.py:58 +#: netbox/users/models/users.py:77 msgid "groups" msgstr "grupos" -#: extras/models/notifications.py:143 users/models/users.py:93 +#: netbox/extras/models/notifications.py:143 netbox/users/models/users.py:93 msgid "users" msgstr "usuarios" -#: extras/models/notifications.py:152 +#: netbox/extras/models/notifications.py:152 msgid "notification group" msgstr "grupo de notificaciones" -#: extras/models/notifications.py:153 +#: netbox/extras/models/notifications.py:153 msgid "notification groups" msgstr "grupos de notificaciones" -#: extras/models/notifications.py:217 +#: netbox/extras/models/notifications.py:217 msgid "subscription" msgstr "suscripción" -#: extras/models/notifications.py:218 +#: netbox/extras/models/notifications.py:218 msgid "subscriptions" msgstr "suscripciones" -#: extras/models/scripts.py:42 +#: netbox/extras/models/scripts.py:42 msgid "is executable" msgstr "es ejecutable" -#: extras/models/scripts.py:64 +#: netbox/extras/models/scripts.py:64 msgid "script" msgstr "secuencia de comandos" -#: extras/models/scripts.py:65 +#: netbox/extras/models/scripts.py:65 msgid "scripts" msgstr "scripts" -#: extras/models/scripts.py:111 +#: netbox/extras/models/scripts.py:111 msgid "script module" msgstr "módulo de script" -#: extras/models/scripts.py:112 +#: netbox/extras/models/scripts.py:112 msgid "script modules" msgstr "módulos de script" -#: extras/models/search.py:22 +#: netbox/extras/models/search.py:22 msgid "timestamp" msgstr "marca de tiempo" -#: extras/models/search.py:37 +#: netbox/extras/models/search.py:37 msgid "field" msgstr "campo" -#: extras/models/search.py:45 +#: netbox/extras/models/search.py:45 msgid "value" msgstr "valor" -#: extras/models/search.py:56 +#: netbox/extras/models/search.py:56 msgid "cached value" msgstr "valor almacenado en caché" -#: extras/models/search.py:57 +#: netbox/extras/models/search.py:57 msgid "cached values" msgstr "valores en caché" -#: extras/models/staging.py:44 +#: netbox/extras/models/staging.py:44 msgid "branch" msgstr "sucursal" -#: extras/models/staging.py:45 +#: netbox/extras/models/staging.py:45 msgid "branches" msgstr "sucursales" -#: extras/models/staging.py:97 +#: netbox/extras/models/staging.py:97 msgid "staged change" msgstr "cambio por etapas" -#: extras/models/staging.py:98 +#: netbox/extras/models/staging.py:98 msgid "staged changes" msgstr "cambios por etapas" -#: extras/models/tags.py:40 +#: netbox/extras/models/tags.py:40 msgid "The object type(s) to which this tag can be applied." msgstr "Los tipos de objeto a los que se puede aplicar esta etiqueta." -#: extras/models/tags.py:49 +#: netbox/extras/models/tags.py:49 msgid "tag" msgstr "etiqueta" -#: extras/models/tags.py:50 +#: netbox/extras/models/tags.py:50 msgid "tags" msgstr "etiquetas" -#: extras/models/tags.py:78 +#: netbox/extras/models/tags.py:78 msgid "tagged item" msgstr "artículo etiquetado" -#: extras/models/tags.py:79 +#: netbox/extras/models/tags.py:79 msgid "tagged items" msgstr "artículos etiquetados" -#: extras/scripts.py:429 +#: netbox/extras/scripts.py:429 msgid "Script Data" msgstr "Datos del script" -#: extras/scripts.py:433 +#: netbox/extras/scripts.py:433 msgid "Script Execution Parameters" msgstr "Parámetros de ejecución del script" -#: extras/tables/columns.py:12 templates/htmx/notifications.html:18 +#: netbox/extras/tables/columns.py:12 +#: netbox/templates/htmx/notifications.html:18 msgid "Dismiss" msgstr "Descartar" -#: extras/tables/tables.py:62 extras/tables/tables.py:159 -#: extras/tables/tables.py:184 extras/tables/tables.py:250 -#: extras/tables/tables.py:276 extras/tables/tables.py:412 -#: extras/tables/tables.py:446 templates/extras/customfield.html:105 -#: templates/extras/eventrule.html:27 templates/users/objectpermission.html:64 -#: users/tables.py:80 +#: netbox/extras/tables/tables.py:62 netbox/extras/tables/tables.py:159 +#: netbox/extras/tables/tables.py:184 netbox/extras/tables/tables.py:250 +#: netbox/extras/tables/tables.py:276 netbox/extras/tables/tables.py:412 +#: netbox/extras/tables/tables.py:446 +#: netbox/templates/extras/customfield.html:105 +#: netbox/templates/extras/eventrule.html:27 +#: netbox/templates/users/objectpermission.html:64 netbox/users/tables.py:80 msgid "Object Types" msgstr "Tipos de objetos" -#: extras/tables/tables.py:69 +#: netbox/extras/tables/tables.py:69 msgid "Validate Uniqueness" msgstr "Valide la singularidad" -#: extras/tables/tables.py:73 +#: netbox/extras/tables/tables.py:73 msgid "Visible" msgstr "Visible" -#: extras/tables/tables.py:76 +#: netbox/extras/tables/tables.py:76 msgid "Editable" msgstr "Editable" -#: extras/tables/tables.py:82 +#: netbox/extras/tables/tables.py:82 msgid "Related Object Type" msgstr "Tipo de objeto relacionado" -#: extras/tables/tables.py:86 templates/extras/customfield.html:51 +#: netbox/extras/tables/tables.py:86 +#: netbox/templates/extras/customfield.html:51 msgid "Choice Set" msgstr "Set de elección" -#: extras/tables/tables.py:94 +#: netbox/extras/tables/tables.py:94 msgid "Is Cloneable" msgstr "Se puede clonar" -#: extras/tables/tables.py:98 templates/extras/customfield.html:118 +#: netbox/extras/tables/tables.py:98 +#: netbox/templates/extras/customfield.html:118 msgid "Minimum Value" msgstr "Valor mínimo" -#: extras/tables/tables.py:101 templates/extras/customfield.html:122 +#: netbox/extras/tables/tables.py:101 +#: netbox/templates/extras/customfield.html:122 msgid "Maximum Value" msgstr "Valor máximo" -#: extras/tables/tables.py:104 +#: netbox/extras/tables/tables.py:104 msgid "Validation Regex" msgstr "Regex de validación" -#: extras/tables/tables.py:137 +#: netbox/extras/tables/tables.py:137 msgid "Count" msgstr "Contar" -#: extras/tables/tables.py:140 +#: netbox/extras/tables/tables.py:140 msgid "Order Alphabetically" msgstr "Ordenar alfabéticamente" -#: extras/tables/tables.py:165 templates/extras/customlink.html:33 +#: netbox/extras/tables/tables.py:165 +#: netbox/templates/extras/customlink.html:33 msgid "New Window" msgstr "Ventana nueva" -#: extras/tables/tables.py:187 +#: netbox/extras/tables/tables.py:187 msgid "As Attachment" msgstr "Como archivo adjunto" -#: extras/tables/tables.py:195 extras/tables/tables.py:487 -#: extras/tables/tables.py:522 templates/core/datafile.html:24 -#: templates/dcim/device/render_config.html:22 -#: templates/extras/configcontext.html:39 -#: templates/extras/configtemplate.html:31 -#: templates/extras/exporttemplate.html:45 -#: templates/generic/bulk_import.html:35 -#: templates/virtualization/virtualmachine/render_config.html:22 +#: netbox/extras/tables/tables.py: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/generic/bulk_import.html:35 +#: netbox/templates/virtualization/virtualmachine/render_config.html:22 msgid "Data File" msgstr "Archivo de datos" -#: extras/tables/tables.py:200 extras/tables/tables.py:499 -#: extras/tables/tables.py:527 +#: netbox/extras/tables/tables.py:200 netbox/extras/tables/tables.py:499 +#: netbox/extras/tables/tables.py:527 msgid "Synced" msgstr "Sincronizado" -#: extras/tables/tables.py:227 +#: netbox/extras/tables/tables.py:227 msgid "Image" msgstr "Imagen" -#: extras/tables/tables.py:232 +#: netbox/extras/tables/tables.py:232 msgid "Size (Bytes)" msgstr "Tamaño (bytes)" -#: extras/tables/tables.py:339 +#: netbox/extras/tables/tables.py:339 msgid "Read" msgstr "Leer" -#: extras/tables/tables.py:382 +#: netbox/extras/tables/tables.py:382 msgid "SSL Validation" msgstr "Validación SSL" -#: extras/tables/tables.py:418 templates/extras/eventrule.html:37 +#: netbox/extras/tables/tables.py:418 +#: netbox/templates/extras/eventrule.html:37 msgid "Event Types" msgstr "Tipos de eventos" -#: extras/tables/tables.py:535 netbox/navigation/menu.py:77 -#: templates/dcim/devicerole.html:8 +#: netbox/extras/tables/tables.py:535 netbox/netbox/navigation/menu.py:77 +#: netbox/templates/dcim/devicerole.html:8 msgid "Device Roles" msgstr "Funciones del dispositivo" -#: extras/tables/tables.py:587 +#: netbox/extras/tables/tables.py:587 msgid "Comments (Short)" msgstr "Comentarios (cortos)" -#: extras/tables/tables.py:606 extras/tables/tables.py:640 +#: netbox/extras/tables/tables.py:606 netbox/extras/tables/tables.py:640 msgid "Line" msgstr "Línea" -#: extras/tables/tables.py:613 extras/tables/tables.py:650 +#: netbox/extras/tables/tables.py:613 netbox/extras/tables/tables.py:650 msgid "Level" msgstr "Nivel" -#: extras/tables/tables.py:619 extras/tables/tables.py:659 +#: netbox/extras/tables/tables.py:619 netbox/extras/tables/tables.py:659 msgid "Message" msgstr "Mensaje" -#: extras/tables/tables.py:643 +#: netbox/extras/tables/tables.py:643 msgid "Method" msgstr "Método" -#: extras/validators.py:15 +#: netbox/extras/validators.py:15 #, python-format msgid "Ensure this value is equal to %(limit_value)s." msgstr "Asegúrese de que este valor sea igual a %(limit_value)s." -#: extras/validators.py:26 +#: netbox/extras/validators.py:26 #, python-format msgid "Ensure this value does not equal %(limit_value)s." msgstr "Asegúrese de que este valor no sea igual %(limit_value)s." -#: extras/validators.py:37 +#: netbox/extras/validators.py:37 msgid "This field must be empty." msgstr "Este campo debe estar vacío." -#: extras/validators.py:52 +#: netbox/extras/validators.py:52 msgid "This field must not be empty." msgstr "Este campo no debe estar vacío." -#: extras/validators.py:94 +#: netbox/extras/validators.py:94 msgid "Validation rules must be passed as a dictionary" msgstr "Las reglas de validación se deben pasar como un diccionario" -#: extras/validators.py:119 +#: netbox/extras/validators.py:119 #, python-brace-format msgid "Custom validation failed for {attribute}: {exception}" msgstr "Fallo en la validación personalizada para {attribute}: {exception}" -#: extras/validators.py:133 +#: netbox/extras/validators.py:133 #, python-brace-format msgid "Invalid attribute \"{name}\" for request" msgstr "Atributo no válido»{name}«para solicitar" -#: extras/validators.py:150 +#: netbox/extras/validators.py:150 #, python-brace-format msgid "Invalid attribute \"{name}\" for {model}" msgstr "Atributo no válido»{name}«para {model}" -#: extras/views.py:960 +#: netbox/extras/views.py:960 msgid "Your dashboard has been reset." msgstr "Tu panel de control se ha restablecido." -#: extras/views.py:1006 +#: netbox/extras/views.py:1006 msgid "Added widget: " msgstr "Widget añadido: " -#: extras/views.py:1047 +#: netbox/extras/views.py:1047 msgid "Updated widget: " msgstr "Widget actualizado: " -#: extras/views.py:1083 +#: netbox/extras/views.py:1083 msgid "Deleted widget: " msgstr "Widget eliminado: " -#: extras/views.py:1085 +#: netbox/extras/views.py:1085 msgid "Error deleting widget: " msgstr "Error al eliminar el widget: " -#: extras/views.py:1172 +#: netbox/extras/views.py:1175 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á " "ejecutando." -#: ipam/api/field_serializers.py:17 +#: netbox/ipam/api/field_serializers.py:17 msgid "Enter a valid IPv4 or IPv6 address with optional mask." msgstr "Introduzca una dirección IPv4 o IPv6 válida con máscara opcional." -#: ipam/api/field_serializers.py:24 +#: netbox/ipam/api/field_serializers.py:24 #, python-brace-format msgid "Invalid IP address format: {data}" msgstr "Formato de dirección IP no válido: {data}" -#: ipam/api/field_serializers.py:37 +#: netbox/ipam/api/field_serializers.py:37 msgid "Enter a valid IPv4 or IPv6 prefix and mask in CIDR notation." msgstr "" "Introduzca un prefijo y una máscara IPv4 o IPv6 válidos en notación CIDR." -#: ipam/api/field_serializers.py:44 +#: netbox/ipam/api/field_serializers.py:44 #, python-brace-format msgid "Invalid IP prefix format: {data}" msgstr "Formato de prefijo IP no válido: {data}" -#: ipam/api/views.py:358 +#: netbox/ipam/api/views.py:358 msgid "" "Insufficient space is available to accommodate the requested prefix size(s)" msgstr "" "No hay suficiente espacio disponible para los tamaños de prefijo solicitados" -#: ipam/choices.py:30 +#: netbox/ipam/choices.py:30 msgid "Container" msgstr "Contenedor" -#: ipam/choices.py:72 +#: netbox/ipam/choices.py:72 msgid "DHCP" msgstr "DHCP" -#: ipam/choices.py:73 +#: netbox/ipam/choices.py:73 msgid "SLAAC" msgstr "SLACO" -#: ipam/choices.py:89 +#: netbox/ipam/choices.py:89 msgid "Loopback" msgstr "Bucle invertido" -#: ipam/choices.py:91 +#: netbox/ipam/choices.py:91 msgid "Anycast" msgstr "Anycast" -#: ipam/choices.py:115 +#: netbox/ipam/choices.py:115 msgid "Standard" msgstr "Estándar" -#: ipam/choices.py:120 +#: netbox/ipam/choices.py:120 msgid "CheckPoint" msgstr "Punto de control" -#: ipam/choices.py:123 +#: netbox/ipam/choices.py:123 msgid "Cisco" msgstr "Cisco" -#: ipam/choices.py:137 +#: netbox/ipam/choices.py:137 msgid "Plaintext" msgstr "Texto plano" -#: ipam/fields.py:36 +#: netbox/ipam/fields.py:36 #, python-brace-format msgid "Invalid IP address format: {address}" msgstr "Formato de dirección IP no válido: {address}" -#: ipam/filtersets.py:48 vpn/filtersets.py:304 +#: netbox/ipam/filtersets.py:48 netbox/vpn/filtersets.py:304 msgid "Import target" msgstr "Objetivo de importación" -#: ipam/filtersets.py:54 vpn/filtersets.py:310 +#: netbox/ipam/filtersets.py:54 netbox/vpn/filtersets.py:310 msgid "Import target (name)" msgstr "Destino de importación (nombre)" -#: ipam/filtersets.py:59 vpn/filtersets.py:315 +#: netbox/ipam/filtersets.py:59 netbox/vpn/filtersets.py:315 msgid "Export target" msgstr "Objetivo de exportación" -#: ipam/filtersets.py:65 vpn/filtersets.py:321 +#: netbox/ipam/filtersets.py:65 netbox/vpn/filtersets.py:321 msgid "Export target (name)" msgstr "Destino de exportación (nombre)" -#: ipam/filtersets.py:86 +#: netbox/ipam/filtersets.py:86 msgid "Importing VRF" msgstr "Importación de VRF" -#: ipam/filtersets.py:92 +#: netbox/ipam/filtersets.py:92 msgid "Import VRF (RD)" msgstr "Importar VRF (RD)" -#: ipam/filtersets.py:97 +#: netbox/ipam/filtersets.py:97 msgid "Exporting VRF" msgstr "Exportación de VRF" -#: ipam/filtersets.py:103 +#: netbox/ipam/filtersets.py:103 msgid "Export VRF (RD)" msgstr "Exportar VRF (RD)" -#: ipam/filtersets.py:108 +#: netbox/ipam/filtersets.py:108 msgid "Importing L2VPN" msgstr "Importación de L2VPN" -#: ipam/filtersets.py:114 +#: netbox/ipam/filtersets.py:114 msgid "Importing L2VPN (identifier)" msgstr "Importación de L2VPN (identificador)" -#: ipam/filtersets.py:119 +#: netbox/ipam/filtersets.py:119 msgid "Exporting L2VPN" msgstr "Exportación de L2VPN" -#: ipam/filtersets.py:125 +#: netbox/ipam/filtersets.py:125 msgid "Exporting L2VPN (identifier)" msgstr "Exportación de L2VPN (identificador)" -#: ipam/filtersets.py:155 ipam/filtersets.py:281 ipam/forms/model_forms.py:229 -#: ipam/tables/ip.py:212 templates/ipam/prefix.html:12 +#: netbox/ipam/filtersets.py:155 netbox/ipam/filtersets.py:281 +#: netbox/ipam/forms/model_forms.py:229 netbox/ipam/tables/ip.py:212 +#: netbox/templates/ipam/prefix.html:12 msgid "Prefix" msgstr "Prefijo" -#: ipam/filtersets.py:159 ipam/filtersets.py:198 ipam/filtersets.py:221 +#: netbox/ipam/filtersets.py:159 netbox/ipam/filtersets.py:198 +#: netbox/ipam/filtersets.py:221 msgid "RIR (ID)" msgstr "RIR (ID)" -#: ipam/filtersets.py:165 ipam/filtersets.py:204 ipam/filtersets.py:227 +#: netbox/ipam/filtersets.py:165 netbox/ipam/filtersets.py:204 +#: netbox/ipam/filtersets.py:227 msgid "RIR (slug)" msgstr "RIR (babosa)" -#: ipam/filtersets.py:285 +#: netbox/ipam/filtersets.py:285 msgid "Within prefix" msgstr "Dentro del prefijo" -#: ipam/filtersets.py:289 +#: netbox/ipam/filtersets.py:289 msgid "Within and including prefix" msgstr "Dentro del prefijo e incluído" -#: ipam/filtersets.py:293 +#: netbox/ipam/filtersets.py:293 msgid "Prefixes which contain this prefix or IP" msgstr "Prefijos que contienen este prefijo o IP" -#: ipam/filtersets.py:304 ipam/filtersets.py:572 ipam/forms/bulk_edit.py:343 -#: ipam/forms/filtersets.py:196 ipam/forms/filtersets.py:331 +#: netbox/ipam/filtersets.py:304 netbox/ipam/filtersets.py:572 +#: netbox/ipam/forms/bulk_edit.py:343 netbox/ipam/forms/filtersets.py:196 +#: netbox/ipam/forms/filtersets.py:331 msgid "Mask length" msgstr "Longitud de la máscara" -#: ipam/filtersets.py:373 vpn/filtersets.py:427 +#: netbox/ipam/filtersets.py:373 netbox/vpn/filtersets.py:427 msgid "VLAN (ID)" msgstr "VLAN (ID)" -#: ipam/filtersets.py:377 vpn/filtersets.py:422 +#: netbox/ipam/filtersets.py:377 netbox/vpn/filtersets.py:422 msgid "VLAN number (1-4094)" msgstr "Número de VLAN (1-4094)" -#: ipam/filtersets.py:471 ipam/filtersets.py:475 ipam/filtersets.py:567 -#: ipam/forms/model_forms.py:463 templates/tenancy/contact.html:53 -#: tenancy/forms/bulk_edit.py:113 +#: netbox/ipam/filtersets.py:471 netbox/ipam/filtersets.py:475 +#: netbox/ipam/filtersets.py:567 netbox/ipam/forms/model_forms.py:496 +#: netbox/templates/tenancy/contact.html:53 +#: netbox/tenancy/forms/bulk_edit.py:113 msgid "Address" msgstr "Dirección" -#: ipam/filtersets.py:479 +#: netbox/ipam/filtersets.py:479 msgid "Ranges which contain this prefix or IP" msgstr "Intervalos que contienen este prefijo o IP" -#: ipam/filtersets.py:507 ipam/filtersets.py:563 +#: netbox/ipam/filtersets.py:507 netbox/ipam/filtersets.py:563 msgid "Parent prefix" msgstr "Prefijo principal" -#: ipam/filtersets.py:616 ipam/filtersets.py:856 ipam/filtersets.py:1131 -#: vpn/filtersets.py:385 +#: netbox/ipam/filtersets.py:616 netbox/ipam/filtersets.py:856 +#: netbox/ipam/filtersets.py:1131 netbox/vpn/filtersets.py:385 msgid "Virtual machine (name)" msgstr "Máquina virtual (nombre)" -#: ipam/filtersets.py:621 ipam/filtersets.py:861 ipam/filtersets.py:1125 -#: virtualization/filtersets.py:282 virtualization/filtersets.py:321 -#: vpn/filtersets.py:390 +#: netbox/ipam/filtersets.py:621 netbox/ipam/filtersets.py:861 +#: netbox/ipam/filtersets.py:1125 netbox/virtualization/filtersets.py:282 +#: netbox/virtualization/filtersets.py:321 netbox/vpn/filtersets.py:390 msgid "Virtual machine (ID)" msgstr "Máquina virtual (ID)" -#: ipam/filtersets.py:627 vpn/filtersets.py:97 vpn/filtersets.py:396 +#: netbox/ipam/filtersets.py:627 netbox/vpn/filtersets.py:97 +#: netbox/vpn/filtersets.py:396 msgid "Interface (name)" msgstr "Interfaz (nombre)" -#: ipam/filtersets.py:638 vpn/filtersets.py:108 vpn/filtersets.py:407 +#: netbox/ipam/filtersets.py:638 netbox/vpn/filtersets.py:108 +#: netbox/vpn/filtersets.py:407 msgid "VM interface (name)" msgstr "Interfaz VM (nombre)" -#: ipam/filtersets.py:643 vpn/filtersets.py:113 +#: netbox/ipam/filtersets.py:643 netbox/vpn/filtersets.py:113 msgid "VM interface (ID)" msgstr "Interfaz de máquina virtual (ID)" -#: ipam/filtersets.py:648 +#: netbox/ipam/filtersets.py:648 msgid "FHRP group (ID)" msgstr "Grupo FHRP (ID)" -#: ipam/filtersets.py:652 +#: netbox/ipam/filtersets.py:652 msgid "Is assigned to an interface" msgstr "Está asignado a una interfaz" -#: ipam/filtersets.py:656 +#: netbox/ipam/filtersets.py:656 msgid "Is assigned" msgstr "Está asignado" -#: ipam/filtersets.py:668 +#: netbox/ipam/filtersets.py:668 msgid "Service (ID)" msgstr "Servicio (ID)" -#: ipam/filtersets.py:673 +#: netbox/ipam/filtersets.py:673 msgid "NAT inside IP address (ID)" msgstr "Dirección IP interna de NAT (ID)" -#: ipam/filtersets.py:1041 ipam/forms/bulk_import.py:322 +#: netbox/ipam/filtersets.py:1041 netbox/ipam/forms/bulk_import.py:322 msgid "Assigned interface" msgstr "Interfaz asignada" -#: ipam/filtersets.py:1046 +#: netbox/ipam/filtersets.py:1046 msgid "Assigned VM interface" msgstr "Interfaz VM asignada" -#: ipam/filtersets.py:1136 +#: netbox/ipam/filtersets.py:1136 msgid "IP address (ID)" msgstr "Dirección IP (ID)" -#: ipam/filtersets.py:1142 ipam/models/ip.py:788 +#: netbox/ipam/filtersets.py:1142 netbox/ipam/models/ip.py:788 msgid "IP address" msgstr "dirección IP" -#: ipam/filtersets.py:1167 +#: netbox/ipam/filtersets.py:1167 msgid "Primary IPv4 (ID)" msgstr "IPv4 principal (ID)" -#: ipam/filtersets.py:1172 +#: netbox/ipam/filtersets.py:1172 msgid "Primary IPv6 (ID)" msgstr "IPv6 principal (ID)" -#: ipam/formfields.py:14 +#: netbox/ipam/formfields.py:14 msgid "Enter a valid IPv4 or IPv6 address (without a mask)." msgstr "Introduzca una dirección IPv4 o IPv6 válida (sin máscara)." -#: ipam/formfields.py:32 +#: netbox/ipam/formfields.py:32 #, python-brace-format msgid "Invalid IPv4/IPv6 address format: {address}" msgstr "Formato de dirección IPv4/IPv6 no válido: {address}" -#: ipam/formfields.py:37 +#: netbox/ipam/formfields.py:37 msgid "This field requires an IP address without a mask." msgstr "Este campo requiere una dirección IP sin máscara." -#: ipam/formfields.py:39 ipam/formfields.py:61 +#: netbox/ipam/formfields.py:39 netbox/ipam/formfields.py:61 msgid "Please specify a valid IPv4 or IPv6 address." msgstr "Especifique una dirección IPv4 o IPv6 válida." -#: ipam/formfields.py:44 +#: netbox/ipam/formfields.py:44 msgid "Enter a valid IPv4 or IPv6 address (with CIDR mask)." msgstr "Introduzca una dirección IPv4 o IPv6 válida (con máscara CIDR)." -#: ipam/formfields.py:56 +#: netbox/ipam/formfields.py:56 msgid "CIDR mask (e.g. /24) is required." msgstr "Se requiere una máscara CIDR (por ejemplo, /24)." -#: ipam/forms/bulk_create.py:13 +#: netbox/ipam/forms/bulk_create.py:13 msgid "Address pattern" msgstr "Patrón de direcciones" -#: ipam/forms/bulk_edit.py:50 +#: netbox/ipam/forms/bulk_edit.py:50 msgid "Enforce unique space" msgstr "Haga valer un espacio único" -#: ipam/forms/bulk_edit.py:88 +#: netbox/ipam/forms/bulk_edit.py:88 msgid "Is private" msgstr "Es privado" -#: ipam/forms/bulk_edit.py:109 ipam/forms/bulk_edit.py:138 -#: ipam/forms/bulk_edit.py:163 ipam/forms/bulk_import.py:89 -#: ipam/forms/bulk_import.py:109 ipam/forms/bulk_import.py:129 -#: ipam/forms/filtersets.py:110 ipam/forms/filtersets.py:125 -#: ipam/forms/filtersets.py:148 ipam/forms/model_forms.py:96 -#: ipam/forms/model_forms.py:109 ipam/forms/model_forms.py:131 -#: ipam/forms/model_forms.py:149 ipam/models/asns.py:31 -#: ipam/models/asns.py:103 ipam/models/ip.py:71 ipam/models/ip.py:90 -#: ipam/tables/asn.py:20 ipam/tables/asn.py:45 -#: templates/ipam/aggregate.html:18 templates/ipam/asn.html:27 -#: templates/ipam/asnrange.html:19 templates/ipam/rir.html:19 +#: netbox/ipam/forms/bulk_edit.py: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/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" -#: ipam/forms/bulk_edit.py:171 +#: netbox/ipam/forms/bulk_edit.py:171 msgid "Date added" msgstr "Fecha añadida" -#: ipam/forms/bulk_edit.py:229 ipam/forms/model_forms.py:586 -#: ipam/forms/model_forms.py:633 ipam/tables/ip.py:251 -#: templates/ipam/vlan_edit.html:37 templates/ipam/vlangroup.html:27 +#: 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/templates/ipam/vlangroup.html:27 msgid "VLAN Group" msgstr "Grupo VLAN" -#: ipam/forms/bulk_edit.py:234 ipam/forms/bulk_import.py:185 -#: ipam/forms/filtersets.py:256 ipam/forms/model_forms.py:218 -#: ipam/models/vlans.py:234 ipam/tables/ip.py:255 -#: templates/ipam/prefix.html:60 templates/ipam/vlan.html:12 -#: templates/ipam/vlan/base.html:6 templates/ipam/vlan_edit.html:10 -#: templates/wireless/wirelesslan.html:30 vpn/forms/bulk_import.py:304 -#: vpn/forms/filtersets.py:284 vpn/forms/model_forms.py:433 -#: vpn/forms/model_forms.py:452 wireless/forms/bulk_edit.py:55 -#: wireless/forms/bulk_import.py:48 wireless/forms/model_forms.py:48 -#: wireless/models.py:102 +#: 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/templates/ipam/vlan/base.html:6 +#: netbox/templates/ipam/vlan_edit.html:10 +#: netbox/templates/wireless/wirelesslan.html:30 +#: netbox/vpn/forms/bulk_import.py:304 netbox/vpn/forms/filtersets.py:284 +#: netbox/vpn/forms/model_forms.py:433 netbox/vpn/forms/model_forms.py:452 +#: netbox/wireless/forms/bulk_edit.py:55 +#: netbox/wireless/forms/bulk_import.py:48 +#: netbox/wireless/forms/model_forms.py:48 netbox/wireless/models.py:102 msgid "VLAN" msgstr "VLAN" -#: ipam/forms/bulk_edit.py:245 +#: netbox/ipam/forms/bulk_edit.py:245 msgid "Prefix length" msgstr "Longitud del prefijo" -#: ipam/forms/bulk_edit.py:268 ipam/forms/filtersets.py:241 -#: templates/ipam/prefix.html:85 +#: netbox/ipam/forms/bulk_edit.py:268 netbox/ipam/forms/filtersets.py:241 +#: netbox/templates/ipam/prefix.html:85 msgid "Is a pool" msgstr "Es una piscina" -#: ipam/forms/bulk_edit.py:273 ipam/forms/bulk_edit.py:318 -#: ipam/forms/filtersets.py:248 ipam/forms/filtersets.py:293 -#: ipam/models/ip.py:272 ipam/models/ip.py:539 +#: netbox/ipam/forms/bulk_edit.py: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 msgid "Treat as fully utilized" msgstr "Tratar como si se hubiera utilizado por completo" -#: ipam/forms/bulk_edit.py:287 ipam/forms/filtersets.py:171 +#: netbox/ipam/forms/bulk_edit.py:287 netbox/ipam/forms/filtersets.py:171 msgid "VLAN Assignment" msgstr "Asignación de VLAN" -#: ipam/forms/bulk_edit.py:366 ipam/models/ip.py:772 +#: netbox/ipam/forms/bulk_edit.py:366 netbox/ipam/models/ip.py:772 msgid "DNS name" msgstr "Nombre DNS" -#: ipam/forms/bulk_edit.py:387 ipam/forms/bulk_edit.py:534 -#: ipam/forms/bulk_import.py:394 ipam/forms/bulk_import.py:469 -#: ipam/forms/bulk_import.py:495 ipam/forms/filtersets.py:390 -#: ipam/forms/filtersets.py:530 templates/ipam/fhrpgroup.html:22 -#: templates/ipam/inc/panels/fhrp_groups.html:24 -#: templates/ipam/service.html:32 templates/ipam/servicetemplate.html:19 +#: netbox/ipam/forms/bulk_edit.py: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/templates/ipam/inc/panels/fhrp_groups.html:24 +#: netbox/templates/ipam/service.html:32 +#: netbox/templates/ipam/servicetemplate.html:19 msgid "Protocol" msgstr "Protocolo" -#: ipam/forms/bulk_edit.py:394 ipam/forms/filtersets.py:397 -#: ipam/tables/fhrp.py:22 templates/ipam/fhrpgroup.html:26 +#: netbox/ipam/forms/bulk_edit.py:394 netbox/ipam/forms/filtersets.py:397 +#: netbox/ipam/tables/fhrp.py:22 netbox/templates/ipam/fhrpgroup.html:26 msgid "Group ID" msgstr "ID de grupo" -#: ipam/forms/bulk_edit.py:399 ipam/forms/filtersets.py:402 -#: wireless/forms/bulk_edit.py:68 wireless/forms/bulk_edit.py:115 -#: wireless/forms/bulk_import.py:62 wireless/forms/bulk_import.py:65 -#: wireless/forms/bulk_import.py:104 wireless/forms/bulk_import.py:107 -#: wireless/forms/filtersets.py:54 wireless/forms/filtersets.py:88 +#: netbox/ipam/forms/bulk_edit.py: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 msgid "Authentication type" msgstr "Tipo de autenticación" -#: ipam/forms/bulk_edit.py:404 ipam/forms/filtersets.py:406 +#: netbox/ipam/forms/bulk_edit.py:404 netbox/ipam/forms/filtersets.py:406 msgid "Authentication key" msgstr "Clave de autenticación" -#: ipam/forms/bulk_edit.py:421 ipam/forms/filtersets.py:383 -#: ipam/forms/model_forms.py:474 netbox/navigation/menu.py:386 -#: templates/ipam/fhrpgroup.html:49 -#: templates/wireless/inc/authentication_attrs.html:5 -#: wireless/forms/bulk_edit.py:91 wireless/forms/bulk_edit.py:149 -#: wireless/forms/filtersets.py:36 wireless/forms/filtersets.py:76 -#: wireless/forms/model_forms.py:55 wireless/forms/model_forms.py:171 +#: 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/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 msgid "Authentication" msgstr "AUTENTICACIÓN" -#: ipam/forms/bulk_edit.py:436 ipam/forms/model_forms.py:575 +#: netbox/ipam/forms/bulk_edit.py:436 netbox/ipam/forms/model_forms.py:608 msgid "Scope type" msgstr "Tipo de ámbito" -#: ipam/forms/bulk_edit.py:439 ipam/forms/bulk_edit.py:453 -#: ipam/forms/model_forms.py:578 ipam/forms/model_forms.py:588 -#: ipam/tables/vlans.py:71 templates/ipam/vlangroup.html:38 +#: 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" -#: ipam/forms/bulk_edit.py:446 ipam/models/vlans.py:60 +#: netbox/ipam/forms/bulk_edit.py:446 netbox/ipam/models/vlans.py:60 msgid "VLAN ID ranges" msgstr "Intervalos de ID de VLAN" -#: ipam/forms/bulk_edit.py:525 +#: netbox/ipam/forms/bulk_edit.py:525 msgid "Site & Group" msgstr "Sitio y grupo" -#: ipam/forms/bulk_edit.py:539 ipam/forms/model_forms.py:659 -#: ipam/forms/model_forms.py:691 ipam/tables/services.py:19 -#: ipam/tables/services.py:49 templates/ipam/service.html:36 -#: templates/ipam/servicetemplate.html:23 +#: netbox/ipam/forms/bulk_edit.py:539 netbox/ipam/forms/model_forms.py:692 +#: netbox/ipam/forms/model_forms.py:724 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" -#: ipam/forms/bulk_import.py:48 +#: netbox/ipam/forms/bulk_import.py:48 msgid "Import route targets" msgstr "Importar destinos de ruta" -#: ipam/forms/bulk_import.py:54 +#: netbox/ipam/forms/bulk_import.py:54 msgid "Export route targets" msgstr "Exportar destinos de ruta" -#: ipam/forms/bulk_import.py:92 ipam/forms/bulk_import.py:112 -#: ipam/forms/bulk_import.py:132 +#: netbox/ipam/forms/bulk_import.py:92 netbox/ipam/forms/bulk_import.py:112 +#: netbox/ipam/forms/bulk_import.py:132 msgid "Assigned RIR" msgstr "RIR asignado" -#: ipam/forms/bulk_import.py:182 +#: netbox/ipam/forms/bulk_import.py:182 msgid "VLAN's group (if any)" msgstr "Grupo de VLAN (si lo hay)" -#: ipam/forms/bulk_import.py:308 +#: netbox/ipam/forms/bulk_import.py:308 msgid "Parent device of assigned interface (if any)" msgstr "Dispositivo principal de la interfaz asignada (si existe)" -#: ipam/forms/bulk_import.py:311 ipam/forms/bulk_import.py:488 -#: ipam/forms/model_forms.py:685 virtualization/filtersets.py:288 -#: virtualization/filtersets.py:327 virtualization/forms/bulk_edit.py:200 -#: virtualization/forms/bulk_edit.py:326 -#: virtualization/forms/bulk_import.py:146 -#: virtualization/forms/bulk_import.py:207 -#: virtualization/forms/filtersets.py:212 -#: virtualization/forms/filtersets.py:248 -#: virtualization/forms/model_forms.py:288 vpn/forms/bulk_import.py:93 -#: vpn/forms/bulk_import.py:290 +#: 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" -#: ipam/forms/bulk_import.py:315 +#: netbox/ipam/forms/bulk_import.py:315 msgid "Parent VM of assigned interface (if any)" msgstr "VM principal de la interfaz asignada (si existe)" -#: ipam/forms/bulk_import.py:325 +#: netbox/ipam/forms/bulk_import.py:325 msgid "Is primary" msgstr "Es primaria" -#: ipam/forms/bulk_import.py:326 +#: 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" -#: ipam/forms/bulk_import.py:365 +#: netbox/ipam/forms/bulk_import.py:330 +msgid "Is out-of-band" +msgstr "" + +#: netbox/ipam/forms/bulk_import.py:331 +msgid "Designate this as the out-of-band IP address for the assigned device" +msgstr "" + +#: netbox/ipam/forms/bulk_import.py:371 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" -#: ipam/forms/bulk_import.py:369 +#: netbox/ipam/forms/bulk_import.py:375 +msgid "No device specified; cannot set as out-of-band IP" +msgstr "" + +#: netbox/ipam/forms/bulk_import.py:379 +msgid "Cannot set out-of-band IP for virtual machines" +msgstr "" + +#: netbox/ipam/forms/bulk_import.py:383 msgid "No interface specified; cannot set as primary IP" msgstr "" "No se especificó ninguna interfaz; no se puede establecer como IP principal" -#: ipam/forms/bulk_import.py:398 +#: netbox/ipam/forms/bulk_import.py:387 +msgid "No interface specified; cannot set as out-of-band IP" +msgstr "" + +#: netbox/ipam/forms/bulk_import.py:422 msgid "Auth type" msgstr "Tipo de autenticación" -#: ipam/forms/bulk_import.py:413 +#: netbox/ipam/forms/bulk_import.py:437 msgid "Scope type (app & model)" msgstr "Tipo de ámbito (aplicación y modelo)" -#: ipam/forms/bulk_import.py:440 +#: netbox/ipam/forms/bulk_import.py:464 msgid "Assigned VLAN group" msgstr "Grupo de VLAN asignado" -#: ipam/forms/bulk_import.py:471 ipam/forms/bulk_import.py:497 +#: netbox/ipam/forms/bulk_import.py:495 netbox/ipam/forms/bulk_import.py:521 msgid "IP protocol" msgstr "Protocolo IP" -#: ipam/forms/bulk_import.py:485 +#: netbox/ipam/forms/bulk_import.py:509 msgid "Required if not assigned to a VM" msgstr "Obligatorio si no está asignado a una VM" -#: ipam/forms/bulk_import.py:492 +#: netbox/ipam/forms/bulk_import.py:516 msgid "Required if not assigned to a device" msgstr "Obligatorio si no está asignado a un dispositivo" -#: ipam/forms/bulk_import.py:517 +#: netbox/ipam/forms/bulk_import.py:541 #, python-brace-format msgid "{ip} is not assigned to this device/VM." msgstr "{ip} no está asignado a este dispositivo/máquina virtual." -#: ipam/forms/filtersets.py:47 ipam/forms/model_forms.py:63 -#: netbox/navigation/menu.py:189 vpn/forms/model_forms.py:410 +#: 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 msgid "Route Targets" msgstr "Objetivos de ruta" -#: ipam/forms/filtersets.py:53 ipam/forms/model_forms.py:50 -#: vpn/forms/filtersets.py:224 vpn/forms/model_forms.py:397 +#: 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 msgid "Import targets" msgstr "Importar objetivos" -#: ipam/forms/filtersets.py:58 ipam/forms/model_forms.py:55 -#: vpn/forms/filtersets.py:229 vpn/forms/model_forms.py:402 +#: 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 msgid "Export targets" msgstr "Objetivos de exportación" -#: ipam/forms/filtersets.py:73 +#: netbox/ipam/forms/filtersets.py:73 msgid "Imported by VRF" msgstr "Importado por VRF" -#: ipam/forms/filtersets.py:78 +#: netbox/ipam/forms/filtersets.py:78 msgid "Exported by VRF" msgstr "Exportado por VRF" -#: ipam/forms/filtersets.py:87 ipam/tables/ip.py:89 templates/ipam/rir.html:30 +#: netbox/ipam/forms/filtersets.py:87 netbox/ipam/tables/ip.py:89 +#: netbox/templates/ipam/rir.html:30 msgid "Private" msgstr "Privada" -#: ipam/forms/filtersets.py:105 ipam/forms/filtersets.py:191 -#: ipam/forms/filtersets.py:272 ipam/forms/filtersets.py:326 +#: netbox/ipam/forms/filtersets.py:105 netbox/ipam/forms/filtersets.py:191 +#: netbox/ipam/forms/filtersets.py:272 netbox/ipam/forms/filtersets.py:326 msgid "Address family" msgstr "Familia de direcciones" -#: ipam/forms/filtersets.py:119 templates/ipam/asnrange.html:25 +#: netbox/ipam/forms/filtersets.py:119 netbox/templates/ipam/asnrange.html:25 msgid "Range" msgstr "Alcance" -#: ipam/forms/filtersets.py:128 +#: netbox/ipam/forms/filtersets.py:128 msgid "Start" msgstr "Comenzar" -#: ipam/forms/filtersets.py:132 +#: netbox/ipam/forms/filtersets.py:132 msgid "End" msgstr "Fin" -#: ipam/forms/filtersets.py:186 +#: netbox/ipam/forms/filtersets.py:186 msgid "Search within" msgstr "Busca dentro" -#: ipam/forms/filtersets.py:207 ipam/forms/filtersets.py:342 +#: netbox/ipam/forms/filtersets.py:207 netbox/ipam/forms/filtersets.py:342 msgid "Present in VRF" msgstr "Presente en VRF" -#: ipam/forms/filtersets.py:311 +#: netbox/ipam/forms/filtersets.py:311 msgid "Device/VM" msgstr "Dispositivo/VM" -#: ipam/forms/filtersets.py:321 +#: netbox/ipam/forms/filtersets.py:321 msgid "Parent Prefix" msgstr "Prefijo principal" -#: ipam/forms/filtersets.py:347 +#: netbox/ipam/forms/filtersets.py:347 msgid "Assigned Device" msgstr "Dispositivo asignado" -#: ipam/forms/filtersets.py:352 +#: netbox/ipam/forms/filtersets.py:352 msgid "Assigned VM" msgstr "VM asignada" -#: ipam/forms/filtersets.py:366 +#: netbox/ipam/forms/filtersets.py:366 msgid "Assigned to an interface" msgstr "Asignado a una interfaz" -#: ipam/forms/filtersets.py:373 templates/ipam/ipaddress.html:51 +#: netbox/ipam/forms/filtersets.py:373 netbox/templates/ipam/ipaddress.html:51 msgid "DNS Name" msgstr "Nombre DNS" -#: ipam/forms/filtersets.py:416 ipam/models/vlans.py:235 ipam/tables/ip.py:176 -#: ipam/tables/vlans.py:82 ipam/views.py:971 netbox/navigation/menu.py:193 -#: netbox/navigation/menu.py:195 +#: 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 msgid "VLANs" msgstr "VLAN" -#: ipam/forms/filtersets.py:457 +#: netbox/ipam/forms/filtersets.py:457 msgid "Contains VLAN ID" msgstr "Contiene el identificador de VLAN" -#: ipam/forms/filtersets.py:513 ipam/models/vlans.py:176 -#: templates/ipam/vlan.html:31 +#: netbox/ipam/forms/filtersets.py:513 netbox/ipam/models/vlans.py:192 +#: netbox/templates/ipam/vlan.html:31 msgid "VLAN ID" msgstr "IDENTIFICADOR DE VLAN" -#: ipam/forms/filtersets.py:556 ipam/forms/model_forms.py:320 -#: ipam/forms/model_forms.py:713 ipam/forms/model_forms.py:739 -#: ipam/tables/vlans.py:195 templates/virtualization/virtualdisk.html:21 -#: templates/virtualization/virtualmachine.html:12 -#: templates/virtualization/vminterface.html:21 -#: templates/vpn/tunneltermination.html:25 -#: virtualization/forms/filtersets.py:197 -#: virtualization/forms/filtersets.py:242 -#: virtualization/forms/model_forms.py:220 -#: virtualization/tables/virtualmachines.py:135 -#: virtualization/tables/virtualmachines.py:190 vpn/choices.py:45 -#: vpn/forms/filtersets.py:293 vpn/forms/model_forms.py:160 -#: vpn/forms/model_forms.py:171 vpn/forms/model_forms.py:273 -#: vpn/forms/model_forms.py:454 +#: netbox/ipam/forms/filtersets.py: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" -#: ipam/forms/model_forms.py:80 templates/ipam/routetarget.html:10 +#: netbox/ipam/forms/model_forms.py:80 +#: netbox/templates/ipam/routetarget.html:10 msgid "Route Target" msgstr "Objetivo de ruta" -#: ipam/forms/model_forms.py:114 ipam/tables/ip.py:117 -#: templates/ipam/aggregate.html:11 templates/ipam/prefix.html:38 +#: netbox/ipam/forms/model_forms.py:114 netbox/ipam/tables/ip.py:117 +#: netbox/templates/ipam/aggregate.html:11 +#: netbox/templates/ipam/prefix.html:38 msgid "Aggregate" msgstr "Agregado" -#: ipam/forms/model_forms.py:135 templates/ipam/asnrange.html:12 +#: netbox/ipam/forms/model_forms.py:135 netbox/templates/ipam/asnrange.html:12 msgid "ASN Range" msgstr "Gama ASN" -#: ipam/forms/model_forms.py:231 +#: netbox/ipam/forms/model_forms.py:231 msgid "Site/VLAN Assignment" msgstr "Asignación de sitio/VLAN" -#: ipam/forms/model_forms.py:259 templates/ipam/iprange.html:10 +#: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10 msgid "IP Range" msgstr "Rango de IP" -#: ipam/forms/model_forms.py:295 ipam/forms/model_forms.py:321 -#: ipam/forms/model_forms.py:473 templates/ipam/fhrpgroup.html:19 +#: 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 msgid "FHRP Group" msgstr "Grupo FHRP" -#: ipam/forms/model_forms.py:310 +#: netbox/ipam/forms/model_forms.py:310 msgid "Make this the primary IP for the device/VM" msgstr "Haga que esta sea la IP principal del dispositivo/VM" -#: ipam/forms/model_forms.py:325 +#: netbox/ipam/forms/model_forms.py:314 +msgid "Make this the out-of-band IP for the device" +msgstr "" + +#: netbox/ipam/forms/model_forms.py:329 msgid "NAT IP (Inside)" msgstr "NAT IP (interior)" -#: ipam/forms/model_forms.py:384 +#: netbox/ipam/forms/model_forms.py:391 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." -#: ipam/forms/model_forms.py:390 ipam/models/ip.py:897 -msgid "" -"Cannot reassign IP address while it is designated as the primary IP for the " -"parent object" +#: 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 mientras esté designada como la IP " -"principal del objeto principal" -#: ipam/forms/model_forms.py:400 +#: netbox/ipam/forms/model_forms.py:402 +msgid "Cannot reassign out-of-Band IP address for the parent device" +msgstr "" + +#: netbox/ipam/forms/model_forms.py:412 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." -#: ipam/forms/model_forms.py:475 +#: netbox/ipam/forms/model_forms.py:420 +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 msgid "Virtual IP Address" msgstr "Dirección IP virtual" -#: ipam/forms/model_forms.py:560 +#: netbox/ipam/forms/model_forms.py:593 msgid "Assignment already exists" msgstr "La asignación ya existe" -#: ipam/forms/model_forms.py:569 templates/ipam/vlangroup.html:42 +#: netbox/ipam/forms/model_forms.py:602 +#: netbox/templates/ipam/vlangroup.html:42 msgid "VLAN IDs" msgstr "ID de VLAN" -#: ipam/forms/model_forms.py:587 +#: netbox/ipam/forms/model_forms.py:620 msgid "Child VLANs" msgstr "VLAN secundarias" -#: ipam/forms/model_forms.py:664 ipam/forms/model_forms.py:696 +#: netbox/ipam/forms/model_forms.py:697 netbox/ipam/forms/model_forms.py:729 msgid "" "Comma-separated list of one or more port numbers. A range may be specified " "using a hyphen." @@ -9319,132 +9974,133 @@ msgstr "" "Lista separada por comas de uno o más números de puerto. Se puede " "especificar un rango mediante un guión." -#: ipam/forms/model_forms.py:669 templates/ipam/servicetemplate.html:12 +#: netbox/ipam/forms/model_forms.py:702 +#: netbox/templates/ipam/servicetemplate.html:12 msgid "Service Template" msgstr "Plantilla de servicio" -#: ipam/forms/model_forms.py:716 +#: netbox/ipam/forms/model_forms.py:749 msgid "Port(s)" msgstr "Puerto (s)" -#: ipam/forms/model_forms.py:717 ipam/forms/model_forms.py:745 -#: templates/ipam/service.html:21 +#: netbox/ipam/forms/model_forms.py:750 netbox/ipam/forms/model_forms.py:778 +#: netbox/templates/ipam/service.html:21 msgid "Service" msgstr "Servicio" -#: ipam/forms/model_forms.py:730 +#: netbox/ipam/forms/model_forms.py:763 msgid "Service template" msgstr "Plantilla de servicio" -#: ipam/forms/model_forms.py:742 +#: netbox/ipam/forms/model_forms.py:775 msgid "From Template" msgstr "Desde plantilla" -#: ipam/forms/model_forms.py:743 +#: netbox/ipam/forms/model_forms.py:776 msgid "Custom" msgstr "Personalizado" -#: ipam/forms/model_forms.py:773 +#: netbox/ipam/forms/model_forms.py:806 msgid "" "Must specify name, protocol, and port(s) if not using a service template." msgstr "" "Debe especificar el nombre, el protocolo y los puertos si no utiliza una " "plantilla de servicio." -#: ipam/models/asns.py:34 +#: netbox/ipam/models/asns.py:34 msgid "start" msgstr "comienzo" -#: ipam/models/asns.py:51 +#: netbox/ipam/models/asns.py:51 msgid "ASN range" msgstr "Gama ASN" -#: ipam/models/asns.py:52 +#: netbox/ipam/models/asns.py:52 msgid "ASN ranges" msgstr "Gamas de ASN" -#: ipam/models/asns.py:72 +#: netbox/ipam/models/asns.py:72 #, python-brace-format msgid "Starting ASN ({start}) must be lower than ending ASN ({end})." msgstr "Iniciar ASN ({start}) debe ser inferior al ASN final ({end})." -#: ipam/models/asns.py:104 +#: netbox/ipam/models/asns.py:104 msgid "Regional Internet Registry responsible for this AS number space" msgstr "Registro regional de Internet responsable de este espacio numérico AS" -#: ipam/models/asns.py:109 +#: netbox/ipam/models/asns.py:109 msgid "16- or 32-bit autonomous system number" msgstr "Número de sistema autónomo de 16 o 32 bits" -#: ipam/models/fhrp.py:22 +#: netbox/ipam/models/fhrp.py:22 msgid "group ID" msgstr "ID de grupo" -#: ipam/models/fhrp.py:30 ipam/models/services.py:22 +#: netbox/ipam/models/fhrp.py:30 netbox/ipam/models/services.py:22 msgid "protocol" msgstr "protocolo" -#: ipam/models/fhrp.py:38 wireless/models.py:28 +#: netbox/ipam/models/fhrp.py:38 netbox/wireless/models.py:28 msgid "authentication type" msgstr "tipo de autenticación" -#: ipam/models/fhrp.py:43 +#: netbox/ipam/models/fhrp.py:43 msgid "authentication key" msgstr "clave de autenticación" -#: ipam/models/fhrp.py:56 +#: netbox/ipam/models/fhrp.py:56 msgid "FHRP group" msgstr "Grupo FHRP" -#: ipam/models/fhrp.py:57 +#: netbox/ipam/models/fhrp.py:57 msgid "FHRP groups" msgstr "Grupos FHRP" -#: ipam/models/fhrp.py:113 +#: netbox/ipam/models/fhrp.py:113 msgid "FHRP group assignment" msgstr "Asignación grupal de FHRP" -#: ipam/models/fhrp.py:114 +#: netbox/ipam/models/fhrp.py:114 msgid "FHRP group assignments" msgstr "Tareas grupales de FHRP" -#: ipam/models/ip.py:65 +#: netbox/ipam/models/ip.py:65 msgid "private" msgstr "privado" -#: ipam/models/ip.py:66 +#: netbox/ipam/models/ip.py:66 msgid "IP space managed by this RIR is considered private" msgstr "El espacio IP administrado por este RIR se considera privado" -#: ipam/models/ip.py:72 netbox/navigation/menu.py:182 +#: netbox/ipam/models/ip.py:72 netbox/netbox/navigation/menu.py:182 msgid "RIRs" msgstr "RIR" -#: ipam/models/ip.py:84 +#: netbox/ipam/models/ip.py:84 msgid "IPv4 or IPv6 network" msgstr "Red IPv4 o IPv6" -#: ipam/models/ip.py:91 +#: netbox/ipam/models/ip.py:91 msgid "Regional Internet Registry responsible for this IP space" msgstr "Registro regional de Internet responsable de este espacio IP" -#: ipam/models/ip.py:101 +#: netbox/ipam/models/ip.py:101 msgid "date added" msgstr "fecha añadida" -#: ipam/models/ip.py:115 +#: netbox/ipam/models/ip.py:115 msgid "aggregate" msgstr "agregado" -#: ipam/models/ip.py:116 +#: netbox/ipam/models/ip.py:116 msgid "aggregates" msgstr "agregados" -#: ipam/models/ip.py:132 +#: netbox/ipam/models/ip.py:132 msgid "Cannot create aggregate with /0 mask." msgstr "No se puede crear un agregado con la máscara /0." -#: ipam/models/ip.py:144 +#: netbox/ipam/models/ip.py:144 #, python-brace-format msgid "" "Aggregates cannot overlap. {prefix} is already covered by an existing " @@ -9453,7 +10109,7 @@ msgstr "" "Los agregados no pueden superponerse. {prefix} ya está cubierto por un " "agregado existente ({aggregate})." -#: ipam/models/ip.py:158 +#: netbox/ipam/models/ip.py:158 #, python-brace-format msgid "" "Prefixes cannot overlap aggregates. {prefix} covers an existing aggregate " @@ -9462,159 +10118,161 @@ msgstr "" "Los prefijos no pueden superponerse a los agregados. {prefix} cubre un " "agregado existente ({aggregate})." -#: ipam/models/ip.py:200 ipam/models/ip.py:737 vpn/models/tunnels.py:114 +#: netbox/ipam/models/ip.py:200 netbox/ipam/models/ip.py:737 +#: netbox/vpn/models/tunnels.py:114 msgid "role" msgstr "papel" -#: ipam/models/ip.py:201 +#: netbox/ipam/models/ip.py:201 msgid "roles" msgstr "papeles" -#: ipam/models/ip.py:217 ipam/models/ip.py:293 +#: netbox/ipam/models/ip.py:217 netbox/ipam/models/ip.py:293 msgid "prefix" msgstr "prefijo" -#: ipam/models/ip.py:218 +#: netbox/ipam/models/ip.py:218 msgid "IPv4 or IPv6 network with mask" msgstr "Red IPv4 o IPv6 con máscara" -#: ipam/models/ip.py:254 +#: netbox/ipam/models/ip.py:254 msgid "Operational status of this prefix" msgstr "Estado operativo de este prefijo" -#: ipam/models/ip.py:262 +#: netbox/ipam/models/ip.py:262 msgid "The primary function of this prefix" msgstr "La función principal de este prefijo" -#: ipam/models/ip.py:265 +#: netbox/ipam/models/ip.py:265 msgid "is a pool" msgstr "es una piscina" -#: ipam/models/ip.py:267 +#: netbox/ipam/models/ip.py:267 msgid "All IP addresses within this prefix are considered usable" msgstr "" "Todas las direcciones IP incluidas en este prefijo se consideran " "utilizables." -#: ipam/models/ip.py:270 ipam/models/ip.py:537 +#: netbox/ipam/models/ip.py:270 netbox/ipam/models/ip.py:537 msgid "mark utilized" msgstr "marca utilizada" -#: ipam/models/ip.py:294 +#: netbox/ipam/models/ip.py:294 msgid "prefixes" msgstr "prefijos" -#: ipam/models/ip.py:317 +#: netbox/ipam/models/ip.py:317 msgid "Cannot create prefix with /0 mask." msgstr "No se puede crear un prefijo con la máscara /0." -#: ipam/models/ip.py:324 ipam/models/ip.py:874 +#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:874 #, python-brace-format msgid "VRF {vrf}" msgstr "VRF {vrf}" -#: ipam/models/ip.py:324 ipam/models/ip.py:874 +#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:874 msgid "global table" msgstr "tabla global" -#: ipam/models/ip.py:326 +#: netbox/ipam/models/ip.py:326 #, python-brace-format msgid "Duplicate prefix found in {table}: {prefix}" msgstr "Se encuentra un prefijo duplicado en {table}: {prefix}" -#: ipam/models/ip.py:495 +#: netbox/ipam/models/ip.py:495 msgid "start address" msgstr "dirección de inicio" -#: ipam/models/ip.py:496 ipam/models/ip.py:500 ipam/models/ip.py:712 +#: netbox/ipam/models/ip.py:496 netbox/ipam/models/ip.py:500 +#: netbox/ipam/models/ip.py:712 msgid "IPv4 or IPv6 address (with mask)" msgstr "Dirección IPv4 o IPv6 (con máscara)" -#: ipam/models/ip.py:499 +#: netbox/ipam/models/ip.py:499 msgid "end address" msgstr "dirección final" -#: ipam/models/ip.py:526 +#: netbox/ipam/models/ip.py:526 msgid "Operational status of this range" msgstr "Estado operativo de esta gama" -#: ipam/models/ip.py:534 +#: netbox/ipam/models/ip.py:534 msgid "The primary function of this range" msgstr "La función principal de esta gama" -#: ipam/models/ip.py:548 +#: netbox/ipam/models/ip.py:548 msgid "IP range" msgstr "Rango IP" -#: ipam/models/ip.py:549 +#: netbox/ipam/models/ip.py:549 msgid "IP ranges" msgstr "Intervalos de IP" -#: ipam/models/ip.py:565 +#: netbox/ipam/models/ip.py:565 msgid "Starting and ending IP address versions must match" msgstr "Las versiones de la dirección IP inicial y final deben coincidir" -#: ipam/models/ip.py:571 +#: netbox/ipam/models/ip.py:571 msgid "Starting and ending IP address masks must match" msgstr "Las máscaras de direcciones IP iniciales y finales deben coincidir" -#: ipam/models/ip.py:578 +#: netbox/ipam/models/ip.py:578 #, python-brace-format msgid "" "Ending address must be greater than the starting address ({start_address})" msgstr "" "La dirección final debe ser mayor que la dirección inicial ({start_address})" -#: ipam/models/ip.py:590 +#: netbox/ipam/models/ip.py:590 #, python-brace-format msgid "Defined addresses overlap with range {overlapping_range} in VRF {vrf}" msgstr "" "Las direcciones definidas se superponen con el rango {overlapping_range} en " "VRF {vrf}" -#: ipam/models/ip.py:599 +#: netbox/ipam/models/ip.py:599 #, 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})" -#: ipam/models/ip.py:711 tenancy/models/contacts.py:82 +#: netbox/ipam/models/ip.py:711 netbox/tenancy/models/contacts.py:82 msgid "address" msgstr "dirección" -#: ipam/models/ip.py:734 +#: netbox/ipam/models/ip.py:734 msgid "The operational status of this IP" msgstr "El estado operativo de esta IP" -#: ipam/models/ip.py:741 +#: netbox/ipam/models/ip.py:741 msgid "The functional role of this IP" msgstr "La función funcional de esta propiedad intelectual" -#: ipam/models/ip.py:765 templates/ipam/ipaddress.html:72 +#: netbox/ipam/models/ip.py:765 netbox/templates/ipam/ipaddress.html:72 msgid "NAT (inside)" msgstr "NAT (interior)" -#: ipam/models/ip.py:766 +#: netbox/ipam/models/ip.py:766 msgid "The IP for which this address is the \"outside\" IP" msgstr "La IP para la que esta dirección es la IP «externa»" -#: ipam/models/ip.py:773 +#: netbox/ipam/models/ip.py:773 msgid "Hostname or FQDN (not case-sensitive)" msgstr "Nombre de host o FQDN (no distingue mayúsculas de minúsculas)" -#: ipam/models/ip.py:789 ipam/models/services.py:94 +#: netbox/ipam/models/ip.py:789 netbox/ipam/models/services.py:94 msgid "IP addresses" msgstr "direcciones IP" -#: ipam/models/ip.py:845 +#: netbox/ipam/models/ip.py:845 msgid "Cannot create IP address with /0 mask." msgstr "No se puede crear una dirección IP con la máscara /0." -#: ipam/models/ip.py:851 +#: netbox/ipam/models/ip.py:851 #, python-brace-format msgid "{ip} is a network ID, which may not be assigned to an interface." msgstr "{ip} es un ID de red, que no puede asignarse a una interfaz." -#: ipam/models/ip.py:862 +#: netbox/ipam/models/ip.py:862 #, python-brace-format msgid "" "{ip} is a broadcast address, which may not be assigned to an interface." @@ -9622,100 +10280,116 @@ msgstr "" "{ip} es una dirección de transmisión, que puede no estar asignada a una " "interfaz." -#: ipam/models/ip.py:876 +#: netbox/ipam/models/ip.py:876 #, python-brace-format msgid "Duplicate IP address found in {table}: {ipaddress}" msgstr "Se encontró una dirección IP duplicada en {table}: {ipaddress}" -#: ipam/models/ip.py:903 +#: netbox/ipam/models/ip.py:897 +msgid "" +"Cannot reassign IP address while it is designated as the primary IP for the " +"parent object" +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 msgid "Only IPv6 addresses can be assigned SLAAC status" msgstr "Solo a las direcciones IPv6 se les puede asignar el estado SLAAC" -#: ipam/models/services.py:33 +#: netbox/ipam/models/services.py:33 msgid "port numbers" msgstr "números de puerto" -#: ipam/models/services.py:59 +#: netbox/ipam/models/services.py:59 msgid "service template" msgstr "plantilla de servicio" -#: ipam/models/services.py:60 +#: netbox/ipam/models/services.py:60 msgid "service templates" msgstr "plantillas de servicio" -#: ipam/models/services.py:95 +#: netbox/ipam/models/services.py:95 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" -#: ipam/models/services.py:102 +#: netbox/ipam/models/services.py:102 msgid "service" msgstr "servicio" -#: ipam/models/services.py:103 +#: netbox/ipam/models/services.py:103 msgid "services" msgstr "servicios" -#: ipam/models/services.py:117 +#: netbox/ipam/models/services.py:117 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." -#: ipam/models/services.py:119 +#: netbox/ipam/models/services.py:119 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." -#: ipam/models/vlans.py:85 +#: netbox/ipam/models/vlans.py:85 msgid "VLAN groups" msgstr "Grupos de VLAN" -#: ipam/models/vlans.py:95 +#: netbox/ipam/models/vlans.py:95 msgid "Cannot set scope_type without scope_id." msgstr "No se puede establecer scope_type sin scope_id." -#: ipam/models/vlans.py:97 +#: netbox/ipam/models/vlans.py:97 msgid "Cannot set scope_id without scope_type." msgstr "No se puede establecer scope_id sin scope_type." -#: ipam/models/vlans.py:101 +#: netbox/ipam/models/vlans.py:105 +#, python-brace-format +msgid "Starting VLAN ID in range ({value}) cannot be less than {minimum}" +msgstr "" + +#: netbox/ipam/models/vlans.py:111 +#, python-brace-format +msgid "Ending VLAN ID in range ({value}) cannot exceed {maximum}" +msgstr "" + +#: 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 "" + +#: netbox/ipam/models/vlans.py:124 msgid "Ranges cannot overlap." msgstr "Los rangos no se pueden superponer." -#: ipam/models/vlans.py:106 -#, python-brace-format -msgid "" -"Maximum child VID must be greater than or equal to minimum child VID " -"({value})" -msgstr "" -"El VID infantil máximo debe ser mayor o igual al VID infantil mínimo " -"({value})" - -#: ipam/models/vlans.py:165 +#: netbox/ipam/models/vlans.py:181 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)" -#: ipam/models/vlans.py:173 +#: netbox/ipam/models/vlans.py:189 msgid "VLAN group (optional)" msgstr "Grupo de VLAN (opcional)" -#: ipam/models/vlans.py:181 +#: netbox/ipam/models/vlans.py:197 msgid "Numeric VLAN ID (1-4094)" msgstr "ID de VLAN numérico (1-4094)" -#: ipam/models/vlans.py:199 +#: netbox/ipam/models/vlans.py:215 msgid "Operational status of this VLAN" msgstr "Estado operativo de esta VLAN" -#: ipam/models/vlans.py:207 +#: netbox/ipam/models/vlans.py:223 msgid "The primary function of this VLAN" msgstr "La función principal de esta VLAN" -#: ipam/models/vlans.py:250 +#: netbox/ipam/models/vlans.py:266 #, python-brace-format msgid "" "VLAN is assigned to group {group} (scope: {scope}); cannot also assign to " @@ -9724,164 +10398,166 @@ msgstr "" "La VLAN está asignada al grupo {group} (alcance: {scope}); no se puede " "asignar también al sitio {site}." -#: ipam/models/vlans.py:259 +#: netbox/ipam/models/vlans.py:275 #, 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}" -#: ipam/models/vrfs.py:30 +#: netbox/ipam/models/vrfs.py:30 msgid "route distinguisher" msgstr "distinguidor de rutas" -#: ipam/models/vrfs.py:31 +#: netbox/ipam/models/vrfs.py:31 msgid "Unique route distinguisher (as defined in RFC 4364)" msgstr "Distintor de ruta único (tal como se define en el RFC 4364)" -#: ipam/models/vrfs.py:42 +#: netbox/ipam/models/vrfs.py:42 msgid "enforce unique space" msgstr "reforzar un espacio único" -#: ipam/models/vrfs.py:43 +#: netbox/ipam/models/vrfs.py:43 msgid "Prevent duplicate prefixes/IP addresses within this VRF" msgstr "Evite la duplicación de prefijos/direcciones IP en este VRF" -#: ipam/models/vrfs.py:63 netbox/navigation/menu.py:186 -#: netbox/navigation/menu.py:188 +#: netbox/ipam/models/vrfs.py:63 netbox/netbox/navigation/menu.py:186 +#: netbox/netbox/navigation/menu.py:188 msgid "VRFs" msgstr "VRFs" -#: ipam/models/vrfs.py:82 +#: netbox/ipam/models/vrfs.py:82 msgid "Route target value (formatted in accordance with RFC 4360)" msgstr "Valor objetivo de ruta (formateado de acuerdo con el RFC 4360)" -#: ipam/models/vrfs.py:94 +#: netbox/ipam/models/vrfs.py:94 msgid "route target" msgstr "destino de ruta" -#: ipam/models/vrfs.py:95 +#: netbox/ipam/models/vrfs.py:95 msgid "route targets" msgstr "objetivos de ruta" -#: ipam/tables/asn.py:52 +#: netbox/ipam/tables/asn.py:52 msgid "ASDOT" msgstr "COMO PUNTO" -#: ipam/tables/asn.py:57 +#: netbox/ipam/tables/asn.py:57 msgid "Site Count" msgstr "Recuento de sitios" -#: ipam/tables/asn.py:62 +#: netbox/ipam/tables/asn.py:62 msgid "Provider Count" msgstr "Recuento de proveedores" -#: ipam/tables/ip.py:95 netbox/navigation/menu.py:179 -#: netbox/navigation/menu.py:181 +#: netbox/ipam/tables/ip.py:95 netbox/netbox/navigation/menu.py:179 +#: netbox/netbox/navigation/menu.py:181 msgid "Aggregates" msgstr "Agregados" -#: ipam/tables/ip.py:125 +#: netbox/ipam/tables/ip.py:125 msgid "Added" msgstr "Añadido" -#: ipam/tables/ip.py:128 ipam/tables/ip.py:166 ipam/tables/vlans.py:142 -#: ipam/views.py:346 netbox/navigation/menu.py:165 -#: netbox/navigation/menu.py:167 templates/ipam/vlan.html:84 +#: 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 msgid "Prefixes" msgstr "Prefijos" -#: ipam/tables/ip.py:131 ipam/tables/ip.py:270 ipam/tables/ip.py:324 -#: ipam/tables/vlans.py:86 templates/dcim/device.html:260 -#: templates/ipam/aggregate.html:24 templates/ipam/iprange.html:29 -#: templates/ipam/prefix.html:106 +#: 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/templates/dcim/device.html:260 +#: netbox/templates/ipam/aggregate.html:24 +#: netbox/templates/ipam/iprange.html:29 netbox/templates/ipam/prefix.html:106 msgid "Utilization" msgstr "Utilización" -#: ipam/tables/ip.py:171 netbox/navigation/menu.py:161 +#: netbox/ipam/tables/ip.py:171 netbox/netbox/navigation/menu.py:161 msgid "IP Ranges" msgstr "Intervalos de IP" -#: ipam/tables/ip.py:221 +#: netbox/ipam/tables/ip.py:221 msgid "Prefix (Flat)" msgstr "Prefijo (plano)" -#: ipam/tables/ip.py:225 +#: netbox/ipam/tables/ip.py:225 msgid "Depth" msgstr "Profundidad" -#: ipam/tables/ip.py:262 +#: netbox/ipam/tables/ip.py:262 msgid "Pool" msgstr "Piscina" -#: ipam/tables/ip.py:266 ipam/tables/ip.py:320 +#: netbox/ipam/tables/ip.py:266 netbox/ipam/tables/ip.py:320 msgid "Marked Utilized" msgstr "Marcado como utilizado" -#: ipam/tables/ip.py:304 +#: netbox/ipam/tables/ip.py:304 msgid "Start address" msgstr "Dirección de inicio" -#: ipam/tables/ip.py:383 +#: netbox/ipam/tables/ip.py:383 msgid "NAT (Inside)" msgstr "NAT (interior)" -#: ipam/tables/ip.py:388 +#: netbox/ipam/tables/ip.py:388 msgid "NAT (Outside)" msgstr "NAT (exterior)" -#: ipam/tables/ip.py:393 +#: netbox/ipam/tables/ip.py:393 msgid "Assigned" msgstr "Asignado" -#: ipam/tables/ip.py:429 templates/vpn/l2vpntermination.html:16 -#: vpn/forms/filtersets.py:240 +#: netbox/ipam/tables/ip.py:429 netbox/templates/vpn/l2vpntermination.html:16 +#: netbox/vpn/forms/filtersets.py:240 msgid "Assigned Object" msgstr "Objeto asignado" -#: ipam/tables/vlans.py:68 +#: netbox/ipam/tables/vlans.py:68 msgid "Scope Type" msgstr "Tipo de ámbito" -#: ipam/tables/vlans.py:76 +#: netbox/ipam/tables/vlans.py:76 msgid "VID Ranges" msgstr "Gamas VID" -#: ipam/tables/vlans.py:111 ipam/tables/vlans.py:214 -#: templates/dcim/inc/interface_vlans_table.html:4 +#: netbox/ipam/tables/vlans.py:111 netbox/ipam/tables/vlans.py:214 +#: netbox/templates/dcim/inc/interface_vlans_table.html:4 msgid "VID" msgstr "VÍDEO" -#: ipam/tables/vrfs.py:30 +#: netbox/ipam/tables/vrfs.py:30 msgid "RD" msgstr "ROJO" -#: ipam/tables/vrfs.py:33 +#: netbox/ipam/tables/vrfs.py:33 msgid "Unique" msgstr "Único" -#: ipam/tables/vrfs.py:37 vpn/tables/l2vpn.py:27 +#: netbox/ipam/tables/vrfs.py:37 netbox/vpn/tables/l2vpn.py:27 msgid "Import Targets" msgstr "Objetivos de importación" -#: ipam/tables/vrfs.py:42 vpn/tables/l2vpn.py:32 +#: netbox/ipam/tables/vrfs.py:42 netbox/vpn/tables/l2vpn.py:32 msgid "Export Targets" msgstr "Objetivos de exportación" -#: ipam/validators.py:9 +#: netbox/ipam/validators.py:9 #, python-brace-format msgid "{prefix} is not a valid prefix. Did you mean {suggested}?" msgstr "{prefix} no es un prefijo válido. ¿Querías decir {suggested}?" -#: ipam/validators.py:16 +#: netbox/ipam/validators.py:16 #, python-format msgid "The prefix length must be less than or equal to %(limit_value)s." msgstr "La longitud del prefijo debe ser inferior o igual a %(limit_value)s." -#: ipam/validators.py:24 +#: netbox/ipam/validators.py:24 #, python-format msgid "The prefix length must be greater than or equal to %(limit_value)s." msgstr "La longitud del prefijo debe ser mayor o igual a %(limit_value)s." -#: ipam/validators.py:33 +#: netbox/ipam/validators.py:33 msgid "" "Only alphanumeric characters, asterisks, hyphens, periods, and underscores " "are allowed in DNS names" @@ -9889,31 +10565,31 @@ msgstr "" "Solo se permiten caracteres alfanuméricos, asteriscos, guiones, puntos y " "guiones bajos en los nombres DNS" -#: ipam/views.py:533 +#: netbox/ipam/views.py:533 msgid "Child Prefixes" msgstr "Prefijos infantiles" -#: ipam/views.py:569 +#: netbox/ipam/views.py:569 msgid "Child Ranges" msgstr "Rangos infantiles" -#: ipam/views.py:898 +#: netbox/ipam/views.py:898 msgid "Related IPs" msgstr "IPs relacionadas" -#: ipam/views.py:1127 +#: netbox/ipam/views.py:1127 msgid "Device Interfaces" msgstr "Interfaces de dispositivos" -#: ipam/views.py:1145 +#: netbox/ipam/views.py:1145 msgid "VM Interfaces" msgstr "Interfaces de VM" -#: netbox/api/fields.py:65 +#: netbox/netbox/api/fields.py:65 msgid "This field may not be blank." msgstr "Es posible que este campo no esté en blanco." -#: netbox/api/fields.py:70 +#: netbox/netbox/api/fields.py:70 msgid "" "Value must be passed directly (e.g. \"foo\": 123); do not use a dictionary " "or list." @@ -9921,336 +10597,349 @@ msgstr "" "El valor debe pasarse directamente (por ejemplo, «foo»: 123); no utilice un " "diccionario o una lista." -#: netbox/api/fields.py:91 +#: netbox/netbox/api/fields.py:91 #, python-brace-format msgid "{value} is not a valid choice." msgstr "{value} no es una opción válida." -#: netbox/api/fields.py:104 +#: netbox/netbox/api/fields.py:104 #, python-brace-format msgid "Invalid content type: {content_type}" msgstr "Tipo de contenido no válido: {content_type}" -#: netbox/api/fields.py:105 +#: netbox/netbox/api/fields.py:105 msgid "Invalid value. Specify a content type as '.'." msgstr "" "Valor no válido. Especifique un tipo de contenido como " "'.'." -#: netbox/api/fields.py:167 +#: netbox/netbox/api/fields.py:167 msgid "Ranges must be specified in the form (lower, upper)." msgstr "" "Los rangos se deben especificar en el formulario (inferior, superior)." -#: netbox/api/fields.py:169 +#: netbox/netbox/api/fields.py:169 msgid "Range boundaries must be defined as integers." msgstr "Los límites del rango se deben definir como números enteros." -#: netbox/api/serializers/fields.py:40 +#: netbox/netbox/api/serializers/fields.py:40 #, python-brace-format msgid "{class_name} must implement get_view_name()" msgstr "{class_name} debe implementar get_view_name ()" -#: netbox/authentication/__init__.py:138 +#: netbox/netbox/authentication/__init__.py:138 #, python-brace-format msgid "Invalid permission {permission} for model {model}" msgstr "Permiso no válido {permission} para modelo {model}" -#: netbox/choices.py:49 +#: netbox/netbox/choices.py:49 msgid "Dark Red" msgstr "rojo oscuro" -#: netbox/choices.py:52 +#: netbox/netbox/choices.py:52 msgid "Rose" msgstr "Rosa" -#: netbox/choices.py:53 +#: netbox/netbox/choices.py:53 msgid "Fuchsia" msgstr "Fucsia" -#: netbox/choices.py:55 +#: netbox/netbox/choices.py:55 msgid "Dark Purple" msgstr "Púrpura oscuro" -#: netbox/choices.py:58 +#: netbox/netbox/choices.py:58 msgid "Light Blue" msgstr "Azul claro" -#: netbox/choices.py:61 +#: netbox/netbox/choices.py:61 msgid "Aqua" msgstr "Aguamarina" -#: netbox/choices.py:62 +#: netbox/netbox/choices.py:62 msgid "Dark Green" msgstr "Verde oscuro" -#: netbox/choices.py:64 +#: netbox/netbox/choices.py:64 msgid "Light Green" msgstr "Verde claro" -#: netbox/choices.py:65 +#: netbox/netbox/choices.py:65 msgid "Lime" msgstr "Lima" -#: netbox/choices.py:67 +#: netbox/netbox/choices.py:67 msgid "Amber" msgstr "Ámbar" -#: netbox/choices.py:69 +#: netbox/netbox/choices.py:69 msgid "Dark Orange" msgstr "Naranja oscuro" -#: netbox/choices.py:70 +#: netbox/netbox/choices.py:70 msgid "Brown" msgstr "Marrón" -#: netbox/choices.py:71 +#: netbox/netbox/choices.py:71 msgid "Light Grey" msgstr "Gris claro" -#: netbox/choices.py:72 +#: netbox/netbox/choices.py:72 msgid "Grey" msgstr "Gris" -#: netbox/choices.py:73 +#: netbox/netbox/choices.py:73 msgid "Dark Grey" msgstr "Gris oscuro" -#: netbox/choices.py:128 +#: netbox/netbox/choices.py:128 msgid "Direct" msgstr "Directo" -#: netbox/choices.py:129 +#: netbox/netbox/choices.py:129 msgid "Upload" msgstr "Cargar" -#: netbox/choices.py:141 netbox/choices.py:155 +#: netbox/netbox/choices.py:141 netbox/netbox/choices.py:155 msgid "Auto-detect" msgstr "Detección automática" -#: netbox/choices.py:156 +#: netbox/netbox/choices.py:156 msgid "Comma" msgstr "Coma" -#: netbox/choices.py:157 +#: netbox/netbox/choices.py:157 msgid "Semicolon" msgstr "Punto y coma" -#: netbox/choices.py:158 +#: netbox/netbox/choices.py:158 msgid "Tab" msgstr "Pestaña" -#: netbox/config/__init__.py:67 +#: netbox/netbox/config/__init__.py:67 #, python-brace-format msgid "Invalid configuration parameter: {item}" msgstr "Parámetro de configuración no válido: {item}" -#: netbox/config/parameters.py:22 templates/core/inc/config_data.html:62 +#: netbox/netbox/config/parameters.py:22 +#: netbox/templates/core/inc/config_data.html:62 msgid "Login banner" msgstr "banner de inicio de sesión" -#: netbox/config/parameters.py:24 +#: netbox/netbox/config/parameters.py:24 msgid "Additional content to display on the login page" msgstr "Contenido adicional para mostrar en la página de inicio de sesión" -#: netbox/config/parameters.py:33 templates/core/inc/config_data.html:66 +#: netbox/netbox/config/parameters.py:33 +#: netbox/templates/core/inc/config_data.html:66 msgid "Maintenance banner" msgstr "Banner de mantenimiento" -#: netbox/config/parameters.py:35 +#: netbox/netbox/config/parameters.py:35 msgid "Additional content to display when in maintenance mode" msgstr "Contenido adicional para mostrar en modo de mantenimiento" -#: netbox/config/parameters.py:44 templates/core/inc/config_data.html:70 +#: netbox/netbox/config/parameters.py:44 +#: netbox/templates/core/inc/config_data.html:70 msgid "Top banner" msgstr "Banner superior" -#: netbox/config/parameters.py:46 +#: netbox/netbox/config/parameters.py:46 msgid "Additional content to display at the top of every page" msgstr "Contenido adicional para mostrar en la parte superior de cada página" -#: netbox/config/parameters.py:55 templates/core/inc/config_data.html:74 +#: netbox/netbox/config/parameters.py:55 +#: netbox/templates/core/inc/config_data.html:74 msgid "Bottom banner" msgstr "Banner inferior" -#: netbox/config/parameters.py:57 +#: netbox/netbox/config/parameters.py:57 msgid "Additional content to display at the bottom of every page" msgstr "Contenido adicional para mostrar en la parte inferior de cada página" -#: netbox/config/parameters.py:68 +#: netbox/netbox/config/parameters.py:68 msgid "Globally unique IP space" msgstr "Espacio IP único a nivel mundial" -#: netbox/config/parameters.py:70 +#: netbox/netbox/config/parameters.py:70 msgid "Enforce unique IP addressing within the global table" msgstr "Imponga un direccionamiento IP único dentro de la tabla global" -#: netbox/config/parameters.py:75 templates/core/inc/config_data.html:44 +#: netbox/netbox/config/parameters.py:75 +#: netbox/templates/core/inc/config_data.html:44 msgid "Prefer IPv4" msgstr "Prefiero IPv4" -#: netbox/config/parameters.py:77 +#: netbox/netbox/config/parameters.py:77 msgid "Prefer IPv4 addresses over IPv6" msgstr "Prefiere las direcciones IPv4 en lugar de IPv6" -#: netbox/config/parameters.py:84 +#: netbox/netbox/config/parameters.py:84 msgid "Rack unit height" msgstr "Altura de la unidad de estantería" -#: netbox/config/parameters.py:86 +#: netbox/netbox/config/parameters.py:86 msgid "Default unit height for rendered rack elevations" msgstr "" "Altura unitaria predeterminada para elevaciones de estanterías renderizadas" -#: netbox/config/parameters.py:91 +#: netbox/netbox/config/parameters.py:91 msgid "Rack unit width" msgstr "Ancho de la unidad de bastidor" -#: netbox/config/parameters.py:93 +#: netbox/netbox/config/parameters.py:93 msgid "Default unit width for rendered rack elevations" msgstr "" "Ancho de unidad predeterminado para las elevaciones de estanterías " "renderizadas" -#: netbox/config/parameters.py:100 +#: netbox/netbox/config/parameters.py:100 msgid "Powerfeed voltage" msgstr "Tensión de alimentación" -#: netbox/config/parameters.py:102 +#: netbox/netbox/config/parameters.py:102 msgid "Default voltage for powerfeeds" msgstr "Tensión predeterminada para las alimentaciones" -#: netbox/config/parameters.py:107 +#: netbox/netbox/config/parameters.py:107 msgid "Powerfeed amperage" msgstr "Amperaje de alimentación" -#: netbox/config/parameters.py:109 +#: netbox/netbox/config/parameters.py:109 msgid "Default amperage for powerfeeds" msgstr "Amperaje predeterminado para las alimentaciones" -#: netbox/config/parameters.py:114 +#: netbox/netbox/config/parameters.py:114 msgid "Powerfeed max utilization" msgstr "Utilización máxima de Powerfeed" -#: netbox/config/parameters.py:116 +#: netbox/netbox/config/parameters.py:116 msgid "Default max utilization for powerfeeds" msgstr "Utilización máxima predeterminada de las fuentes de alimentación" -#: netbox/config/parameters.py:123 templates/core/inc/config_data.html:53 +#: netbox/netbox/config/parameters.py:123 +#: netbox/templates/core/inc/config_data.html:53 msgid "Allowed URL schemes" msgstr "Esquemas de URL permitidos" -#: netbox/config/parameters.py:128 +#: netbox/netbox/config/parameters.py:128 msgid "Permitted schemes for URLs in user-provided content" msgstr "" "Esquemas permitidos para las URL en el contenido proporcionado por el " "usuario" -#: netbox/config/parameters.py:136 +#: netbox/netbox/config/parameters.py:136 msgid "Default page size" msgstr "Tamaño de página predeterminado" -#: netbox/config/parameters.py:142 +#: netbox/netbox/config/parameters.py:142 msgid "Maximum page size" msgstr "Tamaño máximo de página" -#: netbox/config/parameters.py:150 templates/core/inc/config_data.html:96 +#: netbox/netbox/config/parameters.py:150 +#: netbox/templates/core/inc/config_data.html:96 msgid "Custom validators" msgstr "Validadores personalizados" -#: netbox/config/parameters.py:152 +#: netbox/netbox/config/parameters.py:152 msgid "Custom validation rules (JSON)" msgstr "Reglas de validación personalizadas (JSON)" -#: netbox/config/parameters.py:160 templates/core/inc/config_data.html:104 +#: netbox/netbox/config/parameters.py:160 +#: netbox/templates/core/inc/config_data.html:104 msgid "Protection rules" msgstr "Normas de protección" -#: netbox/config/parameters.py:162 +#: netbox/netbox/config/parameters.py:162 msgid "Deletion protection rules (JSON)" msgstr "Reglas de protección contra eliminaciones (JSON)" -#: netbox/config/parameters.py:172 templates/core/inc/config_data.html:117 +#: netbox/netbox/config/parameters.py:172 +#: netbox/templates/core/inc/config_data.html:117 msgid "Default preferences" msgstr "Preferencias predeterminadas" -#: netbox/config/parameters.py:174 +#: netbox/netbox/config/parameters.py:174 msgid "Default preferences for new users" msgstr "Preferencias predeterminadas para usuarios nuevos" -#: netbox/config/parameters.py:181 templates/core/inc/config_data.html:129 +#: netbox/netbox/config/parameters.py:181 +#: netbox/templates/core/inc/config_data.html:129 msgid "Maintenance mode" msgstr "Modo de mantenimiento" -#: netbox/config/parameters.py:183 +#: netbox/netbox/config/parameters.py:183 msgid "Enable maintenance mode" msgstr "Habilitar el modo de mantenimiento" -#: netbox/config/parameters.py:188 templates/core/inc/config_data.html:133 +#: netbox/netbox/config/parameters.py:188 +#: netbox/templates/core/inc/config_data.html:133 msgid "GraphQL enabled" msgstr "GraphQL habilitado" -#: netbox/config/parameters.py:190 +#: netbox/netbox/config/parameters.py:190 msgid "Enable the GraphQL API" msgstr "Habilita la API de GraphQL" -#: netbox/config/parameters.py:195 templates/core/inc/config_data.html:137 +#: netbox/netbox/config/parameters.py:195 +#: netbox/templates/core/inc/config_data.html:137 msgid "Changelog retention" msgstr "Retención del registro de cambios" -#: netbox/config/parameters.py:197 +#: netbox/netbox/config/parameters.py:197 msgid "Days to retain changelog history (set to zero for unlimited)" msgstr "" "Días para conservar el historial de cambios (se establece en cero de forma " "ilimitada)" -#: netbox/config/parameters.py:202 +#: netbox/netbox/config/parameters.py:202 msgid "Job result retention" msgstr "Retención de resultados laborales" -#: netbox/config/parameters.py:204 +#: netbox/netbox/config/parameters.py:204 msgid "Days to retain job result history (set to zero for unlimited)" msgstr "" "Días para conservar el historial de resultados del trabajo (establecido en " "cero para un número ilimitado)" -#: netbox/config/parameters.py:209 templates/core/inc/config_data.html:145 +#: netbox/netbox/config/parameters.py:209 +#: netbox/templates/core/inc/config_data.html:145 msgid "Maps URL" msgstr "URL de mapas" -#: netbox/config/parameters.py:211 +#: netbox/netbox/config/parameters.py:211 msgid "Base URL for mapping geographic locations" msgstr "URL base para mapear ubicaciones geográficas" -#: netbox/forms/__init__.py:12 +#: netbox/netbox/forms/__init__.py:12 msgid "Partial match" msgstr "Coincidencia parcial" -#: netbox/forms/__init__.py:13 +#: netbox/netbox/forms/__init__.py:13 msgid "Exact match" msgstr "Coincidencia exacta" -#: netbox/forms/__init__.py:14 +#: netbox/netbox/forms/__init__.py:14 msgid "Starts with" msgstr "Empieza con" -#: netbox/forms/__init__.py:15 +#: netbox/netbox/forms/__init__.py:15 msgid "Ends with" msgstr "Termina con" -#: netbox/forms/__init__.py:16 +#: netbox/netbox/forms/__init__.py:16 msgid "Regex" msgstr "Regex" -#: netbox/forms/__init__.py:34 +#: netbox/netbox/forms/__init__.py:34 msgid "Object type(s)" msgstr "Tipo(s) de objeto(s)" -#: netbox/forms/__init__.py:40 +#: netbox/netbox/forms/__init__.py:40 msgid "Lookup" msgstr "Búsqueda" -#: netbox/forms/base.py:90 +#: netbox/netbox/forms/base.py:90 msgid "" "Tag slugs separated by commas, encased with double quotes (e.g. " "\"tag1,tag2,tag3\")" @@ -10258,415 +10947,426 @@ msgstr "" "Etiquete las babosas separadas por comas y entre comillas dobles (por " "ejemplo, «tag1, tag2, tag3\")" -#: netbox/forms/base.py:120 +#: netbox/netbox/forms/base.py:120 msgid "Add tags" msgstr "Añadir etiquetas" -#: netbox/forms/base.py:125 +#: netbox/netbox/forms/base.py:125 msgid "Remove tags" msgstr "Eliminar etiquetas" -#: netbox/forms/mixins.py:38 +#: netbox/netbox/forms/mixins.py:38 #, python-brace-format msgid "{class_name} must specify a model class." msgstr "{class_name} debe especificar una clase modelo." -#: netbox/models/features.py:280 +#: netbox/netbox/models/features.py:280 #, python-brace-format msgid "Unknown field name '{name}' in custom field data." msgstr "Nombre de campo desconocido '{name}'en datos de campo personalizados." -#: netbox/models/features.py:286 +#: netbox/netbox/models/features.py:286 #, python-brace-format msgid "Invalid value for custom field '{name}': {error}" msgstr "Valor no válido para el campo personalizado '{name}': {error}" -#: netbox/models/features.py:295 +#: netbox/netbox/models/features.py:295 #, python-brace-format msgid "Custom field '{name}' must have a unique value." msgstr "Campo personalizado '{name}'debe tener un valor único." -#: netbox/models/features.py:302 +#: netbox/netbox/models/features.py:302 #, python-brace-format msgid "Missing required custom field '{name}'." msgstr "Falta el campo personalizado obligatorio '{name}'." -#: netbox/models/features.py:462 +#: netbox/netbox/models/features.py:462 msgid "Remote data source" msgstr "Fuente de datos remota" -#: netbox/models/features.py:472 +#: netbox/netbox/models/features.py:472 msgid "data path" msgstr "ruta de datos" -#: netbox/models/features.py:476 +#: netbox/netbox/models/features.py:476 msgid "Path to remote file (relative to data source root)" msgstr "Ruta al archivo remoto (relativa a la raíz de la fuente de datos)" -#: netbox/models/features.py:479 +#: netbox/netbox/models/features.py:479 msgid "auto sync enabled" msgstr "sincronización automática habilitada" -#: netbox/models/features.py:481 +#: netbox/netbox/models/features.py:481 msgid "Enable automatic synchronization of data when the data file is updated" msgstr "" "Habilitar la sincronización automática de datos cuando se actualiza el " "archivo de datos" -#: netbox/models/features.py:484 +#: netbox/netbox/models/features.py:484 msgid "date synced" msgstr "fecha sincronizada" -#: netbox/models/features.py:578 +#: netbox/netbox/models/features.py:578 #, python-brace-format msgid "{class_name} must implement a sync_data() method." msgstr "{class_name} debe implementar un método sync_data ()." -#: netbox/navigation/menu.py:11 +#: netbox/netbox/navigation/menu.py:11 msgid "Organization" msgstr "Organización" -#: netbox/navigation/menu.py:19 +#: netbox/netbox/navigation/menu.py:19 msgid "Site Groups" msgstr "Grupos de sitios" -#: netbox/navigation/menu.py:27 +#: netbox/netbox/navigation/menu.py:27 msgid "Tenant Groups" msgstr "Grupos de inquilinos" -#: netbox/navigation/menu.py:34 +#: netbox/netbox/navigation/menu.py:34 msgid "Contact Groups" msgstr "Grupos de contactos" -#: netbox/navigation/menu.py:35 templates/tenancy/contactrole.html:8 +#: netbox/netbox/navigation/menu.py:35 +#: netbox/templates/tenancy/contactrole.html:8 msgid "Contact Roles" msgstr "Funciones de contacto" -#: netbox/navigation/menu.py:36 +#: netbox/netbox/navigation/menu.py:36 msgid "Contact Assignments" msgstr "Asignaciones de contactos" -#: netbox/navigation/menu.py:50 +#: netbox/netbox/navigation/menu.py:50 msgid "Rack Roles" msgstr "Roles de bastidor" -#: netbox/navigation/menu.py:54 +#: netbox/netbox/navigation/menu.py:54 msgid "Elevations" msgstr "Elevaciones" -#: netbox/navigation/menu.py:60 netbox/navigation/menu.py:62 +#: netbox/netbox/navigation/menu.py:60 netbox/netbox/navigation/menu.py:62 msgid "Rack Types" msgstr "Tipos de estanterías" -#: netbox/navigation/menu.py:76 +#: netbox/netbox/navigation/menu.py:76 msgid "Modules" msgstr "Módulos" -#: netbox/navigation/menu.py:80 templates/dcim/device.html:160 -#: templates/dcim/virtualdevicecontext.html:8 +#: netbox/netbox/navigation/menu.py:80 netbox/templates/dcim/device.html:160 +#: netbox/templates/dcim/virtualdevicecontext.html:8 msgid "Virtual Device Contexts" msgstr "Contextos de dispositivos virtuales" -#: netbox/navigation/menu.py:88 +#: netbox/netbox/navigation/menu.py:88 msgid "Manufacturers" msgstr "fabricantes" -#: netbox/navigation/menu.py:92 +#: netbox/netbox/navigation/menu.py:92 msgid "Device Components" msgstr "Componentes del dispositivo" -#: netbox/navigation/menu.py:104 templates/dcim/inventoryitemrole.html:8 +#: netbox/netbox/navigation/menu.py:104 +#: netbox/templates/dcim/inventoryitemrole.html:8 msgid "Inventory Item Roles" msgstr "Funciones de los artículos de inventario" -#: netbox/navigation/menu.py:111 netbox/navigation/menu.py:115 +#: netbox/netbox/navigation/menu.py:111 netbox/netbox/navigation/menu.py:115 msgid "Connections" msgstr "Conexiones" -#: netbox/navigation/menu.py:117 +#: netbox/netbox/navigation/menu.py:117 msgid "Cables" msgstr "Cables" -#: netbox/navigation/menu.py:118 +#: netbox/netbox/navigation/menu.py:118 msgid "Wireless Links" msgstr "Vínculos inalámbricos" -#: netbox/navigation/menu.py:121 +#: netbox/netbox/navigation/menu.py:121 msgid "Interface Connections" msgstr "Conexiones de interfaz" -#: netbox/navigation/menu.py:126 +#: netbox/netbox/navigation/menu.py:126 msgid "Console Connections" msgstr "Conexiones de consola" -#: netbox/navigation/menu.py:131 +#: netbox/netbox/navigation/menu.py:131 msgid "Power Connections" msgstr "Conexiones de alimentación" -#: netbox/navigation/menu.py:147 +#: netbox/netbox/navigation/menu.py:147 msgid "Wireless LAN Groups" msgstr "Grupos de LAN inalámbrica" -#: netbox/navigation/menu.py:168 +#: netbox/netbox/navigation/menu.py:168 msgid "Prefix & VLAN Roles" msgstr "Funciones de prefijo y VLAN" -#: netbox/navigation/menu.py:174 +#: netbox/netbox/navigation/menu.py:174 msgid "ASN Ranges" msgstr "Rangos de ASN" -#: netbox/navigation/menu.py:196 +#: netbox/netbox/navigation/menu.py:196 msgid "VLAN Groups" msgstr "Grupos de VLAN" -#: netbox/navigation/menu.py:203 +#: netbox/netbox/navigation/menu.py:203 msgid "Service Templates" msgstr "Plantillas de servicio" -#: netbox/navigation/menu.py:204 templates/dcim/device.html:302 -#: templates/ipam/ipaddress.html:118 -#: templates/virtualization/virtualmachine.html:154 +#: netbox/netbox/navigation/menu.py:204 netbox/templates/dcim/device.html:302 +#: netbox/templates/ipam/ipaddress.html:118 +#: netbox/templates/virtualization/virtualmachine.html:154 msgid "Services" msgstr "Servicios" -#: netbox/navigation/menu.py:211 +#: netbox/netbox/navigation/menu.py:211 msgid "VPN" msgstr "VPN" -#: netbox/navigation/menu.py:215 netbox/navigation/menu.py:217 -#: vpn/tables/tunnels.py:24 +#: netbox/netbox/navigation/menu.py:215 netbox/netbox/navigation/menu.py:217 +#: netbox/vpn/tables/tunnels.py:24 msgid "Tunnels" msgstr "Túneles" -#: netbox/navigation/menu.py:218 templates/vpn/tunnelgroup.html:8 +#: netbox/netbox/navigation/menu.py:218 +#: netbox/templates/vpn/tunnelgroup.html:8 msgid "Tunnel Groups" msgstr "Grupos de túneles" -#: netbox/navigation/menu.py:219 +#: netbox/netbox/navigation/menu.py:219 msgid "Tunnel Terminations" msgstr "Terminaciones de túneles" -#: netbox/navigation/menu.py:223 netbox/navigation/menu.py:225 -#: vpn/models/l2vpn.py:64 +#: netbox/netbox/navigation/menu.py:223 netbox/netbox/navigation/menu.py:225 +#: netbox/vpn/models/l2vpn.py:64 msgid "L2VPNs" msgstr "VPNs L2" -#: netbox/navigation/menu.py:226 templates/vpn/l2vpn.html:56 -#: templates/vpn/tunnel.html:72 vpn/tables/tunnels.py:58 +#: 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/navigation/menu.py:232 +#: netbox/netbox/navigation/menu.py:232 msgid "IKE Proposals" msgstr "Propuestas IKE" -#: netbox/navigation/menu.py:233 templates/vpn/ikeproposal.html:41 +#: netbox/netbox/navigation/menu.py:233 +#: netbox/templates/vpn/ikeproposal.html:41 msgid "IKE Policies" msgstr "Políticas de IKE" -#: netbox/navigation/menu.py:234 +#: netbox/netbox/navigation/menu.py:234 msgid "IPSec Proposals" msgstr "Propuestas de IPSec" -#: netbox/navigation/menu.py:235 templates/vpn/ipsecproposal.html:37 +#: netbox/netbox/navigation/menu.py:235 +#: netbox/templates/vpn/ipsecproposal.html:37 msgid "IPSec Policies" msgstr "Políticas IPSec" -#: netbox/navigation/menu.py:236 templates/vpn/ikepolicy.html:38 -#: templates/vpn/ipsecpolicy.html:25 +#: netbox/netbox/navigation/menu.py:236 netbox/templates/vpn/ikepolicy.html:38 +#: netbox/templates/vpn/ipsecpolicy.html:25 msgid "IPSec Profiles" msgstr "Perfiles IPSec" -#: netbox/navigation/menu.py:243 templates/dcim/device_edit.html:78 -msgid "Virtualization" -msgstr "Virtualización" - -#: netbox/navigation/menu.py:251 -#: templates/virtualization/virtualmachine.html:174 -#: templates/virtualization/virtualmachine/base.html:32 -#: templates/virtualization/virtualmachine_list.html:21 -#: virtualization/tables/virtualmachines.py:104 virtualization/views.py:388 +#: netbox/netbox/navigation/menu.py:251 +#: 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 msgid "Virtual Disks" msgstr "Discos virtuales" -#: netbox/navigation/menu.py:258 +#: netbox/netbox/navigation/menu.py:258 msgid "Cluster Types" msgstr "Tipos de clústeres" -#: netbox/navigation/menu.py:259 +#: netbox/netbox/navigation/menu.py:259 msgid "Cluster Groups" msgstr "Grupos de clústeres" -#: netbox/navigation/menu.py:273 +#: netbox/netbox/navigation/menu.py:273 msgid "Circuit Types" msgstr "Tipos de circuitos" -#: netbox/navigation/menu.py:274 +#: netbox/netbox/navigation/menu.py:274 msgid "Circuit Groups" msgstr "Grupos de circuitos" -#: netbox/navigation/menu.py:275 templates/circuits/circuit.html:66 +#: netbox/netbox/navigation/menu.py:275 +#: netbox/templates/circuits/circuit.html:66 msgid "Group Assignments" msgstr "Tareas grupales" -#: netbox/navigation/menu.py:276 +#: netbox/netbox/navigation/menu.py:276 msgid "Circuit Terminations" msgstr "Terminaciones de circuitos" -#: netbox/navigation/menu.py:280 netbox/navigation/menu.py:282 +#: netbox/netbox/navigation/menu.py:280 netbox/netbox/navigation/menu.py:282 msgid "Providers" msgstr "Proveedores" -#: netbox/navigation/menu.py:283 templates/circuits/provider.html:51 +#: netbox/netbox/navigation/menu.py:283 +#: netbox/templates/circuits/provider.html:51 msgid "Provider Accounts" msgstr "Cuentas de proveedores" -#: netbox/navigation/menu.py:284 +#: netbox/netbox/navigation/menu.py:284 msgid "Provider Networks" msgstr "Redes de proveedores" -#: netbox/navigation/menu.py:298 +#: netbox/netbox/navigation/menu.py:298 msgid "Power Panels" msgstr "Paneles de alimentación" -#: netbox/navigation/menu.py:309 +#: netbox/netbox/navigation/menu.py:309 msgid "Configurations" msgstr "Configuraciones" -#: netbox/navigation/menu.py:311 +#: netbox/netbox/navigation/menu.py:311 msgid "Config Contexts" msgstr "Contextos de configuración" -#: netbox/navigation/menu.py:312 +#: netbox/netbox/navigation/menu.py:312 msgid "Config Templates" msgstr "Plantillas de configuración" -#: netbox/navigation/menu.py:319 netbox/navigation/menu.py:323 +#: netbox/netbox/navigation/menu.py:319 netbox/netbox/navigation/menu.py:323 msgid "Customization" msgstr "Personalización" -#: netbox/navigation/menu.py:325 templates/dcim/device_edit.html:103 -#: templates/dcim/htmx/cable_edit.html:81 -#: templates/dcim/virtualchassis_add.html:31 -#: templates/dcim/virtualchassis_edit.html:40 -#: templates/generic/bulk_edit.html:76 templates/htmx/form.html:19 -#: templates/inc/filter_list.html:30 templates/inc/panels/custom_fields.html:7 -#: templates/ipam/ipaddress_bulk_add.html:35 templates/ipam/vlan_edit.html:59 +#: netbox/netbox/navigation/menu.py:325 +#: netbox/templates/dcim/device_edit.html:103 +#: netbox/templates/dcim/htmx/cable_edit.html:81 +#: netbox/templates/dcim/virtualchassis_add.html:31 +#: netbox/templates/dcim/virtualchassis_edit.html:40 +#: netbox/templates/generic/bulk_edit.html:76 +#: netbox/templates/htmx/form.html:19 netbox/templates/inc/filter_list.html:30 +#: netbox/templates/inc/panels/custom_fields.html:7 +#: netbox/templates/ipam/ipaddress_bulk_add.html:35 +#: netbox/templates/ipam/vlan_edit.html:59 msgid "Custom Fields" msgstr "Campos personalizados" -#: netbox/navigation/menu.py:326 +#: netbox/netbox/navigation/menu.py:326 msgid "Custom Field Choices" msgstr "Opciones de campo personalizadas" -#: netbox/navigation/menu.py:327 +#: netbox/netbox/navigation/menu.py:327 msgid "Custom Links" msgstr "Vínculos personalizados" -#: netbox/navigation/menu.py:328 +#: netbox/netbox/navigation/menu.py:328 msgid "Export Templates" msgstr "Plantillas de exportación" -#: netbox/navigation/menu.py:329 +#: netbox/netbox/navigation/menu.py:329 msgid "Saved Filters" msgstr "Filtros guardados" -#: netbox/navigation/menu.py:331 +#: netbox/netbox/navigation/menu.py:331 msgid "Image Attachments" msgstr "Adjuntos de imágenes" -#: netbox/navigation/menu.py:349 +#: netbox/netbox/navigation/menu.py:349 msgid "Operations" msgstr "Operaciones" -#: netbox/navigation/menu.py:353 +#: netbox/netbox/navigation/menu.py:353 msgid "Integrations" msgstr "Integraciones" -#: netbox/navigation/menu.py:355 +#: netbox/netbox/navigation/menu.py:355 msgid "Data Sources" msgstr "Fuentes de datos" -#: netbox/navigation/menu.py:356 +#: netbox/netbox/navigation/menu.py:356 msgid "Event Rules" msgstr "Reglas del evento" -#: netbox/navigation/menu.py:357 +#: netbox/netbox/navigation/menu.py:357 msgid "Webhooks" msgstr "Webhooks" -#: netbox/navigation/menu.py:361 netbox/navigation/menu.py:365 -#: netbox/views/generic/feature_views.py:153 -#: templates/extras/report/base.html:37 templates/extras/script/base.html:36 +#: netbox/netbox/navigation/menu.py:361 netbox/netbox/navigation/menu.py:365 +#: netbox/netbox/views/generic/feature_views.py:153 +#: netbox/templates/extras/report/base.html:37 +#: netbox/templates/extras/script/base.html:36 msgid "Jobs" msgstr "Trabajos" -#: netbox/navigation/menu.py:371 +#: netbox/netbox/navigation/menu.py:371 msgid "Logging" msgstr "Explotación" -#: netbox/navigation/menu.py:373 +#: netbox/netbox/navigation/menu.py:373 msgid "Notification Groups" msgstr "Grupos de notificaciones" -#: netbox/navigation/menu.py:374 +#: netbox/netbox/navigation/menu.py:374 msgid "Journal Entries" msgstr "Entradas del diario" -#: netbox/navigation/menu.py:375 templates/core/objectchange.html:9 -#: templates/core/objectchange_list.html:4 +#: netbox/netbox/navigation/menu.py:375 +#: netbox/templates/core/objectchange.html:9 +#: netbox/templates/core/objectchange_list.html:4 msgid "Change Log" msgstr "Registro de cambios" -#: netbox/navigation/menu.py:382 templates/inc/user_menu.html:29 +#: netbox/netbox/navigation/menu.py:382 netbox/templates/inc/user_menu.html:29 msgid "Admin" msgstr "Admin" -#: netbox/navigation/menu.py:430 templates/account/base.html:27 -#: templates/inc/user_menu.html:57 +#: netbox/netbox/navigation/menu.py:430 netbox/templates/account/base.html:27 +#: netbox/templates/inc/user_menu.html:57 msgid "API Tokens" msgstr "Tokens de API" -#: netbox/navigation/menu.py:437 users/forms/model_forms.py:187 -#: users/forms/model_forms.py:195 users/forms/model_forms.py:242 -#: users/forms/model_forms.py:249 +#: netbox/netbox/navigation/menu.py:437 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/navigation/menu.py:445 netbox/navigation/menu.py:449 -#: templates/core/system.html:7 +#: netbox/netbox/navigation/menu.py:445 netbox/netbox/navigation/menu.py:449 +#: netbox/templates/core/system.html:7 msgid "System" msgstr "Sistema" -#: netbox/navigation/menu.py:454 netbox/navigation/menu.py:502 -#: templates/500.html:35 templates/account/preferences.html:22 -#: templates/core/plugin.html:13 templates/core/plugin_list.html:7 -#: templates/core/plugin_list.html:12 +#: netbox/netbox/navigation/menu.py:454 netbox/netbox/navigation/menu.py:502 +#: netbox/templates/500.html:35 netbox/templates/account/preferences.html:22 +#: netbox/templates/core/plugin.html:13 +#: netbox/templates/core/plugin_list.html:7 +#: netbox/templates/core/plugin_list.html:12 msgid "Plugins" msgstr "Plugins" -#: netbox/navigation/menu.py:459 +#: netbox/netbox/navigation/menu.py:459 msgid "Configuration History" msgstr "Historial de configuración" -#: netbox/navigation/menu.py:465 templates/core/rq_task.html:8 -#: templates/core/rq_task_list.html:22 +#: netbox/netbox/navigation/menu.py:465 netbox/templates/core/rq_task.html:8 +#: netbox/templates/core/rq_task_list.html:22 msgid "Background Tasks" msgstr "Tareas en segundo plano" -#: netbox/plugins/navigation.py:47 netbox/plugins/navigation.py:69 +#: netbox/netbox/plugins/navigation.py:47 +#: netbox/netbox/plugins/navigation.py:69 msgid "Permissions must be passed as a tuple or list." msgstr "Los permisos se deben pasar en forma de tupla o lista." -#: netbox/plugins/navigation.py:51 +#: netbox/netbox/plugins/navigation.py:51 msgid "Buttons must be passed as a tuple or list." msgstr "Los botones se deben pasar como una tupla o una lista." -#: netbox/plugins/navigation.py:73 +#: netbox/netbox/plugins/navigation.py:73 msgid "Button color must be a choice within ButtonColorChoices." msgstr "El color del botón debe ser una opción dentro de ButtonColorChoices." -#: netbox/plugins/registration.py:25 +#: netbox/netbox/plugins/registration.py:25 #, python-brace-format msgid "" "PluginTemplateExtension class {template_extension} was passed as an " @@ -10675,7 +11375,7 @@ msgstr "" "Clase PluginTemplateExtension {template_extension} ¡se aprobó como " "instancia!" -#: netbox/plugins/registration.py:31 +#: netbox/netbox/plugins/registration.py:31 #, python-brace-format msgid "" "{template_extension} is not a subclass of " @@ -10684,194 +11384,195 @@ msgstr "" "{template_extension} ¡no es una subclase de " "NetBox.Plugins.PluginTemplateExtension!" -#: netbox/plugins/registration.py:51 +#: netbox/netbox/plugins/registration.py:51 #, python-brace-format msgid "{item} must be an instance of netbox.plugins.PluginMenuItem" msgstr "{item} debe ser una instancia de netbox.plugins.PluginMenuItem" -#: netbox/plugins/registration.py:62 +#: netbox/netbox/plugins/registration.py:62 #, 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/plugins/registration.py:67 +#: netbox/netbox/plugins/registration.py:67 #, python-brace-format msgid "{button} must be an instance of netbox.plugins.PluginMenuButton" msgstr "{button} debe ser una instancia de netbox.plugins.PluginMenuButton" -#: netbox/plugins/templates.py:37 +#: netbox/netbox/plugins/templates.py:37 msgid "extra_context must be a dictionary" msgstr "extra_context debe ser un diccionario" -#: netbox/preferences.py:19 +#: netbox/netbox/preferences.py:19 msgid "HTMX Navigation" msgstr "Navegación HTMX" -#: netbox/preferences.py:24 +#: netbox/netbox/preferences.py:24 msgid "Enable dynamic UI navigation" msgstr "Habilitar la navegación dinámica por interfaz de usuario" -#: netbox/preferences.py:26 +#: netbox/netbox/preferences.py:26 msgid "Experimental feature" msgstr "Función experimental" -#: netbox/preferences.py:29 +#: netbox/netbox/preferences.py:29 msgid "Language" msgstr "Idioma" -#: netbox/preferences.py:34 +#: netbox/netbox/preferences.py:34 msgid "Forces UI translation to the specified language" msgstr "Fuerza la traducción de la interfaz de usuario al idioma especificado" -#: netbox/preferences.py:36 +#: netbox/netbox/preferences.py:36 msgid "Support for translation has been disabled locally" msgstr "La compatibilidad con la traducción se ha desactivado localmente" -#: netbox/preferences.py:42 +#: netbox/netbox/preferences.py:42 msgid "Page length" msgstr "Longitud de página" -#: netbox/preferences.py:44 +#: netbox/netbox/preferences.py:44 msgid "The default number of objects to display per page" msgstr "El número predeterminado de objetos que se mostrarán por página" -#: netbox/preferences.py:48 +#: netbox/netbox/preferences.py:48 msgid "Paginator placement" msgstr "Colocación del paginador" -#: netbox/preferences.py:50 +#: netbox/netbox/preferences.py:50 msgid "Bottom" msgstr "Parte inferior" -#: netbox/preferences.py:51 +#: netbox/netbox/preferences.py:51 msgid "Top" msgstr "Parte superior" -#: netbox/preferences.py:52 +#: netbox/netbox/preferences.py:52 msgid "Both" msgstr "Ambos" -#: netbox/preferences.py:55 +#: netbox/netbox/preferences.py:55 msgid "Where the paginator controls will be displayed relative to a table" msgstr "" "Dónde se mostrarán los controles del paginador en relación con una tabla" -#: netbox/preferences.py:60 +#: netbox/netbox/preferences.py:60 msgid "Data format" msgstr "Formato de datos" -#: netbox/preferences.py:65 +#: netbox/netbox/preferences.py:65 msgid "The preferred syntax for displaying generic data within the UI" msgstr "" "La sintaxis preferida para mostrar datos genéricos en la interfaz de usuario" -#: netbox/registry.py:14 +#: netbox/netbox/registry.py:14 #, python-brace-format msgid "Invalid store: {key}" msgstr "Tienda no válida: {key}" -#: netbox/registry.py:17 +#: netbox/netbox/registry.py:17 msgid "Cannot add stores to registry after initialization" msgstr "No se pueden agregar tiendas al registro después de la inicialización" -#: netbox/registry.py:20 +#: netbox/netbox/registry.py:20 msgid "Cannot delete stores from registry" msgstr "No se pueden eliminar las tiendas del registro" -#: netbox/settings.py:760 +#: netbox/netbox/settings.py:760 msgid "Czech" msgstr "checa" -#: netbox/settings.py:761 +#: netbox/netbox/settings.py:761 msgid "Danish" msgstr "danés" -#: netbox/settings.py:762 +#: netbox/netbox/settings.py:762 msgid "German" msgstr "alemán" -#: netbox/settings.py:763 +#: netbox/netbox/settings.py:763 msgid "English" msgstr "Inglés" -#: netbox/settings.py:764 +#: netbox/netbox/settings.py:764 msgid "Spanish" msgstr "española" -#: netbox/settings.py:765 +#: netbox/netbox/settings.py:765 msgid "French" msgstr "francesa" -#: netbox/settings.py:766 +#: netbox/netbox/settings.py:766 msgid "Italian" msgstr "italiano" -#: netbox/settings.py:767 +#: netbox/netbox/settings.py:767 msgid "Japanese" msgstr "japonés" -#: netbox/settings.py:768 +#: netbox/netbox/settings.py:768 msgid "Dutch" msgstr "holandesa" -#: netbox/settings.py:769 +#: netbox/netbox/settings.py:769 msgid "Polish" msgstr "polaco" -#: netbox/settings.py:770 +#: netbox/netbox/settings.py:770 msgid "Portuguese" msgstr "portugués" -#: netbox/settings.py:771 +#: netbox/netbox/settings.py:771 msgid "Russian" msgstr "rusa" -#: netbox/settings.py:772 +#: netbox/netbox/settings.py:772 msgid "Turkish" msgstr "turca" -#: netbox/settings.py:773 +#: netbox/netbox/settings.py:773 msgid "Ukrainian" msgstr "ucraniana" -#: netbox/settings.py:774 +#: netbox/netbox/settings.py:774 msgid "Chinese" msgstr "chino" -#: netbox/tables/columns.py:176 +#: netbox/netbox/tables/columns.py:176 msgid "Select all" msgstr "Selecciona todo" -#: netbox/tables/columns.py:189 +#: netbox/netbox/tables/columns.py:189 msgid "Toggle all" msgstr "Alternar todo" -#: netbox/tables/columns.py:300 +#: netbox/netbox/tables/columns.py:300 msgid "Toggle Dropdown" msgstr "Alternar menú desplegable" -#: netbox/tables/columns.py:572 templates/core/job.html:53 +#: netbox/netbox/tables/columns.py:572 netbox/templates/core/job.html:53 msgid "Error" msgstr "Error" -#: netbox/tables/tables.py:58 +#: netbox/netbox/tables/tables.py:58 #, python-brace-format msgid "No {model_name} found" msgstr "No {model_name} encontrado" -#: netbox/tables/tables.py:249 templates/generic/bulk_import.html:117 +#: netbox/netbox/tables/tables.py:249 +#: netbox/templates/generic/bulk_import.html:117 msgid "Field" msgstr "Campo" -#: netbox/tables/tables.py:252 +#: netbox/netbox/tables/tables.py:252 msgid "Value" msgstr "Valor" -#: netbox/tests/dummy_plugin/navigation.py:29 +#: netbox/netbox/tests/dummy_plugin/navigation.py:29 msgid "Dummy Plugin" msgstr "Plugin ficticio" -#: netbox/views/generic/bulk_views.py:114 +#: netbox/netbox/views/generic/bulk_views.py:114 #, python-brace-format msgid "" "There was an error rendering the selected export template ({template}): " @@ -10880,58 +11581,58 @@ msgstr "" "Se ha producido un error al procesar la plantilla de exportación " "seleccionada ({template}): {error}" -#: netbox/views/generic/bulk_views.py:416 +#: netbox/netbox/views/generic/bulk_views.py:416 #, python-brace-format msgid "Row {i}: Object with ID {id} does not exist" msgstr "Fila {i}: Objeto con ID {id} no existe" -#: netbox/views/generic/bulk_views.py:702 -#: netbox/views/generic/bulk_views.py:900 -#: netbox/views/generic/bulk_views.py:948 +#: netbox/netbox/views/generic/bulk_views.py:709 +#: netbox/netbox/views/generic/bulk_views.py:910 +#: netbox/netbox/views/generic/bulk_views.py:958 #, python-brace-format msgid "No {object_type} were selected." msgstr "No {object_type} fueron seleccionados." -#: netbox/views/generic/bulk_views.py:782 +#: netbox/netbox/views/generic/bulk_views.py:788 #, python-brace-format msgid "Renamed {count} {object_type}" msgstr "Renombrado {count} {object_type}" -#: netbox/views/generic/bulk_views.py:878 +#: netbox/netbox/views/generic/bulk_views.py:888 #, python-brace-format msgid "Deleted {count} {object_type}" msgstr "Eliminado {count} {object_type}" -#: netbox/views/generic/feature_views.py:40 +#: netbox/netbox/views/generic/feature_views.py:40 msgid "Changelog" msgstr "Registro de cambios" -#: netbox/views/generic/feature_views.py:93 +#: netbox/netbox/views/generic/feature_views.py:93 msgid "Journal" msgstr "diario" -#: netbox/views/generic/feature_views.py:207 +#: netbox/netbox/views/generic/feature_views.py:207 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/views/generic/feature_views.py:211 +#: netbox/netbox/views/generic/feature_views.py:211 #, python-brace-format msgid "Synchronized data for {object_type} {object}." msgstr "Datos sincronizados para {object_type} {object}." -#: netbox/views/generic/feature_views.py:236 +#: netbox/netbox/views/generic/feature_views.py:236 #, python-brace-format msgid "Synced {count} {object_type}" msgstr "Sincronizado {count} {object_type}" -#: netbox/views/generic/object_views.py:108 +#: netbox/netbox/views/generic/object_views.py:108 #, python-brace-format msgid "{class_name} must implement get_children()" msgstr "{class_name} debe implementar get_children ()" -#: netbox/views/misc.py:44 +#: netbox/netbox/views/misc.py:46 msgid "" "There was an error loading the dashboard configuration. A default dashboard " "is in use." @@ -10939,706 +11640,748 @@ msgstr "" "Se ha producido un error al cargar la configuración del panel. Se está " "utilizando un panel predeterminado." -#: templates/403.html:4 +#: netbox/templates/403.html:4 msgid "Access Denied" msgstr "Acceso denegado" -#: templates/403.html:9 +#: netbox/templates/403.html:9 msgid "You do not have permission to access this page" msgstr "No tienes permiso para acceder a esta página" -#: templates/404.html:4 +#: netbox/templates/404.html:4 msgid "Page Not Found" msgstr "No se encontró la página" -#: templates/404.html:9 +#: netbox/templates/404.html:9 msgid "The requested page does not exist" msgstr "La página solicitada no existe" -#: templates/500.html:7 templates/500.html:18 +#: netbox/templates/500.html:7 netbox/templates/500.html:18 msgid "Server Error" msgstr "Error de servidor" -#: templates/500.html:23 +#: netbox/templates/500.html:23 msgid "There was a problem with your request. Please contact an administrator" msgstr "" "Ha surgido un problema con tu solicitud. Póngase en contacto con un " "administrador" -#: templates/500.html:28 +#: netbox/templates/500.html:28 msgid "The complete exception is provided below" msgstr "La excepción completa se proporciona a continuación" -#: templates/500.html:33 templates/core/system.html:40 +#: netbox/templates/500.html:33 netbox/templates/core/system.html:40 msgid "Python version" msgstr "Versión de Python" -#: templates/500.html:34 +#: netbox/templates/500.html:34 msgid "NetBox version" msgstr "Versión NetBox" -#: templates/500.html:36 +#: netbox/templates/500.html:36 msgid "None installed" msgstr "No hay ninguno instalado" -#: templates/500.html:39 +#: netbox/templates/500.html:39 msgid "If further assistance is required, please post to the" msgstr "Si necesita más ayuda, envíela por correo a" -#: templates/500.html:39 +#: netbox/templates/500.html:39 msgid "NetBox discussion forum" msgstr "Foro de discusión de NetBox" -#: templates/500.html:39 +#: netbox/templates/500.html:39 msgid "on GitHub" msgstr "en GitHub" -#: templates/500.html:42 templates/base/40x.html:17 +#: netbox/templates/500.html:42 netbox/templates/base/40x.html:17 msgid "Home Page" msgstr "Página de inicio" -#: templates/account/base.html:7 templates/inc/user_menu.html:45 -#: vpn/forms/bulk_edit.py:255 vpn/forms/filtersets.py:189 -#: vpn/forms/model_forms.py:379 +#: netbox/templates/account/base.html:7 netbox/templates/inc/user_menu.html:45 +#: netbox/vpn/forms/bulk_edit.py:255 netbox/vpn/forms/filtersets.py:189 +#: netbox/vpn/forms/model_forms.py:379 msgid "Profile" msgstr "Perfil" -#: templates/account/base.html:13 templates/account/notifications.html:7 -#: templates/inc/user_menu.html:15 +#: netbox/templates/account/base.html:13 +#: netbox/templates/account/notifications.html:7 +#: netbox/templates/inc/user_menu.html:15 msgid "Notifications" msgstr "Notificaciones" -#: templates/account/base.html:16 templates/account/subscriptions.html:7 -#: templates/inc/user_menu.html:51 +#: netbox/templates/account/base.html:16 +#: netbox/templates/account/subscriptions.html:7 +#: netbox/templates/inc/user_menu.html:51 msgid "Subscriptions" msgstr "Suscripciones" -#: templates/account/base.html:19 templates/inc/user_menu.html:54 +#: netbox/templates/account/base.html:19 +#: netbox/templates/inc/user_menu.html:54 msgid "Preferences" msgstr "Preferencias" -#: templates/account/password.html:5 +#: netbox/templates/account/password.html:5 msgid "Change Password" msgstr "Cambiar contraseña" -#: templates/account/password.html:19 templates/account/preferences.html:77 -#: templates/core/configrevision_restore.html:63 -#: templates/dcim/devicebay_populate.html:34 -#: templates/dcim/virtualchassis_add_member.html:26 -#: templates/dcim/virtualchassis_edit.html:103 -#: templates/extras/object_journal.html:26 templates/extras/script.html:38 -#: templates/generic/bulk_add_component.html:67 -#: templates/generic/bulk_delete.html:65 templates/generic/bulk_edit.html:106 -#: templates/generic/bulk_import.html:56 templates/generic/bulk_import.html:78 -#: templates/generic/bulk_import.html:100 -#: templates/generic/bulk_remove.html:62 templates/generic/bulk_rename.html:63 -#: templates/generic/confirmation_form.html:19 -#: templates/generic/object_edit.html:72 templates/htmx/delete_form.html:53 -#: templates/htmx/delete_form.html:55 templates/ipam/ipaddress_assign.html:28 -#: templates/virtualization/cluster_add_devices.html:30 +#: netbox/templates/account/password.html:19 +#: netbox/templates/account/preferences.html:77 +#: netbox/templates/core/configrevision_restore.html:63 +#: netbox/templates/dcim/devicebay_populate.html:34 +#: netbox/templates/dcim/virtualchassis_add_member.html:26 +#: netbox/templates/dcim/virtualchassis_edit.html:103 +#: netbox/templates/extras/object_journal.html:26 +#: netbox/templates/extras/script.html:38 +#: netbox/templates/generic/bulk_add_component.html:67 +#: netbox/templates/generic/bulk_delete.html:65 +#: netbox/templates/generic/bulk_edit.html:106 +#: netbox/templates/generic/bulk_import.html:56 +#: netbox/templates/generic/bulk_import.html:78 +#: netbox/templates/generic/bulk_import.html:100 +#: netbox/templates/generic/bulk_remove.html:62 +#: netbox/templates/generic/bulk_rename.html:63 +#: netbox/templates/generic/confirmation_form.html:19 +#: netbox/templates/generic/object_edit.html:72 +#: netbox/templates/htmx/delete_form.html:53 +#: netbox/templates/htmx/delete_form.html:55 +#: netbox/templates/ipam/ipaddress_assign.html:28 +#: netbox/templates/virtualization/cluster_add_devices.html:30 msgid "Cancel" msgstr "Cancelar" -#: templates/account/password.html:20 templates/account/preferences.html:78 -#: templates/dcim/devicebay_populate.html:35 -#: templates/dcim/virtualchassis_add_member.html:28 -#: templates/dcim/virtualchassis_edit.html:105 -#: templates/extras/dashboard/widget_add.html:26 -#: templates/extras/dashboard/widget_config.html:19 -#: templates/extras/object_journal.html:27 -#: templates/generic/object_edit.html:75 -#: utilities/templates/helpers/applied_filters.html:16 -#: utilities/templates/helpers/table_config_form.html:40 +#: netbox/templates/account/password.html:20 +#: netbox/templates/account/preferences.html:78 +#: netbox/templates/dcim/devicebay_populate.html:35 +#: netbox/templates/dcim/virtualchassis_add_member.html:28 +#: netbox/templates/dcim/virtualchassis_edit.html:105 +#: netbox/templates/extras/dashboard/widget_add.html:26 +#: netbox/templates/extras/dashboard/widget_config.html:19 +#: netbox/templates/extras/object_journal.html:27 +#: netbox/templates/generic/object_edit.html:75 +#: netbox/utilities/templates/helpers/applied_filters.html:16 +#: netbox/utilities/templates/helpers/table_config_form.html:40 msgid "Save" msgstr "Guardar" -#: templates/account/preferences.html:34 +#: netbox/templates/account/preferences.html:34 msgid "Table Configurations" msgstr "Configuraciones de tablas" -#: templates/account/preferences.html:39 +#: netbox/templates/account/preferences.html:39 msgid "Clear table preferences" msgstr "Borrar preferencias de mesa" -#: templates/account/preferences.html:47 +#: netbox/templates/account/preferences.html:47 msgid "Toggle All" msgstr "Alternar todo" -#: templates/account/preferences.html:49 +#: netbox/templates/account/preferences.html:49 msgid "Table" msgstr "Tabla" -#: templates/account/preferences.html:50 +#: netbox/templates/account/preferences.html:50 msgid "Ordering" msgstr "Pedido" -#: templates/account/preferences.html:51 +#: netbox/templates/account/preferences.html:51 msgid "Columns" msgstr "Columnas" -#: templates/account/preferences.html:71 templates/dcim/cable_trace.html:113 -#: templates/extras/object_configcontext.html:43 +#: netbox/templates/account/preferences.html:71 +#: netbox/templates/dcim/cable_trace.html:113 +#: netbox/templates/extras/object_configcontext.html:43 msgid "None found" msgstr "No se encontró ninguno" -#: templates/account/profile.html:6 +#: netbox/templates/account/profile.html:6 msgid "User Profile" msgstr "Perfil de usuario" -#: templates/account/profile.html:12 +#: netbox/templates/account/profile.html:12 msgid "Account Details" msgstr "Detalles de la cuenta" -#: templates/account/profile.html:29 templates/tenancy/contact.html:43 -#: templates/users/user.html:25 tenancy/forms/bulk_edit.py:109 +#: netbox/templates/account/profile.html:29 +#: netbox/templates/tenancy/contact.html:43 +#: netbox/templates/users/user.html:25 netbox/tenancy/forms/bulk_edit.py:109 msgid "Email" msgstr "Correo electrónico" -#: templates/account/profile.html:33 templates/users/user.html:29 +#: netbox/templates/account/profile.html:33 +#: netbox/templates/users/user.html:29 msgid "Account Created" msgstr "Cuenta creada" -#: templates/account/profile.html:37 templates/users/user.html:33 +#: netbox/templates/account/profile.html:37 +#: netbox/templates/users/user.html:33 msgid "Last Login" msgstr "Último inicio de sesión" -#: templates/account/profile.html:41 templates/users/user.html:45 +#: netbox/templates/account/profile.html:41 +#: netbox/templates/users/user.html:45 msgid "Superuser" msgstr "Superusuario" -#: templates/account/profile.html:45 templates/inc/user_menu.html:31 -#: templates/users/user.html:41 +#: netbox/templates/account/profile.html:45 +#: netbox/templates/inc/user_menu.html:31 netbox/templates/users/user.html:41 msgid "Staff" msgstr "Personal" -#: templates/account/profile.html:53 templates/users/objectpermission.html:82 -#: templates/users/user.html:53 +#: netbox/templates/account/profile.html:53 +#: netbox/templates/users/objectpermission.html:82 +#: netbox/templates/users/user.html:53 msgid "Assigned Groups" msgstr "Grupos asignados" -#: templates/account/profile.html:58 -#: templates/circuits/circuit_terminations_swap.html:18 -#: templates/circuits/circuit_terminations_swap.html:26 -#: templates/circuits/circuittermination.html:34 -#: templates/circuits/inc/circuit_termination.html:68 -#: templates/core/objectchange.html:124 templates/core/objectchange.html:142 -#: templates/dcim/devicebay.html:59 -#: templates/dcim/inc/panels/inventory_items.html:45 -#: templates/dcim/interface.html:296 templates/dcim/modulebay.html:80 -#: templates/extras/configcontext.html:70 templates/extras/eventrule.html:66 -#: templates/extras/htmx/script_result.html:60 -#: templates/extras/webhook.html:65 templates/extras/webhook.html:75 -#: templates/inc/panel_table.html:13 templates/inc/panels/comments.html:10 -#: templates/ipam/inc/panels/fhrp_groups.html:56 templates/users/group.html:34 -#: templates/users/group.html:44 templates/users/objectpermission.html:77 -#: templates/users/objectpermission.html:87 templates/users/user.html:58 -#: templates/users/user.html:68 +#: netbox/templates/account/profile.html:58 +#: netbox/templates/circuits/circuit_terminations_swap.html:18 +#: netbox/templates/circuits/circuit_terminations_swap.html:26 +#: netbox/templates/circuits/circuittermination.html:34 +#: netbox/templates/circuits/inc/circuit_termination.html:68 +#: netbox/templates/core/objectchange.html:124 +#: 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/modulebay.html:80 +#: netbox/templates/extras/configcontext.html:70 +#: netbox/templates/extras/eventrule.html:66 +#: netbox/templates/extras/htmx/script_result.html:60 +#: netbox/templates/extras/webhook.html:65 +#: netbox/templates/extras/webhook.html:75 +#: netbox/templates/inc/panel_table.html:13 +#: netbox/templates/inc/panels/comments.html:10 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:56 +#: netbox/templates/users/group.html:34 netbox/templates/users/group.html:44 +#: netbox/templates/users/objectpermission.html:77 +#: netbox/templates/users/objectpermission.html:87 +#: netbox/templates/users/user.html:58 netbox/templates/users/user.html:68 msgid "None" msgstr "Ninguna" -#: templates/account/profile.html:68 templates/users/user.html:78 +#: netbox/templates/account/profile.html:68 +#: netbox/templates/users/user.html:78 msgid "Recent Activity" msgstr "Actividad reciente" -#: templates/account/token.html:8 templates/account/token_list.html:6 +#: netbox/templates/account/token.html:8 +#: netbox/templates/account/token_list.html:6 msgid "My API Tokens" msgstr "Mis fichas de API" -#: templates/account/token.html:11 templates/account/token.html:19 -#: templates/users/token.html:6 templates/users/token.html:14 -#: users/forms/filtersets.py:120 +#: netbox/templates/account/token.html:11 +#: netbox/templates/account/token.html:19 netbox/templates/users/token.html:6 +#: netbox/templates/users/token.html:14 netbox/users/forms/filtersets.py:120 msgid "Token" msgstr "Símbolo" -#: templates/account/token.html:39 templates/users/token.html:31 -#: users/forms/bulk_edit.py:107 +#: netbox/templates/account/token.html:39 netbox/templates/users/token.html:31 +#: netbox/users/forms/bulk_edit.py:107 msgid "Write enabled" msgstr "Escritura habilitada" -#: templates/account/token.html:51 templates/users/token.html:43 +#: netbox/templates/account/token.html:51 netbox/templates/users/token.html:43 msgid "Last used" msgstr "Utilizado por última vez" -#: templates/account/token_list.html:12 +#: netbox/templates/account/token_list.html:12 msgid "Add a Token" msgstr "Añadir un token" -#: templates/base/base.html:22 templates/home.html:27 +#: netbox/templates/base/base.html:22 netbox/templates/home.html:27 msgid "Home" msgstr "Inicio" -#: templates/base/layout.html:25 +#: netbox/templates/base/layout.html:25 msgid "NetBox Motif" msgstr "Motivo NetBox" -#: templates/base/layout.html:38 templates/base/layout.html:39 -#: templates/login.html:14 templates/login.html:15 +#: netbox/templates/base/layout.html:38 netbox/templates/base/layout.html:39 +#: netbox/templates/login.html:14 netbox/templates/login.html:15 msgid "NetBox Logo" msgstr "Logotipo de NetBox" -#: templates/base/layout.html:150 templates/base/layout.html:151 +#: netbox/templates/base/layout.html:150 netbox/templates/base/layout.html:151 msgid "Docs" msgstr "Documentos" -#: templates/base/layout.html:156 templates/base/layout.html:157 -#: templates/rest_framework/api.html:10 +#: netbox/templates/base/layout.html:156 netbox/templates/base/layout.html:157 +#: netbox/templates/rest_framework/api.html:10 msgid "REST API" msgstr "API DE DESCANSO" -#: templates/base/layout.html:162 templates/base/layout.html:163 +#: netbox/templates/base/layout.html:162 netbox/templates/base/layout.html:163 msgid "REST API documentation" msgstr "Documentación de la API REST" -#: templates/base/layout.html:169 templates/base/layout.html:170 +#: netbox/templates/base/layout.html:169 netbox/templates/base/layout.html:170 msgid "GraphQL API" msgstr "API de GraphQL" -#: templates/base/layout.html:185 templates/base/layout.html:186 +#: netbox/templates/base/layout.html:185 netbox/templates/base/layout.html:186 msgid "NetBox Labs Support" msgstr "Soporte de NetBox Labs" -#: templates/base/layout.html:194 templates/base/layout.html:195 +#: netbox/templates/base/layout.html:194 netbox/templates/base/layout.html:195 msgid "Source Code" msgstr "Código fuente" -#: templates/base/layout.html:200 templates/base/layout.html:201 +#: netbox/templates/base/layout.html:200 netbox/templates/base/layout.html:201 msgid "Community" msgstr "Comunidad" -#: templates/circuits/circuit.html:47 +#: netbox/templates/circuits/circuit.html:47 msgid "Install Date" msgstr "Fecha de instalación" -#: templates/circuits/circuit.html:51 +#: netbox/templates/circuits/circuit.html:51 msgid "Termination Date" msgstr "Fecha de terminación" -#: templates/circuits/circuit.html:70 -#: templates/ipam/inc/panels/fhrp_groups.html:15 +#: netbox/templates/circuits/circuit.html:70 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:15 msgid "Assign Group" msgstr "Asignar grupo" -#: templates/circuits/circuit_terminations_swap.html:4 +#: netbox/templates/circuits/circuit_terminations_swap.html:4 msgid "Swap Circuit Terminations" msgstr "Intercambiar terminaciones de circuitos" -#: templates/circuits/circuit_terminations_swap.html:8 +#: netbox/templates/circuits/circuit_terminations_swap.html:8 #, python-format msgid "Swap these terminations for circuit %(circuit)s?" msgstr "Cambie estas terminaciones por circuito %(circuit)s?" -#: templates/circuits/circuit_terminations_swap.html:14 +#: netbox/templates/circuits/circuit_terminations_swap.html:14 msgid "A side" msgstr "Un lado" -#: templates/circuits/circuit_terminations_swap.html:22 +#: netbox/templates/circuits/circuit_terminations_swap.html:22 msgid "Z side" msgstr "Lado Z" -#: templates/circuits/circuitgroup.html:16 +#: netbox/templates/circuits/circuitgroup.html:16 msgid "Assign Circuit" msgstr "Asignar circuito" -#: templates/circuits/circuitgroupassignment.html:19 +#: netbox/templates/circuits/circuitgroupassignment.html:19 msgid "Circuit Group Assignment" msgstr "Asignación de grupos de circuitos" -#: templates/circuits/circuittype.html:10 +#: netbox/templates/circuits/circuittype.html:10 msgid "Add Circuit" msgstr "Agregar circuito" -#: templates/circuits/circuittype.html:19 +#: netbox/templates/circuits/circuittype.html:19 msgid "Circuit Type" msgstr "Tipo de circuito" -#: templates/circuits/inc/circuit_termination.html:10 -#: templates/dcim/manufacturer.html:11 -#: templates/generic/bulk_add_component.html:22 -#: templates/users/objectpermission.html:38 -#: utilities/templates/buttons/add.html:4 -#: utilities/templates/helpers/table_config_form.html:20 +#: netbox/templates/circuits/inc/circuit_termination.html:10 +#: netbox/templates/dcim/manufacturer.html:11 +#: netbox/templates/generic/bulk_add_component.html:22 +#: netbox/templates/users/objectpermission.html:38 +#: netbox/utilities/templates/buttons/add.html:4 +#: netbox/utilities/templates/helpers/table_config_form.html:20 msgid "Add" msgstr "Añadir" -#: templates/circuits/inc/circuit_termination.html:15 -#: templates/circuits/inc/circuit_termination_fields.html:36 -#: templates/dcim/inc/panels/inventory_items.html:32 -#: templates/dcim/powerpanel.html:56 templates/extras/script_list.html:30 -#: templates/generic/object_edit.html:47 -#: templates/ipam/inc/ipaddress_edit_header.html:7 -#: templates/ipam/inc/panels/fhrp_groups.html:43 -#: utilities/templates/buttons/edit.html:3 +#: netbox/templates/circuits/inc/circuit_termination.html:15 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:36 +#: netbox/templates/dcim/inc/panels/inventory_items.html:32 +#: netbox/templates/dcim/powerpanel.html:56 +#: netbox/templates/extras/script_list.html:30 +#: netbox/templates/generic/object_edit.html:47 +#: netbox/templates/ipam/inc/ipaddress_edit_header.html:7 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:43 +#: netbox/utilities/templates/buttons/edit.html:3 msgid "Edit" msgstr "Editar" -#: templates/circuits/inc/circuit_termination.html:18 +#: netbox/templates/circuits/inc/circuit_termination.html:18 msgid "Swap" msgstr "Intercambiar" -#: templates/circuits/inc/circuit_termination_fields.html:19 -#: templates/dcim/consoleport.html:59 templates/dcim/consoleserverport.html:60 -#: templates/dcim/powerfeed.html:114 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:19 +#: netbox/templates/dcim/consoleport.html:59 +#: netbox/templates/dcim/consoleserverport.html:60 +#: netbox/templates/dcim/powerfeed.html:114 msgid "Marked as connected" msgstr "Marcado como conectado" -#: templates/circuits/inc/circuit_termination_fields.html:21 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:21 msgid "to" msgstr "a" -#: templates/circuits/inc/circuit_termination_fields.html:31 -#: templates/circuits/inc/circuit_termination_fields.html:32 -#: templates/dcim/frontport.html:80 -#: templates/dcim/inc/connection_endpoints.html:7 -#: templates/dcim/interface.html:154 templates/dcim/rearport.html:76 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:31 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:32 +#: netbox/templates/dcim/frontport.html:80 +#: netbox/templates/dcim/inc/connection_endpoints.html:7 +#: netbox/templates/dcim/interface.html:154 +#: netbox/templates/dcim/rearport.html:76 msgid "Trace" msgstr "Rastrear" -#: templates/circuits/inc/circuit_termination_fields.html:35 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:35 msgid "Edit cable" msgstr "Editar cable" -#: templates/circuits/inc/circuit_termination_fields.html:40 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:40 msgid "Remove cable" msgstr "Quitar el cable" -#: templates/circuits/inc/circuit_termination_fields.html:41 -#: templates/dcim/bulk_disconnect.html:5 -#: templates/dcim/device/consoleports.html:12 -#: templates/dcim/device/consoleserverports.html:12 -#: templates/dcim/device/frontports.html:12 -#: templates/dcim/device/interfaces.html:16 -#: templates/dcim/device/poweroutlets.html:12 -#: templates/dcim/device/powerports.html:12 -#: templates/dcim/device/rearports.html:12 templates/dcim/powerpanel.html:61 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:41 +#: netbox/templates/dcim/bulk_disconnect.html:5 +#: netbox/templates/dcim/device/consoleports.html:12 +#: netbox/templates/dcim/device/consoleserverports.html:12 +#: netbox/templates/dcim/device/frontports.html:12 +#: netbox/templates/dcim/device/interfaces.html:16 +#: netbox/templates/dcim/device/poweroutlets.html:12 +#: netbox/templates/dcim/device/powerports.html:12 +#: netbox/templates/dcim/device/rearports.html:12 +#: netbox/templates/dcim/powerpanel.html:61 msgid "Disconnect" msgstr "Desconectar" -#: templates/circuits/inc/circuit_termination_fields.html:48 -#: templates/dcim/consoleport.html:69 templates/dcim/consoleserverport.html:70 -#: templates/dcim/frontport.html:102 templates/dcim/interface.html:180 -#: templates/dcim/interface.html:200 templates/dcim/powerfeed.html:127 -#: templates/dcim/poweroutlet.html:71 templates/dcim/poweroutlet.html:72 -#: templates/dcim/powerport.html:73 templates/dcim/rearport.html:98 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:48 +#: netbox/templates/dcim/consoleport.html:69 +#: netbox/templates/dcim/consoleserverport.html:70 +#: netbox/templates/dcim/frontport.html:102 +#: netbox/templates/dcim/interface.html:180 +#: netbox/templates/dcim/interface.html:200 +#: netbox/templates/dcim/powerfeed.html:127 +#: netbox/templates/dcim/poweroutlet.html:71 +#: netbox/templates/dcim/poweroutlet.html:72 +#: netbox/templates/dcim/powerport.html:73 +#: netbox/templates/dcim/rearport.html:98 msgid "Connect" msgstr "Conectar" -#: templates/circuits/inc/circuit_termination_fields.html:70 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:70 msgid "Downstream" msgstr "Río abajo" -#: templates/circuits/inc/circuit_termination_fields.html:71 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:71 msgid "Upstream" msgstr "Aguas arriba" -#: templates/circuits/inc/circuit_termination_fields.html:80 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:80 msgid "Cross-Connect" msgstr "Conexión cruzada" -#: templates/circuits/inc/circuit_termination_fields.html:84 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:84 msgid "Patch Panel/Port" msgstr "Panel de conexión/puerto" -#: templates/circuits/provider.html:11 +#: netbox/templates/circuits/provider.html:11 msgid "Add circuit" msgstr "Añadir circuito" -#: templates/circuits/provideraccount.html:17 +#: netbox/templates/circuits/provideraccount.html:17 msgid "Provider Account" msgstr "Cuenta de proveedor" -#: templates/core/configrevision.html:35 +#: netbox/templates/core/configrevision.html:35 msgid "Configuration Data" msgstr "Datos de configuración" -#: templates/core/configrevision.html:40 +#: netbox/templates/core/configrevision.html:40 msgid "Comment" msgstr "Comentar" -#: templates/core/configrevision_restore.html:8 -#: templates/core/configrevision_restore.html:25 -#: templates/core/configrevision_restore.html:64 +#: netbox/templates/core/configrevision_restore.html:8 +#: netbox/templates/core/configrevision_restore.html:25 +#: netbox/templates/core/configrevision_restore.html:64 msgid "Restore" msgstr "Restaurar" -#: templates/core/configrevision_restore.html:36 +#: netbox/templates/core/configrevision_restore.html:36 msgid "Parameter" msgstr "Parámetro" -#: templates/core/configrevision_restore.html:37 +#: netbox/templates/core/configrevision_restore.html:37 msgid "Current Value" msgstr "Valor actual" -#: templates/core/configrevision_restore.html:38 +#: netbox/templates/core/configrevision_restore.html:38 msgid "New Value" msgstr "Nuevo valor" -#: templates/core/configrevision_restore.html:50 +#: netbox/templates/core/configrevision_restore.html:50 msgid "Changed" msgstr "Cambiado" -#: templates/core/datafile.html:42 templates/ipam/iprange.html:25 -#: templates/virtualization/virtualdisk.html:29 -#: virtualization/tables/virtualmachines.py:198 +#: netbox/templates/core/datafile.html:42 +#: netbox/templates/ipam/iprange.html:25 +#: netbox/templates/virtualization/virtualdisk.html:29 +#: netbox/virtualization/tables/virtualmachines.py:198 msgid "Size" msgstr "Tamaño" -#: templates/core/datafile.html:43 +#: netbox/templates/core/datafile.html:43 msgid "bytes" msgstr "bytes" -#: templates/core/datafile.html:46 +#: netbox/templates/core/datafile.html:46 msgid "SHA256 Hash" msgstr "Hash SHA256" -#: templates/core/datasource.html:14 templates/core/datasource.html:20 -#: utilities/templates/buttons/sync.html:5 +#: netbox/templates/core/datasource.html:14 +#: netbox/templates/core/datasource.html:20 +#: netbox/utilities/templates/buttons/sync.html:5 msgid "Sync" msgstr "Sincronizar" -#: templates/core/datasource.html:50 +#: netbox/templates/core/datasource.html:50 msgid "Last synced" msgstr "Última sincronización" -#: templates/core/datasource.html:84 +#: netbox/templates/core/datasource.html:84 msgid "Backend" msgstr "Backend" -#: templates/core/datasource.html:99 +#: netbox/templates/core/datasource.html:99 msgid "No parameters defined" msgstr "No hay parámetros definidos" -#: templates/core/datasource.html:114 +#: netbox/templates/core/datasource.html:114 msgid "Files" msgstr "Expedientes" -#: templates/core/inc/config_data.html:7 +#: netbox/templates/core/inc/config_data.html:7 msgid "Rack elevations" msgstr "Elevaciones de estanterías" -#: templates/core/inc/config_data.html:10 +#: netbox/templates/core/inc/config_data.html:10 msgid "Default unit height" msgstr "Altura por defecto de la unidad" -#: templates/core/inc/config_data.html:14 +#: netbox/templates/core/inc/config_data.html:14 msgid "Default unit width" msgstr "Ancho de unidad predeterminado" -#: templates/core/inc/config_data.html:20 +#: netbox/templates/core/inc/config_data.html:20 msgid "Power feeds" msgstr "Fuentes de alimentación" -#: templates/core/inc/config_data.html:23 +#: netbox/templates/core/inc/config_data.html:23 msgid "Default voltage" msgstr "Tensión predeterminada" -#: templates/core/inc/config_data.html:27 +#: netbox/templates/core/inc/config_data.html:27 msgid "Default amperage" msgstr "Amperaje predeterminado" -#: templates/core/inc/config_data.html:31 +#: netbox/templates/core/inc/config_data.html:31 msgid "Default max utilization" msgstr "Utilización máxima predeterminada" -#: templates/core/inc/config_data.html:40 +#: netbox/templates/core/inc/config_data.html:40 msgid "Enforce global unique" msgstr "Imponga la exclusividad global" -#: templates/core/inc/config_data.html:83 +#: netbox/templates/core/inc/config_data.html:83 msgid "Paginate count" msgstr "Recuento de paginaciones" -#: templates/core/inc/config_data.html:87 +#: netbox/templates/core/inc/config_data.html:87 msgid "Max page size" msgstr "Tamaño máximo de página" -#: templates/core/inc/config_data.html:114 +#: netbox/templates/core/inc/config_data.html:114 msgid "User preferences" msgstr "Preferencias de usuario" -#: templates/core/inc/config_data.html:141 +#: netbox/templates/core/inc/config_data.html:141 msgid "Job retention" msgstr "Retención de empleo" -#: templates/core/job.html:35 templates/core/rq_task.html:12 -#: templates/core/rq_task.html:49 templates/core/rq_task.html:58 +#: netbox/templates/core/job.html:35 netbox/templates/core/rq_task.html:12 +#: netbox/templates/core/rq_task.html:49 netbox/templates/core/rq_task.html:58 msgid "Job" msgstr "Trabajo" -#: templates/core/job.html:58 templates/extras/journalentry.html:26 +#: netbox/templates/core/job.html:58 +#: netbox/templates/extras/journalentry.html:26 msgid "Created By" msgstr "Creado por" -#: templates/core/job.html:66 +#: netbox/templates/core/job.html:66 msgid "Scheduling" msgstr "Programación" -#: templates/core/job.html:77 +#: netbox/templates/core/job.html:77 #, python-format msgid "every %(interval)s minutes" msgstr "cada %(interval)s minutos" -#: templates/core/objectchange.html:29 -#: templates/users/objectpermission.html:42 +#: netbox/templates/core/objectchange.html:29 +#: netbox/templates/users/objectpermission.html:42 msgid "Change" msgstr "Cambiar" -#: templates/core/objectchange.html:79 +#: netbox/templates/core/objectchange.html:79 msgid "Difference" msgstr "Diferencia" -#: templates/core/objectchange.html:82 +#: netbox/templates/core/objectchange.html:82 msgid "Previous" msgstr "Anterior" -#: templates/core/objectchange.html:85 +#: netbox/templates/core/objectchange.html:85 msgid "Next" msgstr "Próxima" -#: templates/core/objectchange.html:93 +#: netbox/templates/core/objectchange.html:93 msgid "Object Created" msgstr "Objeto creado" -#: templates/core/objectchange.html:95 +#: netbox/templates/core/objectchange.html:95 msgid "Object Deleted" msgstr "Objeto eliminado" -#: templates/core/objectchange.html:97 +#: netbox/templates/core/objectchange.html:97 msgid "No Changes" msgstr "Sin cambios" -#: templates/core/objectchange.html:111 +#: netbox/templates/core/objectchange.html:111 msgid "Pre-Change Data" msgstr "Datos previos al cambio" -#: templates/core/objectchange.html:122 +#: netbox/templates/core/objectchange.html:122 msgid "Warning: Comparing non-atomic change to previous change record" msgstr "" "Advertencia: comparación del cambio no atómico con el registro de cambios " "anterior" -#: templates/core/objectchange.html:131 +#: netbox/templates/core/objectchange.html:131 msgid "Post-Change Data" msgstr "Datos posteriores al cambio" -#: templates/core/objectchange.html:162 +#: netbox/templates/core/objectchange.html:162 #, python-format msgid "See All %(count)s Changes" msgstr "Ver todos %(count)s Cambios" -#: templates/core/objectchange_list.html:9 -#: templates/extras/object_changelog.html:15 +#: netbox/templates/core/objectchange_list.html:9 +#: netbox/templates/extras/object_changelog.html:15 msgid "Change log retention" msgstr "Cambiar la retención de registros" -#: templates/core/objectchange_list.html:9 -#: templates/extras/object_changelog.html:15 +#: netbox/templates/core/objectchange_list.html:9 +#: netbox/templates/extras/object_changelog.html:15 msgid "days" msgstr "días" -#: templates/core/objectchange_list.html:9 -#: templates/extras/object_changelog.html:15 +#: netbox/templates/core/objectchange_list.html:9 +#: netbox/templates/extras/object_changelog.html:15 msgid "Indefinite" msgstr "Indefinido" -#: templates/core/plugin.html:22 +#: netbox/templates/core/plugin.html:22 msgid "Not installed" msgstr "No instalado" -#: templates/core/plugin.html:33 +#: netbox/templates/core/plugin.html:33 msgid "Overview" msgstr "Visión general" -#: templates/core/plugin.html:39 +#: netbox/templates/core/plugin.html:39 msgid "Install" msgstr "Instalar" -#: templates/core/plugin.html:51 +#: netbox/templates/core/plugin.html:51 msgid "Plugin Details" msgstr "Detalles del plugin" -#: templates/core/plugin.html:58 +#: netbox/templates/core/plugin.html:58 msgid "Summary" msgstr "Resumen" -#: templates/core/plugin.html:76 +#: netbox/templates/core/plugin.html:76 msgid "License" msgstr "Licencia" -#: templates/core/plugin.html:96 +#: netbox/templates/core/plugin.html:96 msgid "Version History" msgstr "Historial de versiones" -#: templates/core/plugin.html:107 +#: netbox/templates/core/plugin.html:107 msgid "Local Installation Instructions" msgstr "Instrucciones de instalación local" -#: templates/core/rq_queue_list.html:5 templates/core/rq_queue_list.html:13 -#: templates/core/rq_task_list.html:14 templates/core/rq_worker.html:7 +#: netbox/templates/core/rq_queue_list.html:5 +#: netbox/templates/core/rq_queue_list.html:13 +#: netbox/templates/core/rq_task_list.html:14 +#: netbox/templates/core/rq_worker.html:7 msgid "Background Queues" msgstr "Colas en segundo plano" -#: templates/core/rq_queue_list.html:24 templates/core/rq_queue_list.html:25 -#: templates/core/rq_worker_list.html:49 templates/core/rq_worker_list.html:50 -#: templates/extras/script_result.html:67 -#: templates/extras/script_result.html:69 -#: templates/inc/table_controls_htmx.html:30 -#: templates/inc/table_controls_htmx.html:33 +#: netbox/templates/core/rq_queue_list.html:24 +#: netbox/templates/core/rq_queue_list.html:25 +#: netbox/templates/core/rq_worker_list.html:49 +#: netbox/templates/core/rq_worker_list.html:50 +#: netbox/templates/extras/script_result.html:67 +#: netbox/templates/extras/script_result.html:69 +#: netbox/templates/inc/table_controls_htmx.html:30 +#: netbox/templates/inc/table_controls_htmx.html:33 msgid "Configure Table" msgstr "Configurar tabla" -#: templates/core/rq_task.html:29 +#: netbox/templates/core/rq_task.html:29 msgid "Stop" msgstr "Parar" -#: templates/core/rq_task.html:34 +#: netbox/templates/core/rq_task.html:34 msgid "Requeue" msgstr "Rehacer cola" -#: templates/core/rq_task.html:39 +#: netbox/templates/core/rq_task.html:39 msgid "Enqueue" msgstr "Lista" -#: templates/core/rq_task.html:61 +#: netbox/templates/core/rq_task.html:61 msgid "Queue" msgstr "Fila" -#: templates/core/rq_task.html:65 +#: netbox/templates/core/rq_task.html:65 msgid "Timeout" msgstr "Tiempo de espera" -#: templates/core/rq_task.html:69 +#: netbox/templates/core/rq_task.html:69 msgid "Result TTL" msgstr "Resultado TTL" -#: templates/core/rq_task.html:89 +#: netbox/templates/core/rq_task.html:89 msgid "Meta" msgstr "Meta" -#: templates/core/rq_task.html:93 +#: netbox/templates/core/rq_task.html:93 msgid "Arguments" msgstr "Argumentos" -#: templates/core/rq_task.html:97 +#: netbox/templates/core/rq_task.html:97 msgid "Keyword Arguments" msgstr "Argumentos de palabras" -#: templates/core/rq_task.html:103 +#: netbox/templates/core/rq_task.html:103 msgid "Depends on" msgstr "Depende de" -#: templates/core/rq_task.html:109 +#: netbox/templates/core/rq_task.html:109 msgid "Exception" msgstr "Excepción" -#: templates/core/rq_task_list.html:28 +#: netbox/templates/core/rq_task_list.html:28 msgid "tasks in " msgstr "tareas en " -#: templates/core/rq_task_list.html:33 +#: netbox/templates/core/rq_task_list.html:33 msgid "Queued Jobs" msgstr "Trabajos en cola" -#: templates/core/rq_task_list.html:64 templates/extras/script_result.html:86 +#: netbox/templates/core/rq_task_list.html:64 +#: netbox/templates/extras/script_result.html:86 #, python-format msgid "" "Select all %(count)s %(object_type_plural)s matching query" @@ -11646,384 +12389,402 @@ msgstr "" "Seleccione todo %(count)s %(object_type_plural)s consulta " "coincidente" -#: templates/core/rq_worker.html:10 +#: netbox/templates/core/rq_worker.html:10 msgid "Worker Info" msgstr "Información del trabajador" -#: templates/core/rq_worker.html:31 templates/core/rq_worker.html:40 +#: netbox/templates/core/rq_worker.html:31 +#: netbox/templates/core/rq_worker.html:40 msgid "Worker" msgstr "Trabajador" -#: templates/core/rq_worker.html:55 +#: netbox/templates/core/rq_worker.html:55 msgid "Queues" msgstr "Colas" -#: templates/core/rq_worker.html:63 +#: netbox/templates/core/rq_worker.html:63 msgid "Curent Job" msgstr "Empleo actual" -#: templates/core/rq_worker.html:67 +#: netbox/templates/core/rq_worker.html:67 msgid "Successful job count" msgstr "Recuento de trabajos exitoso" -#: templates/core/rq_worker.html:71 +#: netbox/templates/core/rq_worker.html:71 msgid "Failed job count" msgstr "Recuento de trabajos fallidos" -#: templates/core/rq_worker.html:75 +#: netbox/templates/core/rq_worker.html:75 msgid "Total working time" msgstr "Tiempo total de trabajo" -#: templates/core/rq_worker.html:76 +#: netbox/templates/core/rq_worker.html:76 msgid "seconds" msgstr "segundos" -#: templates/core/rq_worker_list.html:13 templates/core/rq_worker_list.html:21 +#: netbox/templates/core/rq_worker_list.html:13 +#: netbox/templates/core/rq_worker_list.html:21 msgid "Background Workers" msgstr "Trabajadores en segundo plano" -#: templates/core/rq_worker_list.html:29 +#: netbox/templates/core/rq_worker_list.html:29 #, python-format msgid "Workers in %(queue_name)s" msgstr "Trabajadores en %(queue_name)s" -#: templates/core/system.html:11 utilities/templates/buttons/export.html:4 +#: netbox/templates/core/system.html:11 +#: netbox/utilities/templates/buttons/export.html:4 msgid "Export" msgstr "Exportación" -#: templates/core/system.html:28 +#: netbox/templates/core/system.html:28 msgid "System Status" msgstr "Estado del sistema" -#: templates/core/system.html:31 +#: netbox/templates/core/system.html:31 msgid "NetBox release" msgstr "Lanzamiento de NetBox" -#: templates/core/system.html:44 +#: netbox/templates/core/system.html:44 msgid "Django version" msgstr "Versión Django" -#: templates/core/system.html:48 +#: netbox/templates/core/system.html:48 msgid "PostgreSQL version" msgstr "Versión PostgreSQL" -#: templates/core/system.html:52 +#: netbox/templates/core/system.html:52 msgid "Database name" msgstr "Nombre de base de datos" -#: templates/core/system.html:56 +#: netbox/templates/core/system.html:56 msgid "Database size" msgstr "Tamaño de base de datos" -#: templates/core/system.html:61 +#: netbox/templates/core/system.html:61 msgid "Unavailable" msgstr "No disponible" -#: templates/core/system.html:66 +#: netbox/templates/core/system.html:66 msgid "RQ workers" msgstr "Trabajadores de RQ" -#: templates/core/system.html:69 +#: netbox/templates/core/system.html:69 msgid "default queue" msgstr "cola predeterminada" -#: templates/core/system.html:73 +#: netbox/templates/core/system.html:73 msgid "System time" msgstr "Hora del sistema" -#: templates/core/system.html:85 +#: netbox/templates/core/system.html:85 msgid "Current Configuration" msgstr "Configuración actual" -#: templates/dcim/bulk_disconnect.html:9 +#: netbox/templates/dcim/bulk_disconnect.html:9 #, python-format msgid "" "Are you sure you want to disconnect these %(count)s %(obj_type_plural)s?" msgstr "" "¿Está seguro de que desea desconectarlos? %(count)s %(obj_type_plural)s?" -#: templates/dcim/cable_trace.html:10 +#: netbox/templates/dcim/cable_trace.html:10 #, python-format msgid "Cable Trace for %(object_type)s %(object)s" msgstr "Cable Trace para %(object_type)s %(object)s" -#: templates/dcim/cable_trace.html:24 templates/dcim/inc/rack_elevation.html:7 +#: netbox/templates/dcim/cable_trace.html:24 +#: netbox/templates/dcim/inc/rack_elevation.html:7 msgid "Download SVG" msgstr "Descargar SVG" -#: templates/dcim/cable_trace.html:30 +#: netbox/templates/dcim/cable_trace.html:30 msgid "Asymmetric Path" msgstr "Ruta asimétrica" -#: templates/dcim/cable_trace.html:31 +#: netbox/templates/dcim/cable_trace.html:31 msgid "The nodes below have no links and result in an asymmetric path" msgstr "" "Los nodos siguientes no tienen enlaces y dan como resultado una ruta " "asimétrica" -#: templates/dcim/cable_trace.html:38 +#: netbox/templates/dcim/cable_trace.html:38 msgid "Path split" msgstr "Ruta dividida" -#: templates/dcim/cable_trace.html:39 +#: netbox/templates/dcim/cable_trace.html:39 msgid "Select a node below to continue" msgstr "Seleccione un nodo de los siguientes para continuar" -#: templates/dcim/cable_trace.html:55 +#: netbox/templates/dcim/cable_trace.html:55 msgid "Trace Completed" msgstr "Rastreo completado" -#: templates/dcim/cable_trace.html:58 +#: netbox/templates/dcim/cable_trace.html:58 msgid "Total segments" msgstr "Total de segmentos" -#: templates/dcim/cable_trace.html:62 +#: netbox/templates/dcim/cable_trace.html:62 msgid "Total length" msgstr "Longitud total" -#: templates/dcim/cable_trace.html:77 +#: netbox/templates/dcim/cable_trace.html:77 msgid "No paths found" msgstr "No se encontró ninguna ruta" -#: templates/dcim/cable_trace.html:85 +#: netbox/templates/dcim/cable_trace.html:85 msgid "Related Paths" msgstr "Rutas relacionadas" -#: templates/dcim/cable_trace.html:89 +#: netbox/templates/dcim/cable_trace.html:89 msgid "Origin" msgstr "Origen" -#: templates/dcim/cable_trace.html:90 +#: netbox/templates/dcim/cable_trace.html:90 msgid "Destination" msgstr "Destino" -#: templates/dcim/cable_trace.html:91 +#: netbox/templates/dcim/cable_trace.html:91 msgid "Segments" msgstr "Segmentos" -#: templates/dcim/cable_trace.html:104 +#: netbox/templates/dcim/cable_trace.html:104 msgid "Incomplete" msgstr "Incompleto" -#: templates/dcim/component_list.html:14 +#: netbox/templates/dcim/component_list.html:14 msgid "Rename Selected" msgstr "Cambiar nombre seleccionado" -#: templates/dcim/consoleport.html:65 templates/dcim/consoleserverport.html:66 -#: templates/dcim/frontport.html:98 templates/dcim/interface.html:176 -#: templates/dcim/poweroutlet.html:69 templates/dcim/powerport.html:69 +#: netbox/templates/dcim/consoleport.html:65 +#: netbox/templates/dcim/consoleserverport.html:66 +#: netbox/templates/dcim/frontport.html:98 +#: netbox/templates/dcim/interface.html:176 +#: netbox/templates/dcim/poweroutlet.html:69 +#: netbox/templates/dcim/powerport.html:69 msgid "Not Connected" msgstr "No conectado" -#: templates/dcim/device.html:34 +#: netbox/templates/dcim/device.html:34 msgid "Highlight device in rack" msgstr "Resalte el dispositivo en el estante" -#: templates/dcim/device.html:55 +#: netbox/templates/dcim/device.html:55 msgid "Not racked" msgstr "No está atormentado" -#: templates/dcim/device.html:62 templates/dcim/site.html:94 +#: netbox/templates/dcim/device.html:62 netbox/templates/dcim/site.html:94 msgid "GPS Coordinates" msgstr "Coordenadas GPS" -#: templates/dcim/device.html:68 templates/dcim/site.html:81 -#: templates/dcim/site.html:100 +#: netbox/templates/dcim/device.html:68 netbox/templates/dcim/site.html:81 +#: netbox/templates/dcim/site.html:100 msgid "Map" msgstr "Mapa" -#: templates/dcim/device.html:108 templates/dcim/inventoryitem.html:56 -#: templates/dcim/module.html:81 templates/dcim/modulebay.html:74 -#: templates/dcim/rack.html:61 +#: netbox/templates/dcim/device.html:108 +#: netbox/templates/dcim/inventoryitem.html:56 +#: netbox/templates/dcim/module.html:81 +#: netbox/templates/dcim/modulebay.html:74 netbox/templates/dcim/rack.html:61 msgid "Asset Tag" msgstr "Etiqueta de activo" -#: templates/dcim/device.html:123 +#: netbox/templates/dcim/device.html:123 msgid "View Virtual Chassis" msgstr "Ver chasis virtual" -#: templates/dcim/device.html:164 +#: netbox/templates/dcim/device.html:164 msgid "Create VDC" msgstr "Crear VDC" -#: templates/dcim/device.html:175 templates/dcim/device_edit.html:64 -#: virtualization/forms/model_forms.py:223 +#: netbox/templates/dcim/device.html:175 +#: netbox/templates/dcim/device_edit.html:64 +#: netbox/virtualization/forms/model_forms.py:223 msgid "Management" msgstr "Administración" -#: templates/dcim/device.html:195 templates/dcim/device.html:211 -#: templates/dcim/device.html:227 -#: templates/virtualization/virtualmachine.html:57 -#: templates/virtualization/virtualmachine.html:73 +#: netbox/templates/dcim/device.html:195 netbox/templates/dcim/device.html:211 +#: netbox/templates/dcim/device.html:227 +#: netbox/templates/virtualization/virtualmachine.html:57 +#: netbox/templates/virtualization/virtualmachine.html:73 msgid "NAT for" msgstr "NAT para" -#: templates/dcim/device.html:197 templates/dcim/device.html:213 -#: templates/dcim/device.html:229 -#: templates/virtualization/virtualmachine.html:59 -#: templates/virtualization/virtualmachine.html:75 +#: netbox/templates/dcim/device.html:197 netbox/templates/dcim/device.html:213 +#: netbox/templates/dcim/device.html:229 +#: netbox/templates/virtualization/virtualmachine.html:59 +#: netbox/templates/virtualization/virtualmachine.html:75 msgid "NAT" msgstr "NATA" -#: templates/dcim/device.html:252 templates/dcim/rack.html:73 +#: netbox/templates/dcim/device.html:252 netbox/templates/dcim/rack.html:73 msgid "Power Utilization" msgstr "Utilización de energía" -#: templates/dcim/device.html:256 +#: netbox/templates/dcim/device.html:256 msgid "Input" msgstr "Entrada" -#: templates/dcim/device.html:257 +#: netbox/templates/dcim/device.html:257 msgid "Outlets" msgstr "Puntos de venta" -#: templates/dcim/device.html:258 +#: netbox/templates/dcim/device.html:258 msgid "Allocated" msgstr "Asignado" -#: templates/dcim/device.html:268 templates/dcim/device.html:270 -#: templates/dcim/device.html:286 templates/dcim/powerfeed.html:67 +#: netbox/templates/dcim/device.html:268 netbox/templates/dcim/device.html:270 +#: netbox/templates/dcim/device.html:286 +#: netbox/templates/dcim/powerfeed.html:67 msgid "VA" msgstr "VA" -#: templates/dcim/device.html:280 +#: netbox/templates/dcim/device.html:280 msgctxt "Leg of a power feed" msgid "Leg" msgstr "Pierna" -#: templates/dcim/device.html:306 -#: templates/virtualization/virtualmachine.html:158 +#: netbox/templates/dcim/device.html:306 +#: netbox/templates/virtualization/virtualmachine.html:158 msgid "Add a service" msgstr "Añadir un servicio" -#: templates/dcim/device/base.html:21 templates/dcim/device_list.html:9 -#: templates/dcim/devicetype/base.html:18 -#: templates/dcim/inc/moduletype_buttons.html:9 templates/dcim/module.html:18 -#: templates/virtualization/virtualmachine/base.html:22 -#: templates/virtualization/virtualmachine_list.html:8 +#: netbox/templates/dcim/device/base.html:21 +#: netbox/templates/dcim/device_list.html:9 +#: netbox/templates/dcim/devicetype/base.html:18 +#: netbox/templates/dcim/inc/moduletype_buttons.html:9 +#: netbox/templates/dcim/module.html:18 +#: netbox/templates/virtualization/virtualmachine/base.html:22 +#: netbox/templates/virtualization/virtualmachine_list.html:8 msgid "Add Components" msgstr "Agregar componentes" -#: templates/dcim/device/consoleports.html:24 +#: netbox/templates/dcim/device/consoleports.html:24 msgid "Add Console Ports" msgstr "Agregar puertos de consola" -#: templates/dcim/device/consoleserverports.html:24 +#: netbox/templates/dcim/device/consoleserverports.html:24 msgid "Add Console Server Ports" msgstr "Agregar puertos de servidor de consola" -#: templates/dcim/device/devicebays.html:10 +#: netbox/templates/dcim/device/devicebays.html:10 msgid "Add Device Bays" msgstr "Agregar compartimentos de dispositivos" -#: templates/dcim/device/frontports.html:24 +#: netbox/templates/dcim/device/frontports.html:24 msgid "Add Front Ports" msgstr "Agregar puertos frontales" -#: templates/dcim/device/inc/interface_table_controls.html:9 +#: netbox/templates/dcim/device/inc/interface_table_controls.html:9 msgid "Hide Enabled" msgstr "Ocultar activado" -#: templates/dcim/device/inc/interface_table_controls.html:10 +#: netbox/templates/dcim/device/inc/interface_table_controls.html:10 msgid "Hide Disabled" msgstr "Ocultar desactivado" -#: templates/dcim/device/inc/interface_table_controls.html:11 +#: netbox/templates/dcim/device/inc/interface_table_controls.html:11 msgid "Hide Virtual" msgstr "Ocultar virtual" -#: templates/dcim/device/inc/interface_table_controls.html:12 +#: netbox/templates/dcim/device/inc/interface_table_controls.html:12 msgid "Hide Disconnected" msgstr "Ocultar desconectado" -#: templates/dcim/device/interfaces.html:27 +#: netbox/templates/dcim/device/interfaces.html:27 msgid "Add Interfaces" msgstr "Agregar interfaces" -#: templates/dcim/device/inventory.html:10 -#: templates/dcim/inc/panels/inventory_items.html:10 +#: netbox/templates/dcim/device/inventory.html:10 +#: netbox/templates/dcim/inc/panels/inventory_items.html:10 msgid "Add Inventory Item" msgstr "Añadir artículo de inventario" -#: templates/dcim/device/modulebays.html:10 +#: netbox/templates/dcim/device/modulebays.html:10 msgid "Add Module Bays" msgstr "Agregar compartimentos de módulos" -#: templates/dcim/device/poweroutlets.html:24 +#: netbox/templates/dcim/device/poweroutlets.html:24 msgid "Add Power Outlets" msgstr "Añadir tomas de corriente" -#: templates/dcim/device/powerports.html:24 +#: netbox/templates/dcim/device/powerports.html:24 msgid "Add Power Port" msgstr "Agregar puerto de alimentación" -#: templates/dcim/device/rearports.html:24 +#: netbox/templates/dcim/device/rearports.html:24 msgid "Add Rear Ports" msgstr "Agregar puertos traseros" -#: templates/dcim/device/render_config.html:5 -#: templates/virtualization/virtualmachine/render_config.html:5 +#: netbox/templates/dcim/device/render_config.html:5 +#: netbox/templates/virtualization/virtualmachine/render_config.html:5 msgid "Config" msgstr "Configuración" -#: templates/dcim/device/render_config.html:35 -#: templates/virtualization/virtualmachine/render_config.html:35 +#: netbox/templates/dcim/device/render_config.html:35 +#: netbox/templates/virtualization/virtualmachine/render_config.html:35 msgid "Context Data" msgstr "Datos de contexto" -#: templates/dcim/device/render_config.html:53 -#: templates/virtualization/virtualmachine/render_config.html:53 +#: netbox/templates/dcim/device/render_config.html:55 +#: netbox/templates/virtualization/virtualmachine/render_config.html:55 msgid "Rendered Config" msgstr "Configuración renderizada" -#: templates/dcim/device/render_config.html:55 -#: templates/virtualization/virtualmachine/render_config.html:55 +#: netbox/templates/dcim/device/render_config.html:57 +#: netbox/templates/virtualization/virtualmachine/render_config.html:57 msgid "Download" msgstr "Descargar" -#: templates/dcim/device/render_config.html:61 -#: templates/virtualization/virtualmachine/render_config.html:61 -msgid "No configuration template found" -msgstr "No se encontró ninguna plantilla de configuración" +#: netbox/templates/dcim/device/render_config.html:64 +#: netbox/templates/virtualization/virtualmachine/render_config.html:64 +msgid "Error rendering template" +msgstr "" -#: templates/dcim/device_edit.html:44 +#: 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" -#: templates/dcim/device_edit.html:48 -#: utilities/templates/form_helpers/render_field.html:22 +#: netbox/templates/dcim/device_edit.html:48 +#: netbox/utilities/templates/form_helpers/render_field.html:22 msgid "Regenerate Slug" msgstr "Regenera a Slug" -#: templates/dcim/device_edit.html:49 templates/generic/bulk_remove.html:21 -#: utilities/templates/helpers/table_config_form.html:23 +#: netbox/templates/dcim/device_edit.html:49 +#: netbox/templates/generic/bulk_remove.html:21 +#: netbox/utilities/templates/helpers/table_config_form.html:23 msgid "Remove" msgstr "Eliminar" -#: templates/dcim/device_edit.html:110 +#: netbox/templates/dcim/device_edit.html:110 msgid "Local Config Context Data" msgstr "Datos de contexto de configuración local" -#: templates/dcim/device_list.html:82 templates/generic/bulk_rename.html:57 -#: templates/virtualization/virtualmachine/interfaces.html:11 -#: templates/virtualization/virtualmachine/virtual_disks.html:11 +#: netbox/templates/dcim/device_list.html:82 +#: netbox/templates/generic/bulk_rename.html:57 +#: netbox/templates/virtualization/virtualmachine/interfaces.html:11 +#: netbox/templates/virtualization/virtualmachine/virtual_disks.html:11 msgid "Rename" msgstr "Cambiar nombre" -#: templates/dcim/devicebay.html:17 +#: netbox/templates/dcim/devicebay.html:17 msgid "Device Bay" msgstr "Bahía de dispositivos" -#: templates/dcim/devicebay.html:43 +#: netbox/templates/dcim/devicebay.html:43 msgid "Installed Device" msgstr "Dispositivo instalado" -#: templates/dcim/devicebay_depopulate.html:6 +#: netbox/templates/dcim/devicebay_depopulate.html:6 #, python-format msgid "Remove %(device)s from %(device_bay)s?" msgstr "Eliminar %(device)s de %(device_bay)s?" -#: templates/dcim/devicebay_depopulate.html:13 +#: netbox/templates/dcim/devicebay_depopulate.html:13 #, python-format msgid "" "Are you sure you want to remove %(device)s from " @@ -12032,430 +12793,449 @@ msgstr "" "¿Estás seguro de que quieres eliminar? %(device)s de " "%(device_bay)s?" -#: templates/dcim/devicebay_populate.html:13 +#: netbox/templates/dcim/devicebay_populate.html:13 msgid "Populate" msgstr "Poblar" -#: templates/dcim/devicebay_populate.html:22 +#: netbox/templates/dcim/devicebay_populate.html:22 msgid "Bay" msgstr "Bahía" -#: templates/dcim/devicerole.html:14 templates/dcim/platform.html:17 +#: netbox/templates/dcim/devicerole.html:14 +#: netbox/templates/dcim/platform.html:17 msgid "Add Device" msgstr "Agregar dispositivo" -#: templates/dcim/devicerole.html:40 +#: netbox/templates/dcim/devicerole.html:40 msgid "VM Role" msgstr "Función de máquina virtual" -#: templates/dcim/devicetype.html:18 templates/dcim/moduletype.html:29 +#: netbox/templates/dcim/devicetype.html:18 +#: netbox/templates/dcim/moduletype.html:29 msgid "Model Name" msgstr "Nombre del modelo" -#: templates/dcim/devicetype.html:25 templates/dcim/moduletype.html:33 +#: netbox/templates/dcim/devicetype.html:25 +#: netbox/templates/dcim/moduletype.html:33 msgid "Part Number" msgstr "Número de pieza" -#: templates/dcim/devicetype.html:41 +#: netbox/templates/dcim/devicetype.html:41 msgid "Exclude From Utilization" msgstr "Excluir de la utilización" -#: templates/dcim/devicetype.html:59 +#: netbox/templates/dcim/devicetype.html:59 msgid "Parent/Child" msgstr "Padre/hijo" -#: templates/dcim/devicetype.html:71 +#: netbox/templates/dcim/devicetype.html:71 msgid "Front Image" msgstr "Imagen frontal" -#: templates/dcim/devicetype.html:83 +#: netbox/templates/dcim/devicetype.html:83 msgid "Rear Image" msgstr "Imagen trasera" -#: templates/dcim/frontport.html:54 +#: netbox/templates/dcim/frontport.html:54 msgid "Rear Port Position" msgstr "Posición del puerto trasero" -#: templates/dcim/frontport.html:72 templates/dcim/interface.html:144 -#: templates/dcim/poweroutlet.html:63 templates/dcim/powerport.html:63 -#: templates/dcim/rearport.html:68 +#: netbox/templates/dcim/frontport.html:72 +#: netbox/templates/dcim/interface.html:144 +#: netbox/templates/dcim/poweroutlet.html:63 +#: netbox/templates/dcim/powerport.html:63 +#: netbox/templates/dcim/rearport.html:68 msgid "Marked as Connected" msgstr "Marcado como conectado" -#: templates/dcim/frontport.html:86 templates/dcim/rearport.html:82 +#: netbox/templates/dcim/frontport.html:86 +#: netbox/templates/dcim/rearport.html:82 msgid "Connection Status" msgstr "Estado de conexión" -#: templates/dcim/htmx/cable_edit.html:10 +#: netbox/templates/dcim/htmx/cable_edit.html:10 msgid "A Side" msgstr "Un lado" -#: templates/dcim/htmx/cable_edit.html:30 +#: netbox/templates/dcim/htmx/cable_edit.html:30 msgid "B Side" msgstr "Lado B" -#: templates/dcim/inc/cable_termination.html:65 +#: netbox/templates/dcim/inc/cable_termination.html:65 msgid "No termination" msgstr "Sin rescisión" -#: templates/dcim/inc/cable_toggle_buttons.html:3 +#: netbox/templates/dcim/inc/cable_toggle_buttons.html:3 msgid "Mark Planned" msgstr "Marcar como planificado" -#: templates/dcim/inc/cable_toggle_buttons.html:6 +#: netbox/templates/dcim/inc/cable_toggle_buttons.html:6 msgid "Mark Installed" msgstr "Marcar como instalado" -#: templates/dcim/inc/connection_endpoints.html:13 +#: netbox/templates/dcim/inc/connection_endpoints.html:13 msgid "Path Status" msgstr "Estado de la ruta" -#: templates/dcim/inc/connection_endpoints.html:18 +#: netbox/templates/dcim/inc/connection_endpoints.html:18 msgid "Not Reachable" msgstr "No accesible" -#: templates/dcim/inc/connection_endpoints.html:23 +#: netbox/templates/dcim/inc/connection_endpoints.html:23 msgid "Path Endpoints" msgstr "Puntos finales de ruta" -#: templates/dcim/inc/endpoint_connection.html:8 -#: templates/dcim/powerfeed.html:120 templates/dcim/rearport.html:94 +#: netbox/templates/dcim/inc/endpoint_connection.html:8 +#: netbox/templates/dcim/powerfeed.html:120 +#: netbox/templates/dcim/rearport.html:94 msgid "Not connected" msgstr "No conectado" -#: templates/dcim/inc/interface_vlans_table.html:6 +#: netbox/templates/dcim/inc/interface_vlans_table.html:6 msgid "Untagged" msgstr "Sin etiquetar" -#: templates/dcim/inc/interface_vlans_table.html:37 +#: netbox/templates/dcim/inc/interface_vlans_table.html:37 msgid "No VLANs Assigned" msgstr "No hay VLAN asignadas" -#: templates/dcim/inc/interface_vlans_table.html:44 -#: templates/ipam/prefix_list.html:16 templates/ipam/prefix_list.html:33 +#: netbox/templates/dcim/inc/interface_vlans_table.html:44 +#: netbox/templates/ipam/prefix_list.html:16 +#: netbox/templates/ipam/prefix_list.html:33 msgid "Clear" msgstr "Borrar" -#: templates/dcim/inc/interface_vlans_table.html:47 +#: netbox/templates/dcim/inc/interface_vlans_table.html:47 msgid "Clear All" msgstr "Borrar todo" -#: templates/dcim/inc/panels/racktype_dimensions.html:38 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:38 msgid "Mounting Depth" msgstr "Profundidad de montaje" -#: templates/dcim/inc/panels/racktype_numbering.html:6 +#: netbox/templates/dcim/inc/panels/racktype_numbering.html:6 msgid "Starting Unit" msgstr "Unidad inicial" -#: templates/dcim/inc/panels/racktype_numbering.html:10 +#: netbox/templates/dcim/inc/panels/racktype_numbering.html:10 msgid "Descending Units" msgstr "Unidades descendentes" -#: templates/dcim/inc/rack_elevation.html:3 +#: netbox/templates/dcim/inc/rack_elevation.html:3 msgid "Rack elevation" msgstr "Elevación del bastidor" -#: templates/dcim/interface.html:17 +#: netbox/templates/dcim/interface.html:17 msgid "Add Child Interface" msgstr "Agregar interfaz secundaria" -#: templates/dcim/interface.html:50 +#: netbox/templates/dcim/interface.html:50 msgid "Speed/Duplex" msgstr "Velocidad/dúplex" -#: templates/dcim/interface.html:73 +#: netbox/templates/dcim/interface.html:73 msgid "PoE Mode" msgstr "Modo PoE" -#: templates/dcim/interface.html:77 +#: netbox/templates/dcim/interface.html:77 msgid "PoE Type" msgstr "Tipo de PoE" -#: templates/dcim/interface.html:81 -#: templates/virtualization/vminterface.html:63 +#: netbox/templates/dcim/interface.html:81 +#: netbox/templates/virtualization/vminterface.html:63 msgid "802.1Q Mode" msgstr "Modo 802.1Q" -#: templates/dcim/interface.html:125 -#: templates/virtualization/vminterface.html:59 +#: netbox/templates/dcim/interface.html:125 +#: netbox/templates/virtualization/vminterface.html:59 msgid "MAC Address" msgstr "Dirección MAC" -#: templates/dcim/interface.html:151 +#: netbox/templates/dcim/interface.html:151 msgid "Wireless Link" msgstr "Enlace inalámbrico" -#: templates/dcim/interface.html:218 vpn/choices.py:55 +#: netbox/templates/dcim/interface.html:218 netbox/vpn/choices.py:63 msgid "Peer" msgstr "Par" -#: templates/dcim/interface.html:230 -#: templates/wireless/inc/wirelesslink_interface.html:26 +#: netbox/templates/dcim/interface.html:230 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:26 msgid "Channel" msgstr "Canal" -#: templates/dcim/interface.html:239 -#: templates/wireless/inc/wirelesslink_interface.html:32 +#: netbox/templates/dcim/interface.html:239 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:32 msgid "Channel Frequency" msgstr "Frecuencia de canal" -#: templates/dcim/interface.html:242 templates/dcim/interface.html:250 -#: templates/dcim/interface.html:261 templates/dcim/interface.html:269 +#: netbox/templates/dcim/interface.html:242 +#: netbox/templates/dcim/interface.html:250 +#: netbox/templates/dcim/interface.html:261 +#: netbox/templates/dcim/interface.html:269 msgid "MHz" msgstr "megahercio" -#: templates/dcim/interface.html:258 -#: templates/wireless/inc/wirelesslink_interface.html:42 +#: netbox/templates/dcim/interface.html:258 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:42 msgid "Channel Width" msgstr "Ancho de canal" -#: templates/dcim/interface.html:285 templates/wireless/wirelesslan.html:14 -#: templates/wireless/wirelesslink.html:21 wireless/forms/bulk_edit.py:60 -#: wireless/forms/bulk_edit.py:102 wireless/forms/filtersets.py:40 -#: wireless/forms/filtersets.py:80 wireless/models.py:82 -#: wireless/models.py:156 wireless/tables/wirelesslan.py:44 +#: netbox/templates/dcim/interface.html:285 +#: netbox/templates/wireless/wirelesslan.html:14 +#: netbox/templates/wireless/wirelesslink.html:21 +#: netbox/wireless/forms/bulk_edit.py:60 +#: netbox/wireless/forms/bulk_edit.py:102 +#: netbox/wireless/forms/filtersets.py:40 +#: netbox/wireless/forms/filtersets.py:80 netbox/wireless/models.py:82 +#: netbox/wireless/models.py:156 netbox/wireless/tables/wirelesslan.py:44 msgid "SSID" msgstr "SSID" -#: templates/dcim/interface.html:305 +#: netbox/templates/dcim/interface.html:305 msgid "LAG Members" msgstr "Miembros del LAG" -#: templates/dcim/interface.html:323 +#: netbox/templates/dcim/interface.html:323 msgid "No member interfaces" msgstr "Sin interfaces de miembros" -#: templates/dcim/interface.html:343 templates/ipam/fhrpgroup.html:73 -#: templates/ipam/iprange/ip_addresses.html:7 -#: templates/ipam/prefix/ip_addresses.html:7 -#: templates/virtualization/vminterface.html:89 +#: netbox/templates/dcim/interface.html:343 +#: netbox/templates/ipam/fhrpgroup.html:73 +#: netbox/templates/ipam/iprange/ip_addresses.html:7 +#: netbox/templates/ipam/prefix/ip_addresses.html:7 +#: netbox/templates/virtualization/vminterface.html:89 msgid "Add IP Address" msgstr "Agregar dirección IP" -#: templates/dcim/inventoryitem.html:24 +#: netbox/templates/dcim/inventoryitem.html:24 msgid "Parent Item" msgstr "Artículo principal" -#: templates/dcim/inventoryitem.html:48 +#: netbox/templates/dcim/inventoryitem.html:48 msgid "Part ID" msgstr "ID de pieza" -#: templates/dcim/location.html:17 +#: netbox/templates/dcim/location.html:17 msgid "Add Child Location" msgstr "Agregar ubicación infantil" -#: templates/dcim/location.html:77 +#: netbox/templates/dcim/location.html:77 msgid "Child Locations" msgstr "Ubicaciones para niños" -#: templates/dcim/location.html:81 templates/dcim/site.html:131 +#: netbox/templates/dcim/location.html:81 netbox/templates/dcim/site.html:131 msgid "Add a Location" msgstr "Agregar una ubicación" -#: templates/dcim/location.html:94 templates/dcim/site.html:144 +#: netbox/templates/dcim/location.html:94 netbox/templates/dcim/site.html:144 msgid "Add a Device" msgstr "Agregar un dispositivo" -#: templates/dcim/manufacturer.html:16 +#: netbox/templates/dcim/manufacturer.html:16 msgid "Add Device Type" msgstr "Agregar tipo de dispositivo" -#: templates/dcim/manufacturer.html:21 +#: netbox/templates/dcim/manufacturer.html:21 msgid "Add Module Type" msgstr "Agregar tipo de módulo" -#: templates/dcim/powerfeed.html:53 +#: netbox/templates/dcim/powerfeed.html:53 msgid "Connected Device" msgstr "Dispositivo conectado" -#: templates/dcim/powerfeed.html:63 +#: netbox/templates/dcim/powerfeed.html:63 msgid "Utilization (Allocated" msgstr "Utilización (asignada)" -#: templates/dcim/powerfeed.html:80 +#: netbox/templates/dcim/powerfeed.html:80 msgid "Electrical Characteristics" msgstr "Características eléctricas" -#: templates/dcim/powerfeed.html:88 +#: netbox/templates/dcim/powerfeed.html:88 msgctxt "Abbreviation for volts" msgid "V" msgstr "V" -#: templates/dcim/powerfeed.html:92 +#: netbox/templates/dcim/powerfeed.html:92 msgctxt "Abbreviation for amperes" msgid "A" msgstr "UN" -#: templates/dcim/poweroutlet.html:48 +#: netbox/templates/dcim/poweroutlet.html:48 msgid "Feed Leg" msgstr "Pierna de alimentación" -#: templates/dcim/powerpanel.html:72 +#: netbox/templates/dcim/powerpanel.html:72 msgid "Add Power Feeds" msgstr "Añadir fuentes de alimentación" -#: templates/dcim/powerport.html:44 +#: netbox/templates/dcim/powerport.html:44 msgid "Maximum Draw" msgstr "Sorteo máximo" -#: templates/dcim/powerport.html:48 +#: netbox/templates/dcim/powerport.html:48 msgid "Allocated Draw" msgstr "Sorteo asignado" -#: templates/dcim/rack.html:69 +#: netbox/templates/dcim/rack.html:69 msgid "Space Utilization" msgstr "Utilización del espacio" -#: templates/dcim/rack.html:84 templates/dcim/racktype.html:44 +#: netbox/templates/dcim/rack.html:84 netbox/templates/dcim/racktype.html:44 msgid "Rack Weight" msgstr "Peso del estante" -#: templates/dcim/rack.html:94 templates/dcim/racktype.html:54 +#: netbox/templates/dcim/rack.html:94 netbox/templates/dcim/racktype.html:54 msgid "Maximum Weight" msgstr "Peso máximo" -#: templates/dcim/rack.html:104 +#: netbox/templates/dcim/rack.html:104 msgid "Total Weight" msgstr "Peso total" -#: templates/dcim/rack.html:125 templates/dcim/rack_elevation_list.html:15 +#: netbox/templates/dcim/rack.html:125 +#: netbox/templates/dcim/rack_elevation_list.html:15 msgid "Images and Labels" msgstr "Imágenes y etiquetas" -#: templates/dcim/rack.html:126 templates/dcim/rack_elevation_list.html:16 +#: netbox/templates/dcim/rack.html:126 +#: netbox/templates/dcim/rack_elevation_list.html:16 msgid "Images only" msgstr "Solo imágenes" -#: templates/dcim/rack.html:127 templates/dcim/rack_elevation_list.html:17 +#: netbox/templates/dcim/rack.html:127 +#: netbox/templates/dcim/rack_elevation_list.html:17 msgid "Labels only" msgstr "Solo etiquetas" -#: templates/dcim/rack/reservations.html:8 +#: netbox/templates/dcim/rack/reservations.html:8 msgid "Add reservation" msgstr "Añadir reserva" -#: templates/dcim/rack_elevation_list.html:12 +#: netbox/templates/dcim/rack_elevation_list.html:12 msgid "View List" msgstr "Ver lista" -#: templates/dcim/rack_elevation_list.html:14 +#: netbox/templates/dcim/rack_elevation_list.html:14 msgid "Select rack view" msgstr "Seleccione la vista de estantería" -#: templates/dcim/rack_elevation_list.html:25 +#: netbox/templates/dcim/rack_elevation_list.html:25 msgid "Sort By" msgstr "Ordenar por" -#: templates/dcim/rack_elevation_list.html:74 +#: netbox/templates/dcim/rack_elevation_list.html:74 msgid "No Racks Found" msgstr "No se encontró ningún estante" -#: templates/dcim/rack_list.html:8 +#: netbox/templates/dcim/rack_list.html:8 msgid "View Elevations" msgstr "Ver elevaciones" -#: templates/dcim/rackreservation.html:42 +#: netbox/templates/dcim/rackreservation.html:42 msgid "Reservation Details" msgstr "Detalles de la reserva" -#: templates/dcim/rackrole.html:10 +#: netbox/templates/dcim/rackrole.html:10 msgid "Add Rack" msgstr "Añadir estante" -#: templates/dcim/rearport.html:50 +#: netbox/templates/dcim/rearport.html:50 msgid "Positions" msgstr "Posiciones" -#: templates/dcim/region.html:17 templates/dcim/sitegroup.html:17 +#: netbox/templates/dcim/region.html:17 +#: netbox/templates/dcim/sitegroup.html:17 msgid "Add Site" msgstr "Agregar sitio" -#: templates/dcim/region.html:55 +#: netbox/templates/dcim/region.html:55 msgid "Child Regions" msgstr "Regiones infantiles" -#: templates/dcim/region.html:59 +#: netbox/templates/dcim/region.html:59 msgid "Add Region" msgstr "Agregar región" -#: templates/dcim/site.html:64 +#: netbox/templates/dcim/site.html:64 msgid "Time Zone" msgstr "Zona horaria" -#: templates/dcim/site.html:67 +#: netbox/templates/dcim/site.html:67 msgid "UTC" msgstr "UTC" -#: templates/dcim/site.html:68 +#: netbox/templates/dcim/site.html:68 msgid "Site time" msgstr "Hora del sitio" -#: templates/dcim/site.html:75 +#: netbox/templates/dcim/site.html:75 msgid "Physical Address" msgstr "Dirección física" -#: templates/dcim/site.html:90 +#: netbox/templates/dcim/site.html:90 msgid "Shipping Address" msgstr "Dirección de envío" -#: templates/dcim/sitegroup.html:55 templates/tenancy/contactgroup.html:46 -#: templates/tenancy/tenantgroup.html:55 -#: templates/wireless/wirelesslangroup.html:55 +#: netbox/templates/dcim/sitegroup.html:55 +#: netbox/templates/tenancy/contactgroup.html:46 +#: netbox/templates/tenancy/tenantgroup.html:55 +#: netbox/templates/wireless/wirelesslangroup.html:55 msgid "Child Groups" msgstr "Grupos de niños" -#: templates/dcim/sitegroup.html:59 +#: netbox/templates/dcim/sitegroup.html:59 msgid "Add Site Group" msgstr "Agregar grupo de sitios" -#: templates/dcim/trace/attachment.html:5 -#: templates/extras/exporttemplate.html:31 +#: netbox/templates/dcim/trace/attachment.html:5 +#: netbox/templates/extras/exporttemplate.html:31 msgid "Attachment" msgstr "Fijación" -#: templates/dcim/virtualchassis.html:57 +#: netbox/templates/dcim/virtualchassis.html:57 msgid "Add Member" msgstr "Agregar miembro" -#: templates/dcim/virtualchassis_add.html:18 +#: netbox/templates/dcim/virtualchassis_add.html:18 msgid "Member Devices" msgstr "Dispositivos de los miembros" -#: templates/dcim/virtualchassis_add_member.html:10 +#: netbox/templates/dcim/virtualchassis_add_member.html:10 #, python-format msgid "Add New Member to Virtual Chassis %(virtual_chassis)s" msgstr "Agregar un nuevo miembro al chasis virtual %(virtual_chassis)s" -#: templates/dcim/virtualchassis_add_member.html:19 +#: netbox/templates/dcim/virtualchassis_add_member.html:19 msgid "Add New Member" msgstr "Agregar nuevo miembro" -#: templates/dcim/virtualchassis_add_member.html:27 -#: templates/generic/object_edit.html:78 -#: templates/users/objectpermission.html:31 users/forms/filtersets.py:67 -#: users/forms/model_forms.py:312 +#: netbox/templates/dcim/virtualchassis_add_member.html:27 +#: netbox/templates/generic/object_edit.html:78 +#: netbox/templates/users/objectpermission.html:31 +#: netbox/users/forms/filtersets.py:67 netbox/users/forms/model_forms.py:312 msgid "Actions" msgstr "Acciones" -#: templates/dcim/virtualchassis_add_member.html:29 +#: netbox/templates/dcim/virtualchassis_add_member.html:29 msgid "Save & Add Another" msgstr "Guardar y añadir otro" -#: templates/dcim/virtualchassis_edit.html:7 +#: netbox/templates/dcim/virtualchassis_edit.html:7 #, python-format msgid "Editing Virtual Chassis %(name)s" msgstr "Edición de chasis virtuales %(name)s" -#: templates/dcim/virtualchassis_edit.html:53 +#: netbox/templates/dcim/virtualchassis_edit.html:53 msgid "Rack/Unit" msgstr "Bastidor/unidad" -#: templates/dcim/virtualchassis_remove_member.html:5 +#: netbox/templates/dcim/virtualchassis_remove_member.html:5 msgid "Remove Virtual Chassis Member" msgstr "Eliminar miembro del chasis virtual" -#: templates/dcim/virtualchassis_remove_member.html:9 +#: netbox/templates/dcim/virtualchassis_remove_member.html:9 #, python-format msgid "" "Are you sure you want to remove %(device)s from virtual " @@ -12464,11 +13244,12 @@ msgstr "" "¿Estás seguro de que quieres eliminar? %(device)s desde un " "chasis virtual %(name)s?" -#: templates/dcim/virtualdevicecontext.html:26 templates/vpn/l2vpn.html:18 +#: netbox/templates/dcim/virtualdevicecontext.html:26 +#: netbox/templates/vpn/l2vpn.html:18 msgid "Identifier" msgstr "Identificador" -#: templates/exceptions/import_error.html:6 +#: netbox/templates/exceptions/import_error.html:6 msgid "" "A module import error occurred during this request. Common causes include " "the following:" @@ -12476,11 +13257,11 @@ msgstr "" "Se ha producido un error de importación del módulo durante esta solicitud. " "Entre las causas más frecuentes se incluyen las siguientes:" -#: templates/exceptions/import_error.html:10 +#: netbox/templates/exceptions/import_error.html:10 msgid "Missing required packages" msgstr "Faltan paquetes requeridos" -#: templates/exceptions/import_error.html:11 +#: netbox/templates/exceptions/import_error.html:11 msgid "" "This installation of NetBox might be missing one or more required Python " "packages. These packages are listed in requirements.txt and " @@ -12497,11 +13278,11 @@ msgstr "" "congelada desde la consola y compare el resultado con la lista de " "paquetes necesarios." -#: templates/exceptions/import_error.html:20 +#: netbox/templates/exceptions/import_error.html:20 msgid "WSGI service not restarted after upgrade" msgstr "El servicio WSGI no se reinicia después de la actualización" -#: templates/exceptions/import_error.html:21 +#: netbox/templates/exceptions/import_error.html:21 msgid "" "If this installation has recently been upgraded, check that the WSGI service" " (e.g. gunicorn or uWSGI) has been restarted. This ensures that the new code" @@ -12511,7 +13292,7 @@ msgstr "" "WSGI (por ejemplo, gunicorn o uWSGI) se haya reiniciado. Esto garantiza que " "el nuevo código se esté ejecutando." -#: templates/exceptions/permission_error.html:6 +#: netbox/templates/exceptions/permission_error.html:6 msgid "" "A file permission error was detected while processing this request. Common " "causes include the following:" @@ -12519,11 +13300,11 @@ msgstr "" "Se detectó un error de permisos de archivos al procesar esta solicitud. " "Entre las causas más frecuentes se incluyen las siguientes:" -#: templates/exceptions/permission_error.html:10 +#: netbox/templates/exceptions/permission_error.html:10 msgid "Insufficient write permission to the media root" msgstr "Permisos de escritura insuficientes en la raíz multimedia" -#: templates/exceptions/permission_error.html:11 +#: netbox/templates/exceptions/permission_error.html:11 #, python-format msgid "" "The configured media root is %(media_root)s. Ensure that the " @@ -12534,7 +13315,7 @@ msgstr "" "que el usuario NetBox se ejecute con acceso para escribir archivos en todas " "las ubicaciones de esta ruta." -#: templates/exceptions/programming_error.html:6 +#: netbox/templates/exceptions/programming_error.html:6 msgid "" "A database programming error was detected while processing this request. " "Common causes include the following:" @@ -12542,11 +13323,11 @@ msgstr "" "Se detectó un error de programación de la base de datos al procesar esta " "solicitud. Entre las causas más frecuentes se incluyen las siguientes:" -#: templates/exceptions/programming_error.html:10 +#: netbox/templates/exceptions/programming_error.html:10 msgid "Database migrations missing" msgstr "Faltan migraciones de bases de datos" -#: templates/exceptions/programming_error.html:11 +#: netbox/templates/exceptions/programming_error.html:11 msgid "" "When upgrading to a new NetBox release, the upgrade script must be run to " "apply any new database migrations. You can run migrations manually by " @@ -12557,11 +13338,11 @@ msgstr "" "Puede ejecutar las migraciones manualmente mediante la ejecución " "python3 manage.py migre desde la línea de comandos." -#: templates/exceptions/programming_error.html:18 +#: netbox/templates/exceptions/programming_error.html:18 msgid "Unsupported PostgreSQL version" msgstr "Versión de PostgreSQL no compatible" -#: templates/exceptions/programming_error.html:19 +#: netbox/templates/exceptions/programming_error.html:19 msgid "" "Ensure that PostgreSQL version 12 or later is in use. You can check this by " "connecting to the database using NetBox's credentials and issuing a query " @@ -12571,99 +13352,102 @@ msgstr "" "comprobarlo, conéctese a la base de datos utilizando las credenciales de " "NetBox y emitiendo una consulta para SELECCIONE LA VERSIÓN ()." -#: templates/extras/configcontext.html:45 -#: templates/extras/configtemplate.html:37 -#: templates/extras/exporttemplate.html:51 +#: netbox/templates/extras/configcontext.html:45 +#: netbox/templates/extras/configtemplate.html:37 +#: netbox/templates/extras/exporttemplate.html:51 msgid "The data file associated with this object has been deleted" msgstr "Se ha eliminado el archivo de datos asociado a este objeto" -#: templates/extras/configcontext.html:54 -#: templates/extras/configtemplate.html:46 -#: templates/extras/exporttemplate.html:60 +#: netbox/templates/extras/configcontext.html:54 +#: netbox/templates/extras/configtemplate.html:46 +#: netbox/templates/extras/exporttemplate.html:60 msgid "Data Synced" msgstr "Datos sincronizados" -#: templates/extras/configcontext_list.html:7 -#: templates/extras/configtemplate_list.html:7 -#: templates/extras/exporttemplate_list.html:7 +#: netbox/templates/extras/configcontext_list.html:7 +#: netbox/templates/extras/configtemplate_list.html:7 +#: netbox/templates/extras/exporttemplate_list.html:7 msgid "Sync Data" msgstr "Sincronizar datos" -#: templates/extras/configtemplate.html:56 +#: netbox/templates/extras/configtemplate.html:56 msgid "Environment Parameters" msgstr "Parámetros del entorno" -#: templates/extras/configtemplate.html:67 -#: templates/extras/exporttemplate.html:79 +#: netbox/templates/extras/configtemplate.html:67 +#: netbox/templates/extras/exporttemplate.html:79 msgid "Template" msgstr "plantilla" -#: templates/extras/customfield.html:30 templates/extras/customlink.html:21 +#: netbox/templates/extras/customfield.html:30 +#: netbox/templates/extras/customlink.html:21 msgid "Group Name" msgstr "Nombre del grupo" -#: templates/extras/customfield.html:42 +#: netbox/templates/extras/customfield.html:42 msgid "Must be Unique" msgstr "Debe ser único" -#: templates/extras/customfield.html:46 +#: netbox/templates/extras/customfield.html:46 msgid "Cloneable" msgstr "Clonable" -#: templates/extras/customfield.html:56 +#: netbox/templates/extras/customfield.html:56 msgid "Default Value" msgstr "Valor predeterminado" -#: templates/extras/customfield.html:73 +#: netbox/templates/extras/customfield.html:73 msgid "Search Weight" msgstr "Peso de búsqueda" -#: templates/extras/customfield.html:83 +#: netbox/templates/extras/customfield.html:83 msgid "Filter Logic" msgstr "Lógica de filtros" -#: templates/extras/customfield.html:87 +#: netbox/templates/extras/customfield.html:87 msgid "Display Weight" msgstr "Peso de la pantalla" -#: templates/extras/customfield.html:91 +#: netbox/templates/extras/customfield.html:91 msgid "UI Visible" msgstr "Interfaz de usuario visible" -#: templates/extras/customfield.html:95 +#: netbox/templates/extras/customfield.html:95 msgid "UI Editable" msgstr "Interfaz de usuario editable" -#: templates/extras/customfield.html:115 +#: netbox/templates/extras/customfield.html:115 msgid "Validation Rules" msgstr "Reglas de validación" -#: templates/extras/customfield.html:126 +#: netbox/templates/extras/customfield.html:126 msgid "Regular Expression" msgstr "Expresión regular" -#: templates/extras/customlink.html:29 +#: netbox/templates/extras/customlink.html:29 msgid "Button Class" msgstr "Clase de botones" -#: templates/extras/customlink.html:39 templates/extras/exporttemplate.html:66 -#: templates/extras/savedfilter.html:39 +#: netbox/templates/extras/customlink.html:39 +#: netbox/templates/extras/exporttemplate.html:66 +#: netbox/templates/extras/savedfilter.html:39 msgid "Assigned Models" msgstr "Modelos asignados" -#: templates/extras/customlink.html:52 +#: netbox/templates/extras/customlink.html:52 msgid "Link Text" msgstr "Texto del enlace" -#: templates/extras/customlink.html:58 +#: netbox/templates/extras/customlink.html:58 msgid "Link URL" msgstr "URL del enlace" -#: templates/extras/dashboard/reset.html:4 templates/home.html:66 +#: netbox/templates/extras/dashboard/reset.html:4 +#: netbox/templates/home.html:66 msgid "Reset Dashboard" msgstr "Restablecer panel" -#: templates/extras/dashboard/reset.html:8 +#: netbox/templates/extras/dashboard/reset.html:8 msgid "" "This will remove all configured widgets and restore the " "default dashboard configuration." @@ -12671,7 +13455,7 @@ msgstr "" "Esto eliminará todo configuró los widgets y restauró la " "configuración predeterminada del panel de control." -#: templates/extras/dashboard/reset.html:13 +#: netbox/templates/extras/dashboard/reset.html:13 msgid "" "This change affects only your dashboard, and will not impact other " "users." @@ -12679,155 +13463,162 @@ msgstr "" "Este cambio solo afecta vuestro panel de control, y no afectará a " "otros usuarios." -#: templates/extras/dashboard/widget.html:21 +#: netbox/templates/extras/dashboard/widget.html:21 msgid "widget configuration" msgstr "configuración de widgets" -#: templates/extras/dashboard/widget.html:36 +#: netbox/templates/extras/dashboard/widget.html:36 msgid "Close widget" msgstr "Cerrar widget" -#: templates/extras/dashboard/widget_add.html:7 +#: netbox/templates/extras/dashboard/widget_add.html:7 msgid "Add a Widget" msgstr "Añadir un widget" -#: templates/extras/dashboard/widgets/bookmarks.html:14 +#: netbox/templates/extras/dashboard/widgets/bookmarks.html:14 msgid "No bookmarks have been added yet." msgstr "Aún no se ha añadido ningún marcador." -#: templates/extras/dashboard/widgets/objectcounts.html:10 +#: netbox/templates/extras/dashboard/widgets/objectcounts.html:10 msgid "No permission" msgstr "Sin permiso" -#: templates/extras/dashboard/widgets/objectlist.html:6 +#: netbox/templates/extras/dashboard/widgets/objectlist.html:6 msgid "No permission to view this content" msgstr "Sin permiso para ver este contenido" -#: templates/extras/dashboard/widgets/objectlist.html:10 +#: netbox/templates/extras/dashboard/widgets/objectlist.html:10 msgid "Unable to load content. Invalid view name" msgstr "No se puede cargar el contenido. Nombre de vista no válido" -#: templates/extras/dashboard/widgets/rssfeed.html:12 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:12 msgid "No content found" msgstr "No se ha encontrado contenido" -#: templates/extras/dashboard/widgets/rssfeed.html:18 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:18 msgid "There was a problem fetching the RSS feed" msgstr "Se ha producido un problema al obtener la fuente RSS" -#: templates/extras/dashboard/widgets/rssfeed.html:21 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:21 msgid "HTTP" msgstr "HTTP" -#: templates/extras/eventrule.html:61 +#: netbox/templates/extras/eventrule.html:61 msgid "Conditions" msgstr "Condiciones" -#: templates/extras/exporttemplate.html:23 +#: netbox/templates/extras/exporttemplate.html:23 msgid "MIME Type" msgstr "Tipo MIME" -#: templates/extras/exporttemplate.html:27 +#: netbox/templates/extras/exporttemplate.html:27 msgid "File Extension" msgstr "Extensión de archivo" -#: templates/extras/htmx/script_result.html:10 +#: netbox/templates/extras/htmx/script_result.html:10 msgid "Scheduled for" msgstr "Programado para" -#: templates/extras/htmx/script_result.html:15 +#: netbox/templates/extras/htmx/script_result.html:15 msgid "Duration" msgstr "Duración" -#: templates/extras/htmx/script_result.html:23 +#: netbox/templates/extras/htmx/script_result.html:23 msgid "Test Summary" msgstr "Resumen de la prueba" -#: templates/extras/htmx/script_result.html:43 +#: netbox/templates/extras/htmx/script_result.html:43 msgid "Log" msgstr "Registro" -#: templates/extras/htmx/script_result.html:56 +#: netbox/templates/extras/htmx/script_result.html:56 msgid "Output" msgstr "Salida" -#: templates/extras/inc/result_pending.html:4 +#: netbox/templates/extras/inc/result_pending.html:4 msgid "Loading" msgstr "Cargando" -#: templates/extras/inc/result_pending.html:6 +#: netbox/templates/extras/inc/result_pending.html:6 msgid "Results pending" msgstr "Resultados pendientes" -#: templates/extras/journalentry.html:15 +#: netbox/templates/extras/journalentry.html:15 msgid "Journal Entry" msgstr "Entrada de diario" -#: templates/extras/notificationgroup.html:11 +#: netbox/templates/extras/notificationgroup.html:11 msgid "Notification Group" msgstr "Grupo de notificaciones" -#: templates/extras/notificationgroup.html:36 -#: templates/extras/notificationgroup.html:46 -#: utilities/templates/widgets/clearable_file_input.html:12 +#: netbox/templates/extras/notificationgroup.html:36 +#: netbox/templates/extras/notificationgroup.html:46 +#: netbox/utilities/templates/widgets/clearable_file_input.html:12 msgid "None assigned" msgstr "No se ha asignado ninguno" -#: templates/extras/object_configcontext.html:19 +#: netbox/templates/extras/object_configcontext.html:19 msgid "The local config context overwrites all source contexts" msgstr "" "El contexto de configuración local sobrescribe todos los contextos fuente" -#: templates/extras/object_configcontext.html:25 +#: netbox/templates/extras/object_configcontext.html:25 msgid "Source Contexts" msgstr "Contextos de origen" -#: templates/extras/object_journal.html:17 +#: netbox/templates/extras/object_journal.html:17 msgid "New Journal Entry" msgstr "Nueva entrada de diario" -#: templates/extras/report/base.html:30 +#: netbox/templates/extras/report/base.html:30 msgid "Report" msgstr "Informe" -#: templates/extras/script.html:14 +#: netbox/templates/extras/script.html:14 msgid "You do not have permission to run scripts" msgstr "No tiene permiso para ejecutar scripts" -#: templates/extras/script.html:41 templates/extras/script.html:45 -#: templates/extras/script_list.html:86 +#: netbox/templates/extras/script.html:41 +#: netbox/templates/extras/script.html:45 +#: netbox/templates/extras/script_list.html:87 msgid "Run Script" msgstr "Ejecutar script" -#: templates/extras/script.html:51 templates/extras/script/source.html:10 +#: netbox/templates/extras/script.html:51 +#: netbox/templates/extras/script/source.html:10 msgid "Error loading script" msgstr "Error al cargar el script" -#: templates/extras/script/jobs.html:16 +#: netbox/templates/extras/script/jobs.html:16 msgid "Script no longer exists in the source file." msgstr "El script ya no existe en el archivo fuente." -#: templates/extras/script_list.html:46 +#: netbox/templates/extras/script_list.html:47 msgid "Last Run" msgstr "Última ejecución" -#: templates/extras/script_list.html:61 +#: netbox/templates/extras/script_list.html:62 msgid "Script is no longer present in the source file" msgstr "La secuencia de comandos ya no está presente en el archivo fuente" -#: templates/extras/script_list.html:74 +#: netbox/templates/extras/script_list.html:75 msgid "Never" msgstr "Nunca" -#: templates/extras/script_list.html:84 +#: netbox/templates/extras/script_list.html:85 msgid "Run Again" msgstr "Corre otra vez" -#: templates/extras/script_list.html:138 +#: netbox/templates/extras/script_list.html:133 +#, python-format +msgid "Could not load scripts from module %(module)s" +msgstr "" + +#: netbox/templates/extras/script_list.html:141 msgid "No Scripts Found" msgstr "No se encontró ningún script" -#: templates/extras/script_list.html:141 +#: netbox/templates/extras/script_list.html:144 #, python-format msgid "" "Get started by creating a script from " @@ -12836,81 +13627,83 @@ msgstr "" "Comience por crear un guion desde un " "archivo o fuente de datos cargados." -#: templates/extras/script_result.html:35 -#: templates/generic/object_list.html:50 templates/search.html:13 +#: netbox/templates/extras/script_result.html:35 +#: netbox/templates/generic/object_list.html:50 +#: netbox/templates/search.html:13 msgid "Results" msgstr "Resultados" -#: templates/extras/script_result.html:46 +#: netbox/templates/extras/script_result.html:46 msgid "Log threshold" msgstr "Umbral de registro" -#: templates/extras/script_result.html:56 +#: netbox/templates/extras/script_result.html:56 msgid "All" msgstr "Todas" -#: templates/extras/tag.html:32 +#: netbox/templates/extras/tag.html:32 msgid "Tagged Items" msgstr "Artículos etiquetados" -#: templates/extras/tag.html:43 +#: netbox/templates/extras/tag.html:43 msgid "Allowed Object Types" msgstr "Tipos de objetos permitidos" -#: templates/extras/tag.html:51 +#: netbox/templates/extras/tag.html:51 msgid "Any" msgstr "Cualquier" -#: templates/extras/tag.html:57 +#: netbox/templates/extras/tag.html:57 msgid "Tagged Item Types" msgstr "Tipos de artículos etiquetados" -#: templates/extras/tag.html:81 +#: netbox/templates/extras/tag.html:81 msgid "Tagged Objects" msgstr "Objetos etiquetados" -#: templates/extras/webhook.html:26 +#: netbox/templates/extras/webhook.html:26 msgid "HTTP Method" msgstr "Método HTTP" -#: templates/extras/webhook.html:34 +#: netbox/templates/extras/webhook.html:34 msgid "HTTP Content Type" msgstr "Tipo de contenido HTTP" -#: templates/extras/webhook.html:47 +#: netbox/templates/extras/webhook.html:47 msgid "SSL Verification" msgstr "Verificación SSL" -#: templates/extras/webhook.html:60 +#: netbox/templates/extras/webhook.html:60 msgid "Additional Headers" msgstr "Encabezados adicionales" -#: templates/extras/webhook.html:70 +#: netbox/templates/extras/webhook.html:70 msgid "Body Template" msgstr "Plantilla corporal" -#: templates/generic/bulk_add_component.html:29 +#: netbox/templates/generic/bulk_add_component.html:29 msgid "Bulk Creation" msgstr "Creación masiva" -#: templates/generic/bulk_add_component.html:34 -#: templates/generic/bulk_delete.html:32 templates/generic/bulk_edit.html:33 +#: netbox/templates/generic/bulk_add_component.html:34 +#: netbox/templates/generic/bulk_delete.html:32 +#: netbox/templates/generic/bulk_edit.html:33 msgid "Selected Objects" msgstr "Objetos seleccionados" -#: templates/generic/bulk_add_component.html:58 +#: netbox/templates/generic/bulk_add_component.html:58 msgid "to Add" msgstr "añadir" -#: templates/generic/bulk_delete.html:27 +#: netbox/templates/generic/bulk_delete.html:27 msgid "Bulk Delete" msgstr "Eliminación masiva" -#: templates/generic/bulk_delete.html:49 +#: netbox/templates/generic/bulk_delete.html:49 msgid "Confirm Bulk Deletion" msgstr "Confirme la eliminación masiva" -#: templates/generic/bulk_delete.html:50 +#: netbox/templates/generic/bulk_delete.html:50 #, python-format msgid "" "The following operation will delete %(count)s " @@ -12920,66 +13713,69 @@ msgstr "" "La siguiente operación eliminará %(count)s %(type_plural)s." " Revise cuidadosamente los objetos seleccionados y confirme esta acción." -#: templates/generic/bulk_edit.html:21 templates/generic/object_edit.html:22 +#: netbox/templates/generic/bulk_edit.html:21 +#: netbox/templates/generic/object_edit.html:22 msgid "Editing" msgstr "Edición" -#: templates/generic/bulk_edit.html:28 +#: netbox/templates/generic/bulk_edit.html:28 msgid "Bulk Edit" msgstr "Edición masiva" -#: templates/generic/bulk_edit.html:107 templates/generic/bulk_rename.html:66 +#: netbox/templates/generic/bulk_edit.html:107 +#: netbox/templates/generic/bulk_rename.html:66 msgid "Apply" msgstr "Aplica" -#: templates/generic/bulk_import.html:19 +#: netbox/templates/generic/bulk_import.html:19 msgid "Bulk Import" msgstr "Importación masiva" -#: templates/generic/bulk_import.html:25 +#: netbox/templates/generic/bulk_import.html:25 msgid "Direct Import" msgstr "Importación directa" -#: templates/generic/bulk_import.html:30 +#: netbox/templates/generic/bulk_import.html:30 msgid "Upload File" msgstr "Cargar archivo" -#: templates/generic/bulk_import.html:58 templates/generic/bulk_import.html:80 -#: templates/generic/bulk_import.html:102 +#: netbox/templates/generic/bulk_import.html:58 +#: netbox/templates/generic/bulk_import.html:80 +#: netbox/templates/generic/bulk_import.html:102 msgid "Submit" msgstr "Enviar" -#: templates/generic/bulk_import.html:113 +#: netbox/templates/generic/bulk_import.html:113 msgid "Field Options" msgstr "Opciones de campo" -#: templates/generic/bulk_import.html:119 +#: netbox/templates/generic/bulk_import.html:119 msgid "Accessor" msgstr "Accesor" -#: templates/generic/bulk_import.html:148 +#: netbox/templates/generic/bulk_import.html:148 msgid "choices" msgstr "opciones" -#: templates/generic/bulk_import.html:161 +#: netbox/templates/generic/bulk_import.html:161 msgid "Import Value" msgstr "Valor de importación" -#: templates/generic/bulk_import.html:181 +#: netbox/templates/generic/bulk_import.html:181 msgid "Format: YYYY-MM-DD" msgstr "Formato: AAAA-MM-DD" -#: templates/generic/bulk_import.html:183 +#: netbox/templates/generic/bulk_import.html:183 msgid "Specify true or false" msgstr "Especifique verdadero o falso" -#: templates/generic/bulk_import.html:195 +#: netbox/templates/generic/bulk_import.html:195 msgid "Required fields must be specified for all objects." msgstr "" "Campos obligatorios mosto especificarse para todos los " "objetos." -#: templates/generic/bulk_import.html:201 +#: netbox/templates/generic/bulk_import.html:201 #, python-format msgid "" "Related objects may be referenced by any unique attribute. For example, " @@ -12989,15 +13785,15 @@ msgstr "" "atributo único. Por ejemplo, %(example)s identificaría un VRF " "por su identificador de ruta." -#: templates/generic/bulk_remove.html:28 +#: netbox/templates/generic/bulk_remove.html:28 msgid "Bulk Remove" msgstr "Eliminación masiva" -#: templates/generic/bulk_remove.html:42 +#: netbox/templates/generic/bulk_remove.html:42 msgid "Confirm Bulk Removal" msgstr "Confirme la eliminación masiva" -#: templates/generic/bulk_remove.html:43 +#: netbox/templates/generic/bulk_remove.html:43 #, python-format msgid "" "The following operation will remove %(count)s %(obj_type_plural)s from " @@ -13008,72 +13804,72 @@ msgstr "" "%(parent_obj)s. Por favor, revise detenidamente el %(obj_type_plural)s para " "eliminarlo y confirmarlo a continuación." -#: templates/generic/bulk_remove.html:64 +#: netbox/templates/generic/bulk_remove.html:64 #, python-format msgid "Remove these %(count)s %(obj_type_plural)s" msgstr "Elimine estos %(count)s %(obj_type_plural)s" -#: templates/generic/bulk_rename.html:20 +#: netbox/templates/generic/bulk_rename.html:20 msgid "Renaming" msgstr "Cambiar el nombre" -#: templates/generic/bulk_rename.html:27 +#: netbox/templates/generic/bulk_rename.html:27 msgid "Bulk Rename" msgstr "Cambio de nombre masivo" -#: templates/generic/bulk_rename.html:39 +#: netbox/templates/generic/bulk_rename.html:39 msgid "Current Name" msgstr "Nombre actual" -#: templates/generic/bulk_rename.html:40 +#: netbox/templates/generic/bulk_rename.html:40 msgid "New Name" msgstr "Nombre nuevo" -#: templates/generic/bulk_rename.html:64 -#: utilities/templates/widgets/markdown_input.html:11 +#: netbox/templates/generic/bulk_rename.html:64 +#: netbox/utilities/templates/widgets/markdown_input.html:11 msgid "Preview" msgstr "Vista previa" -#: templates/generic/confirmation_form.html:16 +#: netbox/templates/generic/confirmation_form.html:16 msgid "Are you sure" msgstr "¿Estás seguro" -#: templates/generic/confirmation_form.html:20 +#: netbox/templates/generic/confirmation_form.html:20 msgid "Confirm" msgstr "Confirmar" -#: templates/generic/object_children.html:47 -#: utilities/templates/buttons/bulk_edit.html:4 +#: netbox/templates/generic/object_children.html:47 +#: netbox/utilities/templates/buttons/bulk_edit.html:4 msgid "Edit Selected" msgstr "Editar seleccionado" -#: templates/generic/object_children.html:61 -#: utilities/templates/buttons/bulk_delete.html:4 +#: netbox/templates/generic/object_children.html:61 +#: netbox/utilities/templates/buttons/bulk_delete.html:4 msgid "Delete Selected" msgstr "Eliminar seleccionado" -#: templates/generic/object_edit.html:24 +#: netbox/templates/generic/object_edit.html:24 #, python-format msgid "Add a new %(object_type)s" msgstr "Añadir una nueva %(object_type)s" -#: templates/generic/object_edit.html:35 +#: netbox/templates/generic/object_edit.html:35 msgid "View model documentation" msgstr "Ver la documentación del modelo" -#: templates/generic/object_edit.html:36 +#: netbox/templates/generic/object_edit.html:36 msgid "Help" msgstr "Ayuda" -#: templates/generic/object_edit.html:83 +#: netbox/templates/generic/object_edit.html:83 msgid "Create & Add Another" msgstr "Crear y agregar otro" -#: templates/generic/object_list.html:57 +#: netbox/templates/generic/object_list.html:57 msgid "Filters" msgstr "Filtros" -#: templates/generic/object_list.html:88 +#: netbox/templates/generic/object_list.html:88 #, python-format msgid "" "Select all %(count)s " @@ -13082,40 +13878,40 @@ msgstr "" "Seleccione todo %(count)s " "%(object_type_plural)s consulta coincidente" -#: templates/home.html:15 +#: netbox/templates/home.html:15 msgid "New Release Available" msgstr "Nueva versión disponible" -#: templates/home.html:16 +#: netbox/templates/home.html:16 msgid "is available" msgstr "está disponible" -#: templates/home.html:18 +#: netbox/templates/home.html:18 msgctxt "Document title" msgid "Upgrade Instructions" msgstr "Instrucciones de actualización" -#: templates/home.html:40 +#: netbox/templates/home.html:40 msgid "Unlock Dashboard" msgstr "Desbloquear panel" -#: templates/home.html:49 +#: netbox/templates/home.html:49 msgid "Lock Dashboard" msgstr "Panel de control de bloqueo" -#: templates/home.html:60 +#: netbox/templates/home.html:60 msgid "Add Widget" msgstr "Agregar widget" -#: templates/home.html:63 +#: netbox/templates/home.html:63 msgid "Save Layout" msgstr "Guardar diseño" -#: templates/htmx/delete_form.html:7 +#: netbox/templates/htmx/delete_form.html:7 msgid "Confirm Deletion" msgstr "Confirme la eliminación" -#: templates/htmx/delete_form.html:11 +#: netbox/templates/htmx/delete_form.html:11 #, python-format msgid "" "Are you sure you want to delete " @@ -13124,40 +13920,40 @@ msgstr "" "¿Estás seguro de que quieres eliminar" " %(object_type)s %(object)s?" -#: templates/htmx/delete_form.html:17 +#: netbox/templates/htmx/delete_form.html:17 msgid "The following objects will be deleted as a result of this action." msgstr "Como resultado de esta acción, se eliminarán los siguientes objetos." -#: templates/htmx/notifications.html:15 +#: netbox/templates/htmx/notifications.html:15 msgid "ago" msgstr "hace" -#: templates/htmx/notifications.html:26 +#: netbox/templates/htmx/notifications.html:26 msgid "No unread notifications" msgstr "No hay notificaciones sin leer" -#: templates/htmx/notifications.html:31 +#: netbox/templates/htmx/notifications.html:31 msgid "All notifications" msgstr "Todas las notificaciones" -#: templates/htmx/object_selector.html:5 +#: netbox/templates/htmx/object_selector.html:5 msgid "Select" msgstr "Seleccione" -#: templates/inc/filter_list.html:43 -#: utilities/templates/helpers/table_config_form.html:39 +#: netbox/templates/inc/filter_list.html:43 +#: netbox/utilities/templates/helpers/table_config_form.html:39 msgid "Reset" msgstr "Restablecer" -#: templates/inc/light_toggle.html:4 +#: netbox/templates/inc/light_toggle.html:4 msgid "Enable dark mode" msgstr "Activar el modo oscuro" -#: templates/inc/light_toggle.html:7 +#: netbox/templates/inc/light_toggle.html:7 msgid "Enable light mode" msgstr "Activar el modo de luz" -#: templates/inc/missing_prerequisites.html:8 +#: netbox/templates/inc/missing_prerequisites.html:8 #, python-format msgid "" "Before you can add a %(model)s you must first create a " @@ -13166,281 +13962,283 @@ msgstr "" "Antes de poder añadir un %(model)s primero debes crear un " "%(prerequisite_model)s." -#: templates/inc/paginator.html:15 +#: netbox/templates/inc/paginator.html:15 msgid "Page selection" msgstr "Selección de páginas" -#: templates/inc/paginator.html:75 +#: netbox/templates/inc/paginator.html:75 #, python-format msgid "Showing %(start)s-%(end)s of %(total)s" msgstr "Mostrando %(start)s-%(end)s de %(total)s" -#: templates/inc/paginator.html:82 +#: netbox/templates/inc/paginator.html:82 msgid "Pagination options" msgstr "Opciones de paginación" -#: templates/inc/paginator.html:86 +#: netbox/templates/inc/paginator.html:86 msgid "Per Page" msgstr "Por página" -#: templates/inc/panels/image_attachments.html:10 +#: netbox/templates/inc/panels/image_attachments.html:10 msgid "Attach an image" msgstr "Adjunta una imagen" -#: templates/inc/panels/related_objects.html:5 +#: netbox/templates/inc/panels/related_objects.html:5 msgid "Related Objects" msgstr "Objetos relacionados" -#: templates/inc/panels/tags.html:11 +#: netbox/templates/inc/panels/tags.html:11 msgid "No tags assigned" msgstr "No hay etiquetas asignadas" -#: templates/inc/sync_warning.html:10 +#: netbox/templates/inc/sync_warning.html:10 msgid "Data is out of sync with upstream file" msgstr "Los datos no están sincronizados con el archivo anterior" -#: templates/inc/table_controls_htmx.html:7 +#: netbox/templates/inc/table_controls_htmx.html:7 msgid "Quick search" msgstr "Búsqueda rápida" -#: templates/inc/table_controls_htmx.html:20 +#: netbox/templates/inc/table_controls_htmx.html:20 msgid "Saved filter" msgstr "Filtro guardado" -#: templates/inc/table_htmx.html:18 +#: netbox/templates/inc/table_htmx.html:18 msgid "Clear ordering" msgstr "Pedido claro" -#: templates/inc/user_menu.html:6 +#: netbox/templates/inc/user_menu.html:6 msgid "Help center" msgstr "Centro de ayuda" -#: templates/inc/user_menu.html:41 +#: netbox/templates/inc/user_menu.html:41 msgid "Django Admin" msgstr "Administrador de Django" -#: templates/inc/user_menu.html:61 +#: netbox/templates/inc/user_menu.html:61 msgid "Log Out" msgstr "Cerrar sesión" -#: templates/inc/user_menu.html:68 templates/login.html:38 +#: netbox/templates/inc/user_menu.html:68 netbox/templates/login.html:38 msgid "Log In" msgstr "Iniciar sesión" -#: templates/ipam/aggregate.html:14 templates/ipam/ipaddress.html:14 -#: templates/ipam/iprange.html:13 templates/ipam/prefix.html:15 +#: netbox/templates/ipam/aggregate.html:14 +#: netbox/templates/ipam/ipaddress.html:14 +#: netbox/templates/ipam/iprange.html:13 netbox/templates/ipam/prefix.html:15 msgid "Family" msgstr "Familia" -#: templates/ipam/aggregate.html:39 +#: netbox/templates/ipam/aggregate.html:39 msgid "Date Added" msgstr "Fecha añadida" -#: templates/ipam/aggregate/prefixes.html:8 -#: templates/ipam/prefix/prefixes.html:8 templates/ipam/role.html:10 +#: netbox/templates/ipam/aggregate/prefixes.html:8 +#: netbox/templates/ipam/prefix/prefixes.html:8 +#: netbox/templates/ipam/role.html:10 msgid "Add Prefix" msgstr "Agregar prefijo" -#: templates/ipam/asn.html:23 +#: netbox/templates/ipam/asn.html:23 msgid "AS Number" msgstr "Número AS" -#: templates/ipam/fhrpgroup.html:52 +#: netbox/templates/ipam/fhrpgroup.html:52 msgid "Authentication Type" msgstr "Tipo de autenticación" -#: templates/ipam/fhrpgroup.html:56 +#: netbox/templates/ipam/fhrpgroup.html:56 msgid "Authentication Key" msgstr "Clave de autenticación" -#: templates/ipam/fhrpgroup.html:69 +#: netbox/templates/ipam/fhrpgroup.html:69 msgid "Virtual IP Addresses" msgstr "Direcciones IP virtuales" -#: templates/ipam/inc/ipaddress_edit_header.html:13 +#: netbox/templates/ipam/inc/ipaddress_edit_header.html:13 msgid "Assign IP" msgstr "Asignar IP" -#: templates/ipam/inc/ipaddress_edit_header.html:19 +#: netbox/templates/ipam/inc/ipaddress_edit_header.html:19 msgid "Bulk Create" msgstr "Creación masiva" -#: templates/ipam/inc/panels/fhrp_groups.html:10 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:10 msgid "Create Group" msgstr "Crear grupo" -#: templates/ipam/inc/panels/fhrp_groups.html:25 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:25 msgid "Virtual IPs" msgstr "IP virtuales" -#: templates/ipam/inc/toggle_available.html:7 +#: netbox/templates/ipam/inc/toggle_available.html:7 msgid "Show Assigned" msgstr "Mostrar asignado" -#: templates/ipam/inc/toggle_available.html:10 +#: netbox/templates/ipam/inc/toggle_available.html:10 msgid "Show Available" msgstr "Mostrar disponible" -#: templates/ipam/inc/toggle_available.html:13 +#: netbox/templates/ipam/inc/toggle_available.html:13 msgid "Show All" msgstr "Mostrar todo" -#: templates/ipam/ipaddress.html:23 templates/ipam/iprange.html:45 -#: templates/ipam/prefix.html:24 +#: netbox/templates/ipam/ipaddress.html:23 +#: netbox/templates/ipam/iprange.html:45 netbox/templates/ipam/prefix.html:24 msgid "Global" msgstr "Global" -#: templates/ipam/ipaddress.html:85 +#: netbox/templates/ipam/ipaddress.html:85 msgid "NAT (outside)" msgstr "NAT (exterior)" -#: templates/ipam/ipaddress_assign.html:8 +#: netbox/templates/ipam/ipaddress_assign.html:8 msgid "Assign an IP Address" msgstr "Asignar una dirección IP" -#: templates/ipam/ipaddress_assign.html:22 +#: netbox/templates/ipam/ipaddress_assign.html:22 msgid "Select IP Address" msgstr "Seleccione la dirección IP" -#: templates/ipam/ipaddress_assign.html:35 +#: netbox/templates/ipam/ipaddress_assign.html:35 msgid "Search Results" msgstr "Resultados de la búsqueda" -#: templates/ipam/ipaddress_bulk_add.html:6 +#: netbox/templates/ipam/ipaddress_bulk_add.html:6 msgid "Bulk Add IP Addresses" msgstr "Agregar direcciones IP de forma masiva" -#: templates/ipam/iprange.html:17 +#: netbox/templates/ipam/iprange.html:17 msgid "Starting Address" msgstr "Dirección inicial" -#: templates/ipam/iprange.html:21 +#: netbox/templates/ipam/iprange.html:21 msgid "Ending Address" msgstr "Dirección final" -#: templates/ipam/iprange.html:33 templates/ipam/prefix.html:110 +#: netbox/templates/ipam/iprange.html:33 netbox/templates/ipam/prefix.html:110 msgid "Marked fully utilized" msgstr "Marcado como totalmente utilizado" -#: templates/ipam/prefix.html:99 +#: netbox/templates/ipam/prefix.html:99 msgid "Addressing Details" msgstr "Detalles de direccionamiento" -#: templates/ipam/prefix.html:118 +#: netbox/templates/ipam/prefix.html:118 msgid "Child IPs" msgstr "IP para niños" -#: templates/ipam/prefix.html:126 +#: netbox/templates/ipam/prefix.html:126 msgid "Available IPs" msgstr "IPs disponibles" -#: templates/ipam/prefix.html:138 +#: netbox/templates/ipam/prefix.html:138 msgid "First available IP" msgstr "Primera IP disponible" -#: templates/ipam/prefix.html:179 +#: netbox/templates/ipam/prefix.html:179 msgid "Prefix Details" msgstr "Detalles del prefijo" -#: templates/ipam/prefix.html:185 +#: netbox/templates/ipam/prefix.html:185 msgid "Network Address" msgstr "Dirección de red" -#: templates/ipam/prefix.html:189 +#: netbox/templates/ipam/prefix.html:189 msgid "Network Mask" msgstr "Máscara de red" -#: templates/ipam/prefix.html:193 +#: netbox/templates/ipam/prefix.html:193 msgid "Wildcard Mask" msgstr "Máscara Wildcard" -#: templates/ipam/prefix.html:197 +#: netbox/templates/ipam/prefix.html:197 msgid "Broadcast Address" msgstr "Dirección de transmisión" -#: templates/ipam/prefix/ip_ranges.html:7 +#: netbox/templates/ipam/prefix/ip_ranges.html:7 msgid "Add IP Range" msgstr "Agregar rango de IP" -#: templates/ipam/prefix_list.html:7 +#: netbox/templates/ipam/prefix_list.html:7 msgid "Hide Depth Indicators" msgstr "Ocultar indicadores de profundidad" -#: templates/ipam/prefix_list.html:11 +#: netbox/templates/ipam/prefix_list.html:11 msgid "Max Depth" msgstr "Profundidad máxima" -#: templates/ipam/prefix_list.html:28 +#: netbox/templates/ipam/prefix_list.html:28 msgid "Max Length" msgstr "Longitud máxima" -#: templates/ipam/rir.html:10 +#: netbox/templates/ipam/rir.html:10 msgid "Add Aggregate" msgstr "Agregar agregado" -#: templates/ipam/routetarget.html:38 +#: netbox/templates/ipam/routetarget.html:38 msgid "Importing VRFs" msgstr "Importación de VRF" -#: templates/ipam/routetarget.html:44 +#: netbox/templates/ipam/routetarget.html:44 msgid "Exporting VRFs" msgstr "Exportación de VRF" -#: templates/ipam/routetarget.html:52 +#: netbox/templates/ipam/routetarget.html:52 msgid "Importing L2VPNs" msgstr "Importación de VPNs L2" -#: templates/ipam/routetarget.html:58 +#: netbox/templates/ipam/routetarget.html:58 msgid "Exporting L2VPNs" msgstr "Exportación de VPNs L2" -#: templates/ipam/vlan.html:88 +#: netbox/templates/ipam/vlan.html:88 msgid "Add a Prefix" msgstr "Agregar un prefijo" -#: templates/ipam/vlangroup.html:18 +#: netbox/templates/ipam/vlangroup.html:18 msgid "Add VLAN" msgstr "Agregar VLAN" -#: templates/ipam/vrf.html:16 +#: netbox/templates/ipam/vrf.html:16 msgid "Route Distinguisher" msgstr "Distinguidor de rutas" -#: templates/ipam/vrf.html:29 +#: netbox/templates/ipam/vrf.html:29 msgid "Unique IP Space" msgstr "Espacio IP único" -#: templates/login.html:29 -#: utilities/templates/form_helpers/render_errors.html:7 +#: netbox/templates/login.html:29 +#: netbox/utilities/templates/form_helpers/render_errors.html:7 msgid "Errors" msgstr "Errores" -#: templates/login.html:69 +#: netbox/templates/login.html:69 msgid "Sign In" msgstr "Iniciar sesión" -#: templates/login.html:77 +#: netbox/templates/login.html:77 msgctxt "Denotes an alternative option" msgid "Or" msgstr "O" -#: templates/media_failure.html:7 +#: netbox/templates/media_failure.html:7 msgid "Static Media Failure - NetBox" msgstr "Fallo de medios estáticos - NetBox" -#: templates/media_failure.html:21 +#: netbox/templates/media_failure.html:21 msgid "Static Media Failure" msgstr "Fallo de medios estáticos" -#: templates/media_failure.html:23 +#: netbox/templates/media_failure.html:23 msgid "The following static media file failed to load" msgstr "No se pudo cargar el siguiente archivo multimedia estático" -#: templates/media_failure.html:26 +#: netbox/templates/media_failure.html:26 msgid "Check the following" msgstr "Compruebe lo siguiente" -#: templates/media_failure.html:29 +#: netbox/templates/media_failure.html:29 msgid "" "manage.py collectstatic was run during the most recent upgrade." " This installs the most recent iteration of each static file into the static" @@ -13450,7 +14248,7 @@ msgstr "" " más reciente. Esto instala la iteración más reciente de cada archivo " "estático en la ruta raíz estática." -#: templates/media_failure.html:35 +#: netbox/templates/media_failure.html:35 #, python-format msgid "" "The HTTP service (e.g. nginx or Apache) is configured to serve files from " @@ -13462,7 +14260,7 @@ msgstr "" "href=\"%(docs_url)s\">la documentación de instalación para obtener más " "información." -#: templates/media_failure.html:47 +#: netbox/templates/media_failure.html:47 #, python-format msgid "" "The file %(filename)s exists in the static root directory and " @@ -13471,548 +14269,571 @@ msgstr "" "El archivo %(filename)s existe en el directorio raíz estático y" " el servidor HTTP lo puede leer." -#: templates/media_failure.html:55 +#: netbox/templates/media_failure.html:55 #, python-format msgid "Click here to attempt loading NetBox again." msgstr "" "Haga clic aquí para intentar cargar NetBox de " "nuevo." -#: templates/tenancy/contact.html:18 tenancy/filtersets.py:147 -#: tenancy/forms/bulk_edit.py:137 tenancy/forms/filtersets.py:102 -#: tenancy/forms/forms.py:56 tenancy/forms/model_forms.py:106 -#: tenancy/forms/model_forms.py:130 tenancy/tables/contacts.py:98 +#: netbox/templates/tenancy/contact.html:18 netbox/tenancy/filtersets.py: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/model_forms.py:130 +#: netbox/tenancy/tables/contacts.py:98 msgid "Contact" msgstr "Contacto" -#: templates/tenancy/contact.html:29 tenancy/forms/bulk_edit.py:99 +#: netbox/templates/tenancy/contact.html:29 +#: netbox/tenancy/forms/bulk_edit.py:99 msgid "Title" msgstr "Título" -#: templates/tenancy/contact.html:33 tenancy/forms/bulk_edit.py:104 -#: tenancy/tables/contacts.py:64 +#: netbox/templates/tenancy/contact.html:33 +#: netbox/tenancy/forms/bulk_edit.py:104 netbox/tenancy/tables/contacts.py:64 msgid "Phone" msgstr "Teléfono" -#: templates/tenancy/contactgroup.html:18 tenancy/forms/forms.py:66 -#: tenancy/forms/model_forms.py:75 +#: netbox/templates/tenancy/contactgroup.html:18 +#: netbox/tenancy/forms/forms.py:66 netbox/tenancy/forms/model_forms.py:75 msgid "Contact Group" msgstr "Grupo de contacto" -#: templates/tenancy/contactgroup.html:50 +#: netbox/templates/tenancy/contactgroup.html:50 msgid "Add Contact Group" msgstr "Agregar grupo de contactos" -#: templates/tenancy/contactrole.html:15 tenancy/filtersets.py:152 -#: tenancy/forms/forms.py:61 tenancy/forms/model_forms.py:87 +#: netbox/templates/tenancy/contactrole.html:15 +#: netbox/tenancy/filtersets.py:152 netbox/tenancy/forms/forms.py:61 +#: netbox/tenancy/forms/model_forms.py:87 msgid "Contact Role" msgstr "Función de contacto" -#: templates/tenancy/object_contacts.html:9 +#: netbox/templates/tenancy/object_contacts.html:9 msgid "Add a contact" msgstr "Añadir un contacto" -#: templates/tenancy/tenantgroup.html:17 +#: netbox/templates/tenancy/tenantgroup.html:17 msgid "Add Tenant" msgstr "Agregar inquilino" -#: templates/tenancy/tenantgroup.html:26 tenancy/forms/model_forms.py:32 -#: tenancy/tables/columns.py:51 tenancy/tables/columns.py:61 +#: netbox/templates/tenancy/tenantgroup.html:26 +#: netbox/tenancy/forms/model_forms.py:32 netbox/tenancy/tables/columns.py:51 +#: netbox/tenancy/tables/columns.py:61 msgid "Tenant Group" msgstr "Grupo de inquilinos" -#: templates/tenancy/tenantgroup.html:59 +#: netbox/templates/tenancy/tenantgroup.html:59 msgid "Add Tenant Group" msgstr "Agregar grupo de inquilinos" -#: templates/users/group.html:39 templates/users/user.html:63 +#: netbox/templates/users/group.html:39 netbox/templates/users/user.html:63 msgid "Assigned Permissions" msgstr "Permisos asignados" -#: templates/users/objectpermission.html:6 -#: templates/users/objectpermission.html:14 users/forms/filtersets.py:66 +#: netbox/templates/users/objectpermission.html:6 +#: netbox/templates/users/objectpermission.html:14 +#: netbox/users/forms/filtersets.py:66 msgid "Permission" msgstr "Permiso" -#: templates/users/objectpermission.html:34 +#: netbox/templates/users/objectpermission.html:34 msgid "View" msgstr "Ver" -#: templates/users/objectpermission.html:52 users/forms/model_forms.py:315 +#: netbox/templates/users/objectpermission.html:52 +#: netbox/users/forms/model_forms.py:315 msgid "Constraints" msgstr "Restricciones" -#: templates/users/objectpermission.html:72 +#: netbox/templates/users/objectpermission.html:72 msgid "Assigned Users" msgstr "Usuarios asignados" -#: templates/virtualization/cluster.html:52 +#: netbox/templates/virtualization/cluster.html:52 msgid "Allocated Resources" msgstr "Recursos asignados" -#: templates/virtualization/cluster.html:55 -#: templates/virtualization/virtualmachine.html:125 +#: netbox/templates/virtualization/cluster.html:55 +#: netbox/templates/virtualization/virtualmachine.html:125 msgid "Virtual CPUs" msgstr "CPUs virtuales" -#: templates/virtualization/cluster.html:59 -#: templates/virtualization/virtualmachine.html:129 +#: netbox/templates/virtualization/cluster.html:59 +#: netbox/templates/virtualization/virtualmachine.html:129 msgid "Memory" msgstr "Memoria" -#: templates/virtualization/cluster.html:69 -#: templates/virtualization/virtualmachine.html:140 +#: netbox/templates/virtualization/cluster.html:69 +#: netbox/templates/virtualization/virtualmachine.html:140 msgid "Disk Space" msgstr "Espacio en disco" -#: templates/virtualization/cluster/base.html:18 +#: netbox/templates/virtualization/cluster/base.html:18 msgid "Add Virtual Machine" msgstr "Agregar máquina virtual" -#: templates/virtualization/cluster/base.html:24 +#: netbox/templates/virtualization/cluster/base.html:24 msgid "Assign Device" msgstr "Asignar dispositivo" -#: templates/virtualization/cluster/devices.html:10 +#: netbox/templates/virtualization/cluster/devices.html:10 msgid "Remove Selected" msgstr "Eliminar seleccionado" -#: templates/virtualization/cluster_add_devices.html:9 +#: netbox/templates/virtualization/cluster_add_devices.html:9 #, python-format msgid "Add Device to Cluster %(cluster)s" msgstr "Agregar dispositivo al clúster %(cluster)s" -#: templates/virtualization/cluster_add_devices.html:23 +#: netbox/templates/virtualization/cluster_add_devices.html:23 msgid "Device Selection" msgstr "Selección de dispositivos" -#: templates/virtualization/cluster_add_devices.html:31 +#: netbox/templates/virtualization/cluster_add_devices.html:31 msgid "Add Devices" msgstr "Agregar dispositivos" -#: templates/virtualization/clustergroup.html:10 -#: templates/virtualization/clustertype.html:10 +#: netbox/templates/virtualization/clustergroup.html:10 +#: netbox/templates/virtualization/clustertype.html:10 msgid "Add Cluster" msgstr "Agregar clúster" -#: templates/virtualization/clustergroup.html:19 -#: virtualization/forms/model_forms.py:50 +#: netbox/templates/virtualization/clustergroup.html:19 +#: netbox/virtualization/forms/model_forms.py:50 msgid "Cluster Group" msgstr "Grupo de clústeres" -#: templates/virtualization/clustertype.html:19 -#: templates/virtualization/virtualmachine.html:110 -#: virtualization/forms/model_forms.py:36 +#: netbox/templates/virtualization/clustertype.html:19 +#: netbox/templates/virtualization/virtualmachine.html:110 +#: netbox/virtualization/forms/model_forms.py:36 msgid "Cluster Type" msgstr "Tipo de clúster" -#: templates/virtualization/virtualdisk.html:18 +#: netbox/templates/virtualization/virtualdisk.html:18 msgid "Virtual Disk" msgstr "Disco virtual" -#: templates/virtualization/virtualmachine.html:122 -#: virtualization/forms/bulk_edit.py:190 -#: virtualization/forms/model_forms.py:224 +#: netbox/templates/virtualization/virtualmachine.html:122 +#: netbox/virtualization/forms/bulk_edit.py:190 +#: netbox/virtualization/forms/model_forms.py:224 msgid "Resources" msgstr "Recursos" -#: templates/virtualization/virtualmachine.html:178 +#: netbox/templates/virtualization/virtualmachine.html:178 msgid "Add Virtual Disk" msgstr "Agregar disco virtual" -#: templates/vpn/ikepolicy.html:10 templates/vpn/ipsecprofile.html:33 -#: vpn/tables/crypto.py:166 +#: 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" msgstr "Política de IKE" -#: templates/vpn/ikepolicy.html:21 +#: netbox/templates/vpn/ikepolicy.html:21 msgid "IKE Version" msgstr "Versión IKE" -#: templates/vpn/ikepolicy.html:29 +#: netbox/templates/vpn/ikepolicy.html:29 msgid "Pre-Shared Key" msgstr "Clave previamente compartida" -#: templates/vpn/ikepolicy.html:33 -#: templates/wireless/inc/authentication_attrs.html:20 +#: netbox/templates/vpn/ikepolicy.html:33 +#: netbox/templates/wireless/inc/authentication_attrs.html:20 msgid "Show Secret" msgstr "Mostrar secreto" -#: templates/vpn/ikepolicy.html:57 templates/vpn/ipsecpolicy.html:45 -#: templates/vpn/ipsecprofile.html:52 templates/vpn/ipsecprofile.html:77 -#: vpn/forms/model_forms.py:316 vpn/forms/model_forms.py:352 -#: vpn/tables/crypto.py:68 vpn/tables/crypto.py:134 +#: netbox/templates/vpn/ikepolicy.html:57 +#: netbox/templates/vpn/ipsecpolicy.html:45 +#: netbox/templates/vpn/ipsecprofile.html:52 +#: netbox/templates/vpn/ipsecprofile.html:77 +#: netbox/vpn/forms/model_forms.py:316 netbox/vpn/forms/model_forms.py:352 +#: netbox/vpn/tables/crypto.py:68 netbox/vpn/tables/crypto.py:134 msgid "Proposals" msgstr "Propuestas" -#: templates/vpn/ikeproposal.html:10 +#: netbox/templates/vpn/ikeproposal.html:10 msgid "IKE Proposal" msgstr "Propuesta IKE" -#: templates/vpn/ikeproposal.html:21 vpn/forms/bulk_edit.py:97 -#: vpn/forms/bulk_import.py:145 vpn/forms/filtersets.py:101 +#: netbox/templates/vpn/ikeproposal.html:21 netbox/vpn/forms/bulk_edit.py:97 +#: netbox/vpn/forms/bulk_import.py:145 netbox/vpn/forms/filtersets.py:101 msgid "Authentication method" msgstr "Método de autenticación" -#: templates/vpn/ikeproposal.html:25 templates/vpn/ipsecproposal.html:21 -#: vpn/forms/bulk_edit.py:102 vpn/forms/bulk_edit.py:172 -#: vpn/forms/bulk_import.py:149 vpn/forms/bulk_import.py:195 -#: vpn/forms/filtersets.py:106 vpn/forms/filtersets.py:154 +#: netbox/templates/vpn/ikeproposal.html:25 +#: netbox/templates/vpn/ipsecproposal.html:21 +#: netbox/vpn/forms/bulk_edit.py:102 netbox/vpn/forms/bulk_edit.py:172 +#: netbox/vpn/forms/bulk_import.py:149 netbox/vpn/forms/bulk_import.py:195 +#: netbox/vpn/forms/filtersets.py:106 netbox/vpn/forms/filtersets.py:154 msgid "Encryption algorithm" msgstr "Algoritmo de cifrado" -#: templates/vpn/ikeproposal.html:29 templates/vpn/ipsecproposal.html:25 -#: vpn/forms/bulk_edit.py:107 vpn/forms/bulk_edit.py:177 -#: vpn/forms/bulk_import.py:153 vpn/forms/bulk_import.py:200 -#: vpn/forms/filtersets.py:111 vpn/forms/filtersets.py:159 +#: netbox/templates/vpn/ikeproposal.html:29 +#: netbox/templates/vpn/ipsecproposal.html:25 +#: netbox/vpn/forms/bulk_edit.py:107 netbox/vpn/forms/bulk_edit.py:177 +#: netbox/vpn/forms/bulk_import.py:153 netbox/vpn/forms/bulk_import.py:200 +#: netbox/vpn/forms/filtersets.py:111 netbox/vpn/forms/filtersets.py:159 msgid "Authentication algorithm" msgstr "Algoritmo de autenticación" -#: templates/vpn/ikeproposal.html:33 +#: netbox/templates/vpn/ikeproposal.html:33 msgid "DH group" msgstr "Grupo DH" -#: templates/vpn/ikeproposal.html:37 templates/vpn/ipsecproposal.html:29 -#: vpn/forms/bulk_edit.py:182 vpn/models/crypto.py:146 +#: netbox/templates/vpn/ikeproposal.html:37 +#: netbox/templates/vpn/ipsecproposal.html:29 +#: netbox/vpn/forms/bulk_edit.py:182 netbox/vpn/models/crypto.py:146 msgid "SA lifetime (seconds)" msgstr "Una vida útil (segundos)" -#: templates/vpn/ipsecpolicy.html:10 templates/vpn/ipsecprofile.html:66 -#: vpn/tables/crypto.py:170 +#: netbox/templates/vpn/ipsecpolicy.html:10 +#: netbox/templates/vpn/ipsecprofile.html:66 netbox/vpn/tables/crypto.py:170 msgid "IPSec Policy" msgstr "Política IPSec" -#: templates/vpn/ipsecpolicy.html:21 vpn/forms/bulk_edit.py:210 -#: vpn/models/crypto.py:193 +#: netbox/templates/vpn/ipsecpolicy.html:21 netbox/vpn/forms/bulk_edit.py:210 +#: netbox/vpn/models/crypto.py:193 msgid "PFS group" msgstr "Grupo PFS" -#: templates/vpn/ipsecprofile.html:10 vpn/forms/model_forms.py:54 +#: netbox/templates/vpn/ipsecprofile.html:10 +#: netbox/vpn/forms/model_forms.py:54 msgid "IPSec Profile" msgstr "Perfil IPSec" -#: templates/vpn/ipsecprofile.html:89 vpn/tables/crypto.py:137 +#: netbox/templates/vpn/ipsecprofile.html:89 netbox/vpn/tables/crypto.py:137 msgid "PFS Group" msgstr "Grupo PFS" -#: templates/vpn/ipsecproposal.html:10 +#: netbox/templates/vpn/ipsecproposal.html:10 msgid "IPSec Proposal" msgstr "Propuesta de IPSec" -#: templates/vpn/ipsecproposal.html:33 vpn/forms/bulk_edit.py:186 -#: vpn/models/crypto.py:152 +#: netbox/templates/vpn/ipsecproposal.html:33 +#: netbox/vpn/forms/bulk_edit.py:186 netbox/vpn/models/crypto.py:152 msgid "SA lifetime (KB)" msgstr "Una vida útil (KB)" -#: templates/vpn/l2vpn.html:11 templates/vpn/l2vpntermination.html:9 +#: netbox/templates/vpn/l2vpn.html:11 +#: netbox/templates/vpn/l2vpntermination.html:9 msgid "L2VPN Attributes" msgstr "Atributos de L2VPN" -#: templates/vpn/l2vpn.html:60 templates/vpn/tunnel.html:76 +#: netbox/templates/vpn/l2vpn.html:60 netbox/templates/vpn/tunnel.html:76 msgid "Add a Termination" msgstr "Agregar una terminación" -#: templates/vpn/tunnel.html:9 +#: netbox/templates/vpn/tunnel.html:9 msgid "Add Termination" msgstr "Agregar terminación" -#: templates/vpn/tunnel.html:37 vpn/forms/bulk_edit.py:49 -#: vpn/forms/bulk_import.py:48 vpn/forms/filtersets.py:57 +#: netbox/templates/vpn/tunnel.html:37 netbox/vpn/forms/bulk_edit.py:49 +#: netbox/vpn/forms/bulk_import.py:48 netbox/vpn/forms/filtersets.py:57 msgid "Encapsulation" msgstr "Encapsulación" -#: templates/vpn/tunnel.html:41 vpn/forms/bulk_edit.py:55 -#: vpn/forms/bulk_import.py:53 vpn/forms/filtersets.py:64 -#: vpn/models/crypto.py:250 vpn/tables/tunnels.py:51 +#: netbox/templates/vpn/tunnel.html:41 netbox/vpn/forms/bulk_edit.py:55 +#: netbox/vpn/forms/bulk_import.py:53 netbox/vpn/forms/filtersets.py:64 +#: netbox/vpn/models/crypto.py:250 netbox/vpn/tables/tunnels.py:51 msgid "IPSec profile" msgstr "Perfil IPSec" -#: templates/vpn/tunnel.html:45 vpn/forms/bulk_edit.py:69 -#: vpn/forms/filtersets.py:68 +#: netbox/templates/vpn/tunnel.html:45 netbox/vpn/forms/bulk_edit.py:69 +#: netbox/vpn/forms/filtersets.py:68 msgid "Tunnel ID" msgstr "ID de túnel" -#: templates/vpn/tunnelgroup.html:14 +#: netbox/templates/vpn/tunnelgroup.html:14 msgid "Add Tunnel" msgstr "Añadir túnel" -#: templates/vpn/tunnelgroup.html:23 vpn/forms/model_forms.py:36 -#: vpn/forms/model_forms.py:49 +#: netbox/templates/vpn/tunnelgroup.html:23 netbox/vpn/forms/model_forms.py:36 +#: netbox/vpn/forms/model_forms.py:49 msgid "Tunnel Group" msgstr "Grupo Tunnel" -#: templates/vpn/tunneltermination.html:10 +#: netbox/templates/vpn/tunneltermination.html:10 msgid "Tunnel Termination" msgstr "Terminación del túnel" -#: templates/vpn/tunneltermination.html:35 vpn/forms/bulk_import.py:107 -#: vpn/forms/model_forms.py:102 vpn/forms/model_forms.py:138 -#: vpn/forms/model_forms.py:247 vpn/tables/tunnels.py:101 +#: netbox/templates/vpn/tunneltermination.html:35 +#: netbox/vpn/forms/bulk_import.py:107 netbox/vpn/forms/model_forms.py:102 +#: netbox/vpn/forms/model_forms.py:138 netbox/vpn/forms/model_forms.py:247 +#: netbox/vpn/tables/tunnels.py:101 msgid "Outside IP" msgstr "IP externa" -#: templates/vpn/tunneltermination.html:51 +#: netbox/templates/vpn/tunneltermination.html:51 msgid "Peer Terminations" msgstr "Terminaciones de pares" -#: templates/wireless/inc/authentication_attrs.html:12 +#: netbox/templates/wireless/inc/authentication_attrs.html:12 msgid "Cipher" msgstr "Cifrar" -#: templates/wireless/inc/authentication_attrs.html:16 +#: netbox/templates/wireless/inc/authentication_attrs.html:16 msgid "PSK" msgstr "PSK" -#: templates/wireless/inc/wirelesslink_interface.html:35 -#: templates/wireless/inc/wirelesslink_interface.html:45 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:35 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:45 msgctxt "Abbreviation for megahertz" msgid "MHz" msgstr "megahercio" -#: templates/wireless/wirelesslan.html:57 +#: netbox/templates/wireless/wirelesslan.html:57 msgid "Attached Interfaces" msgstr "Interfaces conectadas" -#: templates/wireless/wirelesslangroup.html:17 +#: netbox/templates/wireless/wirelesslangroup.html:17 msgid "Add Wireless LAN" msgstr "Agregar LAN inalámbrica" -#: templates/wireless/wirelesslangroup.html:26 -#: wireless/forms/model_forms.py:28 +#: netbox/templates/wireless/wirelesslangroup.html:26 +#: netbox/wireless/forms/model_forms.py:28 msgid "Wireless LAN Group" msgstr "Grupo de LAN inalámbrica" -#: templates/wireless/wirelesslangroup.html:59 +#: netbox/templates/wireless/wirelesslangroup.html:59 msgid "Add Wireless LAN Group" msgstr "Agregar grupo de LAN inalámbrica" -#: templates/wireless/wirelesslink.html:14 +#: netbox/templates/wireless/wirelesslink.html:14 msgid "Link Properties" msgstr "Propiedades del enlace" -#: templates/wireless/wirelesslink.html:38 wireless/forms/bulk_edit.py:129 -#: wireless/forms/filtersets.py:102 wireless/forms/model_forms.py:165 +#: 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" -#: tenancy/filtersets.py:28 +#: netbox/tenancy/filtersets.py:28 msgid "Parent contact group (ID)" msgstr "Grupo de contacto de padres (ID)" -#: tenancy/filtersets.py:34 +#: netbox/tenancy/filtersets.py:34 msgid "Parent contact group (slug)" msgstr "Grupo de contacto para padres (slug)" -#: tenancy/filtersets.py:40 tenancy/filtersets.py:67 tenancy/filtersets.py:110 +#: netbox/tenancy/filtersets.py:40 netbox/tenancy/filtersets.py:67 +#: netbox/tenancy/filtersets.py:110 msgid "Contact group (ID)" msgstr "Grupo de contactos (ID)" -#: tenancy/filtersets.py:47 tenancy/filtersets.py:74 tenancy/filtersets.py:117 +#: netbox/tenancy/filtersets.py:47 netbox/tenancy/filtersets.py:74 +#: netbox/tenancy/filtersets.py:117 msgid "Contact group (slug)" msgstr "Grupo de contacto (slug)" -#: tenancy/filtersets.py:104 +#: netbox/tenancy/filtersets.py:104 msgid "Contact (ID)" msgstr "Contacto (ID)" -#: tenancy/filtersets.py:121 +#: netbox/tenancy/filtersets.py:121 msgid "Contact role (ID)" msgstr "Rol de contacto (ID)" -#: tenancy/filtersets.py:127 +#: netbox/tenancy/filtersets.py:127 msgid "Contact role (slug)" msgstr "Rol de contacto (babosa)" -#: tenancy/filtersets.py:158 +#: netbox/tenancy/filtersets.py:158 msgid "Contact group" msgstr "Grupo de contactos" -#: tenancy/filtersets.py:169 +#: netbox/tenancy/filtersets.py:169 msgid "Parent tenant group (ID)" msgstr "Grupo de padres e inquilinos (ID)" -#: tenancy/filtersets.py:175 +#: netbox/tenancy/filtersets.py:175 msgid "Parent tenant group (slug)" msgstr "Grupo de padres e inquilinos (slug)" -#: tenancy/filtersets.py:181 tenancy/filtersets.py:201 +#: netbox/tenancy/filtersets.py:181 netbox/tenancy/filtersets.py:201 msgid "Tenant group (ID)" msgstr "Grupo de inquilinos (ID)" -#: tenancy/filtersets.py:234 +#: netbox/tenancy/filtersets.py:234 msgid "Tenant Group (ID)" msgstr "Grupo de inquilinos (ID)" -#: tenancy/filtersets.py:241 +#: netbox/tenancy/filtersets.py:241 msgid "Tenant Group (slug)" msgstr "Grupo de inquilinos (babosa)" -#: tenancy/forms/bulk_edit.py:66 +#: netbox/tenancy/forms/bulk_edit.py:66 msgid "Desciption" msgstr "Descripción" -#: tenancy/forms/bulk_import.py:101 +#: netbox/tenancy/forms/bulk_import.py:101 msgid "Assigned contact" msgstr "Contacto asignado" -#: tenancy/models/contacts.py:32 +#: netbox/tenancy/models/contacts.py:32 msgid "contact group" msgstr "grupo de contacto" -#: tenancy/models/contacts.py:33 +#: netbox/tenancy/models/contacts.py:33 msgid "contact groups" msgstr "grupos de contacto" -#: tenancy/models/contacts.py:48 +#: netbox/tenancy/models/contacts.py:48 msgid "contact role" msgstr "rol de contacto" -#: tenancy/models/contacts.py:49 +#: netbox/tenancy/models/contacts.py:49 msgid "contact roles" msgstr "roles de contacto" -#: tenancy/models/contacts.py:68 +#: netbox/tenancy/models/contacts.py:68 msgid "title" msgstr "título" -#: tenancy/models/contacts.py:73 +#: netbox/tenancy/models/contacts.py:73 msgid "phone" msgstr "llamar por teléfono" -#: tenancy/models/contacts.py:78 +#: netbox/tenancy/models/contacts.py:78 msgid "email" msgstr "correo electrónico" -#: tenancy/models/contacts.py:87 +#: netbox/tenancy/models/contacts.py:87 msgid "link" msgstr "eslabón" -#: tenancy/models/contacts.py:103 +#: netbox/tenancy/models/contacts.py:103 msgid "contact" msgstr "contacto" -#: tenancy/models/contacts.py:104 +#: netbox/tenancy/models/contacts.py:104 msgid "contacts" msgstr "contactos" -#: tenancy/models/contacts.py:153 +#: netbox/tenancy/models/contacts.py:153 msgid "contact assignment" msgstr "asignación de contactos" -#: tenancy/models/contacts.py:154 +#: netbox/tenancy/models/contacts.py:154 msgid "contact assignments" msgstr "asignaciones de contactos" -#: tenancy/models/contacts.py:170 +#: netbox/tenancy/models/contacts.py:170 #, python-brace-format msgid "Contacts cannot be assigned to this object type ({type})." msgstr "No se pueden asignar contactos a este tipo de objeto ({type})." -#: tenancy/models/tenants.py:32 +#: netbox/tenancy/models/tenants.py:32 msgid "tenant group" msgstr "grupo de inquilinos" -#: tenancy/models/tenants.py:33 +#: netbox/tenancy/models/tenants.py:33 msgid "tenant groups" msgstr "grupos de inquilinos" -#: tenancy/models/tenants.py:70 +#: netbox/tenancy/models/tenants.py:70 msgid "Tenant name must be unique per group." msgstr "El nombre del inquilino debe ser único por grupo." -#: tenancy/models/tenants.py:80 +#: netbox/tenancy/models/tenants.py:80 msgid "Tenant slug must be unique per group." msgstr "La babosa del inquilino debe ser única por grupo." -#: tenancy/models/tenants.py:88 +#: netbox/tenancy/models/tenants.py:88 msgid "tenant" msgstr "inquilino" -#: tenancy/models/tenants.py:89 +#: netbox/tenancy/models/tenants.py:89 msgid "tenants" msgstr "inquilinos" -#: tenancy/tables/contacts.py:112 +#: netbox/tenancy/tables/contacts.py:112 msgid "Contact Title" msgstr "Título del contacto" -#: tenancy/tables/contacts.py:116 +#: netbox/tenancy/tables/contacts.py:116 msgid "Contact Phone" msgstr "Teléfono de contacto" -#: tenancy/tables/contacts.py:121 +#: netbox/tenancy/tables/contacts.py:121 msgid "Contact Email" msgstr "Correo electrónico de contacto" -#: tenancy/tables/contacts.py:125 +#: netbox/tenancy/tables/contacts.py:125 msgid "Contact Address" msgstr "Dirección de contacto" -#: tenancy/tables/contacts.py:129 +#: netbox/tenancy/tables/contacts.py:129 msgid "Contact Link" msgstr "Enlace de contacto" -#: tenancy/tables/contacts.py:133 +#: netbox/tenancy/tables/contacts.py:133 msgid "Contact Description" msgstr "Descripción del contacto" -#: users/filtersets.py:33 users/filtersets.py:73 +#: netbox/users/filtersets.py:33 netbox/users/filtersets.py:73 msgid "Permission (ID)" msgstr "Permiso (ID)" -#: users/filtersets.py:38 users/filtersets.py:78 +#: netbox/users/filtersets.py:38 netbox/users/filtersets.py:78 msgid "Notification group (ID)" msgstr "Grupo de notificaciones (ID)" -#: users/forms/bulk_edit.py:26 +#: netbox/users/forms/bulk_edit.py:26 msgid "First name" msgstr "Nombre de pila" -#: users/forms/bulk_edit.py:31 +#: netbox/users/forms/bulk_edit.py:31 msgid "Last name" msgstr "Apellido" -#: users/forms/bulk_edit.py:43 +#: netbox/users/forms/bulk_edit.py:43 msgid "Staff status" msgstr "Situación del personal" -#: users/forms/bulk_edit.py:48 +#: netbox/users/forms/bulk_edit.py:48 msgid "Superuser status" msgstr "Estado de superusuario" -#: users/forms/bulk_import.py:41 +#: netbox/users/forms/bulk_import.py:41 msgid "If no key is provided, one will be generated automatically." msgstr "Si no se proporciona ninguna clave, se generará una automáticamente." -#: users/forms/filtersets.py:51 users/tables.py:42 +#: netbox/users/forms/filtersets.py:51 netbox/users/tables.py:42 msgid "Is Staff" msgstr "Es personal" -#: users/forms/filtersets.py:58 users/tables.py:45 +#: netbox/users/forms/filtersets.py:58 netbox/users/tables.py:45 msgid "Is Superuser" msgstr "Es superusuario" -#: users/forms/filtersets.py:91 users/tables.py:86 +#: netbox/users/forms/filtersets.py:91 netbox/users/tables.py:86 msgid "Can View" msgstr "Puede ver" -#: users/forms/filtersets.py:98 users/tables.py:89 +#: netbox/users/forms/filtersets.py:98 netbox/users/tables.py:89 msgid "Can Add" msgstr "Puede agregar" -#: users/forms/filtersets.py:105 users/tables.py:92 +#: netbox/users/forms/filtersets.py:105 netbox/users/tables.py:92 msgid "Can Change" msgstr "Puede cambiar" -#: users/forms/filtersets.py:112 users/tables.py:95 +#: netbox/users/forms/filtersets.py:112 netbox/users/tables.py:95 msgid "Can Delete" msgstr "Puede eliminar" -#: users/forms/model_forms.py:62 +#: netbox/users/forms/model_forms.py:62 msgid "User Interface" msgstr "Interfaz de usuario" -#: users/forms/model_forms.py:114 +#: netbox/users/forms/model_forms.py:114 msgid "" "Keys must be at least 40 characters in length. Be sure to record " "your key prior to submitting this form, as it may no longer be " @@ -14022,7 +14843,7 @@ msgstr "" "su clave antes de enviar este formulario, ya que es posible que ya " "no se pueda acceder a él una vez que se haya creado el token." -#: users/forms/model_forms.py:126 +#: netbox/users/forms/model_forms.py:126 msgid "" "Allowed IPv4/IPv6 networks from where the token can be used. Leave blank for" " no restrictions. Example: " @@ -14032,33 +14853,33 @@ msgstr "" "blanco para que no haya restricciones. Ejemplo: 10.1.1.0/24, " "192.168.10.16/32, 2001:db 8:1: :/64" -#: users/forms/model_forms.py:175 +#: netbox/users/forms/model_forms.py:175 msgid "Confirm password" msgstr "Confirme la contraseña" -#: users/forms/model_forms.py:178 +#: netbox/users/forms/model_forms.py:178 msgid "Enter the same password as before, for verification." msgstr "Introduce la misma contraseña que antes para verificarla." -#: users/forms/model_forms.py:227 +#: netbox/users/forms/model_forms.py:227 msgid "Passwords do not match! Please check your input and try again." msgstr "" "¡Las contraseñas no coinciden! Compruebe los datos introducidos e inténtelo " "de nuevo." -#: users/forms/model_forms.py:294 +#: netbox/users/forms/model_forms.py:294 msgid "Additional actions" msgstr "Acciones adicionales" -#: users/forms/model_forms.py:297 +#: netbox/users/forms/model_forms.py:297 msgid "Actions granted in addition to those listed above" msgstr "Acciones concedidas además de las enumeradas anteriormente" -#: users/forms/model_forms.py:313 +#: netbox/users/forms/model_forms.py:313 msgid "Objects" msgstr "Objetos" -#: users/forms/model_forms.py:325 +#: netbox/users/forms/model_forms.py:325 msgid "" "JSON expression of a queryset filter that will return only permitted " "objects. Leave null to match all objects of this type. A list of multiple " @@ -14069,80 +14890,80 @@ msgstr "" "este tipo. Una lista de varios objetos dará como resultado una operación OR " "lógica." -#: users/forms/model_forms.py:364 +#: netbox/users/forms/model_forms.py:364 msgid "At least one action must be selected." msgstr "Debe seleccionarse al menos una acción." -#: users/forms/model_forms.py:382 +#: netbox/users/forms/model_forms.py:382 #, python-brace-format msgid "Invalid filter for {model}: {error}" msgstr "Filtro no válido para {model}: {error}" -#: users/models/permissions.py:39 +#: netbox/users/models/permissions.py:39 msgid "The list of actions granted by this permission" msgstr "La lista de acciones concedidas por este permiso" -#: users/models/permissions.py:44 +#: netbox/users/models/permissions.py:44 msgid "constraints" msgstr "restricciones" -#: users/models/permissions.py:45 +#: netbox/users/models/permissions.py:45 msgid "" "Queryset filter matching the applicable objects of the selected type(s)" msgstr "" "Filtro Queryset que coincide con los objetos aplicables de los tipos " "seleccionados" -#: users/models/permissions.py:52 +#: netbox/users/models/permissions.py:52 msgid "permission" msgstr "permiso" -#: users/models/permissions.py:53 users/models/users.py:47 +#: netbox/users/models/permissions.py:53 netbox/users/models/users.py:47 msgid "permissions" msgstr "permisos" -#: users/models/preferences.py:29 users/models/preferences.py:30 +#: netbox/users/models/preferences.py:29 netbox/users/models/preferences.py:30 msgid "user preferences" msgstr "preferencias de usuario" -#: users/models/preferences.py:97 +#: netbox/users/models/preferences.py:97 #, python-brace-format msgid "Key '{path}' is a leaf node; cannot assign new keys" msgstr "Clave '{path}'es un nodo de hoja; no se pueden asignar claves nuevas" -#: users/models/preferences.py:109 +#: netbox/users/models/preferences.py:109 #, python-brace-format msgid "Key '{path}' is a dictionary; cannot assign a non-dictionary value" msgstr "" "Clave '{path}'es un diccionario; no puede asignar un valor que no sea de " "diccionario" -#: users/models/tokens.py:36 +#: netbox/users/models/tokens.py:36 msgid "expires" msgstr "caduca" -#: users/models/tokens.py:41 +#: netbox/users/models/tokens.py:41 msgid "last used" msgstr "utilizado por última vez" -#: users/models/tokens.py:46 +#: netbox/users/models/tokens.py:46 msgid "key" msgstr "clave" -#: users/models/tokens.py:52 +#: netbox/users/models/tokens.py:52 msgid "write enabled" msgstr "escritura habilitada" -#: users/models/tokens.py:54 +#: netbox/users/models/tokens.py:54 msgid "Permit create/update/delete operations using this key" msgstr "" "Permitir operaciones de creación/actualización/eliminación con esta clave" -#: users/models/tokens.py:65 +#: netbox/users/models/tokens.py:65 msgid "allowed IPs" msgstr "IP permitidas" -#: users/models/tokens.py:67 +#: netbox/users/models/tokens.py:67 msgid "" "Allowed IPv4/IPv6 networks from where the token can be used. Leave blank for" " no restrictions. Ex: \"10.1.1.0/24, 192.168.10.16/32, 2001:DB8:1::/64\"" @@ -14151,43 +14972,43 @@ msgstr "" "blanco para que no haya restricciones. Por ejemplo: «10.1.1.0/24, " "192.168.10.16/32, 2001:DB 8:1: :/64\"" -#: users/models/tokens.py:75 +#: netbox/users/models/tokens.py:75 msgid "token" msgstr "simbólico" -#: users/models/tokens.py:76 +#: netbox/users/models/tokens.py:76 msgid "tokens" msgstr "fichas" -#: users/models/users.py:57 vpn/models/crypto.py:42 +#: netbox/users/models/users.py:57 netbox/vpn/models/crypto.py:42 msgid "group" msgstr "grupo" -#: users/models/users.py:92 +#: netbox/users/models/users.py:92 msgid "user" msgstr "usuario" -#: users/models/users.py:104 +#: netbox/users/models/users.py:104 msgid "A user with this username already exists." msgstr "Ya existe un usuario con este nombre de usuario." -#: users/tables.py:98 +#: netbox/users/tables.py:98 msgid "Custom Actions" msgstr "Acciones personalizadas" -#: utilities/api.py:153 +#: netbox/utilities/api.py:153 #, python-brace-format msgid "Related object not found using the provided attributes: {params}" msgstr "" "No se encontró el objeto relacionado con los atributos proporcionados: " "{params}" -#: utilities/api.py:156 +#: netbox/utilities/api.py:156 #, python-brace-format msgid "Multiple objects match the provided attributes: {params}" msgstr "Varios objetos coinciden con los atributos proporcionados: {params}" -#: utilities/api.py:168 +#: netbox/utilities/api.py:168 #, python-brace-format msgid "" "Related objects must be referenced by numeric ID or by dictionary of " @@ -14197,43 +15018,43 @@ msgstr "" "identificador numérico o un diccionario de atributos. Recibió un valor no " "reconocido: {value}" -#: utilities/api.py:177 +#: netbox/utilities/api.py:177 #, python-brace-format msgid "Related object not found using the provided numeric ID: {id}" msgstr "" "No se encontró el objeto relacionado con el identificador numérico " "proporcionado: {id}" -#: utilities/choices.py:19 +#: netbox/utilities/choices.py:19 #, python-brace-format msgid "{name} has a key defined but CHOICES is not a list" msgstr "{name} tiene una clave definida, pero CHOICES no es una lista" -#: utilities/conversion.py:19 +#: netbox/utilities/conversion.py:19 msgid "Weight must be a positive number" msgstr "El peso debe ser un número positivo" -#: utilities/conversion.py:21 +#: netbox/utilities/conversion.py:21 #, 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)" -#: utilities/conversion.py:32 utilities/conversion.py:62 +#: netbox/utilities/conversion.py:32 netbox/utilities/conversion.py:62 #, python-brace-format msgid "Unknown unit {unit}. Must be one of the following: {valid_units}" msgstr "" "Unidad desconocida {unit}. Debe ser uno de los siguientes: {valid_units}" -#: utilities/conversion.py:45 +#: netbox/utilities/conversion.py:45 msgid "Length must be a positive number" msgstr "La longitud debe ser un número positivo" -#: utilities/conversion.py:47 +#: netbox/utilities/conversion.py:47 #, 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)" -#: utilities/error_handlers.py:31 +#: netbox/utilities/error_handlers.py:31 #, python-brace-format msgid "" "Unable to delete {objects}. {count} dependent objects were " @@ -14242,15 +15063,15 @@ msgstr "" "No se puede eliminar {objects}. {count} se encontraron " "objetos dependientes: " -#: utilities/error_handlers.py:33 +#: netbox/utilities/error_handlers.py:33 msgid "More than 50" msgstr "Más de 50" -#: utilities/fields.py:30 +#: netbox/utilities/fields.py:30 msgid "RGB color in hexadecimal. Example: " msgstr "Color RGB en hexadecimal. Ejemplo: " -#: utilities/fields.py:159 +#: netbox/utilities/fields.py:159 #, python-format msgid "" "%s(%r) is invalid. to_model parameter to CounterCacheField must be a string " @@ -14259,7 +15080,7 @@ msgstr "" "%s(%r) no es válido. El parámetro to_model de CounterCacheField debe ser una" " cadena con el formato 'app.model'" -#: utilities/fields.py:169 +#: netbox/utilities/fields.py:169 #, python-format msgid "" "%s(%r) is invalid. to_field parameter to CounterCacheField must be a string " @@ -14268,39 +15089,39 @@ msgstr "" "%s(%r) no es válido. El parámetro to_field de CounterCacheField debe ser una" " cadena con el formato 'campo'" -#: utilities/forms/bulk_import.py:23 +#: netbox/utilities/forms/bulk_import.py:23 msgid "Enter object data in CSV, JSON or YAML format." msgstr "Introduzca los datos del objeto en formato CSV, JSON o YAML." -#: utilities/forms/bulk_import.py:36 +#: netbox/utilities/forms/bulk_import.py:36 msgid "CSV delimiter" msgstr "Delimitador CSV" -#: utilities/forms/bulk_import.py:37 +#: netbox/utilities/forms/bulk_import.py:37 msgid "The character which delimits CSV fields. Applies only to CSV format." msgstr "" "El carácter que delimita los campos CSV. Se aplica solo al formato CSV." -#: utilities/forms/bulk_import.py:51 +#: netbox/utilities/forms/bulk_import.py:51 msgid "Form data must be empty when uploading/selecting a file." msgstr "" "Los datos del formulario deben estar vacíos al cargar o seleccionar un " "archivo." -#: utilities/forms/bulk_import.py:80 +#: netbox/utilities/forms/bulk_import.py:80 #, python-brace-format msgid "Unknown data format: {format}" msgstr "Formato de datos desconocido: {format}" -#: utilities/forms/bulk_import.py:100 +#: netbox/utilities/forms/bulk_import.py:100 msgid "Unable to detect data format. Please specify." msgstr "No se pudo detectar el formato de los datos. Especifique." -#: utilities/forms/bulk_import.py:123 +#: netbox/utilities/forms/bulk_import.py:123 msgid "Invalid CSV delimiter" msgstr "Delimitador CSV no válido" -#: utilities/forms/bulk_import.py:167 +#: netbox/utilities/forms/bulk_import.py:167 msgid "" "Invalid YAML data. Data must be in the form of multiple documents, or a " "single document comprising a list of dictionaries." @@ -14308,7 +15129,7 @@ msgstr "" "Datos YAML no válidos. Los datos deben estar en forma de varios documentos o" " de un solo documento que contenga una lista de diccionarios." -#: utilities/forms/fields/array.py:20 +#: netbox/utilities/forms/fields/array.py:20 #, python-brace-format msgid "" "Invalid list ({value}). Must be numeric and ranges must be in ascending " @@ -14317,7 +15138,7 @@ msgstr "" "Lista no válida ({value}). Debe ser numérico y los rangos deben estar en " "orden ascendente." -#: utilities/forms/fields/array.py:40 +#: netbox/utilities/forms/fields/array.py:40 msgid "" "Specify one or more numeric ranges separated by commas. Example: " "1-5,20-30" @@ -14325,7 +15146,7 @@ msgstr "" "Especifique uno o más rangos numéricos separados por comas. Ejemplo: " "1-5, 20-30" -#: utilities/forms/fields/array.py:47 +#: netbox/utilities/forms/fields/array.py:47 #, python-brace-format msgid "" "Invalid ranges ({value}). Must be a range of integers in ascending order." @@ -14333,17 +15154,18 @@ msgstr "" "Intervalos no válidos ({value}). Debe ser un rango de números enteros en " "orden ascendente." -#: utilities/forms/fields/csv.py:44 +#: netbox/utilities/forms/fields/csv.py:44 #, python-brace-format msgid "Invalid value for a multiple choice field: {value}" msgstr "Valor no válido para un campo de opción múltiple: {value}" -#: utilities/forms/fields/csv.py:57 utilities/forms/fields/csv.py:78 +#: netbox/utilities/forms/fields/csv.py:57 +#: netbox/utilities/forms/fields/csv.py:78 #, python-format msgid "Object not found: %(value)s" msgstr "Objeto no encontrado: %(value)s" -#: utilities/forms/fields/csv.py:65 +#: netbox/utilities/forms/fields/csv.py:65 #, python-brace-format msgid "" "\"{value}\" is not a unique value for this field; multiple objects were " @@ -14352,20 +15174,20 @@ msgstr "" "«{value}\"no es un valor único para este campo; se han encontrado varios " "objetos" -#: utilities/forms/fields/csv.py:69 +#: netbox/utilities/forms/fields/csv.py:69 #, python-brace-format msgid "\"{field_name}\" is an invalid accessor field name." msgstr "«{field_name}\"es un nombre de campo de acceso no válido." -#: utilities/forms/fields/csv.py:101 +#: netbox/utilities/forms/fields/csv.py:101 msgid "Object type must be specified as \".\"" msgstr "El tipo de objeto debe especificarse como».»" -#: utilities/forms/fields/csv.py:105 +#: netbox/utilities/forms/fields/csv.py:105 msgid "Invalid object type" msgstr "Tipo de objeto no válido" -#: utilities/forms/fields/expandable.py:25 +#: netbox/utilities/forms/fields/expandable.py:25 msgid "" "Alphanumeric ranges are supported for bulk creation. Mixed cases and types " "within a single range are not supported (example: " @@ -14375,7 +15197,7 @@ msgstr "" "admiten casos y tipos mixtos dentro de un único rango (por ejemplo: " "[Edad, sexo] -0/0/ [0-9])." -#: utilities/forms/fields/expandable.py:46 +#: netbox/utilities/forms/fields/expandable.py:46 msgid "" "Specify a numeric range to create multiple IPs.
    Example: " "192.0.2.[1,5,100-254]/24" @@ -14383,7 +15205,7 @@ msgstr "" "Especifique un rango numérico para crear varias direcciones IP.
    Ejemplo: 192.0.2. [1,5,100-254] /24" -#: utilities/forms/fields/fields.py:31 +#: netbox/utilities/forms/fields/fields.py:31 #, python-brace-format msgid "" " Markdown se admite la sintaxis" -#: utilities/forms/fields/fields.py:48 +#: netbox/utilities/forms/fields/fields.py:48 msgid "URL-friendly unique shorthand" msgstr "Abreviatura única compatible con URL" -#: utilities/forms/fields/fields.py:101 +#: netbox/utilities/forms/fields/fields.py:101 msgid "Enter context data in JSON format." msgstr "" "Introduzca los datos de contexto en JSON " "formato." -#: utilities/forms/fields/fields.py:124 +#: netbox/utilities/forms/fields/fields.py:124 msgid "MAC address must be in EUI-48 format" msgstr "La dirección MAC debe estar en formato EUI-48" -#: utilities/forms/forms.py:52 +#: netbox/utilities/forms/forms.py:52 msgid "Use regular expressions" msgstr "Usa expresiones regulares" -#: utilities/forms/forms.py:75 +#: netbox/utilities/forms/forms.py:75 msgid "" "Numeric ID of an existing object to update (if not creating a new object)" msgstr "" "ID numérico de un objeto existente que se va a actualizar (si no se está " "creando un objeto nuevo)" -#: utilities/forms/forms.py:92 +#: netbox/utilities/forms/forms.py:92 #, python-brace-format msgid "Unrecognized header: {name}" msgstr "Encabezado no reconocido: {name}" -#: utilities/forms/forms.py:118 +#: netbox/utilities/forms/forms.py:118 msgid "Available Columns" msgstr "Columnas disponibles" -#: utilities/forms/forms.py:126 +#: netbox/utilities/forms/forms.py:126 msgid "Selected Columns" msgstr "Columnas seleccionadas" -#: utilities/forms/mixins.py:44 +#: netbox/utilities/forms/mixins.py:44 msgid "" "This object has been modified since the form was rendered. Please consult " "the object's change log for details." @@ -14438,13 +15260,13 @@ msgstr "" "Este objeto se ha modificado desde que se renderizó el formulario. Consulte " "el registro de cambios del objeto para obtener más información." -#: utilities/forms/utils.py:42 utilities/forms/utils.py:68 -#: utilities/forms/utils.py:85 utilities/forms/utils.py:87 +#: netbox/utilities/forms/utils.py:42 netbox/utilities/forms/utils.py:68 +#: netbox/utilities/forms/utils.py:85 netbox/utilities/forms/utils.py:87 #, python-brace-format msgid "Range \"{value}\" is invalid." msgstr "Gama»{value}«no es válido." -#: utilities/forms/utils.py:74 +#: netbox/utilities/forms/utils.py:74 #, python-brace-format msgid "" "Invalid range: Ending value ({end}) must be greater than beginning value " @@ -14453,72 +15275,72 @@ msgstr "" "Intervalo no válido: valor final ({end}) debe ser mayor que el valor inicial" " ({begin})." -#: utilities/forms/utils.py:232 +#: netbox/utilities/forms/utils.py:232 #, python-brace-format msgid "Duplicate or conflicting column header for \"{field}\"" msgstr "Cabecera de columna duplicada o conflictiva para»{field}»" -#: utilities/forms/utils.py:238 +#: netbox/utilities/forms/utils.py:238 #, python-brace-format msgid "Duplicate or conflicting column header for \"{header}\"" msgstr "Cabecera de columna duplicada o conflictiva para»{header}»" -#: utilities/forms/utils.py:247 +#: netbox/utilities/forms/utils.py:247 #, python-brace-format msgid "Row {row}: Expected {count_expected} columns but found {count_found}" msgstr "" "Fila {row}: Esperado {count_expected} columnas pero encontradas " "{count_found}" -#: utilities/forms/utils.py:270 +#: netbox/utilities/forms/utils.py:270 #, python-brace-format msgid "Unexpected column header \"{field}\" found." msgstr "Encabezado de columna inesperado»{field}«encontrado." -#: utilities/forms/utils.py:272 +#: netbox/utilities/forms/utils.py:272 #, python-brace-format msgid "Column \"{field}\" is not a related object; cannot use dots" msgstr "Columna»{field}\"no es un objeto relacionado; no puede usar puntos" -#: utilities/forms/utils.py:276 +#: netbox/utilities/forms/utils.py:276 #, python-brace-format msgid "Invalid related object attribute for column \"{field}\": {to_field}" msgstr "" "Atributo de objeto relacionado no válido para la columna»{field}«: " "{to_field}" -#: utilities/forms/utils.py:284 +#: netbox/utilities/forms/utils.py:284 #, python-brace-format msgid "Required column header \"{header}\" not found." msgstr "Encabezado de columna obligatorio»{header}«no se encontró." -#: utilities/forms/widgets/apiselect.py:124 +#: netbox/utilities/forms/widgets/apiselect.py:124 #, python-brace-format msgid "Missing required value for dynamic query param: '{dynamic_params}'" msgstr "" "Falta el valor requerido para el parámetro de consulta dinámica: " "'{dynamic_params}'" -#: utilities/forms/widgets/apiselect.py:141 +#: netbox/utilities/forms/widgets/apiselect.py:141 #, python-brace-format msgid "Missing required value for static query param: '{static_params}'" msgstr "" "Falta el valor requerido para el parámetro de consulta estática: " "'{static_params}'" -#: utilities/password_validation.py:13 +#: netbox/utilities/password_validation.py:13 msgid "Password must have at least one numeral." msgstr "La contraseña debe tener al menos un número." -#: utilities/password_validation.py:18 +#: netbox/utilities/password_validation.py:18 msgid "Password must have at least one uppercase letter." msgstr "La contraseña debe tener al menos una letra mayúscula." -#: utilities/password_validation.py:23 +#: netbox/utilities/password_validation.py:23 msgid "Password must have at least one lowercase letter." msgstr "La contraseña debe tener al menos una letra minúscula." -#: utilities/password_validation.py:27 +#: netbox/utilities/password_validation.py:27 msgid "" "Your password must contain at least one numeral, one uppercase letter and " "one lowercase letter." @@ -14526,7 +15348,7 @@ msgstr "" "La contraseña debe contener al menos un número, una letra mayúscula y una " "minúscula." -#: utilities/permissions.py:42 +#: netbox/utilities/permissions.py:42 #, python-brace-format msgid "" "Invalid permission name: {name}. Must be in the format " @@ -14535,126 +15357,126 @@ msgstr "" "Nombre de permiso no válido: {name}. Debe estar en el formato " "._" -#: utilities/permissions.py:60 +#: netbox/utilities/permissions.py:60 #, python-brace-format msgid "Unknown app_label/model_name for {name}" msgstr "App_label/model_name desconocido para {name}" -#: utilities/request.py:76 +#: netbox/utilities/request.py:76 #, python-brace-format msgid "Invalid IP address set for {header}: {ip}" msgstr "Dirección IP no válida establecida para {header}: {ip}" -#: utilities/tables.py:47 +#: netbox/utilities/tables.py:47 #, python-brace-format msgid "A column named {name} is already defined for table {table_name}" msgstr "" "Una columna denominada {name} ya está definido para la tabla {table_name}" -#: utilities/templates/builtins/customfield_value.html:30 +#: netbox/utilities/templates/builtins/customfield_value.html:30 msgid "Not defined" msgstr "No definido" -#: utilities/templates/buttons/bookmark.html:9 +#: netbox/utilities/templates/buttons/bookmark.html:9 msgid "Unbookmark" msgstr "Desmarcar" -#: utilities/templates/buttons/bookmark.html:13 +#: netbox/utilities/templates/buttons/bookmark.html:13 msgid "Bookmark" msgstr "Marcador" -#: utilities/templates/buttons/clone.html:4 +#: netbox/utilities/templates/buttons/clone.html:4 msgid "Clone" msgstr "Clon" -#: utilities/templates/buttons/export.html:7 +#: netbox/utilities/templates/buttons/export.html:7 msgid "Current View" msgstr "Vista actual" -#: utilities/templates/buttons/export.html:8 +#: netbox/utilities/templates/buttons/export.html:8 msgid "All Data" msgstr "Todos los datos" -#: utilities/templates/buttons/export.html:28 +#: netbox/utilities/templates/buttons/export.html:28 msgid "Add export template" msgstr "Añadir plantilla de exportación" -#: utilities/templates/buttons/import.html:4 +#: netbox/utilities/templates/buttons/import.html:4 msgid "Import" msgstr "Importar" -#: utilities/templates/buttons/subscribe.html:10 +#: netbox/utilities/templates/buttons/subscribe.html:10 msgid "Unsubscribe" msgstr "Cancelar suscripción" -#: utilities/templates/buttons/subscribe.html:14 +#: netbox/utilities/templates/buttons/subscribe.html:14 msgid "Subscribe" msgstr "Suscríbase" -#: utilities/templates/form_helpers/render_field.html:41 +#: netbox/utilities/templates/form_helpers/render_field.html:41 msgid "Copy to clipboard" msgstr "Copiar al portapapeles" -#: utilities/templates/form_helpers/render_field.html:57 +#: netbox/utilities/templates/form_helpers/render_field.html:57 msgid "This field is required" msgstr "Este campo es obligatorio" -#: utilities/templates/form_helpers/render_field.html:70 +#: netbox/utilities/templates/form_helpers/render_field.html:70 msgid "Set Null" msgstr "Establecer nulo" -#: utilities/templates/helpers/applied_filters.html:11 +#: netbox/utilities/templates/helpers/applied_filters.html:11 msgid "Clear all" msgstr "Borrar todo" -#: utilities/templates/helpers/table_config_form.html:8 +#: netbox/utilities/templates/helpers/table_config_form.html:8 msgid "Table Configuration" msgstr "Configuración de tablas" -#: utilities/templates/helpers/table_config_form.html:31 +#: netbox/utilities/templates/helpers/table_config_form.html:31 msgid "Move Up" msgstr "Muévete hacia arriba" -#: utilities/templates/helpers/table_config_form.html:34 +#: netbox/utilities/templates/helpers/table_config_form.html:34 msgid "Move Down" msgstr "Muévete hacia abajo" -#: utilities/templates/navigation/menu.html:14 +#: netbox/utilities/templates/navigation/menu.html:14 msgid "Search…" msgstr "Buscar..." -#: utilities/templates/navigation/menu.html:14 +#: netbox/utilities/templates/navigation/menu.html:14 msgid "Search NetBox" msgstr "Buscar en NetBox" -#: utilities/templates/widgets/apiselect.html:7 +#: netbox/utilities/templates/widgets/apiselect.html:7 msgid "Open selector" msgstr "Selector abierto" -#: utilities/templates/widgets/markdown_input.html:6 +#: netbox/utilities/templates/widgets/markdown_input.html:6 msgid "Write" msgstr "Escribe" -#: utilities/testing/views.py:632 +#: netbox/utilities/testing/views.py:632 msgid "The test must define csv_update_data." msgstr "La prueba debe definir csv_update_data." -#: utilities/validators.py:65 +#: netbox/utilities/validators.py:65 #, python-brace-format msgid "{value} is not a valid regular expression." msgstr "{value} no es una expresión regular válida." -#: utilities/views.py:57 +#: netbox/utilities/views.py:57 #, python-brace-format msgid "{self.__class__.__name__} must implement get_required_permission()" msgstr "{self.__class__.__name__} debe implementar get_required_permission ()" -#: utilities/views.py:93 +#: netbox/utilities/views.py:93 #, python-brace-format msgid "{class_name} must implement get_required_permission()" msgstr "{class_name} debe implementar get_required_permission ()" -#: utilities/views.py:117 +#: netbox/utilities/views.py:117 #, python-brace-format msgid "" "{class_name} has no queryset defined. ObjectPermissionRequiredMixin may only" @@ -14664,61 +15486,63 @@ msgstr "" "ObjectPermissionRequiredMixin solo se puede usar en vistas que definan un " "conjunto de consultas base" -#: virtualization/filtersets.py:79 +#: netbox/virtualization/filtersets.py:79 msgid "Parent group (ID)" msgstr "Grupo de padres (ID)" -#: virtualization/filtersets.py:85 +#: netbox/virtualization/filtersets.py:85 msgid "Parent group (slug)" msgstr "Grupo de padres (babosas)" -#: virtualization/filtersets.py:89 virtualization/filtersets.py:141 +#: netbox/virtualization/filtersets.py:89 +#: netbox/virtualization/filtersets.py:141 msgid "Cluster type (ID)" msgstr "Tipo de clúster (ID)" -#: virtualization/filtersets.py:151 virtualization/filtersets.py:271 +#: netbox/virtualization/filtersets.py:151 +#: netbox/virtualization/filtersets.py:271 msgid "Cluster (ID)" msgstr "Clúster (ID)" -#: virtualization/forms/bulk_edit.py:166 -#: virtualization/models/virtualmachines.py:115 +#: netbox/virtualization/forms/bulk_edit.py:166 +#: netbox/virtualization/models/virtualmachines.py:115 msgid "vCPUs" msgstr "CPU virtuales" -#: virtualization/forms/bulk_edit.py:170 +#: netbox/virtualization/forms/bulk_edit.py:170 msgid "Memory (MB)" msgstr "Memoria (MB)" -#: virtualization/forms/bulk_edit.py:174 -msgid "Disk (GB)" -msgstr "Disco (GB)" +#: netbox/virtualization/forms/bulk_edit.py:174 +msgid "Disk (MB)" +msgstr "" -#: virtualization/forms/bulk_edit.py:334 -#: virtualization/forms/filtersets.py:251 -msgid "Size (GB)" -msgstr "Tamaño (GB)" +#: netbox/virtualization/forms/bulk_edit.py:334 +#: netbox/virtualization/forms/filtersets.py:251 +msgid "Size (MB)" +msgstr "" -#: virtualization/forms/bulk_import.py:44 +#: netbox/virtualization/forms/bulk_import.py:44 msgid "Type of cluster" msgstr "Tipo de clúster" -#: virtualization/forms/bulk_import.py:51 +#: netbox/virtualization/forms/bulk_import.py:51 msgid "Assigned cluster group" msgstr "Grupo de clústeres asignado" -#: virtualization/forms/bulk_import.py:96 +#: netbox/virtualization/forms/bulk_import.py:96 msgid "Assigned cluster" msgstr "Clúster asignado" -#: virtualization/forms/bulk_import.py:103 +#: netbox/virtualization/forms/bulk_import.py:103 msgid "Assigned device within cluster" msgstr "Dispositivo asignado dentro del clúster" -#: virtualization/forms/filtersets.py:183 +#: netbox/virtualization/forms/filtersets.py:183 msgid "Serial number" msgstr "Número de serie" -#: virtualization/forms/model_forms.py:153 +#: netbox/virtualization/forms/model_forms.py:153 #, python-brace-format msgid "" "{device} belongs to a different site ({device_site}) than the cluster " @@ -14727,51 +15551,51 @@ msgstr "" "{device} pertenece a un sitio diferente ({device_site}) que el clúster " "({cluster_site})" -#: virtualization/forms/model_forms.py:192 +#: netbox/virtualization/forms/model_forms.py:192 msgid "Optionally pin this VM to a specific host device within the cluster" msgstr "" "Si lo desea, puede anclar esta máquina virtual a un dispositivo host " "específico dentro del clúster" -#: virtualization/forms/model_forms.py:221 +#: netbox/virtualization/forms/model_forms.py:221 msgid "Site/Cluster" msgstr "Sitio/Clúster" -#: virtualization/forms/model_forms.py:244 +#: netbox/virtualization/forms/model_forms.py:244 msgid "Disk size is managed via the attachment of virtual disks." msgstr "" "El tamaño del disco se administra mediante la conexión de discos virtuales." -#: virtualization/forms/model_forms.py:372 -#: virtualization/tables/virtualmachines.py:111 +#: netbox/virtualization/forms/model_forms.py:372 +#: netbox/virtualization/tables/virtualmachines.py:111 msgid "Disk" msgstr "Disco" -#: virtualization/models/clusters.py:25 +#: netbox/virtualization/models/clusters.py:25 msgid "cluster type" msgstr "tipo de clúster" -#: virtualization/models/clusters.py:26 +#: netbox/virtualization/models/clusters.py:26 msgid "cluster types" msgstr "tipos de clústeres" -#: virtualization/models/clusters.py:45 +#: netbox/virtualization/models/clusters.py:45 msgid "cluster group" msgstr "grupo de clústeres" -#: virtualization/models/clusters.py:46 +#: netbox/virtualization/models/clusters.py:46 msgid "cluster groups" msgstr "grupos de clústeres" -#: virtualization/models/clusters.py:121 +#: netbox/virtualization/models/clusters.py:121 msgid "cluster" msgstr "racimo" -#: virtualization/models/clusters.py:122 +#: netbox/virtualization/models/clusters.py:122 msgid "clusters" msgstr "racimos" -#: virtualization/models/clusters.py:141 +#: netbox/virtualization/models/clusters.py:141 #, python-brace-format msgid "" "{count} devices are assigned as hosts for this cluster but are not in site " @@ -14780,42 +15604,42 @@ msgstr "" "{count} los dispositivos se asignan como hosts para este clúster, pero no " "están en el sitio {site}" -#: virtualization/models/virtualmachines.py:123 +#: netbox/virtualization/models/virtualmachines.py:123 msgid "memory (MB)" msgstr "memoria (MB)" -#: virtualization/models/virtualmachines.py:128 +#: netbox/virtualization/models/virtualmachines.py:128 msgid "disk (MB)" msgstr "disco (MB)" -#: virtualization/models/virtualmachines.py:166 +#: netbox/virtualization/models/virtualmachines.py:166 msgid "Virtual machine name must be unique per cluster." msgstr "El nombre de la máquina virtual debe ser único por clúster." -#: virtualization/models/virtualmachines.py:169 +#: netbox/virtualization/models/virtualmachines.py:169 msgid "virtual machine" msgstr "máquina virtual" -#: virtualization/models/virtualmachines.py:170 +#: netbox/virtualization/models/virtualmachines.py:170 msgid "virtual machines" msgstr "máquinas virtuales" -#: virtualization/models/virtualmachines.py:184 +#: netbox/virtualization/models/virtualmachines.py:184 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." -#: virtualization/models/virtualmachines.py:191 +#: netbox/virtualization/models/virtualmachines.py:191 #, 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})." -#: virtualization/models/virtualmachines.py:198 +#: netbox/virtualization/models/virtualmachines.py:198 msgid "Must specify a cluster when assigning a host device." msgstr "Debe especificar un clúster al asignar un dispositivo host." -#: virtualization/models/virtualmachines.py:203 +#: netbox/virtualization/models/virtualmachines.py:203 #, python-brace-format msgid "" "The selected device ({device}) is not assigned to this cluster ({cluster})." @@ -14823,7 +15647,7 @@ msgstr "" "El dispositivo seleccionado ({device}) no está asignado a este clúster " "({cluster})." -#: virtualization/models/virtualmachines.py:215 +#: netbox/virtualization/models/virtualmachines.py:215 #, python-brace-format msgid "" "The specified disk size ({size}) must match the aggregate size of assigned " @@ -14832,19 +15656,19 @@ msgstr "" "El tamaño de disco especificado ({size}) debe coincidir con el tamaño " "agregado de los discos virtuales asignados ({total_size})." -#: virtualization/models/virtualmachines.py:229 +#: netbox/virtualization/models/virtualmachines.py:229 #, 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.)" -#: virtualization/models/virtualmachines.py:238 +#: netbox/virtualization/models/virtualmachines.py:238 #, 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." -#: virtualization/models/virtualmachines.py:396 +#: netbox/virtualization/models/virtualmachines.py:396 #, python-brace-format msgid "" "The selected parent interface ({parent}) belongs to a different virtual " @@ -14853,7 +15677,7 @@ msgstr "" "La interfaz principal seleccionada ({parent}) pertenece a una máquina " "virtual diferente ({virtual_machine})." -#: virtualization/models/virtualmachines.py:411 +#: netbox/virtualization/models/virtualmachines.py:411 #, python-brace-format msgid "" "The selected bridge interface ({bridge}) belongs to a different virtual " @@ -14862,7 +15686,7 @@ msgstr "" "La interfaz de puente seleccionada ({bridge}) pertenece a una máquina " "virtual diferente ({virtual_machine})." -#: virtualization/models/virtualmachines.py:422 +#: netbox/virtualization/models/virtualmachines.py:422 #, python-brace-format msgid "" "The untagged VLAN ({untagged_vlan}) must belong to the same site as the " @@ -14871,394 +15695,417 @@ 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." -#: virtualization/models/virtualmachines.py:434 +#: netbox/virtualization/models/virtualmachines.py:434 msgid "size (MB)" msgstr "tamaño (MB)" -#: virtualization/models/virtualmachines.py:438 +#: netbox/virtualization/models/virtualmachines.py:438 msgid "virtual disk" msgstr "disco virtual" -#: virtualization/models/virtualmachines.py:439 +#: netbox/virtualization/models/virtualmachines.py:439 msgid "virtual disks" msgstr "discos virtuales" -#: virtualization/views.py:275 +#: netbox/virtualization/views.py:273 #, python-brace-format msgid "Added {count} devices to cluster {cluster}" msgstr "Añadido {count} dispositivos para agrupar {cluster}" -#: virtualization/views.py:310 +#: netbox/virtualization/views.py:308 #, python-brace-format msgid "Removed {count} devices from cluster {cluster}" msgstr "Eliminado {count} dispositivos del clúster {cluster}" -#: vpn/choices.py:31 +#: netbox/vpn/choices.py:35 msgid "IPsec - Transport" msgstr "IPSec - Transporte" -#: vpn/choices.py:32 +#: netbox/vpn/choices.py:36 msgid "IPsec - Tunnel" msgstr "IPSec - Túnel" -#: vpn/choices.py:33 +#: netbox/vpn/choices.py:37 msgid "IP-in-IP" msgstr "IP en IP" -#: vpn/choices.py:34 +#: netbox/vpn/choices.py:38 msgid "GRE" msgstr "GRIS" -#: vpn/choices.py:56 +#: netbox/vpn/choices.py:39 +msgid "WireGuard" +msgstr "" + +#: netbox/vpn/choices.py:40 +msgid "OpenVPN" +msgstr "" + +#: netbox/vpn/choices.py:41 +msgid "L2TP" +msgstr "" + +#: netbox/vpn/choices.py:42 +msgid "PPTP" +msgstr "" + +#: netbox/vpn/choices.py:64 msgid "Hub" msgstr "Hub" -#: vpn/choices.py:57 +#: netbox/vpn/choices.py:65 msgid "Spoke" msgstr "Habló" -#: vpn/choices.py:80 +#: netbox/vpn/choices.py:88 msgid "Aggressive" msgstr "Agresivo" -#: vpn/choices.py:81 +#: netbox/vpn/choices.py:89 msgid "Main" msgstr "Principal" -#: vpn/choices.py:92 +#: netbox/vpn/choices.py:100 msgid "Pre-shared keys" msgstr "Claves previamente compartidas" -#: vpn/choices.py:93 +#: netbox/vpn/choices.py:101 msgid "Certificates" msgstr "Certificados" -#: vpn/choices.py:94 +#: netbox/vpn/choices.py:102 msgid "RSA signatures" msgstr "Firmas RSA" -#: vpn/choices.py:95 +#: netbox/vpn/choices.py:103 msgid "DSA signatures" msgstr "Firmas de la DSA" -#: vpn/choices.py:178 vpn/choices.py:179 vpn/choices.py:180 vpn/choices.py:181 -#: vpn/choices.py:182 vpn/choices.py:183 vpn/choices.py:184 vpn/choices.py:185 -#: vpn/choices.py:186 vpn/choices.py:187 vpn/choices.py:188 vpn/choices.py:189 -#: vpn/choices.py:190 vpn/choices.py:191 vpn/choices.py:192 vpn/choices.py:193 -#: vpn/choices.py:194 vpn/choices.py:195 vpn/choices.py:196 vpn/choices.py:197 -#: vpn/choices.py:198 vpn/choices.py:199 vpn/choices.py:200 vpn/choices.py:201 +#: netbox/vpn/choices.py:186 netbox/vpn/choices.py:187 +#: netbox/vpn/choices.py:188 netbox/vpn/choices.py:189 +#: netbox/vpn/choices.py:190 netbox/vpn/choices.py:191 +#: netbox/vpn/choices.py:192 netbox/vpn/choices.py:193 +#: netbox/vpn/choices.py:194 netbox/vpn/choices.py:195 +#: netbox/vpn/choices.py:196 netbox/vpn/choices.py:197 +#: netbox/vpn/choices.py:198 netbox/vpn/choices.py:199 +#: netbox/vpn/choices.py:200 netbox/vpn/choices.py:201 +#: netbox/vpn/choices.py:202 netbox/vpn/choices.py:203 +#: netbox/vpn/choices.py:204 netbox/vpn/choices.py:205 +#: netbox/vpn/choices.py:206 netbox/vpn/choices.py:207 +#: netbox/vpn/choices.py:208 netbox/vpn/choices.py:209 #, python-brace-format msgid "Group {n}" msgstr "Grupo {n}" -#: vpn/choices.py:243 +#: netbox/vpn/choices.py:251 msgid "Ethernet Private LAN" msgstr "LAN privada Ethernet" -#: vpn/choices.py:244 +#: netbox/vpn/choices.py:252 msgid "Ethernet Virtual Private LAN" msgstr "LAN privada virtual Ethernet" -#: vpn/choices.py:247 +#: netbox/vpn/choices.py:255 msgid "Ethernet Private Tree" msgstr "Árbol privado de Ethernet" -#: vpn/choices.py:248 +#: netbox/vpn/choices.py:256 msgid "Ethernet Virtual Private Tree" msgstr "Árbol privado virtual de Ethernet" -#: vpn/filtersets.py:41 +#: netbox/vpn/filtersets.py:41 msgid "Tunnel group (ID)" msgstr "Grupo de túneles (ID)" -#: vpn/filtersets.py:47 +#: netbox/vpn/filtersets.py:47 msgid "Tunnel group (slug)" msgstr "Grupo de túneles (babosas)" -#: vpn/filtersets.py:54 +#: netbox/vpn/filtersets.py:54 msgid "IPSec profile (ID)" msgstr "Perfil IPSec (ID)" -#: vpn/filtersets.py:60 +#: netbox/vpn/filtersets.py:60 msgid "IPSec profile (name)" msgstr "Perfil IPSec (nombre)" -#: vpn/filtersets.py:81 +#: netbox/vpn/filtersets.py:81 msgid "Tunnel (ID)" msgstr "Túnel (ID)" -#: vpn/filtersets.py:87 +#: netbox/vpn/filtersets.py:87 msgid "Tunnel (name)" msgstr "Túnel (nombre)" -#: vpn/filtersets.py:118 +#: netbox/vpn/filtersets.py:118 msgid "Outside IP (ID)" msgstr "IP externa (ID)" -#: vpn/filtersets.py:130 vpn/filtersets.py:263 +#: netbox/vpn/filtersets.py:130 netbox/vpn/filtersets.py:263 msgid "IKE policy (ID)" msgstr "Política de IKE (ID)" -#: vpn/filtersets.py:136 vpn/filtersets.py:269 +#: netbox/vpn/filtersets.py:136 netbox/vpn/filtersets.py:269 msgid "IKE policy (name)" msgstr "Política IKE (nombre)" -#: vpn/filtersets.py:200 vpn/filtersets.py:273 +#: netbox/vpn/filtersets.py:200 netbox/vpn/filtersets.py:273 msgid "IPSec policy (ID)" msgstr "Política IPSec (ID)" -#: vpn/filtersets.py:206 vpn/filtersets.py:279 +#: netbox/vpn/filtersets.py:206 netbox/vpn/filtersets.py:279 msgid "IPSec policy (name)" msgstr "Política IPSec (nombre)" -#: vpn/filtersets.py:348 +#: netbox/vpn/filtersets.py:348 msgid "L2VPN (slug)" msgstr "VPN L2 (babosa)" -#: vpn/filtersets.py:412 +#: netbox/vpn/filtersets.py:412 msgid "VM Interface (ID)" msgstr "Interfaz VM (ID)" -#: vpn/filtersets.py:418 +#: netbox/vpn/filtersets.py:418 msgid "VLAN (name)" msgstr "VLAN (nombre)" -#: vpn/forms/bulk_edit.py:45 vpn/forms/bulk_import.py:42 -#: vpn/forms/filtersets.py:54 +#: netbox/vpn/forms/bulk_edit.py:45 netbox/vpn/forms/bulk_import.py:42 +#: netbox/vpn/forms/filtersets.py:54 msgid "Tunnel group" msgstr "Grupo de túneles" -#: vpn/forms/bulk_edit.py:117 vpn/models/crypto.py:47 +#: netbox/vpn/forms/bulk_edit.py:117 netbox/vpn/models/crypto.py:47 msgid "SA lifetime" msgstr "Toda una vida" -#: vpn/forms/bulk_edit.py:151 wireless/forms/bulk_edit.py:79 -#: wireless/forms/bulk_edit.py:126 wireless/forms/filtersets.py:64 -#: wireless/forms/filtersets.py:98 +#: netbox/vpn/forms/bulk_edit.py:151 netbox/wireless/forms/bulk_edit.py:79 +#: netbox/wireless/forms/bulk_edit.py:126 +#: netbox/wireless/forms/filtersets.py:64 +#: netbox/wireless/forms/filtersets.py:98 msgid "Pre-shared key" msgstr "Clave previamente compartida" -#: vpn/forms/bulk_edit.py:237 vpn/forms/bulk_import.py:239 -#: vpn/forms/filtersets.py:199 vpn/forms/model_forms.py:370 -#: vpn/models/crypto.py:104 +#: netbox/vpn/forms/bulk_edit.py:237 netbox/vpn/forms/bulk_import.py:239 +#: netbox/vpn/forms/filtersets.py:199 netbox/vpn/forms/model_forms.py:370 +#: netbox/vpn/models/crypto.py:104 msgid "IKE policy" msgstr "Política de IKE" -#: vpn/forms/bulk_edit.py:242 vpn/forms/bulk_import.py:244 -#: vpn/forms/filtersets.py:204 vpn/forms/model_forms.py:374 -#: vpn/models/crypto.py:209 +#: netbox/vpn/forms/bulk_edit.py:242 netbox/vpn/forms/bulk_import.py:244 +#: netbox/vpn/forms/filtersets.py:204 netbox/vpn/forms/model_forms.py:374 +#: netbox/vpn/models/crypto.py:209 msgid "IPSec policy" msgstr "Política IPSec" -#: vpn/forms/bulk_import.py:50 +#: netbox/vpn/forms/bulk_import.py:50 msgid "Tunnel encapsulation" msgstr "Encapsulación de túneles" -#: vpn/forms/bulk_import.py:83 +#: netbox/vpn/forms/bulk_import.py:83 msgid "Operational role" msgstr "Función operativa" -#: vpn/forms/bulk_import.py:90 +#: netbox/vpn/forms/bulk_import.py:90 msgid "Parent device of assigned interface" msgstr "Dispositivo principal de la interfaz asignada" -#: vpn/forms/bulk_import.py:97 +#: netbox/vpn/forms/bulk_import.py:97 msgid "Parent VM of assigned interface" msgstr "VM principal de la interfaz asignada" -#: vpn/forms/bulk_import.py:104 +#: netbox/vpn/forms/bulk_import.py:104 msgid "Device or virtual machine interface" msgstr "Interfaz de dispositivo o máquina virtual" -#: vpn/forms/bulk_import.py:183 +#: netbox/vpn/forms/bulk_import.py:183 msgid "IKE proposal(s)" msgstr "Propuesta (s) de IKE" -#: vpn/forms/bulk_import.py:215 vpn/models/crypto.py:197 +#: netbox/vpn/forms/bulk_import.py:215 netbox/vpn/models/crypto.py:197 msgid "Diffie-Hellman group for Perfect Forward Secrecy" msgstr "Grupo Diffie-Hellman para Perfect Forward Secrecy" -#: vpn/forms/bulk_import.py:222 +#: netbox/vpn/forms/bulk_import.py:222 msgid "IPSec proposal(s)" msgstr "Propuestas de IPSec" -#: vpn/forms/bulk_import.py:236 +#: netbox/vpn/forms/bulk_import.py:236 msgid "IPSec protocol" msgstr "Protocolo IPSec" -#: vpn/forms/bulk_import.py:266 +#: netbox/vpn/forms/bulk_import.py:266 msgid "L2VPN type" msgstr "Tipo L2VPN" -#: vpn/forms/bulk_import.py:287 +#: netbox/vpn/forms/bulk_import.py:287 msgid "Parent device (for interface)" msgstr "Dispositivo principal (para interfaz)" -#: vpn/forms/bulk_import.py:294 +#: netbox/vpn/forms/bulk_import.py:294 msgid "Parent virtual machine (for interface)" msgstr "Máquina virtual principal (para interfaz)" -#: vpn/forms/bulk_import.py:301 +#: netbox/vpn/forms/bulk_import.py:301 msgid "Assigned interface (device or VM)" msgstr "Interfaz asignada (dispositivo o máquina virtual)" -#: vpn/forms/bulk_import.py:334 +#: netbox/vpn/forms/bulk_import.py:334 msgid "Cannot import device and VM interface terminations simultaneously." msgstr "" "No se pueden importar las terminaciones de la interfaz de máquina virtual y " "del dispositivo de forma simultánea." -#: vpn/forms/bulk_import.py:336 +#: netbox/vpn/forms/bulk_import.py:336 msgid "Each termination must specify either an interface or a VLAN." msgstr "Cada terminación debe especificar una interfaz o una VLAN." -#: vpn/forms/bulk_import.py:338 +#: netbox/vpn/forms/bulk_import.py:338 msgid "Cannot assign both an interface and a VLAN." msgstr "No se puede asignar una interfaz y una VLAN a la vez." -#: vpn/forms/filtersets.py:130 +#: netbox/vpn/forms/filtersets.py:130 msgid "IKE version" msgstr "Versión IKE" -#: vpn/forms/filtersets.py:142 vpn/forms/filtersets.py:175 -#: vpn/forms/model_forms.py:298 vpn/forms/model_forms.py:334 +#: netbox/vpn/forms/filtersets.py:142 netbox/vpn/forms/filtersets.py:175 +#: netbox/vpn/forms/model_forms.py:298 netbox/vpn/forms/model_forms.py:334 msgid "Proposal" msgstr "Propuesta" -#: vpn/forms/filtersets.py:251 +#: netbox/vpn/forms/filtersets.py:251 msgid "Assigned Object Type" msgstr "Tipo de objeto asignado" -#: vpn/forms/model_forms.py:95 vpn/forms/model_forms.py:130 -#: vpn/forms/model_forms.py:240 vpn/tables/tunnels.py:91 +#: netbox/vpn/forms/model_forms.py:95 netbox/vpn/forms/model_forms.py:130 +#: netbox/vpn/forms/model_forms.py:240 netbox/vpn/tables/tunnels.py:91 msgid "Tunnel interface" msgstr "Interfaz de túnel" -#: vpn/forms/model_forms.py:150 +#: netbox/vpn/forms/model_forms.py:150 msgid "First Termination" msgstr "Primera rescisión" -#: vpn/forms/model_forms.py:153 +#: netbox/vpn/forms/model_forms.py:153 msgid "Second Termination" msgstr "Segunda terminación" -#: vpn/forms/model_forms.py:197 +#: netbox/vpn/forms/model_forms.py:197 msgid "This parameter is required when defining a termination." msgstr "Este parámetro es obligatorio para definir una terminación." -#: vpn/forms/model_forms.py:320 vpn/forms/model_forms.py:356 +#: netbox/vpn/forms/model_forms.py:320 netbox/vpn/forms/model_forms.py:356 msgid "Policy" msgstr "Política" -#: vpn/forms/model_forms.py:487 +#: netbox/vpn/forms/model_forms.py:487 msgid "A termination must specify an interface or VLAN." msgstr "Una terminación debe especificar una interfaz o VLAN." -#: vpn/forms/model_forms.py:489 +#: netbox/vpn/forms/model_forms.py:489 msgid "" "A termination can only have one terminating object (an interface or VLAN)." msgstr "" "Una terminación solo puede tener un objeto de terminación (una interfaz o " "VLAN)." -#: vpn/models/crypto.py:33 +#: netbox/vpn/models/crypto.py:33 msgid "encryption algorithm" msgstr "algoritmo de cifrado" -#: vpn/models/crypto.py:37 +#: netbox/vpn/models/crypto.py:37 msgid "authentication algorithm" msgstr "algoritmo de autenticación" -#: vpn/models/crypto.py:44 +#: netbox/vpn/models/crypto.py:44 msgid "Diffie-Hellman group ID" msgstr "ID de grupo Diffie-Hellman" -#: vpn/models/crypto.py:50 +#: netbox/vpn/models/crypto.py:50 msgid "Security association lifetime (in seconds)" msgstr "Duración de la asociación de seguridad (en segundos)" -#: vpn/models/crypto.py:59 +#: netbox/vpn/models/crypto.py:59 msgid "IKE proposal" msgstr "Propuesta IKE" -#: vpn/models/crypto.py:60 +#: netbox/vpn/models/crypto.py:60 msgid "IKE proposals" msgstr "Propuestas de IKE" -#: vpn/models/crypto.py:76 +#: netbox/vpn/models/crypto.py:76 msgid "version" msgstr "versión" -#: vpn/models/crypto.py:88 vpn/models/crypto.py:190 +#: netbox/vpn/models/crypto.py:88 netbox/vpn/models/crypto.py:190 msgid "proposals" msgstr "propuestas" -#: vpn/models/crypto.py:91 wireless/models.py:39 +#: netbox/vpn/models/crypto.py:91 netbox/wireless/models.py:39 msgid "pre-shared key" msgstr "clave previamente compartida" -#: vpn/models/crypto.py:105 +#: netbox/vpn/models/crypto.py:105 msgid "IKE policies" msgstr "Políticas de IKE" -#: vpn/models/crypto.py:118 +#: netbox/vpn/models/crypto.py:118 msgid "Mode is required for selected IKE version" msgstr "El modo es necesario para la versión IKE seleccionada" -#: vpn/models/crypto.py:122 +#: netbox/vpn/models/crypto.py:122 msgid "Mode cannot be used for selected IKE version" msgstr "El modo no se puede usar para la versión IKE seleccionada" -#: vpn/models/crypto.py:136 +#: netbox/vpn/models/crypto.py:136 msgid "encryption" msgstr "cifrado" -#: vpn/models/crypto.py:141 +#: netbox/vpn/models/crypto.py:141 msgid "authentication" msgstr "autenticación" -#: vpn/models/crypto.py:149 +#: netbox/vpn/models/crypto.py:149 msgid "Security association lifetime (seconds)" msgstr "Duración de la asociación de seguridad (segundos)" -#: vpn/models/crypto.py:155 +#: netbox/vpn/models/crypto.py:155 msgid "Security association lifetime (in kilobytes)" msgstr "Duración de la asociación de seguridad (en kilobytes)" -#: vpn/models/crypto.py:164 +#: netbox/vpn/models/crypto.py:164 msgid "IPSec proposal" msgstr "Propuesta de IPSec" -#: vpn/models/crypto.py:165 +#: netbox/vpn/models/crypto.py:165 msgid "IPSec proposals" msgstr "Propuestas de IPSec" -#: vpn/models/crypto.py:178 +#: netbox/vpn/models/crypto.py:178 msgid "Encryption and/or authentication algorithm must be defined" msgstr "Debe definirse un algoritmo de cifrado y/o autenticación" -#: vpn/models/crypto.py:210 +#: netbox/vpn/models/crypto.py:210 msgid "IPSec policies" msgstr "Políticas IPSec" -#: vpn/models/crypto.py:251 +#: netbox/vpn/models/crypto.py:251 msgid "IPSec profiles" msgstr "Perfiles IPSec" -#: vpn/models/l2vpn.py:116 +#: netbox/vpn/models/l2vpn.py:116 msgid "L2VPN termination" msgstr "Terminación de L2VPN" -#: vpn/models/l2vpn.py:117 +#: netbox/vpn/models/l2vpn.py:117 msgid "L2VPN terminations" msgstr "Terminaciones de L2VPN" -#: vpn/models/l2vpn.py:135 +#: netbox/vpn/models/l2vpn.py:135 #, python-brace-format msgid "L2VPN Termination already assigned ({assigned_object})" msgstr "La terminación de L2VPN ya está asignada ({assigned_object})" -#: vpn/models/l2vpn.py:147 +#: netbox/vpn/models/l2vpn.py:147 #, python-brace-format msgid "" "{l2vpn_type} L2VPNs cannot have more than two terminations; found " @@ -15267,186 +16114,194 @@ msgstr "" "{l2vpn_type} Las VPN de nivel 2 no pueden tener más de dos terminaciones; se" " encuentran {terminations_count} ya definido." -#: vpn/models/tunnels.py:26 +#: netbox/vpn/models/tunnels.py:26 msgid "tunnel group" msgstr "grupo de túneles" -#: vpn/models/tunnels.py:27 +#: netbox/vpn/models/tunnels.py:27 msgid "tunnel groups" msgstr "grupos de túneles" -#: vpn/models/tunnels.py:53 +#: netbox/vpn/models/tunnels.py:53 msgid "encapsulation" msgstr "encapsulamiento" -#: vpn/models/tunnels.py:72 +#: netbox/vpn/models/tunnels.py:72 msgid "tunnel ID" msgstr "ID de túnel" -#: vpn/models/tunnels.py:94 +#: netbox/vpn/models/tunnels.py:94 msgid "tunnel" msgstr "túnel" -#: vpn/models/tunnels.py:95 +#: netbox/vpn/models/tunnels.py:95 msgid "tunnels" msgstr "túneles" -#: vpn/models/tunnels.py:153 +#: netbox/vpn/models/tunnels.py:153 msgid "An object may be terminated to only one tunnel at a time." msgstr "Un objeto solo puede terminar en un túnel a la vez." -#: vpn/models/tunnels.py:156 +#: netbox/vpn/models/tunnels.py:156 msgid "tunnel termination" msgstr "terminación de túnel" -#: vpn/models/tunnels.py:157 +#: netbox/vpn/models/tunnels.py:157 msgid "tunnel terminations" msgstr "terminaciones de túneles" -#: vpn/models/tunnels.py:174 +#: netbox/vpn/models/tunnels.py:174 #, python-brace-format msgid "{name} is already attached to a tunnel ({tunnel})." msgstr "{name} ya está conectado a un túnel ({tunnel})." -#: vpn/tables/crypto.py:22 +#: netbox/vpn/tables/crypto.py:22 msgid "Authentication Method" msgstr "Método de autenticación" -#: vpn/tables/crypto.py:25 vpn/tables/crypto.py:97 +#: netbox/vpn/tables/crypto.py:25 netbox/vpn/tables/crypto.py:97 msgid "Encryption Algorithm" msgstr "Algoritmo de cifrado" -#: vpn/tables/crypto.py:28 vpn/tables/crypto.py:100 +#: netbox/vpn/tables/crypto.py:28 netbox/vpn/tables/crypto.py:100 msgid "Authentication Algorithm" msgstr "Algoritmo de autenticación" -#: vpn/tables/crypto.py:34 +#: netbox/vpn/tables/crypto.py:34 msgid "SA Lifetime" msgstr "Toda una vida" -#: vpn/tables/crypto.py:71 +#: netbox/vpn/tables/crypto.py:71 msgid "Pre-shared Key" msgstr "Clave previamente compartida" -#: vpn/tables/crypto.py:103 +#: netbox/vpn/tables/crypto.py:103 msgid "SA Lifetime (Seconds)" msgstr "Una vida útil (segundos)" -#: vpn/tables/crypto.py:106 +#: netbox/vpn/tables/crypto.py:106 msgid "SA Lifetime (KB)" msgstr "SA Lifetime (KB)" -#: vpn/tables/l2vpn.py:69 +#: netbox/vpn/tables/l2vpn.py:69 msgid "Object Parent" msgstr "Objeto principal" -#: vpn/tables/l2vpn.py:74 +#: netbox/vpn/tables/l2vpn.py:74 msgid "Object Site" msgstr "Sitio del objeto" -#: wireless/choices.py:11 +#: netbox/wireless/choices.py:11 msgid "Access point" msgstr "Punto de acceso" -#: wireless/choices.py:12 +#: netbox/wireless/choices.py:12 msgid "Station" msgstr "Estación" -#: wireless/choices.py:467 +#: netbox/wireless/choices.py:467 msgid "Open" msgstr "Abrir" -#: wireless/choices.py:469 +#: netbox/wireless/choices.py:469 msgid "WPA Personal (PSK)" msgstr "WPA Personal (PSK)" -#: wireless/choices.py:470 +#: netbox/wireless/choices.py:470 msgid "WPA Enterprise" msgstr "Empresa WPA" -#: wireless/forms/bulk_edit.py:73 wireless/forms/bulk_edit.py:120 -#: wireless/forms/bulk_import.py:68 wireless/forms/bulk_import.py:71 -#: wireless/forms/bulk_import.py:110 wireless/forms/bulk_import.py:113 -#: wireless/forms/filtersets.py:59 wireless/forms/filtersets.py:93 +#: netbox/wireless/forms/bulk_edit.py:73 +#: netbox/wireless/forms/bulk_edit.py:120 +#: netbox/wireless/forms/bulk_import.py:68 +#: netbox/wireless/forms/bulk_import.py:71 +#: netbox/wireless/forms/bulk_import.py:110 +#: netbox/wireless/forms/bulk_import.py:113 +#: netbox/wireless/forms/filtersets.py:59 +#: netbox/wireless/forms/filtersets.py:93 msgid "Authentication cipher" msgstr "Cifrado de autenticación" -#: wireless/forms/bulk_edit.py:134 wireless/forms/bulk_import.py:116 -#: wireless/forms/bulk_import.py:119 wireless/forms/filtersets.py:106 +#: 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" -#: wireless/forms/bulk_import.py:52 +#: netbox/wireless/forms/bulk_import.py:52 msgid "Bridged VLAN" msgstr "VLAN puenteada" -#: wireless/forms/bulk_import.py:89 wireless/tables/wirelesslink.py:28 +#: netbox/wireless/forms/bulk_import.py:89 +#: netbox/wireless/tables/wirelesslink.py:28 msgid "Interface A" msgstr "Interfaz A" -#: wireless/forms/bulk_import.py:93 wireless/tables/wirelesslink.py:37 +#: netbox/wireless/forms/bulk_import.py:93 +#: netbox/wireless/tables/wirelesslink.py:37 msgid "Interface B" msgstr "Interfaz B" -#: wireless/forms/model_forms.py:161 +#: netbox/wireless/forms/model_forms.py:161 msgid "Side B" msgstr "Lado B" -#: wireless/models.py:31 +#: netbox/wireless/models.py:31 msgid "authentication cipher" msgstr "cifrado de autenticación" -#: wireless/models.py:69 +#: netbox/wireless/models.py:69 msgid "wireless LAN group" msgstr "grupo LAN inalámbrico" -#: wireless/models.py:70 +#: netbox/wireless/models.py:70 msgid "wireless LAN groups" msgstr "grupos LAN inalámbricos" -#: wireless/models.py:116 +#: netbox/wireless/models.py:116 msgid "wireless LAN" msgstr "LAN inalámbrica" -#: wireless/models.py:144 +#: netbox/wireless/models.py:144 msgid "interface A" msgstr "interfaz A" -#: wireless/models.py:151 +#: netbox/wireless/models.py:151 msgid "interface B" msgstr "interfaz B" -#: wireless/models.py:165 +#: netbox/wireless/models.py:165 msgid "distance" msgstr "distancia" -#: wireless/models.py:172 +#: netbox/wireless/models.py:172 msgid "distance unit" msgstr "unidad de distancia" -#: wireless/models.py:219 +#: netbox/wireless/models.py:219 msgid "wireless link" msgstr "enlace inalámbrico" -#: wireless/models.py:220 +#: netbox/wireless/models.py:220 msgid "wireless links" msgstr "enlaces inalámbricos" -#: wireless/models.py:236 +#: netbox/wireless/models.py:236 msgid "Must specify a unit when setting a wireless distance" msgstr "Debe especificar una unidad al configurar una distancia inalámbrica" -#: wireless/models.py:242 wireless/models.py:248 +#: netbox/wireless/models.py:242 netbox/wireless/models.py:248 #, python-brace-format msgid "{type} is not a wireless interface." msgstr "{type} no es una interfaz inalámbrica." -#: wireless/utils.py:16 +#: netbox/wireless/utils.py:16 #, python-brace-format msgid "Invalid channel value: {channel}" msgstr "Valor de canal no válido: {channel}" -#: wireless/utils.py:26 +#: netbox/wireless/utils.py:26 #, python-brace-format msgid "Invalid channel attribute: {name}" msgstr "Atributo de canal no válido: {name}" diff --git a/netbox/translations/fr/LC_MESSAGES/django.mo b/netbox/translations/fr/LC_MESSAGES/django.mo index bf80d8fca..1627fe766 100644 Binary files a/netbox/translations/fr/LC_MESSAGES/django.mo and b/netbox/translations/fr/LC_MESSAGES/django.mo differ diff --git a/netbox/translations/fr/LC_MESSAGES/django.po b/netbox/translations/fr/LC_MESSAGES/django.po index a01027e68..3a698dc00 100644 --- a/netbox/translations/fr/LC_MESSAGES/django.po +++ b/netbox/translations/fr/LC_MESSAGES/django.po @@ -12,15 +12,16 @@ # thomas rivemale, 2024 # Jeff Gehlbach, 2024 # Jeremy Stretch, 2024 +# marcpaulchand , 2025 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-10-28 19:20+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" @@ -28,1880 +29,2147 @@ msgstr "" "Language: fr\n" "Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" -#: account/tables.py:27 templates/account/token.html:22 -#: templates/users/token.html:17 users/forms/bulk_import.py:39 -#: users/forms/model_forms.py:112 +#: netbox/account/tables.py:27 netbox/templates/account/token.html:22 +#: netbox/templates/users/token.html:17 netbox/users/forms/bulk_import.py:39 +#: netbox/users/forms/model_forms.py:112 msgid "Key" msgstr "Clé" -#: account/tables.py:31 users/forms/filtersets.py:132 +#: netbox/account/tables.py:31 netbox/users/forms/filtersets.py:132 msgid "Write Enabled" msgstr "Écriture activée" -#: account/tables.py:35 core/choices.py:86 core/tables/jobs.py:29 -#: core/tables/tasks.py:79 extras/tables/tables.py:335 -#: extras/tables/tables.py:566 templates/account/token.html:43 -#: templates/core/configrevision.html:26 -#: templates/core/configrevision_restore.html:12 templates/core/job.html:69 -#: templates/core/rq_task.html:16 templates/core/rq_task.html:73 -#: templates/core/rq_worker.html:14 -#: templates/extras/htmx/script_result.html:12 -#: templates/extras/journalentry.html:22 templates/generic/object.html:58 -#: templates/users/token.html:35 +#: netbox/account/tables.py:35 netbox/core/choices.py:86 +#: 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 +#: netbox/templates/core/configrevision.html:26 +#: netbox/templates/core/configrevision_restore.html:12 +#: netbox/templates/core/job.html:69 netbox/templates/core/rq_task.html:16 +#: netbox/templates/core/rq_task.html:73 +#: netbox/templates/core/rq_worker.html:14 +#: netbox/templates/extras/htmx/script_result.html:12 +#: netbox/templates/extras/journalentry.html:22 +#: netbox/templates/generic/object.html:58 +#: netbox/templates/users/token.html:35 msgid "Created" msgstr "Créé" -#: account/tables.py:39 templates/account/token.html:47 -#: templates/users/token.html:39 users/forms/bulk_edit.py:117 -#: users/forms/filtersets.py:136 +#: netbox/account/tables.py:39 netbox/templates/account/token.html:47 +#: netbox/templates/users/token.html:39 netbox/users/forms/bulk_edit.py:117 +#: netbox/users/forms/filtersets.py:136 msgid "Expires" msgstr "Expire" -#: account/tables.py:42 users/forms/filtersets.py:141 +#: netbox/account/tables.py:42 netbox/users/forms/filtersets.py:141 msgid "Last Used" msgstr "Dernière utilisation" -#: account/tables.py:45 templates/account/token.html:55 -#: templates/users/token.html:47 users/forms/bulk_edit.py:122 -#: users/forms/model_forms.py:124 +#: netbox/account/tables.py:45 netbox/templates/account/token.html:55 +#: netbox/templates/users/token.html:47 netbox/users/forms/bulk_edit.py:122 +#: netbox/users/forms/model_forms.py:124 msgid "Allowed IPs" msgstr "IP autorisées" -#: account/views.py:114 +#: netbox/account/views.py:114 #, python-brace-format msgid "Logged in as {user}." msgstr "Connecté en tant que {user}." -#: account/views.py:164 +#: netbox/account/views.py:164 msgid "You have logged out." msgstr "Vous êtes déconnecté." -#: account/views.py:216 +#: netbox/account/views.py:216 msgid "Your preferences have been updated." msgstr "Vos préférences ont été mises à jour." -#: account/views.py:239 +#: netbox/account/views.py:239 msgid "LDAP-authenticated user credentials cannot be changed within NetBox." msgstr "" "Les informations d'identification utilisateur authentifiées par LDAP ne " "peuvent pas être modifiées dans NetBox." -#: account/views.py:254 +#: netbox/account/views.py:254 msgid "Your password has been changed successfully." msgstr "Votre mot de passe a été modifié avec succès." -#: circuits/choices.py:21 dcim/choices.py:20 dcim/choices.py:102 -#: dcim/choices.py:185 dcim/choices.py:237 dcim/choices.py:1530 -#: dcim/choices.py:1606 dcim/choices.py:1656 virtualization/choices.py:20 -#: virtualization/choices.py:45 vpn/choices.py:18 +#: netbox/circuits/choices.py:21 netbox/dcim/choices.py:20 +#: netbox/dcim/choices.py:102 netbox/dcim/choices.py: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 msgid "Planned" msgstr "Planifié" -#: circuits/choices.py:22 netbox/navigation/menu.py:305 +#: netbox/circuits/choices.py:22 netbox/netbox/navigation/menu.py:305 msgid "Provisioning" msgstr "Approvisionnement" -#: circuits/choices.py:23 core/tables/tasks.py:22 dcim/choices.py:22 -#: dcim/choices.py:103 dcim/choices.py:184 dcim/choices.py:236 -#: dcim/choices.py:1605 dcim/choices.py:1655 extras/tables/tables.py:495 -#: ipam/choices.py:31 ipam/choices.py:49 ipam/choices.py:69 -#: ipam/choices.py:154 templates/extras/configcontext.html:25 -#: templates/users/user.html:37 users/forms/bulk_edit.py:38 -#: virtualization/choices.py:22 virtualization/choices.py:44 vpn/choices.py:19 -#: wireless/choices.py:25 +#: netbox/circuits/choices.py:23 netbox/core/tables/tasks.py:22 +#: netbox/dcim/choices.py:22 netbox/dcim/choices.py:103 +#: netbox/dcim/choices.py: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/templates/users/user.html:37 netbox/users/forms/bulk_edit.py:38 +#: netbox/virtualization/choices.py:22 netbox/virtualization/choices.py:44 +#: netbox/vpn/choices.py:19 netbox/wireless/choices.py:25 msgid "Active" msgstr "Actif" -#: circuits/choices.py:24 dcim/choices.py:183 dcim/choices.py:235 -#: dcim/choices.py:1604 dcim/choices.py:1657 virtualization/choices.py:24 -#: virtualization/choices.py:43 +#: 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 msgid "Offline" msgstr "Hors ligne" -#: circuits/choices.py:25 +#: netbox/circuits/choices.py:25 msgid "Deprovisioning" msgstr "Déprovisionnement" -#: circuits/choices.py:26 +#: netbox/circuits/choices.py:26 msgid "Decommissioned" msgstr "Mis hors service" -#: circuits/choices.py:90 dcim/choices.py:1617 tenancy/choices.py:17 +#: netbox/circuits/choices.py:90 netbox/dcim/choices.py:1619 +#: netbox/tenancy/choices.py:17 msgid "Primary" msgstr "Primaire" -#: circuits/choices.py:91 ipam/choices.py:90 tenancy/choices.py:18 +#: netbox/circuits/choices.py:91 netbox/ipam/choices.py:90 +#: netbox/tenancy/choices.py:18 msgid "Secondary" msgstr "Secondaire" -#: circuits/choices.py:92 tenancy/choices.py:19 +#: netbox/circuits/choices.py:92 netbox/tenancy/choices.py:19 msgid "Tertiary" msgstr "Tertiaire" -#: circuits/choices.py:93 tenancy/choices.py:20 +#: netbox/circuits/choices.py:93 netbox/tenancy/choices.py:20 msgid "Inactive" msgstr "Inactif" -#: circuits/filtersets.py:31 circuits/filtersets.py:198 dcim/filtersets.py:98 -#: dcim/filtersets.py:152 dcim/filtersets.py:212 dcim/filtersets.py:333 -#: dcim/filtersets.py:464 dcim/filtersets.py:1021 dcim/filtersets.py:1368 -#: dcim/filtersets.py:1903 dcim/filtersets.py:2146 dcim/filtersets.py:2204 -#: ipam/filtersets.py:339 ipam/filtersets.py:959 -#: virtualization/filtersets.py:45 virtualization/filtersets.py:173 -#: vpn/filtersets.py:358 +#: 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 msgid "Region (ID)" msgstr "Région (ID)" -#: circuits/filtersets.py:38 circuits/filtersets.py:205 dcim/filtersets.py:105 -#: dcim/filtersets.py:158 dcim/filtersets.py:219 dcim/filtersets.py:340 -#: dcim/filtersets.py:471 dcim/filtersets.py:1028 dcim/filtersets.py:1375 -#: dcim/filtersets.py:1910 dcim/filtersets.py:2153 dcim/filtersets.py:2211 -#: extras/filtersets.py:509 ipam/filtersets.py:346 ipam/filtersets.py:966 -#: virtualization/filtersets.py:52 virtualization/filtersets.py:180 -#: vpn/filtersets.py:353 +#: 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 msgid "Region (slug)" msgstr "Région (slug)" -#: circuits/filtersets.py:44 circuits/filtersets.py:211 dcim/filtersets.py:128 -#: dcim/filtersets.py:225 dcim/filtersets.py:346 dcim/filtersets.py:477 -#: dcim/filtersets.py:1034 dcim/filtersets.py:1381 dcim/filtersets.py:1916 -#: dcim/filtersets.py:2159 dcim/filtersets.py:2217 ipam/filtersets.py:352 -#: ipam/filtersets.py:972 virtualization/filtersets.py:58 -#: virtualization/filtersets.py:186 +#: 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 msgid "Site group (ID)" msgstr "Groupe de sites (ID)" -#: circuits/filtersets.py:51 circuits/filtersets.py:218 dcim/filtersets.py:135 -#: dcim/filtersets.py:232 dcim/filtersets.py:353 dcim/filtersets.py:484 -#: dcim/filtersets.py:1041 dcim/filtersets.py:1388 dcim/filtersets.py:1923 -#: dcim/filtersets.py:2166 dcim/filtersets.py:2224 extras/filtersets.py:515 -#: ipam/filtersets.py:359 ipam/filtersets.py:979 -#: virtualization/filtersets.py:65 virtualization/filtersets.py:193 +#: 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 msgid "Site group (slug)" msgstr "Groupe de sites (slug)" -#: circuits/filtersets.py:56 circuits/forms/bulk_edit.py:188 -#: circuits/forms/bulk_edit.py:216 circuits/forms/bulk_import.py:124 -#: circuits/forms/filtersets.py:51 circuits/forms/filtersets.py:171 -#: circuits/forms/filtersets.py:209 circuits/forms/model_forms.py:138 -#: circuits/forms/model_forms.py:154 circuits/tables/circuits.py:113 -#: dcim/forms/bulk_edit.py:168 dcim/forms/bulk_edit.py:329 -#: dcim/forms/bulk_edit.py:677 dcim/forms/bulk_edit.py:873 -#: dcim/forms/bulk_import.py:131 dcim/forms/bulk_import.py:230 -#: dcim/forms/bulk_import.py:309 dcim/forms/bulk_import.py:540 -#: dcim/forms/bulk_import.py:1311 dcim/forms/bulk_import.py:1339 -#: dcim/forms/filtersets.py:87 dcim/forms/filtersets.py:225 -#: dcim/forms/filtersets.py:342 dcim/forms/filtersets.py:439 -#: dcim/forms/filtersets.py:753 dcim/forms/filtersets.py:997 -#: dcim/forms/filtersets.py:1021 dcim/forms/filtersets.py:1111 -#: dcim/forms/filtersets.py:1149 dcim/forms/filtersets.py:1584 -#: dcim/forms/filtersets.py:1608 dcim/forms/filtersets.py:1632 -#: dcim/forms/model_forms.py:137 dcim/forms/model_forms.py:165 -#: dcim/forms/model_forms.py:238 dcim/forms/model_forms.py:463 -#: dcim/forms/model_forms.py:723 dcim/forms/object_create.py:391 -#: dcim/tables/devices.py:153 dcim/tables/power.py:26 dcim/tables/power.py:93 -#: dcim/tables/racks.py:122 dcim/tables/racks.py:207 dcim/tables/sites.py:134 -#: extras/filtersets.py:525 ipam/forms/bulk_edit.py:218 -#: ipam/forms/bulk_edit.py:285 ipam/forms/bulk_edit.py:484 -#: ipam/forms/bulk_import.py:171 ipam/forms/bulk_import.py:429 -#: ipam/forms/filtersets.py:153 ipam/forms/filtersets.py:231 -#: ipam/forms/filtersets.py:432 ipam/forms/filtersets.py:489 -#: ipam/forms/model_forms.py:205 ipam/forms/model_forms.py:636 -#: ipam/tables/ip.py:245 ipam/tables/vlans.py:118 ipam/tables/vlans.py:221 -#: templates/circuits/inc/circuit_termination_fields.html:6 -#: templates/dcim/device.html:22 templates/dcim/inc/cable_termination.html:8 -#: templates/dcim/inc/cable_termination.html:33 -#: templates/dcim/location.html:37 templates/dcim/powerpanel.html:22 -#: templates/dcim/rack.html:20 templates/dcim/rackreservation.html:28 -#: templates/dcim/site.html:28 templates/ipam/prefix.html:56 -#: templates/ipam/vlan.html:23 templates/ipam/vlan_edit.html:40 -#: templates/virtualization/cluster.html:42 -#: templates/virtualization/virtualmachine.html:95 -#: virtualization/forms/bulk_edit.py:91 virtualization/forms/bulk_edit.py:109 -#: virtualization/forms/bulk_edit.py:124 -#: virtualization/forms/bulk_import.py:59 -#: virtualization/forms/bulk_import.py:85 -#: virtualization/forms/filtersets.py:79 -#: virtualization/forms/filtersets.py:148 -#: virtualization/forms/model_forms.py:71 -#: virtualization/forms/model_forms.py:104 -#: virtualization/forms/model_forms.py:171 -#: virtualization/tables/clusters.py:77 -#: virtualization/tables/virtualmachines.py:63 vpn/forms/filtersets.py:266 -#: wireless/forms/model_forms.py:76 wireless/forms/model_forms.py:118 +#: 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/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/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/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 msgid "Site" msgstr "Site" -#: circuits/filtersets.py:62 circuits/filtersets.py:229 -#: circuits/filtersets.py:274 dcim/filtersets.py:242 dcim/filtersets.py:363 -#: dcim/filtersets.py:458 extras/filtersets.py:531 ipam/filtersets.py:238 -#: ipam/filtersets.py:369 ipam/filtersets.py:989 -#: virtualization/filtersets.py:75 virtualization/filtersets.py:203 -#: vpn/filtersets.py:363 +#: 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 msgid "Site (slug)" msgstr "Site (slug)" -#: circuits/filtersets.py:67 +#: netbox/circuits/filtersets.py:67 msgid "ASN (ID)" msgstr "ASN (ID)" -#: circuits/filtersets.py:73 circuits/forms/filtersets.py:31 -#: ipam/forms/model_forms.py:159 ipam/models/asns.py:108 -#: ipam/models/asns.py:125 ipam/tables/asn.py:41 templates/ipam/asn.html:20 +#: 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/templates/ipam/asn.html:20 msgid "ASN" msgstr "Numéro d'AS" -#: circuits/filtersets.py:95 circuits/filtersets.py:122 -#: circuits/filtersets.py:156 circuits/filtersets.py:283 -#: circuits/filtersets.py:325 ipam/filtersets.py:243 +#: 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 msgid "Provider (ID)" msgstr "Fournisseur (ID)" -#: circuits/filtersets.py:101 circuits/filtersets.py:128 -#: circuits/filtersets.py:162 circuits/filtersets.py:289 -#: circuits/filtersets.py:331 ipam/filtersets.py:249 +#: 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 msgid "Provider (slug)" msgstr "Fournisseur (slug)" -#: circuits/filtersets.py:167 +#: netbox/circuits/filtersets.py:167 msgid "Provider account (ID)" msgstr "Compte fournisseur (ID)" -#: circuits/filtersets.py:173 +#: netbox/circuits/filtersets.py:173 msgid "Provider account (account)" msgstr "Compte du fournisseur (compte)" -#: circuits/filtersets.py:178 +#: netbox/circuits/filtersets.py:178 msgid "Provider network (ID)" msgstr "Réseau fournisseur (ID)" -#: circuits/filtersets.py:182 +#: netbox/circuits/filtersets.py:182 msgid "Circuit type (ID)" msgstr "Type de circuit (ID)" -#: circuits/filtersets.py:188 +#: netbox/circuits/filtersets.py:188 msgid "Circuit type (slug)" msgstr "Type de circuit (slug)" -#: circuits/filtersets.py:223 circuits/filtersets.py:268 -#: dcim/filtersets.py:236 dcim/filtersets.py:357 dcim/filtersets.py:452 -#: dcim/filtersets.py:1045 dcim/filtersets.py:1393 dcim/filtersets.py:1928 -#: dcim/filtersets.py:2170 dcim/filtersets.py:2229 ipam/filtersets.py:232 -#: ipam/filtersets.py:363 ipam/filtersets.py:983 -#: virtualization/filtersets.py:69 virtualization/filtersets.py:197 -#: vpn/filtersets.py:368 +#: 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 msgid "Site (ID)" msgstr "Site (ID)" -#: circuits/filtersets.py:233 circuits/filtersets.py:237 +#: netbox/circuits/filtersets.py:233 netbox/circuits/filtersets.py:237 msgid "Termination A (ID)" msgstr "Terminaison A (ID)" -#: circuits/filtersets.py:260 circuits/filtersets.py:320 core/filtersets.py:77 -#: core/filtersets.py:136 core/filtersets.py:173 dcim/filtersets.py:751 -#: dcim/filtersets.py:1362 dcim/filtersets.py:2277 extras/filtersets.py:41 -#: extras/filtersets.py:63 extras/filtersets.py:92 extras/filtersets.py:132 -#: extras/filtersets.py:181 extras/filtersets.py:209 extras/filtersets.py:239 -#: extras/filtersets.py:276 extras/filtersets.py:348 extras/filtersets.py:391 -#: extras/filtersets.py:438 extras/filtersets.py:498 extras/filtersets.py:657 -#: extras/filtersets.py:703 ipam/forms/model_forms.py:449 -#: netbox/filtersets.py:282 netbox/forms/__init__.py:22 -#: netbox/forms/base.py:167 templates/htmx/object_selector.html:28 -#: templates/inc/filter_list.html:46 templates/ipam/ipaddress_assign.html:29 -#: templates/search.html:7 templates/search.html:26 tenancy/filtersets.py:99 -#: users/filtersets.py:23 users/filtersets.py:57 users/filtersets.py:102 -#: users/filtersets.py:150 utilities/forms/forms.py:104 -#: utilities/templates/navigation/menu.html:16 +#: 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/templates/htmx/object_selector.html:28 +#: netbox/templates/inc/filter_list.html:46 +#: netbox/templates/ipam/ipaddress_assign.html:29 +#: netbox/templates/search.html:7 netbox/templates/search.html:26 +#: netbox/tenancy/filtersets.py:99 netbox/users/filtersets.py:23 +#: netbox/users/filtersets.py:57 netbox/users/filtersets.py:102 +#: netbox/users/filtersets.py:150 netbox/utilities/forms/forms.py:104 +#: netbox/utilities/templates/navigation/menu.html:16 msgid "Search" msgstr "Rechercher" -#: circuits/filtersets.py:264 circuits/forms/bulk_edit.py:172 -#: circuits/forms/bulk_edit.py:246 circuits/forms/bulk_import.py:115 -#: circuits/forms/filtersets.py:198 circuits/forms/filtersets.py:214 -#: circuits/forms/filtersets.py:260 circuits/forms/model_forms.py:111 -#: circuits/forms/model_forms.py:133 circuits/forms/model_forms.py:199 -#: circuits/tables/circuits.py:104 circuits/tables/circuits.py:164 -#: dcim/forms/connections.py:73 templates/circuits/circuit.html:15 -#: templates/circuits/circuitgroupassignment.html:26 -#: templates/circuits/circuittermination.html:19 -#: templates/dcim/inc/cable_termination.html:55 -#: templates/dcim/trace/circuit.html:4 +#: 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/templates/circuits/circuit.html:15 +#: netbox/templates/circuits/circuitgroupassignment.html:26 +#: 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" -#: circuits/filtersets.py:278 +#: netbox/circuits/filtersets.py:278 msgid "ProviderNetwork (ID)" msgstr "Réseau fournisseur (ID)" -#: circuits/filtersets.py:335 +#: netbox/circuits/filtersets.py:335 msgid "Circuit (ID)" msgstr "Circuit (ID)" -#: circuits/filtersets.py:341 +#: netbox/circuits/filtersets.py:341 msgid "Circuit (CID)" msgstr "Circuit (CID)" -#: circuits/filtersets.py:345 +#: netbox/circuits/filtersets.py:345 msgid "Circuit group (ID)" msgstr "Groupe de circuits (ID)" -#: circuits/filtersets.py:351 +#: netbox/circuits/filtersets.py:351 msgid "Circuit group (slug)" msgstr "Groupe de circuits (slug)" -#: circuits/forms/bulk_edit.py:30 circuits/forms/filtersets.py:56 -#: circuits/forms/model_forms.py:29 circuits/tables/providers.py:33 -#: dcim/forms/bulk_edit.py:128 dcim/forms/filtersets.py:195 -#: dcim/forms/model_forms.py:123 dcim/tables/sites.py:94 -#: ipam/models/asns.py:126 ipam/tables/asn.py:27 ipam/views.py:213 -#: netbox/navigation/menu.py:172 netbox/navigation/menu.py:175 -#: templates/circuits/provider.html:23 +#: 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/templates/circuits/provider.html:23 msgid "ASNs" msgstr "Numéros d'AS" -#: circuits/forms/bulk_edit.py:34 circuits/forms/bulk_edit.py:56 -#: circuits/forms/bulk_edit.py:83 circuits/forms/bulk_edit.py:104 -#: circuits/forms/bulk_edit.py:164 circuits/forms/bulk_edit.py:183 -#: circuits/forms/bulk_edit.py:228 core/forms/bulk_edit.py:28 -#: dcim/forms/bulk_create.py:35 dcim/forms/bulk_edit.py:73 -#: dcim/forms/bulk_edit.py:92 dcim/forms/bulk_edit.py:151 -#: dcim/forms/bulk_edit.py:192 dcim/forms/bulk_edit.py:210 -#: dcim/forms/bulk_edit.py:288 dcim/forms/bulk_edit.py:432 -#: dcim/forms/bulk_edit.py:466 dcim/forms/bulk_edit.py:481 -#: dcim/forms/bulk_edit.py:540 dcim/forms/bulk_edit.py:584 -#: dcim/forms/bulk_edit.py:618 dcim/forms/bulk_edit.py:642 -#: dcim/forms/bulk_edit.py:715 dcim/forms/bulk_edit.py:767 -#: dcim/forms/bulk_edit.py:819 dcim/forms/bulk_edit.py:842 -#: dcim/forms/bulk_edit.py:890 dcim/forms/bulk_edit.py:960 -#: dcim/forms/bulk_edit.py:1013 dcim/forms/bulk_edit.py:1048 -#: dcim/forms/bulk_edit.py:1088 dcim/forms/bulk_edit.py:1132 -#: dcim/forms/bulk_edit.py:1177 dcim/forms/bulk_edit.py:1204 -#: dcim/forms/bulk_edit.py:1222 dcim/forms/bulk_edit.py:1240 -#: dcim/forms/bulk_edit.py:1258 dcim/forms/bulk_edit.py:1682 -#: extras/forms/bulk_edit.py:39 extras/forms/bulk_edit.py:149 -#: extras/forms/bulk_edit.py:178 extras/forms/bulk_edit.py:208 -#: extras/forms/bulk_edit.py:256 extras/forms/bulk_edit.py:274 -#: extras/forms/bulk_edit.py:298 extras/forms/bulk_edit.py:312 -#: extras/forms/bulk_edit.py:339 extras/tables/tables.py:79 -#: ipam/forms/bulk_edit.py:53 ipam/forms/bulk_edit.py:73 -#: ipam/forms/bulk_edit.py:93 ipam/forms/bulk_edit.py:117 -#: ipam/forms/bulk_edit.py:146 ipam/forms/bulk_edit.py:175 -#: ipam/forms/bulk_edit.py:194 ipam/forms/bulk_edit.py:276 -#: ipam/forms/bulk_edit.py:321 ipam/forms/bulk_edit.py:369 -#: ipam/forms/bulk_edit.py:412 ipam/forms/bulk_edit.py:428 -#: ipam/forms/bulk_edit.py:516 ipam/forms/bulk_edit.py:547 -#: templates/account/token.html:35 templates/circuits/circuit.html:59 -#: templates/circuits/circuitgroup.html:32 -#: templates/circuits/circuittype.html:26 -#: templates/circuits/inc/circuit_termination_fields.html:88 -#: templates/circuits/provider.html:33 -#: templates/circuits/providernetwork.html:32 -#: templates/core/datasource.html:54 templates/core/plugin.html:80 -#: templates/dcim/cable.html:36 templates/dcim/consoleport.html:44 -#: templates/dcim/consoleserverport.html:44 templates/dcim/device.html:94 -#: templates/dcim/devicebay.html:32 templates/dcim/devicerole.html:30 -#: templates/dcim/devicetype.html:33 templates/dcim/frontport.html:58 -#: templates/dcim/interface.html:69 templates/dcim/inventoryitem.html:60 -#: templates/dcim/inventoryitemrole.html:22 templates/dcim/location.html:33 -#: templates/dcim/manufacturer.html:40 templates/dcim/module.html:73 -#: templates/dcim/modulebay.html:42 templates/dcim/moduletype.html:37 -#: templates/dcim/platform.html:33 templates/dcim/powerfeed.html:40 -#: templates/dcim/poweroutlet.html:40 templates/dcim/powerpanel.html:30 -#: templates/dcim/powerport.html:40 templates/dcim/rack.html:53 -#: templates/dcim/rackreservation.html:62 templates/dcim/rackrole.html:26 -#: templates/dcim/racktype.html:24 templates/dcim/rearport.html:54 -#: templates/dcim/region.html:33 templates/dcim/site.html:60 -#: templates/dcim/sitegroup.html:33 templates/dcim/virtualchassis.html:31 -#: templates/extras/configcontext.html:21 -#: templates/extras/configtemplate.html:17 -#: templates/extras/customfield.html:34 -#: templates/extras/dashboard/widget_add.html:14 -#: templates/extras/eventrule.html:21 templates/extras/exporttemplate.html:19 -#: templates/extras/notificationgroup.html:20 -#: templates/extras/savedfilter.html:17 templates/extras/script_list.html:45 -#: templates/extras/tag.html:20 templates/extras/webhook.html:17 -#: templates/generic/bulk_import.html:120 templates/ipam/aggregate.html:43 -#: templates/ipam/asn.html:42 templates/ipam/asnrange.html:38 -#: templates/ipam/fhrpgroup.html:34 templates/ipam/ipaddress.html:55 -#: templates/ipam/iprange.html:67 templates/ipam/prefix.html:81 -#: templates/ipam/rir.html:26 templates/ipam/role.html:26 -#: templates/ipam/routetarget.html:21 templates/ipam/service.html:50 -#: templates/ipam/servicetemplate.html:27 templates/ipam/vlan.html:62 -#: templates/ipam/vlangroup.html:34 templates/ipam/vrf.html:33 -#: templates/tenancy/contact.html:67 templates/tenancy/contactgroup.html:25 -#: templates/tenancy/contactrole.html:22 templates/tenancy/tenant.html:24 -#: templates/tenancy/tenantgroup.html:33 templates/users/group.html:21 -#: templates/users/objectpermission.html:21 templates/users/token.html:27 -#: templates/virtualization/cluster.html:25 -#: templates/virtualization/clustergroup.html:26 -#: templates/virtualization/clustertype.html:26 -#: templates/virtualization/virtualdisk.html:39 -#: templates/virtualization/virtualmachine.html:31 -#: templates/virtualization/vminterface.html:51 -#: templates/vpn/ikepolicy.html:17 templates/vpn/ikeproposal.html:17 -#: templates/vpn/ipsecpolicy.html:17 templates/vpn/ipsecprofile.html:17 -#: templates/vpn/ipsecprofile.html:40 templates/vpn/ipsecprofile.html:73 -#: templates/vpn/ipsecproposal.html:17 templates/vpn/l2vpn.html:26 -#: templates/vpn/tunnel.html:33 templates/vpn/tunnelgroup.html:30 -#: templates/wireless/wirelesslan.html:26 -#: templates/wireless/wirelesslangroup.html:33 -#: templates/wireless/wirelesslink.html:34 tenancy/forms/bulk_edit.py:32 -#: tenancy/forms/bulk_edit.py:80 tenancy/forms/bulk_edit.py:122 -#: users/forms/bulk_edit.py:64 users/forms/bulk_edit.py:82 -#: users/forms/bulk_edit.py:112 virtualization/forms/bulk_edit.py:32 -#: virtualization/forms/bulk_edit.py:46 virtualization/forms/bulk_edit.py:100 -#: virtualization/forms/bulk_edit.py:177 virtualization/forms/bulk_edit.py:228 -#: virtualization/forms/bulk_edit.py:337 vpn/forms/bulk_edit.py:28 -#: vpn/forms/bulk_edit.py:64 vpn/forms/bulk_edit.py:121 -#: vpn/forms/bulk_edit.py:155 vpn/forms/bulk_edit.py:190 -#: vpn/forms/bulk_edit.py:215 vpn/forms/bulk_edit.py:247 -#: vpn/forms/bulk_edit.py:274 wireless/forms/bulk_edit.py:29 -#: wireless/forms/bulk_edit.py:82 wireless/forms/bulk_edit.py:140 +#: 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/templates/account/token.html:35 +#: netbox/templates/circuits/circuit.html:59 +#: netbox/templates/circuits/circuitgroup.html:32 +#: netbox/templates/circuits/circuittype.html:26 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:88 +#: netbox/templates/circuits/provider.html:33 +#: netbox/templates/circuits/providernetwork.html:32 +#: netbox/templates/core/datasource.html:54 +#: netbox/templates/core/plugin.html:80 netbox/templates/dcim/cable.html:36 +#: netbox/templates/dcim/consoleport.html:44 +#: netbox/templates/dcim/consoleserverport.html:44 +#: netbox/templates/dcim/device.html:94 +#: netbox/templates/dcim/devicebay.html:32 +#: netbox/templates/dcim/devicerole.html:30 +#: netbox/templates/dcim/devicetype.html:33 +#: netbox/templates/dcim/frontport.html:58 +#: netbox/templates/dcim/interface.html:69 +#: netbox/templates/dcim/inventoryitem.html:60 +#: netbox/templates/dcim/inventoryitemrole.html:22 +#: netbox/templates/dcim/location.html:33 +#: netbox/templates/dcim/manufacturer.html:40 +#: netbox/templates/dcim/module.html:73 +#: netbox/templates/dcim/modulebay.html:42 +#: netbox/templates/dcim/moduletype.html:37 +#: netbox/templates/dcim/platform.html:33 +#: netbox/templates/dcim/powerfeed.html:40 +#: netbox/templates/dcim/poweroutlet.html:40 +#: netbox/templates/dcim/powerpanel.html:30 +#: netbox/templates/dcim/powerport.html:40 netbox/templates/dcim/rack.html:53 +#: netbox/templates/dcim/rackreservation.html:62 +#: netbox/templates/dcim/rackrole.html:26 +#: netbox/templates/dcim/racktype.html:24 +#: netbox/templates/dcim/rearport.html:54 netbox/templates/dcim/region.html:33 +#: netbox/templates/dcim/site.html:60 netbox/templates/dcim/sitegroup.html:33 +#: netbox/templates/dcim/virtualchassis.html:31 +#: netbox/templates/extras/configcontext.html:21 +#: netbox/templates/extras/configtemplate.html:17 +#: netbox/templates/extras/customfield.html:34 +#: netbox/templates/extras/dashboard/widget_add.html:14 +#: netbox/templates/extras/eventrule.html:21 +#: netbox/templates/extras/exporttemplate.html:19 +#: netbox/templates/extras/notificationgroup.html:20 +#: netbox/templates/extras/savedfilter.html:17 +#: netbox/templates/extras/script_list.html:46 +#: netbox/templates/extras/tag.html:20 netbox/templates/extras/webhook.html:17 +#: netbox/templates/generic/bulk_import.html:120 +#: netbox/templates/ipam/aggregate.html:43 netbox/templates/ipam/asn.html:42 +#: netbox/templates/ipam/asnrange.html:38 +#: netbox/templates/ipam/fhrpgroup.html:34 +#: netbox/templates/ipam/ipaddress.html:55 +#: netbox/templates/ipam/iprange.html:67 netbox/templates/ipam/prefix.html:81 +#: netbox/templates/ipam/rir.html:26 netbox/templates/ipam/role.html:26 +#: netbox/templates/ipam/routetarget.html:21 +#: netbox/templates/ipam/service.html:50 +#: netbox/templates/ipam/servicetemplate.html:27 +#: netbox/templates/ipam/vlan.html:62 netbox/templates/ipam/vlangroup.html:34 +#: netbox/templates/ipam/vrf.html:33 netbox/templates/tenancy/contact.html:67 +#: netbox/templates/tenancy/contactgroup.html:25 +#: netbox/templates/tenancy/contactrole.html:22 +#: netbox/templates/tenancy/tenant.html:24 +#: netbox/templates/tenancy/tenantgroup.html:33 +#: netbox/templates/users/group.html:21 +#: netbox/templates/users/objectpermission.html:21 +#: netbox/templates/users/token.html:27 +#: netbox/templates/virtualization/cluster.html:25 +#: netbox/templates/virtualization/clustergroup.html:26 +#: netbox/templates/virtualization/clustertype.html:26 +#: netbox/templates/virtualization/virtualdisk.html:39 +#: netbox/templates/virtualization/virtualmachine.html:31 +#: netbox/templates/virtualization/vminterface.html:51 +#: netbox/templates/vpn/ikepolicy.html:17 +#: netbox/templates/vpn/ikeproposal.html:17 +#: netbox/templates/vpn/ipsecpolicy.html:17 +#: netbox/templates/vpn/ipsecprofile.html:17 +#: netbox/templates/vpn/ipsecprofile.html:40 +#: netbox/templates/vpn/ipsecprofile.html:73 +#: netbox/templates/vpn/ipsecproposal.html:17 +#: netbox/templates/vpn/l2vpn.html:26 netbox/templates/vpn/tunnel.html:33 +#: netbox/templates/vpn/tunnelgroup.html:30 +#: netbox/templates/wireless/wirelesslan.html:26 +#: netbox/templates/wireless/wirelesslangroup.html:33 +#: netbox/templates/wireless/wirelesslink.html:34 +#: netbox/tenancy/forms/bulk_edit.py:32 netbox/tenancy/forms/bulk_edit.py:80 +#: netbox/tenancy/forms/bulk_edit.py:122 netbox/users/forms/bulk_edit.py:64 +#: netbox/users/forms/bulk_edit.py:82 netbox/users/forms/bulk_edit.py:112 +#: netbox/virtualization/forms/bulk_edit.py:32 +#: netbox/virtualization/forms/bulk_edit.py:46 +#: netbox/virtualization/forms/bulk_edit.py:100 +#: netbox/virtualization/forms/bulk_edit.py:177 +#: netbox/virtualization/forms/bulk_edit.py:228 +#: netbox/virtualization/forms/bulk_edit.py:337 +#: netbox/vpn/forms/bulk_edit.py:28 netbox/vpn/forms/bulk_edit.py:64 +#: netbox/vpn/forms/bulk_edit.py:121 netbox/vpn/forms/bulk_edit.py:155 +#: netbox/vpn/forms/bulk_edit.py:190 netbox/vpn/forms/bulk_edit.py:215 +#: netbox/vpn/forms/bulk_edit.py:247 netbox/vpn/forms/bulk_edit.py:274 +#: netbox/wireless/forms/bulk_edit.py:29 netbox/wireless/forms/bulk_edit.py:82 +#: netbox/wireless/forms/bulk_edit.py:140 msgid "Description" msgstr "Description" -#: circuits/forms/bulk_edit.py:51 circuits/forms/bulk_edit.py:73 -#: circuits/forms/bulk_edit.py:123 circuits/forms/bulk_import.py:36 -#: circuits/forms/bulk_import.py:51 circuits/forms/bulk_import.py:74 -#: circuits/forms/filtersets.py:70 circuits/forms/filtersets.py:88 -#: circuits/forms/filtersets.py:116 circuits/forms/filtersets.py:131 -#: circuits/forms/filtersets.py:199 circuits/forms/filtersets.py:232 -#: circuits/forms/filtersets.py:255 circuits/forms/model_forms.py:47 -#: circuits/forms/model_forms.py:61 circuits/forms/model_forms.py:93 -#: circuits/tables/circuits.py:58 circuits/tables/circuits.py:108 -#: circuits/tables/circuits.py:160 circuits/tables/providers.py:72 -#: circuits/tables/providers.py:103 templates/circuits/circuit.html:18 -#: templates/circuits/circuittermination.html:25 -#: templates/circuits/provider.html:20 -#: templates/circuits/provideraccount.html:20 -#: templates/circuits/providernetwork.html:20 -#: templates/dcim/inc/cable_termination.html:51 +#: netbox/circuits/forms/bulk_edit.py: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/templates/circuits/circuit.html:18 +#: netbox/templates/circuits/circuittermination.html:25 +#: netbox/templates/circuits/provider.html:20 +#: netbox/templates/circuits/provideraccount.html:20 +#: netbox/templates/circuits/providernetwork.html:20 +#: netbox/templates/dcim/inc/cable_termination.html:51 msgid "Provider" msgstr "Prestataire" -#: circuits/forms/bulk_edit.py:80 circuits/forms/filtersets.py:91 -#: templates/circuits/providernetwork.html:28 +#: netbox/circuits/forms/bulk_edit.py:80 +#: netbox/circuits/forms/filtersets.py:91 +#: netbox/templates/circuits/providernetwork.html:28 msgid "Service ID" msgstr "Identifiant du service" -#: circuits/forms/bulk_edit.py:100 circuits/forms/filtersets.py:107 -#: dcim/forms/bulk_edit.py:206 dcim/forms/bulk_edit.py:604 -#: dcim/forms/bulk_edit.py:804 dcim/forms/bulk_edit.py:1173 -#: dcim/forms/bulk_edit.py:1200 dcim/forms/bulk_edit.py:1678 -#: dcim/forms/filtersets.py:1064 dcim/forms/filtersets.py:1455 -#: dcim/forms/filtersets.py:1479 dcim/tables/devices.py:704 -#: dcim/tables/devices.py:761 dcim/tables/devices.py:1003 -#: dcim/tables/devicetypes.py:249 dcim/tables/devicetypes.py:264 -#: dcim/tables/racks.py:33 extras/forms/bulk_edit.py:270 -#: extras/tables/tables.py:443 templates/circuits/circuittype.html:30 -#: templates/dcim/cable.html:40 templates/dcim/devicerole.html:34 -#: templates/dcim/frontport.html:40 templates/dcim/inventoryitemrole.html:26 -#: templates/dcim/rackrole.html:30 templates/dcim/rearport.html:40 -#: templates/extras/tag.html:26 +#: netbox/circuits/forms/bulk_edit.py: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/templates/circuits/circuittype.html:30 +#: netbox/templates/dcim/cable.html:40 +#: netbox/templates/dcim/devicerole.html:34 +#: netbox/templates/dcim/frontport.html:40 +#: netbox/templates/dcim/inventoryitemrole.html:26 +#: netbox/templates/dcim/rackrole.html:30 +#: netbox/templates/dcim/rearport.html:40 netbox/templates/extras/tag.html:26 msgid "Color" msgstr "Couleur" -#: circuits/forms/bulk_edit.py:118 circuits/forms/bulk_import.py:87 -#: circuits/forms/filtersets.py:126 core/forms/bulk_edit.py:18 -#: core/forms/filtersets.py:33 core/tables/change_logging.py:32 -#: core/tables/data.py:20 core/tables/jobs.py:18 dcim/forms/bulk_edit.py:782 -#: dcim/forms/bulk_edit.py:921 dcim/forms/bulk_edit.py:989 -#: dcim/forms/bulk_edit.py:1008 dcim/forms/bulk_edit.py:1031 -#: dcim/forms/bulk_edit.py:1073 dcim/forms/bulk_edit.py:1117 -#: dcim/forms/bulk_edit.py:1168 dcim/forms/bulk_edit.py:1195 -#: dcim/forms/bulk_import.py:188 dcim/forms/bulk_import.py:260 -#: dcim/forms/bulk_import.py:708 dcim/forms/bulk_import.py:734 -#: dcim/forms/bulk_import.py:760 dcim/forms/bulk_import.py:780 -#: dcim/forms/bulk_import.py:863 dcim/forms/bulk_import.py:957 -#: dcim/forms/bulk_import.py:999 dcim/forms/bulk_import.py:1213 -#: dcim/forms/bulk_import.py:1376 dcim/forms/filtersets.py:955 -#: dcim/forms/filtersets.py:1054 dcim/forms/filtersets.py:1175 -#: dcim/forms/filtersets.py:1247 dcim/forms/filtersets.py:1272 -#: dcim/forms/filtersets.py:1296 dcim/forms/filtersets.py:1316 -#: dcim/forms/filtersets.py:1353 dcim/forms/filtersets.py:1450 -#: dcim/forms/filtersets.py:1474 dcim/forms/model_forms.py:703 -#: dcim/forms/model_forms.py:709 dcim/forms/object_import.py:84 -#: dcim/forms/object_import.py:113 dcim/forms/object_import.py:145 -#: dcim/tables/devices.py:178 dcim/tables/devices.py:814 -#: dcim/tables/power.py:77 dcim/tables/racks.py:138 -#: extras/forms/bulk_import.py:42 extras/tables/tables.py:405 -#: extras/tables/tables.py:465 netbox/tables/tables.py:240 -#: templates/circuits/circuit.html:30 templates/core/datasource.html:38 -#: templates/dcim/cable.html:15 templates/dcim/consoleport.html:36 -#: templates/dcim/consoleserverport.html:36 templates/dcim/frontport.html:36 -#: templates/dcim/interface.html:46 templates/dcim/interface.html:169 -#: templates/dcim/interface.html:311 templates/dcim/powerfeed.html:32 -#: templates/dcim/poweroutlet.html:36 templates/dcim/powerport.html:36 -#: templates/dcim/rearport.html:36 templates/extras/eventrule.html:74 -#: templates/virtualization/cluster.html:17 templates/vpn/l2vpn.html:22 -#: templates/wireless/inc/authentication_attrs.html:8 -#: templates/wireless/inc/wirelesslink_interface.html:14 -#: virtualization/forms/bulk_edit.py:60 virtualization/forms/bulk_import.py:41 -#: virtualization/forms/filtersets.py:54 -#: virtualization/forms/model_forms.py:62 virtualization/tables/clusters.py:66 -#: vpn/forms/bulk_edit.py:264 vpn/forms/bulk_import.py:264 -#: vpn/forms/filtersets.py:217 vpn/forms/model_forms.py:84 -#: vpn/forms/model_forms.py:119 vpn/forms/model_forms.py:231 +#: netbox/circuits/forms/bulk_edit.py: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/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/core/datasource.html:38 +#: netbox/templates/dcim/cable.html:15 +#: netbox/templates/dcim/consoleport.html:36 +#: netbox/templates/dcim/consoleserverport.html:36 +#: netbox/templates/dcim/frontport.html:36 +#: netbox/templates/dcim/interface.html:46 +#: netbox/templates/dcim/interface.html:169 +#: netbox/templates/dcim/interface.html:311 +#: netbox/templates/dcim/powerfeed.html:32 +#: netbox/templates/dcim/poweroutlet.html:36 +#: netbox/templates/dcim/powerport.html:36 +#: netbox/templates/dcim/rearport.html:36 +#: netbox/templates/extras/eventrule.html:74 +#: netbox/templates/virtualization/cluster.html:17 +#: netbox/templates/vpn/l2vpn.html:22 +#: netbox/templates/wireless/inc/authentication_attrs.html:8 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:14 +#: netbox/virtualization/forms/bulk_edit.py:60 +#: netbox/virtualization/forms/bulk_import.py:41 +#: netbox/virtualization/forms/filtersets.py:54 +#: netbox/virtualization/forms/model_forms.py:62 +#: netbox/virtualization/tables/clusters.py:66 +#: netbox/vpn/forms/bulk_edit.py:264 netbox/vpn/forms/bulk_import.py:264 +#: netbox/vpn/forms/filtersets.py:217 netbox/vpn/forms/model_forms.py:84 +#: netbox/vpn/forms/model_forms.py:119 netbox/vpn/forms/model_forms.py:231 msgid "Type" msgstr "Type" -#: circuits/forms/bulk_edit.py:128 circuits/forms/bulk_import.py:80 -#: circuits/forms/filtersets.py:139 circuits/forms/model_forms.py:98 +#: 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 msgid "Provider account" msgstr "Identifiant de compte du prestataire" -#: circuits/forms/bulk_edit.py:136 circuits/forms/bulk_import.py:93 -#: circuits/forms/filtersets.py:150 core/forms/filtersets.py:38 -#: core/forms/filtersets.py:79 core/tables/data.py:23 core/tables/jobs.py:26 -#: core/tables/tasks.py:88 dcim/forms/bulk_edit.py:106 -#: dcim/forms/bulk_edit.py:181 dcim/forms/bulk_edit.py:351 -#: dcim/forms/bulk_edit.py:700 dcim/forms/bulk_edit.py:756 -#: dcim/forms/bulk_edit.py:788 dcim/forms/bulk_edit.py:915 -#: dcim/forms/bulk_edit.py:1701 dcim/forms/bulk_import.py:88 -#: dcim/forms/bulk_import.py:147 dcim/forms/bulk_import.py:248 -#: dcim/forms/bulk_import.py:505 dcim/forms/bulk_import.py:659 -#: dcim/forms/bulk_import.py:1207 dcim/forms/bulk_import.py:1371 -#: dcim/forms/bulk_import.py:1435 dcim/forms/filtersets.py:178 -#: dcim/forms/filtersets.py:237 dcim/forms/filtersets.py:359 -#: dcim/forms/filtersets.py:799 dcim/forms/filtersets.py:924 -#: dcim/forms/filtersets.py:958 dcim/forms/filtersets.py:1059 -#: dcim/forms/filtersets.py:1170 dcim/tables/devices.py:140 -#: dcim/tables/devices.py:817 dcim/tables/devices.py:1063 -#: dcim/tables/modules.py:69 dcim/tables/power.py:74 dcim/tables/racks.py:126 -#: dcim/tables/sites.py:82 dcim/tables/sites.py:138 -#: ipam/forms/bulk_edit.py:256 ipam/forms/bulk_edit.py:306 -#: ipam/forms/bulk_edit.py:354 ipam/forms/bulk_edit.py:506 -#: ipam/forms/bulk_import.py:192 ipam/forms/bulk_import.py:257 -#: ipam/forms/bulk_import.py:293 ipam/forms/bulk_import.py:450 -#: ipam/forms/filtersets.py:210 ipam/forms/filtersets.py:281 -#: ipam/forms/filtersets.py:355 ipam/forms/filtersets.py:501 -#: ipam/forms/model_forms.py:468 ipam/tables/ip.py:237 ipam/tables/ip.py:312 -#: ipam/tables/ip.py:363 ipam/tables/ip.py:426 ipam/tables/ip.py:453 -#: ipam/tables/vlans.py:126 ipam/tables/vlans.py:232 -#: templates/circuits/circuit.html:34 templates/core/datasource.html:46 -#: templates/core/job.html:48 templates/core/rq_task.html:81 -#: templates/core/system.html:18 templates/dcim/cable.html:19 -#: templates/dcim/device.html:178 templates/dcim/location.html:45 -#: templates/dcim/module.html:69 templates/dcim/powerfeed.html:36 -#: templates/dcim/rack.html:41 templates/dcim/site.html:43 -#: templates/extras/script_list.html:47 templates/ipam/ipaddress.html:37 -#: templates/ipam/iprange.html:54 templates/ipam/prefix.html:73 -#: templates/ipam/vlan.html:48 templates/virtualization/cluster.html:21 -#: templates/virtualization/virtualmachine.html:19 -#: templates/vpn/tunnel.html:25 templates/wireless/wirelesslan.html:22 -#: templates/wireless/wirelesslink.html:17 users/forms/filtersets.py:32 -#: users/forms/model_forms.py:194 virtualization/forms/bulk_edit.py:70 -#: virtualization/forms/bulk_edit.py:118 -#: virtualization/forms/bulk_import.py:54 -#: virtualization/forms/bulk_import.py:80 -#: virtualization/forms/filtersets.py:62 -#: virtualization/forms/filtersets.py:160 virtualization/tables/clusters.py:74 -#: virtualization/tables/virtualmachines.py:60 vpn/forms/bulk_edit.py:39 -#: vpn/forms/bulk_import.py:37 vpn/forms/filtersets.py:47 -#: vpn/tables/tunnels.py:48 wireless/forms/bulk_edit.py:43 -#: wireless/forms/bulk_edit.py:105 wireless/forms/bulk_import.py:43 -#: wireless/forms/bulk_import.py:84 wireless/forms/filtersets.py:49 -#: wireless/forms/filtersets.py:83 wireless/tables/wirelesslan.py:52 -#: wireless/tables/wirelesslink.py:20 +#: 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/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/templates/circuits/circuit.html:34 +#: 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/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/vlan.html:48 +#: netbox/templates/virtualization/cluster.html:21 +#: netbox/templates/virtualization/virtualmachine.html:19 +#: netbox/templates/vpn/tunnel.html:25 +#: netbox/templates/wireless/wirelesslan.html:22 +#: netbox/templates/wireless/wirelesslink.html:17 +#: netbox/users/forms/filtersets.py: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/tables/clusters.py:74 +#: netbox/virtualization/tables/virtualmachines.py:60 +#: netbox/vpn/forms/bulk_edit.py:39 netbox/vpn/forms/bulk_import.py:37 +#: netbox/vpn/forms/filtersets.py:47 netbox/vpn/tables/tunnels.py:48 +#: netbox/wireless/forms/bulk_edit.py:43 +#: netbox/wireless/forms/bulk_edit.py:105 +#: netbox/wireless/forms/bulk_import.py:43 +#: netbox/wireless/forms/bulk_import.py:84 +#: netbox/wireless/forms/filtersets.py:49 +#: netbox/wireless/forms/filtersets.py:83 +#: netbox/wireless/tables/wirelesslan.py:52 +#: netbox/wireless/tables/wirelesslink.py:20 msgid "Status" msgstr "Statut" -#: circuits/forms/bulk_edit.py:142 circuits/forms/bulk_edit.py:233 -#: circuits/forms/bulk_import.py:98 circuits/forms/bulk_import.py:158 -#: circuits/forms/filtersets.py:119 circuits/forms/filtersets.py:241 -#: dcim/forms/bulk_edit.py:122 dcim/forms/bulk_edit.py:187 -#: dcim/forms/bulk_edit.py:346 dcim/forms/bulk_edit.py:461 -#: dcim/forms/bulk_edit.py:690 dcim/forms/bulk_edit.py:794 -#: dcim/forms/bulk_edit.py:1706 dcim/forms/bulk_import.py:107 -#: dcim/forms/bulk_import.py:152 dcim/forms/bulk_import.py:241 -#: dcim/forms/bulk_import.py:334 dcim/forms/bulk_import.py:479 -#: dcim/forms/bulk_import.py:1219 dcim/forms/bulk_import.py:1428 -#: dcim/forms/filtersets.py:173 dcim/forms/filtersets.py:205 -#: dcim/forms/filtersets.py:323 dcim/forms/filtersets.py:399 -#: dcim/forms/filtersets.py:420 dcim/forms/filtersets.py:722 -#: dcim/forms/filtersets.py:916 dcim/forms/filtersets.py:978 -#: dcim/forms/filtersets.py:1008 dcim/forms/filtersets.py:1130 -#: dcim/tables/power.py:88 extras/filtersets.py:612 -#: extras/forms/filtersets.py:323 extras/forms/filtersets.py:396 -#: ipam/forms/bulk_edit.py:43 ipam/forms/bulk_edit.py:68 -#: ipam/forms/bulk_edit.py:112 ipam/forms/bulk_edit.py:141 -#: ipam/forms/bulk_edit.py:166 ipam/forms/bulk_edit.py:251 -#: ipam/forms/bulk_edit.py:301 ipam/forms/bulk_edit.py:349 -#: ipam/forms/bulk_edit.py:501 ipam/forms/bulk_import.py:38 -#: ipam/forms/bulk_import.py:67 ipam/forms/bulk_import.py:95 -#: ipam/forms/bulk_import.py:115 ipam/forms/bulk_import.py:135 -#: ipam/forms/bulk_import.py:164 ipam/forms/bulk_import.py:250 -#: ipam/forms/bulk_import.py:286 ipam/forms/bulk_import.py:443 -#: ipam/forms/filtersets.py:48 ipam/forms/filtersets.py:68 -#: ipam/forms/filtersets.py:100 ipam/forms/filtersets.py:120 -#: ipam/forms/filtersets.py:143 ipam/forms/filtersets.py:174 -#: ipam/forms/filtersets.py:267 ipam/forms/filtersets.py:310 -#: ipam/forms/filtersets.py:469 ipam/tables/ip.py:456 ipam/tables/vlans.py:229 -#: templates/circuits/circuit.html:38 templates/circuits/circuitgroup.html:36 -#: templates/dcim/cable.html:23 templates/dcim/device.html:79 -#: templates/dcim/location.html:49 templates/dcim/powerfeed.html:44 -#: templates/dcim/rack.html:32 templates/dcim/rackreservation.html:49 -#: templates/dcim/site.html:47 templates/dcim/virtualdevicecontext.html:52 -#: templates/ipam/aggregate.html:30 templates/ipam/asn.html:33 -#: templates/ipam/asnrange.html:29 templates/ipam/ipaddress.html:28 -#: templates/ipam/iprange.html:58 templates/ipam/prefix.html:29 -#: templates/ipam/routetarget.html:17 templates/ipam/vlan.html:39 -#: templates/ipam/vrf.html:20 templates/tenancy/tenant.html:17 -#: templates/virtualization/cluster.html:33 -#: templates/virtualization/virtualmachine.html:39 templates/vpn/l2vpn.html:30 -#: templates/vpn/tunnel.html:49 templates/wireless/wirelesslan.html:34 -#: templates/wireless/wirelesslink.html:25 tenancy/forms/forms.py:25 -#: tenancy/forms/forms.py:48 tenancy/forms/model_forms.py:52 -#: tenancy/tables/columns.py:64 virtualization/forms/bulk_edit.py:76 -#: virtualization/forms/bulk_edit.py:155 -#: virtualization/forms/bulk_import.py:66 -#: virtualization/forms/bulk_import.py:115 -#: virtualization/forms/filtersets.py:47 -#: virtualization/forms/filtersets.py:105 vpn/forms/bulk_edit.py:59 -#: vpn/forms/bulk_edit.py:269 vpn/forms/bulk_import.py:59 -#: vpn/forms/bulk_import.py:258 vpn/forms/filtersets.py:214 -#: wireless/forms/bulk_edit.py:63 wireless/forms/bulk_edit.py:110 -#: wireless/forms/bulk_import.py:55 wireless/forms/bulk_import.py:97 -#: wireless/forms/filtersets.py:35 wireless/forms/filtersets.py:75 +#: netbox/circuits/forms/bulk_edit.py: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/templates/circuits/circuitgroup.html:36 +#: 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 +#: netbox/templates/dcim/rackreservation.html:49 +#: netbox/templates/dcim/site.html:47 +#: netbox/templates/dcim/virtualdevicecontext.html:52 +#: netbox/templates/ipam/aggregate.html:30 netbox/templates/ipam/asn.html:33 +#: netbox/templates/ipam/asnrange.html:29 +#: netbox/templates/ipam/ipaddress.html:28 +#: netbox/templates/ipam/iprange.html:58 netbox/templates/ipam/prefix.html:29 +#: netbox/templates/ipam/routetarget.html:17 +#: netbox/templates/ipam/vlan.html:39 netbox/templates/ipam/vrf.html:20 +#: netbox/templates/tenancy/tenant.html:17 +#: netbox/templates/virtualization/cluster.html:33 +#: netbox/templates/virtualization/virtualmachine.html:39 +#: netbox/templates/vpn/l2vpn.html:30 netbox/templates/vpn/tunnel.html:49 +#: netbox/templates/wireless/wirelesslan.html:34 +#: netbox/templates/wireless/wirelesslink.html:25 +#: netbox/tenancy/forms/forms.py:25 netbox/tenancy/forms/forms.py:48 +#: netbox/tenancy/forms/model_forms.py:52 netbox/tenancy/tables/columns.py:64 +#: netbox/virtualization/forms/bulk_edit.py:76 +#: netbox/virtualization/forms/bulk_edit.py:155 +#: netbox/virtualization/forms/bulk_import.py:66 +#: netbox/virtualization/forms/bulk_import.py:115 +#: netbox/virtualization/forms/filtersets.py:47 +#: netbox/virtualization/forms/filtersets.py:105 +#: netbox/vpn/forms/bulk_edit.py:59 netbox/vpn/forms/bulk_edit.py:269 +#: netbox/vpn/forms/bulk_import.py:59 netbox/vpn/forms/bulk_import.py:258 +#: netbox/vpn/forms/filtersets.py:214 netbox/wireless/forms/bulk_edit.py:63 +#: netbox/wireless/forms/bulk_edit.py:110 +#: netbox/wireless/forms/bulk_import.py:55 +#: netbox/wireless/forms/bulk_import.py:97 +#: netbox/wireless/forms/filtersets.py:35 +#: netbox/wireless/forms/filtersets.py:75 msgid "Tenant" msgstr "Entité" -#: circuits/forms/bulk_edit.py:147 circuits/forms/filtersets.py:174 +#: netbox/circuits/forms/bulk_edit.py:147 +#: netbox/circuits/forms/filtersets.py:174 msgid "Install date" msgstr "Date d'installation" -#: circuits/forms/bulk_edit.py:152 circuits/forms/filtersets.py:179 +#: netbox/circuits/forms/bulk_edit.py:152 +#: netbox/circuits/forms/filtersets.py:179 msgid "Termination date" msgstr "Date de résiliation" -#: circuits/forms/bulk_edit.py:158 circuits/forms/filtersets.py:186 +#: netbox/circuits/forms/bulk_edit.py:158 +#: netbox/circuits/forms/filtersets.py:186 msgid "Commit rate (Kbps)" msgstr "Débit engagé (Kbits/s)" -#: circuits/forms/bulk_edit.py:173 circuits/forms/model_forms.py:112 +#: netbox/circuits/forms/bulk_edit.py:173 +#: netbox/circuits/forms/model_forms.py:112 msgid "Service Parameters" msgstr "Paramètres du service" -#: circuits/forms/bulk_edit.py:174 circuits/forms/model_forms.py:113 -#: circuits/forms/model_forms.py:183 dcim/forms/model_forms.py:139 -#: dcim/forms/model_forms.py:181 dcim/forms/model_forms.py:266 -#: dcim/forms/model_forms.py:323 dcim/forms/model_forms.py:768 -#: dcim/forms/model_forms.py:1692 ipam/forms/model_forms.py:64 -#: ipam/forms/model_forms.py:81 ipam/forms/model_forms.py:115 -#: ipam/forms/model_forms.py:136 ipam/forms/model_forms.py:160 -#: ipam/forms/model_forms.py:232 ipam/forms/model_forms.py:261 -#: ipam/forms/model_forms.py:316 netbox/navigation/menu.py:24 -#: templates/dcim/device_edit.html:85 templates/dcim/htmx/cable_edit.html:72 -#: templates/ipam/ipaddress_bulk_add.html:27 templates/ipam/vlan_edit.html:22 -#: virtualization/forms/model_forms.py:80 -#: virtualization/forms/model_forms.py:222 vpn/forms/bulk_edit.py:78 -#: vpn/forms/filtersets.py:44 vpn/forms/model_forms.py:62 -#: vpn/forms/model_forms.py:147 vpn/forms/model_forms.py:411 -#: wireless/forms/model_forms.py:54 wireless/forms/model_forms.py:170 +#: 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/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/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 msgid "Tenancy" msgstr "Utilisateur" -#: circuits/forms/bulk_edit.py:193 circuits/forms/bulk_edit.py:217 -#: circuits/forms/model_forms.py:155 circuits/tables/circuits.py:117 -#: templates/circuits/inc/circuit_termination_fields.html:62 -#: templates/circuits/providernetwork.html:17 +#: 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" -#: circuits/forms/bulk_edit.py:199 +#: netbox/circuits/forms/bulk_edit.py:199 msgid "Port speed (Kbps)" msgstr "Vitesse du port (Kbits/s)" -#: circuits/forms/bulk_edit.py:203 +#: netbox/circuits/forms/bulk_edit.py:203 msgid "Upstream speed (Kbps)" msgstr "Vitesse ascendante (Kbits/s)" -#: circuits/forms/bulk_edit.py:206 dcim/forms/bulk_edit.py:951 -#: dcim/forms/bulk_edit.py:1315 dcim/forms/bulk_edit.py:1332 -#: dcim/forms/bulk_edit.py:1349 dcim/forms/bulk_edit.py:1367 -#: dcim/forms/bulk_edit.py:1455 dcim/forms/bulk_edit.py:1594 -#: dcim/forms/bulk_edit.py:1611 +#: 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 msgid "Mark connected" msgstr "Marquer comme connecté" -#: circuits/forms/bulk_edit.py:219 circuits/forms/model_forms.py:157 -#: templates/circuits/inc/circuit_termination_fields.html:54 -#: templates/dcim/frontport.html:121 templates/dcim/interface.html:193 -#: templates/dcim/rearport.html:111 +#: netbox/circuits/forms/bulk_edit.py:219 +#: netbox/circuits/forms/model_forms.py:157 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:54 +#: netbox/templates/dcim/frontport.html:121 +#: netbox/templates/dcim/interface.html:193 +#: netbox/templates/dcim/rearport.html:111 msgid "Circuit Termination" msgstr "Terminaison de circuit" -#: circuits/forms/bulk_edit.py:221 circuits/forms/model_forms.py:159 +#: netbox/circuits/forms/bulk_edit.py:221 +#: netbox/circuits/forms/model_forms.py:159 msgid "Termination Details" msgstr "Détails de terminaison" -#: circuits/forms/bulk_edit.py:251 circuits/forms/filtersets.py:268 -#: circuits/tables/circuits.py:168 dcim/forms/model_forms.py:551 -#: templates/circuits/circuitgroupassignment.html:30 -#: templates/dcim/device.html:133 templates/dcim/virtualchassis.html:68 -#: templates/dcim/virtualchassis_edit.html:56 -#: templates/ipam/inc/panels/fhrp_groups.html:26 -#: tenancy/forms/bulk_edit.py:147 tenancy/forms/filtersets.py:110 +#: netbox/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/templates/dcim/device.html:133 +#: netbox/templates/dcim/virtualchassis.html:68 +#: netbox/templates/dcim/virtualchassis_edit.html:56 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:26 +#: netbox/tenancy/forms/bulk_edit.py:147 +#: netbox/tenancy/forms/filtersets.py:110 msgid "Priority" msgstr "Priorité" -#: circuits/forms/bulk_import.py:39 circuits/forms/bulk_import.py:54 -#: circuits/forms/bulk_import.py:77 +#: 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é" -#: circuits/forms/bulk_import.py:83 +#: netbox/circuits/forms/bulk_import.py:83 msgid "Assigned provider account" msgstr "Compte opérateur associé" -#: circuits/forms/bulk_import.py:90 +#: netbox/circuits/forms/bulk_import.py:90 msgid "Type of circuit" msgstr "Type de circuit" -#: circuits/forms/bulk_import.py:95 dcim/forms/bulk_import.py:90 -#: dcim/forms/bulk_import.py:149 dcim/forms/bulk_import.py:250 -#: dcim/forms/bulk_import.py:507 dcim/forms/bulk_import.py:661 -#: dcim/forms/bulk_import.py:1373 ipam/forms/bulk_import.py:194 -#: ipam/forms/bulk_import.py:259 ipam/forms/bulk_import.py:295 -#: ipam/forms/bulk_import.py:452 virtualization/forms/bulk_import.py:56 -#: virtualization/forms/bulk_import.py:82 vpn/forms/bulk_import.py:39 -#: wireless/forms/bulk_import.py:45 +#: netbox/circuits/forms/bulk_import.py: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" -#: circuits/forms/bulk_import.py:102 circuits/forms/bulk_import.py:162 -#: dcim/forms/bulk_import.py:111 dcim/forms/bulk_import.py:156 -#: dcim/forms/bulk_import.py:338 dcim/forms/bulk_import.py:483 -#: dcim/forms/bulk_import.py:1223 dcim/forms/bulk_import.py:1368 -#: dcim/forms/bulk_import.py:1432 ipam/forms/bulk_import.py:42 -#: ipam/forms/bulk_import.py:71 ipam/forms/bulk_import.py:99 -#: ipam/forms/bulk_import.py:119 ipam/forms/bulk_import.py:139 -#: ipam/forms/bulk_import.py:168 ipam/forms/bulk_import.py:254 -#: ipam/forms/bulk_import.py:290 ipam/forms/bulk_import.py:447 -#: virtualization/forms/bulk_import.py:70 -#: virtualization/forms/bulk_import.py:119 vpn/forms/bulk_import.py:63 -#: wireless/forms/bulk_import.py:59 wireless/forms/bulk_import.py:101 +#: netbox/circuits/forms/bulk_import.py: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 "Locataire associé" -#: circuits/forms/bulk_import.py:120 -#: templates/circuits/inc/circuit_termination.html:6 -#: templates/circuits/inc/circuit_termination_fields.html:15 -#: templates/dcim/cable.html:68 templates/dcim/cable.html:72 -#: vpn/forms/bulk_import.py:100 vpn/forms/filtersets.py:77 +#: netbox/circuits/forms/bulk_import.py: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" -#: circuits/forms/bulk_import.py:130 circuits/forms/filtersets.py:147 -#: circuits/forms/filtersets.py:227 circuits/forms/model_forms.py:144 +#: 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 msgid "Provider network" msgstr "Réseau de fournisseurs" -#: circuits/forms/filtersets.py:30 circuits/forms/filtersets.py:118 -#: circuits/forms/filtersets.py:200 dcim/forms/bulk_edit.py:338 -#: dcim/forms/bulk_edit.py:441 dcim/forms/bulk_edit.py:682 -#: dcim/forms/bulk_edit.py:729 dcim/forms/bulk_edit.py:882 -#: dcim/forms/bulk_import.py:235 dcim/forms/bulk_import.py:315 -#: dcim/forms/bulk_import.py:546 dcim/forms/bulk_import.py:1317 -#: dcim/forms/bulk_import.py:1351 dcim/forms/filtersets.py:95 -#: dcim/forms/filtersets.py:322 dcim/forms/filtersets.py:356 -#: dcim/forms/filtersets.py:396 dcim/forms/filtersets.py:447 -#: dcim/forms/filtersets.py:719 dcim/forms/filtersets.py:762 -#: dcim/forms/filtersets.py:977 dcim/forms/filtersets.py:1006 -#: dcim/forms/filtersets.py:1026 dcim/forms/filtersets.py:1090 -#: dcim/forms/filtersets.py:1120 dcim/forms/filtersets.py:1129 -#: dcim/forms/filtersets.py:1240 dcim/forms/filtersets.py:1264 -#: dcim/forms/filtersets.py:1289 dcim/forms/filtersets.py:1308 -#: dcim/forms/filtersets.py:1331 dcim/forms/filtersets.py:1442 -#: dcim/forms/filtersets.py:1466 dcim/forms/filtersets.py:1490 -#: dcim/forms/filtersets.py:1508 dcim/forms/filtersets.py:1525 -#: dcim/forms/model_forms.py:180 dcim/forms/model_forms.py:243 -#: dcim/forms/model_forms.py:468 dcim/forms/model_forms.py:728 -#: dcim/tables/devices.py:157 dcim/tables/power.py:30 dcim/tables/racks.py:118 -#: dcim/tables/racks.py:212 extras/filtersets.py:536 -#: extras/forms/filtersets.py:320 ipam/forms/filtersets.py:173 -#: ipam/forms/filtersets.py:414 ipam/forms/filtersets.py:437 -#: ipam/forms/filtersets.py:467 templates/dcim/device.html:26 -#: templates/dcim/device_edit.html:30 -#: templates/dcim/inc/cable_termination.html:12 -#: templates/dcim/location.html:26 templates/dcim/powerpanel.html:26 -#: templates/dcim/rack.html:24 templates/dcim/rackreservation.html:32 -#: virtualization/forms/filtersets.py:46 -#: virtualization/forms/filtersets.py:100 wireless/forms/model_forms.py:87 -#: wireless/forms/model_forms.py:129 +#: netbox/circuits/forms/filtersets.py: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/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 msgid "Location" msgstr "Emplacement" -#: circuits/forms/filtersets.py:32 circuits/forms/filtersets.py:120 -#: dcim/forms/filtersets.py:144 dcim/forms/filtersets.py:158 -#: dcim/forms/filtersets.py:174 dcim/forms/filtersets.py:206 -#: dcim/forms/filtersets.py:328 dcim/forms/filtersets.py:400 -#: dcim/forms/filtersets.py:471 dcim/forms/filtersets.py:723 -#: dcim/forms/filtersets.py:1091 netbox/navigation/menu.py:31 -#: netbox/navigation/menu.py:33 tenancy/forms/filtersets.py:42 -#: tenancy/tables/columns.py:70 tenancy/tables/contacts.py:25 -#: tenancy/views.py:19 virtualization/forms/filtersets.py:37 -#: virtualization/forms/filtersets.py:48 -#: virtualization/forms/filtersets.py:106 +#: netbox/circuits/forms/filtersets.py: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/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/tables/contacts.py:25 netbox/tenancy/views.py:19 +#: netbox/virtualization/forms/filtersets.py:37 +#: netbox/virtualization/forms/filtersets.py:48 +#: netbox/virtualization/forms/filtersets.py:106 msgid "Contacts" msgstr "Contacts" -#: circuits/forms/filtersets.py:37 circuits/forms/filtersets.py:157 -#: dcim/forms/bulk_edit.py:112 dcim/forms/bulk_edit.py:313 -#: dcim/forms/bulk_edit.py:857 dcim/forms/bulk_import.py:93 -#: dcim/forms/filtersets.py:73 dcim/forms/filtersets.py:185 -#: dcim/forms/filtersets.py:211 dcim/forms/filtersets.py:334 -#: dcim/forms/filtersets.py:425 dcim/forms/filtersets.py:739 -#: dcim/forms/filtersets.py:983 dcim/forms/filtersets.py:1013 -#: dcim/forms/filtersets.py:1097 dcim/forms/filtersets.py:1136 -#: dcim/forms/filtersets.py:1576 dcim/forms/filtersets.py:1600 -#: dcim/forms/filtersets.py:1624 dcim/forms/model_forms.py:112 -#: dcim/forms/object_create.py:375 dcim/tables/devices.py:143 -#: dcim/tables/sites.py:85 extras/filtersets.py:503 -#: ipam/forms/bulk_edit.py:208 ipam/forms/bulk_edit.py:474 -#: ipam/forms/filtersets.py:217 ipam/forms/filtersets.py:422 -#: ipam/forms/filtersets.py:475 templates/dcim/device.html:18 -#: templates/dcim/rack.html:16 templates/dcim/rackreservation.html:22 -#: templates/dcim/region.html:26 templates/dcim/site.html:31 -#: templates/ipam/prefix.html:49 templates/ipam/vlan.html:16 -#: virtualization/forms/bulk_edit.py:81 virtualization/forms/filtersets.py:59 -#: virtualization/forms/filtersets.py:133 -#: virtualization/forms/model_forms.py:92 vpn/forms/filtersets.py:257 +#: netbox/circuits/forms/filtersets.py: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/templates/dcim/rackreservation.html:22 +#: netbox/templates/dcim/region.html:26 netbox/templates/dcim/site.html:31 +#: netbox/templates/ipam/prefix.html:49 netbox/templates/ipam/vlan.html:16 +#: netbox/virtualization/forms/bulk_edit.py:81 +#: netbox/virtualization/forms/filtersets.py:59 +#: netbox/virtualization/forms/filtersets.py:133 +#: netbox/virtualization/forms/model_forms.py:92 +#: netbox/vpn/forms/filtersets.py:257 msgid "Region" msgstr "Région" -#: circuits/forms/filtersets.py:42 circuits/forms/filtersets.py:162 -#: dcim/forms/bulk_edit.py:321 dcim/forms/bulk_edit.py:865 -#: dcim/forms/filtersets.py:78 dcim/forms/filtersets.py:190 -#: dcim/forms/filtersets.py:216 dcim/forms/filtersets.py:347 -#: dcim/forms/filtersets.py:430 dcim/forms/filtersets.py:744 -#: dcim/forms/filtersets.py:988 dcim/forms/filtersets.py:1102 -#: dcim/forms/filtersets.py:1141 dcim/forms/object_create.py:383 -#: extras/filtersets.py:520 ipam/forms/bulk_edit.py:213 -#: ipam/forms/bulk_edit.py:479 ipam/forms/filtersets.py:222 -#: ipam/forms/filtersets.py:427 ipam/forms/filtersets.py:480 -#: virtualization/forms/bulk_edit.py:86 virtualization/forms/filtersets.py:69 -#: virtualization/forms/filtersets.py:138 -#: virtualization/forms/model_forms.py:98 +#: netbox/circuits/forms/filtersets.py: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/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 msgid "Site group" msgstr "Groupe de sites" -#: circuits/forms/filtersets.py:65 circuits/forms/filtersets.py:83 -#: circuits/forms/filtersets.py:102 circuits/forms/filtersets.py:117 -#: core/forms/filtersets.py:67 core/forms/filtersets.py:135 -#: dcim/forms/bulk_edit.py:828 dcim/forms/filtersets.py:172 -#: dcim/forms/filtersets.py:204 dcim/forms/filtersets.py:915 -#: dcim/forms/filtersets.py:1007 dcim/forms/filtersets.py:1131 -#: dcim/forms/filtersets.py:1239 dcim/forms/filtersets.py:1263 -#: dcim/forms/filtersets.py:1288 dcim/forms/filtersets.py:1307 -#: dcim/forms/filtersets.py:1327 dcim/forms/filtersets.py:1441 -#: dcim/forms/filtersets.py:1465 dcim/forms/filtersets.py:1489 -#: dcim/forms/filtersets.py:1507 dcim/forms/filtersets.py:1523 -#: extras/forms/bulk_edit.py:90 extras/forms/filtersets.py:44 -#: extras/forms/filtersets.py:134 extras/forms/filtersets.py:165 -#: extras/forms/filtersets.py:205 extras/forms/filtersets.py:221 -#: extras/forms/filtersets.py:252 extras/forms/filtersets.py:276 -#: extras/forms/filtersets.py:441 ipam/forms/filtersets.py:99 -#: ipam/forms/filtersets.py:266 ipam/forms/filtersets.py:307 -#: ipam/forms/filtersets.py:382 ipam/forms/filtersets.py:468 -#: ipam/forms/filtersets.py:527 ipam/forms/filtersets.py:545 -#: netbox/tables/tables.py:256 virtualization/forms/filtersets.py:45 -#: virtualization/forms/filtersets.py:103 -#: virtualization/forms/filtersets.py:198 -#: virtualization/forms/filtersets.py:243 vpn/forms/filtersets.py:213 -#: wireless/forms/bulk_edit.py:150 wireless/forms/filtersets.py:34 -#: wireless/forms/filtersets.py:74 +#: 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" -#: circuits/forms/filtersets.py:73 circuits/tables/circuits.py:63 -#: circuits/tables/providers.py:66 templates/circuits/circuit.html:22 -#: templates/circuits/provideraccount.html:24 +#: netbox/circuits/forms/filtersets.py:73 +#: netbox/circuits/tables/circuits.py:63 +#: netbox/circuits/tables/providers.py:66 +#: netbox/templates/circuits/circuit.html:22 +#: netbox/templates/circuits/provideraccount.html:24 msgid "Account" msgstr "Compte" -#: circuits/forms/filtersets.py:217 +#: netbox/circuits/forms/filtersets.py:217 msgid "Term Side" msgstr "Côté terme" -#: circuits/forms/filtersets.py:250 extras/forms/model_forms.py:582 -#: ipam/forms/filtersets.py:142 ipam/forms/filtersets.py:546 -#: ipam/forms/model_forms.py:323 templates/extras/configcontext.html:60 -#: templates/ipam/ipaddress.html:59 templates/ipam/vlan_edit.html:30 -#: tenancy/forms/filtersets.py:87 users/forms/model_forms.py:314 +#: 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/templates/extras/configcontext.html:60 +#: netbox/templates/ipam/ipaddress.html:59 +#: netbox/templates/ipam/vlan_edit.html:30 +#: netbox/tenancy/forms/filtersets.py:87 netbox/users/forms/model_forms.py:314 msgid "Assignment" msgstr "Affectation" -#: circuits/forms/filtersets.py:265 circuits/forms/model_forms.py:195 -#: circuits/tables/circuits.py:155 dcim/forms/bulk_edit.py:117 -#: dcim/forms/bulk_import.py:100 dcim/forms/model_forms.py:117 -#: dcim/tables/sites.py:89 extras/forms/filtersets.py:480 -#: ipam/filtersets.py:999 ipam/forms/bulk_edit.py:493 -#: ipam/forms/bulk_import.py:436 ipam/forms/model_forms.py:528 -#: ipam/tables/fhrp.py:67 ipam/tables/vlans.py:122 ipam/tables/vlans.py:226 -#: templates/circuits/circuitgroupassignment.html:22 -#: templates/dcim/interface.html:284 templates/dcim/site.html:37 -#: templates/ipam/inc/panels/fhrp_groups.html:23 templates/ipam/vlan.html:27 -#: templates/tenancy/contact.html:21 templates/tenancy/tenant.html:20 -#: templates/users/group.html:6 templates/users/group.html:14 -#: templates/virtualization/cluster.html:29 templates/vpn/tunnel.html:29 -#: templates/wireless/wirelesslan.html:18 tenancy/forms/bulk_edit.py:43 -#: tenancy/forms/bulk_edit.py:94 tenancy/forms/bulk_import.py:40 -#: tenancy/forms/bulk_import.py:81 tenancy/forms/filtersets.py:48 -#: tenancy/forms/filtersets.py:78 tenancy/forms/filtersets.py:97 -#: tenancy/forms/model_forms.py:45 tenancy/forms/model_forms.py:97 -#: tenancy/forms/model_forms.py:122 tenancy/tables/contacts.py:60 -#: tenancy/tables/contacts.py:107 tenancy/tables/tenants.py:42 -#: users/filtersets.py:62 users/filtersets.py:185 users/forms/filtersets.py:31 -#: users/forms/filtersets.py:37 users/forms/filtersets.py:79 -#: virtualization/forms/bulk_edit.py:65 virtualization/forms/bulk_import.py:47 -#: virtualization/forms/filtersets.py:85 -#: virtualization/forms/model_forms.py:66 virtualization/tables/clusters.py:70 -#: vpn/forms/bulk_edit.py:112 vpn/forms/bulk_import.py:158 -#: vpn/forms/filtersets.py:116 vpn/tables/crypto.py:31 -#: vpn/tables/tunnels.py:44 wireless/forms/bulk_edit.py:48 -#: wireless/forms/bulk_import.py:36 wireless/forms/filtersets.py:46 -#: wireless/forms/model_forms.py:40 wireless/tables/wirelesslan.py:48 +#: netbox/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/templates/circuits/circuitgroupassignment.html:22 +#: netbox/templates/dcim/interface.html:284 netbox/templates/dcim/site.html:37 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:23 +#: netbox/templates/ipam/vlan.html:27 netbox/templates/tenancy/contact.html:21 +#: netbox/templates/tenancy/tenant.html:20 netbox/templates/users/group.html:6 +#: netbox/templates/users/group.html:14 +#: netbox/templates/virtualization/cluster.html:29 +#: netbox/templates/vpn/tunnel.html:29 +#: netbox/templates/wireless/wirelesslan.html:18 +#: netbox/tenancy/forms/bulk_edit.py:43 netbox/tenancy/forms/bulk_edit.py:94 +#: netbox/tenancy/forms/bulk_import.py:40 +#: netbox/tenancy/forms/bulk_import.py:81 +#: netbox/tenancy/forms/filtersets.py:48 netbox/tenancy/forms/filtersets.py:78 +#: netbox/tenancy/forms/filtersets.py:97 +#: netbox/tenancy/forms/model_forms.py:45 +#: netbox/tenancy/forms/model_forms.py:97 +#: netbox/tenancy/forms/model_forms.py:122 +#: netbox/tenancy/tables/contacts.py:60 netbox/tenancy/tables/contacts.py:107 +#: netbox/tenancy/tables/tenants.py:42 netbox/users/filtersets.py: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/tables/clusters.py:70 +#: netbox/vpn/forms/bulk_edit.py:112 netbox/vpn/forms/bulk_import.py:158 +#: netbox/vpn/forms/filtersets.py:116 netbox/vpn/tables/crypto.py:31 +#: netbox/vpn/tables/tunnels.py:44 netbox/wireless/forms/bulk_edit.py:48 +#: netbox/wireless/forms/bulk_import.py:36 +#: netbox/wireless/forms/filtersets.py:46 +#: netbox/wireless/forms/model_forms.py:40 +#: netbox/wireless/tables/wirelesslan.py:48 msgid "Group" msgstr "Groupe" -#: circuits/forms/model_forms.py:182 templates/circuits/circuitgroup.html:25 +#: netbox/circuits/forms/model_forms.py:182 +#: netbox/templates/circuits/circuitgroup.html:25 msgid "Circuit Group" msgstr "Groupe de circuits" -#: circuits/models/circuits.py:27 dcim/models/cables.py:67 -#: dcim/models/device_component_templates.py:517 -#: dcim/models/device_component_templates.py:617 -#: dcim/models/device_components.py:975 dcim/models/device_components.py:1049 -#: dcim/models/device_components.py:1204 dcim/models/devices.py:479 -#: dcim/models/racks.py:224 extras/models/tags.py:28 +#: 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/extras/models/tags.py:28 msgid "color" msgstr "couleur" -#: circuits/models/circuits.py:36 +#: netbox/circuits/models/circuits.py:36 msgid "circuit type" msgstr "type de circuit" -#: circuits/models/circuits.py:37 +#: netbox/circuits/models/circuits.py:37 msgid "circuit types" msgstr "types de circuits" -#: circuits/models/circuits.py:48 +#: netbox/circuits/models/circuits.py:48 msgid "circuit ID" msgstr "identifiant du circuit" -#: circuits/models/circuits.py:49 +#: netbox/circuits/models/circuits.py:49 msgid "Unique circuit ID" msgstr "ID de circuit unique" -#: circuits/models/circuits.py:69 core/models/data.py:52 -#: core/models/jobs.py:84 dcim/models/cables.py:49 dcim/models/devices.py:653 -#: dcim/models/devices.py:1173 dcim/models/devices.py:1399 -#: dcim/models/power.py:96 dcim/models/racks.py:297 dcim/models/sites.py:154 -#: dcim/models/sites.py:266 ipam/models/ip.py:253 ipam/models/ip.py:522 -#: ipam/models/ip.py:730 ipam/models/vlans.py:195 -#: virtualization/models/clusters.py:74 -#: virtualization/models/virtualmachines.py:84 vpn/models/tunnels.py:40 -#: wireless/models.py:95 wireless/models.py:159 +#: 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 msgid "status" msgstr "statut" -#: circuits/models/circuits.py:84 templates/core/plugin.html:20 +#: netbox/circuits/models/circuits.py:84 netbox/templates/core/plugin.html:20 msgid "installed" msgstr "installé" -#: circuits/models/circuits.py:89 +#: netbox/circuits/models/circuits.py:89 msgid "terminates" msgstr "met fin à" -#: circuits/models/circuits.py:94 +#: netbox/circuits/models/circuits.py:94 msgid "commit rate (Kbps)" msgstr "taux de validation (Kbits/s)" -#: circuits/models/circuits.py:95 +#: netbox/circuits/models/circuits.py:95 msgid "Committed rate" msgstr "Taux engagé" -#: circuits/models/circuits.py:137 +#: netbox/circuits/models/circuits.py:137 msgid "circuit" msgstr "circuit" -#: circuits/models/circuits.py:138 +#: netbox/circuits/models/circuits.py:138 msgid "circuits" msgstr "circuits" -#: circuits/models/circuits.py:170 +#: netbox/circuits/models/circuits.py:170 msgid "circuit group" msgstr "groupe de circuits" -#: circuits/models/circuits.py:171 +#: netbox/circuits/models/circuits.py:171 msgid "circuit groups" msgstr "groupes de circuits" -#: circuits/models/circuits.py:195 ipam/models/fhrp.py:93 -#: tenancy/models/contacts.py:134 +#: netbox/circuits/models/circuits.py:195 netbox/ipam/models/fhrp.py:93 +#: netbox/tenancy/models/contacts.py:134 msgid "priority" msgstr "priorité" -#: circuits/models/circuits.py:213 +#: netbox/circuits/models/circuits.py:213 msgid "Circuit group assignment" msgstr "Affectation de groupes de circuits" -#: circuits/models/circuits.py:214 +#: netbox/circuits/models/circuits.py:214 msgid "Circuit group assignments" msgstr "Assignations de groupes de circuits" -#: circuits/models/circuits.py:240 +#: netbox/circuits/models/circuits.py:240 msgid "termination" msgstr "résiliation" -#: circuits/models/circuits.py:257 +#: netbox/circuits/models/circuits.py:257 msgid "port speed (Kbps)" msgstr "vitesse du port (Kbps)" -#: circuits/models/circuits.py:260 +#: netbox/circuits/models/circuits.py:260 msgid "Physical circuit speed" msgstr "Vitesse du circuit physique" -#: circuits/models/circuits.py:265 +#: netbox/circuits/models/circuits.py:265 msgid "upstream speed (Kbps)" msgstr "vitesse montante (Kbps)" -#: circuits/models/circuits.py:266 +#: netbox/circuits/models/circuits.py:266 msgid "Upstream speed, if different from port speed" msgstr "Vitesse ascendante, si elle est différente de la vitesse du port" -#: circuits/models/circuits.py:271 +#: netbox/circuits/models/circuits.py:271 msgid "cross-connect ID" msgstr "ID de connexion croisée" -#: circuits/models/circuits.py:272 +#: netbox/circuits/models/circuits.py:272 msgid "ID of the local cross-connect" msgstr "ID de l'interconnexion locale" -#: circuits/models/circuits.py:277 +#: netbox/circuits/models/circuits.py:277 msgid "patch panel/port(s)" msgstr "panneau de raccordement ou port (s)" -#: circuits/models/circuits.py:278 +#: netbox/circuits/models/circuits.py:278 msgid "Patch panel ID and port number(s)" msgstr "ID du panneau de raccordement et numéro (s) de port" -#: circuits/models/circuits.py:281 -#: dcim/models/device_component_templates.py:61 -#: dcim/models/device_components.py:68 dcim/models/racks.py:685 -#: extras/models/configs.py:45 extras/models/configs.py:219 -#: extras/models/customfields.py:125 extras/models/models.py:61 -#: extras/models/models.py:158 extras/models/models.py:396 -#: extras/models/models.py:511 extras/models/notifications.py:131 -#: extras/models/staging.py:31 extras/models/tags.py:32 -#: netbox/models/__init__.py:110 netbox/models/__init__.py:145 -#: netbox/models/__init__.py:191 users/models/permissions.py:24 -#: users/models/tokens.py:57 users/models/users.py:33 -#: virtualization/models/virtualmachines.py:289 +#: 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/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 msgid "description" msgstr "description" -#: circuits/models/circuits.py:294 +#: netbox/circuits/models/circuits.py:294 msgid "circuit termination" msgstr "terminaison du circuit" -#: circuits/models/circuits.py:295 +#: netbox/circuits/models/circuits.py:295 msgid "circuit terminations" msgstr "terminaisons de circuits" -#: circuits/models/circuits.py:308 +#: netbox/circuits/models/circuits.py:308 msgid "" "A circuit termination must attach to either a site or a provider network." msgstr "" "Une terminaison de circuit doit être connectée à un site ou à un réseau " "fournisseur." -#: circuits/models/circuits.py:310 +#: netbox/circuits/models/circuits.py:310 msgid "" "A circuit termination cannot attach to both a site and a provider network." msgstr "" "Une terminaison de circuit ne peut pas être connectée à la fois à un site et" " à un réseau fournisseur." -#: circuits/models/providers.py:22 circuits/models/providers.py:66 -#: circuits/models/providers.py:104 core/models/data.py:39 -#: core/models/jobs.py:45 dcim/models/device_component_templates.py:43 -#: dcim/models/device_components.py:53 dcim/models/devices.py:593 -#: dcim/models/devices.py:1330 dcim/models/devices.py:1395 -#: dcim/models/power.py:39 dcim/models/power.py:92 dcim/models/racks.py:262 -#: dcim/models/sites.py:138 extras/models/configs.py:36 -#: extras/models/configs.py:215 extras/models/customfields.py:92 -#: extras/models/models.py:56 extras/models/models.py:153 -#: extras/models/models.py:296 extras/models/models.py:392 -#: extras/models/models.py:501 extras/models/models.py:596 -#: extras/models/notifications.py:126 extras/models/scripts.py:30 -#: extras/models/staging.py:26 ipam/models/asns.py:18 ipam/models/fhrp.py:25 -#: ipam/models/services.py:52 ipam/models/services.py:88 -#: ipam/models/vlans.py:36 ipam/models/vlans.py:184 ipam/models/vrfs.py:22 -#: ipam/models/vrfs.py:79 netbox/models/__init__.py:137 -#: netbox/models/__init__.py:181 tenancy/models/contacts.py:64 -#: tenancy/models/tenants.py:20 tenancy/models/tenants.py:45 -#: users/models/permissions.py:20 users/models/users.py:28 -#: virtualization/models/clusters.py:57 -#: virtualization/models/virtualmachines.py:72 -#: virtualization/models/virtualmachines.py:279 vpn/models/crypto.py:24 -#: vpn/models/crypto.py:71 vpn/models/crypto.py:131 vpn/models/crypto.py:183 -#: vpn/models/crypto.py:221 vpn/models/l2vpn.py:22 vpn/models/tunnels.py:35 -#: wireless/models.py:51 +#: 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/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/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 msgid "name" msgstr "nom" -#: circuits/models/providers.py:25 +#: netbox/circuits/models/providers.py:25 msgid "Full name of the provider" msgstr "Nom complet du fournisseur" -#: circuits/models/providers.py:28 dcim/models/devices.py:86 -#: dcim/models/racks.py:137 dcim/models/sites.py:149 -#: extras/models/models.py:506 ipam/models/asns.py:23 ipam/models/vlans.py:40 -#: netbox/models/__init__.py:141 netbox/models/__init__.py:186 -#: tenancy/models/tenants.py:25 tenancy/models/tenants.py:49 -#: vpn/models/l2vpn.py:27 wireless/models.py:56 +#: netbox/circuits/models/providers.py:28 netbox/dcim/models/devices.py:86 +#: 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 msgid "slug" msgstr "slug" -#: circuits/models/providers.py:42 +#: netbox/circuits/models/providers.py:42 msgid "provider" msgstr "fournisseur" -#: circuits/models/providers.py:43 +#: netbox/circuits/models/providers.py:43 msgid "providers" msgstr "fournisseurs" -#: circuits/models/providers.py:63 +#: netbox/circuits/models/providers.py:63 msgid "account ID" msgstr "ID de compte" -#: circuits/models/providers.py:86 +#: netbox/circuits/models/providers.py:86 msgid "provider account" msgstr "compte fournisseur" -#: circuits/models/providers.py:87 +#: netbox/circuits/models/providers.py:87 msgid "provider accounts" msgstr "comptes fournisseurs" -#: circuits/models/providers.py:115 +#: netbox/circuits/models/providers.py:115 msgid "service ID" msgstr "ID de service" -#: circuits/models/providers.py:126 +#: netbox/circuits/models/providers.py:126 msgid "provider network" msgstr "réseau de fournisseurs" -#: circuits/models/providers.py:127 +#: netbox/circuits/models/providers.py:127 msgid "provider networks" msgstr "réseaux de fournisseurs" -#: circuits/tables/circuits.py:32 circuits/tables/circuits.py:132 -#: circuits/tables/providers.py:18 circuits/tables/providers.py:69 -#: circuits/tables/providers.py:99 core/tables/data.py:16 -#: core/tables/jobs.py:14 core/tables/plugins.py:44 core/tables/tasks.py:11 -#: core/tables/tasks.py:115 dcim/forms/filtersets.py:63 -#: dcim/forms/object_create.py:43 dcim/tables/devices.py:52 -#: dcim/tables/devices.py:92 dcim/tables/devices.py:134 -#: dcim/tables/devices.py:289 dcim/tables/devices.py:392 -#: dcim/tables/devices.py:433 dcim/tables/devices.py:482 -#: dcim/tables/devices.py:531 dcim/tables/devices.py:648 -#: dcim/tables/devices.py:731 dcim/tables/devices.py:778 -#: dcim/tables/devices.py:841 dcim/tables/devices.py:911 -#: dcim/tables/devices.py:974 dcim/tables/devices.py:994 -#: dcim/tables/devices.py:1023 dcim/tables/devices.py:1053 -#: dcim/tables/devicetypes.py:31 dcim/tables/power.py:22 -#: dcim/tables/power.py:62 dcim/tables/racks.py:24 dcim/tables/racks.py:113 -#: dcim/tables/sites.py:24 dcim/tables/sites.py:51 dcim/tables/sites.py:78 -#: dcim/tables/sites.py:130 extras/forms/filtersets.py:213 -#: extras/tables/tables.py:58 extras/tables/tables.py:122 -#: extras/tables/tables.py:155 extras/tables/tables.py:180 -#: extras/tables/tables.py:246 extras/tables/tables.py:361 -#: extras/tables/tables.py:378 extras/tables/tables.py:401 -#: extras/tables/tables.py:439 extras/tables/tables.py:491 -#: extras/tables/tables.py:514 ipam/forms/bulk_edit.py:407 -#: ipam/forms/filtersets.py:386 ipam/tables/asn.py:16 ipam/tables/ip.py:85 -#: ipam/tables/ip.py:160 ipam/tables/services.py:15 ipam/tables/services.py:40 -#: ipam/tables/vlans.py:64 ipam/tables/vlans.py:114 ipam/tables/vrfs.py:26 -#: ipam/tables/vrfs.py:68 templates/circuits/circuitgroup.html:28 -#: templates/circuits/circuittype.html:22 -#: templates/circuits/provideraccount.html:28 -#: templates/circuits/providernetwork.html:24 -#: templates/core/datasource.html:34 templates/core/job.html:44 -#: templates/core/plugin.html:54 templates/core/rq_worker.html:43 -#: templates/dcim/consoleport.html:28 templates/dcim/consoleserverport.html:28 -#: templates/dcim/devicebay.html:24 templates/dcim/devicerole.html:26 -#: templates/dcim/frontport.html:28 -#: templates/dcim/inc/interface_vlans_table.html:5 -#: templates/dcim/inc/panels/inventory_items.html:18 -#: templates/dcim/interface.html:38 templates/dcim/interface.html:165 -#: templates/dcim/inventoryitem.html:28 -#: templates/dcim/inventoryitemrole.html:18 templates/dcim/location.html:29 -#: templates/dcim/manufacturer.html:36 templates/dcim/modulebay.html:30 -#: templates/dcim/platform.html:29 templates/dcim/poweroutlet.html:28 -#: templates/dcim/powerport.html:28 templates/dcim/rackrole.html:22 -#: templates/dcim/rearport.html:28 templates/dcim/region.html:29 -#: templates/dcim/sitegroup.html:29 -#: templates/dcim/virtualdevicecontext.html:18 -#: templates/extras/configcontext.html:13 -#: templates/extras/configtemplate.html:13 -#: templates/extras/customfield.html:13 templates/extras/customlink.html:13 -#: templates/extras/eventrule.html:13 templates/extras/exporttemplate.html:15 -#: templates/extras/notificationgroup.html:14 -#: templates/extras/savedfilter.html:13 templates/extras/script_list.html:44 -#: templates/extras/tag.html:14 templates/extras/webhook.html:13 -#: templates/ipam/asnrange.html:15 templates/ipam/fhrpgroup.html:30 -#: templates/ipam/rir.html:22 templates/ipam/role.html:22 -#: templates/ipam/routetarget.html:13 templates/ipam/service.html:24 -#: templates/ipam/servicetemplate.html:15 templates/ipam/vlan.html:35 -#: templates/ipam/vlangroup.html:30 templates/tenancy/contact.html:25 -#: templates/tenancy/contactgroup.html:21 -#: templates/tenancy/contactrole.html:18 templates/tenancy/tenantgroup.html:29 -#: templates/users/group.html:17 templates/users/objectpermission.html:17 -#: templates/virtualization/cluster.html:13 -#: templates/virtualization/clustergroup.html:22 -#: templates/virtualization/clustertype.html:22 -#: templates/virtualization/virtualdisk.html:25 -#: templates/virtualization/virtualmachine.html:15 -#: templates/virtualization/vminterface.html:25 -#: templates/vpn/ikepolicy.html:13 templates/vpn/ikeproposal.html:13 -#: templates/vpn/ipsecpolicy.html:13 templates/vpn/ipsecprofile.html:13 -#: templates/vpn/ipsecprofile.html:36 templates/vpn/ipsecprofile.html:69 -#: templates/vpn/ipsecproposal.html:13 templates/vpn/l2vpn.html:14 -#: templates/vpn/tunnel.html:21 templates/vpn/tunnelgroup.html:26 -#: templates/wireless/wirelesslangroup.html:29 tenancy/tables/contacts.py:19 -#: tenancy/tables/contacts.py:41 tenancy/tables/contacts.py:56 -#: tenancy/tables/tenants.py:16 tenancy/tables/tenants.py:38 -#: users/tables.py:62 users/tables.py:76 -#: virtualization/forms/bulk_create.py:20 -#: virtualization/forms/object_create.py:13 -#: virtualization/forms/object_create.py:23 -#: virtualization/tables/clusters.py:17 virtualization/tables/clusters.py:39 -#: virtualization/tables/clusters.py:62 -#: virtualization/tables/virtualmachines.py:55 -#: virtualization/tables/virtualmachines.py:139 -#: virtualization/tables/virtualmachines.py:194 vpn/tables/crypto.py:18 -#: vpn/tables/crypto.py:57 vpn/tables/crypto.py:93 vpn/tables/crypto.py:129 -#: vpn/tables/crypto.py:158 vpn/tables/l2vpn.py:23 vpn/tables/tunnels.py:18 -#: vpn/tables/tunnels.py:40 wireless/tables/wirelesslan.py:18 -#: wireless/tables/wirelesslan.py:79 +#: netbox/circuits/tables/circuits.py:32 +#: netbox/circuits/tables/circuits.py:132 +#: netbox/circuits/tables/providers.py:18 +#: netbox/circuits/tables/providers.py:69 +#: netbox/circuits/tables/providers.py:99 netbox/core/tables/data.py:16 +#: netbox/core/tables/jobs.py:14 netbox/core/tables/plugins.py: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/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/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/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/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 +#: netbox/templates/dcim/consoleserverport.html:28 +#: netbox/templates/dcim/devicebay.html:24 +#: netbox/templates/dcim/devicerole.html:26 +#: netbox/templates/dcim/frontport.html:28 +#: netbox/templates/dcim/inc/interface_vlans_table.html:5 +#: netbox/templates/dcim/inc/panels/inventory_items.html:18 +#: netbox/templates/dcim/interface.html:38 +#: netbox/templates/dcim/interface.html:165 +#: netbox/templates/dcim/inventoryitem.html:28 +#: netbox/templates/dcim/inventoryitemrole.html:18 +#: netbox/templates/dcim/location.html:29 +#: netbox/templates/dcim/manufacturer.html:36 +#: netbox/templates/dcim/modulebay.html:30 +#: netbox/templates/dcim/platform.html:29 +#: netbox/templates/dcim/poweroutlet.html:28 +#: netbox/templates/dcim/powerport.html:28 +#: netbox/templates/dcim/rackrole.html:22 +#: netbox/templates/dcim/rearport.html:28 netbox/templates/dcim/region.html:29 +#: netbox/templates/dcim/sitegroup.html:29 +#: netbox/templates/dcim/virtualdevicecontext.html:18 +#: netbox/templates/extras/configcontext.html:13 +#: netbox/templates/extras/configtemplate.html:13 +#: netbox/templates/extras/customfield.html:13 +#: netbox/templates/extras/customlink.html:13 +#: netbox/templates/extras/eventrule.html:13 +#: netbox/templates/extras/exporttemplate.html:15 +#: netbox/templates/extras/notificationgroup.html:14 +#: netbox/templates/extras/savedfilter.html:13 +#: netbox/templates/extras/script_list.html:45 +#: netbox/templates/extras/tag.html:14 netbox/templates/extras/webhook.html:13 +#: netbox/templates/ipam/asnrange.html:15 +#: netbox/templates/ipam/fhrpgroup.html:30 netbox/templates/ipam/rir.html:22 +#: netbox/templates/ipam/role.html:22 +#: netbox/templates/ipam/routetarget.html:13 +#: netbox/templates/ipam/service.html:24 +#: netbox/templates/ipam/servicetemplate.html:15 +#: netbox/templates/ipam/vlan.html:35 netbox/templates/ipam/vlangroup.html:30 +#: netbox/templates/tenancy/contact.html:25 +#: netbox/templates/tenancy/contactgroup.html:21 +#: netbox/templates/tenancy/contactrole.html:18 +#: netbox/templates/tenancy/tenantgroup.html:29 +#: netbox/templates/users/group.html:17 +#: netbox/templates/users/objectpermission.html:17 +#: netbox/templates/virtualization/cluster.html:13 +#: netbox/templates/virtualization/clustergroup.html:22 +#: netbox/templates/virtualization/clustertype.html:22 +#: netbox/templates/virtualization/virtualdisk.html:25 +#: netbox/templates/virtualization/virtualmachine.html:15 +#: netbox/templates/virtualization/vminterface.html:25 +#: netbox/templates/vpn/ikepolicy.html:13 +#: netbox/templates/vpn/ikeproposal.html:13 +#: netbox/templates/vpn/ipsecpolicy.html:13 +#: netbox/templates/vpn/ipsecprofile.html:13 +#: netbox/templates/vpn/ipsecprofile.html:36 +#: netbox/templates/vpn/ipsecprofile.html:69 +#: netbox/templates/vpn/ipsecproposal.html:13 +#: netbox/templates/vpn/l2vpn.html:14 netbox/templates/vpn/tunnel.html:21 +#: netbox/templates/vpn/tunnelgroup.html:26 +#: netbox/templates/wireless/wirelesslangroup.html:29 +#: netbox/tenancy/tables/contacts.py:19 netbox/tenancy/tables/contacts.py:41 +#: netbox/tenancy/tables/contacts.py:56 netbox/tenancy/tables/tenants.py:16 +#: netbox/tenancy/tables/tenants.py:38 netbox/users/tables.py:62 +#: netbox/users/tables.py:76 netbox/virtualization/forms/bulk_create.py:20 +#: netbox/virtualization/forms/object_create.py:13 +#: netbox/virtualization/forms/object_create.py:23 +#: netbox/virtualization/tables/clusters.py:17 +#: netbox/virtualization/tables/clusters.py:39 +#: netbox/virtualization/tables/clusters.py:62 +#: netbox/virtualization/tables/virtualmachines.py:55 +#: netbox/virtualization/tables/virtualmachines.py:139 +#: netbox/virtualization/tables/virtualmachines.py:194 +#: netbox/vpn/tables/crypto.py:18 netbox/vpn/tables/crypto.py:57 +#: netbox/vpn/tables/crypto.py:93 netbox/vpn/tables/crypto.py:129 +#: netbox/vpn/tables/crypto.py:158 netbox/vpn/tables/l2vpn.py:23 +#: netbox/vpn/tables/tunnels.py:18 netbox/vpn/tables/tunnels.py:40 +#: netbox/wireless/tables/wirelesslan.py:18 +#: netbox/wireless/tables/wirelesslan.py:79 msgid "Name" msgstr "Nom" -#: circuits/tables/circuits.py:41 circuits/tables/circuits.py:138 -#: circuits/tables/providers.py:45 circuits/tables/providers.py:79 -#: netbox/navigation/menu.py:266 netbox/navigation/menu.py:270 -#: netbox/navigation/menu.py:272 templates/circuits/provider.html:57 -#: templates/circuits/provideraccount.html:44 -#: templates/circuits/providernetwork.html:50 +#: 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/templates/circuits/provider.html:57 +#: netbox/templates/circuits/provideraccount.html:44 +#: netbox/templates/circuits/providernetwork.html:50 msgid "Circuits" msgstr "Circuits" -#: circuits/tables/circuits.py:55 templates/circuits/circuit.html:26 +#: netbox/circuits/tables/circuits.py:55 +#: netbox/templates/circuits/circuit.html:26 msgid "Circuit ID" msgstr "Identifiant du circuit" -#: circuits/tables/circuits.py:69 wireless/forms/model_forms.py:160 +#: netbox/circuits/tables/circuits.py:69 +#: netbox/wireless/forms/model_forms.py:160 msgid "Side A" msgstr "Côté A" -#: circuits/tables/circuits.py:74 +#: netbox/circuits/tables/circuits.py:74 msgid "Side Z" msgstr "Côté Z" -#: circuits/tables/circuits.py:77 templates/circuits/circuit.html:55 +#: netbox/circuits/tables/circuits.py:77 +#: netbox/templates/circuits/circuit.html:55 msgid "Commit Rate" msgstr "Bande passante garantie" -#: circuits/tables/circuits.py:80 circuits/tables/providers.py:48 -#: circuits/tables/providers.py:82 circuits/tables/providers.py:107 -#: dcim/tables/devices.py:1036 dcim/tables/devicetypes.py:92 -#: dcim/tables/modules.py:29 dcim/tables/modules.py:72 dcim/tables/power.py:39 -#: dcim/tables/power.py:96 dcim/tables/racks.py:84 dcim/tables/racks.py:145 -#: dcim/tables/racks.py:225 dcim/tables/sites.py:108 -#: extras/tables/tables.py:582 ipam/tables/asn.py:69 ipam/tables/fhrp.py:34 -#: ipam/tables/ip.py:136 ipam/tables/ip.py:275 ipam/tables/ip.py:329 -#: ipam/tables/ip.py:397 ipam/tables/services.py:24 ipam/tables/services.py:54 -#: ipam/tables/vlans.py:145 ipam/tables/vrfs.py:47 ipam/tables/vrfs.py:72 -#: templates/dcim/htmx/cable_edit.html:89 templates/generic/bulk_edit.html:86 -#: templates/inc/panels/comments.html:5 tenancy/tables/contacts.py:68 -#: tenancy/tables/tenants.py:46 utilities/forms/fields/fields.py:29 -#: virtualization/tables/clusters.py:91 -#: virtualization/tables/virtualmachines.py:82 vpn/tables/crypto.py:37 -#: vpn/tables/crypto.py:74 vpn/tables/crypto.py:109 vpn/tables/crypto.py:140 -#: vpn/tables/crypto.py:173 vpn/tables/l2vpn.py:37 vpn/tables/tunnels.py:61 -#: wireless/tables/wirelesslan.py:27 wireless/tables/wirelesslan.py:58 +#: netbox/circuits/tables/circuits.py: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/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/vpn/tables/crypto.py:37 netbox/vpn/tables/crypto.py:74 +#: netbox/vpn/tables/crypto.py:109 netbox/vpn/tables/crypto.py:140 +#: netbox/vpn/tables/crypto.py:173 netbox/vpn/tables/l2vpn.py:37 +#: netbox/vpn/tables/tunnels.py:61 netbox/wireless/tables/wirelesslan.py:27 +#: netbox/wireless/tables/wirelesslan.py:58 msgid "Comments" msgstr "Commentaires" -#: circuits/tables/circuits.py:86 templates/tenancy/contact.html:84 -#: tenancy/tables/contacts.py:73 +#: netbox/circuits/tables/circuits.py:86 +#: netbox/templates/tenancy/contact.html:84 +#: netbox/tenancy/tables/contacts.py:73 msgid "Assignments" msgstr "Allocations" -#: circuits/tables/providers.py:23 +#: netbox/circuits/tables/providers.py:23 msgid "Accounts" msgstr "Comptes" -#: circuits/tables/providers.py:29 +#: netbox/circuits/tables/providers.py:29 msgid "Account Count" msgstr "Nombre de comptes" -#: circuits/tables/providers.py:39 dcim/tables/sites.py:100 +#: netbox/circuits/tables/providers.py:39 netbox/dcim/tables/sites.py:100 msgid "ASN Count" msgstr "Nombre d'ASN" -#: circuits/views.py:331 +#: netbox/circuits/views.py:331 #, python-brace-format msgid "No terminations have been defined for circuit {circuit}." msgstr "Aucune terminaison n'a été définie pour le circuit {circuit}." -#: circuits/views.py:380 +#: netbox/circuits/views.py:380 #, python-brace-format msgid "Swapped terminations for circuit {circuit}." msgstr "Terminaisons échangées pour le circuit {circuit}." -#: core/api/views.py:39 +#: netbox/core/api/views.py:39 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." -#: core/choices.py:18 +#: netbox/core/choices.py:18 msgid "New" msgstr "Nouveau" -#: core/choices.py:19 core/constants.py:18 core/tables/tasks.py:15 -#: templates/core/rq_task.html:77 +#: netbox/core/choices.py:19 netbox/core/constants.py:18 +#: netbox/core/tables/tasks.py:15 netbox/templates/core/rq_task.html:77 msgid "Queued" msgstr "En file d'attente" -#: core/choices.py:20 +#: netbox/core/choices.py:20 msgid "Syncing" msgstr "Synchronisation" -#: core/choices.py:21 core/choices.py:57 core/tables/jobs.py:41 -#: templates/core/job.html:86 +#: netbox/core/choices.py:21 netbox/core/choices.py:57 +#: netbox/core/tables/jobs.py:41 netbox/templates/core/job.html:86 msgid "Completed" msgstr "Terminé" -#: core/choices.py:22 core/choices.py:59 core/constants.py:20 -#: core/tables/tasks.py:34 dcim/choices.py:187 dcim/choices.py:239 -#: dcim/choices.py:1607 virtualization/choices.py:47 +#: netbox/core/choices.py:22 netbox/core/choices.py:59 +#: netbox/core/constants.py:20 netbox/core/tables/tasks.py:34 +#: netbox/dcim/choices.py:187 netbox/dcim/choices.py:239 +#: netbox/dcim/choices.py:1609 netbox/virtualization/choices.py:47 msgid "Failed" msgstr "Échoué" -#: core/choices.py:35 netbox/navigation/menu.py:335 -#: netbox/navigation/menu.py:339 templates/extras/script/base.html:14 -#: templates/extras/script_list.html:7 templates/extras/script_list.html:12 -#: templates/extras/script_result.html:17 +#: netbox/core/choices.py:35 netbox/netbox/navigation/menu.py:335 +#: netbox/netbox/navigation/menu.py:339 +#: netbox/templates/extras/script/base.html:14 +#: netbox/templates/extras/script_list.html:7 +#: netbox/templates/extras/script_list.html:12 +#: netbox/templates/extras/script_result.html:17 msgid "Scripts" msgstr "Scripts" -#: core/choices.py:36 templates/extras/report/base.html:13 +#: netbox/core/choices.py:36 netbox/templates/extras/report/base.html:13 msgid "Reports" msgstr "Rapports" -#: core/choices.py:54 +#: netbox/core/choices.py:54 msgid "Pending" msgstr "En attente" -#: core/choices.py:55 core/constants.py:23 core/tables/jobs.py:32 -#: core/tables/tasks.py:38 templates/core/job.html:73 +#: netbox/core/choices.py:55 netbox/core/constants.py:23 +#: netbox/core/tables/jobs.py:32 netbox/core/tables/tasks.py:38 +#: netbox/templates/core/job.html:73 msgid "Scheduled" msgstr "Programmé" -#: core/choices.py:56 +#: netbox/core/choices.py:56 msgid "Running" msgstr "En exécution" -#: core/choices.py:58 +#: netbox/core/choices.py:58 msgid "Errored" msgstr "En erreur" -#: core/choices.py:87 core/tables/plugins.py:63 -#: templates/generic/object.html:61 +#: netbox/core/choices.py:87 netbox/core/tables/plugins.py:63 +#: netbox/templates/generic/object.html:61 msgid "Updated" msgstr "Mis à jour" -#: core/choices.py:88 +#: netbox/core/choices.py:88 msgid "Deleted" msgstr "Supprimé" -#: core/constants.py:19 core/tables/tasks.py:30 +#: netbox/core/constants.py:19 netbox/core/tables/tasks.py:30 msgid "Finished" msgstr "Terminé" -#: core/constants.py:21 core/tables/jobs.py:38 templates/core/job.html:82 -#: templates/extras/htmx/script_result.html:8 +#: netbox/core/constants.py:21 netbox/core/tables/jobs.py:38 +#: netbox/templates/core/job.html:82 +#: netbox/templates/extras/htmx/script_result.html:8 msgid "Started" msgstr "Commencé" -#: core/constants.py:22 core/tables/tasks.py:26 +#: netbox/core/constants.py:22 netbox/core/tables/tasks.py:26 msgid "Deferred" msgstr "Différé" -#: core/constants.py:24 +#: netbox/core/constants.py:24 msgid "Stopped" msgstr "Arrêté" -#: core/constants.py:25 +#: netbox/core/constants.py:25 msgid "Cancelled" msgstr "Annulé" -#: core/data_backends.py:32 core/tables/plugins.py:51 -#: templates/core/plugin.html:88 templates/dcim/interface.html:216 +#: netbox/core/data_backends.py:32 netbox/core/tables/plugins.py:51 +#: netbox/templates/core/plugin.html:88 +#: netbox/templates/dcim/interface.html:216 msgid "Local" msgstr "Local" -#: core/data_backends.py:50 core/tables/change_logging.py:20 -#: templates/account/profile.html:15 templates/users/user.html:17 -#: users/tables.py:31 +#: netbox/core/data_backends.py:50 netbox/core/tables/change_logging.py:20 +#: netbox/templates/account/profile.html:15 +#: netbox/templates/users/user.html:17 netbox/users/tables.py:31 msgid "Username" msgstr "Nom d'utilisateur" -#: core/data_backends.py:52 core/data_backends.py:58 +#: netbox/core/data_backends.py:52 netbox/core/data_backends.py:58 msgid "Only used for cloning with HTTP(S)" msgstr "Utilisé uniquement pour le clonage avec HTTP(S)" -#: core/data_backends.py:56 templates/account/base.html:23 -#: templates/account/password.html:12 users/forms/model_forms.py:170 +#: netbox/core/data_backends.py:56 netbox/templates/account/base.html:23 +#: netbox/templates/account/password.html:12 +#: netbox/users/forms/model_forms.py:170 msgid "Password" msgstr "Mot de passe" -#: core/data_backends.py:62 +#: netbox/core/data_backends.py:62 msgid "Branch" msgstr "Branche" -#: core/data_backends.py:120 +#: netbox/core/data_backends.py:120 #, python-brace-format msgid "Fetching remote data failed ({name}): {error}" msgstr "La récupération des données distantes a échoué ({name}) : {error}" -#: core/data_backends.py:133 +#: netbox/core/data_backends.py:133 msgid "AWS access key ID" msgstr "ID de clé d'accès AWS" -#: core/data_backends.py:137 +#: netbox/core/data_backends.py:137 msgid "AWS secret access key" msgstr "Clé d'accès secrète AWS" -#: core/events.py:27 +#: netbox/core/events.py:27 msgid "Object created" msgstr "Objet créé" -#: core/events.py:28 +#: netbox/core/events.py:28 msgid "Object updated" msgstr "Objet mis à jour" -#: core/events.py:29 +#: netbox/core/events.py:29 msgid "Object deleted" msgstr "Objet supprimé" -#: core/events.py:30 +#: netbox/core/events.py:30 msgid "Job started" msgstr "Le travail a commencé" -#: core/events.py:31 +#: netbox/core/events.py:31 msgid "Job completed" msgstr "Tâche terminée" -#: core/events.py:32 +#: netbox/core/events.py:32 msgid "Job failed" msgstr "La tâche a échoué" -#: core/events.py:33 +#: netbox/core/events.py:33 msgid "Job errored" msgstr "Job erroné" -#: core/filtersets.py:53 extras/filtersets.py:250 extras/filtersets.py:633 -#: extras/filtersets.py:661 +#: netbox/core/filtersets.py:53 netbox/extras/filtersets.py:250 +#: netbox/extras/filtersets.py:633 netbox/extras/filtersets.py:661 msgid "Data source (ID)" msgstr "Source de données (ID)" -#: core/filtersets.py:59 +#: netbox/core/filtersets.py:59 msgid "Data source (name)" msgstr "Source de données (nom)" -#: core/filtersets.py:145 dcim/filtersets.py:501 extras/filtersets.py:287 -#: extras/filtersets.py:331 extras/filtersets.py:353 extras/filtersets.py:413 -#: users/filtersets.py:28 +#: netbox/core/filtersets.py:145 netbox/dcim/filtersets.py:501 +#: 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 msgid "User (ID)" msgstr "Utilisateur (ID)" -#: core/filtersets.py:151 +#: netbox/core/filtersets.py:151 msgid "User name" msgstr "Nom d'utilisateur" -#: core/forms/bulk_edit.py:25 core/forms/filtersets.py:43 -#: core/tables/data.py:26 dcim/forms/bulk_edit.py:1122 -#: dcim/forms/bulk_edit.py:1400 dcim/forms/filtersets.py:1370 -#: dcim/tables/devices.py:553 dcim/tables/devicetypes.py:224 -#: extras/forms/bulk_edit.py:123 extras/forms/bulk_edit.py:187 -#: extras/forms/bulk_edit.py:246 extras/forms/filtersets.py:142 -#: extras/forms/filtersets.py:229 extras/forms/filtersets.py:294 -#: extras/tables/tables.py:162 extras/tables/tables.py:253 -#: extras/tables/tables.py:415 netbox/preferences.py:22 -#: templates/core/datasource.html:42 templates/dcim/interface.html:61 -#: templates/extras/customlink.html:17 templates/extras/eventrule.html:17 -#: templates/extras/savedfilter.html:25 -#: templates/users/objectpermission.html:25 -#: templates/virtualization/vminterface.html:29 users/forms/bulk_edit.py:89 -#: users/forms/filtersets.py:70 users/tables.py:83 -#: virtualization/forms/bulk_edit.py:217 -#: virtualization/forms/filtersets.py:215 +#: 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/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/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 +#: netbox/templates/dcim/interface.html:61 +#: netbox/templates/extras/customlink.html:17 +#: netbox/templates/extras/eventrule.html:17 +#: netbox/templates/extras/savedfilter.html:25 +#: netbox/templates/users/objectpermission.html:25 +#: netbox/templates/virtualization/vminterface.html:29 +#: netbox/users/forms/bulk_edit.py:89 netbox/users/forms/filtersets.py:70 +#: netbox/users/tables.py:83 netbox/virtualization/forms/bulk_edit.py:217 +#: netbox/virtualization/forms/filtersets.py:215 msgid "Enabled" msgstr "Activé" -#: core/forms/bulk_edit.py:34 extras/forms/model_forms.py:285 -#: templates/extras/savedfilter.html:52 vpn/forms/filtersets.py:97 -#: vpn/forms/filtersets.py:127 vpn/forms/filtersets.py:151 -#: vpn/forms/filtersets.py:170 vpn/forms/model_forms.py:301 -#: vpn/forms/model_forms.py:321 vpn/forms/model_forms.py:337 -#: vpn/forms/model_forms.py:357 vpn/forms/model_forms.py:380 +#: netbox/core/forms/bulk_edit.py:34 netbox/extras/forms/model_forms.py:285 +#: 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 msgid "Parameters" msgstr "Paramètres" -#: core/forms/bulk_edit.py:38 templates/core/datasource.html:68 +#: netbox/core/forms/bulk_edit.py:38 netbox/templates/core/datasource.html:68 msgid "Ignore rules" msgstr "Ignorer les règles" -#: core/forms/filtersets.py:30 core/forms/model_forms.py:97 -#: extras/forms/model_forms.py:248 extras/forms/model_forms.py:578 -#: extras/forms/model_forms.py:632 extras/tables/tables.py:191 -#: extras/tables/tables.py:483 extras/tables/tables.py:518 -#: templates/core/datasource.html:31 -#: templates/dcim/device/render_config.html:18 -#: templates/extras/configcontext.html:29 -#: templates/extras/configtemplate.html:21 -#: templates/extras/exporttemplate.html:35 -#: templates/virtualization/virtualmachine/render_config.html:18 +#: netbox/core/forms/filtersets.py: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/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 msgid "Data Source" msgstr "Source de données" -#: core/forms/filtersets.py:55 core/forms/mixins.py:21 +#: netbox/core/forms/filtersets.py:55 netbox/core/forms/mixins.py:21 msgid "File" msgstr "Fichier" -#: core/forms/filtersets.py:60 core/forms/mixins.py:16 -#: extras/forms/filtersets.py:170 extras/forms/filtersets.py:328 -#: extras/forms/filtersets.py:413 +#: 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 msgid "Data source" msgstr "Source de données" -#: core/forms/filtersets.py:70 extras/forms/filtersets.py:440 +#: netbox/core/forms/filtersets.py:70 netbox/extras/forms/filtersets.py:440 msgid "Creation" msgstr "Création" -#: core/forms/filtersets.py:74 core/forms/filtersets.py:160 -#: extras/forms/filtersets.py:461 extras/tables/tables.py:220 -#: extras/tables/tables.py:294 extras/tables/tables.py:326 -#: extras/tables/tables.py:571 templates/core/job.html:38 -#: templates/core/objectchange.html:52 tenancy/tables/contacts.py:90 -#: vpn/tables/l2vpn.py:59 +#: 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/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 +#: netbox/tenancy/tables/contacts.py:90 netbox/vpn/tables/l2vpn.py:59 msgid "Object Type" msgstr "Type d'objet" -#: core/forms/filtersets.py:84 +#: netbox/core/forms/filtersets.py:84 msgid "Created after" msgstr "Créé après" -#: core/forms/filtersets.py:89 +#: netbox/core/forms/filtersets.py:89 msgid "Created before" msgstr "Créé avant" -#: core/forms/filtersets.py:94 +#: netbox/core/forms/filtersets.py:94 msgid "Scheduled after" msgstr "Planifié après" -#: core/forms/filtersets.py:99 +#: netbox/core/forms/filtersets.py:99 msgid "Scheduled before" msgstr "Planifié avant" -#: core/forms/filtersets.py:104 +#: netbox/core/forms/filtersets.py:104 msgid "Started after" msgstr "Commencé après" -#: core/forms/filtersets.py:109 +#: netbox/core/forms/filtersets.py:109 msgid "Started before" msgstr "Commencé avant" -#: core/forms/filtersets.py:114 +#: netbox/core/forms/filtersets.py:114 msgid "Completed after" msgstr "Terminé après" -#: core/forms/filtersets.py:119 +#: netbox/core/forms/filtersets.py:119 msgid "Completed before" msgstr "Terminé avant" -#: core/forms/filtersets.py:126 core/forms/filtersets.py:155 -#: dcim/forms/bulk_edit.py:456 dcim/forms/filtersets.py:418 -#: dcim/forms/filtersets.py:462 dcim/forms/model_forms.py:316 -#: extras/forms/filtersets.py:456 extras/forms/filtersets.py:475 -#: extras/tables/tables.py:302 extras/tables/tables.py:342 -#: templates/core/objectchange.html:36 templates/dcim/rackreservation.html:58 -#: templates/extras/savedfilter.html:21 templates/inc/user_menu.html:33 -#: templates/users/token.html:21 templates/users/user.html:6 -#: templates/users/user.html:14 users/filtersets.py:107 -#: users/filtersets.py:174 users/forms/filtersets.py:84 -#: users/forms/filtersets.py:125 users/forms/model_forms.py:155 -#: users/forms/model_forms.py:192 users/tables.py:19 +#: 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/extras/tables/tables.py:302 netbox/extras/tables/tables.py:342 +#: netbox/templates/core/objectchange.html:36 +#: netbox/templates/dcim/rackreservation.html:58 +#: netbox/templates/extras/savedfilter.html:21 +#: netbox/templates/inc/user_menu.html:33 netbox/templates/users/token.html:21 +#: netbox/templates/users/user.html:6 netbox/templates/users/user.html:14 +#: netbox/users/filtersets.py:107 netbox/users/filtersets.py:174 +#: netbox/users/forms/filtersets.py:84 netbox/users/forms/filtersets.py:125 +#: netbox/users/forms/model_forms.py:155 netbox/users/forms/model_forms.py:192 +#: netbox/users/tables.py:19 msgid "User" msgstr "Utilisateur" -#: core/forms/filtersets.py:134 core/tables/change_logging.py:15 -#: extras/tables/tables.py:609 extras/tables/tables.py:646 -#: templates/core/objectchange.html:32 +#: netbox/core/forms/filtersets.py:134 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" -#: core/forms/filtersets.py:139 extras/forms/filtersets.py:445 +#: netbox/core/forms/filtersets.py:139 netbox/extras/forms/filtersets.py:445 msgid "After" msgstr "Après" -#: core/forms/filtersets.py:144 extras/forms/filtersets.py:450 +#: netbox/core/forms/filtersets.py:144 netbox/extras/forms/filtersets.py:450 msgid "Before" msgstr "Avant" -#: core/forms/filtersets.py:148 core/tables/change_logging.py:29 -#: extras/forms/model_forms.py:396 templates/core/objectchange.html:46 -#: templates/extras/eventrule.html:71 +#: netbox/core/forms/filtersets.py:148 netbox/core/tables/change_logging.py:29 +#: netbox/extras/forms/model_forms.py:396 +#: netbox/templates/core/objectchange.html:46 +#: netbox/templates/extras/eventrule.html:71 msgid "Action" msgstr "Action" -#: core/forms/model_forms.py:54 core/tables/data.py:46 -#: templates/core/datafile.html:27 templates/extras/report/base.html:33 -#: templates/extras/script/base.html:32 +#: netbox/core/forms/model_forms.py:54 netbox/core/tables/data.py:46 +#: netbox/templates/core/datafile.html:27 +#: netbox/templates/extras/report/base.html:33 +#: netbox/templates/extras/script/base.html:32 msgid "Source" msgstr "Source" -#: core/forms/model_forms.py:58 +#: netbox/core/forms/model_forms.py:58 msgid "Backend Parameters" msgstr "Paramètres du backend" -#: core/forms/model_forms.py:96 +#: netbox/core/forms/model_forms.py:96 msgid "File Upload" msgstr "Téléversement de fichiers" -#: core/forms/model_forms.py:108 +#: netbox/core/forms/model_forms.py:108 msgid "Cannot upload a file and sync from an existing file" msgstr "" "Impossible de charger un fichier et de le synchroniser à partir d'un fichier" " existant" -#: core/forms/model_forms.py:110 +#: netbox/core/forms/model_forms.py:110 msgid "Must upload a file or select a data file to sync" msgstr "" "Vous devez télécharger un fichier ou sélectionner un fichier de données à " "synchroniser" -#: core/forms/model_forms.py:153 templates/dcim/rack_elevation_list.html:6 +#: netbox/core/forms/model_forms.py:153 +#: netbox/templates/dcim/rack_elevation_list.html:6 msgid "Rack Elevations" msgstr "Élévations des baies" -#: core/forms/model_forms.py:157 dcim/choices.py:1518 -#: dcim/forms/bulk_edit.py:969 dcim/forms/bulk_edit.py:1357 -#: dcim/forms/bulk_edit.py:1375 dcim/tables/racks.py:158 -#: netbox/navigation/menu.py:291 netbox/navigation/menu.py:295 +#: 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 msgid "Power" msgstr "Puissance" -#: core/forms/model_forms.py:159 netbox/navigation/menu.py:154 -#: templates/core/inc/config_data.html:37 +#: netbox/core/forms/model_forms.py:159 netbox/netbox/navigation/menu.py:154 +#: netbox/templates/core/inc/config_data.html:37 msgid "IPAM" msgstr "IPAM" -#: core/forms/model_forms.py:160 netbox/navigation/menu.py:230 -#: templates/core/inc/config_data.html:50 vpn/forms/bulk_edit.py:77 -#: vpn/forms/filtersets.py:43 vpn/forms/model_forms.py:61 -#: vpn/forms/model_forms.py:146 +#: netbox/core/forms/model_forms.py:160 netbox/netbox/navigation/menu.py:230 +#: netbox/templates/core/inc/config_data.html:50 +#: netbox/vpn/forms/bulk_edit.py:77 netbox/vpn/forms/filtersets.py:43 +#: netbox/vpn/forms/model_forms.py:61 netbox/vpn/forms/model_forms.py:146 msgid "Security" msgstr "Sécurité" -#: core/forms/model_forms.py:161 templates/core/inc/config_data.html:59 +#: netbox/core/forms/model_forms.py:161 +#: netbox/templates/core/inc/config_data.html:59 msgid "Banners" msgstr "Bannières" -#: core/forms/model_forms.py:162 templates/core/inc/config_data.html:80 +#: netbox/core/forms/model_forms.py:162 +#: netbox/templates/core/inc/config_data.html:80 msgid "Pagination" msgstr "Pagination" -#: core/forms/model_forms.py:163 extras/forms/bulk_edit.py:92 -#: extras/forms/filtersets.py:47 extras/forms/model_forms.py:116 -#: extras/forms/model_forms.py:129 templates/core/inc/config_data.html:93 +#: 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/model_forms.py:129 +#: netbox/templates/core/inc/config_data.html:93 msgid "Validation" msgstr "Validation" -#: core/forms/model_forms.py:164 templates/account/preferences.html:6 +#: netbox/core/forms/model_forms.py:164 +#: netbox/templates/account/preferences.html:6 msgid "User Preferences" msgstr "Préférences de l'utilisateur" -#: core/forms/model_forms.py:167 dcim/forms/filtersets.py:732 -#: templates/core/inc/config_data.html:127 users/forms/model_forms.py:64 +#: netbox/core/forms/model_forms.py:167 netbox/dcim/forms/filtersets.py:732 +#: netbox/templates/core/inc/config_data.html:127 +#: netbox/users/forms/model_forms.py:64 msgid "Miscellaneous" msgstr "Divers" -#: core/forms/model_forms.py:169 +#: netbox/core/forms/model_forms.py:169 msgid "Config Revision" msgstr "Révision de configuration" -#: core/forms/model_forms.py:208 +#: netbox/core/forms/model_forms.py:208 msgid "This parameter has been defined statically and cannot be modified." msgstr "" "Ce paramètre a été défini de manière statique et ne peut pas être modifié." -#: core/forms/model_forms.py:216 +#: netbox/core/forms/model_forms.py:216 #, python-brace-format msgid "Current value: {value}" msgstr "Valeur actuelle : {value}" -#: core/forms/model_forms.py:218 +#: netbox/core/forms/model_forms.py:218 msgid " (default)" msgstr " (par défaut)" -#: core/models/change_logging.py:29 +#: netbox/core/models/change_logging.py:29 msgid "time" msgstr "temps" -#: core/models/change_logging.py:42 +#: netbox/core/models/change_logging.py:42 msgid "user name" msgstr "nom d'utilisateur" -#: core/models/change_logging.py:47 +#: netbox/core/models/change_logging.py:47 msgid "request ID" msgstr "ID de demande" -#: core/models/change_logging.py:52 extras/models/staging.py:69 +#: netbox/core/models/change_logging.py:52 netbox/extras/models/staging.py:69 msgid "action" msgstr "action" -#: core/models/change_logging.py:86 +#: netbox/core/models/change_logging.py:86 msgid "pre-change data" msgstr "données de pré-modification" -#: core/models/change_logging.py:92 +#: netbox/core/models/change_logging.py:92 msgid "post-change data" msgstr "données après modification" -#: core/models/change_logging.py:106 +#: netbox/core/models/change_logging.py:106 msgid "object change" msgstr "changement d'objet" -#: core/models/change_logging.py:107 +#: netbox/core/models/change_logging.py:107 msgid "object changes" msgstr "modifications d'objets" -#: core/models/change_logging.py:123 +#: netbox/core/models/change_logging.py:123 #, python-brace-format msgid "Change logging is not supported for this object type ({type})." msgstr "" "La journalisation des modifications n'est pas prise en charge pour ce type " "d'objet ({type})." -#: core/models/config.py:18 core/models/data.py:266 core/models/files.py:27 -#: core/models/jobs.py:49 extras/models/models.py:730 -#: extras/models/notifications.py:39 extras/models/notifications.py:186 -#: netbox/models/features.py:53 users/models/tokens.py:32 +#: netbox/core/models/config.py:18 netbox/core/models/data.py:266 +#: 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/notifications.py:186 +#: netbox/netbox/models/features.py:53 netbox/users/models/tokens.py:32 msgid "created" msgstr "créé" -#: core/models/config.py:22 +#: netbox/core/models/config.py:22 msgid "comment" msgstr "commentaire" -#: core/models/config.py:29 +#: netbox/core/models/config.py:29 msgid "configuration data" msgstr "données de configuration" -#: core/models/config.py:36 +#: netbox/core/models/config.py:36 msgid "config revision" msgstr "révision de configuration" -#: core/models/config.py:37 +#: netbox/core/models/config.py:37 msgid "config revisions" msgstr "révisions de configuration" -#: core/models/config.py:41 +#: netbox/core/models/config.py:41 msgid "Default configuration" msgstr "Configuration par défaut" -#: core/models/config.py:43 +#: netbox/core/models/config.py:43 msgid "Current configuration" msgstr "Configuration actuelle" -#: core/models/config.py:44 +#: netbox/core/models/config.py:44 #, python-brace-format msgid "Config revision #{id}" msgstr "Révision de configuration #{id}" -#: core/models/data.py:44 dcim/models/cables.py:43 -#: dcim/models/device_component_templates.py:203 -#: dcim/models/device_component_templates.py:237 -#: dcim/models/device_component_templates.py:272 -#: dcim/models/device_component_templates.py:334 -#: dcim/models/device_component_templates.py:413 -#: dcim/models/device_component_templates.py:512 -#: dcim/models/device_component_templates.py:612 -#: dcim/models/device_components.py:283 dcim/models/device_components.py:312 -#: dcim/models/device_components.py:345 dcim/models/device_components.py:463 -#: dcim/models/device_components.py:605 dcim/models/device_components.py:970 -#: dcim/models/device_components.py:1044 dcim/models/power.py:102 -#: extras/models/customfields.py:78 extras/models/search.py:41 -#: virtualization/models/clusters.py:61 vpn/models/l2vpn.py:32 +#: 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/extras/models/search.py:41 +#: netbox/virtualization/models/clusters.py:61 netbox/vpn/models/l2vpn.py:32 msgid "type" msgstr "type" -#: core/models/data.py:49 extras/choices.py:37 extras/models/models.py:164 -#: extras/tables/tables.py:656 templates/core/datasource.html:58 -#: templates/core/plugin.html:66 +#: netbox/core/models/data.py:49 netbox/extras/choices.py:37 +#: netbox/extras/models/models.py:164 netbox/extras/tables/tables.py:656 +#: netbox/templates/core/datasource.html:58 +#: netbox/templates/core/plugin.html:66 msgid "URL" msgstr "URL" -#: core/models/data.py:59 dcim/models/device_component_templates.py:418 -#: dcim/models/device_components.py:512 extras/models/models.py:70 -#: extras/models/models.py:301 extras/models/models.py:526 -#: users/models/permissions.py:29 +#: netbox/core/models/data.py:59 +#: netbox/dcim/models/device_component_templates.py:418 +#: netbox/dcim/models/device_components.py:512 +#: 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" msgstr "activé" -#: core/models/data.py:63 +#: netbox/core/models/data.py:63 msgid "ignore rules" msgstr "ignorer les règles" -#: core/models/data.py:65 +#: netbox/core/models/data.py:65 msgid "Patterns (one per line) matching files to ignore when syncing" msgstr "" "Modèles (un par ligne) correspondant aux fichiers à ignorer lors de la " "synchronisation" -#: core/models/data.py:68 extras/models/models.py:534 +#: netbox/core/models/data.py:68 netbox/extras/models/models.py:534 msgid "parameters" msgstr "paramètres" -#: core/models/data.py:73 +#: netbox/core/models/data.py:73 msgid "last synced" msgstr "dernière synchronisation" -#: core/models/data.py:81 +#: netbox/core/models/data.py:81 msgid "data source" msgstr "source de données" -#: core/models/data.py:82 +#: netbox/core/models/data.py:82 msgid "data sources" msgstr "sources de données" -#: core/models/data.py:122 +#: netbox/core/models/data.py:122 #, python-brace-format msgid "Unknown backend type: {type}" msgstr "Type de backend inconnu : {type}" -#: core/models/data.py:164 +#: netbox/core/models/data.py:164 msgid "Cannot initiate sync; syncing already in progress." msgstr "" "Impossible de lancer la synchronisation ; la synchronisation est déjà en " "cours." -#: core/models/data.py:177 +#: netbox/core/models/data.py:177 msgid "" "There was an error initializing the backend. A dependency needs to be " "installed: " @@ -1909,1224 +2177,1286 @@ msgstr "" "Une erreur s'est produite lors de l'initialisation du backend. Une " "dépendance doit être installée : " -#: core/models/data.py:270 core/models/files.py:31 -#: netbox/models/features.py:59 +#: netbox/core/models/data.py:270 netbox/core/models/files.py:31 +#: netbox/netbox/models/features.py:59 msgid "last updated" msgstr "dernière mise à jour" -#: core/models/data.py:280 dcim/models/cables.py:444 +#: netbox/core/models/data.py:280 netbox/dcim/models/cables.py:444 msgid "path" msgstr "chemin" -#: core/models/data.py:283 +#: netbox/core/models/data.py:283 msgid "File path relative to the data source's root" msgstr "Chemin du fichier par rapport à la racine de la source de données" -#: core/models/data.py:287 ipam/models/ip.py:503 +#: netbox/core/models/data.py:287 netbox/ipam/models/ip.py:503 msgid "size" msgstr "taille" -#: core/models/data.py:290 +#: netbox/core/models/data.py:290 msgid "hash" msgstr "hachage" -#: core/models/data.py:294 +#: netbox/core/models/data.py:294 msgid "Length must be 64 hexadecimal characters." msgstr "La longueur doit être de 64 caractères hexadécimaux." -#: core/models/data.py:296 +#: netbox/core/models/data.py:296 msgid "SHA256 hash of the file data" msgstr "Hachage SHA256 des données du fichier" -#: core/models/data.py:313 +#: netbox/core/models/data.py:313 msgid "data file" msgstr "fichier de données" -#: core/models/data.py:314 +#: netbox/core/models/data.py:314 msgid "data files" msgstr "fichiers de données" -#: core/models/data.py:401 +#: netbox/core/models/data.py:401 msgid "auto sync record" msgstr "enregistrement de synchronisation automatique" -#: core/models/data.py:402 +#: netbox/core/models/data.py:402 msgid "auto sync records" msgstr "enregistrements de synchronisation automatique" -#: core/models/files.py:37 +#: netbox/core/models/files.py:37 msgid "file root" msgstr "racine du fichier" -#: core/models/files.py:42 +#: netbox/core/models/files.py:42 msgid "file path" msgstr "chemin du fichier" -#: core/models/files.py:44 +#: netbox/core/models/files.py:44 msgid "File path relative to the designated root path" msgstr "Chemin du fichier par rapport au chemin racine désigné" -#: core/models/files.py:61 +#: netbox/core/models/files.py:61 msgid "managed file" msgstr "fichier géré" -#: core/models/files.py:62 +#: netbox/core/models/files.py:62 msgid "managed files" msgstr "fichiers gérés" -#: core/models/jobs.py:53 +#: netbox/core/models/jobs.py:54 msgid "scheduled" msgstr "prévu" -#: core/models/jobs.py:58 +#: netbox/core/models/jobs.py:59 msgid "interval" msgstr "intervalle" -#: core/models/jobs.py:64 +#: netbox/core/models/jobs.py:65 msgid "Recurrence interval (in minutes)" msgstr "Intervalle de récurrence (en minutes)" -#: core/models/jobs.py:67 +#: netbox/core/models/jobs.py:68 msgid "started" msgstr "commencé" -#: core/models/jobs.py:72 +#: netbox/core/models/jobs.py:73 msgid "completed" msgstr "terminé" -#: core/models/jobs.py:90 extras/models/models.py:101 -#: extras/models/staging.py:87 +#: netbox/core/models/jobs.py:91 netbox/extras/models/models.py:101 +#: netbox/extras/models/staging.py:87 msgid "data" msgstr "données" -#: core/models/jobs.py:95 +#: netbox/core/models/jobs.py:96 msgid "error" msgstr "erreur" -#: core/models/jobs.py:100 +#: netbox/core/models/jobs.py:101 msgid "job ID" msgstr "ID de tâche" -#: core/models/jobs.py:111 +#: netbox/core/models/jobs.py:112 msgid "job" msgstr "emploi" -#: core/models/jobs.py:112 +#: netbox/core/models/jobs.py:113 msgid "jobs" msgstr "emplois" -#: core/models/jobs.py:135 +#: netbox/core/models/jobs.py:136 #, python-brace-format msgid "Jobs cannot be assigned to this object type ({type})." msgstr "Les tâches ne peuvent pas être attribuées à ce type d'objet ({type})." -#: core/models/jobs.py:185 +#: netbox/core/models/jobs.py:190 #, python-brace-format msgid "Invalid status for job termination. Choices are: {choices}" msgstr "" "Statut invalide pour l'arrêt de la tâche. Les choix sont les suivants : " "{choices}" -#: core/models/jobs.py:216 +#: netbox/core/models/jobs.py:221 msgid "" "enqueue() cannot be called with values for both schedule_at and immediate." msgstr "" "enqueue () ne peut pas être appelée avec des valeurs à la fois pour " "schedule_at et immediate." -#: core/signals.py:126 +#: netbox/core/signals.py:126 #, python-brace-format msgid "Deletion is prevented by a protection rule: {message}" msgstr "La suppression est empêchée par une règle de protection : {message}" -#: core/tables/change_logging.py:25 templates/account/profile.html:19 -#: templates/users/user.html:21 +#: netbox/core/tables/change_logging.py:25 +#: netbox/templates/account/profile.html:19 +#: netbox/templates/users/user.html:21 msgid "Full Name" msgstr "Nom complet" -#: core/tables/change_logging.py:37 core/tables/jobs.py:21 -#: extras/choices.py:41 extras/tables/tables.py:279 -#: extras/tables/tables.py:297 extras/tables/tables.py:329 -#: extras/tables/tables.py:409 extras/tables/tables.py:470 -#: extras/tables/tables.py:576 extras/tables/tables.py:616 -#: extras/tables/tables.py:653 netbox/tables/tables.py:244 -#: templates/core/objectchange.html:58 templates/extras/eventrule.html:78 -#: templates/extras/journalentry.html:18 tenancy/tables/contacts.py:93 -#: vpn/tables/l2vpn.py:64 +#: netbox/core/tables/change_logging.py:37 netbox/core/tables/jobs.py:21 +#: netbox/extras/choices.py:41 netbox/extras/tables/tables.py:279 +#: 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/templates/core/objectchange.html:58 +#: netbox/templates/extras/eventrule.html:78 +#: netbox/templates/extras/journalentry.html:18 +#: netbox/tenancy/tables/contacts.py:93 netbox/vpn/tables/l2vpn.py:64 msgid "Object" msgstr "Objet" -#: core/tables/change_logging.py:42 templates/core/objectchange.html:68 +#: netbox/core/tables/change_logging.py:42 +#: netbox/templates/core/objectchange.html:68 msgid "Request ID" msgstr "ID de demande" -#: core/tables/config.py:21 users/forms/filtersets.py:44 users/tables.py:39 +#: netbox/core/tables/config.py:21 netbox/users/forms/filtersets.py:44 +#: netbox/users/tables.py:39 msgid "Is Active" msgstr "Est actif" -#: core/tables/data.py:50 templates/core/datafile.html:31 +#: netbox/core/tables/data.py:50 netbox/templates/core/datafile.html:31 msgid "Path" msgstr "Sentier" -#: core/tables/data.py:54 templates/extras/inc/result_pending.html:7 +#: netbox/core/tables/data.py:54 +#: netbox/templates/extras/inc/result_pending.html:7 msgid "Last updated" msgstr "Dernière mise à jour" -#: core/tables/jobs.py:10 core/tables/tasks.py:76 -#: dcim/tables/devicetypes.py:164 extras/tables/tables.py:216 -#: extras/tables/tables.py:460 netbox/tables/tables.py:189 -#: templates/dcim/virtualchassis_edit.html:52 utilities/forms/forms.py:73 -#: wireless/tables/wirelesslink.py:17 +#: 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/templates/dcim/virtualchassis_edit.html:52 +#: netbox/utilities/forms/forms.py:73 +#: netbox/wireless/tables/wirelesslink.py:17 msgid "ID" msgstr "IDENTIFIANT" -#: core/tables/jobs.py:35 +#: netbox/core/tables/jobs.py:35 msgid "Interval" msgstr "Intervalle" -#: core/tables/plugins.py:14 templates/vpn/ipsecprofile.html:44 -#: vpn/forms/bulk_edit.py:141 vpn/forms/bulk_import.py:172 -#: vpn/tables/crypto.py:61 +#: netbox/core/tables/plugins.py:14 netbox/templates/vpn/ipsecprofile.html:44 +#: netbox/vpn/forms/bulk_edit.py:141 netbox/vpn/forms/bulk_import.py:172 +#: netbox/vpn/tables/crypto.py:61 msgid "Version" msgstr "Version" -#: core/tables/plugins.py:19 templates/core/datafile.html:38 +#: netbox/core/tables/plugins.py:19 netbox/templates/core/datafile.html:38 msgid "Last Updated" msgstr "Dernière mise à jour" -#: core/tables/plugins.py:23 +#: netbox/core/tables/plugins.py:23 msgid "Minimum NetBox Version" msgstr "Version minimale de NetBox" -#: core/tables/plugins.py:27 +#: netbox/core/tables/plugins.py:27 msgid "Maximum NetBox Version" msgstr "Version maximale de NetBox" -#: core/tables/plugins.py:31 core/tables/plugins.py:74 +#: netbox/core/tables/plugins.py:31 netbox/core/tables/plugins.py:74 msgid "No plugin data found" msgstr "Aucune donnée de plug-in trouvée" -#: core/tables/plugins.py:48 templates/core/plugin.html:62 +#: netbox/core/tables/plugins.py:48 netbox/templates/core/plugin.html:62 msgid "Author" msgstr "Auteur" -#: core/tables/plugins.py:54 +#: netbox/core/tables/plugins.py:54 msgid "Installed" msgstr "Installé" -#: core/tables/plugins.py:57 templates/core/plugin.html:84 +#: netbox/core/tables/plugins.py:57 netbox/templates/core/plugin.html:84 msgid "Certified" msgstr "Certifié" -#: core/tables/plugins.py:60 +#: netbox/core/tables/plugins.py:60 msgid "Published" msgstr "Publié" -#: core/tables/plugins.py:66 +#: netbox/core/tables/plugins.py:66 msgid "Installed Version" msgstr "Version installée" -#: core/tables/plugins.py:70 +#: netbox/core/tables/plugins.py:70 msgid "Latest Version" msgstr "Dernière version" -#: core/tables/tasks.py:18 +#: netbox/core/tables/tasks.py:18 msgid "Oldest Task" msgstr "La tâche la plus ancienne" -#: core/tables/tasks.py:42 templates/core/rq_worker_list.html:39 +#: netbox/core/tables/tasks.py:42 netbox/templates/core/rq_worker_list.html:39 msgid "Workers" msgstr "Travailleurs" -#: core/tables/tasks.py:46 vpn/tables/tunnels.py:88 +#: netbox/core/tables/tasks.py:46 netbox/vpn/tables/tunnels.py:88 msgid "Host" msgstr "Hôte" -#: core/tables/tasks.py:50 ipam/forms/filtersets.py:535 +#: netbox/core/tables/tasks.py:50 netbox/ipam/forms/filtersets.py:535 msgid "Port" msgstr "Port" -#: core/tables/tasks.py:54 +#: netbox/core/tables/tasks.py:54 msgid "DB" msgstr "DB" -#: core/tables/tasks.py:58 +#: netbox/core/tables/tasks.py:58 msgid "Scheduler PID" msgstr "PID du planificateur" -#: core/tables/tasks.py:62 +#: netbox/core/tables/tasks.py:62 msgid "No queues found" msgstr "Aucune file d'attente trouvée" -#: core/tables/tasks.py:82 +#: netbox/core/tables/tasks.py:82 msgid "Enqueued" msgstr "En file d'attente" -#: core/tables/tasks.py:85 +#: netbox/core/tables/tasks.py:85 msgid "Ended" msgstr "Terminé" -#: core/tables/tasks.py:93 templates/core/rq_task.html:85 +#: netbox/core/tables/tasks.py:93 netbox/templates/core/rq_task.html:85 msgid "Callable" msgstr "Appelable" -#: core/tables/tasks.py:97 +#: netbox/core/tables/tasks.py:97 msgid "No tasks found" msgstr "Aucune tâche trouvée" -#: core/tables/tasks.py:118 templates/core/rq_worker.html:47 +#: netbox/core/tables/tasks.py:118 netbox/templates/core/rq_worker.html:47 msgid "State" msgstr "État" -#: core/tables/tasks.py:121 templates/core/rq_worker.html:51 +#: netbox/core/tables/tasks.py:121 netbox/templates/core/rq_worker.html:51 msgid "Birth" msgstr "Naissance" -#: core/tables/tasks.py:124 templates/core/rq_worker.html:59 +#: netbox/core/tables/tasks.py:124 netbox/templates/core/rq_worker.html:59 msgid "PID" msgstr "PID" -#: core/tables/tasks.py:128 +#: netbox/core/tables/tasks.py:128 msgid "No workers found" msgstr "Aucun travailleur n'a été trouvé" -#: core/views.py:90 +#: 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}" -#: core/views.py:319 +#: netbox/core/views.py:319 #, python-brace-format msgid "Restored configuration revision #{id}" msgstr "Révision de configuration restaurée #{id}" -#: core/views.py:412 core/views.py:455 core/views.py:531 +#: 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 "Poste {job_id} introuvable" -#: core/views.py:463 +#: netbox/core/views.py:463 #, python-brace-format msgid "Job {id} has been deleted." msgstr "Poste {id} a été supprimé." -#: core/views.py:465 +#: netbox/core/views.py:465 #, python-brace-format msgid "Error deleting job {id}: {error}" msgstr "Erreur lors de la suppression du job {id}: {error}" -#: core/views.py:478 core/views.py:496 +#: netbox/core/views.py:478 netbox/core/views.py:496 #, python-brace-format msgid "Job {id} not found." msgstr "Poste {id} introuvable." -#: core/views.py:484 +#: netbox/core/views.py:484 #, python-brace-format msgid "Job {id} has been re-enqueued." msgstr "Poste {id} a été replacé dans la file d'attente." -#: core/views.py:519 +#: netbox/core/views.py:519 #, python-brace-format msgid "Job {id} has been enqueued." msgstr "Poste {id} a été mis en file d'attente." -#: core/views.py:538 +#: netbox/core/views.py:538 #, python-brace-format msgid "Job {id} has been stopped." msgstr "Poste {id} a été arrêté." -#: core/views.py:540 +#: netbox/core/views.py:540 #, python-brace-format msgid "Failed to stop job {id}" msgstr "Impossible d'arrêter la tâche {id}" -#: core/views.py:678 +#: netbox/core/views.py:674 msgid "Plugins catalog could not be loaded" msgstr "Le catalogue des plugins n'a pas pu être chargé" -#: core/views.py:712 +#: netbox/core/views.py:708 #, python-brace-format msgid "Plugin {name} not found" msgstr "Plug-in {name} introuvable" -#: dcim/api/serializers_/devices.py:49 dcim/api/serializers_/devicetypes.py:25 +#: netbox/dcim/api/serializers_/devices.py:49 +#: netbox/dcim/api/serializers_/devicetypes.py:25 msgid "Position (U)" msgstr "Position (U)" -#: dcim/api/serializers_/racks.py:112 templates/dcim/rack.html:28 +#: netbox/dcim/api/serializers_/racks.py:112 +#: netbox/templates/dcim/rack.html:28 msgid "Facility ID" msgstr "ID de l'établissement" -#: dcim/choices.py:21 virtualization/choices.py:21 +#: netbox/dcim/choices.py:21 netbox/virtualization/choices.py:21 msgid "Staging" msgstr "Mise en scène" -#: dcim/choices.py:23 dcim/choices.py:189 dcim/choices.py:240 -#: dcim/choices.py:1531 virtualization/choices.py:23 -#: virtualization/choices.py:48 +#: 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 msgid "Decommissioning" msgstr "Démantèlement" -#: dcim/choices.py:24 +#: netbox/dcim/choices.py:24 msgid "Retired" msgstr "Supprimé" -#: dcim/choices.py:65 +#: netbox/dcim/choices.py:65 msgid "2-post frame" msgstr "Châssis à 2 montants" -#: dcim/choices.py:66 +#: netbox/dcim/choices.py:66 msgid "4-post frame" msgstr "Châssis à 4 montants" -#: dcim/choices.py:67 +#: netbox/dcim/choices.py:67 msgid "4-post cabinet" msgstr "Armoire à 4 montants" -#: dcim/choices.py:68 +#: netbox/dcim/choices.py:68 msgid "Wall-mounted frame" msgstr "Châssis mural" -#: dcim/choices.py:69 +#: netbox/dcim/choices.py:69 msgid "Wall-mounted frame (vertical)" msgstr "Châssis mural (vertical)" -#: dcim/choices.py:70 +#: netbox/dcim/choices.py:70 msgid "Wall-mounted cabinet" msgstr "Armoire murale" -#: dcim/choices.py:71 +#: netbox/dcim/choices.py:71 msgid "Wall-mounted cabinet (vertical)" msgstr "Armoire murale (verticale)" -#: dcim/choices.py:83 dcim/choices.py:84 dcim/choices.py:85 dcim/choices.py:86 +#: netbox/dcim/choices.py:83 netbox/dcim/choices.py:84 +#: netbox/dcim/choices.py:85 netbox/dcim/choices.py:86 #, python-brace-format msgid "{n} inches" msgstr "{n} pouces" -#: dcim/choices.py:100 ipam/choices.py:32 ipam/choices.py:50 -#: ipam/choices.py:70 ipam/choices.py:155 wireless/choices.py:26 +#: netbox/dcim/choices.py:100 netbox/ipam/choices.py:32 +#: netbox/ipam/choices.py:50 netbox/ipam/choices.py:70 +#: netbox/ipam/choices.py:155 netbox/wireless/choices.py:26 msgid "Reserved" msgstr "Réservé" -#: dcim/choices.py:101 templates/dcim/device.html:259 +#: netbox/dcim/choices.py:101 netbox/templates/dcim/device.html:259 msgid "Available" msgstr "Disponible" -#: dcim/choices.py:104 ipam/choices.py:33 ipam/choices.py:51 -#: ipam/choices.py:71 ipam/choices.py:156 wireless/choices.py:28 +#: netbox/dcim/choices.py:104 netbox/ipam/choices.py:33 +#: netbox/ipam/choices.py:51 netbox/ipam/choices.py:71 +#: netbox/ipam/choices.py:156 netbox/wireless/choices.py:28 msgid "Deprecated" msgstr "Obsolète" -#: dcim/choices.py:114 templates/dcim/inc/panels/racktype_dimensions.html:41 +#: netbox/dcim/choices.py:114 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:41 msgid "Millimeters" msgstr "Millimètres" -#: dcim/choices.py:115 dcim/choices.py:1553 +#: netbox/dcim/choices.py:115 netbox/dcim/choices.py:1555 msgid "Inches" msgstr "Pouces" -#: dcim/choices.py:136 dcim/choices.py:207 dcim/choices.py:254 +#: netbox/dcim/choices.py:136 netbox/dcim/choices.py:207 +#: netbox/dcim/choices.py:254 msgid "Front to rear" msgstr "De l'avant vers l'arrière" -#: dcim/choices.py:137 dcim/choices.py:208 dcim/choices.py:255 +#: netbox/dcim/choices.py:137 netbox/dcim/choices.py:208 +#: netbox/dcim/choices.py:255 msgid "Rear to front" msgstr "De l'arrière vers l'avant" -#: dcim/choices.py:151 dcim/forms/bulk_edit.py:68 dcim/forms/bulk_edit.py:87 -#: dcim/forms/bulk_edit.py:173 dcim/forms/bulk_edit.py:1405 -#: dcim/forms/bulk_import.py:60 dcim/forms/bulk_import.py:74 -#: dcim/forms/bulk_import.py:137 dcim/forms/bulk_import.py:566 -#: dcim/forms/bulk_import.py:833 dcim/forms/bulk_import.py:1088 -#: dcim/forms/filtersets.py:234 dcim/forms/model_forms.py:74 -#: dcim/forms/model_forms.py:93 dcim/forms/model_forms.py:170 -#: dcim/forms/model_forms.py:1062 dcim/forms/model_forms.py:1502 -#: dcim/forms/object_import.py:176 dcim/tables/devices.py:656 -#: dcim/tables/devices.py:869 dcim/tables/devices.py:954 -#: extras/tables/tables.py:223 ipam/tables/fhrp.py:59 ipam/tables/ip.py:378 -#: ipam/tables/services.py:44 templates/dcim/interface.html:102 -#: templates/dcim/interface.html:309 templates/dcim/location.html:41 -#: templates/dcim/region.html:37 templates/dcim/sitegroup.html:37 -#: templates/ipam/service.html:28 templates/tenancy/contactgroup.html:29 -#: templates/tenancy/tenantgroup.html:37 -#: templates/virtualization/vminterface.html:39 -#: templates/wireless/wirelesslangroup.html:37 tenancy/forms/bulk_edit.py:27 -#: tenancy/forms/bulk_edit.py:61 tenancy/forms/bulk_import.py:24 -#: tenancy/forms/bulk_import.py:58 tenancy/forms/model_forms.py:25 -#: tenancy/forms/model_forms.py:68 virtualization/forms/bulk_edit.py:207 -#: virtualization/forms/bulk_import.py:151 -#: virtualization/tables/virtualmachines.py:162 wireless/forms/bulk_edit.py:24 -#: wireless/forms/bulk_import.py:21 wireless/forms/model_forms.py:21 +#: 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/templates/dcim/location.html:41 netbox/templates/dcim/region.html:37 +#: netbox/templates/dcim/sitegroup.html:37 +#: netbox/templates/ipam/service.html:28 +#: netbox/templates/tenancy/contactgroup.html:29 +#: netbox/templates/tenancy/tenantgroup.html:37 +#: netbox/templates/virtualization/vminterface.html:39 +#: netbox/templates/wireless/wirelesslangroup.html:37 +#: netbox/tenancy/forms/bulk_edit.py:27 netbox/tenancy/forms/bulk_edit.py:61 +#: netbox/tenancy/forms/bulk_import.py:24 +#: netbox/tenancy/forms/bulk_import.py:58 +#: netbox/tenancy/forms/model_forms.py:25 +#: netbox/tenancy/forms/model_forms.py:68 +#: netbox/virtualization/forms/bulk_edit.py:207 +#: netbox/virtualization/forms/bulk_import.py:151 +#: netbox/virtualization/tables/virtualmachines.py:162 +#: netbox/wireless/forms/bulk_edit.py:24 +#: netbox/wireless/forms/bulk_import.py:21 +#: netbox/wireless/forms/model_forms.py:21 msgid "Parent" msgstr "Parent" -#: dcim/choices.py:152 +#: netbox/dcim/choices.py:152 msgid "Child" msgstr "Enfant" -#: dcim/choices.py:166 templates/dcim/device.html:340 -#: templates/dcim/rack.html:133 templates/dcim/rack_elevation_list.html:20 -#: templates/dcim/rackreservation.html:76 +#: netbox/dcim/choices.py:166 netbox/templates/dcim/device.html:340 +#: netbox/templates/dcim/rack.html:133 +#: netbox/templates/dcim/rack_elevation_list.html:20 +#: netbox/templates/dcim/rackreservation.html:76 msgid "Front" msgstr "Avant" -#: dcim/choices.py:167 templates/dcim/device.html:346 -#: templates/dcim/rack.html:139 templates/dcim/rack_elevation_list.html:21 -#: templates/dcim/rackreservation.html:82 +#: netbox/dcim/choices.py:167 netbox/templates/dcim/device.html:346 +#: netbox/templates/dcim/rack.html:139 +#: netbox/templates/dcim/rack_elevation_list.html:21 +#: netbox/templates/dcim/rackreservation.html:82 msgid "Rear" msgstr "Arrière" -#: dcim/choices.py:186 dcim/choices.py:238 virtualization/choices.py:46 +#: netbox/dcim/choices.py:186 netbox/dcim/choices.py:238 +#: netbox/virtualization/choices.py:46 msgid "Staged" msgstr "Mis en scène" -#: dcim/choices.py:188 +#: netbox/dcim/choices.py:188 msgid "Inventory" msgstr "Inventaire" -#: dcim/choices.py:209 dcim/choices.py:256 +#: netbox/dcim/choices.py:209 netbox/dcim/choices.py:256 msgid "Left to right" msgstr "De gauche à droite" -#: dcim/choices.py:210 dcim/choices.py:257 +#: netbox/dcim/choices.py:210 netbox/dcim/choices.py:257 msgid "Right to left" msgstr "De droite à gauche" -#: dcim/choices.py:211 dcim/choices.py:258 +#: netbox/dcim/choices.py:211 netbox/dcim/choices.py:258 msgid "Side to rear" msgstr "D'un côté à l'arrière" -#: dcim/choices.py:212 +#: netbox/dcim/choices.py:212 msgid "Rear to side" msgstr "De l'arrière vers le côté" -#: dcim/choices.py:213 +#: netbox/dcim/choices.py:213 msgid "Bottom to top" msgstr "De bas en haut" -#: dcim/choices.py:214 +#: netbox/dcim/choices.py:214 msgid "Top to bottom" msgstr "De haut en bas" -#: dcim/choices.py:215 dcim/choices.py:259 dcim/choices.py:1303 +#: netbox/dcim/choices.py:215 netbox/dcim/choices.py:259 +#: netbox/dcim/choices.py:1305 msgid "Passive" msgstr "Passif" -#: dcim/choices.py:216 +#: netbox/dcim/choices.py:216 msgid "Mixed" msgstr "Mixte" -#: dcim/choices.py:484 dcim/choices.py:733 +#: netbox/dcim/choices.py:484 netbox/dcim/choices.py:733 msgid "NEMA (Non-locking)" msgstr "NEMA (non verrouillable)" -#: dcim/choices.py:506 dcim/choices.py:755 +#: netbox/dcim/choices.py:506 netbox/dcim/choices.py:755 msgid "NEMA (Locking)" msgstr "NEMA (verrouillage)" -#: dcim/choices.py:530 dcim/choices.py:779 +#: netbox/dcim/choices.py:530 netbox/dcim/choices.py:779 msgid "California Style" msgstr "Style californien" -#: dcim/choices.py:538 +#: netbox/dcim/choices.py:538 msgid "International/ITA" msgstr "International/ITA" -#: dcim/choices.py:573 dcim/choices.py:814 +#: netbox/dcim/choices.py:573 netbox/dcim/choices.py:814 msgid "Proprietary" msgstr "Propriétaire" -#: dcim/choices.py:581 dcim/choices.py:824 dcim/choices.py:1219 -#: dcim/choices.py:1221 dcim/choices.py:1447 dcim/choices.py:1449 -#: netbox/navigation/menu.py:200 +#: 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 msgid "Other" msgstr "Autres" -#: dcim/choices.py:787 +#: netbox/dcim/choices.py:787 msgid "ITA/International" msgstr "ITA/International" -#: dcim/choices.py:854 +#: netbox/dcim/choices.py:854 msgid "Physical" msgstr "Physique" -#: dcim/choices.py:855 dcim/choices.py:1023 +#: netbox/dcim/choices.py:855 netbox/dcim/choices.py:1024 msgid "Virtual" msgstr "Virtuel" -#: dcim/choices.py:856 dcim/choices.py:1097 dcim/forms/bulk_edit.py:1515 -#: dcim/forms/filtersets.py:1330 dcim/forms/model_forms.py:988 -#: dcim/forms/model_forms.py:1397 netbox/navigation/menu.py:140 -#: netbox/navigation/menu.py:144 templates/dcim/interface.html:210 +#: 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 msgid "Wireless" msgstr "Sans fil" -#: dcim/choices.py:1021 +#: netbox/dcim/choices.py:1022 msgid "Virtual interfaces" msgstr "Interfaces virtuelles" -#: dcim/choices.py:1024 dcim/forms/bulk_edit.py:1410 -#: dcim/forms/bulk_import.py:840 dcim/forms/model_forms.py:974 -#: dcim/tables/devices.py:660 templates/dcim/interface.html:106 -#: templates/virtualization/vminterface.html:43 -#: virtualization/forms/bulk_edit.py:212 -#: virtualization/forms/bulk_import.py:158 -#: virtualization/tables/virtualmachines.py:166 +#: 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/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 msgid "Bridge" msgstr "Passerelle" -#: dcim/choices.py:1025 +#: netbox/dcim/choices.py:1026 msgid "Link Aggregation Group (LAG)" msgstr "Groupe d'agrégation de liens (LAG)" -#: dcim/choices.py:1029 +#: netbox/dcim/choices.py:1030 msgid "Ethernet (fixed)" msgstr "Ethernet (fixe)" -#: dcim/choices.py:1044 +#: netbox/dcim/choices.py:1046 msgid "Ethernet (modular)" msgstr "Ethernet (modulaire)" -#: dcim/choices.py:1081 +#: netbox/dcim/choices.py:1083 msgid "Ethernet (backplane)" msgstr "Ethernet (panneau arrière)" -#: dcim/choices.py:1113 +#: netbox/dcim/choices.py:1115 msgid "Cellular" msgstr "Cellulaire" -#: dcim/choices.py:1165 dcim/forms/filtersets.py:383 -#: dcim/forms/filtersets.py:809 dcim/forms/filtersets.py:963 -#: dcim/forms/filtersets.py:1542 templates/dcim/inventoryitem.html:52 -#: templates/dcim/virtualchassis_edit.html:54 +#: 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/templates/dcim/virtualchassis_edit.html:54 msgid "Serial" msgstr "Série" -#: dcim/choices.py:1180 +#: netbox/dcim/choices.py:1182 msgid "Coaxial" msgstr "Coaxiale" -#: dcim/choices.py:1200 +#: netbox/dcim/choices.py:1202 msgid "Stacking" msgstr "Empilage" -#: dcim/choices.py:1250 +#: netbox/dcim/choices.py:1252 msgid "Half" msgstr "La moitié" -#: dcim/choices.py:1251 +#: netbox/dcim/choices.py:1253 msgid "Full" msgstr "Complet" -#: dcim/choices.py:1252 netbox/preferences.py:31 wireless/choices.py:480 +#: netbox/dcim/choices.py:1254 netbox/netbox/preferences.py:31 +#: netbox/wireless/choices.py:480 msgid "Auto" msgstr "Automatique" -#: dcim/choices.py:1263 +#: netbox/dcim/choices.py:1265 msgid "Access" msgstr "Accès" -#: dcim/choices.py:1264 ipam/tables/vlans.py:172 ipam/tables/vlans.py:217 -#: templates/dcim/inc/interface_vlans_table.html:7 +#: 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 "Tagué" -#: dcim/choices.py:1265 +#: netbox/dcim/choices.py:1267 msgid "Tagged (All)" msgstr "Tagué (Tous)" -#: dcim/choices.py:1294 +#: netbox/dcim/choices.py:1296 msgid "IEEE Standard" msgstr "Norme IEEE" -#: dcim/choices.py:1305 +#: netbox/dcim/choices.py:1307 msgid "Passive 24V (2-pair)" msgstr "24 V passif (2 paires)" -#: dcim/choices.py:1306 +#: netbox/dcim/choices.py:1308 msgid "Passive 24V (4-pair)" msgstr "24 V passif (4 paires)" -#: dcim/choices.py:1307 +#: netbox/dcim/choices.py:1309 msgid "Passive 48V (2-pair)" msgstr "48 V passif (2 paires)" -#: dcim/choices.py:1308 +#: netbox/dcim/choices.py:1310 msgid "Passive 48V (4-pair)" msgstr "48 V passif (4 paires)" -#: dcim/choices.py:1378 dcim/choices.py:1488 +#: netbox/dcim/choices.py:1380 netbox/dcim/choices.py:1490 msgid "Copper" msgstr "Cuivre" -#: dcim/choices.py:1401 +#: netbox/dcim/choices.py:1403 msgid "Fiber Optic" msgstr "fibre optique" -#: dcim/choices.py:1434 dcim/choices.py:1517 +#: netbox/dcim/choices.py:1436 netbox/dcim/choices.py:1519 msgid "USB" msgstr "USB" -#: dcim/choices.py:1504 +#: netbox/dcim/choices.py:1506 msgid "Fiber" msgstr "Fibre" -#: dcim/choices.py:1529 dcim/forms/filtersets.py:1227 +#: netbox/dcim/choices.py:1531 netbox/dcim/forms/filtersets.py:1227 msgid "Connected" msgstr "Connecté" -#: dcim/choices.py:1548 wireless/choices.py:497 +#: netbox/dcim/choices.py:1550 netbox/wireless/choices.py:497 msgid "Kilometers" msgstr "Kilomètres" -#: dcim/choices.py:1549 templates/dcim/cable_trace.html:65 -#: wireless/choices.py:498 +#: netbox/dcim/choices.py:1551 netbox/templates/dcim/cable_trace.html:65 +#: netbox/wireless/choices.py:498 msgid "Meters" msgstr "Compteurs" -#: dcim/choices.py:1550 +#: netbox/dcim/choices.py:1552 msgid "Centimeters" msgstr "Centimètres" -#: dcim/choices.py:1551 wireless/choices.py:499 +#: netbox/dcim/choices.py:1553 netbox/wireless/choices.py:499 msgid "Miles" msgstr "Miles" -#: dcim/choices.py:1552 templates/dcim/cable_trace.html:66 -#: wireless/choices.py:500 +#: netbox/dcim/choices.py:1554 netbox/templates/dcim/cable_trace.html:66 +#: netbox/wireless/choices.py:500 msgid "Feet" msgstr "Pieds" -#: dcim/choices.py:1568 templates/dcim/device.html:327 -#: templates/dcim/rack.html:107 +#: netbox/dcim/choices.py:1570 netbox/templates/dcim/device.html:327 +#: netbox/templates/dcim/rack.html:107 msgid "Kilograms" msgstr "Kilogrammes" -#: dcim/choices.py:1569 +#: netbox/dcim/choices.py:1571 msgid "Grams" msgstr "Grammes" -#: dcim/choices.py:1570 templates/dcim/device.html:328 -#: templates/dcim/rack.html:108 +#: netbox/dcim/choices.py:1572 netbox/templates/dcim/device.html:328 +#: netbox/templates/dcim/rack.html:108 msgid "Pounds" msgstr "Livres" -#: dcim/choices.py:1571 +#: netbox/dcim/choices.py:1573 msgid "Ounces" msgstr "Onces" -#: dcim/choices.py:1618 +#: netbox/dcim/choices.py:1620 msgid "Redundant" msgstr "Redondant" -#: dcim/choices.py:1639 +#: netbox/dcim/choices.py:1641 msgid "Single phase" msgstr "Monophasé" -#: dcim/choices.py:1640 +#: netbox/dcim/choices.py:1642 msgid "Three-phase" msgstr "Triphasé" -#: dcim/fields.py:45 +#: netbox/dcim/fields.py:45 #, python-brace-format msgid "Invalid MAC address format: {value}" msgstr "Format d'adresse MAC non valide : {value}" -#: dcim/fields.py:71 +#: netbox/dcim/fields.py:71 #, python-brace-format msgid "Invalid WWN format: {value}" msgstr "Format WWN non valide : {value}" -#: dcim/filtersets.py:86 +#: netbox/dcim/filtersets.py:86 msgid "Parent region (ID)" msgstr "Région parente (ID)" -#: dcim/filtersets.py:92 +#: netbox/dcim/filtersets.py:92 msgid "Parent region (slug)" msgstr "Région parente (slug)" -#: dcim/filtersets.py:116 +#: netbox/dcim/filtersets.py:116 msgid "Parent site group (ID)" msgstr "Groupe de sites parent (ID)" -#: dcim/filtersets.py:122 +#: netbox/dcim/filtersets.py:122 msgid "Parent site group (slug)" msgstr "Groupe de sites parents (slug)" -#: dcim/filtersets.py:164 extras/filtersets.py:364 ipam/filtersets.py:841 -#: ipam/filtersets.py:993 +#: netbox/dcim/filtersets.py:164 netbox/extras/filtersets.py:364 +#: netbox/ipam/filtersets.py:843 netbox/ipam/filtersets.py:995 msgid "Group (ID)" msgstr "Groupe (ID)" -#: dcim/filtersets.py:170 +#: netbox/dcim/filtersets.py:170 msgid "Group (slug)" msgstr "Groupe (slug)" -#: dcim/filtersets.py:176 dcim/filtersets.py:181 +#: netbox/dcim/filtersets.py:176 netbox/dcim/filtersets.py:181 msgid "AS (ID)" msgstr "COMME (ID)" -#: dcim/filtersets.py:246 +#: netbox/dcim/filtersets.py:246 msgid "Parent location (ID)" msgstr "Lieu de résidence du parent (ID)" -#: dcim/filtersets.py:252 +#: netbox/dcim/filtersets.py:252 msgid "Parent location (slug)" msgstr "Localisation du parent (slug)" -#: dcim/filtersets.py:258 dcim/filtersets.py:369 dcim/filtersets.py:490 -#: dcim/filtersets.py:1057 dcim/filtersets.py:1404 dcim/filtersets.py:2182 +#: 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)" -#: dcim/filtersets.py:265 dcim/filtersets.py:376 dcim/filtersets.py:497 -#: dcim/filtersets.py:1410 extras/filtersets.py:542 +#: 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)" -#: dcim/filtersets.py:296 dcim/filtersets.py:381 dcim/filtersets.py:539 -#: dcim/filtersets.py:678 dcim/filtersets.py:882 dcim/filtersets.py:933 -#: dcim/filtersets.py:973 dcim/filtersets.py:1306 dcim/filtersets.py:1840 +#: 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 msgid "Manufacturer (ID)" msgstr "Fabricant (ID)" -#: dcim/filtersets.py:302 dcim/filtersets.py:387 dcim/filtersets.py:545 -#: dcim/filtersets.py:684 dcim/filtersets.py:888 dcim/filtersets.py:939 -#: dcim/filtersets.py:979 dcim/filtersets.py:1312 dcim/filtersets.py:1846 +#: 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 msgid "Manufacturer (slug)" msgstr "Fabricant (slug)" -#: dcim/filtersets.py:393 +#: netbox/dcim/filtersets.py:393 msgid "Rack type (slug)" -msgstr "Type de rack (limace)" +msgstr "Type de baie (slug)" -#: dcim/filtersets.py:397 +#: netbox/dcim/filtersets.py:397 msgid "Rack type (ID)" -msgstr "Type de rack (ID)" +msgstr "Type de baie (ID)" -#: dcim/filtersets.py:411 dcim/filtersets.py:892 dcim/filtersets.py:994 -#: dcim/filtersets.py:1850 ipam/filtersets.py:381 ipam/filtersets.py:493 -#: ipam/filtersets.py:1003 virtualization/filtersets.py:210 +#: 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 msgid "Role (ID)" msgstr "Rôle (ID)" -#: dcim/filtersets.py:417 dcim/filtersets.py:898 dcim/filtersets.py:1000 -#: dcim/filtersets.py:1856 extras/filtersets.py:558 ipam/filtersets.py:387 -#: ipam/filtersets.py:499 ipam/filtersets.py:1009 -#: virtualization/filtersets.py:216 +#: 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 msgid "Role (slug)" msgstr "Rôle (slug)" -#: dcim/filtersets.py:447 dcim/filtersets.py:1062 dcim/filtersets.py:1415 -#: dcim/filtersets.py:2244 +#: netbox/dcim/filtersets.py:447 netbox/dcim/filtersets.py:1062 +#: netbox/dcim/filtersets.py:1415 netbox/dcim/filtersets.py:2244 msgid "Rack (ID)" msgstr "Baie (ID)" -#: dcim/filtersets.py:507 extras/filtersets.py:293 extras/filtersets.py:337 -#: extras/filtersets.py:359 extras/filtersets.py:419 users/filtersets.py:113 -#: users/filtersets.py:180 +#: netbox/dcim/filtersets.py:507 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)" -#: dcim/filtersets.py:549 +#: netbox/dcim/filtersets.py:549 msgid "Default platform (ID)" msgstr "Plateforme par défaut (ID)" -#: dcim/filtersets.py:555 +#: netbox/dcim/filtersets.py:555 msgid "Default platform (slug)" msgstr "Plateforme par défaut (slug)" -#: dcim/filtersets.py:558 dcim/forms/filtersets.py:517 +#: netbox/dcim/filtersets.py:558 netbox/dcim/forms/filtersets.py:517 msgid "Has a front image" msgstr "Possède une image frontale" -#: dcim/filtersets.py:562 dcim/forms/filtersets.py:524 +#: netbox/dcim/filtersets.py:562 netbox/dcim/forms/filtersets.py:524 msgid "Has a rear image" msgstr "Possède une image arrière" -#: dcim/filtersets.py:567 dcim/filtersets.py:688 dcim/filtersets.py:1131 -#: dcim/forms/filtersets.py:531 dcim/forms/filtersets.py:627 -#: dcim/forms/filtersets.py:848 +#: 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 msgid "Has console ports" msgstr "Possède des ports de console" -#: dcim/filtersets.py:571 dcim/filtersets.py:692 dcim/filtersets.py:1135 -#: dcim/forms/filtersets.py:538 dcim/forms/filtersets.py:634 -#: dcim/forms/filtersets.py:855 +#: 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 msgid "Has console server ports" msgstr "Possède des ports de serveur de console" -#: dcim/filtersets.py:575 dcim/filtersets.py:696 dcim/filtersets.py:1139 -#: dcim/forms/filtersets.py:545 dcim/forms/filtersets.py:641 -#: dcim/forms/filtersets.py:862 +#: 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 msgid "Has power ports" msgstr "Possède des ports d'alimentation" -#: dcim/filtersets.py:579 dcim/filtersets.py:700 dcim/filtersets.py:1143 -#: dcim/forms/filtersets.py:552 dcim/forms/filtersets.py:648 -#: dcim/forms/filtersets.py:869 +#: 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 msgid "Has power outlets" msgstr "Dispose de prises de courant" -#: dcim/filtersets.py:583 dcim/filtersets.py:704 dcim/filtersets.py:1147 -#: dcim/forms/filtersets.py:559 dcim/forms/filtersets.py:655 -#: dcim/forms/filtersets.py:876 +#: 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 msgid "Has interfaces" msgstr "Possède des interfaces" -#: dcim/filtersets.py:587 dcim/filtersets.py:708 dcim/filtersets.py:1151 -#: dcim/forms/filtersets.py:566 dcim/forms/filtersets.py:662 -#: dcim/forms/filtersets.py:883 +#: 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 msgid "Has pass-through ports" msgstr "Possède des ports d'intercommunication" -#: dcim/filtersets.py:591 dcim/filtersets.py:1155 dcim/forms/filtersets.py:580 +#: netbox/dcim/filtersets.py:591 netbox/dcim/filtersets.py:1155 +#: netbox/dcim/forms/filtersets.py:580 msgid "Has module bays" msgstr "Dispose de baies pour modules" -#: dcim/filtersets.py:595 dcim/filtersets.py:1159 dcim/forms/filtersets.py:573 +#: netbox/dcim/filtersets.py:595 netbox/dcim/filtersets.py:1159 +#: netbox/dcim/forms/filtersets.py:573 msgid "Has device bays" msgstr "Dispose de baies pour appareils" -#: dcim/filtersets.py:599 dcim/forms/filtersets.py:587 +#: netbox/dcim/filtersets.py:599 netbox/dcim/forms/filtersets.py:587 msgid "Has inventory items" msgstr "Possède des articles en inventaire" -#: dcim/filtersets.py:756 dcim/filtersets.py:989 dcim/filtersets.py:1436 +#: netbox/dcim/filtersets.py:756 netbox/dcim/filtersets.py:989 +#: netbox/dcim/filtersets.py:1436 msgid "Device type (ID)" msgstr "Type d'appareil (ID)" -#: dcim/filtersets.py:772 dcim/filtersets.py:1317 +#: netbox/dcim/filtersets.py:772 netbox/dcim/filtersets.py:1317 msgid "Module type (ID)" msgstr "Type de module (ID)" -#: dcim/filtersets.py:804 dcim/filtersets.py:1591 +#: netbox/dcim/filtersets.py:804 netbox/dcim/filtersets.py:1591 msgid "Power port (ID)" msgstr "Port d'alimentation (ID)" -#: dcim/filtersets.py:878 dcim/filtersets.py:1836 +#: netbox/dcim/filtersets.py:878 netbox/dcim/filtersets.py:1836 msgid "Parent inventory item (ID)" msgstr "Article d'inventaire parent (ID)" -#: dcim/filtersets.py:921 dcim/filtersets.py:947 dcim/filtersets.py:1127 -#: virtualization/filtersets.py:238 +#: netbox/dcim/filtersets.py:921 netbox/dcim/filtersets.py:947 +#: netbox/dcim/filtersets.py:1127 netbox/virtualization/filtersets.py:238 msgid "Config template (ID)" msgstr "Modèle de configuration (ID)" -#: dcim/filtersets.py:985 +#: netbox/dcim/filtersets.py:985 msgid "Device type (slug)" msgstr "Type d'appareil (slug)" -#: dcim/filtersets.py:1005 +#: netbox/dcim/filtersets.py:1005 msgid "Parent Device (ID)" msgstr "Appareil parent (ID)" -#: dcim/filtersets.py:1009 virtualization/filtersets.py:220 +#: netbox/dcim/filtersets.py:1009 netbox/virtualization/filtersets.py:220 msgid "Platform (ID)" msgstr "Plateforme (ID)" -#: dcim/filtersets.py:1015 extras/filtersets.py:569 -#: virtualization/filtersets.py:226 +#: netbox/dcim/filtersets.py:1015 netbox/extras/filtersets.py:569 +#: netbox/virtualization/filtersets.py:226 msgid "Platform (slug)" msgstr "Plateforme (slug)" -#: dcim/filtersets.py:1051 dcim/filtersets.py:1399 dcim/filtersets.py:1934 -#: dcim/filtersets.py:2176 dcim/filtersets.py:2235 +#: 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 msgid "Site name (slug)" msgstr "Nom du site (slug)" -#: dcim/filtersets.py:1067 +#: netbox/dcim/filtersets.py:1067 msgid "Parent bay (ID)" msgstr "Enfant parent (ID)" -#: dcim/filtersets.py:1071 +#: netbox/dcim/filtersets.py:1071 msgid "VM cluster (ID)" msgstr "Cluster de machines virtuelles (ID)" -#: dcim/filtersets.py:1077 extras/filtersets.py:591 -#: virtualization/filtersets.py:136 +#: netbox/dcim/filtersets.py:1077 netbox/extras/filtersets.py:591 +#: netbox/virtualization/filtersets.py:136 msgid "Cluster group (slug)" msgstr "Groupe de clusters (slug)" -#: dcim/filtersets.py:1082 virtualization/filtersets.py:130 +#: netbox/dcim/filtersets.py:1082 netbox/virtualization/filtersets.py:130 msgid "Cluster group (ID)" msgstr "Groupe de clusters (ID)" -#: dcim/filtersets.py:1088 +#: netbox/dcim/filtersets.py:1088 msgid "Device model (slug)" msgstr "Modèle d'appareil (slug)" -#: dcim/filtersets.py:1099 dcim/forms/bulk_edit.py:516 +#: netbox/dcim/filtersets.py:1099 netbox/dcim/forms/bulk_edit.py:522 msgid "Is full depth" msgstr "Est en pleine profondeur" -#: dcim/filtersets.py:1103 dcim/forms/common.py:18 -#: dcim/forms/filtersets.py:818 dcim/forms/filtersets.py:1385 -#: dcim/models/device_components.py:518 virtualization/filtersets.py:230 -#: virtualization/filtersets.py:301 virtualization/forms/filtersets.py:172 -#: virtualization/forms/filtersets.py:223 +#: 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 msgid "MAC address" msgstr "Adresse MAC" -#: dcim/filtersets.py:1110 dcim/filtersets.py:1274 -#: dcim/forms/filtersets.py:827 dcim/forms/filtersets.py:930 -#: virtualization/filtersets.py:234 virtualization/forms/filtersets.py:176 +#: 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 msgid "Has a primary IP" msgstr "Possède une adresse IP principale" -#: dcim/filtersets.py:1114 +#: netbox/dcim/filtersets.py:1114 msgid "Has an out-of-band IP" msgstr "Possède une adresse IP hors bande" -#: dcim/filtersets.py:1119 +#: netbox/dcim/filtersets.py:1119 msgid "Virtual chassis (ID)" msgstr "Châssis virtuel (ID)" -#: dcim/filtersets.py:1123 +#: netbox/dcim/filtersets.py:1123 msgid "Is a virtual chassis member" msgstr "Est un membre virtuel du châssis" -#: dcim/filtersets.py:1164 +#: netbox/dcim/filtersets.py:1164 msgid "OOB IP (ID)" msgstr "ASTUCE SUR L'EMPLOI (ID)" -#: dcim/filtersets.py:1168 +#: netbox/dcim/filtersets.py:1168 msgid "Has virtual device context" msgstr "Possède un contexte de périphérique virtuel" -#: dcim/filtersets.py:1257 +#: netbox/dcim/filtersets.py:1257 msgid "VDC (ID)" msgstr "VDC (IDENTIFIANT)" -#: dcim/filtersets.py:1262 +#: netbox/dcim/filtersets.py:1262 msgid "Device model" msgstr "Modèle d'appareil" -#: dcim/filtersets.py:1267 ipam/filtersets.py:632 vpn/filtersets.py:102 -#: vpn/filtersets.py:401 +#: 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)" -#: dcim/filtersets.py:1323 +#: netbox/dcim/filtersets.py:1323 msgid "Module type (model)" msgstr "Type de module (modèle)" -#: dcim/filtersets.py:1329 +#: netbox/dcim/filtersets.py:1329 msgid "Module bay (ID)" msgstr "Baie modulaire (ID)" -#: dcim/filtersets.py:1333 dcim/filtersets.py:1425 ipam/filtersets.py:611 -#: ipam/filtersets.py:851 ipam/filtersets.py:1115 -#: virtualization/filtersets.py:161 vpn/filtersets.py:379 +#: 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 msgid "Device (ID)" msgstr "Appareil (ID)" -#: dcim/filtersets.py:1421 +#: netbox/dcim/filtersets.py:1421 msgid "Rack (name)" msgstr "Baie (nom)" -#: dcim/filtersets.py:1431 ipam/filtersets.py:606 ipam/filtersets.py:846 -#: ipam/filtersets.py:1121 vpn/filtersets.py:374 +#: 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)" -#: dcim/filtersets.py:1442 +#: netbox/dcim/filtersets.py:1442 msgid "Device type (model)" msgstr "Type d'appareil (modèle)" -#: dcim/filtersets.py:1447 +#: netbox/dcim/filtersets.py:1447 msgid "Device role (ID)" msgstr "Rôle de l'appareil (ID)" -#: dcim/filtersets.py:1453 +#: netbox/dcim/filtersets.py:1453 msgid "Device role (slug)" msgstr "Rôle de l'appareil (slug)" -#: dcim/filtersets.py:1458 +#: netbox/dcim/filtersets.py:1458 msgid "Virtual Chassis (ID)" msgstr "Châssis virtuel (ID)" -#: dcim/filtersets.py:1464 dcim/forms/filtersets.py:109 -#: dcim/tables/devices.py:206 netbox/navigation/menu.py:79 -#: templates/dcim/device.html:120 templates/dcim/device_edit.html:93 -#: templates/dcim/virtualchassis.html:20 -#: templates/dcim/virtualchassis_add.html:8 -#: templates/dcim/virtualchassis_edit.html:24 +#: netbox/dcim/filtersets.py:1464 netbox/dcim/forms/filtersets.py:109 +#: netbox/dcim/tables/devices.py:206 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 +#: netbox/templates/dcim/virtualchassis_add.html:8 +#: netbox/templates/dcim/virtualchassis_edit.html:24 msgid "Virtual Chassis" msgstr "Châssis virtuel" -#: dcim/filtersets.py:1488 +#: netbox/dcim/filtersets.py:1488 msgid "Module (ID)" msgstr "Module (ID)" -#: dcim/filtersets.py:1495 +#: netbox/dcim/filtersets.py:1495 msgid "Cable (ID)" msgstr "Câble (ID)" -#: dcim/filtersets.py:1604 ipam/forms/bulk_import.py:189 -#: vpn/forms/bulk_import.py:308 +#: netbox/dcim/filtersets.py:1604 netbox/ipam/forms/bulk_import.py:189 +#: netbox/vpn/forms/bulk_import.py:308 msgid "Assigned VLAN" msgstr "VLAN attribué" -#: dcim/filtersets.py:1608 +#: netbox/dcim/filtersets.py:1608 msgid "Assigned VID" msgstr "VID attribué" -#: dcim/filtersets.py:1613 dcim/forms/bulk_edit.py:1489 -#: dcim/forms/bulk_import.py:891 dcim/forms/filtersets.py:1428 -#: dcim/forms/model_forms.py:1378 dcim/models/device_components.py:711 -#: dcim/tables/devices.py:626 ipam/filtersets.py:316 ipam/filtersets.py:327 -#: ipam/filtersets.py:483 ipam/filtersets.py:584 ipam/filtersets.py:595 -#: ipam/forms/bulk_edit.py:242 ipam/forms/bulk_edit.py:298 -#: ipam/forms/bulk_edit.py:340 ipam/forms/bulk_import.py:157 -#: ipam/forms/bulk_import.py:243 ipam/forms/bulk_import.py:279 -#: ipam/forms/filtersets.py:67 ipam/forms/filtersets.py:172 -#: ipam/forms/filtersets.py:309 ipam/forms/model_forms.py:62 -#: ipam/forms/model_forms.py:202 ipam/forms/model_forms.py:247 -#: ipam/forms/model_forms.py:300 ipam/forms/model_forms.py:431 -#: ipam/forms/model_forms.py:445 ipam/forms/model_forms.py:459 -#: ipam/models/ip.py:233 ipam/models/ip.py:512 ipam/models/ip.py:720 -#: ipam/models/vrfs.py:62 ipam/tables/ip.py:242 ipam/tables/ip.py:309 -#: ipam/tables/ip.py:360 ipam/tables/ip.py:450 -#: templates/dcim/interface.html:133 templates/ipam/ipaddress.html:18 -#: templates/ipam/iprange.html:40 templates/ipam/prefix.html:19 -#: templates/ipam/vrf.html:7 templates/ipam/vrf.html:13 -#: templates/virtualization/vminterface.html:47 -#: virtualization/forms/bulk_edit.py:261 -#: virtualization/forms/bulk_import.py:171 -#: virtualization/forms/filtersets.py:228 -#: virtualization/forms/model_forms.py:344 -#: virtualization/models/virtualmachines.py:355 -#: virtualization/tables/virtualmachines.py:143 +#: 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/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 msgid "VRF" msgstr "VRF" -#: dcim/filtersets.py:1619 ipam/filtersets.py:322 ipam/filtersets.py:333 -#: ipam/filtersets.py:489 ipam/filtersets.py:590 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)" -#: dcim/filtersets.py:1624 ipam/filtersets.py:1030 vpn/filtersets.py:342 +#: netbox/dcim/filtersets.py:1624 netbox/ipam/filtersets.py:1032 +#: netbox/vpn/filtersets.py:342 msgid "L2VPN (ID)" msgstr "L2VPN (IDENTIFIANT)" -#: dcim/filtersets.py:1630 dcim/forms/filtersets.py:1433 -#: dcim/tables/devices.py:570 ipam/filtersets.py:1036 -#: ipam/forms/filtersets.py:518 ipam/tables/vlans.py:137 -#: templates/dcim/interface.html:93 templates/ipam/vlan.html:66 -#: templates/vpn/l2vpntermination.html:12 -#: virtualization/forms/filtersets.py:233 vpn/forms/bulk_import.py:280 -#: vpn/forms/filtersets.py:246 vpn/forms/model_forms.py:409 -#: vpn/forms/model_forms.py:427 vpn/models/l2vpn.py:63 vpn/tables/l2vpn.py:55 +#: netbox/dcim/filtersets.py: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/templates/vpn/l2vpntermination.html:12 +#: netbox/virtualization/forms/filtersets.py:233 +#: netbox/vpn/forms/bulk_import.py:280 netbox/vpn/forms/filtersets.py:246 +#: netbox/vpn/forms/model_forms.py:409 netbox/vpn/forms/model_forms.py:427 +#: netbox/vpn/models/l2vpn.py:63 netbox/vpn/tables/l2vpn.py:55 msgid "L2VPN" msgstr "L2VPN" -#: dcim/filtersets.py:1662 +#: netbox/dcim/filtersets.py:1662 msgid "Virtual Chassis Interfaces for Device" msgstr "Interfaces de châssis virtuelles pour appareils" -#: dcim/filtersets.py:1667 +#: netbox/dcim/filtersets.py:1667 msgid "Virtual Chassis Interfaces for Device (ID)" msgstr "Interfaces de châssis virtuel pour le périphérique (ID)" -#: dcim/filtersets.py:1671 +#: netbox/dcim/filtersets.py:1671 msgid "Kind of interface" msgstr "Type d'interface" -#: dcim/filtersets.py:1676 virtualization/filtersets.py:293 +#: netbox/dcim/filtersets.py:1676 netbox/virtualization/filtersets.py:293 msgid "Parent interface (ID)" msgstr "Interface parent (ID)" -#: dcim/filtersets.py:1681 virtualization/filtersets.py:298 +#: netbox/dcim/filtersets.py:1681 netbox/virtualization/filtersets.py:298 msgid "Bridged interface (ID)" msgstr "Interface pontée (ID)" -#: dcim/filtersets.py:1686 +#: netbox/dcim/filtersets.py:1686 msgid "LAG interface (ID)" msgstr "Interface LAG (ID)" -#: dcim/filtersets.py:1713 dcim/filtersets.py:1725 -#: dcim/forms/filtersets.py:1345 dcim/forms/model_forms.py:1690 -#: templates/dcim/virtualdevicecontext.html:15 +#: netbox/dcim/filtersets.py:1713 netbox/dcim/filtersets.py:1725 +#: netbox/dcim/forms/filtersets.py:1345 netbox/dcim/forms/model_forms.py:1697 +#: netbox/templates/dcim/virtualdevicecontext.html:15 msgid "Virtual Device Context" msgstr "Contexte du périphérique virtuel" -#: dcim/filtersets.py:1719 +#: netbox/dcim/filtersets.py:1719 msgid "Virtual Device Context (Identifier)" msgstr "Contexte du périphérique virtuel (identifiant)" -#: dcim/filtersets.py:1730 templates/wireless/wirelesslan.html:11 -#: wireless/forms/model_forms.py:53 +#: netbox/dcim/filtersets.py:1730 +#: netbox/templates/wireless/wirelesslan.html:11 +#: netbox/wireless/forms/model_forms.py:53 msgid "Wireless LAN" msgstr "LAN sans fil" -#: dcim/filtersets.py:1734 dcim/tables/devices.py:613 +#: netbox/dcim/filtersets.py:1734 netbox/dcim/tables/devices.py:613 msgid "Wireless link" msgstr "Liaison sans fil" -#: dcim/filtersets.py:1803 +#: netbox/dcim/filtersets.py:1803 msgid "Parent module bay (ID)" msgstr "Baie du module parent (ID)" -#: dcim/filtersets.py:1808 +#: netbox/dcim/filtersets.py:1808 msgid "Installed module (ID)" msgstr "Module installé (ID)" -#: dcim/filtersets.py:1819 +#: netbox/dcim/filtersets.py:1819 msgid "Installed device (ID)" msgstr "Appareil installé (ID)" -#: dcim/filtersets.py:1825 +#: netbox/dcim/filtersets.py:1825 msgid "Installed device (name)" msgstr "Appareil installé (nom)" -#: dcim/filtersets.py:1891 +#: netbox/dcim/filtersets.py:1891 msgid "Master (ID)" msgstr "Maître (ID)" -#: dcim/filtersets.py:1897 +#: netbox/dcim/filtersets.py:1897 msgid "Master (name)" msgstr "Master (nom)" -#: dcim/filtersets.py:1939 tenancy/filtersets.py:245 +#: netbox/dcim/filtersets.py:1939 netbox/tenancy/filtersets.py:245 msgid "Tenant (ID)" msgstr "Locataire (ID)" -#: dcim/filtersets.py:1945 extras/filtersets.py:618 tenancy/filtersets.py:251 +#: netbox/dcim/filtersets.py:1945 netbox/extras/filtersets.py:618 +#: netbox/tenancy/filtersets.py:251 msgid "Tenant (slug)" msgstr "Locataire (slug)" -#: dcim/filtersets.py:1981 dcim/forms/filtersets.py:1077 +#: netbox/dcim/filtersets.py:1981 netbox/dcim/forms/filtersets.py:1077 msgid "Unterminated" msgstr "Non terminé" -#: dcim/filtersets.py:2239 +#: netbox/dcim/filtersets.py:2239 msgid "Power panel (ID)" msgstr "Panneau d'alimentation (ID)" -#: dcim/forms/bulk_create.py:40 extras/forms/filtersets.py:401 -#: extras/forms/model_forms.py:567 extras/forms/model_forms.py:619 -#: netbox/forms/base.py:86 netbox/forms/mixins.py:81 -#: netbox/tables/columns.py:478 -#: templates/circuits/inc/circuit_termination.html:32 -#: templates/generic/bulk_edit.html:65 templates/inc/panels/tags.html:5 -#: utilities/forms/fields/fields.py:81 +#: netbox/dcim/forms/bulk_create.py:40 netbox/extras/forms/filtersets.py: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/templates/circuits/inc/circuit_termination.html:32 +#: netbox/templates/generic/bulk_edit.html:65 +#: netbox/templates/inc/panels/tags.html:5 +#: netbox/utilities/forms/fields/fields.py:81 msgid "Tags" -msgstr "Balises" +msgstr "Étiquettes" -#: dcim/forms/bulk_create.py:112 dcim/forms/filtersets.py:1498 -#: dcim/forms/model_forms.py:488 dcim/forms/model_forms.py:546 -#: dcim/forms/object_create.py:197 dcim/forms/object_create.py:353 -#: dcim/tables/devices.py:165 dcim/tables/devices.py:707 -#: dcim/tables/devicetypes.py:246 templates/dcim/device.html:43 -#: templates/dcim/device.html:131 templates/dcim/modulebay.html:38 -#: templates/dcim/virtualchassis.html:66 -#: templates/dcim/virtualchassis_edit.html:55 +#: 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/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/templates/dcim/device.html:43 netbox/templates/dcim/device.html:131 +#: netbox/templates/dcim/modulebay.html:38 +#: netbox/templates/dcim/virtualchassis.html:66 +#: netbox/templates/dcim/virtualchassis_edit.html:55 msgid "Position" msgstr "Position" -#: dcim/forms/bulk_create.py:114 +#: netbox/dcim/forms/bulk_create.py:114 msgid "" "Alphanumeric ranges are supported. (Must match the number of names being " "created.)" @@ -3134,826 +3464,923 @@ msgstr "" "Les plages alphanumériques sont prises en charge. (Doit correspondre au " "nombre de noms en cours de création.)" -#: dcim/forms/bulk_edit.py:132 +#: netbox/dcim/forms/bulk_edit.py:133 msgid "Contact name" msgstr "Nom du contact" -#: dcim/forms/bulk_edit.py:137 +#: netbox/dcim/forms/bulk_edit.py:138 msgid "Contact phone" msgstr "Téléphone de contact" -#: dcim/forms/bulk_edit.py:143 +#: netbox/dcim/forms/bulk_edit.py:144 msgid "Contact E-mail" msgstr "Adresse électronique de contact" -#: dcim/forms/bulk_edit.py:146 dcim/forms/bulk_import.py:123 -#: dcim/forms/model_forms.py:128 +#: netbox/dcim/forms/bulk_edit.py:147 netbox/dcim/forms/bulk_import.py:123 +#: netbox/dcim/forms/model_forms.py:128 msgid "Time zone" msgstr "Fuseau horaire" -#: dcim/forms/bulk_edit.py:224 dcim/forms/bulk_edit.py:495 -#: dcim/forms/bulk_edit.py:559 dcim/forms/bulk_edit.py:632 -#: dcim/forms/bulk_edit.py:656 dcim/forms/bulk_edit.py:740 -#: dcim/forms/bulk_edit.py:1267 dcim/forms/bulk_edit.py:1660 -#: dcim/forms/bulk_import.py:182 dcim/forms/bulk_import.py:371 -#: dcim/forms/bulk_import.py:405 dcim/forms/bulk_import.py:450 -#: dcim/forms/bulk_import.py:486 dcim/forms/bulk_import.py:1082 -#: dcim/forms/filtersets.py:313 dcim/forms/filtersets.py:372 -#: dcim/forms/filtersets.py:494 dcim/forms/filtersets.py:619 -#: dcim/forms/filtersets.py:700 dcim/forms/filtersets.py:782 -#: dcim/forms/filtersets.py:947 dcim/forms/filtersets.py:1539 -#: dcim/forms/model_forms.py:207 dcim/forms/model_forms.py:337 -#: dcim/forms/model_forms.py:349 dcim/forms/model_forms.py:395 -#: dcim/forms/model_forms.py:436 dcim/forms/model_forms.py:1075 -#: dcim/forms/model_forms.py:1515 dcim/forms/object_import.py:187 -#: dcim/tables/devices.py:96 dcim/tables/devices.py:172 -#: dcim/tables/devices.py:940 dcim/tables/devicetypes.py:80 -#: dcim/tables/devicetypes.py:308 dcim/tables/modules.py:20 -#: dcim/tables/modules.py:60 dcim/tables/racks.py:58 dcim/tables/racks.py:132 -#: templates/dcim/devicetype.html:14 templates/dcim/inventoryitem.html:44 -#: templates/dcim/manufacturer.html:33 templates/dcim/modulebay.html:62 -#: templates/dcim/moduletype.html:25 templates/dcim/platform.html:37 -#: templates/dcim/racktype.html:16 +#: 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/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/templates/dcim/manufacturer.html:33 +#: netbox/templates/dcim/modulebay.html:62 +#: netbox/templates/dcim/moduletype.html:25 +#: netbox/templates/dcim/platform.html:37 +#: netbox/templates/dcim/racktype.html:16 msgid "Manufacturer" msgstr "Fabricant" -#: dcim/forms/bulk_edit.py:229 dcim/forms/bulk_edit.py:372 -#: dcim/forms/bulk_import.py:191 dcim/forms/bulk_import.py:263 -#: dcim/forms/filtersets.py:255 -#: templates/dcim/inc/panels/racktype_dimensions.html:6 +#: 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/templates/dcim/inc/panels/racktype_dimensions.html:6 msgid "Form factor" msgstr "Facteur de forme" -#: dcim/forms/bulk_edit.py:234 dcim/forms/bulk_edit.py:377 -#: dcim/forms/bulk_import.py:199 dcim/forms/bulk_import.py:266 -#: dcim/forms/filtersets.py:260 -#: templates/dcim/inc/panels/racktype_dimensions.html:10 +#: 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/templates/dcim/inc/panels/racktype_dimensions.html:10 msgid "Width" msgstr "Largeur" -#: dcim/forms/bulk_edit.py:240 dcim/forms/bulk_edit.py:383 -#: templates/dcim/devicetype.html:37 +#: netbox/dcim/forms/bulk_edit.py:241 netbox/dcim/forms/bulk_edit.py:389 +#: netbox/dcim/forms/bulk_import.py:280 +#: netbox/templates/dcim/devicetype.html:37 msgid "Height (U)" msgstr "Hauteur (U)" -#: dcim/forms/bulk_edit.py:249 dcim/forms/bulk_edit.py:388 -#: dcim/forms/filtersets.py:274 +#: netbox/dcim/forms/bulk_edit.py:250 netbox/dcim/forms/bulk_edit.py:394 +#: netbox/dcim/forms/filtersets.py:274 msgid "Descending units" msgstr "Unités décroissantes" -#: dcim/forms/bulk_edit.py:252 dcim/forms/bulk_edit.py:391 +#: netbox/dcim/forms/bulk_edit.py:253 netbox/dcim/forms/bulk_edit.py:397 msgid "Outer width" msgstr "Largeur extérieure" -#: dcim/forms/bulk_edit.py:257 dcim/forms/bulk_edit.py:396 +#: netbox/dcim/forms/bulk_edit.py:258 netbox/dcim/forms/bulk_edit.py:402 msgid "Outer depth" msgstr "Profondeur extérieure" -#: dcim/forms/bulk_edit.py:262 dcim/forms/bulk_edit.py:401 -#: dcim/forms/bulk_import.py:204 dcim/forms/bulk_import.py:271 +#: 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 msgid "Outer unit" msgstr "Unité extérieure" -#: dcim/forms/bulk_edit.py:267 dcim/forms/bulk_edit.py:406 +#: netbox/dcim/forms/bulk_edit.py:268 netbox/dcim/forms/bulk_edit.py:412 msgid "Mounting depth" msgstr "Profondeur de montage" -#: dcim/forms/bulk_edit.py:272 dcim/forms/bulk_edit.py:299 -#: dcim/forms/bulk_edit.py:416 dcim/forms/bulk_edit.py:446 -#: dcim/forms/bulk_edit.py:529 dcim/forms/bulk_edit.py:552 -#: dcim/forms/bulk_edit.py:573 dcim/forms/bulk_edit.py:595 -#: dcim/forms/bulk_import.py:384 dcim/forms/bulk_import.py:416 -#: dcim/forms/filtersets.py:285 dcim/forms/filtersets.py:307 -#: dcim/forms/filtersets.py:327 dcim/forms/filtersets.py:401 -#: dcim/forms/filtersets.py:488 dcim/forms/filtersets.py:594 -#: dcim/forms/filtersets.py:613 dcim/forms/filtersets.py:674 -#: dcim/forms/model_forms.py:221 dcim/forms/model_forms.py:298 -#: dcim/tables/devicetypes.py:106 dcim/tables/modules.py:35 -#: dcim/tables/racks.py:74 dcim/tables/racks.py:172 -#: extras/forms/bulk_edit.py:53 extras/forms/bulk_edit.py:133 -#: extras/forms/bulk_edit.py:183 extras/forms/bulk_edit.py:288 -#: extras/forms/filtersets.py:64 extras/forms/filtersets.py:156 -#: extras/forms/filtersets.py:243 ipam/forms/bulk_edit.py:190 -#: templates/dcim/device.html:324 templates/dcim/devicetype.html:49 -#: templates/dcim/moduletype.html:45 templates/dcim/rack.html:81 -#: templates/dcim/racktype.html:41 templates/extras/configcontext.html:17 -#: templates/extras/customlink.html:25 templates/extras/savedfilter.html:33 -#: templates/ipam/role.html:30 +#: netbox/dcim/forms/bulk_edit.py: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/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/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/racktype.html:41 +#: netbox/templates/extras/configcontext.html:17 +#: netbox/templates/extras/customlink.html:25 +#: netbox/templates/extras/savedfilter.html:33 +#: netbox/templates/ipam/role.html:30 msgid "Weight" msgstr "Poids" -#: dcim/forms/bulk_edit.py:277 dcim/forms/bulk_edit.py:421 -#: dcim/forms/filtersets.py:290 +#: netbox/dcim/forms/bulk_edit.py:278 netbox/dcim/forms/bulk_edit.py:427 +#: netbox/dcim/forms/filtersets.py:290 msgid "Max weight" msgstr "Poids maximum" -#: dcim/forms/bulk_edit.py:282 dcim/forms/bulk_edit.py:426 -#: dcim/forms/bulk_edit.py:534 dcim/forms/bulk_edit.py:578 -#: dcim/forms/bulk_import.py:210 dcim/forms/bulk_import.py:283 -#: dcim/forms/bulk_import.py:389 dcim/forms/bulk_import.py:421 -#: dcim/forms/filtersets.py:295 dcim/forms/filtersets.py:598 -#: dcim/forms/filtersets.py:678 +#: 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 msgid "Weight unit" msgstr "Unité de poids" -#: dcim/forms/bulk_edit.py:296 dcim/forms/filtersets.py:305 -#: dcim/forms/model_forms.py:217 dcim/forms/model_forms.py:256 -#: templates/dcim/rack.html:45 templates/dcim/racktype.html:13 +#: 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/templates/dcim/rack.html:45 netbox/templates/dcim/racktype.html:13 msgid "Rack Type" -msgstr "Type de rack" +msgstr "Type de baie" -#: dcim/forms/bulk_edit.py:298 dcim/forms/model_forms.py:220 -#: dcim/forms/model_forms.py:297 +#: netbox/dcim/forms/bulk_edit.py:299 netbox/dcim/forms/model_forms.py:220 +#: netbox/dcim/forms/model_forms.py:297 msgid "Outer Dimensions" msgstr "Dimensions extérieures" -#: dcim/forms/bulk_edit.py:301 dcim/forms/model_forms.py:222 -#: dcim/forms/model_forms.py:299 templates/dcim/device.html:315 -#: templates/dcim/inc/panels/racktype_dimensions.html:3 +#: 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/templates/dcim/inc/panels/racktype_dimensions.html:3 msgid "Dimensions" msgstr "Dimensions" -#: dcim/forms/bulk_edit.py:303 dcim/forms/filtersets.py:306 -#: dcim/forms/filtersets.py:326 dcim/forms/model_forms.py:224 -#: templates/dcim/inc/panels/racktype_numbering.html:3 +#: 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/templates/dcim/inc/panels/racktype_numbering.html:3 msgid "Numbering" msgstr "Numérotation" -#: dcim/forms/bulk_edit.py:357 dcim/forms/bulk_edit.py:1262 -#: dcim/forms/bulk_edit.py:1655 dcim/forms/bulk_import.py:253 -#: dcim/forms/bulk_import.py:1076 dcim/forms/filtersets.py:367 -#: dcim/forms/filtersets.py:777 dcim/forms/filtersets.py:1534 -#: dcim/forms/model_forms.py:251 dcim/forms/model_forms.py:1070 -#: dcim/forms/model_forms.py:1510 dcim/forms/object_import.py:181 -#: dcim/tables/devices.py:169 dcim/tables/devices.py:809 -#: dcim/tables/devices.py:937 dcim/tables/devicetypes.py:304 -#: dcim/tables/racks.py:129 extras/filtersets.py:552 -#: ipam/forms/bulk_edit.py:261 ipam/forms/bulk_edit.py:311 -#: ipam/forms/bulk_edit.py:359 ipam/forms/bulk_edit.py:511 -#: ipam/forms/bulk_import.py:197 ipam/forms/bulk_import.py:262 -#: ipam/forms/bulk_import.py:298 ipam/forms/bulk_import.py:455 -#: ipam/forms/filtersets.py:237 ipam/forms/filtersets.py:289 -#: ipam/forms/filtersets.py:360 ipam/forms/filtersets.py:509 -#: ipam/forms/model_forms.py:188 ipam/forms/model_forms.py:221 -#: ipam/forms/model_forms.py:250 ipam/forms/model_forms.py:643 -#: ipam/tables/ip.py:258 ipam/tables/ip.py:316 ipam/tables/ip.py:367 -#: ipam/tables/vlans.py:130 ipam/tables/vlans.py:235 -#: templates/dcim/device.html:182 -#: templates/dcim/inc/panels/inventory_items.html:20 -#: templates/dcim/interface.html:223 templates/dcim/inventoryitem.html:36 -#: templates/dcim/rack.html:49 templates/ipam/ipaddress.html:41 -#: templates/ipam/iprange.html:50 templates/ipam/prefix.html:77 -#: templates/ipam/role.html:19 templates/ipam/vlan.html:52 -#: templates/virtualization/virtualmachine.html:23 -#: templates/vpn/tunneltermination.html:17 -#: templates/wireless/inc/wirelesslink_interface.html:20 -#: tenancy/forms/bulk_edit.py:142 tenancy/forms/filtersets.py:107 -#: tenancy/forms/model_forms.py:137 tenancy/tables/contacts.py:102 -#: virtualization/forms/bulk_edit.py:145 -#: virtualization/forms/bulk_import.py:106 -#: virtualization/forms/filtersets.py:157 -#: virtualization/forms/model_forms.py:195 -#: virtualization/tables/virtualmachines.py:75 vpn/forms/bulk_edit.py:87 -#: vpn/forms/bulk_import.py:81 vpn/forms/filtersets.py:85 -#: vpn/forms/model_forms.py:78 vpn/forms/model_forms.py:113 -#: vpn/tables/tunnels.py:82 +#: netbox/dcim/forms/bulk_edit.py: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" -#: dcim/forms/bulk_edit.py:364 dcim/forms/bulk_edit.py:712 -#: dcim/forms/bulk_edit.py:764 templates/dcim/device.html:104 -#: templates/dcim/module.html:77 templates/dcim/modulebay.html:70 -#: templates/dcim/rack.html:57 templates/virtualization/virtualmachine.html:35 +#: netbox/dcim/forms/bulk_edit.py:363 netbox/dcim/forms/bulk_import.py:260 +#: netbox/dcim/forms/filtersets.py:380 +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/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" -#: dcim/forms/bulk_edit.py:367 dcim/forms/filtersets.py:387 -#: dcim/forms/filtersets.py:813 dcim/forms/filtersets.py:967 -#: dcim/forms/filtersets.py:1546 +#: 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 msgid "Asset tag" msgstr "Étiquette d'actif" -#: dcim/forms/bulk_edit.py:411 dcim/forms/bulk_edit.py:524 -#: dcim/forms/bulk_edit.py:568 dcim/forms/bulk_edit.py:705 -#: dcim/forms/bulk_import.py:277 dcim/forms/bulk_import.py:410 -#: dcim/forms/bulk_import.py:580 dcim/forms/filtersets.py:280 -#: dcim/forms/filtersets.py:511 dcim/forms/filtersets.py:669 -#: dcim/forms/filtersets.py:804 templates/dcim/device.html:98 -#: templates/dcim/devicetype.html:65 templates/dcim/moduletype.html:41 -#: templates/dcim/rack.html:65 templates/dcim/racktype.html:28 +#: 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/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 "Débit d'air" -#: dcim/forms/bulk_edit.py:440 dcim/forms/bulk_edit.py:910 -#: dcim/forms/bulk_import.py:322 dcim/forms/bulk_import.py:325 -#: dcim/forms/bulk_import.py:553 dcim/forms/bulk_import.py:1358 -#: dcim/forms/bulk_import.py:1362 dcim/forms/filtersets.py:104 -#: dcim/forms/filtersets.py:324 dcim/forms/filtersets.py:405 -#: dcim/forms/filtersets.py:419 dcim/forms/filtersets.py:457 -#: dcim/forms/filtersets.py:772 dcim/forms/filtersets.py:1035 -#: dcim/forms/filtersets.py:1167 dcim/forms/model_forms.py:264 -#: dcim/forms/model_forms.py:306 dcim/forms/model_forms.py:479 -#: dcim/forms/model_forms.py:755 dcim/forms/object_create.py:400 -#: dcim/tables/devices.py:161 dcim/tables/power.py:70 dcim/tables/racks.py:217 -#: ipam/forms/filtersets.py:442 templates/dcim/device.html:30 -#: templates/dcim/inc/cable_termination.html:16 -#: templates/dcim/powerfeed.html:28 templates/dcim/rack.html:13 -#: templates/dcim/rack/base.html:4 templates/dcim/rackreservation.html:19 -#: templates/dcim/rackreservation.html:36 -#: virtualization/forms/model_forms.py:113 +#: netbox/dcim/forms/bulk_edit.py: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/templates/dcim/device.html:30 +#: netbox/templates/dcim/inc/cable_termination.html:16 +#: netbox/templates/dcim/powerfeed.html:28 netbox/templates/dcim/rack.html:13 +#: netbox/templates/dcim/rack/base.html:4 +#: netbox/templates/dcim/rackreservation.html:19 +#: netbox/templates/dcim/rackreservation.html:36 +#: netbox/virtualization/forms/model_forms.py:113 msgid "Rack" msgstr "Baie" -#: dcim/forms/bulk_edit.py:444 dcim/forms/bulk_edit.py:730 -#: dcim/forms/filtersets.py:325 dcim/forms/filtersets.py:398 -#: dcim/forms/filtersets.py:481 dcim/forms/filtersets.py:608 -#: dcim/forms/filtersets.py:721 dcim/forms/filtersets.py:942 -#: dcim/forms/model_forms.py:670 dcim/forms/model_forms.py:1580 -#: templates/dcim/device_edit.html:20 +#: 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/templates/dcim/device_edit.html:20 msgid "Hardware" msgstr "Matériel" -#: dcim/forms/bulk_edit.py:500 dcim/forms/bulk_import.py:377 -#: dcim/forms/filtersets.py:499 dcim/forms/model_forms.py:353 +#: 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 msgid "Default platform" msgstr "Plateforme par défaut" -#: dcim/forms/bulk_edit.py:505 dcim/forms/bulk_edit.py:564 -#: dcim/forms/filtersets.py:502 dcim/forms/filtersets.py:622 +#: 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 msgid "Part number" msgstr "Numéro de pièce" -#: dcim/forms/bulk_edit.py:509 +#: netbox/dcim/forms/bulk_edit.py:515 msgid "U height" msgstr "Hauteur en U" -#: dcim/forms/bulk_edit.py:521 dcim/tables/devicetypes.py:102 +#: netbox/dcim/forms/bulk_edit.py:527 netbox/dcim/tables/devicetypes.py:102 msgid "Exclude from utilization" msgstr "Exclure de l'utilisation" -#: dcim/forms/bulk_edit.py:550 dcim/forms/model_forms.py:368 -#: dcim/tables/devicetypes.py:77 templates/dcim/device.html:88 -#: templates/dcim/devicebay.html:52 templates/dcim/module.html:61 +#: 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/templates/dcim/devicebay.html:52 +#: netbox/templates/dcim/module.html:61 msgid "Device Type" msgstr "Type d'appareil" -#: dcim/forms/bulk_edit.py:592 dcim/forms/model_forms.py:401 -#: dcim/tables/modules.py:17 dcim/tables/modules.py:65 -#: templates/dcim/module.html:65 templates/dcim/modulebay.html:66 -#: templates/dcim/moduletype.html:22 +#: 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:66 +#: netbox/templates/dcim/module.html:65 +#: netbox/templates/dcim/modulebay.html:66 +#: netbox/templates/dcim/moduletype.html:22 msgid "Module Type" msgstr "Type de module" -#: dcim/forms/bulk_edit.py:596 dcim/forms/model_forms.py:371 -#: dcim/forms/model_forms.py:402 templates/dcim/devicetype.html:11 +#: netbox/dcim/forms/bulk_edit.py:602 netbox/dcim/forms/model_forms.py:371 +#: netbox/dcim/forms/model_forms.py:402 +#: netbox/templates/dcim/devicetype.html:11 msgid "Chassis" msgstr "Châssis" -#: dcim/forms/bulk_edit.py:610 dcim/models/devices.py:484 -#: dcim/tables/devices.py:67 +#: netbox/dcim/forms/bulk_edit.py:616 netbox/dcim/models/devices.py:484 +#: netbox/dcim/tables/devices.py:67 msgid "VM role" msgstr "rôle de machine virtuelle" -#: dcim/forms/bulk_edit.py:613 dcim/forms/bulk_edit.py:637 -#: dcim/forms/bulk_edit.py:720 dcim/forms/bulk_import.py:434 -#: dcim/forms/bulk_import.py:438 dcim/forms/bulk_import.py:457 -#: dcim/forms/bulk_import.py:461 dcim/forms/bulk_import.py:586 -#: dcim/forms/bulk_import.py:590 dcim/forms/filtersets.py:689 -#: dcim/forms/filtersets.py:705 dcim/forms/filtersets.py:823 -#: dcim/forms/model_forms.py:415 dcim/forms/model_forms.py:441 -#: dcim/forms/model_forms.py:555 virtualization/forms/bulk_import.py:132 -#: virtualization/forms/bulk_import.py:133 -#: virtualization/forms/filtersets.py:188 -#: virtualization/forms/model_forms.py:215 +#: 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 msgid "Config template" msgstr "Modèle de configuration" -#: dcim/forms/bulk_edit.py:661 dcim/forms/bulk_edit.py:1061 -#: dcim/forms/bulk_import.py:492 dcim/forms/filtersets.py:114 -#: dcim/forms/model_forms.py:501 dcim/forms/model_forms.py:872 -#: dcim/forms/model_forms.py:889 extras/filtersets.py:547 +#: 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 msgid "Device type" msgstr "Type d'appareil" -#: dcim/forms/bulk_edit.py:672 dcim/forms/bulk_import.py:473 -#: dcim/forms/filtersets.py:119 dcim/forms/model_forms.py:509 +#: 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 msgid "Device role" msgstr "Rôle de l'appareil" -#: dcim/forms/bulk_edit.py:695 dcim/forms/bulk_import.py:498 -#: dcim/forms/filtersets.py:796 dcim/forms/model_forms.py:451 -#: dcim/forms/model_forms.py:513 dcim/tables/devices.py:182 -#: extras/filtersets.py:563 templates/dcim/device.html:186 -#: templates/dcim/platform.html:26 -#: templates/virtualization/virtualmachine.html:27 -#: virtualization/forms/bulk_edit.py:160 -#: virtualization/forms/bulk_import.py:122 -#: virtualization/forms/filtersets.py:168 -#: virtualization/forms/model_forms.py:203 -#: virtualization/tables/virtualmachines.py:79 +#: 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/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 msgid "Platform" msgstr "Plateforme" -#: dcim/forms/bulk_edit.py:728 dcim/forms/bulk_edit.py:1281 -#: dcim/forms/bulk_edit.py:1650 dcim/forms/bulk_edit.py:1696 -#: dcim/forms/bulk_import.py:641 dcim/forms/bulk_import.py:703 -#: dcim/forms/bulk_import.py:729 dcim/forms/bulk_import.py:755 -#: dcim/forms/bulk_import.py:775 dcim/forms/bulk_import.py:828 -#: dcim/forms/bulk_import.py:946 dcim/forms/bulk_import.py:994 -#: dcim/forms/bulk_import.py:1011 dcim/forms/bulk_import.py:1023 -#: dcim/forms/bulk_import.py:1071 dcim/forms/bulk_import.py:1422 -#: dcim/forms/connections.py:24 dcim/forms/filtersets.py:131 -#: dcim/forms/filtersets.py:921 dcim/forms/filtersets.py:1051 -#: dcim/forms/filtersets.py:1242 dcim/forms/filtersets.py:1267 -#: dcim/forms/filtersets.py:1291 dcim/forms/filtersets.py:1311 -#: dcim/forms/filtersets.py:1334 dcim/forms/filtersets.py:1444 -#: dcim/forms/filtersets.py:1469 dcim/forms/filtersets.py:1493 -#: dcim/forms/filtersets.py:1511 dcim/forms/filtersets.py:1528 -#: dcim/forms/filtersets.py:1592 dcim/forms/filtersets.py:1616 -#: dcim/forms/filtersets.py:1640 dcim/forms/model_forms.py:633 -#: dcim/forms/model_forms.py:849 dcim/forms/model_forms.py:1208 -#: dcim/forms/model_forms.py:1664 dcim/forms/object_create.py:257 -#: dcim/tables/connections.py:22 dcim/tables/connections.py:41 -#: dcim/tables/connections.py:60 dcim/tables/devices.py:285 -#: dcim/tables/devices.py:371 dcim/tables/devices.py:412 -#: dcim/tables/devices.py:454 dcim/tables/devices.py:505 -#: dcim/tables/devices.py:597 dcim/tables/devices.py:697 -#: dcim/tables/devices.py:754 dcim/tables/devices.py:801 -#: dcim/tables/devices.py:861 dcim/tables/devices.py:930 -#: dcim/tables/devices.py:1057 dcim/tables/modules.py:52 -#: extras/forms/filtersets.py:321 ipam/forms/bulk_import.py:304 -#: ipam/forms/bulk_import.py:481 ipam/forms/filtersets.py:551 -#: ipam/forms/model_forms.py:319 ipam/forms/model_forms.py:679 -#: ipam/forms/model_forms.py:712 ipam/forms/model_forms.py:738 -#: ipam/tables/vlans.py:180 templates/dcim/consoleport.html:20 -#: templates/dcim/consoleserverport.html:20 templates/dcim/device.html:15 -#: templates/dcim/device.html:130 templates/dcim/device_edit.html:10 -#: templates/dcim/devicebay.html:20 templates/dcim/devicebay.html:48 -#: templates/dcim/frontport.html:20 templates/dcim/interface.html:30 -#: templates/dcim/interface.html:161 templates/dcim/inventoryitem.html:20 -#: templates/dcim/module.html:57 templates/dcim/modulebay.html:20 -#: templates/dcim/poweroutlet.html:20 templates/dcim/powerport.html:20 -#: templates/dcim/rearport.html:20 templates/dcim/virtualchassis.html:65 -#: templates/dcim/virtualchassis_edit.html:51 -#: templates/dcim/virtualdevicecontext.html:22 -#: templates/virtualization/virtualmachine.html:114 -#: templates/vpn/tunneltermination.html:23 -#: templates/wireless/inc/wirelesslink_interface.html:6 -#: virtualization/filtersets.py:167 virtualization/forms/bulk_edit.py:137 -#: virtualization/forms/bulk_import.py:99 -#: virtualization/forms/filtersets.py:128 -#: virtualization/forms/model_forms.py:185 -#: virtualization/tables/virtualmachines.py:71 vpn/choices.py:44 -#: vpn/forms/bulk_import.py:86 vpn/forms/bulk_import.py:283 -#: vpn/forms/filtersets.py:275 vpn/forms/model_forms.py:90 -#: vpn/forms/model_forms.py:125 vpn/forms/model_forms.py:236 -#: vpn/forms/model_forms.py:453 wireless/forms/model_forms.py:99 -#: wireless/forms/model_forms.py:141 wireless/tables/wirelesslan.py:75 -msgid "Device" -msgstr "Appareil" - -#: dcim/forms/bulk_edit.py:731 templates/extras/dashboard/widget_config.html:7 -#: virtualization/forms/bulk_edit.py:191 -msgid "Configuration" -msgstr "Configuration" - -#: dcim/forms/bulk_edit.py:745 dcim/forms/bulk_import.py:653 -#: dcim/forms/model_forms.py:647 dcim/forms/model_forms.py:897 -msgid "Module type" -msgstr "Type de module" - -#: dcim/forms/bulk_edit.py:799 dcim/forms/bulk_edit.py:984 -#: dcim/forms/bulk_edit.py:1003 dcim/forms/bulk_edit.py:1026 -#: dcim/forms/bulk_edit.py:1068 dcim/forms/bulk_edit.py:1112 -#: dcim/forms/bulk_edit.py:1163 dcim/forms/bulk_edit.py:1190 -#: dcim/forms/bulk_edit.py:1217 dcim/forms/bulk_edit.py:1235 -#: dcim/forms/bulk_edit.py:1253 dcim/forms/filtersets.py:67 -#: dcim/forms/object_create.py:46 templates/dcim/cable.html:32 -#: templates/dcim/consoleport.html:32 templates/dcim/consoleserverport.html:32 -#: templates/dcim/devicebay.html:28 templates/dcim/frontport.html:32 -#: templates/dcim/inc/panels/inventory_items.html:19 -#: templates/dcim/interface.html:42 templates/dcim/inventoryitem.html:32 -#: templates/dcim/modulebay.html:34 templates/dcim/poweroutlet.html:32 -#: templates/dcim/powerport.html:32 templates/dcim/rearport.html:32 -#: templates/extras/customfield.html:26 templates/generic/bulk_import.html:162 -msgid "Label" -msgstr "Libellé" - -#: dcim/forms/bulk_edit.py:808 dcim/forms/filtersets.py:1068 -#: templates/dcim/cable.html:50 -msgid "Length" -msgstr "Longueur" - -#: dcim/forms/bulk_edit.py:813 dcim/forms/bulk_import.py:1226 -#: dcim/forms/bulk_import.py:1229 dcim/forms/filtersets.py:1072 -msgid "Length unit" -msgstr "Unité de longueur" - -#: dcim/forms/bulk_edit.py:837 templates/dcim/virtualchassis.html:23 -msgid "Domain" -msgstr "Domaine" - -#: dcim/forms/bulk_edit.py:905 dcim/forms/bulk_import.py:1345 -#: dcim/forms/filtersets.py:1158 dcim/forms/model_forms.py:750 -msgid "Power panel" -msgstr "panneau d'alimentation" - -#: dcim/forms/bulk_edit.py:927 dcim/forms/bulk_import.py:1381 -#: dcim/forms/filtersets.py:1180 templates/dcim/powerfeed.html:83 -msgid "Supply" -msgstr "Approvisionnement" - -#: dcim/forms/bulk_edit.py:933 dcim/forms/bulk_import.py:1386 -#: dcim/forms/filtersets.py:1185 templates/dcim/powerfeed.html:95 -msgid "Phase" -msgstr "Phase" - -#: dcim/forms/bulk_edit.py:939 dcim/forms/filtersets.py:1190 -#: templates/dcim/powerfeed.html:87 -msgid "Voltage" -msgstr "tension" - -#: dcim/forms/bulk_edit.py:943 dcim/forms/filtersets.py:1194 -#: templates/dcim/powerfeed.html:91 -msgid "Amperage" -msgstr "Ampérage" - -#: dcim/forms/bulk_edit.py:947 dcim/forms/filtersets.py:1198 -msgid "Max utilization" -msgstr "Utilisation maximale" - -#: dcim/forms/bulk_edit.py:1036 -msgid "Maximum draw" -msgstr "Tirage maximum" - -#: dcim/forms/bulk_edit.py:1039 dcim/models/device_component_templates.py:282 -#: dcim/models/device_components.py:356 -msgid "Maximum power draw (watts)" -msgstr "Consommation électrique maximale (watts)" - -#: dcim/forms/bulk_edit.py:1042 -msgid "Allocated draw" -msgstr "Tirage au sort attribué" - -#: dcim/forms/bulk_edit.py:1045 dcim/models/device_component_templates.py:289 -#: dcim/models/device_components.py:363 -msgid "Allocated power draw (watts)" -msgstr "Consommation électrique allouée (watts)" - -#: dcim/forms/bulk_edit.py:1078 dcim/forms/bulk_import.py:786 -#: dcim/forms/model_forms.py:953 dcim/forms/model_forms.py:1278 -#: dcim/forms/model_forms.py:1567 dcim/forms/object_import.py:55 -msgid "Power port" -msgstr "port d'alimentation" - -#: dcim/forms/bulk_edit.py:1083 dcim/forms/bulk_import.py:793 -msgid "Feed leg" -msgstr "Patte d'alimentation" - -#: dcim/forms/bulk_edit.py:1129 dcim/forms/bulk_edit.py:1440 -msgid "Management only" -msgstr "Gestion uniquement" - -#: dcim/forms/bulk_edit.py:1139 dcim/forms/bulk_edit.py:1446 -#: dcim/forms/bulk_import.py:876 dcim/forms/filtersets.py:1394 -#: dcim/forms/object_import.py:90 -#: dcim/models/device_component_templates.py:437 -#: dcim/models/device_components.py:670 -msgid "PoE mode" -msgstr "Mode PoE" - -#: dcim/forms/bulk_edit.py:1145 dcim/forms/bulk_edit.py:1452 -#: dcim/forms/bulk_import.py:882 dcim/forms/filtersets.py:1399 -#: dcim/forms/object_import.py:95 -#: dcim/models/device_component_templates.py:443 -#: dcim/models/device_components.py:676 -msgid "PoE type" -msgstr "Type PoE" - -#: dcim/forms/bulk_edit.py:1151 dcim/forms/filtersets.py:1404 -#: dcim/forms/object_import.py:100 -msgid "Wireless role" -msgstr "Rôle sans fil" - -#: dcim/forms/bulk_edit.py:1288 dcim/forms/model_forms.py:669 -#: dcim/forms/model_forms.py:1223 dcim/tables/devices.py:313 -#: templates/dcim/consoleport.html:24 templates/dcim/consoleserverport.html:24 -#: templates/dcim/frontport.html:24 templates/dcim/interface.html:34 -#: templates/dcim/module.html:54 templates/dcim/modulebay.html:26 -#: templates/dcim/modulebay.html:58 templates/dcim/poweroutlet.html:24 -#: templates/dcim/powerport.html:24 templates/dcim/rearport.html:24 -msgid "Module" -msgstr "Modules" - -#: dcim/forms/bulk_edit.py:1420 dcim/tables/devices.py:665 -#: templates/dcim/interface.html:110 -msgid "LAG" -msgstr "DÉCALAGE" - -#: dcim/forms/bulk_edit.py:1425 dcim/forms/model_forms.py:1305 -msgid "Virtual device contexts" -msgstr "Contextes des appareils virtuels" - -#: dcim/forms/bulk_edit.py:1431 dcim/forms/bulk_import.py:714 -#: dcim/forms/bulk_import.py:740 dcim/forms/filtersets.py:1252 -#: dcim/forms/filtersets.py:1277 dcim/forms/filtersets.py:1358 -#: dcim/tables/devices.py:610 -#: templates/circuits/inc/circuit_termination_fields.html:67 -#: templates/dcim/consoleport.html:40 templates/dcim/consoleserverport.html:40 -msgid "Speed" -msgstr "Vitesse" - -#: dcim/forms/bulk_edit.py:1460 dcim/forms/bulk_import.py:885 -#: templates/vpn/ikepolicy.html:25 templates/vpn/ipsecprofile.html:21 -#: templates/vpn/ipsecprofile.html:48 virtualization/forms/bulk_edit.py:233 -#: virtualization/forms/bulk_import.py:165 vpn/forms/bulk_edit.py:146 -#: vpn/forms/bulk_edit.py:232 vpn/forms/bulk_import.py:176 -#: vpn/forms/bulk_import.py:234 vpn/forms/filtersets.py:135 -#: vpn/forms/filtersets.py:178 vpn/forms/filtersets.py:192 -#: vpn/tables/crypto.py:64 vpn/tables/crypto.py:162 -msgid "Mode" -msgstr "Mode" - -#: dcim/forms/bulk_edit.py:1468 dcim/forms/model_forms.py:1354 -#: ipam/forms/bulk_import.py:178 ipam/forms/filtersets.py:498 -#: ipam/models/vlans.py:84 virtualization/forms/bulk_edit.py:240 -#: virtualization/forms/model_forms.py:321 -msgid "VLAN group" -msgstr "groupe VLAN" - -#: dcim/forms/bulk_edit.py:1476 dcim/forms/model_forms.py:1360 -#: dcim/tables/devices.py:579 virtualization/forms/bulk_edit.py:248 -#: virtualization/forms/model_forms.py:326 -msgid "Untagged VLAN" -msgstr "VLAN non balisé" - -#: dcim/forms/bulk_edit.py:1484 dcim/forms/model_forms.py:1369 -#: dcim/tables/devices.py:585 virtualization/forms/bulk_edit.py:256 -#: virtualization/forms/model_forms.py:335 -msgid "Tagged VLANs" -msgstr "VLAN balisés" - -#: dcim/forms/bulk_edit.py:1494 dcim/forms/model_forms.py:1341 -msgid "Wireless LAN group" -msgstr "Groupe LAN sans fil" - -#: dcim/forms/bulk_edit.py:1499 dcim/forms/model_forms.py:1346 -#: dcim/tables/devices.py:619 netbox/navigation/menu.py:146 -#: templates/dcim/interface.html:280 wireless/tables/wirelesslan.py:24 -msgid "Wireless LANs" -msgstr "Réseaux locaux sans fil" - -#: dcim/forms/bulk_edit.py:1508 dcim/forms/filtersets.py:1328 -#: dcim/forms/model_forms.py:1390 ipam/forms/bulk_edit.py:286 -#: ipam/forms/bulk_edit.py:378 ipam/forms/filtersets.py:169 -#: templates/dcim/interface.html:122 templates/ipam/prefix.html:95 -#: virtualization/forms/model_forms.py:349 -msgid "Addressing" -msgstr "Adressage" - -#: dcim/forms/bulk_edit.py:1509 dcim/forms/filtersets.py:720 -#: dcim/forms/model_forms.py:1391 virtualization/forms/model_forms.py:350 -msgid "Operation" -msgstr "Fonctionnement" - -#: dcim/forms/bulk_edit.py:1510 dcim/forms/filtersets.py:1329 -#: dcim/forms/model_forms.py:987 dcim/forms/model_forms.py:1393 -msgid "PoE" -msgstr "PoE" - -#: dcim/forms/bulk_edit.py:1511 dcim/forms/model_forms.py:1392 -#: templates/dcim/interface.html:99 virtualization/forms/bulk_edit.py:267 -#: virtualization/forms/model_forms.py:351 -msgid "Related Interfaces" -msgstr "Interfaces associées" - -#: dcim/forms/bulk_edit.py:1512 dcim/forms/model_forms.py:1394 -#: virtualization/forms/bulk_edit.py:268 -#: virtualization/forms/model_forms.py:352 -msgid "802.1Q Switching" -msgstr "Commutation 802.1Q" - -#: dcim/forms/bulk_edit.py:1574 dcim/forms/bulk_edit.py:1576 -msgid "Interface mode must be specified to assign VLANs" -msgstr "Le mode d'interface doit être spécifié pour attribuer des VLAN" - -#: dcim/forms/bulk_edit.py:1581 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." - -#: dcim/forms/bulk_import.py:64 -msgid "Name of parent region" -msgstr "Nom de la région mère" - -#: dcim/forms/bulk_import.py:78 -msgid "Name of parent site group" -msgstr "Nom du groupe de sites parent" - -#: dcim/forms/bulk_import.py:97 -msgid "Assigned region" -msgstr "Région associé" - -#: dcim/forms/bulk_import.py:104 tenancy/forms/bulk_import.py:44 -#: tenancy/forms/bulk_import.py:85 wireless/forms/bulk_import.py:40 -msgid "Assigned group" -msgstr "Groupe associé" - -#: dcim/forms/bulk_import.py:123 -msgid "available options" -msgstr "options disponibles" - -#: dcim/forms/bulk_import.py:134 dcim/forms/bulk_import.py:543 -#: dcim/forms/bulk_import.py:1342 ipam/forms/bulk_import.py:175 -#: ipam/forms/bulk_import.py:433 virtualization/forms/bulk_import.py:63 -#: virtualization/forms/bulk_import.py:89 -msgid "Assigned site" -msgstr "Site associé" - -#: dcim/forms/bulk_import.py:141 -msgid "Parent location" -msgstr "Emplacement du parent" - -#: dcim/forms/bulk_import.py:143 -msgid "Location not found." -msgstr "Emplacement introuvable." - -#: dcim/forms/bulk_import.py:185 -msgid "The manufacturer of this rack type" -msgstr "Le fabricant de ce type de rack" - -#: dcim/forms/bulk_import.py:196 -msgid "The lowest-numbered position in the rack" -msgstr "La position la plus basse du rack" - -#: dcim/forms/bulk_import.py:201 dcim/forms/bulk_import.py:268 -msgid "Rail-to-rail width (in inches)" -msgstr "Largeur rail à rail (en pouces)" - -#: dcim/forms/bulk_import.py:207 dcim/forms/bulk_import.py:274 -msgid "Unit for outer dimensions" -msgstr "Unité pour les dimensions extérieures" - -#: dcim/forms/bulk_import.py:213 dcim/forms/bulk_import.py:286 -msgid "Unit for rack weights" -msgstr "Unité poids de la baie" - -#: dcim/forms/bulk_import.py:245 -msgid "Name of assigned tenant" -msgstr "Nom du locataire associé" - -#: dcim/forms/bulk_import.py:257 -msgid "Name of assigned role" -msgstr "Nom du rôle attribué" - -#: dcim/forms/bulk_import.py:280 dcim/forms/bulk_import.py:413 -#: dcim/forms/bulk_import.py:583 -msgid "Airflow direction" -msgstr "Direction du flux d'air" - -#: dcim/forms/bulk_import.py:312 -msgid "Parent site" -msgstr "Site parent" - -#: dcim/forms/bulk_import.py:319 dcim/forms/bulk_import.py:1355 -msgid "Rack's location (if any)" -msgstr "Emplacement de la baie (le cas échéant)" - -#: dcim/forms/bulk_import.py:328 dcim/forms/model_forms.py:311 -#: dcim/tables/racks.py:222 templates/dcim/rackreservation.html:12 -#: templates/dcim/rackreservation.html:45 -msgid "Units" -msgstr "Unités" - -#: dcim/forms/bulk_import.py:331 -msgid "Comma-separated list of individual unit numbers" -msgstr "Liste de numéros d'unités individuels séparés par des virgules" - -#: dcim/forms/bulk_import.py:374 -msgid "The manufacturer which produces this device type" -msgstr "Le fabricant qui produit ce type d'appareil" - -#: dcim/forms/bulk_import.py:381 -msgid "The default platform for devices of this type (optional)" -msgstr "Plateforme par défaut pour les appareils de ce type (facultatif)" - -#: dcim/forms/bulk_import.py:386 -msgid "Device weight" -msgstr "Poids de l'appareil" - -#: dcim/forms/bulk_import.py:392 -msgid "Unit for device weight" -msgstr "Unité de poids de l'appareil" - -#: dcim/forms/bulk_import.py:418 -msgid "Module weight" -msgstr "Poids du module" - -#: dcim/forms/bulk_import.py:424 -msgid "Unit for module weight" -msgstr "Unité pour le poids du module" - -#: dcim/forms/bulk_import.py:454 -msgid "Limit platform assignments to this manufacturer" -msgstr "Limiter les affectations de plateforme à ce fabricant" - -#: dcim/forms/bulk_import.py:476 dcim/forms/bulk_import.py:1425 -#: tenancy/forms/bulk_import.py:106 -msgid "Assigned role" -msgstr "Rôle attribué" - -#: dcim/forms/bulk_import.py:489 -msgid "Device type manufacturer" -msgstr "Fabricant du type d'appareil" - -#: dcim/forms/bulk_import.py:495 -msgid "Device type model" -msgstr "Type d'appareil et modèle" - -#: dcim/forms/bulk_import.py:502 virtualization/forms/bulk_import.py:126 -msgid "Assigned platform" -msgstr "Plateforme attribuée" - -#: dcim/forms/bulk_import.py:510 dcim/forms/bulk_import.py:514 -#: dcim/forms/model_forms.py:536 -msgid "Virtual chassis" -msgstr "Châssis virtuel" - -#: dcim/forms/bulk_import.py:517 dcim/forms/filtersets.py:728 -#: dcim/forms/filtersets.py:898 dcim/forms/model_forms.py:522 -#: dcim/tables/devices.py:202 extras/filtersets.py:596 -#: extras/forms/filtersets.py:322 ipam/forms/filtersets.py:415 -#: ipam/forms/filtersets.py:447 templates/dcim/device.html:239 -#: templates/virtualization/cluster.html:10 -#: templates/virtualization/virtualmachine.html:92 -#: templates/virtualization/virtualmachine.html:101 -#: virtualization/filtersets.py:157 virtualization/filtersets.py:277 -#: virtualization/forms/bulk_edit.py:129 -#: virtualization/forms/bulk_import.py:92 -#: virtualization/forms/filtersets.py:99 -#: virtualization/forms/filtersets.py:123 -#: virtualization/forms/filtersets.py:204 -#: virtualization/forms/model_forms.py:79 -#: virtualization/forms/model_forms.py:176 -#: virtualization/tables/virtualmachines.py:67 +#: 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/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 msgid "Cluster" msgstr "Cluster" -#: dcim/forms/bulk_import.py:521 +#: 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/templates/extras/dashboard/widget_config.html:7 +#: netbox/virtualization/forms/bulk_edit.py:191 +msgid "Configuration" +msgstr "Configuration" + +#: netbox/dcim/forms/bulk_edit.py:746 netbox/netbox/navigation/menu.py:243 +#: 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 +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/object_create.py:46 netbox/templates/dcim/cable.html:32 +#: netbox/templates/dcim/consoleport.html:32 +#: netbox/templates/dcim/consoleserverport.html:32 +#: netbox/templates/dcim/devicebay.html:28 +#: netbox/templates/dcim/frontport.html:32 +#: netbox/templates/dcim/inc/panels/inventory_items.html:19 +#: netbox/templates/dcim/interface.html:42 +#: netbox/templates/dcim/inventoryitem.html:32 +#: netbox/templates/dcim/modulebay.html:34 +#: netbox/templates/dcim/poweroutlet.html:32 +#: netbox/templates/dcim/powerport.html:32 +#: netbox/templates/dcim/rearport.html:32 +#: netbox/templates/extras/customfield.html:26 +#: netbox/templates/generic/bulk_import.html:162 +msgid "Label" +msgstr "Libellé" + +#: netbox/dcim/forms/bulk_edit.py:823 netbox/dcim/forms/filtersets.py:1068 +#: 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 +msgid "Length unit" +msgstr "Unité de longueur" + +#: netbox/dcim/forms/bulk_edit.py:852 +#: 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 +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/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/templates/dcim/powerfeed.html:95 +msgid "Phase" +msgstr "Phase" + +#: netbox/dcim/forms/bulk_edit.py:954 netbox/dcim/forms/filtersets.py:1190 +#: netbox/templates/dcim/powerfeed.html:87 +msgid "Voltage" +msgstr "tension" + +#: netbox/dcim/forms/bulk_edit.py:958 netbox/dcim/forms/filtersets.py:1194 +#: netbox/templates/dcim/powerfeed.html:91 +msgid "Amperage" +msgstr "Ampérage" + +#: netbox/dcim/forms/bulk_edit.py:962 netbox/dcim/forms/filtersets.py:1198 +msgid "Max utilization" +msgstr "Utilisation maximale" + +#: netbox/dcim/forms/bulk_edit.py:1051 +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 +msgid "Maximum power draw (watts)" +msgstr "Consommation électrique maximale (watts)" + +#: netbox/dcim/forms/bulk_edit.py:1057 +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 +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 +msgid "Power port" +msgstr "port d'alimentation" + +#: netbox/dcim/forms/bulk_edit.py:1098 netbox/dcim/forms/bulk_import.py:815 +msgid "Feed leg" +msgstr "Patte d'alimentation" + +#: netbox/dcim/forms/bulk_edit.py:1144 netbox/dcim/forms/bulk_edit.py:1462 +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/object_import.py:90 +#: netbox/dcim/models/device_component_templates.py:437 +#: netbox/dcim/models/device_components.py:670 +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/object_import.py:95 +#: netbox/dcim/models/device_component_templates.py:443 +#: netbox/dcim/models/device_components.py:676 +msgid "PoE type" +msgstr "Type PoE" + +#: netbox/dcim/forms/bulk_edit.py:1166 netbox/dcim/forms/filtersets.py:1404 +#: 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/templates/dcim/consoleport.html:24 +#: netbox/templates/dcim/consoleserverport.html:24 +#: netbox/templates/dcim/frontport.html:24 +#: netbox/templates/dcim/interface.html:34 +#: netbox/templates/dcim/module.html:54 +#: netbox/templates/dcim/modulebay.html:26 +#: netbox/templates/dcim/modulebay.html:58 +#: netbox/templates/dcim/poweroutlet.html:24 +#: netbox/templates/dcim/powerport.html:24 +#: netbox/templates/dcim/rearport.html:24 +msgid "Module" +msgstr "Modules" + +#: netbox/dcim/forms/bulk_edit.py:1442 netbox/dcim/tables/devices.py:665 +#: netbox/templates/dcim/interface.html:110 +msgid "LAG" +msgstr "DÉCALAGE" + +#: netbox/dcim/forms/bulk_edit.py:1447 netbox/dcim/forms/model_forms.py:1312 +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/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/templates/vpn/ikepolicy.html:25 +#: netbox/templates/vpn/ipsecprofile.html:21 +#: netbox/templates/vpn/ipsecprofile.html:48 +#: netbox/virtualization/forms/bulk_edit.py:233 +#: netbox/virtualization/forms/bulk_import.py:165 +#: netbox/vpn/forms/bulk_edit.py:146 netbox/vpn/forms/bulk_edit.py:232 +#: netbox/vpn/forms/bulk_import.py:176 netbox/vpn/forms/bulk_import.py:234 +#: netbox/vpn/forms/filtersets.py:135 netbox/vpn/forms/filtersets.py:178 +#: netbox/vpn/forms/filtersets.py:192 netbox/vpn/tables/crypto.py:64 +#: netbox/vpn/tables/crypto.py:162 +msgid "Mode" +msgstr "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 +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 +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 +msgid "Tagged VLANs" +msgstr "VLAN étiqueté" + +#: netbox/dcim/forms/bulk_edit.py:1511 +msgid "Add tagged VLANs" +msgstr "Ajouter des VLANs étiquetés" + +#: netbox/dcim/forms/bulk_edit.py:1520 +msgid "Remove tagged VLANs" +msgstr "Retirer des VLANs étiquetés" + +#: netbox/dcim/forms/bulk_edit.py:1536 netbox/dcim/forms/model_forms.py:1348 +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/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 +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 +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 +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 +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 +msgid "802.1Q Switching" +msgstr "Commutation 802.1Q" + +#: netbox/dcim/forms/bulk_edit.py:1558 +msgid "Add/Remove" +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" +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 é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" +msgstr "Nom de la région mère" + +#: netbox/dcim/forms/bulk_import.py:78 +msgid "Name of parent site group" +msgstr "Nom du groupe de sites parent" + +#: netbox/dcim/forms/bulk_import.py:97 +msgid "Assigned region" +msgstr "Région associé" + +#: netbox/dcim/forms/bulk_import.py:104 netbox/tenancy/forms/bulk_import.py:44 +#: netbox/tenancy/forms/bulk_import.py:85 +#: netbox/wireless/forms/bulk_import.py:40 +msgid "Assigned group" +msgstr "Groupe associé" + +#: netbox/dcim/forms/bulk_import.py:123 +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 +msgid "Assigned site" +msgstr "Site associé" + +#: netbox/dcim/forms/bulk_import.py:141 +msgid "Parent location" +msgstr "Emplacement du parent" + +#: netbox/dcim/forms/bulk_import.py:143 +msgid "Location not found." +msgstr "Emplacement introuvable." + +#: netbox/dcim/forms/bulk_import.py:185 +msgid "The manufacturer of this rack type" +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 de la baie" + +#: netbox/dcim/forms/bulk_import.py:201 netbox/dcim/forms/bulk_import.py:276 +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 +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 +msgid "Unit for rack weights" +msgstr "Unité de poids de la baie" + +#: netbox/dcim/forms/bulk_import.py:245 +msgid "Name of assigned tenant" +msgstr "Nom du locataire associé" + +#: netbox/dcim/forms/bulk_import.py:257 +msgid "Name of assigned role" +msgstr "Nom du rôle attribué" + +#: netbox/dcim/forms/bulk_import.py:264 +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 +msgid "Airflow direction" +msgstr "Direction du flux d'air" + +#: netbox/dcim/forms/bulk_import.py:324 +msgid "Width must be set if not specifying a rack type." +msgstr "" + +#: netbox/dcim/forms/bulk_import.py:326 +msgid "U height must be set if not specifying a rack type." +msgstr "" + +#: netbox/dcim/forms/bulk_import.py:334 +msgid "Parent site" +msgstr "Site parent" + +#: netbox/dcim/forms/bulk_import.py:341 netbox/dcim/forms/bulk_import.py:1377 +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/templates/dcim/rackreservation.html:12 +#: netbox/templates/dcim/rackreservation.html:45 +msgid "Units" +msgstr "Unités" + +#: netbox/dcim/forms/bulk_import.py:353 +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 +msgid "The manufacturer which produces this device type" +msgstr "Le fabricant qui produit ce type d'appareil" + +#: netbox/dcim/forms/bulk_import.py:403 +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 +msgid "Device weight" +msgstr "Poids de l'appareil" + +#: netbox/dcim/forms/bulk_import.py:414 +msgid "Unit for device weight" +msgstr "Unité de poids de l'appareil" + +#: netbox/dcim/forms/bulk_import.py:440 +msgid "Module weight" +msgstr "Poids du module" + +#: netbox/dcim/forms/bulk_import.py:446 +msgid "Unit for module weight" +msgstr "Unité pour le poids du module" + +#: netbox/dcim/forms/bulk_import.py:476 +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/tenancy/forms/bulk_import.py:106 +msgid "Assigned role" +msgstr "Rôle attribué" + +#: netbox/dcim/forms/bulk_import.py:511 +msgid "Device type manufacturer" +msgstr "Fabricant du type d'appareil" + +#: netbox/dcim/forms/bulk_import.py:517 +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 +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 +msgid "Virtual chassis" +msgstr "Châssis virtuel" + +#: netbox/dcim/forms/bulk_import.py:543 msgid "Virtualization cluster" msgstr "Cluster de virtualisation" -#: dcim/forms/bulk_import.py:550 +#: netbox/dcim/forms/bulk_import.py:572 msgid "Assigned location (if any)" msgstr "Emplacement attribué (le cas échéant)" -#: dcim/forms/bulk_import.py:557 +#: netbox/dcim/forms/bulk_import.py:579 msgid "Assigned rack (if any)" msgstr "Baie attribuée (le cas échéant)" -#: dcim/forms/bulk_import.py:560 +#: netbox/dcim/forms/bulk_import.py:582 msgid "Face" msgstr "Visage" -#: dcim/forms/bulk_import.py:563 +#: netbox/dcim/forms/bulk_import.py:585 msgid "Mounted rack face" msgstr "Face montée en baie" -#: dcim/forms/bulk_import.py:570 +#: netbox/dcim/forms/bulk_import.py:592 msgid "Parent device (for child devices)" msgstr "Appareil parent (pour les appareils pour enfants)" -#: dcim/forms/bulk_import.py:573 +#: netbox/dcim/forms/bulk_import.py:595 msgid "Device bay" msgstr "Baie pour appareils" -#: dcim/forms/bulk_import.py:577 +#: netbox/dcim/forms/bulk_import.py:599 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)" -#: dcim/forms/bulk_import.py:644 +#: netbox/dcim/forms/bulk_import.py:666 msgid "The device in which this module is installed" msgstr "L'appareil sur lequel ce module est installé" -#: dcim/forms/bulk_import.py:647 dcim/forms/model_forms.py:640 +#: netbox/dcim/forms/bulk_import.py:669 netbox/dcim/forms/model_forms.py:640 msgid "Module bay" msgstr "Baie modulaire" -#: dcim/forms/bulk_import.py:650 +#: netbox/dcim/forms/bulk_import.py:672 msgid "The module bay in which this module is installed" msgstr "La baie du module dans laquelle ce module est installé" -#: dcim/forms/bulk_import.py:656 +#: netbox/dcim/forms/bulk_import.py:678 msgid "The type of module" msgstr "Le type de module" -#: dcim/forms/bulk_import.py:664 dcim/forms/model_forms.py:656 +#: netbox/dcim/forms/bulk_import.py:686 netbox/dcim/forms/model_forms.py:656 msgid "Replicate components" msgstr "Répliquer les composants" -#: dcim/forms/bulk_import.py:666 +#: netbox/dcim/forms/bulk_import.py:688 msgid "" "Automatically populate components associated with this module type (enabled " "by default)" @@ -3961,272 +4388,280 @@ msgstr "" "Remplir automatiquement les composants associés à ce type de module (activé " "par défaut)" -#: dcim/forms/bulk_import.py:669 dcim/forms/model_forms.py:662 +#: netbox/dcim/forms/bulk_import.py:691 netbox/dcim/forms/model_forms.py:662 msgid "Adopt components" msgstr "Adoptez des composants" -#: dcim/forms/bulk_import.py:671 dcim/forms/model_forms.py:665 +#: netbox/dcim/forms/bulk_import.py:693 netbox/dcim/forms/model_forms.py:665 msgid "Adopt already existing components" msgstr "Adoptez des composants déjà existants" -#: dcim/forms/bulk_import.py:711 dcim/forms/bulk_import.py:737 -#: dcim/forms/bulk_import.py:763 +#: netbox/dcim/forms/bulk_import.py:733 netbox/dcim/forms/bulk_import.py:759 +#: netbox/dcim/forms/bulk_import.py:785 msgid "Port type" msgstr "Type de port" -#: dcim/forms/bulk_import.py:719 dcim/forms/bulk_import.py:745 +#: netbox/dcim/forms/bulk_import.py:741 netbox/dcim/forms/bulk_import.py:767 msgid "Port speed in bps" msgstr "Vitesse du port en bits/s" -#: dcim/forms/bulk_import.py:783 +#: netbox/dcim/forms/bulk_import.py:805 msgid "Outlet type" msgstr "Type de prise" -#: dcim/forms/bulk_import.py:790 +#: netbox/dcim/forms/bulk_import.py:812 msgid "Local power port which feeds this outlet" msgstr "Port d'alimentation local qui alimente cette prise" -#: dcim/forms/bulk_import.py:796 +#: netbox/dcim/forms/bulk_import.py:818 msgid "Electrical phase (for three-phase circuits)" msgstr "Phase électrique (pour circuits triphasés)" -#: dcim/forms/bulk_import.py:837 dcim/forms/model_forms.py:1316 -#: virtualization/forms/bulk_import.py:155 -#: virtualization/forms/model_forms.py:305 +#: 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 msgid "Parent interface" msgstr "Interface pour les parents" -#: dcim/forms/bulk_import.py:844 dcim/forms/model_forms.py:1324 -#: virtualization/forms/bulk_import.py:162 -#: virtualization/forms/model_forms.py:313 +#: 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 msgid "Bridged interface" msgstr "Interface pontée" -#: dcim/forms/bulk_import.py:847 +#: netbox/dcim/forms/bulk_import.py:869 msgid "Lag" msgstr "Retard" -#: dcim/forms/bulk_import.py:851 +#: netbox/dcim/forms/bulk_import.py:873 msgid "Parent LAG interface" msgstr "Interface LAG parent" -#: dcim/forms/bulk_import.py:854 +#: netbox/dcim/forms/bulk_import.py:876 msgid "Vdcs" msgstr "VDC" -#: dcim/forms/bulk_import.py:859 +#: netbox/dcim/forms/bulk_import.py:881 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 :" -#: dcim/forms/bulk_import.py:865 +#: netbox/dcim/forms/bulk_import.py:887 msgid "Physical medium" msgstr "Support physique" -#: dcim/forms/bulk_import.py:868 dcim/forms/filtersets.py:1365 +#: netbox/dcim/forms/bulk_import.py:890 netbox/dcim/forms/filtersets.py:1365 msgid "Duplex" msgstr "Duplex" -#: dcim/forms/bulk_import.py:873 +#: netbox/dcim/forms/bulk_import.py:895 msgid "Poe mode" msgstr "Mode PoE" -#: dcim/forms/bulk_import.py:879 +#: netbox/dcim/forms/bulk_import.py:901 msgid "Poe type" msgstr "Type de poteau" -#: dcim/forms/bulk_import.py:888 virtualization/forms/bulk_import.py:168 +#: netbox/dcim/forms/bulk_import.py:910 +#: netbox/virtualization/forms/bulk_import.py:168 msgid "IEEE 802.1Q operational mode (for L2 interfaces)" msgstr "Mode de fonctionnement IEEE 802.1Q (pour interfaces L2)" -#: dcim/forms/bulk_import.py:895 ipam/forms/bulk_import.py:161 -#: ipam/forms/bulk_import.py:247 ipam/forms/bulk_import.py:283 -#: ipam/forms/filtersets.py:201 ipam/forms/filtersets.py:277 -#: ipam/forms/filtersets.py:336 virtualization/forms/bulk_import.py:175 +#: netbox/dcim/forms/bulk_import.py: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 msgid "Assigned VRF" msgstr "VRF attribué" -#: dcim/forms/bulk_import.py:898 +#: netbox/dcim/forms/bulk_import.py:920 msgid "Rf role" msgstr "Rôle RF" -#: dcim/forms/bulk_import.py:901 +#: netbox/dcim/forms/bulk_import.py:923 msgid "Wireless role (AP/station)" msgstr "Rôle sans fil (AP/station)" -#: dcim/forms/bulk_import.py:937 +#: netbox/dcim/forms/bulk_import.py:959 #, python-brace-format msgid "VDC {vdc} is not assigned to device {device}" msgstr "VDC {vdc} n'est pas attribué à l'appareil {device}" -#: dcim/forms/bulk_import.py:951 dcim/forms/model_forms.py:1000 -#: dcim/forms/model_forms.py:1575 dcim/forms/object_import.py:117 +#: 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 msgid "Rear port" msgstr "Port arrière" -#: dcim/forms/bulk_import.py:954 +#: netbox/dcim/forms/bulk_import.py:976 msgid "Corresponding rear port" msgstr "Port arrière correspondant" -#: dcim/forms/bulk_import.py:959 dcim/forms/bulk_import.py:1000 -#: dcim/forms/bulk_import.py:1216 +#: netbox/dcim/forms/bulk_import.py:981 netbox/dcim/forms/bulk_import.py:1022 +#: netbox/dcim/forms/bulk_import.py:1238 msgid "Physical medium classification" msgstr "Classification des supports physiques" -#: dcim/forms/bulk_import.py:1028 dcim/tables/devices.py:822 +#: netbox/dcim/forms/bulk_import.py:1050 netbox/dcim/tables/devices.py:822 msgid "Installed device" msgstr "Appareil installé" -#: dcim/forms/bulk_import.py:1032 +#: netbox/dcim/forms/bulk_import.py:1054 msgid "Child device installed within this bay" msgstr "Appareil pour enfant installé dans cette baie" -#: dcim/forms/bulk_import.py:1034 +#: netbox/dcim/forms/bulk_import.py:1056 msgid "Child device not found." msgstr "Appareil pour enfant introuvable." -#: dcim/forms/bulk_import.py:1092 +#: netbox/dcim/forms/bulk_import.py:1114 msgid "Parent inventory item" msgstr "Article d'inventaire parent" -#: dcim/forms/bulk_import.py:1095 +#: netbox/dcim/forms/bulk_import.py:1117 msgid "Component type" msgstr "Type de composant" -#: dcim/forms/bulk_import.py:1099 +#: netbox/dcim/forms/bulk_import.py:1121 msgid "Component Type" msgstr "Type de composant" -#: dcim/forms/bulk_import.py:1102 +#: netbox/dcim/forms/bulk_import.py:1124 msgid "Compnent name" msgstr "Nom du composant" -#: dcim/forms/bulk_import.py:1104 +#: netbox/dcim/forms/bulk_import.py:1126 msgid "Component Name" msgstr "Nom du composant" -#: dcim/forms/bulk_import.py:1146 +#: netbox/dcim/forms/bulk_import.py:1168 #, python-brace-format msgid "Component not found: {device} - {component_name}" msgstr "Composant introuvable : {device} - {component_name}" -#: dcim/forms/bulk_import.py:1171 +#: netbox/dcim/forms/bulk_import.py:1193 msgid "Side A device" msgstr "Appareil côté A" -#: dcim/forms/bulk_import.py:1174 dcim/forms/bulk_import.py:1192 +#: netbox/dcim/forms/bulk_import.py:1196 netbox/dcim/forms/bulk_import.py:1214 msgid "Device name" msgstr "Nom de l'appareil" -#: dcim/forms/bulk_import.py:1177 +#: netbox/dcim/forms/bulk_import.py:1199 msgid "Side A type" msgstr "Côté A type" -#: dcim/forms/bulk_import.py:1180 dcim/forms/bulk_import.py:1198 +#: netbox/dcim/forms/bulk_import.py:1202 netbox/dcim/forms/bulk_import.py:1220 msgid "Termination type" msgstr "Type de terminaison" -#: dcim/forms/bulk_import.py:1183 +#: netbox/dcim/forms/bulk_import.py:1205 msgid "Side A name" msgstr "Nom de la face A" -#: dcim/forms/bulk_import.py:1184 dcim/forms/bulk_import.py:1202 +#: netbox/dcim/forms/bulk_import.py:1206 netbox/dcim/forms/bulk_import.py:1224 msgid "Termination name" msgstr "Nom de terminaison" -#: dcim/forms/bulk_import.py:1189 +#: netbox/dcim/forms/bulk_import.py:1211 msgid "Side B device" msgstr "Appareil Side B" -#: dcim/forms/bulk_import.py:1195 +#: netbox/dcim/forms/bulk_import.py:1217 msgid "Side B type" msgstr "Type de face B" -#: dcim/forms/bulk_import.py:1201 +#: netbox/dcim/forms/bulk_import.py:1223 msgid "Side B name" msgstr "Nom de la face B" -#: dcim/forms/bulk_import.py:1210 wireless/forms/bulk_import.py:86 +#: netbox/dcim/forms/bulk_import.py:1232 +#: netbox/wireless/forms/bulk_import.py:86 msgid "Connection status" msgstr "État de la connexion" -#: dcim/forms/bulk_import.py:1262 +#: netbox/dcim/forms/bulk_import.py:1284 #, 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é" -#: dcim/forms/bulk_import.py:1268 +#: netbox/dcim/forms/bulk_import.py:1290 #, python-brace-format msgid "{side_upper} side termination not found: {device} {name}" msgstr "{side_upper} terminaison latérale introuvable : {device} {name}" -#: dcim/forms/bulk_import.py:1293 dcim/forms/model_forms.py:785 -#: dcim/tables/devices.py:1027 templates/dcim/device.html:132 -#: templates/dcim/virtualchassis.html:27 templates/dcim/virtualchassis.html:67 +#: 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/templates/dcim/virtualchassis.html:27 +#: netbox/templates/dcim/virtualchassis.html:67 msgid "Master" msgstr "Maître" -#: dcim/forms/bulk_import.py:1297 +#: netbox/dcim/forms/bulk_import.py:1319 msgid "Master device" msgstr "Appareil principal" -#: dcim/forms/bulk_import.py:1314 +#: netbox/dcim/forms/bulk_import.py:1336 msgid "Name of parent site" msgstr "Nom du site parent" -#: dcim/forms/bulk_import.py:1348 +#: netbox/dcim/forms/bulk_import.py:1370 msgid "Upstream power panel" msgstr "Panneau d'alimentation en amont" -#: dcim/forms/bulk_import.py:1378 +#: netbox/dcim/forms/bulk_import.py:1400 msgid "Primary or redundant" msgstr "Principal ou redondant" -#: dcim/forms/bulk_import.py:1383 +#: netbox/dcim/forms/bulk_import.py:1405 msgid "Supply type (AC/DC)" msgstr "Type d'alimentation (AC/DC)" -#: dcim/forms/bulk_import.py:1388 +#: netbox/dcim/forms/bulk_import.py:1410 msgid "Single or three-phase" msgstr "Monophasé ou triphasé" -#: dcim/forms/bulk_import.py:1439 dcim/forms/model_forms.py:1670 -#: templates/dcim/device.html:190 templates/dcim/virtualdevicecontext.html:30 -#: templates/virtualization/virtualmachine.html:52 +#: netbox/dcim/forms/bulk_import.py:1461 netbox/dcim/forms/model_forms.py:1677 +#: netbox/templates/dcim/device.html:190 +#: netbox/templates/dcim/virtualdevicecontext.html:30 +#: netbox/templates/virtualization/virtualmachine.html:52 msgid "Primary IPv4" msgstr "IPv4 principal" -#: dcim/forms/bulk_import.py:1443 +#: netbox/dcim/forms/bulk_import.py:1465 msgid "IPv4 address with mask, e.g. 1.2.3.4/24" msgstr "Adresse IPv4 avec masque, par exemple 1.2.3.4/24" -#: dcim/forms/bulk_import.py:1446 dcim/forms/model_forms.py:1679 -#: templates/dcim/device.html:206 templates/dcim/virtualdevicecontext.html:41 -#: templates/virtualization/virtualmachine.html:68 +#: netbox/dcim/forms/bulk_import.py:1468 netbox/dcim/forms/model_forms.py:1686 +#: netbox/templates/dcim/device.html:206 +#: netbox/templates/dcim/virtualdevicecontext.html:41 +#: netbox/templates/virtualization/virtualmachine.html:68 msgid "Primary IPv6" msgstr "IPv6 principal" -#: dcim/forms/bulk_import.py:1450 +#: netbox/dcim/forms/bulk_import.py:1472 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" -#: dcim/forms/common.py:24 dcim/models/device_components.py:527 -#: templates/dcim/interface.html:57 -#: templates/virtualization/vminterface.html:55 -#: virtualization/forms/bulk_edit.py:225 +#: netbox/dcim/forms/common.py:24 netbox/dcim/models/device_components.py:527 +#: netbox/templates/dcim/interface.html:57 +#: netbox/templates/virtualization/vminterface.html:55 +#: netbox/virtualization/forms/bulk_edit.py:225 msgid "MTU" msgstr "MTU" -#: dcim/forms/common.py:65 +#: netbox/dcim/forms/common.py:65 #, python-brace-format msgid "" "The tagged VLANs ({vlans}) must belong to the same site as the interface's " "parent device/VM, or they must be global" msgstr "" -"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" -#: dcim/forms/common.py:126 +#: netbox/dcim/forms/common.py:126 msgid "" "Cannot install module with placeholder values in a module bay with no " "position defined." @@ -4234,7 +4669,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." -#: dcim/forms/common.py:131 +#: netbox/dcim/forms/common.py:131 #, python-brace-format msgid "" "Cannot install module with placeholder values in a module bay tree {level} " @@ -4244,189 +4679,200 @@ msgstr "" "arborescence de modules {level} dans un arbre mais {tokens} espaces réservés" " donnés." -#: dcim/forms/common.py:144 +#: netbox/dcim/forms/common.py:144 #, 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" -#: dcim/forms/common.py:153 +#: netbox/dcim/forms/common.py:153 #, python-brace-format msgid "A {model} named {name} already exists" msgstr "UN {model} nommé {name} existe déjà" -#: dcim/forms/connections.py:49 dcim/forms/model_forms.py:738 -#: dcim/tables/power.py:66 templates/dcim/inc/cable_termination.html:37 -#: templates/dcim/powerfeed.html:24 templates/dcim/powerpanel.html:19 -#: templates/dcim/trace/powerpanel.html:4 +#: netbox/dcim/forms/connections.py:49 netbox/dcim/forms/model_forms.py:738 +#: netbox/dcim/tables/power.py:66 +#: netbox/templates/dcim/inc/cable_termination.html:37 +#: netbox/templates/dcim/powerfeed.html:24 +#: netbox/templates/dcim/powerpanel.html:19 +#: netbox/templates/dcim/trace/powerpanel.html:4 msgid "Power Panel" msgstr "Panneau d'alimentation" -#: dcim/forms/connections.py:58 dcim/forms/model_forms.py:765 -#: templates/dcim/powerfeed.html:21 templates/dcim/powerport.html:80 +#: netbox/dcim/forms/connections.py:58 netbox/dcim/forms/model_forms.py:765 +#: netbox/templates/dcim/powerfeed.html:21 +#: netbox/templates/dcim/powerport.html:80 msgid "Power Feed" msgstr "Alimentation" -#: dcim/forms/connections.py:81 +#: netbox/dcim/forms/connections.py:81 msgid "Side" msgstr "Côté" -#: dcim/forms/filtersets.py:136 dcim/tables/devices.py:295 +#: netbox/dcim/forms/filtersets.py:136 netbox/dcim/tables/devices.py:295 msgid "Device Status" msgstr "État de l'appareil" -#: dcim/forms/filtersets.py:149 +#: netbox/dcim/forms/filtersets.py:149 msgid "Parent region" msgstr "Région parente" -#: dcim/forms/filtersets.py:163 tenancy/forms/bulk_import.py:28 -#: tenancy/forms/bulk_import.py:62 tenancy/forms/filtersets.py:33 -#: tenancy/forms/filtersets.py:62 wireless/forms/bulk_import.py:25 -#: wireless/forms/filtersets.py:25 +#: netbox/dcim/forms/filtersets.py:163 netbox/tenancy/forms/bulk_import.py:28 +#: netbox/tenancy/forms/bulk_import.py:62 +#: netbox/tenancy/forms/filtersets.py:33 netbox/tenancy/forms/filtersets.py:62 +#: netbox/wireless/forms/bulk_import.py:25 +#: netbox/wireless/forms/filtersets.py:25 msgid "Parent group" msgstr "Groupe de parents" -#: dcim/forms/filtersets.py:242 templates/dcim/location.html:58 -#: templates/dcim/site.html:56 +#: netbox/dcim/forms/filtersets.py:242 netbox/templates/dcim/location.html:58 +#: netbox/templates/dcim/site.html:56 msgid "Facility" msgstr "Datacentre" -#: dcim/forms/filtersets.py:380 -msgid "Rack type" -msgstr "Type de baie" - -#: dcim/forms/filtersets.py:397 +#: netbox/dcim/forms/filtersets.py:397 msgid "Function" msgstr "Fonction" -#: dcim/forms/filtersets.py:483 dcim/forms/model_forms.py:373 -#: templates/inc/panels/image_attachments.html:6 +#: netbox/dcim/forms/filtersets.py:483 netbox/dcim/forms/model_forms.py:373 +#: netbox/templates/inc/panels/image_attachments.html:6 msgid "Images" msgstr "Des images" -#: dcim/forms/filtersets.py:486 dcim/forms/filtersets.py:611 -#: dcim/forms/filtersets.py:726 +#: netbox/dcim/forms/filtersets.py:486 netbox/dcim/forms/filtersets.py:611 +#: netbox/dcim/forms/filtersets.py:726 msgid "Components" msgstr "Composantes" -#: dcim/forms/filtersets.py:506 +#: netbox/dcim/forms/filtersets.py:506 msgid "Subdevice role" msgstr "Rôle du sous-appareil" -#: dcim/forms/filtersets.py:790 dcim/tables/racks.py:54 -#: templates/dcim/racktype.html:20 +#: netbox/dcim/forms/filtersets.py:790 netbox/dcim/tables/racks.py:54 +#: netbox/templates/dcim/racktype.html:20 msgid "Model" msgstr "Modèle" -#: dcim/forms/filtersets.py:834 +#: netbox/dcim/forms/filtersets.py:834 msgid "Has an OOB IP" msgstr "Possède une adresse IP OOB" -#: dcim/forms/filtersets.py:841 +#: netbox/dcim/forms/filtersets.py:841 msgid "Virtual chassis member" msgstr "Membre virtuel du châssis" -#: dcim/forms/filtersets.py:890 +#: netbox/dcim/forms/filtersets.py:890 msgid "Has virtual device contexts" msgstr "Possède des contextes de périphériques virtuels" -#: dcim/forms/filtersets.py:903 extras/filtersets.py:585 -#: ipam/forms/filtersets.py:452 virtualization/forms/filtersets.py:112 +#: netbox/dcim/forms/filtersets.py:903 netbox/extras/filtersets.py:585 +#: netbox/ipam/forms/filtersets.py:452 +#: netbox/virtualization/forms/filtersets.py:112 msgid "Cluster group" msgstr "Groupe de clusters" -#: dcim/forms/filtersets.py:1210 +#: netbox/dcim/forms/filtersets.py:1210 msgid "Cabled" msgstr "câblé" -#: dcim/forms/filtersets.py:1217 +#: netbox/dcim/forms/filtersets.py:1217 msgid "Occupied" msgstr "Occupé" -#: dcim/forms/filtersets.py:1244 dcim/forms/filtersets.py:1269 -#: dcim/forms/filtersets.py:1293 dcim/forms/filtersets.py:1313 -#: dcim/forms/filtersets.py:1336 dcim/tables/devices.py:364 -#: templates/dcim/consoleport.html:55 templates/dcim/consoleserverport.html:55 -#: templates/dcim/frontport.html:69 templates/dcim/interface.html:140 -#: templates/dcim/powerfeed.html:110 templates/dcim/poweroutlet.html:59 -#: templates/dcim/powerport.html:59 templates/dcim/rearport.html:65 +#: netbox/dcim/forms/filtersets.py: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/templates/dcim/consoleport.html:55 +#: netbox/templates/dcim/consoleserverport.html:55 +#: netbox/templates/dcim/frontport.html:69 +#: netbox/templates/dcim/interface.html:140 +#: netbox/templates/dcim/powerfeed.html:110 +#: netbox/templates/dcim/poweroutlet.html:59 +#: netbox/templates/dcim/powerport.html:59 +#: netbox/templates/dcim/rearport.html:65 msgid "Connection" msgstr "Connexion" -#: dcim/forms/filtersets.py:1348 extras/forms/bulk_edit.py:326 -#: extras/forms/bulk_import.py:247 extras/forms/filtersets.py:464 -#: extras/forms/model_forms.py:675 extras/tables/tables.py:579 -#: templates/extras/journalentry.html:30 +#: netbox/dcim/forms/filtersets.py:1348 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 "Type" -#: dcim/forms/filtersets.py:1377 +#: netbox/dcim/forms/filtersets.py:1377 msgid "Mgmt only" msgstr "Gestion uniquement" -#: dcim/forms/filtersets.py:1389 dcim/forms/model_forms.py:1383 -#: dcim/models/device_components.py:629 templates/dcim/interface.html:129 +#: 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 msgid "WWN" msgstr "WWN" -#: dcim/forms/filtersets.py:1409 +#: netbox/dcim/forms/filtersets.py:1409 msgid "Wireless channel" msgstr "Canal sans fil" -#: dcim/forms/filtersets.py:1413 +#: netbox/dcim/forms/filtersets.py:1413 msgid "Channel frequency (MHz)" msgstr "Fréquence du canal (MHz)" -#: dcim/forms/filtersets.py:1417 +#: netbox/dcim/forms/filtersets.py:1417 msgid "Channel width (MHz)" msgstr "Largeur du canal (MHz)" -#: dcim/forms/filtersets.py:1421 templates/dcim/interface.html:85 +#: netbox/dcim/forms/filtersets.py:1421 +#: netbox/templates/dcim/interface.html:85 msgid "Transmit power (dBm)" msgstr "Puissance de transmission (dBm)" -#: dcim/forms/filtersets.py:1446 dcim/forms/filtersets.py:1471 -#: dcim/tables/devices.py:327 templates/dcim/cable.html:12 -#: templates/dcim/cable_trace.html:46 templates/dcim/frontport.html:77 -#: templates/dcim/htmx/cable_edit.html:50 -#: templates/dcim/inc/connection_endpoints.html:4 -#: templates/dcim/rearport.html:73 templates/dcim/trace/cable.html:7 +#: netbox/dcim/forms/filtersets.py:1446 netbox/dcim/forms/filtersets.py:1471 +#: netbox/dcim/tables/devices.py:327 netbox/templates/dcim/cable.html:12 +#: netbox/templates/dcim/cable_trace.html:46 +#: netbox/templates/dcim/frontport.html:77 +#: netbox/templates/dcim/htmx/cable_edit.html:50 +#: netbox/templates/dcim/inc/connection_endpoints.html:4 +#: netbox/templates/dcim/rearport.html:73 +#: netbox/templates/dcim/trace/cable.html:7 msgid "Cable" msgstr "câble" -#: dcim/forms/filtersets.py:1550 dcim/tables/devices.py:949 +#: netbox/dcim/forms/filtersets.py:1550 netbox/dcim/tables/devices.py:949 msgid "Discovered" msgstr "Découvert" -#: dcim/forms/formsets.py:20 +#: netbox/dcim/forms/formsets.py:20 #, python-brace-format msgid "A virtual chassis member already exists in position {vc_position}." msgstr "Un élément de châssis virtuel existe déjà en place {vc_position}." -#: dcim/forms/model_forms.py:140 +#: netbox/dcim/forms/model_forms.py:140 msgid "Contact Info" msgstr "Informations de contact" -#: dcim/forms/model_forms.py:195 templates/dcim/rackrole.html:19 +#: netbox/dcim/forms/model_forms.py:195 netbox/templates/dcim/rackrole.html:19 msgid "Rack Role" msgstr "Role de la baie" -#: dcim/forms/model_forms.py:212 dcim/forms/model_forms.py:362 -#: dcim/forms/model_forms.py:446 utilities/forms/fields/fields.py:47 +#: netbox/dcim/forms/model_forms.py:212 netbox/dcim/forms/model_forms.py:362 +#: netbox/dcim/forms/model_forms.py:446 +#: netbox/utilities/forms/fields/fields.py:47 msgid "Slug" msgstr "Identifiant" -#: dcim/forms/model_forms.py:259 +#: 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." -#: dcim/forms/model_forms.py:265 +#: netbox/dcim/forms/model_forms.py:265 msgid "Inventory Control" msgstr "Contrôle des stocks" -#: dcim/forms/model_forms.py:313 +#: netbox/dcim/forms/model_forms.py:313 msgid "" "Comma-separated list of numeric unit IDs. A range may be specified using a " "hyphen." @@ -4434,145 +4880,172 @@ 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." -#: dcim/forms/model_forms.py:322 dcim/tables/racks.py:202 +#: netbox/dcim/forms/model_forms.py:322 netbox/dcim/tables/racks.py:202 msgid "Reservation" msgstr "Réservation" -#: dcim/forms/model_forms.py:423 templates/dcim/devicerole.html:23 +#: netbox/dcim/forms/model_forms.py:423 +#: netbox/templates/dcim/devicerole.html:23 msgid "Device Role" msgstr "Rôle de l'appareil" -#: dcim/forms/model_forms.py:490 dcim/models/devices.py:644 +#: netbox/dcim/forms/model_forms.py:490 netbox/dcim/models/devices.py:644 msgid "The lowest-numbered unit occupied by the device" msgstr "L'unité la moins numérotée occupée par l'appareil" -#: dcim/forms/model_forms.py:547 +#: netbox/dcim/forms/model_forms.py:547 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é" -#: dcim/forms/model_forms.py:552 +#: netbox/dcim/forms/model_forms.py:552 msgid "The priority of the device in the virtual chassis" msgstr "La priorité de l'appareil dans le châssis virtuel" -#: dcim/forms/model_forms.py:659 +#: netbox/dcim/forms/model_forms.py:659 msgid "Automatically populate components associated with this module type" msgstr "Remplir automatiquement les composants associés à ce type de module" -#: dcim/forms/model_forms.py:767 +#: netbox/dcim/forms/model_forms.py:767 msgid "Characteristics" msgstr "Caractéristiques" -#: dcim/forms/model_forms.py:1087 +#: netbox/dcim/forms/model_forms.py:914 +#, python-brace-format +msgid "" +"Alphanumeric ranges are supported for bulk creation. Mixed cases and types " +"within a single range are not supported (example: " +"[ge,xe]-0/0/[0-9]). The token {module}, if " +"present, will be automatically replaced with the position value when " +"creating a new module." +msgstr "" + +#: netbox/dcim/forms/model_forms.py:1094 msgid "Console port template" msgstr "Modèle de port de console" -#: dcim/forms/model_forms.py:1095 +#: netbox/dcim/forms/model_forms.py:1102 msgid "Console server port template" msgstr "Modèle de port de serveur de console" -#: dcim/forms/model_forms.py:1103 +#: netbox/dcim/forms/model_forms.py:1110 msgid "Front port template" msgstr "Modèle de port avant" -#: dcim/forms/model_forms.py:1111 +#: netbox/dcim/forms/model_forms.py:1118 msgid "Interface template" msgstr "Modèle d'interface" -#: dcim/forms/model_forms.py:1119 +#: netbox/dcim/forms/model_forms.py:1126 msgid "Power outlet template" msgstr "Modèle de prise de courant" -#: dcim/forms/model_forms.py:1127 +#: netbox/dcim/forms/model_forms.py:1134 msgid "Power port template" msgstr "Modèle de port d'alimentation" -#: dcim/forms/model_forms.py:1135 +#: netbox/dcim/forms/model_forms.py:1142 msgid "Rear port template" msgstr "Modèle de port arrière" -#: dcim/forms/model_forms.py:1144 dcim/forms/model_forms.py:1388 -#: dcim/forms/model_forms.py:1551 dcim/forms/model_forms.py:1583 -#: dcim/tables/connections.py:65 ipam/forms/bulk_import.py:318 -#: ipam/forms/model_forms.py:280 ipam/forms/model_forms.py:289 -#: ipam/tables/fhrp.py:64 ipam/tables/ip.py:372 ipam/tables/vlans.py:169 -#: templates/circuits/inc/circuit_termination_fields.html:51 -#: templates/dcim/frontport.html:106 templates/dcim/interface.html:27 -#: templates/dcim/interface.html:184 templates/dcim/interface.html:310 -#: templates/dcim/rearport.html:102 -#: templates/virtualization/vminterface.html:18 -#: templates/vpn/tunneltermination.html:31 -#: templates/wireless/inc/wirelesslink_interface.html:10 -#: templates/wireless/wirelesslink.html:10 -#: templates/wireless/wirelesslink.html:55 -#: virtualization/forms/model_forms.py:348 vpn/forms/bulk_import.py:297 -#: vpn/forms/model_forms.py:436 vpn/forms/model_forms.py:445 -#: wireless/forms/model_forms.py:113 wireless/forms/model_forms.py:155 +#: netbox/dcim/forms/model_forms.py: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" -#: dcim/forms/model_forms.py:1145 dcim/forms/model_forms.py:1584 -#: dcim/tables/connections.py:27 templates/dcim/consoleport.html:17 -#: templates/dcim/consoleserverport.html:74 templates/dcim/frontport.html:112 +#: netbox/dcim/forms/model_forms.py:1152 netbox/dcim/forms/model_forms.py:1591 +#: netbox/dcim/tables/connections.py:27 +#: netbox/templates/dcim/consoleport.html:17 +#: netbox/templates/dcim/consoleserverport.html:74 +#: netbox/templates/dcim/frontport.html:112 msgid "Console Port" msgstr "Port de console" -#: dcim/forms/model_forms.py:1146 dcim/forms/model_forms.py:1585 -#: templates/dcim/consoleport.html:73 templates/dcim/consoleserverport.html:17 -#: templates/dcim/frontport.html:109 +#: netbox/dcim/forms/model_forms.py:1153 netbox/dcim/forms/model_forms.py:1592 +#: 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" -#: dcim/forms/model_forms.py:1147 dcim/forms/model_forms.py:1586 -#: templates/circuits/inc/circuit_termination_fields.html:52 -#: templates/dcim/consoleport.html:76 templates/dcim/consoleserverport.html:77 -#: templates/dcim/frontport.html:17 templates/dcim/frontport.html:115 -#: templates/dcim/interface.html:187 templates/dcim/rearport.html:105 +#: netbox/dcim/forms/model_forms.py:1154 netbox/dcim/forms/model_forms.py:1593 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:52 +#: netbox/templates/dcim/consoleport.html:76 +#: netbox/templates/dcim/consoleserverport.html:77 +#: netbox/templates/dcim/frontport.html:17 +#: netbox/templates/dcim/frontport.html:115 +#: netbox/templates/dcim/interface.html:187 +#: netbox/templates/dcim/rearport.html:105 msgid "Front Port" msgstr "Port avant" -#: dcim/forms/model_forms.py:1148 dcim/forms/model_forms.py:1587 -#: dcim/tables/devices.py:710 -#: templates/circuits/inc/circuit_termination_fields.html:53 -#: templates/dcim/consoleport.html:79 templates/dcim/consoleserverport.html:80 -#: templates/dcim/frontport.html:50 templates/dcim/frontport.html:118 -#: templates/dcim/interface.html:190 templates/dcim/rearport.html:17 -#: templates/dcim/rearport.html:108 +#: netbox/dcim/forms/model_forms.py:1155 netbox/dcim/forms/model_forms.py:1594 +#: netbox/dcim/tables/devices.py:710 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:53 +#: netbox/templates/dcim/consoleport.html:79 +#: netbox/templates/dcim/consoleserverport.html:80 +#: netbox/templates/dcim/frontport.html:50 +#: netbox/templates/dcim/frontport.html:118 +#: netbox/templates/dcim/interface.html:190 +#: netbox/templates/dcim/rearport.html:17 +#: netbox/templates/dcim/rearport.html:108 msgid "Rear Port" msgstr "Port arrière" -#: dcim/forms/model_forms.py:1149 dcim/forms/model_forms.py:1588 -#: dcim/tables/connections.py:46 dcim/tables/devices.py:512 -#: templates/dcim/poweroutlet.html:44 templates/dcim/powerport.html:17 +#: 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/templates/dcim/powerport.html:17 msgid "Power Port" msgstr "Port d'alimentation" -#: dcim/forms/model_forms.py:1150 dcim/forms/model_forms.py:1589 -#: templates/dcim/poweroutlet.html:17 templates/dcim/powerport.html:77 +#: netbox/dcim/forms/model_forms.py:1157 netbox/dcim/forms/model_forms.py:1596 +#: netbox/templates/dcim/poweroutlet.html:17 +#: netbox/templates/dcim/powerport.html:77 msgid "Power Outlet" msgstr "Prise de courant" -#: dcim/forms/model_forms.py:1152 dcim/forms/model_forms.py:1591 +#: netbox/dcim/forms/model_forms.py:1159 netbox/dcim/forms/model_forms.py:1598 msgid "Component Assignment" msgstr "Affectation des composants" -#: dcim/forms/model_forms.py:1195 dcim/forms/model_forms.py:1638 +#: netbox/dcim/forms/model_forms.py:1202 netbox/dcim/forms/model_forms.py:1645 msgid "An InventoryItem can only be assigned to a single component." msgstr "Un item d'inventaire ne peut être attribué qu'à un seul composant." -#: dcim/forms/model_forms.py:1332 +#: netbox/dcim/forms/model_forms.py:1339 msgid "LAG interface" msgstr "Interface LAG" -#: dcim/forms/model_forms.py:1355 +#: netbox/dcim/forms/model_forms.py:1362 msgid "Filter VLANs available for assignment by group." msgstr "Filtrez les VLAN disponibles pour une attribution par groupe." -#: dcim/forms/model_forms.py:1484 +#: netbox/dcim/forms/model_forms.py:1491 msgid "Child Device" msgstr "Appareil pour enfants" -#: dcim/forms/model_forms.py:1485 +#: netbox/dcim/forms/model_forms.py:1492 msgid "" "Child devices must first be created and assigned to the site and rack of the" " parent device." @@ -4580,32 +5053,35 @@ msgstr "" "Les appareils enfants doivent d'abord être créés et affectés au site et à la" " baie de l'appareil parent." -#: dcim/forms/model_forms.py:1527 +#: netbox/dcim/forms/model_forms.py:1534 msgid "Console port" msgstr "Port de console" -#: dcim/forms/model_forms.py:1535 +#: netbox/dcim/forms/model_forms.py:1542 msgid "Console server port" msgstr "Port du serveur de console" -#: dcim/forms/model_forms.py:1543 +#: netbox/dcim/forms/model_forms.py:1550 msgid "Front port" msgstr "Port avant" -#: dcim/forms/model_forms.py:1559 +#: netbox/dcim/forms/model_forms.py:1566 msgid "Power outlet" msgstr "prise de courant" -#: dcim/forms/model_forms.py:1579 templates/dcim/inventoryitem.html:17 +#: netbox/dcim/forms/model_forms.py:1586 +#: netbox/templates/dcim/inventoryitem.html:17 msgid "Inventory Item" msgstr "Article d'inventaire" -#: dcim/forms/model_forms.py:1652 templates/dcim/inventoryitemrole.html:15 +#: netbox/dcim/forms/model_forms.py:1659 +#: netbox/templates/dcim/inventoryitemrole.html:15 msgid "Inventory Item Role" msgstr "Rôle de l'article d'inventaire" -#: dcim/forms/object_create.py:48 dcim/forms/object_create.py:199 -#: dcim/forms/object_create.py:355 +#: netbox/dcim/forms/object_create.py:48 +#: netbox/dcim/forms/object_create.py:199 +#: netbox/dcim/forms/object_create.py:347 msgid "" "Alphanumeric ranges are supported. (Must match the number of objects being " "created.)" @@ -4613,7 +5089,7 @@ msgstr "" "Les plages alphanumériques sont prises en charge. (Doit correspondre au " "nombre d'objets en cours de création.)" -#: dcim/forms/object_create.py:68 +#: netbox/dcim/forms/object_create.py:68 #, python-brace-format msgid "" "The provided pattern specifies {value_count} values, but {pattern_count} are" @@ -4622,16 +5098,17 @@ msgstr "" "Le modèle fourni spécifie {value_count} des valeurs, mais {pattern_count} " "sont attendus." -#: dcim/forms/object_create.py:110 dcim/forms/object_create.py:271 -#: dcim/tables/devices.py:252 +#: netbox/dcim/forms/object_create.py:110 +#: netbox/dcim/forms/object_create.py:263 netbox/dcim/tables/devices.py:252 msgid "Rear ports" msgstr "Ports arrière" -#: dcim/forms/object_create.py:111 dcim/forms/object_create.py:272 +#: netbox/dcim/forms/object_create.py:111 +#: netbox/dcim/forms/object_create.py:264 msgid "Select one rear port assignment for each front port being created." msgstr "Associer un port arrière à chaque port avant en cours de création." -#: dcim/forms/object_create.py:164 +#: netbox/dcim/forms/object_create.py:164 #, python-brace-format msgid "" "The number of front port templates to be created ({frontport_count}) must " @@ -4641,16 +5118,7 @@ msgstr "" "correspondre au nombre sélectionné de positions des ports arrière " "({rearport_count})." -#: dcim/forms/object_create.py:251 -#, python-brace-format -msgid "" -"The string {module} will be replaced with the position of the " -"assigned module, if any." -msgstr "" -"La chaîne {module} sera remplacée par la position du module " -"attribué si nécessaire." - -#: dcim/forms/object_create.py:320 +#: netbox/dcim/forms/object_create.py:312 #, python-brace-format msgid "" "The number of front ports to be created ({frontport_count}) must match the " @@ -4659,17 +5127,18 @@ msgstr "" "Le nombre de ports frontaux à créer ({frontport_count}) doit correspondre au" " nombre sélectionné de positions des ports arrière ({rearport_count})." -#: dcim/forms/object_create.py:409 dcim/tables/devices.py:1033 -#: ipam/tables/fhrp.py:31 templates/dcim/virtualchassis.html:53 -#: templates/dcim/virtualchassis_edit.html:47 templates/ipam/fhrpgroup.html:38 +#: netbox/dcim/forms/object_create.py:401 netbox/dcim/tables/devices.py:1033 +#: netbox/ipam/tables/fhrp.py:31 netbox/templates/dcim/virtualchassis.html:53 +#: netbox/templates/dcim/virtualchassis_edit.html:47 +#: netbox/templates/ipam/fhrpgroup.html:38 msgid "Members" msgstr "Membres" -#: dcim/forms/object_create.py:418 +#: netbox/dcim/forms/object_create.py:410 msgid "Initial position" msgstr "Position initiale" -#: dcim/forms/object_create.py:421 +#: netbox/dcim/forms/object_create.py:413 msgid "" "Position of the first member device. Increases by one for each additional " "member." @@ -4677,70 +5146,72 @@ msgstr "" "Position du premier dispositif membre. Augmente d'une unité pour chaque " "membre supplémentaire." -#: dcim/forms/object_create.py:435 +#: netbox/dcim/forms/object_create.py:427 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." -#: dcim/models/cables.py:62 dcim/models/device_component_templates.py:55 -#: dcim/models/device_components.py:62 extras/models/customfields.py:111 +#: netbox/dcim/models/cables.py:62 +#: netbox/dcim/models/device_component_templates.py:55 +#: netbox/dcim/models/device_components.py:62 +#: netbox/extras/models/customfields.py:111 msgid "label" msgstr "étiquette" -#: dcim/models/cables.py:71 +#: netbox/dcim/models/cables.py:71 msgid "length" msgstr "longueur" -#: dcim/models/cables.py:78 +#: netbox/dcim/models/cables.py:78 msgid "length unit" msgstr "unité de longueur" -#: dcim/models/cables.py:95 +#: netbox/dcim/models/cables.py:95 msgid "cable" msgstr "câble" -#: dcim/models/cables.py:96 +#: netbox/dcim/models/cables.py:96 msgid "cables" msgstr "câbles" -#: dcim/models/cables.py:165 +#: netbox/dcim/models/cables.py:165 msgid "Must specify a unit when setting a cable length" msgstr "" "Vous devez spécifier une unité lors du réglage de la longueur du câble" -#: dcim/models/cables.py:168 +#: netbox/dcim/models/cables.py:168 msgid "Must define A and B terminations when creating a new cable." msgstr "" "Vous devez définir les terminaisons A et B lors de la création d'un nouveau " "câble." -#: dcim/models/cables.py:175 +#: netbox/dcim/models/cables.py:175 msgid "Cannot connect different termination types to same end of cable." msgstr "" "Impossible de connecter différents types de terminaisons à la même extrémité" " du câble." -#: dcim/models/cables.py:183 +#: netbox/dcim/models/cables.py:183 #, python-brace-format msgid "Incompatible termination types: {type_a} and {type_b}" msgstr "Types de terminaison incompatibles : {type_a} et {type_b}" -#: dcim/models/cables.py:193 +#: netbox/dcim/models/cables.py:193 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." -#: dcim/models/cables.py:260 ipam/models/asns.py:37 +#: netbox/dcim/models/cables.py:260 netbox/ipam/models/asns.py:37 msgid "end" msgstr "fin" -#: dcim/models/cables.py:313 +#: netbox/dcim/models/cables.py:313 msgid "cable termination" msgstr "terminaison de câble" -#: dcim/models/cables.py:314 +#: netbox/dcim/models/cables.py:314 msgid "cable terminations" msgstr "terminaisons de câble" -#: dcim/models/cables.py:333 +#: netbox/dcim/models/cables.py:333 #, python-brace-format msgid "" "Duplicate termination found for {app_label}.{model} {termination_id}: cable " @@ -4749,38 +5220,38 @@ msgstr "" "Un doublon de terminaison a été trouvé pour {app_label}.{model} " "{termination_id}: câble {cable_pk}" -#: dcim/models/cables.py:343 +#: netbox/dcim/models/cables.py:343 #, 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" -#: dcim/models/cables.py:350 +#: netbox/dcim/models/cables.py:350 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." -#: dcim/models/cables.py:448 extras/models/configs.py:50 +#: netbox/dcim/models/cables.py:448 netbox/extras/models/configs.py:50 msgid "is active" msgstr "est actif" -#: dcim/models/cables.py:452 +#: netbox/dcim/models/cables.py:452 msgid "is complete" msgstr "est terminé" -#: dcim/models/cables.py:456 +#: netbox/dcim/models/cables.py:456 msgid "is split" msgstr "est divisé" -#: dcim/models/cables.py:464 +#: netbox/dcim/models/cables.py:464 msgid "cable path" msgstr "chemin de câble" -#: dcim/models/cables.py:465 +#: netbox/dcim/models/cables.py:465 msgid "cable paths" msgstr "chemins de câbles" -#: dcim/models/device_component_templates.py:46 +#: netbox/dcim/models/device_component_templates.py:46 #, python-brace-format msgid "" "{module} is accepted as a substitution for the module bay position when " @@ -4789,18 +5260,18 @@ msgstr "" "{module} est accepté en remplacement de la position de la baie du module " "lorsqu'il est fixé à un type de module." -#: dcim/models/device_component_templates.py:58 -#: dcim/models/device_components.py:65 +#: netbox/dcim/models/device_component_templates.py:58 +#: netbox/dcim/models/device_components.py:65 msgid "Physical label" msgstr "Etiquette physique" -#: dcim/models/device_component_templates.py:103 +#: netbox/dcim/models/device_component_templates.py:103 msgid "Component templates cannot be moved to a different device type." msgstr "" "Les modèles de composants ne peuvent pas être déplacés vers un autre type " "d'appareil." -#: dcim/models/device_component_templates.py:154 +#: netbox/dcim/models/device_component_templates.py:154 msgid "" "A component template cannot be associated with both a device type and a " "module type." @@ -4808,7 +5279,7 @@ msgstr "" "Un modèle de composant ne peut pas être associé à la fois à un type " "d'appareil et à un type de module." -#: dcim/models/device_component_templates.py:158 +#: netbox/dcim/models/device_component_templates.py:158 msgid "" "A component template must be associated with either a device type or a " "module type." @@ -4816,137 +5287,137 @@ msgstr "" "Un modèle de composant doit être associé à un type d'appareil ou à un type " "de module." -#: dcim/models/device_component_templates.py:212 +#: netbox/dcim/models/device_component_templates.py:212 msgid "console port template" msgstr "modèle de port de console" -#: dcim/models/device_component_templates.py:213 +#: netbox/dcim/models/device_component_templates.py:213 msgid "console port templates" msgstr "modèles de ports de console" -#: dcim/models/device_component_templates.py:246 +#: netbox/dcim/models/device_component_templates.py:246 msgid "console server port template" msgstr "modèle de port de serveur de console" -#: dcim/models/device_component_templates.py:247 +#: netbox/dcim/models/device_component_templates.py:247 msgid "console server port templates" msgstr "modèles de ports de serveur de console" -#: dcim/models/device_component_templates.py:278 -#: dcim/models/device_components.py:352 +#: netbox/dcim/models/device_component_templates.py:278 +#: netbox/dcim/models/device_components.py:352 msgid "maximum draw" msgstr "tirage maximum" -#: dcim/models/device_component_templates.py:285 -#: dcim/models/device_components.py:359 +#: netbox/dcim/models/device_component_templates.py:285 +#: netbox/dcim/models/device_components.py:359 msgid "allocated draw" msgstr "tirage au sort alloué" -#: dcim/models/device_component_templates.py:295 +#: netbox/dcim/models/device_component_templates.py:295 msgid "power port template" msgstr "modèle de port d'alimentation" -#: dcim/models/device_component_templates.py:296 +#: netbox/dcim/models/device_component_templates.py:296 msgid "power port templates" msgstr "modèles de ports d'alimentation" -#: dcim/models/device_component_templates.py:315 -#: dcim/models/device_components.py:382 +#: netbox/dcim/models/device_component_templates.py:315 +#: netbox/dcim/models/device_components.py:382 #, 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)." -#: dcim/models/device_component_templates.py:347 -#: dcim/models/device_components.py:477 +#: netbox/dcim/models/device_component_templates.py:347 +#: netbox/dcim/models/device_components.py:477 msgid "feed leg" msgstr "patte d'alimentation" -#: dcim/models/device_component_templates.py:351 -#: dcim/models/device_components.py:481 +#: netbox/dcim/models/device_component_templates.py:351 +#: netbox/dcim/models/device_components.py:481 msgid "Phase (for three-phase feeds)" msgstr "Phase (pour les alimentations triphasées)" -#: dcim/models/device_component_templates.py:357 +#: netbox/dcim/models/device_component_templates.py:357 msgid "power outlet template" msgstr "modèle de prise de courant" -#: dcim/models/device_component_templates.py:358 +#: netbox/dcim/models/device_component_templates.py:358 msgid "power outlet templates" msgstr "modèles de prises de courant" -#: dcim/models/device_component_templates.py:367 +#: netbox/dcim/models/device_component_templates.py:367 #, 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" -#: dcim/models/device_component_templates.py:371 +#: netbox/dcim/models/device_component_templates.py:371 #, 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" -#: dcim/models/device_component_templates.py:423 -#: dcim/models/device_components.py:611 +#: netbox/dcim/models/device_component_templates.py:423 +#: netbox/dcim/models/device_components.py:611 msgid "management only" msgstr "gestion uniquement" -#: dcim/models/device_component_templates.py:431 -#: dcim/models/device_components.py:550 +#: netbox/dcim/models/device_component_templates.py:431 +#: netbox/dcim/models/device_components.py:550 msgid "bridge interface" msgstr "interface de pont" -#: dcim/models/device_component_templates.py:449 -#: dcim/models/device_components.py:636 +#: netbox/dcim/models/device_component_templates.py:449 +#: netbox/dcim/models/device_components.py:636 msgid "wireless role" msgstr "rôle sans fil" -#: dcim/models/device_component_templates.py:455 +#: netbox/dcim/models/device_component_templates.py:455 msgid "interface template" msgstr "modèle d'interface" -#: dcim/models/device_component_templates.py:456 +#: netbox/dcim/models/device_component_templates.py:456 msgid "interface templates" msgstr "modèles d'interface" -#: dcim/models/device_component_templates.py:463 -#: dcim/models/device_components.py:804 -#: virtualization/models/virtualmachines.py:405 +#: netbox/dcim/models/device_component_templates.py:463 +#: netbox/dcim/models/device_components.py:804 +#: netbox/virtualization/models/virtualmachines.py:405 msgid "An interface cannot be bridged to itself." msgstr "Une interface ne peut pas être reliée à elle-même." -#: dcim/models/device_component_templates.py:466 +#: netbox/dcim/models/device_component_templates.py:466 #, 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" -#: dcim/models/device_component_templates.py:470 +#: netbox/dcim/models/device_component_templates.py:470 #, 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" -#: dcim/models/device_component_templates.py:526 -#: dcim/models/device_components.py:984 +#: netbox/dcim/models/device_component_templates.py:526 +#: netbox/dcim/models/device_components.py:984 msgid "rear port position" msgstr "position du port arrière" -#: dcim/models/device_component_templates.py:551 +#: netbox/dcim/models/device_component_templates.py:551 msgid "front port template" msgstr "modèle de port avant" -#: dcim/models/device_component_templates.py:552 +#: netbox/dcim/models/device_component_templates.py:552 msgid "front port templates" msgstr "modèles de port avant" -#: dcim/models/device_component_templates.py:562 +#: netbox/dcim/models/device_component_templates.py:562 #, 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" -#: dcim/models/device_component_templates.py:568 +#: netbox/dcim/models/device_component_templates.py:568 #, python-brace-format msgid "" "Invalid rear port position ({position}); rear port {name} has only {count} " @@ -4955,47 +5426,47 @@ msgstr "" "Position du port arrière non valide ({position}) ; port arrière {name} n'a " "que {count} positions" -#: dcim/models/device_component_templates.py:621 -#: dcim/models/device_components.py:1053 +#: netbox/dcim/models/device_component_templates.py:621 +#: netbox/dcim/models/device_components.py:1053 msgid "positions" msgstr "positions" -#: dcim/models/device_component_templates.py:632 +#: netbox/dcim/models/device_component_templates.py:632 msgid "rear port template" msgstr "modèle de port arrière" -#: dcim/models/device_component_templates.py:633 +#: netbox/dcim/models/device_component_templates.py:633 msgid "rear port templates" msgstr "modèles de port arrière" -#: dcim/models/device_component_templates.py:662 -#: dcim/models/device_components.py:1103 +#: netbox/dcim/models/device_component_templates.py:662 +#: netbox/dcim/models/device_components.py:1103 msgid "position" msgstr "position" -#: dcim/models/device_component_templates.py:665 -#: dcim/models/device_components.py:1106 +#: netbox/dcim/models/device_component_templates.py:665 +#: netbox/dcim/models/device_components.py:1106 msgid "Identifier to reference when renaming installed components" msgstr "" "Identifiant à référencer lors du changement de nom des composants installés" -#: dcim/models/device_component_templates.py:671 +#: netbox/dcim/models/device_component_templates.py:671 msgid "module bay template" msgstr "modèle de baie modulaire" -#: dcim/models/device_component_templates.py:672 +#: netbox/dcim/models/device_component_templates.py:672 msgid "module bay templates" msgstr "modèles de baies de modules" -#: dcim/models/device_component_templates.py:699 +#: netbox/dcim/models/device_component_templates.py:699 msgid "device bay template" msgstr "modèle de baie pour appareils" -#: dcim/models/device_component_templates.py:700 +#: netbox/dcim/models/device_component_templates.py:700 msgid "device bay templates" msgstr "modèles de baies d'appareils" -#: dcim/models/device_component_templates.py:713 +#: netbox/dcim/models/device_component_templates.py:713 #, python-brace-format msgid "" "Subdevice role of device type ({device_type}) must be set to \"parent\" to " @@ -5004,206 +5475,211 @@ 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." -#: dcim/models/device_component_templates.py:768 -#: dcim/models/device_components.py:1262 +#: netbox/dcim/models/device_component_templates.py:768 +#: netbox/dcim/models/device_components.py:1262 msgid "part ID" msgstr "ID de pièce" -#: dcim/models/device_component_templates.py:770 -#: dcim/models/device_components.py:1264 +#: netbox/dcim/models/device_component_templates.py:770 +#: netbox/dcim/models/device_components.py:1264 msgid "Manufacturer-assigned part identifier" msgstr "Identifiant de pièce attribué par le fabricant" -#: dcim/models/device_component_templates.py:787 +#: netbox/dcim/models/device_component_templates.py:787 msgid "inventory item template" msgstr "modèle d'article d'inventaire" -#: dcim/models/device_component_templates.py:788 +#: netbox/dcim/models/device_component_templates.py:788 msgid "inventory item templates" msgstr "modèles d'articles d'inventaire" -#: dcim/models/device_components.py:105 +#: netbox/dcim/models/device_components.py:105 msgid "Components cannot be moved to a different device." msgstr "Les composants ne peuvent pas être déplacés vers un autre appareil." -#: dcim/models/device_components.py:144 +#: netbox/dcim/models/device_components.py:144 msgid "cable end" msgstr "extrémité du câble" -#: dcim/models/device_components.py:150 +#: netbox/dcim/models/device_components.py:150 msgid "mark connected" msgstr "marque connectée" -#: dcim/models/device_components.py:152 +#: netbox/dcim/models/device_components.py:152 msgid "Treat as if a cable is connected" msgstr "Traitez comme si un câble était connecté" -#: dcim/models/device_components.py:170 +#: netbox/dcim/models/device_components.py:170 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." -#: dcim/models/device_components.py:174 +#: netbox/dcim/models/device_components.py:174 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." -#: dcim/models/device_components.py:178 +#: netbox/dcim/models/device_components.py:178 msgid "Cannot mark as connected with a cable attached." msgstr "Impossible de marquer comme connecté avec un câble branché." -#: dcim/models/device_components.py:202 +#: netbox/dcim/models/device_components.py:202 #, 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" -#: dcim/models/device_components.py:287 dcim/models/device_components.py:316 -#: dcim/models/device_components.py:349 dcim/models/device_components.py:467 +#: 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 msgid "Physical port type" msgstr "Type de port physique" -#: dcim/models/device_components.py:290 dcim/models/device_components.py:319 +#: netbox/dcim/models/device_components.py:290 +#: netbox/dcim/models/device_components.py:319 msgid "speed" msgstr "vitesse" -#: dcim/models/device_components.py:294 dcim/models/device_components.py:323 +#: netbox/dcim/models/device_components.py:294 +#: netbox/dcim/models/device_components.py:323 msgid "Port speed in bits per second" msgstr "Vitesse du port en bits par seconde" -#: dcim/models/device_components.py:300 +#: netbox/dcim/models/device_components.py:300 msgid "console port" msgstr "port de console" -#: dcim/models/device_components.py:301 +#: netbox/dcim/models/device_components.py:301 msgid "console ports" msgstr "ports de console" -#: dcim/models/device_components.py:329 +#: netbox/dcim/models/device_components.py:329 msgid "console server port" msgstr "port du serveur de console" -#: dcim/models/device_components.py:330 +#: netbox/dcim/models/device_components.py:330 msgid "console server ports" msgstr "ports du serveur de console" -#: dcim/models/device_components.py:369 +#: netbox/dcim/models/device_components.py:369 msgid "power port" msgstr "port d'alimentation" -#: dcim/models/device_components.py:370 +#: netbox/dcim/models/device_components.py:370 msgid "power ports" msgstr "ports d'alimentation" -#: dcim/models/device_components.py:487 +#: netbox/dcim/models/device_components.py:487 msgid "power outlet" msgstr "prise de courant" -#: dcim/models/device_components.py:488 +#: netbox/dcim/models/device_components.py:488 msgid "power outlets" msgstr "prises de courant" -#: dcim/models/device_components.py:499 +#: netbox/dcim/models/device_components.py:499 #, 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" -#: dcim/models/device_components.py:530 vpn/models/crypto.py:81 -#: vpn/models/crypto.py:226 +#: netbox/dcim/models/device_components.py:530 netbox/vpn/models/crypto.py:81 +#: netbox/vpn/models/crypto.py:226 msgid "mode" msgstr "mode" -#: dcim/models/device_components.py:534 +#: netbox/dcim/models/device_components.py:534 msgid "IEEE 802.1Q tagging strategy" msgstr "Stratégie de marquage IEEE 802.1Q" -#: dcim/models/device_components.py:542 +#: netbox/dcim/models/device_components.py:542 msgid "parent interface" msgstr "interface parente" -#: dcim/models/device_components.py:602 +#: netbox/dcim/models/device_components.py:602 msgid "parent LAG" msgstr "GAL parent" -#: dcim/models/device_components.py:612 +#: 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" -#: dcim/models/device_components.py:617 +#: netbox/dcim/models/device_components.py:617 msgid "speed (Kbps)" msgstr "vitesse (Kbps)" -#: dcim/models/device_components.py:620 +#: netbox/dcim/models/device_components.py:620 msgid "duplex" msgstr "duplex" -#: dcim/models/device_components.py:630 +#: netbox/dcim/models/device_components.py:630 msgid "64-bit World Wide Name" msgstr "Nom mondial 64 bits" -#: dcim/models/device_components.py:642 +#: netbox/dcim/models/device_components.py:642 msgid "wireless channel" msgstr "canal sans fil" -#: dcim/models/device_components.py:649 +#: netbox/dcim/models/device_components.py:649 msgid "channel frequency (MHz)" msgstr "fréquence du canal (MHz)" -#: dcim/models/device_components.py:650 dcim/models/device_components.py:658 +#: 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)" -#: dcim/models/device_components.py:664 +#: netbox/dcim/models/device_components.py:664 msgid "transmit power (dBm)" msgstr "puissance de transmission (dBm)" -#: dcim/models/device_components.py:689 wireless/models.py:117 +#: netbox/dcim/models/device_components.py:689 netbox/wireless/models.py:117 msgid "wireless LANs" msgstr "réseaux locaux sans fil" -#: dcim/models/device_components.py:697 -#: virtualization/models/virtualmachines.py:335 +#: netbox/dcim/models/device_components.py:697 +#: netbox/virtualization/models/virtualmachines.py:335 msgid "untagged VLAN" -msgstr "VLAN non balisé" +msgstr "VLAN non étiqueté" -#: dcim/models/device_components.py:703 -#: virtualization/models/virtualmachines.py:341 +#: netbox/dcim/models/device_components.py:703 +#: netbox/virtualization/models/virtualmachines.py:341 msgid "tagged VLANs" msgstr "VLAN étiquetés" -#: dcim/models/device_components.py:745 -#: virtualization/models/virtualmachines.py:377 +#: netbox/dcim/models/device_components.py:745 +#: netbox/virtualization/models/virtualmachines.py:377 msgid "interface" msgstr "interface" -#: dcim/models/device_components.py:746 -#: virtualization/models/virtualmachines.py:378 +#: netbox/dcim/models/device_components.py:746 +#: netbox/virtualization/models/virtualmachines.py:378 msgid "interfaces" msgstr "interfaces" -#: dcim/models/device_components.py:757 +#: netbox/dcim/models/device_components.py:757 #, 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." -#: dcim/models/device_components.py:765 +#: netbox/dcim/models/device_components.py:765 #, 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." -#: dcim/models/device_components.py:774 -#: virtualization/models/virtualmachines.py:390 +#: netbox/dcim/models/device_components.py:774 +#: netbox/virtualization/models/virtualmachines.py:390 msgid "An interface cannot be its own parent." msgstr "Une interface ne peut pas être son propre parent." -#: dcim/models/device_components.py:778 +#: netbox/dcim/models/device_components.py:778 msgid "Only virtual interfaces may be assigned to a parent interface." msgstr "" "Seules les interfaces virtuelles peuvent être attribuées à une interface " "parent." -#: dcim/models/device_components.py:785 +#: netbox/dcim/models/device_components.py:785 #, python-brace-format msgid "" "The selected parent interface ({interface}) belongs to a different device " @@ -5212,7 +5688,7 @@ msgstr "" "L'interface parent sélectionnée ({interface}) appartient à un autre appareil" " ({device})" -#: dcim/models/device_components.py:791 +#: netbox/dcim/models/device_components.py:791 #, python-brace-format msgid "" "The selected parent interface ({interface}) belongs to {device}, which is " @@ -5221,7 +5697,7 @@ msgstr "" "L'interface parent sélectionnée ({interface}) appartient à {device}, qui ne " "fait pas partie du châssis virtuel {virtual_chassis}." -#: dcim/models/device_components.py:811 +#: netbox/dcim/models/device_components.py:811 #, python-brace-format msgid "" "The selected bridge interface ({bridge}) belongs to a different device " @@ -5230,7 +5706,7 @@ msgstr "" "L'interface de pont sélectionnée ({bridge}) appartient à un autre appareil " "({device})." -#: dcim/models/device_components.py:817 +#: netbox/dcim/models/device_components.py:817 #, python-brace-format msgid "" "The selected bridge interface ({interface}) belongs to {device}, which is " @@ -5239,16 +5715,16 @@ msgstr "" "L'interface de pont sélectionnée ({interface}) appartient à {device}, qui ne" " fait pas partie du châssis virtuel {virtual_chassis}." -#: dcim/models/device_components.py:828 +#: netbox/dcim/models/device_components.py:828 msgid "Virtual interfaces cannot have a parent LAG interface." msgstr "" "Les interfaces virtuelles ne peuvent pas avoir d'interface LAG parente." -#: dcim/models/device_components.py:832 +#: netbox/dcim/models/device_components.py:832 msgid "A LAG interface cannot be its own parent." msgstr "Une interface LAG ne peut pas être son propre parent." -#: dcim/models/device_components.py:839 +#: netbox/dcim/models/device_components.py:839 #, python-brace-format msgid "" "The selected LAG interface ({lag}) belongs to a different device ({device})." @@ -5256,7 +5732,7 @@ msgstr "" "L'interface LAG sélectionnée ({lag}) appartient à un autre appareil " "({device})." -#: dcim/models/device_components.py:845 +#: netbox/dcim/models/device_components.py:845 #, python-brace-format msgid "" "The selected LAG interface ({lag}) belongs to {device}, which is not part of" @@ -5265,74 +5741,74 @@ msgstr "" "L'interface LAG sélectionnée ({lag}) appartient à {device}, qui ne fait pas " "partie du châssis virtuel {virtual_chassis}." -#: dcim/models/device_components.py:856 +#: netbox/dcim/models/device_components.py:856 msgid "Virtual interfaces cannot have a PoE mode." msgstr "Les interfaces virtuelles ne peuvent pas avoir de mode PoE." -#: dcim/models/device_components.py:860 +#: netbox/dcim/models/device_components.py:860 msgid "Virtual interfaces cannot have a PoE type." msgstr "Les interfaces virtuelles ne peuvent pas avoir de type PoE." -#: dcim/models/device_components.py:866 +#: netbox/dcim/models/device_components.py:866 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." -#: dcim/models/device_components.py:873 +#: netbox/dcim/models/device_components.py:873 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." -#: dcim/models/device_components.py:875 +#: netbox/dcim/models/device_components.py:875 msgid "Channel may be set only on wireless interfaces." msgstr "Le canal ne peut être défini que sur les interfaces sans fil." -#: dcim/models/device_components.py:881 +#: netbox/dcim/models/device_components.py:881 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." -#: dcim/models/device_components.py:885 +#: netbox/dcim/models/device_components.py:885 msgid "Cannot specify custom frequency with channel selected." msgstr "" "Impossible de spécifier une fréquence personnalisée avec le canal " "sélectionné." -#: dcim/models/device_components.py:891 +#: netbox/dcim/models/device_components.py:891 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." -#: dcim/models/device_components.py:893 +#: netbox/dcim/models/device_components.py:893 msgid "Cannot specify custom width with channel selected." msgstr "" "Impossible de spécifier une largeur personnalisée avec le canal sélectionné." -#: dcim/models/device_components.py:901 +#: netbox/dcim/models/device_components.py:901 #, 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 "" -"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." -#: dcim/models/device_components.py:990 +#: netbox/dcim/models/device_components.py:990 msgid "Mapped position on corresponding rear port" msgstr "Position cartographiée sur le port arrière correspondant" -#: dcim/models/device_components.py:1006 +#: netbox/dcim/models/device_components.py:1006 msgid "front port" msgstr "port avant" -#: dcim/models/device_components.py:1007 +#: netbox/dcim/models/device_components.py:1007 msgid "front ports" msgstr "ports avant" -#: dcim/models/device_components.py:1021 +#: netbox/dcim/models/device_components.py:1021 #, 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" -#: dcim/models/device_components.py:1029 +#: netbox/dcim/models/device_components.py:1029 #, python-brace-format msgid "" "Invalid rear port position ({rear_port_position}): Rear port {name} has only" @@ -5341,19 +5817,19 @@ msgstr "" "Position du port arrière non valide ({rear_port_position}) : Port arrière " "{name} n'a que {positions} positions." -#: dcim/models/device_components.py:1059 +#: netbox/dcim/models/device_components.py:1059 msgid "Number of front ports which may be mapped" msgstr "Nombre de ports frontaux pouvant être mappés" -#: dcim/models/device_components.py:1064 +#: netbox/dcim/models/device_components.py:1064 msgid "rear port" msgstr "port arrière" -#: dcim/models/device_components.py:1065 +#: netbox/dcim/models/device_components.py:1065 msgid "rear ports" msgstr "ports arrière" -#: dcim/models/device_components.py:1079 +#: netbox/dcim/models/device_components.py:1079 #, python-brace-format msgid "" "The number of positions cannot be less than the number of mapped front ports" @@ -5362,39 +5838,40 @@ msgstr "" "Le nombre de positions ne peut pas être inférieur au nombre de ports " "frontaux mappés ({frontport_count})" -#: dcim/models/device_components.py:1120 +#: netbox/dcim/models/device_components.py:1120 msgid "module bay" msgstr "baie modulaire" -#: dcim/models/device_components.py:1121 +#: netbox/dcim/models/device_components.py:1121 msgid "module bays" msgstr "baies de modules" -#: dcim/models/device_components.py:1138 dcim/models/devices.py:1224 +#: netbox/dcim/models/device_components.py:1138 +#: netbox/dcim/models/devices.py:1224 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é." -#: dcim/models/device_components.py:1164 +#: netbox/dcim/models/device_components.py:1164 msgid "device bay" msgstr "baie pour appareils" -#: dcim/models/device_components.py:1165 +#: netbox/dcim/models/device_components.py:1165 msgid "device bays" msgstr "baies pour appareils" -#: dcim/models/device_components.py:1175 +#: netbox/dcim/models/device_components.py:1175 #, 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." -#: dcim/models/device_components.py:1181 +#: netbox/dcim/models/device_components.py:1181 msgid "Cannot install a device into itself." msgstr "Impossible d'installer un appareil sur lui-même." -#: dcim/models/device_components.py:1189 +#: netbox/dcim/models/device_components.py:1189 #, python-brace-format msgid "" "Cannot install the specified device; device is already installed in {bay}." @@ -5402,114 +5879,116 @@ msgstr "" "Impossible d'installer le périphérique spécifié ; le périphérique est déjà " "installé dans {bay}." -#: dcim/models/device_components.py:1210 +#: netbox/dcim/models/device_components.py:1210 msgid "inventory item role" msgstr "rôle des articles d'inventaire" -#: dcim/models/device_components.py:1211 +#: netbox/dcim/models/device_components.py:1211 msgid "inventory item roles" msgstr "rôles des articles d'inventaire" -#: dcim/models/device_components.py:1268 dcim/models/devices.py:607 -#: dcim/models/devices.py:1181 dcim/models/racks.py:313 -#: virtualization/models/virtualmachines.py:131 +#: 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 msgid "serial number" msgstr "numéro de série" -#: dcim/models/device_components.py:1276 dcim/models/devices.py:615 -#: dcim/models/devices.py:1188 dcim/models/racks.py:320 +#: 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 msgid "asset tag" msgstr "étiquette d'actif" -#: dcim/models/device_components.py:1277 +#: netbox/dcim/models/device_components.py:1277 msgid "A unique tag used to identify this item" msgstr "Une étiquette unique utilisée pour identifier cet article" -#: dcim/models/device_components.py:1280 +#: netbox/dcim/models/device_components.py:1280 msgid "discovered" msgstr "découvert" -#: dcim/models/device_components.py:1282 +#: netbox/dcim/models/device_components.py:1282 msgid "This item was automatically discovered" msgstr "Cet objet a été découvert automatiquement" -#: dcim/models/device_components.py:1300 +#: netbox/dcim/models/device_components.py:1300 msgid "inventory item" msgstr "article d'inventaire" -#: dcim/models/device_components.py:1301 +#: netbox/dcim/models/device_components.py:1301 msgid "inventory items" msgstr "articles d'inventaire" -#: dcim/models/device_components.py:1312 +#: netbox/dcim/models/device_components.py:1312 msgid "Cannot assign self as parent." msgstr "Impossible de s'attribuer le statut de parent." -#: dcim/models/device_components.py:1320 +#: netbox/dcim/models/device_components.py:1320 msgid "Parent inventory item does not belong to the same device." msgstr "L'article d'inventaire parent n'appartient pas au même appareil." -#: dcim/models/device_components.py:1326 +#: netbox/dcim/models/device_components.py:1326 msgid "Cannot move an inventory item with dependent children" msgstr "Impossible de déplacer un article en stock avec des enfants à charge" -#: dcim/models/device_components.py:1334 +#: netbox/dcim/models/device_components.py:1334 msgid "Cannot assign inventory item to component on another device" msgstr "" "Impossible d'attribuer un article d'inventaire à un composant sur un autre " "appareil" -#: dcim/models/devices.py:54 +#: netbox/dcim/models/devices.py:54 msgid "manufacturer" msgstr "fabricant" -#: dcim/models/devices.py:55 +#: netbox/dcim/models/devices.py:55 msgid "manufacturers" msgstr "fabricants" -#: dcim/models/devices.py:82 dcim/models/devices.py:382 -#: dcim/models/racks.py:133 +#: netbox/dcim/models/devices.py:82 netbox/dcim/models/devices.py:382 +#: netbox/dcim/models/racks.py:133 msgid "model" msgstr "modèle" -#: dcim/models/devices.py:95 +#: netbox/dcim/models/devices.py:95 msgid "default platform" msgstr "plateforme par défaut" -#: dcim/models/devices.py:98 dcim/models/devices.py:386 +#: netbox/dcim/models/devices.py:98 netbox/dcim/models/devices.py:386 msgid "part number" msgstr "numéro de pièce" -#: dcim/models/devices.py:101 dcim/models/devices.py:389 +#: netbox/dcim/models/devices.py:101 netbox/dcim/models/devices.py:389 msgid "Discrete part number (optional)" msgstr "Numéro de pièce discret (facultatif)" -#: dcim/models/devices.py:107 dcim/models/racks.py:54 +#: netbox/dcim/models/devices.py:107 netbox/dcim/models/racks.py:54 msgid "height (U)" msgstr "hauteur (U)" -#: dcim/models/devices.py:111 +#: netbox/dcim/models/devices.py:111 msgid "exclude from utilization" msgstr "exclure de l'utilisation" -#: dcim/models/devices.py:112 +#: netbox/dcim/models/devices.py:112 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." -#: dcim/models/devices.py:116 +#: netbox/dcim/models/devices.py:116 msgid "is full depth" msgstr "est en pleine profondeur" -#: dcim/models/devices.py:117 +#: netbox/dcim/models/devices.py:117 msgid "Device consumes both front and rear rack faces." msgstr "L'appareil consomme à la fois les faces avant et arrière de la baie." -#: dcim/models/devices.py:123 +#: netbox/dcim/models/devices.py:123 msgid "parent/child status" msgstr "statut parent/enfant" -#: dcim/models/devices.py:124 +#: netbox/dcim/models/devices.py:124 msgid "" "Parent devices house child devices in device bays. Leave blank if this " "device type is neither a parent nor a child." @@ -5518,24 +5997,24 @@ msgstr "" "pour appareils. Laissez ce champ vide si ce type d'appareil n'est ni un " "parent ni un enfant." -#: dcim/models/devices.py:128 dcim/models/devices.py:392 -#: dcim/models/devices.py:659 dcim/models/racks.py:324 +#: netbox/dcim/models/devices.py:128 netbox/dcim/models/devices.py:392 +#: netbox/dcim/models/devices.py:659 netbox/dcim/models/racks.py:324 msgid "airflow" msgstr "débit d'air" -#: dcim/models/devices.py:204 +#: netbox/dcim/models/devices.py:204 msgid "device type" msgstr "type d'appareil" -#: dcim/models/devices.py:205 +#: netbox/dcim/models/devices.py:205 msgid "device types" msgstr "types d'appareils" -#: dcim/models/devices.py:290 +#: netbox/dcim/models/devices.py:290 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." -#: dcim/models/devices.py:307 +#: netbox/dcim/models/devices.py:307 #, python-brace-format msgid "" "Device {device} in rack {rack} does not have sufficient space to accommodate" @@ -5544,7 +6023,7 @@ msgstr "" "Appareil {device} en baie {rack} ne dispose pas de suffisamment d'espace " "pour accueillir une hauteur de {height}U" -#: dcim/models/devices.py:322 +#: netbox/dcim/models/devices.py:322 #, python-brace-format msgid "" "Unable to set 0U height: Found {racked_instance_count} " @@ -5554,7 +6033,7 @@ msgstr "" "href=\"{url}\">{racked_instance_count} les instances déjà monté dans des" " baies." -#: dcim/models/devices.py:331 +#: netbox/dcim/models/devices.py:331 msgid "" "Must delete all device bay templates associated with this device before " "declassifying it as a parent device." @@ -5562,156 +6041,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." -#: dcim/models/devices.py:337 +#: netbox/dcim/models/devices.py:337 msgid "Child device types must be 0U." msgstr "Les types d'appareils pour enfants doivent être 0U." -#: dcim/models/devices.py:411 +#: netbox/dcim/models/devices.py:411 msgid "module type" msgstr "type de module" -#: dcim/models/devices.py:412 +#: netbox/dcim/models/devices.py:412 msgid "module types" msgstr "types de modules" -#: dcim/models/devices.py:485 +#: netbox/dcim/models/devices.py:485 msgid "Virtual machines may be assigned to this role" msgstr "Des machines virtuelles peuvent être affectées à ce rôle" -#: dcim/models/devices.py:497 +#: netbox/dcim/models/devices.py:497 msgid "device role" msgstr "rôle de l'appareil" -#: dcim/models/devices.py:498 +#: netbox/dcim/models/devices.py:498 msgid "device roles" msgstr "rôles des appareils" -#: dcim/models/devices.py:515 +#: netbox/dcim/models/devices.py:515 msgid "Optionally limit this platform to devices of a certain manufacturer" msgstr "" "Limitez éventuellement cette plate-forme aux appareils d'un certain " "fabricant" -#: dcim/models/devices.py:527 +#: netbox/dcim/models/devices.py:527 msgid "platform" msgstr "plateforme" -#: dcim/models/devices.py:528 +#: netbox/dcim/models/devices.py:528 msgid "platforms" msgstr "plateformes" -#: dcim/models/devices.py:576 +#: netbox/dcim/models/devices.py:576 msgid "The function this device serves" msgstr "La fonction de cet appareil" -#: dcim/models/devices.py:608 +#: netbox/dcim/models/devices.py:608 msgid "Chassis serial number, assigned by the manufacturer" msgstr "Numéro de série du châssis attribué par le fabricant" -#: dcim/models/devices.py:616 dcim/models/devices.py:1189 +#: netbox/dcim/models/devices.py:616 netbox/dcim/models/devices.py:1189 msgid "A unique tag used to identify this device" msgstr "Un tag unique utilisé pour identifier cet appareil" -#: dcim/models/devices.py:643 +#: netbox/dcim/models/devices.py:643 msgid "position (U)" msgstr "position (U)" -#: dcim/models/devices.py:650 +#: netbox/dcim/models/devices.py:650 msgid "rack face" msgstr "face de la baie" -#: dcim/models/devices.py:670 dcim/models/devices.py:1415 -#: virtualization/models/virtualmachines.py:100 +#: netbox/dcim/models/devices.py:670 netbox/dcim/models/devices.py:1420 +#: netbox/virtualization/models/virtualmachines.py:100 msgid "primary IPv4" msgstr "IPv4 principal" -#: dcim/models/devices.py:678 dcim/models/devices.py:1423 -#: virtualization/models/virtualmachines.py:108 +#: netbox/dcim/models/devices.py:678 netbox/dcim/models/devices.py:1428 +#: netbox/virtualization/models/virtualmachines.py:108 msgid "primary IPv6" msgstr "IPv6 principal" -#: dcim/models/devices.py:686 +#: netbox/dcim/models/devices.py:686 msgid "out-of-band IP" msgstr "IP hors bande" -#: dcim/models/devices.py:703 +#: netbox/dcim/models/devices.py:703 msgid "VC position" msgstr "Position en VC" -#: dcim/models/devices.py:706 +#: netbox/dcim/models/devices.py:706 msgid "Virtual chassis position" msgstr "Position virtuelle du châssis" -#: dcim/models/devices.py:709 +#: netbox/dcim/models/devices.py:709 msgid "VC priority" msgstr "Priorité VC" -#: dcim/models/devices.py:713 +#: netbox/dcim/models/devices.py:713 msgid "Virtual chassis master election priority" msgstr "Priorité d'élection principale du châssis virtuel" -#: dcim/models/devices.py:716 dcim/models/sites.py:207 +#: netbox/dcim/models/devices.py:716 netbox/dcim/models/sites.py:207 msgid "latitude" msgstr "latitude" -#: dcim/models/devices.py:721 dcim/models/devices.py:729 -#: dcim/models/sites.py:212 dcim/models/sites.py:220 +#: netbox/dcim/models/devices.py:721 netbox/dcim/models/devices.py:729 +#: netbox/dcim/models/sites.py:212 netbox/dcim/models/sites.py:220 msgid "GPS coordinate in decimal format (xx.yyyyyy)" msgstr "Coordonnées GPS au format décimal (xx.yyyyyy)" -#: dcim/models/devices.py:724 dcim/models/sites.py:215 +#: netbox/dcim/models/devices.py:724 netbox/dcim/models/sites.py:215 msgid "longitude" msgstr "longitude" -#: dcim/models/devices.py:797 +#: netbox/dcim/models/devices.py:797 msgid "Device name must be unique per site." msgstr "Le nom de l'appareil doit être unique par site." -#: dcim/models/devices.py:808 ipam/models/services.py:75 +#: netbox/dcim/models/devices.py:808 netbox/ipam/models/services.py:75 msgid "device" msgstr "appareil" -#: dcim/models/devices.py:809 +#: netbox/dcim/models/devices.py:809 msgid "devices" msgstr "appareils" -#: dcim/models/devices.py:835 +#: netbox/dcim/models/devices.py:835 #, python-brace-format msgid "Rack {rack} does not belong to site {site}." msgstr "La baie {rack} n'appartient pas au site {site}." -#: dcim/models/devices.py:840 +#: netbox/dcim/models/devices.py:840 #, python-brace-format msgid "Location {location} does not belong to site {site}." msgstr "Emplacement {location} n'appartient pas au site {site}." -#: dcim/models/devices.py:846 +#: netbox/dcim/models/devices.py:846 #, python-brace-format msgid "Rack {rack} does not belong to location {location}." msgstr "La baie {rack} n'appartient pas au lieu {location}." -#: dcim/models/devices.py:853 +#: netbox/dcim/models/devices.py:853 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." -#: dcim/models/devices.py:857 +#: netbox/dcim/models/devices.py:857 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." -#: dcim/models/devices.py:863 +#: netbox/dcim/models/devices.py:863 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." -#: dcim/models/devices.py:867 +#: netbox/dcim/models/devices.py:867 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." -#: dcim/models/devices.py:875 +#: netbox/dcim/models/devices.py:875 #, python-brace-format msgid "" "A 0U device type ({device_type}) cannot be assigned to a rack position." @@ -5719,7 +6198,7 @@ msgstr "" "Un appareil de type 0U ({device_type}) ne peut pas être attribué à une " "position en baie." -#: dcim/models/devices.py:886 +#: netbox/dcim/models/devices.py:886 msgid "" "Child device types cannot be assigned to a rack face. This is an attribute " "of the parent device." @@ -5727,7 +6206,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." -#: dcim/models/devices.py:893 +#: netbox/dcim/models/devices.py:893 msgid "" "Child device types cannot be assigned to a rack position. This is an " "attribute of the parent device." @@ -5735,7 +6214,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." -#: dcim/models/devices.py:907 +#: netbox/dcim/models/devices.py:907 #, python-brace-format msgid "" "U{position} is already occupied or does not have sufficient space to " @@ -5744,22 +6223,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)" -#: dcim/models/devices.py:922 +#: netbox/dcim/models/devices.py:922 #, python-brace-format msgid "{ip} is not an IPv4 address." msgstr "{ip} n'est pas une adresse IPv4." -#: dcim/models/devices.py:931 dcim/models/devices.py:946 +#: netbox/dcim/models/devices.py:931 netbox/dcim/models/devices.py:946 #, 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." -#: dcim/models/devices.py:937 +#: netbox/dcim/models/devices.py:937 #, python-brace-format msgid "{ip} is not an IPv6 address." msgstr "{ip} n'est pas une adresse IPv6." -#: dcim/models/devices.py:964 +#: netbox/dcim/models/devices.py:964 #, python-brace-format msgid "" "The assigned platform is limited to {platform_manufacturer} device types, " @@ -5769,17 +6248,17 @@ msgstr "" "d'appareils, mais le type de cet appareil appartient à " "{devicetype_manufacturer}." -#: dcim/models/devices.py:975 +#: netbox/dcim/models/devices.py:975 #, python-brace-format msgid "The assigned cluster belongs to a different site ({site})" msgstr "Le cluster attribué appartient à un autre site ({site})" -#: dcim/models/devices.py:983 +#: netbox/dcim/models/devices.py:983 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." -#: dcim/models/devices.py:988 +#: netbox/dcim/models/devices.py:988 #, python-brace-format msgid "" "Device cannot be removed from virtual chassis {virtual_chassis} because it " @@ -5788,15 +6267,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." -#: dcim/models/devices.py:1196 +#: netbox/dcim/models/devices.py:1196 msgid "module" msgstr "module" -#: dcim/models/devices.py:1197 +#: netbox/dcim/models/devices.py:1197 msgid "modules" msgstr "modules" -#: dcim/models/devices.py:1213 +#: netbox/dcim/models/devices.py:1213 #, python-brace-format msgid "" "Module must be installed within a module bay belonging to the assigned " @@ -5805,22 +6284,22 @@ msgstr "" "Le module doit être installé dans une baie de modules appartenant au " "périphérique attribué ({device})." -#: dcim/models/devices.py:1334 +#: netbox/dcim/models/devices.py:1339 msgid "domain" msgstr "domaine" -#: dcim/models/devices.py:1347 dcim/models/devices.py:1348 +#: netbox/dcim/models/devices.py:1352 netbox/dcim/models/devices.py:1353 msgid "virtual chassis" msgstr "châssis virtuel" -#: dcim/models/devices.py:1363 +#: netbox/dcim/models/devices.py:1368 #, 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." -#: dcim/models/devices.py:1379 +#: netbox/dcim/models/devices.py:1384 #, python-brace-format msgid "" "Unable to delete virtual chassis {self}. There are member interfaces which " @@ -5829,62 +6308,62 @@ msgstr "" "Impossible de supprimer le châssis virtuel {self}. Il existe des interfaces " "membres qui forment des interfaces LAG inter-châssis." -#: dcim/models/devices.py:1404 vpn/models/l2vpn.py:37 +#: netbox/dcim/models/devices.py:1409 netbox/vpn/models/l2vpn.py:37 msgid "identifier" msgstr "identificateur" -#: dcim/models/devices.py:1405 +#: netbox/dcim/models/devices.py:1410 msgid "Numeric identifier unique to the parent device" msgstr "Identifiant numérique propre à l'appareil parent" -#: dcim/models/devices.py:1433 extras/models/customfields.py:225 -#: extras/models/models.py:107 extras/models/models.py:694 -#: netbox/models/__init__.py:115 +#: 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:115 msgid "comments" msgstr "commentaires" -#: dcim/models/devices.py:1449 +#: netbox/dcim/models/devices.py:1454 msgid "virtual device context" msgstr "contexte du périphérique virtuel" -#: dcim/models/devices.py:1450 +#: netbox/dcim/models/devices.py:1455 msgid "virtual device contexts" msgstr "contextes de périphériques virtuels" -#: dcim/models/devices.py:1482 +#: netbox/dcim/models/devices.py:1487 #, python-brace-format msgid "{ip} is not an IPv{family} address." msgstr "{ip} n'est pas un IPV{family} adresse." -#: dcim/models/devices.py:1488 +#: netbox/dcim/models/devices.py:1493 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é." -#: dcim/models/mixins.py:15 extras/models/configs.py:41 -#: extras/models/models.py:313 extras/models/models.py:522 -#: extras/models/search.py:48 ipam/models/ip.py:194 +#: netbox/dcim/models/mixins.py:15 netbox/extras/models/configs.py:41 +#: netbox/extras/models/models.py:313 netbox/extras/models/models.py:522 +#: netbox/extras/models/search.py:48 netbox/ipam/models/ip.py:194 msgid "weight" msgstr "poids" -#: dcim/models/mixins.py:22 +#: netbox/dcim/models/mixins.py:22 msgid "weight unit" msgstr "unité de poids" -#: dcim/models/mixins.py:51 +#: 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" -#: dcim/models/power.py:55 +#: netbox/dcim/models/power.py:55 msgid "power panel" msgstr "panneau d'alimentation" -#: dcim/models/power.py:56 +#: netbox/dcim/models/power.py:56 msgid "power panels" msgstr "panneaux d'alimentation" -#: dcim/models/power.py:70 +#: netbox/dcim/models/power.py:70 #, python-brace-format msgid "" "Location {location} ({location_site}) is in a different site than {site}" @@ -5892,43 +6371,43 @@ msgstr "" "Emplacement {location} ({location_site}) se trouve sur un site différent de " "{site}" -#: dcim/models/power.py:108 +#: netbox/dcim/models/power.py:108 msgid "supply" msgstr "fourniture" -#: dcim/models/power.py:114 +#: netbox/dcim/models/power.py:114 msgid "phase" msgstr "phase" -#: dcim/models/power.py:120 +#: netbox/dcim/models/power.py:120 msgid "voltage" msgstr "tension" -#: dcim/models/power.py:125 +#: netbox/dcim/models/power.py:125 msgid "amperage" msgstr "ampérage" -#: dcim/models/power.py:130 +#: netbox/dcim/models/power.py:130 msgid "max utilization" msgstr "utilisation maximale" -#: dcim/models/power.py:133 +#: netbox/dcim/models/power.py:133 msgid "Maximum permissible draw (percentage)" msgstr "Tirage maximum autorisé (pourcentage)" -#: dcim/models/power.py:136 +#: netbox/dcim/models/power.py:136 msgid "available power" msgstr "puissance disponible" -#: dcim/models/power.py:164 +#: netbox/dcim/models/power.py:164 msgid "power feed" msgstr "alimentation" -#: dcim/models/power.py:165 +#: netbox/dcim/models/power.py:165 msgid "power feeds" msgstr "alimentations" -#: dcim/models/power.py:179 +#: netbox/dcim/models/power.py:179 #, python-brace-format msgid "" "Rack {rack} ({rack_site}) and power panel {powerpanel} ({powerpanel_site}) " @@ -5937,65 +6416,65 @@ msgstr "" "Baie {rack} ({rack_site}) et panneau d'alimentation {powerpanel} " "({powerpanel_site}) se trouvent sur des sites différents." -#: dcim/models/power.py:190 +#: netbox/dcim/models/power.py:190 msgid "Voltage cannot be negative for AC supply" msgstr "" "La tension ne peut pas être négative pour l'alimentation en courant " "alternatif" -#: dcim/models/racks.py:47 +#: netbox/dcim/models/racks.py:47 msgid "width" msgstr "largeur" -#: dcim/models/racks.py:48 +#: netbox/dcim/models/racks.py:48 msgid "Rail-to-rail width" msgstr "Largeur rail à rail" -#: dcim/models/racks.py:56 +#: netbox/dcim/models/racks.py:56 msgid "Height in rack units" msgstr "Hauteur en U de la baie" -#: dcim/models/racks.py:60 +#: netbox/dcim/models/racks.py:60 msgid "starting unit" msgstr "unité de départ" -#: dcim/models/racks.py:62 +#: netbox/dcim/models/racks.py:62 msgid "Starting unit for rack" msgstr "Unité de départ pour baie" -#: dcim/models/racks.py:66 +#: netbox/dcim/models/racks.py:66 msgid "descending units" msgstr "unités décroissantes" -#: dcim/models/racks.py:67 +#: netbox/dcim/models/racks.py:67 msgid "Units are numbered top-to-bottom" msgstr "Les unités sont numérotées de haut en bas" -#: dcim/models/racks.py:72 +#: netbox/dcim/models/racks.py:72 msgid "outer width" msgstr "largeur extérieure" -#: dcim/models/racks.py:75 +#: netbox/dcim/models/racks.py:75 msgid "Outer dimension of rack (width)" msgstr "Dimension extérieure de la baie (largeur)" -#: dcim/models/racks.py:78 +#: netbox/dcim/models/racks.py:78 msgid "outer depth" msgstr "profondeur extérieure" -#: dcim/models/racks.py:81 +#: netbox/dcim/models/racks.py:81 msgid "Outer dimension of rack (depth)" msgstr "Dimension extérieure de la baie (profondeur)" -#: dcim/models/racks.py:84 +#: netbox/dcim/models/racks.py:84 msgid "outer unit" msgstr "unité extérieure" -#: dcim/models/racks.py:90 +#: netbox/dcim/models/racks.py:90 msgid "mounting depth" msgstr "profondeur de montage" -#: dcim/models/racks.py:94 +#: netbox/dcim/models/racks.py:94 msgid "" "Maximum depth of a mounted device, in millimeters. For four-post racks, this" " is the distance between the front and rear rails." @@ -6003,75 +6482,76 @@ msgstr "" "Profondeur maximale d'un appareil monté, en millimètres. Pour les supports à" " quatre montants, il s'agit de la distance entre les rails avant et arrière." -#: dcim/models/racks.py:102 +#: netbox/dcim/models/racks.py:102 msgid "max weight" msgstr "poids maximum" -#: dcim/models/racks.py:105 +#: netbox/dcim/models/racks.py:105 msgid "Maximum load capacity for the rack" msgstr "Capacité de charge maximale de la baie" -#: dcim/models/racks.py:125 dcim/models/racks.py:252 +#: netbox/dcim/models/racks.py:125 netbox/dcim/models/racks.py:252 msgid "form factor" msgstr "facteur de forme" -#: dcim/models/racks.py:162 +#: netbox/dcim/models/racks.py:162 msgid "rack type" -msgstr "type de rack" +msgstr "type de baie" -#: dcim/models/racks.py:163 +#: netbox/dcim/models/racks.py:163 msgid "rack types" -msgstr "types de rayonnages" +msgstr "types de baies" -#: dcim/models/racks.py:180 dcim/models/racks.py:379 +#: netbox/dcim/models/racks.py:180 netbox/dcim/models/racks.py:379 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" -#: dcim/models/racks.py:184 dcim/models/racks.py:383 +#: netbox/dcim/models/racks.py:184 netbox/dcim/models/racks.py:383 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" -#: dcim/models/racks.py:230 +#: netbox/dcim/models/racks.py:230 msgid "rack role" msgstr "rôle de la baie" -#: dcim/models/racks.py:231 +#: netbox/dcim/models/racks.py:231 msgid "rack roles" msgstr "rôles de la baie" -#: dcim/models/racks.py:274 +#: netbox/dcim/models/racks.py:274 msgid "facility ID" msgstr "ID de l'établissement" -#: dcim/models/racks.py:275 +#: netbox/dcim/models/racks.py:275 msgid "Locally-assigned identifier" msgstr "Identifiant attribué localement" -#: dcim/models/racks.py:308 ipam/forms/bulk_import.py:201 -#: ipam/forms/bulk_import.py:266 ipam/forms/bulk_import.py:301 -#: ipam/forms/bulk_import.py:459 virtualization/forms/bulk_import.py:112 +#: 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 msgid "Functional role" msgstr "Rôle fonctionnel" -#: dcim/models/racks.py:321 +#: netbox/dcim/models/racks.py:321 msgid "A unique tag used to identify this rack" msgstr "Une étiquette unique utilisée pour identifier cette baie" -#: dcim/models/racks.py:359 +#: netbox/dcim/models/racks.py:359 msgid "rack" msgstr "baie" -#: dcim/models/racks.py:360 +#: netbox/dcim/models/racks.py:360 msgid "racks" msgstr "baies" -#: dcim/models/racks.py:375 +#: netbox/dcim/models/racks.py:375 #, python-brace-format msgid "Assigned location must belong to parent site ({site})." msgstr "L'emplacement attribué doit appartenir au site parent ({site})." -#: dcim/models/racks.py:393 +#: netbox/dcim/models/racks.py:393 #, python-brace-format msgid "" "Rack must be at least {min_height}U tall to house currently installed " @@ -6080,7 +6560,7 @@ msgstr "" "La baie doit être au moins {min_height} pour héberger les appareils " "actuellement installés." -#: dcim/models/racks.py:400 +#: netbox/dcim/models/racks.py:400 #, python-brace-format msgid "" "Rack unit numbering must begin at {position} or less to house currently " @@ -6089,895 +6569,957 @@ msgstr "" "La numérotation des unités de baie doit commencer à {position} ou moins pour" " héberger les appareils actuellement installés." -#: dcim/models/racks.py:408 +#: netbox/dcim/models/racks.py:408 #, python-brace-format msgid "Location must be from the same site, {site}." msgstr "L'emplacement doit provenir du même site, {site}." -#: dcim/models/racks.py:670 +#: netbox/dcim/models/racks.py:670 msgid "units" msgstr "des unités" -#: dcim/models/racks.py:696 +#: netbox/dcim/models/racks.py:696 msgid "rack reservation" msgstr "réservation de baie" -#: dcim/models/racks.py:697 +#: netbox/dcim/models/racks.py:697 msgid "rack reservations" msgstr "réservations de baies" -#: dcim/models/racks.py:714 +#: netbox/dcim/models/racks.py:714 #, 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}" -#: dcim/models/racks.py:727 +#: netbox/dcim/models/racks.py:727 #, 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}" -#: dcim/models/sites.py:49 +#: netbox/dcim/models/sites.py:49 msgid "A top-level region with this name already exists." msgstr "Une région de niveau supérieur portant ce nom existe déjà." -#: dcim/models/sites.py:59 +#: netbox/dcim/models/sites.py:59 msgid "A top-level region with this slug already exists." msgstr "Une région de niveau supérieur contenant ce slug existe déjà." -#: dcim/models/sites.py:62 +#: netbox/dcim/models/sites.py:62 msgid "region" msgstr "région" -#: dcim/models/sites.py:63 +#: netbox/dcim/models/sites.py:63 msgid "regions" msgstr "régions" -#: dcim/models/sites.py:102 +#: netbox/dcim/models/sites.py:102 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à." -#: dcim/models/sites.py:112 +#: netbox/dcim/models/sites.py:112 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à." -#: dcim/models/sites.py:115 +#: netbox/dcim/models/sites.py:115 msgid "site group" msgstr "groupe de sites" -#: dcim/models/sites.py:116 +#: netbox/dcim/models/sites.py:116 msgid "site groups" msgstr "groupes de sites" -#: dcim/models/sites.py:141 +#: netbox/dcim/models/sites.py:141 msgid "Full name of the site" msgstr "Nom complet du site" -#: dcim/models/sites.py:181 dcim/models/sites.py:279 +#: netbox/dcim/models/sites.py:181 netbox/dcim/models/sites.py:279 msgid "facility" msgstr "installation" -#: dcim/models/sites.py:184 dcim/models/sites.py:282 +#: netbox/dcim/models/sites.py:184 netbox/dcim/models/sites.py:282 msgid "Local facility ID or description" msgstr "Identifiant ou description de l'établissement local" -#: dcim/models/sites.py:195 +#: netbox/dcim/models/sites.py:195 msgid "physical address" msgstr "adresse physique" -#: dcim/models/sites.py:198 +#: netbox/dcim/models/sites.py:198 msgid "Physical location of the building" msgstr "Emplacement physique du bâtiment" -#: dcim/models/sites.py:201 +#: netbox/dcim/models/sites.py:201 msgid "shipping address" msgstr "adresse de livraison" -#: dcim/models/sites.py:204 +#: netbox/dcim/models/sites.py:204 msgid "If different from the physical address" msgstr "Si elle est différente de l'adresse physique" -#: dcim/models/sites.py:238 +#: netbox/dcim/models/sites.py:238 msgid "site" msgstr "site" -#: dcim/models/sites.py:239 +#: netbox/dcim/models/sites.py:239 msgid "sites" msgstr "sites" -#: dcim/models/sites.py:309 +#: netbox/dcim/models/sites.py:309 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é." -#: dcim/models/sites.py:319 +#: netbox/dcim/models/sites.py:319 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é." -#: dcim/models/sites.py:322 +#: netbox/dcim/models/sites.py:322 msgid "location" msgstr "emplacement" -#: dcim/models/sites.py:323 +#: netbox/dcim/models/sites.py:323 msgid "locations" msgstr "les lieux" -#: dcim/models/sites.py:337 +#: netbox/dcim/models/sites.py:337 #, python-brace-format msgid "Parent location ({parent}) must belong to the same site ({site})." msgstr "" "Lieu de résidence du parent ({parent}) doit appartenir au même site " "({site})." -#: dcim/tables/cables.py:55 +#: netbox/dcim/tables/cables.py:55 msgid "Termination A" msgstr "Terminaison A" -#: dcim/tables/cables.py:60 +#: netbox/dcim/tables/cables.py:60 msgid "Termination B" msgstr "Terminaison B" -#: dcim/tables/cables.py:66 wireless/tables/wirelesslink.py:23 +#: netbox/dcim/tables/cables.py:66 netbox/wireless/tables/wirelesslink.py:23 msgid "Device A" msgstr "Appareil A" -#: dcim/tables/cables.py:72 wireless/tables/wirelesslink.py:32 +#: netbox/dcim/tables/cables.py:72 netbox/wireless/tables/wirelesslink.py:32 msgid "Device B" msgstr "Appareil B" -#: dcim/tables/cables.py:78 +#: netbox/dcim/tables/cables.py:78 msgid "Location A" msgstr "Lieu A" -#: dcim/tables/cables.py:84 +#: netbox/dcim/tables/cables.py:84 msgid "Location B" msgstr "Lieu B" -#: dcim/tables/cables.py:90 +#: netbox/dcim/tables/cables.py:90 msgid "Rack A" msgstr "Baie A" -#: dcim/tables/cables.py:96 +#: netbox/dcim/tables/cables.py:96 msgid "Rack B" msgstr "Baie B" -#: dcim/tables/cables.py:102 +#: netbox/dcim/tables/cables.py:102 msgid "Site A" msgstr "Site A" -#: dcim/tables/cables.py:108 +#: netbox/dcim/tables/cables.py:108 msgid "Site B" msgstr "Site B" -#: dcim/tables/connections.py:31 dcim/tables/connections.py:50 -#: dcim/tables/connections.py:71 -#: templates/dcim/inc/connection_endpoints.html:16 +#: netbox/dcim/tables/connections.py:31 netbox/dcim/tables/connections.py:50 +#: netbox/dcim/tables/connections.py:71 +#: netbox/templates/dcim/inc/connection_endpoints.html:16 msgid "Reachable" msgstr "Joignable" -#: dcim/tables/devices.py:58 dcim/tables/devices.py:106 -#: dcim/tables/racks.py:150 dcim/tables/sites.py:105 dcim/tables/sites.py:148 -#: extras/tables/tables.py:545 netbox/navigation/menu.py:69 -#: netbox/navigation/menu.py:73 netbox/navigation/menu.py:75 -#: virtualization/forms/model_forms.py:122 -#: virtualization/tables/clusters.py:83 virtualization/views.py:206 +#: 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/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 msgid "Devices" msgstr "Appareils" -#: dcim/tables/devices.py:63 dcim/tables/devices.py:111 -#: virtualization/tables/clusters.py:88 +#: netbox/dcim/tables/devices.py:63 netbox/dcim/tables/devices.py:111 +#: netbox/virtualization/tables/clusters.py:88 msgid "VMs" msgstr "machines virtuelles" -#: dcim/tables/devices.py:100 dcim/tables/devices.py:216 -#: extras/forms/model_forms.py:630 templates/dcim/device.html:112 -#: templates/dcim/device/render_config.html:11 -#: templates/dcim/device/render_config.html:14 -#: templates/dcim/devicerole.html:44 templates/dcim/platform.html:41 -#: templates/extras/configtemplate.html:10 -#: templates/virtualization/virtualmachine.html:48 -#: templates/virtualization/virtualmachine/render_config.html:11 -#: templates/virtualization/virtualmachine/render_config.html:14 -#: virtualization/tables/virtualmachines.py:107 +#: netbox/dcim/tables/devices.py:100 netbox/dcim/tables/devices.py:216 +#: 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/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 msgid "Config Template" msgstr "Modèle de configuration" -#: dcim/tables/devices.py:150 templates/dcim/sitegroup.html:26 +#: netbox/dcim/tables/devices.py:150 netbox/templates/dcim/sitegroup.html:26 msgid "Site Group" msgstr "Groupe de sites" -#: dcim/tables/devices.py:187 dcim/tables/devices.py:1068 -#: ipam/forms/bulk_import.py:503 ipam/forms/model_forms.py:306 -#: ipam/forms/model_forms.py:315 ipam/tables/ip.py:356 ipam/tables/ip.py:423 -#: ipam/tables/ip.py:446 templates/ipam/ipaddress.html:11 -#: virtualization/tables/virtualmachines.py:95 +#: 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/templates/ipam/ipaddress.html:11 +#: netbox/virtualization/tables/virtualmachines.py:95 msgid "IP Address" msgstr "Adresse IP" -#: dcim/tables/devices.py:191 dcim/tables/devices.py:1072 -#: virtualization/tables/virtualmachines.py:86 +#: netbox/dcim/tables/devices.py:191 netbox/dcim/tables/devices.py:1072 +#: netbox/virtualization/tables/virtualmachines.py:86 msgid "IPv4 Address" msgstr "Adresse IPv4" -#: dcim/tables/devices.py:195 dcim/tables/devices.py:1076 -#: virtualization/tables/virtualmachines.py:90 +#: netbox/dcim/tables/devices.py:195 netbox/dcim/tables/devices.py:1076 +#: netbox/virtualization/tables/virtualmachines.py:90 msgid "IPv6 Address" msgstr "Adresse IPv6" -#: dcim/tables/devices.py:210 +#: netbox/dcim/tables/devices.py:210 msgid "VC Position" msgstr "Position en VC" -#: dcim/tables/devices.py:213 +#: netbox/dcim/tables/devices.py:213 msgid "VC Priority" msgstr "Priorité VC" -#: dcim/tables/devices.py:220 templates/dcim/device_edit.html:38 -#: templates/dcim/devicebay_populate.html:16 +#: netbox/dcim/tables/devices.py:220 netbox/templates/dcim/device_edit.html:38 +#: netbox/templates/dcim/devicebay_populate.html:16 msgid "Parent Device" msgstr "Appareil parent" -#: dcim/tables/devices.py:225 +#: netbox/dcim/tables/devices.py:225 msgid "Position (Device Bay)" msgstr "Position (baie de l'appareil)" -#: dcim/tables/devices.py:234 +#: netbox/dcim/tables/devices.py:234 msgid "Console ports" msgstr "Ports de console" -#: dcim/tables/devices.py:237 +#: netbox/dcim/tables/devices.py:237 msgid "Console server ports" msgstr "Ports du serveur de consoles" -#: dcim/tables/devices.py:240 +#: netbox/dcim/tables/devices.py:240 msgid "Power ports" msgstr "Ports d'alimentation" -#: dcim/tables/devices.py:243 +#: netbox/dcim/tables/devices.py:243 msgid "Power outlets" msgstr "Prises de courant" -#: dcim/tables/devices.py:246 dcim/tables/devices.py:1081 -#: dcim/tables/devicetypes.py:128 dcim/views.py:1042 dcim/views.py:1281 -#: dcim/views.py:1977 netbox/navigation/menu.py:94 -#: netbox/navigation/menu.py:250 templates/dcim/device/base.html:37 -#: templates/dcim/device_list.html:43 templates/dcim/devicetype/base.html:34 -#: templates/dcim/inc/moduletype_buttons.html:25 templates/dcim/module.html:34 -#: templates/dcim/virtualdevicecontext.html:61 -#: templates/dcim/virtualdevicecontext.html:81 -#: templates/virtualization/virtualmachine/base.html:27 -#: templates/virtualization/virtualmachine_list.html:14 -#: virtualization/tables/virtualmachines.py:101 virtualization/views.py:366 -#: wireless/tables/wirelesslan.py:55 +#: 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/templates/dcim/device/base.html:37 +#: netbox/templates/dcim/device_list.html:43 +#: netbox/templates/dcim/devicetype/base.html:34 +#: netbox/templates/dcim/inc/moduletype_buttons.html:25 +#: netbox/templates/dcim/module.html:34 +#: netbox/templates/dcim/virtualdevicecontext.html:61 +#: netbox/templates/dcim/virtualdevicecontext.html:81 +#: netbox/templates/virtualization/virtualmachine/base.html:27 +#: netbox/templates/virtualization/virtualmachine_list.html:14 +#: netbox/virtualization/tables/virtualmachines.py:101 +#: netbox/virtualization/views.py:364 netbox/wireless/tables/wirelesslan.py:55 msgid "Interfaces" msgstr "Interfaces" -#: dcim/tables/devices.py:249 +#: netbox/dcim/tables/devices.py:249 msgid "Front ports" msgstr "Ports avant" -#: dcim/tables/devices.py:255 +#: netbox/dcim/tables/devices.py:255 msgid "Device bays" msgstr "Baies pour appareils" -#: dcim/tables/devices.py:258 +#: netbox/dcim/tables/devices.py:258 msgid "Module bays" msgstr "Baies pour modules" -#: dcim/tables/devices.py:261 +#: netbox/dcim/tables/devices.py:261 msgid "Inventory items" msgstr "Articles d'inventaire" -#: dcim/tables/devices.py:305 dcim/tables/modules.py:56 -#: templates/dcim/modulebay.html:17 +#: netbox/dcim/tables/devices.py:305 netbox/dcim/tables/modules.py:57 +#: netbox/templates/dcim/modulebay.html:17 msgid "Module Bay" msgstr "Module Bay" -#: dcim/tables/devices.py:318 dcim/tables/devicetypes.py:47 -#: dcim/tables/devicetypes.py:143 dcim/views.py:1117 dcim/views.py:2075 -#: netbox/navigation/menu.py:103 templates/dcim/device/base.html:52 -#: templates/dcim/device_list.html:71 templates/dcim/devicetype/base.html:49 -#: templates/dcim/inc/panels/inventory_items.html:6 -#: templates/dcim/inventoryitemrole.html:32 +#: netbox/dcim/tables/devices.py:318 netbox/dcim/tables/devicetypes.py:47 +#: netbox/dcim/tables/devicetypes.py:143 netbox/dcim/views.py:1115 +#: netbox/dcim/views.py:2073 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 +#: netbox/templates/dcim/inc/panels/inventory_items.html:6 +#: netbox/templates/dcim/inventoryitemrole.html:32 msgid "Inventory Items" msgstr "Articles d'inventaire" -#: dcim/tables/devices.py:333 +#: netbox/dcim/tables/devices.py:333 msgid "Cable Color" msgstr "Couleur du câble" -#: dcim/tables/devices.py:339 +#: netbox/dcim/tables/devices.py:339 msgid "Link Peers" msgstr "Lier les pairs" -#: dcim/tables/devices.py:342 +#: netbox/dcim/tables/devices.py:342 msgid "Mark Connected" msgstr "Marquer comme connecté" -#: dcim/tables/devices.py:461 +#: netbox/dcim/tables/devices.py:461 msgid "Maximum draw (W)" msgstr "Tirage maximal (W)" -#: dcim/tables/devices.py:464 +#: netbox/dcim/tables/devices.py:464 msgid "Allocated draw (W)" msgstr "Tirage alloué (W)" -#: dcim/tables/devices.py:558 ipam/forms/model_forms.py:701 -#: ipam/tables/fhrp.py:28 ipam/views.py:596 ipam/views.py:696 -#: netbox/navigation/menu.py:158 netbox/navigation/menu.py:160 -#: templates/dcim/interface.html:339 templates/ipam/ipaddress_bulk_add.html:15 -#: templates/ipam/service.html:40 templates/virtualization/vminterface.html:85 -#: vpn/tables/tunnels.py:98 +#: netbox/dcim/tables/devices.py:558 netbox/ipam/forms/model_forms.py: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/templates/ipam/ipaddress_bulk_add.html:15 +#: netbox/templates/ipam/service.html:40 +#: netbox/templates/virtualization/vminterface.html:85 +#: netbox/vpn/tables/tunnels.py:98 msgid "IP Addresses" msgstr "Adresses IP" -#: dcim/tables/devices.py:564 netbox/navigation/menu.py:202 -#: templates/ipam/inc/panels/fhrp_groups.html:6 +#: netbox/dcim/tables/devices.py:564 netbox/netbox/navigation/menu.py:202 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:6 msgid "FHRP Groups" msgstr "Groupes FHRP" -#: dcim/tables/devices.py:576 templates/dcim/interface.html:89 -#: templates/virtualization/vminterface.html:67 templates/vpn/tunnel.html:18 -#: templates/vpn/tunneltermination.html:13 vpn/forms/bulk_edit.py:76 -#: vpn/forms/bulk_import.py:76 vpn/forms/filtersets.py:42 -#: vpn/forms/filtersets.py:82 vpn/forms/model_forms.py:60 -#: vpn/forms/model_forms.py:145 vpn/tables/tunnels.py:78 +#: netbox/dcim/tables/devices.py:576 netbox/templates/dcim/interface.html:89 +#: netbox/templates/virtualization/vminterface.html:67 +#: netbox/templates/vpn/tunnel.html:18 +#: netbox/templates/vpn/tunneltermination.html:13 +#: netbox/vpn/forms/bulk_edit.py:76 netbox/vpn/forms/bulk_import.py:76 +#: netbox/vpn/forms/filtersets.py:42 netbox/vpn/forms/filtersets.py:82 +#: netbox/vpn/forms/model_forms.py:60 netbox/vpn/forms/model_forms.py:145 +#: netbox/vpn/tables/tunnels.py:78 msgid "Tunnel" msgstr "Tunnel" -#: dcim/tables/devices.py:604 dcim/tables/devicetypes.py:227 -#: templates/dcim/interface.html:65 +#: netbox/dcim/tables/devices.py:604 netbox/dcim/tables/devicetypes.py:227 +#: netbox/templates/dcim/interface.html:65 msgid "Management Only" msgstr "Gestion uniquement" -#: dcim/tables/devices.py:623 +#: netbox/dcim/tables/devices.py:623 msgid "VDCs" msgstr "VDC" -#: dcim/tables/devices.py:873 templates/dcim/modulebay.html:53 +#: netbox/dcim/tables/devices.py:873 netbox/templates/dcim/modulebay.html:53 msgid "Installed Module" msgstr "Module installé" -#: dcim/tables/devices.py:876 +#: netbox/dcim/tables/devices.py:876 msgid "Module Serial" msgstr "Série du module" -#: dcim/tables/devices.py:880 +#: netbox/dcim/tables/devices.py:880 msgid "Module Asset Tag" msgstr "Étiquette d'actif du module" -#: dcim/tables/devices.py:889 +#: netbox/dcim/tables/devices.py:889 msgid "Module Status" msgstr "État du module" -#: dcim/tables/devices.py:944 dcim/tables/devicetypes.py:312 -#: templates/dcim/inventoryitem.html:40 +#: netbox/dcim/tables/devices.py:944 netbox/dcim/tables/devicetypes.py:312 +#: netbox/templates/dcim/inventoryitem.html:40 msgid "Component" msgstr "Composant" -#: dcim/tables/devices.py:1000 +#: netbox/dcim/tables/devices.py:1000 msgid "Items" msgstr "Objets" -#: dcim/tables/devicetypes.py:37 netbox/navigation/menu.py:84 -#: netbox/navigation/menu.py:86 +#: netbox/dcim/tables/devicetypes.py:37 netbox/netbox/navigation/menu.py:84 +#: netbox/netbox/navigation/menu.py:86 msgid "Device Types" msgstr "Types d'appareils" -#: dcim/tables/devicetypes.py:42 netbox/navigation/menu.py:87 +#: netbox/dcim/tables/devicetypes.py:42 netbox/netbox/navigation/menu.py:87 msgid "Module Types" msgstr "Types de modules" -#: dcim/tables/devicetypes.py:52 extras/forms/filtersets.py:371 -#: extras/forms/model_forms.py:537 extras/tables/tables.py:540 -#: netbox/navigation/menu.py:78 +#: 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/netbox/navigation/menu.py:78 msgid "Platforms" msgstr "Plateformes" -#: dcim/tables/devicetypes.py:84 templates/dcim/devicetype.html:29 +#: netbox/dcim/tables/devicetypes.py:84 +#: netbox/templates/dcim/devicetype.html:29 msgid "Default Platform" msgstr "Plateforme par défaut" -#: dcim/tables/devicetypes.py:88 templates/dcim/devicetype.html:45 +#: netbox/dcim/tables/devicetypes.py:88 +#: netbox/templates/dcim/devicetype.html:45 msgid "Full Depth" msgstr "Pleine profondeur" -#: dcim/tables/devicetypes.py:98 +#: netbox/dcim/tables/devicetypes.py:98 msgid "U Height" msgstr "Hauteur en U" -#: dcim/tables/devicetypes.py:113 dcim/tables/modules.py:26 -#: dcim/tables/racks.py:89 +#: netbox/dcim/tables/devicetypes.py:113 netbox/dcim/tables/modules.py:26 +#: netbox/dcim/tables/racks.py:89 msgid "Instances" msgstr "Instances" -#: dcim/tables/devicetypes.py:116 dcim/views.py:982 dcim/views.py:1221 -#: dcim/views.py:1913 netbox/navigation/menu.py:97 -#: templates/dcim/device/base.html:25 templates/dcim/device_list.html:15 -#: templates/dcim/devicetype/base.html:22 -#: templates/dcim/inc/moduletype_buttons.html:13 templates/dcim/module.html:22 +#: netbox/dcim/tables/devicetypes.py:116 netbox/dcim/views.py:980 +#: netbox/dcim/views.py:1219 netbox/dcim/views.py:1911 +#: netbox/netbox/navigation/menu.py:97 +#: netbox/templates/dcim/device/base.html:25 +#: netbox/templates/dcim/device_list.html:15 +#: netbox/templates/dcim/devicetype/base.html:22 +#: netbox/templates/dcim/inc/moduletype_buttons.html:13 +#: netbox/templates/dcim/module.html:22 msgid "Console Ports" msgstr "Ports de console" -#: dcim/tables/devicetypes.py:119 dcim/views.py:997 dcim/views.py:1236 -#: dcim/views.py:1929 netbox/navigation/menu.py:98 -#: templates/dcim/device/base.html:28 templates/dcim/device_list.html:22 -#: templates/dcim/devicetype/base.html:25 -#: templates/dcim/inc/moduletype_buttons.html:16 templates/dcim/module.html:25 +#: netbox/dcim/tables/devicetypes.py:119 netbox/dcim/views.py:995 +#: netbox/dcim/views.py:1234 netbox/dcim/views.py:1927 +#: netbox/netbox/navigation/menu.py:98 +#: netbox/templates/dcim/device/base.html:28 +#: netbox/templates/dcim/device_list.html:22 +#: netbox/templates/dcim/devicetype/base.html:25 +#: netbox/templates/dcim/inc/moduletype_buttons.html:16 +#: netbox/templates/dcim/module.html:25 msgid "Console Server Ports" msgstr "Ports du serveur de consoles" -#: dcim/tables/devicetypes.py:122 dcim/views.py:1012 dcim/views.py:1251 -#: dcim/views.py:1945 netbox/navigation/menu.py:99 -#: templates/dcim/device/base.html:31 templates/dcim/device_list.html:29 -#: templates/dcim/devicetype/base.html:28 -#: templates/dcim/inc/moduletype_buttons.html:19 templates/dcim/module.html:28 +#: netbox/dcim/tables/devicetypes.py:122 netbox/dcim/views.py:1010 +#: netbox/dcim/views.py:1249 netbox/dcim/views.py:1943 +#: netbox/netbox/navigation/menu.py:99 +#: netbox/templates/dcim/device/base.html:31 +#: netbox/templates/dcim/device_list.html:29 +#: netbox/templates/dcim/devicetype/base.html:28 +#: netbox/templates/dcim/inc/moduletype_buttons.html:19 +#: netbox/templates/dcim/module.html:28 msgid "Power Ports" msgstr "Ports d'alimentation" -#: dcim/tables/devicetypes.py:125 dcim/views.py:1027 dcim/views.py:1266 -#: dcim/views.py:1961 netbox/navigation/menu.py:100 -#: templates/dcim/device/base.html:34 templates/dcim/device_list.html:36 -#: templates/dcim/devicetype/base.html:31 -#: templates/dcim/inc/moduletype_buttons.html:22 templates/dcim/module.html:31 +#: netbox/dcim/tables/devicetypes.py:125 netbox/dcim/views.py:1025 +#: netbox/dcim/views.py:1264 netbox/dcim/views.py:1959 +#: netbox/netbox/navigation/menu.py:100 +#: netbox/templates/dcim/device/base.html:34 +#: netbox/templates/dcim/device_list.html:36 +#: netbox/templates/dcim/devicetype/base.html:31 +#: netbox/templates/dcim/inc/moduletype_buttons.html:22 +#: netbox/templates/dcim/module.html:31 msgid "Power Outlets" msgstr "Prises de courant" -#: dcim/tables/devicetypes.py:131 dcim/views.py:1057 dcim/views.py:1296 -#: dcim/views.py:1999 netbox/navigation/menu.py:95 -#: templates/dcim/device/base.html:40 templates/dcim/devicetype/base.html:37 -#: templates/dcim/inc/moduletype_buttons.html:28 templates/dcim/module.html:37 +#: netbox/dcim/tables/devicetypes.py:131 netbox/dcim/views.py:1055 +#: netbox/dcim/views.py:1294 netbox/dcim/views.py:1997 +#: netbox/netbox/navigation/menu.py:95 +#: netbox/templates/dcim/device/base.html:40 +#: netbox/templates/dcim/devicetype/base.html:37 +#: netbox/templates/dcim/inc/moduletype_buttons.html:28 +#: netbox/templates/dcim/module.html:37 msgid "Front Ports" msgstr "Ports avant" -#: dcim/tables/devicetypes.py:134 dcim/views.py:1072 dcim/views.py:1311 -#: dcim/views.py:2015 netbox/navigation/menu.py:96 -#: templates/dcim/device/base.html:43 templates/dcim/device_list.html:50 -#: templates/dcim/devicetype/base.html:40 -#: templates/dcim/inc/moduletype_buttons.html:31 templates/dcim/module.html:40 +#: netbox/dcim/tables/devicetypes.py:134 netbox/dcim/views.py:1070 +#: netbox/dcim/views.py:1309 netbox/dcim/views.py:2013 +#: netbox/netbox/navigation/menu.py:96 +#: netbox/templates/dcim/device/base.html:43 +#: netbox/templates/dcim/device_list.html:50 +#: netbox/templates/dcim/devicetype/base.html:40 +#: netbox/templates/dcim/inc/moduletype_buttons.html:31 +#: netbox/templates/dcim/module.html:40 msgid "Rear Ports" msgstr "Ports arrière" -#: dcim/tables/devicetypes.py:137 dcim/views.py:1102 dcim/views.py:2055 -#: netbox/navigation/menu.py:102 templates/dcim/device/base.html:49 -#: templates/dcim/device_list.html:57 templates/dcim/devicetype/base.html:46 +#: netbox/dcim/tables/devicetypes.py:137 netbox/dcim/views.py:1100 +#: netbox/dcim/views.py:2053 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" -#: dcim/tables/devicetypes.py:140 dcim/views.py:1087 dcim/views.py:1326 -#: dcim/views.py:2035 netbox/navigation/menu.py:101 -#: templates/dcim/device/base.html:46 templates/dcim/device_list.html:64 -#: templates/dcim/devicetype/base.html:43 -#: templates/dcim/inc/moduletype_buttons.html:34 templates/dcim/module.html:43 +#: netbox/dcim/tables/devicetypes.py:140 netbox/dcim/views.py:1085 +#: netbox/dcim/views.py:1324 netbox/dcim/views.py:2033 +#: netbox/netbox/navigation/menu.py:101 +#: netbox/templates/dcim/device/base.html:46 +#: netbox/templates/dcim/device_list.html:64 +#: netbox/templates/dcim/devicetype/base.html:43 +#: netbox/templates/dcim/inc/moduletype_buttons.html:34 +#: netbox/templates/dcim/module.html:43 msgid "Module Bays" msgstr "Baies pour modules" -#: dcim/tables/power.py:36 netbox/navigation/menu.py:297 -#: templates/dcim/powerpanel.html:51 +#: netbox/dcim/tables/power.py:36 netbox/netbox/navigation/menu.py:297 +#: netbox/templates/dcim/powerpanel.html:51 msgid "Power Feeds" msgstr "Alimentations" -#: dcim/tables/power.py:80 templates/dcim/powerfeed.html:99 +#: netbox/dcim/tables/power.py:80 netbox/templates/dcim/powerfeed.html:99 msgid "Max Utilization" msgstr "Utilisation maximale" -#: dcim/tables/power.py:84 +#: netbox/dcim/tables/power.py:84 msgid "Available Power (VA)" msgstr "Puissance disponible (VA)" -#: dcim/tables/racks.py:30 dcim/tables/sites.py:143 -#: netbox/navigation/menu.py:43 netbox/navigation/menu.py:47 -#: netbox/navigation/menu.py:49 +#: netbox/dcim/tables/racks.py:30 netbox/dcim/tables/sites.py:143 +#: netbox/netbox/navigation/menu.py:43 netbox/netbox/navigation/menu.py:47 +#: netbox/netbox/navigation/menu.py:49 msgid "Racks" msgstr "Baies" -#: dcim/tables/racks.py:63 dcim/tables/racks.py:142 -#: templates/dcim/device.html:318 -#: templates/dcim/inc/panels/racktype_dimensions.html:14 +#: netbox/dcim/tables/racks.py:63 netbox/dcim/tables/racks.py:142 +#: netbox/templates/dcim/device.html:318 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:14 msgid "Height" msgstr "Hauteur" -#: dcim/tables/racks.py:67 dcim/tables/racks.py:165 -#: templates/dcim/inc/panels/racktype_dimensions.html:18 +#: netbox/dcim/tables/racks.py:67 netbox/dcim/tables/racks.py:165 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:18 msgid "Outer Width" msgstr "Largeur extérieure" -#: dcim/tables/racks.py:71 dcim/tables/racks.py:169 -#: templates/dcim/inc/panels/racktype_dimensions.html:28 +#: netbox/dcim/tables/racks.py:71 netbox/dcim/tables/racks.py:169 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:28 msgid "Outer Depth" msgstr "Profondeur extérieure" -#: dcim/tables/racks.py:79 dcim/tables/racks.py:177 +#: netbox/dcim/tables/racks.py:79 netbox/dcim/tables/racks.py:177 msgid "Max Weight" msgstr "Poids maximum" -#: dcim/tables/racks.py:154 +#: netbox/dcim/tables/racks.py:154 msgid "Space" msgstr "Espace" -#: dcim/tables/sites.py:30 dcim/tables/sites.py:57 -#: extras/forms/filtersets.py:351 extras/forms/model_forms.py:517 -#: ipam/forms/bulk_edit.py:131 ipam/forms/model_forms.py:153 -#: ipam/tables/asn.py:66 netbox/navigation/menu.py:15 -#: netbox/navigation/menu.py:17 +#: netbox/dcim/tables/sites.py:30 netbox/dcim/tables/sites.py:57 +#: netbox/extras/forms/filtersets.py: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/netbox/navigation/menu.py:15 netbox/netbox/navigation/menu.py:17 msgid "Sites" msgstr "Sites" -#: dcim/tests/test_api.py:47 +#: netbox/dcim/tests/test_api.py:47 msgid "Test case must set peer_termination_type" msgstr "Le scénario de test doit définir peer_termination_type" -#: dcim/views.py:140 +#: netbox/dcim/views.py:138 #, python-brace-format msgid "Disconnected {count} {type}" msgstr "Déconnecté {count} {type}" -#: dcim/views.py:740 netbox/navigation/menu.py:51 +#: netbox/dcim/views.py:738 netbox/netbox/navigation/menu.py:51 msgid "Reservations" msgstr "Réservations" -#: dcim/views.py:759 templates/dcim/location.html:90 -#: templates/dcim/site.html:140 +#: 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" -#: dcim/views.py:2088 extras/forms/model_forms.py:577 -#: templates/extras/configcontext.html:10 -#: virtualization/forms/model_forms.py:225 virtualization/views.py:407 +#: netbox/dcim/views.py:2086 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 msgid "Config Context" msgstr "Contexte de configuration" -#: dcim/views.py:2098 virtualization/views.py:417 +#: netbox/dcim/views.py:2096 netbox/virtualization/views.py:415 msgid "Render Config" msgstr "Configuration du rendu" -#: dcim/views.py:2131 virtualization/views.py:450 +#: 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}" -#: dcim/views.py:2149 extras/tables/tables.py:550 -#: netbox/navigation/menu.py:247 netbox/navigation/menu.py:249 -#: virtualization/views.py:180 +#: 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 msgid "Virtual Machines" msgstr "Machines virtuelles" -#: dcim/views.py:2897 +#: netbox/dcim/views.py:2907 #, python-brace-format msgid "Installed device {device} in bay {device_bay}." msgstr "Appareil installé {device} dans la baie {device_bay}." -#: dcim/views.py:2938 +#: netbox/dcim/views.py:2948 #, python-brace-format msgid "Removed device {device} from bay {device_bay}." msgstr "Appareil retiré {device} depuis la baie {device_bay}." -#: dcim/views.py:3044 ipam/tables/ip.py:234 +#: netbox/dcim/views.py:3054 netbox/ipam/tables/ip.py:234 msgid "Children" msgstr "Enfants" -#: dcim/views.py:3510 +#: netbox/dcim/views.py:3520 #, python-brace-format msgid "Added member {device}" msgstr "Membre ajouté {device}" -#: dcim/views.py:3557 +#: netbox/dcim/views.py:3567 #, 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." -#: dcim/views.py:3570 +#: netbox/dcim/views.py:3580 #, python-brace-format msgid "Removed {device} from virtual chassis {chassis}" msgstr "Supprimé {device} depuis un châssis virtuel {chassis}" -#: extras/api/customfields.py:89 +#: netbox/extras/api/customfields.py:89 #, python-brace-format msgid "Unknown related object(s): {name}" msgstr "Objet associé inconnu: {name}" -#: extras/api/serializers_/customfields.py:73 +#: netbox/extras/api/serializers_/customfields.py:73 msgid "Changing the type of custom fields is not supported." msgstr "" "La modification du type de champs personnalisés n'est pas prise en charge." -#: extras/api/serializers_/scripts.py:70 extras/api/serializers_/scripts.py:75 +#: netbox/extras/api/serializers_/scripts.py:70 +#: netbox/extras/api/serializers_/scripts.py:75 msgid "Scheduling is not enabled for this script." msgstr "La planification n'est pas activée pour ce script." -#: extras/choices.py:30 extras/forms/misc.py:14 +#: netbox/extras/choices.py:30 netbox/extras/forms/misc.py:14 msgid "Text" msgstr "Texte" -#: extras/choices.py:31 +#: netbox/extras/choices.py:31 msgid "Text (long)" msgstr "Texte (long)" -#: extras/choices.py:32 +#: netbox/extras/choices.py:32 msgid "Integer" msgstr "Entier" -#: extras/choices.py:33 +#: netbox/extras/choices.py:33 msgid "Decimal" msgstr "Décimal" -#: extras/choices.py:34 +#: netbox/extras/choices.py:34 msgid "Boolean (true/false)" msgstr "Booléen (vrai/faux)" -#: extras/choices.py:35 +#: netbox/extras/choices.py:35 msgid "Date" msgstr "Date" -#: extras/choices.py:36 +#: netbox/extras/choices.py:36 msgid "Date & time" msgstr "Date et heure" -#: extras/choices.py:38 +#: netbox/extras/choices.py:38 msgid "JSON" msgstr "JSON" -#: extras/choices.py:39 +#: netbox/extras/choices.py:39 msgid "Selection" msgstr "Sélection" -#: extras/choices.py:40 +#: netbox/extras/choices.py:40 msgid "Multiple selection" msgstr "Sélection multiple" -#: extras/choices.py:42 +#: netbox/extras/choices.py:42 msgid "Multiple objects" msgstr "Objets multiples" -#: extras/choices.py:53 netbox/preferences.py:21 -#: templates/extras/customfield.html:78 vpn/choices.py:20 -#: wireless/choices.py:27 +#: netbox/extras/choices.py:53 netbox/netbox/preferences.py:21 +#: netbox/templates/extras/customfield.html:78 netbox/vpn/choices.py:20 +#: netbox/wireless/choices.py:27 msgid "Disabled" msgstr "Désactivé" -#: extras/choices.py:54 +#: netbox/extras/choices.py:54 msgid "Loose" msgstr "Relaxé" -#: extras/choices.py:55 +#: netbox/extras/choices.py:55 msgid "Exact" msgstr "Exact" -#: extras/choices.py:66 +#: netbox/extras/choices.py:66 msgid "Always" msgstr "Toujours" -#: extras/choices.py:67 +#: netbox/extras/choices.py:67 msgid "If set" msgstr "Si défini" -#: extras/choices.py:68 extras/choices.py:81 +#: netbox/extras/choices.py:68 netbox/extras/choices.py:81 msgid "Hidden" msgstr "Caché" -#: extras/choices.py:79 +#: netbox/extras/choices.py:79 msgid "Yes" msgstr "Oui" -#: extras/choices.py:80 +#: netbox/extras/choices.py:80 msgid "No" msgstr "Non" -#: extras/choices.py:108 templates/tenancy/contact.html:57 -#: tenancy/forms/bulk_edit.py:118 wireless/forms/model_forms.py:168 +#: 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 msgid "Link" msgstr "Lien" -#: extras/choices.py:124 +#: netbox/extras/choices.py:124 msgid "Newest" msgstr "Le plus récent" -#: extras/choices.py:125 +#: netbox/extras/choices.py:125 msgid "Oldest" msgstr "Le plus ancien" -#: extras/choices.py:126 +#: netbox/extras/choices.py:126 msgid "Alphabetical (A-Z)" msgstr "Alphabétique (A-Z)" -#: extras/choices.py:127 +#: netbox/extras/choices.py:127 msgid "Alphabetical (Z-A)" msgstr "Alphabétique (Z-A)" -#: extras/choices.py:144 extras/choices.py:167 +#: netbox/extras/choices.py:144 netbox/extras/choices.py:167 msgid "Info" msgstr "Infos" -#: extras/choices.py:145 extras/choices.py:168 +#: netbox/extras/choices.py:145 netbox/extras/choices.py:168 msgid "Success" msgstr "Succès" -#: extras/choices.py:146 extras/choices.py:169 +#: netbox/extras/choices.py:146 netbox/extras/choices.py:169 msgid "Warning" msgstr "Avertissement" -#: extras/choices.py:147 +#: netbox/extras/choices.py:147 msgid "Danger" msgstr "Danger" -#: extras/choices.py:165 +#: netbox/extras/choices.py:165 msgid "Debug" msgstr "Déboguer" -#: extras/choices.py:166 netbox/choices.py:101 +#: netbox/extras/choices.py:166 netbox/netbox/choices.py:101 msgid "Default" msgstr "Par défaut" -#: extras/choices.py:170 +#: netbox/extras/choices.py:170 msgid "Failure" msgstr "Défaillance" -#: extras/choices.py:186 +#: netbox/extras/choices.py:186 msgid "Hourly" msgstr "Toutes les heures" -#: extras/choices.py:187 +#: netbox/extras/choices.py:187 msgid "12 hours" msgstr "12 heures" -#: extras/choices.py:188 +#: netbox/extras/choices.py:188 msgid "Daily" msgstr "Tous les jours" -#: extras/choices.py:189 +#: netbox/extras/choices.py:189 msgid "Weekly" msgstr "Hebdo" -#: extras/choices.py:190 +#: netbox/extras/choices.py:190 msgid "30 days" msgstr "30 jours" -#: extras/choices.py:226 templates/dcim/virtualchassis_edit.html:107 -#: templates/generic/bulk_add_component.html:68 -#: templates/generic/object_edit.html:47 templates/generic/object_edit.html:80 -#: templates/ipam/inc/ipaddress_edit_header.html:7 +#: netbox/extras/choices.py:226 +#: 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/ipam/inc/ipaddress_edit_header.html:7 msgid "Create" msgstr "Créez" -#: extras/choices.py:227 +#: netbox/extras/choices.py:227 msgid "Update" msgstr "Mise à jour" -#: extras/choices.py:228 templates/circuits/inc/circuit_termination.html:23 -#: templates/dcim/inc/panels/inventory_items.html:37 -#: templates/dcim/powerpanel.html:66 templates/extras/script_list.html:35 -#: templates/generic/bulk_delete.html:20 templates/generic/bulk_delete.html:66 -#: templates/generic/object_delete.html:19 templates/htmx/delete_form.html:57 -#: templates/ipam/inc/panels/fhrp_groups.html:48 -#: templates/users/objectpermission.html:46 -#: utilities/templates/buttons/delete.html:11 +#: netbox/extras/choices.py:228 +#: netbox/templates/circuits/inc/circuit_termination.html:23 +#: netbox/templates/dcim/inc/panels/inventory_items.html:37 +#: netbox/templates/dcim/powerpanel.html:66 +#: netbox/templates/extras/script_list.html:35 +#: netbox/templates/generic/bulk_delete.html:20 +#: netbox/templates/generic/bulk_delete.html:66 +#: netbox/templates/generic/object_delete.html:19 +#: netbox/templates/htmx/delete_form.html:57 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:48 +#: netbox/templates/users/objectpermission.html:46 +#: netbox/utilities/templates/buttons/delete.html:11 msgid "Delete" msgstr "Supprimer" -#: extras/choices.py:252 netbox/choices.py:57 netbox/choices.py:102 +#: netbox/extras/choices.py:252 netbox/netbox/choices.py:57 +#: netbox/netbox/choices.py:102 msgid "Blue" msgstr "Bleu" -#: extras/choices.py:253 netbox/choices.py:56 netbox/choices.py:103 +#: netbox/extras/choices.py:253 netbox/netbox/choices.py:56 +#: netbox/netbox/choices.py:103 msgid "Indigo" msgstr "Indigo" -#: extras/choices.py:254 netbox/choices.py:54 netbox/choices.py:104 +#: netbox/extras/choices.py:254 netbox/netbox/choices.py:54 +#: netbox/netbox/choices.py:104 msgid "Purple" msgstr "Violet" -#: extras/choices.py:255 netbox/choices.py:51 netbox/choices.py:105 +#: netbox/extras/choices.py:255 netbox/netbox/choices.py:51 +#: netbox/netbox/choices.py:105 msgid "Pink" msgstr "Rose" -#: extras/choices.py:256 netbox/choices.py:50 netbox/choices.py:106 +#: netbox/extras/choices.py:256 netbox/netbox/choices.py:50 +#: netbox/netbox/choices.py:106 msgid "Red" msgstr "Rouge" -#: extras/choices.py:257 netbox/choices.py:68 netbox/choices.py:107 +#: netbox/extras/choices.py:257 netbox/netbox/choices.py:68 +#: netbox/netbox/choices.py:107 msgid "Orange" msgstr "Orange" -#: extras/choices.py:258 netbox/choices.py:66 netbox/choices.py:108 +#: netbox/extras/choices.py:258 netbox/netbox/choices.py:66 +#: netbox/netbox/choices.py:108 msgid "Yellow" msgstr "Jaune" -#: extras/choices.py:259 netbox/choices.py:63 netbox/choices.py:109 +#: netbox/extras/choices.py:259 netbox/netbox/choices.py:63 +#: netbox/netbox/choices.py:109 msgid "Green" msgstr "Vert" -#: extras/choices.py:260 netbox/choices.py:60 netbox/choices.py:110 +#: netbox/extras/choices.py:260 netbox/netbox/choices.py:60 +#: netbox/netbox/choices.py:110 msgid "Teal" msgstr "Sarcelle" -#: extras/choices.py:261 netbox/choices.py:59 netbox/choices.py:111 +#: netbox/extras/choices.py:261 netbox/netbox/choices.py:59 +#: netbox/netbox/choices.py:111 msgid "Cyan" msgstr "Cyan" -#: extras/choices.py:262 netbox/choices.py:112 +#: netbox/extras/choices.py:262 netbox/netbox/choices.py:112 msgid "Gray" msgstr "Gris" -#: extras/choices.py:263 netbox/choices.py:74 netbox/choices.py:113 +#: netbox/extras/choices.py:263 netbox/netbox/choices.py:74 +#: netbox/netbox/choices.py:113 msgid "Black" msgstr "Noir" -#: extras/choices.py:264 netbox/choices.py:75 netbox/choices.py:114 +#: netbox/extras/choices.py:264 netbox/netbox/choices.py:75 +#: netbox/netbox/choices.py:114 msgid "White" msgstr "Blanc" -#: extras/choices.py:279 extras/forms/model_forms.py:353 -#: extras/forms/model_forms.py:430 templates/extras/webhook.html:10 +#: netbox/extras/choices.py:279 netbox/extras/forms/model_forms.py:353 +#: netbox/extras/forms/model_forms.py:430 +#: netbox/templates/extras/webhook.html:10 msgid "Webhook" msgstr "Webhook" -#: extras/choices.py:280 extras/forms/model_forms.py:418 -#: templates/extras/script/base.html:29 +#: netbox/extras/choices.py:280 netbox/extras/forms/model_forms.py:418 +#: netbox/templates/extras/script/base.html:29 msgid "Script" msgstr "Scénario" -#: extras/choices.py:281 +#: netbox/extras/choices.py:281 msgid "Notification" msgstr "Notification" -#: extras/conditions.py:54 +#: netbox/extras/conditions.py:54 #, python-brace-format msgid "Unknown operator: {op}. Must be one of: {operators}" msgstr "Opérateur inconnu : {op}. Doit être l'un des suivants : {operators}" -#: extras/conditions.py:58 +#: netbox/extras/conditions.py:58 #, python-brace-format msgid "Unsupported value type: {value}" msgstr "Type de valeur non pris en charge : {value}" -#: extras/conditions.py:60 +#: netbox/extras/conditions.py:60 #, python-brace-format msgid "Invalid type for {op} operation: {value}" msgstr "Type non valide pour {op} opération : {value}" -#: extras/conditions.py:137 +#: netbox/extras/conditions.py:137 #, python-brace-format msgid "Ruleset must be a dictionary, not {ruleset}." msgstr "L'ensemble de règles doit être un dictionnaire, pas {ruleset}." -#: extras/conditions.py:142 +#: netbox/extras/conditions.py:142 msgid "Invalid logic type: must be 'AND' or 'OR'. Please check documentation." msgstr "" "Logique invalide : doit être \"AND\" ou \"OR\". Merci de consulter la " "documentation." -#: extras/conditions.py:154 +#: netbox/extras/conditions.py:154 msgid "Incorrect key(s) informed. Please check documentation." msgstr "Clé(s) incorrecte(s). Merci de consulter la documentation." -#: extras/dashboard/forms.py:38 +#: netbox/extras/dashboard/forms.py:38 msgid "Widget type" msgstr "Type de widget" -#: extras/dashboard/utils.py:36 +#: netbox/extras/dashboard/utils.py:36 #, python-brace-format msgid "Unregistered widget class: {name}" msgstr "Classe de widget non enregistrée : {name}" -#: extras/dashboard/widgets.py:125 +#: netbox/extras/dashboard/widgets.py:125 #, python-brace-format msgid "{class_name} must define a render() method." msgstr "{class_name} doit définir une méthode render ()." -#: extras/dashboard/widgets.py:144 +#: netbox/extras/dashboard/widgets.py:144 msgid "Note" msgstr "Remarque" -#: extras/dashboard/widgets.py:145 +#: netbox/extras/dashboard/widgets.py:145 msgid "Display some arbitrary custom content. Markdown is supported." msgstr "" "Affichez du contenu personnalisé arbitraire. Markdown est pris en charge." -#: extras/dashboard/widgets.py:158 +#: netbox/extras/dashboard/widgets.py:158 msgid "Object Counts" msgstr "Nombre d'objets" -#: extras/dashboard/widgets.py:159 +#: netbox/extras/dashboard/widgets.py:159 msgid "" "Display a set of NetBox models and the number of objects created for each " "type." @@ -6985,271 +7527,293 @@ msgstr "" "Affichez un ensemble de modèles NetBox et le nombre d'objets créés pour " "chaque type." -#: extras/dashboard/widgets.py:169 +#: netbox/extras/dashboard/widgets.py:169 msgid "Filters to apply when counting the number of objects" msgstr "Filtres à appliquer lors du comptage du nombre d'objets" -#: extras/dashboard/widgets.py:177 +#: netbox/extras/dashboard/widgets.py:177 msgid "Invalid format. Object filters must be passed as a dictionary." msgstr "" "Format non valide. Les filtres d'objets doivent être transmis sous forme de " "dictionnaire." -#: extras/dashboard/widgets.py:208 +#: netbox/extras/dashboard/widgets.py:208 msgid "Object List" msgstr "Liste d'objets" -#: extras/dashboard/widgets.py:209 +#: netbox/extras/dashboard/widgets.py:209 msgid "Display an arbitrary list of objects." msgstr "Afficher une liste arbitraire d'objets." -#: extras/dashboard/widgets.py:222 +#: netbox/extras/dashboard/widgets.py:222 msgid "The default number of objects to display" msgstr "Le nombre d'objets à afficher par défaut" -#: extras/dashboard/widgets.py:234 +#: netbox/extras/dashboard/widgets.py:234 msgid "Invalid format. URL parameters must be passed as a dictionary." msgstr "" "Format non valide. Les paramètres d'URL doivent être transmis sous forme de " "dictionnaire." -#: extras/dashboard/widgets.py:274 +#: netbox/extras/dashboard/widgets.py:274 msgid "RSS Feed" msgstr "Fil RSS" -#: extras/dashboard/widgets.py:279 +#: netbox/extras/dashboard/widgets.py:279 msgid "Embed an RSS feed from an external website." msgstr "Intégrez un flux RSS provenant d'un site Web externe." -#: extras/dashboard/widgets.py:286 +#: netbox/extras/dashboard/widgets.py:286 msgid "Feed URL" msgstr "URL du flux" -#: extras/dashboard/widgets.py:291 +#: netbox/extras/dashboard/widgets.py:291 msgid "The maximum number of objects to display" msgstr "Le nombre maximum d'objets à afficher" -#: extras/dashboard/widgets.py:296 +#: netbox/extras/dashboard/widgets.py:296 msgid "How long to stored the cached content (in seconds)" msgstr "Durée de conservation du contenu mis en cache (en secondes)" -#: extras/dashboard/widgets.py:348 templates/account/base.html:10 -#: templates/account/bookmarks.html:7 templates/inc/user_menu.html:48 +#: netbox/extras/dashboard/widgets.py:348 +#: netbox/templates/account/base.html:10 +#: netbox/templates/account/bookmarks.html:7 +#: netbox/templates/inc/user_menu.html:48 msgid "Bookmarks" msgstr "Signets" -#: extras/dashboard/widgets.py:352 +#: netbox/extras/dashboard/widgets.py:352 msgid "Show your personal bookmarks" msgstr "Afficher vos favoris personnels" -#: 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}" -#: extras/events.py:192 +#: netbox/extras/events.py:196 #, python-brace-format msgid "Cannot import events pipeline {name} error: {error}" msgstr "" "Impossible d'importer le pipeline d'événements {name} erreur : {error}" -#: extras/filtersets.py:45 +#: netbox/extras/filtersets.py:45 msgid "Script module (ID)" msgstr "Module de script (ID)" -#: extras/filtersets.py:254 extras/filtersets.py:637 extras/filtersets.py:665 +#: netbox/extras/filtersets.py:254 netbox/extras/filtersets.py:637 +#: netbox/extras/filtersets.py:665 msgid "Data file (ID)" msgstr "Fichier de données (ID)" -#: extras/filtersets.py:370 users/filtersets.py:68 users/filtersets.py:191 +#: netbox/extras/filtersets.py:370 netbox/users/filtersets.py:68 +#: netbox/users/filtersets.py:191 msgid "Group (name)" msgstr "Groupe (nom)" -#: extras/filtersets.py:574 virtualization/forms/filtersets.py:118 +#: netbox/extras/filtersets.py:574 +#: netbox/virtualization/forms/filtersets.py:118 msgid "Cluster type" msgstr "Type de cluster" -#: extras/filtersets.py:580 virtualization/filtersets.py:95 -#: virtualization/filtersets.py:147 +#: netbox/extras/filtersets.py:580 netbox/virtualization/filtersets.py:95 +#: netbox/virtualization/filtersets.py:147 msgid "Cluster type (slug)" msgstr "Type de cluster (slug)" -#: extras/filtersets.py:601 tenancy/forms/forms.py:16 -#: tenancy/forms/forms.py:39 +#: netbox/extras/filtersets.py:601 netbox/tenancy/forms/forms.py:16 +#: netbox/tenancy/forms/forms.py:39 msgid "Tenant group" msgstr "Groupe de locataires" -#: extras/filtersets.py:607 tenancy/filtersets.py:188 -#: tenancy/filtersets.py:208 +#: netbox/extras/filtersets.py:607 netbox/tenancy/filtersets.py:188 +#: netbox/tenancy/filtersets.py:208 msgid "Tenant group (slug)" msgstr "Groupe de locataires (slug)" -#: extras/filtersets.py:623 extras/forms/model_forms.py:495 -#: templates/extras/tag.html:11 +#: netbox/extras/filtersets.py:623 netbox/extras/forms/model_forms.py:495 +#: netbox/templates/extras/tag.html:11 msgid "Tag" -msgstr "Balise" +msgstr "Étiquette" -#: extras/filtersets.py:629 +#: netbox/extras/filtersets.py:629 msgid "Tag (slug)" -msgstr "Tag (slug)" +msgstr "Étiquette (slug)" -#: extras/filtersets.py:689 extras/forms/filtersets.py:429 +#: netbox/extras/filtersets.py:689 netbox/extras/forms/filtersets.py:429 msgid "Has local config context data" msgstr "Possède des données contextuelles de configuration locales" -#: extras/forms/bulk_edit.py:35 extras/forms/filtersets.py:60 +#: netbox/extras/forms/bulk_edit.py:35 netbox/extras/forms/filtersets.py:60 msgid "Group name" msgstr "Nom du groupe" -#: extras/forms/bulk_edit.py:43 extras/forms/filtersets.py:68 -#: extras/tables/tables.py:65 templates/extras/customfield.html:38 -#: templates/generic/bulk_import.html:118 +#: netbox/extras/forms/bulk_edit.py:43 netbox/extras/forms/filtersets.py:68 +#: netbox/extras/tables/tables.py:65 +#: netbox/templates/extras/customfield.html:38 +#: netbox/templates/generic/bulk_import.html:118 msgid "Required" msgstr "Obligatoire" -#: extras/forms/bulk_edit.py:48 extras/forms/filtersets.py:75 +#: netbox/extras/forms/bulk_edit.py:48 netbox/extras/forms/filtersets.py:75 msgid "Must be unique" msgstr "Doit être unique" -#: extras/forms/bulk_edit.py:61 extras/forms/bulk_import.py:60 -#: extras/forms/filtersets.py:89 extras/models/customfields.py:209 +#: netbox/extras/forms/bulk_edit.py:61 netbox/extras/forms/bulk_import.py:60 +#: netbox/extras/forms/filtersets.py:89 +#: netbox/extras/models/customfields.py:209 msgid "UI visible" msgstr "Interface utilisateur visible" -#: extras/forms/bulk_edit.py:66 extras/forms/bulk_import.py:66 -#: extras/forms/filtersets.py:94 extras/models/customfields.py:216 +#: netbox/extras/forms/bulk_edit.py:66 netbox/extras/forms/bulk_import.py:66 +#: netbox/extras/forms/filtersets.py:94 +#: netbox/extras/models/customfields.py:216 msgid "UI editable" msgstr "Interface utilisateur modifiable" -#: extras/forms/bulk_edit.py:71 extras/forms/filtersets.py:97 +#: netbox/extras/forms/bulk_edit.py:71 netbox/extras/forms/filtersets.py:97 msgid "Is cloneable" msgstr "Est cloneable" -#: extras/forms/bulk_edit.py:76 extras/forms/filtersets.py:104 +#: netbox/extras/forms/bulk_edit.py:76 netbox/extras/forms/filtersets.py:104 msgid "Minimum value" msgstr "Valeur minimale" -#: extras/forms/bulk_edit.py:80 extras/forms/filtersets.py:108 +#: netbox/extras/forms/bulk_edit.py:80 netbox/extras/forms/filtersets.py:108 msgid "Maximum value" msgstr "Valeur maximale" -#: extras/forms/bulk_edit.py:84 extras/forms/filtersets.py:112 +#: netbox/extras/forms/bulk_edit.py:84 netbox/extras/forms/filtersets.py:112 msgid "Validation regex" msgstr "Regex de validation" -#: extras/forms/bulk_edit.py:91 extras/forms/filtersets.py:46 -#: extras/forms/model_forms.py:76 templates/extras/customfield.html:70 +#: netbox/extras/forms/bulk_edit.py:91 netbox/extras/forms/filtersets.py:46 +#: netbox/extras/forms/model_forms.py:76 +#: netbox/templates/extras/customfield.html:70 msgid "Behavior" msgstr "Comportement" -#: extras/forms/bulk_edit.py:128 extras/forms/filtersets.py:149 +#: netbox/extras/forms/bulk_edit.py:128 netbox/extras/forms/filtersets.py:149 msgid "New window" msgstr "Nouvelle fenêtre" -#: extras/forms/bulk_edit.py:137 +#: netbox/extras/forms/bulk_edit.py:137 msgid "Button class" msgstr "Classe de boutons" -#: extras/forms/bulk_edit.py:154 extras/forms/filtersets.py:187 -#: extras/models/models.py:409 +#: netbox/extras/forms/bulk_edit.py:154 netbox/extras/forms/filtersets.py:187 +#: netbox/extras/models/models.py:409 msgid "MIME type" msgstr "Type MIME" -#: extras/forms/bulk_edit.py:159 extras/forms/filtersets.py:190 +#: netbox/extras/forms/bulk_edit.py:159 netbox/extras/forms/filtersets.py:190 msgid "File extension" msgstr "Extension de fichier" -#: extras/forms/bulk_edit.py:164 extras/forms/filtersets.py:194 +#: netbox/extras/forms/bulk_edit.py:164 netbox/extras/forms/filtersets.py:194 msgid "As attachment" msgstr "En pièce jointe" -#: extras/forms/bulk_edit.py:192 extras/forms/filtersets.py:236 -#: extras/tables/tables.py:256 templates/extras/savedfilter.html:29 +#: netbox/extras/forms/bulk_edit.py:192 netbox/extras/forms/filtersets.py:236 +#: netbox/extras/tables/tables.py:256 +#: netbox/templates/extras/savedfilter.html:29 msgid "Shared" msgstr "Partagé" -#: extras/forms/bulk_edit.py:215 extras/forms/filtersets.py:265 -#: extras/models/models.py:174 +#: netbox/extras/forms/bulk_edit.py:215 netbox/extras/forms/filtersets.py:265 +#: netbox/extras/models/models.py:174 msgid "HTTP method" msgstr "Méthode HTTP" -#: extras/forms/bulk_edit.py:219 extras/forms/filtersets.py:259 -#: templates/extras/webhook.html:30 +#: netbox/extras/forms/bulk_edit.py:219 netbox/extras/forms/filtersets.py:259 +#: netbox/templates/extras/webhook.html:30 msgid "Payload URL" msgstr "URL de charge utile" -#: extras/forms/bulk_edit.py:224 extras/models/models.py:214 +#: netbox/extras/forms/bulk_edit.py:224 netbox/extras/models/models.py:214 msgid "SSL verification" msgstr "Vérification SSL" -#: extras/forms/bulk_edit.py:227 templates/extras/webhook.html:38 +#: netbox/extras/forms/bulk_edit.py:227 +#: netbox/templates/extras/webhook.html:38 msgid "Secret" msgstr "Secret" -#: extras/forms/bulk_edit.py:232 +#: netbox/extras/forms/bulk_edit.py:232 msgid "CA file path" msgstr "chemin du fichier CA" -#: extras/forms/bulk_edit.py:253 extras/forms/bulk_import.py:192 -#: extras/forms/model_forms.py:377 +#: netbox/extras/forms/bulk_edit.py:253 netbox/extras/forms/bulk_import.py:192 +#: netbox/extras/forms/model_forms.py:377 msgid "Event types" msgstr "Types d'événements" -#: extras/forms/bulk_edit.py:293 +#: netbox/extras/forms/bulk_edit.py:293 msgid "Is active" msgstr "Est actif" -#: extras/forms/bulk_import.py:37 extras/forms/bulk_import.py:118 -#: extras/forms/bulk_import.py:139 extras/forms/bulk_import.py:162 -#: extras/forms/bulk_import.py:186 extras/forms/filtersets.py:137 -#: extras/forms/filtersets.py:224 extras/forms/model_forms.py:47 -#: extras/forms/model_forms.py:205 extras/forms/model_forms.py:237 -#: extras/forms/model_forms.py:278 extras/forms/model_forms.py:372 -#: extras/forms/model_forms.py:489 users/forms/model_forms.py:276 +#: netbox/extras/forms/bulk_import.py:37 +#: netbox/extras/forms/bulk_import.py:118 +#: 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/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/users/forms/model_forms.py:276 msgid "Object types" msgstr "Types d'objets" -#: extras/forms/bulk_import.py:39 extras/forms/bulk_import.py:120 -#: extras/forms/bulk_import.py:141 extras/forms/bulk_import.py:164 -#: extras/forms/bulk_import.py:188 tenancy/forms/bulk_import.py:96 +#: netbox/extras/forms/bulk_import.py:39 +#: netbox/extras/forms/bulk_import.py:120 +#: netbox/extras/forms/bulk_import.py:141 +#: netbox/extras/forms/bulk_import.py:164 +#: netbox/extras/forms/bulk_import.py:188 +#: netbox/tenancy/forms/bulk_import.py:96 msgid "One or more assigned object types" msgstr "Un ou plusieurs types d'objets attribués" -#: extras/forms/bulk_import.py:44 +#: netbox/extras/forms/bulk_import.py:44 msgid "Field data type (e.g. text, integer, etc.)" msgstr "Type de données de champ (par exemple texte, entier, etc.)" -#: extras/forms/bulk_import.py:47 extras/forms/filtersets.py:208 -#: extras/forms/filtersets.py:281 extras/forms/model_forms.py:304 -#: extras/forms/model_forms.py:341 tenancy/forms/filtersets.py:92 +#: 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/tenancy/forms/filtersets.py:92 msgid "Object type" msgstr "Type d'objet" -#: extras/forms/bulk_import.py:50 +#: netbox/extras/forms/bulk_import.py:50 msgid "Object type (for object or multi-object fields)" msgstr "Type d'objet (pour les champs d'objets ou multi-objets)" -#: extras/forms/bulk_import.py:53 extras/forms/filtersets.py:84 +#: netbox/extras/forms/bulk_import.py:53 netbox/extras/forms/filtersets.py:84 msgid "Choice set" msgstr "Coffret Choice" -#: extras/forms/bulk_import.py:57 +#: netbox/extras/forms/bulk_import.py:57 msgid "Choice set (for selection fields)" msgstr "Set de choix (pour les champs de sélection)" -#: extras/forms/bulk_import.py:63 +#: netbox/extras/forms/bulk_import.py:63 msgid "Whether the custom field is displayed in the UI" msgstr "Si le champ personnalisé est affiché dans l'interface utilisateur" -#: extras/forms/bulk_import.py:69 +#: netbox/extras/forms/bulk_import.py:69 msgid "Whether the custom field is editable in the UI" msgstr "Si le champ personnalisé est modifiable dans l'interface utilisateur" -#: extras/forms/bulk_import.py:85 +#: netbox/extras/forms/bulk_import.py:85 msgid "The base set of predefined choices to use (if any)" msgstr "L'ensemble de base de choix prédéfinis à utiliser (le cas échéant)" -#: extras/forms/bulk_import.py:91 +#: netbox/extras/forms/bulk_import.py:91 msgid "" "Quoted string of comma-separated field choices with optional labels " "separated by colon: \"choice1:First Choice,choice2:Second Choice\"" @@ -7258,186 +7822,202 @@ msgstr "" "virgules avec des libellés facultatifs séparés par deux points : " "« Choice1:First Choice, Choice2:Second Choice »" -#: extras/forms/bulk_import.py:123 extras/models/models.py:323 +#: netbox/extras/forms/bulk_import.py:123 netbox/extras/models/models.py:323 msgid "button class" msgstr "classe de boutons" -#: extras/forms/bulk_import.py:126 extras/models/models.py:327 +#: netbox/extras/forms/bulk_import.py:126 netbox/extras/models/models.py:327 msgid "" "The class of the first link in a group will be used for the dropdown button" msgstr "" "La classe du premier lien d'un groupe sera utilisée pour le bouton déroulant" -#: extras/forms/bulk_import.py:193 +#: netbox/extras/forms/bulk_import.py:193 msgid "The event type(s) which will trigger this rule" msgstr "Le ou les types d'événements qui déclencheront cette règle" -#: extras/forms/bulk_import.py:196 +#: netbox/extras/forms/bulk_import.py:196 msgid "Action object" msgstr "Objet d'action" -#: extras/forms/bulk_import.py:198 +#: netbox/extras/forms/bulk_import.py:198 msgid "Webhook name or script as dotted path module.Class" msgstr "Nom du webhook ou script sous forme de chemin pointillé module.Class" -#: extras/forms/bulk_import.py:219 +#: netbox/extras/forms/bulk_import.py:219 #, python-brace-format msgid "Webhook {name} not found" msgstr "Webhook {name} introuvable" -#: extras/forms/bulk_import.py:228 +#: netbox/extras/forms/bulk_import.py:228 #, python-brace-format msgid "Script {name} not found" msgstr "Scénario {name} introuvable" -#: extras/forms/bulk_import.py:244 +#: netbox/extras/forms/bulk_import.py:244 msgid "Assigned object type" msgstr "Type d'objet attribué" -#: extras/forms/bulk_import.py:249 +#: netbox/extras/forms/bulk_import.py:249 msgid "The classification of entry" msgstr "La classification de l'entrée" -#: extras/forms/bulk_import.py:261 extras/forms/model_forms.py:320 -#: netbox/navigation/menu.py:390 templates/extras/notificationgroup.html:41 -#: templates/users/group.html:29 users/forms/model_forms.py:236 -#: users/forms/model_forms.py:248 users/forms/model_forms.py:300 -#: users/tables.py:102 +#: netbox/extras/forms/bulk_import.py:261 +#: netbox/extras/forms/model_forms.py:320 netbox/netbox/navigation/menu.py:390 +#: 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 +#: netbox/users/tables.py:102 msgid "Users" msgstr "Utilisateurs" -#: extras/forms/bulk_import.py:265 +#: netbox/extras/forms/bulk_import.py:265 msgid "User names separated by commas, encased with double quotes" msgstr "" "Noms d'utilisateur séparés par des virgules, encadrés par des guillemets" -#: extras/forms/bulk_import.py:268 extras/forms/model_forms.py:315 -#: netbox/navigation/menu.py:410 templates/extras/notificationgroup.html:31 -#: users/forms/model_forms.py:181 users/forms/model_forms.py:193 -#: users/forms/model_forms.py:305 users/tables.py:35 users/tables.py:106 +#: netbox/extras/forms/bulk_import.py:268 +#: netbox/extras/forms/model_forms.py:315 netbox/netbox/navigation/menu.py:410 +#: 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 +#: netbox/users/tables.py:106 msgid "Groups" msgstr "Groupes" -#: extras/forms/bulk_import.py:272 +#: netbox/extras/forms/bulk_import.py:272 msgid "Group names separated by commas, encased with double quotes" msgstr "Noms de groupes séparés par des virgules, entre guillemets doubles" -#: extras/forms/filtersets.py:52 extras/forms/model_forms.py:56 +#: netbox/extras/forms/filtersets.py:52 netbox/extras/forms/model_forms.py:56 msgid "Related object type" msgstr "Type d'objet associé" -#: extras/forms/filtersets.py:57 +#: netbox/extras/forms/filtersets.py:57 msgid "Field type" msgstr "Type de champ" -#: extras/forms/filtersets.py:120 extras/forms/model_forms.py:157 -#: extras/tables/tables.py:91 templates/generic/bulk_import.html:154 +#: netbox/extras/forms/filtersets.py:120 +#: netbox/extras/forms/model_forms.py:157 netbox/extras/tables/tables.py:91 +#: netbox/templates/generic/bulk_import.html:154 msgid "Choices" msgstr "Choix" -#: extras/forms/filtersets.py:164 extras/forms/filtersets.py:319 -#: extras/forms/filtersets.py:408 extras/forms/model_forms.py:572 -#: templates/core/job.html:96 templates/extras/eventrule.html:84 +#: 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/templates/extras/eventrule.html:84 msgid "Data" msgstr "Données" -#: extras/forms/filtersets.py:175 extras/forms/filtersets.py:333 -#: extras/forms/filtersets.py:418 netbox/choices.py:130 -#: utilities/forms/bulk_import.py:26 +#: netbox/extras/forms/filtersets.py:175 netbox/extras/forms/filtersets.py:333 +#: netbox/extras/forms/filtersets.py:418 netbox/netbox/choices.py:130 +#: netbox/utilities/forms/bulk_import.py:26 msgid "Data file" msgstr "Fichier de données" -#: extras/forms/filtersets.py:183 +#: netbox/extras/forms/filtersets.py:183 msgid "Content types" msgstr "Types de contenu" -#: extras/forms/filtersets.py:255 extras/models/models.py:179 +#: netbox/extras/forms/filtersets.py:255 netbox/extras/models/models.py:179 msgid "HTTP content type" msgstr "Type de contenu HTTP" -#: extras/forms/filtersets.py:286 +#: netbox/extras/forms/filtersets.py:286 msgid "Event type" msgstr "Type d'événement" -#: extras/forms/filtersets.py:291 +#: netbox/extras/forms/filtersets.py:291 msgid "Action type" msgstr "Type d'action" -#: extras/forms/filtersets.py:307 +#: netbox/extras/forms/filtersets.py:307 msgid "Tagged object type" -msgstr "Type d'objet balisé" +msgstr "Type d'objet étiqueté" -#: extras/forms/filtersets.py:312 +#: netbox/extras/forms/filtersets.py:312 msgid "Allowed object type" msgstr "Type d'objet autorisé" -#: extras/forms/filtersets.py:341 extras/forms/model_forms.py:507 -#: netbox/navigation/menu.py:18 +#: netbox/extras/forms/filtersets.py:341 +#: netbox/extras/forms/model_forms.py:507 netbox/netbox/navigation/menu.py:18 msgid "Regions" msgstr "Régions" -#: extras/forms/filtersets.py:346 extras/forms/model_forms.py:512 +#: netbox/extras/forms/filtersets.py:346 +#: netbox/extras/forms/model_forms.py:512 msgid "Site groups" msgstr "Groupes de sites" -#: extras/forms/filtersets.py:356 extras/forms/model_forms.py:522 -#: netbox/navigation/menu.py:20 templates/dcim/site.html:127 +#: netbox/extras/forms/filtersets.py:356 +#: netbox/extras/forms/model_forms.py:522 netbox/netbox/navigation/menu.py:20 +#: netbox/templates/dcim/site.html:127 msgid "Locations" msgstr "Localisations" -#: extras/forms/filtersets.py:361 extras/forms/model_forms.py:527 +#: netbox/extras/forms/filtersets.py:361 +#: netbox/extras/forms/model_forms.py:527 msgid "Device types" msgstr "Types d'appareils" -#: extras/forms/filtersets.py:366 extras/forms/model_forms.py:532 +#: netbox/extras/forms/filtersets.py:366 +#: netbox/extras/forms/model_forms.py:532 msgid "Roles" msgstr "Rôles" -#: extras/forms/filtersets.py:376 extras/forms/model_forms.py:542 +#: netbox/extras/forms/filtersets.py:376 +#: netbox/extras/forms/model_forms.py:542 msgid "Cluster types" msgstr "Types de clusters" -#: extras/forms/filtersets.py:381 extras/forms/model_forms.py:547 +#: netbox/extras/forms/filtersets.py:381 +#: netbox/extras/forms/model_forms.py:547 msgid "Cluster groups" msgstr "Groupes de clusters" -#: extras/forms/filtersets.py:386 extras/forms/model_forms.py:552 -#: netbox/navigation/menu.py:255 netbox/navigation/menu.py:257 -#: templates/virtualization/clustertype.html:30 -#: virtualization/tables/clusters.py:23 virtualization/tables/clusters.py:45 +#: 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/templates/virtualization/clustertype.html:30 +#: netbox/virtualization/tables/clusters.py:23 +#: netbox/virtualization/tables/clusters.py:45 msgid "Clusters" msgstr "Clusters" -#: extras/forms/filtersets.py:391 extras/forms/model_forms.py:557 +#: netbox/extras/forms/filtersets.py:391 +#: netbox/extras/forms/model_forms.py:557 msgid "Tenant groups" msgstr "Groupes de locataires" -#: extras/forms/model_forms.py:49 +#: netbox/extras/forms/model_forms.py:49 msgid "The type(s) of object that have this custom field" msgstr "Le ou les types d'objets dotés de ce champ personnalisé" -#: extras/forms/model_forms.py:52 +#: netbox/extras/forms/model_forms.py:52 msgid "Default value" msgstr "Valeur par défaut" -#: extras/forms/model_forms.py:58 +#: netbox/extras/forms/model_forms.py:58 msgid "Type of the related object (for object/multi-object fields only)" msgstr "" "Type de l'objet associé (pour les champs objet/multi-objets uniquement)" -#: extras/forms/model_forms.py:61 templates/extras/customfield.html:60 +#: netbox/extras/forms/model_forms.py:61 +#: netbox/templates/extras/customfield.html:60 msgid "Related object filter" msgstr "Filtre d'objets associés" -#: extras/forms/model_forms.py:63 +#: netbox/extras/forms/model_forms.py:63 msgid "Specify query parameters as a JSON object." msgstr "Spécifiez les paramètres de requête sous la forme d'un objet JSON." -#: extras/forms/model_forms.py:73 templates/extras/customfield.html:10 +#: netbox/extras/forms/model_forms.py:73 +#: netbox/templates/extras/customfield.html:10 msgid "Custom Field" msgstr "Champ personnalisé" -#: extras/forms/model_forms.py:85 +#: netbox/extras/forms/model_forms.py:85 msgid "" "The type of data stored in this field. For object/multi-object fields, " "select the related object type below." @@ -7445,7 +8025,7 @@ msgstr "" "Le type de données stockées dans ce champ. Pour les champs objet/multi-" "objets, sélectionnez le type d'objet associé ci-dessous." -#: extras/forms/model_forms.py:88 +#: netbox/extras/forms/model_forms.py:88 msgid "" "This will be displayed as help text for the form field. Markdown is " "supported." @@ -7453,11 +8033,11 @@ msgstr "" "Cela sera affiché sous forme de texte d'aide pour le champ du formulaire. " "Markdown est pris en charge." -#: extras/forms/model_forms.py:143 +#: netbox/extras/forms/model_forms.py:143 msgid "Related Object" msgstr "Objet associé" -#: extras/forms/model_forms.py:169 +#: netbox/extras/forms/model_forms.py:169 msgid "" "Enter one choice per line. An optional label may be specified for each " "choice by appending it with a colon. Example:" @@ -7465,15 +8045,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 :" -#: extras/forms/model_forms.py:212 templates/extras/customlink.html:10 +#: netbox/extras/forms/model_forms.py:212 +#: netbox/templates/extras/customlink.html:10 msgid "Custom Link" msgstr "Lien personnalisé" -#: extras/forms/model_forms.py:214 +#: netbox/extras/forms/model_forms.py:214 msgid "Templates" msgstr "Modèles" -#: extras/forms/model_forms.py:226 +#: netbox/extras/forms/model_forms.py:226 #, python-brace-format msgid "" "Jinja2 template code for the link text. Reference the object as {example}. " @@ -7483,62 +8064,68 @@ msgstr "" "{example}. Les liens qui s'affichent sous forme de texte vide ne seront pas " "affichés." -#: extras/forms/model_forms.py:230 +#: netbox/extras/forms/model_forms.py:230 #, 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}." -#: extras/forms/model_forms.py:241 extras/forms/model_forms.py:624 +#: netbox/extras/forms/model_forms.py:241 +#: netbox/extras/forms/model_forms.py:624 msgid "Template code" msgstr "Code du modèle" -#: extras/forms/model_forms.py:247 templates/extras/exporttemplate.html:12 +#: netbox/extras/forms/model_forms.py:247 +#: netbox/templates/extras/exporttemplate.html:12 msgid "Export Template" msgstr "Modèle d'exportation" -#: extras/forms/model_forms.py:249 +#: netbox/extras/forms/model_forms.py:249 msgid "Rendering" msgstr "Rendu" -#: extras/forms/model_forms.py:263 extras/forms/model_forms.py:649 +#: netbox/extras/forms/model_forms.py:263 +#: netbox/extras/forms/model_forms.py:649 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." -#: extras/forms/model_forms.py:270 extras/forms/model_forms.py:656 +#: netbox/extras/forms/model_forms.py:270 +#: netbox/extras/forms/model_forms.py:656 msgid "Must specify either local content or a data file" msgstr "Doit spécifier un contenu local ou un fichier de données" -#: extras/forms/model_forms.py:284 netbox/forms/mixins.py:70 -#: templates/extras/savedfilter.html:10 +#: netbox/extras/forms/model_forms.py:284 netbox/netbox/forms/mixins.py:70 +#: netbox/templates/extras/savedfilter.html:10 msgid "Saved Filter" msgstr "Filtre enregistré" -#: extras/forms/model_forms.py:334 +#: netbox/extras/forms/model_forms.py:334 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." -#: extras/forms/model_forms.py:356 templates/extras/webhook.html:23 +#: netbox/extras/forms/model_forms.py:356 +#: netbox/templates/extras/webhook.html:23 msgid "HTTP Request" msgstr "Requête HTTP" -#: extras/forms/model_forms.py:358 templates/extras/webhook.html:44 +#: netbox/extras/forms/model_forms.py:358 +#: netbox/templates/extras/webhook.html:44 msgid "SSL" msgstr "SLL" -#: extras/forms/model_forms.py:380 +#: netbox/extras/forms/model_forms.py:380 msgid "Action choice" msgstr "Choix de l'action" -#: extras/forms/model_forms.py:385 +#: netbox/extras/forms/model_forms.py:385 msgid "Enter conditions in JSON format." msgstr "Entrez les conditions dans JSON format." -#: extras/forms/model_forms.py:389 +#: netbox/extras/forms/model_forms.py:389 msgid "" "Enter parameters to pass to the action in JSON format." @@ -7546,117 +8133,119 @@ msgstr "" "Entrez les paramètres à transmettre à l'action dans JSON format." -#: extras/forms/model_forms.py:394 templates/extras/eventrule.html:10 +#: netbox/extras/forms/model_forms.py:394 +#: netbox/templates/extras/eventrule.html:10 msgid "Event Rule" msgstr "Règle de l'événement" -#: extras/forms/model_forms.py:395 +#: netbox/extras/forms/model_forms.py:395 msgid "Triggers" msgstr "éléments déclencheurs" -#: extras/forms/model_forms.py:442 +#: netbox/extras/forms/model_forms.py:442 msgid "Notification group" msgstr "Groupe de notifications" -#: extras/forms/model_forms.py:562 netbox/navigation/menu.py:26 -#: tenancy/tables/tenants.py:22 +#: netbox/extras/forms/model_forms.py:562 netbox/netbox/navigation/menu.py:26 +#: netbox/tenancy/tables/tenants.py:22 msgid "Tenants" msgstr "Locataires" -#: extras/forms/model_forms.py:606 +#: netbox/extras/forms/model_forms.py:606 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." -#: extras/forms/model_forms.py:612 +#: netbox/extras/forms/model_forms.py:612 msgid "Must specify either local data or a data file" msgstr "Doit spécifier des données locales ou un fichier de données" -#: extras/forms/model_forms.py:631 templates/core/datafile.html:55 +#: netbox/extras/forms/model_forms.py:631 +#: netbox/templates/core/datafile.html:55 msgid "Content" msgstr "Contenu" -#: extras/forms/reports.py:17 extras/forms/scripts.py:23 +#: netbox/extras/forms/reports.py:17 netbox/extras/forms/scripts.py:23 msgid "Schedule at" msgstr "Horaire à" -#: extras/forms/reports.py:18 +#: netbox/extras/forms/reports.py:18 msgid "Schedule execution of report to a set time" msgstr "Planifier l'exécution du rapport à une heure définie" -#: extras/forms/reports.py:23 extras/forms/scripts.py:29 +#: netbox/extras/forms/reports.py:23 netbox/extras/forms/scripts.py:29 msgid "Recurs every" msgstr "Récurrent chaque fois" -#: extras/forms/reports.py:27 +#: netbox/extras/forms/reports.py:27 msgid "Interval at which this report is re-run (in minutes)" msgstr "Intervalle auquel ce rapport est réexécuté (en minutes)" -#: extras/forms/reports.py:35 extras/forms/scripts.py:41 +#: netbox/extras/forms/reports.py:35 netbox/extras/forms/scripts.py:41 #, python-brace-format msgid " (current time: {now})" msgstr " (heure actuelle : {now})" -#: extras/forms/reports.py:45 extras/forms/scripts.py:51 +#: netbox/extras/forms/reports.py:45 netbox/extras/forms/scripts.py:51 msgid "Scheduled time must be in the future." msgstr "L'heure prévue doit se situer dans le futur." -#: extras/forms/scripts.py:17 +#: netbox/extras/forms/scripts.py:17 msgid "Commit changes" msgstr "Valider les modifications" -#: extras/forms/scripts.py:18 +#: netbox/extras/forms/scripts.py:18 msgid "Commit changes to the database (uncheck for a dry-run)" msgstr "" "Validez les modifications apportées à la base de données (décochez cette " "case pour une exécution à sec)" -#: extras/forms/scripts.py:24 +#: netbox/extras/forms/scripts.py:24 msgid "Schedule execution of script to a set time" msgstr "Planifier l'exécution du script à une heure définie" -#: extras/forms/scripts.py:33 +#: netbox/extras/forms/scripts.py:33 msgid "Interval at which this script is re-run (in minutes)" msgstr "Intervalle auquel ce script est réexécuté (en minutes)" -#: extras/jobs.py:49 +#: netbox/extras/jobs.py:47 msgid "Database changes have been reverted automatically." msgstr "" "Les modifications apportées à la base de données ont été annulées " "automatiquement." -#: extras/jobs.py:55 +#: netbox/extras/jobs.py:53 msgid "Script aborted with error: " msgstr "Le script a été abandonné avec une erreur : " -#: extras/jobs.py:65 +#: netbox/extras/jobs.py:63 msgid "An exception occurred: " msgstr "Une exception s'est produite : " -#: extras/jobs.py:70 +#: netbox/extras/jobs.py:68 msgid "Database changes have been reverted due to error." msgstr "" "Les modifications apportées à la base de données ont été annulées en raison " "d'une erreur." -#: extras/management/commands/reindex.py:66 +#: netbox/extras/management/commands/reindex.py:66 msgid "No indexers found!" msgstr "Aucun indexeur n'a été trouvé !" -#: extras/models/configs.py:130 +#: netbox/extras/models/configs.py:130 msgid "config context" msgstr "contexte de configuration" -#: extras/models/configs.py:131 +#: netbox/extras/models/configs.py:131 msgid "config contexts" msgstr "contextes de configuration" -#: extras/models/configs.py:149 extras/models/configs.py:205 +#: netbox/extras/models/configs.py:149 netbox/extras/models/configs.py:205 msgid "JSON data must be in object form. Example:" msgstr "Les données JSON doivent être sous forme d'objet. Exemple :" -#: extras/models/configs.py:169 +#: netbox/extras/models/configs.py:169 msgid "" "Local config context data takes precedence over source contexts in the final" " rendered config context" @@ -7664,19 +8253,19 @@ msgstr "" "Les données du contexte de configuration local ont priorité sur les " "contextes source dans le contexte de configuration final rendu" -#: extras/models/configs.py:224 +#: netbox/extras/models/configs.py:224 msgid "template code" msgstr "code du modèle" -#: extras/models/configs.py:225 +#: netbox/extras/models/configs.py:225 msgid "Jinja2 template code." msgstr "Code du modèle Jinja2." -#: extras/models/configs.py:228 +#: netbox/extras/models/configs.py:228 msgid "environment parameters" msgstr "paramètres d'environnement" -#: extras/models/configs.py:233 +#: netbox/extras/models/configs.py:233 msgid "" "Any additional" @@ -7687,44 +8276,44 @@ msgstr "" " supplémentaires à passer lors de la construction de l'environnement " "Jinja2." -#: extras/models/configs.py:240 +#: netbox/extras/models/configs.py:240 msgid "config template" msgstr "modèle de configuration" -#: extras/models/configs.py:241 +#: netbox/extras/models/configs.py:241 msgid "config templates" msgstr "modèles de configuration" -#: extras/models/customfields.py:75 +#: netbox/extras/models/customfields.py:75 msgid "The object(s) to which this field applies." msgstr "Le ou les objets auxquels ce champ s'applique." -#: extras/models/customfields.py:82 +#: netbox/extras/models/customfields.py:82 msgid "The type of data this custom field holds" msgstr "Le type de données que contient ce champ personnalisé" -#: extras/models/customfields.py:89 +#: netbox/extras/models/customfields.py:89 msgid "The type of NetBox object this field maps to (for object fields)" msgstr "" "Le type d'objet NetBox auquel ce champ correspond (pour les champs d'objets)" -#: extras/models/customfields.py:95 +#: netbox/extras/models/customfields.py:95 msgid "Internal field name" msgstr "Nom du champ interne" -#: extras/models/customfields.py:99 +#: netbox/extras/models/customfields.py:99 msgid "Only alphanumeric characters and underscores are allowed." msgstr "" "Seuls les caractères alphanumériques et les traits de soulignement sont " "autorisés." -#: extras/models/customfields.py:104 +#: netbox/extras/models/customfields.py:104 msgid "Double underscores are not permitted in custom field names." msgstr "" "Les doubles soulignements ne sont pas autorisés dans les noms de champs " "personnalisés." -#: extras/models/customfields.py:115 +#: netbox/extras/models/customfields.py:115 msgid "" "Name of the field as displayed to users (if not provided, 'the field's name " "will be used)" @@ -7732,19 +8321,19 @@ msgstr "" "Nom du champ tel qu'il est affiché aux utilisateurs (s'il n'est pas fourni, " "« le nom du champ sera utilisé) »" -#: extras/models/customfields.py:119 extras/models/models.py:317 +#: netbox/extras/models/customfields.py:119 netbox/extras/models/models.py:317 msgid "group name" msgstr "nom du groupe" -#: extras/models/customfields.py:122 +#: netbox/extras/models/customfields.py:122 msgid "Custom fields within the same group will be displayed together" msgstr "Les champs personnalisés d'un même groupe seront affichés ensemble" -#: extras/models/customfields.py:130 +#: netbox/extras/models/customfields.py:130 msgid "required" msgstr "requis" -#: extras/models/customfields.py:132 +#: netbox/extras/models/customfields.py:132 msgid "" "This field is required when creating new objects or editing an existing " "object." @@ -7752,19 +8341,19 @@ msgstr "" "Ce champ est obligatoire lors de la création de nouveaux objets ou de la " "modification d'un objet existant." -#: extras/models/customfields.py:135 +#: netbox/extras/models/customfields.py:135 msgid "must be unique" msgstr "doit être unique" -#: extras/models/customfields.py:137 +#: netbox/extras/models/customfields.py:137 msgid "The value of this field must be unique for the assigned object" msgstr "La valeur de ce champ doit être unique pour l'objet attribué" -#: extras/models/customfields.py:140 +#: netbox/extras/models/customfields.py:140 msgid "search weight" msgstr "poids de recherche" -#: extras/models/customfields.py:143 +#: netbox/extras/models/customfields.py:143 msgid "" "Weighting for search. Lower values are considered more important. Fields " "with a search weight of zero will be ignored." @@ -7773,11 +8362,11 @@ msgstr "" "comme plus importantes. Les champs dont le poids de recherche est nul seront" " ignorés." -#: extras/models/customfields.py:148 +#: netbox/extras/models/customfields.py:148 msgid "filter logic" msgstr "logique de filtrage" -#: extras/models/customfields.py:152 +#: netbox/extras/models/customfields.py:152 msgid "" "Loose matches any instance of a given string; exact matches the entire " "field." @@ -7785,11 +8374,11 @@ msgstr "" "Loose correspond à n'importe quelle instance d'une chaîne donnée ; " "correspond exactement à l'ensemble du champ." -#: extras/models/customfields.py:155 +#: netbox/extras/models/customfields.py:155 msgid "default" msgstr "défaut" -#: extras/models/customfields.py:159 +#: netbox/extras/models/customfields.py:159 msgid "" "Default value for the field (must be a JSON value). Encapsulate strings with" " double quotes (e.g. \"Foo\")." @@ -7797,7 +8386,7 @@ msgstr "" "Valeur par défaut pour le champ (doit être une valeur JSON). Encapsulez des " "chaînes avec des guillemets doubles (par exemple, « Foo »)." -#: extras/models/customfields.py:166 +#: netbox/extras/models/customfields.py:166 msgid "" "Filter the object selection choices using a query_params dict (must be a " "JSON value).Encapsulate strings with double quotes (e.g. \"Foo\")." @@ -7806,37 +8395,37 @@ msgstr "" "(doit être une valeur JSON). Encapsulez les chaînes avec des guillemets " "doubles (par exemple « Foo »)." -#: extras/models/customfields.py:172 +#: netbox/extras/models/customfields.py:172 msgid "display weight" msgstr "poids de l'écran" -#: extras/models/customfields.py:173 +#: netbox/extras/models/customfields.py:173 msgid "Fields with higher weights appear lower in a form." msgstr "" "Les champs dont le poids est plus élevé apparaissent plus bas dans un " "formulaire." -#: extras/models/customfields.py:178 +#: netbox/extras/models/customfields.py:178 msgid "minimum value" msgstr "valeur minimale" -#: extras/models/customfields.py:179 +#: netbox/extras/models/customfields.py:179 msgid "Minimum allowed value (for numeric fields)" msgstr "Valeur minimale autorisée (pour les champs numériques)" -#: extras/models/customfields.py:184 +#: netbox/extras/models/customfields.py:184 msgid "maximum value" msgstr "valeur maximale" -#: extras/models/customfields.py:185 +#: netbox/extras/models/customfields.py:185 msgid "Maximum allowed value (for numeric fields)" msgstr "Valeur maximale autorisée (pour les champs numériques)" -#: extras/models/customfields.py:191 +#: netbox/extras/models/customfields.py:191 msgid "validation regex" msgstr "regex de validation" -#: extras/models/customfields.py:193 +#: netbox/extras/models/customfields.py:193 #, python-brace-format msgid "" "Regular expression to enforce on text field values. Use ^ and $ to force " @@ -7848,197 +8437,199 @@ msgstr "" "exemple, ^ [DE A À Z]{3}$ limitera les valeurs à exactement " "trois lettres majuscules." -#: extras/models/customfields.py:201 +#: netbox/extras/models/customfields.py:201 msgid "choice set" msgstr "set de choix" -#: extras/models/customfields.py:210 +#: netbox/extras/models/customfields.py:210 msgid "Specifies whether the custom field is displayed in the UI" msgstr "" "Indique si le champ personnalisé est affiché dans l'interface utilisateur" -#: extras/models/customfields.py:217 +#: netbox/extras/models/customfields.py:217 msgid "Specifies whether the custom field value can be edited in the UI" msgstr "" "Indique si la valeur du champ personnalisé peut être modifiée dans " "l'interface utilisateur" -#: extras/models/customfields.py:221 +#: netbox/extras/models/customfields.py:221 msgid "is cloneable" msgstr "est clonable" -#: extras/models/customfields.py:222 +#: netbox/extras/models/customfields.py:222 msgid "Replicate this value when cloning objects" msgstr "Répliquez cette valeur lors du clonage d'objets" -#: extras/models/customfields.py:239 +#: netbox/extras/models/customfields.py:239 msgid "custom field" msgstr "champ personnalisé" -#: extras/models/customfields.py:240 +#: netbox/extras/models/customfields.py:240 msgid "custom fields" msgstr "champs personnalisés" -#: extras/models/customfields.py:329 +#: netbox/extras/models/customfields.py:329 #, python-brace-format msgid "Invalid default value \"{value}\": {error}" msgstr "Valeur par défaut non valide »{value}« : {error}" -#: extras/models/customfields.py:336 +#: netbox/extras/models/customfields.py:336 msgid "A minimum value may be set only for numeric fields" msgstr "" "Une valeur minimale ne peut être définie que pour les champs numériques" -#: extras/models/customfields.py:338 +#: netbox/extras/models/customfields.py:338 msgid "A maximum value may be set only for numeric fields" msgstr "" "Une valeur maximale ne peut être définie que pour les champs numériques" -#: extras/models/customfields.py:348 +#: netbox/extras/models/customfields.py:348 msgid "" "Regular expression validation is supported only for text and URL fields" msgstr "" "La validation des expressions régulières est prise en charge uniquement pour" " les champs de texte et d'URL" -#: extras/models/customfields.py:354 +#: netbox/extras/models/customfields.py:354 msgid "Uniqueness cannot be enforced for boolean fields" msgstr "L'unicité ne peut pas être appliquée aux champs booléens" -#: extras/models/customfields.py:364 +#: netbox/extras/models/customfields.py:364 msgid "Selection fields must specify a set of choices." msgstr "Les champs de sélection doivent spécifier un ensemble de choix." -#: extras/models/customfields.py:368 +#: netbox/extras/models/customfields.py:368 msgid "Choices may be set only on selection fields." msgstr "Les choix ne peuvent être définis que sur les champs de sélection." -#: extras/models/customfields.py:375 +#: netbox/extras/models/customfields.py:375 msgid "Object fields must define an object type." msgstr "Les champs d'objet doivent définir un type d'objet." -#: extras/models/customfields.py:379 +#: netbox/extras/models/customfields.py:379 #, python-brace-format msgid "{type} fields may not define an object type." msgstr "{type} les champs ne peuvent pas définir de type d'objet." -#: extras/models/customfields.py:386 +#: netbox/extras/models/customfields.py:386 msgid "A related object filter can be defined only for object fields." msgstr "" "Un filtre d'objet associé ne peut être défini que pour les champs d'objets." -#: extras/models/customfields.py:390 +#: netbox/extras/models/customfields.py:390 msgid "Filter must be defined as a dictionary mapping attributes to values." msgstr "" "Le filtre doit être défini comme un dictionnaire faisant correspondre les " "attributs aux valeurs." -#: extras/models/customfields.py:469 +#: netbox/extras/models/customfields.py:469 msgid "True" msgstr "Vrai" -#: extras/models/customfields.py:470 +#: netbox/extras/models/customfields.py:470 msgid "False" msgstr "Faux" -#: extras/models/customfields.py:560 +#: netbox/extras/models/customfields.py:560 #, python-brace-format msgid "Values must match this regex: {regex}" msgstr "" "Les valeurs doivent correspondre à cette expression régulière : " "{regex}" -#: extras/models/customfields.py:654 +#: netbox/extras/models/customfields.py:654 msgid "Value must be a string." msgstr "La valeur doit être une chaîne." -#: extras/models/customfields.py:656 +#: netbox/extras/models/customfields.py:656 #, python-brace-format msgid "Value must match regex '{regex}'" msgstr "La valeur doit correspondre à « regex »{regex}'" -#: extras/models/customfields.py:661 +#: netbox/extras/models/customfields.py:661 msgid "Value must be an integer." msgstr "La valeur doit être un entier." -#: extras/models/customfields.py:664 extras/models/customfields.py:679 +#: netbox/extras/models/customfields.py:664 +#: netbox/extras/models/customfields.py:679 #, python-brace-format msgid "Value must be at least {minimum}" msgstr "La valeur doit être d'au moins {minimum}" -#: extras/models/customfields.py:668 extras/models/customfields.py:683 +#: netbox/extras/models/customfields.py:668 +#: netbox/extras/models/customfields.py:683 #, python-brace-format msgid "Value must not exceed {maximum}" msgstr "La valeur ne doit pas dépasser {maximum}" -#: extras/models/customfields.py:676 +#: netbox/extras/models/customfields.py:676 msgid "Value must be a decimal." msgstr "La valeur doit être une décimale." -#: extras/models/customfields.py:688 +#: netbox/extras/models/customfields.py:688 msgid "Value must be true or false." msgstr "La valeur doit être vraie ou fausse." -#: extras/models/customfields.py:696 +#: netbox/extras/models/customfields.py:696 msgid "Date values must be in ISO 8601 format (YYYY-MM-DD)." msgstr "Les valeurs de date doivent être au format ISO 8601 (AAAA-MM-JJ)." -#: extras/models/customfields.py:705 +#: netbox/extras/models/customfields.py:705 msgid "Date and time values must be in ISO 8601 format (YYYY-MM-DD HH:MM:SS)." msgstr "" "Les valeurs de date et d'heure doivent être au format ISO 8601 (YYYY-MM-DD " "HH:MM:SS)." -#: extras/models/customfields.py:712 +#: netbox/extras/models/customfields.py:712 #, python-brace-format msgid "Invalid choice ({value}) for choice set {choiceset}." msgstr "Choix non valide ({value}) pour le set de choix {choiceset}." -#: extras/models/customfields.py:722 +#: netbox/extras/models/customfields.py:722 #, python-brace-format msgid "Invalid choice(s) ({value}) for choice set {choiceset}." msgstr "Choix (s) non valide ({value}) pour le set de choix {choiceset}." -#: extras/models/customfields.py:731 +#: netbox/extras/models/customfields.py:731 #, python-brace-format msgid "Value must be an object ID, not {type}" msgstr "La valeur doit être un identifiant d'objet, et non {type}" -#: extras/models/customfields.py:737 +#: netbox/extras/models/customfields.py:737 #, python-brace-format msgid "Value must be a list of object IDs, not {type}" msgstr "La valeur doit être une liste d'identifiants d'objets, et non {type}" -#: extras/models/customfields.py:741 +#: netbox/extras/models/customfields.py:741 #, python-brace-format msgid "Found invalid object ID: {id}" msgstr "ID d'objet non valide trouvé : {id}" -#: extras/models/customfields.py:744 +#: netbox/extras/models/customfields.py:744 msgid "Required field cannot be empty." msgstr "Le champ obligatoire ne peut pas être vide." -#: extras/models/customfields.py:763 +#: netbox/extras/models/customfields.py:763 msgid "Base set of predefined choices (optional)" msgstr "Ensemble de base de choix prédéfinis (facultatif)" -#: extras/models/customfields.py:775 +#: netbox/extras/models/customfields.py:775 msgid "Choices are automatically ordered alphabetically" msgstr "Les choix sont automatiquement classés par ordre alphabétique" -#: extras/models/customfields.py:782 +#: netbox/extras/models/customfields.py:782 msgid "custom field choice set" msgstr "ensemble de choix de champs personnalisés" -#: extras/models/customfields.py:783 +#: netbox/extras/models/customfields.py:783 msgid "custom field choice sets" msgstr "ensembles de choix de champs personnalisés" -#: extras/models/customfields.py:825 +#: netbox/extras/models/customfields.py:825 msgid "Must define base or extra choices." msgstr "Doit définir des choix de base ou supplémentaires." -#: extras/models/customfields.py:849 +#: netbox/extras/models/customfields.py:849 #, python-brace-format msgid "" "Cannot remove choice {choice} as there are {model} objects which reference " @@ -8047,60 +8638,60 @@ msgstr "" "Impossible de supprimer le choix {choice} comme il y en a {model} objets qui" " y font référence." -#: extras/models/dashboard.py:18 +#: netbox/extras/models/dashboard.py:18 msgid "layout" msgstr "disposition" -#: extras/models/dashboard.py:22 +#: netbox/extras/models/dashboard.py:22 msgid "config" msgstr "config" -#: extras/models/dashboard.py:27 +#: netbox/extras/models/dashboard.py:27 msgid "dashboard" msgstr "tableau de bord" -#: extras/models/dashboard.py:28 +#: netbox/extras/models/dashboard.py:28 msgid "dashboards" msgstr "tableaux de bord" -#: extras/models/models.py:52 +#: netbox/extras/models/models.py:52 msgid "object types" msgstr "types d'objets" -#: extras/models/models.py:53 +#: netbox/extras/models/models.py:53 msgid "The object(s) to which this rule applies." msgstr "Le ou les objets auxquels cette règle s'applique." -#: extras/models/models.py:67 +#: netbox/extras/models/models.py:67 msgid "The types of event which will trigger this rule." msgstr "Les types d'événements qui déclencheront cette règle." -#: extras/models/models.py:74 +#: netbox/extras/models/models.py:74 msgid "conditions" msgstr "conditions" -#: extras/models/models.py:77 +#: netbox/extras/models/models.py:77 msgid "" "A set of conditions which determine whether the event will be generated." msgstr "Un ensemble de conditions qui déterminent si l'événement sera généré." -#: extras/models/models.py:85 +#: netbox/extras/models/models.py:85 msgid "action type" msgstr "type d'action" -#: extras/models/models.py:104 +#: netbox/extras/models/models.py:104 msgid "Additional data to pass to the action object" msgstr "Données supplémentaires à transmettre à l'objet d'action" -#: extras/models/models.py:116 +#: netbox/extras/models/models.py:116 msgid "event rule" msgstr "règle de l'événement" -#: extras/models/models.py:117 +#: netbox/extras/models/models.py:117 msgid "event rules" msgstr "règles de l'événement" -#: extras/models/models.py:166 +#: netbox/extras/models/models.py:166 msgid "" "This URL will be called using the HTTP method defined when the webhook is " "called. Jinja2 template processing is supported with the same context as the" @@ -8110,7 +8701,7 @@ msgstr "" "du webhook. Le traitement du modèle Jinja2 est pris en charge dans le même " "contexte que le corps de la requête." -#: extras/models/models.py:181 +#: netbox/extras/models/models.py:181 msgid "" "The complete list of official content types is available ici." -#: extras/models/models.py:186 +#: netbox/extras/models/models.py:186 msgid "additional headers" msgstr "en-têtes supplémentaires" -#: extras/models/models.py:189 +#: netbox/extras/models/models.py:189 msgid "" "User-supplied HTTP headers to be sent with the request in addition to the " "HTTP content type. Headers should be defined in the format Name: " @@ -8136,11 +8727,11 @@ msgstr "" "Nom : Value. Le traitement du modèle Jinja2 est pris en charge " "dans le même contexte que le corps de la requête (ci-dessous)." -#: extras/models/models.py:195 +#: netbox/extras/models/models.py:195 msgid "body template" msgstr "modèle de carrosserie" -#: extras/models/models.py:198 +#: netbox/extras/models/models.py:198 msgid "" "Jinja2 template for a custom request body. If blank, a JSON object " "representing the change will be included. Available context data includes: " @@ -8154,11 +8745,11 @@ msgstr "" "d'utilisateur, identifiant_demande, et " "données." -#: extras/models/models.py:204 +#: netbox/extras/models/models.py:204 msgid "secret" msgstr "secret" -#: extras/models/models.py:208 +#: netbox/extras/models/models.py:208 msgid "" "When provided, the request will include a X-Hook-Signature " "header containing a HMAC hex digest of the payload body using the secret as " @@ -8169,16 +8760,16 @@ msgstr "" "charge utile en utilisant le secret comme clé. Le secret n'est pas transmis " "dans la demande." -#: extras/models/models.py:215 +#: netbox/extras/models/models.py:215 msgid "Enable SSL certificate verification. Disable with caution!" msgstr "" "Activez la vérification des certificats SSL. Désactivez avec précaution !" -#: extras/models/models.py:221 templates/extras/webhook.html:51 +#: netbox/extras/models/models.py:221 netbox/templates/extras/webhook.html:51 msgid "CA File Path" msgstr "Chemin du fichier CA" -#: extras/models/models.py:223 +#: netbox/extras/models/models.py:223 msgid "" "The specific CA certificate file to use for SSL verification. Leave blank to" " use the system defaults." @@ -8186,65 +8777,65 @@ msgstr "" "Le fichier de certificat CA spécifique à utiliser pour la vérification SSL. " "Laissez ce champ vide pour utiliser les paramètres par défaut du système." -#: extras/models/models.py:234 +#: netbox/extras/models/models.py:234 msgid "webhook" msgstr "webhook" -#: extras/models/models.py:235 +#: netbox/extras/models/models.py:235 msgid "webhooks" msgstr "webhooks" -#: extras/models/models.py:253 +#: netbox/extras/models/models.py:253 msgid "Do not specify a CA certificate file if SSL verification is disabled." msgstr "" "Ne spécifiez pas de fichier de certificat CA si la vérification SSL est " "désactivée." -#: extras/models/models.py:293 +#: netbox/extras/models/models.py:293 msgid "The object type(s) to which this link applies." msgstr "Le ou les types d'objets auxquels ce lien s'applique." -#: extras/models/models.py:305 +#: netbox/extras/models/models.py:305 msgid "link text" msgstr "texte du lien" -#: extras/models/models.py:306 +#: netbox/extras/models/models.py:306 msgid "Jinja2 template code for link text" msgstr "Code modèle Jinja2 pour le texte du lien" -#: extras/models/models.py:309 +#: netbox/extras/models/models.py:309 msgid "link URL" msgstr "URL du lien" -#: extras/models/models.py:310 +#: netbox/extras/models/models.py:310 msgid "Jinja2 template code for link URL" msgstr "Code modèle Jinja2 pour l'URL du lien" -#: extras/models/models.py:320 +#: netbox/extras/models/models.py:320 msgid "Links with the same group will appear as a dropdown menu" msgstr "Les liens avec le même groupe apparaîtront dans un menu déroulant" -#: extras/models/models.py:330 +#: netbox/extras/models/models.py:330 msgid "new window" msgstr "nouvelle fenêtre" -#: extras/models/models.py:332 +#: netbox/extras/models/models.py:332 msgid "Force link to open in a new window" msgstr "Forcer l'ouverture du lien dans une nouvelle fenêtre" -#: extras/models/models.py:341 +#: netbox/extras/models/models.py:341 msgid "custom link" msgstr "lien personnalisé" -#: extras/models/models.py:342 +#: netbox/extras/models/models.py:342 msgid "custom links" msgstr "liens personnalisés" -#: extras/models/models.py:389 +#: netbox/extras/models/models.py:389 msgid "The object type(s) to which this template applies." msgstr "Le ou les types d'objets auxquels ce modèle s'applique." -#: extras/models/models.py:402 +#: netbox/extras/models/models.py:402 msgid "" "Jinja2 template code. The list of objects being exported is passed as a " "context variable named queryset." @@ -8252,1095 +8843,1161 @@ msgstr "" "Code du modèle Jinja2. La liste des objets exportés est transmise sous forme" " de variable de contexte nommée ensemble de requêtes." -#: extras/models/models.py:410 +#: netbox/extras/models/models.py:410 msgid "Defaults to text/plain; charset=utf-8" msgstr "" "La valeur par défaut est texte/plain ; jeu de caractères = " "utf-8" -#: extras/models/models.py:413 +#: netbox/extras/models/models.py:413 msgid "file extension" msgstr "extension de fichier" -#: extras/models/models.py:416 +#: netbox/extras/models/models.py:416 msgid "Extension to append to the rendered filename" msgstr "Extension à ajouter au nom de fichier affiché" -#: extras/models/models.py:419 +#: netbox/extras/models/models.py:419 msgid "as attachment" msgstr "en pièce jointe" -#: extras/models/models.py:421 +#: netbox/extras/models/models.py:421 msgid "Download file as attachment" msgstr "Télécharger le fichier en pièce jointe" -#: extras/models/models.py:430 +#: netbox/extras/models/models.py:430 msgid "export template" msgstr "modèle d'exportation" -#: extras/models/models.py:431 +#: netbox/extras/models/models.py:431 msgid "export templates" msgstr "modèles d'exportation" -#: extras/models/models.py:448 +#: netbox/extras/models/models.py:448 #, python-brace-format msgid "\"{name}\" is a reserved name. Please choose a different name." msgstr "«{name}« est un nom réservé. Veuillez choisir un autre nom." -#: extras/models/models.py:498 +#: netbox/extras/models/models.py:498 msgid "The object type(s) to which this filter applies." msgstr "Le ou les types d'objets auxquels ce filtre s'applique." -#: extras/models/models.py:530 +#: netbox/extras/models/models.py:530 msgid "shared" msgstr "partagé" -#: extras/models/models.py:543 +#: netbox/extras/models/models.py:543 msgid "saved filter" msgstr "filtre enregistré" -#: extras/models/models.py:544 +#: netbox/extras/models/models.py:544 msgid "saved filters" msgstr "filtres enregistrés" -#: extras/models/models.py:562 +#: netbox/extras/models/models.py:562 msgid "Filter parameters must be stored as a dictionary of keyword arguments." msgstr "" "Les paramètres de filtre doivent être stockés sous la forme d'un " "dictionnaire d'arguments de mots-clés." -#: extras/models/models.py:590 +#: netbox/extras/models/models.py:590 msgid "image height" msgstr "hauteur de l'image" -#: extras/models/models.py:593 +#: netbox/extras/models/models.py:593 msgid "image width" msgstr "largeur de l'image" -#: extras/models/models.py:610 +#: netbox/extras/models/models.py:610 msgid "image attachment" msgstr "image en pièce jointe" -#: extras/models/models.py:611 +#: netbox/extras/models/models.py:611 msgid "image attachments" msgstr "images jointes" -#: extras/models/models.py:625 +#: netbox/extras/models/models.py:625 #, python-brace-format msgid "Image attachments cannot be assigned to this object type ({type})." msgstr "" "Les images jointes ne peuvent pas être attribuées à ce type d'objet " "({type})." -#: extras/models/models.py:688 +#: netbox/extras/models/models.py:688 msgid "kind" msgstr "sorte" -#: extras/models/models.py:702 +#: netbox/extras/models/models.py:702 msgid "journal entry" msgstr "entrée de journal" -#: extras/models/models.py:703 +#: netbox/extras/models/models.py:703 msgid "journal entries" msgstr "entrées de journal" -#: extras/models/models.py:718 +#: netbox/extras/models/models.py:718 #, 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})." -#: extras/models/models.py:760 +#: netbox/extras/models/models.py:760 msgid "bookmark" msgstr "signet" -#: extras/models/models.py:761 +#: netbox/extras/models/models.py:761 msgid "bookmarks" msgstr "signets" -#: extras/models/models.py:774 +#: netbox/extras/models/models.py:774 #, 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})." -#: extras/models/notifications.py:43 +#: netbox/extras/models/notifications.py:43 msgid "read" msgstr "lire" -#: extras/models/notifications.py:66 +#: netbox/extras/models/notifications.py:66 msgid "event" msgstr "événement" -#: extras/models/notifications.py:84 +#: netbox/extras/models/notifications.py:84 msgid "notification" msgstr "notification" -#: extras/models/notifications.py:85 +#: netbox/extras/models/notifications.py:85 msgid "notifications" msgstr "notifications" -#: extras/models/notifications.py:99 extras/models/notifications.py:234 +#: netbox/extras/models/notifications.py:99 +#: netbox/extras/models/notifications.py:234 #, python-brace-format msgid "Objects of this type ({type}) do not support notifications." msgstr "" "Les objets de ce type ({type}) ne prennent pas en charge les notifications." -#: extras/models/notifications.py:137 users/models/users.py:58 -#: users/models/users.py:77 +#: netbox/extras/models/notifications.py:137 netbox/users/models/users.py:58 +#: netbox/users/models/users.py:77 msgid "groups" msgstr "groupes" -#: extras/models/notifications.py:143 users/models/users.py:93 +#: netbox/extras/models/notifications.py:143 netbox/users/models/users.py:93 msgid "users" msgstr "utilisateurs" -#: extras/models/notifications.py:152 +#: netbox/extras/models/notifications.py:152 msgid "notification group" msgstr "groupe de notifications" -#: extras/models/notifications.py:153 +#: netbox/extras/models/notifications.py:153 msgid "notification groups" msgstr "groupes de notifications" -#: extras/models/notifications.py:217 +#: netbox/extras/models/notifications.py:217 msgid "subscription" msgstr "abonnement" -#: extras/models/notifications.py:218 +#: netbox/extras/models/notifications.py:218 msgid "subscriptions" msgstr "abonnements" -#: extras/models/scripts.py:42 +#: netbox/extras/models/scripts.py:42 msgid "is executable" msgstr "est exécutable" -#: extras/models/scripts.py:64 +#: netbox/extras/models/scripts.py:64 msgid "script" msgstr "script" -#: extras/models/scripts.py:65 +#: netbox/extras/models/scripts.py:65 msgid "scripts" msgstr "scripts" -#: extras/models/scripts.py:111 +#: netbox/extras/models/scripts.py:111 msgid "script module" msgstr "module de script" -#: extras/models/scripts.py:112 +#: netbox/extras/models/scripts.py:112 msgid "script modules" msgstr "modules de script" -#: extras/models/search.py:22 +#: netbox/extras/models/search.py:22 msgid "timestamp" msgstr "horodatage" -#: extras/models/search.py:37 +#: netbox/extras/models/search.py:37 msgid "field" msgstr "champ" -#: extras/models/search.py:45 +#: netbox/extras/models/search.py:45 msgid "value" msgstr "valeur" -#: extras/models/search.py:56 +#: netbox/extras/models/search.py:56 msgid "cached value" msgstr "valeur mise en cache" -#: extras/models/search.py:57 +#: netbox/extras/models/search.py:57 msgid "cached values" msgstr "valeurs mises en cache" -#: extras/models/staging.py:44 +#: netbox/extras/models/staging.py:44 msgid "branch" msgstr "succursale" -#: extras/models/staging.py:45 +#: netbox/extras/models/staging.py:45 msgid "branches" msgstr "branches" -#: extras/models/staging.py:97 +#: netbox/extras/models/staging.py:97 msgid "staged change" msgstr "changement par étapes" -#: extras/models/staging.py:98 +#: netbox/extras/models/staging.py:98 msgid "staged changes" msgstr "modifications échelonnées" -#: extras/models/tags.py:40 +#: netbox/extras/models/tags.py:40 msgid "The object type(s) to which this tag can be applied." msgstr "Le ou les types d'objets auxquels cette balise peut être appliquée." -#: extras/models/tags.py:49 +#: netbox/extras/models/tags.py:49 msgid "tag" msgstr "étiquette" -#: extras/models/tags.py:50 +#: netbox/extras/models/tags.py:50 msgid "tags" -msgstr "balises" +msgstr "étiquettes" -#: extras/models/tags.py:78 +#: netbox/extras/models/tags.py:78 msgid "tagged item" msgstr "article étiqueté" -#: extras/models/tags.py:79 +#: netbox/extras/models/tags.py:79 msgid "tagged items" msgstr "articles étiquetés" -#: extras/scripts.py:429 +#: netbox/extras/scripts.py:429 msgid "Script Data" msgstr "Données de script" -#: extras/scripts.py:433 +#: netbox/extras/scripts.py:433 msgid "Script Execution Parameters" msgstr "Paramètres d'exécution du script" -#: extras/tables/columns.py:12 templates/htmx/notifications.html:18 +#: netbox/extras/tables/columns.py:12 +#: netbox/templates/htmx/notifications.html:18 msgid "Dismiss" msgstr "Rejeter" -#: extras/tables/tables.py:62 extras/tables/tables.py:159 -#: extras/tables/tables.py:184 extras/tables/tables.py:250 -#: extras/tables/tables.py:276 extras/tables/tables.py:412 -#: extras/tables/tables.py:446 templates/extras/customfield.html:105 -#: templates/extras/eventrule.html:27 templates/users/objectpermission.html:64 -#: users/tables.py:80 +#: netbox/extras/tables/tables.py:62 netbox/extras/tables/tables.py:159 +#: netbox/extras/tables/tables.py:184 netbox/extras/tables/tables.py:250 +#: netbox/extras/tables/tables.py:276 netbox/extras/tables/tables.py:412 +#: netbox/extras/tables/tables.py:446 +#: netbox/templates/extras/customfield.html:105 +#: netbox/templates/extras/eventrule.html:27 +#: netbox/templates/users/objectpermission.html:64 netbox/users/tables.py:80 msgid "Object Types" msgstr "Types d'objets" -#: extras/tables/tables.py:69 +#: netbox/extras/tables/tables.py:69 msgid "Validate Uniqueness" msgstr "Valider le caractère" -#: extras/tables/tables.py:73 +#: netbox/extras/tables/tables.py:73 msgid "Visible" msgstr "Visible" -#: extras/tables/tables.py:76 +#: netbox/extras/tables/tables.py:76 msgid "Editable" msgstr "Modifiable" -#: extras/tables/tables.py:82 +#: netbox/extras/tables/tables.py:82 msgid "Related Object Type" msgstr "Type d'objet associé" -#: extras/tables/tables.py:86 templates/extras/customfield.html:51 +#: netbox/extras/tables/tables.py:86 +#: netbox/templates/extras/customfield.html:51 msgid "Choice Set" msgstr "Coffret Choice" -#: extras/tables/tables.py:94 +#: netbox/extras/tables/tables.py:94 msgid "Is Cloneable" msgstr "Est clonable" -#: extras/tables/tables.py:98 templates/extras/customfield.html:118 +#: netbox/extras/tables/tables.py:98 +#: netbox/templates/extras/customfield.html:118 msgid "Minimum Value" msgstr "Valeur minimale" -#: extras/tables/tables.py:101 templates/extras/customfield.html:122 +#: netbox/extras/tables/tables.py:101 +#: netbox/templates/extras/customfield.html:122 msgid "Maximum Value" msgstr "Valeur maximale" -#: extras/tables/tables.py:104 +#: netbox/extras/tables/tables.py:104 msgid "Validation Regex" msgstr "Regex de validation" -#: extras/tables/tables.py:137 +#: netbox/extras/tables/tables.py:137 msgid "Count" msgstr "Compter" -#: extras/tables/tables.py:140 +#: netbox/extras/tables/tables.py:140 msgid "Order Alphabetically" msgstr "Ordre alphabétique" -#: extras/tables/tables.py:165 templates/extras/customlink.html:33 +#: netbox/extras/tables/tables.py:165 +#: netbox/templates/extras/customlink.html:33 msgid "New Window" msgstr "Nouvelle fenêtre" -#: extras/tables/tables.py:187 +#: netbox/extras/tables/tables.py:187 msgid "As Attachment" msgstr "En tant que pièce jointe" -#: extras/tables/tables.py:195 extras/tables/tables.py:487 -#: extras/tables/tables.py:522 templates/core/datafile.html:24 -#: templates/dcim/device/render_config.html:22 -#: templates/extras/configcontext.html:39 -#: templates/extras/configtemplate.html:31 -#: templates/extras/exporttemplate.html:45 -#: templates/generic/bulk_import.html:35 -#: templates/virtualization/virtualmachine/render_config.html:22 +#: netbox/extras/tables/tables.py: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/generic/bulk_import.html:35 +#: netbox/templates/virtualization/virtualmachine/render_config.html:22 msgid "Data File" msgstr "Fichier de données" -#: extras/tables/tables.py:200 extras/tables/tables.py:499 -#: extras/tables/tables.py:527 +#: netbox/extras/tables/tables.py:200 netbox/extras/tables/tables.py:499 +#: netbox/extras/tables/tables.py:527 msgid "Synced" msgstr "Synchronisé" -#: extras/tables/tables.py:227 +#: netbox/extras/tables/tables.py:227 msgid "Image" msgstr "Image" -#: extras/tables/tables.py:232 +#: netbox/extras/tables/tables.py:232 msgid "Size (Bytes)" msgstr "Taille (octets)" -#: extras/tables/tables.py:339 +#: netbox/extras/tables/tables.py:339 msgid "Read" msgstr "Lisez" -#: extras/tables/tables.py:382 +#: netbox/extras/tables/tables.py:382 msgid "SSL Validation" msgstr "Validation SSL" -#: extras/tables/tables.py:418 templates/extras/eventrule.html:37 +#: netbox/extras/tables/tables.py:418 +#: netbox/templates/extras/eventrule.html:37 msgid "Event Types" msgstr "Types d'événements" -#: extras/tables/tables.py:535 netbox/navigation/menu.py:77 -#: templates/dcim/devicerole.html:8 +#: netbox/extras/tables/tables.py:535 netbox/netbox/navigation/menu.py:77 +#: netbox/templates/dcim/devicerole.html:8 msgid "Device Roles" msgstr "Rôles des appareils" -#: extras/tables/tables.py:587 +#: netbox/extras/tables/tables.py:587 msgid "Comments (Short)" msgstr "Commentaires (courts)" -#: extras/tables/tables.py:606 extras/tables/tables.py:640 +#: netbox/extras/tables/tables.py:606 netbox/extras/tables/tables.py:640 msgid "Line" msgstr "Ligne" -#: extras/tables/tables.py:613 extras/tables/tables.py:650 +#: netbox/extras/tables/tables.py:613 netbox/extras/tables/tables.py:650 msgid "Level" msgstr "Niveau" -#: extras/tables/tables.py:619 extras/tables/tables.py:659 +#: netbox/extras/tables/tables.py:619 netbox/extras/tables/tables.py:659 msgid "Message" msgstr "Message" -#: extras/tables/tables.py:643 +#: netbox/extras/tables/tables.py:643 msgid "Method" msgstr "Méthode" -#: extras/validators.py:15 +#: netbox/extras/validators.py:15 #, python-format msgid "Ensure this value is equal to %(limit_value)s." msgstr "Assurez-vous que cette valeur est égale à %(limit_value)s." -#: extras/validators.py:26 +#: netbox/extras/validators.py:26 #, python-format msgid "Ensure this value does not equal %(limit_value)s." msgstr "Assurez-vous que cette valeur n'est pas égale %(limit_value)s." -#: extras/validators.py:37 +#: netbox/extras/validators.py:37 msgid "This field must be empty." msgstr "Ce champ doit être vide." -#: extras/validators.py:52 +#: netbox/extras/validators.py:52 msgid "This field must not be empty." msgstr "Ce champ ne doit pas être vide." -#: extras/validators.py:94 +#: netbox/extras/validators.py:94 msgid "Validation rules must be passed as a dictionary" msgstr "" "Les règles de validation doivent être transmises sous forme de dictionnaire" -#: extras/validators.py:119 +#: netbox/extras/validators.py:119 #, python-brace-format msgid "Custom validation failed for {attribute}: {exception}" msgstr "La validation personnalisée a échoué pour {attribute}: {exception}" -#: extras/validators.py:133 +#: netbox/extras/validators.py:133 #, python-brace-format msgid "Invalid attribute \"{name}\" for request" msgstr "Attribut non valide »{name}« pour demande" -#: extras/validators.py:150 +#: netbox/extras/validators.py:150 #, python-brace-format msgid "Invalid attribute \"{name}\" for {model}" msgstr "Attribut non valide »{name}« pour {model}" -#: extras/views.py:960 +#: netbox/extras/views.py:960 msgid "Your dashboard has been reset." msgstr "Votre tableau de bord a été réinitialisé." -#: extras/views.py:1006 +#: netbox/extras/views.py:1006 msgid "Added widget: " msgstr "Widget ajouté : " -#: extras/views.py:1047 +#: netbox/extras/views.py:1047 msgid "Updated widget: " msgstr "Widget mis à jour : " -#: extras/views.py:1083 +#: netbox/extras/views.py:1083 msgid "Deleted widget: " msgstr "Widget supprimé : " -#: extras/views.py:1085 +#: netbox/extras/views.py:1085 msgid "Error deleting widget: " msgstr "Erreur lors de la suppression du widget : " -#: extras/views.py:1172 +#: netbox/extras/views.py:1175 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 " "cours d'exécution." -#: ipam/api/field_serializers.py:17 +#: netbox/ipam/api/field_serializers.py:17 msgid "Enter a valid IPv4 or IPv6 address with optional mask." msgstr "Entrez une adresse IPv4 ou IPv6 valide avec un masque facultatif." -#: ipam/api/field_serializers.py:24 +#: netbox/ipam/api/field_serializers.py:24 #, python-brace-format msgid "Invalid IP address format: {data}" msgstr "Format d'adresse IP non valide : {data}" -#: ipam/api/field_serializers.py:37 +#: netbox/ipam/api/field_serializers.py:37 msgid "Enter a valid IPv4 or IPv6 prefix and mask in CIDR notation." msgstr "Entrez un préfixe IPv4 ou IPv6 valide et un masque en notation CIDR." -#: ipam/api/field_serializers.py:44 +#: netbox/ipam/api/field_serializers.py:44 #, python-brace-format msgid "Invalid IP prefix format: {data}" msgstr "Format de préfixe IP non valide : {data}" -#: ipam/api/views.py:358 +#: netbox/ipam/api/views.py:358 msgid "" "Insufficient space is available to accommodate the requested prefix size(s)" msgstr "" "L'espace disponible est insuffisant pour prendre en charge la ou les tailles" " de préfixe demandées" -#: ipam/choices.py:30 +#: netbox/ipam/choices.py:30 msgid "Container" msgstr "Récipient" -#: ipam/choices.py:72 +#: netbox/ipam/choices.py:72 msgid "DHCP" msgstr "DHCP" -#: ipam/choices.py:73 +#: netbox/ipam/choices.py:73 msgid "SLAAC" msgstr "SLAAC" -#: ipam/choices.py:89 +#: netbox/ipam/choices.py:89 msgid "Loopback" msgstr "Bouclage" -#: ipam/choices.py:91 +#: netbox/ipam/choices.py:91 msgid "Anycast" msgstr "Anycast" -#: ipam/choices.py:115 +#: netbox/ipam/choices.py:115 msgid "Standard" msgstr "Norme" -#: ipam/choices.py:120 +#: netbox/ipam/choices.py:120 msgid "CheckPoint" msgstr "Point de contrôle" -#: ipam/choices.py:123 +#: netbox/ipam/choices.py:123 msgid "Cisco" msgstr "Cisco" -#: ipam/choices.py:137 +#: netbox/ipam/choices.py:137 msgid "Plaintext" msgstr "Texte brut" -#: ipam/fields.py:36 +#: netbox/ipam/fields.py:36 #, python-brace-format msgid "Invalid IP address format: {address}" msgstr "Format d'adresse IP non valide : {address}" -#: ipam/filtersets.py:48 vpn/filtersets.py:304 +#: netbox/ipam/filtersets.py:48 netbox/vpn/filtersets.py:304 msgid "Import target" msgstr "Objectif d'importation" -#: ipam/filtersets.py:54 vpn/filtersets.py:310 +#: netbox/ipam/filtersets.py:54 netbox/vpn/filtersets.py:310 msgid "Import target (name)" msgstr "Cible d'importation (nom)" -#: ipam/filtersets.py:59 vpn/filtersets.py:315 +#: netbox/ipam/filtersets.py:59 netbox/vpn/filtersets.py:315 msgid "Export target" msgstr "Objectif d'exportation" -#: ipam/filtersets.py:65 vpn/filtersets.py:321 +#: netbox/ipam/filtersets.py:65 netbox/vpn/filtersets.py:321 msgid "Export target (name)" msgstr "Cible d'exportation (nom)" -#: ipam/filtersets.py:86 +#: netbox/ipam/filtersets.py:86 msgid "Importing VRF" msgstr "Importation de VRF" -#: ipam/filtersets.py:92 +#: netbox/ipam/filtersets.py:92 msgid "Import VRF (RD)" msgstr "Importer VRF (RD)" -#: ipam/filtersets.py:97 +#: netbox/ipam/filtersets.py:97 msgid "Exporting VRF" msgstr "Exportation de fichiers VRF" -#: ipam/filtersets.py:103 +#: netbox/ipam/filtersets.py:103 msgid "Export VRF (RD)" msgstr "Exporter VRF (RD)" -#: ipam/filtersets.py:108 +#: netbox/ipam/filtersets.py:108 msgid "Importing L2VPN" msgstr "Importation de L2VPN" -#: ipam/filtersets.py:114 +#: netbox/ipam/filtersets.py:114 msgid "Importing L2VPN (identifier)" msgstr "Importation de L2VPN (identifiant)" -#: ipam/filtersets.py:119 +#: netbox/ipam/filtersets.py:119 msgid "Exporting L2VPN" msgstr "Exportation de L2VPN" -#: ipam/filtersets.py:125 +#: netbox/ipam/filtersets.py:125 msgid "Exporting L2VPN (identifier)" msgstr "Exportation de L2VPN (identifiant)" -#: ipam/filtersets.py:155 ipam/filtersets.py:281 ipam/forms/model_forms.py:229 -#: ipam/tables/ip.py:212 templates/ipam/prefix.html:12 +#: 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" -#: ipam/filtersets.py:159 ipam/filtersets.py:198 ipam/filtersets.py:221 +#: netbox/ipam/filtersets.py:159 netbox/ipam/filtersets.py:198 +#: netbox/ipam/filtersets.py:223 msgid "RIR (ID)" msgstr "RIRE (ID)" -#: ipam/filtersets.py:165 ipam/filtersets.py:204 ipam/filtersets.py:227 +#: netbox/ipam/filtersets.py:165 netbox/ipam/filtersets.py:204 +#: netbox/ipam/filtersets.py:229 msgid "RIR (slug)" msgstr "RIR (slug)" -#: ipam/filtersets.py:285 +#: netbox/ipam/filtersets.py:287 msgid "Within prefix" msgstr "Dans le préfixe" -#: ipam/filtersets.py:289 +#: netbox/ipam/filtersets.py:291 msgid "Within and including prefix" msgstr "Dans le préfixe et y compris" -#: 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" -#: ipam/filtersets.py:304 ipam/filtersets.py:572 ipam/forms/bulk_edit.py:343 -#: ipam/forms/filtersets.py:196 ipam/forms/filtersets.py:331 +#: 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" -#: ipam/filtersets.py:373 vpn/filtersets.py:427 +#: netbox/ipam/filtersets.py:375 netbox/vpn/filtersets.py:427 msgid "VLAN (ID)" msgstr "VLAN (IDENTIFIANT)" -#: ipam/filtersets.py:377 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)" -#: ipam/filtersets.py:471 ipam/filtersets.py:475 ipam/filtersets.py:567 -#: ipam/forms/model_forms.py:463 templates/tenancy/contact.html:53 -#: tenancy/forms/bulk_edit.py:113 +#: 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" -#: 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" -#: ipam/filtersets.py:507 ipam/filtersets.py:563 +#: netbox/ipam/filtersets.py:509 netbox/ipam/filtersets.py:565 msgid "Parent prefix" msgstr "Préfixe parent" -#: ipam/filtersets.py:616 ipam/filtersets.py:856 ipam/filtersets.py:1131 -#: 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)" -#: ipam/filtersets.py:621 ipam/filtersets.py:861 ipam/filtersets.py:1125 -#: virtualization/filtersets.py:282 virtualization/filtersets.py:321 -#: vpn/filtersets.py:390 +#: 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)" -#: ipam/filtersets.py:627 vpn/filtersets.py:97 vpn/filtersets.py:396 +#: netbox/ipam/filtersets.py:629 netbox/vpn/filtersets.py:97 +#: netbox/vpn/filtersets.py:396 msgid "Interface (name)" msgstr "Interface (nom)" -#: ipam/filtersets.py:638 vpn/filtersets.py:108 vpn/filtersets.py:407 +#: 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)" -#: ipam/filtersets.py:643 vpn/filtersets.py:113 +#: netbox/ipam/filtersets.py:645 netbox/vpn/filtersets.py:113 msgid "VM interface (ID)" msgstr "Interface de machine virtuelle (ID)" -#: ipam/filtersets.py:648 +#: netbox/ipam/filtersets.py:650 msgid "FHRP group (ID)" msgstr "Groupe FHRP (ID)" -#: ipam/filtersets.py:652 +#: netbox/ipam/filtersets.py:654 msgid "Is assigned to an interface" msgstr "Est affecté à une interface" -#: ipam/filtersets.py:656 +#: netbox/ipam/filtersets.py:658 msgid "Is assigned" msgstr "Est attribué" -#: ipam/filtersets.py:668 +#: netbox/ipam/filtersets.py:670 msgid "Service (ID)" msgstr "Service (ID)" -#: ipam/filtersets.py:673 +#: netbox/ipam/filtersets.py:675 msgid "NAT inside IP address (ID)" msgstr "Adresse IP intérieure NAT (ID)" -#: ipam/filtersets.py:1041 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" -#: ipam/filtersets.py:1046 +#: netbox/ipam/filtersets.py:1048 msgid "Assigned VM interface" msgstr "Interface de machine virtuelle attribuée" -#: ipam/filtersets.py:1136 +#: netbox/ipam/filtersets.py:1138 msgid "IP address (ID)" msgstr "Adresse IP (ID)" -#: ipam/filtersets.py:1142 ipam/models/ip.py:788 +#: netbox/ipam/filtersets.py:1144 netbox/ipam/models/ip.py:788 msgid "IP address" msgstr "Adresse IP" -#: ipam/filtersets.py:1167 +#: netbox/ipam/filtersets.py:1169 msgid "Primary IPv4 (ID)" msgstr "IPv4 principal (ID)" -#: ipam/filtersets.py:1172 +#: netbox/ipam/filtersets.py:1174 msgid "Primary IPv6 (ID)" msgstr "IPv6 principal (ID)" -#: ipam/formfields.py:14 +#: netbox/ipam/formfields.py:14 msgid "Enter a valid IPv4 or IPv6 address (without a mask)." msgstr "Entrez une adresse IPv4 ou IPv6 valide (sans masque)." -#: ipam/formfields.py:32 +#: netbox/ipam/formfields.py:32 #, python-brace-format msgid "Invalid IPv4/IPv6 address format: {address}" msgstr "Format d'adresse IPv4/IPv6 non valide : {address}" -#: ipam/formfields.py:37 +#: netbox/ipam/formfields.py:37 msgid "This field requires an IP address without a mask." msgstr "Ce champ nécessite une adresse IP sans masque." -#: ipam/formfields.py:39 ipam/formfields.py:61 +#: netbox/ipam/formfields.py:39 netbox/ipam/formfields.py:61 msgid "Please specify a valid IPv4 or IPv6 address." msgstr "Spécifiez une adresse IPv4 ou IPv6 valide." -#: ipam/formfields.py:44 +#: netbox/ipam/formfields.py:44 msgid "Enter a valid IPv4 or IPv6 address (with CIDR mask)." msgstr "Entrez une adresse IPv4 ou IPv6 valide (avec masque CIDR)." -#: ipam/formfields.py:56 +#: netbox/ipam/formfields.py:56 msgid "CIDR mask (e.g. /24) is required." msgstr "Un masque CIDR (par exemple /24) est requis." -#: ipam/forms/bulk_create.py:13 +#: netbox/ipam/forms/bulk_create.py:13 msgid "Address pattern" msgstr "Modèle d'adresse" -#: ipam/forms/bulk_edit.py:50 +#: netbox/ipam/forms/bulk_edit.py:50 msgid "Enforce unique space" msgstr "Forcer l'unicité des préfixes IP" -#: ipam/forms/bulk_edit.py:88 +#: netbox/ipam/forms/bulk_edit.py:88 msgid "Is private" msgstr "Est privé" -#: ipam/forms/bulk_edit.py:109 ipam/forms/bulk_edit.py:138 -#: ipam/forms/bulk_edit.py:163 ipam/forms/bulk_import.py:89 -#: ipam/forms/bulk_import.py:109 ipam/forms/bulk_import.py:129 -#: ipam/forms/filtersets.py:110 ipam/forms/filtersets.py:125 -#: ipam/forms/filtersets.py:148 ipam/forms/model_forms.py:96 -#: ipam/forms/model_forms.py:109 ipam/forms/model_forms.py:131 -#: ipam/forms/model_forms.py:149 ipam/models/asns.py:31 -#: ipam/models/asns.py:103 ipam/models/ip.py:71 ipam/models/ip.py:90 -#: ipam/tables/asn.py:20 ipam/tables/asn.py:45 -#: templates/ipam/aggregate.html:18 templates/ipam/asn.html:27 -#: templates/ipam/asnrange.html:19 templates/ipam/rir.html:19 +#: netbox/ipam/forms/bulk_edit.py: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/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" -#: ipam/forms/bulk_edit.py:171 +#: netbox/ipam/forms/bulk_edit.py:171 msgid "Date added" msgstr "Date d'ajout" -#: ipam/forms/bulk_edit.py:229 ipam/forms/model_forms.py:586 -#: ipam/forms/model_forms.py:633 ipam/tables/ip.py:251 -#: templates/ipam/vlan_edit.html:37 templates/ipam/vlangroup.html:27 +#: 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/templates/ipam/vlangroup.html:27 msgid "VLAN Group" msgstr "Groupe VLAN" -#: ipam/forms/bulk_edit.py:234 ipam/forms/bulk_import.py:185 -#: ipam/forms/filtersets.py:256 ipam/forms/model_forms.py:218 -#: ipam/models/vlans.py:234 ipam/tables/ip.py:255 -#: templates/ipam/prefix.html:60 templates/ipam/vlan.html:12 -#: templates/ipam/vlan/base.html:6 templates/ipam/vlan_edit.html:10 -#: templates/wireless/wirelesslan.html:30 vpn/forms/bulk_import.py:304 -#: vpn/forms/filtersets.py:284 vpn/forms/model_forms.py:433 -#: vpn/forms/model_forms.py:452 wireless/forms/bulk_edit.py:55 -#: wireless/forms/bulk_import.py:48 wireless/forms/model_forms.py:48 -#: wireless/models.py:102 +#: 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/templates/ipam/vlan/base.html:6 +#: netbox/templates/ipam/vlan_edit.html:10 +#: netbox/templates/wireless/wirelesslan.html:30 +#: netbox/vpn/forms/bulk_import.py:304 netbox/vpn/forms/filtersets.py:284 +#: netbox/vpn/forms/model_forms.py:433 netbox/vpn/forms/model_forms.py:452 +#: netbox/wireless/forms/bulk_edit.py:55 +#: netbox/wireless/forms/bulk_import.py:48 +#: netbox/wireless/forms/model_forms.py:48 netbox/wireless/models.py:102 msgid "VLAN" msgstr "VLAN" -#: ipam/forms/bulk_edit.py:245 +#: netbox/ipam/forms/bulk_edit.py:245 msgid "Prefix length" msgstr "Longueur du préfixe" -#: ipam/forms/bulk_edit.py:268 ipam/forms/filtersets.py:241 -#: templates/ipam/prefix.html:85 +#: 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" -#: ipam/forms/bulk_edit.py:273 ipam/forms/bulk_edit.py:318 -#: ipam/forms/filtersets.py:248 ipam/forms/filtersets.py:293 -#: ipam/models/ip.py:272 ipam/models/ip.py:539 +#: netbox/ipam/forms/bulk_edit.py: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 msgid "Treat as fully utilized" msgstr "Traiter comme s'il avait été pleinement utilisé" -#: ipam/forms/bulk_edit.py:287 ipam/forms/filtersets.py:171 +#: netbox/ipam/forms/bulk_edit.py:287 netbox/ipam/forms/filtersets.py:171 msgid "VLAN Assignment" msgstr "Attribution de VLAN" -#: ipam/forms/bulk_edit.py:366 ipam/models/ip.py:772 +#: netbox/ipam/forms/bulk_edit.py:366 netbox/ipam/models/ip.py:772 msgid "DNS name" msgstr "Nom DNS" -#: ipam/forms/bulk_edit.py:387 ipam/forms/bulk_edit.py:534 -#: ipam/forms/bulk_import.py:394 ipam/forms/bulk_import.py:469 -#: ipam/forms/bulk_import.py:495 ipam/forms/filtersets.py:390 -#: ipam/forms/filtersets.py:530 templates/ipam/fhrpgroup.html:22 -#: templates/ipam/inc/panels/fhrp_groups.html:24 -#: templates/ipam/service.html:32 templates/ipam/servicetemplate.html:19 +#: netbox/ipam/forms/bulk_edit.py: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/templates/ipam/inc/panels/fhrp_groups.html:24 +#: netbox/templates/ipam/service.html:32 +#: netbox/templates/ipam/servicetemplate.html:19 msgid "Protocol" msgstr "Protocole" -#: ipam/forms/bulk_edit.py:394 ipam/forms/filtersets.py:397 -#: ipam/tables/fhrp.py:22 templates/ipam/fhrpgroup.html:26 +#: netbox/ipam/forms/bulk_edit.py:394 netbox/ipam/forms/filtersets.py:397 +#: netbox/ipam/tables/fhrp.py:22 netbox/templates/ipam/fhrpgroup.html:26 msgid "Group ID" msgstr "ID de groupe" -#: ipam/forms/bulk_edit.py:399 ipam/forms/filtersets.py:402 -#: wireless/forms/bulk_edit.py:68 wireless/forms/bulk_edit.py:115 -#: wireless/forms/bulk_import.py:62 wireless/forms/bulk_import.py:65 -#: wireless/forms/bulk_import.py:104 wireless/forms/bulk_import.py:107 -#: wireless/forms/filtersets.py:54 wireless/forms/filtersets.py:88 +#: netbox/ipam/forms/bulk_edit.py: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 msgid "Authentication type" msgstr "Type d'authentification" -#: ipam/forms/bulk_edit.py:404 ipam/forms/filtersets.py:406 +#: netbox/ipam/forms/bulk_edit.py:404 netbox/ipam/forms/filtersets.py:406 msgid "Authentication key" msgstr "Clé d'authentification" -#: ipam/forms/bulk_edit.py:421 ipam/forms/filtersets.py:383 -#: ipam/forms/model_forms.py:474 netbox/navigation/menu.py:386 -#: templates/ipam/fhrpgroup.html:49 -#: templates/wireless/inc/authentication_attrs.html:5 -#: wireless/forms/bulk_edit.py:91 wireless/forms/bulk_edit.py:149 -#: wireless/forms/filtersets.py:36 wireless/forms/filtersets.py:76 -#: wireless/forms/model_forms.py:55 wireless/forms/model_forms.py:171 +#: 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/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 msgid "Authentication" msgstr "Authentification" -#: ipam/forms/bulk_edit.py:436 ipam/forms/model_forms.py:575 +#: netbox/ipam/forms/bulk_edit.py:436 netbox/ipam/forms/model_forms.py:608 msgid "Scope type" msgstr "Type de portée" -#: ipam/forms/bulk_edit.py:439 ipam/forms/bulk_edit.py:453 -#: ipam/forms/model_forms.py:578 ipam/forms/model_forms.py:588 -#: ipam/tables/vlans.py:71 templates/ipam/vlangroup.html:38 +#: 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" -#: ipam/forms/bulk_edit.py:446 ipam/models/vlans.py:60 +#: netbox/ipam/forms/bulk_edit.py:446 netbox/ipam/models/vlans.py:60 msgid "VLAN ID ranges" msgstr "Plages d'ID VLAN" -#: ipam/forms/bulk_edit.py:525 +#: netbox/ipam/forms/bulk_edit.py:525 msgid "Site & Group" msgstr "Site et groupe" -#: ipam/forms/bulk_edit.py:539 ipam/forms/model_forms.py:659 -#: ipam/forms/model_forms.py:691 ipam/tables/services.py:19 -#: ipam/tables/services.py:49 templates/ipam/service.html:36 -#: templates/ipam/servicetemplate.html:23 +#: netbox/ipam/forms/bulk_edit.py:539 netbox/ipam/forms/model_forms.py:692 +#: netbox/ipam/forms/model_forms.py:724 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" -#: ipam/forms/bulk_import.py:48 +#: netbox/ipam/forms/bulk_import.py:48 msgid "Import route targets" msgstr "Importer des cibles d'itinéraire" -#: ipam/forms/bulk_import.py:54 +#: netbox/ipam/forms/bulk_import.py:54 msgid "Export route targets" msgstr "Cibles d'itinéraire d'exportation" -#: ipam/forms/bulk_import.py:92 ipam/forms/bulk_import.py:112 -#: ipam/forms/bulk_import.py:132 +#: netbox/ipam/forms/bulk_import.py:92 netbox/ipam/forms/bulk_import.py:112 +#: netbox/ipam/forms/bulk_import.py:132 msgid "Assigned RIR" msgstr "RIR attribué" -#: ipam/forms/bulk_import.py:182 +#: netbox/ipam/forms/bulk_import.py:182 msgid "VLAN's group (if any)" msgstr "Le groupe du VLAN (le cas échéant)" -#: ipam/forms/bulk_import.py:308 +#: 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)" -#: ipam/forms/bulk_import.py:311 ipam/forms/bulk_import.py:488 -#: ipam/forms/model_forms.py:685 virtualization/filtersets.py:288 -#: virtualization/filtersets.py:327 virtualization/forms/bulk_edit.py:200 -#: virtualization/forms/bulk_edit.py:326 -#: virtualization/forms/bulk_import.py:146 -#: virtualization/forms/bulk_import.py:207 -#: virtualization/forms/filtersets.py:212 -#: virtualization/forms/filtersets.py:248 -#: virtualization/forms/model_forms.py:288 vpn/forms/bulk_import.py:93 -#: vpn/forms/bulk_import.py:290 +#: 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" -#: ipam/forms/bulk_import.py:315 +#: 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)" -#: ipam/forms/bulk_import.py:325 +#: netbox/ipam/forms/bulk_import.py:325 msgid "Is primary" msgstr "Est principal" -#: ipam/forms/bulk_import.py:326 +#: 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é" -#: ipam/forms/bulk_import.py:365 +#: netbox/ipam/forms/bulk_import.py:330 +msgid "Is out-of-band" +msgstr "" + +#: netbox/ipam/forms/bulk_import.py:331 +msgid "Designate this as the out-of-band IP address for the assigned device" +msgstr "" + +#: netbox/ipam/forms/bulk_import.py:371 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" -#: ipam/forms/bulk_import.py:369 +#: netbox/ipam/forms/bulk_import.py:375 +msgid "No device specified; cannot set as out-of-band IP" +msgstr "" + +#: netbox/ipam/forms/bulk_import.py:379 +msgid "Cannot set out-of-band IP for virtual machines" +msgstr "" + +#: netbox/ipam/forms/bulk_import.py:383 msgid "No interface specified; cannot set as primary IP" msgstr "" "Aucune interface spécifiée ; impossible de définir comme adresse IP " "principale" -#: ipam/forms/bulk_import.py:398 +#: netbox/ipam/forms/bulk_import.py:387 +msgid "No interface specified; cannot set as out-of-band IP" +msgstr "" + +#: netbox/ipam/forms/bulk_import.py:422 msgid "Auth type" msgstr "Type d'authentification" -#: ipam/forms/bulk_import.py:413 +#: netbox/ipam/forms/bulk_import.py:437 msgid "Scope type (app & model)" msgstr "Type de scope (application et modèle)" -#: ipam/forms/bulk_import.py:440 +#: netbox/ipam/forms/bulk_import.py:464 msgid "Assigned VLAN group" msgstr "Groupe VLAN attribué" -#: ipam/forms/bulk_import.py:471 ipam/forms/bulk_import.py:497 +#: netbox/ipam/forms/bulk_import.py:495 netbox/ipam/forms/bulk_import.py:521 msgid "IP protocol" msgstr "Protocole IP" -#: ipam/forms/bulk_import.py:485 +#: netbox/ipam/forms/bulk_import.py:509 msgid "Required if not assigned to a VM" msgstr "Obligatoire s'il n'est pas attribué à une machine virtuelle" -#: ipam/forms/bulk_import.py:492 +#: netbox/ipam/forms/bulk_import.py:516 msgid "Required if not assigned to a device" msgstr "Obligatoire s'il n'est pas attribué à un appareil" -#: ipam/forms/bulk_import.py:517 +#: netbox/ipam/forms/bulk_import.py:541 #, python-brace-format msgid "{ip} is not assigned to this device/VM." msgstr "{ip} n'est pas attribué à cet appareil/à cette machine virtuelle." -#: ipam/forms/filtersets.py:47 ipam/forms/model_forms.py:63 -#: netbox/navigation/menu.py:189 vpn/forms/model_forms.py:410 +#: 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 msgid "Route Targets" msgstr "Cibles de l'itinéraire" -#: ipam/forms/filtersets.py:53 ipam/forms/model_forms.py:50 -#: vpn/forms/filtersets.py:224 vpn/forms/model_forms.py:397 +#: 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 msgid "Import targets" msgstr "Cibles d'importation" -#: ipam/forms/filtersets.py:58 ipam/forms/model_forms.py:55 -#: vpn/forms/filtersets.py:229 vpn/forms/model_forms.py:402 +#: 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 msgid "Export targets" msgstr "Objectifs d'exportation" -#: ipam/forms/filtersets.py:73 +#: netbox/ipam/forms/filtersets.py:73 msgid "Imported by VRF" msgstr "Importé par VRF" -#: ipam/forms/filtersets.py:78 +#: netbox/ipam/forms/filtersets.py:78 msgid "Exported by VRF" msgstr "Exporté par VRF" -#: ipam/forms/filtersets.py:87 ipam/tables/ip.py:89 templates/ipam/rir.html:30 +#: netbox/ipam/forms/filtersets.py:87 netbox/ipam/tables/ip.py:89 +#: netbox/templates/ipam/rir.html:30 msgid "Private" msgstr "Privé" -#: ipam/forms/filtersets.py:105 ipam/forms/filtersets.py:191 -#: ipam/forms/filtersets.py:272 ipam/forms/filtersets.py:326 +#: netbox/ipam/forms/filtersets.py:105 netbox/ipam/forms/filtersets.py:191 +#: netbox/ipam/forms/filtersets.py:272 netbox/ipam/forms/filtersets.py:326 msgid "Address family" msgstr "Famille d'adresses" -#: ipam/forms/filtersets.py:119 templates/ipam/asnrange.html:25 +#: netbox/ipam/forms/filtersets.py:119 netbox/templates/ipam/asnrange.html:25 msgid "Range" msgstr "Plage" -#: ipam/forms/filtersets.py:128 +#: netbox/ipam/forms/filtersets.py:128 msgid "Start" msgstr "Démarrer" -#: ipam/forms/filtersets.py:132 +#: netbox/ipam/forms/filtersets.py:132 msgid "End" msgstr "Fin" -#: ipam/forms/filtersets.py:186 +#: netbox/ipam/forms/filtersets.py:186 msgid "Search within" msgstr "Rechercher dans" -#: ipam/forms/filtersets.py:207 ipam/forms/filtersets.py:342 +#: netbox/ipam/forms/filtersets.py:207 netbox/ipam/forms/filtersets.py:342 msgid "Present in VRF" msgstr "Présent en VRF" -#: ipam/forms/filtersets.py:311 +#: netbox/ipam/forms/filtersets.py:311 msgid "Device/VM" msgstr "Appareil/VM" -#: ipam/forms/filtersets.py:321 +#: netbox/ipam/forms/filtersets.py:321 msgid "Parent Prefix" msgstr "Préfixe parent" -#: ipam/forms/filtersets.py:347 +#: netbox/ipam/forms/filtersets.py:347 msgid "Assigned Device" msgstr "Appareil attribué" -#: ipam/forms/filtersets.py:352 +#: netbox/ipam/forms/filtersets.py:352 msgid "Assigned VM" msgstr "Machine virtuelle attribuée" -#: ipam/forms/filtersets.py:366 +#: netbox/ipam/forms/filtersets.py:366 msgid "Assigned to an interface" msgstr "Affecté à une interface" -#: ipam/forms/filtersets.py:373 templates/ipam/ipaddress.html:51 +#: netbox/ipam/forms/filtersets.py:373 netbox/templates/ipam/ipaddress.html:51 msgid "DNS Name" msgstr "Nom DNS" -#: ipam/forms/filtersets.py:416 ipam/models/vlans.py:235 ipam/tables/ip.py:176 -#: ipam/tables/vlans.py:82 ipam/views.py:971 netbox/navigation/menu.py:193 -#: netbox/navigation/menu.py:195 +#: 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 msgid "VLANs" msgstr "VLAN" -#: ipam/forms/filtersets.py:457 +#: netbox/ipam/forms/filtersets.py:457 msgid "Contains VLAN ID" msgstr "Contient un ID de VLAN" -#: ipam/forms/filtersets.py:513 ipam/models/vlans.py:176 -#: templates/ipam/vlan.html:31 +#: netbox/ipam/forms/filtersets.py:513 netbox/ipam/models/vlans.py:192 +#: netbox/templates/ipam/vlan.html:31 msgid "VLAN ID" msgstr "IDENTIFIANT DE VLAN" -#: ipam/forms/filtersets.py:556 ipam/forms/model_forms.py:320 -#: ipam/forms/model_forms.py:713 ipam/forms/model_forms.py:739 -#: ipam/tables/vlans.py:195 templates/virtualization/virtualdisk.html:21 -#: templates/virtualization/virtualmachine.html:12 -#: templates/virtualization/vminterface.html:21 -#: templates/vpn/tunneltermination.html:25 -#: virtualization/forms/filtersets.py:197 -#: virtualization/forms/filtersets.py:242 -#: virtualization/forms/model_forms.py:220 -#: virtualization/tables/virtualmachines.py:135 -#: virtualization/tables/virtualmachines.py:190 vpn/choices.py:45 -#: vpn/forms/filtersets.py:293 vpn/forms/model_forms.py:160 -#: vpn/forms/model_forms.py:171 vpn/forms/model_forms.py:273 -#: vpn/forms/model_forms.py:454 +#: netbox/ipam/forms/filtersets.py: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" -#: ipam/forms/model_forms.py:80 templates/ipam/routetarget.html:10 +#: netbox/ipam/forms/model_forms.py:80 +#: netbox/templates/ipam/routetarget.html:10 msgid "Route Target" msgstr "Cible de l'itinéraire" -#: ipam/forms/model_forms.py:114 ipam/tables/ip.py:117 -#: templates/ipam/aggregate.html:11 templates/ipam/prefix.html:38 +#: netbox/ipam/forms/model_forms.py:114 netbox/ipam/tables/ip.py:117 +#: netbox/templates/ipam/aggregate.html:11 +#: netbox/templates/ipam/prefix.html:38 msgid "Aggregate" msgstr "Agrégat" -#: ipam/forms/model_forms.py:135 templates/ipam/asnrange.html:12 +#: netbox/ipam/forms/model_forms.py:135 netbox/templates/ipam/asnrange.html:12 msgid "ASN Range" msgstr "Plage ASN" -#: ipam/forms/model_forms.py:231 +#: netbox/ipam/forms/model_forms.py:231 msgid "Site/VLAN Assignment" msgstr "Affectation de site/VLAN" -#: ipam/forms/model_forms.py:259 templates/ipam/iprange.html:10 +#: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10 msgid "IP Range" msgstr "Plage IP" -#: ipam/forms/model_forms.py:295 ipam/forms/model_forms.py:321 -#: ipam/forms/model_forms.py:473 templates/ipam/fhrpgroup.html:19 +#: 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 msgid "FHRP Group" msgstr "Groupe FHRP" -#: ipam/forms/model_forms.py:310 +#: netbox/ipam/forms/model_forms.py:310 msgid "Make this the primary IP for the device/VM" msgstr "" "Faites-en l'adresse IP principale de l'appareil/de la machine virtuelle" -#: ipam/forms/model_forms.py:325 +#: netbox/ipam/forms/model_forms.py:314 +msgid "Make this the out-of-band IP for the device" +msgstr "" + +#: netbox/ipam/forms/model_forms.py:329 msgid "NAT IP (Inside)" msgstr "IP NAT (interne)" -#: ipam/forms/model_forms.py:384 +#: netbox/ipam/forms/model_forms.py:391 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." -#: ipam/forms/model_forms.py:390 ipam/models/ip.py:897 -msgid "" -"Cannot reassign IP address while it is designated as the primary IP for the " -"parent object" +#: netbox/ipam/forms/model_forms.py:398 +msgid "Cannot reassign primary IP address for the parent device/VM" msgstr "" -"Impossible de réattribuer l'adresse IP lorsqu'elle est désignée comme " -"adresse IP principale pour l'objet parent" -#: ipam/forms/model_forms.py:400 +#: netbox/ipam/forms/model_forms.py:402 +msgid "Cannot reassign out-of-Band IP address for the parent device" +msgstr "" + +#: netbox/ipam/forms/model_forms.py:412 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." -#: ipam/forms/model_forms.py:475 +#: netbox/ipam/forms/model_forms.py:420 +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 msgid "Virtual IP Address" msgstr "Adresse IP virtuelle" -#: ipam/forms/model_forms.py:560 +#: netbox/ipam/forms/model_forms.py:593 msgid "Assignment already exists" msgstr "L'affectation existe déjà" -#: ipam/forms/model_forms.py:569 templates/ipam/vlangroup.html:42 +#: netbox/ipam/forms/model_forms.py:602 +#: netbox/templates/ipam/vlangroup.html:42 msgid "VLAN IDs" msgstr "ID de VLAN" -#: ipam/forms/model_forms.py:587 +#: netbox/ipam/forms/model_forms.py:620 msgid "Child VLANs" msgstr "VLAN pour enfants" -#: ipam/forms/model_forms.py:664 ipam/forms/model_forms.py:696 +#: netbox/ipam/forms/model_forms.py:697 netbox/ipam/forms/model_forms.py:729 msgid "" "Comma-separated list of one or more port numbers. A range may be specified " "using a hyphen." @@ -9348,133 +10005,134 @@ 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." -#: ipam/forms/model_forms.py:669 templates/ipam/servicetemplate.html:12 +#: netbox/ipam/forms/model_forms.py:702 +#: netbox/templates/ipam/servicetemplate.html:12 msgid "Service Template" msgstr "Modèle de service" -#: ipam/forms/model_forms.py:716 +#: netbox/ipam/forms/model_forms.py:749 msgid "Port(s)" msgstr "Port (x)" -#: ipam/forms/model_forms.py:717 ipam/forms/model_forms.py:745 -#: templates/ipam/service.html:21 +#: netbox/ipam/forms/model_forms.py:750 netbox/ipam/forms/model_forms.py:778 +#: netbox/templates/ipam/service.html:21 msgid "Service" msgstr "Service" -#: ipam/forms/model_forms.py:730 +#: netbox/ipam/forms/model_forms.py:763 msgid "Service template" msgstr "Modèle de service" -#: ipam/forms/model_forms.py:742 +#: netbox/ipam/forms/model_forms.py:775 msgid "From Template" msgstr "À partir du modèle" -#: ipam/forms/model_forms.py:743 +#: netbox/ipam/forms/model_forms.py:776 msgid "Custom" msgstr "Personnalisé" -#: ipam/forms/model_forms.py:773 +#: netbox/ipam/forms/model_forms.py:806 msgid "" "Must specify name, protocol, and port(s) if not using a service template." msgstr "" "Vous devez spécifier le nom, le protocole et le ou les ports si vous " "n'utilisez pas de modèle de service." -#: ipam/models/asns.py:34 +#: netbox/ipam/models/asns.py:34 msgid "start" msgstr "démarrer" -#: ipam/models/asns.py:51 +#: netbox/ipam/models/asns.py:51 msgid "ASN range" msgstr "Plage ASN" -#: ipam/models/asns.py:52 +#: netbox/ipam/models/asns.py:52 msgid "ASN ranges" msgstr "Plages ASN" -#: ipam/models/asns.py:72 +#: netbox/ipam/models/asns.py:72 #, python-brace-format msgid "Starting ASN ({start}) must be lower than ending ASN ({end})." msgstr "" "Démarrage de l'ASN ({start}) doit être inférieur à l'ASN final ({end})." -#: ipam/models/asns.py:104 +#: netbox/ipam/models/asns.py:104 msgid "Regional Internet Registry responsible for this AS number space" msgstr "Registre Internet régional responsable de cet espace numérique AS" -#: ipam/models/asns.py:109 +#: netbox/ipam/models/asns.py:109 msgid "16- or 32-bit autonomous system number" msgstr "Numéro de système autonome 16 ou 32 bits" -#: ipam/models/fhrp.py:22 +#: netbox/ipam/models/fhrp.py:22 msgid "group ID" msgstr "ID de groupe" -#: ipam/models/fhrp.py:30 ipam/models/services.py:22 +#: netbox/ipam/models/fhrp.py:30 netbox/ipam/models/services.py:22 msgid "protocol" msgstr "protocole" -#: ipam/models/fhrp.py:38 wireless/models.py:28 +#: netbox/ipam/models/fhrp.py:38 netbox/wireless/models.py:28 msgid "authentication type" msgstr "type d'authentification" -#: ipam/models/fhrp.py:43 +#: netbox/ipam/models/fhrp.py:43 msgid "authentication key" msgstr "clé d'authentification" -#: ipam/models/fhrp.py:56 +#: netbox/ipam/models/fhrp.py:56 msgid "FHRP group" msgstr "Groupe FHRP" -#: ipam/models/fhrp.py:57 +#: netbox/ipam/models/fhrp.py:57 msgid "FHRP groups" msgstr "Groupes FHRP" -#: ipam/models/fhrp.py:113 +#: netbox/ipam/models/fhrp.py:113 msgid "FHRP group assignment" msgstr "Affectation au groupe FHRP" -#: ipam/models/fhrp.py:114 +#: netbox/ipam/models/fhrp.py:114 msgid "FHRP group assignments" msgstr "Missions du groupe FHRP" -#: ipam/models/ip.py:65 +#: netbox/ipam/models/ip.py:65 msgid "private" msgstr "privé" -#: ipam/models/ip.py:66 +#: netbox/ipam/models/ip.py:66 msgid "IP space managed by this RIR is considered private" msgstr "L'espace IP géré par ce RIR est considéré comme privé" -#: ipam/models/ip.py:72 netbox/navigation/menu.py:182 +#: netbox/ipam/models/ip.py:72 netbox/netbox/navigation/menu.py:182 msgid "RIRs" msgstr "IR" -#: ipam/models/ip.py:84 +#: netbox/ipam/models/ip.py:84 msgid "IPv4 or IPv6 network" msgstr "Réseau IPv4 ou IPv6" -#: ipam/models/ip.py:91 +#: netbox/ipam/models/ip.py:91 msgid "Regional Internet Registry responsible for this IP space" msgstr "Registre Internet régional responsable de cet espace IP" -#: ipam/models/ip.py:101 +#: netbox/ipam/models/ip.py:101 msgid "date added" msgstr "date d'ajout" -#: ipam/models/ip.py:115 +#: netbox/ipam/models/ip.py:115 msgid "aggregate" msgstr "global" -#: ipam/models/ip.py:116 +#: netbox/ipam/models/ip.py:116 msgid "aggregates" msgstr "agrégats" -#: ipam/models/ip.py:132 +#: netbox/ipam/models/ip.py:132 msgid "Cannot create aggregate with /0 mask." msgstr "Impossible de créer un agrégat avec le masque /0." -#: ipam/models/ip.py:144 +#: netbox/ipam/models/ip.py:144 #, python-brace-format msgid "" "Aggregates cannot overlap. {prefix} is already covered by an existing " @@ -9483,7 +10141,7 @@ msgstr "" "Les agrégats ne peuvent pas se chevaucher. {prefix} est déjà couvert par un " "agrégat existant ({aggregate})." -#: ipam/models/ip.py:158 +#: netbox/ipam/models/ip.py:158 #, python-brace-format msgid "" "Prefixes cannot overlap aggregates. {prefix} covers an existing aggregate " @@ -9492,163 +10150,165 @@ msgstr "" "Les préfixes ne peuvent pas chevaucher des agrégats. {prefix} couvre un " "agrégat existant ({aggregate})." -#: ipam/models/ip.py:200 ipam/models/ip.py:737 vpn/models/tunnels.py:114 +#: netbox/ipam/models/ip.py:200 netbox/ipam/models/ip.py:737 +#: netbox/vpn/models/tunnels.py:114 msgid "role" msgstr "rôle" -#: ipam/models/ip.py:201 +#: netbox/ipam/models/ip.py:201 msgid "roles" msgstr "rôles" -#: ipam/models/ip.py:217 ipam/models/ip.py:293 +#: netbox/ipam/models/ip.py:217 netbox/ipam/models/ip.py:293 msgid "prefix" msgstr "préfixe" -#: ipam/models/ip.py:218 +#: netbox/ipam/models/ip.py:218 msgid "IPv4 or IPv6 network with mask" msgstr "Réseau IPv4 ou IPv6 avec masque" -#: ipam/models/ip.py:254 +#: netbox/ipam/models/ip.py:254 msgid "Operational status of this prefix" msgstr "État opérationnel de ce préfixe" -#: ipam/models/ip.py:262 +#: netbox/ipam/models/ip.py:262 msgid "The primary function of this prefix" msgstr "La fonction principale de ce préfixe" -#: ipam/models/ip.py:265 +#: netbox/ipam/models/ip.py:265 msgid "is a pool" -msgstr "est une piscine" +msgstr "est une plage d'adresses" -#: ipam/models/ip.py:267 +#: netbox/ipam/models/ip.py:267 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" -#: ipam/models/ip.py:270 ipam/models/ip.py:537 +#: netbox/ipam/models/ip.py:270 netbox/ipam/models/ip.py:537 msgid "mark utilized" msgstr "marque utilisée" -#: ipam/models/ip.py:294 +#: netbox/ipam/models/ip.py:294 msgid "prefixes" msgstr "préfixes" -#: ipam/models/ip.py:317 +#: netbox/ipam/models/ip.py:317 msgid "Cannot create prefix with /0 mask." msgstr "Impossible de créer un préfixe avec le masque /0." -#: ipam/models/ip.py:324 ipam/models/ip.py:874 +#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:874 #, python-brace-format msgid "VRF {vrf}" msgstr "VRF {vrf}" -#: ipam/models/ip.py:324 ipam/models/ip.py:874 +#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:874 msgid "global table" msgstr "tableau global" -#: ipam/models/ip.py:326 +#: netbox/ipam/models/ip.py:326 #, python-brace-format msgid "Duplicate prefix found in {table}: {prefix}" msgstr "Préfixe dupliqué trouvé dans {table}: {prefix}" -#: ipam/models/ip.py:495 +#: netbox/ipam/models/ip.py:495 msgid "start address" msgstr "adresse de départ" -#: ipam/models/ip.py:496 ipam/models/ip.py:500 ipam/models/ip.py:712 +#: netbox/ipam/models/ip.py:496 netbox/ipam/models/ip.py:500 +#: netbox/ipam/models/ip.py:712 msgid "IPv4 or IPv6 address (with mask)" msgstr "Adresse IPv4 ou IPv6 (avec masque)" -#: ipam/models/ip.py:499 +#: netbox/ipam/models/ip.py:499 msgid "end address" msgstr "adresse finale" -#: ipam/models/ip.py:526 +#: netbox/ipam/models/ip.py:526 msgid "Operational status of this range" msgstr "État opérationnel de cette gamme" -#: ipam/models/ip.py:534 +#: netbox/ipam/models/ip.py:534 msgid "The primary function of this range" msgstr "La principale fonction de cette gamme" -#: ipam/models/ip.py:548 +#: netbox/ipam/models/ip.py:548 msgid "IP range" msgstr "plage IP" -#: ipam/models/ip.py:549 +#: netbox/ipam/models/ip.py:549 msgid "IP ranges" msgstr "Plages IP" -#: ipam/models/ip.py:565 +#: netbox/ipam/models/ip.py:565 msgid "Starting and ending IP address versions must match" msgstr "Les versions des adresses IP de début et de fin doivent correspondre" -#: ipam/models/ip.py:571 +#: netbox/ipam/models/ip.py:571 msgid "Starting and ending IP address masks must match" msgstr "Les masques d'adresse IP de début et de fin doivent correspondre" -#: ipam/models/ip.py:578 +#: netbox/ipam/models/ip.py:578 #, python-brace-format msgid "" "Ending address must be greater than the starting address ({start_address})" msgstr "" "L'adresse de fin doit être supérieure à l'adresse de début ({start_address})" -#: ipam/models/ip.py:590 +#: netbox/ipam/models/ip.py:590 #, python-brace-format msgid "Defined addresses overlap with range {overlapping_range} in VRF {vrf}" msgstr "" "Les adresses définies se chevauchent avec la plage {overlapping_range} en " "VRF {vrf}" -#: ipam/models/ip.py:599 +#: netbox/ipam/models/ip.py:599 #, 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})" -#: ipam/models/ip.py:711 tenancy/models/contacts.py:82 +#: netbox/ipam/models/ip.py:711 netbox/tenancy/models/contacts.py:82 msgid "address" msgstr "adresse" -#: ipam/models/ip.py:734 +#: netbox/ipam/models/ip.py:734 msgid "The operational status of this IP" msgstr "L'état opérationnel de cette adresse IP" -#: ipam/models/ip.py:741 +#: netbox/ipam/models/ip.py:741 msgid "The functional role of this IP" msgstr "Le rôle fonctionnel de cette propriété intellectuelle" -#: ipam/models/ip.py:765 templates/ipam/ipaddress.html:72 +#: netbox/ipam/models/ip.py:765 netbox/templates/ipam/ipaddress.html:72 msgid "NAT (inside)" msgstr "NAT (intérieur)" -#: ipam/models/ip.py:766 +#: netbox/ipam/models/ip.py:766 msgid "The IP for which this address is the \"outside\" IP" msgstr "" "L'adresse IP pour laquelle cette adresse est l'adresse IP « extérieure »" -#: ipam/models/ip.py:773 +#: netbox/ipam/models/ip.py:773 msgid "Hostname or FQDN (not case-sensitive)" msgstr "Nom d'hôte ou FQDN (pas de distinction majuscules/minuscules)" -#: ipam/models/ip.py:789 ipam/models/services.py:94 +#: netbox/ipam/models/ip.py:789 netbox/ipam/models/services.py:94 msgid "IP addresses" msgstr "Adresses IP" -#: ipam/models/ip.py:845 +#: netbox/ipam/models/ip.py:845 msgid "Cannot create IP address with /0 mask." msgstr "Impossible de créer une adresse IP avec le masque /0." -#: ipam/models/ip.py:851 +#: netbox/ipam/models/ip.py:851 #, python-brace-format msgid "{ip} is a network ID, which may not be assigned to an interface." msgstr "" "{ip} est un identifiant réseau, qui ne peut pas être attribué à une " "interface." -#: ipam/models/ip.py:862 +#: netbox/ipam/models/ip.py:862 #, python-brace-format msgid "" "{ip} is a broadcast address, which may not be assigned to an interface." @@ -9656,101 +10316,117 @@ msgstr "" "{ip} est une adresse de diffusion, qui ne peut pas être attribuée à une " "interface." -#: ipam/models/ip.py:876 +#: netbox/ipam/models/ip.py:876 #, python-brace-format msgid "Duplicate IP address found in {table}: {ipaddress}" msgstr "Adresse IP dupliquée trouvée dans {table}: {ipaddress}" -#: ipam/models/ip.py:903 +#: netbox/ipam/models/ip.py:897 +msgid "" +"Cannot reassign IP address while it is designated as the primary IP for the " +"parent object" +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 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)" -#: ipam/models/services.py:33 +#: netbox/ipam/models/services.py:33 msgid "port numbers" msgstr "numéros de port" -#: ipam/models/services.py:59 +#: netbox/ipam/models/services.py:59 msgid "service template" msgstr "modèle de service" -#: ipam/models/services.py:60 +#: netbox/ipam/models/services.py:60 msgid "service templates" msgstr "modèles de services" -#: ipam/models/services.py:95 +#: netbox/ipam/models/services.py:95 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é" -#: ipam/models/services.py:102 +#: netbox/ipam/models/services.py:102 msgid "service" msgstr "service" -#: ipam/models/services.py:103 +#: netbox/ipam/models/services.py:103 msgid "services" msgstr "services" -#: ipam/models/services.py:117 +#: netbox/ipam/models/services.py:117 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." -#: ipam/models/services.py:119 +#: netbox/ipam/models/services.py:119 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." -#: ipam/models/vlans.py:85 +#: netbox/ipam/models/vlans.py:85 msgid "VLAN groups" msgstr "groupes VLAN" -#: ipam/models/vlans.py:95 +#: netbox/ipam/models/vlans.py:95 msgid "Cannot set scope_type without scope_id." msgstr "Impossible de définir scope_type sans scope_id." -#: ipam/models/vlans.py:97 +#: netbox/ipam/models/vlans.py:97 msgid "Cannot set scope_id without scope_type." msgstr "Impossible de définir scope_id sans scope_type." -#: ipam/models/vlans.py:101 +#: netbox/ipam/models/vlans.py:105 +#, python-brace-format +msgid "Starting VLAN ID in range ({value}) cannot be less than {minimum}" +msgstr "" + +#: netbox/ipam/models/vlans.py:111 +#, python-brace-format +msgid "Ending VLAN ID in range ({value}) cannot exceed {maximum}" +msgstr "" + +#: 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 "" + +#: netbox/ipam/models/vlans.py:124 msgid "Ranges cannot overlap." msgstr "Les plages ne peuvent pas se chevaucher." -#: ipam/models/vlans.py:106 -#, python-brace-format -msgid "" -"Maximum child VID must be greater than or equal to minimum child VID " -"({value})" -msgstr "" -"La VID maximale pour les enfants doit être supérieure ou égale à la VID " -"minimale pour les enfants ({value})" - -#: ipam/models/vlans.py:165 +#: netbox/ipam/models/vlans.py:181 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)" -#: ipam/models/vlans.py:173 +#: netbox/ipam/models/vlans.py:189 msgid "VLAN group (optional)" msgstr "Groupe VLAN (facultatif)" -#: ipam/models/vlans.py:181 +#: netbox/ipam/models/vlans.py:197 msgid "Numeric VLAN ID (1-4094)" msgstr "ID VLAN numérique (1-4094)" -#: ipam/models/vlans.py:199 +#: netbox/ipam/models/vlans.py:215 msgid "Operational status of this VLAN" msgstr "État opérationnel de ce VLAN" -#: ipam/models/vlans.py:207 +#: netbox/ipam/models/vlans.py:223 msgid "The primary function of this VLAN" msgstr "La principale fonction de ce VLAN" -#: ipam/models/vlans.py:250 +#: netbox/ipam/models/vlans.py:266 #, python-brace-format msgid "" "VLAN is assigned to group {group} (scope: {scope}); cannot also assign to " @@ -9759,168 +10435,170 @@ msgstr "" "Le VLAN est associé au groupe {group} (champ d'application : {scope}) ; ne " "peut pas également être associé au site {site}." -#: ipam/models/vlans.py:259 +#: netbox/ipam/models/vlans.py:275 #, 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}" -#: ipam/models/vrfs.py:30 +#: netbox/ipam/models/vrfs.py:30 msgid "route distinguisher" msgstr "Distincteur d'itinéraire" -#: ipam/models/vrfs.py:31 +#: netbox/ipam/models/vrfs.py:31 msgid "Unique route distinguisher (as defined in RFC 4364)" msgstr "Distincteur d'itinéraire unique (tel que défini dans la RFC 4364)" -#: ipam/models/vrfs.py:42 +#: netbox/ipam/models/vrfs.py:42 msgid "enforce unique space" msgstr "renforcer un espace unique" -#: ipam/models/vrfs.py:43 +#: netbox/ipam/models/vrfs.py:43 msgid "Prevent duplicate prefixes/IP addresses within this VRF" msgstr "Empêchez les préfixes/adresses IP dupliqués dans ce VRF" -#: ipam/models/vrfs.py:63 netbox/navigation/menu.py:186 -#: netbox/navigation/menu.py:188 +#: netbox/ipam/models/vrfs.py:63 netbox/netbox/navigation/menu.py:186 +#: netbox/netbox/navigation/menu.py:188 msgid "VRFs" msgstr "VRF" -#: ipam/models/vrfs.py:82 +#: netbox/ipam/models/vrfs.py:82 msgid "Route target value (formatted in accordance with RFC 4360)" msgstr "Valeur cible de l'itinéraire (formatée conformément à la RFC 4360)" -#: ipam/models/vrfs.py:94 +#: netbox/ipam/models/vrfs.py:94 msgid "route target" msgstr "cible de l'itinéraire" -#: ipam/models/vrfs.py:95 +#: netbox/ipam/models/vrfs.py:95 msgid "route targets" msgstr "cibles de l'itinéraire" -#: ipam/tables/asn.py:52 +#: netbox/ipam/tables/asn.py:52 msgid "ASDOT" msgstr "ASDOT" -#: ipam/tables/asn.py:57 +#: netbox/ipam/tables/asn.py:57 msgid "Site Count" msgstr "Nombre de sites" -#: ipam/tables/asn.py:62 +#: netbox/ipam/tables/asn.py:62 msgid "Provider Count" msgstr "Nombre de fournisseurs" -#: ipam/tables/ip.py:95 netbox/navigation/menu.py:179 -#: netbox/navigation/menu.py:181 +#: netbox/ipam/tables/ip.py:95 netbox/netbox/navigation/menu.py:179 +#: netbox/netbox/navigation/menu.py:181 msgid "Aggregates" msgstr "Agrégats" -#: ipam/tables/ip.py:125 +#: netbox/ipam/tables/ip.py:125 msgid "Added" msgstr "Ajouté" -#: ipam/tables/ip.py:128 ipam/tables/ip.py:166 ipam/tables/vlans.py:142 -#: ipam/views.py:346 netbox/navigation/menu.py:165 -#: netbox/navigation/menu.py:167 templates/ipam/vlan.html:84 +#: 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 msgid "Prefixes" msgstr "Préfixes" -#: ipam/tables/ip.py:131 ipam/tables/ip.py:270 ipam/tables/ip.py:324 -#: ipam/tables/vlans.py:86 templates/dcim/device.html:260 -#: templates/ipam/aggregate.html:24 templates/ipam/iprange.html:29 -#: templates/ipam/prefix.html:106 +#: 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/templates/dcim/device.html:260 +#: netbox/templates/ipam/aggregate.html:24 +#: netbox/templates/ipam/iprange.html:29 netbox/templates/ipam/prefix.html:106 msgid "Utilization" msgstr "Utilisation" -#: ipam/tables/ip.py:171 netbox/navigation/menu.py:161 +#: netbox/ipam/tables/ip.py:171 netbox/netbox/navigation/menu.py:161 msgid "IP Ranges" msgstr "Plages d'adresses IP" -#: ipam/tables/ip.py:221 +#: netbox/ipam/tables/ip.py:221 msgid "Prefix (Flat)" msgstr "Préfixe (plat)" -#: ipam/tables/ip.py:225 +#: netbox/ipam/tables/ip.py:225 msgid "Depth" msgstr "Profondeur" -#: ipam/tables/ip.py:262 +#: netbox/ipam/tables/ip.py:262 msgid "Pool" -msgstr "Piscine" +msgstr "Plage d'adresses" -#: ipam/tables/ip.py:266 ipam/tables/ip.py:320 +#: netbox/ipam/tables/ip.py:266 netbox/ipam/tables/ip.py:320 msgid "Marked Utilized" msgstr "Marqué comme utilisé" -#: ipam/tables/ip.py:304 +#: netbox/ipam/tables/ip.py:304 msgid "Start address" msgstr "Adresse de départ" -#: ipam/tables/ip.py:383 +#: netbox/ipam/tables/ip.py:383 msgid "NAT (Inside)" msgstr "NAT (intérieur)" -#: ipam/tables/ip.py:388 +#: netbox/ipam/tables/ip.py:388 msgid "NAT (Outside)" msgstr "NAT (extérieur)" -#: ipam/tables/ip.py:393 +#: netbox/ipam/tables/ip.py:393 msgid "Assigned" msgstr "Attribué" -#: ipam/tables/ip.py:429 templates/vpn/l2vpntermination.html:16 -#: vpn/forms/filtersets.py:240 +#: netbox/ipam/tables/ip.py:429 netbox/templates/vpn/l2vpntermination.html:16 +#: netbox/vpn/forms/filtersets.py:240 msgid "Assigned Object" msgstr "Objet attribué" -#: ipam/tables/vlans.py:68 +#: netbox/ipam/tables/vlans.py:68 msgid "Scope Type" msgstr "Type de portée" -#: ipam/tables/vlans.py:76 +#: netbox/ipam/tables/vlans.py:76 msgid "VID Ranges" msgstr "Gammes VID" -#: ipam/tables/vlans.py:111 ipam/tables/vlans.py:214 -#: templates/dcim/inc/interface_vlans_table.html:4 +#: netbox/ipam/tables/vlans.py:111 netbox/ipam/tables/vlans.py:214 +#: netbox/templates/dcim/inc/interface_vlans_table.html:4 msgid "VID" msgstr "VID" -#: ipam/tables/vrfs.py:30 +#: netbox/ipam/tables/vrfs.py:30 msgid "RD" msgstr "RD" -#: ipam/tables/vrfs.py:33 +#: netbox/ipam/tables/vrfs.py:33 msgid "Unique" msgstr "Unique" -#: ipam/tables/vrfs.py:37 vpn/tables/l2vpn.py:27 +#: netbox/ipam/tables/vrfs.py:37 netbox/vpn/tables/l2vpn.py:27 msgid "Import Targets" msgstr "Cibles d'importation" -#: ipam/tables/vrfs.py:42 vpn/tables/l2vpn.py:32 +#: netbox/ipam/tables/vrfs.py:42 netbox/vpn/tables/l2vpn.py:32 msgid "Export Targets" msgstr "Objectifs d'exportation" -#: ipam/validators.py:9 +#: netbox/ipam/validators.py:9 #, python-brace-format msgid "{prefix} is not a valid prefix. Did you mean {suggested}?" msgstr "{prefix} n'est pas un préfixe valide. Vouliez-vous dire {suggested}?" -#: ipam/validators.py:16 +#: netbox/ipam/validators.py:16 #, python-format msgid "The prefix length must be less than or equal to %(limit_value)s." msgstr "" "La longueur du préfixe doit être inférieure ou égale à %(limit_value)s." -#: ipam/validators.py:24 +#: netbox/ipam/validators.py:24 #, python-format msgid "The prefix length must be greater than or equal to %(limit_value)s." msgstr "" "La longueur du préfixe doit être supérieure ou égale à %(limit_value)s." -#: ipam/validators.py:33 +#: netbox/ipam/validators.py:33 msgid "" "Only alphanumeric characters, asterisks, hyphens, periods, and underscores " "are allowed in DNS names" @@ -9928,31 +10606,31 @@ 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" -#: ipam/views.py:533 +#: netbox/ipam/views.py:533 msgid "Child Prefixes" msgstr "Préfixes pour enfants" -#: ipam/views.py:569 +#: netbox/ipam/views.py:569 msgid "Child Ranges" msgstr "Plages pour enfants" -#: ipam/views.py:898 +#: netbox/ipam/views.py:898 msgid "Related IPs" msgstr "IP associées" -#: ipam/views.py:1127 +#: netbox/ipam/views.py:1127 msgid "Device Interfaces" msgstr "Interfaces des appareils" -#: ipam/views.py:1145 +#: netbox/ipam/views.py:1145 msgid "VM Interfaces" msgstr "Interfaces de machines virtuelles" -#: netbox/api/fields.py:65 +#: netbox/netbox/api/fields.py:65 msgid "This field may not be blank." msgstr "Ce champ n'est peut-être pas vide." -#: netbox/api/fields.py:70 +#: netbox/netbox/api/fields.py:70 msgid "" "Value must be passed directly (e.g. \"foo\": 123); do not use a dictionary " "or list." @@ -9960,337 +10638,350 @@ msgstr "" "La valeur doit être transmise directement (par exemple « foo » : 123) ; " "n'utilisez pas de dictionnaire ni de liste." -#: netbox/api/fields.py:91 +#: netbox/netbox/api/fields.py:91 #, python-brace-format msgid "{value} is not a valid choice." msgstr "{value} n'est pas un choix valable." -#: netbox/api/fields.py:104 +#: netbox/netbox/api/fields.py:104 #, python-brace-format msgid "Invalid content type: {content_type}" msgstr "Type de contenu non valide : {content_type}" -#: netbox/api/fields.py:105 +#: netbox/netbox/api/fields.py:105 msgid "Invalid value. Specify a content type as '.'." msgstr "" "Valeur non valide. Spécifiez un type de contenu comme " "«.'." -#: netbox/api/fields.py:167 +#: netbox/netbox/api/fields.py:167 msgid "Ranges must be specified in the form (lower, upper)." msgstr "" "Les plages doivent être spécifiées dans le formulaire (inférieur, " "supérieur)." -#: netbox/api/fields.py:169 +#: netbox/netbox/api/fields.py:169 msgid "Range boundaries must be defined as integers." msgstr "" "Les limites des plages doivent être définies sous forme de nombres entiers." -#: netbox/api/serializers/fields.py:40 +#: netbox/netbox/api/serializers/fields.py:40 #, python-brace-format msgid "{class_name} must implement get_view_name()" msgstr "{class_name} doit implémenter get_view_name ()" -#: netbox/authentication/__init__.py:138 +#: netbox/netbox/authentication/__init__.py:138 #, python-brace-format msgid "Invalid permission {permission} for model {model}" msgstr "Autorisation non valide {permission} pour modèle {model}" -#: netbox/choices.py:49 +#: netbox/netbox/choices.py:49 msgid "Dark Red" msgstr "Rouge foncé" -#: netbox/choices.py:52 +#: netbox/netbox/choices.py:52 msgid "Rose" msgstr "Rose" -#: netbox/choices.py:53 +#: netbox/netbox/choices.py:53 msgid "Fuchsia" msgstr "Fuchsia" -#: netbox/choices.py:55 +#: netbox/netbox/choices.py:55 msgid "Dark Purple" msgstr "Violet foncé" -#: netbox/choices.py:58 +#: netbox/netbox/choices.py:58 msgid "Light Blue" msgstr "Bleu clair" -#: netbox/choices.py:61 +#: netbox/netbox/choices.py:61 msgid "Aqua" msgstr "Aqua" -#: netbox/choices.py:62 +#: netbox/netbox/choices.py:62 msgid "Dark Green" msgstr "Vert foncé" -#: netbox/choices.py:64 +#: netbox/netbox/choices.py:64 msgid "Light Green" msgstr "Vert clair" -#: netbox/choices.py:65 +#: netbox/netbox/choices.py:65 msgid "Lime" msgstr "Citron" -#: netbox/choices.py:67 +#: netbox/netbox/choices.py:67 msgid "Amber" msgstr "Ambre" -#: netbox/choices.py:69 +#: netbox/netbox/choices.py:69 msgid "Dark Orange" msgstr "Orange foncé" -#: netbox/choices.py:70 +#: netbox/netbox/choices.py:70 msgid "Brown" msgstr "Marron" -#: netbox/choices.py:71 +#: netbox/netbox/choices.py:71 msgid "Light Grey" msgstr "gris clair" -#: netbox/choices.py:72 +#: netbox/netbox/choices.py:72 msgid "Grey" msgstr "gris" -#: netbox/choices.py:73 +#: netbox/netbox/choices.py:73 msgid "Dark Grey" msgstr "gris foncé" -#: netbox/choices.py:128 +#: netbox/netbox/choices.py:128 msgid "Direct" msgstr "Directement" -#: netbox/choices.py:129 +#: netbox/netbox/choices.py:129 msgid "Upload" msgstr "Téléverser" -#: netbox/choices.py:141 netbox/choices.py:155 +#: netbox/netbox/choices.py:141 netbox/netbox/choices.py:155 msgid "Auto-detect" msgstr "Détection automatique" -#: netbox/choices.py:156 +#: netbox/netbox/choices.py:156 msgid "Comma" msgstr "Virgule" -#: netbox/choices.py:157 +#: netbox/netbox/choices.py:157 msgid "Semicolon" msgstr "Point-virgule" -#: netbox/choices.py:158 +#: netbox/netbox/choices.py:158 msgid "Tab" msgstr "Onglet" -#: netbox/config/__init__.py:67 +#: netbox/netbox/config/__init__.py:67 #, python-brace-format msgid "Invalid configuration parameter: {item}" msgstr "Paramètre de configuration non valide : {item}" -#: netbox/config/parameters.py:22 templates/core/inc/config_data.html:62 +#: netbox/netbox/config/parameters.py:22 +#: netbox/templates/core/inc/config_data.html:62 msgid "Login banner" msgstr "Bannière de connexion" -#: netbox/config/parameters.py:24 +#: netbox/netbox/config/parameters.py:24 msgid "Additional content to display on the login page" msgstr "Contenu supplémentaire à afficher sur la page de connexion" -#: netbox/config/parameters.py:33 templates/core/inc/config_data.html:66 +#: netbox/netbox/config/parameters.py:33 +#: netbox/templates/core/inc/config_data.html:66 msgid "Maintenance banner" msgstr "Bannière de maintenance" -#: netbox/config/parameters.py:35 +#: netbox/netbox/config/parameters.py:35 msgid "Additional content to display when in maintenance mode" msgstr "Contenu supplémentaire à afficher en mode maintenance" -#: netbox/config/parameters.py:44 templates/core/inc/config_data.html:70 +#: netbox/netbox/config/parameters.py:44 +#: netbox/templates/core/inc/config_data.html:70 msgid "Top banner" msgstr "Bannière supérieure" -#: netbox/config/parameters.py:46 +#: netbox/netbox/config/parameters.py:46 msgid "Additional content to display at the top of every page" msgstr "Contenu supplémentaire à afficher en haut de chaque page" -#: netbox/config/parameters.py:55 templates/core/inc/config_data.html:74 +#: netbox/netbox/config/parameters.py:55 +#: netbox/templates/core/inc/config_data.html:74 msgid "Bottom banner" msgstr "Bannière inférieure" -#: netbox/config/parameters.py:57 +#: netbox/netbox/config/parameters.py:57 msgid "Additional content to display at the bottom of every page" msgstr "Contenu supplémentaire à afficher au bas de chaque page" -#: netbox/config/parameters.py:68 +#: netbox/netbox/config/parameters.py:68 msgid "Globally unique IP space" msgstr "Un espace IP unique au monde" -#: netbox/config/parameters.py:70 +#: netbox/netbox/config/parameters.py:70 msgid "Enforce unique IP addressing within the global table" msgstr "Appliquez un adressage IP unique dans le tableau global" -#: netbox/config/parameters.py:75 templates/core/inc/config_data.html:44 +#: netbox/netbox/config/parameters.py:75 +#: netbox/templates/core/inc/config_data.html:44 msgid "Prefer IPv4" msgstr "Préférez IPv4" -#: netbox/config/parameters.py:77 +#: netbox/netbox/config/parameters.py:77 msgid "Prefer IPv4 addresses over IPv6" msgstr "Préférez les adresses IPv4 à IPv6" -#: netbox/config/parameters.py:84 +#: netbox/netbox/config/parameters.py:84 msgid "Rack unit height" msgstr "Hauteur de la baie" -#: netbox/config/parameters.py:86 +#: netbox/netbox/config/parameters.py:86 msgid "Default unit height for rendered rack elevations" msgstr "" "Valeur par défaut du nombre d'unités pour les élévations des baies affichées" -#: netbox/config/parameters.py:91 +#: netbox/netbox/config/parameters.py:91 msgid "Rack unit width" msgstr "Largeur de l'unité de la baie" -#: netbox/config/parameters.py:93 +#: netbox/netbox/config/parameters.py:93 msgid "Default unit width for rendered rack elevations" msgstr "" "Valeur par défaut de la largeur des unités pour les élévations des baies " "affichées" -#: netbox/config/parameters.py:100 +#: netbox/netbox/config/parameters.py:100 msgid "Powerfeed voltage" msgstr "Tension d'alimentation" -#: netbox/config/parameters.py:102 +#: netbox/netbox/config/parameters.py:102 msgid "Default voltage for powerfeeds" msgstr "Tension par défaut pour les alimentations" -#: netbox/config/parameters.py:107 +#: netbox/netbox/config/parameters.py:107 msgid "Powerfeed amperage" msgstr "Ampérage d'alimentation" -#: netbox/config/parameters.py:109 +#: netbox/netbox/config/parameters.py:109 msgid "Default amperage for powerfeeds" msgstr "Ampérage par défaut pour les alimentations" -#: netbox/config/parameters.py:114 +#: netbox/netbox/config/parameters.py:114 msgid "Powerfeed max utilization" msgstr "Utilisation maximale de Powerfeed" -#: netbox/config/parameters.py:116 +#: netbox/netbox/config/parameters.py:116 msgid "Default max utilization for powerfeeds" msgstr "Utilisation maximale par défaut pour les alimentations" -#: netbox/config/parameters.py:123 templates/core/inc/config_data.html:53 +#: netbox/netbox/config/parameters.py:123 +#: netbox/templates/core/inc/config_data.html:53 msgid "Allowed URL schemes" msgstr "Schémas d'URL autorisés" -#: netbox/config/parameters.py:128 +#: netbox/netbox/config/parameters.py:128 msgid "Permitted schemes for URLs in user-provided content" msgstr "" "Schémas autorisés pour les URL dans le contenu fourni par l'utilisateur" -#: netbox/config/parameters.py:136 +#: netbox/netbox/config/parameters.py:136 msgid "Default page size" msgstr "Taille de page par défaut" -#: netbox/config/parameters.py:142 +#: netbox/netbox/config/parameters.py:142 msgid "Maximum page size" msgstr "Taille de page maximale" -#: netbox/config/parameters.py:150 templates/core/inc/config_data.html:96 +#: netbox/netbox/config/parameters.py:150 +#: netbox/templates/core/inc/config_data.html:96 msgid "Custom validators" msgstr "Validateurs personnalisés" -#: netbox/config/parameters.py:152 +#: netbox/netbox/config/parameters.py:152 msgid "Custom validation rules (JSON)" msgstr "Règles de validation personnalisées (JSON)" -#: netbox/config/parameters.py:160 templates/core/inc/config_data.html:104 +#: netbox/netbox/config/parameters.py:160 +#: netbox/templates/core/inc/config_data.html:104 msgid "Protection rules" msgstr "Règles de protection" -#: netbox/config/parameters.py:162 +#: netbox/netbox/config/parameters.py:162 msgid "Deletion protection rules (JSON)" msgstr "Règles de protection contre la suppression (JSON)" -#: netbox/config/parameters.py:172 templates/core/inc/config_data.html:117 +#: netbox/netbox/config/parameters.py:172 +#: netbox/templates/core/inc/config_data.html:117 msgid "Default preferences" msgstr "Préférences par défaut" -#: netbox/config/parameters.py:174 +#: netbox/netbox/config/parameters.py:174 msgid "Default preferences for new users" msgstr "Préférences par défaut pour les nouveaux utilisateurs" -#: netbox/config/parameters.py:181 templates/core/inc/config_data.html:129 +#: netbox/netbox/config/parameters.py:181 +#: netbox/templates/core/inc/config_data.html:129 msgid "Maintenance mode" msgstr "Mode de maintenance" -#: netbox/config/parameters.py:183 +#: netbox/netbox/config/parameters.py:183 msgid "Enable maintenance mode" msgstr "Activer le mode maintenance" -#: netbox/config/parameters.py:188 templates/core/inc/config_data.html:133 +#: netbox/netbox/config/parameters.py:188 +#: netbox/templates/core/inc/config_data.html:133 msgid "GraphQL enabled" msgstr "GraphQL activé" -#: netbox/config/parameters.py:190 +#: netbox/netbox/config/parameters.py:190 msgid "Enable the GraphQL API" msgstr "Activez l'API GraphQL" -#: netbox/config/parameters.py:195 templates/core/inc/config_data.html:137 +#: netbox/netbox/config/parameters.py:195 +#: netbox/templates/core/inc/config_data.html:137 msgid "Changelog retention" msgstr "Conservation du journal des modifications" -#: netbox/config/parameters.py:197 +#: netbox/netbox/config/parameters.py:197 msgid "Days to retain changelog history (set to zero for unlimited)" msgstr "" "Jours pendant lesquels l'historique des modifications est conservé (défini à" " zéro pour un nombre illimité)" -#: netbox/config/parameters.py:202 +#: netbox/netbox/config/parameters.py:202 msgid "Job result retention" msgstr "Maintien des résultats professionnels" -#: netbox/config/parameters.py:204 +#: netbox/netbox/config/parameters.py:204 msgid "Days to retain job result history (set to zero for unlimited)" msgstr "" "Jours pendant lesquels vous conservez l'historique des résultats du travail " "(défini sur zéro pour une durée illimitée)" -#: netbox/config/parameters.py:209 templates/core/inc/config_data.html:145 +#: netbox/netbox/config/parameters.py:209 +#: netbox/templates/core/inc/config_data.html:145 msgid "Maps URL" msgstr "URL des cartes" -#: netbox/config/parameters.py:211 +#: netbox/netbox/config/parameters.py:211 msgid "Base URL for mapping geographic locations" msgstr "URL de base pour cartographier les emplacements géographiques" -#: netbox/forms/__init__.py:12 +#: netbox/netbox/forms/__init__.py:12 msgid "Partial match" msgstr "Match partiel" -#: netbox/forms/__init__.py:13 +#: netbox/netbox/forms/__init__.py:13 msgid "Exact match" msgstr "Correspondance exacte" -#: netbox/forms/__init__.py:14 +#: netbox/netbox/forms/__init__.py:14 msgid "Starts with" msgstr "Commence par" -#: netbox/forms/__init__.py:15 +#: netbox/netbox/forms/__init__.py:15 msgid "Ends with" msgstr "Se termine par" -#: netbox/forms/__init__.py:16 +#: netbox/netbox/forms/__init__.py:16 msgid "Regex" msgstr "Regex" -#: netbox/forms/__init__.py:34 +#: netbox/netbox/forms/__init__.py:34 msgid "Object type(s)" msgstr "Type (s) d'objet" -#: netbox/forms/__init__.py:40 +#: netbox/netbox/forms/__init__.py:40 msgid "Lookup" msgstr "Chercher" -#: netbox/forms/base.py:90 +#: netbox/netbox/forms/base.py:90 msgid "" "Tag slugs separated by commas, encased with double quotes (e.g. " "\"tag1,tag2,tag3\")" @@ -10298,419 +10989,430 @@ msgstr "" "Slugs de balises séparés par des virgules, encadrés par des guillemets " "doubles (par exemple « tag1, tag2, tag3 »)" -#: netbox/forms/base.py:120 +#: netbox/netbox/forms/base.py:120 msgid "Add tags" -msgstr "Ajouter des tags" +msgstr "Ajouter des étiquettes" -#: netbox/forms/base.py:125 +#: netbox/netbox/forms/base.py:125 msgid "Remove tags" -msgstr "Supprimer les tags" +msgstr "Supprimer les étiquettes" -#: netbox/forms/mixins.py:38 +#: netbox/netbox/forms/mixins.py:38 #, python-brace-format msgid "{class_name} must specify a model class." msgstr "{class_name} doit spécifier une classe de modèle." -#: netbox/models/features.py:280 +#: netbox/netbox/models/features.py:280 #, python-brace-format msgid "Unknown field name '{name}' in custom field data." msgstr "" "Nom de champ inconnu '{name}'dans les données de champs personnalisés." -#: netbox/models/features.py:286 +#: netbox/netbox/models/features.py:286 #, python-brace-format msgid "Invalid value for custom field '{name}': {error}" msgstr "Valeur non valide pour le champ personnalisé '{name}« : {error}" -#: netbox/models/features.py:295 +#: netbox/netbox/models/features.py:295 #, python-brace-format msgid "Custom field '{name}' must have a unique value." msgstr "Champ personnalisé '{name}'doit avoir une valeur unique." -#: netbox/models/features.py:302 +#: netbox/netbox/models/features.py:302 #, python-brace-format msgid "Missing required custom field '{name}'." msgstr "Champ personnalisé obligatoire manquant '{name}'." -#: netbox/models/features.py:462 +#: netbox/netbox/models/features.py:462 msgid "Remote data source" msgstr "Source de données distante" -#: netbox/models/features.py:472 +#: netbox/netbox/models/features.py:472 msgid "data path" msgstr "chemin de données" -#: netbox/models/features.py:476 +#: netbox/netbox/models/features.py:476 msgid "Path to remote file (relative to data source root)" msgstr "" "Chemin vers le fichier distant (par rapport à la racine de la source de " "données)" -#: netbox/models/features.py:479 +#: netbox/netbox/models/features.py:479 msgid "auto sync enabled" msgstr "synchronisation automatique activée" -#: netbox/models/features.py:481 +#: netbox/netbox/models/features.py:481 msgid "Enable automatic synchronization of data when the data file is updated" msgstr "" "Activer la synchronisation automatique des données lors de la mise à jour du" " fichier de données" -#: netbox/models/features.py:484 +#: netbox/netbox/models/features.py:484 msgid "date synced" msgstr "date de synchronisation" -#: netbox/models/features.py:578 +#: netbox/netbox/models/features.py:578 #, python-brace-format msgid "{class_name} must implement a sync_data() method." msgstr "{class_name} doit implémenter une méthode sync_data ()." -#: netbox/navigation/menu.py:11 +#: netbox/netbox/navigation/menu.py:11 msgid "Organization" msgstr "Organisation" -#: netbox/navigation/menu.py:19 +#: netbox/netbox/navigation/menu.py:19 msgid "Site Groups" msgstr "Groupes de sites" -#: netbox/navigation/menu.py:27 +#: netbox/netbox/navigation/menu.py:27 msgid "Tenant Groups" msgstr "Groupes de locataires" -#: netbox/navigation/menu.py:34 +#: netbox/netbox/navigation/menu.py:34 msgid "Contact Groups" msgstr "Groupes de contacts" -#: netbox/navigation/menu.py:35 templates/tenancy/contactrole.html:8 +#: netbox/netbox/navigation/menu.py:35 +#: netbox/templates/tenancy/contactrole.html:8 msgid "Contact Roles" msgstr "Rôles de contact" -#: netbox/navigation/menu.py:36 +#: netbox/netbox/navigation/menu.py:36 msgid "Contact Assignments" msgstr "Associer des contacts" -#: netbox/navigation/menu.py:50 +#: netbox/netbox/navigation/menu.py:50 msgid "Rack Roles" -msgstr "Rôles des baies" +msgstr "Rôles de la baie" -#: netbox/navigation/menu.py:54 +#: netbox/netbox/navigation/menu.py:54 msgid "Elevations" msgstr "Élévations" -#: netbox/navigation/menu.py:60 netbox/navigation/menu.py:62 +#: netbox/netbox/navigation/menu.py:60 netbox/netbox/navigation/menu.py:62 msgid "Rack Types" -msgstr "Types de rayonnages" +msgstr "Types de baie" -#: netbox/navigation/menu.py:76 +#: netbox/netbox/navigation/menu.py:76 msgid "Modules" msgstr "Modules" -#: netbox/navigation/menu.py:80 templates/dcim/device.html:160 -#: templates/dcim/virtualdevicecontext.html:8 +#: netbox/netbox/navigation/menu.py:80 netbox/templates/dcim/device.html:160 +#: netbox/templates/dcim/virtualdevicecontext.html:8 msgid "Virtual Device Contexts" msgstr "Contextes des appareils virtuels" -#: netbox/navigation/menu.py:88 +#: netbox/netbox/navigation/menu.py:88 msgid "Manufacturers" msgstr "Fabricants" -#: netbox/navigation/menu.py:92 +#: netbox/netbox/navigation/menu.py:92 msgid "Device Components" msgstr "Composants de l'appareil" -#: netbox/navigation/menu.py:104 templates/dcim/inventoryitemrole.html:8 +#: netbox/netbox/navigation/menu.py:104 +#: netbox/templates/dcim/inventoryitemrole.html:8 msgid "Inventory Item Roles" msgstr "Rôles des articles d'inventaire" -#: netbox/navigation/menu.py:111 netbox/navigation/menu.py:115 +#: netbox/netbox/navigation/menu.py:111 netbox/netbox/navigation/menu.py:115 msgid "Connections" msgstr "Connexions" -#: netbox/navigation/menu.py:117 +#: netbox/netbox/navigation/menu.py:117 msgid "Cables" msgstr "Câbles" -#: netbox/navigation/menu.py:118 +#: netbox/netbox/navigation/menu.py:118 msgid "Wireless Links" msgstr "Liaisons sans fil" -#: netbox/navigation/menu.py:121 +#: netbox/netbox/navigation/menu.py:121 msgid "Interface Connections" msgstr "Connexions d'interface" -#: netbox/navigation/menu.py:126 +#: netbox/netbox/navigation/menu.py:126 msgid "Console Connections" msgstr "Connexions à la console" -#: netbox/navigation/menu.py:131 +#: netbox/netbox/navigation/menu.py:131 msgid "Power Connections" msgstr "Connexions électriques" -#: netbox/navigation/menu.py:147 +#: netbox/netbox/navigation/menu.py:147 msgid "Wireless LAN Groups" msgstr "Groupes réseaux sans fil" -#: netbox/navigation/menu.py:168 +#: netbox/netbox/navigation/menu.py:168 msgid "Prefix & VLAN Roles" msgstr "Préfixes et rôles VLAN" -#: netbox/navigation/menu.py:174 +#: netbox/netbox/navigation/menu.py:174 msgid "ASN Ranges" msgstr "Plages ASN" -#: netbox/navigation/menu.py:196 +#: netbox/netbox/navigation/menu.py:196 msgid "VLAN Groups" msgstr "Groupes VLAN" -#: netbox/navigation/menu.py:203 +#: netbox/netbox/navigation/menu.py:203 msgid "Service Templates" msgstr "Modèles de services" -#: netbox/navigation/menu.py:204 templates/dcim/device.html:302 -#: templates/ipam/ipaddress.html:118 -#: templates/virtualization/virtualmachine.html:154 +#: netbox/netbox/navigation/menu.py:204 netbox/templates/dcim/device.html:302 +#: netbox/templates/ipam/ipaddress.html:118 +#: netbox/templates/virtualization/virtualmachine.html:154 msgid "Services" msgstr "Des services" -#: netbox/navigation/menu.py:211 +#: netbox/netbox/navigation/menu.py:211 msgid "VPN" msgstr "VPN" -#: netbox/navigation/menu.py:215 netbox/navigation/menu.py:217 -#: vpn/tables/tunnels.py:24 +#: netbox/netbox/navigation/menu.py:215 netbox/netbox/navigation/menu.py:217 +#: netbox/vpn/tables/tunnels.py:24 msgid "Tunnels" msgstr "Tunnels" -#: netbox/navigation/menu.py:218 templates/vpn/tunnelgroup.html:8 +#: netbox/netbox/navigation/menu.py:218 +#: netbox/templates/vpn/tunnelgroup.html:8 msgid "Tunnel Groups" msgstr "Groupes de tunnels" -#: netbox/navigation/menu.py:219 +#: netbox/netbox/navigation/menu.py:219 msgid "Tunnel Terminations" msgstr "Terminaisons de tunnels" -#: netbox/navigation/menu.py:223 netbox/navigation/menu.py:225 -#: vpn/models/l2vpn.py:64 +#: netbox/netbox/navigation/menu.py:223 netbox/netbox/navigation/menu.py:225 +#: netbox/vpn/models/l2vpn.py:64 msgid "L2VPNs" msgstr "VPN L2" -#: netbox/navigation/menu.py:226 templates/vpn/l2vpn.html:56 -#: templates/vpn/tunnel.html:72 vpn/tables/tunnels.py:58 +#: 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/navigation/menu.py:232 +#: netbox/netbox/navigation/menu.py:232 msgid "IKE Proposals" msgstr "Propositions IKE" -#: netbox/navigation/menu.py:233 templates/vpn/ikeproposal.html:41 +#: netbox/netbox/navigation/menu.py:233 +#: netbox/templates/vpn/ikeproposal.html:41 msgid "IKE Policies" msgstr "Politiques IKE" -#: netbox/navigation/menu.py:234 +#: netbox/netbox/navigation/menu.py:234 msgid "IPSec Proposals" msgstr "Propositions IPSec" -#: netbox/navigation/menu.py:235 templates/vpn/ipsecproposal.html:37 +#: netbox/netbox/navigation/menu.py:235 +#: netbox/templates/vpn/ipsecproposal.html:37 msgid "IPSec Policies" msgstr "Politiques IPSec" -#: netbox/navigation/menu.py:236 templates/vpn/ikepolicy.html:38 -#: templates/vpn/ipsecpolicy.html:25 +#: netbox/netbox/navigation/menu.py:236 netbox/templates/vpn/ikepolicy.html:38 +#: netbox/templates/vpn/ipsecpolicy.html:25 msgid "IPSec Profiles" msgstr "Profils IPSec" -#: netbox/navigation/menu.py:243 templates/dcim/device_edit.html:78 -msgid "Virtualization" -msgstr "Virtualisation" - -#: netbox/navigation/menu.py:251 -#: templates/virtualization/virtualmachine.html:174 -#: templates/virtualization/virtualmachine/base.html:32 -#: templates/virtualization/virtualmachine_list.html:21 -#: virtualization/tables/virtualmachines.py:104 virtualization/views.py:388 +#: netbox/netbox/navigation/menu.py:251 +#: 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 msgid "Virtual Disks" msgstr "Disques virtuels" -#: netbox/navigation/menu.py:258 +#: netbox/netbox/navigation/menu.py:258 msgid "Cluster Types" msgstr "Types de clusters" -#: netbox/navigation/menu.py:259 +#: netbox/netbox/navigation/menu.py:259 msgid "Cluster Groups" msgstr "Groupes de clusters" -#: netbox/navigation/menu.py:273 +#: netbox/netbox/navigation/menu.py:273 msgid "Circuit Types" msgstr "Types de circuits" -#: netbox/navigation/menu.py:274 +#: netbox/netbox/navigation/menu.py:274 msgid "Circuit Groups" msgstr "Groupes de circuits" -#: netbox/navigation/menu.py:275 templates/circuits/circuit.html:66 +#: netbox/netbox/navigation/menu.py:275 +#: netbox/templates/circuits/circuit.html:66 msgid "Group Assignments" msgstr "Devoirs de groupe" -#: netbox/navigation/menu.py:276 +#: netbox/netbox/navigation/menu.py:276 msgid "Circuit Terminations" msgstr "Terminaisons de circuits" -#: netbox/navigation/menu.py:280 netbox/navigation/menu.py:282 +#: netbox/netbox/navigation/menu.py:280 netbox/netbox/navigation/menu.py:282 msgid "Providers" msgstr "Prestataires" -#: netbox/navigation/menu.py:283 templates/circuits/provider.html:51 +#: netbox/netbox/navigation/menu.py:283 +#: netbox/templates/circuits/provider.html:51 msgid "Provider Accounts" msgstr "Comptes des fournisseurs" -#: netbox/navigation/menu.py:284 +#: netbox/netbox/navigation/menu.py:284 msgid "Provider Networks" msgstr "Réseaux de fournisseurs" -#: netbox/navigation/menu.py:298 +#: netbox/netbox/navigation/menu.py:298 msgid "Power Panels" msgstr "Panneaux d'alimentation" -#: netbox/navigation/menu.py:309 +#: netbox/netbox/navigation/menu.py:309 msgid "Configurations" msgstr "Configurations" -#: netbox/navigation/menu.py:311 +#: netbox/netbox/navigation/menu.py:311 msgid "Config Contexts" msgstr "Contextes de configuration" -#: netbox/navigation/menu.py:312 +#: netbox/netbox/navigation/menu.py:312 msgid "Config Templates" msgstr "Modèles de configuration" -#: netbox/navigation/menu.py:319 netbox/navigation/menu.py:323 +#: netbox/netbox/navigation/menu.py:319 netbox/netbox/navigation/menu.py:323 msgid "Customization" msgstr "Personnalisation" -#: netbox/navigation/menu.py:325 templates/dcim/device_edit.html:103 -#: templates/dcim/htmx/cable_edit.html:81 -#: templates/dcim/virtualchassis_add.html:31 -#: templates/dcim/virtualchassis_edit.html:40 -#: templates/generic/bulk_edit.html:76 templates/htmx/form.html:19 -#: templates/inc/filter_list.html:30 templates/inc/panels/custom_fields.html:7 -#: templates/ipam/ipaddress_bulk_add.html:35 templates/ipam/vlan_edit.html:59 +#: netbox/netbox/navigation/menu.py:325 +#: netbox/templates/dcim/device_edit.html:103 +#: netbox/templates/dcim/htmx/cable_edit.html:81 +#: netbox/templates/dcim/virtualchassis_add.html:31 +#: netbox/templates/dcim/virtualchassis_edit.html:40 +#: netbox/templates/generic/bulk_edit.html:76 +#: netbox/templates/htmx/form.html:19 netbox/templates/inc/filter_list.html:30 +#: netbox/templates/inc/panels/custom_fields.html:7 +#: netbox/templates/ipam/ipaddress_bulk_add.html:35 +#: netbox/templates/ipam/vlan_edit.html:59 msgid "Custom Fields" msgstr "Champs personnalisés" -#: netbox/navigation/menu.py:326 +#: netbox/netbox/navigation/menu.py:326 msgid "Custom Field Choices" msgstr "Choix de champs personnalisés" -#: netbox/navigation/menu.py:327 +#: netbox/netbox/navigation/menu.py:327 msgid "Custom Links" msgstr "Liens personnalisés" -#: netbox/navigation/menu.py:328 +#: netbox/netbox/navigation/menu.py:328 msgid "Export Templates" msgstr "Modèles d'exportation" -#: netbox/navigation/menu.py:329 +#: netbox/netbox/navigation/menu.py:329 msgid "Saved Filters" msgstr "Filtres enregistrés" -#: netbox/navigation/menu.py:331 +#: netbox/netbox/navigation/menu.py:331 msgid "Image Attachments" msgstr "Pièces jointes à des images" -#: netbox/navigation/menu.py:349 +#: netbox/netbox/navigation/menu.py:349 msgid "Operations" msgstr "Opérations" -#: netbox/navigation/menu.py:353 +#: netbox/netbox/navigation/menu.py:353 msgid "Integrations" msgstr "Intégrations" -#: netbox/navigation/menu.py:355 +#: netbox/netbox/navigation/menu.py:355 msgid "Data Sources" msgstr "Sources de données" -#: netbox/navigation/menu.py:356 +#: netbox/netbox/navigation/menu.py:356 msgid "Event Rules" msgstr "Règles de l'événement" -#: netbox/navigation/menu.py:357 +#: netbox/netbox/navigation/menu.py:357 msgid "Webhooks" msgstr "Webhooks" -#: netbox/navigation/menu.py:361 netbox/navigation/menu.py:365 -#: netbox/views/generic/feature_views.py:153 -#: templates/extras/report/base.html:37 templates/extras/script/base.html:36 +#: netbox/netbox/navigation/menu.py:361 netbox/netbox/navigation/menu.py:365 +#: netbox/netbox/views/generic/feature_views.py:153 +#: netbox/templates/extras/report/base.html:37 +#: netbox/templates/extras/script/base.html:36 msgid "Jobs" msgstr "Emplois" -#: netbox/navigation/menu.py:371 +#: netbox/netbox/navigation/menu.py:371 msgid "Logging" msgstr "Journalisation" -#: netbox/navigation/menu.py:373 +#: netbox/netbox/navigation/menu.py:373 msgid "Notification Groups" msgstr "Groupes de notifications" -#: netbox/navigation/menu.py:374 +#: netbox/netbox/navigation/menu.py:374 msgid "Journal Entries" msgstr "Entrées de journal" -#: netbox/navigation/menu.py:375 templates/core/objectchange.html:9 -#: templates/core/objectchange_list.html:4 +#: netbox/netbox/navigation/menu.py:375 +#: netbox/templates/core/objectchange.html:9 +#: netbox/templates/core/objectchange_list.html:4 msgid "Change Log" msgstr "Journal des modifications" -#: netbox/navigation/menu.py:382 templates/inc/user_menu.html:29 +#: netbox/netbox/navigation/menu.py:382 netbox/templates/inc/user_menu.html:29 msgid "Admin" msgstr "Administrateur" -#: netbox/navigation/menu.py:430 templates/account/base.html:27 -#: templates/inc/user_menu.html:57 +#: netbox/netbox/navigation/menu.py:430 netbox/templates/account/base.html:27 +#: netbox/templates/inc/user_menu.html:57 msgid "API Tokens" msgstr "Jetons d'API" -#: netbox/navigation/menu.py:437 users/forms/model_forms.py:187 -#: users/forms/model_forms.py:195 users/forms/model_forms.py:242 -#: users/forms/model_forms.py:249 +#: netbox/netbox/navigation/menu.py:437 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/navigation/menu.py:445 netbox/navigation/menu.py:449 -#: templates/core/system.html:7 +#: netbox/netbox/navigation/menu.py:445 netbox/netbox/navigation/menu.py:449 +#: netbox/templates/core/system.html:7 msgid "System" msgstr "Système" -#: netbox/navigation/menu.py:454 netbox/navigation/menu.py:502 -#: templates/500.html:35 templates/account/preferences.html:22 -#: templates/core/plugin.html:13 templates/core/plugin_list.html:7 -#: templates/core/plugin_list.html:12 +#: netbox/netbox/navigation/menu.py:454 netbox/netbox/navigation/menu.py:502 +#: netbox/templates/500.html:35 netbox/templates/account/preferences.html:22 +#: netbox/templates/core/plugin.html:13 +#: netbox/templates/core/plugin_list.html:7 +#: netbox/templates/core/plugin_list.html:12 msgid "Plugins" msgstr "Plug-ins" -#: netbox/navigation/menu.py:459 +#: netbox/netbox/navigation/menu.py:459 msgid "Configuration History" msgstr "Historique de configuration" -#: netbox/navigation/menu.py:465 templates/core/rq_task.html:8 -#: templates/core/rq_task_list.html:22 +#: netbox/netbox/navigation/menu.py:465 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/plugins/navigation.py:47 netbox/plugins/navigation.py:69 +#: netbox/netbox/plugins/navigation.py:47 +#: netbox/netbox/plugins/navigation.py:69 msgid "Permissions must be passed as a tuple or list." msgstr "" "Les autorisations doivent être transmises sous forme de tuple ou de liste." -#: netbox/plugins/navigation.py:51 +#: netbox/netbox/plugins/navigation.py:51 msgid "Buttons must be passed as a tuple or list." msgstr "Les boutons doivent être transmis sous forme de tuple ou de liste." -#: netbox/plugins/navigation.py:73 +#: netbox/netbox/plugins/navigation.py:73 msgid "Button color must be a choice within ButtonColorChoices." msgstr "La couleur du bouton doit être sélectionnée dans ButtonColorChoices." -#: netbox/plugins/registration.py:25 +#: netbox/netbox/plugins/registration.py:25 #, python-brace-format msgid "" "PluginTemplateExtension class {template_extension} was passed as an " @@ -10719,7 +11421,7 @@ msgstr "" "Classe PluginTemplateExtension {template_extension} a été transmis en tant " "qu'instance !" -#: netbox/plugins/registration.py:31 +#: netbox/netbox/plugins/registration.py:31 #, python-brace-format msgid "" "{template_extension} is not a subclass of " @@ -10728,196 +11430,197 @@ msgstr "" "{template_extension} n'est pas une sous-classe de " "Netbox.Plugins.PluginTemplateExtension !" -#: netbox/plugins/registration.py:51 +#: netbox/netbox/plugins/registration.py:51 #, python-brace-format msgid "{item} must be an instance of netbox.plugins.PluginMenuItem" msgstr "{item} doit être une instance de Netbox.Plugins.PluginMenuItem" -#: netbox/plugins/registration.py:62 +#: netbox/netbox/plugins/registration.py:62 #, 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/plugins/registration.py:67 +#: netbox/netbox/plugins/registration.py:67 #, python-brace-format msgid "{button} must be an instance of netbox.plugins.PluginMenuButton" msgstr "{button} doit être une instance de Netbox.Plugins.PluginMenuButton" -#: netbox/plugins/templates.py:37 +#: netbox/netbox/plugins/templates.py:37 msgid "extra_context must be a dictionary" msgstr "extra_context doit être un dictionnaire" -#: netbox/preferences.py:19 +#: netbox/netbox/preferences.py:19 msgid "HTMX Navigation" msgstr "Navigation HTML" -#: netbox/preferences.py:24 +#: netbox/netbox/preferences.py:24 msgid "Enable dynamic UI navigation" msgstr "Activer la navigation dynamique dans l'interface utilisateur" -#: netbox/preferences.py:26 +#: netbox/netbox/preferences.py:26 msgid "Experimental feature" msgstr "Fonctionnalité expérimentale" -#: netbox/preferences.py:29 +#: netbox/netbox/preferences.py:29 msgid "Language" msgstr "Langue" -#: netbox/preferences.py:34 +#: netbox/netbox/preferences.py:34 msgid "Forces UI translation to the specified language" msgstr "" "Force la traduction de l'interface utilisateur dans la langue spécifiée" -#: netbox/preferences.py:36 +#: netbox/netbox/preferences.py:36 msgid "Support for translation has been disabled locally" msgstr "La prise en charge de la traduction a été désactivée localement" -#: netbox/preferences.py:42 +#: netbox/netbox/preferences.py:42 msgid "Page length" msgstr "Longueur de page" -#: netbox/preferences.py:44 +#: netbox/netbox/preferences.py:44 msgid "The default number of objects to display per page" msgstr "Le nombre d'objets par défaut à afficher par page" -#: netbox/preferences.py:48 +#: netbox/netbox/preferences.py:48 msgid "Paginator placement" msgstr "Emplacement du paginateur" -#: netbox/preferences.py:50 +#: netbox/netbox/preferences.py:50 msgid "Bottom" msgstr "En bas" -#: netbox/preferences.py:51 +#: netbox/netbox/preferences.py:51 msgid "Top" msgstr "Haut" -#: netbox/preferences.py:52 +#: netbox/netbox/preferences.py:52 msgid "Both" msgstr "Les deux" -#: netbox/preferences.py:55 +#: netbox/netbox/preferences.py:55 msgid "Where the paginator controls will be displayed relative to a table" msgstr "" "Où les commandes du paginateur seront affichées par rapport à un tableau" -#: netbox/preferences.py:60 +#: netbox/netbox/preferences.py:60 msgid "Data format" msgstr "Format des données" -#: netbox/preferences.py:65 +#: netbox/netbox/preferences.py:65 msgid "The preferred syntax for displaying generic data within the UI" msgstr "" "Syntaxe préférée pour afficher des données génériques dans l'interface " "utilisateur" -#: netbox/registry.py:14 +#: netbox/netbox/registry.py:14 #, python-brace-format msgid "Invalid store: {key}" msgstr "Boutique non valide : {key}" -#: netbox/registry.py:17 +#: netbox/netbox/registry.py:17 msgid "Cannot add stores to registry after initialization" msgstr "Impossible d'ajouter des magasins au registre après l'initialisation" -#: netbox/registry.py:20 +#: netbox/netbox/registry.py:20 msgid "Cannot delete stores from registry" msgstr "Impossible de supprimer des magasins du registre" -#: netbox/settings.py:760 +#: netbox/netbox/settings.py:760 msgid "Czech" msgstr "tchèque" -#: netbox/settings.py:761 +#: netbox/netbox/settings.py:761 msgid "Danish" msgstr "danois" -#: netbox/settings.py:762 +#: netbox/netbox/settings.py:762 msgid "German" msgstr "allemand" -#: netbox/settings.py:763 +#: netbox/netbox/settings.py:763 msgid "English" msgstr "Anglais" -#: netbox/settings.py:764 +#: netbox/netbox/settings.py:764 msgid "Spanish" msgstr "espagnol" -#: netbox/settings.py:765 +#: netbox/netbox/settings.py:765 msgid "French" msgstr "français" -#: netbox/settings.py:766 +#: netbox/netbox/settings.py:766 msgid "Italian" msgstr "italien" -#: netbox/settings.py:767 +#: netbox/netbox/settings.py:767 msgid "Japanese" msgstr "japonais" -#: netbox/settings.py:768 +#: netbox/netbox/settings.py:768 msgid "Dutch" msgstr "néerlandais" -#: netbox/settings.py:769 +#: netbox/netbox/settings.py:769 msgid "Polish" msgstr "polonais" -#: netbox/settings.py:770 +#: netbox/netbox/settings.py:770 msgid "Portuguese" msgstr "portugais" -#: netbox/settings.py:771 +#: netbox/netbox/settings.py:771 msgid "Russian" msgstr "russe" -#: netbox/settings.py:772 +#: netbox/netbox/settings.py:772 msgid "Turkish" msgstr "Turc" -#: netbox/settings.py:773 +#: netbox/netbox/settings.py:773 msgid "Ukrainian" msgstr "Ukrainien" -#: netbox/settings.py:774 +#: netbox/netbox/settings.py:774 msgid "Chinese" msgstr "chinois" -#: netbox/tables/columns.py:176 +#: netbox/netbox/tables/columns.py:176 msgid "Select all" msgstr "Tout sélectionner" -#: netbox/tables/columns.py:189 +#: netbox/netbox/tables/columns.py:189 msgid "Toggle all" msgstr "Tout afficher" -#: netbox/tables/columns.py:300 +#: netbox/netbox/tables/columns.py:300 msgid "Toggle Dropdown" msgstr "Basculer vers le menu déroulant" -#: netbox/tables/columns.py:572 templates/core/job.html:53 +#: netbox/netbox/tables/columns.py:572 netbox/templates/core/job.html:53 msgid "Error" msgstr "Erreur" -#: netbox/tables/tables.py:58 +#: netbox/netbox/tables/tables.py:58 #, python-brace-format msgid "No {model_name} found" msgstr "{model_name} non trouvé" -#: netbox/tables/tables.py:249 templates/generic/bulk_import.html:117 +#: netbox/netbox/tables/tables.py:249 +#: netbox/templates/generic/bulk_import.html:117 msgid "Field" msgstr "Champ" -#: netbox/tables/tables.py:252 +#: netbox/netbox/tables/tables.py:252 msgid "Value" msgstr "Valeur" -#: netbox/tests/dummy_plugin/navigation.py:29 +#: netbox/netbox/tests/dummy_plugin/navigation.py:29 msgid "Dummy Plugin" msgstr "Plugin Dummy" -#: netbox/views/generic/bulk_views.py:114 +#: netbox/netbox/views/generic/bulk_views.py:114 #, python-brace-format msgid "" "There was an error rendering the selected export template ({template}): " @@ -10926,58 +11629,58 @@ msgstr "" "Une erreur s'est produite lors de l'affichage du modèle d'exportation " "sélectionné ({template}) : {error}" -#: netbox/views/generic/bulk_views.py:416 +#: netbox/netbox/views/generic/bulk_views.py:416 #, 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/views/generic/bulk_views.py:702 -#: netbox/views/generic/bulk_views.py:900 -#: netbox/views/generic/bulk_views.py:948 +#: netbox/netbox/views/generic/bulk_views.py:709 +#: netbox/netbox/views/generic/bulk_views.py:910 +#: netbox/netbox/views/generic/bulk_views.py:958 #, python-brace-format msgid "No {object_type} were selected." msgstr "Non {object_type} ont été sélectionnés." -#: netbox/views/generic/bulk_views.py:782 +#: netbox/netbox/views/generic/bulk_views.py:788 #, python-brace-format msgid "Renamed {count} {object_type}" msgstr "Renommé {count} {object_type}" -#: netbox/views/generic/bulk_views.py:878 +#: netbox/netbox/views/generic/bulk_views.py:888 #, python-brace-format msgid "Deleted {count} {object_type}" msgstr "Supprimé {count} {object_type}" -#: netbox/views/generic/feature_views.py:40 +#: netbox/netbox/views/generic/feature_views.py:40 msgid "Changelog" msgstr "Journal des modifications" -#: netbox/views/generic/feature_views.py:93 +#: netbox/netbox/views/generic/feature_views.py:93 msgid "Journal" msgstr "Journal" -#: netbox/views/generic/feature_views.py:207 +#: netbox/netbox/views/generic/feature_views.py:207 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/views/generic/feature_views.py:211 +#: netbox/netbox/views/generic/feature_views.py:211 #, python-brace-format msgid "Synchronized data for {object_type} {object}." msgstr "Données synchronisées pour {object_type} {object}." -#: netbox/views/generic/feature_views.py:236 +#: netbox/netbox/views/generic/feature_views.py:236 #, python-brace-format msgid "Synced {count} {object_type}" msgstr "Synchronisé {count} {object_type}" -#: netbox/views/generic/object_views.py:108 +#: netbox/netbox/views/generic/object_views.py:108 #, python-brace-format msgid "{class_name} must implement get_children()" msgstr "{class_name} doit implémenter get_children ()" -#: netbox/views/misc.py:44 +#: netbox/netbox/views/misc.py:46 msgid "" "There was an error loading the dashboard configuration. A default dashboard " "is in use." @@ -10985,707 +11688,749 @@ msgstr "" "Une erreur s'est produite lors du chargement de la configuration du tableau " "de bord. Un tableau de bord par défaut est utilisé." -#: templates/403.html:4 +#: netbox/templates/403.html:4 msgid "Access Denied" msgstr "Accès refusé" -#: templates/403.html:9 +#: netbox/templates/403.html:9 msgid "You do not have permission to access this page" msgstr "Vous n'êtes pas autorisé à accéder à cette page" -#: templates/404.html:4 +#: netbox/templates/404.html:4 msgid "Page Not Found" msgstr "Page non trouvée" -#: templates/404.html:9 +#: netbox/templates/404.html:9 msgid "The requested page does not exist" msgstr "La page demandée n'existe pas" -#: templates/500.html:7 templates/500.html:18 +#: netbox/templates/500.html:7 netbox/templates/500.html:18 msgid "Server Error" msgstr "Erreur du serveur" -#: templates/500.html:23 +#: netbox/templates/500.html:23 msgid "There was a problem with your request. Please contact an administrator" msgstr "" "Il y a eu un problème avec votre demande. Veuillez contacter un " "administrateur" -#: templates/500.html:28 +#: netbox/templates/500.html:28 msgid "The complete exception is provided below" msgstr "L'exception complète est fournie ci-dessous" -#: templates/500.html:33 templates/core/system.html:40 +#: netbox/templates/500.html:33 netbox/templates/core/system.html:40 msgid "Python version" msgstr "Version Python" -#: templates/500.html:34 +#: netbox/templates/500.html:34 msgid "NetBox version" msgstr "Version NetBox" -#: templates/500.html:36 +#: netbox/templates/500.html:36 msgid "None installed" msgstr "Aucun n'est installé" -#: templates/500.html:39 +#: netbox/templates/500.html:39 msgid "If further assistance is required, please post to the" msgstr "" "Si une assistance supplémentaire est requise, veuillez envoyer un message au" -#: templates/500.html:39 +#: netbox/templates/500.html:39 msgid "NetBox discussion forum" msgstr "Forum de discussion NetBox" -#: templates/500.html:39 +#: netbox/templates/500.html:39 msgid "on GitHub" msgstr "sur GitHub" -#: templates/500.html:42 templates/base/40x.html:17 +#: netbox/templates/500.html:42 netbox/templates/base/40x.html:17 msgid "Home Page" msgstr "Page d'accueil" -#: templates/account/base.html:7 templates/inc/user_menu.html:45 -#: vpn/forms/bulk_edit.py:255 vpn/forms/filtersets.py:189 -#: vpn/forms/model_forms.py:379 +#: netbox/templates/account/base.html:7 netbox/templates/inc/user_menu.html:45 +#: netbox/vpn/forms/bulk_edit.py:255 netbox/vpn/forms/filtersets.py:189 +#: netbox/vpn/forms/model_forms.py:379 msgid "Profile" msgstr "Profil" -#: templates/account/base.html:13 templates/account/notifications.html:7 -#: templates/inc/user_menu.html:15 +#: netbox/templates/account/base.html:13 +#: netbox/templates/account/notifications.html:7 +#: netbox/templates/inc/user_menu.html:15 msgid "Notifications" msgstr "Notifications" -#: templates/account/base.html:16 templates/account/subscriptions.html:7 -#: templates/inc/user_menu.html:51 +#: netbox/templates/account/base.html:16 +#: netbox/templates/account/subscriptions.html:7 +#: netbox/templates/inc/user_menu.html:51 msgid "Subscriptions" msgstr "Abonnements" -#: templates/account/base.html:19 templates/inc/user_menu.html:54 +#: netbox/templates/account/base.html:19 +#: netbox/templates/inc/user_menu.html:54 msgid "Preferences" msgstr "Préférences" -#: templates/account/password.html:5 +#: netbox/templates/account/password.html:5 msgid "Change Password" msgstr "Modifier le mot de passe" -#: templates/account/password.html:19 templates/account/preferences.html:77 -#: templates/core/configrevision_restore.html:63 -#: templates/dcim/devicebay_populate.html:34 -#: templates/dcim/virtualchassis_add_member.html:26 -#: templates/dcim/virtualchassis_edit.html:103 -#: templates/extras/object_journal.html:26 templates/extras/script.html:38 -#: templates/generic/bulk_add_component.html:67 -#: templates/generic/bulk_delete.html:65 templates/generic/bulk_edit.html:106 -#: templates/generic/bulk_import.html:56 templates/generic/bulk_import.html:78 -#: templates/generic/bulk_import.html:100 -#: templates/generic/bulk_remove.html:62 templates/generic/bulk_rename.html:63 -#: templates/generic/confirmation_form.html:19 -#: templates/generic/object_edit.html:72 templates/htmx/delete_form.html:53 -#: templates/htmx/delete_form.html:55 templates/ipam/ipaddress_assign.html:28 -#: templates/virtualization/cluster_add_devices.html:30 +#: netbox/templates/account/password.html:19 +#: netbox/templates/account/preferences.html:77 +#: netbox/templates/core/configrevision_restore.html:63 +#: netbox/templates/dcim/devicebay_populate.html:34 +#: netbox/templates/dcim/virtualchassis_add_member.html:26 +#: netbox/templates/dcim/virtualchassis_edit.html:103 +#: netbox/templates/extras/object_journal.html:26 +#: netbox/templates/extras/script.html:38 +#: netbox/templates/generic/bulk_add_component.html:67 +#: netbox/templates/generic/bulk_delete.html:65 +#: netbox/templates/generic/bulk_edit.html:106 +#: netbox/templates/generic/bulk_import.html:56 +#: netbox/templates/generic/bulk_import.html:78 +#: netbox/templates/generic/bulk_import.html:100 +#: netbox/templates/generic/bulk_remove.html:62 +#: netbox/templates/generic/bulk_rename.html:63 +#: netbox/templates/generic/confirmation_form.html:19 +#: netbox/templates/generic/object_edit.html:72 +#: netbox/templates/htmx/delete_form.html:53 +#: netbox/templates/htmx/delete_form.html:55 +#: netbox/templates/ipam/ipaddress_assign.html:28 +#: netbox/templates/virtualization/cluster_add_devices.html:30 msgid "Cancel" msgstr "Annuler" -#: templates/account/password.html:20 templates/account/preferences.html:78 -#: templates/dcim/devicebay_populate.html:35 -#: templates/dcim/virtualchassis_add_member.html:28 -#: templates/dcim/virtualchassis_edit.html:105 -#: templates/extras/dashboard/widget_add.html:26 -#: templates/extras/dashboard/widget_config.html:19 -#: templates/extras/object_journal.html:27 -#: templates/generic/object_edit.html:75 -#: utilities/templates/helpers/applied_filters.html:16 -#: utilities/templates/helpers/table_config_form.html:40 +#: netbox/templates/account/password.html:20 +#: netbox/templates/account/preferences.html:78 +#: netbox/templates/dcim/devicebay_populate.html:35 +#: netbox/templates/dcim/virtualchassis_add_member.html:28 +#: netbox/templates/dcim/virtualchassis_edit.html:105 +#: netbox/templates/extras/dashboard/widget_add.html:26 +#: netbox/templates/extras/dashboard/widget_config.html:19 +#: netbox/templates/extras/object_journal.html:27 +#: netbox/templates/generic/object_edit.html:75 +#: netbox/utilities/templates/helpers/applied_filters.html:16 +#: netbox/utilities/templates/helpers/table_config_form.html:40 msgid "Save" msgstr "Sauvegarder" -#: templates/account/preferences.html:34 +#: netbox/templates/account/preferences.html:34 msgid "Table Configurations" msgstr "Configurations des tables" -#: templates/account/preferences.html:39 +#: netbox/templates/account/preferences.html:39 msgid "Clear table preferences" msgstr "Effacer les préférences du tableau" -#: templates/account/preferences.html:47 +#: netbox/templates/account/preferences.html:47 msgid "Toggle All" msgstr "Tout afficher" -#: templates/account/preferences.html:49 +#: netbox/templates/account/preferences.html:49 msgid "Table" msgstr "Tableau" -#: templates/account/preferences.html:50 +#: netbox/templates/account/preferences.html:50 msgid "Ordering" msgstr "Commander" -#: templates/account/preferences.html:51 +#: netbox/templates/account/preferences.html:51 msgid "Columns" msgstr "Colonnes" -#: templates/account/preferences.html:71 templates/dcim/cable_trace.html:113 -#: templates/extras/object_configcontext.html:43 +#: netbox/templates/account/preferences.html:71 +#: netbox/templates/dcim/cable_trace.html:113 +#: netbox/templates/extras/object_configcontext.html:43 msgid "None found" msgstr "Aucun n'a été trouvé" -#: templates/account/profile.html:6 +#: netbox/templates/account/profile.html:6 msgid "User Profile" msgstr "Profil utilisateur" -#: templates/account/profile.html:12 +#: netbox/templates/account/profile.html:12 msgid "Account Details" msgstr "Détails du compte" -#: templates/account/profile.html:29 templates/tenancy/contact.html:43 -#: templates/users/user.html:25 tenancy/forms/bulk_edit.py:109 +#: netbox/templates/account/profile.html:29 +#: netbox/templates/tenancy/contact.html:43 +#: netbox/templates/users/user.html:25 netbox/tenancy/forms/bulk_edit.py:109 msgid "Email" msgstr "Courrier électronique" -#: templates/account/profile.html:33 templates/users/user.html:29 +#: netbox/templates/account/profile.html:33 +#: netbox/templates/users/user.html:29 msgid "Account Created" msgstr "Compte créé" -#: templates/account/profile.html:37 templates/users/user.html:33 +#: netbox/templates/account/profile.html:37 +#: netbox/templates/users/user.html:33 msgid "Last Login" msgstr "Dernière connexion" -#: templates/account/profile.html:41 templates/users/user.html:45 +#: netbox/templates/account/profile.html:41 +#: netbox/templates/users/user.html:45 msgid "Superuser" msgstr "Superutilisateur" -#: templates/account/profile.html:45 templates/inc/user_menu.html:31 -#: templates/users/user.html:41 +#: netbox/templates/account/profile.html:45 +#: netbox/templates/inc/user_menu.html:31 netbox/templates/users/user.html:41 msgid "Staff" msgstr "Le personnel" -#: templates/account/profile.html:53 templates/users/objectpermission.html:82 -#: templates/users/user.html:53 +#: netbox/templates/account/profile.html:53 +#: netbox/templates/users/objectpermission.html:82 +#: netbox/templates/users/user.html:53 msgid "Assigned Groups" msgstr "Groupes associés" -#: templates/account/profile.html:58 -#: templates/circuits/circuit_terminations_swap.html:18 -#: templates/circuits/circuit_terminations_swap.html:26 -#: templates/circuits/circuittermination.html:34 -#: templates/circuits/inc/circuit_termination.html:68 -#: templates/core/objectchange.html:124 templates/core/objectchange.html:142 -#: templates/dcim/devicebay.html:59 -#: templates/dcim/inc/panels/inventory_items.html:45 -#: templates/dcim/interface.html:296 templates/dcim/modulebay.html:80 -#: templates/extras/configcontext.html:70 templates/extras/eventrule.html:66 -#: templates/extras/htmx/script_result.html:60 -#: templates/extras/webhook.html:65 templates/extras/webhook.html:75 -#: templates/inc/panel_table.html:13 templates/inc/panels/comments.html:10 -#: templates/ipam/inc/panels/fhrp_groups.html:56 templates/users/group.html:34 -#: templates/users/group.html:44 templates/users/objectpermission.html:77 -#: templates/users/objectpermission.html:87 templates/users/user.html:58 -#: templates/users/user.html:68 +#: netbox/templates/account/profile.html:58 +#: netbox/templates/circuits/circuit_terminations_swap.html:18 +#: netbox/templates/circuits/circuit_terminations_swap.html:26 +#: netbox/templates/circuits/circuittermination.html:34 +#: netbox/templates/circuits/inc/circuit_termination.html:68 +#: netbox/templates/core/objectchange.html:124 +#: 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/modulebay.html:80 +#: netbox/templates/extras/configcontext.html:70 +#: netbox/templates/extras/eventrule.html:66 +#: netbox/templates/extras/htmx/script_result.html:60 +#: netbox/templates/extras/webhook.html:65 +#: netbox/templates/extras/webhook.html:75 +#: netbox/templates/inc/panel_table.html:13 +#: netbox/templates/inc/panels/comments.html:10 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:56 +#: netbox/templates/users/group.html:34 netbox/templates/users/group.html:44 +#: netbox/templates/users/objectpermission.html:77 +#: netbox/templates/users/objectpermission.html:87 +#: netbox/templates/users/user.html:58 netbox/templates/users/user.html:68 msgid "None" msgstr "Aucune" -#: templates/account/profile.html:68 templates/users/user.html:78 +#: netbox/templates/account/profile.html:68 +#: netbox/templates/users/user.html:78 msgid "Recent Activity" msgstr "Activité récente" -#: templates/account/token.html:8 templates/account/token_list.html:6 +#: netbox/templates/account/token.html:8 +#: netbox/templates/account/token_list.html:6 msgid "My API Tokens" msgstr "Mes jetons d'API" -#: templates/account/token.html:11 templates/account/token.html:19 -#: templates/users/token.html:6 templates/users/token.html:14 -#: users/forms/filtersets.py:120 +#: netbox/templates/account/token.html:11 +#: netbox/templates/account/token.html:19 netbox/templates/users/token.html:6 +#: netbox/templates/users/token.html:14 netbox/users/forms/filtersets.py:120 msgid "Token" msgstr "Jeton" -#: templates/account/token.html:39 templates/users/token.html:31 -#: users/forms/bulk_edit.py:107 +#: netbox/templates/account/token.html:39 netbox/templates/users/token.html:31 +#: netbox/users/forms/bulk_edit.py:107 msgid "Write enabled" msgstr "Écriture activée" -#: templates/account/token.html:51 templates/users/token.html:43 +#: netbox/templates/account/token.html:51 netbox/templates/users/token.html:43 msgid "Last used" msgstr "Dernière utilisation" -#: templates/account/token_list.html:12 +#: netbox/templates/account/token_list.html:12 msgid "Add a Token" msgstr "Ajouter un jeton" -#: templates/base/base.html:22 templates/home.html:27 +#: netbox/templates/base/base.html:22 netbox/templates/home.html:27 msgid "Home" msgstr "Accueil" -#: templates/base/layout.html:25 +#: netbox/templates/base/layout.html:25 msgid "NetBox Motif" msgstr "Motif NetBox" -#: templates/base/layout.html:38 templates/base/layout.html:39 -#: templates/login.html:14 templates/login.html:15 +#: netbox/templates/base/layout.html:38 netbox/templates/base/layout.html:39 +#: netbox/templates/login.html:14 netbox/templates/login.html:15 msgid "NetBox Logo" msgstr "Logo NetBox" -#: templates/base/layout.html:150 templates/base/layout.html:151 +#: netbox/templates/base/layout.html:150 netbox/templates/base/layout.html:151 msgid "Docs" msgstr "Docs" -#: templates/base/layout.html:156 templates/base/layout.html:157 -#: templates/rest_framework/api.html:10 +#: netbox/templates/base/layout.html:156 netbox/templates/base/layout.html:157 +#: netbox/templates/rest_framework/api.html:10 msgid "REST API" msgstr "API REST" -#: templates/base/layout.html:162 templates/base/layout.html:163 +#: netbox/templates/base/layout.html:162 netbox/templates/base/layout.html:163 msgid "REST API documentation" msgstr "Documentation de l'API REST" -#: templates/base/layout.html:169 templates/base/layout.html:170 +#: netbox/templates/base/layout.html:169 netbox/templates/base/layout.html:170 msgid "GraphQL API" msgstr "API GraphQL" -#: templates/base/layout.html:185 templates/base/layout.html:186 +#: netbox/templates/base/layout.html:185 netbox/templates/base/layout.html:186 msgid "NetBox Labs Support" msgstr "Assistance NetBox Labs" -#: templates/base/layout.html:194 templates/base/layout.html:195 +#: netbox/templates/base/layout.html:194 netbox/templates/base/layout.html:195 msgid "Source Code" msgstr "Code source" -#: templates/base/layout.html:200 templates/base/layout.html:201 +#: netbox/templates/base/layout.html:200 netbox/templates/base/layout.html:201 msgid "Community" msgstr "Communauté" -#: templates/circuits/circuit.html:47 +#: netbox/templates/circuits/circuit.html:47 msgid "Install Date" msgstr "Date d'installation" -#: templates/circuits/circuit.html:51 +#: netbox/templates/circuits/circuit.html:51 msgid "Termination Date" msgstr "Date de résiliation" -#: templates/circuits/circuit.html:70 -#: templates/ipam/inc/panels/fhrp_groups.html:15 +#: netbox/templates/circuits/circuit.html:70 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:15 msgid "Assign Group" msgstr "Associer un groupe" -#: templates/circuits/circuit_terminations_swap.html:4 +#: netbox/templates/circuits/circuit_terminations_swap.html:4 msgid "Swap Circuit Terminations" msgstr "Échanger les terminaisons du circuit" -#: templates/circuits/circuit_terminations_swap.html:8 +#: netbox/templates/circuits/circuit_terminations_swap.html:8 #, python-format msgid "Swap these terminations for circuit %(circuit)s?" msgstr "Échanger les terminaisons du circuit %(circuit)s?" -#: templates/circuits/circuit_terminations_swap.html:14 +#: netbox/templates/circuits/circuit_terminations_swap.html:14 msgid "A side" msgstr "Coté A" -#: templates/circuits/circuit_terminations_swap.html:22 +#: netbox/templates/circuits/circuit_terminations_swap.html:22 msgid "Z side" msgstr "Côté Z" -#: templates/circuits/circuitgroup.html:16 +#: netbox/templates/circuits/circuitgroup.html:16 msgid "Assign Circuit" msgstr "Attribuer un circuit" -#: templates/circuits/circuitgroupassignment.html:19 +#: netbox/templates/circuits/circuitgroupassignment.html:19 msgid "Circuit Group Assignment" msgstr "Affectation de groupes de circuits" -#: templates/circuits/circuittype.html:10 +#: netbox/templates/circuits/circuittype.html:10 msgid "Add Circuit" msgstr "Ajouter un circuit" -#: templates/circuits/circuittype.html:19 +#: netbox/templates/circuits/circuittype.html:19 msgid "Circuit Type" msgstr "Type de circuit" -#: templates/circuits/inc/circuit_termination.html:10 -#: templates/dcim/manufacturer.html:11 -#: templates/generic/bulk_add_component.html:22 -#: templates/users/objectpermission.html:38 -#: utilities/templates/buttons/add.html:4 -#: utilities/templates/helpers/table_config_form.html:20 +#: netbox/templates/circuits/inc/circuit_termination.html:10 +#: netbox/templates/dcim/manufacturer.html:11 +#: netbox/templates/generic/bulk_add_component.html:22 +#: netbox/templates/users/objectpermission.html:38 +#: netbox/utilities/templates/buttons/add.html:4 +#: netbox/utilities/templates/helpers/table_config_form.html:20 msgid "Add" msgstr "Ajouter" -#: templates/circuits/inc/circuit_termination.html:15 -#: templates/circuits/inc/circuit_termination_fields.html:36 -#: templates/dcim/inc/panels/inventory_items.html:32 -#: templates/dcim/powerpanel.html:56 templates/extras/script_list.html:30 -#: templates/generic/object_edit.html:47 -#: templates/ipam/inc/ipaddress_edit_header.html:7 -#: templates/ipam/inc/panels/fhrp_groups.html:43 -#: utilities/templates/buttons/edit.html:3 +#: netbox/templates/circuits/inc/circuit_termination.html:15 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:36 +#: netbox/templates/dcim/inc/panels/inventory_items.html:32 +#: netbox/templates/dcim/powerpanel.html:56 +#: netbox/templates/extras/script_list.html:30 +#: netbox/templates/generic/object_edit.html:47 +#: netbox/templates/ipam/inc/ipaddress_edit_header.html:7 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:43 +#: netbox/utilities/templates/buttons/edit.html:3 msgid "Edit" msgstr "Modifier" -#: templates/circuits/inc/circuit_termination.html:18 +#: netbox/templates/circuits/inc/circuit_termination.html:18 msgid "Swap" msgstr "Échange" -#: templates/circuits/inc/circuit_termination_fields.html:19 -#: templates/dcim/consoleport.html:59 templates/dcim/consoleserverport.html:60 -#: templates/dcim/powerfeed.html:114 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:19 +#: netbox/templates/dcim/consoleport.html:59 +#: netbox/templates/dcim/consoleserverport.html:60 +#: netbox/templates/dcim/powerfeed.html:114 msgid "Marked as connected" msgstr "Marqué comme connecté" -#: templates/circuits/inc/circuit_termination_fields.html:21 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:21 msgid "to" msgstr "pour" -#: templates/circuits/inc/circuit_termination_fields.html:31 -#: templates/circuits/inc/circuit_termination_fields.html:32 -#: templates/dcim/frontport.html:80 -#: templates/dcim/inc/connection_endpoints.html:7 -#: templates/dcim/interface.html:154 templates/dcim/rearport.html:76 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:31 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:32 +#: netbox/templates/dcim/frontport.html:80 +#: netbox/templates/dcim/inc/connection_endpoints.html:7 +#: netbox/templates/dcim/interface.html:154 +#: netbox/templates/dcim/rearport.html:76 msgid "Trace" msgstr "Trace" -#: templates/circuits/inc/circuit_termination_fields.html:35 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:35 msgid "Edit cable" msgstr "Modifier le câble" -#: templates/circuits/inc/circuit_termination_fields.html:40 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:40 msgid "Remove cable" msgstr "Retirez le câble" -#: templates/circuits/inc/circuit_termination_fields.html:41 -#: templates/dcim/bulk_disconnect.html:5 -#: templates/dcim/device/consoleports.html:12 -#: templates/dcim/device/consoleserverports.html:12 -#: templates/dcim/device/frontports.html:12 -#: templates/dcim/device/interfaces.html:16 -#: templates/dcim/device/poweroutlets.html:12 -#: templates/dcim/device/powerports.html:12 -#: templates/dcim/device/rearports.html:12 templates/dcim/powerpanel.html:61 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:41 +#: netbox/templates/dcim/bulk_disconnect.html:5 +#: netbox/templates/dcim/device/consoleports.html:12 +#: netbox/templates/dcim/device/consoleserverports.html:12 +#: netbox/templates/dcim/device/frontports.html:12 +#: netbox/templates/dcim/device/interfaces.html:16 +#: netbox/templates/dcim/device/poweroutlets.html:12 +#: netbox/templates/dcim/device/powerports.html:12 +#: netbox/templates/dcim/device/rearports.html:12 +#: netbox/templates/dcim/powerpanel.html:61 msgid "Disconnect" msgstr "Déconnectez" -#: templates/circuits/inc/circuit_termination_fields.html:48 -#: templates/dcim/consoleport.html:69 templates/dcim/consoleserverport.html:70 -#: templates/dcim/frontport.html:102 templates/dcim/interface.html:180 -#: templates/dcim/interface.html:200 templates/dcim/powerfeed.html:127 -#: templates/dcim/poweroutlet.html:71 templates/dcim/poweroutlet.html:72 -#: templates/dcim/powerport.html:73 templates/dcim/rearport.html:98 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:48 +#: netbox/templates/dcim/consoleport.html:69 +#: netbox/templates/dcim/consoleserverport.html:70 +#: netbox/templates/dcim/frontport.html:102 +#: netbox/templates/dcim/interface.html:180 +#: netbox/templates/dcim/interface.html:200 +#: netbox/templates/dcim/powerfeed.html:127 +#: netbox/templates/dcim/poweroutlet.html:71 +#: netbox/templates/dcim/poweroutlet.html:72 +#: netbox/templates/dcim/powerport.html:73 +#: netbox/templates/dcim/rearport.html:98 msgid "Connect" msgstr "Connecter" -#: templates/circuits/inc/circuit_termination_fields.html:70 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:70 msgid "Downstream" msgstr "En aval" -#: templates/circuits/inc/circuit_termination_fields.html:71 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:71 msgid "Upstream" msgstr "En amont" -#: templates/circuits/inc/circuit_termination_fields.html:80 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:80 msgid "Cross-Connect" msgstr "Connexion croisée" -#: templates/circuits/inc/circuit_termination_fields.html:84 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:84 msgid "Patch Panel/Port" msgstr "Panneau de raccordement et port" -#: templates/circuits/provider.html:11 +#: netbox/templates/circuits/provider.html:11 msgid "Add circuit" msgstr "Ajouter un circuit" -#: templates/circuits/provideraccount.html:17 +#: netbox/templates/circuits/provideraccount.html:17 msgid "Provider Account" msgstr "Compte du fournisseur" -#: templates/core/configrevision.html:35 +#: netbox/templates/core/configrevision.html:35 msgid "Configuration Data" msgstr "Données de configuration" -#: templates/core/configrevision.html:40 +#: netbox/templates/core/configrevision.html:40 msgid "Comment" msgstr "Commentaire" -#: templates/core/configrevision_restore.html:8 -#: templates/core/configrevision_restore.html:25 -#: templates/core/configrevision_restore.html:64 +#: netbox/templates/core/configrevision_restore.html:8 +#: netbox/templates/core/configrevision_restore.html:25 +#: netbox/templates/core/configrevision_restore.html:64 msgid "Restore" msgstr "Restaurer" -#: templates/core/configrevision_restore.html:36 +#: netbox/templates/core/configrevision_restore.html:36 msgid "Parameter" msgstr "Paramètre" -#: templates/core/configrevision_restore.html:37 +#: netbox/templates/core/configrevision_restore.html:37 msgid "Current Value" msgstr "Valeur actuelle" -#: templates/core/configrevision_restore.html:38 +#: netbox/templates/core/configrevision_restore.html:38 msgid "New Value" msgstr "Nouvelle valeur" -#: templates/core/configrevision_restore.html:50 +#: netbox/templates/core/configrevision_restore.html:50 msgid "Changed" msgstr "Modifié" -#: templates/core/datafile.html:42 templates/ipam/iprange.html:25 -#: templates/virtualization/virtualdisk.html:29 -#: virtualization/tables/virtualmachines.py:198 +#: netbox/templates/core/datafile.html:42 +#: netbox/templates/ipam/iprange.html:25 +#: netbox/templates/virtualization/virtualdisk.html:29 +#: netbox/virtualization/tables/virtualmachines.py:198 msgid "Size" msgstr "Taille" -#: templates/core/datafile.html:43 +#: netbox/templates/core/datafile.html:43 msgid "bytes" msgstr "octets" -#: templates/core/datafile.html:46 +#: netbox/templates/core/datafile.html:46 msgid "SHA256 Hash" msgstr "Hachage SHA256" -#: templates/core/datasource.html:14 templates/core/datasource.html:20 -#: utilities/templates/buttons/sync.html:5 +#: netbox/templates/core/datasource.html:14 +#: netbox/templates/core/datasource.html:20 +#: netbox/utilities/templates/buttons/sync.html:5 msgid "Sync" msgstr "Synchroniser" -#: templates/core/datasource.html:50 +#: netbox/templates/core/datasource.html:50 msgid "Last synced" msgstr "Dernière synchronisation" -#: templates/core/datasource.html:84 +#: netbox/templates/core/datasource.html:84 msgid "Backend" msgstr "Backend" -#: templates/core/datasource.html:99 +#: netbox/templates/core/datasource.html:99 msgid "No parameters defined" msgstr "Aucun paramètre défini" -#: templates/core/datasource.html:114 +#: netbox/templates/core/datasource.html:114 msgid "Files" msgstr "Dossiers" -#: templates/core/inc/config_data.html:7 +#: netbox/templates/core/inc/config_data.html:7 msgid "Rack elevations" -msgstr "Élévations des rayonnages" +msgstr "Positions en baie" -#: templates/core/inc/config_data.html:10 +#: netbox/templates/core/inc/config_data.html:10 msgid "Default unit height" msgstr "Hauteur de l'unité par défaut" -#: templates/core/inc/config_data.html:14 +#: netbox/templates/core/inc/config_data.html:14 msgid "Default unit width" msgstr "Largeur de l'unité par défaut" -#: templates/core/inc/config_data.html:20 +#: netbox/templates/core/inc/config_data.html:20 msgid "Power feeds" msgstr "Alimentations" -#: templates/core/inc/config_data.html:23 +#: netbox/templates/core/inc/config_data.html:23 msgid "Default voltage" msgstr "Tension par défaut" -#: templates/core/inc/config_data.html:27 +#: netbox/templates/core/inc/config_data.html:27 msgid "Default amperage" msgstr "Ampérage par défaut" -#: templates/core/inc/config_data.html:31 +#: netbox/templates/core/inc/config_data.html:31 msgid "Default max utilization" msgstr "Utilisation maximale par défaut" -#: templates/core/inc/config_data.html:40 +#: netbox/templates/core/inc/config_data.html:40 msgid "Enforce global unique" msgstr "Appliquez une approche unique au monde" -#: templates/core/inc/config_data.html:83 +#: netbox/templates/core/inc/config_data.html:83 msgid "Paginate count" msgstr "Nombre de pages" -#: templates/core/inc/config_data.html:87 +#: netbox/templates/core/inc/config_data.html:87 msgid "Max page size" msgstr "Taille de page maximale" -#: templates/core/inc/config_data.html:114 +#: netbox/templates/core/inc/config_data.html:114 msgid "User preferences" msgstr "Préférences de l'utilisateur" -#: templates/core/inc/config_data.html:141 +#: netbox/templates/core/inc/config_data.html:141 msgid "Job retention" msgstr "Maintien de l'emploi" -#: templates/core/job.html:35 templates/core/rq_task.html:12 -#: templates/core/rq_task.html:49 templates/core/rq_task.html:58 +#: netbox/templates/core/job.html:35 netbox/templates/core/rq_task.html:12 +#: netbox/templates/core/rq_task.html:49 netbox/templates/core/rq_task.html:58 msgid "Job" msgstr "Emploi" -#: templates/core/job.html:58 templates/extras/journalentry.html:26 +#: netbox/templates/core/job.html:58 +#: netbox/templates/extras/journalentry.html:26 msgid "Created By" msgstr "Créé par" -#: templates/core/job.html:66 +#: netbox/templates/core/job.html:66 msgid "Scheduling" msgstr "Planification" -#: templates/core/job.html:77 +#: netbox/templates/core/job.html:77 #, python-format msgid "every %(interval)s minutes" msgstr "chaque %(interval)s minutes" -#: templates/core/objectchange.html:29 -#: templates/users/objectpermission.html:42 +#: netbox/templates/core/objectchange.html:29 +#: netbox/templates/users/objectpermission.html:42 msgid "Change" msgstr "Changer" -#: templates/core/objectchange.html:79 +#: netbox/templates/core/objectchange.html:79 msgid "Difference" msgstr "Différence" -#: templates/core/objectchange.html:82 +#: netbox/templates/core/objectchange.html:82 msgid "Previous" msgstr "Précédent" -#: templates/core/objectchange.html:85 +#: netbox/templates/core/objectchange.html:85 msgid "Next" msgstr "Suivant" -#: templates/core/objectchange.html:93 +#: netbox/templates/core/objectchange.html:93 msgid "Object Created" msgstr "Objet créé" -#: templates/core/objectchange.html:95 +#: netbox/templates/core/objectchange.html:95 msgid "Object Deleted" msgstr "Objet supprimé" -#: templates/core/objectchange.html:97 +#: netbox/templates/core/objectchange.html:97 msgid "No Changes" msgstr "Aucune modification" -#: templates/core/objectchange.html:111 +#: netbox/templates/core/objectchange.html:111 msgid "Pre-Change Data" msgstr "Données avant modification" -#: templates/core/objectchange.html:122 +#: netbox/templates/core/objectchange.html:122 msgid "Warning: Comparing non-atomic change to previous change record" msgstr "" "Attention : modification non-atomique vis à vis de la modification " "précédente" -#: templates/core/objectchange.html:131 +#: netbox/templates/core/objectchange.html:131 msgid "Post-Change Data" msgstr "Données après modification" -#: templates/core/objectchange.html:162 +#: netbox/templates/core/objectchange.html:162 #, python-format msgid "See All %(count)s Changes" msgstr "Voir toutes les %(count)s modifications" -#: templates/core/objectchange_list.html:9 -#: templates/extras/object_changelog.html:15 +#: netbox/templates/core/objectchange_list.html:9 +#: netbox/templates/extras/object_changelog.html:15 msgid "Change log retention" msgstr "Modifier la durée de conservation des logs" -#: templates/core/objectchange_list.html:9 -#: templates/extras/object_changelog.html:15 +#: netbox/templates/core/objectchange_list.html:9 +#: netbox/templates/extras/object_changelog.html:15 msgid "days" msgstr "jours" -#: templates/core/objectchange_list.html:9 -#: templates/extras/object_changelog.html:15 +#: netbox/templates/core/objectchange_list.html:9 +#: netbox/templates/extras/object_changelog.html:15 msgid "Indefinite" msgstr "Indéfini" -#: templates/core/plugin.html:22 +#: netbox/templates/core/plugin.html:22 msgid "Not installed" msgstr "Non installé" -#: templates/core/plugin.html:33 +#: netbox/templates/core/plugin.html:33 msgid "Overview" msgstr "Vue d'ensemble" -#: templates/core/plugin.html:39 +#: netbox/templates/core/plugin.html:39 msgid "Install" msgstr "Installer" -#: templates/core/plugin.html:51 +#: netbox/templates/core/plugin.html:51 msgid "Plugin Details" msgstr "Détails du plugin" -#: templates/core/plugin.html:58 +#: netbox/templates/core/plugin.html:58 msgid "Summary" msgstr "Résumé" -#: templates/core/plugin.html:76 +#: netbox/templates/core/plugin.html:76 msgid "License" msgstr "Licence" -#: templates/core/plugin.html:96 +#: netbox/templates/core/plugin.html:96 msgid "Version History" msgstr "Historique des versions" -#: templates/core/plugin.html:107 +#: netbox/templates/core/plugin.html:107 msgid "Local Installation Instructions" msgstr "Instructions d'installation locales" -#: templates/core/rq_queue_list.html:5 templates/core/rq_queue_list.html:13 -#: templates/core/rq_task_list.html:14 templates/core/rq_worker.html:7 +#: netbox/templates/core/rq_queue_list.html:5 +#: netbox/templates/core/rq_queue_list.html:13 +#: netbox/templates/core/rq_task_list.html:14 +#: netbox/templates/core/rq_worker.html:7 msgid "Background Queues" msgstr "Files d'attente en arrière-plan" -#: templates/core/rq_queue_list.html:24 templates/core/rq_queue_list.html:25 -#: templates/core/rq_worker_list.html:49 templates/core/rq_worker_list.html:50 -#: templates/extras/script_result.html:67 -#: templates/extras/script_result.html:69 -#: templates/inc/table_controls_htmx.html:30 -#: templates/inc/table_controls_htmx.html:33 +#: netbox/templates/core/rq_queue_list.html:24 +#: netbox/templates/core/rq_queue_list.html:25 +#: netbox/templates/core/rq_worker_list.html:49 +#: netbox/templates/core/rq_worker_list.html:50 +#: netbox/templates/extras/script_result.html:67 +#: netbox/templates/extras/script_result.html:69 +#: netbox/templates/inc/table_controls_htmx.html:30 +#: netbox/templates/inc/table_controls_htmx.html:33 msgid "Configure Table" msgstr "Configurer le tableau" -#: templates/core/rq_task.html:29 +#: netbox/templates/core/rq_task.html:29 msgid "Stop" msgstr "Arrête" -#: templates/core/rq_task.html:34 +#: netbox/templates/core/rq_task.html:34 msgid "Requeue" msgstr "File d'attente" -#: templates/core/rq_task.html:39 +#: netbox/templates/core/rq_task.html:39 msgid "Enqueue" msgstr "File d'attente" -#: templates/core/rq_task.html:61 +#: netbox/templates/core/rq_task.html:61 msgid "Queue" msgstr "File d'attente" -#: templates/core/rq_task.html:65 +#: netbox/templates/core/rq_task.html:65 msgid "Timeout" msgstr "Délai d'attente" -#: templates/core/rq_task.html:69 +#: netbox/templates/core/rq_task.html:69 msgid "Result TTL" msgstr "Résultat TTL" -#: templates/core/rq_task.html:89 +#: netbox/templates/core/rq_task.html:89 msgid "Meta" msgstr "Méta" -#: templates/core/rq_task.html:93 +#: netbox/templates/core/rq_task.html:93 msgid "Arguments" msgstr "Arguments" -#: templates/core/rq_task.html:97 +#: netbox/templates/core/rq_task.html:97 msgid "Keyword Arguments" msgstr "Arguments relatifs aux" -#: templates/core/rq_task.html:103 +#: netbox/templates/core/rq_task.html:103 msgid "Depends on" msgstr "Cela dépend de" -#: templates/core/rq_task.html:109 +#: netbox/templates/core/rq_task.html:109 msgid "Exception" msgstr "Exception" -#: templates/core/rq_task_list.html:28 +#: netbox/templates/core/rq_task_list.html:28 msgid "tasks in " msgstr "tâches dans " -#: templates/core/rq_task_list.html:33 +#: netbox/templates/core/rq_task_list.html:33 msgid "Queued Jobs" msgstr "Jobs en file d'attente" -#: templates/core/rq_task_list.html:64 templates/extras/script_result.html:86 +#: netbox/templates/core/rq_task_list.html:64 +#: netbox/templates/extras/script_result.html:86 #, python-format msgid "" "Select all %(count)s %(object_type_plural)s matching query" @@ -11693,383 +12438,401 @@ msgstr "" "Sélectionnez tous %(count)s %(object_type_plural)s requête " "correspondante" -#: templates/core/rq_worker.html:10 +#: netbox/templates/core/rq_worker.html:10 msgid "Worker Info" msgstr "Informations sur les travailleurs" -#: templates/core/rq_worker.html:31 templates/core/rq_worker.html:40 +#: netbox/templates/core/rq_worker.html:31 +#: netbox/templates/core/rq_worker.html:40 msgid "Worker" msgstr "Travailleur" -#: templates/core/rq_worker.html:55 +#: netbox/templates/core/rq_worker.html:55 msgid "Queues" msgstr "Files d'attente" -#: templates/core/rq_worker.html:63 +#: netbox/templates/core/rq_worker.html:63 msgid "Curent Job" msgstr "Emplois actuels" -#: templates/core/rq_worker.html:67 +#: netbox/templates/core/rq_worker.html:67 msgid "Successful job count" msgstr "Nombre d'emplois réussis" -#: templates/core/rq_worker.html:71 +#: netbox/templates/core/rq_worker.html:71 msgid "Failed job count" msgstr "Nombre de tâches échouées" -#: templates/core/rq_worker.html:75 +#: netbox/templates/core/rq_worker.html:75 msgid "Total working time" msgstr "Temps de travail total" -#: templates/core/rq_worker.html:76 +#: netbox/templates/core/rq_worker.html:76 msgid "seconds" msgstr "secondes" -#: templates/core/rq_worker_list.html:13 templates/core/rq_worker_list.html:21 +#: netbox/templates/core/rq_worker_list.html:13 +#: netbox/templates/core/rq_worker_list.html:21 msgid "Background Workers" msgstr "Travailleurs de fond" -#: templates/core/rq_worker_list.html:29 +#: netbox/templates/core/rq_worker_list.html:29 #, python-format msgid "Workers in %(queue_name)s" msgstr "Travailleurs en %(queue_name)s" -#: templates/core/system.html:11 utilities/templates/buttons/export.html:4 +#: netbox/templates/core/system.html:11 +#: netbox/utilities/templates/buttons/export.html:4 msgid "Export" msgstr "Exporter" -#: templates/core/system.html:28 +#: netbox/templates/core/system.html:28 msgid "System Status" msgstr "État du système" -#: templates/core/system.html:31 +#: netbox/templates/core/system.html:31 msgid "NetBox release" msgstr "Version de NetBox" -#: templates/core/system.html:44 +#: netbox/templates/core/system.html:44 msgid "Django version" msgstr "Version de Django" -#: templates/core/system.html:48 +#: netbox/templates/core/system.html:48 msgid "PostgreSQL version" msgstr "Version de PostgreSQL" -#: templates/core/system.html:52 +#: netbox/templates/core/system.html:52 msgid "Database name" msgstr "Nom de base de données" -#: templates/core/system.html:56 +#: netbox/templates/core/system.html:56 msgid "Database size" msgstr "Taille de base de données" -#: templates/core/system.html:61 +#: netbox/templates/core/system.html:61 msgid "Unavailable" msgstr "Non disponible" -#: templates/core/system.html:66 +#: netbox/templates/core/system.html:66 msgid "RQ workers" msgstr "Travailleurs de RQ" -#: templates/core/system.html:69 +#: netbox/templates/core/system.html:69 msgid "default queue" msgstr "file d'attente par défaut" -#: templates/core/system.html:73 +#: netbox/templates/core/system.html:73 msgid "System time" msgstr "Heure du système" -#: templates/core/system.html:85 +#: netbox/templates/core/system.html:85 msgid "Current Configuration" msgstr "Configuration actuelle" -#: templates/dcim/bulk_disconnect.html:9 +#: netbox/templates/dcim/bulk_disconnect.html:9 #, python-format msgid "" "Are you sure you want to disconnect these %(count)s %(obj_type_plural)s?" msgstr "" "Êtes-vous sûr de vouloir les déconnecter %(count)s %(obj_type_plural)s?" -#: templates/dcim/cable_trace.html:10 +#: netbox/templates/dcim/cable_trace.html:10 #, python-format msgid "Cable Trace for %(object_type)s %(object)s" msgstr "Cable Trace pour %(object_type)s %(object)s" -#: templates/dcim/cable_trace.html:24 templates/dcim/inc/rack_elevation.html:7 +#: netbox/templates/dcim/cable_trace.html:24 +#: netbox/templates/dcim/inc/rack_elevation.html:7 msgid "Download SVG" msgstr "Télécharger SVG" -#: templates/dcim/cable_trace.html:30 +#: netbox/templates/dcim/cable_trace.html:30 msgid "Asymmetric Path" msgstr "Trajectoire asymétrique" -#: templates/dcim/cable_trace.html:31 +#: netbox/templates/dcim/cable_trace.html:31 msgid "The nodes below have no links and result in an asymmetric path" msgstr "" "Les nœuds ci-dessous n'ont aucun lien et génèrent un chemin asymétrique" -#: templates/dcim/cable_trace.html:38 +#: netbox/templates/dcim/cable_trace.html:38 msgid "Path split" msgstr "Parcours divisé" -#: templates/dcim/cable_trace.html:39 +#: netbox/templates/dcim/cable_trace.html:39 msgid "Select a node below to continue" msgstr "Sélectionnez un nœud ci-dessous pour continuer" -#: templates/dcim/cable_trace.html:55 +#: netbox/templates/dcim/cable_trace.html:55 msgid "Trace Completed" msgstr "Trace terminée" -#: templates/dcim/cable_trace.html:58 +#: netbox/templates/dcim/cable_trace.html:58 msgid "Total segments" msgstr "Nombre total de segments" -#: templates/dcim/cable_trace.html:62 +#: netbox/templates/dcim/cable_trace.html:62 msgid "Total length" msgstr "Longueur totale" -#: templates/dcim/cable_trace.html:77 +#: netbox/templates/dcim/cable_trace.html:77 msgid "No paths found" msgstr "Aucun chemin trouvé" -#: templates/dcim/cable_trace.html:85 +#: netbox/templates/dcim/cable_trace.html:85 msgid "Related Paths" msgstr "Chemins associés" -#: templates/dcim/cable_trace.html:89 +#: netbox/templates/dcim/cable_trace.html:89 msgid "Origin" msgstr "Origine" -#: templates/dcim/cable_trace.html:90 +#: netbox/templates/dcim/cable_trace.html:90 msgid "Destination" msgstr "Destination" -#: templates/dcim/cable_trace.html:91 +#: netbox/templates/dcim/cable_trace.html:91 msgid "Segments" msgstr "Segments" -#: templates/dcim/cable_trace.html:104 +#: netbox/templates/dcim/cable_trace.html:104 msgid "Incomplete" msgstr "Incomplet" -#: templates/dcim/component_list.html:14 +#: netbox/templates/dcim/component_list.html:14 msgid "Rename Selected" msgstr "Renommer la sélection" -#: templates/dcim/consoleport.html:65 templates/dcim/consoleserverport.html:66 -#: templates/dcim/frontport.html:98 templates/dcim/interface.html:176 -#: templates/dcim/poweroutlet.html:69 templates/dcim/powerport.html:69 +#: netbox/templates/dcim/consoleport.html:65 +#: netbox/templates/dcim/consoleserverport.html:66 +#: netbox/templates/dcim/frontport.html:98 +#: netbox/templates/dcim/interface.html:176 +#: netbox/templates/dcim/poweroutlet.html:69 +#: netbox/templates/dcim/powerport.html:69 msgid "Not Connected" msgstr "Non connecté" -#: templates/dcim/device.html:34 +#: 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" -#: templates/dcim/device.html:55 +#: netbox/templates/dcim/device.html:55 msgid "Not racked" msgstr "Pas mis en baie" -#: templates/dcim/device.html:62 templates/dcim/site.html:94 +#: netbox/templates/dcim/device.html:62 netbox/templates/dcim/site.html:94 msgid "GPS Coordinates" msgstr "Coordonnées GPS" -#: templates/dcim/device.html:68 templates/dcim/site.html:81 -#: templates/dcim/site.html:100 +#: netbox/templates/dcim/device.html:68 netbox/templates/dcim/site.html:81 +#: netbox/templates/dcim/site.html:100 msgid "Map" msgstr "Carte" -#: templates/dcim/device.html:108 templates/dcim/inventoryitem.html:56 -#: templates/dcim/module.html:81 templates/dcim/modulebay.html:74 -#: templates/dcim/rack.html:61 +#: netbox/templates/dcim/device.html:108 +#: netbox/templates/dcim/inventoryitem.html:56 +#: netbox/templates/dcim/module.html:81 +#: netbox/templates/dcim/modulebay.html:74 netbox/templates/dcim/rack.html:61 msgid "Asset Tag" msgstr "Étiquette d'actif" -#: templates/dcim/device.html:123 +#: netbox/templates/dcim/device.html:123 msgid "View Virtual Chassis" msgstr "Afficher le châssis virtuel" -#: templates/dcim/device.html:164 +#: netbox/templates/dcim/device.html:164 msgid "Create VDC" msgstr "Créer un VDC" -#: templates/dcim/device.html:175 templates/dcim/device_edit.html:64 -#: virtualization/forms/model_forms.py:223 +#: netbox/templates/dcim/device.html:175 +#: netbox/templates/dcim/device_edit.html:64 +#: netbox/virtualization/forms/model_forms.py:223 msgid "Management" msgstr "Gestion" -#: templates/dcim/device.html:195 templates/dcim/device.html:211 -#: templates/dcim/device.html:227 -#: templates/virtualization/virtualmachine.html:57 -#: templates/virtualization/virtualmachine.html:73 +#: netbox/templates/dcim/device.html:195 netbox/templates/dcim/device.html:211 +#: netbox/templates/dcim/device.html:227 +#: netbox/templates/virtualization/virtualmachine.html:57 +#: netbox/templates/virtualization/virtualmachine.html:73 msgid "NAT for" msgstr "NAT pour" -#: templates/dcim/device.html:197 templates/dcim/device.html:213 -#: templates/dcim/device.html:229 -#: templates/virtualization/virtualmachine.html:59 -#: templates/virtualization/virtualmachine.html:75 +#: netbox/templates/dcim/device.html:197 netbox/templates/dcim/device.html:213 +#: netbox/templates/dcim/device.html:229 +#: netbox/templates/virtualization/virtualmachine.html:59 +#: netbox/templates/virtualization/virtualmachine.html:75 msgid "NAT" msgstr "NAT" -#: templates/dcim/device.html:252 templates/dcim/rack.html:73 +#: netbox/templates/dcim/device.html:252 netbox/templates/dcim/rack.html:73 msgid "Power Utilization" msgstr "Utilisation de l'énergie" -#: templates/dcim/device.html:256 +#: netbox/templates/dcim/device.html:256 msgid "Input" msgstr "Entrée" -#: templates/dcim/device.html:257 +#: netbox/templates/dcim/device.html:257 msgid "Outlets" msgstr "Prises" -#: templates/dcim/device.html:258 +#: netbox/templates/dcim/device.html:258 msgid "Allocated" msgstr "Alloué" -#: templates/dcim/device.html:268 templates/dcim/device.html:270 -#: templates/dcim/device.html:286 templates/dcim/powerfeed.html:67 +#: netbox/templates/dcim/device.html:268 netbox/templates/dcim/device.html:270 +#: netbox/templates/dcim/device.html:286 +#: netbox/templates/dcim/powerfeed.html:67 msgid "VA" msgstr "VA" -#: templates/dcim/device.html:280 +#: netbox/templates/dcim/device.html:280 msgctxt "Leg of a power feed" msgid "Leg" msgstr "Jambe" -#: templates/dcim/device.html:306 -#: templates/virtualization/virtualmachine.html:158 +#: netbox/templates/dcim/device.html:306 +#: netbox/templates/virtualization/virtualmachine.html:158 msgid "Add a service" msgstr "Ajouter un service" -#: templates/dcim/device/base.html:21 templates/dcim/device_list.html:9 -#: templates/dcim/devicetype/base.html:18 -#: templates/dcim/inc/moduletype_buttons.html:9 templates/dcim/module.html:18 -#: templates/virtualization/virtualmachine/base.html:22 -#: templates/virtualization/virtualmachine_list.html:8 +#: netbox/templates/dcim/device/base.html:21 +#: netbox/templates/dcim/device_list.html:9 +#: netbox/templates/dcim/devicetype/base.html:18 +#: netbox/templates/dcim/inc/moduletype_buttons.html:9 +#: netbox/templates/dcim/module.html:18 +#: netbox/templates/virtualization/virtualmachine/base.html:22 +#: netbox/templates/virtualization/virtualmachine_list.html:8 msgid "Add Components" msgstr "Ajouter des composants" -#: templates/dcim/device/consoleports.html:24 +#: netbox/templates/dcim/device/consoleports.html:24 msgid "Add Console Ports" msgstr "Ajouter des ports de console" -#: templates/dcim/device/consoleserverports.html:24 +#: netbox/templates/dcim/device/consoleserverports.html:24 msgid "Add Console Server Ports" msgstr "Ajouter des ports au serveur de consoles" -#: templates/dcim/device/devicebays.html:10 +#: netbox/templates/dcim/device/devicebays.html:10 msgid "Add Device Bays" msgstr "Ajouter des baies pour appareils" -#: templates/dcim/device/frontports.html:24 +#: netbox/templates/dcim/device/frontports.html:24 msgid "Add Front Ports" msgstr "Ajouter des ports frontaux" -#: templates/dcim/device/inc/interface_table_controls.html:9 +#: netbox/templates/dcim/device/inc/interface_table_controls.html:9 msgid "Hide Enabled" msgstr "Masquer activé" -#: templates/dcim/device/inc/interface_table_controls.html:10 +#: netbox/templates/dcim/device/inc/interface_table_controls.html:10 msgid "Hide Disabled" msgstr "Masquer les désactivés" -#: templates/dcim/device/inc/interface_table_controls.html:11 +#: netbox/templates/dcim/device/inc/interface_table_controls.html:11 msgid "Hide Virtual" msgstr "Masquer le virtuel" -#: templates/dcim/device/inc/interface_table_controls.html:12 +#: netbox/templates/dcim/device/inc/interface_table_controls.html:12 msgid "Hide Disconnected" msgstr "Masquer les déconnectés" -#: templates/dcim/device/interfaces.html:27 +#: netbox/templates/dcim/device/interfaces.html:27 msgid "Add Interfaces" msgstr "Ajouter des interfaces" -#: templates/dcim/device/inventory.html:10 -#: templates/dcim/inc/panels/inventory_items.html:10 +#: netbox/templates/dcim/device/inventory.html:10 +#: netbox/templates/dcim/inc/panels/inventory_items.html:10 msgid "Add Inventory Item" msgstr "Ajouter un article d'inventaire" -#: templates/dcim/device/modulebays.html:10 +#: netbox/templates/dcim/device/modulebays.html:10 msgid "Add Module Bays" msgstr "Ajouter des baies de modules" -#: templates/dcim/device/poweroutlets.html:24 +#: netbox/templates/dcim/device/poweroutlets.html:24 msgid "Add Power Outlets" msgstr "Ajouter des prises de courant" -#: templates/dcim/device/powerports.html:24 +#: netbox/templates/dcim/device/powerports.html:24 msgid "Add Power Port" msgstr "Ajouter un port d'alimentation" -#: templates/dcim/device/rearports.html:24 +#: netbox/templates/dcim/device/rearports.html:24 msgid "Add Rear Ports" msgstr "Ajouter des ports arrière" -#: templates/dcim/device/render_config.html:5 -#: templates/virtualization/virtualmachine/render_config.html:5 +#: netbox/templates/dcim/device/render_config.html:5 +#: netbox/templates/virtualization/virtualmachine/render_config.html:5 msgid "Config" msgstr "Configuration" -#: templates/dcim/device/render_config.html:35 -#: templates/virtualization/virtualmachine/render_config.html:35 +#: netbox/templates/dcim/device/render_config.html:35 +#: netbox/templates/virtualization/virtualmachine/render_config.html:35 msgid "Context Data" msgstr "Données de contexte" -#: templates/dcim/device/render_config.html:53 -#: templates/virtualization/virtualmachine/render_config.html:53 +#: netbox/templates/dcim/device/render_config.html:55 +#: netbox/templates/virtualization/virtualmachine/render_config.html:55 msgid "Rendered Config" msgstr "Configuration rendue" -#: templates/dcim/device/render_config.html:55 -#: templates/virtualization/virtualmachine/render_config.html:55 +#: netbox/templates/dcim/device/render_config.html:57 +#: netbox/templates/virtualization/virtualmachine/render_config.html:57 msgid "Download" msgstr "Télécharger" -#: templates/dcim/device/render_config.html:61 -#: templates/virtualization/virtualmachine/render_config.html:61 -msgid "No configuration template found" -msgstr "Aucun modèle de configuration trouvé" +#: netbox/templates/dcim/device/render_config.html:64 +#: netbox/templates/virtualization/virtualmachine/render_config.html:64 +msgid "Error rendering template" +msgstr "" -#: templates/dcim/device_edit.html:44 +#: 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" -#: templates/dcim/device_edit.html:48 -#: utilities/templates/form_helpers/render_field.html:22 +#: netbox/templates/dcim/device_edit.html:48 +#: netbox/utilities/templates/form_helpers/render_field.html:22 msgid "Regenerate Slug" msgstr "Régénérez le slug" -#: templates/dcim/device_edit.html:49 templates/generic/bulk_remove.html:21 -#: utilities/templates/helpers/table_config_form.html:23 +#: netbox/templates/dcim/device_edit.html:49 +#: netbox/templates/generic/bulk_remove.html:21 +#: netbox/utilities/templates/helpers/table_config_form.html:23 msgid "Remove" msgstr "Supprimer" -#: templates/dcim/device_edit.html:110 +#: netbox/templates/dcim/device_edit.html:110 msgid "Local Config Context Data" msgstr "Données contextuelles de configuration locales" -#: templates/dcim/device_list.html:82 templates/generic/bulk_rename.html:57 -#: templates/virtualization/virtualmachine/interfaces.html:11 -#: templates/virtualization/virtualmachine/virtual_disks.html:11 +#: netbox/templates/dcim/device_list.html:82 +#: netbox/templates/generic/bulk_rename.html:57 +#: netbox/templates/virtualization/virtualmachine/interfaces.html:11 +#: netbox/templates/virtualization/virtualmachine/virtual_disks.html:11 msgid "Rename" msgstr "Renommer" -#: templates/dcim/devicebay.html:17 +#: netbox/templates/dcim/devicebay.html:17 msgid "Device Bay" msgstr "Baie pour appareils" -#: templates/dcim/devicebay.html:43 +#: netbox/templates/dcim/devicebay.html:43 msgid "Installed Device" msgstr "Appareil installé" -#: templates/dcim/devicebay_depopulate.html:6 +#: netbox/templates/dcim/devicebay_depopulate.html:6 #, python-format msgid "Remove %(device)s from %(device_bay)s?" msgstr "Supprimer %(device)s de %(device_bay)s?" -#: templates/dcim/devicebay_depopulate.html:13 +#: netbox/templates/dcim/devicebay_depopulate.html:13 #, python-format msgid "" "Are you sure you want to remove %(device)s from " @@ -12078,430 +12841,449 @@ msgstr "" "Êtes-vous sûr de vouloir supprimer %(device)s de " "%(device_bay)s?" -#: templates/dcim/devicebay_populate.html:13 +#: netbox/templates/dcim/devicebay_populate.html:13 msgid "Populate" msgstr "Peupler" -#: templates/dcim/devicebay_populate.html:22 +#: netbox/templates/dcim/devicebay_populate.html:22 msgid "Bay" msgstr "Baie" -#: templates/dcim/devicerole.html:14 templates/dcim/platform.html:17 +#: netbox/templates/dcim/devicerole.html:14 +#: netbox/templates/dcim/platform.html:17 msgid "Add Device" msgstr "Ajouter un appareil" -#: templates/dcim/devicerole.html:40 +#: netbox/templates/dcim/devicerole.html:40 msgid "VM Role" msgstr "Rôle de la machine virtuelle" -#: templates/dcim/devicetype.html:18 templates/dcim/moduletype.html:29 +#: netbox/templates/dcim/devicetype.html:18 +#: netbox/templates/dcim/moduletype.html:29 msgid "Model Name" msgstr "Nom du modèle" -#: templates/dcim/devicetype.html:25 templates/dcim/moduletype.html:33 +#: netbox/templates/dcim/devicetype.html:25 +#: netbox/templates/dcim/moduletype.html:33 msgid "Part Number" msgstr "Numéro de pièce" -#: templates/dcim/devicetype.html:41 +#: netbox/templates/dcim/devicetype.html:41 msgid "Exclude From Utilization" msgstr "Exclure de l'utilisation" -#: templates/dcim/devicetype.html:59 +#: netbox/templates/dcim/devicetype.html:59 msgid "Parent/Child" msgstr "Parent/Enfant" -#: templates/dcim/devicetype.html:71 +#: netbox/templates/dcim/devicetype.html:71 msgid "Front Image" msgstr "Image avant" -#: templates/dcim/devicetype.html:83 +#: netbox/templates/dcim/devicetype.html:83 msgid "Rear Image" msgstr "Image arrière" -#: templates/dcim/frontport.html:54 +#: netbox/templates/dcim/frontport.html:54 msgid "Rear Port Position" msgstr "Position du port arrière" -#: templates/dcim/frontport.html:72 templates/dcim/interface.html:144 -#: templates/dcim/poweroutlet.html:63 templates/dcim/powerport.html:63 -#: templates/dcim/rearport.html:68 +#: netbox/templates/dcim/frontport.html:72 +#: netbox/templates/dcim/interface.html:144 +#: netbox/templates/dcim/poweroutlet.html:63 +#: netbox/templates/dcim/powerport.html:63 +#: netbox/templates/dcim/rearport.html:68 msgid "Marked as Connected" msgstr "Marqué comme connecté" -#: templates/dcim/frontport.html:86 templates/dcim/rearport.html:82 +#: netbox/templates/dcim/frontport.html:86 +#: netbox/templates/dcim/rearport.html:82 msgid "Connection Status" msgstr "État de la connexion" -#: templates/dcim/htmx/cable_edit.html:10 +#: netbox/templates/dcim/htmx/cable_edit.html:10 msgid "A Side" msgstr "Côté A" -#: templates/dcim/htmx/cable_edit.html:30 +#: netbox/templates/dcim/htmx/cable_edit.html:30 msgid "B Side" msgstr "Côté B" -#: templates/dcim/inc/cable_termination.html:65 +#: netbox/templates/dcim/inc/cable_termination.html:65 msgid "No termination" msgstr "Pas de terminaison" -#: templates/dcim/inc/cable_toggle_buttons.html:3 +#: netbox/templates/dcim/inc/cable_toggle_buttons.html:3 msgid "Mark Planned" msgstr "Marquer comme prévu" -#: templates/dcim/inc/cable_toggle_buttons.html:6 +#: netbox/templates/dcim/inc/cable_toggle_buttons.html:6 msgid "Mark Installed" msgstr "Marquer comme installé" -#: templates/dcim/inc/connection_endpoints.html:13 +#: netbox/templates/dcim/inc/connection_endpoints.html:13 msgid "Path Status" msgstr "État du chemin" -#: templates/dcim/inc/connection_endpoints.html:18 +#: netbox/templates/dcim/inc/connection_endpoints.html:18 msgid "Not Reachable" msgstr "Non joignable" -#: templates/dcim/inc/connection_endpoints.html:23 +#: netbox/templates/dcim/inc/connection_endpoints.html:23 msgid "Path Endpoints" msgstr "Points de terminaison du chemin" -#: templates/dcim/inc/endpoint_connection.html:8 -#: templates/dcim/powerfeed.html:120 templates/dcim/rearport.html:94 +#: netbox/templates/dcim/inc/endpoint_connection.html:8 +#: netbox/templates/dcim/powerfeed.html:120 +#: netbox/templates/dcim/rearport.html:94 msgid "Not connected" msgstr "Non connecté" -#: templates/dcim/inc/interface_vlans_table.html:6 +#: netbox/templates/dcim/inc/interface_vlans_table.html:6 msgid "Untagged" -msgstr "Non taggé" +msgstr "Non étiqueté" -#: templates/dcim/inc/interface_vlans_table.html:37 +#: netbox/templates/dcim/inc/interface_vlans_table.html:37 msgid "No VLANs Assigned" msgstr "Aucun VLAN associé" -#: templates/dcim/inc/interface_vlans_table.html:44 -#: templates/ipam/prefix_list.html:16 templates/ipam/prefix_list.html:33 +#: netbox/templates/dcim/inc/interface_vlans_table.html:44 +#: netbox/templates/ipam/prefix_list.html:16 +#: netbox/templates/ipam/prefix_list.html:33 msgid "Clear" msgstr "Effacer" -#: templates/dcim/inc/interface_vlans_table.html:47 +#: netbox/templates/dcim/inc/interface_vlans_table.html:47 msgid "Clear All" msgstr "Tout effacer" -#: templates/dcim/inc/panels/racktype_dimensions.html:38 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:38 msgid "Mounting Depth" msgstr "Profondeur de montage" -#: templates/dcim/inc/panels/racktype_numbering.html:6 +#: netbox/templates/dcim/inc/panels/racktype_numbering.html:6 msgid "Starting Unit" msgstr "U initial" -#: templates/dcim/inc/panels/racktype_numbering.html:10 +#: netbox/templates/dcim/inc/panels/racktype_numbering.html:10 msgid "Descending Units" msgstr "Unités décroissantes" -#: templates/dcim/inc/rack_elevation.html:3 +#: netbox/templates/dcim/inc/rack_elevation.html:3 msgid "Rack elevation" -msgstr "Élévation du rack" +msgstr "Position en baie" -#: templates/dcim/interface.html:17 +#: netbox/templates/dcim/interface.html:17 msgid "Add Child Interface" msgstr "Ajouter une interface enfant" -#: templates/dcim/interface.html:50 +#: netbox/templates/dcim/interface.html:50 msgid "Speed/Duplex" msgstr "Vitesse/Duplex" -#: templates/dcim/interface.html:73 +#: netbox/templates/dcim/interface.html:73 msgid "PoE Mode" msgstr "Mode PoE" -#: templates/dcim/interface.html:77 +#: netbox/templates/dcim/interface.html:77 msgid "PoE Type" msgstr "Type de PoE" -#: templates/dcim/interface.html:81 -#: templates/virtualization/vminterface.html:63 +#: netbox/templates/dcim/interface.html:81 +#: netbox/templates/virtualization/vminterface.html:63 msgid "802.1Q Mode" msgstr "Mode 802.1Q" -#: templates/dcim/interface.html:125 -#: templates/virtualization/vminterface.html:59 +#: netbox/templates/dcim/interface.html:125 +#: netbox/templates/virtualization/vminterface.html:59 msgid "MAC Address" msgstr "Adresse MAC" -#: templates/dcim/interface.html:151 +#: netbox/templates/dcim/interface.html:151 msgid "Wireless Link" msgstr "Liaison sans fil" -#: templates/dcim/interface.html:218 vpn/choices.py:55 +#: netbox/templates/dcim/interface.html:218 netbox/vpn/choices.py:63 msgid "Peer" msgstr "Peer" -#: templates/dcim/interface.html:230 -#: templates/wireless/inc/wirelesslink_interface.html:26 +#: netbox/templates/dcim/interface.html:230 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:26 msgid "Channel" msgstr "Canal" -#: templates/dcim/interface.html:239 -#: templates/wireless/inc/wirelesslink_interface.html:32 +#: netbox/templates/dcim/interface.html:239 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:32 msgid "Channel Frequency" msgstr "Fréquence du canal" -#: templates/dcim/interface.html:242 templates/dcim/interface.html:250 -#: templates/dcim/interface.html:261 templates/dcim/interface.html:269 +#: netbox/templates/dcim/interface.html:242 +#: netbox/templates/dcim/interface.html:250 +#: netbox/templates/dcim/interface.html:261 +#: netbox/templates/dcim/interface.html:269 msgid "MHz" msgstr "MHz" -#: templates/dcim/interface.html:258 -#: templates/wireless/inc/wirelesslink_interface.html:42 +#: netbox/templates/dcim/interface.html:258 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:42 msgid "Channel Width" msgstr "Largeur du canal" -#: templates/dcim/interface.html:285 templates/wireless/wirelesslan.html:14 -#: templates/wireless/wirelesslink.html:21 wireless/forms/bulk_edit.py:60 -#: wireless/forms/bulk_edit.py:102 wireless/forms/filtersets.py:40 -#: wireless/forms/filtersets.py:80 wireless/models.py:82 -#: wireless/models.py:156 wireless/tables/wirelesslan.py:44 +#: netbox/templates/dcim/interface.html:285 +#: netbox/templates/wireless/wirelesslan.html:14 +#: netbox/templates/wireless/wirelesslink.html:21 +#: netbox/wireless/forms/bulk_edit.py:60 +#: netbox/wireless/forms/bulk_edit.py:102 +#: netbox/wireless/forms/filtersets.py:40 +#: netbox/wireless/forms/filtersets.py:80 netbox/wireless/models.py:82 +#: netbox/wireless/models.py:156 netbox/wireless/tables/wirelesslan.py:44 msgid "SSID" msgstr "SSID" -#: templates/dcim/interface.html:305 +#: netbox/templates/dcim/interface.html:305 msgid "LAG Members" msgstr "Membres de l'aggrégat (LAG)" -#: templates/dcim/interface.html:323 +#: netbox/templates/dcim/interface.html:323 msgid "No member interfaces" msgstr "Aucune interface membre" -#: templates/dcim/interface.html:343 templates/ipam/fhrpgroup.html:73 -#: templates/ipam/iprange/ip_addresses.html:7 -#: templates/ipam/prefix/ip_addresses.html:7 -#: templates/virtualization/vminterface.html:89 +#: netbox/templates/dcim/interface.html:343 +#: netbox/templates/ipam/fhrpgroup.html:73 +#: netbox/templates/ipam/iprange/ip_addresses.html:7 +#: netbox/templates/ipam/prefix/ip_addresses.html:7 +#: netbox/templates/virtualization/vminterface.html:89 msgid "Add IP Address" msgstr "Ajouter une adresse IP" -#: templates/dcim/inventoryitem.html:24 +#: netbox/templates/dcim/inventoryitem.html:24 msgid "Parent Item" msgstr "Objet parent" -#: templates/dcim/inventoryitem.html:48 +#: netbox/templates/dcim/inventoryitem.html:48 msgid "Part ID" msgstr "Identifiant de la pièce" -#: templates/dcim/location.html:17 +#: netbox/templates/dcim/location.html:17 msgid "Add Child Location" msgstr "Ajouter la localisation de l'enfant" -#: templates/dcim/location.html:77 +#: netbox/templates/dcim/location.html:77 msgid "Child Locations" msgstr "Localisations des enfants" -#: templates/dcim/location.html:81 templates/dcim/site.html:131 +#: netbox/templates/dcim/location.html:81 netbox/templates/dcim/site.html:131 msgid "Add a Location" msgstr "Ajouter un lieu" -#: templates/dcim/location.html:94 templates/dcim/site.html:144 +#: netbox/templates/dcim/location.html:94 netbox/templates/dcim/site.html:144 msgid "Add a Device" msgstr "Ajouter un appareil" -#: templates/dcim/manufacturer.html:16 +#: netbox/templates/dcim/manufacturer.html:16 msgid "Add Device Type" msgstr "Ajouter un type d'appareil" -#: templates/dcim/manufacturer.html:21 +#: netbox/templates/dcim/manufacturer.html:21 msgid "Add Module Type" msgstr "Ajouter un type de module" -#: templates/dcim/powerfeed.html:53 +#: netbox/templates/dcim/powerfeed.html:53 msgid "Connected Device" msgstr "Appareil connecté" -#: templates/dcim/powerfeed.html:63 +#: netbox/templates/dcim/powerfeed.html:63 msgid "Utilization (Allocated" msgstr "Utilisation (allouée)" -#: templates/dcim/powerfeed.html:80 +#: netbox/templates/dcim/powerfeed.html:80 msgid "Electrical Characteristics" msgstr "Caractéristiques électriques" -#: templates/dcim/powerfeed.html:88 +#: netbox/templates/dcim/powerfeed.html:88 msgctxt "Abbreviation for volts" msgid "V" msgstr "V" -#: templates/dcim/powerfeed.html:92 +#: netbox/templates/dcim/powerfeed.html:92 msgctxt "Abbreviation for amperes" msgid "A" msgstr "A" -#: templates/dcim/poweroutlet.html:48 +#: netbox/templates/dcim/poweroutlet.html:48 msgid "Feed Leg" msgstr "Circuit" -#: templates/dcim/powerpanel.html:72 +#: netbox/templates/dcim/powerpanel.html:72 msgid "Add Power Feeds" msgstr "Ajouter des sources d'alimentation" -#: templates/dcim/powerport.html:44 +#: netbox/templates/dcim/powerport.html:44 msgid "Maximum Draw" msgstr "Consommation maximale" -#: templates/dcim/powerport.html:48 +#: netbox/templates/dcim/powerport.html:48 msgid "Allocated Draw" msgstr "Puissance alloué" -#: templates/dcim/rack.html:69 +#: netbox/templates/dcim/rack.html:69 msgid "Space Utilization" msgstr "Espace utilisé" -#: templates/dcim/rack.html:84 templates/dcim/racktype.html:44 +#: netbox/templates/dcim/rack.html:84 netbox/templates/dcim/racktype.html:44 msgid "Rack Weight" msgstr "Poids de la baie" -#: templates/dcim/rack.html:94 templates/dcim/racktype.html:54 +#: netbox/templates/dcim/rack.html:94 netbox/templates/dcim/racktype.html:54 msgid "Maximum Weight" msgstr "Poids maximum" -#: templates/dcim/rack.html:104 +#: netbox/templates/dcim/rack.html:104 msgid "Total Weight" msgstr "Poids total" -#: templates/dcim/rack.html:125 templates/dcim/rack_elevation_list.html:15 +#: netbox/templates/dcim/rack.html:125 +#: netbox/templates/dcim/rack_elevation_list.html:15 msgid "Images and Labels" msgstr "Images et étiquettes" -#: templates/dcim/rack.html:126 templates/dcim/rack_elevation_list.html:16 +#: netbox/templates/dcim/rack.html:126 +#: netbox/templates/dcim/rack_elevation_list.html:16 msgid "Images only" msgstr "Images uniquement" -#: templates/dcim/rack.html:127 templates/dcim/rack_elevation_list.html:17 +#: netbox/templates/dcim/rack.html:127 +#: netbox/templates/dcim/rack_elevation_list.html:17 msgid "Labels only" msgstr "Étiquettes uniquement" -#: templates/dcim/rack/reservations.html:8 +#: netbox/templates/dcim/rack/reservations.html:8 msgid "Add reservation" msgstr "Ajouter une réservation" -#: templates/dcim/rack_elevation_list.html:12 +#: netbox/templates/dcim/rack_elevation_list.html:12 msgid "View List" msgstr "Afficher la liste" -#: templates/dcim/rack_elevation_list.html:14 +#: 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" -#: templates/dcim/rack_elevation_list.html:25 +#: netbox/templates/dcim/rack_elevation_list.html:25 msgid "Sort By" msgstr "Trier par" -#: templates/dcim/rack_elevation_list.html:74 +#: netbox/templates/dcim/rack_elevation_list.html:74 msgid "No Racks Found" msgstr "Aucune baie trouvée" -#: templates/dcim/rack_list.html:8 +#: netbox/templates/dcim/rack_list.html:8 msgid "View Elevations" msgstr "Afficher les élévations" -#: templates/dcim/rackreservation.html:42 +#: netbox/templates/dcim/rackreservation.html:42 msgid "Reservation Details" msgstr "Détails de la réservation" -#: templates/dcim/rackrole.html:10 +#: netbox/templates/dcim/rackrole.html:10 msgid "Add Rack" msgstr "Ajouter un baie" -#: templates/dcim/rearport.html:50 +#: netbox/templates/dcim/rearport.html:50 msgid "Positions" msgstr "Positions" -#: templates/dcim/region.html:17 templates/dcim/sitegroup.html:17 +#: netbox/templates/dcim/region.html:17 +#: netbox/templates/dcim/sitegroup.html:17 msgid "Add Site" msgstr "Ajouter un site" -#: templates/dcim/region.html:55 +#: netbox/templates/dcim/region.html:55 msgid "Child Regions" msgstr "Régions enfants" -#: templates/dcim/region.html:59 +#: netbox/templates/dcim/region.html:59 msgid "Add Region" msgstr "Ajouter une région" -#: templates/dcim/site.html:64 +#: netbox/templates/dcim/site.html:64 msgid "Time Zone" msgstr "Fuseau horaire" -#: templates/dcim/site.html:67 +#: netbox/templates/dcim/site.html:67 msgid "UTC" msgstr "UTC (Temps universel coordonné)" -#: templates/dcim/site.html:68 +#: netbox/templates/dcim/site.html:68 msgid "Site time" msgstr "Heure du site" -#: templates/dcim/site.html:75 +#: netbox/templates/dcim/site.html:75 msgid "Physical Address" msgstr "Adresse physique" -#: templates/dcim/site.html:90 +#: netbox/templates/dcim/site.html:90 msgid "Shipping Address" msgstr "Adresse de livraison" -#: templates/dcim/sitegroup.html:55 templates/tenancy/contactgroup.html:46 -#: templates/tenancy/tenantgroup.html:55 -#: templates/wireless/wirelesslangroup.html:55 +#: netbox/templates/dcim/sitegroup.html:55 +#: netbox/templates/tenancy/contactgroup.html:46 +#: netbox/templates/tenancy/tenantgroup.html:55 +#: netbox/templates/wireless/wirelesslangroup.html:55 msgid "Child Groups" msgstr "Groupes enfants" -#: templates/dcim/sitegroup.html:59 +#: netbox/templates/dcim/sitegroup.html:59 msgid "Add Site Group" msgstr "Ajouter un groupe de sites" -#: templates/dcim/trace/attachment.html:5 -#: templates/extras/exporttemplate.html:31 +#: netbox/templates/dcim/trace/attachment.html:5 +#: netbox/templates/extras/exporttemplate.html:31 msgid "Attachment" msgstr "Pièce jointe" -#: templates/dcim/virtualchassis.html:57 +#: netbox/templates/dcim/virtualchassis.html:57 msgid "Add Member" msgstr "Ajouter un membre" -#: templates/dcim/virtualchassis_add.html:18 +#: netbox/templates/dcim/virtualchassis_add.html:18 msgid "Member Devices" msgstr "Appareils membres" -#: templates/dcim/virtualchassis_add_member.html:10 +#: netbox/templates/dcim/virtualchassis_add_member.html:10 #, python-format msgid "Add New Member to Virtual Chassis %(virtual_chassis)s" msgstr "Ajouter un nouveau membre à Virtual Chassis %(virtual_chassis)s" -#: templates/dcim/virtualchassis_add_member.html:19 +#: netbox/templates/dcim/virtualchassis_add_member.html:19 msgid "Add New Member" msgstr "Ajouter un nouveau membre" -#: templates/dcim/virtualchassis_add_member.html:27 -#: templates/generic/object_edit.html:78 -#: templates/users/objectpermission.html:31 users/forms/filtersets.py:67 -#: users/forms/model_forms.py:312 +#: netbox/templates/dcim/virtualchassis_add_member.html:27 +#: netbox/templates/generic/object_edit.html:78 +#: netbox/templates/users/objectpermission.html:31 +#: netbox/users/forms/filtersets.py:67 netbox/users/forms/model_forms.py:312 msgid "Actions" msgstr "Actions" -#: templates/dcim/virtualchassis_add_member.html:29 +#: netbox/templates/dcim/virtualchassis_add_member.html:29 msgid "Save & Add Another" msgstr "Enregistrer et ajouter un autre" -#: templates/dcim/virtualchassis_edit.html:7 +#: netbox/templates/dcim/virtualchassis_edit.html:7 #, python-format msgid "Editing Virtual Chassis %(name)s" msgstr "Édition d'un châssis virtuel %(name)s" -#: templates/dcim/virtualchassis_edit.html:53 +#: netbox/templates/dcim/virtualchassis_edit.html:53 msgid "Rack/Unit" -msgstr "Baie/U" +msgstr "Baie/Unité" -#: templates/dcim/virtualchassis_remove_member.html:5 +#: netbox/templates/dcim/virtualchassis_remove_member.html:5 msgid "Remove Virtual Chassis Member" msgstr "Supprimer un membre du châssis virtuel" -#: templates/dcim/virtualchassis_remove_member.html:9 +#: netbox/templates/dcim/virtualchassis_remove_member.html:9 #, python-format msgid "" "Are you sure you want to remove %(device)s from virtual " @@ -12510,11 +13292,12 @@ msgstr "" "Êtes-vous sûr de vouloir supprimer %(device)s du châssis " "virtuel %(name)s?" -#: templates/dcim/virtualdevicecontext.html:26 templates/vpn/l2vpn.html:18 +#: netbox/templates/dcim/virtualdevicecontext.html:26 +#: netbox/templates/vpn/l2vpn.html:18 msgid "Identifier" msgstr "Identifiant" -#: templates/exceptions/import_error.html:6 +#: netbox/templates/exceptions/import_error.html:6 msgid "" "A module import error occurred during this request. Common causes include " "the following:" @@ -12522,11 +13305,11 @@ msgstr "" "Une erreur d'importation de module s'est produite lors de cette requête. Les" " causes les plus courantes sont les suivantes :" -#: templates/exceptions/import_error.html:10 +#: netbox/templates/exceptions/import_error.html:10 msgid "Missing required packages" msgstr "Paquets requis manquants" -#: templates/exceptions/import_error.html:11 +#: netbox/templates/exceptions/import_error.html:11 msgid "" "This installation of NetBox might be missing one or more required Python " "packages. These packages are listed in requirements.txt and " @@ -12543,11 +13326,11 @@ msgstr "" "Freeze
    depuis la console et comparez la sortie à la liste des paquets" " requis." -#: templates/exceptions/import_error.html:20 +#: netbox/templates/exceptions/import_error.html:20 msgid "WSGI service not restarted after upgrade" msgstr "Le service WSGI n'a pas redémarré après la mise à jour" -#: templates/exceptions/import_error.html:21 +#: netbox/templates/exceptions/import_error.html:21 msgid "" "If this installation has recently been upgraded, check that the WSGI service" " (e.g. gunicorn or uWSGI) has been restarted. This ensures that the new code" @@ -12557,7 +13340,7 @@ msgstr "" "WSGI (par exemple gunicorn ou uWSGI) a été redémarré. Cela permet de " "garantir que le nouveau code est en cours d'exécution." -#: templates/exceptions/permission_error.html:6 +#: netbox/templates/exceptions/permission_error.html:6 msgid "" "A file permission error was detected while processing this request. Common " "causes include the following:" @@ -12565,11 +13348,11 @@ msgstr "" "Une erreur d'autorisation de fichier a été détectée lors du traitement de " "cette requête. Les causes les plus courantes sont les suivantes :" -#: templates/exceptions/permission_error.html:10 +#: netbox/templates/exceptions/permission_error.html:10 msgid "Insufficient write permission to the media root" msgstr "Autorisation d'écriture insuffisante pour la racine du média" -#: templates/exceptions/permission_error.html:11 +#: netbox/templates/exceptions/permission_error.html:11 #, python-format msgid "" "The configured media root is %(media_root)s. Ensure that the " @@ -12580,7 +13363,7 @@ msgstr "" "Assurez-vous que l'utilisateur sous lequel NetBox s'exécute a accès en " "écriture à l'ensemble des répertoires de ce chemin." -#: templates/exceptions/programming_error.html:6 +#: netbox/templates/exceptions/programming_error.html:6 msgid "" "A database programming error was detected while processing this request. " "Common causes include the following:" @@ -12588,11 +13371,11 @@ msgstr "" "Une erreur de base de données a été détectée lors du traitement de cette " "requête. Les causes les plus courantes sont les suivantes :" -#: templates/exceptions/programming_error.html:10 +#: netbox/templates/exceptions/programming_error.html:10 msgid "Database migrations missing" msgstr "Migration de base de données manquante" -#: templates/exceptions/programming_error.html:11 +#: netbox/templates/exceptions/programming_error.html:11 msgid "" "When upgrading to a new NetBox release, the upgrade script must be run to " "apply any new database migrations. You can run migrations manually by " @@ -12604,11 +13387,11 @@ msgstr "" "exécutant python3 manage.py migrate à partir de la ligne de " "commande." -#: templates/exceptions/programming_error.html:18 +#: netbox/templates/exceptions/programming_error.html:18 msgid "Unsupported PostgreSQL version" msgstr "Version de PostgreSQL non prise en charge" -#: templates/exceptions/programming_error.html:19 +#: netbox/templates/exceptions/programming_error.html:19 msgid "" "Ensure that PostgreSQL version 12 or later is in use. You can check this by " "connecting to the database using NetBox's credentials and issuing a query " @@ -12619,99 +13402,102 @@ msgstr "" "des identifiants de base de données paramétrés dans NetBox et en exécutant " "la requête SELECT VERSION()." -#: templates/extras/configcontext.html:45 -#: templates/extras/configtemplate.html:37 -#: templates/extras/exporttemplate.html:51 +#: netbox/templates/extras/configcontext.html:45 +#: netbox/templates/extras/configtemplate.html:37 +#: netbox/templates/extras/exporttemplate.html:51 msgid "The data file associated with this object has been deleted" msgstr "Le fichier de données associé à cet objet a été supprimé" -#: templates/extras/configcontext.html:54 -#: templates/extras/configtemplate.html:46 -#: templates/extras/exporttemplate.html:60 +#: netbox/templates/extras/configcontext.html:54 +#: netbox/templates/extras/configtemplate.html:46 +#: netbox/templates/extras/exporttemplate.html:60 msgid "Data Synced" msgstr "Données synchronisées" -#: templates/extras/configcontext_list.html:7 -#: templates/extras/configtemplate_list.html:7 -#: templates/extras/exporttemplate_list.html:7 +#: netbox/templates/extras/configcontext_list.html:7 +#: netbox/templates/extras/configtemplate_list.html:7 +#: netbox/templates/extras/exporttemplate_list.html:7 msgid "Sync Data" msgstr "Synchroniser les données" -#: templates/extras/configtemplate.html:56 +#: netbox/templates/extras/configtemplate.html:56 msgid "Environment Parameters" msgstr "Paramètres de l'environnement" -#: templates/extras/configtemplate.html:67 -#: templates/extras/exporttemplate.html:79 +#: netbox/templates/extras/configtemplate.html:67 +#: netbox/templates/extras/exporttemplate.html:79 msgid "Template" msgstr "Modèle" -#: templates/extras/customfield.html:30 templates/extras/customlink.html:21 +#: netbox/templates/extras/customfield.html:30 +#: netbox/templates/extras/customlink.html:21 msgid "Group Name" msgstr "Nom du groupe" -#: templates/extras/customfield.html:42 +#: netbox/templates/extras/customfield.html:42 msgid "Must be Unique" msgstr "Doit être unique" -#: templates/extras/customfield.html:46 +#: netbox/templates/extras/customfield.html:46 msgid "Cloneable" msgstr "Clonable" -#: templates/extras/customfield.html:56 +#: netbox/templates/extras/customfield.html:56 msgid "Default Value" msgstr "Valeur par défaut" -#: templates/extras/customfield.html:73 +#: netbox/templates/extras/customfield.html:73 msgid "Search Weight" msgstr "Poids de recherche" -#: templates/extras/customfield.html:83 +#: netbox/templates/extras/customfield.html:83 msgid "Filter Logic" msgstr "Logique de recherche du filtre" -#: templates/extras/customfield.html:87 +#: netbox/templates/extras/customfield.html:87 msgid "Display Weight" msgstr "Poids de l'écran" -#: templates/extras/customfield.html:91 +#: netbox/templates/extras/customfield.html:91 msgid "UI Visible" msgstr "Interface utilisateur visible" -#: templates/extras/customfield.html:95 +#: netbox/templates/extras/customfield.html:95 msgid "UI Editable" msgstr "Interface utilisateur modifiable" -#: templates/extras/customfield.html:115 +#: netbox/templates/extras/customfield.html:115 msgid "Validation Rules" msgstr "Règles de validation" -#: templates/extras/customfield.html:126 +#: netbox/templates/extras/customfield.html:126 msgid "Regular Expression" msgstr "Expression rationnelle" -#: templates/extras/customlink.html:29 +#: netbox/templates/extras/customlink.html:29 msgid "Button Class" msgstr "Classe de boutons" -#: templates/extras/customlink.html:39 templates/extras/exporttemplate.html:66 -#: templates/extras/savedfilter.html:39 +#: netbox/templates/extras/customlink.html:39 +#: netbox/templates/extras/exporttemplate.html:66 +#: netbox/templates/extras/savedfilter.html:39 msgid "Assigned Models" msgstr "Modèles associés" -#: templates/extras/customlink.html:52 +#: netbox/templates/extras/customlink.html:52 msgid "Link Text" msgstr "Texte du lien" -#: templates/extras/customlink.html:58 +#: netbox/templates/extras/customlink.html:58 msgid "Link URL" msgstr "URL du lien" -#: templates/extras/dashboard/reset.html:4 templates/home.html:66 +#: netbox/templates/extras/dashboard/reset.html:4 +#: netbox/templates/home.html:66 msgid "Reset Dashboard" msgstr "Réinitialisation du tableau de bord" -#: templates/extras/dashboard/reset.html:8 +#: netbox/templates/extras/dashboard/reset.html:8 msgid "" "This will remove all configured widgets and restore the " "default dashboard configuration." @@ -12719,7 +13505,7 @@ msgstr "" "Cela supprimera tous les widgets configurés et rétablira la" " configuration par défaut du tableau de bord." -#: templates/extras/dashboard/reset.html:13 +#: netbox/templates/extras/dashboard/reset.html:13 msgid "" "This change affects only your dashboard, and will not impact other " "users." @@ -12727,154 +13513,161 @@ msgstr "" "Ce changement concerne uniquement votre tableau de bord, et n'aura " "aucun impact sur les autres utilisateurs." -#: templates/extras/dashboard/widget.html:21 +#: netbox/templates/extras/dashboard/widget.html:21 msgid "widget configuration" msgstr "configuration du widget" -#: templates/extras/dashboard/widget.html:36 +#: netbox/templates/extras/dashboard/widget.html:36 msgid "Close widget" msgstr "Fermer le widget" -#: templates/extras/dashboard/widget_add.html:7 +#: netbox/templates/extras/dashboard/widget_add.html:7 msgid "Add a Widget" msgstr "Ajouter un widget" -#: templates/extras/dashboard/widgets/bookmarks.html:14 +#: netbox/templates/extras/dashboard/widgets/bookmarks.html:14 msgid "No bookmarks have been added yet." msgstr "Aucun favori n'a encore été ajouté." -#: templates/extras/dashboard/widgets/objectcounts.html:10 +#: netbox/templates/extras/dashboard/widgets/objectcounts.html:10 msgid "No permission" msgstr "Aucun droit" -#: templates/extras/dashboard/widgets/objectlist.html:6 +#: netbox/templates/extras/dashboard/widgets/objectlist.html:6 msgid "No permission to view this content" msgstr "Aucun droit de voir ce contenu" -#: templates/extras/dashboard/widgets/objectlist.html:10 +#: netbox/templates/extras/dashboard/widgets/objectlist.html:10 msgid "Unable to load content. Invalid view name" msgstr "Impossible de charger le contenu. Nom de vue invalide" -#: templates/extras/dashboard/widgets/rssfeed.html:12 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:12 msgid "No content found" msgstr "Aucun contenu trouvé" -#: templates/extras/dashboard/widgets/rssfeed.html:18 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:18 msgid "There was a problem fetching the RSS feed" msgstr "Un problème s'est produit lors de la récupération du flux RSS" -#: templates/extras/dashboard/widgets/rssfeed.html:21 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:21 msgid "HTTP" msgstr "HTTP" -#: templates/extras/eventrule.html:61 +#: netbox/templates/extras/eventrule.html:61 msgid "Conditions" msgstr "Les conditions" -#: templates/extras/exporttemplate.html:23 +#: netbox/templates/extras/exporttemplate.html:23 msgid "MIME Type" msgstr "Type MIME" -#: templates/extras/exporttemplate.html:27 +#: netbox/templates/extras/exporttemplate.html:27 msgid "File Extension" msgstr "Extension de fichier" -#: templates/extras/htmx/script_result.html:10 +#: netbox/templates/extras/htmx/script_result.html:10 msgid "Scheduled for" msgstr "Planifié le" -#: templates/extras/htmx/script_result.html:15 +#: netbox/templates/extras/htmx/script_result.html:15 msgid "Duration" msgstr "Durée" -#: templates/extras/htmx/script_result.html:23 +#: netbox/templates/extras/htmx/script_result.html:23 msgid "Test Summary" msgstr "Résumé du test" -#: templates/extras/htmx/script_result.html:43 +#: netbox/templates/extras/htmx/script_result.html:43 msgid "Log" msgstr "Journal" -#: templates/extras/htmx/script_result.html:56 +#: netbox/templates/extras/htmx/script_result.html:56 msgid "Output" msgstr "sortie" -#: templates/extras/inc/result_pending.html:4 +#: netbox/templates/extras/inc/result_pending.html:4 msgid "Loading" msgstr "Chargement" -#: templates/extras/inc/result_pending.html:6 +#: netbox/templates/extras/inc/result_pending.html:6 msgid "Results pending" msgstr "Résultats en attente" -#: templates/extras/journalentry.html:15 +#: netbox/templates/extras/journalentry.html:15 msgid "Journal Entry" msgstr "Entrée de journal" -#: templates/extras/notificationgroup.html:11 +#: netbox/templates/extras/notificationgroup.html:11 msgid "Notification Group" msgstr "Groupe de notifications" -#: templates/extras/notificationgroup.html:36 -#: templates/extras/notificationgroup.html:46 -#: utilities/templates/widgets/clearable_file_input.html:12 +#: netbox/templates/extras/notificationgroup.html:36 +#: netbox/templates/extras/notificationgroup.html:46 +#: netbox/utilities/templates/widgets/clearable_file_input.html:12 msgid "None assigned" msgstr "Aucune assignée" -#: templates/extras/object_configcontext.html:19 +#: netbox/templates/extras/object_configcontext.html:19 msgid "The local config context overwrites all source contexts" msgstr "Le contexte de configuration local remplace tous les contextes source" -#: templates/extras/object_configcontext.html:25 +#: netbox/templates/extras/object_configcontext.html:25 msgid "Source Contexts" msgstr "Contextes sources" -#: templates/extras/object_journal.html:17 +#: netbox/templates/extras/object_journal.html:17 msgid "New Journal Entry" msgstr "Nouvelle entrée de journal" -#: templates/extras/report/base.html:30 +#: netbox/templates/extras/report/base.html:30 msgid "Report" msgstr "Rapport" -#: templates/extras/script.html:14 +#: netbox/templates/extras/script.html:14 msgid "You do not have permission to run scripts" msgstr "Vous n'avez pas le droit d'exécuter des scripts" -#: templates/extras/script.html:41 templates/extras/script.html:45 -#: templates/extras/script_list.html:86 +#: netbox/templates/extras/script.html:41 +#: netbox/templates/extras/script.html:45 +#: netbox/templates/extras/script_list.html:87 msgid "Run Script" msgstr "Exécuter le script" -#: templates/extras/script.html:51 templates/extras/script/source.html:10 +#: netbox/templates/extras/script.html:51 +#: netbox/templates/extras/script/source.html:10 msgid "Error loading script" msgstr "Erreur de chargement du script" -#: templates/extras/script/jobs.html:16 +#: netbox/templates/extras/script/jobs.html:16 msgid "Script no longer exists in the source file." msgstr "Le script n'existe plus dans le fichier source." -#: templates/extras/script_list.html:46 +#: netbox/templates/extras/script_list.html:47 msgid "Last Run" msgstr "Dernière exécution" -#: templates/extras/script_list.html:61 +#: netbox/templates/extras/script_list.html:62 msgid "Script is no longer present in the source file" msgstr "Le script n'est plus présent dans le fichier source" -#: templates/extras/script_list.html:74 +#: netbox/templates/extras/script_list.html:75 msgid "Never" msgstr "Jamais" -#: templates/extras/script_list.html:84 +#: netbox/templates/extras/script_list.html:85 msgid "Run Again" msgstr "Exécutez à nouveau" -#: templates/extras/script_list.html:138 +#: netbox/templates/extras/script_list.html:133 +#, python-format +msgid "Could not load scripts from module %(module)s" +msgstr "" + +#: netbox/templates/extras/script_list.html:141 msgid "No Scripts Found" msgstr "Aucun script trouvé" -#: templates/extras/script_list.html:141 +#: netbox/templates/extras/script_list.html:144 #, python-format msgid "" "Get started by creating a script from " @@ -12883,81 +13676,83 @@ msgstr "" "Pour démarrer, créer un script à " "partir d'un fichier ou d'une source de données chargé." -#: templates/extras/script_result.html:35 -#: templates/generic/object_list.html:50 templates/search.html:13 +#: netbox/templates/extras/script_result.html:35 +#: netbox/templates/generic/object_list.html:50 +#: netbox/templates/search.html:13 msgid "Results" msgstr "Résultats" -#: templates/extras/script_result.html:46 +#: netbox/templates/extras/script_result.html:46 msgid "Log threshold" msgstr "Seuil de journalisation" -#: templates/extras/script_result.html:56 +#: netbox/templates/extras/script_result.html:56 msgid "All" msgstr "Tous" -#: templates/extras/tag.html:32 +#: netbox/templates/extras/tag.html:32 msgid "Tagged Items" -msgstr "Articles taggés" +msgstr "Articles étiquetés" -#: templates/extras/tag.html:43 +#: netbox/templates/extras/tag.html:43 msgid "Allowed Object Types" msgstr "Types d'objets autorisés" -#: templates/extras/tag.html:51 +#: netbox/templates/extras/tag.html:51 msgid "Any" msgstr "N'importe lequel" -#: templates/extras/tag.html:57 +#: netbox/templates/extras/tag.html:57 msgid "Tagged Item Types" -msgstr "Types d'articles taggés" +msgstr "Types d'articles étiquetés" -#: templates/extras/tag.html:81 +#: netbox/templates/extras/tag.html:81 msgid "Tagged Objects" -msgstr "Objets taggés" +msgstr "Objets étiquetés" -#: templates/extras/webhook.html:26 +#: netbox/templates/extras/webhook.html:26 msgid "HTTP Method" msgstr "Méthode HTTP" -#: templates/extras/webhook.html:34 +#: netbox/templates/extras/webhook.html:34 msgid "HTTP Content Type" msgstr "Type de contenu HTTP" -#: templates/extras/webhook.html:47 +#: netbox/templates/extras/webhook.html:47 msgid "SSL Verification" msgstr "Vérification SSL" -#: templates/extras/webhook.html:60 +#: netbox/templates/extras/webhook.html:60 msgid "Additional Headers" msgstr "En-têtes supplémentaires" -#: templates/extras/webhook.html:70 +#: netbox/templates/extras/webhook.html:70 msgid "Body Template" msgstr "Modèle du corps du message" -#: templates/generic/bulk_add_component.html:29 +#: netbox/templates/generic/bulk_add_component.html:29 msgid "Bulk Creation" msgstr "Création en masse" -#: templates/generic/bulk_add_component.html:34 -#: templates/generic/bulk_delete.html:32 templates/generic/bulk_edit.html:33 +#: netbox/templates/generic/bulk_add_component.html:34 +#: netbox/templates/generic/bulk_delete.html:32 +#: netbox/templates/generic/bulk_edit.html:33 msgid "Selected Objects" msgstr "Objets sélectionnés" -#: templates/generic/bulk_add_component.html:58 +#: netbox/templates/generic/bulk_add_component.html:58 msgid "to Add" msgstr "à ajouter" -#: templates/generic/bulk_delete.html:27 +#: netbox/templates/generic/bulk_delete.html:27 msgid "Bulk Delete" msgstr "Suppression de masse" -#: templates/generic/bulk_delete.html:49 +#: netbox/templates/generic/bulk_delete.html:49 msgid "Confirm Bulk Deletion" msgstr "Confirmer la suppression de masse" -#: templates/generic/bulk_delete.html:50 +#: netbox/templates/generic/bulk_delete.html:50 #, python-format msgid "" "The following operation will delete %(count)s " @@ -12967,66 +13762,69 @@ msgstr "" "L'opération suivante supprimera %(count)s %(type_plural)s. " "Vérifiez attentivement les objets sélectionnés et confirmez cette action." -#: templates/generic/bulk_edit.html:21 templates/generic/object_edit.html:22 +#: netbox/templates/generic/bulk_edit.html:21 +#: netbox/templates/generic/object_edit.html:22 msgid "Editing" msgstr "Édition" -#: templates/generic/bulk_edit.html:28 +#: netbox/templates/generic/bulk_edit.html:28 msgid "Bulk Edit" msgstr "Modifier en masse" -#: templates/generic/bulk_edit.html:107 templates/generic/bulk_rename.html:66 +#: netbox/templates/generic/bulk_edit.html:107 +#: netbox/templates/generic/bulk_rename.html:66 msgid "Apply" msgstr "Appliquer" -#: templates/generic/bulk_import.html:19 +#: netbox/templates/generic/bulk_import.html:19 msgid "Bulk Import" msgstr "Importation en masse" -#: templates/generic/bulk_import.html:25 +#: netbox/templates/generic/bulk_import.html:25 msgid "Direct Import" msgstr "Importation directe" -#: templates/generic/bulk_import.html:30 +#: netbox/templates/generic/bulk_import.html:30 msgid "Upload File" msgstr "Charger un fichier" -#: templates/generic/bulk_import.html:58 templates/generic/bulk_import.html:80 -#: templates/generic/bulk_import.html:102 +#: netbox/templates/generic/bulk_import.html:58 +#: netbox/templates/generic/bulk_import.html:80 +#: netbox/templates/generic/bulk_import.html:102 msgid "Submit" msgstr "Soumettre" -#: templates/generic/bulk_import.html:113 +#: netbox/templates/generic/bulk_import.html:113 msgid "Field Options" msgstr "Options de champ" -#: templates/generic/bulk_import.html:119 +#: netbox/templates/generic/bulk_import.html:119 msgid "Accessor" msgstr "Accesseur" -#: templates/generic/bulk_import.html:148 +#: netbox/templates/generic/bulk_import.html:148 msgid "choices" msgstr "choix" -#: templates/generic/bulk_import.html:161 +#: netbox/templates/generic/bulk_import.html:161 msgid "Import Value" msgstr "Valeur d'importation" -#: templates/generic/bulk_import.html:181 +#: netbox/templates/generic/bulk_import.html:181 msgid "Format: YYYY-MM-DD" msgstr "Format : AAAA-MM-JJ" -#: templates/generic/bulk_import.html:183 +#: netbox/templates/generic/bulk_import.html:183 msgid "Specify true or false" msgstr "Spécifiez vrai ou faux" -#: templates/generic/bulk_import.html:195 +#: netbox/templates/generic/bulk_import.html:195 msgid "Required fields must be specified for all objects." msgstr "" "Les champs obligatoires doivent être saisis pour tous les " "objets." -#: templates/generic/bulk_import.html:201 +#: netbox/templates/generic/bulk_import.html:201 #, python-format msgid "" "Related objects may be referenced by any unique attribute. For example, " @@ -13036,15 +13834,15 @@ msgstr "" "unique. Par exemple, %(example)s identifie une VRF par son " "\"Route Distinguisher\"." -#: templates/generic/bulk_remove.html:28 +#: netbox/templates/generic/bulk_remove.html:28 msgid "Bulk Remove" msgstr "Supprimer en masse" -#: templates/generic/bulk_remove.html:42 +#: netbox/templates/generic/bulk_remove.html:42 msgid "Confirm Bulk Removal" msgstr "Confirmer la suppression de masse" -#: templates/generic/bulk_remove.html:43 +#: netbox/templates/generic/bulk_remove.html:43 #, python-format msgid "" "The following operation will remove %(count)s %(obj_type_plural)s from " @@ -13055,72 +13853,72 @@ msgstr "" "%(parent_obj)s. Veuillez vérifier attentivement les %(obj_type_plural)s à " "supprimer et à confirmer ci-dessous." -#: templates/generic/bulk_remove.html:64 +#: netbox/templates/generic/bulk_remove.html:64 #, python-format msgid "Remove these %(count)s %(obj_type_plural)s" msgstr "Supprimez-les %(count)s %(obj_type_plural)s" -#: templates/generic/bulk_rename.html:20 +#: netbox/templates/generic/bulk_rename.html:20 msgid "Renaming" msgstr "Renommer" -#: templates/generic/bulk_rename.html:27 +#: netbox/templates/generic/bulk_rename.html:27 msgid "Bulk Rename" msgstr "Renommer en masse" -#: templates/generic/bulk_rename.html:39 +#: netbox/templates/generic/bulk_rename.html:39 msgid "Current Name" msgstr "Nom actuel" -#: templates/generic/bulk_rename.html:40 +#: netbox/templates/generic/bulk_rename.html:40 msgid "New Name" msgstr "Nouveau nom" -#: templates/generic/bulk_rename.html:64 -#: utilities/templates/widgets/markdown_input.html:11 +#: netbox/templates/generic/bulk_rename.html:64 +#: netbox/utilities/templates/widgets/markdown_input.html:11 msgid "Preview" msgstr "Aperçu" -#: templates/generic/confirmation_form.html:16 +#: netbox/templates/generic/confirmation_form.html:16 msgid "Are you sure" msgstr "Êtes-vous sûr ?" -#: templates/generic/confirmation_form.html:20 +#: netbox/templates/generic/confirmation_form.html:20 msgid "Confirm" msgstr "Confirmer" -#: templates/generic/object_children.html:47 -#: utilities/templates/buttons/bulk_edit.html:4 +#: netbox/templates/generic/object_children.html:47 +#: netbox/utilities/templates/buttons/bulk_edit.html:4 msgid "Edit Selected" msgstr "Modifier la sélection" -#: templates/generic/object_children.html:61 -#: utilities/templates/buttons/bulk_delete.html:4 +#: netbox/templates/generic/object_children.html:61 +#: netbox/utilities/templates/buttons/bulk_delete.html:4 msgid "Delete Selected" msgstr "Supprimer la sélection" -#: templates/generic/object_edit.html:24 +#: netbox/templates/generic/object_edit.html:24 #, python-format msgid "Add a new %(object_type)s" msgstr "Ajouter un nouveau %(object_type)s" -#: templates/generic/object_edit.html:35 +#: netbox/templates/generic/object_edit.html:35 msgid "View model documentation" msgstr "Afficher la documentation du modèle" -#: templates/generic/object_edit.html:36 +#: netbox/templates/generic/object_edit.html:36 msgid "Help" msgstr "Aide" -#: templates/generic/object_edit.html:83 +#: netbox/templates/generic/object_edit.html:83 msgid "Create & Add Another" msgstr "Créer et en ajouter un autre" -#: templates/generic/object_list.html:57 +#: netbox/templates/generic/object_list.html:57 msgid "Filters" msgstr "Filtres" -#: templates/generic/object_list.html:88 +#: netbox/templates/generic/object_list.html:88 #, python-format msgid "" "Select all %(count)s " @@ -13130,40 +13928,40 @@ msgstr "" "count\">%(count)s %(object_type_plural)squi correspondent à" " la requête" -#: templates/home.html:15 +#: netbox/templates/home.html:15 msgid "New Release Available" msgstr "Nouvelle version disponible" -#: templates/home.html:16 +#: netbox/templates/home.html:16 msgid "is available" msgstr "est disponible" -#: templates/home.html:18 +#: netbox/templates/home.html:18 msgctxt "Document title" msgid "Upgrade Instructions" msgstr "Instructions de mise à jour" -#: templates/home.html:40 +#: netbox/templates/home.html:40 msgid "Unlock Dashboard" msgstr "Déverrouiller le tableau de bord" -#: templates/home.html:49 +#: netbox/templates/home.html:49 msgid "Lock Dashboard" msgstr "Tableau de bord verrouillé" -#: templates/home.html:60 +#: netbox/templates/home.html:60 msgid "Add Widget" msgstr "Ajouter un widget" -#: templates/home.html:63 +#: netbox/templates/home.html:63 msgid "Save Layout" msgstr "Enregistrer la mise en page" -#: templates/htmx/delete_form.html:7 +#: netbox/templates/htmx/delete_form.html:7 msgid "Confirm Deletion" msgstr "Confirmer la suppression" -#: templates/htmx/delete_form.html:11 +#: netbox/templates/htmx/delete_form.html:11 #, python-format msgid "" "Are you sure you want to delete " @@ -13172,40 +13970,40 @@ msgstr "" "Es-tu sûr de vouloir supprimer " "%(object_type)s %(object)s?" -#: templates/htmx/delete_form.html:17 +#: netbox/templates/htmx/delete_form.html:17 msgid "The following objects will be deleted as a result of this action." msgstr "Les objets suivants seront supprimés à la suite de cette action." -#: templates/htmx/notifications.html:15 +#: netbox/templates/htmx/notifications.html:15 msgid "ago" msgstr "depuis" -#: templates/htmx/notifications.html:26 +#: netbox/templates/htmx/notifications.html:26 msgid "No unread notifications" msgstr "Aucune notification non lue" -#: templates/htmx/notifications.html:31 +#: netbox/templates/htmx/notifications.html:31 msgid "All notifications" msgstr "Toutes les notifications" -#: templates/htmx/object_selector.html:5 +#: netbox/templates/htmx/object_selector.html:5 msgid "Select" msgstr "Sélectionner" -#: templates/inc/filter_list.html:43 -#: utilities/templates/helpers/table_config_form.html:39 +#: netbox/templates/inc/filter_list.html:43 +#: netbox/utilities/templates/helpers/table_config_form.html:39 msgid "Reset" msgstr "Réinitialiser" -#: templates/inc/light_toggle.html:4 +#: netbox/templates/inc/light_toggle.html:4 msgid "Enable dark mode" msgstr "Activer le mode sombre" -#: templates/inc/light_toggle.html:7 +#: netbox/templates/inc/light_toggle.html:7 msgid "Enable light mode" msgstr "Activer le mode éclairage" -#: templates/inc/missing_prerequisites.html:8 +#: netbox/templates/inc/missing_prerequisites.html:8 #, python-format msgid "" "Before you can add a %(model)s you must first create a " @@ -13214,281 +14012,283 @@ msgstr "" "Avant de pouvoir ajouter un %(model)s vous devez d'abord créer un " "%(prerequisite_model)s." -#: templates/inc/paginator.html:15 +#: netbox/templates/inc/paginator.html:15 msgid "Page selection" msgstr "Sélection de page" -#: templates/inc/paginator.html:75 +#: netbox/templates/inc/paginator.html:75 #, python-format msgid "Showing %(start)s-%(end)s of %(total)s" msgstr "Montrant %(start)s-%(end)s de %(total)s" -#: templates/inc/paginator.html:82 +#: netbox/templates/inc/paginator.html:82 msgid "Pagination options" msgstr "Options de pagination" -#: templates/inc/paginator.html:86 +#: netbox/templates/inc/paginator.html:86 msgid "Per Page" msgstr "Par page" -#: templates/inc/panels/image_attachments.html:10 +#: netbox/templates/inc/panels/image_attachments.html:10 msgid "Attach an image" msgstr "Joindre une image" -#: templates/inc/panels/related_objects.html:5 +#: netbox/templates/inc/panels/related_objects.html:5 msgid "Related Objects" msgstr "Objets associés" -#: templates/inc/panels/tags.html:11 +#: netbox/templates/inc/panels/tags.html:11 msgid "No tags assigned" msgstr "Aucune étiquette associée" -#: templates/inc/sync_warning.html:10 +#: netbox/templates/inc/sync_warning.html:10 msgid "Data is out of sync with upstream file" msgstr "Les données ne sont pas synchronisées avec le fichier en amont" -#: templates/inc/table_controls_htmx.html:7 +#: netbox/templates/inc/table_controls_htmx.html:7 msgid "Quick search" msgstr "Recherche rapide" -#: templates/inc/table_controls_htmx.html:20 +#: netbox/templates/inc/table_controls_htmx.html:20 msgid "Saved filter" msgstr "Filtre enregistré" -#: templates/inc/table_htmx.html:18 +#: netbox/templates/inc/table_htmx.html:18 msgid "Clear ordering" msgstr "Commande claire" -#: templates/inc/user_menu.html:6 +#: netbox/templates/inc/user_menu.html:6 msgid "Help center" msgstr "Centre d'aide" -#: templates/inc/user_menu.html:41 +#: netbox/templates/inc/user_menu.html:41 msgid "Django Admin" msgstr "Administrateur Django" -#: templates/inc/user_menu.html:61 +#: netbox/templates/inc/user_menu.html:61 msgid "Log Out" msgstr "Déconnexion" -#: templates/inc/user_menu.html:68 templates/login.html:38 +#: netbox/templates/inc/user_menu.html:68 netbox/templates/login.html:38 msgid "Log In" msgstr "Connexion" -#: templates/ipam/aggregate.html:14 templates/ipam/ipaddress.html:14 -#: templates/ipam/iprange.html:13 templates/ipam/prefix.html:15 +#: netbox/templates/ipam/aggregate.html:14 +#: netbox/templates/ipam/ipaddress.html:14 +#: netbox/templates/ipam/iprange.html:13 netbox/templates/ipam/prefix.html:15 msgid "Family" msgstr "Famille" -#: templates/ipam/aggregate.html:39 +#: netbox/templates/ipam/aggregate.html:39 msgid "Date Added" msgstr "Date d'ajout" -#: templates/ipam/aggregate/prefixes.html:8 -#: templates/ipam/prefix/prefixes.html:8 templates/ipam/role.html:10 +#: netbox/templates/ipam/aggregate/prefixes.html:8 +#: netbox/templates/ipam/prefix/prefixes.html:8 +#: netbox/templates/ipam/role.html:10 msgid "Add Prefix" msgstr "Ajouter un préfixe" -#: templates/ipam/asn.html:23 +#: netbox/templates/ipam/asn.html:23 msgid "AS Number" msgstr "Numéro d'AS" -#: templates/ipam/fhrpgroup.html:52 +#: netbox/templates/ipam/fhrpgroup.html:52 msgid "Authentication Type" msgstr "Type d'authentification" -#: templates/ipam/fhrpgroup.html:56 +#: netbox/templates/ipam/fhrpgroup.html:56 msgid "Authentication Key" msgstr "Clé d'authentification" -#: templates/ipam/fhrpgroup.html:69 +#: netbox/templates/ipam/fhrpgroup.html:69 msgid "Virtual IP Addresses" msgstr "Adresses IP virtuelles" -#: templates/ipam/inc/ipaddress_edit_header.html:13 +#: netbox/templates/ipam/inc/ipaddress_edit_header.html:13 msgid "Assign IP" msgstr "Associer une IP" -#: templates/ipam/inc/ipaddress_edit_header.html:19 +#: netbox/templates/ipam/inc/ipaddress_edit_header.html:19 msgid "Bulk Create" msgstr "Création en masse" -#: templates/ipam/inc/panels/fhrp_groups.html:10 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:10 msgid "Create Group" msgstr "Créer un groupe" -#: templates/ipam/inc/panels/fhrp_groups.html:25 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:25 msgid "Virtual IPs" msgstr "IP virtuelles" -#: templates/ipam/inc/toggle_available.html:7 +#: netbox/templates/ipam/inc/toggle_available.html:7 msgid "Show Assigned" msgstr "Afficher les affectations" -#: templates/ipam/inc/toggle_available.html:10 +#: netbox/templates/ipam/inc/toggle_available.html:10 msgid "Show Available" msgstr "Afficher disponible" -#: templates/ipam/inc/toggle_available.html:13 +#: netbox/templates/ipam/inc/toggle_available.html:13 msgid "Show All" msgstr "Afficher tout" -#: templates/ipam/ipaddress.html:23 templates/ipam/iprange.html:45 -#: templates/ipam/prefix.html:24 +#: netbox/templates/ipam/ipaddress.html:23 +#: netbox/templates/ipam/iprange.html:45 netbox/templates/ipam/prefix.html:24 msgid "Global" msgstr "Globale" -#: templates/ipam/ipaddress.html:85 +#: netbox/templates/ipam/ipaddress.html:85 msgid "NAT (outside)" msgstr "NAT (externe)" -#: templates/ipam/ipaddress_assign.html:8 +#: netbox/templates/ipam/ipaddress_assign.html:8 msgid "Assign an IP Address" msgstr "Attribuer une adresse IP" -#: templates/ipam/ipaddress_assign.html:22 +#: netbox/templates/ipam/ipaddress_assign.html:22 msgid "Select IP Address" msgstr "Sélectionnez l'adresse IP" -#: templates/ipam/ipaddress_assign.html:35 +#: netbox/templates/ipam/ipaddress_assign.html:35 msgid "Search Results" msgstr "Résultats de recherche" -#: templates/ipam/ipaddress_bulk_add.html:6 +#: netbox/templates/ipam/ipaddress_bulk_add.html:6 msgid "Bulk Add IP Addresses" msgstr "Ajouter des adresses IP en masse" -#: templates/ipam/iprange.html:17 +#: netbox/templates/ipam/iprange.html:17 msgid "Starting Address" msgstr "Adresse de début" -#: templates/ipam/iprange.html:21 +#: netbox/templates/ipam/iprange.html:21 msgid "Ending Address" msgstr "Adresse de fin" -#: templates/ipam/iprange.html:33 templates/ipam/prefix.html:110 +#: netbox/templates/ipam/iprange.html:33 netbox/templates/ipam/prefix.html:110 msgid "Marked fully utilized" msgstr "Marqué comme entièrement utilisé" -#: templates/ipam/prefix.html:99 +#: netbox/templates/ipam/prefix.html:99 msgid "Addressing Details" msgstr "Détails du préfixe" -#: templates/ipam/prefix.html:118 +#: netbox/templates/ipam/prefix.html:118 msgid "Child IPs" msgstr "IP enfants" -#: templates/ipam/prefix.html:126 +#: netbox/templates/ipam/prefix.html:126 msgid "Available IPs" msgstr "IP disponibles" -#: templates/ipam/prefix.html:138 +#: netbox/templates/ipam/prefix.html:138 msgid "First available IP" msgstr "Première adresse IP disponible" -#: templates/ipam/prefix.html:179 +#: netbox/templates/ipam/prefix.html:179 msgid "Prefix Details" msgstr "Détails du préfixe" -#: templates/ipam/prefix.html:185 +#: netbox/templates/ipam/prefix.html:185 msgid "Network Address" msgstr "Adresse réseau" -#: templates/ipam/prefix.html:189 +#: netbox/templates/ipam/prefix.html:189 msgid "Network Mask" msgstr "Masque de sous-réseau" -#: templates/ipam/prefix.html:193 +#: netbox/templates/ipam/prefix.html:193 msgid "Wildcard Mask" msgstr "Masque Wildcard" -#: templates/ipam/prefix.html:197 +#: netbox/templates/ipam/prefix.html:197 msgid "Broadcast Address" msgstr "Adresse de diffusion" -#: templates/ipam/prefix/ip_ranges.html:7 +#: netbox/templates/ipam/prefix/ip_ranges.html:7 msgid "Add IP Range" msgstr "Ajouter une plage d'adresses IP" -#: templates/ipam/prefix_list.html:7 +#: netbox/templates/ipam/prefix_list.html:7 msgid "Hide Depth Indicators" msgstr "Masquer les indicateurs de profondeur" -#: templates/ipam/prefix_list.html:11 +#: netbox/templates/ipam/prefix_list.html:11 msgid "Max Depth" msgstr "Profondeur maximale" -#: templates/ipam/prefix_list.html:28 +#: netbox/templates/ipam/prefix_list.html:28 msgid "Max Length" msgstr "Longueur maximale" -#: templates/ipam/rir.html:10 +#: netbox/templates/ipam/rir.html:10 msgid "Add Aggregate" msgstr "Ajouter un agrégat" -#: templates/ipam/routetarget.html:38 +#: netbox/templates/ipam/routetarget.html:38 msgid "Importing VRFs" msgstr "Importer des VRF" -#: templates/ipam/routetarget.html:44 +#: netbox/templates/ipam/routetarget.html:44 msgid "Exporting VRFs" msgstr "Exporter des VRF" -#: templates/ipam/routetarget.html:52 +#: netbox/templates/ipam/routetarget.html:52 msgid "Importing L2VPNs" msgstr "Importer des L2VPN" -#: templates/ipam/routetarget.html:58 +#: netbox/templates/ipam/routetarget.html:58 msgid "Exporting L2VPNs" msgstr "Exporter des L2VPN" -#: templates/ipam/vlan.html:88 +#: netbox/templates/ipam/vlan.html:88 msgid "Add a Prefix" msgstr "Ajouter un préfixe" -#: templates/ipam/vlangroup.html:18 +#: netbox/templates/ipam/vlangroup.html:18 msgid "Add VLAN" msgstr "Ajouter un VLAN" -#: templates/ipam/vrf.html:16 +#: netbox/templates/ipam/vrf.html:16 msgid "Route Distinguisher" msgstr "Route Distinguisher" -#: templates/ipam/vrf.html:29 +#: netbox/templates/ipam/vrf.html:29 msgid "Unique IP Space" msgstr "Espace IP unique" -#: templates/login.html:29 -#: utilities/templates/form_helpers/render_errors.html:7 +#: netbox/templates/login.html:29 +#: netbox/utilities/templates/form_helpers/render_errors.html:7 msgid "Errors" msgstr "Erreurs" -#: templates/login.html:69 +#: netbox/templates/login.html:69 msgid "Sign In" msgstr "Connexion" -#: templates/login.html:77 +#: netbox/templates/login.html:77 msgctxt "Denotes an alternative option" msgid "Or" msgstr "Ou" -#: templates/media_failure.html:7 +#: netbox/templates/media_failure.html:7 msgid "Static Media Failure - NetBox" msgstr "Erreur d'accès aux fichiers statiques - NetBox" -#: templates/media_failure.html:21 +#: netbox/templates/media_failure.html:21 msgid "Static Media Failure" msgstr "Erreur d'accès aux fichiers statiques" -#: templates/media_failure.html:23 +#: netbox/templates/media_failure.html:23 msgid "The following static media file failed to load" msgstr "Le fichier statique suivant n'a pas pu être chargé" -#: templates/media_failure.html:26 +#: netbox/templates/media_failure.html:26 msgid "Check the following" msgstr "Vérifiez les points suivants" -#: templates/media_failure.html:29 +#: netbox/templates/media_failure.html:29 msgid "" "manage.py collectstatic was run during the most recent upgrade." " This installs the most recent iteration of each static file into the static" @@ -13498,7 +14298,7 @@ msgstr "" "à jour. Cela installe la version la plus récente de chaque fichier statique " "dans le repertoire STATIC_ROOT." -#: templates/media_failure.html:35 +#: netbox/templates/media_failure.html:35 #, python-format msgid "" "The HTTP service (e.g. nginx or Apache) is configured to serve files from " @@ -13510,7 +14310,7 @@ msgstr "" "Reportez-vous à la documentation d'installation" " pour de plus amples informations." -#: templates/media_failure.html:47 +#: netbox/templates/media_failure.html:47 #, python-format msgid "" "The file %(filename)s exists in the static root directory and " @@ -13519,547 +14319,570 @@ msgstr "" "Le dossier %(filename)s existe dans le répertoire racine " "statique et est lisible par le serveur HTTP." -#: templates/media_failure.html:55 +#: netbox/templates/media_failure.html:55 #, python-format msgid "Click here to attempt loading NetBox again." msgstr "" "Cliquez ici pour essayer de recharger NetBox." -#: templates/tenancy/contact.html:18 tenancy/filtersets.py:147 -#: tenancy/forms/bulk_edit.py:137 tenancy/forms/filtersets.py:102 -#: tenancy/forms/forms.py:56 tenancy/forms/model_forms.py:106 -#: tenancy/forms/model_forms.py:130 tenancy/tables/contacts.py:98 +#: netbox/templates/tenancy/contact.html:18 netbox/tenancy/filtersets.py: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/model_forms.py:130 +#: netbox/tenancy/tables/contacts.py:98 msgid "Contact" msgstr "Contacter" -#: templates/tenancy/contact.html:29 tenancy/forms/bulk_edit.py:99 +#: netbox/templates/tenancy/contact.html:29 +#: netbox/tenancy/forms/bulk_edit.py:99 msgid "Title" msgstr "Titre" -#: templates/tenancy/contact.html:33 tenancy/forms/bulk_edit.py:104 -#: tenancy/tables/contacts.py:64 +#: netbox/templates/tenancy/contact.html:33 +#: netbox/tenancy/forms/bulk_edit.py:104 netbox/tenancy/tables/contacts.py:64 msgid "Phone" msgstr "Téléphone" -#: templates/tenancy/contactgroup.html:18 tenancy/forms/forms.py:66 -#: tenancy/forms/model_forms.py:75 +#: netbox/templates/tenancy/contactgroup.html:18 +#: netbox/tenancy/forms/forms.py:66 netbox/tenancy/forms/model_forms.py:75 msgid "Contact Group" msgstr "Groupe de contact" -#: templates/tenancy/contactgroup.html:50 +#: netbox/templates/tenancy/contactgroup.html:50 msgid "Add Contact Group" msgstr "Ajouter un groupe de contacts" -#: templates/tenancy/contactrole.html:15 tenancy/filtersets.py:152 -#: tenancy/forms/forms.py:61 tenancy/forms/model_forms.py:87 +#: netbox/templates/tenancy/contactrole.html:15 +#: netbox/tenancy/filtersets.py:152 netbox/tenancy/forms/forms.py:61 +#: netbox/tenancy/forms/model_forms.py:87 msgid "Contact Role" msgstr "Rôle du contact" -#: templates/tenancy/object_contacts.html:9 +#: netbox/templates/tenancy/object_contacts.html:9 msgid "Add a contact" msgstr "Ajouter un contact" -#: templates/tenancy/tenantgroup.html:17 +#: netbox/templates/tenancy/tenantgroup.html:17 msgid "Add Tenant" msgstr "Ajouter un locataire" -#: templates/tenancy/tenantgroup.html:26 tenancy/forms/model_forms.py:32 -#: tenancy/tables/columns.py:51 tenancy/tables/columns.py:61 +#: netbox/templates/tenancy/tenantgroup.html:26 +#: netbox/tenancy/forms/model_forms.py:32 netbox/tenancy/tables/columns.py:51 +#: netbox/tenancy/tables/columns.py:61 msgid "Tenant Group" msgstr "Groupe de locataires" -#: templates/tenancy/tenantgroup.html:59 +#: netbox/templates/tenancy/tenantgroup.html:59 msgid "Add Tenant Group" msgstr "Ajouter un groupe de locataires" -#: templates/users/group.html:39 templates/users/user.html:63 +#: netbox/templates/users/group.html:39 netbox/templates/users/user.html:63 msgid "Assigned Permissions" msgstr "Permissions attribuées" -#: templates/users/objectpermission.html:6 -#: templates/users/objectpermission.html:14 users/forms/filtersets.py:66 +#: netbox/templates/users/objectpermission.html:6 +#: netbox/templates/users/objectpermission.html:14 +#: netbox/users/forms/filtersets.py:66 msgid "Permission" msgstr "Autorisation" -#: templates/users/objectpermission.html:34 +#: netbox/templates/users/objectpermission.html:34 msgid "View" msgstr "Afficher" -#: templates/users/objectpermission.html:52 users/forms/model_forms.py:315 +#: netbox/templates/users/objectpermission.html:52 +#: netbox/users/forms/model_forms.py:315 msgid "Constraints" msgstr "Contraintes" -#: templates/users/objectpermission.html:72 +#: netbox/templates/users/objectpermission.html:72 msgid "Assigned Users" msgstr "Utilisateurs associés" -#: templates/virtualization/cluster.html:52 +#: netbox/templates/virtualization/cluster.html:52 msgid "Allocated Resources" msgstr "Ressources allouées" -#: templates/virtualization/cluster.html:55 -#: templates/virtualization/virtualmachine.html:125 +#: netbox/templates/virtualization/cluster.html:55 +#: netbox/templates/virtualization/virtualmachine.html:125 msgid "Virtual CPUs" msgstr "Processeurs virtuels" -#: templates/virtualization/cluster.html:59 -#: templates/virtualization/virtualmachine.html:129 +#: netbox/templates/virtualization/cluster.html:59 +#: netbox/templates/virtualization/virtualmachine.html:129 msgid "Memory" msgstr "Mémoire" -#: templates/virtualization/cluster.html:69 -#: templates/virtualization/virtualmachine.html:140 +#: netbox/templates/virtualization/cluster.html:69 +#: netbox/templates/virtualization/virtualmachine.html:140 msgid "Disk Space" msgstr "Espace disque" -#: templates/virtualization/cluster/base.html:18 +#: netbox/templates/virtualization/cluster/base.html:18 msgid "Add Virtual Machine" msgstr "Ajouter une machine virtuelle" -#: templates/virtualization/cluster/base.html:24 +#: netbox/templates/virtualization/cluster/base.html:24 msgid "Assign Device" msgstr "Attribuer un appareil" -#: templates/virtualization/cluster/devices.html:10 +#: netbox/templates/virtualization/cluster/devices.html:10 msgid "Remove Selected" msgstr "Supprimer la sélection" -#: templates/virtualization/cluster_add_devices.html:9 +#: netbox/templates/virtualization/cluster_add_devices.html:9 #, python-format msgid "Add Device to Cluster %(cluster)s" msgstr "Ajouter un appareil au cluster %(cluster)s" -#: templates/virtualization/cluster_add_devices.html:23 +#: netbox/templates/virtualization/cluster_add_devices.html:23 msgid "Device Selection" msgstr "Sélection de l'appareil" -#: templates/virtualization/cluster_add_devices.html:31 +#: netbox/templates/virtualization/cluster_add_devices.html:31 msgid "Add Devices" msgstr "Ajouter des appareils" -#: templates/virtualization/clustergroup.html:10 -#: templates/virtualization/clustertype.html:10 +#: netbox/templates/virtualization/clustergroup.html:10 +#: netbox/templates/virtualization/clustertype.html:10 msgid "Add Cluster" msgstr "Ajouter un cluster" -#: templates/virtualization/clustergroup.html:19 -#: virtualization/forms/model_forms.py:50 +#: netbox/templates/virtualization/clustergroup.html:19 +#: netbox/virtualization/forms/model_forms.py:50 msgid "Cluster Group" msgstr "Groupe Cluster" -#: templates/virtualization/clustertype.html:19 -#: templates/virtualization/virtualmachine.html:110 -#: virtualization/forms/model_forms.py:36 +#: netbox/templates/virtualization/clustertype.html:19 +#: netbox/templates/virtualization/virtualmachine.html:110 +#: netbox/virtualization/forms/model_forms.py:36 msgid "Cluster Type" msgstr "Type de cluster" -#: templates/virtualization/virtualdisk.html:18 +#: netbox/templates/virtualization/virtualdisk.html:18 msgid "Virtual Disk" msgstr "Disque virtuel" -#: templates/virtualization/virtualmachine.html:122 -#: virtualization/forms/bulk_edit.py:190 -#: virtualization/forms/model_forms.py:224 +#: netbox/templates/virtualization/virtualmachine.html:122 +#: netbox/virtualization/forms/bulk_edit.py:190 +#: netbox/virtualization/forms/model_forms.py:224 msgid "Resources" msgstr "Ressources" -#: templates/virtualization/virtualmachine.html:178 +#: netbox/templates/virtualization/virtualmachine.html:178 msgid "Add Virtual Disk" msgstr "Ajouter un disque virtuel" -#: templates/vpn/ikepolicy.html:10 templates/vpn/ipsecprofile.html:33 -#: vpn/tables/crypto.py:166 +#: 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" msgstr "Politique IKE" -#: templates/vpn/ikepolicy.html:21 +#: netbox/templates/vpn/ikepolicy.html:21 msgid "IKE Version" msgstr "Version IKE" -#: templates/vpn/ikepolicy.html:29 +#: netbox/templates/vpn/ikepolicy.html:29 msgid "Pre-Shared Key" msgstr "Clé pré-partagée" -#: templates/vpn/ikepolicy.html:33 -#: templates/wireless/inc/authentication_attrs.html:20 +#: netbox/templates/vpn/ikepolicy.html:33 +#: netbox/templates/wireless/inc/authentication_attrs.html:20 msgid "Show Secret" msgstr "Afficher le secret" -#: templates/vpn/ikepolicy.html:57 templates/vpn/ipsecpolicy.html:45 -#: templates/vpn/ipsecprofile.html:52 templates/vpn/ipsecprofile.html:77 -#: vpn/forms/model_forms.py:316 vpn/forms/model_forms.py:352 -#: vpn/tables/crypto.py:68 vpn/tables/crypto.py:134 +#: netbox/templates/vpn/ikepolicy.html:57 +#: netbox/templates/vpn/ipsecpolicy.html:45 +#: netbox/templates/vpn/ipsecprofile.html:52 +#: netbox/templates/vpn/ipsecprofile.html:77 +#: netbox/vpn/forms/model_forms.py:316 netbox/vpn/forms/model_forms.py:352 +#: netbox/vpn/tables/crypto.py:68 netbox/vpn/tables/crypto.py:134 msgid "Proposals" msgstr "Propositions" -#: templates/vpn/ikeproposal.html:10 +#: netbox/templates/vpn/ikeproposal.html:10 msgid "IKE Proposal" msgstr "Proposition IKE" -#: templates/vpn/ikeproposal.html:21 vpn/forms/bulk_edit.py:97 -#: vpn/forms/bulk_import.py:145 vpn/forms/filtersets.py:101 +#: netbox/templates/vpn/ikeproposal.html:21 netbox/vpn/forms/bulk_edit.py:97 +#: netbox/vpn/forms/bulk_import.py:145 netbox/vpn/forms/filtersets.py:101 msgid "Authentication method" msgstr "Méthode d'authentification" -#: templates/vpn/ikeproposal.html:25 templates/vpn/ipsecproposal.html:21 -#: vpn/forms/bulk_edit.py:102 vpn/forms/bulk_edit.py:172 -#: vpn/forms/bulk_import.py:149 vpn/forms/bulk_import.py:195 -#: vpn/forms/filtersets.py:106 vpn/forms/filtersets.py:154 +#: netbox/templates/vpn/ikeproposal.html:25 +#: netbox/templates/vpn/ipsecproposal.html:21 +#: netbox/vpn/forms/bulk_edit.py:102 netbox/vpn/forms/bulk_edit.py:172 +#: netbox/vpn/forms/bulk_import.py:149 netbox/vpn/forms/bulk_import.py:195 +#: netbox/vpn/forms/filtersets.py:106 netbox/vpn/forms/filtersets.py:154 msgid "Encryption algorithm" msgstr "Algorithme de chiffrement" -#: templates/vpn/ikeproposal.html:29 templates/vpn/ipsecproposal.html:25 -#: vpn/forms/bulk_edit.py:107 vpn/forms/bulk_edit.py:177 -#: vpn/forms/bulk_import.py:153 vpn/forms/bulk_import.py:200 -#: vpn/forms/filtersets.py:111 vpn/forms/filtersets.py:159 +#: netbox/templates/vpn/ikeproposal.html:29 +#: netbox/templates/vpn/ipsecproposal.html:25 +#: netbox/vpn/forms/bulk_edit.py:107 netbox/vpn/forms/bulk_edit.py:177 +#: netbox/vpn/forms/bulk_import.py:153 netbox/vpn/forms/bulk_import.py:200 +#: netbox/vpn/forms/filtersets.py:111 netbox/vpn/forms/filtersets.py:159 msgid "Authentication algorithm" msgstr "Algorithme d'authentification" -#: templates/vpn/ikeproposal.html:33 +#: netbox/templates/vpn/ikeproposal.html:33 msgid "DH group" msgstr "groupe DH" -#: templates/vpn/ikeproposal.html:37 templates/vpn/ipsecproposal.html:29 -#: vpn/forms/bulk_edit.py:182 vpn/models/crypto.py:146 +#: netbox/templates/vpn/ikeproposal.html:37 +#: netbox/templates/vpn/ipsecproposal.html:29 +#: netbox/vpn/forms/bulk_edit.py:182 netbox/vpn/models/crypto.py:146 msgid "SA lifetime (seconds)" msgstr "Durée de vie de l'association de sécurité (secondes)" -#: templates/vpn/ipsecpolicy.html:10 templates/vpn/ipsecprofile.html:66 -#: vpn/tables/crypto.py:170 +#: netbox/templates/vpn/ipsecpolicy.html:10 +#: netbox/templates/vpn/ipsecprofile.html:66 netbox/vpn/tables/crypto.py:170 msgid "IPSec Policy" msgstr "Politique IPSec" -#: templates/vpn/ipsecpolicy.html:21 vpn/forms/bulk_edit.py:210 -#: vpn/models/crypto.py:193 +#: netbox/templates/vpn/ipsecpolicy.html:21 netbox/vpn/forms/bulk_edit.py:210 +#: netbox/vpn/models/crypto.py:193 msgid "PFS group" msgstr "groupe PFS" -#: templates/vpn/ipsecprofile.html:10 vpn/forms/model_forms.py:54 +#: netbox/templates/vpn/ipsecprofile.html:10 +#: netbox/vpn/forms/model_forms.py:54 msgid "IPSec Profile" msgstr "Profil IPSec" -#: templates/vpn/ipsecprofile.html:89 vpn/tables/crypto.py:137 +#: netbox/templates/vpn/ipsecprofile.html:89 netbox/vpn/tables/crypto.py:137 msgid "PFS Group" msgstr "Groupe PFS" -#: templates/vpn/ipsecproposal.html:10 +#: netbox/templates/vpn/ipsecproposal.html:10 msgid "IPSec Proposal" msgstr "Proposition IPSec" -#: templates/vpn/ipsecproposal.html:33 vpn/forms/bulk_edit.py:186 -#: vpn/models/crypto.py:152 +#: netbox/templates/vpn/ipsecproposal.html:33 +#: netbox/vpn/forms/bulk_edit.py:186 netbox/vpn/models/crypto.py:152 msgid "SA lifetime (KB)" msgstr "Durée de vie de l'association de sécurité (Ko)" -#: templates/vpn/l2vpn.html:11 templates/vpn/l2vpntermination.html:9 +#: netbox/templates/vpn/l2vpn.html:11 +#: netbox/templates/vpn/l2vpntermination.html:9 msgid "L2VPN Attributes" msgstr "Attributs L2VPN" -#: templates/vpn/l2vpn.html:60 templates/vpn/tunnel.html:76 +#: netbox/templates/vpn/l2vpn.html:60 netbox/templates/vpn/tunnel.html:76 msgid "Add a Termination" msgstr "Ajouter une terminaison" -#: templates/vpn/tunnel.html:9 +#: netbox/templates/vpn/tunnel.html:9 msgid "Add Termination" msgstr "Ajouter une terminaison" -#: templates/vpn/tunnel.html:37 vpn/forms/bulk_edit.py:49 -#: vpn/forms/bulk_import.py:48 vpn/forms/filtersets.py:57 +#: netbox/templates/vpn/tunnel.html:37 netbox/vpn/forms/bulk_edit.py:49 +#: netbox/vpn/forms/bulk_import.py:48 netbox/vpn/forms/filtersets.py:57 msgid "Encapsulation" msgstr "Encapsulation" -#: templates/vpn/tunnel.html:41 vpn/forms/bulk_edit.py:55 -#: vpn/forms/bulk_import.py:53 vpn/forms/filtersets.py:64 -#: vpn/models/crypto.py:250 vpn/tables/tunnels.py:51 +#: netbox/templates/vpn/tunnel.html:41 netbox/vpn/forms/bulk_edit.py:55 +#: netbox/vpn/forms/bulk_import.py:53 netbox/vpn/forms/filtersets.py:64 +#: netbox/vpn/models/crypto.py:250 netbox/vpn/tables/tunnels.py:51 msgid "IPSec profile" msgstr "profil IPSec" -#: templates/vpn/tunnel.html:45 vpn/forms/bulk_edit.py:69 -#: vpn/forms/filtersets.py:68 +#: netbox/templates/vpn/tunnel.html:45 netbox/vpn/forms/bulk_edit.py:69 +#: netbox/vpn/forms/filtersets.py:68 msgid "Tunnel ID" msgstr "Identifiant du tunnel" -#: templates/vpn/tunnelgroup.html:14 +#: netbox/templates/vpn/tunnelgroup.html:14 msgid "Add Tunnel" msgstr "Ajouter un tunnel" -#: templates/vpn/tunnelgroup.html:23 vpn/forms/model_forms.py:36 -#: vpn/forms/model_forms.py:49 +#: netbox/templates/vpn/tunnelgroup.html:23 netbox/vpn/forms/model_forms.py:36 +#: netbox/vpn/forms/model_forms.py:49 msgid "Tunnel Group" msgstr "Groupe de Tunnel" -#: templates/vpn/tunneltermination.html:10 +#: netbox/templates/vpn/tunneltermination.html:10 msgid "Tunnel Termination" msgstr "Terminaison du tunnel" -#: templates/vpn/tunneltermination.html:35 vpn/forms/bulk_import.py:107 -#: vpn/forms/model_forms.py:102 vpn/forms/model_forms.py:138 -#: vpn/forms/model_forms.py:247 vpn/tables/tunnels.py:101 +#: netbox/templates/vpn/tunneltermination.html:35 +#: netbox/vpn/forms/bulk_import.py:107 netbox/vpn/forms/model_forms.py:102 +#: netbox/vpn/forms/model_forms.py:138 netbox/vpn/forms/model_forms.py:247 +#: netbox/vpn/tables/tunnels.py:101 msgid "Outside IP" msgstr "IP externe" -#: templates/vpn/tunneltermination.html:51 +#: netbox/templates/vpn/tunneltermination.html:51 msgid "Peer Terminations" msgstr "Terminaisons des pairs" -#: templates/wireless/inc/authentication_attrs.html:12 +#: netbox/templates/wireless/inc/authentication_attrs.html:12 msgid "Cipher" msgstr "Chiffrer" -#: templates/wireless/inc/authentication_attrs.html:16 +#: netbox/templates/wireless/inc/authentication_attrs.html:16 msgid "PSK" msgstr "PSK" -#: templates/wireless/inc/wirelesslink_interface.html:35 -#: templates/wireless/inc/wirelesslink_interface.html:45 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:35 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:45 msgctxt "Abbreviation for megahertz" msgid "MHz" msgstr "MHz" -#: templates/wireless/wirelesslan.html:57 +#: netbox/templates/wireless/wirelesslan.html:57 msgid "Attached Interfaces" msgstr "Interfaces attachées" -#: templates/wireless/wirelesslangroup.html:17 +#: netbox/templates/wireless/wirelesslangroup.html:17 msgid "Add Wireless LAN" msgstr "Ajouter un réseau sans fil" -#: templates/wireless/wirelesslangroup.html:26 -#: wireless/forms/model_forms.py:28 +#: netbox/templates/wireless/wirelesslangroup.html:26 +#: netbox/wireless/forms/model_forms.py:28 msgid "Wireless LAN Group" msgstr "Groupe LAN sans fil" -#: templates/wireless/wirelesslangroup.html:59 +#: netbox/templates/wireless/wirelesslangroup.html:59 msgid "Add Wireless LAN Group" msgstr "Ajouter un groupe de réseau local sans fil" -#: templates/wireless/wirelesslink.html:14 +#: netbox/templates/wireless/wirelesslink.html:14 msgid "Link Properties" msgstr "Propriétés du lien" -#: templates/wireless/wirelesslink.html:38 wireless/forms/bulk_edit.py:129 -#: wireless/forms/filtersets.py:102 wireless/forms/model_forms.py:165 +#: 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" -#: tenancy/filtersets.py:28 +#: netbox/tenancy/filtersets.py:28 msgid "Parent contact group (ID)" msgstr "Groupe de contact pour les parents (ID)" -#: tenancy/filtersets.py:34 +#: netbox/tenancy/filtersets.py:34 msgid "Parent contact group (slug)" msgstr "Groupe de contact avec les parents (slug)" -#: tenancy/filtersets.py:40 tenancy/filtersets.py:67 tenancy/filtersets.py:110 +#: netbox/tenancy/filtersets.py:40 netbox/tenancy/filtersets.py:67 +#: netbox/tenancy/filtersets.py:110 msgid "Contact group (ID)" msgstr "Groupe de contacts (ID)" -#: tenancy/filtersets.py:47 tenancy/filtersets.py:74 tenancy/filtersets.py:117 +#: netbox/tenancy/filtersets.py:47 netbox/tenancy/filtersets.py:74 +#: netbox/tenancy/filtersets.py:117 msgid "Contact group (slug)" msgstr "Groupe de contact (slug)" -#: tenancy/filtersets.py:104 +#: netbox/tenancy/filtersets.py:104 msgid "Contact (ID)" msgstr "Contact (ID)" -#: tenancy/filtersets.py:121 +#: netbox/tenancy/filtersets.py:121 msgid "Contact role (ID)" msgstr "Rôle du contact (ID)" -#: tenancy/filtersets.py:127 +#: netbox/tenancy/filtersets.py:127 msgid "Contact role (slug)" msgstr "Rôle de contact (slug)" -#: tenancy/filtersets.py:158 +#: netbox/tenancy/filtersets.py:158 msgid "Contact group" msgstr "Groupe de contact" -#: tenancy/filtersets.py:169 +#: netbox/tenancy/filtersets.py:169 msgid "Parent tenant group (ID)" msgstr "Groupe de parents locataires (ID)" -#: tenancy/filtersets.py:175 +#: netbox/tenancy/filtersets.py:175 msgid "Parent tenant group (slug)" msgstr "Groupe de parents locataires (slug)" -#: tenancy/filtersets.py:181 tenancy/filtersets.py:201 +#: netbox/tenancy/filtersets.py:181 netbox/tenancy/filtersets.py:201 msgid "Tenant group (ID)" msgstr "Groupe de locataires (ID)" -#: tenancy/filtersets.py:234 +#: netbox/tenancy/filtersets.py:234 msgid "Tenant Group (ID)" msgstr "Groupe de locataires (ID)" -#: tenancy/filtersets.py:241 +#: netbox/tenancy/filtersets.py:241 msgid "Tenant Group (slug)" msgstr "Groupe de locataires (slug)" -#: tenancy/forms/bulk_edit.py:66 +#: netbox/tenancy/forms/bulk_edit.py:66 msgid "Desciption" msgstr "Description" -#: tenancy/forms/bulk_import.py:101 +#: netbox/tenancy/forms/bulk_import.py:101 msgid "Assigned contact" msgstr "Contact associé" -#: tenancy/models/contacts.py:32 +#: netbox/tenancy/models/contacts.py:32 msgid "contact group" msgstr "groupe de contacts" -#: tenancy/models/contacts.py:33 +#: netbox/tenancy/models/contacts.py:33 msgid "contact groups" msgstr "groupes de contacts" -#: tenancy/models/contacts.py:48 +#: netbox/tenancy/models/contacts.py:48 msgid "contact role" msgstr "rôle du contact" -#: tenancy/models/contacts.py:49 +#: netbox/tenancy/models/contacts.py:49 msgid "contact roles" msgstr "rôles du contact" -#: tenancy/models/contacts.py:68 +#: netbox/tenancy/models/contacts.py:68 msgid "title" msgstr "titre" -#: tenancy/models/contacts.py:73 +#: netbox/tenancy/models/contacts.py:73 msgid "phone" msgstr "téléphone" -#: tenancy/models/contacts.py:78 +#: netbox/tenancy/models/contacts.py:78 msgid "email" msgstr "courriel" -#: tenancy/models/contacts.py:87 +#: netbox/tenancy/models/contacts.py:87 msgid "link" msgstr "lien" -#: tenancy/models/contacts.py:103 +#: netbox/tenancy/models/contacts.py:103 msgid "contact" msgstr "contacter" -#: tenancy/models/contacts.py:104 +#: netbox/tenancy/models/contacts.py:104 msgid "contacts" msgstr "contacts" -#: tenancy/models/contacts.py:153 +#: netbox/tenancy/models/contacts.py:153 msgid "contact assignment" msgstr "Associer un contact" -#: tenancy/models/contacts.py:154 +#: netbox/tenancy/models/contacts.py:154 msgid "contact assignments" msgstr "Contacts associés" -#: tenancy/models/contacts.py:170 +#: netbox/tenancy/models/contacts.py:170 #, python-brace-format msgid "Contacts cannot be assigned to this object type ({type})." msgstr "Les contacts ne peuvent pas être affectés à ce type d'objet ({type})." -#: tenancy/models/tenants.py:32 +#: netbox/tenancy/models/tenants.py:32 msgid "tenant group" msgstr "groupe de locataires" -#: tenancy/models/tenants.py:33 +#: netbox/tenancy/models/tenants.py:33 msgid "tenant groups" msgstr "groupes de locataires" -#: tenancy/models/tenants.py:70 +#: netbox/tenancy/models/tenants.py:70 msgid "Tenant name must be unique per group." msgstr "Le nom du locataire doit être unique par groupe." -#: tenancy/models/tenants.py:80 +#: netbox/tenancy/models/tenants.py:80 msgid "Tenant slug must be unique per group." msgstr "Le slug tenant doit être unique par groupe." -#: tenancy/models/tenants.py:88 +#: netbox/tenancy/models/tenants.py:88 msgid "tenant" msgstr "locataire" -#: tenancy/models/tenants.py:89 +#: netbox/tenancy/models/tenants.py:89 msgid "tenants" msgstr "locataires" -#: tenancy/tables/contacts.py:112 +#: netbox/tenancy/tables/contacts.py:112 msgid "Contact Title" msgstr "Titre du contact" -#: tenancy/tables/contacts.py:116 +#: netbox/tenancy/tables/contacts.py:116 msgid "Contact Phone" msgstr "Téléphone de contact" -#: tenancy/tables/contacts.py:121 +#: netbox/tenancy/tables/contacts.py:121 msgid "Contact Email" msgstr "Email de contact" -#: tenancy/tables/contacts.py:125 +#: netbox/tenancy/tables/contacts.py:125 msgid "Contact Address" msgstr "Adresse de contact" -#: tenancy/tables/contacts.py:129 +#: netbox/tenancy/tables/contacts.py:129 msgid "Contact Link" msgstr "Lien de contact" -#: tenancy/tables/contacts.py:133 +#: netbox/tenancy/tables/contacts.py:133 msgid "Contact Description" msgstr "Description du contact" -#: users/filtersets.py:33 users/filtersets.py:73 +#: netbox/users/filtersets.py:33 netbox/users/filtersets.py:73 msgid "Permission (ID)" msgstr "Permission (ID)" -#: users/filtersets.py:38 users/filtersets.py:78 +#: netbox/users/filtersets.py:38 netbox/users/filtersets.py:78 msgid "Notification group (ID)" msgstr "Groupe de notifications (ID)" -#: users/forms/bulk_edit.py:26 +#: netbox/users/forms/bulk_edit.py:26 msgid "First name" msgstr "Prénom" -#: users/forms/bulk_edit.py:31 +#: netbox/users/forms/bulk_edit.py:31 msgid "Last name" msgstr "Nom de famille" -#: users/forms/bulk_edit.py:43 +#: netbox/users/forms/bulk_edit.py:43 msgid "Staff status" msgstr "Statut équipe" -#: users/forms/bulk_edit.py:48 +#: netbox/users/forms/bulk_edit.py:48 msgid "Superuser status" msgstr "Statut de superutilisateur" -#: users/forms/bulk_import.py:41 +#: netbox/users/forms/bulk_import.py:41 msgid "If no key is provided, one will be generated automatically." msgstr "Si aucune clé n'est fournie, une clé sera générée automatiquement." -#: users/forms/filtersets.py:51 users/tables.py:42 +#: netbox/users/forms/filtersets.py:51 netbox/users/tables.py:42 msgid "Is Staff" msgstr "Est dans l'équipe" -#: users/forms/filtersets.py:58 users/tables.py:45 +#: netbox/users/forms/filtersets.py:58 netbox/users/tables.py:45 msgid "Is Superuser" msgstr "Est un superutilisateur" -#: users/forms/filtersets.py:91 users/tables.py:86 +#: netbox/users/forms/filtersets.py:91 netbox/users/tables.py:86 msgid "Can View" msgstr "Peut voir" -#: users/forms/filtersets.py:98 users/tables.py:89 +#: netbox/users/forms/filtersets.py:98 netbox/users/tables.py:89 msgid "Can Add" msgstr "Peut ajouter" -#: users/forms/filtersets.py:105 users/tables.py:92 +#: netbox/users/forms/filtersets.py:105 netbox/users/tables.py:92 msgid "Can Change" msgstr "Peut changer" -#: users/forms/filtersets.py:112 users/tables.py:95 +#: netbox/users/forms/filtersets.py:112 netbox/users/tables.py:95 msgid "Can Delete" msgstr "Peut supprimer" -#: users/forms/model_forms.py:62 +#: netbox/users/forms/model_forms.py:62 msgid "User Interface" msgstr "Interface utilisateur" -#: users/forms/model_forms.py:114 +#: netbox/users/forms/model_forms.py:114 msgid "" "Keys must be at least 40 characters in length. Be sure to record " "your key prior to submitting this form, as it may no longer be " @@ -14069,7 +14892,7 @@ msgstr "" "d'enregistrer votre clé avant de soumettre ce formulaire, car il se" " peut qu'il ne soit plus accessible une fois le jeton créé." -#: users/forms/model_forms.py:126 +#: netbox/users/forms/model_forms.py:126 msgid "" "Allowed IPv4/IPv6 networks from where the token can be used. Leave blank for" " no restrictions. Example: " @@ -14079,33 +14902,33 @@ msgstr "" "Laissez ce champ vide pour éviter toute restriction. Exemple : " "10.1.1.0/24 192.168.10,16/32 2001 : db 8:1 : /64" -#: users/forms/model_forms.py:175 +#: netbox/users/forms/model_forms.py:175 msgid "Confirm password" msgstr "Confirmer mot de passe" -#: users/forms/model_forms.py:178 +#: netbox/users/forms/model_forms.py:178 msgid "Enter the same password as before, for verification." msgstr "" "Entrez le même mot de passe que précédemment, à des fins de vérification." -#: users/forms/model_forms.py:227 +#: netbox/users/forms/model_forms.py:227 msgid "Passwords do not match! Please check your input and try again." msgstr "" "Les mots de passe ne correspondent pas ! Vérifiez votre saisie et réessayez." -#: users/forms/model_forms.py:294 +#: netbox/users/forms/model_forms.py:294 msgid "Additional actions" msgstr "Actions supplémentaires" -#: users/forms/model_forms.py:297 +#: netbox/users/forms/model_forms.py:297 msgid "Actions granted in addition to those listed above" msgstr "Actions accordées en plus de celles énumérées ci-dessus" -#: users/forms/model_forms.py:313 +#: netbox/users/forms/model_forms.py:313 msgid "Objects" msgstr "Objets" -#: users/forms/model_forms.py:325 +#: netbox/users/forms/model_forms.py:325 msgid "" "JSON expression of a queryset filter that will return only permitted " "objects. Leave null to match all objects of this type. A list of multiple " @@ -14115,82 +14938,82 @@ msgstr "" "autorisés. Laissez null pour chercher tous les objets de ce type. Une liste " "de plusieurs termes correspond à un OU logique." -#: users/forms/model_forms.py:364 +#: netbox/users/forms/model_forms.py:364 msgid "At least one action must be selected." msgstr "Au moins une action doit être sélectionnée." -#: users/forms/model_forms.py:382 +#: netbox/users/forms/model_forms.py:382 #, python-brace-format msgid "Invalid filter for {model}: {error}" msgstr "Filtre non valide pour {model}: {error}" -#: users/models/permissions.py:39 +#: netbox/users/models/permissions.py:39 msgid "The list of actions granted by this permission" msgstr "La liste des actions accordées par cette permission" -#: users/models/permissions.py:44 +#: netbox/users/models/permissions.py:44 msgid "constraints" msgstr "contraintes" -#: users/models/permissions.py:45 +#: netbox/users/models/permissions.py:45 msgid "" "Queryset filter matching the applicable objects of the selected type(s)" msgstr "" "Filtre Queryset correspondant aux objets applicables du ou des types " "sélectionnés" -#: users/models/permissions.py:52 +#: netbox/users/models/permissions.py:52 msgid "permission" msgstr "permission" -#: users/models/permissions.py:53 users/models/users.py:47 +#: netbox/users/models/permissions.py:53 netbox/users/models/users.py:47 msgid "permissions" msgstr "permissions" -#: users/models/preferences.py:29 users/models/preferences.py:30 +#: netbox/users/models/preferences.py:29 netbox/users/models/preferences.py:30 msgid "user preferences" msgstr "préférences de l'utilisateur" -#: users/models/preferences.py:97 +#: netbox/users/models/preferences.py:97 #, python-brace-format msgid "Key '{path}' is a leaf node; cannot assign new keys" msgstr "" "Clé '{path}'est un nœud feuille ; impossible d'attribuer de nouvelles clés" -#: users/models/preferences.py:109 +#: netbox/users/models/preferences.py:109 #, python-brace-format msgid "Key '{path}' is a dictionary; cannot assign a non-dictionary value" msgstr "" "La clé '{path}'est un dictionnaire ; impossible d'attribuer une valeur autre" " que dictionnaire" -#: users/models/tokens.py:36 +#: netbox/users/models/tokens.py:36 msgid "expires" msgstr "expire" -#: users/models/tokens.py:41 +#: netbox/users/models/tokens.py:41 msgid "last used" msgstr "utilisé pour la dernière fois" -#: users/models/tokens.py:46 +#: netbox/users/models/tokens.py:46 msgid "key" msgstr "clé" -#: users/models/tokens.py:52 +#: netbox/users/models/tokens.py:52 msgid "write enabled" msgstr "écriture activée" -#: users/models/tokens.py:54 +#: netbox/users/models/tokens.py:54 msgid "Permit create/update/delete operations using this key" msgstr "" "Autoriser les opérations de création/mise à jour/suppression à l'aide de " "cette clé" -#: users/models/tokens.py:65 +#: netbox/users/models/tokens.py:65 msgid "allowed IPs" msgstr "adresses IP autorisées" -#: users/models/tokens.py:67 +#: netbox/users/models/tokens.py:67 msgid "" "Allowed IPv4/IPv6 networks from where the token can be used. Leave blank for" " no restrictions. Ex: \"10.1.1.0/24, 192.168.10.16/32, 2001:DB8:1::/64\"" @@ -14199,41 +15022,41 @@ msgstr "" "Laissez ce champ vide pour éviter toute restriction. Par exemple : " "« 10.1.1.0/24, 192.168.10.16/32, 2001 : DB 8:1 : /64 »" -#: users/models/tokens.py:75 +#: netbox/users/models/tokens.py:75 msgid "token" msgstr "jeton" -#: users/models/tokens.py:76 +#: netbox/users/models/tokens.py:76 msgid "tokens" msgstr "jetons" -#: users/models/users.py:57 vpn/models/crypto.py:42 +#: netbox/users/models/users.py:57 netbox/vpn/models/crypto.py:42 msgid "group" msgstr "groupe" -#: users/models/users.py:92 +#: netbox/users/models/users.py:92 msgid "user" msgstr "utilisateur" -#: users/models/users.py:104 +#: netbox/users/models/users.py:104 msgid "A user with this username already exists." msgstr "Un utilisateur avec ce nom d'utilisateur existe déjà." -#: users/tables.py:98 +#: netbox/users/tables.py:98 msgid "Custom Actions" msgstr "Actions personnalisées" -#: utilities/api.py:153 +#: netbox/utilities/api.py:153 #, python-brace-format msgid "Related object not found using the provided attributes: {params}" msgstr "Objet associé introuvable à l'aide des attributs fournis : {params}" -#: utilities/api.py:156 +#: netbox/utilities/api.py:156 #, python-brace-format msgid "Multiple objects match the provided attributes: {params}" msgstr "Plusieurs objets correspondent aux attributs fournis : {params}" -#: utilities/api.py:168 +#: netbox/utilities/api.py:168 #, python-brace-format msgid "" "Related objects must be referenced by numeric ID or by dictionary of " @@ -14242,41 +15065,41 @@ msgstr "" "Les objets associés doivent être référencés par un identifiant numérique ou " "par un dictionnaire d'attributs. Valeur non reconnue : {value}" -#: utilities/api.py:177 +#: netbox/utilities/api.py:177 #, python-brace-format msgid "Related object not found using the provided numeric ID: {id}" msgstr "" "Objet associé introuvable à l'aide de l'identifiant numérique fourni : {id}" -#: utilities/choices.py:19 +#: netbox/utilities/choices.py:19 #, python-brace-format msgid "{name} has a key defined but CHOICES is not a list" msgstr "{name} a une clé définie mais CHOICES n'est pas une liste" -#: utilities/conversion.py:19 +#: netbox/utilities/conversion.py:19 msgid "Weight must be a positive number" msgstr "Le poids doit être un nombre positif" -#: utilities/conversion.py:21 +#: netbox/utilities/conversion.py:21 #, 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)" -#: utilities/conversion.py:32 utilities/conversion.py:62 +#: netbox/utilities/conversion.py:32 netbox/utilities/conversion.py:62 #, python-brace-format msgid "Unknown unit {unit}. Must be one of the following: {valid_units}" msgstr "Unité inconnue {unit}. Doit être l'un des suivants : {valid_units}" -#: utilities/conversion.py:45 +#: netbox/utilities/conversion.py:45 msgid "Length must be a positive number" msgstr "La longueur doit être un nombre positif" -#: utilities/conversion.py:47 +#: netbox/utilities/conversion.py:47 #, 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)" -#: utilities/error_handlers.py:31 +#: netbox/utilities/error_handlers.py:31 #, python-brace-format msgid "" "Unable to delete {objects}. {count} dependent objects were " @@ -14285,15 +15108,15 @@ msgstr "" "Impossible de supprimer {objects} car {count} objets en " "dépendent : " -#: utilities/error_handlers.py:33 +#: netbox/utilities/error_handlers.py:33 msgid "More than 50" msgstr "Plus de 50" -#: utilities/fields.py:30 +#: netbox/utilities/fields.py:30 msgid "RGB color in hexadecimal. Example: " msgstr "Couleur RVB en hexadécimal. Exemple :" -#: utilities/fields.py:159 +#: netbox/utilities/fields.py:159 #, python-format msgid "" "%s(%r) is invalid. to_model parameter to CounterCacheField must be a string " @@ -14302,7 +15125,7 @@ msgstr "" "%s(%r) n'est pas valide. Le paramètre to_model de CounterCacheField doit " "être une chaîne au format « app.model »" -#: utilities/fields.py:169 +#: netbox/utilities/fields.py:169 #, python-format msgid "" "%s(%r) is invalid. to_field parameter to CounterCacheField must be a string " @@ -14311,41 +15134,41 @@ msgstr "" "%s(%r) n'est pas valide. Le paramètre to_field de CounterCacheField doit " "être une chaîne au format « field »" -#: utilities/forms/bulk_import.py:23 +#: netbox/utilities/forms/bulk_import.py:23 msgid "Enter object data in CSV, JSON or YAML format." msgstr "Entrez les données de l'objet au format CSV, JSON ou YAML." -#: utilities/forms/bulk_import.py:36 +#: netbox/utilities/forms/bulk_import.py:36 msgid "CSV delimiter" msgstr "Délimiteur CSV" -#: utilities/forms/bulk_import.py:37 +#: netbox/utilities/forms/bulk_import.py:37 msgid "The character which delimits CSV fields. Applies only to CSV format." msgstr "" "Le caractère qui délimite les champs CSV. S'applique uniquement au format " "CSV." -#: utilities/forms/bulk_import.py:51 +#: netbox/utilities/forms/bulk_import.py:51 msgid "Form data must be empty when uploading/selecting a file." msgstr "" "Les données du formulaire doivent être vides lors du chargement/de la " "sélection d'un fichier." -#: utilities/forms/bulk_import.py:80 +#: netbox/utilities/forms/bulk_import.py:80 #, python-brace-format msgid "Unknown data format: {format}" msgstr "Format de données inconnu : {format}" -#: utilities/forms/bulk_import.py:100 +#: netbox/utilities/forms/bulk_import.py:100 msgid "Unable to detect data format. Please specify." msgstr "" "Impossible de détecter le format des données. Veuillez préciser le format." -#: utilities/forms/bulk_import.py:123 +#: netbox/utilities/forms/bulk_import.py:123 msgid "Invalid CSV delimiter" msgstr "Délimiteur CSV non valide" -#: utilities/forms/bulk_import.py:167 +#: netbox/utilities/forms/bulk_import.py:167 msgid "" "Invalid YAML data. Data must be in the form of multiple documents, or a " "single document comprising a list of dictionaries." @@ -14354,7 +15177,7 @@ msgstr "" "plusieurs documents ou d'un seul document comprenant une liste de " "dictionnaires." -#: utilities/forms/fields/array.py:20 +#: netbox/utilities/forms/fields/array.py:20 #, python-brace-format msgid "" "Invalid list ({value}). Must be numeric and ranges must be in ascending " @@ -14363,7 +15186,7 @@ msgstr "" "Liste non valide ({value}). Doit être numérique et les plages doivent être " "classées par ordre croissant." -#: utilities/forms/fields/array.py:40 +#: netbox/utilities/forms/fields/array.py:40 msgid "" "Specify one or more numeric ranges separated by commas. Example: " "1-5,20-30" @@ -14371,7 +15194,7 @@ msgstr "" "Spécifiez une ou plusieurs plages numériques séparées par des virgules. " "Exemple : 1 à 5, 20 à 30" -#: utilities/forms/fields/array.py:47 +#: netbox/utilities/forms/fields/array.py:47 #, python-brace-format msgid "" "Invalid ranges ({value}). Must be a range of integers in ascending order." @@ -14379,17 +15202,18 @@ msgstr "" "Plages non valides ({value}). Il doit s'agir d'une plage d'entiers classés " "par ordre croissant." -#: utilities/forms/fields/csv.py:44 +#: netbox/utilities/forms/fields/csv.py:44 #, python-brace-format msgid "Invalid value for a multiple choice field: {value}" msgstr "Valeur invalide pour un champ à choix multiples : {value}" -#: utilities/forms/fields/csv.py:57 utilities/forms/fields/csv.py:78 +#: netbox/utilities/forms/fields/csv.py:57 +#: netbox/utilities/forms/fields/csv.py:78 #, python-format msgid "Object not found: %(value)s" msgstr "Objet introuvable : %(value)s" -#: utilities/forms/fields/csv.py:65 +#: netbox/utilities/forms/fields/csv.py:65 #, python-brace-format msgid "" "\"{value}\" is not a unique value for this field; multiple objects were " @@ -14398,20 +15222,20 @@ msgstr "" "«{value}» n'est pas une valeur unique pour ce champ ; plusieurs objets ont " "été trouvés" -#: utilities/forms/fields/csv.py:69 +#: netbox/utilities/forms/fields/csv.py:69 #, python-brace-format msgid "\"{field_name}\" is an invalid accessor field name." msgstr "«{field_name}« est un nom de champ d'accès non valide." -#: utilities/forms/fields/csv.py:101 +#: netbox/utilities/forms/fields/csv.py:101 msgid "Object type must be specified as \".\"" msgstr "Le type d'objet doit être spécifié comme «.»" -#: utilities/forms/fields/csv.py:105 +#: netbox/utilities/forms/fields/csv.py:105 msgid "Invalid object type" msgstr "Type d'objet non valide" -#: utilities/forms/fields/expandable.py:25 +#: netbox/utilities/forms/fields/expandable.py:25 msgid "" "Alphanumeric ranges are supported for bulk creation. Mixed cases and types " "within a single range are not supported (example: " @@ -14421,7 +15245,7 @@ msgstr "" "Les cas et les types mixtes au sein d'une même plage ne sont pas pris en " "charge (exemple : [ge, xe] -0/0/ [0-9])." -#: utilities/forms/fields/expandable.py:46 +#: netbox/utilities/forms/fields/expandable.py:46 msgid "" "Specify a numeric range to create multiple IPs.
    Example: " "192.0.2.[1,5,100-254]/24" @@ -14429,7 +15253,7 @@ msgstr "" "Spécifiez une plage numérique pour créer plusieurs adresses IP.
    Exemple : 192,0,2. [1 500 -254] /24" -#: utilities/forms/fields/fields.py:31 +#: netbox/utilities/forms/fields/fields.py:31 #, python-brace-format msgid "" " Markdown est prise en charge" -#: utilities/forms/fields/fields.py:48 +#: netbox/utilities/forms/fields/fields.py:48 msgid "URL-friendly unique shorthand" msgstr "Identifiant unique utilisable dans les URL" -#: utilities/forms/fields/fields.py:101 +#: netbox/utilities/forms/fields/fields.py:101 msgid "Enter context data in JSON format." msgstr "Entrez les données de contexte en JSON." -#: utilities/forms/fields/fields.py:124 +#: netbox/utilities/forms/fields/fields.py:124 msgid "MAC address must be in EUI-48 format" msgstr "L'adresse MAC doit être au format EUI-48" -#: utilities/forms/forms.py:52 +#: netbox/utilities/forms/forms.py:52 msgid "Use regular expressions" msgstr "Utiliser des expressions rationnelles" -#: utilities/forms/forms.py:75 +#: netbox/utilities/forms/forms.py:75 msgid "" "Numeric ID of an existing object to update (if not creating a new object)" msgstr "" "Identifiant numérique d'un objet existant à mettre à jour (si aucun nouvel " "objet n'est créé)" -#: utilities/forms/forms.py:92 +#: netbox/utilities/forms/forms.py:92 #, python-brace-format msgid "Unrecognized header: {name}" msgstr "En-tête non reconnu : {name}" -#: utilities/forms/forms.py:118 +#: netbox/utilities/forms/forms.py:118 msgid "Available Columns" msgstr "Colonnes disponibles" -#: utilities/forms/forms.py:126 +#: netbox/utilities/forms/forms.py:126 msgid "Selected Columns" msgstr "Colonnes sélectionnées" -#: utilities/forms/mixins.py:44 +#: netbox/utilities/forms/mixins.py:44 msgid "" "This object has been modified since the form was rendered. Please consult " "the object's change log for details." @@ -14482,13 +15306,13 @@ msgstr "" "Cet objet a été modifié depuis le rendu du formulaire. Consultez le journal " "des modifications de l'objet pour plus de détails." -#: utilities/forms/utils.py:42 utilities/forms/utils.py:68 -#: utilities/forms/utils.py:85 utilities/forms/utils.py:87 +#: netbox/utilities/forms/utils.py:42 netbox/utilities/forms/utils.py:68 +#: netbox/utilities/forms/utils.py:85 netbox/utilities/forms/utils.py:87 #, python-brace-format msgid "Range \"{value}\" is invalid." msgstr "La plage «{value}» n'est pas valide." -#: utilities/forms/utils.py:74 +#: netbox/utilities/forms/utils.py:74 #, python-brace-format msgid "" "Invalid range: Ending value ({end}) must be greater than beginning value " @@ -14497,73 +15321,73 @@ msgstr "" "Plage non valide : la valeur de fin ({end}) doit être supérieur à la valeur " "de départ ({begin})." -#: utilities/forms/utils.py:232 +#: netbox/utilities/forms/utils.py:232 #, python-brace-format msgid "Duplicate or conflicting column header for \"{field}\"" msgstr "En-tête de colonne en double ou en conflit : «{field}»" -#: utilities/forms/utils.py:238 +#: netbox/utilities/forms/utils.py:238 #, python-brace-format msgid "Duplicate or conflicting column header for \"{header}\"" msgstr "En-tête de colonne en double ou en conflit : «{header}»" -#: utilities/forms/utils.py:247 +#: netbox/utilities/forms/utils.py:247 #, python-brace-format msgid "Row {row}: Expected {count_expected} columns but found {count_found}" msgstr "" "Rangée {row}: il devrait y avoir {count_expected} colonnes mais il y en a " "{count_found}" -#: utilities/forms/utils.py:270 +#: netbox/utilities/forms/utils.py:270 #, python-brace-format msgid "Unexpected column header \"{field}\" found." msgstr "En-tête de colonne non prévu : «{field}»." -#: utilities/forms/utils.py:272 +#: netbox/utilities/forms/utils.py:272 #, python-brace-format msgid "Column \"{field}\" is not a related object; cannot use dots" msgstr "" "Colonne »{field}« n'est pas un objet apparenté ; ne peut pas utiliser de " "points" -#: utilities/forms/utils.py:276 +#: netbox/utilities/forms/utils.py:276 #, python-brace-format msgid "Invalid related object attribute for column \"{field}\": {to_field}" msgstr "" "Attribut d'objet associé non valide pour la colonne »{field}« : {to_field}" -#: utilities/forms/utils.py:284 +#: netbox/utilities/forms/utils.py:284 #, python-brace-format msgid "Required column header \"{header}\" not found." msgstr "En-tête de colonne obligatoire «{header}» introuvable." -#: utilities/forms/widgets/apiselect.py:124 +#: netbox/utilities/forms/widgets/apiselect.py:124 #, python-brace-format msgid "Missing required value for dynamic query param: '{dynamic_params}'" msgstr "" "Valeur requise manquante pour le paramètre de requête dynamique : " "'{dynamic_params}'" -#: utilities/forms/widgets/apiselect.py:141 +#: netbox/utilities/forms/widgets/apiselect.py:141 #, python-brace-format msgid "Missing required value for static query param: '{static_params}'" msgstr "" "Valeur requise manquante pour le paramètre de requête statique : " "'{static_params}'" -#: utilities/password_validation.py:13 +#: netbox/utilities/password_validation.py:13 msgid "Password must have at least one numeral." msgstr "Le mot de passe doit comporter au moins un chiffre." -#: utilities/password_validation.py:18 +#: netbox/utilities/password_validation.py:18 msgid "Password must have at least one uppercase letter." msgstr "Le mot de passe doit comporter au moins une lettre majuscule." -#: utilities/password_validation.py:23 +#: netbox/utilities/password_validation.py:23 msgid "Password must have at least one lowercase letter." msgstr "Le mot de passe doit comporter au moins une lettre minuscule." -#: utilities/password_validation.py:27 +#: netbox/utilities/password_validation.py:27 msgid "" "Your password must contain at least one numeral, one uppercase letter and " "one lowercase letter." @@ -14571,7 +15395,7 @@ msgstr "" "Votre mot de passe doit contenir au moins un chiffre, une lettre majuscule " "et une lettre minuscule." -#: utilities/permissions.py:42 +#: netbox/utilities/permissions.py:42 #, python-brace-format msgid "" "Invalid permission name: {name}. Must be in the format " @@ -14580,125 +15404,125 @@ msgstr "" "Nom de permission invalide : {name}. Doit être dans le format " "._" -#: utilities/permissions.py:60 +#: netbox/utilities/permissions.py:60 #, python-brace-format msgid "Unknown app_label/model_name for {name}" msgstr "App_label/model_name inconnu pour {name}" -#: utilities/request.py:76 +#: netbox/utilities/request.py:76 #, python-brace-format msgid "Invalid IP address set for {header}: {ip}" msgstr "Adresse IP non valide définie pour {header}: {ip}" -#: utilities/tables.py:47 +#: netbox/utilities/tables.py:47 #, python-brace-format msgid "A column named {name} is already defined for table {table_name}" msgstr "Une colonne nommée {name} est déjà défini pour la table {table_name}" -#: utilities/templates/builtins/customfield_value.html:30 +#: netbox/utilities/templates/builtins/customfield_value.html:30 msgid "Not defined" msgstr "Non défini" -#: utilities/templates/buttons/bookmark.html:9 +#: netbox/utilities/templates/buttons/bookmark.html:9 msgid "Unbookmark" msgstr "Enlever des favoris" -#: utilities/templates/buttons/bookmark.html:13 +#: netbox/utilities/templates/buttons/bookmark.html:13 msgid "Bookmark" msgstr "Marque-page" -#: utilities/templates/buttons/clone.html:4 +#: netbox/utilities/templates/buttons/clone.html:4 msgid "Clone" msgstr "Cloner" -#: utilities/templates/buttons/export.html:7 +#: netbox/utilities/templates/buttons/export.html:7 msgid "Current View" msgstr "Vue actuelle" -#: utilities/templates/buttons/export.html:8 +#: netbox/utilities/templates/buttons/export.html:8 msgid "All Data" msgstr "Toutes les données" -#: utilities/templates/buttons/export.html:28 +#: netbox/utilities/templates/buttons/export.html:28 msgid "Add export template" msgstr "Ajouter un modèle d'exportation" -#: utilities/templates/buttons/import.html:4 +#: netbox/utilities/templates/buttons/import.html:4 msgid "Import" msgstr "Importer" -#: utilities/templates/buttons/subscribe.html:10 +#: netbox/utilities/templates/buttons/subscribe.html:10 msgid "Unsubscribe" msgstr "Désabonnement" -#: utilities/templates/buttons/subscribe.html:14 +#: netbox/utilities/templates/buttons/subscribe.html:14 msgid "Subscribe" msgstr "Souscrire" -#: utilities/templates/form_helpers/render_field.html:41 +#: netbox/utilities/templates/form_helpers/render_field.html:41 msgid "Copy to clipboard" msgstr "Copier dans le presse-papiers" -#: utilities/templates/form_helpers/render_field.html:57 +#: netbox/utilities/templates/form_helpers/render_field.html:57 msgid "This field is required" msgstr "Ce champ est obligatoire" -#: utilities/templates/form_helpers/render_field.html:70 +#: netbox/utilities/templates/form_helpers/render_field.html:70 msgid "Set Null" msgstr "Définir à Null" -#: utilities/templates/helpers/applied_filters.html:11 +#: netbox/utilities/templates/helpers/applied_filters.html:11 msgid "Clear all" msgstr "Tout effacer" -#: utilities/templates/helpers/table_config_form.html:8 +#: netbox/utilities/templates/helpers/table_config_form.html:8 msgid "Table Configuration" msgstr "Configuration de la table" -#: utilities/templates/helpers/table_config_form.html:31 +#: netbox/utilities/templates/helpers/table_config_form.html:31 msgid "Move Up" msgstr "Déplacer vers le haut" -#: utilities/templates/helpers/table_config_form.html:34 +#: netbox/utilities/templates/helpers/table_config_form.html:34 msgid "Move Down" msgstr "Déplacer vers le bas" -#: utilities/templates/navigation/menu.html:14 +#: netbox/utilities/templates/navigation/menu.html:14 msgid "Search…" msgstr "Rechercher..." -#: utilities/templates/navigation/menu.html:14 +#: netbox/utilities/templates/navigation/menu.html:14 msgid "Search NetBox" msgstr "Rechercher dans NetBox" -#: utilities/templates/widgets/apiselect.html:7 +#: netbox/utilities/templates/widgets/apiselect.html:7 msgid "Open selector" msgstr "Ouvrir le sélecteur" -#: utilities/templates/widgets/markdown_input.html:6 +#: netbox/utilities/templates/widgets/markdown_input.html:6 msgid "Write" msgstr "Écrire" -#: utilities/testing/views.py:632 +#: netbox/utilities/testing/views.py:632 msgid "The test must define csv_update_data." msgstr "Le test doit définir csv_update_data." -#: utilities/validators.py:65 +#: netbox/utilities/validators.py:65 #, python-brace-format msgid "{value} is not a valid regular expression." msgstr "{value} n'est pas une expression rationnelle valide." -#: utilities/views.py:57 +#: netbox/utilities/views.py:57 #, python-brace-format msgid "{self.__class__.__name__} must implement get_required_permission()" msgstr "{self.__class__.__name__} doit implémenter get_required_permission()" -#: utilities/views.py:93 +#: netbox/utilities/views.py:93 #, python-brace-format msgid "{class_name} must implement get_required_permission()" msgstr "{class_name} doit implémenter get_required_permission()" -#: utilities/views.py:117 +#: netbox/utilities/views.py:117 #, python-brace-format msgid "" "{class_name} has no queryset defined. ObjectPermissionRequiredMixin may only" @@ -14708,61 +15532,63 @@ msgstr "" "ne peut être utilisé que sur les vues qui définissent un objet QuerySet de " "base" -#: virtualization/filtersets.py:79 +#: netbox/virtualization/filtersets.py:79 msgid "Parent group (ID)" msgstr "Groupe de parents (ID)" -#: virtualization/filtersets.py:85 +#: netbox/virtualization/filtersets.py:85 msgid "Parent group (slug)" msgstr "Groupe de parents (slug)" -#: virtualization/filtersets.py:89 virtualization/filtersets.py:141 +#: netbox/virtualization/filtersets.py:89 +#: netbox/virtualization/filtersets.py:141 msgid "Cluster type (ID)" msgstr "Type de cluster (ID)" -#: virtualization/filtersets.py:151 virtualization/filtersets.py:271 +#: netbox/virtualization/filtersets.py:151 +#: netbox/virtualization/filtersets.py:271 msgid "Cluster (ID)" msgstr "Cluster (ID)" -#: virtualization/forms/bulk_edit.py:166 -#: virtualization/models/virtualmachines.py:115 +#: netbox/virtualization/forms/bulk_edit.py:166 +#: netbox/virtualization/models/virtualmachines.py:115 msgid "vCPUs" msgstr "processeurs virtuels" -#: virtualization/forms/bulk_edit.py:170 +#: netbox/virtualization/forms/bulk_edit.py:170 msgid "Memory (MB)" msgstr "Mémoire (Mo)" -#: virtualization/forms/bulk_edit.py:174 -msgid "Disk (GB)" -msgstr "Disque (Go)" +#: netbox/virtualization/forms/bulk_edit.py:174 +msgid "Disk (MB)" +msgstr "Disque (Mo)" -#: virtualization/forms/bulk_edit.py:334 -#: virtualization/forms/filtersets.py:251 -msgid "Size (GB)" -msgstr "Taille (Go)" +#: netbox/virtualization/forms/bulk_edit.py:334 +#: netbox/virtualization/forms/filtersets.py:251 +msgid "Size (MB)" +msgstr "Taille (Mo)" -#: virtualization/forms/bulk_import.py:44 +#: netbox/virtualization/forms/bulk_import.py:44 msgid "Type of cluster" msgstr "Type de cluster" -#: virtualization/forms/bulk_import.py:51 +#: netbox/virtualization/forms/bulk_import.py:51 msgid "Assigned cluster group" msgstr "Groupe de clusters attribué" -#: virtualization/forms/bulk_import.py:96 +#: netbox/virtualization/forms/bulk_import.py:96 msgid "Assigned cluster" msgstr "Cluster attribué" -#: virtualization/forms/bulk_import.py:103 +#: netbox/virtualization/forms/bulk_import.py:103 msgid "Assigned device within cluster" msgstr "Appareil attribué au sein du cluster" -#: virtualization/forms/filtersets.py:183 +#: netbox/virtualization/forms/filtersets.py:183 msgid "Serial number" msgstr "Numéro de série" -#: virtualization/forms/model_forms.py:153 +#: netbox/virtualization/forms/model_forms.py:153 #, python-brace-format msgid "" "{device} belongs to a different site ({device_site}) than the cluster " @@ -14771,50 +15597,50 @@ msgstr "" "{device} appartient à un autre site ({device_site}) puis le cluster " "({cluster_site})" -#: virtualization/forms/model_forms.py:192 +#: netbox/virtualization/forms/model_forms.py:192 msgid "Optionally pin this VM to a specific host device within the cluster" msgstr "" "Épinglez éventuellement cette machine virtuelle à un périphérique hôte " "spécifique au sein du cluster" -#: virtualization/forms/model_forms.py:221 +#: netbox/virtualization/forms/model_forms.py:221 msgid "Site/Cluster" msgstr "Site/Cluster" -#: virtualization/forms/model_forms.py:244 +#: netbox/virtualization/forms/model_forms.py:244 msgid "Disk size is managed via the attachment of virtual disks." msgstr "La taille du disque est gérée via la connexion de disques virtuels." -#: virtualization/forms/model_forms.py:372 -#: virtualization/tables/virtualmachines.py:111 +#: netbox/virtualization/forms/model_forms.py:372 +#: netbox/virtualization/tables/virtualmachines.py:111 msgid "Disk" msgstr "Disque" -#: virtualization/models/clusters.py:25 +#: netbox/virtualization/models/clusters.py:25 msgid "cluster type" msgstr "type de cluster" -#: virtualization/models/clusters.py:26 +#: netbox/virtualization/models/clusters.py:26 msgid "cluster types" msgstr "types de clusters" -#: virtualization/models/clusters.py:45 +#: netbox/virtualization/models/clusters.py:45 msgid "cluster group" msgstr "groupe de clusters" -#: virtualization/models/clusters.py:46 +#: netbox/virtualization/models/clusters.py:46 msgid "cluster groups" msgstr "groupes de clusters" -#: virtualization/models/clusters.py:121 +#: netbox/virtualization/models/clusters.py:121 msgid "cluster" msgstr "cluster" -#: virtualization/models/clusters.py:122 +#: netbox/virtualization/models/clusters.py:122 msgid "clusters" msgstr "clusters" -#: virtualization/models/clusters.py:141 +#: netbox/virtualization/models/clusters.py:141 #, python-brace-format msgid "" "{count} devices are assigned as hosts for this cluster but are not in site " @@ -14823,44 +15649,44 @@ msgstr "" "{count} les appareils sont affectés en tant qu'hôtes à ce cluster mais ne " "sont pas sur le site {site}" -#: virtualization/models/virtualmachines.py:123 +#: netbox/virtualization/models/virtualmachines.py:123 msgid "memory (MB)" msgstr "mémoire (Mo)" -#: virtualization/models/virtualmachines.py:128 +#: netbox/virtualization/models/virtualmachines.py:128 msgid "disk (MB)" msgstr "disque (Mo)" -#: virtualization/models/virtualmachines.py:166 +#: netbox/virtualization/models/virtualmachines.py:166 msgid "Virtual machine name must be unique per cluster." msgstr "Le nom de la machine virtuelle doit être unique par cluster." -#: virtualization/models/virtualmachines.py:169 +#: netbox/virtualization/models/virtualmachines.py:169 msgid "virtual machine" msgstr "machine virtuelle" -#: virtualization/models/virtualmachines.py:170 +#: netbox/virtualization/models/virtualmachines.py:170 msgid "virtual machines" msgstr "machines virtuelles" -#: virtualization/models/virtualmachines.py:184 +#: netbox/virtualization/models/virtualmachines.py:184 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." -#: virtualization/models/virtualmachines.py:191 +#: netbox/virtualization/models/virtualmachines.py:191 #, 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})." -#: virtualization/models/virtualmachines.py:198 +#: netbox/virtualization/models/virtualmachines.py:198 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." -#: virtualization/models/virtualmachines.py:203 +#: netbox/virtualization/models/virtualmachines.py:203 #, python-brace-format msgid "" "The selected device ({device}) is not assigned to this cluster ({cluster})." @@ -14868,7 +15694,7 @@ msgstr "" "L'appareil sélectionné ({device}) n'est pas affecté à ce cluster " "({cluster})." -#: virtualization/models/virtualmachines.py:215 +#: netbox/virtualization/models/virtualmachines.py:215 #, python-brace-format msgid "" "The specified disk size ({size}) must match the aggregate size of assigned " @@ -14877,19 +15703,19 @@ msgstr "" "La taille de disque indiquée ({size}) doit correspondre à la taille agrégée " "des disques virtuels assignés ({total_size})." -#: virtualization/models/virtualmachines.py:229 +#: netbox/virtualization/models/virtualmachines.py:229 #, 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}.)" -#: virtualization/models/virtualmachines.py:238 +#: netbox/virtualization/models/virtualmachines.py:238 #, 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." -#: virtualization/models/virtualmachines.py:396 +#: netbox/virtualization/models/virtualmachines.py:396 #, python-brace-format msgid "" "The selected parent interface ({parent}) belongs to a different virtual " @@ -14898,7 +15724,7 @@ msgstr "" "L'interface parent sélectionnée ({parent}) appartient à une autre machine " "virtuelle ({virtual_machine})." -#: virtualization/models/virtualmachines.py:411 +#: netbox/virtualization/models/virtualmachines.py:411 #, python-brace-format msgid "" "The selected bridge interface ({bridge}) belongs to a different virtual " @@ -14907,404 +15733,427 @@ msgstr "" "L'interface de pont sélectionnée ({bridge}) appartient à une autre machine " "virtuelle ({virtual_machine})." -#: virtualization/models/virtualmachines.py:422 +#: netbox/virtualization/models/virtualmachines.py:422 #, 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 "" -"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." -#: virtualization/models/virtualmachines.py:434 +#: netbox/virtualization/models/virtualmachines.py:434 msgid "size (MB)" msgstr "taille (Mo)" -#: virtualization/models/virtualmachines.py:438 +#: netbox/virtualization/models/virtualmachines.py:438 msgid "virtual disk" msgstr "disque virtuel" -#: virtualization/models/virtualmachines.py:439 +#: netbox/virtualization/models/virtualmachines.py:439 msgid "virtual disks" msgstr "disques virtuels" -#: virtualization/views.py:275 +#: netbox/virtualization/views.py:273 #, python-brace-format msgid "Added {count} devices to cluster {cluster}" msgstr "Ajouté {count} appareils à mettre en cluster {cluster}" -#: virtualization/views.py:310 +#: netbox/virtualization/views.py:308 #, python-brace-format msgid "Removed {count} devices from cluster {cluster}" msgstr "Supprimé {count} appareils du cluster {cluster}" -#: vpn/choices.py:31 +#: netbox/vpn/choices.py:35 msgid "IPsec - Transport" msgstr "IPSec - Transport" -#: vpn/choices.py:32 +#: netbox/vpn/choices.py:36 msgid "IPsec - Tunnel" msgstr "IPsec - Tunnel" -#: vpn/choices.py:33 +#: netbox/vpn/choices.py:37 msgid "IP-in-IP" msgstr "IP dans IP" -#: vpn/choices.py:34 +#: netbox/vpn/choices.py:38 msgid "GRE" msgstr "GRE" -#: vpn/choices.py:56 +#: netbox/vpn/choices.py:39 +msgid "WireGuard" +msgstr "Wireguard" + +#: netbox/vpn/choices.py:40 +msgid "OpenVPN" +msgstr "OpenVPN" + +#: netbox/vpn/choices.py:41 +msgid "L2TP" +msgstr "L2TP" + +#: netbox/vpn/choices.py:42 +msgid "PPTP" +msgstr "PPTP" + +#: netbox/vpn/choices.py:64 msgid "Hub" msgstr "Hub" -#: vpn/choices.py:57 +#: netbox/vpn/choices.py:65 msgid "Spoke" msgstr "Spoke" -#: vpn/choices.py:80 +#: netbox/vpn/choices.py:88 msgid "Aggressive" msgstr "Agressif" -#: vpn/choices.py:81 +#: netbox/vpn/choices.py:89 msgid "Main" msgstr "Principal" -#: vpn/choices.py:92 +#: netbox/vpn/choices.py:100 msgid "Pre-shared keys" msgstr "Clés pré-partagées" -#: vpn/choices.py:93 +#: netbox/vpn/choices.py:101 msgid "Certificates" msgstr "Certificats" -#: vpn/choices.py:94 +#: netbox/vpn/choices.py:102 msgid "RSA signatures" msgstr "Signatures RSA" -#: vpn/choices.py:95 +#: netbox/vpn/choices.py:103 msgid "DSA signatures" msgstr "Signatures DSA" -#: vpn/choices.py:178 vpn/choices.py:179 vpn/choices.py:180 vpn/choices.py:181 -#: vpn/choices.py:182 vpn/choices.py:183 vpn/choices.py:184 vpn/choices.py:185 -#: vpn/choices.py:186 vpn/choices.py:187 vpn/choices.py:188 vpn/choices.py:189 -#: vpn/choices.py:190 vpn/choices.py:191 vpn/choices.py:192 vpn/choices.py:193 -#: vpn/choices.py:194 vpn/choices.py:195 vpn/choices.py:196 vpn/choices.py:197 -#: vpn/choices.py:198 vpn/choices.py:199 vpn/choices.py:200 vpn/choices.py:201 +#: netbox/vpn/choices.py:186 netbox/vpn/choices.py:187 +#: netbox/vpn/choices.py:188 netbox/vpn/choices.py:189 +#: netbox/vpn/choices.py:190 netbox/vpn/choices.py:191 +#: netbox/vpn/choices.py:192 netbox/vpn/choices.py:193 +#: netbox/vpn/choices.py:194 netbox/vpn/choices.py:195 +#: netbox/vpn/choices.py:196 netbox/vpn/choices.py:197 +#: netbox/vpn/choices.py:198 netbox/vpn/choices.py:199 +#: netbox/vpn/choices.py:200 netbox/vpn/choices.py:201 +#: netbox/vpn/choices.py:202 netbox/vpn/choices.py:203 +#: netbox/vpn/choices.py:204 netbox/vpn/choices.py:205 +#: netbox/vpn/choices.py:206 netbox/vpn/choices.py:207 +#: netbox/vpn/choices.py:208 netbox/vpn/choices.py:209 #, python-brace-format msgid "Group {n}" msgstr "Groupe {n}" -#: vpn/choices.py:243 +#: netbox/vpn/choices.py:251 msgid "Ethernet Private LAN" msgstr "Réseau local privé Ethernet" -#: vpn/choices.py:244 +#: netbox/vpn/choices.py:252 msgid "Ethernet Virtual Private LAN" msgstr "Réseau local privé virtuel Ethernet" -#: vpn/choices.py:247 +#: netbox/vpn/choices.py:255 msgid "Ethernet Private Tree" msgstr "Arbre privé Ethernet" -#: vpn/choices.py:248 +#: netbox/vpn/choices.py:256 msgid "Ethernet Virtual Private Tree" msgstr "Arbre privé virtuel Ethernet" -#: vpn/filtersets.py:41 +#: netbox/vpn/filtersets.py:41 msgid "Tunnel group (ID)" msgstr "Groupe de tunnels (ID)" -#: vpn/filtersets.py:47 +#: netbox/vpn/filtersets.py:47 msgid "Tunnel group (slug)" msgstr "Groupe de tunnels (slug)" -#: vpn/filtersets.py:54 +#: netbox/vpn/filtersets.py:54 msgid "IPSec profile (ID)" msgstr "profil IPSec (ID)" -#: vpn/filtersets.py:60 +#: netbox/vpn/filtersets.py:60 msgid "IPSec profile (name)" msgstr "Profil IPSec (nom)" -#: vpn/filtersets.py:81 +#: netbox/vpn/filtersets.py:81 msgid "Tunnel (ID)" msgstr "Tunnel (ID)" -#: vpn/filtersets.py:87 +#: netbox/vpn/filtersets.py:87 msgid "Tunnel (name)" msgstr "Tunnel (nom)" -#: vpn/filtersets.py:118 +#: netbox/vpn/filtersets.py:118 msgid "Outside IP (ID)" msgstr "IP externe (ID)" -#: vpn/filtersets.py:130 vpn/filtersets.py:263 +#: netbox/vpn/filtersets.py:130 netbox/vpn/filtersets.py:263 msgid "IKE policy (ID)" msgstr "Politique IKE (ID)" -#: vpn/filtersets.py:136 vpn/filtersets.py:269 +#: netbox/vpn/filtersets.py:136 netbox/vpn/filtersets.py:269 msgid "IKE policy (name)" msgstr "Politique IKE (nom)" -#: vpn/filtersets.py:200 vpn/filtersets.py:273 +#: netbox/vpn/filtersets.py:200 netbox/vpn/filtersets.py:273 msgid "IPSec policy (ID)" msgstr "Politique IPSec (ID)" -#: vpn/filtersets.py:206 vpn/filtersets.py:279 +#: netbox/vpn/filtersets.py:206 netbox/vpn/filtersets.py:279 msgid "IPSec policy (name)" msgstr "Politique IPSec (nom)" -#: vpn/filtersets.py:348 +#: netbox/vpn/filtersets.py:348 msgid "L2VPN (slug)" msgstr "L2VPN (slug)" -#: vpn/filtersets.py:412 +#: netbox/vpn/filtersets.py:412 msgid "VM Interface (ID)" msgstr "Interface de machine virtuelle (ID)" -#: vpn/filtersets.py:418 +#: netbox/vpn/filtersets.py:418 msgid "VLAN (name)" msgstr "VLAN (nom)" -#: vpn/forms/bulk_edit.py:45 vpn/forms/bulk_import.py:42 -#: vpn/forms/filtersets.py:54 +#: netbox/vpn/forms/bulk_edit.py:45 netbox/vpn/forms/bulk_import.py:42 +#: netbox/vpn/forms/filtersets.py:54 msgid "Tunnel group" msgstr "Groupe de tunnels" -#: vpn/forms/bulk_edit.py:117 vpn/models/crypto.py:47 +#: netbox/vpn/forms/bulk_edit.py:117 netbox/vpn/models/crypto.py:47 msgid "SA lifetime" msgstr "Durée de vie de l'association de sécurité (SA)" -#: vpn/forms/bulk_edit.py:151 wireless/forms/bulk_edit.py:79 -#: wireless/forms/bulk_edit.py:126 wireless/forms/filtersets.py:64 -#: wireless/forms/filtersets.py:98 +#: netbox/vpn/forms/bulk_edit.py:151 netbox/wireless/forms/bulk_edit.py:79 +#: netbox/wireless/forms/bulk_edit.py:126 +#: netbox/wireless/forms/filtersets.py:64 +#: netbox/wireless/forms/filtersets.py:98 msgid "Pre-shared key" msgstr "Clé pré-partagée" -#: vpn/forms/bulk_edit.py:237 vpn/forms/bulk_import.py:239 -#: vpn/forms/filtersets.py:199 vpn/forms/model_forms.py:370 -#: vpn/models/crypto.py:104 +#: netbox/vpn/forms/bulk_edit.py:237 netbox/vpn/forms/bulk_import.py:239 +#: netbox/vpn/forms/filtersets.py:199 netbox/vpn/forms/model_forms.py:370 +#: netbox/vpn/models/crypto.py:104 msgid "IKE policy" msgstr "Politique IKE" -#: vpn/forms/bulk_edit.py:242 vpn/forms/bulk_import.py:244 -#: vpn/forms/filtersets.py:204 vpn/forms/model_forms.py:374 -#: vpn/models/crypto.py:209 +#: netbox/vpn/forms/bulk_edit.py:242 netbox/vpn/forms/bulk_import.py:244 +#: netbox/vpn/forms/filtersets.py:204 netbox/vpn/forms/model_forms.py:374 +#: netbox/vpn/models/crypto.py:209 msgid "IPSec policy" msgstr "Politique IPSec" -#: vpn/forms/bulk_import.py:50 +#: netbox/vpn/forms/bulk_import.py:50 msgid "Tunnel encapsulation" msgstr "Encapsulation du tunnel" -#: vpn/forms/bulk_import.py:83 +#: netbox/vpn/forms/bulk_import.py:83 msgid "Operational role" msgstr "Rôle opérationnel" -#: vpn/forms/bulk_import.py:90 +#: netbox/vpn/forms/bulk_import.py:90 msgid "Parent device of assigned interface" msgstr "Appareil parent à l'interface attribuée" -#: vpn/forms/bulk_import.py:97 +#: netbox/vpn/forms/bulk_import.py:97 msgid "Parent VM of assigned interface" msgstr "Machine virtuelle parente de l'interface attribuée" -#: vpn/forms/bulk_import.py:104 +#: netbox/vpn/forms/bulk_import.py:104 msgid "Device or virtual machine interface" msgstr "Interface de périphérique ou de machine virtuelle" -#: vpn/forms/bulk_import.py:183 +#: netbox/vpn/forms/bulk_import.py:183 msgid "IKE proposal(s)" msgstr "Proposition(s) de l'IKE" -#: vpn/forms/bulk_import.py:215 vpn/models/crypto.py:197 +#: netbox/vpn/forms/bulk_import.py:215 netbox/vpn/models/crypto.py:197 msgid "Diffie-Hellman group for Perfect Forward Secrecy" msgstr "Groupe Diffie-Hellman PFS (Perfect Forward Secrecy)" -#: vpn/forms/bulk_import.py:222 +#: netbox/vpn/forms/bulk_import.py:222 msgid "IPSec proposal(s)" msgstr "Proposition(s) IPSec" -#: vpn/forms/bulk_import.py:236 +#: netbox/vpn/forms/bulk_import.py:236 msgid "IPSec protocol" msgstr "Protocole IPSec" -#: vpn/forms/bulk_import.py:266 +#: netbox/vpn/forms/bulk_import.py:266 msgid "L2VPN type" msgstr "Type de VPN L2" -#: vpn/forms/bulk_import.py:287 +#: netbox/vpn/forms/bulk_import.py:287 msgid "Parent device (for interface)" msgstr "Appareil parent (pour interface)" -#: vpn/forms/bulk_import.py:294 +#: netbox/vpn/forms/bulk_import.py:294 msgid "Parent virtual machine (for interface)" msgstr "Machine virtuelle parente (pour l'interface)" -#: vpn/forms/bulk_import.py:301 +#: netbox/vpn/forms/bulk_import.py:301 msgid "Assigned interface (device or VM)" msgstr "Interface attribuée (appareil ou machine virtuelle)" -#: vpn/forms/bulk_import.py:334 +#: netbox/vpn/forms/bulk_import.py:334 msgid "Cannot import device and VM interface terminations simultaneously." msgstr "" "Impossible d'importer simultanément les terminaisons de l'interface du " "périphérique et de la machine virtuelle." -#: vpn/forms/bulk_import.py:336 +#: netbox/vpn/forms/bulk_import.py:336 msgid "Each termination must specify either an interface or a VLAN." msgstr "Chaque terminaison doit spécifier une interface ou un VLAN." -#: vpn/forms/bulk_import.py:338 +#: netbox/vpn/forms/bulk_import.py:338 msgid "Cannot assign both an interface and a VLAN." msgstr "Impossible d'attribuer à la fois une interface et un VLAN." -#: vpn/forms/filtersets.py:130 +#: netbox/vpn/forms/filtersets.py:130 msgid "IKE version" msgstr "Version IKE" -#: vpn/forms/filtersets.py:142 vpn/forms/filtersets.py:175 -#: vpn/forms/model_forms.py:298 vpn/forms/model_forms.py:334 +#: netbox/vpn/forms/filtersets.py:142 netbox/vpn/forms/filtersets.py:175 +#: netbox/vpn/forms/model_forms.py:298 netbox/vpn/forms/model_forms.py:334 msgid "Proposal" msgstr "Proposition" -#: vpn/forms/filtersets.py:251 +#: netbox/vpn/forms/filtersets.py:251 msgid "Assigned Object Type" msgstr "Type d'objet attribué" -#: vpn/forms/model_forms.py:95 vpn/forms/model_forms.py:130 -#: vpn/forms/model_forms.py:240 vpn/tables/tunnels.py:91 +#: netbox/vpn/forms/model_forms.py:95 netbox/vpn/forms/model_forms.py:130 +#: netbox/vpn/forms/model_forms.py:240 netbox/vpn/tables/tunnels.py:91 msgid "Tunnel interface" msgstr "Interface de tunnel" -#: vpn/forms/model_forms.py:150 +#: netbox/vpn/forms/model_forms.py:150 msgid "First Termination" msgstr "Première extrémité" -#: vpn/forms/model_forms.py:153 +#: netbox/vpn/forms/model_forms.py:153 msgid "Second Termination" msgstr "Deuxième extrémité" -#: vpn/forms/model_forms.py:197 +#: netbox/vpn/forms/model_forms.py:197 msgid "This parameter is required when defining a termination." msgstr "Ce paramètre est obligatoire lors de la définition d'une terminaison." -#: vpn/forms/model_forms.py:320 vpn/forms/model_forms.py:356 +#: netbox/vpn/forms/model_forms.py:320 netbox/vpn/forms/model_forms.py:356 msgid "Policy" msgstr "Politique" -#: vpn/forms/model_forms.py:487 +#: netbox/vpn/forms/model_forms.py:487 msgid "A termination must specify an interface or VLAN." msgstr "Une terminaison doit spécifier une interface ou un VLAN." -#: vpn/forms/model_forms.py:489 +#: netbox/vpn/forms/model_forms.py:489 msgid "" "A termination can only have one terminating object (an interface or VLAN)." msgstr "" "Une terminaison ne peut avoir qu'un seul objet de terminaison (une interface" " ou un VLAN)." -#: vpn/models/crypto.py:33 +#: netbox/vpn/models/crypto.py:33 msgid "encryption algorithm" msgstr "algorithme de chiffrement" -#: vpn/models/crypto.py:37 +#: netbox/vpn/models/crypto.py:37 msgid "authentication algorithm" msgstr "algorithme d'authentification" -#: vpn/models/crypto.py:44 +#: netbox/vpn/models/crypto.py:44 msgid "Diffie-Hellman group ID" msgstr "ID de groupe Diffie-Hellman" -#: vpn/models/crypto.py:50 +#: netbox/vpn/models/crypto.py:50 msgid "Security association lifetime (in seconds)" msgstr "Durée de vie de l'association de sécurité (en secondes)" -#: vpn/models/crypto.py:59 +#: netbox/vpn/models/crypto.py:59 msgid "IKE proposal" msgstr "Proposal IKE" -#: vpn/models/crypto.py:60 +#: netbox/vpn/models/crypto.py:60 msgid "IKE proposals" msgstr "Proposals IKE" -#: vpn/models/crypto.py:76 +#: netbox/vpn/models/crypto.py:76 msgid "version" msgstr "version" -#: vpn/models/crypto.py:88 vpn/models/crypto.py:190 +#: netbox/vpn/models/crypto.py:88 netbox/vpn/models/crypto.py:190 msgid "proposals" msgstr "propositions" -#: vpn/models/crypto.py:91 wireless/models.py:39 +#: netbox/vpn/models/crypto.py:91 netbox/wireless/models.py:39 msgid "pre-shared key" msgstr "clé pré-partagée" -#: vpn/models/crypto.py:105 +#: netbox/vpn/models/crypto.py:105 msgid "IKE policies" msgstr "Politiques IKE" -#: vpn/models/crypto.py:118 +#: netbox/vpn/models/crypto.py:118 msgid "Mode is required for selected IKE version" msgstr "Le mode est requis pour la version IKE sélectionnée" -#: vpn/models/crypto.py:122 +#: netbox/vpn/models/crypto.py:122 msgid "Mode cannot be used for selected IKE version" msgstr "Le mode ne peut pas être utilisé pour la version IKE sélectionnée" -#: vpn/models/crypto.py:136 +#: netbox/vpn/models/crypto.py:136 msgid "encryption" msgstr "chiffrement" -#: vpn/models/crypto.py:141 +#: netbox/vpn/models/crypto.py:141 msgid "authentication" msgstr "authentification" -#: vpn/models/crypto.py:149 +#: netbox/vpn/models/crypto.py:149 msgid "Security association lifetime (seconds)" msgstr "Durée de vie de l'association de sécurité (secondes)" -#: vpn/models/crypto.py:155 +#: netbox/vpn/models/crypto.py:155 msgid "Security association lifetime (in kilobytes)" msgstr "Durée de vie de l'association de sécurité (en kilo-octets)" -#: vpn/models/crypto.py:164 +#: netbox/vpn/models/crypto.py:164 msgid "IPSec proposal" msgstr "Proposal IPSec" -#: vpn/models/crypto.py:165 +#: netbox/vpn/models/crypto.py:165 msgid "IPSec proposals" msgstr "Proposals IPSec" -#: vpn/models/crypto.py:178 +#: netbox/vpn/models/crypto.py:178 msgid "Encryption and/or authentication algorithm must be defined" msgstr "" "Un algorithme de chiffrement et/ou d'authentification doit être défini" -#: vpn/models/crypto.py:210 +#: netbox/vpn/models/crypto.py:210 msgid "IPSec policies" msgstr "Politiques IPSec" -#: vpn/models/crypto.py:251 +#: netbox/vpn/models/crypto.py:251 msgid "IPSec profiles" msgstr "Profils IPSec" -#: vpn/models/l2vpn.py:116 +#: netbox/vpn/models/l2vpn.py:116 msgid "L2VPN termination" msgstr "Terminaison L2VPN" -#: vpn/models/l2vpn.py:117 +#: netbox/vpn/models/l2vpn.py:117 msgid "L2VPN terminations" msgstr "Terminaisons L2VPN" -#: vpn/models/l2vpn.py:135 +#: netbox/vpn/models/l2vpn.py:135 #, python-brace-format msgid "L2VPN Termination already assigned ({assigned_object})" msgstr "Terminaison L2VPN déjà attribuée ({assigned_object})" -#: vpn/models/l2vpn.py:147 +#: netbox/vpn/models/l2vpn.py:147 #, python-brace-format msgid "" "{l2vpn_type} L2VPNs cannot have more than two terminations; found " @@ -15313,187 +16162,195 @@ msgstr "" "{l2vpn_type} Les L2VPN ne peuvent pas avoir plus de deux terminaisons ; " "trouvé {terminations_count} déjà défini." -#: vpn/models/tunnels.py:26 +#: netbox/vpn/models/tunnels.py:26 msgid "tunnel group" msgstr "groupe de tunnels" -#: vpn/models/tunnels.py:27 +#: netbox/vpn/models/tunnels.py:27 msgid "tunnel groups" msgstr "groupes de tunnels" -#: vpn/models/tunnels.py:53 +#: netbox/vpn/models/tunnels.py:53 msgid "encapsulation" msgstr "encapsulation" -#: vpn/models/tunnels.py:72 +#: netbox/vpn/models/tunnels.py:72 msgid "tunnel ID" msgstr "ID du tunnel" -#: vpn/models/tunnels.py:94 +#: netbox/vpn/models/tunnels.py:94 msgid "tunnel" msgstr "tunnel" -#: vpn/models/tunnels.py:95 +#: netbox/vpn/models/tunnels.py:95 msgid "tunnels" msgstr "tunnels" -#: vpn/models/tunnels.py:153 +#: netbox/vpn/models/tunnels.py:153 msgid "An object may be terminated to only one tunnel at a time." msgstr "Un objet ne peut être l'extrémité que d'un seul tunnel." -#: vpn/models/tunnels.py:156 +#: netbox/vpn/models/tunnels.py:156 msgid "tunnel termination" msgstr "terminaison du tunnel" -#: vpn/models/tunnels.py:157 +#: netbox/vpn/models/tunnels.py:157 msgid "tunnel terminations" msgstr "terminaisons de tunnels" -#: vpn/models/tunnels.py:174 +#: netbox/vpn/models/tunnels.py:174 #, python-brace-format msgid "{name} is already attached to a tunnel ({tunnel})." msgstr "{name} est déjà rattaché à un tunnel ({tunnel})." -#: vpn/tables/crypto.py:22 +#: netbox/vpn/tables/crypto.py:22 msgid "Authentication Method" msgstr "Méthode d'authentification" -#: vpn/tables/crypto.py:25 vpn/tables/crypto.py:97 +#: netbox/vpn/tables/crypto.py:25 netbox/vpn/tables/crypto.py:97 msgid "Encryption Algorithm" msgstr "Algorithme de chiffrement" -#: vpn/tables/crypto.py:28 vpn/tables/crypto.py:100 +#: netbox/vpn/tables/crypto.py:28 netbox/vpn/tables/crypto.py:100 msgid "Authentication Algorithm" msgstr "Algorithme d'authentification" -#: vpn/tables/crypto.py:34 +#: netbox/vpn/tables/crypto.py:34 msgid "SA Lifetime" msgstr "Durée de vie du SA" -#: vpn/tables/crypto.py:71 +#: netbox/vpn/tables/crypto.py:71 msgid "Pre-shared Key" msgstr "Clé pré-partagée" -#: vpn/tables/crypto.py:103 +#: netbox/vpn/tables/crypto.py:103 msgid "SA Lifetime (Seconds)" msgstr "Durée de vie de l'association de sécurité (secondes)" -#: vpn/tables/crypto.py:106 +#: netbox/vpn/tables/crypto.py:106 msgid "SA Lifetime (KB)" msgstr "Durée de vie de l'association de sécurité (Ko)" -#: vpn/tables/l2vpn.py:69 +#: netbox/vpn/tables/l2vpn.py:69 msgid "Object Parent" msgstr "Parent de l'objet" -#: vpn/tables/l2vpn.py:74 +#: netbox/vpn/tables/l2vpn.py:74 msgid "Object Site" msgstr "Site de l'objet" -#: wireless/choices.py:11 +#: netbox/wireless/choices.py:11 msgid "Access point" msgstr "Point d'accès" -#: wireless/choices.py:12 +#: netbox/wireless/choices.py:12 msgid "Station" msgstr "Appareil sans-fil" -#: wireless/choices.py:467 +#: netbox/wireless/choices.py:467 msgid "Open" msgstr "Ouvert" -#: wireless/choices.py:469 +#: netbox/wireless/choices.py:469 msgid "WPA Personal (PSK)" msgstr "WPA Personnel (PSK)" -#: wireless/choices.py:470 +#: netbox/wireless/choices.py:470 msgid "WPA Enterprise" msgstr "WPA Entreprise" -#: wireless/forms/bulk_edit.py:73 wireless/forms/bulk_edit.py:120 -#: wireless/forms/bulk_import.py:68 wireless/forms/bulk_import.py:71 -#: wireless/forms/bulk_import.py:110 wireless/forms/bulk_import.py:113 -#: wireless/forms/filtersets.py:59 wireless/forms/filtersets.py:93 +#: netbox/wireless/forms/bulk_edit.py:73 +#: netbox/wireless/forms/bulk_edit.py:120 +#: netbox/wireless/forms/bulk_import.py:68 +#: netbox/wireless/forms/bulk_import.py:71 +#: netbox/wireless/forms/bulk_import.py:110 +#: netbox/wireless/forms/bulk_import.py:113 +#: netbox/wireless/forms/filtersets.py:59 +#: netbox/wireless/forms/filtersets.py:93 msgid "Authentication cipher" msgstr "Algorithme de chiffrement pour l'authentification" -#: wireless/forms/bulk_edit.py:134 wireless/forms/bulk_import.py:116 -#: wireless/forms/bulk_import.py:119 wireless/forms/filtersets.py:106 +#: 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" -#: wireless/forms/bulk_import.py:52 +#: netbox/wireless/forms/bulk_import.py:52 msgid "Bridged VLAN" msgstr "VLAN bridgé" -#: wireless/forms/bulk_import.py:89 wireless/tables/wirelesslink.py:28 +#: netbox/wireless/forms/bulk_import.py:89 +#: netbox/wireless/tables/wirelesslink.py:28 msgid "Interface A" msgstr "Interface A" -#: wireless/forms/bulk_import.py:93 wireless/tables/wirelesslink.py:37 +#: netbox/wireless/forms/bulk_import.py:93 +#: netbox/wireless/tables/wirelesslink.py:37 msgid "Interface B" msgstr "Interface B" -#: wireless/forms/model_forms.py:161 +#: netbox/wireless/forms/model_forms.py:161 msgid "Side B" msgstr "Côté B" -#: wireless/models.py:31 +#: netbox/wireless/models.py:31 msgid "authentication cipher" msgstr "algorithme de chiffrement pour l'authentification" -#: wireless/models.py:69 +#: netbox/wireless/models.py:69 msgid "wireless LAN group" msgstr "groupe réseaux sans fil" -#: wireless/models.py:70 +#: netbox/wireless/models.py:70 msgid "wireless LAN groups" msgstr "groupes réseaux sans fil" -#: wireless/models.py:116 +#: netbox/wireless/models.py:116 msgid "wireless LAN" msgstr "Réseau sans fil" -#: wireless/models.py:144 +#: netbox/wireless/models.py:144 msgid "interface A" msgstr "interface A" -#: wireless/models.py:151 +#: netbox/wireless/models.py:151 msgid "interface B" msgstr "interface B" -#: wireless/models.py:165 +#: netbox/wireless/models.py:165 msgid "distance" msgstr "distance" -#: wireless/models.py:172 +#: netbox/wireless/models.py:172 msgid "distance unit" msgstr "unité de distance" -#: wireless/models.py:219 +#: netbox/wireless/models.py:219 msgid "wireless link" msgstr "liaison sans fil" -#: wireless/models.py:220 +#: netbox/wireless/models.py:220 msgid "wireless links" msgstr "liaisons sans fil" -#: wireless/models.py:236 +#: netbox/wireless/models.py:236 msgid "Must specify a unit when setting a wireless distance" msgstr "" "Vous devez spécifier une unité lors du réglage d'une distance sans fil" -#: wireless/models.py:242 wireless/models.py:248 +#: netbox/wireless/models.py:242 netbox/wireless/models.py:248 #, python-brace-format msgid "{type} is not a wireless interface." msgstr "{type} n'est pas une interface sans fil." -#: wireless/utils.py:16 +#: netbox/wireless/utils.py:16 #, python-brace-format msgid "Invalid channel value: {channel}" msgstr "Valeur de canal non valide : {channel}" -#: wireless/utils.py:26 +#: netbox/wireless/utils.py:26 #, python-brace-format msgid "Invalid channel attribute: {name}" msgstr "Attribut de canal non valide : {name}" diff --git a/netbox/translations/it/LC_MESSAGES/django.mo b/netbox/translations/it/LC_MESSAGES/django.mo index 839e15400..01dc8e853 100644 Binary files a/netbox/translations/it/LC_MESSAGES/django.mo and b/netbox/translations/it/LC_MESSAGES/django.mo differ diff --git a/netbox/translations/it/LC_MESSAGES/django.po b/netbox/translations/it/LC_MESSAGES/django.po index af1ed0224..21a038c55 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: 2024-10-28 19:20+0000\n" +"POT-Creation-Date: 2024-12-12 05:02+0000\n" "PO-Revision-Date: 2023-10-30 17:48+0000\n" "Last-Translator: Jeremy Stretch, 2024\n" "Language-Team: Italian (https://app.transifex.com/netbox-community/teams/178115/it/)\n" @@ -24,1877 +24,2144 @@ msgstr "" "Language: it\n" "Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" -#: account/tables.py:27 templates/account/token.html:22 -#: templates/users/token.html:17 users/forms/bulk_import.py:39 -#: users/forms/model_forms.py:112 +#: netbox/account/tables.py:27 netbox/templates/account/token.html:22 +#: netbox/templates/users/token.html:17 netbox/users/forms/bulk_import.py:39 +#: netbox/users/forms/model_forms.py:112 msgid "Key" msgstr "Chiave" -#: account/tables.py:31 users/forms/filtersets.py:132 +#: netbox/account/tables.py:31 netbox/users/forms/filtersets.py:132 msgid "Write Enabled" msgstr "Scrittura abilitata" -#: account/tables.py:35 core/choices.py:86 core/tables/jobs.py:29 -#: core/tables/tasks.py:79 extras/tables/tables.py:335 -#: extras/tables/tables.py:566 templates/account/token.html:43 -#: templates/core/configrevision.html:26 -#: templates/core/configrevision_restore.html:12 templates/core/job.html:69 -#: templates/core/rq_task.html:16 templates/core/rq_task.html:73 -#: templates/core/rq_worker.html:14 -#: templates/extras/htmx/script_result.html:12 -#: templates/extras/journalentry.html:22 templates/generic/object.html:58 -#: templates/users/token.html:35 +#: netbox/account/tables.py:35 netbox/core/choices.py:86 +#: 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 +#: netbox/templates/core/configrevision.html:26 +#: netbox/templates/core/configrevision_restore.html:12 +#: netbox/templates/core/job.html:69 netbox/templates/core/rq_task.html:16 +#: netbox/templates/core/rq_task.html:73 +#: netbox/templates/core/rq_worker.html:14 +#: netbox/templates/extras/htmx/script_result.html:12 +#: netbox/templates/extras/journalentry.html:22 +#: netbox/templates/generic/object.html:58 +#: netbox/templates/users/token.html:35 msgid "Created" msgstr "Creato" -#: account/tables.py:39 templates/account/token.html:47 -#: templates/users/token.html:39 users/forms/bulk_edit.py:117 -#: users/forms/filtersets.py:136 +#: netbox/account/tables.py:39 netbox/templates/account/token.html:47 +#: netbox/templates/users/token.html:39 netbox/users/forms/bulk_edit.py:117 +#: netbox/users/forms/filtersets.py:136 msgid "Expires" msgstr "Scade" -#: account/tables.py:42 users/forms/filtersets.py:141 +#: netbox/account/tables.py:42 netbox/users/forms/filtersets.py:141 msgid "Last Used" msgstr "Ultimo utilizzo" -#: account/tables.py:45 templates/account/token.html:55 -#: templates/users/token.html:47 users/forms/bulk_edit.py:122 -#: users/forms/model_forms.py:124 +#: netbox/account/tables.py:45 netbox/templates/account/token.html:55 +#: netbox/templates/users/token.html:47 netbox/users/forms/bulk_edit.py:122 +#: netbox/users/forms/model_forms.py:124 msgid "Allowed IPs" msgstr "IP consentiti" -#: account/views.py:114 +#: netbox/account/views.py:114 #, python-brace-format msgid "Logged in as {user}." msgstr "Effettuato l'accesso come {user}." -#: account/views.py:164 +#: netbox/account/views.py:164 msgid "You have logged out." msgstr "Ti sei disconnesso." -#: account/views.py:216 +#: netbox/account/views.py:216 msgid "Your preferences have been updated." msgstr "Le tue preferenze sono state aggiornate." -#: account/views.py:239 +#: netbox/account/views.py:239 msgid "LDAP-authenticated user credentials cannot be changed within NetBox." msgstr "" "Le credenziali utente autenticate con LDAP non possono essere modificate " "all'interno di NetBox." -#: account/views.py:254 +#: netbox/account/views.py:254 msgid "Your password has been changed successfully." msgstr "La tua password è stata cambiata con successo." -#: circuits/choices.py:21 dcim/choices.py:20 dcim/choices.py:102 -#: dcim/choices.py:185 dcim/choices.py:237 dcim/choices.py:1530 -#: dcim/choices.py:1606 dcim/choices.py:1656 virtualization/choices.py:20 -#: virtualization/choices.py:45 vpn/choices.py:18 +#: netbox/circuits/choices.py:21 netbox/dcim/choices.py:20 +#: netbox/dcim/choices.py:102 netbox/dcim/choices.py: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 msgid "Planned" msgstr "Pianificato" -#: circuits/choices.py:22 netbox/navigation/menu.py:305 +#: netbox/circuits/choices.py:22 netbox/netbox/navigation/menu.py:305 msgid "Provisioning" msgstr "Approvvigionamento" -#: circuits/choices.py:23 core/tables/tasks.py:22 dcim/choices.py:22 -#: dcim/choices.py:103 dcim/choices.py:184 dcim/choices.py:236 -#: dcim/choices.py:1605 dcim/choices.py:1655 extras/tables/tables.py:495 -#: ipam/choices.py:31 ipam/choices.py:49 ipam/choices.py:69 -#: ipam/choices.py:154 templates/extras/configcontext.html:25 -#: templates/users/user.html:37 users/forms/bulk_edit.py:38 -#: virtualization/choices.py:22 virtualization/choices.py:44 vpn/choices.py:19 -#: wireless/choices.py:25 +#: netbox/circuits/choices.py:23 netbox/core/tables/tasks.py:22 +#: netbox/dcim/choices.py:22 netbox/dcim/choices.py:103 +#: netbox/dcim/choices.py: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/templates/users/user.html:37 netbox/users/forms/bulk_edit.py:38 +#: netbox/virtualization/choices.py:22 netbox/virtualization/choices.py:44 +#: netbox/vpn/choices.py:19 netbox/wireless/choices.py:25 msgid "Active" msgstr "Attivo" -#: circuits/choices.py:24 dcim/choices.py:183 dcim/choices.py:235 -#: dcim/choices.py:1604 dcim/choices.py:1657 virtualization/choices.py:24 -#: virtualization/choices.py:43 +#: 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 msgid "Offline" msgstr "Offline" -#: circuits/choices.py:25 +#: netbox/circuits/choices.py:25 msgid "Deprovisioning" msgstr "Deprovisioning" -#: circuits/choices.py:26 +#: netbox/circuits/choices.py:26 msgid "Decommissioned" msgstr "Dismesso" -#: circuits/choices.py:90 dcim/choices.py:1617 tenancy/choices.py:17 +#: netbox/circuits/choices.py:90 netbox/dcim/choices.py:1619 +#: netbox/tenancy/choices.py:17 msgid "Primary" msgstr "Primaria" -#: circuits/choices.py:91 ipam/choices.py:90 tenancy/choices.py:18 +#: netbox/circuits/choices.py:91 netbox/ipam/choices.py:90 +#: netbox/tenancy/choices.py:18 msgid "Secondary" msgstr "Secondario" -#: circuits/choices.py:92 tenancy/choices.py:19 +#: netbox/circuits/choices.py:92 netbox/tenancy/choices.py:19 msgid "Tertiary" msgstr "Terziario" -#: circuits/choices.py:93 tenancy/choices.py:20 +#: netbox/circuits/choices.py:93 netbox/tenancy/choices.py:20 msgid "Inactive" msgstr "Inattivo" -#: circuits/filtersets.py:31 circuits/filtersets.py:198 dcim/filtersets.py:98 -#: dcim/filtersets.py:152 dcim/filtersets.py:212 dcim/filtersets.py:333 -#: dcim/filtersets.py:464 dcim/filtersets.py:1021 dcim/filtersets.py:1368 -#: dcim/filtersets.py:1903 dcim/filtersets.py:2146 dcim/filtersets.py:2204 -#: ipam/filtersets.py:339 ipam/filtersets.py:959 -#: virtualization/filtersets.py:45 virtualization/filtersets.py:173 -#: vpn/filtersets.py:358 +#: 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:339 netbox/ipam/filtersets.py:959 +#: netbox/virtualization/filtersets.py:45 +#: netbox/virtualization/filtersets.py:173 netbox/vpn/filtersets.py:358 msgid "Region (ID)" msgstr "Regione (ID)" -#: circuits/filtersets.py:38 circuits/filtersets.py:205 dcim/filtersets.py:105 -#: dcim/filtersets.py:158 dcim/filtersets.py:219 dcim/filtersets.py:340 -#: dcim/filtersets.py:471 dcim/filtersets.py:1028 dcim/filtersets.py:1375 -#: dcim/filtersets.py:1910 dcim/filtersets.py:2153 dcim/filtersets.py:2211 -#: extras/filtersets.py:509 ipam/filtersets.py:346 ipam/filtersets.py:966 -#: virtualization/filtersets.py:52 virtualization/filtersets.py:180 -#: vpn/filtersets.py:353 +#: 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:346 +#: netbox/ipam/filtersets.py:966 netbox/virtualization/filtersets.py:52 +#: netbox/virtualization/filtersets.py:180 netbox/vpn/filtersets.py:353 msgid "Region (slug)" msgstr "Regione (slug)" -#: circuits/filtersets.py:44 circuits/filtersets.py:211 dcim/filtersets.py:128 -#: dcim/filtersets.py:225 dcim/filtersets.py:346 dcim/filtersets.py:477 -#: dcim/filtersets.py:1034 dcim/filtersets.py:1381 dcim/filtersets.py:1916 -#: dcim/filtersets.py:2159 dcim/filtersets.py:2217 ipam/filtersets.py:352 -#: ipam/filtersets.py:972 virtualization/filtersets.py:58 -#: virtualization/filtersets.py:186 +#: 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:352 +#: netbox/ipam/filtersets.py:972 netbox/virtualization/filtersets.py:58 +#: netbox/virtualization/filtersets.py:186 msgid "Site group (ID)" msgstr "Gruppo del sito (ID)" -#: circuits/filtersets.py:51 circuits/filtersets.py:218 dcim/filtersets.py:135 -#: dcim/filtersets.py:232 dcim/filtersets.py:353 dcim/filtersets.py:484 -#: dcim/filtersets.py:1041 dcim/filtersets.py:1388 dcim/filtersets.py:1923 -#: dcim/filtersets.py:2166 dcim/filtersets.py:2224 extras/filtersets.py:515 -#: ipam/filtersets.py:359 ipam/filtersets.py:979 -#: virtualization/filtersets.py:65 virtualization/filtersets.py:193 +#: 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:359 netbox/ipam/filtersets.py:979 +#: netbox/virtualization/filtersets.py:65 +#: netbox/virtualization/filtersets.py:193 msgid "Site group (slug)" msgstr "Gruppo del sito (slug)" -#: circuits/filtersets.py:56 circuits/forms/bulk_edit.py:188 -#: circuits/forms/bulk_edit.py:216 circuits/forms/bulk_import.py:124 -#: circuits/forms/filtersets.py:51 circuits/forms/filtersets.py:171 -#: circuits/forms/filtersets.py:209 circuits/forms/model_forms.py:138 -#: circuits/forms/model_forms.py:154 circuits/tables/circuits.py:113 -#: dcim/forms/bulk_edit.py:168 dcim/forms/bulk_edit.py:329 -#: dcim/forms/bulk_edit.py:677 dcim/forms/bulk_edit.py:873 -#: dcim/forms/bulk_import.py:131 dcim/forms/bulk_import.py:230 -#: dcim/forms/bulk_import.py:309 dcim/forms/bulk_import.py:540 -#: dcim/forms/bulk_import.py:1311 dcim/forms/bulk_import.py:1339 -#: dcim/forms/filtersets.py:87 dcim/forms/filtersets.py:225 -#: dcim/forms/filtersets.py:342 dcim/forms/filtersets.py:439 -#: dcim/forms/filtersets.py:753 dcim/forms/filtersets.py:997 -#: dcim/forms/filtersets.py:1021 dcim/forms/filtersets.py:1111 -#: dcim/forms/filtersets.py:1149 dcim/forms/filtersets.py:1584 -#: dcim/forms/filtersets.py:1608 dcim/forms/filtersets.py:1632 -#: dcim/forms/model_forms.py:137 dcim/forms/model_forms.py:165 -#: dcim/forms/model_forms.py:238 dcim/forms/model_forms.py:463 -#: dcim/forms/model_forms.py:723 dcim/forms/object_create.py:391 -#: dcim/tables/devices.py:153 dcim/tables/power.py:26 dcim/tables/power.py:93 -#: dcim/tables/racks.py:122 dcim/tables/racks.py:207 dcim/tables/sites.py:134 -#: extras/filtersets.py:525 ipam/forms/bulk_edit.py:218 -#: ipam/forms/bulk_edit.py:285 ipam/forms/bulk_edit.py:484 -#: ipam/forms/bulk_import.py:171 ipam/forms/bulk_import.py:429 -#: ipam/forms/filtersets.py:153 ipam/forms/filtersets.py:231 -#: ipam/forms/filtersets.py:432 ipam/forms/filtersets.py:489 -#: ipam/forms/model_forms.py:205 ipam/forms/model_forms.py:636 -#: ipam/tables/ip.py:245 ipam/tables/vlans.py:118 ipam/tables/vlans.py:221 -#: templates/circuits/inc/circuit_termination_fields.html:6 -#: templates/dcim/device.html:22 templates/dcim/inc/cable_termination.html:8 -#: templates/dcim/inc/cable_termination.html:33 -#: templates/dcim/location.html:37 templates/dcim/powerpanel.html:22 -#: templates/dcim/rack.html:20 templates/dcim/rackreservation.html:28 -#: templates/dcim/site.html:28 templates/ipam/prefix.html:56 -#: templates/ipam/vlan.html:23 templates/ipam/vlan_edit.html:40 -#: templates/virtualization/cluster.html:42 -#: templates/virtualization/virtualmachine.html:95 -#: virtualization/forms/bulk_edit.py:91 virtualization/forms/bulk_edit.py:109 -#: virtualization/forms/bulk_edit.py:124 -#: virtualization/forms/bulk_import.py:59 -#: virtualization/forms/bulk_import.py:85 -#: virtualization/forms/filtersets.py:79 -#: virtualization/forms/filtersets.py:148 -#: virtualization/forms/model_forms.py:71 -#: virtualization/forms/model_forms.py:104 -#: virtualization/forms/model_forms.py:171 -#: virtualization/tables/clusters.py:77 -#: virtualization/tables/virtualmachines.py:63 vpn/forms/filtersets.py:266 -#: wireless/forms/model_forms.py:76 wireless/forms/model_forms.py:118 +#: 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/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/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/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 msgid "Site" msgstr "Sito" -#: circuits/filtersets.py:62 circuits/filtersets.py:229 -#: circuits/filtersets.py:274 dcim/filtersets.py:242 dcim/filtersets.py:363 -#: dcim/filtersets.py:458 extras/filtersets.py:531 ipam/filtersets.py:238 -#: ipam/filtersets.py:369 ipam/filtersets.py:989 -#: virtualization/filtersets.py:75 virtualization/filtersets.py:203 -#: vpn/filtersets.py:363 +#: 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/virtualization/filtersets.py:75 +#: netbox/virtualization/filtersets.py:203 netbox/vpn/filtersets.py:363 msgid "Site (slug)" msgstr "Sito (slug)" -#: circuits/filtersets.py:67 +#: netbox/circuits/filtersets.py:67 msgid "ASN (ID)" msgstr "ASN (ID)" -#: circuits/filtersets.py:73 circuits/forms/filtersets.py:31 -#: ipam/forms/model_forms.py:159 ipam/models/asns.py:108 -#: ipam/models/asns.py:125 ipam/tables/asn.py:41 templates/ipam/asn.html:20 +#: 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/templates/ipam/asn.html:20 msgid "ASN" msgstr "ASN" -#: circuits/filtersets.py:95 circuits/filtersets.py:122 -#: circuits/filtersets.py:156 circuits/filtersets.py:283 -#: circuits/filtersets.py:325 ipam/filtersets.py:243 +#: 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 msgid "Provider (ID)" msgstr "Provider (ID)" -#: circuits/filtersets.py:101 circuits/filtersets.py:128 -#: circuits/filtersets.py:162 circuits/filtersets.py:289 -#: circuits/filtersets.py:331 ipam/filtersets.py:249 +#: 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 msgid "Provider (slug)" msgstr "Provider (slug)" -#: circuits/filtersets.py:167 +#: netbox/circuits/filtersets.py:167 msgid "Provider account (ID)" msgstr "Provider account (ID)" -#: circuits/filtersets.py:173 +#: netbox/circuits/filtersets.py:173 msgid "Provider account (account)" msgstr "Provider account (account)" -#: circuits/filtersets.py:178 +#: netbox/circuits/filtersets.py:178 msgid "Provider network (ID)" msgstr "Provider network (ID)" -#: circuits/filtersets.py:182 +#: netbox/circuits/filtersets.py:182 msgid "Circuit type (ID)" msgstr "Tipo di circuito (ID)" -#: circuits/filtersets.py:188 +#: netbox/circuits/filtersets.py:188 msgid "Circuit type (slug)" msgstr "Tipo di circuito (slug)" -#: circuits/filtersets.py:223 circuits/filtersets.py:268 -#: dcim/filtersets.py:236 dcim/filtersets.py:357 dcim/filtersets.py:452 -#: dcim/filtersets.py:1045 dcim/filtersets.py:1393 dcim/filtersets.py:1928 -#: dcim/filtersets.py:2170 dcim/filtersets.py:2229 ipam/filtersets.py:232 -#: ipam/filtersets.py:363 ipam/filtersets.py:983 -#: virtualization/filtersets.py:69 virtualization/filtersets.py:197 -#: vpn/filtersets.py:368 +#: 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:232 netbox/ipam/filtersets.py:363 +#: netbox/ipam/filtersets.py:983 netbox/virtualization/filtersets.py:69 +#: netbox/virtualization/filtersets.py:197 netbox/vpn/filtersets.py:368 msgid "Site (ID)" msgstr "Sito (ID)" -#: circuits/filtersets.py:233 circuits/filtersets.py:237 +#: netbox/circuits/filtersets.py:233 netbox/circuits/filtersets.py:237 msgid "Termination A (ID)" msgstr "Terminazione A (ID)" -#: circuits/filtersets.py:260 circuits/filtersets.py:320 core/filtersets.py:77 -#: core/filtersets.py:136 core/filtersets.py:173 dcim/filtersets.py:751 -#: dcim/filtersets.py:1362 dcim/filtersets.py:2277 extras/filtersets.py:41 -#: extras/filtersets.py:63 extras/filtersets.py:92 extras/filtersets.py:132 -#: extras/filtersets.py:181 extras/filtersets.py:209 extras/filtersets.py:239 -#: extras/filtersets.py:276 extras/filtersets.py:348 extras/filtersets.py:391 -#: extras/filtersets.py:438 extras/filtersets.py:498 extras/filtersets.py:657 -#: extras/filtersets.py:703 ipam/forms/model_forms.py:449 -#: netbox/filtersets.py:282 netbox/forms/__init__.py:22 -#: netbox/forms/base.py:167 templates/htmx/object_selector.html:28 -#: templates/inc/filter_list.html:46 templates/ipam/ipaddress_assign.html:29 -#: templates/search.html:7 templates/search.html:26 tenancy/filtersets.py:99 -#: users/filtersets.py:23 users/filtersets.py:57 users/filtersets.py:102 -#: users/filtersets.py:150 utilities/forms/forms.py:104 -#: utilities/templates/navigation/menu.html:16 +#: 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/templates/htmx/object_selector.html:28 +#: netbox/templates/inc/filter_list.html:46 +#: netbox/templates/ipam/ipaddress_assign.html:29 +#: netbox/templates/search.html:7 netbox/templates/search.html:26 +#: netbox/tenancy/filtersets.py:99 netbox/users/filtersets.py:23 +#: netbox/users/filtersets.py:57 netbox/users/filtersets.py:102 +#: netbox/users/filtersets.py:150 netbox/utilities/forms/forms.py:104 +#: netbox/utilities/templates/navigation/menu.html:16 msgid "Search" msgstr "Cerca" -#: circuits/filtersets.py:264 circuits/forms/bulk_edit.py:172 -#: circuits/forms/bulk_edit.py:246 circuits/forms/bulk_import.py:115 -#: circuits/forms/filtersets.py:198 circuits/forms/filtersets.py:214 -#: circuits/forms/filtersets.py:260 circuits/forms/model_forms.py:111 -#: circuits/forms/model_forms.py:133 circuits/forms/model_forms.py:199 -#: circuits/tables/circuits.py:104 circuits/tables/circuits.py:164 -#: dcim/forms/connections.py:73 templates/circuits/circuit.html:15 -#: templates/circuits/circuitgroupassignment.html:26 -#: templates/circuits/circuittermination.html:19 -#: templates/dcim/inc/cable_termination.html:55 -#: templates/dcim/trace/circuit.html:4 +#: 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/templates/circuits/circuit.html:15 +#: netbox/templates/circuits/circuitgroupassignment.html:26 +#: 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" -#: circuits/filtersets.py:278 +#: netbox/circuits/filtersets.py:278 msgid "ProviderNetwork (ID)" msgstr "Provider network (ID)" -#: circuits/filtersets.py:335 +#: netbox/circuits/filtersets.py:335 msgid "Circuit (ID)" msgstr "Circuito (ID)" -#: circuits/filtersets.py:341 +#: netbox/circuits/filtersets.py:341 msgid "Circuit (CID)" msgstr "Circuito (CID)" -#: circuits/filtersets.py:345 +#: netbox/circuits/filtersets.py:345 msgid "Circuit group (ID)" msgstr "Gruppo di circuiti (ID)" -#: circuits/filtersets.py:351 +#: netbox/circuits/filtersets.py:351 msgid "Circuit group (slug)" msgstr "Gruppo di circuiti (slug)" -#: circuits/forms/bulk_edit.py:30 circuits/forms/filtersets.py:56 -#: circuits/forms/model_forms.py:29 circuits/tables/providers.py:33 -#: dcim/forms/bulk_edit.py:128 dcim/forms/filtersets.py:195 -#: dcim/forms/model_forms.py:123 dcim/tables/sites.py:94 -#: ipam/models/asns.py:126 ipam/tables/asn.py:27 ipam/views.py:213 -#: netbox/navigation/menu.py:172 netbox/navigation/menu.py:175 -#: templates/circuits/provider.html:23 +#: 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/templates/circuits/provider.html:23 msgid "ASNs" msgstr "ASN" -#: circuits/forms/bulk_edit.py:34 circuits/forms/bulk_edit.py:56 -#: circuits/forms/bulk_edit.py:83 circuits/forms/bulk_edit.py:104 -#: circuits/forms/bulk_edit.py:164 circuits/forms/bulk_edit.py:183 -#: circuits/forms/bulk_edit.py:228 core/forms/bulk_edit.py:28 -#: dcim/forms/bulk_create.py:35 dcim/forms/bulk_edit.py:73 -#: dcim/forms/bulk_edit.py:92 dcim/forms/bulk_edit.py:151 -#: dcim/forms/bulk_edit.py:192 dcim/forms/bulk_edit.py:210 -#: dcim/forms/bulk_edit.py:288 dcim/forms/bulk_edit.py:432 -#: dcim/forms/bulk_edit.py:466 dcim/forms/bulk_edit.py:481 -#: dcim/forms/bulk_edit.py:540 dcim/forms/bulk_edit.py:584 -#: dcim/forms/bulk_edit.py:618 dcim/forms/bulk_edit.py:642 -#: dcim/forms/bulk_edit.py:715 dcim/forms/bulk_edit.py:767 -#: dcim/forms/bulk_edit.py:819 dcim/forms/bulk_edit.py:842 -#: dcim/forms/bulk_edit.py:890 dcim/forms/bulk_edit.py:960 -#: dcim/forms/bulk_edit.py:1013 dcim/forms/bulk_edit.py:1048 -#: dcim/forms/bulk_edit.py:1088 dcim/forms/bulk_edit.py:1132 -#: dcim/forms/bulk_edit.py:1177 dcim/forms/bulk_edit.py:1204 -#: dcim/forms/bulk_edit.py:1222 dcim/forms/bulk_edit.py:1240 -#: dcim/forms/bulk_edit.py:1258 dcim/forms/bulk_edit.py:1682 -#: extras/forms/bulk_edit.py:39 extras/forms/bulk_edit.py:149 -#: extras/forms/bulk_edit.py:178 extras/forms/bulk_edit.py:208 -#: extras/forms/bulk_edit.py:256 extras/forms/bulk_edit.py:274 -#: extras/forms/bulk_edit.py:298 extras/forms/bulk_edit.py:312 -#: extras/forms/bulk_edit.py:339 extras/tables/tables.py:79 -#: ipam/forms/bulk_edit.py:53 ipam/forms/bulk_edit.py:73 -#: ipam/forms/bulk_edit.py:93 ipam/forms/bulk_edit.py:117 -#: ipam/forms/bulk_edit.py:146 ipam/forms/bulk_edit.py:175 -#: ipam/forms/bulk_edit.py:194 ipam/forms/bulk_edit.py:276 -#: ipam/forms/bulk_edit.py:321 ipam/forms/bulk_edit.py:369 -#: ipam/forms/bulk_edit.py:412 ipam/forms/bulk_edit.py:428 -#: ipam/forms/bulk_edit.py:516 ipam/forms/bulk_edit.py:547 -#: templates/account/token.html:35 templates/circuits/circuit.html:59 -#: templates/circuits/circuitgroup.html:32 -#: templates/circuits/circuittype.html:26 -#: templates/circuits/inc/circuit_termination_fields.html:88 -#: templates/circuits/provider.html:33 -#: templates/circuits/providernetwork.html:32 -#: templates/core/datasource.html:54 templates/core/plugin.html:80 -#: templates/dcim/cable.html:36 templates/dcim/consoleport.html:44 -#: templates/dcim/consoleserverport.html:44 templates/dcim/device.html:94 -#: templates/dcim/devicebay.html:32 templates/dcim/devicerole.html:30 -#: templates/dcim/devicetype.html:33 templates/dcim/frontport.html:58 -#: templates/dcim/interface.html:69 templates/dcim/inventoryitem.html:60 -#: templates/dcim/inventoryitemrole.html:22 templates/dcim/location.html:33 -#: templates/dcim/manufacturer.html:40 templates/dcim/module.html:73 -#: templates/dcim/modulebay.html:42 templates/dcim/moduletype.html:37 -#: templates/dcim/platform.html:33 templates/dcim/powerfeed.html:40 -#: templates/dcim/poweroutlet.html:40 templates/dcim/powerpanel.html:30 -#: templates/dcim/powerport.html:40 templates/dcim/rack.html:53 -#: templates/dcim/rackreservation.html:62 templates/dcim/rackrole.html:26 -#: templates/dcim/racktype.html:24 templates/dcim/rearport.html:54 -#: templates/dcim/region.html:33 templates/dcim/site.html:60 -#: templates/dcim/sitegroup.html:33 templates/dcim/virtualchassis.html:31 -#: templates/extras/configcontext.html:21 -#: templates/extras/configtemplate.html:17 -#: templates/extras/customfield.html:34 -#: templates/extras/dashboard/widget_add.html:14 -#: templates/extras/eventrule.html:21 templates/extras/exporttemplate.html:19 -#: templates/extras/notificationgroup.html:20 -#: templates/extras/savedfilter.html:17 templates/extras/script_list.html:45 -#: templates/extras/tag.html:20 templates/extras/webhook.html:17 -#: templates/generic/bulk_import.html:120 templates/ipam/aggregate.html:43 -#: templates/ipam/asn.html:42 templates/ipam/asnrange.html:38 -#: templates/ipam/fhrpgroup.html:34 templates/ipam/ipaddress.html:55 -#: templates/ipam/iprange.html:67 templates/ipam/prefix.html:81 -#: templates/ipam/rir.html:26 templates/ipam/role.html:26 -#: templates/ipam/routetarget.html:21 templates/ipam/service.html:50 -#: templates/ipam/servicetemplate.html:27 templates/ipam/vlan.html:62 -#: templates/ipam/vlangroup.html:34 templates/ipam/vrf.html:33 -#: templates/tenancy/contact.html:67 templates/tenancy/contactgroup.html:25 -#: templates/tenancy/contactrole.html:22 templates/tenancy/tenant.html:24 -#: templates/tenancy/tenantgroup.html:33 templates/users/group.html:21 -#: templates/users/objectpermission.html:21 templates/users/token.html:27 -#: templates/virtualization/cluster.html:25 -#: templates/virtualization/clustergroup.html:26 -#: templates/virtualization/clustertype.html:26 -#: templates/virtualization/virtualdisk.html:39 -#: templates/virtualization/virtualmachine.html:31 -#: templates/virtualization/vminterface.html:51 -#: templates/vpn/ikepolicy.html:17 templates/vpn/ikeproposal.html:17 -#: templates/vpn/ipsecpolicy.html:17 templates/vpn/ipsecprofile.html:17 -#: templates/vpn/ipsecprofile.html:40 templates/vpn/ipsecprofile.html:73 -#: templates/vpn/ipsecproposal.html:17 templates/vpn/l2vpn.html:26 -#: templates/vpn/tunnel.html:33 templates/vpn/tunnelgroup.html:30 -#: templates/wireless/wirelesslan.html:26 -#: templates/wireless/wirelesslangroup.html:33 -#: templates/wireless/wirelesslink.html:34 tenancy/forms/bulk_edit.py:32 -#: tenancy/forms/bulk_edit.py:80 tenancy/forms/bulk_edit.py:122 -#: users/forms/bulk_edit.py:64 users/forms/bulk_edit.py:82 -#: users/forms/bulk_edit.py:112 virtualization/forms/bulk_edit.py:32 -#: virtualization/forms/bulk_edit.py:46 virtualization/forms/bulk_edit.py:100 -#: virtualization/forms/bulk_edit.py:177 virtualization/forms/bulk_edit.py:228 -#: virtualization/forms/bulk_edit.py:337 vpn/forms/bulk_edit.py:28 -#: vpn/forms/bulk_edit.py:64 vpn/forms/bulk_edit.py:121 -#: vpn/forms/bulk_edit.py:155 vpn/forms/bulk_edit.py:190 -#: vpn/forms/bulk_edit.py:215 vpn/forms/bulk_edit.py:247 -#: vpn/forms/bulk_edit.py:274 wireless/forms/bulk_edit.py:29 -#: wireless/forms/bulk_edit.py:82 wireless/forms/bulk_edit.py:140 +#: 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/templates/account/token.html:35 +#: netbox/templates/circuits/circuit.html:59 +#: netbox/templates/circuits/circuitgroup.html:32 +#: netbox/templates/circuits/circuittype.html:26 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:88 +#: netbox/templates/circuits/provider.html:33 +#: netbox/templates/circuits/providernetwork.html:32 +#: netbox/templates/core/datasource.html:54 +#: netbox/templates/core/plugin.html:80 netbox/templates/dcim/cable.html:36 +#: netbox/templates/dcim/consoleport.html:44 +#: netbox/templates/dcim/consoleserverport.html:44 +#: netbox/templates/dcim/device.html:94 +#: netbox/templates/dcim/devicebay.html:32 +#: netbox/templates/dcim/devicerole.html:30 +#: netbox/templates/dcim/devicetype.html:33 +#: netbox/templates/dcim/frontport.html:58 +#: netbox/templates/dcim/interface.html:69 +#: netbox/templates/dcim/inventoryitem.html:60 +#: netbox/templates/dcim/inventoryitemrole.html:22 +#: netbox/templates/dcim/location.html:33 +#: netbox/templates/dcim/manufacturer.html:40 +#: netbox/templates/dcim/module.html:73 +#: netbox/templates/dcim/modulebay.html:42 +#: netbox/templates/dcim/moduletype.html:37 +#: netbox/templates/dcim/platform.html:33 +#: netbox/templates/dcim/powerfeed.html:40 +#: netbox/templates/dcim/poweroutlet.html:40 +#: netbox/templates/dcim/powerpanel.html:30 +#: netbox/templates/dcim/powerport.html:40 netbox/templates/dcim/rack.html:53 +#: netbox/templates/dcim/rackreservation.html:62 +#: netbox/templates/dcim/rackrole.html:26 +#: netbox/templates/dcim/racktype.html:24 +#: netbox/templates/dcim/rearport.html:54 netbox/templates/dcim/region.html:33 +#: netbox/templates/dcim/site.html:60 netbox/templates/dcim/sitegroup.html:33 +#: netbox/templates/dcim/virtualchassis.html:31 +#: netbox/templates/extras/configcontext.html:21 +#: netbox/templates/extras/configtemplate.html:17 +#: netbox/templates/extras/customfield.html:34 +#: netbox/templates/extras/dashboard/widget_add.html:14 +#: netbox/templates/extras/eventrule.html:21 +#: netbox/templates/extras/exporttemplate.html:19 +#: netbox/templates/extras/notificationgroup.html:20 +#: netbox/templates/extras/savedfilter.html:17 +#: netbox/templates/extras/script_list.html:46 +#: netbox/templates/extras/tag.html:20 netbox/templates/extras/webhook.html:17 +#: netbox/templates/generic/bulk_import.html:120 +#: netbox/templates/ipam/aggregate.html:43 netbox/templates/ipam/asn.html:42 +#: netbox/templates/ipam/asnrange.html:38 +#: netbox/templates/ipam/fhrpgroup.html:34 +#: netbox/templates/ipam/ipaddress.html:55 +#: netbox/templates/ipam/iprange.html:67 netbox/templates/ipam/prefix.html:81 +#: netbox/templates/ipam/rir.html:26 netbox/templates/ipam/role.html:26 +#: netbox/templates/ipam/routetarget.html:21 +#: netbox/templates/ipam/service.html:50 +#: netbox/templates/ipam/servicetemplate.html:27 +#: netbox/templates/ipam/vlan.html:62 netbox/templates/ipam/vlangroup.html:34 +#: netbox/templates/ipam/vrf.html:33 netbox/templates/tenancy/contact.html:67 +#: netbox/templates/tenancy/contactgroup.html:25 +#: netbox/templates/tenancy/contactrole.html:22 +#: netbox/templates/tenancy/tenant.html:24 +#: netbox/templates/tenancy/tenantgroup.html:33 +#: netbox/templates/users/group.html:21 +#: netbox/templates/users/objectpermission.html:21 +#: netbox/templates/users/token.html:27 +#: netbox/templates/virtualization/cluster.html:25 +#: netbox/templates/virtualization/clustergroup.html:26 +#: netbox/templates/virtualization/clustertype.html:26 +#: netbox/templates/virtualization/virtualdisk.html:39 +#: netbox/templates/virtualization/virtualmachine.html:31 +#: netbox/templates/virtualization/vminterface.html:51 +#: netbox/templates/vpn/ikepolicy.html:17 +#: netbox/templates/vpn/ikeproposal.html:17 +#: netbox/templates/vpn/ipsecpolicy.html:17 +#: netbox/templates/vpn/ipsecprofile.html:17 +#: netbox/templates/vpn/ipsecprofile.html:40 +#: netbox/templates/vpn/ipsecprofile.html:73 +#: netbox/templates/vpn/ipsecproposal.html:17 +#: netbox/templates/vpn/l2vpn.html:26 netbox/templates/vpn/tunnel.html:33 +#: netbox/templates/vpn/tunnelgroup.html:30 +#: netbox/templates/wireless/wirelesslan.html:26 +#: netbox/templates/wireless/wirelesslangroup.html:33 +#: netbox/templates/wireless/wirelesslink.html:34 +#: netbox/tenancy/forms/bulk_edit.py:32 netbox/tenancy/forms/bulk_edit.py:80 +#: netbox/tenancy/forms/bulk_edit.py:122 netbox/users/forms/bulk_edit.py:64 +#: netbox/users/forms/bulk_edit.py:82 netbox/users/forms/bulk_edit.py:112 +#: netbox/virtualization/forms/bulk_edit.py:32 +#: netbox/virtualization/forms/bulk_edit.py:46 +#: netbox/virtualization/forms/bulk_edit.py:100 +#: netbox/virtualization/forms/bulk_edit.py:177 +#: netbox/virtualization/forms/bulk_edit.py:228 +#: netbox/virtualization/forms/bulk_edit.py:337 +#: netbox/vpn/forms/bulk_edit.py:28 netbox/vpn/forms/bulk_edit.py:64 +#: netbox/vpn/forms/bulk_edit.py:121 netbox/vpn/forms/bulk_edit.py:155 +#: netbox/vpn/forms/bulk_edit.py:190 netbox/vpn/forms/bulk_edit.py:215 +#: netbox/vpn/forms/bulk_edit.py:247 netbox/vpn/forms/bulk_edit.py:274 +#: netbox/wireless/forms/bulk_edit.py:29 netbox/wireless/forms/bulk_edit.py:82 +#: netbox/wireless/forms/bulk_edit.py:140 msgid "Description" msgstr "Descrizione" -#: circuits/forms/bulk_edit.py:51 circuits/forms/bulk_edit.py:73 -#: circuits/forms/bulk_edit.py:123 circuits/forms/bulk_import.py:36 -#: circuits/forms/bulk_import.py:51 circuits/forms/bulk_import.py:74 -#: circuits/forms/filtersets.py:70 circuits/forms/filtersets.py:88 -#: circuits/forms/filtersets.py:116 circuits/forms/filtersets.py:131 -#: circuits/forms/filtersets.py:199 circuits/forms/filtersets.py:232 -#: circuits/forms/filtersets.py:255 circuits/forms/model_forms.py:47 -#: circuits/forms/model_forms.py:61 circuits/forms/model_forms.py:93 -#: circuits/tables/circuits.py:58 circuits/tables/circuits.py:108 -#: circuits/tables/circuits.py:160 circuits/tables/providers.py:72 -#: circuits/tables/providers.py:103 templates/circuits/circuit.html:18 -#: templates/circuits/circuittermination.html:25 -#: templates/circuits/provider.html:20 -#: templates/circuits/provideraccount.html:20 -#: templates/circuits/providernetwork.html:20 -#: templates/dcim/inc/cable_termination.html:51 +#: netbox/circuits/forms/bulk_edit.py: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/templates/circuits/circuit.html:18 +#: netbox/templates/circuits/circuittermination.html:25 +#: netbox/templates/circuits/provider.html:20 +#: netbox/templates/circuits/provideraccount.html:20 +#: netbox/templates/circuits/providernetwork.html:20 +#: netbox/templates/dcim/inc/cable_termination.html:51 msgid "Provider" msgstr "Provider " -#: circuits/forms/bulk_edit.py:80 circuits/forms/filtersets.py:91 -#: templates/circuits/providernetwork.html:28 +#: netbox/circuits/forms/bulk_edit.py:80 +#: netbox/circuits/forms/filtersets.py:91 +#: netbox/templates/circuits/providernetwork.html:28 msgid "Service ID" msgstr "ID del servizio" -#: circuits/forms/bulk_edit.py:100 circuits/forms/filtersets.py:107 -#: dcim/forms/bulk_edit.py:206 dcim/forms/bulk_edit.py:604 -#: dcim/forms/bulk_edit.py:804 dcim/forms/bulk_edit.py:1173 -#: dcim/forms/bulk_edit.py:1200 dcim/forms/bulk_edit.py:1678 -#: dcim/forms/filtersets.py:1064 dcim/forms/filtersets.py:1455 -#: dcim/forms/filtersets.py:1479 dcim/tables/devices.py:704 -#: dcim/tables/devices.py:761 dcim/tables/devices.py:1003 -#: dcim/tables/devicetypes.py:249 dcim/tables/devicetypes.py:264 -#: dcim/tables/racks.py:33 extras/forms/bulk_edit.py:270 -#: extras/tables/tables.py:443 templates/circuits/circuittype.html:30 -#: templates/dcim/cable.html:40 templates/dcim/devicerole.html:34 -#: templates/dcim/frontport.html:40 templates/dcim/inventoryitemrole.html:26 -#: templates/dcim/rackrole.html:30 templates/dcim/rearport.html:40 -#: templates/extras/tag.html:26 +#: netbox/circuits/forms/bulk_edit.py: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/templates/circuits/circuittype.html:30 +#: netbox/templates/dcim/cable.html:40 +#: netbox/templates/dcim/devicerole.html:34 +#: netbox/templates/dcim/frontport.html:40 +#: netbox/templates/dcim/inventoryitemrole.html:26 +#: netbox/templates/dcim/rackrole.html:30 +#: netbox/templates/dcim/rearport.html:40 netbox/templates/extras/tag.html:26 msgid "Color" msgstr "Colore" -#: circuits/forms/bulk_edit.py:118 circuits/forms/bulk_import.py:87 -#: circuits/forms/filtersets.py:126 core/forms/bulk_edit.py:18 -#: core/forms/filtersets.py:33 core/tables/change_logging.py:32 -#: core/tables/data.py:20 core/tables/jobs.py:18 dcim/forms/bulk_edit.py:782 -#: dcim/forms/bulk_edit.py:921 dcim/forms/bulk_edit.py:989 -#: dcim/forms/bulk_edit.py:1008 dcim/forms/bulk_edit.py:1031 -#: dcim/forms/bulk_edit.py:1073 dcim/forms/bulk_edit.py:1117 -#: dcim/forms/bulk_edit.py:1168 dcim/forms/bulk_edit.py:1195 -#: dcim/forms/bulk_import.py:188 dcim/forms/bulk_import.py:260 -#: dcim/forms/bulk_import.py:708 dcim/forms/bulk_import.py:734 -#: dcim/forms/bulk_import.py:760 dcim/forms/bulk_import.py:780 -#: dcim/forms/bulk_import.py:863 dcim/forms/bulk_import.py:957 -#: dcim/forms/bulk_import.py:999 dcim/forms/bulk_import.py:1213 -#: dcim/forms/bulk_import.py:1376 dcim/forms/filtersets.py:955 -#: dcim/forms/filtersets.py:1054 dcim/forms/filtersets.py:1175 -#: dcim/forms/filtersets.py:1247 dcim/forms/filtersets.py:1272 -#: dcim/forms/filtersets.py:1296 dcim/forms/filtersets.py:1316 -#: dcim/forms/filtersets.py:1353 dcim/forms/filtersets.py:1450 -#: dcim/forms/filtersets.py:1474 dcim/forms/model_forms.py:703 -#: dcim/forms/model_forms.py:709 dcim/forms/object_import.py:84 -#: dcim/forms/object_import.py:113 dcim/forms/object_import.py:145 -#: dcim/tables/devices.py:178 dcim/tables/devices.py:814 -#: dcim/tables/power.py:77 dcim/tables/racks.py:138 -#: extras/forms/bulk_import.py:42 extras/tables/tables.py:405 -#: extras/tables/tables.py:465 netbox/tables/tables.py:240 -#: templates/circuits/circuit.html:30 templates/core/datasource.html:38 -#: templates/dcim/cable.html:15 templates/dcim/consoleport.html:36 -#: templates/dcim/consoleserverport.html:36 templates/dcim/frontport.html:36 -#: templates/dcim/interface.html:46 templates/dcim/interface.html:169 -#: templates/dcim/interface.html:311 templates/dcim/powerfeed.html:32 -#: templates/dcim/poweroutlet.html:36 templates/dcim/powerport.html:36 -#: templates/dcim/rearport.html:36 templates/extras/eventrule.html:74 -#: templates/virtualization/cluster.html:17 templates/vpn/l2vpn.html:22 -#: templates/wireless/inc/authentication_attrs.html:8 -#: templates/wireless/inc/wirelesslink_interface.html:14 -#: virtualization/forms/bulk_edit.py:60 virtualization/forms/bulk_import.py:41 -#: virtualization/forms/filtersets.py:54 -#: virtualization/forms/model_forms.py:62 virtualization/tables/clusters.py:66 -#: vpn/forms/bulk_edit.py:264 vpn/forms/bulk_import.py:264 -#: vpn/forms/filtersets.py:217 vpn/forms/model_forms.py:84 -#: vpn/forms/model_forms.py:119 vpn/forms/model_forms.py:231 +#: netbox/circuits/forms/bulk_edit.py: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/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/core/datasource.html:38 +#: netbox/templates/dcim/cable.html:15 +#: netbox/templates/dcim/consoleport.html:36 +#: netbox/templates/dcim/consoleserverport.html:36 +#: netbox/templates/dcim/frontport.html:36 +#: netbox/templates/dcim/interface.html:46 +#: netbox/templates/dcim/interface.html:169 +#: netbox/templates/dcim/interface.html:311 +#: netbox/templates/dcim/powerfeed.html:32 +#: netbox/templates/dcim/poweroutlet.html:36 +#: netbox/templates/dcim/powerport.html:36 +#: netbox/templates/dcim/rearport.html:36 +#: netbox/templates/extras/eventrule.html:74 +#: netbox/templates/virtualization/cluster.html:17 +#: netbox/templates/vpn/l2vpn.html:22 +#: netbox/templates/wireless/inc/authentication_attrs.html:8 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:14 +#: netbox/virtualization/forms/bulk_edit.py:60 +#: netbox/virtualization/forms/bulk_import.py:41 +#: netbox/virtualization/forms/filtersets.py:54 +#: netbox/virtualization/forms/model_forms.py:62 +#: netbox/virtualization/tables/clusters.py:66 +#: netbox/vpn/forms/bulk_edit.py:264 netbox/vpn/forms/bulk_import.py:264 +#: netbox/vpn/forms/filtersets.py:217 netbox/vpn/forms/model_forms.py:84 +#: netbox/vpn/forms/model_forms.py:119 netbox/vpn/forms/model_forms.py:231 msgid "Type" msgstr "Tipo" -#: circuits/forms/bulk_edit.py:128 circuits/forms/bulk_import.py:80 -#: circuits/forms/filtersets.py:139 circuits/forms/model_forms.py:98 +#: 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 msgid "Provider account" msgstr "Provider account " -#: circuits/forms/bulk_edit.py:136 circuits/forms/bulk_import.py:93 -#: circuits/forms/filtersets.py:150 core/forms/filtersets.py:38 -#: core/forms/filtersets.py:79 core/tables/data.py:23 core/tables/jobs.py:26 -#: core/tables/tasks.py:88 dcim/forms/bulk_edit.py:106 -#: dcim/forms/bulk_edit.py:181 dcim/forms/bulk_edit.py:351 -#: dcim/forms/bulk_edit.py:700 dcim/forms/bulk_edit.py:756 -#: dcim/forms/bulk_edit.py:788 dcim/forms/bulk_edit.py:915 -#: dcim/forms/bulk_edit.py:1701 dcim/forms/bulk_import.py:88 -#: dcim/forms/bulk_import.py:147 dcim/forms/bulk_import.py:248 -#: dcim/forms/bulk_import.py:505 dcim/forms/bulk_import.py:659 -#: dcim/forms/bulk_import.py:1207 dcim/forms/bulk_import.py:1371 -#: dcim/forms/bulk_import.py:1435 dcim/forms/filtersets.py:178 -#: dcim/forms/filtersets.py:237 dcim/forms/filtersets.py:359 -#: dcim/forms/filtersets.py:799 dcim/forms/filtersets.py:924 -#: dcim/forms/filtersets.py:958 dcim/forms/filtersets.py:1059 -#: dcim/forms/filtersets.py:1170 dcim/tables/devices.py:140 -#: dcim/tables/devices.py:817 dcim/tables/devices.py:1063 -#: dcim/tables/modules.py:69 dcim/tables/power.py:74 dcim/tables/racks.py:126 -#: dcim/tables/sites.py:82 dcim/tables/sites.py:138 -#: ipam/forms/bulk_edit.py:256 ipam/forms/bulk_edit.py:306 -#: ipam/forms/bulk_edit.py:354 ipam/forms/bulk_edit.py:506 -#: ipam/forms/bulk_import.py:192 ipam/forms/bulk_import.py:257 -#: ipam/forms/bulk_import.py:293 ipam/forms/bulk_import.py:450 -#: ipam/forms/filtersets.py:210 ipam/forms/filtersets.py:281 -#: ipam/forms/filtersets.py:355 ipam/forms/filtersets.py:501 -#: ipam/forms/model_forms.py:468 ipam/tables/ip.py:237 ipam/tables/ip.py:312 -#: ipam/tables/ip.py:363 ipam/tables/ip.py:426 ipam/tables/ip.py:453 -#: ipam/tables/vlans.py:126 ipam/tables/vlans.py:232 -#: templates/circuits/circuit.html:34 templates/core/datasource.html:46 -#: templates/core/job.html:48 templates/core/rq_task.html:81 -#: templates/core/system.html:18 templates/dcim/cable.html:19 -#: templates/dcim/device.html:178 templates/dcim/location.html:45 -#: templates/dcim/module.html:69 templates/dcim/powerfeed.html:36 -#: templates/dcim/rack.html:41 templates/dcim/site.html:43 -#: templates/extras/script_list.html:47 templates/ipam/ipaddress.html:37 -#: templates/ipam/iprange.html:54 templates/ipam/prefix.html:73 -#: templates/ipam/vlan.html:48 templates/virtualization/cluster.html:21 -#: templates/virtualization/virtualmachine.html:19 -#: templates/vpn/tunnel.html:25 templates/wireless/wirelesslan.html:22 -#: templates/wireless/wirelesslink.html:17 users/forms/filtersets.py:32 -#: users/forms/model_forms.py:194 virtualization/forms/bulk_edit.py:70 -#: virtualization/forms/bulk_edit.py:118 -#: virtualization/forms/bulk_import.py:54 -#: virtualization/forms/bulk_import.py:80 -#: virtualization/forms/filtersets.py:62 -#: virtualization/forms/filtersets.py:160 virtualization/tables/clusters.py:74 -#: virtualization/tables/virtualmachines.py:60 vpn/forms/bulk_edit.py:39 -#: vpn/forms/bulk_import.py:37 vpn/forms/filtersets.py:47 -#: vpn/tables/tunnels.py:48 wireless/forms/bulk_edit.py:43 -#: wireless/forms/bulk_edit.py:105 wireless/forms/bulk_import.py:43 -#: wireless/forms/bulk_import.py:84 wireless/forms/filtersets.py:49 -#: wireless/forms/filtersets.py:83 wireless/tables/wirelesslan.py:52 -#: wireless/tables/wirelesslink.py:20 +#: 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/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:69 +#: 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/templates/circuits/circuit.html:34 +#: 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/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/vlan.html:48 +#: netbox/templates/virtualization/cluster.html:21 +#: netbox/templates/virtualization/virtualmachine.html:19 +#: netbox/templates/vpn/tunnel.html:25 +#: netbox/templates/wireless/wirelesslan.html:22 +#: netbox/templates/wireless/wirelesslink.html:17 +#: netbox/users/forms/filtersets.py: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/tables/clusters.py:74 +#: netbox/virtualization/tables/virtualmachines.py:60 +#: netbox/vpn/forms/bulk_edit.py:39 netbox/vpn/forms/bulk_import.py:37 +#: netbox/vpn/forms/filtersets.py:47 netbox/vpn/tables/tunnels.py:48 +#: netbox/wireless/forms/bulk_edit.py:43 +#: netbox/wireless/forms/bulk_edit.py:105 +#: netbox/wireless/forms/bulk_import.py:43 +#: netbox/wireless/forms/bulk_import.py:84 +#: netbox/wireless/forms/filtersets.py:49 +#: netbox/wireless/forms/filtersets.py:83 +#: netbox/wireless/tables/wirelesslan.py:52 +#: netbox/wireless/tables/wirelesslink.py:20 msgid "Status" msgstr "Status" -#: circuits/forms/bulk_edit.py:142 circuits/forms/bulk_edit.py:233 -#: circuits/forms/bulk_import.py:98 circuits/forms/bulk_import.py:158 -#: circuits/forms/filtersets.py:119 circuits/forms/filtersets.py:241 -#: dcim/forms/bulk_edit.py:122 dcim/forms/bulk_edit.py:187 -#: dcim/forms/bulk_edit.py:346 dcim/forms/bulk_edit.py:461 -#: dcim/forms/bulk_edit.py:690 dcim/forms/bulk_edit.py:794 -#: dcim/forms/bulk_edit.py:1706 dcim/forms/bulk_import.py:107 -#: dcim/forms/bulk_import.py:152 dcim/forms/bulk_import.py:241 -#: dcim/forms/bulk_import.py:334 dcim/forms/bulk_import.py:479 -#: dcim/forms/bulk_import.py:1219 dcim/forms/bulk_import.py:1428 -#: dcim/forms/filtersets.py:173 dcim/forms/filtersets.py:205 -#: dcim/forms/filtersets.py:323 dcim/forms/filtersets.py:399 -#: dcim/forms/filtersets.py:420 dcim/forms/filtersets.py:722 -#: dcim/forms/filtersets.py:916 dcim/forms/filtersets.py:978 -#: dcim/forms/filtersets.py:1008 dcim/forms/filtersets.py:1130 -#: dcim/tables/power.py:88 extras/filtersets.py:612 -#: extras/forms/filtersets.py:323 extras/forms/filtersets.py:396 -#: ipam/forms/bulk_edit.py:43 ipam/forms/bulk_edit.py:68 -#: ipam/forms/bulk_edit.py:112 ipam/forms/bulk_edit.py:141 -#: ipam/forms/bulk_edit.py:166 ipam/forms/bulk_edit.py:251 -#: ipam/forms/bulk_edit.py:301 ipam/forms/bulk_edit.py:349 -#: ipam/forms/bulk_edit.py:501 ipam/forms/bulk_import.py:38 -#: ipam/forms/bulk_import.py:67 ipam/forms/bulk_import.py:95 -#: ipam/forms/bulk_import.py:115 ipam/forms/bulk_import.py:135 -#: ipam/forms/bulk_import.py:164 ipam/forms/bulk_import.py:250 -#: ipam/forms/bulk_import.py:286 ipam/forms/bulk_import.py:443 -#: ipam/forms/filtersets.py:48 ipam/forms/filtersets.py:68 -#: ipam/forms/filtersets.py:100 ipam/forms/filtersets.py:120 -#: ipam/forms/filtersets.py:143 ipam/forms/filtersets.py:174 -#: ipam/forms/filtersets.py:267 ipam/forms/filtersets.py:310 -#: ipam/forms/filtersets.py:469 ipam/tables/ip.py:456 ipam/tables/vlans.py:229 -#: templates/circuits/circuit.html:38 templates/circuits/circuitgroup.html:36 -#: templates/dcim/cable.html:23 templates/dcim/device.html:79 -#: templates/dcim/location.html:49 templates/dcim/powerfeed.html:44 -#: templates/dcim/rack.html:32 templates/dcim/rackreservation.html:49 -#: templates/dcim/site.html:47 templates/dcim/virtualdevicecontext.html:52 -#: templates/ipam/aggregate.html:30 templates/ipam/asn.html:33 -#: templates/ipam/asnrange.html:29 templates/ipam/ipaddress.html:28 -#: templates/ipam/iprange.html:58 templates/ipam/prefix.html:29 -#: templates/ipam/routetarget.html:17 templates/ipam/vlan.html:39 -#: templates/ipam/vrf.html:20 templates/tenancy/tenant.html:17 -#: templates/virtualization/cluster.html:33 -#: templates/virtualization/virtualmachine.html:39 templates/vpn/l2vpn.html:30 -#: templates/vpn/tunnel.html:49 templates/wireless/wirelesslan.html:34 -#: templates/wireless/wirelesslink.html:25 tenancy/forms/forms.py:25 -#: tenancy/forms/forms.py:48 tenancy/forms/model_forms.py:52 -#: tenancy/tables/columns.py:64 virtualization/forms/bulk_edit.py:76 -#: virtualization/forms/bulk_edit.py:155 -#: virtualization/forms/bulk_import.py:66 -#: virtualization/forms/bulk_import.py:115 -#: virtualization/forms/filtersets.py:47 -#: virtualization/forms/filtersets.py:105 vpn/forms/bulk_edit.py:59 -#: vpn/forms/bulk_edit.py:269 vpn/forms/bulk_import.py:59 -#: vpn/forms/bulk_import.py:258 vpn/forms/filtersets.py:214 -#: wireless/forms/bulk_edit.py:63 wireless/forms/bulk_edit.py:110 -#: wireless/forms/bulk_import.py:55 wireless/forms/bulk_import.py:97 -#: wireless/forms/filtersets.py:35 wireless/forms/filtersets.py:75 +#: netbox/circuits/forms/bulk_edit.py: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/templates/circuits/circuitgroup.html:36 +#: 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 +#: netbox/templates/dcim/rackreservation.html:49 +#: netbox/templates/dcim/site.html:47 +#: netbox/templates/dcim/virtualdevicecontext.html:52 +#: netbox/templates/ipam/aggregate.html:30 netbox/templates/ipam/asn.html:33 +#: netbox/templates/ipam/asnrange.html:29 +#: netbox/templates/ipam/ipaddress.html:28 +#: netbox/templates/ipam/iprange.html:58 netbox/templates/ipam/prefix.html:29 +#: netbox/templates/ipam/routetarget.html:17 +#: netbox/templates/ipam/vlan.html:39 netbox/templates/ipam/vrf.html:20 +#: netbox/templates/tenancy/tenant.html:17 +#: netbox/templates/virtualization/cluster.html:33 +#: netbox/templates/virtualization/virtualmachine.html:39 +#: netbox/templates/vpn/l2vpn.html:30 netbox/templates/vpn/tunnel.html:49 +#: netbox/templates/wireless/wirelesslan.html:34 +#: netbox/templates/wireless/wirelesslink.html:25 +#: netbox/tenancy/forms/forms.py:25 netbox/tenancy/forms/forms.py:48 +#: netbox/tenancy/forms/model_forms.py:52 netbox/tenancy/tables/columns.py:64 +#: netbox/virtualization/forms/bulk_edit.py:76 +#: netbox/virtualization/forms/bulk_edit.py:155 +#: netbox/virtualization/forms/bulk_import.py:66 +#: netbox/virtualization/forms/bulk_import.py:115 +#: netbox/virtualization/forms/filtersets.py:47 +#: netbox/virtualization/forms/filtersets.py:105 +#: netbox/vpn/forms/bulk_edit.py:59 netbox/vpn/forms/bulk_edit.py:269 +#: netbox/vpn/forms/bulk_import.py:59 netbox/vpn/forms/bulk_import.py:258 +#: netbox/vpn/forms/filtersets.py:214 netbox/wireless/forms/bulk_edit.py:63 +#: netbox/wireless/forms/bulk_edit.py:110 +#: netbox/wireless/forms/bulk_import.py:55 +#: netbox/wireless/forms/bulk_import.py:97 +#: netbox/wireless/forms/filtersets.py:35 +#: netbox/wireless/forms/filtersets.py:75 msgid "Tenant" msgstr "Tenant" -#: circuits/forms/bulk_edit.py:147 circuits/forms/filtersets.py:174 +#: netbox/circuits/forms/bulk_edit.py:147 +#: netbox/circuits/forms/filtersets.py:174 msgid "Install date" msgstr "Data di installazione" -#: circuits/forms/bulk_edit.py:152 circuits/forms/filtersets.py:179 +#: netbox/circuits/forms/bulk_edit.py:152 +#: netbox/circuits/forms/filtersets.py:179 msgid "Termination date" msgstr "Data di dismissione" -#: circuits/forms/bulk_edit.py:158 circuits/forms/filtersets.py:186 +#: netbox/circuits/forms/bulk_edit.py:158 +#: netbox/circuits/forms/filtersets.py:186 msgid "Commit rate (Kbps)" msgstr "Commit ratet (Kbps)" -#: circuits/forms/bulk_edit.py:173 circuits/forms/model_forms.py:112 +#: netbox/circuits/forms/bulk_edit.py:173 +#: netbox/circuits/forms/model_forms.py:112 msgid "Service Parameters" msgstr "Parametri del servizio" -#: circuits/forms/bulk_edit.py:174 circuits/forms/model_forms.py:113 -#: circuits/forms/model_forms.py:183 dcim/forms/model_forms.py:139 -#: dcim/forms/model_forms.py:181 dcim/forms/model_forms.py:266 -#: dcim/forms/model_forms.py:323 dcim/forms/model_forms.py:768 -#: dcim/forms/model_forms.py:1692 ipam/forms/model_forms.py:64 -#: ipam/forms/model_forms.py:81 ipam/forms/model_forms.py:115 -#: ipam/forms/model_forms.py:136 ipam/forms/model_forms.py:160 -#: ipam/forms/model_forms.py:232 ipam/forms/model_forms.py:261 -#: ipam/forms/model_forms.py:316 netbox/navigation/menu.py:24 -#: templates/dcim/device_edit.html:85 templates/dcim/htmx/cable_edit.html:72 -#: templates/ipam/ipaddress_bulk_add.html:27 templates/ipam/vlan_edit.html:22 -#: virtualization/forms/model_forms.py:80 -#: virtualization/forms/model_forms.py:222 vpn/forms/bulk_edit.py:78 -#: vpn/forms/filtersets.py:44 vpn/forms/model_forms.py:62 -#: vpn/forms/model_forms.py:147 vpn/forms/model_forms.py:411 -#: wireless/forms/model_forms.py:54 wireless/forms/model_forms.py:170 +#: 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/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/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 msgid "Tenancy" msgstr "Tenancy" -#: circuits/forms/bulk_edit.py:193 circuits/forms/bulk_edit.py:217 -#: circuits/forms/model_forms.py:155 circuits/tables/circuits.py:117 -#: templates/circuits/inc/circuit_termination_fields.html:62 -#: templates/circuits/providernetwork.html:17 +#: 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" -#: circuits/forms/bulk_edit.py:199 +#: netbox/circuits/forms/bulk_edit.py:199 msgid "Port speed (Kbps)" msgstr "Port speed (Kbps)" -#: circuits/forms/bulk_edit.py:203 +#: netbox/circuits/forms/bulk_edit.py:203 msgid "Upstream speed (Kbps)" msgstr "Upstream speed (Kbps)" -#: circuits/forms/bulk_edit.py:206 dcim/forms/bulk_edit.py:951 -#: dcim/forms/bulk_edit.py:1315 dcim/forms/bulk_edit.py:1332 -#: dcim/forms/bulk_edit.py:1349 dcim/forms/bulk_edit.py:1367 -#: dcim/forms/bulk_edit.py:1455 dcim/forms/bulk_edit.py:1594 -#: dcim/forms/bulk_edit.py:1611 +#: 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 msgid "Mark connected" msgstr "Segna connesso" -#: circuits/forms/bulk_edit.py:219 circuits/forms/model_forms.py:157 -#: templates/circuits/inc/circuit_termination_fields.html:54 -#: templates/dcim/frontport.html:121 templates/dcim/interface.html:193 -#: templates/dcim/rearport.html:111 +#: netbox/circuits/forms/bulk_edit.py:219 +#: netbox/circuits/forms/model_forms.py:157 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:54 +#: netbox/templates/dcim/frontport.html:121 +#: netbox/templates/dcim/interface.html:193 +#: netbox/templates/dcim/rearport.html:111 msgid "Circuit Termination" msgstr "Terminazione del circuito" -#: circuits/forms/bulk_edit.py:221 circuits/forms/model_forms.py:159 +#: netbox/circuits/forms/bulk_edit.py:221 +#: netbox/circuits/forms/model_forms.py:159 msgid "Termination Details" msgstr "Dettagli sulla cessazione" -#: circuits/forms/bulk_edit.py:251 circuits/forms/filtersets.py:268 -#: circuits/tables/circuits.py:168 dcim/forms/model_forms.py:551 -#: templates/circuits/circuitgroupassignment.html:30 -#: templates/dcim/device.html:133 templates/dcim/virtualchassis.html:68 -#: templates/dcim/virtualchassis_edit.html:56 -#: templates/ipam/inc/panels/fhrp_groups.html:26 -#: tenancy/forms/bulk_edit.py:147 tenancy/forms/filtersets.py:110 +#: netbox/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/templates/dcim/device.html:133 +#: netbox/templates/dcim/virtualchassis.html:68 +#: netbox/templates/dcim/virtualchassis_edit.html:56 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:26 +#: netbox/tenancy/forms/bulk_edit.py:147 +#: netbox/tenancy/forms/filtersets.py:110 msgid "Priority" msgstr "Priorità" -#: circuits/forms/bulk_import.py:39 circuits/forms/bulk_import.py:54 -#: circuits/forms/bulk_import.py:77 +#: 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" -#: circuits/forms/bulk_import.py:83 +#: netbox/circuits/forms/bulk_import.py:83 msgid "Assigned provider account" msgstr "Account provider assegnato" -#: circuits/forms/bulk_import.py:90 +#: netbox/circuits/forms/bulk_import.py:90 msgid "Type of circuit" msgstr "Tipo di circuito" -#: circuits/forms/bulk_import.py:95 dcim/forms/bulk_import.py:90 -#: dcim/forms/bulk_import.py:149 dcim/forms/bulk_import.py:250 -#: dcim/forms/bulk_import.py:507 dcim/forms/bulk_import.py:661 -#: dcim/forms/bulk_import.py:1373 ipam/forms/bulk_import.py:194 -#: ipam/forms/bulk_import.py:259 ipam/forms/bulk_import.py:295 -#: ipam/forms/bulk_import.py:452 virtualization/forms/bulk_import.py:56 -#: virtualization/forms/bulk_import.py:82 vpn/forms/bulk_import.py:39 -#: wireless/forms/bulk_import.py:45 +#: netbox/circuits/forms/bulk_import.py: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" -#: circuits/forms/bulk_import.py:102 circuits/forms/bulk_import.py:162 -#: dcim/forms/bulk_import.py:111 dcim/forms/bulk_import.py:156 -#: dcim/forms/bulk_import.py:338 dcim/forms/bulk_import.py:483 -#: dcim/forms/bulk_import.py:1223 dcim/forms/bulk_import.py:1368 -#: dcim/forms/bulk_import.py:1432 ipam/forms/bulk_import.py:42 -#: ipam/forms/bulk_import.py:71 ipam/forms/bulk_import.py:99 -#: ipam/forms/bulk_import.py:119 ipam/forms/bulk_import.py:139 -#: ipam/forms/bulk_import.py:168 ipam/forms/bulk_import.py:254 -#: ipam/forms/bulk_import.py:290 ipam/forms/bulk_import.py:447 -#: virtualization/forms/bulk_import.py:70 -#: virtualization/forms/bulk_import.py:119 vpn/forms/bulk_import.py:63 -#: wireless/forms/bulk_import.py:59 wireless/forms/bulk_import.py:101 +#: netbox/circuits/forms/bulk_import.py: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" -#: circuits/forms/bulk_import.py:120 -#: templates/circuits/inc/circuit_termination.html:6 -#: templates/circuits/inc/circuit_termination_fields.html:15 -#: templates/dcim/cable.html:68 templates/dcim/cable.html:72 -#: vpn/forms/bulk_import.py:100 vpn/forms/filtersets.py:77 +#: netbox/circuits/forms/bulk_import.py: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" -#: circuits/forms/bulk_import.py:130 circuits/forms/filtersets.py:147 -#: circuits/forms/filtersets.py:227 circuits/forms/model_forms.py:144 +#: 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 msgid "Provider network" msgstr "Provider network" -#: circuits/forms/filtersets.py:30 circuits/forms/filtersets.py:118 -#: circuits/forms/filtersets.py:200 dcim/forms/bulk_edit.py:338 -#: dcim/forms/bulk_edit.py:441 dcim/forms/bulk_edit.py:682 -#: dcim/forms/bulk_edit.py:729 dcim/forms/bulk_edit.py:882 -#: dcim/forms/bulk_import.py:235 dcim/forms/bulk_import.py:315 -#: dcim/forms/bulk_import.py:546 dcim/forms/bulk_import.py:1317 -#: dcim/forms/bulk_import.py:1351 dcim/forms/filtersets.py:95 -#: dcim/forms/filtersets.py:322 dcim/forms/filtersets.py:356 -#: dcim/forms/filtersets.py:396 dcim/forms/filtersets.py:447 -#: dcim/forms/filtersets.py:719 dcim/forms/filtersets.py:762 -#: dcim/forms/filtersets.py:977 dcim/forms/filtersets.py:1006 -#: dcim/forms/filtersets.py:1026 dcim/forms/filtersets.py:1090 -#: dcim/forms/filtersets.py:1120 dcim/forms/filtersets.py:1129 -#: dcim/forms/filtersets.py:1240 dcim/forms/filtersets.py:1264 -#: dcim/forms/filtersets.py:1289 dcim/forms/filtersets.py:1308 -#: dcim/forms/filtersets.py:1331 dcim/forms/filtersets.py:1442 -#: dcim/forms/filtersets.py:1466 dcim/forms/filtersets.py:1490 -#: dcim/forms/filtersets.py:1508 dcim/forms/filtersets.py:1525 -#: dcim/forms/model_forms.py:180 dcim/forms/model_forms.py:243 -#: dcim/forms/model_forms.py:468 dcim/forms/model_forms.py:728 -#: dcim/tables/devices.py:157 dcim/tables/power.py:30 dcim/tables/racks.py:118 -#: dcim/tables/racks.py:212 extras/filtersets.py:536 -#: extras/forms/filtersets.py:320 ipam/forms/filtersets.py:173 -#: ipam/forms/filtersets.py:414 ipam/forms/filtersets.py:437 -#: ipam/forms/filtersets.py:467 templates/dcim/device.html:26 -#: templates/dcim/device_edit.html:30 -#: templates/dcim/inc/cable_termination.html:12 -#: templates/dcim/location.html:26 templates/dcim/powerpanel.html:26 -#: templates/dcim/rack.html:24 templates/dcim/rackreservation.html:32 -#: virtualization/forms/filtersets.py:46 -#: virtualization/forms/filtersets.py:100 wireless/forms/model_forms.py:87 -#: wireless/forms/model_forms.py:129 +#: netbox/circuits/forms/filtersets.py: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/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 msgid "Location" msgstr "Locazione" -#: circuits/forms/filtersets.py:32 circuits/forms/filtersets.py:120 -#: dcim/forms/filtersets.py:144 dcim/forms/filtersets.py:158 -#: dcim/forms/filtersets.py:174 dcim/forms/filtersets.py:206 -#: dcim/forms/filtersets.py:328 dcim/forms/filtersets.py:400 -#: dcim/forms/filtersets.py:471 dcim/forms/filtersets.py:723 -#: dcim/forms/filtersets.py:1091 netbox/navigation/menu.py:31 -#: netbox/navigation/menu.py:33 tenancy/forms/filtersets.py:42 -#: tenancy/tables/columns.py:70 tenancy/tables/contacts.py:25 -#: tenancy/views.py:19 virtualization/forms/filtersets.py:37 -#: virtualization/forms/filtersets.py:48 -#: virtualization/forms/filtersets.py:106 +#: netbox/circuits/forms/filtersets.py: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/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/tables/contacts.py:25 netbox/tenancy/views.py:19 +#: netbox/virtualization/forms/filtersets.py:37 +#: netbox/virtualization/forms/filtersets.py:48 +#: netbox/virtualization/forms/filtersets.py:106 msgid "Contacts" msgstr "Contatti" -#: circuits/forms/filtersets.py:37 circuits/forms/filtersets.py:157 -#: dcim/forms/bulk_edit.py:112 dcim/forms/bulk_edit.py:313 -#: dcim/forms/bulk_edit.py:857 dcim/forms/bulk_import.py:93 -#: dcim/forms/filtersets.py:73 dcim/forms/filtersets.py:185 -#: dcim/forms/filtersets.py:211 dcim/forms/filtersets.py:334 -#: dcim/forms/filtersets.py:425 dcim/forms/filtersets.py:739 -#: dcim/forms/filtersets.py:983 dcim/forms/filtersets.py:1013 -#: dcim/forms/filtersets.py:1097 dcim/forms/filtersets.py:1136 -#: dcim/forms/filtersets.py:1576 dcim/forms/filtersets.py:1600 -#: dcim/forms/filtersets.py:1624 dcim/forms/model_forms.py:112 -#: dcim/forms/object_create.py:375 dcim/tables/devices.py:143 -#: dcim/tables/sites.py:85 extras/filtersets.py:503 -#: ipam/forms/bulk_edit.py:208 ipam/forms/bulk_edit.py:474 -#: ipam/forms/filtersets.py:217 ipam/forms/filtersets.py:422 -#: ipam/forms/filtersets.py:475 templates/dcim/device.html:18 -#: templates/dcim/rack.html:16 templates/dcim/rackreservation.html:22 -#: templates/dcim/region.html:26 templates/dcim/site.html:31 -#: templates/ipam/prefix.html:49 templates/ipam/vlan.html:16 -#: virtualization/forms/bulk_edit.py:81 virtualization/forms/filtersets.py:59 -#: virtualization/forms/filtersets.py:133 -#: virtualization/forms/model_forms.py:92 vpn/forms/filtersets.py:257 +#: netbox/circuits/forms/filtersets.py: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/templates/dcim/rackreservation.html:22 +#: netbox/templates/dcim/region.html:26 netbox/templates/dcim/site.html:31 +#: netbox/templates/ipam/prefix.html:49 netbox/templates/ipam/vlan.html:16 +#: netbox/virtualization/forms/bulk_edit.py:81 +#: netbox/virtualization/forms/filtersets.py:59 +#: netbox/virtualization/forms/filtersets.py:133 +#: netbox/virtualization/forms/model_forms.py:92 +#: netbox/vpn/forms/filtersets.py:257 msgid "Region" msgstr "Regione" -#: circuits/forms/filtersets.py:42 circuits/forms/filtersets.py:162 -#: dcim/forms/bulk_edit.py:321 dcim/forms/bulk_edit.py:865 -#: dcim/forms/filtersets.py:78 dcim/forms/filtersets.py:190 -#: dcim/forms/filtersets.py:216 dcim/forms/filtersets.py:347 -#: dcim/forms/filtersets.py:430 dcim/forms/filtersets.py:744 -#: dcim/forms/filtersets.py:988 dcim/forms/filtersets.py:1102 -#: dcim/forms/filtersets.py:1141 dcim/forms/object_create.py:383 -#: extras/filtersets.py:520 ipam/forms/bulk_edit.py:213 -#: ipam/forms/bulk_edit.py:479 ipam/forms/filtersets.py:222 -#: ipam/forms/filtersets.py:427 ipam/forms/filtersets.py:480 -#: virtualization/forms/bulk_edit.py:86 virtualization/forms/filtersets.py:69 -#: virtualization/forms/filtersets.py:138 -#: virtualization/forms/model_forms.py:98 +#: netbox/circuits/forms/filtersets.py: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/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 msgid "Site group" msgstr "Gruppo del sito" -#: circuits/forms/filtersets.py:65 circuits/forms/filtersets.py:83 -#: circuits/forms/filtersets.py:102 circuits/forms/filtersets.py:117 -#: core/forms/filtersets.py:67 core/forms/filtersets.py:135 -#: dcim/forms/bulk_edit.py:828 dcim/forms/filtersets.py:172 -#: dcim/forms/filtersets.py:204 dcim/forms/filtersets.py:915 -#: dcim/forms/filtersets.py:1007 dcim/forms/filtersets.py:1131 -#: dcim/forms/filtersets.py:1239 dcim/forms/filtersets.py:1263 -#: dcim/forms/filtersets.py:1288 dcim/forms/filtersets.py:1307 -#: dcim/forms/filtersets.py:1327 dcim/forms/filtersets.py:1441 -#: dcim/forms/filtersets.py:1465 dcim/forms/filtersets.py:1489 -#: dcim/forms/filtersets.py:1507 dcim/forms/filtersets.py:1523 -#: extras/forms/bulk_edit.py:90 extras/forms/filtersets.py:44 -#: extras/forms/filtersets.py:134 extras/forms/filtersets.py:165 -#: extras/forms/filtersets.py:205 extras/forms/filtersets.py:221 -#: extras/forms/filtersets.py:252 extras/forms/filtersets.py:276 -#: extras/forms/filtersets.py:441 ipam/forms/filtersets.py:99 -#: ipam/forms/filtersets.py:266 ipam/forms/filtersets.py:307 -#: ipam/forms/filtersets.py:382 ipam/forms/filtersets.py:468 -#: ipam/forms/filtersets.py:527 ipam/forms/filtersets.py:545 -#: netbox/tables/tables.py:256 virtualization/forms/filtersets.py:45 -#: virtualization/forms/filtersets.py:103 -#: virtualization/forms/filtersets.py:198 -#: virtualization/forms/filtersets.py:243 vpn/forms/filtersets.py:213 -#: wireless/forms/bulk_edit.py:150 wireless/forms/filtersets.py:34 -#: wireless/forms/filtersets.py:74 +#: 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" -#: circuits/forms/filtersets.py:73 circuits/tables/circuits.py:63 -#: circuits/tables/providers.py:66 templates/circuits/circuit.html:22 -#: templates/circuits/provideraccount.html:24 +#: netbox/circuits/forms/filtersets.py:73 +#: netbox/circuits/tables/circuits.py:63 +#: netbox/circuits/tables/providers.py:66 +#: netbox/templates/circuits/circuit.html:22 +#: netbox/templates/circuits/provideraccount.html:24 msgid "Account" msgstr "Account" -#: circuits/forms/filtersets.py:217 +#: netbox/circuits/forms/filtersets.py:217 msgid "Term Side" msgstr "Lato del termine" -#: circuits/forms/filtersets.py:250 extras/forms/model_forms.py:582 -#: ipam/forms/filtersets.py:142 ipam/forms/filtersets.py:546 -#: ipam/forms/model_forms.py:323 templates/extras/configcontext.html:60 -#: templates/ipam/ipaddress.html:59 templates/ipam/vlan_edit.html:30 -#: tenancy/forms/filtersets.py:87 users/forms/model_forms.py:314 +#: 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/templates/extras/configcontext.html:60 +#: netbox/templates/ipam/ipaddress.html:59 +#: netbox/templates/ipam/vlan_edit.html:30 +#: netbox/tenancy/forms/filtersets.py:87 netbox/users/forms/model_forms.py:314 msgid "Assignment" msgstr "Assegnazione" -#: circuits/forms/filtersets.py:265 circuits/forms/model_forms.py:195 -#: circuits/tables/circuits.py:155 dcim/forms/bulk_edit.py:117 -#: dcim/forms/bulk_import.py:100 dcim/forms/model_forms.py:117 -#: dcim/tables/sites.py:89 extras/forms/filtersets.py:480 -#: ipam/filtersets.py:999 ipam/forms/bulk_edit.py:493 -#: ipam/forms/bulk_import.py:436 ipam/forms/model_forms.py:528 -#: ipam/tables/fhrp.py:67 ipam/tables/vlans.py:122 ipam/tables/vlans.py:226 -#: templates/circuits/circuitgroupassignment.html:22 -#: templates/dcim/interface.html:284 templates/dcim/site.html:37 -#: templates/ipam/inc/panels/fhrp_groups.html:23 templates/ipam/vlan.html:27 -#: templates/tenancy/contact.html:21 templates/tenancy/tenant.html:20 -#: templates/users/group.html:6 templates/users/group.html:14 -#: templates/virtualization/cluster.html:29 templates/vpn/tunnel.html:29 -#: templates/wireless/wirelesslan.html:18 tenancy/forms/bulk_edit.py:43 -#: tenancy/forms/bulk_edit.py:94 tenancy/forms/bulk_import.py:40 -#: tenancy/forms/bulk_import.py:81 tenancy/forms/filtersets.py:48 -#: tenancy/forms/filtersets.py:78 tenancy/forms/filtersets.py:97 -#: tenancy/forms/model_forms.py:45 tenancy/forms/model_forms.py:97 -#: tenancy/forms/model_forms.py:122 tenancy/tables/contacts.py:60 -#: tenancy/tables/contacts.py:107 tenancy/tables/tenants.py:42 -#: users/filtersets.py:62 users/filtersets.py:185 users/forms/filtersets.py:31 -#: users/forms/filtersets.py:37 users/forms/filtersets.py:79 -#: virtualization/forms/bulk_edit.py:65 virtualization/forms/bulk_import.py:47 -#: virtualization/forms/filtersets.py:85 -#: virtualization/forms/model_forms.py:66 virtualization/tables/clusters.py:70 -#: vpn/forms/bulk_edit.py:112 vpn/forms/bulk_import.py:158 -#: vpn/forms/filtersets.py:116 vpn/tables/crypto.py:31 -#: vpn/tables/tunnels.py:44 wireless/forms/bulk_edit.py:48 -#: wireless/forms/bulk_import.py:36 wireless/forms/filtersets.py:46 -#: wireless/forms/model_forms.py:40 wireless/tables/wirelesslan.py:48 +#: netbox/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:999 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/templates/circuits/circuitgroupassignment.html:22 +#: netbox/templates/dcim/interface.html:284 netbox/templates/dcim/site.html:37 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:23 +#: netbox/templates/ipam/vlan.html:27 netbox/templates/tenancy/contact.html:21 +#: netbox/templates/tenancy/tenant.html:20 netbox/templates/users/group.html:6 +#: netbox/templates/users/group.html:14 +#: netbox/templates/virtualization/cluster.html:29 +#: netbox/templates/vpn/tunnel.html:29 +#: netbox/templates/wireless/wirelesslan.html:18 +#: netbox/tenancy/forms/bulk_edit.py:43 netbox/tenancy/forms/bulk_edit.py:94 +#: netbox/tenancy/forms/bulk_import.py:40 +#: netbox/tenancy/forms/bulk_import.py:81 +#: netbox/tenancy/forms/filtersets.py:48 netbox/tenancy/forms/filtersets.py:78 +#: netbox/tenancy/forms/filtersets.py:97 +#: netbox/tenancy/forms/model_forms.py:45 +#: netbox/tenancy/forms/model_forms.py:97 +#: netbox/tenancy/forms/model_forms.py:122 +#: netbox/tenancy/tables/contacts.py:60 netbox/tenancy/tables/contacts.py:107 +#: netbox/tenancy/tables/tenants.py:42 netbox/users/filtersets.py: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/tables/clusters.py:70 +#: netbox/vpn/forms/bulk_edit.py:112 netbox/vpn/forms/bulk_import.py:158 +#: netbox/vpn/forms/filtersets.py:116 netbox/vpn/tables/crypto.py:31 +#: netbox/vpn/tables/tunnels.py:44 netbox/wireless/forms/bulk_edit.py:48 +#: netbox/wireless/forms/bulk_import.py:36 +#: netbox/wireless/forms/filtersets.py:46 +#: netbox/wireless/forms/model_forms.py:40 +#: netbox/wireless/tables/wirelesslan.py:48 msgid "Group" msgstr "Gruppo" -#: circuits/forms/model_forms.py:182 templates/circuits/circuitgroup.html:25 +#: netbox/circuits/forms/model_forms.py:182 +#: netbox/templates/circuits/circuitgroup.html:25 msgid "Circuit Group" msgstr "Gruppo Circuit" -#: circuits/models/circuits.py:27 dcim/models/cables.py:67 -#: dcim/models/device_component_templates.py:517 -#: dcim/models/device_component_templates.py:617 -#: dcim/models/device_components.py:975 dcim/models/device_components.py:1049 -#: dcim/models/device_components.py:1204 dcim/models/devices.py:479 -#: dcim/models/racks.py:224 extras/models/tags.py:28 +#: 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/extras/models/tags.py:28 msgid "color" msgstr "colore" -#: circuits/models/circuits.py:36 +#: netbox/circuits/models/circuits.py:36 msgid "circuit type" msgstr "tipo di circuito" -#: circuits/models/circuits.py:37 +#: netbox/circuits/models/circuits.py:37 msgid "circuit types" msgstr "tipi di circuiti" -#: circuits/models/circuits.py:48 +#: netbox/circuits/models/circuits.py:48 msgid "circuit ID" msgstr "ID del circuito" -#: circuits/models/circuits.py:49 +#: netbox/circuits/models/circuits.py:49 msgid "Unique circuit ID" msgstr "ID univoco del circuito" -#: circuits/models/circuits.py:69 core/models/data.py:52 -#: core/models/jobs.py:84 dcim/models/cables.py:49 dcim/models/devices.py:653 -#: dcim/models/devices.py:1173 dcim/models/devices.py:1399 -#: dcim/models/power.py:96 dcim/models/racks.py:297 dcim/models/sites.py:154 -#: dcim/models/sites.py:266 ipam/models/ip.py:253 ipam/models/ip.py:522 -#: ipam/models/ip.py:730 ipam/models/vlans.py:195 -#: virtualization/models/clusters.py:74 -#: virtualization/models/virtualmachines.py:84 vpn/models/tunnels.py:40 -#: wireless/models.py:95 wireless/models.py:159 +#: 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 msgid "status" msgstr "stato" -#: circuits/models/circuits.py:84 templates/core/plugin.html:20 +#: netbox/circuits/models/circuits.py:84 netbox/templates/core/plugin.html:20 msgid "installed" msgstr "installato" -#: circuits/models/circuits.py:89 +#: netbox/circuits/models/circuits.py:89 msgid "terminates" msgstr "termina" -#: circuits/models/circuits.py:94 +#: netbox/circuits/models/circuits.py:94 msgid "commit rate (Kbps)" msgstr "tasso di commit (Kbps)" -#: circuits/models/circuits.py:95 +#: netbox/circuits/models/circuits.py:95 msgid "Committed rate" msgstr "Tariffa impegnata" -#: circuits/models/circuits.py:137 +#: netbox/circuits/models/circuits.py:137 msgid "circuit" msgstr "circuito" -#: circuits/models/circuits.py:138 +#: netbox/circuits/models/circuits.py:138 msgid "circuits" msgstr "circuiti" -#: circuits/models/circuits.py:170 +#: netbox/circuits/models/circuits.py:170 msgid "circuit group" msgstr "gruppo di circuiti" -#: circuits/models/circuits.py:171 +#: netbox/circuits/models/circuits.py:171 msgid "circuit groups" msgstr "gruppi di circuiti" -#: circuits/models/circuits.py:195 ipam/models/fhrp.py:93 -#: tenancy/models/contacts.py:134 +#: netbox/circuits/models/circuits.py:195 netbox/ipam/models/fhrp.py:93 +#: netbox/tenancy/models/contacts.py:134 msgid "priority" msgstr "priorità" -#: circuits/models/circuits.py:213 +#: netbox/circuits/models/circuits.py:213 msgid "Circuit group assignment" msgstr "Assegnazione di gruppi di circuiti" -#: circuits/models/circuits.py:214 +#: netbox/circuits/models/circuits.py:214 msgid "Circuit group assignments" msgstr "Assegnazioni di gruppi di circuiti" -#: circuits/models/circuits.py:240 +#: netbox/circuits/models/circuits.py:240 msgid "termination" msgstr "fine" -#: circuits/models/circuits.py:257 +#: netbox/circuits/models/circuits.py:257 msgid "port speed (Kbps)" msgstr "velocità della porta (Kbps)" -#: circuits/models/circuits.py:260 +#: netbox/circuits/models/circuits.py:260 msgid "Physical circuit speed" msgstr "Velocità fisica del circuito" -#: circuits/models/circuits.py:265 +#: netbox/circuits/models/circuits.py:265 msgid "upstream speed (Kbps)" msgstr "velocità upstream (Kbps)" -#: circuits/models/circuits.py:266 +#: netbox/circuits/models/circuits.py:266 msgid "Upstream speed, if different from port speed" msgstr "Velocità upstream, se diversa dalla velocità della porta" -#: circuits/models/circuits.py:271 +#: netbox/circuits/models/circuits.py:271 msgid "cross-connect ID" msgstr "ID di connessione incrociata" -#: circuits/models/circuits.py:272 +#: netbox/circuits/models/circuits.py:272 msgid "ID of the local cross-connect" msgstr "ID della connessione incrociata locale" -#: circuits/models/circuits.py:277 +#: netbox/circuits/models/circuits.py:277 msgid "patch panel/port(s)" msgstr "pannello di permutazione/porte" -#: circuits/models/circuits.py:278 +#: netbox/circuits/models/circuits.py:278 msgid "Patch panel ID and port number(s)" msgstr "ID del patch panel e numero/i di porta" -#: circuits/models/circuits.py:281 -#: dcim/models/device_component_templates.py:61 -#: dcim/models/device_components.py:68 dcim/models/racks.py:685 -#: extras/models/configs.py:45 extras/models/configs.py:219 -#: extras/models/customfields.py:125 extras/models/models.py:61 -#: extras/models/models.py:158 extras/models/models.py:396 -#: extras/models/models.py:511 extras/models/notifications.py:131 -#: extras/models/staging.py:31 extras/models/tags.py:32 -#: netbox/models/__init__.py:110 netbox/models/__init__.py:145 -#: netbox/models/__init__.py:191 users/models/permissions.py:24 -#: users/models/tokens.py:57 users/models/users.py:33 -#: virtualization/models/virtualmachines.py:289 +#: 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/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 msgid "description" msgstr "descrizione" -#: circuits/models/circuits.py:294 +#: netbox/circuits/models/circuits.py:294 msgid "circuit termination" msgstr "terminazione del circuito" -#: circuits/models/circuits.py:295 +#: netbox/circuits/models/circuits.py:295 msgid "circuit terminations" msgstr "terminazioni del circuito" -#: circuits/models/circuits.py:308 +#: netbox/circuits/models/circuits.py:308 msgid "" "A circuit termination must attach to either a site or a provider network." msgstr "" "Una terminazione di circuito deve essere collegata a un sito o alla rete di " "un provider." -#: circuits/models/circuits.py:310 +#: netbox/circuits/models/circuits.py:310 msgid "" "A circuit termination cannot attach to both a site and a provider network." msgstr "" "Una terminazione di circuito non può essere collegata sia a un sito che alla" " rete di un provider." -#: circuits/models/providers.py:22 circuits/models/providers.py:66 -#: circuits/models/providers.py:104 core/models/data.py:39 -#: core/models/jobs.py:45 dcim/models/device_component_templates.py:43 -#: dcim/models/device_components.py:53 dcim/models/devices.py:593 -#: dcim/models/devices.py:1330 dcim/models/devices.py:1395 -#: dcim/models/power.py:39 dcim/models/power.py:92 dcim/models/racks.py:262 -#: dcim/models/sites.py:138 extras/models/configs.py:36 -#: extras/models/configs.py:215 extras/models/customfields.py:92 -#: extras/models/models.py:56 extras/models/models.py:153 -#: extras/models/models.py:296 extras/models/models.py:392 -#: extras/models/models.py:501 extras/models/models.py:596 -#: extras/models/notifications.py:126 extras/models/scripts.py:30 -#: extras/models/staging.py:26 ipam/models/asns.py:18 ipam/models/fhrp.py:25 -#: ipam/models/services.py:52 ipam/models/services.py:88 -#: ipam/models/vlans.py:36 ipam/models/vlans.py:184 ipam/models/vrfs.py:22 -#: ipam/models/vrfs.py:79 netbox/models/__init__.py:137 -#: netbox/models/__init__.py:181 tenancy/models/contacts.py:64 -#: tenancy/models/tenants.py:20 tenancy/models/tenants.py:45 -#: users/models/permissions.py:20 users/models/users.py:28 -#: virtualization/models/clusters.py:57 -#: virtualization/models/virtualmachines.py:72 -#: virtualization/models/virtualmachines.py:279 vpn/models/crypto.py:24 -#: vpn/models/crypto.py:71 vpn/models/crypto.py:131 vpn/models/crypto.py:183 -#: vpn/models/crypto.py:221 vpn/models/l2vpn.py:22 vpn/models/tunnels.py:35 -#: wireless/models.py:51 +#: 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/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/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 msgid "name" msgstr "nome" -#: circuits/models/providers.py:25 +#: netbox/circuits/models/providers.py:25 msgid "Full name of the provider" msgstr "Nome completo del fornitore" -#: circuits/models/providers.py:28 dcim/models/devices.py:86 -#: dcim/models/racks.py:137 dcim/models/sites.py:149 -#: extras/models/models.py:506 ipam/models/asns.py:23 ipam/models/vlans.py:40 -#: netbox/models/__init__.py:141 netbox/models/__init__.py:186 -#: tenancy/models/tenants.py:25 tenancy/models/tenants.py:49 -#: vpn/models/l2vpn.py:27 wireless/models.py:56 +#: netbox/circuits/models/providers.py:28 netbox/dcim/models/devices.py:86 +#: 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 msgid "slug" msgstr "pallottola" -#: circuits/models/providers.py:42 +#: netbox/circuits/models/providers.py:42 msgid "provider" msgstr "fornitore" -#: circuits/models/providers.py:43 +#: netbox/circuits/models/providers.py:43 msgid "providers" msgstr "fornitori" -#: circuits/models/providers.py:63 +#: netbox/circuits/models/providers.py:63 msgid "account ID" msgstr "ID dell'account" -#: circuits/models/providers.py:86 +#: netbox/circuits/models/providers.py:86 msgid "provider account" msgstr "account del fornitore" -#: circuits/models/providers.py:87 +#: netbox/circuits/models/providers.py:87 msgid "provider accounts" msgstr "account del fornitore" -#: circuits/models/providers.py:115 +#: netbox/circuits/models/providers.py:115 msgid "service ID" msgstr "ID di servizio" -#: circuits/models/providers.py:126 +#: netbox/circuits/models/providers.py:126 msgid "provider network" msgstr "rete di fornitori" -#: circuits/models/providers.py:127 +#: netbox/circuits/models/providers.py:127 msgid "provider networks" msgstr "reti di fornitori" -#: circuits/tables/circuits.py:32 circuits/tables/circuits.py:132 -#: circuits/tables/providers.py:18 circuits/tables/providers.py:69 -#: circuits/tables/providers.py:99 core/tables/data.py:16 -#: core/tables/jobs.py:14 core/tables/plugins.py:44 core/tables/tasks.py:11 -#: core/tables/tasks.py:115 dcim/forms/filtersets.py:63 -#: dcim/forms/object_create.py:43 dcim/tables/devices.py:52 -#: dcim/tables/devices.py:92 dcim/tables/devices.py:134 -#: dcim/tables/devices.py:289 dcim/tables/devices.py:392 -#: dcim/tables/devices.py:433 dcim/tables/devices.py:482 -#: dcim/tables/devices.py:531 dcim/tables/devices.py:648 -#: dcim/tables/devices.py:731 dcim/tables/devices.py:778 -#: dcim/tables/devices.py:841 dcim/tables/devices.py:911 -#: dcim/tables/devices.py:974 dcim/tables/devices.py:994 -#: dcim/tables/devices.py:1023 dcim/tables/devices.py:1053 -#: dcim/tables/devicetypes.py:31 dcim/tables/power.py:22 -#: dcim/tables/power.py:62 dcim/tables/racks.py:24 dcim/tables/racks.py:113 -#: dcim/tables/sites.py:24 dcim/tables/sites.py:51 dcim/tables/sites.py:78 -#: dcim/tables/sites.py:130 extras/forms/filtersets.py:213 -#: extras/tables/tables.py:58 extras/tables/tables.py:122 -#: extras/tables/tables.py:155 extras/tables/tables.py:180 -#: extras/tables/tables.py:246 extras/tables/tables.py:361 -#: extras/tables/tables.py:378 extras/tables/tables.py:401 -#: extras/tables/tables.py:439 extras/tables/tables.py:491 -#: extras/tables/tables.py:514 ipam/forms/bulk_edit.py:407 -#: ipam/forms/filtersets.py:386 ipam/tables/asn.py:16 ipam/tables/ip.py:85 -#: ipam/tables/ip.py:160 ipam/tables/services.py:15 ipam/tables/services.py:40 -#: ipam/tables/vlans.py:64 ipam/tables/vlans.py:114 ipam/tables/vrfs.py:26 -#: ipam/tables/vrfs.py:68 templates/circuits/circuitgroup.html:28 -#: templates/circuits/circuittype.html:22 -#: templates/circuits/provideraccount.html:28 -#: templates/circuits/providernetwork.html:24 -#: templates/core/datasource.html:34 templates/core/job.html:44 -#: templates/core/plugin.html:54 templates/core/rq_worker.html:43 -#: templates/dcim/consoleport.html:28 templates/dcim/consoleserverport.html:28 -#: templates/dcim/devicebay.html:24 templates/dcim/devicerole.html:26 -#: templates/dcim/frontport.html:28 -#: templates/dcim/inc/interface_vlans_table.html:5 -#: templates/dcim/inc/panels/inventory_items.html:18 -#: templates/dcim/interface.html:38 templates/dcim/interface.html:165 -#: templates/dcim/inventoryitem.html:28 -#: templates/dcim/inventoryitemrole.html:18 templates/dcim/location.html:29 -#: templates/dcim/manufacturer.html:36 templates/dcim/modulebay.html:30 -#: templates/dcim/platform.html:29 templates/dcim/poweroutlet.html:28 -#: templates/dcim/powerport.html:28 templates/dcim/rackrole.html:22 -#: templates/dcim/rearport.html:28 templates/dcim/region.html:29 -#: templates/dcim/sitegroup.html:29 -#: templates/dcim/virtualdevicecontext.html:18 -#: templates/extras/configcontext.html:13 -#: templates/extras/configtemplate.html:13 -#: templates/extras/customfield.html:13 templates/extras/customlink.html:13 -#: templates/extras/eventrule.html:13 templates/extras/exporttemplate.html:15 -#: templates/extras/notificationgroup.html:14 -#: templates/extras/savedfilter.html:13 templates/extras/script_list.html:44 -#: templates/extras/tag.html:14 templates/extras/webhook.html:13 -#: templates/ipam/asnrange.html:15 templates/ipam/fhrpgroup.html:30 -#: templates/ipam/rir.html:22 templates/ipam/role.html:22 -#: templates/ipam/routetarget.html:13 templates/ipam/service.html:24 -#: templates/ipam/servicetemplate.html:15 templates/ipam/vlan.html:35 -#: templates/ipam/vlangroup.html:30 templates/tenancy/contact.html:25 -#: templates/tenancy/contactgroup.html:21 -#: templates/tenancy/contactrole.html:18 templates/tenancy/tenantgroup.html:29 -#: templates/users/group.html:17 templates/users/objectpermission.html:17 -#: templates/virtualization/cluster.html:13 -#: templates/virtualization/clustergroup.html:22 -#: templates/virtualization/clustertype.html:22 -#: templates/virtualization/virtualdisk.html:25 -#: templates/virtualization/virtualmachine.html:15 -#: templates/virtualization/vminterface.html:25 -#: templates/vpn/ikepolicy.html:13 templates/vpn/ikeproposal.html:13 -#: templates/vpn/ipsecpolicy.html:13 templates/vpn/ipsecprofile.html:13 -#: templates/vpn/ipsecprofile.html:36 templates/vpn/ipsecprofile.html:69 -#: templates/vpn/ipsecproposal.html:13 templates/vpn/l2vpn.html:14 -#: templates/vpn/tunnel.html:21 templates/vpn/tunnelgroup.html:26 -#: templates/wireless/wirelesslangroup.html:29 tenancy/tables/contacts.py:19 -#: tenancy/tables/contacts.py:41 tenancy/tables/contacts.py:56 -#: tenancy/tables/tenants.py:16 tenancy/tables/tenants.py:38 -#: users/tables.py:62 users/tables.py:76 -#: virtualization/forms/bulk_create.py:20 -#: virtualization/forms/object_create.py:13 -#: virtualization/forms/object_create.py:23 -#: virtualization/tables/clusters.py:17 virtualization/tables/clusters.py:39 -#: virtualization/tables/clusters.py:62 -#: virtualization/tables/virtualmachines.py:55 -#: virtualization/tables/virtualmachines.py:139 -#: virtualization/tables/virtualmachines.py:194 vpn/tables/crypto.py:18 -#: vpn/tables/crypto.py:57 vpn/tables/crypto.py:93 vpn/tables/crypto.py:129 -#: vpn/tables/crypto.py:158 vpn/tables/l2vpn.py:23 vpn/tables/tunnels.py:18 -#: vpn/tables/tunnels.py:40 wireless/tables/wirelesslan.py:18 -#: wireless/tables/wirelesslan.py:79 +#: netbox/circuits/tables/circuits.py:32 +#: netbox/circuits/tables/circuits.py:132 +#: netbox/circuits/tables/providers.py:18 +#: netbox/circuits/tables/providers.py:69 +#: netbox/circuits/tables/providers.py:99 netbox/core/tables/data.py:16 +#: netbox/core/tables/jobs.py:14 netbox/core/tables/plugins.py: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/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/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/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/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 +#: netbox/templates/dcim/consoleserverport.html:28 +#: netbox/templates/dcim/devicebay.html:24 +#: netbox/templates/dcim/devicerole.html:26 +#: netbox/templates/dcim/frontport.html:28 +#: netbox/templates/dcim/inc/interface_vlans_table.html:5 +#: netbox/templates/dcim/inc/panels/inventory_items.html:18 +#: netbox/templates/dcim/interface.html:38 +#: netbox/templates/dcim/interface.html:165 +#: netbox/templates/dcim/inventoryitem.html:28 +#: netbox/templates/dcim/inventoryitemrole.html:18 +#: netbox/templates/dcim/location.html:29 +#: netbox/templates/dcim/manufacturer.html:36 +#: netbox/templates/dcim/modulebay.html:30 +#: netbox/templates/dcim/platform.html:29 +#: netbox/templates/dcim/poweroutlet.html:28 +#: netbox/templates/dcim/powerport.html:28 +#: netbox/templates/dcim/rackrole.html:22 +#: netbox/templates/dcim/rearport.html:28 netbox/templates/dcim/region.html:29 +#: netbox/templates/dcim/sitegroup.html:29 +#: netbox/templates/dcim/virtualdevicecontext.html:18 +#: netbox/templates/extras/configcontext.html:13 +#: netbox/templates/extras/configtemplate.html:13 +#: netbox/templates/extras/customfield.html:13 +#: netbox/templates/extras/customlink.html:13 +#: netbox/templates/extras/eventrule.html:13 +#: netbox/templates/extras/exporttemplate.html:15 +#: netbox/templates/extras/notificationgroup.html:14 +#: netbox/templates/extras/savedfilter.html:13 +#: netbox/templates/extras/script_list.html:45 +#: netbox/templates/extras/tag.html:14 netbox/templates/extras/webhook.html:13 +#: netbox/templates/ipam/asnrange.html:15 +#: netbox/templates/ipam/fhrpgroup.html:30 netbox/templates/ipam/rir.html:22 +#: netbox/templates/ipam/role.html:22 +#: netbox/templates/ipam/routetarget.html:13 +#: netbox/templates/ipam/service.html:24 +#: netbox/templates/ipam/servicetemplate.html:15 +#: netbox/templates/ipam/vlan.html:35 netbox/templates/ipam/vlangroup.html:30 +#: netbox/templates/tenancy/contact.html:25 +#: netbox/templates/tenancy/contactgroup.html:21 +#: netbox/templates/tenancy/contactrole.html:18 +#: netbox/templates/tenancy/tenantgroup.html:29 +#: netbox/templates/users/group.html:17 +#: netbox/templates/users/objectpermission.html:17 +#: netbox/templates/virtualization/cluster.html:13 +#: netbox/templates/virtualization/clustergroup.html:22 +#: netbox/templates/virtualization/clustertype.html:22 +#: netbox/templates/virtualization/virtualdisk.html:25 +#: netbox/templates/virtualization/virtualmachine.html:15 +#: netbox/templates/virtualization/vminterface.html:25 +#: netbox/templates/vpn/ikepolicy.html:13 +#: netbox/templates/vpn/ikeproposal.html:13 +#: netbox/templates/vpn/ipsecpolicy.html:13 +#: netbox/templates/vpn/ipsecprofile.html:13 +#: netbox/templates/vpn/ipsecprofile.html:36 +#: netbox/templates/vpn/ipsecprofile.html:69 +#: netbox/templates/vpn/ipsecproposal.html:13 +#: netbox/templates/vpn/l2vpn.html:14 netbox/templates/vpn/tunnel.html:21 +#: netbox/templates/vpn/tunnelgroup.html:26 +#: netbox/templates/wireless/wirelesslangroup.html:29 +#: netbox/tenancy/tables/contacts.py:19 netbox/tenancy/tables/contacts.py:41 +#: netbox/tenancy/tables/contacts.py:56 netbox/tenancy/tables/tenants.py:16 +#: netbox/tenancy/tables/tenants.py:38 netbox/users/tables.py:62 +#: netbox/users/tables.py:76 netbox/virtualization/forms/bulk_create.py:20 +#: netbox/virtualization/forms/object_create.py:13 +#: netbox/virtualization/forms/object_create.py:23 +#: netbox/virtualization/tables/clusters.py:17 +#: netbox/virtualization/tables/clusters.py:39 +#: netbox/virtualization/tables/clusters.py:62 +#: netbox/virtualization/tables/virtualmachines.py:55 +#: netbox/virtualization/tables/virtualmachines.py:139 +#: netbox/virtualization/tables/virtualmachines.py:194 +#: netbox/vpn/tables/crypto.py:18 netbox/vpn/tables/crypto.py:57 +#: netbox/vpn/tables/crypto.py:93 netbox/vpn/tables/crypto.py:129 +#: netbox/vpn/tables/crypto.py:158 netbox/vpn/tables/l2vpn.py:23 +#: netbox/vpn/tables/tunnels.py:18 netbox/vpn/tables/tunnels.py:40 +#: netbox/wireless/tables/wirelesslan.py:18 +#: netbox/wireless/tables/wirelesslan.py:79 msgid "Name" msgstr "Nome" -#: circuits/tables/circuits.py:41 circuits/tables/circuits.py:138 -#: circuits/tables/providers.py:45 circuits/tables/providers.py:79 -#: netbox/navigation/menu.py:266 netbox/navigation/menu.py:270 -#: netbox/navigation/menu.py:272 templates/circuits/provider.html:57 -#: templates/circuits/provideraccount.html:44 -#: templates/circuits/providernetwork.html:50 +#: 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/templates/circuits/provider.html:57 +#: netbox/templates/circuits/provideraccount.html:44 +#: netbox/templates/circuits/providernetwork.html:50 msgid "Circuits" msgstr "Circuiti" -#: circuits/tables/circuits.py:55 templates/circuits/circuit.html:26 +#: netbox/circuits/tables/circuits.py:55 +#: netbox/templates/circuits/circuit.html:26 msgid "Circuit ID" msgstr "ID circuito" -#: circuits/tables/circuits.py:69 wireless/forms/model_forms.py:160 +#: netbox/circuits/tables/circuits.py:69 +#: netbox/wireless/forms/model_forms.py:160 msgid "Side A" msgstr "Lato A" -#: circuits/tables/circuits.py:74 +#: netbox/circuits/tables/circuits.py:74 msgid "Side Z" msgstr "Lato Z" -#: circuits/tables/circuits.py:77 templates/circuits/circuit.html:55 +#: netbox/circuits/tables/circuits.py:77 +#: netbox/templates/circuits/circuit.html:55 msgid "Commit Rate" msgstr "Tasso di impegno" -#: circuits/tables/circuits.py:80 circuits/tables/providers.py:48 -#: circuits/tables/providers.py:82 circuits/tables/providers.py:107 -#: dcim/tables/devices.py:1036 dcim/tables/devicetypes.py:92 -#: dcim/tables/modules.py:29 dcim/tables/modules.py:72 dcim/tables/power.py:39 -#: dcim/tables/power.py:96 dcim/tables/racks.py:84 dcim/tables/racks.py:145 -#: dcim/tables/racks.py:225 dcim/tables/sites.py:108 -#: extras/tables/tables.py:582 ipam/tables/asn.py:69 ipam/tables/fhrp.py:34 -#: ipam/tables/ip.py:136 ipam/tables/ip.py:275 ipam/tables/ip.py:329 -#: ipam/tables/ip.py:397 ipam/tables/services.py:24 ipam/tables/services.py:54 -#: ipam/tables/vlans.py:145 ipam/tables/vrfs.py:47 ipam/tables/vrfs.py:72 -#: templates/dcim/htmx/cable_edit.html:89 templates/generic/bulk_edit.html:86 -#: templates/inc/panels/comments.html:5 tenancy/tables/contacts.py:68 -#: tenancy/tables/tenants.py:46 utilities/forms/fields/fields.py:29 -#: virtualization/tables/clusters.py:91 -#: virtualization/tables/virtualmachines.py:82 vpn/tables/crypto.py:37 -#: vpn/tables/crypto.py:74 vpn/tables/crypto.py:109 vpn/tables/crypto.py:140 -#: vpn/tables/crypto.py:173 vpn/tables/l2vpn.py:37 vpn/tables/tunnels.py:61 -#: wireless/tables/wirelesslan.py:27 wireless/tables/wirelesslan.py:58 +#: netbox/circuits/tables/circuits.py: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:72 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/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/vpn/tables/crypto.py:37 netbox/vpn/tables/crypto.py:74 +#: netbox/vpn/tables/crypto.py:109 netbox/vpn/tables/crypto.py:140 +#: netbox/vpn/tables/crypto.py:173 netbox/vpn/tables/l2vpn.py:37 +#: netbox/vpn/tables/tunnels.py:61 netbox/wireless/tables/wirelesslan.py:27 +#: netbox/wireless/tables/wirelesslan.py:58 msgid "Comments" msgstr "Commenti" -#: circuits/tables/circuits.py:86 templates/tenancy/contact.html:84 -#: tenancy/tables/contacts.py:73 +#: netbox/circuits/tables/circuits.py:86 +#: netbox/templates/tenancy/contact.html:84 +#: netbox/tenancy/tables/contacts.py:73 msgid "Assignments" msgstr "Incarichi" -#: circuits/tables/providers.py:23 +#: netbox/circuits/tables/providers.py:23 msgid "Accounts" msgstr "Account" -#: circuits/tables/providers.py:29 +#: netbox/circuits/tables/providers.py:29 msgid "Account Count" msgstr "Numero di account" -#: circuits/tables/providers.py:39 dcim/tables/sites.py:100 +#: netbox/circuits/tables/providers.py:39 netbox/dcim/tables/sites.py:100 msgid "ASN Count" msgstr "Numero ASN" -#: circuits/views.py:331 +#: netbox/circuits/views.py:331 #, python-brace-format msgid "No terminations have been defined for circuit {circuit}." msgstr "Non sono state definite terminazioni per il circuito {circuit}." -#: circuits/views.py:380 +#: netbox/circuits/views.py:380 #, python-brace-format msgid "Swapped terminations for circuit {circuit}." msgstr "Terminazioni sostituite per circuito {circuit}." -#: core/api/views.py:39 +#: netbox/core/api/views.py:39 msgid "This user does not have permission to synchronize this data source." msgstr "" "Questo utente non dispone dell'autorizzazione per sincronizzare questa " "origine dati." -#: core/choices.py:18 +#: netbox/core/choices.py:18 msgid "New" msgstr "Nuovo" -#: core/choices.py:19 core/constants.py:18 core/tables/tasks.py:15 -#: templates/core/rq_task.html:77 +#: netbox/core/choices.py:19 netbox/core/constants.py:18 +#: netbox/core/tables/tasks.py:15 netbox/templates/core/rq_task.html:77 msgid "Queued" msgstr "In coda" -#: core/choices.py:20 +#: netbox/core/choices.py:20 msgid "Syncing" msgstr "Sincronizzazione" -#: core/choices.py:21 core/choices.py:57 core/tables/jobs.py:41 -#: templates/core/job.html:86 +#: netbox/core/choices.py:21 netbox/core/choices.py:57 +#: netbox/core/tables/jobs.py:41 netbox/templates/core/job.html:86 msgid "Completed" msgstr "Completato" -#: core/choices.py:22 core/choices.py:59 core/constants.py:20 -#: core/tables/tasks.py:34 dcim/choices.py:187 dcim/choices.py:239 -#: dcim/choices.py:1607 virtualization/choices.py:47 +#: netbox/core/choices.py:22 netbox/core/choices.py:59 +#: netbox/core/constants.py:20 netbox/core/tables/tasks.py:34 +#: netbox/dcim/choices.py:187 netbox/dcim/choices.py:239 +#: netbox/dcim/choices.py:1609 netbox/virtualization/choices.py:47 msgid "Failed" msgstr "Fallito" -#: core/choices.py:35 netbox/navigation/menu.py:335 -#: netbox/navigation/menu.py:339 templates/extras/script/base.html:14 -#: templates/extras/script_list.html:7 templates/extras/script_list.html:12 -#: templates/extras/script_result.html:17 +#: netbox/core/choices.py:35 netbox/netbox/navigation/menu.py:335 +#: netbox/netbox/navigation/menu.py:339 +#: netbox/templates/extras/script/base.html:14 +#: netbox/templates/extras/script_list.html:7 +#: netbox/templates/extras/script_list.html:12 +#: netbox/templates/extras/script_result.html:17 msgid "Scripts" msgstr "Script" -#: core/choices.py:36 templates/extras/report/base.html:13 +#: netbox/core/choices.py:36 netbox/templates/extras/report/base.html:13 msgid "Reports" msgstr "Rapporti" -#: core/choices.py:54 +#: netbox/core/choices.py:54 msgid "Pending" msgstr "In sospeso" -#: core/choices.py:55 core/constants.py:23 core/tables/jobs.py:32 -#: core/tables/tasks.py:38 templates/core/job.html:73 +#: netbox/core/choices.py:55 netbox/core/constants.py:23 +#: netbox/core/tables/jobs.py:32 netbox/core/tables/tasks.py:38 +#: netbox/templates/core/job.html:73 msgid "Scheduled" msgstr "Pianificato" -#: core/choices.py:56 +#: netbox/core/choices.py:56 msgid "Running" msgstr "Correre" -#: core/choices.py:58 +#: netbox/core/choices.py:58 msgid "Errored" msgstr "Errore" -#: core/choices.py:87 core/tables/plugins.py:63 -#: templates/generic/object.html:61 +#: netbox/core/choices.py:87 netbox/core/tables/plugins.py:63 +#: netbox/templates/generic/object.html:61 msgid "Updated" msgstr "Aggiornato" -#: core/choices.py:88 +#: netbox/core/choices.py:88 msgid "Deleted" msgstr "Eliminato" -#: core/constants.py:19 core/tables/tasks.py:30 +#: netbox/core/constants.py:19 netbox/core/tables/tasks.py:30 msgid "Finished" msgstr "Finito" -#: core/constants.py:21 core/tables/jobs.py:38 templates/core/job.html:82 -#: templates/extras/htmx/script_result.html:8 +#: netbox/core/constants.py:21 netbox/core/tables/jobs.py:38 +#: netbox/templates/core/job.html:82 +#: netbox/templates/extras/htmx/script_result.html:8 msgid "Started" msgstr "Iniziato" -#: core/constants.py:22 core/tables/tasks.py:26 +#: netbox/core/constants.py:22 netbox/core/tables/tasks.py:26 msgid "Deferred" msgstr "Differito" -#: core/constants.py:24 +#: netbox/core/constants.py:24 msgid "Stopped" msgstr "Fermato" -#: core/constants.py:25 +#: netbox/core/constants.py:25 msgid "Cancelled" msgstr "Annullato" -#: core/data_backends.py:32 core/tables/plugins.py:51 -#: templates/core/plugin.html:88 templates/dcim/interface.html:216 +#: netbox/core/data_backends.py:32 netbox/core/tables/plugins.py:51 +#: netbox/templates/core/plugin.html:88 +#: netbox/templates/dcim/interface.html:216 msgid "Local" msgstr "Locale" -#: core/data_backends.py:50 core/tables/change_logging.py:20 -#: templates/account/profile.html:15 templates/users/user.html:17 -#: users/tables.py:31 +#: netbox/core/data_backends.py:50 netbox/core/tables/change_logging.py:20 +#: netbox/templates/account/profile.html:15 +#: netbox/templates/users/user.html:17 netbox/users/tables.py:31 msgid "Username" msgstr "Nome utente" -#: core/data_backends.py:52 core/data_backends.py:58 +#: netbox/core/data_backends.py:52 netbox/core/data_backends.py:58 msgid "Only used for cloning with HTTP(S)" msgstr "Utilizzato solo per la clonazione con HTTP (S)" -#: core/data_backends.py:56 templates/account/base.html:23 -#: templates/account/password.html:12 users/forms/model_forms.py:170 +#: netbox/core/data_backends.py:56 netbox/templates/account/base.html:23 +#: netbox/templates/account/password.html:12 +#: netbox/users/forms/model_forms.py:170 msgid "Password" msgstr "Password" -#: core/data_backends.py:62 +#: netbox/core/data_backends.py:62 msgid "Branch" msgstr "Ramo" -#: core/data_backends.py:120 +#: netbox/core/data_backends.py:120 #, python-brace-format msgid "Fetching remote data failed ({name}): {error}" msgstr "Recupero dati remoti non riuscito ({name}): {error}" -#: core/data_backends.py:133 +#: netbox/core/data_backends.py:133 msgid "AWS access key ID" msgstr "ID chiave di accesso AWS" -#: core/data_backends.py:137 +#: netbox/core/data_backends.py:137 msgid "AWS secret access key" msgstr "Chiave di accesso segreta AWS" -#: core/events.py:27 +#: netbox/core/events.py:27 msgid "Object created" msgstr "Oggetto creato" -#: core/events.py:28 +#: netbox/core/events.py:28 msgid "Object updated" msgstr "Oggetto aggiornato" -#: core/events.py:29 +#: netbox/core/events.py:29 msgid "Object deleted" msgstr "Oggetto eliminato" -#: core/events.py:30 +#: netbox/core/events.py:30 msgid "Job started" msgstr "Lavoro iniziato" -#: core/events.py:31 +#: netbox/core/events.py:31 msgid "Job completed" msgstr "Lavoro completato" -#: core/events.py:32 +#: netbox/core/events.py:32 msgid "Job failed" msgstr "Lavoro fallito" -#: core/events.py:33 +#: netbox/core/events.py:33 msgid "Job errored" msgstr "Lavoro errato" -#: core/filtersets.py:53 extras/filtersets.py:250 extras/filtersets.py:633 -#: extras/filtersets.py:661 +#: netbox/core/filtersets.py:53 netbox/extras/filtersets.py:250 +#: netbox/extras/filtersets.py:633 netbox/extras/filtersets.py:661 msgid "Data source (ID)" msgstr "Fonte dati (ID)" -#: core/filtersets.py:59 +#: netbox/core/filtersets.py:59 msgid "Data source (name)" msgstr "Fonte dati (nome)" -#: core/filtersets.py:145 dcim/filtersets.py:501 extras/filtersets.py:287 -#: extras/filtersets.py:331 extras/filtersets.py:353 extras/filtersets.py:413 -#: users/filtersets.py:28 +#: netbox/core/filtersets.py:145 netbox/dcim/filtersets.py:501 +#: 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 msgid "User (ID)" msgstr "Utente (ID)" -#: core/filtersets.py:151 +#: netbox/core/filtersets.py:151 msgid "User name" msgstr "Nome utente" -#: core/forms/bulk_edit.py:25 core/forms/filtersets.py:43 -#: core/tables/data.py:26 dcim/forms/bulk_edit.py:1122 -#: dcim/forms/bulk_edit.py:1400 dcim/forms/filtersets.py:1370 -#: dcim/tables/devices.py:553 dcim/tables/devicetypes.py:224 -#: extras/forms/bulk_edit.py:123 extras/forms/bulk_edit.py:187 -#: extras/forms/bulk_edit.py:246 extras/forms/filtersets.py:142 -#: extras/forms/filtersets.py:229 extras/forms/filtersets.py:294 -#: extras/tables/tables.py:162 extras/tables/tables.py:253 -#: extras/tables/tables.py:415 netbox/preferences.py:22 -#: templates/core/datasource.html:42 templates/dcim/interface.html:61 -#: templates/extras/customlink.html:17 templates/extras/eventrule.html:17 -#: templates/extras/savedfilter.html:25 -#: templates/users/objectpermission.html:25 -#: templates/virtualization/vminterface.html:29 users/forms/bulk_edit.py:89 -#: users/forms/filtersets.py:70 users/tables.py:83 -#: virtualization/forms/bulk_edit.py:217 -#: virtualization/forms/filtersets.py:215 +#: 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/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/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 +#: netbox/templates/dcim/interface.html:61 +#: netbox/templates/extras/customlink.html:17 +#: netbox/templates/extras/eventrule.html:17 +#: netbox/templates/extras/savedfilter.html:25 +#: netbox/templates/users/objectpermission.html:25 +#: netbox/templates/virtualization/vminterface.html:29 +#: netbox/users/forms/bulk_edit.py:89 netbox/users/forms/filtersets.py:70 +#: netbox/users/tables.py:83 netbox/virtualization/forms/bulk_edit.py:217 +#: netbox/virtualization/forms/filtersets.py:215 msgid "Enabled" msgstr "Abilitato" -#: core/forms/bulk_edit.py:34 extras/forms/model_forms.py:285 -#: templates/extras/savedfilter.html:52 vpn/forms/filtersets.py:97 -#: vpn/forms/filtersets.py:127 vpn/forms/filtersets.py:151 -#: vpn/forms/filtersets.py:170 vpn/forms/model_forms.py:301 -#: vpn/forms/model_forms.py:321 vpn/forms/model_forms.py:337 -#: vpn/forms/model_forms.py:357 vpn/forms/model_forms.py:380 +#: netbox/core/forms/bulk_edit.py:34 netbox/extras/forms/model_forms.py:285 +#: 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 msgid "Parameters" msgstr "Parametri" -#: core/forms/bulk_edit.py:38 templates/core/datasource.html:68 +#: netbox/core/forms/bulk_edit.py:38 netbox/templates/core/datasource.html:68 msgid "Ignore rules" msgstr "Ignora le regole" -#: core/forms/filtersets.py:30 core/forms/model_forms.py:97 -#: extras/forms/model_forms.py:248 extras/forms/model_forms.py:578 -#: extras/forms/model_forms.py:632 extras/tables/tables.py:191 -#: extras/tables/tables.py:483 extras/tables/tables.py:518 -#: templates/core/datasource.html:31 -#: templates/dcim/device/render_config.html:18 -#: templates/extras/configcontext.html:29 -#: templates/extras/configtemplate.html:21 -#: templates/extras/exporttemplate.html:35 -#: templates/virtualization/virtualmachine/render_config.html:18 +#: netbox/core/forms/filtersets.py: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/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 msgid "Data Source" msgstr "Fonte dati" -#: core/forms/filtersets.py:55 core/forms/mixins.py:21 +#: netbox/core/forms/filtersets.py:55 netbox/core/forms/mixins.py:21 msgid "File" msgstr "File" -#: core/forms/filtersets.py:60 core/forms/mixins.py:16 -#: extras/forms/filtersets.py:170 extras/forms/filtersets.py:328 -#: extras/forms/filtersets.py:413 +#: 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 msgid "Data source" msgstr "Fonte dati" -#: core/forms/filtersets.py:70 extras/forms/filtersets.py:440 +#: netbox/core/forms/filtersets.py:70 netbox/extras/forms/filtersets.py:440 msgid "Creation" msgstr "Creazione" -#: core/forms/filtersets.py:74 core/forms/filtersets.py:160 -#: extras/forms/filtersets.py:461 extras/tables/tables.py:220 -#: extras/tables/tables.py:294 extras/tables/tables.py:326 -#: extras/tables/tables.py:571 templates/core/job.html:38 -#: templates/core/objectchange.html:52 tenancy/tables/contacts.py:90 -#: vpn/tables/l2vpn.py:59 +#: 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/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 +#: netbox/tenancy/tables/contacts.py:90 netbox/vpn/tables/l2vpn.py:59 msgid "Object Type" msgstr "Tipo di oggetto" -#: core/forms/filtersets.py:84 +#: netbox/core/forms/filtersets.py:84 msgid "Created after" msgstr "Creato dopo" -#: core/forms/filtersets.py:89 +#: netbox/core/forms/filtersets.py:89 msgid "Created before" msgstr "Creato prima" -#: core/forms/filtersets.py:94 +#: netbox/core/forms/filtersets.py:94 msgid "Scheduled after" msgstr "Pianificato dopo" -#: core/forms/filtersets.py:99 +#: netbox/core/forms/filtersets.py:99 msgid "Scheduled before" msgstr "Pianificato prima" -#: core/forms/filtersets.py:104 +#: netbox/core/forms/filtersets.py:104 msgid "Started after" msgstr "Iniziato dopo" -#: core/forms/filtersets.py:109 +#: netbox/core/forms/filtersets.py:109 msgid "Started before" msgstr "Iniziato prima" -#: core/forms/filtersets.py:114 +#: netbox/core/forms/filtersets.py:114 msgid "Completed after" msgstr "Completato dopo" -#: core/forms/filtersets.py:119 +#: netbox/core/forms/filtersets.py:119 msgid "Completed before" msgstr "Completato prima" -#: core/forms/filtersets.py:126 core/forms/filtersets.py:155 -#: dcim/forms/bulk_edit.py:456 dcim/forms/filtersets.py:418 -#: dcim/forms/filtersets.py:462 dcim/forms/model_forms.py:316 -#: extras/forms/filtersets.py:456 extras/forms/filtersets.py:475 -#: extras/tables/tables.py:302 extras/tables/tables.py:342 -#: templates/core/objectchange.html:36 templates/dcim/rackreservation.html:58 -#: templates/extras/savedfilter.html:21 templates/inc/user_menu.html:33 -#: templates/users/token.html:21 templates/users/user.html:6 -#: templates/users/user.html:14 users/filtersets.py:107 -#: users/filtersets.py:174 users/forms/filtersets.py:84 -#: users/forms/filtersets.py:125 users/forms/model_forms.py:155 -#: users/forms/model_forms.py:192 users/tables.py:19 +#: 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/extras/tables/tables.py:302 netbox/extras/tables/tables.py:342 +#: netbox/templates/core/objectchange.html:36 +#: netbox/templates/dcim/rackreservation.html:58 +#: netbox/templates/extras/savedfilter.html:21 +#: netbox/templates/inc/user_menu.html:33 netbox/templates/users/token.html:21 +#: netbox/templates/users/user.html:6 netbox/templates/users/user.html:14 +#: netbox/users/filtersets.py:107 netbox/users/filtersets.py:174 +#: netbox/users/forms/filtersets.py:84 netbox/users/forms/filtersets.py:125 +#: netbox/users/forms/model_forms.py:155 netbox/users/forms/model_forms.py:192 +#: netbox/users/tables.py:19 msgid "User" msgstr "Utente" -#: core/forms/filtersets.py:134 core/tables/change_logging.py:15 -#: extras/tables/tables.py:609 extras/tables/tables.py:646 -#: templates/core/objectchange.html:32 +#: netbox/core/forms/filtersets.py:134 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" -#: core/forms/filtersets.py:139 extras/forms/filtersets.py:445 +#: netbox/core/forms/filtersets.py:139 netbox/extras/forms/filtersets.py:445 msgid "After" msgstr "Dopo" -#: core/forms/filtersets.py:144 extras/forms/filtersets.py:450 +#: netbox/core/forms/filtersets.py:144 netbox/extras/forms/filtersets.py:450 msgid "Before" msgstr "Prima" -#: core/forms/filtersets.py:148 core/tables/change_logging.py:29 -#: extras/forms/model_forms.py:396 templates/core/objectchange.html:46 -#: templates/extras/eventrule.html:71 +#: netbox/core/forms/filtersets.py:148 netbox/core/tables/change_logging.py:29 +#: netbox/extras/forms/model_forms.py:396 +#: netbox/templates/core/objectchange.html:46 +#: netbox/templates/extras/eventrule.html:71 msgid "Action" msgstr "Azione" -#: core/forms/model_forms.py:54 core/tables/data.py:46 -#: templates/core/datafile.html:27 templates/extras/report/base.html:33 -#: templates/extras/script/base.html:32 +#: netbox/core/forms/model_forms.py:54 netbox/core/tables/data.py:46 +#: netbox/templates/core/datafile.html:27 +#: netbox/templates/extras/report/base.html:33 +#: netbox/templates/extras/script/base.html:32 msgid "Source" msgstr "Fonte" -#: core/forms/model_forms.py:58 +#: netbox/core/forms/model_forms.py:58 msgid "Backend Parameters" msgstr "Parametri del backend" -#: core/forms/model_forms.py:96 +#: netbox/core/forms/model_forms.py:96 msgid "File Upload" msgstr "Caricamento di file" -#: core/forms/model_forms.py:108 +#: netbox/core/forms/model_forms.py:108 msgid "Cannot upload a file and sync from an existing file" msgstr "Impossibile caricare un file e sincronizzarlo da un file esistente" -#: core/forms/model_forms.py:110 +#: netbox/core/forms/model_forms.py:110 msgid "Must upload a file or select a data file to sync" msgstr "" "È necessario caricare un file o selezionare un file di dati da sincronizzare" -#: core/forms/model_forms.py:153 templates/dcim/rack_elevation_list.html:6 +#: netbox/core/forms/model_forms.py:153 +#: netbox/templates/dcim/rack_elevation_list.html:6 msgid "Rack Elevations" msgstr "Elevazioni dei rack" -#: core/forms/model_forms.py:157 dcim/choices.py:1518 -#: dcim/forms/bulk_edit.py:969 dcim/forms/bulk_edit.py:1357 -#: dcim/forms/bulk_edit.py:1375 dcim/tables/racks.py:158 -#: netbox/navigation/menu.py:291 netbox/navigation/menu.py:295 +#: 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 msgid "Power" msgstr "Energia" -#: core/forms/model_forms.py:159 netbox/navigation/menu.py:154 -#: templates/core/inc/config_data.html:37 +#: netbox/core/forms/model_forms.py:159 netbox/netbox/navigation/menu.py:154 +#: netbox/templates/core/inc/config_data.html:37 msgid "IPAM" msgstr "IPAM" -#: core/forms/model_forms.py:160 netbox/navigation/menu.py:230 -#: templates/core/inc/config_data.html:50 vpn/forms/bulk_edit.py:77 -#: vpn/forms/filtersets.py:43 vpn/forms/model_forms.py:61 -#: vpn/forms/model_forms.py:146 +#: netbox/core/forms/model_forms.py:160 netbox/netbox/navigation/menu.py:230 +#: netbox/templates/core/inc/config_data.html:50 +#: netbox/vpn/forms/bulk_edit.py:77 netbox/vpn/forms/filtersets.py:43 +#: netbox/vpn/forms/model_forms.py:61 netbox/vpn/forms/model_forms.py:146 msgid "Security" msgstr "Sicurezza" -#: core/forms/model_forms.py:161 templates/core/inc/config_data.html:59 +#: netbox/core/forms/model_forms.py:161 +#: netbox/templates/core/inc/config_data.html:59 msgid "Banners" msgstr "Banner" -#: core/forms/model_forms.py:162 templates/core/inc/config_data.html:80 +#: netbox/core/forms/model_forms.py:162 +#: netbox/templates/core/inc/config_data.html:80 msgid "Pagination" msgstr "Impaginazione" -#: core/forms/model_forms.py:163 extras/forms/bulk_edit.py:92 -#: extras/forms/filtersets.py:47 extras/forms/model_forms.py:116 -#: extras/forms/model_forms.py:129 templates/core/inc/config_data.html:93 +#: 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/model_forms.py:129 +#: netbox/templates/core/inc/config_data.html:93 msgid "Validation" msgstr "Validazione" -#: core/forms/model_forms.py:164 templates/account/preferences.html:6 +#: netbox/core/forms/model_forms.py:164 +#: netbox/templates/account/preferences.html:6 msgid "User Preferences" msgstr "Preferenze utente" -#: core/forms/model_forms.py:167 dcim/forms/filtersets.py:732 -#: templates/core/inc/config_data.html:127 users/forms/model_forms.py:64 +#: netbox/core/forms/model_forms.py:167 netbox/dcim/forms/filtersets.py:732 +#: netbox/templates/core/inc/config_data.html:127 +#: netbox/users/forms/model_forms.py:64 msgid "Miscellaneous" msgstr "Varie" -#: core/forms/model_forms.py:169 +#: netbox/core/forms/model_forms.py:169 msgid "Config Revision" msgstr "Revisione della configurazione" -#: core/forms/model_forms.py:208 +#: netbox/core/forms/model_forms.py:208 msgid "This parameter has been defined statically and cannot be modified." msgstr "" "Questo parametro è stato definito staticamente e non può essere modificato." -#: core/forms/model_forms.py:216 +#: netbox/core/forms/model_forms.py:216 #, python-brace-format msgid "Current value: {value}" msgstr "Valore attuale: {value}" -#: core/forms/model_forms.py:218 +#: netbox/core/forms/model_forms.py:218 msgid " (default)" msgstr " (impostazione predefinita)" -#: core/models/change_logging.py:29 +#: netbox/core/models/change_logging.py:29 msgid "time" msgstr "tempo" -#: core/models/change_logging.py:42 +#: netbox/core/models/change_logging.py:42 msgid "user name" msgstr "nome utente" -#: core/models/change_logging.py:47 +#: netbox/core/models/change_logging.py:47 msgid "request ID" msgstr "ID della richiesta" -#: core/models/change_logging.py:52 extras/models/staging.py:69 +#: netbox/core/models/change_logging.py:52 netbox/extras/models/staging.py:69 msgid "action" msgstr "azione" -#: core/models/change_logging.py:86 +#: netbox/core/models/change_logging.py:86 msgid "pre-change data" msgstr "dati precedenti alla modifica" -#: core/models/change_logging.py:92 +#: netbox/core/models/change_logging.py:92 msgid "post-change data" msgstr "dati post-modifica" -#: core/models/change_logging.py:106 +#: netbox/core/models/change_logging.py:106 msgid "object change" msgstr "cambio di oggetto" -#: core/models/change_logging.py:107 +#: netbox/core/models/change_logging.py:107 msgid "object changes" msgstr "modifiche agli oggetti" -#: core/models/change_logging.py:123 +#: netbox/core/models/change_logging.py:123 #, python-brace-format msgid "Change logging is not supported for this object type ({type})." msgstr "" "La registrazione delle modifiche non è supportata per questo tipo di oggetto" " ({type})." -#: core/models/config.py:18 core/models/data.py:266 core/models/files.py:27 -#: core/models/jobs.py:49 extras/models/models.py:730 -#: extras/models/notifications.py:39 extras/models/notifications.py:186 -#: netbox/models/features.py:53 users/models/tokens.py:32 +#: netbox/core/models/config.py:18 netbox/core/models/data.py:266 +#: 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/notifications.py:186 +#: netbox/netbox/models/features.py:53 netbox/users/models/tokens.py:32 msgid "created" msgstr "creato" -#: core/models/config.py:22 +#: netbox/core/models/config.py:22 msgid "comment" msgstr "commento" -#: core/models/config.py:29 +#: netbox/core/models/config.py:29 msgid "configuration data" msgstr "dati di configurazione" -#: core/models/config.py:36 +#: netbox/core/models/config.py:36 msgid "config revision" msgstr "revisione della configurazione" -#: core/models/config.py:37 +#: netbox/core/models/config.py:37 msgid "config revisions" msgstr "revisioni della configurazione" -#: core/models/config.py:41 +#: netbox/core/models/config.py:41 msgid "Default configuration" msgstr "Configurazione predefinita" -#: core/models/config.py:43 +#: netbox/core/models/config.py:43 msgid "Current configuration" msgstr "Configurazione attuale" -#: core/models/config.py:44 +#: netbox/core/models/config.py:44 #, python-brace-format msgid "Config revision #{id}" msgstr "Revisione della configurazione #{id}" -#: core/models/data.py:44 dcim/models/cables.py:43 -#: dcim/models/device_component_templates.py:203 -#: dcim/models/device_component_templates.py:237 -#: dcim/models/device_component_templates.py:272 -#: dcim/models/device_component_templates.py:334 -#: dcim/models/device_component_templates.py:413 -#: dcim/models/device_component_templates.py:512 -#: dcim/models/device_component_templates.py:612 -#: dcim/models/device_components.py:283 dcim/models/device_components.py:312 -#: dcim/models/device_components.py:345 dcim/models/device_components.py:463 -#: dcim/models/device_components.py:605 dcim/models/device_components.py:970 -#: dcim/models/device_components.py:1044 dcim/models/power.py:102 -#: extras/models/customfields.py:78 extras/models/search.py:41 -#: virtualization/models/clusters.py:61 vpn/models/l2vpn.py:32 +#: 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/extras/models/search.py:41 +#: netbox/virtualization/models/clusters.py:61 netbox/vpn/models/l2vpn.py:32 msgid "type" msgstr "tipo" -#: core/models/data.py:49 extras/choices.py:37 extras/models/models.py:164 -#: extras/tables/tables.py:656 templates/core/datasource.html:58 -#: templates/core/plugin.html:66 +#: netbox/core/models/data.py:49 netbox/extras/choices.py:37 +#: netbox/extras/models/models.py:164 netbox/extras/tables/tables.py:656 +#: netbox/templates/core/datasource.html:58 +#: netbox/templates/core/plugin.html:66 msgid "URL" msgstr "URL" -#: core/models/data.py:59 dcim/models/device_component_templates.py:418 -#: dcim/models/device_components.py:512 extras/models/models.py:70 -#: extras/models/models.py:301 extras/models/models.py:526 -#: users/models/permissions.py:29 +#: netbox/core/models/data.py:59 +#: netbox/dcim/models/device_component_templates.py:418 +#: netbox/dcim/models/device_components.py:512 +#: 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" msgstr "abilitato" -#: core/models/data.py:63 +#: netbox/core/models/data.py:63 msgid "ignore rules" msgstr "ignora le regole" -#: core/models/data.py:65 +#: netbox/core/models/data.py:65 msgid "Patterns (one per line) matching files to ignore when syncing" msgstr "" "Schemi (uno per riga) corrispondenti ai file da ignorare durante la " "sincronizzazione" -#: core/models/data.py:68 extras/models/models.py:534 +#: netbox/core/models/data.py:68 netbox/extras/models/models.py:534 msgid "parameters" msgstr "parametri" -#: core/models/data.py:73 +#: netbox/core/models/data.py:73 msgid "last synced" msgstr "ultima sincronizzazione" -#: core/models/data.py:81 +#: netbox/core/models/data.py:81 msgid "data source" msgstr "origine dati" -#: core/models/data.py:82 +#: netbox/core/models/data.py:82 msgid "data sources" msgstr "fonti di dati" -#: core/models/data.py:122 +#: netbox/core/models/data.py:122 #, python-brace-format msgid "Unknown backend type: {type}" msgstr "Tipo di backend sconosciuto: {type}" -#: core/models/data.py:164 +#: netbox/core/models/data.py:164 msgid "Cannot initiate sync; syncing already in progress." msgstr "" "Impossibile avviare la sincronizzazione. La sincronizzazione è già in corso." -#: core/models/data.py:177 +#: netbox/core/models/data.py:177 msgid "" "There was an error initializing the backend. A dependency needs to be " "installed: " @@ -1902,1224 +2169,1286 @@ msgstr "" "Si è verificato un errore durante l'inizializzazione del backend. È " "necessario installare una dipendenza: " -#: core/models/data.py:270 core/models/files.py:31 -#: netbox/models/features.py:59 +#: netbox/core/models/data.py:270 netbox/core/models/files.py:31 +#: netbox/netbox/models/features.py:59 msgid "last updated" msgstr "ultimo aggiornamento" -#: core/models/data.py:280 dcim/models/cables.py:444 +#: netbox/core/models/data.py:280 netbox/dcim/models/cables.py:444 msgid "path" msgstr "sentiero" -#: core/models/data.py:283 +#: netbox/core/models/data.py:283 msgid "File path relative to the data source's root" msgstr "Percorso del file relativo alla radice dell'origine dati" -#: core/models/data.py:287 ipam/models/ip.py:503 +#: netbox/core/models/data.py:287 netbox/ipam/models/ip.py:503 msgid "size" msgstr "taglia" -#: core/models/data.py:290 +#: netbox/core/models/data.py:290 msgid "hash" msgstr "cancelletto" -#: core/models/data.py:294 +#: netbox/core/models/data.py:294 msgid "Length must be 64 hexadecimal characters." msgstr "La lunghezza deve essere di 64 caratteri esadecimali." -#: core/models/data.py:296 +#: netbox/core/models/data.py:296 msgid "SHA256 hash of the file data" msgstr "Hash SHA256 dei dati del file" -#: core/models/data.py:313 +#: netbox/core/models/data.py:313 msgid "data file" msgstr "file di dati" -#: core/models/data.py:314 +#: netbox/core/models/data.py:314 msgid "data files" msgstr "file di dati" -#: core/models/data.py:401 +#: netbox/core/models/data.py:401 msgid "auto sync record" msgstr "registrazione di sincronizzazione automatica" -#: core/models/data.py:402 +#: netbox/core/models/data.py:402 msgid "auto sync records" msgstr "sincronizzazione automatica dei record" -#: core/models/files.py:37 +#: netbox/core/models/files.py:37 msgid "file root" msgstr "radice del file" -#: core/models/files.py:42 +#: netbox/core/models/files.py:42 msgid "file path" msgstr "percorso del file" -#: core/models/files.py:44 +#: netbox/core/models/files.py:44 msgid "File path relative to the designated root path" msgstr "Percorso del file relativo al percorso principale designato" -#: core/models/files.py:61 +#: netbox/core/models/files.py:61 msgid "managed file" msgstr "file gestito" -#: core/models/files.py:62 +#: netbox/core/models/files.py:62 msgid "managed files" msgstr "file gestiti" -#: core/models/jobs.py:53 +#: netbox/core/models/jobs.py:54 msgid "scheduled" msgstr "pianificata" -#: core/models/jobs.py:58 +#: netbox/core/models/jobs.py:59 msgid "interval" msgstr "intervallo" -#: core/models/jobs.py:64 +#: netbox/core/models/jobs.py:65 msgid "Recurrence interval (in minutes)" msgstr "Intervallo di ricorrenza (in minuti)" -#: core/models/jobs.py:67 +#: netbox/core/models/jobs.py:68 msgid "started" msgstr "iniziato" -#: core/models/jobs.py:72 +#: netbox/core/models/jobs.py:73 msgid "completed" msgstr "completato" -#: core/models/jobs.py:90 extras/models/models.py:101 -#: extras/models/staging.py:87 +#: netbox/core/models/jobs.py:91 netbox/extras/models/models.py:101 +#: netbox/extras/models/staging.py:87 msgid "data" msgstr "dato" -#: core/models/jobs.py:95 +#: netbox/core/models/jobs.py:96 msgid "error" msgstr "errore" -#: core/models/jobs.py:100 +#: netbox/core/models/jobs.py:101 msgid "job ID" msgstr "ID lavoro" -#: core/models/jobs.py:111 +#: netbox/core/models/jobs.py:112 msgid "job" msgstr "occupazione" -#: core/models/jobs.py:112 +#: netbox/core/models/jobs.py:113 msgid "jobs" msgstr "lavori" -#: core/models/jobs.py:135 +#: netbox/core/models/jobs.py:136 #, python-brace-format msgid "Jobs cannot be assigned to this object type ({type})." msgstr "" "I lavori non possono essere assegnati a questo tipo di oggetto ({type})." -#: core/models/jobs.py:185 +#: netbox/core/models/jobs.py:190 #, python-brace-format msgid "Invalid status for job termination. Choices are: {choices}" msgstr "" "Stato non valido per la cessazione del lavoro. Le scelte sono: {choices}" -#: core/models/jobs.py:216 +#: netbox/core/models/jobs.py:221 msgid "" "enqueue() cannot be called with values for both schedule_at and immediate." msgstr "" "enqueue () non può essere chiamato con valori sia per schedule_at che per " "immediate." -#: core/signals.py:126 +#: netbox/core/signals.py:126 #, python-brace-format msgid "Deletion is prevented by a protection rule: {message}" msgstr "L'eliminazione è impedita da una regola di protezione: {message}" -#: core/tables/change_logging.py:25 templates/account/profile.html:19 -#: templates/users/user.html:21 +#: netbox/core/tables/change_logging.py:25 +#: netbox/templates/account/profile.html:19 +#: netbox/templates/users/user.html:21 msgid "Full Name" msgstr "Nome completo" -#: core/tables/change_logging.py:37 core/tables/jobs.py:21 -#: extras/choices.py:41 extras/tables/tables.py:279 -#: extras/tables/tables.py:297 extras/tables/tables.py:329 -#: extras/tables/tables.py:409 extras/tables/tables.py:470 -#: extras/tables/tables.py:576 extras/tables/tables.py:616 -#: extras/tables/tables.py:653 netbox/tables/tables.py:244 -#: templates/core/objectchange.html:58 templates/extras/eventrule.html:78 -#: templates/extras/journalentry.html:18 tenancy/tables/contacts.py:93 -#: vpn/tables/l2vpn.py:64 +#: netbox/core/tables/change_logging.py:37 netbox/core/tables/jobs.py:21 +#: netbox/extras/choices.py:41 netbox/extras/tables/tables.py:279 +#: 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/templates/core/objectchange.html:58 +#: netbox/templates/extras/eventrule.html:78 +#: netbox/templates/extras/journalentry.html:18 +#: netbox/tenancy/tables/contacts.py:93 netbox/vpn/tables/l2vpn.py:64 msgid "Object" msgstr "Oggetto" -#: core/tables/change_logging.py:42 templates/core/objectchange.html:68 +#: netbox/core/tables/change_logging.py:42 +#: netbox/templates/core/objectchange.html:68 msgid "Request ID" msgstr "ID della richiesta" -#: core/tables/config.py:21 users/forms/filtersets.py:44 users/tables.py:39 +#: netbox/core/tables/config.py:21 netbox/users/forms/filtersets.py:44 +#: netbox/users/tables.py:39 msgid "Is Active" msgstr "È attivo" -#: core/tables/data.py:50 templates/core/datafile.html:31 +#: netbox/core/tables/data.py:50 netbox/templates/core/datafile.html:31 msgid "Path" msgstr "Sentiero" -#: core/tables/data.py:54 templates/extras/inc/result_pending.html:7 +#: netbox/core/tables/data.py:54 +#: netbox/templates/extras/inc/result_pending.html:7 msgid "Last updated" msgstr "Ultimo aggiornamento" -#: core/tables/jobs.py:10 core/tables/tasks.py:76 -#: dcim/tables/devicetypes.py:164 extras/tables/tables.py:216 -#: extras/tables/tables.py:460 netbox/tables/tables.py:189 -#: templates/dcim/virtualchassis_edit.html:52 utilities/forms/forms.py:73 -#: wireless/tables/wirelesslink.py:17 +#: 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/templates/dcim/virtualchassis_edit.html:52 +#: netbox/utilities/forms/forms.py:73 +#: netbox/wireless/tables/wirelesslink.py:17 msgid "ID" msgstr "ID" -#: core/tables/jobs.py:35 +#: netbox/core/tables/jobs.py:35 msgid "Interval" msgstr "Intervallo" -#: core/tables/plugins.py:14 templates/vpn/ipsecprofile.html:44 -#: vpn/forms/bulk_edit.py:141 vpn/forms/bulk_import.py:172 -#: vpn/tables/crypto.py:61 +#: netbox/core/tables/plugins.py:14 netbox/templates/vpn/ipsecprofile.html:44 +#: netbox/vpn/forms/bulk_edit.py:141 netbox/vpn/forms/bulk_import.py:172 +#: netbox/vpn/tables/crypto.py:61 msgid "Version" msgstr "Versione" -#: core/tables/plugins.py:19 templates/core/datafile.html:38 +#: netbox/core/tables/plugins.py:19 netbox/templates/core/datafile.html:38 msgid "Last Updated" msgstr "Ultimo aggiornamento" -#: core/tables/plugins.py:23 +#: netbox/core/tables/plugins.py:23 msgid "Minimum NetBox Version" msgstr "Versione minima di NetBox" -#: core/tables/plugins.py:27 +#: netbox/core/tables/plugins.py:27 msgid "Maximum NetBox Version" msgstr "Versione massima di NetBox" -#: core/tables/plugins.py:31 core/tables/plugins.py:74 +#: netbox/core/tables/plugins.py:31 netbox/core/tables/plugins.py:74 msgid "No plugin data found" msgstr "Nessun dato del plugin trovato" -#: core/tables/plugins.py:48 templates/core/plugin.html:62 +#: netbox/core/tables/plugins.py:48 netbox/templates/core/plugin.html:62 msgid "Author" msgstr "Autore" -#: core/tables/plugins.py:54 +#: netbox/core/tables/plugins.py:54 msgid "Installed" msgstr "Installato" -#: core/tables/plugins.py:57 templates/core/plugin.html:84 +#: netbox/core/tables/plugins.py:57 netbox/templates/core/plugin.html:84 msgid "Certified" msgstr "Certificato" -#: core/tables/plugins.py:60 +#: netbox/core/tables/plugins.py:60 msgid "Published" msgstr "Pubblicato" -#: core/tables/plugins.py:66 +#: netbox/core/tables/plugins.py:66 msgid "Installed Version" msgstr "Versione installata" -#: core/tables/plugins.py:70 +#: netbox/core/tables/plugins.py:70 msgid "Latest Version" msgstr "Ultima versione" -#: core/tables/tasks.py:18 +#: netbox/core/tables/tasks.py:18 msgid "Oldest Task" msgstr "Attività più vecchia" -#: core/tables/tasks.py:42 templates/core/rq_worker_list.html:39 +#: netbox/core/tables/tasks.py:42 netbox/templates/core/rq_worker_list.html:39 msgid "Workers" msgstr "Lavoratori" -#: core/tables/tasks.py:46 vpn/tables/tunnels.py:88 +#: netbox/core/tables/tasks.py:46 netbox/vpn/tables/tunnels.py:88 msgid "Host" msgstr "Ospite" -#: core/tables/tasks.py:50 ipam/forms/filtersets.py:535 +#: netbox/core/tables/tasks.py:50 netbox/ipam/forms/filtersets.py:535 msgid "Port" msgstr "Porto" -#: core/tables/tasks.py:54 +#: netbox/core/tables/tasks.py:54 msgid "DB" msgstr "DB" -#: core/tables/tasks.py:58 +#: netbox/core/tables/tasks.py:58 msgid "Scheduler PID" msgstr "PID dello scheduler" -#: core/tables/tasks.py:62 +#: netbox/core/tables/tasks.py:62 msgid "No queues found" msgstr "Nessuna coda trovata" -#: core/tables/tasks.py:82 +#: netbox/core/tables/tasks.py:82 msgid "Enqueued" msgstr "In coda" -#: core/tables/tasks.py:85 +#: netbox/core/tables/tasks.py:85 msgid "Ended" msgstr "Conclusa" -#: core/tables/tasks.py:93 templates/core/rq_task.html:85 +#: netbox/core/tables/tasks.py:93 netbox/templates/core/rq_task.html:85 msgid "Callable" msgstr "Richiamabile" -#: core/tables/tasks.py:97 +#: netbox/core/tables/tasks.py:97 msgid "No tasks found" msgstr "Nessuna attività trovata" -#: core/tables/tasks.py:118 templates/core/rq_worker.html:47 +#: netbox/core/tables/tasks.py:118 netbox/templates/core/rq_worker.html:47 msgid "State" msgstr "Stato" -#: core/tables/tasks.py:121 templates/core/rq_worker.html:51 +#: netbox/core/tables/tasks.py:121 netbox/templates/core/rq_worker.html:51 msgid "Birth" msgstr "Nascita" -#: core/tables/tasks.py:124 templates/core/rq_worker.html:59 +#: netbox/core/tables/tasks.py:124 netbox/templates/core/rq_worker.html:59 msgid "PID" msgstr "PID" -#: core/tables/tasks.py:128 +#: netbox/core/tables/tasks.py:128 msgid "No workers found" msgstr "Nessun lavoratore trovato" -#: core/views.py:90 +#: netbox/core/views.py:90 #, python-brace-format msgid "Queued job #{id} to sync {datasource}" msgstr "Lavoro in coda #{id} da sincronizzare {datasource}" -#: core/views.py:319 +#: netbox/core/views.py:319 #, python-brace-format msgid "Restored configuration revision #{id}" msgstr "Revisione della configurazione ripristinata #{id}" -#: core/views.py:412 core/views.py:455 core/views.py:531 +#: 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 "Lavoro {job_id} non trovato" -#: core/views.py:463 +#: netbox/core/views.py:463 #, python-brace-format msgid "Job {id} has been deleted." msgstr "Lavoro {id} è stato eliminato." -#: core/views.py:465 +#: netbox/core/views.py:465 #, python-brace-format msgid "Error deleting job {id}: {error}" msgstr "Errore durante l'eliminazione del lavoro {id}: {error}" -#: core/views.py:478 core/views.py:496 +#: netbox/core/views.py:478 netbox/core/views.py:496 #, python-brace-format msgid "Job {id} not found." msgstr "Lavoro {id} non trovato." -#: core/views.py:484 +#: netbox/core/views.py:484 #, python-brace-format msgid "Job {id} has been re-enqueued." msgstr "Lavoro {id} è stato nuovamente accodato." -#: core/views.py:519 +#: netbox/core/views.py:519 #, python-brace-format msgid "Job {id} has been enqueued." msgstr "Lavoro {id} è stato messo in coda." -#: core/views.py:538 +#: netbox/core/views.py:538 #, python-brace-format msgid "Job {id} has been stopped." msgstr "Lavoro {id} è stato fermato." -#: core/views.py:540 +#: netbox/core/views.py:540 #, python-brace-format msgid "Failed to stop job {id}" msgstr "Interruzione del lavoro non riuscita {id}" -#: core/views.py:678 +#: netbox/core/views.py:674 msgid "Plugins catalog could not be loaded" msgstr "Impossibile caricare il catalogo dei plugin" -#: core/views.py:712 +#: netbox/core/views.py:708 #, python-brace-format msgid "Plugin {name} not found" msgstr "Plugin {name} non trovato" -#: dcim/api/serializers_/devices.py:49 dcim/api/serializers_/devicetypes.py:25 +#: netbox/dcim/api/serializers_/devices.py:49 +#: netbox/dcim/api/serializers_/devicetypes.py:25 msgid "Position (U)" msgstr "Posizione (U)" -#: dcim/api/serializers_/racks.py:112 templates/dcim/rack.html:28 +#: netbox/dcim/api/serializers_/racks.py:112 +#: netbox/templates/dcim/rack.html:28 msgid "Facility ID" msgstr "ID struttura" -#: dcim/choices.py:21 virtualization/choices.py:21 +#: netbox/dcim/choices.py:21 netbox/virtualization/choices.py:21 msgid "Staging" msgstr "Messa in scena" -#: dcim/choices.py:23 dcim/choices.py:189 dcim/choices.py:240 -#: dcim/choices.py:1531 virtualization/choices.py:23 -#: virtualization/choices.py:48 +#: 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 msgid "Decommissioning" msgstr "Smantellamento" -#: dcim/choices.py:24 +#: netbox/dcim/choices.py:24 msgid "Retired" msgstr "Ritirato" -#: dcim/choices.py:65 +#: netbox/dcim/choices.py:65 msgid "2-post frame" msgstr "Telaio a 2 montanti" -#: dcim/choices.py:66 +#: netbox/dcim/choices.py:66 msgid "4-post frame" msgstr "Telaio a 4 montanti" -#: dcim/choices.py:67 +#: netbox/dcim/choices.py:67 msgid "4-post cabinet" msgstr "Armadio a 4 montanti" -#: dcim/choices.py:68 +#: netbox/dcim/choices.py:68 msgid "Wall-mounted frame" msgstr "Telaio a parete" -#: dcim/choices.py:69 +#: netbox/dcim/choices.py:69 msgid "Wall-mounted frame (vertical)" msgstr "Telaio a parete (verticale)" -#: dcim/choices.py:70 +#: netbox/dcim/choices.py:70 msgid "Wall-mounted cabinet" msgstr "Armadio a parete" -#: dcim/choices.py:71 +#: netbox/dcim/choices.py:71 msgid "Wall-mounted cabinet (vertical)" msgstr "Armadio a parete (verticale)" -#: dcim/choices.py:83 dcim/choices.py:84 dcim/choices.py:85 dcim/choices.py:86 +#: netbox/dcim/choices.py:83 netbox/dcim/choices.py:84 +#: netbox/dcim/choices.py:85 netbox/dcim/choices.py:86 #, python-brace-format msgid "{n} inches" msgstr "{n} pollici" -#: dcim/choices.py:100 ipam/choices.py:32 ipam/choices.py:50 -#: ipam/choices.py:70 ipam/choices.py:155 wireless/choices.py:26 +#: netbox/dcim/choices.py:100 netbox/ipam/choices.py:32 +#: netbox/ipam/choices.py:50 netbox/ipam/choices.py:70 +#: netbox/ipam/choices.py:155 netbox/wireless/choices.py:26 msgid "Reserved" msgstr "Riservato" -#: dcim/choices.py:101 templates/dcim/device.html:259 +#: netbox/dcim/choices.py:101 netbox/templates/dcim/device.html:259 msgid "Available" msgstr "Disponibile" -#: dcim/choices.py:104 ipam/choices.py:33 ipam/choices.py:51 -#: ipam/choices.py:71 ipam/choices.py:156 wireless/choices.py:28 +#: netbox/dcim/choices.py:104 netbox/ipam/choices.py:33 +#: netbox/ipam/choices.py:51 netbox/ipam/choices.py:71 +#: netbox/ipam/choices.py:156 netbox/wireless/choices.py:28 msgid "Deprecated" msgstr "Obsoleto" -#: dcim/choices.py:114 templates/dcim/inc/panels/racktype_dimensions.html:41 +#: netbox/dcim/choices.py:114 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:41 msgid "Millimeters" msgstr "Millimetri" -#: dcim/choices.py:115 dcim/choices.py:1553 +#: netbox/dcim/choices.py:115 netbox/dcim/choices.py:1555 msgid "Inches" msgstr "Pollici" -#: dcim/choices.py:136 dcim/choices.py:207 dcim/choices.py:254 +#: netbox/dcim/choices.py:136 netbox/dcim/choices.py:207 +#: netbox/dcim/choices.py:254 msgid "Front to rear" msgstr "Da anteriore a posteriore" -#: dcim/choices.py:137 dcim/choices.py:208 dcim/choices.py:255 +#: netbox/dcim/choices.py:137 netbox/dcim/choices.py:208 +#: netbox/dcim/choices.py:255 msgid "Rear to front" msgstr "Posteriore/anteriore" -#: dcim/choices.py:151 dcim/forms/bulk_edit.py:68 dcim/forms/bulk_edit.py:87 -#: dcim/forms/bulk_edit.py:173 dcim/forms/bulk_edit.py:1405 -#: dcim/forms/bulk_import.py:60 dcim/forms/bulk_import.py:74 -#: dcim/forms/bulk_import.py:137 dcim/forms/bulk_import.py:566 -#: dcim/forms/bulk_import.py:833 dcim/forms/bulk_import.py:1088 -#: dcim/forms/filtersets.py:234 dcim/forms/model_forms.py:74 -#: dcim/forms/model_forms.py:93 dcim/forms/model_forms.py:170 -#: dcim/forms/model_forms.py:1062 dcim/forms/model_forms.py:1502 -#: dcim/forms/object_import.py:176 dcim/tables/devices.py:656 -#: dcim/tables/devices.py:869 dcim/tables/devices.py:954 -#: extras/tables/tables.py:223 ipam/tables/fhrp.py:59 ipam/tables/ip.py:378 -#: ipam/tables/services.py:44 templates/dcim/interface.html:102 -#: templates/dcim/interface.html:309 templates/dcim/location.html:41 -#: templates/dcim/region.html:37 templates/dcim/sitegroup.html:37 -#: templates/ipam/service.html:28 templates/tenancy/contactgroup.html:29 -#: templates/tenancy/tenantgroup.html:37 -#: templates/virtualization/vminterface.html:39 -#: templates/wireless/wirelesslangroup.html:37 tenancy/forms/bulk_edit.py:27 -#: tenancy/forms/bulk_edit.py:61 tenancy/forms/bulk_import.py:24 -#: tenancy/forms/bulk_import.py:58 tenancy/forms/model_forms.py:25 -#: tenancy/forms/model_forms.py:68 virtualization/forms/bulk_edit.py:207 -#: virtualization/forms/bulk_import.py:151 -#: virtualization/tables/virtualmachines.py:162 wireless/forms/bulk_edit.py:24 -#: wireless/forms/bulk_import.py:21 wireless/forms/model_forms.py:21 +#: 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/templates/dcim/location.html:41 netbox/templates/dcim/region.html:37 +#: netbox/templates/dcim/sitegroup.html:37 +#: netbox/templates/ipam/service.html:28 +#: netbox/templates/tenancy/contactgroup.html:29 +#: netbox/templates/tenancy/tenantgroup.html:37 +#: netbox/templates/virtualization/vminterface.html:39 +#: netbox/templates/wireless/wirelesslangroup.html:37 +#: netbox/tenancy/forms/bulk_edit.py:27 netbox/tenancy/forms/bulk_edit.py:61 +#: netbox/tenancy/forms/bulk_import.py:24 +#: netbox/tenancy/forms/bulk_import.py:58 +#: netbox/tenancy/forms/model_forms.py:25 +#: netbox/tenancy/forms/model_forms.py:68 +#: netbox/virtualization/forms/bulk_edit.py:207 +#: netbox/virtualization/forms/bulk_import.py:151 +#: netbox/virtualization/tables/virtualmachines.py:162 +#: netbox/wireless/forms/bulk_edit.py:24 +#: netbox/wireless/forms/bulk_import.py:21 +#: netbox/wireless/forms/model_forms.py:21 msgid "Parent" msgstr "Genitore" -#: dcim/choices.py:152 +#: netbox/dcim/choices.py:152 msgid "Child" msgstr "Bambino" -#: dcim/choices.py:166 templates/dcim/device.html:340 -#: templates/dcim/rack.html:133 templates/dcim/rack_elevation_list.html:20 -#: templates/dcim/rackreservation.html:76 +#: netbox/dcim/choices.py:166 netbox/templates/dcim/device.html:340 +#: netbox/templates/dcim/rack.html:133 +#: netbox/templates/dcim/rack_elevation_list.html:20 +#: netbox/templates/dcim/rackreservation.html:76 msgid "Front" msgstr "Anteriore" -#: dcim/choices.py:167 templates/dcim/device.html:346 -#: templates/dcim/rack.html:139 templates/dcim/rack_elevation_list.html:21 -#: templates/dcim/rackreservation.html:82 +#: netbox/dcim/choices.py:167 netbox/templates/dcim/device.html:346 +#: netbox/templates/dcim/rack.html:139 +#: netbox/templates/dcim/rack_elevation_list.html:21 +#: netbox/templates/dcim/rackreservation.html:82 msgid "Rear" msgstr "Posteriore" -#: dcim/choices.py:186 dcim/choices.py:238 virtualization/choices.py:46 +#: netbox/dcim/choices.py:186 netbox/dcim/choices.py:238 +#: netbox/virtualization/choices.py:46 msgid "Staged" msgstr "Messo in scena" -#: dcim/choices.py:188 +#: netbox/dcim/choices.py:188 msgid "Inventory" msgstr "Inventario" -#: dcim/choices.py:209 dcim/choices.py:256 +#: netbox/dcim/choices.py:209 netbox/dcim/choices.py:256 msgid "Left to right" msgstr "Da sinistra a destra" -#: dcim/choices.py:210 dcim/choices.py:257 +#: netbox/dcim/choices.py:210 netbox/dcim/choices.py:257 msgid "Right to left" msgstr "Da destra a sinistra" -#: dcim/choices.py:211 dcim/choices.py:258 +#: netbox/dcim/choices.py:211 netbox/dcim/choices.py:258 msgid "Side to rear" msgstr "Da lato a retro" -#: dcim/choices.py:212 +#: netbox/dcim/choices.py:212 msgid "Rear to side" msgstr "Da dietro a lato" -#: dcim/choices.py:213 +#: netbox/dcim/choices.py:213 msgid "Bottom to top" msgstr "Dal basso verso l'alto" -#: dcim/choices.py:214 +#: netbox/dcim/choices.py:214 msgid "Top to bottom" msgstr "Dall'alto verso il basso" -#: dcim/choices.py:215 dcim/choices.py:259 dcim/choices.py:1303 +#: netbox/dcim/choices.py:215 netbox/dcim/choices.py:259 +#: netbox/dcim/choices.py:1305 msgid "Passive" msgstr "Passivo" -#: dcim/choices.py:216 +#: netbox/dcim/choices.py:216 msgid "Mixed" msgstr "Misto" -#: dcim/choices.py:484 dcim/choices.py:733 +#: netbox/dcim/choices.py:484 netbox/dcim/choices.py:733 msgid "NEMA (Non-locking)" msgstr "NEMA (non bloccante)" -#: dcim/choices.py:506 dcim/choices.py:755 +#: netbox/dcim/choices.py:506 netbox/dcim/choices.py:755 msgid "NEMA (Locking)" msgstr "NEMA (bloccaggio)" -#: dcim/choices.py:530 dcim/choices.py:779 +#: netbox/dcim/choices.py:530 netbox/dcim/choices.py:779 msgid "California Style" msgstr "Stile californiano" -#: dcim/choices.py:538 +#: netbox/dcim/choices.py:538 msgid "International/ITA" msgstr "Internazionale/ITA" -#: dcim/choices.py:573 dcim/choices.py:814 +#: netbox/dcim/choices.py:573 netbox/dcim/choices.py:814 msgid "Proprietary" msgstr "Proprietario" -#: dcim/choices.py:581 dcim/choices.py:824 dcim/choices.py:1219 -#: dcim/choices.py:1221 dcim/choices.py:1447 dcim/choices.py:1449 -#: netbox/navigation/menu.py:200 +#: 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 msgid "Other" msgstr "Altro" -#: dcim/choices.py:787 +#: netbox/dcim/choices.py:787 msgid "ITA/International" msgstr "ITA/Internazionale" -#: dcim/choices.py:854 +#: netbox/dcim/choices.py:854 msgid "Physical" msgstr "Fisico" -#: dcim/choices.py:855 dcim/choices.py:1023 +#: netbox/dcim/choices.py:855 netbox/dcim/choices.py:1024 msgid "Virtual" msgstr "Virtuale" -#: dcim/choices.py:856 dcim/choices.py:1097 dcim/forms/bulk_edit.py:1515 -#: dcim/forms/filtersets.py:1330 dcim/forms/model_forms.py:988 -#: dcim/forms/model_forms.py:1397 netbox/navigation/menu.py:140 -#: netbox/navigation/menu.py:144 templates/dcim/interface.html:210 +#: 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 msgid "Wireless" msgstr "Wireless" -#: dcim/choices.py:1021 +#: netbox/dcim/choices.py:1022 msgid "Virtual interfaces" msgstr "Interfacce virtuali" -#: dcim/choices.py:1024 dcim/forms/bulk_edit.py:1410 -#: dcim/forms/bulk_import.py:840 dcim/forms/model_forms.py:974 -#: dcim/tables/devices.py:660 templates/dcim/interface.html:106 -#: templates/virtualization/vminterface.html:43 -#: virtualization/forms/bulk_edit.py:212 -#: virtualization/forms/bulk_import.py:158 -#: virtualization/tables/virtualmachines.py:166 +#: 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/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 msgid "Bridge" msgstr "ponte" -#: dcim/choices.py:1025 +#: netbox/dcim/choices.py:1026 msgid "Link Aggregation Group (LAG)" msgstr "Link Aggregation Group (GAL)" -#: dcim/choices.py:1029 +#: netbox/dcim/choices.py:1030 msgid "Ethernet (fixed)" msgstr "Ethernet (fisso)" -#: dcim/choices.py:1044 +#: netbox/dcim/choices.py:1046 msgid "Ethernet (modular)" msgstr "Ethernet (modulare)" -#: dcim/choices.py:1081 +#: netbox/dcim/choices.py:1083 msgid "Ethernet (backplane)" msgstr "Ethernet (backplane)" -#: dcim/choices.py:1113 +#: netbox/dcim/choices.py:1115 msgid "Cellular" msgstr "Cellulare" -#: dcim/choices.py:1165 dcim/forms/filtersets.py:383 -#: dcim/forms/filtersets.py:809 dcim/forms/filtersets.py:963 -#: dcim/forms/filtersets.py:1542 templates/dcim/inventoryitem.html:52 -#: templates/dcim/virtualchassis_edit.html:54 +#: 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/templates/dcim/virtualchassis_edit.html:54 msgid "Serial" msgstr "Seriale" -#: dcim/choices.py:1180 +#: netbox/dcim/choices.py:1182 msgid "Coaxial" msgstr "Coassiale" -#: dcim/choices.py:1200 +#: netbox/dcim/choices.py:1202 msgid "Stacking" msgstr "impilamento" -#: dcim/choices.py:1250 +#: netbox/dcim/choices.py:1252 msgid "Half" msgstr "Metà" -#: dcim/choices.py:1251 +#: netbox/dcim/choices.py:1253 msgid "Full" msgstr "Completo" -#: dcim/choices.py:1252 netbox/preferences.py:31 wireless/choices.py:480 +#: netbox/dcim/choices.py:1254 netbox/netbox/preferences.py:31 +#: netbox/wireless/choices.py:480 msgid "Auto" msgstr "Auto" -#: dcim/choices.py:1263 +#: netbox/dcim/choices.py:1265 msgid "Access" msgstr "Accesso" -#: dcim/choices.py:1264 ipam/tables/vlans.py:172 ipam/tables/vlans.py:217 -#: templates/dcim/inc/interface_vlans_table.html:7 +#: 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 "Taggato" -#: dcim/choices.py:1265 +#: netbox/dcim/choices.py:1267 msgid "Tagged (All)" msgstr "Contrassegnati (tutti)" -#: dcim/choices.py:1294 +#: netbox/dcim/choices.py:1296 msgid "IEEE Standard" msgstr "Norma IEEE" -#: dcim/choices.py:1305 +#: netbox/dcim/choices.py:1307 msgid "Passive 24V (2-pair)" msgstr "24V passivo (2 coppie)" -#: dcim/choices.py:1306 +#: netbox/dcim/choices.py:1308 msgid "Passive 24V (4-pair)" msgstr "24V passivo (4 coppie)" -#: dcim/choices.py:1307 +#: netbox/dcim/choices.py:1309 msgid "Passive 48V (2-pair)" msgstr "48V passivo (2 coppie)" -#: dcim/choices.py:1308 +#: netbox/dcim/choices.py:1310 msgid "Passive 48V (4-pair)" msgstr "48V passivo (4 coppie)" -#: dcim/choices.py:1378 dcim/choices.py:1488 +#: netbox/dcim/choices.py:1380 netbox/dcim/choices.py:1490 msgid "Copper" msgstr "Rame" -#: dcim/choices.py:1401 +#: netbox/dcim/choices.py:1403 msgid "Fiber Optic" msgstr "Fibra ottica" -#: dcim/choices.py:1434 dcim/choices.py:1517 +#: netbox/dcim/choices.py:1436 netbox/dcim/choices.py:1519 msgid "USB" msgstr "USB" -#: dcim/choices.py:1504 +#: netbox/dcim/choices.py:1506 msgid "Fiber" msgstr "Fibra" -#: dcim/choices.py:1529 dcim/forms/filtersets.py:1227 +#: netbox/dcim/choices.py:1531 netbox/dcim/forms/filtersets.py:1227 msgid "Connected" msgstr "Connesso" -#: dcim/choices.py:1548 wireless/choices.py:497 +#: netbox/dcim/choices.py:1550 netbox/wireless/choices.py:497 msgid "Kilometers" msgstr "Chilometri" -#: dcim/choices.py:1549 templates/dcim/cable_trace.html:65 -#: wireless/choices.py:498 +#: netbox/dcim/choices.py:1551 netbox/templates/dcim/cable_trace.html:65 +#: netbox/wireless/choices.py:498 msgid "Meters" msgstr "Metri" -#: dcim/choices.py:1550 +#: netbox/dcim/choices.py:1552 msgid "Centimeters" msgstr "Centimetri" -#: dcim/choices.py:1551 wireless/choices.py:499 +#: netbox/dcim/choices.py:1553 netbox/wireless/choices.py:499 msgid "Miles" msgstr "Miglia" -#: dcim/choices.py:1552 templates/dcim/cable_trace.html:66 -#: wireless/choices.py:500 +#: netbox/dcim/choices.py:1554 netbox/templates/dcim/cable_trace.html:66 +#: netbox/wireless/choices.py:500 msgid "Feet" msgstr "Piedi" -#: dcim/choices.py:1568 templates/dcim/device.html:327 -#: templates/dcim/rack.html:107 +#: netbox/dcim/choices.py:1570 netbox/templates/dcim/device.html:327 +#: netbox/templates/dcim/rack.html:107 msgid "Kilograms" msgstr "Chilogrammi" -#: dcim/choices.py:1569 +#: netbox/dcim/choices.py:1571 msgid "Grams" msgstr "Grammi" -#: dcim/choices.py:1570 templates/dcim/device.html:328 -#: templates/dcim/rack.html:108 +#: netbox/dcim/choices.py:1572 netbox/templates/dcim/device.html:328 +#: netbox/templates/dcim/rack.html:108 msgid "Pounds" msgstr "Sterline" -#: dcim/choices.py:1571 +#: netbox/dcim/choices.py:1573 msgid "Ounces" msgstr "Once" -#: dcim/choices.py:1618 +#: netbox/dcim/choices.py:1620 msgid "Redundant" msgstr "Ridondante" -#: dcim/choices.py:1639 +#: netbox/dcim/choices.py:1641 msgid "Single phase" msgstr "Monofase" -#: dcim/choices.py:1640 +#: netbox/dcim/choices.py:1642 msgid "Three-phase" msgstr "Trifase" -#: dcim/fields.py:45 +#: netbox/dcim/fields.py:45 #, python-brace-format msgid "Invalid MAC address format: {value}" msgstr "Formato dell'indirizzo MAC non valido: {value}" -#: dcim/fields.py:71 +#: netbox/dcim/fields.py:71 #, python-brace-format msgid "Invalid WWN format: {value}" msgstr "Formato WWN non valido: {value}" -#: dcim/filtersets.py:86 +#: netbox/dcim/filtersets.py:86 msgid "Parent region (ID)" msgstr "Regione principale (ID)" -#: dcim/filtersets.py:92 +#: netbox/dcim/filtersets.py:92 msgid "Parent region (slug)" msgstr "Regione madre (slug)" -#: dcim/filtersets.py:116 +#: netbox/dcim/filtersets.py:116 msgid "Parent site group (ID)" msgstr "Gruppo del sito principale (ID)" -#: dcim/filtersets.py:122 +#: netbox/dcim/filtersets.py:122 msgid "Parent site group (slug)" msgstr "Gruppo del sito principale (slug)" -#: dcim/filtersets.py:164 extras/filtersets.py:364 ipam/filtersets.py:841 -#: ipam/filtersets.py:993 +#: netbox/dcim/filtersets.py:164 netbox/extras/filtersets.py:364 +#: netbox/ipam/filtersets.py:841 netbox/ipam/filtersets.py:993 msgid "Group (ID)" msgstr "Gruppo (ID)" -#: dcim/filtersets.py:170 +#: netbox/dcim/filtersets.py:170 msgid "Group (slug)" msgstr "Gruppo (slug)" -#: dcim/filtersets.py:176 dcim/filtersets.py:181 +#: netbox/dcim/filtersets.py:176 netbox/dcim/filtersets.py:181 msgid "AS (ID)" msgstr "COME (ID)" -#: dcim/filtersets.py:246 +#: netbox/dcim/filtersets.py:246 msgid "Parent location (ID)" msgstr "Sede principale (ID)" -#: dcim/filtersets.py:252 +#: netbox/dcim/filtersets.py:252 msgid "Parent location (slug)" msgstr "Sede principale (slug)" -#: dcim/filtersets.py:258 dcim/filtersets.py:369 dcim/filtersets.py:490 -#: dcim/filtersets.py:1057 dcim/filtersets.py:1404 dcim/filtersets.py:2182 +#: 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)" -#: dcim/filtersets.py:265 dcim/filtersets.py:376 dcim/filtersets.py:497 -#: dcim/filtersets.py:1410 extras/filtersets.py:542 +#: 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)" -#: dcim/filtersets.py:296 dcim/filtersets.py:381 dcim/filtersets.py:539 -#: dcim/filtersets.py:678 dcim/filtersets.py:882 dcim/filtersets.py:933 -#: dcim/filtersets.py:973 dcim/filtersets.py:1306 dcim/filtersets.py:1840 +#: 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 msgid "Manufacturer (ID)" msgstr "Produttore (ID)" -#: dcim/filtersets.py:302 dcim/filtersets.py:387 dcim/filtersets.py:545 -#: dcim/filtersets.py:684 dcim/filtersets.py:888 dcim/filtersets.py:939 -#: dcim/filtersets.py:979 dcim/filtersets.py:1312 dcim/filtersets.py:1846 +#: 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 msgid "Manufacturer (slug)" msgstr "Produttore (lumaca)" -#: dcim/filtersets.py:393 +#: netbox/dcim/filtersets.py:393 msgid "Rack type (slug)" msgstr "Tipo di rack (slug)" -#: dcim/filtersets.py:397 +#: netbox/dcim/filtersets.py:397 msgid "Rack type (ID)" msgstr "Tipo di rack (ID)" -#: dcim/filtersets.py:411 dcim/filtersets.py:892 dcim/filtersets.py:994 -#: dcim/filtersets.py:1850 ipam/filtersets.py:381 ipam/filtersets.py:493 -#: ipam/filtersets.py:1003 virtualization/filtersets.py:210 +#: 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 msgid "Role (ID)" msgstr "Ruolo (ID)" -#: dcim/filtersets.py:417 dcim/filtersets.py:898 dcim/filtersets.py:1000 -#: dcim/filtersets.py:1856 extras/filtersets.py:558 ipam/filtersets.py:387 -#: ipam/filtersets.py:499 ipam/filtersets.py:1009 -#: virtualization/filtersets.py:216 +#: 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/virtualization/filtersets.py:216 msgid "Role (slug)" msgstr "Ruolo (slug)" -#: dcim/filtersets.py:447 dcim/filtersets.py:1062 dcim/filtersets.py:1415 -#: dcim/filtersets.py:2244 +#: netbox/dcim/filtersets.py:447 netbox/dcim/filtersets.py:1062 +#: netbox/dcim/filtersets.py:1415 netbox/dcim/filtersets.py:2244 msgid "Rack (ID)" msgstr "Cremagliera (ID)" -#: dcim/filtersets.py:507 extras/filtersets.py:293 extras/filtersets.py:337 -#: extras/filtersets.py:359 extras/filtersets.py:419 users/filtersets.py:113 -#: users/filtersets.py:180 +#: netbox/dcim/filtersets.py:507 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)" -#: dcim/filtersets.py:549 +#: netbox/dcim/filtersets.py:549 msgid "Default platform (ID)" msgstr "Piattaforma predefinita (ID)" -#: dcim/filtersets.py:555 +#: netbox/dcim/filtersets.py:555 msgid "Default platform (slug)" msgstr "Piattaforma predefinita (slug)" -#: dcim/filtersets.py:558 dcim/forms/filtersets.py:517 +#: netbox/dcim/filtersets.py:558 netbox/dcim/forms/filtersets.py:517 msgid "Has a front image" msgstr "Ha un'immagine frontale" -#: dcim/filtersets.py:562 dcim/forms/filtersets.py:524 +#: netbox/dcim/filtersets.py:562 netbox/dcim/forms/filtersets.py:524 msgid "Has a rear image" msgstr "Ha un'immagine posteriore" -#: dcim/filtersets.py:567 dcim/filtersets.py:688 dcim/filtersets.py:1131 -#: dcim/forms/filtersets.py:531 dcim/forms/filtersets.py:627 -#: dcim/forms/filtersets.py:848 +#: 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 msgid "Has console ports" msgstr "Dispone di porte per console" -#: dcim/filtersets.py:571 dcim/filtersets.py:692 dcim/filtersets.py:1135 -#: dcim/forms/filtersets.py:538 dcim/forms/filtersets.py:634 -#: dcim/forms/filtersets.py:855 +#: 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 msgid "Has console server ports" msgstr "Dispone di porte console server" -#: dcim/filtersets.py:575 dcim/filtersets.py:696 dcim/filtersets.py:1139 -#: dcim/forms/filtersets.py:545 dcim/forms/filtersets.py:641 -#: dcim/forms/filtersets.py:862 +#: 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 msgid "Has power ports" msgstr "Dispone di porte di alimentazione" -#: dcim/filtersets.py:579 dcim/filtersets.py:700 dcim/filtersets.py:1143 -#: dcim/forms/filtersets.py:552 dcim/forms/filtersets.py:648 -#: dcim/forms/filtersets.py:869 +#: 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 msgid "Has power outlets" msgstr "Dispone di prese di corrente" -#: dcim/filtersets.py:583 dcim/filtersets.py:704 dcim/filtersets.py:1147 -#: dcim/forms/filtersets.py:559 dcim/forms/filtersets.py:655 -#: dcim/forms/filtersets.py:876 +#: 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 msgid "Has interfaces" msgstr "Dispone di interfacce" -#: dcim/filtersets.py:587 dcim/filtersets.py:708 dcim/filtersets.py:1151 -#: dcim/forms/filtersets.py:566 dcim/forms/filtersets.py:662 -#: dcim/forms/filtersets.py:883 +#: 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 msgid "Has pass-through ports" msgstr "Dispone di porte pass-through" -#: dcim/filtersets.py:591 dcim/filtersets.py:1155 dcim/forms/filtersets.py:580 +#: netbox/dcim/filtersets.py:591 netbox/dcim/filtersets.py:1155 +#: netbox/dcim/forms/filtersets.py:580 msgid "Has module bays" msgstr "Dispone di alloggiamenti per moduli" -#: dcim/filtersets.py:595 dcim/filtersets.py:1159 dcim/forms/filtersets.py:573 +#: netbox/dcim/filtersets.py:595 netbox/dcim/filtersets.py:1159 +#: netbox/dcim/forms/filtersets.py:573 msgid "Has device bays" msgstr "Dispone di alloggiamenti per dispositivi" -#: dcim/filtersets.py:599 dcim/forms/filtersets.py:587 +#: netbox/dcim/filtersets.py:599 netbox/dcim/forms/filtersets.py:587 msgid "Has inventory items" msgstr "Ha articoli di inventario" -#: dcim/filtersets.py:756 dcim/filtersets.py:989 dcim/filtersets.py:1436 +#: netbox/dcim/filtersets.py:756 netbox/dcim/filtersets.py:989 +#: netbox/dcim/filtersets.py:1436 msgid "Device type (ID)" msgstr "Tipo di dispositivo (ID)" -#: dcim/filtersets.py:772 dcim/filtersets.py:1317 +#: netbox/dcim/filtersets.py:772 netbox/dcim/filtersets.py:1317 msgid "Module type (ID)" msgstr "Tipo di modulo (ID)" -#: dcim/filtersets.py:804 dcim/filtersets.py:1591 +#: netbox/dcim/filtersets.py:804 netbox/dcim/filtersets.py:1591 msgid "Power port (ID)" msgstr "Porta di alimentazione (ID)" -#: dcim/filtersets.py:878 dcim/filtersets.py:1836 +#: netbox/dcim/filtersets.py:878 netbox/dcim/filtersets.py:1836 msgid "Parent inventory item (ID)" msgstr "Articolo di inventario principale (ID)" -#: dcim/filtersets.py:921 dcim/filtersets.py:947 dcim/filtersets.py:1127 -#: virtualization/filtersets.py:238 +#: netbox/dcim/filtersets.py:921 netbox/dcim/filtersets.py:947 +#: netbox/dcim/filtersets.py:1127 netbox/virtualization/filtersets.py:238 msgid "Config template (ID)" msgstr "Modello di configurazione (ID)" -#: dcim/filtersets.py:985 +#: netbox/dcim/filtersets.py:985 msgid "Device type (slug)" msgstr "Tipo di dispositivo (slug)" -#: dcim/filtersets.py:1005 +#: netbox/dcim/filtersets.py:1005 msgid "Parent Device (ID)" msgstr "Dispositivo principale (ID)" -#: dcim/filtersets.py:1009 virtualization/filtersets.py:220 +#: netbox/dcim/filtersets.py:1009 netbox/virtualization/filtersets.py:220 msgid "Platform (ID)" msgstr "Piattaforma (ID)" -#: dcim/filtersets.py:1015 extras/filtersets.py:569 -#: virtualization/filtersets.py:226 +#: netbox/dcim/filtersets.py:1015 netbox/extras/filtersets.py:569 +#: netbox/virtualization/filtersets.py:226 msgid "Platform (slug)" msgstr "Piattaforma (slug)" -#: dcim/filtersets.py:1051 dcim/filtersets.py:1399 dcim/filtersets.py:1934 -#: dcim/filtersets.py:2176 dcim/filtersets.py:2235 +#: 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 msgid "Site name (slug)" msgstr "Nome del sito (slug)" -#: dcim/filtersets.py:1067 +#: netbox/dcim/filtersets.py:1067 msgid "Parent bay (ID)" msgstr "Bambino per genitori (ID)" -#: dcim/filtersets.py:1071 +#: netbox/dcim/filtersets.py:1071 msgid "VM cluster (ID)" msgstr "Cluster VM (ID)" -#: dcim/filtersets.py:1077 extras/filtersets.py:591 -#: virtualization/filtersets.py:136 +#: netbox/dcim/filtersets.py:1077 netbox/extras/filtersets.py:591 +#: netbox/virtualization/filtersets.py:136 msgid "Cluster group (slug)" msgstr "Gruppo Cluster (slug)" -#: dcim/filtersets.py:1082 virtualization/filtersets.py:130 +#: netbox/dcim/filtersets.py:1082 netbox/virtualization/filtersets.py:130 msgid "Cluster group (ID)" msgstr "Gruppo cluster (ID)" -#: dcim/filtersets.py:1088 +#: netbox/dcim/filtersets.py:1088 msgid "Device model (slug)" msgstr "Modello del dispositivo (slug)" -#: dcim/filtersets.py:1099 dcim/forms/bulk_edit.py:516 +#: netbox/dcim/filtersets.py:1099 netbox/dcim/forms/bulk_edit.py:522 msgid "Is full depth" msgstr "È a piena profondità" -#: dcim/filtersets.py:1103 dcim/forms/common.py:18 -#: dcim/forms/filtersets.py:818 dcim/forms/filtersets.py:1385 -#: dcim/models/device_components.py:518 virtualization/filtersets.py:230 -#: virtualization/filtersets.py:301 virtualization/forms/filtersets.py:172 -#: virtualization/forms/filtersets.py:223 +#: 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 msgid "MAC address" msgstr "Indirizzo MAC" -#: dcim/filtersets.py:1110 dcim/filtersets.py:1274 -#: dcim/forms/filtersets.py:827 dcim/forms/filtersets.py:930 -#: virtualization/filtersets.py:234 virtualization/forms/filtersets.py:176 +#: 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 msgid "Has a primary IP" msgstr "Ha un IP primario" -#: dcim/filtersets.py:1114 +#: netbox/dcim/filtersets.py:1114 msgid "Has an out-of-band IP" msgstr "Ha un IP fuori banda" -#: dcim/filtersets.py:1119 +#: netbox/dcim/filtersets.py:1119 msgid "Virtual chassis (ID)" msgstr "Chassis virtuale (ID)" -#: dcim/filtersets.py:1123 +#: netbox/dcim/filtersets.py:1123 msgid "Is a virtual chassis member" msgstr "È un membro virtuale dello chassis" -#: dcim/filtersets.py:1164 +#: netbox/dcim/filtersets.py:1164 msgid "OOB IP (ID)" msgstr "OOB IP (ID)" -#: dcim/filtersets.py:1168 +#: netbox/dcim/filtersets.py:1168 msgid "Has virtual device context" msgstr "Ha un contesto di dispositivo virtuale" -#: dcim/filtersets.py:1257 +#: netbox/dcim/filtersets.py:1257 msgid "VDC (ID)" msgstr "VDC (ID)" -#: dcim/filtersets.py:1262 +#: netbox/dcim/filtersets.py:1262 msgid "Device model" msgstr "Modello del dispositivo" -#: dcim/filtersets.py:1267 ipam/filtersets.py:632 vpn/filtersets.py:102 -#: vpn/filtersets.py:401 +#: netbox/dcim/filtersets.py:1267 netbox/ipam/filtersets.py:632 +#: netbox/vpn/filtersets.py:102 netbox/vpn/filtersets.py:401 msgid "Interface (ID)" msgstr "Interfaccia (ID)" -#: dcim/filtersets.py:1323 +#: netbox/dcim/filtersets.py:1323 msgid "Module type (model)" msgstr "Tipo di modulo (modello)" -#: dcim/filtersets.py:1329 +#: netbox/dcim/filtersets.py:1329 msgid "Module bay (ID)" msgstr "Alloggiamento per moduli (ID)" -#: dcim/filtersets.py:1333 dcim/filtersets.py:1425 ipam/filtersets.py:611 -#: ipam/filtersets.py:851 ipam/filtersets.py:1115 -#: virtualization/filtersets.py:161 vpn/filtersets.py:379 +#: 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/vpn/filtersets.py:379 msgid "Device (ID)" msgstr "Dispositivo (ID)" -#: dcim/filtersets.py:1421 +#: netbox/dcim/filtersets.py:1421 msgid "Rack (name)" msgstr "Rack (nome)" -#: dcim/filtersets.py:1431 ipam/filtersets.py:606 ipam/filtersets.py:846 -#: ipam/filtersets.py:1121 vpn/filtersets.py:374 +#: netbox/dcim/filtersets.py:1431 netbox/ipam/filtersets.py:606 +#: netbox/ipam/filtersets.py:846 netbox/ipam/filtersets.py:1121 +#: netbox/vpn/filtersets.py:374 msgid "Device (name)" msgstr "Dispositivo (nome)" -#: dcim/filtersets.py:1442 +#: netbox/dcim/filtersets.py:1442 msgid "Device type (model)" msgstr "Tipo di dispositivo (modello)" -#: dcim/filtersets.py:1447 +#: netbox/dcim/filtersets.py:1447 msgid "Device role (ID)" msgstr "Ruolo del dispositivo (ID)" -#: dcim/filtersets.py:1453 +#: netbox/dcim/filtersets.py:1453 msgid "Device role (slug)" msgstr "Ruolo del dispositivo (slug)" -#: dcim/filtersets.py:1458 +#: netbox/dcim/filtersets.py:1458 msgid "Virtual Chassis (ID)" msgstr "Chassis virtuale (ID)" -#: dcim/filtersets.py:1464 dcim/forms/filtersets.py:109 -#: dcim/tables/devices.py:206 netbox/navigation/menu.py:79 -#: templates/dcim/device.html:120 templates/dcim/device_edit.html:93 -#: templates/dcim/virtualchassis.html:20 -#: templates/dcim/virtualchassis_add.html:8 -#: templates/dcim/virtualchassis_edit.html:24 +#: netbox/dcim/filtersets.py:1464 netbox/dcim/forms/filtersets.py:109 +#: netbox/dcim/tables/devices.py:206 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 +#: netbox/templates/dcim/virtualchassis_add.html:8 +#: netbox/templates/dcim/virtualchassis_edit.html:24 msgid "Virtual Chassis" msgstr "Chassis virtuale" -#: dcim/filtersets.py:1488 +#: netbox/dcim/filtersets.py:1488 msgid "Module (ID)" msgstr "Modulo (ID)" -#: dcim/filtersets.py:1495 +#: netbox/dcim/filtersets.py:1495 msgid "Cable (ID)" msgstr "Cavo (ID)" -#: dcim/filtersets.py:1604 ipam/forms/bulk_import.py:189 -#: vpn/forms/bulk_import.py:308 +#: netbox/dcim/filtersets.py:1604 netbox/ipam/forms/bulk_import.py:189 +#: netbox/vpn/forms/bulk_import.py:308 msgid "Assigned VLAN" msgstr "VLAN assegnata" -#: dcim/filtersets.py:1608 +#: netbox/dcim/filtersets.py:1608 msgid "Assigned VID" msgstr "VID assegnato" -#: dcim/filtersets.py:1613 dcim/forms/bulk_edit.py:1489 -#: dcim/forms/bulk_import.py:891 dcim/forms/filtersets.py:1428 -#: dcim/forms/model_forms.py:1378 dcim/models/device_components.py:711 -#: dcim/tables/devices.py:626 ipam/filtersets.py:316 ipam/filtersets.py:327 -#: ipam/filtersets.py:483 ipam/filtersets.py:584 ipam/filtersets.py:595 -#: ipam/forms/bulk_edit.py:242 ipam/forms/bulk_edit.py:298 -#: ipam/forms/bulk_edit.py:340 ipam/forms/bulk_import.py:157 -#: ipam/forms/bulk_import.py:243 ipam/forms/bulk_import.py:279 -#: ipam/forms/filtersets.py:67 ipam/forms/filtersets.py:172 -#: ipam/forms/filtersets.py:309 ipam/forms/model_forms.py:62 -#: ipam/forms/model_forms.py:202 ipam/forms/model_forms.py:247 -#: ipam/forms/model_forms.py:300 ipam/forms/model_forms.py:431 -#: ipam/forms/model_forms.py:445 ipam/forms/model_forms.py:459 -#: ipam/models/ip.py:233 ipam/models/ip.py:512 ipam/models/ip.py:720 -#: ipam/models/vrfs.py:62 ipam/tables/ip.py:242 ipam/tables/ip.py:309 -#: ipam/tables/ip.py:360 ipam/tables/ip.py:450 -#: templates/dcim/interface.html:133 templates/ipam/ipaddress.html:18 -#: templates/ipam/iprange.html:40 templates/ipam/prefix.html:19 -#: templates/ipam/vrf.html:7 templates/ipam/vrf.html:13 -#: templates/virtualization/vminterface.html:47 -#: virtualization/forms/bulk_edit.py:261 -#: virtualization/forms/bulk_import.py:171 -#: virtualization/forms/filtersets.py:228 -#: virtualization/forms/model_forms.py:344 -#: virtualization/models/virtualmachines.py:355 -#: virtualization/tables/virtualmachines.py:143 +#: 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:316 +#: netbox/ipam/filtersets.py:327 netbox/ipam/filtersets.py:483 +#: netbox/ipam/filtersets.py:584 netbox/ipam/filtersets.py:595 +#: netbox/ipam/forms/bulk_edit.py: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/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 msgid "VRF" msgstr "VRF" -#: dcim/filtersets.py:1619 ipam/filtersets.py:322 ipam/filtersets.py:333 -#: ipam/filtersets.py:489 ipam/filtersets.py:590 ipam/filtersets.py:601 +#: 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 msgid "VRF (RD)" msgstr "VRF (ROSSO)" -#: dcim/filtersets.py:1624 ipam/filtersets.py:1030 vpn/filtersets.py:342 +#: netbox/dcim/filtersets.py:1624 netbox/ipam/filtersets.py:1030 +#: netbox/vpn/filtersets.py:342 msgid "L2VPN (ID)" msgstr "L2VPN (ID)" -#: dcim/filtersets.py:1630 dcim/forms/filtersets.py:1433 -#: dcim/tables/devices.py:570 ipam/filtersets.py:1036 -#: ipam/forms/filtersets.py:518 ipam/tables/vlans.py:137 -#: templates/dcim/interface.html:93 templates/ipam/vlan.html:66 -#: templates/vpn/l2vpntermination.html:12 -#: virtualization/forms/filtersets.py:233 vpn/forms/bulk_import.py:280 -#: vpn/forms/filtersets.py:246 vpn/forms/model_forms.py:409 -#: vpn/forms/model_forms.py:427 vpn/models/l2vpn.py:63 vpn/tables/l2vpn.py:55 +#: netbox/dcim/filtersets.py:1630 netbox/dcim/forms/filtersets.py:1433 +#: netbox/dcim/tables/devices.py:570 netbox/ipam/filtersets.py:1036 +#: 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 +#: netbox/virtualization/forms/filtersets.py:233 +#: netbox/vpn/forms/bulk_import.py:280 netbox/vpn/forms/filtersets.py:246 +#: netbox/vpn/forms/model_forms.py:409 netbox/vpn/forms/model_forms.py:427 +#: netbox/vpn/models/l2vpn.py:63 netbox/vpn/tables/l2vpn.py:55 msgid "L2VPN" msgstr "L2VPN" -#: dcim/filtersets.py:1662 +#: netbox/dcim/filtersets.py:1662 msgid "Virtual Chassis Interfaces for Device" msgstr "Interfacce virtuali dello chassis per dispositivi" -#: dcim/filtersets.py:1667 +#: netbox/dcim/filtersets.py:1667 msgid "Virtual Chassis Interfaces for Device (ID)" msgstr "Interfacce virtuali dello chassis per dispositivi (ID)" -#: dcim/filtersets.py:1671 +#: netbox/dcim/filtersets.py:1671 msgid "Kind of interface" msgstr "Tipo di interfaccia" -#: dcim/filtersets.py:1676 virtualization/filtersets.py:293 +#: netbox/dcim/filtersets.py:1676 netbox/virtualization/filtersets.py:293 msgid "Parent interface (ID)" msgstr "Interfaccia principale (ID)" -#: dcim/filtersets.py:1681 virtualization/filtersets.py:298 +#: netbox/dcim/filtersets.py:1681 netbox/virtualization/filtersets.py:298 msgid "Bridged interface (ID)" msgstr "Interfaccia con ponte (ID)" -#: dcim/filtersets.py:1686 +#: netbox/dcim/filtersets.py:1686 msgid "LAG interface (ID)" msgstr "Interfaccia LAG (ID)" -#: dcim/filtersets.py:1713 dcim/filtersets.py:1725 -#: dcim/forms/filtersets.py:1345 dcim/forms/model_forms.py:1690 -#: templates/dcim/virtualdevicecontext.html:15 +#: netbox/dcim/filtersets.py:1713 netbox/dcim/filtersets.py:1725 +#: netbox/dcim/forms/filtersets.py:1345 netbox/dcim/forms/model_forms.py:1697 +#: netbox/templates/dcim/virtualdevicecontext.html:15 msgid "Virtual Device Context" msgstr "Contesto del dispositivo virtuale" -#: dcim/filtersets.py:1719 +#: netbox/dcim/filtersets.py:1719 msgid "Virtual Device Context (Identifier)" msgstr "Contesto del dispositivo virtuale (identificatore)" -#: dcim/filtersets.py:1730 templates/wireless/wirelesslan.html:11 -#: wireless/forms/model_forms.py:53 +#: netbox/dcim/filtersets.py:1730 +#: netbox/templates/wireless/wirelesslan.html:11 +#: netbox/wireless/forms/model_forms.py:53 msgid "Wireless LAN" msgstr "LAN senza fili" -#: dcim/filtersets.py:1734 dcim/tables/devices.py:613 +#: netbox/dcim/filtersets.py:1734 netbox/dcim/tables/devices.py:613 msgid "Wireless link" msgstr "Collegamento wireless" -#: dcim/filtersets.py:1803 +#: netbox/dcim/filtersets.py:1803 msgid "Parent module bay (ID)" msgstr "Alloggiamento del modulo principale (ID)" -#: dcim/filtersets.py:1808 +#: netbox/dcim/filtersets.py:1808 msgid "Installed module (ID)" msgstr "Modulo installato (ID)" -#: dcim/filtersets.py:1819 +#: netbox/dcim/filtersets.py:1819 msgid "Installed device (ID)" msgstr "Dispositivo installato (ID)" -#: dcim/filtersets.py:1825 +#: netbox/dcim/filtersets.py:1825 msgid "Installed device (name)" msgstr "Dispositivo installato (nome)" -#: dcim/filtersets.py:1891 +#: netbox/dcim/filtersets.py:1891 msgid "Master (ID)" msgstr "Maestro (ID)" -#: dcim/filtersets.py:1897 +#: netbox/dcim/filtersets.py:1897 msgid "Master (name)" msgstr "Master (nome)" -#: dcim/filtersets.py:1939 tenancy/filtersets.py:245 +#: netbox/dcim/filtersets.py:1939 netbox/tenancy/filtersets.py:245 msgid "Tenant (ID)" msgstr "Inquilino (ID)" -#: dcim/filtersets.py:1945 extras/filtersets.py:618 tenancy/filtersets.py:251 +#: netbox/dcim/filtersets.py:1945 netbox/extras/filtersets.py:618 +#: netbox/tenancy/filtersets.py:251 msgid "Tenant (slug)" msgstr "Inquilino (slug)" -#: dcim/filtersets.py:1981 dcim/forms/filtersets.py:1077 +#: netbox/dcim/filtersets.py:1981 netbox/dcim/forms/filtersets.py:1077 msgid "Unterminated" msgstr "Interminato" -#: dcim/filtersets.py:2239 +#: netbox/dcim/filtersets.py:2239 msgid "Power panel (ID)" msgstr "Pannello di alimentazione (ID)" -#: dcim/forms/bulk_create.py:40 extras/forms/filtersets.py:401 -#: extras/forms/model_forms.py:567 extras/forms/model_forms.py:619 -#: netbox/forms/base.py:86 netbox/forms/mixins.py:81 -#: netbox/tables/columns.py:478 -#: templates/circuits/inc/circuit_termination.html:32 -#: templates/generic/bulk_edit.html:65 templates/inc/panels/tags.html:5 -#: utilities/forms/fields/fields.py:81 +#: netbox/dcim/forms/bulk_create.py:40 netbox/extras/forms/filtersets.py: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/templates/circuits/inc/circuit_termination.html:32 +#: netbox/templates/generic/bulk_edit.html:65 +#: netbox/templates/inc/panels/tags.html:5 +#: netbox/utilities/forms/fields/fields.py:81 msgid "Tags" msgstr "Etichette" -#: dcim/forms/bulk_create.py:112 dcim/forms/filtersets.py:1498 -#: dcim/forms/model_forms.py:488 dcim/forms/model_forms.py:546 -#: dcim/forms/object_create.py:197 dcim/forms/object_create.py:353 -#: dcim/tables/devices.py:165 dcim/tables/devices.py:707 -#: dcim/tables/devicetypes.py:246 templates/dcim/device.html:43 -#: templates/dcim/device.html:131 templates/dcim/modulebay.html:38 -#: templates/dcim/virtualchassis.html:66 -#: templates/dcim/virtualchassis_edit.html:55 +#: 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/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/templates/dcim/device.html:43 netbox/templates/dcim/device.html:131 +#: netbox/templates/dcim/modulebay.html:38 +#: netbox/templates/dcim/virtualchassis.html:66 +#: netbox/templates/dcim/virtualchassis_edit.html:55 msgid "Position" msgstr "Posizione" -#: dcim/forms/bulk_create.py:114 +#: netbox/dcim/forms/bulk_create.py:114 msgid "" "Alphanumeric ranges are supported. (Must match the number of names being " "created.)" @@ -3127,827 +3456,924 @@ msgstr "" "Sono supportati gli intervalli alfanumerici. (Deve corrispondere al numero " "di nomi da creare.)" -#: dcim/forms/bulk_edit.py:132 +#: netbox/dcim/forms/bulk_edit.py:133 msgid "Contact name" msgstr "Nome del contatto" -#: dcim/forms/bulk_edit.py:137 +#: netbox/dcim/forms/bulk_edit.py:138 msgid "Contact phone" msgstr "Telefono di contatto" -#: dcim/forms/bulk_edit.py:143 +#: netbox/dcim/forms/bulk_edit.py:144 msgid "Contact E-mail" msgstr "E-mail di contatto" -#: dcim/forms/bulk_edit.py:146 dcim/forms/bulk_import.py:123 -#: dcim/forms/model_forms.py:128 +#: netbox/dcim/forms/bulk_edit.py:147 netbox/dcim/forms/bulk_import.py:123 +#: netbox/dcim/forms/model_forms.py:128 msgid "Time zone" msgstr "Fuso orario" -#: dcim/forms/bulk_edit.py:224 dcim/forms/bulk_edit.py:495 -#: dcim/forms/bulk_edit.py:559 dcim/forms/bulk_edit.py:632 -#: dcim/forms/bulk_edit.py:656 dcim/forms/bulk_edit.py:740 -#: dcim/forms/bulk_edit.py:1267 dcim/forms/bulk_edit.py:1660 -#: dcim/forms/bulk_import.py:182 dcim/forms/bulk_import.py:371 -#: dcim/forms/bulk_import.py:405 dcim/forms/bulk_import.py:450 -#: dcim/forms/bulk_import.py:486 dcim/forms/bulk_import.py:1082 -#: dcim/forms/filtersets.py:313 dcim/forms/filtersets.py:372 -#: dcim/forms/filtersets.py:494 dcim/forms/filtersets.py:619 -#: dcim/forms/filtersets.py:700 dcim/forms/filtersets.py:782 -#: dcim/forms/filtersets.py:947 dcim/forms/filtersets.py:1539 -#: dcim/forms/model_forms.py:207 dcim/forms/model_forms.py:337 -#: dcim/forms/model_forms.py:349 dcim/forms/model_forms.py:395 -#: dcim/forms/model_forms.py:436 dcim/forms/model_forms.py:1075 -#: dcim/forms/model_forms.py:1515 dcim/forms/object_import.py:187 -#: dcim/tables/devices.py:96 dcim/tables/devices.py:172 -#: dcim/tables/devices.py:940 dcim/tables/devicetypes.py:80 -#: dcim/tables/devicetypes.py:308 dcim/tables/modules.py:20 -#: dcim/tables/modules.py:60 dcim/tables/racks.py:58 dcim/tables/racks.py:132 -#: templates/dcim/devicetype.html:14 templates/dcim/inventoryitem.html:44 -#: templates/dcim/manufacturer.html:33 templates/dcim/modulebay.html:62 -#: templates/dcim/moduletype.html:25 templates/dcim/platform.html:37 -#: templates/dcim/racktype.html:16 +#: 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/tables/modules.py:60 +#: 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/templates/dcim/manufacturer.html:33 +#: netbox/templates/dcim/modulebay.html:62 +#: netbox/templates/dcim/moduletype.html:25 +#: netbox/templates/dcim/platform.html:37 +#: netbox/templates/dcim/racktype.html:16 msgid "Manufacturer" msgstr "Produttore" -#: dcim/forms/bulk_edit.py:229 dcim/forms/bulk_edit.py:372 -#: dcim/forms/bulk_import.py:191 dcim/forms/bulk_import.py:263 -#: dcim/forms/filtersets.py:255 -#: templates/dcim/inc/panels/racktype_dimensions.html:6 +#: 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/templates/dcim/inc/panels/racktype_dimensions.html:6 msgid "Form factor" msgstr "Fattore di forma" -#: dcim/forms/bulk_edit.py:234 dcim/forms/bulk_edit.py:377 -#: dcim/forms/bulk_import.py:199 dcim/forms/bulk_import.py:266 -#: dcim/forms/filtersets.py:260 -#: templates/dcim/inc/panels/racktype_dimensions.html:10 +#: 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/templates/dcim/inc/panels/racktype_dimensions.html:10 msgid "Width" msgstr "Larghezza" -#: dcim/forms/bulk_edit.py:240 dcim/forms/bulk_edit.py:383 -#: templates/dcim/devicetype.html:37 +#: netbox/dcim/forms/bulk_edit.py:241 netbox/dcim/forms/bulk_edit.py:389 +#: netbox/dcim/forms/bulk_import.py:280 +#: netbox/templates/dcim/devicetype.html:37 msgid "Height (U)" msgstr "Altezza (U)" -#: dcim/forms/bulk_edit.py:249 dcim/forms/bulk_edit.py:388 -#: dcim/forms/filtersets.py:274 +#: netbox/dcim/forms/bulk_edit.py:250 netbox/dcim/forms/bulk_edit.py:394 +#: netbox/dcim/forms/filtersets.py:274 msgid "Descending units" msgstr "Unità discendenti" -#: dcim/forms/bulk_edit.py:252 dcim/forms/bulk_edit.py:391 +#: netbox/dcim/forms/bulk_edit.py:253 netbox/dcim/forms/bulk_edit.py:397 msgid "Outer width" msgstr "Larghezza esterna" -#: dcim/forms/bulk_edit.py:257 dcim/forms/bulk_edit.py:396 +#: netbox/dcim/forms/bulk_edit.py:258 netbox/dcim/forms/bulk_edit.py:402 msgid "Outer depth" msgstr "Profondità esterna" -#: dcim/forms/bulk_edit.py:262 dcim/forms/bulk_edit.py:401 -#: dcim/forms/bulk_import.py:204 dcim/forms/bulk_import.py:271 +#: 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 msgid "Outer unit" msgstr "Unità esterna" -#: dcim/forms/bulk_edit.py:267 dcim/forms/bulk_edit.py:406 +#: netbox/dcim/forms/bulk_edit.py:268 netbox/dcim/forms/bulk_edit.py:412 msgid "Mounting depth" msgstr "Profondità di montaggio" -#: dcim/forms/bulk_edit.py:272 dcim/forms/bulk_edit.py:299 -#: dcim/forms/bulk_edit.py:416 dcim/forms/bulk_edit.py:446 -#: dcim/forms/bulk_edit.py:529 dcim/forms/bulk_edit.py:552 -#: dcim/forms/bulk_edit.py:573 dcim/forms/bulk_edit.py:595 -#: dcim/forms/bulk_import.py:384 dcim/forms/bulk_import.py:416 -#: dcim/forms/filtersets.py:285 dcim/forms/filtersets.py:307 -#: dcim/forms/filtersets.py:327 dcim/forms/filtersets.py:401 -#: dcim/forms/filtersets.py:488 dcim/forms/filtersets.py:594 -#: dcim/forms/filtersets.py:613 dcim/forms/filtersets.py:674 -#: dcim/forms/model_forms.py:221 dcim/forms/model_forms.py:298 -#: dcim/tables/devicetypes.py:106 dcim/tables/modules.py:35 -#: dcim/tables/racks.py:74 dcim/tables/racks.py:172 -#: extras/forms/bulk_edit.py:53 extras/forms/bulk_edit.py:133 -#: extras/forms/bulk_edit.py:183 extras/forms/bulk_edit.py:288 -#: extras/forms/filtersets.py:64 extras/forms/filtersets.py:156 -#: extras/forms/filtersets.py:243 ipam/forms/bulk_edit.py:190 -#: templates/dcim/device.html:324 templates/dcim/devicetype.html:49 -#: templates/dcim/moduletype.html:45 templates/dcim/rack.html:81 -#: templates/dcim/racktype.html:41 templates/extras/configcontext.html:17 -#: templates/extras/customlink.html:25 templates/extras/savedfilter.html:33 -#: templates/ipam/role.html:30 +#: netbox/dcim/forms/bulk_edit.py: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/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/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/racktype.html:41 +#: netbox/templates/extras/configcontext.html:17 +#: netbox/templates/extras/customlink.html:25 +#: netbox/templates/extras/savedfilter.html:33 +#: netbox/templates/ipam/role.html:30 msgid "Weight" msgstr "Peso" -#: dcim/forms/bulk_edit.py:277 dcim/forms/bulk_edit.py:421 -#: dcim/forms/filtersets.py:290 +#: netbox/dcim/forms/bulk_edit.py:278 netbox/dcim/forms/bulk_edit.py:427 +#: netbox/dcim/forms/filtersets.py:290 msgid "Max weight" msgstr "Peso massimo" -#: dcim/forms/bulk_edit.py:282 dcim/forms/bulk_edit.py:426 -#: dcim/forms/bulk_edit.py:534 dcim/forms/bulk_edit.py:578 -#: dcim/forms/bulk_import.py:210 dcim/forms/bulk_import.py:283 -#: dcim/forms/bulk_import.py:389 dcim/forms/bulk_import.py:421 -#: dcim/forms/filtersets.py:295 dcim/forms/filtersets.py:598 -#: dcim/forms/filtersets.py:678 +#: 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 msgid "Weight unit" msgstr "Unità di peso" -#: dcim/forms/bulk_edit.py:296 dcim/forms/filtersets.py:305 -#: dcim/forms/model_forms.py:217 dcim/forms/model_forms.py:256 -#: templates/dcim/rack.html:45 templates/dcim/racktype.html:13 +#: 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/templates/dcim/rack.html:45 netbox/templates/dcim/racktype.html:13 msgid "Rack Type" msgstr "Tipo di rack" -#: dcim/forms/bulk_edit.py:298 dcim/forms/model_forms.py:220 -#: dcim/forms/model_forms.py:297 +#: netbox/dcim/forms/bulk_edit.py:299 netbox/dcim/forms/model_forms.py:220 +#: netbox/dcim/forms/model_forms.py:297 msgid "Outer Dimensions" msgstr "Dimensioni esterne" -#: dcim/forms/bulk_edit.py:301 dcim/forms/model_forms.py:222 -#: dcim/forms/model_forms.py:299 templates/dcim/device.html:315 -#: templates/dcim/inc/panels/racktype_dimensions.html:3 +#: 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/templates/dcim/inc/panels/racktype_dimensions.html:3 msgid "Dimensions" msgstr "Dimensioni" -#: dcim/forms/bulk_edit.py:303 dcim/forms/filtersets.py:306 -#: dcim/forms/filtersets.py:326 dcim/forms/model_forms.py:224 -#: templates/dcim/inc/panels/racktype_numbering.html:3 +#: 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/templates/dcim/inc/panels/racktype_numbering.html:3 msgid "Numbering" msgstr "Numerazione" -#: dcim/forms/bulk_edit.py:357 dcim/forms/bulk_edit.py:1262 -#: dcim/forms/bulk_edit.py:1655 dcim/forms/bulk_import.py:253 -#: dcim/forms/bulk_import.py:1076 dcim/forms/filtersets.py:367 -#: dcim/forms/filtersets.py:777 dcim/forms/filtersets.py:1534 -#: dcim/forms/model_forms.py:251 dcim/forms/model_forms.py:1070 -#: dcim/forms/model_forms.py:1510 dcim/forms/object_import.py:181 -#: dcim/tables/devices.py:169 dcim/tables/devices.py:809 -#: dcim/tables/devices.py:937 dcim/tables/devicetypes.py:304 -#: dcim/tables/racks.py:129 extras/filtersets.py:552 -#: ipam/forms/bulk_edit.py:261 ipam/forms/bulk_edit.py:311 -#: ipam/forms/bulk_edit.py:359 ipam/forms/bulk_edit.py:511 -#: ipam/forms/bulk_import.py:197 ipam/forms/bulk_import.py:262 -#: ipam/forms/bulk_import.py:298 ipam/forms/bulk_import.py:455 -#: ipam/forms/filtersets.py:237 ipam/forms/filtersets.py:289 -#: ipam/forms/filtersets.py:360 ipam/forms/filtersets.py:509 -#: ipam/forms/model_forms.py:188 ipam/forms/model_forms.py:221 -#: ipam/forms/model_forms.py:250 ipam/forms/model_forms.py:643 -#: ipam/tables/ip.py:258 ipam/tables/ip.py:316 ipam/tables/ip.py:367 -#: ipam/tables/vlans.py:130 ipam/tables/vlans.py:235 -#: templates/dcim/device.html:182 -#: templates/dcim/inc/panels/inventory_items.html:20 -#: templates/dcim/interface.html:223 templates/dcim/inventoryitem.html:36 -#: templates/dcim/rack.html:49 templates/ipam/ipaddress.html:41 -#: templates/ipam/iprange.html:50 templates/ipam/prefix.html:77 -#: templates/ipam/role.html:19 templates/ipam/vlan.html:52 -#: templates/virtualization/virtualmachine.html:23 -#: templates/vpn/tunneltermination.html:17 -#: templates/wireless/inc/wirelesslink_interface.html:20 -#: tenancy/forms/bulk_edit.py:142 tenancy/forms/filtersets.py:107 -#: tenancy/forms/model_forms.py:137 tenancy/tables/contacts.py:102 -#: virtualization/forms/bulk_edit.py:145 -#: virtualization/forms/bulk_import.py:106 -#: virtualization/forms/filtersets.py:157 -#: virtualization/forms/model_forms.py:195 -#: virtualization/tables/virtualmachines.py:75 vpn/forms/bulk_edit.py:87 -#: vpn/forms/bulk_import.py:81 vpn/forms/filtersets.py:85 -#: vpn/forms/model_forms.py:78 vpn/forms/model_forms.py:113 -#: vpn/tables/tunnels.py:82 +#: netbox/dcim/forms/bulk_edit.py: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" -#: dcim/forms/bulk_edit.py:364 dcim/forms/bulk_edit.py:712 -#: dcim/forms/bulk_edit.py:764 templates/dcim/device.html:104 -#: templates/dcim/module.html:77 templates/dcim/modulebay.html:70 -#: templates/dcim/rack.html:57 templates/virtualization/virtualmachine.html:35 +#: netbox/dcim/forms/bulk_edit.py:363 netbox/dcim/forms/bulk_import.py:260 +#: netbox/dcim/forms/filtersets.py:380 +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/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" -#: dcim/forms/bulk_edit.py:367 dcim/forms/filtersets.py:387 -#: dcim/forms/filtersets.py:813 dcim/forms/filtersets.py:967 -#: dcim/forms/filtersets.py:1546 +#: 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 msgid "Asset tag" msgstr "Etichetta dell'asset" -#: dcim/forms/bulk_edit.py:411 dcim/forms/bulk_edit.py:524 -#: dcim/forms/bulk_edit.py:568 dcim/forms/bulk_edit.py:705 -#: dcim/forms/bulk_import.py:277 dcim/forms/bulk_import.py:410 -#: dcim/forms/bulk_import.py:580 dcim/forms/filtersets.py:280 -#: dcim/forms/filtersets.py:511 dcim/forms/filtersets.py:669 -#: dcim/forms/filtersets.py:804 templates/dcim/device.html:98 -#: templates/dcim/devicetype.html:65 templates/dcim/moduletype.html:41 -#: templates/dcim/rack.html:65 templates/dcim/racktype.html:28 +#: 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/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 "Flusso d'aria" -#: dcim/forms/bulk_edit.py:440 dcim/forms/bulk_edit.py:910 -#: dcim/forms/bulk_import.py:322 dcim/forms/bulk_import.py:325 -#: dcim/forms/bulk_import.py:553 dcim/forms/bulk_import.py:1358 -#: dcim/forms/bulk_import.py:1362 dcim/forms/filtersets.py:104 -#: dcim/forms/filtersets.py:324 dcim/forms/filtersets.py:405 -#: dcim/forms/filtersets.py:419 dcim/forms/filtersets.py:457 -#: dcim/forms/filtersets.py:772 dcim/forms/filtersets.py:1035 -#: dcim/forms/filtersets.py:1167 dcim/forms/model_forms.py:264 -#: dcim/forms/model_forms.py:306 dcim/forms/model_forms.py:479 -#: dcim/forms/model_forms.py:755 dcim/forms/object_create.py:400 -#: dcim/tables/devices.py:161 dcim/tables/power.py:70 dcim/tables/racks.py:217 -#: ipam/forms/filtersets.py:442 templates/dcim/device.html:30 -#: templates/dcim/inc/cable_termination.html:16 -#: templates/dcim/powerfeed.html:28 templates/dcim/rack.html:13 -#: templates/dcim/rack/base.html:4 templates/dcim/rackreservation.html:19 -#: templates/dcim/rackreservation.html:36 -#: virtualization/forms/model_forms.py:113 +#: netbox/dcim/forms/bulk_edit.py: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/templates/dcim/device.html:30 +#: netbox/templates/dcim/inc/cable_termination.html:16 +#: netbox/templates/dcim/powerfeed.html:28 netbox/templates/dcim/rack.html:13 +#: netbox/templates/dcim/rack/base.html:4 +#: netbox/templates/dcim/rackreservation.html:19 +#: netbox/templates/dcim/rackreservation.html:36 +#: netbox/virtualization/forms/model_forms.py:113 msgid "Rack" msgstr "cremagliera" -#: dcim/forms/bulk_edit.py:444 dcim/forms/bulk_edit.py:730 -#: dcim/forms/filtersets.py:325 dcim/forms/filtersets.py:398 -#: dcim/forms/filtersets.py:481 dcim/forms/filtersets.py:608 -#: dcim/forms/filtersets.py:721 dcim/forms/filtersets.py:942 -#: dcim/forms/model_forms.py:670 dcim/forms/model_forms.py:1580 -#: templates/dcim/device_edit.html:20 +#: 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/templates/dcim/device_edit.html:20 msgid "Hardware" msgstr "Hardware" -#: dcim/forms/bulk_edit.py:500 dcim/forms/bulk_import.py:377 -#: dcim/forms/filtersets.py:499 dcim/forms/model_forms.py:353 +#: 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 msgid "Default platform" msgstr "Piattaforma predefinita" -#: dcim/forms/bulk_edit.py:505 dcim/forms/bulk_edit.py:564 -#: dcim/forms/filtersets.py:502 dcim/forms/filtersets.py:622 +#: 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 msgid "Part number" msgstr "Numero del pezzo" -#: dcim/forms/bulk_edit.py:509 +#: netbox/dcim/forms/bulk_edit.py:515 msgid "U height" msgstr "Altezza U" -#: dcim/forms/bulk_edit.py:521 dcim/tables/devicetypes.py:102 +#: netbox/dcim/forms/bulk_edit.py:527 netbox/dcim/tables/devicetypes.py:102 msgid "Exclude from utilization" msgstr "Escludi dall'utilizzo" -#: dcim/forms/bulk_edit.py:550 dcim/forms/model_forms.py:368 -#: dcim/tables/devicetypes.py:77 templates/dcim/device.html:88 -#: templates/dcim/devicebay.html:52 templates/dcim/module.html:61 +#: 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/templates/dcim/devicebay.html:52 +#: netbox/templates/dcim/module.html:61 msgid "Device Type" msgstr "Tipo di dispositivo" -#: dcim/forms/bulk_edit.py:592 dcim/forms/model_forms.py:401 -#: dcim/tables/modules.py:17 dcim/tables/modules.py:65 -#: templates/dcim/module.html:65 templates/dcim/modulebay.html:66 -#: templates/dcim/moduletype.html:22 +#: 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/templates/dcim/module.html:65 +#: netbox/templates/dcim/modulebay.html:66 +#: netbox/templates/dcim/moduletype.html:22 msgid "Module Type" msgstr "Tipo di modulo" -#: dcim/forms/bulk_edit.py:596 dcim/forms/model_forms.py:371 -#: dcim/forms/model_forms.py:402 templates/dcim/devicetype.html:11 +#: netbox/dcim/forms/bulk_edit.py:602 netbox/dcim/forms/model_forms.py:371 +#: netbox/dcim/forms/model_forms.py:402 +#: netbox/templates/dcim/devicetype.html:11 msgid "Chassis" msgstr "Telaio" -#: dcim/forms/bulk_edit.py:610 dcim/models/devices.py:484 -#: dcim/tables/devices.py:67 +#: netbox/dcim/forms/bulk_edit.py:616 netbox/dcim/models/devices.py:484 +#: netbox/dcim/tables/devices.py:67 msgid "VM role" msgstr "Ruolo VM" -#: dcim/forms/bulk_edit.py:613 dcim/forms/bulk_edit.py:637 -#: dcim/forms/bulk_edit.py:720 dcim/forms/bulk_import.py:434 -#: dcim/forms/bulk_import.py:438 dcim/forms/bulk_import.py:457 -#: dcim/forms/bulk_import.py:461 dcim/forms/bulk_import.py:586 -#: dcim/forms/bulk_import.py:590 dcim/forms/filtersets.py:689 -#: dcim/forms/filtersets.py:705 dcim/forms/filtersets.py:823 -#: dcim/forms/model_forms.py:415 dcim/forms/model_forms.py:441 -#: dcim/forms/model_forms.py:555 virtualization/forms/bulk_import.py:132 -#: virtualization/forms/bulk_import.py:133 -#: virtualization/forms/filtersets.py:188 -#: virtualization/forms/model_forms.py:215 +#: 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 msgid "Config template" msgstr "Modello di configurazione" -#: dcim/forms/bulk_edit.py:661 dcim/forms/bulk_edit.py:1061 -#: dcim/forms/bulk_import.py:492 dcim/forms/filtersets.py:114 -#: dcim/forms/model_forms.py:501 dcim/forms/model_forms.py:872 -#: dcim/forms/model_forms.py:889 extras/filtersets.py:547 +#: 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 msgid "Device type" msgstr "Tipo di dispositivo" -#: dcim/forms/bulk_edit.py:672 dcim/forms/bulk_import.py:473 -#: dcim/forms/filtersets.py:119 dcim/forms/model_forms.py:509 +#: 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 msgid "Device role" msgstr "Ruolo del dispositivo" -#: dcim/forms/bulk_edit.py:695 dcim/forms/bulk_import.py:498 -#: dcim/forms/filtersets.py:796 dcim/forms/model_forms.py:451 -#: dcim/forms/model_forms.py:513 dcim/tables/devices.py:182 -#: extras/filtersets.py:563 templates/dcim/device.html:186 -#: templates/dcim/platform.html:26 -#: templates/virtualization/virtualmachine.html:27 -#: virtualization/forms/bulk_edit.py:160 -#: virtualization/forms/bulk_import.py:122 -#: virtualization/forms/filtersets.py:168 -#: virtualization/forms/model_forms.py:203 -#: virtualization/tables/virtualmachines.py:79 +#: 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/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 msgid "Platform" msgstr "piattaforma" -#: dcim/forms/bulk_edit.py:728 dcim/forms/bulk_edit.py:1281 -#: dcim/forms/bulk_edit.py:1650 dcim/forms/bulk_edit.py:1696 -#: dcim/forms/bulk_import.py:641 dcim/forms/bulk_import.py:703 -#: dcim/forms/bulk_import.py:729 dcim/forms/bulk_import.py:755 -#: dcim/forms/bulk_import.py:775 dcim/forms/bulk_import.py:828 -#: dcim/forms/bulk_import.py:946 dcim/forms/bulk_import.py:994 -#: dcim/forms/bulk_import.py:1011 dcim/forms/bulk_import.py:1023 -#: dcim/forms/bulk_import.py:1071 dcim/forms/bulk_import.py:1422 -#: dcim/forms/connections.py:24 dcim/forms/filtersets.py:131 -#: dcim/forms/filtersets.py:921 dcim/forms/filtersets.py:1051 -#: dcim/forms/filtersets.py:1242 dcim/forms/filtersets.py:1267 -#: dcim/forms/filtersets.py:1291 dcim/forms/filtersets.py:1311 -#: dcim/forms/filtersets.py:1334 dcim/forms/filtersets.py:1444 -#: dcim/forms/filtersets.py:1469 dcim/forms/filtersets.py:1493 -#: dcim/forms/filtersets.py:1511 dcim/forms/filtersets.py:1528 -#: dcim/forms/filtersets.py:1592 dcim/forms/filtersets.py:1616 -#: dcim/forms/filtersets.py:1640 dcim/forms/model_forms.py:633 -#: dcim/forms/model_forms.py:849 dcim/forms/model_forms.py:1208 -#: dcim/forms/model_forms.py:1664 dcim/forms/object_create.py:257 -#: dcim/tables/connections.py:22 dcim/tables/connections.py:41 -#: dcim/tables/connections.py:60 dcim/tables/devices.py:285 -#: dcim/tables/devices.py:371 dcim/tables/devices.py:412 -#: dcim/tables/devices.py:454 dcim/tables/devices.py:505 -#: dcim/tables/devices.py:597 dcim/tables/devices.py:697 -#: dcim/tables/devices.py:754 dcim/tables/devices.py:801 -#: dcim/tables/devices.py:861 dcim/tables/devices.py:930 -#: dcim/tables/devices.py:1057 dcim/tables/modules.py:52 -#: extras/forms/filtersets.py:321 ipam/forms/bulk_import.py:304 -#: ipam/forms/bulk_import.py:481 ipam/forms/filtersets.py:551 -#: ipam/forms/model_forms.py:319 ipam/forms/model_forms.py:679 -#: ipam/forms/model_forms.py:712 ipam/forms/model_forms.py:738 -#: ipam/tables/vlans.py:180 templates/dcim/consoleport.html:20 -#: templates/dcim/consoleserverport.html:20 templates/dcim/device.html:15 -#: templates/dcim/device.html:130 templates/dcim/device_edit.html:10 -#: templates/dcim/devicebay.html:20 templates/dcim/devicebay.html:48 -#: templates/dcim/frontport.html:20 templates/dcim/interface.html:30 -#: templates/dcim/interface.html:161 templates/dcim/inventoryitem.html:20 -#: templates/dcim/module.html:57 templates/dcim/modulebay.html:20 -#: templates/dcim/poweroutlet.html:20 templates/dcim/powerport.html:20 -#: templates/dcim/rearport.html:20 templates/dcim/virtualchassis.html:65 -#: templates/dcim/virtualchassis_edit.html:51 -#: templates/dcim/virtualdevicecontext.html:22 -#: templates/virtualization/virtualmachine.html:114 -#: templates/vpn/tunneltermination.html:23 -#: templates/wireless/inc/wirelesslink_interface.html:6 -#: virtualization/filtersets.py:167 virtualization/forms/bulk_edit.py:137 -#: virtualization/forms/bulk_import.py:99 -#: virtualization/forms/filtersets.py:128 -#: virtualization/forms/model_forms.py:185 -#: virtualization/tables/virtualmachines.py:71 vpn/choices.py:44 -#: vpn/forms/bulk_import.py:86 vpn/forms/bulk_import.py:283 -#: vpn/forms/filtersets.py:275 vpn/forms/model_forms.py:90 -#: vpn/forms/model_forms.py:125 vpn/forms/model_forms.py:236 -#: vpn/forms/model_forms.py:453 wireless/forms/model_forms.py:99 -#: wireless/forms/model_forms.py:141 wireless/tables/wirelesslan.py:75 +#: netbox/dcim/forms/bulk_edit.py: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/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 +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:52 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" -#: dcim/forms/bulk_edit.py:731 templates/extras/dashboard/widget_config.html:7 -#: virtualization/forms/bulk_edit.py:191 +#: netbox/dcim/forms/bulk_edit.py:745 +#: netbox/templates/extras/dashboard/widget_config.html:7 +#: netbox/virtualization/forms/bulk_edit.py:191 msgid "Configuration" msgstr "Configurazione" -#: dcim/forms/bulk_edit.py:745 dcim/forms/bulk_import.py:653 -#: dcim/forms/model_forms.py:647 dcim/forms/model_forms.py:897 +#: netbox/dcim/forms/bulk_edit.py:746 netbox/netbox/navigation/menu.py:243 +#: 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 msgid "Module type" msgstr "Tipo di modulo" -#: dcim/forms/bulk_edit.py:799 dcim/forms/bulk_edit.py:984 -#: dcim/forms/bulk_edit.py:1003 dcim/forms/bulk_edit.py:1026 -#: dcim/forms/bulk_edit.py:1068 dcim/forms/bulk_edit.py:1112 -#: dcim/forms/bulk_edit.py:1163 dcim/forms/bulk_edit.py:1190 -#: dcim/forms/bulk_edit.py:1217 dcim/forms/bulk_edit.py:1235 -#: dcim/forms/bulk_edit.py:1253 dcim/forms/filtersets.py:67 -#: dcim/forms/object_create.py:46 templates/dcim/cable.html:32 -#: templates/dcim/consoleport.html:32 templates/dcim/consoleserverport.html:32 -#: templates/dcim/devicebay.html:28 templates/dcim/frontport.html:32 -#: templates/dcim/inc/panels/inventory_items.html:19 -#: templates/dcim/interface.html:42 templates/dcim/inventoryitem.html:32 -#: templates/dcim/modulebay.html:34 templates/dcim/poweroutlet.html:32 -#: templates/dcim/powerport.html:32 templates/dcim/rearport.html:32 -#: templates/extras/customfield.html:26 templates/generic/bulk_import.html:162 +#: netbox/dcim/forms/bulk_edit.py: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/object_create.py:46 netbox/templates/dcim/cable.html:32 +#: netbox/templates/dcim/consoleport.html:32 +#: netbox/templates/dcim/consoleserverport.html:32 +#: netbox/templates/dcim/devicebay.html:28 +#: netbox/templates/dcim/frontport.html:32 +#: netbox/templates/dcim/inc/panels/inventory_items.html:19 +#: netbox/templates/dcim/interface.html:42 +#: netbox/templates/dcim/inventoryitem.html:32 +#: netbox/templates/dcim/modulebay.html:34 +#: netbox/templates/dcim/poweroutlet.html:32 +#: netbox/templates/dcim/powerport.html:32 +#: netbox/templates/dcim/rearport.html:32 +#: netbox/templates/extras/customfield.html:26 +#: netbox/templates/generic/bulk_import.html:162 msgid "Label" msgstr "Etichetta" -#: dcim/forms/bulk_edit.py:808 dcim/forms/filtersets.py:1068 -#: templates/dcim/cable.html:50 +#: netbox/dcim/forms/bulk_edit.py:823 netbox/dcim/forms/filtersets.py:1068 +#: netbox/templates/dcim/cable.html:50 msgid "Length" msgstr "Lunghezza" -#: dcim/forms/bulk_edit.py:813 dcim/forms/bulk_import.py:1226 -#: dcim/forms/bulk_import.py:1229 dcim/forms/filtersets.py:1072 +#: 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 msgid "Length unit" msgstr "Unità di lunghezza" -#: dcim/forms/bulk_edit.py:837 templates/dcim/virtualchassis.html:23 +#: netbox/dcim/forms/bulk_edit.py:852 +#: netbox/templates/dcim/virtualchassis.html:23 msgid "Domain" msgstr "Dominio" -#: dcim/forms/bulk_edit.py:905 dcim/forms/bulk_import.py:1345 -#: dcim/forms/filtersets.py:1158 dcim/forms/model_forms.py:750 +#: 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 msgid "Power panel" msgstr "Pannello di alimentazione" -#: dcim/forms/bulk_edit.py:927 dcim/forms/bulk_import.py:1381 -#: dcim/forms/filtersets.py:1180 templates/dcim/powerfeed.html:83 +#: 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 msgid "Supply" msgstr "Fornitura" -#: dcim/forms/bulk_edit.py:933 dcim/forms/bulk_import.py:1386 -#: dcim/forms/filtersets.py:1185 templates/dcim/powerfeed.html:95 +#: 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 msgid "Phase" msgstr "Fase" -#: dcim/forms/bulk_edit.py:939 dcim/forms/filtersets.py:1190 -#: templates/dcim/powerfeed.html:87 +#: netbox/dcim/forms/bulk_edit.py:954 netbox/dcim/forms/filtersets.py:1190 +#: netbox/templates/dcim/powerfeed.html:87 msgid "Voltage" msgstr "Voltaggio" -#: dcim/forms/bulk_edit.py:943 dcim/forms/filtersets.py:1194 -#: templates/dcim/powerfeed.html:91 +#: netbox/dcim/forms/bulk_edit.py:958 netbox/dcim/forms/filtersets.py:1194 +#: netbox/templates/dcim/powerfeed.html:91 msgid "Amperage" msgstr "Amperaggio" -#: dcim/forms/bulk_edit.py:947 dcim/forms/filtersets.py:1198 +#: netbox/dcim/forms/bulk_edit.py:962 netbox/dcim/forms/filtersets.py:1198 msgid "Max utilization" msgstr "Utilizzo massimo" -#: dcim/forms/bulk_edit.py:1036 +#: netbox/dcim/forms/bulk_edit.py:1051 msgid "Maximum draw" msgstr "Pareggio massimo" -#: dcim/forms/bulk_edit.py:1039 dcim/models/device_component_templates.py:282 -#: dcim/models/device_components.py:356 +#: netbox/dcim/forms/bulk_edit.py:1054 +#: netbox/dcim/models/device_component_templates.py:282 +#: netbox/dcim/models/device_components.py:356 msgid "Maximum power draw (watts)" msgstr "Potenza massima assorbita (watt)" -#: dcim/forms/bulk_edit.py:1042 +#: netbox/dcim/forms/bulk_edit.py:1057 msgid "Allocated draw" msgstr "Pareggio assegnato" -#: dcim/forms/bulk_edit.py:1045 dcim/models/device_component_templates.py:289 -#: dcim/models/device_components.py:363 +#: netbox/dcim/forms/bulk_edit.py:1060 +#: netbox/dcim/models/device_component_templates.py:289 +#: netbox/dcim/models/device_components.py:363 msgid "Allocated power draw (watts)" msgstr "Potenza assorbita allocata (watt)" -#: dcim/forms/bulk_edit.py:1078 dcim/forms/bulk_import.py:786 -#: dcim/forms/model_forms.py:953 dcim/forms/model_forms.py:1278 -#: dcim/forms/model_forms.py:1567 dcim/forms/object_import.py:55 +#: 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 msgid "Power port" msgstr "Porta di alimentazione" -#: dcim/forms/bulk_edit.py:1083 dcim/forms/bulk_import.py:793 +#: netbox/dcim/forms/bulk_edit.py:1098 netbox/dcim/forms/bulk_import.py:815 msgid "Feed leg" msgstr "Gamba di alimentazione" -#: dcim/forms/bulk_edit.py:1129 dcim/forms/bulk_edit.py:1440 +#: netbox/dcim/forms/bulk_edit.py:1144 netbox/dcim/forms/bulk_edit.py:1462 msgid "Management only" msgstr "Solo gestione" -#: dcim/forms/bulk_edit.py:1139 dcim/forms/bulk_edit.py:1446 -#: dcim/forms/bulk_import.py:876 dcim/forms/filtersets.py:1394 -#: dcim/forms/object_import.py:90 -#: dcim/models/device_component_templates.py:437 -#: dcim/models/device_components.py:670 +#: 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/object_import.py:90 +#: netbox/dcim/models/device_component_templates.py:437 +#: netbox/dcim/models/device_components.py:670 msgid "PoE mode" msgstr "modalità PoE" -#: dcim/forms/bulk_edit.py:1145 dcim/forms/bulk_edit.py:1452 -#: dcim/forms/bulk_import.py:882 dcim/forms/filtersets.py:1399 -#: dcim/forms/object_import.py:95 -#: dcim/models/device_component_templates.py:443 -#: dcim/models/device_components.py:676 +#: 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/object_import.py:95 +#: netbox/dcim/models/device_component_templates.py:443 +#: netbox/dcim/models/device_components.py:676 msgid "PoE type" msgstr "Tipo PoE" -#: dcim/forms/bulk_edit.py:1151 dcim/forms/filtersets.py:1404 -#: dcim/forms/object_import.py:100 +#: netbox/dcim/forms/bulk_edit.py:1166 netbox/dcim/forms/filtersets.py:1404 +#: netbox/dcim/forms/object_import.py:100 msgid "Wireless role" msgstr "Ruolo wireless" -#: dcim/forms/bulk_edit.py:1288 dcim/forms/model_forms.py:669 -#: dcim/forms/model_forms.py:1223 dcim/tables/devices.py:313 -#: templates/dcim/consoleport.html:24 templates/dcim/consoleserverport.html:24 -#: templates/dcim/frontport.html:24 templates/dcim/interface.html:34 -#: templates/dcim/module.html:54 templates/dcim/modulebay.html:26 -#: templates/dcim/modulebay.html:58 templates/dcim/poweroutlet.html:24 -#: templates/dcim/powerport.html:24 templates/dcim/rearport.html:24 +#: 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/templates/dcim/consoleport.html:24 +#: netbox/templates/dcim/consoleserverport.html:24 +#: netbox/templates/dcim/frontport.html:24 +#: netbox/templates/dcim/interface.html:34 +#: netbox/templates/dcim/module.html:54 +#: netbox/templates/dcim/modulebay.html:26 +#: netbox/templates/dcim/modulebay.html:58 +#: netbox/templates/dcim/poweroutlet.html:24 +#: netbox/templates/dcim/powerport.html:24 +#: netbox/templates/dcim/rearport.html:24 msgid "Module" msgstr "Modulo" -#: dcim/forms/bulk_edit.py:1420 dcim/tables/devices.py:665 -#: templates/dcim/interface.html:110 +#: netbox/dcim/forms/bulk_edit.py:1442 netbox/dcim/tables/devices.py:665 +#: netbox/templates/dcim/interface.html:110 msgid "LAG" msgstr "RITARDO" -#: dcim/forms/bulk_edit.py:1425 dcim/forms/model_forms.py:1305 +#: netbox/dcim/forms/bulk_edit.py:1447 netbox/dcim/forms/model_forms.py:1312 msgid "Virtual device contexts" msgstr "Contesti dei dispositivi virtuali" -#: dcim/forms/bulk_edit.py:1431 dcim/forms/bulk_import.py:714 -#: dcim/forms/bulk_import.py:740 dcim/forms/filtersets.py:1252 -#: dcim/forms/filtersets.py:1277 dcim/forms/filtersets.py:1358 -#: dcim/tables/devices.py:610 -#: templates/circuits/inc/circuit_termination_fields.html:67 -#: templates/dcim/consoleport.html:40 templates/dcim/consoleserverport.html:40 +#: 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/templates/dcim/consoleport.html:40 +#: netbox/templates/dcim/consoleserverport.html:40 msgid "Speed" msgstr "Velocità" -#: dcim/forms/bulk_edit.py:1460 dcim/forms/bulk_import.py:885 -#: templates/vpn/ikepolicy.html:25 templates/vpn/ipsecprofile.html:21 -#: templates/vpn/ipsecprofile.html:48 virtualization/forms/bulk_edit.py:233 -#: virtualization/forms/bulk_import.py:165 vpn/forms/bulk_edit.py:146 -#: vpn/forms/bulk_edit.py:232 vpn/forms/bulk_import.py:176 -#: vpn/forms/bulk_import.py:234 vpn/forms/filtersets.py:135 -#: vpn/forms/filtersets.py:178 vpn/forms/filtersets.py:192 -#: vpn/tables/crypto.py:64 vpn/tables/crypto.py:162 +#: netbox/dcim/forms/bulk_edit.py:1482 netbox/dcim/forms/bulk_import.py:907 +#: netbox/templates/vpn/ikepolicy.html:25 +#: netbox/templates/vpn/ipsecprofile.html:21 +#: netbox/templates/vpn/ipsecprofile.html:48 +#: netbox/virtualization/forms/bulk_edit.py:233 +#: netbox/virtualization/forms/bulk_import.py:165 +#: netbox/vpn/forms/bulk_edit.py:146 netbox/vpn/forms/bulk_edit.py:232 +#: netbox/vpn/forms/bulk_import.py:176 netbox/vpn/forms/bulk_import.py:234 +#: netbox/vpn/forms/filtersets.py:135 netbox/vpn/forms/filtersets.py:178 +#: netbox/vpn/forms/filtersets.py:192 netbox/vpn/tables/crypto.py:64 +#: netbox/vpn/tables/crypto.py:162 msgid "Mode" msgstr "modalità" -#: dcim/forms/bulk_edit.py:1468 dcim/forms/model_forms.py:1354 -#: ipam/forms/bulk_import.py:178 ipam/forms/filtersets.py:498 -#: ipam/models/vlans.py:84 virtualization/forms/bulk_edit.py:240 -#: virtualization/forms/model_forms.py:321 +#: 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 msgid "VLAN group" msgstr "Gruppo VLAN" -#: dcim/forms/bulk_edit.py:1476 dcim/forms/model_forms.py:1360 -#: dcim/tables/devices.py:579 virtualization/forms/bulk_edit.py:248 -#: virtualization/forms/model_forms.py:326 +#: 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 msgid "Untagged VLAN" msgstr "VLAN senza tag" -#: dcim/forms/bulk_edit.py:1484 dcim/forms/model_forms.py:1369 -#: dcim/tables/devices.py:585 virtualization/forms/bulk_edit.py:256 -#: virtualization/forms/model_forms.py:335 +#: 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 "Taggato VLAN" -#: dcim/forms/bulk_edit.py:1494 dcim/forms/model_forms.py:1341 +#: netbox/dcim/forms/bulk_edit.py:1511 +msgid "Add tagged VLANs" +msgstr "" + +#: netbox/dcim/forms/bulk_edit.py:1520 +msgid "Remove tagged VLANs" +msgstr "" + +#: netbox/dcim/forms/bulk_edit.py:1536 netbox/dcim/forms/model_forms.py:1348 msgid "Wireless LAN group" msgstr "Gruppo LAN wireless" -#: dcim/forms/bulk_edit.py:1499 dcim/forms/model_forms.py:1346 -#: dcim/tables/devices.py:619 netbox/navigation/menu.py:146 -#: templates/dcim/interface.html:280 wireless/tables/wirelesslan.py:24 +#: 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/wireless/tables/wirelesslan.py:24 msgid "Wireless LANs" msgstr "LAN wireless" -#: dcim/forms/bulk_edit.py:1508 dcim/forms/filtersets.py:1328 -#: dcim/forms/model_forms.py:1390 ipam/forms/bulk_edit.py:286 -#: ipam/forms/bulk_edit.py:378 ipam/forms/filtersets.py:169 -#: templates/dcim/interface.html:122 templates/ipam/prefix.html:95 -#: virtualization/forms/model_forms.py:349 +#: netbox/dcim/forms/bulk_edit.py: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 msgid "Addressing" msgstr "Indirizzamento" -#: dcim/forms/bulk_edit.py:1509 dcim/forms/filtersets.py:720 -#: dcim/forms/model_forms.py:1391 virtualization/forms/model_forms.py:350 +#: 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 msgid "Operation" msgstr "Operazione" -#: dcim/forms/bulk_edit.py:1510 dcim/forms/filtersets.py:1329 -#: dcim/forms/model_forms.py:987 dcim/forms/model_forms.py:1393 +#: 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 msgid "PoE" msgstr "PoE" -#: dcim/forms/bulk_edit.py:1511 dcim/forms/model_forms.py:1392 -#: templates/dcim/interface.html:99 virtualization/forms/bulk_edit.py:267 -#: virtualization/forms/model_forms.py:351 +#: 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 msgid "Related Interfaces" msgstr "Interfacce correlate" -#: dcim/forms/bulk_edit.py:1512 dcim/forms/model_forms.py:1394 -#: virtualization/forms/bulk_edit.py:268 -#: virtualization/forms/model_forms.py:352 +#: 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 msgid "802.1Q Switching" msgstr "Commutazione 802.1Q" -#: dcim/forms/bulk_edit.py:1574 dcim/forms/bulk_edit.py:1576 +#: netbox/dcim/forms/bulk_edit.py:1558 +msgid "Add/Remove" +msgstr "" + +#: netbox/dcim/forms/bulk_edit.py:1617 netbox/dcim/forms/bulk_edit.py:1619 msgid "Interface mode must be specified to assign VLANs" msgstr "" "La modalità di interfaccia deve essere specificata per assegnare le VLAN" -#: dcim/forms/bulk_edit.py:1581 dcim/forms/common.py:50 +#: netbox/dcim/forms/bulk_edit.py:1624 netbox/dcim/forms/common.py:50 msgid "An access interface cannot have tagged VLANs assigned." msgstr "" "A un'interfaccia di accesso non possono essere assegnate VLAN con tag." -#: dcim/forms/bulk_import.py:64 +#: netbox/dcim/forms/bulk_import.py:64 msgid "Name of parent region" msgstr "Nome della regione madre" -#: dcim/forms/bulk_import.py:78 +#: netbox/dcim/forms/bulk_import.py:78 msgid "Name of parent site group" msgstr "Nome del gruppo del sito principale" -#: dcim/forms/bulk_import.py:97 +#: netbox/dcim/forms/bulk_import.py:97 msgid "Assigned region" msgstr "Regione assegnata" -#: dcim/forms/bulk_import.py:104 tenancy/forms/bulk_import.py:44 -#: tenancy/forms/bulk_import.py:85 wireless/forms/bulk_import.py:40 +#: netbox/dcim/forms/bulk_import.py:104 netbox/tenancy/forms/bulk_import.py:44 +#: netbox/tenancy/forms/bulk_import.py:85 +#: netbox/wireless/forms/bulk_import.py:40 msgid "Assigned group" msgstr "Gruppo assegnato" -#: dcim/forms/bulk_import.py:123 +#: netbox/dcim/forms/bulk_import.py:123 msgid "available options" msgstr "opzioni disponibili" -#: dcim/forms/bulk_import.py:134 dcim/forms/bulk_import.py:543 -#: dcim/forms/bulk_import.py:1342 ipam/forms/bulk_import.py:175 -#: ipam/forms/bulk_import.py:433 virtualization/forms/bulk_import.py:63 -#: virtualization/forms/bulk_import.py:89 +#: 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 msgid "Assigned site" msgstr "Sito assegnato" -#: dcim/forms/bulk_import.py:141 +#: netbox/dcim/forms/bulk_import.py:141 msgid "Parent location" msgstr "Sede del genitore" -#: dcim/forms/bulk_import.py:143 +#: netbox/dcim/forms/bulk_import.py:143 msgid "Location not found." msgstr "Posizione non trovata." -#: dcim/forms/bulk_import.py:185 +#: netbox/dcim/forms/bulk_import.py:185 msgid "The manufacturer of this rack type" msgstr "Il produttore di questo tipo di rack" -#: dcim/forms/bulk_import.py:196 +#: netbox/dcim/forms/bulk_import.py:196 msgid "The lowest-numbered position in the rack" msgstr "La posizione con il numero più basso nel rack" -#: dcim/forms/bulk_import.py:201 dcim/forms/bulk_import.py:268 +#: netbox/dcim/forms/bulk_import.py:201 netbox/dcim/forms/bulk_import.py:276 msgid "Rail-to-rail width (in inches)" msgstr "Larghezza da rotaia a rotaia (in pollici)" -#: dcim/forms/bulk_import.py:207 dcim/forms/bulk_import.py:274 +#: netbox/dcim/forms/bulk_import.py:207 netbox/dcim/forms/bulk_import.py:286 msgid "Unit for outer dimensions" msgstr "Unità per dimensioni esterne" -#: dcim/forms/bulk_import.py:213 dcim/forms/bulk_import.py:286 +#: netbox/dcim/forms/bulk_import.py:213 netbox/dcim/forms/bulk_import.py:298 msgid "Unit for rack weights" msgstr "Unità per pesi a scaffale" -#: dcim/forms/bulk_import.py:245 +#: netbox/dcim/forms/bulk_import.py:245 msgid "Name of assigned tenant" msgstr "Nome dell'inquilino assegnato" -#: dcim/forms/bulk_import.py:257 +#: netbox/dcim/forms/bulk_import.py:257 msgid "Name of assigned role" msgstr "Nome del ruolo assegnato" -#: dcim/forms/bulk_import.py:280 dcim/forms/bulk_import.py:413 -#: dcim/forms/bulk_import.py:583 +#: netbox/dcim/forms/bulk_import.py:264 +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 msgid "Airflow direction" msgstr "Direzione del flusso d'aria" -#: dcim/forms/bulk_import.py:312 +#: netbox/dcim/forms/bulk_import.py:324 +msgid "Width must be set if not specifying a rack type." +msgstr "" + +#: netbox/dcim/forms/bulk_import.py:326 +msgid "U height must be set if not specifying a rack type." +msgstr "" + +#: netbox/dcim/forms/bulk_import.py:334 msgid "Parent site" msgstr "Sito principale" -#: dcim/forms/bulk_import.py:319 dcim/forms/bulk_import.py:1355 +#: netbox/dcim/forms/bulk_import.py:341 netbox/dcim/forms/bulk_import.py:1377 msgid "Rack's location (if any)" msgstr "Posizione del rack (se presente)" -#: dcim/forms/bulk_import.py:328 dcim/forms/model_forms.py:311 -#: dcim/tables/racks.py:222 templates/dcim/rackreservation.html:12 -#: templates/dcim/rackreservation.html:45 +#: netbox/dcim/forms/bulk_import.py:350 netbox/dcim/forms/model_forms.py:311 +#: netbox/dcim/tables/racks.py:222 +#: netbox/templates/dcim/rackreservation.html:12 +#: netbox/templates/dcim/rackreservation.html:45 msgid "Units" msgstr "Unità" -#: dcim/forms/bulk_import.py:331 +#: netbox/dcim/forms/bulk_import.py:353 msgid "Comma-separated list of individual unit numbers" msgstr "Elenco separato da virgole di numeri di unità individuali" -#: dcim/forms/bulk_import.py:374 +#: netbox/dcim/forms/bulk_import.py:396 msgid "The manufacturer which produces this device type" msgstr "Il produttore che produce questo tipo di dispositivo" -#: dcim/forms/bulk_import.py:381 +#: netbox/dcim/forms/bulk_import.py:403 msgid "The default platform for devices of this type (optional)" msgstr "La piattaforma predefinita per dispositivi di questo tipo (opzionale)" -#: dcim/forms/bulk_import.py:386 +#: netbox/dcim/forms/bulk_import.py:408 msgid "Device weight" msgstr "Peso del dispositivo" -#: dcim/forms/bulk_import.py:392 +#: netbox/dcim/forms/bulk_import.py:414 msgid "Unit for device weight" msgstr "Unità per il peso del dispositivo" -#: dcim/forms/bulk_import.py:418 +#: netbox/dcim/forms/bulk_import.py:440 msgid "Module weight" msgstr "Peso del modulo" -#: dcim/forms/bulk_import.py:424 +#: netbox/dcim/forms/bulk_import.py:446 msgid "Unit for module weight" msgstr "Unità per il peso del modulo" -#: dcim/forms/bulk_import.py:454 +#: netbox/dcim/forms/bulk_import.py:476 msgid "Limit platform assignments to this manufacturer" msgstr "Limita le assegnazioni delle piattaforme a questo produttore" -#: dcim/forms/bulk_import.py:476 dcim/forms/bulk_import.py:1425 -#: tenancy/forms/bulk_import.py:106 +#: netbox/dcim/forms/bulk_import.py:498 netbox/dcim/forms/bulk_import.py:1447 +#: netbox/tenancy/forms/bulk_import.py:106 msgid "Assigned role" msgstr "Ruolo assegnato" -#: dcim/forms/bulk_import.py:489 +#: netbox/dcim/forms/bulk_import.py:511 msgid "Device type manufacturer" msgstr "Produttore del tipo di dispositivo" -#: dcim/forms/bulk_import.py:495 +#: netbox/dcim/forms/bulk_import.py:517 msgid "Device type model" msgstr "Tipo di dispositivo modello" -#: dcim/forms/bulk_import.py:502 virtualization/forms/bulk_import.py:126 +#: netbox/dcim/forms/bulk_import.py:524 +#: netbox/virtualization/forms/bulk_import.py:126 msgid "Assigned platform" msgstr "Piattaforma assegnata" -#: dcim/forms/bulk_import.py:510 dcim/forms/bulk_import.py:514 -#: dcim/forms/model_forms.py:536 +#: netbox/dcim/forms/bulk_import.py:532 netbox/dcim/forms/bulk_import.py:536 +#: netbox/dcim/forms/model_forms.py:536 msgid "Virtual chassis" msgstr "Chassis virtuale" -#: dcim/forms/bulk_import.py:517 dcim/forms/filtersets.py:728 -#: dcim/forms/filtersets.py:898 dcim/forms/model_forms.py:522 -#: dcim/tables/devices.py:202 extras/filtersets.py:596 -#: extras/forms/filtersets.py:322 ipam/forms/filtersets.py:415 -#: ipam/forms/filtersets.py:447 templates/dcim/device.html:239 -#: templates/virtualization/cluster.html:10 -#: templates/virtualization/virtualmachine.html:92 -#: templates/virtualization/virtualmachine.html:101 -#: virtualization/filtersets.py:157 virtualization/filtersets.py:277 -#: virtualization/forms/bulk_edit.py:129 -#: virtualization/forms/bulk_import.py:92 -#: virtualization/forms/filtersets.py:99 -#: virtualization/forms/filtersets.py:123 -#: virtualization/forms/filtersets.py:204 -#: virtualization/forms/model_forms.py:79 -#: virtualization/forms/model_forms.py:176 -#: virtualization/tables/virtualmachines.py:67 -msgid "Cluster" -msgstr "Grappolo" - -#: dcim/forms/bulk_import.py:521 +#: netbox/dcim/forms/bulk_import.py:543 msgid "Virtualization cluster" msgstr "Cluster di virtualizzazione" -#: dcim/forms/bulk_import.py:550 +#: netbox/dcim/forms/bulk_import.py:572 msgid "Assigned location (if any)" msgstr "Posizione assegnata (se presente)" -#: dcim/forms/bulk_import.py:557 +#: netbox/dcim/forms/bulk_import.py:579 msgid "Assigned rack (if any)" msgstr "Rack assegnato (se presente)" -#: dcim/forms/bulk_import.py:560 +#: netbox/dcim/forms/bulk_import.py:582 msgid "Face" msgstr "Viso" -#: dcim/forms/bulk_import.py:563 +#: netbox/dcim/forms/bulk_import.py:585 msgid "Mounted rack face" msgstr "Faccia del rack montata" -#: dcim/forms/bulk_import.py:570 +#: netbox/dcim/forms/bulk_import.py:592 msgid "Parent device (for child devices)" msgstr "Dispositivo principale (per dispositivi per bambini)" -#: dcim/forms/bulk_import.py:573 +#: netbox/dcim/forms/bulk_import.py:595 msgid "Device bay" msgstr "Alloggiamento per dispositivi" -#: dcim/forms/bulk_import.py:577 +#: netbox/dcim/forms/bulk_import.py:599 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)" -#: dcim/forms/bulk_import.py:644 +#: netbox/dcim/forms/bulk_import.py:666 msgid "The device in which this module is installed" msgstr "Il dispositivo in cui è installato questo modulo" -#: dcim/forms/bulk_import.py:647 dcim/forms/model_forms.py:640 +#: netbox/dcim/forms/bulk_import.py:669 netbox/dcim/forms/model_forms.py:640 msgid "Module bay" msgstr "alloggiamento per moduli" -#: dcim/forms/bulk_import.py:650 +#: netbox/dcim/forms/bulk_import.py:672 msgid "The module bay in which this module is installed" msgstr "L'alloggiamento del modulo in cui è installato questo modulo" -#: dcim/forms/bulk_import.py:656 +#: netbox/dcim/forms/bulk_import.py:678 msgid "The type of module" msgstr "Il tipo di modulo" -#: dcim/forms/bulk_import.py:664 dcim/forms/model_forms.py:656 +#: netbox/dcim/forms/bulk_import.py:686 netbox/dcim/forms/model_forms.py:656 msgid "Replicate components" msgstr "Componenti replicati" -#: dcim/forms/bulk_import.py:666 +#: netbox/dcim/forms/bulk_import.py:688 msgid "" "Automatically populate components associated with this module type (enabled " "by default)" @@ -3955,264 +4381,271 @@ msgstr "" "Compila automaticamente i componenti associati a questo tipo di modulo " "(abilitato per impostazione predefinita)" -#: dcim/forms/bulk_import.py:669 dcim/forms/model_forms.py:662 +#: netbox/dcim/forms/bulk_import.py:691 netbox/dcim/forms/model_forms.py:662 msgid "Adopt components" msgstr "Adotta i componenti" -#: dcim/forms/bulk_import.py:671 dcim/forms/model_forms.py:665 +#: netbox/dcim/forms/bulk_import.py:693 netbox/dcim/forms/model_forms.py:665 msgid "Adopt already existing components" msgstr "Adotta componenti già esistenti" -#: dcim/forms/bulk_import.py:711 dcim/forms/bulk_import.py:737 -#: dcim/forms/bulk_import.py:763 +#: netbox/dcim/forms/bulk_import.py:733 netbox/dcim/forms/bulk_import.py:759 +#: netbox/dcim/forms/bulk_import.py:785 msgid "Port type" msgstr "Tipo di porta" -#: dcim/forms/bulk_import.py:719 dcim/forms/bulk_import.py:745 +#: netbox/dcim/forms/bulk_import.py:741 netbox/dcim/forms/bulk_import.py:767 msgid "Port speed in bps" msgstr "Velocità della porta in bps" -#: dcim/forms/bulk_import.py:783 +#: netbox/dcim/forms/bulk_import.py:805 msgid "Outlet type" msgstr "Tipo di presa" -#: dcim/forms/bulk_import.py:790 +#: netbox/dcim/forms/bulk_import.py:812 msgid "Local power port which feeds this outlet" msgstr "Porta di alimentazione locale che alimenta questa presa" -#: dcim/forms/bulk_import.py:796 +#: netbox/dcim/forms/bulk_import.py:818 msgid "Electrical phase (for three-phase circuits)" msgstr "Fase elettrica (per circuiti trifase)" -#: dcim/forms/bulk_import.py:837 dcim/forms/model_forms.py:1316 -#: virtualization/forms/bulk_import.py:155 -#: virtualization/forms/model_forms.py:305 +#: 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 msgid "Parent interface" msgstr "Interfaccia principale" -#: dcim/forms/bulk_import.py:844 dcim/forms/model_forms.py:1324 -#: virtualization/forms/bulk_import.py:162 -#: virtualization/forms/model_forms.py:313 +#: 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 msgid "Bridged interface" msgstr "Interfaccia con ponte" -#: dcim/forms/bulk_import.py:847 +#: netbox/dcim/forms/bulk_import.py:869 msgid "Lag" msgstr "Ritardo" -#: dcim/forms/bulk_import.py:851 +#: netbox/dcim/forms/bulk_import.py:873 msgid "Parent LAG interface" msgstr "Interfaccia LAG principale" -#: dcim/forms/bulk_import.py:854 +#: netbox/dcim/forms/bulk_import.py:876 msgid "Vdcs" msgstr "Vdc" -#: dcim/forms/bulk_import.py:859 +#: netbox/dcim/forms/bulk_import.py:881 msgid "VDC names separated by commas, encased with double quotes. Example:" msgstr "" "Nomi VDC separati da virgole, racchiusi tra virgolette doppie. Esempio:" -#: dcim/forms/bulk_import.py:865 +#: netbox/dcim/forms/bulk_import.py:887 msgid "Physical medium" msgstr "Supporto fisico" -#: dcim/forms/bulk_import.py:868 dcim/forms/filtersets.py:1365 +#: netbox/dcim/forms/bulk_import.py:890 netbox/dcim/forms/filtersets.py:1365 msgid "Duplex" msgstr "Duplex" -#: dcim/forms/bulk_import.py:873 +#: netbox/dcim/forms/bulk_import.py:895 msgid "Poe mode" msgstr "modalità Poe" -#: dcim/forms/bulk_import.py:879 +#: netbox/dcim/forms/bulk_import.py:901 msgid "Poe type" msgstr "Tipo Poe" -#: dcim/forms/bulk_import.py:888 virtualization/forms/bulk_import.py:168 +#: netbox/dcim/forms/bulk_import.py:910 +#: netbox/virtualization/forms/bulk_import.py:168 msgid "IEEE 802.1Q operational mode (for L2 interfaces)" msgstr "Modalità operativa IEEE 802.1Q (per interfacce L2)" -#: dcim/forms/bulk_import.py:895 ipam/forms/bulk_import.py:161 -#: ipam/forms/bulk_import.py:247 ipam/forms/bulk_import.py:283 -#: ipam/forms/filtersets.py:201 ipam/forms/filtersets.py:277 -#: ipam/forms/filtersets.py:336 virtualization/forms/bulk_import.py:175 +#: netbox/dcim/forms/bulk_import.py: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 msgid "Assigned VRF" msgstr "VRF assegnato" -#: dcim/forms/bulk_import.py:898 +#: netbox/dcim/forms/bulk_import.py:920 msgid "Rf role" msgstr "Ruolo Rf" -#: dcim/forms/bulk_import.py:901 +#: netbox/dcim/forms/bulk_import.py:923 msgid "Wireless role (AP/station)" msgstr "Ruolo wireless (AP/stazione)" -#: dcim/forms/bulk_import.py:937 +#: netbox/dcim/forms/bulk_import.py:959 #, python-brace-format msgid "VDC {vdc} is not assigned to device {device}" msgstr "VDC {vdc} non è assegnato al dispositivo {device}" -#: dcim/forms/bulk_import.py:951 dcim/forms/model_forms.py:1000 -#: dcim/forms/model_forms.py:1575 dcim/forms/object_import.py:117 +#: 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 msgid "Rear port" msgstr "Porta posteriore" -#: dcim/forms/bulk_import.py:954 +#: netbox/dcim/forms/bulk_import.py:976 msgid "Corresponding rear port" msgstr "Porta posteriore corrispondente" -#: dcim/forms/bulk_import.py:959 dcim/forms/bulk_import.py:1000 -#: dcim/forms/bulk_import.py:1216 +#: netbox/dcim/forms/bulk_import.py:981 netbox/dcim/forms/bulk_import.py:1022 +#: netbox/dcim/forms/bulk_import.py:1238 msgid "Physical medium classification" msgstr "Classificazione del mezzo fisico" -#: dcim/forms/bulk_import.py:1028 dcim/tables/devices.py:822 +#: netbox/dcim/forms/bulk_import.py:1050 netbox/dcim/tables/devices.py:822 msgid "Installed device" msgstr "Dispositivo installato" -#: dcim/forms/bulk_import.py:1032 +#: netbox/dcim/forms/bulk_import.py:1054 msgid "Child device installed within this bay" msgstr "" "Dispositivo per bambini installato all'interno di questo alloggiamento" -#: dcim/forms/bulk_import.py:1034 +#: netbox/dcim/forms/bulk_import.py:1056 msgid "Child device not found." msgstr "Dispositivo secondario non trovato." -#: dcim/forms/bulk_import.py:1092 +#: netbox/dcim/forms/bulk_import.py:1114 msgid "Parent inventory item" msgstr "Articolo di inventario principale" -#: dcim/forms/bulk_import.py:1095 +#: netbox/dcim/forms/bulk_import.py:1117 msgid "Component type" msgstr "Tipo di componente" -#: dcim/forms/bulk_import.py:1099 +#: netbox/dcim/forms/bulk_import.py:1121 msgid "Component Type" msgstr "Tipo di componente" -#: dcim/forms/bulk_import.py:1102 +#: netbox/dcim/forms/bulk_import.py:1124 msgid "Compnent name" msgstr "Nome del componente" -#: dcim/forms/bulk_import.py:1104 +#: netbox/dcim/forms/bulk_import.py:1126 msgid "Component Name" msgstr "Nome del componente" -#: dcim/forms/bulk_import.py:1146 +#: netbox/dcim/forms/bulk_import.py:1168 #, python-brace-format msgid "Component not found: {device} - {component_name}" msgstr "Componente non trovato: {device} - {component_name}" -#: dcim/forms/bulk_import.py:1171 +#: netbox/dcim/forms/bulk_import.py:1193 msgid "Side A device" msgstr "Dispositivo lato A" -#: dcim/forms/bulk_import.py:1174 dcim/forms/bulk_import.py:1192 +#: netbox/dcim/forms/bulk_import.py:1196 netbox/dcim/forms/bulk_import.py:1214 msgid "Device name" msgstr "Nome del dispositivo" -#: dcim/forms/bulk_import.py:1177 +#: netbox/dcim/forms/bulk_import.py:1199 msgid "Side A type" msgstr "Tipo Lato A" -#: dcim/forms/bulk_import.py:1180 dcim/forms/bulk_import.py:1198 +#: netbox/dcim/forms/bulk_import.py:1202 netbox/dcim/forms/bulk_import.py:1220 msgid "Termination type" msgstr "Tipo di terminazione" -#: dcim/forms/bulk_import.py:1183 +#: netbox/dcim/forms/bulk_import.py:1205 msgid "Side A name" msgstr "Nome del lato A" -#: dcim/forms/bulk_import.py:1184 dcim/forms/bulk_import.py:1202 +#: netbox/dcim/forms/bulk_import.py:1206 netbox/dcim/forms/bulk_import.py:1224 msgid "Termination name" msgstr "Nome della cessazione" -#: dcim/forms/bulk_import.py:1189 +#: netbox/dcim/forms/bulk_import.py:1211 msgid "Side B device" msgstr "Dispositivo lato B" -#: dcim/forms/bulk_import.py:1195 +#: netbox/dcim/forms/bulk_import.py:1217 msgid "Side B type" msgstr "Tipo B laterale" -#: dcim/forms/bulk_import.py:1201 +#: netbox/dcim/forms/bulk_import.py:1223 msgid "Side B name" msgstr "Nome lato B" -#: dcim/forms/bulk_import.py:1210 wireless/forms/bulk_import.py:86 +#: netbox/dcim/forms/bulk_import.py:1232 +#: netbox/wireless/forms/bulk_import.py:86 msgid "Connection status" msgstr "Stato della connessione" -#: dcim/forms/bulk_import.py:1262 +#: netbox/dcim/forms/bulk_import.py:1284 #, python-brace-format msgid "Side {side_upper}: {device} {termination_object} is already connected" msgstr "Lato {side_upper}: {device} {termination_object} è già connesso" -#: dcim/forms/bulk_import.py:1268 +#: netbox/dcim/forms/bulk_import.py:1290 #, python-brace-format msgid "{side_upper} side termination not found: {device} {name}" msgstr "{side_upper} terminazione laterale non trovata: {device} {name}" -#: dcim/forms/bulk_import.py:1293 dcim/forms/model_forms.py:785 -#: dcim/tables/devices.py:1027 templates/dcim/device.html:132 -#: templates/dcim/virtualchassis.html:27 templates/dcim/virtualchassis.html:67 +#: 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/templates/dcim/virtualchassis.html:27 +#: netbox/templates/dcim/virtualchassis.html:67 msgid "Master" msgstr "Maestro" -#: dcim/forms/bulk_import.py:1297 +#: netbox/dcim/forms/bulk_import.py:1319 msgid "Master device" msgstr "Dispositivo master" -#: dcim/forms/bulk_import.py:1314 +#: netbox/dcim/forms/bulk_import.py:1336 msgid "Name of parent site" msgstr "Nome del sito principale" -#: dcim/forms/bulk_import.py:1348 +#: netbox/dcim/forms/bulk_import.py:1370 msgid "Upstream power panel" msgstr "Pannello di alimentazione upstream" -#: dcim/forms/bulk_import.py:1378 +#: netbox/dcim/forms/bulk_import.py:1400 msgid "Primary or redundant" msgstr "Primario o ridondante" -#: dcim/forms/bulk_import.py:1383 +#: netbox/dcim/forms/bulk_import.py:1405 msgid "Supply type (AC/DC)" msgstr "Tipo di alimentazione (AC/DC)" -#: dcim/forms/bulk_import.py:1388 +#: netbox/dcim/forms/bulk_import.py:1410 msgid "Single or three-phase" msgstr "Monofase o trifase" -#: dcim/forms/bulk_import.py:1439 dcim/forms/model_forms.py:1670 -#: templates/dcim/device.html:190 templates/dcim/virtualdevicecontext.html:30 -#: templates/virtualization/virtualmachine.html:52 +#: netbox/dcim/forms/bulk_import.py:1461 netbox/dcim/forms/model_forms.py:1677 +#: netbox/templates/dcim/device.html:190 +#: netbox/templates/dcim/virtualdevicecontext.html:30 +#: netbox/templates/virtualization/virtualmachine.html:52 msgid "Primary IPv4" msgstr "IPv4 primario" -#: dcim/forms/bulk_import.py:1443 +#: netbox/dcim/forms/bulk_import.py:1465 msgid "IPv4 address with mask, e.g. 1.2.3.4/24" msgstr "Indirizzo IPv4 con maschera, ad esempio 1.2.3.4/24" -#: dcim/forms/bulk_import.py:1446 dcim/forms/model_forms.py:1679 -#: templates/dcim/device.html:206 templates/dcim/virtualdevicecontext.html:41 -#: templates/virtualization/virtualmachine.html:68 +#: netbox/dcim/forms/bulk_import.py:1468 netbox/dcim/forms/model_forms.py:1686 +#: netbox/templates/dcim/device.html:206 +#: netbox/templates/dcim/virtualdevicecontext.html:41 +#: netbox/templates/virtualization/virtualmachine.html:68 msgid "Primary IPv6" msgstr "IPv6 primario" -#: dcim/forms/bulk_import.py:1450 +#: netbox/dcim/forms/bulk_import.py:1472 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" -#: dcim/forms/common.py:24 dcim/models/device_components.py:527 -#: templates/dcim/interface.html:57 -#: templates/virtualization/vminterface.html:55 -#: virtualization/forms/bulk_edit.py:225 +#: netbox/dcim/forms/common.py:24 netbox/dcim/models/device_components.py:527 +#: netbox/templates/dcim/interface.html:57 +#: netbox/templates/virtualization/vminterface.html:55 +#: netbox/virtualization/forms/bulk_edit.py:225 msgid "MTU" msgstr "MTU" -#: dcim/forms/common.py:65 +#: netbox/dcim/forms/common.py:65 #, python-brace-format msgid "" "The tagged VLANs ({vlans}) must belong to the same site as the interface's " @@ -4222,7 +4655,7 @@ msgstr "" "dispositivo/macchina virtuale principale dell'interfaccia oppure devono " "essere globali" -#: dcim/forms/common.py:126 +#: netbox/dcim/forms/common.py:126 msgid "" "Cannot install module with placeholder values in a module bay with no " "position defined." @@ -4230,7 +4663,7 @@ msgstr "" "Impossibile installare un modulo con valori segnaposto in un alloggiamento " "per moduli senza una posizione definita." -#: dcim/forms/common.py:131 +#: netbox/dcim/forms/common.py:131 #, python-brace-format msgid "" "Cannot install module with placeholder values in a module bay tree {level} " @@ -4239,189 +4672,200 @@ msgstr "" "Impossibile installare un modulo con valori segnaposto in un albero di " "alloggiamento del modulo {level} in un albero ma {tokens} segnaposto dati." -#: dcim/forms/common.py:144 +#: netbox/dcim/forms/common.py:144 #, 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" -#: dcim/forms/common.py:153 +#: netbox/dcim/forms/common.py:153 #, python-brace-format msgid "A {model} named {name} already exists" msgstr "UN {model} denominato {name} esiste già" -#: dcim/forms/connections.py:49 dcim/forms/model_forms.py:738 -#: dcim/tables/power.py:66 templates/dcim/inc/cable_termination.html:37 -#: templates/dcim/powerfeed.html:24 templates/dcim/powerpanel.html:19 -#: templates/dcim/trace/powerpanel.html:4 +#: netbox/dcim/forms/connections.py:49 netbox/dcim/forms/model_forms.py:738 +#: netbox/dcim/tables/power.py:66 +#: netbox/templates/dcim/inc/cable_termination.html:37 +#: netbox/templates/dcim/powerfeed.html:24 +#: netbox/templates/dcim/powerpanel.html:19 +#: netbox/templates/dcim/trace/powerpanel.html:4 msgid "Power Panel" msgstr "Pannello di alimentazione" -#: dcim/forms/connections.py:58 dcim/forms/model_forms.py:765 -#: templates/dcim/powerfeed.html:21 templates/dcim/powerport.html:80 +#: netbox/dcim/forms/connections.py:58 netbox/dcim/forms/model_forms.py:765 +#: netbox/templates/dcim/powerfeed.html:21 +#: netbox/templates/dcim/powerport.html:80 msgid "Power Feed" msgstr "Alimentazione" -#: dcim/forms/connections.py:81 +#: netbox/dcim/forms/connections.py:81 msgid "Side" msgstr "Lato" -#: dcim/forms/filtersets.py:136 dcim/tables/devices.py:295 +#: netbox/dcim/forms/filtersets.py:136 netbox/dcim/tables/devices.py:295 msgid "Device Status" msgstr "Stato del dispositivo" -#: dcim/forms/filtersets.py:149 +#: netbox/dcim/forms/filtersets.py:149 msgid "Parent region" msgstr "Regione principale" -#: dcim/forms/filtersets.py:163 tenancy/forms/bulk_import.py:28 -#: tenancy/forms/bulk_import.py:62 tenancy/forms/filtersets.py:33 -#: tenancy/forms/filtersets.py:62 wireless/forms/bulk_import.py:25 -#: wireless/forms/filtersets.py:25 +#: netbox/dcim/forms/filtersets.py:163 netbox/tenancy/forms/bulk_import.py:28 +#: netbox/tenancy/forms/bulk_import.py:62 +#: netbox/tenancy/forms/filtersets.py:33 netbox/tenancy/forms/filtersets.py:62 +#: netbox/wireless/forms/bulk_import.py:25 +#: netbox/wireless/forms/filtersets.py:25 msgid "Parent group" msgstr "Gruppo di genitori" -#: dcim/forms/filtersets.py:242 templates/dcim/location.html:58 -#: templates/dcim/site.html:56 +#: netbox/dcim/forms/filtersets.py:242 netbox/templates/dcim/location.html:58 +#: netbox/templates/dcim/site.html:56 msgid "Facility" msgstr "Struttura" -#: dcim/forms/filtersets.py:380 -msgid "Rack type" -msgstr "Tipo di rack" - -#: dcim/forms/filtersets.py:397 +#: netbox/dcim/forms/filtersets.py:397 msgid "Function" msgstr "Funzione" -#: dcim/forms/filtersets.py:483 dcim/forms/model_forms.py:373 -#: templates/inc/panels/image_attachments.html:6 +#: netbox/dcim/forms/filtersets.py:483 netbox/dcim/forms/model_forms.py:373 +#: netbox/templates/inc/panels/image_attachments.html:6 msgid "Images" msgstr "Immagini" -#: dcim/forms/filtersets.py:486 dcim/forms/filtersets.py:611 -#: dcim/forms/filtersets.py:726 +#: netbox/dcim/forms/filtersets.py:486 netbox/dcim/forms/filtersets.py:611 +#: netbox/dcim/forms/filtersets.py:726 msgid "Components" msgstr "Componenti" -#: dcim/forms/filtersets.py:506 +#: netbox/dcim/forms/filtersets.py:506 msgid "Subdevice role" msgstr "Ruolo del dispositivo secondario" -#: dcim/forms/filtersets.py:790 dcim/tables/racks.py:54 -#: templates/dcim/racktype.html:20 +#: netbox/dcim/forms/filtersets.py:790 netbox/dcim/tables/racks.py:54 +#: netbox/templates/dcim/racktype.html:20 msgid "Model" msgstr "Modello" -#: dcim/forms/filtersets.py:834 +#: netbox/dcim/forms/filtersets.py:834 msgid "Has an OOB IP" msgstr "Ha un IP OOB" -#: dcim/forms/filtersets.py:841 +#: netbox/dcim/forms/filtersets.py:841 msgid "Virtual chassis member" msgstr "Membro virtuale dello chassis" -#: dcim/forms/filtersets.py:890 +#: netbox/dcim/forms/filtersets.py:890 msgid "Has virtual device contexts" msgstr "Dispone di contesti di dispositivi virtuali" -#: dcim/forms/filtersets.py:903 extras/filtersets.py:585 -#: ipam/forms/filtersets.py:452 virtualization/forms/filtersets.py:112 +#: netbox/dcim/forms/filtersets.py:903 netbox/extras/filtersets.py:585 +#: netbox/ipam/forms/filtersets.py:452 +#: netbox/virtualization/forms/filtersets.py:112 msgid "Cluster group" msgstr "Gruppo Cluster" -#: dcim/forms/filtersets.py:1210 +#: netbox/dcim/forms/filtersets.py:1210 msgid "Cabled" msgstr "cablato" -#: dcim/forms/filtersets.py:1217 +#: netbox/dcim/forms/filtersets.py:1217 msgid "Occupied" msgstr "Occupato" -#: dcim/forms/filtersets.py:1244 dcim/forms/filtersets.py:1269 -#: dcim/forms/filtersets.py:1293 dcim/forms/filtersets.py:1313 -#: dcim/forms/filtersets.py:1336 dcim/tables/devices.py:364 -#: templates/dcim/consoleport.html:55 templates/dcim/consoleserverport.html:55 -#: templates/dcim/frontport.html:69 templates/dcim/interface.html:140 -#: templates/dcim/powerfeed.html:110 templates/dcim/poweroutlet.html:59 -#: templates/dcim/powerport.html:59 templates/dcim/rearport.html:65 +#: netbox/dcim/forms/filtersets.py: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/templates/dcim/consoleport.html:55 +#: netbox/templates/dcim/consoleserverport.html:55 +#: netbox/templates/dcim/frontport.html:69 +#: netbox/templates/dcim/interface.html:140 +#: netbox/templates/dcim/powerfeed.html:110 +#: netbox/templates/dcim/poweroutlet.html:59 +#: netbox/templates/dcim/powerport.html:59 +#: netbox/templates/dcim/rearport.html:65 msgid "Connection" msgstr "Connessione" -#: dcim/forms/filtersets.py:1348 extras/forms/bulk_edit.py:326 -#: extras/forms/bulk_import.py:247 extras/forms/filtersets.py:464 -#: extras/forms/model_forms.py:675 extras/tables/tables.py:579 -#: templates/extras/journalentry.html:30 +#: netbox/dcim/forms/filtersets.py:1348 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 "Gentile" -#: dcim/forms/filtersets.py:1377 +#: netbox/dcim/forms/filtersets.py:1377 msgid "Mgmt only" msgstr "Solo gestione" -#: dcim/forms/filtersets.py:1389 dcim/forms/model_forms.py:1383 -#: dcim/models/device_components.py:629 templates/dcim/interface.html:129 +#: 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 msgid "WWN" msgstr "WWN" -#: dcim/forms/filtersets.py:1409 +#: netbox/dcim/forms/filtersets.py:1409 msgid "Wireless channel" msgstr "Canale wireless" -#: dcim/forms/filtersets.py:1413 +#: netbox/dcim/forms/filtersets.py:1413 msgid "Channel frequency (MHz)" msgstr "Frequenza del canale (MHz)" -#: dcim/forms/filtersets.py:1417 +#: netbox/dcim/forms/filtersets.py:1417 msgid "Channel width (MHz)" msgstr "Larghezza del canale (MHz)" -#: dcim/forms/filtersets.py:1421 templates/dcim/interface.html:85 +#: netbox/dcim/forms/filtersets.py:1421 +#: netbox/templates/dcim/interface.html:85 msgid "Transmit power (dBm)" msgstr "Potenza di trasmissione (dBm)" -#: dcim/forms/filtersets.py:1446 dcim/forms/filtersets.py:1471 -#: dcim/tables/devices.py:327 templates/dcim/cable.html:12 -#: templates/dcim/cable_trace.html:46 templates/dcim/frontport.html:77 -#: templates/dcim/htmx/cable_edit.html:50 -#: templates/dcim/inc/connection_endpoints.html:4 -#: templates/dcim/rearport.html:73 templates/dcim/trace/cable.html:7 +#: netbox/dcim/forms/filtersets.py:1446 netbox/dcim/forms/filtersets.py:1471 +#: netbox/dcim/tables/devices.py:327 netbox/templates/dcim/cable.html:12 +#: netbox/templates/dcim/cable_trace.html:46 +#: netbox/templates/dcim/frontport.html:77 +#: netbox/templates/dcim/htmx/cable_edit.html:50 +#: netbox/templates/dcim/inc/connection_endpoints.html:4 +#: netbox/templates/dcim/rearport.html:73 +#: netbox/templates/dcim/trace/cable.html:7 msgid "Cable" msgstr "Cavo" -#: dcim/forms/filtersets.py:1550 dcim/tables/devices.py:949 +#: netbox/dcim/forms/filtersets.py:1550 netbox/dcim/tables/devices.py:949 msgid "Discovered" msgstr "Scoperto" -#: dcim/forms/formsets.py:20 +#: netbox/dcim/forms/formsets.py:20 #, python-brace-format msgid "A virtual chassis member already exists in position {vc_position}." msgstr "" "Un membro virtuale dello chassis esiste già in posizione {vc_position}." -#: dcim/forms/model_forms.py:140 +#: netbox/dcim/forms/model_forms.py:140 msgid "Contact Info" msgstr "Informazioni di contatto" -#: dcim/forms/model_forms.py:195 templates/dcim/rackrole.html:19 +#: netbox/dcim/forms/model_forms.py:195 netbox/templates/dcim/rackrole.html:19 msgid "Rack Role" msgstr "Ruolo del rack" -#: dcim/forms/model_forms.py:212 dcim/forms/model_forms.py:362 -#: dcim/forms/model_forms.py:446 utilities/forms/fields/fields.py:47 +#: netbox/dcim/forms/model_forms.py:212 netbox/dcim/forms/model_forms.py:362 +#: netbox/dcim/forms/model_forms.py:446 +#: netbox/utilities/forms/fields/fields.py:47 msgid "Slug" msgstr "lumaca" -#: dcim/forms/model_forms.py:259 +#: netbox/dcim/forms/model_forms.py:259 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." -#: dcim/forms/model_forms.py:265 +#: netbox/dcim/forms/model_forms.py:265 msgid "Inventory Control" msgstr "Controllo dell'inventario" -#: dcim/forms/model_forms.py:313 +#: netbox/dcim/forms/model_forms.py:313 msgid "" "Comma-separated list of numeric unit IDs. A range may be specified using a " "hyphen." @@ -4429,147 +4873,174 @@ msgstr "" "Elenco separato da virgole di ID di unità numeriche. È possibile specificare" " un intervallo utilizzando un trattino." -#: dcim/forms/model_forms.py:322 dcim/tables/racks.py:202 +#: netbox/dcim/forms/model_forms.py:322 netbox/dcim/tables/racks.py:202 msgid "Reservation" msgstr "Prenotazione" -#: dcim/forms/model_forms.py:423 templates/dcim/devicerole.html:23 +#: netbox/dcim/forms/model_forms.py:423 +#: netbox/templates/dcim/devicerole.html:23 msgid "Device Role" msgstr "Ruolo del dispositivo" -#: dcim/forms/model_forms.py:490 dcim/models/devices.py:644 +#: netbox/dcim/forms/model_forms.py:490 netbox/dcim/models/devices.py:644 msgid "The lowest-numbered unit occupied by the device" msgstr "L'unità con il numero più basso occupata dal dispositivo" -#: dcim/forms/model_forms.py:547 +#: netbox/dcim/forms/model_forms.py:547 msgid "The position in the virtual chassis this device is identified by" msgstr "" "La posizione nello chassis virtuale da cui viene identificato questo " "dispositivo" -#: dcim/forms/model_forms.py:552 +#: netbox/dcim/forms/model_forms.py:552 msgid "The priority of the device in the virtual chassis" msgstr "La priorità del dispositivo nello chassis virtuale" -#: dcim/forms/model_forms.py:659 +#: netbox/dcim/forms/model_forms.py:659 msgid "Automatically populate components associated with this module type" msgstr "" "Compila automaticamente i componenti associati a questo tipo di modulo" -#: dcim/forms/model_forms.py:767 +#: netbox/dcim/forms/model_forms.py:767 msgid "Characteristics" msgstr "Caratteristiche" -#: dcim/forms/model_forms.py:1087 +#: netbox/dcim/forms/model_forms.py:914 +#, python-brace-format +msgid "" +"Alphanumeric ranges are supported for bulk creation. Mixed cases and types " +"within a single range are not supported (example: " +"[ge,xe]-0/0/[0-9]). The token {module}, if " +"present, will be automatically replaced with the position value when " +"creating a new module." +msgstr "" + +#: netbox/dcim/forms/model_forms.py:1094 msgid "Console port template" msgstr "Modello di porta console" -#: dcim/forms/model_forms.py:1095 +#: netbox/dcim/forms/model_forms.py:1102 msgid "Console server port template" msgstr "Modello di porta del server console" -#: dcim/forms/model_forms.py:1103 +#: netbox/dcim/forms/model_forms.py:1110 msgid "Front port template" msgstr "Modello di porta anteriore" -#: dcim/forms/model_forms.py:1111 +#: netbox/dcim/forms/model_forms.py:1118 msgid "Interface template" msgstr "Modello di interfaccia" -#: dcim/forms/model_forms.py:1119 +#: netbox/dcim/forms/model_forms.py:1126 msgid "Power outlet template" msgstr "Modello di presa di corrente" -#: dcim/forms/model_forms.py:1127 +#: netbox/dcim/forms/model_forms.py:1134 msgid "Power port template" msgstr "Modello di porta di alimentazione" -#: dcim/forms/model_forms.py:1135 +#: netbox/dcim/forms/model_forms.py:1142 msgid "Rear port template" msgstr "Modello di porta posteriore" -#: dcim/forms/model_forms.py:1144 dcim/forms/model_forms.py:1388 -#: dcim/forms/model_forms.py:1551 dcim/forms/model_forms.py:1583 -#: dcim/tables/connections.py:65 ipam/forms/bulk_import.py:318 -#: ipam/forms/model_forms.py:280 ipam/forms/model_forms.py:289 -#: ipam/tables/fhrp.py:64 ipam/tables/ip.py:372 ipam/tables/vlans.py:169 -#: templates/circuits/inc/circuit_termination_fields.html:51 -#: templates/dcim/frontport.html:106 templates/dcim/interface.html:27 -#: templates/dcim/interface.html:184 templates/dcim/interface.html:310 -#: templates/dcim/rearport.html:102 -#: templates/virtualization/vminterface.html:18 -#: templates/vpn/tunneltermination.html:31 -#: templates/wireless/inc/wirelesslink_interface.html:10 -#: templates/wireless/wirelesslink.html:10 -#: templates/wireless/wirelesslink.html:55 -#: virtualization/forms/model_forms.py:348 vpn/forms/bulk_import.py:297 -#: vpn/forms/model_forms.py:436 vpn/forms/model_forms.py:445 -#: wireless/forms/model_forms.py:113 wireless/forms/model_forms.py:155 +#: netbox/dcim/forms/model_forms.py: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" -#: dcim/forms/model_forms.py:1145 dcim/forms/model_forms.py:1584 -#: dcim/tables/connections.py:27 templates/dcim/consoleport.html:17 -#: templates/dcim/consoleserverport.html:74 templates/dcim/frontport.html:112 +#: netbox/dcim/forms/model_forms.py:1152 netbox/dcim/forms/model_forms.py:1591 +#: netbox/dcim/tables/connections.py:27 +#: netbox/templates/dcim/consoleport.html:17 +#: netbox/templates/dcim/consoleserverport.html:74 +#: netbox/templates/dcim/frontport.html:112 msgid "Console Port" msgstr "Porta console" -#: dcim/forms/model_forms.py:1146 dcim/forms/model_forms.py:1585 -#: templates/dcim/consoleport.html:73 templates/dcim/consoleserverport.html:17 -#: templates/dcim/frontport.html:109 +#: netbox/dcim/forms/model_forms.py:1153 netbox/dcim/forms/model_forms.py:1592 +#: 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" -#: dcim/forms/model_forms.py:1147 dcim/forms/model_forms.py:1586 -#: templates/circuits/inc/circuit_termination_fields.html:52 -#: templates/dcim/consoleport.html:76 templates/dcim/consoleserverport.html:77 -#: templates/dcim/frontport.html:17 templates/dcim/frontport.html:115 -#: templates/dcim/interface.html:187 templates/dcim/rearport.html:105 +#: netbox/dcim/forms/model_forms.py:1154 netbox/dcim/forms/model_forms.py:1593 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:52 +#: netbox/templates/dcim/consoleport.html:76 +#: netbox/templates/dcim/consoleserverport.html:77 +#: netbox/templates/dcim/frontport.html:17 +#: netbox/templates/dcim/frontport.html:115 +#: netbox/templates/dcim/interface.html:187 +#: netbox/templates/dcim/rearport.html:105 msgid "Front Port" msgstr "Porta anteriore" -#: dcim/forms/model_forms.py:1148 dcim/forms/model_forms.py:1587 -#: dcim/tables/devices.py:710 -#: templates/circuits/inc/circuit_termination_fields.html:53 -#: templates/dcim/consoleport.html:79 templates/dcim/consoleserverport.html:80 -#: templates/dcim/frontport.html:50 templates/dcim/frontport.html:118 -#: templates/dcim/interface.html:190 templates/dcim/rearport.html:17 -#: templates/dcim/rearport.html:108 +#: netbox/dcim/forms/model_forms.py:1155 netbox/dcim/forms/model_forms.py:1594 +#: netbox/dcim/tables/devices.py:710 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:53 +#: netbox/templates/dcim/consoleport.html:79 +#: netbox/templates/dcim/consoleserverport.html:80 +#: netbox/templates/dcim/frontport.html:50 +#: netbox/templates/dcim/frontport.html:118 +#: netbox/templates/dcim/interface.html:190 +#: netbox/templates/dcim/rearport.html:17 +#: netbox/templates/dcim/rearport.html:108 msgid "Rear Port" msgstr "Porta posteriore" -#: dcim/forms/model_forms.py:1149 dcim/forms/model_forms.py:1588 -#: dcim/tables/connections.py:46 dcim/tables/devices.py:512 -#: templates/dcim/poweroutlet.html:44 templates/dcim/powerport.html:17 +#: 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/templates/dcim/powerport.html:17 msgid "Power Port" msgstr "Porta di alimentazione" -#: dcim/forms/model_forms.py:1150 dcim/forms/model_forms.py:1589 -#: templates/dcim/poweroutlet.html:17 templates/dcim/powerport.html:77 +#: netbox/dcim/forms/model_forms.py:1157 netbox/dcim/forms/model_forms.py:1596 +#: netbox/templates/dcim/poweroutlet.html:17 +#: netbox/templates/dcim/powerport.html:77 msgid "Power Outlet" msgstr "Presa di corrente" -#: dcim/forms/model_forms.py:1152 dcim/forms/model_forms.py:1591 +#: netbox/dcim/forms/model_forms.py:1159 netbox/dcim/forms/model_forms.py:1598 msgid "Component Assignment" msgstr "Assegnazione dei componenti" -#: dcim/forms/model_forms.py:1195 dcim/forms/model_forms.py:1638 +#: netbox/dcim/forms/model_forms.py:1202 netbox/dcim/forms/model_forms.py:1645 msgid "An InventoryItem can only be assigned to a single component." msgstr "Un InventoryItem può essere assegnato solo a un singolo componente." -#: dcim/forms/model_forms.py:1332 +#: netbox/dcim/forms/model_forms.py:1339 msgid "LAG interface" msgstr "Interfaccia LAG" -#: dcim/forms/model_forms.py:1355 +#: netbox/dcim/forms/model_forms.py:1362 msgid "Filter VLANs available for assignment by group." msgstr "Filtra le VLAN disponibili per l'assegnazione per gruppo." -#: dcim/forms/model_forms.py:1484 +#: netbox/dcim/forms/model_forms.py:1491 msgid "Child Device" msgstr "Dispositivo per bambini" -#: dcim/forms/model_forms.py:1485 +#: netbox/dcim/forms/model_forms.py:1492 msgid "" "Child devices must first be created and assigned to the site and rack of the" " parent device." @@ -4577,32 +5048,35 @@ msgstr "" "I dispositivi secondari devono prima essere creati e assegnati al sito e al " "rack del dispositivo principale." -#: dcim/forms/model_forms.py:1527 +#: netbox/dcim/forms/model_forms.py:1534 msgid "Console port" msgstr "Porta console" -#: dcim/forms/model_forms.py:1535 +#: netbox/dcim/forms/model_forms.py:1542 msgid "Console server port" msgstr "Porta console server" -#: dcim/forms/model_forms.py:1543 +#: netbox/dcim/forms/model_forms.py:1550 msgid "Front port" msgstr "Porta anteriore" -#: dcim/forms/model_forms.py:1559 +#: netbox/dcim/forms/model_forms.py:1566 msgid "Power outlet" msgstr "Presa di corrente" -#: dcim/forms/model_forms.py:1579 templates/dcim/inventoryitem.html:17 +#: netbox/dcim/forms/model_forms.py:1586 +#: netbox/templates/dcim/inventoryitem.html:17 msgid "Inventory Item" msgstr "Articolo di inventario" -#: dcim/forms/model_forms.py:1652 templates/dcim/inventoryitemrole.html:15 +#: netbox/dcim/forms/model_forms.py:1659 +#: netbox/templates/dcim/inventoryitemrole.html:15 msgid "Inventory Item Role" msgstr "Ruolo dell'articolo di inventario" -#: dcim/forms/object_create.py:48 dcim/forms/object_create.py:199 -#: dcim/forms/object_create.py:355 +#: netbox/dcim/forms/object_create.py:48 +#: netbox/dcim/forms/object_create.py:199 +#: netbox/dcim/forms/object_create.py:347 msgid "" "Alphanumeric ranges are supported. (Must match the number of objects being " "created.)" @@ -4610,7 +5084,7 @@ msgstr "" "Sono supportati gli intervalli alfanumerici. (Deve corrispondere al numero " "di oggetti da creare.)" -#: dcim/forms/object_create.py:68 +#: netbox/dcim/forms/object_create.py:68 #, python-brace-format msgid "" "The provided pattern specifies {value_count} values, but {pattern_count} are" @@ -4619,18 +5093,19 @@ msgstr "" "Il modello fornito specifica {value_count} valori, ma {pattern_count} sono " "attesi." -#: dcim/forms/object_create.py:110 dcim/forms/object_create.py:271 -#: dcim/tables/devices.py:252 +#: netbox/dcim/forms/object_create.py:110 +#: netbox/dcim/forms/object_create.py:263 netbox/dcim/tables/devices.py:252 msgid "Rear ports" msgstr "Porte posteriori" -#: dcim/forms/object_create.py:111 dcim/forms/object_create.py:272 +#: netbox/dcim/forms/object_create.py:111 +#: netbox/dcim/forms/object_create.py:264 msgid "Select one rear port assignment for each front port being created." msgstr "" "Seleziona un'assegnazione della porta posteriore per ogni porta anteriore da" " creare." -#: dcim/forms/object_create.py:164 +#: netbox/dcim/forms/object_create.py:164 #, python-brace-format msgid "" "The number of front port templates to be created ({frontport_count}) must " @@ -4640,16 +5115,7 @@ msgstr "" "corrispondere al numero selezionato di posizioni delle porte posteriori " "({rearport_count})." -#: dcim/forms/object_create.py:251 -#, python-brace-format -msgid "" -"The string {module} will be replaced with the position of the " -"assigned module, if any." -msgstr "" -"La corda {module} verrà sostituita dalla posizione del modulo " -"assegnato, se presente." - -#: dcim/forms/object_create.py:320 +#: netbox/dcim/forms/object_create.py:312 #, python-brace-format msgid "" "The number of front ports to be created ({frontport_count}) must match the " @@ -4659,17 +5125,18 @@ msgstr "" " al numero selezionato di posizioni delle porte posteriori " "({rearport_count})." -#: dcim/forms/object_create.py:409 dcim/tables/devices.py:1033 -#: ipam/tables/fhrp.py:31 templates/dcim/virtualchassis.html:53 -#: templates/dcim/virtualchassis_edit.html:47 templates/ipam/fhrpgroup.html:38 +#: netbox/dcim/forms/object_create.py:401 netbox/dcim/tables/devices.py:1033 +#: netbox/ipam/tables/fhrp.py:31 netbox/templates/dcim/virtualchassis.html:53 +#: netbox/templates/dcim/virtualchassis_edit.html:47 +#: netbox/templates/ipam/fhrpgroup.html:38 msgid "Members" msgstr "Membri" -#: dcim/forms/object_create.py:418 +#: netbox/dcim/forms/object_create.py:410 msgid "Initial position" msgstr "Posizione iniziale" -#: dcim/forms/object_create.py:421 +#: netbox/dcim/forms/object_create.py:413 msgid "" "Position of the first member device. Increases by one for each additional " "member." @@ -4677,69 +5144,71 @@ msgstr "" "Posizione del primo dispositivo membro. Aumenta di uno per ogni membro " "aggiuntivo." -#: dcim/forms/object_create.py:435 +#: netbox/dcim/forms/object_create.py:427 msgid "A position must be specified for the first VC member." msgstr "È necessario specificare una posizione per il primo membro VC." -#: dcim/models/cables.py:62 dcim/models/device_component_templates.py:55 -#: dcim/models/device_components.py:62 extras/models/customfields.py:111 +#: netbox/dcim/models/cables.py:62 +#: netbox/dcim/models/device_component_templates.py:55 +#: netbox/dcim/models/device_components.py:62 +#: netbox/extras/models/customfields.py:111 msgid "label" msgstr "etichetta" -#: dcim/models/cables.py:71 +#: netbox/dcim/models/cables.py:71 msgid "length" msgstr "lunghezza" -#: dcim/models/cables.py:78 +#: netbox/dcim/models/cables.py:78 msgid "length unit" msgstr "unità di lunghezza" -#: dcim/models/cables.py:95 +#: netbox/dcim/models/cables.py:95 msgid "cable" msgstr "cavo" -#: dcim/models/cables.py:96 +#: netbox/dcim/models/cables.py:96 msgid "cables" msgstr "cavi" -#: dcim/models/cables.py:165 +#: netbox/dcim/models/cables.py:165 msgid "Must specify a unit when setting a cable length" msgstr "" "È necessario specificare un'unità quando si imposta la lunghezza del cavo" -#: dcim/models/cables.py:168 +#: netbox/dcim/models/cables.py:168 msgid "Must define A and B terminations when creating a new cable." msgstr "" "È necessario definire le terminazioni A e B quando si crea un nuovo cavo." -#: dcim/models/cables.py:175 +#: netbox/dcim/models/cables.py:175 msgid "Cannot connect different termination types to same end of cable." msgstr "" "Non è possibile collegare tipi di terminazione diversi alla stessa estremità" " del cavo." -#: dcim/models/cables.py:183 +#: netbox/dcim/models/cables.py:183 #, python-brace-format msgid "Incompatible termination types: {type_a} and {type_b}" msgstr "Tipi di terminazione incompatibili: {type_a} e {type_b}" -#: dcim/models/cables.py:193 +#: netbox/dcim/models/cables.py:193 msgid "A and B terminations cannot connect to the same object." msgstr "Le terminazioni A e B non possono connettersi allo stesso oggetto." -#: dcim/models/cables.py:260 ipam/models/asns.py:37 +#: netbox/dcim/models/cables.py:260 netbox/ipam/models/asns.py:37 msgid "end" msgstr "fine" -#: dcim/models/cables.py:313 +#: netbox/dcim/models/cables.py:313 msgid "cable termination" msgstr "terminazione del cavo" -#: dcim/models/cables.py:314 +#: netbox/dcim/models/cables.py:314 msgid "cable terminations" msgstr "terminazioni dei cavi" -#: dcim/models/cables.py:333 +#: netbox/dcim/models/cables.py:333 #, python-brace-format msgid "" "Duplicate termination found for {app_label}.{model} {termination_id}: cable " @@ -4748,38 +5217,38 @@ msgstr "" "È stata rilevata una terminazione duplicata per {app_label}.{model} " "{termination_id}: cavo {cable_pk}" -#: dcim/models/cables.py:343 +#: netbox/dcim/models/cables.py:343 #, python-brace-format msgid "Cables cannot be terminated to {type_display} interfaces" msgstr "I cavi non possono essere terminati {type_display} interfacce" -#: dcim/models/cables.py:350 +#: netbox/dcim/models/cables.py:350 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." -#: dcim/models/cables.py:448 extras/models/configs.py:50 +#: netbox/dcim/models/cables.py:448 netbox/extras/models/configs.py:50 msgid "is active" msgstr "è attivo" -#: dcim/models/cables.py:452 +#: netbox/dcim/models/cables.py:452 msgid "is complete" msgstr "è completo" -#: dcim/models/cables.py:456 +#: netbox/dcim/models/cables.py:456 msgid "is split" msgstr "è diviso" -#: dcim/models/cables.py:464 +#: netbox/dcim/models/cables.py:464 msgid "cable path" msgstr "percorso via cavo" -#: dcim/models/cables.py:465 +#: netbox/dcim/models/cables.py:465 msgid "cable paths" msgstr "percorsi via cavo" -#: dcim/models/device_component_templates.py:46 +#: netbox/dcim/models/device_component_templates.py:46 #, python-brace-format msgid "" "{module} is accepted as a substitution for the module bay position when " @@ -4788,18 +5257,18 @@ msgstr "" "{module} è accettato come sostituto della posizione dell'alloggiamento del " "modulo quando è collegato a un tipo di modulo." -#: dcim/models/device_component_templates.py:58 -#: dcim/models/device_components.py:65 +#: netbox/dcim/models/device_component_templates.py:58 +#: netbox/dcim/models/device_components.py:65 msgid "Physical label" msgstr "Etichetta fisica" -#: dcim/models/device_component_templates.py:103 +#: netbox/dcim/models/device_component_templates.py:103 msgid "Component templates cannot be moved to a different device type." msgstr "" "I modelli di componente non possono essere spostati su un tipo di " "dispositivo diverso." -#: dcim/models/device_component_templates.py:154 +#: netbox/dcim/models/device_component_templates.py:154 msgid "" "A component template cannot be associated with both a device type and a " "module type." @@ -4807,7 +5276,7 @@ msgstr "" "Un modello di componente non può essere associato sia a un tipo di " "dispositivo che a un tipo di modulo." -#: dcim/models/device_component_templates.py:158 +#: netbox/dcim/models/device_component_templates.py:158 msgid "" "A component template must be associated with either a device type or a " "module type." @@ -4815,142 +5284,142 @@ msgstr "" "Un modello di componente deve essere associato a un tipo di dispositivo o a " "un tipo di modulo." -#: dcim/models/device_component_templates.py:212 +#: netbox/dcim/models/device_component_templates.py:212 msgid "console port template" msgstr "modello di porta console" -#: dcim/models/device_component_templates.py:213 +#: netbox/dcim/models/device_component_templates.py:213 msgid "console port templates" msgstr "modelli di porte per console" -#: dcim/models/device_component_templates.py:246 +#: netbox/dcim/models/device_component_templates.py:246 msgid "console server port template" msgstr "modello di porta console server" -#: dcim/models/device_component_templates.py:247 +#: netbox/dcim/models/device_component_templates.py:247 msgid "console server port templates" msgstr "modelli di porte per console server" -#: dcim/models/device_component_templates.py:278 -#: dcim/models/device_components.py:352 +#: netbox/dcim/models/device_component_templates.py:278 +#: netbox/dcim/models/device_components.py:352 msgid "maximum draw" msgstr "pareggio massimo" -#: dcim/models/device_component_templates.py:285 -#: dcim/models/device_components.py:359 +#: netbox/dcim/models/device_component_templates.py:285 +#: netbox/dcim/models/device_components.py:359 msgid "allocated draw" msgstr "pareggio assegnato" -#: dcim/models/device_component_templates.py:295 +#: netbox/dcim/models/device_component_templates.py:295 msgid "power port template" msgstr "modello di porta di alimentazione" -#: dcim/models/device_component_templates.py:296 +#: netbox/dcim/models/device_component_templates.py:296 msgid "power port templates" msgstr "modelli di porte di alimentazione" -#: dcim/models/device_component_templates.py:315 -#: dcim/models/device_components.py:382 +#: netbox/dcim/models/device_component_templates.py:315 +#: netbox/dcim/models/device_components.py:382 #, 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)." -#: dcim/models/device_component_templates.py:347 -#: dcim/models/device_components.py:477 +#: netbox/dcim/models/device_component_templates.py:347 +#: netbox/dcim/models/device_components.py:477 msgid "feed leg" msgstr "gamba di alimentazione" -#: dcim/models/device_component_templates.py:351 -#: dcim/models/device_components.py:481 +#: netbox/dcim/models/device_component_templates.py:351 +#: netbox/dcim/models/device_components.py:481 msgid "Phase (for three-phase feeds)" msgstr "Fase (per alimentazioni trifase)" -#: dcim/models/device_component_templates.py:357 +#: netbox/dcim/models/device_component_templates.py:357 msgid "power outlet template" msgstr "modello di presa di corrente" -#: dcim/models/device_component_templates.py:358 +#: netbox/dcim/models/device_component_templates.py:358 msgid "power outlet templates" msgstr "modelli di prese di corrente" -#: dcim/models/device_component_templates.py:367 +#: netbox/dcim/models/device_component_templates.py:367 #, 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" -#: dcim/models/device_component_templates.py:371 +#: netbox/dcim/models/device_component_templates.py:371 #, 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" -#: dcim/models/device_component_templates.py:423 -#: dcim/models/device_components.py:611 +#: netbox/dcim/models/device_component_templates.py:423 +#: netbox/dcim/models/device_components.py:611 msgid "management only" msgstr "solo gestione" -#: dcim/models/device_component_templates.py:431 -#: dcim/models/device_components.py:550 +#: netbox/dcim/models/device_component_templates.py:431 +#: netbox/dcim/models/device_components.py:550 msgid "bridge interface" msgstr "interfaccia bridge" -#: dcim/models/device_component_templates.py:449 -#: dcim/models/device_components.py:636 +#: netbox/dcim/models/device_component_templates.py:449 +#: netbox/dcim/models/device_components.py:636 msgid "wireless role" msgstr "ruolo wireless" -#: dcim/models/device_component_templates.py:455 +#: netbox/dcim/models/device_component_templates.py:455 msgid "interface template" msgstr "modello di interfaccia" -#: dcim/models/device_component_templates.py:456 +#: netbox/dcim/models/device_component_templates.py:456 msgid "interface templates" msgstr "modelli di interfaccia" -#: dcim/models/device_component_templates.py:463 -#: dcim/models/device_components.py:804 -#: virtualization/models/virtualmachines.py:405 +#: netbox/dcim/models/device_component_templates.py:463 +#: netbox/dcim/models/device_components.py:804 +#: netbox/virtualization/models/virtualmachines.py:405 msgid "An interface cannot be bridged to itself." msgstr "Un'interfaccia non può essere collegata a se stessa." -#: dcim/models/device_component_templates.py:466 +#: netbox/dcim/models/device_component_templates.py:466 #, 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" -#: dcim/models/device_component_templates.py:470 +#: netbox/dcim/models/device_component_templates.py:470 #, 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" -#: dcim/models/device_component_templates.py:526 -#: dcim/models/device_components.py:984 +#: netbox/dcim/models/device_component_templates.py:526 +#: netbox/dcim/models/device_components.py:984 msgid "rear port position" msgstr "posizione della porta posteriore" -#: dcim/models/device_component_templates.py:551 +#: netbox/dcim/models/device_component_templates.py:551 msgid "front port template" msgstr "modello di porta anteriore" -#: dcim/models/device_component_templates.py:552 +#: netbox/dcim/models/device_component_templates.py:552 msgid "front port templates" msgstr "modelli di porte anteriori" -#: dcim/models/device_component_templates.py:562 +#: netbox/dcim/models/device_component_templates.py:562 #, 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" -#: dcim/models/device_component_templates.py:568 +#: netbox/dcim/models/device_component_templates.py:568 #, python-brace-format msgid "" "Invalid rear port position ({position}); rear port {name} has only {count} " @@ -4959,48 +5428,48 @@ msgstr "" "Posizione della porta posteriore non valida ({position}); porta posteriore " "{name} ha solo {count} posizioni" -#: dcim/models/device_component_templates.py:621 -#: dcim/models/device_components.py:1053 +#: netbox/dcim/models/device_component_templates.py:621 +#: netbox/dcim/models/device_components.py:1053 msgid "positions" msgstr "posizioni" -#: dcim/models/device_component_templates.py:632 +#: netbox/dcim/models/device_component_templates.py:632 msgid "rear port template" msgstr "modello di porta posteriore" -#: dcim/models/device_component_templates.py:633 +#: netbox/dcim/models/device_component_templates.py:633 msgid "rear port templates" msgstr "modelli di porte posteriori" -#: dcim/models/device_component_templates.py:662 -#: dcim/models/device_components.py:1103 +#: netbox/dcim/models/device_component_templates.py:662 +#: netbox/dcim/models/device_components.py:1103 msgid "position" msgstr "posizione" -#: dcim/models/device_component_templates.py:665 -#: dcim/models/device_components.py:1106 +#: netbox/dcim/models/device_component_templates.py:665 +#: netbox/dcim/models/device_components.py:1106 msgid "Identifier to reference when renaming installed components" msgstr "" "Identificatore a cui fare riferimento quando si rinominano i componenti " "installati" -#: dcim/models/device_component_templates.py:671 +#: netbox/dcim/models/device_component_templates.py:671 msgid "module bay template" msgstr "modello di alloggiamento del modulo" -#: dcim/models/device_component_templates.py:672 +#: netbox/dcim/models/device_component_templates.py:672 msgid "module bay templates" msgstr "modelli module bay" -#: dcim/models/device_component_templates.py:699 +#: netbox/dcim/models/device_component_templates.py:699 msgid "device bay template" msgstr "modello di alloggiamento per dispositivi" -#: dcim/models/device_component_templates.py:700 +#: netbox/dcim/models/device_component_templates.py:700 msgid "device bay templates" msgstr "modelli di alloggiamento per dispositivi" -#: dcim/models/device_component_templates.py:713 +#: netbox/dcim/models/device_component_templates.py:713 #, python-brace-format msgid "" "Subdevice role of device type ({device_type}) must be set to \"parent\" to " @@ -5009,208 +5478,213 @@ msgstr "" "Ruolo del tipo di dispositivo secondario ({device_type}) deve essere " "impostato su «principale» per consentire gli alloggiamenti dei dispositivi." -#: dcim/models/device_component_templates.py:768 -#: dcim/models/device_components.py:1262 +#: netbox/dcim/models/device_component_templates.py:768 +#: netbox/dcim/models/device_components.py:1262 msgid "part ID" msgstr "ID della parte" -#: dcim/models/device_component_templates.py:770 -#: dcim/models/device_components.py:1264 +#: netbox/dcim/models/device_component_templates.py:770 +#: netbox/dcim/models/device_components.py:1264 msgid "Manufacturer-assigned part identifier" msgstr "Identificativo del pezzo assegnato dal produttore" -#: dcim/models/device_component_templates.py:787 +#: netbox/dcim/models/device_component_templates.py:787 msgid "inventory item template" msgstr "modello di articolo di inventario" -#: dcim/models/device_component_templates.py:788 +#: netbox/dcim/models/device_component_templates.py:788 msgid "inventory item templates" msgstr "modelli di articoli di inventario" -#: dcim/models/device_components.py:105 +#: netbox/dcim/models/device_components.py:105 msgid "Components cannot be moved to a different device." msgstr "I componenti non possono essere spostati su un dispositivo diverso." -#: dcim/models/device_components.py:144 +#: netbox/dcim/models/device_components.py:144 msgid "cable end" msgstr "estremità del cavo" -#: dcim/models/device_components.py:150 +#: netbox/dcim/models/device_components.py:150 msgid "mark connected" msgstr "contrassegnare connesso" -#: dcim/models/device_components.py:152 +#: netbox/dcim/models/device_components.py:152 msgid "Treat as if a cable is connected" msgstr "Tratta come se fosse collegato un cavo" -#: dcim/models/device_components.py:170 +#: netbox/dcim/models/device_components.py:170 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." -#: dcim/models/device_components.py:174 +#: netbox/dcim/models/device_components.py:174 msgid "Cable end must not be set without a cable." msgstr "L'estremità del cavo non deve essere impostata senza un cavo." -#: dcim/models/device_components.py:178 +#: netbox/dcim/models/device_components.py:178 msgid "Cannot mark as connected with a cable attached." msgstr "Non è possibile contrassegnare come connesso con un cavo collegato." -#: dcim/models/device_components.py:202 +#: netbox/dcim/models/device_components.py:202 #, python-brace-format msgid "{class_name} models must declare a parent_object property" msgstr "{class_name} i modelli devono dichiarare una proprietà parent_object" -#: dcim/models/device_components.py:287 dcim/models/device_components.py:316 -#: dcim/models/device_components.py:349 dcim/models/device_components.py:467 +#: 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 msgid "Physical port type" msgstr "Tipo di porta fisica" -#: dcim/models/device_components.py:290 dcim/models/device_components.py:319 +#: netbox/dcim/models/device_components.py:290 +#: netbox/dcim/models/device_components.py:319 msgid "speed" msgstr "velocità" -#: dcim/models/device_components.py:294 dcim/models/device_components.py:323 +#: netbox/dcim/models/device_components.py:294 +#: netbox/dcim/models/device_components.py:323 msgid "Port speed in bits per second" msgstr "Velocità della porta in bit al secondo" -#: dcim/models/device_components.py:300 +#: netbox/dcim/models/device_components.py:300 msgid "console port" msgstr "porta console" -#: dcim/models/device_components.py:301 +#: netbox/dcim/models/device_components.py:301 msgid "console ports" msgstr "porte console" -#: dcim/models/device_components.py:329 +#: netbox/dcim/models/device_components.py:329 msgid "console server port" msgstr "porta console server" -#: dcim/models/device_components.py:330 +#: netbox/dcim/models/device_components.py:330 msgid "console server ports" msgstr "porte console server" -#: dcim/models/device_components.py:369 +#: netbox/dcim/models/device_components.py:369 msgid "power port" msgstr "porta di alimentazione" -#: dcim/models/device_components.py:370 +#: netbox/dcim/models/device_components.py:370 msgid "power ports" msgstr "porte di alimentazione" -#: dcim/models/device_components.py:487 +#: netbox/dcim/models/device_components.py:487 msgid "power outlet" msgstr "presa di corrente" -#: dcim/models/device_components.py:488 +#: netbox/dcim/models/device_components.py:488 msgid "power outlets" msgstr "prese di corrente" -#: dcim/models/device_components.py:499 +#: netbox/dcim/models/device_components.py:499 #, 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" -#: dcim/models/device_components.py:530 vpn/models/crypto.py:81 -#: vpn/models/crypto.py:226 +#: netbox/dcim/models/device_components.py:530 netbox/vpn/models/crypto.py:81 +#: netbox/vpn/models/crypto.py:226 msgid "mode" msgstr "modalità" -#: dcim/models/device_components.py:534 +#: netbox/dcim/models/device_components.py:534 msgid "IEEE 802.1Q tagging strategy" msgstr "Strategia di etichettatura IEEE 802.1Q" -#: dcim/models/device_components.py:542 +#: netbox/dcim/models/device_components.py:542 msgid "parent interface" msgstr "interfaccia principale" -#: dcim/models/device_components.py:602 +#: netbox/dcim/models/device_components.py:602 msgid "parent LAG" msgstr "GAL capogruppo" -#: dcim/models/device_components.py:612 +#: 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" -#: dcim/models/device_components.py:617 +#: netbox/dcim/models/device_components.py:617 msgid "speed (Kbps)" msgstr "velocità (Kbps)" -#: dcim/models/device_components.py:620 +#: netbox/dcim/models/device_components.py:620 msgid "duplex" msgstr "bifamiliare" -#: dcim/models/device_components.py:630 +#: netbox/dcim/models/device_components.py:630 msgid "64-bit World Wide Name" msgstr "Nome mondiale a 64 bit" -#: dcim/models/device_components.py:642 +#: netbox/dcim/models/device_components.py:642 msgid "wireless channel" msgstr "canale wireless" -#: dcim/models/device_components.py:649 +#: netbox/dcim/models/device_components.py:649 msgid "channel frequency (MHz)" msgstr "frequenza del canale (MHz)" -#: dcim/models/device_components.py:650 dcim/models/device_components.py:658 +#: 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)" -#: dcim/models/device_components.py:664 +#: netbox/dcim/models/device_components.py:664 msgid "transmit power (dBm)" msgstr "potenza di trasmissione (dBm)" -#: dcim/models/device_components.py:689 wireless/models.py:117 +#: netbox/dcim/models/device_components.py:689 netbox/wireless/models.py:117 msgid "wireless LANs" msgstr "LAN wireless" -#: dcim/models/device_components.py:697 -#: virtualization/models/virtualmachines.py:335 +#: netbox/dcim/models/device_components.py:697 +#: netbox/virtualization/models/virtualmachines.py:335 msgid "untagged VLAN" msgstr "VLAN senza tag" -#: dcim/models/device_components.py:703 -#: virtualization/models/virtualmachines.py:341 +#: netbox/dcim/models/device_components.py:703 +#: netbox/virtualization/models/virtualmachines.py:341 msgid "tagged VLANs" msgstr "VLAN contrassegnate" -#: dcim/models/device_components.py:745 -#: virtualization/models/virtualmachines.py:377 +#: netbox/dcim/models/device_components.py:745 +#: netbox/virtualization/models/virtualmachines.py:377 msgid "interface" msgstr "interfaccia" -#: dcim/models/device_components.py:746 -#: virtualization/models/virtualmachines.py:378 +#: netbox/dcim/models/device_components.py:746 +#: netbox/virtualization/models/virtualmachines.py:378 msgid "interfaces" msgstr "interfacce" -#: dcim/models/device_components.py:757 +#: netbox/dcim/models/device_components.py:757 #, python-brace-format msgid "{display_type} interfaces cannot have a cable attached." msgstr "{display_type} alle interfacce non è possibile collegare un cavo." -#: dcim/models/device_components.py:765 +#: netbox/dcim/models/device_components.py:765 #, python-brace-format msgid "{display_type} interfaces cannot be marked as connected." msgstr "" "{display_type} le interfacce non possono essere contrassegnate come " "connesse." -#: dcim/models/device_components.py:774 -#: virtualization/models/virtualmachines.py:390 +#: netbox/dcim/models/device_components.py:774 +#: netbox/virtualization/models/virtualmachines.py:390 msgid "An interface cannot be its own parent." msgstr "Un'interfaccia non può essere la propria madre." -#: dcim/models/device_components.py:778 +#: netbox/dcim/models/device_components.py:778 msgid "Only virtual interfaces may be assigned to a parent interface." msgstr "" "Solo le interfacce virtuali possono essere assegnate a un'interfaccia " "principale." -#: dcim/models/device_components.py:785 +#: netbox/dcim/models/device_components.py:785 #, python-brace-format msgid "" "The selected parent interface ({interface}) belongs to a different device " @@ -5219,7 +5693,7 @@ msgstr "" "L'interfaccia principale selezionata ({interface}) appartiene a un " "dispositivo diverso ({device})" -#: dcim/models/device_components.py:791 +#: netbox/dcim/models/device_components.py:791 #, python-brace-format msgid "" "The selected parent interface ({interface}) belongs to {device}, which is " @@ -5228,7 +5702,7 @@ msgstr "" "L'interfaccia principale selezionata ({interface}) appartiene a {device}, " "che non fa parte dello chassis virtuale {virtual_chassis}." -#: dcim/models/device_components.py:811 +#: netbox/dcim/models/device_components.py:811 #, python-brace-format msgid "" "The selected bridge interface ({bridge}) belongs to a different device " @@ -5237,7 +5711,7 @@ msgstr "" "L'interfaccia bridge selezionata ({bridge}) appartiene a un dispositivo " "diverso ({device})." -#: dcim/models/device_components.py:817 +#: netbox/dcim/models/device_components.py:817 #, python-brace-format msgid "" "The selected bridge interface ({interface}) belongs to {device}, which is " @@ -5246,16 +5720,16 @@ msgstr "" "L'interfaccia bridge selezionata ({interface}) appartiene a {device}, che " "non fa parte dello chassis virtuale {virtual_chassis}." -#: dcim/models/device_components.py:828 +#: netbox/dcim/models/device_components.py:828 msgid "Virtual interfaces cannot have a parent LAG interface." msgstr "" "Le interfacce virtuali non possono avere un'interfaccia LAG principale." -#: dcim/models/device_components.py:832 +#: netbox/dcim/models/device_components.py:832 msgid "A LAG interface cannot be its own parent." msgstr "Un'interfaccia LAG non può essere la propria interfaccia principale." -#: dcim/models/device_components.py:839 +#: netbox/dcim/models/device_components.py:839 #, python-brace-format msgid "" "The selected LAG interface ({lag}) belongs to a different device ({device})." @@ -5263,7 +5737,7 @@ msgstr "" "L'interfaccia LAG selezionata ({lag}) appartiene a un dispositivo diverso " "({device})." -#: dcim/models/device_components.py:845 +#: netbox/dcim/models/device_components.py:845 #, python-brace-format msgid "" "The selected LAG interface ({lag}) belongs to {device}, which is not part of" @@ -5272,51 +5746,51 @@ msgstr "" "L'interfaccia LAG selezionata ({lag}) appartiene a {device}, che non fa " "parte dello chassis virtuale {virtual_chassis}." -#: dcim/models/device_components.py:856 +#: netbox/dcim/models/device_components.py:856 msgid "Virtual interfaces cannot have a PoE mode." msgstr "Le interfacce virtuali non possono avere una modalità PoE." -#: dcim/models/device_components.py:860 +#: netbox/dcim/models/device_components.py:860 msgid "Virtual interfaces cannot have a PoE type." msgstr "Le interfacce virtuali non possono avere un tipo PoE." -#: dcim/models/device_components.py:866 +#: netbox/dcim/models/device_components.py:866 msgid "Must specify PoE mode when designating a PoE type." msgstr "" "È necessario specificare la modalità PoE quando si designa un tipo PoE." -#: dcim/models/device_components.py:873 +#: netbox/dcim/models/device_components.py:873 msgid "Wireless role may be set only on wireless interfaces." msgstr "" "Il ruolo wireless può essere impostato solo sulle interfacce wireless." -#: dcim/models/device_components.py:875 +#: netbox/dcim/models/device_components.py:875 msgid "Channel may be set only on wireless interfaces." msgstr "Il canale può essere impostato solo su interfacce wireless." -#: dcim/models/device_components.py:881 +#: netbox/dcim/models/device_components.py:881 msgid "Channel frequency may be set only on wireless interfaces." msgstr "" "La frequenza del canale può essere impostata solo sulle interfacce wireless." -#: dcim/models/device_components.py:885 +#: netbox/dcim/models/device_components.py:885 msgid "Cannot specify custom frequency with channel selected." msgstr "" "Impossibile specificare una frequenza personalizzata con il canale " "selezionato." -#: dcim/models/device_components.py:891 +#: netbox/dcim/models/device_components.py:891 msgid "Channel width may be set only on wireless interfaces." msgstr "" "La larghezza del canale può essere impostata solo sulle interfacce wireless." -#: dcim/models/device_components.py:893 +#: netbox/dcim/models/device_components.py:893 msgid "Cannot specify custom width with channel selected." msgstr "" "Impossibile specificare una larghezza personalizzata con il canale " "selezionato." -#: dcim/models/device_components.py:901 +#: netbox/dcim/models/device_components.py:901 #, python-brace-format msgid "" "The untagged VLAN ({untagged_vlan}) must belong to the same site as the " @@ -5325,25 +5799,25 @@ msgstr "" "La VLAN senza tag ({untagged_vlan}) deve appartenere allo stesso sito del " "dispositivo principale dell'interfaccia o deve essere globale." -#: dcim/models/device_components.py:990 +#: netbox/dcim/models/device_components.py:990 msgid "Mapped position on corresponding rear port" msgstr "Posizione mappata sulla porta posteriore corrispondente" -#: dcim/models/device_components.py:1006 +#: netbox/dcim/models/device_components.py:1006 msgid "front port" msgstr "porta anteriore" -#: dcim/models/device_components.py:1007 +#: netbox/dcim/models/device_components.py:1007 msgid "front ports" msgstr "porte anteriori" -#: dcim/models/device_components.py:1021 +#: netbox/dcim/models/device_components.py:1021 #, python-brace-format msgid "Rear port ({rear_port}) must belong to the same device" msgstr "" "Porta posteriore ({rear_port}) deve appartenere allo stesso dispositivo" -#: dcim/models/device_components.py:1029 +#: netbox/dcim/models/device_components.py:1029 #, python-brace-format msgid "" "Invalid rear port position ({rear_port_position}): Rear port {name} has only" @@ -5352,19 +5826,19 @@ msgstr "" "Posizione della porta posteriore non valida ({rear_port_position}): Porta " "posteriore {name} ha solo {positions} posizioni." -#: dcim/models/device_components.py:1059 +#: netbox/dcim/models/device_components.py:1059 msgid "Number of front ports which may be mapped" msgstr "Numero di porte anteriori che possono essere mappate" -#: dcim/models/device_components.py:1064 +#: netbox/dcim/models/device_components.py:1064 msgid "rear port" msgstr "porta posteriore" -#: dcim/models/device_components.py:1065 +#: netbox/dcim/models/device_components.py:1065 msgid "rear ports" msgstr "porte posteriori" -#: dcim/models/device_components.py:1079 +#: netbox/dcim/models/device_components.py:1079 #, python-brace-format msgid "" "The number of positions cannot be less than the number of mapped front ports" @@ -5373,40 +5847,41 @@ msgstr "" "Il numero di posizioni non può essere inferiore al numero di porte frontali " "mappate ({frontport_count})" -#: dcim/models/device_components.py:1120 +#: netbox/dcim/models/device_components.py:1120 msgid "module bay" msgstr "alloggiamento per moduli" -#: dcim/models/device_components.py:1121 +#: netbox/dcim/models/device_components.py:1121 msgid "module bays" msgstr "alloggiamenti per moduli" -#: dcim/models/device_components.py:1138 dcim/models/devices.py:1224 +#: netbox/dcim/models/device_components.py:1138 +#: netbox/dcim/models/devices.py:1224 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." -#: dcim/models/device_components.py:1164 +#: netbox/dcim/models/device_components.py:1164 msgid "device bay" msgstr "alloggiamento per dispositivi" -#: dcim/models/device_components.py:1165 +#: netbox/dcim/models/device_components.py:1165 msgid "device bays" msgstr "alloggiamenti per dispositivi" -#: dcim/models/device_components.py:1175 +#: netbox/dcim/models/device_components.py:1175 #, 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." -#: dcim/models/device_components.py:1181 +#: netbox/dcim/models/device_components.py:1181 msgid "Cannot install a device into itself." msgstr "Impossibile installare un dispositivo su se stesso." -#: dcim/models/device_components.py:1189 +#: netbox/dcim/models/device_components.py:1189 #, python-brace-format msgid "" "Cannot install the specified device; device is already installed in {bay}." @@ -5414,118 +5889,120 @@ msgstr "" "Impossibile installare il dispositivo specificato; il dispositivo è già " "installato in {bay}." -#: dcim/models/device_components.py:1210 +#: netbox/dcim/models/device_components.py:1210 msgid "inventory item role" msgstr "ruolo dell'articolo di inventario" -#: dcim/models/device_components.py:1211 +#: netbox/dcim/models/device_components.py:1211 msgid "inventory item roles" msgstr "ruoli degli articoli di inventario" -#: dcim/models/device_components.py:1268 dcim/models/devices.py:607 -#: dcim/models/devices.py:1181 dcim/models/racks.py:313 -#: virtualization/models/virtualmachines.py:131 +#: 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 msgid "serial number" msgstr "numero di serie" -#: dcim/models/device_components.py:1276 dcim/models/devices.py:615 -#: dcim/models/devices.py:1188 dcim/models/racks.py:320 +#: 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 msgid "asset tag" msgstr "etichetta dell'asset" -#: dcim/models/device_components.py:1277 +#: netbox/dcim/models/device_components.py:1277 msgid "A unique tag used to identify this item" msgstr "Un tag univoco utilizzato per identificare questo articolo" -#: dcim/models/device_components.py:1280 +#: netbox/dcim/models/device_components.py:1280 msgid "discovered" msgstr "scoperto" -#: dcim/models/device_components.py:1282 +#: netbox/dcim/models/device_components.py:1282 msgid "This item was automatically discovered" msgstr "Questo articolo è stato scoperto automaticamente" -#: dcim/models/device_components.py:1300 +#: netbox/dcim/models/device_components.py:1300 msgid "inventory item" msgstr "articolo di inventario" -#: dcim/models/device_components.py:1301 +#: netbox/dcim/models/device_components.py:1301 msgid "inventory items" msgstr "articoli di inventario" -#: dcim/models/device_components.py:1312 +#: netbox/dcim/models/device_components.py:1312 msgid "Cannot assign self as parent." msgstr "Non può assegnarsi come genitore." -#: dcim/models/device_components.py:1320 +#: netbox/dcim/models/device_components.py:1320 msgid "Parent inventory item does not belong to the same device." msgstr "" "L'articolo dell'inventario principale non appartiene allo stesso " "dispositivo." -#: dcim/models/device_components.py:1326 +#: netbox/dcim/models/device_components.py:1326 msgid "Cannot move an inventory item with dependent children" msgstr "Impossibile spostare un articolo dell'inventario con figli a carico" -#: dcim/models/device_components.py:1334 +#: netbox/dcim/models/device_components.py:1334 msgid "Cannot assign inventory item to component on another device" msgstr "" "Impossibile assegnare un articolo di inventario a un componente su un altro " "dispositivo" -#: dcim/models/devices.py:54 +#: netbox/dcim/models/devices.py:54 msgid "manufacturer" msgstr "produttore" -#: dcim/models/devices.py:55 +#: netbox/dcim/models/devices.py:55 msgid "manufacturers" msgstr "produttori" -#: dcim/models/devices.py:82 dcim/models/devices.py:382 -#: dcim/models/racks.py:133 +#: netbox/dcim/models/devices.py:82 netbox/dcim/models/devices.py:382 +#: netbox/dcim/models/racks.py:133 msgid "model" msgstr "modello" -#: dcim/models/devices.py:95 +#: netbox/dcim/models/devices.py:95 msgid "default platform" msgstr "piattaforma predefinita" -#: dcim/models/devices.py:98 dcim/models/devices.py:386 +#: netbox/dcim/models/devices.py:98 netbox/dcim/models/devices.py:386 msgid "part number" msgstr "numero del pezzo" -#: dcim/models/devices.py:101 dcim/models/devices.py:389 +#: netbox/dcim/models/devices.py:101 netbox/dcim/models/devices.py:389 msgid "Discrete part number (optional)" msgstr "Numero di parte discreto (opzionale)" -#: dcim/models/devices.py:107 dcim/models/racks.py:54 +#: netbox/dcim/models/devices.py:107 netbox/dcim/models/racks.py:54 msgid "height (U)" msgstr "altezza (U)" -#: dcim/models/devices.py:111 +#: netbox/dcim/models/devices.py:111 msgid "exclude from utilization" msgstr "escludere dall'utilizzo" -#: dcim/models/devices.py:112 +#: netbox/dcim/models/devices.py:112 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." -#: dcim/models/devices.py:116 +#: netbox/dcim/models/devices.py:116 msgid "is full depth" msgstr "è a piena profondità" -#: dcim/models/devices.py:117 +#: netbox/dcim/models/devices.py:117 msgid "Device consumes both front and rear rack faces." msgstr "" "Il dispositivo consuma entrambe le facce del rack anteriore e posteriore." -#: dcim/models/devices.py:123 +#: netbox/dcim/models/devices.py:123 msgid "parent/child status" msgstr "stato genitore/figlio" -#: dcim/models/devices.py:124 +#: netbox/dcim/models/devices.py:124 msgid "" "Parent devices house child devices in device bays. Leave blank if this " "device type is neither a parent nor a child." @@ -5534,24 +6011,24 @@ msgstr "" "alloggiamenti dei dispositivi. Lascia vuoto se questo tipo di dispositivo " "non è né un genitore né un bambino." -#: dcim/models/devices.py:128 dcim/models/devices.py:392 -#: dcim/models/devices.py:659 dcim/models/racks.py:324 +#: netbox/dcim/models/devices.py:128 netbox/dcim/models/devices.py:392 +#: netbox/dcim/models/devices.py:659 netbox/dcim/models/racks.py:324 msgid "airflow" msgstr "flusso d'aria" -#: dcim/models/devices.py:204 +#: netbox/dcim/models/devices.py:204 msgid "device type" msgstr "tipo di dispositivo" -#: dcim/models/devices.py:205 +#: netbox/dcim/models/devices.py:205 msgid "device types" msgstr "tipi di dispositivi" -#: dcim/models/devices.py:290 +#: netbox/dcim/models/devices.py:290 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." -#: dcim/models/devices.py:307 +#: netbox/dcim/models/devices.py:307 #, python-brace-format msgid "" "Device {device} in rack {rack} does not have sufficient space to accommodate" @@ -5560,7 +6037,7 @@ msgstr "" "Dispositivo {device} nella cremagliera {rack} non dispone di spazio " "sufficiente per ospitare un'altezza di {height}U" -#: dcim/models/devices.py:322 +#: netbox/dcim/models/devices.py:322 #, python-brace-format msgid "" "Unable to set 0U height: Found {racked_instance_count} " @@ -5570,7 +6047,7 @@ msgstr "" "href=\"{url}\">{racked_instance_count} casi già montato all'interno di " "rack." -#: dcim/models/devices.py:331 +#: netbox/dcim/models/devices.py:331 msgid "" "Must delete all device bay templates associated with this device before " "declassifying it as a parent device." @@ -5579,155 +6056,155 @@ msgstr "" "associati a questo dispositivo prima di declassificarlo come dispositivo " "principale." -#: dcim/models/devices.py:337 +#: netbox/dcim/models/devices.py:337 msgid "Child device types must be 0U." msgstr "I tipi di dispositivi per bambini devono essere 0U." -#: dcim/models/devices.py:411 +#: netbox/dcim/models/devices.py:411 msgid "module type" msgstr "tipo di modulo" -#: dcim/models/devices.py:412 +#: netbox/dcim/models/devices.py:412 msgid "module types" msgstr "tipi di moduli" -#: dcim/models/devices.py:485 +#: netbox/dcim/models/devices.py:485 msgid "Virtual machines may be assigned to this role" msgstr "Le macchine virtuali possono essere assegnate a questo ruolo" -#: dcim/models/devices.py:497 +#: netbox/dcim/models/devices.py:497 msgid "device role" msgstr "ruolo del dispositivo" -#: dcim/models/devices.py:498 +#: netbox/dcim/models/devices.py:498 msgid "device roles" msgstr "ruoli dei dispositivi" -#: dcim/models/devices.py:515 +#: netbox/dcim/models/devices.py:515 msgid "Optionally limit this platform to devices of a certain manufacturer" msgstr "" "Facoltativamente, limita questa piattaforma ai dispositivi di un determinato" " produttore" -#: dcim/models/devices.py:527 +#: netbox/dcim/models/devices.py:527 msgid "platform" msgstr "piattaforma" -#: dcim/models/devices.py:528 +#: netbox/dcim/models/devices.py:528 msgid "platforms" msgstr "piattaforme" -#: dcim/models/devices.py:576 +#: netbox/dcim/models/devices.py:576 msgid "The function this device serves" msgstr "La funzione utilizzata da questo dispositivo" -#: dcim/models/devices.py:608 +#: netbox/dcim/models/devices.py:608 msgid "Chassis serial number, assigned by the manufacturer" msgstr "Numero di serie del telaio, assegnato dal produttore" -#: dcim/models/devices.py:616 dcim/models/devices.py:1189 +#: netbox/dcim/models/devices.py:616 netbox/dcim/models/devices.py:1189 msgid "A unique tag used to identify this device" msgstr "Un tag univoco utilizzato per identificare questo dispositivo" -#: dcim/models/devices.py:643 +#: netbox/dcim/models/devices.py:643 msgid "position (U)" msgstr "posizione (U)" -#: dcim/models/devices.py:650 +#: netbox/dcim/models/devices.py:650 msgid "rack face" msgstr "faccia cremagliera" -#: dcim/models/devices.py:670 dcim/models/devices.py:1415 -#: virtualization/models/virtualmachines.py:100 +#: netbox/dcim/models/devices.py:670 netbox/dcim/models/devices.py:1420 +#: netbox/virtualization/models/virtualmachines.py:100 msgid "primary IPv4" msgstr "IPv4 primario" -#: dcim/models/devices.py:678 dcim/models/devices.py:1423 -#: virtualization/models/virtualmachines.py:108 +#: netbox/dcim/models/devices.py:678 netbox/dcim/models/devices.py:1428 +#: netbox/virtualization/models/virtualmachines.py:108 msgid "primary IPv6" msgstr "IPv6 primario" -#: dcim/models/devices.py:686 +#: netbox/dcim/models/devices.py:686 msgid "out-of-band IP" msgstr "IP fuori banda" -#: dcim/models/devices.py:703 +#: netbox/dcim/models/devices.py:703 msgid "VC position" msgstr "Posizione VC" -#: dcim/models/devices.py:706 +#: netbox/dcim/models/devices.py:706 msgid "Virtual chassis position" msgstr "Posizione virtuale dello chassis" -#: dcim/models/devices.py:709 +#: netbox/dcim/models/devices.py:709 msgid "VC priority" msgstr "Priorità VC" -#: dcim/models/devices.py:713 +#: netbox/dcim/models/devices.py:713 msgid "Virtual chassis master election priority" msgstr "Priorità di elezione del master dello chassis virtuale" -#: dcim/models/devices.py:716 dcim/models/sites.py:207 +#: netbox/dcim/models/devices.py:716 netbox/dcim/models/sites.py:207 msgid "latitude" msgstr "latitudine" -#: dcim/models/devices.py:721 dcim/models/devices.py:729 -#: dcim/models/sites.py:212 dcim/models/sites.py:220 +#: netbox/dcim/models/devices.py:721 netbox/dcim/models/devices.py:729 +#: netbox/dcim/models/sites.py:212 netbox/dcim/models/sites.py:220 msgid "GPS coordinate in decimal format (xx.yyyyyy)" msgstr "Coordinate GPS in formato decimale (xx.yyyyyy)" -#: dcim/models/devices.py:724 dcim/models/sites.py:215 +#: netbox/dcim/models/devices.py:724 netbox/dcim/models/sites.py:215 msgid "longitude" msgstr "longitudine" -#: dcim/models/devices.py:797 +#: netbox/dcim/models/devices.py:797 msgid "Device name must be unique per site." msgstr "Il nome del dispositivo deve essere univoco per sito." -#: dcim/models/devices.py:808 ipam/models/services.py:75 +#: netbox/dcim/models/devices.py:808 netbox/ipam/models/services.py:75 msgid "device" msgstr "dispositivo" -#: dcim/models/devices.py:809 +#: netbox/dcim/models/devices.py:809 msgid "devices" msgstr "dispositivi" -#: dcim/models/devices.py:835 +#: netbox/dcim/models/devices.py:835 #, python-brace-format msgid "Rack {rack} does not belong to site {site}." msgstr "cremagliera {rack} non appartiene al sito {site}." -#: dcim/models/devices.py:840 +#: netbox/dcim/models/devices.py:840 #, python-brace-format msgid "Location {location} does not belong to site {site}." msgstr "Posizione {location} non appartiene al sito {site}." -#: dcim/models/devices.py:846 +#: netbox/dcim/models/devices.py:846 #, python-brace-format msgid "Rack {rack} does not belong to location {location}." msgstr "cremagliera {rack} non appartiene alla località {location}." -#: dcim/models/devices.py:853 +#: netbox/dcim/models/devices.py:853 msgid "Cannot select a rack face without assigning a rack." msgstr "" "Non è possibile selezionare una faccia del rack senza assegnare un rack." -#: dcim/models/devices.py:857 +#: netbox/dcim/models/devices.py:857 msgid "Cannot select a rack position without assigning a rack." msgstr "" "Non è possibile selezionare una posizione del rack senza assegnare un rack." -#: dcim/models/devices.py:863 +#: netbox/dcim/models/devices.py:863 msgid "Position must be in increments of 0.5 rack units." msgstr "La posizione deve essere in incrementi di 0,5 unità rack." -#: dcim/models/devices.py:867 +#: netbox/dcim/models/devices.py:867 msgid "Must specify rack face when defining rack position." msgstr "" "È necessario specificare la faccia del rack quando si definisce la posizione" " del rack." -#: dcim/models/devices.py:875 +#: netbox/dcim/models/devices.py:875 #, python-brace-format msgid "" "A 0U device type ({device_type}) cannot be assigned to a rack position." @@ -5735,7 +6212,7 @@ msgstr "" "Un tipo di dispositivo 0U ({device_type}) non può essere assegnato a una " "posizione nel rack." -#: dcim/models/devices.py:886 +#: netbox/dcim/models/devices.py:886 msgid "" "Child device types cannot be assigned to a rack face. This is an attribute " "of the parent device." @@ -5743,7 +6220,7 @@ msgstr "" "I tipi di dispositivi per bambini non possono essere assegnati a un rack. " "Questo è un attributo del dispositivo principale." -#: dcim/models/devices.py:893 +#: netbox/dcim/models/devices.py:893 msgid "" "Child device types cannot be assigned to a rack position. This is an " "attribute of the parent device." @@ -5751,7 +6228,7 @@ msgstr "" "I tipi di dispositivi per bambini non possono essere assegnati a una " "posizione rack. Questo è un attributo del dispositivo principale." -#: dcim/models/devices.py:907 +#: netbox/dcim/models/devices.py:907 #, python-brace-format msgid "" "U{position} is already occupied or does not have sufficient space to " @@ -5760,23 +6237,23 @@ msgstr "" "U{position} è già occupato o non dispone di spazio sufficiente per ospitare " "questo tipo di dispositivo: {device_type} ({u_height}U)" -#: dcim/models/devices.py:922 +#: netbox/dcim/models/devices.py:922 #, python-brace-format msgid "{ip} is not an IPv4 address." msgstr "{ip} non è un indirizzo IPv4." -#: dcim/models/devices.py:931 dcim/models/devices.py:946 +#: netbox/dcim/models/devices.py:931 netbox/dcim/models/devices.py:946 #, 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." -#: dcim/models/devices.py:937 +#: netbox/dcim/models/devices.py:937 #, python-brace-format msgid "{ip} is not an IPv6 address." msgstr "{ip} non è un indirizzo IPv6." -#: dcim/models/devices.py:964 +#: netbox/dcim/models/devices.py:964 #, python-brace-format msgid "" "The assigned platform is limited to {platform_manufacturer} device types, " @@ -5786,18 +6263,18 @@ msgstr "" "dispositivo, ma il tipo di questo dispositivo appartiene a " "{devicetype_manufacturer}." -#: dcim/models/devices.py:975 +#: netbox/dcim/models/devices.py:975 #, python-brace-format msgid "The assigned cluster belongs to a different site ({site})" msgstr "Il cluster assegnato appartiene a un sito diverso ({site})" -#: dcim/models/devices.py:983 +#: netbox/dcim/models/devices.py:983 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 " "definita." -#: dcim/models/devices.py:988 +#: netbox/dcim/models/devices.py:988 #, python-brace-format msgid "" "Device cannot be removed from virtual chassis {virtual_chassis} because it " @@ -5806,15 +6283,15 @@ msgstr "" "Il dispositivo non può essere rimosso dallo chassis virtuale " "{virtual_chassis} perché attualmente è designato come suo padrone." -#: dcim/models/devices.py:1196 +#: netbox/dcim/models/devices.py:1196 msgid "module" msgstr "modulo" -#: dcim/models/devices.py:1197 +#: netbox/dcim/models/devices.py:1197 msgid "modules" msgstr "moduli" -#: dcim/models/devices.py:1213 +#: netbox/dcim/models/devices.py:1213 #, python-brace-format msgid "" "Module must be installed within a module bay belonging to the assigned " @@ -5823,22 +6300,22 @@ msgstr "" "Il modulo deve essere installato all'interno di un vano del modulo " "appartenente al dispositivo assegnato ({device})." -#: dcim/models/devices.py:1334 +#: netbox/dcim/models/devices.py:1339 msgid "domain" msgstr "dominio" -#: dcim/models/devices.py:1347 dcim/models/devices.py:1348 +#: netbox/dcim/models/devices.py:1352 netbox/dcim/models/devices.py:1353 msgid "virtual chassis" msgstr "chassis virtuale" -#: dcim/models/devices.py:1363 +#: netbox/dcim/models/devices.py:1368 #, 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." -#: dcim/models/devices.py:1379 +#: netbox/dcim/models/devices.py:1384 #, python-brace-format msgid "" "Unable to delete virtual chassis {self}. There are member interfaces which " @@ -5847,105 +6324,105 @@ msgstr "" "Impossibile eliminare lo chassis virtuale {self}. Esistono interfacce tra i " "membri che formano interfacce GAL trasversali." -#: dcim/models/devices.py:1404 vpn/models/l2vpn.py:37 +#: netbox/dcim/models/devices.py:1409 netbox/vpn/models/l2vpn.py:37 msgid "identifier" msgstr "identificatore" -#: dcim/models/devices.py:1405 +#: netbox/dcim/models/devices.py:1410 msgid "Numeric identifier unique to the parent device" msgstr "Identificatore numerico univoco per il dispositivo principale" -#: dcim/models/devices.py:1433 extras/models/customfields.py:225 -#: extras/models/models.py:107 extras/models/models.py:694 -#: netbox/models/__init__.py:115 +#: 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:115 msgid "comments" msgstr "commenti" -#: dcim/models/devices.py:1449 +#: netbox/dcim/models/devices.py:1454 msgid "virtual device context" msgstr "contesto del dispositivo virtuale" -#: dcim/models/devices.py:1450 +#: netbox/dcim/models/devices.py:1455 msgid "virtual device contexts" msgstr "contesti dei dispositivi virtuali" -#: dcim/models/devices.py:1482 +#: netbox/dcim/models/devices.py:1487 #, python-brace-format msgid "{ip} is not an IPv{family} address." msgstr "{ip} non è un IPv{family} indirizzo." -#: dcim/models/devices.py:1488 +#: netbox/dcim/models/devices.py:1493 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." -#: dcim/models/mixins.py:15 extras/models/configs.py:41 -#: extras/models/models.py:313 extras/models/models.py:522 -#: extras/models/search.py:48 ipam/models/ip.py:194 +#: netbox/dcim/models/mixins.py:15 netbox/extras/models/configs.py:41 +#: netbox/extras/models/models.py:313 netbox/extras/models/models.py:522 +#: netbox/extras/models/search.py:48 netbox/ipam/models/ip.py:194 msgid "weight" msgstr "peso" -#: dcim/models/mixins.py:22 +#: netbox/dcim/models/mixins.py:22 msgid "weight unit" msgstr "unità di peso" -#: dcim/models/mixins.py:51 +#: 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" -#: dcim/models/power.py:55 +#: netbox/dcim/models/power.py:55 msgid "power panel" msgstr "pannello di alimentazione" -#: dcim/models/power.py:56 +#: netbox/dcim/models/power.py:56 msgid "power panels" msgstr "pannelli di alimentazione" -#: dcim/models/power.py:70 +#: netbox/dcim/models/power.py:70 #, python-brace-format msgid "" "Location {location} ({location_site}) is in a different site than {site}" msgstr "" "Posizione {location} ({location_site}) si trova in un sito diverso da {site}" -#: dcim/models/power.py:108 +#: netbox/dcim/models/power.py:108 msgid "supply" msgstr "approvvigionamento" -#: dcim/models/power.py:114 +#: netbox/dcim/models/power.py:114 msgid "phase" msgstr "fase" -#: dcim/models/power.py:120 +#: netbox/dcim/models/power.py:120 msgid "voltage" msgstr "voltaggio" -#: dcim/models/power.py:125 +#: netbox/dcim/models/power.py:125 msgid "amperage" msgstr "amperaggio" -#: dcim/models/power.py:130 +#: netbox/dcim/models/power.py:130 msgid "max utilization" msgstr "utilizzo massimo" -#: dcim/models/power.py:133 +#: netbox/dcim/models/power.py:133 msgid "Maximum permissible draw (percentage)" msgstr "Estrazione massima consentita (percentuale)" -#: dcim/models/power.py:136 +#: netbox/dcim/models/power.py:136 msgid "available power" msgstr "potenza disponibile" -#: dcim/models/power.py:164 +#: netbox/dcim/models/power.py:164 msgid "power feed" msgstr "alimentazione" -#: dcim/models/power.py:165 +#: netbox/dcim/models/power.py:165 msgid "power feeds" msgstr "alimentazioni" -#: dcim/models/power.py:179 +#: netbox/dcim/models/power.py:179 #, python-brace-format msgid "" "Rack {rack} ({rack_site}) and power panel {powerpanel} ({powerpanel_site}) " @@ -5954,63 +6431,63 @@ msgstr "" "cremagliera {rack} ({rack_site}) e pannello di alimentazione {powerpanel} " "({powerpanel_site}) si trovano in siti diversi." -#: dcim/models/power.py:190 +#: netbox/dcim/models/power.py:190 msgid "Voltage cannot be negative for AC supply" msgstr "La tensione non può essere negativa per l'alimentazione AC" -#: dcim/models/racks.py:47 +#: netbox/dcim/models/racks.py:47 msgid "width" msgstr "larghezza" -#: dcim/models/racks.py:48 +#: netbox/dcim/models/racks.py:48 msgid "Rail-to-rail width" msgstr "Larghezza da rotaia a rotaia" -#: dcim/models/racks.py:56 +#: netbox/dcim/models/racks.py:56 msgid "Height in rack units" msgstr "Altezza nelle unità rack" -#: dcim/models/racks.py:60 +#: netbox/dcim/models/racks.py:60 msgid "starting unit" msgstr "unità di partenza" -#: dcim/models/racks.py:62 +#: netbox/dcim/models/racks.py:62 msgid "Starting unit for rack" msgstr "Unità di partenza per cremagliera" -#: dcim/models/racks.py:66 +#: netbox/dcim/models/racks.py:66 msgid "descending units" msgstr "unità discendenti" -#: dcim/models/racks.py:67 +#: netbox/dcim/models/racks.py:67 msgid "Units are numbered top-to-bottom" msgstr "Le unità sono numerate dall'alto verso il basso" -#: dcim/models/racks.py:72 +#: netbox/dcim/models/racks.py:72 msgid "outer width" msgstr "larghezza esterna" -#: dcim/models/racks.py:75 +#: netbox/dcim/models/racks.py:75 msgid "Outer dimension of rack (width)" msgstr "Dimensione esterna del rack (larghezza)" -#: dcim/models/racks.py:78 +#: netbox/dcim/models/racks.py:78 msgid "outer depth" msgstr "profondità esterna" -#: dcim/models/racks.py:81 +#: netbox/dcim/models/racks.py:81 msgid "Outer dimension of rack (depth)" msgstr "Dimensione esterna del rack (profondità)" -#: dcim/models/racks.py:84 +#: netbox/dcim/models/racks.py:84 msgid "outer unit" msgstr "unità esterna" -#: dcim/models/racks.py:90 +#: netbox/dcim/models/racks.py:90 msgid "mounting depth" msgstr "profondità di montaggio" -#: dcim/models/racks.py:94 +#: netbox/dcim/models/racks.py:94 msgid "" "Maximum depth of a mounted device, in millimeters. For four-post racks, this" " is the distance between the front and rear rails." @@ -6018,76 +6495,77 @@ msgstr "" "Profondità massima di un dispositivo montato, in millimetri. Per i rack a " "quattro montanti, questa è la distanza tra le guide anteriore e posteriore." -#: dcim/models/racks.py:102 +#: netbox/dcim/models/racks.py:102 msgid "max weight" msgstr "peso massimo" -#: dcim/models/racks.py:105 +#: netbox/dcim/models/racks.py:105 msgid "Maximum load capacity for the rack" msgstr "Capacità di carico massima per il rack" -#: dcim/models/racks.py:125 dcim/models/racks.py:252 +#: netbox/dcim/models/racks.py:125 netbox/dcim/models/racks.py:252 msgid "form factor" msgstr "fattore di forma" -#: dcim/models/racks.py:162 +#: netbox/dcim/models/racks.py:162 msgid "rack type" msgstr "tipo di rack" -#: dcim/models/racks.py:163 +#: netbox/dcim/models/racks.py:163 msgid "rack types" msgstr "tipi di rack" -#: dcim/models/racks.py:180 dcim/models/racks.py:379 +#: netbox/dcim/models/racks.py:180 netbox/dcim/models/racks.py:379 msgid "Must specify a unit when setting an outer width/depth" msgstr "" "È necessario specificare un'unità quando si imposta una larghezza/profondità" " esterna" -#: dcim/models/racks.py:184 dcim/models/racks.py:383 +#: netbox/dcim/models/racks.py:184 netbox/dcim/models/racks.py:383 msgid "Must specify a unit when setting a maximum weight" msgstr "È necessario specificare un'unità quando si imposta un peso massimo" -#: dcim/models/racks.py:230 +#: netbox/dcim/models/racks.py:230 msgid "rack role" msgstr "ruolo rack" -#: dcim/models/racks.py:231 +#: netbox/dcim/models/racks.py:231 msgid "rack roles" msgstr "ruoli rack" -#: dcim/models/racks.py:274 +#: netbox/dcim/models/racks.py:274 msgid "facility ID" msgstr "ID struttura" -#: dcim/models/racks.py:275 +#: netbox/dcim/models/racks.py:275 msgid "Locally-assigned identifier" msgstr "Identificatore assegnato localmente" -#: dcim/models/racks.py:308 ipam/forms/bulk_import.py:201 -#: ipam/forms/bulk_import.py:266 ipam/forms/bulk_import.py:301 -#: ipam/forms/bulk_import.py:459 virtualization/forms/bulk_import.py:112 +#: 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 msgid "Functional role" msgstr "Ruolo funzionale" -#: dcim/models/racks.py:321 +#: netbox/dcim/models/racks.py:321 msgid "A unique tag used to identify this rack" msgstr "Un tag univoco utilizzato per identificare questo rack" -#: dcim/models/racks.py:359 +#: netbox/dcim/models/racks.py:359 msgid "rack" msgstr "scaffale" -#: dcim/models/racks.py:360 +#: netbox/dcim/models/racks.py:360 msgid "racks" msgstr "griglie" -#: dcim/models/racks.py:375 +#: netbox/dcim/models/racks.py:375 #, python-brace-format msgid "Assigned location must belong to parent site ({site})." msgstr "La posizione assegnata deve appartenere al sito principale ({site})." -#: dcim/models/racks.py:393 +#: netbox/dcim/models/racks.py:393 #, python-brace-format msgid "" "Rack must be at least {min_height}U tall to house currently installed " @@ -6096,7 +6574,7 @@ msgstr "" "Il rack deve essere almeno {min_height}Parlo per ospitare i dispositivi " "attualmente installati." -#: dcim/models/racks.py:400 +#: netbox/dcim/models/racks.py:400 #, python-brace-format msgid "" "Rack unit numbering must begin at {position} or less to house currently " @@ -6105,895 +6583,957 @@ msgstr "" "La numerazione delle unità rack deve iniziare da {position} o meno per " "ospitare i dispositivi attualmente installati." -#: dcim/models/racks.py:408 +#: netbox/dcim/models/racks.py:408 #, python-brace-format msgid "Location must be from the same site, {site}." msgstr "La posizione deve provenire dallo stesso sito, {site}." -#: dcim/models/racks.py:670 +#: netbox/dcim/models/racks.py:670 msgid "units" msgstr "unità" -#: dcim/models/racks.py:696 +#: netbox/dcim/models/racks.py:696 msgid "rack reservation" msgstr "prenotazione del rack" -#: dcim/models/racks.py:697 +#: netbox/dcim/models/racks.py:697 msgid "rack reservations" msgstr "Tieni traccia delle prenotazioni" -#: dcim/models/racks.py:714 +#: netbox/dcim/models/racks.py:714 #, python-brace-format msgid "Invalid unit(s) for {height}U rack: {unit_list}" msgstr "Unità non valide per {height}Rack U: {unit_list}" -#: dcim/models/racks.py:727 +#: netbox/dcim/models/racks.py:727 #, python-brace-format msgid "The following units have already been reserved: {unit_list}" msgstr "Le seguenti unità sono già state prenotate: {unit_list}" -#: dcim/models/sites.py:49 +#: netbox/dcim/models/sites.py:49 msgid "A top-level region with this name already exists." msgstr "Esiste già una regione di primo livello con questo nome." -#: dcim/models/sites.py:59 +#: netbox/dcim/models/sites.py:59 msgid "A top-level region with this slug already exists." msgstr "Esiste già una regione di primo livello con questo slug." -#: dcim/models/sites.py:62 +#: netbox/dcim/models/sites.py:62 msgid "region" msgstr "regione" -#: dcim/models/sites.py:63 +#: netbox/dcim/models/sites.py:63 msgid "regions" msgstr "regioni" -#: dcim/models/sites.py:102 +#: netbox/dcim/models/sites.py:102 msgid "A top-level site group with this name already exists." msgstr "Esiste già un gruppo del sito principale con questo nome." -#: dcim/models/sites.py:112 +#: netbox/dcim/models/sites.py:112 msgid "A top-level site group with this slug already exists." msgstr "Esiste già un gruppo del sito di primo livello con questo slug." -#: dcim/models/sites.py:115 +#: netbox/dcim/models/sites.py:115 msgid "site group" msgstr "gruppo del sito" -#: dcim/models/sites.py:116 +#: netbox/dcim/models/sites.py:116 msgid "site groups" msgstr "gruppi del sito" -#: dcim/models/sites.py:141 +#: netbox/dcim/models/sites.py:141 msgid "Full name of the site" msgstr "Nome completo del sito" -#: dcim/models/sites.py:181 dcim/models/sites.py:279 +#: netbox/dcim/models/sites.py:181 netbox/dcim/models/sites.py:279 msgid "facility" msgstr "servizio, struttura" -#: dcim/models/sites.py:184 dcim/models/sites.py:282 +#: netbox/dcim/models/sites.py:184 netbox/dcim/models/sites.py:282 msgid "Local facility ID or description" msgstr "ID o descrizione della struttura locale" -#: dcim/models/sites.py:195 +#: netbox/dcim/models/sites.py:195 msgid "physical address" msgstr "indirizzo fisico" -#: dcim/models/sites.py:198 +#: netbox/dcim/models/sites.py:198 msgid "Physical location of the building" msgstr "Ubicazione fisica dell'edificio" -#: dcim/models/sites.py:201 +#: netbox/dcim/models/sites.py:201 msgid "shipping address" msgstr "indirizzo di spedizione" -#: dcim/models/sites.py:204 +#: netbox/dcim/models/sites.py:204 msgid "If different from the physical address" msgstr "Se diverso dall'indirizzo fisico" -#: dcim/models/sites.py:238 +#: netbox/dcim/models/sites.py:238 msgid "site" msgstr "sito" -#: dcim/models/sites.py:239 +#: netbox/dcim/models/sites.py:239 msgid "sites" msgstr "siti" -#: dcim/models/sites.py:309 +#: netbox/dcim/models/sites.py:309 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." -#: dcim/models/sites.py:319 +#: netbox/dcim/models/sites.py:319 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." -#: dcim/models/sites.py:322 +#: netbox/dcim/models/sites.py:322 msgid "location" msgstr "posizione" -#: dcim/models/sites.py:323 +#: netbox/dcim/models/sites.py:323 msgid "locations" msgstr "posizioni" -#: dcim/models/sites.py:337 +#: netbox/dcim/models/sites.py:337 #, python-brace-format msgid "Parent location ({parent}) must belong to the same site ({site})." msgstr "" "Sede principale ({parent}) deve appartenere allo stesso sito ({site})." -#: dcim/tables/cables.py:55 +#: netbox/dcim/tables/cables.py:55 msgid "Termination A" msgstr "Terminazione A" -#: dcim/tables/cables.py:60 +#: netbox/dcim/tables/cables.py:60 msgid "Termination B" msgstr "Terminazione B" -#: dcim/tables/cables.py:66 wireless/tables/wirelesslink.py:23 +#: netbox/dcim/tables/cables.py:66 netbox/wireless/tables/wirelesslink.py:23 msgid "Device A" msgstr "Dispositivo A" -#: dcim/tables/cables.py:72 wireless/tables/wirelesslink.py:32 +#: netbox/dcim/tables/cables.py:72 netbox/wireless/tables/wirelesslink.py:32 msgid "Device B" msgstr "Dispositivo B" -#: dcim/tables/cables.py:78 +#: netbox/dcim/tables/cables.py:78 msgid "Location A" msgstr "Ubicazione A" -#: dcim/tables/cables.py:84 +#: netbox/dcim/tables/cables.py:84 msgid "Location B" msgstr "Luogo B" -#: dcim/tables/cables.py:90 +#: netbox/dcim/tables/cables.py:90 msgid "Rack A" msgstr "Cremagliera A" -#: dcim/tables/cables.py:96 +#: netbox/dcim/tables/cables.py:96 msgid "Rack B" msgstr "Cremagliera B" -#: dcim/tables/cables.py:102 +#: netbox/dcim/tables/cables.py:102 msgid "Site A" msgstr "Sito A" -#: dcim/tables/cables.py:108 +#: netbox/dcim/tables/cables.py:108 msgid "Site B" msgstr "Sito B" -#: dcim/tables/connections.py:31 dcim/tables/connections.py:50 -#: dcim/tables/connections.py:71 -#: templates/dcim/inc/connection_endpoints.html:16 +#: netbox/dcim/tables/connections.py:31 netbox/dcim/tables/connections.py:50 +#: netbox/dcim/tables/connections.py:71 +#: netbox/templates/dcim/inc/connection_endpoints.html:16 msgid "Reachable" msgstr "Raggiungibile" -#: dcim/tables/devices.py:58 dcim/tables/devices.py:106 -#: dcim/tables/racks.py:150 dcim/tables/sites.py:105 dcim/tables/sites.py:148 -#: extras/tables/tables.py:545 netbox/navigation/menu.py:69 -#: netbox/navigation/menu.py:73 netbox/navigation/menu.py:75 -#: virtualization/forms/model_forms.py:122 -#: virtualization/tables/clusters.py:83 virtualization/views.py:206 +#: 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/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 msgid "Devices" msgstr "Dispositivi" -#: dcim/tables/devices.py:63 dcim/tables/devices.py:111 -#: virtualization/tables/clusters.py:88 +#: netbox/dcim/tables/devices.py:63 netbox/dcim/tables/devices.py:111 +#: netbox/virtualization/tables/clusters.py:88 msgid "VMs" msgstr "VM" -#: dcim/tables/devices.py:100 dcim/tables/devices.py:216 -#: extras/forms/model_forms.py:630 templates/dcim/device.html:112 -#: templates/dcim/device/render_config.html:11 -#: templates/dcim/device/render_config.html:14 -#: templates/dcim/devicerole.html:44 templates/dcim/platform.html:41 -#: templates/extras/configtemplate.html:10 -#: templates/virtualization/virtualmachine.html:48 -#: templates/virtualization/virtualmachine/render_config.html:11 -#: templates/virtualization/virtualmachine/render_config.html:14 -#: virtualization/tables/virtualmachines.py:107 +#: netbox/dcim/tables/devices.py:100 netbox/dcim/tables/devices.py:216 +#: 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/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 msgid "Config Template" msgstr "Modello di configurazione" -#: dcim/tables/devices.py:150 templates/dcim/sitegroup.html:26 +#: netbox/dcim/tables/devices.py:150 netbox/templates/dcim/sitegroup.html:26 msgid "Site Group" msgstr "Gruppo del sito" -#: dcim/tables/devices.py:187 dcim/tables/devices.py:1068 -#: ipam/forms/bulk_import.py:503 ipam/forms/model_forms.py:306 -#: ipam/forms/model_forms.py:315 ipam/tables/ip.py:356 ipam/tables/ip.py:423 -#: ipam/tables/ip.py:446 templates/ipam/ipaddress.html:11 -#: virtualization/tables/virtualmachines.py:95 +#: 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/templates/ipam/ipaddress.html:11 +#: netbox/virtualization/tables/virtualmachines.py:95 msgid "IP Address" msgstr "Indirizzo IP" -#: dcim/tables/devices.py:191 dcim/tables/devices.py:1072 -#: virtualization/tables/virtualmachines.py:86 +#: netbox/dcim/tables/devices.py:191 netbox/dcim/tables/devices.py:1072 +#: netbox/virtualization/tables/virtualmachines.py:86 msgid "IPv4 Address" msgstr "Indirizzo IPv4" -#: dcim/tables/devices.py:195 dcim/tables/devices.py:1076 -#: virtualization/tables/virtualmachines.py:90 +#: netbox/dcim/tables/devices.py:195 netbox/dcim/tables/devices.py:1076 +#: netbox/virtualization/tables/virtualmachines.py:90 msgid "IPv6 Address" msgstr "Indirizzo IPv6" -#: dcim/tables/devices.py:210 +#: netbox/dcim/tables/devices.py:210 msgid "VC Position" msgstr "Posizione VC" -#: dcim/tables/devices.py:213 +#: netbox/dcim/tables/devices.py:213 msgid "VC Priority" msgstr "Priorità VC" -#: dcim/tables/devices.py:220 templates/dcim/device_edit.html:38 -#: templates/dcim/devicebay_populate.html:16 +#: netbox/dcim/tables/devices.py:220 netbox/templates/dcim/device_edit.html:38 +#: netbox/templates/dcim/devicebay_populate.html:16 msgid "Parent Device" msgstr "Dispositivo principale" -#: dcim/tables/devices.py:225 +#: netbox/dcim/tables/devices.py:225 msgid "Position (Device Bay)" msgstr "Posizione (vano dispositivo)" -#: dcim/tables/devices.py:234 +#: netbox/dcim/tables/devices.py:234 msgid "Console ports" msgstr "Porte console" -#: dcim/tables/devices.py:237 +#: netbox/dcim/tables/devices.py:237 msgid "Console server ports" msgstr "Porte console server" -#: dcim/tables/devices.py:240 +#: netbox/dcim/tables/devices.py:240 msgid "Power ports" msgstr "Porte di alimentazione" -#: dcim/tables/devices.py:243 +#: netbox/dcim/tables/devices.py:243 msgid "Power outlets" msgstr "Prese di corrente" -#: dcim/tables/devices.py:246 dcim/tables/devices.py:1081 -#: dcim/tables/devicetypes.py:128 dcim/views.py:1042 dcim/views.py:1281 -#: dcim/views.py:1977 netbox/navigation/menu.py:94 -#: netbox/navigation/menu.py:250 templates/dcim/device/base.html:37 -#: templates/dcim/device_list.html:43 templates/dcim/devicetype/base.html:34 -#: templates/dcim/inc/moduletype_buttons.html:25 templates/dcim/module.html:34 -#: templates/dcim/virtualdevicecontext.html:61 -#: templates/dcim/virtualdevicecontext.html:81 -#: templates/virtualization/virtualmachine/base.html:27 -#: templates/virtualization/virtualmachine_list.html:14 -#: virtualization/tables/virtualmachines.py:101 virtualization/views.py:366 -#: wireless/tables/wirelesslan.py:55 +#: 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/templates/dcim/device/base.html:37 +#: netbox/templates/dcim/device_list.html:43 +#: netbox/templates/dcim/devicetype/base.html:34 +#: netbox/templates/dcim/inc/moduletype_buttons.html:25 +#: netbox/templates/dcim/module.html:34 +#: netbox/templates/dcim/virtualdevicecontext.html:61 +#: netbox/templates/dcim/virtualdevicecontext.html:81 +#: netbox/templates/virtualization/virtualmachine/base.html:27 +#: netbox/templates/virtualization/virtualmachine_list.html:14 +#: netbox/virtualization/tables/virtualmachines.py:101 +#: netbox/virtualization/views.py:364 netbox/wireless/tables/wirelesslan.py:55 msgid "Interfaces" msgstr "Interfacce" -#: dcim/tables/devices.py:249 +#: netbox/dcim/tables/devices.py:249 msgid "Front ports" msgstr "Porte anteriori" -#: dcim/tables/devices.py:255 +#: netbox/dcim/tables/devices.py:255 msgid "Device bays" msgstr "Alloggiamenti per dispositivi" -#: dcim/tables/devices.py:258 +#: netbox/dcim/tables/devices.py:258 msgid "Module bays" msgstr "Alloggiamenti per moduli" -#: dcim/tables/devices.py:261 +#: netbox/dcim/tables/devices.py:261 msgid "Inventory items" msgstr "Articoli di inventario" -#: dcim/tables/devices.py:305 dcim/tables/modules.py:56 -#: templates/dcim/modulebay.html:17 +#: netbox/dcim/tables/devices.py:305 netbox/dcim/tables/modules.py:56 +#: netbox/templates/dcim/modulebay.html:17 msgid "Module Bay" msgstr "Modulo Bay" -#: dcim/tables/devices.py:318 dcim/tables/devicetypes.py:47 -#: dcim/tables/devicetypes.py:143 dcim/views.py:1117 dcim/views.py:2075 -#: netbox/navigation/menu.py:103 templates/dcim/device/base.html:52 -#: templates/dcim/device_list.html:71 templates/dcim/devicetype/base.html:49 -#: templates/dcim/inc/panels/inventory_items.html:6 -#: templates/dcim/inventoryitemrole.html:32 +#: netbox/dcim/tables/devices.py:318 netbox/dcim/tables/devicetypes.py:47 +#: netbox/dcim/tables/devicetypes.py:143 netbox/dcim/views.py:1115 +#: netbox/dcim/views.py:2073 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 +#: netbox/templates/dcim/inc/panels/inventory_items.html:6 +#: netbox/templates/dcim/inventoryitemrole.html:32 msgid "Inventory Items" msgstr "Articoli di inventario" -#: dcim/tables/devices.py:333 +#: netbox/dcim/tables/devices.py:333 msgid "Cable Color" msgstr "Colore del cavo" -#: dcim/tables/devices.py:339 +#: netbox/dcim/tables/devices.py:339 msgid "Link Peers" msgstr "Collegamento tra colleghi" -#: dcim/tables/devices.py:342 +#: netbox/dcim/tables/devices.py:342 msgid "Mark Connected" msgstr "Contrassegna connesso" -#: dcim/tables/devices.py:461 +#: netbox/dcim/tables/devices.py:461 msgid "Maximum draw (W)" msgstr "Assorbimento massimo (W)" -#: dcim/tables/devices.py:464 +#: netbox/dcim/tables/devices.py:464 msgid "Allocated draw (W)" msgstr "Pareggio assegnato (W)" -#: dcim/tables/devices.py:558 ipam/forms/model_forms.py:701 -#: ipam/tables/fhrp.py:28 ipam/views.py:596 ipam/views.py:696 -#: netbox/navigation/menu.py:158 netbox/navigation/menu.py:160 -#: templates/dcim/interface.html:339 templates/ipam/ipaddress_bulk_add.html:15 -#: templates/ipam/service.html:40 templates/virtualization/vminterface.html:85 -#: vpn/tables/tunnels.py:98 +#: netbox/dcim/tables/devices.py:558 netbox/ipam/forms/model_forms.py: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/templates/ipam/ipaddress_bulk_add.html:15 +#: netbox/templates/ipam/service.html:40 +#: netbox/templates/virtualization/vminterface.html:85 +#: netbox/vpn/tables/tunnels.py:98 msgid "IP Addresses" msgstr "Indirizzi IP" -#: dcim/tables/devices.py:564 netbox/navigation/menu.py:202 -#: templates/ipam/inc/panels/fhrp_groups.html:6 +#: netbox/dcim/tables/devices.py:564 netbox/netbox/navigation/menu.py:202 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:6 msgid "FHRP Groups" msgstr "Gruppi FHRP" -#: dcim/tables/devices.py:576 templates/dcim/interface.html:89 -#: templates/virtualization/vminterface.html:67 templates/vpn/tunnel.html:18 -#: templates/vpn/tunneltermination.html:13 vpn/forms/bulk_edit.py:76 -#: vpn/forms/bulk_import.py:76 vpn/forms/filtersets.py:42 -#: vpn/forms/filtersets.py:82 vpn/forms/model_forms.py:60 -#: vpn/forms/model_forms.py:145 vpn/tables/tunnels.py:78 +#: netbox/dcim/tables/devices.py:576 netbox/templates/dcim/interface.html:89 +#: netbox/templates/virtualization/vminterface.html:67 +#: netbox/templates/vpn/tunnel.html:18 +#: netbox/templates/vpn/tunneltermination.html:13 +#: netbox/vpn/forms/bulk_edit.py:76 netbox/vpn/forms/bulk_import.py:76 +#: netbox/vpn/forms/filtersets.py:42 netbox/vpn/forms/filtersets.py:82 +#: netbox/vpn/forms/model_forms.py:60 netbox/vpn/forms/model_forms.py:145 +#: netbox/vpn/tables/tunnels.py:78 msgid "Tunnel" msgstr "Tunnel" -#: dcim/tables/devices.py:604 dcim/tables/devicetypes.py:227 -#: templates/dcim/interface.html:65 +#: netbox/dcim/tables/devices.py:604 netbox/dcim/tables/devicetypes.py:227 +#: netbox/templates/dcim/interface.html:65 msgid "Management Only" msgstr "Solo gestione" -#: dcim/tables/devices.py:623 +#: netbox/dcim/tables/devices.py:623 msgid "VDCs" msgstr "VDC" -#: dcim/tables/devices.py:873 templates/dcim/modulebay.html:53 +#: netbox/dcim/tables/devices.py:873 netbox/templates/dcim/modulebay.html:53 msgid "Installed Module" msgstr "Modulo installato" -#: dcim/tables/devices.py:876 +#: netbox/dcim/tables/devices.py:876 msgid "Module Serial" msgstr "Modulo seriale" -#: dcim/tables/devices.py:880 +#: netbox/dcim/tables/devices.py:880 msgid "Module Asset Tag" msgstr "Tag delle risorse del modulo" -#: dcim/tables/devices.py:889 +#: netbox/dcim/tables/devices.py:889 msgid "Module Status" msgstr "Stato del modulo" -#: dcim/tables/devices.py:944 dcim/tables/devicetypes.py:312 -#: templates/dcim/inventoryitem.html:40 +#: netbox/dcim/tables/devices.py:944 netbox/dcim/tables/devicetypes.py:312 +#: netbox/templates/dcim/inventoryitem.html:40 msgid "Component" msgstr "Componente" -#: dcim/tables/devices.py:1000 +#: netbox/dcim/tables/devices.py:1000 msgid "Items" msgstr "Oggetti" -#: dcim/tables/devicetypes.py:37 netbox/navigation/menu.py:84 -#: netbox/navigation/menu.py:86 +#: netbox/dcim/tables/devicetypes.py:37 netbox/netbox/navigation/menu.py:84 +#: netbox/netbox/navigation/menu.py:86 msgid "Device Types" msgstr "Tipi di dispositivi" -#: dcim/tables/devicetypes.py:42 netbox/navigation/menu.py:87 +#: netbox/dcim/tables/devicetypes.py:42 netbox/netbox/navigation/menu.py:87 msgid "Module Types" msgstr "Tipi di moduli" -#: dcim/tables/devicetypes.py:52 extras/forms/filtersets.py:371 -#: extras/forms/model_forms.py:537 extras/tables/tables.py:540 -#: netbox/navigation/menu.py:78 +#: 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/netbox/navigation/menu.py:78 msgid "Platforms" msgstr "piattaforme" -#: dcim/tables/devicetypes.py:84 templates/dcim/devicetype.html:29 +#: netbox/dcim/tables/devicetypes.py:84 +#: netbox/templates/dcim/devicetype.html:29 msgid "Default Platform" msgstr "Piattaforma predefinita" -#: dcim/tables/devicetypes.py:88 templates/dcim/devicetype.html:45 +#: netbox/dcim/tables/devicetypes.py:88 +#: netbox/templates/dcim/devicetype.html:45 msgid "Full Depth" msgstr "Profondità completa" -#: dcim/tables/devicetypes.py:98 +#: netbox/dcim/tables/devicetypes.py:98 msgid "U Height" msgstr "Altezza U" -#: dcim/tables/devicetypes.py:113 dcim/tables/modules.py:26 -#: dcim/tables/racks.py:89 +#: netbox/dcim/tables/devicetypes.py:113 netbox/dcim/tables/modules.py:26 +#: netbox/dcim/tables/racks.py:89 msgid "Instances" msgstr "Istanze" -#: dcim/tables/devicetypes.py:116 dcim/views.py:982 dcim/views.py:1221 -#: dcim/views.py:1913 netbox/navigation/menu.py:97 -#: templates/dcim/device/base.html:25 templates/dcim/device_list.html:15 -#: templates/dcim/devicetype/base.html:22 -#: templates/dcim/inc/moduletype_buttons.html:13 templates/dcim/module.html:22 +#: netbox/dcim/tables/devicetypes.py:116 netbox/dcim/views.py:980 +#: netbox/dcim/views.py:1219 netbox/dcim/views.py:1911 +#: netbox/netbox/navigation/menu.py:97 +#: netbox/templates/dcim/device/base.html:25 +#: netbox/templates/dcim/device_list.html:15 +#: netbox/templates/dcim/devicetype/base.html:22 +#: netbox/templates/dcim/inc/moduletype_buttons.html:13 +#: netbox/templates/dcim/module.html:22 msgid "Console Ports" msgstr "Porte console" -#: dcim/tables/devicetypes.py:119 dcim/views.py:997 dcim/views.py:1236 -#: dcim/views.py:1929 netbox/navigation/menu.py:98 -#: templates/dcim/device/base.html:28 templates/dcim/device_list.html:22 -#: templates/dcim/devicetype/base.html:25 -#: templates/dcim/inc/moduletype_buttons.html:16 templates/dcim/module.html:25 +#: netbox/dcim/tables/devicetypes.py:119 netbox/dcim/views.py:995 +#: netbox/dcim/views.py:1234 netbox/dcim/views.py:1927 +#: netbox/netbox/navigation/menu.py:98 +#: netbox/templates/dcim/device/base.html:28 +#: netbox/templates/dcim/device_list.html:22 +#: netbox/templates/dcim/devicetype/base.html:25 +#: netbox/templates/dcim/inc/moduletype_buttons.html:16 +#: netbox/templates/dcim/module.html:25 msgid "Console Server Ports" msgstr "Porte Console Server" -#: dcim/tables/devicetypes.py:122 dcim/views.py:1012 dcim/views.py:1251 -#: dcim/views.py:1945 netbox/navigation/menu.py:99 -#: templates/dcim/device/base.html:31 templates/dcim/device_list.html:29 -#: templates/dcim/devicetype/base.html:28 -#: templates/dcim/inc/moduletype_buttons.html:19 templates/dcim/module.html:28 +#: netbox/dcim/tables/devicetypes.py:122 netbox/dcim/views.py:1010 +#: netbox/dcim/views.py:1249 netbox/dcim/views.py:1943 +#: netbox/netbox/navigation/menu.py:99 +#: netbox/templates/dcim/device/base.html:31 +#: netbox/templates/dcim/device_list.html:29 +#: netbox/templates/dcim/devicetype/base.html:28 +#: netbox/templates/dcim/inc/moduletype_buttons.html:19 +#: netbox/templates/dcim/module.html:28 msgid "Power Ports" msgstr "Porte di alimentazione" -#: dcim/tables/devicetypes.py:125 dcim/views.py:1027 dcim/views.py:1266 -#: dcim/views.py:1961 netbox/navigation/menu.py:100 -#: templates/dcim/device/base.html:34 templates/dcim/device_list.html:36 -#: templates/dcim/devicetype/base.html:31 -#: templates/dcim/inc/moduletype_buttons.html:22 templates/dcim/module.html:31 +#: netbox/dcim/tables/devicetypes.py:125 netbox/dcim/views.py:1025 +#: netbox/dcim/views.py:1264 netbox/dcim/views.py:1959 +#: netbox/netbox/navigation/menu.py:100 +#: netbox/templates/dcim/device/base.html:34 +#: netbox/templates/dcim/device_list.html:36 +#: netbox/templates/dcim/devicetype/base.html:31 +#: netbox/templates/dcim/inc/moduletype_buttons.html:22 +#: netbox/templates/dcim/module.html:31 msgid "Power Outlets" msgstr "Prese di corrente" -#: dcim/tables/devicetypes.py:131 dcim/views.py:1057 dcim/views.py:1296 -#: dcim/views.py:1999 netbox/navigation/menu.py:95 -#: templates/dcim/device/base.html:40 templates/dcim/devicetype/base.html:37 -#: templates/dcim/inc/moduletype_buttons.html:28 templates/dcim/module.html:37 +#: netbox/dcim/tables/devicetypes.py:131 netbox/dcim/views.py:1055 +#: netbox/dcim/views.py:1294 netbox/dcim/views.py:1997 +#: netbox/netbox/navigation/menu.py:95 +#: netbox/templates/dcim/device/base.html:40 +#: netbox/templates/dcim/devicetype/base.html:37 +#: netbox/templates/dcim/inc/moduletype_buttons.html:28 +#: netbox/templates/dcim/module.html:37 msgid "Front Ports" msgstr "Porte anteriori" -#: dcim/tables/devicetypes.py:134 dcim/views.py:1072 dcim/views.py:1311 -#: dcim/views.py:2015 netbox/navigation/menu.py:96 -#: templates/dcim/device/base.html:43 templates/dcim/device_list.html:50 -#: templates/dcim/devicetype/base.html:40 -#: templates/dcim/inc/moduletype_buttons.html:31 templates/dcim/module.html:40 +#: netbox/dcim/tables/devicetypes.py:134 netbox/dcim/views.py:1070 +#: netbox/dcim/views.py:1309 netbox/dcim/views.py:2013 +#: netbox/netbox/navigation/menu.py:96 +#: netbox/templates/dcim/device/base.html:43 +#: netbox/templates/dcim/device_list.html:50 +#: netbox/templates/dcim/devicetype/base.html:40 +#: netbox/templates/dcim/inc/moduletype_buttons.html:31 +#: netbox/templates/dcim/module.html:40 msgid "Rear Ports" msgstr "Porte posteriori" -#: dcim/tables/devicetypes.py:137 dcim/views.py:1102 dcim/views.py:2055 -#: netbox/navigation/menu.py:102 templates/dcim/device/base.html:49 -#: templates/dcim/device_list.html:57 templates/dcim/devicetype/base.html:46 +#: netbox/dcim/tables/devicetypes.py:137 netbox/dcim/views.py:1100 +#: netbox/dcim/views.py:2053 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" -#: dcim/tables/devicetypes.py:140 dcim/views.py:1087 dcim/views.py:1326 -#: dcim/views.py:2035 netbox/navigation/menu.py:101 -#: templates/dcim/device/base.html:46 templates/dcim/device_list.html:64 -#: templates/dcim/devicetype/base.html:43 -#: templates/dcim/inc/moduletype_buttons.html:34 templates/dcim/module.html:43 +#: netbox/dcim/tables/devicetypes.py:140 netbox/dcim/views.py:1085 +#: netbox/dcim/views.py:1324 netbox/dcim/views.py:2033 +#: netbox/netbox/navigation/menu.py:101 +#: netbox/templates/dcim/device/base.html:46 +#: netbox/templates/dcim/device_list.html:64 +#: netbox/templates/dcim/devicetype/base.html:43 +#: netbox/templates/dcim/inc/moduletype_buttons.html:34 +#: netbox/templates/dcim/module.html:43 msgid "Module Bays" msgstr "Baie per moduli" -#: dcim/tables/power.py:36 netbox/navigation/menu.py:297 -#: templates/dcim/powerpanel.html:51 +#: netbox/dcim/tables/power.py:36 netbox/netbox/navigation/menu.py:297 +#: netbox/templates/dcim/powerpanel.html:51 msgid "Power Feeds" msgstr "Alimenti di alimentazione" -#: dcim/tables/power.py:80 templates/dcim/powerfeed.html:99 +#: netbox/dcim/tables/power.py:80 netbox/templates/dcim/powerfeed.html:99 msgid "Max Utilization" msgstr "Utilizzo massimo" -#: dcim/tables/power.py:84 +#: netbox/dcim/tables/power.py:84 msgid "Available Power (VA)" msgstr "Potenza disponibile (VA)" -#: dcim/tables/racks.py:30 dcim/tables/sites.py:143 -#: netbox/navigation/menu.py:43 netbox/navigation/menu.py:47 -#: netbox/navigation/menu.py:49 +#: netbox/dcim/tables/racks.py:30 netbox/dcim/tables/sites.py:143 +#: netbox/netbox/navigation/menu.py:43 netbox/netbox/navigation/menu.py:47 +#: netbox/netbox/navigation/menu.py:49 msgid "Racks" msgstr "Scaffali" -#: dcim/tables/racks.py:63 dcim/tables/racks.py:142 -#: templates/dcim/device.html:318 -#: templates/dcim/inc/panels/racktype_dimensions.html:14 +#: netbox/dcim/tables/racks.py:63 netbox/dcim/tables/racks.py:142 +#: netbox/templates/dcim/device.html:318 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:14 msgid "Height" msgstr "Altezza" -#: dcim/tables/racks.py:67 dcim/tables/racks.py:165 -#: templates/dcim/inc/panels/racktype_dimensions.html:18 +#: netbox/dcim/tables/racks.py:67 netbox/dcim/tables/racks.py:165 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:18 msgid "Outer Width" msgstr "Larghezza esterna" -#: dcim/tables/racks.py:71 dcim/tables/racks.py:169 -#: templates/dcim/inc/panels/racktype_dimensions.html:28 +#: netbox/dcim/tables/racks.py:71 netbox/dcim/tables/racks.py:169 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:28 msgid "Outer Depth" msgstr "Profondità esterna" -#: dcim/tables/racks.py:79 dcim/tables/racks.py:177 +#: netbox/dcim/tables/racks.py:79 netbox/dcim/tables/racks.py:177 msgid "Max Weight" msgstr "Peso massimo" -#: dcim/tables/racks.py:154 +#: netbox/dcim/tables/racks.py:154 msgid "Space" msgstr "Spazio" -#: dcim/tables/sites.py:30 dcim/tables/sites.py:57 -#: extras/forms/filtersets.py:351 extras/forms/model_forms.py:517 -#: ipam/forms/bulk_edit.py:131 ipam/forms/model_forms.py:153 -#: ipam/tables/asn.py:66 netbox/navigation/menu.py:15 -#: netbox/navigation/menu.py:17 +#: netbox/dcim/tables/sites.py:30 netbox/dcim/tables/sites.py:57 +#: netbox/extras/forms/filtersets.py: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/netbox/navigation/menu.py:15 netbox/netbox/navigation/menu.py:17 msgid "Sites" msgstr "Siti" -#: dcim/tests/test_api.py:47 +#: netbox/dcim/tests/test_api.py:47 msgid "Test case must set peer_termination_type" msgstr "Il test case deve impostare peer_termination_type" -#: dcim/views.py:140 +#: netbox/dcim/views.py:138 #, python-brace-format msgid "Disconnected {count} {type}" msgstr "Disconnesso {count} {type}" -#: dcim/views.py:740 netbox/navigation/menu.py:51 +#: netbox/dcim/views.py:738 netbox/netbox/navigation/menu.py:51 msgid "Reservations" msgstr "Prenotazioni" -#: dcim/views.py:759 templates/dcim/location.html:90 -#: templates/dcim/site.html:140 +#: netbox/dcim/views.py:757 netbox/templates/dcim/location.html:90 +#: netbox/templates/dcim/site.html:140 msgid "Non-Racked Devices" msgstr "Dispositivi non montati su rack" -#: dcim/views.py:2088 extras/forms/model_forms.py:577 -#: templates/extras/configcontext.html:10 -#: virtualization/forms/model_forms.py:225 virtualization/views.py:407 +#: netbox/dcim/views.py:2086 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 msgid "Config Context" msgstr "Contesto di configurazione" -#: dcim/views.py:2098 virtualization/views.py:417 +#: netbox/dcim/views.py:2096 netbox/virtualization/views.py:415 msgid "Render Config" msgstr "Configurazione del rendering" -#: dcim/views.py:2131 virtualization/views.py:450 +#: 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}" -#: dcim/views.py:2149 extras/tables/tables.py:550 -#: netbox/navigation/menu.py:247 netbox/navigation/menu.py:249 -#: virtualization/views.py:180 +#: 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 msgid "Virtual Machines" msgstr "Macchine virtuali" -#: dcim/views.py:2897 +#: netbox/dcim/views.py:2907 #, python-brace-format msgid "Installed device {device} in bay {device_bay}." msgstr "Dispositivo installato {device} nella baia {device_bay}." -#: dcim/views.py:2938 +#: netbox/dcim/views.py:2948 #, python-brace-format msgid "Removed device {device} from bay {device_bay}." msgstr "Dispositivo rimosso {device} dalla baia {device_bay}." -#: dcim/views.py:3044 ipam/tables/ip.py:234 +#: netbox/dcim/views.py:3054 netbox/ipam/tables/ip.py:234 msgid "Children" msgstr "Bambini" -#: dcim/views.py:3510 +#: netbox/dcim/views.py:3520 #, python-brace-format msgid "Added member {device}" msgstr "Membro aggiunto {device}" -#: dcim/views.py:3557 +#: netbox/dcim/views.py:3567 #, python-brace-format msgid "Unable to remove master device {device} from the virtual chassis." msgstr "" "Impossibile rimuovere il dispositivo master {device} dallo chassis virtuale." -#: dcim/views.py:3570 +#: netbox/dcim/views.py:3580 #, python-brace-format msgid "Removed {device} from virtual chassis {chassis}" msgstr "Rimosso {device} da chassis virtuale {chassis}" -#: extras/api/customfields.py:89 +#: netbox/extras/api/customfields.py:89 #, python-brace-format msgid "Unknown related object(s): {name}" msgstr "Oggetti correlati sconosciuti: {name}" -#: extras/api/serializers_/customfields.py:73 +#: netbox/extras/api/serializers_/customfields.py:73 msgid "Changing the type of custom fields is not supported." msgstr "La modifica del tipo di campi personalizzati non è supportata." -#: extras/api/serializers_/scripts.py:70 extras/api/serializers_/scripts.py:75 +#: netbox/extras/api/serializers_/scripts.py:70 +#: netbox/extras/api/serializers_/scripts.py:75 msgid "Scheduling is not enabled for this script." msgstr "La pianificazione non è abilitata per questo script." -#: extras/choices.py:30 extras/forms/misc.py:14 +#: netbox/extras/choices.py:30 netbox/extras/forms/misc.py:14 msgid "Text" msgstr "Testo" -#: extras/choices.py:31 +#: netbox/extras/choices.py:31 msgid "Text (long)" msgstr "Testo (lungo)" -#: extras/choices.py:32 +#: netbox/extras/choices.py:32 msgid "Integer" msgstr "Numero intero" -#: extras/choices.py:33 +#: netbox/extras/choices.py:33 msgid "Decimal" msgstr "Decimale" -#: extras/choices.py:34 +#: netbox/extras/choices.py:34 msgid "Boolean (true/false)" msgstr "Booleano (vero/falso)" -#: extras/choices.py:35 +#: netbox/extras/choices.py:35 msgid "Date" msgstr "Data" -#: extras/choices.py:36 +#: netbox/extras/choices.py:36 msgid "Date & time" msgstr "Data e ora" -#: extras/choices.py:38 +#: netbox/extras/choices.py:38 msgid "JSON" msgstr "JSON" -#: extras/choices.py:39 +#: netbox/extras/choices.py:39 msgid "Selection" msgstr "Selezione" -#: extras/choices.py:40 +#: netbox/extras/choices.py:40 msgid "Multiple selection" msgstr "Selezione multipla" -#: extras/choices.py:42 +#: netbox/extras/choices.py:42 msgid "Multiple objects" msgstr "Oggetti multipli" -#: extras/choices.py:53 netbox/preferences.py:21 -#: templates/extras/customfield.html:78 vpn/choices.py:20 -#: wireless/choices.py:27 +#: netbox/extras/choices.py:53 netbox/netbox/preferences.py:21 +#: netbox/templates/extras/customfield.html:78 netbox/vpn/choices.py:20 +#: netbox/wireless/choices.py:27 msgid "Disabled" msgstr "Disabili" -#: extras/choices.py:54 +#: netbox/extras/choices.py:54 msgid "Loose" msgstr "Sciolto" -#: extras/choices.py:55 +#: netbox/extras/choices.py:55 msgid "Exact" msgstr "Esatto" -#: extras/choices.py:66 +#: netbox/extras/choices.py:66 msgid "Always" msgstr "Sempre" -#: extras/choices.py:67 +#: netbox/extras/choices.py:67 msgid "If set" msgstr "Se impostato" -#: extras/choices.py:68 extras/choices.py:81 +#: netbox/extras/choices.py:68 netbox/extras/choices.py:81 msgid "Hidden" msgstr "Nascosto" -#: extras/choices.py:79 +#: netbox/extras/choices.py:79 msgid "Yes" msgstr "sì" -#: extras/choices.py:80 +#: netbox/extras/choices.py:80 msgid "No" msgstr "No" -#: extras/choices.py:108 templates/tenancy/contact.html:57 -#: tenancy/forms/bulk_edit.py:118 wireless/forms/model_forms.py:168 +#: 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 msgid "Link" msgstr "Link" -#: extras/choices.py:124 +#: netbox/extras/choices.py:124 msgid "Newest" msgstr "Più recente" -#: extras/choices.py:125 +#: netbox/extras/choices.py:125 msgid "Oldest" msgstr "Il più vecchio" -#: extras/choices.py:126 +#: netbox/extras/choices.py:126 msgid "Alphabetical (A-Z)" msgstr "Alfabetico (A-Z)" -#: extras/choices.py:127 +#: netbox/extras/choices.py:127 msgid "Alphabetical (Z-A)" msgstr "Alfabetico (Z-A)" -#: extras/choices.py:144 extras/choices.py:167 +#: netbox/extras/choices.py:144 netbox/extras/choices.py:167 msgid "Info" msgstr "Informazioni" -#: extras/choices.py:145 extras/choices.py:168 +#: netbox/extras/choices.py:145 netbox/extras/choices.py:168 msgid "Success" msgstr "Successo" -#: extras/choices.py:146 extras/choices.py:169 +#: netbox/extras/choices.py:146 netbox/extras/choices.py:169 msgid "Warning" msgstr "Avvertenza" -#: extras/choices.py:147 +#: netbox/extras/choices.py:147 msgid "Danger" msgstr "Pericolo" -#: extras/choices.py:165 +#: netbox/extras/choices.py:165 msgid "Debug" msgstr "Eseguire il debug" -#: extras/choices.py:166 netbox/choices.py:101 +#: netbox/extras/choices.py:166 netbox/netbox/choices.py:101 msgid "Default" msgstr "Predefinito" -#: extras/choices.py:170 +#: netbox/extras/choices.py:170 msgid "Failure" msgstr "Fallimento" -#: extras/choices.py:186 +#: netbox/extras/choices.py:186 msgid "Hourly" msgstr "Ogni ora" -#: extras/choices.py:187 +#: netbox/extras/choices.py:187 msgid "12 hours" msgstr "12 ore" -#: extras/choices.py:188 +#: netbox/extras/choices.py:188 msgid "Daily" msgstr "Quotidiano" -#: extras/choices.py:189 +#: netbox/extras/choices.py:189 msgid "Weekly" msgstr "Settimanale" -#: extras/choices.py:190 +#: netbox/extras/choices.py:190 msgid "30 days" msgstr "30 giorni" -#: extras/choices.py:226 templates/dcim/virtualchassis_edit.html:107 -#: templates/generic/bulk_add_component.html:68 -#: templates/generic/object_edit.html:47 templates/generic/object_edit.html:80 -#: templates/ipam/inc/ipaddress_edit_header.html:7 +#: netbox/extras/choices.py:226 +#: 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/ipam/inc/ipaddress_edit_header.html:7 msgid "Create" msgstr "Crea" -#: extras/choices.py:227 +#: netbox/extras/choices.py:227 msgid "Update" msgstr "Aggiornamento" -#: extras/choices.py:228 templates/circuits/inc/circuit_termination.html:23 -#: templates/dcim/inc/panels/inventory_items.html:37 -#: templates/dcim/powerpanel.html:66 templates/extras/script_list.html:35 -#: templates/generic/bulk_delete.html:20 templates/generic/bulk_delete.html:66 -#: templates/generic/object_delete.html:19 templates/htmx/delete_form.html:57 -#: templates/ipam/inc/panels/fhrp_groups.html:48 -#: templates/users/objectpermission.html:46 -#: utilities/templates/buttons/delete.html:11 +#: netbox/extras/choices.py:228 +#: netbox/templates/circuits/inc/circuit_termination.html:23 +#: netbox/templates/dcim/inc/panels/inventory_items.html:37 +#: netbox/templates/dcim/powerpanel.html:66 +#: netbox/templates/extras/script_list.html:35 +#: netbox/templates/generic/bulk_delete.html:20 +#: netbox/templates/generic/bulk_delete.html:66 +#: netbox/templates/generic/object_delete.html:19 +#: netbox/templates/htmx/delete_form.html:57 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:48 +#: netbox/templates/users/objectpermission.html:46 +#: netbox/utilities/templates/buttons/delete.html:11 msgid "Delete" msgstr "Elimina" -#: extras/choices.py:252 netbox/choices.py:57 netbox/choices.py:102 +#: netbox/extras/choices.py:252 netbox/netbox/choices.py:57 +#: netbox/netbox/choices.py:102 msgid "Blue" msgstr "Blu" -#: extras/choices.py:253 netbox/choices.py:56 netbox/choices.py:103 +#: netbox/extras/choices.py:253 netbox/netbox/choices.py:56 +#: netbox/netbox/choices.py:103 msgid "Indigo" msgstr "Indaco" -#: extras/choices.py:254 netbox/choices.py:54 netbox/choices.py:104 +#: netbox/extras/choices.py:254 netbox/netbox/choices.py:54 +#: netbox/netbox/choices.py:104 msgid "Purple" msgstr "Viola" -#: extras/choices.py:255 netbox/choices.py:51 netbox/choices.py:105 +#: netbox/extras/choices.py:255 netbox/netbox/choices.py:51 +#: netbox/netbox/choices.py:105 msgid "Pink" msgstr "Rosa" -#: extras/choices.py:256 netbox/choices.py:50 netbox/choices.py:106 +#: netbox/extras/choices.py:256 netbox/netbox/choices.py:50 +#: netbox/netbox/choices.py:106 msgid "Red" msgstr "Rosso" -#: extras/choices.py:257 netbox/choices.py:68 netbox/choices.py:107 +#: netbox/extras/choices.py:257 netbox/netbox/choices.py:68 +#: netbox/netbox/choices.py:107 msgid "Orange" msgstr "arancia" -#: extras/choices.py:258 netbox/choices.py:66 netbox/choices.py:108 +#: netbox/extras/choices.py:258 netbox/netbox/choices.py:66 +#: netbox/netbox/choices.py:108 msgid "Yellow" msgstr "Giallo" -#: extras/choices.py:259 netbox/choices.py:63 netbox/choices.py:109 +#: netbox/extras/choices.py:259 netbox/netbox/choices.py:63 +#: netbox/netbox/choices.py:109 msgid "Green" msgstr "Verde" -#: extras/choices.py:260 netbox/choices.py:60 netbox/choices.py:110 +#: netbox/extras/choices.py:260 netbox/netbox/choices.py:60 +#: netbox/netbox/choices.py:110 msgid "Teal" msgstr "color tè blu" -#: extras/choices.py:261 netbox/choices.py:59 netbox/choices.py:111 +#: netbox/extras/choices.py:261 netbox/netbox/choices.py:59 +#: netbox/netbox/choices.py:111 msgid "Cyan" msgstr "Ciano" -#: extras/choices.py:262 netbox/choices.py:112 +#: netbox/extras/choices.py:262 netbox/netbox/choices.py:112 msgid "Gray" msgstr "Grigio" -#: extras/choices.py:263 netbox/choices.py:74 netbox/choices.py:113 +#: netbox/extras/choices.py:263 netbox/netbox/choices.py:74 +#: netbox/netbox/choices.py:113 msgid "Black" msgstr "Nero" -#: extras/choices.py:264 netbox/choices.py:75 netbox/choices.py:114 +#: netbox/extras/choices.py:264 netbox/netbox/choices.py:75 +#: netbox/netbox/choices.py:114 msgid "White" msgstr "bianco" -#: extras/choices.py:279 extras/forms/model_forms.py:353 -#: extras/forms/model_forms.py:430 templates/extras/webhook.html:10 +#: netbox/extras/choices.py:279 netbox/extras/forms/model_forms.py:353 +#: netbox/extras/forms/model_forms.py:430 +#: netbox/templates/extras/webhook.html:10 msgid "Webhook" msgstr "Webhook" -#: extras/choices.py:280 extras/forms/model_forms.py:418 -#: templates/extras/script/base.html:29 +#: netbox/extras/choices.py:280 netbox/extras/forms/model_forms.py:418 +#: netbox/templates/extras/script/base.html:29 msgid "Script" msgstr "Sceneggiatura" -#: extras/choices.py:281 +#: netbox/extras/choices.py:281 msgid "Notification" msgstr "Notifica" -#: extras/conditions.py:54 +#: netbox/extras/conditions.py:54 #, python-brace-format msgid "Unknown operator: {op}. Must be one of: {operators}" msgstr "" "Operatore sconosciuto: {op}. Deve essere uno dei seguenti: {operators}" -#: extras/conditions.py:58 +#: netbox/extras/conditions.py:58 #, python-brace-format msgid "Unsupported value type: {value}" msgstr "Tipo di valore non supportato: {value}" -#: extras/conditions.py:60 +#: netbox/extras/conditions.py:60 #, python-brace-format msgid "Invalid type for {op} operation: {value}" msgstr "Tipo non valido per {op} operazione: {value}" -#: extras/conditions.py:137 +#: netbox/extras/conditions.py:137 #, python-brace-format msgid "Ruleset must be a dictionary, not {ruleset}." msgstr "Il set di regole deve essere un dizionario, non {ruleset}." -#: extras/conditions.py:142 +#: netbox/extras/conditions.py:142 msgid "Invalid logic type: must be 'AND' or 'OR'. Please check documentation." msgstr "" "Tipo di logica non valido: deve essere 'AND' o 'OR'. Controlla la " "documentazione." -#: extras/conditions.py:154 +#: netbox/extras/conditions.py:154 msgid "Incorrect key(s) informed. Please check documentation." msgstr "Chiavi errate comunicate. Si prega di controllare la documentazione." -#: extras/dashboard/forms.py:38 +#: netbox/extras/dashboard/forms.py:38 msgid "Widget type" msgstr "Tipo di widget" -#: extras/dashboard/utils.py:36 +#: netbox/extras/dashboard/utils.py:36 #, python-brace-format msgid "Unregistered widget class: {name}" msgstr "Classe widget non registrata: {name}" -#: extras/dashboard/widgets.py:125 +#: netbox/extras/dashboard/widgets.py:125 #, python-brace-format msgid "{class_name} must define a render() method." msgstr "{class_name} deve definire un metodo render ()." -#: extras/dashboard/widgets.py:144 +#: netbox/extras/dashboard/widgets.py:144 msgid "Note" msgstr "Nota" -#: extras/dashboard/widgets.py:145 +#: netbox/extras/dashboard/widgets.py:145 msgid "Display some arbitrary custom content. Markdown is supported." msgstr "" "Visualizza alcuni contenuti personalizzati arbitrari. Markdown è supportato." -#: extras/dashboard/widgets.py:158 +#: netbox/extras/dashboard/widgets.py:158 msgid "Object Counts" msgstr "Conteggi oggetti" -#: extras/dashboard/widgets.py:159 +#: netbox/extras/dashboard/widgets.py:159 msgid "" "Display a set of NetBox models and the number of objects created for each " "type." @@ -7001,271 +7541,293 @@ msgstr "" "Visualizza un set di modelli NetBox e il numero di oggetti creati per ogni " "tipo." -#: extras/dashboard/widgets.py:169 +#: netbox/extras/dashboard/widgets.py:169 msgid "Filters to apply when counting the number of objects" msgstr "Filtri da applicare durante il conteggio del numero di oggetti" -#: extras/dashboard/widgets.py:177 +#: netbox/extras/dashboard/widgets.py:177 msgid "Invalid format. Object filters must be passed as a dictionary." msgstr "" "Formato non valido. I filtri degli oggetti devono essere passati come " "dizionario." -#: extras/dashboard/widgets.py:208 +#: netbox/extras/dashboard/widgets.py:208 msgid "Object List" msgstr "Elenco oggetti" -#: extras/dashboard/widgets.py:209 +#: netbox/extras/dashboard/widgets.py:209 msgid "Display an arbitrary list of objects." msgstr "Visualizza un elenco arbitrario di oggetti." -#: extras/dashboard/widgets.py:222 +#: netbox/extras/dashboard/widgets.py:222 msgid "The default number of objects to display" msgstr "Il numero predefinito di oggetti da visualizzare" -#: extras/dashboard/widgets.py:234 +#: netbox/extras/dashboard/widgets.py:234 msgid "Invalid format. URL parameters must be passed as a dictionary." msgstr "" "Formato non valido. I parametri URL devono essere passati come dizionario." -#: extras/dashboard/widgets.py:274 +#: netbox/extras/dashboard/widgets.py:274 msgid "RSS Feed" msgstr "Feed RSS" -#: extras/dashboard/widgets.py:279 +#: netbox/extras/dashboard/widgets.py:279 msgid "Embed an RSS feed from an external website." msgstr "Incorpora un feed RSS da un sito Web esterno." -#: extras/dashboard/widgets.py:286 +#: netbox/extras/dashboard/widgets.py:286 msgid "Feed URL" msgstr "URL del feed" -#: extras/dashboard/widgets.py:291 +#: netbox/extras/dashboard/widgets.py:291 msgid "The maximum number of objects to display" msgstr "Il numero massimo di oggetti da visualizzare" -#: extras/dashboard/widgets.py:296 +#: netbox/extras/dashboard/widgets.py:296 msgid "How long to stored the cached content (in seconds)" msgstr "" "Per quanto tempo conservare il contenuto memorizzato nella cache (in " "secondi)" -#: extras/dashboard/widgets.py:348 templates/account/base.html:10 -#: templates/account/bookmarks.html:7 templates/inc/user_menu.html:48 +#: netbox/extras/dashboard/widgets.py:348 +#: netbox/templates/account/base.html:10 +#: netbox/templates/account/bookmarks.html:7 +#: netbox/templates/inc/user_menu.html:48 msgid "Bookmarks" msgstr "Segnalibri" -#: extras/dashboard/widgets.py:352 +#: netbox/extras/dashboard/widgets.py:352 msgid "Show your personal bookmarks" msgstr "Mostra i tuoi segnalibri personali" -#: extras/events.py:147 +#: netbox/extras/events.py:147 #, 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}" -#: extras/events.py:192 +#: netbox/extras/events.py:192 #, python-brace-format msgid "Cannot import events pipeline {name} error: {error}" msgstr "Impossibile importare la pipeline di eventi {name} errore: {error}" -#: extras/filtersets.py:45 +#: netbox/extras/filtersets.py:45 msgid "Script module (ID)" msgstr "Modulo script (ID)" -#: extras/filtersets.py:254 extras/filtersets.py:637 extras/filtersets.py:665 +#: netbox/extras/filtersets.py:254 netbox/extras/filtersets.py:637 +#: netbox/extras/filtersets.py:665 msgid "Data file (ID)" msgstr "File di dati (ID)" -#: extras/filtersets.py:370 users/filtersets.py:68 users/filtersets.py:191 +#: netbox/extras/filtersets.py:370 netbox/users/filtersets.py:68 +#: netbox/users/filtersets.py:191 msgid "Group (name)" msgstr "Gruppo (nome)" -#: extras/filtersets.py:574 virtualization/forms/filtersets.py:118 +#: netbox/extras/filtersets.py:574 +#: netbox/virtualization/forms/filtersets.py:118 msgid "Cluster type" msgstr "Tipo di cluster" -#: extras/filtersets.py:580 virtualization/filtersets.py:95 -#: virtualization/filtersets.py:147 +#: netbox/extras/filtersets.py:580 netbox/virtualization/filtersets.py:95 +#: netbox/virtualization/filtersets.py:147 msgid "Cluster type (slug)" msgstr "Tipo di cluster (slug)" -#: extras/filtersets.py:601 tenancy/forms/forms.py:16 -#: tenancy/forms/forms.py:39 +#: netbox/extras/filtersets.py:601 netbox/tenancy/forms/forms.py:16 +#: netbox/tenancy/forms/forms.py:39 msgid "Tenant group" msgstr "Gruppo di inquilini" -#: extras/filtersets.py:607 tenancy/filtersets.py:188 -#: tenancy/filtersets.py:208 +#: netbox/extras/filtersets.py:607 netbox/tenancy/filtersets.py:188 +#: netbox/tenancy/filtersets.py:208 msgid "Tenant group (slug)" msgstr "Gruppo di inquilini (slug)" -#: extras/filtersets.py:623 extras/forms/model_forms.py:495 -#: templates/extras/tag.html:11 +#: netbox/extras/filtersets.py:623 netbox/extras/forms/model_forms.py:495 +#: netbox/templates/extras/tag.html:11 msgid "Tag" msgstr "Etichetta" -#: extras/filtersets.py:629 +#: netbox/extras/filtersets.py:629 msgid "Tag (slug)" msgstr "Etichetta (lumaca)" -#: extras/filtersets.py:689 extras/forms/filtersets.py:429 +#: netbox/extras/filtersets.py:689 netbox/extras/forms/filtersets.py:429 msgid "Has local config context data" msgstr "Dispone di dati di contesto di configurazione locali" -#: extras/forms/bulk_edit.py:35 extras/forms/filtersets.py:60 +#: netbox/extras/forms/bulk_edit.py:35 netbox/extras/forms/filtersets.py:60 msgid "Group name" msgstr "Nome del gruppo" -#: extras/forms/bulk_edit.py:43 extras/forms/filtersets.py:68 -#: extras/tables/tables.py:65 templates/extras/customfield.html:38 -#: templates/generic/bulk_import.html:118 +#: netbox/extras/forms/bulk_edit.py:43 netbox/extras/forms/filtersets.py:68 +#: netbox/extras/tables/tables.py:65 +#: netbox/templates/extras/customfield.html:38 +#: netbox/templates/generic/bulk_import.html:118 msgid "Required" msgstr "Richiesto" -#: extras/forms/bulk_edit.py:48 extras/forms/filtersets.py:75 +#: netbox/extras/forms/bulk_edit.py:48 netbox/extras/forms/filtersets.py:75 msgid "Must be unique" msgstr "Deve essere unico" -#: extras/forms/bulk_edit.py:61 extras/forms/bulk_import.py:60 -#: extras/forms/filtersets.py:89 extras/models/customfields.py:209 +#: netbox/extras/forms/bulk_edit.py:61 netbox/extras/forms/bulk_import.py:60 +#: netbox/extras/forms/filtersets.py:89 +#: netbox/extras/models/customfields.py:209 msgid "UI visible" msgstr "Interfaccia utente visibile" -#: extras/forms/bulk_edit.py:66 extras/forms/bulk_import.py:66 -#: extras/forms/filtersets.py:94 extras/models/customfields.py:216 +#: netbox/extras/forms/bulk_edit.py:66 netbox/extras/forms/bulk_import.py:66 +#: netbox/extras/forms/filtersets.py:94 +#: netbox/extras/models/customfields.py:216 msgid "UI editable" msgstr "Interfaccia utente modificabile" -#: extras/forms/bulk_edit.py:71 extras/forms/filtersets.py:97 +#: netbox/extras/forms/bulk_edit.py:71 netbox/extras/forms/filtersets.py:97 msgid "Is cloneable" msgstr "È clonabile" -#: extras/forms/bulk_edit.py:76 extras/forms/filtersets.py:104 +#: netbox/extras/forms/bulk_edit.py:76 netbox/extras/forms/filtersets.py:104 msgid "Minimum value" msgstr "Valore minimo" -#: extras/forms/bulk_edit.py:80 extras/forms/filtersets.py:108 +#: netbox/extras/forms/bulk_edit.py:80 netbox/extras/forms/filtersets.py:108 msgid "Maximum value" msgstr "Valore massimo" -#: extras/forms/bulk_edit.py:84 extras/forms/filtersets.py:112 +#: netbox/extras/forms/bulk_edit.py:84 netbox/extras/forms/filtersets.py:112 msgid "Validation regex" msgstr "Regex di convalida" -#: extras/forms/bulk_edit.py:91 extras/forms/filtersets.py:46 -#: extras/forms/model_forms.py:76 templates/extras/customfield.html:70 +#: netbox/extras/forms/bulk_edit.py:91 netbox/extras/forms/filtersets.py:46 +#: netbox/extras/forms/model_forms.py:76 +#: netbox/templates/extras/customfield.html:70 msgid "Behavior" msgstr "Comportamento" -#: extras/forms/bulk_edit.py:128 extras/forms/filtersets.py:149 +#: netbox/extras/forms/bulk_edit.py:128 netbox/extras/forms/filtersets.py:149 msgid "New window" msgstr "Nuova finestra" -#: extras/forms/bulk_edit.py:137 +#: netbox/extras/forms/bulk_edit.py:137 msgid "Button class" msgstr "Classe Button" -#: extras/forms/bulk_edit.py:154 extras/forms/filtersets.py:187 -#: extras/models/models.py:409 +#: netbox/extras/forms/bulk_edit.py:154 netbox/extras/forms/filtersets.py:187 +#: netbox/extras/models/models.py:409 msgid "MIME type" msgstr "Tipo MIME" -#: extras/forms/bulk_edit.py:159 extras/forms/filtersets.py:190 +#: netbox/extras/forms/bulk_edit.py:159 netbox/extras/forms/filtersets.py:190 msgid "File extension" msgstr "Estensione del file" -#: extras/forms/bulk_edit.py:164 extras/forms/filtersets.py:194 +#: netbox/extras/forms/bulk_edit.py:164 netbox/extras/forms/filtersets.py:194 msgid "As attachment" msgstr "Come allegato" -#: extras/forms/bulk_edit.py:192 extras/forms/filtersets.py:236 -#: extras/tables/tables.py:256 templates/extras/savedfilter.html:29 +#: netbox/extras/forms/bulk_edit.py:192 netbox/extras/forms/filtersets.py:236 +#: netbox/extras/tables/tables.py:256 +#: netbox/templates/extras/savedfilter.html:29 msgid "Shared" msgstr "Condiviso" -#: extras/forms/bulk_edit.py:215 extras/forms/filtersets.py:265 -#: extras/models/models.py:174 +#: netbox/extras/forms/bulk_edit.py:215 netbox/extras/forms/filtersets.py:265 +#: netbox/extras/models/models.py:174 msgid "HTTP method" msgstr "Metodo HTTP" -#: extras/forms/bulk_edit.py:219 extras/forms/filtersets.py:259 -#: templates/extras/webhook.html:30 +#: netbox/extras/forms/bulk_edit.py:219 netbox/extras/forms/filtersets.py:259 +#: netbox/templates/extras/webhook.html:30 msgid "Payload URL" msgstr "URL del payload" -#: extras/forms/bulk_edit.py:224 extras/models/models.py:214 +#: netbox/extras/forms/bulk_edit.py:224 netbox/extras/models/models.py:214 msgid "SSL verification" msgstr "Verifica SSL" -#: extras/forms/bulk_edit.py:227 templates/extras/webhook.html:38 +#: netbox/extras/forms/bulk_edit.py:227 +#: netbox/templates/extras/webhook.html:38 msgid "Secret" msgstr "Segreto" -#: extras/forms/bulk_edit.py:232 +#: netbox/extras/forms/bulk_edit.py:232 msgid "CA file path" msgstr "Percorso del file CA" -#: extras/forms/bulk_edit.py:253 extras/forms/bulk_import.py:192 -#: extras/forms/model_forms.py:377 +#: netbox/extras/forms/bulk_edit.py:253 netbox/extras/forms/bulk_import.py:192 +#: netbox/extras/forms/model_forms.py:377 msgid "Event types" msgstr "Tipi di eventi" -#: extras/forms/bulk_edit.py:293 +#: netbox/extras/forms/bulk_edit.py:293 msgid "Is active" msgstr "È attivo" -#: extras/forms/bulk_import.py:37 extras/forms/bulk_import.py:118 -#: extras/forms/bulk_import.py:139 extras/forms/bulk_import.py:162 -#: extras/forms/bulk_import.py:186 extras/forms/filtersets.py:137 -#: extras/forms/filtersets.py:224 extras/forms/model_forms.py:47 -#: extras/forms/model_forms.py:205 extras/forms/model_forms.py:237 -#: extras/forms/model_forms.py:278 extras/forms/model_forms.py:372 -#: extras/forms/model_forms.py:489 users/forms/model_forms.py:276 +#: netbox/extras/forms/bulk_import.py:37 +#: netbox/extras/forms/bulk_import.py:118 +#: 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/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/users/forms/model_forms.py:276 msgid "Object types" msgstr "Tipi di oggetti" -#: extras/forms/bulk_import.py:39 extras/forms/bulk_import.py:120 -#: extras/forms/bulk_import.py:141 extras/forms/bulk_import.py:164 -#: extras/forms/bulk_import.py:188 tenancy/forms/bulk_import.py:96 +#: netbox/extras/forms/bulk_import.py:39 +#: netbox/extras/forms/bulk_import.py:120 +#: netbox/extras/forms/bulk_import.py:141 +#: netbox/extras/forms/bulk_import.py:164 +#: netbox/extras/forms/bulk_import.py:188 +#: netbox/tenancy/forms/bulk_import.py:96 msgid "One or more assigned object types" msgstr "Uno o più tipi di oggetti assegnati" -#: extras/forms/bulk_import.py:44 +#: netbox/extras/forms/bulk_import.py:44 msgid "Field data type (e.g. text, integer, etc.)" msgstr "Tipo di dati del campo (ad esempio testo, numero intero, ecc.)" -#: extras/forms/bulk_import.py:47 extras/forms/filtersets.py:208 -#: extras/forms/filtersets.py:281 extras/forms/model_forms.py:304 -#: extras/forms/model_forms.py:341 tenancy/forms/filtersets.py:92 +#: 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/tenancy/forms/filtersets.py:92 msgid "Object type" msgstr "Tipo di oggetto" -#: extras/forms/bulk_import.py:50 +#: netbox/extras/forms/bulk_import.py:50 msgid "Object type (for object or multi-object fields)" msgstr "Tipo di oggetto (per campi oggetto o multioggetto)" -#: extras/forms/bulk_import.py:53 extras/forms/filtersets.py:84 +#: netbox/extras/forms/bulk_import.py:53 netbox/extras/forms/filtersets.py:84 msgid "Choice set" msgstr "Set a scelta" -#: extras/forms/bulk_import.py:57 +#: netbox/extras/forms/bulk_import.py:57 msgid "Choice set (for selection fields)" msgstr "Set di scelte (per i campi di selezione)" -#: extras/forms/bulk_import.py:63 +#: netbox/extras/forms/bulk_import.py:63 msgid "Whether the custom field is displayed in the UI" msgstr "Se il campo personalizzato viene visualizzato nell'interfaccia utente" -#: extras/forms/bulk_import.py:69 +#: netbox/extras/forms/bulk_import.py:69 msgid "Whether the custom field is editable in the UI" msgstr "Se il campo personalizzato è modificabile nell'interfaccia utente" -#: extras/forms/bulk_import.py:85 +#: netbox/extras/forms/bulk_import.py:85 msgid "The base set of predefined choices to use (if any)" msgstr "L'insieme base di scelte predefinite da utilizzare (se presenti)" -#: extras/forms/bulk_import.py:91 +#: netbox/extras/forms/bulk_import.py:91 msgid "" "Quoted string of comma-separated field choices with optional labels " "separated by colon: \"choice1:First Choice,choice2:Second Choice\"" @@ -7274,185 +7836,201 @@ msgstr "" "opzionali separate da due punti: «Scelta 1:prima scelta, scelta 2: seconda " "scelta»" -#: extras/forms/bulk_import.py:123 extras/models/models.py:323 +#: netbox/extras/forms/bulk_import.py:123 netbox/extras/models/models.py:323 msgid "button class" msgstr "classe di pulsanti" -#: extras/forms/bulk_import.py:126 extras/models/models.py:327 +#: netbox/extras/forms/bulk_import.py:126 netbox/extras/models/models.py:327 msgid "" "The class of the first link in a group will be used for the dropdown button" msgstr "" "La classe del primo link di un gruppo verrà utilizzata per il pulsante a " "discesa" -#: extras/forms/bulk_import.py:193 +#: netbox/extras/forms/bulk_import.py:193 msgid "The event type(s) which will trigger this rule" msgstr "I tipi di evento che attiveranno questa regola" -#: extras/forms/bulk_import.py:196 +#: netbox/extras/forms/bulk_import.py:196 msgid "Action object" msgstr "Oggetto d'azione" -#: extras/forms/bulk_import.py:198 +#: netbox/extras/forms/bulk_import.py:198 msgid "Webhook name or script as dotted path module.Class" msgstr "Nome o script del webhook come percorso punteggiato module.Class" -#: extras/forms/bulk_import.py:219 +#: netbox/extras/forms/bulk_import.py:219 #, python-brace-format msgid "Webhook {name} not found" msgstr "Webhook {name} non trovato" -#: extras/forms/bulk_import.py:228 +#: netbox/extras/forms/bulk_import.py:228 #, python-brace-format msgid "Script {name} not found" msgstr "Sceneggiatura {name} non trovato" -#: extras/forms/bulk_import.py:244 +#: netbox/extras/forms/bulk_import.py:244 msgid "Assigned object type" msgstr "Tipo di oggetto assegnato" -#: extras/forms/bulk_import.py:249 +#: netbox/extras/forms/bulk_import.py:249 msgid "The classification of entry" msgstr "La classificazione degli ingressi" -#: extras/forms/bulk_import.py:261 extras/forms/model_forms.py:320 -#: netbox/navigation/menu.py:390 templates/extras/notificationgroup.html:41 -#: templates/users/group.html:29 users/forms/model_forms.py:236 -#: users/forms/model_forms.py:248 users/forms/model_forms.py:300 -#: users/tables.py:102 +#: netbox/extras/forms/bulk_import.py:261 +#: netbox/extras/forms/model_forms.py:320 netbox/netbox/navigation/menu.py:390 +#: 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 +#: netbox/users/tables.py:102 msgid "Users" msgstr "Utenti" -#: extras/forms/bulk_import.py:265 +#: netbox/extras/forms/bulk_import.py:265 msgid "User names separated by commas, encased with double quotes" msgstr "Nomi utente separati da virgole, racchiusi tra virgolette" -#: extras/forms/bulk_import.py:268 extras/forms/model_forms.py:315 -#: netbox/navigation/menu.py:410 templates/extras/notificationgroup.html:31 -#: users/forms/model_forms.py:181 users/forms/model_forms.py:193 -#: users/forms/model_forms.py:305 users/tables.py:35 users/tables.py:106 +#: netbox/extras/forms/bulk_import.py:268 +#: netbox/extras/forms/model_forms.py:315 netbox/netbox/navigation/menu.py:410 +#: 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 +#: netbox/users/tables.py:106 msgid "Groups" msgstr "Gruppi" -#: extras/forms/bulk_import.py:272 +#: netbox/extras/forms/bulk_import.py:272 msgid "Group names separated by commas, encased with double quotes" msgstr "Nomi di gruppo separati da virgole, racchiusi tra virgolette doppie" -#: extras/forms/filtersets.py:52 extras/forms/model_forms.py:56 +#: netbox/extras/forms/filtersets.py:52 netbox/extras/forms/model_forms.py:56 msgid "Related object type" msgstr "Tipo di oggetto correlato" -#: extras/forms/filtersets.py:57 +#: netbox/extras/forms/filtersets.py:57 msgid "Field type" msgstr "Tipo di campo" -#: extras/forms/filtersets.py:120 extras/forms/model_forms.py:157 -#: extras/tables/tables.py:91 templates/generic/bulk_import.html:154 +#: netbox/extras/forms/filtersets.py:120 +#: netbox/extras/forms/model_forms.py:157 netbox/extras/tables/tables.py:91 +#: netbox/templates/generic/bulk_import.html:154 msgid "Choices" msgstr "Scelte" -#: extras/forms/filtersets.py:164 extras/forms/filtersets.py:319 -#: extras/forms/filtersets.py:408 extras/forms/model_forms.py:572 -#: templates/core/job.html:96 templates/extras/eventrule.html:84 +#: 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/templates/extras/eventrule.html:84 msgid "Data" msgstr "Dati" -#: extras/forms/filtersets.py:175 extras/forms/filtersets.py:333 -#: extras/forms/filtersets.py:418 netbox/choices.py:130 -#: utilities/forms/bulk_import.py:26 +#: netbox/extras/forms/filtersets.py:175 netbox/extras/forms/filtersets.py:333 +#: netbox/extras/forms/filtersets.py:418 netbox/netbox/choices.py:130 +#: netbox/utilities/forms/bulk_import.py:26 msgid "Data file" msgstr "File di dati" -#: extras/forms/filtersets.py:183 +#: netbox/extras/forms/filtersets.py:183 msgid "Content types" msgstr "Tipi di contenuto" -#: extras/forms/filtersets.py:255 extras/models/models.py:179 +#: netbox/extras/forms/filtersets.py:255 netbox/extras/models/models.py:179 msgid "HTTP content type" msgstr "Tipo di contenuto HTTP" -#: extras/forms/filtersets.py:286 +#: netbox/extras/forms/filtersets.py:286 msgid "Event type" msgstr "Tipo di evento" -#: extras/forms/filtersets.py:291 +#: netbox/extras/forms/filtersets.py:291 msgid "Action type" msgstr "Tipo di azione" -#: extras/forms/filtersets.py:307 +#: netbox/extras/forms/filtersets.py:307 msgid "Tagged object type" msgstr "Tipo di oggetto con tag" -#: extras/forms/filtersets.py:312 +#: netbox/extras/forms/filtersets.py:312 msgid "Allowed object type" msgstr "Tipo di oggetto consentito" -#: extras/forms/filtersets.py:341 extras/forms/model_forms.py:507 -#: netbox/navigation/menu.py:18 +#: netbox/extras/forms/filtersets.py:341 +#: netbox/extras/forms/model_forms.py:507 netbox/netbox/navigation/menu.py:18 msgid "Regions" msgstr "Regioni" -#: extras/forms/filtersets.py:346 extras/forms/model_forms.py:512 +#: netbox/extras/forms/filtersets.py:346 +#: netbox/extras/forms/model_forms.py:512 msgid "Site groups" msgstr "Gruppi del sito" -#: extras/forms/filtersets.py:356 extras/forms/model_forms.py:522 -#: netbox/navigation/menu.py:20 templates/dcim/site.html:127 +#: netbox/extras/forms/filtersets.py:356 +#: netbox/extras/forms/model_forms.py:522 netbox/netbox/navigation/menu.py:20 +#: netbox/templates/dcim/site.html:127 msgid "Locations" msgstr "Sedi" -#: extras/forms/filtersets.py:361 extras/forms/model_forms.py:527 +#: netbox/extras/forms/filtersets.py:361 +#: netbox/extras/forms/model_forms.py:527 msgid "Device types" msgstr "Tipi di dispositivi" -#: extras/forms/filtersets.py:366 extras/forms/model_forms.py:532 +#: netbox/extras/forms/filtersets.py:366 +#: netbox/extras/forms/model_forms.py:532 msgid "Roles" msgstr "Ruoli" -#: extras/forms/filtersets.py:376 extras/forms/model_forms.py:542 +#: netbox/extras/forms/filtersets.py:376 +#: netbox/extras/forms/model_forms.py:542 msgid "Cluster types" msgstr "Tipi di cluster" -#: extras/forms/filtersets.py:381 extras/forms/model_forms.py:547 +#: netbox/extras/forms/filtersets.py:381 +#: netbox/extras/forms/model_forms.py:547 msgid "Cluster groups" msgstr "Gruppi di cluster" -#: extras/forms/filtersets.py:386 extras/forms/model_forms.py:552 -#: netbox/navigation/menu.py:255 netbox/navigation/menu.py:257 -#: templates/virtualization/clustertype.html:30 -#: virtualization/tables/clusters.py:23 virtualization/tables/clusters.py:45 +#: 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/templates/virtualization/clustertype.html:30 +#: netbox/virtualization/tables/clusters.py:23 +#: netbox/virtualization/tables/clusters.py:45 msgid "Clusters" msgstr "Cluster" -#: extras/forms/filtersets.py:391 extras/forms/model_forms.py:557 +#: netbox/extras/forms/filtersets.py:391 +#: netbox/extras/forms/model_forms.py:557 msgid "Tenant groups" msgstr "Gruppi di inquilini" -#: extras/forms/model_forms.py:49 +#: netbox/extras/forms/model_forms.py:49 msgid "The type(s) of object that have this custom field" msgstr "I tipi di oggetto che hanno questo campo personalizzato" -#: extras/forms/model_forms.py:52 +#: netbox/extras/forms/model_forms.py:52 msgid "Default value" msgstr "Valore predefinito" -#: extras/forms/model_forms.py:58 +#: netbox/extras/forms/model_forms.py:58 msgid "Type of the related object (for object/multi-object fields only)" msgstr "Tipo di oggetto correlato (solo per i campi oggetto/multioggetto)" -#: extras/forms/model_forms.py:61 templates/extras/customfield.html:60 +#: netbox/extras/forms/model_forms.py:61 +#: netbox/templates/extras/customfield.html:60 msgid "Related object filter" msgstr "Filtro oggetto correlato" -#: extras/forms/model_forms.py:63 +#: netbox/extras/forms/model_forms.py:63 msgid "Specify query parameters as a JSON object." msgstr "Specifica i parametri della query come oggetto JSON." -#: extras/forms/model_forms.py:73 templates/extras/customfield.html:10 +#: netbox/extras/forms/model_forms.py:73 +#: netbox/templates/extras/customfield.html:10 msgid "Custom Field" msgstr "Campo personalizzato" -#: extras/forms/model_forms.py:85 +#: netbox/extras/forms/model_forms.py:85 msgid "" "The type of data stored in this field. For object/multi-object fields, " "select the related object type below." @@ -7460,7 +8038,7 @@ msgstr "" "Il tipo di dati memorizzati in questo campo. Per i campi " "oggetti/multioggetto, seleziona il tipo di oggetto correlato di seguito." -#: extras/forms/model_forms.py:88 +#: netbox/extras/forms/model_forms.py:88 msgid "" "This will be displayed as help text for the form field. Markdown is " "supported." @@ -7468,11 +8046,11 @@ msgstr "" "Questo verrà visualizzato come testo di aiuto per il campo del modulo. " "Markdown è supportato." -#: extras/forms/model_forms.py:143 +#: netbox/extras/forms/model_forms.py:143 msgid "Related Object" msgstr "Oggetto correlato" -#: extras/forms/model_forms.py:169 +#: netbox/extras/forms/model_forms.py:169 msgid "" "Enter one choice per line. An optional label may be specified for each " "choice by appending it with a colon. Example:" @@ -7480,15 +8058,16 @@ msgstr "" "Inserisci una scelta per riga. È possibile specificare un'etichetta " "opzionale per ciascuna scelta aggiungendola con i due punti. Esempio:" -#: extras/forms/model_forms.py:212 templates/extras/customlink.html:10 +#: netbox/extras/forms/model_forms.py:212 +#: netbox/templates/extras/customlink.html:10 msgid "Custom Link" msgstr "Link personalizzato" -#: extras/forms/model_forms.py:214 +#: netbox/extras/forms/model_forms.py:214 msgid "Templates" msgstr "Modelli" -#: extras/forms/model_forms.py:226 +#: netbox/extras/forms/model_forms.py:226 #, python-brace-format msgid "" "Jinja2 template code for the link text. Reference the object as {example}. " @@ -7498,7 +8077,7 @@ msgstr "" "come {example}. I link che vengono visualizzati come testo vuoto non " "verranno visualizzati." -#: extras/forms/model_forms.py:230 +#: netbox/extras/forms/model_forms.py:230 #, python-brace-format msgid "" "Jinja2 template code for the link URL. Reference the object as {example}." @@ -7506,55 +8085,61 @@ msgstr "" "Codice modello Jinja2 per l'URL del link. Fai riferimento all'oggetto come " "{example}." -#: extras/forms/model_forms.py:241 extras/forms/model_forms.py:624 +#: netbox/extras/forms/model_forms.py:241 +#: netbox/extras/forms/model_forms.py:624 msgid "Template code" msgstr "Codice modello" -#: extras/forms/model_forms.py:247 templates/extras/exporttemplate.html:12 +#: netbox/extras/forms/model_forms.py:247 +#: netbox/templates/extras/exporttemplate.html:12 msgid "Export Template" msgstr "Modello di esportazione" -#: extras/forms/model_forms.py:249 +#: netbox/extras/forms/model_forms.py:249 msgid "Rendering" msgstr "Rendering" -#: extras/forms/model_forms.py:263 extras/forms/model_forms.py:649 +#: netbox/extras/forms/model_forms.py:263 +#: netbox/extras/forms/model_forms.py:649 msgid "Template content is populated from the remote source selected below." msgstr "" "Il contenuto del modello viene compilato dalla fonte remota selezionata di " "seguito." -#: extras/forms/model_forms.py:270 extras/forms/model_forms.py:656 +#: netbox/extras/forms/model_forms.py:270 +#: netbox/extras/forms/model_forms.py:656 msgid "Must specify either local content or a data file" msgstr "È necessario specificare il contenuto locale o un file di dati" -#: extras/forms/model_forms.py:284 netbox/forms/mixins.py:70 -#: templates/extras/savedfilter.html:10 +#: netbox/extras/forms/model_forms.py:284 netbox/netbox/forms/mixins.py:70 +#: netbox/templates/extras/savedfilter.html:10 msgid "Saved Filter" msgstr "Filtro salvato" -#: extras/forms/model_forms.py:334 +#: netbox/extras/forms/model_forms.py:334 msgid "A notification group specify at least one user or group." msgstr "Un gruppo di notifiche specifica almeno un utente o un gruppo." -#: extras/forms/model_forms.py:356 templates/extras/webhook.html:23 +#: netbox/extras/forms/model_forms.py:356 +#: netbox/templates/extras/webhook.html:23 msgid "HTTP Request" msgstr "Richiesta HTTP" -#: extras/forms/model_forms.py:358 templates/extras/webhook.html:44 +#: netbox/extras/forms/model_forms.py:358 +#: netbox/templates/extras/webhook.html:44 msgid "SSL" msgstr "SSL" -#: extras/forms/model_forms.py:380 +#: netbox/extras/forms/model_forms.py:380 msgid "Action choice" msgstr "Scelta dell'azione" -#: extras/forms/model_forms.py:385 +#: netbox/extras/forms/model_forms.py:385 msgid "Enter conditions in JSON format." msgstr "" "Inserisci le condizioni in JSON formato." -#: extras/forms/model_forms.py:389 +#: netbox/extras/forms/model_forms.py:389 msgid "" "Enter parameters to pass to the action in JSON format." @@ -7562,111 +8147,113 @@ msgstr "" "Inserisci i parametri da passare all'azione in JSON formato." -#: extras/forms/model_forms.py:394 templates/extras/eventrule.html:10 +#: netbox/extras/forms/model_forms.py:394 +#: netbox/templates/extras/eventrule.html:10 msgid "Event Rule" msgstr "Regola dell'evento" -#: extras/forms/model_forms.py:395 +#: netbox/extras/forms/model_forms.py:395 msgid "Triggers" msgstr "Trigger" -#: extras/forms/model_forms.py:442 +#: netbox/extras/forms/model_forms.py:442 msgid "Notification group" msgstr "Gruppo di notifiche" -#: extras/forms/model_forms.py:562 netbox/navigation/menu.py:26 -#: tenancy/tables/tenants.py:22 +#: netbox/extras/forms/model_forms.py:562 netbox/netbox/navigation/menu.py:26 +#: netbox/tenancy/tables/tenants.py:22 msgid "Tenants" msgstr "Inquilini" -#: extras/forms/model_forms.py:606 +#: netbox/extras/forms/model_forms.py:606 msgid "Data is populated from the remote source selected below." msgstr "I dati vengono compilati dalla fonte remota selezionata di seguito." -#: extras/forms/model_forms.py:612 +#: netbox/extras/forms/model_forms.py:612 msgid "Must specify either local data or a data file" msgstr "È necessario specificare dati locali o un file di dati" -#: extras/forms/model_forms.py:631 templates/core/datafile.html:55 +#: netbox/extras/forms/model_forms.py:631 +#: netbox/templates/core/datafile.html:55 msgid "Content" msgstr "Contenuto" -#: extras/forms/reports.py:17 extras/forms/scripts.py:23 +#: netbox/extras/forms/reports.py:17 netbox/extras/forms/scripts.py:23 msgid "Schedule at" msgstr "Programma a" -#: extras/forms/reports.py:18 +#: netbox/extras/forms/reports.py:18 msgid "Schedule execution of report to a set time" msgstr "Pianifica l'esecuzione del rapporto a un orario prestabilito" -#: extras/forms/reports.py:23 extras/forms/scripts.py:29 +#: netbox/extras/forms/reports.py:23 netbox/extras/forms/scripts.py:29 msgid "Recurs every" msgstr "Ricorre ogni" -#: extras/forms/reports.py:27 +#: netbox/extras/forms/reports.py:27 msgid "Interval at which this report is re-run (in minutes)" msgstr "Intervallo di ripetizione del rapporto (in minuti)" -#: extras/forms/reports.py:35 extras/forms/scripts.py:41 +#: netbox/extras/forms/reports.py:35 netbox/extras/forms/scripts.py:41 #, python-brace-format msgid " (current time: {now})" msgstr " (ora corrente: {now})" -#: extras/forms/reports.py:45 extras/forms/scripts.py:51 +#: netbox/extras/forms/reports.py:45 netbox/extras/forms/scripts.py:51 msgid "Scheduled time must be in the future." msgstr "L'orario programmato deve essere futuro." -#: extras/forms/scripts.py:17 +#: netbox/extras/forms/scripts.py:17 msgid "Commit changes" msgstr "Effettua modifiche" -#: extras/forms/scripts.py:18 +#: netbox/extras/forms/scripts.py:18 msgid "Commit changes to the database (uncheck for a dry-run)" msgstr "" "Effettua il commit delle modifiche al database (deseleziona l'opzione «dry " "run»)" -#: extras/forms/scripts.py:24 +#: netbox/extras/forms/scripts.py:24 msgid "Schedule execution of script to a set time" msgstr "Pianifica l'esecuzione dello script a un orario prestabilito" -#: extras/forms/scripts.py:33 +#: netbox/extras/forms/scripts.py:33 msgid "Interval at which this script is re-run (in minutes)" msgstr "Intervallo di riesecuzione dello script (in minuti)" -#: extras/jobs.py:49 +#: netbox/extras/jobs.py:47 msgid "Database changes have been reverted automatically." msgstr "Le modifiche al database sono state annullate automaticamente." -#: extras/jobs.py:55 +#: netbox/extras/jobs.py:53 msgid "Script aborted with error: " msgstr "Script interrotto con errore: " -#: extras/jobs.py:65 +#: netbox/extras/jobs.py:63 msgid "An exception occurred: " msgstr "Si è verificata un'eccezione: " -#: extras/jobs.py:70 +#: netbox/extras/jobs.py:68 msgid "Database changes have been reverted due to error." msgstr "Le modifiche al database sono state annullate a causa di un errore." -#: extras/management/commands/reindex.py:66 +#: netbox/extras/management/commands/reindex.py:66 msgid "No indexers found!" msgstr "Nessun indicizzatore trovato!" -#: extras/models/configs.py:130 +#: netbox/extras/models/configs.py:130 msgid "config context" msgstr "contesto di configurazione" -#: extras/models/configs.py:131 +#: netbox/extras/models/configs.py:131 msgid "config contexts" msgstr "contesti di configurazione" -#: extras/models/configs.py:149 extras/models/configs.py:205 +#: netbox/extras/models/configs.py:149 netbox/extras/models/configs.py:205 msgid "JSON data must be in object form. Example:" msgstr "I dati JSON devono essere in forma oggetto. Esempio:" -#: extras/models/configs.py:169 +#: netbox/extras/models/configs.py:169 msgid "" "Local config context data takes precedence over source contexts in the final" " rendered config context" @@ -7674,19 +8261,19 @@ msgstr "" "I dati del contesto di configurazione locale hanno la precedenza sui " "contesti di origine nel contesto di configurazione finale renderizzato" -#: extras/models/configs.py:224 +#: netbox/extras/models/configs.py:224 msgid "template code" msgstr "codice modello" -#: extras/models/configs.py:225 +#: netbox/extras/models/configs.py:225 msgid "Jinja2 template code." msgstr "Codice modello Jinja2." -#: extras/models/configs.py:228 +#: netbox/extras/models/configs.py:228 msgid "environment parameters" msgstr "parametri ambientali" -#: extras/models/configs.py:233 +#: netbox/extras/models/configs.py:233 msgid "" "Any additional" @@ -7696,43 +8283,43 @@ msgstr "" "href=\"https://jinja.palletsprojects.com/en/3.1.x/api/#jinja2.Environment\">parametri" " aggiuntivi da superare durante la costruzione dell'ambiente Jinja2." -#: extras/models/configs.py:240 +#: netbox/extras/models/configs.py:240 msgid "config template" msgstr "modello di configurazione" -#: extras/models/configs.py:241 +#: netbox/extras/models/configs.py:241 msgid "config templates" msgstr "modelli di configurazione" -#: extras/models/customfields.py:75 +#: netbox/extras/models/customfields.py:75 msgid "The object(s) to which this field applies." msgstr "Gli oggetti a cui si applica questo campo." -#: extras/models/customfields.py:82 +#: netbox/extras/models/customfields.py:82 msgid "The type of data this custom field holds" msgstr "Il tipo di dati che contiene questo campo personalizzato" -#: extras/models/customfields.py:89 +#: netbox/extras/models/customfields.py:89 msgid "The type of NetBox object this field maps to (for object fields)" msgstr "" "Il tipo di oggetto NetBox a cui questo campo è associato (per i campi " "oggetto)" -#: extras/models/customfields.py:95 +#: netbox/extras/models/customfields.py:95 msgid "Internal field name" msgstr "Nome del campo interno" -#: extras/models/customfields.py:99 +#: netbox/extras/models/customfields.py:99 msgid "Only alphanumeric characters and underscores are allowed." msgstr "Sono consentiti solo caratteri alfanumerici e trattini bassi." -#: extras/models/customfields.py:104 +#: netbox/extras/models/customfields.py:104 msgid "Double underscores are not permitted in custom field names." msgstr "" "I doppi caratteri di sottolineatura non sono consentiti nei nomi dei campi " "personalizzati." -#: extras/models/customfields.py:115 +#: netbox/extras/models/customfields.py:115 msgid "" "Name of the field as displayed to users (if not provided, 'the field's name " "will be used)" @@ -7740,21 +8327,21 @@ msgstr "" "Nome del campo visualizzato agli utenti (se non fornito, «verrà utilizzato " "il nome del campo)" -#: extras/models/customfields.py:119 extras/models/models.py:317 +#: netbox/extras/models/customfields.py:119 netbox/extras/models/models.py:317 msgid "group name" msgstr "nome del gruppo" -#: extras/models/customfields.py:122 +#: netbox/extras/models/customfields.py:122 msgid "Custom fields within the same group will be displayed together" msgstr "" "I campi personalizzati all'interno dello stesso gruppo verranno visualizzati" " insieme" -#: extras/models/customfields.py:130 +#: netbox/extras/models/customfields.py:130 msgid "required" msgstr "necessario" -#: extras/models/customfields.py:132 +#: netbox/extras/models/customfields.py:132 msgid "" "This field is required when creating new objects or editing an existing " "object." @@ -7762,19 +8349,19 @@ msgstr "" "Questo campo è obbligatorio quando si creano nuovi oggetti o si modifica un " "oggetto esistente." -#: extras/models/customfields.py:135 +#: netbox/extras/models/customfields.py:135 msgid "must be unique" msgstr "deve essere unico" -#: extras/models/customfields.py:137 +#: netbox/extras/models/customfields.py:137 msgid "The value of this field must be unique for the assigned object" msgstr "Il valore di questo campo deve essere univoco per l'oggetto assegnato" -#: extras/models/customfields.py:140 +#: netbox/extras/models/customfields.py:140 msgid "search weight" msgstr "peso di ricerca" -#: extras/models/customfields.py:143 +#: netbox/extras/models/customfields.py:143 msgid "" "Weighting for search. Lower values are considered more important. Fields " "with a search weight of zero will be ignored." @@ -7782,11 +8369,11 @@ msgstr "" "Ponderazione per la ricerca. I valori più bassi sono considerati più " "importanti. I campi con un peso di ricerca pari a zero verranno ignorati." -#: extras/models/customfields.py:148 +#: netbox/extras/models/customfields.py:148 msgid "filter logic" msgstr "logica di filtro" -#: extras/models/customfields.py:152 +#: netbox/extras/models/customfields.py:152 msgid "" "Loose matches any instance of a given string; exact matches the entire " "field." @@ -7794,11 +8381,11 @@ msgstr "" "Loose corrisponde a qualsiasi istanza di una determinata stringa; exact " "corrisponde all'intero campo." -#: extras/models/customfields.py:155 +#: netbox/extras/models/customfields.py:155 msgid "default" msgstr "predefinito" -#: extras/models/customfields.py:159 +#: netbox/extras/models/customfields.py:159 msgid "" "Default value for the field (must be a JSON value). Encapsulate strings with" " double quotes (e.g. \"Foo\")." @@ -7806,7 +8393,7 @@ msgstr "" "Valore predefinito per il campo (deve essere un valore JSON). Incapsula le " "stringhe con virgolette doppie (ad esempio «Foo»)." -#: extras/models/customfields.py:166 +#: netbox/extras/models/customfields.py:166 msgid "" "Filter the object selection choices using a query_params dict (must be a " "JSON value).Encapsulate strings with double quotes (e.g. \"Foo\")." @@ -7815,35 +8402,35 @@ msgstr "" "(deve essere un valore JSON). Incapsula le stringhe con virgolette doppie " "(ad esempio «Foo»)." -#: extras/models/customfields.py:172 +#: netbox/extras/models/customfields.py:172 msgid "display weight" msgstr "peso dello schermo" -#: extras/models/customfields.py:173 +#: netbox/extras/models/customfields.py:173 msgid "Fields with higher weights appear lower in a form." msgstr "I campi con pesi più alti appaiono più bassi in un modulo." -#: extras/models/customfields.py:178 +#: netbox/extras/models/customfields.py:178 msgid "minimum value" msgstr "valore minimo" -#: extras/models/customfields.py:179 +#: netbox/extras/models/customfields.py:179 msgid "Minimum allowed value (for numeric fields)" msgstr "Valore minimo consentito (per campi numerici)" -#: extras/models/customfields.py:184 +#: netbox/extras/models/customfields.py:184 msgid "maximum value" msgstr "valore massimo" -#: extras/models/customfields.py:185 +#: netbox/extras/models/customfields.py:185 msgid "Maximum allowed value (for numeric fields)" msgstr "Valore massimo consentito (per campi numerici)" -#: extras/models/customfields.py:191 +#: netbox/extras/models/customfields.py:191 msgid "validation regex" msgstr "regex di convalida" -#: extras/models/customfields.py:193 +#: netbox/extras/models/customfields.py:193 #, python-brace-format msgid "" "Regular expression to enforce on text field values. Use ^ and $ to force " @@ -7854,194 +8441,196 @@ msgstr "" "per forzare la corrispondenza dell'intera stringa. Ad esempio ^ " "[A-Z]{3}$ limiterà i valori a esattamente tre lettere maiuscole." -#: extras/models/customfields.py:201 +#: netbox/extras/models/customfields.py:201 msgid "choice set" msgstr "set di scelta" -#: extras/models/customfields.py:210 +#: netbox/extras/models/customfields.py:210 msgid "Specifies whether the custom field is displayed in the UI" msgstr "" "Specifica se il campo personalizzato viene visualizzato nell'interfaccia " "utente" -#: extras/models/customfields.py:217 +#: netbox/extras/models/customfields.py:217 msgid "Specifies whether the custom field value can be edited in the UI" msgstr "" "Specifica se il valore del campo personalizzato può essere modificato " "nell'interfaccia utente" -#: extras/models/customfields.py:221 +#: netbox/extras/models/customfields.py:221 msgid "is cloneable" msgstr "è clonabile" -#: extras/models/customfields.py:222 +#: netbox/extras/models/customfields.py:222 msgid "Replicate this value when cloning objects" msgstr "Replica questo valore durante la clonazione di oggetti" -#: extras/models/customfields.py:239 +#: netbox/extras/models/customfields.py:239 msgid "custom field" msgstr "campo personalizzato" -#: extras/models/customfields.py:240 +#: netbox/extras/models/customfields.py:240 msgid "custom fields" msgstr "campi personalizzati" -#: extras/models/customfields.py:329 +#: netbox/extras/models/customfields.py:329 #, python-brace-format msgid "Invalid default value \"{value}\": {error}" msgstr "Valore predefinito non valido»{value}«: {error}" -#: extras/models/customfields.py:336 +#: netbox/extras/models/customfields.py:336 msgid "A minimum value may be set only for numeric fields" msgstr "È possibile impostare un valore minimo solo per i campi numerici" -#: extras/models/customfields.py:338 +#: netbox/extras/models/customfields.py:338 msgid "A maximum value may be set only for numeric fields" msgstr "È possibile impostare un valore massimo solo per i campi numerici" -#: extras/models/customfields.py:348 +#: netbox/extras/models/customfields.py:348 msgid "" "Regular expression validation is supported only for text and URL fields" msgstr "" "La convalida delle espressioni regolari è supportata solo per i campi di " "testo e URL" -#: extras/models/customfields.py:354 +#: netbox/extras/models/customfields.py:354 msgid "Uniqueness cannot be enforced for boolean fields" msgstr "L'unicità non può essere applicata per i campi booleani" -#: extras/models/customfields.py:364 +#: netbox/extras/models/customfields.py:364 msgid "Selection fields must specify a set of choices." msgstr "I campi di selezione devono specificare una serie di scelte." -#: extras/models/customfields.py:368 +#: netbox/extras/models/customfields.py:368 msgid "Choices may be set only on selection fields." msgstr "Le scelte possono essere impostate solo nei campi di selezione." -#: extras/models/customfields.py:375 +#: netbox/extras/models/customfields.py:375 msgid "Object fields must define an object type." msgstr "I campi oggetto devono definire un tipo di oggetto." -#: extras/models/customfields.py:379 +#: netbox/extras/models/customfields.py:379 #, python-brace-format msgid "{type} fields may not define an object type." msgstr "{type} i campi non possono definire un tipo di oggetto." -#: extras/models/customfields.py:386 +#: netbox/extras/models/customfields.py:386 msgid "A related object filter can be defined only for object fields." msgstr "" "Un filtro oggetto correlato può essere definito solo per i campi oggetto." -#: extras/models/customfields.py:390 +#: netbox/extras/models/customfields.py:390 msgid "Filter must be defined as a dictionary mapping attributes to values." msgstr "" "Il filtro deve essere definito come un dizionario che associa gli attributi " "ai valori." -#: extras/models/customfields.py:469 +#: netbox/extras/models/customfields.py:469 msgid "True" msgstr "Vero" -#: extras/models/customfields.py:470 +#: netbox/extras/models/customfields.py:470 msgid "False" msgstr "Falso" -#: extras/models/customfields.py:560 +#: netbox/extras/models/customfields.py:560 #, python-brace-format msgid "Values must match this regex: {regex}" msgstr "I valori devono corrispondere a questa regex: {regex}" -#: extras/models/customfields.py:654 +#: netbox/extras/models/customfields.py:654 msgid "Value must be a string." msgstr "Il valore deve essere una stringa." -#: extras/models/customfields.py:656 +#: netbox/extras/models/customfields.py:656 #, python-brace-format msgid "Value must match regex '{regex}'" msgstr "Il valore deve corrispondere a regex '{regex}»" -#: extras/models/customfields.py:661 +#: netbox/extras/models/customfields.py:661 msgid "Value must be an integer." msgstr "Il valore deve essere un numero intero." -#: extras/models/customfields.py:664 extras/models/customfields.py:679 +#: netbox/extras/models/customfields.py:664 +#: netbox/extras/models/customfields.py:679 #, python-brace-format msgid "Value must be at least {minimum}" msgstr "Il valore deve essere almeno {minimum}" -#: extras/models/customfields.py:668 extras/models/customfields.py:683 +#: netbox/extras/models/customfields.py:668 +#: netbox/extras/models/customfields.py:683 #, python-brace-format msgid "Value must not exceed {maximum}" msgstr "Il valore non deve superare {maximum}" -#: extras/models/customfields.py:676 +#: netbox/extras/models/customfields.py:676 msgid "Value must be a decimal." msgstr "Il valore deve essere decimale." -#: extras/models/customfields.py:688 +#: netbox/extras/models/customfields.py:688 msgid "Value must be true or false." msgstr "Il valore deve essere vero o falso." -#: extras/models/customfields.py:696 +#: netbox/extras/models/customfields.py:696 msgid "Date values must be in ISO 8601 format (YYYY-MM-DD)." msgstr "I valori della data devono essere in formato ISO 8601 (AAAA-MM-GG)." -#: extras/models/customfields.py:705 +#: netbox/extras/models/customfields.py:705 msgid "Date and time values must be in ISO 8601 format (YYYY-MM-DD HH:MM:SS)." msgstr "" "I valori di data e ora devono essere in formato ISO 8601 (AAAA-MM-GG " "HH:MM:SS)." -#: extras/models/customfields.py:712 +#: netbox/extras/models/customfields.py:712 #, python-brace-format msgid "Invalid choice ({value}) for choice set {choiceset}." msgstr "Scelta non valida ({value}) per il set a scelta {choiceset}." -#: extras/models/customfields.py:722 +#: netbox/extras/models/customfields.py:722 #, python-brace-format msgid "Invalid choice(s) ({value}) for choice set {choiceset}." msgstr "Scelte non valide ({value}) per il set a scelta {choiceset}." -#: extras/models/customfields.py:731 +#: netbox/extras/models/customfields.py:731 #, python-brace-format msgid "Value must be an object ID, not {type}" msgstr "Il valore deve essere un ID oggetto, non {type}" -#: extras/models/customfields.py:737 +#: netbox/extras/models/customfields.py:737 #, python-brace-format msgid "Value must be a list of object IDs, not {type}" msgstr "Il valore deve essere un elenco di ID oggetto, non {type}" -#: extras/models/customfields.py:741 +#: netbox/extras/models/customfields.py:741 #, python-brace-format msgid "Found invalid object ID: {id}" msgstr "È stato trovato un ID oggetto non valido: {id}" -#: extras/models/customfields.py:744 +#: netbox/extras/models/customfields.py:744 msgid "Required field cannot be empty." msgstr "Il campo obbligatorio non può essere vuoto." -#: extras/models/customfields.py:763 +#: netbox/extras/models/customfields.py:763 msgid "Base set of predefined choices (optional)" msgstr "Set base di scelte predefinite (opzionale)" -#: extras/models/customfields.py:775 +#: netbox/extras/models/customfields.py:775 msgid "Choices are automatically ordered alphabetically" msgstr "Le scelte vengono ordinate automaticamente alfabeticamente" -#: extras/models/customfields.py:782 +#: netbox/extras/models/customfields.py:782 msgid "custom field choice set" msgstr "set di scelta dei campi personalizzati" -#: extras/models/customfields.py:783 +#: netbox/extras/models/customfields.py:783 msgid "custom field choice sets" msgstr "set di scelte di campi personalizzati" -#: extras/models/customfields.py:825 +#: netbox/extras/models/customfields.py:825 msgid "Must define base or extra choices." msgstr "È necessario definire scelte di base o extra." -#: extras/models/customfields.py:849 +#: netbox/extras/models/customfields.py:849 #, python-brace-format msgid "" "Cannot remove choice {choice} as there are {model} objects which reference " @@ -8050,60 +8639,60 @@ msgstr "" "Impossibile rimuovere la scelta {choice} come ce ne sono {model} oggetti che" " vi fanno riferimento." -#: extras/models/dashboard.py:18 +#: netbox/extras/models/dashboard.py:18 msgid "layout" msgstr "disposizione" -#: extras/models/dashboard.py:22 +#: netbox/extras/models/dashboard.py:22 msgid "config" msgstr "config" -#: extras/models/dashboard.py:27 +#: netbox/extras/models/dashboard.py:27 msgid "dashboard" msgstr "cruscotto" -#: extras/models/dashboard.py:28 +#: netbox/extras/models/dashboard.py:28 msgid "dashboards" msgstr "cruscotti" -#: extras/models/models.py:52 +#: netbox/extras/models/models.py:52 msgid "object types" msgstr "tipi di oggetti" -#: extras/models/models.py:53 +#: netbox/extras/models/models.py:53 msgid "The object(s) to which this rule applies." msgstr "L'oggetto o gli oggetti a cui si applica questa regola." -#: extras/models/models.py:67 +#: netbox/extras/models/models.py:67 msgid "The types of event which will trigger this rule." msgstr "I tipi di evento che attiveranno questa regola." -#: extras/models/models.py:74 +#: netbox/extras/models/models.py:74 msgid "conditions" msgstr "condizioni" -#: extras/models/models.py:77 +#: netbox/extras/models/models.py:77 msgid "" "A set of conditions which determine whether the event will be generated." msgstr "Una serie di condizioni che determinano se l'evento verrà generato." -#: extras/models/models.py:85 +#: netbox/extras/models/models.py:85 msgid "action type" msgstr "tipo di azione" -#: extras/models/models.py:104 +#: netbox/extras/models/models.py:104 msgid "Additional data to pass to the action object" msgstr "Dati aggiuntivi da passare all'oggetto azione" -#: extras/models/models.py:116 +#: netbox/extras/models/models.py:116 msgid "event rule" msgstr "regola dell'evento" -#: extras/models/models.py:117 +#: netbox/extras/models/models.py:117 msgid "event rules" msgstr "regole dell'evento" -#: extras/models/models.py:166 +#: netbox/extras/models/models.py:166 msgid "" "This URL will be called using the HTTP method defined when the webhook is " "called. Jinja2 template processing is supported with the same context as the" @@ -8113,7 +8702,7 @@ msgstr "" "chiamato il webhook. L'elaborazione dei modelli Jinja2 è supportata nello " "stesso contesto del corpo della richiesta." -#: extras/models/models.py:181 +#: netbox/extras/models/models.py:181 msgid "" "The complete list of official content types is available qui." -#: extras/models/models.py:186 +#: netbox/extras/models/models.py:186 msgid "additional headers" msgstr "intestazioni aggiuntive" -#: extras/models/models.py:189 +#: netbox/extras/models/models.py:189 msgid "" "User-supplied HTTP headers to be sent with the request in addition to the " "HTTP content type. Headers should be defined in the format Name: " @@ -8139,11 +8728,11 @@ msgstr "" "Nome: Value. L'elaborazione dei modelli Jinja2 è supportata " "nello stesso contesto del corpo della richiesta (sotto)." -#: extras/models/models.py:195 +#: netbox/extras/models/models.py:195 msgid "body template" msgstr "modello di corpo" -#: extras/models/models.py:198 +#: netbox/extras/models/models.py:198 msgid "" "Jinja2 template for a custom request body. If blank, a JSON object " "representing the change will be included. Available context data includes: " @@ -8156,11 +8745,11 @@ msgstr "" "timestamp, nome utente, id_richiesta," " e dato." -#: extras/models/models.py:204 +#: netbox/extras/models/models.py:204 msgid "secret" msgstr "segreto" -#: extras/models/models.py:208 +#: netbox/extras/models/models.py:208 msgid "" "When provided, the request will include a X-Hook-Signature " "header containing a HMAC hex digest of the payload body using the secret as " @@ -8171,15 +8760,15 @@ msgstr "" "che utilizza il segreto come chiave. Il segreto non viene trasmesso nella " "richiesta." -#: extras/models/models.py:215 +#: netbox/extras/models/models.py:215 msgid "Enable SSL certificate verification. Disable with caution!" msgstr "Abilita la verifica del certificato SSL. Disabilita con cautela!" -#: extras/models/models.py:221 templates/extras/webhook.html:51 +#: netbox/extras/models/models.py:221 netbox/templates/extras/webhook.html:51 msgid "CA File Path" msgstr "Percorso del file CA" -#: extras/models/models.py:223 +#: netbox/extras/models/models.py:223 msgid "" "The specific CA certificate file to use for SSL verification. Leave blank to" " use the system defaults." @@ -8187,66 +8776,66 @@ msgstr "" "Il file di certificato CA specifico da utilizzare per la verifica SSL. " "Lascia vuoto per utilizzare le impostazioni predefinite del sistema." -#: extras/models/models.py:234 +#: netbox/extras/models/models.py:234 msgid "webhook" msgstr "webhook" -#: extras/models/models.py:235 +#: netbox/extras/models/models.py:235 msgid "webhooks" msgstr "webhook" -#: extras/models/models.py:253 +#: netbox/extras/models/models.py:253 msgid "Do not specify a CA certificate file if SSL verification is disabled." msgstr "" "Non specificare un file di certificato CA se la verifica SSL è disabilitata." -#: extras/models/models.py:293 +#: netbox/extras/models/models.py:293 msgid "The object type(s) to which this link applies." msgstr "I tipi di oggetto a cui si applica questo link." -#: extras/models/models.py:305 +#: netbox/extras/models/models.py:305 msgid "link text" msgstr "testo del link" -#: extras/models/models.py:306 +#: netbox/extras/models/models.py:306 msgid "Jinja2 template code for link text" msgstr "Codice modello Jinja2 per il testo del link" -#: extras/models/models.py:309 +#: netbox/extras/models/models.py:309 msgid "link URL" msgstr "URL del collegamento" -#: extras/models/models.py:310 +#: netbox/extras/models/models.py:310 msgid "Jinja2 template code for link URL" msgstr "Codice modello Jinja2 per l'URL del collegamento" -#: extras/models/models.py:320 +#: netbox/extras/models/models.py:320 msgid "Links with the same group will appear as a dropdown menu" msgstr "" "I collegamenti con lo stesso gruppo verranno visualizzati come menu a " "discesa" -#: extras/models/models.py:330 +#: netbox/extras/models/models.py:330 msgid "new window" msgstr "nuova finestra" -#: extras/models/models.py:332 +#: netbox/extras/models/models.py:332 msgid "Force link to open in a new window" msgstr "Forza l'apertura del link in una nuova finestra" -#: extras/models/models.py:341 +#: netbox/extras/models/models.py:341 msgid "custom link" msgstr "link personalizzato" -#: extras/models/models.py:342 +#: netbox/extras/models/models.py:342 msgid "custom links" msgstr "link personalizzati" -#: extras/models/models.py:389 +#: netbox/extras/models/models.py:389 msgid "The object type(s) to which this template applies." msgstr "I tipi di oggetto a cui si applica questo modello." -#: extras/models/models.py:402 +#: netbox/extras/models/models.py:402 msgid "" "Jinja2 template code. The list of objects being exported is passed as a " "context variable named queryset." @@ -8254,1091 +8843,1157 @@ msgstr "" "Codice modello Jinja2. L'elenco degli oggetti da esportare viene passato " "come variabile di contesto denominata set di interrogazioni." -#: extras/models/models.py:410 +#: netbox/extras/models/models.py:410 msgid "Defaults to text/plain; charset=utf-8" msgstr "Il valore predefinito è testo/semplice; charset=utf-8" -#: extras/models/models.py:413 +#: netbox/extras/models/models.py:413 msgid "file extension" msgstr "estensione del file" -#: extras/models/models.py:416 +#: netbox/extras/models/models.py:416 msgid "Extension to append to the rendered filename" msgstr "Estensione da aggiungere al nome del file renderizzato" -#: extras/models/models.py:419 +#: netbox/extras/models/models.py:419 msgid "as attachment" msgstr "come allegato" -#: extras/models/models.py:421 +#: netbox/extras/models/models.py:421 msgid "Download file as attachment" msgstr "Scarica il file come allegato" -#: extras/models/models.py:430 +#: netbox/extras/models/models.py:430 msgid "export template" msgstr "modello di esportazione" -#: extras/models/models.py:431 +#: netbox/extras/models/models.py:431 msgid "export templates" msgstr "modelli di esportazione" -#: extras/models/models.py:448 +#: netbox/extras/models/models.py:448 #, python-brace-format msgid "\"{name}\" is a reserved name. Please choose a different name." msgstr "«{name}\"è un nome riservato. Scegli un nome diverso." -#: extras/models/models.py:498 +#: netbox/extras/models/models.py:498 msgid "The object type(s) to which this filter applies." msgstr "I tipi di oggetto a cui si applica questo filtro." -#: extras/models/models.py:530 +#: netbox/extras/models/models.py:530 msgid "shared" msgstr "condiviso" -#: extras/models/models.py:543 +#: netbox/extras/models/models.py:543 msgid "saved filter" msgstr "filtro salvato" -#: extras/models/models.py:544 +#: netbox/extras/models/models.py:544 msgid "saved filters" msgstr "filtri salvati" -#: extras/models/models.py:562 +#: netbox/extras/models/models.py:562 msgid "Filter parameters must be stored as a dictionary of keyword arguments." msgstr "" "I parametri del filtro devono essere memorizzati come dizionario degli " "argomenti delle parole chiave." -#: extras/models/models.py:590 +#: netbox/extras/models/models.py:590 msgid "image height" msgstr "altezza dell'immagine" -#: extras/models/models.py:593 +#: netbox/extras/models/models.py:593 msgid "image width" msgstr "larghezza dell'immagine" -#: extras/models/models.py:610 +#: netbox/extras/models/models.py:610 msgid "image attachment" msgstr "allegato immagine" -#: extras/models/models.py:611 +#: netbox/extras/models/models.py:611 msgid "image attachments" msgstr "allegati di immagini" -#: extras/models/models.py:625 +#: netbox/extras/models/models.py:625 #, python-brace-format msgid "Image attachments cannot be assigned to this object type ({type})." msgstr "" "Gli allegati di immagini non possono essere assegnati a questo tipo di " "oggetto ({type})." -#: extras/models/models.py:688 +#: netbox/extras/models/models.py:688 msgid "kind" msgstr "gentile" -#: extras/models/models.py:702 +#: netbox/extras/models/models.py:702 msgid "journal entry" msgstr "voce nel diario" -#: extras/models/models.py:703 +#: netbox/extras/models/models.py:703 msgid "journal entries" msgstr "voci di diario" -#: extras/models/models.py:718 +#: netbox/extras/models/models.py:718 #, python-brace-format msgid "Journaling is not supported for this object type ({type})." msgstr "Il journaling non è supportato per questo tipo di oggetto ({type})." -#: extras/models/models.py:760 +#: netbox/extras/models/models.py:760 msgid "bookmark" msgstr "segnalibro" -#: extras/models/models.py:761 +#: netbox/extras/models/models.py:761 msgid "bookmarks" msgstr "segnalibri" -#: extras/models/models.py:774 +#: netbox/extras/models/models.py:774 #, python-brace-format msgid "Bookmarks cannot be assigned to this object type ({type})." msgstr "" "I segnalibri non possono essere assegnati a questo tipo di oggetto ({type})." -#: extras/models/notifications.py:43 +#: netbox/extras/models/notifications.py:43 msgid "read" msgstr "leggere" -#: extras/models/notifications.py:66 +#: netbox/extras/models/notifications.py:66 msgid "event" msgstr "evento" -#: extras/models/notifications.py:84 +#: netbox/extras/models/notifications.py:84 msgid "notification" msgstr "notifica" -#: extras/models/notifications.py:85 +#: netbox/extras/models/notifications.py:85 msgid "notifications" msgstr "notifiche" -#: extras/models/notifications.py:99 extras/models/notifications.py:234 +#: netbox/extras/models/notifications.py:99 +#: netbox/extras/models/notifications.py:234 #, python-brace-format msgid "Objects of this type ({type}) do not support notifications." msgstr "Oggetti di questo tipo ({type}) non supportano le notifiche." -#: extras/models/notifications.py:137 users/models/users.py:58 -#: users/models/users.py:77 +#: netbox/extras/models/notifications.py:137 netbox/users/models/users.py:58 +#: netbox/users/models/users.py:77 msgid "groups" msgstr "gruppi" -#: extras/models/notifications.py:143 users/models/users.py:93 +#: netbox/extras/models/notifications.py:143 netbox/users/models/users.py:93 msgid "users" msgstr "utenti" -#: extras/models/notifications.py:152 +#: netbox/extras/models/notifications.py:152 msgid "notification group" msgstr "gruppo di notifiche" -#: extras/models/notifications.py:153 +#: netbox/extras/models/notifications.py:153 msgid "notification groups" msgstr "gruppi di notifica" -#: extras/models/notifications.py:217 +#: netbox/extras/models/notifications.py:217 msgid "subscription" msgstr "sottoscrizione" -#: extras/models/notifications.py:218 +#: netbox/extras/models/notifications.py:218 msgid "subscriptions" msgstr "sottoscrizioni" -#: extras/models/scripts.py:42 +#: netbox/extras/models/scripts.py:42 msgid "is executable" msgstr "è eseguibile" -#: extras/models/scripts.py:64 +#: netbox/extras/models/scripts.py:64 msgid "script" msgstr "sceneggiatura" -#: extras/models/scripts.py:65 +#: netbox/extras/models/scripts.py:65 msgid "scripts" msgstr "copioni" -#: extras/models/scripts.py:111 +#: netbox/extras/models/scripts.py:111 msgid "script module" msgstr "modulo script" -#: extras/models/scripts.py:112 +#: netbox/extras/models/scripts.py:112 msgid "script modules" msgstr "moduli di script" -#: extras/models/search.py:22 +#: netbox/extras/models/search.py:22 msgid "timestamp" msgstr "timestamp" -#: extras/models/search.py:37 +#: netbox/extras/models/search.py:37 msgid "field" msgstr "campo" -#: extras/models/search.py:45 +#: netbox/extras/models/search.py:45 msgid "value" msgstr "valore" -#: extras/models/search.py:56 +#: netbox/extras/models/search.py:56 msgid "cached value" msgstr "valore memorizzato nella cache" -#: extras/models/search.py:57 +#: netbox/extras/models/search.py:57 msgid "cached values" msgstr "valori memorizzati nella cache" -#: extras/models/staging.py:44 +#: netbox/extras/models/staging.py:44 msgid "branch" msgstr "filiale" -#: extras/models/staging.py:45 +#: netbox/extras/models/staging.py:45 msgid "branches" msgstr "rami" -#: extras/models/staging.py:97 +#: netbox/extras/models/staging.py:97 msgid "staged change" msgstr "cambiamento graduale" -#: extras/models/staging.py:98 +#: netbox/extras/models/staging.py:98 msgid "staged changes" msgstr "modifiche graduali" -#: extras/models/tags.py:40 +#: netbox/extras/models/tags.py:40 msgid "The object type(s) to which this tag can be applied." msgstr "I tipi di oggetto a cui è possibile applicare questo tag." -#: extras/models/tags.py:49 +#: netbox/extras/models/tags.py:49 msgid "tag" msgstr "tag" -#: extras/models/tags.py:50 +#: netbox/extras/models/tags.py:50 msgid "tags" msgstr "tag" -#: extras/models/tags.py:78 +#: netbox/extras/models/tags.py:78 msgid "tagged item" msgstr "articolo etichettato" -#: extras/models/tags.py:79 +#: netbox/extras/models/tags.py:79 msgid "tagged items" msgstr "articoli etichettati" -#: extras/scripts.py:429 +#: netbox/extras/scripts.py:429 msgid "Script Data" msgstr "Dati dello script" -#: extras/scripts.py:433 +#: netbox/extras/scripts.py:433 msgid "Script Execution Parameters" msgstr "Parametri di esecuzione dello script" -#: extras/tables/columns.py:12 templates/htmx/notifications.html:18 +#: netbox/extras/tables/columns.py:12 +#: netbox/templates/htmx/notifications.html:18 msgid "Dismiss" msgstr "Ignora" -#: extras/tables/tables.py:62 extras/tables/tables.py:159 -#: extras/tables/tables.py:184 extras/tables/tables.py:250 -#: extras/tables/tables.py:276 extras/tables/tables.py:412 -#: extras/tables/tables.py:446 templates/extras/customfield.html:105 -#: templates/extras/eventrule.html:27 templates/users/objectpermission.html:64 -#: users/tables.py:80 +#: netbox/extras/tables/tables.py:62 netbox/extras/tables/tables.py:159 +#: netbox/extras/tables/tables.py:184 netbox/extras/tables/tables.py:250 +#: netbox/extras/tables/tables.py:276 netbox/extras/tables/tables.py:412 +#: netbox/extras/tables/tables.py:446 +#: netbox/templates/extras/customfield.html:105 +#: netbox/templates/extras/eventrule.html:27 +#: netbox/templates/users/objectpermission.html:64 netbox/users/tables.py:80 msgid "Object Types" msgstr "Tipi di oggetti" -#: extras/tables/tables.py:69 +#: netbox/extras/tables/tables.py:69 msgid "Validate Uniqueness" msgstr "Convalida l'unicità" -#: extras/tables/tables.py:73 +#: netbox/extras/tables/tables.py:73 msgid "Visible" msgstr "Visibile" -#: extras/tables/tables.py:76 +#: netbox/extras/tables/tables.py:76 msgid "Editable" msgstr "Modificabile" -#: extras/tables/tables.py:82 +#: netbox/extras/tables/tables.py:82 msgid "Related Object Type" msgstr "Tipo di oggetto correlato" -#: extras/tables/tables.py:86 templates/extras/customfield.html:51 +#: netbox/extras/tables/tables.py:86 +#: netbox/templates/extras/customfield.html:51 msgid "Choice Set" msgstr "Set di scelta" -#: extras/tables/tables.py:94 +#: netbox/extras/tables/tables.py:94 msgid "Is Cloneable" msgstr "È clonabile" -#: extras/tables/tables.py:98 templates/extras/customfield.html:118 +#: netbox/extras/tables/tables.py:98 +#: netbox/templates/extras/customfield.html:118 msgid "Minimum Value" msgstr "Valore minimo" -#: extras/tables/tables.py:101 templates/extras/customfield.html:122 +#: netbox/extras/tables/tables.py:101 +#: netbox/templates/extras/customfield.html:122 msgid "Maximum Value" msgstr "Valore massimo" -#: extras/tables/tables.py:104 +#: netbox/extras/tables/tables.py:104 msgid "Validation Regex" msgstr "Validazione Regex" -#: extras/tables/tables.py:137 +#: netbox/extras/tables/tables.py:137 msgid "Count" msgstr "Conta" -#: extras/tables/tables.py:140 +#: netbox/extras/tables/tables.py:140 msgid "Order Alphabetically" msgstr "Ordina alfabeticamente" -#: extras/tables/tables.py:165 templates/extras/customlink.html:33 +#: netbox/extras/tables/tables.py:165 +#: netbox/templates/extras/customlink.html:33 msgid "New Window" msgstr "Nuova finestra" -#: extras/tables/tables.py:187 +#: netbox/extras/tables/tables.py:187 msgid "As Attachment" msgstr "Come allegato" -#: extras/tables/tables.py:195 extras/tables/tables.py:487 -#: extras/tables/tables.py:522 templates/core/datafile.html:24 -#: templates/dcim/device/render_config.html:22 -#: templates/extras/configcontext.html:39 -#: templates/extras/configtemplate.html:31 -#: templates/extras/exporttemplate.html:45 -#: templates/generic/bulk_import.html:35 -#: templates/virtualization/virtualmachine/render_config.html:22 +#: netbox/extras/tables/tables.py: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/generic/bulk_import.html:35 +#: netbox/templates/virtualization/virtualmachine/render_config.html:22 msgid "Data File" msgstr "File di dati" -#: extras/tables/tables.py:200 extras/tables/tables.py:499 -#: extras/tables/tables.py:527 +#: netbox/extras/tables/tables.py:200 netbox/extras/tables/tables.py:499 +#: netbox/extras/tables/tables.py:527 msgid "Synced" msgstr "Sincronizzato" -#: extras/tables/tables.py:227 +#: netbox/extras/tables/tables.py:227 msgid "Image" msgstr "Immagine" -#: extras/tables/tables.py:232 +#: netbox/extras/tables/tables.py:232 msgid "Size (Bytes)" msgstr "Dimensione (byte)" -#: extras/tables/tables.py:339 +#: netbox/extras/tables/tables.py:339 msgid "Read" msgstr "Leggi" -#: extras/tables/tables.py:382 +#: netbox/extras/tables/tables.py:382 msgid "SSL Validation" msgstr "Validazione SSL" -#: extras/tables/tables.py:418 templates/extras/eventrule.html:37 +#: netbox/extras/tables/tables.py:418 +#: netbox/templates/extras/eventrule.html:37 msgid "Event Types" msgstr "Tipi di eventi" -#: extras/tables/tables.py:535 netbox/navigation/menu.py:77 -#: templates/dcim/devicerole.html:8 +#: netbox/extras/tables/tables.py:535 netbox/netbox/navigation/menu.py:77 +#: netbox/templates/dcim/devicerole.html:8 msgid "Device Roles" msgstr "Ruoli dei dispositivi" -#: extras/tables/tables.py:587 +#: netbox/extras/tables/tables.py:587 msgid "Comments (Short)" msgstr "Commenti (brevi)" -#: extras/tables/tables.py:606 extras/tables/tables.py:640 +#: netbox/extras/tables/tables.py:606 netbox/extras/tables/tables.py:640 msgid "Line" msgstr "Linea" -#: extras/tables/tables.py:613 extras/tables/tables.py:650 +#: netbox/extras/tables/tables.py:613 netbox/extras/tables/tables.py:650 msgid "Level" msgstr "Livello" -#: extras/tables/tables.py:619 extras/tables/tables.py:659 +#: netbox/extras/tables/tables.py:619 netbox/extras/tables/tables.py:659 msgid "Message" msgstr "Messaggio" -#: extras/tables/tables.py:643 +#: netbox/extras/tables/tables.py:643 msgid "Method" msgstr "Metodo" -#: extras/validators.py:15 +#: netbox/extras/validators.py:15 #, python-format msgid "Ensure this value is equal to %(limit_value)s." msgstr "Assicurati che questo valore sia uguale a %(limit_value)s." -#: extras/validators.py:26 +#: netbox/extras/validators.py:26 #, python-format msgid "Ensure this value does not equal %(limit_value)s." msgstr "Assicurati che questo valore non sia uguale %(limit_value)s." -#: extras/validators.py:37 +#: netbox/extras/validators.py:37 msgid "This field must be empty." msgstr "Questo campo deve essere vuoto." -#: extras/validators.py:52 +#: netbox/extras/validators.py:52 msgid "This field must not be empty." msgstr "Questo campo non deve essere vuoto." -#: extras/validators.py:94 +#: netbox/extras/validators.py:94 msgid "Validation rules must be passed as a dictionary" msgstr "Le regole di convalida devono essere passate come dizionario" -#: extras/validators.py:119 +#: netbox/extras/validators.py:119 #, python-brace-format msgid "Custom validation failed for {attribute}: {exception}" msgstr "Convalida personalizzata non riuscita per {attribute}: {exception}" -#: extras/validators.py:133 +#: netbox/extras/validators.py:133 #, python-brace-format msgid "Invalid attribute \"{name}\" for request" msgstr "Attributo non valido»{name}\"per richiesta" -#: extras/validators.py:150 +#: netbox/extras/validators.py:150 #, python-brace-format msgid "Invalid attribute \"{name}\" for {model}" msgstr "Attributo non valido»{name}\"per {model}" -#: extras/views.py:960 +#: netbox/extras/views.py:960 msgid "Your dashboard has been reset." msgstr "La tua dashboard è stata reimpostata." -#: extras/views.py:1006 +#: netbox/extras/views.py:1006 msgid "Added widget: " msgstr "Widget aggiunto: " -#: extras/views.py:1047 +#: netbox/extras/views.py:1047 msgid "Updated widget: " msgstr "Widget aggiornato: " -#: extras/views.py:1083 +#: netbox/extras/views.py:1083 msgid "Deleted widget: " msgstr "Widget eliminato: " -#: extras/views.py:1085 +#: netbox/extras/views.py:1085 msgid "Error deleting widget: " msgstr "Errore durante l'eliminazione del widget: " -#: extras/views.py:1172 +#: netbox/extras/views.py:1175 msgid "Unable to run script: RQ worker process not running." msgstr "" "Impossibile eseguire lo script: processo di lavoro RQ non in esecuzione." -#: ipam/api/field_serializers.py:17 +#: netbox/ipam/api/field_serializers.py:17 msgid "Enter a valid IPv4 or IPv6 address with optional mask." msgstr "Inserisci un indirizzo IPv4 o IPv6 valido con maschera opzionale." -#: ipam/api/field_serializers.py:24 +#: netbox/ipam/api/field_serializers.py:24 #, python-brace-format msgid "Invalid IP address format: {data}" msgstr "Formato dell'indirizzo IP non valido: {data}" -#: ipam/api/field_serializers.py:37 +#: netbox/ipam/api/field_serializers.py:37 msgid "Enter a valid IPv4 or IPv6 prefix and mask in CIDR notation." msgstr "" "Inserisci un prefisso e una maschera IPv4 o IPv6 validi nella notazione " "CIDR." -#: ipam/api/field_serializers.py:44 +#: netbox/ipam/api/field_serializers.py:44 #, python-brace-format msgid "Invalid IP prefix format: {data}" msgstr "Formato del prefisso IP non valido: {data}" -#: ipam/api/views.py:358 +#: netbox/ipam/api/views.py:358 msgid "" "Insufficient space is available to accommodate the requested prefix size(s)" msgstr "" "Lo spazio disponibile è insufficiente per contenere le dimensioni del " "prefisso richieste" -#: ipam/choices.py:30 +#: netbox/ipam/choices.py:30 msgid "Container" msgstr "Contenitore" -#: ipam/choices.py:72 +#: netbox/ipam/choices.py:72 msgid "DHCP" msgstr "DHCP" -#: ipam/choices.py:73 +#: netbox/ipam/choices.py:73 msgid "SLAAC" msgstr "SLAAC" -#: ipam/choices.py:89 +#: netbox/ipam/choices.py:89 msgid "Loopback" msgstr "Loopback" -#: ipam/choices.py:91 +#: netbox/ipam/choices.py:91 msgid "Anycast" msgstr "Anycast" -#: ipam/choices.py:115 +#: netbox/ipam/choices.py:115 msgid "Standard" msgstr "Standard" -#: ipam/choices.py:120 +#: netbox/ipam/choices.py:120 msgid "CheckPoint" msgstr "CheckPoint" -#: ipam/choices.py:123 +#: netbox/ipam/choices.py:123 msgid "Cisco" msgstr "Cisco" -#: ipam/choices.py:137 +#: netbox/ipam/choices.py:137 msgid "Plaintext" msgstr "Testo in chiaro" -#: ipam/fields.py:36 +#: netbox/ipam/fields.py:36 #, python-brace-format msgid "Invalid IP address format: {address}" msgstr "Formato dell'indirizzo IP non valido: {address}" -#: ipam/filtersets.py:48 vpn/filtersets.py:304 +#: netbox/ipam/filtersets.py:48 netbox/vpn/filtersets.py:304 msgid "Import target" msgstr "Obiettivo di importazione" -#: ipam/filtersets.py:54 vpn/filtersets.py:310 +#: netbox/ipam/filtersets.py:54 netbox/vpn/filtersets.py:310 msgid "Import target (name)" msgstr "Obiettivo di importazione (nome)" -#: ipam/filtersets.py:59 vpn/filtersets.py:315 +#: netbox/ipam/filtersets.py:59 netbox/vpn/filtersets.py:315 msgid "Export target" msgstr "Obiettivo di esportazione" -#: ipam/filtersets.py:65 vpn/filtersets.py:321 +#: netbox/ipam/filtersets.py:65 netbox/vpn/filtersets.py:321 msgid "Export target (name)" msgstr "Destinazione di esportazione (nome)" -#: ipam/filtersets.py:86 +#: netbox/ipam/filtersets.py:86 msgid "Importing VRF" msgstr "Importazione di VRF" -#: ipam/filtersets.py:92 +#: netbox/ipam/filtersets.py:92 msgid "Import VRF (RD)" msgstr "Importa VRF (RD)" -#: ipam/filtersets.py:97 +#: netbox/ipam/filtersets.py:97 msgid "Exporting VRF" msgstr "Esportazione di VRF" -#: ipam/filtersets.py:103 +#: netbox/ipam/filtersets.py:103 msgid "Export VRF (RD)" msgstr "Esporta VRF (RD)" -#: ipam/filtersets.py:108 +#: netbox/ipam/filtersets.py:108 msgid "Importing L2VPN" msgstr "Importazione di L2VPN" -#: ipam/filtersets.py:114 +#: netbox/ipam/filtersets.py:114 msgid "Importing L2VPN (identifier)" msgstr "Importazione di L2VPN (identificatore)" -#: ipam/filtersets.py:119 +#: netbox/ipam/filtersets.py:119 msgid "Exporting L2VPN" msgstr "Esportazione di L2VPN" -#: ipam/filtersets.py:125 +#: netbox/ipam/filtersets.py:125 msgid "Exporting L2VPN (identifier)" msgstr "Esportazione di L2VPN (identificatore)" -#: ipam/filtersets.py:155 ipam/filtersets.py:281 ipam/forms/model_forms.py:229 -#: ipam/tables/ip.py:212 templates/ipam/prefix.html:12 +#: netbox/ipam/filtersets.py:155 netbox/ipam/filtersets.py:281 +#: netbox/ipam/forms/model_forms.py:229 netbox/ipam/tables/ip.py:212 +#: netbox/templates/ipam/prefix.html:12 msgid "Prefix" msgstr "Prefisso" -#: ipam/filtersets.py:159 ipam/filtersets.py:198 ipam/filtersets.py:221 +#: netbox/ipam/filtersets.py:159 netbox/ipam/filtersets.py:198 +#: netbox/ipam/filtersets.py:221 msgid "RIR (ID)" msgstr "RIR (ID)" -#: ipam/filtersets.py:165 ipam/filtersets.py:204 ipam/filtersets.py:227 +#: netbox/ipam/filtersets.py:165 netbox/ipam/filtersets.py:204 +#: netbox/ipam/filtersets.py:227 msgid "RIR (slug)" msgstr "RIR (lumaca)" -#: ipam/filtersets.py:285 +#: netbox/ipam/filtersets.py:285 msgid "Within prefix" msgstr "All'interno del prefisso" -#: ipam/filtersets.py:289 +#: netbox/ipam/filtersets.py:289 msgid "Within and including prefix" msgstr "All'interno e incluso il prefisso" -#: ipam/filtersets.py:293 +#: netbox/ipam/filtersets.py:293 msgid "Prefixes which contain this prefix or IP" msgstr "Prefissi che contengono questo prefisso o IP" -#: ipam/filtersets.py:304 ipam/filtersets.py:572 ipam/forms/bulk_edit.py:343 -#: ipam/forms/filtersets.py:196 ipam/forms/filtersets.py:331 +#: netbox/ipam/filtersets.py:304 netbox/ipam/filtersets.py:572 +#: netbox/ipam/forms/bulk_edit.py:343 netbox/ipam/forms/filtersets.py:196 +#: netbox/ipam/forms/filtersets.py:331 msgid "Mask length" msgstr "Lunghezza della maschera" -#: ipam/filtersets.py:373 vpn/filtersets.py:427 +#: netbox/ipam/filtersets.py:373 netbox/vpn/filtersets.py:427 msgid "VLAN (ID)" msgstr "VLAN (ID)" -#: ipam/filtersets.py:377 vpn/filtersets.py:422 +#: netbox/ipam/filtersets.py:377 netbox/vpn/filtersets.py:422 msgid "VLAN number (1-4094)" msgstr "Numero VLAN (1-4094)" -#: ipam/filtersets.py:471 ipam/filtersets.py:475 ipam/filtersets.py:567 -#: ipam/forms/model_forms.py:463 templates/tenancy/contact.html:53 -#: tenancy/forms/bulk_edit.py:113 +#: netbox/ipam/filtersets.py:471 netbox/ipam/filtersets.py:475 +#: netbox/ipam/filtersets.py:567 netbox/ipam/forms/model_forms.py:496 +#: netbox/templates/tenancy/contact.html:53 +#: netbox/tenancy/forms/bulk_edit.py:113 msgid "Address" msgstr "Indirizzo" -#: ipam/filtersets.py:479 +#: netbox/ipam/filtersets.py:479 msgid "Ranges which contain this prefix or IP" msgstr "Intervalli che contengono questo prefisso o IP" -#: ipam/filtersets.py:507 ipam/filtersets.py:563 +#: netbox/ipam/filtersets.py:507 netbox/ipam/filtersets.py:563 msgid "Parent prefix" msgstr "Prefisso principale" -#: ipam/filtersets.py:616 ipam/filtersets.py:856 ipam/filtersets.py:1131 -#: vpn/filtersets.py:385 +#: netbox/ipam/filtersets.py:616 netbox/ipam/filtersets.py:856 +#: netbox/ipam/filtersets.py:1131 netbox/vpn/filtersets.py:385 msgid "Virtual machine (name)" msgstr "Macchina virtuale (nome)" -#: ipam/filtersets.py:621 ipam/filtersets.py:861 ipam/filtersets.py:1125 -#: virtualization/filtersets.py:282 virtualization/filtersets.py:321 -#: vpn/filtersets.py:390 +#: netbox/ipam/filtersets.py:621 netbox/ipam/filtersets.py:861 +#: netbox/ipam/filtersets.py:1125 netbox/virtualization/filtersets.py:282 +#: netbox/virtualization/filtersets.py:321 netbox/vpn/filtersets.py:390 msgid "Virtual machine (ID)" msgstr "Macchina virtuale (ID)" -#: ipam/filtersets.py:627 vpn/filtersets.py:97 vpn/filtersets.py:396 +#: netbox/ipam/filtersets.py:627 netbox/vpn/filtersets.py:97 +#: netbox/vpn/filtersets.py:396 msgid "Interface (name)" msgstr "Interfaccia (nome)" -#: ipam/filtersets.py:638 vpn/filtersets.py:108 vpn/filtersets.py:407 +#: netbox/ipam/filtersets.py:638 netbox/vpn/filtersets.py:108 +#: netbox/vpn/filtersets.py:407 msgid "VM interface (name)" msgstr "Interfaccia VM (nome)" -#: ipam/filtersets.py:643 vpn/filtersets.py:113 +#: netbox/ipam/filtersets.py:643 netbox/vpn/filtersets.py:113 msgid "VM interface (ID)" msgstr "Interfaccia VM (ID)" -#: ipam/filtersets.py:648 +#: netbox/ipam/filtersets.py:648 msgid "FHRP group (ID)" msgstr "Gruppo FHRP (ID)" -#: ipam/filtersets.py:652 +#: netbox/ipam/filtersets.py:652 msgid "Is assigned to an interface" msgstr "È assegnato a un'interfaccia" -#: ipam/filtersets.py:656 +#: netbox/ipam/filtersets.py:656 msgid "Is assigned" msgstr "È assegnato" -#: ipam/filtersets.py:668 +#: netbox/ipam/filtersets.py:668 msgid "Service (ID)" msgstr "Servizio (ID)" -#: ipam/filtersets.py:673 +#: netbox/ipam/filtersets.py:673 msgid "NAT inside IP address (ID)" msgstr "Indirizzo IP interno (ID) NAT" -#: ipam/filtersets.py:1041 ipam/forms/bulk_import.py:322 +#: netbox/ipam/filtersets.py:1041 netbox/ipam/forms/bulk_import.py:322 msgid "Assigned interface" msgstr "Interfaccia assegnata" -#: ipam/filtersets.py:1046 +#: netbox/ipam/filtersets.py:1046 msgid "Assigned VM interface" msgstr "Interfaccia VM assegnata" -#: ipam/filtersets.py:1136 +#: netbox/ipam/filtersets.py:1136 msgid "IP address (ID)" msgstr "Indirizzo IP (ID)" -#: ipam/filtersets.py:1142 ipam/models/ip.py:788 +#: netbox/ipam/filtersets.py:1142 netbox/ipam/models/ip.py:788 msgid "IP address" msgstr "indirizzo IP" -#: ipam/filtersets.py:1167 +#: netbox/ipam/filtersets.py:1167 msgid "Primary IPv4 (ID)" msgstr "IPv4 (ID) primario" -#: ipam/filtersets.py:1172 +#: netbox/ipam/filtersets.py:1172 msgid "Primary IPv6 (ID)" msgstr "IPv6 primario (ID)" -#: ipam/formfields.py:14 +#: netbox/ipam/formfields.py:14 msgid "Enter a valid IPv4 or IPv6 address (without a mask)." msgstr "Inserisci un indirizzo IPv4 o IPv6 valido (senza maschera)." -#: ipam/formfields.py:32 +#: netbox/ipam/formfields.py:32 #, python-brace-format msgid "Invalid IPv4/IPv6 address format: {address}" msgstr "Formato indirizzo IPv4/IPv6 non valido: {address}" -#: ipam/formfields.py:37 +#: netbox/ipam/formfields.py:37 msgid "This field requires an IP address without a mask." msgstr "Questo campo richiede un indirizzo IP senza maschera." -#: ipam/formfields.py:39 ipam/formfields.py:61 +#: netbox/ipam/formfields.py:39 netbox/ipam/formfields.py:61 msgid "Please specify a valid IPv4 or IPv6 address." msgstr "Specifica un indirizzo IPv4 o IPv6 valido." -#: ipam/formfields.py:44 +#: netbox/ipam/formfields.py:44 msgid "Enter a valid IPv4 or IPv6 address (with CIDR mask)." msgstr "Inserisci un indirizzo IPv4 o IPv6 valido (con maschera CIDR)." -#: ipam/formfields.py:56 +#: netbox/ipam/formfields.py:56 msgid "CIDR mask (e.g. /24) is required." msgstr "È richiesta la mascherina CIDR (ad es. /24)." -#: ipam/forms/bulk_create.py:13 +#: netbox/ipam/forms/bulk_create.py:13 msgid "Address pattern" msgstr "Schema di indirizzo" -#: ipam/forms/bulk_edit.py:50 +#: netbox/ipam/forms/bulk_edit.py:50 msgid "Enforce unique space" msgstr "Applica uno spazio unico" -#: ipam/forms/bulk_edit.py:88 +#: netbox/ipam/forms/bulk_edit.py:88 msgid "Is private" msgstr "È privato" -#: ipam/forms/bulk_edit.py:109 ipam/forms/bulk_edit.py:138 -#: ipam/forms/bulk_edit.py:163 ipam/forms/bulk_import.py:89 -#: ipam/forms/bulk_import.py:109 ipam/forms/bulk_import.py:129 -#: ipam/forms/filtersets.py:110 ipam/forms/filtersets.py:125 -#: ipam/forms/filtersets.py:148 ipam/forms/model_forms.py:96 -#: ipam/forms/model_forms.py:109 ipam/forms/model_forms.py:131 -#: ipam/forms/model_forms.py:149 ipam/models/asns.py:31 -#: ipam/models/asns.py:103 ipam/models/ip.py:71 ipam/models/ip.py:90 -#: ipam/tables/asn.py:20 ipam/tables/asn.py:45 -#: templates/ipam/aggregate.html:18 templates/ipam/asn.html:27 -#: templates/ipam/asnrange.html:19 templates/ipam/rir.html:19 +#: netbox/ipam/forms/bulk_edit.py: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/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" -#: ipam/forms/bulk_edit.py:171 +#: netbox/ipam/forms/bulk_edit.py:171 msgid "Date added" msgstr "Data aggiunta" -#: ipam/forms/bulk_edit.py:229 ipam/forms/model_forms.py:586 -#: ipam/forms/model_forms.py:633 ipam/tables/ip.py:251 -#: templates/ipam/vlan_edit.html:37 templates/ipam/vlangroup.html:27 +#: 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/templates/ipam/vlangroup.html:27 msgid "VLAN Group" msgstr "Gruppo VLAN" -#: ipam/forms/bulk_edit.py:234 ipam/forms/bulk_import.py:185 -#: ipam/forms/filtersets.py:256 ipam/forms/model_forms.py:218 -#: ipam/models/vlans.py:234 ipam/tables/ip.py:255 -#: templates/ipam/prefix.html:60 templates/ipam/vlan.html:12 -#: templates/ipam/vlan/base.html:6 templates/ipam/vlan_edit.html:10 -#: templates/wireless/wirelesslan.html:30 vpn/forms/bulk_import.py:304 -#: vpn/forms/filtersets.py:284 vpn/forms/model_forms.py:433 -#: vpn/forms/model_forms.py:452 wireless/forms/bulk_edit.py:55 -#: wireless/forms/bulk_import.py:48 wireless/forms/model_forms.py:48 -#: wireless/models.py:102 +#: 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/templates/ipam/vlan/base.html:6 +#: netbox/templates/ipam/vlan_edit.html:10 +#: netbox/templates/wireless/wirelesslan.html:30 +#: netbox/vpn/forms/bulk_import.py:304 netbox/vpn/forms/filtersets.py:284 +#: netbox/vpn/forms/model_forms.py:433 netbox/vpn/forms/model_forms.py:452 +#: netbox/wireless/forms/bulk_edit.py:55 +#: netbox/wireless/forms/bulk_import.py:48 +#: netbox/wireless/forms/model_forms.py:48 netbox/wireless/models.py:102 msgid "VLAN" msgstr "VLAN" -#: ipam/forms/bulk_edit.py:245 +#: netbox/ipam/forms/bulk_edit.py:245 msgid "Prefix length" msgstr "Lunghezza del prefisso" -#: ipam/forms/bulk_edit.py:268 ipam/forms/filtersets.py:241 -#: templates/ipam/prefix.html:85 +#: netbox/ipam/forms/bulk_edit.py:268 netbox/ipam/forms/filtersets.py:241 +#: netbox/templates/ipam/prefix.html:85 msgid "Is a pool" msgstr "È una piscina" -#: ipam/forms/bulk_edit.py:273 ipam/forms/bulk_edit.py:318 -#: ipam/forms/filtersets.py:248 ipam/forms/filtersets.py:293 -#: ipam/models/ip.py:272 ipam/models/ip.py:539 +#: netbox/ipam/forms/bulk_edit.py: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 msgid "Treat as fully utilized" msgstr "Trattare come completamente utilizzato" -#: ipam/forms/bulk_edit.py:287 ipam/forms/filtersets.py:171 +#: netbox/ipam/forms/bulk_edit.py:287 netbox/ipam/forms/filtersets.py:171 msgid "VLAN Assignment" msgstr "Assegnazione VLAN" -#: ipam/forms/bulk_edit.py:366 ipam/models/ip.py:772 +#: netbox/ipam/forms/bulk_edit.py:366 netbox/ipam/models/ip.py:772 msgid "DNS name" msgstr "Nome DNS" -#: ipam/forms/bulk_edit.py:387 ipam/forms/bulk_edit.py:534 -#: ipam/forms/bulk_import.py:394 ipam/forms/bulk_import.py:469 -#: ipam/forms/bulk_import.py:495 ipam/forms/filtersets.py:390 -#: ipam/forms/filtersets.py:530 templates/ipam/fhrpgroup.html:22 -#: templates/ipam/inc/panels/fhrp_groups.html:24 -#: templates/ipam/service.html:32 templates/ipam/servicetemplate.html:19 +#: netbox/ipam/forms/bulk_edit.py: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/templates/ipam/inc/panels/fhrp_groups.html:24 +#: netbox/templates/ipam/service.html:32 +#: netbox/templates/ipam/servicetemplate.html:19 msgid "Protocol" msgstr "Protocollo" -#: ipam/forms/bulk_edit.py:394 ipam/forms/filtersets.py:397 -#: ipam/tables/fhrp.py:22 templates/ipam/fhrpgroup.html:26 +#: netbox/ipam/forms/bulk_edit.py:394 netbox/ipam/forms/filtersets.py:397 +#: netbox/ipam/tables/fhrp.py:22 netbox/templates/ipam/fhrpgroup.html:26 msgid "Group ID" msgstr "ID gruppo" -#: ipam/forms/bulk_edit.py:399 ipam/forms/filtersets.py:402 -#: wireless/forms/bulk_edit.py:68 wireless/forms/bulk_edit.py:115 -#: wireless/forms/bulk_import.py:62 wireless/forms/bulk_import.py:65 -#: wireless/forms/bulk_import.py:104 wireless/forms/bulk_import.py:107 -#: wireless/forms/filtersets.py:54 wireless/forms/filtersets.py:88 +#: netbox/ipam/forms/bulk_edit.py: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 msgid "Authentication type" msgstr "Tipo di autenticazione" -#: ipam/forms/bulk_edit.py:404 ipam/forms/filtersets.py:406 +#: netbox/ipam/forms/bulk_edit.py:404 netbox/ipam/forms/filtersets.py:406 msgid "Authentication key" msgstr "Chiave di autenticazione" -#: ipam/forms/bulk_edit.py:421 ipam/forms/filtersets.py:383 -#: ipam/forms/model_forms.py:474 netbox/navigation/menu.py:386 -#: templates/ipam/fhrpgroup.html:49 -#: templates/wireless/inc/authentication_attrs.html:5 -#: wireless/forms/bulk_edit.py:91 wireless/forms/bulk_edit.py:149 -#: wireless/forms/filtersets.py:36 wireless/forms/filtersets.py:76 -#: wireless/forms/model_forms.py:55 wireless/forms/model_forms.py:171 +#: 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/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 msgid "Authentication" msgstr "Autenticazione" -#: ipam/forms/bulk_edit.py:436 ipam/forms/model_forms.py:575 +#: netbox/ipam/forms/bulk_edit.py:436 netbox/ipam/forms/model_forms.py:608 msgid "Scope type" msgstr "Tipo di ambito" -#: ipam/forms/bulk_edit.py:439 ipam/forms/bulk_edit.py:453 -#: ipam/forms/model_forms.py:578 ipam/forms/model_forms.py:588 -#: ipam/tables/vlans.py:71 templates/ipam/vlangroup.html:38 +#: 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" -#: ipam/forms/bulk_edit.py:446 ipam/models/vlans.py:60 +#: netbox/ipam/forms/bulk_edit.py:446 netbox/ipam/models/vlans.py:60 msgid "VLAN ID ranges" msgstr "Intervalli di ID VLAN" -#: ipam/forms/bulk_edit.py:525 +#: netbox/ipam/forms/bulk_edit.py:525 msgid "Site & Group" msgstr "Sito e gruppo" -#: ipam/forms/bulk_edit.py:539 ipam/forms/model_forms.py:659 -#: ipam/forms/model_forms.py:691 ipam/tables/services.py:19 -#: ipam/tables/services.py:49 templates/ipam/service.html:36 -#: templates/ipam/servicetemplate.html:23 +#: netbox/ipam/forms/bulk_edit.py:539 netbox/ipam/forms/model_forms.py:692 +#: netbox/ipam/forms/model_forms.py:724 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" -#: ipam/forms/bulk_import.py:48 +#: netbox/ipam/forms/bulk_import.py:48 msgid "Import route targets" msgstr "Importa gli obiettivi del percorso" -#: ipam/forms/bulk_import.py:54 +#: netbox/ipam/forms/bulk_import.py:54 msgid "Export route targets" msgstr "Obiettivi del percorso di esportazione" -#: ipam/forms/bulk_import.py:92 ipam/forms/bulk_import.py:112 -#: ipam/forms/bulk_import.py:132 +#: netbox/ipam/forms/bulk_import.py:92 netbox/ipam/forms/bulk_import.py:112 +#: netbox/ipam/forms/bulk_import.py:132 msgid "Assigned RIR" msgstr "RIR assegnato" -#: ipam/forms/bulk_import.py:182 +#: netbox/ipam/forms/bulk_import.py:182 msgid "VLAN's group (if any)" msgstr "Gruppo VLAN (se presente)" -#: ipam/forms/bulk_import.py:308 +#: netbox/ipam/forms/bulk_import.py:308 msgid "Parent device of assigned interface (if any)" msgstr "Dispositivo principale dell'interfaccia assegnata (se presente)" -#: ipam/forms/bulk_import.py:311 ipam/forms/bulk_import.py:488 -#: ipam/forms/model_forms.py:685 virtualization/filtersets.py:288 -#: virtualization/filtersets.py:327 virtualization/forms/bulk_edit.py:200 -#: virtualization/forms/bulk_edit.py:326 -#: virtualization/forms/bulk_import.py:146 -#: virtualization/forms/bulk_import.py:207 -#: virtualization/forms/filtersets.py:212 -#: virtualization/forms/filtersets.py:248 -#: virtualization/forms/model_forms.py:288 vpn/forms/bulk_import.py:93 -#: vpn/forms/bulk_import.py:290 +#: 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" -#: ipam/forms/bulk_import.py:315 +#: netbox/ipam/forms/bulk_import.py:315 msgid "Parent VM of assigned interface (if any)" msgstr "VM principale dell'interfaccia assegnata (se presente)" -#: ipam/forms/bulk_import.py:325 +#: netbox/ipam/forms/bulk_import.py:325 msgid "Is primary" msgstr "È primario" -#: ipam/forms/bulk_import.py:326 +#: 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" -#: ipam/forms/bulk_import.py:365 +#: netbox/ipam/forms/bulk_import.py:330 +msgid "Is out-of-band" +msgstr "" + +#: netbox/ipam/forms/bulk_import.py:331 +msgid "Designate this as the out-of-band IP address for the assigned device" +msgstr "" + +#: netbox/ipam/forms/bulk_import.py:371 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" -#: ipam/forms/bulk_import.py:369 +#: netbox/ipam/forms/bulk_import.py:375 +msgid "No device specified; cannot set as out-of-band IP" +msgstr "" + +#: netbox/ipam/forms/bulk_import.py:379 +msgid "Cannot set out-of-band IP for virtual machines" +msgstr "" + +#: netbox/ipam/forms/bulk_import.py:383 msgid "No interface specified; cannot set as primary IP" msgstr "" "Nessuna interfaccia specificata; non può essere impostato come IP primario" -#: ipam/forms/bulk_import.py:398 +#: netbox/ipam/forms/bulk_import.py:387 +msgid "No interface specified; cannot set as out-of-band IP" +msgstr "" + +#: netbox/ipam/forms/bulk_import.py:422 msgid "Auth type" msgstr "Tipo di autenticazione" -#: ipam/forms/bulk_import.py:413 +#: netbox/ipam/forms/bulk_import.py:437 msgid "Scope type (app & model)" msgstr "Tipo di ambito (app e modello)" -#: ipam/forms/bulk_import.py:440 +#: netbox/ipam/forms/bulk_import.py:464 msgid "Assigned VLAN group" msgstr "Gruppo VLAN assegnato" -#: ipam/forms/bulk_import.py:471 ipam/forms/bulk_import.py:497 +#: netbox/ipam/forms/bulk_import.py:495 netbox/ipam/forms/bulk_import.py:521 msgid "IP protocol" msgstr "Protocollo IP" -#: ipam/forms/bulk_import.py:485 +#: netbox/ipam/forms/bulk_import.py:509 msgid "Required if not assigned to a VM" msgstr "Obbligatorio se non assegnato a una VM" -#: ipam/forms/bulk_import.py:492 +#: netbox/ipam/forms/bulk_import.py:516 msgid "Required if not assigned to a device" msgstr "Obbligatorio se non assegnato a un dispositivo" -#: ipam/forms/bulk_import.py:517 +#: netbox/ipam/forms/bulk_import.py:541 #, python-brace-format msgid "{ip} is not assigned to this device/VM." msgstr "{ip} non è assegnato a questo dispositivo/macchina virtuale." -#: ipam/forms/filtersets.py:47 ipam/forms/model_forms.py:63 -#: netbox/navigation/menu.py:189 vpn/forms/model_forms.py:410 +#: 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 msgid "Route Targets" msgstr "Obiettivi del percorso" -#: ipam/forms/filtersets.py:53 ipam/forms/model_forms.py:50 -#: vpn/forms/filtersets.py:224 vpn/forms/model_forms.py:397 +#: 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 msgid "Import targets" msgstr "Obiettivi di importazione" -#: ipam/forms/filtersets.py:58 ipam/forms/model_forms.py:55 -#: vpn/forms/filtersets.py:229 vpn/forms/model_forms.py:402 +#: 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 msgid "Export targets" msgstr "Obiettivi di esportazione" -#: ipam/forms/filtersets.py:73 +#: netbox/ipam/forms/filtersets.py:73 msgid "Imported by VRF" msgstr "Importato da VRF" -#: ipam/forms/filtersets.py:78 +#: netbox/ipam/forms/filtersets.py:78 msgid "Exported by VRF" msgstr "Esportato da VRF" -#: ipam/forms/filtersets.py:87 ipam/tables/ip.py:89 templates/ipam/rir.html:30 +#: netbox/ipam/forms/filtersets.py:87 netbox/ipam/tables/ip.py:89 +#: netbox/templates/ipam/rir.html:30 msgid "Private" msgstr "Privato" -#: ipam/forms/filtersets.py:105 ipam/forms/filtersets.py:191 -#: ipam/forms/filtersets.py:272 ipam/forms/filtersets.py:326 +#: netbox/ipam/forms/filtersets.py:105 netbox/ipam/forms/filtersets.py:191 +#: netbox/ipam/forms/filtersets.py:272 netbox/ipam/forms/filtersets.py:326 msgid "Address family" msgstr "Famiglia di indirizzi" -#: ipam/forms/filtersets.py:119 templates/ipam/asnrange.html:25 +#: netbox/ipam/forms/filtersets.py:119 netbox/templates/ipam/asnrange.html:25 msgid "Range" msgstr "Intervallo" -#: ipam/forms/filtersets.py:128 +#: netbox/ipam/forms/filtersets.py:128 msgid "Start" msgstr "Inizio" -#: ipam/forms/filtersets.py:132 +#: netbox/ipam/forms/filtersets.py:132 msgid "End" msgstr "Fine" -#: ipam/forms/filtersets.py:186 +#: netbox/ipam/forms/filtersets.py:186 msgid "Search within" msgstr "Cerca all'interno" -#: ipam/forms/filtersets.py:207 ipam/forms/filtersets.py:342 +#: netbox/ipam/forms/filtersets.py:207 netbox/ipam/forms/filtersets.py:342 msgid "Present in VRF" msgstr "Presente in VRF" -#: ipam/forms/filtersets.py:311 +#: netbox/ipam/forms/filtersets.py:311 msgid "Device/VM" msgstr "Dispositivo/VM" -#: ipam/forms/filtersets.py:321 +#: netbox/ipam/forms/filtersets.py:321 msgid "Parent Prefix" msgstr "Prefisso principale" -#: ipam/forms/filtersets.py:347 +#: netbox/ipam/forms/filtersets.py:347 msgid "Assigned Device" msgstr "Dispositivo assegnato" -#: ipam/forms/filtersets.py:352 +#: netbox/ipam/forms/filtersets.py:352 msgid "Assigned VM" msgstr "VM assegnata" -#: ipam/forms/filtersets.py:366 +#: netbox/ipam/forms/filtersets.py:366 msgid "Assigned to an interface" msgstr "Assegnata a un'interfaccia" -#: ipam/forms/filtersets.py:373 templates/ipam/ipaddress.html:51 +#: netbox/ipam/forms/filtersets.py:373 netbox/templates/ipam/ipaddress.html:51 msgid "DNS Name" msgstr "Nome DNS" -#: ipam/forms/filtersets.py:416 ipam/models/vlans.py:235 ipam/tables/ip.py:176 -#: ipam/tables/vlans.py:82 ipam/views.py:971 netbox/navigation/menu.py:193 -#: netbox/navigation/menu.py:195 +#: 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 msgid "VLANs" msgstr "VLAN" -#: ipam/forms/filtersets.py:457 +#: netbox/ipam/forms/filtersets.py:457 msgid "Contains VLAN ID" msgstr "Contiene l'ID VLAN" -#: ipam/forms/filtersets.py:513 ipam/models/vlans.py:176 -#: templates/ipam/vlan.html:31 +#: netbox/ipam/forms/filtersets.py:513 netbox/ipam/models/vlans.py:192 +#: netbox/templates/ipam/vlan.html:31 msgid "VLAN ID" msgstr "ID VLAN" -#: ipam/forms/filtersets.py:556 ipam/forms/model_forms.py:320 -#: ipam/forms/model_forms.py:713 ipam/forms/model_forms.py:739 -#: ipam/tables/vlans.py:195 templates/virtualization/virtualdisk.html:21 -#: templates/virtualization/virtualmachine.html:12 -#: templates/virtualization/vminterface.html:21 -#: templates/vpn/tunneltermination.html:25 -#: virtualization/forms/filtersets.py:197 -#: virtualization/forms/filtersets.py:242 -#: virtualization/forms/model_forms.py:220 -#: virtualization/tables/virtualmachines.py:135 -#: virtualization/tables/virtualmachines.py:190 vpn/choices.py:45 -#: vpn/forms/filtersets.py:293 vpn/forms/model_forms.py:160 -#: vpn/forms/model_forms.py:171 vpn/forms/model_forms.py:273 -#: vpn/forms/model_forms.py:454 +#: netbox/ipam/forms/filtersets.py: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" -#: ipam/forms/model_forms.py:80 templates/ipam/routetarget.html:10 +#: netbox/ipam/forms/model_forms.py:80 +#: netbox/templates/ipam/routetarget.html:10 msgid "Route Target" msgstr "Obiettivo del percorso" -#: ipam/forms/model_forms.py:114 ipam/tables/ip.py:117 -#: templates/ipam/aggregate.html:11 templates/ipam/prefix.html:38 +#: netbox/ipam/forms/model_forms.py:114 netbox/ipam/tables/ip.py:117 +#: netbox/templates/ipam/aggregate.html:11 +#: netbox/templates/ipam/prefix.html:38 msgid "Aggregate" msgstr "Aggregato" -#: ipam/forms/model_forms.py:135 templates/ipam/asnrange.html:12 +#: netbox/ipam/forms/model_forms.py:135 netbox/templates/ipam/asnrange.html:12 msgid "ASN Range" msgstr "Gamma ASN" -#: ipam/forms/model_forms.py:231 +#: netbox/ipam/forms/model_forms.py:231 msgid "Site/VLAN Assignment" msgstr "Assegnazione sito/VLAN" -#: ipam/forms/model_forms.py:259 templates/ipam/iprange.html:10 +#: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10 msgid "IP Range" msgstr "Intervallo IP" -#: ipam/forms/model_forms.py:295 ipam/forms/model_forms.py:321 -#: ipam/forms/model_forms.py:473 templates/ipam/fhrpgroup.html:19 +#: 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 msgid "FHRP Group" msgstr "Gruppo FHRP" -#: ipam/forms/model_forms.py:310 +#: netbox/ipam/forms/model_forms.py:310 msgid "Make this the primary IP for the device/VM" msgstr "" "Imposta questo indirizzo IP primario per il dispositivo/macchina virtuale" -#: ipam/forms/model_forms.py:325 +#: netbox/ipam/forms/model_forms.py:314 +msgid "Make this the out-of-band IP for the device" +msgstr "" + +#: netbox/ipam/forms/model_forms.py:329 msgid "NAT IP (Inside)" msgstr "NAT IP (interno)" -#: ipam/forms/model_forms.py:384 +#: netbox/ipam/forms/model_forms.py:391 msgid "An IP address can only be assigned to a single object." msgstr "Un indirizzo IP può essere assegnato a un solo oggetto." -#: ipam/forms/model_forms.py:390 ipam/models/ip.py:897 -msgid "" -"Cannot reassign IP address while it is designated as the primary IP for the " -"parent object" +#: netbox/ipam/forms/model_forms.py:398 +msgid "Cannot reassign primary IP address for the parent device/VM" msgstr "" -"Impossibile riassegnare l'indirizzo IP mentre è designato come IP primario " -"per l'oggetto padre" -#: ipam/forms/model_forms.py:400 +#: netbox/ipam/forms/model_forms.py:402 +msgid "Cannot reassign out-of-Band IP address for the parent device" +msgstr "" + +#: netbox/ipam/forms/model_forms.py:412 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." -#: ipam/forms/model_forms.py:475 +#: netbox/ipam/forms/model_forms.py:420 +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 msgid "Virtual IP Address" msgstr "Indirizzo IP virtuale" -#: ipam/forms/model_forms.py:560 +#: netbox/ipam/forms/model_forms.py:593 msgid "Assignment already exists" msgstr "L'assegnazione esiste già" -#: ipam/forms/model_forms.py:569 templates/ipam/vlangroup.html:42 +#: netbox/ipam/forms/model_forms.py:602 +#: netbox/templates/ipam/vlangroup.html:42 msgid "VLAN IDs" msgstr "ID VLAN" -#: ipam/forms/model_forms.py:587 +#: netbox/ipam/forms/model_forms.py:620 msgid "Child VLANs" msgstr "VLAN per bambini" -#: ipam/forms/model_forms.py:664 ipam/forms/model_forms.py:696 +#: netbox/ipam/forms/model_forms.py:697 netbox/ipam/forms/model_forms.py:729 msgid "" "Comma-separated list of one or more port numbers. A range may be specified " "using a hyphen." @@ -9346,133 +10001,134 @@ msgstr "" "Elenco separato da virgole di uno o più numeri di porta. È possibile " "specificare un intervallo utilizzando un trattino." -#: ipam/forms/model_forms.py:669 templates/ipam/servicetemplate.html:12 +#: netbox/ipam/forms/model_forms.py:702 +#: netbox/templates/ipam/servicetemplate.html:12 msgid "Service Template" msgstr "Modello di servizio" -#: ipam/forms/model_forms.py:716 +#: netbox/ipam/forms/model_forms.py:749 msgid "Port(s)" msgstr "Porta/e" -#: ipam/forms/model_forms.py:717 ipam/forms/model_forms.py:745 -#: templates/ipam/service.html:21 +#: netbox/ipam/forms/model_forms.py:750 netbox/ipam/forms/model_forms.py:778 +#: netbox/templates/ipam/service.html:21 msgid "Service" msgstr "Servizio" -#: ipam/forms/model_forms.py:730 +#: netbox/ipam/forms/model_forms.py:763 msgid "Service template" msgstr "Modello di servizio" -#: ipam/forms/model_forms.py:742 +#: netbox/ipam/forms/model_forms.py:775 msgid "From Template" msgstr "Da modello" -#: ipam/forms/model_forms.py:743 +#: netbox/ipam/forms/model_forms.py:776 msgid "Custom" msgstr "Personalizzato" -#: ipam/forms/model_forms.py:773 +#: netbox/ipam/forms/model_forms.py:806 msgid "" "Must specify name, protocol, and port(s) if not using a service template." msgstr "" "È necessario specificare nome, protocollo e porte se non si utilizza un " "modello di servizio." -#: ipam/models/asns.py:34 +#: netbox/ipam/models/asns.py:34 msgid "start" msgstr "inizio" -#: ipam/models/asns.py:51 +#: netbox/ipam/models/asns.py:51 msgid "ASN range" msgstr "Serie ASN" -#: ipam/models/asns.py:52 +#: netbox/ipam/models/asns.py:52 msgid "ASN ranges" msgstr "Intervalli ASN" -#: ipam/models/asns.py:72 +#: netbox/ipam/models/asns.py:72 #, python-brace-format msgid "Starting ASN ({start}) must be lower than ending ASN ({end})." msgstr "" "Avvio dell'ASN ({start}) deve essere inferiore all'ASN finale ({end})." -#: ipam/models/asns.py:104 +#: netbox/ipam/models/asns.py:104 msgid "Regional Internet Registry responsible for this AS number space" msgstr "Registro Internet regionale responsabile di questo spazio numerico AS" -#: ipam/models/asns.py:109 +#: netbox/ipam/models/asns.py:109 msgid "16- or 32-bit autonomous system number" msgstr "Numero di sistema autonomo a 16 o 32 bit" -#: ipam/models/fhrp.py:22 +#: netbox/ipam/models/fhrp.py:22 msgid "group ID" msgstr "ID gruppo" -#: ipam/models/fhrp.py:30 ipam/models/services.py:22 +#: netbox/ipam/models/fhrp.py:30 netbox/ipam/models/services.py:22 msgid "protocol" msgstr "protocollo" -#: ipam/models/fhrp.py:38 wireless/models.py:28 +#: netbox/ipam/models/fhrp.py:38 netbox/wireless/models.py:28 msgid "authentication type" msgstr "tipo di autenticazione" -#: ipam/models/fhrp.py:43 +#: netbox/ipam/models/fhrp.py:43 msgid "authentication key" msgstr "chiave di autenticazione" -#: ipam/models/fhrp.py:56 +#: netbox/ipam/models/fhrp.py:56 msgid "FHRP group" msgstr "Gruppo FHRP" -#: ipam/models/fhrp.py:57 +#: netbox/ipam/models/fhrp.py:57 msgid "FHRP groups" msgstr "Gruppi FHRP" -#: ipam/models/fhrp.py:113 +#: netbox/ipam/models/fhrp.py:113 msgid "FHRP group assignment" msgstr "Assegnazione del gruppo FHRP" -#: ipam/models/fhrp.py:114 +#: netbox/ipam/models/fhrp.py:114 msgid "FHRP group assignments" msgstr "Incarichi del gruppo FHRP" -#: ipam/models/ip.py:65 +#: netbox/ipam/models/ip.py:65 msgid "private" msgstr "privato" -#: ipam/models/ip.py:66 +#: netbox/ipam/models/ip.py:66 msgid "IP space managed by this RIR is considered private" msgstr "Lo spazio IP gestito da questo RIR è considerato privato" -#: ipam/models/ip.py:72 netbox/navigation/menu.py:182 +#: netbox/ipam/models/ip.py:72 netbox/netbox/navigation/menu.py:182 msgid "RIRs" msgstr "RIR" -#: ipam/models/ip.py:84 +#: netbox/ipam/models/ip.py:84 msgid "IPv4 or IPv6 network" msgstr "Rete IPv4 o IPv6" -#: ipam/models/ip.py:91 +#: netbox/ipam/models/ip.py:91 msgid "Regional Internet Registry responsible for this IP space" msgstr "Registro Internet regionale responsabile di questo spazio IP" -#: ipam/models/ip.py:101 +#: netbox/ipam/models/ip.py:101 msgid "date added" msgstr "data aggiunta" -#: ipam/models/ip.py:115 +#: netbox/ipam/models/ip.py:115 msgid "aggregate" msgstr "aggregare" -#: ipam/models/ip.py:116 +#: netbox/ipam/models/ip.py:116 msgid "aggregates" msgstr "aggregati" -#: ipam/models/ip.py:132 +#: netbox/ipam/models/ip.py:132 msgid "Cannot create aggregate with /0 mask." msgstr "Impossibile creare un aggregato con la maschera /0." -#: ipam/models/ip.py:144 +#: netbox/ipam/models/ip.py:144 #, python-brace-format msgid "" "Aggregates cannot overlap. {prefix} is already covered by an existing " @@ -9481,7 +10137,7 @@ msgstr "" "Gli aggregati non possono sovrapporsi. {prefix} è già coperto da un " "aggregato esistente ({aggregate})." -#: ipam/models/ip.py:158 +#: netbox/ipam/models/ip.py:158 #, python-brace-format msgid "" "Prefixes cannot overlap aggregates. {prefix} covers an existing aggregate " @@ -9490,103 +10146,105 @@ msgstr "" "I prefissi non possono sovrapporsi agli aggregati. {prefix} copre un " "aggregato esistente ({aggregate})." -#: ipam/models/ip.py:200 ipam/models/ip.py:737 vpn/models/tunnels.py:114 +#: netbox/ipam/models/ip.py:200 netbox/ipam/models/ip.py:737 +#: netbox/vpn/models/tunnels.py:114 msgid "role" msgstr "ruolo" -#: ipam/models/ip.py:201 +#: netbox/ipam/models/ip.py:201 msgid "roles" msgstr "ruoli" -#: ipam/models/ip.py:217 ipam/models/ip.py:293 +#: netbox/ipam/models/ip.py:217 netbox/ipam/models/ip.py:293 msgid "prefix" msgstr "prefisso" -#: ipam/models/ip.py:218 +#: netbox/ipam/models/ip.py:218 msgid "IPv4 or IPv6 network with mask" msgstr "Rete IPv4 o IPv6 con maschera" -#: ipam/models/ip.py:254 +#: netbox/ipam/models/ip.py:254 msgid "Operational status of this prefix" msgstr "Stato operativo di questo prefisso" -#: ipam/models/ip.py:262 +#: netbox/ipam/models/ip.py:262 msgid "The primary function of this prefix" msgstr "La funzione principale di questo prefisso" -#: ipam/models/ip.py:265 +#: netbox/ipam/models/ip.py:265 msgid "is a pool" msgstr "è una piscina" -#: ipam/models/ip.py:267 +#: netbox/ipam/models/ip.py:267 msgid "All IP addresses within this prefix are considered usable" msgstr "" "Tutti gli indirizzi IP all'interno di questo prefisso sono considerati " "utilizzabili" -#: ipam/models/ip.py:270 ipam/models/ip.py:537 +#: netbox/ipam/models/ip.py:270 netbox/ipam/models/ip.py:537 msgid "mark utilized" msgstr "marchio utilizzato" -#: ipam/models/ip.py:294 +#: netbox/ipam/models/ip.py:294 msgid "prefixes" msgstr "prefissi" -#: ipam/models/ip.py:317 +#: netbox/ipam/models/ip.py:317 msgid "Cannot create prefix with /0 mask." msgstr "Impossibile creare un prefisso con la maschera /0." -#: ipam/models/ip.py:324 ipam/models/ip.py:874 +#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:874 #, python-brace-format msgid "VRF {vrf}" msgstr "VRF {vrf}" -#: ipam/models/ip.py:324 ipam/models/ip.py:874 +#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:874 msgid "global table" msgstr "tabella globale" -#: ipam/models/ip.py:326 +#: netbox/ipam/models/ip.py:326 #, python-brace-format msgid "Duplicate prefix found in {table}: {prefix}" msgstr "Prefisso duplicato trovato in {table}: {prefix}" -#: ipam/models/ip.py:495 +#: netbox/ipam/models/ip.py:495 msgid "start address" msgstr "indirizzo iniziale" -#: ipam/models/ip.py:496 ipam/models/ip.py:500 ipam/models/ip.py:712 +#: netbox/ipam/models/ip.py:496 netbox/ipam/models/ip.py:500 +#: netbox/ipam/models/ip.py:712 msgid "IPv4 or IPv6 address (with mask)" msgstr "Indirizzo IPv4 o IPv6 (con maschera)" -#: ipam/models/ip.py:499 +#: netbox/ipam/models/ip.py:499 msgid "end address" msgstr "indirizzo finale" -#: ipam/models/ip.py:526 +#: netbox/ipam/models/ip.py:526 msgid "Operational status of this range" msgstr "Stato operativo di questa gamma" -#: ipam/models/ip.py:534 +#: netbox/ipam/models/ip.py:534 msgid "The primary function of this range" msgstr "La funzione principale di questa gamma" -#: ipam/models/ip.py:548 +#: netbox/ipam/models/ip.py:548 msgid "IP range" msgstr "Intervallo IP" -#: ipam/models/ip.py:549 +#: netbox/ipam/models/ip.py:549 msgid "IP ranges" msgstr "Intervalli IP" -#: ipam/models/ip.py:565 +#: netbox/ipam/models/ip.py:565 msgid "Starting and ending IP address versions must match" msgstr "Le versioni iniziali e finali degli indirizzi IP devono corrispondere" -#: ipam/models/ip.py:571 +#: netbox/ipam/models/ip.py:571 msgid "Starting and ending IP address masks must match" msgstr "Le maschere di indirizzo IP iniziale e finale devono corrispondere" -#: ipam/models/ip.py:578 +#: netbox/ipam/models/ip.py:578 #, python-brace-format msgid "" "Ending address must be greater than the starting address ({start_address})" @@ -9594,57 +10252,57 @@ msgstr "" "L'indirizzo finale deve essere maggiore dell'indirizzo iniziale " "({start_address})" -#: ipam/models/ip.py:590 +#: netbox/ipam/models/ip.py:590 #, python-brace-format msgid "Defined addresses overlap with range {overlapping_range} in VRF {vrf}" msgstr "" "Gli indirizzi definiti si sovrappongono all'intervallo {overlapping_range} " "in VRF {vrf}" -#: ipam/models/ip.py:599 +#: netbox/ipam/models/ip.py:599 #, python-brace-format msgid "Defined range exceeds maximum supported size ({max_size})" msgstr "" "L'intervallo definito supera la dimensione massima supportata ({max_size})" -#: ipam/models/ip.py:711 tenancy/models/contacts.py:82 +#: netbox/ipam/models/ip.py:711 netbox/tenancy/models/contacts.py:82 msgid "address" msgstr "indirizzo" -#: ipam/models/ip.py:734 +#: netbox/ipam/models/ip.py:734 msgid "The operational status of this IP" msgstr "Lo stato operativo di questo IP" -#: ipam/models/ip.py:741 +#: netbox/ipam/models/ip.py:741 msgid "The functional role of this IP" msgstr "Il ruolo funzionale di questo IP" -#: ipam/models/ip.py:765 templates/ipam/ipaddress.html:72 +#: netbox/ipam/models/ip.py:765 netbox/templates/ipam/ipaddress.html:72 msgid "NAT (inside)" msgstr "NAT (interno)" -#: ipam/models/ip.py:766 +#: netbox/ipam/models/ip.py:766 msgid "The IP for which this address is the \"outside\" IP" msgstr "L'IP per il quale questo indirizzo è l'IP «esterno»" -#: ipam/models/ip.py:773 +#: netbox/ipam/models/ip.py:773 msgid "Hostname or FQDN (not case-sensitive)" msgstr "Nome host o FQDN (senza distinzione tra maiuscole e minuscole)" -#: ipam/models/ip.py:789 ipam/models/services.py:94 +#: netbox/ipam/models/ip.py:789 netbox/ipam/models/services.py:94 msgid "IP addresses" msgstr "Indirizzi IP" -#: ipam/models/ip.py:845 +#: netbox/ipam/models/ip.py:845 msgid "Cannot create IP address with /0 mask." msgstr "Impossibile creare un indirizzo IP con la maschera /0." -#: ipam/models/ip.py:851 +#: netbox/ipam/models/ip.py:851 #, python-brace-format msgid "{ip} is a network ID, which may not be assigned to an interface." msgstr "{ip} è un ID di rete, che non può essere assegnato a un'interfaccia." -#: ipam/models/ip.py:862 +#: netbox/ipam/models/ip.py:862 #, python-brace-format msgid "" "{ip} is a broadcast address, which may not be assigned to an interface." @@ -9652,100 +10310,116 @@ msgstr "" "{ip} è un indirizzo di trasmissione, che non può essere assegnato a " "un'interfaccia." -#: ipam/models/ip.py:876 +#: netbox/ipam/models/ip.py:876 #, python-brace-format msgid "Duplicate IP address found in {table}: {ipaddress}" msgstr "Indirizzo IP duplicato trovato in {table}: {ipaddress}" -#: ipam/models/ip.py:903 +#: netbox/ipam/models/ip.py:897 +msgid "" +"Cannot reassign IP address while it is designated as the primary IP for the " +"parent object" +msgstr "" +"Impossibile riassegnare l'indirizzo IP mentre è designato come IP primario " +"per l'oggetto padre" + +#: netbox/ipam/models/ip.py:903 msgid "Only IPv6 addresses can be assigned SLAAC status" msgstr "Solo agli indirizzi IPv6 può essere assegnato lo stato SLAAC" -#: ipam/models/services.py:33 +#: netbox/ipam/models/services.py:33 msgid "port numbers" msgstr "numeri di porta" -#: ipam/models/services.py:59 +#: netbox/ipam/models/services.py:59 msgid "service template" msgstr "modello di servizio" -#: ipam/models/services.py:60 +#: netbox/ipam/models/services.py:60 msgid "service templates" msgstr "modelli di servizio" -#: ipam/models/services.py:95 +#: netbox/ipam/models/services.py:95 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" -#: ipam/models/services.py:102 +#: netbox/ipam/models/services.py:102 msgid "service" msgstr "servizio" -#: ipam/models/services.py:103 +#: netbox/ipam/models/services.py:103 msgid "services" msgstr "servizi" -#: ipam/models/services.py:117 +#: netbox/ipam/models/services.py:117 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." -#: ipam/models/services.py:119 +#: netbox/ipam/models/services.py:119 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." -#: ipam/models/vlans.py:85 +#: netbox/ipam/models/vlans.py:85 msgid "VLAN groups" msgstr "Gruppi VLAN" -#: ipam/models/vlans.py:95 +#: netbox/ipam/models/vlans.py:95 msgid "Cannot set scope_type without scope_id." msgstr "Impossibile impostare scope_type senza scope_id." -#: ipam/models/vlans.py:97 +#: netbox/ipam/models/vlans.py:97 msgid "Cannot set scope_id without scope_type." msgstr "Impossibile impostare scope_id senza scope_type." -#: ipam/models/vlans.py:101 +#: netbox/ipam/models/vlans.py:105 +#, python-brace-format +msgid "Starting VLAN ID in range ({value}) cannot be less than {minimum}" +msgstr "" + +#: netbox/ipam/models/vlans.py:111 +#, python-brace-format +msgid "Ending VLAN ID in range ({value}) cannot exceed {maximum}" +msgstr "" + +#: 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 "" + +#: netbox/ipam/models/vlans.py:124 msgid "Ranges cannot overlap." msgstr "Gli intervalli non possono sovrapporsi." -#: ipam/models/vlans.py:106 -#, python-brace-format -msgid "" -"Maximum child VID must be greater than or equal to minimum child VID " -"({value})" -msgstr "" -"Il VID massimo per bambini deve essere maggiore o uguale al VID minimo per " -"bambini ({value})" - -#: ipam/models/vlans.py:165 +#: netbox/ipam/models/vlans.py:181 msgid "The specific site to which this VLAN is assigned (if any)" msgstr "Il sito specifico a cui è assegnata questa VLAN (se presente)" -#: ipam/models/vlans.py:173 +#: netbox/ipam/models/vlans.py:189 msgid "VLAN group (optional)" msgstr "Gruppo VLAN (opzionale)" -#: ipam/models/vlans.py:181 +#: netbox/ipam/models/vlans.py:197 msgid "Numeric VLAN ID (1-4094)" msgstr "ID VLAN numerico (1-4094)" -#: ipam/models/vlans.py:199 +#: netbox/ipam/models/vlans.py:215 msgid "Operational status of this VLAN" msgstr "Stato operativo di questa VLAN" -#: ipam/models/vlans.py:207 +#: netbox/ipam/models/vlans.py:223 msgid "The primary function of this VLAN" msgstr "La funzione principale di questa VLAN" -#: ipam/models/vlans.py:250 +#: netbox/ipam/models/vlans.py:266 #, python-brace-format msgid "" "VLAN is assigned to group {group} (scope: {scope}); cannot also assign to " @@ -9754,168 +10428,170 @@ msgstr "" "La VLAN è assegnata al gruppo {group} (scopo: {scope}); non può essere " "assegnato anche al sito {site}." -#: ipam/models/vlans.py:259 +#: netbox/ipam/models/vlans.py:275 #, 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}" -#: ipam/models/vrfs.py:30 +#: netbox/ipam/models/vrfs.py:30 msgid "route distinguisher" msgstr "identificatore di percorso" -#: ipam/models/vrfs.py:31 +#: netbox/ipam/models/vrfs.py:31 msgid "Unique route distinguisher (as defined in RFC 4364)" msgstr "Distinguitore di percorso univoco (come definito in RFC 4364)" -#: ipam/models/vrfs.py:42 +#: netbox/ipam/models/vrfs.py:42 msgid "enforce unique space" msgstr "imporre uno spazio unico" -#: ipam/models/vrfs.py:43 +#: netbox/ipam/models/vrfs.py:43 msgid "Prevent duplicate prefixes/IP addresses within this VRF" msgstr "Impedire prefissi/indirizzi IP duplicati all'interno di questo VRF" -#: ipam/models/vrfs.py:63 netbox/navigation/menu.py:186 -#: netbox/navigation/menu.py:188 +#: netbox/ipam/models/vrfs.py:63 netbox/netbox/navigation/menu.py:186 +#: netbox/netbox/navigation/menu.py:188 msgid "VRFs" msgstr "VRF" -#: ipam/models/vrfs.py:82 +#: netbox/ipam/models/vrfs.py:82 msgid "Route target value (formatted in accordance with RFC 4360)" msgstr "Valore target del percorso (formattato secondo RFC 4360)" -#: ipam/models/vrfs.py:94 +#: netbox/ipam/models/vrfs.py:94 msgid "route target" msgstr "destinazione del percorso" -#: ipam/models/vrfs.py:95 +#: netbox/ipam/models/vrfs.py:95 msgid "route targets" msgstr "obiettivi del percorso" -#: ipam/tables/asn.py:52 +#: netbox/ipam/tables/asn.py:52 msgid "ASDOT" msgstr "ASDOT" -#: ipam/tables/asn.py:57 +#: netbox/ipam/tables/asn.py:57 msgid "Site Count" msgstr "Numero siti" -#: ipam/tables/asn.py:62 +#: netbox/ipam/tables/asn.py:62 msgid "Provider Count" msgstr "Numero di fornitori" -#: ipam/tables/ip.py:95 netbox/navigation/menu.py:179 -#: netbox/navigation/menu.py:181 +#: netbox/ipam/tables/ip.py:95 netbox/netbox/navigation/menu.py:179 +#: netbox/netbox/navigation/menu.py:181 msgid "Aggregates" msgstr "Aggregati" -#: ipam/tables/ip.py:125 +#: netbox/ipam/tables/ip.py:125 msgid "Added" msgstr "Aggiunto" -#: ipam/tables/ip.py:128 ipam/tables/ip.py:166 ipam/tables/vlans.py:142 -#: ipam/views.py:346 netbox/navigation/menu.py:165 -#: netbox/navigation/menu.py:167 templates/ipam/vlan.html:84 +#: 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 msgid "Prefixes" msgstr "Prefissi" -#: ipam/tables/ip.py:131 ipam/tables/ip.py:270 ipam/tables/ip.py:324 -#: ipam/tables/vlans.py:86 templates/dcim/device.html:260 -#: templates/ipam/aggregate.html:24 templates/ipam/iprange.html:29 -#: templates/ipam/prefix.html:106 +#: 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/templates/dcim/device.html:260 +#: netbox/templates/ipam/aggregate.html:24 +#: netbox/templates/ipam/iprange.html:29 netbox/templates/ipam/prefix.html:106 msgid "Utilization" msgstr "Utilizzo" -#: ipam/tables/ip.py:171 netbox/navigation/menu.py:161 +#: netbox/ipam/tables/ip.py:171 netbox/netbox/navigation/menu.py:161 msgid "IP Ranges" msgstr "Intervalli IP" -#: ipam/tables/ip.py:221 +#: netbox/ipam/tables/ip.py:221 msgid "Prefix (Flat)" msgstr "Prefisso (piatto)" -#: ipam/tables/ip.py:225 +#: netbox/ipam/tables/ip.py:225 msgid "Depth" msgstr "Profondità" -#: ipam/tables/ip.py:262 +#: netbox/ipam/tables/ip.py:262 msgid "Pool" msgstr "Piscina" -#: ipam/tables/ip.py:266 ipam/tables/ip.py:320 +#: netbox/ipam/tables/ip.py:266 netbox/ipam/tables/ip.py:320 msgid "Marked Utilized" msgstr "Contrassegnato Utilizzato" -#: ipam/tables/ip.py:304 +#: netbox/ipam/tables/ip.py:304 msgid "Start address" msgstr "Indirizzo iniziale" -#: ipam/tables/ip.py:383 +#: netbox/ipam/tables/ip.py:383 msgid "NAT (Inside)" msgstr "NAT (interno)" -#: ipam/tables/ip.py:388 +#: netbox/ipam/tables/ip.py:388 msgid "NAT (Outside)" msgstr "NAT (esterno)" -#: ipam/tables/ip.py:393 +#: netbox/ipam/tables/ip.py:393 msgid "Assigned" msgstr "Assegnata" -#: ipam/tables/ip.py:429 templates/vpn/l2vpntermination.html:16 -#: vpn/forms/filtersets.py:240 +#: netbox/ipam/tables/ip.py:429 netbox/templates/vpn/l2vpntermination.html:16 +#: netbox/vpn/forms/filtersets.py:240 msgid "Assigned Object" msgstr "Oggetto assegnato" -#: ipam/tables/vlans.py:68 +#: netbox/ipam/tables/vlans.py:68 msgid "Scope Type" msgstr "Tipo di ambito" -#: ipam/tables/vlans.py:76 +#: netbox/ipam/tables/vlans.py:76 msgid "VID Ranges" msgstr "Gamme VID" -#: ipam/tables/vlans.py:111 ipam/tables/vlans.py:214 -#: templates/dcim/inc/interface_vlans_table.html:4 +#: netbox/ipam/tables/vlans.py:111 netbox/ipam/tables/vlans.py:214 +#: netbox/templates/dcim/inc/interface_vlans_table.html:4 msgid "VID" msgstr "VID" -#: ipam/tables/vrfs.py:30 +#: netbox/ipam/tables/vrfs.py:30 msgid "RD" msgstr "ROSSO" -#: ipam/tables/vrfs.py:33 +#: netbox/ipam/tables/vrfs.py:33 msgid "Unique" msgstr "Unico" -#: ipam/tables/vrfs.py:37 vpn/tables/l2vpn.py:27 +#: netbox/ipam/tables/vrfs.py:37 netbox/vpn/tables/l2vpn.py:27 msgid "Import Targets" msgstr "Obiettivi di importazione" -#: ipam/tables/vrfs.py:42 vpn/tables/l2vpn.py:32 +#: netbox/ipam/tables/vrfs.py:42 netbox/vpn/tables/l2vpn.py:32 msgid "Export Targets" msgstr "Obiettivi di esportazione" -#: ipam/validators.py:9 +#: netbox/ipam/validators.py:9 #, python-brace-format msgid "{prefix} is not a valid prefix. Did you mean {suggested}?" msgstr "{prefix} non è un prefisso valido. Volevi dire {suggested}?" -#: ipam/validators.py:16 +#: netbox/ipam/validators.py:16 #, python-format msgid "The prefix length must be less than or equal to %(limit_value)s." msgstr "" "La lunghezza del prefisso deve essere inferiore o uguale a %(limit_value)s." -#: ipam/validators.py:24 +#: netbox/ipam/validators.py:24 #, python-format msgid "The prefix length must be greater than or equal to %(limit_value)s." msgstr "" "La lunghezza del prefisso deve essere maggiore o uguale a %(limit_value)s." -#: ipam/validators.py:33 +#: netbox/ipam/validators.py:33 msgid "" "Only alphanumeric characters, asterisks, hyphens, periods, and underscores " "are allowed in DNS names" @@ -9923,31 +10599,31 @@ msgstr "" "Nei nomi DNS sono consentiti solo caratteri alfanumerici, asterischi, " "trattini, punti e trattini bassi" -#: ipam/views.py:533 +#: netbox/ipam/views.py:533 msgid "Child Prefixes" msgstr "Prefissi per bambini" -#: ipam/views.py:569 +#: netbox/ipam/views.py:569 msgid "Child Ranges" msgstr "Gamme per bambini" -#: ipam/views.py:898 +#: netbox/ipam/views.py:898 msgid "Related IPs" msgstr "IP correlati" -#: ipam/views.py:1127 +#: netbox/ipam/views.py:1127 msgid "Device Interfaces" msgstr "Interfacce dei dispositivi" -#: ipam/views.py:1145 +#: netbox/ipam/views.py:1145 msgid "VM Interfaces" msgstr "Interfacce VM" -#: netbox/api/fields.py:65 +#: netbox/netbox/api/fields.py:65 msgid "This field may not be blank." msgstr "Questo campo non può essere vuoto." -#: netbox/api/fields.py:70 +#: netbox/netbox/api/fields.py:70 msgid "" "Value must be passed directly (e.g. \"foo\": 123); do not use a dictionary " "or list." @@ -9955,335 +10631,348 @@ msgstr "" "Il valore deve essere passato direttamente (ad esempio «foo»: 123); non " "utilizzare un dizionario o un elenco." -#: netbox/api/fields.py:91 +#: netbox/netbox/api/fields.py:91 #, python-brace-format msgid "{value} is not a valid choice." msgstr "{value} non è una scelta valida." -#: netbox/api/fields.py:104 +#: netbox/netbox/api/fields.py:104 #, python-brace-format msgid "Invalid content type: {content_type}" msgstr "Tipo di contenuto non valido: {content_type}" -#: netbox/api/fields.py:105 +#: netbox/netbox/api/fields.py:105 msgid "Invalid value. Specify a content type as '.'." msgstr "" "Valore non valido Specifica un tipo di contenuto come " "'.»." -#: netbox/api/fields.py:167 +#: netbox/netbox/api/fields.py:167 msgid "Ranges must be specified in the form (lower, upper)." msgstr "" "Gli intervalli devono essere specificati nel modulo (inferiore, superiore)." -#: netbox/api/fields.py:169 +#: netbox/netbox/api/fields.py:169 msgid "Range boundaries must be defined as integers." msgstr "I limiti dell'intervallo devono essere definiti come numeri interi." -#: netbox/api/serializers/fields.py:40 +#: netbox/netbox/api/serializers/fields.py:40 #, python-brace-format msgid "{class_name} must implement get_view_name()" msgstr "{class_name} deve implementare get_view_name ()" -#: netbox/authentication/__init__.py:138 +#: netbox/netbox/authentication/__init__.py:138 #, python-brace-format msgid "Invalid permission {permission} for model {model}" msgstr "Autorizzazione non valida {permission} per modello {model}" -#: netbox/choices.py:49 +#: netbox/netbox/choices.py:49 msgid "Dark Red" msgstr "Rosso scuro" -#: netbox/choices.py:52 +#: netbox/netbox/choices.py:52 msgid "Rose" msgstr "Rosa" -#: netbox/choices.py:53 +#: netbox/netbox/choices.py:53 msgid "Fuchsia" msgstr "Fucsia" -#: netbox/choices.py:55 +#: netbox/netbox/choices.py:55 msgid "Dark Purple" msgstr "Viola scuro" -#: netbox/choices.py:58 +#: netbox/netbox/choices.py:58 msgid "Light Blue" msgstr "Azzurro chiaro" -#: netbox/choices.py:61 +#: netbox/netbox/choices.py:61 msgid "Aqua" msgstr "acqua" -#: netbox/choices.py:62 +#: netbox/netbox/choices.py:62 msgid "Dark Green" msgstr "Verde scuro" -#: netbox/choices.py:64 +#: netbox/netbox/choices.py:64 msgid "Light Green" msgstr "Verde chiaro" -#: netbox/choices.py:65 +#: netbox/netbox/choices.py:65 msgid "Lime" msgstr "Calce" -#: netbox/choices.py:67 +#: netbox/netbox/choices.py:67 msgid "Amber" msgstr "Ambra" -#: netbox/choices.py:69 +#: netbox/netbox/choices.py:69 msgid "Dark Orange" msgstr "Arancio scuro" -#: netbox/choices.py:70 +#: netbox/netbox/choices.py:70 msgid "Brown" msgstr "Marrone" -#: netbox/choices.py:71 +#: netbox/netbox/choices.py:71 msgid "Light Grey" msgstr "Grigio chiaro" -#: netbox/choices.py:72 +#: netbox/netbox/choices.py:72 msgid "Grey" msgstr "Grigio" -#: netbox/choices.py:73 +#: netbox/netbox/choices.py:73 msgid "Dark Grey" msgstr "Grigio scuro" -#: netbox/choices.py:128 +#: netbox/netbox/choices.py:128 msgid "Direct" msgstr "Diretto" -#: netbox/choices.py:129 +#: netbox/netbox/choices.py:129 msgid "Upload" msgstr "Carica" -#: netbox/choices.py:141 netbox/choices.py:155 +#: netbox/netbox/choices.py:141 netbox/netbox/choices.py:155 msgid "Auto-detect" msgstr "Rilevamento automatico" -#: netbox/choices.py:156 +#: netbox/netbox/choices.py:156 msgid "Comma" msgstr "Virgola" -#: netbox/choices.py:157 +#: netbox/netbox/choices.py:157 msgid "Semicolon" msgstr "Punto e virgola" -#: netbox/choices.py:158 +#: netbox/netbox/choices.py:158 msgid "Tab" msgstr "Tab" -#: netbox/config/__init__.py:67 +#: netbox/netbox/config/__init__.py:67 #, python-brace-format msgid "Invalid configuration parameter: {item}" msgstr "Parametro di configurazione non valido: {item}" -#: netbox/config/parameters.py:22 templates/core/inc/config_data.html:62 +#: netbox/netbox/config/parameters.py:22 +#: netbox/templates/core/inc/config_data.html:62 msgid "Login banner" msgstr "Banner di accesso" -#: netbox/config/parameters.py:24 +#: netbox/netbox/config/parameters.py:24 msgid "Additional content to display on the login page" msgstr "Contenuti aggiuntivi da visualizzare nella pagina di accesso" -#: netbox/config/parameters.py:33 templates/core/inc/config_data.html:66 +#: netbox/netbox/config/parameters.py:33 +#: netbox/templates/core/inc/config_data.html:66 msgid "Maintenance banner" msgstr "Banner di manutenzione" -#: netbox/config/parameters.py:35 +#: netbox/netbox/config/parameters.py:35 msgid "Additional content to display when in maintenance mode" msgstr "Contenuti aggiuntivi da visualizzare in modalità manutenzione" -#: netbox/config/parameters.py:44 templates/core/inc/config_data.html:70 +#: netbox/netbox/config/parameters.py:44 +#: netbox/templates/core/inc/config_data.html:70 msgid "Top banner" msgstr "Banner superiore" -#: netbox/config/parameters.py:46 +#: netbox/netbox/config/parameters.py:46 msgid "Additional content to display at the top of every page" msgstr "" "Contenuti aggiuntivi da visualizzare nella parte superiore di ogni pagina" -#: netbox/config/parameters.py:55 templates/core/inc/config_data.html:74 +#: netbox/netbox/config/parameters.py:55 +#: netbox/templates/core/inc/config_data.html:74 msgid "Bottom banner" msgstr "Banner inferiore" -#: netbox/config/parameters.py:57 +#: netbox/netbox/config/parameters.py:57 msgid "Additional content to display at the bottom of every page" msgstr "" "Contenuti aggiuntivi da visualizzare nella parte inferiore di ogni pagina" -#: netbox/config/parameters.py:68 +#: netbox/netbox/config/parameters.py:68 msgid "Globally unique IP space" msgstr "Spazio IP unico a livello globale" -#: netbox/config/parameters.py:70 +#: netbox/netbox/config/parameters.py:70 msgid "Enforce unique IP addressing within the global table" msgstr "Applica un indirizzo IP univoco all'interno della tabella globale" -#: netbox/config/parameters.py:75 templates/core/inc/config_data.html:44 +#: netbox/netbox/config/parameters.py:75 +#: netbox/templates/core/inc/config_data.html:44 msgid "Prefer IPv4" msgstr "Preferisci IPv4" -#: netbox/config/parameters.py:77 +#: netbox/netbox/config/parameters.py:77 msgid "Prefer IPv4 addresses over IPv6" msgstr "Preferisci gli indirizzi IPv4 rispetto a IPv6" -#: netbox/config/parameters.py:84 +#: netbox/netbox/config/parameters.py:84 msgid "Rack unit height" msgstr "Altezza dell'unità rack" -#: netbox/config/parameters.py:86 +#: netbox/netbox/config/parameters.py:86 msgid "Default unit height for rendered rack elevations" msgstr "" "Altezza dell'unità predefinita per le elevazioni dei rack renderizzate" -#: netbox/config/parameters.py:91 +#: netbox/netbox/config/parameters.py:91 msgid "Rack unit width" msgstr "Larghezza dell'unità rack" -#: netbox/config/parameters.py:93 +#: netbox/netbox/config/parameters.py:93 msgid "Default unit width for rendered rack elevations" msgstr "" "Larghezza dell'unità predefinita per le elevazioni dei rack renderizzate" -#: netbox/config/parameters.py:100 +#: netbox/netbox/config/parameters.py:100 msgid "Powerfeed voltage" msgstr "Tensione di alimentazione" -#: netbox/config/parameters.py:102 +#: netbox/netbox/config/parameters.py:102 msgid "Default voltage for powerfeeds" msgstr "Tensione predefinita per gli alimentatori" -#: netbox/config/parameters.py:107 +#: netbox/netbox/config/parameters.py:107 msgid "Powerfeed amperage" msgstr "Amperaggio di alimentazione" -#: netbox/config/parameters.py:109 +#: netbox/netbox/config/parameters.py:109 msgid "Default amperage for powerfeeds" msgstr "Amperaggio predefinito per i powerfeed" -#: netbox/config/parameters.py:114 +#: netbox/netbox/config/parameters.py:114 msgid "Powerfeed max utilization" msgstr "Utilizzo massimo di Powerfeed" -#: netbox/config/parameters.py:116 +#: netbox/netbox/config/parameters.py:116 msgid "Default max utilization for powerfeeds" msgstr "Utilizzo massimo predefinito per i powerfeed" -#: netbox/config/parameters.py:123 templates/core/inc/config_data.html:53 +#: netbox/netbox/config/parameters.py:123 +#: netbox/templates/core/inc/config_data.html:53 msgid "Allowed URL schemes" msgstr "Schemi URL consentiti" -#: netbox/config/parameters.py:128 +#: netbox/netbox/config/parameters.py:128 msgid "Permitted schemes for URLs in user-provided content" msgstr "Schemi consentiti per gli URL nei contenuti forniti dagli utenti" -#: netbox/config/parameters.py:136 +#: netbox/netbox/config/parameters.py:136 msgid "Default page size" msgstr "Dimensioni di pagina predefinite" -#: netbox/config/parameters.py:142 +#: netbox/netbox/config/parameters.py:142 msgid "Maximum page size" msgstr "Dimensione massima della pagina" -#: netbox/config/parameters.py:150 templates/core/inc/config_data.html:96 +#: netbox/netbox/config/parameters.py:150 +#: netbox/templates/core/inc/config_data.html:96 msgid "Custom validators" msgstr "Validatori personalizzati" -#: netbox/config/parameters.py:152 +#: netbox/netbox/config/parameters.py:152 msgid "Custom validation rules (JSON)" msgstr "Regole di convalida personalizzate (JSON)" -#: netbox/config/parameters.py:160 templates/core/inc/config_data.html:104 +#: netbox/netbox/config/parameters.py:160 +#: netbox/templates/core/inc/config_data.html:104 msgid "Protection rules" msgstr "Regole di protezione" -#: netbox/config/parameters.py:162 +#: netbox/netbox/config/parameters.py:162 msgid "Deletion protection rules (JSON)" msgstr "Regole di protezione dalla cancellazione (JSON)" -#: netbox/config/parameters.py:172 templates/core/inc/config_data.html:117 +#: netbox/netbox/config/parameters.py:172 +#: netbox/templates/core/inc/config_data.html:117 msgid "Default preferences" msgstr "Preferenze predefinite" -#: netbox/config/parameters.py:174 +#: netbox/netbox/config/parameters.py:174 msgid "Default preferences for new users" msgstr "Preferenze predefinite per i nuovi utenti" -#: netbox/config/parameters.py:181 templates/core/inc/config_data.html:129 +#: netbox/netbox/config/parameters.py:181 +#: netbox/templates/core/inc/config_data.html:129 msgid "Maintenance mode" msgstr "Modalità di manutenzione" -#: netbox/config/parameters.py:183 +#: netbox/netbox/config/parameters.py:183 msgid "Enable maintenance mode" msgstr "Abilita la modalità di manutenzione" -#: netbox/config/parameters.py:188 templates/core/inc/config_data.html:133 +#: netbox/netbox/config/parameters.py:188 +#: netbox/templates/core/inc/config_data.html:133 msgid "GraphQL enabled" msgstr "GraphQL abilitato" -#: netbox/config/parameters.py:190 +#: netbox/netbox/config/parameters.py:190 msgid "Enable the GraphQL API" msgstr "Abilita l'API GraphQL" -#: netbox/config/parameters.py:195 templates/core/inc/config_data.html:137 +#: netbox/netbox/config/parameters.py:195 +#: netbox/templates/core/inc/config_data.html:137 msgid "Changelog retention" msgstr "Conservazione del changelog" -#: netbox/config/parameters.py:197 +#: netbox/netbox/config/parameters.py:197 msgid "Days to retain changelog history (set to zero for unlimited)" msgstr "" "Giorni per conservare la cronologia delle modifiche (impostati a zero per un" " numero illimitato)" -#: netbox/config/parameters.py:202 +#: netbox/netbox/config/parameters.py:202 msgid "Job result retention" msgstr "Conservazione dei risultati lavorativi" -#: netbox/config/parameters.py:204 +#: netbox/netbox/config/parameters.py:204 msgid "Days to retain job result history (set to zero for unlimited)" msgstr "" "Giorni per conservare la cronologia dei risultati del lavoro (impostati a " "zero per un numero illimitato)" -#: netbox/config/parameters.py:209 templates/core/inc/config_data.html:145 +#: netbox/netbox/config/parameters.py:209 +#: netbox/templates/core/inc/config_data.html:145 msgid "Maps URL" msgstr "URL delle mappe" -#: netbox/config/parameters.py:211 +#: netbox/netbox/config/parameters.py:211 msgid "Base URL for mapping geographic locations" msgstr "URL di base per la mappatura delle posizioni geografiche" -#: netbox/forms/__init__.py:12 +#: netbox/netbox/forms/__init__.py:12 msgid "Partial match" msgstr "Partita parziale" -#: netbox/forms/__init__.py:13 +#: netbox/netbox/forms/__init__.py:13 msgid "Exact match" msgstr "Corrispondenza esatta" -#: netbox/forms/__init__.py:14 +#: netbox/netbox/forms/__init__.py:14 msgid "Starts with" msgstr "Inizia con" -#: netbox/forms/__init__.py:15 +#: netbox/netbox/forms/__init__.py:15 msgid "Ends with" msgstr "Termina con" -#: netbox/forms/__init__.py:16 +#: netbox/netbox/forms/__init__.py:16 msgid "Regex" msgstr "Regex" -#: netbox/forms/__init__.py:34 +#: netbox/netbox/forms/__init__.py:34 msgid "Object type(s)" msgstr "Tipo/i di oggetto" -#: netbox/forms/__init__.py:40 +#: netbox/netbox/forms/__init__.py:40 msgid "Lookup" msgstr "Cercare" -#: netbox/forms/base.py:90 +#: netbox/netbox/forms/base.py:90 msgid "" "Tag slugs separated by commas, encased with double quotes (e.g. " "\"tag1,tag2,tag3\")" @@ -10291,417 +10980,428 @@ msgstr "" "Slug di tag separati da virgole, racchiusi tra virgolette doppie (ad esempio" " «tag1, tag2, tag3\")" -#: netbox/forms/base.py:120 +#: netbox/netbox/forms/base.py:120 msgid "Add tags" msgstr "Aggiungi tag" -#: netbox/forms/base.py:125 +#: netbox/netbox/forms/base.py:125 msgid "Remove tags" msgstr "Rimuovi tag" -#: netbox/forms/mixins.py:38 +#: netbox/netbox/forms/mixins.py:38 #, python-brace-format msgid "{class_name} must specify a model class." msgstr "{class_name} deve specificare una classe del modello." -#: netbox/models/features.py:280 +#: netbox/netbox/models/features.py:280 #, python-brace-format msgid "Unknown field name '{name}' in custom field data." msgstr "Nome di campo sconosciuto '{name}'nei dati dei campi personalizzati." -#: netbox/models/features.py:286 +#: netbox/netbox/models/features.py:286 #, python-brace-format msgid "Invalid value for custom field '{name}': {error}" msgstr "Valore non valido per il campo personalizzato '{name}»: {error}" -#: netbox/models/features.py:295 +#: netbox/netbox/models/features.py:295 #, python-brace-format msgid "Custom field '{name}' must have a unique value." msgstr "Campo personalizzato '{name}'deve avere un valore univoco." -#: netbox/models/features.py:302 +#: netbox/netbox/models/features.py:302 #, python-brace-format msgid "Missing required custom field '{name}'." msgstr "Campo personalizzato obbligatorio mancante '{name}»." -#: netbox/models/features.py:462 +#: netbox/netbox/models/features.py:462 msgid "Remote data source" msgstr "Fonte dati remota" -#: netbox/models/features.py:472 +#: netbox/netbox/models/features.py:472 msgid "data path" msgstr "percorso dati" -#: netbox/models/features.py:476 +#: netbox/netbox/models/features.py:476 msgid "Path to remote file (relative to data source root)" msgstr "Percorso del file remoto (relativo alla radice dell'origine dati)" -#: netbox/models/features.py:479 +#: netbox/netbox/models/features.py:479 msgid "auto sync enabled" msgstr "sincronizzazione automatica abilitata" -#: netbox/models/features.py:481 +#: netbox/netbox/models/features.py:481 msgid "Enable automatic synchronization of data when the data file is updated" msgstr "" "Abilita la sincronizzazione automatica dei dati quando il file di dati viene" " aggiornato" -#: netbox/models/features.py:484 +#: netbox/netbox/models/features.py:484 msgid "date synced" msgstr "data sincronizzata" -#: netbox/models/features.py:578 +#: netbox/netbox/models/features.py:578 #, python-brace-format msgid "{class_name} must implement a sync_data() method." msgstr "{class_name} deve implementare un metodo sync_data ()." -#: netbox/navigation/menu.py:11 +#: netbox/netbox/navigation/menu.py:11 msgid "Organization" msgstr "Organizzazione" -#: netbox/navigation/menu.py:19 +#: netbox/netbox/navigation/menu.py:19 msgid "Site Groups" msgstr "Gruppi del sito" -#: netbox/navigation/menu.py:27 +#: netbox/netbox/navigation/menu.py:27 msgid "Tenant Groups" msgstr "Gruppi di inquilini" -#: netbox/navigation/menu.py:34 +#: netbox/netbox/navigation/menu.py:34 msgid "Contact Groups" msgstr "Gruppi di contatti" -#: netbox/navigation/menu.py:35 templates/tenancy/contactrole.html:8 +#: netbox/netbox/navigation/menu.py:35 +#: netbox/templates/tenancy/contactrole.html:8 msgid "Contact Roles" msgstr "Ruoli di contatto" -#: netbox/navigation/menu.py:36 +#: netbox/netbox/navigation/menu.py:36 msgid "Contact Assignments" msgstr "Assegnazioni di contatto" -#: netbox/navigation/menu.py:50 +#: netbox/netbox/navigation/menu.py:50 msgid "Rack Roles" msgstr "Ruoli Rack" -#: netbox/navigation/menu.py:54 +#: netbox/netbox/navigation/menu.py:54 msgid "Elevations" msgstr "Elevazioni" -#: netbox/navigation/menu.py:60 netbox/navigation/menu.py:62 +#: netbox/netbox/navigation/menu.py:60 netbox/netbox/navigation/menu.py:62 msgid "Rack Types" msgstr "Tipi di rack" -#: netbox/navigation/menu.py:76 +#: netbox/netbox/navigation/menu.py:76 msgid "Modules" msgstr "Moduli" -#: netbox/navigation/menu.py:80 templates/dcim/device.html:160 -#: templates/dcim/virtualdevicecontext.html:8 +#: netbox/netbox/navigation/menu.py:80 netbox/templates/dcim/device.html:160 +#: netbox/templates/dcim/virtualdevicecontext.html:8 msgid "Virtual Device Contexts" msgstr "Contesti dei dispositivi virtuali" -#: netbox/navigation/menu.py:88 +#: netbox/netbox/navigation/menu.py:88 msgid "Manufacturers" msgstr "Produttori" -#: netbox/navigation/menu.py:92 +#: netbox/netbox/navigation/menu.py:92 msgid "Device Components" msgstr "Componenti del dispositivo" -#: netbox/navigation/menu.py:104 templates/dcim/inventoryitemrole.html:8 +#: netbox/netbox/navigation/menu.py:104 +#: netbox/templates/dcim/inventoryitemrole.html:8 msgid "Inventory Item Roles" msgstr "Ruoli degli articoli di inventario" -#: netbox/navigation/menu.py:111 netbox/navigation/menu.py:115 +#: netbox/netbox/navigation/menu.py:111 netbox/netbox/navigation/menu.py:115 msgid "Connections" msgstr "Connessioni" -#: netbox/navigation/menu.py:117 +#: netbox/netbox/navigation/menu.py:117 msgid "Cables" msgstr "Cavi" -#: netbox/navigation/menu.py:118 +#: netbox/netbox/navigation/menu.py:118 msgid "Wireless Links" msgstr "Collegamenti wireless" -#: netbox/navigation/menu.py:121 +#: netbox/netbox/navigation/menu.py:121 msgid "Interface Connections" msgstr "Connessioni di interfaccia" -#: netbox/navigation/menu.py:126 +#: netbox/netbox/navigation/menu.py:126 msgid "Console Connections" msgstr "Connessioni alla console" -#: netbox/navigation/menu.py:131 +#: netbox/netbox/navigation/menu.py:131 msgid "Power Connections" msgstr "Connessioni di alimentazione" -#: netbox/navigation/menu.py:147 +#: netbox/netbox/navigation/menu.py:147 msgid "Wireless LAN Groups" msgstr "Gruppi LAN wireless" -#: netbox/navigation/menu.py:168 +#: netbox/netbox/navigation/menu.py:168 msgid "Prefix & VLAN Roles" msgstr "Prefisso e ruoli VLAN" -#: netbox/navigation/menu.py:174 +#: netbox/netbox/navigation/menu.py:174 msgid "ASN Ranges" msgstr "Intervalli ASN" -#: netbox/navigation/menu.py:196 +#: netbox/netbox/navigation/menu.py:196 msgid "VLAN Groups" msgstr "Gruppi VLAN" -#: netbox/navigation/menu.py:203 +#: netbox/netbox/navigation/menu.py:203 msgid "Service Templates" msgstr "Modelli di servizio" -#: netbox/navigation/menu.py:204 templates/dcim/device.html:302 -#: templates/ipam/ipaddress.html:118 -#: templates/virtualization/virtualmachine.html:154 +#: netbox/netbox/navigation/menu.py:204 netbox/templates/dcim/device.html:302 +#: netbox/templates/ipam/ipaddress.html:118 +#: netbox/templates/virtualization/virtualmachine.html:154 msgid "Services" msgstr "Servizi" -#: netbox/navigation/menu.py:211 +#: netbox/netbox/navigation/menu.py:211 msgid "VPN" msgstr "VPN" -#: netbox/navigation/menu.py:215 netbox/navigation/menu.py:217 -#: vpn/tables/tunnels.py:24 +#: netbox/netbox/navigation/menu.py:215 netbox/netbox/navigation/menu.py:217 +#: netbox/vpn/tables/tunnels.py:24 msgid "Tunnels" msgstr "Tunnel" -#: netbox/navigation/menu.py:218 templates/vpn/tunnelgroup.html:8 +#: netbox/netbox/navigation/menu.py:218 +#: netbox/templates/vpn/tunnelgroup.html:8 msgid "Tunnel Groups" msgstr "Gruppi di tunnel" -#: netbox/navigation/menu.py:219 +#: netbox/netbox/navigation/menu.py:219 msgid "Tunnel Terminations" msgstr "Terminazioni dei tunnel" -#: netbox/navigation/menu.py:223 netbox/navigation/menu.py:225 -#: vpn/models/l2vpn.py:64 +#: netbox/netbox/navigation/menu.py:223 netbox/netbox/navigation/menu.py:225 +#: netbox/vpn/models/l2vpn.py:64 msgid "L2VPNs" msgstr "VPN L2" -#: netbox/navigation/menu.py:226 templates/vpn/l2vpn.html:56 -#: templates/vpn/tunnel.html:72 vpn/tables/tunnels.py:58 +#: 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/navigation/menu.py:232 +#: netbox/netbox/navigation/menu.py:232 msgid "IKE Proposals" msgstr "Proposte IKE" -#: netbox/navigation/menu.py:233 templates/vpn/ikeproposal.html:41 +#: netbox/netbox/navigation/menu.py:233 +#: netbox/templates/vpn/ikeproposal.html:41 msgid "IKE Policies" msgstr "Politiche IKE" -#: netbox/navigation/menu.py:234 +#: netbox/netbox/navigation/menu.py:234 msgid "IPSec Proposals" msgstr "Proposte IPSec" -#: netbox/navigation/menu.py:235 templates/vpn/ipsecproposal.html:37 +#: netbox/netbox/navigation/menu.py:235 +#: netbox/templates/vpn/ipsecproposal.html:37 msgid "IPSec Policies" msgstr "Criteri IPSec" -#: netbox/navigation/menu.py:236 templates/vpn/ikepolicy.html:38 -#: templates/vpn/ipsecpolicy.html:25 +#: netbox/netbox/navigation/menu.py:236 netbox/templates/vpn/ikepolicy.html:38 +#: netbox/templates/vpn/ipsecpolicy.html:25 msgid "IPSec Profiles" msgstr "Profili IPSec" -#: netbox/navigation/menu.py:243 templates/dcim/device_edit.html:78 -msgid "Virtualization" -msgstr "Virtualizzazione" - -#: netbox/navigation/menu.py:251 -#: templates/virtualization/virtualmachine.html:174 -#: templates/virtualization/virtualmachine/base.html:32 -#: templates/virtualization/virtualmachine_list.html:21 -#: virtualization/tables/virtualmachines.py:104 virtualization/views.py:388 +#: netbox/netbox/navigation/menu.py:251 +#: 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 msgid "Virtual Disks" msgstr "Dischi virtuali" -#: netbox/navigation/menu.py:258 +#: netbox/netbox/navigation/menu.py:258 msgid "Cluster Types" msgstr "Tipi di cluster" -#: netbox/navigation/menu.py:259 +#: netbox/netbox/navigation/menu.py:259 msgid "Cluster Groups" msgstr "Gruppi di cluster" -#: netbox/navigation/menu.py:273 +#: netbox/netbox/navigation/menu.py:273 msgid "Circuit Types" msgstr "Tipi di circuiti" -#: netbox/navigation/menu.py:274 +#: netbox/netbox/navigation/menu.py:274 msgid "Circuit Groups" msgstr "Gruppi di circuiti" -#: netbox/navigation/menu.py:275 templates/circuits/circuit.html:66 +#: netbox/netbox/navigation/menu.py:275 +#: netbox/templates/circuits/circuit.html:66 msgid "Group Assignments" msgstr "Assegnazioni di gruppo" -#: netbox/navigation/menu.py:276 +#: netbox/netbox/navigation/menu.py:276 msgid "Circuit Terminations" msgstr "Terminazioni del circuito" -#: netbox/navigation/menu.py:280 netbox/navigation/menu.py:282 +#: netbox/netbox/navigation/menu.py:280 netbox/netbox/navigation/menu.py:282 msgid "Providers" msgstr "Fornitori" -#: netbox/navigation/menu.py:283 templates/circuits/provider.html:51 +#: netbox/netbox/navigation/menu.py:283 +#: netbox/templates/circuits/provider.html:51 msgid "Provider Accounts" msgstr "Account dei fornitori" -#: netbox/navigation/menu.py:284 +#: netbox/netbox/navigation/menu.py:284 msgid "Provider Networks" msgstr "Reti di fornitori" -#: netbox/navigation/menu.py:298 +#: netbox/netbox/navigation/menu.py:298 msgid "Power Panels" msgstr "Pannelli di alimentazione" -#: netbox/navigation/menu.py:309 +#: netbox/netbox/navigation/menu.py:309 msgid "Configurations" msgstr "Configurazioni" -#: netbox/navigation/menu.py:311 +#: netbox/netbox/navigation/menu.py:311 msgid "Config Contexts" msgstr "Contesti di configurazione" -#: netbox/navigation/menu.py:312 +#: netbox/netbox/navigation/menu.py:312 msgid "Config Templates" msgstr "Modelli di configurazione" -#: netbox/navigation/menu.py:319 netbox/navigation/menu.py:323 +#: netbox/netbox/navigation/menu.py:319 netbox/netbox/navigation/menu.py:323 msgid "Customization" msgstr "Personalizzazione" -#: netbox/navigation/menu.py:325 templates/dcim/device_edit.html:103 -#: templates/dcim/htmx/cable_edit.html:81 -#: templates/dcim/virtualchassis_add.html:31 -#: templates/dcim/virtualchassis_edit.html:40 -#: templates/generic/bulk_edit.html:76 templates/htmx/form.html:19 -#: templates/inc/filter_list.html:30 templates/inc/panels/custom_fields.html:7 -#: templates/ipam/ipaddress_bulk_add.html:35 templates/ipam/vlan_edit.html:59 +#: netbox/netbox/navigation/menu.py:325 +#: netbox/templates/dcim/device_edit.html:103 +#: netbox/templates/dcim/htmx/cable_edit.html:81 +#: netbox/templates/dcim/virtualchassis_add.html:31 +#: netbox/templates/dcim/virtualchassis_edit.html:40 +#: netbox/templates/generic/bulk_edit.html:76 +#: netbox/templates/htmx/form.html:19 netbox/templates/inc/filter_list.html:30 +#: netbox/templates/inc/panels/custom_fields.html:7 +#: netbox/templates/ipam/ipaddress_bulk_add.html:35 +#: netbox/templates/ipam/vlan_edit.html:59 msgid "Custom Fields" msgstr "Campi personalizzati" -#: netbox/navigation/menu.py:326 +#: netbox/netbox/navigation/menu.py:326 msgid "Custom Field Choices" msgstr "Scelte di campo personalizzate" -#: netbox/navigation/menu.py:327 +#: netbox/netbox/navigation/menu.py:327 msgid "Custom Links" msgstr "Link personalizzati" -#: netbox/navigation/menu.py:328 +#: netbox/netbox/navigation/menu.py:328 msgid "Export Templates" msgstr "Modelli di esportazione" -#: netbox/navigation/menu.py:329 +#: netbox/netbox/navigation/menu.py:329 msgid "Saved Filters" msgstr "Filtri salvati" -#: netbox/navigation/menu.py:331 +#: netbox/netbox/navigation/menu.py:331 msgid "Image Attachments" msgstr "Allegati di immagini" -#: netbox/navigation/menu.py:349 +#: netbox/netbox/navigation/menu.py:349 msgid "Operations" msgstr "Operazioni" -#: netbox/navigation/menu.py:353 +#: netbox/netbox/navigation/menu.py:353 msgid "Integrations" msgstr "Integrazioni" -#: netbox/navigation/menu.py:355 +#: netbox/netbox/navigation/menu.py:355 msgid "Data Sources" msgstr "Fonti di dati" -#: netbox/navigation/menu.py:356 +#: netbox/netbox/navigation/menu.py:356 msgid "Event Rules" msgstr "Regole dell'evento" -#: netbox/navigation/menu.py:357 +#: netbox/netbox/navigation/menu.py:357 msgid "Webhooks" msgstr "Webhook" -#: netbox/navigation/menu.py:361 netbox/navigation/menu.py:365 -#: netbox/views/generic/feature_views.py:153 -#: templates/extras/report/base.html:37 templates/extras/script/base.html:36 +#: netbox/netbox/navigation/menu.py:361 netbox/netbox/navigation/menu.py:365 +#: netbox/netbox/views/generic/feature_views.py:153 +#: netbox/templates/extras/report/base.html:37 +#: netbox/templates/extras/script/base.html:36 msgid "Jobs" msgstr "Offerte di lavoro" -#: netbox/navigation/menu.py:371 +#: netbox/netbox/navigation/menu.py:371 msgid "Logging" msgstr "Registrazione" -#: netbox/navigation/menu.py:373 +#: netbox/netbox/navigation/menu.py:373 msgid "Notification Groups" msgstr "Gruppi di notifiche" -#: netbox/navigation/menu.py:374 +#: netbox/netbox/navigation/menu.py:374 msgid "Journal Entries" msgstr "Voci di diario" -#: netbox/navigation/menu.py:375 templates/core/objectchange.html:9 -#: templates/core/objectchange_list.html:4 +#: netbox/netbox/navigation/menu.py:375 +#: netbox/templates/core/objectchange.html:9 +#: netbox/templates/core/objectchange_list.html:4 msgid "Change Log" msgstr "Registro delle modifiche" -#: netbox/navigation/menu.py:382 templates/inc/user_menu.html:29 +#: netbox/netbox/navigation/menu.py:382 netbox/templates/inc/user_menu.html:29 msgid "Admin" msgstr "Amministratore" -#: netbox/navigation/menu.py:430 templates/account/base.html:27 -#: templates/inc/user_menu.html:57 +#: netbox/netbox/navigation/menu.py:430 netbox/templates/account/base.html:27 +#: netbox/templates/inc/user_menu.html:57 msgid "API Tokens" msgstr "Token API" -#: netbox/navigation/menu.py:437 users/forms/model_forms.py:187 -#: users/forms/model_forms.py:195 users/forms/model_forms.py:242 -#: users/forms/model_forms.py:249 +#: netbox/netbox/navigation/menu.py:437 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/navigation/menu.py:445 netbox/navigation/menu.py:449 -#: templates/core/system.html:7 +#: netbox/netbox/navigation/menu.py:445 netbox/netbox/navigation/menu.py:449 +#: netbox/templates/core/system.html:7 msgid "System" msgstr "Sistema" -#: netbox/navigation/menu.py:454 netbox/navigation/menu.py:502 -#: templates/500.html:35 templates/account/preferences.html:22 -#: templates/core/plugin.html:13 templates/core/plugin_list.html:7 -#: templates/core/plugin_list.html:12 +#: netbox/netbox/navigation/menu.py:454 netbox/netbox/navigation/menu.py:502 +#: netbox/templates/500.html:35 netbox/templates/account/preferences.html:22 +#: netbox/templates/core/plugin.html:13 +#: netbox/templates/core/plugin_list.html:7 +#: netbox/templates/core/plugin_list.html:12 msgid "Plugins" msgstr "Plugin" -#: netbox/navigation/menu.py:459 +#: netbox/netbox/navigation/menu.py:459 msgid "Configuration History" msgstr "Cronologia della configurazione" -#: netbox/navigation/menu.py:465 templates/core/rq_task.html:8 -#: templates/core/rq_task_list.html:22 +#: netbox/netbox/navigation/menu.py:465 netbox/templates/core/rq_task.html:8 +#: netbox/templates/core/rq_task_list.html:22 msgid "Background Tasks" msgstr "Attività in background" -#: netbox/plugins/navigation.py:47 netbox/plugins/navigation.py:69 +#: netbox/netbox/plugins/navigation.py:47 +#: netbox/netbox/plugins/navigation.py:69 msgid "Permissions must be passed as a tuple or list." msgstr "Le autorizzazioni devono essere passate come tupla o elenco." -#: netbox/plugins/navigation.py:51 +#: netbox/netbox/plugins/navigation.py:51 msgid "Buttons must be passed as a tuple or list." msgstr "I pulsanti devono essere passati come tupla o lista." -#: netbox/plugins/navigation.py:73 +#: netbox/netbox/plugins/navigation.py:73 msgid "Button color must be a choice within ButtonColorChoices." msgstr "" "Il colore del pulsante deve essere una scelta all'interno di " "ButtonColorChoices." -#: netbox/plugins/registration.py:25 +#: netbox/netbox/plugins/registration.py:25 #, python-brace-format msgid "" "PluginTemplateExtension class {template_extension} was passed as an " @@ -10710,7 +11410,7 @@ msgstr "" "classe PluginTemplateExtension {template_extension} è stato approvato come " "istanza!" -#: netbox/plugins/registration.py:31 +#: netbox/netbox/plugins/registration.py:31 #, python-brace-format msgid "" "{template_extension} is not a subclass of " @@ -10719,196 +11419,197 @@ msgstr "" "{template_extension} non è una sottoclasse di " "Netbox.plugins.PluginTemplateExtension!" -#: netbox/plugins/registration.py:51 +#: netbox/netbox/plugins/registration.py:51 #, python-brace-format msgid "{item} must be an instance of netbox.plugins.PluginMenuItem" msgstr "{item} deve essere un'istanza di Netbox.Plugins.PluginMenuItem" -#: netbox/plugins/registration.py:62 +#: netbox/netbox/plugins/registration.py:62 #, 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/plugins/registration.py:67 +#: netbox/netbox/plugins/registration.py:67 #, python-brace-format msgid "{button} must be an instance of netbox.plugins.PluginMenuButton" msgstr "{button} deve essere un'istanza di Netbox.plugins.PluginMenuButton" -#: netbox/plugins/templates.py:37 +#: netbox/netbox/plugins/templates.py:37 msgid "extra_context must be a dictionary" msgstr "extra_context deve essere un dizionario" -#: netbox/preferences.py:19 +#: netbox/netbox/preferences.py:19 msgid "HTMX Navigation" msgstr "Navigazione HTMX" -#: netbox/preferences.py:24 +#: netbox/netbox/preferences.py:24 msgid "Enable dynamic UI navigation" msgstr "Abilita la navigazione dinamica dell'interfaccia utente" -#: netbox/preferences.py:26 +#: netbox/netbox/preferences.py:26 msgid "Experimental feature" msgstr "Funzione sperimentale" -#: netbox/preferences.py:29 +#: netbox/netbox/preferences.py:29 msgid "Language" msgstr "Lingua" -#: netbox/preferences.py:34 +#: netbox/netbox/preferences.py:34 msgid "Forces UI translation to the specified language" msgstr "Forza la traduzione dell'interfaccia utente nella lingua specificata" -#: netbox/preferences.py:36 +#: netbox/netbox/preferences.py:36 msgid "Support for translation has been disabled locally" msgstr "Il supporto per la traduzione è stato disabilitato localmente" -#: netbox/preferences.py:42 +#: netbox/netbox/preferences.py:42 msgid "Page length" msgstr "Lunghezza della pagina" -#: netbox/preferences.py:44 +#: netbox/netbox/preferences.py:44 msgid "The default number of objects to display per page" msgstr "Il numero predefinito di oggetti da visualizzare per pagina" -#: netbox/preferences.py:48 +#: netbox/netbox/preferences.py:48 msgid "Paginator placement" msgstr "Posizionamento dell'impaginatore" -#: netbox/preferences.py:50 +#: netbox/netbox/preferences.py:50 msgid "Bottom" msgstr "Parte inferiore" -#: netbox/preferences.py:51 +#: netbox/netbox/preferences.py:51 msgid "Top" msgstr "Top" -#: netbox/preferences.py:52 +#: netbox/netbox/preferences.py:52 msgid "Both" msgstr "Entrambi" -#: netbox/preferences.py:55 +#: netbox/netbox/preferences.py:55 msgid "Where the paginator controls will be displayed relative to a table" msgstr "" "Dove verranno visualizzati i controlli dell'impaginatore rispetto a una " "tabella" -#: netbox/preferences.py:60 +#: netbox/netbox/preferences.py:60 msgid "Data format" msgstr "Formato dati" -#: netbox/preferences.py:65 +#: netbox/netbox/preferences.py:65 msgid "The preferred syntax for displaying generic data within the UI" msgstr "" "La sintassi preferita per la visualizzazione di dati generici all'interno " "dell'interfaccia utente" -#: netbox/registry.py:14 +#: netbox/netbox/registry.py:14 #, python-brace-format msgid "Invalid store: {key}" msgstr "Negozio non valido: {key}" -#: netbox/registry.py:17 +#: netbox/netbox/registry.py:17 msgid "Cannot add stores to registry after initialization" msgstr "Impossibile aggiungere negozi al registro dopo l'inizializzazione" -#: netbox/registry.py:20 +#: netbox/netbox/registry.py:20 msgid "Cannot delete stores from registry" msgstr "Impossibile eliminare i negozi dal registro" -#: netbox/settings.py:760 +#: netbox/netbox/settings.py:760 msgid "Czech" msgstr "cechi" -#: netbox/settings.py:761 +#: netbox/netbox/settings.py:761 msgid "Danish" msgstr "danese" -#: netbox/settings.py:762 +#: netbox/netbox/settings.py:762 msgid "German" msgstr "Tedesco" -#: netbox/settings.py:763 +#: netbox/netbox/settings.py:763 msgid "English" msgstr "Inglese" -#: netbox/settings.py:764 +#: netbox/netbox/settings.py:764 msgid "Spanish" msgstr "spagnolo" -#: netbox/settings.py:765 +#: netbox/netbox/settings.py:765 msgid "French" msgstr "Francese" -#: netbox/settings.py:766 +#: netbox/netbox/settings.py:766 msgid "Italian" msgstr "Italiano" -#: netbox/settings.py:767 +#: netbox/netbox/settings.py:767 msgid "Japanese" msgstr "Giapponese" -#: netbox/settings.py:768 +#: netbox/netbox/settings.py:768 msgid "Dutch" msgstr "Olandese" -#: netbox/settings.py:769 +#: netbox/netbox/settings.py:769 msgid "Polish" msgstr "Polacco" -#: netbox/settings.py:770 +#: netbox/netbox/settings.py:770 msgid "Portuguese" msgstr "portoghese" -#: netbox/settings.py:771 +#: netbox/netbox/settings.py:771 msgid "Russian" msgstr "Russo" -#: netbox/settings.py:772 +#: netbox/netbox/settings.py:772 msgid "Turkish" msgstr "turco" -#: netbox/settings.py:773 +#: netbox/netbox/settings.py:773 msgid "Ukrainian" msgstr "ucraino" -#: netbox/settings.py:774 +#: netbox/netbox/settings.py:774 msgid "Chinese" msgstr "Cinese" -#: netbox/tables/columns.py:176 +#: netbox/netbox/tables/columns.py:176 msgid "Select all" msgstr "Seleziona tutto" -#: netbox/tables/columns.py:189 +#: netbox/netbox/tables/columns.py:189 msgid "Toggle all" msgstr "Attiva tutto" -#: netbox/tables/columns.py:300 +#: netbox/netbox/tables/columns.py:300 msgid "Toggle Dropdown" msgstr "Attiva il menu a discesa" -#: netbox/tables/columns.py:572 templates/core/job.html:53 +#: netbox/netbox/tables/columns.py:572 netbox/templates/core/job.html:53 msgid "Error" msgstr "Errore" -#: netbox/tables/tables.py:58 +#: netbox/netbox/tables/tables.py:58 #, python-brace-format msgid "No {model_name} found" msgstr "No {model_name} trovato" -#: netbox/tables/tables.py:249 templates/generic/bulk_import.html:117 +#: netbox/netbox/tables/tables.py:249 +#: netbox/templates/generic/bulk_import.html:117 msgid "Field" msgstr "Campo" -#: netbox/tables/tables.py:252 +#: netbox/netbox/tables/tables.py:252 msgid "Value" msgstr "Valore" -#: netbox/tests/dummy_plugin/navigation.py:29 +#: netbox/netbox/tests/dummy_plugin/navigation.py:29 msgid "Dummy Plugin" msgstr "Plugin fittizio" -#: netbox/views/generic/bulk_views.py:114 +#: netbox/netbox/views/generic/bulk_views.py:114 #, python-brace-format msgid "" "There was an error rendering the selected export template ({template}): " @@ -10917,56 +11618,56 @@ msgstr "" "Si è verificato un errore durante il rendering del modello di esportazione " "selezionato ({template}): {error}" -#: netbox/views/generic/bulk_views.py:416 +#: netbox/netbox/views/generic/bulk_views.py:416 #, python-brace-format msgid "Row {i}: Object with ID {id} does not exist" msgstr "Fila {i}: Oggetto con ID {id} non esiste" -#: netbox/views/generic/bulk_views.py:702 -#: netbox/views/generic/bulk_views.py:900 -#: netbox/views/generic/bulk_views.py:948 +#: netbox/netbox/views/generic/bulk_views.py:709 +#: netbox/netbox/views/generic/bulk_views.py:910 +#: netbox/netbox/views/generic/bulk_views.py:958 #, python-brace-format msgid "No {object_type} were selected." msgstr "No {object_type} sono stati selezionati." -#: netbox/views/generic/bulk_views.py:782 +#: netbox/netbox/views/generic/bulk_views.py:788 #, python-brace-format msgid "Renamed {count} {object_type}" msgstr "Rinominato {count} {object_type}" -#: netbox/views/generic/bulk_views.py:878 +#: netbox/netbox/views/generic/bulk_views.py:888 #, python-brace-format msgid "Deleted {count} {object_type}" msgstr "Eliminato {count} {object_type}" -#: netbox/views/generic/feature_views.py:40 +#: netbox/netbox/views/generic/feature_views.py:40 msgid "Changelog" msgstr "Registro delle modifiche" -#: netbox/views/generic/feature_views.py:93 +#: netbox/netbox/views/generic/feature_views.py:93 msgid "Journal" msgstr "rivista" -#: netbox/views/generic/feature_views.py:207 +#: netbox/netbox/views/generic/feature_views.py:207 msgid "Unable to synchronize data: No data file set." msgstr "Impossibile sincronizzare i dati: nessun file di dati impostato." -#: netbox/views/generic/feature_views.py:211 +#: netbox/netbox/views/generic/feature_views.py:211 #, python-brace-format msgid "Synchronized data for {object_type} {object}." msgstr "Dati sincronizzati per {object_type} {object}." -#: netbox/views/generic/feature_views.py:236 +#: netbox/netbox/views/generic/feature_views.py:236 #, python-brace-format msgid "Synced {count} {object_type}" msgstr "Sincronizzato {count} {object_type}" -#: netbox/views/generic/object_views.py:108 +#: netbox/netbox/views/generic/object_views.py:108 #, python-brace-format msgid "{class_name} must implement get_children()" msgstr "{class_name} deve implementare get_children ()" -#: netbox/views/misc.py:44 +#: netbox/netbox/views/misc.py:46 msgid "" "There was an error loading the dashboard configuration. A default dashboard " "is in use." @@ -10974,705 +11675,747 @@ msgstr "" "Si è verificato un errore durante il caricamento della configurazione del " "dashboard. È in uso un pannello di controllo predefinito." -#: templates/403.html:4 +#: netbox/templates/403.html:4 msgid "Access Denied" msgstr "Accesso negato" -#: templates/403.html:9 +#: netbox/templates/403.html:9 msgid "You do not have permission to access this page" msgstr "Non sei autorizzato ad accedere a questa pagina" -#: templates/404.html:4 +#: netbox/templates/404.html:4 msgid "Page Not Found" msgstr "Pagina non trovata" -#: templates/404.html:9 +#: netbox/templates/404.html:9 msgid "The requested page does not exist" msgstr "La pagina richiesta non esiste" -#: templates/500.html:7 templates/500.html:18 +#: netbox/templates/500.html:7 netbox/templates/500.html:18 msgid "Server Error" msgstr "Errore del server" -#: templates/500.html:23 +#: netbox/templates/500.html:23 msgid "There was a problem with your request. Please contact an administrator" msgstr "" "C'è stato un problema con la tua richiesta. Contatta un amministratore" -#: templates/500.html:28 +#: netbox/templates/500.html:28 msgid "The complete exception is provided below" msgstr "L'eccezione completa è riportata di seguito" -#: templates/500.html:33 templates/core/system.html:40 +#: netbox/templates/500.html:33 netbox/templates/core/system.html:40 msgid "Python version" msgstr "Versione Python" -#: templates/500.html:34 +#: netbox/templates/500.html:34 msgid "NetBox version" msgstr "Versione NetBox" -#: templates/500.html:36 +#: netbox/templates/500.html:36 msgid "None installed" msgstr "Nessuno installato" -#: templates/500.html:39 +#: netbox/templates/500.html:39 msgid "If further assistance is required, please post to the" msgstr "Se è necessaria ulteriore assistenza, invia un messaggio al" -#: templates/500.html:39 +#: netbox/templates/500.html:39 msgid "NetBox discussion forum" msgstr "Forum di discussione NetBox" -#: templates/500.html:39 +#: netbox/templates/500.html:39 msgid "on GitHub" msgstr "su GitHub" -#: templates/500.html:42 templates/base/40x.html:17 +#: netbox/templates/500.html:42 netbox/templates/base/40x.html:17 msgid "Home Page" msgstr "Pagina iniziale" -#: templates/account/base.html:7 templates/inc/user_menu.html:45 -#: vpn/forms/bulk_edit.py:255 vpn/forms/filtersets.py:189 -#: vpn/forms/model_forms.py:379 +#: netbox/templates/account/base.html:7 netbox/templates/inc/user_menu.html:45 +#: netbox/vpn/forms/bulk_edit.py:255 netbox/vpn/forms/filtersets.py:189 +#: netbox/vpn/forms/model_forms.py:379 msgid "Profile" msgstr "Profilo" -#: templates/account/base.html:13 templates/account/notifications.html:7 -#: templates/inc/user_menu.html:15 +#: netbox/templates/account/base.html:13 +#: netbox/templates/account/notifications.html:7 +#: netbox/templates/inc/user_menu.html:15 msgid "Notifications" msgstr "Notifiche" -#: templates/account/base.html:16 templates/account/subscriptions.html:7 -#: templates/inc/user_menu.html:51 +#: netbox/templates/account/base.html:16 +#: netbox/templates/account/subscriptions.html:7 +#: netbox/templates/inc/user_menu.html:51 msgid "Subscriptions" msgstr "Abbonamenti" -#: templates/account/base.html:19 templates/inc/user_menu.html:54 +#: netbox/templates/account/base.html:19 +#: netbox/templates/inc/user_menu.html:54 msgid "Preferences" msgstr "Preferenze" -#: templates/account/password.html:5 +#: netbox/templates/account/password.html:5 msgid "Change Password" msgstr "Cambia password" -#: templates/account/password.html:19 templates/account/preferences.html:77 -#: templates/core/configrevision_restore.html:63 -#: templates/dcim/devicebay_populate.html:34 -#: templates/dcim/virtualchassis_add_member.html:26 -#: templates/dcim/virtualchassis_edit.html:103 -#: templates/extras/object_journal.html:26 templates/extras/script.html:38 -#: templates/generic/bulk_add_component.html:67 -#: templates/generic/bulk_delete.html:65 templates/generic/bulk_edit.html:106 -#: templates/generic/bulk_import.html:56 templates/generic/bulk_import.html:78 -#: templates/generic/bulk_import.html:100 -#: templates/generic/bulk_remove.html:62 templates/generic/bulk_rename.html:63 -#: templates/generic/confirmation_form.html:19 -#: templates/generic/object_edit.html:72 templates/htmx/delete_form.html:53 -#: templates/htmx/delete_form.html:55 templates/ipam/ipaddress_assign.html:28 -#: templates/virtualization/cluster_add_devices.html:30 +#: netbox/templates/account/password.html:19 +#: netbox/templates/account/preferences.html:77 +#: netbox/templates/core/configrevision_restore.html:63 +#: netbox/templates/dcim/devicebay_populate.html:34 +#: netbox/templates/dcim/virtualchassis_add_member.html:26 +#: netbox/templates/dcim/virtualchassis_edit.html:103 +#: netbox/templates/extras/object_journal.html:26 +#: netbox/templates/extras/script.html:38 +#: netbox/templates/generic/bulk_add_component.html:67 +#: netbox/templates/generic/bulk_delete.html:65 +#: netbox/templates/generic/bulk_edit.html:106 +#: netbox/templates/generic/bulk_import.html:56 +#: netbox/templates/generic/bulk_import.html:78 +#: netbox/templates/generic/bulk_import.html:100 +#: netbox/templates/generic/bulk_remove.html:62 +#: netbox/templates/generic/bulk_rename.html:63 +#: netbox/templates/generic/confirmation_form.html:19 +#: netbox/templates/generic/object_edit.html:72 +#: netbox/templates/htmx/delete_form.html:53 +#: netbox/templates/htmx/delete_form.html:55 +#: netbox/templates/ipam/ipaddress_assign.html:28 +#: netbox/templates/virtualization/cluster_add_devices.html:30 msgid "Cancel" msgstr "Annulla" -#: templates/account/password.html:20 templates/account/preferences.html:78 -#: templates/dcim/devicebay_populate.html:35 -#: templates/dcim/virtualchassis_add_member.html:28 -#: templates/dcim/virtualchassis_edit.html:105 -#: templates/extras/dashboard/widget_add.html:26 -#: templates/extras/dashboard/widget_config.html:19 -#: templates/extras/object_journal.html:27 -#: templates/generic/object_edit.html:75 -#: utilities/templates/helpers/applied_filters.html:16 -#: utilities/templates/helpers/table_config_form.html:40 +#: netbox/templates/account/password.html:20 +#: netbox/templates/account/preferences.html:78 +#: netbox/templates/dcim/devicebay_populate.html:35 +#: netbox/templates/dcim/virtualchassis_add_member.html:28 +#: netbox/templates/dcim/virtualchassis_edit.html:105 +#: netbox/templates/extras/dashboard/widget_add.html:26 +#: netbox/templates/extras/dashboard/widget_config.html:19 +#: netbox/templates/extras/object_journal.html:27 +#: netbox/templates/generic/object_edit.html:75 +#: netbox/utilities/templates/helpers/applied_filters.html:16 +#: netbox/utilities/templates/helpers/table_config_form.html:40 msgid "Save" msgstr "Salva" -#: templates/account/preferences.html:34 +#: netbox/templates/account/preferences.html:34 msgid "Table Configurations" msgstr "Configurazioni della tabella" -#: templates/account/preferences.html:39 +#: netbox/templates/account/preferences.html:39 msgid "Clear table preferences" msgstr "Cancella le preferenze della tabella" -#: templates/account/preferences.html:47 +#: netbox/templates/account/preferences.html:47 msgid "Toggle All" msgstr "Attiva tutto" -#: templates/account/preferences.html:49 +#: netbox/templates/account/preferences.html:49 msgid "Table" msgstr "Tavolo" -#: templates/account/preferences.html:50 +#: netbox/templates/account/preferences.html:50 msgid "Ordering" msgstr "Ordinazione" -#: templates/account/preferences.html:51 +#: netbox/templates/account/preferences.html:51 msgid "Columns" msgstr "Colonne" -#: templates/account/preferences.html:71 templates/dcim/cable_trace.html:113 -#: templates/extras/object_configcontext.html:43 +#: netbox/templates/account/preferences.html:71 +#: netbox/templates/dcim/cable_trace.html:113 +#: netbox/templates/extras/object_configcontext.html:43 msgid "None found" msgstr "Nessuno trovato" -#: templates/account/profile.html:6 +#: netbox/templates/account/profile.html:6 msgid "User Profile" msgstr "Profilo utente" -#: templates/account/profile.html:12 +#: netbox/templates/account/profile.html:12 msgid "Account Details" msgstr "Dettagli dell'account" -#: templates/account/profile.html:29 templates/tenancy/contact.html:43 -#: templates/users/user.html:25 tenancy/forms/bulk_edit.py:109 +#: netbox/templates/account/profile.html:29 +#: netbox/templates/tenancy/contact.html:43 +#: netbox/templates/users/user.html:25 netbox/tenancy/forms/bulk_edit.py:109 msgid "Email" msgstr "E-mail" -#: templates/account/profile.html:33 templates/users/user.html:29 +#: netbox/templates/account/profile.html:33 +#: netbox/templates/users/user.html:29 msgid "Account Created" msgstr "Account creato" -#: templates/account/profile.html:37 templates/users/user.html:33 +#: netbox/templates/account/profile.html:37 +#: netbox/templates/users/user.html:33 msgid "Last Login" msgstr "Ultimo accesso" -#: templates/account/profile.html:41 templates/users/user.html:45 +#: netbox/templates/account/profile.html:41 +#: netbox/templates/users/user.html:45 msgid "Superuser" msgstr "Superutente" -#: templates/account/profile.html:45 templates/inc/user_menu.html:31 -#: templates/users/user.html:41 +#: netbox/templates/account/profile.html:45 +#: netbox/templates/inc/user_menu.html:31 netbox/templates/users/user.html:41 msgid "Staff" msgstr "Personale" -#: templates/account/profile.html:53 templates/users/objectpermission.html:82 -#: templates/users/user.html:53 +#: netbox/templates/account/profile.html:53 +#: netbox/templates/users/objectpermission.html:82 +#: netbox/templates/users/user.html:53 msgid "Assigned Groups" msgstr "Gruppi assegnati" -#: templates/account/profile.html:58 -#: templates/circuits/circuit_terminations_swap.html:18 -#: templates/circuits/circuit_terminations_swap.html:26 -#: templates/circuits/circuittermination.html:34 -#: templates/circuits/inc/circuit_termination.html:68 -#: templates/core/objectchange.html:124 templates/core/objectchange.html:142 -#: templates/dcim/devicebay.html:59 -#: templates/dcim/inc/panels/inventory_items.html:45 -#: templates/dcim/interface.html:296 templates/dcim/modulebay.html:80 -#: templates/extras/configcontext.html:70 templates/extras/eventrule.html:66 -#: templates/extras/htmx/script_result.html:60 -#: templates/extras/webhook.html:65 templates/extras/webhook.html:75 -#: templates/inc/panel_table.html:13 templates/inc/panels/comments.html:10 -#: templates/ipam/inc/panels/fhrp_groups.html:56 templates/users/group.html:34 -#: templates/users/group.html:44 templates/users/objectpermission.html:77 -#: templates/users/objectpermission.html:87 templates/users/user.html:58 -#: templates/users/user.html:68 +#: netbox/templates/account/profile.html:58 +#: netbox/templates/circuits/circuit_terminations_swap.html:18 +#: netbox/templates/circuits/circuit_terminations_swap.html:26 +#: netbox/templates/circuits/circuittermination.html:34 +#: netbox/templates/circuits/inc/circuit_termination.html:68 +#: netbox/templates/core/objectchange.html:124 +#: 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/modulebay.html:80 +#: netbox/templates/extras/configcontext.html:70 +#: netbox/templates/extras/eventrule.html:66 +#: netbox/templates/extras/htmx/script_result.html:60 +#: netbox/templates/extras/webhook.html:65 +#: netbox/templates/extras/webhook.html:75 +#: netbox/templates/inc/panel_table.html:13 +#: netbox/templates/inc/panels/comments.html:10 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:56 +#: netbox/templates/users/group.html:34 netbox/templates/users/group.html:44 +#: netbox/templates/users/objectpermission.html:77 +#: netbox/templates/users/objectpermission.html:87 +#: netbox/templates/users/user.html:58 netbox/templates/users/user.html:68 msgid "None" msgstr "Nessuna" -#: templates/account/profile.html:68 templates/users/user.html:78 +#: netbox/templates/account/profile.html:68 +#: netbox/templates/users/user.html:78 msgid "Recent Activity" msgstr "Attività recente" -#: templates/account/token.html:8 templates/account/token_list.html:6 +#: netbox/templates/account/token.html:8 +#: netbox/templates/account/token_list.html:6 msgid "My API Tokens" msgstr "I miei token API" -#: templates/account/token.html:11 templates/account/token.html:19 -#: templates/users/token.html:6 templates/users/token.html:14 -#: users/forms/filtersets.py:120 +#: netbox/templates/account/token.html:11 +#: netbox/templates/account/token.html:19 netbox/templates/users/token.html:6 +#: netbox/templates/users/token.html:14 netbox/users/forms/filtersets.py:120 msgid "Token" msgstr "Token" -#: templates/account/token.html:39 templates/users/token.html:31 -#: users/forms/bulk_edit.py:107 +#: netbox/templates/account/token.html:39 netbox/templates/users/token.html:31 +#: netbox/users/forms/bulk_edit.py:107 msgid "Write enabled" msgstr "Scrittura abilitata" -#: templates/account/token.html:51 templates/users/token.html:43 +#: netbox/templates/account/token.html:51 netbox/templates/users/token.html:43 msgid "Last used" msgstr "Usato per ultimo" -#: templates/account/token_list.html:12 +#: netbox/templates/account/token_list.html:12 msgid "Add a Token" msgstr "Aggiungi un token" -#: templates/base/base.html:22 templates/home.html:27 +#: netbox/templates/base/base.html:22 netbox/templates/home.html:27 msgid "Home" msgstr "Home" -#: templates/base/layout.html:25 +#: netbox/templates/base/layout.html:25 msgid "NetBox Motif" msgstr "Motivo NetBox" -#: templates/base/layout.html:38 templates/base/layout.html:39 -#: templates/login.html:14 templates/login.html:15 +#: netbox/templates/base/layout.html:38 netbox/templates/base/layout.html:39 +#: netbox/templates/login.html:14 netbox/templates/login.html:15 msgid "NetBox Logo" msgstr "Logo NetBox" -#: templates/base/layout.html:150 templates/base/layout.html:151 +#: netbox/templates/base/layout.html:150 netbox/templates/base/layout.html:151 msgid "Docs" msgstr "Documenti" -#: templates/base/layout.html:156 templates/base/layout.html:157 -#: templates/rest_framework/api.html:10 +#: netbox/templates/base/layout.html:156 netbox/templates/base/layout.html:157 +#: netbox/templates/rest_framework/api.html:10 msgid "REST API" msgstr "API REST" -#: templates/base/layout.html:162 templates/base/layout.html:163 +#: netbox/templates/base/layout.html:162 netbox/templates/base/layout.html:163 msgid "REST API documentation" msgstr "Documentazione API REST" -#: templates/base/layout.html:169 templates/base/layout.html:170 +#: netbox/templates/base/layout.html:169 netbox/templates/base/layout.html:170 msgid "GraphQL API" msgstr "API GraphQL" -#: templates/base/layout.html:185 templates/base/layout.html:186 +#: netbox/templates/base/layout.html:185 netbox/templates/base/layout.html:186 msgid "NetBox Labs Support" msgstr "Supporto NetBox Labs" -#: templates/base/layout.html:194 templates/base/layout.html:195 +#: netbox/templates/base/layout.html:194 netbox/templates/base/layout.html:195 msgid "Source Code" msgstr "Codice sorgente" -#: templates/base/layout.html:200 templates/base/layout.html:201 +#: netbox/templates/base/layout.html:200 netbox/templates/base/layout.html:201 msgid "Community" msgstr "Comunità" -#: templates/circuits/circuit.html:47 +#: netbox/templates/circuits/circuit.html:47 msgid "Install Date" msgstr "Data di installazione" -#: templates/circuits/circuit.html:51 +#: netbox/templates/circuits/circuit.html:51 msgid "Termination Date" msgstr "Data di cessazione" -#: templates/circuits/circuit.html:70 -#: templates/ipam/inc/panels/fhrp_groups.html:15 +#: netbox/templates/circuits/circuit.html:70 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:15 msgid "Assign Group" msgstr "Assegna gruppo" -#: templates/circuits/circuit_terminations_swap.html:4 +#: netbox/templates/circuits/circuit_terminations_swap.html:4 msgid "Swap Circuit Terminations" msgstr "Terminazioni del circuito di scambio" -#: templates/circuits/circuit_terminations_swap.html:8 +#: netbox/templates/circuits/circuit_terminations_swap.html:8 #, python-format msgid "Swap these terminations for circuit %(circuit)s?" msgstr "Sostituisci queste terminazioni con un circuito %(circuit)s?" -#: templates/circuits/circuit_terminations_swap.html:14 +#: netbox/templates/circuits/circuit_terminations_swap.html:14 msgid "A side" msgstr "Un lato" -#: templates/circuits/circuit_terminations_swap.html:22 +#: netbox/templates/circuits/circuit_terminations_swap.html:22 msgid "Z side" msgstr "Lato Z" -#: templates/circuits/circuitgroup.html:16 +#: netbox/templates/circuits/circuitgroup.html:16 msgid "Assign Circuit" msgstr "Assegna circuito" -#: templates/circuits/circuitgroupassignment.html:19 +#: netbox/templates/circuits/circuitgroupassignment.html:19 msgid "Circuit Group Assignment" msgstr "Assegnazione del gruppo di circuiti" -#: templates/circuits/circuittype.html:10 +#: netbox/templates/circuits/circuittype.html:10 msgid "Add Circuit" msgstr "Aggiungi circuito" -#: templates/circuits/circuittype.html:19 +#: netbox/templates/circuits/circuittype.html:19 msgid "Circuit Type" msgstr "Tipo di circuito" -#: templates/circuits/inc/circuit_termination.html:10 -#: templates/dcim/manufacturer.html:11 -#: templates/generic/bulk_add_component.html:22 -#: templates/users/objectpermission.html:38 -#: utilities/templates/buttons/add.html:4 -#: utilities/templates/helpers/table_config_form.html:20 +#: netbox/templates/circuits/inc/circuit_termination.html:10 +#: netbox/templates/dcim/manufacturer.html:11 +#: netbox/templates/generic/bulk_add_component.html:22 +#: netbox/templates/users/objectpermission.html:38 +#: netbox/utilities/templates/buttons/add.html:4 +#: netbox/utilities/templates/helpers/table_config_form.html:20 msgid "Add" msgstr "Inserisci" -#: templates/circuits/inc/circuit_termination.html:15 -#: templates/circuits/inc/circuit_termination_fields.html:36 -#: templates/dcim/inc/panels/inventory_items.html:32 -#: templates/dcim/powerpanel.html:56 templates/extras/script_list.html:30 -#: templates/generic/object_edit.html:47 -#: templates/ipam/inc/ipaddress_edit_header.html:7 -#: templates/ipam/inc/panels/fhrp_groups.html:43 -#: utilities/templates/buttons/edit.html:3 +#: netbox/templates/circuits/inc/circuit_termination.html:15 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:36 +#: netbox/templates/dcim/inc/panels/inventory_items.html:32 +#: netbox/templates/dcim/powerpanel.html:56 +#: netbox/templates/extras/script_list.html:30 +#: netbox/templates/generic/object_edit.html:47 +#: netbox/templates/ipam/inc/ipaddress_edit_header.html:7 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:43 +#: netbox/utilities/templates/buttons/edit.html:3 msgid "Edit" msgstr "Modifica" -#: templates/circuits/inc/circuit_termination.html:18 +#: netbox/templates/circuits/inc/circuit_termination.html:18 msgid "Swap" msgstr "Scambia" -#: templates/circuits/inc/circuit_termination_fields.html:19 -#: templates/dcim/consoleport.html:59 templates/dcim/consoleserverport.html:60 -#: templates/dcim/powerfeed.html:114 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:19 +#: netbox/templates/dcim/consoleport.html:59 +#: netbox/templates/dcim/consoleserverport.html:60 +#: netbox/templates/dcim/powerfeed.html:114 msgid "Marked as connected" msgstr "Contrassegnata come connessa" -#: templates/circuits/inc/circuit_termination_fields.html:21 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:21 msgid "to" msgstr "a" -#: templates/circuits/inc/circuit_termination_fields.html:31 -#: templates/circuits/inc/circuit_termination_fields.html:32 -#: templates/dcim/frontport.html:80 -#: templates/dcim/inc/connection_endpoints.html:7 -#: templates/dcim/interface.html:154 templates/dcim/rearport.html:76 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:31 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:32 +#: netbox/templates/dcim/frontport.html:80 +#: netbox/templates/dcim/inc/connection_endpoints.html:7 +#: netbox/templates/dcim/interface.html:154 +#: netbox/templates/dcim/rearport.html:76 msgid "Trace" msgstr "Traccia" -#: templates/circuits/inc/circuit_termination_fields.html:35 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:35 msgid "Edit cable" msgstr "Modifica cavo" -#: templates/circuits/inc/circuit_termination_fields.html:40 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:40 msgid "Remove cable" msgstr "Rimuovere il cavo" -#: templates/circuits/inc/circuit_termination_fields.html:41 -#: templates/dcim/bulk_disconnect.html:5 -#: templates/dcim/device/consoleports.html:12 -#: templates/dcim/device/consoleserverports.html:12 -#: templates/dcim/device/frontports.html:12 -#: templates/dcim/device/interfaces.html:16 -#: templates/dcim/device/poweroutlets.html:12 -#: templates/dcim/device/powerports.html:12 -#: templates/dcim/device/rearports.html:12 templates/dcim/powerpanel.html:61 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:41 +#: netbox/templates/dcim/bulk_disconnect.html:5 +#: netbox/templates/dcim/device/consoleports.html:12 +#: netbox/templates/dcim/device/consoleserverports.html:12 +#: netbox/templates/dcim/device/frontports.html:12 +#: netbox/templates/dcim/device/interfaces.html:16 +#: netbox/templates/dcim/device/poweroutlets.html:12 +#: netbox/templates/dcim/device/powerports.html:12 +#: netbox/templates/dcim/device/rearports.html:12 +#: netbox/templates/dcim/powerpanel.html:61 msgid "Disconnect" msgstr "Disconnetti" -#: templates/circuits/inc/circuit_termination_fields.html:48 -#: templates/dcim/consoleport.html:69 templates/dcim/consoleserverport.html:70 -#: templates/dcim/frontport.html:102 templates/dcim/interface.html:180 -#: templates/dcim/interface.html:200 templates/dcim/powerfeed.html:127 -#: templates/dcim/poweroutlet.html:71 templates/dcim/poweroutlet.html:72 -#: templates/dcim/powerport.html:73 templates/dcim/rearport.html:98 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:48 +#: netbox/templates/dcim/consoleport.html:69 +#: netbox/templates/dcim/consoleserverport.html:70 +#: netbox/templates/dcim/frontport.html:102 +#: netbox/templates/dcim/interface.html:180 +#: netbox/templates/dcim/interface.html:200 +#: netbox/templates/dcim/powerfeed.html:127 +#: netbox/templates/dcim/poweroutlet.html:71 +#: netbox/templates/dcim/poweroutlet.html:72 +#: netbox/templates/dcim/powerport.html:73 +#: netbox/templates/dcim/rearport.html:98 msgid "Connect" msgstr "Connetti" -#: templates/circuits/inc/circuit_termination_fields.html:70 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:70 msgid "Downstream" msgstr "A valle" -#: templates/circuits/inc/circuit_termination_fields.html:71 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:71 msgid "Upstream" msgstr "A monte" -#: templates/circuits/inc/circuit_termination_fields.html:80 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:80 msgid "Cross-Connect" msgstr "Connessione incrociata" -#: templates/circuits/inc/circuit_termination_fields.html:84 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:84 msgid "Patch Panel/Port" msgstr "Pannello di permutazione/porta" -#: templates/circuits/provider.html:11 +#: netbox/templates/circuits/provider.html:11 msgid "Add circuit" msgstr "Aggiungi circuito" -#: templates/circuits/provideraccount.html:17 +#: netbox/templates/circuits/provideraccount.html:17 msgid "Provider Account" msgstr "Account fornitore" -#: templates/core/configrevision.html:35 +#: netbox/templates/core/configrevision.html:35 msgid "Configuration Data" msgstr "Dati di configurazione" -#: templates/core/configrevision.html:40 +#: netbox/templates/core/configrevision.html:40 msgid "Comment" msgstr "Commento" -#: templates/core/configrevision_restore.html:8 -#: templates/core/configrevision_restore.html:25 -#: templates/core/configrevision_restore.html:64 +#: netbox/templates/core/configrevision_restore.html:8 +#: netbox/templates/core/configrevision_restore.html:25 +#: netbox/templates/core/configrevision_restore.html:64 msgid "Restore" msgstr "Ripristina" -#: templates/core/configrevision_restore.html:36 +#: netbox/templates/core/configrevision_restore.html:36 msgid "Parameter" msgstr "Parametro" -#: templates/core/configrevision_restore.html:37 +#: netbox/templates/core/configrevision_restore.html:37 msgid "Current Value" msgstr "Valore attuale" -#: templates/core/configrevision_restore.html:38 +#: netbox/templates/core/configrevision_restore.html:38 msgid "New Value" msgstr "Nuovo valore" -#: templates/core/configrevision_restore.html:50 +#: netbox/templates/core/configrevision_restore.html:50 msgid "Changed" msgstr "Modificato" -#: templates/core/datafile.html:42 templates/ipam/iprange.html:25 -#: templates/virtualization/virtualdisk.html:29 -#: virtualization/tables/virtualmachines.py:198 +#: netbox/templates/core/datafile.html:42 +#: netbox/templates/ipam/iprange.html:25 +#: netbox/templates/virtualization/virtualdisk.html:29 +#: netbox/virtualization/tables/virtualmachines.py:198 msgid "Size" msgstr "Taglia" -#: templates/core/datafile.html:43 +#: netbox/templates/core/datafile.html:43 msgid "bytes" msgstr "byte" -#: templates/core/datafile.html:46 +#: netbox/templates/core/datafile.html:46 msgid "SHA256 Hash" msgstr "Hash SHA256" -#: templates/core/datasource.html:14 templates/core/datasource.html:20 -#: utilities/templates/buttons/sync.html:5 +#: netbox/templates/core/datasource.html:14 +#: netbox/templates/core/datasource.html:20 +#: netbox/utilities/templates/buttons/sync.html:5 msgid "Sync" msgstr "sincronizzazione" -#: templates/core/datasource.html:50 +#: netbox/templates/core/datasource.html:50 msgid "Last synced" msgstr "Ultima sincronizzazione" -#: templates/core/datasource.html:84 +#: netbox/templates/core/datasource.html:84 msgid "Backend" msgstr "Backend" -#: templates/core/datasource.html:99 +#: netbox/templates/core/datasource.html:99 msgid "No parameters defined" msgstr "Nessun parametro definito" -#: templates/core/datasource.html:114 +#: netbox/templates/core/datasource.html:114 msgid "Files" msgstr "File" -#: templates/core/inc/config_data.html:7 +#: netbox/templates/core/inc/config_data.html:7 msgid "Rack elevations" msgstr "Elevazioni dei rack" -#: templates/core/inc/config_data.html:10 +#: netbox/templates/core/inc/config_data.html:10 msgid "Default unit height" msgstr "Altezza predefinita dell'unità" -#: templates/core/inc/config_data.html:14 +#: netbox/templates/core/inc/config_data.html:14 msgid "Default unit width" msgstr "Larghezza dell'unità predefinita" -#: templates/core/inc/config_data.html:20 +#: netbox/templates/core/inc/config_data.html:20 msgid "Power feeds" msgstr "Alimentatori" -#: templates/core/inc/config_data.html:23 +#: netbox/templates/core/inc/config_data.html:23 msgid "Default voltage" msgstr "Tensione predefinita" -#: templates/core/inc/config_data.html:27 +#: netbox/templates/core/inc/config_data.html:27 msgid "Default amperage" msgstr "Amperaggio predefinito" -#: templates/core/inc/config_data.html:31 +#: netbox/templates/core/inc/config_data.html:31 msgid "Default max utilization" msgstr "Utilizzo massimo predefinito" -#: templates/core/inc/config_data.html:40 +#: netbox/templates/core/inc/config_data.html:40 msgid "Enforce global unique" msgstr "Applica l'unicità globale" -#: templates/core/inc/config_data.html:83 +#: netbox/templates/core/inc/config_data.html:83 msgid "Paginate count" msgstr "Conteggio delle pagine" -#: templates/core/inc/config_data.html:87 +#: netbox/templates/core/inc/config_data.html:87 msgid "Max page size" msgstr "Dimensione massima della pagina" -#: templates/core/inc/config_data.html:114 +#: netbox/templates/core/inc/config_data.html:114 msgid "User preferences" msgstr "Preferenze utente" -#: templates/core/inc/config_data.html:141 +#: netbox/templates/core/inc/config_data.html:141 msgid "Job retention" msgstr "Conservazione del lavoro" -#: templates/core/job.html:35 templates/core/rq_task.html:12 -#: templates/core/rq_task.html:49 templates/core/rq_task.html:58 +#: netbox/templates/core/job.html:35 netbox/templates/core/rq_task.html:12 +#: netbox/templates/core/rq_task.html:49 netbox/templates/core/rq_task.html:58 msgid "Job" msgstr "Lavoro" -#: templates/core/job.html:58 templates/extras/journalentry.html:26 +#: netbox/templates/core/job.html:58 +#: netbox/templates/extras/journalentry.html:26 msgid "Created By" msgstr "Creato da" -#: templates/core/job.html:66 +#: netbox/templates/core/job.html:66 msgid "Scheduling" msgstr "Pianificazione" -#: templates/core/job.html:77 +#: netbox/templates/core/job.html:77 #, python-format msgid "every %(interval)s minutes" msgstr "ogni %(interval)s verbale" -#: templates/core/objectchange.html:29 -#: templates/users/objectpermission.html:42 +#: netbox/templates/core/objectchange.html:29 +#: netbox/templates/users/objectpermission.html:42 msgid "Change" msgstr "Cambia" -#: templates/core/objectchange.html:79 +#: netbox/templates/core/objectchange.html:79 msgid "Difference" msgstr "Differenza" -#: templates/core/objectchange.html:82 +#: netbox/templates/core/objectchange.html:82 msgid "Previous" msgstr "Precedente" -#: templates/core/objectchange.html:85 +#: netbox/templates/core/objectchange.html:85 msgid "Next" msgstr "Prossimo" -#: templates/core/objectchange.html:93 +#: netbox/templates/core/objectchange.html:93 msgid "Object Created" msgstr "Oggetto creato" -#: templates/core/objectchange.html:95 +#: netbox/templates/core/objectchange.html:95 msgid "Object Deleted" msgstr "Oggetto eliminato" -#: templates/core/objectchange.html:97 +#: netbox/templates/core/objectchange.html:97 msgid "No Changes" msgstr "Nessuna modifica" -#: templates/core/objectchange.html:111 +#: netbox/templates/core/objectchange.html:111 msgid "Pre-Change Data" msgstr "Dati precedenti alla modifica" -#: templates/core/objectchange.html:122 +#: netbox/templates/core/objectchange.html:122 msgid "Warning: Comparing non-atomic change to previous change record" msgstr "" "Avvertenza: confronto delle modifiche non atomiche con il record di " "modifiche precedente" -#: templates/core/objectchange.html:131 +#: netbox/templates/core/objectchange.html:131 msgid "Post-Change Data" msgstr "Dati successivi alla modifica" -#: templates/core/objectchange.html:162 +#: netbox/templates/core/objectchange.html:162 #, python-format msgid "See All %(count)s Changes" msgstr "Vedi tutto %(count)s Modifiche" -#: templates/core/objectchange_list.html:9 -#: templates/extras/object_changelog.html:15 +#: netbox/templates/core/objectchange_list.html:9 +#: netbox/templates/extras/object_changelog.html:15 msgid "Change log retention" msgstr "Conservazione del registro delle modifiche" -#: templates/core/objectchange_list.html:9 -#: templates/extras/object_changelog.html:15 +#: netbox/templates/core/objectchange_list.html:9 +#: netbox/templates/extras/object_changelog.html:15 msgid "days" msgstr "giorni" -#: templates/core/objectchange_list.html:9 -#: templates/extras/object_changelog.html:15 +#: netbox/templates/core/objectchange_list.html:9 +#: netbox/templates/extras/object_changelog.html:15 msgid "Indefinite" msgstr "Indefinito" -#: templates/core/plugin.html:22 +#: netbox/templates/core/plugin.html:22 msgid "Not installed" msgstr "Non installato" -#: templates/core/plugin.html:33 +#: netbox/templates/core/plugin.html:33 msgid "Overview" msgstr "Panoramica" -#: templates/core/plugin.html:39 +#: netbox/templates/core/plugin.html:39 msgid "Install" msgstr "Installare" -#: templates/core/plugin.html:51 +#: netbox/templates/core/plugin.html:51 msgid "Plugin Details" msgstr "Dettagli del plugin" -#: templates/core/plugin.html:58 +#: netbox/templates/core/plugin.html:58 msgid "Summary" msgstr "Riepilogo" -#: templates/core/plugin.html:76 +#: netbox/templates/core/plugin.html:76 msgid "License" msgstr "Licenza" -#: templates/core/plugin.html:96 +#: netbox/templates/core/plugin.html:96 msgid "Version History" msgstr "Cronologia delle versioni" -#: templates/core/plugin.html:107 +#: netbox/templates/core/plugin.html:107 msgid "Local Installation Instructions" msgstr "Istruzioni per l'installazione locale" -#: templates/core/rq_queue_list.html:5 templates/core/rq_queue_list.html:13 -#: templates/core/rq_task_list.html:14 templates/core/rq_worker.html:7 +#: netbox/templates/core/rq_queue_list.html:5 +#: netbox/templates/core/rq_queue_list.html:13 +#: netbox/templates/core/rq_task_list.html:14 +#: netbox/templates/core/rq_worker.html:7 msgid "Background Queues" msgstr "Code in background" -#: templates/core/rq_queue_list.html:24 templates/core/rq_queue_list.html:25 -#: templates/core/rq_worker_list.html:49 templates/core/rq_worker_list.html:50 -#: templates/extras/script_result.html:67 -#: templates/extras/script_result.html:69 -#: templates/inc/table_controls_htmx.html:30 -#: templates/inc/table_controls_htmx.html:33 +#: netbox/templates/core/rq_queue_list.html:24 +#: netbox/templates/core/rq_queue_list.html:25 +#: netbox/templates/core/rq_worker_list.html:49 +#: netbox/templates/core/rq_worker_list.html:50 +#: netbox/templates/extras/script_result.html:67 +#: netbox/templates/extras/script_result.html:69 +#: netbox/templates/inc/table_controls_htmx.html:30 +#: netbox/templates/inc/table_controls_htmx.html:33 msgid "Configure Table" msgstr "Configura tabella" -#: templates/core/rq_task.html:29 +#: netbox/templates/core/rq_task.html:29 msgid "Stop" msgstr "Fermare" -#: templates/core/rq_task.html:34 +#: netbox/templates/core/rq_task.html:34 msgid "Requeue" msgstr "Coda" -#: templates/core/rq_task.html:39 +#: netbox/templates/core/rq_task.html:39 msgid "Enqueue" msgstr "Accodare" -#: templates/core/rq_task.html:61 +#: netbox/templates/core/rq_task.html:61 msgid "Queue" msgstr "Coda" -#: templates/core/rq_task.html:65 +#: netbox/templates/core/rq_task.html:65 msgid "Timeout" msgstr "Timeout" -#: templates/core/rq_task.html:69 +#: netbox/templates/core/rq_task.html:69 msgid "Result TTL" msgstr "Risultato TTL" -#: templates/core/rq_task.html:89 +#: netbox/templates/core/rq_task.html:89 msgid "Meta" msgstr "Meta" -#: templates/core/rq_task.html:93 +#: netbox/templates/core/rq_task.html:93 msgid "Arguments" msgstr "Argomenti" -#: templates/core/rq_task.html:97 +#: netbox/templates/core/rq_task.html:97 msgid "Keyword Arguments" msgstr "Argomenti delle parole" -#: templates/core/rq_task.html:103 +#: netbox/templates/core/rq_task.html:103 msgid "Depends on" msgstr "Dipende da" -#: templates/core/rq_task.html:109 +#: netbox/templates/core/rq_task.html:109 msgid "Exception" msgstr "Eccezione" -#: templates/core/rq_task_list.html:28 +#: netbox/templates/core/rq_task_list.html:28 msgid "tasks in " msgstr "attività in " -#: templates/core/rq_task_list.html:33 +#: netbox/templates/core/rq_task_list.html:33 msgid "Queued Jobs" msgstr "Lavori in coda" -#: templates/core/rq_task_list.html:64 templates/extras/script_result.html:86 +#: netbox/templates/core/rq_task_list.html:64 +#: netbox/templates/extras/script_result.html:86 #, python-format msgid "" "Select all %(count)s %(object_type_plural)s matching query" @@ -11680,382 +12423,400 @@ msgstr "" "Seleziona tutti %(count)s %(object_type_plural)s domanda " "corrispondente" -#: templates/core/rq_worker.html:10 +#: netbox/templates/core/rq_worker.html:10 msgid "Worker Info" msgstr "Informazioni sul lavoratore" -#: templates/core/rq_worker.html:31 templates/core/rq_worker.html:40 +#: netbox/templates/core/rq_worker.html:31 +#: netbox/templates/core/rq_worker.html:40 msgid "Worker" msgstr "Lavoratore" -#: templates/core/rq_worker.html:55 +#: netbox/templates/core/rq_worker.html:55 msgid "Queues" msgstr "Code" -#: templates/core/rq_worker.html:63 +#: netbox/templates/core/rq_worker.html:63 msgid "Curent Job" msgstr "Lavori attuali" -#: templates/core/rq_worker.html:67 +#: netbox/templates/core/rq_worker.html:67 msgid "Successful job count" msgstr "Numero di lavori riusciti" -#: templates/core/rq_worker.html:71 +#: netbox/templates/core/rq_worker.html:71 msgid "Failed job count" msgstr "Numero di lavori non riusciti" -#: templates/core/rq_worker.html:75 +#: netbox/templates/core/rq_worker.html:75 msgid "Total working time" msgstr "Orario di lavoro totale" -#: templates/core/rq_worker.html:76 +#: netbox/templates/core/rq_worker.html:76 msgid "seconds" msgstr "secondi" -#: templates/core/rq_worker_list.html:13 templates/core/rq_worker_list.html:21 +#: netbox/templates/core/rq_worker_list.html:13 +#: netbox/templates/core/rq_worker_list.html:21 msgid "Background Workers" msgstr "Lavoratori di background" -#: templates/core/rq_worker_list.html:29 +#: netbox/templates/core/rq_worker_list.html:29 #, python-format msgid "Workers in %(queue_name)s" msgstr "Lavoratori in %(queue_name)s" -#: templates/core/system.html:11 utilities/templates/buttons/export.html:4 +#: netbox/templates/core/system.html:11 +#: netbox/utilities/templates/buttons/export.html:4 msgid "Export" msgstr "Esporta" -#: templates/core/system.html:28 +#: netbox/templates/core/system.html:28 msgid "System Status" msgstr "Stato del sistema" -#: templates/core/system.html:31 +#: netbox/templates/core/system.html:31 msgid "NetBox release" msgstr "Versione NetBox" -#: templates/core/system.html:44 +#: netbox/templates/core/system.html:44 msgid "Django version" msgstr "Versione Django" -#: templates/core/system.html:48 +#: netbox/templates/core/system.html:48 msgid "PostgreSQL version" msgstr "Versione PostgreSQL" -#: templates/core/system.html:52 +#: netbox/templates/core/system.html:52 msgid "Database name" msgstr "Nome del database" -#: templates/core/system.html:56 +#: netbox/templates/core/system.html:56 msgid "Database size" msgstr "Dimensioni del database" -#: templates/core/system.html:61 +#: netbox/templates/core/system.html:61 msgid "Unavailable" msgstr "Non disponibile" -#: templates/core/system.html:66 +#: netbox/templates/core/system.html:66 msgid "RQ workers" msgstr "Lavoratori RQ" -#: templates/core/system.html:69 +#: netbox/templates/core/system.html:69 msgid "default queue" msgstr "coda predefinita" -#: templates/core/system.html:73 +#: netbox/templates/core/system.html:73 msgid "System time" msgstr "Ora del sistema" -#: templates/core/system.html:85 +#: netbox/templates/core/system.html:85 msgid "Current Configuration" msgstr "Configurazione attuale" -#: templates/dcim/bulk_disconnect.html:9 +#: netbox/templates/dcim/bulk_disconnect.html:9 #, python-format msgid "" "Are you sure you want to disconnect these %(count)s %(obj_type_plural)s?" msgstr "Sei sicuro di volerli disconnettere? %(count)s %(obj_type_plural)s?" -#: templates/dcim/cable_trace.html:10 +#: netbox/templates/dcim/cable_trace.html:10 #, python-format msgid "Cable Trace for %(object_type)s %(object)s" msgstr "Cable Trace per %(object_type)s %(object)s" -#: templates/dcim/cable_trace.html:24 templates/dcim/inc/rack_elevation.html:7 +#: netbox/templates/dcim/cable_trace.html:24 +#: netbox/templates/dcim/inc/rack_elevation.html:7 msgid "Download SVG" msgstr "Scarica SVG" -#: templates/dcim/cable_trace.html:30 +#: netbox/templates/dcim/cable_trace.html:30 msgid "Asymmetric Path" msgstr "Percorso asimmetrico" -#: templates/dcim/cable_trace.html:31 +#: netbox/templates/dcim/cable_trace.html:31 msgid "The nodes below have no links and result in an asymmetric path" msgstr "" "I nodi sottostanti non hanno collegamenti e generano un percorso asimmetrico" -#: templates/dcim/cable_trace.html:38 +#: netbox/templates/dcim/cable_trace.html:38 msgid "Path split" msgstr "Divisione del percorso" -#: templates/dcim/cable_trace.html:39 +#: netbox/templates/dcim/cable_trace.html:39 msgid "Select a node below to continue" msgstr "Seleziona un nodo qui sotto per continuare" -#: templates/dcim/cable_trace.html:55 +#: netbox/templates/dcim/cable_trace.html:55 msgid "Trace Completed" msgstr "Traccia completata" -#: templates/dcim/cable_trace.html:58 +#: netbox/templates/dcim/cable_trace.html:58 msgid "Total segments" msgstr "Segmenti totali" -#: templates/dcim/cable_trace.html:62 +#: netbox/templates/dcim/cable_trace.html:62 msgid "Total length" msgstr "Lunghezza totale" -#: templates/dcim/cable_trace.html:77 +#: netbox/templates/dcim/cable_trace.html:77 msgid "No paths found" msgstr "Nessun percorso trovato" -#: templates/dcim/cable_trace.html:85 +#: netbox/templates/dcim/cable_trace.html:85 msgid "Related Paths" msgstr "Percorsi correlati" -#: templates/dcim/cable_trace.html:89 +#: netbox/templates/dcim/cable_trace.html:89 msgid "Origin" msgstr "Origine" -#: templates/dcim/cable_trace.html:90 +#: netbox/templates/dcim/cable_trace.html:90 msgid "Destination" msgstr "Destinazione" -#: templates/dcim/cable_trace.html:91 +#: netbox/templates/dcim/cable_trace.html:91 msgid "Segments" msgstr "Segmenti" -#: templates/dcim/cable_trace.html:104 +#: netbox/templates/dcim/cable_trace.html:104 msgid "Incomplete" msgstr "Incompleto" -#: templates/dcim/component_list.html:14 +#: netbox/templates/dcim/component_list.html:14 msgid "Rename Selected" msgstr "Rinomina selezionato" -#: templates/dcim/consoleport.html:65 templates/dcim/consoleserverport.html:66 -#: templates/dcim/frontport.html:98 templates/dcim/interface.html:176 -#: templates/dcim/poweroutlet.html:69 templates/dcim/powerport.html:69 +#: netbox/templates/dcim/consoleport.html:65 +#: netbox/templates/dcim/consoleserverport.html:66 +#: netbox/templates/dcim/frontport.html:98 +#: netbox/templates/dcim/interface.html:176 +#: netbox/templates/dcim/poweroutlet.html:69 +#: netbox/templates/dcim/powerport.html:69 msgid "Not Connected" msgstr "Non connesso" -#: templates/dcim/device.html:34 +#: netbox/templates/dcim/device.html:34 msgid "Highlight device in rack" msgstr "Evidenzia il dispositivo nel rack" -#: templates/dcim/device.html:55 +#: netbox/templates/dcim/device.html:55 msgid "Not racked" msgstr "Non rastrellato" -#: templates/dcim/device.html:62 templates/dcim/site.html:94 +#: netbox/templates/dcim/device.html:62 netbox/templates/dcim/site.html:94 msgid "GPS Coordinates" msgstr "Coordinate GPS" -#: templates/dcim/device.html:68 templates/dcim/site.html:81 -#: templates/dcim/site.html:100 +#: netbox/templates/dcim/device.html:68 netbox/templates/dcim/site.html:81 +#: netbox/templates/dcim/site.html:100 msgid "Map" msgstr "Mappa" -#: templates/dcim/device.html:108 templates/dcim/inventoryitem.html:56 -#: templates/dcim/module.html:81 templates/dcim/modulebay.html:74 -#: templates/dcim/rack.html:61 +#: netbox/templates/dcim/device.html:108 +#: netbox/templates/dcim/inventoryitem.html:56 +#: netbox/templates/dcim/module.html:81 +#: netbox/templates/dcim/modulebay.html:74 netbox/templates/dcim/rack.html:61 msgid "Asset Tag" msgstr "Etichetta dell'asset" -#: templates/dcim/device.html:123 +#: netbox/templates/dcim/device.html:123 msgid "View Virtual Chassis" msgstr "Visualizza lo chassis virtuale" -#: templates/dcim/device.html:164 +#: netbox/templates/dcim/device.html:164 msgid "Create VDC" msgstr "Crea VDC" -#: templates/dcim/device.html:175 templates/dcim/device_edit.html:64 -#: virtualization/forms/model_forms.py:223 +#: netbox/templates/dcim/device.html:175 +#: netbox/templates/dcim/device_edit.html:64 +#: netbox/virtualization/forms/model_forms.py:223 msgid "Management" msgstr "Direzione" -#: templates/dcim/device.html:195 templates/dcim/device.html:211 -#: templates/dcim/device.html:227 -#: templates/virtualization/virtualmachine.html:57 -#: templates/virtualization/virtualmachine.html:73 +#: netbox/templates/dcim/device.html:195 netbox/templates/dcim/device.html:211 +#: netbox/templates/dcim/device.html:227 +#: netbox/templates/virtualization/virtualmachine.html:57 +#: netbox/templates/virtualization/virtualmachine.html:73 msgid "NAT for" msgstr "NAT per" -#: templates/dcim/device.html:197 templates/dcim/device.html:213 -#: templates/dcim/device.html:229 -#: templates/virtualization/virtualmachine.html:59 -#: templates/virtualization/virtualmachine.html:75 +#: netbox/templates/dcim/device.html:197 netbox/templates/dcim/device.html:213 +#: netbox/templates/dcim/device.html:229 +#: netbox/templates/virtualization/virtualmachine.html:59 +#: netbox/templates/virtualization/virtualmachine.html:75 msgid "NAT" msgstr "NAT" -#: templates/dcim/device.html:252 templates/dcim/rack.html:73 +#: netbox/templates/dcim/device.html:252 netbox/templates/dcim/rack.html:73 msgid "Power Utilization" msgstr "Utilizzo dell'energia" -#: templates/dcim/device.html:256 +#: netbox/templates/dcim/device.html:256 msgid "Input" msgstr "Ingresso" -#: templates/dcim/device.html:257 +#: netbox/templates/dcim/device.html:257 msgid "Outlets" msgstr "Punti vendita" -#: templates/dcim/device.html:258 +#: netbox/templates/dcim/device.html:258 msgid "Allocated" msgstr "Assegnata" -#: templates/dcim/device.html:268 templates/dcim/device.html:270 -#: templates/dcim/device.html:286 templates/dcim/powerfeed.html:67 +#: netbox/templates/dcim/device.html:268 netbox/templates/dcim/device.html:270 +#: netbox/templates/dcim/device.html:286 +#: netbox/templates/dcim/powerfeed.html:67 msgid "VA" msgstr "VA" -#: templates/dcim/device.html:280 +#: netbox/templates/dcim/device.html:280 msgctxt "Leg of a power feed" msgid "Leg" msgstr "Gamba" -#: templates/dcim/device.html:306 -#: templates/virtualization/virtualmachine.html:158 +#: netbox/templates/dcim/device.html:306 +#: netbox/templates/virtualization/virtualmachine.html:158 msgid "Add a service" msgstr "Aggiungi un servizio" -#: templates/dcim/device/base.html:21 templates/dcim/device_list.html:9 -#: templates/dcim/devicetype/base.html:18 -#: templates/dcim/inc/moduletype_buttons.html:9 templates/dcim/module.html:18 -#: templates/virtualization/virtualmachine/base.html:22 -#: templates/virtualization/virtualmachine_list.html:8 +#: netbox/templates/dcim/device/base.html:21 +#: netbox/templates/dcim/device_list.html:9 +#: netbox/templates/dcim/devicetype/base.html:18 +#: netbox/templates/dcim/inc/moduletype_buttons.html:9 +#: netbox/templates/dcim/module.html:18 +#: netbox/templates/virtualization/virtualmachine/base.html:22 +#: netbox/templates/virtualization/virtualmachine_list.html:8 msgid "Add Components" msgstr "Aggiungi componenti" -#: templates/dcim/device/consoleports.html:24 +#: netbox/templates/dcim/device/consoleports.html:24 msgid "Add Console Ports" msgstr "Aggiungi porte console" -#: templates/dcim/device/consoleserverports.html:24 +#: netbox/templates/dcim/device/consoleserverports.html:24 msgid "Add Console Server Ports" msgstr "Aggiungi porte Console Server" -#: templates/dcim/device/devicebays.html:10 +#: netbox/templates/dcim/device/devicebays.html:10 msgid "Add Device Bays" msgstr "Aggiungi alloggiamenti per dispositivi" -#: templates/dcim/device/frontports.html:24 +#: netbox/templates/dcim/device/frontports.html:24 msgid "Add Front Ports" msgstr "Aggiungi porte frontali" -#: templates/dcim/device/inc/interface_table_controls.html:9 +#: netbox/templates/dcim/device/inc/interface_table_controls.html:9 msgid "Hide Enabled" msgstr "Nascondi abilitato" -#: templates/dcim/device/inc/interface_table_controls.html:10 +#: netbox/templates/dcim/device/inc/interface_table_controls.html:10 msgid "Hide Disabled" msgstr "Nascondi disattivato" -#: templates/dcim/device/inc/interface_table_controls.html:11 +#: netbox/templates/dcim/device/inc/interface_table_controls.html:11 msgid "Hide Virtual" msgstr "Nascondi virtuale" -#: templates/dcim/device/inc/interface_table_controls.html:12 +#: netbox/templates/dcim/device/inc/interface_table_controls.html:12 msgid "Hide Disconnected" msgstr "Nascondi disconnesso" -#: templates/dcim/device/interfaces.html:27 +#: netbox/templates/dcim/device/interfaces.html:27 msgid "Add Interfaces" msgstr "Aggiungi interfacce" -#: templates/dcim/device/inventory.html:10 -#: templates/dcim/inc/panels/inventory_items.html:10 +#: netbox/templates/dcim/device/inventory.html:10 +#: netbox/templates/dcim/inc/panels/inventory_items.html:10 msgid "Add Inventory Item" msgstr "Aggiungi articolo di inventario" -#: templates/dcim/device/modulebays.html:10 +#: netbox/templates/dcim/device/modulebays.html:10 msgid "Add Module Bays" msgstr "Aggiungi alloggiamenti per moduli" -#: templates/dcim/device/poweroutlets.html:24 +#: netbox/templates/dcim/device/poweroutlets.html:24 msgid "Add Power Outlets" msgstr "Aggiungi prese di corrente" -#: templates/dcim/device/powerports.html:24 +#: netbox/templates/dcim/device/powerports.html:24 msgid "Add Power Port" msgstr "Aggiungi porta di alimentazione" -#: templates/dcim/device/rearports.html:24 +#: netbox/templates/dcim/device/rearports.html:24 msgid "Add Rear Ports" msgstr "Aggiungi porte posteriori" -#: templates/dcim/device/render_config.html:5 -#: templates/virtualization/virtualmachine/render_config.html:5 +#: netbox/templates/dcim/device/render_config.html:5 +#: netbox/templates/virtualization/virtualmachine/render_config.html:5 msgid "Config" msgstr "Configurazione" -#: templates/dcim/device/render_config.html:35 -#: templates/virtualization/virtualmachine/render_config.html:35 +#: netbox/templates/dcim/device/render_config.html:35 +#: netbox/templates/virtualization/virtualmachine/render_config.html:35 msgid "Context Data" msgstr "Dati contestuali" -#: templates/dcim/device/render_config.html:53 -#: templates/virtualization/virtualmachine/render_config.html:53 +#: netbox/templates/dcim/device/render_config.html:55 +#: netbox/templates/virtualization/virtualmachine/render_config.html:55 msgid "Rendered Config" msgstr "Configurazione renderizzata" -#: templates/dcim/device/render_config.html:55 -#: templates/virtualization/virtualmachine/render_config.html:55 +#: netbox/templates/dcim/device/render_config.html:57 +#: netbox/templates/virtualization/virtualmachine/render_config.html:57 msgid "Download" msgstr "Scarica" -#: templates/dcim/device/render_config.html:61 -#: templates/virtualization/virtualmachine/render_config.html:61 -msgid "No configuration template found" -msgstr "Nessun modello di configurazione trovato" +#: netbox/templates/dcim/device/render_config.html:64 +#: netbox/templates/virtualization/virtualmachine/render_config.html:64 +msgid "Error rendering template" +msgstr "" -#: templates/dcim/device_edit.html:44 +#: 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" -#: templates/dcim/device_edit.html:48 -#: utilities/templates/form_helpers/render_field.html:22 +#: netbox/templates/dcim/device_edit.html:48 +#: netbox/utilities/templates/form_helpers/render_field.html:22 msgid "Regenerate Slug" msgstr "Rigenera la lumaca" -#: templates/dcim/device_edit.html:49 templates/generic/bulk_remove.html:21 -#: utilities/templates/helpers/table_config_form.html:23 +#: netbox/templates/dcim/device_edit.html:49 +#: netbox/templates/generic/bulk_remove.html:21 +#: netbox/utilities/templates/helpers/table_config_form.html:23 msgid "Remove" msgstr "Rimuovi" -#: templates/dcim/device_edit.html:110 +#: netbox/templates/dcim/device_edit.html:110 msgid "Local Config Context Data" msgstr "Dati di contesto di configurazione locale" -#: templates/dcim/device_list.html:82 templates/generic/bulk_rename.html:57 -#: templates/virtualization/virtualmachine/interfaces.html:11 -#: templates/virtualization/virtualmachine/virtual_disks.html:11 +#: netbox/templates/dcim/device_list.html:82 +#: netbox/templates/generic/bulk_rename.html:57 +#: netbox/templates/virtualization/virtualmachine/interfaces.html:11 +#: netbox/templates/virtualization/virtualmachine/virtual_disks.html:11 msgid "Rename" msgstr "Rinomina" -#: templates/dcim/devicebay.html:17 +#: netbox/templates/dcim/devicebay.html:17 msgid "Device Bay" msgstr "Vano per dispositivi" -#: templates/dcim/devicebay.html:43 +#: netbox/templates/dcim/devicebay.html:43 msgid "Installed Device" msgstr "Dispositivo installato" -#: templates/dcim/devicebay_depopulate.html:6 +#: netbox/templates/dcim/devicebay_depopulate.html:6 #, python-format msgid "Remove %(device)s from %(device_bay)s?" msgstr "Rimuovi %(device)s da %(device_bay)s?" -#: templates/dcim/devicebay_depopulate.html:13 +#: netbox/templates/dcim/devicebay_depopulate.html:13 #, python-format msgid "" "Are you sure you want to remove %(device)s from " @@ -12064,430 +12825,449 @@ msgstr "" "Sei sicuro di voler rimuovere %(device)s da " "%(device_bay)s?" -#: templates/dcim/devicebay_populate.html:13 +#: netbox/templates/dcim/devicebay_populate.html:13 msgid "Populate" msgstr "Popola" -#: templates/dcim/devicebay_populate.html:22 +#: netbox/templates/dcim/devicebay_populate.html:22 msgid "Bay" msgstr "Baia" -#: templates/dcim/devicerole.html:14 templates/dcim/platform.html:17 +#: netbox/templates/dcim/devicerole.html:14 +#: netbox/templates/dcim/platform.html:17 msgid "Add Device" msgstr "Aggiungi dispositivo" -#: templates/dcim/devicerole.html:40 +#: netbox/templates/dcim/devicerole.html:40 msgid "VM Role" msgstr "Ruolo VM" -#: templates/dcim/devicetype.html:18 templates/dcim/moduletype.html:29 +#: netbox/templates/dcim/devicetype.html:18 +#: netbox/templates/dcim/moduletype.html:29 msgid "Model Name" msgstr "Nome del modello" -#: templates/dcim/devicetype.html:25 templates/dcim/moduletype.html:33 +#: netbox/templates/dcim/devicetype.html:25 +#: netbox/templates/dcim/moduletype.html:33 msgid "Part Number" msgstr "Numero del pezzo" -#: templates/dcim/devicetype.html:41 +#: netbox/templates/dcim/devicetype.html:41 msgid "Exclude From Utilization" msgstr "Escludi dall'utilizzo" -#: templates/dcim/devicetype.html:59 +#: netbox/templates/dcim/devicetype.html:59 msgid "Parent/Child" msgstr "Genitore/figlio" -#: templates/dcim/devicetype.html:71 +#: netbox/templates/dcim/devicetype.html:71 msgid "Front Image" msgstr "Immagine frontale" -#: templates/dcim/devicetype.html:83 +#: netbox/templates/dcim/devicetype.html:83 msgid "Rear Image" msgstr "Immagine posteriore" -#: templates/dcim/frontport.html:54 +#: netbox/templates/dcim/frontport.html:54 msgid "Rear Port Position" msgstr "Posizione porta posteriore" -#: templates/dcim/frontport.html:72 templates/dcim/interface.html:144 -#: templates/dcim/poweroutlet.html:63 templates/dcim/powerport.html:63 -#: templates/dcim/rearport.html:68 +#: netbox/templates/dcim/frontport.html:72 +#: netbox/templates/dcim/interface.html:144 +#: netbox/templates/dcim/poweroutlet.html:63 +#: netbox/templates/dcim/powerport.html:63 +#: netbox/templates/dcim/rearport.html:68 msgid "Marked as Connected" msgstr "Contrassegnato come connesso" -#: templates/dcim/frontport.html:86 templates/dcim/rearport.html:82 +#: netbox/templates/dcim/frontport.html:86 +#: netbox/templates/dcim/rearport.html:82 msgid "Connection Status" msgstr "Stato della connessione" -#: templates/dcim/htmx/cable_edit.html:10 +#: netbox/templates/dcim/htmx/cable_edit.html:10 msgid "A Side" msgstr "Un lato" -#: templates/dcim/htmx/cable_edit.html:30 +#: netbox/templates/dcim/htmx/cable_edit.html:30 msgid "B Side" msgstr "Lato B" -#: templates/dcim/inc/cable_termination.html:65 +#: netbox/templates/dcim/inc/cable_termination.html:65 msgid "No termination" msgstr "Nessuna risoluzione" -#: templates/dcim/inc/cable_toggle_buttons.html:3 +#: netbox/templates/dcim/inc/cable_toggle_buttons.html:3 msgid "Mark Planned" msgstr "Segna pianificato" -#: templates/dcim/inc/cable_toggle_buttons.html:6 +#: netbox/templates/dcim/inc/cable_toggle_buttons.html:6 msgid "Mark Installed" msgstr "Contrassegna installato" -#: templates/dcim/inc/connection_endpoints.html:13 +#: netbox/templates/dcim/inc/connection_endpoints.html:13 msgid "Path Status" msgstr "Stato del percorso" -#: templates/dcim/inc/connection_endpoints.html:18 +#: netbox/templates/dcim/inc/connection_endpoints.html:18 msgid "Not Reachable" msgstr "Non raggiungibile" -#: templates/dcim/inc/connection_endpoints.html:23 +#: netbox/templates/dcim/inc/connection_endpoints.html:23 msgid "Path Endpoints" msgstr "Punti finali del percorso" -#: templates/dcim/inc/endpoint_connection.html:8 -#: templates/dcim/powerfeed.html:120 templates/dcim/rearport.html:94 +#: netbox/templates/dcim/inc/endpoint_connection.html:8 +#: netbox/templates/dcim/powerfeed.html:120 +#: netbox/templates/dcim/rearport.html:94 msgid "Not connected" msgstr "Non connesso" -#: templates/dcim/inc/interface_vlans_table.html:6 +#: netbox/templates/dcim/inc/interface_vlans_table.html:6 msgid "Untagged" msgstr "Senza tag" -#: templates/dcim/inc/interface_vlans_table.html:37 +#: netbox/templates/dcim/inc/interface_vlans_table.html:37 msgid "No VLANs Assigned" msgstr "Nessuna VLAN assegnata" -#: templates/dcim/inc/interface_vlans_table.html:44 -#: templates/ipam/prefix_list.html:16 templates/ipam/prefix_list.html:33 +#: netbox/templates/dcim/inc/interface_vlans_table.html:44 +#: netbox/templates/ipam/prefix_list.html:16 +#: netbox/templates/ipam/prefix_list.html:33 msgid "Clear" msgstr "Trasparente" -#: templates/dcim/inc/interface_vlans_table.html:47 +#: netbox/templates/dcim/inc/interface_vlans_table.html:47 msgid "Clear All" msgstr "Cancella tutto" -#: templates/dcim/inc/panels/racktype_dimensions.html:38 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:38 msgid "Mounting Depth" msgstr "Profondità di montaggio" -#: templates/dcim/inc/panels/racktype_numbering.html:6 +#: netbox/templates/dcim/inc/panels/racktype_numbering.html:6 msgid "Starting Unit" msgstr "Unità di partenza" -#: templates/dcim/inc/panels/racktype_numbering.html:10 +#: netbox/templates/dcim/inc/panels/racktype_numbering.html:10 msgid "Descending Units" msgstr "Unità discendenti" -#: templates/dcim/inc/rack_elevation.html:3 +#: netbox/templates/dcim/inc/rack_elevation.html:3 msgid "Rack elevation" msgstr "Elevazione del rack" -#: templates/dcim/interface.html:17 +#: netbox/templates/dcim/interface.html:17 msgid "Add Child Interface" msgstr "Aggiungi interfaccia figlio" -#: templates/dcim/interface.html:50 +#: netbox/templates/dcim/interface.html:50 msgid "Speed/Duplex" msgstr "Velocità/Duplex" -#: templates/dcim/interface.html:73 +#: netbox/templates/dcim/interface.html:73 msgid "PoE Mode" msgstr "Modalità PoE" -#: templates/dcim/interface.html:77 +#: netbox/templates/dcim/interface.html:77 msgid "PoE Type" msgstr "Tipo PoE" -#: templates/dcim/interface.html:81 -#: templates/virtualization/vminterface.html:63 +#: netbox/templates/dcim/interface.html:81 +#: netbox/templates/virtualization/vminterface.html:63 msgid "802.1Q Mode" msgstr "Modalità 802.1Q" -#: templates/dcim/interface.html:125 -#: templates/virtualization/vminterface.html:59 +#: netbox/templates/dcim/interface.html:125 +#: netbox/templates/virtualization/vminterface.html:59 msgid "MAC Address" msgstr "Indirizzo MAC" -#: templates/dcim/interface.html:151 +#: netbox/templates/dcim/interface.html:151 msgid "Wireless Link" msgstr "Collegamento wireless" -#: templates/dcim/interface.html:218 vpn/choices.py:55 +#: netbox/templates/dcim/interface.html:218 netbox/vpn/choices.py:63 msgid "Peer" msgstr "Pari" -#: templates/dcim/interface.html:230 -#: templates/wireless/inc/wirelesslink_interface.html:26 +#: netbox/templates/dcim/interface.html:230 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:26 msgid "Channel" msgstr "Canale" -#: templates/dcim/interface.html:239 -#: templates/wireless/inc/wirelesslink_interface.html:32 +#: netbox/templates/dcim/interface.html:239 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:32 msgid "Channel Frequency" msgstr "Frequenza del canale" -#: templates/dcim/interface.html:242 templates/dcim/interface.html:250 -#: templates/dcim/interface.html:261 templates/dcim/interface.html:269 +#: netbox/templates/dcim/interface.html:242 +#: netbox/templates/dcim/interface.html:250 +#: netbox/templates/dcim/interface.html:261 +#: netbox/templates/dcim/interface.html:269 msgid "MHz" msgstr "MHz" -#: templates/dcim/interface.html:258 -#: templates/wireless/inc/wirelesslink_interface.html:42 +#: netbox/templates/dcim/interface.html:258 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:42 msgid "Channel Width" msgstr "Larghezza del canale" -#: templates/dcim/interface.html:285 templates/wireless/wirelesslan.html:14 -#: templates/wireless/wirelesslink.html:21 wireless/forms/bulk_edit.py:60 -#: wireless/forms/bulk_edit.py:102 wireless/forms/filtersets.py:40 -#: wireless/forms/filtersets.py:80 wireless/models.py:82 -#: wireless/models.py:156 wireless/tables/wirelesslan.py:44 +#: netbox/templates/dcim/interface.html:285 +#: netbox/templates/wireless/wirelesslan.html:14 +#: netbox/templates/wireless/wirelesslink.html:21 +#: netbox/wireless/forms/bulk_edit.py:60 +#: netbox/wireless/forms/bulk_edit.py:102 +#: netbox/wireless/forms/filtersets.py:40 +#: netbox/wireless/forms/filtersets.py:80 netbox/wireless/models.py:82 +#: netbox/wireless/models.py:156 netbox/wireless/tables/wirelesslan.py:44 msgid "SSID" msgstr "SSID" -#: templates/dcim/interface.html:305 +#: netbox/templates/dcim/interface.html:305 msgid "LAG Members" msgstr "Membri del GAL" -#: templates/dcim/interface.html:323 +#: netbox/templates/dcim/interface.html:323 msgid "No member interfaces" msgstr "Nessuna interfaccia membro" -#: templates/dcim/interface.html:343 templates/ipam/fhrpgroup.html:73 -#: templates/ipam/iprange/ip_addresses.html:7 -#: templates/ipam/prefix/ip_addresses.html:7 -#: templates/virtualization/vminterface.html:89 +#: netbox/templates/dcim/interface.html:343 +#: netbox/templates/ipam/fhrpgroup.html:73 +#: netbox/templates/ipam/iprange/ip_addresses.html:7 +#: netbox/templates/ipam/prefix/ip_addresses.html:7 +#: netbox/templates/virtualization/vminterface.html:89 msgid "Add IP Address" msgstr "Aggiungi indirizzo IP" -#: templates/dcim/inventoryitem.html:24 +#: netbox/templates/dcim/inventoryitem.html:24 msgid "Parent Item" msgstr "Elemento principale" -#: templates/dcim/inventoryitem.html:48 +#: netbox/templates/dcim/inventoryitem.html:48 msgid "Part ID" msgstr "ID della parte" -#: templates/dcim/location.html:17 +#: netbox/templates/dcim/location.html:17 msgid "Add Child Location" msgstr "Aggiungi la posizione del bambino" -#: templates/dcim/location.html:77 +#: netbox/templates/dcim/location.html:77 msgid "Child Locations" msgstr "Sedi per bambini" -#: templates/dcim/location.html:81 templates/dcim/site.html:131 +#: netbox/templates/dcim/location.html:81 netbox/templates/dcim/site.html:131 msgid "Add a Location" msgstr "Aggiungi una posizione" -#: templates/dcim/location.html:94 templates/dcim/site.html:144 +#: netbox/templates/dcim/location.html:94 netbox/templates/dcim/site.html:144 msgid "Add a Device" msgstr "Aggiungi un dispositivo" -#: templates/dcim/manufacturer.html:16 +#: netbox/templates/dcim/manufacturer.html:16 msgid "Add Device Type" msgstr "Aggiungi tipo di dispositivo" -#: templates/dcim/manufacturer.html:21 +#: netbox/templates/dcim/manufacturer.html:21 msgid "Add Module Type" msgstr "Aggiungi tipo di modulo" -#: templates/dcim/powerfeed.html:53 +#: netbox/templates/dcim/powerfeed.html:53 msgid "Connected Device" msgstr "Dispositivo connesso" -#: templates/dcim/powerfeed.html:63 +#: netbox/templates/dcim/powerfeed.html:63 msgid "Utilization (Allocated" msgstr "Utilizzo (allocato)" -#: templates/dcim/powerfeed.html:80 +#: netbox/templates/dcim/powerfeed.html:80 msgid "Electrical Characteristics" msgstr "Caratteristiche elettriche" -#: templates/dcim/powerfeed.html:88 +#: netbox/templates/dcim/powerfeed.html:88 msgctxt "Abbreviation for volts" msgid "V" msgstr "V" -#: templates/dcim/powerfeed.html:92 +#: netbox/templates/dcim/powerfeed.html:92 msgctxt "Abbreviation for amperes" msgid "A" msgstr "UN" -#: templates/dcim/poweroutlet.html:48 +#: netbox/templates/dcim/poweroutlet.html:48 msgid "Feed Leg" msgstr "Feed Leg" -#: templates/dcim/powerpanel.html:72 +#: netbox/templates/dcim/powerpanel.html:72 msgid "Add Power Feeds" msgstr "Aggiungi alimentatori" -#: templates/dcim/powerport.html:44 +#: netbox/templates/dcim/powerport.html:44 msgid "Maximum Draw" msgstr "Estrazione massima" -#: templates/dcim/powerport.html:48 +#: netbox/templates/dcim/powerport.html:48 msgid "Allocated Draw" msgstr "Pareggio assegnato" -#: templates/dcim/rack.html:69 +#: netbox/templates/dcim/rack.html:69 msgid "Space Utilization" msgstr "Utilizzo dello spazio" -#: templates/dcim/rack.html:84 templates/dcim/racktype.html:44 +#: netbox/templates/dcim/rack.html:84 netbox/templates/dcim/racktype.html:44 msgid "Rack Weight" msgstr "Peso dello scaffale" -#: templates/dcim/rack.html:94 templates/dcim/racktype.html:54 +#: netbox/templates/dcim/rack.html:94 netbox/templates/dcim/racktype.html:54 msgid "Maximum Weight" msgstr "Peso massimo" -#: templates/dcim/rack.html:104 +#: netbox/templates/dcim/rack.html:104 msgid "Total Weight" msgstr "Peso totale" -#: templates/dcim/rack.html:125 templates/dcim/rack_elevation_list.html:15 +#: netbox/templates/dcim/rack.html:125 +#: netbox/templates/dcim/rack_elevation_list.html:15 msgid "Images and Labels" msgstr "Immagini ed etichette" -#: templates/dcim/rack.html:126 templates/dcim/rack_elevation_list.html:16 +#: netbox/templates/dcim/rack.html:126 +#: netbox/templates/dcim/rack_elevation_list.html:16 msgid "Images only" msgstr "Solo immagini" -#: templates/dcim/rack.html:127 templates/dcim/rack_elevation_list.html:17 +#: netbox/templates/dcim/rack.html:127 +#: netbox/templates/dcim/rack_elevation_list.html:17 msgid "Labels only" msgstr "Solo etichette" -#: templates/dcim/rack/reservations.html:8 +#: netbox/templates/dcim/rack/reservations.html:8 msgid "Add reservation" msgstr "Aggiungi prenotazione" -#: templates/dcim/rack_elevation_list.html:12 +#: netbox/templates/dcim/rack_elevation_list.html:12 msgid "View List" msgstr "Visualizza elenco" -#: templates/dcim/rack_elevation_list.html:14 +#: netbox/templates/dcim/rack_elevation_list.html:14 msgid "Select rack view" msgstr "Seleziona la vista del rack" -#: templates/dcim/rack_elevation_list.html:25 +#: netbox/templates/dcim/rack_elevation_list.html:25 msgid "Sort By" msgstr "Ordina per" -#: templates/dcim/rack_elevation_list.html:74 +#: netbox/templates/dcim/rack_elevation_list.html:74 msgid "No Racks Found" msgstr "Nessun rack trovato" -#: templates/dcim/rack_list.html:8 +#: netbox/templates/dcim/rack_list.html:8 msgid "View Elevations" msgstr "Visualizza elevazioni" -#: templates/dcim/rackreservation.html:42 +#: netbox/templates/dcim/rackreservation.html:42 msgid "Reservation Details" msgstr "Dettagli della prenotazione" -#: templates/dcim/rackrole.html:10 +#: netbox/templates/dcim/rackrole.html:10 msgid "Add Rack" msgstr "Aggiungi rack" -#: templates/dcim/rearport.html:50 +#: netbox/templates/dcim/rearport.html:50 msgid "Positions" msgstr "Posizioni" -#: templates/dcim/region.html:17 templates/dcim/sitegroup.html:17 +#: netbox/templates/dcim/region.html:17 +#: netbox/templates/dcim/sitegroup.html:17 msgid "Add Site" msgstr "Aggiungi sito" -#: templates/dcim/region.html:55 +#: netbox/templates/dcim/region.html:55 msgid "Child Regions" msgstr "Regioni per bambini" -#: templates/dcim/region.html:59 +#: netbox/templates/dcim/region.html:59 msgid "Add Region" msgstr "Aggiungi regione" -#: templates/dcim/site.html:64 +#: netbox/templates/dcim/site.html:64 msgid "Time Zone" msgstr "Fuso orario" -#: templates/dcim/site.html:67 +#: netbox/templates/dcim/site.html:67 msgid "UTC" msgstr "UTC" -#: templates/dcim/site.html:68 +#: netbox/templates/dcim/site.html:68 msgid "Site time" msgstr "Ora del sito" -#: templates/dcim/site.html:75 +#: netbox/templates/dcim/site.html:75 msgid "Physical Address" msgstr "Indirizzo fisico" -#: templates/dcim/site.html:90 +#: netbox/templates/dcim/site.html:90 msgid "Shipping Address" msgstr "Indirizzo di spedizione" -#: templates/dcim/sitegroup.html:55 templates/tenancy/contactgroup.html:46 -#: templates/tenancy/tenantgroup.html:55 -#: templates/wireless/wirelesslangroup.html:55 +#: netbox/templates/dcim/sitegroup.html:55 +#: netbox/templates/tenancy/contactgroup.html:46 +#: netbox/templates/tenancy/tenantgroup.html:55 +#: netbox/templates/wireless/wirelesslangroup.html:55 msgid "Child Groups" msgstr "Gruppi di bambini" -#: templates/dcim/sitegroup.html:59 +#: netbox/templates/dcim/sitegroup.html:59 msgid "Add Site Group" msgstr "Aggiungi gruppo di siti" -#: templates/dcim/trace/attachment.html:5 -#: templates/extras/exporttemplate.html:31 +#: netbox/templates/dcim/trace/attachment.html:5 +#: netbox/templates/extras/exporttemplate.html:31 msgid "Attachment" msgstr "Allegato" -#: templates/dcim/virtualchassis.html:57 +#: netbox/templates/dcim/virtualchassis.html:57 msgid "Add Member" msgstr "Aggiungi membro" -#: templates/dcim/virtualchassis_add.html:18 +#: netbox/templates/dcim/virtualchassis_add.html:18 msgid "Member Devices" msgstr "Dispositivi per i membri" -#: templates/dcim/virtualchassis_add_member.html:10 +#: netbox/templates/dcim/virtualchassis_add_member.html:10 #, python-format msgid "Add New Member to Virtual Chassis %(virtual_chassis)s" msgstr "Aggiungi nuovo membro allo chassis virtuale %(virtual_chassis)s" -#: templates/dcim/virtualchassis_add_member.html:19 +#: netbox/templates/dcim/virtualchassis_add_member.html:19 msgid "Add New Member" msgstr "Aggiungi nuovo membro" -#: templates/dcim/virtualchassis_add_member.html:27 -#: templates/generic/object_edit.html:78 -#: templates/users/objectpermission.html:31 users/forms/filtersets.py:67 -#: users/forms/model_forms.py:312 +#: netbox/templates/dcim/virtualchassis_add_member.html:27 +#: netbox/templates/generic/object_edit.html:78 +#: netbox/templates/users/objectpermission.html:31 +#: netbox/users/forms/filtersets.py:67 netbox/users/forms/model_forms.py:312 msgid "Actions" msgstr "Azioni" -#: templates/dcim/virtualchassis_add_member.html:29 +#: netbox/templates/dcim/virtualchassis_add_member.html:29 msgid "Save & Add Another" msgstr "Salva e aggiungine un altro" -#: templates/dcim/virtualchassis_edit.html:7 +#: netbox/templates/dcim/virtualchassis_edit.html:7 #, python-format msgid "Editing Virtual Chassis %(name)s" msgstr "Modifica dello chassis virtuale %(name)s" -#: templates/dcim/virtualchassis_edit.html:53 +#: netbox/templates/dcim/virtualchassis_edit.html:53 msgid "Rack/Unit" msgstr "Rack/unità" -#: templates/dcim/virtualchassis_remove_member.html:5 +#: netbox/templates/dcim/virtualchassis_remove_member.html:5 msgid "Remove Virtual Chassis Member" msgstr "Rimuovi membro dello chassis virtuale" -#: templates/dcim/virtualchassis_remove_member.html:9 +#: netbox/templates/dcim/virtualchassis_remove_member.html:9 #, python-format msgid "" "Are you sure you want to remove %(device)s from virtual " @@ -12496,11 +13276,12 @@ msgstr "" "Sei sicuro di voler rimuovere %(device)s da chassis " "virtuale %(name)s?" -#: templates/dcim/virtualdevicecontext.html:26 templates/vpn/l2vpn.html:18 +#: netbox/templates/dcim/virtualdevicecontext.html:26 +#: netbox/templates/vpn/l2vpn.html:18 msgid "Identifier" msgstr "Identificatore" -#: templates/exceptions/import_error.html:6 +#: netbox/templates/exceptions/import_error.html:6 msgid "" "A module import error occurred during this request. Common causes include " "the following:" @@ -12508,11 +13289,11 @@ msgstr "" "Durante questa richiesta si è verificato un errore di importazione del " "modulo. Le cause più comuni sono le seguenti:" -#: templates/exceptions/import_error.html:10 +#: netbox/templates/exceptions/import_error.html:10 msgid "Missing required packages" msgstr "Pacchetti obbligatori mancanti" -#: templates/exceptions/import_error.html:11 +#: netbox/templates/exceptions/import_error.html:11 msgid "" "This installation of NetBox might be missing one or more required Python " "packages. These packages are listed in requirements.txt and " @@ -12529,11 +13310,11 @@ msgstr "" "congelamento dei tubi dalla console e confronta l'output con " "l'elenco dei pacchetti richiesti." -#: templates/exceptions/import_error.html:20 +#: netbox/templates/exceptions/import_error.html:20 msgid "WSGI service not restarted after upgrade" msgstr "Il servizio WSGI non è stato riavviato dopo l'aggiornamento" -#: templates/exceptions/import_error.html:21 +#: netbox/templates/exceptions/import_error.html:21 msgid "" "If this installation has recently been upgraded, check that the WSGI service" " (e.g. gunicorn or uWSGI) has been restarted. This ensures that the new code" @@ -12543,7 +13324,7 @@ msgstr "" "servizio WSGI (ad esempio gunicorn o uWSGI) sia stato riavviato. Questo " "assicura che il nuovo codice sia in esecuzione." -#: templates/exceptions/permission_error.html:6 +#: netbox/templates/exceptions/permission_error.html:6 msgid "" "A file permission error was detected while processing this request. Common " "causes include the following:" @@ -12551,12 +13332,12 @@ msgstr "" "È stato rilevato un errore di autorizzazione del file durante l'elaborazione" " di questa richiesta. Le cause più comuni sono le seguenti:" -#: templates/exceptions/permission_error.html:10 +#: netbox/templates/exceptions/permission_error.html:10 msgid "Insufficient write permission to the media root" msgstr "" "Autorizzazione di scrittura insufficiente per il file multimediale root" -#: templates/exceptions/permission_error.html:11 +#: netbox/templates/exceptions/permission_error.html:11 #, python-format msgid "" "The configured media root is %(media_root)s. Ensure that the " @@ -12567,7 +13348,7 @@ msgstr "" " che l'utente che esegue NetBox abbia accesso per scrivere file in tutte le " "posizioni all'interno di questo percorso." -#: templates/exceptions/programming_error.html:6 +#: netbox/templates/exceptions/programming_error.html:6 msgid "" "A database programming error was detected while processing this request. " "Common causes include the following:" @@ -12575,11 +13356,11 @@ msgstr "" "È stato rilevato un errore di programmazione del database durante " "l'elaborazione di questa richiesta. Le cause più comuni sono le seguenti:" -#: templates/exceptions/programming_error.html:10 +#: netbox/templates/exceptions/programming_error.html:10 msgid "Database migrations missing" msgstr "Migrazioni del database mancanti" -#: templates/exceptions/programming_error.html:11 +#: netbox/templates/exceptions/programming_error.html:11 msgid "" "When upgrading to a new NetBox release, the upgrade script must be run to " "apply any new database migrations. You can run migrations manually by " @@ -12590,11 +13371,11 @@ msgstr "" " migrazioni del database. È possibile eseguire le migrazioni manualmente " "eseguendo python3 manage.py migrare dalla riga di comando." -#: templates/exceptions/programming_error.html:18 +#: netbox/templates/exceptions/programming_error.html:18 msgid "Unsupported PostgreSQL version" msgstr "Versione PostgreSQL non supportata" -#: templates/exceptions/programming_error.html:19 +#: netbox/templates/exceptions/programming_error.html:19 msgid "" "Ensure that PostgreSQL version 12 or later is in use. You can check this by " "connecting to the database using NetBox's credentials and issuing a query " @@ -12604,99 +13385,102 @@ msgstr "" "verificarlo connettendoti al database utilizzando le credenziali di NetBox " "ed eseguendo una richiesta per SELEZIONA LA VERSIONE ()." -#: templates/extras/configcontext.html:45 -#: templates/extras/configtemplate.html:37 -#: templates/extras/exporttemplate.html:51 +#: netbox/templates/extras/configcontext.html:45 +#: netbox/templates/extras/configtemplate.html:37 +#: netbox/templates/extras/exporttemplate.html:51 msgid "The data file associated with this object has been deleted" msgstr "Il file di dati associato a questo oggetto è stato eliminato" -#: templates/extras/configcontext.html:54 -#: templates/extras/configtemplate.html:46 -#: templates/extras/exporttemplate.html:60 +#: netbox/templates/extras/configcontext.html:54 +#: netbox/templates/extras/configtemplate.html:46 +#: netbox/templates/extras/exporttemplate.html:60 msgid "Data Synced" msgstr "Dati sincronizzati" -#: templates/extras/configcontext_list.html:7 -#: templates/extras/configtemplate_list.html:7 -#: templates/extras/exporttemplate_list.html:7 +#: netbox/templates/extras/configcontext_list.html:7 +#: netbox/templates/extras/configtemplate_list.html:7 +#: netbox/templates/extras/exporttemplate_list.html:7 msgid "Sync Data" msgstr "Sincronizzazione dati" -#: templates/extras/configtemplate.html:56 +#: netbox/templates/extras/configtemplate.html:56 msgid "Environment Parameters" msgstr "Parametri ambientali" -#: templates/extras/configtemplate.html:67 -#: templates/extras/exporttemplate.html:79 +#: netbox/templates/extras/configtemplate.html:67 +#: netbox/templates/extras/exporttemplate.html:79 msgid "Template" msgstr "Modello" -#: templates/extras/customfield.html:30 templates/extras/customlink.html:21 +#: netbox/templates/extras/customfield.html:30 +#: netbox/templates/extras/customlink.html:21 msgid "Group Name" msgstr "Nome del gruppo" -#: templates/extras/customfield.html:42 +#: netbox/templates/extras/customfield.html:42 msgid "Must be Unique" msgstr "Deve essere unico" -#: templates/extras/customfield.html:46 +#: netbox/templates/extras/customfield.html:46 msgid "Cloneable" msgstr "Clonabile" -#: templates/extras/customfield.html:56 +#: netbox/templates/extras/customfield.html:56 msgid "Default Value" msgstr "Valore predefinito" -#: templates/extras/customfield.html:73 +#: netbox/templates/extras/customfield.html:73 msgid "Search Weight" msgstr "Cerca peso" -#: templates/extras/customfield.html:83 +#: netbox/templates/extras/customfield.html:83 msgid "Filter Logic" msgstr "Logica del filtro" -#: templates/extras/customfield.html:87 +#: netbox/templates/extras/customfield.html:87 msgid "Display Weight" msgstr "Peso dello schermo" -#: templates/extras/customfield.html:91 +#: netbox/templates/extras/customfield.html:91 msgid "UI Visible" msgstr "Interfaccia utente visibile" -#: templates/extras/customfield.html:95 +#: netbox/templates/extras/customfield.html:95 msgid "UI Editable" msgstr "Interfaccia utente modificabile" -#: templates/extras/customfield.html:115 +#: netbox/templates/extras/customfield.html:115 msgid "Validation Rules" msgstr "Regole di convalida" -#: templates/extras/customfield.html:126 +#: netbox/templates/extras/customfield.html:126 msgid "Regular Expression" msgstr "Espressione regolare" -#: templates/extras/customlink.html:29 +#: netbox/templates/extras/customlink.html:29 msgid "Button Class" msgstr "Classe Button" -#: templates/extras/customlink.html:39 templates/extras/exporttemplate.html:66 -#: templates/extras/savedfilter.html:39 +#: netbox/templates/extras/customlink.html:39 +#: netbox/templates/extras/exporttemplate.html:66 +#: netbox/templates/extras/savedfilter.html:39 msgid "Assigned Models" msgstr "Modelli assegnati" -#: templates/extras/customlink.html:52 +#: netbox/templates/extras/customlink.html:52 msgid "Link Text" msgstr "Testo del link" -#: templates/extras/customlink.html:58 +#: netbox/templates/extras/customlink.html:58 msgid "Link URL" msgstr "URL del collegamento" -#: templates/extras/dashboard/reset.html:4 templates/home.html:66 +#: netbox/templates/extras/dashboard/reset.html:4 +#: netbox/templates/home.html:66 msgid "Reset Dashboard" msgstr "Reimposta dashboard" -#: templates/extras/dashboard/reset.html:8 +#: netbox/templates/extras/dashboard/reset.html:8 msgid "" "This will remove all configured widgets and restore the " "default dashboard configuration." @@ -12704,7 +13488,7 @@ msgstr "" "Questo rimuoverà tutti widget configurati e ripristina la " "configurazione predefinita del dashboard." -#: templates/extras/dashboard/reset.html:13 +#: netbox/templates/extras/dashboard/reset.html:13 msgid "" "This change affects only your dashboard, and will not impact other " "users." @@ -12712,155 +13496,162 @@ msgstr "" "Questa modifica riguarda solo tuo dashboard e non avrà alcun impatto " "sugli altri utenti." -#: templates/extras/dashboard/widget.html:21 +#: netbox/templates/extras/dashboard/widget.html:21 msgid "widget configuration" msgstr "configurazione del widget" -#: templates/extras/dashboard/widget.html:36 +#: netbox/templates/extras/dashboard/widget.html:36 msgid "Close widget" msgstr "Chiudi widget" -#: templates/extras/dashboard/widget_add.html:7 +#: netbox/templates/extras/dashboard/widget_add.html:7 msgid "Add a Widget" msgstr "Aggiungi un widget" -#: templates/extras/dashboard/widgets/bookmarks.html:14 +#: netbox/templates/extras/dashboard/widgets/bookmarks.html:14 msgid "No bookmarks have been added yet." msgstr "Nessun segnalibro è stato ancora aggiunto." -#: templates/extras/dashboard/widgets/objectcounts.html:10 +#: netbox/templates/extras/dashboard/widgets/objectcounts.html:10 msgid "No permission" msgstr "Nessuna autorizzazione" -#: templates/extras/dashboard/widgets/objectlist.html:6 +#: netbox/templates/extras/dashboard/widgets/objectlist.html:6 msgid "No permission to view this content" msgstr "Nessuna autorizzazione per visualizzare questo contenuto" -#: templates/extras/dashboard/widgets/objectlist.html:10 +#: netbox/templates/extras/dashboard/widgets/objectlist.html:10 msgid "Unable to load content. Invalid view name" msgstr "Impossibile caricare il contenuto. Nome di visualizzazione non valido" -#: templates/extras/dashboard/widgets/rssfeed.html:12 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:12 msgid "No content found" msgstr "Nessun contenuto trovato" -#: templates/extras/dashboard/widgets/rssfeed.html:18 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:18 msgid "There was a problem fetching the RSS feed" msgstr "Si è verificato un problema durante il recupero del feed RSS" -#: templates/extras/dashboard/widgets/rssfeed.html:21 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:21 msgid "HTTP" msgstr "HTTP" -#: templates/extras/eventrule.html:61 +#: netbox/templates/extras/eventrule.html:61 msgid "Conditions" msgstr "Condizioni" -#: templates/extras/exporttemplate.html:23 +#: netbox/templates/extras/exporttemplate.html:23 msgid "MIME Type" msgstr "Tipo MIME" -#: templates/extras/exporttemplate.html:27 +#: netbox/templates/extras/exporttemplate.html:27 msgid "File Extension" msgstr "Estensione del file" -#: templates/extras/htmx/script_result.html:10 +#: netbox/templates/extras/htmx/script_result.html:10 msgid "Scheduled for" msgstr "Previsto per" -#: templates/extras/htmx/script_result.html:15 +#: netbox/templates/extras/htmx/script_result.html:15 msgid "Duration" msgstr "Durata" -#: templates/extras/htmx/script_result.html:23 +#: netbox/templates/extras/htmx/script_result.html:23 msgid "Test Summary" msgstr "Riepilogo del test" -#: templates/extras/htmx/script_result.html:43 +#: netbox/templates/extras/htmx/script_result.html:43 msgid "Log" msgstr "Registro" -#: templates/extras/htmx/script_result.html:56 +#: netbox/templates/extras/htmx/script_result.html:56 msgid "Output" msgstr "Uscita" -#: templates/extras/inc/result_pending.html:4 +#: netbox/templates/extras/inc/result_pending.html:4 msgid "Loading" msgstr "Caricamento" -#: templates/extras/inc/result_pending.html:6 +#: netbox/templates/extras/inc/result_pending.html:6 msgid "Results pending" msgstr "Risultati in sospeso" -#: templates/extras/journalentry.html:15 +#: netbox/templates/extras/journalentry.html:15 msgid "Journal Entry" msgstr "Inserimento nel diario" -#: templates/extras/notificationgroup.html:11 +#: netbox/templates/extras/notificationgroup.html:11 msgid "Notification Group" msgstr "Gruppo di notifiche" -#: templates/extras/notificationgroup.html:36 -#: templates/extras/notificationgroup.html:46 -#: utilities/templates/widgets/clearable_file_input.html:12 +#: netbox/templates/extras/notificationgroup.html:36 +#: netbox/templates/extras/notificationgroup.html:46 +#: netbox/utilities/templates/widgets/clearable_file_input.html:12 msgid "None assigned" msgstr "Nessuno assegnato" -#: templates/extras/object_configcontext.html:19 +#: netbox/templates/extras/object_configcontext.html:19 msgid "The local config context overwrites all source contexts" msgstr "" "Il contesto di configurazione locale sovrascrive tutti i contesti di origine" -#: templates/extras/object_configcontext.html:25 +#: netbox/templates/extras/object_configcontext.html:25 msgid "Source Contexts" msgstr "Contesti di origine" -#: templates/extras/object_journal.html:17 +#: netbox/templates/extras/object_journal.html:17 msgid "New Journal Entry" msgstr "Nuova voce nel diario" -#: templates/extras/report/base.html:30 +#: netbox/templates/extras/report/base.html:30 msgid "Report" msgstr "Rapporto" -#: templates/extras/script.html:14 +#: netbox/templates/extras/script.html:14 msgid "You do not have permission to run scripts" msgstr "Non si dispone dell'autorizzazione per eseguire gli script" -#: templates/extras/script.html:41 templates/extras/script.html:45 -#: templates/extras/script_list.html:86 +#: netbox/templates/extras/script.html:41 +#: netbox/templates/extras/script.html:45 +#: netbox/templates/extras/script_list.html:87 msgid "Run Script" msgstr "Esegui script" -#: templates/extras/script.html:51 templates/extras/script/source.html:10 +#: netbox/templates/extras/script.html:51 +#: netbox/templates/extras/script/source.html:10 msgid "Error loading script" msgstr "Errore durante il caricamento dello script" -#: templates/extras/script/jobs.html:16 +#: netbox/templates/extras/script/jobs.html:16 msgid "Script no longer exists in the source file." msgstr "Lo script non esiste più nel file sorgente." -#: templates/extras/script_list.html:46 +#: netbox/templates/extras/script_list.html:47 msgid "Last Run" msgstr "Ultima corsa" -#: templates/extras/script_list.html:61 +#: netbox/templates/extras/script_list.html:62 msgid "Script is no longer present in the source file" msgstr "Lo script non è più presente nel file sorgente" -#: templates/extras/script_list.html:74 +#: netbox/templates/extras/script_list.html:75 msgid "Never" msgstr "Mai" -#: templates/extras/script_list.html:84 +#: netbox/templates/extras/script_list.html:85 msgid "Run Again" msgstr "Corri ancora" -#: templates/extras/script_list.html:138 +#: netbox/templates/extras/script_list.html:133 +#, python-format +msgid "Could not load scripts from module %(module)s" +msgstr "" + +#: netbox/templates/extras/script_list.html:141 msgid "No Scripts Found" msgstr "Nessuno script trovato" -#: templates/extras/script_list.html:141 +#: netbox/templates/extras/script_list.html:144 #, python-format msgid "" "Get started by creating a script from " @@ -12869,81 +13660,83 @@ msgstr "" "Inizia da creazione di uno script da " "un file o da una fonte di dati caricati." -#: templates/extras/script_result.html:35 -#: templates/generic/object_list.html:50 templates/search.html:13 +#: netbox/templates/extras/script_result.html:35 +#: netbox/templates/generic/object_list.html:50 +#: netbox/templates/search.html:13 msgid "Results" msgstr "Risultati" -#: templates/extras/script_result.html:46 +#: netbox/templates/extras/script_result.html:46 msgid "Log threshold" msgstr "Soglia di log" -#: templates/extras/script_result.html:56 +#: netbox/templates/extras/script_result.html:56 msgid "All" msgstr "Tutti" -#: templates/extras/tag.html:32 +#: netbox/templates/extras/tag.html:32 msgid "Tagged Items" msgstr "Oggetti con tag" -#: templates/extras/tag.html:43 +#: netbox/templates/extras/tag.html:43 msgid "Allowed Object Types" msgstr "Tipi di oggetti consentiti" -#: templates/extras/tag.html:51 +#: netbox/templates/extras/tag.html:51 msgid "Any" msgstr "Qualsiasi" -#: templates/extras/tag.html:57 +#: netbox/templates/extras/tag.html:57 msgid "Tagged Item Types" msgstr "Tipi di articoli con tag" -#: templates/extras/tag.html:81 +#: netbox/templates/extras/tag.html:81 msgid "Tagged Objects" msgstr "Oggetti taggati" -#: templates/extras/webhook.html:26 +#: netbox/templates/extras/webhook.html:26 msgid "HTTP Method" msgstr "Metodo HTTP" -#: templates/extras/webhook.html:34 +#: netbox/templates/extras/webhook.html:34 msgid "HTTP Content Type" msgstr "Tipo di contenuto HTTP" -#: templates/extras/webhook.html:47 +#: netbox/templates/extras/webhook.html:47 msgid "SSL Verification" msgstr "Verifica SSL" -#: templates/extras/webhook.html:60 +#: netbox/templates/extras/webhook.html:60 msgid "Additional Headers" msgstr "Intestazioni aggiuntive" -#: templates/extras/webhook.html:70 +#: netbox/templates/extras/webhook.html:70 msgid "Body Template" msgstr "Modello di corpo" -#: templates/generic/bulk_add_component.html:29 +#: netbox/templates/generic/bulk_add_component.html:29 msgid "Bulk Creation" msgstr "Creazione in blocco" -#: templates/generic/bulk_add_component.html:34 -#: templates/generic/bulk_delete.html:32 templates/generic/bulk_edit.html:33 +#: netbox/templates/generic/bulk_add_component.html:34 +#: netbox/templates/generic/bulk_delete.html:32 +#: netbox/templates/generic/bulk_edit.html:33 msgid "Selected Objects" msgstr "Oggetti selezionati" -#: templates/generic/bulk_add_component.html:58 +#: netbox/templates/generic/bulk_add_component.html:58 msgid "to Add" msgstr "da aggiungere" -#: templates/generic/bulk_delete.html:27 +#: netbox/templates/generic/bulk_delete.html:27 msgid "Bulk Delete" msgstr "Eliminazione in blocco" -#: templates/generic/bulk_delete.html:49 +#: netbox/templates/generic/bulk_delete.html:49 msgid "Confirm Bulk Deletion" msgstr "Conferma l'eliminazione in blocco" -#: templates/generic/bulk_delete.html:50 +#: netbox/templates/generic/bulk_delete.html:50 #, python-format msgid "" "The following operation will delete %(count)s " @@ -12953,66 +13746,69 @@ msgstr "" "La seguente operazione eliminerà %(count)s %(type_plural)s." " Esamina attentamente gli oggetti selezionati e conferma questa azione." -#: templates/generic/bulk_edit.html:21 templates/generic/object_edit.html:22 +#: netbox/templates/generic/bulk_edit.html:21 +#: netbox/templates/generic/object_edit.html:22 msgid "Editing" msgstr "Redazione" -#: templates/generic/bulk_edit.html:28 +#: netbox/templates/generic/bulk_edit.html:28 msgid "Bulk Edit" msgstr "Modifica in blocco" -#: templates/generic/bulk_edit.html:107 templates/generic/bulk_rename.html:66 +#: netbox/templates/generic/bulk_edit.html:107 +#: netbox/templates/generic/bulk_rename.html:66 msgid "Apply" msgstr "Applica" -#: templates/generic/bulk_import.html:19 +#: netbox/templates/generic/bulk_import.html:19 msgid "Bulk Import" msgstr "Importazione in blocco" -#: templates/generic/bulk_import.html:25 +#: netbox/templates/generic/bulk_import.html:25 msgid "Direct Import" msgstr "Importazione diretta" -#: templates/generic/bulk_import.html:30 +#: netbox/templates/generic/bulk_import.html:30 msgid "Upload File" msgstr "Carica file" -#: templates/generic/bulk_import.html:58 templates/generic/bulk_import.html:80 -#: templates/generic/bulk_import.html:102 +#: netbox/templates/generic/bulk_import.html:58 +#: netbox/templates/generic/bulk_import.html:80 +#: netbox/templates/generic/bulk_import.html:102 msgid "Submit" msgstr "Invia" -#: templates/generic/bulk_import.html:113 +#: netbox/templates/generic/bulk_import.html:113 msgid "Field Options" msgstr "Opzioni di campo" -#: templates/generic/bulk_import.html:119 +#: netbox/templates/generic/bulk_import.html:119 msgid "Accessor" msgstr "Accessor" -#: templates/generic/bulk_import.html:148 +#: netbox/templates/generic/bulk_import.html:148 msgid "choices" msgstr "scelte" -#: templates/generic/bulk_import.html:161 +#: netbox/templates/generic/bulk_import.html:161 msgid "Import Value" msgstr "Valore di importazione" -#: templates/generic/bulk_import.html:181 +#: netbox/templates/generic/bulk_import.html:181 msgid "Format: YYYY-MM-DD" msgstr "Formato: AAAA-MM-GG" -#: templates/generic/bulk_import.html:183 +#: netbox/templates/generic/bulk_import.html:183 msgid "Specify true or false" msgstr "Specifica vero o falso" -#: templates/generic/bulk_import.html:195 +#: netbox/templates/generic/bulk_import.html:195 msgid "Required fields must be specified for all objects." msgstr "" "Campi obbligatori dovere essere specificato per tutti gli " "oggetti." -#: templates/generic/bulk_import.html:201 +#: netbox/templates/generic/bulk_import.html:201 #, python-format msgid "" "Related objects may be referenced by any unique attribute. For example, " @@ -13022,15 +13818,15 @@ msgstr "" "univoco. Ad esempio %(example)s identificherebbe un VRF tramite" " il suo identificatore di percorso." -#: templates/generic/bulk_remove.html:28 +#: netbox/templates/generic/bulk_remove.html:28 msgid "Bulk Remove" msgstr "Rimuovi in blocco" -#: templates/generic/bulk_remove.html:42 +#: netbox/templates/generic/bulk_remove.html:42 msgid "Confirm Bulk Removal" msgstr "Conferma la rimozione in blocco" -#: templates/generic/bulk_remove.html:43 +#: netbox/templates/generic/bulk_remove.html:43 #, python-format msgid "" "The following operation will remove %(count)s %(obj_type_plural)s from " @@ -13041,72 +13837,72 @@ msgstr "" "%(parent_obj)s. Si prega di rivedere attentamente il %(obj_type_plural)s da " "rimuovere e confermare qui sotto." -#: templates/generic/bulk_remove.html:64 +#: netbox/templates/generic/bulk_remove.html:64 #, python-format msgid "Remove these %(count)s %(obj_type_plural)s" msgstr "Rimuovi questi %(count)s %(obj_type_plural)s" -#: templates/generic/bulk_rename.html:20 +#: netbox/templates/generic/bulk_rename.html:20 msgid "Renaming" msgstr "Ridenominazione" -#: templates/generic/bulk_rename.html:27 +#: netbox/templates/generic/bulk_rename.html:27 msgid "Bulk Rename" msgstr "Rinomina in blocco" -#: templates/generic/bulk_rename.html:39 +#: netbox/templates/generic/bulk_rename.html:39 msgid "Current Name" msgstr "Nome attuale" -#: templates/generic/bulk_rename.html:40 +#: netbox/templates/generic/bulk_rename.html:40 msgid "New Name" msgstr "Nuovo nome" -#: templates/generic/bulk_rename.html:64 -#: utilities/templates/widgets/markdown_input.html:11 +#: netbox/templates/generic/bulk_rename.html:64 +#: netbox/utilities/templates/widgets/markdown_input.html:11 msgid "Preview" msgstr "Anteprima" -#: templates/generic/confirmation_form.html:16 +#: netbox/templates/generic/confirmation_form.html:16 msgid "Are you sure" msgstr "Sei sicuro?" -#: templates/generic/confirmation_form.html:20 +#: netbox/templates/generic/confirmation_form.html:20 msgid "Confirm" msgstr "Confermare" -#: templates/generic/object_children.html:47 -#: utilities/templates/buttons/bulk_edit.html:4 +#: netbox/templates/generic/object_children.html:47 +#: netbox/utilities/templates/buttons/bulk_edit.html:4 msgid "Edit Selected" msgstr "Modifica selezionato" -#: templates/generic/object_children.html:61 -#: utilities/templates/buttons/bulk_delete.html:4 +#: netbox/templates/generic/object_children.html:61 +#: netbox/utilities/templates/buttons/bulk_delete.html:4 msgid "Delete Selected" msgstr "Elimina selezionati" -#: templates/generic/object_edit.html:24 +#: netbox/templates/generic/object_edit.html:24 #, python-format msgid "Add a new %(object_type)s" msgstr "Aggiungi un nuovo %(object_type)s" -#: templates/generic/object_edit.html:35 +#: netbox/templates/generic/object_edit.html:35 msgid "View model documentation" msgstr "Visualizza la documentazione del modello" -#: templates/generic/object_edit.html:36 +#: netbox/templates/generic/object_edit.html:36 msgid "Help" msgstr "Aiuto" -#: templates/generic/object_edit.html:83 +#: netbox/templates/generic/object_edit.html:83 msgid "Create & Add Another" msgstr "Crea e aggiungi un altro" -#: templates/generic/object_list.html:57 +#: netbox/templates/generic/object_list.html:57 msgid "Filters" msgstr "Filtri" -#: templates/generic/object_list.html:88 +#: netbox/templates/generic/object_list.html:88 #, python-format msgid "" "Select all %(count)s " @@ -13115,40 +13911,40 @@ msgstr "" "Seleziona tutti %(count)s " "%(object_type_plural)s domanda corrispondente" -#: templates/home.html:15 +#: netbox/templates/home.html:15 msgid "New Release Available" msgstr "Nuova versione disponibile" -#: templates/home.html:16 +#: netbox/templates/home.html:16 msgid "is available" msgstr "è disponibile" -#: templates/home.html:18 +#: netbox/templates/home.html:18 msgctxt "Document title" msgid "Upgrade Instructions" msgstr "Istruzioni per l'aggiornamento" -#: templates/home.html:40 +#: netbox/templates/home.html:40 msgid "Unlock Dashboard" msgstr "Sblocca dashboard" -#: templates/home.html:49 +#: netbox/templates/home.html:49 msgid "Lock Dashboard" msgstr "Blocca dashboard" -#: templates/home.html:60 +#: netbox/templates/home.html:60 msgid "Add Widget" msgstr "Aggiungi widget" -#: templates/home.html:63 +#: netbox/templates/home.html:63 msgid "Save Layout" msgstr "Salva layout" -#: templates/htmx/delete_form.html:7 +#: netbox/templates/htmx/delete_form.html:7 msgid "Confirm Deletion" msgstr "Conferma l'eliminazione" -#: templates/htmx/delete_form.html:11 +#: netbox/templates/htmx/delete_form.html:11 #, python-format msgid "" "Are you sure you want to delete " @@ -13157,41 +13953,41 @@ msgstr "" "Sei sicuro di volerlo eliminare " "%(object_type)s %(object)s?" -#: templates/htmx/delete_form.html:17 +#: netbox/templates/htmx/delete_form.html:17 msgid "The following objects will be deleted as a result of this action." msgstr "" "I seguenti oggetti verranno eliminati come risultato di questa azione." -#: templates/htmx/notifications.html:15 +#: netbox/templates/htmx/notifications.html:15 msgid "ago" msgstr "fa" -#: templates/htmx/notifications.html:26 +#: netbox/templates/htmx/notifications.html:26 msgid "No unread notifications" msgstr "Nessuna notifica non letta" -#: templates/htmx/notifications.html:31 +#: netbox/templates/htmx/notifications.html:31 msgid "All notifications" msgstr "Tutte le notifiche" -#: templates/htmx/object_selector.html:5 +#: netbox/templates/htmx/object_selector.html:5 msgid "Select" msgstr "Seleziona" -#: templates/inc/filter_list.html:43 -#: utilities/templates/helpers/table_config_form.html:39 +#: netbox/templates/inc/filter_list.html:43 +#: netbox/utilities/templates/helpers/table_config_form.html:39 msgid "Reset" msgstr "Reimposta" -#: templates/inc/light_toggle.html:4 +#: netbox/templates/inc/light_toggle.html:4 msgid "Enable dark mode" msgstr "Abilita la modalità oscura" -#: templates/inc/light_toggle.html:7 +#: netbox/templates/inc/light_toggle.html:7 msgid "Enable light mode" msgstr "Abilita la modalità luce" -#: templates/inc/missing_prerequisites.html:8 +#: netbox/templates/inc/missing_prerequisites.html:8 #, python-format msgid "" "Before you can add a %(model)s you must first create a " @@ -13200,281 +13996,283 @@ msgstr "" "Prima di poter aggiungere un %(model)s devi prima creare un " "%(prerequisite_model)s." -#: templates/inc/paginator.html:15 +#: netbox/templates/inc/paginator.html:15 msgid "Page selection" msgstr "Selezione della pagina" -#: templates/inc/paginator.html:75 +#: netbox/templates/inc/paginator.html:75 #, python-format msgid "Showing %(start)s-%(end)s of %(total)s" msgstr "Mostrando %(start)s-%(end)s di %(total)s" -#: templates/inc/paginator.html:82 +#: netbox/templates/inc/paginator.html:82 msgid "Pagination options" msgstr "Opzioni di impaginazione" -#: templates/inc/paginator.html:86 +#: netbox/templates/inc/paginator.html:86 msgid "Per Page" msgstr "Per pagina" -#: templates/inc/panels/image_attachments.html:10 +#: netbox/templates/inc/panels/image_attachments.html:10 msgid "Attach an image" msgstr "Allega un'immagine" -#: templates/inc/panels/related_objects.html:5 +#: netbox/templates/inc/panels/related_objects.html:5 msgid "Related Objects" msgstr "Oggetti correlati" -#: templates/inc/panels/tags.html:11 +#: netbox/templates/inc/panels/tags.html:11 msgid "No tags assigned" msgstr "Nessun tag assegnato" -#: templates/inc/sync_warning.html:10 +#: netbox/templates/inc/sync_warning.html:10 msgid "Data is out of sync with upstream file" msgstr "I dati non sono sincronizzati con il file upstream" -#: templates/inc/table_controls_htmx.html:7 +#: netbox/templates/inc/table_controls_htmx.html:7 msgid "Quick search" msgstr "Ricerca rapida" -#: templates/inc/table_controls_htmx.html:20 +#: netbox/templates/inc/table_controls_htmx.html:20 msgid "Saved filter" msgstr "Filtro salvato" -#: templates/inc/table_htmx.html:18 +#: netbox/templates/inc/table_htmx.html:18 msgid "Clear ordering" msgstr "Ordinazione chiara" -#: templates/inc/user_menu.html:6 +#: netbox/templates/inc/user_menu.html:6 msgid "Help center" msgstr "Centro assistenza" -#: templates/inc/user_menu.html:41 +#: netbox/templates/inc/user_menu.html:41 msgid "Django Admin" msgstr "Amministratore Django" -#: templates/inc/user_menu.html:61 +#: netbox/templates/inc/user_menu.html:61 msgid "Log Out" msgstr "Esci" -#: templates/inc/user_menu.html:68 templates/login.html:38 +#: netbox/templates/inc/user_menu.html:68 netbox/templates/login.html:38 msgid "Log In" msgstr "Effettua il login" -#: templates/ipam/aggregate.html:14 templates/ipam/ipaddress.html:14 -#: templates/ipam/iprange.html:13 templates/ipam/prefix.html:15 +#: netbox/templates/ipam/aggregate.html:14 +#: netbox/templates/ipam/ipaddress.html:14 +#: netbox/templates/ipam/iprange.html:13 netbox/templates/ipam/prefix.html:15 msgid "Family" msgstr "Famiglia" -#: templates/ipam/aggregate.html:39 +#: netbox/templates/ipam/aggregate.html:39 msgid "Date Added" msgstr "Data aggiunta" -#: templates/ipam/aggregate/prefixes.html:8 -#: templates/ipam/prefix/prefixes.html:8 templates/ipam/role.html:10 +#: netbox/templates/ipam/aggregate/prefixes.html:8 +#: netbox/templates/ipam/prefix/prefixes.html:8 +#: netbox/templates/ipam/role.html:10 msgid "Add Prefix" msgstr "Aggiungi prefisso" -#: templates/ipam/asn.html:23 +#: netbox/templates/ipam/asn.html:23 msgid "AS Number" msgstr "Numero AS" -#: templates/ipam/fhrpgroup.html:52 +#: netbox/templates/ipam/fhrpgroup.html:52 msgid "Authentication Type" msgstr "Tipo di autenticazione" -#: templates/ipam/fhrpgroup.html:56 +#: netbox/templates/ipam/fhrpgroup.html:56 msgid "Authentication Key" msgstr "Chiave di autenticazione" -#: templates/ipam/fhrpgroup.html:69 +#: netbox/templates/ipam/fhrpgroup.html:69 msgid "Virtual IP Addresses" msgstr "Indirizzi IP virtuali" -#: templates/ipam/inc/ipaddress_edit_header.html:13 +#: netbox/templates/ipam/inc/ipaddress_edit_header.html:13 msgid "Assign IP" msgstr "Assegna IP" -#: templates/ipam/inc/ipaddress_edit_header.html:19 +#: netbox/templates/ipam/inc/ipaddress_edit_header.html:19 msgid "Bulk Create" msgstr "Creazione in blocco" -#: templates/ipam/inc/panels/fhrp_groups.html:10 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:10 msgid "Create Group" msgstr "Crea gruppo" -#: templates/ipam/inc/panels/fhrp_groups.html:25 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:25 msgid "Virtual IPs" msgstr "IP virtuali" -#: templates/ipam/inc/toggle_available.html:7 +#: netbox/templates/ipam/inc/toggle_available.html:7 msgid "Show Assigned" msgstr "Mostra assegnato" -#: templates/ipam/inc/toggle_available.html:10 +#: netbox/templates/ipam/inc/toggle_available.html:10 msgid "Show Available" msgstr "Mostra disponibile" -#: templates/ipam/inc/toggle_available.html:13 +#: netbox/templates/ipam/inc/toggle_available.html:13 msgid "Show All" msgstr "Mostra tutto" -#: templates/ipam/ipaddress.html:23 templates/ipam/iprange.html:45 -#: templates/ipam/prefix.html:24 +#: netbox/templates/ipam/ipaddress.html:23 +#: netbox/templates/ipam/iprange.html:45 netbox/templates/ipam/prefix.html:24 msgid "Global" msgstr "Globale" -#: templates/ipam/ipaddress.html:85 +#: netbox/templates/ipam/ipaddress.html:85 msgid "NAT (outside)" msgstr "NAT (esterno)" -#: templates/ipam/ipaddress_assign.html:8 +#: netbox/templates/ipam/ipaddress_assign.html:8 msgid "Assign an IP Address" msgstr "Assegna un indirizzo IP" -#: templates/ipam/ipaddress_assign.html:22 +#: netbox/templates/ipam/ipaddress_assign.html:22 msgid "Select IP Address" msgstr "Seleziona indirizzo IP" -#: templates/ipam/ipaddress_assign.html:35 +#: netbox/templates/ipam/ipaddress_assign.html:35 msgid "Search Results" msgstr "Risultati della ricerca" -#: templates/ipam/ipaddress_bulk_add.html:6 +#: netbox/templates/ipam/ipaddress_bulk_add.html:6 msgid "Bulk Add IP Addresses" msgstr "Aggiungi indirizzi IP in blocco" -#: templates/ipam/iprange.html:17 +#: netbox/templates/ipam/iprange.html:17 msgid "Starting Address" msgstr "Indirizzo di partenza" -#: templates/ipam/iprange.html:21 +#: netbox/templates/ipam/iprange.html:21 msgid "Ending Address" msgstr "Indirizzo finale" -#: templates/ipam/iprange.html:33 templates/ipam/prefix.html:110 +#: netbox/templates/ipam/iprange.html:33 netbox/templates/ipam/prefix.html:110 msgid "Marked fully utilized" msgstr "Contrassegnato come completamente utilizzato" -#: templates/ipam/prefix.html:99 +#: netbox/templates/ipam/prefix.html:99 msgid "Addressing Details" msgstr "Dettagli di indirizzamento" -#: templates/ipam/prefix.html:118 +#: netbox/templates/ipam/prefix.html:118 msgid "Child IPs" msgstr "IP per bambini" -#: templates/ipam/prefix.html:126 +#: netbox/templates/ipam/prefix.html:126 msgid "Available IPs" msgstr "IP disponibili" -#: templates/ipam/prefix.html:138 +#: netbox/templates/ipam/prefix.html:138 msgid "First available IP" msgstr "Primo IP disponibile" -#: templates/ipam/prefix.html:179 +#: netbox/templates/ipam/prefix.html:179 msgid "Prefix Details" msgstr "Dettagli del prefisso" -#: templates/ipam/prefix.html:185 +#: netbox/templates/ipam/prefix.html:185 msgid "Network Address" msgstr "Indirizzo di rete" -#: templates/ipam/prefix.html:189 +#: netbox/templates/ipam/prefix.html:189 msgid "Network Mask" msgstr "Maschera di rete" -#: templates/ipam/prefix.html:193 +#: netbox/templates/ipam/prefix.html:193 msgid "Wildcard Mask" msgstr "Maschera Wildcard" -#: templates/ipam/prefix.html:197 +#: netbox/templates/ipam/prefix.html:197 msgid "Broadcast Address" msgstr "Indirizzo di trasmissione" -#: templates/ipam/prefix/ip_ranges.html:7 +#: netbox/templates/ipam/prefix/ip_ranges.html:7 msgid "Add IP Range" msgstr "Aggiungi intervallo IP" -#: templates/ipam/prefix_list.html:7 +#: netbox/templates/ipam/prefix_list.html:7 msgid "Hide Depth Indicators" msgstr "Nascondi indicatori di profondità" -#: templates/ipam/prefix_list.html:11 +#: netbox/templates/ipam/prefix_list.html:11 msgid "Max Depth" msgstr "Profondità massima" -#: templates/ipam/prefix_list.html:28 +#: netbox/templates/ipam/prefix_list.html:28 msgid "Max Length" msgstr "Lunghezza massima" -#: templates/ipam/rir.html:10 +#: netbox/templates/ipam/rir.html:10 msgid "Add Aggregate" msgstr "Aggiungi aggregato" -#: templates/ipam/routetarget.html:38 +#: netbox/templates/ipam/routetarget.html:38 msgid "Importing VRFs" msgstr "Importazione di VRF" -#: templates/ipam/routetarget.html:44 +#: netbox/templates/ipam/routetarget.html:44 msgid "Exporting VRFs" msgstr "Esportazione di VRF" -#: templates/ipam/routetarget.html:52 +#: netbox/templates/ipam/routetarget.html:52 msgid "Importing L2VPNs" msgstr "Importazione di VPN L2" -#: templates/ipam/routetarget.html:58 +#: netbox/templates/ipam/routetarget.html:58 msgid "Exporting L2VPNs" msgstr "Esportazione di VPN L2" -#: templates/ipam/vlan.html:88 +#: netbox/templates/ipam/vlan.html:88 msgid "Add a Prefix" msgstr "Aggiungere un prefisso" -#: templates/ipam/vlangroup.html:18 +#: netbox/templates/ipam/vlangroup.html:18 msgid "Add VLAN" msgstr "Aggiungi VLAN" -#: templates/ipam/vrf.html:16 +#: netbox/templates/ipam/vrf.html:16 msgid "Route Distinguisher" msgstr "Distinguitore del percorso" -#: templates/ipam/vrf.html:29 +#: netbox/templates/ipam/vrf.html:29 msgid "Unique IP Space" msgstr "Spazio IP unico" -#: templates/login.html:29 -#: utilities/templates/form_helpers/render_errors.html:7 +#: netbox/templates/login.html:29 +#: netbox/utilities/templates/form_helpers/render_errors.html:7 msgid "Errors" msgstr "Errori" -#: templates/login.html:69 +#: netbox/templates/login.html:69 msgid "Sign In" msgstr "Accedi" -#: templates/login.html:77 +#: netbox/templates/login.html:77 msgctxt "Denotes an alternative option" msgid "Or" msgstr "Oppure" -#: templates/media_failure.html:7 +#: netbox/templates/media_failure.html:7 msgid "Static Media Failure - NetBox" msgstr "Errore multimediale statico - NetBox" -#: templates/media_failure.html:21 +#: netbox/templates/media_failure.html:21 msgid "Static Media Failure" msgstr "Errore multimediale statico" -#: templates/media_failure.html:23 +#: netbox/templates/media_failure.html:23 msgid "The following static media file failed to load" msgstr "Il seguente file multimediale statico non è stato caricato" -#: templates/media_failure.html:26 +#: netbox/templates/media_failure.html:26 msgid "Check the following" msgstr "Controlla quanto segue" -#: templates/media_failure.html:29 +#: netbox/templates/media_failure.html:29 msgid "" "manage.py collectstatic was run during the most recent upgrade." " This installs the most recent iteration of each static file into the static" @@ -13484,7 +14282,7 @@ msgstr "" "l'aggiornamento più recente. Questo installa l'iterazione più recente di " "ogni file statico nel percorso radice statico." -#: templates/media_failure.html:35 +#: netbox/templates/media_failure.html:35 #, python-format msgid "" "The HTTP service (e.g. nginx or Apache) is configured to serve files from " @@ -13496,7 +14294,7 @@ msgstr "" "href=\"%(docs_url)s\">la documentazione di installazione per ulteriori " "indicazioni." -#: templates/media_failure.html:47 +#: netbox/templates/media_failure.html:47 #, python-format msgid "" "The file %(filename)s exists in the static root directory and " @@ -13505,550 +14303,573 @@ msgstr "" "Il fascicolo %(filename)s esiste nella directory principale " "statica ed è leggibile dal server HTTP." -#: templates/media_failure.html:55 +#: netbox/templates/media_failure.html:55 #, python-format msgid "Click here to attempt loading NetBox again." msgstr "" "Fare clic qui per provare a caricare nuovamente" " NetBox." -#: templates/tenancy/contact.html:18 tenancy/filtersets.py:147 -#: tenancy/forms/bulk_edit.py:137 tenancy/forms/filtersets.py:102 -#: tenancy/forms/forms.py:56 tenancy/forms/model_forms.py:106 -#: tenancy/forms/model_forms.py:130 tenancy/tables/contacts.py:98 +#: netbox/templates/tenancy/contact.html:18 netbox/tenancy/filtersets.py: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/model_forms.py:130 +#: netbox/tenancy/tables/contacts.py:98 msgid "Contact" msgstr "Contatto" -#: templates/tenancy/contact.html:29 tenancy/forms/bulk_edit.py:99 +#: netbox/templates/tenancy/contact.html:29 +#: netbox/tenancy/forms/bulk_edit.py:99 msgid "Title" msgstr "Titolo" -#: templates/tenancy/contact.html:33 tenancy/forms/bulk_edit.py:104 -#: tenancy/tables/contacts.py:64 +#: netbox/templates/tenancy/contact.html:33 +#: netbox/tenancy/forms/bulk_edit.py:104 netbox/tenancy/tables/contacts.py:64 msgid "Phone" msgstr "Telefono" -#: templates/tenancy/contactgroup.html:18 tenancy/forms/forms.py:66 -#: tenancy/forms/model_forms.py:75 +#: netbox/templates/tenancy/contactgroup.html:18 +#: netbox/tenancy/forms/forms.py:66 netbox/tenancy/forms/model_forms.py:75 msgid "Contact Group" msgstr "Gruppo di contatto" -#: templates/tenancy/contactgroup.html:50 +#: netbox/templates/tenancy/contactgroup.html:50 msgid "Add Contact Group" msgstr "Aggiungi gruppo di contatti" -#: templates/tenancy/contactrole.html:15 tenancy/filtersets.py:152 -#: tenancy/forms/forms.py:61 tenancy/forms/model_forms.py:87 +#: netbox/templates/tenancy/contactrole.html:15 +#: netbox/tenancy/filtersets.py:152 netbox/tenancy/forms/forms.py:61 +#: netbox/tenancy/forms/model_forms.py:87 msgid "Contact Role" msgstr "Ruolo di contatto" -#: templates/tenancy/object_contacts.html:9 +#: netbox/templates/tenancy/object_contacts.html:9 msgid "Add a contact" msgstr "Aggiungere un contatto" -#: templates/tenancy/tenantgroup.html:17 +#: netbox/templates/tenancy/tenantgroup.html:17 msgid "Add Tenant" msgstr "Aggiungi inquilino" -#: templates/tenancy/tenantgroup.html:26 tenancy/forms/model_forms.py:32 -#: tenancy/tables/columns.py:51 tenancy/tables/columns.py:61 +#: netbox/templates/tenancy/tenantgroup.html:26 +#: netbox/tenancy/forms/model_forms.py:32 netbox/tenancy/tables/columns.py:51 +#: netbox/tenancy/tables/columns.py:61 msgid "Tenant Group" msgstr "Gruppo di inquilini" -#: templates/tenancy/tenantgroup.html:59 +#: netbox/templates/tenancy/tenantgroup.html:59 msgid "Add Tenant Group" msgstr "Aggiungi gruppo di inquilini" -#: templates/users/group.html:39 templates/users/user.html:63 +#: netbox/templates/users/group.html:39 netbox/templates/users/user.html:63 msgid "Assigned Permissions" msgstr "Autorizzazioni assegnate" -#: templates/users/objectpermission.html:6 -#: templates/users/objectpermission.html:14 users/forms/filtersets.py:66 +#: netbox/templates/users/objectpermission.html:6 +#: netbox/templates/users/objectpermission.html:14 +#: netbox/users/forms/filtersets.py:66 msgid "Permission" msgstr "Autorizzazione" -#: templates/users/objectpermission.html:34 +#: netbox/templates/users/objectpermission.html:34 msgid "View" msgstr "Visualizza" -#: templates/users/objectpermission.html:52 users/forms/model_forms.py:315 +#: netbox/templates/users/objectpermission.html:52 +#: netbox/users/forms/model_forms.py:315 msgid "Constraints" msgstr "Vincoli" -#: templates/users/objectpermission.html:72 +#: netbox/templates/users/objectpermission.html:72 msgid "Assigned Users" msgstr "Utenti assegnati" -#: templates/virtualization/cluster.html:52 +#: netbox/templates/virtualization/cluster.html:52 msgid "Allocated Resources" msgstr "Risorse allocate" -#: templates/virtualization/cluster.html:55 -#: templates/virtualization/virtualmachine.html:125 +#: netbox/templates/virtualization/cluster.html:55 +#: netbox/templates/virtualization/virtualmachine.html:125 msgid "Virtual CPUs" msgstr "CPU virtuali" -#: templates/virtualization/cluster.html:59 -#: templates/virtualization/virtualmachine.html:129 +#: netbox/templates/virtualization/cluster.html:59 +#: netbox/templates/virtualization/virtualmachine.html:129 msgid "Memory" msgstr "Memoria" -#: templates/virtualization/cluster.html:69 -#: templates/virtualization/virtualmachine.html:140 +#: netbox/templates/virtualization/cluster.html:69 +#: netbox/templates/virtualization/virtualmachine.html:140 msgid "Disk Space" msgstr "Spazio su disco" -#: templates/virtualization/cluster/base.html:18 +#: netbox/templates/virtualization/cluster/base.html:18 msgid "Add Virtual Machine" msgstr "Aggiungi macchina virtuale" -#: templates/virtualization/cluster/base.html:24 +#: netbox/templates/virtualization/cluster/base.html:24 msgid "Assign Device" msgstr "Assegna dispositivo" -#: templates/virtualization/cluster/devices.html:10 +#: netbox/templates/virtualization/cluster/devices.html:10 msgid "Remove Selected" msgstr "Rimuovi selezionato" -#: templates/virtualization/cluster_add_devices.html:9 +#: netbox/templates/virtualization/cluster_add_devices.html:9 #, python-format msgid "Add Device to Cluster %(cluster)s" msgstr "Aggiungi dispositivo al cluster %(cluster)s" -#: templates/virtualization/cluster_add_devices.html:23 +#: netbox/templates/virtualization/cluster_add_devices.html:23 msgid "Device Selection" msgstr "Selezione del dispositivo" -#: templates/virtualization/cluster_add_devices.html:31 +#: netbox/templates/virtualization/cluster_add_devices.html:31 msgid "Add Devices" msgstr "Aggiungi dispositivi" -#: templates/virtualization/clustergroup.html:10 -#: templates/virtualization/clustertype.html:10 +#: netbox/templates/virtualization/clustergroup.html:10 +#: netbox/templates/virtualization/clustertype.html:10 msgid "Add Cluster" msgstr "Aggiungi cluster" -#: templates/virtualization/clustergroup.html:19 -#: virtualization/forms/model_forms.py:50 +#: netbox/templates/virtualization/clustergroup.html:19 +#: netbox/virtualization/forms/model_forms.py:50 msgid "Cluster Group" msgstr "Gruppo Cluster" -#: templates/virtualization/clustertype.html:19 -#: templates/virtualization/virtualmachine.html:110 -#: virtualization/forms/model_forms.py:36 +#: netbox/templates/virtualization/clustertype.html:19 +#: netbox/templates/virtualization/virtualmachine.html:110 +#: netbox/virtualization/forms/model_forms.py:36 msgid "Cluster Type" msgstr "Tipo di cluster" -#: templates/virtualization/virtualdisk.html:18 +#: netbox/templates/virtualization/virtualdisk.html:18 msgid "Virtual Disk" msgstr "Disco virtuale" -#: templates/virtualization/virtualmachine.html:122 -#: virtualization/forms/bulk_edit.py:190 -#: virtualization/forms/model_forms.py:224 +#: netbox/templates/virtualization/virtualmachine.html:122 +#: netbox/virtualization/forms/bulk_edit.py:190 +#: netbox/virtualization/forms/model_forms.py:224 msgid "Resources" msgstr "Risorse" -#: templates/virtualization/virtualmachine.html:178 +#: netbox/templates/virtualization/virtualmachine.html:178 msgid "Add Virtual Disk" msgstr "Aggiungi disco virtuale" -#: templates/vpn/ikepolicy.html:10 templates/vpn/ipsecprofile.html:33 -#: vpn/tables/crypto.py:166 +#: 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" msgstr "Politica IKE" -#: templates/vpn/ikepolicy.html:21 +#: netbox/templates/vpn/ikepolicy.html:21 msgid "IKE Version" msgstr "Versione IKE" -#: templates/vpn/ikepolicy.html:29 +#: netbox/templates/vpn/ikepolicy.html:29 msgid "Pre-Shared Key" msgstr "Chiave precondivisa" -#: templates/vpn/ikepolicy.html:33 -#: templates/wireless/inc/authentication_attrs.html:20 +#: netbox/templates/vpn/ikepolicy.html:33 +#: netbox/templates/wireless/inc/authentication_attrs.html:20 msgid "Show Secret" msgstr "Mostra segreto" -#: templates/vpn/ikepolicy.html:57 templates/vpn/ipsecpolicy.html:45 -#: templates/vpn/ipsecprofile.html:52 templates/vpn/ipsecprofile.html:77 -#: vpn/forms/model_forms.py:316 vpn/forms/model_forms.py:352 -#: vpn/tables/crypto.py:68 vpn/tables/crypto.py:134 +#: netbox/templates/vpn/ikepolicy.html:57 +#: netbox/templates/vpn/ipsecpolicy.html:45 +#: netbox/templates/vpn/ipsecprofile.html:52 +#: netbox/templates/vpn/ipsecprofile.html:77 +#: netbox/vpn/forms/model_forms.py:316 netbox/vpn/forms/model_forms.py:352 +#: netbox/vpn/tables/crypto.py:68 netbox/vpn/tables/crypto.py:134 msgid "Proposals" msgstr "Proposte" -#: templates/vpn/ikeproposal.html:10 +#: netbox/templates/vpn/ikeproposal.html:10 msgid "IKE Proposal" msgstr "Proposta IKE" -#: templates/vpn/ikeproposal.html:21 vpn/forms/bulk_edit.py:97 -#: vpn/forms/bulk_import.py:145 vpn/forms/filtersets.py:101 +#: netbox/templates/vpn/ikeproposal.html:21 netbox/vpn/forms/bulk_edit.py:97 +#: netbox/vpn/forms/bulk_import.py:145 netbox/vpn/forms/filtersets.py:101 msgid "Authentication method" msgstr "Metodo di autenticazione" -#: templates/vpn/ikeproposal.html:25 templates/vpn/ipsecproposal.html:21 -#: vpn/forms/bulk_edit.py:102 vpn/forms/bulk_edit.py:172 -#: vpn/forms/bulk_import.py:149 vpn/forms/bulk_import.py:195 -#: vpn/forms/filtersets.py:106 vpn/forms/filtersets.py:154 +#: netbox/templates/vpn/ikeproposal.html:25 +#: netbox/templates/vpn/ipsecproposal.html:21 +#: netbox/vpn/forms/bulk_edit.py:102 netbox/vpn/forms/bulk_edit.py:172 +#: netbox/vpn/forms/bulk_import.py:149 netbox/vpn/forms/bulk_import.py:195 +#: netbox/vpn/forms/filtersets.py:106 netbox/vpn/forms/filtersets.py:154 msgid "Encryption algorithm" msgstr "Algoritmo di crittografia" -#: templates/vpn/ikeproposal.html:29 templates/vpn/ipsecproposal.html:25 -#: vpn/forms/bulk_edit.py:107 vpn/forms/bulk_edit.py:177 -#: vpn/forms/bulk_import.py:153 vpn/forms/bulk_import.py:200 -#: vpn/forms/filtersets.py:111 vpn/forms/filtersets.py:159 +#: netbox/templates/vpn/ikeproposal.html:29 +#: netbox/templates/vpn/ipsecproposal.html:25 +#: netbox/vpn/forms/bulk_edit.py:107 netbox/vpn/forms/bulk_edit.py:177 +#: netbox/vpn/forms/bulk_import.py:153 netbox/vpn/forms/bulk_import.py:200 +#: netbox/vpn/forms/filtersets.py:111 netbox/vpn/forms/filtersets.py:159 msgid "Authentication algorithm" msgstr "Algoritmo di autenticazione" -#: templates/vpn/ikeproposal.html:33 +#: netbox/templates/vpn/ikeproposal.html:33 msgid "DH group" msgstr "Gruppo DH" -#: templates/vpn/ikeproposal.html:37 templates/vpn/ipsecproposal.html:29 -#: vpn/forms/bulk_edit.py:182 vpn/models/crypto.py:146 +#: netbox/templates/vpn/ikeproposal.html:37 +#: netbox/templates/vpn/ipsecproposal.html:29 +#: netbox/vpn/forms/bulk_edit.py:182 netbox/vpn/models/crypto.py:146 msgid "SA lifetime (seconds)" msgstr "Durata SA (secondi)" -#: templates/vpn/ipsecpolicy.html:10 templates/vpn/ipsecprofile.html:66 -#: vpn/tables/crypto.py:170 +#: netbox/templates/vpn/ipsecpolicy.html:10 +#: netbox/templates/vpn/ipsecprofile.html:66 netbox/vpn/tables/crypto.py:170 msgid "IPSec Policy" msgstr "Politica IPSec" -#: templates/vpn/ipsecpolicy.html:21 vpn/forms/bulk_edit.py:210 -#: vpn/models/crypto.py:193 +#: netbox/templates/vpn/ipsecpolicy.html:21 netbox/vpn/forms/bulk_edit.py:210 +#: netbox/vpn/models/crypto.py:193 msgid "PFS group" msgstr "Gruppo PFS" -#: templates/vpn/ipsecprofile.html:10 vpn/forms/model_forms.py:54 +#: netbox/templates/vpn/ipsecprofile.html:10 +#: netbox/vpn/forms/model_forms.py:54 msgid "IPSec Profile" msgstr "Profilo IPSec" -#: templates/vpn/ipsecprofile.html:89 vpn/tables/crypto.py:137 +#: netbox/templates/vpn/ipsecprofile.html:89 netbox/vpn/tables/crypto.py:137 msgid "PFS Group" msgstr "Gruppo PFS" -#: templates/vpn/ipsecproposal.html:10 +#: netbox/templates/vpn/ipsecproposal.html:10 msgid "IPSec Proposal" msgstr "Proposta IPSec" -#: templates/vpn/ipsecproposal.html:33 vpn/forms/bulk_edit.py:186 -#: vpn/models/crypto.py:152 +#: netbox/templates/vpn/ipsecproposal.html:33 +#: netbox/vpn/forms/bulk_edit.py:186 netbox/vpn/models/crypto.py:152 msgid "SA lifetime (KB)" msgstr "Durata SA (KB)" -#: templates/vpn/l2vpn.html:11 templates/vpn/l2vpntermination.html:9 +#: netbox/templates/vpn/l2vpn.html:11 +#: netbox/templates/vpn/l2vpntermination.html:9 msgid "L2VPN Attributes" msgstr "Attributi L2VPN" -#: templates/vpn/l2vpn.html:60 templates/vpn/tunnel.html:76 +#: netbox/templates/vpn/l2vpn.html:60 netbox/templates/vpn/tunnel.html:76 msgid "Add a Termination" msgstr "Aggiungi una terminazione" -#: templates/vpn/tunnel.html:9 +#: netbox/templates/vpn/tunnel.html:9 msgid "Add Termination" msgstr "Aggiungi terminazione" -#: templates/vpn/tunnel.html:37 vpn/forms/bulk_edit.py:49 -#: vpn/forms/bulk_import.py:48 vpn/forms/filtersets.py:57 +#: netbox/templates/vpn/tunnel.html:37 netbox/vpn/forms/bulk_edit.py:49 +#: netbox/vpn/forms/bulk_import.py:48 netbox/vpn/forms/filtersets.py:57 msgid "Encapsulation" msgstr "Incapsulamento" -#: templates/vpn/tunnel.html:41 vpn/forms/bulk_edit.py:55 -#: vpn/forms/bulk_import.py:53 vpn/forms/filtersets.py:64 -#: vpn/models/crypto.py:250 vpn/tables/tunnels.py:51 +#: netbox/templates/vpn/tunnel.html:41 netbox/vpn/forms/bulk_edit.py:55 +#: netbox/vpn/forms/bulk_import.py:53 netbox/vpn/forms/filtersets.py:64 +#: netbox/vpn/models/crypto.py:250 netbox/vpn/tables/tunnels.py:51 msgid "IPSec profile" msgstr "Profilo IPSec" -#: templates/vpn/tunnel.html:45 vpn/forms/bulk_edit.py:69 -#: vpn/forms/filtersets.py:68 +#: netbox/templates/vpn/tunnel.html:45 netbox/vpn/forms/bulk_edit.py:69 +#: netbox/vpn/forms/filtersets.py:68 msgid "Tunnel ID" msgstr "ID del tunnel" -#: templates/vpn/tunnelgroup.html:14 +#: netbox/templates/vpn/tunnelgroup.html:14 msgid "Add Tunnel" msgstr "Aggiungi tunnel" -#: templates/vpn/tunnelgroup.html:23 vpn/forms/model_forms.py:36 -#: vpn/forms/model_forms.py:49 +#: netbox/templates/vpn/tunnelgroup.html:23 netbox/vpn/forms/model_forms.py:36 +#: netbox/vpn/forms/model_forms.py:49 msgid "Tunnel Group" msgstr "Gruppo Tunnel" -#: templates/vpn/tunneltermination.html:10 +#: netbox/templates/vpn/tunneltermination.html:10 msgid "Tunnel Termination" msgstr "Terminazione del tunnel" -#: templates/vpn/tunneltermination.html:35 vpn/forms/bulk_import.py:107 -#: vpn/forms/model_forms.py:102 vpn/forms/model_forms.py:138 -#: vpn/forms/model_forms.py:247 vpn/tables/tunnels.py:101 +#: netbox/templates/vpn/tunneltermination.html:35 +#: netbox/vpn/forms/bulk_import.py:107 netbox/vpn/forms/model_forms.py:102 +#: netbox/vpn/forms/model_forms.py:138 netbox/vpn/forms/model_forms.py:247 +#: netbox/vpn/tables/tunnels.py:101 msgid "Outside IP" msgstr "IP esterno" -#: templates/vpn/tunneltermination.html:51 +#: netbox/templates/vpn/tunneltermination.html:51 msgid "Peer Terminations" msgstr "Terminazioni tra pari" -#: templates/wireless/inc/authentication_attrs.html:12 +#: netbox/templates/wireless/inc/authentication_attrs.html:12 msgid "Cipher" msgstr "Cifrario" -#: templates/wireless/inc/authentication_attrs.html:16 +#: netbox/templates/wireless/inc/authentication_attrs.html:16 msgid "PSK" msgstr "PSK" -#: templates/wireless/inc/wirelesslink_interface.html:35 -#: templates/wireless/inc/wirelesslink_interface.html:45 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:35 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:45 msgctxt "Abbreviation for megahertz" msgid "MHz" msgstr "MHz" -#: templates/wireless/wirelesslan.html:57 +#: netbox/templates/wireless/wirelesslan.html:57 msgid "Attached Interfaces" msgstr "Interfacce collegate" -#: templates/wireless/wirelesslangroup.html:17 +#: netbox/templates/wireless/wirelesslangroup.html:17 msgid "Add Wireless LAN" msgstr "Aggiungi LAN wireless" -#: templates/wireless/wirelesslangroup.html:26 -#: wireless/forms/model_forms.py:28 +#: netbox/templates/wireless/wirelesslangroup.html:26 +#: netbox/wireless/forms/model_forms.py:28 msgid "Wireless LAN Group" msgstr "Gruppo LAN wireless" -#: templates/wireless/wirelesslangroup.html:59 +#: netbox/templates/wireless/wirelesslangroup.html:59 msgid "Add Wireless LAN Group" msgstr "Aggiungi gruppo LAN wireless" -#: templates/wireless/wirelesslink.html:14 +#: netbox/templates/wireless/wirelesslink.html:14 msgid "Link Properties" msgstr "Proprietà dei link" -#: templates/wireless/wirelesslink.html:38 wireless/forms/bulk_edit.py:129 -#: wireless/forms/filtersets.py:102 wireless/forms/model_forms.py:165 +#: 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" -#: tenancy/filtersets.py:28 +#: netbox/tenancy/filtersets.py:28 msgid "Parent contact group (ID)" msgstr "Gruppo di contatto dei genitori (ID)" -#: tenancy/filtersets.py:34 +#: netbox/tenancy/filtersets.py:34 msgid "Parent contact group (slug)" msgstr "Gruppo di contatto con i genitori (slug)" -#: tenancy/filtersets.py:40 tenancy/filtersets.py:67 tenancy/filtersets.py:110 +#: netbox/tenancy/filtersets.py:40 netbox/tenancy/filtersets.py:67 +#: netbox/tenancy/filtersets.py:110 msgid "Contact group (ID)" msgstr "Gruppo di contatti (ID)" -#: tenancy/filtersets.py:47 tenancy/filtersets.py:74 tenancy/filtersets.py:117 +#: netbox/tenancy/filtersets.py:47 netbox/tenancy/filtersets.py:74 +#: netbox/tenancy/filtersets.py:117 msgid "Contact group (slug)" msgstr "Gruppo di contatti (slug)" -#: tenancy/filtersets.py:104 +#: netbox/tenancy/filtersets.py:104 msgid "Contact (ID)" msgstr "Contatto (ID)" -#: tenancy/filtersets.py:121 +#: netbox/tenancy/filtersets.py:121 msgid "Contact role (ID)" msgstr "Ruolo di contatto (ID)" -#: tenancy/filtersets.py:127 +#: netbox/tenancy/filtersets.py:127 msgid "Contact role (slug)" msgstr "Ruolo di contatto (slug)" -#: tenancy/filtersets.py:158 +#: netbox/tenancy/filtersets.py:158 msgid "Contact group" msgstr "Gruppo di contatti" -#: tenancy/filtersets.py:169 +#: netbox/tenancy/filtersets.py:169 msgid "Parent tenant group (ID)" msgstr "Gruppo di inquilini principali (ID)" -#: tenancy/filtersets.py:175 +#: netbox/tenancy/filtersets.py:175 msgid "Parent tenant group (slug)" msgstr "Gruppo di inquilini principali (slug)" -#: tenancy/filtersets.py:181 tenancy/filtersets.py:201 +#: netbox/tenancy/filtersets.py:181 netbox/tenancy/filtersets.py:201 msgid "Tenant group (ID)" msgstr "Gruppo di inquilini (ID)" -#: tenancy/filtersets.py:234 +#: netbox/tenancy/filtersets.py:234 msgid "Tenant Group (ID)" msgstr "Gruppo di inquilini (ID)" -#: tenancy/filtersets.py:241 +#: netbox/tenancy/filtersets.py:241 msgid "Tenant Group (slug)" msgstr "Gruppo di inquilini (slug)" -#: tenancy/forms/bulk_edit.py:66 +#: netbox/tenancy/forms/bulk_edit.py:66 msgid "Desciption" msgstr "Descrizione" -#: tenancy/forms/bulk_import.py:101 +#: netbox/tenancy/forms/bulk_import.py:101 msgid "Assigned contact" msgstr "Contatto assegnato" -#: tenancy/models/contacts.py:32 +#: netbox/tenancy/models/contacts.py:32 msgid "contact group" msgstr "gruppo di contatti" -#: tenancy/models/contacts.py:33 +#: netbox/tenancy/models/contacts.py:33 msgid "contact groups" msgstr "gruppi di contatti" -#: tenancy/models/contacts.py:48 +#: netbox/tenancy/models/contacts.py:48 msgid "contact role" msgstr "ruolo di contatto" -#: tenancy/models/contacts.py:49 +#: netbox/tenancy/models/contacts.py:49 msgid "contact roles" msgstr "ruoli di contatto" -#: tenancy/models/contacts.py:68 +#: netbox/tenancy/models/contacts.py:68 msgid "title" msgstr "titolo" -#: tenancy/models/contacts.py:73 +#: netbox/tenancy/models/contacts.py:73 msgid "phone" msgstr "telefono" -#: tenancy/models/contacts.py:78 +#: netbox/tenancy/models/contacts.py:78 msgid "email" msgstr "e-mail" -#: tenancy/models/contacts.py:87 +#: netbox/tenancy/models/contacts.py:87 msgid "link" msgstr "collegamento" -#: tenancy/models/contacts.py:103 +#: netbox/tenancy/models/contacts.py:103 msgid "contact" msgstr "contatto" -#: tenancy/models/contacts.py:104 +#: netbox/tenancy/models/contacts.py:104 msgid "contacts" msgstr "contatta" -#: tenancy/models/contacts.py:153 +#: netbox/tenancy/models/contacts.py:153 msgid "contact assignment" msgstr "assegnazione dei contatti" -#: tenancy/models/contacts.py:154 +#: netbox/tenancy/models/contacts.py:154 msgid "contact assignments" msgstr "assegnazioni di contatto" -#: tenancy/models/contacts.py:170 +#: netbox/tenancy/models/contacts.py:170 #, python-brace-format msgid "Contacts cannot be assigned to this object type ({type})." msgstr "" "I contatti non possono essere assegnati a questo tipo di oggetto ({type})." -#: tenancy/models/tenants.py:32 +#: netbox/tenancy/models/tenants.py:32 msgid "tenant group" msgstr "gruppo di inquilini" -#: tenancy/models/tenants.py:33 +#: netbox/tenancy/models/tenants.py:33 msgid "tenant groups" msgstr "gruppi di inquilini" -#: tenancy/models/tenants.py:70 +#: netbox/tenancy/models/tenants.py:70 msgid "Tenant name must be unique per group." msgstr "Il nome del tenant deve essere univoco per gruppo." -#: tenancy/models/tenants.py:80 +#: netbox/tenancy/models/tenants.py:80 msgid "Tenant slug must be unique per group." msgstr "Lo slug del tenant deve essere unico per gruppo." -#: tenancy/models/tenants.py:88 +#: netbox/tenancy/models/tenants.py:88 msgid "tenant" msgstr "inquilino" -#: tenancy/models/tenants.py:89 +#: netbox/tenancy/models/tenants.py:89 msgid "tenants" msgstr "inquilini" -#: tenancy/tables/contacts.py:112 +#: netbox/tenancy/tables/contacts.py:112 msgid "Contact Title" msgstr "Titolo del contatto" -#: tenancy/tables/contacts.py:116 +#: netbox/tenancy/tables/contacts.py:116 msgid "Contact Phone" msgstr "Telefono di contatto" -#: tenancy/tables/contacts.py:121 +#: netbox/tenancy/tables/contacts.py:121 msgid "Contact Email" msgstr "Email di contatto" -#: tenancy/tables/contacts.py:125 +#: netbox/tenancy/tables/contacts.py:125 msgid "Contact Address" msgstr "Indirizzo di contatto" -#: tenancy/tables/contacts.py:129 +#: netbox/tenancy/tables/contacts.py:129 msgid "Contact Link" msgstr "Link di contatto" -#: tenancy/tables/contacts.py:133 +#: netbox/tenancy/tables/contacts.py:133 msgid "Contact Description" msgstr "Descrizione del contatto" -#: users/filtersets.py:33 users/filtersets.py:73 +#: netbox/users/filtersets.py:33 netbox/users/filtersets.py:73 msgid "Permission (ID)" msgstr "Autorizzazione (ID)" -#: users/filtersets.py:38 users/filtersets.py:78 +#: netbox/users/filtersets.py:38 netbox/users/filtersets.py:78 msgid "Notification group (ID)" msgstr "Gruppo di notifica (ID)" -#: users/forms/bulk_edit.py:26 +#: netbox/users/forms/bulk_edit.py:26 msgid "First name" msgstr "Nome" -#: users/forms/bulk_edit.py:31 +#: netbox/users/forms/bulk_edit.py:31 msgid "Last name" msgstr "Cognome" -#: users/forms/bulk_edit.py:43 +#: netbox/users/forms/bulk_edit.py:43 msgid "Staff status" msgstr "Status del personale" -#: users/forms/bulk_edit.py:48 +#: netbox/users/forms/bulk_edit.py:48 msgid "Superuser status" msgstr "Stato di utente avanzato" -#: users/forms/bulk_import.py:41 +#: netbox/users/forms/bulk_import.py:41 msgid "If no key is provided, one will be generated automatically." msgstr "" "Se non viene fornita alcuna chiave, ne verrà generata una automaticamente." -#: users/forms/filtersets.py:51 users/tables.py:42 +#: netbox/users/forms/filtersets.py:51 netbox/users/tables.py:42 msgid "Is Staff" msgstr "È personale" -#: users/forms/filtersets.py:58 users/tables.py:45 +#: netbox/users/forms/filtersets.py:58 netbox/users/tables.py:45 msgid "Is Superuser" msgstr "È Superuser" -#: users/forms/filtersets.py:91 users/tables.py:86 +#: netbox/users/forms/filtersets.py:91 netbox/users/tables.py:86 msgid "Can View" msgstr "Può visualizzare" -#: users/forms/filtersets.py:98 users/tables.py:89 +#: netbox/users/forms/filtersets.py:98 netbox/users/tables.py:89 msgid "Can Add" msgstr "Può aggiungere" -#: users/forms/filtersets.py:105 users/tables.py:92 +#: netbox/users/forms/filtersets.py:105 netbox/users/tables.py:92 msgid "Can Change" msgstr "Può cambiare" -#: users/forms/filtersets.py:112 users/tables.py:95 +#: netbox/users/forms/filtersets.py:112 netbox/users/tables.py:95 msgid "Can Delete" msgstr "Può eliminare" -#: users/forms/model_forms.py:62 +#: netbox/users/forms/model_forms.py:62 msgid "User Interface" msgstr "Interfaccia utente" -#: users/forms/model_forms.py:114 +#: netbox/users/forms/model_forms.py:114 msgid "" "Keys must be at least 40 characters in length. Be sure to record " "your key prior to submitting this form, as it may no longer be " @@ -14058,7 +14879,7 @@ msgstr "" "registrare la tua chiave prima di inviare questo modulo, poiché " "potrebbe non essere più accessibile una volta creato il token." -#: users/forms/model_forms.py:126 +#: netbox/users/forms/model_forms.py:126 msgid "" "Allowed IPv4/IPv6 networks from where the token can be used. Leave blank for" " no restrictions. Example: " @@ -14068,31 +14889,31 @@ msgstr "" "vuoto per non avere restrizioni. Esempio: " "10.1.1.0/24,192.168.10.16/32,2001: db 8:1: :/64" -#: users/forms/model_forms.py:175 +#: netbox/users/forms/model_forms.py:175 msgid "Confirm password" msgstr "Conferma la password" -#: users/forms/model_forms.py:178 +#: netbox/users/forms/model_forms.py:178 msgid "Enter the same password as before, for verification." msgstr "Inserisci la stessa password di prima, per la verifica." -#: users/forms/model_forms.py:227 +#: netbox/users/forms/model_forms.py:227 msgid "Passwords do not match! Please check your input and try again." msgstr "Le password non corrispondono! Controlla i dati inseriti e riprova." -#: users/forms/model_forms.py:294 +#: netbox/users/forms/model_forms.py:294 msgid "Additional actions" msgstr "Azioni aggiuntive" -#: users/forms/model_forms.py:297 +#: netbox/users/forms/model_forms.py:297 msgid "Actions granted in addition to those listed above" msgstr "Azioni concesse in aggiunta a quelle sopra elencate" -#: users/forms/model_forms.py:313 +#: netbox/users/forms/model_forms.py:313 msgid "Objects" msgstr "Oggetti" -#: users/forms/model_forms.py:325 +#: netbox/users/forms/model_forms.py:325 msgid "" "JSON expression of a queryset filter that will return only permitted " "objects. Leave null to match all objects of this type. A list of multiple " @@ -14102,81 +14923,81 @@ msgstr "" "consentiti. Lascia null in modo che corrisponda a tutti gli oggetti di " "questo tipo. Un elenco di più oggetti risulterà in un'operazione OR logica." -#: users/forms/model_forms.py:364 +#: netbox/users/forms/model_forms.py:364 msgid "At least one action must be selected." msgstr "È necessario selezionare almeno un'azione." -#: users/forms/model_forms.py:382 +#: netbox/users/forms/model_forms.py:382 #, python-brace-format msgid "Invalid filter for {model}: {error}" msgstr "Filtro non valido per {model}: {error}" -#: users/models/permissions.py:39 +#: netbox/users/models/permissions.py:39 msgid "The list of actions granted by this permission" msgstr "L'elenco delle azioni concesse da questa autorizzazione" -#: users/models/permissions.py:44 +#: netbox/users/models/permissions.py:44 msgid "constraints" msgstr "limiti" -#: users/models/permissions.py:45 +#: netbox/users/models/permissions.py:45 msgid "" "Queryset filter matching the applicable objects of the selected type(s)" msgstr "" "Filtro Queryset che corrisponde agli oggetti applicabili dei tipi " "selezionati" -#: users/models/permissions.py:52 +#: netbox/users/models/permissions.py:52 msgid "permission" msgstr "autorizzazione" -#: users/models/permissions.py:53 users/models/users.py:47 +#: netbox/users/models/permissions.py:53 netbox/users/models/users.py:47 msgid "permissions" msgstr "autorizzazioni" -#: users/models/preferences.py:29 users/models/preferences.py:30 +#: netbox/users/models/preferences.py:29 netbox/users/models/preferences.py:30 msgid "user preferences" msgstr "preferenze utente" -#: users/models/preferences.py:97 +#: netbox/users/models/preferences.py:97 #, python-brace-format msgid "Key '{path}' is a leaf node; cannot assign new keys" msgstr "Chiave '{path}'è un nodo foglia; non può assegnare nuove chiavi" -#: users/models/preferences.py:109 +#: netbox/users/models/preferences.py:109 #, python-brace-format msgid "Key '{path}' is a dictionary; cannot assign a non-dictionary value" msgstr "" "Chiave '{path}'è un dizionario; non può assegnare un valore diverso dal " "dizionario" -#: users/models/tokens.py:36 +#: netbox/users/models/tokens.py:36 msgid "expires" msgstr "scade" -#: users/models/tokens.py:41 +#: netbox/users/models/tokens.py:41 msgid "last used" msgstr "usato per ultimo" -#: users/models/tokens.py:46 +#: netbox/users/models/tokens.py:46 msgid "key" msgstr "chiave" -#: users/models/tokens.py:52 +#: netbox/users/models/tokens.py:52 msgid "write enabled" msgstr "scrittura abilitata" -#: users/models/tokens.py:54 +#: netbox/users/models/tokens.py:54 msgid "Permit create/update/delete operations using this key" msgstr "" "Consenti operazioni di creazione/aggiornamento/eliminazione utilizzando " "questa chiave" -#: users/models/tokens.py:65 +#: netbox/users/models/tokens.py:65 msgid "allowed IPs" msgstr "IP consentiti" -#: users/models/tokens.py:67 +#: netbox/users/models/tokens.py:67 msgid "" "Allowed IPv4/IPv6 networks from where the token can be used. Leave blank for" " no restrictions. Ex: \"10.1.1.0/24, 192.168.10.16/32, 2001:DB8:1::/64\"" @@ -14185,42 +15006,42 @@ msgstr "" "vuoto per non avere restrizioni. Es: «10.1.1.0/24, 192.168.10.16/32, 2001:DB" " 8:1: :/64\"" -#: users/models/tokens.py:75 +#: netbox/users/models/tokens.py:75 msgid "token" msgstr "gettone" -#: users/models/tokens.py:76 +#: netbox/users/models/tokens.py:76 msgid "tokens" msgstr "gettoni" -#: users/models/users.py:57 vpn/models/crypto.py:42 +#: netbox/users/models/users.py:57 netbox/vpn/models/crypto.py:42 msgid "group" msgstr "gruppo" -#: users/models/users.py:92 +#: netbox/users/models/users.py:92 msgid "user" msgstr "utente" -#: users/models/users.py:104 +#: netbox/users/models/users.py:104 msgid "A user with this username already exists." msgstr "Esiste già un utente con questo nome utente." -#: users/tables.py:98 +#: netbox/users/tables.py:98 msgid "Custom Actions" msgstr "Azioni personalizzate" -#: utilities/api.py:153 +#: netbox/utilities/api.py:153 #, python-brace-format msgid "Related object not found using the provided attributes: {params}" msgstr "" "Oggetto correlato non trovato utilizzando gli attributi forniti: {params}" -#: utilities/api.py:156 +#: netbox/utilities/api.py:156 #, python-brace-format msgid "Multiple objects match the provided attributes: {params}" msgstr "Più oggetti corrispondono agli attributi forniti: {params}" -#: utilities/api.py:168 +#: netbox/utilities/api.py:168 #, python-brace-format msgid "" "Related objects must be referenced by numeric ID or by dictionary of " @@ -14229,40 +15050,40 @@ msgstr "" "Gli oggetti correlati devono essere referenziati tramite ID numerico o " "dizionario di attributi. Ha ricevuto un valore non riconosciuto: {value}" -#: utilities/api.py:177 +#: netbox/utilities/api.py:177 #, python-brace-format msgid "Related object not found using the provided numeric ID: {id}" msgstr "Oggetto correlato non trovato utilizzando l'ID numerico fornito: {id}" -#: utilities/choices.py:19 +#: netbox/utilities/choices.py:19 #, python-brace-format msgid "{name} has a key defined but CHOICES is not a list" msgstr "{name} ha una chiave definita ma CHOICES non è una lista" -#: utilities/conversion.py:19 +#: netbox/utilities/conversion.py:19 msgid "Weight must be a positive number" msgstr "Il peso deve essere un numero positivo" -#: utilities/conversion.py:21 +#: netbox/utilities/conversion.py:21 #, 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)" -#: utilities/conversion.py:32 utilities/conversion.py:62 +#: netbox/utilities/conversion.py:32 netbox/utilities/conversion.py:62 #, python-brace-format msgid "Unknown unit {unit}. Must be one of the following: {valid_units}" msgstr "Unità sconosciuta {unit}. Deve essere uno dei seguenti: {valid_units}" -#: utilities/conversion.py:45 +#: netbox/utilities/conversion.py:45 msgid "Length must be a positive number" msgstr "La lunghezza deve essere un numero positivo" -#: utilities/conversion.py:47 +#: netbox/utilities/conversion.py:47 #, 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)" -#: utilities/error_handlers.py:31 +#: netbox/utilities/error_handlers.py:31 #, python-brace-format msgid "" "Unable to delete {objects}. {count} dependent objects were " @@ -14271,15 +15092,15 @@ msgstr "" "Impossibile eliminare {objects}. {count} sono stati trovati" " oggetti dipendenti: " -#: utilities/error_handlers.py:33 +#: netbox/utilities/error_handlers.py:33 msgid "More than 50" msgstr "Più di 50" -#: utilities/fields.py:30 +#: netbox/utilities/fields.py:30 msgid "RGB color in hexadecimal. Example: " msgstr "Colore RGB in formato esadecimale. Esempio: " -#: utilities/fields.py:159 +#: netbox/utilities/fields.py:159 #, python-format msgid "" "%s(%r) is invalid. to_model parameter to CounterCacheField must be a string " @@ -14288,7 +15109,7 @@ msgstr "" "%s(%r) non è valido. Il parametro to_model di CounterCacheField deve essere " "una stringa nel formato 'app.model'" -#: utilities/fields.py:169 +#: netbox/utilities/fields.py:169 #, python-format msgid "" "%s(%r) is invalid. to_field parameter to CounterCacheField must be a string " @@ -14297,39 +15118,39 @@ msgstr "" "%s(%r) non è valido. Il parametro to_field di CounterCacheField deve essere " "una stringa nel formato 'field'" -#: utilities/forms/bulk_import.py:23 +#: netbox/utilities/forms/bulk_import.py:23 msgid "Enter object data in CSV, JSON or YAML format." msgstr "Inserisci i dati dell'oggetto in formato CSV, JSON o YAML." -#: utilities/forms/bulk_import.py:36 +#: netbox/utilities/forms/bulk_import.py:36 msgid "CSV delimiter" msgstr "Delimitatore CSV" -#: utilities/forms/bulk_import.py:37 +#: netbox/utilities/forms/bulk_import.py:37 msgid "The character which delimits CSV fields. Applies only to CSV format." msgstr "" "Il carattere che delimita i campi CSV. Si applica solo al formato CSV." -#: utilities/forms/bulk_import.py:51 +#: netbox/utilities/forms/bulk_import.py:51 msgid "Form data must be empty when uploading/selecting a file." msgstr "" "I dati del modulo devono essere vuoti durante il caricamento/selezione di un" " file." -#: utilities/forms/bulk_import.py:80 +#: netbox/utilities/forms/bulk_import.py:80 #, python-brace-format msgid "Unknown data format: {format}" msgstr "Formato dati sconosciuto: {format}" -#: utilities/forms/bulk_import.py:100 +#: netbox/utilities/forms/bulk_import.py:100 msgid "Unable to detect data format. Please specify." msgstr "Impossibile rilevare il formato dei dati. Si prega di specificare." -#: utilities/forms/bulk_import.py:123 +#: netbox/utilities/forms/bulk_import.py:123 msgid "Invalid CSV delimiter" msgstr "Delimitatore CSV non valido" -#: utilities/forms/bulk_import.py:167 +#: netbox/utilities/forms/bulk_import.py:167 msgid "" "Invalid YAML data. Data must be in the form of multiple documents, or a " "single document comprising a list of dictionaries." @@ -14337,7 +15158,7 @@ msgstr "" "Dati YAML non validi. I dati devono avere la forma di più documenti o di un " "singolo documento comprendente un elenco di dizionari." -#: utilities/forms/fields/array.py:20 +#: netbox/utilities/forms/fields/array.py:20 #, python-brace-format msgid "" "Invalid list ({value}). Must be numeric and ranges must be in ascending " @@ -14346,7 +15167,7 @@ msgstr "" "Elenco non valido ({value}). Deve essere numerico e gli intervalli devono " "essere in ordine crescente." -#: utilities/forms/fields/array.py:40 +#: netbox/utilities/forms/fields/array.py:40 msgid "" "Specify one or more numeric ranges separated by commas. Example: " "1-5,20-30" @@ -14354,7 +15175,7 @@ msgstr "" "Specifica uno o più intervalli numerici separati da virgole. Esempio: " "1-5,20-30" -#: utilities/forms/fields/array.py:47 +#: netbox/utilities/forms/fields/array.py:47 #, python-brace-format msgid "" "Invalid ranges ({value}). Must be a range of integers in ascending order." @@ -14362,17 +15183,18 @@ msgstr "" "Intervalli non validi ({value}). Deve essere un intervallo di numeri interi " "in ordine crescente." -#: utilities/forms/fields/csv.py:44 +#: netbox/utilities/forms/fields/csv.py:44 #, python-brace-format msgid "Invalid value for a multiple choice field: {value}" msgstr "Valore non valido per un campo a scelta multipla: {value}" -#: utilities/forms/fields/csv.py:57 utilities/forms/fields/csv.py:78 +#: netbox/utilities/forms/fields/csv.py:57 +#: netbox/utilities/forms/fields/csv.py:78 #, python-format msgid "Object not found: %(value)s" msgstr "Oggetto non trovato: %(value)s" -#: utilities/forms/fields/csv.py:65 +#: netbox/utilities/forms/fields/csv.py:65 #, python-brace-format msgid "" "\"{value}\" is not a unique value for this field; multiple objects were " @@ -14381,20 +15203,20 @@ msgstr "" "«{value}\"non è un valore univoco per questo campo; sono stati trovati più " "oggetti" -#: utilities/forms/fields/csv.py:69 +#: netbox/utilities/forms/fields/csv.py:69 #, python-brace-format msgid "\"{field_name}\" is an invalid accessor field name." msgstr "«{field_name}\"è un nome di campo di accesso non valido." -#: utilities/forms/fields/csv.py:101 +#: netbox/utilities/forms/fields/csv.py:101 msgid "Object type must be specified as \".\"" msgstr "Il tipo di oggetto deve essere specificato come».»" -#: utilities/forms/fields/csv.py:105 +#: netbox/utilities/forms/fields/csv.py:105 msgid "Invalid object type" msgstr "Tipo di oggetto non valido" -#: utilities/forms/fields/expandable.py:25 +#: netbox/utilities/forms/fields/expandable.py:25 msgid "" "Alphanumeric ranges are supported for bulk creation. Mixed cases and types " "within a single range are not supported (example: " @@ -14404,7 +15226,7 @@ msgstr "" "casi e i tipi misti all'interno di un unico intervallo non sono supportati " "(esempio: [età, ex] -0/0/ [0-9])." -#: utilities/forms/fields/expandable.py:46 +#: netbox/utilities/forms/fields/expandable.py:46 msgid "" "Specify a numeric range to create multiple IPs.
    Example: " "192.0.2.[1,5,100-254]/24" @@ -14412,7 +15234,7 @@ msgstr "" "Specifica un intervallo numerico per creare più IP.
    Esempio: " "192.0.2. [1.500-254] /24" -#: utilities/forms/fields/fields.py:31 +#: netbox/utilities/forms/fields/fields.py:31 #, python-brace-format msgid "" " Markdown la sintassi è supportata" -#: utilities/forms/fields/fields.py:48 +#: netbox/utilities/forms/fields/fields.py:48 msgid "URL-friendly unique shorthand" msgstr "Abbreviazione univoca compatibile con gli URL" -#: utilities/forms/fields/fields.py:101 +#: netbox/utilities/forms/fields/fields.py:101 msgid "Enter context data in JSON format." msgstr "" "Inserisci i dati contestuali in JSON " "formato." -#: utilities/forms/fields/fields.py:124 +#: netbox/utilities/forms/fields/fields.py:124 msgid "MAC address must be in EUI-48 format" msgstr "L'indirizzo MAC deve essere in formato EUI-48" -#: utilities/forms/forms.py:52 +#: netbox/utilities/forms/forms.py:52 msgid "Use regular expressions" msgstr "Usare espressioni regolari" -#: utilities/forms/forms.py:75 +#: netbox/utilities/forms/forms.py:75 msgid "" "Numeric ID of an existing object to update (if not creating a new object)" msgstr "" "ID numerico di un oggetto esistente da aggiornare (se non si crea un nuovo " "oggetto)" -#: utilities/forms/forms.py:92 +#: netbox/utilities/forms/forms.py:92 #, python-brace-format msgid "Unrecognized header: {name}" msgstr "Intestazione non riconosciuta: {name}" -#: utilities/forms/forms.py:118 +#: netbox/utilities/forms/forms.py:118 msgid "Available Columns" msgstr "Colonne disponibili" -#: utilities/forms/forms.py:126 +#: netbox/utilities/forms/forms.py:126 msgid "Selected Columns" msgstr "Colonne selezionate" -#: utilities/forms/mixins.py:44 +#: netbox/utilities/forms/mixins.py:44 msgid "" "This object has been modified since the form was rendered. Please consult " "the object's change log for details." @@ -14467,13 +15289,13 @@ msgstr "" "Questo oggetto è stato modificato dopo il rendering del modulo. Per i " "dettagli, consulta il registro delle modifiche dell'oggetto." -#: utilities/forms/utils.py:42 utilities/forms/utils.py:68 -#: utilities/forms/utils.py:85 utilities/forms/utils.py:87 +#: netbox/utilities/forms/utils.py:42 netbox/utilities/forms/utils.py:68 +#: netbox/utilities/forms/utils.py:85 netbox/utilities/forms/utils.py:87 #, python-brace-format msgid "Range \"{value}\" is invalid." msgstr "Gamma»{value}\"non è valido." -#: utilities/forms/utils.py:74 +#: netbox/utilities/forms/utils.py:74 #, python-brace-format msgid "" "Invalid range: Ending value ({end}) must be greater than beginning value " @@ -14482,70 +15304,70 @@ msgstr "" "Intervallo non valido: valore finale ({end}) deve essere maggiore del valore" " iniziale ({begin})." -#: utilities/forms/utils.py:232 +#: netbox/utilities/forms/utils.py:232 #, python-brace-format msgid "Duplicate or conflicting column header for \"{field}\"" msgstr "Intestazione di colonna duplicata o in conflitto per»{field}»" -#: utilities/forms/utils.py:238 +#: netbox/utilities/forms/utils.py:238 #, python-brace-format msgid "Duplicate or conflicting column header for \"{header}\"" msgstr "Intestazione di colonna duplicata o in conflitto per»{header}»" -#: utilities/forms/utils.py:247 +#: netbox/utilities/forms/utils.py:247 #, python-brace-format msgid "Row {row}: Expected {count_expected} columns but found {count_found}" msgstr "" "Fila {row}: Previsto {count_expected} colonne ma trovate {count_found}" -#: utilities/forms/utils.py:270 +#: netbox/utilities/forms/utils.py:270 #, python-brace-format msgid "Unexpected column header \"{field}\" found." msgstr "Intestazione di colonna inaspettata»{field}«trovato." -#: utilities/forms/utils.py:272 +#: netbox/utilities/forms/utils.py:272 #, python-brace-format msgid "Column \"{field}\" is not a related object; cannot use dots" msgstr "Colonna»{field}\"non è un oggetto correlato; non può usare punti" -#: utilities/forms/utils.py:276 +#: netbox/utilities/forms/utils.py:276 #, python-brace-format msgid "Invalid related object attribute for column \"{field}\": {to_field}" msgstr "" "Attributo oggetto correlato non valido per la colonna»{field}«: {to_field}" -#: utilities/forms/utils.py:284 +#: netbox/utilities/forms/utils.py:284 #, python-brace-format msgid "Required column header \"{header}\" not found." msgstr "Intestazione di colonna obbligatoria»{header}\"non trovato." -#: utilities/forms/widgets/apiselect.py:124 +#: netbox/utilities/forms/widgets/apiselect.py:124 #, python-brace-format msgid "Missing required value for dynamic query param: '{dynamic_params}'" msgstr "" "Valore obbligatorio mancante per il parametro di interrogazione dinamica: " "'{dynamic_params}»" -#: utilities/forms/widgets/apiselect.py:141 +#: netbox/utilities/forms/widgets/apiselect.py:141 #, python-brace-format msgid "Missing required value for static query param: '{static_params}'" msgstr "" "Valore obbligatorio mancante per il parametro di query statica: " "'{static_params}»" -#: utilities/password_validation.py:13 +#: netbox/utilities/password_validation.py:13 msgid "Password must have at least one numeral." msgstr "La password deve contenere almeno un numero." -#: utilities/password_validation.py:18 +#: netbox/utilities/password_validation.py:18 msgid "Password must have at least one uppercase letter." msgstr "La password deve contenere almeno una lettera maiuscola." -#: utilities/password_validation.py:23 +#: netbox/utilities/password_validation.py:23 msgid "Password must have at least one lowercase letter." msgstr "La password deve contenere almeno una lettera minuscola." -#: utilities/password_validation.py:27 +#: netbox/utilities/password_validation.py:27 msgid "" "Your password must contain at least one numeral, one uppercase letter and " "one lowercase letter." @@ -14553,7 +15375,7 @@ msgstr "" "La password deve contenere almeno un numero, una lettera maiuscola e una " "lettera minuscola." -#: utilities/permissions.py:42 +#: netbox/utilities/permissions.py:42 #, python-brace-format msgid "" "Invalid permission name: {name}. Must be in the format " @@ -14562,127 +15384,127 @@ msgstr "" "Nome di autorizzazione non valido: {name}. Deve essere nel formato " "._" -#: utilities/permissions.py:60 +#: netbox/utilities/permissions.py:60 #, python-brace-format msgid "Unknown app_label/model_name for {name}" msgstr "app_label/model_name sconosciuto per {name}" -#: utilities/request.py:76 +#: netbox/utilities/request.py:76 #, python-brace-format msgid "Invalid IP address set for {header}: {ip}" msgstr "Indirizzo IP non valido impostato per {header}: {ip}" -#: utilities/tables.py:47 +#: netbox/utilities/tables.py:47 #, python-brace-format msgid "A column named {name} is already defined for table {table_name}" msgstr "" "Una colonna denominata {name} è già definito per la tabella {table_name}" -#: utilities/templates/builtins/customfield_value.html:30 +#: netbox/utilities/templates/builtins/customfield_value.html:30 msgid "Not defined" msgstr "Non definito" -#: utilities/templates/buttons/bookmark.html:9 +#: netbox/utilities/templates/buttons/bookmark.html:9 msgid "Unbookmark" msgstr "Annulla segnalibro" -#: utilities/templates/buttons/bookmark.html:13 +#: netbox/utilities/templates/buttons/bookmark.html:13 msgid "Bookmark" msgstr "Segnalibro" -#: utilities/templates/buttons/clone.html:4 +#: netbox/utilities/templates/buttons/clone.html:4 msgid "Clone" msgstr "Clona" -#: utilities/templates/buttons/export.html:7 +#: netbox/utilities/templates/buttons/export.html:7 msgid "Current View" msgstr "Visualizzazione corrente" -#: utilities/templates/buttons/export.html:8 +#: netbox/utilities/templates/buttons/export.html:8 msgid "All Data" msgstr "Tutti i dati" -#: utilities/templates/buttons/export.html:28 +#: netbox/utilities/templates/buttons/export.html:28 msgid "Add export template" msgstr "Aggiungi modello di esportazione" -#: utilities/templates/buttons/import.html:4 +#: netbox/utilities/templates/buttons/import.html:4 msgid "Import" msgstr "Importa" -#: utilities/templates/buttons/subscribe.html:10 +#: netbox/utilities/templates/buttons/subscribe.html:10 msgid "Unsubscribe" msgstr "Annulla l'iscrizione" -#: utilities/templates/buttons/subscribe.html:14 +#: netbox/utilities/templates/buttons/subscribe.html:14 msgid "Subscribe" msgstr "Abbonati" -#: utilities/templates/form_helpers/render_field.html:41 +#: netbox/utilities/templates/form_helpers/render_field.html:41 msgid "Copy to clipboard" msgstr "Copia negli appunti" -#: utilities/templates/form_helpers/render_field.html:57 +#: netbox/utilities/templates/form_helpers/render_field.html:57 msgid "This field is required" msgstr "Questo campo è obbligatorio" -#: utilities/templates/form_helpers/render_field.html:70 +#: netbox/utilities/templates/form_helpers/render_field.html:70 msgid "Set Null" msgstr "Imposta Null" -#: utilities/templates/helpers/applied_filters.html:11 +#: netbox/utilities/templates/helpers/applied_filters.html:11 msgid "Clear all" msgstr "Cancella tutto" -#: utilities/templates/helpers/table_config_form.html:8 +#: netbox/utilities/templates/helpers/table_config_form.html:8 msgid "Table Configuration" msgstr "Configurazione della tabella" -#: utilities/templates/helpers/table_config_form.html:31 +#: netbox/utilities/templates/helpers/table_config_form.html:31 msgid "Move Up" msgstr "Sposta verso l'alto" -#: utilities/templates/helpers/table_config_form.html:34 +#: netbox/utilities/templates/helpers/table_config_form.html:34 msgid "Move Down" msgstr "Sposta verso il basso" -#: utilities/templates/navigation/menu.html:14 +#: netbox/utilities/templates/navigation/menu.html:14 msgid "Search…" msgstr "Cerca..." -#: utilities/templates/navigation/menu.html:14 +#: netbox/utilities/templates/navigation/menu.html:14 msgid "Search NetBox" msgstr "Cerca NetBox" -#: utilities/templates/widgets/apiselect.html:7 +#: netbox/utilities/templates/widgets/apiselect.html:7 msgid "Open selector" msgstr "Apri selettore" -#: utilities/templates/widgets/markdown_input.html:6 +#: netbox/utilities/templates/widgets/markdown_input.html:6 msgid "Write" msgstr "Scrivere" -#: utilities/testing/views.py:632 +#: netbox/utilities/testing/views.py:632 msgid "The test must define csv_update_data." msgstr "Il test deve definire csv_update_data." -#: utilities/validators.py:65 +#: netbox/utilities/validators.py:65 #, python-brace-format msgid "{value} is not a valid regular expression." msgstr "{value} non è un'espressione regolare valida." -#: utilities/views.py:57 +#: netbox/utilities/views.py:57 #, python-brace-format msgid "{self.__class__.__name__} must implement get_required_permission()" msgstr "" "{self.__class__.__name__} deve implementare get_required_permission ()" -#: utilities/views.py:93 +#: netbox/utilities/views.py:93 #, python-brace-format msgid "{class_name} must implement get_required_permission()" msgstr "{class_name} deve implementare get_required_permission ()" -#: utilities/views.py:117 +#: netbox/utilities/views.py:117 #, python-brace-format msgid "" "{class_name} has no queryset defined. ObjectPermissionRequiredMixin may only" @@ -14691,61 +15513,63 @@ 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" -#: virtualization/filtersets.py:79 +#: netbox/virtualization/filtersets.py:79 msgid "Parent group (ID)" msgstr "Gruppo padre (ID)" -#: virtualization/filtersets.py:85 +#: netbox/virtualization/filtersets.py:85 msgid "Parent group (slug)" msgstr "Gruppo principale (slug)" -#: virtualization/filtersets.py:89 virtualization/filtersets.py:141 +#: netbox/virtualization/filtersets.py:89 +#: netbox/virtualization/filtersets.py:141 msgid "Cluster type (ID)" msgstr "Tipo di cluster (ID)" -#: virtualization/filtersets.py:151 virtualization/filtersets.py:271 +#: netbox/virtualization/filtersets.py:151 +#: netbox/virtualization/filtersets.py:271 msgid "Cluster (ID)" msgstr "Cluster (ID)" -#: virtualization/forms/bulk_edit.py:166 -#: virtualization/models/virtualmachines.py:115 +#: netbox/virtualization/forms/bulk_edit.py:166 +#: netbox/virtualization/models/virtualmachines.py:115 msgid "vCPUs" msgstr "vCPU" -#: virtualization/forms/bulk_edit.py:170 +#: netbox/virtualization/forms/bulk_edit.py:170 msgid "Memory (MB)" msgstr "Memoria (MB)" -#: virtualization/forms/bulk_edit.py:174 -msgid "Disk (GB)" -msgstr "Disco (GB)" +#: netbox/virtualization/forms/bulk_edit.py:174 +msgid "Disk (MB)" +msgstr "" -#: virtualization/forms/bulk_edit.py:334 -#: virtualization/forms/filtersets.py:251 -msgid "Size (GB)" -msgstr "Dimensioni (GB)" +#: netbox/virtualization/forms/bulk_edit.py:334 +#: netbox/virtualization/forms/filtersets.py:251 +msgid "Size (MB)" +msgstr "" -#: virtualization/forms/bulk_import.py:44 +#: netbox/virtualization/forms/bulk_import.py:44 msgid "Type of cluster" msgstr "Tipo di cluster" -#: virtualization/forms/bulk_import.py:51 +#: netbox/virtualization/forms/bulk_import.py:51 msgid "Assigned cluster group" msgstr "Gruppo di cluster assegnato" -#: virtualization/forms/bulk_import.py:96 +#: netbox/virtualization/forms/bulk_import.py:96 msgid "Assigned cluster" msgstr "Cluster assegnato" -#: virtualization/forms/bulk_import.py:103 +#: netbox/virtualization/forms/bulk_import.py:103 msgid "Assigned device within cluster" msgstr "Dispositivo assegnato all'interno del cluster" -#: virtualization/forms/filtersets.py:183 +#: netbox/virtualization/forms/filtersets.py:183 msgid "Serial number" msgstr "Numero di serie" -#: virtualization/forms/model_forms.py:153 +#: netbox/virtualization/forms/model_forms.py:153 #, python-brace-format msgid "" "{device} belongs to a different site ({device_site}) than the cluster " @@ -14754,52 +15578,52 @@ msgstr "" "{device} appartiene a un sito diverso ({device_site}) rispetto al cluster " "({cluster_site})" -#: virtualization/forms/model_forms.py:192 +#: netbox/virtualization/forms/model_forms.py:192 msgid "Optionally pin this VM to a specific host device within the cluster" msgstr "" "Facoltativamente, aggiungi questa VM a un dispositivo host specifico " "all'interno del cluster" -#: virtualization/forms/model_forms.py:221 +#: netbox/virtualization/forms/model_forms.py:221 msgid "Site/Cluster" msgstr "Sito/cluster" -#: virtualization/forms/model_forms.py:244 +#: netbox/virtualization/forms/model_forms.py:244 msgid "Disk size is managed via the attachment of virtual disks." msgstr "" "La dimensione del disco viene gestita tramite il collegamento di dischi " "virtuali." -#: virtualization/forms/model_forms.py:372 -#: virtualization/tables/virtualmachines.py:111 +#: netbox/virtualization/forms/model_forms.py:372 +#: netbox/virtualization/tables/virtualmachines.py:111 msgid "Disk" msgstr "Disco" -#: virtualization/models/clusters.py:25 +#: netbox/virtualization/models/clusters.py:25 msgid "cluster type" msgstr "tipo di cluster" -#: virtualization/models/clusters.py:26 +#: netbox/virtualization/models/clusters.py:26 msgid "cluster types" msgstr "tipi di cluster" -#: virtualization/models/clusters.py:45 +#: netbox/virtualization/models/clusters.py:45 msgid "cluster group" msgstr "gruppo di cluster" -#: virtualization/models/clusters.py:46 +#: netbox/virtualization/models/clusters.py:46 msgid "cluster groups" msgstr "gruppi di cluster" -#: virtualization/models/clusters.py:121 +#: netbox/virtualization/models/clusters.py:121 msgid "cluster" msgstr "grappolo" -#: virtualization/models/clusters.py:122 +#: netbox/virtualization/models/clusters.py:122 msgid "clusters" msgstr "grappoli" -#: virtualization/models/clusters.py:141 +#: netbox/virtualization/models/clusters.py:141 #, python-brace-format msgid "" "{count} devices are assigned as hosts for this cluster but are not in site " @@ -14808,44 +15632,44 @@ msgstr "" "{count} i dispositivi vengono assegnati come host per questo cluster ma non " "si trovano nel sito {site}" -#: virtualization/models/virtualmachines.py:123 +#: netbox/virtualization/models/virtualmachines.py:123 msgid "memory (MB)" msgstr "memoria (MB)" -#: virtualization/models/virtualmachines.py:128 +#: netbox/virtualization/models/virtualmachines.py:128 msgid "disk (MB)" msgstr "disco (MB)" -#: virtualization/models/virtualmachines.py:166 +#: netbox/virtualization/models/virtualmachines.py:166 msgid "Virtual machine name must be unique per cluster." msgstr "Il nome della macchina virtuale deve essere univoco per cluster." -#: virtualization/models/virtualmachines.py:169 +#: netbox/virtualization/models/virtualmachines.py:169 msgid "virtual machine" msgstr "macchina virtuale" -#: virtualization/models/virtualmachines.py:170 +#: netbox/virtualization/models/virtualmachines.py:170 msgid "virtual machines" msgstr "macchine virtuali" -#: virtualization/models/virtualmachines.py:184 +#: netbox/virtualization/models/virtualmachines.py:184 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." -#: virtualization/models/virtualmachines.py:191 +#: netbox/virtualization/models/virtualmachines.py:191 #, 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})." -#: virtualization/models/virtualmachines.py:198 +#: netbox/virtualization/models/virtualmachines.py:198 msgid "Must specify a cluster when assigning a host device." msgstr "" "È necessario specificare un cluster quando si assegna un dispositivo host." -#: virtualization/models/virtualmachines.py:203 +#: netbox/virtualization/models/virtualmachines.py:203 #, python-brace-format msgid "" "The selected device ({device}) is not assigned to this cluster ({cluster})." @@ -14853,7 +15677,7 @@ msgstr "" "Il dispositivo selezionato ({device}) non è assegnato a questo cluster " "({cluster})." -#: virtualization/models/virtualmachines.py:215 +#: netbox/virtualization/models/virtualmachines.py:215 #, python-brace-format msgid "" "The specified disk size ({size}) must match the aggregate size of assigned " @@ -14862,18 +15686,18 @@ msgstr "" "La dimensione del disco specificata ({size}) deve corrispondere alla " "dimensione aggregata dei dischi virtuali assegnati ({total_size})." -#: virtualization/models/virtualmachines.py:229 +#: netbox/virtualization/models/virtualmachines.py:229 #, 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.)" -#: virtualization/models/virtualmachines.py:238 +#: netbox/virtualization/models/virtualmachines.py:238 #, 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." -#: virtualization/models/virtualmachines.py:396 +#: netbox/virtualization/models/virtualmachines.py:396 #, python-brace-format msgid "" "The selected parent interface ({parent}) belongs to a different virtual " @@ -14882,7 +15706,7 @@ msgstr "" "L'interfaccia principale selezionata ({parent}) appartiene a una macchina " "virtuale diversa ({virtual_machine})." -#: virtualization/models/virtualmachines.py:411 +#: netbox/virtualization/models/virtualmachines.py:411 #, python-brace-format msgid "" "The selected bridge interface ({bridge}) belongs to a different virtual " @@ -14891,7 +15715,7 @@ msgstr "" "L'interfaccia bridge selezionata ({bridge}) appartiene a una macchina " "virtuale diversa ({virtual_machine})." -#: virtualization/models/virtualmachines.py:422 +#: netbox/virtualization/models/virtualmachines.py:422 #, python-brace-format msgid "" "The untagged VLAN ({untagged_vlan}) must belong to the same site as the " @@ -14900,394 +15724,417 @@ msgstr "" "La VLAN senza tag ({untagged_vlan}) deve appartenere allo stesso sito della " "macchina virtuale principale dell'interfaccia o deve essere globale." -#: virtualization/models/virtualmachines.py:434 +#: netbox/virtualization/models/virtualmachines.py:434 msgid "size (MB)" msgstr "dimensione (MB)" -#: virtualization/models/virtualmachines.py:438 +#: netbox/virtualization/models/virtualmachines.py:438 msgid "virtual disk" msgstr "disco virtuale" -#: virtualization/models/virtualmachines.py:439 +#: netbox/virtualization/models/virtualmachines.py:439 msgid "virtual disks" msgstr "dischi virtuali" -#: virtualization/views.py:275 +#: netbox/virtualization/views.py:273 #, python-brace-format msgid "Added {count} devices to cluster {cluster}" msgstr "Aggiunto {count} dispositivi da raggruppare {cluster}" -#: virtualization/views.py:310 +#: netbox/virtualization/views.py:308 #, python-brace-format msgid "Removed {count} devices from cluster {cluster}" msgstr "Rimosso {count} dispositivi dal cluster {cluster}" -#: vpn/choices.py:31 +#: netbox/vpn/choices.py:35 msgid "IPsec - Transport" msgstr "IPSec - Trasporto" -#: vpn/choices.py:32 +#: netbox/vpn/choices.py:36 msgid "IPsec - Tunnel" msgstr "IPSec - Tunnel" -#: vpn/choices.py:33 +#: netbox/vpn/choices.py:37 msgid "IP-in-IP" msgstr "IP in IP" -#: vpn/choices.py:34 +#: netbox/vpn/choices.py:38 msgid "GRE" msgstr "GRE" -#: vpn/choices.py:56 +#: netbox/vpn/choices.py:39 +msgid "WireGuard" +msgstr "" + +#: netbox/vpn/choices.py:40 +msgid "OpenVPN" +msgstr "" + +#: netbox/vpn/choices.py:41 +msgid "L2TP" +msgstr "" + +#: netbox/vpn/choices.py:42 +msgid "PPTP" +msgstr "" + +#: netbox/vpn/choices.py:64 msgid "Hub" msgstr "Hub" -#: vpn/choices.py:57 +#: netbox/vpn/choices.py:65 msgid "Spoke" msgstr "Ha parlato" -#: vpn/choices.py:80 +#: netbox/vpn/choices.py:88 msgid "Aggressive" msgstr "Agressivo" -#: vpn/choices.py:81 +#: netbox/vpn/choices.py:89 msgid "Main" msgstr "Principale" -#: vpn/choices.py:92 +#: netbox/vpn/choices.py:100 msgid "Pre-shared keys" msgstr "Chiavi precondivise" -#: vpn/choices.py:93 +#: netbox/vpn/choices.py:101 msgid "Certificates" msgstr "Certificati" -#: vpn/choices.py:94 +#: netbox/vpn/choices.py:102 msgid "RSA signatures" msgstr "Firme RSA" -#: vpn/choices.py:95 +#: netbox/vpn/choices.py:103 msgid "DSA signatures" msgstr "Firme DSA" -#: vpn/choices.py:178 vpn/choices.py:179 vpn/choices.py:180 vpn/choices.py:181 -#: vpn/choices.py:182 vpn/choices.py:183 vpn/choices.py:184 vpn/choices.py:185 -#: vpn/choices.py:186 vpn/choices.py:187 vpn/choices.py:188 vpn/choices.py:189 -#: vpn/choices.py:190 vpn/choices.py:191 vpn/choices.py:192 vpn/choices.py:193 -#: vpn/choices.py:194 vpn/choices.py:195 vpn/choices.py:196 vpn/choices.py:197 -#: vpn/choices.py:198 vpn/choices.py:199 vpn/choices.py:200 vpn/choices.py:201 +#: netbox/vpn/choices.py:186 netbox/vpn/choices.py:187 +#: netbox/vpn/choices.py:188 netbox/vpn/choices.py:189 +#: netbox/vpn/choices.py:190 netbox/vpn/choices.py:191 +#: netbox/vpn/choices.py:192 netbox/vpn/choices.py:193 +#: netbox/vpn/choices.py:194 netbox/vpn/choices.py:195 +#: netbox/vpn/choices.py:196 netbox/vpn/choices.py:197 +#: netbox/vpn/choices.py:198 netbox/vpn/choices.py:199 +#: netbox/vpn/choices.py:200 netbox/vpn/choices.py:201 +#: netbox/vpn/choices.py:202 netbox/vpn/choices.py:203 +#: netbox/vpn/choices.py:204 netbox/vpn/choices.py:205 +#: netbox/vpn/choices.py:206 netbox/vpn/choices.py:207 +#: netbox/vpn/choices.py:208 netbox/vpn/choices.py:209 #, python-brace-format msgid "Group {n}" msgstr "Gruppo {n}" -#: vpn/choices.py:243 +#: netbox/vpn/choices.py:251 msgid "Ethernet Private LAN" msgstr "LAN privata Ethernet" -#: vpn/choices.py:244 +#: netbox/vpn/choices.py:252 msgid "Ethernet Virtual Private LAN" msgstr "LAN privata virtuale Ethernet" -#: vpn/choices.py:247 +#: netbox/vpn/choices.py:255 msgid "Ethernet Private Tree" msgstr "Albero privato Ethernet" -#: vpn/choices.py:248 +#: netbox/vpn/choices.py:256 msgid "Ethernet Virtual Private Tree" msgstr "Albero privato virtuale Ethernet" -#: vpn/filtersets.py:41 +#: netbox/vpn/filtersets.py:41 msgid "Tunnel group (ID)" msgstr "Gruppo Tunnel (ID)" -#: vpn/filtersets.py:47 +#: netbox/vpn/filtersets.py:47 msgid "Tunnel group (slug)" msgstr "Gruppo tunnel (slug)" -#: vpn/filtersets.py:54 +#: netbox/vpn/filtersets.py:54 msgid "IPSec profile (ID)" msgstr "Profilo IPSec (ID)" -#: vpn/filtersets.py:60 +#: netbox/vpn/filtersets.py:60 msgid "IPSec profile (name)" msgstr "Profilo IPSec (nome)" -#: vpn/filtersets.py:81 +#: netbox/vpn/filtersets.py:81 msgid "Tunnel (ID)" msgstr "Tunnel (ID)" -#: vpn/filtersets.py:87 +#: netbox/vpn/filtersets.py:87 msgid "Tunnel (name)" msgstr "Tunnel (nome)" -#: vpn/filtersets.py:118 +#: netbox/vpn/filtersets.py:118 msgid "Outside IP (ID)" msgstr "IP esterno (ID)" -#: vpn/filtersets.py:130 vpn/filtersets.py:263 +#: netbox/vpn/filtersets.py:130 netbox/vpn/filtersets.py:263 msgid "IKE policy (ID)" msgstr "Politica IKE (ID)" -#: vpn/filtersets.py:136 vpn/filtersets.py:269 +#: netbox/vpn/filtersets.py:136 netbox/vpn/filtersets.py:269 msgid "IKE policy (name)" msgstr "Politica IKE (nome)" -#: vpn/filtersets.py:200 vpn/filtersets.py:273 +#: netbox/vpn/filtersets.py:200 netbox/vpn/filtersets.py:273 msgid "IPSec policy (ID)" msgstr "Politica IPSec (ID)" -#: vpn/filtersets.py:206 vpn/filtersets.py:279 +#: netbox/vpn/filtersets.py:206 netbox/vpn/filtersets.py:279 msgid "IPSec policy (name)" msgstr "Politica IPSec (nome)" -#: vpn/filtersets.py:348 +#: netbox/vpn/filtersets.py:348 msgid "L2VPN (slug)" msgstr "L2VPN (slug)" -#: vpn/filtersets.py:412 +#: netbox/vpn/filtersets.py:412 msgid "VM Interface (ID)" msgstr "Interfaccia VM (ID)" -#: vpn/filtersets.py:418 +#: netbox/vpn/filtersets.py:418 msgid "VLAN (name)" msgstr "VLAN (nome)" -#: vpn/forms/bulk_edit.py:45 vpn/forms/bulk_import.py:42 -#: vpn/forms/filtersets.py:54 +#: netbox/vpn/forms/bulk_edit.py:45 netbox/vpn/forms/bulk_import.py:42 +#: netbox/vpn/forms/filtersets.py:54 msgid "Tunnel group" msgstr "Gruppo Tunnel" -#: vpn/forms/bulk_edit.py:117 vpn/models/crypto.py:47 +#: netbox/vpn/forms/bulk_edit.py:117 netbox/vpn/models/crypto.py:47 msgid "SA lifetime" msgstr "Una vita" -#: vpn/forms/bulk_edit.py:151 wireless/forms/bulk_edit.py:79 -#: wireless/forms/bulk_edit.py:126 wireless/forms/filtersets.py:64 -#: wireless/forms/filtersets.py:98 +#: netbox/vpn/forms/bulk_edit.py:151 netbox/wireless/forms/bulk_edit.py:79 +#: netbox/wireless/forms/bulk_edit.py:126 +#: netbox/wireless/forms/filtersets.py:64 +#: netbox/wireless/forms/filtersets.py:98 msgid "Pre-shared key" msgstr "Chiave precondivisa" -#: vpn/forms/bulk_edit.py:237 vpn/forms/bulk_import.py:239 -#: vpn/forms/filtersets.py:199 vpn/forms/model_forms.py:370 -#: vpn/models/crypto.py:104 +#: netbox/vpn/forms/bulk_edit.py:237 netbox/vpn/forms/bulk_import.py:239 +#: netbox/vpn/forms/filtersets.py:199 netbox/vpn/forms/model_forms.py:370 +#: netbox/vpn/models/crypto.py:104 msgid "IKE policy" msgstr "Politica IKE" -#: vpn/forms/bulk_edit.py:242 vpn/forms/bulk_import.py:244 -#: vpn/forms/filtersets.py:204 vpn/forms/model_forms.py:374 -#: vpn/models/crypto.py:209 +#: netbox/vpn/forms/bulk_edit.py:242 netbox/vpn/forms/bulk_import.py:244 +#: netbox/vpn/forms/filtersets.py:204 netbox/vpn/forms/model_forms.py:374 +#: netbox/vpn/models/crypto.py:209 msgid "IPSec policy" msgstr "Politica IPSec" -#: vpn/forms/bulk_import.py:50 +#: netbox/vpn/forms/bulk_import.py:50 msgid "Tunnel encapsulation" msgstr "Incapsulamento del tunnel" -#: vpn/forms/bulk_import.py:83 +#: netbox/vpn/forms/bulk_import.py:83 msgid "Operational role" msgstr "Ruolo operativo" -#: vpn/forms/bulk_import.py:90 +#: netbox/vpn/forms/bulk_import.py:90 msgid "Parent device of assigned interface" msgstr "Dispositivo principale dell'interfaccia assegnata" -#: vpn/forms/bulk_import.py:97 +#: netbox/vpn/forms/bulk_import.py:97 msgid "Parent VM of assigned interface" msgstr "VM principale dell'interfaccia assegnata" -#: vpn/forms/bulk_import.py:104 +#: netbox/vpn/forms/bulk_import.py:104 msgid "Device or virtual machine interface" msgstr "Interfaccia dispositivo o macchina virtuale" -#: vpn/forms/bulk_import.py:183 +#: netbox/vpn/forms/bulk_import.py:183 msgid "IKE proposal(s)" msgstr "IKE proposal(s)" -#: vpn/forms/bulk_import.py:215 vpn/models/crypto.py:197 +#: netbox/vpn/forms/bulk_import.py:215 netbox/vpn/models/crypto.py:197 msgid "Diffie-Hellman group for Perfect Forward Secrecy" msgstr "Gruppo Diffie-Hellman per Perfect Forward Secrecy" -#: vpn/forms/bulk_import.py:222 +#: netbox/vpn/forms/bulk_import.py:222 msgid "IPSec proposal(s)" msgstr "IPSec proposal(s)" -#: vpn/forms/bulk_import.py:236 +#: netbox/vpn/forms/bulk_import.py:236 msgid "IPSec protocol" msgstr "Protocollo IPSec" -#: vpn/forms/bulk_import.py:266 +#: netbox/vpn/forms/bulk_import.py:266 msgid "L2VPN type" msgstr "Tipo L2VPN" -#: vpn/forms/bulk_import.py:287 +#: netbox/vpn/forms/bulk_import.py:287 msgid "Parent device (for interface)" msgstr "Dispositivo principale (per interfaccia)" -#: vpn/forms/bulk_import.py:294 +#: netbox/vpn/forms/bulk_import.py:294 msgid "Parent virtual machine (for interface)" msgstr "Macchina virtuale principale (per interfaccia)" -#: vpn/forms/bulk_import.py:301 +#: netbox/vpn/forms/bulk_import.py:301 msgid "Assigned interface (device or VM)" msgstr "Interfaccia assegnata (dispositivo o VM)" -#: vpn/forms/bulk_import.py:334 +#: netbox/vpn/forms/bulk_import.py:334 msgid "Cannot import device and VM interface terminations simultaneously." msgstr "" "Non è possibile importare contemporaneamente le terminazioni del dispositivo" " e dell'interfaccia VM." -#: vpn/forms/bulk_import.py:336 +#: netbox/vpn/forms/bulk_import.py:336 msgid "Each termination must specify either an interface or a VLAN." msgstr "Ogni terminazione deve specificare un'interfaccia o una VLAN." -#: vpn/forms/bulk_import.py:338 +#: netbox/vpn/forms/bulk_import.py:338 msgid "Cannot assign both an interface and a VLAN." msgstr "Non è possibile assegnare sia un'interfaccia che una VLAN." -#: vpn/forms/filtersets.py:130 +#: netbox/vpn/forms/filtersets.py:130 msgid "IKE version" msgstr "Versione IKE" -#: vpn/forms/filtersets.py:142 vpn/forms/filtersets.py:175 -#: vpn/forms/model_forms.py:298 vpn/forms/model_forms.py:334 +#: netbox/vpn/forms/filtersets.py:142 netbox/vpn/forms/filtersets.py:175 +#: netbox/vpn/forms/model_forms.py:298 netbox/vpn/forms/model_forms.py:334 msgid "Proposal" msgstr "Proposta" -#: vpn/forms/filtersets.py:251 +#: netbox/vpn/forms/filtersets.py:251 msgid "Assigned Object Type" msgstr "Tipo di oggetto assegnato" -#: vpn/forms/model_forms.py:95 vpn/forms/model_forms.py:130 -#: vpn/forms/model_forms.py:240 vpn/tables/tunnels.py:91 +#: netbox/vpn/forms/model_forms.py:95 netbox/vpn/forms/model_forms.py:130 +#: netbox/vpn/forms/model_forms.py:240 netbox/vpn/tables/tunnels.py:91 msgid "Tunnel interface" msgstr "Interfaccia tunnel" -#: vpn/forms/model_forms.py:150 +#: netbox/vpn/forms/model_forms.py:150 msgid "First Termination" msgstr "Prima cessazione" -#: vpn/forms/model_forms.py:153 +#: netbox/vpn/forms/model_forms.py:153 msgid "Second Termination" msgstr "Seconda cessazione" -#: vpn/forms/model_forms.py:197 +#: netbox/vpn/forms/model_forms.py:197 msgid "This parameter is required when defining a termination." msgstr "Questo parametro è obbligatorio per definire una terminazione." -#: vpn/forms/model_forms.py:320 vpn/forms/model_forms.py:356 +#: netbox/vpn/forms/model_forms.py:320 netbox/vpn/forms/model_forms.py:356 msgid "Policy" msgstr "Politica" -#: vpn/forms/model_forms.py:487 +#: netbox/vpn/forms/model_forms.py:487 msgid "A termination must specify an interface or VLAN." msgstr "Una terminazione deve specificare un'interfaccia o una VLAN." -#: vpn/forms/model_forms.py:489 +#: netbox/vpn/forms/model_forms.py:489 msgid "" "A termination can only have one terminating object (an interface or VLAN)." msgstr "" "Una terminazione può avere un solo oggetto di terminazione (un'interfaccia o" " VLAN)." -#: vpn/models/crypto.py:33 +#: netbox/vpn/models/crypto.py:33 msgid "encryption algorithm" msgstr "algoritmo di crittografia" -#: vpn/models/crypto.py:37 +#: netbox/vpn/models/crypto.py:37 msgid "authentication algorithm" msgstr "algoritmo di autenticazione" -#: vpn/models/crypto.py:44 +#: netbox/vpn/models/crypto.py:44 msgid "Diffie-Hellman group ID" msgstr "ID del gruppo Diffie-Hellman" -#: vpn/models/crypto.py:50 +#: netbox/vpn/models/crypto.py:50 msgid "Security association lifetime (in seconds)" msgstr "Durata dell'associazione di sicurezza (in secondi)" -#: vpn/models/crypto.py:59 +#: netbox/vpn/models/crypto.py:59 msgid "IKE proposal" msgstr "Proposta IKE" -#: vpn/models/crypto.py:60 +#: netbox/vpn/models/crypto.py:60 msgid "IKE proposals" msgstr "Proposte IKE" -#: vpn/models/crypto.py:76 +#: netbox/vpn/models/crypto.py:76 msgid "version" msgstr "versione" -#: vpn/models/crypto.py:88 vpn/models/crypto.py:190 +#: netbox/vpn/models/crypto.py:88 netbox/vpn/models/crypto.py:190 msgid "proposals" msgstr "proposte" -#: vpn/models/crypto.py:91 wireless/models.py:39 +#: netbox/vpn/models/crypto.py:91 netbox/wireless/models.py:39 msgid "pre-shared key" msgstr "chiave precondivisa" -#: vpn/models/crypto.py:105 +#: netbox/vpn/models/crypto.py:105 msgid "IKE policies" msgstr "Politiche IKE" -#: vpn/models/crypto.py:118 +#: netbox/vpn/models/crypto.py:118 msgid "Mode is required for selected IKE version" msgstr "La modalità è richiesta per la versione IKE selezionata" -#: vpn/models/crypto.py:122 +#: netbox/vpn/models/crypto.py:122 msgid "Mode cannot be used for selected IKE version" msgstr "La modalità non può essere utilizzata per la versione IKE selezionata" -#: vpn/models/crypto.py:136 +#: netbox/vpn/models/crypto.py:136 msgid "encryption" msgstr "cifratura" -#: vpn/models/crypto.py:141 +#: netbox/vpn/models/crypto.py:141 msgid "authentication" msgstr "autenticazione" -#: vpn/models/crypto.py:149 +#: netbox/vpn/models/crypto.py:149 msgid "Security association lifetime (seconds)" msgstr "Durata dell'associazione di sicurezza (secondi)" -#: vpn/models/crypto.py:155 +#: netbox/vpn/models/crypto.py:155 msgid "Security association lifetime (in kilobytes)" msgstr "Durata dell'associazione di sicurezza (in kilobyte)" -#: vpn/models/crypto.py:164 +#: netbox/vpn/models/crypto.py:164 msgid "IPSec proposal" msgstr "Proposta IPSec" -#: vpn/models/crypto.py:165 +#: netbox/vpn/models/crypto.py:165 msgid "IPSec proposals" msgstr "Proposte IPSec" -#: vpn/models/crypto.py:178 +#: netbox/vpn/models/crypto.py:178 msgid "Encryption and/or authentication algorithm must be defined" msgstr "È necessario definire un algoritmo di crittografia e/o autenticazione" -#: vpn/models/crypto.py:210 +#: netbox/vpn/models/crypto.py:210 msgid "IPSec policies" msgstr "Criteri IPSec" -#: vpn/models/crypto.py:251 +#: netbox/vpn/models/crypto.py:251 msgid "IPSec profiles" msgstr "Profili IPSec" -#: vpn/models/l2vpn.py:116 +#: netbox/vpn/models/l2vpn.py:116 msgid "L2VPN termination" msgstr "Terminazione L2VPN" -#: vpn/models/l2vpn.py:117 +#: netbox/vpn/models/l2vpn.py:117 msgid "L2VPN terminations" msgstr "Terminazioni L2VPN" -#: vpn/models/l2vpn.py:135 +#: netbox/vpn/models/l2vpn.py:135 #, python-brace-format msgid "L2VPN Termination already assigned ({assigned_object})" msgstr "Terminazione L2VPN già assegnata ({assigned_object})" -#: vpn/models/l2vpn.py:147 +#: netbox/vpn/models/l2vpn.py:147 #, python-brace-format msgid "" "{l2vpn_type} L2VPNs cannot have more than two terminations; found " @@ -15296,187 +16143,195 @@ msgstr "" "{l2vpn_type} Le L2VPN non possono avere più di due terminazioni; trovato " "{terminations_count} già definito." -#: vpn/models/tunnels.py:26 +#: netbox/vpn/models/tunnels.py:26 msgid "tunnel group" msgstr "gruppo tunnel" -#: vpn/models/tunnels.py:27 +#: netbox/vpn/models/tunnels.py:27 msgid "tunnel groups" msgstr "gruppi di tunnel" -#: vpn/models/tunnels.py:53 +#: netbox/vpn/models/tunnels.py:53 msgid "encapsulation" msgstr "incapsulamento" -#: vpn/models/tunnels.py:72 +#: netbox/vpn/models/tunnels.py:72 msgid "tunnel ID" msgstr "ID del tunnel" -#: vpn/models/tunnels.py:94 +#: netbox/vpn/models/tunnels.py:94 msgid "tunnel" msgstr "tunnel" -#: vpn/models/tunnels.py:95 +#: netbox/vpn/models/tunnels.py:95 msgid "tunnels" msgstr "tunnels" -#: vpn/models/tunnels.py:153 +#: netbox/vpn/models/tunnels.py:153 msgid "An object may be terminated to only one tunnel at a time." msgstr "Un oggetto può terminare in un solo tunnel alla volta." -#: vpn/models/tunnels.py:156 +#: netbox/vpn/models/tunnels.py:156 msgid "tunnel termination" msgstr "terminazione del tunnel" -#: vpn/models/tunnels.py:157 +#: netbox/vpn/models/tunnels.py:157 msgid "tunnel terminations" msgstr "terminazioni dei tunnel" -#: vpn/models/tunnels.py:174 +#: netbox/vpn/models/tunnels.py:174 #, python-brace-format msgid "{name} is already attached to a tunnel ({tunnel})." msgstr "{name} è già collegato a un tunnel ({tunnel})." -#: vpn/tables/crypto.py:22 +#: netbox/vpn/tables/crypto.py:22 msgid "Authentication Method" msgstr "Metodo di autenticazione" -#: vpn/tables/crypto.py:25 vpn/tables/crypto.py:97 +#: netbox/vpn/tables/crypto.py:25 netbox/vpn/tables/crypto.py:97 msgid "Encryption Algorithm" msgstr "Algoritmo di crittografia" -#: vpn/tables/crypto.py:28 vpn/tables/crypto.py:100 +#: netbox/vpn/tables/crypto.py:28 netbox/vpn/tables/crypto.py:100 msgid "Authentication Algorithm" msgstr "Algoritmo di autenticazione" -#: vpn/tables/crypto.py:34 +#: netbox/vpn/tables/crypto.py:34 msgid "SA Lifetime" msgstr "SA Lifetime" -#: vpn/tables/crypto.py:71 +#: netbox/vpn/tables/crypto.py:71 msgid "Pre-shared Key" msgstr "Pre-shared Key" -#: vpn/tables/crypto.py:103 +#: netbox/vpn/tables/crypto.py:103 msgid "SA Lifetime (Seconds)" msgstr "Durata SA (secondi)" -#: vpn/tables/crypto.py:106 +#: netbox/vpn/tables/crypto.py:106 msgid "SA Lifetime (KB)" msgstr "SA Lifetime (KB)" -#: vpn/tables/l2vpn.py:69 +#: netbox/vpn/tables/l2vpn.py:69 msgid "Object Parent" msgstr "Genitore dell'oggetto" -#: vpn/tables/l2vpn.py:74 +#: netbox/vpn/tables/l2vpn.py:74 msgid "Object Site" msgstr "Sito oggetto" -#: wireless/choices.py:11 +#: netbox/wireless/choices.py:11 msgid "Access point" msgstr "Punto di accesso" -#: wireless/choices.py:12 +#: netbox/wireless/choices.py:12 msgid "Station" msgstr "Stazione" -#: wireless/choices.py:467 +#: netbox/wireless/choices.py:467 msgid "Open" msgstr "Aperta" -#: wireless/choices.py:469 +#: netbox/wireless/choices.py:469 msgid "WPA Personal (PSK)" msgstr "WPA personal (PSK)" -#: wireless/choices.py:470 +#: netbox/wireless/choices.py:470 msgid "WPA Enterprise" msgstr "WPA Enterprise" -#: wireless/forms/bulk_edit.py:73 wireless/forms/bulk_edit.py:120 -#: wireless/forms/bulk_import.py:68 wireless/forms/bulk_import.py:71 -#: wireless/forms/bulk_import.py:110 wireless/forms/bulk_import.py:113 -#: wireless/forms/filtersets.py:59 wireless/forms/filtersets.py:93 +#: netbox/wireless/forms/bulk_edit.py:73 +#: netbox/wireless/forms/bulk_edit.py:120 +#: netbox/wireless/forms/bulk_import.py:68 +#: netbox/wireless/forms/bulk_import.py:71 +#: netbox/wireless/forms/bulk_import.py:110 +#: netbox/wireless/forms/bulk_import.py:113 +#: netbox/wireless/forms/filtersets.py:59 +#: netbox/wireless/forms/filtersets.py:93 msgid "Authentication cipher" msgstr "Cifrario di autenticazione" -#: wireless/forms/bulk_edit.py:134 wireless/forms/bulk_import.py:116 -#: wireless/forms/bulk_import.py:119 wireless/forms/filtersets.py:106 +#: 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" -#: wireless/forms/bulk_import.py:52 +#: netbox/wireless/forms/bulk_import.py:52 msgid "Bridged VLAN" msgstr "VLAN con bridge" -#: wireless/forms/bulk_import.py:89 wireless/tables/wirelesslink.py:28 +#: netbox/wireless/forms/bulk_import.py:89 +#: netbox/wireless/tables/wirelesslink.py:28 msgid "Interface A" msgstr "Interfaccia A" -#: wireless/forms/bulk_import.py:93 wireless/tables/wirelesslink.py:37 +#: netbox/wireless/forms/bulk_import.py:93 +#: netbox/wireless/tables/wirelesslink.py:37 msgid "Interface B" msgstr "Interfaccia B" -#: wireless/forms/model_forms.py:161 +#: netbox/wireless/forms/model_forms.py:161 msgid "Side B" msgstr "Lato B" -#: wireless/models.py:31 +#: netbox/wireless/models.py:31 msgid "authentication cipher" msgstr "cifrario di autenticazione" -#: wireless/models.py:69 +#: netbox/wireless/models.py:69 msgid "wireless LAN group" msgstr "gruppo LAN wireless" -#: wireless/models.py:70 +#: netbox/wireless/models.py:70 msgid "wireless LAN groups" msgstr "gruppi LAN wireless" -#: wireless/models.py:116 +#: netbox/wireless/models.py:116 msgid "wireless LAN" msgstr "LAN senza fili" -#: wireless/models.py:144 +#: netbox/wireless/models.py:144 msgid "interface A" msgstr "interfaccia A" -#: wireless/models.py:151 +#: netbox/wireless/models.py:151 msgid "interface B" msgstr "interfaccia B" -#: wireless/models.py:165 +#: netbox/wireless/models.py:165 msgid "distance" msgstr "distanza" -#: wireless/models.py:172 +#: netbox/wireless/models.py:172 msgid "distance unit" msgstr "unità di distanza" -#: wireless/models.py:219 +#: netbox/wireless/models.py:219 msgid "wireless link" msgstr "collegamento wireless" -#: wireless/models.py:220 +#: netbox/wireless/models.py:220 msgid "wireless links" msgstr "collegamenti wireless" -#: wireless/models.py:236 +#: netbox/wireless/models.py:236 msgid "Must specify a unit when setting a wireless distance" msgstr "" "È necessario specificare un'unità quando si imposta una distanza wireless" -#: wireless/models.py:242 wireless/models.py:248 +#: netbox/wireless/models.py:242 netbox/wireless/models.py:248 #, python-brace-format msgid "{type} is not a wireless interface." msgstr "{type} non è un'interfaccia wireless." -#: wireless/utils.py:16 +#: netbox/wireless/utils.py:16 #, python-brace-format msgid "Invalid channel value: {channel}" msgstr "Valore del canale non valido: {channel}" -#: wireless/utils.py:26 +#: netbox/wireless/utils.py:26 #, python-brace-format msgid "Invalid channel attribute: {name}" msgstr "Attributo del canale non valido: {name}" diff --git a/netbox/translations/ja/LC_MESSAGES/django.mo b/netbox/translations/ja/LC_MESSAGES/django.mo index db3175091..c7b76e8cb 100644 Binary files a/netbox/translations/ja/LC_MESSAGES/django.mo and b/netbox/translations/ja/LC_MESSAGES/django.mo differ diff --git a/netbox/translations/ja/LC_MESSAGES/django.po b/netbox/translations/ja/LC_MESSAGES/django.po index b86f59030..e91bc4e2c 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 -# teapot, 2024 # Jeremy Stretch, 2024 +# teapot, 2024 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-10-28 19:20+0000\n" +"POT-Creation-Date: 2024-12-13 05:02+0000\n" "PO-Revision-Date: 2023-10-30 17:48+0000\n" -"Last-Translator: Jeremy Stretch, 2024\n" +"Last-Translator: teapot, 2024\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" @@ -23,4177 +23,4610 @@ msgstr "" "Language: ja\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: account/tables.py:27 templates/account/token.html:22 -#: templates/users/token.html:17 users/forms/bulk_import.py:39 -#: users/forms/model_forms.py:112 +#: netbox/account/tables.py:27 netbox/templates/account/token.html:22 +#: netbox/templates/users/token.html:17 netbox/users/forms/bulk_import.py:39 +#: netbox/users/forms/model_forms.py:112 msgid "Key" msgstr "Key" -#: account/tables.py:31 users/forms/filtersets.py:132 +#: netbox/account/tables.py:31 netbox/users/forms/filtersets.py:132 msgid "Write Enabled" msgstr "書き込み可能" -#: account/tables.py:35 core/choices.py:86 core/tables/jobs.py:29 -#: core/tables/tasks.py:79 extras/tables/tables.py:335 -#: extras/tables/tables.py:566 templates/account/token.html:43 -#: templates/core/configrevision.html:26 -#: templates/core/configrevision_restore.html:12 templates/core/job.html:69 -#: templates/core/rq_task.html:16 templates/core/rq_task.html:73 -#: templates/core/rq_worker.html:14 -#: templates/extras/htmx/script_result.html:12 -#: templates/extras/journalentry.html:22 templates/generic/object.html:58 -#: templates/users/token.html:35 +#: netbox/account/tables.py:35 netbox/core/choices.py:86 +#: 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 +#: netbox/templates/core/configrevision.html:26 +#: netbox/templates/core/configrevision_restore.html:12 +#: netbox/templates/core/job.html:69 netbox/templates/core/rq_task.html:16 +#: netbox/templates/core/rq_task.html:73 +#: netbox/templates/core/rq_worker.html:14 +#: netbox/templates/extras/htmx/script_result.html:12 +#: netbox/templates/extras/journalentry.html:22 +#: netbox/templates/generic/object.html:58 +#: netbox/templates/users/token.html:35 msgid "Created" msgstr "作成" -#: account/tables.py:39 templates/account/token.html:47 -#: templates/users/token.html:39 users/forms/bulk_edit.py:117 -#: users/forms/filtersets.py:136 +#: netbox/account/tables.py:39 netbox/templates/account/token.html:47 +#: netbox/templates/users/token.html:39 netbox/users/forms/bulk_edit.py:117 +#: netbox/users/forms/filtersets.py:136 msgid "Expires" msgstr "有効期限" -#: account/tables.py:42 users/forms/filtersets.py:141 +#: netbox/account/tables.py:42 netbox/users/forms/filtersets.py:141 msgid "Last Used" msgstr "最終使用日" -#: account/tables.py:45 templates/account/token.html:55 -#: templates/users/token.html:47 users/forms/bulk_edit.py:122 -#: users/forms/model_forms.py:124 +#: netbox/account/tables.py:45 netbox/templates/account/token.html:55 +#: netbox/templates/users/token.html:47 netbox/users/forms/bulk_edit.py:122 +#: netbox/users/forms/model_forms.py:124 msgid "Allowed IPs" msgstr "許可された IP" -#: account/views.py:114 +#: netbox/account/views.py:114 #, python-brace-format msgid "Logged in as {user}." msgstr "としてログイン {user}。" -#: account/views.py:164 +#: netbox/account/views.py:164 msgid "You have logged out." msgstr "ログアウトしました。" -#: account/views.py:216 +#: netbox/account/views.py:216 msgid "Your preferences have been updated." msgstr "設定が更新されました。" -#: account/views.py:239 +#: netbox/account/views.py:239 msgid "LDAP-authenticated user credentials cannot be changed within NetBox." msgstr "LDAP認証されたユーザー資格情報は、NetBox内で変更することはできません。" -#: account/views.py:254 +#: netbox/account/views.py:254 msgid "Your password has been changed successfully." msgstr "パスワードは正常に変更されました。" -#: circuits/choices.py:21 dcim/choices.py:20 dcim/choices.py:102 -#: dcim/choices.py:185 dcim/choices.py:237 dcim/choices.py:1530 -#: dcim/choices.py:1606 dcim/choices.py:1656 virtualization/choices.py:20 -#: virtualization/choices.py:45 vpn/choices.py:18 +#: netbox/circuits/choices.py:21 netbox/dcim/choices.py:20 +#: netbox/dcim/choices.py:102 netbox/dcim/choices.py: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 msgid "Planned" msgstr "計画中" -#: circuits/choices.py:22 netbox/navigation/menu.py:305 +#: netbox/circuits/choices.py:22 netbox/netbox/navigation/menu.py:305 msgid "Provisioning" msgstr "プロビジョニング" -#: circuits/choices.py:23 core/tables/tasks.py:22 dcim/choices.py:22 -#: dcim/choices.py:103 dcim/choices.py:184 dcim/choices.py:236 -#: dcim/choices.py:1605 dcim/choices.py:1655 extras/tables/tables.py:495 -#: ipam/choices.py:31 ipam/choices.py:49 ipam/choices.py:69 -#: ipam/choices.py:154 templates/extras/configcontext.html:25 -#: templates/users/user.html:37 users/forms/bulk_edit.py:38 -#: virtualization/choices.py:22 virtualization/choices.py:44 vpn/choices.py:19 -#: wireless/choices.py:25 +#: netbox/circuits/choices.py:23 netbox/core/tables/tasks.py:22 +#: netbox/dcim/choices.py:22 netbox/dcim/choices.py:103 +#: netbox/dcim/choices.py: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/templates/users/user.html:37 netbox/users/forms/bulk_edit.py:38 +#: netbox/virtualization/choices.py:22 netbox/virtualization/choices.py:44 +#: netbox/vpn/choices.py:19 netbox/wireless/choices.py:25 msgid "Active" msgstr "アクティブ" -#: circuits/choices.py:24 dcim/choices.py:183 dcim/choices.py:235 -#: dcim/choices.py:1604 dcim/choices.py:1657 virtualization/choices.py:24 -#: virtualization/choices.py:43 +#: 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 msgid "Offline" msgstr "オフライン" -#: circuits/choices.py:25 +#: netbox/circuits/choices.py:25 msgid "Deprovisioning" msgstr "デプロビジョニング" -#: circuits/choices.py:26 +#: netbox/circuits/choices.py:26 msgid "Decommissioned" msgstr "廃止" -#: circuits/choices.py:90 dcim/choices.py:1617 tenancy/choices.py:17 +#: netbox/circuits/choices.py:90 netbox/dcim/choices.py:1619 +#: netbox/tenancy/choices.py:17 msgid "Primary" msgstr "プライマリ" -#: circuits/choices.py:91 ipam/choices.py:90 tenancy/choices.py:18 +#: netbox/circuits/choices.py:91 netbox/ipam/choices.py:90 +#: netbox/tenancy/choices.py:18 msgid "Secondary" msgstr "セカンダリ" -#: circuits/choices.py:92 tenancy/choices.py:19 +#: netbox/circuits/choices.py:92 netbox/tenancy/choices.py:19 msgid "Tertiary" msgstr "三次" -#: circuits/choices.py:93 tenancy/choices.py:20 +#: netbox/circuits/choices.py:93 netbox/tenancy/choices.py:20 msgid "Inactive" msgstr "非アクティブ" -#: circuits/filtersets.py:31 circuits/filtersets.py:198 dcim/filtersets.py:98 -#: dcim/filtersets.py:152 dcim/filtersets.py:212 dcim/filtersets.py:333 -#: dcim/filtersets.py:464 dcim/filtersets.py:1021 dcim/filtersets.py:1368 -#: dcim/filtersets.py:1903 dcim/filtersets.py:2146 dcim/filtersets.py:2204 -#: ipam/filtersets.py:339 ipam/filtersets.py:959 -#: virtualization/filtersets.py:45 virtualization/filtersets.py:173 -#: vpn/filtersets.py:358 +#: 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 msgid "Region (ID)" msgstr "リージョン (ID)" -#: circuits/filtersets.py:38 circuits/filtersets.py:205 dcim/filtersets.py:105 -#: dcim/filtersets.py:158 dcim/filtersets.py:219 dcim/filtersets.py:340 -#: dcim/filtersets.py:471 dcim/filtersets.py:1028 dcim/filtersets.py:1375 -#: dcim/filtersets.py:1910 dcim/filtersets.py:2153 dcim/filtersets.py:2211 -#: extras/filtersets.py:509 ipam/filtersets.py:346 ipam/filtersets.py:966 -#: virtualization/filtersets.py:52 virtualization/filtersets.py:180 -#: vpn/filtersets.py:353 +#: 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 msgid "Region (slug)" msgstr "リージョン (slug)" -#: circuits/filtersets.py:44 circuits/filtersets.py:211 dcim/filtersets.py:128 -#: dcim/filtersets.py:225 dcim/filtersets.py:346 dcim/filtersets.py:477 -#: dcim/filtersets.py:1034 dcim/filtersets.py:1381 dcim/filtersets.py:1916 -#: dcim/filtersets.py:2159 dcim/filtersets.py:2217 ipam/filtersets.py:352 -#: ipam/filtersets.py:972 virtualization/filtersets.py:58 -#: virtualization/filtersets.py:186 +#: 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 msgid "Site group (ID)" msgstr "サイトグループ (ID)" -#: circuits/filtersets.py:51 circuits/filtersets.py:218 dcim/filtersets.py:135 -#: dcim/filtersets.py:232 dcim/filtersets.py:353 dcim/filtersets.py:484 -#: dcim/filtersets.py:1041 dcim/filtersets.py:1388 dcim/filtersets.py:1923 -#: dcim/filtersets.py:2166 dcim/filtersets.py:2224 extras/filtersets.py:515 -#: ipam/filtersets.py:359 ipam/filtersets.py:979 -#: virtualization/filtersets.py:65 virtualization/filtersets.py:193 +#: 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 msgid "Site group (slug)" msgstr "サイトグループ (slug)" -#: circuits/filtersets.py:56 circuits/forms/bulk_edit.py:188 -#: circuits/forms/bulk_edit.py:216 circuits/forms/bulk_import.py:124 -#: circuits/forms/filtersets.py:51 circuits/forms/filtersets.py:171 -#: circuits/forms/filtersets.py:209 circuits/forms/model_forms.py:138 -#: circuits/forms/model_forms.py:154 circuits/tables/circuits.py:113 -#: dcim/forms/bulk_edit.py:168 dcim/forms/bulk_edit.py:329 -#: dcim/forms/bulk_edit.py:677 dcim/forms/bulk_edit.py:873 -#: dcim/forms/bulk_import.py:131 dcim/forms/bulk_import.py:230 -#: dcim/forms/bulk_import.py:309 dcim/forms/bulk_import.py:540 -#: dcim/forms/bulk_import.py:1311 dcim/forms/bulk_import.py:1339 -#: dcim/forms/filtersets.py:87 dcim/forms/filtersets.py:225 -#: dcim/forms/filtersets.py:342 dcim/forms/filtersets.py:439 -#: dcim/forms/filtersets.py:753 dcim/forms/filtersets.py:997 -#: dcim/forms/filtersets.py:1021 dcim/forms/filtersets.py:1111 -#: dcim/forms/filtersets.py:1149 dcim/forms/filtersets.py:1584 -#: dcim/forms/filtersets.py:1608 dcim/forms/filtersets.py:1632 -#: dcim/forms/model_forms.py:137 dcim/forms/model_forms.py:165 -#: dcim/forms/model_forms.py:238 dcim/forms/model_forms.py:463 -#: dcim/forms/model_forms.py:723 dcim/forms/object_create.py:391 -#: dcim/tables/devices.py:153 dcim/tables/power.py:26 dcim/tables/power.py:93 -#: dcim/tables/racks.py:122 dcim/tables/racks.py:207 dcim/tables/sites.py:134 -#: extras/filtersets.py:525 ipam/forms/bulk_edit.py:218 -#: ipam/forms/bulk_edit.py:285 ipam/forms/bulk_edit.py:484 -#: ipam/forms/bulk_import.py:171 ipam/forms/bulk_import.py:429 -#: ipam/forms/filtersets.py:153 ipam/forms/filtersets.py:231 -#: ipam/forms/filtersets.py:432 ipam/forms/filtersets.py:489 -#: ipam/forms/model_forms.py:205 ipam/forms/model_forms.py:636 -#: ipam/tables/ip.py:245 ipam/tables/vlans.py:118 ipam/tables/vlans.py:221 -#: templates/circuits/inc/circuit_termination_fields.html:6 -#: templates/dcim/device.html:22 templates/dcim/inc/cable_termination.html:8 -#: templates/dcim/inc/cable_termination.html:33 -#: templates/dcim/location.html:37 templates/dcim/powerpanel.html:22 -#: templates/dcim/rack.html:20 templates/dcim/rackreservation.html:28 -#: templates/dcim/site.html:28 templates/ipam/prefix.html:56 -#: templates/ipam/vlan.html:23 templates/ipam/vlan_edit.html:40 -#: templates/virtualization/cluster.html:42 -#: templates/virtualization/virtualmachine.html:95 -#: virtualization/forms/bulk_edit.py:91 virtualization/forms/bulk_edit.py:109 -#: virtualization/forms/bulk_edit.py:124 -#: virtualization/forms/bulk_import.py:59 -#: virtualization/forms/bulk_import.py:85 -#: virtualization/forms/filtersets.py:79 -#: virtualization/forms/filtersets.py:148 -#: virtualization/forms/model_forms.py:71 -#: virtualization/forms/model_forms.py:104 -#: virtualization/forms/model_forms.py:171 -#: virtualization/tables/clusters.py:77 -#: virtualization/tables/virtualmachines.py:63 vpn/forms/filtersets.py:266 -#: wireless/forms/model_forms.py:76 wireless/forms/model_forms.py:118 +#: 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/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/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/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 msgid "Site" msgstr "サイト" -#: circuits/filtersets.py:62 circuits/filtersets.py:229 -#: circuits/filtersets.py:274 dcim/filtersets.py:242 dcim/filtersets.py:363 -#: dcim/filtersets.py:458 extras/filtersets.py:531 ipam/filtersets.py:238 -#: ipam/filtersets.py:369 ipam/filtersets.py:989 -#: virtualization/filtersets.py:75 virtualization/filtersets.py:203 -#: vpn/filtersets.py:363 +#: 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 msgid "Site (slug)" msgstr "サイト (slug)" -#: circuits/filtersets.py:67 +#: netbox/circuits/filtersets.py:67 msgid "ASN (ID)" msgstr "ASN (ID)" -#: circuits/filtersets.py:73 circuits/forms/filtersets.py:31 -#: ipam/forms/model_forms.py:159 ipam/models/asns.py:108 -#: ipam/models/asns.py:125 ipam/tables/asn.py:41 templates/ipam/asn.html:20 +#: 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/templates/ipam/asn.html:20 msgid "ASN" msgstr "ASN" -#: circuits/filtersets.py:95 circuits/filtersets.py:122 -#: circuits/filtersets.py:156 circuits/filtersets.py:283 -#: circuits/filtersets.py:325 ipam/filtersets.py:243 +#: 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 msgid "Provider (ID)" msgstr "プロバイダ (ID)" -#: circuits/filtersets.py:101 circuits/filtersets.py:128 -#: circuits/filtersets.py:162 circuits/filtersets.py:289 -#: circuits/filtersets.py:331 ipam/filtersets.py:249 +#: 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 msgid "Provider (slug)" msgstr "プロバイダ (slug)" -#: circuits/filtersets.py:167 +#: netbox/circuits/filtersets.py:167 msgid "Provider account (ID)" msgstr "プロバイダアカウント (ID)" -#: circuits/filtersets.py:173 +#: netbox/circuits/filtersets.py:173 msgid "Provider account (account)" msgstr "プロバイダーアカウント (アカウント)" -#: circuits/filtersets.py:178 +#: netbox/circuits/filtersets.py:178 msgid "Provider network (ID)" msgstr "プロバイダネットワーク (ID)" -#: circuits/filtersets.py:182 +#: netbox/circuits/filtersets.py:182 msgid "Circuit type (ID)" msgstr "回線タイプ (ID)" -#: circuits/filtersets.py:188 +#: netbox/circuits/filtersets.py:188 msgid "Circuit type (slug)" msgstr "回線タイプ (slug)" -#: circuits/filtersets.py:223 circuits/filtersets.py:268 -#: dcim/filtersets.py:236 dcim/filtersets.py:357 dcim/filtersets.py:452 -#: dcim/filtersets.py:1045 dcim/filtersets.py:1393 dcim/filtersets.py:1928 -#: dcim/filtersets.py:2170 dcim/filtersets.py:2229 ipam/filtersets.py:232 -#: ipam/filtersets.py:363 ipam/filtersets.py:983 -#: virtualization/filtersets.py:69 virtualization/filtersets.py:197 -#: vpn/filtersets.py:368 +#: 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 msgid "Site (ID)" msgstr "サイト (ID)" -#: circuits/filtersets.py:233 circuits/filtersets.py:237 +#: netbox/circuits/filtersets.py:233 netbox/circuits/filtersets.py:237 msgid "Termination A (ID)" msgstr "ターミネーション A (ID)" -#: circuits/filtersets.py:260 circuits/filtersets.py:320 core/filtersets.py:77 -#: core/filtersets.py:136 core/filtersets.py:173 dcim/filtersets.py:751 -#: dcim/filtersets.py:1362 dcim/filtersets.py:2277 extras/filtersets.py:41 -#: extras/filtersets.py:63 extras/filtersets.py:92 extras/filtersets.py:132 -#: extras/filtersets.py:181 extras/filtersets.py:209 extras/filtersets.py:239 -#: extras/filtersets.py:276 extras/filtersets.py:348 extras/filtersets.py:391 -#: extras/filtersets.py:438 extras/filtersets.py:498 extras/filtersets.py:657 -#: extras/filtersets.py:703 ipam/forms/model_forms.py:449 -#: netbox/filtersets.py:282 netbox/forms/__init__.py:22 -#: netbox/forms/base.py:167 templates/htmx/object_selector.html:28 -#: templates/inc/filter_list.html:46 templates/ipam/ipaddress_assign.html:29 -#: templates/search.html:7 templates/search.html:26 tenancy/filtersets.py:99 -#: users/filtersets.py:23 users/filtersets.py:57 users/filtersets.py:102 -#: users/filtersets.py:150 utilities/forms/forms.py:104 -#: utilities/templates/navigation/menu.html:16 +#: 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/templates/htmx/object_selector.html:28 +#: netbox/templates/inc/filter_list.html:46 +#: netbox/templates/ipam/ipaddress_assign.html:29 +#: netbox/templates/search.html:7 netbox/templates/search.html:26 +#: netbox/tenancy/filtersets.py:99 netbox/users/filtersets.py:23 +#: netbox/users/filtersets.py:57 netbox/users/filtersets.py:102 +#: netbox/users/filtersets.py:150 netbox/utilities/forms/forms.py:104 +#: netbox/utilities/templates/navigation/menu.html:16 msgid "Search" msgstr "検索" -#: circuits/filtersets.py:264 circuits/forms/bulk_edit.py:172 -#: circuits/forms/bulk_edit.py:246 circuits/forms/bulk_import.py:115 -#: circuits/forms/filtersets.py:198 circuits/forms/filtersets.py:214 -#: circuits/forms/filtersets.py:260 circuits/forms/model_forms.py:111 -#: circuits/forms/model_forms.py:133 circuits/forms/model_forms.py:199 -#: circuits/tables/circuits.py:104 circuits/tables/circuits.py:164 -#: dcim/forms/connections.py:73 templates/circuits/circuit.html:15 -#: templates/circuits/circuitgroupassignment.html:26 -#: templates/circuits/circuittermination.html:19 -#: templates/dcim/inc/cable_termination.html:55 -#: templates/dcim/trace/circuit.html:4 +#: 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/templates/circuits/circuit.html:15 +#: netbox/templates/circuits/circuitgroupassignment.html:26 +#: netbox/templates/circuits/circuittermination.html:19 +#: netbox/templates/dcim/inc/cable_termination.html:55 +#: netbox/templates/dcim/trace/circuit.html:4 msgid "Circuit" msgstr "回線" -#: circuits/filtersets.py:278 +#: netbox/circuits/filtersets.py:278 msgid "ProviderNetwork (ID)" msgstr "プロバイダネットワーク (ID)" -#: circuits/filtersets.py:335 +#: netbox/circuits/filtersets.py:335 msgid "Circuit (ID)" msgstr "回線 (ID)" -#: circuits/filtersets.py:341 +#: netbox/circuits/filtersets.py:341 msgid "Circuit (CID)" msgstr "回線 (CID)" -#: circuits/filtersets.py:345 +#: netbox/circuits/filtersets.py:345 msgid "Circuit group (ID)" msgstr "回路グループ (ID)" -#: circuits/filtersets.py:351 +#: netbox/circuits/filtersets.py:351 msgid "Circuit group (slug)" msgstr "回線グループ (slug)" -#: circuits/forms/bulk_edit.py:30 circuits/forms/filtersets.py:56 -#: circuits/forms/model_forms.py:29 circuits/tables/providers.py:33 -#: dcim/forms/bulk_edit.py:128 dcim/forms/filtersets.py:195 -#: dcim/forms/model_forms.py:123 dcim/tables/sites.py:94 -#: ipam/models/asns.py:126 ipam/tables/asn.py:27 ipam/views.py:213 -#: netbox/navigation/menu.py:172 netbox/navigation/menu.py:175 -#: templates/circuits/provider.html:23 +#: 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/templates/circuits/provider.html:23 msgid "ASNs" msgstr "ASN" -#: circuits/forms/bulk_edit.py:34 circuits/forms/bulk_edit.py:56 -#: circuits/forms/bulk_edit.py:83 circuits/forms/bulk_edit.py:104 -#: circuits/forms/bulk_edit.py:164 circuits/forms/bulk_edit.py:183 -#: circuits/forms/bulk_edit.py:228 core/forms/bulk_edit.py:28 -#: dcim/forms/bulk_create.py:35 dcim/forms/bulk_edit.py:73 -#: dcim/forms/bulk_edit.py:92 dcim/forms/bulk_edit.py:151 -#: dcim/forms/bulk_edit.py:192 dcim/forms/bulk_edit.py:210 -#: dcim/forms/bulk_edit.py:288 dcim/forms/bulk_edit.py:432 -#: dcim/forms/bulk_edit.py:466 dcim/forms/bulk_edit.py:481 -#: dcim/forms/bulk_edit.py:540 dcim/forms/bulk_edit.py:584 -#: dcim/forms/bulk_edit.py:618 dcim/forms/bulk_edit.py:642 -#: dcim/forms/bulk_edit.py:715 dcim/forms/bulk_edit.py:767 -#: dcim/forms/bulk_edit.py:819 dcim/forms/bulk_edit.py:842 -#: dcim/forms/bulk_edit.py:890 dcim/forms/bulk_edit.py:960 -#: dcim/forms/bulk_edit.py:1013 dcim/forms/bulk_edit.py:1048 -#: dcim/forms/bulk_edit.py:1088 dcim/forms/bulk_edit.py:1132 -#: dcim/forms/bulk_edit.py:1177 dcim/forms/bulk_edit.py:1204 -#: dcim/forms/bulk_edit.py:1222 dcim/forms/bulk_edit.py:1240 -#: dcim/forms/bulk_edit.py:1258 dcim/forms/bulk_edit.py:1682 -#: extras/forms/bulk_edit.py:39 extras/forms/bulk_edit.py:149 -#: extras/forms/bulk_edit.py:178 extras/forms/bulk_edit.py:208 -#: extras/forms/bulk_edit.py:256 extras/forms/bulk_edit.py:274 -#: extras/forms/bulk_edit.py:298 extras/forms/bulk_edit.py:312 -#: extras/forms/bulk_edit.py:339 extras/tables/tables.py:79 -#: ipam/forms/bulk_edit.py:53 ipam/forms/bulk_edit.py:73 -#: ipam/forms/bulk_edit.py:93 ipam/forms/bulk_edit.py:117 -#: ipam/forms/bulk_edit.py:146 ipam/forms/bulk_edit.py:175 -#: ipam/forms/bulk_edit.py:194 ipam/forms/bulk_edit.py:276 -#: ipam/forms/bulk_edit.py:321 ipam/forms/bulk_edit.py:369 -#: ipam/forms/bulk_edit.py:412 ipam/forms/bulk_edit.py:428 -#: ipam/forms/bulk_edit.py:516 ipam/forms/bulk_edit.py:547 -#: templates/account/token.html:35 templates/circuits/circuit.html:59 -#: templates/circuits/circuitgroup.html:32 -#: templates/circuits/circuittype.html:26 -#: templates/circuits/inc/circuit_termination_fields.html:88 -#: templates/circuits/provider.html:33 -#: templates/circuits/providernetwork.html:32 -#: templates/core/datasource.html:54 templates/core/plugin.html:80 -#: templates/dcim/cable.html:36 templates/dcim/consoleport.html:44 -#: templates/dcim/consoleserverport.html:44 templates/dcim/device.html:94 -#: templates/dcim/devicebay.html:32 templates/dcim/devicerole.html:30 -#: templates/dcim/devicetype.html:33 templates/dcim/frontport.html:58 -#: templates/dcim/interface.html:69 templates/dcim/inventoryitem.html:60 -#: templates/dcim/inventoryitemrole.html:22 templates/dcim/location.html:33 -#: templates/dcim/manufacturer.html:40 templates/dcim/module.html:73 -#: templates/dcim/modulebay.html:42 templates/dcim/moduletype.html:37 -#: templates/dcim/platform.html:33 templates/dcim/powerfeed.html:40 -#: templates/dcim/poweroutlet.html:40 templates/dcim/powerpanel.html:30 -#: templates/dcim/powerport.html:40 templates/dcim/rack.html:53 -#: templates/dcim/rackreservation.html:62 templates/dcim/rackrole.html:26 -#: templates/dcim/racktype.html:24 templates/dcim/rearport.html:54 -#: templates/dcim/region.html:33 templates/dcim/site.html:60 -#: templates/dcim/sitegroup.html:33 templates/dcim/virtualchassis.html:31 -#: templates/extras/configcontext.html:21 -#: templates/extras/configtemplate.html:17 -#: templates/extras/customfield.html:34 -#: templates/extras/dashboard/widget_add.html:14 -#: templates/extras/eventrule.html:21 templates/extras/exporttemplate.html:19 -#: templates/extras/notificationgroup.html:20 -#: templates/extras/savedfilter.html:17 templates/extras/script_list.html:45 -#: templates/extras/tag.html:20 templates/extras/webhook.html:17 -#: templates/generic/bulk_import.html:120 templates/ipam/aggregate.html:43 -#: templates/ipam/asn.html:42 templates/ipam/asnrange.html:38 -#: templates/ipam/fhrpgroup.html:34 templates/ipam/ipaddress.html:55 -#: templates/ipam/iprange.html:67 templates/ipam/prefix.html:81 -#: templates/ipam/rir.html:26 templates/ipam/role.html:26 -#: templates/ipam/routetarget.html:21 templates/ipam/service.html:50 -#: templates/ipam/servicetemplate.html:27 templates/ipam/vlan.html:62 -#: templates/ipam/vlangroup.html:34 templates/ipam/vrf.html:33 -#: templates/tenancy/contact.html:67 templates/tenancy/contactgroup.html:25 -#: templates/tenancy/contactrole.html:22 templates/tenancy/tenant.html:24 -#: templates/tenancy/tenantgroup.html:33 templates/users/group.html:21 -#: templates/users/objectpermission.html:21 templates/users/token.html:27 -#: templates/virtualization/cluster.html:25 -#: templates/virtualization/clustergroup.html:26 -#: templates/virtualization/clustertype.html:26 -#: templates/virtualization/virtualdisk.html:39 -#: templates/virtualization/virtualmachine.html:31 -#: templates/virtualization/vminterface.html:51 -#: templates/vpn/ikepolicy.html:17 templates/vpn/ikeproposal.html:17 -#: templates/vpn/ipsecpolicy.html:17 templates/vpn/ipsecprofile.html:17 -#: templates/vpn/ipsecprofile.html:40 templates/vpn/ipsecprofile.html:73 -#: templates/vpn/ipsecproposal.html:17 templates/vpn/l2vpn.html:26 -#: templates/vpn/tunnel.html:33 templates/vpn/tunnelgroup.html:30 -#: templates/wireless/wirelesslan.html:26 -#: templates/wireless/wirelesslangroup.html:33 -#: templates/wireless/wirelesslink.html:34 tenancy/forms/bulk_edit.py:32 -#: tenancy/forms/bulk_edit.py:80 tenancy/forms/bulk_edit.py:122 -#: users/forms/bulk_edit.py:64 users/forms/bulk_edit.py:82 -#: users/forms/bulk_edit.py:112 virtualization/forms/bulk_edit.py:32 -#: virtualization/forms/bulk_edit.py:46 virtualization/forms/bulk_edit.py:100 -#: virtualization/forms/bulk_edit.py:177 virtualization/forms/bulk_edit.py:228 -#: virtualization/forms/bulk_edit.py:337 vpn/forms/bulk_edit.py:28 -#: vpn/forms/bulk_edit.py:64 vpn/forms/bulk_edit.py:121 -#: vpn/forms/bulk_edit.py:155 vpn/forms/bulk_edit.py:190 -#: vpn/forms/bulk_edit.py:215 vpn/forms/bulk_edit.py:247 -#: vpn/forms/bulk_edit.py:274 wireless/forms/bulk_edit.py:29 -#: wireless/forms/bulk_edit.py:82 wireless/forms/bulk_edit.py:140 +#: 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/templates/account/token.html:35 +#: netbox/templates/circuits/circuit.html:59 +#: netbox/templates/circuits/circuitgroup.html:32 +#: netbox/templates/circuits/circuittype.html:26 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:88 +#: netbox/templates/circuits/provider.html:33 +#: netbox/templates/circuits/providernetwork.html:32 +#: netbox/templates/core/datasource.html:54 +#: netbox/templates/core/plugin.html:80 netbox/templates/dcim/cable.html:36 +#: netbox/templates/dcim/consoleport.html:44 +#: netbox/templates/dcim/consoleserverport.html:44 +#: netbox/templates/dcim/device.html:94 +#: netbox/templates/dcim/devicebay.html:32 +#: netbox/templates/dcim/devicerole.html:30 +#: netbox/templates/dcim/devicetype.html:33 +#: netbox/templates/dcim/frontport.html:58 +#: netbox/templates/dcim/interface.html:69 +#: netbox/templates/dcim/inventoryitem.html:60 +#: netbox/templates/dcim/inventoryitemrole.html:22 +#: netbox/templates/dcim/location.html:33 +#: netbox/templates/dcim/manufacturer.html:40 +#: netbox/templates/dcim/module.html:73 +#: netbox/templates/dcim/modulebay.html:42 +#: netbox/templates/dcim/moduletype.html:37 +#: netbox/templates/dcim/platform.html:33 +#: netbox/templates/dcim/powerfeed.html:40 +#: netbox/templates/dcim/poweroutlet.html:40 +#: netbox/templates/dcim/powerpanel.html:30 +#: netbox/templates/dcim/powerport.html:40 netbox/templates/dcim/rack.html:53 +#: netbox/templates/dcim/rackreservation.html:62 +#: netbox/templates/dcim/rackrole.html:26 +#: netbox/templates/dcim/racktype.html:24 +#: netbox/templates/dcim/rearport.html:54 netbox/templates/dcim/region.html:33 +#: netbox/templates/dcim/site.html:60 netbox/templates/dcim/sitegroup.html:33 +#: netbox/templates/dcim/virtualchassis.html:31 +#: netbox/templates/extras/configcontext.html:21 +#: netbox/templates/extras/configtemplate.html:17 +#: netbox/templates/extras/customfield.html:34 +#: netbox/templates/extras/dashboard/widget_add.html:14 +#: netbox/templates/extras/eventrule.html:21 +#: netbox/templates/extras/exporttemplate.html:19 +#: netbox/templates/extras/notificationgroup.html:20 +#: netbox/templates/extras/savedfilter.html:17 +#: netbox/templates/extras/script_list.html:46 +#: netbox/templates/extras/tag.html:20 netbox/templates/extras/webhook.html:17 +#: netbox/templates/generic/bulk_import.html:120 +#: netbox/templates/ipam/aggregate.html:43 netbox/templates/ipam/asn.html:42 +#: netbox/templates/ipam/asnrange.html:38 +#: netbox/templates/ipam/fhrpgroup.html:34 +#: netbox/templates/ipam/ipaddress.html:55 +#: netbox/templates/ipam/iprange.html:67 netbox/templates/ipam/prefix.html:81 +#: netbox/templates/ipam/rir.html:26 netbox/templates/ipam/role.html:26 +#: netbox/templates/ipam/routetarget.html:21 +#: netbox/templates/ipam/service.html:50 +#: netbox/templates/ipam/servicetemplate.html:27 +#: netbox/templates/ipam/vlan.html:62 netbox/templates/ipam/vlangroup.html:34 +#: netbox/templates/ipam/vrf.html:33 netbox/templates/tenancy/contact.html:67 +#: netbox/templates/tenancy/contactgroup.html:25 +#: netbox/templates/tenancy/contactrole.html:22 +#: netbox/templates/tenancy/tenant.html:24 +#: netbox/templates/tenancy/tenantgroup.html:33 +#: netbox/templates/users/group.html:21 +#: netbox/templates/users/objectpermission.html:21 +#: netbox/templates/users/token.html:27 +#: netbox/templates/virtualization/cluster.html:25 +#: netbox/templates/virtualization/clustergroup.html:26 +#: netbox/templates/virtualization/clustertype.html:26 +#: netbox/templates/virtualization/virtualdisk.html:39 +#: netbox/templates/virtualization/virtualmachine.html:31 +#: netbox/templates/virtualization/vminterface.html:51 +#: netbox/templates/vpn/ikepolicy.html:17 +#: netbox/templates/vpn/ikeproposal.html:17 +#: netbox/templates/vpn/ipsecpolicy.html:17 +#: netbox/templates/vpn/ipsecprofile.html:17 +#: netbox/templates/vpn/ipsecprofile.html:40 +#: netbox/templates/vpn/ipsecprofile.html:73 +#: netbox/templates/vpn/ipsecproposal.html:17 +#: netbox/templates/vpn/l2vpn.html:26 netbox/templates/vpn/tunnel.html:33 +#: netbox/templates/vpn/tunnelgroup.html:30 +#: netbox/templates/wireless/wirelesslan.html:26 +#: netbox/templates/wireless/wirelesslangroup.html:33 +#: netbox/templates/wireless/wirelesslink.html:34 +#: netbox/tenancy/forms/bulk_edit.py:32 netbox/tenancy/forms/bulk_edit.py:80 +#: netbox/tenancy/forms/bulk_edit.py:122 netbox/users/forms/bulk_edit.py:64 +#: netbox/users/forms/bulk_edit.py:82 netbox/users/forms/bulk_edit.py:112 +#: netbox/virtualization/forms/bulk_edit.py:32 +#: netbox/virtualization/forms/bulk_edit.py:46 +#: netbox/virtualization/forms/bulk_edit.py:100 +#: netbox/virtualization/forms/bulk_edit.py:177 +#: netbox/virtualization/forms/bulk_edit.py:228 +#: netbox/virtualization/forms/bulk_edit.py:337 +#: netbox/vpn/forms/bulk_edit.py:28 netbox/vpn/forms/bulk_edit.py:64 +#: netbox/vpn/forms/bulk_edit.py:121 netbox/vpn/forms/bulk_edit.py:155 +#: netbox/vpn/forms/bulk_edit.py:190 netbox/vpn/forms/bulk_edit.py:215 +#: netbox/vpn/forms/bulk_edit.py:247 netbox/vpn/forms/bulk_edit.py:274 +#: netbox/wireless/forms/bulk_edit.py:29 netbox/wireless/forms/bulk_edit.py:82 +#: netbox/wireless/forms/bulk_edit.py:140 msgid "Description" msgstr "説明" -#: circuits/forms/bulk_edit.py:51 circuits/forms/bulk_edit.py:73 -#: circuits/forms/bulk_edit.py:123 circuits/forms/bulk_import.py:36 -#: circuits/forms/bulk_import.py:51 circuits/forms/bulk_import.py:74 -#: circuits/forms/filtersets.py:70 circuits/forms/filtersets.py:88 -#: circuits/forms/filtersets.py:116 circuits/forms/filtersets.py:131 -#: circuits/forms/filtersets.py:199 circuits/forms/filtersets.py:232 -#: circuits/forms/filtersets.py:255 circuits/forms/model_forms.py:47 -#: circuits/forms/model_forms.py:61 circuits/forms/model_forms.py:93 -#: circuits/tables/circuits.py:58 circuits/tables/circuits.py:108 -#: circuits/tables/circuits.py:160 circuits/tables/providers.py:72 -#: circuits/tables/providers.py:103 templates/circuits/circuit.html:18 -#: templates/circuits/circuittermination.html:25 -#: templates/circuits/provider.html:20 -#: templates/circuits/provideraccount.html:20 -#: templates/circuits/providernetwork.html:20 -#: templates/dcim/inc/cable_termination.html:51 +#: netbox/circuits/forms/bulk_edit.py: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/templates/circuits/circuit.html:18 +#: netbox/templates/circuits/circuittermination.html:25 +#: netbox/templates/circuits/provider.html:20 +#: netbox/templates/circuits/provideraccount.html:20 +#: netbox/templates/circuits/providernetwork.html:20 +#: netbox/templates/dcim/inc/cable_termination.html:51 msgid "Provider" msgstr "プロバイダ" -#: circuits/forms/bulk_edit.py:80 circuits/forms/filtersets.py:91 -#: templates/circuits/providernetwork.html:28 +#: netbox/circuits/forms/bulk_edit.py:80 +#: netbox/circuits/forms/filtersets.py:91 +#: netbox/templates/circuits/providernetwork.html:28 msgid "Service ID" msgstr "サービス ID" -#: circuits/forms/bulk_edit.py:100 circuits/forms/filtersets.py:107 -#: dcim/forms/bulk_edit.py:206 dcim/forms/bulk_edit.py:604 -#: dcim/forms/bulk_edit.py:804 dcim/forms/bulk_edit.py:1173 -#: dcim/forms/bulk_edit.py:1200 dcim/forms/bulk_edit.py:1678 -#: dcim/forms/filtersets.py:1064 dcim/forms/filtersets.py:1455 -#: dcim/forms/filtersets.py:1479 dcim/tables/devices.py:704 -#: dcim/tables/devices.py:761 dcim/tables/devices.py:1003 -#: dcim/tables/devicetypes.py:249 dcim/tables/devicetypes.py:264 -#: dcim/tables/racks.py:33 extras/forms/bulk_edit.py:270 -#: extras/tables/tables.py:443 templates/circuits/circuittype.html:30 -#: templates/dcim/cable.html:40 templates/dcim/devicerole.html:34 -#: templates/dcim/frontport.html:40 templates/dcim/inventoryitemrole.html:26 -#: templates/dcim/rackrole.html:30 templates/dcim/rearport.html:40 -#: templates/extras/tag.html:26 +#: netbox/circuits/forms/bulk_edit.py: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/templates/circuits/circuittype.html:30 +#: netbox/templates/dcim/cable.html:40 +#: netbox/templates/dcim/devicerole.html:34 +#: netbox/templates/dcim/frontport.html:40 +#: netbox/templates/dcim/inventoryitemrole.html:26 +#: netbox/templates/dcim/rackrole.html:30 +#: netbox/templates/dcim/rearport.html:40 netbox/templates/extras/tag.html:26 msgid "Color" msgstr "色" -#: circuits/forms/bulk_edit.py:118 circuits/forms/bulk_import.py:87 -#: circuits/forms/filtersets.py:126 core/forms/bulk_edit.py:18 -#: core/forms/filtersets.py:33 core/tables/change_logging.py:32 -#: core/tables/data.py:20 core/tables/jobs.py:18 dcim/forms/bulk_edit.py:782 -#: dcim/forms/bulk_edit.py:921 dcim/forms/bulk_edit.py:989 -#: dcim/forms/bulk_edit.py:1008 dcim/forms/bulk_edit.py:1031 -#: dcim/forms/bulk_edit.py:1073 dcim/forms/bulk_edit.py:1117 -#: dcim/forms/bulk_edit.py:1168 dcim/forms/bulk_edit.py:1195 -#: dcim/forms/bulk_import.py:188 dcim/forms/bulk_import.py:260 -#: dcim/forms/bulk_import.py:708 dcim/forms/bulk_import.py:734 -#: dcim/forms/bulk_import.py:760 dcim/forms/bulk_import.py:780 -#: dcim/forms/bulk_import.py:863 dcim/forms/bulk_import.py:957 -#: dcim/forms/bulk_import.py:999 dcim/forms/bulk_import.py:1213 -#: dcim/forms/bulk_import.py:1376 dcim/forms/filtersets.py:955 -#: dcim/forms/filtersets.py:1054 dcim/forms/filtersets.py:1175 -#: dcim/forms/filtersets.py:1247 dcim/forms/filtersets.py:1272 -#: dcim/forms/filtersets.py:1296 dcim/forms/filtersets.py:1316 -#: dcim/forms/filtersets.py:1353 dcim/forms/filtersets.py:1450 -#: dcim/forms/filtersets.py:1474 dcim/forms/model_forms.py:703 -#: dcim/forms/model_forms.py:709 dcim/forms/object_import.py:84 -#: dcim/forms/object_import.py:113 dcim/forms/object_import.py:145 -#: dcim/tables/devices.py:178 dcim/tables/devices.py:814 -#: dcim/tables/power.py:77 dcim/tables/racks.py:138 -#: extras/forms/bulk_import.py:42 extras/tables/tables.py:405 -#: extras/tables/tables.py:465 netbox/tables/tables.py:240 -#: templates/circuits/circuit.html:30 templates/core/datasource.html:38 -#: templates/dcim/cable.html:15 templates/dcim/consoleport.html:36 -#: templates/dcim/consoleserverport.html:36 templates/dcim/frontport.html:36 -#: templates/dcim/interface.html:46 templates/dcim/interface.html:169 -#: templates/dcim/interface.html:311 templates/dcim/powerfeed.html:32 -#: templates/dcim/poweroutlet.html:36 templates/dcim/powerport.html:36 -#: templates/dcim/rearport.html:36 templates/extras/eventrule.html:74 -#: templates/virtualization/cluster.html:17 templates/vpn/l2vpn.html:22 -#: templates/wireless/inc/authentication_attrs.html:8 -#: templates/wireless/inc/wirelesslink_interface.html:14 -#: virtualization/forms/bulk_edit.py:60 virtualization/forms/bulk_import.py:41 -#: virtualization/forms/filtersets.py:54 -#: virtualization/forms/model_forms.py:62 virtualization/tables/clusters.py:66 -#: vpn/forms/bulk_edit.py:264 vpn/forms/bulk_import.py:264 -#: vpn/forms/filtersets.py:217 vpn/forms/model_forms.py:84 -#: vpn/forms/model_forms.py:119 vpn/forms/model_forms.py:231 +#: netbox/circuits/forms/bulk_edit.py: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/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/core/datasource.html:38 +#: netbox/templates/dcim/cable.html:15 +#: netbox/templates/dcim/consoleport.html:36 +#: netbox/templates/dcim/consoleserverport.html:36 +#: netbox/templates/dcim/frontport.html:36 +#: netbox/templates/dcim/interface.html:46 +#: netbox/templates/dcim/interface.html:169 +#: netbox/templates/dcim/interface.html:311 +#: netbox/templates/dcim/powerfeed.html:32 +#: netbox/templates/dcim/poweroutlet.html:36 +#: netbox/templates/dcim/powerport.html:36 +#: netbox/templates/dcim/rearport.html:36 +#: netbox/templates/extras/eventrule.html:74 +#: netbox/templates/virtualization/cluster.html:17 +#: netbox/templates/vpn/l2vpn.html:22 +#: netbox/templates/wireless/inc/authentication_attrs.html:8 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:14 +#: netbox/virtualization/forms/bulk_edit.py:60 +#: netbox/virtualization/forms/bulk_import.py:41 +#: netbox/virtualization/forms/filtersets.py:54 +#: netbox/virtualization/forms/model_forms.py:62 +#: netbox/virtualization/tables/clusters.py:66 +#: netbox/vpn/forms/bulk_edit.py:264 netbox/vpn/forms/bulk_import.py:264 +#: netbox/vpn/forms/filtersets.py:217 netbox/vpn/forms/model_forms.py:84 +#: netbox/vpn/forms/model_forms.py:119 netbox/vpn/forms/model_forms.py:231 msgid "Type" msgstr "タイプ" -#: circuits/forms/bulk_edit.py:128 circuits/forms/bulk_import.py:80 -#: circuits/forms/filtersets.py:139 circuits/forms/model_forms.py:98 +#: 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 msgid "Provider account" msgstr "プロバイダアカウント" -#: circuits/forms/bulk_edit.py:136 circuits/forms/bulk_import.py:93 -#: circuits/forms/filtersets.py:150 core/forms/filtersets.py:38 -#: core/forms/filtersets.py:79 core/tables/data.py:23 core/tables/jobs.py:26 -#: core/tables/tasks.py:88 dcim/forms/bulk_edit.py:106 -#: dcim/forms/bulk_edit.py:181 dcim/forms/bulk_edit.py:351 -#: dcim/forms/bulk_edit.py:700 dcim/forms/bulk_edit.py:756 -#: dcim/forms/bulk_edit.py:788 dcim/forms/bulk_edit.py:915 -#: dcim/forms/bulk_edit.py:1701 dcim/forms/bulk_import.py:88 -#: dcim/forms/bulk_import.py:147 dcim/forms/bulk_import.py:248 -#: dcim/forms/bulk_import.py:505 dcim/forms/bulk_import.py:659 -#: dcim/forms/bulk_import.py:1207 dcim/forms/bulk_import.py:1371 -#: dcim/forms/bulk_import.py:1435 dcim/forms/filtersets.py:178 -#: dcim/forms/filtersets.py:237 dcim/forms/filtersets.py:359 -#: dcim/forms/filtersets.py:799 dcim/forms/filtersets.py:924 -#: dcim/forms/filtersets.py:958 dcim/forms/filtersets.py:1059 -#: dcim/forms/filtersets.py:1170 dcim/tables/devices.py:140 -#: dcim/tables/devices.py:817 dcim/tables/devices.py:1063 -#: dcim/tables/modules.py:69 dcim/tables/power.py:74 dcim/tables/racks.py:126 -#: dcim/tables/sites.py:82 dcim/tables/sites.py:138 -#: ipam/forms/bulk_edit.py:256 ipam/forms/bulk_edit.py:306 -#: ipam/forms/bulk_edit.py:354 ipam/forms/bulk_edit.py:506 -#: ipam/forms/bulk_import.py:192 ipam/forms/bulk_import.py:257 -#: ipam/forms/bulk_import.py:293 ipam/forms/bulk_import.py:450 -#: ipam/forms/filtersets.py:210 ipam/forms/filtersets.py:281 -#: ipam/forms/filtersets.py:355 ipam/forms/filtersets.py:501 -#: ipam/forms/model_forms.py:468 ipam/tables/ip.py:237 ipam/tables/ip.py:312 -#: ipam/tables/ip.py:363 ipam/tables/ip.py:426 ipam/tables/ip.py:453 -#: ipam/tables/vlans.py:126 ipam/tables/vlans.py:232 -#: templates/circuits/circuit.html:34 templates/core/datasource.html:46 -#: templates/core/job.html:48 templates/core/rq_task.html:81 -#: templates/core/system.html:18 templates/dcim/cable.html:19 -#: templates/dcim/device.html:178 templates/dcim/location.html:45 -#: templates/dcim/module.html:69 templates/dcim/powerfeed.html:36 -#: templates/dcim/rack.html:41 templates/dcim/site.html:43 -#: templates/extras/script_list.html:47 templates/ipam/ipaddress.html:37 -#: templates/ipam/iprange.html:54 templates/ipam/prefix.html:73 -#: templates/ipam/vlan.html:48 templates/virtualization/cluster.html:21 -#: templates/virtualization/virtualmachine.html:19 -#: templates/vpn/tunnel.html:25 templates/wireless/wirelesslan.html:22 -#: templates/wireless/wirelesslink.html:17 users/forms/filtersets.py:32 -#: users/forms/model_forms.py:194 virtualization/forms/bulk_edit.py:70 -#: virtualization/forms/bulk_edit.py:118 -#: virtualization/forms/bulk_import.py:54 -#: virtualization/forms/bulk_import.py:80 -#: virtualization/forms/filtersets.py:62 -#: virtualization/forms/filtersets.py:160 virtualization/tables/clusters.py:74 -#: virtualization/tables/virtualmachines.py:60 vpn/forms/bulk_edit.py:39 -#: vpn/forms/bulk_import.py:37 vpn/forms/filtersets.py:47 -#: vpn/tables/tunnels.py:48 wireless/forms/bulk_edit.py:43 -#: wireless/forms/bulk_edit.py:105 wireless/forms/bulk_import.py:43 -#: wireless/forms/bulk_import.py:84 wireless/forms/filtersets.py:49 -#: wireless/forms/filtersets.py:83 wireless/tables/wirelesslan.py:52 -#: wireless/tables/wirelesslink.py:20 +#: 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/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:69 +#: 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/templates/circuits/circuit.html:34 +#: 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/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/vlan.html:48 +#: netbox/templates/virtualization/cluster.html:21 +#: netbox/templates/virtualization/virtualmachine.html:19 +#: netbox/templates/vpn/tunnel.html:25 +#: netbox/templates/wireless/wirelesslan.html:22 +#: netbox/templates/wireless/wirelesslink.html:17 +#: netbox/users/forms/filtersets.py: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/tables/clusters.py:74 +#: netbox/virtualization/tables/virtualmachines.py:60 +#: netbox/vpn/forms/bulk_edit.py:39 netbox/vpn/forms/bulk_import.py:37 +#: netbox/vpn/forms/filtersets.py:47 netbox/vpn/tables/tunnels.py:48 +#: netbox/wireless/forms/bulk_edit.py:43 +#: netbox/wireless/forms/bulk_edit.py:105 +#: netbox/wireless/forms/bulk_import.py:43 +#: netbox/wireless/forms/bulk_import.py:84 +#: netbox/wireless/forms/filtersets.py:49 +#: netbox/wireless/forms/filtersets.py:83 +#: netbox/wireless/tables/wirelesslan.py:52 +#: netbox/wireless/tables/wirelesslink.py:20 msgid "Status" msgstr "ステータス" -#: circuits/forms/bulk_edit.py:142 circuits/forms/bulk_edit.py:233 -#: circuits/forms/bulk_import.py:98 circuits/forms/bulk_import.py:158 -#: circuits/forms/filtersets.py:119 circuits/forms/filtersets.py:241 -#: dcim/forms/bulk_edit.py:122 dcim/forms/bulk_edit.py:187 -#: dcim/forms/bulk_edit.py:346 dcim/forms/bulk_edit.py:461 -#: dcim/forms/bulk_edit.py:690 dcim/forms/bulk_edit.py:794 -#: dcim/forms/bulk_edit.py:1706 dcim/forms/bulk_import.py:107 -#: dcim/forms/bulk_import.py:152 dcim/forms/bulk_import.py:241 -#: dcim/forms/bulk_import.py:334 dcim/forms/bulk_import.py:479 -#: dcim/forms/bulk_import.py:1219 dcim/forms/bulk_import.py:1428 -#: dcim/forms/filtersets.py:173 dcim/forms/filtersets.py:205 -#: dcim/forms/filtersets.py:323 dcim/forms/filtersets.py:399 -#: dcim/forms/filtersets.py:420 dcim/forms/filtersets.py:722 -#: dcim/forms/filtersets.py:916 dcim/forms/filtersets.py:978 -#: dcim/forms/filtersets.py:1008 dcim/forms/filtersets.py:1130 -#: dcim/tables/power.py:88 extras/filtersets.py:612 -#: extras/forms/filtersets.py:323 extras/forms/filtersets.py:396 -#: ipam/forms/bulk_edit.py:43 ipam/forms/bulk_edit.py:68 -#: ipam/forms/bulk_edit.py:112 ipam/forms/bulk_edit.py:141 -#: ipam/forms/bulk_edit.py:166 ipam/forms/bulk_edit.py:251 -#: ipam/forms/bulk_edit.py:301 ipam/forms/bulk_edit.py:349 -#: ipam/forms/bulk_edit.py:501 ipam/forms/bulk_import.py:38 -#: ipam/forms/bulk_import.py:67 ipam/forms/bulk_import.py:95 -#: ipam/forms/bulk_import.py:115 ipam/forms/bulk_import.py:135 -#: ipam/forms/bulk_import.py:164 ipam/forms/bulk_import.py:250 -#: ipam/forms/bulk_import.py:286 ipam/forms/bulk_import.py:443 -#: ipam/forms/filtersets.py:48 ipam/forms/filtersets.py:68 -#: ipam/forms/filtersets.py:100 ipam/forms/filtersets.py:120 -#: ipam/forms/filtersets.py:143 ipam/forms/filtersets.py:174 -#: ipam/forms/filtersets.py:267 ipam/forms/filtersets.py:310 -#: ipam/forms/filtersets.py:469 ipam/tables/ip.py:456 ipam/tables/vlans.py:229 -#: templates/circuits/circuit.html:38 templates/circuits/circuitgroup.html:36 -#: templates/dcim/cable.html:23 templates/dcim/device.html:79 -#: templates/dcim/location.html:49 templates/dcim/powerfeed.html:44 -#: templates/dcim/rack.html:32 templates/dcim/rackreservation.html:49 -#: templates/dcim/site.html:47 templates/dcim/virtualdevicecontext.html:52 -#: templates/ipam/aggregate.html:30 templates/ipam/asn.html:33 -#: templates/ipam/asnrange.html:29 templates/ipam/ipaddress.html:28 -#: templates/ipam/iprange.html:58 templates/ipam/prefix.html:29 -#: templates/ipam/routetarget.html:17 templates/ipam/vlan.html:39 -#: templates/ipam/vrf.html:20 templates/tenancy/tenant.html:17 -#: templates/virtualization/cluster.html:33 -#: templates/virtualization/virtualmachine.html:39 templates/vpn/l2vpn.html:30 -#: templates/vpn/tunnel.html:49 templates/wireless/wirelesslan.html:34 -#: templates/wireless/wirelesslink.html:25 tenancy/forms/forms.py:25 -#: tenancy/forms/forms.py:48 tenancy/forms/model_forms.py:52 -#: tenancy/tables/columns.py:64 virtualization/forms/bulk_edit.py:76 -#: virtualization/forms/bulk_edit.py:155 -#: virtualization/forms/bulk_import.py:66 -#: virtualization/forms/bulk_import.py:115 -#: virtualization/forms/filtersets.py:47 -#: virtualization/forms/filtersets.py:105 vpn/forms/bulk_edit.py:59 -#: vpn/forms/bulk_edit.py:269 vpn/forms/bulk_import.py:59 -#: vpn/forms/bulk_import.py:258 vpn/forms/filtersets.py:214 -#: wireless/forms/bulk_edit.py:63 wireless/forms/bulk_edit.py:110 -#: wireless/forms/bulk_import.py:55 wireless/forms/bulk_import.py:97 -#: wireless/forms/filtersets.py:35 wireless/forms/filtersets.py:75 +#: netbox/circuits/forms/bulk_edit.py: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/templates/circuits/circuitgroup.html:36 +#: 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 +#: netbox/templates/dcim/rackreservation.html:49 +#: netbox/templates/dcim/site.html:47 +#: netbox/templates/dcim/virtualdevicecontext.html:52 +#: netbox/templates/ipam/aggregate.html:30 netbox/templates/ipam/asn.html:33 +#: netbox/templates/ipam/asnrange.html:29 +#: netbox/templates/ipam/ipaddress.html:28 +#: netbox/templates/ipam/iprange.html:58 netbox/templates/ipam/prefix.html:29 +#: netbox/templates/ipam/routetarget.html:17 +#: netbox/templates/ipam/vlan.html:39 netbox/templates/ipam/vrf.html:20 +#: netbox/templates/tenancy/tenant.html:17 +#: netbox/templates/virtualization/cluster.html:33 +#: netbox/templates/virtualization/virtualmachine.html:39 +#: netbox/templates/vpn/l2vpn.html:30 netbox/templates/vpn/tunnel.html:49 +#: netbox/templates/wireless/wirelesslan.html:34 +#: netbox/templates/wireless/wirelesslink.html:25 +#: netbox/tenancy/forms/forms.py:25 netbox/tenancy/forms/forms.py:48 +#: netbox/tenancy/forms/model_forms.py:52 netbox/tenancy/tables/columns.py:64 +#: netbox/virtualization/forms/bulk_edit.py:76 +#: netbox/virtualization/forms/bulk_edit.py:155 +#: netbox/virtualization/forms/bulk_import.py:66 +#: netbox/virtualization/forms/bulk_import.py:115 +#: netbox/virtualization/forms/filtersets.py:47 +#: netbox/virtualization/forms/filtersets.py:105 +#: netbox/vpn/forms/bulk_edit.py:59 netbox/vpn/forms/bulk_edit.py:269 +#: netbox/vpn/forms/bulk_import.py:59 netbox/vpn/forms/bulk_import.py:258 +#: netbox/vpn/forms/filtersets.py:214 netbox/wireless/forms/bulk_edit.py:63 +#: netbox/wireless/forms/bulk_edit.py:110 +#: netbox/wireless/forms/bulk_import.py:55 +#: netbox/wireless/forms/bulk_import.py:97 +#: netbox/wireless/forms/filtersets.py:35 +#: netbox/wireless/forms/filtersets.py:75 msgid "Tenant" msgstr "テナント" -#: circuits/forms/bulk_edit.py:147 circuits/forms/filtersets.py:174 +#: netbox/circuits/forms/bulk_edit.py:147 +#: netbox/circuits/forms/filtersets.py:174 msgid "Install date" msgstr "開通日" -#: circuits/forms/bulk_edit.py:152 circuits/forms/filtersets.py:179 +#: netbox/circuits/forms/bulk_edit.py:152 +#: netbox/circuits/forms/filtersets.py:179 msgid "Termination date" msgstr "終了日" -#: circuits/forms/bulk_edit.py:158 circuits/forms/filtersets.py:186 +#: netbox/circuits/forms/bulk_edit.py:158 +#: netbox/circuits/forms/filtersets.py:186 msgid "Commit rate (Kbps)" msgstr "保証帯域 (Kbps)" -#: circuits/forms/bulk_edit.py:173 circuits/forms/model_forms.py:112 +#: netbox/circuits/forms/bulk_edit.py:173 +#: netbox/circuits/forms/model_forms.py:112 msgid "Service Parameters" msgstr "サービス情報" -#: circuits/forms/bulk_edit.py:174 circuits/forms/model_forms.py:113 -#: circuits/forms/model_forms.py:183 dcim/forms/model_forms.py:139 -#: dcim/forms/model_forms.py:181 dcim/forms/model_forms.py:266 -#: dcim/forms/model_forms.py:323 dcim/forms/model_forms.py:768 -#: dcim/forms/model_forms.py:1692 ipam/forms/model_forms.py:64 -#: ipam/forms/model_forms.py:81 ipam/forms/model_forms.py:115 -#: ipam/forms/model_forms.py:136 ipam/forms/model_forms.py:160 -#: ipam/forms/model_forms.py:232 ipam/forms/model_forms.py:261 -#: ipam/forms/model_forms.py:316 netbox/navigation/menu.py:24 -#: templates/dcim/device_edit.html:85 templates/dcim/htmx/cable_edit.html:72 -#: templates/ipam/ipaddress_bulk_add.html:27 templates/ipam/vlan_edit.html:22 -#: virtualization/forms/model_forms.py:80 -#: virtualization/forms/model_forms.py:222 vpn/forms/bulk_edit.py:78 -#: vpn/forms/filtersets.py:44 vpn/forms/model_forms.py:62 -#: vpn/forms/model_forms.py:147 vpn/forms/model_forms.py:411 -#: wireless/forms/model_forms.py:54 wireless/forms/model_forms.py:170 +#: 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/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/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 msgid "Tenancy" msgstr "テナンシー" -#: circuits/forms/bulk_edit.py:193 circuits/forms/bulk_edit.py:217 -#: circuits/forms/model_forms.py:155 circuits/tables/circuits.py:117 -#: templates/circuits/inc/circuit_termination_fields.html:62 -#: templates/circuits/providernetwork.html:17 +#: 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 "プロバイダネットワーク" -#: circuits/forms/bulk_edit.py:199 +#: netbox/circuits/forms/bulk_edit.py:199 msgid "Port speed (Kbps)" msgstr "ポートスピード (Kbps)" -#: circuits/forms/bulk_edit.py:203 +#: netbox/circuits/forms/bulk_edit.py:203 msgid "Upstream speed (Kbps)" msgstr "アップストリーム速度 (Kbps)" -#: circuits/forms/bulk_edit.py:206 dcim/forms/bulk_edit.py:951 -#: dcim/forms/bulk_edit.py:1315 dcim/forms/bulk_edit.py:1332 -#: dcim/forms/bulk_edit.py:1349 dcim/forms/bulk_edit.py:1367 -#: dcim/forms/bulk_edit.py:1455 dcim/forms/bulk_edit.py:1594 -#: dcim/forms/bulk_edit.py:1611 +#: 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 msgid "Mark connected" msgstr "接続済みにする" -#: circuits/forms/bulk_edit.py:219 circuits/forms/model_forms.py:157 -#: templates/circuits/inc/circuit_termination_fields.html:54 -#: templates/dcim/frontport.html:121 templates/dcim/interface.html:193 -#: templates/dcim/rearport.html:111 +#: netbox/circuits/forms/bulk_edit.py:219 +#: netbox/circuits/forms/model_forms.py:157 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:54 +#: netbox/templates/dcim/frontport.html:121 +#: netbox/templates/dcim/interface.html:193 +#: netbox/templates/dcim/rearport.html:111 msgid "Circuit Termination" msgstr "回線終端" -#: circuits/forms/bulk_edit.py:221 circuits/forms/model_forms.py:159 +#: netbox/circuits/forms/bulk_edit.py:221 +#: netbox/circuits/forms/model_forms.py:159 msgid "Termination Details" msgstr "終了詳細" -#: circuits/forms/bulk_edit.py:251 circuits/forms/filtersets.py:268 -#: circuits/tables/circuits.py:168 dcim/forms/model_forms.py:551 -#: templates/circuits/circuitgroupassignment.html:30 -#: templates/dcim/device.html:133 templates/dcim/virtualchassis.html:68 -#: templates/dcim/virtualchassis_edit.html:56 -#: templates/ipam/inc/panels/fhrp_groups.html:26 -#: tenancy/forms/bulk_edit.py:147 tenancy/forms/filtersets.py:110 +#: netbox/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/templates/dcim/device.html:133 +#: netbox/templates/dcim/virtualchassis.html:68 +#: netbox/templates/dcim/virtualchassis_edit.html:56 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:26 +#: netbox/tenancy/forms/bulk_edit.py:147 +#: netbox/tenancy/forms/filtersets.py:110 msgid "Priority" msgstr "優先度" -#: circuits/forms/bulk_import.py:39 circuits/forms/bulk_import.py:54 -#: circuits/forms/bulk_import.py:77 +#: 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 "割当プロバイダ" -#: circuits/forms/bulk_import.py:83 +#: netbox/circuits/forms/bulk_import.py:83 msgid "Assigned provider account" msgstr "割当プロバイダアカウント" -#: circuits/forms/bulk_import.py:90 +#: netbox/circuits/forms/bulk_import.py:90 msgid "Type of circuit" msgstr "回線のタイプ" -#: circuits/forms/bulk_import.py:95 dcim/forms/bulk_import.py:90 -#: dcim/forms/bulk_import.py:149 dcim/forms/bulk_import.py:250 -#: dcim/forms/bulk_import.py:507 dcim/forms/bulk_import.py:661 -#: dcim/forms/bulk_import.py:1373 ipam/forms/bulk_import.py:194 -#: ipam/forms/bulk_import.py:259 ipam/forms/bulk_import.py:295 -#: ipam/forms/bulk_import.py:452 virtualization/forms/bulk_import.py:56 -#: virtualization/forms/bulk_import.py:82 vpn/forms/bulk_import.py:39 -#: wireless/forms/bulk_import.py:45 +#: netbox/circuits/forms/bulk_import.py: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 "運用状況" -#: circuits/forms/bulk_import.py:102 circuits/forms/bulk_import.py:162 -#: dcim/forms/bulk_import.py:111 dcim/forms/bulk_import.py:156 -#: dcim/forms/bulk_import.py:338 dcim/forms/bulk_import.py:483 -#: dcim/forms/bulk_import.py:1223 dcim/forms/bulk_import.py:1368 -#: dcim/forms/bulk_import.py:1432 ipam/forms/bulk_import.py:42 -#: ipam/forms/bulk_import.py:71 ipam/forms/bulk_import.py:99 -#: ipam/forms/bulk_import.py:119 ipam/forms/bulk_import.py:139 -#: ipam/forms/bulk_import.py:168 ipam/forms/bulk_import.py:254 -#: ipam/forms/bulk_import.py:290 ipam/forms/bulk_import.py:447 -#: virtualization/forms/bulk_import.py:70 -#: virtualization/forms/bulk_import.py:119 vpn/forms/bulk_import.py:63 -#: wireless/forms/bulk_import.py:59 wireless/forms/bulk_import.py:101 +#: netbox/circuits/forms/bulk_import.py: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 "割当テナント" -#: circuits/forms/bulk_import.py:120 -#: templates/circuits/inc/circuit_termination.html:6 -#: templates/circuits/inc/circuit_termination_fields.html:15 -#: templates/dcim/cable.html:68 templates/dcim/cable.html:72 -#: vpn/forms/bulk_import.py:100 vpn/forms/filtersets.py:77 +#: netbox/circuits/forms/bulk_import.py: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 "終了" -#: circuits/forms/bulk_import.py:130 circuits/forms/filtersets.py:147 -#: circuits/forms/filtersets.py:227 circuits/forms/model_forms.py:144 +#: 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 msgid "Provider network" msgstr "プロバイダネットワーク" -#: circuits/forms/filtersets.py:30 circuits/forms/filtersets.py:118 -#: circuits/forms/filtersets.py:200 dcim/forms/bulk_edit.py:338 -#: dcim/forms/bulk_edit.py:441 dcim/forms/bulk_edit.py:682 -#: dcim/forms/bulk_edit.py:729 dcim/forms/bulk_edit.py:882 -#: dcim/forms/bulk_import.py:235 dcim/forms/bulk_import.py:315 -#: dcim/forms/bulk_import.py:546 dcim/forms/bulk_import.py:1317 -#: dcim/forms/bulk_import.py:1351 dcim/forms/filtersets.py:95 -#: dcim/forms/filtersets.py:322 dcim/forms/filtersets.py:356 -#: dcim/forms/filtersets.py:396 dcim/forms/filtersets.py:447 -#: dcim/forms/filtersets.py:719 dcim/forms/filtersets.py:762 -#: dcim/forms/filtersets.py:977 dcim/forms/filtersets.py:1006 -#: dcim/forms/filtersets.py:1026 dcim/forms/filtersets.py:1090 -#: dcim/forms/filtersets.py:1120 dcim/forms/filtersets.py:1129 -#: dcim/forms/filtersets.py:1240 dcim/forms/filtersets.py:1264 -#: dcim/forms/filtersets.py:1289 dcim/forms/filtersets.py:1308 -#: dcim/forms/filtersets.py:1331 dcim/forms/filtersets.py:1442 -#: dcim/forms/filtersets.py:1466 dcim/forms/filtersets.py:1490 -#: dcim/forms/filtersets.py:1508 dcim/forms/filtersets.py:1525 -#: dcim/forms/model_forms.py:180 dcim/forms/model_forms.py:243 -#: dcim/forms/model_forms.py:468 dcim/forms/model_forms.py:728 -#: dcim/tables/devices.py:157 dcim/tables/power.py:30 dcim/tables/racks.py:118 -#: dcim/tables/racks.py:212 extras/filtersets.py:536 -#: extras/forms/filtersets.py:320 ipam/forms/filtersets.py:173 -#: ipam/forms/filtersets.py:414 ipam/forms/filtersets.py:437 -#: ipam/forms/filtersets.py:467 templates/dcim/device.html:26 -#: templates/dcim/device_edit.html:30 -#: templates/dcim/inc/cable_termination.html:12 -#: templates/dcim/location.html:26 templates/dcim/powerpanel.html:26 -#: templates/dcim/rack.html:24 templates/dcim/rackreservation.html:32 -#: virtualization/forms/filtersets.py:46 -#: virtualization/forms/filtersets.py:100 wireless/forms/model_forms.py:87 -#: wireless/forms/model_forms.py:129 +#: netbox/circuits/forms/filtersets.py: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/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 msgid "Location" msgstr "ロケーション" -#: circuits/forms/filtersets.py:32 circuits/forms/filtersets.py:120 -#: dcim/forms/filtersets.py:144 dcim/forms/filtersets.py:158 -#: dcim/forms/filtersets.py:174 dcim/forms/filtersets.py:206 -#: dcim/forms/filtersets.py:328 dcim/forms/filtersets.py:400 -#: dcim/forms/filtersets.py:471 dcim/forms/filtersets.py:723 -#: dcim/forms/filtersets.py:1091 netbox/navigation/menu.py:31 -#: netbox/navigation/menu.py:33 tenancy/forms/filtersets.py:42 -#: tenancy/tables/columns.py:70 tenancy/tables/contacts.py:25 -#: tenancy/views.py:19 virtualization/forms/filtersets.py:37 -#: virtualization/forms/filtersets.py:48 -#: virtualization/forms/filtersets.py:106 +#: netbox/circuits/forms/filtersets.py: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/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/tables/contacts.py:25 netbox/tenancy/views.py:19 +#: netbox/virtualization/forms/filtersets.py:37 +#: netbox/virtualization/forms/filtersets.py:48 +#: netbox/virtualization/forms/filtersets.py:106 msgid "Contacts" msgstr "連絡先" -#: circuits/forms/filtersets.py:37 circuits/forms/filtersets.py:157 -#: dcim/forms/bulk_edit.py:112 dcim/forms/bulk_edit.py:313 -#: dcim/forms/bulk_edit.py:857 dcim/forms/bulk_import.py:93 -#: dcim/forms/filtersets.py:73 dcim/forms/filtersets.py:185 -#: dcim/forms/filtersets.py:211 dcim/forms/filtersets.py:334 -#: dcim/forms/filtersets.py:425 dcim/forms/filtersets.py:739 -#: dcim/forms/filtersets.py:983 dcim/forms/filtersets.py:1013 -#: dcim/forms/filtersets.py:1097 dcim/forms/filtersets.py:1136 -#: dcim/forms/filtersets.py:1576 dcim/forms/filtersets.py:1600 -#: dcim/forms/filtersets.py:1624 dcim/forms/model_forms.py:112 -#: dcim/forms/object_create.py:375 dcim/tables/devices.py:143 -#: dcim/tables/sites.py:85 extras/filtersets.py:503 -#: ipam/forms/bulk_edit.py:208 ipam/forms/bulk_edit.py:474 -#: ipam/forms/filtersets.py:217 ipam/forms/filtersets.py:422 -#: ipam/forms/filtersets.py:475 templates/dcim/device.html:18 -#: templates/dcim/rack.html:16 templates/dcim/rackreservation.html:22 -#: templates/dcim/region.html:26 templates/dcim/site.html:31 -#: templates/ipam/prefix.html:49 templates/ipam/vlan.html:16 -#: virtualization/forms/bulk_edit.py:81 virtualization/forms/filtersets.py:59 -#: virtualization/forms/filtersets.py:133 -#: virtualization/forms/model_forms.py:92 vpn/forms/filtersets.py:257 +#: netbox/circuits/forms/filtersets.py: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/templates/dcim/rackreservation.html:22 +#: netbox/templates/dcim/region.html:26 netbox/templates/dcim/site.html:31 +#: netbox/templates/ipam/prefix.html:49 netbox/templates/ipam/vlan.html:16 +#: netbox/virtualization/forms/bulk_edit.py:81 +#: netbox/virtualization/forms/filtersets.py:59 +#: netbox/virtualization/forms/filtersets.py:133 +#: netbox/virtualization/forms/model_forms.py:92 +#: netbox/vpn/forms/filtersets.py:257 msgid "Region" msgstr "リージョン" -#: circuits/forms/filtersets.py:42 circuits/forms/filtersets.py:162 -#: dcim/forms/bulk_edit.py:321 dcim/forms/bulk_edit.py:865 -#: dcim/forms/filtersets.py:78 dcim/forms/filtersets.py:190 -#: dcim/forms/filtersets.py:216 dcim/forms/filtersets.py:347 -#: dcim/forms/filtersets.py:430 dcim/forms/filtersets.py:744 -#: dcim/forms/filtersets.py:988 dcim/forms/filtersets.py:1102 -#: dcim/forms/filtersets.py:1141 dcim/forms/object_create.py:383 -#: extras/filtersets.py:520 ipam/forms/bulk_edit.py:213 -#: ipam/forms/bulk_edit.py:479 ipam/forms/filtersets.py:222 -#: ipam/forms/filtersets.py:427 ipam/forms/filtersets.py:480 -#: virtualization/forms/bulk_edit.py:86 virtualization/forms/filtersets.py:69 -#: virtualization/forms/filtersets.py:138 -#: virtualization/forms/model_forms.py:98 +#: netbox/circuits/forms/filtersets.py: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/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 msgid "Site group" msgstr "サイトグループ" -#: circuits/forms/filtersets.py:65 circuits/forms/filtersets.py:83 -#: circuits/forms/filtersets.py:102 circuits/forms/filtersets.py:117 -#: core/forms/filtersets.py:67 core/forms/filtersets.py:135 -#: dcim/forms/bulk_edit.py:828 dcim/forms/filtersets.py:172 -#: dcim/forms/filtersets.py:204 dcim/forms/filtersets.py:915 -#: dcim/forms/filtersets.py:1007 dcim/forms/filtersets.py:1131 -#: dcim/forms/filtersets.py:1239 dcim/forms/filtersets.py:1263 -#: dcim/forms/filtersets.py:1288 dcim/forms/filtersets.py:1307 -#: dcim/forms/filtersets.py:1327 dcim/forms/filtersets.py:1441 -#: dcim/forms/filtersets.py:1465 dcim/forms/filtersets.py:1489 -#: dcim/forms/filtersets.py:1507 dcim/forms/filtersets.py:1523 -#: extras/forms/bulk_edit.py:90 extras/forms/filtersets.py:44 -#: extras/forms/filtersets.py:134 extras/forms/filtersets.py:165 -#: extras/forms/filtersets.py:205 extras/forms/filtersets.py:221 -#: extras/forms/filtersets.py:252 extras/forms/filtersets.py:276 -#: extras/forms/filtersets.py:441 ipam/forms/filtersets.py:99 -#: ipam/forms/filtersets.py:266 ipam/forms/filtersets.py:307 -#: ipam/forms/filtersets.py:382 ipam/forms/filtersets.py:468 -#: ipam/forms/filtersets.py:527 ipam/forms/filtersets.py:545 -#: netbox/tables/tables.py:256 virtualization/forms/filtersets.py:45 -#: virtualization/forms/filtersets.py:103 -#: virtualization/forms/filtersets.py:198 -#: virtualization/forms/filtersets.py:243 vpn/forms/filtersets.py:213 -#: wireless/forms/bulk_edit.py:150 wireless/forms/filtersets.py:34 -#: wireless/forms/filtersets.py:74 +#: 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 "属性" -#: circuits/forms/filtersets.py:73 circuits/tables/circuits.py:63 -#: circuits/tables/providers.py:66 templates/circuits/circuit.html:22 -#: templates/circuits/provideraccount.html:24 +#: netbox/circuits/forms/filtersets.py:73 +#: netbox/circuits/tables/circuits.py:63 +#: netbox/circuits/tables/providers.py:66 +#: netbox/templates/circuits/circuit.html:22 +#: netbox/templates/circuits/provideraccount.html:24 msgid "Account" msgstr "アカウント" -#: circuits/forms/filtersets.py:217 +#: netbox/circuits/forms/filtersets.py:217 msgid "Term Side" msgstr "タームサイド" -#: circuits/forms/filtersets.py:250 extras/forms/model_forms.py:582 -#: ipam/forms/filtersets.py:142 ipam/forms/filtersets.py:546 -#: ipam/forms/model_forms.py:323 templates/extras/configcontext.html:60 -#: templates/ipam/ipaddress.html:59 templates/ipam/vlan_edit.html:30 -#: tenancy/forms/filtersets.py:87 users/forms/model_forms.py:314 +#: 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/templates/extras/configcontext.html:60 +#: netbox/templates/ipam/ipaddress.html:59 +#: netbox/templates/ipam/vlan_edit.html:30 +#: netbox/tenancy/forms/filtersets.py:87 netbox/users/forms/model_forms.py:314 msgid "Assignment" msgstr "割当" -#: circuits/forms/filtersets.py:265 circuits/forms/model_forms.py:195 -#: circuits/tables/circuits.py:155 dcim/forms/bulk_edit.py:117 -#: dcim/forms/bulk_import.py:100 dcim/forms/model_forms.py:117 -#: dcim/tables/sites.py:89 extras/forms/filtersets.py:480 -#: ipam/filtersets.py:999 ipam/forms/bulk_edit.py:493 -#: ipam/forms/bulk_import.py:436 ipam/forms/model_forms.py:528 -#: ipam/tables/fhrp.py:67 ipam/tables/vlans.py:122 ipam/tables/vlans.py:226 -#: templates/circuits/circuitgroupassignment.html:22 -#: templates/dcim/interface.html:284 templates/dcim/site.html:37 -#: templates/ipam/inc/panels/fhrp_groups.html:23 templates/ipam/vlan.html:27 -#: templates/tenancy/contact.html:21 templates/tenancy/tenant.html:20 -#: templates/users/group.html:6 templates/users/group.html:14 -#: templates/virtualization/cluster.html:29 templates/vpn/tunnel.html:29 -#: templates/wireless/wirelesslan.html:18 tenancy/forms/bulk_edit.py:43 -#: tenancy/forms/bulk_edit.py:94 tenancy/forms/bulk_import.py:40 -#: tenancy/forms/bulk_import.py:81 tenancy/forms/filtersets.py:48 -#: tenancy/forms/filtersets.py:78 tenancy/forms/filtersets.py:97 -#: tenancy/forms/model_forms.py:45 tenancy/forms/model_forms.py:97 -#: tenancy/forms/model_forms.py:122 tenancy/tables/contacts.py:60 -#: tenancy/tables/contacts.py:107 tenancy/tables/tenants.py:42 -#: users/filtersets.py:62 users/filtersets.py:185 users/forms/filtersets.py:31 -#: users/forms/filtersets.py:37 users/forms/filtersets.py:79 -#: virtualization/forms/bulk_edit.py:65 virtualization/forms/bulk_import.py:47 -#: virtualization/forms/filtersets.py:85 -#: virtualization/forms/model_forms.py:66 virtualization/tables/clusters.py:70 -#: vpn/forms/bulk_edit.py:112 vpn/forms/bulk_import.py:158 -#: vpn/forms/filtersets.py:116 vpn/tables/crypto.py:31 -#: vpn/tables/tunnels.py:44 wireless/forms/bulk_edit.py:48 -#: wireless/forms/bulk_import.py:36 wireless/forms/filtersets.py:46 -#: wireless/forms/model_forms.py:40 wireless/tables/wirelesslan.py:48 +#: netbox/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/templates/circuits/circuitgroupassignment.html:22 +#: netbox/templates/dcim/interface.html:284 netbox/templates/dcim/site.html:37 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:23 +#: netbox/templates/ipam/vlan.html:27 netbox/templates/tenancy/contact.html:21 +#: netbox/templates/tenancy/tenant.html:20 netbox/templates/users/group.html:6 +#: netbox/templates/users/group.html:14 +#: netbox/templates/virtualization/cluster.html:29 +#: netbox/templates/vpn/tunnel.html:29 +#: netbox/templates/wireless/wirelesslan.html:18 +#: netbox/tenancy/forms/bulk_edit.py:43 netbox/tenancy/forms/bulk_edit.py:94 +#: netbox/tenancy/forms/bulk_import.py:40 +#: netbox/tenancy/forms/bulk_import.py:81 +#: netbox/tenancy/forms/filtersets.py:48 netbox/tenancy/forms/filtersets.py:78 +#: netbox/tenancy/forms/filtersets.py:97 +#: netbox/tenancy/forms/model_forms.py:45 +#: netbox/tenancy/forms/model_forms.py:97 +#: netbox/tenancy/forms/model_forms.py:122 +#: netbox/tenancy/tables/contacts.py:60 netbox/tenancy/tables/contacts.py:107 +#: netbox/tenancy/tables/tenants.py:42 netbox/users/filtersets.py: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/tables/clusters.py:70 +#: netbox/vpn/forms/bulk_edit.py:112 netbox/vpn/forms/bulk_import.py:158 +#: netbox/vpn/forms/filtersets.py:116 netbox/vpn/tables/crypto.py:31 +#: netbox/vpn/tables/tunnels.py:44 netbox/wireless/forms/bulk_edit.py:48 +#: netbox/wireless/forms/bulk_import.py:36 +#: netbox/wireless/forms/filtersets.py:46 +#: netbox/wireless/forms/model_forms.py:40 +#: netbox/wireless/tables/wirelesslan.py:48 msgid "Group" msgstr "グループ" -#: circuits/forms/model_forms.py:182 templates/circuits/circuitgroup.html:25 +#: netbox/circuits/forms/model_forms.py:182 +#: netbox/templates/circuits/circuitgroup.html:25 msgid "Circuit Group" msgstr "回線グループ" -#: circuits/models/circuits.py:27 dcim/models/cables.py:67 -#: dcim/models/device_component_templates.py:517 -#: dcim/models/device_component_templates.py:617 -#: dcim/models/device_components.py:975 dcim/models/device_components.py:1049 -#: dcim/models/device_components.py:1204 dcim/models/devices.py:479 -#: dcim/models/racks.py:224 extras/models/tags.py:28 +#: 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/extras/models/tags.py:28 msgid "color" msgstr "色" -#: circuits/models/circuits.py:36 +#: netbox/circuits/models/circuits.py:36 msgid "circuit type" msgstr "回線タイプ" -#: circuits/models/circuits.py:37 +#: netbox/circuits/models/circuits.py:37 msgid "circuit types" msgstr "回線タイプ" -#: circuits/models/circuits.py:48 +#: netbox/circuits/models/circuits.py:48 msgid "circuit ID" msgstr "回線 ID" -#: circuits/models/circuits.py:49 +#: netbox/circuits/models/circuits.py:49 msgid "Unique circuit ID" msgstr "一意な回線 ID" -#: circuits/models/circuits.py:69 core/models/data.py:52 -#: core/models/jobs.py:84 dcim/models/cables.py:49 dcim/models/devices.py:653 -#: dcim/models/devices.py:1173 dcim/models/devices.py:1399 -#: dcim/models/power.py:96 dcim/models/racks.py:297 dcim/models/sites.py:154 -#: dcim/models/sites.py:266 ipam/models/ip.py:253 ipam/models/ip.py:522 -#: ipam/models/ip.py:730 ipam/models/vlans.py:195 -#: virtualization/models/clusters.py:74 -#: virtualization/models/virtualmachines.py:84 vpn/models/tunnels.py:40 -#: wireless/models.py:95 wireless/models.py:159 +#: 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 msgid "status" msgstr "状態" -#: circuits/models/circuits.py:84 templates/core/plugin.html:20 +#: netbox/circuits/models/circuits.py:84 netbox/templates/core/plugin.html:20 msgid "installed" msgstr "開通済" -#: circuits/models/circuits.py:89 +#: netbox/circuits/models/circuits.py:89 msgid "terminates" msgstr "終端" -#: circuits/models/circuits.py:94 +#: netbox/circuits/models/circuits.py:94 msgid "commit rate (Kbps)" msgstr "保証帯域 (Kbps)" -#: circuits/models/circuits.py:95 +#: netbox/circuits/models/circuits.py:95 msgid "Committed rate" msgstr "保証帯域" -#: circuits/models/circuits.py:137 +#: netbox/circuits/models/circuits.py:137 msgid "circuit" msgstr "回線" -#: circuits/models/circuits.py:138 +#: netbox/circuits/models/circuits.py:138 msgid "circuits" msgstr "回線" -#: circuits/models/circuits.py:170 +#: netbox/circuits/models/circuits.py:170 msgid "circuit group" msgstr "回線グループ" -#: circuits/models/circuits.py:171 +#: netbox/circuits/models/circuits.py:171 msgid "circuit groups" msgstr "回線グループ" -#: circuits/models/circuits.py:195 ipam/models/fhrp.py:93 -#: tenancy/models/contacts.py:134 +#: netbox/circuits/models/circuits.py:195 netbox/ipam/models/fhrp.py:93 +#: netbox/tenancy/models/contacts.py:134 msgid "priority" msgstr "優先度" -#: circuits/models/circuits.py:213 +#: netbox/circuits/models/circuits.py:213 msgid "Circuit group assignment" msgstr "割当回線グループ" -#: circuits/models/circuits.py:214 +#: netbox/circuits/models/circuits.py:214 msgid "Circuit group assignments" msgstr "割当回線グループ" -#: circuits/models/circuits.py:240 +#: netbox/circuits/models/circuits.py:240 msgid "termination" msgstr "終端" -#: circuits/models/circuits.py:257 +#: netbox/circuits/models/circuits.py:257 msgid "port speed (Kbps)" msgstr "ポート速度 (Kbps)" -#: circuits/models/circuits.py:260 +#: netbox/circuits/models/circuits.py:260 msgid "Physical circuit speed" msgstr "物理回線速度" -#: circuits/models/circuits.py:265 +#: netbox/circuits/models/circuits.py:265 msgid "upstream speed (Kbps)" msgstr "アップストリーム速度 (Kbps)" -#: circuits/models/circuits.py:266 +#: netbox/circuits/models/circuits.py:266 msgid "Upstream speed, if different from port speed" msgstr "アップストリーム速度 (ポート速度と異なる場合)" -#: circuits/models/circuits.py:271 +#: netbox/circuits/models/circuits.py:271 msgid "cross-connect ID" msgstr "クロスコネクト ID" -#: circuits/models/circuits.py:272 +#: netbox/circuits/models/circuits.py:272 msgid "ID of the local cross-connect" msgstr "ローカル・クロスコネクトの ID" -#: circuits/models/circuits.py:277 +#: netbox/circuits/models/circuits.py:277 msgid "patch panel/port(s)" msgstr "パッチパネル/ポート" -#: circuits/models/circuits.py:278 +#: netbox/circuits/models/circuits.py:278 msgid "Patch panel ID and port number(s)" msgstr "パッチパネル ID とポート番号" -#: circuits/models/circuits.py:281 -#: dcim/models/device_component_templates.py:61 -#: dcim/models/device_components.py:68 dcim/models/racks.py:685 -#: extras/models/configs.py:45 extras/models/configs.py:219 -#: extras/models/customfields.py:125 extras/models/models.py:61 -#: extras/models/models.py:158 extras/models/models.py:396 -#: extras/models/models.py:511 extras/models/notifications.py:131 -#: extras/models/staging.py:31 extras/models/tags.py:32 -#: netbox/models/__init__.py:110 netbox/models/__init__.py:145 -#: netbox/models/__init__.py:191 users/models/permissions.py:24 -#: users/models/tokens.py:57 users/models/users.py:33 -#: virtualization/models/virtualmachines.py:289 +#: 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/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 msgid "description" msgstr "説明" -#: circuits/models/circuits.py:294 +#: netbox/circuits/models/circuits.py:294 msgid "circuit termination" msgstr "回線終端" -#: circuits/models/circuits.py:295 +#: netbox/circuits/models/circuits.py:295 msgid "circuit terminations" msgstr "回線終端" -#: circuits/models/circuits.py:308 +#: netbox/circuits/models/circuits.py:308 msgid "" "A circuit termination must attach to either a site or a provider network." msgstr "回線終端は、サイトまたはプロバイダーネットワークに接続する必要があります。" -#: circuits/models/circuits.py:310 +#: netbox/circuits/models/circuits.py:310 msgid "" "A circuit termination cannot attach to both a site and a provider network." msgstr "回線終端をサイトとプロバイダーネットワークの両方に接続することはできません。" -#: circuits/models/providers.py:22 circuits/models/providers.py:66 -#: circuits/models/providers.py:104 core/models/data.py:39 -#: core/models/jobs.py:45 dcim/models/device_component_templates.py:43 -#: dcim/models/device_components.py:53 dcim/models/devices.py:593 -#: dcim/models/devices.py:1330 dcim/models/devices.py:1395 -#: dcim/models/power.py:39 dcim/models/power.py:92 dcim/models/racks.py:262 -#: dcim/models/sites.py:138 extras/models/configs.py:36 -#: extras/models/configs.py:215 extras/models/customfields.py:92 -#: extras/models/models.py:56 extras/models/models.py:153 -#: extras/models/models.py:296 extras/models/models.py:392 -#: extras/models/models.py:501 extras/models/models.py:596 -#: extras/models/notifications.py:126 extras/models/scripts.py:30 -#: extras/models/staging.py:26 ipam/models/asns.py:18 ipam/models/fhrp.py:25 -#: ipam/models/services.py:52 ipam/models/services.py:88 -#: ipam/models/vlans.py:36 ipam/models/vlans.py:184 ipam/models/vrfs.py:22 -#: ipam/models/vrfs.py:79 netbox/models/__init__.py:137 -#: netbox/models/__init__.py:181 tenancy/models/contacts.py:64 -#: tenancy/models/tenants.py:20 tenancy/models/tenants.py:45 -#: users/models/permissions.py:20 users/models/users.py:28 -#: virtualization/models/clusters.py:57 -#: virtualization/models/virtualmachines.py:72 -#: virtualization/models/virtualmachines.py:279 vpn/models/crypto.py:24 -#: vpn/models/crypto.py:71 vpn/models/crypto.py:131 vpn/models/crypto.py:183 -#: vpn/models/crypto.py:221 vpn/models/l2vpn.py:22 vpn/models/tunnels.py:35 -#: wireless/models.py:51 +#: 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/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/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 msgid "name" msgstr "名前" -#: circuits/models/providers.py:25 +#: netbox/circuits/models/providers.py:25 msgid "Full name of the provider" msgstr "プロバイダのフルネーム" -#: circuits/models/providers.py:28 dcim/models/devices.py:86 -#: dcim/models/racks.py:137 dcim/models/sites.py:149 -#: extras/models/models.py:506 ipam/models/asns.py:23 ipam/models/vlans.py:40 -#: netbox/models/__init__.py:141 netbox/models/__init__.py:186 -#: tenancy/models/tenants.py:25 tenancy/models/tenants.py:49 -#: vpn/models/l2vpn.py:27 wireless/models.py:56 +#: netbox/circuits/models/providers.py:28 netbox/dcim/models/devices.py:86 +#: 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 msgid "slug" msgstr "slug" -#: circuits/models/providers.py:42 +#: netbox/circuits/models/providers.py:42 msgid "provider" msgstr "プロバイダ" -#: circuits/models/providers.py:43 +#: netbox/circuits/models/providers.py:43 msgid "providers" msgstr "プロバイダ" -#: circuits/models/providers.py:63 +#: netbox/circuits/models/providers.py:63 msgid "account ID" msgstr "アカウント ID" -#: circuits/models/providers.py:86 +#: netbox/circuits/models/providers.py:86 msgid "provider account" msgstr "プロバイダアカウント" -#: circuits/models/providers.py:87 +#: netbox/circuits/models/providers.py:87 msgid "provider accounts" msgstr "プロバイダアカウント" -#: circuits/models/providers.py:115 +#: netbox/circuits/models/providers.py:115 msgid "service ID" msgstr "サービス ID" -#: circuits/models/providers.py:126 +#: netbox/circuits/models/providers.py:126 msgid "provider network" msgstr "プロバイダネットワーク" -#: circuits/models/providers.py:127 +#: netbox/circuits/models/providers.py:127 msgid "provider networks" msgstr "プロバイダネットワーク" -#: circuits/tables/circuits.py:32 circuits/tables/circuits.py:132 -#: circuits/tables/providers.py:18 circuits/tables/providers.py:69 -#: circuits/tables/providers.py:99 core/tables/data.py:16 -#: core/tables/jobs.py:14 core/tables/plugins.py:44 core/tables/tasks.py:11 -#: core/tables/tasks.py:115 dcim/forms/filtersets.py:63 -#: dcim/forms/object_create.py:43 dcim/tables/devices.py:52 -#: dcim/tables/devices.py:92 dcim/tables/devices.py:134 -#: dcim/tables/devices.py:289 dcim/tables/devices.py:392 -#: dcim/tables/devices.py:433 dcim/tables/devices.py:482 -#: dcim/tables/devices.py:531 dcim/tables/devices.py:648 -#: dcim/tables/devices.py:731 dcim/tables/devices.py:778 -#: dcim/tables/devices.py:841 dcim/tables/devices.py:911 -#: dcim/tables/devices.py:974 dcim/tables/devices.py:994 -#: dcim/tables/devices.py:1023 dcim/tables/devices.py:1053 -#: dcim/tables/devicetypes.py:31 dcim/tables/power.py:22 -#: dcim/tables/power.py:62 dcim/tables/racks.py:24 dcim/tables/racks.py:113 -#: dcim/tables/sites.py:24 dcim/tables/sites.py:51 dcim/tables/sites.py:78 -#: dcim/tables/sites.py:130 extras/forms/filtersets.py:213 -#: extras/tables/tables.py:58 extras/tables/tables.py:122 -#: extras/tables/tables.py:155 extras/tables/tables.py:180 -#: extras/tables/tables.py:246 extras/tables/tables.py:361 -#: extras/tables/tables.py:378 extras/tables/tables.py:401 -#: extras/tables/tables.py:439 extras/tables/tables.py:491 -#: extras/tables/tables.py:514 ipam/forms/bulk_edit.py:407 -#: ipam/forms/filtersets.py:386 ipam/tables/asn.py:16 ipam/tables/ip.py:85 -#: ipam/tables/ip.py:160 ipam/tables/services.py:15 ipam/tables/services.py:40 -#: ipam/tables/vlans.py:64 ipam/tables/vlans.py:114 ipam/tables/vrfs.py:26 -#: ipam/tables/vrfs.py:68 templates/circuits/circuitgroup.html:28 -#: templates/circuits/circuittype.html:22 -#: templates/circuits/provideraccount.html:28 -#: templates/circuits/providernetwork.html:24 -#: templates/core/datasource.html:34 templates/core/job.html:44 -#: templates/core/plugin.html:54 templates/core/rq_worker.html:43 -#: templates/dcim/consoleport.html:28 templates/dcim/consoleserverport.html:28 -#: templates/dcim/devicebay.html:24 templates/dcim/devicerole.html:26 -#: templates/dcim/frontport.html:28 -#: templates/dcim/inc/interface_vlans_table.html:5 -#: templates/dcim/inc/panels/inventory_items.html:18 -#: templates/dcim/interface.html:38 templates/dcim/interface.html:165 -#: templates/dcim/inventoryitem.html:28 -#: templates/dcim/inventoryitemrole.html:18 templates/dcim/location.html:29 -#: templates/dcim/manufacturer.html:36 templates/dcim/modulebay.html:30 -#: templates/dcim/platform.html:29 templates/dcim/poweroutlet.html:28 -#: templates/dcim/powerport.html:28 templates/dcim/rackrole.html:22 -#: templates/dcim/rearport.html:28 templates/dcim/region.html:29 -#: templates/dcim/sitegroup.html:29 -#: templates/dcim/virtualdevicecontext.html:18 -#: templates/extras/configcontext.html:13 -#: templates/extras/configtemplate.html:13 -#: templates/extras/customfield.html:13 templates/extras/customlink.html:13 -#: templates/extras/eventrule.html:13 templates/extras/exporttemplate.html:15 -#: templates/extras/notificationgroup.html:14 -#: templates/extras/savedfilter.html:13 templates/extras/script_list.html:44 -#: templates/extras/tag.html:14 templates/extras/webhook.html:13 -#: templates/ipam/asnrange.html:15 templates/ipam/fhrpgroup.html:30 -#: templates/ipam/rir.html:22 templates/ipam/role.html:22 -#: templates/ipam/routetarget.html:13 templates/ipam/service.html:24 -#: templates/ipam/servicetemplate.html:15 templates/ipam/vlan.html:35 -#: templates/ipam/vlangroup.html:30 templates/tenancy/contact.html:25 -#: templates/tenancy/contactgroup.html:21 -#: templates/tenancy/contactrole.html:18 templates/tenancy/tenantgroup.html:29 -#: templates/users/group.html:17 templates/users/objectpermission.html:17 -#: templates/virtualization/cluster.html:13 -#: templates/virtualization/clustergroup.html:22 -#: templates/virtualization/clustertype.html:22 -#: templates/virtualization/virtualdisk.html:25 -#: templates/virtualization/virtualmachine.html:15 -#: templates/virtualization/vminterface.html:25 -#: templates/vpn/ikepolicy.html:13 templates/vpn/ikeproposal.html:13 -#: templates/vpn/ipsecpolicy.html:13 templates/vpn/ipsecprofile.html:13 -#: templates/vpn/ipsecprofile.html:36 templates/vpn/ipsecprofile.html:69 -#: templates/vpn/ipsecproposal.html:13 templates/vpn/l2vpn.html:14 -#: templates/vpn/tunnel.html:21 templates/vpn/tunnelgroup.html:26 -#: templates/wireless/wirelesslangroup.html:29 tenancy/tables/contacts.py:19 -#: tenancy/tables/contacts.py:41 tenancy/tables/contacts.py:56 -#: tenancy/tables/tenants.py:16 tenancy/tables/tenants.py:38 -#: users/tables.py:62 users/tables.py:76 -#: virtualization/forms/bulk_create.py:20 -#: virtualization/forms/object_create.py:13 -#: virtualization/forms/object_create.py:23 -#: virtualization/tables/clusters.py:17 virtualization/tables/clusters.py:39 -#: virtualization/tables/clusters.py:62 -#: virtualization/tables/virtualmachines.py:55 -#: virtualization/tables/virtualmachines.py:139 -#: virtualization/tables/virtualmachines.py:194 vpn/tables/crypto.py:18 -#: vpn/tables/crypto.py:57 vpn/tables/crypto.py:93 vpn/tables/crypto.py:129 -#: vpn/tables/crypto.py:158 vpn/tables/l2vpn.py:23 vpn/tables/tunnels.py:18 -#: vpn/tables/tunnels.py:40 wireless/tables/wirelesslan.py:18 -#: wireless/tables/wirelesslan.py:79 +#: netbox/circuits/tables/circuits.py:32 +#: netbox/circuits/tables/circuits.py:132 +#: netbox/circuits/tables/providers.py:18 +#: netbox/circuits/tables/providers.py:69 +#: netbox/circuits/tables/providers.py:99 netbox/core/tables/data.py:16 +#: netbox/core/tables/jobs.py:14 netbox/core/tables/plugins.py: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/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/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/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/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 +#: netbox/templates/dcim/consoleserverport.html:28 +#: netbox/templates/dcim/devicebay.html:24 +#: netbox/templates/dcim/devicerole.html:26 +#: netbox/templates/dcim/frontport.html:28 +#: netbox/templates/dcim/inc/interface_vlans_table.html:5 +#: netbox/templates/dcim/inc/panels/inventory_items.html:18 +#: netbox/templates/dcim/interface.html:38 +#: netbox/templates/dcim/interface.html:165 +#: netbox/templates/dcim/inventoryitem.html:28 +#: netbox/templates/dcim/inventoryitemrole.html:18 +#: netbox/templates/dcim/location.html:29 +#: netbox/templates/dcim/manufacturer.html:36 +#: netbox/templates/dcim/modulebay.html:30 +#: netbox/templates/dcim/platform.html:29 +#: netbox/templates/dcim/poweroutlet.html:28 +#: netbox/templates/dcim/powerport.html:28 +#: netbox/templates/dcim/rackrole.html:22 +#: netbox/templates/dcim/rearport.html:28 netbox/templates/dcim/region.html:29 +#: netbox/templates/dcim/sitegroup.html:29 +#: netbox/templates/dcim/virtualdevicecontext.html:18 +#: netbox/templates/extras/configcontext.html:13 +#: netbox/templates/extras/configtemplate.html:13 +#: netbox/templates/extras/customfield.html:13 +#: netbox/templates/extras/customlink.html:13 +#: netbox/templates/extras/eventrule.html:13 +#: netbox/templates/extras/exporttemplate.html:15 +#: netbox/templates/extras/notificationgroup.html:14 +#: netbox/templates/extras/savedfilter.html:13 +#: netbox/templates/extras/script_list.html:45 +#: netbox/templates/extras/tag.html:14 netbox/templates/extras/webhook.html:13 +#: netbox/templates/ipam/asnrange.html:15 +#: netbox/templates/ipam/fhrpgroup.html:30 netbox/templates/ipam/rir.html:22 +#: netbox/templates/ipam/role.html:22 +#: netbox/templates/ipam/routetarget.html:13 +#: netbox/templates/ipam/service.html:24 +#: netbox/templates/ipam/servicetemplate.html:15 +#: netbox/templates/ipam/vlan.html:35 netbox/templates/ipam/vlangroup.html:30 +#: netbox/templates/tenancy/contact.html:25 +#: netbox/templates/tenancy/contactgroup.html:21 +#: netbox/templates/tenancy/contactrole.html:18 +#: netbox/templates/tenancy/tenantgroup.html:29 +#: netbox/templates/users/group.html:17 +#: netbox/templates/users/objectpermission.html:17 +#: netbox/templates/virtualization/cluster.html:13 +#: netbox/templates/virtualization/clustergroup.html:22 +#: netbox/templates/virtualization/clustertype.html:22 +#: netbox/templates/virtualization/virtualdisk.html:25 +#: netbox/templates/virtualization/virtualmachine.html:15 +#: netbox/templates/virtualization/vminterface.html:25 +#: netbox/templates/vpn/ikepolicy.html:13 +#: netbox/templates/vpn/ikeproposal.html:13 +#: netbox/templates/vpn/ipsecpolicy.html:13 +#: netbox/templates/vpn/ipsecprofile.html:13 +#: netbox/templates/vpn/ipsecprofile.html:36 +#: netbox/templates/vpn/ipsecprofile.html:69 +#: netbox/templates/vpn/ipsecproposal.html:13 +#: netbox/templates/vpn/l2vpn.html:14 netbox/templates/vpn/tunnel.html:21 +#: netbox/templates/vpn/tunnelgroup.html:26 +#: netbox/templates/wireless/wirelesslangroup.html:29 +#: netbox/tenancy/tables/contacts.py:19 netbox/tenancy/tables/contacts.py:41 +#: netbox/tenancy/tables/contacts.py:56 netbox/tenancy/tables/tenants.py:16 +#: netbox/tenancy/tables/tenants.py:38 netbox/users/tables.py:62 +#: netbox/users/tables.py:76 netbox/virtualization/forms/bulk_create.py:20 +#: netbox/virtualization/forms/object_create.py:13 +#: netbox/virtualization/forms/object_create.py:23 +#: netbox/virtualization/tables/clusters.py:17 +#: netbox/virtualization/tables/clusters.py:39 +#: netbox/virtualization/tables/clusters.py:62 +#: netbox/virtualization/tables/virtualmachines.py:55 +#: netbox/virtualization/tables/virtualmachines.py:139 +#: netbox/virtualization/tables/virtualmachines.py:194 +#: netbox/vpn/tables/crypto.py:18 netbox/vpn/tables/crypto.py:57 +#: netbox/vpn/tables/crypto.py:93 netbox/vpn/tables/crypto.py:129 +#: netbox/vpn/tables/crypto.py:158 netbox/vpn/tables/l2vpn.py:23 +#: netbox/vpn/tables/tunnels.py:18 netbox/vpn/tables/tunnels.py:40 +#: netbox/wireless/tables/wirelesslan.py:18 +#: netbox/wireless/tables/wirelesslan.py:79 msgid "Name" msgstr "名前" -#: circuits/tables/circuits.py:41 circuits/tables/circuits.py:138 -#: circuits/tables/providers.py:45 circuits/tables/providers.py:79 -#: netbox/navigation/menu.py:266 netbox/navigation/menu.py:270 -#: netbox/navigation/menu.py:272 templates/circuits/provider.html:57 -#: templates/circuits/provideraccount.html:44 -#: templates/circuits/providernetwork.html:50 +#: 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/templates/circuits/provider.html:57 +#: netbox/templates/circuits/provideraccount.html:44 +#: netbox/templates/circuits/providernetwork.html:50 msgid "Circuits" msgstr "回線" -#: circuits/tables/circuits.py:55 templates/circuits/circuit.html:26 +#: netbox/circuits/tables/circuits.py:55 +#: netbox/templates/circuits/circuit.html:26 msgid "Circuit ID" msgstr "回線 ID" -#: circuits/tables/circuits.py:69 wireless/forms/model_forms.py:160 +#: netbox/circuits/tables/circuits.py:69 +#: netbox/wireless/forms/model_forms.py:160 msgid "Side A" msgstr "サイド A" -#: circuits/tables/circuits.py:74 +#: netbox/circuits/tables/circuits.py:74 msgid "Side Z" msgstr "サイド Z" -#: circuits/tables/circuits.py:77 templates/circuits/circuit.html:55 +#: netbox/circuits/tables/circuits.py:77 +#: netbox/templates/circuits/circuit.html:55 msgid "Commit Rate" msgstr "保証帯域" -#: circuits/tables/circuits.py:80 circuits/tables/providers.py:48 -#: circuits/tables/providers.py:82 circuits/tables/providers.py:107 -#: dcim/tables/devices.py:1036 dcim/tables/devicetypes.py:92 -#: dcim/tables/modules.py:29 dcim/tables/modules.py:72 dcim/tables/power.py:39 -#: dcim/tables/power.py:96 dcim/tables/racks.py:84 dcim/tables/racks.py:145 -#: dcim/tables/racks.py:225 dcim/tables/sites.py:108 -#: extras/tables/tables.py:582 ipam/tables/asn.py:69 ipam/tables/fhrp.py:34 -#: ipam/tables/ip.py:136 ipam/tables/ip.py:275 ipam/tables/ip.py:329 -#: ipam/tables/ip.py:397 ipam/tables/services.py:24 ipam/tables/services.py:54 -#: ipam/tables/vlans.py:145 ipam/tables/vrfs.py:47 ipam/tables/vrfs.py:72 -#: templates/dcim/htmx/cable_edit.html:89 templates/generic/bulk_edit.html:86 -#: templates/inc/panels/comments.html:5 tenancy/tables/contacts.py:68 -#: tenancy/tables/tenants.py:46 utilities/forms/fields/fields.py:29 -#: virtualization/tables/clusters.py:91 -#: virtualization/tables/virtualmachines.py:82 vpn/tables/crypto.py:37 -#: vpn/tables/crypto.py:74 vpn/tables/crypto.py:109 vpn/tables/crypto.py:140 -#: vpn/tables/crypto.py:173 vpn/tables/l2vpn.py:37 vpn/tables/tunnels.py:61 -#: wireless/tables/wirelesslan.py:27 wireless/tables/wirelesslan.py:58 +#: netbox/circuits/tables/circuits.py: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:72 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/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/vpn/tables/crypto.py:37 netbox/vpn/tables/crypto.py:74 +#: netbox/vpn/tables/crypto.py:109 netbox/vpn/tables/crypto.py:140 +#: netbox/vpn/tables/crypto.py:173 netbox/vpn/tables/l2vpn.py:37 +#: netbox/vpn/tables/tunnels.py:61 netbox/wireless/tables/wirelesslan.py:27 +#: netbox/wireless/tables/wirelesslan.py:58 msgid "Comments" msgstr "コメント" -#: circuits/tables/circuits.py:86 templates/tenancy/contact.html:84 -#: tenancy/tables/contacts.py:73 +#: netbox/circuits/tables/circuits.py:86 +#: netbox/templates/tenancy/contact.html:84 +#: netbox/tenancy/tables/contacts.py:73 msgid "Assignments" msgstr "アサイメント" -#: circuits/tables/providers.py:23 +#: netbox/circuits/tables/providers.py:23 msgid "Accounts" msgstr "アカウント" -#: circuits/tables/providers.py:29 +#: netbox/circuits/tables/providers.py:29 msgid "Account Count" msgstr "アカウント数" -#: circuits/tables/providers.py:39 dcim/tables/sites.py:100 +#: netbox/circuits/tables/providers.py:39 netbox/dcim/tables/sites.py:100 msgid "ASN Count" msgstr "ASN 数" -#: circuits/views.py:331 +#: netbox/circuits/views.py:331 #, python-brace-format msgid "No terminations have been defined for circuit {circuit}." msgstr "回路には終端が定義されていません {circuit}。" -#: circuits/views.py:380 +#: netbox/circuits/views.py:380 #, python-brace-format msgid "Swapped terminations for circuit {circuit}." msgstr "回路のスワップ端子 {circuit}。" -#: core/api/views.py:39 +#: netbox/core/api/views.py:39 msgid "This user does not have permission to synchronize this data source." msgstr "このユーザーには、このデータソースを同期する権限がありません。" -#: core/choices.py:18 +#: netbox/core/choices.py:18 msgid "New" msgstr "新規" -#: core/choices.py:19 core/constants.py:18 core/tables/tasks.py:15 -#: templates/core/rq_task.html:77 +#: netbox/core/choices.py:19 netbox/core/constants.py:18 +#: netbox/core/tables/tasks.py:15 netbox/templates/core/rq_task.html:77 msgid "Queued" msgstr "処理待ち" -#: core/choices.py:20 +#: netbox/core/choices.py:20 msgid "Syncing" msgstr "同期中" -#: core/choices.py:21 core/choices.py:57 core/tables/jobs.py:41 -#: templates/core/job.html:86 +#: netbox/core/choices.py:21 netbox/core/choices.py:57 +#: netbox/core/tables/jobs.py:41 netbox/templates/core/job.html:86 msgid "Completed" msgstr "完了" -#: core/choices.py:22 core/choices.py:59 core/constants.py:20 -#: core/tables/tasks.py:34 dcim/choices.py:187 dcim/choices.py:239 -#: dcim/choices.py:1607 virtualization/choices.py:47 +#: netbox/core/choices.py:22 netbox/core/choices.py:59 +#: netbox/core/constants.py:20 netbox/core/tables/tasks.py:34 +#: netbox/dcim/choices.py:187 netbox/dcim/choices.py:239 +#: netbox/dcim/choices.py:1609 netbox/virtualization/choices.py:47 msgid "Failed" msgstr "失敗" -#: core/choices.py:35 netbox/navigation/menu.py:335 -#: netbox/navigation/menu.py:339 templates/extras/script/base.html:14 -#: templates/extras/script_list.html:7 templates/extras/script_list.html:12 -#: templates/extras/script_result.html:17 +#: netbox/core/choices.py:35 netbox/netbox/navigation/menu.py:335 +#: netbox/netbox/navigation/menu.py:339 +#: netbox/templates/extras/script/base.html:14 +#: netbox/templates/extras/script_list.html:7 +#: netbox/templates/extras/script_list.html:12 +#: netbox/templates/extras/script_result.html:17 msgid "Scripts" msgstr "スクリプト" -#: core/choices.py:36 templates/extras/report/base.html:13 +#: netbox/core/choices.py:36 netbox/templates/extras/report/base.html:13 msgid "Reports" msgstr "レポート" -#: core/choices.py:54 +#: netbox/core/choices.py:54 msgid "Pending" msgstr "保留中" -#: core/choices.py:55 core/constants.py:23 core/tables/jobs.py:32 -#: core/tables/tasks.py:38 templates/core/job.html:73 +#: netbox/core/choices.py:55 netbox/core/constants.py:23 +#: netbox/core/tables/jobs.py:32 netbox/core/tables/tasks.py:38 +#: netbox/templates/core/job.html:73 msgid "Scheduled" msgstr "予定済" -#: core/choices.py:56 +#: netbox/core/choices.py:56 msgid "Running" msgstr "実行中" -#: core/choices.py:58 +#: netbox/core/choices.py:58 msgid "Errored" msgstr "エラー" -#: core/choices.py:87 core/tables/plugins.py:63 -#: templates/generic/object.html:61 +#: netbox/core/choices.py:87 netbox/core/tables/plugins.py:63 +#: netbox/templates/generic/object.html:61 msgid "Updated" msgstr "更新" -#: core/choices.py:88 +#: netbox/core/choices.py:88 msgid "Deleted" msgstr "削除" -#: core/constants.py:19 core/tables/tasks.py:30 +#: netbox/core/constants.py:19 netbox/core/tables/tasks.py:30 msgid "Finished" msgstr "終了しました" -#: core/constants.py:21 core/tables/jobs.py:38 templates/core/job.html:82 -#: templates/extras/htmx/script_result.html:8 +#: netbox/core/constants.py:21 netbox/core/tables/jobs.py:38 +#: netbox/templates/core/job.html:82 +#: netbox/templates/extras/htmx/script_result.html:8 msgid "Started" msgstr "開始日時" -#: core/constants.py:22 core/tables/tasks.py:26 +#: netbox/core/constants.py:22 netbox/core/tables/tasks.py:26 msgid "Deferred" msgstr "延期" -#: core/constants.py:24 +#: netbox/core/constants.py:24 msgid "Stopped" msgstr "停止しました" -#: core/constants.py:25 +#: netbox/core/constants.py:25 msgid "Cancelled" msgstr "キャンセルされました" -#: core/data_backends.py:32 core/tables/plugins.py:51 -#: templates/core/plugin.html:88 templates/dcim/interface.html:216 +#: netbox/core/data_backends.py:32 netbox/core/tables/plugins.py:51 +#: netbox/templates/core/plugin.html:88 +#: netbox/templates/dcim/interface.html:216 msgid "Local" msgstr "ローカル" -#: core/data_backends.py:50 core/tables/change_logging.py:20 -#: templates/account/profile.html:15 templates/users/user.html:17 -#: users/tables.py:31 +#: netbox/core/data_backends.py:50 netbox/core/tables/change_logging.py:20 +#: netbox/templates/account/profile.html:15 +#: netbox/templates/users/user.html:17 netbox/users/tables.py:31 msgid "Username" msgstr "ユーザ名" -#: core/data_backends.py:52 core/data_backends.py:58 +#: netbox/core/data_backends.py:52 netbox/core/data_backends.py:58 msgid "Only used for cloning with HTTP(S)" msgstr "HTTP (S) でのcloneに使用されます" -#: core/data_backends.py:56 templates/account/base.html:23 -#: templates/account/password.html:12 users/forms/model_forms.py:170 +#: netbox/core/data_backends.py:56 netbox/templates/account/base.html:23 +#: netbox/templates/account/password.html:12 +#: netbox/users/forms/model_forms.py:170 msgid "Password" msgstr "パスワード" -#: core/data_backends.py:62 +#: netbox/core/data_backends.py:62 msgid "Branch" msgstr "ブランチ" -#: core/data_backends.py:120 +#: netbox/core/data_backends.py:120 #, python-brace-format msgid "Fetching remote data failed ({name}): {error}" msgstr "リモートデータの取得に失敗しました ({name}): {error}" -#: core/data_backends.py:133 +#: netbox/core/data_backends.py:133 msgid "AWS access key ID" msgstr "AWS アクセスキー ID" -#: core/data_backends.py:137 +#: netbox/core/data_backends.py:137 msgid "AWS secret access key" msgstr "AWS シークレットアクセスキー" -#: core/events.py:27 +#: netbox/core/events.py:27 msgid "Object created" msgstr "オブジェクトの作成" -#: core/events.py:28 +#: netbox/core/events.py:28 msgid "Object updated" msgstr "オブジェクトの更新" -#: core/events.py:29 +#: netbox/core/events.py:29 msgid "Object deleted" msgstr "オブジェクトの削除" -#: core/events.py:30 +#: netbox/core/events.py:30 msgid "Job started" msgstr "ジョブの開始" -#: core/events.py:31 +#: netbox/core/events.py:31 msgid "Job completed" msgstr "ジョブの完了" -#: core/events.py:32 +#: netbox/core/events.py:32 msgid "Job failed" msgstr "ジョブの失敗" -#: core/events.py:33 +#: netbox/core/events.py:33 msgid "Job errored" msgstr "ジョブのエラー" -#: core/filtersets.py:53 extras/filtersets.py:250 extras/filtersets.py:633 -#: extras/filtersets.py:661 +#: netbox/core/filtersets.py:53 netbox/extras/filtersets.py:250 +#: netbox/extras/filtersets.py:633 netbox/extras/filtersets.py:661 msgid "Data source (ID)" msgstr "データソース (ID)" -#: core/filtersets.py:59 +#: netbox/core/filtersets.py:59 msgid "Data source (name)" msgstr "データソース (名前)" -#: core/filtersets.py:145 dcim/filtersets.py:501 extras/filtersets.py:287 -#: extras/filtersets.py:331 extras/filtersets.py:353 extras/filtersets.py:413 -#: users/filtersets.py:28 +#: netbox/core/filtersets.py:145 netbox/dcim/filtersets.py:501 +#: 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 msgid "User (ID)" msgstr "ユーザ (ID)" -#: core/filtersets.py:151 +#: netbox/core/filtersets.py:151 msgid "User name" msgstr "ユーザ名" -#: core/forms/bulk_edit.py:25 core/forms/filtersets.py:43 -#: core/tables/data.py:26 dcim/forms/bulk_edit.py:1122 -#: dcim/forms/bulk_edit.py:1400 dcim/forms/filtersets.py:1370 -#: dcim/tables/devices.py:553 dcim/tables/devicetypes.py:224 -#: extras/forms/bulk_edit.py:123 extras/forms/bulk_edit.py:187 -#: extras/forms/bulk_edit.py:246 extras/forms/filtersets.py:142 -#: extras/forms/filtersets.py:229 extras/forms/filtersets.py:294 -#: extras/tables/tables.py:162 extras/tables/tables.py:253 -#: extras/tables/tables.py:415 netbox/preferences.py:22 -#: templates/core/datasource.html:42 templates/dcim/interface.html:61 -#: templates/extras/customlink.html:17 templates/extras/eventrule.html:17 -#: templates/extras/savedfilter.html:25 -#: templates/users/objectpermission.html:25 -#: templates/virtualization/vminterface.html:29 users/forms/bulk_edit.py:89 -#: users/forms/filtersets.py:70 users/tables.py:83 -#: virtualization/forms/bulk_edit.py:217 -#: virtualization/forms/filtersets.py:215 +#: 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/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/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 +#: netbox/templates/dcim/interface.html:61 +#: netbox/templates/extras/customlink.html:17 +#: netbox/templates/extras/eventrule.html:17 +#: netbox/templates/extras/savedfilter.html:25 +#: netbox/templates/users/objectpermission.html:25 +#: netbox/templates/virtualization/vminterface.html:29 +#: netbox/users/forms/bulk_edit.py:89 netbox/users/forms/filtersets.py:70 +#: netbox/users/tables.py:83 netbox/virtualization/forms/bulk_edit.py:217 +#: netbox/virtualization/forms/filtersets.py:215 msgid "Enabled" msgstr "有効" -#: core/forms/bulk_edit.py:34 extras/forms/model_forms.py:285 -#: templates/extras/savedfilter.html:52 vpn/forms/filtersets.py:97 -#: vpn/forms/filtersets.py:127 vpn/forms/filtersets.py:151 -#: vpn/forms/filtersets.py:170 vpn/forms/model_forms.py:301 -#: vpn/forms/model_forms.py:321 vpn/forms/model_forms.py:337 -#: vpn/forms/model_forms.py:357 vpn/forms/model_forms.py:380 +#: netbox/core/forms/bulk_edit.py:34 netbox/extras/forms/model_forms.py:285 +#: 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 msgid "Parameters" msgstr "パラメータ" -#: core/forms/bulk_edit.py:38 templates/core/datasource.html:68 +#: netbox/core/forms/bulk_edit.py:38 netbox/templates/core/datasource.html:68 msgid "Ignore rules" msgstr "ignoreルール" -#: core/forms/filtersets.py:30 core/forms/model_forms.py:97 -#: extras/forms/model_forms.py:248 extras/forms/model_forms.py:578 -#: extras/forms/model_forms.py:632 extras/tables/tables.py:191 -#: extras/tables/tables.py:483 extras/tables/tables.py:518 -#: templates/core/datasource.html:31 -#: templates/dcim/device/render_config.html:18 -#: templates/extras/configcontext.html:29 -#: templates/extras/configtemplate.html:21 -#: templates/extras/exporttemplate.html:35 -#: templates/virtualization/virtualmachine/render_config.html:18 +#: netbox/core/forms/filtersets.py: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/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 msgid "Data Source" msgstr "データソース" -#: core/forms/filtersets.py:55 core/forms/mixins.py:21 +#: netbox/core/forms/filtersets.py:55 netbox/core/forms/mixins.py:21 msgid "File" msgstr "ファイル" -#: core/forms/filtersets.py:60 core/forms/mixins.py:16 -#: extras/forms/filtersets.py:170 extras/forms/filtersets.py:328 -#: extras/forms/filtersets.py:413 +#: 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 msgid "Data source" msgstr "データソース" -#: core/forms/filtersets.py:70 extras/forms/filtersets.py:440 +#: netbox/core/forms/filtersets.py:70 netbox/extras/forms/filtersets.py:440 msgid "Creation" msgstr "作成" -#: core/forms/filtersets.py:74 core/forms/filtersets.py:160 -#: extras/forms/filtersets.py:461 extras/tables/tables.py:220 -#: extras/tables/tables.py:294 extras/tables/tables.py:326 -#: extras/tables/tables.py:571 templates/core/job.html:38 -#: templates/core/objectchange.html:52 tenancy/tables/contacts.py:90 -#: vpn/tables/l2vpn.py:59 +#: 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/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 +#: netbox/tenancy/tables/contacts.py:90 netbox/vpn/tables/l2vpn.py:59 msgid "Object Type" msgstr "オブジェクトタイプ" -#: core/forms/filtersets.py:84 +#: netbox/core/forms/filtersets.py:84 msgid "Created after" msgstr "以降に作成" -#: core/forms/filtersets.py:89 +#: netbox/core/forms/filtersets.py:89 msgid "Created before" msgstr "以前に作成" -#: core/forms/filtersets.py:94 +#: netbox/core/forms/filtersets.py:94 msgid "Scheduled after" msgstr "以降に予定" -#: core/forms/filtersets.py:99 +#: netbox/core/forms/filtersets.py:99 msgid "Scheduled before" msgstr "以前に予定" -#: core/forms/filtersets.py:104 +#: netbox/core/forms/filtersets.py:104 msgid "Started after" msgstr "以降に開始" -#: core/forms/filtersets.py:109 +#: netbox/core/forms/filtersets.py:109 msgid "Started before" msgstr "以前に開始" -#: core/forms/filtersets.py:114 +#: netbox/core/forms/filtersets.py:114 msgid "Completed after" msgstr "以降に完了" -#: core/forms/filtersets.py:119 +#: netbox/core/forms/filtersets.py:119 msgid "Completed before" msgstr "以前に完了" -#: core/forms/filtersets.py:126 core/forms/filtersets.py:155 -#: dcim/forms/bulk_edit.py:456 dcim/forms/filtersets.py:418 -#: dcim/forms/filtersets.py:462 dcim/forms/model_forms.py:316 -#: extras/forms/filtersets.py:456 extras/forms/filtersets.py:475 -#: extras/tables/tables.py:302 extras/tables/tables.py:342 -#: templates/core/objectchange.html:36 templates/dcim/rackreservation.html:58 -#: templates/extras/savedfilter.html:21 templates/inc/user_menu.html:33 -#: templates/users/token.html:21 templates/users/user.html:6 -#: templates/users/user.html:14 users/filtersets.py:107 -#: users/filtersets.py:174 users/forms/filtersets.py:84 -#: users/forms/filtersets.py:125 users/forms/model_forms.py:155 -#: users/forms/model_forms.py:192 users/tables.py:19 +#: 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/extras/tables/tables.py:302 netbox/extras/tables/tables.py:342 +#: netbox/templates/core/objectchange.html:36 +#: netbox/templates/dcim/rackreservation.html:58 +#: netbox/templates/extras/savedfilter.html:21 +#: netbox/templates/inc/user_menu.html:33 netbox/templates/users/token.html:21 +#: netbox/templates/users/user.html:6 netbox/templates/users/user.html:14 +#: netbox/users/filtersets.py:107 netbox/users/filtersets.py:174 +#: netbox/users/forms/filtersets.py:84 netbox/users/forms/filtersets.py:125 +#: netbox/users/forms/model_forms.py:155 netbox/users/forms/model_forms.py:192 +#: netbox/users/tables.py:19 msgid "User" msgstr "ユーザ" -#: core/forms/filtersets.py:134 core/tables/change_logging.py:15 -#: extras/tables/tables.py:609 extras/tables/tables.py:646 -#: templates/core/objectchange.html:32 +#: netbox/core/forms/filtersets.py:134 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 "時間" -#: core/forms/filtersets.py:139 extras/forms/filtersets.py:445 +#: netbox/core/forms/filtersets.py:139 netbox/extras/forms/filtersets.py:445 msgid "After" msgstr "以降" -#: core/forms/filtersets.py:144 extras/forms/filtersets.py:450 +#: netbox/core/forms/filtersets.py:144 netbox/extras/forms/filtersets.py:450 msgid "Before" msgstr "以前" -#: core/forms/filtersets.py:148 core/tables/change_logging.py:29 -#: extras/forms/model_forms.py:396 templates/core/objectchange.html:46 -#: templates/extras/eventrule.html:71 +#: netbox/core/forms/filtersets.py:148 netbox/core/tables/change_logging.py:29 +#: netbox/extras/forms/model_forms.py:396 +#: netbox/templates/core/objectchange.html:46 +#: netbox/templates/extras/eventrule.html:71 msgid "Action" msgstr "アクション" -#: core/forms/model_forms.py:54 core/tables/data.py:46 -#: templates/core/datafile.html:27 templates/extras/report/base.html:33 -#: templates/extras/script/base.html:32 +#: netbox/core/forms/model_forms.py:54 netbox/core/tables/data.py:46 +#: netbox/templates/core/datafile.html:27 +#: netbox/templates/extras/report/base.html:33 +#: netbox/templates/extras/script/base.html:32 msgid "Source" msgstr "ソース" -#: core/forms/model_forms.py:58 +#: netbox/core/forms/model_forms.py:58 msgid "Backend Parameters" msgstr "バックエンド設定" -#: core/forms/model_forms.py:96 +#: netbox/core/forms/model_forms.py:96 msgid "File Upload" msgstr "ファイルのアップロード" -#: core/forms/model_forms.py:108 +#: netbox/core/forms/model_forms.py:108 msgid "Cannot upload a file and sync from an existing file" msgstr "ファイルをアップロードして既存のファイルから同期することはできません" -#: core/forms/model_forms.py:110 +#: netbox/core/forms/model_forms.py:110 msgid "Must upload a file or select a data file to sync" msgstr "同期するファイルをアップロードするか、データファイルを選択する必要があります" -#: core/forms/model_forms.py:153 templates/dcim/rack_elevation_list.html:6 +#: netbox/core/forms/model_forms.py:153 +#: netbox/templates/dcim/rack_elevation_list.html:6 msgid "Rack Elevations" msgstr "ラック図" -#: core/forms/model_forms.py:157 dcim/choices.py:1518 -#: dcim/forms/bulk_edit.py:969 dcim/forms/bulk_edit.py:1357 -#: dcim/forms/bulk_edit.py:1375 dcim/tables/racks.py:158 -#: netbox/navigation/menu.py:291 netbox/navigation/menu.py:295 +#: 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 msgid "Power" msgstr "電源" -#: core/forms/model_forms.py:159 netbox/navigation/menu.py:154 -#: templates/core/inc/config_data.html:37 +#: netbox/core/forms/model_forms.py:159 netbox/netbox/navigation/menu.py:154 +#: netbox/templates/core/inc/config_data.html:37 msgid "IPAM" msgstr "IPAM" -#: core/forms/model_forms.py:160 netbox/navigation/menu.py:230 -#: templates/core/inc/config_data.html:50 vpn/forms/bulk_edit.py:77 -#: vpn/forms/filtersets.py:43 vpn/forms/model_forms.py:61 -#: vpn/forms/model_forms.py:146 +#: netbox/core/forms/model_forms.py:160 netbox/netbox/navigation/menu.py:230 +#: netbox/templates/core/inc/config_data.html:50 +#: netbox/vpn/forms/bulk_edit.py:77 netbox/vpn/forms/filtersets.py:43 +#: netbox/vpn/forms/model_forms.py:61 netbox/vpn/forms/model_forms.py:146 msgid "Security" msgstr "セキュリティ" -#: core/forms/model_forms.py:161 templates/core/inc/config_data.html:59 +#: netbox/core/forms/model_forms.py:161 +#: netbox/templates/core/inc/config_data.html:59 msgid "Banners" msgstr "バナー" -#: core/forms/model_forms.py:162 templates/core/inc/config_data.html:80 +#: netbox/core/forms/model_forms.py:162 +#: netbox/templates/core/inc/config_data.html:80 msgid "Pagination" msgstr "ページネーション" -#: core/forms/model_forms.py:163 extras/forms/bulk_edit.py:92 -#: extras/forms/filtersets.py:47 extras/forms/model_forms.py:116 -#: extras/forms/model_forms.py:129 templates/core/inc/config_data.html:93 +#: 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/model_forms.py:129 +#: netbox/templates/core/inc/config_data.html:93 msgid "Validation" msgstr "バリデーション" -#: core/forms/model_forms.py:164 templates/account/preferences.html:6 +#: netbox/core/forms/model_forms.py:164 +#: netbox/templates/account/preferences.html:6 msgid "User Preferences" msgstr "ユーザ設定" -#: core/forms/model_forms.py:167 dcim/forms/filtersets.py:732 -#: templates/core/inc/config_data.html:127 users/forms/model_forms.py:64 +#: netbox/core/forms/model_forms.py:167 netbox/dcim/forms/filtersets.py:732 +#: netbox/templates/core/inc/config_data.html:127 +#: netbox/users/forms/model_forms.py:64 msgid "Miscellaneous" msgstr "その他" -#: core/forms/model_forms.py:169 +#: netbox/core/forms/model_forms.py:169 msgid "Config Revision" msgstr "設定履歴" -#: core/forms/model_forms.py:208 +#: netbox/core/forms/model_forms.py:208 msgid "This parameter has been defined statically and cannot be modified." msgstr "このパラメータは静的に定義されており、変更できません。" -#: core/forms/model_forms.py:216 +#: netbox/core/forms/model_forms.py:216 #, python-brace-format msgid "Current value: {value}" msgstr "現在の値: {value}" -#: core/forms/model_forms.py:218 +#: netbox/core/forms/model_forms.py:218 msgid " (default)" msgstr " (デフォルト)" -#: core/models/change_logging.py:29 +#: netbox/core/models/change_logging.py:29 msgid "time" msgstr "時刻" -#: core/models/change_logging.py:42 +#: netbox/core/models/change_logging.py:42 msgid "user name" msgstr "ユーザ名" -#: core/models/change_logging.py:47 +#: netbox/core/models/change_logging.py:47 msgid "request ID" msgstr "リクエスト ID" -#: core/models/change_logging.py:52 extras/models/staging.py:69 +#: netbox/core/models/change_logging.py:52 netbox/extras/models/staging.py:69 msgid "action" msgstr "アクション" -#: core/models/change_logging.py:86 +#: netbox/core/models/change_logging.py:86 msgid "pre-change data" msgstr "変更前データ" -#: core/models/change_logging.py:92 +#: netbox/core/models/change_logging.py:92 msgid "post-change data" msgstr "変更後データ" -#: core/models/change_logging.py:106 +#: netbox/core/models/change_logging.py:106 msgid "object change" msgstr "オブジェクト変更" -#: core/models/change_logging.py:107 +#: netbox/core/models/change_logging.py:107 msgid "object changes" msgstr "オブジェクト変更" -#: core/models/change_logging.py:123 +#: netbox/core/models/change_logging.py:123 #, python-brace-format msgid "Change logging is not supported for this object type ({type})." msgstr "このオブジェクトタイプ ({type}) では変更ログはサポートされていません。" -#: core/models/config.py:18 core/models/data.py:266 core/models/files.py:27 -#: core/models/jobs.py:49 extras/models/models.py:730 -#: extras/models/notifications.py:39 extras/models/notifications.py:186 -#: netbox/models/features.py:53 users/models/tokens.py:32 +#: netbox/core/models/config.py:18 netbox/core/models/data.py:266 +#: 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/notifications.py:186 +#: netbox/netbox/models/features.py:53 netbox/users/models/tokens.py:32 msgid "created" msgstr "作成日時" -#: core/models/config.py:22 +#: netbox/core/models/config.py:22 msgid "comment" msgstr "コメント" -#: core/models/config.py:29 +#: netbox/core/models/config.py:29 msgid "configuration data" msgstr "設定データ" -#: core/models/config.py:36 +#: netbox/core/models/config.py:36 msgid "config revision" msgstr "設定履歴" -#: core/models/config.py:37 +#: netbox/core/models/config.py:37 msgid "config revisions" msgstr "設定履歴" -#: core/models/config.py:41 +#: netbox/core/models/config.py:41 msgid "Default configuration" msgstr "デフォルト設定" -#: core/models/config.py:43 +#: netbox/core/models/config.py:43 msgid "Current configuration" msgstr "現在の設定" -#: core/models/config.py:44 +#: netbox/core/models/config.py:44 #, python-brace-format msgid "Config revision #{id}" msgstr "設定履歴 #{id}" -#: core/models/data.py:44 dcim/models/cables.py:43 -#: dcim/models/device_component_templates.py:203 -#: dcim/models/device_component_templates.py:237 -#: dcim/models/device_component_templates.py:272 -#: dcim/models/device_component_templates.py:334 -#: dcim/models/device_component_templates.py:413 -#: dcim/models/device_component_templates.py:512 -#: dcim/models/device_component_templates.py:612 -#: dcim/models/device_components.py:283 dcim/models/device_components.py:312 -#: dcim/models/device_components.py:345 dcim/models/device_components.py:463 -#: dcim/models/device_components.py:605 dcim/models/device_components.py:970 -#: dcim/models/device_components.py:1044 dcim/models/power.py:102 -#: extras/models/customfields.py:78 extras/models/search.py:41 -#: virtualization/models/clusters.py:61 vpn/models/l2vpn.py:32 +#: 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/extras/models/search.py:41 +#: netbox/virtualization/models/clusters.py:61 netbox/vpn/models/l2vpn.py:32 msgid "type" msgstr "タイプ" -#: core/models/data.py:49 extras/choices.py:37 extras/models/models.py:164 -#: extras/tables/tables.py:656 templates/core/datasource.html:58 -#: templates/core/plugin.html:66 +#: netbox/core/models/data.py:49 netbox/extras/choices.py:37 +#: netbox/extras/models/models.py:164 netbox/extras/tables/tables.py:656 +#: netbox/templates/core/datasource.html:58 +#: netbox/templates/core/plugin.html:66 msgid "URL" msgstr "URL" -#: core/models/data.py:59 dcim/models/device_component_templates.py:418 -#: dcim/models/device_components.py:512 extras/models/models.py:70 -#: extras/models/models.py:301 extras/models/models.py:526 -#: users/models/permissions.py:29 +#: netbox/core/models/data.py:59 +#: netbox/dcim/models/device_component_templates.py:418 +#: netbox/dcim/models/device_components.py:512 +#: 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" msgstr "有効" -#: core/models/data.py:63 +#: netbox/core/models/data.py:63 msgid "ignore rules" msgstr "ignoreルール" -#: core/models/data.py:65 +#: netbox/core/models/data.py:65 msgid "Patterns (one per line) matching files to ignore when syncing" msgstr "同期時に除外するファイル名のパターン (1 行に 1 つ)" -#: core/models/data.py:68 extras/models/models.py:534 +#: netbox/core/models/data.py:68 netbox/extras/models/models.py:534 msgid "parameters" msgstr "パラメータ" -#: core/models/data.py:73 +#: netbox/core/models/data.py:73 msgid "last synced" msgstr "最終同期日時" -#: core/models/data.py:81 +#: netbox/core/models/data.py:81 msgid "data source" msgstr "データソース" -#: core/models/data.py:82 +#: netbox/core/models/data.py:82 msgid "data sources" msgstr "データソース" -#: core/models/data.py:122 +#: netbox/core/models/data.py:122 #, python-brace-format msgid "Unknown backend type: {type}" msgstr "不明なバックエンドタイプ: {type}" -#: core/models/data.py:164 +#: netbox/core/models/data.py:164 msgid "Cannot initiate sync; syncing already in progress." msgstr "同期を開始できません。同期はすでに進行中です。" -#: core/models/data.py:177 +#: netbox/core/models/data.py:177 msgid "" "There was an error initializing the backend. A dependency needs to be " "installed: " msgstr "バックエンドの初期化中にエラーが発生しました。依存関係をインストールする必要があります。 " -#: core/models/data.py:270 core/models/files.py:31 -#: netbox/models/features.py:59 +#: netbox/core/models/data.py:270 netbox/core/models/files.py:31 +#: netbox/netbox/models/features.py:59 msgid "last updated" msgstr "最終更新日時" -#: core/models/data.py:280 dcim/models/cables.py:444 +#: netbox/core/models/data.py:280 netbox/dcim/models/cables.py:444 msgid "path" msgstr "パス" -#: core/models/data.py:283 +#: netbox/core/models/data.py:283 msgid "File path relative to the data source's root" msgstr "データソースのルートを基準にしたファイルパス" -#: core/models/data.py:287 ipam/models/ip.py:503 +#: netbox/core/models/data.py:287 netbox/ipam/models/ip.py:503 msgid "size" msgstr "サイズ" -#: core/models/data.py:290 +#: netbox/core/models/data.py:290 msgid "hash" msgstr "ハッシュ" -#: core/models/data.py:294 +#: netbox/core/models/data.py:294 msgid "Length must be 64 hexadecimal characters." msgstr "64 桁の 16 進数でなければなりません。" -#: core/models/data.py:296 +#: netbox/core/models/data.py:296 msgid "SHA256 hash of the file data" msgstr "ファイルデータの SHA256 ハッシュ" -#: core/models/data.py:313 +#: netbox/core/models/data.py:313 msgid "data file" msgstr "データファイル" -#: core/models/data.py:314 +#: netbox/core/models/data.py:314 msgid "data files" msgstr "データファイル" -#: core/models/data.py:401 +#: netbox/core/models/data.py:401 msgid "auto sync record" msgstr "自動同期レコード" -#: core/models/data.py:402 +#: netbox/core/models/data.py:402 msgid "auto sync records" msgstr "自動同期レコード" -#: core/models/files.py:37 +#: netbox/core/models/files.py:37 msgid "file root" msgstr "ファイルルート" -#: core/models/files.py:42 +#: netbox/core/models/files.py:42 msgid "file path" msgstr "ファイルパス" -#: core/models/files.py:44 +#: netbox/core/models/files.py:44 msgid "File path relative to the designated root path" msgstr "指定されたルートパスからの相対パス" -#: core/models/files.py:61 +#: netbox/core/models/files.py:61 msgid "managed file" msgstr "管理対象ファイル" -#: core/models/files.py:62 +#: netbox/core/models/files.py:62 msgid "managed files" msgstr "管理対象ファイル" -#: core/models/jobs.py:53 +#: netbox/core/models/jobs.py:54 msgid "scheduled" msgstr "予定日時" -#: core/models/jobs.py:58 +#: netbox/core/models/jobs.py:59 msgid "interval" msgstr "間隔" -#: core/models/jobs.py:64 +#: netbox/core/models/jobs.py:65 msgid "Recurrence interval (in minutes)" msgstr "繰り返し間隔 (分)" -#: core/models/jobs.py:67 +#: netbox/core/models/jobs.py:68 msgid "started" msgstr "開始日時" -#: core/models/jobs.py:72 +#: netbox/core/models/jobs.py:73 msgid "completed" msgstr "完了日時" -#: core/models/jobs.py:90 extras/models/models.py:101 -#: extras/models/staging.py:87 +#: netbox/core/models/jobs.py:91 netbox/extras/models/models.py:101 +#: netbox/extras/models/staging.py:87 msgid "data" msgstr "データ" -#: core/models/jobs.py:95 +#: netbox/core/models/jobs.py:96 msgid "error" msgstr "エラー" -#: core/models/jobs.py:100 +#: netbox/core/models/jobs.py:101 msgid "job ID" msgstr "ジョブ ID" -#: core/models/jobs.py:111 +#: netbox/core/models/jobs.py:112 msgid "job" msgstr "ジョブ" -#: core/models/jobs.py:112 +#: netbox/core/models/jobs.py:113 msgid "jobs" msgstr "ジョブ" -#: core/models/jobs.py:135 +#: netbox/core/models/jobs.py:136 #, python-brace-format msgid "Jobs cannot be assigned to this object type ({type})." msgstr "このオブジェクトタイプにはジョブを割り当てられません ({type})。" -#: core/models/jobs.py:185 +#: netbox/core/models/jobs.py:190 #, python-brace-format msgid "Invalid status for job termination. Choices are: {choices}" msgstr "ジョブ終了のステータスが無効です。選択肢は以下のとおりです。 {choices}" -#: core/models/jobs.py:216 +#: netbox/core/models/jobs.py:221 msgid "" "enqueue() cannot be called with values for both schedule_at and immediate." msgstr "enqueue () は schedule_at と immediate の両方の値を指定して呼び出すことはできません。" -#: core/signals.py:126 +#: netbox/core/signals.py:126 #, python-brace-format msgid "Deletion is prevented by a protection rule: {message}" msgstr "削除は保護ルールによって禁止されています。 {message}" -#: core/tables/change_logging.py:25 templates/account/profile.html:19 -#: templates/users/user.html:21 +#: netbox/core/tables/change_logging.py:25 +#: netbox/templates/account/profile.html:19 +#: netbox/templates/users/user.html:21 msgid "Full Name" msgstr "フルネーム" -#: core/tables/change_logging.py:37 core/tables/jobs.py:21 -#: extras/choices.py:41 extras/tables/tables.py:279 -#: extras/tables/tables.py:297 extras/tables/tables.py:329 -#: extras/tables/tables.py:409 extras/tables/tables.py:470 -#: extras/tables/tables.py:576 extras/tables/tables.py:616 -#: extras/tables/tables.py:653 netbox/tables/tables.py:244 -#: templates/core/objectchange.html:58 templates/extras/eventrule.html:78 -#: templates/extras/journalentry.html:18 tenancy/tables/contacts.py:93 -#: vpn/tables/l2vpn.py:64 +#: netbox/core/tables/change_logging.py:37 netbox/core/tables/jobs.py:21 +#: netbox/extras/choices.py:41 netbox/extras/tables/tables.py:279 +#: 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/templates/core/objectchange.html:58 +#: netbox/templates/extras/eventrule.html:78 +#: netbox/templates/extras/journalentry.html:18 +#: netbox/tenancy/tables/contacts.py:93 netbox/vpn/tables/l2vpn.py:64 msgid "Object" msgstr "オブジェクト" -#: core/tables/change_logging.py:42 templates/core/objectchange.html:68 +#: netbox/core/tables/change_logging.py:42 +#: netbox/templates/core/objectchange.html:68 msgid "Request ID" msgstr "リクエスト ID" -#: core/tables/config.py:21 users/forms/filtersets.py:44 users/tables.py:39 +#: netbox/core/tables/config.py:21 netbox/users/forms/filtersets.py:44 +#: netbox/users/tables.py:39 msgid "Is Active" msgstr "有効" -#: core/tables/data.py:50 templates/core/datafile.html:31 +#: netbox/core/tables/data.py:50 netbox/templates/core/datafile.html:31 msgid "Path" msgstr "パス" -#: core/tables/data.py:54 templates/extras/inc/result_pending.html:7 +#: netbox/core/tables/data.py:54 +#: netbox/templates/extras/inc/result_pending.html:7 msgid "Last updated" msgstr "最終更新日" -#: core/tables/jobs.py:10 core/tables/tasks.py:76 -#: dcim/tables/devicetypes.py:164 extras/tables/tables.py:216 -#: extras/tables/tables.py:460 netbox/tables/tables.py:189 -#: templates/dcim/virtualchassis_edit.html:52 utilities/forms/forms.py:73 -#: wireless/tables/wirelesslink.py:17 +#: 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/templates/dcim/virtualchassis_edit.html:52 +#: netbox/utilities/forms/forms.py:73 +#: netbox/wireless/tables/wirelesslink.py:17 msgid "ID" msgstr "ID" -#: core/tables/jobs.py:35 +#: netbox/core/tables/jobs.py:35 msgid "Interval" msgstr "間隔" -#: core/tables/plugins.py:14 templates/vpn/ipsecprofile.html:44 -#: vpn/forms/bulk_edit.py:141 vpn/forms/bulk_import.py:172 -#: vpn/tables/crypto.py:61 +#: netbox/core/tables/plugins.py:14 netbox/templates/vpn/ipsecprofile.html:44 +#: netbox/vpn/forms/bulk_edit.py:141 netbox/vpn/forms/bulk_import.py:172 +#: netbox/vpn/tables/crypto.py:61 msgid "Version" msgstr "バージョン" -#: core/tables/plugins.py:19 templates/core/datafile.html:38 +#: netbox/core/tables/plugins.py:19 netbox/templates/core/datafile.html:38 msgid "Last Updated" msgstr "最終更新日" -#: core/tables/plugins.py:23 +#: netbox/core/tables/plugins.py:23 msgid "Minimum NetBox Version" msgstr "NetBox の最小バージョン" -#: core/tables/plugins.py:27 +#: netbox/core/tables/plugins.py:27 msgid "Maximum NetBox Version" msgstr "NetBoxの最大バージョン" -#: core/tables/plugins.py:31 core/tables/plugins.py:74 +#: netbox/core/tables/plugins.py:31 netbox/core/tables/plugins.py:74 msgid "No plugin data found" msgstr "プラグインデータが見つかりません" -#: core/tables/plugins.py:48 templates/core/plugin.html:62 +#: netbox/core/tables/plugins.py:48 netbox/templates/core/plugin.html:62 msgid "Author" msgstr "著者" -#: core/tables/plugins.py:54 +#: netbox/core/tables/plugins.py:54 msgid "Installed" msgstr "インストール済" -#: core/tables/plugins.py:57 templates/core/plugin.html:84 +#: netbox/core/tables/plugins.py:57 netbox/templates/core/plugin.html:84 msgid "Certified" msgstr "認定済" -#: core/tables/plugins.py:60 +#: netbox/core/tables/plugins.py:60 msgid "Published" msgstr "公開済" -#: core/tables/plugins.py:66 +#: netbox/core/tables/plugins.py:66 msgid "Installed Version" msgstr "インストール済バージョン" -#: core/tables/plugins.py:70 +#: netbox/core/tables/plugins.py:70 msgid "Latest Version" msgstr "最新バージョン" -#: core/tables/tasks.py:18 +#: netbox/core/tables/tasks.py:18 msgid "Oldest Task" msgstr "最も古いタスク" -#: core/tables/tasks.py:42 templates/core/rq_worker_list.html:39 +#: netbox/core/tables/tasks.py:42 netbox/templates/core/rq_worker_list.html:39 msgid "Workers" msgstr "労働者" -#: core/tables/tasks.py:46 vpn/tables/tunnels.py:88 +#: netbox/core/tables/tasks.py:46 netbox/vpn/tables/tunnels.py:88 msgid "Host" msgstr "ホスト" -#: core/tables/tasks.py:50 ipam/forms/filtersets.py:535 +#: netbox/core/tables/tasks.py:50 netbox/ipam/forms/filtersets.py:535 msgid "Port" msgstr "ポート" -#: core/tables/tasks.py:54 +#: netbox/core/tables/tasks.py:54 msgid "DB" msgstr "デシベル" -#: core/tables/tasks.py:58 +#: netbox/core/tables/tasks.py:58 msgid "Scheduler PID" msgstr "スケジューラー PID" -#: core/tables/tasks.py:62 +#: netbox/core/tables/tasks.py:62 msgid "No queues found" msgstr "キューが見つかりません" -#: core/tables/tasks.py:82 +#: netbox/core/tables/tasks.py:82 msgid "Enqueued" msgstr "エンキュー" -#: core/tables/tasks.py:85 +#: netbox/core/tables/tasks.py:85 msgid "Ended" msgstr "終了しました" -#: core/tables/tasks.py:93 templates/core/rq_task.html:85 +#: netbox/core/tables/tasks.py:93 netbox/templates/core/rq_task.html:85 msgid "Callable" msgstr "呼び出し可能" -#: core/tables/tasks.py:97 +#: netbox/core/tables/tasks.py:97 msgid "No tasks found" msgstr "タスクが見つかりません" -#: core/tables/tasks.py:118 templates/core/rq_worker.html:47 +#: netbox/core/tables/tasks.py:118 netbox/templates/core/rq_worker.html:47 msgid "State" msgstr "状態" -#: core/tables/tasks.py:121 templates/core/rq_worker.html:51 +#: netbox/core/tables/tasks.py:121 netbox/templates/core/rq_worker.html:51 msgid "Birth" msgstr "誕生" -#: core/tables/tasks.py:124 templates/core/rq_worker.html:59 +#: netbox/core/tables/tasks.py:124 netbox/templates/core/rq_worker.html:59 msgid "PID" msgstr "PID" -#: core/tables/tasks.py:128 +#: netbox/core/tables/tasks.py:128 msgid "No workers found" msgstr "作業者が見つかりませんでした" -#: core/views.py:90 +#: netbox/core/views.py:90 #, python-brace-format msgid "Queued job #{id} to sync {datasource}" msgstr "キューに入っているジョブ #{id} 同期するには {datasource}" -#: core/views.py:319 +#: netbox/core/views.py:319 #, python-brace-format msgid "Restored configuration revision #{id}" msgstr "復元された設定リビジョン #{id}" -#: core/views.py:412 core/views.py:455 core/views.py:531 +#: 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 "ジョブ {job_id} 見つかりません" -#: core/views.py:463 +#: netbox/core/views.py:463 #, python-brace-format msgid "Job {id} has been deleted." msgstr "ジョブ {id} が削除されました。" -#: core/views.py:465 +#: netbox/core/views.py:465 #, python-brace-format msgid "Error deleting job {id}: {error}" msgstr "ジョブの削除中にエラーが発生しました {id}: {error}" -#: core/views.py:478 core/views.py:496 +#: netbox/core/views.py:478 netbox/core/views.py:496 #, python-brace-format msgid "Job {id} not found." msgstr "ジョブ {id} 見つかりません。" -#: core/views.py:484 +#: netbox/core/views.py:484 #, python-brace-format msgid "Job {id} has been re-enqueued." msgstr "ジョブ {id} が再エンキューされました。" -#: core/views.py:519 +#: netbox/core/views.py:519 #, python-brace-format msgid "Job {id} has been enqueued." msgstr "ジョブ {id} キューに追加されました。" -#: core/views.py:538 +#: netbox/core/views.py:538 #, python-brace-format msgid "Job {id} has been stopped." msgstr "ジョブ {id} 停止されました。" -#: core/views.py:540 +#: netbox/core/views.py:540 #, python-brace-format msgid "Failed to stop job {id}" msgstr "ジョブを停止できませんでした {id}" -#: core/views.py:678 +#: netbox/core/views.py:674 msgid "Plugins catalog could not be loaded" msgstr "プラグインカタログを読み込めませんでした" -#: core/views.py:712 +#: netbox/core/views.py:708 #, python-brace-format msgid "Plugin {name} not found" msgstr "プラグイン {name} が見つかりません" -#: dcim/api/serializers_/devices.py:49 dcim/api/serializers_/devicetypes.py:25 +#: netbox/dcim/api/serializers_/devices.py:49 +#: netbox/dcim/api/serializers_/devicetypes.py:25 msgid "Position (U)" msgstr "ポジション (U)" -#: dcim/api/serializers_/racks.py:112 templates/dcim/rack.html:28 +#: netbox/dcim/api/serializers_/racks.py:112 +#: netbox/templates/dcim/rack.html:28 msgid "Facility ID" msgstr "ファシリティ ID" -#: dcim/choices.py:21 virtualization/choices.py:21 +#: netbox/dcim/choices.py:21 netbox/virtualization/choices.py:21 msgid "Staging" msgstr "ステージング" -#: dcim/choices.py:23 dcim/choices.py:189 dcim/choices.py:240 -#: dcim/choices.py:1531 virtualization/choices.py:23 -#: virtualization/choices.py:48 +#: 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 msgid "Decommissioning" msgstr "廃止" -#: dcim/choices.py:24 +#: netbox/dcim/choices.py:24 msgid "Retired" msgstr "撤退済" -#: dcim/choices.py:65 +#: netbox/dcim/choices.py:65 msgid "2-post frame" msgstr "2 ポストラック" -#: dcim/choices.py:66 +#: netbox/dcim/choices.py:66 msgid "4-post frame" msgstr "4ポストラック" -#: dcim/choices.py:67 +#: netbox/dcim/choices.py:67 msgid "4-post cabinet" msgstr "4 ポストキャビネット" -#: dcim/choices.py:68 +#: netbox/dcim/choices.py:68 msgid "Wall-mounted frame" msgstr "ウォールマウントラック" -#: dcim/choices.py:69 +#: netbox/dcim/choices.py:69 msgid "Wall-mounted frame (vertical)" msgstr "ウォールマウントラック (垂直)" -#: dcim/choices.py:70 +#: netbox/dcim/choices.py:70 msgid "Wall-mounted cabinet" msgstr "ウォールマウントキャビネット" -#: dcim/choices.py:71 +#: netbox/dcim/choices.py:71 msgid "Wall-mounted cabinet (vertical)" msgstr "ウォールマウントキャビネット (垂直)" -#: dcim/choices.py:83 dcim/choices.py:84 dcim/choices.py:85 dcim/choices.py:86 +#: netbox/dcim/choices.py:83 netbox/dcim/choices.py:84 +#: netbox/dcim/choices.py:85 netbox/dcim/choices.py:86 #, python-brace-format msgid "{n} inches" msgstr "{n} インチ" -#: dcim/choices.py:100 ipam/choices.py:32 ipam/choices.py:50 -#: ipam/choices.py:70 ipam/choices.py:155 wireless/choices.py:26 +#: netbox/dcim/choices.py:100 netbox/ipam/choices.py:32 +#: netbox/ipam/choices.py:50 netbox/ipam/choices.py:70 +#: netbox/ipam/choices.py:155 netbox/wireless/choices.py:26 msgid "Reserved" msgstr "予約済" -#: dcim/choices.py:101 templates/dcim/device.html:259 +#: netbox/dcim/choices.py:101 netbox/templates/dcim/device.html:259 msgid "Available" msgstr "利用可能" -#: dcim/choices.py:104 ipam/choices.py:33 ipam/choices.py:51 -#: ipam/choices.py:71 ipam/choices.py:156 wireless/choices.py:28 +#: netbox/dcim/choices.py:104 netbox/ipam/choices.py:33 +#: netbox/ipam/choices.py:51 netbox/ipam/choices.py:71 +#: netbox/ipam/choices.py:156 netbox/wireless/choices.py:28 msgid "Deprecated" msgstr "廃止済" -#: dcim/choices.py:114 templates/dcim/inc/panels/racktype_dimensions.html:41 +#: netbox/dcim/choices.py:114 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:41 msgid "Millimeters" msgstr "ミリメートル" -#: dcim/choices.py:115 dcim/choices.py:1553 +#: netbox/dcim/choices.py:115 netbox/dcim/choices.py:1555 msgid "Inches" msgstr "インチ" -#: dcim/choices.py:136 dcim/choices.py:207 dcim/choices.py:254 +#: netbox/dcim/choices.py:136 netbox/dcim/choices.py:207 +#: netbox/dcim/choices.py:254 msgid "Front to rear" msgstr "前面から背面" -#: dcim/choices.py:137 dcim/choices.py:208 dcim/choices.py:255 +#: netbox/dcim/choices.py:137 netbox/dcim/choices.py:208 +#: netbox/dcim/choices.py:255 msgid "Rear to front" msgstr "背面から前面" -#: dcim/choices.py:151 dcim/forms/bulk_edit.py:68 dcim/forms/bulk_edit.py:87 -#: dcim/forms/bulk_edit.py:173 dcim/forms/bulk_edit.py:1405 -#: dcim/forms/bulk_import.py:60 dcim/forms/bulk_import.py:74 -#: dcim/forms/bulk_import.py:137 dcim/forms/bulk_import.py:566 -#: dcim/forms/bulk_import.py:833 dcim/forms/bulk_import.py:1088 -#: dcim/forms/filtersets.py:234 dcim/forms/model_forms.py:74 -#: dcim/forms/model_forms.py:93 dcim/forms/model_forms.py:170 -#: dcim/forms/model_forms.py:1062 dcim/forms/model_forms.py:1502 -#: dcim/forms/object_import.py:176 dcim/tables/devices.py:656 -#: dcim/tables/devices.py:869 dcim/tables/devices.py:954 -#: extras/tables/tables.py:223 ipam/tables/fhrp.py:59 ipam/tables/ip.py:378 -#: ipam/tables/services.py:44 templates/dcim/interface.html:102 -#: templates/dcim/interface.html:309 templates/dcim/location.html:41 -#: templates/dcim/region.html:37 templates/dcim/sitegroup.html:37 -#: templates/ipam/service.html:28 templates/tenancy/contactgroup.html:29 -#: templates/tenancy/tenantgroup.html:37 -#: templates/virtualization/vminterface.html:39 -#: templates/wireless/wirelesslangroup.html:37 tenancy/forms/bulk_edit.py:27 -#: tenancy/forms/bulk_edit.py:61 tenancy/forms/bulk_import.py:24 -#: tenancy/forms/bulk_import.py:58 tenancy/forms/model_forms.py:25 -#: tenancy/forms/model_forms.py:68 virtualization/forms/bulk_edit.py:207 -#: virtualization/forms/bulk_import.py:151 -#: virtualization/tables/virtualmachines.py:162 wireless/forms/bulk_edit.py:24 -#: wireless/forms/bulk_import.py:21 wireless/forms/model_forms.py:21 +#: 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/templates/dcim/location.html:41 netbox/templates/dcim/region.html:37 +#: netbox/templates/dcim/sitegroup.html:37 +#: netbox/templates/ipam/service.html:28 +#: netbox/templates/tenancy/contactgroup.html:29 +#: netbox/templates/tenancy/tenantgroup.html:37 +#: netbox/templates/virtualization/vminterface.html:39 +#: netbox/templates/wireless/wirelesslangroup.html:37 +#: netbox/tenancy/forms/bulk_edit.py:27 netbox/tenancy/forms/bulk_edit.py:61 +#: netbox/tenancy/forms/bulk_import.py:24 +#: netbox/tenancy/forms/bulk_import.py:58 +#: netbox/tenancy/forms/model_forms.py:25 +#: netbox/tenancy/forms/model_forms.py:68 +#: netbox/virtualization/forms/bulk_edit.py:207 +#: netbox/virtualization/forms/bulk_import.py:151 +#: netbox/virtualization/tables/virtualmachines.py:162 +#: netbox/wireless/forms/bulk_edit.py:24 +#: netbox/wireless/forms/bulk_import.py:21 +#: netbox/wireless/forms/model_forms.py:21 msgid "Parent" msgstr "親" -#: dcim/choices.py:152 +#: netbox/dcim/choices.py:152 msgid "Child" msgstr "子" -#: dcim/choices.py:166 templates/dcim/device.html:340 -#: templates/dcim/rack.html:133 templates/dcim/rack_elevation_list.html:20 -#: templates/dcim/rackreservation.html:76 +#: netbox/dcim/choices.py:166 netbox/templates/dcim/device.html:340 +#: netbox/templates/dcim/rack.html:133 +#: netbox/templates/dcim/rack_elevation_list.html:20 +#: netbox/templates/dcim/rackreservation.html:76 msgid "Front" msgstr "前面" -#: dcim/choices.py:167 templates/dcim/device.html:346 -#: templates/dcim/rack.html:139 templates/dcim/rack_elevation_list.html:21 -#: templates/dcim/rackreservation.html:82 +#: netbox/dcim/choices.py:167 netbox/templates/dcim/device.html:346 +#: netbox/templates/dcim/rack.html:139 +#: netbox/templates/dcim/rack_elevation_list.html:21 +#: netbox/templates/dcim/rackreservation.html:82 msgid "Rear" msgstr "背面" -#: dcim/choices.py:186 dcim/choices.py:238 virtualization/choices.py:46 +#: netbox/dcim/choices.py:186 netbox/dcim/choices.py:238 +#: netbox/virtualization/choices.py:46 msgid "Staged" msgstr "検証" -#: dcim/choices.py:188 +#: netbox/dcim/choices.py:188 msgid "Inventory" msgstr "在庫" -#: dcim/choices.py:209 dcim/choices.py:256 +#: netbox/dcim/choices.py:209 netbox/dcim/choices.py:256 msgid "Left to right" msgstr "左から右" -#: dcim/choices.py:210 dcim/choices.py:257 +#: netbox/dcim/choices.py:210 netbox/dcim/choices.py:257 msgid "Right to left" msgstr "右から左" -#: dcim/choices.py:211 dcim/choices.py:258 +#: netbox/dcim/choices.py:211 netbox/dcim/choices.py:258 msgid "Side to rear" msgstr "側面から背面" -#: dcim/choices.py:212 +#: netbox/dcim/choices.py:212 msgid "Rear to side" msgstr "背面から側面" -#: dcim/choices.py:213 +#: netbox/dcim/choices.py:213 msgid "Bottom to top" msgstr "下から上へ" -#: dcim/choices.py:214 +#: netbox/dcim/choices.py:214 msgid "Top to bottom" msgstr "上から下へ" -#: dcim/choices.py:215 dcim/choices.py:259 dcim/choices.py:1303 +#: netbox/dcim/choices.py:215 netbox/dcim/choices.py:259 +#: netbox/dcim/choices.py:1305 msgid "Passive" msgstr "パッシブ" -#: dcim/choices.py:216 +#: netbox/dcim/choices.py:216 msgid "Mixed" msgstr "混合" -#: dcim/choices.py:484 dcim/choices.py:733 +#: netbox/dcim/choices.py:484 netbox/dcim/choices.py:733 msgid "NEMA (Non-locking)" msgstr "NEMA (ロック無)" -#: dcim/choices.py:506 dcim/choices.py:755 +#: netbox/dcim/choices.py:506 netbox/dcim/choices.py:755 msgid "NEMA (Locking)" msgstr "NEMA (ロック有)" -#: dcim/choices.py:530 dcim/choices.py:779 +#: netbox/dcim/choices.py:530 netbox/dcim/choices.py:779 msgid "California Style" msgstr "California Style" -#: dcim/choices.py:538 +#: netbox/dcim/choices.py:538 msgid "International/ITA" msgstr "International/ITA" -#: dcim/choices.py:573 dcim/choices.py:814 +#: netbox/dcim/choices.py:573 netbox/dcim/choices.py:814 msgid "Proprietary" msgstr "独自規格" -#: dcim/choices.py:581 dcim/choices.py:824 dcim/choices.py:1219 -#: dcim/choices.py:1221 dcim/choices.py:1447 dcim/choices.py:1449 -#: netbox/navigation/menu.py:200 +#: 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 msgid "Other" msgstr "その他" -#: dcim/choices.py:787 +#: netbox/dcim/choices.py:787 msgid "ITA/International" msgstr "ITA/International" -#: dcim/choices.py:854 +#: netbox/dcim/choices.py:854 msgid "Physical" msgstr "物理" -#: dcim/choices.py:855 dcim/choices.py:1023 +#: netbox/dcim/choices.py:855 netbox/dcim/choices.py:1024 msgid "Virtual" msgstr "仮想" -#: dcim/choices.py:856 dcim/choices.py:1097 dcim/forms/bulk_edit.py:1515 -#: dcim/forms/filtersets.py:1330 dcim/forms/model_forms.py:988 -#: dcim/forms/model_forms.py:1397 netbox/navigation/menu.py:140 -#: netbox/navigation/menu.py:144 templates/dcim/interface.html:210 +#: 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 msgid "Wireless" msgstr "無線" -#: dcim/choices.py:1021 +#: netbox/dcim/choices.py:1022 msgid "Virtual interfaces" msgstr "仮想インタフェース" -#: dcim/choices.py:1024 dcim/forms/bulk_edit.py:1410 -#: dcim/forms/bulk_import.py:840 dcim/forms/model_forms.py:974 -#: dcim/tables/devices.py:660 templates/dcim/interface.html:106 -#: templates/virtualization/vminterface.html:43 -#: virtualization/forms/bulk_edit.py:212 -#: virtualization/forms/bulk_import.py:158 -#: virtualization/tables/virtualmachines.py:166 +#: 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/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 msgid "Bridge" msgstr "ブリッジ" -#: dcim/choices.py:1025 +#: netbox/dcim/choices.py:1026 msgid "Link Aggregation Group (LAG)" msgstr "リンクアグリゲーション (LAG)" -#: dcim/choices.py:1029 +#: netbox/dcim/choices.py:1030 msgid "Ethernet (fixed)" msgstr "イーサネット (固定)" -#: dcim/choices.py:1044 +#: netbox/dcim/choices.py:1046 msgid "Ethernet (modular)" msgstr "イーサネット (モジュール)" -#: dcim/choices.py:1081 +#: netbox/dcim/choices.py:1083 msgid "Ethernet (backplane)" msgstr "イーサネット (バックプレーン)" -#: dcim/choices.py:1113 +#: netbox/dcim/choices.py:1115 msgid "Cellular" msgstr "セルラー" -#: dcim/choices.py:1165 dcim/forms/filtersets.py:383 -#: dcim/forms/filtersets.py:809 dcim/forms/filtersets.py:963 -#: dcim/forms/filtersets.py:1542 templates/dcim/inventoryitem.html:52 -#: templates/dcim/virtualchassis_edit.html:54 +#: 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/templates/dcim/virtualchassis_edit.html:54 msgid "Serial" msgstr "シリアル" -#: dcim/choices.py:1180 +#: netbox/dcim/choices.py:1182 msgid "Coaxial" msgstr "同軸" -#: dcim/choices.py:1200 +#: netbox/dcim/choices.py:1202 msgid "Stacking" msgstr "スタック" -#: dcim/choices.py:1250 +#: netbox/dcim/choices.py:1252 msgid "Half" msgstr "半二重" -#: dcim/choices.py:1251 +#: netbox/dcim/choices.py:1253 msgid "Full" msgstr "全二重" -#: dcim/choices.py:1252 netbox/preferences.py:31 wireless/choices.py:480 +#: netbox/dcim/choices.py:1254 netbox/netbox/preferences.py:31 +#: netbox/wireless/choices.py:480 msgid "Auto" msgstr "自動" -#: dcim/choices.py:1263 +#: netbox/dcim/choices.py:1265 msgid "Access" msgstr "アクセス" -#: dcim/choices.py:1264 ipam/tables/vlans.py:172 ipam/tables/vlans.py:217 -#: templates/dcim/inc/interface_vlans_table.html:7 +#: 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 "タグ付き" -#: dcim/choices.py:1265 +#: netbox/dcim/choices.py:1267 msgid "Tagged (All)" msgstr "タグ付き (全て)" -#: dcim/choices.py:1294 +#: netbox/dcim/choices.py:1296 msgid "IEEE Standard" msgstr "IEEE スタンダード" -#: dcim/choices.py:1305 +#: netbox/dcim/choices.py:1307 msgid "Passive 24V (2-pair)" msgstr "パッシブ 24V (2 ペア)" -#: dcim/choices.py:1306 +#: netbox/dcim/choices.py:1308 msgid "Passive 24V (4-pair)" msgstr "パッシブ 24V (4ペア)" -#: dcim/choices.py:1307 +#: netbox/dcim/choices.py:1309 msgid "Passive 48V (2-pair)" msgstr "パッシブ 48V (2 ペア)" -#: dcim/choices.py:1308 +#: netbox/dcim/choices.py:1310 msgid "Passive 48V (4-pair)" msgstr "パッシブ 48V (4ペア)" -#: dcim/choices.py:1378 dcim/choices.py:1488 +#: netbox/dcim/choices.py:1380 netbox/dcim/choices.py:1490 msgid "Copper" msgstr "カッパー" -#: dcim/choices.py:1401 +#: netbox/dcim/choices.py:1403 msgid "Fiber Optic" msgstr "光ファイバー" -#: dcim/choices.py:1434 dcim/choices.py:1517 +#: netbox/dcim/choices.py:1436 netbox/dcim/choices.py:1519 msgid "USB" msgstr "USB" -#: dcim/choices.py:1504 +#: netbox/dcim/choices.py:1506 msgid "Fiber" msgstr "ファイバー" -#: dcim/choices.py:1529 dcim/forms/filtersets.py:1227 +#: netbox/dcim/choices.py:1531 netbox/dcim/forms/filtersets.py:1227 msgid "Connected" msgstr "接続済" -#: dcim/choices.py:1548 wireless/choices.py:497 +#: netbox/dcim/choices.py:1550 netbox/wireless/choices.py:497 msgid "Kilometers" msgstr "キロメートル" -#: dcim/choices.py:1549 templates/dcim/cable_trace.html:65 -#: wireless/choices.py:498 +#: netbox/dcim/choices.py:1551 netbox/templates/dcim/cable_trace.html:65 +#: netbox/wireless/choices.py:498 msgid "Meters" msgstr "メートル" -#: dcim/choices.py:1550 +#: netbox/dcim/choices.py:1552 msgid "Centimeters" msgstr "センチメートル" -#: dcim/choices.py:1551 wireless/choices.py:499 +#: netbox/dcim/choices.py:1553 netbox/wireless/choices.py:499 msgid "Miles" msgstr "マイル" -#: dcim/choices.py:1552 templates/dcim/cable_trace.html:66 -#: wireless/choices.py:500 +#: netbox/dcim/choices.py:1554 netbox/templates/dcim/cable_trace.html:66 +#: netbox/wireless/choices.py:500 msgid "Feet" msgstr "フィート" -#: dcim/choices.py:1568 templates/dcim/device.html:327 -#: templates/dcim/rack.html:107 +#: netbox/dcim/choices.py:1570 netbox/templates/dcim/device.html:327 +#: netbox/templates/dcim/rack.html:107 msgid "Kilograms" msgstr "キログラム" -#: dcim/choices.py:1569 +#: netbox/dcim/choices.py:1571 msgid "Grams" msgstr "グラム" -#: dcim/choices.py:1570 templates/dcim/device.html:328 -#: templates/dcim/rack.html:108 +#: netbox/dcim/choices.py:1572 netbox/templates/dcim/device.html:328 +#: netbox/templates/dcim/rack.html:108 msgid "Pounds" msgstr "ポンド" -#: dcim/choices.py:1571 +#: netbox/dcim/choices.py:1573 msgid "Ounces" msgstr "オンス" -#: dcim/choices.py:1618 +#: netbox/dcim/choices.py:1620 msgid "Redundant" msgstr "冗長" -#: dcim/choices.py:1639 +#: netbox/dcim/choices.py:1641 msgid "Single phase" msgstr "単相" -#: dcim/choices.py:1640 +#: netbox/dcim/choices.py:1642 msgid "Three-phase" msgstr "三相" -#: dcim/fields.py:45 +#: netbox/dcim/fields.py:45 #, python-brace-format msgid "Invalid MAC address format: {value}" msgstr "MAC アドレス形式が無効です: {value}" -#: dcim/fields.py:71 +#: netbox/dcim/fields.py:71 #, python-brace-format msgid "Invalid WWN format: {value}" msgstr "WWN 形式が無効です: {value}" -#: dcim/filtersets.py:86 +#: netbox/dcim/filtersets.py:86 msgid "Parent region (ID)" msgstr "親リージョン (ID)" -#: dcim/filtersets.py:92 +#: netbox/dcim/filtersets.py:92 msgid "Parent region (slug)" msgstr "親リージョン (slug)" -#: dcim/filtersets.py:116 +#: netbox/dcim/filtersets.py:116 msgid "Parent site group (ID)" msgstr "親サイトグループ (ID)" -#: dcim/filtersets.py:122 +#: netbox/dcim/filtersets.py:122 msgid "Parent site group (slug)" msgstr "親サイトグループ (slug)" -#: dcim/filtersets.py:164 extras/filtersets.py:364 ipam/filtersets.py:841 -#: ipam/filtersets.py:993 +#: netbox/dcim/filtersets.py:164 netbox/extras/filtersets.py:364 +#: netbox/ipam/filtersets.py:843 netbox/ipam/filtersets.py:995 msgid "Group (ID)" msgstr "グループ (ID)" -#: dcim/filtersets.py:170 +#: netbox/dcim/filtersets.py:170 msgid "Group (slug)" msgstr "グループ (slug)" -#: dcim/filtersets.py:176 dcim/filtersets.py:181 +#: netbox/dcim/filtersets.py:176 netbox/dcim/filtersets.py:181 msgid "AS (ID)" msgstr "AS (ID)" -#: dcim/filtersets.py:246 +#: netbox/dcim/filtersets.py:246 msgid "Parent location (ID)" msgstr "親の場所 (ID)" -#: dcim/filtersets.py:252 +#: netbox/dcim/filtersets.py:252 msgid "Parent location (slug)" msgstr "親の場所 (スラッグ)" -#: dcim/filtersets.py:258 dcim/filtersets.py:369 dcim/filtersets.py:490 -#: dcim/filtersets.py:1057 dcim/filtersets.py:1404 dcim/filtersets.py:2182 +#: 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)" -#: dcim/filtersets.py:265 dcim/filtersets.py:376 dcim/filtersets.py:497 -#: dcim/filtersets.py:1410 extras/filtersets.py:542 +#: 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)" -#: dcim/filtersets.py:296 dcim/filtersets.py:381 dcim/filtersets.py:539 -#: dcim/filtersets.py:678 dcim/filtersets.py:882 dcim/filtersets.py:933 -#: dcim/filtersets.py:973 dcim/filtersets.py:1306 dcim/filtersets.py:1840 +#: 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 msgid "Manufacturer (ID)" msgstr "メーカ (ID)" -#: dcim/filtersets.py:302 dcim/filtersets.py:387 dcim/filtersets.py:545 -#: dcim/filtersets.py:684 dcim/filtersets.py:888 dcim/filtersets.py:939 -#: dcim/filtersets.py:979 dcim/filtersets.py:1312 dcim/filtersets.py:1846 +#: 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 msgid "Manufacturer (slug)" msgstr "メーカ (slug)" -#: dcim/filtersets.py:393 +#: netbox/dcim/filtersets.py:393 msgid "Rack type (slug)" msgstr "ラックタイプ (slug)" -#: dcim/filtersets.py:397 +#: netbox/dcim/filtersets.py:397 msgid "Rack type (ID)" msgstr "ラックタイプ (ID)" -#: dcim/filtersets.py:411 dcim/filtersets.py:892 dcim/filtersets.py:994 -#: dcim/filtersets.py:1850 ipam/filtersets.py:381 ipam/filtersets.py:493 -#: ipam/filtersets.py:1003 virtualization/filtersets.py:210 +#: 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 msgid "Role (ID)" msgstr "ロール (ID)" -#: dcim/filtersets.py:417 dcim/filtersets.py:898 dcim/filtersets.py:1000 -#: dcim/filtersets.py:1856 extras/filtersets.py:558 ipam/filtersets.py:387 -#: ipam/filtersets.py:499 ipam/filtersets.py:1009 -#: virtualization/filtersets.py:216 +#: 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 msgid "Role (slug)" msgstr "ロール (slug)" -#: dcim/filtersets.py:447 dcim/filtersets.py:1062 dcim/filtersets.py:1415 -#: dcim/filtersets.py:2244 +#: netbox/dcim/filtersets.py:447 netbox/dcim/filtersets.py:1062 +#: netbox/dcim/filtersets.py:1415 netbox/dcim/filtersets.py:2244 msgid "Rack (ID)" msgstr "ラック (ID)" -#: dcim/filtersets.py:507 extras/filtersets.py:293 extras/filtersets.py:337 -#: extras/filtersets.py:359 extras/filtersets.py:419 users/filtersets.py:113 -#: users/filtersets.py:180 +#: netbox/dcim/filtersets.py:507 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 "ユーザ (名前)" -#: dcim/filtersets.py:549 +#: netbox/dcim/filtersets.py:549 msgid "Default platform (ID)" msgstr "デフォルトプラットフォーム (ID)" -#: dcim/filtersets.py:555 +#: netbox/dcim/filtersets.py:555 msgid "Default platform (slug)" msgstr "デフォルトプラットフォーム (slug)" -#: dcim/filtersets.py:558 dcim/forms/filtersets.py:517 +#: netbox/dcim/filtersets.py:558 netbox/dcim/forms/filtersets.py:517 msgid "Has a front image" msgstr "正面画像がある" -#: dcim/filtersets.py:562 dcim/forms/filtersets.py:524 +#: netbox/dcim/filtersets.py:562 netbox/dcim/forms/filtersets.py:524 msgid "Has a rear image" msgstr "背面画像がある" -#: dcim/filtersets.py:567 dcim/filtersets.py:688 dcim/filtersets.py:1131 -#: dcim/forms/filtersets.py:531 dcim/forms/filtersets.py:627 -#: dcim/forms/filtersets.py:848 +#: 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 msgid "Has console ports" msgstr "コンソールポートがある" -#: dcim/filtersets.py:571 dcim/filtersets.py:692 dcim/filtersets.py:1135 -#: dcim/forms/filtersets.py:538 dcim/forms/filtersets.py:634 -#: dcim/forms/filtersets.py:855 +#: 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 msgid "Has console server ports" msgstr "コンソールサーバポートがある" -#: dcim/filtersets.py:575 dcim/filtersets.py:696 dcim/filtersets.py:1139 -#: dcim/forms/filtersets.py:545 dcim/forms/filtersets.py:641 -#: dcim/forms/filtersets.py:862 +#: 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 msgid "Has power ports" msgstr "電源ポートがある" -#: dcim/filtersets.py:579 dcim/filtersets.py:700 dcim/filtersets.py:1143 -#: dcim/forms/filtersets.py:552 dcim/forms/filtersets.py:648 -#: dcim/forms/filtersets.py:869 +#: 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 msgid "Has power outlets" msgstr "電源コンセントがある" -#: dcim/filtersets.py:583 dcim/filtersets.py:704 dcim/filtersets.py:1147 -#: dcim/forms/filtersets.py:559 dcim/forms/filtersets.py:655 -#: dcim/forms/filtersets.py:876 +#: 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 msgid "Has interfaces" msgstr "インタフェースがある" -#: dcim/filtersets.py:587 dcim/filtersets.py:708 dcim/filtersets.py:1151 -#: dcim/forms/filtersets.py:566 dcim/forms/filtersets.py:662 -#: dcim/forms/filtersets.py:883 +#: 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 msgid "Has pass-through ports" msgstr "パススルーポートがある" -#: dcim/filtersets.py:591 dcim/filtersets.py:1155 dcim/forms/filtersets.py:580 +#: netbox/dcim/filtersets.py:591 netbox/dcim/filtersets.py:1155 +#: netbox/dcim/forms/filtersets.py:580 msgid "Has module bays" msgstr "モジュールベイがある" -#: dcim/filtersets.py:595 dcim/filtersets.py:1159 dcim/forms/filtersets.py:573 +#: netbox/dcim/filtersets.py:595 netbox/dcim/filtersets.py:1159 +#: netbox/dcim/forms/filtersets.py:573 msgid "Has device bays" msgstr "デバイスベイがある" -#: dcim/filtersets.py:599 dcim/forms/filtersets.py:587 +#: netbox/dcim/filtersets.py:599 netbox/dcim/forms/filtersets.py:587 msgid "Has inventory items" msgstr "在庫品目がある" -#: dcim/filtersets.py:756 dcim/filtersets.py:989 dcim/filtersets.py:1436 +#: netbox/dcim/filtersets.py:756 netbox/dcim/filtersets.py:989 +#: netbox/dcim/filtersets.py:1436 msgid "Device type (ID)" msgstr "デバイスタイプ (ID)" -#: dcim/filtersets.py:772 dcim/filtersets.py:1317 +#: netbox/dcim/filtersets.py:772 netbox/dcim/filtersets.py:1317 msgid "Module type (ID)" msgstr "モジュールタイプ (ID)" -#: dcim/filtersets.py:804 dcim/filtersets.py:1591 +#: netbox/dcim/filtersets.py:804 netbox/dcim/filtersets.py:1591 msgid "Power port (ID)" msgstr "電源ポート (ID)" -#: dcim/filtersets.py:878 dcim/filtersets.py:1836 +#: netbox/dcim/filtersets.py:878 netbox/dcim/filtersets.py:1836 msgid "Parent inventory item (ID)" msgstr "親在庫品目 (ID)" -#: dcim/filtersets.py:921 dcim/filtersets.py:947 dcim/filtersets.py:1127 -#: virtualization/filtersets.py:238 +#: netbox/dcim/filtersets.py:921 netbox/dcim/filtersets.py:947 +#: netbox/dcim/filtersets.py:1127 netbox/virtualization/filtersets.py:238 msgid "Config template (ID)" msgstr "設定テンプレート (ID)" -#: dcim/filtersets.py:985 +#: netbox/dcim/filtersets.py:985 msgid "Device type (slug)" msgstr "デバイスタイプ (slug)" -#: dcim/filtersets.py:1005 +#: netbox/dcim/filtersets.py:1005 msgid "Parent Device (ID)" msgstr "親デバイス (ID)" -#: dcim/filtersets.py:1009 virtualization/filtersets.py:220 +#: netbox/dcim/filtersets.py:1009 netbox/virtualization/filtersets.py:220 msgid "Platform (ID)" msgstr "プラットフォーム (ID)" -#: dcim/filtersets.py:1015 extras/filtersets.py:569 -#: virtualization/filtersets.py:226 +#: netbox/dcim/filtersets.py:1015 netbox/extras/filtersets.py:569 +#: netbox/virtualization/filtersets.py:226 msgid "Platform (slug)" msgstr "プラットフォーム (slug)" -#: dcim/filtersets.py:1051 dcim/filtersets.py:1399 dcim/filtersets.py:1934 -#: dcim/filtersets.py:2176 dcim/filtersets.py:2235 +#: 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 msgid "Site name (slug)" msgstr "サイト名 (slug)" -#: dcim/filtersets.py:1067 +#: netbox/dcim/filtersets.py:1067 msgid "Parent bay (ID)" msgstr "ペアレントベイ (ID)" -#: dcim/filtersets.py:1071 +#: netbox/dcim/filtersets.py:1071 msgid "VM cluster (ID)" msgstr "VM クラスタ (ID)" -#: dcim/filtersets.py:1077 extras/filtersets.py:591 -#: virtualization/filtersets.py:136 +#: netbox/dcim/filtersets.py:1077 netbox/extras/filtersets.py:591 +#: netbox/virtualization/filtersets.py:136 msgid "Cluster group (slug)" msgstr "クラスタグループ (slug)" -#: dcim/filtersets.py:1082 virtualization/filtersets.py:130 +#: netbox/dcim/filtersets.py:1082 netbox/virtualization/filtersets.py:130 msgid "Cluster group (ID)" msgstr "クラスタグループ (ID)" -#: dcim/filtersets.py:1088 +#: netbox/dcim/filtersets.py:1088 msgid "Device model (slug)" msgstr "デバイスモデル (slug)" -#: dcim/filtersets.py:1099 dcim/forms/bulk_edit.py:516 +#: netbox/dcim/filtersets.py:1099 netbox/dcim/forms/bulk_edit.py:522 msgid "Is full depth" msgstr "奥行きをすべて使うか" -#: dcim/filtersets.py:1103 dcim/forms/common.py:18 -#: dcim/forms/filtersets.py:818 dcim/forms/filtersets.py:1385 -#: dcim/models/device_components.py:518 virtualization/filtersets.py:230 -#: virtualization/filtersets.py:301 virtualization/forms/filtersets.py:172 -#: virtualization/forms/filtersets.py:223 +#: 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 msgid "MAC address" msgstr "MAC アドレス" -#: dcim/filtersets.py:1110 dcim/filtersets.py:1274 -#: dcim/forms/filtersets.py:827 dcim/forms/filtersets.py:930 -#: virtualization/filtersets.py:234 virtualization/forms/filtersets.py:176 +#: 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 msgid "Has a primary IP" msgstr "プライマリ IP がある" -#: dcim/filtersets.py:1114 +#: netbox/dcim/filtersets.py:1114 msgid "Has an out-of-band IP" msgstr "帯域外 IP がある" -#: dcim/filtersets.py:1119 +#: netbox/dcim/filtersets.py:1119 msgid "Virtual chassis (ID)" msgstr "バーチャルシャーシ (ID)" -#: dcim/filtersets.py:1123 +#: netbox/dcim/filtersets.py:1123 msgid "Is a virtual chassis member" msgstr "バーチャルシャーシのメンバーか" -#: dcim/filtersets.py:1164 +#: netbox/dcim/filtersets.py:1164 msgid "OOB IP (ID)" msgstr "OOB IP (ID)" -#: dcim/filtersets.py:1168 +#: netbox/dcim/filtersets.py:1168 msgid "Has virtual device context" msgstr "仮想デバイスコンテキストあり" -#: dcim/filtersets.py:1257 +#: netbox/dcim/filtersets.py:1257 msgid "VDC (ID)" msgstr "VDC (ID)" -#: dcim/filtersets.py:1262 +#: netbox/dcim/filtersets.py:1262 msgid "Device model" msgstr "デバイスモデル" -#: dcim/filtersets.py:1267 ipam/filtersets.py:632 vpn/filtersets.py:102 -#: vpn/filtersets.py:401 +#: 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)" -#: dcim/filtersets.py:1323 +#: netbox/dcim/filtersets.py:1323 msgid "Module type (model)" msgstr "モジュールタイプ (モデル)" -#: dcim/filtersets.py:1329 +#: netbox/dcim/filtersets.py:1329 msgid "Module bay (ID)" msgstr "モジュールベイ (ID)" -#: dcim/filtersets.py:1333 dcim/filtersets.py:1425 ipam/filtersets.py:611 -#: ipam/filtersets.py:851 ipam/filtersets.py:1115 -#: virtualization/filtersets.py:161 vpn/filtersets.py:379 +#: 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 msgid "Device (ID)" msgstr "デバイス (ID)" -#: dcim/filtersets.py:1421 +#: netbox/dcim/filtersets.py:1421 msgid "Rack (name)" msgstr "ラック (名前)" -#: dcim/filtersets.py:1431 ipam/filtersets.py:606 ipam/filtersets.py:846 -#: ipam/filtersets.py:1121 vpn/filtersets.py:374 +#: 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 "デバイス (名前)" -#: dcim/filtersets.py:1442 +#: netbox/dcim/filtersets.py:1442 msgid "Device type (model)" msgstr "デバイスタイプ (モデル)" -#: dcim/filtersets.py:1447 +#: netbox/dcim/filtersets.py:1447 msgid "Device role (ID)" msgstr "デバイスロール (ID)" -#: dcim/filtersets.py:1453 +#: netbox/dcim/filtersets.py:1453 msgid "Device role (slug)" msgstr "デバイスロール (slug)" -#: dcim/filtersets.py:1458 +#: netbox/dcim/filtersets.py:1458 msgid "Virtual Chassis (ID)" msgstr "バーチャルシャーシ (ID)" -#: dcim/filtersets.py:1464 dcim/forms/filtersets.py:109 -#: dcim/tables/devices.py:206 netbox/navigation/menu.py:79 -#: templates/dcim/device.html:120 templates/dcim/device_edit.html:93 -#: templates/dcim/virtualchassis.html:20 -#: templates/dcim/virtualchassis_add.html:8 -#: templates/dcim/virtualchassis_edit.html:24 +#: netbox/dcim/filtersets.py:1464 netbox/dcim/forms/filtersets.py:109 +#: netbox/dcim/tables/devices.py:206 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 +#: netbox/templates/dcim/virtualchassis_add.html:8 +#: netbox/templates/dcim/virtualchassis_edit.html:24 msgid "Virtual Chassis" msgstr "バーチャルシャーシ" -#: dcim/filtersets.py:1488 +#: netbox/dcim/filtersets.py:1488 msgid "Module (ID)" msgstr "モジュール (ID)" -#: dcim/filtersets.py:1495 +#: netbox/dcim/filtersets.py:1495 msgid "Cable (ID)" msgstr "ケーブル (ID)" -#: dcim/filtersets.py:1604 ipam/forms/bulk_import.py:189 -#: vpn/forms/bulk_import.py:308 +#: netbox/dcim/filtersets.py:1604 netbox/ipam/forms/bulk_import.py:189 +#: netbox/vpn/forms/bulk_import.py:308 msgid "Assigned VLAN" msgstr "割当 VLAN" -#: dcim/filtersets.py:1608 +#: netbox/dcim/filtersets.py:1608 msgid "Assigned VID" msgstr "割当 VID" -#: dcim/filtersets.py:1613 dcim/forms/bulk_edit.py:1489 -#: dcim/forms/bulk_import.py:891 dcim/forms/filtersets.py:1428 -#: dcim/forms/model_forms.py:1378 dcim/models/device_components.py:711 -#: dcim/tables/devices.py:626 ipam/filtersets.py:316 ipam/filtersets.py:327 -#: ipam/filtersets.py:483 ipam/filtersets.py:584 ipam/filtersets.py:595 -#: ipam/forms/bulk_edit.py:242 ipam/forms/bulk_edit.py:298 -#: ipam/forms/bulk_edit.py:340 ipam/forms/bulk_import.py:157 -#: ipam/forms/bulk_import.py:243 ipam/forms/bulk_import.py:279 -#: ipam/forms/filtersets.py:67 ipam/forms/filtersets.py:172 -#: ipam/forms/filtersets.py:309 ipam/forms/model_forms.py:62 -#: ipam/forms/model_forms.py:202 ipam/forms/model_forms.py:247 -#: ipam/forms/model_forms.py:300 ipam/forms/model_forms.py:431 -#: ipam/forms/model_forms.py:445 ipam/forms/model_forms.py:459 -#: ipam/models/ip.py:233 ipam/models/ip.py:512 ipam/models/ip.py:720 -#: ipam/models/vrfs.py:62 ipam/tables/ip.py:242 ipam/tables/ip.py:309 -#: ipam/tables/ip.py:360 ipam/tables/ip.py:450 -#: templates/dcim/interface.html:133 templates/ipam/ipaddress.html:18 -#: templates/ipam/iprange.html:40 templates/ipam/prefix.html:19 -#: templates/ipam/vrf.html:7 templates/ipam/vrf.html:13 -#: templates/virtualization/vminterface.html:47 -#: virtualization/forms/bulk_edit.py:261 -#: virtualization/forms/bulk_import.py:171 -#: virtualization/forms/filtersets.py:228 -#: virtualization/forms/model_forms.py:344 -#: virtualization/models/virtualmachines.py:355 -#: virtualization/tables/virtualmachines.py:143 +#: 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/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 msgid "VRF" msgstr "VRF" -#: dcim/filtersets.py:1619 ipam/filtersets.py:322 ipam/filtersets.py:333 -#: ipam/filtersets.py:489 ipam/filtersets.py:590 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)" -#: dcim/filtersets.py:1624 ipam/filtersets.py:1030 vpn/filtersets.py:342 +#: netbox/dcim/filtersets.py:1624 netbox/ipam/filtersets.py:1032 +#: netbox/vpn/filtersets.py:342 msgid "L2VPN (ID)" msgstr "L2VPN (ID)" -#: dcim/filtersets.py:1630 dcim/forms/filtersets.py:1433 -#: dcim/tables/devices.py:570 ipam/filtersets.py:1036 -#: ipam/forms/filtersets.py:518 ipam/tables/vlans.py:137 -#: templates/dcim/interface.html:93 templates/ipam/vlan.html:66 -#: templates/vpn/l2vpntermination.html:12 -#: virtualization/forms/filtersets.py:233 vpn/forms/bulk_import.py:280 -#: vpn/forms/filtersets.py:246 vpn/forms/model_forms.py:409 -#: vpn/forms/model_forms.py:427 vpn/models/l2vpn.py:63 vpn/tables/l2vpn.py:55 +#: netbox/dcim/filtersets.py: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/templates/vpn/l2vpntermination.html:12 +#: netbox/virtualization/forms/filtersets.py:233 +#: netbox/vpn/forms/bulk_import.py:280 netbox/vpn/forms/filtersets.py:246 +#: netbox/vpn/forms/model_forms.py:409 netbox/vpn/forms/model_forms.py:427 +#: netbox/vpn/models/l2vpn.py:63 netbox/vpn/tables/l2vpn.py:55 msgid "L2VPN" msgstr "L2VPN" -#: dcim/filtersets.py:1662 +#: netbox/dcim/filtersets.py:1662 msgid "Virtual Chassis Interfaces for Device" msgstr "バーチャルシャーシインタフェース" -#: dcim/filtersets.py:1667 +#: netbox/dcim/filtersets.py:1667 msgid "Virtual Chassis Interfaces for Device (ID)" msgstr "バーチャルシャーシインタフェース (ID)" -#: dcim/filtersets.py:1671 +#: netbox/dcim/filtersets.py:1671 msgid "Kind of interface" msgstr "インタフェースの種類" -#: dcim/filtersets.py:1676 virtualization/filtersets.py:293 +#: netbox/dcim/filtersets.py:1676 netbox/virtualization/filtersets.py:293 msgid "Parent interface (ID)" msgstr "親インタフェース (ID)" -#: dcim/filtersets.py:1681 virtualization/filtersets.py:298 +#: netbox/dcim/filtersets.py:1681 netbox/virtualization/filtersets.py:298 msgid "Bridged interface (ID)" msgstr "ブリッジインタフェース (ID)" -#: dcim/filtersets.py:1686 +#: netbox/dcim/filtersets.py:1686 msgid "LAG interface (ID)" msgstr "LAG インタフェース (ID)" -#: dcim/filtersets.py:1713 dcim/filtersets.py:1725 -#: dcim/forms/filtersets.py:1345 dcim/forms/model_forms.py:1690 -#: templates/dcim/virtualdevicecontext.html:15 +#: netbox/dcim/filtersets.py:1713 netbox/dcim/filtersets.py:1725 +#: netbox/dcim/forms/filtersets.py:1345 netbox/dcim/forms/model_forms.py:1697 +#: netbox/templates/dcim/virtualdevicecontext.html:15 msgid "Virtual Device Context" msgstr "仮想デバイスコンテキスト" -#: dcim/filtersets.py:1719 +#: netbox/dcim/filtersets.py:1719 msgid "Virtual Device Context (Identifier)" msgstr "仮想デバイスコンテキスト (識別子)" -#: dcim/filtersets.py:1730 templates/wireless/wirelesslan.html:11 -#: wireless/forms/model_forms.py:53 +#: netbox/dcim/filtersets.py:1730 +#: netbox/templates/wireless/wirelesslan.html:11 +#: netbox/wireless/forms/model_forms.py:53 msgid "Wireless LAN" msgstr "無線 LAN" -#: dcim/filtersets.py:1734 dcim/tables/devices.py:613 +#: netbox/dcim/filtersets.py:1734 netbox/dcim/tables/devices.py:613 msgid "Wireless link" msgstr "無線リンク" -#: dcim/filtersets.py:1803 +#: netbox/dcim/filtersets.py:1803 msgid "Parent module bay (ID)" msgstr "親モジュールベイ (ID)" -#: dcim/filtersets.py:1808 +#: netbox/dcim/filtersets.py:1808 msgid "Installed module (ID)" msgstr "インストール済みモジュール (ID)" -#: dcim/filtersets.py:1819 +#: netbox/dcim/filtersets.py:1819 msgid "Installed device (ID)" msgstr "インストール済みデバイス (ID)" -#: dcim/filtersets.py:1825 +#: netbox/dcim/filtersets.py:1825 msgid "Installed device (name)" msgstr "インストール済みデバイス (名前)" -#: dcim/filtersets.py:1891 +#: netbox/dcim/filtersets.py:1891 msgid "Master (ID)" msgstr "マスター (ID)" -#: dcim/filtersets.py:1897 +#: netbox/dcim/filtersets.py:1897 msgid "Master (name)" msgstr "マスター (名前)" -#: dcim/filtersets.py:1939 tenancy/filtersets.py:245 +#: netbox/dcim/filtersets.py:1939 netbox/tenancy/filtersets.py:245 msgid "Tenant (ID)" msgstr "テナント (ID)" -#: dcim/filtersets.py:1945 extras/filtersets.py:618 tenancy/filtersets.py:251 +#: netbox/dcim/filtersets.py:1945 netbox/extras/filtersets.py:618 +#: netbox/tenancy/filtersets.py:251 msgid "Tenant (slug)" msgstr "テナント (slug)" -#: dcim/filtersets.py:1981 dcim/forms/filtersets.py:1077 +#: netbox/dcim/filtersets.py:1981 netbox/dcim/forms/filtersets.py:1077 msgid "Unterminated" msgstr "未終端" -#: dcim/filtersets.py:2239 +#: netbox/dcim/filtersets.py:2239 msgid "Power panel (ID)" msgstr "電源盤 (ID)" -#: dcim/forms/bulk_create.py:40 extras/forms/filtersets.py:401 -#: extras/forms/model_forms.py:567 extras/forms/model_forms.py:619 -#: netbox/forms/base.py:86 netbox/forms/mixins.py:81 -#: netbox/tables/columns.py:478 -#: templates/circuits/inc/circuit_termination.html:32 -#: templates/generic/bulk_edit.html:65 templates/inc/panels/tags.html:5 -#: utilities/forms/fields/fields.py:81 +#: netbox/dcim/forms/bulk_create.py:40 netbox/extras/forms/filtersets.py: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/templates/circuits/inc/circuit_termination.html:32 +#: netbox/templates/generic/bulk_edit.html:65 +#: netbox/templates/inc/panels/tags.html:5 +#: netbox/utilities/forms/fields/fields.py:81 msgid "Tags" msgstr "タグ" -#: dcim/forms/bulk_create.py:112 dcim/forms/filtersets.py:1498 -#: dcim/forms/model_forms.py:488 dcim/forms/model_forms.py:546 -#: dcim/forms/object_create.py:197 dcim/forms/object_create.py:353 -#: dcim/tables/devices.py:165 dcim/tables/devices.py:707 -#: dcim/tables/devicetypes.py:246 templates/dcim/device.html:43 -#: templates/dcim/device.html:131 templates/dcim/modulebay.html:38 -#: templates/dcim/virtualchassis.html:66 -#: templates/dcim/virtualchassis_edit.html:55 +#: 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/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/templates/dcim/device.html:43 netbox/templates/dcim/device.html:131 +#: netbox/templates/dcim/modulebay.html:38 +#: netbox/templates/dcim/virtualchassis.html:66 +#: netbox/templates/dcim/virtualchassis_edit.html:55 msgid "Position" msgstr "ポジション" -#: dcim/forms/bulk_create.py:114 +#: netbox/dcim/forms/bulk_create.py:114 msgid "" "Alphanumeric ranges are supported. (Must match the number of names being " "created.)" msgstr "英数字の範囲が使用できます。(作成する名前の数と一致する必要があります)" -#: dcim/forms/bulk_edit.py:132 +#: netbox/dcim/forms/bulk_edit.py:133 msgid "Contact name" msgstr "連絡先名" -#: dcim/forms/bulk_edit.py:137 +#: netbox/dcim/forms/bulk_edit.py:138 msgid "Contact phone" msgstr "連絡先電話番号" -#: dcim/forms/bulk_edit.py:143 +#: netbox/dcim/forms/bulk_edit.py:144 msgid "Contact E-mail" msgstr "連絡先電子メール" -#: dcim/forms/bulk_edit.py:146 dcim/forms/bulk_import.py:123 -#: dcim/forms/model_forms.py:128 +#: netbox/dcim/forms/bulk_edit.py:147 netbox/dcim/forms/bulk_import.py:123 +#: netbox/dcim/forms/model_forms.py:128 msgid "Time zone" msgstr "タイムゾーン" -#: dcim/forms/bulk_edit.py:224 dcim/forms/bulk_edit.py:495 -#: dcim/forms/bulk_edit.py:559 dcim/forms/bulk_edit.py:632 -#: dcim/forms/bulk_edit.py:656 dcim/forms/bulk_edit.py:740 -#: dcim/forms/bulk_edit.py:1267 dcim/forms/bulk_edit.py:1660 -#: dcim/forms/bulk_import.py:182 dcim/forms/bulk_import.py:371 -#: dcim/forms/bulk_import.py:405 dcim/forms/bulk_import.py:450 -#: dcim/forms/bulk_import.py:486 dcim/forms/bulk_import.py:1082 -#: dcim/forms/filtersets.py:313 dcim/forms/filtersets.py:372 -#: dcim/forms/filtersets.py:494 dcim/forms/filtersets.py:619 -#: dcim/forms/filtersets.py:700 dcim/forms/filtersets.py:782 -#: dcim/forms/filtersets.py:947 dcim/forms/filtersets.py:1539 -#: dcim/forms/model_forms.py:207 dcim/forms/model_forms.py:337 -#: dcim/forms/model_forms.py:349 dcim/forms/model_forms.py:395 -#: dcim/forms/model_forms.py:436 dcim/forms/model_forms.py:1075 -#: dcim/forms/model_forms.py:1515 dcim/forms/object_import.py:187 -#: dcim/tables/devices.py:96 dcim/tables/devices.py:172 -#: dcim/tables/devices.py:940 dcim/tables/devicetypes.py:80 -#: dcim/tables/devicetypes.py:308 dcim/tables/modules.py:20 -#: dcim/tables/modules.py:60 dcim/tables/racks.py:58 dcim/tables/racks.py:132 -#: templates/dcim/devicetype.html:14 templates/dcim/inventoryitem.html:44 -#: templates/dcim/manufacturer.html:33 templates/dcim/modulebay.html:62 -#: templates/dcim/moduletype.html:25 templates/dcim/platform.html:37 -#: templates/dcim/racktype.html:16 +#: 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/tables/modules.py:60 +#: 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/templates/dcim/manufacturer.html:33 +#: netbox/templates/dcim/modulebay.html:62 +#: netbox/templates/dcim/moduletype.html:25 +#: netbox/templates/dcim/platform.html:37 +#: netbox/templates/dcim/racktype.html:16 msgid "Manufacturer" msgstr "メーカ" -#: dcim/forms/bulk_edit.py:229 dcim/forms/bulk_edit.py:372 -#: dcim/forms/bulk_import.py:191 dcim/forms/bulk_import.py:263 -#: dcim/forms/filtersets.py:255 -#: templates/dcim/inc/panels/racktype_dimensions.html:6 +#: 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/templates/dcim/inc/panels/racktype_dimensions.html:6 msgid "Form factor" msgstr "フォームファクタ" -#: dcim/forms/bulk_edit.py:234 dcim/forms/bulk_edit.py:377 -#: dcim/forms/bulk_import.py:199 dcim/forms/bulk_import.py:266 -#: dcim/forms/filtersets.py:260 -#: templates/dcim/inc/panels/racktype_dimensions.html:10 +#: 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/templates/dcim/inc/panels/racktype_dimensions.html:10 msgid "Width" msgstr "幅" -#: dcim/forms/bulk_edit.py:240 dcim/forms/bulk_edit.py:383 -#: templates/dcim/devicetype.html:37 +#: netbox/dcim/forms/bulk_edit.py:241 netbox/dcim/forms/bulk_edit.py:389 +#: netbox/dcim/forms/bulk_import.py:280 +#: netbox/templates/dcim/devicetype.html:37 msgid "Height (U)" msgstr "高さ (U)" -#: dcim/forms/bulk_edit.py:249 dcim/forms/bulk_edit.py:388 -#: dcim/forms/filtersets.py:274 +#: netbox/dcim/forms/bulk_edit.py:250 netbox/dcim/forms/bulk_edit.py:394 +#: netbox/dcim/forms/filtersets.py:274 msgid "Descending units" msgstr "降順" -#: dcim/forms/bulk_edit.py:252 dcim/forms/bulk_edit.py:391 +#: netbox/dcim/forms/bulk_edit.py:253 netbox/dcim/forms/bulk_edit.py:397 msgid "Outer width" msgstr "外形の幅" -#: dcim/forms/bulk_edit.py:257 dcim/forms/bulk_edit.py:396 +#: netbox/dcim/forms/bulk_edit.py:258 netbox/dcim/forms/bulk_edit.py:402 msgid "Outer depth" msgstr "外形の奥行" -#: dcim/forms/bulk_edit.py:262 dcim/forms/bulk_edit.py:401 -#: dcim/forms/bulk_import.py:204 dcim/forms/bulk_import.py:271 +#: 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 msgid "Outer unit" msgstr "外形の単位" -#: dcim/forms/bulk_edit.py:267 dcim/forms/bulk_edit.py:406 +#: netbox/dcim/forms/bulk_edit.py:268 netbox/dcim/forms/bulk_edit.py:412 msgid "Mounting depth" msgstr "取り付け奥行き" -#: dcim/forms/bulk_edit.py:272 dcim/forms/bulk_edit.py:299 -#: dcim/forms/bulk_edit.py:416 dcim/forms/bulk_edit.py:446 -#: dcim/forms/bulk_edit.py:529 dcim/forms/bulk_edit.py:552 -#: dcim/forms/bulk_edit.py:573 dcim/forms/bulk_edit.py:595 -#: dcim/forms/bulk_import.py:384 dcim/forms/bulk_import.py:416 -#: dcim/forms/filtersets.py:285 dcim/forms/filtersets.py:307 -#: dcim/forms/filtersets.py:327 dcim/forms/filtersets.py:401 -#: dcim/forms/filtersets.py:488 dcim/forms/filtersets.py:594 -#: dcim/forms/filtersets.py:613 dcim/forms/filtersets.py:674 -#: dcim/forms/model_forms.py:221 dcim/forms/model_forms.py:298 -#: dcim/tables/devicetypes.py:106 dcim/tables/modules.py:35 -#: dcim/tables/racks.py:74 dcim/tables/racks.py:172 -#: extras/forms/bulk_edit.py:53 extras/forms/bulk_edit.py:133 -#: extras/forms/bulk_edit.py:183 extras/forms/bulk_edit.py:288 -#: extras/forms/filtersets.py:64 extras/forms/filtersets.py:156 -#: extras/forms/filtersets.py:243 ipam/forms/bulk_edit.py:190 -#: templates/dcim/device.html:324 templates/dcim/devicetype.html:49 -#: templates/dcim/moduletype.html:45 templates/dcim/rack.html:81 -#: templates/dcim/racktype.html:41 templates/extras/configcontext.html:17 -#: templates/extras/customlink.html:25 templates/extras/savedfilter.html:33 -#: templates/ipam/role.html:30 +#: netbox/dcim/forms/bulk_edit.py: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/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/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/racktype.html:41 +#: netbox/templates/extras/configcontext.html:17 +#: netbox/templates/extras/customlink.html:25 +#: netbox/templates/extras/savedfilter.html:33 +#: netbox/templates/ipam/role.html:30 msgid "Weight" msgstr "重量" -#: dcim/forms/bulk_edit.py:277 dcim/forms/bulk_edit.py:421 -#: dcim/forms/filtersets.py:290 +#: netbox/dcim/forms/bulk_edit.py:278 netbox/dcim/forms/bulk_edit.py:427 +#: netbox/dcim/forms/filtersets.py:290 msgid "Max weight" msgstr "最大重量" -#: dcim/forms/bulk_edit.py:282 dcim/forms/bulk_edit.py:426 -#: dcim/forms/bulk_edit.py:534 dcim/forms/bulk_edit.py:578 -#: dcim/forms/bulk_import.py:210 dcim/forms/bulk_import.py:283 -#: dcim/forms/bulk_import.py:389 dcim/forms/bulk_import.py:421 -#: dcim/forms/filtersets.py:295 dcim/forms/filtersets.py:598 -#: dcim/forms/filtersets.py:678 +#: 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 msgid "Weight unit" msgstr "重量単位" -#: dcim/forms/bulk_edit.py:296 dcim/forms/filtersets.py:305 -#: dcim/forms/model_forms.py:217 dcim/forms/model_forms.py:256 -#: templates/dcim/rack.html:45 templates/dcim/racktype.html:13 +#: 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/templates/dcim/rack.html:45 netbox/templates/dcim/racktype.html:13 msgid "Rack Type" msgstr "ラックタイプ" -#: dcim/forms/bulk_edit.py:298 dcim/forms/model_forms.py:220 -#: dcim/forms/model_forms.py:297 +#: netbox/dcim/forms/bulk_edit.py:299 netbox/dcim/forms/model_forms.py:220 +#: netbox/dcim/forms/model_forms.py:297 msgid "Outer Dimensions" msgstr "外形寸法" -#: dcim/forms/bulk_edit.py:301 dcim/forms/model_forms.py:222 -#: dcim/forms/model_forms.py:299 templates/dcim/device.html:315 -#: templates/dcim/inc/panels/racktype_dimensions.html:3 +#: 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/templates/dcim/inc/panels/racktype_dimensions.html:3 msgid "Dimensions" msgstr "寸法" -#: dcim/forms/bulk_edit.py:303 dcim/forms/filtersets.py:306 -#: dcim/forms/filtersets.py:326 dcim/forms/model_forms.py:224 -#: templates/dcim/inc/panels/racktype_numbering.html:3 +#: 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/templates/dcim/inc/panels/racktype_numbering.html:3 msgid "Numbering" msgstr "ナンバリング" -#: dcim/forms/bulk_edit.py:357 dcim/forms/bulk_edit.py:1262 -#: dcim/forms/bulk_edit.py:1655 dcim/forms/bulk_import.py:253 -#: dcim/forms/bulk_import.py:1076 dcim/forms/filtersets.py:367 -#: dcim/forms/filtersets.py:777 dcim/forms/filtersets.py:1534 -#: dcim/forms/model_forms.py:251 dcim/forms/model_forms.py:1070 -#: dcim/forms/model_forms.py:1510 dcim/forms/object_import.py:181 -#: dcim/tables/devices.py:169 dcim/tables/devices.py:809 -#: dcim/tables/devices.py:937 dcim/tables/devicetypes.py:304 -#: dcim/tables/racks.py:129 extras/filtersets.py:552 -#: ipam/forms/bulk_edit.py:261 ipam/forms/bulk_edit.py:311 -#: ipam/forms/bulk_edit.py:359 ipam/forms/bulk_edit.py:511 -#: ipam/forms/bulk_import.py:197 ipam/forms/bulk_import.py:262 -#: ipam/forms/bulk_import.py:298 ipam/forms/bulk_import.py:455 -#: ipam/forms/filtersets.py:237 ipam/forms/filtersets.py:289 -#: ipam/forms/filtersets.py:360 ipam/forms/filtersets.py:509 -#: ipam/forms/model_forms.py:188 ipam/forms/model_forms.py:221 -#: ipam/forms/model_forms.py:250 ipam/forms/model_forms.py:643 -#: ipam/tables/ip.py:258 ipam/tables/ip.py:316 ipam/tables/ip.py:367 -#: ipam/tables/vlans.py:130 ipam/tables/vlans.py:235 -#: templates/dcim/device.html:182 -#: templates/dcim/inc/panels/inventory_items.html:20 -#: templates/dcim/interface.html:223 templates/dcim/inventoryitem.html:36 -#: templates/dcim/rack.html:49 templates/ipam/ipaddress.html:41 -#: templates/ipam/iprange.html:50 templates/ipam/prefix.html:77 -#: templates/ipam/role.html:19 templates/ipam/vlan.html:52 -#: templates/virtualization/virtualmachine.html:23 -#: templates/vpn/tunneltermination.html:17 -#: templates/wireless/inc/wirelesslink_interface.html:20 -#: tenancy/forms/bulk_edit.py:142 tenancy/forms/filtersets.py:107 -#: tenancy/forms/model_forms.py:137 tenancy/tables/contacts.py:102 -#: virtualization/forms/bulk_edit.py:145 -#: virtualization/forms/bulk_import.py:106 -#: virtualization/forms/filtersets.py:157 -#: virtualization/forms/model_forms.py:195 -#: virtualization/tables/virtualmachines.py:75 vpn/forms/bulk_edit.py:87 -#: vpn/forms/bulk_import.py:81 vpn/forms/filtersets.py:85 -#: vpn/forms/model_forms.py:78 vpn/forms/model_forms.py:113 -#: vpn/tables/tunnels.py:82 +#: netbox/dcim/forms/bulk_edit.py: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 "ロール" -#: dcim/forms/bulk_edit.py:364 dcim/forms/bulk_edit.py:712 -#: dcim/forms/bulk_edit.py:764 templates/dcim/device.html:104 -#: templates/dcim/module.html:77 templates/dcim/modulebay.html:70 -#: templates/dcim/rack.html:57 templates/virtualization/virtualmachine.html:35 +#: netbox/dcim/forms/bulk_edit.py:363 netbox/dcim/forms/bulk_import.py:260 +#: netbox/dcim/forms/filtersets.py:380 +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/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 "シリアル番号" -#: dcim/forms/bulk_edit.py:367 dcim/forms/filtersets.py:387 -#: dcim/forms/filtersets.py:813 dcim/forms/filtersets.py:967 -#: dcim/forms/filtersets.py:1546 +#: 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 msgid "Asset tag" msgstr "アセットタグ" -#: dcim/forms/bulk_edit.py:411 dcim/forms/bulk_edit.py:524 -#: dcim/forms/bulk_edit.py:568 dcim/forms/bulk_edit.py:705 -#: dcim/forms/bulk_import.py:277 dcim/forms/bulk_import.py:410 -#: dcim/forms/bulk_import.py:580 dcim/forms/filtersets.py:280 -#: dcim/forms/filtersets.py:511 dcim/forms/filtersets.py:669 -#: dcim/forms/filtersets.py:804 templates/dcim/device.html:98 -#: templates/dcim/devicetype.html:65 templates/dcim/moduletype.html:41 -#: templates/dcim/rack.html:65 templates/dcim/racktype.html:28 +#: 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/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 "エアフロー" -#: dcim/forms/bulk_edit.py:440 dcim/forms/bulk_edit.py:910 -#: dcim/forms/bulk_import.py:322 dcim/forms/bulk_import.py:325 -#: dcim/forms/bulk_import.py:553 dcim/forms/bulk_import.py:1358 -#: dcim/forms/bulk_import.py:1362 dcim/forms/filtersets.py:104 -#: dcim/forms/filtersets.py:324 dcim/forms/filtersets.py:405 -#: dcim/forms/filtersets.py:419 dcim/forms/filtersets.py:457 -#: dcim/forms/filtersets.py:772 dcim/forms/filtersets.py:1035 -#: dcim/forms/filtersets.py:1167 dcim/forms/model_forms.py:264 -#: dcim/forms/model_forms.py:306 dcim/forms/model_forms.py:479 -#: dcim/forms/model_forms.py:755 dcim/forms/object_create.py:400 -#: dcim/tables/devices.py:161 dcim/tables/power.py:70 dcim/tables/racks.py:217 -#: ipam/forms/filtersets.py:442 templates/dcim/device.html:30 -#: templates/dcim/inc/cable_termination.html:16 -#: templates/dcim/powerfeed.html:28 templates/dcim/rack.html:13 -#: templates/dcim/rack/base.html:4 templates/dcim/rackreservation.html:19 -#: templates/dcim/rackreservation.html:36 -#: virtualization/forms/model_forms.py:113 +#: netbox/dcim/forms/bulk_edit.py: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/templates/dcim/device.html:30 +#: netbox/templates/dcim/inc/cable_termination.html:16 +#: netbox/templates/dcim/powerfeed.html:28 netbox/templates/dcim/rack.html:13 +#: netbox/templates/dcim/rack/base.html:4 +#: netbox/templates/dcim/rackreservation.html:19 +#: netbox/templates/dcim/rackreservation.html:36 +#: netbox/virtualization/forms/model_forms.py:113 msgid "Rack" msgstr "ラック" -#: dcim/forms/bulk_edit.py:444 dcim/forms/bulk_edit.py:730 -#: dcim/forms/filtersets.py:325 dcim/forms/filtersets.py:398 -#: dcim/forms/filtersets.py:481 dcim/forms/filtersets.py:608 -#: dcim/forms/filtersets.py:721 dcim/forms/filtersets.py:942 -#: dcim/forms/model_forms.py:670 dcim/forms/model_forms.py:1580 -#: templates/dcim/device_edit.html:20 +#: 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/templates/dcim/device_edit.html:20 msgid "Hardware" msgstr "ハードウェア" -#: dcim/forms/bulk_edit.py:500 dcim/forms/bulk_import.py:377 -#: dcim/forms/filtersets.py:499 dcim/forms/model_forms.py:353 +#: 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 msgid "Default platform" msgstr "デフォルトプラットフォーム" -#: dcim/forms/bulk_edit.py:505 dcim/forms/bulk_edit.py:564 -#: dcim/forms/filtersets.py:502 dcim/forms/filtersets.py:622 +#: 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 msgid "Part number" msgstr "パーツ番号" -#: dcim/forms/bulk_edit.py:509 +#: netbox/dcim/forms/bulk_edit.py:515 msgid "U height" msgstr "ユニット数" -#: dcim/forms/bulk_edit.py:521 dcim/tables/devicetypes.py:102 +#: netbox/dcim/forms/bulk_edit.py:527 netbox/dcim/tables/devicetypes.py:102 msgid "Exclude from utilization" msgstr "ラック利用率に含めない" -#: dcim/forms/bulk_edit.py:550 dcim/forms/model_forms.py:368 -#: dcim/tables/devicetypes.py:77 templates/dcim/device.html:88 -#: templates/dcim/devicebay.html:52 templates/dcim/module.html:61 +#: 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/templates/dcim/devicebay.html:52 +#: netbox/templates/dcim/module.html:61 msgid "Device Type" msgstr "デバイスタイプ" -#: dcim/forms/bulk_edit.py:592 dcim/forms/model_forms.py:401 -#: dcim/tables/modules.py:17 dcim/tables/modules.py:65 -#: templates/dcim/module.html:65 templates/dcim/modulebay.html:66 -#: templates/dcim/moduletype.html:22 +#: 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/templates/dcim/module.html:65 +#: netbox/templates/dcim/modulebay.html:66 +#: netbox/templates/dcim/moduletype.html:22 msgid "Module Type" msgstr "モジュールタイプ" -#: dcim/forms/bulk_edit.py:596 dcim/forms/model_forms.py:371 -#: dcim/forms/model_forms.py:402 templates/dcim/devicetype.html:11 +#: netbox/dcim/forms/bulk_edit.py:602 netbox/dcim/forms/model_forms.py:371 +#: netbox/dcim/forms/model_forms.py:402 +#: netbox/templates/dcim/devicetype.html:11 msgid "Chassis" msgstr "シャーシ" -#: dcim/forms/bulk_edit.py:610 dcim/models/devices.py:484 -#: dcim/tables/devices.py:67 +#: netbox/dcim/forms/bulk_edit.py:616 netbox/dcim/models/devices.py:484 +#: netbox/dcim/tables/devices.py:67 msgid "VM role" msgstr "VMのロール" -#: dcim/forms/bulk_edit.py:613 dcim/forms/bulk_edit.py:637 -#: dcim/forms/bulk_edit.py:720 dcim/forms/bulk_import.py:434 -#: dcim/forms/bulk_import.py:438 dcim/forms/bulk_import.py:457 -#: dcim/forms/bulk_import.py:461 dcim/forms/bulk_import.py:586 -#: dcim/forms/bulk_import.py:590 dcim/forms/filtersets.py:689 -#: dcim/forms/filtersets.py:705 dcim/forms/filtersets.py:823 -#: dcim/forms/model_forms.py:415 dcim/forms/model_forms.py:441 -#: dcim/forms/model_forms.py:555 virtualization/forms/bulk_import.py:132 -#: virtualization/forms/bulk_import.py:133 -#: virtualization/forms/filtersets.py:188 -#: virtualization/forms/model_forms.py:215 +#: 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 msgid "Config template" msgstr "設定テンプレート" -#: dcim/forms/bulk_edit.py:661 dcim/forms/bulk_edit.py:1061 -#: dcim/forms/bulk_import.py:492 dcim/forms/filtersets.py:114 -#: dcim/forms/model_forms.py:501 dcim/forms/model_forms.py:872 -#: dcim/forms/model_forms.py:889 extras/filtersets.py:547 +#: 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 msgid "Device type" msgstr "デバイスタイプ" -#: dcim/forms/bulk_edit.py:672 dcim/forms/bulk_import.py:473 -#: dcim/forms/filtersets.py:119 dcim/forms/model_forms.py:509 +#: 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 msgid "Device role" msgstr "デバイスロール" -#: dcim/forms/bulk_edit.py:695 dcim/forms/bulk_import.py:498 -#: dcim/forms/filtersets.py:796 dcim/forms/model_forms.py:451 -#: dcim/forms/model_forms.py:513 dcim/tables/devices.py:182 -#: extras/filtersets.py:563 templates/dcim/device.html:186 -#: templates/dcim/platform.html:26 -#: templates/virtualization/virtualmachine.html:27 -#: virtualization/forms/bulk_edit.py:160 -#: virtualization/forms/bulk_import.py:122 -#: virtualization/forms/filtersets.py:168 -#: virtualization/forms/model_forms.py:203 -#: virtualization/tables/virtualmachines.py:79 +#: 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/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 msgid "Platform" msgstr "プラットフォーム" -#: dcim/forms/bulk_edit.py:728 dcim/forms/bulk_edit.py:1281 -#: dcim/forms/bulk_edit.py:1650 dcim/forms/bulk_edit.py:1696 -#: dcim/forms/bulk_import.py:641 dcim/forms/bulk_import.py:703 -#: dcim/forms/bulk_import.py:729 dcim/forms/bulk_import.py:755 -#: dcim/forms/bulk_import.py:775 dcim/forms/bulk_import.py:828 -#: dcim/forms/bulk_import.py:946 dcim/forms/bulk_import.py:994 -#: dcim/forms/bulk_import.py:1011 dcim/forms/bulk_import.py:1023 -#: dcim/forms/bulk_import.py:1071 dcim/forms/bulk_import.py:1422 -#: dcim/forms/connections.py:24 dcim/forms/filtersets.py:131 -#: dcim/forms/filtersets.py:921 dcim/forms/filtersets.py:1051 -#: dcim/forms/filtersets.py:1242 dcim/forms/filtersets.py:1267 -#: dcim/forms/filtersets.py:1291 dcim/forms/filtersets.py:1311 -#: dcim/forms/filtersets.py:1334 dcim/forms/filtersets.py:1444 -#: dcim/forms/filtersets.py:1469 dcim/forms/filtersets.py:1493 -#: dcim/forms/filtersets.py:1511 dcim/forms/filtersets.py:1528 -#: dcim/forms/filtersets.py:1592 dcim/forms/filtersets.py:1616 -#: dcim/forms/filtersets.py:1640 dcim/forms/model_forms.py:633 -#: dcim/forms/model_forms.py:849 dcim/forms/model_forms.py:1208 -#: dcim/forms/model_forms.py:1664 dcim/forms/object_create.py:257 -#: dcim/tables/connections.py:22 dcim/tables/connections.py:41 -#: dcim/tables/connections.py:60 dcim/tables/devices.py:285 -#: dcim/tables/devices.py:371 dcim/tables/devices.py:412 -#: dcim/tables/devices.py:454 dcim/tables/devices.py:505 -#: dcim/tables/devices.py:597 dcim/tables/devices.py:697 -#: dcim/tables/devices.py:754 dcim/tables/devices.py:801 -#: dcim/tables/devices.py:861 dcim/tables/devices.py:930 -#: dcim/tables/devices.py:1057 dcim/tables/modules.py:52 -#: extras/forms/filtersets.py:321 ipam/forms/bulk_import.py:304 -#: ipam/forms/bulk_import.py:481 ipam/forms/filtersets.py:551 -#: ipam/forms/model_forms.py:319 ipam/forms/model_forms.py:679 -#: ipam/forms/model_forms.py:712 ipam/forms/model_forms.py:738 -#: ipam/tables/vlans.py:180 templates/dcim/consoleport.html:20 -#: templates/dcim/consoleserverport.html:20 templates/dcim/device.html:15 -#: templates/dcim/device.html:130 templates/dcim/device_edit.html:10 -#: templates/dcim/devicebay.html:20 templates/dcim/devicebay.html:48 -#: templates/dcim/frontport.html:20 templates/dcim/interface.html:30 -#: templates/dcim/interface.html:161 templates/dcim/inventoryitem.html:20 -#: templates/dcim/module.html:57 templates/dcim/modulebay.html:20 -#: templates/dcim/poweroutlet.html:20 templates/dcim/powerport.html:20 -#: templates/dcim/rearport.html:20 templates/dcim/virtualchassis.html:65 -#: templates/dcim/virtualchassis_edit.html:51 -#: templates/dcim/virtualdevicecontext.html:22 -#: templates/virtualization/virtualmachine.html:114 -#: templates/vpn/tunneltermination.html:23 -#: templates/wireless/inc/wirelesslink_interface.html:6 -#: virtualization/filtersets.py:167 virtualization/forms/bulk_edit.py:137 -#: virtualization/forms/bulk_import.py:99 -#: virtualization/forms/filtersets.py:128 -#: virtualization/forms/model_forms.py:185 -#: virtualization/tables/virtualmachines.py:71 vpn/choices.py:44 -#: vpn/forms/bulk_import.py:86 vpn/forms/bulk_import.py:283 -#: vpn/forms/filtersets.py:275 vpn/forms/model_forms.py:90 -#: vpn/forms/model_forms.py:125 vpn/forms/model_forms.py:236 -#: vpn/forms/model_forms.py:453 wireless/forms/model_forms.py:99 -#: wireless/forms/model_forms.py:141 wireless/tables/wirelesslan.py:75 -msgid "Device" -msgstr "デバイス" - -#: dcim/forms/bulk_edit.py:731 templates/extras/dashboard/widget_config.html:7 -#: virtualization/forms/bulk_edit.py:191 -msgid "Configuration" -msgstr "設定" - -#: dcim/forms/bulk_edit.py:745 dcim/forms/bulk_import.py:653 -#: dcim/forms/model_forms.py:647 dcim/forms/model_forms.py:897 -msgid "Module type" -msgstr "モジュールタイプ" - -#: dcim/forms/bulk_edit.py:799 dcim/forms/bulk_edit.py:984 -#: dcim/forms/bulk_edit.py:1003 dcim/forms/bulk_edit.py:1026 -#: dcim/forms/bulk_edit.py:1068 dcim/forms/bulk_edit.py:1112 -#: dcim/forms/bulk_edit.py:1163 dcim/forms/bulk_edit.py:1190 -#: dcim/forms/bulk_edit.py:1217 dcim/forms/bulk_edit.py:1235 -#: dcim/forms/bulk_edit.py:1253 dcim/forms/filtersets.py:67 -#: dcim/forms/object_create.py:46 templates/dcim/cable.html:32 -#: templates/dcim/consoleport.html:32 templates/dcim/consoleserverport.html:32 -#: templates/dcim/devicebay.html:28 templates/dcim/frontport.html:32 -#: templates/dcim/inc/panels/inventory_items.html:19 -#: templates/dcim/interface.html:42 templates/dcim/inventoryitem.html:32 -#: templates/dcim/modulebay.html:34 templates/dcim/poweroutlet.html:32 -#: templates/dcim/powerport.html:32 templates/dcim/rearport.html:32 -#: templates/extras/customfield.html:26 templates/generic/bulk_import.html:162 -msgid "Label" -msgstr "ラベル" - -#: dcim/forms/bulk_edit.py:808 dcim/forms/filtersets.py:1068 -#: templates/dcim/cable.html:50 -msgid "Length" -msgstr "長さ" - -#: dcim/forms/bulk_edit.py:813 dcim/forms/bulk_import.py:1226 -#: dcim/forms/bulk_import.py:1229 dcim/forms/filtersets.py:1072 -msgid "Length unit" -msgstr "長さの単位" - -#: dcim/forms/bulk_edit.py:837 templates/dcim/virtualchassis.html:23 -msgid "Domain" -msgstr "ドメイン" - -#: dcim/forms/bulk_edit.py:905 dcim/forms/bulk_import.py:1345 -#: dcim/forms/filtersets.py:1158 dcim/forms/model_forms.py:750 -msgid "Power panel" -msgstr "電源盤" - -#: dcim/forms/bulk_edit.py:927 dcim/forms/bulk_import.py:1381 -#: dcim/forms/filtersets.py:1180 templates/dcim/powerfeed.html:83 -msgid "Supply" -msgstr "供給電源" - -#: dcim/forms/bulk_edit.py:933 dcim/forms/bulk_import.py:1386 -#: dcim/forms/filtersets.py:1185 templates/dcim/powerfeed.html:95 -msgid "Phase" -msgstr "電力相" - -#: dcim/forms/bulk_edit.py:939 dcim/forms/filtersets.py:1190 -#: templates/dcim/powerfeed.html:87 -msgid "Voltage" -msgstr "電圧" - -#: dcim/forms/bulk_edit.py:943 dcim/forms/filtersets.py:1194 -#: templates/dcim/powerfeed.html:91 -msgid "Amperage" -msgstr "アンペア数" - -#: dcim/forms/bulk_edit.py:947 dcim/forms/filtersets.py:1198 -msgid "Max utilization" -msgstr "最大使用率" - -#: dcim/forms/bulk_edit.py:1036 -msgid "Maximum draw" -msgstr "最大消費電力" - -#: dcim/forms/bulk_edit.py:1039 dcim/models/device_component_templates.py:282 -#: dcim/models/device_components.py:356 -msgid "Maximum power draw (watts)" -msgstr "最大消費電力 (ワット)" - -#: dcim/forms/bulk_edit.py:1042 -msgid "Allocated draw" -msgstr "割当電力" - -#: dcim/forms/bulk_edit.py:1045 dcim/models/device_component_templates.py:289 -#: dcim/models/device_components.py:363 -msgid "Allocated power draw (watts)" -msgstr "割当消費電力 (ワット)" - -#: dcim/forms/bulk_edit.py:1078 dcim/forms/bulk_import.py:786 -#: dcim/forms/model_forms.py:953 dcim/forms/model_forms.py:1278 -#: dcim/forms/model_forms.py:1567 dcim/forms/object_import.py:55 -msgid "Power port" -msgstr "電源ポート" - -#: dcim/forms/bulk_edit.py:1083 dcim/forms/bulk_import.py:793 -msgid "Feed leg" -msgstr "供給端子" - -#: dcim/forms/bulk_edit.py:1129 dcim/forms/bulk_edit.py:1440 -msgid "Management only" -msgstr "管理のみ" - -#: dcim/forms/bulk_edit.py:1139 dcim/forms/bulk_edit.py:1446 -#: dcim/forms/bulk_import.py:876 dcim/forms/filtersets.py:1394 -#: dcim/forms/object_import.py:90 -#: dcim/models/device_component_templates.py:437 -#: dcim/models/device_components.py:670 -msgid "PoE mode" -msgstr "PoE モード" - -#: dcim/forms/bulk_edit.py:1145 dcim/forms/bulk_edit.py:1452 -#: dcim/forms/bulk_import.py:882 dcim/forms/filtersets.py:1399 -#: dcim/forms/object_import.py:95 -#: dcim/models/device_component_templates.py:443 -#: dcim/models/device_components.py:676 -msgid "PoE type" -msgstr "PoE タイプ" - -#: dcim/forms/bulk_edit.py:1151 dcim/forms/filtersets.py:1404 -#: dcim/forms/object_import.py:100 -msgid "Wireless role" -msgstr "無線ロール" - -#: dcim/forms/bulk_edit.py:1288 dcim/forms/model_forms.py:669 -#: dcim/forms/model_forms.py:1223 dcim/tables/devices.py:313 -#: templates/dcim/consoleport.html:24 templates/dcim/consoleserverport.html:24 -#: templates/dcim/frontport.html:24 templates/dcim/interface.html:34 -#: templates/dcim/module.html:54 templates/dcim/modulebay.html:26 -#: templates/dcim/modulebay.html:58 templates/dcim/poweroutlet.html:24 -#: templates/dcim/powerport.html:24 templates/dcim/rearport.html:24 -msgid "Module" -msgstr "モジュール" - -#: dcim/forms/bulk_edit.py:1420 dcim/tables/devices.py:665 -#: templates/dcim/interface.html:110 -msgid "LAG" -msgstr "LAG" - -#: dcim/forms/bulk_edit.py:1425 dcim/forms/model_forms.py:1305 -msgid "Virtual device contexts" -msgstr "仮想デバイスコンテキスト" - -#: dcim/forms/bulk_edit.py:1431 dcim/forms/bulk_import.py:714 -#: dcim/forms/bulk_import.py:740 dcim/forms/filtersets.py:1252 -#: dcim/forms/filtersets.py:1277 dcim/forms/filtersets.py:1358 -#: dcim/tables/devices.py:610 -#: templates/circuits/inc/circuit_termination_fields.html:67 -#: templates/dcim/consoleport.html:40 templates/dcim/consoleserverport.html:40 -msgid "Speed" -msgstr "速度" - -#: dcim/forms/bulk_edit.py:1460 dcim/forms/bulk_import.py:885 -#: templates/vpn/ikepolicy.html:25 templates/vpn/ipsecprofile.html:21 -#: templates/vpn/ipsecprofile.html:48 virtualization/forms/bulk_edit.py:233 -#: virtualization/forms/bulk_import.py:165 vpn/forms/bulk_edit.py:146 -#: vpn/forms/bulk_edit.py:232 vpn/forms/bulk_import.py:176 -#: vpn/forms/bulk_import.py:234 vpn/forms/filtersets.py:135 -#: vpn/forms/filtersets.py:178 vpn/forms/filtersets.py:192 -#: vpn/tables/crypto.py:64 vpn/tables/crypto.py:162 -msgid "Mode" -msgstr "モード" - -#: dcim/forms/bulk_edit.py:1468 dcim/forms/model_forms.py:1354 -#: ipam/forms/bulk_import.py:178 ipam/forms/filtersets.py:498 -#: ipam/models/vlans.py:84 virtualization/forms/bulk_edit.py:240 -#: virtualization/forms/model_forms.py:321 -msgid "VLAN group" -msgstr "VLAN グループ" - -#: dcim/forms/bulk_edit.py:1476 dcim/forms/model_forms.py:1360 -#: dcim/tables/devices.py:579 virtualization/forms/bulk_edit.py:248 -#: virtualization/forms/model_forms.py:326 -msgid "Untagged VLAN" -msgstr "タグなし VLAN" - -#: dcim/forms/bulk_edit.py:1484 dcim/forms/model_forms.py:1369 -#: dcim/tables/devices.py:585 virtualization/forms/bulk_edit.py:256 -#: virtualization/forms/model_forms.py:335 -msgid "Tagged VLANs" -msgstr "タグ付き VLAN" - -#: dcim/forms/bulk_edit.py:1494 dcim/forms/model_forms.py:1341 -msgid "Wireless LAN group" -msgstr "無線 LAN グループ" - -#: dcim/forms/bulk_edit.py:1499 dcim/forms/model_forms.py:1346 -#: dcim/tables/devices.py:619 netbox/navigation/menu.py:146 -#: templates/dcim/interface.html:280 wireless/tables/wirelesslan.py:24 -msgid "Wireless LANs" -msgstr "無線 LAN" - -#: dcim/forms/bulk_edit.py:1508 dcim/forms/filtersets.py:1328 -#: dcim/forms/model_forms.py:1390 ipam/forms/bulk_edit.py:286 -#: ipam/forms/bulk_edit.py:378 ipam/forms/filtersets.py:169 -#: templates/dcim/interface.html:122 templates/ipam/prefix.html:95 -#: virtualization/forms/model_forms.py:349 -msgid "Addressing" -msgstr "アドレス" - -#: dcim/forms/bulk_edit.py:1509 dcim/forms/filtersets.py:720 -#: dcim/forms/model_forms.py:1391 virtualization/forms/model_forms.py:350 -msgid "Operation" -msgstr "オペレーション" - -#: dcim/forms/bulk_edit.py:1510 dcim/forms/filtersets.py:1329 -#: dcim/forms/model_forms.py:987 dcim/forms/model_forms.py:1393 -msgid "PoE" -msgstr "PoE" - -#: dcim/forms/bulk_edit.py:1511 dcim/forms/model_forms.py:1392 -#: templates/dcim/interface.html:99 virtualization/forms/bulk_edit.py:267 -#: virtualization/forms/model_forms.py:351 -msgid "Related Interfaces" -msgstr "関連インタフェース" - -#: dcim/forms/bulk_edit.py:1512 dcim/forms/model_forms.py:1394 -#: virtualization/forms/bulk_edit.py:268 -#: virtualization/forms/model_forms.py:352 -msgid "802.1Q Switching" -msgstr "802.1Q スイッチング" - -#: dcim/forms/bulk_edit.py:1574 dcim/forms/bulk_edit.py:1576 -msgid "Interface mode must be specified to assign VLANs" -msgstr "VLAN を割り当てるには、インタフェースモードを指定する必要があります" - -#: dcim/forms/bulk_edit.py:1581 dcim/forms/common.py:50 -msgid "An access interface cannot have tagged VLANs assigned." -msgstr "アクセスインタフェースにはタグ付き VLAN を割り当てることはできません。" - -#: dcim/forms/bulk_import.py:64 -msgid "Name of parent region" -msgstr "親リージョン名" - -#: dcim/forms/bulk_import.py:78 -msgid "Name of parent site group" -msgstr "親サイトグループ名" - -#: dcim/forms/bulk_import.py:97 -msgid "Assigned region" -msgstr "割当リージョン" - -#: dcim/forms/bulk_import.py:104 tenancy/forms/bulk_import.py:44 -#: tenancy/forms/bulk_import.py:85 wireless/forms/bulk_import.py:40 -msgid "Assigned group" -msgstr "割当グループ" - -#: dcim/forms/bulk_import.py:123 -msgid "available options" -msgstr "使用可能なオプション" - -#: dcim/forms/bulk_import.py:134 dcim/forms/bulk_import.py:543 -#: dcim/forms/bulk_import.py:1342 ipam/forms/bulk_import.py:175 -#: ipam/forms/bulk_import.py:433 virtualization/forms/bulk_import.py:63 -#: virtualization/forms/bulk_import.py:89 -msgid "Assigned site" -msgstr "割当サイト" - -#: dcim/forms/bulk_import.py:141 -msgid "Parent location" -msgstr "親ロケーション" - -#: dcim/forms/bulk_import.py:143 -msgid "Location not found." -msgstr "ロケーションが見つかりません。" - -#: dcim/forms/bulk_import.py:185 -msgid "The manufacturer of this rack type" -msgstr "このラックタイプのメーカ" - -#: dcim/forms/bulk_import.py:196 -msgid "The lowest-numbered position in the rack" -msgstr "ラック内の一番小さい番号の位置" - -#: dcim/forms/bulk_import.py:201 dcim/forms/bulk_import.py:268 -msgid "Rail-to-rail width (in inches)" -msgstr "レール間の幅 (インチ)" - -#: dcim/forms/bulk_import.py:207 dcim/forms/bulk_import.py:274 -msgid "Unit for outer dimensions" -msgstr "外形寸法の単位" - -#: dcim/forms/bulk_import.py:213 dcim/forms/bulk_import.py:286 -msgid "Unit for rack weights" -msgstr "重量の単位" - -#: dcim/forms/bulk_import.py:245 -msgid "Name of assigned tenant" -msgstr "割当テナント名" - -#: dcim/forms/bulk_import.py:257 -msgid "Name of assigned role" -msgstr "割当ロール名" - -#: dcim/forms/bulk_import.py:280 dcim/forms/bulk_import.py:413 -#: dcim/forms/bulk_import.py:583 -msgid "Airflow direction" -msgstr "エアフロー" - -#: dcim/forms/bulk_import.py:312 -msgid "Parent site" -msgstr "親サイト" - -#: dcim/forms/bulk_import.py:319 dcim/forms/bulk_import.py:1355 -msgid "Rack's location (if any)" -msgstr "ラックのロケーション (存在する場合)" - -#: dcim/forms/bulk_import.py:328 dcim/forms/model_forms.py:311 -#: dcim/tables/racks.py:222 templates/dcim/rackreservation.html:12 -#: templates/dcim/rackreservation.html:45 -msgid "Units" -msgstr "単位" - -#: dcim/forms/bulk_import.py:331 -msgid "Comma-separated list of individual unit numbers" -msgstr "カンマ区切りのユニット番号" - -#: dcim/forms/bulk_import.py:374 -msgid "The manufacturer which produces this device type" -msgstr "製造メーカ" - -#: dcim/forms/bulk_import.py:381 -msgid "The default platform for devices of this type (optional)" -msgstr "デフォルトのプラットフォーム (オプション)" - -#: dcim/forms/bulk_import.py:386 -msgid "Device weight" -msgstr "デバイス重量" - -#: dcim/forms/bulk_import.py:392 -msgid "Unit for device weight" -msgstr "デバイス重量の単位" - -#: dcim/forms/bulk_import.py:418 -msgid "Module weight" -msgstr "モジュール重量" - -#: dcim/forms/bulk_import.py:424 -msgid "Unit for module weight" -msgstr "モジュール重量の単位" - -#: dcim/forms/bulk_import.py:454 -msgid "Limit platform assignments to this manufacturer" -msgstr "プラットフォーム割り当てをこのメーカに限定する" - -#: dcim/forms/bulk_import.py:476 dcim/forms/bulk_import.py:1425 -#: tenancy/forms/bulk_import.py:106 -msgid "Assigned role" -msgstr "割当ロール" - -#: dcim/forms/bulk_import.py:489 -msgid "Device type manufacturer" -msgstr "デバイスタイプメーカ" - -#: dcim/forms/bulk_import.py:495 -msgid "Device type model" -msgstr "デバイスタイプモデル" - -#: dcim/forms/bulk_import.py:502 virtualization/forms/bulk_import.py:126 -msgid "Assigned platform" -msgstr "割当プラットフォーム" - -#: dcim/forms/bulk_import.py:510 dcim/forms/bulk_import.py:514 -#: dcim/forms/model_forms.py:536 -msgid "Virtual chassis" -msgstr "バーチャルシャーシ" - -#: dcim/forms/bulk_import.py:517 dcim/forms/filtersets.py:728 -#: dcim/forms/filtersets.py:898 dcim/forms/model_forms.py:522 -#: dcim/tables/devices.py:202 extras/filtersets.py:596 -#: extras/forms/filtersets.py:322 ipam/forms/filtersets.py:415 -#: ipam/forms/filtersets.py:447 templates/dcim/device.html:239 -#: templates/virtualization/cluster.html:10 -#: templates/virtualization/virtualmachine.html:92 -#: templates/virtualization/virtualmachine.html:101 -#: virtualization/filtersets.py:157 virtualization/filtersets.py:277 -#: virtualization/forms/bulk_edit.py:129 -#: virtualization/forms/bulk_import.py:92 -#: virtualization/forms/filtersets.py:99 -#: virtualization/forms/filtersets.py:123 -#: virtualization/forms/filtersets.py:204 -#: virtualization/forms/model_forms.py:79 -#: virtualization/forms/model_forms.py:176 -#: virtualization/tables/virtualmachines.py:67 +#: 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/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 msgid "Cluster" msgstr "クラスタ" -#: dcim/forms/bulk_import.py:521 +#: 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:52 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/templates/extras/dashboard/widget_config.html:7 +#: netbox/virtualization/forms/bulk_edit.py:191 +msgid "Configuration" +msgstr "設定" + +#: netbox/dcim/forms/bulk_edit.py:746 netbox/netbox/navigation/menu.py:243 +#: 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 +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/object_create.py:46 netbox/templates/dcim/cable.html:32 +#: netbox/templates/dcim/consoleport.html:32 +#: netbox/templates/dcim/consoleserverport.html:32 +#: netbox/templates/dcim/devicebay.html:28 +#: netbox/templates/dcim/frontport.html:32 +#: netbox/templates/dcim/inc/panels/inventory_items.html:19 +#: netbox/templates/dcim/interface.html:42 +#: netbox/templates/dcim/inventoryitem.html:32 +#: netbox/templates/dcim/modulebay.html:34 +#: netbox/templates/dcim/poweroutlet.html:32 +#: netbox/templates/dcim/powerport.html:32 +#: netbox/templates/dcim/rearport.html:32 +#: netbox/templates/extras/customfield.html:26 +#: netbox/templates/generic/bulk_import.html:162 +msgid "Label" +msgstr "ラベル" + +#: netbox/dcim/forms/bulk_edit.py:823 netbox/dcim/forms/filtersets.py:1068 +#: 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 +msgid "Length unit" +msgstr "長さの単位" + +#: netbox/dcim/forms/bulk_edit.py:852 +#: 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 +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 +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 +msgid "Phase" +msgstr "電力相" + +#: netbox/dcim/forms/bulk_edit.py:954 netbox/dcim/forms/filtersets.py:1190 +#: netbox/templates/dcim/powerfeed.html:87 +msgid "Voltage" +msgstr "電圧" + +#: netbox/dcim/forms/bulk_edit.py:958 netbox/dcim/forms/filtersets.py:1194 +#: netbox/templates/dcim/powerfeed.html:91 +msgid "Amperage" +msgstr "アンペア数" + +#: netbox/dcim/forms/bulk_edit.py:962 netbox/dcim/forms/filtersets.py:1198 +msgid "Max utilization" +msgstr "最大使用率" + +#: netbox/dcim/forms/bulk_edit.py:1051 +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 +msgid "Maximum power draw (watts)" +msgstr "最大消費電力 (ワット)" + +#: netbox/dcim/forms/bulk_edit.py:1057 +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 +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 +msgid "Power port" +msgstr "電源ポート" + +#: netbox/dcim/forms/bulk_edit.py:1098 netbox/dcim/forms/bulk_import.py:815 +msgid "Feed leg" +msgstr "供給端子" + +#: netbox/dcim/forms/bulk_edit.py:1144 netbox/dcim/forms/bulk_edit.py:1462 +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/object_import.py:90 +#: netbox/dcim/models/device_component_templates.py:437 +#: netbox/dcim/models/device_components.py:670 +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/object_import.py:95 +#: netbox/dcim/models/device_component_templates.py:443 +#: netbox/dcim/models/device_components.py:676 +msgid "PoE type" +msgstr "PoE タイプ" + +#: netbox/dcim/forms/bulk_edit.py:1166 netbox/dcim/forms/filtersets.py:1404 +#: 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/templates/dcim/consoleport.html:24 +#: netbox/templates/dcim/consoleserverport.html:24 +#: netbox/templates/dcim/frontport.html:24 +#: netbox/templates/dcim/interface.html:34 +#: netbox/templates/dcim/module.html:54 +#: netbox/templates/dcim/modulebay.html:26 +#: netbox/templates/dcim/modulebay.html:58 +#: netbox/templates/dcim/poweroutlet.html:24 +#: netbox/templates/dcim/powerport.html:24 +#: netbox/templates/dcim/rearport.html:24 +msgid "Module" +msgstr "モジュール" + +#: netbox/dcim/forms/bulk_edit.py:1442 netbox/dcim/tables/devices.py:665 +#: netbox/templates/dcim/interface.html:110 +msgid "LAG" +msgstr "LAG" + +#: netbox/dcim/forms/bulk_edit.py:1447 netbox/dcim/forms/model_forms.py:1312 +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/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/templates/vpn/ikepolicy.html:25 +#: netbox/templates/vpn/ipsecprofile.html:21 +#: netbox/templates/vpn/ipsecprofile.html:48 +#: netbox/virtualization/forms/bulk_edit.py:233 +#: netbox/virtualization/forms/bulk_import.py:165 +#: netbox/vpn/forms/bulk_edit.py:146 netbox/vpn/forms/bulk_edit.py:232 +#: netbox/vpn/forms/bulk_import.py:176 netbox/vpn/forms/bulk_import.py:234 +#: netbox/vpn/forms/filtersets.py:135 netbox/vpn/forms/filtersets.py:178 +#: netbox/vpn/forms/filtersets.py:192 netbox/vpn/tables/crypto.py:64 +#: netbox/vpn/tables/crypto.py:162 +msgid "Mode" +msgstr "モード" + +#: 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 +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 +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 +msgid "Tagged VLANs" +msgstr "タグ付き VLAN" + +#: netbox/dcim/forms/bulk_edit.py:1511 +msgid "Add tagged VLANs" +msgstr "タグ付 VLAN の追加" + +#: netbox/dcim/forms/bulk_edit.py:1520 +msgid "Remove tagged VLANs" +msgstr "タグ付 VLAN の削除" + +#: netbox/dcim/forms/bulk_edit.py:1536 netbox/dcim/forms/model_forms.py:1348 +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/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 +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 +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 +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 +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 +msgid "802.1Q Switching" +msgstr "802.1Q スイッチング" + +#: netbox/dcim/forms/bulk_edit.py:1558 +msgid "Add/Remove" +msgstr "追加/削除" + +#: netbox/dcim/forms/bulk_edit.py:1617 netbox/dcim/forms/bulk_edit.py:1619 +msgid "Interface mode must be specified to assign VLANs" +msgstr "VLAN を割り当てるには、インタフェースモードを指定する必要があります" + +#: netbox/dcim/forms/bulk_edit.py:1624 netbox/dcim/forms/common.py:50 +msgid "An access interface cannot have tagged VLANs assigned." +msgstr "アクセスインタフェースにはタグ付き VLAN を割り当てることはできません。" + +#: netbox/dcim/forms/bulk_import.py:64 +msgid "Name of parent region" +msgstr "親リージョン名" + +#: netbox/dcim/forms/bulk_import.py:78 +msgid "Name of parent site group" +msgstr "親サイトグループ名" + +#: netbox/dcim/forms/bulk_import.py:97 +msgid "Assigned region" +msgstr "割当リージョン" + +#: netbox/dcim/forms/bulk_import.py:104 netbox/tenancy/forms/bulk_import.py:44 +#: netbox/tenancy/forms/bulk_import.py:85 +#: netbox/wireless/forms/bulk_import.py:40 +msgid "Assigned group" +msgstr "割当グループ" + +#: netbox/dcim/forms/bulk_import.py:123 +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 +msgid "Assigned site" +msgstr "割当サイト" + +#: netbox/dcim/forms/bulk_import.py:141 +msgid "Parent location" +msgstr "親ロケーション" + +#: netbox/dcim/forms/bulk_import.py:143 +msgid "Location not found." +msgstr "ロケーションが見つかりません。" + +#: netbox/dcim/forms/bulk_import.py:185 +msgid "The manufacturer of this rack type" +msgstr "このラックタイプのメーカ" + +#: netbox/dcim/forms/bulk_import.py:196 +msgid "The lowest-numbered position in the rack" +msgstr "ラック内の一番小さい番号の位置" + +#: netbox/dcim/forms/bulk_import.py:201 netbox/dcim/forms/bulk_import.py:276 +msgid "Rail-to-rail width (in inches)" +msgstr "レール間の幅 (インチ)" + +#: netbox/dcim/forms/bulk_import.py:207 netbox/dcim/forms/bulk_import.py:286 +msgid "Unit for outer dimensions" +msgstr "外形寸法の単位" + +#: netbox/dcim/forms/bulk_import.py:213 netbox/dcim/forms/bulk_import.py:298 +msgid "Unit for rack weights" +msgstr "重量の単位" + +#: netbox/dcim/forms/bulk_import.py:245 +msgid "Name of assigned tenant" +msgstr "割当テナント名" + +#: netbox/dcim/forms/bulk_import.py:257 +msgid "Name of assigned role" +msgstr "割当ロール名" + +#: netbox/dcim/forms/bulk_import.py:264 +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 +msgid "Airflow direction" +msgstr "エアフロー" + +#: netbox/dcim/forms/bulk_import.py:324 +msgid "Width must be set if not specifying a rack type." +msgstr "ラックタイプを指定しない場合は、幅を設定する必要があります。" + +#: netbox/dcim/forms/bulk_import.py:326 +msgid "U height must be set if not specifying a rack type." +msgstr "ラックタイプを指定しない場合は U 高さを設定する必要があります。" + +#: netbox/dcim/forms/bulk_import.py:334 +msgid "Parent site" +msgstr "親サイト" + +#: netbox/dcim/forms/bulk_import.py:341 netbox/dcim/forms/bulk_import.py:1377 +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/templates/dcim/rackreservation.html:12 +#: netbox/templates/dcim/rackreservation.html:45 +msgid "Units" +msgstr "単位" + +#: netbox/dcim/forms/bulk_import.py:353 +msgid "Comma-separated list of individual unit numbers" +msgstr "カンマ区切りのユニット番号" + +#: netbox/dcim/forms/bulk_import.py:396 +msgid "The manufacturer which produces this device type" +msgstr "製造メーカ" + +#: netbox/dcim/forms/bulk_import.py:403 +msgid "The default platform for devices of this type (optional)" +msgstr "デフォルトのプラットフォーム (オプション)" + +#: netbox/dcim/forms/bulk_import.py:408 +msgid "Device weight" +msgstr "デバイス重量" + +#: netbox/dcim/forms/bulk_import.py:414 +msgid "Unit for device weight" +msgstr "デバイス重量の単位" + +#: netbox/dcim/forms/bulk_import.py:440 +msgid "Module weight" +msgstr "モジュール重量" + +#: netbox/dcim/forms/bulk_import.py:446 +msgid "Unit for module weight" +msgstr "モジュール重量の単位" + +#: netbox/dcim/forms/bulk_import.py:476 +msgid "Limit platform assignments to this manufacturer" +msgstr "プラットフォーム割り当てをこのメーカに限定する" + +#: netbox/dcim/forms/bulk_import.py:498 netbox/dcim/forms/bulk_import.py:1447 +#: netbox/tenancy/forms/bulk_import.py:106 +msgid "Assigned role" +msgstr "割当ロール" + +#: netbox/dcim/forms/bulk_import.py:511 +msgid "Device type manufacturer" +msgstr "デバイスタイプメーカ" + +#: netbox/dcim/forms/bulk_import.py:517 +msgid "Device type model" +msgstr "デバイスタイプモデル" + +#: netbox/dcim/forms/bulk_import.py:524 +#: netbox/virtualization/forms/bulk_import.py:126 +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 +msgid "Virtual chassis" +msgstr "バーチャルシャーシ" + +#: netbox/dcim/forms/bulk_import.py:543 msgid "Virtualization cluster" msgstr "仮想化クラスタ" -#: dcim/forms/bulk_import.py:550 +#: netbox/dcim/forms/bulk_import.py:572 msgid "Assigned location (if any)" msgstr "割当ロケーション (存在する場合)" -#: dcim/forms/bulk_import.py:557 +#: netbox/dcim/forms/bulk_import.py:579 msgid "Assigned rack (if any)" msgstr "割当ラック (存在する場合)" -#: dcim/forms/bulk_import.py:560 +#: netbox/dcim/forms/bulk_import.py:582 msgid "Face" msgstr "面" -#: dcim/forms/bulk_import.py:563 +#: netbox/dcim/forms/bulk_import.py:585 msgid "Mounted rack face" msgstr "ラック取付面" -#: dcim/forms/bulk_import.py:570 +#: netbox/dcim/forms/bulk_import.py:592 msgid "Parent device (for child devices)" msgstr "親デバイス (子デバイス用)" -#: dcim/forms/bulk_import.py:573 +#: netbox/dcim/forms/bulk_import.py:595 msgid "Device bay" msgstr "デバイスベイ" -#: dcim/forms/bulk_import.py:577 +#: netbox/dcim/forms/bulk_import.py:599 msgid "Device bay in which this device is installed (for child devices)" msgstr "取付られているデバイスベイ (子デバイス用)" -#: dcim/forms/bulk_import.py:644 +#: netbox/dcim/forms/bulk_import.py:666 msgid "The device in which this module is installed" msgstr "取付られているデバイス" -#: dcim/forms/bulk_import.py:647 dcim/forms/model_forms.py:640 +#: netbox/dcim/forms/bulk_import.py:669 netbox/dcim/forms/model_forms.py:640 msgid "Module bay" msgstr "モジュールベイ" -#: dcim/forms/bulk_import.py:650 +#: netbox/dcim/forms/bulk_import.py:672 msgid "The module bay in which this module is installed" msgstr "取付られているモジュールベイ" -#: dcim/forms/bulk_import.py:656 +#: netbox/dcim/forms/bulk_import.py:678 msgid "The type of module" msgstr "モジュールタイプ" -#: dcim/forms/bulk_import.py:664 dcim/forms/model_forms.py:656 +#: netbox/dcim/forms/bulk_import.py:686 netbox/dcim/forms/model_forms.py:656 msgid "Replicate components" msgstr "構成要素を複製" -#: dcim/forms/bulk_import.py:666 +#: netbox/dcim/forms/bulk_import.py:688 msgid "" "Automatically populate components associated with this module type (enabled " "by default)" msgstr "関連する構成要素を自動的に登録 (デフォルト)" -#: dcim/forms/bulk_import.py:669 dcim/forms/model_forms.py:662 +#: netbox/dcim/forms/bulk_import.py:691 netbox/dcim/forms/model_forms.py:662 msgid "Adopt components" msgstr "既存の構成要素を採用" -#: dcim/forms/bulk_import.py:671 dcim/forms/model_forms.py:665 +#: netbox/dcim/forms/bulk_import.py:693 netbox/dcim/forms/model_forms.py:665 msgid "Adopt already existing components" msgstr "既存の構成要素を採用" -#: dcim/forms/bulk_import.py:711 dcim/forms/bulk_import.py:737 -#: dcim/forms/bulk_import.py:763 +#: netbox/dcim/forms/bulk_import.py:733 netbox/dcim/forms/bulk_import.py:759 +#: netbox/dcim/forms/bulk_import.py:785 msgid "Port type" msgstr "ポートタイプ" -#: dcim/forms/bulk_import.py:719 dcim/forms/bulk_import.py:745 +#: netbox/dcim/forms/bulk_import.py:741 netbox/dcim/forms/bulk_import.py:767 msgid "Port speed in bps" msgstr "ポート速度 (bps)" -#: dcim/forms/bulk_import.py:783 +#: netbox/dcim/forms/bulk_import.py:805 msgid "Outlet type" msgstr "コンセントタイプ" -#: dcim/forms/bulk_import.py:790 +#: netbox/dcim/forms/bulk_import.py:812 msgid "Local power port which feeds this outlet" msgstr "このコンセントに給電する電源ポート" -#: dcim/forms/bulk_import.py:796 +#: netbox/dcim/forms/bulk_import.py:818 msgid "Electrical phase (for three-phase circuits)" msgstr "電気位相 (三相回路用)" -#: dcim/forms/bulk_import.py:837 dcim/forms/model_forms.py:1316 -#: virtualization/forms/bulk_import.py:155 -#: virtualization/forms/model_forms.py:305 +#: 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 msgid "Parent interface" msgstr "親インタフェース" -#: dcim/forms/bulk_import.py:844 dcim/forms/model_forms.py:1324 -#: virtualization/forms/bulk_import.py:162 -#: virtualization/forms/model_forms.py:313 +#: 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 msgid "Bridged interface" msgstr "ブリッジインタフェース" -#: dcim/forms/bulk_import.py:847 +#: netbox/dcim/forms/bulk_import.py:869 msgid "Lag" msgstr "Lag" -#: dcim/forms/bulk_import.py:851 +#: netbox/dcim/forms/bulk_import.py:873 msgid "Parent LAG interface" msgstr "親 LAG インタフェース" -#: dcim/forms/bulk_import.py:854 +#: netbox/dcim/forms/bulk_import.py:876 msgid "Vdcs" msgstr "VDC" -#: dcim/forms/bulk_import.py:859 +#: netbox/dcim/forms/bulk_import.py:881 msgid "VDC names separated by commas, encased with double quotes. Example:" msgstr "VDC 名をコンマで区切り、二重引用符で囲みます。例:" -#: dcim/forms/bulk_import.py:865 +#: netbox/dcim/forms/bulk_import.py:887 msgid "Physical medium" msgstr "物理媒体" -#: dcim/forms/bulk_import.py:868 dcim/forms/filtersets.py:1365 +#: netbox/dcim/forms/bulk_import.py:890 netbox/dcim/forms/filtersets.py:1365 msgid "Duplex" msgstr "デュプレックス" -#: dcim/forms/bulk_import.py:873 +#: netbox/dcim/forms/bulk_import.py:895 msgid "Poe mode" msgstr "PoEモード" -#: dcim/forms/bulk_import.py:879 +#: netbox/dcim/forms/bulk_import.py:901 msgid "Poe type" msgstr "PoEタイプ" -#: dcim/forms/bulk_import.py:888 virtualization/forms/bulk_import.py:168 +#: netbox/dcim/forms/bulk_import.py:910 +#: netbox/virtualization/forms/bulk_import.py:168 msgid "IEEE 802.1Q operational mode (for L2 interfaces)" msgstr "IEEE 802.1Q モード(L2 インタフェース用)" -#: dcim/forms/bulk_import.py:895 ipam/forms/bulk_import.py:161 -#: ipam/forms/bulk_import.py:247 ipam/forms/bulk_import.py:283 -#: ipam/forms/filtersets.py:201 ipam/forms/filtersets.py:277 -#: ipam/forms/filtersets.py:336 virtualization/forms/bulk_import.py:175 +#: netbox/dcim/forms/bulk_import.py: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 msgid "Assigned VRF" msgstr "割当 VRF" -#: dcim/forms/bulk_import.py:898 +#: netbox/dcim/forms/bulk_import.py:920 msgid "Rf role" msgstr "RF ロール" -#: dcim/forms/bulk_import.py:901 +#: netbox/dcim/forms/bulk_import.py:923 msgid "Wireless role (AP/station)" msgstr "無線ロール (AP/ステーション)" -#: dcim/forms/bulk_import.py:937 +#: netbox/dcim/forms/bulk_import.py:959 #, python-brace-format msgid "VDC {vdc} is not assigned to device {device}" msgstr "VDC {vdc} デバイスには割り当てられていません {device}" -#: dcim/forms/bulk_import.py:951 dcim/forms/model_forms.py:1000 -#: dcim/forms/model_forms.py:1575 dcim/forms/object_import.py:117 +#: 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 msgid "Rear port" msgstr "背面ポート" -#: dcim/forms/bulk_import.py:954 +#: netbox/dcim/forms/bulk_import.py:976 msgid "Corresponding rear port" msgstr "対応する背面ポート" -#: dcim/forms/bulk_import.py:959 dcim/forms/bulk_import.py:1000 -#: dcim/forms/bulk_import.py:1216 +#: netbox/dcim/forms/bulk_import.py:981 netbox/dcim/forms/bulk_import.py:1022 +#: netbox/dcim/forms/bulk_import.py:1238 msgid "Physical medium classification" msgstr "物理媒体の分類" -#: dcim/forms/bulk_import.py:1028 dcim/tables/devices.py:822 +#: netbox/dcim/forms/bulk_import.py:1050 netbox/dcim/tables/devices.py:822 msgid "Installed device" msgstr "取付済みデバイス" -#: dcim/forms/bulk_import.py:1032 +#: netbox/dcim/forms/bulk_import.py:1054 msgid "Child device installed within this bay" msgstr "このベイ内に取付された子デバイス" -#: dcim/forms/bulk_import.py:1034 +#: netbox/dcim/forms/bulk_import.py:1056 msgid "Child device not found." msgstr "子デバイスが見つかりません。" -#: dcim/forms/bulk_import.py:1092 +#: netbox/dcim/forms/bulk_import.py:1114 msgid "Parent inventory item" msgstr "親在庫品目" -#: dcim/forms/bulk_import.py:1095 +#: netbox/dcim/forms/bulk_import.py:1117 msgid "Component type" msgstr "構成要素タイプ" -#: dcim/forms/bulk_import.py:1099 +#: netbox/dcim/forms/bulk_import.py:1121 msgid "Component Type" msgstr "構成要素タイプ" -#: dcim/forms/bulk_import.py:1102 +#: netbox/dcim/forms/bulk_import.py:1124 msgid "Compnent name" msgstr "コンポーネント名" -#: dcim/forms/bulk_import.py:1104 +#: netbox/dcim/forms/bulk_import.py:1126 msgid "Component Name" msgstr "構成要素名" -#: dcim/forms/bulk_import.py:1146 +#: netbox/dcim/forms/bulk_import.py:1168 #, python-brace-format msgid "Component not found: {device} - {component_name}" msgstr "コンポーネントが見つかりません: {device} - {component_name}" -#: dcim/forms/bulk_import.py:1171 +#: netbox/dcim/forms/bulk_import.py:1193 msgid "Side A device" msgstr "サイド A デバイス" -#: dcim/forms/bulk_import.py:1174 dcim/forms/bulk_import.py:1192 +#: netbox/dcim/forms/bulk_import.py:1196 netbox/dcim/forms/bulk_import.py:1214 msgid "Device name" msgstr "デバイス名" -#: dcim/forms/bulk_import.py:1177 +#: netbox/dcim/forms/bulk_import.py:1199 msgid "Side A type" msgstr "サイド A タイプ" -#: dcim/forms/bulk_import.py:1180 dcim/forms/bulk_import.py:1198 +#: netbox/dcim/forms/bulk_import.py:1202 netbox/dcim/forms/bulk_import.py:1220 msgid "Termination type" msgstr "終了タイプ" -#: dcim/forms/bulk_import.py:1183 +#: netbox/dcim/forms/bulk_import.py:1205 msgid "Side A name" msgstr "サイド A 名" -#: dcim/forms/bulk_import.py:1184 dcim/forms/bulk_import.py:1202 +#: netbox/dcim/forms/bulk_import.py:1206 netbox/dcim/forms/bulk_import.py:1224 msgid "Termination name" msgstr "終端名" -#: dcim/forms/bulk_import.py:1189 +#: netbox/dcim/forms/bulk_import.py:1211 msgid "Side B device" msgstr "サイド B デバイス" -#: dcim/forms/bulk_import.py:1195 +#: netbox/dcim/forms/bulk_import.py:1217 msgid "Side B type" msgstr "サイド B タイプ" -#: dcim/forms/bulk_import.py:1201 +#: netbox/dcim/forms/bulk_import.py:1223 msgid "Side B name" msgstr "サイド B 名" -#: dcim/forms/bulk_import.py:1210 wireless/forms/bulk_import.py:86 +#: netbox/dcim/forms/bulk_import.py:1232 +#: netbox/wireless/forms/bulk_import.py:86 msgid "Connection status" msgstr "接続ステータス" -#: dcim/forms/bulk_import.py:1262 +#: netbox/dcim/forms/bulk_import.py:1284 #, python-brace-format msgid "Side {side_upper}: {device} {termination_object} is already connected" msgstr "サイド {side_upper}: {device} {termination_object} は既に接続されています" -#: dcim/forms/bulk_import.py:1268 +#: netbox/dcim/forms/bulk_import.py:1290 #, python-brace-format msgid "{side_upper} side termination not found: {device} {name}" msgstr "{side_upper} サイドターミネーションが見つかりません: {device} {name}" -#: dcim/forms/bulk_import.py:1293 dcim/forms/model_forms.py:785 -#: dcim/tables/devices.py:1027 templates/dcim/device.html:132 -#: templates/dcim/virtualchassis.html:27 templates/dcim/virtualchassis.html:67 +#: 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/templates/dcim/virtualchassis.html:27 +#: netbox/templates/dcim/virtualchassis.html:67 msgid "Master" msgstr "マスター" -#: dcim/forms/bulk_import.py:1297 +#: netbox/dcim/forms/bulk_import.py:1319 msgid "Master device" msgstr "マスターデバイス" -#: dcim/forms/bulk_import.py:1314 +#: netbox/dcim/forms/bulk_import.py:1336 msgid "Name of parent site" msgstr "親サイトの名前" -#: dcim/forms/bulk_import.py:1348 +#: netbox/dcim/forms/bulk_import.py:1370 msgid "Upstream power panel" msgstr "上流電源盤" -#: dcim/forms/bulk_import.py:1378 +#: netbox/dcim/forms/bulk_import.py:1400 msgid "Primary or redundant" msgstr "プライマリまたは冗長" -#: dcim/forms/bulk_import.py:1383 +#: netbox/dcim/forms/bulk_import.py:1405 msgid "Supply type (AC/DC)" msgstr "電源タイプ (AC/DC)" -#: dcim/forms/bulk_import.py:1388 +#: netbox/dcim/forms/bulk_import.py:1410 msgid "Single or three-phase" msgstr "単相または三相" -#: dcim/forms/bulk_import.py:1439 dcim/forms/model_forms.py:1670 -#: templates/dcim/device.html:190 templates/dcim/virtualdevicecontext.html:30 -#: templates/virtualization/virtualmachine.html:52 +#: netbox/dcim/forms/bulk_import.py:1461 netbox/dcim/forms/model_forms.py:1677 +#: netbox/templates/dcim/device.html:190 +#: netbox/templates/dcim/virtualdevicecontext.html:30 +#: netbox/templates/virtualization/virtualmachine.html:52 msgid "Primary IPv4" msgstr "プライマリ IPv4" -#: dcim/forms/bulk_import.py:1443 +#: netbox/dcim/forms/bulk_import.py:1465 msgid "IPv4 address with mask, e.g. 1.2.3.4/24" msgstr "マスク付きの IPv4 アドレス (例:1.2.3.4/24)" -#: dcim/forms/bulk_import.py:1446 dcim/forms/model_forms.py:1679 -#: templates/dcim/device.html:206 templates/dcim/virtualdevicecontext.html:41 -#: templates/virtualization/virtualmachine.html:68 +#: netbox/dcim/forms/bulk_import.py:1468 netbox/dcim/forms/model_forms.py:1686 +#: netbox/templates/dcim/device.html:206 +#: netbox/templates/dcim/virtualdevicecontext.html:41 +#: netbox/templates/virtualization/virtualmachine.html:68 msgid "Primary IPv6" msgstr "プライマリ IPv6" -#: dcim/forms/bulk_import.py:1450 +#: netbox/dcim/forms/bulk_import.py:1472 msgid "IPv6 address with prefix length, e.g. 2001:db8::1/64" msgstr "プレフィックス長のある IPv6 アドレス、例:2001: db8:: 1/64" -#: dcim/forms/common.py:24 dcim/models/device_components.py:527 -#: templates/dcim/interface.html:57 -#: templates/virtualization/vminterface.html:55 -#: virtualization/forms/bulk_edit.py:225 +#: netbox/dcim/forms/common.py:24 netbox/dcim/models/device_components.py:527 +#: netbox/templates/dcim/interface.html:57 +#: netbox/templates/virtualization/vminterface.html:55 +#: netbox/virtualization/forms/bulk_edit.py:225 msgid "MTU" msgstr "MTU" -#: dcim/forms/common.py:65 +#: netbox/dcim/forms/common.py:65 #, python-brace-format msgid "" "The tagged VLANs ({vlans}) must belong to the same site as the interface's " "parent device/VM, or they must be global" msgstr "タグ付き VLAN ({vlans}) はインタフェースの親デバイス/VMと同サイトに属しているか、グローバルである必要があります" -#: dcim/forms/common.py:126 +#: netbox/dcim/forms/common.py:126 msgid "" "Cannot install module with placeholder values in a module bay with no " "position defined." msgstr "位置が定義されていないモジュールベイには、プレースホルダー値のあるモジュールを挿入できません。" -#: dcim/forms/common.py:131 +#: netbox/dcim/forms/common.py:131 #, python-brace-format msgid "" "Cannot install module with placeholder values in a module bay tree {level} " @@ -4202,382 +4635,427 @@ msgstr "" "モジュールベイツリーの{level}レベルにはプレースホルダ値のあるモジュールをインストールできませんが、 " "{tokens}個のプレースホルダが与えられています。" -#: dcim/forms/common.py:144 +#: netbox/dcim/forms/common.py:144 #, python-brace-format msgid "Cannot adopt {model} {name} as it already belongs to a module" msgstr " {model} {name} は既にモジュールに属しているので採用できません" -#: dcim/forms/common.py:153 +#: netbox/dcim/forms/common.py:153 #, python-brace-format msgid "A {model} named {name} already exists" msgstr "{model} {name} は既に存在しています" -#: dcim/forms/connections.py:49 dcim/forms/model_forms.py:738 -#: dcim/tables/power.py:66 templates/dcim/inc/cable_termination.html:37 -#: templates/dcim/powerfeed.html:24 templates/dcim/powerpanel.html:19 -#: templates/dcim/trace/powerpanel.html:4 +#: netbox/dcim/forms/connections.py:49 netbox/dcim/forms/model_forms.py:738 +#: netbox/dcim/tables/power.py:66 +#: netbox/templates/dcim/inc/cable_termination.html:37 +#: netbox/templates/dcim/powerfeed.html:24 +#: netbox/templates/dcim/powerpanel.html:19 +#: netbox/templates/dcim/trace/powerpanel.html:4 msgid "Power Panel" msgstr "電源盤" -#: dcim/forms/connections.py:58 dcim/forms/model_forms.py:765 -#: templates/dcim/powerfeed.html:21 templates/dcim/powerport.html:80 +#: netbox/dcim/forms/connections.py:58 netbox/dcim/forms/model_forms.py:765 +#: netbox/templates/dcim/powerfeed.html:21 +#: netbox/templates/dcim/powerport.html:80 msgid "Power Feed" msgstr "電源タップ" -#: dcim/forms/connections.py:81 +#: netbox/dcim/forms/connections.py:81 msgid "Side" msgstr "サイド" -#: dcim/forms/filtersets.py:136 dcim/tables/devices.py:295 +#: netbox/dcim/forms/filtersets.py:136 netbox/dcim/tables/devices.py:295 msgid "Device Status" msgstr "デバイスステータス" -#: dcim/forms/filtersets.py:149 +#: netbox/dcim/forms/filtersets.py:149 msgid "Parent region" msgstr "親リージョン" -#: dcim/forms/filtersets.py:163 tenancy/forms/bulk_import.py:28 -#: tenancy/forms/bulk_import.py:62 tenancy/forms/filtersets.py:33 -#: tenancy/forms/filtersets.py:62 wireless/forms/bulk_import.py:25 -#: wireless/forms/filtersets.py:25 +#: netbox/dcim/forms/filtersets.py:163 netbox/tenancy/forms/bulk_import.py:28 +#: netbox/tenancy/forms/bulk_import.py:62 +#: netbox/tenancy/forms/filtersets.py:33 netbox/tenancy/forms/filtersets.py:62 +#: netbox/wireless/forms/bulk_import.py:25 +#: netbox/wireless/forms/filtersets.py:25 msgid "Parent group" msgstr "親グループ" -#: dcim/forms/filtersets.py:242 templates/dcim/location.html:58 -#: templates/dcim/site.html:56 +#: netbox/dcim/forms/filtersets.py:242 netbox/templates/dcim/location.html:58 +#: netbox/templates/dcim/site.html:56 msgid "Facility" msgstr "ファシリティ" -#: dcim/forms/filtersets.py:380 -msgid "Rack type" -msgstr "ラックタイプ" - -#: dcim/forms/filtersets.py:397 +#: netbox/dcim/forms/filtersets.py:397 msgid "Function" msgstr "機能" -#: dcim/forms/filtersets.py:483 dcim/forms/model_forms.py:373 -#: templates/inc/panels/image_attachments.html:6 +#: netbox/dcim/forms/filtersets.py:483 netbox/dcim/forms/model_forms.py:373 +#: netbox/templates/inc/panels/image_attachments.html:6 msgid "Images" msgstr "画像" -#: dcim/forms/filtersets.py:486 dcim/forms/filtersets.py:611 -#: dcim/forms/filtersets.py:726 +#: netbox/dcim/forms/filtersets.py:486 netbox/dcim/forms/filtersets.py:611 +#: netbox/dcim/forms/filtersets.py:726 msgid "Components" msgstr "構成要素" -#: dcim/forms/filtersets.py:506 +#: netbox/dcim/forms/filtersets.py:506 msgid "Subdevice role" msgstr "サブデバイスロール" -#: dcim/forms/filtersets.py:790 dcim/tables/racks.py:54 -#: templates/dcim/racktype.html:20 +#: netbox/dcim/forms/filtersets.py:790 netbox/dcim/tables/racks.py:54 +#: netbox/templates/dcim/racktype.html:20 msgid "Model" msgstr "モデル" -#: dcim/forms/filtersets.py:834 +#: netbox/dcim/forms/filtersets.py:834 msgid "Has an OOB IP" msgstr "OOB IP アドレスを持っている" -#: dcim/forms/filtersets.py:841 +#: netbox/dcim/forms/filtersets.py:841 msgid "Virtual chassis member" msgstr "バーチャルシャーシメンバー" -#: dcim/forms/filtersets.py:890 +#: netbox/dcim/forms/filtersets.py:890 msgid "Has virtual device contexts" msgstr "仮想デバイスコンテキストがある" -#: dcim/forms/filtersets.py:903 extras/filtersets.py:585 -#: ipam/forms/filtersets.py:452 virtualization/forms/filtersets.py:112 +#: netbox/dcim/forms/filtersets.py:903 netbox/extras/filtersets.py:585 +#: netbox/ipam/forms/filtersets.py:452 +#: netbox/virtualization/forms/filtersets.py:112 msgid "Cluster group" msgstr "クラスタグループ" -#: dcim/forms/filtersets.py:1210 +#: netbox/dcim/forms/filtersets.py:1210 msgid "Cabled" msgstr "ケーブル接続済" -#: dcim/forms/filtersets.py:1217 +#: netbox/dcim/forms/filtersets.py:1217 msgid "Occupied" msgstr "専有済" -#: dcim/forms/filtersets.py:1244 dcim/forms/filtersets.py:1269 -#: dcim/forms/filtersets.py:1293 dcim/forms/filtersets.py:1313 -#: dcim/forms/filtersets.py:1336 dcim/tables/devices.py:364 -#: templates/dcim/consoleport.html:55 templates/dcim/consoleserverport.html:55 -#: templates/dcim/frontport.html:69 templates/dcim/interface.html:140 -#: templates/dcim/powerfeed.html:110 templates/dcim/poweroutlet.html:59 -#: templates/dcim/powerport.html:59 templates/dcim/rearport.html:65 +#: netbox/dcim/forms/filtersets.py: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/templates/dcim/consoleport.html:55 +#: netbox/templates/dcim/consoleserverport.html:55 +#: netbox/templates/dcim/frontport.html:69 +#: netbox/templates/dcim/interface.html:140 +#: netbox/templates/dcim/powerfeed.html:110 +#: netbox/templates/dcim/poweroutlet.html:59 +#: netbox/templates/dcim/powerport.html:59 +#: netbox/templates/dcim/rearport.html:65 msgid "Connection" msgstr "接続" -#: dcim/forms/filtersets.py:1348 extras/forms/bulk_edit.py:326 -#: extras/forms/bulk_import.py:247 extras/forms/filtersets.py:464 -#: extras/forms/model_forms.py:675 extras/tables/tables.py:579 -#: templates/extras/journalentry.html:30 +#: netbox/dcim/forms/filtersets.py:1348 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 "種類" -#: dcim/forms/filtersets.py:1377 +#: netbox/dcim/forms/filtersets.py:1377 msgid "Mgmt only" msgstr "管理のみ" -#: dcim/forms/filtersets.py:1389 dcim/forms/model_forms.py:1383 -#: dcim/models/device_components.py:629 templates/dcim/interface.html:129 +#: 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 msgid "WWN" msgstr "WWN" -#: dcim/forms/filtersets.py:1409 +#: netbox/dcim/forms/filtersets.py:1409 msgid "Wireless channel" msgstr "無線チャネル" -#: dcim/forms/filtersets.py:1413 +#: netbox/dcim/forms/filtersets.py:1413 msgid "Channel frequency (MHz)" msgstr "チャネル周波数 (MHz)" -#: dcim/forms/filtersets.py:1417 +#: netbox/dcim/forms/filtersets.py:1417 msgid "Channel width (MHz)" msgstr "チャネル幅 (MHz)" -#: dcim/forms/filtersets.py:1421 templates/dcim/interface.html:85 +#: netbox/dcim/forms/filtersets.py:1421 +#: netbox/templates/dcim/interface.html:85 msgid "Transmit power (dBm)" msgstr "送信出力 (dBm)" -#: dcim/forms/filtersets.py:1446 dcim/forms/filtersets.py:1471 -#: dcim/tables/devices.py:327 templates/dcim/cable.html:12 -#: templates/dcim/cable_trace.html:46 templates/dcim/frontport.html:77 -#: templates/dcim/htmx/cable_edit.html:50 -#: templates/dcim/inc/connection_endpoints.html:4 -#: templates/dcim/rearport.html:73 templates/dcim/trace/cable.html:7 +#: netbox/dcim/forms/filtersets.py:1446 netbox/dcim/forms/filtersets.py:1471 +#: netbox/dcim/tables/devices.py:327 netbox/templates/dcim/cable.html:12 +#: netbox/templates/dcim/cable_trace.html:46 +#: netbox/templates/dcim/frontport.html:77 +#: netbox/templates/dcim/htmx/cable_edit.html:50 +#: netbox/templates/dcim/inc/connection_endpoints.html:4 +#: netbox/templates/dcim/rearport.html:73 +#: netbox/templates/dcim/trace/cable.html:7 msgid "Cable" msgstr "ケーブル" -#: dcim/forms/filtersets.py:1550 dcim/tables/devices.py:949 +#: netbox/dcim/forms/filtersets.py:1550 netbox/dcim/tables/devices.py:949 msgid "Discovered" msgstr "自動検出" -#: dcim/forms/formsets.py:20 +#: netbox/dcim/forms/formsets.py:20 #, python-brace-format msgid "A virtual chassis member already exists in position {vc_position}." msgstr "バーチャルシャーシメンバーはすでに{vc_position}に存在します 。" -#: dcim/forms/model_forms.py:140 +#: netbox/dcim/forms/model_forms.py:140 msgid "Contact Info" msgstr "連絡先情報" -#: dcim/forms/model_forms.py:195 templates/dcim/rackrole.html:19 +#: netbox/dcim/forms/model_forms.py:195 netbox/templates/dcim/rackrole.html:19 msgid "Rack Role" msgstr "ラックロール" -#: dcim/forms/model_forms.py:212 dcim/forms/model_forms.py:362 -#: dcim/forms/model_forms.py:446 utilities/forms/fields/fields.py:47 +#: netbox/dcim/forms/model_forms.py:212 netbox/dcim/forms/model_forms.py:362 +#: netbox/dcim/forms/model_forms.py:446 +#: netbox/utilities/forms/fields/fields.py:47 msgid "Slug" msgstr "Slug" -#: dcim/forms/model_forms.py:259 +#: netbox/dcim/forms/model_forms.py:259 msgid "Select a pre-defined rack type, or set physical characteristics below." msgstr "定義済みのラックタイプを選択するか、以下で物理特性を設定してください。" -#: dcim/forms/model_forms.py:265 +#: netbox/dcim/forms/model_forms.py:265 msgid "Inventory Control" msgstr "在庫管理" -#: dcim/forms/model_forms.py:313 +#: netbox/dcim/forms/model_forms.py:313 msgid "" "Comma-separated list of numeric unit IDs. A range may be specified using a " "hyphen." msgstr "カンマ区切りのユニット ID 。範囲はハイフンを使用して指定できます。" -#: dcim/forms/model_forms.py:322 dcim/tables/racks.py:202 +#: netbox/dcim/forms/model_forms.py:322 netbox/dcim/tables/racks.py:202 msgid "Reservation" msgstr "予約" -#: dcim/forms/model_forms.py:423 templates/dcim/devicerole.html:23 +#: netbox/dcim/forms/model_forms.py:423 +#: netbox/templates/dcim/devicerole.html:23 msgid "Device Role" msgstr "デバイスロール" -#: dcim/forms/model_forms.py:490 dcim/models/devices.py:644 +#: netbox/dcim/forms/model_forms.py:490 netbox/dcim/models/devices.py:644 msgid "The lowest-numbered unit occupied by the device" msgstr "デバイスが使用している最も小さいユニット番号" -#: dcim/forms/model_forms.py:547 +#: netbox/dcim/forms/model_forms.py:547 msgid "The position in the virtual chassis this device is identified by" msgstr "仮想シャーシ内の位置" -#: dcim/forms/model_forms.py:552 +#: netbox/dcim/forms/model_forms.py:552 msgid "The priority of the device in the virtual chassis" msgstr "仮想シャーシ内の優先度" -#: dcim/forms/model_forms.py:659 +#: netbox/dcim/forms/model_forms.py:659 msgid "Automatically populate components associated with this module type" msgstr "このモジュールタイプに関連する構成要素を自動的に入力する" -#: dcim/forms/model_forms.py:767 +#: netbox/dcim/forms/model_forms.py:767 msgid "Characteristics" msgstr "特性" -#: dcim/forms/model_forms.py:1087 +#: netbox/dcim/forms/model_forms.py:914 +#, python-brace-format +msgid "" +"Alphanumeric ranges are supported for bulk creation. Mixed cases and types " +"within a single range are not supported (example: " +"[ge,xe]-0/0/[0-9]). The token {module}, if " +"present, will be automatically replaced with the position value when " +"creating a new module." +msgstr "" +"英数字の範囲は一括作成に対応しています。1 つの範囲内で大文字と小文字や文字種の混在は対応していません (例: " +"1[ge,xe]-0/0/[0-9]1)。トークン " +"{module}が存在する場合、新しいモジュールを作成する際に、自動的に位置の値に置き換えられます。" + +#: netbox/dcim/forms/model_forms.py:1094 msgid "Console port template" msgstr "コンソールポートテンプレート" -#: dcim/forms/model_forms.py:1095 +#: netbox/dcim/forms/model_forms.py:1102 msgid "Console server port template" msgstr "コンソールサーバポートテンプレート" -#: dcim/forms/model_forms.py:1103 +#: netbox/dcim/forms/model_forms.py:1110 msgid "Front port template" msgstr "全面ポートテンプレート" -#: dcim/forms/model_forms.py:1111 +#: netbox/dcim/forms/model_forms.py:1118 msgid "Interface template" msgstr "インタフェーステンプレート" -#: dcim/forms/model_forms.py:1119 +#: netbox/dcim/forms/model_forms.py:1126 msgid "Power outlet template" msgstr "電源コンセントテンプレート" -#: dcim/forms/model_forms.py:1127 +#: netbox/dcim/forms/model_forms.py:1134 msgid "Power port template" msgstr "電源ポートテンプレート" -#: dcim/forms/model_forms.py:1135 +#: netbox/dcim/forms/model_forms.py:1142 msgid "Rear port template" msgstr "背面ポートテンプレート" -#: dcim/forms/model_forms.py:1144 dcim/forms/model_forms.py:1388 -#: dcim/forms/model_forms.py:1551 dcim/forms/model_forms.py:1583 -#: dcim/tables/connections.py:65 ipam/forms/bulk_import.py:318 -#: ipam/forms/model_forms.py:280 ipam/forms/model_forms.py:289 -#: ipam/tables/fhrp.py:64 ipam/tables/ip.py:372 ipam/tables/vlans.py:169 -#: templates/circuits/inc/circuit_termination_fields.html:51 -#: templates/dcim/frontport.html:106 templates/dcim/interface.html:27 -#: templates/dcim/interface.html:184 templates/dcim/interface.html:310 -#: templates/dcim/rearport.html:102 -#: templates/virtualization/vminterface.html:18 -#: templates/vpn/tunneltermination.html:31 -#: templates/wireless/inc/wirelesslink_interface.html:10 -#: templates/wireless/wirelesslink.html:10 -#: templates/wireless/wirelesslink.html:55 -#: virtualization/forms/model_forms.py:348 vpn/forms/bulk_import.py:297 -#: vpn/forms/model_forms.py:436 vpn/forms/model_forms.py:445 -#: wireless/forms/model_forms.py:113 wireless/forms/model_forms.py:155 +#: netbox/dcim/forms/model_forms.py: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 "インタフェース" -#: dcim/forms/model_forms.py:1145 dcim/forms/model_forms.py:1584 -#: dcim/tables/connections.py:27 templates/dcim/consoleport.html:17 -#: templates/dcim/consoleserverport.html:74 templates/dcim/frontport.html:112 +#: netbox/dcim/forms/model_forms.py:1152 netbox/dcim/forms/model_forms.py:1591 +#: netbox/dcim/tables/connections.py:27 +#: netbox/templates/dcim/consoleport.html:17 +#: netbox/templates/dcim/consoleserverport.html:74 +#: netbox/templates/dcim/frontport.html:112 msgid "Console Port" msgstr "コンソールポート" -#: dcim/forms/model_forms.py:1146 dcim/forms/model_forms.py:1585 -#: templates/dcim/consoleport.html:73 templates/dcim/consoleserverport.html:17 -#: templates/dcim/frontport.html:109 +#: netbox/dcim/forms/model_forms.py:1153 netbox/dcim/forms/model_forms.py:1592 +#: netbox/templates/dcim/consoleport.html:73 +#: netbox/templates/dcim/consoleserverport.html:17 +#: netbox/templates/dcim/frontport.html:109 msgid "Console Server Port" msgstr "コンソールサーバポート" -#: dcim/forms/model_forms.py:1147 dcim/forms/model_forms.py:1586 -#: templates/circuits/inc/circuit_termination_fields.html:52 -#: templates/dcim/consoleport.html:76 templates/dcim/consoleserverport.html:77 -#: templates/dcim/frontport.html:17 templates/dcim/frontport.html:115 -#: templates/dcim/interface.html:187 templates/dcim/rearport.html:105 +#: netbox/dcim/forms/model_forms.py:1154 netbox/dcim/forms/model_forms.py:1593 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:52 +#: netbox/templates/dcim/consoleport.html:76 +#: netbox/templates/dcim/consoleserverport.html:77 +#: netbox/templates/dcim/frontport.html:17 +#: netbox/templates/dcim/frontport.html:115 +#: netbox/templates/dcim/interface.html:187 +#: netbox/templates/dcim/rearport.html:105 msgid "Front Port" msgstr "前面ポート" -#: dcim/forms/model_forms.py:1148 dcim/forms/model_forms.py:1587 -#: dcim/tables/devices.py:710 -#: templates/circuits/inc/circuit_termination_fields.html:53 -#: templates/dcim/consoleport.html:79 templates/dcim/consoleserverport.html:80 -#: templates/dcim/frontport.html:50 templates/dcim/frontport.html:118 -#: templates/dcim/interface.html:190 templates/dcim/rearport.html:17 -#: templates/dcim/rearport.html:108 +#: netbox/dcim/forms/model_forms.py:1155 netbox/dcim/forms/model_forms.py:1594 +#: netbox/dcim/tables/devices.py:710 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:53 +#: netbox/templates/dcim/consoleport.html:79 +#: netbox/templates/dcim/consoleserverport.html:80 +#: netbox/templates/dcim/frontport.html:50 +#: netbox/templates/dcim/frontport.html:118 +#: netbox/templates/dcim/interface.html:190 +#: netbox/templates/dcim/rearport.html:17 +#: netbox/templates/dcim/rearport.html:108 msgid "Rear Port" msgstr "背面ポート" -#: dcim/forms/model_forms.py:1149 dcim/forms/model_forms.py:1588 -#: dcim/tables/connections.py:46 dcim/tables/devices.py:512 -#: templates/dcim/poweroutlet.html:44 templates/dcim/powerport.html:17 +#: 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/templates/dcim/powerport.html:17 msgid "Power Port" msgstr "電源ポート" -#: dcim/forms/model_forms.py:1150 dcim/forms/model_forms.py:1589 -#: templates/dcim/poweroutlet.html:17 templates/dcim/powerport.html:77 +#: netbox/dcim/forms/model_forms.py:1157 netbox/dcim/forms/model_forms.py:1596 +#: netbox/templates/dcim/poweroutlet.html:17 +#: netbox/templates/dcim/powerport.html:77 msgid "Power Outlet" msgstr "電源コンセント" -#: dcim/forms/model_forms.py:1152 dcim/forms/model_forms.py:1591 +#: netbox/dcim/forms/model_forms.py:1159 netbox/dcim/forms/model_forms.py:1598 msgid "Component Assignment" msgstr "構成要素割り当て" -#: dcim/forms/model_forms.py:1195 dcim/forms/model_forms.py:1638 +#: netbox/dcim/forms/model_forms.py:1202 netbox/dcim/forms/model_forms.py:1645 msgid "An InventoryItem can only be assigned to a single component." msgstr "在庫品目は1つの構成要素にのみ割り当てることができます。" -#: dcim/forms/model_forms.py:1332 +#: netbox/dcim/forms/model_forms.py:1339 msgid "LAG interface" msgstr "LAG インタフェース" -#: dcim/forms/model_forms.py:1355 +#: netbox/dcim/forms/model_forms.py:1362 msgid "Filter VLANs available for assignment by group." msgstr "割り当て可能な VLAN をグループ別にフィルタリングします。" -#: dcim/forms/model_forms.py:1484 +#: netbox/dcim/forms/model_forms.py:1491 msgid "Child Device" msgstr "子デバイス" -#: dcim/forms/model_forms.py:1485 +#: netbox/dcim/forms/model_forms.py:1492 msgid "" "Child devices must first be created and assigned to the site and rack of the" " parent device." msgstr "まず子デバイスを作成し、親デバイスのサイトとラックに割り当てる必要があります。" -#: dcim/forms/model_forms.py:1527 +#: netbox/dcim/forms/model_forms.py:1534 msgid "Console port" msgstr "コンソールポート" -#: dcim/forms/model_forms.py:1535 +#: netbox/dcim/forms/model_forms.py:1542 msgid "Console server port" msgstr "コンソールサーバポート" -#: dcim/forms/model_forms.py:1543 +#: netbox/dcim/forms/model_forms.py:1550 msgid "Front port" msgstr "前面ポート" -#: dcim/forms/model_forms.py:1559 +#: netbox/dcim/forms/model_forms.py:1566 msgid "Power outlet" msgstr "電源コンセント" -#: dcim/forms/model_forms.py:1579 templates/dcim/inventoryitem.html:17 +#: netbox/dcim/forms/model_forms.py:1586 +#: netbox/templates/dcim/inventoryitem.html:17 msgid "Inventory Item" msgstr "在庫品目" -#: dcim/forms/model_forms.py:1652 templates/dcim/inventoryitemrole.html:15 +#: netbox/dcim/forms/model_forms.py:1659 +#: netbox/templates/dcim/inventoryitemrole.html:15 msgid "Inventory Item Role" msgstr "在庫品目ロール" -#: dcim/forms/object_create.py:48 dcim/forms/object_create.py:199 -#: dcim/forms/object_create.py:355 +#: netbox/dcim/forms/object_create.py:48 +#: netbox/dcim/forms/object_create.py:199 +#: netbox/dcim/forms/object_create.py:347 msgid "" "Alphanumeric ranges are supported. (Must match the number of objects being " "created.)" msgstr "英数字の範囲がサポートされています。(作成するオブジェクトの数と一致する必要があります)。" -#: dcim/forms/object_create.py:68 +#: netbox/dcim/forms/object_create.py:68 #, python-brace-format msgid "" "The provided pattern specifies {value_count} values, but {pattern_count} are" " expected." msgstr "パターンは {value_count} 個の値を示す範囲を指定しますが、 {pattern_count} 個の値が必要です。" -#: dcim/forms/object_create.py:110 dcim/forms/object_create.py:271 -#: dcim/tables/devices.py:252 +#: netbox/dcim/forms/object_create.py:110 +#: netbox/dcim/forms/object_create.py:263 netbox/dcim/tables/devices.py:252 msgid "Rear ports" msgstr "背面ポート" -#: dcim/forms/object_create.py:111 dcim/forms/object_create.py:272 +#: netbox/dcim/forms/object_create.py:111 +#: netbox/dcim/forms/object_create.py:264 msgid "Select one rear port assignment for each front port being created." msgstr "前面ポートごとに背面ポート 1 つ割り当てます。" -#: dcim/forms/object_create.py:164 +#: netbox/dcim/forms/object_create.py:164 #, python-brace-format msgid "" "The number of front port templates to be created ({frontport_count}) must " @@ -4586,14 +5064,7 @@ msgstr "" "前面ポートテンプレートの数 ({frontport_count}) " "は選択した背面ポートの数({rearport_count})と一致する必要があります。" -#: dcim/forms/object_create.py:251 -#, python-brace-format -msgid "" -"The string {module} will be replaced with the position of the " -"assigned module, if any." -msgstr "文字列 {module} は(存在する場合)割当モジュールの位置に置き換えられます。" - -#: dcim/forms/object_create.py:320 +#: netbox/dcim/forms/object_create.py:312 #, python-brace-format msgid "" "The number of front ports to be created ({frontport_count}) must match the " @@ -4601,316 +5072,319 @@ msgid "" msgstr "" "前面ポートの数 ({frontport_count}) は選択した背面ポートの数 ({rearport_count}) と一致する必要があります。" -#: dcim/forms/object_create.py:409 dcim/tables/devices.py:1033 -#: ipam/tables/fhrp.py:31 templates/dcim/virtualchassis.html:53 -#: templates/dcim/virtualchassis_edit.html:47 templates/ipam/fhrpgroup.html:38 +#: netbox/dcim/forms/object_create.py:401 netbox/dcim/tables/devices.py:1033 +#: netbox/ipam/tables/fhrp.py:31 netbox/templates/dcim/virtualchassis.html:53 +#: netbox/templates/dcim/virtualchassis_edit.html:47 +#: netbox/templates/ipam/fhrpgroup.html:38 msgid "Members" msgstr "メンバー" -#: dcim/forms/object_create.py:418 +#: netbox/dcim/forms/object_create.py:410 msgid "Initial position" msgstr "初期ポジション" -#: dcim/forms/object_create.py:421 +#: netbox/dcim/forms/object_create.py:413 msgid "" "Position of the first member device. Increases by one for each additional " "member." msgstr "最初のメンバーのポジション。メンバーが増えるごとに 1 ずつ増えます。" -#: dcim/forms/object_create.py:435 +#: netbox/dcim/forms/object_create.py:427 msgid "A position must be specified for the first VC member." msgstr "最初の VC メンバーのポジションを指定する必要があります。" -#: dcim/models/cables.py:62 dcim/models/device_component_templates.py:55 -#: dcim/models/device_components.py:62 extras/models/customfields.py:111 +#: netbox/dcim/models/cables.py:62 +#: netbox/dcim/models/device_component_templates.py:55 +#: netbox/dcim/models/device_components.py:62 +#: netbox/extras/models/customfields.py:111 msgid "label" msgstr "ラベル" -#: dcim/models/cables.py:71 +#: netbox/dcim/models/cables.py:71 msgid "length" msgstr "長さ" -#: dcim/models/cables.py:78 +#: netbox/dcim/models/cables.py:78 msgid "length unit" msgstr "長さの単位" -#: dcim/models/cables.py:95 +#: netbox/dcim/models/cables.py:95 msgid "cable" msgstr "ケーブル" -#: dcim/models/cables.py:96 +#: netbox/dcim/models/cables.py:96 msgid "cables" msgstr "ケーブル" -#: dcim/models/cables.py:165 +#: netbox/dcim/models/cables.py:165 msgid "Must specify a unit when setting a cable length" msgstr "ケーブル長を設定するときは単位を指定する必要があります" -#: dcim/models/cables.py:168 +#: netbox/dcim/models/cables.py:168 msgid "Must define A and B terminations when creating a new cable." msgstr "新しいケーブルを作成するときは、A 終端と B 終端を定義する必要があります。" -#: dcim/models/cables.py:175 +#: netbox/dcim/models/cables.py:175 msgid "Cannot connect different termination types to same end of cable." msgstr "ケーブルの同じ端に異なる終端タイプを接続することはできません。" -#: dcim/models/cables.py:183 +#: netbox/dcim/models/cables.py:183 #, python-brace-format msgid "Incompatible termination types: {type_a} and {type_b}" msgstr "互換性のない終端タイプ: {type_a} そして {type_b}" -#: dcim/models/cables.py:193 +#: netbox/dcim/models/cables.py:193 msgid "A and B terminations cannot connect to the same object." msgstr "A 端子と B 端子を同じオブジェクトに接続することはできません。" -#: dcim/models/cables.py:260 ipam/models/asns.py:37 +#: netbox/dcim/models/cables.py:260 netbox/ipam/models/asns.py:37 msgid "end" msgstr "端" -#: dcim/models/cables.py:313 +#: netbox/dcim/models/cables.py:313 msgid "cable termination" msgstr "ケーブル終端" -#: dcim/models/cables.py:314 +#: netbox/dcim/models/cables.py:314 msgid "cable terminations" msgstr "ケーブル終端" -#: dcim/models/cables.py:333 +#: netbox/dcim/models/cables.py:333 #, python-brace-format msgid "" "Duplicate termination found for {app_label}.{model} {termination_id}: cable " "{cable_pk}" msgstr "の重複終了が見つかりました {app_label}。{model} {termination_id}: ケーブル {cable_pk}" -#: dcim/models/cables.py:343 +#: netbox/dcim/models/cables.py:343 #, python-brace-format msgid "Cables cannot be terminated to {type_display} interfaces" msgstr "ケーブルは終端できません {type_display} インターフェース" -#: dcim/models/cables.py:350 +#: netbox/dcim/models/cables.py:350 msgid "Circuit terminations attached to a provider network may not be cabled." msgstr "プロバイダーネットワークに接続されている回線終端はケーブル接続できない場合があります。" -#: dcim/models/cables.py:448 extras/models/configs.py:50 +#: netbox/dcim/models/cables.py:448 netbox/extras/models/configs.py:50 msgid "is active" msgstr "アクティブ" -#: dcim/models/cables.py:452 +#: netbox/dcim/models/cables.py:452 msgid "is complete" msgstr "完了" -#: dcim/models/cables.py:456 +#: netbox/dcim/models/cables.py:456 msgid "is split" msgstr "分割" -#: dcim/models/cables.py:464 +#: netbox/dcim/models/cables.py:464 msgid "cable path" msgstr "ケーブル経路" -#: dcim/models/cables.py:465 +#: netbox/dcim/models/cables.py:465 msgid "cable paths" msgstr "ケーブル経路" -#: dcim/models/device_component_templates.py:46 +#: netbox/dcim/models/device_component_templates.py:46 #, python-brace-format msgid "" "{module} is accepted as a substitution for the module bay position when " "attached to a module type." msgstr "{module} は、モジュールタイプに取り付けられる場合、モジュールベイ位置の代わりとして使用できます。" -#: dcim/models/device_component_templates.py:58 -#: dcim/models/device_components.py:65 +#: netbox/dcim/models/device_component_templates.py:58 +#: netbox/dcim/models/device_components.py:65 msgid "Physical label" msgstr "物理ラベル" -#: dcim/models/device_component_templates.py:103 +#: netbox/dcim/models/device_component_templates.py:103 msgid "Component templates cannot be moved to a different device type." msgstr "構成要素テンプレートを別のデバイスタイプに移動することはできません。" -#: dcim/models/device_component_templates.py:154 +#: netbox/dcim/models/device_component_templates.py:154 msgid "" "A component template cannot be associated with both a device type and a " "module type." msgstr "構成要素テンプレートをデバイスタイプとモジュールタイプの両方に関連付けることはできません。" -#: dcim/models/device_component_templates.py:158 +#: netbox/dcim/models/device_component_templates.py:158 msgid "" "A component template must be associated with either a device type or a " "module type." msgstr "構成要素テンプレートは、デバイスタイプまたはモジュールタイプのいずれかに関連付ける必要があります。" -#: dcim/models/device_component_templates.py:212 +#: netbox/dcim/models/device_component_templates.py:212 msgid "console port template" msgstr "コンソールポートテンプレート" -#: dcim/models/device_component_templates.py:213 +#: netbox/dcim/models/device_component_templates.py:213 msgid "console port templates" msgstr "コンソールポートテンプレート" -#: dcim/models/device_component_templates.py:246 +#: netbox/dcim/models/device_component_templates.py:246 msgid "console server port template" msgstr "コンソールサーバポートテンプレート" -#: dcim/models/device_component_templates.py:247 +#: netbox/dcim/models/device_component_templates.py:247 msgid "console server port templates" msgstr "コンソールサーバポートテンプレート" -#: dcim/models/device_component_templates.py:278 -#: dcim/models/device_components.py:352 +#: netbox/dcim/models/device_component_templates.py:278 +#: netbox/dcim/models/device_components.py:352 msgid "maximum draw" msgstr "最大消費電力" -#: dcim/models/device_component_templates.py:285 -#: dcim/models/device_components.py:359 +#: netbox/dcim/models/device_component_templates.py:285 +#: netbox/dcim/models/device_components.py:359 msgid "allocated draw" msgstr "割当消費電力" -#: dcim/models/device_component_templates.py:295 +#: netbox/dcim/models/device_component_templates.py:295 msgid "power port template" msgstr "電源ポートテンプレート" -#: dcim/models/device_component_templates.py:296 +#: netbox/dcim/models/device_component_templates.py:296 msgid "power port templates" msgstr "電源ポートテンプレート" -#: dcim/models/device_component_templates.py:315 -#: dcim/models/device_components.py:382 +#: netbox/dcim/models/device_component_templates.py:315 +#: netbox/dcim/models/device_components.py:382 #, python-brace-format msgid "Allocated draw cannot exceed the maximum draw ({maximum_draw}W)." msgstr "割当消費電力は最大消費電力 ({maximum_draw}W) を超えることはできません。" -#: dcim/models/device_component_templates.py:347 -#: dcim/models/device_components.py:477 +#: netbox/dcim/models/device_component_templates.py:347 +#: netbox/dcim/models/device_components.py:477 msgid "feed leg" msgstr "供給端子" -#: dcim/models/device_component_templates.py:351 -#: dcim/models/device_components.py:481 +#: netbox/dcim/models/device_component_templates.py:351 +#: netbox/dcim/models/device_components.py:481 msgid "Phase (for three-phase feeds)" msgstr "電力相 (三相電源用)" -#: dcim/models/device_component_templates.py:357 +#: netbox/dcim/models/device_component_templates.py:357 msgid "power outlet template" msgstr "電源コンセントテンプレート" -#: dcim/models/device_component_templates.py:358 +#: netbox/dcim/models/device_component_templates.py:358 msgid "power outlet templates" msgstr "電源コンセントテンプレート" -#: dcim/models/device_component_templates.py:367 +#: netbox/dcim/models/device_component_templates.py:367 #, python-brace-format msgid "Parent power port ({power_port}) must belong to the same device type" msgstr "親電源ポート ({power_port}) は同じデバイスタイプに属している必要があります" -#: dcim/models/device_component_templates.py:371 +#: netbox/dcim/models/device_component_templates.py:371 #, python-brace-format msgid "Parent power port ({power_port}) must belong to the same module type" msgstr "親電源ポート ({power_port}) は同じモジュールタイプに属している必要があります" -#: dcim/models/device_component_templates.py:423 -#: dcim/models/device_components.py:611 +#: netbox/dcim/models/device_component_templates.py:423 +#: netbox/dcim/models/device_components.py:611 msgid "management only" msgstr "管理のみ" -#: dcim/models/device_component_templates.py:431 -#: dcim/models/device_components.py:550 +#: netbox/dcim/models/device_component_templates.py:431 +#: netbox/dcim/models/device_components.py:550 msgid "bridge interface" msgstr "ブリッジインタフェース" -#: dcim/models/device_component_templates.py:449 -#: dcim/models/device_components.py:636 +#: netbox/dcim/models/device_component_templates.py:449 +#: netbox/dcim/models/device_components.py:636 msgid "wireless role" msgstr "無線ロール" -#: dcim/models/device_component_templates.py:455 +#: netbox/dcim/models/device_component_templates.py:455 msgid "interface template" msgstr "インタフェーステンプレート" -#: dcim/models/device_component_templates.py:456 +#: netbox/dcim/models/device_component_templates.py:456 msgid "interface templates" msgstr "インタフェーステンプレート" -#: dcim/models/device_component_templates.py:463 -#: dcim/models/device_components.py:804 -#: virtualization/models/virtualmachines.py:405 +#: netbox/dcim/models/device_component_templates.py:463 +#: netbox/dcim/models/device_components.py:804 +#: netbox/virtualization/models/virtualmachines.py:405 msgid "An interface cannot be bridged to itself." msgstr "インタフェースを自分自身にブリッジすることはできません。" -#: dcim/models/device_component_templates.py:466 +#: netbox/dcim/models/device_component_templates.py:466 #, python-brace-format msgid "Bridge interface ({bridge}) must belong to the same device type" msgstr "ブリッジインタフェース ({bridge}) は同じデバイスタイプに属している必要があります" -#: dcim/models/device_component_templates.py:470 +#: netbox/dcim/models/device_component_templates.py:470 #, python-brace-format msgid "Bridge interface ({bridge}) must belong to the same module type" msgstr "ブリッジインタフェース ({bridge}) は同じモジュールタイプに属している必要があります" -#: dcim/models/device_component_templates.py:526 -#: dcim/models/device_components.py:984 +#: netbox/dcim/models/device_component_templates.py:526 +#: netbox/dcim/models/device_components.py:984 msgid "rear port position" msgstr "背面ポート位置" -#: dcim/models/device_component_templates.py:551 +#: netbox/dcim/models/device_component_templates.py:551 msgid "front port template" msgstr "前面ポートテンプレート" -#: dcim/models/device_component_templates.py:552 +#: netbox/dcim/models/device_component_templates.py:552 msgid "front port templates" msgstr "前面ポートテンプレート" -#: dcim/models/device_component_templates.py:562 +#: netbox/dcim/models/device_component_templates.py:562 #, python-brace-format msgid "Rear port ({name}) must belong to the same device type" msgstr "背面ポート ({name}) は同じデバイスタイプに属している必要があります" -#: dcim/models/device_component_templates.py:568 +#: netbox/dcim/models/device_component_templates.py:568 #, python-brace-format msgid "" "Invalid rear port position ({position}); rear port {name} has only {count} " "positions" msgstr "背面ポートの位置 ({position}) が無効です; 背面ポート {name} は{count}箇所しかありません" -#: dcim/models/device_component_templates.py:621 -#: dcim/models/device_components.py:1053 +#: netbox/dcim/models/device_component_templates.py:621 +#: netbox/dcim/models/device_components.py:1053 msgid "positions" msgstr "位置" -#: dcim/models/device_component_templates.py:632 +#: netbox/dcim/models/device_component_templates.py:632 msgid "rear port template" msgstr "背面ポートテンプレート" -#: dcim/models/device_component_templates.py:633 +#: netbox/dcim/models/device_component_templates.py:633 msgid "rear port templates" msgstr "背面ポートテンプレート" -#: dcim/models/device_component_templates.py:662 -#: dcim/models/device_components.py:1103 +#: netbox/dcim/models/device_component_templates.py:662 +#: netbox/dcim/models/device_components.py:1103 msgid "position" msgstr "位置" -#: dcim/models/device_component_templates.py:665 -#: dcim/models/device_components.py:1106 +#: netbox/dcim/models/device_component_templates.py:665 +#: netbox/dcim/models/device_components.py:1106 msgid "Identifier to reference when renaming installed components" msgstr "取付済み構成要素名を変更する際に参照する識別子" -#: dcim/models/device_component_templates.py:671 +#: netbox/dcim/models/device_component_templates.py:671 msgid "module bay template" msgstr "モジュールベイテンプレート" -#: dcim/models/device_component_templates.py:672 +#: netbox/dcim/models/device_component_templates.py:672 msgid "module bay templates" msgstr "モジュールベイテンプレート" -#: dcim/models/device_component_templates.py:699 +#: netbox/dcim/models/device_component_templates.py:699 msgid "device bay template" msgstr "デバイスベイテンプレート" -#: dcim/models/device_component_templates.py:700 +#: netbox/dcim/models/device_component_templates.py:700 msgid "device bay templates" msgstr "デバイスベイテンプレート" -#: dcim/models/device_component_templates.py:713 +#: netbox/dcim/models/device_component_templates.py:713 #, python-brace-format msgid "" "Subdevice role of device type ({device_type}) must be set to \"parent\" to " @@ -4918,207 +5392,212 @@ msgid "" msgstr "" "デバイスベイを許可するためには、デバイスタイプ ({device_type}) のサブデバイスロールを「parent」に設定する必要があります。" -#: dcim/models/device_component_templates.py:768 -#: dcim/models/device_components.py:1262 +#: netbox/dcim/models/device_component_templates.py:768 +#: netbox/dcim/models/device_components.py:1262 msgid "part ID" msgstr "パーツ ID" -#: dcim/models/device_component_templates.py:770 -#: dcim/models/device_components.py:1264 +#: netbox/dcim/models/device_component_templates.py:770 +#: netbox/dcim/models/device_components.py:1264 msgid "Manufacturer-assigned part identifier" msgstr "メーカ指定の部品識別子" -#: dcim/models/device_component_templates.py:787 +#: netbox/dcim/models/device_component_templates.py:787 msgid "inventory item template" msgstr "在庫品目テンプレート" -#: dcim/models/device_component_templates.py:788 +#: netbox/dcim/models/device_component_templates.py:788 msgid "inventory item templates" msgstr "在庫品目テンプレート" -#: dcim/models/device_components.py:105 +#: netbox/dcim/models/device_components.py:105 msgid "Components cannot be moved to a different device." msgstr "構成要素を別のデバイスに移動することはできません。" -#: dcim/models/device_components.py:144 +#: netbox/dcim/models/device_components.py:144 msgid "cable end" msgstr "ケーブル端" -#: dcim/models/device_components.py:150 +#: netbox/dcim/models/device_components.py:150 msgid "mark connected" msgstr "接続済みとしてマークする" -#: dcim/models/device_components.py:152 +#: netbox/dcim/models/device_components.py:152 msgid "Treat as if a cable is connected" msgstr "ケーブルが接続されているかのように扱う" -#: dcim/models/device_components.py:170 +#: netbox/dcim/models/device_components.py:170 msgid "Must specify cable end (A or B) when attaching a cable." msgstr "ケーブルを接続するときは、ケーブルの端 (A または B) を指定する必要があります。" -#: dcim/models/device_components.py:174 +#: netbox/dcim/models/device_components.py:174 msgid "Cable end must not be set without a cable." msgstr "ケーブルの端はケーブルなしでセットしないでください。" -#: dcim/models/device_components.py:178 +#: netbox/dcim/models/device_components.py:178 msgid "Cannot mark as connected with a cable attached." msgstr "ケーブルが接続されている状態では接続済みとマークできません。" -#: dcim/models/device_components.py:202 +#: netbox/dcim/models/device_components.py:202 #, python-brace-format msgid "{class_name} models must declare a parent_object property" msgstr "{class_name} モデルは親オブジェクトプロパティを宣言しなければなりません" -#: dcim/models/device_components.py:287 dcim/models/device_components.py:316 -#: dcim/models/device_components.py:349 dcim/models/device_components.py:467 +#: 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 msgid "Physical port type" msgstr "物理ポートタイプ" -#: dcim/models/device_components.py:290 dcim/models/device_components.py:319 +#: netbox/dcim/models/device_components.py:290 +#: netbox/dcim/models/device_components.py:319 msgid "speed" msgstr "速度" -#: dcim/models/device_components.py:294 dcim/models/device_components.py:323 +#: netbox/dcim/models/device_components.py:294 +#: netbox/dcim/models/device_components.py:323 msgid "Port speed in bits per second" msgstr "ポート速度 (bps)" -#: dcim/models/device_components.py:300 +#: netbox/dcim/models/device_components.py:300 msgid "console port" msgstr "コンソールポート" -#: dcim/models/device_components.py:301 +#: netbox/dcim/models/device_components.py:301 msgid "console ports" msgstr "コンソールポート" -#: dcim/models/device_components.py:329 +#: netbox/dcim/models/device_components.py:329 msgid "console server port" msgstr "コンソールサーバポート" -#: dcim/models/device_components.py:330 +#: netbox/dcim/models/device_components.py:330 msgid "console server ports" msgstr "コンソールサーバポート" -#: dcim/models/device_components.py:369 +#: netbox/dcim/models/device_components.py:369 msgid "power port" msgstr "電源ポート" -#: dcim/models/device_components.py:370 +#: netbox/dcim/models/device_components.py:370 msgid "power ports" msgstr "電源ポート" -#: dcim/models/device_components.py:487 +#: netbox/dcim/models/device_components.py:487 msgid "power outlet" msgstr "電源コンセント" -#: dcim/models/device_components.py:488 +#: netbox/dcim/models/device_components.py:488 msgid "power outlets" msgstr "電源コンセント" -#: dcim/models/device_components.py:499 +#: netbox/dcim/models/device_components.py:499 #, python-brace-format msgid "Parent power port ({power_port}) must belong to the same device" msgstr "親電源ポート ({power_port}) は同じデバイスに属している必要があります" -#: dcim/models/device_components.py:530 vpn/models/crypto.py:81 -#: vpn/models/crypto.py:226 +#: netbox/dcim/models/device_components.py:530 netbox/vpn/models/crypto.py:81 +#: netbox/vpn/models/crypto.py:226 msgid "mode" msgstr "モード" -#: dcim/models/device_components.py:534 +#: netbox/dcim/models/device_components.py:534 msgid "IEEE 802.1Q tagging strategy" msgstr "IEEE 802.1Q タギング戦略" -#: dcim/models/device_components.py:542 +#: netbox/dcim/models/device_components.py:542 msgid "parent interface" msgstr "親インタフェース" -#: dcim/models/device_components.py:602 +#: netbox/dcim/models/device_components.py:602 msgid "parent LAG" msgstr "親ラグ" -#: dcim/models/device_components.py:612 +#: netbox/dcim/models/device_components.py:612 msgid "This interface is used only for out-of-band management" msgstr "このインタフェースは帯域外管理にのみ使用されます。" -#: dcim/models/device_components.py:617 +#: netbox/dcim/models/device_components.py:617 msgid "speed (Kbps)" msgstr "速度 (Kbps)" -#: dcim/models/device_components.py:620 +#: netbox/dcim/models/device_components.py:620 msgid "duplex" msgstr "デュプレックス" -#: dcim/models/device_components.py:630 +#: netbox/dcim/models/device_components.py:630 msgid "64-bit World Wide Name" msgstr "64 ビットのWWN (World Wide Name)" -#: dcim/models/device_components.py:642 +#: netbox/dcim/models/device_components.py:642 msgid "wireless channel" msgstr "無線チャネル" -#: dcim/models/device_components.py:649 +#: netbox/dcim/models/device_components.py:649 msgid "channel frequency (MHz)" msgstr "チャネル周波数 (MHz)" -#: dcim/models/device_components.py:650 dcim/models/device_components.py:658 +#: netbox/dcim/models/device_components.py:650 +#: netbox/dcim/models/device_components.py:658 msgid "Populated by selected channel (if set)" msgstr "選択したチャンネルによって設定されます (設定されている場合)" -#: dcim/models/device_components.py:664 +#: netbox/dcim/models/device_components.py:664 msgid "transmit power (dBm)" msgstr "送信パワー (dBm)" -#: dcim/models/device_components.py:689 wireless/models.py:117 +#: netbox/dcim/models/device_components.py:689 netbox/wireless/models.py:117 msgid "wireless LANs" msgstr "無線 LAN" -#: dcim/models/device_components.py:697 -#: virtualization/models/virtualmachines.py:335 +#: netbox/dcim/models/device_components.py:697 +#: netbox/virtualization/models/virtualmachines.py:335 msgid "untagged VLAN" msgstr "タグなし VLAN" -#: dcim/models/device_components.py:703 -#: virtualization/models/virtualmachines.py:341 +#: netbox/dcim/models/device_components.py:703 +#: netbox/virtualization/models/virtualmachines.py:341 msgid "tagged VLANs" msgstr "タグ付き VLAN" -#: dcim/models/device_components.py:745 -#: virtualization/models/virtualmachines.py:377 +#: netbox/dcim/models/device_components.py:745 +#: netbox/virtualization/models/virtualmachines.py:377 msgid "interface" msgstr "インタフェース" -#: dcim/models/device_components.py:746 -#: virtualization/models/virtualmachines.py:378 +#: netbox/dcim/models/device_components.py:746 +#: netbox/virtualization/models/virtualmachines.py:378 msgid "interfaces" msgstr "インタフェース" -#: dcim/models/device_components.py:757 +#: netbox/dcim/models/device_components.py:757 #, python-brace-format msgid "{display_type} interfaces cannot have a cable attached." msgstr "{display_type} インタフェースにはケーブルを接続できません。" -#: dcim/models/device_components.py:765 +#: netbox/dcim/models/device_components.py:765 #, python-brace-format msgid "{display_type} interfaces cannot be marked as connected." msgstr "{display_type} インタフェースは接続済みとしてマークできません。" -#: dcim/models/device_components.py:774 -#: virtualization/models/virtualmachines.py:390 +#: netbox/dcim/models/device_components.py:774 +#: netbox/virtualization/models/virtualmachines.py:390 msgid "An interface cannot be its own parent." msgstr "インタフェースを自身の親にすることはできません。" -#: dcim/models/device_components.py:778 +#: netbox/dcim/models/device_components.py:778 msgid "Only virtual interfaces may be assigned to a parent interface." msgstr "親インタフェースに割り当てることができるのは仮想インタフェースだけです。" -#: dcim/models/device_components.py:785 +#: netbox/dcim/models/device_components.py:785 #, python-brace-format msgid "" "The selected parent interface ({interface}) belongs to a different device " "({device})" msgstr "選択した親インタフェース ({interface}) は別のデバイス ({device}) に属しています" -#: dcim/models/device_components.py:791 +#: netbox/dcim/models/device_components.py:791 #, python-brace-format msgid "" "The selected parent interface ({interface}) belongs to {device}, which is " @@ -5127,14 +5606,14 @@ msgstr "" "選択した親インタフェース ({interface}) が属する {device} " "は、バーチャルシャーシ{virtual_chassis}には含まれていません。 。" -#: dcim/models/device_components.py:811 +#: netbox/dcim/models/device_components.py:811 #, python-brace-format msgid "" "The selected bridge interface ({bridge}) belongs to a different device " "({device})." msgstr "選択したブリッジインタフェース ({bridge}) は別のデバイス ({device}) に属しています。" -#: dcim/models/device_components.py:817 +#: netbox/dcim/models/device_components.py:817 #, python-brace-format msgid "" "The selected bridge interface ({interface}) belongs to {device}, which is " @@ -5143,21 +5622,21 @@ msgstr "" "選択したブリッジインタフェース ({interface}) が属する " "{device}は、バーチャルシャーシ{virtual_chassis}には含まれていません。 " -#: dcim/models/device_components.py:828 +#: netbox/dcim/models/device_components.py:828 msgid "Virtual interfaces cannot have a parent LAG interface." msgstr "仮想インタフェースは親 LAG インタフェースを持つことはできません。" -#: dcim/models/device_components.py:832 +#: netbox/dcim/models/device_components.py:832 msgid "A LAG interface cannot be its own parent." msgstr "LAG インタフェースを自身の親にすることはできません。" -#: dcim/models/device_components.py:839 +#: netbox/dcim/models/device_components.py:839 #, python-brace-format msgid "" "The selected LAG interface ({lag}) belongs to a different device ({device})." msgstr "選択した LAG インタフェース ({lag}) は別のデバイス ({device}) に属しています。" -#: dcim/models/device_components.py:845 +#: netbox/dcim/models/device_components.py:845 #, python-brace-format msgid "" "The selected LAG interface ({lag}) belongs to {device}, which is not part of" @@ -5166,43 +5645,43 @@ msgstr "" "選択した LAG インタフェース ({lag}) が属する {device}は、バーチャルシャーシには含まれていません " "{virtual_chassis}。" -#: dcim/models/device_components.py:856 +#: netbox/dcim/models/device_components.py:856 msgid "Virtual interfaces cannot have a PoE mode." msgstr "仮想インタフェースには PoE モードを設定できません。" -#: dcim/models/device_components.py:860 +#: netbox/dcim/models/device_components.py:860 msgid "Virtual interfaces cannot have a PoE type." msgstr "仮想インタフェースに PoE タイプを設定することはできません。" -#: dcim/models/device_components.py:866 +#: netbox/dcim/models/device_components.py:866 msgid "Must specify PoE mode when designating a PoE type." msgstr "PoE タイプを指定するときは、PoE モードを指定する必要があります。" -#: dcim/models/device_components.py:873 +#: netbox/dcim/models/device_components.py:873 msgid "Wireless role may be set only on wireless interfaces." msgstr "無線ロールは無線インタフェースでのみ設定できます。" -#: dcim/models/device_components.py:875 +#: netbox/dcim/models/device_components.py:875 msgid "Channel may be set only on wireless interfaces." msgstr "チャネルは無線インタフェースでのみ設定できます。" -#: dcim/models/device_components.py:881 +#: netbox/dcim/models/device_components.py:881 msgid "Channel frequency may be set only on wireless interfaces." msgstr "チャネル周波数は、無線インタフェースでのみ設定できます。" -#: dcim/models/device_components.py:885 +#: netbox/dcim/models/device_components.py:885 msgid "Cannot specify custom frequency with channel selected." msgstr "選択したチャンネルではカスタム周波数を指定できません。" -#: dcim/models/device_components.py:891 +#: netbox/dcim/models/device_components.py:891 msgid "Channel width may be set only on wireless interfaces." msgstr "チャネル幅は無線インタフェースでのみ設定できます。" -#: dcim/models/device_components.py:893 +#: netbox/dcim/models/device_components.py:893 msgid "Cannot specify custom width with channel selected." msgstr "選択したチャンネルではカスタム幅を指定できません。" -#: dcim/models/device_components.py:901 +#: netbox/dcim/models/device_components.py:901 #, python-brace-format msgid "" "The untagged VLAN ({untagged_vlan}) must belong to the same site as the " @@ -5210,24 +5689,24 @@ msgid "" msgstr "" "タグ無し VLAN ({untagged_vlan}) はインタフェースの親デバイスと同じサイトに属しているか、グローバルである必要があります。" -#: dcim/models/device_components.py:990 +#: netbox/dcim/models/device_components.py:990 msgid "Mapped position on corresponding rear port" msgstr "対応する背面ポートのマップ位置" -#: dcim/models/device_components.py:1006 +#: netbox/dcim/models/device_components.py:1006 msgid "front port" msgstr "前面ポート" -#: dcim/models/device_components.py:1007 +#: netbox/dcim/models/device_components.py:1007 msgid "front ports" msgstr "前面ポート" -#: dcim/models/device_components.py:1021 +#: netbox/dcim/models/device_components.py:1021 #, python-brace-format msgid "Rear port ({rear_port}) must belong to the same device" msgstr "背面ポート ({rear_port}) は同じデバイスに属している必要があります" -#: dcim/models/device_components.py:1029 +#: netbox/dcim/models/device_components.py:1029 #, python-brace-format msgid "" "Invalid rear port position ({rear_port_position}): Rear port {name} has only" @@ -5235,195 +5714,198 @@ msgid "" msgstr "" "背面ポートの位置 ({rear_port_position}) が無効です: 背面ポート {name} は {positions} 箇所しかありません。" -#: dcim/models/device_components.py:1059 +#: netbox/dcim/models/device_components.py:1059 msgid "Number of front ports which may be mapped" msgstr "マップできる前面ポートの数" -#: dcim/models/device_components.py:1064 +#: netbox/dcim/models/device_components.py:1064 msgid "rear port" msgstr "背面ポート" -#: dcim/models/device_components.py:1065 +#: netbox/dcim/models/device_components.py:1065 msgid "rear ports" msgstr "背面ポート" -#: dcim/models/device_components.py:1079 +#: netbox/dcim/models/device_components.py:1079 #, python-brace-format msgid "" "The number of positions cannot be less than the number of mapped front ports" " ({frontport_count})" msgstr "ポジションの数は、マップされた前面ポートの数より少なくすることはできません ({frontport_count})" -#: dcim/models/device_components.py:1120 +#: netbox/dcim/models/device_components.py:1120 msgid "module bay" msgstr "モジュールベイ" -#: dcim/models/device_components.py:1121 +#: netbox/dcim/models/device_components.py:1121 msgid "module bays" msgstr "モジュールベイ" -#: dcim/models/device_components.py:1138 dcim/models/devices.py:1224 +#: netbox/dcim/models/device_components.py:1138 +#: netbox/dcim/models/devices.py:1224 msgid "A module bay cannot belong to a module installed within it." msgstr "モジュールベイは、その中に取り付けられているモジュールに属することはできません。" -#: dcim/models/device_components.py:1164 +#: netbox/dcim/models/device_components.py:1164 msgid "device bay" msgstr "デバイスベイ" -#: dcim/models/device_components.py:1165 +#: netbox/dcim/models/device_components.py:1165 msgid "device bays" msgstr "デバイスベイ" -#: dcim/models/device_components.py:1175 +#: netbox/dcim/models/device_components.py:1175 #, python-brace-format msgid "This type of device ({device_type}) does not support device bays." msgstr "このタイプ ({device_type}) のデバイスは、デバイスベイをサポートしていません。" -#: dcim/models/device_components.py:1181 +#: netbox/dcim/models/device_components.py:1181 msgid "Cannot install a device into itself." msgstr "デバイスをそれ自体に挿入することはできません。" -#: dcim/models/device_components.py:1189 +#: netbox/dcim/models/device_components.py:1189 #, python-brace-format msgid "" "Cannot install the specified device; device is already installed in {bay}." msgstr "指定されたデバイスは取付できません。デバイスは既に {bay} に取付られています 。" -#: dcim/models/device_components.py:1210 +#: netbox/dcim/models/device_components.py:1210 msgid "inventory item role" msgstr "在庫品目ロール" -#: dcim/models/device_components.py:1211 +#: netbox/dcim/models/device_components.py:1211 msgid "inventory item roles" msgstr "在庫品目ロール" -#: dcim/models/device_components.py:1268 dcim/models/devices.py:607 -#: dcim/models/devices.py:1181 dcim/models/racks.py:313 -#: virtualization/models/virtualmachines.py:131 +#: 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 msgid "serial number" msgstr "シリアル番号" -#: dcim/models/device_components.py:1276 dcim/models/devices.py:615 -#: dcim/models/devices.py:1188 dcim/models/racks.py:320 +#: 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 msgid "asset tag" msgstr "アセットタグ" -#: dcim/models/device_components.py:1277 +#: netbox/dcim/models/device_components.py:1277 msgid "A unique tag used to identify this item" msgstr "この部品を識別するために使用される一意のタグ" -#: dcim/models/device_components.py:1280 +#: netbox/dcim/models/device_components.py:1280 msgid "discovered" msgstr "自動検出" -#: dcim/models/device_components.py:1282 +#: netbox/dcim/models/device_components.py:1282 msgid "This item was automatically discovered" msgstr "このアイテムは自動的に検出されました" -#: dcim/models/device_components.py:1300 +#: netbox/dcim/models/device_components.py:1300 msgid "inventory item" msgstr "在庫品目" -#: dcim/models/device_components.py:1301 +#: netbox/dcim/models/device_components.py:1301 msgid "inventory items" msgstr "在庫品目" -#: dcim/models/device_components.py:1312 +#: netbox/dcim/models/device_components.py:1312 msgid "Cannot assign self as parent." msgstr "自分を親として割り当てることはできません。" -#: dcim/models/device_components.py:1320 +#: netbox/dcim/models/device_components.py:1320 msgid "Parent inventory item does not belong to the same device." msgstr "親在庫品目は同じデバイスに属していません。" -#: dcim/models/device_components.py:1326 +#: netbox/dcim/models/device_components.py:1326 msgid "Cannot move an inventory item with dependent children" msgstr "子を持つ在庫品目は移動できません" -#: dcim/models/device_components.py:1334 +#: netbox/dcim/models/device_components.py:1334 msgid "Cannot assign inventory item to component on another device" msgstr "在庫品目を別のデバイスの構成要素に割り当てることはできません" -#: dcim/models/devices.py:54 +#: netbox/dcim/models/devices.py:54 msgid "manufacturer" msgstr "メーカ" -#: dcim/models/devices.py:55 +#: netbox/dcim/models/devices.py:55 msgid "manufacturers" msgstr "メーカ" -#: dcim/models/devices.py:82 dcim/models/devices.py:382 -#: dcim/models/racks.py:133 +#: netbox/dcim/models/devices.py:82 netbox/dcim/models/devices.py:382 +#: netbox/dcim/models/racks.py:133 msgid "model" msgstr "型" -#: dcim/models/devices.py:95 +#: netbox/dcim/models/devices.py:95 msgid "default platform" msgstr "デフォルトプラットフォーム" -#: dcim/models/devices.py:98 dcim/models/devices.py:386 +#: netbox/dcim/models/devices.py:98 netbox/dcim/models/devices.py:386 msgid "part number" msgstr "パーツ番号" -#: dcim/models/devices.py:101 dcim/models/devices.py:389 +#: netbox/dcim/models/devices.py:101 netbox/dcim/models/devices.py:389 msgid "Discrete part number (optional)" msgstr "個別の部品番号 (オプション)" -#: dcim/models/devices.py:107 dcim/models/racks.py:54 +#: netbox/dcim/models/devices.py:107 netbox/dcim/models/racks.py:54 msgid "height (U)" msgstr "高さ (U)" -#: dcim/models/devices.py:111 +#: netbox/dcim/models/devices.py:111 msgid "exclude from utilization" msgstr "使用率から除外" -#: dcim/models/devices.py:112 +#: netbox/dcim/models/devices.py:112 msgid "Devices of this type are excluded when calculating rack utilization." msgstr "このタイプのデバイスは、ラック使用率の計算時に除外されます。" -#: dcim/models/devices.py:116 +#: netbox/dcim/models/devices.py:116 msgid "is full depth" msgstr "奥行きをすべて利用する" -#: dcim/models/devices.py:117 +#: netbox/dcim/models/devices.py:117 msgid "Device consumes both front and rear rack faces." msgstr "デバイスは前面と背面の両方のラック面を使用します。" -#: dcim/models/devices.py:123 +#: netbox/dcim/models/devices.py:123 msgid "parent/child status" msgstr "親/子のステータス" -#: dcim/models/devices.py:124 +#: netbox/dcim/models/devices.py:124 msgid "" "Parent devices house child devices in device bays. Leave blank if this " "device type is neither a parent nor a child." msgstr "親デバイスはデバイスベイに子デバイスを収納します。このデバイスタイプが親でも子供でもない場合は、空白のままにしてください。" -#: dcim/models/devices.py:128 dcim/models/devices.py:392 -#: dcim/models/devices.py:659 dcim/models/racks.py:324 +#: netbox/dcim/models/devices.py:128 netbox/dcim/models/devices.py:392 +#: netbox/dcim/models/devices.py:659 netbox/dcim/models/racks.py:324 msgid "airflow" msgstr "エアフロー" -#: dcim/models/devices.py:204 +#: netbox/dcim/models/devices.py:204 msgid "device type" msgstr "デバイスタイプ" -#: dcim/models/devices.py:205 +#: netbox/dcim/models/devices.py:205 msgid "device types" msgstr "デバイスタイプ" -#: dcim/models/devices.py:290 +#: netbox/dcim/models/devices.py:290 msgid "U height must be in increments of 0.5 rack units." msgstr "U の高さは 0.5 ラック単位でなければなりません。" -#: dcim/models/devices.py:307 +#: netbox/dcim/models/devices.py:307 #, python-brace-format msgid "" "Device {device} in rack {rack} does not have sufficient space to accommodate" " a height of {height}U" msgstr "ラック内 {rack} のデバイス {device} は高さ{height}Uに対応する十分なスペースが有りません " -#: dcim/models/devices.py:322 +#: netbox/dcim/models/devices.py:322 #, python-brace-format msgid "" "Unable to set 0U height: Found {racked_instance_count} " @@ -5432,173 +5914,173 @@ msgstr "" "高さは 0U にできません: {racked_instance_count} インスタンス " "がラックに取り付け済みです。" -#: dcim/models/devices.py:331 +#: netbox/dcim/models/devices.py:331 msgid "" "Must delete all device bay templates associated with this device before " "declassifying it as a parent device." msgstr "このデバイスを親デバイスとして分類解除する前に、このデバイスに関連付けられているすべてのデバイスベイテンプレートを削除する必要があります。" -#: dcim/models/devices.py:337 +#: netbox/dcim/models/devices.py:337 msgid "Child device types must be 0U." msgstr "子デバイスタイプは 0U でなければなりません。" -#: dcim/models/devices.py:411 +#: netbox/dcim/models/devices.py:411 msgid "module type" msgstr "モジュールタイプ" -#: dcim/models/devices.py:412 +#: netbox/dcim/models/devices.py:412 msgid "module types" msgstr "モジュールタイプ" -#: dcim/models/devices.py:485 +#: netbox/dcim/models/devices.py:485 msgid "Virtual machines may be assigned to this role" msgstr "仮想マシンをこのロールに割り当てることができます" -#: dcim/models/devices.py:497 +#: netbox/dcim/models/devices.py:497 msgid "device role" msgstr "デバイスロール" -#: dcim/models/devices.py:498 +#: netbox/dcim/models/devices.py:498 msgid "device roles" msgstr "デバイスロール" -#: dcim/models/devices.py:515 +#: netbox/dcim/models/devices.py:515 msgid "Optionally limit this platform to devices of a certain manufacturer" msgstr "オプションで、このプラットフォームを特定のメーカのデバイスに限定できます" -#: dcim/models/devices.py:527 +#: netbox/dcim/models/devices.py:527 msgid "platform" msgstr "プラットフォーム" -#: dcim/models/devices.py:528 +#: netbox/dcim/models/devices.py:528 msgid "platforms" msgstr "プラットフォーム" -#: dcim/models/devices.py:576 +#: netbox/dcim/models/devices.py:576 msgid "The function this device serves" msgstr "このデバイスが果たす機能" -#: dcim/models/devices.py:608 +#: netbox/dcim/models/devices.py:608 msgid "Chassis serial number, assigned by the manufacturer" msgstr "製造元によって割当られた、シャーシのシリアル番号" -#: dcim/models/devices.py:616 dcim/models/devices.py:1189 +#: netbox/dcim/models/devices.py:616 netbox/dcim/models/devices.py:1189 msgid "A unique tag used to identify this device" msgstr "このデバイスを識別するために使用される一意のタグ" -#: dcim/models/devices.py:643 +#: netbox/dcim/models/devices.py:643 msgid "position (U)" msgstr "ポジション (U)" -#: dcim/models/devices.py:650 +#: netbox/dcim/models/devices.py:650 msgid "rack face" msgstr "ラックフェイス" -#: dcim/models/devices.py:670 dcim/models/devices.py:1415 -#: virtualization/models/virtualmachines.py:100 +#: netbox/dcim/models/devices.py:670 netbox/dcim/models/devices.py:1420 +#: netbox/virtualization/models/virtualmachines.py:100 msgid "primary IPv4" msgstr "プライマリ IPv4" -#: dcim/models/devices.py:678 dcim/models/devices.py:1423 -#: virtualization/models/virtualmachines.py:108 +#: netbox/dcim/models/devices.py:678 netbox/dcim/models/devices.py:1428 +#: netbox/virtualization/models/virtualmachines.py:108 msgid "primary IPv6" msgstr "プライマリ IPv6" -#: dcim/models/devices.py:686 +#: netbox/dcim/models/devices.py:686 msgid "out-of-band IP" msgstr "out-of-band IP" -#: dcim/models/devices.py:703 +#: netbox/dcim/models/devices.py:703 msgid "VC position" msgstr "VCポジション" -#: dcim/models/devices.py:706 +#: netbox/dcim/models/devices.py:706 msgid "Virtual chassis position" msgstr "バーチャルシャーシポジション" -#: dcim/models/devices.py:709 +#: netbox/dcim/models/devices.py:709 msgid "VC priority" msgstr "VC プライオリティ" -#: dcim/models/devices.py:713 +#: netbox/dcim/models/devices.py:713 msgid "Virtual chassis master election priority" msgstr "バーチャルシャーシのマスター選択優先順位" -#: dcim/models/devices.py:716 dcim/models/sites.py:207 +#: netbox/dcim/models/devices.py:716 netbox/dcim/models/sites.py:207 msgid "latitude" msgstr "緯度" -#: dcim/models/devices.py:721 dcim/models/devices.py:729 -#: dcim/models/sites.py:212 dcim/models/sites.py:220 +#: netbox/dcim/models/devices.py:721 netbox/dcim/models/devices.py:729 +#: netbox/dcim/models/sites.py:212 netbox/dcim/models/sites.py:220 msgid "GPS coordinate in decimal format (xx.yyyyyy)" msgstr "10 進数形式の GPS 座標 (xx.yyyyyy)" -#: dcim/models/devices.py:724 dcim/models/sites.py:215 +#: netbox/dcim/models/devices.py:724 netbox/dcim/models/sites.py:215 msgid "longitude" msgstr "経度" -#: dcim/models/devices.py:797 +#: netbox/dcim/models/devices.py:797 msgid "Device name must be unique per site." msgstr "デバイス名はサイトごとに一意である必要があります。" -#: dcim/models/devices.py:808 ipam/models/services.py:75 +#: netbox/dcim/models/devices.py:808 netbox/ipam/models/services.py:75 msgid "device" msgstr "デバイス" -#: dcim/models/devices.py:809 +#: netbox/dcim/models/devices.py:809 msgid "devices" msgstr "デバイス" -#: dcim/models/devices.py:835 +#: netbox/dcim/models/devices.py:835 #, python-brace-format msgid "Rack {rack} does not belong to site {site}." msgstr "ラック {rack} はサイト{site}に属していません 。" -#: dcim/models/devices.py:840 +#: netbox/dcim/models/devices.py:840 #, python-brace-format msgid "Location {location} does not belong to site {site}." msgstr "ロケーション {location} はサイト{site}に属していません 。" -#: dcim/models/devices.py:846 +#: netbox/dcim/models/devices.py:846 #, python-brace-format msgid "Rack {rack} does not belong to location {location}." msgstr "ラック {rack} はロケーション{location}に属していません 。" -#: dcim/models/devices.py:853 +#: netbox/dcim/models/devices.py:853 msgid "Cannot select a rack face without assigning a rack." msgstr "ラックを割り当てないとラックフェースは選択できません。" -#: dcim/models/devices.py:857 +#: netbox/dcim/models/devices.py:857 msgid "Cannot select a rack position without assigning a rack." msgstr "ラックを割り当てないとラックポジションを選択できません。" -#: dcim/models/devices.py:863 +#: netbox/dcim/models/devices.py:863 msgid "Position must be in increments of 0.5 rack units." msgstr "ポジションは 0.5 ラックユニット単位で入力する必要があります。" -#: dcim/models/devices.py:867 +#: netbox/dcim/models/devices.py:867 msgid "Must specify rack face when defining rack position." msgstr "ラックの位置を定義するときは、ラックの面を指定する必要があります。" -#: dcim/models/devices.py:875 +#: netbox/dcim/models/devices.py:875 #, python-brace-format msgid "" "A 0U device type ({device_type}) cannot be assigned to a rack position." msgstr "0U デバイスタイプ ({device_type}) をラックポジションに割り当てることはできません。" -#: dcim/models/devices.py:886 +#: netbox/dcim/models/devices.py:886 msgid "" "Child device types cannot be assigned to a rack face. This is an attribute " "of the parent device." msgstr "子デバイスタイプをラックフェースに割り当てることはできません。これは親デバイスの属性です。" -#: dcim/models/devices.py:893 +#: netbox/dcim/models/devices.py:893 msgid "" "Child device types cannot be assigned to a rack position. This is an " "attribute of the parent device." msgstr "子デバイスタイプをラックポジションに割り当てることはできません。これは親デバイスの属性です。" -#: dcim/models/devices.py:907 +#: netbox/dcim/models/devices.py:907 #, python-brace-format msgid "" "U{position} is already occupied or does not have sufficient space to " @@ -5607,22 +6089,22 @@ msgstr "" "U{position} が既に占有されているか、このデバイスタイプを収容するのに十分なスペースがありません: {device_type} " "({u_height}U)" -#: dcim/models/devices.py:922 +#: netbox/dcim/models/devices.py:922 #, python-brace-format msgid "{ip} is not an IPv4 address." msgstr "{ip} は IPv4 アドレスではありません。" -#: dcim/models/devices.py:931 dcim/models/devices.py:946 +#: netbox/dcim/models/devices.py:931 netbox/dcim/models/devices.py:946 #, python-brace-format msgid "The specified IP address ({ip}) is not assigned to this device." msgstr "指定された IP アドレス ({ip}) はこのデバイスに割り当てられていません。" -#: dcim/models/devices.py:937 +#: netbox/dcim/models/devices.py:937 #, python-brace-format msgid "{ip} is not an IPv6 address." msgstr "{ip} IPv6 アドレスではありません。" -#: dcim/models/devices.py:964 +#: netbox/dcim/models/devices.py:964 #, python-brace-format msgid "" "The assigned platform is limited to {platform_manufacturer} device types, " @@ -5631,154 +6113,154 @@ msgstr "" "割当られたプラットフォームは{platform_manufacturer} のデバイスタイプに限定されます 。しかし、このデバイスのタイプは " "{devicetype_manufacturer}に属します。" -#: dcim/models/devices.py:975 +#: netbox/dcim/models/devices.py:975 #, python-brace-format msgid "The assigned cluster belongs to a different site ({site})" msgstr "割当クラスタは別のサイトに属しています ({site})" -#: dcim/models/devices.py:983 +#: netbox/dcim/models/devices.py:983 msgid "A device assigned to a virtual chassis must have its position defined." msgstr "仮想シャーシに割当られたデバイスには、その位置が定義されている必要があります。" -#: dcim/models/devices.py:988 +#: netbox/dcim/models/devices.py:988 #, python-brace-format msgid "" "Device cannot be removed from virtual chassis {virtual_chassis} because it " "is currently designated as its master." msgstr "デバイスを仮想シャーシから削除できない {virtual_chassis} 現在マスターとして指定されているからです。" -#: dcim/models/devices.py:1196 +#: netbox/dcim/models/devices.py:1196 msgid "module" msgstr "モジュール" -#: dcim/models/devices.py:1197 +#: netbox/dcim/models/devices.py:1197 msgid "modules" msgstr "モジュール" -#: dcim/models/devices.py:1213 +#: netbox/dcim/models/devices.py:1213 #, python-brace-format msgid "" "Module must be installed within a module bay belonging to the assigned " "device ({device})." msgstr "モジュールは、割当デバイスに属するモジュールベイ内に取り付ける必要があります ({device})。" -#: dcim/models/devices.py:1334 +#: netbox/dcim/models/devices.py:1339 msgid "domain" msgstr "ドメイン" -#: dcim/models/devices.py:1347 dcim/models/devices.py:1348 +#: netbox/dcim/models/devices.py:1352 netbox/dcim/models/devices.py:1353 msgid "virtual chassis" msgstr "バーチャルシャーシ" -#: dcim/models/devices.py:1363 +#: netbox/dcim/models/devices.py:1368 #, python-brace-format msgid "" "The selected master ({master}) is not assigned to this virtual chassis." msgstr "選択したマスター ({master}) はこの仮想シャーシに割り当てられていません。" -#: dcim/models/devices.py:1379 +#: 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 "バーチャルシャーシ{self}を削除できません 。クロスシャーシ LAG インタフェースを形成するメンバーインタフェースがあります。" -#: dcim/models/devices.py:1404 vpn/models/l2vpn.py:37 +#: netbox/dcim/models/devices.py:1409 netbox/vpn/models/l2vpn.py:37 msgid "identifier" msgstr "識別子" -#: dcim/models/devices.py:1405 +#: netbox/dcim/models/devices.py:1410 msgid "Numeric identifier unique to the parent device" msgstr "親デバイスに固有の数値識別子" -#: dcim/models/devices.py:1433 extras/models/customfields.py:225 -#: extras/models/models.py:107 extras/models/models.py:694 -#: netbox/models/__init__.py:115 +#: 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:115 msgid "comments" msgstr "コメント" -#: dcim/models/devices.py:1449 +#: netbox/dcim/models/devices.py:1454 msgid "virtual device context" msgstr "仮想デバイスコンテキスト" -#: dcim/models/devices.py:1450 +#: netbox/dcim/models/devices.py:1455 msgid "virtual device contexts" msgstr "仮想デバイスコンテキスト" -#: dcim/models/devices.py:1482 +#: netbox/dcim/models/devices.py:1487 #, python-brace-format msgid "{ip} is not an IPv{family} address." msgstr "{ip}は IPv{family}アドレスではありません。" -#: dcim/models/devices.py:1488 +#: netbox/dcim/models/devices.py:1493 msgid "Primary IP address must belong to an interface on the assigned device." msgstr "プライマリ IP アドレスは、割当デバイスのインタフェースに属している必要があります。" -#: dcim/models/mixins.py:15 extras/models/configs.py:41 -#: extras/models/models.py:313 extras/models/models.py:522 -#: extras/models/search.py:48 ipam/models/ip.py:194 +#: netbox/dcim/models/mixins.py:15 netbox/extras/models/configs.py:41 +#: netbox/extras/models/models.py:313 netbox/extras/models/models.py:522 +#: netbox/extras/models/search.py:48 netbox/ipam/models/ip.py:194 msgid "weight" msgstr "重量" -#: dcim/models/mixins.py:22 +#: netbox/dcim/models/mixins.py:22 msgid "weight unit" msgstr "重量単位" -#: dcim/models/mixins.py:51 +#: netbox/dcim/models/mixins.py:51 msgid "Must specify a unit when setting a weight" msgstr "重量を設定するときは単位を指定する必要があります" -#: dcim/models/power.py:55 +#: netbox/dcim/models/power.py:55 msgid "power panel" msgstr "電源盤" -#: dcim/models/power.py:56 +#: netbox/dcim/models/power.py:56 msgid "power panels" msgstr "電源盤" -#: dcim/models/power.py:70 +#: netbox/dcim/models/power.py:70 #, python-brace-format msgid "" "Location {location} ({location_site}) is in a different site than {site}" msgstr "ロケーション {location} ({location_site}) は{site}とは別のサイトにあります " -#: dcim/models/power.py:108 +#: netbox/dcim/models/power.py:108 msgid "supply" msgstr "供給" -#: dcim/models/power.py:114 +#: netbox/dcim/models/power.py:114 msgid "phase" msgstr "電力相" -#: dcim/models/power.py:120 +#: netbox/dcim/models/power.py:120 msgid "voltage" msgstr "電圧" -#: dcim/models/power.py:125 +#: netbox/dcim/models/power.py:125 msgid "amperage" msgstr "アンペア数" -#: dcim/models/power.py:130 +#: netbox/dcim/models/power.py:130 msgid "max utilization" msgstr "最大使用率" -#: dcim/models/power.py:133 +#: netbox/dcim/models/power.py:133 msgid "Maximum permissible draw (percentage)" msgstr "最大許容電力 (パーセンテージ)" -#: dcim/models/power.py:136 +#: netbox/dcim/models/power.py:136 msgid "available power" msgstr "使用可能な電力" -#: dcim/models/power.py:164 +#: netbox/dcim/models/power.py:164 msgid "power feed" msgstr "電源タップ" -#: dcim/models/power.py:165 +#: netbox/dcim/models/power.py:165 msgid "power feeds" msgstr "電源タップ" -#: dcim/models/power.py:179 +#: netbox/dcim/models/power.py:179 #, python-brace-format msgid "" "Rack {rack} ({rack_site}) and power panel {powerpanel} ({powerpanel_site}) " @@ -5786,1295 +6268,1380 @@ msgid "" msgstr "" "ラック {rack} ({rack_site}) と電源盤 {powerpanel} ({powerpanel_site}) は別のサイトにあります。" -#: dcim/models/power.py:190 +#: netbox/dcim/models/power.py:190 msgid "Voltage cannot be negative for AC supply" msgstr "AC 電源の電圧を負にすることはできません" -#: dcim/models/racks.py:47 +#: netbox/dcim/models/racks.py:47 msgid "width" msgstr "幅" -#: dcim/models/racks.py:48 +#: netbox/dcim/models/racks.py:48 msgid "Rail-to-rail width" msgstr "レール間の幅" -#: dcim/models/racks.py:56 +#: netbox/dcim/models/racks.py:56 msgid "Height in rack units" msgstr "ラックユニットの高さ" -#: dcim/models/racks.py:60 +#: netbox/dcim/models/racks.py:60 msgid "starting unit" msgstr "開始ユニット" -#: dcim/models/racks.py:62 +#: netbox/dcim/models/racks.py:62 msgid "Starting unit for rack" msgstr "ラック用開始ユニット" -#: dcim/models/racks.py:66 +#: netbox/dcim/models/racks.py:66 msgid "descending units" msgstr "降順" -#: dcim/models/racks.py:67 +#: netbox/dcim/models/racks.py:67 msgid "Units are numbered top-to-bottom" msgstr "ユニットには上から下に番号が付けられています" -#: dcim/models/racks.py:72 +#: netbox/dcim/models/racks.py:72 msgid "outer width" msgstr "外形の幅" -#: dcim/models/racks.py:75 +#: netbox/dcim/models/racks.py:75 msgid "Outer dimension of rack (width)" msgstr "ラックの外形寸法(幅)" -#: dcim/models/racks.py:78 +#: netbox/dcim/models/racks.py:78 msgid "outer depth" msgstr "外形の奥行" -#: dcim/models/racks.py:81 +#: netbox/dcim/models/racks.py:81 msgid "Outer dimension of rack (depth)" msgstr "ラックの外形寸法(奥行き)" -#: dcim/models/racks.py:84 +#: netbox/dcim/models/racks.py:84 msgid "outer unit" msgstr "外形の単位" -#: dcim/models/racks.py:90 +#: netbox/dcim/models/racks.py:90 msgid "mounting depth" msgstr "取り付け奥行き" -#: dcim/models/racks.py:94 +#: netbox/dcim/models/racks.py:94 msgid "" "Maximum depth of a mounted device, in millimeters. For four-post racks, this" " is the distance between the front and rear rails." msgstr "マウントされたデバイスの最大奥行き (mm)。4 支柱ラックの場合、これは前面レールと背面レールの間の距離です。" -#: dcim/models/racks.py:102 +#: netbox/dcim/models/racks.py:102 msgid "max weight" msgstr "最大重量" -#: dcim/models/racks.py:105 +#: netbox/dcim/models/racks.py:105 msgid "Maximum load capacity for the rack" msgstr "ラックの最大積載量" -#: dcim/models/racks.py:125 dcim/models/racks.py:252 +#: netbox/dcim/models/racks.py:125 netbox/dcim/models/racks.py:252 msgid "form factor" msgstr "フォームファクタ" -#: dcim/models/racks.py:162 +#: netbox/dcim/models/racks.py:162 msgid "rack type" msgstr "ラックタイプ" -#: dcim/models/racks.py:163 +#: netbox/dcim/models/racks.py:163 msgid "rack types" msgstr "ラックタイプ" -#: dcim/models/racks.py:180 dcim/models/racks.py:379 +#: netbox/dcim/models/racks.py:180 netbox/dcim/models/racks.py:379 msgid "Must specify a unit when setting an outer width/depth" msgstr "外形の幅/奥行きを設定する場合は単位を指定する必要があります" -#: dcim/models/racks.py:184 dcim/models/racks.py:383 +#: netbox/dcim/models/racks.py:184 netbox/dcim/models/racks.py:383 msgid "Must specify a unit when setting a maximum weight" msgstr "最大重量を設定する場合は単位を指定する必要があります" -#: dcim/models/racks.py:230 +#: netbox/dcim/models/racks.py:230 msgid "rack role" msgstr "ラックロール" -#: dcim/models/racks.py:231 +#: netbox/dcim/models/racks.py:231 msgid "rack roles" msgstr "ラックロール" -#: dcim/models/racks.py:274 +#: netbox/dcim/models/racks.py:274 msgid "facility ID" msgstr "ファシリティ ID" -#: dcim/models/racks.py:275 +#: netbox/dcim/models/racks.py:275 msgid "Locally-assigned identifier" msgstr "ローカル識別子" -#: dcim/models/racks.py:308 ipam/forms/bulk_import.py:201 -#: ipam/forms/bulk_import.py:266 ipam/forms/bulk_import.py:301 -#: ipam/forms/bulk_import.py:459 virtualization/forms/bulk_import.py:112 +#: 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 msgid "Functional role" msgstr "機能的ロール" -#: dcim/models/racks.py:321 +#: netbox/dcim/models/racks.py:321 msgid "A unique tag used to identify this rack" msgstr "このラックの識別に使用される固有のタグ" -#: dcim/models/racks.py:359 +#: netbox/dcim/models/racks.py:359 msgid "rack" msgstr "ラック" -#: dcim/models/racks.py:360 +#: netbox/dcim/models/racks.py:360 msgid "racks" msgstr "ラック" -#: dcim/models/racks.py:375 +#: netbox/dcim/models/racks.py:375 #, python-brace-format msgid "Assigned location must belong to parent site ({site})." msgstr "割当ロケーションは親サイト ({site}) に属している必要があります。" -#: dcim/models/racks.py:393 +#: netbox/dcim/models/racks.py:393 #, python-brace-format msgid "" "Rack must be at least {min_height}U tall to house currently installed " "devices." msgstr "現在取付られているデバイスを収納するには、ラックは少なくとも{min_height} U 必要です 。" -#: dcim/models/racks.py:400 +#: netbox/dcim/models/racks.py:400 #, python-brace-format msgid "" "Rack unit numbering must begin at {position} or less to house currently " "installed devices." msgstr "現在取付られているデバイスを収納するには、ラックユニット番号は {position} 以下で始まる必要があります 。" -#: dcim/models/racks.py:408 +#: netbox/dcim/models/racks.py:408 #, python-brace-format msgid "Location must be from the same site, {site}." msgstr "ロケーションは同じサイト {site} のものでなければなりません。 。" -#: dcim/models/racks.py:670 +#: netbox/dcim/models/racks.py:670 msgid "units" msgstr "単位" -#: dcim/models/racks.py:696 +#: netbox/dcim/models/racks.py:696 msgid "rack reservation" msgstr "ラック予約" -#: dcim/models/racks.py:697 +#: netbox/dcim/models/racks.py:697 msgid "rack reservations" msgstr "ラック予約" -#: dcim/models/racks.py:714 +#: netbox/dcim/models/racks.py:714 #, python-brace-format msgid "Invalid unit(s) for {height}U rack: {unit_list}" msgstr " {height}U ラックのユニットが無効です: {unit_list}" -#: dcim/models/racks.py:727 +#: netbox/dcim/models/racks.py:727 #, python-brace-format msgid "The following units have already been reserved: {unit_list}" msgstr "次のユニットはすでに予約されています: {unit_list}" -#: dcim/models/sites.py:49 +#: netbox/dcim/models/sites.py:49 msgid "A top-level region with this name already exists." msgstr "同名のトップレベルリージョンが存在します。" -#: dcim/models/sites.py:59 +#: netbox/dcim/models/sites.py:59 msgid "A top-level region with this slug already exists." msgstr "このslugを含むトップレベルリージョンは存在します。" -#: dcim/models/sites.py:62 +#: netbox/dcim/models/sites.py:62 msgid "region" msgstr "領域" -#: dcim/models/sites.py:63 +#: netbox/dcim/models/sites.py:63 msgid "regions" msgstr "リージョン" -#: dcim/models/sites.py:102 +#: netbox/dcim/models/sites.py:102 msgid "A top-level site group with this name already exists." msgstr "同名のトップレベルサイトグループが存在します。" -#: dcim/models/sites.py:112 +#: netbox/dcim/models/sites.py:112 msgid "A top-level site group with this slug already exists." msgstr "このslugを含むトップレベルサイトグループが存在します。" -#: dcim/models/sites.py:115 +#: netbox/dcim/models/sites.py:115 msgid "site group" msgstr "サイトグループ" -#: dcim/models/sites.py:116 +#: netbox/dcim/models/sites.py:116 msgid "site groups" msgstr "サイトグループ" -#: dcim/models/sites.py:141 +#: netbox/dcim/models/sites.py:141 msgid "Full name of the site" msgstr "サイトのフルネーム" -#: dcim/models/sites.py:181 dcim/models/sites.py:279 +#: netbox/dcim/models/sites.py:181 netbox/dcim/models/sites.py:279 msgid "facility" msgstr "施設" -#: dcim/models/sites.py:184 dcim/models/sites.py:282 +#: netbox/dcim/models/sites.py:184 netbox/dcim/models/sites.py:282 msgid "Local facility ID or description" msgstr "ローカルファシリティ ID または説明" -#: dcim/models/sites.py:195 +#: netbox/dcim/models/sites.py:195 msgid "physical address" msgstr "物理アドレス" -#: dcim/models/sites.py:198 +#: netbox/dcim/models/sites.py:198 msgid "Physical location of the building" msgstr "建物の物理的位置" -#: dcim/models/sites.py:201 +#: netbox/dcim/models/sites.py:201 msgid "shipping address" msgstr "配送先住所" -#: dcim/models/sites.py:204 +#: netbox/dcim/models/sites.py:204 msgid "If different from the physical address" msgstr "実際の住所と異なる場合" -#: dcim/models/sites.py:238 +#: netbox/dcim/models/sites.py:238 msgid "site" msgstr "サイト" -#: dcim/models/sites.py:239 +#: netbox/dcim/models/sites.py:239 msgid "sites" msgstr "サイト" -#: dcim/models/sites.py:309 +#: netbox/dcim/models/sites.py:309 msgid "A location with this name already exists within the specified site." msgstr "この名前のロケーションは、サイト内に存在します。" -#: dcim/models/sites.py:319 +#: netbox/dcim/models/sites.py:319 msgid "A location with this slug already exists within the specified site." msgstr "このslugのロケーションは、サイト内に存在します。" -#: dcim/models/sites.py:322 +#: netbox/dcim/models/sites.py:322 msgid "location" msgstr "ロケーション" -#: dcim/models/sites.py:323 +#: netbox/dcim/models/sites.py:323 msgid "locations" msgstr "ロケーション" -#: dcim/models/sites.py:337 +#: netbox/dcim/models/sites.py:337 #, python-brace-format msgid "Parent location ({parent}) must belong to the same site ({site})." msgstr "親のロケーション ({parent}) は同じサイト ({site}) に属している必要があります。" -#: dcim/tables/cables.py:55 +#: netbox/dcim/tables/cables.py:55 msgid "Termination A" msgstr "終端 A" -#: dcim/tables/cables.py:60 +#: netbox/dcim/tables/cables.py:60 msgid "Termination B" msgstr "終端 B" -#: dcim/tables/cables.py:66 wireless/tables/wirelesslink.py:23 +#: netbox/dcim/tables/cables.py:66 netbox/wireless/tables/wirelesslink.py:23 msgid "Device A" msgstr "デバイス A" -#: dcim/tables/cables.py:72 wireless/tables/wirelesslink.py:32 +#: netbox/dcim/tables/cables.py:72 netbox/wireless/tables/wirelesslink.py:32 msgid "Device B" msgstr "デバイス B" -#: dcim/tables/cables.py:78 +#: netbox/dcim/tables/cables.py:78 msgid "Location A" msgstr "ロケーション A" -#: dcim/tables/cables.py:84 +#: netbox/dcim/tables/cables.py:84 msgid "Location B" msgstr "ロケーション B" -#: dcim/tables/cables.py:90 +#: netbox/dcim/tables/cables.py:90 msgid "Rack A" msgstr "ラック A" -#: dcim/tables/cables.py:96 +#: netbox/dcim/tables/cables.py:96 msgid "Rack B" msgstr "ラック B" -#: dcim/tables/cables.py:102 +#: netbox/dcim/tables/cables.py:102 msgid "Site A" msgstr "サイト A" -#: dcim/tables/cables.py:108 +#: netbox/dcim/tables/cables.py:108 msgid "Site B" msgstr "サイト B" -#: dcim/tables/connections.py:31 dcim/tables/connections.py:50 -#: dcim/tables/connections.py:71 -#: templates/dcim/inc/connection_endpoints.html:16 +#: netbox/dcim/tables/connections.py:31 netbox/dcim/tables/connections.py:50 +#: netbox/dcim/tables/connections.py:71 +#: netbox/templates/dcim/inc/connection_endpoints.html:16 msgid "Reachable" msgstr "到達可能" -#: dcim/tables/devices.py:58 dcim/tables/devices.py:106 -#: dcim/tables/racks.py:150 dcim/tables/sites.py:105 dcim/tables/sites.py:148 -#: extras/tables/tables.py:545 netbox/navigation/menu.py:69 -#: netbox/navigation/menu.py:73 netbox/navigation/menu.py:75 -#: virtualization/forms/model_forms.py:122 -#: virtualization/tables/clusters.py:83 virtualization/views.py:206 +#: 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/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 msgid "Devices" msgstr "デバイス" -#: dcim/tables/devices.py:63 dcim/tables/devices.py:111 -#: virtualization/tables/clusters.py:88 +#: netbox/dcim/tables/devices.py:63 netbox/dcim/tables/devices.py:111 +#: netbox/virtualization/tables/clusters.py:88 msgid "VMs" msgstr "VM" -#: dcim/tables/devices.py:100 dcim/tables/devices.py:216 -#: extras/forms/model_forms.py:630 templates/dcim/device.html:112 -#: templates/dcim/device/render_config.html:11 -#: templates/dcim/device/render_config.html:14 -#: templates/dcim/devicerole.html:44 templates/dcim/platform.html:41 -#: templates/extras/configtemplate.html:10 -#: templates/virtualization/virtualmachine.html:48 -#: templates/virtualization/virtualmachine/render_config.html:11 -#: templates/virtualization/virtualmachine/render_config.html:14 -#: virtualization/tables/virtualmachines.py:107 +#: netbox/dcim/tables/devices.py:100 netbox/dcim/tables/devices.py:216 +#: 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/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 msgid "Config Template" msgstr "設定テンプレート" -#: dcim/tables/devices.py:150 templates/dcim/sitegroup.html:26 +#: netbox/dcim/tables/devices.py:150 netbox/templates/dcim/sitegroup.html:26 msgid "Site Group" msgstr "サイトグループ" -#: dcim/tables/devices.py:187 dcim/tables/devices.py:1068 -#: ipam/forms/bulk_import.py:503 ipam/forms/model_forms.py:306 -#: ipam/forms/model_forms.py:315 ipam/tables/ip.py:356 ipam/tables/ip.py:423 -#: ipam/tables/ip.py:446 templates/ipam/ipaddress.html:11 -#: virtualization/tables/virtualmachines.py:95 +#: 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/templates/ipam/ipaddress.html:11 +#: netbox/virtualization/tables/virtualmachines.py:95 msgid "IP Address" msgstr "IP アドレス" -#: dcim/tables/devices.py:191 dcim/tables/devices.py:1072 -#: virtualization/tables/virtualmachines.py:86 +#: netbox/dcim/tables/devices.py:191 netbox/dcim/tables/devices.py:1072 +#: netbox/virtualization/tables/virtualmachines.py:86 msgid "IPv4 Address" msgstr "IPv4 アドレス" -#: dcim/tables/devices.py:195 dcim/tables/devices.py:1076 -#: virtualization/tables/virtualmachines.py:90 +#: netbox/dcim/tables/devices.py:195 netbox/dcim/tables/devices.py:1076 +#: netbox/virtualization/tables/virtualmachines.py:90 msgid "IPv6 Address" msgstr "IPv6 アドレス" -#: dcim/tables/devices.py:210 +#: netbox/dcim/tables/devices.py:210 msgid "VC Position" msgstr "VC ポジション" -#: dcim/tables/devices.py:213 +#: netbox/dcim/tables/devices.py:213 msgid "VC Priority" msgstr "VC プライオリティ" -#: dcim/tables/devices.py:220 templates/dcim/device_edit.html:38 -#: templates/dcim/devicebay_populate.html:16 +#: netbox/dcim/tables/devices.py:220 netbox/templates/dcim/device_edit.html:38 +#: netbox/templates/dcim/devicebay_populate.html:16 msgid "Parent Device" msgstr "親デバイス" -#: dcim/tables/devices.py:225 +#: netbox/dcim/tables/devices.py:225 msgid "Position (Device Bay)" msgstr "位置 (デバイスベイ)" -#: dcim/tables/devices.py:234 +#: netbox/dcim/tables/devices.py:234 msgid "Console ports" msgstr "コンソールポート" -#: dcim/tables/devices.py:237 +#: netbox/dcim/tables/devices.py:237 msgid "Console server ports" msgstr "コンソールサーバポート" -#: dcim/tables/devices.py:240 +#: netbox/dcim/tables/devices.py:240 msgid "Power ports" msgstr "電源ポート" -#: dcim/tables/devices.py:243 +#: netbox/dcim/tables/devices.py:243 msgid "Power outlets" msgstr "電源コンセント" -#: dcim/tables/devices.py:246 dcim/tables/devices.py:1081 -#: dcim/tables/devicetypes.py:128 dcim/views.py:1042 dcim/views.py:1281 -#: dcim/views.py:1977 netbox/navigation/menu.py:94 -#: netbox/navigation/menu.py:250 templates/dcim/device/base.html:37 -#: templates/dcim/device_list.html:43 templates/dcim/devicetype/base.html:34 -#: templates/dcim/inc/moduletype_buttons.html:25 templates/dcim/module.html:34 -#: templates/dcim/virtualdevicecontext.html:61 -#: templates/dcim/virtualdevicecontext.html:81 -#: templates/virtualization/virtualmachine/base.html:27 -#: templates/virtualization/virtualmachine_list.html:14 -#: virtualization/tables/virtualmachines.py:101 virtualization/views.py:366 -#: wireless/tables/wirelesslan.py:55 +#: 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/templates/dcim/device/base.html:37 +#: netbox/templates/dcim/device_list.html:43 +#: netbox/templates/dcim/devicetype/base.html:34 +#: netbox/templates/dcim/inc/moduletype_buttons.html:25 +#: netbox/templates/dcim/module.html:34 +#: netbox/templates/dcim/virtualdevicecontext.html:61 +#: netbox/templates/dcim/virtualdevicecontext.html:81 +#: netbox/templates/virtualization/virtualmachine/base.html:27 +#: netbox/templates/virtualization/virtualmachine_list.html:14 +#: netbox/virtualization/tables/virtualmachines.py:101 +#: netbox/virtualization/views.py:364 netbox/wireless/tables/wirelesslan.py:55 msgid "Interfaces" msgstr "インタフェース" -#: dcim/tables/devices.py:249 +#: netbox/dcim/tables/devices.py:249 msgid "Front ports" msgstr "前面ポート" -#: dcim/tables/devices.py:255 +#: netbox/dcim/tables/devices.py:255 msgid "Device bays" msgstr "デバイスベイ" -#: dcim/tables/devices.py:258 +#: netbox/dcim/tables/devices.py:258 msgid "Module bays" msgstr "モジュールベイ" -#: dcim/tables/devices.py:261 +#: netbox/dcim/tables/devices.py:261 msgid "Inventory items" msgstr "在庫品目" -#: dcim/tables/devices.py:305 dcim/tables/modules.py:56 -#: templates/dcim/modulebay.html:17 +#: netbox/dcim/tables/devices.py:305 netbox/dcim/tables/modules.py:56 +#: netbox/templates/dcim/modulebay.html:17 msgid "Module Bay" msgstr "モジュールベイ" -#: dcim/tables/devices.py:318 dcim/tables/devicetypes.py:47 -#: dcim/tables/devicetypes.py:143 dcim/views.py:1117 dcim/views.py:2075 -#: netbox/navigation/menu.py:103 templates/dcim/device/base.html:52 -#: templates/dcim/device_list.html:71 templates/dcim/devicetype/base.html:49 -#: templates/dcim/inc/panels/inventory_items.html:6 -#: templates/dcim/inventoryitemrole.html:32 +#: netbox/dcim/tables/devices.py:318 netbox/dcim/tables/devicetypes.py:47 +#: netbox/dcim/tables/devicetypes.py:143 netbox/dcim/views.py:1115 +#: netbox/dcim/views.py:2073 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 +#: netbox/templates/dcim/inc/panels/inventory_items.html:6 +#: netbox/templates/dcim/inventoryitemrole.html:32 msgid "Inventory Items" msgstr "在庫品目" -#: dcim/tables/devices.py:333 +#: netbox/dcim/tables/devices.py:333 msgid "Cable Color" msgstr "ケーブル色" -#: dcim/tables/devices.py:339 +#: netbox/dcim/tables/devices.py:339 msgid "Link Peers" msgstr "対向" -#: dcim/tables/devices.py:342 +#: netbox/dcim/tables/devices.py:342 msgid "Mark Connected" msgstr "接続済みとしてマークする" -#: dcim/tables/devices.py:461 +#: netbox/dcim/tables/devices.py:461 msgid "Maximum draw (W)" msgstr "最大電力 (W)" -#: dcim/tables/devices.py:464 +#: netbox/dcim/tables/devices.py:464 msgid "Allocated draw (W)" msgstr "割当電力 (W)" -#: dcim/tables/devices.py:558 ipam/forms/model_forms.py:701 -#: ipam/tables/fhrp.py:28 ipam/views.py:596 ipam/views.py:696 -#: netbox/navigation/menu.py:158 netbox/navigation/menu.py:160 -#: templates/dcim/interface.html:339 templates/ipam/ipaddress_bulk_add.html:15 -#: templates/ipam/service.html:40 templates/virtualization/vminterface.html:85 -#: vpn/tables/tunnels.py:98 +#: netbox/dcim/tables/devices.py:558 netbox/ipam/forms/model_forms.py: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/templates/ipam/ipaddress_bulk_add.html:15 +#: netbox/templates/ipam/service.html:40 +#: netbox/templates/virtualization/vminterface.html:85 +#: netbox/vpn/tables/tunnels.py:98 msgid "IP Addresses" msgstr "IP アドレス" -#: dcim/tables/devices.py:564 netbox/navigation/menu.py:202 -#: templates/ipam/inc/panels/fhrp_groups.html:6 +#: netbox/dcim/tables/devices.py:564 netbox/netbox/navigation/menu.py:202 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:6 msgid "FHRP Groups" msgstr "FHRP グループ" -#: dcim/tables/devices.py:576 templates/dcim/interface.html:89 -#: templates/virtualization/vminterface.html:67 templates/vpn/tunnel.html:18 -#: templates/vpn/tunneltermination.html:13 vpn/forms/bulk_edit.py:76 -#: vpn/forms/bulk_import.py:76 vpn/forms/filtersets.py:42 -#: vpn/forms/filtersets.py:82 vpn/forms/model_forms.py:60 -#: vpn/forms/model_forms.py:145 vpn/tables/tunnels.py:78 +#: netbox/dcim/tables/devices.py:576 netbox/templates/dcim/interface.html:89 +#: netbox/templates/virtualization/vminterface.html:67 +#: netbox/templates/vpn/tunnel.html:18 +#: netbox/templates/vpn/tunneltermination.html:13 +#: netbox/vpn/forms/bulk_edit.py:76 netbox/vpn/forms/bulk_import.py:76 +#: netbox/vpn/forms/filtersets.py:42 netbox/vpn/forms/filtersets.py:82 +#: netbox/vpn/forms/model_forms.py:60 netbox/vpn/forms/model_forms.py:145 +#: netbox/vpn/tables/tunnels.py:78 msgid "Tunnel" msgstr "トンネル" -#: dcim/tables/devices.py:604 dcim/tables/devicetypes.py:227 -#: templates/dcim/interface.html:65 +#: netbox/dcim/tables/devices.py:604 netbox/dcim/tables/devicetypes.py:227 +#: netbox/templates/dcim/interface.html:65 msgid "Management Only" msgstr "管理のみ" -#: dcim/tables/devices.py:623 +#: netbox/dcim/tables/devices.py:623 msgid "VDCs" msgstr "VDC" -#: dcim/tables/devices.py:873 templates/dcim/modulebay.html:53 +#: netbox/dcim/tables/devices.py:873 netbox/templates/dcim/modulebay.html:53 msgid "Installed Module" msgstr "取付済みモジュール" -#: dcim/tables/devices.py:876 +#: netbox/dcim/tables/devices.py:876 msgid "Module Serial" msgstr "モジュールシリアル番号" -#: dcim/tables/devices.py:880 +#: netbox/dcim/tables/devices.py:880 msgid "Module Asset Tag" msgstr "モジュール資産タグ" -#: dcim/tables/devices.py:889 +#: netbox/dcim/tables/devices.py:889 msgid "Module Status" msgstr "モジュールステータス" -#: dcim/tables/devices.py:944 dcim/tables/devicetypes.py:312 -#: templates/dcim/inventoryitem.html:40 +#: netbox/dcim/tables/devices.py:944 netbox/dcim/tables/devicetypes.py:312 +#: netbox/templates/dcim/inventoryitem.html:40 msgid "Component" msgstr "構成要素" -#: dcim/tables/devices.py:1000 +#: netbox/dcim/tables/devices.py:1000 msgid "Items" msgstr "アイテム" -#: dcim/tables/devicetypes.py:37 netbox/navigation/menu.py:84 -#: netbox/navigation/menu.py:86 +#: netbox/dcim/tables/devicetypes.py:37 netbox/netbox/navigation/menu.py:84 +#: netbox/netbox/navigation/menu.py:86 msgid "Device Types" msgstr "デバイスタイプ" -#: dcim/tables/devicetypes.py:42 netbox/navigation/menu.py:87 +#: netbox/dcim/tables/devicetypes.py:42 netbox/netbox/navigation/menu.py:87 msgid "Module Types" msgstr "モジュールタイプ" -#: dcim/tables/devicetypes.py:52 extras/forms/filtersets.py:371 -#: extras/forms/model_forms.py:537 extras/tables/tables.py:540 -#: netbox/navigation/menu.py:78 +#: 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/netbox/navigation/menu.py:78 msgid "Platforms" msgstr "プラットフォーム" -#: dcim/tables/devicetypes.py:84 templates/dcim/devicetype.html:29 +#: netbox/dcim/tables/devicetypes.py:84 +#: netbox/templates/dcim/devicetype.html:29 msgid "Default Platform" msgstr "デフォルトプラットフォーム" -#: dcim/tables/devicetypes.py:88 templates/dcim/devicetype.html:45 +#: netbox/dcim/tables/devicetypes.py:88 +#: netbox/templates/dcim/devicetype.html:45 msgid "Full Depth" msgstr "奥行きをすべて利用する" -#: dcim/tables/devicetypes.py:98 +#: netbox/dcim/tables/devicetypes.py:98 msgid "U Height" msgstr "U 高さ" -#: dcim/tables/devicetypes.py:113 dcim/tables/modules.py:26 -#: dcim/tables/racks.py:89 +#: netbox/dcim/tables/devicetypes.py:113 netbox/dcim/tables/modules.py:26 +#: netbox/dcim/tables/racks.py:89 msgid "Instances" msgstr "インスタンス" -#: dcim/tables/devicetypes.py:116 dcim/views.py:982 dcim/views.py:1221 -#: dcim/views.py:1913 netbox/navigation/menu.py:97 -#: templates/dcim/device/base.html:25 templates/dcim/device_list.html:15 -#: templates/dcim/devicetype/base.html:22 -#: templates/dcim/inc/moduletype_buttons.html:13 templates/dcim/module.html:22 +#: netbox/dcim/tables/devicetypes.py:116 netbox/dcim/views.py:980 +#: netbox/dcim/views.py:1219 netbox/dcim/views.py:1911 +#: netbox/netbox/navigation/menu.py:97 +#: netbox/templates/dcim/device/base.html:25 +#: netbox/templates/dcim/device_list.html:15 +#: netbox/templates/dcim/devicetype/base.html:22 +#: netbox/templates/dcim/inc/moduletype_buttons.html:13 +#: netbox/templates/dcim/module.html:22 msgid "Console Ports" msgstr "コンソールポート" -#: dcim/tables/devicetypes.py:119 dcim/views.py:997 dcim/views.py:1236 -#: dcim/views.py:1929 netbox/navigation/menu.py:98 -#: templates/dcim/device/base.html:28 templates/dcim/device_list.html:22 -#: templates/dcim/devicetype/base.html:25 -#: templates/dcim/inc/moduletype_buttons.html:16 templates/dcim/module.html:25 +#: netbox/dcim/tables/devicetypes.py:119 netbox/dcim/views.py:995 +#: netbox/dcim/views.py:1234 netbox/dcim/views.py:1927 +#: netbox/netbox/navigation/menu.py:98 +#: netbox/templates/dcim/device/base.html:28 +#: netbox/templates/dcim/device_list.html:22 +#: netbox/templates/dcim/devicetype/base.html:25 +#: netbox/templates/dcim/inc/moduletype_buttons.html:16 +#: netbox/templates/dcim/module.html:25 msgid "Console Server Ports" msgstr "コンソールサーバポート" -#: dcim/tables/devicetypes.py:122 dcim/views.py:1012 dcim/views.py:1251 -#: dcim/views.py:1945 netbox/navigation/menu.py:99 -#: templates/dcim/device/base.html:31 templates/dcim/device_list.html:29 -#: templates/dcim/devicetype/base.html:28 -#: templates/dcim/inc/moduletype_buttons.html:19 templates/dcim/module.html:28 +#: netbox/dcim/tables/devicetypes.py:122 netbox/dcim/views.py:1010 +#: netbox/dcim/views.py:1249 netbox/dcim/views.py:1943 +#: netbox/netbox/navigation/menu.py:99 +#: netbox/templates/dcim/device/base.html:31 +#: netbox/templates/dcim/device_list.html:29 +#: netbox/templates/dcim/devicetype/base.html:28 +#: netbox/templates/dcim/inc/moduletype_buttons.html:19 +#: netbox/templates/dcim/module.html:28 msgid "Power Ports" msgstr "電源ポート" -#: dcim/tables/devicetypes.py:125 dcim/views.py:1027 dcim/views.py:1266 -#: dcim/views.py:1961 netbox/navigation/menu.py:100 -#: templates/dcim/device/base.html:34 templates/dcim/device_list.html:36 -#: templates/dcim/devicetype/base.html:31 -#: templates/dcim/inc/moduletype_buttons.html:22 templates/dcim/module.html:31 +#: netbox/dcim/tables/devicetypes.py:125 netbox/dcim/views.py:1025 +#: netbox/dcim/views.py:1264 netbox/dcim/views.py:1959 +#: netbox/netbox/navigation/menu.py:100 +#: netbox/templates/dcim/device/base.html:34 +#: netbox/templates/dcim/device_list.html:36 +#: netbox/templates/dcim/devicetype/base.html:31 +#: netbox/templates/dcim/inc/moduletype_buttons.html:22 +#: netbox/templates/dcim/module.html:31 msgid "Power Outlets" msgstr "電源コンセント" -#: dcim/tables/devicetypes.py:131 dcim/views.py:1057 dcim/views.py:1296 -#: dcim/views.py:1999 netbox/navigation/menu.py:95 -#: templates/dcim/device/base.html:40 templates/dcim/devicetype/base.html:37 -#: templates/dcim/inc/moduletype_buttons.html:28 templates/dcim/module.html:37 +#: netbox/dcim/tables/devicetypes.py:131 netbox/dcim/views.py:1055 +#: netbox/dcim/views.py:1294 netbox/dcim/views.py:1997 +#: netbox/netbox/navigation/menu.py:95 +#: netbox/templates/dcim/device/base.html:40 +#: netbox/templates/dcim/devicetype/base.html:37 +#: netbox/templates/dcim/inc/moduletype_buttons.html:28 +#: netbox/templates/dcim/module.html:37 msgid "Front Ports" msgstr "前面ポート" -#: dcim/tables/devicetypes.py:134 dcim/views.py:1072 dcim/views.py:1311 -#: dcim/views.py:2015 netbox/navigation/menu.py:96 -#: templates/dcim/device/base.html:43 templates/dcim/device_list.html:50 -#: templates/dcim/devicetype/base.html:40 -#: templates/dcim/inc/moduletype_buttons.html:31 templates/dcim/module.html:40 +#: netbox/dcim/tables/devicetypes.py:134 netbox/dcim/views.py:1070 +#: netbox/dcim/views.py:1309 netbox/dcim/views.py:2013 +#: netbox/netbox/navigation/menu.py:96 +#: netbox/templates/dcim/device/base.html:43 +#: netbox/templates/dcim/device_list.html:50 +#: netbox/templates/dcim/devicetype/base.html:40 +#: netbox/templates/dcim/inc/moduletype_buttons.html:31 +#: netbox/templates/dcim/module.html:40 msgid "Rear Ports" msgstr "背面ポート" -#: dcim/tables/devicetypes.py:137 dcim/views.py:1102 dcim/views.py:2055 -#: netbox/navigation/menu.py:102 templates/dcim/device/base.html:49 -#: templates/dcim/device_list.html:57 templates/dcim/devicetype/base.html:46 +#: netbox/dcim/tables/devicetypes.py:137 netbox/dcim/views.py:1100 +#: netbox/dcim/views.py:2053 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 "デバイスベイ" -#: dcim/tables/devicetypes.py:140 dcim/views.py:1087 dcim/views.py:1326 -#: dcim/views.py:2035 netbox/navigation/menu.py:101 -#: templates/dcim/device/base.html:46 templates/dcim/device_list.html:64 -#: templates/dcim/devicetype/base.html:43 -#: templates/dcim/inc/moduletype_buttons.html:34 templates/dcim/module.html:43 +#: netbox/dcim/tables/devicetypes.py:140 netbox/dcim/views.py:1085 +#: netbox/dcim/views.py:1324 netbox/dcim/views.py:2033 +#: netbox/netbox/navigation/menu.py:101 +#: netbox/templates/dcim/device/base.html:46 +#: netbox/templates/dcim/device_list.html:64 +#: netbox/templates/dcim/devicetype/base.html:43 +#: netbox/templates/dcim/inc/moduletype_buttons.html:34 +#: netbox/templates/dcim/module.html:43 msgid "Module Bays" msgstr "モジュールベイ" -#: dcim/tables/power.py:36 netbox/navigation/menu.py:297 -#: templates/dcim/powerpanel.html:51 +#: netbox/dcim/tables/power.py:36 netbox/netbox/navigation/menu.py:297 +#: netbox/templates/dcim/powerpanel.html:51 msgid "Power Feeds" msgstr "電源タップ" -#: dcim/tables/power.py:80 templates/dcim/powerfeed.html:99 +#: netbox/dcim/tables/power.py:80 netbox/templates/dcim/powerfeed.html:99 msgid "Max Utilization" msgstr "最大使用率" -#: dcim/tables/power.py:84 +#: netbox/dcim/tables/power.py:84 msgid "Available Power (VA)" msgstr "使用可能な電力 (VA)" -#: dcim/tables/racks.py:30 dcim/tables/sites.py:143 -#: netbox/navigation/menu.py:43 netbox/navigation/menu.py:47 -#: netbox/navigation/menu.py:49 +#: netbox/dcim/tables/racks.py:30 netbox/dcim/tables/sites.py:143 +#: netbox/netbox/navigation/menu.py:43 netbox/netbox/navigation/menu.py:47 +#: netbox/netbox/navigation/menu.py:49 msgid "Racks" msgstr "ラック" -#: dcim/tables/racks.py:63 dcim/tables/racks.py:142 -#: templates/dcim/device.html:318 -#: templates/dcim/inc/panels/racktype_dimensions.html:14 +#: netbox/dcim/tables/racks.py:63 netbox/dcim/tables/racks.py:142 +#: netbox/templates/dcim/device.html:318 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:14 msgid "Height" msgstr "高さ" -#: dcim/tables/racks.py:67 dcim/tables/racks.py:165 -#: templates/dcim/inc/panels/racktype_dimensions.html:18 +#: netbox/dcim/tables/racks.py:67 netbox/dcim/tables/racks.py:165 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:18 msgid "Outer Width" msgstr "外形幅" -#: dcim/tables/racks.py:71 dcim/tables/racks.py:169 -#: templates/dcim/inc/panels/racktype_dimensions.html:28 +#: netbox/dcim/tables/racks.py:71 netbox/dcim/tables/racks.py:169 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:28 msgid "Outer Depth" msgstr "外形奥行" -#: dcim/tables/racks.py:79 dcim/tables/racks.py:177 +#: netbox/dcim/tables/racks.py:79 netbox/dcim/tables/racks.py:177 msgid "Max Weight" msgstr "最大重量" -#: dcim/tables/racks.py:154 +#: netbox/dcim/tables/racks.py:154 msgid "Space" msgstr "スペース" -#: dcim/tables/sites.py:30 dcim/tables/sites.py:57 -#: extras/forms/filtersets.py:351 extras/forms/model_forms.py:517 -#: ipam/forms/bulk_edit.py:131 ipam/forms/model_forms.py:153 -#: ipam/tables/asn.py:66 netbox/navigation/menu.py:15 -#: netbox/navigation/menu.py:17 +#: netbox/dcim/tables/sites.py:30 netbox/dcim/tables/sites.py:57 +#: netbox/extras/forms/filtersets.py: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/netbox/navigation/menu.py:15 netbox/netbox/navigation/menu.py:17 msgid "Sites" msgstr "サイト" -#: dcim/tests/test_api.py:47 +#: netbox/dcim/tests/test_api.py:47 msgid "Test case must set peer_termination_type" msgstr "テストケースは peer_termination_type を設定する必要があります" -#: dcim/views.py:140 +#: netbox/dcim/views.py:138 #, python-brace-format msgid "Disconnected {count} {type}" msgstr "切断されました {count} {type}" -#: dcim/views.py:740 netbox/navigation/menu.py:51 +#: netbox/dcim/views.py:738 netbox/netbox/navigation/menu.py:51 msgid "Reservations" msgstr "予約" -#: dcim/views.py:759 templates/dcim/location.html:90 -#: templates/dcim/site.html:140 +#: netbox/dcim/views.py:757 netbox/templates/dcim/location.html:90 +#: netbox/templates/dcim/site.html:140 msgid "Non-Racked Devices" msgstr "ラック搭載でないデバイス" -#: dcim/views.py:2088 extras/forms/model_forms.py:577 -#: templates/extras/configcontext.html:10 -#: virtualization/forms/model_forms.py:225 virtualization/views.py:407 +#: netbox/dcim/views.py:2086 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 msgid "Config Context" msgstr "コンフィグコンテキスト" -#: dcim/views.py:2098 virtualization/views.py:417 +#: netbox/dcim/views.py:2096 netbox/virtualization/views.py:415 msgid "Render Config" msgstr "レンダーコンフィグ" -#: dcim/views.py:2131 virtualization/views.py:450 +#: netbox/dcim/views.py:2131 netbox/virtualization/views.py:450 #, python-brace-format msgid "An error occurred while rendering the template: {error}" msgstr "テンプレートをレンダリング中にエラーが発生しました: {error}" -#: dcim/views.py:2149 extras/tables/tables.py:550 -#: netbox/navigation/menu.py:247 netbox/navigation/menu.py:249 -#: virtualization/views.py:180 +#: 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 msgid "Virtual Machines" msgstr "仮想マシン" -#: dcim/views.py:2897 +#: netbox/dcim/views.py:2907 #, python-brace-format msgid "Installed device {device} in bay {device_bay}." msgstr "インストール済みデバイス {device} イン・ベイ {device_bay}。" -#: dcim/views.py:2938 +#: netbox/dcim/views.py:2948 #, python-brace-format msgid "Removed device {device} from bay {device_bay}." msgstr "削除されたデバイス {device} ベイから {device_bay}。" -#: dcim/views.py:3044 ipam/tables/ip.py:234 +#: netbox/dcim/views.py:3054 netbox/ipam/tables/ip.py:234 msgid "Children" msgstr "子ども" -#: dcim/views.py:3510 +#: netbox/dcim/views.py:3520 #, python-brace-format msgid "Added member {device}" msgstr "メンバー追加 {device}" -#: dcim/views.py:3557 +#: netbox/dcim/views.py:3567 #, python-brace-format msgid "Unable to remove master device {device} from the virtual chassis." msgstr "マスターデバイスを削除できません {device} バーチャルシャーシから。" -#: dcim/views.py:3570 +#: netbox/dcim/views.py:3580 #, python-brace-format msgid "Removed {device} from virtual chassis {chassis}" msgstr "削除済み {device} バーチャルシャーシから {chassis}" -#: extras/api/customfields.py:89 +#: netbox/extras/api/customfields.py:89 #, python-brace-format msgid "Unknown related object(s): {name}" msgstr "不明な関連オブジェクト: {name}" -#: extras/api/serializers_/customfields.py:73 +#: netbox/extras/api/serializers_/customfields.py:73 msgid "Changing the type of custom fields is not supported." msgstr "カスタムフィールドのタイプの変更はサポートされていません。" -#: extras/api/serializers_/scripts.py:70 extras/api/serializers_/scripts.py:75 +#: netbox/extras/api/serializers_/scripts.py:70 +#: netbox/extras/api/serializers_/scripts.py:75 msgid "Scheduling is not enabled for this script." msgstr "このスクリプトではスケジューリングが有効になっていません。" -#: extras/choices.py:30 extras/forms/misc.py:14 +#: netbox/extras/choices.py:30 netbox/extras/forms/misc.py:14 msgid "Text" msgstr "テキスト" -#: extras/choices.py:31 +#: netbox/extras/choices.py:31 msgid "Text (long)" msgstr "テキスト (長い)" -#: extras/choices.py:32 +#: netbox/extras/choices.py:32 msgid "Integer" msgstr "整数" -#: extras/choices.py:33 +#: netbox/extras/choices.py:33 msgid "Decimal" msgstr "実数" -#: extras/choices.py:34 +#: netbox/extras/choices.py:34 msgid "Boolean (true/false)" msgstr "真偽値 (true/false)" -#: extras/choices.py:35 +#: netbox/extras/choices.py:35 msgid "Date" msgstr "日付" -#: extras/choices.py:36 +#: netbox/extras/choices.py:36 msgid "Date & time" msgstr "日付と時刻" -#: extras/choices.py:38 +#: netbox/extras/choices.py:38 msgid "JSON" msgstr "JSON" -#: extras/choices.py:39 +#: netbox/extras/choices.py:39 msgid "Selection" msgstr "選択" -#: extras/choices.py:40 +#: netbox/extras/choices.py:40 msgid "Multiple selection" msgstr "複数選択" -#: extras/choices.py:42 +#: netbox/extras/choices.py:42 msgid "Multiple objects" msgstr "複数オブジェクト" -#: extras/choices.py:53 netbox/preferences.py:21 -#: templates/extras/customfield.html:78 vpn/choices.py:20 -#: wireless/choices.py:27 +#: netbox/extras/choices.py:53 netbox/netbox/preferences.py:21 +#: netbox/templates/extras/customfield.html:78 netbox/vpn/choices.py:20 +#: netbox/wireless/choices.py:27 msgid "Disabled" msgstr "無効" -#: extras/choices.py:54 +#: netbox/extras/choices.py:54 msgid "Loose" msgstr "緩い" -#: extras/choices.py:55 +#: netbox/extras/choices.py:55 msgid "Exact" msgstr "正確" -#: extras/choices.py:66 +#: netbox/extras/choices.py:66 msgid "Always" msgstr "常に" -#: extras/choices.py:67 +#: netbox/extras/choices.py:67 msgid "If set" msgstr "設定されている場合" -#: extras/choices.py:68 extras/choices.py:81 +#: netbox/extras/choices.py:68 netbox/extras/choices.py:81 msgid "Hidden" msgstr "非表示" -#: extras/choices.py:79 +#: netbox/extras/choices.py:79 msgid "Yes" msgstr "はい" -#: extras/choices.py:80 +#: netbox/extras/choices.py:80 msgid "No" msgstr "いいえ" -#: extras/choices.py:108 templates/tenancy/contact.html:57 -#: tenancy/forms/bulk_edit.py:118 wireless/forms/model_forms.py:168 +#: 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 msgid "Link" msgstr "リンク" -#: extras/choices.py:124 +#: netbox/extras/choices.py:124 msgid "Newest" msgstr "最新" -#: extras/choices.py:125 +#: netbox/extras/choices.py:125 msgid "Oldest" msgstr "最古" -#: extras/choices.py:126 +#: netbox/extras/choices.py:126 msgid "Alphabetical (A-Z)" msgstr "アルファベット順 (A-Z)" -#: extras/choices.py:127 +#: netbox/extras/choices.py:127 msgid "Alphabetical (Z-A)" msgstr "アルファベット順 (Z-A)" -#: extras/choices.py:144 extras/choices.py:167 +#: netbox/extras/choices.py:144 netbox/extras/choices.py:167 msgid "Info" msgstr "情報" -#: extras/choices.py:145 extras/choices.py:168 +#: netbox/extras/choices.py:145 netbox/extras/choices.py:168 msgid "Success" msgstr "成功" -#: extras/choices.py:146 extras/choices.py:169 +#: netbox/extras/choices.py:146 netbox/extras/choices.py:169 msgid "Warning" msgstr "警告" -#: extras/choices.py:147 +#: netbox/extras/choices.py:147 msgid "Danger" msgstr "危険" -#: extras/choices.py:165 +#: netbox/extras/choices.py:165 msgid "Debug" msgstr "デバッグ" -#: extras/choices.py:166 netbox/choices.py:101 +#: netbox/extras/choices.py:166 netbox/netbox/choices.py:101 msgid "Default" msgstr "デフォルト" -#: extras/choices.py:170 +#: netbox/extras/choices.py:170 msgid "Failure" msgstr "失敗" -#: extras/choices.py:186 +#: netbox/extras/choices.py:186 msgid "Hourly" msgstr "毎時" -#: extras/choices.py:187 +#: netbox/extras/choices.py:187 msgid "12 hours" msgstr "12 時間毎" -#: extras/choices.py:188 +#: netbox/extras/choices.py:188 msgid "Daily" msgstr "毎日" -#: extras/choices.py:189 +#: netbox/extras/choices.py:189 msgid "Weekly" msgstr "毎週" -#: extras/choices.py:190 +#: netbox/extras/choices.py:190 msgid "30 days" msgstr "30 日毎" -#: extras/choices.py:226 templates/dcim/virtualchassis_edit.html:107 -#: templates/generic/bulk_add_component.html:68 -#: templates/generic/object_edit.html:47 templates/generic/object_edit.html:80 -#: templates/ipam/inc/ipaddress_edit_header.html:7 +#: netbox/extras/choices.py:226 +#: 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/ipam/inc/ipaddress_edit_header.html:7 msgid "Create" msgstr "作成" -#: extras/choices.py:227 +#: netbox/extras/choices.py:227 msgid "Update" msgstr "更新" -#: extras/choices.py:228 templates/circuits/inc/circuit_termination.html:23 -#: templates/dcim/inc/panels/inventory_items.html:37 -#: templates/dcim/powerpanel.html:66 templates/extras/script_list.html:35 -#: templates/generic/bulk_delete.html:20 templates/generic/bulk_delete.html:66 -#: templates/generic/object_delete.html:19 templates/htmx/delete_form.html:57 -#: templates/ipam/inc/panels/fhrp_groups.html:48 -#: templates/users/objectpermission.html:46 -#: utilities/templates/buttons/delete.html:11 +#: netbox/extras/choices.py:228 +#: netbox/templates/circuits/inc/circuit_termination.html:23 +#: netbox/templates/dcim/inc/panels/inventory_items.html:37 +#: netbox/templates/dcim/powerpanel.html:66 +#: netbox/templates/extras/script_list.html:35 +#: netbox/templates/generic/bulk_delete.html:20 +#: netbox/templates/generic/bulk_delete.html:66 +#: netbox/templates/generic/object_delete.html:19 +#: netbox/templates/htmx/delete_form.html:57 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:48 +#: netbox/templates/users/objectpermission.html:46 +#: netbox/utilities/templates/buttons/delete.html:11 msgid "Delete" msgstr "削除" -#: extras/choices.py:252 netbox/choices.py:57 netbox/choices.py:102 +#: netbox/extras/choices.py:252 netbox/netbox/choices.py:57 +#: netbox/netbox/choices.py:102 msgid "Blue" msgstr "青" -#: extras/choices.py:253 netbox/choices.py:56 netbox/choices.py:103 +#: netbox/extras/choices.py:253 netbox/netbox/choices.py:56 +#: netbox/netbox/choices.py:103 msgid "Indigo" msgstr "藍" -#: extras/choices.py:254 netbox/choices.py:54 netbox/choices.py:104 +#: netbox/extras/choices.py:254 netbox/netbox/choices.py:54 +#: netbox/netbox/choices.py:104 msgid "Purple" msgstr "紫" -#: extras/choices.py:255 netbox/choices.py:51 netbox/choices.py:105 +#: netbox/extras/choices.py:255 netbox/netbox/choices.py:51 +#: netbox/netbox/choices.py:105 msgid "Pink" msgstr "桃" -#: extras/choices.py:256 netbox/choices.py:50 netbox/choices.py:106 +#: netbox/extras/choices.py:256 netbox/netbox/choices.py:50 +#: netbox/netbox/choices.py:106 msgid "Red" msgstr "赤" -#: extras/choices.py:257 netbox/choices.py:68 netbox/choices.py:107 +#: netbox/extras/choices.py:257 netbox/netbox/choices.py:68 +#: netbox/netbox/choices.py:107 msgid "Orange" msgstr "橙" -#: extras/choices.py:258 netbox/choices.py:66 netbox/choices.py:108 +#: netbox/extras/choices.py:258 netbox/netbox/choices.py:66 +#: netbox/netbox/choices.py:108 msgid "Yellow" msgstr "黄" -#: extras/choices.py:259 netbox/choices.py:63 netbox/choices.py:109 +#: netbox/extras/choices.py:259 netbox/netbox/choices.py:63 +#: netbox/netbox/choices.py:109 msgid "Green" msgstr "緑" -#: extras/choices.py:260 netbox/choices.py:60 netbox/choices.py:110 +#: netbox/extras/choices.py:260 netbox/netbox/choices.py:60 +#: netbox/netbox/choices.py:110 msgid "Teal" msgstr "青緑" -#: extras/choices.py:261 netbox/choices.py:59 netbox/choices.py:111 +#: netbox/extras/choices.py:261 netbox/netbox/choices.py:59 +#: netbox/netbox/choices.py:111 msgid "Cyan" msgstr "水" -#: extras/choices.py:262 netbox/choices.py:112 +#: netbox/extras/choices.py:262 netbox/netbox/choices.py:112 msgid "Gray" msgstr "灰" -#: extras/choices.py:263 netbox/choices.py:74 netbox/choices.py:113 +#: netbox/extras/choices.py:263 netbox/netbox/choices.py:74 +#: netbox/netbox/choices.py:113 msgid "Black" msgstr "黒" -#: extras/choices.py:264 netbox/choices.py:75 netbox/choices.py:114 +#: netbox/extras/choices.py:264 netbox/netbox/choices.py:75 +#: netbox/netbox/choices.py:114 msgid "White" msgstr "白" -#: extras/choices.py:279 extras/forms/model_forms.py:353 -#: extras/forms/model_forms.py:430 templates/extras/webhook.html:10 +#: netbox/extras/choices.py:279 netbox/extras/forms/model_forms.py:353 +#: netbox/extras/forms/model_forms.py:430 +#: netbox/templates/extras/webhook.html:10 msgid "Webhook" msgstr "Webhook" -#: extras/choices.py:280 extras/forms/model_forms.py:418 -#: templates/extras/script/base.html:29 +#: netbox/extras/choices.py:280 netbox/extras/forms/model_forms.py:418 +#: netbox/templates/extras/script/base.html:29 msgid "Script" msgstr "スクリプト" -#: extras/choices.py:281 +#: netbox/extras/choices.py:281 msgid "Notification" msgstr "通知" -#: extras/conditions.py:54 +#: netbox/extras/conditions.py:54 #, python-brace-format msgid "Unknown operator: {op}. Must be one of: {operators}" msgstr "不明なオペレータ: {op}。次のいずれかでなければなりません。 {operators}" -#: extras/conditions.py:58 +#: netbox/extras/conditions.py:58 #, python-brace-format msgid "Unsupported value type: {value}" msgstr "サポートされていない値のタイプ: {value}" -#: extras/conditions.py:60 +#: netbox/extras/conditions.py:60 #, python-brace-format msgid "Invalid type for {op} operation: {value}" msgstr "のタイプが無効です {op} オペレーション: {value}" -#: extras/conditions.py:137 +#: netbox/extras/conditions.py:137 #, python-brace-format msgid "Ruleset must be a dictionary, not {ruleset}." msgstr "ルールセットは辞書でなければならず、辞書であってはなりません {ruleset}。" -#: extras/conditions.py:142 +#: netbox/extras/conditions.py:142 msgid "Invalid logic type: must be 'AND' or 'OR'. Please check documentation." msgstr "論理型が無効です。'AND' または 'OR' でなければなりません。ドキュメントを確認してください。" -#: extras/conditions.py:154 +#: netbox/extras/conditions.py:154 msgid "Incorrect key(s) informed. Please check documentation." msgstr "誤ったキーが通知されました。ドキュメントを確認してください。" -#: extras/dashboard/forms.py:38 +#: netbox/extras/dashboard/forms.py:38 msgid "Widget type" msgstr "ウィジェットタイプ" -#: extras/dashboard/utils.py:36 +#: netbox/extras/dashboard/utils.py:36 #, python-brace-format msgid "Unregistered widget class: {name}" msgstr "未登録のウィジェットクラス: {name}" -#: extras/dashboard/widgets.py:125 +#: netbox/extras/dashboard/widgets.py:125 #, python-brace-format msgid "{class_name} must define a render() method." msgstr "{class_name} render () メソッドを定義する必要があります。" -#: extras/dashboard/widgets.py:144 +#: netbox/extras/dashboard/widgets.py:144 msgid "Note" msgstr "メモ" -#: extras/dashboard/widgets.py:145 +#: netbox/extras/dashboard/widgets.py:145 msgid "Display some arbitrary custom content. Markdown is supported." msgstr "任意のカスタムコンテンツを表示します。Markdown がサポートされています。" -#: extras/dashboard/widgets.py:158 +#: netbox/extras/dashboard/widgets.py:158 msgid "Object Counts" msgstr "オブジェクト数" -#: extras/dashboard/widgets.py:159 +#: netbox/extras/dashboard/widgets.py:159 msgid "" "Display a set of NetBox models and the number of objects created for each " "type." msgstr "NetBox モデルのセットと、各タイプで作成されたオブジェクトの数を表示します。" -#: extras/dashboard/widgets.py:169 +#: netbox/extras/dashboard/widgets.py:169 msgid "Filters to apply when counting the number of objects" msgstr "オブジェクトの数をカウントするときに適用するフィルタ" -#: extras/dashboard/widgets.py:177 +#: netbox/extras/dashboard/widgets.py:177 msgid "Invalid format. Object filters must be passed as a dictionary." msgstr "形式が無効です。オブジェクトフィルタはディクショナリとして渡さなければなりません。" -#: extras/dashboard/widgets.py:208 +#: netbox/extras/dashboard/widgets.py:208 msgid "Object List" msgstr "オブジェクトリスト" -#: extras/dashboard/widgets.py:209 +#: netbox/extras/dashboard/widgets.py:209 msgid "Display an arbitrary list of objects." msgstr "任意のオブジェクトリストを表示します。" -#: extras/dashboard/widgets.py:222 +#: netbox/extras/dashboard/widgets.py:222 msgid "The default number of objects to display" msgstr "デフォルトで表示するオブジェクト数" -#: extras/dashboard/widgets.py:234 +#: netbox/extras/dashboard/widgets.py:234 msgid "Invalid format. URL parameters must be passed as a dictionary." msgstr "形式が無効です。URL パラメータはディクショナリとして渡さなければなりません。" -#: extras/dashboard/widgets.py:274 +#: netbox/extras/dashboard/widgets.py:274 msgid "RSS Feed" msgstr "RSS フィード" -#: extras/dashboard/widgets.py:279 +#: netbox/extras/dashboard/widgets.py:279 msgid "Embed an RSS feed from an external website." msgstr "外部 Web サイトの RSS フィードを埋め込みます。" -#: extras/dashboard/widgets.py:286 +#: netbox/extras/dashboard/widgets.py:286 msgid "Feed URL" msgstr "フィード URL" -#: extras/dashboard/widgets.py:291 +#: netbox/extras/dashboard/widgets.py:291 msgid "The maximum number of objects to display" msgstr "表示するオブジェクトの最大数" -#: extras/dashboard/widgets.py:296 +#: netbox/extras/dashboard/widgets.py:296 msgid "How long to stored the cached content (in seconds)" msgstr "キャッシュされたコンテンツを保存する時間 (秒)" -#: extras/dashboard/widgets.py:348 templates/account/base.html:10 -#: templates/account/bookmarks.html:7 templates/inc/user_menu.html:48 +#: netbox/extras/dashboard/widgets.py:348 +#: netbox/templates/account/base.html:10 +#: netbox/templates/account/bookmarks.html:7 +#: netbox/templates/inc/user_menu.html:48 msgid "Bookmarks" msgstr "ブックマーク" -#: extras/dashboard/widgets.py:352 +#: netbox/extras/dashboard/widgets.py:352 msgid "Show your personal bookmarks" msgstr "個人用のブックマークを表示する" -#: extras/events.py:147 +#: netbox/extras/events.py:147 #, python-brace-format msgid "Unknown action type for an event rule: {action_type}" msgstr "イベントルールのアクションタイプが不明です: {action_type}" -#: extras/events.py:192 +#: netbox/extras/events.py:192 #, python-brace-format msgid "Cannot import events pipeline {name} error: {error}" msgstr "イベントパイプラインをインポートできません {name} エラー: {error}" -#: extras/filtersets.py:45 +#: netbox/extras/filtersets.py:45 msgid "Script module (ID)" msgstr "スクリプトモジュール (ID)" -#: extras/filtersets.py:254 extras/filtersets.py:637 extras/filtersets.py:665 +#: netbox/extras/filtersets.py:254 netbox/extras/filtersets.py:637 +#: netbox/extras/filtersets.py:665 msgid "Data file (ID)" msgstr "データファイル (ID)" -#: extras/filtersets.py:370 users/filtersets.py:68 users/filtersets.py:191 +#: netbox/extras/filtersets.py:370 netbox/users/filtersets.py:68 +#: netbox/users/filtersets.py:191 msgid "Group (name)" msgstr "グループ (名前)" -#: extras/filtersets.py:574 virtualization/forms/filtersets.py:118 +#: netbox/extras/filtersets.py:574 +#: netbox/virtualization/forms/filtersets.py:118 msgid "Cluster type" msgstr "クラスタタイプ" -#: extras/filtersets.py:580 virtualization/filtersets.py:95 -#: virtualization/filtersets.py:147 +#: netbox/extras/filtersets.py:580 netbox/virtualization/filtersets.py:95 +#: netbox/virtualization/filtersets.py:147 msgid "Cluster type (slug)" msgstr "クラスタタイプ (slug)" -#: extras/filtersets.py:601 tenancy/forms/forms.py:16 -#: tenancy/forms/forms.py:39 +#: netbox/extras/filtersets.py:601 netbox/tenancy/forms/forms.py:16 +#: netbox/tenancy/forms/forms.py:39 msgid "Tenant group" msgstr "テナントグループ" -#: extras/filtersets.py:607 tenancy/filtersets.py:188 -#: tenancy/filtersets.py:208 +#: netbox/extras/filtersets.py:607 netbox/tenancy/filtersets.py:188 +#: netbox/tenancy/filtersets.py:208 msgid "Tenant group (slug)" msgstr "テナントグループ (slug)" -#: extras/filtersets.py:623 extras/forms/model_forms.py:495 -#: templates/extras/tag.html:11 +#: netbox/extras/filtersets.py:623 netbox/extras/forms/model_forms.py:495 +#: netbox/templates/extras/tag.html:11 msgid "Tag" msgstr "タグ" -#: extras/filtersets.py:629 +#: netbox/extras/filtersets.py:629 msgid "Tag (slug)" msgstr "タグ (slug)" -#: extras/filtersets.py:689 extras/forms/filtersets.py:429 +#: netbox/extras/filtersets.py:689 netbox/extras/forms/filtersets.py:429 msgid "Has local config context data" msgstr "ローカル設定コンテキストがある" -#: extras/forms/bulk_edit.py:35 extras/forms/filtersets.py:60 +#: netbox/extras/forms/bulk_edit.py:35 netbox/extras/forms/filtersets.py:60 msgid "Group name" msgstr "グループ名" -#: extras/forms/bulk_edit.py:43 extras/forms/filtersets.py:68 -#: extras/tables/tables.py:65 templates/extras/customfield.html:38 -#: templates/generic/bulk_import.html:118 +#: netbox/extras/forms/bulk_edit.py:43 netbox/extras/forms/filtersets.py:68 +#: netbox/extras/tables/tables.py:65 +#: netbox/templates/extras/customfield.html:38 +#: netbox/templates/generic/bulk_import.html:118 msgid "Required" msgstr "必須" -#: extras/forms/bulk_edit.py:48 extras/forms/filtersets.py:75 +#: netbox/extras/forms/bulk_edit.py:48 netbox/extras/forms/filtersets.py:75 msgid "Must be unique" msgstr "一意でなければならない" -#: extras/forms/bulk_edit.py:61 extras/forms/bulk_import.py:60 -#: extras/forms/filtersets.py:89 extras/models/customfields.py:209 +#: netbox/extras/forms/bulk_edit.py:61 netbox/extras/forms/bulk_import.py:60 +#: netbox/extras/forms/filtersets.py:89 +#: netbox/extras/models/customfields.py:209 msgid "UI visible" msgstr "UI で表示される" -#: extras/forms/bulk_edit.py:66 extras/forms/bulk_import.py:66 -#: extras/forms/filtersets.py:94 extras/models/customfields.py:216 +#: netbox/extras/forms/bulk_edit.py:66 netbox/extras/forms/bulk_import.py:66 +#: netbox/extras/forms/filtersets.py:94 +#: netbox/extras/models/customfields.py:216 msgid "UI editable" msgstr "UI で編集可能" -#: extras/forms/bulk_edit.py:71 extras/forms/filtersets.py:97 +#: netbox/extras/forms/bulk_edit.py:71 netbox/extras/forms/filtersets.py:97 msgid "Is cloneable" msgstr "複製可能" -#: extras/forms/bulk_edit.py:76 extras/forms/filtersets.py:104 +#: netbox/extras/forms/bulk_edit.py:76 netbox/extras/forms/filtersets.py:104 msgid "Minimum value" msgstr "最小値" -#: extras/forms/bulk_edit.py:80 extras/forms/filtersets.py:108 +#: netbox/extras/forms/bulk_edit.py:80 netbox/extras/forms/filtersets.py:108 msgid "Maximum value" msgstr "最大値" -#: extras/forms/bulk_edit.py:84 extras/forms/filtersets.py:112 +#: netbox/extras/forms/bulk_edit.py:84 netbox/extras/forms/filtersets.py:112 msgid "Validation regex" msgstr "検証正規表現" -#: extras/forms/bulk_edit.py:91 extras/forms/filtersets.py:46 -#: extras/forms/model_forms.py:76 templates/extras/customfield.html:70 +#: netbox/extras/forms/bulk_edit.py:91 netbox/extras/forms/filtersets.py:46 +#: netbox/extras/forms/model_forms.py:76 +#: netbox/templates/extras/customfield.html:70 msgid "Behavior" msgstr "動作" -#: extras/forms/bulk_edit.py:128 extras/forms/filtersets.py:149 +#: netbox/extras/forms/bulk_edit.py:128 netbox/extras/forms/filtersets.py:149 msgid "New window" msgstr "新しいウィンドウ" -#: extras/forms/bulk_edit.py:137 +#: netbox/extras/forms/bulk_edit.py:137 msgid "Button class" msgstr "ボタンクラス" -#: extras/forms/bulk_edit.py:154 extras/forms/filtersets.py:187 -#: extras/models/models.py:409 +#: netbox/extras/forms/bulk_edit.py:154 netbox/extras/forms/filtersets.py:187 +#: netbox/extras/models/models.py:409 msgid "MIME type" msgstr "MIMEタイプ" -#: extras/forms/bulk_edit.py:159 extras/forms/filtersets.py:190 +#: netbox/extras/forms/bulk_edit.py:159 netbox/extras/forms/filtersets.py:190 msgid "File extension" msgstr "ファイル拡張子" -#: extras/forms/bulk_edit.py:164 extras/forms/filtersets.py:194 +#: netbox/extras/forms/bulk_edit.py:164 netbox/extras/forms/filtersets.py:194 msgid "As attachment" msgstr "添付ファイルとして" -#: extras/forms/bulk_edit.py:192 extras/forms/filtersets.py:236 -#: extras/tables/tables.py:256 templates/extras/savedfilter.html:29 +#: netbox/extras/forms/bulk_edit.py:192 netbox/extras/forms/filtersets.py:236 +#: netbox/extras/tables/tables.py:256 +#: netbox/templates/extras/savedfilter.html:29 msgid "Shared" msgstr "共有" -#: extras/forms/bulk_edit.py:215 extras/forms/filtersets.py:265 -#: extras/models/models.py:174 +#: netbox/extras/forms/bulk_edit.py:215 netbox/extras/forms/filtersets.py:265 +#: netbox/extras/models/models.py:174 msgid "HTTP method" msgstr "HTTP メソッド" -#: extras/forms/bulk_edit.py:219 extras/forms/filtersets.py:259 -#: templates/extras/webhook.html:30 +#: netbox/extras/forms/bulk_edit.py:219 netbox/extras/forms/filtersets.py:259 +#: netbox/templates/extras/webhook.html:30 msgid "Payload URL" msgstr "ペイロード URL" -#: extras/forms/bulk_edit.py:224 extras/models/models.py:214 +#: netbox/extras/forms/bulk_edit.py:224 netbox/extras/models/models.py:214 msgid "SSL verification" msgstr "SSL 検証" -#: extras/forms/bulk_edit.py:227 templates/extras/webhook.html:38 +#: netbox/extras/forms/bulk_edit.py:227 +#: netbox/templates/extras/webhook.html:38 msgid "Secret" msgstr "シークレット" -#: extras/forms/bulk_edit.py:232 +#: netbox/extras/forms/bulk_edit.py:232 msgid "CA file path" msgstr "CA ファイルパス" -#: extras/forms/bulk_edit.py:253 extras/forms/bulk_import.py:192 -#: extras/forms/model_forms.py:377 +#: netbox/extras/forms/bulk_edit.py:253 netbox/extras/forms/bulk_import.py:192 +#: netbox/extras/forms/model_forms.py:377 msgid "Event types" msgstr "イベントタイプ" -#: extras/forms/bulk_edit.py:293 +#: netbox/extras/forms/bulk_edit.py:293 msgid "Is active" msgstr "有効" -#: extras/forms/bulk_import.py:37 extras/forms/bulk_import.py:118 -#: extras/forms/bulk_import.py:139 extras/forms/bulk_import.py:162 -#: extras/forms/bulk_import.py:186 extras/forms/filtersets.py:137 -#: extras/forms/filtersets.py:224 extras/forms/model_forms.py:47 -#: extras/forms/model_forms.py:205 extras/forms/model_forms.py:237 -#: extras/forms/model_forms.py:278 extras/forms/model_forms.py:372 -#: extras/forms/model_forms.py:489 users/forms/model_forms.py:276 +#: netbox/extras/forms/bulk_import.py:37 +#: netbox/extras/forms/bulk_import.py:118 +#: 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/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/users/forms/model_forms.py:276 msgid "Object types" msgstr "オブジェクトタイプ" -#: extras/forms/bulk_import.py:39 extras/forms/bulk_import.py:120 -#: extras/forms/bulk_import.py:141 extras/forms/bulk_import.py:164 -#: extras/forms/bulk_import.py:188 tenancy/forms/bulk_import.py:96 +#: netbox/extras/forms/bulk_import.py:39 +#: netbox/extras/forms/bulk_import.py:120 +#: netbox/extras/forms/bulk_import.py:141 +#: netbox/extras/forms/bulk_import.py:164 +#: netbox/extras/forms/bulk_import.py:188 +#: netbox/tenancy/forms/bulk_import.py:96 msgid "One or more assigned object types" msgstr "1 つ以上の割当オブジェクトタイプ" -#: extras/forms/bulk_import.py:44 +#: netbox/extras/forms/bulk_import.py:44 msgid "Field data type (e.g. text, integer, etc.)" msgstr "フィールドデータタイプ (テキスト、整数など)" -#: extras/forms/bulk_import.py:47 extras/forms/filtersets.py:208 -#: extras/forms/filtersets.py:281 extras/forms/model_forms.py:304 -#: extras/forms/model_forms.py:341 tenancy/forms/filtersets.py:92 +#: 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/tenancy/forms/filtersets.py:92 msgid "Object type" msgstr "オブジェクトタイプ" -#: extras/forms/bulk_import.py:50 +#: netbox/extras/forms/bulk_import.py:50 msgid "Object type (for object or multi-object fields)" msgstr "オブジェクトタイプ (オブジェクトフィールドまたはマルチオブジェクトフィールド用)" -#: extras/forms/bulk_import.py:53 extras/forms/filtersets.py:84 +#: netbox/extras/forms/bulk_import.py:53 netbox/extras/forms/filtersets.py:84 msgid "Choice set" msgstr "選択肢" -#: extras/forms/bulk_import.py:57 +#: netbox/extras/forms/bulk_import.py:57 msgid "Choice set (for selection fields)" msgstr "選択肢 (選択フィールド用)" -#: extras/forms/bulk_import.py:63 +#: netbox/extras/forms/bulk_import.py:63 msgid "Whether the custom field is displayed in the UI" msgstr "カスタムフィールドが UI上に表示されるかどうか" -#: extras/forms/bulk_import.py:69 +#: netbox/extras/forms/bulk_import.py:69 msgid "Whether the custom field is editable in the UI" msgstr "カスタムフィールドが UI上で編集可能かどうか" -#: extras/forms/bulk_import.py:85 +#: netbox/extras/forms/bulk_import.py:85 msgid "The base set of predefined choices to use (if any)" msgstr "定義済みの選択肢の基本セット (存在する場合)" -#: extras/forms/bulk_import.py:91 +#: netbox/extras/forms/bulk_import.py:91 msgid "" "Quoted string of comma-separated field choices with optional labels " "separated by colon: \"choice1:First Choice,choice2:Second Choice\"" @@ -7082,213 +7649,230 @@ msgstr "" "引用符で囲んだ、カンマ区切りの選択肢。コロン区切りでラベル設定可能: \"choice1:First Choice,choice2:Second " "Choice\"" -#: extras/forms/bulk_import.py:123 extras/models/models.py:323 +#: netbox/extras/forms/bulk_import.py:123 netbox/extras/models/models.py:323 msgid "button class" msgstr "ボタンクラス" -#: extras/forms/bulk_import.py:126 extras/models/models.py:327 +#: netbox/extras/forms/bulk_import.py:126 netbox/extras/models/models.py:327 msgid "" "The class of the first link in a group will be used for the dropdown button" msgstr "グループ内の最初のリンクのクラスがドロップダウンボタンに使用されます" -#: extras/forms/bulk_import.py:193 +#: netbox/extras/forms/bulk_import.py:193 msgid "The event type(s) which will trigger this rule" msgstr "このルールをトリガーするイベントタイプ" -#: extras/forms/bulk_import.py:196 +#: netbox/extras/forms/bulk_import.py:196 msgid "Action object" msgstr "アクションオブジェクト" -#: extras/forms/bulk_import.py:198 +#: netbox/extras/forms/bulk_import.py:198 msgid "Webhook name or script as dotted path module.Class" msgstr "ドットパス形式 (module.Class) のウェブフック名またはスクリプト" -#: extras/forms/bulk_import.py:219 +#: netbox/extras/forms/bulk_import.py:219 #, python-brace-format msgid "Webhook {name} not found" msgstr "ウェブフック {name} 見つかりません" -#: extras/forms/bulk_import.py:228 +#: netbox/extras/forms/bulk_import.py:228 #, python-brace-format msgid "Script {name} not found" msgstr "スクリプト {name} 見つかりません" -#: extras/forms/bulk_import.py:244 +#: netbox/extras/forms/bulk_import.py:244 msgid "Assigned object type" msgstr "割当オブジェクトタイプ" -#: extras/forms/bulk_import.py:249 +#: netbox/extras/forms/bulk_import.py:249 msgid "The classification of entry" msgstr "エントリの分類" -#: extras/forms/bulk_import.py:261 extras/forms/model_forms.py:320 -#: netbox/navigation/menu.py:390 templates/extras/notificationgroup.html:41 -#: templates/users/group.html:29 users/forms/model_forms.py:236 -#: users/forms/model_forms.py:248 users/forms/model_forms.py:300 -#: users/tables.py:102 +#: netbox/extras/forms/bulk_import.py:261 +#: netbox/extras/forms/model_forms.py:320 netbox/netbox/navigation/menu.py:390 +#: 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 +#: netbox/users/tables.py:102 msgid "Users" msgstr "ユーザ" -#: extras/forms/bulk_import.py:265 +#: netbox/extras/forms/bulk_import.py:265 msgid "User names separated by commas, encased with double quotes" msgstr "二重引用符で囲まれたカンマ区切りユーザ名" -#: extras/forms/bulk_import.py:268 extras/forms/model_forms.py:315 -#: netbox/navigation/menu.py:410 templates/extras/notificationgroup.html:31 -#: users/forms/model_forms.py:181 users/forms/model_forms.py:193 -#: users/forms/model_forms.py:305 users/tables.py:35 users/tables.py:106 +#: netbox/extras/forms/bulk_import.py:268 +#: netbox/extras/forms/model_forms.py:315 netbox/netbox/navigation/menu.py:410 +#: 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 +#: netbox/users/tables.py:106 msgid "Groups" msgstr "グループ" -#: extras/forms/bulk_import.py:272 +#: netbox/extras/forms/bulk_import.py:272 msgid "Group names separated by commas, encased with double quotes" msgstr "二重引用符で囲まれたカンマで区切りグループ名" -#: extras/forms/filtersets.py:52 extras/forms/model_forms.py:56 +#: netbox/extras/forms/filtersets.py:52 netbox/extras/forms/model_forms.py:56 msgid "Related object type" msgstr "関連オブジェクトタイプ" -#: extras/forms/filtersets.py:57 +#: netbox/extras/forms/filtersets.py:57 msgid "Field type" msgstr "フィールドタイプ" -#: extras/forms/filtersets.py:120 extras/forms/model_forms.py:157 -#: extras/tables/tables.py:91 templates/generic/bulk_import.html:154 +#: netbox/extras/forms/filtersets.py:120 +#: netbox/extras/forms/model_forms.py:157 netbox/extras/tables/tables.py:91 +#: netbox/templates/generic/bulk_import.html:154 msgid "Choices" msgstr "選択肢" -#: extras/forms/filtersets.py:164 extras/forms/filtersets.py:319 -#: extras/forms/filtersets.py:408 extras/forms/model_forms.py:572 -#: templates/core/job.html:96 templates/extras/eventrule.html:84 +#: 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/templates/extras/eventrule.html:84 msgid "Data" msgstr "データ" -#: extras/forms/filtersets.py:175 extras/forms/filtersets.py:333 -#: extras/forms/filtersets.py:418 netbox/choices.py:130 -#: utilities/forms/bulk_import.py:26 +#: netbox/extras/forms/filtersets.py:175 netbox/extras/forms/filtersets.py:333 +#: netbox/extras/forms/filtersets.py:418 netbox/netbox/choices.py:130 +#: netbox/utilities/forms/bulk_import.py:26 msgid "Data file" msgstr "データファイル" -#: extras/forms/filtersets.py:183 +#: netbox/extras/forms/filtersets.py:183 msgid "Content types" msgstr "コンテンツタイプ" -#: extras/forms/filtersets.py:255 extras/models/models.py:179 +#: netbox/extras/forms/filtersets.py:255 netbox/extras/models/models.py:179 msgid "HTTP content type" msgstr "HTTP content type" -#: extras/forms/filtersets.py:286 +#: netbox/extras/forms/filtersets.py:286 msgid "Event type" msgstr "イベントタイプ" -#: extras/forms/filtersets.py:291 +#: netbox/extras/forms/filtersets.py:291 msgid "Action type" msgstr "アクションタイプ" -#: extras/forms/filtersets.py:307 +#: netbox/extras/forms/filtersets.py:307 msgid "Tagged object type" msgstr "タグ付きオブジェクトタイプ" -#: extras/forms/filtersets.py:312 +#: netbox/extras/forms/filtersets.py:312 msgid "Allowed object type" msgstr "許可されるオブジェクトタイプ" -#: extras/forms/filtersets.py:341 extras/forms/model_forms.py:507 -#: netbox/navigation/menu.py:18 +#: netbox/extras/forms/filtersets.py:341 +#: netbox/extras/forms/model_forms.py:507 netbox/netbox/navigation/menu.py:18 msgid "Regions" msgstr "リージョン" -#: extras/forms/filtersets.py:346 extras/forms/model_forms.py:512 +#: netbox/extras/forms/filtersets.py:346 +#: netbox/extras/forms/model_forms.py:512 msgid "Site groups" msgstr "サイトグループ" -#: extras/forms/filtersets.py:356 extras/forms/model_forms.py:522 -#: netbox/navigation/menu.py:20 templates/dcim/site.html:127 +#: netbox/extras/forms/filtersets.py:356 +#: netbox/extras/forms/model_forms.py:522 netbox/netbox/navigation/menu.py:20 +#: netbox/templates/dcim/site.html:127 msgid "Locations" msgstr "ロケーション" -#: extras/forms/filtersets.py:361 extras/forms/model_forms.py:527 +#: netbox/extras/forms/filtersets.py:361 +#: netbox/extras/forms/model_forms.py:527 msgid "Device types" msgstr "デバイスタイプ" -#: extras/forms/filtersets.py:366 extras/forms/model_forms.py:532 +#: netbox/extras/forms/filtersets.py:366 +#: netbox/extras/forms/model_forms.py:532 msgid "Roles" msgstr "ロール" -#: extras/forms/filtersets.py:376 extras/forms/model_forms.py:542 +#: netbox/extras/forms/filtersets.py:376 +#: netbox/extras/forms/model_forms.py:542 msgid "Cluster types" msgstr "クラスタタイプ" -#: extras/forms/filtersets.py:381 extras/forms/model_forms.py:547 +#: netbox/extras/forms/filtersets.py:381 +#: netbox/extras/forms/model_forms.py:547 msgid "Cluster groups" msgstr "クラスタグループ" -#: extras/forms/filtersets.py:386 extras/forms/model_forms.py:552 -#: netbox/navigation/menu.py:255 netbox/navigation/menu.py:257 -#: templates/virtualization/clustertype.html:30 -#: virtualization/tables/clusters.py:23 virtualization/tables/clusters.py:45 +#: 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/templates/virtualization/clustertype.html:30 +#: netbox/virtualization/tables/clusters.py:23 +#: netbox/virtualization/tables/clusters.py:45 msgid "Clusters" msgstr "クラスタ" -#: extras/forms/filtersets.py:391 extras/forms/model_forms.py:557 +#: netbox/extras/forms/filtersets.py:391 +#: netbox/extras/forms/model_forms.py:557 msgid "Tenant groups" msgstr "テナントグループ" -#: extras/forms/model_forms.py:49 +#: netbox/extras/forms/model_forms.py:49 msgid "The type(s) of object that have this custom field" msgstr "このカスタムフィールドを持つオブジェクトのタイプ" -#: extras/forms/model_forms.py:52 +#: netbox/extras/forms/model_forms.py:52 msgid "Default value" msgstr "既定値" -#: extras/forms/model_forms.py:58 +#: netbox/extras/forms/model_forms.py:58 msgid "Type of the related object (for object/multi-object fields only)" msgstr "関連オブジェクトのタイプ (オブジェクト/マルチオブジェクトフィールドのみ)" -#: extras/forms/model_forms.py:61 templates/extras/customfield.html:60 +#: netbox/extras/forms/model_forms.py:61 +#: netbox/templates/extras/customfield.html:60 msgid "Related object filter" msgstr "関連オブジェクトフィルタ" -#: extras/forms/model_forms.py:63 +#: netbox/extras/forms/model_forms.py:63 msgid "Specify query parameters as a JSON object." msgstr "クエリパラメータを JSON オブジェクトとして指定します。" -#: extras/forms/model_forms.py:73 templates/extras/customfield.html:10 +#: netbox/extras/forms/model_forms.py:73 +#: netbox/templates/extras/customfield.html:10 msgid "Custom Field" msgstr "カスタムフィールド" -#: extras/forms/model_forms.py:85 +#: netbox/extras/forms/model_forms.py:85 msgid "" "The type of data stored in this field. For object/multi-object fields, " "select the related object type below." msgstr "このフィールドのタイプ。オブジェクト/マルチオブジェクトフィールドの場合は、関連するオブジェクトタイプを以下から選択してください。" -#: extras/forms/model_forms.py:88 +#: netbox/extras/forms/model_forms.py:88 msgid "" "This will be displayed as help text for the form field. Markdown is " "supported." msgstr "これはフォームフィールドのヘルプテキストとして表示されます。Markdown がサポートされています。" -#: extras/forms/model_forms.py:143 +#: netbox/extras/forms/model_forms.py:143 msgid "Related Object" msgstr "関連オブジェクト" -#: extras/forms/model_forms.py:169 +#: netbox/extras/forms/model_forms.py:169 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 つの選択肢を入力します。必要に応じて、各選択肢にコロンを付けることで、ラベルを指定できます。例:" -#: extras/forms/model_forms.py:212 templates/extras/customlink.html:10 +#: netbox/extras/forms/model_forms.py:212 +#: netbox/templates/extras/customlink.html:10 msgid "Custom Link" msgstr "カスタムリンク" -#: extras/forms/model_forms.py:214 +#: netbox/extras/forms/model_forms.py:214 msgid "Templates" msgstr "テンプレート" -#: extras/forms/model_forms.py:226 +#: netbox/extras/forms/model_forms.py:226 #, python-brace-format msgid "" "Jinja2 template code for the link text. Reference the object as {example}. " @@ -7297,184 +7881,192 @@ msgstr "" "リンクテキストの Jinja2 テンプレートコード。オブジェクトを次のように参照します。 " "{example}。空のテキストとしてレンダリングされるリンクは表示されません。" -#: extras/forms/model_forms.py:230 +#: netbox/extras/forms/model_forms.py:230 #, python-brace-format msgid "" "Jinja2 template code for the link URL. Reference the object as {example}." msgstr "リンク URL の Jinja2 テンプレートコード。オブジェクトを次のように参照します。 {example}。" -#: extras/forms/model_forms.py:241 extras/forms/model_forms.py:624 +#: netbox/extras/forms/model_forms.py:241 +#: netbox/extras/forms/model_forms.py:624 msgid "Template code" msgstr "テンプレートコード" -#: extras/forms/model_forms.py:247 templates/extras/exporttemplate.html:12 +#: netbox/extras/forms/model_forms.py:247 +#: netbox/templates/extras/exporttemplate.html:12 msgid "Export Template" msgstr "テンプレートをエクスポート" -#: extras/forms/model_forms.py:249 +#: netbox/extras/forms/model_forms.py:249 msgid "Rendering" msgstr "レンダリング" -#: extras/forms/model_forms.py:263 extras/forms/model_forms.py:649 +#: netbox/extras/forms/model_forms.py:263 +#: netbox/extras/forms/model_forms.py:649 msgid "Template content is populated from the remote source selected below." msgstr "選択したリモートソースから、テンプレートコンテンツが入力されます。" -#: extras/forms/model_forms.py:270 extras/forms/model_forms.py:656 +#: netbox/extras/forms/model_forms.py:270 +#: netbox/extras/forms/model_forms.py:656 msgid "Must specify either local content or a data file" msgstr "ローカルコンテンツまたはデータファイルのいずれかを指定する必要があります" -#: extras/forms/model_forms.py:284 netbox/forms/mixins.py:70 -#: templates/extras/savedfilter.html:10 +#: netbox/extras/forms/model_forms.py:284 netbox/netbox/forms/mixins.py:70 +#: netbox/templates/extras/savedfilter.html:10 msgid "Saved Filter" msgstr "保存済みフィルタ" -#: extras/forms/model_forms.py:334 +#: netbox/extras/forms/model_forms.py:334 msgid "A notification group specify at least one user or group." msgstr "通知グループには、少なくとも 1 人のユーザまたはグループを指定します。" -#: extras/forms/model_forms.py:356 templates/extras/webhook.html:23 +#: netbox/extras/forms/model_forms.py:356 +#: netbox/templates/extras/webhook.html:23 msgid "HTTP Request" msgstr "HTTP リクエスト" -#: extras/forms/model_forms.py:358 templates/extras/webhook.html:44 +#: netbox/extras/forms/model_forms.py:358 +#: netbox/templates/extras/webhook.html:44 msgid "SSL" msgstr "SSL" -#: extras/forms/model_forms.py:380 +#: netbox/extras/forms/model_forms.py:380 msgid "Action choice" msgstr "スクリプト" -#: extras/forms/model_forms.py:385 +#: netbox/extras/forms/model_forms.py:385 msgid "Enter conditions in JSON format." msgstr "JSON フォーマットで条件を入力。" -#: extras/forms/model_forms.py:389 +#: netbox/extras/forms/model_forms.py:389 msgid "" "Enter parameters to pass to the action in JSON format." msgstr "JSON フォーマットでアクションに渡すパラメータを入力してください。" -#: extras/forms/model_forms.py:394 templates/extras/eventrule.html:10 +#: netbox/extras/forms/model_forms.py:394 +#: netbox/templates/extras/eventrule.html:10 msgid "Event Rule" msgstr "イベントルール" -#: extras/forms/model_forms.py:395 +#: netbox/extras/forms/model_forms.py:395 msgid "Triggers" msgstr "トリガー" -#: extras/forms/model_forms.py:442 +#: netbox/extras/forms/model_forms.py:442 msgid "Notification group" msgstr "通知グループ" -#: extras/forms/model_forms.py:562 netbox/navigation/menu.py:26 -#: tenancy/tables/tenants.py:22 +#: netbox/extras/forms/model_forms.py:562 netbox/netbox/navigation/menu.py:26 +#: netbox/tenancy/tables/tenants.py:22 msgid "Tenants" msgstr "テナント" -#: extras/forms/model_forms.py:606 +#: netbox/extras/forms/model_forms.py:606 msgid "Data is populated from the remote source selected below." msgstr "データは、以下で選択したリモートソースから入力されます。" -#: extras/forms/model_forms.py:612 +#: netbox/extras/forms/model_forms.py:612 msgid "Must specify either local data or a data file" msgstr "ローカルデータまたはデータファイルのいずれかを指定する必要があります" -#: extras/forms/model_forms.py:631 templates/core/datafile.html:55 +#: netbox/extras/forms/model_forms.py:631 +#: netbox/templates/core/datafile.html:55 msgid "Content" msgstr "コンテンツ" -#: extras/forms/reports.py:17 extras/forms/scripts.py:23 +#: netbox/extras/forms/reports.py:17 netbox/extras/forms/scripts.py:23 msgid "Schedule at" msgstr "スケジュール" -#: extras/forms/reports.py:18 +#: netbox/extras/forms/reports.py:18 msgid "Schedule execution of report to a set time" msgstr "レポートの実行をスケジュールする" -#: extras/forms/reports.py:23 extras/forms/scripts.py:29 +#: netbox/extras/forms/reports.py:23 netbox/extras/forms/scripts.py:29 msgid "Recurs every" msgstr "繰り返す" -#: extras/forms/reports.py:27 +#: netbox/extras/forms/reports.py:27 msgid "Interval at which this report is re-run (in minutes)" msgstr "実行される間隔 (分)" -#: extras/forms/reports.py:35 extras/forms/scripts.py:41 +#: netbox/extras/forms/reports.py:35 netbox/extras/forms/scripts.py:41 #, python-brace-format msgid " (current time: {now})" msgstr " (現在時刻: {now})" -#: extras/forms/reports.py:45 extras/forms/scripts.py:51 +#: netbox/extras/forms/reports.py:45 netbox/extras/forms/scripts.py:51 msgid "Scheduled time must be in the future." msgstr "予定時刻は将来の時刻でなければなりません。" -#: extras/forms/scripts.py:17 +#: netbox/extras/forms/scripts.py:17 msgid "Commit changes" msgstr "変更をコミット" -#: extras/forms/scripts.py:18 +#: netbox/extras/forms/scripts.py:18 msgid "Commit changes to the database (uncheck for a dry-run)" msgstr "変更をDBにコミットする (dry runの場合はチェックを外す)" -#: extras/forms/scripts.py:24 +#: netbox/extras/forms/scripts.py:24 msgid "Schedule execution of script to a set time" msgstr "スクリプトの実行をスケジュールする" -#: extras/forms/scripts.py:33 +#: netbox/extras/forms/scripts.py:33 msgid "Interval at which this script is re-run (in minutes)" msgstr "実行される間隔 (分単位)" -#: extras/jobs.py:49 +#: netbox/extras/jobs.py:47 msgid "Database changes have been reverted automatically." msgstr "データベースの変更は自動的に元に戻されました。" -#: extras/jobs.py:55 +#: netbox/extras/jobs.py:53 msgid "Script aborted with error: " msgstr "スクリプトがエラーで中止されました: " -#: extras/jobs.py:65 +#: netbox/extras/jobs.py:63 msgid "An exception occurred: " msgstr "例外が発生しました: " -#: extras/jobs.py:70 +#: netbox/extras/jobs.py:68 msgid "Database changes have been reverted due to error." msgstr "エラーにより、データベースの変更が元に戻されました。" -#: extras/management/commands/reindex.py:66 +#: netbox/extras/management/commands/reindex.py:66 msgid "No indexers found!" msgstr "indexerが見つかりません" -#: extras/models/configs.py:130 +#: netbox/extras/models/configs.py:130 msgid "config context" msgstr "コンフィグコンテキスト" -#: extras/models/configs.py:131 +#: netbox/extras/models/configs.py:131 msgid "config contexts" msgstr "コンフィグコンテキスト" -#: extras/models/configs.py:149 extras/models/configs.py:205 +#: netbox/extras/models/configs.py:149 netbox/extras/models/configs.py:205 msgid "JSON data must be in object form. Example:" msgstr "JSON データはオブジェクト形式である必要があります。例:" -#: extras/models/configs.py:169 +#: netbox/extras/models/configs.py:169 msgid "" "Local config context data takes precedence over source contexts in the final" " rendered config context" msgstr "最終的なコンフィグコンテキストでは、ローカルコンフィグコンテキストが優先されます。" -#: extras/models/configs.py:224 +#: netbox/extras/models/configs.py:224 msgid "template code" msgstr "テンプレートコード" -#: extras/models/configs.py:225 +#: netbox/extras/models/configs.py:225 msgid "Jinja2 template code." msgstr "Jinja2 テンプレートコード。" -#: extras/models/configs.py:228 +#: netbox/extras/models/configs.py:228 msgid "environment parameters" msgstr "環境パラメータ" -#: extras/models/configs.py:233 +#: netbox/extras/models/configs.py:233 msgid "" "Any additional" @@ -7484,101 +8076,101 @@ msgstr "" "href=\"https://jinja.palletsprojects.com/en/3.1.x/api/#jinja2.Environment\">追加パラメータ" " はJinja2 環境を構築するときに渡されます。" -#: extras/models/configs.py:240 +#: netbox/extras/models/configs.py:240 msgid "config template" msgstr "設定テンプレート" -#: extras/models/configs.py:241 +#: netbox/extras/models/configs.py:241 msgid "config templates" msgstr "設定テンプレート" -#: extras/models/customfields.py:75 +#: netbox/extras/models/customfields.py:75 msgid "The object(s) to which this field applies." msgstr "このフィールドが適用されるオブジェクト。" -#: extras/models/customfields.py:82 +#: netbox/extras/models/customfields.py:82 msgid "The type of data this custom field holds" msgstr "このカスタムフィールドが保持するデータのタイプ" -#: extras/models/customfields.py:89 +#: netbox/extras/models/customfields.py:89 msgid "The type of NetBox object this field maps to (for object fields)" msgstr "このフィールドがマップされる NetBox オブジェクトのタイプ (オブジェクトフィールド用)" -#: extras/models/customfields.py:95 +#: netbox/extras/models/customfields.py:95 msgid "Internal field name" msgstr "内部フィールド名" -#: extras/models/customfields.py:99 +#: netbox/extras/models/customfields.py:99 msgid "Only alphanumeric characters and underscores are allowed." msgstr "英数字とアンダースコアのみ使用できます。" -#: extras/models/customfields.py:104 +#: netbox/extras/models/customfields.py:104 msgid "Double underscores are not permitted in custom field names." msgstr "カスタムフィールド名には二重アンダースコアを使用できません。" -#: extras/models/customfields.py:115 +#: netbox/extras/models/customfields.py:115 msgid "" "Name of the field as displayed to users (if not provided, 'the field's name " "will be used)" msgstr "表示されるフィールド名 (指定しない場合は、フィールド名が使用されます)" -#: extras/models/customfields.py:119 extras/models/models.py:317 +#: netbox/extras/models/customfields.py:119 netbox/extras/models/models.py:317 msgid "group name" msgstr "グループ名" -#: extras/models/customfields.py:122 +#: netbox/extras/models/customfields.py:122 msgid "Custom fields within the same group will be displayed together" msgstr "同じグループ内のカスタムフィールドは一緒に表示されます" -#: extras/models/customfields.py:130 +#: netbox/extras/models/customfields.py:130 msgid "required" msgstr "必須" -#: extras/models/customfields.py:132 +#: netbox/extras/models/customfields.py:132 msgid "" "This field is required when creating new objects or editing an existing " "object." msgstr "このフィールドは、オブジェクトを作成・編集に必要です。" -#: extras/models/customfields.py:135 +#: netbox/extras/models/customfields.py:135 msgid "must be unique" msgstr "ユニークでなければならない" -#: extras/models/customfields.py:137 +#: netbox/extras/models/customfields.py:137 msgid "The value of this field must be unique for the assigned object" msgstr "このフィールドの値は、割当オブジェクトで一意である必要があります" -#: extras/models/customfields.py:140 +#: netbox/extras/models/customfields.py:140 msgid "search weight" msgstr "検索優先度" -#: extras/models/customfields.py:143 +#: netbox/extras/models/customfields.py:143 msgid "" "Weighting for search. Lower values are considered more important. Fields " "with a search weight of zero will be ignored." msgstr "検索用の重み付け。値が小さいほど優先されます。検索優先度が 0 のフィールドは無視されます。" -#: extras/models/customfields.py:148 +#: netbox/extras/models/customfields.py:148 msgid "filter logic" msgstr "フィルタロジック" -#: extras/models/customfields.py:152 +#: netbox/extras/models/customfields.py:152 msgid "" "Loose matches any instance of a given string; exact matches the entire " "field." msgstr "Loose は指定した文字列が含まれる場合に一致し、exact はフィールド全体と一致します。" -#: extras/models/customfields.py:155 +#: netbox/extras/models/customfields.py:155 msgid "default" msgstr "デフォルト" -#: extras/models/customfields.py:159 +#: netbox/extras/models/customfields.py:159 msgid "" "Default value for the field (must be a JSON value). Encapsulate strings with" " double quotes (e.g. \"Foo\")." msgstr "フィールドのデフォルト値 (JSON 値である必要があります)。文字列を二重引用符で囲みます (例:「Foo」)。" -#: extras/models/customfields.py:166 +#: netbox/extras/models/customfields.py:166 msgid "" "Filter the object selection choices using a query_params dict (must be a " "JSON value).Encapsulate strings with double quotes (e.g. \"Foo\")." @@ -7586,35 +8178,35 @@ msgstr "" "query_params dict (JSON 値である必要があります) " "を使用してオブジェクト選択の選択肢をフィルタリングします。文字列を二重引用符で囲みます (例:「Foo」)。" -#: extras/models/customfields.py:172 +#: netbox/extras/models/customfields.py:172 msgid "display weight" msgstr "表示優先度" -#: extras/models/customfields.py:173 +#: netbox/extras/models/customfields.py:173 msgid "Fields with higher weights appear lower in a form." msgstr "値が大きいフィールドは、フォームの下に表示されます。" -#: extras/models/customfields.py:178 +#: netbox/extras/models/customfields.py:178 msgid "minimum value" msgstr "最小値" -#: extras/models/customfields.py:179 +#: netbox/extras/models/customfields.py:179 msgid "Minimum allowed value (for numeric fields)" msgstr "最小許容値 (数値フィールド用)" -#: extras/models/customfields.py:184 +#: netbox/extras/models/customfields.py:184 msgid "maximum value" msgstr "最大値" -#: extras/models/customfields.py:185 +#: netbox/extras/models/customfields.py:185 msgid "Maximum allowed value (for numeric fields)" msgstr "最大許容値 (数値フィールド用)" -#: extras/models/customfields.py:191 +#: netbox/extras/models/customfields.py:191 msgid "validation regex" msgstr "バリデーション正規表現" -#: extras/models/customfields.py:193 +#: netbox/extras/models/customfields.py:193 #, python-brace-format msgid "" "Regular expression to enforce on text field values. Use ^ and $ to force " @@ -7624,243 +8216,245 @@ msgstr "" "テキストフィールド値に適用する正規表現。^ と $ を使用して文字列全体を強制的に一致させます。例えば、 ^ " "[A-Z]{3}$ は値を3 字の大文字に制限します。" -#: extras/models/customfields.py:201 +#: netbox/extras/models/customfields.py:201 msgid "choice set" msgstr "選択肢" -#: extras/models/customfields.py:210 +#: netbox/extras/models/customfields.py:210 msgid "Specifies whether the custom field is displayed in the UI" msgstr "カスタムフィールドを UI に表示するかどうかを指定します" -#: extras/models/customfields.py:217 +#: netbox/extras/models/customfields.py:217 msgid "Specifies whether the custom field value can be edited in the UI" msgstr "カスタムフィールド値を UI で編集できるかどうかを指定します" -#: extras/models/customfields.py:221 +#: netbox/extras/models/customfields.py:221 msgid "is cloneable" msgstr "複製可能" -#: extras/models/customfields.py:222 +#: netbox/extras/models/customfields.py:222 msgid "Replicate this value when cloning objects" msgstr "オブジェクトの複製時にこの値を複製する" -#: extras/models/customfields.py:239 +#: netbox/extras/models/customfields.py:239 msgid "custom field" msgstr "カスタムフィールド" -#: extras/models/customfields.py:240 +#: netbox/extras/models/customfields.py:240 msgid "custom fields" msgstr "カスタムフィールド" -#: extras/models/customfields.py:329 +#: netbox/extras/models/customfields.py:329 #, python-brace-format msgid "Invalid default value \"{value}\": {error}" msgstr "デフォルト値が無効です \"{value}\": {error}" -#: extras/models/customfields.py:336 +#: netbox/extras/models/customfields.py:336 msgid "A minimum value may be set only for numeric fields" msgstr "最小値は数値フィールドにのみ設定できます" -#: extras/models/customfields.py:338 +#: netbox/extras/models/customfields.py:338 msgid "A maximum value may be set only for numeric fields" msgstr "最大値は数値フィールドにのみ設定できます" -#: extras/models/customfields.py:348 +#: netbox/extras/models/customfields.py:348 msgid "" "Regular expression validation is supported only for text and URL fields" msgstr "正規表現の検証は、テキストフィールドと URL フィールドでのみサポートされます。" -#: extras/models/customfields.py:354 +#: netbox/extras/models/customfields.py:354 msgid "Uniqueness cannot be enforced for boolean fields" msgstr "ブーリアン型フィールドには一意性を強制できない" -#: extras/models/customfields.py:364 +#: netbox/extras/models/customfields.py:364 msgid "Selection fields must specify a set of choices." msgstr "選択フィールドには選択肢のセットを指定する必要があります。" -#: extras/models/customfields.py:368 +#: netbox/extras/models/customfields.py:368 msgid "Choices may be set only on selection fields." msgstr "選択肢は選択フィールドにのみ設定できます。" -#: extras/models/customfields.py:375 +#: netbox/extras/models/customfields.py:375 msgid "Object fields must define an object type." msgstr "オブジェクトフィールドはオブジェクトタイプを定義する必要があります。" -#: extras/models/customfields.py:379 +#: netbox/extras/models/customfields.py:379 #, python-brace-format msgid "{type} fields may not define an object type." msgstr "{type} フィールドはオブジェクトタイプを定義できません。" -#: extras/models/customfields.py:386 +#: netbox/extras/models/customfields.py:386 msgid "A related object filter can be defined only for object fields." msgstr "関連オブジェクトフィルターはオブジェクトフィールドにのみ定義できます。" -#: extras/models/customfields.py:390 +#: netbox/extras/models/customfields.py:390 msgid "Filter must be defined as a dictionary mapping attributes to values." msgstr "フィルタは、属性を値にマッピングするディクショナリとして定義する必要があります。" -#: extras/models/customfields.py:469 +#: netbox/extras/models/customfields.py:469 msgid "True" msgstr "真" -#: extras/models/customfields.py:470 +#: netbox/extras/models/customfields.py:470 msgid "False" msgstr "偽" -#: extras/models/customfields.py:560 +#: netbox/extras/models/customfields.py:560 #, python-brace-format msgid "Values must match this regex: {regex}" msgstr "値は次の正規表現とマッチする必要があります。 {regex}" -#: extras/models/customfields.py:654 +#: netbox/extras/models/customfields.py:654 msgid "Value must be a string." msgstr "値は文字列でなければなりません。" -#: extras/models/customfields.py:656 +#: netbox/extras/models/customfields.py:656 #, python-brace-format msgid "Value must match regex '{regex}'" msgstr "値は正規表現 '{regex}'と一致する必要があります" -#: extras/models/customfields.py:661 +#: netbox/extras/models/customfields.py:661 msgid "Value must be an integer." msgstr "値は整数でなければなりません。" -#: extras/models/customfields.py:664 extras/models/customfields.py:679 +#: netbox/extras/models/customfields.py:664 +#: netbox/extras/models/customfields.py:679 #, python-brace-format msgid "Value must be at least {minimum}" msgstr "値は {minimum} 以上でなければなりません" -#: extras/models/customfields.py:668 extras/models/customfields.py:683 +#: netbox/extras/models/customfields.py:668 +#: netbox/extras/models/customfields.py:683 #, python-brace-format msgid "Value must not exceed {maximum}" msgstr "値は {maximum} を超えてはいけません" -#: extras/models/customfields.py:676 +#: netbox/extras/models/customfields.py:676 msgid "Value must be a decimal." msgstr "値は実数でなければなりません。" -#: extras/models/customfields.py:688 +#: netbox/extras/models/customfields.py:688 msgid "Value must be true or false." msgstr "値は true または false でなければなりません。" -#: extras/models/customfields.py:696 +#: netbox/extras/models/customfields.py:696 msgid "Date values must be in ISO 8601 format (YYYY-MM-DD)." msgstr "日付値は ISO 8601 フォーマット (YYYY-MM-DD) である必要があります。" -#: extras/models/customfields.py:705 +#: netbox/extras/models/customfields.py:705 msgid "Date and time values must be in ISO 8601 format (YYYY-MM-DD HH:MM:SS)." msgstr "日付と時刻の値は ISO 8601 フォーマット (YYYY-MM-DD HH:MM:SS) である必要があります。" -#: extras/models/customfields.py:712 +#: netbox/extras/models/customfields.py:712 #, python-brace-format msgid "Invalid choice ({value}) for choice set {choiceset}." msgstr "{value}は選択肢 {choiceset} に含まれていません。" -#: extras/models/customfields.py:722 +#: netbox/extras/models/customfields.py:722 #, python-brace-format msgid "Invalid choice(s) ({value}) for choice set {choiceset}." msgstr "{value}は選択肢 {choiceset} に含まれていません。" -#: extras/models/customfields.py:731 +#: netbox/extras/models/customfields.py:731 #, python-brace-format msgid "Value must be an object ID, not {type}" msgstr "{type}ではなく、オブジェクトIDを指定してください" -#: extras/models/customfields.py:737 +#: netbox/extras/models/customfields.py:737 #, python-brace-format msgid "Value must be a list of object IDs, not {type}" msgstr "{type} ではなくオブジェクト ID のリストを入力してください" -#: extras/models/customfields.py:741 +#: netbox/extras/models/customfields.py:741 #, python-brace-format msgid "Found invalid object ID: {id}" msgstr "無効なオブジェクト ID が見つかりました: {id}" -#: extras/models/customfields.py:744 +#: netbox/extras/models/customfields.py:744 msgid "Required field cannot be empty." msgstr "必須フィールドを空にすることはできません。" -#: extras/models/customfields.py:763 +#: netbox/extras/models/customfields.py:763 msgid "Base set of predefined choices (optional)" msgstr "定義済みの選択肢の基本セット (オプション)" -#: extras/models/customfields.py:775 +#: netbox/extras/models/customfields.py:775 msgid "Choices are automatically ordered alphabetically" msgstr "選択肢は自動的にアルファベット順に並べられます" -#: extras/models/customfields.py:782 +#: netbox/extras/models/customfields.py:782 msgid "custom field choice set" msgstr "カスタムフィールド選択肢" -#: extras/models/customfields.py:783 +#: netbox/extras/models/customfields.py:783 msgid "custom field choice sets" msgstr "カスタムフィールド選択肢" -#: extras/models/customfields.py:825 +#: netbox/extras/models/customfields.py:825 msgid "Must define base or extra choices." msgstr "基本選択肢または追加選択肢を定義する必要があります。" -#: extras/models/customfields.py:849 +#: netbox/extras/models/customfields.py:849 #, python-brace-format msgid "" "Cannot remove choice {choice} as there are {model} objects which reference " "it." msgstr "選択肢を削除できません {choice} あるように {model} それを参照するオブジェクト。" -#: extras/models/dashboard.py:18 +#: netbox/extras/models/dashboard.py:18 msgid "layout" msgstr "レイアウト" -#: extras/models/dashboard.py:22 +#: netbox/extras/models/dashboard.py:22 msgid "config" msgstr "設定" -#: extras/models/dashboard.py:27 +#: netbox/extras/models/dashboard.py:27 msgid "dashboard" msgstr "ダッシュボード" -#: extras/models/dashboard.py:28 +#: netbox/extras/models/dashboard.py:28 msgid "dashboards" msgstr "ダッシュボード" -#: extras/models/models.py:52 +#: netbox/extras/models/models.py:52 msgid "object types" msgstr "オブジェクトタイプ" -#: extras/models/models.py:53 +#: netbox/extras/models/models.py:53 msgid "The object(s) to which this rule applies." msgstr "このルールが適用されるオブジェクト。" -#: extras/models/models.py:67 +#: netbox/extras/models/models.py:67 msgid "The types of event which will trigger this rule." msgstr "このルールをトリガーするイベントのタイプ。" -#: extras/models/models.py:74 +#: netbox/extras/models/models.py:74 msgid "conditions" msgstr "条件" -#: extras/models/models.py:77 +#: netbox/extras/models/models.py:77 msgid "" "A set of conditions which determine whether the event will be generated." msgstr "イベントを生成するかどうかを決定する一連の条件。" -#: extras/models/models.py:85 +#: netbox/extras/models/models.py:85 msgid "action type" msgstr "アクションタイプ" -#: extras/models/models.py:104 +#: netbox/extras/models/models.py:104 msgid "Additional data to pass to the action object" msgstr "アクションオブジェクトに渡す追加データ" -#: extras/models/models.py:116 +#: netbox/extras/models/models.py:116 msgid "event rule" msgstr "イベントルール" -#: extras/models/models.py:117 +#: netbox/extras/models/models.py:117 msgid "event rules" msgstr "イベントルール" -#: extras/models/models.py:166 +#: netbox/extras/models/models.py:166 msgid "" "This URL will be called using the HTTP method defined when the webhook is " "called. Jinja2 template processing is supported with the same context as the" @@ -7869,7 +8463,7 @@ msgstr "" "この URL は、Webhook が呼び出されたときに定義された HTTP メソッドを使用して呼び出されます。Jinja2 " "テンプレート処理はリクエストボディと同じコンテキストでサポートされています。" -#: extras/models/models.py:181 +#: netbox/extras/models/models.py:181 msgid "" "The complete list of official content types is available ここに。" -#: extras/models/models.py:186 +#: netbox/extras/models/models.py:186 msgid "additional headers" msgstr "追加ヘッダー" -#: extras/models/models.py:189 +#: netbox/extras/models/models.py:189 msgid "" "User-supplied HTTP headers to be sent with the request in addition to the " "HTTP content type. Headers should be defined in the format Name: " @@ -7892,11 +8486,11 @@ msgstr "" "HTTP コンテンツタイプに加えて、リクエストとともに送信されるユーザ指定の HTTP ヘッダー。ヘッダーは次の形式で定義する必要があります。 " "名前:値。Jinja2 テンプレート処理はリクエストボディ (下記) と同じコンテキストでサポートされています。" -#: extras/models/models.py:195 +#: netbox/extras/models/models.py:195 msgid "body template" msgstr "ボディテンプレート" -#: extras/models/models.py:198 +#: netbox/extras/models/models.py:198 msgid "" "Jinja2 template for a custom request body. If blank, a JSON object " "representing the change will be included. Available context data includes: " @@ -7908,11 +8502,11 @@ msgstr "" "model, timestamp, username, " "request_id, and data." -#: extras/models/models.py:204 +#: netbox/extras/models/models.py:204 msgid "secret" msgstr "シークレット" -#: extras/models/models.py:208 +#: netbox/extras/models/models.py:208 msgid "" "When provided, the request will include a X-Hook-Signature " "header containing a HMAC hex digest of the payload body using the secret as " @@ -7921,77 +8515,77 @@ msgstr "" "提供された場合、リクエストにはシークレットをキーとして使用したペイロード本体のHMAC 16 進ダイジェストを含むX-Hook-" "Signature ヘッダー が含まれます 。シークレットはリクエストでは送信されません。" -#: extras/models/models.py:215 +#: netbox/extras/models/models.py:215 msgid "Enable SSL certificate verification. Disable with caution!" msgstr "SSL 証明書検証を有効にします。注意して無効にしてください。" -#: extras/models/models.py:221 templates/extras/webhook.html:51 +#: netbox/extras/models/models.py:221 netbox/templates/extras/webhook.html:51 msgid "CA File Path" msgstr "CA ファイルパス" -#: extras/models/models.py:223 +#: netbox/extras/models/models.py:223 msgid "" "The specific CA certificate file to use for SSL verification. Leave blank to" " use the system defaults." msgstr "SSL 検証に使用する特定の CA 証明書ファイル。システムデフォルトを使用するには空白のままにしておきます。" -#: extras/models/models.py:234 +#: netbox/extras/models/models.py:234 msgid "webhook" msgstr "ウェブフック" -#: extras/models/models.py:235 +#: netbox/extras/models/models.py:235 msgid "webhooks" msgstr "ウェブフック" -#: extras/models/models.py:253 +#: netbox/extras/models/models.py:253 msgid "Do not specify a CA certificate file if SSL verification is disabled." msgstr "SSL 検証が無効になっている場合は、CA 証明書ファイルを指定しないでください。" -#: extras/models/models.py:293 +#: netbox/extras/models/models.py:293 msgid "The object type(s) to which this link applies." msgstr "このリンクが適用されるオブジェクトタイプ。" -#: extras/models/models.py:305 +#: netbox/extras/models/models.py:305 msgid "link text" msgstr "リンクテキスト" -#: extras/models/models.py:306 +#: netbox/extras/models/models.py:306 msgid "Jinja2 template code for link text" msgstr "リンクテキストの Jinja2 テンプレートコード" -#: extras/models/models.py:309 +#: netbox/extras/models/models.py:309 msgid "link URL" msgstr "リンク URL" -#: extras/models/models.py:310 +#: netbox/extras/models/models.py:310 msgid "Jinja2 template code for link URL" msgstr "リンク URL の Jinja2 テンプレートコード" -#: extras/models/models.py:320 +#: netbox/extras/models/models.py:320 msgid "Links with the same group will appear as a dropdown menu" msgstr "同じグループのリンクはドロップダウンメニューとして表示されます" -#: extras/models/models.py:330 +#: netbox/extras/models/models.py:330 msgid "new window" msgstr "新しいウィンドウ" -#: extras/models/models.py:332 +#: netbox/extras/models/models.py:332 msgid "Force link to open in a new window" msgstr "リンクを強制的に新しいウィンドウで開く" -#: extras/models/models.py:341 +#: netbox/extras/models/models.py:341 msgid "custom link" msgstr "カスタムリンク" -#: extras/models/models.py:342 +#: netbox/extras/models/models.py:342 msgid "custom links" msgstr "カスタムリンク" -#: extras/models/models.py:389 +#: netbox/extras/models/models.py:389 msgid "The object type(s) to which this template applies." msgstr "このテンプレートが適用されるオブジェクトタイプ。" -#: extras/models/models.py:402 +#: netbox/extras/models/models.py:402 msgid "" "Jinja2 template code. The list of objects being exported is passed as a " "context variable named queryset." @@ -7999,2391 +8593,2504 @@ msgstr "" "Jinja2 テンプレートコード。エクスポートされるオブジェクトのリストは、 " "クエリーセットという名前のコンテキスト変数として渡されます。" -#: extras/models/models.py:410 +#: netbox/extras/models/models.py:410 msgid "Defaults to text/plain; charset=utf-8" msgstr "デフォルトは text/plain; charset=utf-8" -#: extras/models/models.py:413 +#: netbox/extras/models/models.py:413 msgid "file extension" msgstr "ファイル拡張子" -#: extras/models/models.py:416 +#: netbox/extras/models/models.py:416 msgid "Extension to append to the rendered filename" msgstr "レンダリングされたファイル名に追加する拡張子" -#: extras/models/models.py:419 +#: netbox/extras/models/models.py:419 msgid "as attachment" msgstr "添付ファイルとして" -#: extras/models/models.py:421 +#: netbox/extras/models/models.py:421 msgid "Download file as attachment" msgstr "ファイルを直接ダウンロードする" -#: extras/models/models.py:430 +#: netbox/extras/models/models.py:430 msgid "export template" msgstr "エクスポートテンプレート" -#: extras/models/models.py:431 +#: netbox/extras/models/models.py:431 msgid "export templates" msgstr "エクスポートテンプレート" -#: extras/models/models.py:448 +#: netbox/extras/models/models.py:448 #, python-brace-format msgid "\"{name}\" is a reserved name. Please choose a different name." msgstr "\"{name}\"は予約されています。別の名前を選択してください。" -#: extras/models/models.py:498 +#: netbox/extras/models/models.py:498 msgid "The object type(s) to which this filter applies." msgstr "このフィルタが適用されるオブジェクトタイプ。" -#: extras/models/models.py:530 +#: netbox/extras/models/models.py:530 msgid "shared" msgstr "共有した" -#: extras/models/models.py:543 +#: netbox/extras/models/models.py:543 msgid "saved filter" msgstr "保存済みフィルタ" -#: extras/models/models.py:544 +#: netbox/extras/models/models.py:544 msgid "saved filters" msgstr "保存済みフィルタ" -#: extras/models/models.py:562 +#: netbox/extras/models/models.py:562 msgid "Filter parameters must be stored as a dictionary of keyword arguments." msgstr "フィルタパラメータは、キーワード引数の辞書として保存する必要があります。" -#: extras/models/models.py:590 +#: netbox/extras/models/models.py:590 msgid "image height" msgstr "画像高さ" -#: extras/models/models.py:593 +#: netbox/extras/models/models.py:593 msgid "image width" msgstr "画像幅" -#: extras/models/models.py:610 +#: netbox/extras/models/models.py:610 msgid "image attachment" msgstr "添付画像" -#: extras/models/models.py:611 +#: netbox/extras/models/models.py:611 msgid "image attachments" msgstr "添付画像" -#: extras/models/models.py:625 +#: netbox/extras/models/models.py:625 #, python-brace-format msgid "Image attachments cannot be assigned to this object type ({type})." msgstr "このオブジェクトタイプ ({type})には添付画像を割り当てることができません。" -#: extras/models/models.py:688 +#: netbox/extras/models/models.py:688 msgid "kind" msgstr "種類" -#: extras/models/models.py:702 +#: netbox/extras/models/models.py:702 msgid "journal entry" msgstr "ジャーナルエントリ" -#: extras/models/models.py:703 +#: netbox/extras/models/models.py:703 msgid "journal entries" msgstr "ジャーナルエントリ" -#: extras/models/models.py:718 +#: netbox/extras/models/models.py:718 #, python-brace-format msgid "Journaling is not supported for this object type ({type})." msgstr "このオブジェクトタイプ({type})ではジャーナリングはサポートされていません 。" -#: extras/models/models.py:760 +#: netbox/extras/models/models.py:760 msgid "bookmark" msgstr "ブックマーク" -#: extras/models/models.py:761 +#: netbox/extras/models/models.py:761 msgid "bookmarks" msgstr "ブックマーク" -#: extras/models/models.py:774 +#: netbox/extras/models/models.py:774 #, python-brace-format msgid "Bookmarks cannot be assigned to this object type ({type})." msgstr "このオブジェクトタイプ ({type})にはブックマークを割り当てられません。" -#: extras/models/notifications.py:43 +#: netbox/extras/models/notifications.py:43 msgid "read" msgstr "読む" -#: extras/models/notifications.py:66 +#: netbox/extras/models/notifications.py:66 msgid "event" msgstr "出来事" -#: extras/models/notifications.py:84 +#: netbox/extras/models/notifications.py:84 msgid "notification" msgstr "通知" -#: extras/models/notifications.py:85 +#: netbox/extras/models/notifications.py:85 msgid "notifications" msgstr "通知" -#: extras/models/notifications.py:99 extras/models/notifications.py:234 +#: netbox/extras/models/notifications.py:99 +#: netbox/extras/models/notifications.py:234 #, python-brace-format msgid "Objects of this type ({type}) do not support notifications." msgstr "このタイプのオブジェクト ({type}) 通知はサポートしていません。" -#: extras/models/notifications.py:137 users/models/users.py:58 -#: users/models/users.py:77 +#: netbox/extras/models/notifications.py:137 netbox/users/models/users.py:58 +#: netbox/users/models/users.py:77 msgid "groups" msgstr "グループ" -#: extras/models/notifications.py:143 users/models/users.py:93 +#: netbox/extras/models/notifications.py:143 netbox/users/models/users.py:93 msgid "users" msgstr "ユーザ" -#: extras/models/notifications.py:152 +#: netbox/extras/models/notifications.py:152 msgid "notification group" msgstr "通知グループ" -#: extras/models/notifications.py:153 +#: netbox/extras/models/notifications.py:153 msgid "notification groups" msgstr "通知グループ" -#: extras/models/notifications.py:217 +#: netbox/extras/models/notifications.py:217 msgid "subscription" msgstr "サブスクリプション" -#: extras/models/notifications.py:218 +#: netbox/extras/models/notifications.py:218 msgid "subscriptions" msgstr "サブスクリプション" -#: extras/models/scripts.py:42 +#: netbox/extras/models/scripts.py:42 msgid "is executable" msgstr "実行可能" -#: extras/models/scripts.py:64 +#: netbox/extras/models/scripts.py:64 msgid "script" msgstr "スクリプト" -#: extras/models/scripts.py:65 +#: netbox/extras/models/scripts.py:65 msgid "scripts" msgstr "スクリプト" -#: extras/models/scripts.py:111 +#: netbox/extras/models/scripts.py:111 msgid "script module" msgstr "スクリプトモジュール" -#: extras/models/scripts.py:112 +#: netbox/extras/models/scripts.py:112 msgid "script modules" msgstr "スクリプトモジュール" -#: extras/models/search.py:22 +#: netbox/extras/models/search.py:22 msgid "timestamp" msgstr "タイムスタンプ" -#: extras/models/search.py:37 +#: netbox/extras/models/search.py:37 msgid "field" msgstr "フィールド" -#: extras/models/search.py:45 +#: netbox/extras/models/search.py:45 msgid "value" msgstr "値" -#: extras/models/search.py:56 +#: netbox/extras/models/search.py:56 msgid "cached value" msgstr "キャッシュ値" -#: extras/models/search.py:57 +#: netbox/extras/models/search.py:57 msgid "cached values" msgstr "キャッシュ値" -#: extras/models/staging.py:44 +#: netbox/extras/models/staging.py:44 msgid "branch" msgstr "ブランチ" -#: extras/models/staging.py:45 +#: netbox/extras/models/staging.py:45 msgid "branches" msgstr "ブランチ" -#: extras/models/staging.py:97 +#: netbox/extras/models/staging.py:97 msgid "staged change" msgstr "段階的変更" -#: extras/models/staging.py:98 +#: netbox/extras/models/staging.py:98 msgid "staged changes" msgstr "段階的変更" -#: extras/models/tags.py:40 +#: netbox/extras/models/tags.py:40 msgid "The object type(s) to which this tag can be applied." msgstr "このタグを適用できるオブジェクトタイプ。" -#: extras/models/tags.py:49 +#: netbox/extras/models/tags.py:49 msgid "tag" msgstr "タグ" -#: extras/models/tags.py:50 +#: netbox/extras/models/tags.py:50 msgid "tags" msgstr "タグ" -#: extras/models/tags.py:78 +#: netbox/extras/models/tags.py:78 msgid "tagged item" msgstr "タグ付きアイテム" -#: extras/models/tags.py:79 +#: netbox/extras/models/tags.py:79 msgid "tagged items" msgstr "タグ付きアイテム" -#: extras/scripts.py:429 +#: netbox/extras/scripts.py:429 msgid "Script Data" msgstr "スクリプトデータ" -#: extras/scripts.py:433 +#: netbox/extras/scripts.py:433 msgid "Script Execution Parameters" msgstr "スクリプト実行パラメータ" -#: extras/tables/columns.py:12 templates/htmx/notifications.html:18 +#: netbox/extras/tables/columns.py:12 +#: netbox/templates/htmx/notifications.html:18 msgid "Dismiss" msgstr "却下" -#: extras/tables/tables.py:62 extras/tables/tables.py:159 -#: extras/tables/tables.py:184 extras/tables/tables.py:250 -#: extras/tables/tables.py:276 extras/tables/tables.py:412 -#: extras/tables/tables.py:446 templates/extras/customfield.html:105 -#: templates/extras/eventrule.html:27 templates/users/objectpermission.html:64 -#: users/tables.py:80 +#: netbox/extras/tables/tables.py:62 netbox/extras/tables/tables.py:159 +#: netbox/extras/tables/tables.py:184 netbox/extras/tables/tables.py:250 +#: netbox/extras/tables/tables.py:276 netbox/extras/tables/tables.py:412 +#: netbox/extras/tables/tables.py:446 +#: netbox/templates/extras/customfield.html:105 +#: netbox/templates/extras/eventrule.html:27 +#: netbox/templates/users/objectpermission.html:64 netbox/users/tables.py:80 msgid "Object Types" msgstr "オブジェクトタイプ" -#: extras/tables/tables.py:69 +#: netbox/extras/tables/tables.py:69 msgid "Validate Uniqueness" msgstr "一意性を検証" -#: extras/tables/tables.py:73 +#: netbox/extras/tables/tables.py:73 msgid "Visible" msgstr "可視" -#: extras/tables/tables.py:76 +#: netbox/extras/tables/tables.py:76 msgid "Editable" msgstr "編集可能" -#: extras/tables/tables.py:82 +#: netbox/extras/tables/tables.py:82 msgid "Related Object Type" msgstr "関連オブジェクトタイプ" -#: extras/tables/tables.py:86 templates/extras/customfield.html:51 +#: netbox/extras/tables/tables.py:86 +#: netbox/templates/extras/customfield.html:51 msgid "Choice Set" msgstr "チョイスセット" -#: extras/tables/tables.py:94 +#: netbox/extras/tables/tables.py:94 msgid "Is Cloneable" msgstr "複製可能" -#: extras/tables/tables.py:98 templates/extras/customfield.html:118 +#: netbox/extras/tables/tables.py:98 +#: netbox/templates/extras/customfield.html:118 msgid "Minimum Value" msgstr "最小値" -#: extras/tables/tables.py:101 templates/extras/customfield.html:122 +#: netbox/extras/tables/tables.py:101 +#: netbox/templates/extras/customfield.html:122 msgid "Maximum Value" msgstr "最大値" -#: extras/tables/tables.py:104 +#: netbox/extras/tables/tables.py:104 msgid "Validation Regex" msgstr "検証正規表現" -#: extras/tables/tables.py:137 +#: netbox/extras/tables/tables.py:137 msgid "Count" msgstr "カウント" -#: extras/tables/tables.py:140 +#: netbox/extras/tables/tables.py:140 msgid "Order Alphabetically" msgstr "アルファベット順に並べる" -#: extras/tables/tables.py:165 templates/extras/customlink.html:33 +#: netbox/extras/tables/tables.py:165 +#: netbox/templates/extras/customlink.html:33 msgid "New Window" msgstr "新規ウィンドウ" -#: extras/tables/tables.py:187 +#: netbox/extras/tables/tables.py:187 msgid "As Attachment" msgstr "添付ファイルとして" -#: extras/tables/tables.py:195 extras/tables/tables.py:487 -#: extras/tables/tables.py:522 templates/core/datafile.html:24 -#: templates/dcim/device/render_config.html:22 -#: templates/extras/configcontext.html:39 -#: templates/extras/configtemplate.html:31 -#: templates/extras/exporttemplate.html:45 -#: templates/generic/bulk_import.html:35 -#: templates/virtualization/virtualmachine/render_config.html:22 +#: netbox/extras/tables/tables.py: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/generic/bulk_import.html:35 +#: netbox/templates/virtualization/virtualmachine/render_config.html:22 msgid "Data File" msgstr "データファイル" -#: extras/tables/tables.py:200 extras/tables/tables.py:499 -#: extras/tables/tables.py:527 +#: netbox/extras/tables/tables.py:200 netbox/extras/tables/tables.py:499 +#: netbox/extras/tables/tables.py:527 msgid "Synced" msgstr "同期済み" -#: extras/tables/tables.py:227 +#: netbox/extras/tables/tables.py:227 msgid "Image" msgstr "画像" -#: extras/tables/tables.py:232 +#: netbox/extras/tables/tables.py:232 msgid "Size (Bytes)" msgstr "サイズ (バイト)" -#: extras/tables/tables.py:339 +#: netbox/extras/tables/tables.py:339 msgid "Read" msgstr "読む" -#: extras/tables/tables.py:382 +#: netbox/extras/tables/tables.py:382 msgid "SSL Validation" msgstr "SSL バリデーション" -#: extras/tables/tables.py:418 templates/extras/eventrule.html:37 +#: netbox/extras/tables/tables.py:418 +#: netbox/templates/extras/eventrule.html:37 msgid "Event Types" msgstr "イベントタイプ" -#: extras/tables/tables.py:535 netbox/navigation/menu.py:77 -#: templates/dcim/devicerole.html:8 +#: netbox/extras/tables/tables.py:535 netbox/netbox/navigation/menu.py:77 +#: netbox/templates/dcim/devicerole.html:8 msgid "Device Roles" msgstr "デバイスロール" -#: extras/tables/tables.py:587 +#: netbox/extras/tables/tables.py:587 msgid "Comments (Short)" msgstr "コメント (ショート)" -#: extras/tables/tables.py:606 extras/tables/tables.py:640 +#: netbox/extras/tables/tables.py:606 netbox/extras/tables/tables.py:640 msgid "Line" msgstr "ライン" -#: extras/tables/tables.py:613 extras/tables/tables.py:650 +#: netbox/extras/tables/tables.py:613 netbox/extras/tables/tables.py:650 msgid "Level" msgstr "レベル" -#: extras/tables/tables.py:619 extras/tables/tables.py:659 +#: netbox/extras/tables/tables.py:619 netbox/extras/tables/tables.py:659 msgid "Message" msgstr "メッセージ" -#: extras/tables/tables.py:643 +#: netbox/extras/tables/tables.py:643 msgid "Method" msgstr "メソッド" -#: extras/validators.py:15 +#: netbox/extras/validators.py:15 #, python-format msgid "Ensure this value is equal to %(limit_value)s." msgstr "%(limit_value)sと等しいことを確認する 。" -#: extras/validators.py:26 +#: netbox/extras/validators.py:26 #, python-format msgid "Ensure this value does not equal %(limit_value)s." msgstr "%(limit_value)sと等しくないことを確認する。" -#: extras/validators.py:37 +#: netbox/extras/validators.py:37 msgid "This field must be empty." msgstr "このフィールドは空でなければなりません。" -#: extras/validators.py:52 +#: netbox/extras/validators.py:52 msgid "This field must not be empty." msgstr "このフィールドは空であってはなりません。" -#: extras/validators.py:94 +#: netbox/extras/validators.py:94 msgid "Validation rules must be passed as a dictionary" msgstr "検証ルールはディクショナリとして渡さなければなりません" -#: extras/validators.py:119 +#: netbox/extras/validators.py:119 #, python-brace-format msgid "Custom validation failed for {attribute}: {exception}" msgstr "のカスタム検証が失敗しました {attribute}: {exception}" -#: extras/validators.py:133 +#: netbox/extras/validators.py:133 #, python-brace-format msgid "Invalid attribute \"{name}\" for request" msgstr "属性が無効です」{name}「」(リクエスト用)" -#: extras/validators.py:150 +#: netbox/extras/validators.py:150 #, python-brace-format msgid "Invalid attribute \"{name}\" for {model}" msgstr "{model}において{name}属性は無効です" -#: extras/views.py:960 +#: netbox/extras/views.py:960 msgid "Your dashboard has been reset." msgstr "ダッシュボードがリセットされました。" -#: extras/views.py:1006 +#: netbox/extras/views.py:1006 msgid "Added widget: " msgstr "ウィジェットの追加: " -#: extras/views.py:1047 +#: netbox/extras/views.py:1047 msgid "Updated widget: " msgstr "ウィジェットの更新: " -#: extras/views.py:1083 +#: netbox/extras/views.py:1083 msgid "Deleted widget: " msgstr "削除したウィジェット: " -#: extras/views.py:1085 +#: netbox/extras/views.py:1085 msgid "Error deleting widget: " msgstr "ウィジェットの削除中にエラーが発生しました: " -#: extras/views.py:1172 +#: netbox/extras/views.py:1175 msgid "Unable to run script: RQ worker process not running." msgstr "スクリプトを実行できません:RQ ワーカープロセスが実行されていません。" -#: ipam/api/field_serializers.py:17 +#: netbox/ipam/api/field_serializers.py:17 msgid "Enter a valid IPv4 or IPv6 address with optional mask." msgstr "有効な IPv4 または IPv6 アドレスを入力してください。(サブネットマスクが使用可能)" -#: ipam/api/field_serializers.py:24 +#: netbox/ipam/api/field_serializers.py:24 #, python-brace-format msgid "Invalid IP address format: {data}" msgstr "IP アドレス形式が無効です: {data}" -#: ipam/api/field_serializers.py:37 +#: netbox/ipam/api/field_serializers.py:37 msgid "Enter a valid IPv4 or IPv6 prefix and mask in CIDR notation." msgstr "有効な IPv4 または IPv6 プレフィックスとマスクを CIDR 表記で入力します。" -#: ipam/api/field_serializers.py:44 +#: netbox/ipam/api/field_serializers.py:44 #, python-brace-format msgid "Invalid IP prefix format: {data}" msgstr "IP プレフィックス形式が無効です: {data}" -#: ipam/api/views.py:358 +#: netbox/ipam/api/views.py:358 msgid "" "Insufficient space is available to accommodate the requested prefix size(s)" msgstr "要求されたプレフィックスサイズを収容するにはスペースが足りません" -#: ipam/choices.py:30 +#: netbox/ipam/choices.py:30 msgid "Container" msgstr "コンテナ" -#: ipam/choices.py:72 +#: netbox/ipam/choices.py:72 msgid "DHCP" msgstr "DHCP" -#: ipam/choices.py:73 +#: netbox/ipam/choices.py:73 msgid "SLAAC" msgstr "SLAAC" -#: ipam/choices.py:89 +#: netbox/ipam/choices.py:89 msgid "Loopback" msgstr "ループバック" -#: ipam/choices.py:91 +#: netbox/ipam/choices.py:91 msgid "Anycast" msgstr "エニーキャスト" -#: ipam/choices.py:115 +#: netbox/ipam/choices.py:115 msgid "Standard" msgstr "スタンダード" -#: ipam/choices.py:120 +#: netbox/ipam/choices.py:120 msgid "CheckPoint" msgstr "チェックポイント" -#: ipam/choices.py:123 +#: netbox/ipam/choices.py:123 msgid "Cisco" msgstr "シスコ" -#: ipam/choices.py:137 +#: netbox/ipam/choices.py:137 msgid "Plaintext" msgstr "プレーンテキスト" -#: ipam/fields.py:36 +#: netbox/ipam/fields.py:36 #, python-brace-format msgid "Invalid IP address format: {address}" msgstr "IP アドレス形式が無効です: {address}" -#: ipam/filtersets.py:48 vpn/filtersets.py:304 +#: netbox/ipam/filtersets.py:48 netbox/vpn/filtersets.py:304 msgid "Import target" msgstr "インポート対象" -#: ipam/filtersets.py:54 vpn/filtersets.py:310 +#: netbox/ipam/filtersets.py:54 netbox/vpn/filtersets.py:310 msgid "Import target (name)" msgstr "インポート対象 (名前)" -#: ipam/filtersets.py:59 vpn/filtersets.py:315 +#: netbox/ipam/filtersets.py:59 netbox/vpn/filtersets.py:315 msgid "Export target" msgstr "エクスポート対象" -#: ipam/filtersets.py:65 vpn/filtersets.py:321 +#: netbox/ipam/filtersets.py:65 netbox/vpn/filtersets.py:321 msgid "Export target (name)" msgstr "エクスポート対象 (名前)" -#: ipam/filtersets.py:86 +#: netbox/ipam/filtersets.py:86 msgid "Importing VRF" msgstr "VRF のインポート" -#: ipam/filtersets.py:92 +#: netbox/ipam/filtersets.py:92 msgid "Import VRF (RD)" msgstr "VRF (RD) をインポート" -#: ipam/filtersets.py:97 +#: netbox/ipam/filtersets.py:97 msgid "Exporting VRF" msgstr "VRF のエクスポート" -#: ipam/filtersets.py:103 +#: netbox/ipam/filtersets.py:103 msgid "Export VRF (RD)" msgstr "VRF (RD) をエクスポート" -#: ipam/filtersets.py:108 +#: netbox/ipam/filtersets.py:108 msgid "Importing L2VPN" msgstr "L2VPN のインポート" -#: ipam/filtersets.py:114 +#: netbox/ipam/filtersets.py:114 msgid "Importing L2VPN (identifier)" msgstr "L2VPN (識別子) のインポート" -#: ipam/filtersets.py:119 +#: netbox/ipam/filtersets.py:119 msgid "Exporting L2VPN" msgstr "L2VPN のエクスポート" -#: ipam/filtersets.py:125 +#: netbox/ipam/filtersets.py:125 msgid "Exporting L2VPN (identifier)" msgstr "L2VPN (識別子) のエクスポート" -#: ipam/filtersets.py:155 ipam/filtersets.py:281 ipam/forms/model_forms.py:229 -#: ipam/tables/ip.py:212 templates/ipam/prefix.html:12 +#: 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 "プレフィックス" -#: ipam/filtersets.py:159 ipam/filtersets.py:198 ipam/filtersets.py:221 +#: netbox/ipam/filtersets.py:159 netbox/ipam/filtersets.py:198 +#: netbox/ipam/filtersets.py:223 msgid "RIR (ID)" msgstr "RIR (ID)" -#: ipam/filtersets.py:165 ipam/filtersets.py:204 ipam/filtersets.py:227 +#: netbox/ipam/filtersets.py:165 netbox/ipam/filtersets.py:204 +#: netbox/ipam/filtersets.py:229 msgid "RIR (slug)" msgstr "RIR (slug)" -#: ipam/filtersets.py:285 +#: netbox/ipam/filtersets.py:287 msgid "Within prefix" msgstr "プレフィックス内" -#: ipam/filtersets.py:289 +#: netbox/ipam/filtersets.py:291 msgid "Within and including prefix" msgstr "プレフィックス内およびプレフィックスを含む" -#: ipam/filtersets.py:293 +#: netbox/ipam/filtersets.py:295 msgid "Prefixes which contain this prefix or IP" msgstr "このプレフィックス / IP を含むプレフィックス" -#: ipam/filtersets.py:304 ipam/filtersets.py:572 ipam/forms/bulk_edit.py:343 -#: ipam/forms/filtersets.py:196 ipam/forms/filtersets.py:331 +#: 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 "マスクの長さ" -#: ipam/filtersets.py:373 vpn/filtersets.py:427 +#: netbox/ipam/filtersets.py:375 netbox/vpn/filtersets.py:427 msgid "VLAN (ID)" msgstr "VLAN (ID)" -#: ipam/filtersets.py:377 vpn/filtersets.py:422 +#: netbox/ipam/filtersets.py:379 netbox/vpn/filtersets.py:422 msgid "VLAN number (1-4094)" msgstr "VLAN 番号 (1-4094)" -#: ipam/filtersets.py:471 ipam/filtersets.py:475 ipam/filtersets.py:567 -#: ipam/forms/model_forms.py:463 templates/tenancy/contact.html:53 -#: tenancy/forms/bulk_edit.py:113 +#: 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 "アドレス" -#: ipam/filtersets.py:479 +#: netbox/ipam/filtersets.py:481 msgid "Ranges which contain this prefix or IP" msgstr "このプレフィックス / IP を含む範囲" -#: ipam/filtersets.py:507 ipam/filtersets.py:563 +#: netbox/ipam/filtersets.py:509 netbox/ipam/filtersets.py:565 msgid "Parent prefix" msgstr "親プレフィックス" -#: ipam/filtersets.py:616 ipam/filtersets.py:856 ipam/filtersets.py:1131 -#: 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 "仮想マシン (名前)" -#: ipam/filtersets.py:621 ipam/filtersets.py:861 ipam/filtersets.py:1125 -#: virtualization/filtersets.py:282 virtualization/filtersets.py:321 -#: vpn/filtersets.py:390 +#: 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)" -#: ipam/filtersets.py:627 vpn/filtersets.py:97 vpn/filtersets.py:396 +#: netbox/ipam/filtersets.py:629 netbox/vpn/filtersets.py:97 +#: netbox/vpn/filtersets.py:396 msgid "Interface (name)" msgstr "インタフェース (名前)" -#: ipam/filtersets.py:638 vpn/filtersets.py:108 vpn/filtersets.py:407 +#: netbox/ipam/filtersets.py:640 netbox/vpn/filtersets.py:108 +#: netbox/vpn/filtersets.py:407 msgid "VM interface (name)" msgstr "VM インタフェース (名前)" -#: ipam/filtersets.py:643 vpn/filtersets.py:113 +#: netbox/ipam/filtersets.py:645 netbox/vpn/filtersets.py:113 msgid "VM interface (ID)" msgstr "VM インタフェース (ID)" -#: ipam/filtersets.py:648 +#: netbox/ipam/filtersets.py:650 msgid "FHRP group (ID)" msgstr "FHRP グループ (ID)" -#: ipam/filtersets.py:652 +#: netbox/ipam/filtersets.py:654 msgid "Is assigned to an interface" msgstr "インタフェースに割り当てられているか" -#: ipam/filtersets.py:656 +#: netbox/ipam/filtersets.py:658 msgid "Is assigned" msgstr "割当済みか" -#: ipam/filtersets.py:668 +#: netbox/ipam/filtersets.py:670 msgid "Service (ID)" msgstr "サービス (ID)" -#: ipam/filtersets.py:673 +#: netbox/ipam/filtersets.py:675 msgid "NAT inside IP address (ID)" msgstr "NAT 内部の IP アドレス (ID)" -#: ipam/filtersets.py:1041 ipam/forms/bulk_import.py:322 +#: netbox/ipam/filtersets.py:1043 netbox/ipam/forms/bulk_import.py:322 msgid "Assigned interface" msgstr "割当インタフェース" -#: ipam/filtersets.py:1046 +#: netbox/ipam/filtersets.py:1048 msgid "Assigned VM interface" msgstr "割り当てられた VM インターフェイス" -#: ipam/filtersets.py:1136 +#: netbox/ipam/filtersets.py:1138 msgid "IP address (ID)" msgstr "IP アドレス (ID)" -#: ipam/filtersets.py:1142 ipam/models/ip.py:788 +#: netbox/ipam/filtersets.py:1144 netbox/ipam/models/ip.py:788 msgid "IP address" msgstr "IP アドレス" -#: ipam/filtersets.py:1167 +#: netbox/ipam/filtersets.py:1169 msgid "Primary IPv4 (ID)" msgstr "プライマリ IPv4 (ID)" -#: ipam/filtersets.py:1172 +#: netbox/ipam/filtersets.py:1174 msgid "Primary IPv6 (ID)" msgstr "プライマリ IPv6 (ID)" -#: ipam/formfields.py:14 +#: netbox/ipam/formfields.py:14 msgid "Enter a valid IPv4 or IPv6 address (without a mask)." msgstr "有効な IPv4 または IPv6 アドレス (マスクなし) を入力します。" -#: ipam/formfields.py:32 +#: netbox/ipam/formfields.py:32 #, python-brace-format msgid "Invalid IPv4/IPv6 address format: {address}" msgstr "IPv4/IPv6 アドレスの形式が無効です: {address}" -#: ipam/formfields.py:37 +#: netbox/ipam/formfields.py:37 msgid "This field requires an IP address without a mask." msgstr "このフィールドには、マスクなしの IP アドレスが必要です。" -#: ipam/formfields.py:39 ipam/formfields.py:61 +#: netbox/ipam/formfields.py:39 netbox/ipam/formfields.py:61 msgid "Please specify a valid IPv4 or IPv6 address." msgstr "有効な IPv4 または IPv6 アドレスを指定してください。" -#: ipam/formfields.py:44 +#: netbox/ipam/formfields.py:44 msgid "Enter a valid IPv4 or IPv6 address (with CIDR mask)." msgstr "有効な IPv4 または IPv6 アドレス (CIDR マスク付き) を入力します。" -#: ipam/formfields.py:56 +#: netbox/ipam/formfields.py:56 msgid "CIDR mask (e.g. /24) is required." msgstr "CIDR マスク (例:/24) が必要です。" -#: ipam/forms/bulk_create.py:13 +#: netbox/ipam/forms/bulk_create.py:13 msgid "Address pattern" msgstr "アドレスパターン" -#: ipam/forms/bulk_edit.py:50 +#: netbox/ipam/forms/bulk_edit.py:50 msgid "Enforce unique space" msgstr "重複を禁止する" -#: ipam/forms/bulk_edit.py:88 +#: netbox/ipam/forms/bulk_edit.py:88 msgid "Is private" msgstr "非公開です" -#: ipam/forms/bulk_edit.py:109 ipam/forms/bulk_edit.py:138 -#: ipam/forms/bulk_edit.py:163 ipam/forms/bulk_import.py:89 -#: ipam/forms/bulk_import.py:109 ipam/forms/bulk_import.py:129 -#: ipam/forms/filtersets.py:110 ipam/forms/filtersets.py:125 -#: ipam/forms/filtersets.py:148 ipam/forms/model_forms.py:96 -#: ipam/forms/model_forms.py:109 ipam/forms/model_forms.py:131 -#: ipam/forms/model_forms.py:149 ipam/models/asns.py:31 -#: ipam/models/asns.py:103 ipam/models/ip.py:71 ipam/models/ip.py:90 -#: ipam/tables/asn.py:20 ipam/tables/asn.py:45 -#: templates/ipam/aggregate.html:18 templates/ipam/asn.html:27 -#: templates/ipam/asnrange.html:19 templates/ipam/rir.html:19 +#: netbox/ipam/forms/bulk_edit.py: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/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" -#: ipam/forms/bulk_edit.py:171 +#: netbox/ipam/forms/bulk_edit.py:171 msgid "Date added" msgstr "追加日" -#: ipam/forms/bulk_edit.py:229 ipam/forms/model_forms.py:586 -#: ipam/forms/model_forms.py:633 ipam/tables/ip.py:251 -#: templates/ipam/vlan_edit.html:37 templates/ipam/vlangroup.html:27 +#: 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/templates/ipam/vlangroup.html:27 msgid "VLAN Group" msgstr "VLAN グループ" -#: ipam/forms/bulk_edit.py:234 ipam/forms/bulk_import.py:185 -#: ipam/forms/filtersets.py:256 ipam/forms/model_forms.py:218 -#: ipam/models/vlans.py:234 ipam/tables/ip.py:255 -#: templates/ipam/prefix.html:60 templates/ipam/vlan.html:12 -#: templates/ipam/vlan/base.html:6 templates/ipam/vlan_edit.html:10 -#: templates/wireless/wirelesslan.html:30 vpn/forms/bulk_import.py:304 -#: vpn/forms/filtersets.py:284 vpn/forms/model_forms.py:433 -#: vpn/forms/model_forms.py:452 wireless/forms/bulk_edit.py:55 -#: wireless/forms/bulk_import.py:48 wireless/forms/model_forms.py:48 -#: wireless/models.py:102 +#: 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/templates/ipam/vlan/base.html:6 +#: netbox/templates/ipam/vlan_edit.html:10 +#: netbox/templates/wireless/wirelesslan.html:30 +#: netbox/vpn/forms/bulk_import.py:304 netbox/vpn/forms/filtersets.py:284 +#: netbox/vpn/forms/model_forms.py:433 netbox/vpn/forms/model_forms.py:452 +#: netbox/wireless/forms/bulk_edit.py:55 +#: netbox/wireless/forms/bulk_import.py:48 +#: netbox/wireless/forms/model_forms.py:48 netbox/wireless/models.py:102 msgid "VLAN" msgstr "VLAN" -#: ipam/forms/bulk_edit.py:245 +#: netbox/ipam/forms/bulk_edit.py:245 msgid "Prefix length" msgstr "プレフィックス長" -#: ipam/forms/bulk_edit.py:268 ipam/forms/filtersets.py:241 -#: templates/ipam/prefix.html:85 +#: netbox/ipam/forms/bulk_edit.py:268 netbox/ipam/forms/filtersets.py:241 +#: netbox/templates/ipam/prefix.html:85 msgid "Is a pool" msgstr "プールです" -#: ipam/forms/bulk_edit.py:273 ipam/forms/bulk_edit.py:318 -#: ipam/forms/filtersets.py:248 ipam/forms/filtersets.py:293 -#: ipam/models/ip.py:272 ipam/models/ip.py:539 +#: netbox/ipam/forms/bulk_edit.py: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 msgid "Treat as fully utilized" msgstr "すべて使用済として扱う" -#: ipam/forms/bulk_edit.py:287 ipam/forms/filtersets.py:171 +#: netbox/ipam/forms/bulk_edit.py:287 netbox/ipam/forms/filtersets.py:171 msgid "VLAN Assignment" msgstr "VLAN アサイメント" -#: ipam/forms/bulk_edit.py:366 ipam/models/ip.py:772 +#: netbox/ipam/forms/bulk_edit.py:366 netbox/ipam/models/ip.py:772 msgid "DNS name" msgstr "DNS ネーム" -#: ipam/forms/bulk_edit.py:387 ipam/forms/bulk_edit.py:534 -#: ipam/forms/bulk_import.py:394 ipam/forms/bulk_import.py:469 -#: ipam/forms/bulk_import.py:495 ipam/forms/filtersets.py:390 -#: ipam/forms/filtersets.py:530 templates/ipam/fhrpgroup.html:22 -#: templates/ipam/inc/panels/fhrp_groups.html:24 -#: templates/ipam/service.html:32 templates/ipam/servicetemplate.html:19 +#: netbox/ipam/forms/bulk_edit.py: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/templates/ipam/inc/panels/fhrp_groups.html:24 +#: netbox/templates/ipam/service.html:32 +#: netbox/templates/ipam/servicetemplate.html:19 msgid "Protocol" msgstr "プロトコル" -#: ipam/forms/bulk_edit.py:394 ipam/forms/filtersets.py:397 -#: ipam/tables/fhrp.py:22 templates/ipam/fhrpgroup.html:26 +#: netbox/ipam/forms/bulk_edit.py:394 netbox/ipam/forms/filtersets.py:397 +#: netbox/ipam/tables/fhrp.py:22 netbox/templates/ipam/fhrpgroup.html:26 msgid "Group ID" msgstr "グループ ID" -#: ipam/forms/bulk_edit.py:399 ipam/forms/filtersets.py:402 -#: wireless/forms/bulk_edit.py:68 wireless/forms/bulk_edit.py:115 -#: wireless/forms/bulk_import.py:62 wireless/forms/bulk_import.py:65 -#: wireless/forms/bulk_import.py:104 wireless/forms/bulk_import.py:107 -#: wireless/forms/filtersets.py:54 wireless/forms/filtersets.py:88 +#: netbox/ipam/forms/bulk_edit.py: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 msgid "Authentication type" msgstr "認証タイプ" -#: ipam/forms/bulk_edit.py:404 ipam/forms/filtersets.py:406 +#: netbox/ipam/forms/bulk_edit.py:404 netbox/ipam/forms/filtersets.py:406 msgid "Authentication key" msgstr "認証キー" -#: ipam/forms/bulk_edit.py:421 ipam/forms/filtersets.py:383 -#: ipam/forms/model_forms.py:474 netbox/navigation/menu.py:386 -#: templates/ipam/fhrpgroup.html:49 -#: templates/wireless/inc/authentication_attrs.html:5 -#: wireless/forms/bulk_edit.py:91 wireless/forms/bulk_edit.py:149 -#: wireless/forms/filtersets.py:36 wireless/forms/filtersets.py:76 -#: wireless/forms/model_forms.py:55 wireless/forms/model_forms.py:171 +#: 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/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 msgid "Authentication" msgstr "認証" -#: ipam/forms/bulk_edit.py:436 ipam/forms/model_forms.py:575 +#: netbox/ipam/forms/bulk_edit.py:436 netbox/ipam/forms/model_forms.py:608 msgid "Scope type" msgstr "スコープタイプ" -#: ipam/forms/bulk_edit.py:439 ipam/forms/bulk_edit.py:453 -#: ipam/forms/model_forms.py:578 ipam/forms/model_forms.py:588 -#: ipam/tables/vlans.py:71 templates/ipam/vlangroup.html:38 +#: 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 "スコープ" -#: ipam/forms/bulk_edit.py:446 ipam/models/vlans.py:60 +#: netbox/ipam/forms/bulk_edit.py:446 netbox/ipam/models/vlans.py:60 msgid "VLAN ID ranges" msgstr "VLAN ID の範囲" -#: ipam/forms/bulk_edit.py:525 +#: netbox/ipam/forms/bulk_edit.py:525 msgid "Site & Group" msgstr "サイトとグループ" -#: ipam/forms/bulk_edit.py:539 ipam/forms/model_forms.py:659 -#: ipam/forms/model_forms.py:691 ipam/tables/services.py:19 -#: ipam/tables/services.py:49 templates/ipam/service.html:36 -#: templates/ipam/servicetemplate.html:23 +#: netbox/ipam/forms/bulk_edit.py:539 netbox/ipam/forms/model_forms.py:692 +#: netbox/ipam/forms/model_forms.py:724 netbox/ipam/tables/services.py:19 +#: netbox/ipam/tables/services.py:49 netbox/templates/ipam/service.html:36 +#: netbox/templates/ipam/servicetemplate.html:23 msgid "Ports" msgstr "ポート" -#: ipam/forms/bulk_import.py:48 +#: netbox/ipam/forms/bulk_import.py:48 msgid "Import route targets" msgstr "インポートルートターゲット" -#: ipam/forms/bulk_import.py:54 +#: netbox/ipam/forms/bulk_import.py:54 msgid "Export route targets" msgstr "エクスポートルートターゲット" -#: ipam/forms/bulk_import.py:92 ipam/forms/bulk_import.py:112 -#: ipam/forms/bulk_import.py:132 +#: netbox/ipam/forms/bulk_import.py:92 netbox/ipam/forms/bulk_import.py:112 +#: netbox/ipam/forms/bulk_import.py:132 msgid "Assigned RIR" msgstr "割当 RIR" -#: ipam/forms/bulk_import.py:182 +#: netbox/ipam/forms/bulk_import.py:182 msgid "VLAN's group (if any)" msgstr "VLAN のグループ (存在する場合)" -#: ipam/forms/bulk_import.py:308 +#: netbox/ipam/forms/bulk_import.py:308 msgid "Parent device of assigned interface (if any)" msgstr "割当インタフェースの親デバイス (存在する場合)" -#: ipam/forms/bulk_import.py:311 ipam/forms/bulk_import.py:488 -#: ipam/forms/model_forms.py:685 virtualization/filtersets.py:288 -#: virtualization/filtersets.py:327 virtualization/forms/bulk_edit.py:200 -#: virtualization/forms/bulk_edit.py:326 -#: virtualization/forms/bulk_import.py:146 -#: virtualization/forms/bulk_import.py:207 -#: virtualization/forms/filtersets.py:212 -#: virtualization/forms/filtersets.py:248 -#: virtualization/forms/model_forms.py:288 vpn/forms/bulk_import.py:93 -#: vpn/forms/bulk_import.py:290 +#: 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 "仮想マシン" -#: ipam/forms/bulk_import.py:315 +#: netbox/ipam/forms/bulk_import.py:315 msgid "Parent VM of assigned interface (if any)" msgstr "割当インタフェースの親VM (存在する場合)" -#: ipam/forms/bulk_import.py:325 +#: netbox/ipam/forms/bulk_import.py:325 msgid "Is primary" msgstr "プライマリか" -#: ipam/forms/bulk_import.py:326 +#: netbox/ipam/forms/bulk_import.py:326 msgid "Make this the primary IP for the assigned device" msgstr "割当デバイスのプライマリ IP アドレスにする" -#: ipam/forms/bulk_import.py:365 +#: netbox/ipam/forms/bulk_import.py:330 +msgid "Is out-of-band" +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" msgstr "デバイスまたは仮想マシンが指定されていないため、プライマリ IP として設定できません" -#: ipam/forms/bulk_import.py:369 +#: 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" msgstr "インタフェースが指定されていないため、プライマリ IP として設定できません" -#: ipam/forms/bulk_import.py:398 +#: 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" msgstr "認証タイプ" -#: ipam/forms/bulk_import.py:413 +#: netbox/ipam/forms/bulk_import.py:437 msgid "Scope type (app & model)" msgstr "スコープの種類 (アプリとモデル)" -#: ipam/forms/bulk_import.py:440 +#: netbox/ipam/forms/bulk_import.py:464 msgid "Assigned VLAN group" msgstr "割当 VLAN グループ" -#: ipam/forms/bulk_import.py:471 ipam/forms/bulk_import.py:497 +#: netbox/ipam/forms/bulk_import.py:495 netbox/ipam/forms/bulk_import.py:521 msgid "IP protocol" msgstr "IP プロトコル" -#: ipam/forms/bulk_import.py:485 +#: netbox/ipam/forms/bulk_import.py:509 msgid "Required if not assigned to a VM" msgstr "VM に割り当てられていない場合は必須" -#: ipam/forms/bulk_import.py:492 +#: netbox/ipam/forms/bulk_import.py:516 msgid "Required if not assigned to a device" msgstr "デバイスに割り当てられていない場合は必須" -#: ipam/forms/bulk_import.py:517 +#: netbox/ipam/forms/bulk_import.py:541 #, python-brace-format msgid "{ip} is not assigned to this device/VM." msgstr "{ip} はこのデバイス/VM には割り当てられていません。" -#: ipam/forms/filtersets.py:47 ipam/forms/model_forms.py:63 -#: netbox/navigation/menu.py:189 vpn/forms/model_forms.py:410 +#: 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 msgid "Route Targets" msgstr "ルートターゲット" -#: ipam/forms/filtersets.py:53 ipam/forms/model_forms.py:50 -#: vpn/forms/filtersets.py:224 vpn/forms/model_forms.py:397 +#: 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 msgid "Import targets" msgstr "インポートターゲット" -#: ipam/forms/filtersets.py:58 ipam/forms/model_forms.py:55 -#: vpn/forms/filtersets.py:229 vpn/forms/model_forms.py:402 +#: 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 msgid "Export targets" msgstr "エクスポートターゲット" -#: ipam/forms/filtersets.py:73 +#: netbox/ipam/forms/filtersets.py:73 msgid "Imported by VRF" msgstr "VRF によるインポート" -#: ipam/forms/filtersets.py:78 +#: netbox/ipam/forms/filtersets.py:78 msgid "Exported by VRF" msgstr "VRF によるエクスポート" -#: ipam/forms/filtersets.py:87 ipam/tables/ip.py:89 templates/ipam/rir.html:30 +#: netbox/ipam/forms/filtersets.py:87 netbox/ipam/tables/ip.py:89 +#: netbox/templates/ipam/rir.html:30 msgid "Private" msgstr "プライベート" -#: ipam/forms/filtersets.py:105 ipam/forms/filtersets.py:191 -#: ipam/forms/filtersets.py:272 ipam/forms/filtersets.py:326 +#: netbox/ipam/forms/filtersets.py:105 netbox/ipam/forms/filtersets.py:191 +#: netbox/ipam/forms/filtersets.py:272 netbox/ipam/forms/filtersets.py:326 msgid "Address family" msgstr "アドレスファミリー" -#: ipam/forms/filtersets.py:119 templates/ipam/asnrange.html:25 +#: netbox/ipam/forms/filtersets.py:119 netbox/templates/ipam/asnrange.html:25 msgid "Range" msgstr "レンジ" -#: ipam/forms/filtersets.py:128 +#: netbox/ipam/forms/filtersets.py:128 msgid "Start" msgstr "開始" -#: ipam/forms/filtersets.py:132 +#: netbox/ipam/forms/filtersets.py:132 msgid "End" msgstr "終了" -#: ipam/forms/filtersets.py:186 +#: netbox/ipam/forms/filtersets.py:186 msgid "Search within" msgstr "範囲内を検索" -#: ipam/forms/filtersets.py:207 ipam/forms/filtersets.py:342 +#: netbox/ipam/forms/filtersets.py:207 netbox/ipam/forms/filtersets.py:342 msgid "Present in VRF" msgstr "VRF 内に存在する" -#: ipam/forms/filtersets.py:311 +#: netbox/ipam/forms/filtersets.py:311 msgid "Device/VM" msgstr "デバイス/VM" -#: ipam/forms/filtersets.py:321 +#: netbox/ipam/forms/filtersets.py:321 msgid "Parent Prefix" msgstr "親プレフィックス" -#: ipam/forms/filtersets.py:347 +#: netbox/ipam/forms/filtersets.py:347 msgid "Assigned Device" msgstr "割当デバイス" -#: ipam/forms/filtersets.py:352 +#: netbox/ipam/forms/filtersets.py:352 msgid "Assigned VM" msgstr "割当VM" -#: ipam/forms/filtersets.py:366 +#: netbox/ipam/forms/filtersets.py:366 msgid "Assigned to an interface" msgstr "インタフェースに割当済" -#: ipam/forms/filtersets.py:373 templates/ipam/ipaddress.html:51 +#: netbox/ipam/forms/filtersets.py:373 netbox/templates/ipam/ipaddress.html:51 msgid "DNS Name" msgstr "DNS名" -#: ipam/forms/filtersets.py:416 ipam/models/vlans.py:235 ipam/tables/ip.py:176 -#: ipam/tables/vlans.py:82 ipam/views.py:971 netbox/navigation/menu.py:193 -#: netbox/navigation/menu.py:195 +#: 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 msgid "VLANs" msgstr "VLAN" -#: ipam/forms/filtersets.py:457 +#: netbox/ipam/forms/filtersets.py:457 msgid "Contains VLAN ID" msgstr "VLAN ID が含まれています" -#: ipam/forms/filtersets.py:513 ipam/models/vlans.py:176 -#: templates/ipam/vlan.html:31 +#: netbox/ipam/forms/filtersets.py:513 netbox/ipam/models/vlans.py:192 +#: netbox/templates/ipam/vlan.html:31 msgid "VLAN ID" msgstr "VLAN ID" -#: ipam/forms/filtersets.py:556 ipam/forms/model_forms.py:320 -#: ipam/forms/model_forms.py:713 ipam/forms/model_forms.py:739 -#: ipam/tables/vlans.py:195 templates/virtualization/virtualdisk.html:21 -#: templates/virtualization/virtualmachine.html:12 -#: templates/virtualization/vminterface.html:21 -#: templates/vpn/tunneltermination.html:25 -#: virtualization/forms/filtersets.py:197 -#: virtualization/forms/filtersets.py:242 -#: virtualization/forms/model_forms.py:220 -#: virtualization/tables/virtualmachines.py:135 -#: virtualization/tables/virtualmachines.py:190 vpn/choices.py:45 -#: vpn/forms/filtersets.py:293 vpn/forms/model_forms.py:160 -#: vpn/forms/model_forms.py:171 vpn/forms/model_forms.py:273 -#: vpn/forms/model_forms.py:454 +#: netbox/ipam/forms/filtersets.py: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 "仮想マシン" -#: ipam/forms/model_forms.py:80 templates/ipam/routetarget.html:10 +#: netbox/ipam/forms/model_forms.py:80 +#: netbox/templates/ipam/routetarget.html:10 msgid "Route Target" msgstr "ルートターゲット" -#: ipam/forms/model_forms.py:114 ipam/tables/ip.py:117 -#: templates/ipam/aggregate.html:11 templates/ipam/prefix.html:38 +#: netbox/ipam/forms/model_forms.py:114 netbox/ipam/tables/ip.py:117 +#: netbox/templates/ipam/aggregate.html:11 +#: netbox/templates/ipam/prefix.html:38 msgid "Aggregate" msgstr "集約" -#: ipam/forms/model_forms.py:135 templates/ipam/asnrange.html:12 +#: netbox/ipam/forms/model_forms.py:135 netbox/templates/ipam/asnrange.html:12 msgid "ASN Range" msgstr "ASN レンジ" -#: ipam/forms/model_forms.py:231 +#: netbox/ipam/forms/model_forms.py:231 msgid "Site/VLAN Assignment" msgstr "サイト/VLAN 割り当て" -#: ipam/forms/model_forms.py:259 templates/ipam/iprange.html:10 +#: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10 msgid "IP Range" msgstr "IP アドレス範囲" -#: ipam/forms/model_forms.py:295 ipam/forms/model_forms.py:321 -#: ipam/forms/model_forms.py:473 templates/ipam/fhrpgroup.html:19 +#: 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 msgid "FHRP Group" msgstr "FHRP グループ" -#: ipam/forms/model_forms.py:310 +#: netbox/ipam/forms/model_forms.py:310 msgid "Make this the primary IP for the device/VM" msgstr "デバイス/VMのプライマリIPにする" -#: ipam/forms/model_forms.py:325 +#: netbox/ipam/forms/model_forms.py:314 +msgid "Make this the out-of-band IP for the device" +msgstr "これをデバイスの帯域外IPにする" + +#: netbox/ipam/forms/model_forms.py:329 msgid "NAT IP (Inside)" msgstr "NAT IP (インサイド)" -#: ipam/forms/model_forms.py:384 +#: netbox/ipam/forms/model_forms.py:391 msgid "An IP address can only be assigned to a single object." msgstr "IP アドレスは 1 つのオブジェクトにのみ割り当てることができます。" -#: ipam/forms/model_forms.py:390 ipam/models/ip.py:897 -msgid "" -"Cannot reassign IP address while it is designated as the primary IP for the " -"parent object" -msgstr "親オブジェクトのプライマリ IP として指定されている間は IP アドレスを再割り当てできません" +#: netbox/ipam/forms/model_forms.py:398 +msgid "Cannot reassign primary IP address for the parent device/VM" +msgstr "親デバイス/VMのプライマリ IP アドレスを再割り当てできません" -#: ipam/forms/model_forms.py:400 +#: 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 "" "Only IP addresses assigned to an interface can be designated as primary IPs." msgstr "プライマリ IP として指定できるのは、インタフェースに割り当てられた IP アドレスのみです。" -#: ipam/forms/model_forms.py:475 +#: netbox/ipam/forms/model_forms.py:420 +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" msgstr "仮想 IP アドレス" -#: ipam/forms/model_forms.py:560 +#: netbox/ipam/forms/model_forms.py:593 msgid "Assignment already exists" msgstr "既に割り当てられています" -#: ipam/forms/model_forms.py:569 templates/ipam/vlangroup.html:42 +#: netbox/ipam/forms/model_forms.py:602 +#: netbox/templates/ipam/vlangroup.html:42 msgid "VLAN IDs" msgstr "VLAN ID" -#: ipam/forms/model_forms.py:587 +#: netbox/ipam/forms/model_forms.py:620 msgid "Child VLANs" msgstr "子 VLAN" -#: ipam/forms/model_forms.py:664 ipam/forms/model_forms.py:696 +#: netbox/ipam/forms/model_forms.py:697 netbox/ipam/forms/model_forms.py:729 msgid "" "Comma-separated list of one or more port numbers. A range may be specified " "using a hyphen." msgstr "カンマ区切りのポート番号のリスト。範囲はハイフンを使用して指定できます。" -#: ipam/forms/model_forms.py:669 templates/ipam/servicetemplate.html:12 +#: netbox/ipam/forms/model_forms.py:702 +#: netbox/templates/ipam/servicetemplate.html:12 msgid "Service Template" msgstr "サービステンプレート" -#: ipam/forms/model_forms.py:716 +#: netbox/ipam/forms/model_forms.py:749 msgid "Port(s)" msgstr "ポート (s)" -#: ipam/forms/model_forms.py:717 ipam/forms/model_forms.py:745 -#: templates/ipam/service.html:21 +#: netbox/ipam/forms/model_forms.py:750 netbox/ipam/forms/model_forms.py:778 +#: netbox/templates/ipam/service.html:21 msgid "Service" msgstr "サービス" -#: ipam/forms/model_forms.py:730 +#: netbox/ipam/forms/model_forms.py:763 msgid "Service template" msgstr "サービステンプレート" -#: ipam/forms/model_forms.py:742 +#: netbox/ipam/forms/model_forms.py:775 msgid "From Template" msgstr "テンプレートから" -#: ipam/forms/model_forms.py:743 +#: netbox/ipam/forms/model_forms.py:776 msgid "Custom" msgstr "カスタム" -#: ipam/forms/model_forms.py:773 +#: netbox/ipam/forms/model_forms.py:806 msgid "" "Must specify name, protocol, and port(s) if not using a service template." msgstr "サービステンプレートを使用しない場合は、名前、プロトコル、およびポートを指定する必要があります。" -#: ipam/models/asns.py:34 +#: netbox/ipam/models/asns.py:34 msgid "start" msgstr "開始" -#: ipam/models/asns.py:51 +#: netbox/ipam/models/asns.py:51 msgid "ASN range" msgstr "ASN レンジ" -#: ipam/models/asns.py:52 +#: netbox/ipam/models/asns.py:52 msgid "ASN ranges" msgstr "ASN レンジ" -#: ipam/models/asns.py:72 +#: netbox/ipam/models/asns.py:72 #, python-brace-format msgid "Starting ASN ({start}) must be lower than ending ASN ({end})." msgstr "開始ASN ({start}) は終了ASN ({end}) より小さくなければなりません)。" -#: ipam/models/asns.py:104 +#: netbox/ipam/models/asns.py:104 msgid "Regional Internet Registry responsible for this AS number space" msgstr "この AS 番号空間を担当する地域インターネットレジストリ" -#: ipam/models/asns.py:109 +#: netbox/ipam/models/asns.py:109 msgid "16- or 32-bit autonomous system number" msgstr "16 または 32 ビットのAS番号" -#: ipam/models/fhrp.py:22 +#: netbox/ipam/models/fhrp.py:22 msgid "group ID" msgstr "グループ ID" -#: ipam/models/fhrp.py:30 ipam/models/services.py:22 +#: netbox/ipam/models/fhrp.py:30 netbox/ipam/models/services.py:22 msgid "protocol" msgstr "プロトコル" -#: ipam/models/fhrp.py:38 wireless/models.py:28 +#: netbox/ipam/models/fhrp.py:38 netbox/wireless/models.py:28 msgid "authentication type" msgstr "認証タイプ" -#: ipam/models/fhrp.py:43 +#: netbox/ipam/models/fhrp.py:43 msgid "authentication key" msgstr "認証キー" -#: ipam/models/fhrp.py:56 +#: netbox/ipam/models/fhrp.py:56 msgid "FHRP group" msgstr "FHRP グループ" -#: ipam/models/fhrp.py:57 +#: netbox/ipam/models/fhrp.py:57 msgid "FHRP groups" msgstr "FHRP グループ" -#: ipam/models/fhrp.py:113 +#: netbox/ipam/models/fhrp.py:113 msgid "FHRP group assignment" msgstr "FHRP グループ割当" -#: ipam/models/fhrp.py:114 +#: netbox/ipam/models/fhrp.py:114 msgid "FHRP group assignments" msgstr "FHRP グループ割当" -#: ipam/models/ip.py:65 +#: netbox/ipam/models/ip.py:65 msgid "private" msgstr "プライベート" -#: ipam/models/ip.py:66 +#: netbox/ipam/models/ip.py:66 msgid "IP space managed by this RIR is considered private" msgstr "この RIR が管理する IP スペースはプライベートと見なされます" -#: ipam/models/ip.py:72 netbox/navigation/menu.py:182 +#: netbox/ipam/models/ip.py:72 netbox/netbox/navigation/menu.py:182 msgid "RIRs" msgstr "RIR" -#: ipam/models/ip.py:84 +#: netbox/ipam/models/ip.py:84 msgid "IPv4 or IPv6 network" msgstr "IPv4 または IPv6 ネットワーク" -#: ipam/models/ip.py:91 +#: netbox/ipam/models/ip.py:91 msgid "Regional Internet Registry responsible for this IP space" msgstr "この IP スペースを管理する地域インターネットレジストリ" -#: ipam/models/ip.py:101 +#: netbox/ipam/models/ip.py:101 msgid "date added" msgstr "追加日" -#: ipam/models/ip.py:115 +#: netbox/ipam/models/ip.py:115 msgid "aggregate" msgstr "集約" -#: ipam/models/ip.py:116 +#: netbox/ipam/models/ip.py:116 msgid "aggregates" msgstr "集約" -#: ipam/models/ip.py:132 +#: netbox/ipam/models/ip.py:132 msgid "Cannot create aggregate with /0 mask." msgstr "/0 マスクを使用して集約を作成することはできません。" -#: ipam/models/ip.py:144 +#: netbox/ipam/models/ip.py:144 #, python-brace-format msgid "" "Aggregates cannot overlap. {prefix} is already covered by an existing " "aggregate ({aggregate})." msgstr "集約は重複できません。{prefix} は既存の集約({aggregate}) に含まれます。" -#: ipam/models/ip.py:158 +#: netbox/ipam/models/ip.py:158 #, python-brace-format msgid "" "Prefixes cannot overlap aggregates. {prefix} covers an existing aggregate " "({aggregate})." msgstr "プレフィックスは集約と重複できません。 {prefix} は既存の集約 ({aggregate}) に含まれます。" -#: ipam/models/ip.py:200 ipam/models/ip.py:737 vpn/models/tunnels.py:114 +#: netbox/ipam/models/ip.py:200 netbox/ipam/models/ip.py:737 +#: netbox/vpn/models/tunnels.py:114 msgid "role" msgstr "ロール" -#: ipam/models/ip.py:201 +#: netbox/ipam/models/ip.py:201 msgid "roles" msgstr "ロール" -#: ipam/models/ip.py:217 ipam/models/ip.py:293 +#: netbox/ipam/models/ip.py:217 netbox/ipam/models/ip.py:293 msgid "prefix" msgstr "プレフィックス" -#: ipam/models/ip.py:218 +#: netbox/ipam/models/ip.py:218 msgid "IPv4 or IPv6 network with mask" msgstr "マスク付きの IPv4 または IPv6 ネットワーク" -#: ipam/models/ip.py:254 +#: netbox/ipam/models/ip.py:254 msgid "Operational status of this prefix" msgstr "このプレフィックスの動作ステータス" -#: ipam/models/ip.py:262 +#: netbox/ipam/models/ip.py:262 msgid "The primary function of this prefix" msgstr "このプレフィックスの主な機能" -#: ipam/models/ip.py:265 +#: netbox/ipam/models/ip.py:265 msgid "is a pool" msgstr "プールか" -#: ipam/models/ip.py:267 +#: netbox/ipam/models/ip.py:267 msgid "All IP addresses within this prefix are considered usable" msgstr "このプレフィックス内のすべての IP アドレスが使用可能と見なされます。" -#: ipam/models/ip.py:270 ipam/models/ip.py:537 +#: netbox/ipam/models/ip.py:270 netbox/ipam/models/ip.py:537 msgid "mark utilized" msgstr "使用済み" -#: ipam/models/ip.py:294 +#: netbox/ipam/models/ip.py:294 msgid "prefixes" msgstr "プレフィックス" -#: ipam/models/ip.py:317 +#: netbox/ipam/models/ip.py:317 msgid "Cannot create prefix with /0 mask." msgstr "/0 マスクではプレフィックスを作成できません。" -#: ipam/models/ip.py:324 ipam/models/ip.py:874 +#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:874 #, python-brace-format msgid "VRF {vrf}" msgstr "VRF {vrf}" -#: ipam/models/ip.py:324 ipam/models/ip.py:874 +#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:874 msgid "global table" msgstr "グローバルテーブル" -#: ipam/models/ip.py:326 +#: netbox/ipam/models/ip.py:326 #, python-brace-format msgid "Duplicate prefix found in {table}: {prefix}" msgstr "重複したプレフィックスが見つかりました {table}: {prefix}" -#: ipam/models/ip.py:495 +#: netbox/ipam/models/ip.py:495 msgid "start address" msgstr "開始アドレス" -#: ipam/models/ip.py:496 ipam/models/ip.py:500 ipam/models/ip.py:712 +#: netbox/ipam/models/ip.py:496 netbox/ipam/models/ip.py:500 +#: netbox/ipam/models/ip.py:712 msgid "IPv4 or IPv6 address (with mask)" msgstr "IPv4 または IPv6 アドレス (マスク付き)" -#: ipam/models/ip.py:499 +#: netbox/ipam/models/ip.py:499 msgid "end address" msgstr "終了アドレス" -#: ipam/models/ip.py:526 +#: netbox/ipam/models/ip.py:526 msgid "Operational status of this range" msgstr "この範囲の動作状況" -#: ipam/models/ip.py:534 +#: netbox/ipam/models/ip.py:534 msgid "The primary function of this range" msgstr "この範囲の主な機能" -#: ipam/models/ip.py:548 +#: netbox/ipam/models/ip.py:548 msgid "IP range" msgstr "IP アドレス範囲" -#: ipam/models/ip.py:549 +#: netbox/ipam/models/ip.py:549 msgid "IP ranges" msgstr "IP アドレス範囲" -#: ipam/models/ip.py:565 +#: netbox/ipam/models/ip.py:565 msgid "Starting and ending IP address versions must match" msgstr "開始・終了 IP アドレスのバージョンが一致している必要があります" -#: ipam/models/ip.py:571 +#: netbox/ipam/models/ip.py:571 msgid "Starting and ending IP address masks must match" msgstr "開始・終了 IP アドレスマスクは一致する必要があります" -#: ipam/models/ip.py:578 +#: netbox/ipam/models/ip.py:578 #, python-brace-format msgid "" "Ending address must be greater than the starting address ({start_address})" msgstr "終了アドレスは開始アドレスより大きくなければなりません ({start_address})" -#: ipam/models/ip.py:590 +#: netbox/ipam/models/ip.py:590 #, python-brace-format msgid "Defined addresses overlap with range {overlapping_range} in VRF {vrf}" msgstr "VRF{vrf}において、定義されたアドレスが範囲{overlapping_range}と重複しています " -#: ipam/models/ip.py:599 +#: netbox/ipam/models/ip.py:599 #, python-brace-format msgid "Defined range exceeds maximum supported size ({max_size})" msgstr "定義された範囲がサポートされている最大サイズを超えています ({max_size})" -#: ipam/models/ip.py:711 tenancy/models/contacts.py:82 +#: netbox/ipam/models/ip.py:711 netbox/tenancy/models/contacts.py:82 msgid "address" msgstr "アドレス" -#: ipam/models/ip.py:734 +#: netbox/ipam/models/ip.py:734 msgid "The operational status of this IP" msgstr "この IP の動作ステータス" -#: ipam/models/ip.py:741 +#: netbox/ipam/models/ip.py:741 msgid "The functional role of this IP" msgstr "この IP の役割" -#: ipam/models/ip.py:765 templates/ipam/ipaddress.html:72 +#: netbox/ipam/models/ip.py:765 netbox/templates/ipam/ipaddress.html:72 msgid "NAT (inside)" msgstr "NAT (インサイド)" -#: ipam/models/ip.py:766 +#: netbox/ipam/models/ip.py:766 msgid "The IP for which this address is the \"outside\" IP" msgstr "このアドレスが「アウトサイド」IPであるIP" -#: ipam/models/ip.py:773 +#: netbox/ipam/models/ip.py:773 msgid "Hostname or FQDN (not case-sensitive)" msgstr "ホスト名または FQDN (大文字と小文字は区別されません)" -#: ipam/models/ip.py:789 ipam/models/services.py:94 +#: netbox/ipam/models/ip.py:789 netbox/ipam/models/services.py:94 msgid "IP addresses" msgstr "IP アドレス" -#: ipam/models/ip.py:845 +#: netbox/ipam/models/ip.py:845 msgid "Cannot create IP address with /0 mask." msgstr "/0 マスクで IP アドレスを作成することはできません。" -#: ipam/models/ip.py:851 +#: netbox/ipam/models/ip.py:851 #, python-brace-format msgid "{ip} is a network ID, which may not be assigned to an interface." msgstr "{ip} はネットワーク ID のため、インタフェースに割り当てることはできません。" -#: ipam/models/ip.py:862 +#: netbox/ipam/models/ip.py:862 #, python-brace-format msgid "" "{ip} is a broadcast address, which may not be assigned to an interface." msgstr "{ip} はブロードキャストアドレスのため、インタフェースに割り当てることはできません。" -#: ipam/models/ip.py:876 +#: netbox/ipam/models/ip.py:876 #, python-brace-format msgid "Duplicate IP address found in {table}: {ipaddress}" msgstr "重複した IP アドレスが見つかりました {table}: {ipaddress}" -#: ipam/models/ip.py:903 +#: netbox/ipam/models/ip.py:897 +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 msgid "Only IPv6 addresses can be assigned SLAAC status" msgstr "SLAAC ステータスを割り当てることができるのは IPv6 アドレスのみです" -#: ipam/models/services.py:33 +#: netbox/ipam/models/services.py:33 msgid "port numbers" msgstr "ポート番号" -#: ipam/models/services.py:59 +#: netbox/ipam/models/services.py:59 msgid "service template" msgstr "サービステンプレート" -#: ipam/models/services.py:60 +#: netbox/ipam/models/services.py:60 msgid "service templates" msgstr "サービステンプレート" -#: ipam/models/services.py:95 +#: netbox/ipam/models/services.py:95 msgid "The specific IP addresses (if any) to which this service is bound" msgstr "このサービスがバインドされている IP アドレス (存在する場合)" -#: ipam/models/services.py:102 +#: netbox/ipam/models/services.py:102 msgid "service" msgstr "サービス" -#: ipam/models/services.py:103 +#: netbox/ipam/models/services.py:103 msgid "services" msgstr "サービス" -#: ipam/models/services.py:117 +#: netbox/ipam/models/services.py:117 msgid "" "A service cannot be associated with both a device and a virtual machine." msgstr "サービスをデバイスと仮想マシンの両方に関連付けることはできません。" -#: ipam/models/services.py:119 +#: netbox/ipam/models/services.py:119 msgid "" "A service must be associated with either a device or a virtual machine." msgstr "サービスは、デバイスまたは仮想マシンのいずれかに関連付ける必要があります。" -#: ipam/models/vlans.py:85 +#: netbox/ipam/models/vlans.py:85 msgid "VLAN groups" msgstr "VLAN グループ" -#: ipam/models/vlans.py:95 +#: netbox/ipam/models/vlans.py:95 msgid "Cannot set scope_type without scope_id." msgstr "scope_id なしでscope_typeを設定することはできません。" -#: ipam/models/vlans.py:97 +#: netbox/ipam/models/vlans.py:97 msgid "Cannot set scope_id without scope_type." msgstr "scope_typeなしでscope_idを設定することはできません。" -#: ipam/models/vlans.py:101 +#: netbox/ipam/models/vlans.py:105 +#, 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 +#, python-brace-format +msgid "Ending VLAN ID in range ({value}) cannot exceed {maximum}" +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 "範囲の終了 VLAN ID は、開始 VLAN ID ({range})以上である必要があります" + +#: netbox/ipam/models/vlans.py:124 msgid "Ranges cannot overlap." msgstr "範囲は重複できません。" -#: ipam/models/vlans.py:106 -#, python-brace-format -msgid "" -"Maximum child VID must be greater than or equal to minimum child VID " -"({value})" -msgstr "子供 VID の最大数は、子供 VID の最小値以上でなければなりません ({value})" - -#: ipam/models/vlans.py:165 +#: netbox/ipam/models/vlans.py:181 msgid "The specific site to which this VLAN is assigned (if any)" msgstr "この VLAN が割り当てられているサイト (存在する場合)" -#: ipam/models/vlans.py:173 +#: netbox/ipam/models/vlans.py:189 msgid "VLAN group (optional)" msgstr "VLAN グループ (オプション)" -#: ipam/models/vlans.py:181 +#: netbox/ipam/models/vlans.py:197 msgid "Numeric VLAN ID (1-4094)" msgstr "数値によるVLAN ID (1-4094)" -#: ipam/models/vlans.py:199 +#: netbox/ipam/models/vlans.py:215 msgid "Operational status of this VLAN" msgstr "この VLAN の動作ステータス" -#: ipam/models/vlans.py:207 +#: netbox/ipam/models/vlans.py:223 msgid "The primary function of this VLAN" msgstr "この VLAN の主な機能" -#: ipam/models/vlans.py:250 +#: netbox/ipam/models/vlans.py:266 #, python-brace-format msgid "" "VLAN is assigned to group {group} (scope: {scope}); cannot also assign to " "site {site}." msgstr "VLANはグループ{group}に割り当てられています (スコープ: {scope}) サイト{site}への割り当てはできません 。" -#: ipam/models/vlans.py:259 +#: netbox/ipam/models/vlans.py:275 #, python-brace-format msgid "VID must be in ranges {ranges} for VLANs in group {group}" msgstr "VID は範囲内にある必要があります {ranges} グループ内の VLAN 用 {group}" -#: ipam/models/vrfs.py:30 +#: netbox/ipam/models/vrfs.py:30 msgid "route distinguisher" msgstr "ルート識別子(RD)" -#: ipam/models/vrfs.py:31 +#: netbox/ipam/models/vrfs.py:31 msgid "Unique route distinguisher (as defined in RFC 4364)" msgstr "一意のルート識別子 (RFC 4364 におけるRoute Distinguisher)" -#: ipam/models/vrfs.py:42 +#: netbox/ipam/models/vrfs.py:42 msgid "enforce unique space" msgstr "重複を禁止する" -#: ipam/models/vrfs.py:43 +#: netbox/ipam/models/vrfs.py:43 msgid "Prevent duplicate prefixes/IP addresses within this VRF" msgstr "この VRF 内のプレフィックス/IP アドレスの重複を防ぐ" -#: ipam/models/vrfs.py:63 netbox/navigation/menu.py:186 -#: netbox/navigation/menu.py:188 +#: netbox/ipam/models/vrfs.py:63 netbox/netbox/navigation/menu.py:186 +#: netbox/netbox/navigation/menu.py:188 msgid "VRFs" msgstr "VRF" -#: ipam/models/vrfs.py:82 +#: netbox/ipam/models/vrfs.py:82 msgid "Route target value (formatted in accordance with RFC 4360)" msgstr "ルートターゲット値 (RFC 4360 に従ってフォーマットされています)" -#: ipam/models/vrfs.py:94 +#: netbox/ipam/models/vrfs.py:94 msgid "route target" msgstr "ルートターゲット" -#: ipam/models/vrfs.py:95 +#: netbox/ipam/models/vrfs.py:95 msgid "route targets" msgstr "ルートターゲット" -#: ipam/tables/asn.py:52 +#: netbox/ipam/tables/asn.py:52 msgid "ASDOT" msgstr "ASDOT" -#: ipam/tables/asn.py:57 +#: netbox/ipam/tables/asn.py:57 msgid "Site Count" msgstr "サイト数" -#: ipam/tables/asn.py:62 +#: netbox/ipam/tables/asn.py:62 msgid "Provider Count" msgstr "プロバイダ数" -#: ipam/tables/ip.py:95 netbox/navigation/menu.py:179 -#: netbox/navigation/menu.py:181 +#: netbox/ipam/tables/ip.py:95 netbox/netbox/navigation/menu.py:179 +#: netbox/netbox/navigation/menu.py:181 msgid "Aggregates" msgstr "集約" -#: ipam/tables/ip.py:125 +#: netbox/ipam/tables/ip.py:125 msgid "Added" msgstr "追加日" -#: ipam/tables/ip.py:128 ipam/tables/ip.py:166 ipam/tables/vlans.py:142 -#: ipam/views.py:346 netbox/navigation/menu.py:165 -#: netbox/navigation/menu.py:167 templates/ipam/vlan.html:84 +#: 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 msgid "Prefixes" msgstr "プレフィックス" -#: ipam/tables/ip.py:131 ipam/tables/ip.py:270 ipam/tables/ip.py:324 -#: ipam/tables/vlans.py:86 templates/dcim/device.html:260 -#: templates/ipam/aggregate.html:24 templates/ipam/iprange.html:29 -#: templates/ipam/prefix.html:106 +#: 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/templates/dcim/device.html:260 +#: netbox/templates/ipam/aggregate.html:24 +#: netbox/templates/ipam/iprange.html:29 netbox/templates/ipam/prefix.html:106 msgid "Utilization" msgstr "使用率" -#: ipam/tables/ip.py:171 netbox/navigation/menu.py:161 +#: netbox/ipam/tables/ip.py:171 netbox/netbox/navigation/menu.py:161 msgid "IP Ranges" msgstr "IP アドレス範囲" -#: ipam/tables/ip.py:221 +#: netbox/ipam/tables/ip.py:221 msgid "Prefix (Flat)" msgstr "プレフィックス (フラット)" -#: ipam/tables/ip.py:225 +#: netbox/ipam/tables/ip.py:225 msgid "Depth" msgstr "階層" -#: ipam/tables/ip.py:262 +#: netbox/ipam/tables/ip.py:262 msgid "Pool" msgstr "プール" -#: ipam/tables/ip.py:266 ipam/tables/ip.py:320 +#: netbox/ipam/tables/ip.py:266 netbox/ipam/tables/ip.py:320 msgid "Marked Utilized" msgstr "使用済み" -#: ipam/tables/ip.py:304 +#: netbox/ipam/tables/ip.py:304 msgid "Start address" msgstr "開始アドレス" -#: ipam/tables/ip.py:383 +#: netbox/ipam/tables/ip.py:383 msgid "NAT (Inside)" msgstr "NAT (インサイド)" -#: ipam/tables/ip.py:388 +#: netbox/ipam/tables/ip.py:388 msgid "NAT (Outside)" msgstr "NAT (アウトサイド)" -#: ipam/tables/ip.py:393 +#: netbox/ipam/tables/ip.py:393 msgid "Assigned" msgstr "割当済み" -#: ipam/tables/ip.py:429 templates/vpn/l2vpntermination.html:16 -#: vpn/forms/filtersets.py:240 +#: netbox/ipam/tables/ip.py:429 netbox/templates/vpn/l2vpntermination.html:16 +#: netbox/vpn/forms/filtersets.py:240 msgid "Assigned Object" msgstr "割当オブジェクト" -#: ipam/tables/vlans.py:68 +#: netbox/ipam/tables/vlans.py:68 msgid "Scope Type" msgstr "スコープタイプ" -#: ipam/tables/vlans.py:76 +#: netbox/ipam/tables/vlans.py:76 msgid "VID Ranges" msgstr "VID レンジ" -#: ipam/tables/vlans.py:111 ipam/tables/vlans.py:214 -#: templates/dcim/inc/interface_vlans_table.html:4 +#: netbox/ipam/tables/vlans.py:111 netbox/ipam/tables/vlans.py:214 +#: netbox/templates/dcim/inc/interface_vlans_table.html:4 msgid "VID" msgstr "VID" -#: ipam/tables/vrfs.py:30 +#: netbox/ipam/tables/vrfs.py:30 msgid "RD" msgstr "RD" -#: ipam/tables/vrfs.py:33 +#: netbox/ipam/tables/vrfs.py:33 msgid "Unique" msgstr "ユニーク" -#: ipam/tables/vrfs.py:37 vpn/tables/l2vpn.py:27 +#: netbox/ipam/tables/vrfs.py:37 netbox/vpn/tables/l2vpn.py:27 msgid "Import Targets" msgstr "インポートターゲット" -#: ipam/tables/vrfs.py:42 vpn/tables/l2vpn.py:32 +#: netbox/ipam/tables/vrfs.py:42 netbox/vpn/tables/l2vpn.py:32 msgid "Export Targets" msgstr "エクスポートターゲット" -#: ipam/validators.py:9 +#: netbox/ipam/validators.py:9 #, python-brace-format msgid "{prefix} is not a valid prefix. Did you mean {suggested}?" msgstr "{prefix} は有効なプレフィックスではありません。もしかして{suggested}?" -#: ipam/validators.py:16 +#: netbox/ipam/validators.py:16 #, python-format msgid "The prefix length must be less than or equal to %(limit_value)s." msgstr "プレフィックス長は%(limit_value)s以下でなければなりません 。" -#: ipam/validators.py:24 +#: netbox/ipam/validators.py:24 #, python-format msgid "The prefix length must be greater than or equal to %(limit_value)s." msgstr "プレフィックス長は%(limit_value)s以上でなければなりません 。" -#: ipam/validators.py:33 +#: netbox/ipam/validators.py:33 msgid "" "Only alphanumeric characters, asterisks, hyphens, periods, and underscores " "are allowed in DNS names" msgstr "DNS 名に使用できるのは、英数字、アスタリスク、ハイフン、ピリオド、アンダースコアのみです。" -#: ipam/views.py:533 +#: netbox/ipam/views.py:533 msgid "Child Prefixes" msgstr "子プレフィックス" -#: ipam/views.py:569 +#: netbox/ipam/views.py:569 msgid "Child Ranges" msgstr "子レンジ" -#: ipam/views.py:898 +#: netbox/ipam/views.py:898 msgid "Related IPs" msgstr "関連IPアドレス" -#: ipam/views.py:1127 +#: netbox/ipam/views.py:1127 msgid "Device Interfaces" msgstr "デバイスインタフェース" -#: ipam/views.py:1145 +#: netbox/ipam/views.py:1145 msgid "VM Interfaces" msgstr "VM インタフェース" -#: netbox/api/fields.py:65 +#: netbox/netbox/api/fields.py:65 msgid "This field may not be blank." msgstr "このフィールドは空白であってはなりません。" -#: netbox/api/fields.py:70 +#: netbox/netbox/api/fields.py:70 msgid "" "Value must be passed directly (e.g. \"foo\": 123); do not use a dictionary " "or list." msgstr "値は直接渡す必要があります (例: \"foo\": 123)。辞書やリストは使用しないでください。" -#: netbox/api/fields.py:91 +#: netbox/netbox/api/fields.py:91 #, python-brace-format msgid "{value} is not a valid choice." msgstr "{value} は有効な選択肢ではありません。" -#: netbox/api/fields.py:104 +#: netbox/netbox/api/fields.py:104 #, python-brace-format msgid "Invalid content type: {content_type}" msgstr "コンテントタイプが無効です: {content_type}" -#: netbox/api/fields.py:105 +#: netbox/netbox/api/fields.py:105 msgid "Invalid value. Specify a content type as '.'." msgstr "値が無効です。コンテントタイプを '.'として指定してください。" -#: netbox/api/fields.py:167 +#: netbox/netbox/api/fields.py:167 msgid "Ranges must be specified in the form (lower, upper)." msgstr "範囲は (下限、上部) の形式で指定する必要があります。" -#: netbox/api/fields.py:169 +#: netbox/netbox/api/fields.py:169 msgid "Range boundaries must be defined as integers." msgstr "範囲の境界は整数として定義する必要があります。" -#: netbox/api/serializers/fields.py:40 +#: netbox/netbox/api/serializers/fields.py:40 #, python-brace-format msgid "{class_name} must implement get_view_name()" msgstr "{class_name} get_view_name () を実装する必要があります" -#: netbox/authentication/__init__.py:138 +#: netbox/netbox/authentication/__init__.py:138 #, python-brace-format msgid "Invalid permission {permission} for model {model}" msgstr "モデル{model}において権限{permission}が無効です " -#: netbox/choices.py:49 +#: netbox/netbox/choices.py:49 msgid "Dark Red" msgstr "ダークレッド" -#: netbox/choices.py:52 +#: netbox/netbox/choices.py:52 msgid "Rose" msgstr "ローズ" -#: netbox/choices.py:53 +#: netbox/netbox/choices.py:53 msgid "Fuchsia" msgstr "フクシア" -#: netbox/choices.py:55 +#: netbox/netbox/choices.py:55 msgid "Dark Purple" msgstr "ダークパープル" -#: netbox/choices.py:58 +#: netbox/netbox/choices.py:58 msgid "Light Blue" msgstr "ライトブルー" -#: netbox/choices.py:61 +#: netbox/netbox/choices.py:61 msgid "Aqua" msgstr "アクア" -#: netbox/choices.py:62 +#: netbox/netbox/choices.py:62 msgid "Dark Green" msgstr "ダークグリーン" -#: netbox/choices.py:64 +#: netbox/netbox/choices.py:64 msgid "Light Green" msgstr "ライトグリーン" -#: netbox/choices.py:65 +#: netbox/netbox/choices.py:65 msgid "Lime" msgstr "ライム" -#: netbox/choices.py:67 +#: netbox/netbox/choices.py:67 msgid "Amber" msgstr "アンバー" -#: netbox/choices.py:69 +#: netbox/netbox/choices.py:69 msgid "Dark Orange" msgstr "ダークオレンジ" -#: netbox/choices.py:70 +#: netbox/netbox/choices.py:70 msgid "Brown" msgstr "ブラウン" -#: netbox/choices.py:71 +#: netbox/netbox/choices.py:71 msgid "Light Grey" msgstr "ライトグレー" -#: netbox/choices.py:72 +#: netbox/netbox/choices.py:72 msgid "Grey" msgstr "グレー" -#: netbox/choices.py:73 +#: netbox/netbox/choices.py:73 msgid "Dark Grey" msgstr "ダークグレー" -#: netbox/choices.py:128 +#: netbox/netbox/choices.py:128 msgid "Direct" msgstr "直接" -#: netbox/choices.py:129 +#: netbox/netbox/choices.py:129 msgid "Upload" msgstr "アップロード" -#: netbox/choices.py:141 netbox/choices.py:155 +#: netbox/netbox/choices.py:141 netbox/netbox/choices.py:155 msgid "Auto-detect" msgstr "自動検出" -#: netbox/choices.py:156 +#: netbox/netbox/choices.py:156 msgid "Comma" msgstr "カンマ" -#: netbox/choices.py:157 +#: netbox/netbox/choices.py:157 msgid "Semicolon" msgstr "セミコロン" -#: netbox/choices.py:158 +#: netbox/netbox/choices.py:158 msgid "Tab" msgstr "タブ" -#: netbox/config/__init__.py:67 +#: netbox/netbox/config/__init__.py:67 #, python-brace-format msgid "Invalid configuration parameter: {item}" msgstr "設定パラメータが無効です: {item}" -#: netbox/config/parameters.py:22 templates/core/inc/config_data.html:62 +#: netbox/netbox/config/parameters.py:22 +#: netbox/templates/core/inc/config_data.html:62 msgid "Login banner" msgstr "ログインバナー" -#: netbox/config/parameters.py:24 +#: netbox/netbox/config/parameters.py:24 msgid "Additional content to display on the login page" msgstr "ログインページに表示する追加コンテンツ" -#: netbox/config/parameters.py:33 templates/core/inc/config_data.html:66 +#: netbox/netbox/config/parameters.py:33 +#: netbox/templates/core/inc/config_data.html:66 msgid "Maintenance banner" msgstr "メンテナンスバナー" -#: netbox/config/parameters.py:35 +#: netbox/netbox/config/parameters.py:35 msgid "Additional content to display when in maintenance mode" msgstr "メンテナンスモード時に表示する追加コンテンツ" -#: netbox/config/parameters.py:44 templates/core/inc/config_data.html:70 +#: netbox/netbox/config/parameters.py:44 +#: netbox/templates/core/inc/config_data.html:70 msgid "Top banner" msgstr "トップバナー" -#: netbox/config/parameters.py:46 +#: netbox/netbox/config/parameters.py:46 msgid "Additional content to display at the top of every page" msgstr "各ページの上部に表示する追加コンテンツ" -#: netbox/config/parameters.py:55 templates/core/inc/config_data.html:74 +#: netbox/netbox/config/parameters.py:55 +#: netbox/templates/core/inc/config_data.html:74 msgid "Bottom banner" msgstr "ボトムバナー" -#: netbox/config/parameters.py:57 +#: netbox/netbox/config/parameters.py:57 msgid "Additional content to display at the bottom of every page" msgstr "各ページの下部に表示する追加コンテンツ" -#: netbox/config/parameters.py:68 +#: netbox/netbox/config/parameters.py:68 msgid "Globally unique IP space" msgstr "グローバルに一意なIP空間" -#: netbox/config/parameters.py:70 +#: netbox/netbox/config/parameters.py:70 msgid "Enforce unique IP addressing within the global table" msgstr "グローバルテーブル内で一意の IP アドレスを強制する" -#: netbox/config/parameters.py:75 templates/core/inc/config_data.html:44 +#: netbox/netbox/config/parameters.py:75 +#: netbox/templates/core/inc/config_data.html:44 msgid "Prefer IPv4" msgstr "IPv4 を優先する" -#: netbox/config/parameters.py:77 +#: netbox/netbox/config/parameters.py:77 msgid "Prefer IPv4 addresses over IPv6" msgstr "IPv6よりもIPv4アドレスを優先する" -#: netbox/config/parameters.py:84 +#: netbox/netbox/config/parameters.py:84 msgid "Rack unit height" msgstr "ラックユニットの高さ" -#: netbox/config/parameters.py:86 +#: netbox/netbox/config/parameters.py:86 msgid "Default unit height for rendered rack elevations" msgstr "ラック図を描画する際の、ユニットの高さのデフォルト値" -#: netbox/config/parameters.py:91 +#: netbox/netbox/config/parameters.py:91 msgid "Rack unit width" msgstr "ラックユニット幅" -#: netbox/config/parameters.py:93 +#: netbox/netbox/config/parameters.py:93 msgid "Default unit width for rendered rack elevations" msgstr "ラック図を描画する際の、ユニットの幅のデフォルト値" -#: netbox/config/parameters.py:100 +#: netbox/netbox/config/parameters.py:100 msgid "Powerfeed voltage" msgstr "給電電圧" -#: netbox/config/parameters.py:102 +#: netbox/netbox/config/parameters.py:102 msgid "Default voltage for powerfeeds" msgstr "電源タップのデフォルト電圧" -#: netbox/config/parameters.py:107 +#: netbox/netbox/config/parameters.py:107 msgid "Powerfeed amperage" msgstr "給電アンペア数" -#: netbox/config/parameters.py:109 +#: netbox/netbox/config/parameters.py:109 msgid "Default amperage for powerfeeds" msgstr "電源タップのデフォルトアンペア数" -#: netbox/config/parameters.py:114 +#: netbox/netbox/config/parameters.py:114 msgid "Powerfeed max utilization" msgstr "電源タップの最大使用率" -#: netbox/config/parameters.py:116 +#: netbox/netbox/config/parameters.py:116 msgid "Default max utilization for powerfeeds" msgstr "電源タップのデフォルト最大使用率" -#: netbox/config/parameters.py:123 templates/core/inc/config_data.html:53 +#: netbox/netbox/config/parameters.py:123 +#: netbox/templates/core/inc/config_data.html:53 msgid "Allowed URL schemes" msgstr "許可された URL スキーム" -#: netbox/config/parameters.py:128 +#: netbox/netbox/config/parameters.py:128 msgid "Permitted schemes for URLs in user-provided content" msgstr "ユーザ提供コンテンツの URL に許可されているスキーム" -#: netbox/config/parameters.py:136 +#: netbox/netbox/config/parameters.py:136 msgid "Default page size" msgstr "デフォルトページサイズ" -#: netbox/config/parameters.py:142 +#: netbox/netbox/config/parameters.py:142 msgid "Maximum page size" msgstr "最大ページサイズ" -#: netbox/config/parameters.py:150 templates/core/inc/config_data.html:96 +#: netbox/netbox/config/parameters.py:150 +#: netbox/templates/core/inc/config_data.html:96 msgid "Custom validators" msgstr "カスタムバリデータ" -#: netbox/config/parameters.py:152 +#: netbox/netbox/config/parameters.py:152 msgid "Custom validation rules (JSON)" msgstr "カスタム検証ルール (JSON)" -#: netbox/config/parameters.py:160 templates/core/inc/config_data.html:104 +#: netbox/netbox/config/parameters.py:160 +#: netbox/templates/core/inc/config_data.html:104 msgid "Protection rules" msgstr "保護ルール" -#: netbox/config/parameters.py:162 +#: netbox/netbox/config/parameters.py:162 msgid "Deletion protection rules (JSON)" msgstr "削除保護ルール (JSON)" -#: netbox/config/parameters.py:172 templates/core/inc/config_data.html:117 +#: netbox/netbox/config/parameters.py:172 +#: netbox/templates/core/inc/config_data.html:117 msgid "Default preferences" msgstr "デフォルト設定" -#: netbox/config/parameters.py:174 +#: netbox/netbox/config/parameters.py:174 msgid "Default preferences for new users" msgstr "新規ユーザのデフォルト設定" -#: netbox/config/parameters.py:181 templates/core/inc/config_data.html:129 +#: netbox/netbox/config/parameters.py:181 +#: netbox/templates/core/inc/config_data.html:129 msgid "Maintenance mode" msgstr "メンテナンスモード" -#: netbox/config/parameters.py:183 +#: netbox/netbox/config/parameters.py:183 msgid "Enable maintenance mode" msgstr "メンテナンスモードを有効にする" -#: netbox/config/parameters.py:188 templates/core/inc/config_data.html:133 +#: netbox/netbox/config/parameters.py:188 +#: netbox/templates/core/inc/config_data.html:133 msgid "GraphQL enabled" msgstr "GraphQLの有効化" -#: netbox/config/parameters.py:190 +#: netbox/netbox/config/parameters.py:190 msgid "Enable the GraphQL API" msgstr "GraphQL API を有効にする" -#: netbox/config/parameters.py:195 templates/core/inc/config_data.html:137 +#: netbox/netbox/config/parameters.py:195 +#: netbox/templates/core/inc/config_data.html:137 msgid "Changelog retention" msgstr "変更履歴の保存" -#: netbox/config/parameters.py:197 +#: netbox/netbox/config/parameters.py:197 msgid "Days to retain changelog history (set to zero for unlimited)" msgstr "変更履歴の保存日数 (無制限の場合は0)" -#: netbox/config/parameters.py:202 +#: netbox/netbox/config/parameters.py:202 msgid "Job result retention" msgstr "ジョブ結果の保存" -#: netbox/config/parameters.py:204 +#: netbox/netbox/config/parameters.py:204 msgid "Days to retain job result history (set to zero for unlimited)" msgstr "ジョブの結果履歴を保存する日数 (無制限の場合は0)" -#: netbox/config/parameters.py:209 templates/core/inc/config_data.html:145 +#: netbox/netbox/config/parameters.py:209 +#: netbox/templates/core/inc/config_data.html:145 msgid "Maps URL" msgstr "マップ URL" -#: netbox/config/parameters.py:211 +#: netbox/netbox/config/parameters.py:211 msgid "Base URL for mapping geographic locations" msgstr "地理的位置をマッピングするためのベース URL" -#: netbox/forms/__init__.py:12 +#: netbox/netbox/forms/__init__.py:12 msgid "Partial match" msgstr "部分一致" -#: netbox/forms/__init__.py:13 +#: netbox/netbox/forms/__init__.py:13 msgid "Exact match" msgstr "完全一致" -#: netbox/forms/__init__.py:14 +#: netbox/netbox/forms/__init__.py:14 msgid "Starts with" msgstr "で始まる" -#: netbox/forms/__init__.py:15 +#: netbox/netbox/forms/__init__.py:15 msgid "Ends with" msgstr "で終わる" -#: netbox/forms/__init__.py:16 +#: netbox/netbox/forms/__init__.py:16 msgid "Regex" msgstr "正規表現" -#: netbox/forms/__init__.py:34 +#: netbox/netbox/forms/__init__.py:34 msgid "Object type(s)" msgstr "オブジェクトタイプ" -#: netbox/forms/__init__.py:40 +#: netbox/netbox/forms/__init__.py:40 msgid "Lookup" msgstr "検索" -#: netbox/forms/base.py:90 +#: netbox/netbox/forms/base.py:90 msgid "" "Tag slugs separated by commas, encased with double quotes (e.g. " "\"tag1,tag2,tag3\")" msgstr "二重引用符で囲まれたカンマ区切りのタグslug (例:\"tag1,tag2,tag3\")" -#: netbox/forms/base.py:120 +#: netbox/netbox/forms/base.py:120 msgid "Add tags" msgstr "タグを追加" -#: netbox/forms/base.py:125 +#: netbox/netbox/forms/base.py:125 msgid "Remove tags" msgstr "タグを削除" -#: netbox/forms/mixins.py:38 +#: netbox/netbox/forms/mixins.py:38 #, python-brace-format msgid "{class_name} must specify a model class." msgstr "{class_name} はモデルクラスを指定する必要があります。" -#: netbox/models/features.py:280 +#: netbox/netbox/models/features.py:280 #, python-brace-format msgid "Unknown field name '{name}' in custom field data." msgstr "カスタムフィールドデータに、不明なフィールド名 '{name}'が存在します。" -#: netbox/models/features.py:286 +#: netbox/netbox/models/features.py:286 #, python-brace-format msgid "Invalid value for custom field '{name}': {error}" msgstr "カスタムフィールドの値が無効です。'{name}': {error}" -#: netbox/models/features.py:295 +#: netbox/netbox/models/features.py:295 #, python-brace-format msgid "Custom field '{name}' must have a unique value." msgstr "カスタムフィールド '{name}'には一意の値が必要です。" -#: netbox/models/features.py:302 +#: netbox/netbox/models/features.py:302 #, python-brace-format msgid "Missing required custom field '{name}'." msgstr "必須カスタムフィールド'{name}'が見つかりません。" -#: netbox/models/features.py:462 +#: netbox/netbox/models/features.py:462 msgid "Remote data source" msgstr "リモートデータソース" -#: netbox/models/features.py:472 +#: netbox/netbox/models/features.py:472 msgid "data path" msgstr "データパス" -#: netbox/models/features.py:476 +#: netbox/netbox/models/features.py:476 msgid "Path to remote file (relative to data source root)" msgstr "リモートファイルへのパス (データソースルートからの相対パス)" -#: netbox/models/features.py:479 +#: netbox/netbox/models/features.py:479 msgid "auto sync enabled" msgstr "自動同期が有効" -#: netbox/models/features.py:481 +#: netbox/netbox/models/features.py:481 msgid "Enable automatic synchronization of data when the data file is updated" msgstr "データファイルの更新時にデータの自動同期を有効にする" -#: netbox/models/features.py:484 +#: netbox/netbox/models/features.py:484 msgid "date synced" msgstr "同期日付" -#: netbox/models/features.py:578 +#: netbox/netbox/models/features.py:578 #, python-brace-format msgid "{class_name} must implement a sync_data() method." msgstr "{class_name} はsync_data () メソッドを実装する必要があります。" -#: netbox/navigation/menu.py:11 +#: netbox/netbox/navigation/menu.py:11 msgid "Organization" msgstr "組織" -#: netbox/navigation/menu.py:19 +#: netbox/netbox/navigation/menu.py:19 msgid "Site Groups" msgstr "サイトグループ" -#: netbox/navigation/menu.py:27 +#: netbox/netbox/navigation/menu.py:27 msgid "Tenant Groups" msgstr "テナントグループ" -#: netbox/navigation/menu.py:34 +#: netbox/netbox/navigation/menu.py:34 msgid "Contact Groups" msgstr "連絡先グループ" -#: netbox/navigation/menu.py:35 templates/tenancy/contactrole.html:8 +#: netbox/netbox/navigation/menu.py:35 +#: netbox/templates/tenancy/contactrole.html:8 msgid "Contact Roles" msgstr "連絡先のロール" -#: netbox/navigation/menu.py:36 +#: netbox/netbox/navigation/menu.py:36 msgid "Contact Assignments" msgstr "連絡先の割り当て" -#: netbox/navigation/menu.py:50 +#: netbox/netbox/navigation/menu.py:50 msgid "Rack Roles" msgstr "ラックロール" -#: netbox/navigation/menu.py:54 +#: netbox/netbox/navigation/menu.py:54 msgid "Elevations" msgstr "ラック図" -#: netbox/navigation/menu.py:60 netbox/navigation/menu.py:62 +#: netbox/netbox/navigation/menu.py:60 netbox/netbox/navigation/menu.py:62 msgid "Rack Types" msgstr "ラックタイプ" -#: netbox/navigation/menu.py:76 +#: netbox/netbox/navigation/menu.py:76 msgid "Modules" msgstr "モジュール" -#: netbox/navigation/menu.py:80 templates/dcim/device.html:160 -#: templates/dcim/virtualdevicecontext.html:8 +#: netbox/netbox/navigation/menu.py:80 netbox/templates/dcim/device.html:160 +#: netbox/templates/dcim/virtualdevicecontext.html:8 msgid "Virtual Device Contexts" msgstr "仮想デバイスコンテキスト" -#: netbox/navigation/menu.py:88 +#: netbox/netbox/navigation/menu.py:88 msgid "Manufacturers" msgstr "メーカ" -#: netbox/navigation/menu.py:92 +#: netbox/netbox/navigation/menu.py:92 msgid "Device Components" msgstr "デバイス構成要素" -#: netbox/navigation/menu.py:104 templates/dcim/inventoryitemrole.html:8 +#: netbox/netbox/navigation/menu.py:104 +#: netbox/templates/dcim/inventoryitemrole.html:8 msgid "Inventory Item Roles" msgstr "在庫品目のロール" -#: netbox/navigation/menu.py:111 netbox/navigation/menu.py:115 +#: netbox/netbox/navigation/menu.py:111 netbox/netbox/navigation/menu.py:115 msgid "Connections" msgstr "接続" -#: netbox/navigation/menu.py:117 +#: netbox/netbox/navigation/menu.py:117 msgid "Cables" msgstr "ケーブル" -#: netbox/navigation/menu.py:118 +#: netbox/netbox/navigation/menu.py:118 msgid "Wireless Links" msgstr "無線リンク" -#: netbox/navigation/menu.py:121 +#: netbox/netbox/navigation/menu.py:121 msgid "Interface Connections" msgstr "インタフェース接続" -#: netbox/navigation/menu.py:126 +#: netbox/netbox/navigation/menu.py:126 msgid "Console Connections" msgstr "コンソール接続" -#: netbox/navigation/menu.py:131 +#: netbox/netbox/navigation/menu.py:131 msgid "Power Connections" msgstr "電源接続" -#: netbox/navigation/menu.py:147 +#: netbox/netbox/navigation/menu.py:147 msgid "Wireless LAN Groups" msgstr "無線 LAN グループ" -#: netbox/navigation/menu.py:168 +#: netbox/netbox/navigation/menu.py:168 msgid "Prefix & VLAN Roles" msgstr "プレフィックスと VLAN のロール" -#: netbox/navigation/menu.py:174 +#: netbox/netbox/navigation/menu.py:174 msgid "ASN Ranges" msgstr "ASN レンジ" -#: netbox/navigation/menu.py:196 +#: netbox/netbox/navigation/menu.py:196 msgid "VLAN Groups" msgstr "VLAN グループ" -#: netbox/navigation/menu.py:203 +#: netbox/netbox/navigation/menu.py:203 msgid "Service Templates" msgstr "サービステンプレート" -#: netbox/navigation/menu.py:204 templates/dcim/device.html:302 -#: templates/ipam/ipaddress.html:118 -#: templates/virtualization/virtualmachine.html:154 +#: netbox/netbox/navigation/menu.py:204 netbox/templates/dcim/device.html:302 +#: netbox/templates/ipam/ipaddress.html:118 +#: netbox/templates/virtualization/virtualmachine.html:154 msgid "Services" msgstr "サービス" -#: netbox/navigation/menu.py:211 +#: netbox/netbox/navigation/menu.py:211 msgid "VPN" msgstr "VPN" -#: netbox/navigation/menu.py:215 netbox/navigation/menu.py:217 -#: vpn/tables/tunnels.py:24 +#: netbox/netbox/navigation/menu.py:215 netbox/netbox/navigation/menu.py:217 +#: netbox/vpn/tables/tunnels.py:24 msgid "Tunnels" msgstr "トンネル" -#: netbox/navigation/menu.py:218 templates/vpn/tunnelgroup.html:8 +#: netbox/netbox/navigation/menu.py:218 +#: netbox/templates/vpn/tunnelgroup.html:8 msgid "Tunnel Groups" msgstr "トンネルグループ" -#: netbox/navigation/menu.py:219 +#: netbox/netbox/navigation/menu.py:219 msgid "Tunnel Terminations" msgstr "トンネルターミネーション" -#: netbox/navigation/menu.py:223 netbox/navigation/menu.py:225 -#: vpn/models/l2vpn.py:64 +#: netbox/netbox/navigation/menu.py:223 netbox/netbox/navigation/menu.py:225 +#: netbox/vpn/models/l2vpn.py:64 msgid "L2VPNs" msgstr "L2 VPN" -#: netbox/navigation/menu.py:226 templates/vpn/l2vpn.html:56 -#: templates/vpn/tunnel.html:72 vpn/tables/tunnels.py:58 +#: 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/navigation/menu.py:232 +#: netbox/netbox/navigation/menu.py:232 msgid "IKE Proposals" msgstr "IKEプロポザール" -#: netbox/navigation/menu.py:233 templates/vpn/ikeproposal.html:41 +#: netbox/netbox/navigation/menu.py:233 +#: netbox/templates/vpn/ikeproposal.html:41 msgid "IKE Policies" msgstr "IKE ポリシ" -#: netbox/navigation/menu.py:234 +#: netbox/netbox/navigation/menu.py:234 msgid "IPSec Proposals" msgstr "IPsec プロポーザル" -#: netbox/navigation/menu.py:235 templates/vpn/ipsecproposal.html:37 +#: netbox/netbox/navigation/menu.py:235 +#: netbox/templates/vpn/ipsecproposal.html:37 msgid "IPSec Policies" msgstr "IPsec ポリシ" -#: netbox/navigation/menu.py:236 templates/vpn/ikepolicy.html:38 -#: templates/vpn/ipsecpolicy.html:25 +#: netbox/netbox/navigation/menu.py:236 netbox/templates/vpn/ikepolicy.html:38 +#: netbox/templates/vpn/ipsecpolicy.html:25 msgid "IPSec Profiles" msgstr "IPsec プロファイル" -#: netbox/navigation/menu.py:243 templates/dcim/device_edit.html:78 -msgid "Virtualization" -msgstr "仮想化" - -#: netbox/navigation/menu.py:251 -#: templates/virtualization/virtualmachine.html:174 -#: templates/virtualization/virtualmachine/base.html:32 -#: templates/virtualization/virtualmachine_list.html:21 -#: virtualization/tables/virtualmachines.py:104 virtualization/views.py:388 +#: netbox/netbox/navigation/menu.py:251 +#: 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 msgid "Virtual Disks" msgstr "仮想ディスク" -#: netbox/navigation/menu.py:258 +#: netbox/netbox/navigation/menu.py:258 msgid "Cluster Types" msgstr "クラスタタイプ" -#: netbox/navigation/menu.py:259 +#: netbox/netbox/navigation/menu.py:259 msgid "Cluster Groups" msgstr "クラスタグループ" -#: netbox/navigation/menu.py:273 +#: netbox/netbox/navigation/menu.py:273 msgid "Circuit Types" msgstr "回線タイプ" -#: netbox/navigation/menu.py:274 +#: netbox/netbox/navigation/menu.py:274 msgid "Circuit Groups" msgstr "回路グループ" -#: netbox/navigation/menu.py:275 templates/circuits/circuit.html:66 +#: netbox/netbox/navigation/menu.py:275 +#: netbox/templates/circuits/circuit.html:66 msgid "Group Assignments" msgstr "グループ課題" -#: netbox/navigation/menu.py:276 +#: netbox/netbox/navigation/menu.py:276 msgid "Circuit Terminations" msgstr "回路終端" -#: netbox/navigation/menu.py:280 netbox/navigation/menu.py:282 +#: netbox/netbox/navigation/menu.py:280 netbox/netbox/navigation/menu.py:282 msgid "Providers" msgstr "プロバイダ" -#: netbox/navigation/menu.py:283 templates/circuits/provider.html:51 +#: netbox/netbox/navigation/menu.py:283 +#: netbox/templates/circuits/provider.html:51 msgid "Provider Accounts" msgstr "プロバイダアカウント" -#: netbox/navigation/menu.py:284 +#: netbox/netbox/navigation/menu.py:284 msgid "Provider Networks" msgstr "プロバイダネットワーク" -#: netbox/navigation/menu.py:298 +#: netbox/netbox/navigation/menu.py:298 msgid "Power Panels" msgstr "電源盤" -#: netbox/navigation/menu.py:309 +#: netbox/netbox/navigation/menu.py:309 msgid "Configurations" msgstr "コンフィギュレーション" -#: netbox/navigation/menu.py:311 +#: netbox/netbox/navigation/menu.py:311 msgid "Config Contexts" msgstr "コンフィグコンテキスト" -#: netbox/navigation/menu.py:312 +#: netbox/netbox/navigation/menu.py:312 msgid "Config Templates" msgstr "設定テンプレート" -#: netbox/navigation/menu.py:319 netbox/navigation/menu.py:323 +#: netbox/netbox/navigation/menu.py:319 netbox/netbox/navigation/menu.py:323 msgid "Customization" msgstr "カスタマイズ" -#: netbox/navigation/menu.py:325 templates/dcim/device_edit.html:103 -#: templates/dcim/htmx/cable_edit.html:81 -#: templates/dcim/virtualchassis_add.html:31 -#: templates/dcim/virtualchassis_edit.html:40 -#: templates/generic/bulk_edit.html:76 templates/htmx/form.html:19 -#: templates/inc/filter_list.html:30 templates/inc/panels/custom_fields.html:7 -#: templates/ipam/ipaddress_bulk_add.html:35 templates/ipam/vlan_edit.html:59 +#: netbox/netbox/navigation/menu.py:325 +#: netbox/templates/dcim/device_edit.html:103 +#: netbox/templates/dcim/htmx/cable_edit.html:81 +#: netbox/templates/dcim/virtualchassis_add.html:31 +#: netbox/templates/dcim/virtualchassis_edit.html:40 +#: netbox/templates/generic/bulk_edit.html:76 +#: netbox/templates/htmx/form.html:19 netbox/templates/inc/filter_list.html:30 +#: netbox/templates/inc/panels/custom_fields.html:7 +#: netbox/templates/ipam/ipaddress_bulk_add.html:35 +#: netbox/templates/ipam/vlan_edit.html:59 msgid "Custom Fields" msgstr "カスタムフィールド" -#: netbox/navigation/menu.py:326 +#: netbox/netbox/navigation/menu.py:326 msgid "Custom Field Choices" msgstr "カスタムフィールド選択肢" -#: netbox/navigation/menu.py:327 +#: netbox/netbox/navigation/menu.py:327 msgid "Custom Links" msgstr "カスタムリンク" -#: netbox/navigation/menu.py:328 +#: netbox/netbox/navigation/menu.py:328 msgid "Export Templates" msgstr "エクスポートテンプレート" -#: netbox/navigation/menu.py:329 +#: netbox/netbox/navigation/menu.py:329 msgid "Saved Filters" msgstr "保存済みフィルタ" -#: netbox/navigation/menu.py:331 +#: netbox/netbox/navigation/menu.py:331 msgid "Image Attachments" msgstr "画像添付ファイル" -#: netbox/navigation/menu.py:349 +#: netbox/netbox/navigation/menu.py:349 msgid "Operations" msgstr "オペレーション" -#: netbox/navigation/menu.py:353 +#: netbox/netbox/navigation/menu.py:353 msgid "Integrations" msgstr "インテグレーション" -#: netbox/navigation/menu.py:355 +#: netbox/netbox/navigation/menu.py:355 msgid "Data Sources" msgstr "データソース" -#: netbox/navigation/menu.py:356 +#: netbox/netbox/navigation/menu.py:356 msgid "Event Rules" msgstr "イベントルール" -#: netbox/navigation/menu.py:357 +#: netbox/netbox/navigation/menu.py:357 msgid "Webhooks" msgstr "ウェブフック" -#: netbox/navigation/menu.py:361 netbox/navigation/menu.py:365 -#: netbox/views/generic/feature_views.py:153 -#: templates/extras/report/base.html:37 templates/extras/script/base.html:36 +#: netbox/netbox/navigation/menu.py:361 netbox/netbox/navigation/menu.py:365 +#: netbox/netbox/views/generic/feature_views.py:153 +#: netbox/templates/extras/report/base.html:37 +#: netbox/templates/extras/script/base.html:36 msgid "Jobs" msgstr "ジョブ" -#: netbox/navigation/menu.py:371 +#: netbox/netbox/navigation/menu.py:371 msgid "Logging" msgstr "ロギング" -#: netbox/navigation/menu.py:373 +#: netbox/netbox/navigation/menu.py:373 msgid "Notification Groups" msgstr "通知グループ" -#: netbox/navigation/menu.py:374 +#: netbox/netbox/navigation/menu.py:374 msgid "Journal Entries" msgstr "ジャーナルエントリ" -#: netbox/navigation/menu.py:375 templates/core/objectchange.html:9 -#: templates/core/objectchange_list.html:4 +#: netbox/netbox/navigation/menu.py:375 +#: netbox/templates/core/objectchange.html:9 +#: netbox/templates/core/objectchange_list.html:4 msgid "Change Log" msgstr "変更ログ" -#: netbox/navigation/menu.py:382 templates/inc/user_menu.html:29 +#: netbox/netbox/navigation/menu.py:382 netbox/templates/inc/user_menu.html:29 msgid "Admin" msgstr "管理者" -#: netbox/navigation/menu.py:430 templates/account/base.html:27 -#: templates/inc/user_menu.html:57 +#: netbox/netbox/navigation/menu.py:430 netbox/templates/account/base.html:27 +#: netbox/templates/inc/user_menu.html:57 msgid "API Tokens" msgstr "API トークン" -#: netbox/navigation/menu.py:437 users/forms/model_forms.py:187 -#: users/forms/model_forms.py:195 users/forms/model_forms.py:242 -#: users/forms/model_forms.py:249 +#: netbox/netbox/navigation/menu.py:437 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/navigation/menu.py:445 netbox/navigation/menu.py:449 -#: templates/core/system.html:7 +#: netbox/netbox/navigation/menu.py:445 netbox/netbox/navigation/menu.py:449 +#: netbox/templates/core/system.html:7 msgid "System" msgstr "システム" -#: netbox/navigation/menu.py:454 netbox/navigation/menu.py:502 -#: templates/500.html:35 templates/account/preferences.html:22 -#: templates/core/plugin.html:13 templates/core/plugin_list.html:7 -#: templates/core/plugin_list.html:12 +#: netbox/netbox/navigation/menu.py:454 netbox/netbox/navigation/menu.py:502 +#: netbox/templates/500.html:35 netbox/templates/account/preferences.html:22 +#: netbox/templates/core/plugin.html:13 +#: netbox/templates/core/plugin_list.html:7 +#: netbox/templates/core/plugin_list.html:12 msgid "Plugins" msgstr "プラグイン" -#: netbox/navigation/menu.py:459 +#: netbox/netbox/navigation/menu.py:459 msgid "Configuration History" msgstr "設定履歴" -#: netbox/navigation/menu.py:465 templates/core/rq_task.html:8 -#: templates/core/rq_task_list.html:22 +#: netbox/netbox/navigation/menu.py:465 netbox/templates/core/rq_task.html:8 +#: netbox/templates/core/rq_task_list.html:22 msgid "Background Tasks" msgstr "バックグラウンドタスク" -#: netbox/plugins/navigation.py:47 netbox/plugins/navigation.py:69 +#: netbox/netbox/plugins/navigation.py:47 +#: netbox/netbox/plugins/navigation.py:69 msgid "Permissions must be passed as a tuple or list." msgstr "権限はタプルまたはリストとして渡す必要があります。" -#: netbox/plugins/navigation.py:51 +#: netbox/netbox/plugins/navigation.py:51 msgid "Buttons must be passed as a tuple or list." msgstr "ボタンはタプルまたはリストとして渡す必要があります。" -#: netbox/plugins/navigation.py:73 +#: netbox/netbox/plugins/navigation.py:73 msgid "Button color must be a choice within ButtonColorChoices." msgstr "ボタンの色はButtonColorChoicesから選択する必要があります。" -#: netbox/plugins/registration.py:25 +#: netbox/netbox/plugins/registration.py:25 #, python-brace-format msgid "" "PluginTemplateExtension class {template_extension} was passed as an " "instance!" msgstr "PluginTemplateExtension クラス {template_extension} がインスタンスとして渡されました!" -#: netbox/plugins/registration.py:31 +#: netbox/netbox/plugins/registration.py:31 #, python-brace-format msgid "" "{template_extension} is not a subclass of " @@ -10392,1329 +11099,1390 @@ msgstr "" "{template_extension} はnetbox.plugins.Plugins.PluginTemplate Extension " "のサブクラスではありません!" -#: netbox/plugins/registration.py:51 +#: netbox/netbox/plugins/registration.py:51 #, python-brace-format msgid "{item} must be an instance of netbox.plugins.PluginMenuItem" msgstr "{item} はnetbox.Plugins.PluginMenuItem のインスタンスでなければなりません" -#: netbox/plugins/registration.py:62 +#: netbox/netbox/plugins/registration.py:62 #, python-brace-format msgid "{menu_link} must be an instance of netbox.plugins.PluginMenuItem" msgstr "{menu_link} はnetbox.plugins.PluginMenuItem のインスタンスでなければなりません" -#: netbox/plugins/registration.py:67 +#: netbox/netbox/plugins/registration.py:67 #, python-brace-format msgid "{button} must be an instance of netbox.plugins.PluginMenuButton" msgstr "{button} netbox.plugins.Plugin.MenuButton のインスタンスでなければなりません" -#: netbox/plugins/templates.py:37 +#: netbox/netbox/plugins/templates.py:37 msgid "extra_context must be a dictionary" msgstr "extra_contextはディクショナリでなければなりません" -#: netbox/preferences.py:19 +#: netbox/netbox/preferences.py:19 msgid "HTMX Navigation" msgstr "HTMX ナビゲーション" -#: netbox/preferences.py:24 +#: netbox/netbox/preferences.py:24 msgid "Enable dynamic UI navigation" msgstr "動的 UI ナビゲーションを有効にする" -#: netbox/preferences.py:26 +#: netbox/netbox/preferences.py:26 msgid "Experimental feature" msgstr "実験的機能" -#: netbox/preferences.py:29 +#: netbox/netbox/preferences.py:29 msgid "Language" msgstr "言語" -#: netbox/preferences.py:34 +#: netbox/netbox/preferences.py:34 msgid "Forces UI translation to the specified language" msgstr "UI を指定された言語に強制的に翻訳します" -#: netbox/preferences.py:36 +#: netbox/netbox/preferences.py:36 msgid "Support for translation has been disabled locally" msgstr "翻訳のサポートはローカルで無効になっています" -#: netbox/preferences.py:42 +#: netbox/netbox/preferences.py:42 msgid "Page length" msgstr "ページの長さ" -#: netbox/preferences.py:44 +#: netbox/netbox/preferences.py:44 msgid "The default number of objects to display per page" msgstr "1 ページに表示するデフォルトのオブジェクト数" -#: netbox/preferences.py:48 +#: netbox/netbox/preferences.py:48 msgid "Paginator placement" msgstr "ページネータの配置" -#: netbox/preferences.py:50 +#: netbox/netbox/preferences.py:50 msgid "Bottom" msgstr "下部" -#: netbox/preferences.py:51 +#: netbox/netbox/preferences.py:51 msgid "Top" msgstr "上部" -#: netbox/preferences.py:52 +#: netbox/netbox/preferences.py:52 msgid "Both" msgstr "両方" -#: netbox/preferences.py:55 +#: netbox/netbox/preferences.py:55 msgid "Where the paginator controls will be displayed relative to a table" msgstr "テーブルを基とした、ページネータが表示される場所" -#: netbox/preferences.py:60 +#: netbox/netbox/preferences.py:60 msgid "Data format" msgstr "データ形式" -#: netbox/preferences.py:65 +#: netbox/netbox/preferences.py:65 msgid "The preferred syntax for displaying generic data within the UI" msgstr "UI 内で汎用データを表示するための推奨構文" -#: netbox/registry.py:14 +#: netbox/netbox/registry.py:14 #, python-brace-format msgid "Invalid store: {key}" msgstr "ストアが無効です: {key}" -#: netbox/registry.py:17 +#: netbox/netbox/registry.py:17 msgid "Cannot add stores to registry after initialization" msgstr "初期化後にストアをレジストリに追加できません" -#: netbox/registry.py:20 +#: netbox/netbox/registry.py:20 msgid "Cannot delete stores from registry" msgstr "レジストリからストアを削除できません" -#: netbox/settings.py:760 +#: netbox/netbox/settings.py:760 msgid "Czech" msgstr "チェコ語" -#: netbox/settings.py:761 +#: netbox/netbox/settings.py:761 msgid "Danish" msgstr "デンマーク語" -#: netbox/settings.py:762 +#: netbox/netbox/settings.py:762 msgid "German" msgstr "ドイツ人" -#: netbox/settings.py:763 +#: netbox/netbox/settings.py:763 msgid "English" msgstr "英語" -#: netbox/settings.py:764 +#: netbox/netbox/settings.py:764 msgid "Spanish" msgstr "スペイン語" -#: netbox/settings.py:765 +#: netbox/netbox/settings.py:765 msgid "French" msgstr "フランス語" -#: netbox/settings.py:766 +#: netbox/netbox/settings.py:766 msgid "Italian" msgstr "イタリア語" -#: netbox/settings.py:767 +#: netbox/netbox/settings.py:767 msgid "Japanese" msgstr "日本語" -#: netbox/settings.py:768 +#: netbox/netbox/settings.py:768 msgid "Dutch" msgstr "オランダ語" -#: netbox/settings.py:769 +#: netbox/netbox/settings.py:769 msgid "Polish" msgstr "ポーランド語" -#: netbox/settings.py:770 +#: netbox/netbox/settings.py:770 msgid "Portuguese" msgstr "ポルトガル語" -#: netbox/settings.py:771 +#: netbox/netbox/settings.py:771 msgid "Russian" msgstr "ロシア語" -#: netbox/settings.py:772 +#: netbox/netbox/settings.py:772 msgid "Turkish" msgstr "トルコ語" -#: netbox/settings.py:773 +#: netbox/netbox/settings.py:773 msgid "Ukrainian" msgstr "ウクライナ語" -#: netbox/settings.py:774 +#: netbox/netbox/settings.py:774 msgid "Chinese" msgstr "中国語" -#: netbox/tables/columns.py:176 +#: netbox/netbox/tables/columns.py:176 msgid "Select all" msgstr "すべて選択" -#: netbox/tables/columns.py:189 +#: netbox/netbox/tables/columns.py:189 msgid "Toggle all" msgstr "すべて切り替え" -#: netbox/tables/columns.py:300 +#: netbox/netbox/tables/columns.py:300 msgid "Toggle Dropdown" msgstr "ドロップダウンを切り替え" -#: netbox/tables/columns.py:572 templates/core/job.html:53 +#: netbox/netbox/tables/columns.py:572 netbox/templates/core/job.html:53 msgid "Error" msgstr "エラー" -#: netbox/tables/tables.py:58 +#: netbox/netbox/tables/tables.py:58 #, python-brace-format msgid "No {model_name} found" msgstr "{model_name} が見つかりません" -#: netbox/tables/tables.py:249 templates/generic/bulk_import.html:117 +#: netbox/netbox/tables/tables.py:249 +#: netbox/templates/generic/bulk_import.html:117 msgid "Field" msgstr "フィールド" -#: netbox/tables/tables.py:252 +#: netbox/netbox/tables/tables.py:252 msgid "Value" msgstr "値" -#: netbox/tests/dummy_plugin/navigation.py:29 +#: netbox/netbox/tests/dummy_plugin/navigation.py:29 msgid "Dummy Plugin" msgstr "ダミープラグイン" -#: netbox/views/generic/bulk_views.py:114 +#: netbox/netbox/views/generic/bulk_views.py:114 #, python-brace-format msgid "" "There was an error rendering the selected export template ({template}): " "{error}" msgstr "選択したエクスポートテンプレートをレンダリング中にエラーが発生しました ({template}): {error}" -#: netbox/views/generic/bulk_views.py:416 +#: netbox/netbox/views/generic/bulk_views.py:416 #, python-brace-format msgid "Row {i}: Object with ID {id} does not exist" msgstr "行 {i}: ID {id}のオブジェクトは存在しません" -#: netbox/views/generic/bulk_views.py:702 -#: netbox/views/generic/bulk_views.py:900 -#: netbox/views/generic/bulk_views.py:948 +#: netbox/netbox/views/generic/bulk_views.py:709 +#: netbox/netbox/views/generic/bulk_views.py:910 +#: netbox/netbox/views/generic/bulk_views.py:958 #, python-brace-format msgid "No {object_type} were selected." msgstr "いいえ {object_type} が選ばれました。" -#: netbox/views/generic/bulk_views.py:782 +#: netbox/netbox/views/generic/bulk_views.py:788 #, python-brace-format msgid "Renamed {count} {object_type}" msgstr "名前が変更されました {count} {object_type}" -#: netbox/views/generic/bulk_views.py:878 +#: netbox/netbox/views/generic/bulk_views.py:888 #, python-brace-format msgid "Deleted {count} {object_type}" msgstr "削除済み {count} {object_type}" -#: netbox/views/generic/feature_views.py:40 +#: netbox/netbox/views/generic/feature_views.py:40 msgid "Changelog" msgstr "変更ログ" -#: netbox/views/generic/feature_views.py:93 +#: netbox/netbox/views/generic/feature_views.py:93 msgid "Journal" msgstr "ジャーナル" -#: netbox/views/generic/feature_views.py:207 +#: netbox/netbox/views/generic/feature_views.py:207 msgid "Unable to synchronize data: No data file set." msgstr "データを同期できません:データファイルが設定されていません。" -#: netbox/views/generic/feature_views.py:211 +#: netbox/netbox/views/generic/feature_views.py:211 #, python-brace-format msgid "Synchronized data for {object_type} {object}." msgstr "の同期データ {object_type} {object}。" -#: netbox/views/generic/feature_views.py:236 +#: netbox/netbox/views/generic/feature_views.py:236 #, python-brace-format msgid "Synced {count} {object_type}" msgstr "同期済み {count} {object_type}" -#: netbox/views/generic/object_views.py:108 +#: netbox/netbox/views/generic/object_views.py:108 #, python-brace-format msgid "{class_name} must implement get_children()" msgstr "{class_name} はget_children () を実装する必要があります" -#: netbox/views/misc.py:44 +#: netbox/netbox/views/misc.py:46 msgid "" "There was an error loading the dashboard configuration. A default dashboard " "is in use." msgstr "ダッシュボード設定の読込中にエラーが発生しました。デフォルトのダッシュボードが使用中です。" -#: templates/403.html:4 +#: netbox/templates/403.html:4 msgid "Access Denied" msgstr "アクセス拒否" -#: templates/403.html:9 +#: netbox/templates/403.html:9 msgid "You do not have permission to access this page" msgstr "このページにアクセスする権限がありません" -#: templates/404.html:4 +#: netbox/templates/404.html:4 msgid "Page Not Found" msgstr "ページが見つかりません" -#: templates/404.html:9 +#: netbox/templates/404.html:9 msgid "The requested page does not exist" msgstr "要求されたページは存在しません" -#: templates/500.html:7 templates/500.html:18 +#: netbox/templates/500.html:7 netbox/templates/500.html:18 msgid "Server Error" msgstr "サーバエラー" -#: templates/500.html:23 +#: netbox/templates/500.html:23 msgid "There was a problem with your request. Please contact an administrator" msgstr "リクエストに問題がありました。管理者に問い合わせてください。" -#: templates/500.html:28 +#: netbox/templates/500.html:28 msgid "The complete exception is provided below" msgstr "The complete exception is provided below" -#: templates/500.html:33 templates/core/system.html:40 +#: netbox/templates/500.html:33 netbox/templates/core/system.html:40 msgid "Python version" msgstr "Python version" -#: templates/500.html:34 +#: netbox/templates/500.html:34 msgid "NetBox version" msgstr "NetBox version" -#: templates/500.html:36 +#: netbox/templates/500.html:36 msgid "None installed" msgstr "None installed" -#: templates/500.html:39 +#: netbox/templates/500.html:39 msgid "If further assistance is required, please post to the" msgstr "さらにサポートが必要な場合は、以下サイトに投稿してください。" -#: templates/500.html:39 +#: netbox/templates/500.html:39 msgid "NetBox discussion forum" msgstr "NetBox ディスカッションフォーラム" -#: templates/500.html:39 +#: netbox/templates/500.html:39 msgid "on GitHub" msgstr "(GitHub)" -#: templates/500.html:42 templates/base/40x.html:17 +#: netbox/templates/500.html:42 netbox/templates/base/40x.html:17 msgid "Home Page" msgstr "ホームページ" -#: templates/account/base.html:7 templates/inc/user_menu.html:45 -#: vpn/forms/bulk_edit.py:255 vpn/forms/filtersets.py:189 -#: vpn/forms/model_forms.py:379 +#: netbox/templates/account/base.html:7 netbox/templates/inc/user_menu.html:45 +#: netbox/vpn/forms/bulk_edit.py:255 netbox/vpn/forms/filtersets.py:189 +#: netbox/vpn/forms/model_forms.py:379 msgid "Profile" msgstr "プロフィール" -#: templates/account/base.html:13 templates/account/notifications.html:7 -#: templates/inc/user_menu.html:15 +#: netbox/templates/account/base.html:13 +#: netbox/templates/account/notifications.html:7 +#: netbox/templates/inc/user_menu.html:15 msgid "Notifications" msgstr "通知" -#: templates/account/base.html:16 templates/account/subscriptions.html:7 -#: templates/inc/user_menu.html:51 +#: netbox/templates/account/base.html:16 +#: netbox/templates/account/subscriptions.html:7 +#: netbox/templates/inc/user_menu.html:51 msgid "Subscriptions" msgstr "サブスクリプション" -#: templates/account/base.html:19 templates/inc/user_menu.html:54 +#: netbox/templates/account/base.html:19 +#: netbox/templates/inc/user_menu.html:54 msgid "Preferences" msgstr "環境設定" -#: templates/account/password.html:5 +#: netbox/templates/account/password.html:5 msgid "Change Password" msgstr "パスワードを変更" -#: templates/account/password.html:19 templates/account/preferences.html:77 -#: templates/core/configrevision_restore.html:63 -#: templates/dcim/devicebay_populate.html:34 -#: templates/dcim/virtualchassis_add_member.html:26 -#: templates/dcim/virtualchassis_edit.html:103 -#: templates/extras/object_journal.html:26 templates/extras/script.html:38 -#: templates/generic/bulk_add_component.html:67 -#: templates/generic/bulk_delete.html:65 templates/generic/bulk_edit.html:106 -#: templates/generic/bulk_import.html:56 templates/generic/bulk_import.html:78 -#: templates/generic/bulk_import.html:100 -#: templates/generic/bulk_remove.html:62 templates/generic/bulk_rename.html:63 -#: templates/generic/confirmation_form.html:19 -#: templates/generic/object_edit.html:72 templates/htmx/delete_form.html:53 -#: templates/htmx/delete_form.html:55 templates/ipam/ipaddress_assign.html:28 -#: templates/virtualization/cluster_add_devices.html:30 +#: netbox/templates/account/password.html:19 +#: netbox/templates/account/preferences.html:77 +#: netbox/templates/core/configrevision_restore.html:63 +#: netbox/templates/dcim/devicebay_populate.html:34 +#: netbox/templates/dcim/virtualchassis_add_member.html:26 +#: netbox/templates/dcim/virtualchassis_edit.html:103 +#: netbox/templates/extras/object_journal.html:26 +#: netbox/templates/extras/script.html:38 +#: netbox/templates/generic/bulk_add_component.html:67 +#: netbox/templates/generic/bulk_delete.html:65 +#: netbox/templates/generic/bulk_edit.html:106 +#: netbox/templates/generic/bulk_import.html:56 +#: netbox/templates/generic/bulk_import.html:78 +#: netbox/templates/generic/bulk_import.html:100 +#: netbox/templates/generic/bulk_remove.html:62 +#: netbox/templates/generic/bulk_rename.html:63 +#: netbox/templates/generic/confirmation_form.html:19 +#: netbox/templates/generic/object_edit.html:72 +#: netbox/templates/htmx/delete_form.html:53 +#: netbox/templates/htmx/delete_form.html:55 +#: netbox/templates/ipam/ipaddress_assign.html:28 +#: netbox/templates/virtualization/cluster_add_devices.html:30 msgid "Cancel" msgstr "キャンセル" -#: templates/account/password.html:20 templates/account/preferences.html:78 -#: templates/dcim/devicebay_populate.html:35 -#: templates/dcim/virtualchassis_add_member.html:28 -#: templates/dcim/virtualchassis_edit.html:105 -#: templates/extras/dashboard/widget_add.html:26 -#: templates/extras/dashboard/widget_config.html:19 -#: templates/extras/object_journal.html:27 -#: templates/generic/object_edit.html:75 -#: utilities/templates/helpers/applied_filters.html:16 -#: utilities/templates/helpers/table_config_form.html:40 +#: netbox/templates/account/password.html:20 +#: netbox/templates/account/preferences.html:78 +#: netbox/templates/dcim/devicebay_populate.html:35 +#: netbox/templates/dcim/virtualchassis_add_member.html:28 +#: netbox/templates/dcim/virtualchassis_edit.html:105 +#: netbox/templates/extras/dashboard/widget_add.html:26 +#: netbox/templates/extras/dashboard/widget_config.html:19 +#: netbox/templates/extras/object_journal.html:27 +#: netbox/templates/generic/object_edit.html:75 +#: netbox/utilities/templates/helpers/applied_filters.html:16 +#: netbox/utilities/templates/helpers/table_config_form.html:40 msgid "Save" msgstr "保存" -#: templates/account/preferences.html:34 +#: netbox/templates/account/preferences.html:34 msgid "Table Configurations" msgstr "テーブル設定" -#: templates/account/preferences.html:39 +#: netbox/templates/account/preferences.html:39 msgid "Clear table preferences" msgstr "テーブル設定をクリア" -#: templates/account/preferences.html:47 +#: netbox/templates/account/preferences.html:47 msgid "Toggle All" msgstr "すべて切り替え" -#: templates/account/preferences.html:49 +#: netbox/templates/account/preferences.html:49 msgid "Table" msgstr "テーブル" -#: templates/account/preferences.html:50 +#: netbox/templates/account/preferences.html:50 msgid "Ordering" msgstr "注文" -#: templates/account/preferences.html:51 +#: netbox/templates/account/preferences.html:51 msgid "Columns" msgstr "列" -#: templates/account/preferences.html:71 templates/dcim/cable_trace.html:113 -#: templates/extras/object_configcontext.html:43 +#: netbox/templates/account/preferences.html:71 +#: netbox/templates/dcim/cable_trace.html:113 +#: netbox/templates/extras/object_configcontext.html:43 msgid "None found" msgstr "何も見つかりませんでした" -#: templates/account/profile.html:6 +#: netbox/templates/account/profile.html:6 msgid "User Profile" msgstr "ユーザプロフィール" -#: templates/account/profile.html:12 +#: netbox/templates/account/profile.html:12 msgid "Account Details" msgstr "アカウント詳細" -#: templates/account/profile.html:29 templates/tenancy/contact.html:43 -#: templates/users/user.html:25 tenancy/forms/bulk_edit.py:109 +#: netbox/templates/account/profile.html:29 +#: netbox/templates/tenancy/contact.html:43 +#: netbox/templates/users/user.html:25 netbox/tenancy/forms/bulk_edit.py:109 msgid "Email" msgstr "メール" -#: templates/account/profile.html:33 templates/users/user.html:29 +#: netbox/templates/account/profile.html:33 +#: netbox/templates/users/user.html:29 msgid "Account Created" msgstr "アカウント作成日時" -#: templates/account/profile.html:37 templates/users/user.html:33 +#: netbox/templates/account/profile.html:37 +#: netbox/templates/users/user.html:33 msgid "Last Login" msgstr "最終ログイン" -#: templates/account/profile.html:41 templates/users/user.html:45 +#: netbox/templates/account/profile.html:41 +#: netbox/templates/users/user.html:45 msgid "Superuser" msgstr "スーパーユーザ" -#: templates/account/profile.html:45 templates/inc/user_menu.html:31 -#: templates/users/user.html:41 +#: netbox/templates/account/profile.html:45 +#: netbox/templates/inc/user_menu.html:31 netbox/templates/users/user.html:41 msgid "Staff" msgstr "スタッフ" -#: templates/account/profile.html:53 templates/users/objectpermission.html:82 -#: templates/users/user.html:53 +#: netbox/templates/account/profile.html:53 +#: netbox/templates/users/objectpermission.html:82 +#: netbox/templates/users/user.html:53 msgid "Assigned Groups" msgstr "割当グループ" -#: templates/account/profile.html:58 -#: templates/circuits/circuit_terminations_swap.html:18 -#: templates/circuits/circuit_terminations_swap.html:26 -#: templates/circuits/circuittermination.html:34 -#: templates/circuits/inc/circuit_termination.html:68 -#: templates/core/objectchange.html:124 templates/core/objectchange.html:142 -#: templates/dcim/devicebay.html:59 -#: templates/dcim/inc/panels/inventory_items.html:45 -#: templates/dcim/interface.html:296 templates/dcim/modulebay.html:80 -#: templates/extras/configcontext.html:70 templates/extras/eventrule.html:66 -#: templates/extras/htmx/script_result.html:60 -#: templates/extras/webhook.html:65 templates/extras/webhook.html:75 -#: templates/inc/panel_table.html:13 templates/inc/panels/comments.html:10 -#: templates/ipam/inc/panels/fhrp_groups.html:56 templates/users/group.html:34 -#: templates/users/group.html:44 templates/users/objectpermission.html:77 -#: templates/users/objectpermission.html:87 templates/users/user.html:58 -#: templates/users/user.html:68 +#: netbox/templates/account/profile.html:58 +#: netbox/templates/circuits/circuit_terminations_swap.html:18 +#: netbox/templates/circuits/circuit_terminations_swap.html:26 +#: netbox/templates/circuits/circuittermination.html:34 +#: netbox/templates/circuits/inc/circuit_termination.html:68 +#: netbox/templates/core/objectchange.html:124 +#: 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/modulebay.html:80 +#: netbox/templates/extras/configcontext.html:70 +#: netbox/templates/extras/eventrule.html:66 +#: netbox/templates/extras/htmx/script_result.html:60 +#: netbox/templates/extras/webhook.html:65 +#: netbox/templates/extras/webhook.html:75 +#: netbox/templates/inc/panel_table.html:13 +#: netbox/templates/inc/panels/comments.html:10 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:56 +#: netbox/templates/users/group.html:34 netbox/templates/users/group.html:44 +#: netbox/templates/users/objectpermission.html:77 +#: netbox/templates/users/objectpermission.html:87 +#: netbox/templates/users/user.html:58 netbox/templates/users/user.html:68 msgid "None" msgstr "なし" -#: templates/account/profile.html:68 templates/users/user.html:78 +#: netbox/templates/account/profile.html:68 +#: netbox/templates/users/user.html:78 msgid "Recent Activity" msgstr "最近のアクティビティ" -#: templates/account/token.html:8 templates/account/token_list.html:6 +#: netbox/templates/account/token.html:8 +#: netbox/templates/account/token_list.html:6 msgid "My API Tokens" msgstr "マイ API トークン" -#: templates/account/token.html:11 templates/account/token.html:19 -#: templates/users/token.html:6 templates/users/token.html:14 -#: users/forms/filtersets.py:120 +#: netbox/templates/account/token.html:11 +#: netbox/templates/account/token.html:19 netbox/templates/users/token.html:6 +#: netbox/templates/users/token.html:14 netbox/users/forms/filtersets.py:120 msgid "Token" msgstr "トークン" -#: templates/account/token.html:39 templates/users/token.html:31 -#: users/forms/bulk_edit.py:107 +#: netbox/templates/account/token.html:39 netbox/templates/users/token.html:31 +#: netbox/users/forms/bulk_edit.py:107 msgid "Write enabled" msgstr "書き込み可能" -#: templates/account/token.html:51 templates/users/token.html:43 +#: netbox/templates/account/token.html:51 netbox/templates/users/token.html:43 msgid "Last used" msgstr "最終使用日" -#: templates/account/token_list.html:12 +#: netbox/templates/account/token_list.html:12 msgid "Add a Token" msgstr "トークンを追加" -#: templates/base/base.html:22 templates/home.html:27 +#: netbox/templates/base/base.html:22 netbox/templates/home.html:27 msgid "Home" msgstr "ホーム" -#: templates/base/layout.html:25 +#: netbox/templates/base/layout.html:25 msgid "NetBox Motif" msgstr "ネットボックスモチーフ" -#: templates/base/layout.html:38 templates/base/layout.html:39 -#: templates/login.html:14 templates/login.html:15 +#: netbox/templates/base/layout.html:38 netbox/templates/base/layout.html:39 +#: netbox/templates/login.html:14 netbox/templates/login.html:15 msgid "NetBox Logo" msgstr "NetBoxロゴ" -#: templates/base/layout.html:150 templates/base/layout.html:151 +#: netbox/templates/base/layout.html:150 netbox/templates/base/layout.html:151 msgid "Docs" msgstr "ドキュメント" -#: templates/base/layout.html:156 templates/base/layout.html:157 -#: templates/rest_framework/api.html:10 +#: netbox/templates/base/layout.html:156 netbox/templates/base/layout.html:157 +#: netbox/templates/rest_framework/api.html:10 msgid "REST API" msgstr "REST API" -#: templates/base/layout.html:162 templates/base/layout.html:163 +#: netbox/templates/base/layout.html:162 netbox/templates/base/layout.html:163 msgid "REST API documentation" msgstr "REST API ドキュメント" -#: templates/base/layout.html:169 templates/base/layout.html:170 +#: netbox/templates/base/layout.html:169 netbox/templates/base/layout.html:170 msgid "GraphQL API" msgstr "GraphQL API" -#: templates/base/layout.html:185 templates/base/layout.html:186 +#: netbox/templates/base/layout.html:185 netbox/templates/base/layout.html:186 msgid "NetBox Labs Support" msgstr "ネットボックスラボサポート" -#: templates/base/layout.html:194 templates/base/layout.html:195 +#: netbox/templates/base/layout.html:194 netbox/templates/base/layout.html:195 msgid "Source Code" msgstr "ソースコード" -#: templates/base/layout.html:200 templates/base/layout.html:201 +#: netbox/templates/base/layout.html:200 netbox/templates/base/layout.html:201 msgid "Community" msgstr "コミュニティ" -#: templates/circuits/circuit.html:47 +#: netbox/templates/circuits/circuit.html:47 msgid "Install Date" msgstr "インストール日" -#: templates/circuits/circuit.html:51 +#: netbox/templates/circuits/circuit.html:51 msgid "Termination Date" msgstr "終端日" -#: templates/circuits/circuit.html:70 -#: templates/ipam/inc/panels/fhrp_groups.html:15 +#: netbox/templates/circuits/circuit.html:70 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:15 msgid "Assign Group" msgstr "グループを割り当て" -#: templates/circuits/circuit_terminations_swap.html:4 +#: netbox/templates/circuits/circuit_terminations_swap.html:4 msgid "Swap Circuit Terminations" msgstr "回線終端を交換する" -#: templates/circuits/circuit_terminations_swap.html:8 +#: netbox/templates/circuits/circuit_terminations_swap.html:8 #, python-format msgid "Swap these terminations for circuit %(circuit)s?" msgstr "回線%(circuit)sの終端を交換しますか?" -#: templates/circuits/circuit_terminations_swap.html:14 +#: netbox/templates/circuits/circuit_terminations_swap.html:14 msgid "A side" msgstr "Aサイド" -#: templates/circuits/circuit_terminations_swap.html:22 +#: netbox/templates/circuits/circuit_terminations_swap.html:22 msgid "Z side" msgstr "Z サイド" -#: templates/circuits/circuitgroup.html:16 +#: netbox/templates/circuits/circuitgroup.html:16 msgid "Assign Circuit" msgstr "回路を割り当て" -#: templates/circuits/circuitgroupassignment.html:19 +#: netbox/templates/circuits/circuitgroupassignment.html:19 msgid "Circuit Group Assignment" msgstr "回路グループ割り当て" -#: templates/circuits/circuittype.html:10 +#: netbox/templates/circuits/circuittype.html:10 msgid "Add Circuit" msgstr "回線を追加" -#: templates/circuits/circuittype.html:19 +#: netbox/templates/circuits/circuittype.html:19 msgid "Circuit Type" msgstr "回線タイプ" -#: templates/circuits/inc/circuit_termination.html:10 -#: templates/dcim/manufacturer.html:11 -#: templates/generic/bulk_add_component.html:22 -#: templates/users/objectpermission.html:38 -#: utilities/templates/buttons/add.html:4 -#: utilities/templates/helpers/table_config_form.html:20 +#: netbox/templates/circuits/inc/circuit_termination.html:10 +#: netbox/templates/dcim/manufacturer.html:11 +#: netbox/templates/generic/bulk_add_component.html:22 +#: netbox/templates/users/objectpermission.html:38 +#: netbox/utilities/templates/buttons/add.html:4 +#: netbox/utilities/templates/helpers/table_config_form.html:20 msgid "Add" msgstr "追加" -#: templates/circuits/inc/circuit_termination.html:15 -#: templates/circuits/inc/circuit_termination_fields.html:36 -#: templates/dcim/inc/panels/inventory_items.html:32 -#: templates/dcim/powerpanel.html:56 templates/extras/script_list.html:30 -#: templates/generic/object_edit.html:47 -#: templates/ipam/inc/ipaddress_edit_header.html:7 -#: templates/ipam/inc/panels/fhrp_groups.html:43 -#: utilities/templates/buttons/edit.html:3 +#: netbox/templates/circuits/inc/circuit_termination.html:15 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:36 +#: netbox/templates/dcim/inc/panels/inventory_items.html:32 +#: netbox/templates/dcim/powerpanel.html:56 +#: netbox/templates/extras/script_list.html:30 +#: netbox/templates/generic/object_edit.html:47 +#: netbox/templates/ipam/inc/ipaddress_edit_header.html:7 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:43 +#: netbox/utilities/templates/buttons/edit.html:3 msgid "Edit" msgstr "編集" -#: templates/circuits/inc/circuit_termination.html:18 +#: netbox/templates/circuits/inc/circuit_termination.html:18 msgid "Swap" msgstr "スワップ" -#: templates/circuits/inc/circuit_termination_fields.html:19 -#: templates/dcim/consoleport.html:59 templates/dcim/consoleserverport.html:60 -#: templates/dcim/powerfeed.html:114 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:19 +#: netbox/templates/dcim/consoleport.html:59 +#: netbox/templates/dcim/consoleserverport.html:60 +#: netbox/templates/dcim/powerfeed.html:114 msgid "Marked as connected" msgstr "接続済みとしてマークされています" -#: templates/circuits/inc/circuit_termination_fields.html:21 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:21 msgid "to" msgstr "に" -#: templates/circuits/inc/circuit_termination_fields.html:31 -#: templates/circuits/inc/circuit_termination_fields.html:32 -#: templates/dcim/frontport.html:80 -#: templates/dcim/inc/connection_endpoints.html:7 -#: templates/dcim/interface.html:154 templates/dcim/rearport.html:76 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:31 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:32 +#: netbox/templates/dcim/frontport.html:80 +#: netbox/templates/dcim/inc/connection_endpoints.html:7 +#: netbox/templates/dcim/interface.html:154 +#: netbox/templates/dcim/rearport.html:76 msgid "Trace" msgstr "トレース" -#: templates/circuits/inc/circuit_termination_fields.html:35 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:35 msgid "Edit cable" msgstr "ケーブル編集" -#: templates/circuits/inc/circuit_termination_fields.html:40 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:40 msgid "Remove cable" msgstr "ケーブルを取り外す" -#: templates/circuits/inc/circuit_termination_fields.html:41 -#: templates/dcim/bulk_disconnect.html:5 -#: templates/dcim/device/consoleports.html:12 -#: templates/dcim/device/consoleserverports.html:12 -#: templates/dcim/device/frontports.html:12 -#: templates/dcim/device/interfaces.html:16 -#: templates/dcim/device/poweroutlets.html:12 -#: templates/dcim/device/powerports.html:12 -#: templates/dcim/device/rearports.html:12 templates/dcim/powerpanel.html:61 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:41 +#: netbox/templates/dcim/bulk_disconnect.html:5 +#: netbox/templates/dcim/device/consoleports.html:12 +#: netbox/templates/dcim/device/consoleserverports.html:12 +#: netbox/templates/dcim/device/frontports.html:12 +#: netbox/templates/dcim/device/interfaces.html:16 +#: netbox/templates/dcim/device/poweroutlets.html:12 +#: netbox/templates/dcim/device/powerports.html:12 +#: netbox/templates/dcim/device/rearports.html:12 +#: netbox/templates/dcim/powerpanel.html:61 msgid "Disconnect" msgstr "接続解除" -#: templates/circuits/inc/circuit_termination_fields.html:48 -#: templates/dcim/consoleport.html:69 templates/dcim/consoleserverport.html:70 -#: templates/dcim/frontport.html:102 templates/dcim/interface.html:180 -#: templates/dcim/interface.html:200 templates/dcim/powerfeed.html:127 -#: templates/dcim/poweroutlet.html:71 templates/dcim/poweroutlet.html:72 -#: templates/dcim/powerport.html:73 templates/dcim/rearport.html:98 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:48 +#: netbox/templates/dcim/consoleport.html:69 +#: netbox/templates/dcim/consoleserverport.html:70 +#: netbox/templates/dcim/frontport.html:102 +#: netbox/templates/dcim/interface.html:180 +#: netbox/templates/dcim/interface.html:200 +#: netbox/templates/dcim/powerfeed.html:127 +#: netbox/templates/dcim/poweroutlet.html:71 +#: netbox/templates/dcim/poweroutlet.html:72 +#: netbox/templates/dcim/powerport.html:73 +#: netbox/templates/dcim/rearport.html:98 msgid "Connect" msgstr "接続" -#: templates/circuits/inc/circuit_termination_fields.html:70 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:70 msgid "Downstream" msgstr "ダウンストリーム" -#: templates/circuits/inc/circuit_termination_fields.html:71 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:71 msgid "Upstream" msgstr "アップストリーム" -#: templates/circuits/inc/circuit_termination_fields.html:80 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:80 msgid "Cross-Connect" msgstr "クロスコネクト" -#: templates/circuits/inc/circuit_termination_fields.html:84 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:84 msgid "Patch Panel/Port" msgstr "パッチパネル/ポート" -#: templates/circuits/provider.html:11 +#: netbox/templates/circuits/provider.html:11 msgid "Add circuit" msgstr "回線を追加" -#: templates/circuits/provideraccount.html:17 +#: netbox/templates/circuits/provideraccount.html:17 msgid "Provider Account" msgstr "プロバイダアカウント" -#: templates/core/configrevision.html:35 +#: netbox/templates/core/configrevision.html:35 msgid "Configuration Data" msgstr "設定データ" -#: templates/core/configrevision.html:40 +#: netbox/templates/core/configrevision.html:40 msgid "Comment" msgstr "コメント" -#: templates/core/configrevision_restore.html:8 -#: templates/core/configrevision_restore.html:25 -#: templates/core/configrevision_restore.html:64 +#: netbox/templates/core/configrevision_restore.html:8 +#: netbox/templates/core/configrevision_restore.html:25 +#: netbox/templates/core/configrevision_restore.html:64 msgid "Restore" msgstr "復元" -#: templates/core/configrevision_restore.html:36 +#: netbox/templates/core/configrevision_restore.html:36 msgid "Parameter" msgstr "パラメータ" -#: templates/core/configrevision_restore.html:37 +#: netbox/templates/core/configrevision_restore.html:37 msgid "Current Value" msgstr "現在の値" -#: templates/core/configrevision_restore.html:38 +#: netbox/templates/core/configrevision_restore.html:38 msgid "New Value" msgstr "新しい値" -#: templates/core/configrevision_restore.html:50 +#: netbox/templates/core/configrevision_restore.html:50 msgid "Changed" msgstr "変更日" -#: templates/core/datafile.html:42 templates/ipam/iprange.html:25 -#: templates/virtualization/virtualdisk.html:29 -#: virtualization/tables/virtualmachines.py:198 +#: netbox/templates/core/datafile.html:42 +#: netbox/templates/ipam/iprange.html:25 +#: netbox/templates/virtualization/virtualdisk.html:29 +#: netbox/virtualization/tables/virtualmachines.py:198 msgid "Size" msgstr "サイズ" -#: templates/core/datafile.html:43 +#: netbox/templates/core/datafile.html:43 msgid "bytes" msgstr "バイト" -#: templates/core/datafile.html:46 +#: netbox/templates/core/datafile.html:46 msgid "SHA256 Hash" msgstr "SHA256 ハッシュ" -#: templates/core/datasource.html:14 templates/core/datasource.html:20 -#: utilities/templates/buttons/sync.html:5 +#: netbox/templates/core/datasource.html:14 +#: netbox/templates/core/datasource.html:20 +#: netbox/utilities/templates/buttons/sync.html:5 msgid "Sync" msgstr "同期" -#: templates/core/datasource.html:50 +#: netbox/templates/core/datasource.html:50 msgid "Last synced" msgstr "最終同期" -#: templates/core/datasource.html:84 +#: netbox/templates/core/datasource.html:84 msgid "Backend" msgstr "バックエンド" -#: templates/core/datasource.html:99 +#: netbox/templates/core/datasource.html:99 msgid "No parameters defined" msgstr "パラメータが定義されていません" -#: templates/core/datasource.html:114 +#: netbox/templates/core/datasource.html:114 msgid "Files" msgstr "ファイル" -#: templates/core/inc/config_data.html:7 +#: netbox/templates/core/inc/config_data.html:7 msgid "Rack elevations" msgstr "ラック図" -#: templates/core/inc/config_data.html:10 +#: netbox/templates/core/inc/config_data.html:10 msgid "Default unit height" msgstr "既定のユニット高さ" -#: templates/core/inc/config_data.html:14 +#: netbox/templates/core/inc/config_data.html:14 msgid "Default unit width" msgstr "既定のユニット幅" -#: templates/core/inc/config_data.html:20 +#: netbox/templates/core/inc/config_data.html:20 msgid "Power feeds" msgstr "電源タップ" -#: templates/core/inc/config_data.html:23 +#: netbox/templates/core/inc/config_data.html:23 msgid "Default voltage" msgstr "既定の電圧" -#: templates/core/inc/config_data.html:27 +#: netbox/templates/core/inc/config_data.html:27 msgid "Default amperage" msgstr "既定のアンペア数" -#: templates/core/inc/config_data.html:31 +#: netbox/templates/core/inc/config_data.html:31 msgid "Default max utilization" msgstr "既定の最大使用率" -#: templates/core/inc/config_data.html:40 +#: netbox/templates/core/inc/config_data.html:40 msgid "Enforce global unique" msgstr "グローバルユニークを強制" -#: templates/core/inc/config_data.html:83 +#: netbox/templates/core/inc/config_data.html:83 msgid "Paginate count" msgstr "ページ分割数" -#: templates/core/inc/config_data.html:87 +#: netbox/templates/core/inc/config_data.html:87 msgid "Max page size" msgstr "最大ページサイズ" -#: templates/core/inc/config_data.html:114 +#: netbox/templates/core/inc/config_data.html:114 msgid "User preferences" msgstr "ユーザープリファレンス" -#: templates/core/inc/config_data.html:141 +#: netbox/templates/core/inc/config_data.html:141 msgid "Job retention" msgstr "仕事の維持" -#: templates/core/job.html:35 templates/core/rq_task.html:12 -#: templates/core/rq_task.html:49 templates/core/rq_task.html:58 +#: netbox/templates/core/job.html:35 netbox/templates/core/rq_task.html:12 +#: netbox/templates/core/rq_task.html:49 netbox/templates/core/rq_task.html:58 msgid "Job" msgstr "ジョブ" -#: templates/core/job.html:58 templates/extras/journalentry.html:26 +#: netbox/templates/core/job.html:58 +#: netbox/templates/extras/journalentry.html:26 msgid "Created By" msgstr "作成者" -#: templates/core/job.html:66 +#: netbox/templates/core/job.html:66 msgid "Scheduling" msgstr "スケジューリング" -#: templates/core/job.html:77 +#: netbox/templates/core/job.html:77 #, python-format msgid "every %(interval)s minutes" msgstr "ごと %(interval)s 分" -#: templates/core/objectchange.html:29 -#: templates/users/objectpermission.html:42 +#: netbox/templates/core/objectchange.html:29 +#: netbox/templates/users/objectpermission.html:42 msgid "Change" msgstr "変更" -#: templates/core/objectchange.html:79 +#: netbox/templates/core/objectchange.html:79 msgid "Difference" msgstr "差分" -#: templates/core/objectchange.html:82 +#: netbox/templates/core/objectchange.html:82 msgid "Previous" msgstr "前へ" -#: templates/core/objectchange.html:85 +#: netbox/templates/core/objectchange.html:85 msgid "Next" msgstr "次へ" -#: templates/core/objectchange.html:93 +#: netbox/templates/core/objectchange.html:93 msgid "Object Created" msgstr "オブジェクトが作成されました" -#: templates/core/objectchange.html:95 +#: netbox/templates/core/objectchange.html:95 msgid "Object Deleted" msgstr "オブジェクトは削除されました" -#: templates/core/objectchange.html:97 +#: netbox/templates/core/objectchange.html:97 msgid "No Changes" msgstr "変更なし" -#: templates/core/objectchange.html:111 +#: netbox/templates/core/objectchange.html:111 msgid "Pre-Change Data" msgstr "変更前データ" -#: templates/core/objectchange.html:122 +#: netbox/templates/core/objectchange.html:122 msgid "Warning: Comparing non-atomic change to previous change record" msgstr "警告:非アトミックな変更と以前の変更レコードの比較" -#: templates/core/objectchange.html:131 +#: netbox/templates/core/objectchange.html:131 msgid "Post-Change Data" msgstr "変更後のデータ" -#: templates/core/objectchange.html:162 +#: netbox/templates/core/objectchange.html:162 #, python-format msgid "See All %(count)s Changes" msgstr "すべて表示 %(count)s 変更点" -#: templates/core/objectchange_list.html:9 -#: templates/extras/object_changelog.html:15 +#: netbox/templates/core/objectchange_list.html:9 +#: netbox/templates/extras/object_changelog.html:15 msgid "Change log retention" msgstr "変更ログの保存" -#: templates/core/objectchange_list.html:9 -#: templates/extras/object_changelog.html:15 +#: netbox/templates/core/objectchange_list.html:9 +#: netbox/templates/extras/object_changelog.html:15 msgid "days" msgstr "日々" -#: templates/core/objectchange_list.html:9 -#: templates/extras/object_changelog.html:15 +#: netbox/templates/core/objectchange_list.html:9 +#: netbox/templates/extras/object_changelog.html:15 msgid "Indefinite" msgstr "無期限" -#: templates/core/plugin.html:22 +#: netbox/templates/core/plugin.html:22 msgid "Not installed" msgstr "未インストール" -#: templates/core/plugin.html:33 +#: netbox/templates/core/plugin.html:33 msgid "Overview" msgstr "概要" -#: templates/core/plugin.html:39 +#: netbox/templates/core/plugin.html:39 msgid "Install" msgstr "インストール" -#: templates/core/plugin.html:51 +#: netbox/templates/core/plugin.html:51 msgid "Plugin Details" msgstr "プラグイン詳細" -#: templates/core/plugin.html:58 +#: netbox/templates/core/plugin.html:58 msgid "Summary" msgstr "サマリー" -#: templates/core/plugin.html:76 +#: netbox/templates/core/plugin.html:76 msgid "License" msgstr "ライセンス" -#: templates/core/plugin.html:96 +#: netbox/templates/core/plugin.html:96 msgid "Version History" msgstr "バージョン履歴" -#: templates/core/plugin.html:107 +#: netbox/templates/core/plugin.html:107 msgid "Local Installation Instructions" msgstr "ローカルインストール手順" -#: templates/core/rq_queue_list.html:5 templates/core/rq_queue_list.html:13 -#: templates/core/rq_task_list.html:14 templates/core/rq_worker.html:7 +#: netbox/templates/core/rq_queue_list.html:5 +#: netbox/templates/core/rq_queue_list.html:13 +#: netbox/templates/core/rq_task_list.html:14 +#: netbox/templates/core/rq_worker.html:7 msgid "Background Queues" msgstr "バックグラウンドキュー" -#: templates/core/rq_queue_list.html:24 templates/core/rq_queue_list.html:25 -#: templates/core/rq_worker_list.html:49 templates/core/rq_worker_list.html:50 -#: templates/extras/script_result.html:67 -#: templates/extras/script_result.html:69 -#: templates/inc/table_controls_htmx.html:30 -#: templates/inc/table_controls_htmx.html:33 +#: netbox/templates/core/rq_queue_list.html:24 +#: netbox/templates/core/rq_queue_list.html:25 +#: netbox/templates/core/rq_worker_list.html:49 +#: netbox/templates/core/rq_worker_list.html:50 +#: netbox/templates/extras/script_result.html:67 +#: netbox/templates/extras/script_result.html:69 +#: netbox/templates/inc/table_controls_htmx.html:30 +#: netbox/templates/inc/table_controls_htmx.html:33 msgid "Configure Table" msgstr "テーブルを設定" -#: templates/core/rq_task.html:29 +#: netbox/templates/core/rq_task.html:29 msgid "Stop" msgstr "ストップ" -#: templates/core/rq_task.html:34 +#: netbox/templates/core/rq_task.html:34 msgid "Requeue" msgstr "リキュー" -#: templates/core/rq_task.html:39 +#: netbox/templates/core/rq_task.html:39 msgid "Enqueue" msgstr "エンキュー" -#: templates/core/rq_task.html:61 +#: netbox/templates/core/rq_task.html:61 msgid "Queue" msgstr "キュー" -#: templates/core/rq_task.html:65 +#: netbox/templates/core/rq_task.html:65 msgid "Timeout" msgstr "タイムアウト" -#: templates/core/rq_task.html:69 +#: netbox/templates/core/rq_task.html:69 msgid "Result TTL" msgstr "結果 TTL" -#: templates/core/rq_task.html:89 +#: netbox/templates/core/rq_task.html:89 msgid "Meta" msgstr "メタ" -#: templates/core/rq_task.html:93 +#: netbox/templates/core/rq_task.html:93 msgid "Arguments" msgstr "引数" -#: templates/core/rq_task.html:97 +#: netbox/templates/core/rq_task.html:97 msgid "Keyword Arguments" msgstr "キーワード引数" -#: templates/core/rq_task.html:103 +#: netbox/templates/core/rq_task.html:103 msgid "Depends on" msgstr "によって異なります" -#: templates/core/rq_task.html:109 +#: netbox/templates/core/rq_task.html:109 msgid "Exception" msgstr "例外" -#: templates/core/rq_task_list.html:28 +#: netbox/templates/core/rq_task_list.html:28 msgid "tasks in " msgstr "のタスク " -#: templates/core/rq_task_list.html:33 +#: netbox/templates/core/rq_task_list.html:33 msgid "Queued Jobs" msgstr "キューに入っているジョブ" -#: templates/core/rq_task_list.html:64 templates/extras/script_result.html:86 +#: netbox/templates/core/rq_task_list.html:64 +#: netbox/templates/extras/script_result.html:86 #, python-format msgid "" "Select all %(count)s %(object_type_plural)s matching query" msgstr "選択 すべて %(count)s %(object_type_plural)s マッチングクエリ" -#: templates/core/rq_worker.html:10 +#: netbox/templates/core/rq_worker.html:10 msgid "Worker Info" msgstr "労働者情報" -#: templates/core/rq_worker.html:31 templates/core/rq_worker.html:40 +#: netbox/templates/core/rq_worker.html:31 +#: netbox/templates/core/rq_worker.html:40 msgid "Worker" msgstr "ワーカー" -#: templates/core/rq_worker.html:55 +#: netbox/templates/core/rq_worker.html:55 msgid "Queues" msgstr "キュー" -#: templates/core/rq_worker.html:63 +#: netbox/templates/core/rq_worker.html:63 msgid "Curent Job" msgstr "現在の仕事" -#: templates/core/rq_worker.html:67 +#: netbox/templates/core/rq_worker.html:67 msgid "Successful job count" msgstr "成功したジョブ数" -#: templates/core/rq_worker.html:71 +#: netbox/templates/core/rq_worker.html:71 msgid "Failed job count" msgstr "失敗したジョブ数" -#: templates/core/rq_worker.html:75 +#: netbox/templates/core/rq_worker.html:75 msgid "Total working time" msgstr "総作業時間" -#: templates/core/rq_worker.html:76 +#: netbox/templates/core/rq_worker.html:76 msgid "seconds" msgstr "秒" -#: templates/core/rq_worker_list.html:13 templates/core/rq_worker_list.html:21 +#: netbox/templates/core/rq_worker_list.html:13 +#: netbox/templates/core/rq_worker_list.html:21 msgid "Background Workers" msgstr "バックグラウンドワーカー" -#: templates/core/rq_worker_list.html:29 +#: netbox/templates/core/rq_worker_list.html:29 #, python-format msgid "Workers in %(queue_name)s" msgstr "の労働者 %(queue_name)s" -#: templates/core/system.html:11 utilities/templates/buttons/export.html:4 +#: netbox/templates/core/system.html:11 +#: netbox/utilities/templates/buttons/export.html:4 msgid "Export" msgstr "エクスポート" -#: templates/core/system.html:28 +#: netbox/templates/core/system.html:28 msgid "System Status" msgstr "システムステータス" -#: templates/core/system.html:31 +#: netbox/templates/core/system.html:31 msgid "NetBox release" msgstr "ネットボックスリリース" -#: templates/core/system.html:44 +#: netbox/templates/core/system.html:44 msgid "Django version" msgstr "ジャンゴバージョン" -#: templates/core/system.html:48 +#: netbox/templates/core/system.html:48 msgid "PostgreSQL version" msgstr "PostgreSQL バージョン" -#: templates/core/system.html:52 +#: netbox/templates/core/system.html:52 msgid "Database name" msgstr "データベース名" -#: templates/core/system.html:56 +#: netbox/templates/core/system.html:56 msgid "Database size" msgstr "データベースサイズ" -#: templates/core/system.html:61 +#: netbox/templates/core/system.html:61 msgid "Unavailable" msgstr "ご利用いただけません" -#: templates/core/system.html:66 +#: netbox/templates/core/system.html:66 msgid "RQ workers" msgstr "RQ ワーカー" -#: templates/core/system.html:69 +#: netbox/templates/core/system.html:69 msgid "default queue" msgstr "デフォルトキュー" -#: templates/core/system.html:73 +#: netbox/templates/core/system.html:73 msgid "System time" msgstr "システムタイム" -#: templates/core/system.html:85 +#: netbox/templates/core/system.html:85 msgid "Current Configuration" msgstr "現在の構成" -#: templates/dcim/bulk_disconnect.html:9 +#: netbox/templates/dcim/bulk_disconnect.html:9 #, python-format msgid "" "Are you sure you want to disconnect these %(count)s %(obj_type_plural)s?" msgstr "これらを切断してもよろしいですか %(count)s %(obj_type_plural)s?" -#: templates/dcim/cable_trace.html:10 +#: netbox/templates/dcim/cable_trace.html:10 #, python-format msgid "Cable Trace for %(object_type)s %(object)s" msgstr "用ケーブルトレース %(object_type)s %(object)s" -#: templates/dcim/cable_trace.html:24 templates/dcim/inc/rack_elevation.html:7 +#: netbox/templates/dcim/cable_trace.html:24 +#: netbox/templates/dcim/inc/rack_elevation.html:7 msgid "Download SVG" msgstr "SVG をダウンロード" -#: templates/dcim/cable_trace.html:30 +#: netbox/templates/dcim/cable_trace.html:30 msgid "Asymmetric Path" msgstr "非対称パス" -#: templates/dcim/cable_trace.html:31 +#: netbox/templates/dcim/cable_trace.html:31 msgid "The nodes below have no links and result in an asymmetric path" msgstr "以下のノードにはリンクがなく、パスが非対称になっています" -#: templates/dcim/cable_trace.html:38 +#: netbox/templates/dcim/cable_trace.html:38 msgid "Path split" msgstr "パススプリット" -#: templates/dcim/cable_trace.html:39 +#: netbox/templates/dcim/cable_trace.html:39 msgid "Select a node below to continue" msgstr "続行するには以下のノードを選択してください" -#: templates/dcim/cable_trace.html:55 +#: netbox/templates/dcim/cable_trace.html:55 msgid "Trace Completed" msgstr "トレース完了" -#: templates/dcim/cable_trace.html:58 +#: netbox/templates/dcim/cable_trace.html:58 msgid "Total segments" msgstr "合計セグメント" -#: templates/dcim/cable_trace.html:62 +#: netbox/templates/dcim/cable_trace.html:62 msgid "Total length" msgstr "全長" -#: templates/dcim/cable_trace.html:77 +#: netbox/templates/dcim/cable_trace.html:77 msgid "No paths found" msgstr "パスが見つかりません" -#: templates/dcim/cable_trace.html:85 +#: netbox/templates/dcim/cable_trace.html:85 msgid "Related Paths" msgstr "関連パス" -#: templates/dcim/cable_trace.html:89 +#: netbox/templates/dcim/cable_trace.html:89 msgid "Origin" msgstr "オリジン" -#: templates/dcim/cable_trace.html:90 +#: netbox/templates/dcim/cable_trace.html:90 msgid "Destination" msgstr "目的地" -#: templates/dcim/cable_trace.html:91 +#: netbox/templates/dcim/cable_trace.html:91 msgid "Segments" msgstr "セグメント" -#: templates/dcim/cable_trace.html:104 +#: netbox/templates/dcim/cable_trace.html:104 msgid "Incomplete" msgstr "不完全" -#: templates/dcim/component_list.html:14 +#: netbox/templates/dcim/component_list.html:14 msgid "Rename Selected" msgstr "選択項目の名前を変更" -#: templates/dcim/consoleport.html:65 templates/dcim/consoleserverport.html:66 -#: templates/dcim/frontport.html:98 templates/dcim/interface.html:176 -#: templates/dcim/poweroutlet.html:69 templates/dcim/powerport.html:69 +#: netbox/templates/dcim/consoleport.html:65 +#: netbox/templates/dcim/consoleserverport.html:66 +#: netbox/templates/dcim/frontport.html:98 +#: netbox/templates/dcim/interface.html:176 +#: netbox/templates/dcim/poweroutlet.html:69 +#: netbox/templates/dcim/powerport.html:69 msgid "Not Connected" msgstr "未接続" -#: templates/dcim/device.html:34 +#: netbox/templates/dcim/device.html:34 msgid "Highlight device in rack" msgstr "ラック内のデバイスを強調表示" -#: templates/dcim/device.html:55 +#: netbox/templates/dcim/device.html:55 msgid "Not racked" msgstr "ラックなし" -#: templates/dcim/device.html:62 templates/dcim/site.html:94 +#: netbox/templates/dcim/device.html:62 netbox/templates/dcim/site.html:94 msgid "GPS Coordinates" msgstr "GPS 座標" -#: templates/dcim/device.html:68 templates/dcim/site.html:81 -#: templates/dcim/site.html:100 +#: netbox/templates/dcim/device.html:68 netbox/templates/dcim/site.html:81 +#: netbox/templates/dcim/site.html:100 msgid "Map" msgstr "マップ" -#: templates/dcim/device.html:108 templates/dcim/inventoryitem.html:56 -#: templates/dcim/module.html:81 templates/dcim/modulebay.html:74 -#: templates/dcim/rack.html:61 +#: netbox/templates/dcim/device.html:108 +#: netbox/templates/dcim/inventoryitem.html:56 +#: netbox/templates/dcim/module.html:81 +#: netbox/templates/dcim/modulebay.html:74 netbox/templates/dcim/rack.html:61 msgid "Asset Tag" msgstr "アセットタグ" -#: templates/dcim/device.html:123 +#: netbox/templates/dcim/device.html:123 msgid "View Virtual Chassis" msgstr "バーチャルシャーシを見る" -#: templates/dcim/device.html:164 +#: netbox/templates/dcim/device.html:164 msgid "Create VDC" msgstr "VDC の作成" -#: templates/dcim/device.html:175 templates/dcim/device_edit.html:64 -#: virtualization/forms/model_forms.py:223 +#: netbox/templates/dcim/device.html:175 +#: netbox/templates/dcim/device_edit.html:64 +#: netbox/virtualization/forms/model_forms.py:223 msgid "Management" msgstr "マネジメント" -#: templates/dcim/device.html:195 templates/dcim/device.html:211 -#: templates/dcim/device.html:227 -#: templates/virtualization/virtualmachine.html:57 -#: templates/virtualization/virtualmachine.html:73 +#: netbox/templates/dcim/device.html:195 netbox/templates/dcim/device.html:211 +#: netbox/templates/dcim/device.html:227 +#: netbox/templates/virtualization/virtualmachine.html:57 +#: netbox/templates/virtualization/virtualmachine.html:73 msgid "NAT for" msgstr "用の NAT" -#: templates/dcim/device.html:197 templates/dcim/device.html:213 -#: templates/dcim/device.html:229 -#: templates/virtualization/virtualmachine.html:59 -#: templates/virtualization/virtualmachine.html:75 +#: netbox/templates/dcim/device.html:197 netbox/templates/dcim/device.html:213 +#: netbox/templates/dcim/device.html:229 +#: netbox/templates/virtualization/virtualmachine.html:59 +#: netbox/templates/virtualization/virtualmachine.html:75 msgid "NAT" msgstr "ナット" -#: templates/dcim/device.html:252 templates/dcim/rack.html:73 +#: netbox/templates/dcim/device.html:252 netbox/templates/dcim/rack.html:73 msgid "Power Utilization" msgstr "電力使用率" -#: templates/dcim/device.html:256 +#: netbox/templates/dcim/device.html:256 msgid "Input" msgstr "入力" -#: templates/dcim/device.html:257 +#: netbox/templates/dcim/device.html:257 msgid "Outlets" msgstr "アウトレット" -#: templates/dcim/device.html:258 +#: netbox/templates/dcim/device.html:258 msgid "Allocated" msgstr "割り当て済み" -#: templates/dcim/device.html:268 templates/dcim/device.html:270 -#: templates/dcim/device.html:286 templates/dcim/powerfeed.html:67 +#: netbox/templates/dcim/device.html:268 netbox/templates/dcim/device.html:270 +#: netbox/templates/dcim/device.html:286 +#: netbox/templates/dcim/powerfeed.html:67 msgid "VA" msgstr "VA" -#: templates/dcim/device.html:280 +#: netbox/templates/dcim/device.html:280 msgctxt "Leg of a power feed" msgid "Leg" msgstr "レッグ" -#: templates/dcim/device.html:306 -#: templates/virtualization/virtualmachine.html:158 +#: netbox/templates/dcim/device.html:306 +#: netbox/templates/virtualization/virtualmachine.html:158 msgid "Add a service" msgstr "サービスを追加" -#: templates/dcim/device/base.html:21 templates/dcim/device_list.html:9 -#: templates/dcim/devicetype/base.html:18 -#: templates/dcim/inc/moduletype_buttons.html:9 templates/dcim/module.html:18 -#: templates/virtualization/virtualmachine/base.html:22 -#: templates/virtualization/virtualmachine_list.html:8 +#: netbox/templates/dcim/device/base.html:21 +#: netbox/templates/dcim/device_list.html:9 +#: netbox/templates/dcim/devicetype/base.html:18 +#: netbox/templates/dcim/inc/moduletype_buttons.html:9 +#: netbox/templates/dcim/module.html:18 +#: netbox/templates/virtualization/virtualmachine/base.html:22 +#: netbox/templates/virtualization/virtualmachine_list.html:8 msgid "Add Components" msgstr "構成要素を追加" -#: templates/dcim/device/consoleports.html:24 +#: netbox/templates/dcim/device/consoleports.html:24 msgid "Add Console Ports" msgstr "コンソールポートの追加" -#: templates/dcim/device/consoleserverports.html:24 +#: netbox/templates/dcim/device/consoleserverports.html:24 msgid "Add Console Server Ports" msgstr "コンソールサーバポートの追加" -#: templates/dcim/device/devicebays.html:10 +#: netbox/templates/dcim/device/devicebays.html:10 msgid "Add Device Bays" msgstr "デバイスベイの追加" -#: templates/dcim/device/frontports.html:24 +#: netbox/templates/dcim/device/frontports.html:24 msgid "Add Front Ports" msgstr "前面ポートを追加" -#: templates/dcim/device/inc/interface_table_controls.html:9 +#: netbox/templates/dcim/device/inc/interface_table_controls.html:9 msgid "Hide Enabled" msgstr "非表示有効" -#: templates/dcim/device/inc/interface_table_controls.html:10 +#: netbox/templates/dcim/device/inc/interface_table_controls.html:10 msgid "Hide Disabled" msgstr "非表示無効" -#: templates/dcim/device/inc/interface_table_controls.html:11 +#: netbox/templates/dcim/device/inc/interface_table_controls.html:11 msgid "Hide Virtual" msgstr "バーチャルを非表示" -#: templates/dcim/device/inc/interface_table_controls.html:12 +#: netbox/templates/dcim/device/inc/interface_table_controls.html:12 msgid "Hide Disconnected" msgstr "接続解除を非表示" -#: templates/dcim/device/interfaces.html:27 +#: netbox/templates/dcim/device/interfaces.html:27 msgid "Add Interfaces" msgstr "インタフェースを追加" -#: templates/dcim/device/inventory.html:10 -#: templates/dcim/inc/panels/inventory_items.html:10 +#: netbox/templates/dcim/device/inventory.html:10 +#: netbox/templates/dcim/inc/panels/inventory_items.html:10 msgid "Add Inventory Item" msgstr "在庫品目の追加" -#: templates/dcim/device/modulebays.html:10 +#: netbox/templates/dcim/device/modulebays.html:10 msgid "Add Module Bays" msgstr "モジュールベイの追加" -#: templates/dcim/device/poweroutlets.html:24 +#: netbox/templates/dcim/device/poweroutlets.html:24 msgid "Add Power Outlets" msgstr "電源コンセントの追加" -#: templates/dcim/device/powerports.html:24 +#: netbox/templates/dcim/device/powerports.html:24 msgid "Add Power Port" msgstr "電源ポートを追加" -#: templates/dcim/device/rearports.html:24 +#: netbox/templates/dcim/device/rearports.html:24 msgid "Add Rear Ports" msgstr "背面ポートを追加" -#: templates/dcim/device/render_config.html:5 -#: templates/virtualization/virtualmachine/render_config.html:5 +#: netbox/templates/dcim/device/render_config.html:5 +#: netbox/templates/virtualization/virtualmachine/render_config.html:5 msgid "Config" msgstr "コンフィグ" -#: templates/dcim/device/render_config.html:35 -#: templates/virtualization/virtualmachine/render_config.html:35 +#: netbox/templates/dcim/device/render_config.html:35 +#: netbox/templates/virtualization/virtualmachine/render_config.html:35 msgid "Context Data" msgstr "コンテキストデータ" -#: templates/dcim/device/render_config.html:53 -#: templates/virtualization/virtualmachine/render_config.html:53 +#: netbox/templates/dcim/device/render_config.html:55 +#: netbox/templates/virtualization/virtualmachine/render_config.html:55 msgid "Rendered Config" msgstr "レンダリング設定" -#: templates/dcim/device/render_config.html:55 -#: templates/virtualization/virtualmachine/render_config.html:55 +#: netbox/templates/dcim/device/render_config.html:57 +#: netbox/templates/virtualization/virtualmachine/render_config.html:57 msgid "Download" msgstr "ダウンロード" -#: templates/dcim/device/render_config.html:61 -#: templates/virtualization/virtualmachine/render_config.html:61 -msgid "No configuration template found" -msgstr "設定テンプレートが見つかりません" +#: netbox/templates/dcim/device/render_config.html:64 +#: netbox/templates/virtualization/virtualmachine/render_config.html:64 +msgid "Error rendering template" +msgstr "エラーレンダリングテンプレート" -#: templates/dcim/device_edit.html:44 +#: 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 "ペアレントベイ" -#: templates/dcim/device_edit.html:48 -#: utilities/templates/form_helpers/render_field.html:22 +#: netbox/templates/dcim/device_edit.html:48 +#: netbox/utilities/templates/form_helpers/render_field.html:22 msgid "Regenerate Slug" msgstr "リジェネレートslug" -#: templates/dcim/device_edit.html:49 templates/generic/bulk_remove.html:21 -#: utilities/templates/helpers/table_config_form.html:23 +#: netbox/templates/dcim/device_edit.html:49 +#: netbox/templates/generic/bulk_remove.html:21 +#: netbox/utilities/templates/helpers/table_config_form.html:23 msgid "Remove" msgstr "削除" -#: templates/dcim/device_edit.html:110 +#: netbox/templates/dcim/device_edit.html:110 msgid "Local Config Context Data" msgstr "ローカル設定コンテキストデータ" -#: templates/dcim/device_list.html:82 templates/generic/bulk_rename.html:57 -#: templates/virtualization/virtualmachine/interfaces.html:11 -#: templates/virtualization/virtualmachine/virtual_disks.html:11 +#: netbox/templates/dcim/device_list.html:82 +#: netbox/templates/generic/bulk_rename.html:57 +#: netbox/templates/virtualization/virtualmachine/interfaces.html:11 +#: netbox/templates/virtualization/virtualmachine/virtual_disks.html:11 msgid "Rename" msgstr "名前を変更" -#: templates/dcim/devicebay.html:17 +#: netbox/templates/dcim/devicebay.html:17 msgid "Device Bay" msgstr "デバイスベイ" -#: templates/dcim/devicebay.html:43 +#: netbox/templates/dcim/devicebay.html:43 msgid "Installed Device" msgstr "取付済みデバイス" -#: templates/dcim/devicebay_depopulate.html:6 +#: netbox/templates/dcim/devicebay_depopulate.html:6 #, python-format msgid "Remove %(device)s from %(device_bay)s?" msgstr "削除 %(device)s から %(device_bay)s?" -#: templates/dcim/devicebay_depopulate.html:13 +#: netbox/templates/dcim/devicebay_depopulate.html:13 #, python-format msgid "" "Are you sure you want to remove %(device)s from " @@ -11723,451 +12491,471 @@ msgstr "" "本当に削除してもよろしいですか %(device)s から " "%(device_bay)s?" -#: templates/dcim/devicebay_populate.html:13 +#: netbox/templates/dcim/devicebay_populate.html:13 msgid "Populate" msgstr "住む" -#: templates/dcim/devicebay_populate.html:22 +#: netbox/templates/dcim/devicebay_populate.html:22 msgid "Bay" msgstr "ベイ" -#: templates/dcim/devicerole.html:14 templates/dcim/platform.html:17 +#: netbox/templates/dcim/devicerole.html:14 +#: netbox/templates/dcim/platform.html:17 msgid "Add Device" msgstr "デバイスを追加" -#: templates/dcim/devicerole.html:40 +#: netbox/templates/dcim/devicerole.html:40 msgid "VM Role" msgstr "VMのロール" -#: templates/dcim/devicetype.html:18 templates/dcim/moduletype.html:29 +#: netbox/templates/dcim/devicetype.html:18 +#: netbox/templates/dcim/moduletype.html:29 msgid "Model Name" msgstr "モデル名" -#: templates/dcim/devicetype.html:25 templates/dcim/moduletype.html:33 +#: netbox/templates/dcim/devicetype.html:25 +#: netbox/templates/dcim/moduletype.html:33 msgid "Part Number" msgstr "パーツ番号" -#: templates/dcim/devicetype.html:41 +#: netbox/templates/dcim/devicetype.html:41 msgid "Exclude From Utilization" msgstr "利用から除外" -#: templates/dcim/devicetype.html:59 +#: netbox/templates/dcim/devicetype.html:59 msgid "Parent/Child" msgstr "親/子" -#: templates/dcim/devicetype.html:71 +#: netbox/templates/dcim/devicetype.html:71 msgid "Front Image" msgstr "前面イメージ" -#: templates/dcim/devicetype.html:83 +#: netbox/templates/dcim/devicetype.html:83 msgid "Rear Image" msgstr "背面画像" -#: templates/dcim/frontport.html:54 +#: netbox/templates/dcim/frontport.html:54 msgid "Rear Port Position" msgstr "背面ポート位置" -#: templates/dcim/frontport.html:72 templates/dcim/interface.html:144 -#: templates/dcim/poweroutlet.html:63 templates/dcim/powerport.html:63 -#: templates/dcim/rearport.html:68 +#: netbox/templates/dcim/frontport.html:72 +#: netbox/templates/dcim/interface.html:144 +#: netbox/templates/dcim/poweroutlet.html:63 +#: netbox/templates/dcim/powerport.html:63 +#: netbox/templates/dcim/rearport.html:68 msgid "Marked as Connected" msgstr "接続済みとしてマークされています" -#: templates/dcim/frontport.html:86 templates/dcim/rearport.html:82 +#: netbox/templates/dcim/frontport.html:86 +#: netbox/templates/dcim/rearport.html:82 msgid "Connection Status" msgstr "接続ステータス" -#: templates/dcim/htmx/cable_edit.html:10 +#: netbox/templates/dcim/htmx/cable_edit.html:10 msgid "A Side" msgstr "Aサイド" -#: templates/dcim/htmx/cable_edit.html:30 +#: netbox/templates/dcim/htmx/cable_edit.html:30 msgid "B Side" msgstr "B サイド" -#: templates/dcim/inc/cable_termination.html:65 +#: netbox/templates/dcim/inc/cable_termination.html:65 msgid "No termination" msgstr "終了なし" -#: templates/dcim/inc/cable_toggle_buttons.html:3 +#: netbox/templates/dcim/inc/cable_toggle_buttons.html:3 msgid "Mark Planned" msgstr "マーク・プランド" -#: templates/dcim/inc/cable_toggle_buttons.html:6 +#: netbox/templates/dcim/inc/cable_toggle_buttons.html:6 msgid "Mark Installed" msgstr "取付済みとマークする" -#: templates/dcim/inc/connection_endpoints.html:13 +#: netbox/templates/dcim/inc/connection_endpoints.html:13 msgid "Path Status" msgstr "パスステータス" -#: templates/dcim/inc/connection_endpoints.html:18 +#: netbox/templates/dcim/inc/connection_endpoints.html:18 msgid "Not Reachable" msgstr "アクセス不可" -#: templates/dcim/inc/connection_endpoints.html:23 +#: netbox/templates/dcim/inc/connection_endpoints.html:23 msgid "Path Endpoints" msgstr "パスエンドポイント" -#: templates/dcim/inc/endpoint_connection.html:8 -#: templates/dcim/powerfeed.html:120 templates/dcim/rearport.html:94 +#: netbox/templates/dcim/inc/endpoint_connection.html:8 +#: netbox/templates/dcim/powerfeed.html:120 +#: netbox/templates/dcim/rearport.html:94 msgid "Not connected" msgstr "接続されていません" -#: templates/dcim/inc/interface_vlans_table.html:6 +#: netbox/templates/dcim/inc/interface_vlans_table.html:6 msgid "Untagged" msgstr "タグなし" -#: templates/dcim/inc/interface_vlans_table.html:37 +#: netbox/templates/dcim/inc/interface_vlans_table.html:37 msgid "No VLANs Assigned" msgstr "VLAN が割り当てられていません" -#: templates/dcim/inc/interface_vlans_table.html:44 -#: templates/ipam/prefix_list.html:16 templates/ipam/prefix_list.html:33 +#: netbox/templates/dcim/inc/interface_vlans_table.html:44 +#: netbox/templates/ipam/prefix_list.html:16 +#: netbox/templates/ipam/prefix_list.html:33 msgid "Clear" msgstr "クリア" -#: templates/dcim/inc/interface_vlans_table.html:47 +#: netbox/templates/dcim/inc/interface_vlans_table.html:47 msgid "Clear All" msgstr "すべてクリア" -#: templates/dcim/inc/panels/racktype_dimensions.html:38 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:38 msgid "Mounting Depth" msgstr "取り付け奥行き" -#: templates/dcim/inc/panels/racktype_numbering.html:6 +#: netbox/templates/dcim/inc/panels/racktype_numbering.html:6 msgid "Starting Unit" msgstr "起動ユニット" -#: templates/dcim/inc/panels/racktype_numbering.html:10 +#: netbox/templates/dcim/inc/panels/racktype_numbering.html:10 msgid "Descending Units" msgstr "降順単位" -#: templates/dcim/inc/rack_elevation.html:3 +#: netbox/templates/dcim/inc/rack_elevation.html:3 msgid "Rack elevation" msgstr "ラックの高さ" -#: templates/dcim/interface.html:17 +#: netbox/templates/dcim/interface.html:17 msgid "Add Child Interface" msgstr "子インタフェースの追加" -#: templates/dcim/interface.html:50 +#: netbox/templates/dcim/interface.html:50 msgid "Speed/Duplex" msgstr "スピード/デュプレックス" -#: templates/dcim/interface.html:73 +#: netbox/templates/dcim/interface.html:73 msgid "PoE Mode" msgstr "PoE モード" -#: templates/dcim/interface.html:77 +#: netbox/templates/dcim/interface.html:77 msgid "PoE Type" msgstr "PoE タイプ" -#: templates/dcim/interface.html:81 -#: templates/virtualization/vminterface.html:63 +#: netbox/templates/dcim/interface.html:81 +#: netbox/templates/virtualization/vminterface.html:63 msgid "802.1Q Mode" msgstr "802.1Q モード" -#: templates/dcim/interface.html:125 -#: templates/virtualization/vminterface.html:59 +#: netbox/templates/dcim/interface.html:125 +#: netbox/templates/virtualization/vminterface.html:59 msgid "MAC Address" msgstr "MAC アドレス" -#: templates/dcim/interface.html:151 +#: netbox/templates/dcim/interface.html:151 msgid "Wireless Link" msgstr "無線リンク" -#: templates/dcim/interface.html:218 vpn/choices.py:55 +#: netbox/templates/dcim/interface.html:218 netbox/vpn/choices.py:63 msgid "Peer" msgstr "ピア" -#: templates/dcim/interface.html:230 -#: templates/wireless/inc/wirelesslink_interface.html:26 +#: netbox/templates/dcim/interface.html:230 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:26 msgid "Channel" msgstr "チャネル" -#: templates/dcim/interface.html:239 -#: templates/wireless/inc/wirelesslink_interface.html:32 +#: netbox/templates/dcim/interface.html:239 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:32 msgid "Channel Frequency" msgstr "チャンネル周波数" -#: templates/dcim/interface.html:242 templates/dcim/interface.html:250 -#: templates/dcim/interface.html:261 templates/dcim/interface.html:269 +#: netbox/templates/dcim/interface.html:242 +#: netbox/templates/dcim/interface.html:250 +#: netbox/templates/dcim/interface.html:261 +#: netbox/templates/dcim/interface.html:269 msgid "MHz" msgstr "メガヘルツ" -#: templates/dcim/interface.html:258 -#: templates/wireless/inc/wirelesslink_interface.html:42 +#: netbox/templates/dcim/interface.html:258 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:42 msgid "Channel Width" msgstr "チャンネル幅" -#: templates/dcim/interface.html:285 templates/wireless/wirelesslan.html:14 -#: templates/wireless/wirelesslink.html:21 wireless/forms/bulk_edit.py:60 -#: wireless/forms/bulk_edit.py:102 wireless/forms/filtersets.py:40 -#: wireless/forms/filtersets.py:80 wireless/models.py:82 -#: wireless/models.py:156 wireless/tables/wirelesslan.py:44 +#: netbox/templates/dcim/interface.html:285 +#: netbox/templates/wireless/wirelesslan.html:14 +#: netbox/templates/wireless/wirelesslink.html:21 +#: netbox/wireless/forms/bulk_edit.py:60 +#: netbox/wireless/forms/bulk_edit.py:102 +#: netbox/wireless/forms/filtersets.py:40 +#: netbox/wireless/forms/filtersets.py:80 netbox/wireless/models.py:82 +#: netbox/wireless/models.py:156 netbox/wireless/tables/wirelesslan.py:44 msgid "SSID" msgstr "言った" -#: templates/dcim/interface.html:305 +#: netbox/templates/dcim/interface.html:305 msgid "LAG Members" msgstr "LAG メンバー" -#: templates/dcim/interface.html:323 +#: netbox/templates/dcim/interface.html:323 msgid "No member interfaces" msgstr "メンバーインタフェースなし" -#: templates/dcim/interface.html:343 templates/ipam/fhrpgroup.html:73 -#: templates/ipam/iprange/ip_addresses.html:7 -#: templates/ipam/prefix/ip_addresses.html:7 -#: templates/virtualization/vminterface.html:89 +#: netbox/templates/dcim/interface.html:343 +#: netbox/templates/ipam/fhrpgroup.html:73 +#: netbox/templates/ipam/iprange/ip_addresses.html:7 +#: netbox/templates/ipam/prefix/ip_addresses.html:7 +#: netbox/templates/virtualization/vminterface.html:89 msgid "Add IP Address" msgstr "IP アドレスを追加" -#: templates/dcim/inventoryitem.html:24 +#: netbox/templates/dcim/inventoryitem.html:24 msgid "Parent Item" msgstr "親アイテム" -#: templates/dcim/inventoryitem.html:48 +#: netbox/templates/dcim/inventoryitem.html:48 msgid "Part ID" msgstr "パーツ ID" -#: templates/dcim/location.html:17 +#: netbox/templates/dcim/location.html:17 msgid "Add Child Location" msgstr "子所在地を追加" -#: templates/dcim/location.html:77 +#: netbox/templates/dcim/location.html:77 msgid "Child Locations" msgstr "子ロケーション" -#: templates/dcim/location.html:81 templates/dcim/site.html:131 +#: netbox/templates/dcim/location.html:81 netbox/templates/dcim/site.html:131 msgid "Add a Location" msgstr "ロケーションを追加" -#: templates/dcim/location.html:94 templates/dcim/site.html:144 +#: netbox/templates/dcim/location.html:94 netbox/templates/dcim/site.html:144 msgid "Add a Device" msgstr "デバイスを追加" -#: templates/dcim/manufacturer.html:16 +#: netbox/templates/dcim/manufacturer.html:16 msgid "Add Device Type" msgstr "デバイスタイプを追加" -#: templates/dcim/manufacturer.html:21 +#: netbox/templates/dcim/manufacturer.html:21 msgid "Add Module Type" msgstr "モジュールタイプを追加" -#: templates/dcim/powerfeed.html:53 +#: netbox/templates/dcim/powerfeed.html:53 msgid "Connected Device" msgstr "接続デバイス" -#: templates/dcim/powerfeed.html:63 +#: netbox/templates/dcim/powerfeed.html:63 msgid "Utilization (Allocated" msgstr "使用率 (割り当て済み)" -#: templates/dcim/powerfeed.html:80 +#: netbox/templates/dcim/powerfeed.html:80 msgid "Electrical Characteristics" msgstr "電気的特性" -#: templates/dcim/powerfeed.html:88 +#: netbox/templates/dcim/powerfeed.html:88 msgctxt "Abbreviation for volts" msgid "V" msgstr "V" -#: templates/dcim/powerfeed.html:92 +#: netbox/templates/dcim/powerfeed.html:92 msgctxt "Abbreviation for amperes" msgid "A" msgstr "A" -#: templates/dcim/poweroutlet.html:48 +#: netbox/templates/dcim/poweroutlet.html:48 msgid "Feed Leg" msgstr "供給端子" -#: templates/dcim/powerpanel.html:72 +#: netbox/templates/dcim/powerpanel.html:72 msgid "Add Power Feeds" msgstr "電源タップの追加" -#: templates/dcim/powerport.html:44 +#: netbox/templates/dcim/powerport.html:44 msgid "Maximum Draw" msgstr "最大消費電力" -#: templates/dcim/powerport.html:48 +#: netbox/templates/dcim/powerport.html:48 msgid "Allocated Draw" msgstr "割り当てられた抽選" -#: templates/dcim/rack.html:69 +#: netbox/templates/dcim/rack.html:69 msgid "Space Utilization" msgstr "スペース活用" -#: templates/dcim/rack.html:84 templates/dcim/racktype.html:44 +#: netbox/templates/dcim/rack.html:84 netbox/templates/dcim/racktype.html:44 msgid "Rack Weight" msgstr "ラック重量" -#: templates/dcim/rack.html:94 templates/dcim/racktype.html:54 +#: netbox/templates/dcim/rack.html:94 netbox/templates/dcim/racktype.html:54 msgid "Maximum Weight" msgstr "最大重量" -#: templates/dcim/rack.html:104 +#: netbox/templates/dcim/rack.html:104 msgid "Total Weight" msgstr "合計重量" -#: templates/dcim/rack.html:125 templates/dcim/rack_elevation_list.html:15 +#: netbox/templates/dcim/rack.html:125 +#: netbox/templates/dcim/rack_elevation_list.html:15 msgid "Images and Labels" msgstr "画像とラベル" -#: templates/dcim/rack.html:126 templates/dcim/rack_elevation_list.html:16 +#: netbox/templates/dcim/rack.html:126 +#: netbox/templates/dcim/rack_elevation_list.html:16 msgid "Images only" msgstr "画像のみ" -#: templates/dcim/rack.html:127 templates/dcim/rack_elevation_list.html:17 +#: netbox/templates/dcim/rack.html:127 +#: netbox/templates/dcim/rack_elevation_list.html:17 msgid "Labels only" msgstr "ラベルのみ" -#: templates/dcim/rack/reservations.html:8 +#: netbox/templates/dcim/rack/reservations.html:8 msgid "Add reservation" msgstr "予約を追加" -#: templates/dcim/rack_elevation_list.html:12 +#: netbox/templates/dcim/rack_elevation_list.html:12 msgid "View List" msgstr "リストを表示" -#: templates/dcim/rack_elevation_list.html:14 +#: netbox/templates/dcim/rack_elevation_list.html:14 msgid "Select rack view" msgstr "ラックビューを選択" -#: templates/dcim/rack_elevation_list.html:25 +#: netbox/templates/dcim/rack_elevation_list.html:25 msgid "Sort By" msgstr "並び替え" -#: templates/dcim/rack_elevation_list.html:74 +#: netbox/templates/dcim/rack_elevation_list.html:74 msgid "No Racks Found" msgstr "ラックが見つかりません" -#: templates/dcim/rack_list.html:8 +#: netbox/templates/dcim/rack_list.html:8 msgid "View Elevations" msgstr "ラック図を表示" -#: templates/dcim/rackreservation.html:42 +#: netbox/templates/dcim/rackreservation.html:42 msgid "Reservation Details" msgstr "予約詳細" -#: templates/dcim/rackrole.html:10 +#: netbox/templates/dcim/rackrole.html:10 msgid "Add Rack" msgstr "ラックを追加" -#: templates/dcim/rearport.html:50 +#: netbox/templates/dcim/rearport.html:50 msgid "Positions" msgstr "ポジション" -#: templates/dcim/region.html:17 templates/dcim/sitegroup.html:17 +#: netbox/templates/dcim/region.html:17 +#: netbox/templates/dcim/sitegroup.html:17 msgid "Add Site" msgstr "サイトを追加" -#: templates/dcim/region.html:55 +#: netbox/templates/dcim/region.html:55 msgid "Child Regions" msgstr "子リージョン" -#: templates/dcim/region.html:59 +#: netbox/templates/dcim/region.html:59 msgid "Add Region" msgstr "リージョンを追加" -#: templates/dcim/site.html:64 +#: netbox/templates/dcim/site.html:64 msgid "Time Zone" msgstr "タイムゾーン" -#: templates/dcim/site.html:67 +#: netbox/templates/dcim/site.html:67 msgid "UTC" msgstr "UTC" -#: templates/dcim/site.html:68 +#: netbox/templates/dcim/site.html:68 msgid "Site time" msgstr "サイトタイム" -#: templates/dcim/site.html:75 +#: netbox/templates/dcim/site.html:75 msgid "Physical Address" msgstr "物理アドレス" -#: templates/dcim/site.html:90 +#: netbox/templates/dcim/site.html:90 msgid "Shipping Address" msgstr "配送先住所" -#: templates/dcim/sitegroup.html:55 templates/tenancy/contactgroup.html:46 -#: templates/tenancy/tenantgroup.html:55 -#: templates/wireless/wirelesslangroup.html:55 +#: netbox/templates/dcim/sitegroup.html:55 +#: netbox/templates/tenancy/contactgroup.html:46 +#: netbox/templates/tenancy/tenantgroup.html:55 +#: netbox/templates/wireless/wirelesslangroup.html:55 msgid "Child Groups" msgstr "子・グループ" -#: templates/dcim/sitegroup.html:59 +#: netbox/templates/dcim/sitegroup.html:59 msgid "Add Site Group" msgstr "サイトグループを追加" -#: templates/dcim/trace/attachment.html:5 -#: templates/extras/exporttemplate.html:31 +#: netbox/templates/dcim/trace/attachment.html:5 +#: netbox/templates/extras/exporttemplate.html:31 msgid "Attachment" msgstr "アタッチメント" -#: templates/dcim/virtualchassis.html:57 +#: netbox/templates/dcim/virtualchassis.html:57 msgid "Add Member" msgstr "メンバーを追加" -#: templates/dcim/virtualchassis_add.html:18 +#: netbox/templates/dcim/virtualchassis_add.html:18 msgid "Member Devices" msgstr "メンバーデバイス" -#: templates/dcim/virtualchassis_add_member.html:10 +#: netbox/templates/dcim/virtualchassis_add_member.html:10 #, python-format msgid "Add New Member to Virtual Chassis %(virtual_chassis)s" msgstr "バーチャルシャーシへの新規メンバーの追加 %(virtual_chassis)s" -#: templates/dcim/virtualchassis_add_member.html:19 +#: netbox/templates/dcim/virtualchassis_add_member.html:19 msgid "Add New Member" msgstr "新しいメンバーを追加" -#: templates/dcim/virtualchassis_add_member.html:27 -#: templates/generic/object_edit.html:78 -#: templates/users/objectpermission.html:31 users/forms/filtersets.py:67 -#: users/forms/model_forms.py:312 +#: netbox/templates/dcim/virtualchassis_add_member.html:27 +#: netbox/templates/generic/object_edit.html:78 +#: netbox/templates/users/objectpermission.html:31 +#: netbox/users/forms/filtersets.py:67 netbox/users/forms/model_forms.py:312 msgid "Actions" msgstr "アクション" -#: templates/dcim/virtualchassis_add_member.html:29 +#: netbox/templates/dcim/virtualchassis_add_member.html:29 msgid "Save & Add Another" msgstr "保存して別のものを追加" -#: templates/dcim/virtualchassis_edit.html:7 +#: netbox/templates/dcim/virtualchassis_edit.html:7 #, python-format msgid "Editing Virtual Chassis %(name)s" msgstr "バーチャルシャーシの編集 %(name)s" -#: templates/dcim/virtualchassis_edit.html:53 +#: netbox/templates/dcim/virtualchassis_edit.html:53 msgid "Rack/Unit" msgstr "ラック/ユニット" -#: templates/dcim/virtualchassis_remove_member.html:5 +#: netbox/templates/dcim/virtualchassis_remove_member.html:5 msgid "Remove Virtual Chassis Member" msgstr "バーチャルシャーシメンバーの削除" -#: templates/dcim/virtualchassis_remove_member.html:9 +#: netbox/templates/dcim/virtualchassis_remove_member.html:9 #, python-format msgid "" "Are you sure you want to remove %(device)s from virtual " "chassis %(name)s?" msgstr "本当に削除してもよろしいですか %(device)s バーチャルシャーシから %(name)s?" -#: templates/dcim/virtualdevicecontext.html:26 templates/vpn/l2vpn.html:18 +#: netbox/templates/dcim/virtualdevicecontext.html:26 +#: netbox/templates/vpn/l2vpn.html:18 msgid "Identifier" msgstr "識別子" -#: templates/exceptions/import_error.html:6 +#: netbox/templates/exceptions/import_error.html:6 msgid "" "A module import error occurred during this request. Common causes include " "the following:" msgstr "このリクエスト中にモジュールインポートエラーが発生しました。一般的な原因には次のものがあります。" -#: templates/exceptions/import_error.html:10 +#: netbox/templates/exceptions/import_error.html:10 msgid "Missing required packages" msgstr "必要なパッケージが見つかりません" -#: templates/exceptions/import_error.html:11 +#: netbox/templates/exceptions/import_error.html:11 msgid "" "This installation of NetBox might be missing one or more required Python " "packages. These packages are listed in requirements.txt and " @@ -12181,11 +12969,11 @@ msgstr "" "local_requirements.txt、通常は取付またはアップグレードプロセスの一部として取付されます。取付されたパッケージを確認するには、以下を実行します。" " ピップフリーズ コンソールから、出力を必要なパッケージのリストと比較します。" -#: templates/exceptions/import_error.html:20 +#: netbox/templates/exceptions/import_error.html:20 msgid "WSGI service not restarted after upgrade" msgstr "アップグレード後に WSGI サービスが再起動されない" -#: templates/exceptions/import_error.html:21 +#: netbox/templates/exceptions/import_error.html:21 msgid "" "If this installation has recently been upgraded, check that the WSGI service" " (e.g. gunicorn or uWSGI) has been restarted. This ensures that the new code" @@ -12194,17 +12982,17 @@ msgstr "" "このインストールが最近アップグレードされた場合は、WSGI サービス (gunicorn や uWSGI など) " "が再起動されていることを確認してください。これにより、新しいコードが確実に実行されていることを確認できます。" -#: templates/exceptions/permission_error.html:6 +#: netbox/templates/exceptions/permission_error.html:6 msgid "" "A file permission error was detected while processing this request. Common " "causes include the following:" msgstr "このリクエストの処理中に、ファイル権限エラーが検出されました。一般的な原因には次のものがあります。" -#: templates/exceptions/permission_error.html:10 +#: netbox/templates/exceptions/permission_error.html:10 msgid "Insufficient write permission to the media root" msgstr "メディアルートへの書き込み権限が不十分です" -#: templates/exceptions/permission_error.html:11 +#: netbox/templates/exceptions/permission_error.html:11 #, python-format msgid "" "The configured media root is %(media_root)s. Ensure that the " @@ -12214,17 +13002,17 @@ msgstr "" "設定されているメディアルートは %(media_root)s。NetBox " "を実行するユーザに、このパス内のすべてのロケーションにファイルを書き込む権限があることを確認してください。" -#: templates/exceptions/programming_error.html:6 +#: netbox/templates/exceptions/programming_error.html:6 msgid "" "A database programming error was detected while processing this request. " "Common causes include the following:" msgstr "この要求の処理中に、データベースプログラミングエラーが検出されました。一般的な原因には次のものがあります。" -#: templates/exceptions/programming_error.html:10 +#: netbox/templates/exceptions/programming_error.html:10 msgid "Database migrations missing" msgstr "データベースマイグレーションが見つかりません" -#: templates/exceptions/programming_error.html:11 +#: netbox/templates/exceptions/programming_error.html:11 msgid "" "When upgrading to a new NetBox release, the upgrade script must be run to " "apply any new database migrations. You can run migrations manually by " @@ -12234,11 +13022,11 @@ msgstr "" "の新しいリリースにアップグレードする場合、新しいデータベースマイグレーションを適用するには、アップグレードスクリプトを実行する必要があります。マイグレーションは以下を実行することで手動で実行できます。" " python3 manage.py マイグレーション コマンドラインから。" -#: templates/exceptions/programming_error.html:18 +#: netbox/templates/exceptions/programming_error.html:18 msgid "Unsupported PostgreSQL version" msgstr "サポートされていない PostgreSQL バージョン" -#: templates/exceptions/programming_error.html:19 +#: netbox/templates/exceptions/programming_error.html:19 msgid "" "Ensure that PostgreSQL version 12 or later is in use. You can check this by " "connecting to the database using NetBox's credentials and issuing a query " @@ -12247,258 +13035,268 @@ msgstr "" "PostgreSQL バージョン 12 以降が使用されていることを確認してください。これを確認するには、NetBox " "の認証情報を使用してデータベースに接続し、次のクエリを実行します。 バージョンを選択 ()。" -#: templates/extras/configcontext.html:45 -#: templates/extras/configtemplate.html:37 -#: templates/extras/exporttemplate.html:51 +#: netbox/templates/extras/configcontext.html:45 +#: netbox/templates/extras/configtemplate.html:37 +#: netbox/templates/extras/exporttemplate.html:51 msgid "The data file associated with this object has been deleted" msgstr "このオブジェクトに関連するデータファイルは削除されました" -#: templates/extras/configcontext.html:54 -#: templates/extras/configtemplate.html:46 -#: templates/extras/exporttemplate.html:60 +#: netbox/templates/extras/configcontext.html:54 +#: netbox/templates/extras/configtemplate.html:46 +#: netbox/templates/extras/exporttemplate.html:60 msgid "Data Synced" msgstr "データ同期済み" -#: templates/extras/configcontext_list.html:7 -#: templates/extras/configtemplate_list.html:7 -#: templates/extras/exporttemplate_list.html:7 +#: netbox/templates/extras/configcontext_list.html:7 +#: netbox/templates/extras/configtemplate_list.html:7 +#: netbox/templates/extras/exporttemplate_list.html:7 msgid "Sync Data" msgstr "データを同期" -#: templates/extras/configtemplate.html:56 +#: netbox/templates/extras/configtemplate.html:56 msgid "Environment Parameters" msgstr "環境パラメータ" -#: templates/extras/configtemplate.html:67 -#: templates/extras/exporttemplate.html:79 +#: netbox/templates/extras/configtemplate.html:67 +#: netbox/templates/extras/exporttemplate.html:79 msgid "Template" msgstr "テンプレート" -#: templates/extras/customfield.html:30 templates/extras/customlink.html:21 +#: netbox/templates/extras/customfield.html:30 +#: netbox/templates/extras/customlink.html:21 msgid "Group Name" msgstr "グループ名" -#: templates/extras/customfield.html:42 +#: netbox/templates/extras/customfield.html:42 msgid "Must be Unique" msgstr "ユニークでなければならない" -#: templates/extras/customfield.html:46 +#: netbox/templates/extras/customfield.html:46 msgid "Cloneable" msgstr "クローン可能" -#: templates/extras/customfield.html:56 +#: netbox/templates/extras/customfield.html:56 msgid "Default Value" msgstr "既定値" -#: templates/extras/customfield.html:73 +#: netbox/templates/extras/customfield.html:73 msgid "Search Weight" msgstr "検索重量" -#: templates/extras/customfield.html:83 +#: netbox/templates/extras/customfield.html:83 msgid "Filter Logic" msgstr "フィルタロジック" -#: templates/extras/customfield.html:87 +#: netbox/templates/extras/customfield.html:87 msgid "Display Weight" msgstr "ディスプレイ重量" -#: templates/extras/customfield.html:91 +#: netbox/templates/extras/customfield.html:91 msgid "UI Visible" msgstr "UI が表示される" -#: templates/extras/customfield.html:95 +#: netbox/templates/extras/customfield.html:95 msgid "UI Editable" msgstr "UI 編集可能" -#: templates/extras/customfield.html:115 +#: netbox/templates/extras/customfield.html:115 msgid "Validation Rules" msgstr "検証ルール" -#: templates/extras/customfield.html:126 +#: netbox/templates/extras/customfield.html:126 msgid "Regular Expression" msgstr "正規表現" -#: templates/extras/customlink.html:29 +#: netbox/templates/extras/customlink.html:29 msgid "Button Class" msgstr "ボタンクラス" -#: templates/extras/customlink.html:39 templates/extras/exporttemplate.html:66 -#: templates/extras/savedfilter.html:39 +#: netbox/templates/extras/customlink.html:39 +#: netbox/templates/extras/exporttemplate.html:66 +#: netbox/templates/extras/savedfilter.html:39 msgid "Assigned Models" msgstr "割当モデル" -#: templates/extras/customlink.html:52 +#: netbox/templates/extras/customlink.html:52 msgid "Link Text" msgstr "リンクテキスト" -#: templates/extras/customlink.html:58 +#: netbox/templates/extras/customlink.html:58 msgid "Link URL" msgstr "リンク URL" -#: templates/extras/dashboard/reset.html:4 templates/home.html:66 +#: netbox/templates/extras/dashboard/reset.html:4 +#: netbox/templates/home.html:66 msgid "Reset Dashboard" msgstr "ダッシュボードをリセット" -#: templates/extras/dashboard/reset.html:8 +#: netbox/templates/extras/dashboard/reset.html:8 msgid "" "This will remove all configured widgets and restore the " "default dashboard configuration." msgstr "これにより削除されます すべて ウィジェットを構成し、デフォルトのダッシュボード設定を復元しました。" -#: templates/extras/dashboard/reset.html:13 +#: netbox/templates/extras/dashboard/reset.html:13 msgid "" "This change affects only your dashboard, and will not impact other " "users." msgstr "この変更の影響を受けるのは きみの ダッシュボード。他のユーザには影響しません。" -#: templates/extras/dashboard/widget.html:21 +#: netbox/templates/extras/dashboard/widget.html:21 msgid "widget configuration" msgstr "ウィジェット構成" -#: templates/extras/dashboard/widget.html:36 +#: netbox/templates/extras/dashboard/widget.html:36 msgid "Close widget" msgstr "ウィジェットを閉じる" -#: templates/extras/dashboard/widget_add.html:7 +#: netbox/templates/extras/dashboard/widget_add.html:7 msgid "Add a Widget" msgstr "ウィジェットを追加" -#: templates/extras/dashboard/widgets/bookmarks.html:14 +#: netbox/templates/extras/dashboard/widgets/bookmarks.html:14 msgid "No bookmarks have been added yet." msgstr "ブックマークはまだ追加されていません。" -#: templates/extras/dashboard/widgets/objectcounts.html:10 +#: netbox/templates/extras/dashboard/widgets/objectcounts.html:10 msgid "No permission" msgstr "許可なし" -#: templates/extras/dashboard/widgets/objectlist.html:6 +#: netbox/templates/extras/dashboard/widgets/objectlist.html:6 msgid "No permission to view this content" msgstr "このコンテンツを閲覧する権限がありません" -#: templates/extras/dashboard/widgets/objectlist.html:10 +#: netbox/templates/extras/dashboard/widgets/objectlist.html:10 msgid "Unable to load content. Invalid view name" msgstr "コンテンツを読み込めません。ビュー名が無効です。" -#: templates/extras/dashboard/widgets/rssfeed.html:12 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:12 msgid "No content found" msgstr "コンテンツが見つかりません" -#: templates/extras/dashboard/widgets/rssfeed.html:18 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:18 msgid "There was a problem fetching the RSS feed" msgstr "RSS フィードの取得中に問題が発生しました" -#: templates/extras/dashboard/widgets/rssfeed.html:21 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:21 msgid "HTTP" msgstr "HTTP" -#: templates/extras/eventrule.html:61 +#: netbox/templates/extras/eventrule.html:61 msgid "Conditions" msgstr "条件" -#: templates/extras/exporttemplate.html:23 +#: netbox/templates/extras/exporttemplate.html:23 msgid "MIME Type" msgstr "マイムタイプ" -#: templates/extras/exporttemplate.html:27 +#: netbox/templates/extras/exporttemplate.html:27 msgid "File Extension" msgstr "ファイル拡張子" -#: templates/extras/htmx/script_result.html:10 +#: netbox/templates/extras/htmx/script_result.html:10 msgid "Scheduled for" msgstr "予定日" -#: templates/extras/htmx/script_result.html:15 +#: netbox/templates/extras/htmx/script_result.html:15 msgid "Duration" msgstr "所要時間" -#: templates/extras/htmx/script_result.html:23 +#: netbox/templates/extras/htmx/script_result.html:23 msgid "Test Summary" msgstr "テスト概要" -#: templates/extras/htmx/script_result.html:43 +#: netbox/templates/extras/htmx/script_result.html:43 msgid "Log" msgstr "ログ" -#: templates/extras/htmx/script_result.html:56 +#: netbox/templates/extras/htmx/script_result.html:56 msgid "Output" msgstr "出力" -#: templates/extras/inc/result_pending.html:4 +#: netbox/templates/extras/inc/result_pending.html:4 msgid "Loading" msgstr "読み込み中" -#: templates/extras/inc/result_pending.html:6 +#: netbox/templates/extras/inc/result_pending.html:6 msgid "Results pending" msgstr "結果は保留中です" -#: templates/extras/journalentry.html:15 +#: netbox/templates/extras/journalentry.html:15 msgid "Journal Entry" msgstr "ジャーナルエントリ" -#: templates/extras/notificationgroup.html:11 +#: netbox/templates/extras/notificationgroup.html:11 msgid "Notification Group" msgstr "通知グループ" -#: templates/extras/notificationgroup.html:36 -#: templates/extras/notificationgroup.html:46 -#: utilities/templates/widgets/clearable_file_input.html:12 +#: netbox/templates/extras/notificationgroup.html:36 +#: netbox/templates/extras/notificationgroup.html:46 +#: netbox/utilities/templates/widgets/clearable_file_input.html:12 msgid "None assigned" msgstr "割り当てなし" -#: templates/extras/object_configcontext.html:19 +#: netbox/templates/extras/object_configcontext.html:19 msgid "The local config context overwrites all source contexts" msgstr "ローカル設定コンテキストはすべてのソースコンテキストを上書きします" -#: templates/extras/object_configcontext.html:25 +#: netbox/templates/extras/object_configcontext.html:25 msgid "Source Contexts" msgstr "ソースコンテキスト" -#: templates/extras/object_journal.html:17 +#: netbox/templates/extras/object_journal.html:17 msgid "New Journal Entry" msgstr "新しいジャーナルエントリ" -#: templates/extras/report/base.html:30 +#: netbox/templates/extras/report/base.html:30 msgid "Report" msgstr "報告書" -#: templates/extras/script.html:14 +#: netbox/templates/extras/script.html:14 msgid "You do not have permission to run scripts" msgstr "スクリプトを実行する権限がありません" -#: templates/extras/script.html:41 templates/extras/script.html:45 -#: templates/extras/script_list.html:86 +#: netbox/templates/extras/script.html:41 +#: netbox/templates/extras/script.html:45 +#: netbox/templates/extras/script_list.html:87 msgid "Run Script" msgstr "スクリプトを実行" -#: templates/extras/script.html:51 templates/extras/script/source.html:10 +#: netbox/templates/extras/script.html:51 +#: netbox/templates/extras/script/source.html:10 msgid "Error loading script" msgstr "スクリプトのロード中にエラーが発生しました" -#: templates/extras/script/jobs.html:16 +#: netbox/templates/extras/script/jobs.html:16 msgid "Script no longer exists in the source file." msgstr "スクリプトはソースファイルに存在しなくなりました。" -#: templates/extras/script_list.html:46 +#: netbox/templates/extras/script_list.html:47 msgid "Last Run" msgstr "ラストラン" -#: templates/extras/script_list.html:61 +#: netbox/templates/extras/script_list.html:62 msgid "Script is no longer present in the source file" msgstr "スクリプトはソースファイルに存在しなくなりました" -#: templates/extras/script_list.html:74 +#: netbox/templates/extras/script_list.html:75 msgid "Never" msgstr "決して" -#: templates/extras/script_list.html:84 +#: netbox/templates/extras/script_list.html:85 msgid "Run Again" msgstr "もう一度実行" -#: templates/extras/script_list.html:138 +#: netbox/templates/extras/script_list.html:133 +#, python-format +msgid "Could not load scripts from module %(module)s" +msgstr "モジュール%(module)sからスクリプトを読み込めませんでした " + +#: netbox/templates/extras/script_list.html:141 msgid "No Scripts Found" msgstr "スクリプトが見つかりません" -#: templates/extras/script_list.html:141 +#: netbox/templates/extras/script_list.html:144 #, python-format msgid "" "Get started by creating a script from " @@ -12507,81 +13305,83 @@ msgstr "" "始めてみよう スクリプトの作成 " "アップロードされたファイルまたはデータソースから。" -#: templates/extras/script_result.html:35 -#: templates/generic/object_list.html:50 templates/search.html:13 +#: netbox/templates/extras/script_result.html:35 +#: netbox/templates/generic/object_list.html:50 +#: netbox/templates/search.html:13 msgid "Results" msgstr "結果" -#: templates/extras/script_result.html:46 +#: netbox/templates/extras/script_result.html:46 msgid "Log threshold" msgstr "ログ閾値" -#: templates/extras/script_result.html:56 +#: netbox/templates/extras/script_result.html:56 msgid "All" msgstr "[すべて]" -#: templates/extras/tag.html:32 +#: netbox/templates/extras/tag.html:32 msgid "Tagged Items" msgstr "タグ付きアイテム" -#: templates/extras/tag.html:43 +#: netbox/templates/extras/tag.html:43 msgid "Allowed Object Types" msgstr "許可されるオブジェクトタイプ" -#: templates/extras/tag.html:51 +#: netbox/templates/extras/tag.html:51 msgid "Any" msgstr "任意" -#: templates/extras/tag.html:57 +#: netbox/templates/extras/tag.html:57 msgid "Tagged Item Types" msgstr "タグ付きアイテムタイプ" -#: templates/extras/tag.html:81 +#: netbox/templates/extras/tag.html:81 msgid "Tagged Objects" msgstr "タグ付きオブジェクト" -#: templates/extras/webhook.html:26 +#: netbox/templates/extras/webhook.html:26 msgid "HTTP Method" msgstr "HTTP メソッド" -#: templates/extras/webhook.html:34 +#: netbox/templates/extras/webhook.html:34 msgid "HTTP Content Type" msgstr "HTTP コンテンツタイプ" -#: templates/extras/webhook.html:47 +#: netbox/templates/extras/webhook.html:47 msgid "SSL Verification" msgstr "SSL 検証" -#: templates/extras/webhook.html:60 +#: netbox/templates/extras/webhook.html:60 msgid "Additional Headers" msgstr "その他のヘッダー" -#: templates/extras/webhook.html:70 +#: netbox/templates/extras/webhook.html:70 msgid "Body Template" msgstr "ボディテンプレート" -#: templates/generic/bulk_add_component.html:29 +#: netbox/templates/generic/bulk_add_component.html:29 msgid "Bulk Creation" msgstr "一括作成" -#: templates/generic/bulk_add_component.html:34 -#: templates/generic/bulk_delete.html:32 templates/generic/bulk_edit.html:33 +#: netbox/templates/generic/bulk_add_component.html:34 +#: netbox/templates/generic/bulk_delete.html:32 +#: netbox/templates/generic/bulk_edit.html:33 msgid "Selected Objects" msgstr "選択オブジェクト" -#: templates/generic/bulk_add_component.html:58 +#: netbox/templates/generic/bulk_add_component.html:58 msgid "to Add" msgstr "追加するには" -#: templates/generic/bulk_delete.html:27 +#: netbox/templates/generic/bulk_delete.html:27 msgid "Bulk Delete" msgstr "一括削除" -#: templates/generic/bulk_delete.html:49 +#: netbox/templates/generic/bulk_delete.html:49 msgid "Confirm Bulk Deletion" msgstr "一括削除を確認" -#: templates/generic/bulk_delete.html:50 +#: netbox/templates/generic/bulk_delete.html:50 #, python-format msgid "" "The following operation will delete %(count)s " @@ -12591,64 +13391,67 @@ msgstr "" "次の操作で削除されます %(count)s " "%(type_plural)s。選択したオブジェクトを注意深く確認し、この操作を確認してください。" -#: templates/generic/bulk_edit.html:21 templates/generic/object_edit.html:22 +#: netbox/templates/generic/bulk_edit.html:21 +#: netbox/templates/generic/object_edit.html:22 msgid "Editing" msgstr "編集" -#: templates/generic/bulk_edit.html:28 +#: netbox/templates/generic/bulk_edit.html:28 msgid "Bulk Edit" msgstr "一括編集" -#: templates/generic/bulk_edit.html:107 templates/generic/bulk_rename.html:66 +#: netbox/templates/generic/bulk_edit.html:107 +#: netbox/templates/generic/bulk_rename.html:66 msgid "Apply" msgstr "申し込む" -#: templates/generic/bulk_import.html:19 +#: netbox/templates/generic/bulk_import.html:19 msgid "Bulk Import" msgstr "一括インポート" -#: templates/generic/bulk_import.html:25 +#: netbox/templates/generic/bulk_import.html:25 msgid "Direct Import" msgstr "直接インポート" -#: templates/generic/bulk_import.html:30 +#: netbox/templates/generic/bulk_import.html:30 msgid "Upload File" msgstr "ファイルをアップロード" -#: templates/generic/bulk_import.html:58 templates/generic/bulk_import.html:80 -#: templates/generic/bulk_import.html:102 +#: netbox/templates/generic/bulk_import.html:58 +#: netbox/templates/generic/bulk_import.html:80 +#: netbox/templates/generic/bulk_import.html:102 msgid "Submit" msgstr "送信" -#: templates/generic/bulk_import.html:113 +#: netbox/templates/generic/bulk_import.html:113 msgid "Field Options" msgstr "フィールドオプション" -#: templates/generic/bulk_import.html:119 +#: netbox/templates/generic/bulk_import.html:119 msgid "Accessor" msgstr "アクセサ" -#: templates/generic/bulk_import.html:148 +#: netbox/templates/generic/bulk_import.html:148 msgid "choices" msgstr "選択肢" -#: templates/generic/bulk_import.html:161 +#: netbox/templates/generic/bulk_import.html:161 msgid "Import Value" msgstr "インポート値" -#: templates/generic/bulk_import.html:181 +#: netbox/templates/generic/bulk_import.html:181 msgid "Format: YYYY-MM-DD" msgstr "フォーマット:YYYY-MM-DD" -#: templates/generic/bulk_import.html:183 +#: netbox/templates/generic/bulk_import.html:183 msgid "Specify true or false" msgstr "真/偽を指定してください" -#: templates/generic/bulk_import.html:195 +#: netbox/templates/generic/bulk_import.html:195 msgid "Required fields must be specified for all objects." msgstr "必須フィールド しなければならない すべてのオブジェクトに指定してください。" -#: templates/generic/bulk_import.html:201 +#: netbox/templates/generic/bulk_import.html:201 #, python-format msgid "" "Related objects may be referenced by any unique attribute. For example, " @@ -12656,15 +13459,15 @@ msgid "" msgstr "" "関連オブジェクトは、任意の一意の属性で参照できます。たとえば、 %(example)s VRF はルート識別子で識別されます。" -#: templates/generic/bulk_remove.html:28 +#: netbox/templates/generic/bulk_remove.html:28 msgid "Bulk Remove" msgstr "一括削除" -#: templates/generic/bulk_remove.html:42 +#: netbox/templates/generic/bulk_remove.html:42 msgid "Confirm Bulk Removal" msgstr "一括削除を確認" -#: templates/generic/bulk_remove.html:43 +#: netbox/templates/generic/bulk_remove.html:43 #, python-format msgid "" "The following operation will remove %(count)s %(obj_type_plural)s from " @@ -12674,72 +13477,72 @@ msgstr "" "次の操作で削除されます %(count)s %(obj_type_plural)s から %(parent_obj)s。よく確認してください " "%(obj_type_plural)s 削除する予定。以下で確認する。" -#: templates/generic/bulk_remove.html:64 +#: netbox/templates/generic/bulk_remove.html:64 #, python-format msgid "Remove these %(count)s %(obj_type_plural)s" msgstr "これらを削除 %(count)s %(obj_type_plural)s" -#: templates/generic/bulk_rename.html:20 +#: netbox/templates/generic/bulk_rename.html:20 msgid "Renaming" msgstr "名前変更" -#: templates/generic/bulk_rename.html:27 +#: netbox/templates/generic/bulk_rename.html:27 msgid "Bulk Rename" msgstr "一括名前変更" -#: templates/generic/bulk_rename.html:39 +#: netbox/templates/generic/bulk_rename.html:39 msgid "Current Name" msgstr "現在の名前" -#: templates/generic/bulk_rename.html:40 +#: netbox/templates/generic/bulk_rename.html:40 msgid "New Name" msgstr "新しい名前" -#: templates/generic/bulk_rename.html:64 -#: utilities/templates/widgets/markdown_input.html:11 +#: netbox/templates/generic/bulk_rename.html:64 +#: netbox/utilities/templates/widgets/markdown_input.html:11 msgid "Preview" msgstr "プレビュー" -#: templates/generic/confirmation_form.html:16 +#: netbox/templates/generic/confirmation_form.html:16 msgid "Are you sure" msgstr "よろしいですか" -#: templates/generic/confirmation_form.html:20 +#: netbox/templates/generic/confirmation_form.html:20 msgid "Confirm" msgstr "確認" -#: templates/generic/object_children.html:47 -#: utilities/templates/buttons/bulk_edit.html:4 +#: netbox/templates/generic/object_children.html:47 +#: netbox/utilities/templates/buttons/bulk_edit.html:4 msgid "Edit Selected" msgstr "選択項目を編集" -#: templates/generic/object_children.html:61 -#: utilities/templates/buttons/bulk_delete.html:4 +#: netbox/templates/generic/object_children.html:61 +#: netbox/utilities/templates/buttons/bulk_delete.html:4 msgid "Delete Selected" msgstr "選択項目を削除" -#: templates/generic/object_edit.html:24 +#: netbox/templates/generic/object_edit.html:24 #, python-format msgid "Add a new %(object_type)s" msgstr "新規追加 %(object_type)s" -#: templates/generic/object_edit.html:35 +#: netbox/templates/generic/object_edit.html:35 msgid "View model documentation" msgstr "モデルドキュメンテーションを見る" -#: templates/generic/object_edit.html:36 +#: netbox/templates/generic/object_edit.html:36 msgid "Help" msgstr "ヘルプ" -#: templates/generic/object_edit.html:83 +#: netbox/templates/generic/object_edit.html:83 msgid "Create & Add Another" msgstr "作成して別のものを追加" -#: templates/generic/object_list.html:57 +#: netbox/templates/generic/object_list.html:57 msgid "Filters" msgstr "フィルタ" -#: templates/generic/object_list.html:88 +#: netbox/templates/generic/object_list.html:88 #, python-format msgid "" "Select all %(count)s " @@ -12748,40 +13551,40 @@ msgstr "" "選択 すべて %(count)s " "%(object_type_plural)s マッチングクエリ" -#: templates/home.html:15 +#: netbox/templates/home.html:15 msgid "New Release Available" msgstr "新しいリリースが入手可能" -#: templates/home.html:16 +#: netbox/templates/home.html:16 msgid "is available" msgstr "利用可能です" -#: templates/home.html:18 +#: netbox/templates/home.html:18 msgctxt "Document title" msgid "Upgrade Instructions" msgstr "アップグレード手順" -#: templates/home.html:40 +#: netbox/templates/home.html:40 msgid "Unlock Dashboard" msgstr "ダッシュボードのロック解除" -#: templates/home.html:49 +#: netbox/templates/home.html:49 msgid "Lock Dashboard" msgstr "ロックダッシュボード" -#: templates/home.html:60 +#: netbox/templates/home.html:60 msgid "Add Widget" msgstr "ウィジェットを追加" -#: templates/home.html:63 +#: netbox/templates/home.html:63 msgid "Save Layout" msgstr "レイアウトを保存" -#: templates/htmx/delete_form.html:7 +#: netbox/templates/htmx/delete_form.html:7 msgid "Confirm Deletion" msgstr "削除を確認" -#: templates/htmx/delete_form.html:11 +#: netbox/templates/htmx/delete_form.html:11 #, python-format msgid "" "Are you sure you want to delete " @@ -12790,40 +13593,40 @@ msgstr "" "本当にしたいですか 削除する %(object_type)s " "%(object)s?" -#: templates/htmx/delete_form.html:17 +#: netbox/templates/htmx/delete_form.html:17 msgid "The following objects will be deleted as a result of this action." msgstr "このアクションの結果、次のオブジェクトが削除されます。" -#: templates/htmx/notifications.html:15 +#: netbox/templates/htmx/notifications.html:15 msgid "ago" msgstr "前に" -#: templates/htmx/notifications.html:26 +#: netbox/templates/htmx/notifications.html:26 msgid "No unread notifications" msgstr "未読通知なし" -#: templates/htmx/notifications.html:31 +#: netbox/templates/htmx/notifications.html:31 msgid "All notifications" msgstr "すべての通知" -#: templates/htmx/object_selector.html:5 +#: netbox/templates/htmx/object_selector.html:5 msgid "Select" msgstr "選択" -#: templates/inc/filter_list.html:43 -#: utilities/templates/helpers/table_config_form.html:39 +#: netbox/templates/inc/filter_list.html:43 +#: netbox/utilities/templates/helpers/table_config_form.html:39 msgid "Reset" msgstr "リセット" -#: templates/inc/light_toggle.html:4 +#: netbox/templates/inc/light_toggle.html:4 msgid "Enable dark mode" msgstr "ダークモードを有効にする" -#: templates/inc/light_toggle.html:7 +#: netbox/templates/inc/light_toggle.html:7 msgid "Enable light mode" msgstr "ライトモードを有効にする" -#: templates/inc/missing_prerequisites.html:8 +#: netbox/templates/inc/missing_prerequisites.html:8 #, python-format msgid "" "Before you can add a %(model)s you must first create a " @@ -12831,281 +13634,283 @@ msgid "" msgstr "" "追加する前に %(model)s 最初に作成する必要があります %(prerequisite_model)s。" -#: templates/inc/paginator.html:15 +#: netbox/templates/inc/paginator.html:15 msgid "Page selection" msgstr "ページ選択" -#: templates/inc/paginator.html:75 +#: netbox/templates/inc/paginator.html:75 #, python-format msgid "Showing %(start)s-%(end)s of %(total)s" msgstr "表示中 %(start)s-%(end)s の %(total)s" -#: templates/inc/paginator.html:82 +#: netbox/templates/inc/paginator.html:82 msgid "Pagination options" msgstr "ページネーションオプション" -#: templates/inc/paginator.html:86 +#: netbox/templates/inc/paginator.html:86 msgid "Per Page" msgstr "1 ページあたり" -#: templates/inc/panels/image_attachments.html:10 +#: netbox/templates/inc/panels/image_attachments.html:10 msgid "Attach an image" msgstr "画像を添付" -#: templates/inc/panels/related_objects.html:5 +#: netbox/templates/inc/panels/related_objects.html:5 msgid "Related Objects" msgstr "関連オブジェクト" -#: templates/inc/panels/tags.html:11 +#: netbox/templates/inc/panels/tags.html:11 msgid "No tags assigned" msgstr "タグが割り当てられていません" -#: templates/inc/sync_warning.html:10 +#: netbox/templates/inc/sync_warning.html:10 msgid "Data is out of sync with upstream file" msgstr "データはアップストリームファイルと同期していません" -#: templates/inc/table_controls_htmx.html:7 +#: netbox/templates/inc/table_controls_htmx.html:7 msgid "Quick search" msgstr "簡易検索" -#: templates/inc/table_controls_htmx.html:20 +#: netbox/templates/inc/table_controls_htmx.html:20 msgid "Saved filter" msgstr "保存済みフィルタ" -#: templates/inc/table_htmx.html:18 +#: netbox/templates/inc/table_htmx.html:18 msgid "Clear ordering" msgstr "注文をクリア" -#: templates/inc/user_menu.html:6 +#: netbox/templates/inc/user_menu.html:6 msgid "Help center" msgstr "ヘルプセンター" -#: templates/inc/user_menu.html:41 +#: netbox/templates/inc/user_menu.html:41 msgid "Django Admin" msgstr "ジャンゴ管理者" -#: templates/inc/user_menu.html:61 +#: netbox/templates/inc/user_menu.html:61 msgid "Log Out" msgstr "ログアウト" -#: templates/inc/user_menu.html:68 templates/login.html:38 +#: netbox/templates/inc/user_menu.html:68 netbox/templates/login.html:38 msgid "Log In" msgstr "ログイン" -#: templates/ipam/aggregate.html:14 templates/ipam/ipaddress.html:14 -#: templates/ipam/iprange.html:13 templates/ipam/prefix.html:15 +#: netbox/templates/ipam/aggregate.html:14 +#: netbox/templates/ipam/ipaddress.html:14 +#: netbox/templates/ipam/iprange.html:13 netbox/templates/ipam/prefix.html:15 msgid "Family" msgstr "ファミリー" -#: templates/ipam/aggregate.html:39 +#: netbox/templates/ipam/aggregate.html:39 msgid "Date Added" msgstr "追加日" -#: templates/ipam/aggregate/prefixes.html:8 -#: templates/ipam/prefix/prefixes.html:8 templates/ipam/role.html:10 +#: netbox/templates/ipam/aggregate/prefixes.html:8 +#: netbox/templates/ipam/prefix/prefixes.html:8 +#: netbox/templates/ipam/role.html:10 msgid "Add Prefix" msgstr "プレフィックスを追加" -#: templates/ipam/asn.html:23 +#: netbox/templates/ipam/asn.html:23 msgid "AS Number" msgstr "AS 番号" -#: templates/ipam/fhrpgroup.html:52 +#: netbox/templates/ipam/fhrpgroup.html:52 msgid "Authentication Type" msgstr "認証タイプ" -#: templates/ipam/fhrpgroup.html:56 +#: netbox/templates/ipam/fhrpgroup.html:56 msgid "Authentication Key" msgstr "認証キー" -#: templates/ipam/fhrpgroup.html:69 +#: netbox/templates/ipam/fhrpgroup.html:69 msgid "Virtual IP Addresses" msgstr "仮想 IP アドレス" -#: templates/ipam/inc/ipaddress_edit_header.html:13 +#: netbox/templates/ipam/inc/ipaddress_edit_header.html:13 msgid "Assign IP" msgstr "IP アドレスを割り当てる" -#: templates/ipam/inc/ipaddress_edit_header.html:19 +#: netbox/templates/ipam/inc/ipaddress_edit_header.html:19 msgid "Bulk Create" msgstr "一括作成" -#: templates/ipam/inc/panels/fhrp_groups.html:10 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:10 msgid "Create Group" msgstr "グループを作成" -#: templates/ipam/inc/panels/fhrp_groups.html:25 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:25 msgid "Virtual IPs" msgstr "仮想 IP" -#: templates/ipam/inc/toggle_available.html:7 +#: netbox/templates/ipam/inc/toggle_available.html:7 msgid "Show Assigned" msgstr "割り当て済みを表示" -#: templates/ipam/inc/toggle_available.html:10 +#: netbox/templates/ipam/inc/toggle_available.html:10 msgid "Show Available" msgstr "ショー利用可能" -#: templates/ipam/inc/toggle_available.html:13 +#: netbox/templates/ipam/inc/toggle_available.html:13 msgid "Show All" msgstr "すべて表示" -#: templates/ipam/ipaddress.html:23 templates/ipam/iprange.html:45 -#: templates/ipam/prefix.html:24 +#: netbox/templates/ipam/ipaddress.html:23 +#: netbox/templates/ipam/iprange.html:45 netbox/templates/ipam/prefix.html:24 msgid "Global" msgstr "グローバル" -#: templates/ipam/ipaddress.html:85 +#: netbox/templates/ipam/ipaddress.html:85 msgid "NAT (outside)" msgstr "NAT (アウトサイド)" -#: templates/ipam/ipaddress_assign.html:8 +#: netbox/templates/ipam/ipaddress_assign.html:8 msgid "Assign an IP Address" msgstr "IP アドレスを割り当てる" -#: templates/ipam/ipaddress_assign.html:22 +#: netbox/templates/ipam/ipaddress_assign.html:22 msgid "Select IP Address" msgstr "IP アドレスを選択" -#: templates/ipam/ipaddress_assign.html:35 +#: netbox/templates/ipam/ipaddress_assign.html:35 msgid "Search Results" msgstr "検索結果" -#: templates/ipam/ipaddress_bulk_add.html:6 +#: netbox/templates/ipam/ipaddress_bulk_add.html:6 msgid "Bulk Add IP Addresses" msgstr "IP アドレスを一括追加" -#: templates/ipam/iprange.html:17 +#: netbox/templates/ipam/iprange.html:17 msgid "Starting Address" msgstr "開始アドレス" -#: templates/ipam/iprange.html:21 +#: netbox/templates/ipam/iprange.html:21 msgid "Ending Address" msgstr "終了アドレス" -#: templates/ipam/iprange.html:33 templates/ipam/prefix.html:110 +#: netbox/templates/ipam/iprange.html:33 netbox/templates/ipam/prefix.html:110 msgid "Marked fully utilized" msgstr "「完全使用済み」とマークされています" -#: templates/ipam/prefix.html:99 +#: netbox/templates/ipam/prefix.html:99 msgid "Addressing Details" msgstr "アドレス詳細" -#: templates/ipam/prefix.html:118 +#: netbox/templates/ipam/prefix.html:118 msgid "Child IPs" msgstr "子供 IP" -#: templates/ipam/prefix.html:126 +#: netbox/templates/ipam/prefix.html:126 msgid "Available IPs" msgstr "使用可能な IP" -#: templates/ipam/prefix.html:138 +#: netbox/templates/ipam/prefix.html:138 msgid "First available IP" msgstr "最初に利用可能な IP" -#: templates/ipam/prefix.html:179 +#: netbox/templates/ipam/prefix.html:179 msgid "Prefix Details" msgstr "プレフィックスの詳細" -#: templates/ipam/prefix.html:185 +#: netbox/templates/ipam/prefix.html:185 msgid "Network Address" msgstr "ネットワークアドレス" -#: templates/ipam/prefix.html:189 +#: netbox/templates/ipam/prefix.html:189 msgid "Network Mask" msgstr "ネットワークマスク" -#: templates/ipam/prefix.html:193 +#: netbox/templates/ipam/prefix.html:193 msgid "Wildcard Mask" msgstr "ワイルドカードマスク" -#: templates/ipam/prefix.html:197 +#: netbox/templates/ipam/prefix.html:197 msgid "Broadcast Address" msgstr "ブロードキャストアドレス" -#: templates/ipam/prefix/ip_ranges.html:7 +#: netbox/templates/ipam/prefix/ip_ranges.html:7 msgid "Add IP Range" msgstr "IP アドレス範囲を追加" -#: templates/ipam/prefix_list.html:7 +#: netbox/templates/ipam/prefix_list.html:7 msgid "Hide Depth Indicators" msgstr "深度インジケーターを非表示" -#: templates/ipam/prefix_list.html:11 +#: netbox/templates/ipam/prefix_list.html:11 msgid "Max Depth" msgstr "最大深度" -#: templates/ipam/prefix_list.html:28 +#: netbox/templates/ipam/prefix_list.html:28 msgid "Max Length" msgstr "最大長" -#: templates/ipam/rir.html:10 +#: netbox/templates/ipam/rir.html:10 msgid "Add Aggregate" msgstr "集約を追加" -#: templates/ipam/routetarget.html:38 +#: netbox/templates/ipam/routetarget.html:38 msgid "Importing VRFs" msgstr "VRF のインポート" -#: templates/ipam/routetarget.html:44 +#: netbox/templates/ipam/routetarget.html:44 msgid "Exporting VRFs" msgstr "VRF のエクスポート" -#: templates/ipam/routetarget.html:52 +#: netbox/templates/ipam/routetarget.html:52 msgid "Importing L2VPNs" msgstr "L2VPN のインポート" -#: templates/ipam/routetarget.html:58 +#: netbox/templates/ipam/routetarget.html:58 msgid "Exporting L2VPNs" msgstr "L2VPN のエクスポート" -#: templates/ipam/vlan.html:88 +#: netbox/templates/ipam/vlan.html:88 msgid "Add a Prefix" msgstr "プレフィックスを追加" -#: templates/ipam/vlangroup.html:18 +#: netbox/templates/ipam/vlangroup.html:18 msgid "Add VLAN" msgstr "VLAN の追加" -#: templates/ipam/vrf.html:16 +#: netbox/templates/ipam/vrf.html:16 msgid "Route Distinguisher" msgstr "ルート識別子" -#: templates/ipam/vrf.html:29 +#: netbox/templates/ipam/vrf.html:29 msgid "Unique IP Space" msgstr "ユニークな IP スペース" -#: templates/login.html:29 -#: utilities/templates/form_helpers/render_errors.html:7 +#: netbox/templates/login.html:29 +#: netbox/utilities/templates/form_helpers/render_errors.html:7 msgid "Errors" msgstr "エラー" -#: templates/login.html:69 +#: netbox/templates/login.html:69 msgid "Sign In" msgstr "サインイン" -#: templates/login.html:77 +#: netbox/templates/login.html:77 msgctxt "Denotes an alternative option" msgid "Or" msgstr "または" -#: templates/media_failure.html:7 +#: netbox/templates/media_failure.html:7 msgid "Static Media Failure - NetBox" msgstr "スタティックメディア障害-NetBox" -#: templates/media_failure.html:21 +#: netbox/templates/media_failure.html:21 msgid "Static Media Failure" msgstr "スタティックメディア障害" -#: templates/media_failure.html:23 +#: netbox/templates/media_failure.html:23 msgid "The following static media file failed to load" msgstr "次の静的メディアファイルを読み込めませんでした" -#: templates/media_failure.html:26 +#: netbox/templates/media_failure.html:26 msgid "Check the following" msgstr "以下を確認してください" -#: templates/media_failure.html:29 +#: netbox/templates/media_failure.html:29 msgid "" "manage.py collectstatic was run during the most recent upgrade." " This installs the most recent iteration of each static file into the static" @@ -13114,7 +13919,7 @@ msgstr "" "manage.py コレクトスタティック " "最新のアップグレード時に実行されました。これにより、各静的ファイルの最新のイテレーションが静的ルートパスにインストールされます。" -#: templates/media_failure.html:35 +#: netbox/templates/media_failure.html:35 #, python-format msgid "" "The HTTP service (e.g. nginx or Apache) is configured to serve files from " @@ -13125,7 +13930,7 @@ msgstr "" "スタティック・ルート パス。を参照してください。 インストールドキュメント さらなるガイダンスについて。" -#: templates/media_failure.html:47 +#: netbox/templates/media_failure.html:47 #, python-format msgid "" "The file %(filename)s exists in the static root directory and " @@ -13133,546 +13938,569 @@ msgid "" msgstr "" "このファイル %(filename)s 静的ルートディレクトリに存在し、HTTP サーバーから読み取ることができます。" -#: templates/media_failure.html:55 +#: netbox/templates/media_failure.html:55 #, python-format msgid "Click here to attempt loading NetBox again." msgstr "クリック ここに NetBox をもう一度ロードしてみます。" -#: templates/tenancy/contact.html:18 tenancy/filtersets.py:147 -#: tenancy/forms/bulk_edit.py:137 tenancy/forms/filtersets.py:102 -#: tenancy/forms/forms.py:56 tenancy/forms/model_forms.py:106 -#: tenancy/forms/model_forms.py:130 tenancy/tables/contacts.py:98 +#: netbox/templates/tenancy/contact.html:18 netbox/tenancy/filtersets.py: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/model_forms.py:130 +#: netbox/tenancy/tables/contacts.py:98 msgid "Contact" msgstr "連絡" -#: templates/tenancy/contact.html:29 tenancy/forms/bulk_edit.py:99 +#: netbox/templates/tenancy/contact.html:29 +#: netbox/tenancy/forms/bulk_edit.py:99 msgid "Title" msgstr "タイトル" -#: templates/tenancy/contact.html:33 tenancy/forms/bulk_edit.py:104 -#: tenancy/tables/contacts.py:64 +#: netbox/templates/tenancy/contact.html:33 +#: netbox/tenancy/forms/bulk_edit.py:104 netbox/tenancy/tables/contacts.py:64 msgid "Phone" msgstr "電話" -#: templates/tenancy/contactgroup.html:18 tenancy/forms/forms.py:66 -#: tenancy/forms/model_forms.py:75 +#: netbox/templates/tenancy/contactgroup.html:18 +#: netbox/tenancy/forms/forms.py:66 netbox/tenancy/forms/model_forms.py:75 msgid "Contact Group" msgstr "コンタクトグループ" -#: templates/tenancy/contactgroup.html:50 +#: netbox/templates/tenancy/contactgroup.html:50 msgid "Add Contact Group" msgstr "連絡先グループを追加" -#: templates/tenancy/contactrole.html:15 tenancy/filtersets.py:152 -#: tenancy/forms/forms.py:61 tenancy/forms/model_forms.py:87 +#: netbox/templates/tenancy/contactrole.html:15 +#: netbox/tenancy/filtersets.py:152 netbox/tenancy/forms/forms.py:61 +#: netbox/tenancy/forms/model_forms.py:87 msgid "Contact Role" msgstr "連絡先のロール" -#: templates/tenancy/object_contacts.html:9 +#: netbox/templates/tenancy/object_contacts.html:9 msgid "Add a contact" msgstr "連絡先を追加" -#: templates/tenancy/tenantgroup.html:17 +#: netbox/templates/tenancy/tenantgroup.html:17 msgid "Add Tenant" msgstr "テナントを追加" -#: templates/tenancy/tenantgroup.html:26 tenancy/forms/model_forms.py:32 -#: tenancy/tables/columns.py:51 tenancy/tables/columns.py:61 +#: netbox/templates/tenancy/tenantgroup.html:26 +#: netbox/tenancy/forms/model_forms.py:32 netbox/tenancy/tables/columns.py:51 +#: netbox/tenancy/tables/columns.py:61 msgid "Tenant Group" msgstr "テナントグループ" -#: templates/tenancy/tenantgroup.html:59 +#: netbox/templates/tenancy/tenantgroup.html:59 msgid "Add Tenant Group" msgstr "テナントグループの追加" -#: templates/users/group.html:39 templates/users/user.html:63 +#: netbox/templates/users/group.html:39 netbox/templates/users/user.html:63 msgid "Assigned Permissions" msgstr "割当権限" -#: templates/users/objectpermission.html:6 -#: templates/users/objectpermission.html:14 users/forms/filtersets.py:66 +#: netbox/templates/users/objectpermission.html:6 +#: netbox/templates/users/objectpermission.html:14 +#: netbox/users/forms/filtersets.py:66 msgid "Permission" msgstr "許可" -#: templates/users/objectpermission.html:34 +#: netbox/templates/users/objectpermission.html:34 msgid "View" msgstr "ビュー" -#: templates/users/objectpermission.html:52 users/forms/model_forms.py:315 +#: netbox/templates/users/objectpermission.html:52 +#: netbox/users/forms/model_forms.py:315 msgid "Constraints" msgstr "制約" -#: templates/users/objectpermission.html:72 +#: netbox/templates/users/objectpermission.html:72 msgid "Assigned Users" msgstr "割当ユーザ" -#: templates/virtualization/cluster.html:52 +#: netbox/templates/virtualization/cluster.html:52 msgid "Allocated Resources" msgstr "割り当てられたリソース" -#: templates/virtualization/cluster.html:55 -#: templates/virtualization/virtualmachine.html:125 +#: netbox/templates/virtualization/cluster.html:55 +#: netbox/templates/virtualization/virtualmachine.html:125 msgid "Virtual CPUs" msgstr "バーチャル CPU" -#: templates/virtualization/cluster.html:59 -#: templates/virtualization/virtualmachine.html:129 +#: netbox/templates/virtualization/cluster.html:59 +#: netbox/templates/virtualization/virtualmachine.html:129 msgid "Memory" msgstr "メモリー" -#: templates/virtualization/cluster.html:69 -#: templates/virtualization/virtualmachine.html:140 +#: netbox/templates/virtualization/cluster.html:69 +#: netbox/templates/virtualization/virtualmachine.html:140 msgid "Disk Space" msgstr "ディスク容量" -#: templates/virtualization/cluster/base.html:18 +#: netbox/templates/virtualization/cluster/base.html:18 msgid "Add Virtual Machine" msgstr "バーチャルマシンを追加" -#: templates/virtualization/cluster/base.html:24 +#: netbox/templates/virtualization/cluster/base.html:24 msgid "Assign Device" msgstr "デバイスを割り当て" -#: templates/virtualization/cluster/devices.html:10 +#: netbox/templates/virtualization/cluster/devices.html:10 msgid "Remove Selected" msgstr "選択項目を削除" -#: templates/virtualization/cluster_add_devices.html:9 +#: netbox/templates/virtualization/cluster_add_devices.html:9 #, python-format msgid "Add Device to Cluster %(cluster)s" msgstr "クラスタにデバイスを追加 %(cluster)s" -#: templates/virtualization/cluster_add_devices.html:23 +#: netbox/templates/virtualization/cluster_add_devices.html:23 msgid "Device Selection" msgstr "デバイス選択" -#: templates/virtualization/cluster_add_devices.html:31 +#: netbox/templates/virtualization/cluster_add_devices.html:31 msgid "Add Devices" msgstr "デバイスを追加" -#: templates/virtualization/clustergroup.html:10 -#: templates/virtualization/clustertype.html:10 +#: netbox/templates/virtualization/clustergroup.html:10 +#: netbox/templates/virtualization/clustertype.html:10 msgid "Add Cluster" msgstr "クラスタを追加" -#: templates/virtualization/clustergroup.html:19 -#: virtualization/forms/model_forms.py:50 +#: netbox/templates/virtualization/clustergroup.html:19 +#: netbox/virtualization/forms/model_forms.py:50 msgid "Cluster Group" msgstr "クラスタグループ" -#: templates/virtualization/clustertype.html:19 -#: templates/virtualization/virtualmachine.html:110 -#: virtualization/forms/model_forms.py:36 +#: netbox/templates/virtualization/clustertype.html:19 +#: netbox/templates/virtualization/virtualmachine.html:110 +#: netbox/virtualization/forms/model_forms.py:36 msgid "Cluster Type" msgstr "クラスタタイプ" -#: templates/virtualization/virtualdisk.html:18 +#: netbox/templates/virtualization/virtualdisk.html:18 msgid "Virtual Disk" msgstr "仮想ディスク" -#: templates/virtualization/virtualmachine.html:122 -#: virtualization/forms/bulk_edit.py:190 -#: virtualization/forms/model_forms.py:224 +#: netbox/templates/virtualization/virtualmachine.html:122 +#: netbox/virtualization/forms/bulk_edit.py:190 +#: netbox/virtualization/forms/model_forms.py:224 msgid "Resources" msgstr "リソース" -#: templates/virtualization/virtualmachine.html:178 +#: netbox/templates/virtualization/virtualmachine.html:178 msgid "Add Virtual Disk" msgstr "仮想ディスクを追加" -#: templates/vpn/ikepolicy.html:10 templates/vpn/ipsecprofile.html:33 -#: vpn/tables/crypto.py:166 +#: netbox/templates/virtualization/virtualmachine/render_config.html:70 +msgid "No configuration template has been assigned for this virtual machine." +msgstr "このVMには構成テンプレートが割り当てられていません。" + +#: netbox/templates/vpn/ikepolicy.html:10 +#: netbox/templates/vpn/ipsecprofile.html:33 netbox/vpn/tables/crypto.py:166 msgid "IKE Policy" msgstr "IKE ポリシー" -#: templates/vpn/ikepolicy.html:21 +#: netbox/templates/vpn/ikepolicy.html:21 msgid "IKE Version" msgstr "IKE バージョン" -#: templates/vpn/ikepolicy.html:29 +#: netbox/templates/vpn/ikepolicy.html:29 msgid "Pre-Shared Key" msgstr "事前共有キー" -#: templates/vpn/ikepolicy.html:33 -#: templates/wireless/inc/authentication_attrs.html:20 +#: netbox/templates/vpn/ikepolicy.html:33 +#: netbox/templates/wireless/inc/authentication_attrs.html:20 msgid "Show Secret" msgstr "シークレットを表示" -#: templates/vpn/ikepolicy.html:57 templates/vpn/ipsecpolicy.html:45 -#: templates/vpn/ipsecprofile.html:52 templates/vpn/ipsecprofile.html:77 -#: vpn/forms/model_forms.py:316 vpn/forms/model_forms.py:352 -#: vpn/tables/crypto.py:68 vpn/tables/crypto.py:134 +#: netbox/templates/vpn/ikepolicy.html:57 +#: netbox/templates/vpn/ipsecpolicy.html:45 +#: netbox/templates/vpn/ipsecprofile.html:52 +#: netbox/templates/vpn/ipsecprofile.html:77 +#: netbox/vpn/forms/model_forms.py:316 netbox/vpn/forms/model_forms.py:352 +#: netbox/vpn/tables/crypto.py:68 netbox/vpn/tables/crypto.py:134 msgid "Proposals" msgstr "提案" -#: templates/vpn/ikeproposal.html:10 +#: netbox/templates/vpn/ikeproposal.html:10 msgid "IKE Proposal" msgstr "イケアの提案" -#: templates/vpn/ikeproposal.html:21 vpn/forms/bulk_edit.py:97 -#: vpn/forms/bulk_import.py:145 vpn/forms/filtersets.py:101 +#: netbox/templates/vpn/ikeproposal.html:21 netbox/vpn/forms/bulk_edit.py:97 +#: netbox/vpn/forms/bulk_import.py:145 netbox/vpn/forms/filtersets.py:101 msgid "Authentication method" msgstr "認証方法" -#: templates/vpn/ikeproposal.html:25 templates/vpn/ipsecproposal.html:21 -#: vpn/forms/bulk_edit.py:102 vpn/forms/bulk_edit.py:172 -#: vpn/forms/bulk_import.py:149 vpn/forms/bulk_import.py:195 -#: vpn/forms/filtersets.py:106 vpn/forms/filtersets.py:154 +#: netbox/templates/vpn/ikeproposal.html:25 +#: netbox/templates/vpn/ipsecproposal.html:21 +#: netbox/vpn/forms/bulk_edit.py:102 netbox/vpn/forms/bulk_edit.py:172 +#: netbox/vpn/forms/bulk_import.py:149 netbox/vpn/forms/bulk_import.py:195 +#: netbox/vpn/forms/filtersets.py:106 netbox/vpn/forms/filtersets.py:154 msgid "Encryption algorithm" msgstr "暗号化アルゴリズム" -#: templates/vpn/ikeproposal.html:29 templates/vpn/ipsecproposal.html:25 -#: vpn/forms/bulk_edit.py:107 vpn/forms/bulk_edit.py:177 -#: vpn/forms/bulk_import.py:153 vpn/forms/bulk_import.py:200 -#: vpn/forms/filtersets.py:111 vpn/forms/filtersets.py:159 +#: netbox/templates/vpn/ikeproposal.html:29 +#: netbox/templates/vpn/ipsecproposal.html:25 +#: netbox/vpn/forms/bulk_edit.py:107 netbox/vpn/forms/bulk_edit.py:177 +#: netbox/vpn/forms/bulk_import.py:153 netbox/vpn/forms/bulk_import.py:200 +#: netbox/vpn/forms/filtersets.py:111 netbox/vpn/forms/filtersets.py:159 msgid "Authentication algorithm" msgstr "認証アルゴリズム" -#: templates/vpn/ikeproposal.html:33 +#: netbox/templates/vpn/ikeproposal.html:33 msgid "DH group" msgstr "ディーエイチグループ" -#: templates/vpn/ikeproposal.html:37 templates/vpn/ipsecproposal.html:29 -#: vpn/forms/bulk_edit.py:182 vpn/models/crypto.py:146 +#: netbox/templates/vpn/ikeproposal.html:37 +#: netbox/templates/vpn/ipsecproposal.html:29 +#: netbox/vpn/forms/bulk_edit.py:182 netbox/vpn/models/crypto.py:146 msgid "SA lifetime (seconds)" msgstr "SA ライフタイム (秒)" -#: templates/vpn/ipsecpolicy.html:10 templates/vpn/ipsecprofile.html:66 -#: vpn/tables/crypto.py:170 +#: netbox/templates/vpn/ipsecpolicy.html:10 +#: netbox/templates/vpn/ipsecprofile.html:66 netbox/vpn/tables/crypto.py:170 msgid "IPSec Policy" msgstr "IPsec ポリシー" -#: templates/vpn/ipsecpolicy.html:21 vpn/forms/bulk_edit.py:210 -#: vpn/models/crypto.py:193 +#: netbox/templates/vpn/ipsecpolicy.html:21 netbox/vpn/forms/bulk_edit.py:210 +#: netbox/vpn/models/crypto.py:193 msgid "PFS group" msgstr "PFS グループ" -#: templates/vpn/ipsecprofile.html:10 vpn/forms/model_forms.py:54 +#: netbox/templates/vpn/ipsecprofile.html:10 +#: netbox/vpn/forms/model_forms.py:54 msgid "IPSec Profile" msgstr "IPsec プロファイル" -#: templates/vpn/ipsecprofile.html:89 vpn/tables/crypto.py:137 +#: netbox/templates/vpn/ipsecprofile.html:89 netbox/vpn/tables/crypto.py:137 msgid "PFS Group" msgstr "PFS グループ" -#: templates/vpn/ipsecproposal.html:10 +#: netbox/templates/vpn/ipsecproposal.html:10 msgid "IPSec Proposal" msgstr "IPsec プロポーザル" -#: templates/vpn/ipsecproposal.html:33 vpn/forms/bulk_edit.py:186 -#: vpn/models/crypto.py:152 +#: netbox/templates/vpn/ipsecproposal.html:33 +#: netbox/vpn/forms/bulk_edit.py:186 netbox/vpn/models/crypto.py:152 msgid "SA lifetime (KB)" msgstr "SA ライフタイム (KB)" -#: templates/vpn/l2vpn.html:11 templates/vpn/l2vpntermination.html:9 +#: netbox/templates/vpn/l2vpn.html:11 +#: netbox/templates/vpn/l2vpntermination.html:9 msgid "L2VPN Attributes" msgstr "L2VPN アトリビュート" -#: templates/vpn/l2vpn.html:60 templates/vpn/tunnel.html:76 +#: netbox/templates/vpn/l2vpn.html:60 netbox/templates/vpn/tunnel.html:76 msgid "Add a Termination" msgstr "終了を追加" -#: templates/vpn/tunnel.html:9 +#: netbox/templates/vpn/tunnel.html:9 msgid "Add Termination" msgstr "終了を追加" -#: templates/vpn/tunnel.html:37 vpn/forms/bulk_edit.py:49 -#: vpn/forms/bulk_import.py:48 vpn/forms/filtersets.py:57 +#: netbox/templates/vpn/tunnel.html:37 netbox/vpn/forms/bulk_edit.py:49 +#: netbox/vpn/forms/bulk_import.py:48 netbox/vpn/forms/filtersets.py:57 msgid "Encapsulation" msgstr "カプセル化" -#: templates/vpn/tunnel.html:41 vpn/forms/bulk_edit.py:55 -#: vpn/forms/bulk_import.py:53 vpn/forms/filtersets.py:64 -#: vpn/models/crypto.py:250 vpn/tables/tunnels.py:51 +#: netbox/templates/vpn/tunnel.html:41 netbox/vpn/forms/bulk_edit.py:55 +#: netbox/vpn/forms/bulk_import.py:53 netbox/vpn/forms/filtersets.py:64 +#: netbox/vpn/models/crypto.py:250 netbox/vpn/tables/tunnels.py:51 msgid "IPSec profile" msgstr "IPsec プロファイル" -#: templates/vpn/tunnel.html:45 vpn/forms/bulk_edit.py:69 -#: vpn/forms/filtersets.py:68 +#: netbox/templates/vpn/tunnel.html:45 netbox/vpn/forms/bulk_edit.py:69 +#: netbox/vpn/forms/filtersets.py:68 msgid "Tunnel ID" msgstr "トンネル ID" -#: templates/vpn/tunnelgroup.html:14 +#: netbox/templates/vpn/tunnelgroup.html:14 msgid "Add Tunnel" msgstr "トンネルを追加" -#: templates/vpn/tunnelgroup.html:23 vpn/forms/model_forms.py:36 -#: vpn/forms/model_forms.py:49 +#: netbox/templates/vpn/tunnelgroup.html:23 netbox/vpn/forms/model_forms.py:36 +#: netbox/vpn/forms/model_forms.py:49 msgid "Tunnel Group" msgstr "トンネルグループ" -#: templates/vpn/tunneltermination.html:10 +#: netbox/templates/vpn/tunneltermination.html:10 msgid "Tunnel Termination" msgstr "トンネル終端" -#: templates/vpn/tunneltermination.html:35 vpn/forms/bulk_import.py:107 -#: vpn/forms/model_forms.py:102 vpn/forms/model_forms.py:138 -#: vpn/forms/model_forms.py:247 vpn/tables/tunnels.py:101 +#: netbox/templates/vpn/tunneltermination.html:35 +#: netbox/vpn/forms/bulk_import.py:107 netbox/vpn/forms/model_forms.py:102 +#: netbox/vpn/forms/model_forms.py:138 netbox/vpn/forms/model_forms.py:247 +#: netbox/vpn/tables/tunnels.py:101 msgid "Outside IP" msgstr "外部IP" -#: templates/vpn/tunneltermination.html:51 +#: netbox/templates/vpn/tunneltermination.html:51 msgid "Peer Terminations" msgstr "ピアターミネーション" -#: templates/wireless/inc/authentication_attrs.html:12 +#: netbox/templates/wireless/inc/authentication_attrs.html:12 msgid "Cipher" msgstr "暗号" -#: templates/wireless/inc/authentication_attrs.html:16 +#: netbox/templates/wireless/inc/authentication_attrs.html:16 msgid "PSK" msgstr "PSK" -#: templates/wireless/inc/wirelesslink_interface.html:35 -#: templates/wireless/inc/wirelesslink_interface.html:45 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:35 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:45 msgctxt "Abbreviation for megahertz" msgid "MHz" msgstr "メガヘルツ" -#: templates/wireless/wirelesslan.html:57 +#: netbox/templates/wireless/wirelesslan.html:57 msgid "Attached Interfaces" msgstr "接続インタフェース" -#: templates/wireless/wirelesslangroup.html:17 +#: netbox/templates/wireless/wirelesslangroup.html:17 msgid "Add Wireless LAN" msgstr "無線 LAN の追加" -#: templates/wireless/wirelesslangroup.html:26 -#: wireless/forms/model_forms.py:28 +#: netbox/templates/wireless/wirelesslangroup.html:26 +#: netbox/wireless/forms/model_forms.py:28 msgid "Wireless LAN Group" msgstr "無線 LAN グループ" -#: templates/wireless/wirelesslangroup.html:59 +#: netbox/templates/wireless/wirelesslangroup.html:59 msgid "Add Wireless LAN Group" msgstr "無線 LAN グループの追加" -#: templates/wireless/wirelesslink.html:14 +#: netbox/templates/wireless/wirelesslink.html:14 msgid "Link Properties" msgstr "リンクプロパティ" -#: templates/wireless/wirelesslink.html:38 wireless/forms/bulk_edit.py:129 -#: wireless/forms/filtersets.py:102 wireless/forms/model_forms.py:165 +#: 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 "距離" -#: tenancy/filtersets.py:28 +#: netbox/tenancy/filtersets.py:28 msgid "Parent contact group (ID)" msgstr "親連絡先グループ (ID)" -#: tenancy/filtersets.py:34 +#: netbox/tenancy/filtersets.py:34 msgid "Parent contact group (slug)" msgstr "親連絡先グループ (スラッグ)" -#: tenancy/filtersets.py:40 tenancy/filtersets.py:67 tenancy/filtersets.py:110 +#: netbox/tenancy/filtersets.py:40 netbox/tenancy/filtersets.py:67 +#: netbox/tenancy/filtersets.py:110 msgid "Contact group (ID)" msgstr "連絡先グループ (ID)" -#: tenancy/filtersets.py:47 tenancy/filtersets.py:74 tenancy/filtersets.py:117 +#: netbox/tenancy/filtersets.py:47 netbox/tenancy/filtersets.py:74 +#: netbox/tenancy/filtersets.py:117 msgid "Contact group (slug)" msgstr "コンタクトグループ (slug)" -#: tenancy/filtersets.py:104 +#: netbox/tenancy/filtersets.py:104 msgid "Contact (ID)" msgstr "連絡先 (ID)" -#: tenancy/filtersets.py:121 +#: netbox/tenancy/filtersets.py:121 msgid "Contact role (ID)" msgstr "連絡先ロール (ID)" -#: tenancy/filtersets.py:127 +#: netbox/tenancy/filtersets.py:127 msgid "Contact role (slug)" msgstr "コンタクトロール (slug)" -#: tenancy/filtersets.py:158 +#: netbox/tenancy/filtersets.py:158 msgid "Contact group" msgstr "連絡先グループ" -#: tenancy/filtersets.py:169 +#: netbox/tenancy/filtersets.py:169 msgid "Parent tenant group (ID)" msgstr "親テナントグループ (ID)" -#: tenancy/filtersets.py:175 +#: netbox/tenancy/filtersets.py:175 msgid "Parent tenant group (slug)" msgstr "親テナントグループ (スラッグ)" -#: tenancy/filtersets.py:181 tenancy/filtersets.py:201 +#: netbox/tenancy/filtersets.py:181 netbox/tenancy/filtersets.py:201 msgid "Tenant group (ID)" msgstr "テナントグループ (ID)" -#: tenancy/filtersets.py:234 +#: netbox/tenancy/filtersets.py:234 msgid "Tenant Group (ID)" msgstr "テナントグループ (ID)" -#: tenancy/filtersets.py:241 +#: netbox/tenancy/filtersets.py:241 msgid "Tenant Group (slug)" msgstr "テナントグループ (slug)" -#: tenancy/forms/bulk_edit.py:66 +#: netbox/tenancy/forms/bulk_edit.py:66 msgid "Desciption" msgstr "説明" -#: tenancy/forms/bulk_import.py:101 +#: netbox/tenancy/forms/bulk_import.py:101 msgid "Assigned contact" msgstr "割当連絡先" -#: tenancy/models/contacts.py:32 +#: netbox/tenancy/models/contacts.py:32 msgid "contact group" msgstr "連絡先グループ" -#: tenancy/models/contacts.py:33 +#: netbox/tenancy/models/contacts.py:33 msgid "contact groups" msgstr "連絡先グループ" -#: tenancy/models/contacts.py:48 +#: netbox/tenancy/models/contacts.py:48 msgid "contact role" msgstr "連絡先のロール" -#: tenancy/models/contacts.py:49 +#: netbox/tenancy/models/contacts.py:49 msgid "contact roles" msgstr "連絡先のロール" -#: tenancy/models/contacts.py:68 +#: netbox/tenancy/models/contacts.py:68 msgid "title" msgstr "タイトル" -#: tenancy/models/contacts.py:73 +#: netbox/tenancy/models/contacts.py:73 msgid "phone" msgstr "電話" -#: tenancy/models/contacts.py:78 +#: netbox/tenancy/models/contacts.py:78 msgid "email" msgstr "Eメール" -#: tenancy/models/contacts.py:87 +#: netbox/tenancy/models/contacts.py:87 msgid "link" msgstr "リンク" -#: tenancy/models/contacts.py:103 +#: netbox/tenancy/models/contacts.py:103 msgid "contact" msgstr "接触" -#: tenancy/models/contacts.py:104 +#: netbox/tenancy/models/contacts.py:104 msgid "contacts" msgstr "連絡先" -#: tenancy/models/contacts.py:153 +#: netbox/tenancy/models/contacts.py:153 msgid "contact assignment" msgstr "連絡先割り当て" -#: tenancy/models/contacts.py:154 +#: netbox/tenancy/models/contacts.py:154 msgid "contact assignments" msgstr "連絡先の割り当て" -#: tenancy/models/contacts.py:170 +#: netbox/tenancy/models/contacts.py:170 #, python-brace-format msgid "Contacts cannot be assigned to this object type ({type})." msgstr "このオブジェクトタイプには連絡先を割り当てられません ({type})。" -#: tenancy/models/tenants.py:32 +#: netbox/tenancy/models/tenants.py:32 msgid "tenant group" msgstr "テナントグループ" -#: tenancy/models/tenants.py:33 +#: netbox/tenancy/models/tenants.py:33 msgid "tenant groups" msgstr "テナントグループ" -#: tenancy/models/tenants.py:70 +#: netbox/tenancy/models/tenants.py:70 msgid "Tenant name must be unique per group." msgstr "テナント名はグループごとに一意である必要があります。" -#: tenancy/models/tenants.py:80 +#: netbox/tenancy/models/tenants.py:80 msgid "Tenant slug must be unique per group." msgstr "テナントslugはグループごとにユニークでなければなりません。" -#: tenancy/models/tenants.py:88 +#: netbox/tenancy/models/tenants.py:88 msgid "tenant" msgstr "テナント" -#: tenancy/models/tenants.py:89 +#: netbox/tenancy/models/tenants.py:89 msgid "tenants" msgstr "テナント" -#: tenancy/tables/contacts.py:112 +#: netbox/tenancy/tables/contacts.py:112 msgid "Contact Title" msgstr "連絡先のタイトル" -#: tenancy/tables/contacts.py:116 +#: netbox/tenancy/tables/contacts.py:116 msgid "Contact Phone" msgstr "連絡先電話番号" -#: tenancy/tables/contacts.py:121 +#: netbox/tenancy/tables/contacts.py:121 msgid "Contact Email" msgstr "連絡先電子メール" -#: tenancy/tables/contacts.py:125 +#: netbox/tenancy/tables/contacts.py:125 msgid "Contact Address" msgstr "連絡先住所" -#: tenancy/tables/contacts.py:129 +#: netbox/tenancy/tables/contacts.py:129 msgid "Contact Link" msgstr "連絡先リンク" -#: tenancy/tables/contacts.py:133 +#: netbox/tenancy/tables/contacts.py:133 msgid "Contact Description" msgstr "連絡先の説明" -#: users/filtersets.py:33 users/filtersets.py:73 +#: netbox/users/filtersets.py:33 netbox/users/filtersets.py:73 msgid "Permission (ID)" msgstr "パーミッション (ID)" -#: users/filtersets.py:38 users/filtersets.py:78 +#: netbox/users/filtersets.py:38 netbox/users/filtersets.py:78 msgid "Notification group (ID)" msgstr "通知グループ (ID)" -#: users/forms/bulk_edit.py:26 +#: netbox/users/forms/bulk_edit.py:26 msgid "First name" msgstr "ファーストネーム" -#: users/forms/bulk_edit.py:31 +#: netbox/users/forms/bulk_edit.py:31 msgid "Last name" msgstr "苗字" -#: users/forms/bulk_edit.py:43 +#: netbox/users/forms/bulk_edit.py:43 msgid "Staff status" msgstr "スタッフステータス" -#: users/forms/bulk_edit.py:48 +#: netbox/users/forms/bulk_edit.py:48 msgid "Superuser status" msgstr "スーパーユーザステータス" -#: users/forms/bulk_import.py:41 +#: netbox/users/forms/bulk_import.py:41 msgid "If no key is provided, one will be generated automatically." msgstr "キーが指定されていない場合は、キーが自動的に生成されます。" -#: users/forms/filtersets.py:51 users/tables.py:42 +#: netbox/users/forms/filtersets.py:51 netbox/users/tables.py:42 msgid "Is Staff" msgstr "スタッフですか" -#: users/forms/filtersets.py:58 users/tables.py:45 +#: netbox/users/forms/filtersets.py:58 netbox/users/tables.py:45 msgid "Is Superuser" msgstr "スーパーユーザですか" -#: users/forms/filtersets.py:91 users/tables.py:86 +#: netbox/users/forms/filtersets.py:91 netbox/users/tables.py:86 msgid "Can View" msgstr "閲覧可能" -#: users/forms/filtersets.py:98 users/tables.py:89 +#: netbox/users/forms/filtersets.py:98 netbox/users/tables.py:89 msgid "Can Add" msgstr "追加可能" -#: users/forms/filtersets.py:105 users/tables.py:92 +#: netbox/users/forms/filtersets.py:105 netbox/users/tables.py:92 msgid "Can Change" msgstr "変更可能" -#: users/forms/filtersets.py:112 users/tables.py:95 +#: netbox/users/forms/filtersets.py:112 netbox/users/tables.py:95 msgid "Can Delete" msgstr "削除可能" -#: users/forms/model_forms.py:62 +#: netbox/users/forms/model_forms.py:62 msgid "User Interface" msgstr "ユーザインタフェース" -#: users/forms/model_forms.py:114 +#: netbox/users/forms/model_forms.py:114 msgid "" "Keys must be at least 40 characters in length. Be sure to record " "your key prior to submitting this form, as it may no longer be " @@ -13681,7 +14509,7 @@ msgstr "" "キーの長さは 40 文字以上でなければなりません。 キーは必ず記録してください。 " "このフォームを送信する前に。トークンが作成されるとアクセスできなくなる可能性があるためです。" -#: users/forms/model_forms.py:126 +#: netbox/users/forms/model_forms.py:126 msgid "" "Allowed IPv4/IPv6 networks from where the token can be used. Leave blank for" " no restrictions. Example: " @@ -13690,31 +14518,31 @@ msgstr "" "トークンを使用できる許可された IPv4/IPv6 ネットワーク。制限がない場合は空白のままにしてください。例: " "10.1.1.0/24,192.168.10.16/32,2001: db 8:1:: /64" -#: users/forms/model_forms.py:175 +#: netbox/users/forms/model_forms.py:175 msgid "Confirm password" msgstr "パスワードを確認" -#: users/forms/model_forms.py:178 +#: netbox/users/forms/model_forms.py:178 msgid "Enter the same password as before, for verification." msgstr "確認のため、以前と同じパスワードを入力します。" -#: users/forms/model_forms.py:227 +#: netbox/users/forms/model_forms.py:227 msgid "Passwords do not match! Please check your input and try again." msgstr "パスワードが一致しません!入力内容を確認して、もう一度試してください。" -#: users/forms/model_forms.py:294 +#: netbox/users/forms/model_forms.py:294 msgid "Additional actions" msgstr "その他のアクション" -#: users/forms/model_forms.py:297 +#: netbox/users/forms/model_forms.py:297 msgid "Actions granted in addition to those listed above" msgstr "上記以外に付与されたアクション" -#: users/forms/model_forms.py:313 +#: netbox/users/forms/model_forms.py:313 msgid "Objects" msgstr "オブジェクト" -#: users/forms/model_forms.py:325 +#: netbox/users/forms/model_forms.py:325 msgid "" "JSON expression of a queryset filter that will return only permitted " "objects. Leave null to match all objects of this type. A list of multiple " @@ -13723,75 +14551,75 @@ msgstr "" "許可されたオブジェクトのみを返すクエリセットフィルタの JSON 式。null " "のままにしておくと、このタイプのすべてのオブジェクトに一致します。複数のオブジェクトのリストでは、論理 OR 演算が行われます。" -#: users/forms/model_forms.py:364 +#: netbox/users/forms/model_forms.py:364 msgid "At least one action must be selected." msgstr "少なくとも 1 つのアクションを選択する必要があります。" -#: users/forms/model_forms.py:382 +#: netbox/users/forms/model_forms.py:382 #, python-brace-format msgid "Invalid filter for {model}: {error}" msgstr "のフィルタが無効です {model}: {error}" -#: users/models/permissions.py:39 +#: netbox/users/models/permissions.py:39 msgid "The list of actions granted by this permission" msgstr "この権限によって付与されたアクションのリスト" -#: users/models/permissions.py:44 +#: netbox/users/models/permissions.py:44 msgid "constraints" msgstr "制約" -#: users/models/permissions.py:45 +#: netbox/users/models/permissions.py:45 msgid "" "Queryset filter matching the applicable objects of the selected type(s)" msgstr "選択したタイプの該当するオブジェクトに一致するクエリーセットフィルタ" -#: users/models/permissions.py:52 +#: netbox/users/models/permissions.py:52 msgid "permission" msgstr "許可" -#: users/models/permissions.py:53 users/models/users.py:47 +#: netbox/users/models/permissions.py:53 netbox/users/models/users.py:47 msgid "permissions" msgstr "権限" -#: users/models/preferences.py:29 users/models/preferences.py:30 +#: netbox/users/models/preferences.py:29 netbox/users/models/preferences.py:30 msgid "user preferences" msgstr "ユーザプリファレンス" -#: users/models/preferences.py:97 +#: netbox/users/models/preferences.py:97 #, python-brace-format msgid "Key '{path}' is a leaf node; cannot assign new keys" msgstr "キー '{path}'はリーフノードです。新しいキーを割り当てることはできません" -#: users/models/preferences.py:109 +#: netbox/users/models/preferences.py:109 #, python-brace-format msgid "Key '{path}' is a dictionary; cannot assign a non-dictionary value" msgstr "キー '{path}'はディクショナリです。ディクショナリ以外の値は割り当てられません" -#: users/models/tokens.py:36 +#: netbox/users/models/tokens.py:36 msgid "expires" msgstr "期限切れ" -#: users/models/tokens.py:41 +#: netbox/users/models/tokens.py:41 msgid "last used" msgstr "最終使用日" -#: users/models/tokens.py:46 +#: netbox/users/models/tokens.py:46 msgid "key" msgstr "キー" -#: users/models/tokens.py:52 +#: netbox/users/models/tokens.py:52 msgid "write enabled" msgstr "書き込み有効" -#: users/models/tokens.py:54 +#: netbox/users/models/tokens.py:54 msgid "Permit create/update/delete operations using this key" msgstr "このキーを使用して作成/更新/削除操作を許可する" -#: users/models/tokens.py:65 +#: netbox/users/models/tokens.py:65 msgid "allowed IPs" msgstr "許可された IP" -#: users/models/tokens.py:67 +#: netbox/users/models/tokens.py:67 msgid "" "Allowed IPv4/IPv6 networks from where the token can be used. Leave blank for" " no restrictions. Ex: \"10.1.1.0/24, 192.168.10.16/32, 2001:DB8:1::/64\"" @@ -13800,96 +14628,96 @@ msgstr "" "ネットワーク。制限がない場合は空白のままにしてください。例:10.1.1.0/24、192.168.10.16/32、2001: DB 8:1:: " "/64\"" -#: users/models/tokens.py:75 +#: netbox/users/models/tokens.py:75 msgid "token" msgstr "トークン" -#: users/models/tokens.py:76 +#: netbox/users/models/tokens.py:76 msgid "tokens" msgstr "トークン" -#: users/models/users.py:57 vpn/models/crypto.py:42 +#: netbox/users/models/users.py:57 netbox/vpn/models/crypto.py:42 msgid "group" msgstr "グループ" -#: users/models/users.py:92 +#: netbox/users/models/users.py:92 msgid "user" msgstr "ユーザ" -#: users/models/users.py:104 +#: netbox/users/models/users.py:104 msgid "A user with this username already exists." msgstr "このユーザ名のユーザはすでに存在します。" -#: users/tables.py:98 +#: netbox/users/tables.py:98 msgid "Custom Actions" msgstr "カスタムアクション" -#: utilities/api.py:153 +#: netbox/utilities/api.py:153 #, python-brace-format msgid "Related object not found using the provided attributes: {params}" msgstr "指定された属性を使用しても関連オブジェクトが見つかりません: {params}" -#: utilities/api.py:156 +#: netbox/utilities/api.py:156 #, python-brace-format msgid "Multiple objects match the provided attributes: {params}" msgstr "複数のオブジェクトが、指定された属性に一致します。 {params}" -#: utilities/api.py:168 +#: netbox/utilities/api.py:168 #, python-brace-format msgid "" "Related objects must be referenced by numeric ID or by dictionary of " "attributes. Received an unrecognized value: {value}" msgstr "関連オブジェクトは、数値 ID または属性の辞書で参照する必要があります。認識できない値を受け取りました: {value}" -#: utilities/api.py:177 +#: netbox/utilities/api.py:177 #, python-brace-format msgid "Related object not found using the provided numeric ID: {id}" msgstr "指定された数値 ID を使用しても関連オブジェクトが見つかりません: {id}" -#: utilities/choices.py:19 +#: netbox/utilities/choices.py:19 #, python-brace-format msgid "{name} has a key defined but CHOICES is not a list" msgstr "{name} キーは定義されているが、CHOICES はリストではない" -#: utilities/conversion.py:19 +#: netbox/utilities/conversion.py:19 msgid "Weight must be a positive number" msgstr "重量は正の数でなければなりません" -#: utilities/conversion.py:21 +#: netbox/utilities/conversion.py:21 #, python-brace-format msgid "Invalid value '{weight}' for weight (must be a number)" msgstr "値 'が無効です{weight}'は重みを表す (数字でなければならない)" -#: utilities/conversion.py:32 utilities/conversion.py:62 +#: netbox/utilities/conversion.py:32 netbox/utilities/conversion.py:62 #, python-brace-format msgid "Unknown unit {unit}. Must be one of the following: {valid_units}" msgstr "不明なユニット {unit}。次のいずれかである必要があります。 {valid_units}" -#: utilities/conversion.py:45 +#: netbox/utilities/conversion.py:45 msgid "Length must be a positive number" msgstr "長さは正の数でなければなりません" -#: utilities/conversion.py:47 +#: netbox/utilities/conversion.py:47 #, python-brace-format msgid "Invalid value '{length}' for length (must be a number)" msgstr "値 'が無効です{length}'は長さを表す (数字でなければならない)" -#: utilities/error_handlers.py:31 +#: netbox/utilities/error_handlers.py:31 #, python-brace-format msgid "" "Unable to delete {objects}. {count} dependent objects were " "found: " msgstr "削除できません {objects}。 {count} 依存オブジェクトが見つかりました: " -#: utilities/error_handlers.py:33 +#: netbox/utilities/error_handlers.py:33 msgid "More than 50" msgstr "50 個以上" -#: utilities/fields.py:30 +#: netbox/utilities/fields.py:30 msgid "RGB color in hexadecimal. Example: " msgstr "16 進 RGB カラー。例: " -#: utilities/fields.py:159 +#: netbox/utilities/fields.py:159 #, python-format msgid "" "%s(%r) is invalid. to_model parameter to CounterCacheField must be a string " @@ -13898,7 +14726,7 @@ msgstr "" "%s(%r) は無効です。CounterCacheField の to_model パラメータは 'app.model' " "形式の文字列でなければなりません" -#: utilities/fields.py:169 +#: netbox/utilities/fields.py:169 #, python-format msgid "" "%s(%r) is invalid. to_field parameter to CounterCacheField must be a string " @@ -13906,92 +14734,93 @@ msgid "" msgstr "" "%s(%r) は無効です。CounterCacheField の to_field パラメータは 'field' 形式の文字列でなければなりません" -#: utilities/forms/bulk_import.py:23 +#: netbox/utilities/forms/bulk_import.py:23 msgid "Enter object data in CSV, JSON or YAML format." msgstr "オブジェクトデータを CSV、JSON、または YAML 形式で入力します。" -#: utilities/forms/bulk_import.py:36 +#: netbox/utilities/forms/bulk_import.py:36 msgid "CSV delimiter" msgstr "CSV デリミター" -#: utilities/forms/bulk_import.py:37 +#: netbox/utilities/forms/bulk_import.py:37 msgid "The character which delimits CSV fields. Applies only to CSV format." msgstr "CSV フィールドを区切る文字。CSV 形式にのみ適用されます。" -#: utilities/forms/bulk_import.py:51 +#: netbox/utilities/forms/bulk_import.py:51 msgid "Form data must be empty when uploading/selecting a file." msgstr "ファイルをアップロード/選択するときは、フォームデータを空にする必要があります。" -#: utilities/forms/bulk_import.py:80 +#: netbox/utilities/forms/bulk_import.py:80 #, python-brace-format msgid "Unknown data format: {format}" msgstr "不明なデータ形式: {format}" -#: utilities/forms/bulk_import.py:100 +#: netbox/utilities/forms/bulk_import.py:100 msgid "Unable to detect data format. Please specify." msgstr "データ形式を検出できません。指定してください。" -#: utilities/forms/bulk_import.py:123 +#: netbox/utilities/forms/bulk_import.py:123 msgid "Invalid CSV delimiter" msgstr "CSV 区切り文字が無効です" -#: utilities/forms/bulk_import.py:167 +#: netbox/utilities/forms/bulk_import.py:167 msgid "" "Invalid YAML data. Data must be in the form of multiple documents, or a " "single document comprising a list of dictionaries." msgstr "" "YAML データが無効です。データは複数のドキュメント、またはディクショナリのリストから構成される 1 つのドキュメントの形式である必要があります。" -#: utilities/forms/fields/array.py:20 +#: netbox/utilities/forms/fields/array.py:20 #, python-brace-format msgid "" "Invalid list ({value}). Must be numeric and ranges must be in ascending " "order." msgstr "リストが無効です ({value})。数値でなければならず、範囲は昇順でなければなりません。" -#: utilities/forms/fields/array.py:40 +#: netbox/utilities/forms/fields/array.py:40 msgid "" "Specify one or more numeric ranges separated by commas. Example: " "1-5,20-30" msgstr "1 つまたは複数の数値範囲をカンマで区切って指定します。例: 1-5,20-30" -#: utilities/forms/fields/array.py:47 +#: netbox/utilities/forms/fields/array.py:47 #, python-brace-format msgid "" "Invalid ranges ({value}). Must be a range of integers in ascending order." msgstr "範囲が無効です ({value})。昇順の整数の範囲でなければなりません。" -#: utilities/forms/fields/csv.py:44 +#: netbox/utilities/forms/fields/csv.py:44 #, python-brace-format msgid "Invalid value for a multiple choice field: {value}" msgstr "複数選択フィールドの値が無効です: {value}" -#: utilities/forms/fields/csv.py:57 utilities/forms/fields/csv.py:78 +#: netbox/utilities/forms/fields/csv.py:57 +#: netbox/utilities/forms/fields/csv.py:78 #, python-format msgid "Object not found: %(value)s" msgstr "オブジェクトが見つかりません: %(value)s" -#: utilities/forms/fields/csv.py:65 +#: netbox/utilities/forms/fields/csv.py:65 #, python-brace-format msgid "" "\"{value}\" is not a unique value for this field; multiple objects were " "found" msgstr "「{value}「」はこのフィールドにとって一意の値ではありません。複数のオブジェクトが見つかりました" -#: utilities/forms/fields/csv.py:69 +#: netbox/utilities/forms/fields/csv.py:69 #, python-brace-format msgid "\"{field_name}\" is an invalid accessor field name." msgstr "「{field_name}「」は無効なアクセサーフィールド名です。" -#: utilities/forms/fields/csv.py:101 +#: netbox/utilities/forms/fields/csv.py:101 msgid "Object type must be specified as \".\"" msgstr "オブジェクトタイプは「」として指定する必要があります」" -#: utilities/forms/fields/csv.py:105 +#: netbox/utilities/forms/fields/csv.py:105 msgid "Invalid object type" msgstr "オブジェクトタイプが無効です" -#: utilities/forms/fields/expandable.py:25 +#: netbox/utilities/forms/fields/expandable.py:25 msgid "" "Alphanumeric ranges are supported for bulk creation. Mixed cases and types " "within a single range are not supported (example: " @@ -14000,14 +14829,14 @@ msgstr "" "英数字の範囲は一括作成でサポートされています。1 つの範囲内で大文字と小文字と文字が混在することはサポートされていません (例: [年齢, " "性別] -0/0/ [0-9])。" -#: utilities/forms/fields/expandable.py:46 +#: netbox/utilities/forms/fields/expandable.py:46 msgid "" "Specify a numeric range to create multiple IPs.
    Example: " "192.0.2.[1,5,100-254]/24" msgstr "" "複数の IP を作成するには、数値範囲を指定します。
    例: 192.0.2。[1,5,100-254] /24" -#: utilities/forms/fields/fields.py:31 +#: netbox/utilities/forms/fields/fields.py:31 #, python-brace-format msgid "" " マークダウン シンタックスはサポートされています" -#: utilities/forms/fields/fields.py:48 +#: netbox/utilities/forms/fields/fields.py:48 msgid "URL-friendly unique shorthand" msgstr "URL に対応したユニークな省略記法" -#: utilities/forms/fields/fields.py:101 +#: netbox/utilities/forms/fields/fields.py:101 msgid "Enter context data in JSON format." msgstr "にコンテキストデータを入力してください JSON フォーマット。" -#: utilities/forms/fields/fields.py:124 +#: netbox/utilities/forms/fields/fields.py:124 msgid "MAC address must be in EUI-48 format" msgstr "MAC アドレスは EUI-48 形式である必要があります" -#: utilities/forms/forms.py:52 +#: netbox/utilities/forms/forms.py:52 msgid "Use regular expressions" msgstr "正規表現を使う" -#: utilities/forms/forms.py:75 +#: netbox/utilities/forms/forms.py:75 msgid "" "Numeric ID of an existing object to update (if not creating a new object)" msgstr "更新する既存のオブジェクトの数値 ID (新しいオブジェクトを作成しない場合)" -#: utilities/forms/forms.py:92 +#: netbox/utilities/forms/forms.py:92 #, python-brace-format msgid "Unrecognized header: {name}" msgstr "認識できないヘッダー: {name}" -#: utilities/forms/forms.py:118 +#: netbox/utilities/forms/forms.py:118 msgid "Available Columns" msgstr "使用可能な列" -#: utilities/forms/forms.py:126 +#: netbox/utilities/forms/forms.py:126 msgid "Selected Columns" msgstr "選択した列" -#: utilities/forms/mixins.py:44 +#: netbox/utilities/forms/mixins.py:44 msgid "" "This object has been modified since the form was rendered. Please consult " "the object's change log for details." msgstr "このオブジェクトは、フォームがレンダリングされてから変更されました。詳細については、オブジェクトの変更ログを参照してください。" -#: utilities/forms/utils.py:42 utilities/forms/utils.py:68 -#: utilities/forms/utils.py:85 utilities/forms/utils.py:87 +#: netbox/utilities/forms/utils.py:42 netbox/utilities/forms/utils.py:68 +#: netbox/utilities/forms/utils.py:85 netbox/utilities/forms/utils.py:87 #, python-brace-format msgid "Range \"{value}\" is invalid." msgstr "レンジ」{value}「は無効です。" -#: utilities/forms/utils.py:74 +#: netbox/utilities/forms/utils.py:74 #, python-brace-format msgid "" "Invalid range: Ending value ({end}) must be greater than beginning value " "({begin})." msgstr "範囲が無効です:終了値 ({end}) は開始値 () より大きくなければなりません{begin})。" -#: utilities/forms/utils.py:232 +#: netbox/utilities/forms/utils.py:232 #, python-brace-format msgid "Duplicate or conflicting column header for \"{field}\"" msgstr "「」の列ヘッダーが重複しているか、重複しています{field}」" -#: utilities/forms/utils.py:238 +#: netbox/utilities/forms/utils.py:238 #, python-brace-format msgid "Duplicate or conflicting column header for \"{header}\"" msgstr "「」の列ヘッダーが重複しているか、重複しています{header}」" -#: utilities/forms/utils.py:247 +#: netbox/utilities/forms/utils.py:247 #, python-brace-format msgid "Row {row}: Expected {count_expected} columns but found {count_found}" msgstr "行 {row}: 期待 {count_expected} 列が見つかりましたが {count_found}" -#: utilities/forms/utils.py:270 +#: netbox/utilities/forms/utils.py:270 #, python-brace-format msgid "Unexpected column header \"{field}\" found." msgstr "予期しない列ヘッダー」{field}「が見つかりました。" -#: utilities/forms/utils.py:272 +#: netbox/utilities/forms/utils.py:272 #, python-brace-format msgid "Column \"{field}\" is not a related object; cannot use dots" msgstr "コラム」{field}\"は関連オブジェクトではありません。ドットは使用できません" -#: utilities/forms/utils.py:276 +#: netbox/utilities/forms/utils.py:276 #, python-brace-format msgid "Invalid related object attribute for column \"{field}\": {to_field}" msgstr "列 \"の関連オブジェクト属性が無効です{field}「: {to_field}" -#: utilities/forms/utils.py:284 +#: netbox/utilities/forms/utils.py:284 #, python-brace-format msgid "Required column header \"{header}\" not found." msgstr "必須の列ヘッダー」{header}「が見つかりません。" -#: utilities/forms/widgets/apiselect.py:124 +#: netbox/utilities/forms/widgets/apiselect.py:124 #, python-brace-format msgid "Missing required value for dynamic query param: '{dynamic_params}'" msgstr "動的クエリパラメータに必要な値が見つかりません:'{dynamic_params}'" -#: utilities/forms/widgets/apiselect.py:141 +#: netbox/utilities/forms/widgets/apiselect.py:141 #, python-brace-format msgid "Missing required value for static query param: '{static_params}'" msgstr "静的クエリパラメータに必要な値が見つかりません:'{static_params}'" -#: utilities/password_validation.py:13 +#: netbox/utilities/password_validation.py:13 msgid "Password must have at least one numeral." msgstr "パスワードには少なくとも 1 つの数字が必要です。" -#: utilities/password_validation.py:18 +#: netbox/utilities/password_validation.py:18 msgid "Password must have at least one uppercase letter." msgstr "パスワードには少なくとも 1 つの大文字が必要です。" -#: utilities/password_validation.py:23 +#: netbox/utilities/password_validation.py:23 msgid "Password must have at least one lowercase letter." msgstr "パスワードには少なくとも 1 つの小文字が必要です。" -#: utilities/password_validation.py:27 +#: netbox/utilities/password_validation.py:27 msgid "" "Your password must contain at least one numeral, one uppercase letter and " "one lowercase letter." msgstr "パスワードには、少なくとも1つの数字、1つの大文字、1つの小文字が含まれている必要があります。" -#: utilities/permissions.py:42 +#: netbox/utilities/permissions.py:42 #, python-brace-format msgid "" "Invalid permission name: {name}. Must be in the format " "._" msgstr "権限名が無効です: {name}。次の形式である必要があります _" -#: utilities/permissions.py:60 +#: netbox/utilities/permissions.py:60 #, python-brace-format msgid "Unknown app_label/model_name for {name}" msgstr "のアプリケーションラベル/モデル名が不明です {name}" -#: utilities/request.py:76 +#: netbox/utilities/request.py:76 #, python-brace-format msgid "Invalid IP address set for {header}: {ip}" msgstr "に設定された IP アドレスが無効です {header}: {ip}" -#: utilities/tables.py:47 +#: netbox/utilities/tables.py:47 #, python-brace-format msgid "A column named {name} is already defined for table {table_name}" msgstr "という名前の列 {name} テーブルには既に定義されています {table_name}" -#: utilities/templates/builtins/customfield_value.html:30 +#: netbox/utilities/templates/builtins/customfield_value.html:30 msgid "Not defined" msgstr "未定義" -#: utilities/templates/buttons/bookmark.html:9 +#: netbox/utilities/templates/buttons/bookmark.html:9 msgid "Unbookmark" msgstr "ブックマーク解除" -#: utilities/templates/buttons/bookmark.html:13 +#: netbox/utilities/templates/buttons/bookmark.html:13 msgid "Bookmark" msgstr "ブックマーク" -#: utilities/templates/buttons/clone.html:4 +#: netbox/utilities/templates/buttons/clone.html:4 msgid "Clone" msgstr "クローン" -#: utilities/templates/buttons/export.html:7 +#: netbox/utilities/templates/buttons/export.html:7 msgid "Current View" msgstr "現在のビュー" -#: utilities/templates/buttons/export.html:8 +#: netbox/utilities/templates/buttons/export.html:8 msgid "All Data" msgstr "すべてのデータ" -#: utilities/templates/buttons/export.html:28 +#: netbox/utilities/templates/buttons/export.html:28 msgid "Add export template" msgstr "エクスポートテンプレートを追加" -#: utilities/templates/buttons/import.html:4 +#: netbox/utilities/templates/buttons/import.html:4 msgid "Import" msgstr "インポート" -#: utilities/templates/buttons/subscribe.html:10 +#: netbox/utilities/templates/buttons/subscribe.html:10 msgid "Unsubscribe" msgstr "購読解除" -#: utilities/templates/buttons/subscribe.html:14 +#: netbox/utilities/templates/buttons/subscribe.html:14 msgid "Subscribe" msgstr "購読" -#: utilities/templates/form_helpers/render_field.html:41 +#: netbox/utilities/templates/form_helpers/render_field.html:41 msgid "Copy to clipboard" msgstr "クリップボードにコピー" -#: utilities/templates/form_helpers/render_field.html:57 +#: netbox/utilities/templates/form_helpers/render_field.html:57 msgid "This field is required" msgstr "このフィールドは必須です" -#: utilities/templates/form_helpers/render_field.html:70 +#: netbox/utilities/templates/form_helpers/render_field.html:70 msgid "Set Null" msgstr "NULL を設定" -#: utilities/templates/helpers/applied_filters.html:11 +#: netbox/utilities/templates/helpers/applied_filters.html:11 msgid "Clear all" msgstr "すべてクリア" -#: utilities/templates/helpers/table_config_form.html:8 +#: netbox/utilities/templates/helpers/table_config_form.html:8 msgid "Table Configuration" msgstr "テーブル構成" -#: utilities/templates/helpers/table_config_form.html:31 +#: netbox/utilities/templates/helpers/table_config_form.html:31 msgid "Move Up" msgstr "上へ移動" -#: utilities/templates/helpers/table_config_form.html:34 +#: netbox/utilities/templates/helpers/table_config_form.html:34 msgid "Move Down" msgstr "下に移動" -#: utilities/templates/navigation/menu.html:14 +#: netbox/utilities/templates/navigation/menu.html:14 msgid "Search…" msgstr "検索..." -#: utilities/templates/navigation/menu.html:14 +#: netbox/utilities/templates/navigation/menu.html:14 msgid "Search NetBox" msgstr "NetBoxを検索" -#: utilities/templates/widgets/apiselect.html:7 +#: netbox/utilities/templates/widgets/apiselect.html:7 msgid "Open selector" msgstr "セレクターを開く" -#: utilities/templates/widgets/markdown_input.html:6 +#: netbox/utilities/templates/widgets/markdown_input.html:6 msgid "Write" msgstr "書き込み" -#: utilities/testing/views.py:632 +#: netbox/utilities/testing/views.py:632 msgid "The test must define csv_update_data." msgstr "テストでは csv_update_data を定義する必要があります。" -#: utilities/validators.py:65 +#: netbox/utilities/validators.py:65 #, python-brace-format msgid "{value} is not a valid regular expression." msgstr "{value} は有効な正規表現ではありません。" -#: utilities/views.py:57 +#: netbox/utilities/views.py:57 #, python-brace-format msgid "{self.__class__.__name__} must implement get_required_permission()" msgstr "{self.__class__.__name__} get_required_permission () を実装する必要があります" -#: utilities/views.py:93 +#: netbox/utilities/views.py:93 #, python-brace-format msgid "{class_name} must implement get_required_permission()" msgstr "{class_name} get_required_permission () を実装する必要があります" -#: utilities/views.py:117 +#: netbox/utilities/views.py:117 #, python-brace-format msgid "" "{class_name} has no queryset defined. ObjectPermissionRequiredMixin may only" @@ -14266,187 +15095,189 @@ msgstr "" "{class_name} クエリセットが定義されていません。ObjectPermissionRequiredMixin " "は、基本クエリセットを定義するビューでのみ使用できます。" -#: virtualization/filtersets.py:79 +#: netbox/virtualization/filtersets.py:79 msgid "Parent group (ID)" msgstr "親グループ (ID)" -#: virtualization/filtersets.py:85 +#: netbox/virtualization/filtersets.py:85 msgid "Parent group (slug)" msgstr "親グループ (slug)" -#: virtualization/filtersets.py:89 virtualization/filtersets.py:141 +#: netbox/virtualization/filtersets.py:89 +#: netbox/virtualization/filtersets.py:141 msgid "Cluster type (ID)" msgstr "クラスタタイプ (ID)" -#: virtualization/filtersets.py:151 virtualization/filtersets.py:271 +#: netbox/virtualization/filtersets.py:151 +#: netbox/virtualization/filtersets.py:271 msgid "Cluster (ID)" msgstr "クラスタ (ID)" -#: virtualization/forms/bulk_edit.py:166 -#: virtualization/models/virtualmachines.py:115 +#: netbox/virtualization/forms/bulk_edit.py:166 +#: netbox/virtualization/models/virtualmachines.py:115 msgid "vCPUs" msgstr "vCPU" -#: virtualization/forms/bulk_edit.py:170 +#: netbox/virtualization/forms/bulk_edit.py:170 msgid "Memory (MB)" msgstr "メモリ (MB)" -#: virtualization/forms/bulk_edit.py:174 -msgid "Disk (GB)" -msgstr "ディスク (GB)" +#: netbox/virtualization/forms/bulk_edit.py:174 +msgid "Disk (MB)" +msgstr "ディスク (MB)" -#: virtualization/forms/bulk_edit.py:334 -#: virtualization/forms/filtersets.py:251 -msgid "Size (GB)" -msgstr "サイズ (GB)" +#: netbox/virtualization/forms/bulk_edit.py:334 +#: netbox/virtualization/forms/filtersets.py:251 +msgid "Size (MB)" +msgstr "サイズ (MB)" -#: virtualization/forms/bulk_import.py:44 +#: netbox/virtualization/forms/bulk_import.py:44 msgid "Type of cluster" msgstr "クラスタのタイプ" -#: virtualization/forms/bulk_import.py:51 +#: netbox/virtualization/forms/bulk_import.py:51 msgid "Assigned cluster group" msgstr "割当クラスタグループ" -#: virtualization/forms/bulk_import.py:96 +#: netbox/virtualization/forms/bulk_import.py:96 msgid "Assigned cluster" msgstr "割り当て済みクラスタ" -#: virtualization/forms/bulk_import.py:103 +#: netbox/virtualization/forms/bulk_import.py:103 msgid "Assigned device within cluster" msgstr "クラスタ内の割り当て済みデバイス" -#: virtualization/forms/filtersets.py:183 +#: netbox/virtualization/forms/filtersets.py:183 msgid "Serial number" msgstr "シリアル番号" -#: virtualization/forms/model_forms.py:153 +#: netbox/virtualization/forms/model_forms.py:153 #, python-brace-format msgid "" "{device} belongs to a different site ({device_site}) than the cluster " "({cluster_site})" msgstr "{device} 別のサイトに属している ({device_site}) よりもクラスタ ({cluster_site})" -#: virtualization/forms/model_forms.py:192 +#: netbox/virtualization/forms/model_forms.py:192 msgid "Optionally pin this VM to a specific host device within the cluster" msgstr "オプションで、この VM をクラスタ内の特定のホストデバイスにピン留めできます。" -#: virtualization/forms/model_forms.py:221 +#: netbox/virtualization/forms/model_forms.py:221 msgid "Site/Cluster" msgstr "サイト/クラスタ" -#: virtualization/forms/model_forms.py:244 +#: netbox/virtualization/forms/model_forms.py:244 msgid "Disk size is managed via the attachment of virtual disks." msgstr "ディスクサイズは、仮想ディスクのアタッチメントによって管理されます。" -#: virtualization/forms/model_forms.py:372 -#: virtualization/tables/virtualmachines.py:111 +#: netbox/virtualization/forms/model_forms.py:372 +#: netbox/virtualization/tables/virtualmachines.py:111 msgid "Disk" msgstr "ディスク" -#: virtualization/models/clusters.py:25 +#: netbox/virtualization/models/clusters.py:25 msgid "cluster type" msgstr "クラスタタイプ" -#: virtualization/models/clusters.py:26 +#: netbox/virtualization/models/clusters.py:26 msgid "cluster types" msgstr "クラスタタイプ" -#: virtualization/models/clusters.py:45 +#: netbox/virtualization/models/clusters.py:45 msgid "cluster group" msgstr "クラスタグループ" -#: virtualization/models/clusters.py:46 +#: netbox/virtualization/models/clusters.py:46 msgid "cluster groups" msgstr "クラスタグループ" -#: virtualization/models/clusters.py:121 +#: netbox/virtualization/models/clusters.py:121 msgid "cluster" -msgstr "集まる" +msgstr "クラスタ" -#: virtualization/models/clusters.py:122 +#: netbox/virtualization/models/clusters.py:122 msgid "clusters" msgstr "クラスタ" -#: virtualization/models/clusters.py:141 +#: netbox/virtualization/models/clusters.py:141 #, python-brace-format msgid "" "{count} devices are assigned as hosts for this cluster but are not in site " "{site}" msgstr "{count} デバイスはこのクラスタのホストとして割り当てられているが、サイトにはない {site}" -#: virtualization/models/virtualmachines.py:123 +#: netbox/virtualization/models/virtualmachines.py:123 msgid "memory (MB)" msgstr "メモリ (MB)" -#: virtualization/models/virtualmachines.py:128 +#: netbox/virtualization/models/virtualmachines.py:128 msgid "disk (MB)" msgstr "ディスク (MB)" -#: virtualization/models/virtualmachines.py:166 +#: netbox/virtualization/models/virtualmachines.py:166 msgid "Virtual machine name must be unique per cluster." msgstr "仮想マシン名はクラスタごとに一意である必要があります。" -#: virtualization/models/virtualmachines.py:169 +#: netbox/virtualization/models/virtualmachines.py:169 msgid "virtual machine" msgstr "仮想マシン" -#: virtualization/models/virtualmachines.py:170 +#: netbox/virtualization/models/virtualmachines.py:170 msgid "virtual machines" msgstr "仮想マシン" -#: virtualization/models/virtualmachines.py:184 +#: netbox/virtualization/models/virtualmachines.py:184 msgid "A virtual machine must be assigned to a site and/or cluster." msgstr "仮想マシンをサイトまたはクラスタに割り当てる必要があります。" -#: virtualization/models/virtualmachines.py:191 +#: netbox/virtualization/models/virtualmachines.py:191 #, python-brace-format msgid "" "The selected cluster ({cluster}) is not assigned to this site ({site})." msgstr "選択したクラスタ ({cluster}) はこのサイトに割り当てられていません ({site})。" -#: virtualization/models/virtualmachines.py:198 +#: netbox/virtualization/models/virtualmachines.py:198 msgid "Must specify a cluster when assigning a host device." msgstr "ホストデバイスを割り当てるときは、クラスタを指定する必要があります。" -#: virtualization/models/virtualmachines.py:203 +#: netbox/virtualization/models/virtualmachines.py:203 #, python-brace-format msgid "" "The selected device ({device}) is not assigned to this cluster ({cluster})." msgstr "選択したデバイス ({device}) はこのクラスタに割り当てられていません ({cluster})。" -#: virtualization/models/virtualmachines.py:215 +#: netbox/virtualization/models/virtualmachines.py:215 #, python-brace-format msgid "" "The specified disk size ({size}) must match the aggregate size of assigned " "virtual disks ({total_size})." msgstr "指定されたディスクサイズ ({size}) は割当仮想ディスクの合計サイズと一致する必要がある ({total_size})。" -#: virtualization/models/virtualmachines.py:229 +#: netbox/virtualization/models/virtualmachines.py:229 #, python-brace-format msgid "Must be an IPv{family} address. ({ip} is an IPv{version} address.)" msgstr "IPvである必要があります{family} 住所。({ip} は IPv です{version} 住所。)" -#: virtualization/models/virtualmachines.py:238 +#: netbox/virtualization/models/virtualmachines.py:238 #, python-brace-format msgid "The specified IP address ({ip}) is not assigned to this VM." msgstr "指定された IP アドレス ({ip}) はこの VM に割り当てられていません。" -#: virtualization/models/virtualmachines.py:396 +#: netbox/virtualization/models/virtualmachines.py:396 #, python-brace-format msgid "" "The selected parent interface ({parent}) belongs to a different virtual " "machine ({virtual_machine})." msgstr "選択した親インタフェース ({parent}) は別の仮想マシンに属しています ({virtual_machine})。" -#: virtualization/models/virtualmachines.py:411 +#: netbox/virtualization/models/virtualmachines.py:411 #, python-brace-format msgid "" "The selected bridge interface ({bridge}) belongs to a different virtual " "machine ({virtual_machine})." msgstr "選択したブリッジインタフェース ({bridge}) は別の仮想マシンに属しています ({virtual_machine})。" -#: virtualization/models/virtualmachines.py:422 +#: netbox/virtualization/models/virtualmachines.py:422 #, python-brace-format msgid "" "The untagged VLAN ({untagged_vlan}) must belong to the same site as the " @@ -14455,390 +15286,413 @@ msgstr "" "タグが付いていない VLAN ({untagged_vlan}) " "はインタフェースの親仮想マシンと同じサイトに属しているか、またはグローバルである必要があります。" -#: virtualization/models/virtualmachines.py:434 +#: netbox/virtualization/models/virtualmachines.py:434 msgid "size (MB)" msgstr "サイズ (MB)" -#: virtualization/models/virtualmachines.py:438 +#: netbox/virtualization/models/virtualmachines.py:438 msgid "virtual disk" msgstr "仮想ディスク" -#: virtualization/models/virtualmachines.py:439 +#: netbox/virtualization/models/virtualmachines.py:439 msgid "virtual disks" msgstr "仮想ディスク" -#: virtualization/views.py:275 +#: netbox/virtualization/views.py:273 #, python-brace-format msgid "Added {count} devices to cluster {cluster}" msgstr "追加しました {count} デバイスをクラスタに {cluster}" -#: virtualization/views.py:310 +#: netbox/virtualization/views.py:308 #, python-brace-format msgid "Removed {count} devices from cluster {cluster}" msgstr "削除済み {count} クラスターのデバイス {cluster}" -#: vpn/choices.py:31 +#: netbox/vpn/choices.py:35 msgid "IPsec - Transport" msgstr "IPsec-トランスポート" -#: vpn/choices.py:32 +#: netbox/vpn/choices.py:36 msgid "IPsec - Tunnel" msgstr "IPsec-トンネル" -#: vpn/choices.py:33 +#: netbox/vpn/choices.py:37 msgid "IP-in-IP" msgstr "IP-in-IP" -#: vpn/choices.py:34 +#: netbox/vpn/choices.py:38 msgid "GRE" msgstr "GRE" -#: vpn/choices.py:56 +#: netbox/vpn/choices.py:39 +msgid "WireGuard" +msgstr "WireGuard" + +#: netbox/vpn/choices.py:40 +msgid "OpenVPN" +msgstr "OpenVPN" + +#: netbox/vpn/choices.py:41 +msgid "L2TP" +msgstr "L2TP" + +#: netbox/vpn/choices.py:42 +msgid "PPTP" +msgstr "PPTP" + +#: netbox/vpn/choices.py:64 msgid "Hub" msgstr "ハブ" -#: vpn/choices.py:57 +#: netbox/vpn/choices.py:65 msgid "Spoke" msgstr "スポーク" -#: vpn/choices.py:80 +#: netbox/vpn/choices.py:88 msgid "Aggressive" msgstr "アグレッシブ" -#: vpn/choices.py:81 +#: netbox/vpn/choices.py:89 msgid "Main" msgstr "メイン" -#: vpn/choices.py:92 +#: netbox/vpn/choices.py:100 msgid "Pre-shared keys" msgstr "事前共有キー" -#: vpn/choices.py:93 +#: netbox/vpn/choices.py:101 msgid "Certificates" msgstr "証明書" -#: vpn/choices.py:94 +#: netbox/vpn/choices.py:102 msgid "RSA signatures" msgstr "RSA シグネチャ" -#: vpn/choices.py:95 +#: netbox/vpn/choices.py:103 msgid "DSA signatures" msgstr "DSA シグネチャ" -#: vpn/choices.py:178 vpn/choices.py:179 vpn/choices.py:180 vpn/choices.py:181 -#: vpn/choices.py:182 vpn/choices.py:183 vpn/choices.py:184 vpn/choices.py:185 -#: vpn/choices.py:186 vpn/choices.py:187 vpn/choices.py:188 vpn/choices.py:189 -#: vpn/choices.py:190 vpn/choices.py:191 vpn/choices.py:192 vpn/choices.py:193 -#: vpn/choices.py:194 vpn/choices.py:195 vpn/choices.py:196 vpn/choices.py:197 -#: vpn/choices.py:198 vpn/choices.py:199 vpn/choices.py:200 vpn/choices.py:201 +#: netbox/vpn/choices.py:186 netbox/vpn/choices.py:187 +#: netbox/vpn/choices.py:188 netbox/vpn/choices.py:189 +#: netbox/vpn/choices.py:190 netbox/vpn/choices.py:191 +#: netbox/vpn/choices.py:192 netbox/vpn/choices.py:193 +#: netbox/vpn/choices.py:194 netbox/vpn/choices.py:195 +#: netbox/vpn/choices.py:196 netbox/vpn/choices.py:197 +#: netbox/vpn/choices.py:198 netbox/vpn/choices.py:199 +#: netbox/vpn/choices.py:200 netbox/vpn/choices.py:201 +#: netbox/vpn/choices.py:202 netbox/vpn/choices.py:203 +#: netbox/vpn/choices.py:204 netbox/vpn/choices.py:205 +#: netbox/vpn/choices.py:206 netbox/vpn/choices.py:207 +#: netbox/vpn/choices.py:208 netbox/vpn/choices.py:209 #, python-brace-format msgid "Group {n}" msgstr "グループ {n}" -#: vpn/choices.py:243 +#: netbox/vpn/choices.py:251 msgid "Ethernet Private LAN" msgstr "イーサネットプライベート LAN" -#: vpn/choices.py:244 +#: netbox/vpn/choices.py:252 msgid "Ethernet Virtual Private LAN" msgstr "イーサネット仮想プライベート LAN" -#: vpn/choices.py:247 +#: netbox/vpn/choices.py:255 msgid "Ethernet Private Tree" msgstr "イーサネットプライベートツリー" -#: vpn/choices.py:248 +#: netbox/vpn/choices.py:256 msgid "Ethernet Virtual Private Tree" msgstr "イーサネット仮想プライベートツリー" -#: vpn/filtersets.py:41 +#: netbox/vpn/filtersets.py:41 msgid "Tunnel group (ID)" msgstr "トンネルグループ (ID)" -#: vpn/filtersets.py:47 +#: netbox/vpn/filtersets.py:47 msgid "Tunnel group (slug)" msgstr "トンネルグループ (slug)" -#: vpn/filtersets.py:54 +#: netbox/vpn/filtersets.py:54 msgid "IPSec profile (ID)" msgstr "IPsec プロファイル (ID)" -#: vpn/filtersets.py:60 +#: netbox/vpn/filtersets.py:60 msgid "IPSec profile (name)" msgstr "IPsec プロファイル (名前)" -#: vpn/filtersets.py:81 +#: netbox/vpn/filtersets.py:81 msgid "Tunnel (ID)" msgstr "トンネル (ID)" -#: vpn/filtersets.py:87 +#: netbox/vpn/filtersets.py:87 msgid "Tunnel (name)" msgstr "トンネル (名前)" -#: vpn/filtersets.py:118 +#: netbox/vpn/filtersets.py:118 msgid "Outside IP (ID)" msgstr "外部IP (ID)" -#: vpn/filtersets.py:130 vpn/filtersets.py:263 +#: netbox/vpn/filtersets.py:130 netbox/vpn/filtersets.py:263 msgid "IKE policy (ID)" msgstr "IKE ポリシー (ID)" -#: vpn/filtersets.py:136 vpn/filtersets.py:269 +#: netbox/vpn/filtersets.py:136 netbox/vpn/filtersets.py:269 msgid "IKE policy (name)" msgstr "IKE ポリシー (名前)" -#: vpn/filtersets.py:200 vpn/filtersets.py:273 +#: netbox/vpn/filtersets.py:200 netbox/vpn/filtersets.py:273 msgid "IPSec policy (ID)" msgstr "IPsec ポリシー (ID)" -#: vpn/filtersets.py:206 vpn/filtersets.py:279 +#: netbox/vpn/filtersets.py:206 netbox/vpn/filtersets.py:279 msgid "IPSec policy (name)" msgstr "IPsec ポリシー (名前)" -#: vpn/filtersets.py:348 +#: netbox/vpn/filtersets.py:348 msgid "L2VPN (slug)" msgstr "L2VPN (slug)" -#: vpn/filtersets.py:412 +#: netbox/vpn/filtersets.py:412 msgid "VM Interface (ID)" msgstr "VM インタフェース (ID)" -#: vpn/filtersets.py:418 +#: netbox/vpn/filtersets.py:418 msgid "VLAN (name)" msgstr "VLAN (名前)" -#: vpn/forms/bulk_edit.py:45 vpn/forms/bulk_import.py:42 -#: vpn/forms/filtersets.py:54 +#: netbox/vpn/forms/bulk_edit.py:45 netbox/vpn/forms/bulk_import.py:42 +#: netbox/vpn/forms/filtersets.py:54 msgid "Tunnel group" msgstr "トンネルグループ" -#: vpn/forms/bulk_edit.py:117 vpn/models/crypto.py:47 +#: netbox/vpn/forms/bulk_edit.py:117 netbox/vpn/models/crypto.py:47 msgid "SA lifetime" msgstr "SA ライフタイム" -#: vpn/forms/bulk_edit.py:151 wireless/forms/bulk_edit.py:79 -#: wireless/forms/bulk_edit.py:126 wireless/forms/filtersets.py:64 -#: wireless/forms/filtersets.py:98 +#: netbox/vpn/forms/bulk_edit.py:151 netbox/wireless/forms/bulk_edit.py:79 +#: netbox/wireless/forms/bulk_edit.py:126 +#: netbox/wireless/forms/filtersets.py:64 +#: netbox/wireless/forms/filtersets.py:98 msgid "Pre-shared key" msgstr "事前共有キー" -#: vpn/forms/bulk_edit.py:237 vpn/forms/bulk_import.py:239 -#: vpn/forms/filtersets.py:199 vpn/forms/model_forms.py:370 -#: vpn/models/crypto.py:104 +#: netbox/vpn/forms/bulk_edit.py:237 netbox/vpn/forms/bulk_import.py:239 +#: netbox/vpn/forms/filtersets.py:199 netbox/vpn/forms/model_forms.py:370 +#: netbox/vpn/models/crypto.py:104 msgid "IKE policy" msgstr "IKE ポリシー" -#: vpn/forms/bulk_edit.py:242 vpn/forms/bulk_import.py:244 -#: vpn/forms/filtersets.py:204 vpn/forms/model_forms.py:374 -#: vpn/models/crypto.py:209 +#: netbox/vpn/forms/bulk_edit.py:242 netbox/vpn/forms/bulk_import.py:244 +#: netbox/vpn/forms/filtersets.py:204 netbox/vpn/forms/model_forms.py:374 +#: netbox/vpn/models/crypto.py:209 msgid "IPSec policy" msgstr "IPsec ポリシー" -#: vpn/forms/bulk_import.py:50 +#: netbox/vpn/forms/bulk_import.py:50 msgid "Tunnel encapsulation" msgstr "トンネルカプセル化" -#: vpn/forms/bulk_import.py:83 +#: netbox/vpn/forms/bulk_import.py:83 msgid "Operational role" msgstr "運用上のロール" -#: vpn/forms/bulk_import.py:90 +#: netbox/vpn/forms/bulk_import.py:90 msgid "Parent device of assigned interface" msgstr "割当インタフェースの親デバイス" -#: vpn/forms/bulk_import.py:97 +#: netbox/vpn/forms/bulk_import.py:97 msgid "Parent VM of assigned interface" msgstr "割当インタフェースの親VM" -#: vpn/forms/bulk_import.py:104 +#: netbox/vpn/forms/bulk_import.py:104 msgid "Device or virtual machine interface" msgstr "デバイスまたは仮想マシンのインタフェース" -#: vpn/forms/bulk_import.py:183 +#: netbox/vpn/forms/bulk_import.py:183 msgid "IKE proposal(s)" msgstr "IKE プロポーザル" -#: vpn/forms/bulk_import.py:215 vpn/models/crypto.py:197 +#: netbox/vpn/forms/bulk_import.py:215 netbox/vpn/models/crypto.py:197 msgid "Diffie-Hellman group for Perfect Forward Secrecy" msgstr "パーフェクト・フォワード・シークレシのディフィー・ヘルマン・グループ" -#: vpn/forms/bulk_import.py:222 +#: netbox/vpn/forms/bulk_import.py:222 msgid "IPSec proposal(s)" msgstr "IPsec プロポーザル" -#: vpn/forms/bulk_import.py:236 +#: netbox/vpn/forms/bulk_import.py:236 msgid "IPSec protocol" msgstr "IPsec プロトコル" -#: vpn/forms/bulk_import.py:266 +#: netbox/vpn/forms/bulk_import.py:266 msgid "L2VPN type" msgstr "L2VPN タイプ" -#: vpn/forms/bulk_import.py:287 +#: netbox/vpn/forms/bulk_import.py:287 msgid "Parent device (for interface)" msgstr "親デバイス (インタフェース用)" -#: vpn/forms/bulk_import.py:294 +#: netbox/vpn/forms/bulk_import.py:294 msgid "Parent virtual machine (for interface)" msgstr "親仮想マシン (インタフェース用)" -#: vpn/forms/bulk_import.py:301 +#: netbox/vpn/forms/bulk_import.py:301 msgid "Assigned interface (device or VM)" msgstr "割当インタフェース (デバイスまたは VM)" -#: vpn/forms/bulk_import.py:334 +#: netbox/vpn/forms/bulk_import.py:334 msgid "Cannot import device and VM interface terminations simultaneously." msgstr "デバイスと VM インタフェースの終端を同時にインポートすることはできません。" -#: vpn/forms/bulk_import.py:336 +#: netbox/vpn/forms/bulk_import.py:336 msgid "Each termination must specify either an interface or a VLAN." msgstr "各終端には、インタフェースまたは VLAN のいずれかを指定する必要があります。" -#: vpn/forms/bulk_import.py:338 +#: netbox/vpn/forms/bulk_import.py:338 msgid "Cannot assign both an interface and a VLAN." msgstr "インタフェースと VLAN の両方を割り当てることはできません。" -#: vpn/forms/filtersets.py:130 +#: netbox/vpn/forms/filtersets.py:130 msgid "IKE version" msgstr "IKE バージョン" -#: vpn/forms/filtersets.py:142 vpn/forms/filtersets.py:175 -#: vpn/forms/model_forms.py:298 vpn/forms/model_forms.py:334 +#: netbox/vpn/forms/filtersets.py:142 netbox/vpn/forms/filtersets.py:175 +#: netbox/vpn/forms/model_forms.py:298 netbox/vpn/forms/model_forms.py:334 msgid "Proposal" msgstr "提案" -#: vpn/forms/filtersets.py:251 +#: netbox/vpn/forms/filtersets.py:251 msgid "Assigned Object Type" msgstr "割当オブジェクトタイプ" -#: vpn/forms/model_forms.py:95 vpn/forms/model_forms.py:130 -#: vpn/forms/model_forms.py:240 vpn/tables/tunnels.py:91 +#: netbox/vpn/forms/model_forms.py:95 netbox/vpn/forms/model_forms.py:130 +#: netbox/vpn/forms/model_forms.py:240 netbox/vpn/tables/tunnels.py:91 msgid "Tunnel interface" msgstr "トンネルインターフェイス" -#: vpn/forms/model_forms.py:150 +#: netbox/vpn/forms/model_forms.py:150 msgid "First Termination" msgstr "1 回目の解約" -#: vpn/forms/model_forms.py:153 +#: netbox/vpn/forms/model_forms.py:153 msgid "Second Termination" msgstr "2 回目の終了" -#: vpn/forms/model_forms.py:197 +#: netbox/vpn/forms/model_forms.py:197 msgid "This parameter is required when defining a termination." msgstr "このパラメータは、終端を定義する場合に必要です。" -#: vpn/forms/model_forms.py:320 vpn/forms/model_forms.py:356 +#: netbox/vpn/forms/model_forms.py:320 netbox/vpn/forms/model_forms.py:356 msgid "Policy" msgstr "ポリシー" -#: vpn/forms/model_forms.py:487 +#: netbox/vpn/forms/model_forms.py:487 msgid "A termination must specify an interface or VLAN." msgstr "終端にはインタフェースまたは VLAN を指定する必要があります。" -#: vpn/forms/model_forms.py:489 +#: netbox/vpn/forms/model_forms.py:489 msgid "" "A termination can only have one terminating object (an interface or VLAN)." msgstr "終端には、1 つの終端オブジェクト(インタフェースまたは VLAN)しか設定できません。" -#: vpn/models/crypto.py:33 +#: netbox/vpn/models/crypto.py:33 msgid "encryption algorithm" msgstr "暗号化アルゴリズム" -#: vpn/models/crypto.py:37 +#: netbox/vpn/models/crypto.py:37 msgid "authentication algorithm" msgstr "認証アルゴリズム" -#: vpn/models/crypto.py:44 +#: netbox/vpn/models/crypto.py:44 msgid "Diffie-Hellman group ID" msgstr "ディフィー・ヘルマングループ ID" -#: vpn/models/crypto.py:50 +#: netbox/vpn/models/crypto.py:50 msgid "Security association lifetime (in seconds)" msgstr "セキュリティアソシエーションの有効期間 (秒単位)" -#: vpn/models/crypto.py:59 +#: netbox/vpn/models/crypto.py:59 msgid "IKE proposal" msgstr "イケアの提案" -#: vpn/models/crypto.py:60 +#: netbox/vpn/models/crypto.py:60 msgid "IKE proposals" msgstr "IKEの提案" -#: vpn/models/crypto.py:76 +#: netbox/vpn/models/crypto.py:76 msgid "version" msgstr "版" -#: vpn/models/crypto.py:88 vpn/models/crypto.py:190 +#: netbox/vpn/models/crypto.py:88 netbox/vpn/models/crypto.py:190 msgid "proposals" msgstr "提案" -#: vpn/models/crypto.py:91 wireless/models.py:39 +#: netbox/vpn/models/crypto.py:91 netbox/wireless/models.py:39 msgid "pre-shared key" msgstr "事前共有キー" -#: vpn/models/crypto.py:105 +#: netbox/vpn/models/crypto.py:105 msgid "IKE policies" msgstr "IKE ポリシー" -#: vpn/models/crypto.py:118 +#: netbox/vpn/models/crypto.py:118 msgid "Mode is required for selected IKE version" msgstr "選択した IKE バージョンにはモードが必要です" -#: vpn/models/crypto.py:122 +#: netbox/vpn/models/crypto.py:122 msgid "Mode cannot be used for selected IKE version" msgstr "モードは選択された IKE バージョンでは使用できません" -#: vpn/models/crypto.py:136 +#: netbox/vpn/models/crypto.py:136 msgid "encryption" msgstr "暗号化" -#: vpn/models/crypto.py:141 +#: netbox/vpn/models/crypto.py:141 msgid "authentication" msgstr "認証" -#: vpn/models/crypto.py:149 +#: netbox/vpn/models/crypto.py:149 msgid "Security association lifetime (seconds)" msgstr "セキュリティアソシエーションの有効期間 (秒)" -#: vpn/models/crypto.py:155 +#: netbox/vpn/models/crypto.py:155 msgid "Security association lifetime (in kilobytes)" msgstr "セキュリティアソシエーションの有効期間 (KB 単位)" -#: vpn/models/crypto.py:164 +#: netbox/vpn/models/crypto.py:164 msgid "IPSec proposal" msgstr "IPsec プロポーザル" -#: vpn/models/crypto.py:165 +#: netbox/vpn/models/crypto.py:165 msgid "IPSec proposals" msgstr "IPsec プロポーザル" -#: vpn/models/crypto.py:178 +#: netbox/vpn/models/crypto.py:178 msgid "Encryption and/or authentication algorithm must be defined" msgstr "暗号化および/または認証アルゴリズムを定義する必要があります" -#: vpn/models/crypto.py:210 +#: netbox/vpn/models/crypto.py:210 msgid "IPSec policies" msgstr "IPsec ポリシー" -#: vpn/models/crypto.py:251 +#: netbox/vpn/models/crypto.py:251 msgid "IPSec profiles" msgstr "IPsec プロファイル" -#: vpn/models/l2vpn.py:116 +#: netbox/vpn/models/l2vpn.py:116 msgid "L2VPN termination" msgstr "L2 VPN ターミネーション" -#: vpn/models/l2vpn.py:117 +#: netbox/vpn/models/l2vpn.py:117 msgid "L2VPN terminations" msgstr "L2 VPN ターミネーション" -#: vpn/models/l2vpn.py:135 +#: netbox/vpn/models/l2vpn.py:135 #, python-brace-format msgid "L2VPN Termination already assigned ({assigned_object})" msgstr "L2VPN ターミネーションはすでに割り当てられています({assigned_object})" -#: vpn/models/l2vpn.py:147 +#: netbox/vpn/models/l2vpn.py:147 #, python-brace-format msgid "" "{l2vpn_type} L2VPNs cannot have more than two terminations; found " @@ -14846,186 +15700,194 @@ msgid "" msgstr "" "{l2vpn_type} L2VPN のターミネーションは 3 つまでです。見つかりました {terminations_count} 定義済みです。" -#: vpn/models/tunnels.py:26 +#: netbox/vpn/models/tunnels.py:26 msgid "tunnel group" msgstr "トンネルグループ" -#: vpn/models/tunnels.py:27 +#: netbox/vpn/models/tunnels.py:27 msgid "tunnel groups" msgstr "トンネルグループ" -#: vpn/models/tunnels.py:53 +#: netbox/vpn/models/tunnels.py:53 msgid "encapsulation" msgstr "カプセル化" -#: vpn/models/tunnels.py:72 +#: netbox/vpn/models/tunnels.py:72 msgid "tunnel ID" msgstr "トンネル ID" -#: vpn/models/tunnels.py:94 +#: netbox/vpn/models/tunnels.py:94 msgid "tunnel" msgstr "トンネル" -#: vpn/models/tunnels.py:95 +#: netbox/vpn/models/tunnels.py:95 msgid "tunnels" msgstr "トンネル" -#: vpn/models/tunnels.py:153 +#: netbox/vpn/models/tunnels.py:153 msgid "An object may be terminated to only one tunnel at a time." msgstr "オブジェクトは一度に 1 つのトンネルにしか終端できません。" -#: vpn/models/tunnels.py:156 +#: netbox/vpn/models/tunnels.py:156 msgid "tunnel termination" msgstr "トンネル終端" -#: vpn/models/tunnels.py:157 +#: netbox/vpn/models/tunnels.py:157 msgid "tunnel terminations" msgstr "トンネル終端" -#: vpn/models/tunnels.py:174 +#: netbox/vpn/models/tunnels.py:174 #, python-brace-format msgid "{name} is already attached to a tunnel ({tunnel})." msgstr "{name} すでにトンネルに接続されています ({tunnel})。" -#: vpn/tables/crypto.py:22 +#: netbox/vpn/tables/crypto.py:22 msgid "Authentication Method" msgstr "認証方法" -#: vpn/tables/crypto.py:25 vpn/tables/crypto.py:97 +#: netbox/vpn/tables/crypto.py:25 netbox/vpn/tables/crypto.py:97 msgid "Encryption Algorithm" msgstr "暗号化アルゴリズム" -#: vpn/tables/crypto.py:28 vpn/tables/crypto.py:100 +#: netbox/vpn/tables/crypto.py:28 netbox/vpn/tables/crypto.py:100 msgid "Authentication Algorithm" msgstr "認証アルゴリズム" -#: vpn/tables/crypto.py:34 +#: netbox/vpn/tables/crypto.py:34 msgid "SA Lifetime" msgstr "SA ライフタイム" -#: vpn/tables/crypto.py:71 +#: netbox/vpn/tables/crypto.py:71 msgid "Pre-shared Key" msgstr "事前共有キー" -#: vpn/tables/crypto.py:103 +#: netbox/vpn/tables/crypto.py:103 msgid "SA Lifetime (Seconds)" msgstr "SA ライフタイム (秒)" -#: vpn/tables/crypto.py:106 +#: netbox/vpn/tables/crypto.py:106 msgid "SA Lifetime (KB)" msgstr "SA ライフタイム (KB)" -#: vpn/tables/l2vpn.py:69 +#: netbox/vpn/tables/l2vpn.py:69 msgid "Object Parent" msgstr "オブジェクト親" -#: vpn/tables/l2vpn.py:74 +#: netbox/vpn/tables/l2vpn.py:74 msgid "Object Site" msgstr "オブジェクトサイト" -#: wireless/choices.py:11 +#: netbox/wireless/choices.py:11 msgid "Access point" msgstr "アクセスポイント" -#: wireless/choices.py:12 +#: netbox/wireless/choices.py:12 msgid "Station" msgstr "ステーション" -#: wireless/choices.py:467 +#: netbox/wireless/choices.py:467 msgid "Open" msgstr "開く" -#: wireless/choices.py:469 +#: netbox/wireless/choices.py:469 msgid "WPA Personal (PSK)" msgstr "WPA パーソナル (PSK)" -#: wireless/choices.py:470 +#: netbox/wireless/choices.py:470 msgid "WPA Enterprise" msgstr "WPA エンタープライズ" -#: wireless/forms/bulk_edit.py:73 wireless/forms/bulk_edit.py:120 -#: wireless/forms/bulk_import.py:68 wireless/forms/bulk_import.py:71 -#: wireless/forms/bulk_import.py:110 wireless/forms/bulk_import.py:113 -#: wireless/forms/filtersets.py:59 wireless/forms/filtersets.py:93 +#: netbox/wireless/forms/bulk_edit.py:73 +#: netbox/wireless/forms/bulk_edit.py:120 +#: netbox/wireless/forms/bulk_import.py:68 +#: netbox/wireless/forms/bulk_import.py:71 +#: netbox/wireless/forms/bulk_import.py:110 +#: netbox/wireless/forms/bulk_import.py:113 +#: netbox/wireless/forms/filtersets.py:59 +#: netbox/wireless/forms/filtersets.py:93 msgid "Authentication cipher" msgstr "認証暗号" -#: wireless/forms/bulk_edit.py:134 wireless/forms/bulk_import.py:116 -#: wireless/forms/bulk_import.py:119 wireless/forms/filtersets.py:106 +#: 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 "距離単位" -#: wireless/forms/bulk_import.py:52 +#: netbox/wireless/forms/bulk_import.py:52 msgid "Bridged VLAN" msgstr "ブリッジド VLAN" -#: wireless/forms/bulk_import.py:89 wireless/tables/wirelesslink.py:28 +#: netbox/wireless/forms/bulk_import.py:89 +#: netbox/wireless/tables/wirelesslink.py:28 msgid "Interface A" msgstr "インタフェース A" -#: wireless/forms/bulk_import.py:93 wireless/tables/wirelesslink.py:37 +#: netbox/wireless/forms/bulk_import.py:93 +#: netbox/wireless/tables/wirelesslink.py:37 msgid "Interface B" msgstr "インタフェース B" -#: wireless/forms/model_forms.py:161 +#: netbox/wireless/forms/model_forms.py:161 msgid "Side B" msgstr "サイド B" -#: wireless/models.py:31 +#: netbox/wireless/models.py:31 msgid "authentication cipher" msgstr "認証暗号" -#: wireless/models.py:69 +#: netbox/wireless/models.py:69 msgid "wireless LAN group" msgstr "無線 LAN グループ" -#: wireless/models.py:70 +#: netbox/wireless/models.py:70 msgid "wireless LAN groups" msgstr "無線 LAN グループ" -#: wireless/models.py:116 +#: netbox/wireless/models.py:116 msgid "wireless LAN" msgstr "無線 LAN" -#: wireless/models.py:144 +#: netbox/wireless/models.py:144 msgid "interface A" msgstr "インタフェース A" -#: wireless/models.py:151 +#: netbox/wireless/models.py:151 msgid "interface B" msgstr "インタフェース B" -#: wireless/models.py:165 +#: netbox/wireless/models.py:165 msgid "distance" msgstr "距離" -#: wireless/models.py:172 +#: netbox/wireless/models.py:172 msgid "distance unit" msgstr "距離単位" -#: wireless/models.py:219 +#: netbox/wireless/models.py:219 msgid "wireless link" msgstr "無線リンク" -#: wireless/models.py:220 +#: netbox/wireless/models.py:220 msgid "wireless links" msgstr "無線リンク" -#: wireless/models.py:236 +#: netbox/wireless/models.py:236 msgid "Must specify a unit when setting a wireless distance" msgstr "ワイヤレス距離を設定するときは単位を指定する必要があります" -#: wireless/models.py:242 wireless/models.py:248 +#: netbox/wireless/models.py:242 netbox/wireless/models.py:248 #, python-brace-format msgid "{type} is not a wireless interface." msgstr "{type} 無線インタフェースではありません。" -#: wireless/utils.py:16 +#: netbox/wireless/utils.py:16 #, python-brace-format msgid "Invalid channel value: {channel}" msgstr "チャンネル値が無効です: {channel}" -#: wireless/utils.py:26 +#: netbox/wireless/utils.py:26 #, python-brace-format msgid "Invalid channel attribute: {name}" msgstr "チャンネル属性が無効です: {name}" diff --git a/netbox/translations/nl/LC_MESSAGES/django.mo b/netbox/translations/nl/LC_MESSAGES/django.mo index ca93c83dc..1af769697 100644 Binary files a/netbox/translations/nl/LC_MESSAGES/django.mo and b/netbox/translations/nl/LC_MESSAGES/django.mo differ diff --git a/netbox/translations/nl/LC_MESSAGES/django.po b/netbox/translations/nl/LC_MESSAGES/django.po index 175331f93..8a26ba015 100644 --- a/netbox/translations/nl/LC_MESSAGES/django.po +++ b/netbox/translations/nl/LC_MESSAGES/django.po @@ -8,6 +8,7 @@ # deku_m, 2024 # Peter Mulder , 2024 # Jeremy Stretch, 2024 +# Jorg de Jong, 2024 # Sebastian Berm, 2024 # #, fuzzy @@ -15,7 +16,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-10-28 19:20+0000\n" +"POT-Creation-Date: 2024-12-12 05:02+0000\n" "PO-Revision-Date: 2023-10-30 17:48+0000\n" "Last-Translator: Sebastian Berm, 2024\n" "Language-Team: Dutch (https://app.transifex.com/netbox-community/teams/178115/nl/)\n" @@ -25,1877 +26,2144 @@ msgstr "" "Language: nl\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: account/tables.py:27 templates/account/token.html:22 -#: templates/users/token.html:17 users/forms/bulk_import.py:39 -#: users/forms/model_forms.py:112 +#: netbox/account/tables.py:27 netbox/templates/account/token.html:22 +#: netbox/templates/users/token.html:17 netbox/users/forms/bulk_import.py:39 +#: netbox/users/forms/model_forms.py:112 msgid "Key" msgstr "Sleutel" -#: account/tables.py:31 users/forms/filtersets.py:132 +#: netbox/account/tables.py:31 netbox/users/forms/filtersets.py:132 msgid "Write Enabled" msgstr "Schrijven ingeschakeld" -#: account/tables.py:35 core/choices.py:86 core/tables/jobs.py:29 -#: core/tables/tasks.py:79 extras/tables/tables.py:335 -#: extras/tables/tables.py:566 templates/account/token.html:43 -#: templates/core/configrevision.html:26 -#: templates/core/configrevision_restore.html:12 templates/core/job.html:69 -#: templates/core/rq_task.html:16 templates/core/rq_task.html:73 -#: templates/core/rq_worker.html:14 -#: templates/extras/htmx/script_result.html:12 -#: templates/extras/journalentry.html:22 templates/generic/object.html:58 -#: templates/users/token.html:35 +#: netbox/account/tables.py:35 netbox/core/choices.py:86 +#: 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 +#: netbox/templates/core/configrevision.html:26 +#: netbox/templates/core/configrevision_restore.html:12 +#: netbox/templates/core/job.html:69 netbox/templates/core/rq_task.html:16 +#: netbox/templates/core/rq_task.html:73 +#: netbox/templates/core/rq_worker.html:14 +#: netbox/templates/extras/htmx/script_result.html:12 +#: netbox/templates/extras/journalentry.html:22 +#: netbox/templates/generic/object.html:58 +#: netbox/templates/users/token.html:35 msgid "Created" msgstr "Aangemaakt" -#: account/tables.py:39 templates/account/token.html:47 -#: templates/users/token.html:39 users/forms/bulk_edit.py:117 -#: users/forms/filtersets.py:136 +#: netbox/account/tables.py:39 netbox/templates/account/token.html:47 +#: netbox/templates/users/token.html:39 netbox/users/forms/bulk_edit.py:117 +#: netbox/users/forms/filtersets.py:136 msgid "Expires" msgstr "Vervalt" -#: account/tables.py:42 users/forms/filtersets.py:141 +#: netbox/account/tables.py:42 netbox/users/forms/filtersets.py:141 msgid "Last Used" msgstr "Laatst gebruikt" -#: account/tables.py:45 templates/account/token.html:55 -#: templates/users/token.html:47 users/forms/bulk_edit.py:122 -#: users/forms/model_forms.py:124 +#: netbox/account/tables.py:45 netbox/templates/account/token.html:55 +#: netbox/templates/users/token.html:47 netbox/users/forms/bulk_edit.py:122 +#: netbox/users/forms/model_forms.py:124 msgid "Allowed IPs" msgstr "Toegestane IP-adressen" -#: account/views.py:114 +#: netbox/account/views.py:114 #, python-brace-format msgid "Logged in as {user}." msgstr "Ingelogd als {user}." -#: account/views.py:164 +#: netbox/account/views.py:164 msgid "You have logged out." msgstr "Je bent uitgelogd." -#: account/views.py:216 +#: netbox/account/views.py:216 msgid "Your preferences have been updated." msgstr "Je voorkeuren zijn bijgewerkt." -#: account/views.py:239 +#: netbox/account/views.py:239 msgid "LDAP-authenticated user credentials cannot be changed within NetBox." msgstr "" "LDAP-geverifieerde gebruikersgegevens kunnen niet worden gewijzigd in " "NetBox." -#: account/views.py:254 +#: netbox/account/views.py:254 msgid "Your password has been changed successfully." msgstr "Je wachtwoord is succesvol gewijzigd." -#: circuits/choices.py:21 dcim/choices.py:20 dcim/choices.py:102 -#: dcim/choices.py:185 dcim/choices.py:237 dcim/choices.py:1530 -#: dcim/choices.py:1606 dcim/choices.py:1656 virtualization/choices.py:20 -#: virtualization/choices.py:45 vpn/choices.py:18 +#: netbox/circuits/choices.py:21 netbox/dcim/choices.py:20 +#: netbox/dcim/choices.py:102 netbox/dcim/choices.py: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 msgid "Planned" msgstr "Gepland" -#: circuits/choices.py:22 netbox/navigation/menu.py:305 +#: netbox/circuits/choices.py:22 netbox/netbox/navigation/menu.py:305 msgid "Provisioning" msgstr "Provisioning" -#: circuits/choices.py:23 core/tables/tasks.py:22 dcim/choices.py:22 -#: dcim/choices.py:103 dcim/choices.py:184 dcim/choices.py:236 -#: dcim/choices.py:1605 dcim/choices.py:1655 extras/tables/tables.py:495 -#: ipam/choices.py:31 ipam/choices.py:49 ipam/choices.py:69 -#: ipam/choices.py:154 templates/extras/configcontext.html:25 -#: templates/users/user.html:37 users/forms/bulk_edit.py:38 -#: virtualization/choices.py:22 virtualization/choices.py:44 vpn/choices.py:19 -#: wireless/choices.py:25 +#: netbox/circuits/choices.py:23 netbox/core/tables/tasks.py:22 +#: netbox/dcim/choices.py:22 netbox/dcim/choices.py:103 +#: netbox/dcim/choices.py: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/templates/users/user.html:37 netbox/users/forms/bulk_edit.py:38 +#: netbox/virtualization/choices.py:22 netbox/virtualization/choices.py:44 +#: netbox/vpn/choices.py:19 netbox/wireless/choices.py:25 msgid "Active" msgstr "Actief" -#: circuits/choices.py:24 dcim/choices.py:183 dcim/choices.py:235 -#: dcim/choices.py:1604 dcim/choices.py:1657 virtualization/choices.py:24 -#: virtualization/choices.py:43 +#: 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 msgid "Offline" msgstr "Offline" -#: circuits/choices.py:25 +#: netbox/circuits/choices.py:25 msgid "Deprovisioning" msgstr "Deprovisioning" -#: circuits/choices.py:26 +#: netbox/circuits/choices.py:26 msgid "Decommissioned" msgstr "Buiten gebruik" -#: circuits/choices.py:90 dcim/choices.py:1617 tenancy/choices.py:17 +#: netbox/circuits/choices.py:90 netbox/dcim/choices.py:1619 +#: netbox/tenancy/choices.py:17 msgid "Primary" msgstr "Primair" -#: circuits/choices.py:91 ipam/choices.py:90 tenancy/choices.py:18 +#: netbox/circuits/choices.py:91 netbox/ipam/choices.py:90 +#: netbox/tenancy/choices.py:18 msgid "Secondary" msgstr "Secundair" -#: circuits/choices.py:92 tenancy/choices.py:19 +#: netbox/circuits/choices.py:92 netbox/tenancy/choices.py:19 msgid "Tertiary" msgstr "Tertiair" -#: circuits/choices.py:93 tenancy/choices.py:20 +#: netbox/circuits/choices.py:93 netbox/tenancy/choices.py:20 msgid "Inactive" msgstr "Inactief" -#: circuits/filtersets.py:31 circuits/filtersets.py:198 dcim/filtersets.py:98 -#: dcim/filtersets.py:152 dcim/filtersets.py:212 dcim/filtersets.py:333 -#: dcim/filtersets.py:464 dcim/filtersets.py:1021 dcim/filtersets.py:1368 -#: dcim/filtersets.py:1903 dcim/filtersets.py:2146 dcim/filtersets.py:2204 -#: ipam/filtersets.py:339 ipam/filtersets.py:959 -#: virtualization/filtersets.py:45 virtualization/filtersets.py:173 -#: vpn/filtersets.py:358 +#: 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:339 netbox/ipam/filtersets.py:959 +#: netbox/virtualization/filtersets.py:45 +#: netbox/virtualization/filtersets.py:173 netbox/vpn/filtersets.py:358 msgid "Region (ID)" msgstr "Regio (ID)" -#: circuits/filtersets.py:38 circuits/filtersets.py:205 dcim/filtersets.py:105 -#: dcim/filtersets.py:158 dcim/filtersets.py:219 dcim/filtersets.py:340 -#: dcim/filtersets.py:471 dcim/filtersets.py:1028 dcim/filtersets.py:1375 -#: dcim/filtersets.py:1910 dcim/filtersets.py:2153 dcim/filtersets.py:2211 -#: extras/filtersets.py:509 ipam/filtersets.py:346 ipam/filtersets.py:966 -#: virtualization/filtersets.py:52 virtualization/filtersets.py:180 -#: vpn/filtersets.py:353 +#: 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:346 +#: netbox/ipam/filtersets.py:966 netbox/virtualization/filtersets.py:52 +#: netbox/virtualization/filtersets.py:180 netbox/vpn/filtersets.py:353 msgid "Region (slug)" msgstr "Regio (slug)" -#: circuits/filtersets.py:44 circuits/filtersets.py:211 dcim/filtersets.py:128 -#: dcim/filtersets.py:225 dcim/filtersets.py:346 dcim/filtersets.py:477 -#: dcim/filtersets.py:1034 dcim/filtersets.py:1381 dcim/filtersets.py:1916 -#: dcim/filtersets.py:2159 dcim/filtersets.py:2217 ipam/filtersets.py:352 -#: ipam/filtersets.py:972 virtualization/filtersets.py:58 -#: virtualization/filtersets.py:186 +#: 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:352 +#: netbox/ipam/filtersets.py:972 netbox/virtualization/filtersets.py:58 +#: netbox/virtualization/filtersets.py:186 msgid "Site group (ID)" msgstr "Sitegroep (ID)" -#: circuits/filtersets.py:51 circuits/filtersets.py:218 dcim/filtersets.py:135 -#: dcim/filtersets.py:232 dcim/filtersets.py:353 dcim/filtersets.py:484 -#: dcim/filtersets.py:1041 dcim/filtersets.py:1388 dcim/filtersets.py:1923 -#: dcim/filtersets.py:2166 dcim/filtersets.py:2224 extras/filtersets.py:515 -#: ipam/filtersets.py:359 ipam/filtersets.py:979 -#: virtualization/filtersets.py:65 virtualization/filtersets.py:193 +#: 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:359 netbox/ipam/filtersets.py:979 +#: netbox/virtualization/filtersets.py:65 +#: netbox/virtualization/filtersets.py:193 msgid "Site group (slug)" msgstr "Sitegroep (slug)" -#: circuits/filtersets.py:56 circuits/forms/bulk_edit.py:188 -#: circuits/forms/bulk_edit.py:216 circuits/forms/bulk_import.py:124 -#: circuits/forms/filtersets.py:51 circuits/forms/filtersets.py:171 -#: circuits/forms/filtersets.py:209 circuits/forms/model_forms.py:138 -#: circuits/forms/model_forms.py:154 circuits/tables/circuits.py:113 -#: dcim/forms/bulk_edit.py:168 dcim/forms/bulk_edit.py:329 -#: dcim/forms/bulk_edit.py:677 dcim/forms/bulk_edit.py:873 -#: dcim/forms/bulk_import.py:131 dcim/forms/bulk_import.py:230 -#: dcim/forms/bulk_import.py:309 dcim/forms/bulk_import.py:540 -#: dcim/forms/bulk_import.py:1311 dcim/forms/bulk_import.py:1339 -#: dcim/forms/filtersets.py:87 dcim/forms/filtersets.py:225 -#: dcim/forms/filtersets.py:342 dcim/forms/filtersets.py:439 -#: dcim/forms/filtersets.py:753 dcim/forms/filtersets.py:997 -#: dcim/forms/filtersets.py:1021 dcim/forms/filtersets.py:1111 -#: dcim/forms/filtersets.py:1149 dcim/forms/filtersets.py:1584 -#: dcim/forms/filtersets.py:1608 dcim/forms/filtersets.py:1632 -#: dcim/forms/model_forms.py:137 dcim/forms/model_forms.py:165 -#: dcim/forms/model_forms.py:238 dcim/forms/model_forms.py:463 -#: dcim/forms/model_forms.py:723 dcim/forms/object_create.py:391 -#: dcim/tables/devices.py:153 dcim/tables/power.py:26 dcim/tables/power.py:93 -#: dcim/tables/racks.py:122 dcim/tables/racks.py:207 dcim/tables/sites.py:134 -#: extras/filtersets.py:525 ipam/forms/bulk_edit.py:218 -#: ipam/forms/bulk_edit.py:285 ipam/forms/bulk_edit.py:484 -#: ipam/forms/bulk_import.py:171 ipam/forms/bulk_import.py:429 -#: ipam/forms/filtersets.py:153 ipam/forms/filtersets.py:231 -#: ipam/forms/filtersets.py:432 ipam/forms/filtersets.py:489 -#: ipam/forms/model_forms.py:205 ipam/forms/model_forms.py:636 -#: ipam/tables/ip.py:245 ipam/tables/vlans.py:118 ipam/tables/vlans.py:221 -#: templates/circuits/inc/circuit_termination_fields.html:6 -#: templates/dcim/device.html:22 templates/dcim/inc/cable_termination.html:8 -#: templates/dcim/inc/cable_termination.html:33 -#: templates/dcim/location.html:37 templates/dcim/powerpanel.html:22 -#: templates/dcim/rack.html:20 templates/dcim/rackreservation.html:28 -#: templates/dcim/site.html:28 templates/ipam/prefix.html:56 -#: templates/ipam/vlan.html:23 templates/ipam/vlan_edit.html:40 -#: templates/virtualization/cluster.html:42 -#: templates/virtualization/virtualmachine.html:95 -#: virtualization/forms/bulk_edit.py:91 virtualization/forms/bulk_edit.py:109 -#: virtualization/forms/bulk_edit.py:124 -#: virtualization/forms/bulk_import.py:59 -#: virtualization/forms/bulk_import.py:85 -#: virtualization/forms/filtersets.py:79 -#: virtualization/forms/filtersets.py:148 -#: virtualization/forms/model_forms.py:71 -#: virtualization/forms/model_forms.py:104 -#: virtualization/forms/model_forms.py:171 -#: virtualization/tables/clusters.py:77 -#: virtualization/tables/virtualmachines.py:63 vpn/forms/filtersets.py:266 -#: wireless/forms/model_forms.py:76 wireless/forms/model_forms.py:118 +#: 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/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/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/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 msgid "Site" msgstr "Site" -#: circuits/filtersets.py:62 circuits/filtersets.py:229 -#: circuits/filtersets.py:274 dcim/filtersets.py:242 dcim/filtersets.py:363 -#: dcim/filtersets.py:458 extras/filtersets.py:531 ipam/filtersets.py:238 -#: ipam/filtersets.py:369 ipam/filtersets.py:989 -#: virtualization/filtersets.py:75 virtualization/filtersets.py:203 -#: vpn/filtersets.py:363 +#: 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/virtualization/filtersets.py:75 +#: netbox/virtualization/filtersets.py:203 netbox/vpn/filtersets.py:363 msgid "Site (slug)" msgstr "Site (slug)" -#: circuits/filtersets.py:67 +#: netbox/circuits/filtersets.py:67 msgid "ASN (ID)" msgstr "ASN (ID)" -#: circuits/filtersets.py:73 circuits/forms/filtersets.py:31 -#: ipam/forms/model_forms.py:159 ipam/models/asns.py:108 -#: ipam/models/asns.py:125 ipam/tables/asn.py:41 templates/ipam/asn.html:20 +#: 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/templates/ipam/asn.html:20 msgid "ASN" msgstr "ASN" -#: circuits/filtersets.py:95 circuits/filtersets.py:122 -#: circuits/filtersets.py:156 circuits/filtersets.py:283 -#: circuits/filtersets.py:325 ipam/filtersets.py:243 +#: 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 msgid "Provider (ID)" msgstr "Provider (ID)" -#: circuits/filtersets.py:101 circuits/filtersets.py:128 -#: circuits/filtersets.py:162 circuits/filtersets.py:289 -#: circuits/filtersets.py:331 ipam/filtersets.py:249 +#: 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 msgid "Provider (slug)" msgstr "Provider (slug)" -#: circuits/filtersets.py:167 +#: netbox/circuits/filtersets.py:167 msgid "Provider account (ID)" msgstr "Provideraccount (ID)" -#: circuits/filtersets.py:173 +#: netbox/circuits/filtersets.py:173 msgid "Provider account (account)" msgstr "Provideraccount (account)" -#: circuits/filtersets.py:178 +#: netbox/circuits/filtersets.py:178 msgid "Provider network (ID)" msgstr "Providernetwerk (ID)" -#: circuits/filtersets.py:182 +#: netbox/circuits/filtersets.py:182 msgid "Circuit type (ID)" msgstr "Circuittype (ID)" -#: circuits/filtersets.py:188 +#: netbox/circuits/filtersets.py:188 msgid "Circuit type (slug)" msgstr "Circuittype (slug)" -#: circuits/filtersets.py:223 circuits/filtersets.py:268 -#: dcim/filtersets.py:236 dcim/filtersets.py:357 dcim/filtersets.py:452 -#: dcim/filtersets.py:1045 dcim/filtersets.py:1393 dcim/filtersets.py:1928 -#: dcim/filtersets.py:2170 dcim/filtersets.py:2229 ipam/filtersets.py:232 -#: ipam/filtersets.py:363 ipam/filtersets.py:983 -#: virtualization/filtersets.py:69 virtualization/filtersets.py:197 -#: vpn/filtersets.py:368 +#: 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:232 netbox/ipam/filtersets.py:363 +#: netbox/ipam/filtersets.py:983 netbox/virtualization/filtersets.py:69 +#: netbox/virtualization/filtersets.py:197 netbox/vpn/filtersets.py:368 msgid "Site (ID)" msgstr "Locatie (ID)" -#: circuits/filtersets.py:233 circuits/filtersets.py:237 +#: netbox/circuits/filtersets.py:233 netbox/circuits/filtersets.py:237 msgid "Termination A (ID)" msgstr "Eindpunt A (ID)" -#: circuits/filtersets.py:260 circuits/filtersets.py:320 core/filtersets.py:77 -#: core/filtersets.py:136 core/filtersets.py:173 dcim/filtersets.py:751 -#: dcim/filtersets.py:1362 dcim/filtersets.py:2277 extras/filtersets.py:41 -#: extras/filtersets.py:63 extras/filtersets.py:92 extras/filtersets.py:132 -#: extras/filtersets.py:181 extras/filtersets.py:209 extras/filtersets.py:239 -#: extras/filtersets.py:276 extras/filtersets.py:348 extras/filtersets.py:391 -#: extras/filtersets.py:438 extras/filtersets.py:498 extras/filtersets.py:657 -#: extras/filtersets.py:703 ipam/forms/model_forms.py:449 -#: netbox/filtersets.py:282 netbox/forms/__init__.py:22 -#: netbox/forms/base.py:167 templates/htmx/object_selector.html:28 -#: templates/inc/filter_list.html:46 templates/ipam/ipaddress_assign.html:29 -#: templates/search.html:7 templates/search.html:26 tenancy/filtersets.py:99 -#: users/filtersets.py:23 users/filtersets.py:57 users/filtersets.py:102 -#: users/filtersets.py:150 utilities/forms/forms.py:104 -#: utilities/templates/navigation/menu.html:16 +#: 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/templates/htmx/object_selector.html:28 +#: netbox/templates/inc/filter_list.html:46 +#: netbox/templates/ipam/ipaddress_assign.html:29 +#: netbox/templates/search.html:7 netbox/templates/search.html:26 +#: netbox/tenancy/filtersets.py:99 netbox/users/filtersets.py:23 +#: netbox/users/filtersets.py:57 netbox/users/filtersets.py:102 +#: netbox/users/filtersets.py:150 netbox/utilities/forms/forms.py:104 +#: netbox/utilities/templates/navigation/menu.html:16 msgid "Search" msgstr "Zoeken" -#: circuits/filtersets.py:264 circuits/forms/bulk_edit.py:172 -#: circuits/forms/bulk_edit.py:246 circuits/forms/bulk_import.py:115 -#: circuits/forms/filtersets.py:198 circuits/forms/filtersets.py:214 -#: circuits/forms/filtersets.py:260 circuits/forms/model_forms.py:111 -#: circuits/forms/model_forms.py:133 circuits/forms/model_forms.py:199 -#: circuits/tables/circuits.py:104 circuits/tables/circuits.py:164 -#: dcim/forms/connections.py:73 templates/circuits/circuit.html:15 -#: templates/circuits/circuitgroupassignment.html:26 -#: templates/circuits/circuittermination.html:19 -#: templates/dcim/inc/cable_termination.html:55 -#: templates/dcim/trace/circuit.html:4 +#: 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/templates/circuits/circuit.html:15 +#: netbox/templates/circuits/circuitgroupassignment.html:26 +#: 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" -#: circuits/filtersets.py:278 +#: netbox/circuits/filtersets.py:278 msgid "ProviderNetwork (ID)" msgstr "Providernetwerk (ID)" -#: circuits/filtersets.py:335 +#: netbox/circuits/filtersets.py:335 msgid "Circuit (ID)" msgstr "Circuit (ID)" -#: circuits/filtersets.py:341 +#: netbox/circuits/filtersets.py:341 msgid "Circuit (CID)" msgstr "Circuit (CID)" -#: circuits/filtersets.py:345 +#: netbox/circuits/filtersets.py:345 msgid "Circuit group (ID)" msgstr "Circuitgroep (ID)" -#: circuits/filtersets.py:351 +#: netbox/circuits/filtersets.py:351 msgid "Circuit group (slug)" msgstr "Circuitgroep (slug)" -#: circuits/forms/bulk_edit.py:30 circuits/forms/filtersets.py:56 -#: circuits/forms/model_forms.py:29 circuits/tables/providers.py:33 -#: dcim/forms/bulk_edit.py:128 dcim/forms/filtersets.py:195 -#: dcim/forms/model_forms.py:123 dcim/tables/sites.py:94 -#: ipam/models/asns.py:126 ipam/tables/asn.py:27 ipam/views.py:213 -#: netbox/navigation/menu.py:172 netbox/navigation/menu.py:175 -#: templates/circuits/provider.html:23 +#: 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/templates/circuits/provider.html:23 msgid "ASNs" msgstr "ASN's" -#: circuits/forms/bulk_edit.py:34 circuits/forms/bulk_edit.py:56 -#: circuits/forms/bulk_edit.py:83 circuits/forms/bulk_edit.py:104 -#: circuits/forms/bulk_edit.py:164 circuits/forms/bulk_edit.py:183 -#: circuits/forms/bulk_edit.py:228 core/forms/bulk_edit.py:28 -#: dcim/forms/bulk_create.py:35 dcim/forms/bulk_edit.py:73 -#: dcim/forms/bulk_edit.py:92 dcim/forms/bulk_edit.py:151 -#: dcim/forms/bulk_edit.py:192 dcim/forms/bulk_edit.py:210 -#: dcim/forms/bulk_edit.py:288 dcim/forms/bulk_edit.py:432 -#: dcim/forms/bulk_edit.py:466 dcim/forms/bulk_edit.py:481 -#: dcim/forms/bulk_edit.py:540 dcim/forms/bulk_edit.py:584 -#: dcim/forms/bulk_edit.py:618 dcim/forms/bulk_edit.py:642 -#: dcim/forms/bulk_edit.py:715 dcim/forms/bulk_edit.py:767 -#: dcim/forms/bulk_edit.py:819 dcim/forms/bulk_edit.py:842 -#: dcim/forms/bulk_edit.py:890 dcim/forms/bulk_edit.py:960 -#: dcim/forms/bulk_edit.py:1013 dcim/forms/bulk_edit.py:1048 -#: dcim/forms/bulk_edit.py:1088 dcim/forms/bulk_edit.py:1132 -#: dcim/forms/bulk_edit.py:1177 dcim/forms/bulk_edit.py:1204 -#: dcim/forms/bulk_edit.py:1222 dcim/forms/bulk_edit.py:1240 -#: dcim/forms/bulk_edit.py:1258 dcim/forms/bulk_edit.py:1682 -#: extras/forms/bulk_edit.py:39 extras/forms/bulk_edit.py:149 -#: extras/forms/bulk_edit.py:178 extras/forms/bulk_edit.py:208 -#: extras/forms/bulk_edit.py:256 extras/forms/bulk_edit.py:274 -#: extras/forms/bulk_edit.py:298 extras/forms/bulk_edit.py:312 -#: extras/forms/bulk_edit.py:339 extras/tables/tables.py:79 -#: ipam/forms/bulk_edit.py:53 ipam/forms/bulk_edit.py:73 -#: ipam/forms/bulk_edit.py:93 ipam/forms/bulk_edit.py:117 -#: ipam/forms/bulk_edit.py:146 ipam/forms/bulk_edit.py:175 -#: ipam/forms/bulk_edit.py:194 ipam/forms/bulk_edit.py:276 -#: ipam/forms/bulk_edit.py:321 ipam/forms/bulk_edit.py:369 -#: ipam/forms/bulk_edit.py:412 ipam/forms/bulk_edit.py:428 -#: ipam/forms/bulk_edit.py:516 ipam/forms/bulk_edit.py:547 -#: templates/account/token.html:35 templates/circuits/circuit.html:59 -#: templates/circuits/circuitgroup.html:32 -#: templates/circuits/circuittype.html:26 -#: templates/circuits/inc/circuit_termination_fields.html:88 -#: templates/circuits/provider.html:33 -#: templates/circuits/providernetwork.html:32 -#: templates/core/datasource.html:54 templates/core/plugin.html:80 -#: templates/dcim/cable.html:36 templates/dcim/consoleport.html:44 -#: templates/dcim/consoleserverport.html:44 templates/dcim/device.html:94 -#: templates/dcim/devicebay.html:32 templates/dcim/devicerole.html:30 -#: templates/dcim/devicetype.html:33 templates/dcim/frontport.html:58 -#: templates/dcim/interface.html:69 templates/dcim/inventoryitem.html:60 -#: templates/dcim/inventoryitemrole.html:22 templates/dcim/location.html:33 -#: templates/dcim/manufacturer.html:40 templates/dcim/module.html:73 -#: templates/dcim/modulebay.html:42 templates/dcim/moduletype.html:37 -#: templates/dcim/platform.html:33 templates/dcim/powerfeed.html:40 -#: templates/dcim/poweroutlet.html:40 templates/dcim/powerpanel.html:30 -#: templates/dcim/powerport.html:40 templates/dcim/rack.html:53 -#: templates/dcim/rackreservation.html:62 templates/dcim/rackrole.html:26 -#: templates/dcim/racktype.html:24 templates/dcim/rearport.html:54 -#: templates/dcim/region.html:33 templates/dcim/site.html:60 -#: templates/dcim/sitegroup.html:33 templates/dcim/virtualchassis.html:31 -#: templates/extras/configcontext.html:21 -#: templates/extras/configtemplate.html:17 -#: templates/extras/customfield.html:34 -#: templates/extras/dashboard/widget_add.html:14 -#: templates/extras/eventrule.html:21 templates/extras/exporttemplate.html:19 -#: templates/extras/notificationgroup.html:20 -#: templates/extras/savedfilter.html:17 templates/extras/script_list.html:45 -#: templates/extras/tag.html:20 templates/extras/webhook.html:17 -#: templates/generic/bulk_import.html:120 templates/ipam/aggregate.html:43 -#: templates/ipam/asn.html:42 templates/ipam/asnrange.html:38 -#: templates/ipam/fhrpgroup.html:34 templates/ipam/ipaddress.html:55 -#: templates/ipam/iprange.html:67 templates/ipam/prefix.html:81 -#: templates/ipam/rir.html:26 templates/ipam/role.html:26 -#: templates/ipam/routetarget.html:21 templates/ipam/service.html:50 -#: templates/ipam/servicetemplate.html:27 templates/ipam/vlan.html:62 -#: templates/ipam/vlangroup.html:34 templates/ipam/vrf.html:33 -#: templates/tenancy/contact.html:67 templates/tenancy/contactgroup.html:25 -#: templates/tenancy/contactrole.html:22 templates/tenancy/tenant.html:24 -#: templates/tenancy/tenantgroup.html:33 templates/users/group.html:21 -#: templates/users/objectpermission.html:21 templates/users/token.html:27 -#: templates/virtualization/cluster.html:25 -#: templates/virtualization/clustergroup.html:26 -#: templates/virtualization/clustertype.html:26 -#: templates/virtualization/virtualdisk.html:39 -#: templates/virtualization/virtualmachine.html:31 -#: templates/virtualization/vminterface.html:51 -#: templates/vpn/ikepolicy.html:17 templates/vpn/ikeproposal.html:17 -#: templates/vpn/ipsecpolicy.html:17 templates/vpn/ipsecprofile.html:17 -#: templates/vpn/ipsecprofile.html:40 templates/vpn/ipsecprofile.html:73 -#: templates/vpn/ipsecproposal.html:17 templates/vpn/l2vpn.html:26 -#: templates/vpn/tunnel.html:33 templates/vpn/tunnelgroup.html:30 -#: templates/wireless/wirelesslan.html:26 -#: templates/wireless/wirelesslangroup.html:33 -#: templates/wireless/wirelesslink.html:34 tenancy/forms/bulk_edit.py:32 -#: tenancy/forms/bulk_edit.py:80 tenancy/forms/bulk_edit.py:122 -#: users/forms/bulk_edit.py:64 users/forms/bulk_edit.py:82 -#: users/forms/bulk_edit.py:112 virtualization/forms/bulk_edit.py:32 -#: virtualization/forms/bulk_edit.py:46 virtualization/forms/bulk_edit.py:100 -#: virtualization/forms/bulk_edit.py:177 virtualization/forms/bulk_edit.py:228 -#: virtualization/forms/bulk_edit.py:337 vpn/forms/bulk_edit.py:28 -#: vpn/forms/bulk_edit.py:64 vpn/forms/bulk_edit.py:121 -#: vpn/forms/bulk_edit.py:155 vpn/forms/bulk_edit.py:190 -#: vpn/forms/bulk_edit.py:215 vpn/forms/bulk_edit.py:247 -#: vpn/forms/bulk_edit.py:274 wireless/forms/bulk_edit.py:29 -#: wireless/forms/bulk_edit.py:82 wireless/forms/bulk_edit.py:140 +#: 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/templates/account/token.html:35 +#: netbox/templates/circuits/circuit.html:59 +#: netbox/templates/circuits/circuitgroup.html:32 +#: netbox/templates/circuits/circuittype.html:26 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:88 +#: netbox/templates/circuits/provider.html:33 +#: netbox/templates/circuits/providernetwork.html:32 +#: netbox/templates/core/datasource.html:54 +#: netbox/templates/core/plugin.html:80 netbox/templates/dcim/cable.html:36 +#: netbox/templates/dcim/consoleport.html:44 +#: netbox/templates/dcim/consoleserverport.html:44 +#: netbox/templates/dcim/device.html:94 +#: netbox/templates/dcim/devicebay.html:32 +#: netbox/templates/dcim/devicerole.html:30 +#: netbox/templates/dcim/devicetype.html:33 +#: netbox/templates/dcim/frontport.html:58 +#: netbox/templates/dcim/interface.html:69 +#: netbox/templates/dcim/inventoryitem.html:60 +#: netbox/templates/dcim/inventoryitemrole.html:22 +#: netbox/templates/dcim/location.html:33 +#: netbox/templates/dcim/manufacturer.html:40 +#: netbox/templates/dcim/module.html:73 +#: netbox/templates/dcim/modulebay.html:42 +#: netbox/templates/dcim/moduletype.html:37 +#: netbox/templates/dcim/platform.html:33 +#: netbox/templates/dcim/powerfeed.html:40 +#: netbox/templates/dcim/poweroutlet.html:40 +#: netbox/templates/dcim/powerpanel.html:30 +#: netbox/templates/dcim/powerport.html:40 netbox/templates/dcim/rack.html:53 +#: netbox/templates/dcim/rackreservation.html:62 +#: netbox/templates/dcim/rackrole.html:26 +#: netbox/templates/dcim/racktype.html:24 +#: netbox/templates/dcim/rearport.html:54 netbox/templates/dcim/region.html:33 +#: netbox/templates/dcim/site.html:60 netbox/templates/dcim/sitegroup.html:33 +#: netbox/templates/dcim/virtualchassis.html:31 +#: netbox/templates/extras/configcontext.html:21 +#: netbox/templates/extras/configtemplate.html:17 +#: netbox/templates/extras/customfield.html:34 +#: netbox/templates/extras/dashboard/widget_add.html:14 +#: netbox/templates/extras/eventrule.html:21 +#: netbox/templates/extras/exporttemplate.html:19 +#: netbox/templates/extras/notificationgroup.html:20 +#: netbox/templates/extras/savedfilter.html:17 +#: netbox/templates/extras/script_list.html:46 +#: netbox/templates/extras/tag.html:20 netbox/templates/extras/webhook.html:17 +#: netbox/templates/generic/bulk_import.html:120 +#: netbox/templates/ipam/aggregate.html:43 netbox/templates/ipam/asn.html:42 +#: netbox/templates/ipam/asnrange.html:38 +#: netbox/templates/ipam/fhrpgroup.html:34 +#: netbox/templates/ipam/ipaddress.html:55 +#: netbox/templates/ipam/iprange.html:67 netbox/templates/ipam/prefix.html:81 +#: netbox/templates/ipam/rir.html:26 netbox/templates/ipam/role.html:26 +#: netbox/templates/ipam/routetarget.html:21 +#: netbox/templates/ipam/service.html:50 +#: netbox/templates/ipam/servicetemplate.html:27 +#: netbox/templates/ipam/vlan.html:62 netbox/templates/ipam/vlangroup.html:34 +#: netbox/templates/ipam/vrf.html:33 netbox/templates/tenancy/contact.html:67 +#: netbox/templates/tenancy/contactgroup.html:25 +#: netbox/templates/tenancy/contactrole.html:22 +#: netbox/templates/tenancy/tenant.html:24 +#: netbox/templates/tenancy/tenantgroup.html:33 +#: netbox/templates/users/group.html:21 +#: netbox/templates/users/objectpermission.html:21 +#: netbox/templates/users/token.html:27 +#: netbox/templates/virtualization/cluster.html:25 +#: netbox/templates/virtualization/clustergroup.html:26 +#: netbox/templates/virtualization/clustertype.html:26 +#: netbox/templates/virtualization/virtualdisk.html:39 +#: netbox/templates/virtualization/virtualmachine.html:31 +#: netbox/templates/virtualization/vminterface.html:51 +#: netbox/templates/vpn/ikepolicy.html:17 +#: netbox/templates/vpn/ikeproposal.html:17 +#: netbox/templates/vpn/ipsecpolicy.html:17 +#: netbox/templates/vpn/ipsecprofile.html:17 +#: netbox/templates/vpn/ipsecprofile.html:40 +#: netbox/templates/vpn/ipsecprofile.html:73 +#: netbox/templates/vpn/ipsecproposal.html:17 +#: netbox/templates/vpn/l2vpn.html:26 netbox/templates/vpn/tunnel.html:33 +#: netbox/templates/vpn/tunnelgroup.html:30 +#: netbox/templates/wireless/wirelesslan.html:26 +#: netbox/templates/wireless/wirelesslangroup.html:33 +#: netbox/templates/wireless/wirelesslink.html:34 +#: netbox/tenancy/forms/bulk_edit.py:32 netbox/tenancy/forms/bulk_edit.py:80 +#: netbox/tenancy/forms/bulk_edit.py:122 netbox/users/forms/bulk_edit.py:64 +#: netbox/users/forms/bulk_edit.py:82 netbox/users/forms/bulk_edit.py:112 +#: netbox/virtualization/forms/bulk_edit.py:32 +#: netbox/virtualization/forms/bulk_edit.py:46 +#: netbox/virtualization/forms/bulk_edit.py:100 +#: netbox/virtualization/forms/bulk_edit.py:177 +#: netbox/virtualization/forms/bulk_edit.py:228 +#: netbox/virtualization/forms/bulk_edit.py:337 +#: netbox/vpn/forms/bulk_edit.py:28 netbox/vpn/forms/bulk_edit.py:64 +#: netbox/vpn/forms/bulk_edit.py:121 netbox/vpn/forms/bulk_edit.py:155 +#: netbox/vpn/forms/bulk_edit.py:190 netbox/vpn/forms/bulk_edit.py:215 +#: netbox/vpn/forms/bulk_edit.py:247 netbox/vpn/forms/bulk_edit.py:274 +#: netbox/wireless/forms/bulk_edit.py:29 netbox/wireless/forms/bulk_edit.py:82 +#: netbox/wireless/forms/bulk_edit.py:140 msgid "Description" msgstr "Omschrijving" -#: circuits/forms/bulk_edit.py:51 circuits/forms/bulk_edit.py:73 -#: circuits/forms/bulk_edit.py:123 circuits/forms/bulk_import.py:36 -#: circuits/forms/bulk_import.py:51 circuits/forms/bulk_import.py:74 -#: circuits/forms/filtersets.py:70 circuits/forms/filtersets.py:88 -#: circuits/forms/filtersets.py:116 circuits/forms/filtersets.py:131 -#: circuits/forms/filtersets.py:199 circuits/forms/filtersets.py:232 -#: circuits/forms/filtersets.py:255 circuits/forms/model_forms.py:47 -#: circuits/forms/model_forms.py:61 circuits/forms/model_forms.py:93 -#: circuits/tables/circuits.py:58 circuits/tables/circuits.py:108 -#: circuits/tables/circuits.py:160 circuits/tables/providers.py:72 -#: circuits/tables/providers.py:103 templates/circuits/circuit.html:18 -#: templates/circuits/circuittermination.html:25 -#: templates/circuits/provider.html:20 -#: templates/circuits/provideraccount.html:20 -#: templates/circuits/providernetwork.html:20 -#: templates/dcim/inc/cable_termination.html:51 +#: netbox/circuits/forms/bulk_edit.py: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/templates/circuits/circuit.html:18 +#: netbox/templates/circuits/circuittermination.html:25 +#: netbox/templates/circuits/provider.html:20 +#: netbox/templates/circuits/provideraccount.html:20 +#: netbox/templates/circuits/providernetwork.html:20 +#: netbox/templates/dcim/inc/cable_termination.html:51 msgid "Provider" msgstr "Provider" -#: circuits/forms/bulk_edit.py:80 circuits/forms/filtersets.py:91 -#: templates/circuits/providernetwork.html:28 +#: netbox/circuits/forms/bulk_edit.py:80 +#: netbox/circuits/forms/filtersets.py:91 +#: netbox/templates/circuits/providernetwork.html:28 msgid "Service ID" msgstr "Service-ID" -#: circuits/forms/bulk_edit.py:100 circuits/forms/filtersets.py:107 -#: dcim/forms/bulk_edit.py:206 dcim/forms/bulk_edit.py:604 -#: dcim/forms/bulk_edit.py:804 dcim/forms/bulk_edit.py:1173 -#: dcim/forms/bulk_edit.py:1200 dcim/forms/bulk_edit.py:1678 -#: dcim/forms/filtersets.py:1064 dcim/forms/filtersets.py:1455 -#: dcim/forms/filtersets.py:1479 dcim/tables/devices.py:704 -#: dcim/tables/devices.py:761 dcim/tables/devices.py:1003 -#: dcim/tables/devicetypes.py:249 dcim/tables/devicetypes.py:264 -#: dcim/tables/racks.py:33 extras/forms/bulk_edit.py:270 -#: extras/tables/tables.py:443 templates/circuits/circuittype.html:30 -#: templates/dcim/cable.html:40 templates/dcim/devicerole.html:34 -#: templates/dcim/frontport.html:40 templates/dcim/inventoryitemrole.html:26 -#: templates/dcim/rackrole.html:30 templates/dcim/rearport.html:40 -#: templates/extras/tag.html:26 +#: netbox/circuits/forms/bulk_edit.py: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/templates/circuits/circuittype.html:30 +#: netbox/templates/dcim/cable.html:40 +#: netbox/templates/dcim/devicerole.html:34 +#: netbox/templates/dcim/frontport.html:40 +#: netbox/templates/dcim/inventoryitemrole.html:26 +#: netbox/templates/dcim/rackrole.html:30 +#: netbox/templates/dcim/rearport.html:40 netbox/templates/extras/tag.html:26 msgid "Color" msgstr "Kleur" -#: circuits/forms/bulk_edit.py:118 circuits/forms/bulk_import.py:87 -#: circuits/forms/filtersets.py:126 core/forms/bulk_edit.py:18 -#: core/forms/filtersets.py:33 core/tables/change_logging.py:32 -#: core/tables/data.py:20 core/tables/jobs.py:18 dcim/forms/bulk_edit.py:782 -#: dcim/forms/bulk_edit.py:921 dcim/forms/bulk_edit.py:989 -#: dcim/forms/bulk_edit.py:1008 dcim/forms/bulk_edit.py:1031 -#: dcim/forms/bulk_edit.py:1073 dcim/forms/bulk_edit.py:1117 -#: dcim/forms/bulk_edit.py:1168 dcim/forms/bulk_edit.py:1195 -#: dcim/forms/bulk_import.py:188 dcim/forms/bulk_import.py:260 -#: dcim/forms/bulk_import.py:708 dcim/forms/bulk_import.py:734 -#: dcim/forms/bulk_import.py:760 dcim/forms/bulk_import.py:780 -#: dcim/forms/bulk_import.py:863 dcim/forms/bulk_import.py:957 -#: dcim/forms/bulk_import.py:999 dcim/forms/bulk_import.py:1213 -#: dcim/forms/bulk_import.py:1376 dcim/forms/filtersets.py:955 -#: dcim/forms/filtersets.py:1054 dcim/forms/filtersets.py:1175 -#: dcim/forms/filtersets.py:1247 dcim/forms/filtersets.py:1272 -#: dcim/forms/filtersets.py:1296 dcim/forms/filtersets.py:1316 -#: dcim/forms/filtersets.py:1353 dcim/forms/filtersets.py:1450 -#: dcim/forms/filtersets.py:1474 dcim/forms/model_forms.py:703 -#: dcim/forms/model_forms.py:709 dcim/forms/object_import.py:84 -#: dcim/forms/object_import.py:113 dcim/forms/object_import.py:145 -#: dcim/tables/devices.py:178 dcim/tables/devices.py:814 -#: dcim/tables/power.py:77 dcim/tables/racks.py:138 -#: extras/forms/bulk_import.py:42 extras/tables/tables.py:405 -#: extras/tables/tables.py:465 netbox/tables/tables.py:240 -#: templates/circuits/circuit.html:30 templates/core/datasource.html:38 -#: templates/dcim/cable.html:15 templates/dcim/consoleport.html:36 -#: templates/dcim/consoleserverport.html:36 templates/dcim/frontport.html:36 -#: templates/dcim/interface.html:46 templates/dcim/interface.html:169 -#: templates/dcim/interface.html:311 templates/dcim/powerfeed.html:32 -#: templates/dcim/poweroutlet.html:36 templates/dcim/powerport.html:36 -#: templates/dcim/rearport.html:36 templates/extras/eventrule.html:74 -#: templates/virtualization/cluster.html:17 templates/vpn/l2vpn.html:22 -#: templates/wireless/inc/authentication_attrs.html:8 -#: templates/wireless/inc/wirelesslink_interface.html:14 -#: virtualization/forms/bulk_edit.py:60 virtualization/forms/bulk_import.py:41 -#: virtualization/forms/filtersets.py:54 -#: virtualization/forms/model_forms.py:62 virtualization/tables/clusters.py:66 -#: vpn/forms/bulk_edit.py:264 vpn/forms/bulk_import.py:264 -#: vpn/forms/filtersets.py:217 vpn/forms/model_forms.py:84 -#: vpn/forms/model_forms.py:119 vpn/forms/model_forms.py:231 +#: netbox/circuits/forms/bulk_edit.py: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/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/core/datasource.html:38 +#: netbox/templates/dcim/cable.html:15 +#: netbox/templates/dcim/consoleport.html:36 +#: netbox/templates/dcim/consoleserverport.html:36 +#: netbox/templates/dcim/frontport.html:36 +#: netbox/templates/dcim/interface.html:46 +#: netbox/templates/dcim/interface.html:169 +#: netbox/templates/dcim/interface.html:311 +#: netbox/templates/dcim/powerfeed.html:32 +#: netbox/templates/dcim/poweroutlet.html:36 +#: netbox/templates/dcim/powerport.html:36 +#: netbox/templates/dcim/rearport.html:36 +#: netbox/templates/extras/eventrule.html:74 +#: netbox/templates/virtualization/cluster.html:17 +#: netbox/templates/vpn/l2vpn.html:22 +#: netbox/templates/wireless/inc/authentication_attrs.html:8 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:14 +#: netbox/virtualization/forms/bulk_edit.py:60 +#: netbox/virtualization/forms/bulk_import.py:41 +#: netbox/virtualization/forms/filtersets.py:54 +#: netbox/virtualization/forms/model_forms.py:62 +#: netbox/virtualization/tables/clusters.py:66 +#: netbox/vpn/forms/bulk_edit.py:264 netbox/vpn/forms/bulk_import.py:264 +#: netbox/vpn/forms/filtersets.py:217 netbox/vpn/forms/model_forms.py:84 +#: netbox/vpn/forms/model_forms.py:119 netbox/vpn/forms/model_forms.py:231 msgid "Type" msgstr "Type" -#: circuits/forms/bulk_edit.py:128 circuits/forms/bulk_import.py:80 -#: circuits/forms/filtersets.py:139 circuits/forms/model_forms.py:98 +#: 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 msgid "Provider account" msgstr "Provideraccount" -#: circuits/forms/bulk_edit.py:136 circuits/forms/bulk_import.py:93 -#: circuits/forms/filtersets.py:150 core/forms/filtersets.py:38 -#: core/forms/filtersets.py:79 core/tables/data.py:23 core/tables/jobs.py:26 -#: core/tables/tasks.py:88 dcim/forms/bulk_edit.py:106 -#: dcim/forms/bulk_edit.py:181 dcim/forms/bulk_edit.py:351 -#: dcim/forms/bulk_edit.py:700 dcim/forms/bulk_edit.py:756 -#: dcim/forms/bulk_edit.py:788 dcim/forms/bulk_edit.py:915 -#: dcim/forms/bulk_edit.py:1701 dcim/forms/bulk_import.py:88 -#: dcim/forms/bulk_import.py:147 dcim/forms/bulk_import.py:248 -#: dcim/forms/bulk_import.py:505 dcim/forms/bulk_import.py:659 -#: dcim/forms/bulk_import.py:1207 dcim/forms/bulk_import.py:1371 -#: dcim/forms/bulk_import.py:1435 dcim/forms/filtersets.py:178 -#: dcim/forms/filtersets.py:237 dcim/forms/filtersets.py:359 -#: dcim/forms/filtersets.py:799 dcim/forms/filtersets.py:924 -#: dcim/forms/filtersets.py:958 dcim/forms/filtersets.py:1059 -#: dcim/forms/filtersets.py:1170 dcim/tables/devices.py:140 -#: dcim/tables/devices.py:817 dcim/tables/devices.py:1063 -#: dcim/tables/modules.py:69 dcim/tables/power.py:74 dcim/tables/racks.py:126 -#: dcim/tables/sites.py:82 dcim/tables/sites.py:138 -#: ipam/forms/bulk_edit.py:256 ipam/forms/bulk_edit.py:306 -#: ipam/forms/bulk_edit.py:354 ipam/forms/bulk_edit.py:506 -#: ipam/forms/bulk_import.py:192 ipam/forms/bulk_import.py:257 -#: ipam/forms/bulk_import.py:293 ipam/forms/bulk_import.py:450 -#: ipam/forms/filtersets.py:210 ipam/forms/filtersets.py:281 -#: ipam/forms/filtersets.py:355 ipam/forms/filtersets.py:501 -#: ipam/forms/model_forms.py:468 ipam/tables/ip.py:237 ipam/tables/ip.py:312 -#: ipam/tables/ip.py:363 ipam/tables/ip.py:426 ipam/tables/ip.py:453 -#: ipam/tables/vlans.py:126 ipam/tables/vlans.py:232 -#: templates/circuits/circuit.html:34 templates/core/datasource.html:46 -#: templates/core/job.html:48 templates/core/rq_task.html:81 -#: templates/core/system.html:18 templates/dcim/cable.html:19 -#: templates/dcim/device.html:178 templates/dcim/location.html:45 -#: templates/dcim/module.html:69 templates/dcim/powerfeed.html:36 -#: templates/dcim/rack.html:41 templates/dcim/site.html:43 -#: templates/extras/script_list.html:47 templates/ipam/ipaddress.html:37 -#: templates/ipam/iprange.html:54 templates/ipam/prefix.html:73 -#: templates/ipam/vlan.html:48 templates/virtualization/cluster.html:21 -#: templates/virtualization/virtualmachine.html:19 -#: templates/vpn/tunnel.html:25 templates/wireless/wirelesslan.html:22 -#: templates/wireless/wirelesslink.html:17 users/forms/filtersets.py:32 -#: users/forms/model_forms.py:194 virtualization/forms/bulk_edit.py:70 -#: virtualization/forms/bulk_edit.py:118 -#: virtualization/forms/bulk_import.py:54 -#: virtualization/forms/bulk_import.py:80 -#: virtualization/forms/filtersets.py:62 -#: virtualization/forms/filtersets.py:160 virtualization/tables/clusters.py:74 -#: virtualization/tables/virtualmachines.py:60 vpn/forms/bulk_edit.py:39 -#: vpn/forms/bulk_import.py:37 vpn/forms/filtersets.py:47 -#: vpn/tables/tunnels.py:48 wireless/forms/bulk_edit.py:43 -#: wireless/forms/bulk_edit.py:105 wireless/forms/bulk_import.py:43 -#: wireless/forms/bulk_import.py:84 wireless/forms/filtersets.py:49 -#: wireless/forms/filtersets.py:83 wireless/tables/wirelesslan.py:52 -#: wireless/tables/wirelesslink.py:20 +#: 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/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:69 +#: 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/templates/circuits/circuit.html:34 +#: 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/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/vlan.html:48 +#: netbox/templates/virtualization/cluster.html:21 +#: netbox/templates/virtualization/virtualmachine.html:19 +#: netbox/templates/vpn/tunnel.html:25 +#: netbox/templates/wireless/wirelesslan.html:22 +#: netbox/templates/wireless/wirelesslink.html:17 +#: netbox/users/forms/filtersets.py: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/tables/clusters.py:74 +#: netbox/virtualization/tables/virtualmachines.py:60 +#: netbox/vpn/forms/bulk_edit.py:39 netbox/vpn/forms/bulk_import.py:37 +#: netbox/vpn/forms/filtersets.py:47 netbox/vpn/tables/tunnels.py:48 +#: netbox/wireless/forms/bulk_edit.py:43 +#: netbox/wireless/forms/bulk_edit.py:105 +#: netbox/wireless/forms/bulk_import.py:43 +#: netbox/wireless/forms/bulk_import.py:84 +#: netbox/wireless/forms/filtersets.py:49 +#: netbox/wireless/forms/filtersets.py:83 +#: netbox/wireless/tables/wirelesslan.py:52 +#: netbox/wireless/tables/wirelesslink.py:20 msgid "Status" msgstr "Status" -#: circuits/forms/bulk_edit.py:142 circuits/forms/bulk_edit.py:233 -#: circuits/forms/bulk_import.py:98 circuits/forms/bulk_import.py:158 -#: circuits/forms/filtersets.py:119 circuits/forms/filtersets.py:241 -#: dcim/forms/bulk_edit.py:122 dcim/forms/bulk_edit.py:187 -#: dcim/forms/bulk_edit.py:346 dcim/forms/bulk_edit.py:461 -#: dcim/forms/bulk_edit.py:690 dcim/forms/bulk_edit.py:794 -#: dcim/forms/bulk_edit.py:1706 dcim/forms/bulk_import.py:107 -#: dcim/forms/bulk_import.py:152 dcim/forms/bulk_import.py:241 -#: dcim/forms/bulk_import.py:334 dcim/forms/bulk_import.py:479 -#: dcim/forms/bulk_import.py:1219 dcim/forms/bulk_import.py:1428 -#: dcim/forms/filtersets.py:173 dcim/forms/filtersets.py:205 -#: dcim/forms/filtersets.py:323 dcim/forms/filtersets.py:399 -#: dcim/forms/filtersets.py:420 dcim/forms/filtersets.py:722 -#: dcim/forms/filtersets.py:916 dcim/forms/filtersets.py:978 -#: dcim/forms/filtersets.py:1008 dcim/forms/filtersets.py:1130 -#: dcim/tables/power.py:88 extras/filtersets.py:612 -#: extras/forms/filtersets.py:323 extras/forms/filtersets.py:396 -#: ipam/forms/bulk_edit.py:43 ipam/forms/bulk_edit.py:68 -#: ipam/forms/bulk_edit.py:112 ipam/forms/bulk_edit.py:141 -#: ipam/forms/bulk_edit.py:166 ipam/forms/bulk_edit.py:251 -#: ipam/forms/bulk_edit.py:301 ipam/forms/bulk_edit.py:349 -#: ipam/forms/bulk_edit.py:501 ipam/forms/bulk_import.py:38 -#: ipam/forms/bulk_import.py:67 ipam/forms/bulk_import.py:95 -#: ipam/forms/bulk_import.py:115 ipam/forms/bulk_import.py:135 -#: ipam/forms/bulk_import.py:164 ipam/forms/bulk_import.py:250 -#: ipam/forms/bulk_import.py:286 ipam/forms/bulk_import.py:443 -#: ipam/forms/filtersets.py:48 ipam/forms/filtersets.py:68 -#: ipam/forms/filtersets.py:100 ipam/forms/filtersets.py:120 -#: ipam/forms/filtersets.py:143 ipam/forms/filtersets.py:174 -#: ipam/forms/filtersets.py:267 ipam/forms/filtersets.py:310 -#: ipam/forms/filtersets.py:469 ipam/tables/ip.py:456 ipam/tables/vlans.py:229 -#: templates/circuits/circuit.html:38 templates/circuits/circuitgroup.html:36 -#: templates/dcim/cable.html:23 templates/dcim/device.html:79 -#: templates/dcim/location.html:49 templates/dcim/powerfeed.html:44 -#: templates/dcim/rack.html:32 templates/dcim/rackreservation.html:49 -#: templates/dcim/site.html:47 templates/dcim/virtualdevicecontext.html:52 -#: templates/ipam/aggregate.html:30 templates/ipam/asn.html:33 -#: templates/ipam/asnrange.html:29 templates/ipam/ipaddress.html:28 -#: templates/ipam/iprange.html:58 templates/ipam/prefix.html:29 -#: templates/ipam/routetarget.html:17 templates/ipam/vlan.html:39 -#: templates/ipam/vrf.html:20 templates/tenancy/tenant.html:17 -#: templates/virtualization/cluster.html:33 -#: templates/virtualization/virtualmachine.html:39 templates/vpn/l2vpn.html:30 -#: templates/vpn/tunnel.html:49 templates/wireless/wirelesslan.html:34 -#: templates/wireless/wirelesslink.html:25 tenancy/forms/forms.py:25 -#: tenancy/forms/forms.py:48 tenancy/forms/model_forms.py:52 -#: tenancy/tables/columns.py:64 virtualization/forms/bulk_edit.py:76 -#: virtualization/forms/bulk_edit.py:155 -#: virtualization/forms/bulk_import.py:66 -#: virtualization/forms/bulk_import.py:115 -#: virtualization/forms/filtersets.py:47 -#: virtualization/forms/filtersets.py:105 vpn/forms/bulk_edit.py:59 -#: vpn/forms/bulk_edit.py:269 vpn/forms/bulk_import.py:59 -#: vpn/forms/bulk_import.py:258 vpn/forms/filtersets.py:214 -#: wireless/forms/bulk_edit.py:63 wireless/forms/bulk_edit.py:110 -#: wireless/forms/bulk_import.py:55 wireless/forms/bulk_import.py:97 -#: wireless/forms/filtersets.py:35 wireless/forms/filtersets.py:75 +#: netbox/circuits/forms/bulk_edit.py: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/templates/circuits/circuitgroup.html:36 +#: 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 +#: netbox/templates/dcim/rackreservation.html:49 +#: netbox/templates/dcim/site.html:47 +#: netbox/templates/dcim/virtualdevicecontext.html:52 +#: netbox/templates/ipam/aggregate.html:30 netbox/templates/ipam/asn.html:33 +#: netbox/templates/ipam/asnrange.html:29 +#: netbox/templates/ipam/ipaddress.html:28 +#: netbox/templates/ipam/iprange.html:58 netbox/templates/ipam/prefix.html:29 +#: netbox/templates/ipam/routetarget.html:17 +#: netbox/templates/ipam/vlan.html:39 netbox/templates/ipam/vrf.html:20 +#: netbox/templates/tenancy/tenant.html:17 +#: netbox/templates/virtualization/cluster.html:33 +#: netbox/templates/virtualization/virtualmachine.html:39 +#: netbox/templates/vpn/l2vpn.html:30 netbox/templates/vpn/tunnel.html:49 +#: netbox/templates/wireless/wirelesslan.html:34 +#: netbox/templates/wireless/wirelesslink.html:25 +#: netbox/tenancy/forms/forms.py:25 netbox/tenancy/forms/forms.py:48 +#: netbox/tenancy/forms/model_forms.py:52 netbox/tenancy/tables/columns.py:64 +#: netbox/virtualization/forms/bulk_edit.py:76 +#: netbox/virtualization/forms/bulk_edit.py:155 +#: netbox/virtualization/forms/bulk_import.py:66 +#: netbox/virtualization/forms/bulk_import.py:115 +#: netbox/virtualization/forms/filtersets.py:47 +#: netbox/virtualization/forms/filtersets.py:105 +#: netbox/vpn/forms/bulk_edit.py:59 netbox/vpn/forms/bulk_edit.py:269 +#: netbox/vpn/forms/bulk_import.py:59 netbox/vpn/forms/bulk_import.py:258 +#: netbox/vpn/forms/filtersets.py:214 netbox/wireless/forms/bulk_edit.py:63 +#: netbox/wireless/forms/bulk_edit.py:110 +#: netbox/wireless/forms/bulk_import.py:55 +#: netbox/wireless/forms/bulk_import.py:97 +#: netbox/wireless/forms/filtersets.py:35 +#: netbox/wireless/forms/filtersets.py:75 msgid "Tenant" msgstr "Tenant" -#: circuits/forms/bulk_edit.py:147 circuits/forms/filtersets.py:174 +#: netbox/circuits/forms/bulk_edit.py:147 +#: netbox/circuits/forms/filtersets.py:174 msgid "Install date" msgstr "Installatiedatum" -#: circuits/forms/bulk_edit.py:152 circuits/forms/filtersets.py:179 +#: netbox/circuits/forms/bulk_edit.py:152 +#: netbox/circuits/forms/filtersets.py:179 msgid "Termination date" msgstr "Beëindigingsdatum" -#: circuits/forms/bulk_edit.py:158 circuits/forms/filtersets.py:186 +#: netbox/circuits/forms/bulk_edit.py:158 +#: netbox/circuits/forms/filtersets.py:186 msgid "Commit rate (Kbps)" msgstr "Vastleggingssnelheid (Kbps)" -#: circuits/forms/bulk_edit.py:173 circuits/forms/model_forms.py:112 +#: netbox/circuits/forms/bulk_edit.py:173 +#: netbox/circuits/forms/model_forms.py:112 msgid "Service Parameters" msgstr "Serviceparameters" -#: circuits/forms/bulk_edit.py:174 circuits/forms/model_forms.py:113 -#: circuits/forms/model_forms.py:183 dcim/forms/model_forms.py:139 -#: dcim/forms/model_forms.py:181 dcim/forms/model_forms.py:266 -#: dcim/forms/model_forms.py:323 dcim/forms/model_forms.py:768 -#: dcim/forms/model_forms.py:1692 ipam/forms/model_forms.py:64 -#: ipam/forms/model_forms.py:81 ipam/forms/model_forms.py:115 -#: ipam/forms/model_forms.py:136 ipam/forms/model_forms.py:160 -#: ipam/forms/model_forms.py:232 ipam/forms/model_forms.py:261 -#: ipam/forms/model_forms.py:316 netbox/navigation/menu.py:24 -#: templates/dcim/device_edit.html:85 templates/dcim/htmx/cable_edit.html:72 -#: templates/ipam/ipaddress_bulk_add.html:27 templates/ipam/vlan_edit.html:22 -#: virtualization/forms/model_forms.py:80 -#: virtualization/forms/model_forms.py:222 vpn/forms/bulk_edit.py:78 -#: vpn/forms/filtersets.py:44 vpn/forms/model_forms.py:62 -#: vpn/forms/model_forms.py:147 vpn/forms/model_forms.py:411 -#: wireless/forms/model_forms.py:54 wireless/forms/model_forms.py:170 +#: 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/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/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 msgid "Tenancy" msgstr "Huurovereenkomst" -#: circuits/forms/bulk_edit.py:193 circuits/forms/bulk_edit.py:217 -#: circuits/forms/model_forms.py:155 circuits/tables/circuits.py:117 -#: templates/circuits/inc/circuit_termination_fields.html:62 -#: templates/circuits/providernetwork.html:17 +#: 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" -#: circuits/forms/bulk_edit.py:199 +#: netbox/circuits/forms/bulk_edit.py:199 msgid "Port speed (Kbps)" msgstr "Poortsnelheid (Kbps)" -#: circuits/forms/bulk_edit.py:203 +#: netbox/circuits/forms/bulk_edit.py:203 msgid "Upstream speed (Kbps)" msgstr "Upstreamsnelheid (Kbps)" -#: circuits/forms/bulk_edit.py:206 dcim/forms/bulk_edit.py:951 -#: dcim/forms/bulk_edit.py:1315 dcim/forms/bulk_edit.py:1332 -#: dcim/forms/bulk_edit.py:1349 dcim/forms/bulk_edit.py:1367 -#: dcim/forms/bulk_edit.py:1455 dcim/forms/bulk_edit.py:1594 -#: dcim/forms/bulk_edit.py:1611 +#: 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 msgid "Mark connected" msgstr "Markeren als verbonden" -#: circuits/forms/bulk_edit.py:219 circuits/forms/model_forms.py:157 -#: templates/circuits/inc/circuit_termination_fields.html:54 -#: templates/dcim/frontport.html:121 templates/dcim/interface.html:193 -#: templates/dcim/rearport.html:111 +#: netbox/circuits/forms/bulk_edit.py:219 +#: netbox/circuits/forms/model_forms.py:157 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:54 +#: netbox/templates/dcim/frontport.html:121 +#: netbox/templates/dcim/interface.html:193 +#: netbox/templates/dcim/rearport.html:111 msgid "Circuit Termination" msgstr "Circuitbeëindiging" -#: circuits/forms/bulk_edit.py:221 circuits/forms/model_forms.py:159 +#: netbox/circuits/forms/bulk_edit.py:221 +#: netbox/circuits/forms/model_forms.py:159 msgid "Termination Details" msgstr "Details van de beëindiging" -#: circuits/forms/bulk_edit.py:251 circuits/forms/filtersets.py:268 -#: circuits/tables/circuits.py:168 dcim/forms/model_forms.py:551 -#: templates/circuits/circuitgroupassignment.html:30 -#: templates/dcim/device.html:133 templates/dcim/virtualchassis.html:68 -#: templates/dcim/virtualchassis_edit.html:56 -#: templates/ipam/inc/panels/fhrp_groups.html:26 -#: tenancy/forms/bulk_edit.py:147 tenancy/forms/filtersets.py:110 +#: netbox/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/templates/dcim/device.html:133 +#: netbox/templates/dcim/virtualchassis.html:68 +#: netbox/templates/dcim/virtualchassis_edit.html:56 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:26 +#: netbox/tenancy/forms/bulk_edit.py:147 +#: netbox/tenancy/forms/filtersets.py:110 msgid "Priority" msgstr "Prioriteit" -#: circuits/forms/bulk_import.py:39 circuits/forms/bulk_import.py:54 -#: circuits/forms/bulk_import.py:77 +#: 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" -#: circuits/forms/bulk_import.py:83 +#: netbox/circuits/forms/bulk_import.py:83 msgid "Assigned provider account" msgstr "Toegewezen provideraccount" -#: circuits/forms/bulk_import.py:90 +#: netbox/circuits/forms/bulk_import.py:90 msgid "Type of circuit" msgstr "Soort circuit" -#: circuits/forms/bulk_import.py:95 dcim/forms/bulk_import.py:90 -#: dcim/forms/bulk_import.py:149 dcim/forms/bulk_import.py:250 -#: dcim/forms/bulk_import.py:507 dcim/forms/bulk_import.py:661 -#: dcim/forms/bulk_import.py:1373 ipam/forms/bulk_import.py:194 -#: ipam/forms/bulk_import.py:259 ipam/forms/bulk_import.py:295 -#: ipam/forms/bulk_import.py:452 virtualization/forms/bulk_import.py:56 -#: virtualization/forms/bulk_import.py:82 vpn/forms/bulk_import.py:39 -#: wireless/forms/bulk_import.py:45 +#: netbox/circuits/forms/bulk_import.py: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" -#: circuits/forms/bulk_import.py:102 circuits/forms/bulk_import.py:162 -#: dcim/forms/bulk_import.py:111 dcim/forms/bulk_import.py:156 -#: dcim/forms/bulk_import.py:338 dcim/forms/bulk_import.py:483 -#: dcim/forms/bulk_import.py:1223 dcim/forms/bulk_import.py:1368 -#: dcim/forms/bulk_import.py:1432 ipam/forms/bulk_import.py:42 -#: ipam/forms/bulk_import.py:71 ipam/forms/bulk_import.py:99 -#: ipam/forms/bulk_import.py:119 ipam/forms/bulk_import.py:139 -#: ipam/forms/bulk_import.py:168 ipam/forms/bulk_import.py:254 -#: ipam/forms/bulk_import.py:290 ipam/forms/bulk_import.py:447 -#: virtualization/forms/bulk_import.py:70 -#: virtualization/forms/bulk_import.py:119 vpn/forms/bulk_import.py:63 -#: wireless/forms/bulk_import.py:59 wireless/forms/bulk_import.py:101 +#: netbox/circuits/forms/bulk_import.py: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" -#: circuits/forms/bulk_import.py:120 -#: templates/circuits/inc/circuit_termination.html:6 -#: templates/circuits/inc/circuit_termination_fields.html:15 -#: templates/dcim/cable.html:68 templates/dcim/cable.html:72 -#: vpn/forms/bulk_import.py:100 vpn/forms/filtersets.py:77 +#: netbox/circuits/forms/bulk_import.py: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" -#: circuits/forms/bulk_import.py:130 circuits/forms/filtersets.py:147 -#: circuits/forms/filtersets.py:227 circuits/forms/model_forms.py:144 +#: 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 msgid "Provider network" msgstr "Netwerkprovider" -#: circuits/forms/filtersets.py:30 circuits/forms/filtersets.py:118 -#: circuits/forms/filtersets.py:200 dcim/forms/bulk_edit.py:338 -#: dcim/forms/bulk_edit.py:441 dcim/forms/bulk_edit.py:682 -#: dcim/forms/bulk_edit.py:729 dcim/forms/bulk_edit.py:882 -#: dcim/forms/bulk_import.py:235 dcim/forms/bulk_import.py:315 -#: dcim/forms/bulk_import.py:546 dcim/forms/bulk_import.py:1317 -#: dcim/forms/bulk_import.py:1351 dcim/forms/filtersets.py:95 -#: dcim/forms/filtersets.py:322 dcim/forms/filtersets.py:356 -#: dcim/forms/filtersets.py:396 dcim/forms/filtersets.py:447 -#: dcim/forms/filtersets.py:719 dcim/forms/filtersets.py:762 -#: dcim/forms/filtersets.py:977 dcim/forms/filtersets.py:1006 -#: dcim/forms/filtersets.py:1026 dcim/forms/filtersets.py:1090 -#: dcim/forms/filtersets.py:1120 dcim/forms/filtersets.py:1129 -#: dcim/forms/filtersets.py:1240 dcim/forms/filtersets.py:1264 -#: dcim/forms/filtersets.py:1289 dcim/forms/filtersets.py:1308 -#: dcim/forms/filtersets.py:1331 dcim/forms/filtersets.py:1442 -#: dcim/forms/filtersets.py:1466 dcim/forms/filtersets.py:1490 -#: dcim/forms/filtersets.py:1508 dcim/forms/filtersets.py:1525 -#: dcim/forms/model_forms.py:180 dcim/forms/model_forms.py:243 -#: dcim/forms/model_forms.py:468 dcim/forms/model_forms.py:728 -#: dcim/tables/devices.py:157 dcim/tables/power.py:30 dcim/tables/racks.py:118 -#: dcim/tables/racks.py:212 extras/filtersets.py:536 -#: extras/forms/filtersets.py:320 ipam/forms/filtersets.py:173 -#: ipam/forms/filtersets.py:414 ipam/forms/filtersets.py:437 -#: ipam/forms/filtersets.py:467 templates/dcim/device.html:26 -#: templates/dcim/device_edit.html:30 -#: templates/dcim/inc/cable_termination.html:12 -#: templates/dcim/location.html:26 templates/dcim/powerpanel.html:26 -#: templates/dcim/rack.html:24 templates/dcim/rackreservation.html:32 -#: virtualization/forms/filtersets.py:46 -#: virtualization/forms/filtersets.py:100 wireless/forms/model_forms.py:87 -#: wireless/forms/model_forms.py:129 +#: netbox/circuits/forms/filtersets.py: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/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 msgid "Location" msgstr "Locatie" -#: circuits/forms/filtersets.py:32 circuits/forms/filtersets.py:120 -#: dcim/forms/filtersets.py:144 dcim/forms/filtersets.py:158 -#: dcim/forms/filtersets.py:174 dcim/forms/filtersets.py:206 -#: dcim/forms/filtersets.py:328 dcim/forms/filtersets.py:400 -#: dcim/forms/filtersets.py:471 dcim/forms/filtersets.py:723 -#: dcim/forms/filtersets.py:1091 netbox/navigation/menu.py:31 -#: netbox/navigation/menu.py:33 tenancy/forms/filtersets.py:42 -#: tenancy/tables/columns.py:70 tenancy/tables/contacts.py:25 -#: tenancy/views.py:19 virtualization/forms/filtersets.py:37 -#: virtualization/forms/filtersets.py:48 -#: virtualization/forms/filtersets.py:106 +#: netbox/circuits/forms/filtersets.py: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/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/tables/contacts.py:25 netbox/tenancy/views.py:19 +#: netbox/virtualization/forms/filtersets.py:37 +#: netbox/virtualization/forms/filtersets.py:48 +#: netbox/virtualization/forms/filtersets.py:106 msgid "Contacts" msgstr "Contacten" -#: circuits/forms/filtersets.py:37 circuits/forms/filtersets.py:157 -#: dcim/forms/bulk_edit.py:112 dcim/forms/bulk_edit.py:313 -#: dcim/forms/bulk_edit.py:857 dcim/forms/bulk_import.py:93 -#: dcim/forms/filtersets.py:73 dcim/forms/filtersets.py:185 -#: dcim/forms/filtersets.py:211 dcim/forms/filtersets.py:334 -#: dcim/forms/filtersets.py:425 dcim/forms/filtersets.py:739 -#: dcim/forms/filtersets.py:983 dcim/forms/filtersets.py:1013 -#: dcim/forms/filtersets.py:1097 dcim/forms/filtersets.py:1136 -#: dcim/forms/filtersets.py:1576 dcim/forms/filtersets.py:1600 -#: dcim/forms/filtersets.py:1624 dcim/forms/model_forms.py:112 -#: dcim/forms/object_create.py:375 dcim/tables/devices.py:143 -#: dcim/tables/sites.py:85 extras/filtersets.py:503 -#: ipam/forms/bulk_edit.py:208 ipam/forms/bulk_edit.py:474 -#: ipam/forms/filtersets.py:217 ipam/forms/filtersets.py:422 -#: ipam/forms/filtersets.py:475 templates/dcim/device.html:18 -#: templates/dcim/rack.html:16 templates/dcim/rackreservation.html:22 -#: templates/dcim/region.html:26 templates/dcim/site.html:31 -#: templates/ipam/prefix.html:49 templates/ipam/vlan.html:16 -#: virtualization/forms/bulk_edit.py:81 virtualization/forms/filtersets.py:59 -#: virtualization/forms/filtersets.py:133 -#: virtualization/forms/model_forms.py:92 vpn/forms/filtersets.py:257 +#: netbox/circuits/forms/filtersets.py: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/templates/dcim/rackreservation.html:22 +#: netbox/templates/dcim/region.html:26 netbox/templates/dcim/site.html:31 +#: netbox/templates/ipam/prefix.html:49 netbox/templates/ipam/vlan.html:16 +#: netbox/virtualization/forms/bulk_edit.py:81 +#: netbox/virtualization/forms/filtersets.py:59 +#: netbox/virtualization/forms/filtersets.py:133 +#: netbox/virtualization/forms/model_forms.py:92 +#: netbox/vpn/forms/filtersets.py:257 msgid "Region" msgstr "Regio" -#: circuits/forms/filtersets.py:42 circuits/forms/filtersets.py:162 -#: dcim/forms/bulk_edit.py:321 dcim/forms/bulk_edit.py:865 -#: dcim/forms/filtersets.py:78 dcim/forms/filtersets.py:190 -#: dcim/forms/filtersets.py:216 dcim/forms/filtersets.py:347 -#: dcim/forms/filtersets.py:430 dcim/forms/filtersets.py:744 -#: dcim/forms/filtersets.py:988 dcim/forms/filtersets.py:1102 -#: dcim/forms/filtersets.py:1141 dcim/forms/object_create.py:383 -#: extras/filtersets.py:520 ipam/forms/bulk_edit.py:213 -#: ipam/forms/bulk_edit.py:479 ipam/forms/filtersets.py:222 -#: ipam/forms/filtersets.py:427 ipam/forms/filtersets.py:480 -#: virtualization/forms/bulk_edit.py:86 virtualization/forms/filtersets.py:69 -#: virtualization/forms/filtersets.py:138 -#: virtualization/forms/model_forms.py:98 +#: netbox/circuits/forms/filtersets.py: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/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 msgid "Site group" msgstr "Sitegroep" -#: circuits/forms/filtersets.py:65 circuits/forms/filtersets.py:83 -#: circuits/forms/filtersets.py:102 circuits/forms/filtersets.py:117 -#: core/forms/filtersets.py:67 core/forms/filtersets.py:135 -#: dcim/forms/bulk_edit.py:828 dcim/forms/filtersets.py:172 -#: dcim/forms/filtersets.py:204 dcim/forms/filtersets.py:915 -#: dcim/forms/filtersets.py:1007 dcim/forms/filtersets.py:1131 -#: dcim/forms/filtersets.py:1239 dcim/forms/filtersets.py:1263 -#: dcim/forms/filtersets.py:1288 dcim/forms/filtersets.py:1307 -#: dcim/forms/filtersets.py:1327 dcim/forms/filtersets.py:1441 -#: dcim/forms/filtersets.py:1465 dcim/forms/filtersets.py:1489 -#: dcim/forms/filtersets.py:1507 dcim/forms/filtersets.py:1523 -#: extras/forms/bulk_edit.py:90 extras/forms/filtersets.py:44 -#: extras/forms/filtersets.py:134 extras/forms/filtersets.py:165 -#: extras/forms/filtersets.py:205 extras/forms/filtersets.py:221 -#: extras/forms/filtersets.py:252 extras/forms/filtersets.py:276 -#: extras/forms/filtersets.py:441 ipam/forms/filtersets.py:99 -#: ipam/forms/filtersets.py:266 ipam/forms/filtersets.py:307 -#: ipam/forms/filtersets.py:382 ipam/forms/filtersets.py:468 -#: ipam/forms/filtersets.py:527 ipam/forms/filtersets.py:545 -#: netbox/tables/tables.py:256 virtualization/forms/filtersets.py:45 -#: virtualization/forms/filtersets.py:103 -#: virtualization/forms/filtersets.py:198 -#: virtualization/forms/filtersets.py:243 vpn/forms/filtersets.py:213 -#: wireless/forms/bulk_edit.py:150 wireless/forms/filtersets.py:34 -#: wireless/forms/filtersets.py:74 +#: 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" -#: circuits/forms/filtersets.py:73 circuits/tables/circuits.py:63 -#: circuits/tables/providers.py:66 templates/circuits/circuit.html:22 -#: templates/circuits/provideraccount.html:24 +#: netbox/circuits/forms/filtersets.py:73 +#: netbox/circuits/tables/circuits.py:63 +#: netbox/circuits/tables/providers.py:66 +#: netbox/templates/circuits/circuit.html:22 +#: netbox/templates/circuits/provideraccount.html:24 msgid "Account" msgstr "Account" -#: circuits/forms/filtersets.py:217 +#: netbox/circuits/forms/filtersets.py:217 msgid "Term Side" msgstr "Termzijde" -#: circuits/forms/filtersets.py:250 extras/forms/model_forms.py:582 -#: ipam/forms/filtersets.py:142 ipam/forms/filtersets.py:546 -#: ipam/forms/model_forms.py:323 templates/extras/configcontext.html:60 -#: templates/ipam/ipaddress.html:59 templates/ipam/vlan_edit.html:30 -#: tenancy/forms/filtersets.py:87 users/forms/model_forms.py:314 +#: 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/templates/extras/configcontext.html:60 +#: netbox/templates/ipam/ipaddress.html:59 +#: netbox/templates/ipam/vlan_edit.html:30 +#: netbox/tenancy/forms/filtersets.py:87 netbox/users/forms/model_forms.py:314 msgid "Assignment" msgstr "Opdracht" -#: circuits/forms/filtersets.py:265 circuits/forms/model_forms.py:195 -#: circuits/tables/circuits.py:155 dcim/forms/bulk_edit.py:117 -#: dcim/forms/bulk_import.py:100 dcim/forms/model_forms.py:117 -#: dcim/tables/sites.py:89 extras/forms/filtersets.py:480 -#: ipam/filtersets.py:999 ipam/forms/bulk_edit.py:493 -#: ipam/forms/bulk_import.py:436 ipam/forms/model_forms.py:528 -#: ipam/tables/fhrp.py:67 ipam/tables/vlans.py:122 ipam/tables/vlans.py:226 -#: templates/circuits/circuitgroupassignment.html:22 -#: templates/dcim/interface.html:284 templates/dcim/site.html:37 -#: templates/ipam/inc/panels/fhrp_groups.html:23 templates/ipam/vlan.html:27 -#: templates/tenancy/contact.html:21 templates/tenancy/tenant.html:20 -#: templates/users/group.html:6 templates/users/group.html:14 -#: templates/virtualization/cluster.html:29 templates/vpn/tunnel.html:29 -#: templates/wireless/wirelesslan.html:18 tenancy/forms/bulk_edit.py:43 -#: tenancy/forms/bulk_edit.py:94 tenancy/forms/bulk_import.py:40 -#: tenancy/forms/bulk_import.py:81 tenancy/forms/filtersets.py:48 -#: tenancy/forms/filtersets.py:78 tenancy/forms/filtersets.py:97 -#: tenancy/forms/model_forms.py:45 tenancy/forms/model_forms.py:97 -#: tenancy/forms/model_forms.py:122 tenancy/tables/contacts.py:60 -#: tenancy/tables/contacts.py:107 tenancy/tables/tenants.py:42 -#: users/filtersets.py:62 users/filtersets.py:185 users/forms/filtersets.py:31 -#: users/forms/filtersets.py:37 users/forms/filtersets.py:79 -#: virtualization/forms/bulk_edit.py:65 virtualization/forms/bulk_import.py:47 -#: virtualization/forms/filtersets.py:85 -#: virtualization/forms/model_forms.py:66 virtualization/tables/clusters.py:70 -#: vpn/forms/bulk_edit.py:112 vpn/forms/bulk_import.py:158 -#: vpn/forms/filtersets.py:116 vpn/tables/crypto.py:31 -#: vpn/tables/tunnels.py:44 wireless/forms/bulk_edit.py:48 -#: wireless/forms/bulk_import.py:36 wireless/forms/filtersets.py:46 -#: wireless/forms/model_forms.py:40 wireless/tables/wirelesslan.py:48 +#: netbox/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:999 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/templates/circuits/circuitgroupassignment.html:22 +#: netbox/templates/dcim/interface.html:284 netbox/templates/dcim/site.html:37 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:23 +#: netbox/templates/ipam/vlan.html:27 netbox/templates/tenancy/contact.html:21 +#: netbox/templates/tenancy/tenant.html:20 netbox/templates/users/group.html:6 +#: netbox/templates/users/group.html:14 +#: netbox/templates/virtualization/cluster.html:29 +#: netbox/templates/vpn/tunnel.html:29 +#: netbox/templates/wireless/wirelesslan.html:18 +#: netbox/tenancy/forms/bulk_edit.py:43 netbox/tenancy/forms/bulk_edit.py:94 +#: netbox/tenancy/forms/bulk_import.py:40 +#: netbox/tenancy/forms/bulk_import.py:81 +#: netbox/tenancy/forms/filtersets.py:48 netbox/tenancy/forms/filtersets.py:78 +#: netbox/tenancy/forms/filtersets.py:97 +#: netbox/tenancy/forms/model_forms.py:45 +#: netbox/tenancy/forms/model_forms.py:97 +#: netbox/tenancy/forms/model_forms.py:122 +#: netbox/tenancy/tables/contacts.py:60 netbox/tenancy/tables/contacts.py:107 +#: netbox/tenancy/tables/tenants.py:42 netbox/users/filtersets.py: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/tables/clusters.py:70 +#: netbox/vpn/forms/bulk_edit.py:112 netbox/vpn/forms/bulk_import.py:158 +#: netbox/vpn/forms/filtersets.py:116 netbox/vpn/tables/crypto.py:31 +#: netbox/vpn/tables/tunnels.py:44 netbox/wireless/forms/bulk_edit.py:48 +#: netbox/wireless/forms/bulk_import.py:36 +#: netbox/wireless/forms/filtersets.py:46 +#: netbox/wireless/forms/model_forms.py:40 +#: netbox/wireless/tables/wirelesslan.py:48 msgid "Group" msgstr "groep" -#: circuits/forms/model_forms.py:182 templates/circuits/circuitgroup.html:25 +#: netbox/circuits/forms/model_forms.py:182 +#: netbox/templates/circuits/circuitgroup.html:25 msgid "Circuit Group" msgstr "Circuitgroep" -#: circuits/models/circuits.py:27 dcim/models/cables.py:67 -#: dcim/models/device_component_templates.py:517 -#: dcim/models/device_component_templates.py:617 -#: dcim/models/device_components.py:975 dcim/models/device_components.py:1049 -#: dcim/models/device_components.py:1204 dcim/models/devices.py:479 -#: dcim/models/racks.py:224 extras/models/tags.py:28 +#: 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/extras/models/tags.py:28 msgid "color" msgstr "kleur" -#: circuits/models/circuits.py:36 +#: netbox/circuits/models/circuits.py:36 msgid "circuit type" msgstr "soort circuit" -#: circuits/models/circuits.py:37 +#: netbox/circuits/models/circuits.py:37 msgid "circuit types" msgstr "soorten circuits" -#: circuits/models/circuits.py:48 +#: netbox/circuits/models/circuits.py:48 msgid "circuit ID" msgstr "circuit-ID" -#: circuits/models/circuits.py:49 +#: netbox/circuits/models/circuits.py:49 msgid "Unique circuit ID" msgstr "Uniek circuit-ID" -#: circuits/models/circuits.py:69 core/models/data.py:52 -#: core/models/jobs.py:84 dcim/models/cables.py:49 dcim/models/devices.py:653 -#: dcim/models/devices.py:1173 dcim/models/devices.py:1399 -#: dcim/models/power.py:96 dcim/models/racks.py:297 dcim/models/sites.py:154 -#: dcim/models/sites.py:266 ipam/models/ip.py:253 ipam/models/ip.py:522 -#: ipam/models/ip.py:730 ipam/models/vlans.py:195 -#: virtualization/models/clusters.py:74 -#: virtualization/models/virtualmachines.py:84 vpn/models/tunnels.py:40 -#: wireless/models.py:95 wireless/models.py:159 +#: 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 msgid "status" msgstr "-status" -#: circuits/models/circuits.py:84 templates/core/plugin.html:20 +#: netbox/circuits/models/circuits.py:84 netbox/templates/core/plugin.html:20 msgid "installed" msgstr "geïnstalleerd" -#: circuits/models/circuits.py:89 +#: netbox/circuits/models/circuits.py:89 msgid "terminates" msgstr "beëindigt" -#: circuits/models/circuits.py:94 +#: netbox/circuits/models/circuits.py:94 msgid "commit rate (Kbps)" msgstr "Toewijzingssnelheid (Kbps)" -#: circuits/models/circuits.py:95 +#: netbox/circuits/models/circuits.py:95 msgid "Committed rate" msgstr "Toegewijde rente" -#: circuits/models/circuits.py:137 +#: netbox/circuits/models/circuits.py:137 msgid "circuit" msgstr "circuit" -#: circuits/models/circuits.py:138 +#: netbox/circuits/models/circuits.py:138 msgid "circuits" msgstr "circuits" -#: circuits/models/circuits.py:170 +#: netbox/circuits/models/circuits.py:170 msgid "circuit group" msgstr "circuitgroep" -#: circuits/models/circuits.py:171 +#: netbox/circuits/models/circuits.py:171 msgid "circuit groups" msgstr "circuitgroepen" -#: circuits/models/circuits.py:195 ipam/models/fhrp.py:93 -#: tenancy/models/contacts.py:134 +#: netbox/circuits/models/circuits.py:195 netbox/ipam/models/fhrp.py:93 +#: netbox/tenancy/models/contacts.py:134 msgid "priority" msgstr "prioriteit" -#: circuits/models/circuits.py:213 +#: netbox/circuits/models/circuits.py:213 msgid "Circuit group assignment" msgstr "Circuitgroepopdracht" -#: circuits/models/circuits.py:214 +#: netbox/circuits/models/circuits.py:214 msgid "Circuit group assignments" msgstr "Circuitgroeptoewijzingen" -#: circuits/models/circuits.py:240 +#: netbox/circuits/models/circuits.py:240 msgid "termination" msgstr "beëindiging" -#: circuits/models/circuits.py:257 +#: netbox/circuits/models/circuits.py:257 msgid "port speed (Kbps)" msgstr "poortsnelheid (Kbps)" -#: circuits/models/circuits.py:260 +#: netbox/circuits/models/circuits.py:260 msgid "Physical circuit speed" msgstr "Fysieke circuitsnelheid" -#: circuits/models/circuits.py:265 +#: netbox/circuits/models/circuits.py:265 msgid "upstream speed (Kbps)" msgstr "upstream snelheid (Kbps)" -#: circuits/models/circuits.py:266 +#: netbox/circuits/models/circuits.py:266 msgid "Upstream speed, if different from port speed" msgstr "Upstream snelheid, indien verschillend van de poortsnelheid" -#: circuits/models/circuits.py:271 +#: netbox/circuits/models/circuits.py:271 msgid "cross-connect ID" msgstr "ID voor kruisverbinding" -#: circuits/models/circuits.py:272 +#: netbox/circuits/models/circuits.py:272 msgid "ID of the local cross-connect" msgstr "ID van de lokale kruisverbinding" -#: circuits/models/circuits.py:277 +#: netbox/circuits/models/circuits.py:277 msgid "patch panel/port(s)" msgstr "patchpaneel/poort (en)" -#: circuits/models/circuits.py:278 +#: netbox/circuits/models/circuits.py:278 msgid "Patch panel ID and port number(s)" msgstr "ID en poortnummer(s) van het patchpaneel" -#: circuits/models/circuits.py:281 -#: dcim/models/device_component_templates.py:61 -#: dcim/models/device_components.py:68 dcim/models/racks.py:685 -#: extras/models/configs.py:45 extras/models/configs.py:219 -#: extras/models/customfields.py:125 extras/models/models.py:61 -#: extras/models/models.py:158 extras/models/models.py:396 -#: extras/models/models.py:511 extras/models/notifications.py:131 -#: extras/models/staging.py:31 extras/models/tags.py:32 -#: netbox/models/__init__.py:110 netbox/models/__init__.py:145 -#: netbox/models/__init__.py:191 users/models/permissions.py:24 -#: users/models/tokens.py:57 users/models/users.py:33 -#: virtualization/models/virtualmachines.py:289 +#: 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/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 msgid "description" msgstr "omschrijving" -#: circuits/models/circuits.py:294 +#: netbox/circuits/models/circuits.py:294 msgid "circuit termination" msgstr "beëindiging van het circuit" -#: circuits/models/circuits.py:295 +#: netbox/circuits/models/circuits.py:295 msgid "circuit terminations" msgstr "circuitafsluitingen" -#: circuits/models/circuits.py:308 +#: netbox/circuits/models/circuits.py:308 msgid "" "A circuit termination must attach to either a site or a provider network." msgstr "" "Een circuitafsluiting moet verbonden zijn met een site of een netwerk van " "een provider." -#: circuits/models/circuits.py:310 +#: netbox/circuits/models/circuits.py:310 msgid "" "A circuit termination cannot attach to both a site and a provider network." msgstr "" "Een circuitafsluiting kan niet worden aangesloten op zowel een site als een " "netwerk van een provider." -#: circuits/models/providers.py:22 circuits/models/providers.py:66 -#: circuits/models/providers.py:104 core/models/data.py:39 -#: core/models/jobs.py:45 dcim/models/device_component_templates.py:43 -#: dcim/models/device_components.py:53 dcim/models/devices.py:593 -#: dcim/models/devices.py:1330 dcim/models/devices.py:1395 -#: dcim/models/power.py:39 dcim/models/power.py:92 dcim/models/racks.py:262 -#: dcim/models/sites.py:138 extras/models/configs.py:36 -#: extras/models/configs.py:215 extras/models/customfields.py:92 -#: extras/models/models.py:56 extras/models/models.py:153 -#: extras/models/models.py:296 extras/models/models.py:392 -#: extras/models/models.py:501 extras/models/models.py:596 -#: extras/models/notifications.py:126 extras/models/scripts.py:30 -#: extras/models/staging.py:26 ipam/models/asns.py:18 ipam/models/fhrp.py:25 -#: ipam/models/services.py:52 ipam/models/services.py:88 -#: ipam/models/vlans.py:36 ipam/models/vlans.py:184 ipam/models/vrfs.py:22 -#: ipam/models/vrfs.py:79 netbox/models/__init__.py:137 -#: netbox/models/__init__.py:181 tenancy/models/contacts.py:64 -#: tenancy/models/tenants.py:20 tenancy/models/tenants.py:45 -#: users/models/permissions.py:20 users/models/users.py:28 -#: virtualization/models/clusters.py:57 -#: virtualization/models/virtualmachines.py:72 -#: virtualization/models/virtualmachines.py:279 vpn/models/crypto.py:24 -#: vpn/models/crypto.py:71 vpn/models/crypto.py:131 vpn/models/crypto.py:183 -#: vpn/models/crypto.py:221 vpn/models/l2vpn.py:22 vpn/models/tunnels.py:35 -#: wireless/models.py:51 +#: 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/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/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 msgid "name" msgstr "naam" -#: circuits/models/providers.py:25 +#: netbox/circuits/models/providers.py:25 msgid "Full name of the provider" msgstr "Volledige naam van de provider" -#: circuits/models/providers.py:28 dcim/models/devices.py:86 -#: dcim/models/racks.py:137 dcim/models/sites.py:149 -#: extras/models/models.py:506 ipam/models/asns.py:23 ipam/models/vlans.py:40 -#: netbox/models/__init__.py:141 netbox/models/__init__.py:186 -#: tenancy/models/tenants.py:25 tenancy/models/tenants.py:49 -#: vpn/models/l2vpn.py:27 wireless/models.py:56 +#: netbox/circuits/models/providers.py:28 netbox/dcim/models/devices.py:86 +#: 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 msgid "slug" msgstr "slug" -#: circuits/models/providers.py:42 +#: netbox/circuits/models/providers.py:42 msgid "provider" msgstr "provider" -#: circuits/models/providers.py:43 +#: netbox/circuits/models/providers.py:43 msgid "providers" msgstr "providers" -#: circuits/models/providers.py:63 +#: netbox/circuits/models/providers.py:63 msgid "account ID" msgstr "account-ID" -#: circuits/models/providers.py:86 +#: netbox/circuits/models/providers.py:86 msgid "provider account" msgstr "provideraccount" -#: circuits/models/providers.py:87 +#: netbox/circuits/models/providers.py:87 msgid "provider accounts" msgstr "provideraccounts" -#: circuits/models/providers.py:115 +#: netbox/circuits/models/providers.py:115 msgid "service ID" msgstr "service-ID" -#: circuits/models/providers.py:126 +#: netbox/circuits/models/providers.py:126 msgid "provider network" msgstr "netwerkprovider" -#: circuits/models/providers.py:127 +#: netbox/circuits/models/providers.py:127 msgid "provider networks" msgstr "providernetwerken" -#: circuits/tables/circuits.py:32 circuits/tables/circuits.py:132 -#: circuits/tables/providers.py:18 circuits/tables/providers.py:69 -#: circuits/tables/providers.py:99 core/tables/data.py:16 -#: core/tables/jobs.py:14 core/tables/plugins.py:44 core/tables/tasks.py:11 -#: core/tables/tasks.py:115 dcim/forms/filtersets.py:63 -#: dcim/forms/object_create.py:43 dcim/tables/devices.py:52 -#: dcim/tables/devices.py:92 dcim/tables/devices.py:134 -#: dcim/tables/devices.py:289 dcim/tables/devices.py:392 -#: dcim/tables/devices.py:433 dcim/tables/devices.py:482 -#: dcim/tables/devices.py:531 dcim/tables/devices.py:648 -#: dcim/tables/devices.py:731 dcim/tables/devices.py:778 -#: dcim/tables/devices.py:841 dcim/tables/devices.py:911 -#: dcim/tables/devices.py:974 dcim/tables/devices.py:994 -#: dcim/tables/devices.py:1023 dcim/tables/devices.py:1053 -#: dcim/tables/devicetypes.py:31 dcim/tables/power.py:22 -#: dcim/tables/power.py:62 dcim/tables/racks.py:24 dcim/tables/racks.py:113 -#: dcim/tables/sites.py:24 dcim/tables/sites.py:51 dcim/tables/sites.py:78 -#: dcim/tables/sites.py:130 extras/forms/filtersets.py:213 -#: extras/tables/tables.py:58 extras/tables/tables.py:122 -#: extras/tables/tables.py:155 extras/tables/tables.py:180 -#: extras/tables/tables.py:246 extras/tables/tables.py:361 -#: extras/tables/tables.py:378 extras/tables/tables.py:401 -#: extras/tables/tables.py:439 extras/tables/tables.py:491 -#: extras/tables/tables.py:514 ipam/forms/bulk_edit.py:407 -#: ipam/forms/filtersets.py:386 ipam/tables/asn.py:16 ipam/tables/ip.py:85 -#: ipam/tables/ip.py:160 ipam/tables/services.py:15 ipam/tables/services.py:40 -#: ipam/tables/vlans.py:64 ipam/tables/vlans.py:114 ipam/tables/vrfs.py:26 -#: ipam/tables/vrfs.py:68 templates/circuits/circuitgroup.html:28 -#: templates/circuits/circuittype.html:22 -#: templates/circuits/provideraccount.html:28 -#: templates/circuits/providernetwork.html:24 -#: templates/core/datasource.html:34 templates/core/job.html:44 -#: templates/core/plugin.html:54 templates/core/rq_worker.html:43 -#: templates/dcim/consoleport.html:28 templates/dcim/consoleserverport.html:28 -#: templates/dcim/devicebay.html:24 templates/dcim/devicerole.html:26 -#: templates/dcim/frontport.html:28 -#: templates/dcim/inc/interface_vlans_table.html:5 -#: templates/dcim/inc/panels/inventory_items.html:18 -#: templates/dcim/interface.html:38 templates/dcim/interface.html:165 -#: templates/dcim/inventoryitem.html:28 -#: templates/dcim/inventoryitemrole.html:18 templates/dcim/location.html:29 -#: templates/dcim/manufacturer.html:36 templates/dcim/modulebay.html:30 -#: templates/dcim/platform.html:29 templates/dcim/poweroutlet.html:28 -#: templates/dcim/powerport.html:28 templates/dcim/rackrole.html:22 -#: templates/dcim/rearport.html:28 templates/dcim/region.html:29 -#: templates/dcim/sitegroup.html:29 -#: templates/dcim/virtualdevicecontext.html:18 -#: templates/extras/configcontext.html:13 -#: templates/extras/configtemplate.html:13 -#: templates/extras/customfield.html:13 templates/extras/customlink.html:13 -#: templates/extras/eventrule.html:13 templates/extras/exporttemplate.html:15 -#: templates/extras/notificationgroup.html:14 -#: templates/extras/savedfilter.html:13 templates/extras/script_list.html:44 -#: templates/extras/tag.html:14 templates/extras/webhook.html:13 -#: templates/ipam/asnrange.html:15 templates/ipam/fhrpgroup.html:30 -#: templates/ipam/rir.html:22 templates/ipam/role.html:22 -#: templates/ipam/routetarget.html:13 templates/ipam/service.html:24 -#: templates/ipam/servicetemplate.html:15 templates/ipam/vlan.html:35 -#: templates/ipam/vlangroup.html:30 templates/tenancy/contact.html:25 -#: templates/tenancy/contactgroup.html:21 -#: templates/tenancy/contactrole.html:18 templates/tenancy/tenantgroup.html:29 -#: templates/users/group.html:17 templates/users/objectpermission.html:17 -#: templates/virtualization/cluster.html:13 -#: templates/virtualization/clustergroup.html:22 -#: templates/virtualization/clustertype.html:22 -#: templates/virtualization/virtualdisk.html:25 -#: templates/virtualization/virtualmachine.html:15 -#: templates/virtualization/vminterface.html:25 -#: templates/vpn/ikepolicy.html:13 templates/vpn/ikeproposal.html:13 -#: templates/vpn/ipsecpolicy.html:13 templates/vpn/ipsecprofile.html:13 -#: templates/vpn/ipsecprofile.html:36 templates/vpn/ipsecprofile.html:69 -#: templates/vpn/ipsecproposal.html:13 templates/vpn/l2vpn.html:14 -#: templates/vpn/tunnel.html:21 templates/vpn/tunnelgroup.html:26 -#: templates/wireless/wirelesslangroup.html:29 tenancy/tables/contacts.py:19 -#: tenancy/tables/contacts.py:41 tenancy/tables/contacts.py:56 -#: tenancy/tables/tenants.py:16 tenancy/tables/tenants.py:38 -#: users/tables.py:62 users/tables.py:76 -#: virtualization/forms/bulk_create.py:20 -#: virtualization/forms/object_create.py:13 -#: virtualization/forms/object_create.py:23 -#: virtualization/tables/clusters.py:17 virtualization/tables/clusters.py:39 -#: virtualization/tables/clusters.py:62 -#: virtualization/tables/virtualmachines.py:55 -#: virtualization/tables/virtualmachines.py:139 -#: virtualization/tables/virtualmachines.py:194 vpn/tables/crypto.py:18 -#: vpn/tables/crypto.py:57 vpn/tables/crypto.py:93 vpn/tables/crypto.py:129 -#: vpn/tables/crypto.py:158 vpn/tables/l2vpn.py:23 vpn/tables/tunnels.py:18 -#: vpn/tables/tunnels.py:40 wireless/tables/wirelesslan.py:18 -#: wireless/tables/wirelesslan.py:79 +#: netbox/circuits/tables/circuits.py:32 +#: netbox/circuits/tables/circuits.py:132 +#: netbox/circuits/tables/providers.py:18 +#: netbox/circuits/tables/providers.py:69 +#: netbox/circuits/tables/providers.py:99 netbox/core/tables/data.py:16 +#: netbox/core/tables/jobs.py:14 netbox/core/tables/plugins.py: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/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/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/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/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 +#: netbox/templates/dcim/consoleserverport.html:28 +#: netbox/templates/dcim/devicebay.html:24 +#: netbox/templates/dcim/devicerole.html:26 +#: netbox/templates/dcim/frontport.html:28 +#: netbox/templates/dcim/inc/interface_vlans_table.html:5 +#: netbox/templates/dcim/inc/panels/inventory_items.html:18 +#: netbox/templates/dcim/interface.html:38 +#: netbox/templates/dcim/interface.html:165 +#: netbox/templates/dcim/inventoryitem.html:28 +#: netbox/templates/dcim/inventoryitemrole.html:18 +#: netbox/templates/dcim/location.html:29 +#: netbox/templates/dcim/manufacturer.html:36 +#: netbox/templates/dcim/modulebay.html:30 +#: netbox/templates/dcim/platform.html:29 +#: netbox/templates/dcim/poweroutlet.html:28 +#: netbox/templates/dcim/powerport.html:28 +#: netbox/templates/dcim/rackrole.html:22 +#: netbox/templates/dcim/rearport.html:28 netbox/templates/dcim/region.html:29 +#: netbox/templates/dcim/sitegroup.html:29 +#: netbox/templates/dcim/virtualdevicecontext.html:18 +#: netbox/templates/extras/configcontext.html:13 +#: netbox/templates/extras/configtemplate.html:13 +#: netbox/templates/extras/customfield.html:13 +#: netbox/templates/extras/customlink.html:13 +#: netbox/templates/extras/eventrule.html:13 +#: netbox/templates/extras/exporttemplate.html:15 +#: netbox/templates/extras/notificationgroup.html:14 +#: netbox/templates/extras/savedfilter.html:13 +#: netbox/templates/extras/script_list.html:45 +#: netbox/templates/extras/tag.html:14 netbox/templates/extras/webhook.html:13 +#: netbox/templates/ipam/asnrange.html:15 +#: netbox/templates/ipam/fhrpgroup.html:30 netbox/templates/ipam/rir.html:22 +#: netbox/templates/ipam/role.html:22 +#: netbox/templates/ipam/routetarget.html:13 +#: netbox/templates/ipam/service.html:24 +#: netbox/templates/ipam/servicetemplate.html:15 +#: netbox/templates/ipam/vlan.html:35 netbox/templates/ipam/vlangroup.html:30 +#: netbox/templates/tenancy/contact.html:25 +#: netbox/templates/tenancy/contactgroup.html:21 +#: netbox/templates/tenancy/contactrole.html:18 +#: netbox/templates/tenancy/tenantgroup.html:29 +#: netbox/templates/users/group.html:17 +#: netbox/templates/users/objectpermission.html:17 +#: netbox/templates/virtualization/cluster.html:13 +#: netbox/templates/virtualization/clustergroup.html:22 +#: netbox/templates/virtualization/clustertype.html:22 +#: netbox/templates/virtualization/virtualdisk.html:25 +#: netbox/templates/virtualization/virtualmachine.html:15 +#: netbox/templates/virtualization/vminterface.html:25 +#: netbox/templates/vpn/ikepolicy.html:13 +#: netbox/templates/vpn/ikeproposal.html:13 +#: netbox/templates/vpn/ipsecpolicy.html:13 +#: netbox/templates/vpn/ipsecprofile.html:13 +#: netbox/templates/vpn/ipsecprofile.html:36 +#: netbox/templates/vpn/ipsecprofile.html:69 +#: netbox/templates/vpn/ipsecproposal.html:13 +#: netbox/templates/vpn/l2vpn.html:14 netbox/templates/vpn/tunnel.html:21 +#: netbox/templates/vpn/tunnelgroup.html:26 +#: netbox/templates/wireless/wirelesslangroup.html:29 +#: netbox/tenancy/tables/contacts.py:19 netbox/tenancy/tables/contacts.py:41 +#: netbox/tenancy/tables/contacts.py:56 netbox/tenancy/tables/tenants.py:16 +#: netbox/tenancy/tables/tenants.py:38 netbox/users/tables.py:62 +#: netbox/users/tables.py:76 netbox/virtualization/forms/bulk_create.py:20 +#: netbox/virtualization/forms/object_create.py:13 +#: netbox/virtualization/forms/object_create.py:23 +#: netbox/virtualization/tables/clusters.py:17 +#: netbox/virtualization/tables/clusters.py:39 +#: netbox/virtualization/tables/clusters.py:62 +#: netbox/virtualization/tables/virtualmachines.py:55 +#: netbox/virtualization/tables/virtualmachines.py:139 +#: netbox/virtualization/tables/virtualmachines.py:194 +#: netbox/vpn/tables/crypto.py:18 netbox/vpn/tables/crypto.py:57 +#: netbox/vpn/tables/crypto.py:93 netbox/vpn/tables/crypto.py:129 +#: netbox/vpn/tables/crypto.py:158 netbox/vpn/tables/l2vpn.py:23 +#: netbox/vpn/tables/tunnels.py:18 netbox/vpn/tables/tunnels.py:40 +#: netbox/wireless/tables/wirelesslan.py:18 +#: netbox/wireless/tables/wirelesslan.py:79 msgid "Name" msgstr "Naam" -#: circuits/tables/circuits.py:41 circuits/tables/circuits.py:138 -#: circuits/tables/providers.py:45 circuits/tables/providers.py:79 -#: netbox/navigation/menu.py:266 netbox/navigation/menu.py:270 -#: netbox/navigation/menu.py:272 templates/circuits/provider.html:57 -#: templates/circuits/provideraccount.html:44 -#: templates/circuits/providernetwork.html:50 +#: 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/templates/circuits/provider.html:57 +#: netbox/templates/circuits/provideraccount.html:44 +#: netbox/templates/circuits/providernetwork.html:50 msgid "Circuits" msgstr "Circuits" -#: circuits/tables/circuits.py:55 templates/circuits/circuit.html:26 +#: netbox/circuits/tables/circuits.py:55 +#: netbox/templates/circuits/circuit.html:26 msgid "Circuit ID" msgstr "Circuit-ID" -#: circuits/tables/circuits.py:69 wireless/forms/model_forms.py:160 +#: netbox/circuits/tables/circuits.py:69 +#: netbox/wireless/forms/model_forms.py:160 msgid "Side A" msgstr "Kant A" -#: circuits/tables/circuits.py:74 +#: netbox/circuits/tables/circuits.py:74 msgid "Side Z" msgstr "Kant Z" -#: circuits/tables/circuits.py:77 templates/circuits/circuit.html:55 +#: netbox/circuits/tables/circuits.py:77 +#: netbox/templates/circuits/circuit.html:55 msgid "Commit Rate" msgstr "Vastleggingspercentage" -#: circuits/tables/circuits.py:80 circuits/tables/providers.py:48 -#: circuits/tables/providers.py:82 circuits/tables/providers.py:107 -#: dcim/tables/devices.py:1036 dcim/tables/devicetypes.py:92 -#: dcim/tables/modules.py:29 dcim/tables/modules.py:72 dcim/tables/power.py:39 -#: dcim/tables/power.py:96 dcim/tables/racks.py:84 dcim/tables/racks.py:145 -#: dcim/tables/racks.py:225 dcim/tables/sites.py:108 -#: extras/tables/tables.py:582 ipam/tables/asn.py:69 ipam/tables/fhrp.py:34 -#: ipam/tables/ip.py:136 ipam/tables/ip.py:275 ipam/tables/ip.py:329 -#: ipam/tables/ip.py:397 ipam/tables/services.py:24 ipam/tables/services.py:54 -#: ipam/tables/vlans.py:145 ipam/tables/vrfs.py:47 ipam/tables/vrfs.py:72 -#: templates/dcim/htmx/cable_edit.html:89 templates/generic/bulk_edit.html:86 -#: templates/inc/panels/comments.html:5 tenancy/tables/contacts.py:68 -#: tenancy/tables/tenants.py:46 utilities/forms/fields/fields.py:29 -#: virtualization/tables/clusters.py:91 -#: virtualization/tables/virtualmachines.py:82 vpn/tables/crypto.py:37 -#: vpn/tables/crypto.py:74 vpn/tables/crypto.py:109 vpn/tables/crypto.py:140 -#: vpn/tables/crypto.py:173 vpn/tables/l2vpn.py:37 vpn/tables/tunnels.py:61 -#: wireless/tables/wirelesslan.py:27 wireless/tables/wirelesslan.py:58 +#: netbox/circuits/tables/circuits.py: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:72 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/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/vpn/tables/crypto.py:37 netbox/vpn/tables/crypto.py:74 +#: netbox/vpn/tables/crypto.py:109 netbox/vpn/tables/crypto.py:140 +#: netbox/vpn/tables/crypto.py:173 netbox/vpn/tables/l2vpn.py:37 +#: netbox/vpn/tables/tunnels.py:61 netbox/wireless/tables/wirelesslan.py:27 +#: netbox/wireless/tables/wirelesslan.py:58 msgid "Comments" msgstr "Opmerkingen" -#: circuits/tables/circuits.py:86 templates/tenancy/contact.html:84 -#: tenancy/tables/contacts.py:73 +#: netbox/circuits/tables/circuits.py:86 +#: netbox/templates/tenancy/contact.html:84 +#: netbox/tenancy/tables/contacts.py:73 msgid "Assignments" msgstr "Toewijzingen" -#: circuits/tables/providers.py:23 +#: netbox/circuits/tables/providers.py:23 msgid "Accounts" msgstr "Accounts" -#: circuits/tables/providers.py:29 +#: netbox/circuits/tables/providers.py:29 msgid "Account Count" msgstr "Aantal accounts" -#: circuits/tables/providers.py:39 dcim/tables/sites.py:100 +#: netbox/circuits/tables/providers.py:39 netbox/dcim/tables/sites.py:100 msgid "ASN Count" msgstr "Aantal ASN's" -#: circuits/views.py:331 +#: netbox/circuits/views.py:331 #, python-brace-format msgid "No terminations have been defined for circuit {circuit}." msgstr "Er zijn geen afsluitingen gedefinieerd voor het circuit {circuit}." -#: circuits/views.py:380 +#: netbox/circuits/views.py:380 #, python-brace-format msgid "Swapped terminations for circuit {circuit}." msgstr "Verwisselde aansluitingen voor het circuit {circuit}." -#: core/api/views.py:39 +#: netbox/core/api/views.py:39 msgid "This user does not have permission to synchronize this data source." msgstr "" "Deze gebruiker heeft geen toestemming om deze gegevensbron te " "synchroniseren." -#: core/choices.py:18 +#: netbox/core/choices.py:18 msgid "New" msgstr "Nieuw" -#: core/choices.py:19 core/constants.py:18 core/tables/tasks.py:15 -#: templates/core/rq_task.html:77 +#: netbox/core/choices.py:19 netbox/core/constants.py:18 +#: netbox/core/tables/tasks.py:15 netbox/templates/core/rq_task.html:77 msgid "Queued" msgstr "In de wachtrij" -#: core/choices.py:20 +#: netbox/core/choices.py:20 msgid "Syncing" msgstr "Synchroniseren" -#: core/choices.py:21 core/choices.py:57 core/tables/jobs.py:41 -#: templates/core/job.html:86 +#: netbox/core/choices.py:21 netbox/core/choices.py:57 +#: netbox/core/tables/jobs.py:41 netbox/templates/core/job.html:86 msgid "Completed" msgstr "Voltooid" -#: core/choices.py:22 core/choices.py:59 core/constants.py:20 -#: core/tables/tasks.py:34 dcim/choices.py:187 dcim/choices.py:239 -#: dcim/choices.py:1607 virtualization/choices.py:47 +#: netbox/core/choices.py:22 netbox/core/choices.py:59 +#: netbox/core/constants.py:20 netbox/core/tables/tasks.py:34 +#: netbox/dcim/choices.py:187 netbox/dcim/choices.py:239 +#: netbox/dcim/choices.py:1609 netbox/virtualization/choices.py:47 msgid "Failed" msgstr "Mislukt" -#: core/choices.py:35 netbox/navigation/menu.py:335 -#: netbox/navigation/menu.py:339 templates/extras/script/base.html:14 -#: templates/extras/script_list.html:7 templates/extras/script_list.html:12 -#: templates/extras/script_result.html:17 +#: netbox/core/choices.py:35 netbox/netbox/navigation/menu.py:335 +#: netbox/netbox/navigation/menu.py:339 +#: netbox/templates/extras/script/base.html:14 +#: netbox/templates/extras/script_list.html:7 +#: netbox/templates/extras/script_list.html:12 +#: netbox/templates/extras/script_result.html:17 msgid "Scripts" msgstr "Scripts" -#: core/choices.py:36 templates/extras/report/base.html:13 +#: netbox/core/choices.py:36 netbox/templates/extras/report/base.html:13 msgid "Reports" msgstr "Rapporten" -#: core/choices.py:54 +#: netbox/core/choices.py:54 msgid "Pending" msgstr "In afwachting" -#: core/choices.py:55 core/constants.py:23 core/tables/jobs.py:32 -#: core/tables/tasks.py:38 templates/core/job.html:73 +#: netbox/core/choices.py:55 netbox/core/constants.py:23 +#: netbox/core/tables/jobs.py:32 netbox/core/tables/tasks.py:38 +#: netbox/templates/core/job.html:73 msgid "Scheduled" msgstr "Gepland" -#: core/choices.py:56 +#: netbox/core/choices.py:56 msgid "Running" msgstr "Wordt uitgevoerd" -#: core/choices.py:58 +#: netbox/core/choices.py:58 msgid "Errored" msgstr "Fout" -#: core/choices.py:87 core/tables/plugins.py:63 -#: templates/generic/object.html:61 +#: netbox/core/choices.py:87 netbox/core/tables/plugins.py:63 +#: netbox/templates/generic/object.html:61 msgid "Updated" msgstr "Bijgewerkt" -#: core/choices.py:88 +#: netbox/core/choices.py:88 msgid "Deleted" msgstr "Verwijderd" -#: core/constants.py:19 core/tables/tasks.py:30 +#: netbox/core/constants.py:19 netbox/core/tables/tasks.py:30 msgid "Finished" msgstr "Klaar" -#: core/constants.py:21 core/tables/jobs.py:38 templates/core/job.html:82 -#: templates/extras/htmx/script_result.html:8 +#: netbox/core/constants.py:21 netbox/core/tables/jobs.py:38 +#: netbox/templates/core/job.html:82 +#: netbox/templates/extras/htmx/script_result.html:8 msgid "Started" msgstr "Gestart" -#: core/constants.py:22 core/tables/tasks.py:26 +#: netbox/core/constants.py:22 netbox/core/tables/tasks.py:26 msgid "Deferred" msgstr "Uitgesteld" -#: core/constants.py:24 +#: netbox/core/constants.py:24 msgid "Stopped" msgstr "Gestopt" -#: core/constants.py:25 +#: netbox/core/constants.py:25 msgid "Cancelled" msgstr "Geannuleerd" -#: core/data_backends.py:32 core/tables/plugins.py:51 -#: templates/core/plugin.html:88 templates/dcim/interface.html:216 +#: netbox/core/data_backends.py:32 netbox/core/tables/plugins.py:51 +#: netbox/templates/core/plugin.html:88 +#: netbox/templates/dcim/interface.html:216 msgid "Local" msgstr "Lokaal" -#: core/data_backends.py:50 core/tables/change_logging.py:20 -#: templates/account/profile.html:15 templates/users/user.html:17 -#: users/tables.py:31 +#: netbox/core/data_backends.py:50 netbox/core/tables/change_logging.py:20 +#: netbox/templates/account/profile.html:15 +#: netbox/templates/users/user.html:17 netbox/users/tables.py:31 msgid "Username" msgstr "Gebruikersnaam" -#: core/data_backends.py:52 core/data_backends.py:58 +#: netbox/core/data_backends.py:52 netbox/core/data_backends.py:58 msgid "Only used for cloning with HTTP(S)" msgstr "Alleen gebruikt voor klonen met HTTP(S)" -#: core/data_backends.py:56 templates/account/base.html:23 -#: templates/account/password.html:12 users/forms/model_forms.py:170 +#: netbox/core/data_backends.py:56 netbox/templates/account/base.html:23 +#: netbox/templates/account/password.html:12 +#: netbox/users/forms/model_forms.py:170 msgid "Password" msgstr "Wachtwoord" -#: core/data_backends.py:62 +#: netbox/core/data_backends.py:62 msgid "Branch" msgstr "Branch" -#: core/data_backends.py:120 +#: netbox/core/data_backends.py:120 #, python-brace-format msgid "Fetching remote data failed ({name}): {error}" msgstr "Het ophalen van externe gegevens is mislukt ({name}): {error}" -#: core/data_backends.py:133 +#: netbox/core/data_backends.py:133 msgid "AWS access key ID" msgstr "AWS-toegangssleutel-ID" -#: core/data_backends.py:137 +#: netbox/core/data_backends.py:137 msgid "AWS secret access key" msgstr "Geheime toegangssleutel van AWS" -#: core/events.py:27 +#: netbox/core/events.py:27 msgid "Object created" msgstr "Object aangemaakt" -#: core/events.py:28 +#: netbox/core/events.py:28 msgid "Object updated" msgstr "Object bijgewerkt" -#: core/events.py:29 +#: netbox/core/events.py:29 msgid "Object deleted" msgstr "Object verwijderd" -#: core/events.py:30 +#: netbox/core/events.py:30 msgid "Job started" msgstr "Opdracht gestart" -#: core/events.py:31 +#: netbox/core/events.py:31 msgid "Job completed" msgstr "Opdracht voltooid" -#: core/events.py:32 +#: netbox/core/events.py:32 msgid "Job failed" msgstr "Opdracht is mislukt" -#: core/events.py:33 +#: netbox/core/events.py:33 msgid "Job errored" msgstr "Taak is fout" -#: core/filtersets.py:53 extras/filtersets.py:250 extras/filtersets.py:633 -#: extras/filtersets.py:661 +#: netbox/core/filtersets.py:53 netbox/extras/filtersets.py:250 +#: netbox/extras/filtersets.py:633 netbox/extras/filtersets.py:661 msgid "Data source (ID)" msgstr "Gegevensbron (ID)" -#: core/filtersets.py:59 +#: netbox/core/filtersets.py:59 msgid "Data source (name)" msgstr "Gegevensbron (naam)" -#: core/filtersets.py:145 dcim/filtersets.py:501 extras/filtersets.py:287 -#: extras/filtersets.py:331 extras/filtersets.py:353 extras/filtersets.py:413 -#: users/filtersets.py:28 +#: netbox/core/filtersets.py:145 netbox/dcim/filtersets.py:501 +#: 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 msgid "User (ID)" msgstr "Gebruiker (ID)" -#: core/filtersets.py:151 +#: netbox/core/filtersets.py:151 msgid "User name" msgstr "Gebruikersnaam" -#: core/forms/bulk_edit.py:25 core/forms/filtersets.py:43 -#: core/tables/data.py:26 dcim/forms/bulk_edit.py:1122 -#: dcim/forms/bulk_edit.py:1400 dcim/forms/filtersets.py:1370 -#: dcim/tables/devices.py:553 dcim/tables/devicetypes.py:224 -#: extras/forms/bulk_edit.py:123 extras/forms/bulk_edit.py:187 -#: extras/forms/bulk_edit.py:246 extras/forms/filtersets.py:142 -#: extras/forms/filtersets.py:229 extras/forms/filtersets.py:294 -#: extras/tables/tables.py:162 extras/tables/tables.py:253 -#: extras/tables/tables.py:415 netbox/preferences.py:22 -#: templates/core/datasource.html:42 templates/dcim/interface.html:61 -#: templates/extras/customlink.html:17 templates/extras/eventrule.html:17 -#: templates/extras/savedfilter.html:25 -#: templates/users/objectpermission.html:25 -#: templates/virtualization/vminterface.html:29 users/forms/bulk_edit.py:89 -#: users/forms/filtersets.py:70 users/tables.py:83 -#: virtualization/forms/bulk_edit.py:217 -#: virtualization/forms/filtersets.py:215 +#: 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/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/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 +#: netbox/templates/dcim/interface.html:61 +#: netbox/templates/extras/customlink.html:17 +#: netbox/templates/extras/eventrule.html:17 +#: netbox/templates/extras/savedfilter.html:25 +#: netbox/templates/users/objectpermission.html:25 +#: netbox/templates/virtualization/vminterface.html:29 +#: netbox/users/forms/bulk_edit.py:89 netbox/users/forms/filtersets.py:70 +#: netbox/users/tables.py:83 netbox/virtualization/forms/bulk_edit.py:217 +#: netbox/virtualization/forms/filtersets.py:215 msgid "Enabled" msgstr "Ingeschakeld" -#: core/forms/bulk_edit.py:34 extras/forms/model_forms.py:285 -#: templates/extras/savedfilter.html:52 vpn/forms/filtersets.py:97 -#: vpn/forms/filtersets.py:127 vpn/forms/filtersets.py:151 -#: vpn/forms/filtersets.py:170 vpn/forms/model_forms.py:301 -#: vpn/forms/model_forms.py:321 vpn/forms/model_forms.py:337 -#: vpn/forms/model_forms.py:357 vpn/forms/model_forms.py:380 +#: netbox/core/forms/bulk_edit.py:34 netbox/extras/forms/model_forms.py:285 +#: 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 msgid "Parameters" msgstr "Parameters" -#: core/forms/bulk_edit.py:38 templates/core/datasource.html:68 +#: netbox/core/forms/bulk_edit.py:38 netbox/templates/core/datasource.html:68 msgid "Ignore rules" msgstr "Regels negeren" -#: core/forms/filtersets.py:30 core/forms/model_forms.py:97 -#: extras/forms/model_forms.py:248 extras/forms/model_forms.py:578 -#: extras/forms/model_forms.py:632 extras/tables/tables.py:191 -#: extras/tables/tables.py:483 extras/tables/tables.py:518 -#: templates/core/datasource.html:31 -#: templates/dcim/device/render_config.html:18 -#: templates/extras/configcontext.html:29 -#: templates/extras/configtemplate.html:21 -#: templates/extras/exporttemplate.html:35 -#: templates/virtualization/virtualmachine/render_config.html:18 +#: netbox/core/forms/filtersets.py: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/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 msgid "Data Source" msgstr "Gegevensbron" -#: core/forms/filtersets.py:55 core/forms/mixins.py:21 +#: netbox/core/forms/filtersets.py:55 netbox/core/forms/mixins.py:21 msgid "File" msgstr "Bestand" -#: core/forms/filtersets.py:60 core/forms/mixins.py:16 -#: extras/forms/filtersets.py:170 extras/forms/filtersets.py:328 -#: extras/forms/filtersets.py:413 +#: 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 msgid "Data source" msgstr "Gegevensbron" -#: core/forms/filtersets.py:70 extras/forms/filtersets.py:440 +#: netbox/core/forms/filtersets.py:70 netbox/extras/forms/filtersets.py:440 msgid "Creation" msgstr "Aangemaakt" -#: core/forms/filtersets.py:74 core/forms/filtersets.py:160 -#: extras/forms/filtersets.py:461 extras/tables/tables.py:220 -#: extras/tables/tables.py:294 extras/tables/tables.py:326 -#: extras/tables/tables.py:571 templates/core/job.html:38 -#: templates/core/objectchange.html:52 tenancy/tables/contacts.py:90 -#: vpn/tables/l2vpn.py:59 +#: 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/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 +#: netbox/tenancy/tables/contacts.py:90 netbox/vpn/tables/l2vpn.py:59 msgid "Object Type" msgstr "Soort object" -#: core/forms/filtersets.py:84 +#: netbox/core/forms/filtersets.py:84 msgid "Created after" msgstr "Aangemaakt na" -#: core/forms/filtersets.py:89 +#: netbox/core/forms/filtersets.py:89 msgid "Created before" msgstr "Eerder gemaakt" -#: core/forms/filtersets.py:94 +#: netbox/core/forms/filtersets.py:94 msgid "Scheduled after" msgstr "Daarna gepland" -#: core/forms/filtersets.py:99 +#: netbox/core/forms/filtersets.py:99 msgid "Scheduled before" msgstr "Eerder gepland" -#: core/forms/filtersets.py:104 +#: netbox/core/forms/filtersets.py:104 msgid "Started after" msgstr "Begonnen na" -#: core/forms/filtersets.py:109 +#: netbox/core/forms/filtersets.py:109 msgid "Started before" msgstr "Eerder begonnen" -#: core/forms/filtersets.py:114 +#: netbox/core/forms/filtersets.py:114 msgid "Completed after" msgstr "Voltooid na" -#: core/forms/filtersets.py:119 +#: netbox/core/forms/filtersets.py:119 msgid "Completed before" msgstr "Eerder voltooid" -#: core/forms/filtersets.py:126 core/forms/filtersets.py:155 -#: dcim/forms/bulk_edit.py:456 dcim/forms/filtersets.py:418 -#: dcim/forms/filtersets.py:462 dcim/forms/model_forms.py:316 -#: extras/forms/filtersets.py:456 extras/forms/filtersets.py:475 -#: extras/tables/tables.py:302 extras/tables/tables.py:342 -#: templates/core/objectchange.html:36 templates/dcim/rackreservation.html:58 -#: templates/extras/savedfilter.html:21 templates/inc/user_menu.html:33 -#: templates/users/token.html:21 templates/users/user.html:6 -#: templates/users/user.html:14 users/filtersets.py:107 -#: users/filtersets.py:174 users/forms/filtersets.py:84 -#: users/forms/filtersets.py:125 users/forms/model_forms.py:155 -#: users/forms/model_forms.py:192 users/tables.py:19 +#: 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/extras/tables/tables.py:302 netbox/extras/tables/tables.py:342 +#: netbox/templates/core/objectchange.html:36 +#: netbox/templates/dcim/rackreservation.html:58 +#: netbox/templates/extras/savedfilter.html:21 +#: netbox/templates/inc/user_menu.html:33 netbox/templates/users/token.html:21 +#: netbox/templates/users/user.html:6 netbox/templates/users/user.html:14 +#: netbox/users/filtersets.py:107 netbox/users/filtersets.py:174 +#: netbox/users/forms/filtersets.py:84 netbox/users/forms/filtersets.py:125 +#: netbox/users/forms/model_forms.py:155 netbox/users/forms/model_forms.py:192 +#: netbox/users/tables.py:19 msgid "User" msgstr "Gebruiker" -#: core/forms/filtersets.py:134 core/tables/change_logging.py:15 -#: extras/tables/tables.py:609 extras/tables/tables.py:646 -#: templates/core/objectchange.html:32 +#: netbox/core/forms/filtersets.py:134 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" -#: core/forms/filtersets.py:139 extras/forms/filtersets.py:445 +#: netbox/core/forms/filtersets.py:139 netbox/extras/forms/filtersets.py:445 msgid "After" msgstr "Na" -#: core/forms/filtersets.py:144 extras/forms/filtersets.py:450 +#: netbox/core/forms/filtersets.py:144 netbox/extras/forms/filtersets.py:450 msgid "Before" msgstr "Voordien" -#: core/forms/filtersets.py:148 core/tables/change_logging.py:29 -#: extras/forms/model_forms.py:396 templates/core/objectchange.html:46 -#: templates/extras/eventrule.html:71 +#: netbox/core/forms/filtersets.py:148 netbox/core/tables/change_logging.py:29 +#: netbox/extras/forms/model_forms.py:396 +#: netbox/templates/core/objectchange.html:46 +#: netbox/templates/extras/eventrule.html:71 msgid "Action" msgstr "Actie" -#: core/forms/model_forms.py:54 core/tables/data.py:46 -#: templates/core/datafile.html:27 templates/extras/report/base.html:33 -#: templates/extras/script/base.html:32 +#: netbox/core/forms/model_forms.py:54 netbox/core/tables/data.py:46 +#: netbox/templates/core/datafile.html:27 +#: netbox/templates/extras/report/base.html:33 +#: netbox/templates/extras/script/base.html:32 msgid "Source" msgstr "Bron" -#: core/forms/model_forms.py:58 +#: netbox/core/forms/model_forms.py:58 msgid "Backend Parameters" msgstr "Parameters van de backend" -#: core/forms/model_forms.py:96 +#: netbox/core/forms/model_forms.py:96 msgid "File Upload" msgstr "Uploaden van bestanden" -#: core/forms/model_forms.py:108 +#: netbox/core/forms/model_forms.py:108 msgid "Cannot upload a file and sync from an existing file" msgstr "" "Kan een bestand niet uploaden en synchroniseren vanuit een bestaand bestand" -#: core/forms/model_forms.py:110 +#: netbox/core/forms/model_forms.py:110 msgid "Must upload a file or select a data file to sync" msgstr "" "Moet een bestand uploaden of een gegevensbestand selecteren om te " "synchroniseren" -#: core/forms/model_forms.py:153 templates/dcim/rack_elevation_list.html:6 +#: netbox/core/forms/model_forms.py:153 +#: netbox/templates/dcim/rack_elevation_list.html:6 msgid "Rack Elevations" msgstr "Rackverhogingen" -#: core/forms/model_forms.py:157 dcim/choices.py:1518 -#: dcim/forms/bulk_edit.py:969 dcim/forms/bulk_edit.py:1357 -#: dcim/forms/bulk_edit.py:1375 dcim/tables/racks.py:158 -#: netbox/navigation/menu.py:291 netbox/navigation/menu.py:295 +#: 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 msgid "Power" msgstr "Stroom" -#: core/forms/model_forms.py:159 netbox/navigation/menu.py:154 -#: templates/core/inc/config_data.html:37 +#: netbox/core/forms/model_forms.py:159 netbox/netbox/navigation/menu.py:154 +#: netbox/templates/core/inc/config_data.html:37 msgid "IPAM" msgstr "IPAM" -#: core/forms/model_forms.py:160 netbox/navigation/menu.py:230 -#: templates/core/inc/config_data.html:50 vpn/forms/bulk_edit.py:77 -#: vpn/forms/filtersets.py:43 vpn/forms/model_forms.py:61 -#: vpn/forms/model_forms.py:146 +#: netbox/core/forms/model_forms.py:160 netbox/netbox/navigation/menu.py:230 +#: netbox/templates/core/inc/config_data.html:50 +#: netbox/vpn/forms/bulk_edit.py:77 netbox/vpn/forms/filtersets.py:43 +#: netbox/vpn/forms/model_forms.py:61 netbox/vpn/forms/model_forms.py:146 msgid "Security" msgstr "Beveiliging" -#: core/forms/model_forms.py:161 templates/core/inc/config_data.html:59 +#: netbox/core/forms/model_forms.py:161 +#: netbox/templates/core/inc/config_data.html:59 msgid "Banners" msgstr "Banners" -#: core/forms/model_forms.py:162 templates/core/inc/config_data.html:80 +#: netbox/core/forms/model_forms.py:162 +#: netbox/templates/core/inc/config_data.html:80 msgid "Pagination" msgstr "Paginering" -#: core/forms/model_forms.py:163 extras/forms/bulk_edit.py:92 -#: extras/forms/filtersets.py:47 extras/forms/model_forms.py:116 -#: extras/forms/model_forms.py:129 templates/core/inc/config_data.html:93 +#: 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/model_forms.py:129 +#: netbox/templates/core/inc/config_data.html:93 msgid "Validation" msgstr "Validatie" -#: core/forms/model_forms.py:164 templates/account/preferences.html:6 +#: netbox/core/forms/model_forms.py:164 +#: netbox/templates/account/preferences.html:6 msgid "User Preferences" msgstr "Gebruikersvoorkeuren" -#: core/forms/model_forms.py:167 dcim/forms/filtersets.py:732 -#: templates/core/inc/config_data.html:127 users/forms/model_forms.py:64 +#: netbox/core/forms/model_forms.py:167 netbox/dcim/forms/filtersets.py:732 +#: netbox/templates/core/inc/config_data.html:127 +#: netbox/users/forms/model_forms.py:64 msgid "Miscellaneous" msgstr "Diversen" -#: core/forms/model_forms.py:169 +#: netbox/core/forms/model_forms.py:169 msgid "Config Revision" msgstr "Revisie van de configuratie" -#: core/forms/model_forms.py:208 +#: netbox/core/forms/model_forms.py:208 msgid "This parameter has been defined statically and cannot be modified." msgstr "Deze parameter is statisch gedefinieerd en kan niet worden gewijzigd." -#: core/forms/model_forms.py:216 +#: netbox/core/forms/model_forms.py:216 #, python-brace-format msgid "Current value: {value}" msgstr "Huidige waarde: {value}" -#: core/forms/model_forms.py:218 +#: netbox/core/forms/model_forms.py:218 msgid " (default)" msgstr " (standaard)" -#: core/models/change_logging.py:29 +#: netbox/core/models/change_logging.py:29 msgid "time" msgstr "tijd" -#: core/models/change_logging.py:42 +#: netbox/core/models/change_logging.py:42 msgid "user name" msgstr "gebruikersnaam" -#: core/models/change_logging.py:47 +#: netbox/core/models/change_logging.py:47 msgid "request ID" msgstr "verzoek-ID" -#: core/models/change_logging.py:52 extras/models/staging.py:69 +#: netbox/core/models/change_logging.py:52 netbox/extras/models/staging.py:69 msgid "action" msgstr "daad" -#: core/models/change_logging.py:86 +#: netbox/core/models/change_logging.py:86 msgid "pre-change data" msgstr "gegevens vóór de wijziging" -#: core/models/change_logging.py:92 +#: netbox/core/models/change_logging.py:92 msgid "post-change data" msgstr "gegevens na de wijziging" -#: core/models/change_logging.py:106 +#: netbox/core/models/change_logging.py:106 msgid "object change" msgstr "wijziging van het object" -#: core/models/change_logging.py:107 +#: netbox/core/models/change_logging.py:107 msgid "object changes" msgstr "wijzigingen in het object" -#: core/models/change_logging.py:123 +#: netbox/core/models/change_logging.py:123 #, python-brace-format msgid "Change logging is not supported for this object type ({type})." msgstr "" "Logboekregistratie van wijzigingen wordt niet ondersteund voor dit " "objecttype ({type})." -#: core/models/config.py:18 core/models/data.py:266 core/models/files.py:27 -#: core/models/jobs.py:49 extras/models/models.py:730 -#: extras/models/notifications.py:39 extras/models/notifications.py:186 -#: netbox/models/features.py:53 users/models/tokens.py:32 +#: netbox/core/models/config.py:18 netbox/core/models/data.py:266 +#: 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/notifications.py:186 +#: netbox/netbox/models/features.py:53 netbox/users/models/tokens.py:32 msgid "created" msgstr "aangemaakt" -#: core/models/config.py:22 +#: netbox/core/models/config.py:22 msgid "comment" msgstr "commentaar" -#: core/models/config.py:29 +#: netbox/core/models/config.py:29 msgid "configuration data" msgstr "configuratiegegevens" -#: core/models/config.py:36 +#: netbox/core/models/config.py:36 msgid "config revision" msgstr "revisie van de configuratie" -#: core/models/config.py:37 +#: netbox/core/models/config.py:37 msgid "config revisions" msgstr "revisies van de configuratie" -#: core/models/config.py:41 +#: netbox/core/models/config.py:41 msgid "Default configuration" msgstr "Standaardconfiguratie" -#: core/models/config.py:43 +#: netbox/core/models/config.py:43 msgid "Current configuration" msgstr "Huidige configuratie" -#: core/models/config.py:44 +#: netbox/core/models/config.py:44 #, python-brace-format msgid "Config revision #{id}" msgstr "Revisie van de configuratie #{id}" -#: core/models/data.py:44 dcim/models/cables.py:43 -#: dcim/models/device_component_templates.py:203 -#: dcim/models/device_component_templates.py:237 -#: dcim/models/device_component_templates.py:272 -#: dcim/models/device_component_templates.py:334 -#: dcim/models/device_component_templates.py:413 -#: dcim/models/device_component_templates.py:512 -#: dcim/models/device_component_templates.py:612 -#: dcim/models/device_components.py:283 dcim/models/device_components.py:312 -#: dcim/models/device_components.py:345 dcim/models/device_components.py:463 -#: dcim/models/device_components.py:605 dcim/models/device_components.py:970 -#: dcim/models/device_components.py:1044 dcim/models/power.py:102 -#: extras/models/customfields.py:78 extras/models/search.py:41 -#: virtualization/models/clusters.py:61 vpn/models/l2vpn.py:32 +#: 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/extras/models/search.py:41 +#: netbox/virtualization/models/clusters.py:61 netbox/vpn/models/l2vpn.py:32 msgid "type" msgstr "type" -#: core/models/data.py:49 extras/choices.py:37 extras/models/models.py:164 -#: extras/tables/tables.py:656 templates/core/datasource.html:58 -#: templates/core/plugin.html:66 +#: netbox/core/models/data.py:49 netbox/extras/choices.py:37 +#: netbox/extras/models/models.py:164 netbox/extras/tables/tables.py:656 +#: netbox/templates/core/datasource.html:58 +#: netbox/templates/core/plugin.html:66 msgid "URL" msgstr "URL" -#: core/models/data.py:59 dcim/models/device_component_templates.py:418 -#: dcim/models/device_components.py:512 extras/models/models.py:70 -#: extras/models/models.py:301 extras/models/models.py:526 -#: users/models/permissions.py:29 +#: netbox/core/models/data.py:59 +#: netbox/dcim/models/device_component_templates.py:418 +#: netbox/dcim/models/device_components.py:512 +#: 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" msgstr "ingeschakeld" -#: core/models/data.py:63 +#: netbox/core/models/data.py:63 msgid "ignore rules" msgstr "negeer regels" -#: core/models/data.py:65 +#: netbox/core/models/data.py:65 msgid "Patterns (one per line) matching files to ignore when syncing" msgstr "" "Patronen (één per regel) die overeenkomen met bestanden om te negeren " "tijdens het synchroniseren" -#: core/models/data.py:68 extras/models/models.py:534 +#: netbox/core/models/data.py:68 netbox/extras/models/models.py:534 msgid "parameters" msgstr "parameters" -#: core/models/data.py:73 +#: netbox/core/models/data.py:73 msgid "last synced" msgstr "laatst gesynchroniseerd" -#: core/models/data.py:81 +#: netbox/core/models/data.py:81 msgid "data source" msgstr "gegevensbron" -#: core/models/data.py:82 +#: netbox/core/models/data.py:82 msgid "data sources" msgstr "gegevensbronnen" -#: core/models/data.py:122 +#: netbox/core/models/data.py:122 #, python-brace-format msgid "Unknown backend type: {type}" msgstr "Onbekend backend-type: {type}" -#: core/models/data.py:164 +#: netbox/core/models/data.py:164 msgid "Cannot initiate sync; syncing already in progress." msgstr "Kan de synchronisatie niet starten; de synchronisatie is al bezig." -#: core/models/data.py:177 +#: netbox/core/models/data.py:177 msgid "" "There was an error initializing the backend. A dependency needs to be " "installed: " @@ -1903,1224 +2171,1286 @@ msgstr "" "Er is een fout opgetreden bij het initialiseren van de backend. Er moet een " "afhankelijkheid worden geïnstalleerd: " -#: core/models/data.py:270 core/models/files.py:31 -#: netbox/models/features.py:59 +#: netbox/core/models/data.py:270 netbox/core/models/files.py:31 +#: netbox/netbox/models/features.py:59 msgid "last updated" msgstr "laatst bijgewerkt" -#: core/models/data.py:280 dcim/models/cables.py:444 +#: netbox/core/models/data.py:280 netbox/dcim/models/cables.py:444 msgid "path" msgstr "pad" -#: core/models/data.py:283 +#: netbox/core/models/data.py:283 msgid "File path relative to the data source's root" msgstr "Bestandspad relatief ten opzichte van de hoofdmap van de gegevensbron" -#: core/models/data.py:287 ipam/models/ip.py:503 +#: netbox/core/models/data.py:287 netbox/ipam/models/ip.py:503 msgid "size" msgstr "grootte" -#: core/models/data.py:290 +#: netbox/core/models/data.py:290 msgid "hash" msgstr "hash" -#: core/models/data.py:294 +#: netbox/core/models/data.py:294 msgid "Length must be 64 hexadecimal characters." msgstr "De lengte moet 64 hexadecimale tekens zijn." -#: core/models/data.py:296 +#: netbox/core/models/data.py:296 msgid "SHA256 hash of the file data" msgstr "SHA256-hash van de bestandsgegevens" -#: core/models/data.py:313 +#: netbox/core/models/data.py:313 msgid "data file" msgstr "gegevensbestand" -#: core/models/data.py:314 +#: netbox/core/models/data.py:314 msgid "data files" msgstr "gegevensbestanden" -#: core/models/data.py:401 +#: netbox/core/models/data.py:401 msgid "auto sync record" msgstr "opname automatisch synchroniseren" -#: core/models/data.py:402 +#: netbox/core/models/data.py:402 msgid "auto sync records" msgstr "records automatisch synchroniseren" -#: core/models/files.py:37 +#: netbox/core/models/files.py:37 msgid "file root" msgstr "root van het bestand" -#: core/models/files.py:42 +#: netbox/core/models/files.py:42 msgid "file path" msgstr "bestandspad" -#: core/models/files.py:44 +#: netbox/core/models/files.py:44 msgid "File path relative to the designated root path" msgstr "Bestandspad relatief ten opzichte van het aangewezen hoofdpad" -#: core/models/files.py:61 +#: netbox/core/models/files.py:61 msgid "managed file" msgstr "beheerd bestand" -#: core/models/files.py:62 +#: netbox/core/models/files.py:62 msgid "managed files" msgstr "beheerde bestanden" -#: core/models/jobs.py:53 +#: netbox/core/models/jobs.py:54 msgid "scheduled" msgstr "gepland" -#: core/models/jobs.py:58 +#: netbox/core/models/jobs.py:59 msgid "interval" msgstr "interval" -#: core/models/jobs.py:64 +#: netbox/core/models/jobs.py:65 msgid "Recurrence interval (in minutes)" msgstr "Herhalingsinterval (in minuten)" -#: core/models/jobs.py:67 +#: netbox/core/models/jobs.py:68 msgid "started" msgstr "gestart" -#: core/models/jobs.py:72 +#: netbox/core/models/jobs.py:73 msgid "completed" msgstr "voltooid" -#: core/models/jobs.py:90 extras/models/models.py:101 -#: extras/models/staging.py:87 +#: netbox/core/models/jobs.py:91 netbox/extras/models/models.py:101 +#: netbox/extras/models/staging.py:87 msgid "data" msgstr "gegevens" -#: core/models/jobs.py:95 +#: netbox/core/models/jobs.py:96 msgid "error" msgstr "fout" -#: core/models/jobs.py:100 +#: netbox/core/models/jobs.py:101 msgid "job ID" msgstr "taak-ID" -#: core/models/jobs.py:111 +#: netbox/core/models/jobs.py:112 msgid "job" msgstr "taak" -#: core/models/jobs.py:112 +#: netbox/core/models/jobs.py:113 msgid "jobs" msgstr "taken" -#: core/models/jobs.py:135 +#: netbox/core/models/jobs.py:136 #, python-brace-format msgid "Jobs cannot be assigned to this object type ({type})." msgstr "Taken kunnen niet worden toegewezen aan dit objecttype ({type})." -#: core/models/jobs.py:185 +#: netbox/core/models/jobs.py:190 #, python-brace-format msgid "Invalid status for job termination. Choices are: {choices}" msgstr "" "Ongeldige status voor beëindiging van het dienstverband. De keuzes zijn: " "{choices}" -#: core/models/jobs.py:216 +#: netbox/core/models/jobs.py:221 msgid "" "enqueue() cannot be called with values for both schedule_at and immediate." msgstr "" "enqueue () kan niet worden aangeroepen met waarden voor zowel schedule_at " "als immediate." -#: core/signals.py:126 +#: netbox/core/signals.py:126 #, python-brace-format msgid "Deletion is prevented by a protection rule: {message}" msgstr "Verwijdering wordt voorkomen door een beschermingsregel: {message}" -#: core/tables/change_logging.py:25 templates/account/profile.html:19 -#: templates/users/user.html:21 +#: netbox/core/tables/change_logging.py:25 +#: netbox/templates/account/profile.html:19 +#: netbox/templates/users/user.html:21 msgid "Full Name" msgstr "Volledige naam" -#: core/tables/change_logging.py:37 core/tables/jobs.py:21 -#: extras/choices.py:41 extras/tables/tables.py:279 -#: extras/tables/tables.py:297 extras/tables/tables.py:329 -#: extras/tables/tables.py:409 extras/tables/tables.py:470 -#: extras/tables/tables.py:576 extras/tables/tables.py:616 -#: extras/tables/tables.py:653 netbox/tables/tables.py:244 -#: templates/core/objectchange.html:58 templates/extras/eventrule.html:78 -#: templates/extras/journalentry.html:18 tenancy/tables/contacts.py:93 -#: vpn/tables/l2vpn.py:64 +#: netbox/core/tables/change_logging.py:37 netbox/core/tables/jobs.py:21 +#: netbox/extras/choices.py:41 netbox/extras/tables/tables.py:279 +#: 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/templates/core/objectchange.html:58 +#: netbox/templates/extras/eventrule.html:78 +#: netbox/templates/extras/journalentry.html:18 +#: netbox/tenancy/tables/contacts.py:93 netbox/vpn/tables/l2vpn.py:64 msgid "Object" msgstr "Object" -#: core/tables/change_logging.py:42 templates/core/objectchange.html:68 +#: netbox/core/tables/change_logging.py:42 +#: netbox/templates/core/objectchange.html:68 msgid "Request ID" msgstr "ID aanvragen" -#: core/tables/config.py:21 users/forms/filtersets.py:44 users/tables.py:39 +#: netbox/core/tables/config.py:21 netbox/users/forms/filtersets.py:44 +#: netbox/users/tables.py:39 msgid "Is Active" msgstr "Is actief" -#: core/tables/data.py:50 templates/core/datafile.html:31 +#: netbox/core/tables/data.py:50 netbox/templates/core/datafile.html:31 msgid "Path" msgstr "Pad" -#: core/tables/data.py:54 templates/extras/inc/result_pending.html:7 +#: netbox/core/tables/data.py:54 +#: netbox/templates/extras/inc/result_pending.html:7 msgid "Last updated" msgstr "Laatst bijgewerkt" -#: core/tables/jobs.py:10 core/tables/tasks.py:76 -#: dcim/tables/devicetypes.py:164 extras/tables/tables.py:216 -#: extras/tables/tables.py:460 netbox/tables/tables.py:189 -#: templates/dcim/virtualchassis_edit.html:52 utilities/forms/forms.py:73 -#: wireless/tables/wirelesslink.py:17 +#: 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/templates/dcim/virtualchassis_edit.html:52 +#: netbox/utilities/forms/forms.py:73 +#: netbox/wireless/tables/wirelesslink.py:17 msgid "ID" msgstr "ID" -#: core/tables/jobs.py:35 +#: netbox/core/tables/jobs.py:35 msgid "Interval" msgstr "Interval" -#: core/tables/plugins.py:14 templates/vpn/ipsecprofile.html:44 -#: vpn/forms/bulk_edit.py:141 vpn/forms/bulk_import.py:172 -#: vpn/tables/crypto.py:61 +#: netbox/core/tables/plugins.py:14 netbox/templates/vpn/ipsecprofile.html:44 +#: netbox/vpn/forms/bulk_edit.py:141 netbox/vpn/forms/bulk_import.py:172 +#: netbox/vpn/tables/crypto.py:61 msgid "Version" msgstr "Versie" -#: core/tables/plugins.py:19 templates/core/datafile.html:38 +#: netbox/core/tables/plugins.py:19 netbox/templates/core/datafile.html:38 msgid "Last Updated" msgstr "Laatst bijgewerkt" -#: core/tables/plugins.py:23 +#: netbox/core/tables/plugins.py:23 msgid "Minimum NetBox Version" msgstr "Minimale NetBox-versie" -#: core/tables/plugins.py:27 +#: netbox/core/tables/plugins.py:27 msgid "Maximum NetBox Version" msgstr "Maximale NetBox-versie" -#: core/tables/plugins.py:31 core/tables/plugins.py:74 +#: netbox/core/tables/plugins.py:31 netbox/core/tables/plugins.py:74 msgid "No plugin data found" msgstr "Geen plugin-gegevens gevonden" -#: core/tables/plugins.py:48 templates/core/plugin.html:62 +#: netbox/core/tables/plugins.py:48 netbox/templates/core/plugin.html:62 msgid "Author" msgstr "Auteur" -#: core/tables/plugins.py:54 +#: netbox/core/tables/plugins.py:54 msgid "Installed" msgstr "Geïnstalleerd" -#: core/tables/plugins.py:57 templates/core/plugin.html:84 +#: netbox/core/tables/plugins.py:57 netbox/templates/core/plugin.html:84 msgid "Certified" msgstr "Gecertificeerd" -#: core/tables/plugins.py:60 +#: netbox/core/tables/plugins.py:60 msgid "Published" msgstr "Gepubliceerd" -#: core/tables/plugins.py:66 +#: netbox/core/tables/plugins.py:66 msgid "Installed Version" msgstr "Geïnstalleerde versie" -#: core/tables/plugins.py:70 +#: netbox/core/tables/plugins.py:70 msgid "Latest Version" msgstr "Laatste versie" -#: core/tables/tasks.py:18 +#: netbox/core/tables/tasks.py:18 msgid "Oldest Task" msgstr "Oudste taak" -#: core/tables/tasks.py:42 templates/core/rq_worker_list.html:39 +#: netbox/core/tables/tasks.py:42 netbox/templates/core/rq_worker_list.html:39 msgid "Workers" msgstr "Workers" -#: core/tables/tasks.py:46 vpn/tables/tunnels.py:88 +#: netbox/core/tables/tasks.py:46 netbox/vpn/tables/tunnels.py:88 msgid "Host" msgstr "Host" -#: core/tables/tasks.py:50 ipam/forms/filtersets.py:535 +#: netbox/core/tables/tasks.py:50 netbox/ipam/forms/filtersets.py:535 msgid "Port" msgstr "Poort" -#: core/tables/tasks.py:54 +#: netbox/core/tables/tasks.py:54 msgid "DB" msgstr "DB" -#: core/tables/tasks.py:58 +#: netbox/core/tables/tasks.py:58 msgid "Scheduler PID" msgstr "PID van de planner" -#: core/tables/tasks.py:62 +#: netbox/core/tables/tasks.py:62 msgid "No queues found" msgstr "Geen wachtrijen gevonden" -#: core/tables/tasks.py:82 +#: netbox/core/tables/tasks.py:82 msgid "Enqueued" msgstr "In de wachtrij gezet" -#: core/tables/tasks.py:85 +#: netbox/core/tables/tasks.py:85 msgid "Ended" msgstr "Afgelopen" -#: core/tables/tasks.py:93 templates/core/rq_task.html:85 +#: netbox/core/tables/tasks.py:93 netbox/templates/core/rq_task.html:85 msgid "Callable" msgstr "Oproepbaar" -#: core/tables/tasks.py:97 +#: netbox/core/tables/tasks.py:97 msgid "No tasks found" msgstr "Geen taken gevonden" -#: core/tables/tasks.py:118 templates/core/rq_worker.html:47 +#: netbox/core/tables/tasks.py:118 netbox/templates/core/rq_worker.html:47 msgid "State" msgstr "Staat" -#: core/tables/tasks.py:121 templates/core/rq_worker.html:51 +#: netbox/core/tables/tasks.py:121 netbox/templates/core/rq_worker.html:51 msgid "Birth" msgstr "Geboorte" -#: core/tables/tasks.py:124 templates/core/rq_worker.html:59 +#: netbox/core/tables/tasks.py:124 netbox/templates/core/rq_worker.html:59 msgid "PID" msgstr "PIDE" -#: core/tables/tasks.py:128 +#: netbox/core/tables/tasks.py:128 msgid "No workers found" msgstr "Geen workers gevonden" -#: core/views.py:90 +#: 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}" -#: core/views.py:319 +#: netbox/core/views.py:319 #, python-brace-format msgid "Restored configuration revision #{id}" msgstr "Herstelde configuratierevisie #{id}" -#: core/views.py:412 core/views.py:455 core/views.py:531 +#: 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 "Taak {job_id} niet gevonden" -#: core/views.py:463 +#: netbox/core/views.py:463 #, python-brace-format msgid "Job {id} has been deleted." msgstr "Baan {id} is verwijderd." -#: core/views.py:465 +#: netbox/core/views.py:465 #, python-brace-format msgid "Error deleting job {id}: {error}" msgstr "Fout bij het verwijderen van de taak {id}: {error}" -#: core/views.py:478 core/views.py:496 +#: netbox/core/views.py:478 netbox/core/views.py:496 #, python-brace-format msgid "Job {id} not found." msgstr "Baan {id} niet gevonden." -#: core/views.py:484 +#: netbox/core/views.py:484 #, python-brace-format msgid "Job {id} has been re-enqueued." msgstr "Baan {id} is opnieuw gevraagd." -#: core/views.py:519 +#: netbox/core/views.py:519 #, python-brace-format msgid "Job {id} has been enqueued." msgstr "Baan {id} is ondervraagd." -#: core/views.py:538 +#: netbox/core/views.py:538 #, python-brace-format msgid "Job {id} has been stopped." msgstr "Baan {id} is gestopt." -#: core/views.py:540 +#: netbox/core/views.py:540 #, python-brace-format msgid "Failed to stop job {id}" msgstr "Kon de taak niet stoppen {id}" -#: core/views.py:678 +#: netbox/core/views.py:674 msgid "Plugins catalog could not be loaded" msgstr "De catalogus met plug-ins kon niet worden geladen" -#: core/views.py:712 +#: netbox/core/views.py:708 #, python-brace-format msgid "Plugin {name} not found" msgstr "Plug-in {name} niet gevonden" -#: dcim/api/serializers_/devices.py:49 dcim/api/serializers_/devicetypes.py:25 +#: netbox/dcim/api/serializers_/devices.py:49 +#: netbox/dcim/api/serializers_/devicetypes.py:25 msgid "Position (U)" msgstr "Positie (U)" -#: dcim/api/serializers_/racks.py:112 templates/dcim/rack.html:28 +#: netbox/dcim/api/serializers_/racks.py:112 +#: netbox/templates/dcim/rack.html:28 msgid "Facility ID" msgstr "Faciliteits-ID" -#: dcim/choices.py:21 virtualization/choices.py:21 +#: netbox/dcim/choices.py:21 netbox/virtualization/choices.py:21 msgid "Staging" msgstr "Klaarzetten" -#: dcim/choices.py:23 dcim/choices.py:189 dcim/choices.py:240 -#: dcim/choices.py:1531 virtualization/choices.py:23 -#: virtualization/choices.py:48 +#: 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 msgid "Decommissioning" msgstr "Ontmanteling" -#: dcim/choices.py:24 +#: netbox/dcim/choices.py:24 msgid "Retired" msgstr "Opgeheven" -#: dcim/choices.py:65 +#: netbox/dcim/choices.py:65 msgid "2-post frame" msgstr "Frame met 2 stijlen" -#: dcim/choices.py:66 +#: netbox/dcim/choices.py:66 msgid "4-post frame" msgstr "Frame met 4 stijlen" -#: dcim/choices.py:67 +#: netbox/dcim/choices.py:67 msgid "4-post cabinet" msgstr "Kast met 4 posten" -#: dcim/choices.py:68 +#: netbox/dcim/choices.py:68 msgid "Wall-mounted frame" msgstr "Frame voor wandmontage" -#: dcim/choices.py:69 +#: netbox/dcim/choices.py:69 msgid "Wall-mounted frame (vertical)" msgstr "Frame voor wandmontage (verticaal)" -#: dcim/choices.py:70 +#: netbox/dcim/choices.py:70 msgid "Wall-mounted cabinet" msgstr "Kast voor wandmontage" -#: dcim/choices.py:71 +#: netbox/dcim/choices.py:71 msgid "Wall-mounted cabinet (vertical)" msgstr "Wandkast (verticaal)" -#: dcim/choices.py:83 dcim/choices.py:84 dcim/choices.py:85 dcim/choices.py:86 +#: netbox/dcim/choices.py:83 netbox/dcim/choices.py:84 +#: netbox/dcim/choices.py:85 netbox/dcim/choices.py:86 #, python-brace-format msgid "{n} inches" msgstr "{n} inches" -#: dcim/choices.py:100 ipam/choices.py:32 ipam/choices.py:50 -#: ipam/choices.py:70 ipam/choices.py:155 wireless/choices.py:26 +#: netbox/dcim/choices.py:100 netbox/ipam/choices.py:32 +#: netbox/ipam/choices.py:50 netbox/ipam/choices.py:70 +#: netbox/ipam/choices.py:155 netbox/wireless/choices.py:26 msgid "Reserved" msgstr "Gereserveerd" -#: dcim/choices.py:101 templates/dcim/device.html:259 +#: netbox/dcim/choices.py:101 netbox/templates/dcim/device.html:259 msgid "Available" msgstr "Beschikbaar" -#: dcim/choices.py:104 ipam/choices.py:33 ipam/choices.py:51 -#: ipam/choices.py:71 ipam/choices.py:156 wireless/choices.py:28 +#: netbox/dcim/choices.py:104 netbox/ipam/choices.py:33 +#: netbox/ipam/choices.py:51 netbox/ipam/choices.py:71 +#: netbox/ipam/choices.py:156 netbox/wireless/choices.py:28 msgid "Deprecated" msgstr "Verouderd" -#: dcim/choices.py:114 templates/dcim/inc/panels/racktype_dimensions.html:41 +#: netbox/dcim/choices.py:114 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:41 msgid "Millimeters" msgstr "Millimeters" -#: dcim/choices.py:115 dcim/choices.py:1553 +#: netbox/dcim/choices.py:115 netbox/dcim/choices.py:1555 msgid "Inches" msgstr "Inches" -#: dcim/choices.py:136 dcim/choices.py:207 dcim/choices.py:254 +#: netbox/dcim/choices.py:136 netbox/dcim/choices.py:207 +#: netbox/dcim/choices.py:254 msgid "Front to rear" msgstr "Van voor naar achter" -#: dcim/choices.py:137 dcim/choices.py:208 dcim/choices.py:255 +#: netbox/dcim/choices.py:137 netbox/dcim/choices.py:208 +#: netbox/dcim/choices.py:255 msgid "Rear to front" msgstr "Van achter naar voren" -#: dcim/choices.py:151 dcim/forms/bulk_edit.py:68 dcim/forms/bulk_edit.py:87 -#: dcim/forms/bulk_edit.py:173 dcim/forms/bulk_edit.py:1405 -#: dcim/forms/bulk_import.py:60 dcim/forms/bulk_import.py:74 -#: dcim/forms/bulk_import.py:137 dcim/forms/bulk_import.py:566 -#: dcim/forms/bulk_import.py:833 dcim/forms/bulk_import.py:1088 -#: dcim/forms/filtersets.py:234 dcim/forms/model_forms.py:74 -#: dcim/forms/model_forms.py:93 dcim/forms/model_forms.py:170 -#: dcim/forms/model_forms.py:1062 dcim/forms/model_forms.py:1502 -#: dcim/forms/object_import.py:176 dcim/tables/devices.py:656 -#: dcim/tables/devices.py:869 dcim/tables/devices.py:954 -#: extras/tables/tables.py:223 ipam/tables/fhrp.py:59 ipam/tables/ip.py:378 -#: ipam/tables/services.py:44 templates/dcim/interface.html:102 -#: templates/dcim/interface.html:309 templates/dcim/location.html:41 -#: templates/dcim/region.html:37 templates/dcim/sitegroup.html:37 -#: templates/ipam/service.html:28 templates/tenancy/contactgroup.html:29 -#: templates/tenancy/tenantgroup.html:37 -#: templates/virtualization/vminterface.html:39 -#: templates/wireless/wirelesslangroup.html:37 tenancy/forms/bulk_edit.py:27 -#: tenancy/forms/bulk_edit.py:61 tenancy/forms/bulk_import.py:24 -#: tenancy/forms/bulk_import.py:58 tenancy/forms/model_forms.py:25 -#: tenancy/forms/model_forms.py:68 virtualization/forms/bulk_edit.py:207 -#: virtualization/forms/bulk_import.py:151 -#: virtualization/tables/virtualmachines.py:162 wireless/forms/bulk_edit.py:24 -#: wireless/forms/bulk_import.py:21 wireless/forms/model_forms.py:21 +#: 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/templates/dcim/location.html:41 netbox/templates/dcim/region.html:37 +#: netbox/templates/dcim/sitegroup.html:37 +#: netbox/templates/ipam/service.html:28 +#: netbox/templates/tenancy/contactgroup.html:29 +#: netbox/templates/tenancy/tenantgroup.html:37 +#: netbox/templates/virtualization/vminterface.html:39 +#: netbox/templates/wireless/wirelesslangroup.html:37 +#: netbox/tenancy/forms/bulk_edit.py:27 netbox/tenancy/forms/bulk_edit.py:61 +#: netbox/tenancy/forms/bulk_import.py:24 +#: netbox/tenancy/forms/bulk_import.py:58 +#: netbox/tenancy/forms/model_forms.py:25 +#: netbox/tenancy/forms/model_forms.py:68 +#: netbox/virtualization/forms/bulk_edit.py:207 +#: netbox/virtualization/forms/bulk_import.py:151 +#: netbox/virtualization/tables/virtualmachines.py:162 +#: netbox/wireless/forms/bulk_edit.py:24 +#: netbox/wireless/forms/bulk_import.py:21 +#: netbox/wireless/forms/model_forms.py:21 msgid "Parent" msgstr "Ouder" -#: dcim/choices.py:152 +#: netbox/dcim/choices.py:152 msgid "Child" msgstr "Kind" -#: dcim/choices.py:166 templates/dcim/device.html:340 -#: templates/dcim/rack.html:133 templates/dcim/rack_elevation_list.html:20 -#: templates/dcim/rackreservation.html:76 +#: netbox/dcim/choices.py:166 netbox/templates/dcim/device.html:340 +#: netbox/templates/dcim/rack.html:133 +#: netbox/templates/dcim/rack_elevation_list.html:20 +#: netbox/templates/dcim/rackreservation.html:76 msgid "Front" msgstr "Voorkant" -#: dcim/choices.py:167 templates/dcim/device.html:346 -#: templates/dcim/rack.html:139 templates/dcim/rack_elevation_list.html:21 -#: templates/dcim/rackreservation.html:82 +#: netbox/dcim/choices.py:167 netbox/templates/dcim/device.html:346 +#: netbox/templates/dcim/rack.html:139 +#: netbox/templates/dcim/rack_elevation_list.html:21 +#: netbox/templates/dcim/rackreservation.html:82 msgid "Rear" msgstr "Achterkant" -#: dcim/choices.py:186 dcim/choices.py:238 virtualization/choices.py:46 +#: netbox/dcim/choices.py:186 netbox/dcim/choices.py:238 +#: netbox/virtualization/choices.py:46 msgid "Staged" msgstr "Klaargezet" -#: dcim/choices.py:188 +#: netbox/dcim/choices.py:188 msgid "Inventory" msgstr "Inventaris" -#: dcim/choices.py:209 dcim/choices.py:256 +#: netbox/dcim/choices.py:209 netbox/dcim/choices.py:256 msgid "Left to right" msgstr "Van links naar rechts" -#: dcim/choices.py:210 dcim/choices.py:257 +#: netbox/dcim/choices.py:210 netbox/dcim/choices.py:257 msgid "Right to left" msgstr "Van rechts naar links" -#: dcim/choices.py:211 dcim/choices.py:258 +#: netbox/dcim/choices.py:211 netbox/dcim/choices.py:258 msgid "Side to rear" msgstr "Van links naar achteren" -#: dcim/choices.py:212 +#: netbox/dcim/choices.py:212 msgid "Rear to side" msgstr "Van achter naar links" -#: dcim/choices.py:213 +#: netbox/dcim/choices.py:213 msgid "Bottom to top" msgstr "Van onder naar boven" -#: dcim/choices.py:214 +#: netbox/dcim/choices.py:214 msgid "Top to bottom" msgstr "Van boven naar beneden" -#: dcim/choices.py:215 dcim/choices.py:259 dcim/choices.py:1303 +#: netbox/dcim/choices.py:215 netbox/dcim/choices.py:259 +#: netbox/dcim/choices.py:1305 msgid "Passive" msgstr "Passief" -#: dcim/choices.py:216 +#: netbox/dcim/choices.py:216 msgid "Mixed" msgstr "Gemengd" -#: dcim/choices.py:484 dcim/choices.py:733 +#: netbox/dcim/choices.py:484 netbox/dcim/choices.py:733 msgid "NEMA (Non-locking)" msgstr "NEMA (niet-vergrendelend)" -#: dcim/choices.py:506 dcim/choices.py:755 +#: netbox/dcim/choices.py:506 netbox/dcim/choices.py:755 msgid "NEMA (Locking)" msgstr "NEMA (vergrendeling)" -#: dcim/choices.py:530 dcim/choices.py:779 +#: netbox/dcim/choices.py:530 netbox/dcim/choices.py:779 msgid "California Style" msgstr "Californische stijl" -#: dcim/choices.py:538 +#: netbox/dcim/choices.py:538 msgid "International/ITA" msgstr "Internationaal/ITA" -#: dcim/choices.py:573 dcim/choices.py:814 +#: netbox/dcim/choices.py:573 netbox/dcim/choices.py:814 msgid "Proprietary" msgstr "Gepatenteerd" -#: dcim/choices.py:581 dcim/choices.py:824 dcim/choices.py:1219 -#: dcim/choices.py:1221 dcim/choices.py:1447 dcim/choices.py:1449 -#: netbox/navigation/menu.py:200 +#: 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 msgid "Other" msgstr "Andere" -#: dcim/choices.py:787 +#: netbox/dcim/choices.py:787 msgid "ITA/International" msgstr "ITA/internationaal" -#: dcim/choices.py:854 +#: netbox/dcim/choices.py:854 msgid "Physical" msgstr "Fysiek" -#: dcim/choices.py:855 dcim/choices.py:1023 +#: netbox/dcim/choices.py:855 netbox/dcim/choices.py:1024 msgid "Virtual" msgstr "Virtueel" -#: dcim/choices.py:856 dcim/choices.py:1097 dcim/forms/bulk_edit.py:1515 -#: dcim/forms/filtersets.py:1330 dcim/forms/model_forms.py:988 -#: dcim/forms/model_forms.py:1397 netbox/navigation/menu.py:140 -#: netbox/navigation/menu.py:144 templates/dcim/interface.html:210 +#: 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 msgid "Wireless" msgstr "Draadloos" -#: dcim/choices.py:1021 +#: netbox/dcim/choices.py:1022 msgid "Virtual interfaces" msgstr "Virtuele interfaces" -#: dcim/choices.py:1024 dcim/forms/bulk_edit.py:1410 -#: dcim/forms/bulk_import.py:840 dcim/forms/model_forms.py:974 -#: dcim/tables/devices.py:660 templates/dcim/interface.html:106 -#: templates/virtualization/vminterface.html:43 -#: virtualization/forms/bulk_edit.py:212 -#: virtualization/forms/bulk_import.py:158 -#: virtualization/tables/virtualmachines.py:166 +#: 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/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 msgid "Bridge" msgstr "Bridge" -#: dcim/choices.py:1025 +#: netbox/dcim/choices.py:1026 msgid "Link Aggregation Group (LAG)" msgstr "Linkaggregatiegroep (LAG)" -#: dcim/choices.py:1029 +#: netbox/dcim/choices.py:1030 msgid "Ethernet (fixed)" msgstr "Ethernet (vast)" -#: dcim/choices.py:1044 +#: netbox/dcim/choices.py:1046 msgid "Ethernet (modular)" msgstr "Ethernet (modulair)" -#: dcim/choices.py:1081 +#: netbox/dcim/choices.py:1083 msgid "Ethernet (backplane)" msgstr "Ethernet (backplane)" -#: dcim/choices.py:1113 +#: netbox/dcim/choices.py:1115 msgid "Cellular" msgstr "Mobiel" -#: dcim/choices.py:1165 dcim/forms/filtersets.py:383 -#: dcim/forms/filtersets.py:809 dcim/forms/filtersets.py:963 -#: dcim/forms/filtersets.py:1542 templates/dcim/inventoryitem.html:52 -#: templates/dcim/virtualchassis_edit.html:54 +#: 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/templates/dcim/virtualchassis_edit.html:54 msgid "Serial" msgstr "Serienummer" -#: dcim/choices.py:1180 +#: netbox/dcim/choices.py:1182 msgid "Coaxial" msgstr "Coaxiaal" -#: dcim/choices.py:1200 +#: netbox/dcim/choices.py:1202 msgid "Stacking" msgstr "Stapelen" -#: dcim/choices.py:1250 +#: netbox/dcim/choices.py:1252 msgid "Half" msgstr "Half" -#: dcim/choices.py:1251 +#: netbox/dcim/choices.py:1253 msgid "Full" msgstr "Volledig" -#: dcim/choices.py:1252 netbox/preferences.py:31 wireless/choices.py:480 +#: netbox/dcim/choices.py:1254 netbox/netbox/preferences.py:31 +#: netbox/wireless/choices.py:480 msgid "Auto" msgstr "Auto" -#: dcim/choices.py:1263 +#: netbox/dcim/choices.py:1265 msgid "Access" msgstr "Toegang" -#: dcim/choices.py:1264 ipam/tables/vlans.py:172 ipam/tables/vlans.py:217 -#: templates/dcim/inc/interface_vlans_table.html:7 +#: 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 "Getagd" -#: dcim/choices.py:1265 +#: netbox/dcim/choices.py:1267 msgid "Tagged (All)" msgstr "Getagd (Alles)" -#: dcim/choices.py:1294 +#: netbox/dcim/choices.py:1296 msgid "IEEE Standard" msgstr "IEEE-standaard" -#: dcim/choices.py:1305 +#: netbox/dcim/choices.py:1307 msgid "Passive 24V (2-pair)" msgstr "Passief 24V (2 paren)" -#: dcim/choices.py:1306 +#: netbox/dcim/choices.py:1308 msgid "Passive 24V (4-pair)" msgstr "Passief 24V (4 paren)" -#: dcim/choices.py:1307 +#: netbox/dcim/choices.py:1309 msgid "Passive 48V (2-pair)" msgstr "Passief 48V (2 paren)" -#: dcim/choices.py:1308 +#: netbox/dcim/choices.py:1310 msgid "Passive 48V (4-pair)" msgstr "Passief 48V (4 paren)" -#: dcim/choices.py:1378 dcim/choices.py:1488 +#: netbox/dcim/choices.py:1380 netbox/dcim/choices.py:1490 msgid "Copper" msgstr "Koper" -#: dcim/choices.py:1401 +#: netbox/dcim/choices.py:1403 msgid "Fiber Optic" msgstr "Glasvezel" -#: dcim/choices.py:1434 dcim/choices.py:1517 +#: netbox/dcim/choices.py:1436 netbox/dcim/choices.py:1519 msgid "USB" msgstr "USB" -#: dcim/choices.py:1504 +#: netbox/dcim/choices.py:1506 msgid "Fiber" msgstr "Vezel" -#: dcim/choices.py:1529 dcim/forms/filtersets.py:1227 +#: netbox/dcim/choices.py:1531 netbox/dcim/forms/filtersets.py:1227 msgid "Connected" msgstr "Verbonden" -#: dcim/choices.py:1548 wireless/choices.py:497 +#: netbox/dcim/choices.py:1550 netbox/wireless/choices.py:497 msgid "Kilometers" msgstr "Kilometers" -#: dcim/choices.py:1549 templates/dcim/cable_trace.html:65 -#: wireless/choices.py:498 +#: netbox/dcim/choices.py:1551 netbox/templates/dcim/cable_trace.html:65 +#: netbox/wireless/choices.py:498 msgid "Meters" msgstr "Meters" -#: dcim/choices.py:1550 +#: netbox/dcim/choices.py:1552 msgid "Centimeters" msgstr "Centimeters" -#: dcim/choices.py:1551 wireless/choices.py:499 +#: netbox/dcim/choices.py:1553 netbox/wireless/choices.py:499 msgid "Miles" msgstr "Mijlen" -#: dcim/choices.py:1552 templates/dcim/cable_trace.html:66 -#: wireless/choices.py:500 +#: netbox/dcim/choices.py:1554 netbox/templates/dcim/cable_trace.html:66 +#: netbox/wireless/choices.py:500 msgid "Feet" msgstr "Feet" -#: dcim/choices.py:1568 templates/dcim/device.html:327 -#: templates/dcim/rack.html:107 +#: netbox/dcim/choices.py:1570 netbox/templates/dcim/device.html:327 +#: netbox/templates/dcim/rack.html:107 msgid "Kilograms" msgstr "Kilogrammen" -#: dcim/choices.py:1569 +#: netbox/dcim/choices.py:1571 msgid "Grams" msgstr "Gram" -#: dcim/choices.py:1570 templates/dcim/device.html:328 -#: templates/dcim/rack.html:108 +#: netbox/dcim/choices.py:1572 netbox/templates/dcim/device.html:328 +#: netbox/templates/dcim/rack.html:108 msgid "Pounds" msgstr "Ponden" -#: dcim/choices.py:1571 +#: netbox/dcim/choices.py:1573 msgid "Ounces" msgstr "Ons" -#: dcim/choices.py:1618 +#: netbox/dcim/choices.py:1620 msgid "Redundant" msgstr "Redundant" -#: dcim/choices.py:1639 +#: netbox/dcim/choices.py:1641 msgid "Single phase" msgstr "Een fase" -#: dcim/choices.py:1640 +#: netbox/dcim/choices.py:1642 msgid "Three-phase" msgstr "Drie fase" -#: dcim/fields.py:45 +#: netbox/dcim/fields.py:45 #, python-brace-format msgid "Invalid MAC address format: {value}" msgstr "Ongeldig formaat van het MAC-adres: {value}" -#: dcim/fields.py:71 +#: netbox/dcim/fields.py:71 #, python-brace-format msgid "Invalid WWN format: {value}" msgstr "Ongeldig WWN-formaat: {value}" -#: dcim/filtersets.py:86 +#: netbox/dcim/filtersets.py:86 msgid "Parent region (ID)" msgstr "Ouderregio (ID)" -#: dcim/filtersets.py:92 +#: netbox/dcim/filtersets.py:92 msgid "Parent region (slug)" msgstr "Ouderregio (slug)" -#: dcim/filtersets.py:116 +#: netbox/dcim/filtersets.py:116 msgid "Parent site group (ID)" msgstr "Oudersitegroep (ID)" -#: dcim/filtersets.py:122 +#: netbox/dcim/filtersets.py:122 msgid "Parent site group (slug)" msgstr "Bovenliggende sitegroep (slug)" -#: dcim/filtersets.py:164 extras/filtersets.py:364 ipam/filtersets.py:841 -#: ipam/filtersets.py:993 +#: netbox/dcim/filtersets.py:164 netbox/extras/filtersets.py:364 +#: netbox/ipam/filtersets.py:841 netbox/ipam/filtersets.py:993 msgid "Group (ID)" msgstr "Groep (ID)" -#: dcim/filtersets.py:170 +#: netbox/dcim/filtersets.py:170 msgid "Group (slug)" msgstr "Groep (slug)" -#: dcim/filtersets.py:176 dcim/filtersets.py:181 +#: netbox/dcim/filtersets.py:176 netbox/dcim/filtersets.py:181 msgid "AS (ID)" msgstr "ALS (ID)" -#: dcim/filtersets.py:246 +#: netbox/dcim/filtersets.py:246 msgid "Parent location (ID)" msgstr "Locatie van de ouder (ID)" -#: dcim/filtersets.py:252 +#: netbox/dcim/filtersets.py:252 msgid "Parent location (slug)" msgstr "Locatie van de ouder (slug)" -#: dcim/filtersets.py:258 dcim/filtersets.py:369 dcim/filtersets.py:490 -#: dcim/filtersets.py:1057 dcim/filtersets.py:1404 dcim/filtersets.py:2182 +#: 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)" -#: dcim/filtersets.py:265 dcim/filtersets.py:376 dcim/filtersets.py:497 -#: dcim/filtersets.py:1410 extras/filtersets.py:542 +#: 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)" -#: dcim/filtersets.py:296 dcim/filtersets.py:381 dcim/filtersets.py:539 -#: dcim/filtersets.py:678 dcim/filtersets.py:882 dcim/filtersets.py:933 -#: dcim/filtersets.py:973 dcim/filtersets.py:1306 dcim/filtersets.py:1840 +#: 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 msgid "Manufacturer (ID)" msgstr "Fabrikant (ID)" -#: dcim/filtersets.py:302 dcim/filtersets.py:387 dcim/filtersets.py:545 -#: dcim/filtersets.py:684 dcim/filtersets.py:888 dcim/filtersets.py:939 -#: dcim/filtersets.py:979 dcim/filtersets.py:1312 dcim/filtersets.py:1846 +#: 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 msgid "Manufacturer (slug)" msgstr "Fabrikant (slug)" -#: dcim/filtersets.py:393 +#: netbox/dcim/filtersets.py:393 msgid "Rack type (slug)" msgstr "Racktype (slug)" -#: dcim/filtersets.py:397 +#: netbox/dcim/filtersets.py:397 msgid "Rack type (ID)" msgstr "Racktype (ID)" -#: dcim/filtersets.py:411 dcim/filtersets.py:892 dcim/filtersets.py:994 -#: dcim/filtersets.py:1850 ipam/filtersets.py:381 ipam/filtersets.py:493 -#: ipam/filtersets.py:1003 virtualization/filtersets.py:210 +#: 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 msgid "Role (ID)" msgstr "Rol (ID)" -#: dcim/filtersets.py:417 dcim/filtersets.py:898 dcim/filtersets.py:1000 -#: dcim/filtersets.py:1856 extras/filtersets.py:558 ipam/filtersets.py:387 -#: ipam/filtersets.py:499 ipam/filtersets.py:1009 -#: virtualization/filtersets.py:216 +#: 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/virtualization/filtersets.py:216 msgid "Role (slug)" msgstr "Rol (slug)" -#: dcim/filtersets.py:447 dcim/filtersets.py:1062 dcim/filtersets.py:1415 -#: dcim/filtersets.py:2244 +#: netbox/dcim/filtersets.py:447 netbox/dcim/filtersets.py:1062 +#: netbox/dcim/filtersets.py:1415 netbox/dcim/filtersets.py:2244 msgid "Rack (ID)" msgstr "Rek (ID)" -#: dcim/filtersets.py:507 extras/filtersets.py:293 extras/filtersets.py:337 -#: extras/filtersets.py:359 extras/filtersets.py:419 users/filtersets.py:113 -#: users/filtersets.py:180 +#: netbox/dcim/filtersets.py:507 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)" -#: dcim/filtersets.py:549 +#: netbox/dcim/filtersets.py:549 msgid "Default platform (ID)" msgstr "Standaardplatform (ID)" -#: dcim/filtersets.py:555 +#: netbox/dcim/filtersets.py:555 msgid "Default platform (slug)" msgstr "Standaardplatform (slug)" -#: dcim/filtersets.py:558 dcim/forms/filtersets.py:517 +#: netbox/dcim/filtersets.py:558 netbox/dcim/forms/filtersets.py:517 msgid "Has a front image" msgstr "Heeft een afbeelding van de voorkant" -#: dcim/filtersets.py:562 dcim/forms/filtersets.py:524 +#: netbox/dcim/filtersets.py:562 netbox/dcim/forms/filtersets.py:524 msgid "Has a rear image" msgstr "Heeft een afbeelding van de achterkant" -#: dcim/filtersets.py:567 dcim/filtersets.py:688 dcim/filtersets.py:1131 -#: dcim/forms/filtersets.py:531 dcim/forms/filtersets.py:627 -#: dcim/forms/filtersets.py:848 +#: 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 msgid "Has console ports" msgstr "Heeft consolepoorten" -#: dcim/filtersets.py:571 dcim/filtersets.py:692 dcim/filtersets.py:1135 -#: dcim/forms/filtersets.py:538 dcim/forms/filtersets.py:634 -#: dcim/forms/filtersets.py:855 +#: 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 msgid "Has console server ports" msgstr "Heeft consoleserverpoorten" -#: dcim/filtersets.py:575 dcim/filtersets.py:696 dcim/filtersets.py:1139 -#: dcim/forms/filtersets.py:545 dcim/forms/filtersets.py:641 -#: dcim/forms/filtersets.py:862 +#: 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 msgid "Has power ports" msgstr "Heeft voedingspoorten" -#: dcim/filtersets.py:579 dcim/filtersets.py:700 dcim/filtersets.py:1143 -#: dcim/forms/filtersets.py:552 dcim/forms/filtersets.py:648 -#: dcim/forms/filtersets.py:869 +#: 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 msgid "Has power outlets" msgstr "Heeft stopcontacten" -#: dcim/filtersets.py:583 dcim/filtersets.py:704 dcim/filtersets.py:1147 -#: dcim/forms/filtersets.py:559 dcim/forms/filtersets.py:655 -#: dcim/forms/filtersets.py:876 +#: 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 msgid "Has interfaces" msgstr "Heeft interfaces" -#: dcim/filtersets.py:587 dcim/filtersets.py:708 dcim/filtersets.py:1151 -#: dcim/forms/filtersets.py:566 dcim/forms/filtersets.py:662 -#: dcim/forms/filtersets.py:883 +#: 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 msgid "Has pass-through ports" msgstr "Heeft pass-through-poorten" -#: dcim/filtersets.py:591 dcim/filtersets.py:1155 dcim/forms/filtersets.py:580 +#: netbox/dcim/filtersets.py:591 netbox/dcim/filtersets.py:1155 +#: netbox/dcim/forms/filtersets.py:580 msgid "Has module bays" msgstr "Heeft modulevakken" -#: dcim/filtersets.py:595 dcim/filtersets.py:1159 dcim/forms/filtersets.py:573 +#: netbox/dcim/filtersets.py:595 netbox/dcim/filtersets.py:1159 +#: netbox/dcim/forms/filtersets.py:573 msgid "Has device bays" msgstr "Heeft apparaatvakken" -#: dcim/filtersets.py:599 dcim/forms/filtersets.py:587 +#: netbox/dcim/filtersets.py:599 netbox/dcim/forms/filtersets.py:587 msgid "Has inventory items" msgstr "Heeft inventarisitems" -#: dcim/filtersets.py:756 dcim/filtersets.py:989 dcim/filtersets.py:1436 +#: netbox/dcim/filtersets.py:756 netbox/dcim/filtersets.py:989 +#: netbox/dcim/filtersets.py:1436 msgid "Device type (ID)" msgstr "Soort apparaat (ID)" -#: dcim/filtersets.py:772 dcim/filtersets.py:1317 +#: netbox/dcim/filtersets.py:772 netbox/dcim/filtersets.py:1317 msgid "Module type (ID)" msgstr "Moduletype (ID)" -#: dcim/filtersets.py:804 dcim/filtersets.py:1591 +#: netbox/dcim/filtersets.py:804 netbox/dcim/filtersets.py:1591 msgid "Power port (ID)" msgstr "Voedingspoort (ID)" -#: dcim/filtersets.py:878 dcim/filtersets.py:1836 +#: netbox/dcim/filtersets.py:878 netbox/dcim/filtersets.py:1836 msgid "Parent inventory item (ID)" msgstr "Onderliggend inventarisitem (ID)" -#: dcim/filtersets.py:921 dcim/filtersets.py:947 dcim/filtersets.py:1127 -#: virtualization/filtersets.py:238 +#: netbox/dcim/filtersets.py:921 netbox/dcim/filtersets.py:947 +#: netbox/dcim/filtersets.py:1127 netbox/virtualization/filtersets.py:238 msgid "Config template (ID)" msgstr "Configuratiesjabloon (ID)" -#: dcim/filtersets.py:985 +#: netbox/dcim/filtersets.py:985 msgid "Device type (slug)" msgstr "Soort apparaat (slug)" -#: dcim/filtersets.py:1005 +#: netbox/dcim/filtersets.py:1005 msgid "Parent Device (ID)" msgstr "Ouderapparaat (ID)" -#: dcim/filtersets.py:1009 virtualization/filtersets.py:220 +#: netbox/dcim/filtersets.py:1009 netbox/virtualization/filtersets.py:220 msgid "Platform (ID)" msgstr "Platform (ID)" -#: dcim/filtersets.py:1015 extras/filtersets.py:569 -#: virtualization/filtersets.py:226 +#: netbox/dcim/filtersets.py:1015 netbox/extras/filtersets.py:569 +#: netbox/virtualization/filtersets.py:226 msgid "Platform (slug)" msgstr "Platform (slug)" -#: dcim/filtersets.py:1051 dcim/filtersets.py:1399 dcim/filtersets.py:1934 -#: dcim/filtersets.py:2176 dcim/filtersets.py:2235 +#: 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 msgid "Site name (slug)" msgstr "Sitenaam (slug)" -#: dcim/filtersets.py:1067 +#: netbox/dcim/filtersets.py:1067 msgid "Parent bay (ID)" msgstr "Ouderbaby (ID)" -#: dcim/filtersets.py:1071 +#: netbox/dcim/filtersets.py:1071 msgid "VM cluster (ID)" msgstr "VM-cluster (ID)" -#: dcim/filtersets.py:1077 extras/filtersets.py:591 -#: virtualization/filtersets.py:136 +#: netbox/dcim/filtersets.py:1077 netbox/extras/filtersets.py:591 +#: netbox/virtualization/filtersets.py:136 msgid "Cluster group (slug)" msgstr "Clustergroep (slug)" -#: dcim/filtersets.py:1082 virtualization/filtersets.py:130 +#: netbox/dcim/filtersets.py:1082 netbox/virtualization/filtersets.py:130 msgid "Cluster group (ID)" msgstr "Clustergroep (ID)" -#: dcim/filtersets.py:1088 +#: netbox/dcim/filtersets.py:1088 msgid "Device model (slug)" msgstr "Apparaatmodel (slug)" -#: dcim/filtersets.py:1099 dcim/forms/bulk_edit.py:516 +#: netbox/dcim/filtersets.py:1099 netbox/dcim/forms/bulk_edit.py:522 msgid "Is full depth" msgstr "Is volledige diepte" -#: dcim/filtersets.py:1103 dcim/forms/common.py:18 -#: dcim/forms/filtersets.py:818 dcim/forms/filtersets.py:1385 -#: dcim/models/device_components.py:518 virtualization/filtersets.py:230 -#: virtualization/filtersets.py:301 virtualization/forms/filtersets.py:172 -#: virtualization/forms/filtersets.py:223 +#: 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 msgid "MAC address" msgstr "MAC-adres" -#: dcim/filtersets.py:1110 dcim/filtersets.py:1274 -#: dcim/forms/filtersets.py:827 dcim/forms/filtersets.py:930 -#: virtualization/filtersets.py:234 virtualization/forms/filtersets.py:176 +#: 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 msgid "Has a primary IP" msgstr "Heeft een primair IP-adres" -#: dcim/filtersets.py:1114 +#: netbox/dcim/filtersets.py:1114 msgid "Has an out-of-band IP" msgstr "Heeft een IP-adres buiten de band" -#: dcim/filtersets.py:1119 +#: netbox/dcim/filtersets.py:1119 msgid "Virtual chassis (ID)" msgstr "Virtueel chassis (ID)" -#: dcim/filtersets.py:1123 +#: netbox/dcim/filtersets.py:1123 msgid "Is a virtual chassis member" msgstr "Is een virtueel chassislid" -#: dcim/filtersets.py:1164 +#: netbox/dcim/filtersets.py:1164 msgid "OOB IP (ID)" msgstr "OOB IP (ID)" -#: dcim/filtersets.py:1168 +#: netbox/dcim/filtersets.py:1168 msgid "Has virtual device context" msgstr "Heeft een context voor een virtueel apparaat" -#: dcim/filtersets.py:1257 +#: netbox/dcim/filtersets.py:1257 msgid "VDC (ID)" msgstr "VDC (ID)" -#: dcim/filtersets.py:1262 +#: netbox/dcim/filtersets.py:1262 msgid "Device model" msgstr "Model van het apparaat" -#: dcim/filtersets.py:1267 ipam/filtersets.py:632 vpn/filtersets.py:102 -#: vpn/filtersets.py:401 +#: netbox/dcim/filtersets.py:1267 netbox/ipam/filtersets.py:632 +#: netbox/vpn/filtersets.py:102 netbox/vpn/filtersets.py:401 msgid "Interface (ID)" msgstr "Interface (ID)" -#: dcim/filtersets.py:1323 +#: netbox/dcim/filtersets.py:1323 msgid "Module type (model)" msgstr "Moduletype (model)" -#: dcim/filtersets.py:1329 +#: netbox/dcim/filtersets.py:1329 msgid "Module bay (ID)" msgstr "Modulevak (ID)" -#: dcim/filtersets.py:1333 dcim/filtersets.py:1425 ipam/filtersets.py:611 -#: ipam/filtersets.py:851 ipam/filtersets.py:1115 -#: virtualization/filtersets.py:161 vpn/filtersets.py:379 +#: 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/vpn/filtersets.py:379 msgid "Device (ID)" msgstr "Apparaat (ID)" -#: dcim/filtersets.py:1421 +#: netbox/dcim/filtersets.py:1421 msgid "Rack (name)" msgstr "Rack (naam)" -#: dcim/filtersets.py:1431 ipam/filtersets.py:606 ipam/filtersets.py:846 -#: ipam/filtersets.py:1121 vpn/filtersets.py:374 +#: netbox/dcim/filtersets.py:1431 netbox/ipam/filtersets.py:606 +#: netbox/ipam/filtersets.py:846 netbox/ipam/filtersets.py:1121 +#: netbox/vpn/filtersets.py:374 msgid "Device (name)" msgstr "Apparaat (naam)" -#: dcim/filtersets.py:1442 +#: netbox/dcim/filtersets.py:1442 msgid "Device type (model)" msgstr "Soort apparaat (model)" -#: dcim/filtersets.py:1447 +#: netbox/dcim/filtersets.py:1447 msgid "Device role (ID)" msgstr "Rol van het apparaat (ID)" -#: dcim/filtersets.py:1453 +#: netbox/dcim/filtersets.py:1453 msgid "Device role (slug)" msgstr "Rol van het apparaat (slug)" -#: dcim/filtersets.py:1458 +#: netbox/dcim/filtersets.py:1458 msgid "Virtual Chassis (ID)" msgstr "Virtueel chassis (ID)" -#: dcim/filtersets.py:1464 dcim/forms/filtersets.py:109 -#: dcim/tables/devices.py:206 netbox/navigation/menu.py:79 -#: templates/dcim/device.html:120 templates/dcim/device_edit.html:93 -#: templates/dcim/virtualchassis.html:20 -#: templates/dcim/virtualchassis_add.html:8 -#: templates/dcim/virtualchassis_edit.html:24 +#: netbox/dcim/filtersets.py:1464 netbox/dcim/forms/filtersets.py:109 +#: netbox/dcim/tables/devices.py:206 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 +#: netbox/templates/dcim/virtualchassis_add.html:8 +#: netbox/templates/dcim/virtualchassis_edit.html:24 msgid "Virtual Chassis" msgstr "Virtueel chassis" -#: dcim/filtersets.py:1488 +#: netbox/dcim/filtersets.py:1488 msgid "Module (ID)" msgstr "Module (ID)" -#: dcim/filtersets.py:1495 +#: netbox/dcim/filtersets.py:1495 msgid "Cable (ID)" msgstr "Kabel (ID)" -#: dcim/filtersets.py:1604 ipam/forms/bulk_import.py:189 -#: vpn/forms/bulk_import.py:308 +#: netbox/dcim/filtersets.py:1604 netbox/ipam/forms/bulk_import.py:189 +#: netbox/vpn/forms/bulk_import.py:308 msgid "Assigned VLAN" msgstr "Toegewezen VLAN" -#: dcim/filtersets.py:1608 +#: netbox/dcim/filtersets.py:1608 msgid "Assigned VID" msgstr "Toegewezen VID" -#: dcim/filtersets.py:1613 dcim/forms/bulk_edit.py:1489 -#: dcim/forms/bulk_import.py:891 dcim/forms/filtersets.py:1428 -#: dcim/forms/model_forms.py:1378 dcim/models/device_components.py:711 -#: dcim/tables/devices.py:626 ipam/filtersets.py:316 ipam/filtersets.py:327 -#: ipam/filtersets.py:483 ipam/filtersets.py:584 ipam/filtersets.py:595 -#: ipam/forms/bulk_edit.py:242 ipam/forms/bulk_edit.py:298 -#: ipam/forms/bulk_edit.py:340 ipam/forms/bulk_import.py:157 -#: ipam/forms/bulk_import.py:243 ipam/forms/bulk_import.py:279 -#: ipam/forms/filtersets.py:67 ipam/forms/filtersets.py:172 -#: ipam/forms/filtersets.py:309 ipam/forms/model_forms.py:62 -#: ipam/forms/model_forms.py:202 ipam/forms/model_forms.py:247 -#: ipam/forms/model_forms.py:300 ipam/forms/model_forms.py:431 -#: ipam/forms/model_forms.py:445 ipam/forms/model_forms.py:459 -#: ipam/models/ip.py:233 ipam/models/ip.py:512 ipam/models/ip.py:720 -#: ipam/models/vrfs.py:62 ipam/tables/ip.py:242 ipam/tables/ip.py:309 -#: ipam/tables/ip.py:360 ipam/tables/ip.py:450 -#: templates/dcim/interface.html:133 templates/ipam/ipaddress.html:18 -#: templates/ipam/iprange.html:40 templates/ipam/prefix.html:19 -#: templates/ipam/vrf.html:7 templates/ipam/vrf.html:13 -#: templates/virtualization/vminterface.html:47 -#: virtualization/forms/bulk_edit.py:261 -#: virtualization/forms/bulk_import.py:171 -#: virtualization/forms/filtersets.py:228 -#: virtualization/forms/model_forms.py:344 -#: virtualization/models/virtualmachines.py:355 -#: virtualization/tables/virtualmachines.py:143 +#: 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:316 +#: netbox/ipam/filtersets.py:327 netbox/ipam/filtersets.py:483 +#: netbox/ipam/filtersets.py:584 netbox/ipam/filtersets.py:595 +#: netbox/ipam/forms/bulk_edit.py: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/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 msgid "VRF" msgstr "VRF" -#: dcim/filtersets.py:1619 ipam/filtersets.py:322 ipam/filtersets.py:333 -#: ipam/filtersets.py:489 ipam/filtersets.py:590 ipam/filtersets.py:601 +#: 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 msgid "VRF (RD)" msgstr "VRF (RD)" -#: dcim/filtersets.py:1624 ipam/filtersets.py:1030 vpn/filtersets.py:342 +#: netbox/dcim/filtersets.py:1624 netbox/ipam/filtersets.py:1030 +#: netbox/vpn/filtersets.py:342 msgid "L2VPN (ID)" msgstr "L2VPN (ID)" -#: dcim/filtersets.py:1630 dcim/forms/filtersets.py:1433 -#: dcim/tables/devices.py:570 ipam/filtersets.py:1036 -#: ipam/forms/filtersets.py:518 ipam/tables/vlans.py:137 -#: templates/dcim/interface.html:93 templates/ipam/vlan.html:66 -#: templates/vpn/l2vpntermination.html:12 -#: virtualization/forms/filtersets.py:233 vpn/forms/bulk_import.py:280 -#: vpn/forms/filtersets.py:246 vpn/forms/model_forms.py:409 -#: vpn/forms/model_forms.py:427 vpn/models/l2vpn.py:63 vpn/tables/l2vpn.py:55 +#: netbox/dcim/filtersets.py:1630 netbox/dcim/forms/filtersets.py:1433 +#: netbox/dcim/tables/devices.py:570 netbox/ipam/filtersets.py:1036 +#: 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 +#: netbox/virtualization/forms/filtersets.py:233 +#: netbox/vpn/forms/bulk_import.py:280 netbox/vpn/forms/filtersets.py:246 +#: netbox/vpn/forms/model_forms.py:409 netbox/vpn/forms/model_forms.py:427 +#: netbox/vpn/models/l2vpn.py:63 netbox/vpn/tables/l2vpn.py:55 msgid "L2VPN" msgstr "L2VPN" -#: dcim/filtersets.py:1662 +#: netbox/dcim/filtersets.py:1662 msgid "Virtual Chassis Interfaces for Device" msgstr "Virtuele chassisinterfaces voor apparaten" -#: dcim/filtersets.py:1667 +#: netbox/dcim/filtersets.py:1667 msgid "Virtual Chassis Interfaces for Device (ID)" msgstr "Virtuele chassisinterfaces voor apparaat (ID)" -#: dcim/filtersets.py:1671 +#: netbox/dcim/filtersets.py:1671 msgid "Kind of interface" msgstr "Soort interface" -#: dcim/filtersets.py:1676 virtualization/filtersets.py:293 +#: netbox/dcim/filtersets.py:1676 netbox/virtualization/filtersets.py:293 msgid "Parent interface (ID)" msgstr "Ouderinterface (ID)" -#: dcim/filtersets.py:1681 virtualization/filtersets.py:298 +#: netbox/dcim/filtersets.py:1681 netbox/virtualization/filtersets.py:298 msgid "Bridged interface (ID)" msgstr "Overbrugde interface (ID)" -#: dcim/filtersets.py:1686 +#: netbox/dcim/filtersets.py:1686 msgid "LAG interface (ID)" msgstr "LAG-interface (ID)" -#: dcim/filtersets.py:1713 dcim/filtersets.py:1725 -#: dcim/forms/filtersets.py:1345 dcim/forms/model_forms.py:1690 -#: templates/dcim/virtualdevicecontext.html:15 +#: netbox/dcim/filtersets.py:1713 netbox/dcim/filtersets.py:1725 +#: netbox/dcim/forms/filtersets.py:1345 netbox/dcim/forms/model_forms.py:1697 +#: netbox/templates/dcim/virtualdevicecontext.html:15 msgid "Virtual Device Context" msgstr "Context van het virtuele apparaat" -#: dcim/filtersets.py:1719 +#: netbox/dcim/filtersets.py:1719 msgid "Virtual Device Context (Identifier)" msgstr "Context van het virtuele apparaat (ID)" -#: dcim/filtersets.py:1730 templates/wireless/wirelesslan.html:11 -#: wireless/forms/model_forms.py:53 +#: netbox/dcim/filtersets.py:1730 +#: netbox/templates/wireless/wirelesslan.html:11 +#: netbox/wireless/forms/model_forms.py:53 msgid "Wireless LAN" msgstr "Draadloos LAN" -#: dcim/filtersets.py:1734 dcim/tables/devices.py:613 +#: netbox/dcim/filtersets.py:1734 netbox/dcim/tables/devices.py:613 msgid "Wireless link" msgstr "Draadloze link" -#: dcim/filtersets.py:1803 +#: netbox/dcim/filtersets.py:1803 msgid "Parent module bay (ID)" msgstr "Baai voor oudermodule (ID)" -#: dcim/filtersets.py:1808 +#: netbox/dcim/filtersets.py:1808 msgid "Installed module (ID)" msgstr "Geïnstalleerde module (ID)" -#: dcim/filtersets.py:1819 +#: netbox/dcim/filtersets.py:1819 msgid "Installed device (ID)" msgstr "Geïnstalleerd apparaat (ID)" -#: dcim/filtersets.py:1825 +#: netbox/dcim/filtersets.py:1825 msgid "Installed device (name)" msgstr "Geïnstalleerd apparaat (naam)" -#: dcim/filtersets.py:1891 +#: netbox/dcim/filtersets.py:1891 msgid "Master (ID)" msgstr "Meester (ID)" -#: dcim/filtersets.py:1897 +#: netbox/dcim/filtersets.py:1897 msgid "Master (name)" msgstr "Master (naam)" -#: dcim/filtersets.py:1939 tenancy/filtersets.py:245 +#: netbox/dcim/filtersets.py:1939 netbox/tenancy/filtersets.py:245 msgid "Tenant (ID)" msgstr "Tenant (ID)" -#: dcim/filtersets.py:1945 extras/filtersets.py:618 tenancy/filtersets.py:251 +#: netbox/dcim/filtersets.py:1945 netbox/extras/filtersets.py:618 +#: netbox/tenancy/filtersets.py:251 msgid "Tenant (slug)" msgstr "Tenant (slug)" -#: dcim/filtersets.py:1981 dcim/forms/filtersets.py:1077 +#: netbox/dcim/filtersets.py:1981 netbox/dcim/forms/filtersets.py:1077 msgid "Unterminated" msgstr "Onbeëindigd" -#: dcim/filtersets.py:2239 +#: netbox/dcim/filtersets.py:2239 msgid "Power panel (ID)" msgstr "Voedingspaneel (ID)" -#: dcim/forms/bulk_create.py:40 extras/forms/filtersets.py:401 -#: extras/forms/model_forms.py:567 extras/forms/model_forms.py:619 -#: netbox/forms/base.py:86 netbox/forms/mixins.py:81 -#: netbox/tables/columns.py:478 -#: templates/circuits/inc/circuit_termination.html:32 -#: templates/generic/bulk_edit.html:65 templates/inc/panels/tags.html:5 -#: utilities/forms/fields/fields.py:81 +#: netbox/dcim/forms/bulk_create.py:40 netbox/extras/forms/filtersets.py: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/templates/circuits/inc/circuit_termination.html:32 +#: netbox/templates/generic/bulk_edit.html:65 +#: netbox/templates/inc/panels/tags.html:5 +#: netbox/utilities/forms/fields/fields.py:81 msgid "Tags" msgstr "Labels" -#: dcim/forms/bulk_create.py:112 dcim/forms/filtersets.py:1498 -#: dcim/forms/model_forms.py:488 dcim/forms/model_forms.py:546 -#: dcim/forms/object_create.py:197 dcim/forms/object_create.py:353 -#: dcim/tables/devices.py:165 dcim/tables/devices.py:707 -#: dcim/tables/devicetypes.py:246 templates/dcim/device.html:43 -#: templates/dcim/device.html:131 templates/dcim/modulebay.html:38 -#: templates/dcim/virtualchassis.html:66 -#: templates/dcim/virtualchassis_edit.html:55 +#: 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/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/templates/dcim/device.html:43 netbox/templates/dcim/device.html:131 +#: netbox/templates/dcim/modulebay.html:38 +#: netbox/templates/dcim/virtualchassis.html:66 +#: netbox/templates/dcim/virtualchassis_edit.html:55 msgid "Position" msgstr "Positie" -#: dcim/forms/bulk_create.py:114 +#: netbox/dcim/forms/bulk_create.py:114 msgid "" "Alphanumeric ranges are supported. (Must match the number of names being " "created.)" @@ -3128,826 +3458,923 @@ msgstr "" "Alfanumerieke reeksen worden ondersteund. (Moet overeenkomen met het aantal " "namen dat wordt aangemaakt.)" -#: dcim/forms/bulk_edit.py:132 +#: netbox/dcim/forms/bulk_edit.py:133 msgid "Contact name" msgstr "Naam van de contactpersoon" -#: dcim/forms/bulk_edit.py:137 +#: netbox/dcim/forms/bulk_edit.py:138 msgid "Contact phone" msgstr "Telefoonnummer contacteren" -#: dcim/forms/bulk_edit.py:143 +#: netbox/dcim/forms/bulk_edit.py:144 msgid "Contact E-mail" msgstr "E-mailadres voor contact" -#: dcim/forms/bulk_edit.py:146 dcim/forms/bulk_import.py:123 -#: dcim/forms/model_forms.py:128 +#: netbox/dcim/forms/bulk_edit.py:147 netbox/dcim/forms/bulk_import.py:123 +#: netbox/dcim/forms/model_forms.py:128 msgid "Time zone" msgstr "Tijdzone" -#: dcim/forms/bulk_edit.py:224 dcim/forms/bulk_edit.py:495 -#: dcim/forms/bulk_edit.py:559 dcim/forms/bulk_edit.py:632 -#: dcim/forms/bulk_edit.py:656 dcim/forms/bulk_edit.py:740 -#: dcim/forms/bulk_edit.py:1267 dcim/forms/bulk_edit.py:1660 -#: dcim/forms/bulk_import.py:182 dcim/forms/bulk_import.py:371 -#: dcim/forms/bulk_import.py:405 dcim/forms/bulk_import.py:450 -#: dcim/forms/bulk_import.py:486 dcim/forms/bulk_import.py:1082 -#: dcim/forms/filtersets.py:313 dcim/forms/filtersets.py:372 -#: dcim/forms/filtersets.py:494 dcim/forms/filtersets.py:619 -#: dcim/forms/filtersets.py:700 dcim/forms/filtersets.py:782 -#: dcim/forms/filtersets.py:947 dcim/forms/filtersets.py:1539 -#: dcim/forms/model_forms.py:207 dcim/forms/model_forms.py:337 -#: dcim/forms/model_forms.py:349 dcim/forms/model_forms.py:395 -#: dcim/forms/model_forms.py:436 dcim/forms/model_forms.py:1075 -#: dcim/forms/model_forms.py:1515 dcim/forms/object_import.py:187 -#: dcim/tables/devices.py:96 dcim/tables/devices.py:172 -#: dcim/tables/devices.py:940 dcim/tables/devicetypes.py:80 -#: dcim/tables/devicetypes.py:308 dcim/tables/modules.py:20 -#: dcim/tables/modules.py:60 dcim/tables/racks.py:58 dcim/tables/racks.py:132 -#: templates/dcim/devicetype.html:14 templates/dcim/inventoryitem.html:44 -#: templates/dcim/manufacturer.html:33 templates/dcim/modulebay.html:62 -#: templates/dcim/moduletype.html:25 templates/dcim/platform.html:37 -#: templates/dcim/racktype.html:16 +#: 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/tables/modules.py:60 +#: 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/templates/dcim/manufacturer.html:33 +#: netbox/templates/dcim/modulebay.html:62 +#: netbox/templates/dcim/moduletype.html:25 +#: netbox/templates/dcim/platform.html:37 +#: netbox/templates/dcim/racktype.html:16 msgid "Manufacturer" msgstr "Fabrikant" -#: dcim/forms/bulk_edit.py:229 dcim/forms/bulk_edit.py:372 -#: dcim/forms/bulk_import.py:191 dcim/forms/bulk_import.py:263 -#: dcim/forms/filtersets.py:255 -#: templates/dcim/inc/panels/racktype_dimensions.html:6 +#: 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/templates/dcim/inc/panels/racktype_dimensions.html:6 msgid "Form factor" msgstr "Vormfactor" -#: dcim/forms/bulk_edit.py:234 dcim/forms/bulk_edit.py:377 -#: dcim/forms/bulk_import.py:199 dcim/forms/bulk_import.py:266 -#: dcim/forms/filtersets.py:260 -#: templates/dcim/inc/panels/racktype_dimensions.html:10 +#: 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/templates/dcim/inc/panels/racktype_dimensions.html:10 msgid "Width" msgstr "Breedte" -#: dcim/forms/bulk_edit.py:240 dcim/forms/bulk_edit.py:383 -#: templates/dcim/devicetype.html:37 +#: netbox/dcim/forms/bulk_edit.py:241 netbox/dcim/forms/bulk_edit.py:389 +#: netbox/dcim/forms/bulk_import.py:280 +#: netbox/templates/dcim/devicetype.html:37 msgid "Height (U)" msgstr "Hoogte (U)" -#: dcim/forms/bulk_edit.py:249 dcim/forms/bulk_edit.py:388 -#: dcim/forms/filtersets.py:274 +#: netbox/dcim/forms/bulk_edit.py:250 netbox/dcim/forms/bulk_edit.py:394 +#: netbox/dcim/forms/filtersets.py:274 msgid "Descending units" msgstr "Aflopende eenheden" -#: dcim/forms/bulk_edit.py:252 dcim/forms/bulk_edit.py:391 +#: netbox/dcim/forms/bulk_edit.py:253 netbox/dcim/forms/bulk_edit.py:397 msgid "Outer width" msgstr "Buitenbreedte" -#: dcim/forms/bulk_edit.py:257 dcim/forms/bulk_edit.py:396 +#: netbox/dcim/forms/bulk_edit.py:258 netbox/dcim/forms/bulk_edit.py:402 msgid "Outer depth" msgstr "Buitendiepte" -#: dcim/forms/bulk_edit.py:262 dcim/forms/bulk_edit.py:401 -#: dcim/forms/bulk_import.py:204 dcim/forms/bulk_import.py:271 +#: 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 msgid "Outer unit" msgstr "Buitenste eenheid" -#: dcim/forms/bulk_edit.py:267 dcim/forms/bulk_edit.py:406 +#: netbox/dcim/forms/bulk_edit.py:268 netbox/dcim/forms/bulk_edit.py:412 msgid "Mounting depth" msgstr "Inbouwdiepte" -#: dcim/forms/bulk_edit.py:272 dcim/forms/bulk_edit.py:299 -#: dcim/forms/bulk_edit.py:416 dcim/forms/bulk_edit.py:446 -#: dcim/forms/bulk_edit.py:529 dcim/forms/bulk_edit.py:552 -#: dcim/forms/bulk_edit.py:573 dcim/forms/bulk_edit.py:595 -#: dcim/forms/bulk_import.py:384 dcim/forms/bulk_import.py:416 -#: dcim/forms/filtersets.py:285 dcim/forms/filtersets.py:307 -#: dcim/forms/filtersets.py:327 dcim/forms/filtersets.py:401 -#: dcim/forms/filtersets.py:488 dcim/forms/filtersets.py:594 -#: dcim/forms/filtersets.py:613 dcim/forms/filtersets.py:674 -#: dcim/forms/model_forms.py:221 dcim/forms/model_forms.py:298 -#: dcim/tables/devicetypes.py:106 dcim/tables/modules.py:35 -#: dcim/tables/racks.py:74 dcim/tables/racks.py:172 -#: extras/forms/bulk_edit.py:53 extras/forms/bulk_edit.py:133 -#: extras/forms/bulk_edit.py:183 extras/forms/bulk_edit.py:288 -#: extras/forms/filtersets.py:64 extras/forms/filtersets.py:156 -#: extras/forms/filtersets.py:243 ipam/forms/bulk_edit.py:190 -#: templates/dcim/device.html:324 templates/dcim/devicetype.html:49 -#: templates/dcim/moduletype.html:45 templates/dcim/rack.html:81 -#: templates/dcim/racktype.html:41 templates/extras/configcontext.html:17 -#: templates/extras/customlink.html:25 templates/extras/savedfilter.html:33 -#: templates/ipam/role.html:30 +#: netbox/dcim/forms/bulk_edit.py: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/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/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/racktype.html:41 +#: netbox/templates/extras/configcontext.html:17 +#: netbox/templates/extras/customlink.html:25 +#: netbox/templates/extras/savedfilter.html:33 +#: netbox/templates/ipam/role.html:30 msgid "Weight" msgstr "Gewicht" -#: dcim/forms/bulk_edit.py:277 dcim/forms/bulk_edit.py:421 -#: dcim/forms/filtersets.py:290 +#: netbox/dcim/forms/bulk_edit.py:278 netbox/dcim/forms/bulk_edit.py:427 +#: netbox/dcim/forms/filtersets.py:290 msgid "Max weight" msgstr "Maximaal gewicht" -#: dcim/forms/bulk_edit.py:282 dcim/forms/bulk_edit.py:426 -#: dcim/forms/bulk_edit.py:534 dcim/forms/bulk_edit.py:578 -#: dcim/forms/bulk_import.py:210 dcim/forms/bulk_import.py:283 -#: dcim/forms/bulk_import.py:389 dcim/forms/bulk_import.py:421 -#: dcim/forms/filtersets.py:295 dcim/forms/filtersets.py:598 -#: dcim/forms/filtersets.py:678 +#: 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 msgid "Weight unit" msgstr "Gewichtseenheid" -#: dcim/forms/bulk_edit.py:296 dcim/forms/filtersets.py:305 -#: dcim/forms/model_forms.py:217 dcim/forms/model_forms.py:256 -#: templates/dcim/rack.html:45 templates/dcim/racktype.html:13 +#: 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/templates/dcim/rack.html:45 netbox/templates/dcim/racktype.html:13 msgid "Rack Type" msgstr "Racktype" -#: dcim/forms/bulk_edit.py:298 dcim/forms/model_forms.py:220 -#: dcim/forms/model_forms.py:297 +#: netbox/dcim/forms/bulk_edit.py:299 netbox/dcim/forms/model_forms.py:220 +#: netbox/dcim/forms/model_forms.py:297 msgid "Outer Dimensions" msgstr "Buitenafmetingen" -#: dcim/forms/bulk_edit.py:301 dcim/forms/model_forms.py:222 -#: dcim/forms/model_forms.py:299 templates/dcim/device.html:315 -#: templates/dcim/inc/panels/racktype_dimensions.html:3 +#: 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/templates/dcim/inc/panels/racktype_dimensions.html:3 msgid "Dimensions" msgstr "Dimensies" -#: dcim/forms/bulk_edit.py:303 dcim/forms/filtersets.py:306 -#: dcim/forms/filtersets.py:326 dcim/forms/model_forms.py:224 -#: templates/dcim/inc/panels/racktype_numbering.html:3 +#: 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/templates/dcim/inc/panels/racktype_numbering.html:3 msgid "Numbering" msgstr "Nummering" -#: dcim/forms/bulk_edit.py:357 dcim/forms/bulk_edit.py:1262 -#: dcim/forms/bulk_edit.py:1655 dcim/forms/bulk_import.py:253 -#: dcim/forms/bulk_import.py:1076 dcim/forms/filtersets.py:367 -#: dcim/forms/filtersets.py:777 dcim/forms/filtersets.py:1534 -#: dcim/forms/model_forms.py:251 dcim/forms/model_forms.py:1070 -#: dcim/forms/model_forms.py:1510 dcim/forms/object_import.py:181 -#: dcim/tables/devices.py:169 dcim/tables/devices.py:809 -#: dcim/tables/devices.py:937 dcim/tables/devicetypes.py:304 -#: dcim/tables/racks.py:129 extras/filtersets.py:552 -#: ipam/forms/bulk_edit.py:261 ipam/forms/bulk_edit.py:311 -#: ipam/forms/bulk_edit.py:359 ipam/forms/bulk_edit.py:511 -#: ipam/forms/bulk_import.py:197 ipam/forms/bulk_import.py:262 -#: ipam/forms/bulk_import.py:298 ipam/forms/bulk_import.py:455 -#: ipam/forms/filtersets.py:237 ipam/forms/filtersets.py:289 -#: ipam/forms/filtersets.py:360 ipam/forms/filtersets.py:509 -#: ipam/forms/model_forms.py:188 ipam/forms/model_forms.py:221 -#: ipam/forms/model_forms.py:250 ipam/forms/model_forms.py:643 -#: ipam/tables/ip.py:258 ipam/tables/ip.py:316 ipam/tables/ip.py:367 -#: ipam/tables/vlans.py:130 ipam/tables/vlans.py:235 -#: templates/dcim/device.html:182 -#: templates/dcim/inc/panels/inventory_items.html:20 -#: templates/dcim/interface.html:223 templates/dcim/inventoryitem.html:36 -#: templates/dcim/rack.html:49 templates/ipam/ipaddress.html:41 -#: templates/ipam/iprange.html:50 templates/ipam/prefix.html:77 -#: templates/ipam/role.html:19 templates/ipam/vlan.html:52 -#: templates/virtualization/virtualmachine.html:23 -#: templates/vpn/tunneltermination.html:17 -#: templates/wireless/inc/wirelesslink_interface.html:20 -#: tenancy/forms/bulk_edit.py:142 tenancy/forms/filtersets.py:107 -#: tenancy/forms/model_forms.py:137 tenancy/tables/contacts.py:102 -#: virtualization/forms/bulk_edit.py:145 -#: virtualization/forms/bulk_import.py:106 -#: virtualization/forms/filtersets.py:157 -#: virtualization/forms/model_forms.py:195 -#: virtualization/tables/virtualmachines.py:75 vpn/forms/bulk_edit.py:87 -#: vpn/forms/bulk_import.py:81 vpn/forms/filtersets.py:85 -#: vpn/forms/model_forms.py:78 vpn/forms/model_forms.py:113 -#: vpn/tables/tunnels.py:82 +#: netbox/dcim/forms/bulk_edit.py: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" -#: dcim/forms/bulk_edit.py:364 dcim/forms/bulk_edit.py:712 -#: dcim/forms/bulk_edit.py:764 templates/dcim/device.html:104 -#: templates/dcim/module.html:77 templates/dcim/modulebay.html:70 -#: templates/dcim/rack.html:57 templates/virtualization/virtualmachine.html:35 +#: netbox/dcim/forms/bulk_edit.py:363 netbox/dcim/forms/bulk_import.py:260 +#: netbox/dcim/forms/filtersets.py:380 +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/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" -#: dcim/forms/bulk_edit.py:367 dcim/forms/filtersets.py:387 -#: dcim/forms/filtersets.py:813 dcim/forms/filtersets.py:967 -#: dcim/forms/filtersets.py:1546 +#: 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 msgid "Asset tag" msgstr "Tag voor bedrijfsmiddelen" -#: dcim/forms/bulk_edit.py:411 dcim/forms/bulk_edit.py:524 -#: dcim/forms/bulk_edit.py:568 dcim/forms/bulk_edit.py:705 -#: dcim/forms/bulk_import.py:277 dcim/forms/bulk_import.py:410 -#: dcim/forms/bulk_import.py:580 dcim/forms/filtersets.py:280 -#: dcim/forms/filtersets.py:511 dcim/forms/filtersets.py:669 -#: dcim/forms/filtersets.py:804 templates/dcim/device.html:98 -#: templates/dcim/devicetype.html:65 templates/dcim/moduletype.html:41 -#: templates/dcim/rack.html:65 templates/dcim/racktype.html:28 +#: 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/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 "Luchtstroom" -#: dcim/forms/bulk_edit.py:440 dcim/forms/bulk_edit.py:910 -#: dcim/forms/bulk_import.py:322 dcim/forms/bulk_import.py:325 -#: dcim/forms/bulk_import.py:553 dcim/forms/bulk_import.py:1358 -#: dcim/forms/bulk_import.py:1362 dcim/forms/filtersets.py:104 -#: dcim/forms/filtersets.py:324 dcim/forms/filtersets.py:405 -#: dcim/forms/filtersets.py:419 dcim/forms/filtersets.py:457 -#: dcim/forms/filtersets.py:772 dcim/forms/filtersets.py:1035 -#: dcim/forms/filtersets.py:1167 dcim/forms/model_forms.py:264 -#: dcim/forms/model_forms.py:306 dcim/forms/model_forms.py:479 -#: dcim/forms/model_forms.py:755 dcim/forms/object_create.py:400 -#: dcim/tables/devices.py:161 dcim/tables/power.py:70 dcim/tables/racks.py:217 -#: ipam/forms/filtersets.py:442 templates/dcim/device.html:30 -#: templates/dcim/inc/cable_termination.html:16 -#: templates/dcim/powerfeed.html:28 templates/dcim/rack.html:13 -#: templates/dcim/rack/base.html:4 templates/dcim/rackreservation.html:19 -#: templates/dcim/rackreservation.html:36 -#: virtualization/forms/model_forms.py:113 +#: netbox/dcim/forms/bulk_edit.py: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/templates/dcim/device.html:30 +#: netbox/templates/dcim/inc/cable_termination.html:16 +#: netbox/templates/dcim/powerfeed.html:28 netbox/templates/dcim/rack.html:13 +#: netbox/templates/dcim/rack/base.html:4 +#: netbox/templates/dcim/rackreservation.html:19 +#: netbox/templates/dcim/rackreservation.html:36 +#: netbox/virtualization/forms/model_forms.py:113 msgid "Rack" msgstr "Rek" -#: dcim/forms/bulk_edit.py:444 dcim/forms/bulk_edit.py:730 -#: dcim/forms/filtersets.py:325 dcim/forms/filtersets.py:398 -#: dcim/forms/filtersets.py:481 dcim/forms/filtersets.py:608 -#: dcim/forms/filtersets.py:721 dcim/forms/filtersets.py:942 -#: dcim/forms/model_forms.py:670 dcim/forms/model_forms.py:1580 -#: templates/dcim/device_edit.html:20 +#: 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/templates/dcim/device_edit.html:20 msgid "Hardware" msgstr "Hardware" -#: dcim/forms/bulk_edit.py:500 dcim/forms/bulk_import.py:377 -#: dcim/forms/filtersets.py:499 dcim/forms/model_forms.py:353 +#: 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 msgid "Default platform" msgstr "Standaardplatform" -#: dcim/forms/bulk_edit.py:505 dcim/forms/bulk_edit.py:564 -#: dcim/forms/filtersets.py:502 dcim/forms/filtersets.py:622 +#: 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 msgid "Part number" msgstr "Onderdeelnummer" -#: dcim/forms/bulk_edit.py:509 +#: netbox/dcim/forms/bulk_edit.py:515 msgid "U height" msgstr "U-hoogte" -#: dcim/forms/bulk_edit.py:521 dcim/tables/devicetypes.py:102 +#: netbox/dcim/forms/bulk_edit.py:527 netbox/dcim/tables/devicetypes.py:102 msgid "Exclude from utilization" msgstr "Uitsluiten van gebruik" -#: dcim/forms/bulk_edit.py:550 dcim/forms/model_forms.py:368 -#: dcim/tables/devicetypes.py:77 templates/dcim/device.html:88 -#: templates/dcim/devicebay.html:52 templates/dcim/module.html:61 +#: 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/templates/dcim/devicebay.html:52 +#: netbox/templates/dcim/module.html:61 msgid "Device Type" msgstr "Soort apparaat" -#: dcim/forms/bulk_edit.py:592 dcim/forms/model_forms.py:401 -#: dcim/tables/modules.py:17 dcim/tables/modules.py:65 -#: templates/dcim/module.html:65 templates/dcim/modulebay.html:66 -#: templates/dcim/moduletype.html:22 +#: 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/templates/dcim/module.html:65 +#: netbox/templates/dcim/modulebay.html:66 +#: netbox/templates/dcim/moduletype.html:22 msgid "Module Type" msgstr "Moduletype" -#: dcim/forms/bulk_edit.py:596 dcim/forms/model_forms.py:371 -#: dcim/forms/model_forms.py:402 templates/dcim/devicetype.html:11 +#: netbox/dcim/forms/bulk_edit.py:602 netbox/dcim/forms/model_forms.py:371 +#: netbox/dcim/forms/model_forms.py:402 +#: netbox/templates/dcim/devicetype.html:11 msgid "Chassis" msgstr "Chassis" -#: dcim/forms/bulk_edit.py:610 dcim/models/devices.py:484 -#: dcim/tables/devices.py:67 +#: netbox/dcim/forms/bulk_edit.py:616 netbox/dcim/models/devices.py:484 +#: netbox/dcim/tables/devices.py:67 msgid "VM role" msgstr "VM-rol" -#: dcim/forms/bulk_edit.py:613 dcim/forms/bulk_edit.py:637 -#: dcim/forms/bulk_edit.py:720 dcim/forms/bulk_import.py:434 -#: dcim/forms/bulk_import.py:438 dcim/forms/bulk_import.py:457 -#: dcim/forms/bulk_import.py:461 dcim/forms/bulk_import.py:586 -#: dcim/forms/bulk_import.py:590 dcim/forms/filtersets.py:689 -#: dcim/forms/filtersets.py:705 dcim/forms/filtersets.py:823 -#: dcim/forms/model_forms.py:415 dcim/forms/model_forms.py:441 -#: dcim/forms/model_forms.py:555 virtualization/forms/bulk_import.py:132 -#: virtualization/forms/bulk_import.py:133 -#: virtualization/forms/filtersets.py:188 -#: virtualization/forms/model_forms.py:215 +#: 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 msgid "Config template" msgstr "Configuratiesjabloon" -#: dcim/forms/bulk_edit.py:661 dcim/forms/bulk_edit.py:1061 -#: dcim/forms/bulk_import.py:492 dcim/forms/filtersets.py:114 -#: dcim/forms/model_forms.py:501 dcim/forms/model_forms.py:872 -#: dcim/forms/model_forms.py:889 extras/filtersets.py:547 +#: 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 msgid "Device type" msgstr "Soort apparaat" -#: dcim/forms/bulk_edit.py:672 dcim/forms/bulk_import.py:473 -#: dcim/forms/filtersets.py:119 dcim/forms/model_forms.py:509 +#: 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 msgid "Device role" msgstr "Rol van het apparaat" -#: dcim/forms/bulk_edit.py:695 dcim/forms/bulk_import.py:498 -#: dcim/forms/filtersets.py:796 dcim/forms/model_forms.py:451 -#: dcim/forms/model_forms.py:513 dcim/tables/devices.py:182 -#: extras/filtersets.py:563 templates/dcim/device.html:186 -#: templates/dcim/platform.html:26 -#: templates/virtualization/virtualmachine.html:27 -#: virtualization/forms/bulk_edit.py:160 -#: virtualization/forms/bulk_import.py:122 -#: virtualization/forms/filtersets.py:168 -#: virtualization/forms/model_forms.py:203 -#: virtualization/tables/virtualmachines.py:79 +#: 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/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 msgid "Platform" msgstr "Platform" -#: dcim/forms/bulk_edit.py:728 dcim/forms/bulk_edit.py:1281 -#: dcim/forms/bulk_edit.py:1650 dcim/forms/bulk_edit.py:1696 -#: dcim/forms/bulk_import.py:641 dcim/forms/bulk_import.py:703 -#: dcim/forms/bulk_import.py:729 dcim/forms/bulk_import.py:755 -#: dcim/forms/bulk_import.py:775 dcim/forms/bulk_import.py:828 -#: dcim/forms/bulk_import.py:946 dcim/forms/bulk_import.py:994 -#: dcim/forms/bulk_import.py:1011 dcim/forms/bulk_import.py:1023 -#: dcim/forms/bulk_import.py:1071 dcim/forms/bulk_import.py:1422 -#: dcim/forms/connections.py:24 dcim/forms/filtersets.py:131 -#: dcim/forms/filtersets.py:921 dcim/forms/filtersets.py:1051 -#: dcim/forms/filtersets.py:1242 dcim/forms/filtersets.py:1267 -#: dcim/forms/filtersets.py:1291 dcim/forms/filtersets.py:1311 -#: dcim/forms/filtersets.py:1334 dcim/forms/filtersets.py:1444 -#: dcim/forms/filtersets.py:1469 dcim/forms/filtersets.py:1493 -#: dcim/forms/filtersets.py:1511 dcim/forms/filtersets.py:1528 -#: dcim/forms/filtersets.py:1592 dcim/forms/filtersets.py:1616 -#: dcim/forms/filtersets.py:1640 dcim/forms/model_forms.py:633 -#: dcim/forms/model_forms.py:849 dcim/forms/model_forms.py:1208 -#: dcim/forms/model_forms.py:1664 dcim/forms/object_create.py:257 -#: dcim/tables/connections.py:22 dcim/tables/connections.py:41 -#: dcim/tables/connections.py:60 dcim/tables/devices.py:285 -#: dcim/tables/devices.py:371 dcim/tables/devices.py:412 -#: dcim/tables/devices.py:454 dcim/tables/devices.py:505 -#: dcim/tables/devices.py:597 dcim/tables/devices.py:697 -#: dcim/tables/devices.py:754 dcim/tables/devices.py:801 -#: dcim/tables/devices.py:861 dcim/tables/devices.py:930 -#: dcim/tables/devices.py:1057 dcim/tables/modules.py:52 -#: extras/forms/filtersets.py:321 ipam/forms/bulk_import.py:304 -#: ipam/forms/bulk_import.py:481 ipam/forms/filtersets.py:551 -#: ipam/forms/model_forms.py:319 ipam/forms/model_forms.py:679 -#: ipam/forms/model_forms.py:712 ipam/forms/model_forms.py:738 -#: ipam/tables/vlans.py:180 templates/dcim/consoleport.html:20 -#: templates/dcim/consoleserverport.html:20 templates/dcim/device.html:15 -#: templates/dcim/device.html:130 templates/dcim/device_edit.html:10 -#: templates/dcim/devicebay.html:20 templates/dcim/devicebay.html:48 -#: templates/dcim/frontport.html:20 templates/dcim/interface.html:30 -#: templates/dcim/interface.html:161 templates/dcim/inventoryitem.html:20 -#: templates/dcim/module.html:57 templates/dcim/modulebay.html:20 -#: templates/dcim/poweroutlet.html:20 templates/dcim/powerport.html:20 -#: templates/dcim/rearport.html:20 templates/dcim/virtualchassis.html:65 -#: templates/dcim/virtualchassis_edit.html:51 -#: templates/dcim/virtualdevicecontext.html:22 -#: templates/virtualization/virtualmachine.html:114 -#: templates/vpn/tunneltermination.html:23 -#: templates/wireless/inc/wirelesslink_interface.html:6 -#: virtualization/filtersets.py:167 virtualization/forms/bulk_edit.py:137 -#: virtualization/forms/bulk_import.py:99 -#: virtualization/forms/filtersets.py:128 -#: virtualization/forms/model_forms.py:185 -#: virtualization/tables/virtualmachines.py:71 vpn/choices.py:44 -#: vpn/forms/bulk_import.py:86 vpn/forms/bulk_import.py:283 -#: vpn/forms/filtersets.py:275 vpn/forms/model_forms.py:90 -#: vpn/forms/model_forms.py:125 vpn/forms/model_forms.py:236 -#: vpn/forms/model_forms.py:453 wireless/forms/model_forms.py:99 -#: wireless/forms/model_forms.py:141 wireless/tables/wirelesslan.py:75 +#: netbox/dcim/forms/bulk_edit.py: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/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 +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:52 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" -#: dcim/forms/bulk_edit.py:731 templates/extras/dashboard/widget_config.html:7 -#: virtualization/forms/bulk_edit.py:191 +#: netbox/dcim/forms/bulk_edit.py:745 +#: netbox/templates/extras/dashboard/widget_config.html:7 +#: netbox/virtualization/forms/bulk_edit.py:191 msgid "Configuration" msgstr "Configuratie" -#: dcim/forms/bulk_edit.py:745 dcim/forms/bulk_import.py:653 -#: dcim/forms/model_forms.py:647 dcim/forms/model_forms.py:897 +#: netbox/dcim/forms/bulk_edit.py:746 netbox/netbox/navigation/menu.py:243 +#: 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 msgid "Module type" msgstr "Moduletype" -#: dcim/forms/bulk_edit.py:799 dcim/forms/bulk_edit.py:984 -#: dcim/forms/bulk_edit.py:1003 dcim/forms/bulk_edit.py:1026 -#: dcim/forms/bulk_edit.py:1068 dcim/forms/bulk_edit.py:1112 -#: dcim/forms/bulk_edit.py:1163 dcim/forms/bulk_edit.py:1190 -#: dcim/forms/bulk_edit.py:1217 dcim/forms/bulk_edit.py:1235 -#: dcim/forms/bulk_edit.py:1253 dcim/forms/filtersets.py:67 -#: dcim/forms/object_create.py:46 templates/dcim/cable.html:32 -#: templates/dcim/consoleport.html:32 templates/dcim/consoleserverport.html:32 -#: templates/dcim/devicebay.html:28 templates/dcim/frontport.html:32 -#: templates/dcim/inc/panels/inventory_items.html:19 -#: templates/dcim/interface.html:42 templates/dcim/inventoryitem.html:32 -#: templates/dcim/modulebay.html:34 templates/dcim/poweroutlet.html:32 -#: templates/dcim/powerport.html:32 templates/dcim/rearport.html:32 -#: templates/extras/customfield.html:26 templates/generic/bulk_import.html:162 +#: netbox/dcim/forms/bulk_edit.py: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/object_create.py:46 netbox/templates/dcim/cable.html:32 +#: netbox/templates/dcim/consoleport.html:32 +#: netbox/templates/dcim/consoleserverport.html:32 +#: netbox/templates/dcim/devicebay.html:28 +#: netbox/templates/dcim/frontport.html:32 +#: netbox/templates/dcim/inc/panels/inventory_items.html:19 +#: netbox/templates/dcim/interface.html:42 +#: netbox/templates/dcim/inventoryitem.html:32 +#: netbox/templates/dcim/modulebay.html:34 +#: netbox/templates/dcim/poweroutlet.html:32 +#: netbox/templates/dcim/powerport.html:32 +#: netbox/templates/dcim/rearport.html:32 +#: netbox/templates/extras/customfield.html:26 +#: netbox/templates/generic/bulk_import.html:162 msgid "Label" msgstr "Label" -#: dcim/forms/bulk_edit.py:808 dcim/forms/filtersets.py:1068 -#: templates/dcim/cable.html:50 +#: netbox/dcim/forms/bulk_edit.py:823 netbox/dcim/forms/filtersets.py:1068 +#: netbox/templates/dcim/cable.html:50 msgid "Length" msgstr "Lengte" -#: dcim/forms/bulk_edit.py:813 dcim/forms/bulk_import.py:1226 -#: dcim/forms/bulk_import.py:1229 dcim/forms/filtersets.py:1072 +#: 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 msgid "Length unit" msgstr "Lengte-eenheid" -#: dcim/forms/bulk_edit.py:837 templates/dcim/virtualchassis.html:23 +#: netbox/dcim/forms/bulk_edit.py:852 +#: netbox/templates/dcim/virtualchassis.html:23 msgid "Domain" msgstr "Domein" -#: dcim/forms/bulk_edit.py:905 dcim/forms/bulk_import.py:1345 -#: dcim/forms/filtersets.py:1158 dcim/forms/model_forms.py:750 +#: 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 msgid "Power panel" msgstr "Voedingspaneel" -#: dcim/forms/bulk_edit.py:927 dcim/forms/bulk_import.py:1381 -#: dcim/forms/filtersets.py:1180 templates/dcim/powerfeed.html:83 +#: 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 msgid "Supply" msgstr "Levering" -#: dcim/forms/bulk_edit.py:933 dcim/forms/bulk_import.py:1386 -#: dcim/forms/filtersets.py:1185 templates/dcim/powerfeed.html:95 +#: 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 msgid "Phase" msgstr "Fase" -#: dcim/forms/bulk_edit.py:939 dcim/forms/filtersets.py:1190 -#: templates/dcim/powerfeed.html:87 +#: netbox/dcim/forms/bulk_edit.py:954 netbox/dcim/forms/filtersets.py:1190 +#: netbox/templates/dcim/powerfeed.html:87 msgid "Voltage" msgstr "Spanning" -#: dcim/forms/bulk_edit.py:943 dcim/forms/filtersets.py:1194 -#: templates/dcim/powerfeed.html:91 +#: netbox/dcim/forms/bulk_edit.py:958 netbox/dcim/forms/filtersets.py:1194 +#: netbox/templates/dcim/powerfeed.html:91 msgid "Amperage" msgstr "Stroomsterkte" -#: dcim/forms/bulk_edit.py:947 dcim/forms/filtersets.py:1198 +#: netbox/dcim/forms/bulk_edit.py:962 netbox/dcim/forms/filtersets.py:1198 msgid "Max utilization" msgstr "Maximaal gebruik" -#: dcim/forms/bulk_edit.py:1036 +#: netbox/dcim/forms/bulk_edit.py:1051 msgid "Maximum draw" msgstr "Maximale trekking" -#: dcim/forms/bulk_edit.py:1039 dcim/models/device_component_templates.py:282 -#: dcim/models/device_components.py:356 +#: netbox/dcim/forms/bulk_edit.py:1054 +#: netbox/dcim/models/device_component_templates.py:282 +#: netbox/dcim/models/device_components.py:356 msgid "Maximum power draw (watts)" msgstr "Maximaal stroomverbruik (watt)" -#: dcim/forms/bulk_edit.py:1042 +#: netbox/dcim/forms/bulk_edit.py:1057 msgid "Allocated draw" msgstr "Toegewezen loting" -#: dcim/forms/bulk_edit.py:1045 dcim/models/device_component_templates.py:289 -#: dcim/models/device_components.py:363 +#: netbox/dcim/forms/bulk_edit.py:1060 +#: netbox/dcim/models/device_component_templates.py:289 +#: netbox/dcim/models/device_components.py:363 msgid "Allocated power draw (watts)" msgstr "Toegewezen stroomverbruik (watt)" -#: dcim/forms/bulk_edit.py:1078 dcim/forms/bulk_import.py:786 -#: dcim/forms/model_forms.py:953 dcim/forms/model_forms.py:1278 -#: dcim/forms/model_forms.py:1567 dcim/forms/object_import.py:55 +#: 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 msgid "Power port" msgstr "Voedingspoort" -#: dcim/forms/bulk_edit.py:1083 dcim/forms/bulk_import.py:793 +#: netbox/dcim/forms/bulk_edit.py:1098 netbox/dcim/forms/bulk_import.py:815 msgid "Feed leg" msgstr "Voer de poot in" -#: dcim/forms/bulk_edit.py:1129 dcim/forms/bulk_edit.py:1440 +#: netbox/dcim/forms/bulk_edit.py:1144 netbox/dcim/forms/bulk_edit.py:1462 msgid "Management only" msgstr "Alleen voor beheer" -#: dcim/forms/bulk_edit.py:1139 dcim/forms/bulk_edit.py:1446 -#: dcim/forms/bulk_import.py:876 dcim/forms/filtersets.py:1394 -#: dcim/forms/object_import.py:90 -#: dcim/models/device_component_templates.py:437 -#: dcim/models/device_components.py:670 +#: 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/object_import.py:90 +#: netbox/dcim/models/device_component_templates.py:437 +#: netbox/dcim/models/device_components.py:670 msgid "PoE mode" msgstr "PoE-modus" -#: dcim/forms/bulk_edit.py:1145 dcim/forms/bulk_edit.py:1452 -#: dcim/forms/bulk_import.py:882 dcim/forms/filtersets.py:1399 -#: dcim/forms/object_import.py:95 -#: dcim/models/device_component_templates.py:443 -#: dcim/models/device_components.py:676 +#: 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/object_import.py:95 +#: netbox/dcim/models/device_component_templates.py:443 +#: netbox/dcim/models/device_components.py:676 msgid "PoE type" msgstr "PoE-type" -#: dcim/forms/bulk_edit.py:1151 dcim/forms/filtersets.py:1404 -#: dcim/forms/object_import.py:100 +#: netbox/dcim/forms/bulk_edit.py:1166 netbox/dcim/forms/filtersets.py:1404 +#: netbox/dcim/forms/object_import.py:100 msgid "Wireless role" msgstr "Draadloze rol" -#: dcim/forms/bulk_edit.py:1288 dcim/forms/model_forms.py:669 -#: dcim/forms/model_forms.py:1223 dcim/tables/devices.py:313 -#: templates/dcim/consoleport.html:24 templates/dcim/consoleserverport.html:24 -#: templates/dcim/frontport.html:24 templates/dcim/interface.html:34 -#: templates/dcim/module.html:54 templates/dcim/modulebay.html:26 -#: templates/dcim/modulebay.html:58 templates/dcim/poweroutlet.html:24 -#: templates/dcim/powerport.html:24 templates/dcim/rearport.html:24 +#: 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/templates/dcim/consoleport.html:24 +#: netbox/templates/dcim/consoleserverport.html:24 +#: netbox/templates/dcim/frontport.html:24 +#: netbox/templates/dcim/interface.html:34 +#: netbox/templates/dcim/module.html:54 +#: netbox/templates/dcim/modulebay.html:26 +#: netbox/templates/dcim/modulebay.html:58 +#: netbox/templates/dcim/poweroutlet.html:24 +#: netbox/templates/dcim/powerport.html:24 +#: netbox/templates/dcim/rearport.html:24 msgid "Module" msgstr "Module" -#: dcim/forms/bulk_edit.py:1420 dcim/tables/devices.py:665 -#: templates/dcim/interface.html:110 +#: netbox/dcim/forms/bulk_edit.py:1442 netbox/dcim/tables/devices.py:665 +#: netbox/templates/dcim/interface.html:110 msgid "LAG" msgstr "LAG" -#: dcim/forms/bulk_edit.py:1425 dcim/forms/model_forms.py:1305 +#: netbox/dcim/forms/bulk_edit.py:1447 netbox/dcim/forms/model_forms.py:1312 msgid "Virtual device contexts" msgstr "Contexten van virtuele apparaten" -#: dcim/forms/bulk_edit.py:1431 dcim/forms/bulk_import.py:714 -#: dcim/forms/bulk_import.py:740 dcim/forms/filtersets.py:1252 -#: dcim/forms/filtersets.py:1277 dcim/forms/filtersets.py:1358 -#: dcim/tables/devices.py:610 -#: templates/circuits/inc/circuit_termination_fields.html:67 -#: templates/dcim/consoleport.html:40 templates/dcim/consoleserverport.html:40 +#: 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/templates/dcim/consoleport.html:40 +#: netbox/templates/dcim/consoleserverport.html:40 msgid "Speed" msgstr "Snelheid" -#: dcim/forms/bulk_edit.py:1460 dcim/forms/bulk_import.py:885 -#: templates/vpn/ikepolicy.html:25 templates/vpn/ipsecprofile.html:21 -#: templates/vpn/ipsecprofile.html:48 virtualization/forms/bulk_edit.py:233 -#: virtualization/forms/bulk_import.py:165 vpn/forms/bulk_edit.py:146 -#: vpn/forms/bulk_edit.py:232 vpn/forms/bulk_import.py:176 -#: vpn/forms/bulk_import.py:234 vpn/forms/filtersets.py:135 -#: vpn/forms/filtersets.py:178 vpn/forms/filtersets.py:192 -#: vpn/tables/crypto.py:64 vpn/tables/crypto.py:162 +#: netbox/dcim/forms/bulk_edit.py:1482 netbox/dcim/forms/bulk_import.py:907 +#: netbox/templates/vpn/ikepolicy.html:25 +#: netbox/templates/vpn/ipsecprofile.html:21 +#: netbox/templates/vpn/ipsecprofile.html:48 +#: netbox/virtualization/forms/bulk_edit.py:233 +#: netbox/virtualization/forms/bulk_import.py:165 +#: netbox/vpn/forms/bulk_edit.py:146 netbox/vpn/forms/bulk_edit.py:232 +#: netbox/vpn/forms/bulk_import.py:176 netbox/vpn/forms/bulk_import.py:234 +#: netbox/vpn/forms/filtersets.py:135 netbox/vpn/forms/filtersets.py:178 +#: netbox/vpn/forms/filtersets.py:192 netbox/vpn/tables/crypto.py:64 +#: netbox/vpn/tables/crypto.py:162 msgid "Mode" msgstr "Modus" -#: dcim/forms/bulk_edit.py:1468 dcim/forms/model_forms.py:1354 -#: ipam/forms/bulk_import.py:178 ipam/forms/filtersets.py:498 -#: ipam/models/vlans.py:84 virtualization/forms/bulk_edit.py:240 -#: virtualization/forms/model_forms.py:321 +#: 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 msgid "VLAN group" msgstr "VLAN-groep" -#: dcim/forms/bulk_edit.py:1476 dcim/forms/model_forms.py:1360 -#: dcim/tables/devices.py:579 virtualization/forms/bulk_edit.py:248 -#: virtualization/forms/model_forms.py:326 +#: 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 msgid "Untagged VLAN" msgstr "VLAN zonder label" -#: dcim/forms/bulk_edit.py:1484 dcim/forms/model_forms.py:1369 -#: dcim/tables/devices.py:585 virtualization/forms/bulk_edit.py:256 -#: virtualization/forms/model_forms.py:335 +#: 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 "Getagde VLAN's" -#: dcim/forms/bulk_edit.py:1494 dcim/forms/model_forms.py:1341 +#: netbox/dcim/forms/bulk_edit.py:1511 +msgid "Add tagged VLANs" +msgstr "" + +#: netbox/dcim/forms/bulk_edit.py:1520 +msgid "Remove tagged VLANs" +msgstr "" + +#: netbox/dcim/forms/bulk_edit.py:1536 netbox/dcim/forms/model_forms.py:1348 msgid "Wireless LAN group" msgstr "Draadloze LAN-groep" -#: dcim/forms/bulk_edit.py:1499 dcim/forms/model_forms.py:1346 -#: dcim/tables/devices.py:619 netbox/navigation/menu.py:146 -#: templates/dcim/interface.html:280 wireless/tables/wirelesslan.py:24 +#: 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/wireless/tables/wirelesslan.py:24 msgid "Wireless LANs" msgstr "Draadloze LAN's" -#: dcim/forms/bulk_edit.py:1508 dcim/forms/filtersets.py:1328 -#: dcim/forms/model_forms.py:1390 ipam/forms/bulk_edit.py:286 -#: ipam/forms/bulk_edit.py:378 ipam/forms/filtersets.py:169 -#: templates/dcim/interface.html:122 templates/ipam/prefix.html:95 -#: virtualization/forms/model_forms.py:349 +#: netbox/dcim/forms/bulk_edit.py: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 msgid "Addressing" msgstr "Addressing" -#: dcim/forms/bulk_edit.py:1509 dcim/forms/filtersets.py:720 -#: dcim/forms/model_forms.py:1391 virtualization/forms/model_forms.py:350 +#: 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 msgid "Operation" msgstr "Operatie" -#: dcim/forms/bulk_edit.py:1510 dcim/forms/filtersets.py:1329 -#: dcim/forms/model_forms.py:987 dcim/forms/model_forms.py:1393 +#: 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 msgid "PoE" msgstr "PoE" -#: dcim/forms/bulk_edit.py:1511 dcim/forms/model_forms.py:1392 -#: templates/dcim/interface.html:99 virtualization/forms/bulk_edit.py:267 -#: virtualization/forms/model_forms.py:351 +#: 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 msgid "Related Interfaces" msgstr "Gerelateerde interfaces" -#: dcim/forms/bulk_edit.py:1512 dcim/forms/model_forms.py:1394 -#: virtualization/forms/bulk_edit.py:268 -#: virtualization/forms/model_forms.py:352 +#: 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 msgid "802.1Q Switching" msgstr "802.1Q-omschakeling" -#: dcim/forms/bulk_edit.py:1574 dcim/forms/bulk_edit.py:1576 +#: netbox/dcim/forms/bulk_edit.py:1558 +msgid "Add/Remove" +msgstr "" + +#: netbox/dcim/forms/bulk_edit.py:1617 netbox/dcim/forms/bulk_edit.py:1619 msgid "Interface mode must be specified to assign VLANs" msgstr "De interfacemodus moet worden gespecificeerd om VLAN's toe te wijzen" -#: dcim/forms/bulk_edit.py:1581 dcim/forms/common.py:50 +#: netbox/dcim/forms/bulk_edit.py:1624 netbox/dcim/forms/common.py:50 msgid "An access interface cannot have tagged VLANs assigned." msgstr "" "Aan een toegangsinterface kunnen geen gelabelde VLAN's worden toegewezen." -#: dcim/forms/bulk_import.py:64 +#: netbox/dcim/forms/bulk_import.py:64 msgid "Name of parent region" msgstr "Naam van de moederregio" -#: dcim/forms/bulk_import.py:78 +#: netbox/dcim/forms/bulk_import.py:78 msgid "Name of parent site group" msgstr "Naam van de oudersitegroep" -#: dcim/forms/bulk_import.py:97 +#: netbox/dcim/forms/bulk_import.py:97 msgid "Assigned region" msgstr "Toegewezen regio" -#: dcim/forms/bulk_import.py:104 tenancy/forms/bulk_import.py:44 -#: tenancy/forms/bulk_import.py:85 wireless/forms/bulk_import.py:40 +#: netbox/dcim/forms/bulk_import.py:104 netbox/tenancy/forms/bulk_import.py:44 +#: netbox/tenancy/forms/bulk_import.py:85 +#: netbox/wireless/forms/bulk_import.py:40 msgid "Assigned group" msgstr "Toegewezen groep" -#: dcim/forms/bulk_import.py:123 +#: netbox/dcim/forms/bulk_import.py:123 msgid "available options" msgstr "beschikbare opties" -#: dcim/forms/bulk_import.py:134 dcim/forms/bulk_import.py:543 -#: dcim/forms/bulk_import.py:1342 ipam/forms/bulk_import.py:175 -#: ipam/forms/bulk_import.py:433 virtualization/forms/bulk_import.py:63 -#: virtualization/forms/bulk_import.py:89 +#: 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 msgid "Assigned site" msgstr "Toegewezen site" -#: dcim/forms/bulk_import.py:141 +#: netbox/dcim/forms/bulk_import.py:141 msgid "Parent location" msgstr "Locatie van de ouders" -#: dcim/forms/bulk_import.py:143 +#: netbox/dcim/forms/bulk_import.py:143 msgid "Location not found." msgstr "Locatie niet gevonden." -#: dcim/forms/bulk_import.py:185 +#: netbox/dcim/forms/bulk_import.py:185 msgid "The manufacturer of this rack type" msgstr "De fabrikant van dit racktype" -#: dcim/forms/bulk_import.py:196 +#: netbox/dcim/forms/bulk_import.py:196 msgid "The lowest-numbered position in the rack" msgstr "De positie met het laagst genummerde nummer in het rack" -#: dcim/forms/bulk_import.py:201 dcim/forms/bulk_import.py:268 +#: netbox/dcim/forms/bulk_import.py:201 netbox/dcim/forms/bulk_import.py:276 msgid "Rail-to-rail width (in inches)" msgstr "Breedte van rail tot rail (in inches)" -#: dcim/forms/bulk_import.py:207 dcim/forms/bulk_import.py:274 +#: netbox/dcim/forms/bulk_import.py:207 netbox/dcim/forms/bulk_import.py:286 msgid "Unit for outer dimensions" msgstr "Eenheid voor buitenafmetingen" -#: dcim/forms/bulk_import.py:213 dcim/forms/bulk_import.py:286 +#: netbox/dcim/forms/bulk_import.py:213 netbox/dcim/forms/bulk_import.py:298 msgid "Unit for rack weights" msgstr "Eenheid voor rackgewichten" -#: dcim/forms/bulk_import.py:245 +#: netbox/dcim/forms/bulk_import.py:245 msgid "Name of assigned tenant" msgstr "Naam van de toegewezen tenant" -#: dcim/forms/bulk_import.py:257 +#: netbox/dcim/forms/bulk_import.py:257 msgid "Name of assigned role" msgstr "Naam van de toegewezen rol" -#: dcim/forms/bulk_import.py:280 dcim/forms/bulk_import.py:413 -#: dcim/forms/bulk_import.py:583 +#: netbox/dcim/forms/bulk_import.py:264 +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 msgid "Airflow direction" msgstr "Richting van de luchtstroom" -#: dcim/forms/bulk_import.py:312 +#: netbox/dcim/forms/bulk_import.py:324 +msgid "Width must be set if not specifying a rack type." +msgstr "" + +#: netbox/dcim/forms/bulk_import.py:326 +msgid "U height must be set if not specifying a rack type." +msgstr "" + +#: netbox/dcim/forms/bulk_import.py:334 msgid "Parent site" msgstr "Site voor ouders" -#: dcim/forms/bulk_import.py:319 dcim/forms/bulk_import.py:1355 +#: netbox/dcim/forms/bulk_import.py:341 netbox/dcim/forms/bulk_import.py:1377 msgid "Rack's location (if any)" msgstr "Locatie van het rek (indien aanwezig)" -#: dcim/forms/bulk_import.py:328 dcim/forms/model_forms.py:311 -#: dcim/tables/racks.py:222 templates/dcim/rackreservation.html:12 -#: templates/dcim/rackreservation.html:45 +#: netbox/dcim/forms/bulk_import.py:350 netbox/dcim/forms/model_forms.py:311 +#: netbox/dcim/tables/racks.py:222 +#: netbox/templates/dcim/rackreservation.html:12 +#: netbox/templates/dcim/rackreservation.html:45 msgid "Units" msgstr "Eenheden" -#: dcim/forms/bulk_import.py:331 +#: netbox/dcim/forms/bulk_import.py:353 msgid "Comma-separated list of individual unit numbers" msgstr "Door komma's gescheiden lijst van individuele eenheidsnummers" -#: dcim/forms/bulk_import.py:374 +#: netbox/dcim/forms/bulk_import.py:396 msgid "The manufacturer which produces this device type" msgstr "De fabrikant die dit apparaattype produceert" -#: dcim/forms/bulk_import.py:381 +#: netbox/dcim/forms/bulk_import.py:403 msgid "The default platform for devices of this type (optional)" msgstr "Het standaardplatform voor apparaten van dit type (optioneel)" -#: dcim/forms/bulk_import.py:386 +#: netbox/dcim/forms/bulk_import.py:408 msgid "Device weight" msgstr "Gewicht van het apparaat" -#: dcim/forms/bulk_import.py:392 +#: netbox/dcim/forms/bulk_import.py:414 msgid "Unit for device weight" msgstr "Eenheid voor het gewicht van het apparaat" -#: dcim/forms/bulk_import.py:418 +#: netbox/dcim/forms/bulk_import.py:440 msgid "Module weight" msgstr "Gewicht van de module" -#: dcim/forms/bulk_import.py:424 +#: netbox/dcim/forms/bulk_import.py:446 msgid "Unit for module weight" msgstr "Eenheid voor modulegewicht" -#: dcim/forms/bulk_import.py:454 +#: netbox/dcim/forms/bulk_import.py:476 msgid "Limit platform assignments to this manufacturer" msgstr "Beperk de platformtoewijzingen aan deze fabrikant" -#: dcim/forms/bulk_import.py:476 dcim/forms/bulk_import.py:1425 -#: tenancy/forms/bulk_import.py:106 +#: netbox/dcim/forms/bulk_import.py:498 netbox/dcim/forms/bulk_import.py:1447 +#: netbox/tenancy/forms/bulk_import.py:106 msgid "Assigned role" msgstr "Toegewezen rol" -#: dcim/forms/bulk_import.py:489 +#: netbox/dcim/forms/bulk_import.py:511 msgid "Device type manufacturer" msgstr "Apparaattype fabrikant" -#: dcim/forms/bulk_import.py:495 +#: netbox/dcim/forms/bulk_import.py:517 msgid "Device type model" msgstr "Apparaattype model" -#: dcim/forms/bulk_import.py:502 virtualization/forms/bulk_import.py:126 +#: netbox/dcim/forms/bulk_import.py:524 +#: netbox/virtualization/forms/bulk_import.py:126 msgid "Assigned platform" msgstr "Toegewezen platform" -#: dcim/forms/bulk_import.py:510 dcim/forms/bulk_import.py:514 -#: dcim/forms/model_forms.py:536 +#: netbox/dcim/forms/bulk_import.py:532 netbox/dcim/forms/bulk_import.py:536 +#: netbox/dcim/forms/model_forms.py:536 msgid "Virtual chassis" msgstr "Virtueel chassis" -#: dcim/forms/bulk_import.py:517 dcim/forms/filtersets.py:728 -#: dcim/forms/filtersets.py:898 dcim/forms/model_forms.py:522 -#: dcim/tables/devices.py:202 extras/filtersets.py:596 -#: extras/forms/filtersets.py:322 ipam/forms/filtersets.py:415 -#: ipam/forms/filtersets.py:447 templates/dcim/device.html:239 -#: templates/virtualization/cluster.html:10 -#: templates/virtualization/virtualmachine.html:92 -#: templates/virtualization/virtualmachine.html:101 -#: virtualization/filtersets.py:157 virtualization/filtersets.py:277 -#: virtualization/forms/bulk_edit.py:129 -#: virtualization/forms/bulk_import.py:92 -#: virtualization/forms/filtersets.py:99 -#: virtualization/forms/filtersets.py:123 -#: virtualization/forms/filtersets.py:204 -#: virtualization/forms/model_forms.py:79 -#: virtualization/forms/model_forms.py:176 -#: virtualization/tables/virtualmachines.py:67 -msgid "Cluster" -msgstr "Cluster" - -#: dcim/forms/bulk_import.py:521 +#: netbox/dcim/forms/bulk_import.py:543 msgid "Virtualization cluster" msgstr "Virtualisatiecluster" -#: dcim/forms/bulk_import.py:550 +#: netbox/dcim/forms/bulk_import.py:572 msgid "Assigned location (if any)" msgstr "Toegewezen locatie (indien aanwezig)" -#: dcim/forms/bulk_import.py:557 +#: netbox/dcim/forms/bulk_import.py:579 msgid "Assigned rack (if any)" msgstr "Toegewezen rek (indien aanwezig)" -#: dcim/forms/bulk_import.py:560 +#: netbox/dcim/forms/bulk_import.py:582 msgid "Face" msgstr "Gezicht" -#: dcim/forms/bulk_import.py:563 +#: netbox/dcim/forms/bulk_import.py:585 msgid "Mounted rack face" msgstr "Gemonteerd rackfront" -#: dcim/forms/bulk_import.py:570 +#: netbox/dcim/forms/bulk_import.py:592 msgid "Parent device (for child devices)" msgstr "Ouderapparaat (voor apparaten voor kinderen)" -#: dcim/forms/bulk_import.py:573 +#: netbox/dcim/forms/bulk_import.py:595 msgid "Device bay" msgstr "Toestelvak" -#: dcim/forms/bulk_import.py:577 +#: netbox/dcim/forms/bulk_import.py:599 msgid "Device bay in which this device is installed (for child devices)" msgstr "" "Apparaatvak waarin dit apparaat is geïnstalleerd (voor onderliggende " "apparaten)" -#: dcim/forms/bulk_import.py:644 +#: netbox/dcim/forms/bulk_import.py:666 msgid "The device in which this module is installed" msgstr "Het apparaat waarop deze module is geïnstalleerd" -#: dcim/forms/bulk_import.py:647 dcim/forms/model_forms.py:640 +#: netbox/dcim/forms/bulk_import.py:669 netbox/dcim/forms/model_forms.py:640 msgid "Module bay" msgstr "Modulevak" -#: dcim/forms/bulk_import.py:650 +#: netbox/dcim/forms/bulk_import.py:672 msgid "The module bay in which this module is installed" msgstr "De moduleruimte waarin deze module is geïnstalleerd" -#: dcim/forms/bulk_import.py:656 +#: netbox/dcim/forms/bulk_import.py:678 msgid "The type of module" msgstr "Het type module" -#: dcim/forms/bulk_import.py:664 dcim/forms/model_forms.py:656 +#: netbox/dcim/forms/bulk_import.py:686 netbox/dcim/forms/model_forms.py:656 msgid "Replicate components" msgstr "Componenten repliceren" -#: dcim/forms/bulk_import.py:666 +#: netbox/dcim/forms/bulk_import.py:688 msgid "" "Automatically populate components associated with this module type (enabled " "by default)" @@ -3955,264 +4382,271 @@ msgstr "" "Componenten die aan dit moduletype zijn gekoppeld automatisch invullen " "(standaard ingeschakeld)" -#: dcim/forms/bulk_import.py:669 dcim/forms/model_forms.py:662 +#: netbox/dcim/forms/bulk_import.py:691 netbox/dcim/forms/model_forms.py:662 msgid "Adopt components" msgstr "Componenten adopteren" -#: dcim/forms/bulk_import.py:671 dcim/forms/model_forms.py:665 +#: netbox/dcim/forms/bulk_import.py:693 netbox/dcim/forms/model_forms.py:665 msgid "Adopt already existing components" msgstr "Reeds bestaande componenten adopteren" -#: dcim/forms/bulk_import.py:711 dcim/forms/bulk_import.py:737 -#: dcim/forms/bulk_import.py:763 +#: netbox/dcim/forms/bulk_import.py:733 netbox/dcim/forms/bulk_import.py:759 +#: netbox/dcim/forms/bulk_import.py:785 msgid "Port type" msgstr "Poorttype" -#: dcim/forms/bulk_import.py:719 dcim/forms/bulk_import.py:745 +#: netbox/dcim/forms/bulk_import.py:741 netbox/dcim/forms/bulk_import.py:767 msgid "Port speed in bps" msgstr "Poortsnelheid in bps" -#: dcim/forms/bulk_import.py:783 +#: netbox/dcim/forms/bulk_import.py:805 msgid "Outlet type" msgstr "Type stopcontact" -#: dcim/forms/bulk_import.py:790 +#: netbox/dcim/forms/bulk_import.py:812 msgid "Local power port which feeds this outlet" msgstr "Lokale voedingspoort die dit stopcontact voedt" -#: dcim/forms/bulk_import.py:796 +#: netbox/dcim/forms/bulk_import.py:818 msgid "Electrical phase (for three-phase circuits)" msgstr "Elektrische fase (voor driefasige circuits)" -#: dcim/forms/bulk_import.py:837 dcim/forms/model_forms.py:1316 -#: virtualization/forms/bulk_import.py:155 -#: virtualization/forms/model_forms.py:305 +#: 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 msgid "Parent interface" msgstr "Interface voor ouders" -#: dcim/forms/bulk_import.py:844 dcim/forms/model_forms.py:1324 -#: virtualization/forms/bulk_import.py:162 -#: virtualization/forms/model_forms.py:313 +#: 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 msgid "Bridged interface" msgstr "Overbrugde interface" -#: dcim/forms/bulk_import.py:847 +#: netbox/dcim/forms/bulk_import.py:869 msgid "Lag" msgstr "Lag" -#: dcim/forms/bulk_import.py:851 +#: netbox/dcim/forms/bulk_import.py:873 msgid "Parent LAG interface" msgstr "LAG-interface voor ouders" -#: dcim/forms/bulk_import.py:854 +#: netbox/dcim/forms/bulk_import.py:876 msgid "Vdcs" msgstr "Vdcs" -#: dcim/forms/bulk_import.py:859 +#: netbox/dcim/forms/bulk_import.py:881 msgid "VDC names separated by commas, encased with double quotes. Example:" msgstr "" "VDC-namen gescheiden door komma's, tussen dubbele aanhalingstekens. " "Voorbeeld:" -#: dcim/forms/bulk_import.py:865 +#: netbox/dcim/forms/bulk_import.py:887 msgid "Physical medium" msgstr "Fysiek medium" -#: dcim/forms/bulk_import.py:868 dcim/forms/filtersets.py:1365 +#: netbox/dcim/forms/bulk_import.py:890 netbox/dcim/forms/filtersets.py:1365 msgid "Duplex" msgstr "Dubbelzijdig" -#: dcim/forms/bulk_import.py:873 +#: netbox/dcim/forms/bulk_import.py:895 msgid "Poe mode" msgstr "Poe-modus" -#: dcim/forms/bulk_import.py:879 +#: netbox/dcim/forms/bulk_import.py:901 msgid "Poe type" msgstr "Poe-type" -#: dcim/forms/bulk_import.py:888 virtualization/forms/bulk_import.py:168 +#: netbox/dcim/forms/bulk_import.py:910 +#: netbox/virtualization/forms/bulk_import.py:168 msgid "IEEE 802.1Q operational mode (for L2 interfaces)" msgstr "IEEE 802.1Q operationele modus (voor L2-interfaces)" -#: dcim/forms/bulk_import.py:895 ipam/forms/bulk_import.py:161 -#: ipam/forms/bulk_import.py:247 ipam/forms/bulk_import.py:283 -#: ipam/forms/filtersets.py:201 ipam/forms/filtersets.py:277 -#: ipam/forms/filtersets.py:336 virtualization/forms/bulk_import.py:175 +#: netbox/dcim/forms/bulk_import.py: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 msgid "Assigned VRF" msgstr "Toegewezen VRF" -#: dcim/forms/bulk_import.py:898 +#: netbox/dcim/forms/bulk_import.py:920 msgid "Rf role" msgstr "Rf-rol" -#: dcim/forms/bulk_import.py:901 +#: netbox/dcim/forms/bulk_import.py:923 msgid "Wireless role (AP/station)" msgstr "Draadloze rol (AP/station)" -#: dcim/forms/bulk_import.py:937 +#: netbox/dcim/forms/bulk_import.py:959 #, python-brace-format msgid "VDC {vdc} is not assigned to device {device}" msgstr "VDC {vdc} is niet toegewezen aan het apparaat {device}" -#: dcim/forms/bulk_import.py:951 dcim/forms/model_forms.py:1000 -#: dcim/forms/model_forms.py:1575 dcim/forms/object_import.py:117 +#: 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 msgid "Rear port" msgstr "Poort aan de achterkant" -#: dcim/forms/bulk_import.py:954 +#: netbox/dcim/forms/bulk_import.py:976 msgid "Corresponding rear port" msgstr "Bijbehorende poort aan de achterkant" -#: dcim/forms/bulk_import.py:959 dcim/forms/bulk_import.py:1000 -#: dcim/forms/bulk_import.py:1216 +#: netbox/dcim/forms/bulk_import.py:981 netbox/dcim/forms/bulk_import.py:1022 +#: netbox/dcim/forms/bulk_import.py:1238 msgid "Physical medium classification" msgstr "Classificatie van fysieke media" -#: dcim/forms/bulk_import.py:1028 dcim/tables/devices.py:822 +#: netbox/dcim/forms/bulk_import.py:1050 netbox/dcim/tables/devices.py:822 msgid "Installed device" msgstr "Geïnstalleerd apparaat" -#: dcim/forms/bulk_import.py:1032 +#: netbox/dcim/forms/bulk_import.py:1054 msgid "Child device installed within this bay" msgstr "Kinderapparaat dat in deze bay is geïnstalleerd" -#: dcim/forms/bulk_import.py:1034 +#: netbox/dcim/forms/bulk_import.py:1056 msgid "Child device not found." msgstr "Kinderapparaat niet gevonden." -#: dcim/forms/bulk_import.py:1092 +#: netbox/dcim/forms/bulk_import.py:1114 msgid "Parent inventory item" msgstr "Onderliggend inventarisitem" -#: dcim/forms/bulk_import.py:1095 +#: netbox/dcim/forms/bulk_import.py:1117 msgid "Component type" msgstr "Soort onderdeel" -#: dcim/forms/bulk_import.py:1099 +#: netbox/dcim/forms/bulk_import.py:1121 msgid "Component Type" msgstr "Soort onderdeel" -#: dcim/forms/bulk_import.py:1102 +#: netbox/dcim/forms/bulk_import.py:1124 msgid "Compnent name" msgstr "Naam van het onderdeel" -#: dcim/forms/bulk_import.py:1104 +#: netbox/dcim/forms/bulk_import.py:1126 msgid "Component Name" msgstr "Naam van de component" -#: dcim/forms/bulk_import.py:1146 +#: netbox/dcim/forms/bulk_import.py:1168 #, python-brace-format msgid "Component not found: {device} - {component_name}" msgstr "Onderdeel niet gevonden: {device} - {component_name}" -#: dcim/forms/bulk_import.py:1171 +#: netbox/dcim/forms/bulk_import.py:1193 msgid "Side A device" msgstr "Side A-apparaat" -#: dcim/forms/bulk_import.py:1174 dcim/forms/bulk_import.py:1192 +#: netbox/dcim/forms/bulk_import.py:1196 netbox/dcim/forms/bulk_import.py:1214 msgid "Device name" msgstr "Naam van het apparaat" -#: dcim/forms/bulk_import.py:1177 +#: netbox/dcim/forms/bulk_import.py:1199 msgid "Side A type" msgstr "Type kant A" -#: dcim/forms/bulk_import.py:1180 dcim/forms/bulk_import.py:1198 +#: netbox/dcim/forms/bulk_import.py:1202 netbox/dcim/forms/bulk_import.py:1220 msgid "Termination type" msgstr "Soort beëindiging" -#: dcim/forms/bulk_import.py:1183 +#: netbox/dcim/forms/bulk_import.py:1205 msgid "Side A name" msgstr "Naam van kant A" -#: dcim/forms/bulk_import.py:1184 dcim/forms/bulk_import.py:1202 +#: netbox/dcim/forms/bulk_import.py:1206 netbox/dcim/forms/bulk_import.py:1224 msgid "Termination name" msgstr "Naam van beëindiging" -#: dcim/forms/bulk_import.py:1189 +#: netbox/dcim/forms/bulk_import.py:1211 msgid "Side B device" msgstr "Side B-apparaat" -#: dcim/forms/bulk_import.py:1195 +#: netbox/dcim/forms/bulk_import.py:1217 msgid "Side B type" msgstr "Type kant B" -#: dcim/forms/bulk_import.py:1201 +#: netbox/dcim/forms/bulk_import.py:1223 msgid "Side B name" msgstr "Naam van kant B" -#: dcim/forms/bulk_import.py:1210 wireless/forms/bulk_import.py:86 +#: netbox/dcim/forms/bulk_import.py:1232 +#: netbox/wireless/forms/bulk_import.py:86 msgid "Connection status" msgstr "Status van de verbinding" -#: dcim/forms/bulk_import.py:1262 +#: netbox/dcim/forms/bulk_import.py:1284 #, python-brace-format msgid "Side {side_upper}: {device} {termination_object} is already connected" msgstr "Kant {side_upper}: {device} {termination_object} is al verbonden" -#: dcim/forms/bulk_import.py:1268 +#: netbox/dcim/forms/bulk_import.py:1290 #, python-brace-format msgid "{side_upper} side termination not found: {device} {name}" msgstr "{side_upper} nevenbeëindiging niet gevonden: {device} {name}" -#: dcim/forms/bulk_import.py:1293 dcim/forms/model_forms.py:785 -#: dcim/tables/devices.py:1027 templates/dcim/device.html:132 -#: templates/dcim/virtualchassis.html:27 templates/dcim/virtualchassis.html:67 +#: 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/templates/dcim/virtualchassis.html:27 +#: netbox/templates/dcim/virtualchassis.html:67 msgid "Master" msgstr "Meester" -#: dcim/forms/bulk_import.py:1297 +#: netbox/dcim/forms/bulk_import.py:1319 msgid "Master device" msgstr "Master-apparaat" -#: dcim/forms/bulk_import.py:1314 +#: netbox/dcim/forms/bulk_import.py:1336 msgid "Name of parent site" msgstr "Naam van de moedersite" -#: dcim/forms/bulk_import.py:1348 +#: netbox/dcim/forms/bulk_import.py:1370 msgid "Upstream power panel" msgstr "Stroomopwaarts stroompaneel" -#: dcim/forms/bulk_import.py:1378 +#: netbox/dcim/forms/bulk_import.py:1400 msgid "Primary or redundant" msgstr "Primair of redundant" -#: dcim/forms/bulk_import.py:1383 +#: netbox/dcim/forms/bulk_import.py:1405 msgid "Supply type (AC/DC)" msgstr "Soort voeding (AC/DC)" -#: dcim/forms/bulk_import.py:1388 +#: netbox/dcim/forms/bulk_import.py:1410 msgid "Single or three-phase" msgstr "Enkel- of driefasig" -#: dcim/forms/bulk_import.py:1439 dcim/forms/model_forms.py:1670 -#: templates/dcim/device.html:190 templates/dcim/virtualdevicecontext.html:30 -#: templates/virtualization/virtualmachine.html:52 +#: netbox/dcim/forms/bulk_import.py:1461 netbox/dcim/forms/model_forms.py:1677 +#: netbox/templates/dcim/device.html:190 +#: netbox/templates/dcim/virtualdevicecontext.html:30 +#: netbox/templates/virtualization/virtualmachine.html:52 msgid "Primary IPv4" msgstr "Primaire IPv4" -#: dcim/forms/bulk_import.py:1443 +#: netbox/dcim/forms/bulk_import.py:1465 msgid "IPv4 address with mask, e.g. 1.2.3.4/24" msgstr "IPv4-adres met masker, bijvoorbeeld 1.2.3.4/24" -#: dcim/forms/bulk_import.py:1446 dcim/forms/model_forms.py:1679 -#: templates/dcim/device.html:206 templates/dcim/virtualdevicecontext.html:41 -#: templates/virtualization/virtualmachine.html:68 +#: netbox/dcim/forms/bulk_import.py:1468 netbox/dcim/forms/model_forms.py:1686 +#: netbox/templates/dcim/device.html:206 +#: netbox/templates/dcim/virtualdevicecontext.html:41 +#: netbox/templates/virtualization/virtualmachine.html:68 msgid "Primary IPv6" msgstr "Primaire IPv6" -#: dcim/forms/bulk_import.py:1450 +#: netbox/dcim/forms/bulk_import.py:1472 msgid "IPv6 address with prefix length, e.g. 2001:db8::1/64" msgstr "IPv6-adres met prefixlengte, bijvoorbeeld 2001:db8: :1/64" -#: dcim/forms/common.py:24 dcim/models/device_components.py:527 -#: templates/dcim/interface.html:57 -#: templates/virtualization/vminterface.html:55 -#: virtualization/forms/bulk_edit.py:225 +#: netbox/dcim/forms/common.py:24 netbox/dcim/models/device_components.py:527 +#: netbox/templates/dcim/interface.html:57 +#: netbox/templates/virtualization/vminterface.html:55 +#: netbox/virtualization/forms/bulk_edit.py:225 msgid "MTU" msgstr "MTU" -#: dcim/forms/common.py:65 +#: netbox/dcim/forms/common.py:65 #, python-brace-format msgid "" "The tagged VLANs ({vlans}) must belong to the same site as the interface's " @@ -4221,7 +4655,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" -#: dcim/forms/common.py:126 +#: netbox/dcim/forms/common.py:126 msgid "" "Cannot install module with placeholder values in a module bay with no " "position defined." @@ -4229,7 +4663,7 @@ msgstr "" "Kan een module met tijdelijke aanduidingen niet installeren in een " "modulecompartiment zonder gedefinieerde positie." -#: dcim/forms/common.py:131 +#: netbox/dcim/forms/common.py:131 #, python-brace-format msgid "" "Cannot install module with placeholder values in a module bay tree {level} " @@ -4239,188 +4673,199 @@ msgstr "" "modulelaurierboom {level} in een boom, maar {tokens} tijdelijke aanduidingen" " gegeven." -#: dcim/forms/common.py:144 +#: netbox/dcim/forms/common.py:144 #, 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" -#: dcim/forms/common.py:153 +#: netbox/dcim/forms/common.py:153 #, python-brace-format msgid "A {model} named {name} already exists" msgstr "EEN {model} genoemd {name} bestaat al" -#: dcim/forms/connections.py:49 dcim/forms/model_forms.py:738 -#: dcim/tables/power.py:66 templates/dcim/inc/cable_termination.html:37 -#: templates/dcim/powerfeed.html:24 templates/dcim/powerpanel.html:19 -#: templates/dcim/trace/powerpanel.html:4 +#: netbox/dcim/forms/connections.py:49 netbox/dcim/forms/model_forms.py:738 +#: netbox/dcim/tables/power.py:66 +#: netbox/templates/dcim/inc/cable_termination.html:37 +#: netbox/templates/dcim/powerfeed.html:24 +#: netbox/templates/dcim/powerpanel.html:19 +#: netbox/templates/dcim/trace/powerpanel.html:4 msgid "Power Panel" msgstr "Voedingspaneel" -#: dcim/forms/connections.py:58 dcim/forms/model_forms.py:765 -#: templates/dcim/powerfeed.html:21 templates/dcim/powerport.html:80 +#: netbox/dcim/forms/connections.py:58 netbox/dcim/forms/model_forms.py:765 +#: netbox/templates/dcim/powerfeed.html:21 +#: netbox/templates/dcim/powerport.html:80 msgid "Power Feed" msgstr "Stroomvoorziening" -#: dcim/forms/connections.py:81 +#: netbox/dcim/forms/connections.py:81 msgid "Side" msgstr "Kant" -#: dcim/forms/filtersets.py:136 dcim/tables/devices.py:295 +#: netbox/dcim/forms/filtersets.py:136 netbox/dcim/tables/devices.py:295 msgid "Device Status" msgstr "Status van het apparaat" -#: dcim/forms/filtersets.py:149 +#: netbox/dcim/forms/filtersets.py:149 msgid "Parent region" msgstr "Regio van het moederland" -#: dcim/forms/filtersets.py:163 tenancy/forms/bulk_import.py:28 -#: tenancy/forms/bulk_import.py:62 tenancy/forms/filtersets.py:33 -#: tenancy/forms/filtersets.py:62 wireless/forms/bulk_import.py:25 -#: wireless/forms/filtersets.py:25 +#: netbox/dcim/forms/filtersets.py:163 netbox/tenancy/forms/bulk_import.py:28 +#: netbox/tenancy/forms/bulk_import.py:62 +#: netbox/tenancy/forms/filtersets.py:33 netbox/tenancy/forms/filtersets.py:62 +#: netbox/wireless/forms/bulk_import.py:25 +#: netbox/wireless/forms/filtersets.py:25 msgid "Parent group" msgstr "Oudergroep" -#: dcim/forms/filtersets.py:242 templates/dcim/location.html:58 -#: templates/dcim/site.html:56 +#: netbox/dcim/forms/filtersets.py:242 netbox/templates/dcim/location.html:58 +#: netbox/templates/dcim/site.html:56 msgid "Facility" msgstr "Faciliteit" -#: dcim/forms/filtersets.py:380 -msgid "Rack type" -msgstr "Racktype" - -#: dcim/forms/filtersets.py:397 +#: netbox/dcim/forms/filtersets.py:397 msgid "Function" msgstr "Functie" -#: dcim/forms/filtersets.py:483 dcim/forms/model_forms.py:373 -#: templates/inc/panels/image_attachments.html:6 +#: netbox/dcim/forms/filtersets.py:483 netbox/dcim/forms/model_forms.py:373 +#: netbox/templates/inc/panels/image_attachments.html:6 msgid "Images" msgstr "Afbeeldingen" -#: dcim/forms/filtersets.py:486 dcim/forms/filtersets.py:611 -#: dcim/forms/filtersets.py:726 +#: netbox/dcim/forms/filtersets.py:486 netbox/dcim/forms/filtersets.py:611 +#: netbox/dcim/forms/filtersets.py:726 msgid "Components" msgstr "Componenten" -#: dcim/forms/filtersets.py:506 +#: netbox/dcim/forms/filtersets.py:506 msgid "Subdevice role" msgstr "Rol van het subapparaat" -#: dcim/forms/filtersets.py:790 dcim/tables/racks.py:54 -#: templates/dcim/racktype.html:20 +#: netbox/dcim/forms/filtersets.py:790 netbox/dcim/tables/racks.py:54 +#: netbox/templates/dcim/racktype.html:20 msgid "Model" msgstr "Model" -#: dcim/forms/filtersets.py:834 +#: netbox/dcim/forms/filtersets.py:834 msgid "Has an OOB IP" msgstr "Heeft een OOB IP" -#: dcim/forms/filtersets.py:841 +#: netbox/dcim/forms/filtersets.py:841 msgid "Virtual chassis member" msgstr "Virtueel chassislid" -#: dcim/forms/filtersets.py:890 +#: netbox/dcim/forms/filtersets.py:890 msgid "Has virtual device contexts" msgstr "Heeft contexten voor virtuele apparaten" -#: dcim/forms/filtersets.py:903 extras/filtersets.py:585 -#: ipam/forms/filtersets.py:452 virtualization/forms/filtersets.py:112 +#: netbox/dcim/forms/filtersets.py:903 netbox/extras/filtersets.py:585 +#: netbox/ipam/forms/filtersets.py:452 +#: netbox/virtualization/forms/filtersets.py:112 msgid "Cluster group" msgstr "Clustergroep" -#: dcim/forms/filtersets.py:1210 +#: netbox/dcim/forms/filtersets.py:1210 msgid "Cabled" msgstr "Bekabeld" -#: dcim/forms/filtersets.py:1217 +#: netbox/dcim/forms/filtersets.py:1217 msgid "Occupied" msgstr "Bezet" -#: dcim/forms/filtersets.py:1244 dcim/forms/filtersets.py:1269 -#: dcim/forms/filtersets.py:1293 dcim/forms/filtersets.py:1313 -#: dcim/forms/filtersets.py:1336 dcim/tables/devices.py:364 -#: templates/dcim/consoleport.html:55 templates/dcim/consoleserverport.html:55 -#: templates/dcim/frontport.html:69 templates/dcim/interface.html:140 -#: templates/dcim/powerfeed.html:110 templates/dcim/poweroutlet.html:59 -#: templates/dcim/powerport.html:59 templates/dcim/rearport.html:65 +#: netbox/dcim/forms/filtersets.py: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/templates/dcim/consoleport.html:55 +#: netbox/templates/dcim/consoleserverport.html:55 +#: netbox/templates/dcim/frontport.html:69 +#: netbox/templates/dcim/interface.html:140 +#: netbox/templates/dcim/powerfeed.html:110 +#: netbox/templates/dcim/poweroutlet.html:59 +#: netbox/templates/dcim/powerport.html:59 +#: netbox/templates/dcim/rearport.html:65 msgid "Connection" msgstr "Verbinding" -#: dcim/forms/filtersets.py:1348 extras/forms/bulk_edit.py:326 -#: extras/forms/bulk_import.py:247 extras/forms/filtersets.py:464 -#: extras/forms/model_forms.py:675 extras/tables/tables.py:579 -#: templates/extras/journalentry.html:30 +#: netbox/dcim/forms/filtersets.py:1348 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 "Vriendelijk" -#: dcim/forms/filtersets.py:1377 +#: netbox/dcim/forms/filtersets.py:1377 msgid "Mgmt only" msgstr "Alleen voor beheer" -#: dcim/forms/filtersets.py:1389 dcim/forms/model_forms.py:1383 -#: dcim/models/device_components.py:629 templates/dcim/interface.html:129 +#: 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 msgid "WWN" msgstr "WWN" -#: dcim/forms/filtersets.py:1409 +#: netbox/dcim/forms/filtersets.py:1409 msgid "Wireless channel" msgstr "Draadloos kanaal" -#: dcim/forms/filtersets.py:1413 +#: netbox/dcim/forms/filtersets.py:1413 msgid "Channel frequency (MHz)" msgstr "Kanaalfrequentie (MHz)" -#: dcim/forms/filtersets.py:1417 +#: netbox/dcim/forms/filtersets.py:1417 msgid "Channel width (MHz)" msgstr "Kanaalbreedte (MHz)" -#: dcim/forms/filtersets.py:1421 templates/dcim/interface.html:85 +#: netbox/dcim/forms/filtersets.py:1421 +#: netbox/templates/dcim/interface.html:85 msgid "Transmit power (dBm)" msgstr "Zendvermogen (dBm)" -#: dcim/forms/filtersets.py:1446 dcim/forms/filtersets.py:1471 -#: dcim/tables/devices.py:327 templates/dcim/cable.html:12 -#: templates/dcim/cable_trace.html:46 templates/dcim/frontport.html:77 -#: templates/dcim/htmx/cable_edit.html:50 -#: templates/dcim/inc/connection_endpoints.html:4 -#: templates/dcim/rearport.html:73 templates/dcim/trace/cable.html:7 +#: netbox/dcim/forms/filtersets.py:1446 netbox/dcim/forms/filtersets.py:1471 +#: netbox/dcim/tables/devices.py:327 netbox/templates/dcim/cable.html:12 +#: netbox/templates/dcim/cable_trace.html:46 +#: netbox/templates/dcim/frontport.html:77 +#: netbox/templates/dcim/htmx/cable_edit.html:50 +#: netbox/templates/dcim/inc/connection_endpoints.html:4 +#: netbox/templates/dcim/rearport.html:73 +#: netbox/templates/dcim/trace/cable.html:7 msgid "Cable" msgstr "Kabel" -#: dcim/forms/filtersets.py:1550 dcim/tables/devices.py:949 +#: netbox/dcim/forms/filtersets.py:1550 netbox/dcim/tables/devices.py:949 msgid "Discovered" msgstr "Ontdekt" -#: dcim/forms/formsets.py:20 +#: netbox/dcim/forms/formsets.py:20 #, python-brace-format msgid "A virtual chassis member already exists in position {vc_position}." msgstr "Er bestaat al een virtueel chassislid op zijn plaats {vc_position}." -#: dcim/forms/model_forms.py:140 +#: netbox/dcim/forms/model_forms.py:140 msgid "Contact Info" msgstr "Contactgegevens" -#: dcim/forms/model_forms.py:195 templates/dcim/rackrole.html:19 +#: netbox/dcim/forms/model_forms.py:195 netbox/templates/dcim/rackrole.html:19 msgid "Rack Role" msgstr "Rol van het rek" -#: dcim/forms/model_forms.py:212 dcim/forms/model_forms.py:362 -#: dcim/forms/model_forms.py:446 utilities/forms/fields/fields.py:47 +#: netbox/dcim/forms/model_forms.py:212 netbox/dcim/forms/model_forms.py:362 +#: netbox/dcim/forms/model_forms.py:446 +#: netbox/utilities/forms/fields/fields.py:47 msgid "Slug" msgstr "Slug" -#: dcim/forms/model_forms.py:259 +#: netbox/dcim/forms/model_forms.py:259 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." -#: dcim/forms/model_forms.py:265 +#: netbox/dcim/forms/model_forms.py:265 msgid "Inventory Control" msgstr "Inventarisbeheer" -#: dcim/forms/model_forms.py:313 +#: netbox/dcim/forms/model_forms.py:313 msgid "" "Comma-separated list of numeric unit IDs. A range may be specified using a " "hyphen." @@ -4428,148 +4873,175 @@ msgstr "" "Door komma's gescheiden lijst van numerieke eenheid-ID's. Een bereik kan " "worden gespecificeerd met een koppelteken." -#: dcim/forms/model_forms.py:322 dcim/tables/racks.py:202 +#: netbox/dcim/forms/model_forms.py:322 netbox/dcim/tables/racks.py:202 msgid "Reservation" msgstr "Reservatie" -#: dcim/forms/model_forms.py:423 templates/dcim/devicerole.html:23 +#: netbox/dcim/forms/model_forms.py:423 +#: netbox/templates/dcim/devicerole.html:23 msgid "Device Role" msgstr "Apparaat Rol" -#: dcim/forms/model_forms.py:490 dcim/models/devices.py:644 +#: netbox/dcim/forms/model_forms.py:490 netbox/dcim/models/devices.py:644 msgid "The lowest-numbered unit occupied by the device" msgstr "" "De eenheid met het laagste nummer die door het apparaat wordt gebruikt" -#: dcim/forms/model_forms.py:547 +#: netbox/dcim/forms/model_forms.py:547 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" -#: dcim/forms/model_forms.py:552 +#: netbox/dcim/forms/model_forms.py:552 msgid "The priority of the device in the virtual chassis" msgstr "De prioriteit van het apparaat in het virtuele chassis" -#: dcim/forms/model_forms.py:659 +#: netbox/dcim/forms/model_forms.py:659 msgid "Automatically populate components associated with this module type" msgstr "" "Componenten die aan dit moduletype zijn gekoppeld automatisch invullen" -#: dcim/forms/model_forms.py:767 +#: netbox/dcim/forms/model_forms.py:767 msgid "Characteristics" msgstr "Kenmerken" -#: dcim/forms/model_forms.py:1087 +#: netbox/dcim/forms/model_forms.py:914 +#, python-brace-format +msgid "" +"Alphanumeric ranges are supported for bulk creation. Mixed cases and types " +"within a single range are not supported (example: " +"[ge,xe]-0/0/[0-9]). The token {module}, if " +"present, will be automatically replaced with the position value when " +"creating a new module." +msgstr "" + +#: netbox/dcim/forms/model_forms.py:1094 msgid "Console port template" msgstr "Sjabloon voor consolepoort" -#: dcim/forms/model_forms.py:1095 +#: netbox/dcim/forms/model_forms.py:1102 msgid "Console server port template" msgstr "Poortsjabloon voor consoleserver" -#: dcim/forms/model_forms.py:1103 +#: netbox/dcim/forms/model_forms.py:1110 msgid "Front port template" msgstr "Sjabloon voor de voorpoort" -#: dcim/forms/model_forms.py:1111 +#: netbox/dcim/forms/model_forms.py:1118 msgid "Interface template" msgstr "Interfacesjabloon" -#: dcim/forms/model_forms.py:1119 +#: netbox/dcim/forms/model_forms.py:1126 msgid "Power outlet template" msgstr "Sjabloon voor stopcontact" -#: dcim/forms/model_forms.py:1127 +#: netbox/dcim/forms/model_forms.py:1134 msgid "Power port template" msgstr "Sjabloon voor voedingspoort" -#: dcim/forms/model_forms.py:1135 +#: netbox/dcim/forms/model_forms.py:1142 msgid "Rear port template" msgstr "Sjabloon voor achterpoort" -#: dcim/forms/model_forms.py:1144 dcim/forms/model_forms.py:1388 -#: dcim/forms/model_forms.py:1551 dcim/forms/model_forms.py:1583 -#: dcim/tables/connections.py:65 ipam/forms/bulk_import.py:318 -#: ipam/forms/model_forms.py:280 ipam/forms/model_forms.py:289 -#: ipam/tables/fhrp.py:64 ipam/tables/ip.py:372 ipam/tables/vlans.py:169 -#: templates/circuits/inc/circuit_termination_fields.html:51 -#: templates/dcim/frontport.html:106 templates/dcim/interface.html:27 -#: templates/dcim/interface.html:184 templates/dcim/interface.html:310 -#: templates/dcim/rearport.html:102 -#: templates/virtualization/vminterface.html:18 -#: templates/vpn/tunneltermination.html:31 -#: templates/wireless/inc/wirelesslink_interface.html:10 -#: templates/wireless/wirelesslink.html:10 -#: templates/wireless/wirelesslink.html:55 -#: virtualization/forms/model_forms.py:348 vpn/forms/bulk_import.py:297 -#: vpn/forms/model_forms.py:436 vpn/forms/model_forms.py:445 -#: wireless/forms/model_forms.py:113 wireless/forms/model_forms.py:155 +#: netbox/dcim/forms/model_forms.py: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" -#: dcim/forms/model_forms.py:1145 dcim/forms/model_forms.py:1584 -#: dcim/tables/connections.py:27 templates/dcim/consoleport.html:17 -#: templates/dcim/consoleserverport.html:74 templates/dcim/frontport.html:112 +#: netbox/dcim/forms/model_forms.py:1152 netbox/dcim/forms/model_forms.py:1591 +#: netbox/dcim/tables/connections.py:27 +#: netbox/templates/dcim/consoleport.html:17 +#: netbox/templates/dcim/consoleserverport.html:74 +#: netbox/templates/dcim/frontport.html:112 msgid "Console Port" msgstr "Consolepoort" -#: dcim/forms/model_forms.py:1146 dcim/forms/model_forms.py:1585 -#: templates/dcim/consoleport.html:73 templates/dcim/consoleserverport.html:17 -#: templates/dcim/frontport.html:109 +#: netbox/dcim/forms/model_forms.py:1153 netbox/dcim/forms/model_forms.py:1592 +#: 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" -#: dcim/forms/model_forms.py:1147 dcim/forms/model_forms.py:1586 -#: templates/circuits/inc/circuit_termination_fields.html:52 -#: templates/dcim/consoleport.html:76 templates/dcim/consoleserverport.html:77 -#: templates/dcim/frontport.html:17 templates/dcim/frontport.html:115 -#: templates/dcim/interface.html:187 templates/dcim/rearport.html:105 +#: netbox/dcim/forms/model_forms.py:1154 netbox/dcim/forms/model_forms.py:1593 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:52 +#: netbox/templates/dcim/consoleport.html:76 +#: netbox/templates/dcim/consoleserverport.html:77 +#: netbox/templates/dcim/frontport.html:17 +#: netbox/templates/dcim/frontport.html:115 +#: netbox/templates/dcim/interface.html:187 +#: netbox/templates/dcim/rearport.html:105 msgid "Front Port" msgstr "Poort Voor" -#: dcim/forms/model_forms.py:1148 dcim/forms/model_forms.py:1587 -#: dcim/tables/devices.py:710 -#: templates/circuits/inc/circuit_termination_fields.html:53 -#: templates/dcim/consoleport.html:79 templates/dcim/consoleserverport.html:80 -#: templates/dcim/frontport.html:50 templates/dcim/frontport.html:118 -#: templates/dcim/interface.html:190 templates/dcim/rearport.html:17 -#: templates/dcim/rearport.html:108 +#: netbox/dcim/forms/model_forms.py:1155 netbox/dcim/forms/model_forms.py:1594 +#: netbox/dcim/tables/devices.py:710 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:53 +#: netbox/templates/dcim/consoleport.html:79 +#: netbox/templates/dcim/consoleserverport.html:80 +#: netbox/templates/dcim/frontport.html:50 +#: netbox/templates/dcim/frontport.html:118 +#: netbox/templates/dcim/interface.html:190 +#: netbox/templates/dcim/rearport.html:17 +#: netbox/templates/dcim/rearport.html:108 msgid "Rear Port" msgstr "Poort achter" -#: dcim/forms/model_forms.py:1149 dcim/forms/model_forms.py:1588 -#: dcim/tables/connections.py:46 dcim/tables/devices.py:512 -#: templates/dcim/poweroutlet.html:44 templates/dcim/powerport.html:17 +#: 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/templates/dcim/powerport.html:17 msgid "Power Port" msgstr "Voedingspoort" -#: dcim/forms/model_forms.py:1150 dcim/forms/model_forms.py:1589 -#: templates/dcim/poweroutlet.html:17 templates/dcim/powerport.html:77 +#: netbox/dcim/forms/model_forms.py:1157 netbox/dcim/forms/model_forms.py:1596 +#: netbox/templates/dcim/poweroutlet.html:17 +#: netbox/templates/dcim/powerport.html:77 msgid "Power Outlet" msgstr "Stopcontact" -#: dcim/forms/model_forms.py:1152 dcim/forms/model_forms.py:1591 +#: netbox/dcim/forms/model_forms.py:1159 netbox/dcim/forms/model_forms.py:1598 msgid "Component Assignment" msgstr "Toewijzing van componenten" -#: dcim/forms/model_forms.py:1195 dcim/forms/model_forms.py:1638 +#: netbox/dcim/forms/model_forms.py:1202 netbox/dcim/forms/model_forms.py:1645 msgid "An InventoryItem can only be assigned to a single component." msgstr "Een InventoryItem kan slechts aan één component worden toegewezen." -#: dcim/forms/model_forms.py:1332 +#: netbox/dcim/forms/model_forms.py:1339 msgid "LAG interface" msgstr "LAG-interface" -#: dcim/forms/model_forms.py:1355 +#: netbox/dcim/forms/model_forms.py:1362 msgid "Filter VLANs available for assignment by group." msgstr "Filter-VLAN's die beschikbaar zijn voor toewijzing per groep." -#: dcim/forms/model_forms.py:1484 +#: netbox/dcim/forms/model_forms.py:1491 msgid "Child Device" msgstr "Apparaat voor kinderen" -#: dcim/forms/model_forms.py:1485 +#: netbox/dcim/forms/model_forms.py:1492 msgid "" "Child devices must first be created and assigned to the site and rack of the" " parent device." @@ -4577,32 +5049,35 @@ msgstr "" "Kindapparaten moeten eerst worden aangemaakt en toegewezen aan de site en " "het rack van het ouderapparaat." -#: dcim/forms/model_forms.py:1527 +#: netbox/dcim/forms/model_forms.py:1534 msgid "Console port" msgstr "Consolepoort" -#: dcim/forms/model_forms.py:1535 +#: netbox/dcim/forms/model_forms.py:1542 msgid "Console server port" msgstr "Console-serverpoort" -#: dcim/forms/model_forms.py:1543 +#: netbox/dcim/forms/model_forms.py:1550 msgid "Front port" msgstr "Poort voor" -#: dcim/forms/model_forms.py:1559 +#: netbox/dcim/forms/model_forms.py:1566 msgid "Power outlet" msgstr "Stopcontact" -#: dcim/forms/model_forms.py:1579 templates/dcim/inventoryitem.html:17 +#: netbox/dcim/forms/model_forms.py:1586 +#: netbox/templates/dcim/inventoryitem.html:17 msgid "Inventory Item" msgstr "Inventarisitem" -#: dcim/forms/model_forms.py:1652 templates/dcim/inventoryitemrole.html:15 +#: netbox/dcim/forms/model_forms.py:1659 +#: netbox/templates/dcim/inventoryitemrole.html:15 msgid "Inventory Item Role" msgstr "Rol van het inventarisitem" -#: dcim/forms/object_create.py:48 dcim/forms/object_create.py:199 -#: dcim/forms/object_create.py:355 +#: netbox/dcim/forms/object_create.py:48 +#: netbox/dcim/forms/object_create.py:199 +#: netbox/dcim/forms/object_create.py:347 msgid "" "Alphanumeric ranges are supported. (Must match the number of objects being " "created.)" @@ -4610,7 +5085,7 @@ msgstr "" "Alfanumerieke reeksen worden ondersteund. (Moet overeenkomen met het aantal " "objecten dat wordt gemaakt.)" -#: dcim/forms/object_create.py:68 +#: netbox/dcim/forms/object_create.py:68 #, python-brace-format msgid "" "The provided pattern specifies {value_count} values, but {pattern_count} are" @@ -4619,18 +5094,19 @@ msgstr "" "Het meegeleverde patroon specificeert {value_count} waarden, maar " "{pattern_count} worden verwacht." -#: dcim/forms/object_create.py:110 dcim/forms/object_create.py:271 -#: dcim/tables/devices.py:252 +#: netbox/dcim/forms/object_create.py:110 +#: netbox/dcim/forms/object_create.py:263 netbox/dcim/tables/devices.py:252 msgid "Rear ports" msgstr "Poorten achter" -#: dcim/forms/object_create.py:111 dcim/forms/object_create.py:272 +#: netbox/dcim/forms/object_create.py:111 +#: netbox/dcim/forms/object_create.py:264 msgid "Select one rear port assignment for each front port being created." msgstr "" "Selecteer één toewijzing van de achterpoort voor elke poort aan de voorkant " "die wordt gemaakt." -#: dcim/forms/object_create.py:164 +#: netbox/dcim/forms/object_create.py:164 #, python-brace-format msgid "" "The number of front port templates to be created ({frontport_count}) must " @@ -4640,16 +5116,7 @@ msgstr "" "moet overeenkomen met het geselecteerde aantal posities aan de achterkant " "van de poort ({rearport_count})." -#: dcim/forms/object_create.py:251 -#, python-brace-format -msgid "" -"The string {module} will be replaced with the position of the " -"assigned module, if any." -msgstr "" -"Het touwtje {module} wordt vervangen door de positie van de " -"toegewezen module, indien aanwezig." - -#: dcim/forms/object_create.py:320 +#: netbox/dcim/forms/object_create.py:312 #, python-brace-format msgid "" "The number of front ports to be created ({frontport_count}) must match the " @@ -4659,17 +5126,18 @@ msgstr "" "overeenkomen met het geselecteerde aantal posities aan de achterkant van de " "poort ({rearport_count})." -#: dcim/forms/object_create.py:409 dcim/tables/devices.py:1033 -#: ipam/tables/fhrp.py:31 templates/dcim/virtualchassis.html:53 -#: templates/dcim/virtualchassis_edit.html:47 templates/ipam/fhrpgroup.html:38 +#: netbox/dcim/forms/object_create.py:401 netbox/dcim/tables/devices.py:1033 +#: netbox/ipam/tables/fhrp.py:31 netbox/templates/dcim/virtualchassis.html:53 +#: netbox/templates/dcim/virtualchassis_edit.html:47 +#: netbox/templates/ipam/fhrpgroup.html:38 msgid "Members" msgstr "Leden" -#: dcim/forms/object_create.py:418 +#: netbox/dcim/forms/object_create.py:410 msgid "Initial position" msgstr "Uitgangspositie" -#: dcim/forms/object_create.py:421 +#: netbox/dcim/forms/object_create.py:413 msgid "" "Position of the first member device. Increases by one for each additional " "member." @@ -4677,69 +5145,71 @@ msgstr "" "Positie van het apparaat van het eerste lid. Verhoogt met één voor elk extra" " lid." -#: dcim/forms/object_create.py:435 +#: netbox/dcim/forms/object_create.py:427 msgid "A position must be specified for the first VC member." msgstr "Voor het eerste VC-lid moet een positie worden gespecificeerd." -#: dcim/models/cables.py:62 dcim/models/device_component_templates.py:55 -#: dcim/models/device_components.py:62 extras/models/customfields.py:111 +#: netbox/dcim/models/cables.py:62 +#: netbox/dcim/models/device_component_templates.py:55 +#: netbox/dcim/models/device_components.py:62 +#: netbox/extras/models/customfields.py:111 msgid "label" msgstr "label" -#: dcim/models/cables.py:71 +#: netbox/dcim/models/cables.py:71 msgid "length" msgstr "lengte" -#: dcim/models/cables.py:78 +#: netbox/dcim/models/cables.py:78 msgid "length unit" msgstr "lengte-eenheid" -#: dcim/models/cables.py:95 +#: netbox/dcim/models/cables.py:95 msgid "cable" msgstr "kabel" -#: dcim/models/cables.py:96 +#: netbox/dcim/models/cables.py:96 msgid "cables" msgstr "kabels" -#: dcim/models/cables.py:165 +#: netbox/dcim/models/cables.py:165 msgid "Must specify a unit when setting a cable length" msgstr "Moet een eenheid specificeren bij het instellen van een kabellengte" -#: dcim/models/cables.py:168 +#: netbox/dcim/models/cables.py:168 msgid "Must define A and B terminations when creating a new cable." msgstr "" "Moet A- en B-aansluitingen definiëren bij het aanmaken van een nieuwe kabel." -#: dcim/models/cables.py:175 +#: netbox/dcim/models/cables.py:175 msgid "Cannot connect different termination types to same end of cable." msgstr "" "Kan geen verschillende soorten aansluitingen aansluiten op hetzelfde " "uiteinde van de kabel." -#: dcim/models/cables.py:183 +#: netbox/dcim/models/cables.py:183 #, python-brace-format msgid "Incompatible termination types: {type_a} and {type_b}" msgstr "Incompatibele beëindigingstypen: {type_a} en {type_b}" -#: dcim/models/cables.py:193 +#: netbox/dcim/models/cables.py:193 msgid "A and B terminations cannot connect to the same object." msgstr "" "A- en B-aansluitingen kunnen geen verbinding maken met hetzelfde object." -#: dcim/models/cables.py:260 ipam/models/asns.py:37 +#: netbox/dcim/models/cables.py:260 netbox/ipam/models/asns.py:37 msgid "end" msgstr "einde" -#: dcim/models/cables.py:313 +#: netbox/dcim/models/cables.py:313 msgid "cable termination" msgstr "kabelafsluiting" -#: dcim/models/cables.py:314 +#: netbox/dcim/models/cables.py:314 msgid "cable terminations" msgstr "kabelaansluitingen" -#: dcim/models/cables.py:333 +#: netbox/dcim/models/cables.py:333 #, python-brace-format msgid "" "Duplicate termination found for {app_label}.{model} {termination_id}: cable " @@ -4748,38 +5218,38 @@ msgstr "" "Dubbele beëindiging gevonden voor {app_label}.{model} {termination_id}: " "kabel {cable_pk}" -#: dcim/models/cables.py:343 +#: netbox/dcim/models/cables.py:343 #, python-brace-format msgid "Cables cannot be terminated to {type_display} interfaces" msgstr "Kabels kunnen niet worden aangesloten op {type_display} interfaces" -#: dcim/models/cables.py:350 +#: netbox/dcim/models/cables.py:350 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." -#: dcim/models/cables.py:448 extras/models/configs.py:50 +#: netbox/dcim/models/cables.py:448 netbox/extras/models/configs.py:50 msgid "is active" msgstr "is actief" -#: dcim/models/cables.py:452 +#: netbox/dcim/models/cables.py:452 msgid "is complete" msgstr "is compleet" -#: dcim/models/cables.py:456 +#: netbox/dcim/models/cables.py:456 msgid "is split" msgstr "is gesplitst" -#: dcim/models/cables.py:464 +#: netbox/dcim/models/cables.py:464 msgid "cable path" msgstr "kabelpad" -#: dcim/models/cables.py:465 +#: netbox/dcim/models/cables.py:465 msgid "cable paths" msgstr "kabelpaden" -#: dcim/models/device_component_templates.py:46 +#: netbox/dcim/models/device_component_templates.py:46 #, python-brace-format msgid "" "{module} is accepted as a substitution for the module bay position when " @@ -4788,18 +5258,18 @@ msgstr "" "{module} wordt geaccepteerd als vervanging voor de positie van het " "modulecompartiment wanneer deze is gekoppeld aan een moduletype." -#: dcim/models/device_component_templates.py:58 -#: dcim/models/device_components.py:65 +#: netbox/dcim/models/device_component_templates.py:58 +#: netbox/dcim/models/device_components.py:65 msgid "Physical label" msgstr "Fysiek label" -#: dcim/models/device_component_templates.py:103 +#: netbox/dcim/models/device_component_templates.py:103 msgid "Component templates cannot be moved to a different device type." msgstr "" "Componentsjablonen kunnen niet naar een ander apparaattype worden " "verplaatst." -#: dcim/models/device_component_templates.py:154 +#: netbox/dcim/models/device_component_templates.py:154 msgid "" "A component template cannot be associated with both a device type and a " "module type." @@ -4807,7 +5277,7 @@ msgstr "" "Een componentsjabloon kan niet worden gekoppeld aan zowel een apparaattype " "als een moduletype." -#: dcim/models/device_component_templates.py:158 +#: netbox/dcim/models/device_component_templates.py:158 msgid "" "A component template must be associated with either a device type or a " "module type." @@ -4815,138 +5285,138 @@ msgstr "" "Een componentsjabloon moet gekoppeld zijn aan een apparaattype of een " "moduletype." -#: dcim/models/device_component_templates.py:212 +#: netbox/dcim/models/device_component_templates.py:212 msgid "console port template" msgstr "sjabloon voor consolepoort" -#: dcim/models/device_component_templates.py:213 +#: netbox/dcim/models/device_component_templates.py:213 msgid "console port templates" msgstr "sjablonen voor consolepoorten" -#: dcim/models/device_component_templates.py:246 +#: netbox/dcim/models/device_component_templates.py:246 msgid "console server port template" msgstr "poortsjabloon voor consoleserver" -#: dcim/models/device_component_templates.py:247 +#: netbox/dcim/models/device_component_templates.py:247 msgid "console server port templates" msgstr "poortsjablonen voor consoleservers" -#: dcim/models/device_component_templates.py:278 -#: dcim/models/device_components.py:352 +#: netbox/dcim/models/device_component_templates.py:278 +#: netbox/dcim/models/device_components.py:352 msgid "maximum draw" msgstr "maximale trekking" -#: dcim/models/device_component_templates.py:285 -#: dcim/models/device_components.py:359 +#: netbox/dcim/models/device_component_templates.py:285 +#: netbox/dcim/models/device_components.py:359 msgid "allocated draw" msgstr "toegewezen gelijkspel" -#: dcim/models/device_component_templates.py:295 +#: netbox/dcim/models/device_component_templates.py:295 msgid "power port template" msgstr "sjabloon voor voedingspoort" -#: dcim/models/device_component_templates.py:296 +#: netbox/dcim/models/device_component_templates.py:296 msgid "power port templates" msgstr "sjablonen voor voedingspoorten" -#: dcim/models/device_component_templates.py:315 -#: dcim/models/device_components.py:382 +#: netbox/dcim/models/device_component_templates.py:315 +#: netbox/dcim/models/device_components.py:382 #, 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)." -#: dcim/models/device_component_templates.py:347 -#: dcim/models/device_components.py:477 +#: netbox/dcim/models/device_component_templates.py:347 +#: netbox/dcim/models/device_components.py:477 msgid "feed leg" msgstr "voerbeen" -#: dcim/models/device_component_templates.py:351 -#: dcim/models/device_components.py:481 +#: netbox/dcim/models/device_component_templates.py:351 +#: netbox/dcim/models/device_components.py:481 msgid "Phase (for three-phase feeds)" msgstr "Fase (voor driefasige voedingen)" -#: dcim/models/device_component_templates.py:357 +#: netbox/dcim/models/device_component_templates.py:357 msgid "power outlet template" msgstr "sjabloon voor stopcontact" -#: dcim/models/device_component_templates.py:358 +#: netbox/dcim/models/device_component_templates.py:358 msgid "power outlet templates" msgstr "sjablonen voor stopcontacten" -#: dcim/models/device_component_templates.py:367 +#: netbox/dcim/models/device_component_templates.py:367 #, 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" -#: dcim/models/device_component_templates.py:371 +#: netbox/dcim/models/device_component_templates.py:371 #, 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" -#: dcim/models/device_component_templates.py:423 -#: dcim/models/device_components.py:611 +#: netbox/dcim/models/device_component_templates.py:423 +#: netbox/dcim/models/device_components.py:611 msgid "management only" msgstr "alleen beheer" -#: dcim/models/device_component_templates.py:431 -#: dcim/models/device_components.py:550 +#: netbox/dcim/models/device_component_templates.py:431 +#: netbox/dcim/models/device_components.py:550 msgid "bridge interface" msgstr "bridge-interface" -#: dcim/models/device_component_templates.py:449 -#: dcim/models/device_components.py:636 +#: netbox/dcim/models/device_component_templates.py:449 +#: netbox/dcim/models/device_components.py:636 msgid "wireless role" msgstr "draadloze rol" -#: dcim/models/device_component_templates.py:455 +#: netbox/dcim/models/device_component_templates.py:455 msgid "interface template" msgstr "interfacesjabloon" -#: dcim/models/device_component_templates.py:456 +#: netbox/dcim/models/device_component_templates.py:456 msgid "interface templates" msgstr "interfacesjablonen" -#: dcim/models/device_component_templates.py:463 -#: dcim/models/device_components.py:804 -#: virtualization/models/virtualmachines.py:405 +#: netbox/dcim/models/device_component_templates.py:463 +#: netbox/dcim/models/device_components.py:804 +#: netbox/virtualization/models/virtualmachines.py:405 msgid "An interface cannot be bridged to itself." msgstr "Een interface kan niet naar zichzelf worden overbrugd." -#: dcim/models/device_component_templates.py:466 +#: netbox/dcim/models/device_component_templates.py:466 #, python-brace-format msgid "Bridge interface ({bridge}) must belong to the same device type" msgstr "Bridge-interface ({bridge}) moet tot hetzelfde apparaattype behoren" -#: dcim/models/device_component_templates.py:470 +#: netbox/dcim/models/device_component_templates.py:470 #, python-brace-format msgid "Bridge interface ({bridge}) must belong to the same module type" msgstr "Bridge-interface ({bridge}) moet tot hetzelfde moduletype behoren" -#: dcim/models/device_component_templates.py:526 -#: dcim/models/device_components.py:984 +#: netbox/dcim/models/device_component_templates.py:526 +#: netbox/dcim/models/device_components.py:984 msgid "rear port position" msgstr "positie van de achterpoort" -#: dcim/models/device_component_templates.py:551 +#: netbox/dcim/models/device_component_templates.py:551 msgid "front port template" msgstr "sjabloon voor de voorpoort" -#: dcim/models/device_component_templates.py:552 +#: netbox/dcim/models/device_component_templates.py:552 msgid "front port templates" msgstr "sjablonen voor de voorpoort" -#: dcim/models/device_component_templates.py:562 +#: netbox/dcim/models/device_component_templates.py:562 #, python-brace-format msgid "Rear port ({name}) must belong to the same device type" msgstr "Achterpoort ({name}) moet tot hetzelfde apparaattype behoren" -#: dcim/models/device_component_templates.py:568 +#: netbox/dcim/models/device_component_templates.py:568 #, python-brace-format msgid "" "Invalid rear port position ({position}); rear port {name} has only {count} " @@ -4955,48 +5425,48 @@ msgstr "" "Ongeldige positie van de achterpoort ({position}); achterpoort {name} heeft " "slechts {count} standen" -#: dcim/models/device_component_templates.py:621 -#: dcim/models/device_components.py:1053 +#: netbox/dcim/models/device_component_templates.py:621 +#: netbox/dcim/models/device_components.py:1053 msgid "positions" msgstr "standen" -#: dcim/models/device_component_templates.py:632 +#: netbox/dcim/models/device_component_templates.py:632 msgid "rear port template" msgstr "sjabloon voor de achterpoort" -#: dcim/models/device_component_templates.py:633 +#: netbox/dcim/models/device_component_templates.py:633 msgid "rear port templates" msgstr "sjablonen voor achterpoorten" -#: dcim/models/device_component_templates.py:662 -#: dcim/models/device_components.py:1103 +#: netbox/dcim/models/device_component_templates.py:662 +#: netbox/dcim/models/device_components.py:1103 msgid "position" msgstr "positie" -#: dcim/models/device_component_templates.py:665 -#: dcim/models/device_components.py:1106 +#: netbox/dcim/models/device_component_templates.py:665 +#: netbox/dcim/models/device_components.py:1106 msgid "Identifier to reference when renaming installed components" msgstr "" "Identificatie waarnaar moet worden verwezen bij het hernoemen van " "geïnstalleerde componenten" -#: dcim/models/device_component_templates.py:671 +#: netbox/dcim/models/device_component_templates.py:671 msgid "module bay template" msgstr "sjabloon voor modulebay" -#: dcim/models/device_component_templates.py:672 +#: netbox/dcim/models/device_component_templates.py:672 msgid "module bay templates" msgstr "sjablonen voor modulebay" -#: dcim/models/device_component_templates.py:699 +#: netbox/dcim/models/device_component_templates.py:699 msgid "device bay template" msgstr "sjabloon voor apparaatvak" -#: dcim/models/device_component_templates.py:700 +#: netbox/dcim/models/device_component_templates.py:700 msgid "device bay templates" msgstr "sjablonen voor apparaatruimte" -#: dcim/models/device_component_templates.py:713 +#: netbox/dcim/models/device_component_templates.py:713 #, python-brace-format msgid "" "Subdevice role of device type ({device_type}) must be set to \"parent\" to " @@ -5005,206 +5475,211 @@ msgstr "" "De rol van het apparaattype van het subapparaat ({device_type}) moet op " "„parent” zijn ingesteld om apparaatbays toe te staan." -#: dcim/models/device_component_templates.py:768 -#: dcim/models/device_components.py:1262 +#: netbox/dcim/models/device_component_templates.py:768 +#: netbox/dcim/models/device_components.py:1262 msgid "part ID" msgstr "onderdeel-ID" -#: dcim/models/device_component_templates.py:770 -#: dcim/models/device_components.py:1264 +#: netbox/dcim/models/device_component_templates.py:770 +#: netbox/dcim/models/device_components.py:1264 msgid "Manufacturer-assigned part identifier" msgstr "Onderdeel-ID toegewezen door de fabrikant" -#: dcim/models/device_component_templates.py:787 +#: netbox/dcim/models/device_component_templates.py:787 msgid "inventory item template" msgstr "sjabloon voor inventarisitems" -#: dcim/models/device_component_templates.py:788 +#: netbox/dcim/models/device_component_templates.py:788 msgid "inventory item templates" msgstr "sjablonen voor inventarisitems" -#: dcim/models/device_components.py:105 +#: netbox/dcim/models/device_components.py:105 msgid "Components cannot be moved to a different device." msgstr "Componenten kunnen niet naar een ander apparaat worden verplaatst." -#: dcim/models/device_components.py:144 +#: netbox/dcim/models/device_components.py:144 msgid "cable end" msgstr "uiteinde van de kabel" -#: dcim/models/device_components.py:150 +#: netbox/dcim/models/device_components.py:150 msgid "mark connected" msgstr "markeer verbonden" -#: dcim/models/device_components.py:152 +#: netbox/dcim/models/device_components.py:152 msgid "Treat as if a cable is connected" msgstr "Behandel alsof er een kabel is aangesloten" -#: dcim/models/device_components.py:170 +#: netbox/dcim/models/device_components.py:170 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." -#: dcim/models/device_components.py:174 +#: netbox/dcim/models/device_components.py:174 msgid "Cable end must not be set without a cable." msgstr "Het kabeluiteinde mag niet zonder kabel worden ingesteld." -#: dcim/models/device_components.py:178 +#: netbox/dcim/models/device_components.py:178 msgid "Cannot mark as connected with a cable attached." msgstr "Kan niet markeren als verbonden met een aangesloten kabel." -#: dcim/models/device_components.py:202 +#: netbox/dcim/models/device_components.py:202 #, python-brace-format msgid "{class_name} models must declare a parent_object property" msgstr "{class_name} modellen moeten een eigenschap parent_object declareren" -#: dcim/models/device_components.py:287 dcim/models/device_components.py:316 -#: dcim/models/device_components.py:349 dcim/models/device_components.py:467 +#: 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 msgid "Physical port type" msgstr "Fysiek poorttype" -#: dcim/models/device_components.py:290 dcim/models/device_components.py:319 +#: netbox/dcim/models/device_components.py:290 +#: netbox/dcim/models/device_components.py:319 msgid "speed" msgstr "snelheid" -#: dcim/models/device_components.py:294 dcim/models/device_components.py:323 +#: netbox/dcim/models/device_components.py:294 +#: netbox/dcim/models/device_components.py:323 msgid "Port speed in bits per second" msgstr "Poortsnelheid in bits per seconde" -#: dcim/models/device_components.py:300 +#: netbox/dcim/models/device_components.py:300 msgid "console port" msgstr "consolepoort" -#: dcim/models/device_components.py:301 +#: netbox/dcim/models/device_components.py:301 msgid "console ports" msgstr "consolepoorten" -#: dcim/models/device_components.py:329 +#: netbox/dcim/models/device_components.py:329 msgid "console server port" msgstr "console-serverpoort" -#: dcim/models/device_components.py:330 +#: netbox/dcim/models/device_components.py:330 msgid "console server ports" msgstr "console-serverpoorten" -#: dcim/models/device_components.py:369 +#: netbox/dcim/models/device_components.py:369 msgid "power port" msgstr "voedingspoort" -#: dcim/models/device_components.py:370 +#: netbox/dcim/models/device_components.py:370 msgid "power ports" msgstr "voedingspoorten" -#: dcim/models/device_components.py:487 +#: netbox/dcim/models/device_components.py:487 msgid "power outlet" msgstr "stopcontact" -#: dcim/models/device_components.py:488 +#: netbox/dcim/models/device_components.py:488 msgid "power outlets" msgstr "stopcontacten" -#: dcim/models/device_components.py:499 +#: netbox/dcim/models/device_components.py:499 #, 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" -#: dcim/models/device_components.py:530 vpn/models/crypto.py:81 -#: vpn/models/crypto.py:226 +#: netbox/dcim/models/device_components.py:530 netbox/vpn/models/crypto.py:81 +#: netbox/vpn/models/crypto.py:226 msgid "mode" msgstr "-modus" -#: dcim/models/device_components.py:534 +#: netbox/dcim/models/device_components.py:534 msgid "IEEE 802.1Q tagging strategy" msgstr "IEEE 802.1Q-tagging-strategie" -#: dcim/models/device_components.py:542 +#: netbox/dcim/models/device_components.py:542 msgid "parent interface" msgstr "bovenliggende interface" -#: dcim/models/device_components.py:602 +#: netbox/dcim/models/device_components.py:602 msgid "parent LAG" msgstr "LAG van de ouders" -#: dcim/models/device_components.py:612 +#: 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" -#: dcim/models/device_components.py:617 +#: netbox/dcim/models/device_components.py:617 msgid "speed (Kbps)" msgstr "snelheid (Kbps)" -#: dcim/models/device_components.py:620 +#: netbox/dcim/models/device_components.py:620 msgid "duplex" msgstr "tweezijdig" -#: dcim/models/device_components.py:630 +#: netbox/dcim/models/device_components.py:630 msgid "64-bit World Wide Name" msgstr "64-bits wereldwijde naam" -#: dcim/models/device_components.py:642 +#: netbox/dcim/models/device_components.py:642 msgid "wireless channel" msgstr "draadloos kanaal" -#: dcim/models/device_components.py:649 +#: netbox/dcim/models/device_components.py:649 msgid "channel frequency (MHz)" msgstr "kanaalfrequentie (MHz)" -#: dcim/models/device_components.py:650 dcim/models/device_components.py:658 +#: 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)" -#: dcim/models/device_components.py:664 +#: netbox/dcim/models/device_components.py:664 msgid "transmit power (dBm)" msgstr "zendvermogen (dBm)" -#: dcim/models/device_components.py:689 wireless/models.py:117 +#: netbox/dcim/models/device_components.py:689 netbox/wireless/models.py:117 msgid "wireless LANs" msgstr "draadloze LAN's" -#: dcim/models/device_components.py:697 -#: virtualization/models/virtualmachines.py:335 +#: netbox/dcim/models/device_components.py:697 +#: netbox/virtualization/models/virtualmachines.py:335 msgid "untagged VLAN" msgstr "VLAN zonder label" -#: dcim/models/device_components.py:703 -#: virtualization/models/virtualmachines.py:341 +#: netbox/dcim/models/device_components.py:703 +#: netbox/virtualization/models/virtualmachines.py:341 msgid "tagged VLANs" msgstr "gelabelde VLAN's" -#: dcim/models/device_components.py:745 -#: virtualization/models/virtualmachines.py:377 +#: netbox/dcim/models/device_components.py:745 +#: netbox/virtualization/models/virtualmachines.py:377 msgid "interface" msgstr "interface" -#: dcim/models/device_components.py:746 -#: virtualization/models/virtualmachines.py:378 +#: netbox/dcim/models/device_components.py:746 +#: netbox/virtualization/models/virtualmachines.py:378 msgid "interfaces" msgstr "interfaces" -#: dcim/models/device_components.py:757 +#: netbox/dcim/models/device_components.py:757 #, python-brace-format msgid "{display_type} interfaces cannot have a cable attached." msgstr "{display_type} op interfaces kan geen kabel worden aangesloten." -#: dcim/models/device_components.py:765 +#: netbox/dcim/models/device_components.py:765 #, python-brace-format msgid "{display_type} interfaces cannot be marked as connected." msgstr "" "{display_type} interfaces kunnen niet als verbonden worden gemarkeerd." -#: dcim/models/device_components.py:774 -#: virtualization/models/virtualmachines.py:390 +#: netbox/dcim/models/device_components.py:774 +#: netbox/virtualization/models/virtualmachines.py:390 msgid "An interface cannot be its own parent." msgstr "Een interface kan niet zijn eigen ouder zijn." -#: dcim/models/device_components.py:778 +#: netbox/dcim/models/device_components.py:778 msgid "Only virtual interfaces may be assigned to a parent interface." msgstr "" "Alleen virtuele interfaces mogen aan een bovenliggende interface worden " "toegewezen." -#: dcim/models/device_components.py:785 +#: netbox/dcim/models/device_components.py:785 #, python-brace-format msgid "" "The selected parent interface ({interface}) belongs to a different device " @@ -5213,7 +5688,7 @@ msgstr "" "De geselecteerde ouderinterface ({interface}) hoort bij een ander apparaat " "({device})" -#: dcim/models/device_components.py:791 +#: netbox/dcim/models/device_components.py:791 #, python-brace-format msgid "" "The selected parent interface ({interface}) belongs to {device}, which is " @@ -5222,7 +5697,7 @@ msgstr "" "De geselecteerde ouderinterface ({interface}) behoort tot {device}, dat geen" " deel uitmaakt van een virtueel chassis {virtual_chassis}." -#: dcim/models/device_components.py:811 +#: netbox/dcim/models/device_components.py:811 #, python-brace-format msgid "" "The selected bridge interface ({bridge}) belongs to a different device " @@ -5231,7 +5706,7 @@ msgstr "" "De geselecteerde bridge-interface ({bridge}) hoort bij een ander apparaat " "({device})." -#: dcim/models/device_components.py:817 +#: netbox/dcim/models/device_components.py:817 #, python-brace-format msgid "" "The selected bridge interface ({interface}) belongs to {device}, which is " @@ -5240,15 +5715,15 @@ msgstr "" "De geselecteerde bridge-interface ({interface}) behoort tot {device}, dat " "geen deel uitmaakt van een virtueel chassis {virtual_chassis}." -#: dcim/models/device_components.py:828 +#: netbox/dcim/models/device_components.py:828 msgid "Virtual interfaces cannot have a parent LAG interface." msgstr "Virtuele interfaces kunnen geen bovenliggende LAG-interface hebben." -#: dcim/models/device_components.py:832 +#: netbox/dcim/models/device_components.py:832 msgid "A LAG interface cannot be its own parent." msgstr "Een LAG-interface kan niet zijn eigen ouder zijn." -#: dcim/models/device_components.py:839 +#: netbox/dcim/models/device_components.py:839 #, python-brace-format msgid "" "The selected LAG interface ({lag}) belongs to a different device ({device})." @@ -5256,7 +5731,7 @@ msgstr "" "De geselecteerde LAG-interface ({lag}) hoort bij een ander apparaat " "({device})." -#: dcim/models/device_components.py:845 +#: netbox/dcim/models/device_components.py:845 #, python-brace-format msgid "" "The selected LAG interface ({lag}) belongs to {device}, which is not part of" @@ -5265,46 +5740,46 @@ msgstr "" "De geselecteerde LAG-interface ({lag}) behoort tot {device}, dat geen deel " "uitmaakt van een virtueel chassis {virtual_chassis}." -#: dcim/models/device_components.py:856 +#: netbox/dcim/models/device_components.py:856 msgid "Virtual interfaces cannot have a PoE mode." msgstr "Virtuele interfaces kunnen geen PoE-modus hebben." -#: dcim/models/device_components.py:860 +#: netbox/dcim/models/device_components.py:860 msgid "Virtual interfaces cannot have a PoE type." msgstr "Virtuele interfaces mogen geen PoE-type hebben." -#: dcim/models/device_components.py:866 +#: netbox/dcim/models/device_components.py:866 msgid "Must specify PoE mode when designating a PoE type." msgstr "Moet de PoE-modus specificeren bij het aanwijzen van een PoE-type." -#: dcim/models/device_components.py:873 +#: netbox/dcim/models/device_components.py:873 msgid "Wireless role may be set only on wireless interfaces." msgstr "De draadloze rol kan alleen worden ingesteld op draadloze interfaces." -#: dcim/models/device_components.py:875 +#: netbox/dcim/models/device_components.py:875 msgid "Channel may be set only on wireless interfaces." msgstr "Kanaal mag alleen worden ingesteld op draadloze interfaces." -#: dcim/models/device_components.py:881 +#: netbox/dcim/models/device_components.py:881 msgid "Channel frequency may be set only on wireless interfaces." msgstr "" "De kanaalfrequentie mag alleen worden ingesteld op draadloze interfaces." -#: dcim/models/device_components.py:885 +#: netbox/dcim/models/device_components.py:885 msgid "Cannot specify custom frequency with channel selected." msgstr "" "Kan geen aangepaste frequentie specificeren met een geselecteerd kanaal." -#: dcim/models/device_components.py:891 +#: netbox/dcim/models/device_components.py:891 msgid "Channel width may be set only on wireless interfaces." msgstr "De kanaalbreedte kan alleen worden ingesteld op draadloze interfaces." -#: dcim/models/device_components.py:893 +#: netbox/dcim/models/device_components.py:893 msgid "Cannot specify custom width with channel selected." msgstr "" "Kan geen aangepaste breedte specificeren als het kanaal is geselecteerd." -#: dcim/models/device_components.py:901 +#: netbox/dcim/models/device_components.py:901 #, python-brace-format msgid "" "The untagged VLAN ({untagged_vlan}) must belong to the same site as the " @@ -5313,24 +5788,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." -#: dcim/models/device_components.py:990 +#: netbox/dcim/models/device_components.py:990 msgid "Mapped position on corresponding rear port" msgstr "In kaart gebrachte positie op de corresponderende achterpoort" -#: dcim/models/device_components.py:1006 +#: netbox/dcim/models/device_components.py:1006 msgid "front port" msgstr "poort voor" -#: dcim/models/device_components.py:1007 +#: netbox/dcim/models/device_components.py:1007 msgid "front ports" msgstr "poorten voor" -#: dcim/models/device_components.py:1021 +#: netbox/dcim/models/device_components.py:1021 #, python-brace-format msgid "Rear port ({rear_port}) must belong to the same device" msgstr "Achterpoort ({rear_port}) moet tot hetzelfde apparaat behoren" -#: dcim/models/device_components.py:1029 +#: netbox/dcim/models/device_components.py:1029 #, python-brace-format msgid "" "Invalid rear port position ({rear_port_position}): Rear port {name} has only" @@ -5339,19 +5814,19 @@ msgstr "" "Ongeldige positie van de achterpoort ({rear_port_position}): Achterpoort " "{name} heeft slechts {positions} posities." -#: dcim/models/device_components.py:1059 +#: netbox/dcim/models/device_components.py:1059 msgid "Number of front ports which may be mapped" msgstr "Aantal poorten aan de voorkant dat in kaart kan worden gebracht" -#: dcim/models/device_components.py:1064 +#: netbox/dcim/models/device_components.py:1064 msgid "rear port" msgstr "poort achter" -#: dcim/models/device_components.py:1065 +#: netbox/dcim/models/device_components.py:1065 msgid "rear ports" msgstr "poorten achter" -#: dcim/models/device_components.py:1079 +#: netbox/dcim/models/device_components.py:1079 #, python-brace-format msgid "" "The number of positions cannot be less than the number of mapped front ports" @@ -5360,38 +5835,39 @@ msgstr "" "Het aantal posities mag niet minder zijn dan het aantal toegewezen poorten " "aan de voorkant ({frontport_count})" -#: dcim/models/device_components.py:1120 +#: netbox/dcim/models/device_components.py:1120 msgid "module bay" msgstr "modulevak" -#: dcim/models/device_components.py:1121 +#: netbox/dcim/models/device_components.py:1121 msgid "module bays" msgstr "modulevakken" -#: dcim/models/device_components.py:1138 dcim/models/devices.py:1224 +#: netbox/dcim/models/device_components.py:1138 +#: netbox/dcim/models/devices.py:1224 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." -#: dcim/models/device_components.py:1164 +#: netbox/dcim/models/device_components.py:1164 msgid "device bay" msgstr "apparaatvak" -#: dcim/models/device_components.py:1165 +#: netbox/dcim/models/device_components.py:1165 msgid "device bays" msgstr "bays voor apparaten" -#: dcim/models/device_components.py:1175 +#: netbox/dcim/models/device_components.py:1175 #, python-brace-format msgid "This type of device ({device_type}) does not support device bays." msgstr "Dit type apparaat ({device_type}) ondersteunt geen apparaatsleuven." -#: dcim/models/device_components.py:1181 +#: netbox/dcim/models/device_components.py:1181 msgid "Cannot install a device into itself." msgstr "Kan een apparaat niet op zichzelf installeren." -#: dcim/models/device_components.py:1189 +#: netbox/dcim/models/device_components.py:1189 #, python-brace-format msgid "" "Cannot install the specified device; device is already installed in {bay}." @@ -5399,116 +5875,118 @@ msgstr "" "Kan het opgegeven apparaat niet installeren; het apparaat is al " "geïnstalleerd in {bay}." -#: dcim/models/device_components.py:1210 +#: netbox/dcim/models/device_components.py:1210 msgid "inventory item role" msgstr "Rol van het inventarisitem" -#: dcim/models/device_components.py:1211 +#: netbox/dcim/models/device_components.py:1211 msgid "inventory item roles" msgstr "Rollen van inventarisitems" -#: dcim/models/device_components.py:1268 dcim/models/devices.py:607 -#: dcim/models/devices.py:1181 dcim/models/racks.py:313 -#: virtualization/models/virtualmachines.py:131 +#: 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 msgid "serial number" msgstr "serienummer" -#: dcim/models/device_components.py:1276 dcim/models/devices.py:615 -#: dcim/models/devices.py:1188 dcim/models/racks.py:320 +#: 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 msgid "asset tag" msgstr "tag voor bedrijfsmiddelen" -#: dcim/models/device_components.py:1277 +#: netbox/dcim/models/device_components.py:1277 msgid "A unique tag used to identify this item" msgstr "Een unieke tag die wordt gebruikt om dit item te identificeren" -#: dcim/models/device_components.py:1280 +#: netbox/dcim/models/device_components.py:1280 msgid "discovered" msgstr "ontdekt" -#: dcim/models/device_components.py:1282 +#: netbox/dcim/models/device_components.py:1282 msgid "This item was automatically discovered" msgstr "Dit item is automatisch ontdekt" -#: dcim/models/device_components.py:1300 +#: netbox/dcim/models/device_components.py:1300 msgid "inventory item" msgstr "inventarisitem" -#: dcim/models/device_components.py:1301 +#: netbox/dcim/models/device_components.py:1301 msgid "inventory items" msgstr "inventarisartikelen" -#: dcim/models/device_components.py:1312 +#: netbox/dcim/models/device_components.py:1312 msgid "Cannot assign self as parent." msgstr "Kan zichzelf niet als ouder toewijzen." -#: dcim/models/device_components.py:1320 +#: netbox/dcim/models/device_components.py:1320 msgid "Parent inventory item does not belong to the same device." msgstr "" "Het item van de bovenliggende inventaris behoort niet tot hetzelfde " "apparaat." -#: dcim/models/device_components.py:1326 +#: netbox/dcim/models/device_components.py:1326 msgid "Cannot move an inventory item with dependent children" msgstr "Kan een inventarisitem met afhankelijke kinderen niet verplaatsen" -#: dcim/models/device_components.py:1334 +#: netbox/dcim/models/device_components.py:1334 msgid "Cannot assign inventory item to component on another device" msgstr "Kan inventarisitem niet toewijzen aan component op een ander apparaat" -#: dcim/models/devices.py:54 +#: netbox/dcim/models/devices.py:54 msgid "manufacturer" msgstr "fabrikant" -#: dcim/models/devices.py:55 +#: netbox/dcim/models/devices.py:55 msgid "manufacturers" msgstr "fabrikanten" -#: dcim/models/devices.py:82 dcim/models/devices.py:382 -#: dcim/models/racks.py:133 +#: netbox/dcim/models/devices.py:82 netbox/dcim/models/devices.py:382 +#: netbox/dcim/models/racks.py:133 msgid "model" msgstr "model-" -#: dcim/models/devices.py:95 +#: netbox/dcim/models/devices.py:95 msgid "default platform" msgstr "standaardplatform" -#: dcim/models/devices.py:98 dcim/models/devices.py:386 +#: netbox/dcim/models/devices.py:98 netbox/dcim/models/devices.py:386 msgid "part number" msgstr "onderdeelnummer" -#: dcim/models/devices.py:101 dcim/models/devices.py:389 +#: netbox/dcim/models/devices.py:101 netbox/dcim/models/devices.py:389 msgid "Discrete part number (optional)" msgstr "Discreet onderdeelnummer (optioneel)" -#: dcim/models/devices.py:107 dcim/models/racks.py:54 +#: netbox/dcim/models/devices.py:107 netbox/dcim/models/racks.py:54 msgid "height (U)" msgstr "hoogte (U)" -#: dcim/models/devices.py:111 +#: netbox/dcim/models/devices.py:111 msgid "exclude from utilization" msgstr "uitsluiten van gebruik" -#: dcim/models/devices.py:112 +#: netbox/dcim/models/devices.py:112 msgid "Devices of this type are excluded when calculating rack utilization." msgstr "" "Apparaten van dit type zijn uitgesloten bij de berekening van het " "rackgebruik." -#: dcim/models/devices.py:116 +#: netbox/dcim/models/devices.py:116 msgid "is full depth" msgstr "is volledig diep" -#: dcim/models/devices.py:117 +#: netbox/dcim/models/devices.py:117 msgid "Device consumes both front and rear rack faces." msgstr "" "Het apparaat verbruikt zowel de voorkant als de achterkant van het rack." -#: dcim/models/devices.py:123 +#: netbox/dcim/models/devices.py:123 msgid "parent/child status" msgstr "status van ouder/kind" -#: dcim/models/devices.py:124 +#: netbox/dcim/models/devices.py:124 msgid "" "Parent devices house child devices in device bays. Leave blank if this " "device type is neither a parent nor a child." @@ -5517,24 +5995,24 @@ msgstr "" "apparaatvakken. Laat dit veld leeg als dit apparaattype geen ouder of kind " "is." -#: dcim/models/devices.py:128 dcim/models/devices.py:392 -#: dcim/models/devices.py:659 dcim/models/racks.py:324 +#: netbox/dcim/models/devices.py:128 netbox/dcim/models/devices.py:392 +#: netbox/dcim/models/devices.py:659 netbox/dcim/models/racks.py:324 msgid "airflow" msgstr "luchtstroom" -#: dcim/models/devices.py:204 +#: netbox/dcim/models/devices.py:204 msgid "device type" msgstr "apparaattype" -#: dcim/models/devices.py:205 +#: netbox/dcim/models/devices.py:205 msgid "device types" msgstr "soorten apparaten" -#: dcim/models/devices.py:290 +#: netbox/dcim/models/devices.py:290 msgid "U height must be in increments of 0.5 rack units." msgstr "De U-hoogte moet in stappen van 0,5 rekeenheden zijn." -#: dcim/models/devices.py:307 +#: netbox/dcim/models/devices.py:307 #, python-brace-format msgid "" "Device {device} in rack {rack} does not have sufficient space to accommodate" @@ -5543,7 +6021,7 @@ msgstr "" "Apparaat {device} in een rek {rack} heeft niet voldoende ruimte voor een " "hoogte van {height}U" -#: dcim/models/devices.py:322 +#: netbox/dcim/models/devices.py:322 #, python-brace-format msgid "" "Unable to set 0U height: Found {racked_instance_count} " @@ -5553,7 +6031,7 @@ msgstr "" "href=\"{url}\">{racked_instance_count} instanties al in rekken " "gemonteerd." -#: dcim/models/devices.py:331 +#: netbox/dcim/models/devices.py:331 msgid "" "Must delete all device bay templates associated with this device before " "declassifying it as a parent device." @@ -5561,152 +6039,152 @@ msgstr "" "U moet alle sjablonen voor apparaatruimte verwijderen die aan dit apparaat " "zijn gekoppeld voordat u het als ouderapparaat declassificeert." -#: dcim/models/devices.py:337 +#: netbox/dcim/models/devices.py:337 msgid "Child device types must be 0U." msgstr "Apparaattypen voor kinderen moeten 0U zijn." -#: dcim/models/devices.py:411 +#: netbox/dcim/models/devices.py:411 msgid "module type" msgstr "moduletype" -#: dcim/models/devices.py:412 +#: netbox/dcim/models/devices.py:412 msgid "module types" msgstr "moduletypen" -#: dcim/models/devices.py:485 +#: netbox/dcim/models/devices.py:485 msgid "Virtual machines may be assigned to this role" msgstr "Virtuele machines kunnen aan deze rol worden toegewezen" -#: dcim/models/devices.py:497 +#: netbox/dcim/models/devices.py:497 msgid "device role" msgstr "rol van het apparaat" -#: dcim/models/devices.py:498 +#: netbox/dcim/models/devices.py:498 msgid "device roles" msgstr "rollen van het apparaat" -#: dcim/models/devices.py:515 +#: netbox/dcim/models/devices.py:515 msgid "Optionally limit this platform to devices of a certain manufacturer" msgstr "" "Beperk dit platform optioneel tot apparaten van een bepaalde fabrikant" -#: dcim/models/devices.py:527 +#: netbox/dcim/models/devices.py:527 msgid "platform" msgstr "platform" -#: dcim/models/devices.py:528 +#: netbox/dcim/models/devices.py:528 msgid "platforms" msgstr "platformen" -#: dcim/models/devices.py:576 +#: netbox/dcim/models/devices.py:576 msgid "The function this device serves" msgstr "De functie die dit apparaat dient" -#: dcim/models/devices.py:608 +#: netbox/dcim/models/devices.py:608 msgid "Chassis serial number, assigned by the manufacturer" msgstr "Serienummer van het chassis, toegekend door de fabrikant" -#: dcim/models/devices.py:616 dcim/models/devices.py:1189 +#: netbox/dcim/models/devices.py:616 netbox/dcim/models/devices.py:1189 msgid "A unique tag used to identify this device" msgstr "Een unieke tag die wordt gebruikt om dit apparaat te identificeren" -#: dcim/models/devices.py:643 +#: netbox/dcim/models/devices.py:643 msgid "position (U)" msgstr "positie (U)" -#: dcim/models/devices.py:650 +#: netbox/dcim/models/devices.py:650 msgid "rack face" msgstr "gezicht met een rekje" -#: dcim/models/devices.py:670 dcim/models/devices.py:1415 -#: virtualization/models/virtualmachines.py:100 +#: netbox/dcim/models/devices.py:670 netbox/dcim/models/devices.py:1420 +#: netbox/virtualization/models/virtualmachines.py:100 msgid "primary IPv4" msgstr "primaire IPv4" -#: dcim/models/devices.py:678 dcim/models/devices.py:1423 -#: virtualization/models/virtualmachines.py:108 +#: netbox/dcim/models/devices.py:678 netbox/dcim/models/devices.py:1428 +#: netbox/virtualization/models/virtualmachines.py:108 msgid "primary IPv6" msgstr "primaire IPv6" -#: dcim/models/devices.py:686 +#: netbox/dcim/models/devices.py:686 msgid "out-of-band IP" msgstr "IP-adres buiten de band" -#: dcim/models/devices.py:703 +#: netbox/dcim/models/devices.py:703 msgid "VC position" msgstr "VC-positie" -#: dcim/models/devices.py:706 +#: netbox/dcim/models/devices.py:706 msgid "Virtual chassis position" msgstr "Virtuele chassispositie" -#: dcim/models/devices.py:709 +#: netbox/dcim/models/devices.py:709 msgid "VC priority" msgstr "VC-prioriteit" -#: dcim/models/devices.py:713 +#: netbox/dcim/models/devices.py:713 msgid "Virtual chassis master election priority" msgstr "Verkiezingsprioriteit van het virtuele chassis" -#: dcim/models/devices.py:716 dcim/models/sites.py:207 +#: netbox/dcim/models/devices.py:716 netbox/dcim/models/sites.py:207 msgid "latitude" msgstr "breedtegraad" -#: dcim/models/devices.py:721 dcim/models/devices.py:729 -#: dcim/models/sites.py:212 dcim/models/sites.py:220 +#: netbox/dcim/models/devices.py:721 netbox/dcim/models/devices.py:729 +#: netbox/dcim/models/sites.py:212 netbox/dcim/models/sites.py:220 msgid "GPS coordinate in decimal format (xx.yyyyyy)" msgstr "GPS-coördinaat in decimaal formaat (xx.jjjjj)" -#: dcim/models/devices.py:724 dcim/models/sites.py:215 +#: netbox/dcim/models/devices.py:724 netbox/dcim/models/sites.py:215 msgid "longitude" msgstr "lengtegraad" -#: dcim/models/devices.py:797 +#: netbox/dcim/models/devices.py:797 msgid "Device name must be unique per site." msgstr "De apparaatnaam moet per site uniek zijn." -#: dcim/models/devices.py:808 ipam/models/services.py:75 +#: netbox/dcim/models/devices.py:808 netbox/ipam/models/services.py:75 msgid "device" msgstr "apparaat" -#: dcim/models/devices.py:809 +#: netbox/dcim/models/devices.py:809 msgid "devices" msgstr "apparaten" -#: dcim/models/devices.py:835 +#: netbox/dcim/models/devices.py:835 #, python-brace-format msgid "Rack {rack} does not belong to site {site}." msgstr "Rek {rack} hoort niet bij de site {site}." -#: dcim/models/devices.py:840 +#: netbox/dcim/models/devices.py:840 #, python-brace-format msgid "Location {location} does not belong to site {site}." msgstr "Locatie {location} hoort niet bij de site {site}." -#: dcim/models/devices.py:846 +#: netbox/dcim/models/devices.py:846 #, python-brace-format msgid "Rack {rack} does not belong to location {location}." msgstr "Rek {rack} hoort niet bij de locatie {location}." -#: dcim/models/devices.py:853 +#: netbox/dcim/models/devices.py:853 msgid "Cannot select a rack face without assigning a rack." msgstr "Kan geen rackface selecteren zonder een rack toe te wijzen." -#: dcim/models/devices.py:857 +#: netbox/dcim/models/devices.py:857 msgid "Cannot select a rack position without assigning a rack." msgstr "Kan geen rackpositie selecteren zonder een rack toe te wijzen." -#: dcim/models/devices.py:863 +#: netbox/dcim/models/devices.py:863 msgid "Position must be in increments of 0.5 rack units." msgstr "De positie moet in stappen van 0,5 rekeenheden zijn." -#: dcim/models/devices.py:867 +#: netbox/dcim/models/devices.py:867 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." -#: dcim/models/devices.py:875 +#: netbox/dcim/models/devices.py:875 #, python-brace-format msgid "" "A 0U device type ({device_type}) cannot be assigned to a rack position." @@ -5714,7 +6192,7 @@ msgstr "" "Een 0U-apparaattype ({device_type}) kan niet worden toegewezen aan een " "rackpositie." -#: dcim/models/devices.py:886 +#: netbox/dcim/models/devices.py:886 msgid "" "Child device types cannot be assigned to a rack face. This is an attribute " "of the parent device." @@ -5722,7 +6200,7 @@ msgstr "" "Onderliggende apparaattypen kunnen niet aan een rackface worden toegewezen. " "Dit is een kenmerk van het ouderapparaat." -#: dcim/models/devices.py:893 +#: netbox/dcim/models/devices.py:893 msgid "" "Child device types cannot be assigned to a rack position. This is an " "attribute of the parent device." @@ -5730,7 +6208,7 @@ msgstr "" "Onderliggende apparaattypen kunnen niet worden toegewezen aan een " "rackpositie. Dit is een kenmerk van het ouderapparaat." -#: dcim/models/devices.py:907 +#: netbox/dcim/models/devices.py:907 #, python-brace-format msgid "" "U{position} is already occupied or does not have sufficient space to " @@ -5739,22 +6217,22 @@ msgstr "" "U{position} is al bezet of beschikt niet over voldoende ruimte voor dit " "apparaattype: {device_type} ({u_height}U)" -#: dcim/models/devices.py:922 +#: netbox/dcim/models/devices.py:922 #, python-brace-format msgid "{ip} is not an IPv4 address." msgstr "{ip} is geen IPv4-adres." -#: dcim/models/devices.py:931 dcim/models/devices.py:946 +#: netbox/dcim/models/devices.py:931 netbox/dcim/models/devices.py:946 #, 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." -#: dcim/models/devices.py:937 +#: netbox/dcim/models/devices.py:937 #, python-brace-format msgid "{ip} is not an IPv6 address." msgstr "{ip} is geen IPv6-adres." -#: dcim/models/devices.py:964 +#: netbox/dcim/models/devices.py:964 #, python-brace-format msgid "" "The assigned platform is limited to {platform_manufacturer} device types, " @@ -5764,18 +6242,18 @@ msgstr "" "apparaattypen, maar het type van dit apparaat behoort tot " "{devicetype_manufacturer}." -#: dcim/models/devices.py:975 +#: netbox/dcim/models/devices.py:975 #, python-brace-format msgid "The assigned cluster belongs to a different site ({site})" msgstr "Het toegewezen cluster behoort tot een andere site ({site})" -#: dcim/models/devices.py:983 +#: netbox/dcim/models/devices.py:983 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" " zijn positie hebben bepaald." -#: dcim/models/devices.py:988 +#: netbox/dcim/models/devices.py:988 #, python-brace-format msgid "" "Device cannot be removed from virtual chassis {virtual_chassis} because it " @@ -5784,15 +6262,15 @@ msgstr "" "Het apparaat kan niet van het virtuele chassis worden verwijderd " "{virtual_chassis} omdat het momenteel is aangewezen als zijn master." -#: dcim/models/devices.py:1196 +#: netbox/dcim/models/devices.py:1196 msgid "module" msgstr "module" -#: dcim/models/devices.py:1197 +#: netbox/dcim/models/devices.py:1197 msgid "modules" msgstr "modules" -#: dcim/models/devices.py:1213 +#: netbox/dcim/models/devices.py:1213 #, python-brace-format msgid "" "Module must be installed within a module bay belonging to the assigned " @@ -5801,15 +6279,15 @@ msgstr "" "De module moet worden geïnstalleerd in een modulecompartiment dat bij het " "toegewezen apparaat hoort ({device})." -#: dcim/models/devices.py:1334 +#: netbox/dcim/models/devices.py:1339 msgid "domain" msgstr "domein" -#: dcim/models/devices.py:1347 dcim/models/devices.py:1348 +#: netbox/dcim/models/devices.py:1352 netbox/dcim/models/devices.py:1353 msgid "virtual chassis" msgstr "virtueel chassis" -#: dcim/models/devices.py:1363 +#: netbox/dcim/models/devices.py:1368 #, python-brace-format msgid "" "The selected master ({master}) is not assigned to this virtual chassis." @@ -5817,7 +6295,7 @@ msgstr "" "De geselecteerde master ({master}) is niet toegewezen aan dit virtuele " "chassis." -#: dcim/models/devices.py:1379 +#: netbox/dcim/models/devices.py:1384 #, python-brace-format msgid "" "Unable to delete virtual chassis {self}. There are member interfaces which " @@ -5826,62 +6304,62 @@ msgstr "" "Kan het virtuele chassis niet verwijderen {self}. Er zijn lidinterfaces die " "een LAG-interface tussen chassis vormen." -#: dcim/models/devices.py:1404 vpn/models/l2vpn.py:37 +#: netbox/dcim/models/devices.py:1409 netbox/vpn/models/l2vpn.py:37 msgid "identifier" msgstr "-identificatiecode" -#: dcim/models/devices.py:1405 +#: netbox/dcim/models/devices.py:1410 msgid "Numeric identifier unique to the parent device" msgstr "Numerieke identificatie die uniek is voor het ouderapparaat" -#: dcim/models/devices.py:1433 extras/models/customfields.py:225 -#: extras/models/models.py:107 extras/models/models.py:694 -#: netbox/models/__init__.py:115 +#: 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:115 msgid "comments" msgstr "reacties" -#: dcim/models/devices.py:1449 +#: netbox/dcim/models/devices.py:1454 msgid "virtual device context" msgstr "context van het virtuele apparaat" -#: dcim/models/devices.py:1450 +#: netbox/dcim/models/devices.py:1455 msgid "virtual device contexts" msgstr "contexten van virtuele apparaten" -#: dcim/models/devices.py:1482 +#: netbox/dcim/models/devices.py:1487 #, python-brace-format msgid "{ip} is not an IPv{family} address." msgstr "{ip} is geen IPv{family} adres." -#: dcim/models/devices.py:1488 +#: netbox/dcim/models/devices.py:1493 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." -#: dcim/models/mixins.py:15 extras/models/configs.py:41 -#: extras/models/models.py:313 extras/models/models.py:522 -#: extras/models/search.py:48 ipam/models/ip.py:194 +#: netbox/dcim/models/mixins.py:15 netbox/extras/models/configs.py:41 +#: netbox/extras/models/models.py:313 netbox/extras/models/models.py:522 +#: netbox/extras/models/search.py:48 netbox/ipam/models/ip.py:194 msgid "weight" msgstr "gewicht" -#: dcim/models/mixins.py:22 +#: netbox/dcim/models/mixins.py:22 msgid "weight unit" msgstr "gewichtseenheid" -#: dcim/models/mixins.py:51 +#: 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" -#: dcim/models/power.py:55 +#: netbox/dcim/models/power.py:55 msgid "power panel" msgstr "voedingspaneel" -#: dcim/models/power.py:56 +#: netbox/dcim/models/power.py:56 msgid "power panels" msgstr "elektriciteitspanelen" -#: dcim/models/power.py:70 +#: netbox/dcim/models/power.py:70 #, python-brace-format msgid "" "Location {location} ({location_site}) is in a different site than {site}" @@ -5889,43 +6367,43 @@ msgstr "" "Locatie {location} ({location_site}) bevindt zich op een andere site dan " "{site}" -#: dcim/models/power.py:108 +#: netbox/dcim/models/power.py:108 msgid "supply" msgstr "bevoorrading" -#: dcim/models/power.py:114 +#: netbox/dcim/models/power.py:114 msgid "phase" msgstr "fase" -#: dcim/models/power.py:120 +#: netbox/dcim/models/power.py:120 msgid "voltage" msgstr "spanning" -#: dcim/models/power.py:125 +#: netbox/dcim/models/power.py:125 msgid "amperage" msgstr "stroomsterkte" -#: dcim/models/power.py:130 +#: netbox/dcim/models/power.py:130 msgid "max utilization" msgstr "maximale benutting" -#: dcim/models/power.py:133 +#: netbox/dcim/models/power.py:133 msgid "Maximum permissible draw (percentage)" msgstr "Maximaal toelaatbare trekking (percentage)" -#: dcim/models/power.py:136 +#: netbox/dcim/models/power.py:136 msgid "available power" msgstr "beschikbaar vermogen" -#: dcim/models/power.py:164 +#: netbox/dcim/models/power.py:164 msgid "power feed" msgstr "voeding" -#: dcim/models/power.py:165 +#: netbox/dcim/models/power.py:165 msgid "power feeds" msgstr "voedingen" -#: dcim/models/power.py:179 +#: netbox/dcim/models/power.py:179 #, python-brace-format msgid "" "Rack {rack} ({rack_site}) and power panel {powerpanel} ({powerpanel_site}) " @@ -5934,63 +6412,63 @@ msgstr "" "Rek {rack} ({rack_site}) en voedingspaneel {powerpanel} ({powerpanel_site}) " "bevinden zich op verschillende locaties." -#: dcim/models/power.py:190 +#: netbox/dcim/models/power.py:190 msgid "Voltage cannot be negative for AC supply" msgstr "De spanning kan niet negatief zijn voor de AC-voeding" -#: dcim/models/racks.py:47 +#: netbox/dcim/models/racks.py:47 msgid "width" msgstr "breedte" -#: dcim/models/racks.py:48 +#: netbox/dcim/models/racks.py:48 msgid "Rail-to-rail width" msgstr "Breedte van spoor tot spoor" -#: dcim/models/racks.py:56 +#: netbox/dcim/models/racks.py:56 msgid "Height in rack units" msgstr "Hoogte in rekeenheden" -#: dcim/models/racks.py:60 +#: netbox/dcim/models/racks.py:60 msgid "starting unit" msgstr "starteenheid" -#: dcim/models/racks.py:62 +#: netbox/dcim/models/racks.py:62 msgid "Starting unit for rack" msgstr "Starteenheid voor rack" -#: dcim/models/racks.py:66 +#: netbox/dcim/models/racks.py:66 msgid "descending units" msgstr "aflopende eenheden" -#: dcim/models/racks.py:67 +#: netbox/dcim/models/racks.py:67 msgid "Units are numbered top-to-bottom" msgstr "Eenheden zijn van boven naar beneden genummerd" -#: dcim/models/racks.py:72 +#: netbox/dcim/models/racks.py:72 msgid "outer width" msgstr "buitenbreedte" -#: dcim/models/racks.py:75 +#: netbox/dcim/models/racks.py:75 msgid "Outer dimension of rack (width)" msgstr "Buitenafmeting van het rek (breedte)" -#: dcim/models/racks.py:78 +#: netbox/dcim/models/racks.py:78 msgid "outer depth" msgstr "buitendiepte" -#: dcim/models/racks.py:81 +#: netbox/dcim/models/racks.py:81 msgid "Outer dimension of rack (depth)" msgstr "Buitenafmeting van het rek (diepte)" -#: dcim/models/racks.py:84 +#: netbox/dcim/models/racks.py:84 msgid "outer unit" msgstr "buiteneenheid" -#: dcim/models/racks.py:90 +#: netbox/dcim/models/racks.py:90 msgid "mounting depth" msgstr "montagediepte" -#: dcim/models/racks.py:94 +#: netbox/dcim/models/racks.py:94 msgid "" "Maximum depth of a mounted device, in millimeters. For four-post racks, this" " is the distance between the front and rear rails." @@ -5998,76 +6476,77 @@ msgstr "" "Maximale diepte van een gemonteerd apparaat, in millimeters. Voor rekken met" " vier stijlen is dit de afstand tussen de voor- en achterrails." -#: dcim/models/racks.py:102 +#: netbox/dcim/models/racks.py:102 msgid "max weight" msgstr "maximaal gewicht" -#: dcim/models/racks.py:105 +#: netbox/dcim/models/racks.py:105 msgid "Maximum load capacity for the rack" msgstr "Maximaal draagvermogen voor het rack" -#: dcim/models/racks.py:125 dcim/models/racks.py:252 +#: netbox/dcim/models/racks.py:125 netbox/dcim/models/racks.py:252 msgid "form factor" msgstr "vormfactor" -#: dcim/models/racks.py:162 +#: netbox/dcim/models/racks.py:162 msgid "rack type" msgstr "type rek" -#: dcim/models/racks.py:163 +#: netbox/dcim/models/racks.py:163 msgid "rack types" msgstr "soorten rekken" -#: dcim/models/racks.py:180 dcim/models/racks.py:379 +#: netbox/dcim/models/racks.py:180 netbox/dcim/models/racks.py:379 msgid "Must specify a unit when setting an outer width/depth" msgstr "" "Moet een eenheid specificeren bij het instellen van een buitenbreedte/diepte" -#: dcim/models/racks.py:184 dcim/models/racks.py:383 +#: netbox/dcim/models/racks.py:184 netbox/dcim/models/racks.py:383 msgid "Must specify a unit when setting a maximum weight" msgstr "" "Moet een eenheid specificeren bij het instellen van een maximaal gewicht" -#: dcim/models/racks.py:230 +#: netbox/dcim/models/racks.py:230 msgid "rack role" msgstr "rack rol" -#: dcim/models/racks.py:231 +#: netbox/dcim/models/racks.py:231 msgid "rack roles" msgstr "rack rollen" -#: dcim/models/racks.py:274 +#: netbox/dcim/models/racks.py:274 msgid "facility ID" msgstr "ID van de faciliteit" -#: dcim/models/racks.py:275 +#: netbox/dcim/models/racks.py:275 msgid "Locally-assigned identifier" msgstr "Lokaal toegewezen identificatiecode" -#: dcim/models/racks.py:308 ipam/forms/bulk_import.py:201 -#: ipam/forms/bulk_import.py:266 ipam/forms/bulk_import.py:301 -#: ipam/forms/bulk_import.py:459 virtualization/forms/bulk_import.py:112 +#: 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 msgid "Functional role" msgstr "Functionele rol" -#: dcim/models/racks.py:321 +#: netbox/dcim/models/racks.py:321 msgid "A unique tag used to identify this rack" msgstr "Een unieke tag die wordt gebruikt om dit rek te identificeren" -#: dcim/models/racks.py:359 +#: netbox/dcim/models/racks.py:359 msgid "rack" msgstr "rack" -#: dcim/models/racks.py:360 +#: netbox/dcim/models/racks.py:360 msgid "racks" msgstr "racks" -#: dcim/models/racks.py:375 +#: netbox/dcim/models/racks.py:375 #, python-brace-format msgid "Assigned location must belong to parent site ({site})." msgstr "De toegewezen locatie moet bij de bovenliggende site horen ({site})." -#: dcim/models/racks.py:393 +#: netbox/dcim/models/racks.py:393 #, python-brace-format msgid "" "Rack must be at least {min_height}U tall to house currently installed " @@ -6076,7 +6555,7 @@ msgstr "" "Het rek moet minimaal {min_height}Ik praat om de momenteel geïnstalleerde " "apparaten te huisvesten." -#: dcim/models/racks.py:400 +#: netbox/dcim/models/racks.py:400 #, python-brace-format msgid "" "Rack unit numbering must begin at {position} or less to house currently " @@ -6085,892 +6564,954 @@ msgstr "" "De nummering van de rackeenheid moet beginnen bij {position} of minder om " "momenteel geïnstalleerde apparaten te huisvesten." -#: dcim/models/racks.py:408 +#: netbox/dcim/models/racks.py:408 #, python-brace-format msgid "Location must be from the same site, {site}." msgstr "De locatie moet van dezelfde locatie zijn, {site}." -#: dcim/models/racks.py:670 +#: netbox/dcim/models/racks.py:670 msgid "units" msgstr "eenheden" -#: dcim/models/racks.py:696 +#: netbox/dcim/models/racks.py:696 msgid "rack reservation" msgstr "Reserveren van de baan" -#: dcim/models/racks.py:697 +#: netbox/dcim/models/racks.py:697 msgid "rack reservations" msgstr "Reserveringen volgen" -#: dcim/models/racks.py:714 +#: netbox/dcim/models/racks.py:714 #, python-brace-format msgid "Invalid unit(s) for {height}U rack: {unit_list}" msgstr "Ongeldige eenheid (en) voor {height}U-rail: {unit_list}" -#: dcim/models/racks.py:727 +#: netbox/dcim/models/racks.py:727 #, python-brace-format msgid "The following units have already been reserved: {unit_list}" msgstr "De volgende eenheden zijn al gereserveerd: {unit_list}" -#: dcim/models/sites.py:49 +#: netbox/dcim/models/sites.py:49 msgid "A top-level region with this name already exists." msgstr "Er bestaat al een regio op het hoogste niveau met deze naam." -#: dcim/models/sites.py:59 +#: netbox/dcim/models/sites.py:59 msgid "A top-level region with this slug already exists." msgstr "Er bestaat al een regio op het hoogste niveau met deze slug." -#: dcim/models/sites.py:62 +#: netbox/dcim/models/sites.py:62 msgid "region" msgstr "regio" -#: dcim/models/sites.py:63 +#: netbox/dcim/models/sites.py:63 msgid "regions" msgstr "regio's" -#: dcim/models/sites.py:102 +#: netbox/dcim/models/sites.py:102 msgid "A top-level site group with this name already exists." msgstr "Er bestaat al een sitegroep op het hoogste niveau met deze naam." -#: dcim/models/sites.py:112 +#: netbox/dcim/models/sites.py:112 msgid "A top-level site group with this slug already exists." msgstr "Er bestaat al een sitegroep op het hoogste niveau met deze slug." -#: dcim/models/sites.py:115 +#: netbox/dcim/models/sites.py:115 msgid "site group" msgstr "sitegroep" -#: dcim/models/sites.py:116 +#: netbox/dcim/models/sites.py:116 msgid "site groups" msgstr "sitegroepen" -#: dcim/models/sites.py:141 +#: netbox/dcim/models/sites.py:141 msgid "Full name of the site" msgstr "Volledige naam van de site" -#: dcim/models/sites.py:181 dcim/models/sites.py:279 +#: netbox/dcim/models/sites.py:181 netbox/dcim/models/sites.py:279 msgid "facility" msgstr "faciliteit" -#: dcim/models/sites.py:184 dcim/models/sites.py:282 +#: netbox/dcim/models/sites.py:184 netbox/dcim/models/sites.py:282 msgid "Local facility ID or description" msgstr "ID of beschrijving van de lokale faciliteit" -#: dcim/models/sites.py:195 +#: netbox/dcim/models/sites.py:195 msgid "physical address" msgstr "fysiek adres" -#: dcim/models/sites.py:198 +#: netbox/dcim/models/sites.py:198 msgid "Physical location of the building" msgstr "Fysieke locatie van het gebouw" -#: dcim/models/sites.py:201 +#: netbox/dcim/models/sites.py:201 msgid "shipping address" msgstr "verzendadres" -#: dcim/models/sites.py:204 +#: netbox/dcim/models/sites.py:204 msgid "If different from the physical address" msgstr "Indien anders dan het fysieke adres" -#: dcim/models/sites.py:238 +#: netbox/dcim/models/sites.py:238 msgid "site" msgstr "site" -#: dcim/models/sites.py:239 +#: netbox/dcim/models/sites.py:239 msgid "sites" msgstr "sites" -#: dcim/models/sites.py:309 +#: netbox/dcim/models/sites.py:309 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." -#: dcim/models/sites.py:319 +#: netbox/dcim/models/sites.py:319 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." -#: dcim/models/sites.py:322 +#: netbox/dcim/models/sites.py:322 msgid "location" msgstr "locatie" -#: dcim/models/sites.py:323 +#: netbox/dcim/models/sites.py:323 msgid "locations" msgstr "locaties" -#: dcim/models/sites.py:337 +#: netbox/dcim/models/sites.py:337 #, python-brace-format msgid "Parent location ({parent}) must belong to the same site ({site})." msgstr "" "Locatie van de ouder ({parent}) moet tot dezelfde site behoren ({site})." -#: dcim/tables/cables.py:55 +#: netbox/dcim/tables/cables.py:55 msgid "Termination A" msgstr "Beëindiging A" -#: dcim/tables/cables.py:60 +#: netbox/dcim/tables/cables.py:60 msgid "Termination B" msgstr "Eindpunt B" -#: dcim/tables/cables.py:66 wireless/tables/wirelesslink.py:23 +#: netbox/dcim/tables/cables.py:66 netbox/wireless/tables/wirelesslink.py:23 msgid "Device A" msgstr "Apparaat A" -#: dcim/tables/cables.py:72 wireless/tables/wirelesslink.py:32 +#: netbox/dcim/tables/cables.py:72 netbox/wireless/tables/wirelesslink.py:32 msgid "Device B" msgstr "Apparaat B" -#: dcim/tables/cables.py:78 +#: netbox/dcim/tables/cables.py:78 msgid "Location A" msgstr "Locatie A" -#: dcim/tables/cables.py:84 +#: netbox/dcim/tables/cables.py:84 msgid "Location B" msgstr "Locatie B" -#: dcim/tables/cables.py:90 +#: netbox/dcim/tables/cables.py:90 msgid "Rack A" msgstr "Rek A" -#: dcim/tables/cables.py:96 +#: netbox/dcim/tables/cables.py:96 msgid "Rack B" msgstr "Rek B" -#: dcim/tables/cables.py:102 +#: netbox/dcim/tables/cables.py:102 msgid "Site A" msgstr "Site A" -#: dcim/tables/cables.py:108 +#: netbox/dcim/tables/cables.py:108 msgid "Site B" msgstr "Locatie B" -#: dcim/tables/connections.py:31 dcim/tables/connections.py:50 -#: dcim/tables/connections.py:71 -#: templates/dcim/inc/connection_endpoints.html:16 +#: netbox/dcim/tables/connections.py:31 netbox/dcim/tables/connections.py:50 +#: netbox/dcim/tables/connections.py:71 +#: netbox/templates/dcim/inc/connection_endpoints.html:16 msgid "Reachable" msgstr "Bereikbaar" -#: dcim/tables/devices.py:58 dcim/tables/devices.py:106 -#: dcim/tables/racks.py:150 dcim/tables/sites.py:105 dcim/tables/sites.py:148 -#: extras/tables/tables.py:545 netbox/navigation/menu.py:69 -#: netbox/navigation/menu.py:73 netbox/navigation/menu.py:75 -#: virtualization/forms/model_forms.py:122 -#: virtualization/tables/clusters.py:83 virtualization/views.py:206 +#: 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/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 msgid "Devices" msgstr "Apparaten" -#: dcim/tables/devices.py:63 dcim/tables/devices.py:111 -#: virtualization/tables/clusters.py:88 +#: netbox/dcim/tables/devices.py:63 netbox/dcim/tables/devices.py:111 +#: netbox/virtualization/tables/clusters.py:88 msgid "VMs" msgstr "VM's" -#: dcim/tables/devices.py:100 dcim/tables/devices.py:216 -#: extras/forms/model_forms.py:630 templates/dcim/device.html:112 -#: templates/dcim/device/render_config.html:11 -#: templates/dcim/device/render_config.html:14 -#: templates/dcim/devicerole.html:44 templates/dcim/platform.html:41 -#: templates/extras/configtemplate.html:10 -#: templates/virtualization/virtualmachine.html:48 -#: templates/virtualization/virtualmachine/render_config.html:11 -#: templates/virtualization/virtualmachine/render_config.html:14 -#: virtualization/tables/virtualmachines.py:107 +#: netbox/dcim/tables/devices.py:100 netbox/dcim/tables/devices.py:216 +#: 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/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 msgid "Config Template" msgstr "Configuratiesjabloon" -#: dcim/tables/devices.py:150 templates/dcim/sitegroup.html:26 +#: netbox/dcim/tables/devices.py:150 netbox/templates/dcim/sitegroup.html:26 msgid "Site Group" msgstr "Sitegroep" -#: dcim/tables/devices.py:187 dcim/tables/devices.py:1068 -#: ipam/forms/bulk_import.py:503 ipam/forms/model_forms.py:306 -#: ipam/forms/model_forms.py:315 ipam/tables/ip.py:356 ipam/tables/ip.py:423 -#: ipam/tables/ip.py:446 templates/ipam/ipaddress.html:11 -#: virtualization/tables/virtualmachines.py:95 +#: 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/templates/ipam/ipaddress.html:11 +#: netbox/virtualization/tables/virtualmachines.py:95 msgid "IP Address" msgstr "IP-adres" -#: dcim/tables/devices.py:191 dcim/tables/devices.py:1072 -#: virtualization/tables/virtualmachines.py:86 +#: netbox/dcim/tables/devices.py:191 netbox/dcim/tables/devices.py:1072 +#: netbox/virtualization/tables/virtualmachines.py:86 msgid "IPv4 Address" msgstr "IPv4-adres" -#: dcim/tables/devices.py:195 dcim/tables/devices.py:1076 -#: virtualization/tables/virtualmachines.py:90 +#: netbox/dcim/tables/devices.py:195 netbox/dcim/tables/devices.py:1076 +#: netbox/virtualization/tables/virtualmachines.py:90 msgid "IPv6 Address" msgstr "IPv6-adres" -#: dcim/tables/devices.py:210 +#: netbox/dcim/tables/devices.py:210 msgid "VC Position" msgstr "VC-positie" -#: dcim/tables/devices.py:213 +#: netbox/dcim/tables/devices.py:213 msgid "VC Priority" msgstr "VC-prioriteit" -#: dcim/tables/devices.py:220 templates/dcim/device_edit.html:38 -#: templates/dcim/devicebay_populate.html:16 +#: netbox/dcim/tables/devices.py:220 netbox/templates/dcim/device_edit.html:38 +#: netbox/templates/dcim/devicebay_populate.html:16 msgid "Parent Device" msgstr "Apparaat voor ouders" -#: dcim/tables/devices.py:225 +#: netbox/dcim/tables/devices.py:225 msgid "Position (Device Bay)" msgstr "Positie (apparaatvak)" -#: dcim/tables/devices.py:234 +#: netbox/dcim/tables/devices.py:234 msgid "Console ports" msgstr "Consolepoorten" -#: dcim/tables/devices.py:237 +#: netbox/dcim/tables/devices.py:237 msgid "Console server ports" msgstr "Serverpoorten voor de console" -#: dcim/tables/devices.py:240 +#: netbox/dcim/tables/devices.py:240 msgid "Power ports" msgstr "Voedingspoorten" -#: dcim/tables/devices.py:243 +#: netbox/dcim/tables/devices.py:243 msgid "Power outlets" msgstr "Stopcontacten" -#: dcim/tables/devices.py:246 dcim/tables/devices.py:1081 -#: dcim/tables/devicetypes.py:128 dcim/views.py:1042 dcim/views.py:1281 -#: dcim/views.py:1977 netbox/navigation/menu.py:94 -#: netbox/navigation/menu.py:250 templates/dcim/device/base.html:37 -#: templates/dcim/device_list.html:43 templates/dcim/devicetype/base.html:34 -#: templates/dcim/inc/moduletype_buttons.html:25 templates/dcim/module.html:34 -#: templates/dcim/virtualdevicecontext.html:61 -#: templates/dcim/virtualdevicecontext.html:81 -#: templates/virtualization/virtualmachine/base.html:27 -#: templates/virtualization/virtualmachine_list.html:14 -#: virtualization/tables/virtualmachines.py:101 virtualization/views.py:366 -#: wireless/tables/wirelesslan.py:55 +#: 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/templates/dcim/device/base.html:37 +#: netbox/templates/dcim/device_list.html:43 +#: netbox/templates/dcim/devicetype/base.html:34 +#: netbox/templates/dcim/inc/moduletype_buttons.html:25 +#: netbox/templates/dcim/module.html:34 +#: netbox/templates/dcim/virtualdevicecontext.html:61 +#: netbox/templates/dcim/virtualdevicecontext.html:81 +#: netbox/templates/virtualization/virtualmachine/base.html:27 +#: netbox/templates/virtualization/virtualmachine_list.html:14 +#: netbox/virtualization/tables/virtualmachines.py:101 +#: netbox/virtualization/views.py:364 netbox/wireless/tables/wirelesslan.py:55 msgid "Interfaces" msgstr "Interfaces" -#: dcim/tables/devices.py:249 +#: netbox/dcim/tables/devices.py:249 msgid "Front ports" msgstr "Poorten vooraan" -#: dcim/tables/devices.py:255 +#: netbox/dcim/tables/devices.py:255 msgid "Device bays" msgstr "Toestelvakken" -#: dcim/tables/devices.py:258 +#: netbox/dcim/tables/devices.py:258 msgid "Module bays" msgstr "Modulebays" -#: dcim/tables/devices.py:261 +#: netbox/dcim/tables/devices.py:261 msgid "Inventory items" msgstr "Inventarisartikelen" -#: dcim/tables/devices.py:305 dcim/tables/modules.py:56 -#: templates/dcim/modulebay.html:17 +#: netbox/dcim/tables/devices.py:305 netbox/dcim/tables/modules.py:56 +#: netbox/templates/dcim/modulebay.html:17 msgid "Module Bay" msgstr "Modulebaai" -#: dcim/tables/devices.py:318 dcim/tables/devicetypes.py:47 -#: dcim/tables/devicetypes.py:143 dcim/views.py:1117 dcim/views.py:2075 -#: netbox/navigation/menu.py:103 templates/dcim/device/base.html:52 -#: templates/dcim/device_list.html:71 templates/dcim/devicetype/base.html:49 -#: templates/dcim/inc/panels/inventory_items.html:6 -#: templates/dcim/inventoryitemrole.html:32 +#: netbox/dcim/tables/devices.py:318 netbox/dcim/tables/devicetypes.py:47 +#: netbox/dcim/tables/devicetypes.py:143 netbox/dcim/views.py:1115 +#: netbox/dcim/views.py:2073 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 +#: netbox/templates/dcim/inc/panels/inventory_items.html:6 +#: netbox/templates/dcim/inventoryitemrole.html:32 msgid "Inventory Items" msgstr "Inventarisartikelen" -#: dcim/tables/devices.py:333 +#: netbox/dcim/tables/devices.py:333 msgid "Cable Color" msgstr "Kleur van de kabel" -#: dcim/tables/devices.py:339 +#: netbox/dcim/tables/devices.py:339 msgid "Link Peers" msgstr "Peers koppelen" -#: dcim/tables/devices.py:342 +#: netbox/dcim/tables/devices.py:342 msgid "Mark Connected" msgstr "Markeer Verbonden" -#: dcim/tables/devices.py:461 +#: netbox/dcim/tables/devices.py:461 msgid "Maximum draw (W)" msgstr "Maximale trekkracht (W)" -#: dcim/tables/devices.py:464 +#: netbox/dcim/tables/devices.py:464 msgid "Allocated draw (W)" msgstr "Toegewezen trekking (W)" -#: dcim/tables/devices.py:558 ipam/forms/model_forms.py:701 -#: ipam/tables/fhrp.py:28 ipam/views.py:596 ipam/views.py:696 -#: netbox/navigation/menu.py:158 netbox/navigation/menu.py:160 -#: templates/dcim/interface.html:339 templates/ipam/ipaddress_bulk_add.html:15 -#: templates/ipam/service.html:40 templates/virtualization/vminterface.html:85 -#: vpn/tables/tunnels.py:98 +#: netbox/dcim/tables/devices.py:558 netbox/ipam/forms/model_forms.py: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/templates/ipam/ipaddress_bulk_add.html:15 +#: netbox/templates/ipam/service.html:40 +#: netbox/templates/virtualization/vminterface.html:85 +#: netbox/vpn/tables/tunnels.py:98 msgid "IP Addresses" msgstr "IP-adressen" -#: dcim/tables/devices.py:564 netbox/navigation/menu.py:202 -#: templates/ipam/inc/panels/fhrp_groups.html:6 +#: netbox/dcim/tables/devices.py:564 netbox/netbox/navigation/menu.py:202 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:6 msgid "FHRP Groups" msgstr "FHRP-groepen" -#: dcim/tables/devices.py:576 templates/dcim/interface.html:89 -#: templates/virtualization/vminterface.html:67 templates/vpn/tunnel.html:18 -#: templates/vpn/tunneltermination.html:13 vpn/forms/bulk_edit.py:76 -#: vpn/forms/bulk_import.py:76 vpn/forms/filtersets.py:42 -#: vpn/forms/filtersets.py:82 vpn/forms/model_forms.py:60 -#: vpn/forms/model_forms.py:145 vpn/tables/tunnels.py:78 +#: netbox/dcim/tables/devices.py:576 netbox/templates/dcim/interface.html:89 +#: netbox/templates/virtualization/vminterface.html:67 +#: netbox/templates/vpn/tunnel.html:18 +#: netbox/templates/vpn/tunneltermination.html:13 +#: netbox/vpn/forms/bulk_edit.py:76 netbox/vpn/forms/bulk_import.py:76 +#: netbox/vpn/forms/filtersets.py:42 netbox/vpn/forms/filtersets.py:82 +#: netbox/vpn/forms/model_forms.py:60 netbox/vpn/forms/model_forms.py:145 +#: netbox/vpn/tables/tunnels.py:78 msgid "Tunnel" msgstr "Tunnel" -#: dcim/tables/devices.py:604 dcim/tables/devicetypes.py:227 -#: templates/dcim/interface.html:65 +#: netbox/dcim/tables/devices.py:604 netbox/dcim/tables/devicetypes.py:227 +#: netbox/templates/dcim/interface.html:65 msgid "Management Only" msgstr "Alleen beheer" -#: dcim/tables/devices.py:623 +#: netbox/dcim/tables/devices.py:623 msgid "VDCs" msgstr "VDC's" -#: dcim/tables/devices.py:873 templates/dcim/modulebay.html:53 +#: netbox/dcim/tables/devices.py:873 netbox/templates/dcim/modulebay.html:53 msgid "Installed Module" msgstr "Geïnstalleerde module" -#: dcim/tables/devices.py:876 +#: netbox/dcim/tables/devices.py:876 msgid "Module Serial" msgstr "Seriële module" -#: dcim/tables/devices.py:880 +#: netbox/dcim/tables/devices.py:880 msgid "Module Asset Tag" msgstr "Tag voor module-bedrijfsmiddelen" -#: dcim/tables/devices.py:889 +#: netbox/dcim/tables/devices.py:889 msgid "Module Status" msgstr "Status van de module" -#: dcim/tables/devices.py:944 dcim/tables/devicetypes.py:312 -#: templates/dcim/inventoryitem.html:40 +#: netbox/dcim/tables/devices.py:944 netbox/dcim/tables/devicetypes.py:312 +#: netbox/templates/dcim/inventoryitem.html:40 msgid "Component" msgstr "Onderdeel" -#: dcim/tables/devices.py:1000 +#: netbox/dcim/tables/devices.py:1000 msgid "Items" msgstr "Artikelen" -#: dcim/tables/devicetypes.py:37 netbox/navigation/menu.py:84 -#: netbox/navigation/menu.py:86 +#: netbox/dcim/tables/devicetypes.py:37 netbox/netbox/navigation/menu.py:84 +#: netbox/netbox/navigation/menu.py:86 msgid "Device Types" msgstr "Apparaattypen" -#: dcim/tables/devicetypes.py:42 netbox/navigation/menu.py:87 +#: netbox/dcim/tables/devicetypes.py:42 netbox/netbox/navigation/menu.py:87 msgid "Module Types" msgstr "Moduletypen" -#: dcim/tables/devicetypes.py:52 extras/forms/filtersets.py:371 -#: extras/forms/model_forms.py:537 extras/tables/tables.py:540 -#: netbox/navigation/menu.py:78 +#: 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/netbox/navigation/menu.py:78 msgid "Platforms" msgstr "Platformen" -#: dcim/tables/devicetypes.py:84 templates/dcim/devicetype.html:29 +#: netbox/dcim/tables/devicetypes.py:84 +#: netbox/templates/dcim/devicetype.html:29 msgid "Default Platform" msgstr "Standaardplatform" -#: dcim/tables/devicetypes.py:88 templates/dcim/devicetype.html:45 +#: netbox/dcim/tables/devicetypes.py:88 +#: netbox/templates/dcim/devicetype.html:45 msgid "Full Depth" msgstr "Volledige diepte" -#: dcim/tables/devicetypes.py:98 +#: netbox/dcim/tables/devicetypes.py:98 msgid "U Height" msgstr "U-hoogte" -#: dcim/tables/devicetypes.py:113 dcim/tables/modules.py:26 -#: dcim/tables/racks.py:89 +#: netbox/dcim/tables/devicetypes.py:113 netbox/dcim/tables/modules.py:26 +#: netbox/dcim/tables/racks.py:89 msgid "Instances" msgstr "Instanties" -#: dcim/tables/devicetypes.py:116 dcim/views.py:982 dcim/views.py:1221 -#: dcim/views.py:1913 netbox/navigation/menu.py:97 -#: templates/dcim/device/base.html:25 templates/dcim/device_list.html:15 -#: templates/dcim/devicetype/base.html:22 -#: templates/dcim/inc/moduletype_buttons.html:13 templates/dcim/module.html:22 +#: netbox/dcim/tables/devicetypes.py:116 netbox/dcim/views.py:980 +#: netbox/dcim/views.py:1219 netbox/dcim/views.py:1911 +#: netbox/netbox/navigation/menu.py:97 +#: netbox/templates/dcim/device/base.html:25 +#: netbox/templates/dcim/device_list.html:15 +#: netbox/templates/dcim/devicetype/base.html:22 +#: netbox/templates/dcim/inc/moduletype_buttons.html:13 +#: netbox/templates/dcim/module.html:22 msgid "Console Ports" msgstr "Consolepoorten" -#: dcim/tables/devicetypes.py:119 dcim/views.py:997 dcim/views.py:1236 -#: dcim/views.py:1929 netbox/navigation/menu.py:98 -#: templates/dcim/device/base.html:28 templates/dcim/device_list.html:22 -#: templates/dcim/devicetype/base.html:25 -#: templates/dcim/inc/moduletype_buttons.html:16 templates/dcim/module.html:25 +#: netbox/dcim/tables/devicetypes.py:119 netbox/dcim/views.py:995 +#: netbox/dcim/views.py:1234 netbox/dcim/views.py:1927 +#: netbox/netbox/navigation/menu.py:98 +#: netbox/templates/dcim/device/base.html:28 +#: netbox/templates/dcim/device_list.html:22 +#: netbox/templates/dcim/devicetype/base.html:25 +#: netbox/templates/dcim/inc/moduletype_buttons.html:16 +#: netbox/templates/dcim/module.html:25 msgid "Console Server Ports" msgstr "Serverpoorten voor de console" -#: dcim/tables/devicetypes.py:122 dcim/views.py:1012 dcim/views.py:1251 -#: dcim/views.py:1945 netbox/navigation/menu.py:99 -#: templates/dcim/device/base.html:31 templates/dcim/device_list.html:29 -#: templates/dcim/devicetype/base.html:28 -#: templates/dcim/inc/moduletype_buttons.html:19 templates/dcim/module.html:28 +#: netbox/dcim/tables/devicetypes.py:122 netbox/dcim/views.py:1010 +#: netbox/dcim/views.py:1249 netbox/dcim/views.py:1943 +#: netbox/netbox/navigation/menu.py:99 +#: netbox/templates/dcim/device/base.html:31 +#: netbox/templates/dcim/device_list.html:29 +#: netbox/templates/dcim/devicetype/base.html:28 +#: netbox/templates/dcim/inc/moduletype_buttons.html:19 +#: netbox/templates/dcim/module.html:28 msgid "Power Ports" msgstr "Voedingspoorten" -#: dcim/tables/devicetypes.py:125 dcim/views.py:1027 dcim/views.py:1266 -#: dcim/views.py:1961 netbox/navigation/menu.py:100 -#: templates/dcim/device/base.html:34 templates/dcim/device_list.html:36 -#: templates/dcim/devicetype/base.html:31 -#: templates/dcim/inc/moduletype_buttons.html:22 templates/dcim/module.html:31 +#: netbox/dcim/tables/devicetypes.py:125 netbox/dcim/views.py:1025 +#: netbox/dcim/views.py:1264 netbox/dcim/views.py:1959 +#: netbox/netbox/navigation/menu.py:100 +#: netbox/templates/dcim/device/base.html:34 +#: netbox/templates/dcim/device_list.html:36 +#: netbox/templates/dcim/devicetype/base.html:31 +#: netbox/templates/dcim/inc/moduletype_buttons.html:22 +#: netbox/templates/dcim/module.html:31 msgid "Power Outlets" msgstr "Stopcontacten" -#: dcim/tables/devicetypes.py:131 dcim/views.py:1057 dcim/views.py:1296 -#: dcim/views.py:1999 netbox/navigation/menu.py:95 -#: templates/dcim/device/base.html:40 templates/dcim/devicetype/base.html:37 -#: templates/dcim/inc/moduletype_buttons.html:28 templates/dcim/module.html:37 +#: netbox/dcim/tables/devicetypes.py:131 netbox/dcim/views.py:1055 +#: netbox/dcim/views.py:1294 netbox/dcim/views.py:1997 +#: netbox/netbox/navigation/menu.py:95 +#: netbox/templates/dcim/device/base.html:40 +#: netbox/templates/dcim/devicetype/base.html:37 +#: netbox/templates/dcim/inc/moduletype_buttons.html:28 +#: netbox/templates/dcim/module.html:37 msgid "Front Ports" msgstr "Ports aan de voorkant" -#: dcim/tables/devicetypes.py:134 dcim/views.py:1072 dcim/views.py:1311 -#: dcim/views.py:2015 netbox/navigation/menu.py:96 -#: templates/dcim/device/base.html:43 templates/dcim/device_list.html:50 -#: templates/dcim/devicetype/base.html:40 -#: templates/dcim/inc/moduletype_buttons.html:31 templates/dcim/module.html:40 +#: netbox/dcim/tables/devicetypes.py:134 netbox/dcim/views.py:1070 +#: netbox/dcim/views.py:1309 netbox/dcim/views.py:2013 +#: netbox/netbox/navigation/menu.py:96 +#: netbox/templates/dcim/device/base.html:43 +#: netbox/templates/dcim/device_list.html:50 +#: netbox/templates/dcim/devicetype/base.html:40 +#: netbox/templates/dcim/inc/moduletype_buttons.html:31 +#: netbox/templates/dcim/module.html:40 msgid "Rear Ports" msgstr "Poorten achteraan" -#: dcim/tables/devicetypes.py:137 dcim/views.py:1102 dcim/views.py:2055 -#: netbox/navigation/menu.py:102 templates/dcim/device/base.html:49 -#: templates/dcim/device_list.html:57 templates/dcim/devicetype/base.html:46 +#: netbox/dcim/tables/devicetypes.py:137 netbox/dcim/views.py:1100 +#: netbox/dcim/views.py:2053 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" -#: dcim/tables/devicetypes.py:140 dcim/views.py:1087 dcim/views.py:1326 -#: dcim/views.py:2035 netbox/navigation/menu.py:101 -#: templates/dcim/device/base.html:46 templates/dcim/device_list.html:64 -#: templates/dcim/devicetype/base.html:43 -#: templates/dcim/inc/moduletype_buttons.html:34 templates/dcim/module.html:43 +#: netbox/dcim/tables/devicetypes.py:140 netbox/dcim/views.py:1085 +#: netbox/dcim/views.py:1324 netbox/dcim/views.py:2033 +#: netbox/netbox/navigation/menu.py:101 +#: netbox/templates/dcim/device/base.html:46 +#: netbox/templates/dcim/device_list.html:64 +#: netbox/templates/dcim/devicetype/base.html:43 +#: netbox/templates/dcim/inc/moduletype_buttons.html:34 +#: netbox/templates/dcim/module.html:43 msgid "Module Bays" msgstr "Modulebays" -#: dcim/tables/power.py:36 netbox/navigation/menu.py:297 -#: templates/dcim/powerpanel.html:51 +#: netbox/dcim/tables/power.py:36 netbox/netbox/navigation/menu.py:297 +#: netbox/templates/dcim/powerpanel.html:51 msgid "Power Feeds" msgstr "Stroomvoedingen" -#: dcim/tables/power.py:80 templates/dcim/powerfeed.html:99 +#: netbox/dcim/tables/power.py:80 netbox/templates/dcim/powerfeed.html:99 msgid "Max Utilization" msgstr "Maximaal gebruik" -#: dcim/tables/power.py:84 +#: netbox/dcim/tables/power.py:84 msgid "Available Power (VA)" msgstr "Beschikbaar vermogen (VA)" -#: dcim/tables/racks.py:30 dcim/tables/sites.py:143 -#: netbox/navigation/menu.py:43 netbox/navigation/menu.py:47 -#: netbox/navigation/menu.py:49 +#: netbox/dcim/tables/racks.py:30 netbox/dcim/tables/sites.py:143 +#: netbox/netbox/navigation/menu.py:43 netbox/netbox/navigation/menu.py:47 +#: netbox/netbox/navigation/menu.py:49 msgid "Racks" msgstr "Racks" -#: dcim/tables/racks.py:63 dcim/tables/racks.py:142 -#: templates/dcim/device.html:318 -#: templates/dcim/inc/panels/racktype_dimensions.html:14 +#: netbox/dcim/tables/racks.py:63 netbox/dcim/tables/racks.py:142 +#: netbox/templates/dcim/device.html:318 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:14 msgid "Height" msgstr "Hoogte" -#: dcim/tables/racks.py:67 dcim/tables/racks.py:165 -#: templates/dcim/inc/panels/racktype_dimensions.html:18 +#: netbox/dcim/tables/racks.py:67 netbox/dcim/tables/racks.py:165 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:18 msgid "Outer Width" msgstr "Buitenbreedte" -#: dcim/tables/racks.py:71 dcim/tables/racks.py:169 -#: templates/dcim/inc/panels/racktype_dimensions.html:28 +#: netbox/dcim/tables/racks.py:71 netbox/dcim/tables/racks.py:169 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:28 msgid "Outer Depth" msgstr "Buitendiepte" -#: dcim/tables/racks.py:79 dcim/tables/racks.py:177 +#: netbox/dcim/tables/racks.py:79 netbox/dcim/tables/racks.py:177 msgid "Max Weight" msgstr "Maximaal gewicht" -#: dcim/tables/racks.py:154 +#: netbox/dcim/tables/racks.py:154 msgid "Space" msgstr "Ruimte" -#: dcim/tables/sites.py:30 dcim/tables/sites.py:57 -#: extras/forms/filtersets.py:351 extras/forms/model_forms.py:517 -#: ipam/forms/bulk_edit.py:131 ipam/forms/model_forms.py:153 -#: ipam/tables/asn.py:66 netbox/navigation/menu.py:15 -#: netbox/navigation/menu.py:17 +#: netbox/dcim/tables/sites.py:30 netbox/dcim/tables/sites.py:57 +#: netbox/extras/forms/filtersets.py: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/netbox/navigation/menu.py:15 netbox/netbox/navigation/menu.py:17 msgid "Sites" msgstr "Sites" -#: dcim/tests/test_api.py:47 +#: netbox/dcim/tests/test_api.py:47 msgid "Test case must set peer_termination_type" msgstr "De testcase moet peer_termination_type instellen" -#: dcim/views.py:140 +#: netbox/dcim/views.py:138 #, python-brace-format msgid "Disconnected {count} {type}" msgstr "Verbinding verbroken {count} {type}" -#: dcim/views.py:740 netbox/navigation/menu.py:51 +#: netbox/dcim/views.py:738 netbox/netbox/navigation/menu.py:51 msgid "Reservations" msgstr "Reserveringen" -#: dcim/views.py:759 templates/dcim/location.html:90 -#: templates/dcim/site.html:140 +#: netbox/dcim/views.py:757 netbox/templates/dcim/location.html:90 +#: netbox/templates/dcim/site.html:140 msgid "Non-Racked Devices" msgstr "Apparaten zonder rack" -#: dcim/views.py:2088 extras/forms/model_forms.py:577 -#: templates/extras/configcontext.html:10 -#: virtualization/forms/model_forms.py:225 virtualization/views.py:407 +#: netbox/dcim/views.py:2086 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 msgid "Config Context" msgstr "Context van de configuratie" -#: dcim/views.py:2098 virtualization/views.py:417 +#: netbox/dcim/views.py:2096 netbox/virtualization/views.py:415 msgid "Render Config" msgstr "Render-configuratie" -#: dcim/views.py:2131 virtualization/views.py:450 +#: 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}" -#: dcim/views.py:2149 extras/tables/tables.py:550 -#: netbox/navigation/menu.py:247 netbox/navigation/menu.py:249 -#: virtualization/views.py:180 +#: 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 msgid "Virtual Machines" msgstr "Virtuele machines" -#: dcim/views.py:2897 +#: netbox/dcim/views.py:2907 #, python-brace-format msgid "Installed device {device} in bay {device_bay}." msgstr "Geïnstalleerd apparaat {device} in de baai {device_bay}." -#: dcim/views.py:2938 +#: netbox/dcim/views.py:2948 #, python-brace-format msgid "Removed device {device} from bay {device_bay}." msgstr "Apparaat verwijderd {device} van bay {device_bay}." -#: dcim/views.py:3044 ipam/tables/ip.py:234 +#: netbox/dcim/views.py:3054 netbox/ipam/tables/ip.py:234 msgid "Children" msgstr "Kinderen" -#: dcim/views.py:3510 +#: netbox/dcim/views.py:3520 #, python-brace-format msgid "Added member {device}" msgstr "Lid toegevoegd {device}" -#: dcim/views.py:3557 +#: netbox/dcim/views.py:3567 #, 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." -#: dcim/views.py:3570 +#: netbox/dcim/views.py:3580 #, python-brace-format msgid "Removed {device} from virtual chassis {chassis}" msgstr "Verwijderd {device} vanaf een virtueel chassis {chassis}" -#: extras/api/customfields.py:89 +#: netbox/extras/api/customfields.py:89 #, python-brace-format msgid "Unknown related object(s): {name}" msgstr "Onbekende gerelateerde object (en): {name}" -#: extras/api/serializers_/customfields.py:73 +#: netbox/extras/api/serializers_/customfields.py:73 msgid "Changing the type of custom fields is not supported." msgstr "Het wijzigen van het type aangepaste velden wordt niet ondersteund." -#: extras/api/serializers_/scripts.py:70 extras/api/serializers_/scripts.py:75 +#: netbox/extras/api/serializers_/scripts.py:70 +#: netbox/extras/api/serializers_/scripts.py:75 msgid "Scheduling is not enabled for this script." msgstr "Planning is niet ingeschakeld voor dit script." -#: extras/choices.py:30 extras/forms/misc.py:14 +#: netbox/extras/choices.py:30 netbox/extras/forms/misc.py:14 msgid "Text" msgstr "Tekst" -#: extras/choices.py:31 +#: netbox/extras/choices.py:31 msgid "Text (long)" msgstr "Tekst (lang)" -#: extras/choices.py:32 +#: netbox/extras/choices.py:32 msgid "Integer" msgstr "Integer" -#: extras/choices.py:33 +#: netbox/extras/choices.py:33 msgid "Decimal" msgstr "Decimaal" -#: extras/choices.py:34 +#: netbox/extras/choices.py:34 msgid "Boolean (true/false)" msgstr "Booleaans (waar/onwaar)" -#: extras/choices.py:35 +#: netbox/extras/choices.py:35 msgid "Date" msgstr "Datum" -#: extras/choices.py:36 +#: netbox/extras/choices.py:36 msgid "Date & time" msgstr "Datum en tijd" -#: extras/choices.py:38 +#: netbox/extras/choices.py:38 msgid "JSON" msgstr "JSON" -#: extras/choices.py:39 +#: netbox/extras/choices.py:39 msgid "Selection" msgstr "Selectie" -#: extras/choices.py:40 +#: netbox/extras/choices.py:40 msgid "Multiple selection" msgstr "Meervoudige selectie" -#: extras/choices.py:42 +#: netbox/extras/choices.py:42 msgid "Multiple objects" msgstr "Meerdere objecten" -#: extras/choices.py:53 netbox/preferences.py:21 -#: templates/extras/customfield.html:78 vpn/choices.py:20 -#: wireless/choices.py:27 +#: netbox/extras/choices.py:53 netbox/netbox/preferences.py:21 +#: netbox/templates/extras/customfield.html:78 netbox/vpn/choices.py:20 +#: netbox/wireless/choices.py:27 msgid "Disabled" msgstr "Uitgeschakeld" -#: extras/choices.py:54 +#: netbox/extras/choices.py:54 msgid "Loose" msgstr "Los" -#: extras/choices.py:55 +#: netbox/extras/choices.py:55 msgid "Exact" msgstr "Exact" -#: extras/choices.py:66 +#: netbox/extras/choices.py:66 msgid "Always" msgstr "Altijd" -#: extras/choices.py:67 +#: netbox/extras/choices.py:67 msgid "If set" msgstr "Indien ingesteld" -#: extras/choices.py:68 extras/choices.py:81 +#: netbox/extras/choices.py:68 netbox/extras/choices.py:81 msgid "Hidden" msgstr "Verborgen" -#: extras/choices.py:79 +#: netbox/extras/choices.py:79 msgid "Yes" msgstr "Ja" -#: extras/choices.py:80 +#: netbox/extras/choices.py:80 msgid "No" msgstr "Nee" -#: extras/choices.py:108 templates/tenancy/contact.html:57 -#: tenancy/forms/bulk_edit.py:118 wireless/forms/model_forms.py:168 +#: 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 msgid "Link" msgstr "Link" -#: extras/choices.py:124 +#: netbox/extras/choices.py:124 msgid "Newest" msgstr "Nieuwste" -#: extras/choices.py:125 +#: netbox/extras/choices.py:125 msgid "Oldest" msgstr "Oudste" -#: extras/choices.py:126 +#: netbox/extras/choices.py:126 msgid "Alphabetical (A-Z)" msgstr "Alfabetisch (A-Z)" -#: extras/choices.py:127 +#: netbox/extras/choices.py:127 msgid "Alphabetical (Z-A)" msgstr "Alfabetisch (Z-A)" -#: extras/choices.py:144 extras/choices.py:167 +#: netbox/extras/choices.py:144 netbox/extras/choices.py:167 msgid "Info" msgstr "Informatie" -#: extras/choices.py:145 extras/choices.py:168 +#: netbox/extras/choices.py:145 netbox/extras/choices.py:168 msgid "Success" msgstr "Succes" -#: extras/choices.py:146 extras/choices.py:169 +#: netbox/extras/choices.py:146 netbox/extras/choices.py:169 msgid "Warning" msgstr "Waarschuwing" -#: extras/choices.py:147 +#: netbox/extras/choices.py:147 msgid "Danger" msgstr "Gevaar" -#: extras/choices.py:165 +#: netbox/extras/choices.py:165 msgid "Debug" msgstr "Debuggen" -#: extras/choices.py:166 netbox/choices.py:101 +#: netbox/extras/choices.py:166 netbox/netbox/choices.py:101 msgid "Default" msgstr "Standaard" -#: extras/choices.py:170 +#: netbox/extras/choices.py:170 msgid "Failure" msgstr "Mislukking" -#: extras/choices.py:186 +#: netbox/extras/choices.py:186 msgid "Hourly" msgstr "Elk uur" -#: extras/choices.py:187 +#: netbox/extras/choices.py:187 msgid "12 hours" msgstr "12 uur" -#: extras/choices.py:188 +#: netbox/extras/choices.py:188 msgid "Daily" msgstr "Dagelijks" -#: extras/choices.py:189 +#: netbox/extras/choices.py:189 msgid "Weekly" msgstr "Wekelijks" -#: extras/choices.py:190 +#: netbox/extras/choices.py:190 msgid "30 days" msgstr "30 dagen" -#: extras/choices.py:226 templates/dcim/virtualchassis_edit.html:107 -#: templates/generic/bulk_add_component.html:68 -#: templates/generic/object_edit.html:47 templates/generic/object_edit.html:80 -#: templates/ipam/inc/ipaddress_edit_header.html:7 +#: netbox/extras/choices.py:226 +#: 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/ipam/inc/ipaddress_edit_header.html:7 msgid "Create" msgstr "Creëren" -#: extras/choices.py:227 +#: netbox/extras/choices.py:227 msgid "Update" msgstr "Bijwerken" -#: extras/choices.py:228 templates/circuits/inc/circuit_termination.html:23 -#: templates/dcim/inc/panels/inventory_items.html:37 -#: templates/dcim/powerpanel.html:66 templates/extras/script_list.html:35 -#: templates/generic/bulk_delete.html:20 templates/generic/bulk_delete.html:66 -#: templates/generic/object_delete.html:19 templates/htmx/delete_form.html:57 -#: templates/ipam/inc/panels/fhrp_groups.html:48 -#: templates/users/objectpermission.html:46 -#: utilities/templates/buttons/delete.html:11 +#: netbox/extras/choices.py:228 +#: netbox/templates/circuits/inc/circuit_termination.html:23 +#: netbox/templates/dcim/inc/panels/inventory_items.html:37 +#: netbox/templates/dcim/powerpanel.html:66 +#: netbox/templates/extras/script_list.html:35 +#: netbox/templates/generic/bulk_delete.html:20 +#: netbox/templates/generic/bulk_delete.html:66 +#: netbox/templates/generic/object_delete.html:19 +#: netbox/templates/htmx/delete_form.html:57 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:48 +#: netbox/templates/users/objectpermission.html:46 +#: netbox/utilities/templates/buttons/delete.html:11 msgid "Delete" msgstr "Verwijderen" -#: extras/choices.py:252 netbox/choices.py:57 netbox/choices.py:102 +#: netbox/extras/choices.py:252 netbox/netbox/choices.py:57 +#: netbox/netbox/choices.py:102 msgid "Blue" msgstr "Blauw" -#: extras/choices.py:253 netbox/choices.py:56 netbox/choices.py:103 +#: netbox/extras/choices.py:253 netbox/netbox/choices.py:56 +#: netbox/netbox/choices.py:103 msgid "Indigo" msgstr "Indigo" -#: extras/choices.py:254 netbox/choices.py:54 netbox/choices.py:104 +#: netbox/extras/choices.py:254 netbox/netbox/choices.py:54 +#: netbox/netbox/choices.py:104 msgid "Purple" msgstr "Paars" -#: extras/choices.py:255 netbox/choices.py:51 netbox/choices.py:105 +#: netbox/extras/choices.py:255 netbox/netbox/choices.py:51 +#: netbox/netbox/choices.py:105 msgid "Pink" msgstr "Roze" -#: extras/choices.py:256 netbox/choices.py:50 netbox/choices.py:106 +#: netbox/extras/choices.py:256 netbox/netbox/choices.py:50 +#: netbox/netbox/choices.py:106 msgid "Red" msgstr "Rood" -#: extras/choices.py:257 netbox/choices.py:68 netbox/choices.py:107 +#: netbox/extras/choices.py:257 netbox/netbox/choices.py:68 +#: netbox/netbox/choices.py:107 msgid "Orange" msgstr "Oranje" -#: extras/choices.py:258 netbox/choices.py:66 netbox/choices.py:108 +#: netbox/extras/choices.py:258 netbox/netbox/choices.py:66 +#: netbox/netbox/choices.py:108 msgid "Yellow" msgstr "Geel" -#: extras/choices.py:259 netbox/choices.py:63 netbox/choices.py:109 +#: netbox/extras/choices.py:259 netbox/netbox/choices.py:63 +#: netbox/netbox/choices.py:109 msgid "Green" msgstr "Groen" -#: extras/choices.py:260 netbox/choices.py:60 netbox/choices.py:110 +#: netbox/extras/choices.py:260 netbox/netbox/choices.py:60 +#: netbox/netbox/choices.py:110 msgid "Teal" msgstr "Groenblauw" -#: extras/choices.py:261 netbox/choices.py:59 netbox/choices.py:111 +#: netbox/extras/choices.py:261 netbox/netbox/choices.py:59 +#: netbox/netbox/choices.py:111 msgid "Cyan" msgstr "Cyaan" -#: extras/choices.py:262 netbox/choices.py:112 +#: netbox/extras/choices.py:262 netbox/netbox/choices.py:112 msgid "Gray" msgstr "Grijs" -#: extras/choices.py:263 netbox/choices.py:74 netbox/choices.py:113 +#: netbox/extras/choices.py:263 netbox/netbox/choices.py:74 +#: netbox/netbox/choices.py:113 msgid "Black" msgstr "Zwart" -#: extras/choices.py:264 netbox/choices.py:75 netbox/choices.py:114 +#: netbox/extras/choices.py:264 netbox/netbox/choices.py:75 +#: netbox/netbox/choices.py:114 msgid "White" msgstr "Wit" -#: extras/choices.py:279 extras/forms/model_forms.py:353 -#: extras/forms/model_forms.py:430 templates/extras/webhook.html:10 +#: netbox/extras/choices.py:279 netbox/extras/forms/model_forms.py:353 +#: netbox/extras/forms/model_forms.py:430 +#: netbox/templates/extras/webhook.html:10 msgid "Webhook" msgstr "Webhook" -#: extras/choices.py:280 extras/forms/model_forms.py:418 -#: templates/extras/script/base.html:29 +#: netbox/extras/choices.py:280 netbox/extras/forms/model_forms.py:418 +#: netbox/templates/extras/script/base.html:29 msgid "Script" msgstr "Script" -#: extras/choices.py:281 +#: netbox/extras/choices.py:281 msgid "Notification" msgstr "Melding" -#: extras/conditions.py:54 +#: netbox/extras/conditions.py:54 #, python-brace-format msgid "Unknown operator: {op}. Must be one of: {operators}" msgstr "Onbekende operator: {op}. Moet een van de volgende zijn: {operators}" -#: extras/conditions.py:58 +#: netbox/extras/conditions.py:58 #, python-brace-format msgid "Unsupported value type: {value}" msgstr "Niet ondersteunende waardetype: {value}" -#: extras/conditions.py:60 +#: netbox/extras/conditions.py:60 #, python-brace-format msgid "Invalid type for {op} operation: {value}" msgstr "Ongeldig type voor {op} operatie: {value}" -#: extras/conditions.py:137 +#: netbox/extras/conditions.py:137 #, python-brace-format msgid "Ruleset must be a dictionary, not {ruleset}." msgstr "De regelset moet een woordenboek zijn, niet {ruleset}." -#: extras/conditions.py:142 +#: netbox/extras/conditions.py:142 msgid "Invalid logic type: must be 'AND' or 'OR'. Please check documentation." msgstr "" "Ongeldig logicatype: moet 'AND' of 'OR' zijn. Controleer de documentatie." -#: extras/conditions.py:154 +#: netbox/extras/conditions.py:154 msgid "Incorrect key(s) informed. Please check documentation." msgstr "" "Onjuiste sleutel (s) geïnformeerd. Controleer alstublieft de documentatie." -#: extras/dashboard/forms.py:38 +#: netbox/extras/dashboard/forms.py:38 msgid "Widget type" msgstr "Widgettype" -#: extras/dashboard/utils.py:36 +#: netbox/extras/dashboard/utils.py:36 #, python-brace-format msgid "Unregistered widget class: {name}" msgstr "Ongeregistreerde widgetklasse: {name}" -#: extras/dashboard/widgets.py:125 +#: netbox/extras/dashboard/widgets.py:125 #, python-brace-format msgid "{class_name} must define a render() method." msgstr "{class_name} moet een render () -methode definiëren." -#: extras/dashboard/widgets.py:144 +#: netbox/extras/dashboard/widgets.py:144 msgid "Note" msgstr "Opmerking" -#: extras/dashboard/widgets.py:145 +#: netbox/extras/dashboard/widgets.py:145 msgid "Display some arbitrary custom content. Markdown is supported." msgstr "Geef willekeurige aangepaste inhoud weer. Markdown wordt ondersteund." -#: extras/dashboard/widgets.py:158 +#: netbox/extras/dashboard/widgets.py:158 msgid "Object Counts" msgstr "Tellingen van objecten" -#: extras/dashboard/widgets.py:159 +#: netbox/extras/dashboard/widgets.py:159 msgid "" "Display a set of NetBox models and the number of objects created for each " "type." @@ -6978,272 +7519,294 @@ msgstr "" "Geef een set NetBox-modellen weer en het aantal objecten dat voor elk type " "is gemaakt." -#: extras/dashboard/widgets.py:169 +#: netbox/extras/dashboard/widgets.py:169 msgid "Filters to apply when counting the number of objects" msgstr "" "Filters die moeten worden toegepast bij het tellen van het aantal objecten" -#: extras/dashboard/widgets.py:177 +#: netbox/extras/dashboard/widgets.py:177 msgid "Invalid format. Object filters must be passed as a dictionary." msgstr "" "Ongeldig formaat. Objectfilters moeten als woordenboek worden doorgegeven." -#: extras/dashboard/widgets.py:208 +#: netbox/extras/dashboard/widgets.py:208 msgid "Object List" msgstr "Objectlijst" -#: extras/dashboard/widgets.py:209 +#: netbox/extras/dashboard/widgets.py:209 msgid "Display an arbitrary list of objects." msgstr "Geef een willekeurige lijst met objecten weer." -#: extras/dashboard/widgets.py:222 +#: netbox/extras/dashboard/widgets.py:222 msgid "The default number of objects to display" msgstr "Het standaardaantal objecten dat moet worden weergegeven" -#: extras/dashboard/widgets.py:234 +#: netbox/extras/dashboard/widgets.py:234 msgid "Invalid format. URL parameters must be passed as a dictionary." msgstr "" "Ongeldig formaat. URL-parameters moeten als woordenboek worden doorgegeven." -#: extras/dashboard/widgets.py:274 +#: netbox/extras/dashboard/widgets.py:274 msgid "RSS Feed" msgstr "RSS-feed" -#: extras/dashboard/widgets.py:279 +#: netbox/extras/dashboard/widgets.py:279 msgid "Embed an RSS feed from an external website." msgstr "Voeg een RSS-feed van een externe website in." -#: extras/dashboard/widgets.py:286 +#: netbox/extras/dashboard/widgets.py:286 msgid "Feed URL" msgstr "URL van de feed" -#: extras/dashboard/widgets.py:291 +#: netbox/extras/dashboard/widgets.py:291 msgid "The maximum number of objects to display" msgstr "Het maximale aantal objecten dat moet worden weergegeven" -#: extras/dashboard/widgets.py:296 +#: netbox/extras/dashboard/widgets.py:296 msgid "How long to stored the cached content (in seconds)" msgstr "Hoe lang moet de inhoud in de cache worden bewaard (in seconden)" -#: extras/dashboard/widgets.py:348 templates/account/base.html:10 -#: templates/account/bookmarks.html:7 templates/inc/user_menu.html:48 +#: netbox/extras/dashboard/widgets.py:348 +#: netbox/templates/account/base.html:10 +#: netbox/templates/account/bookmarks.html:7 +#: netbox/templates/inc/user_menu.html:48 msgid "Bookmarks" msgstr "Bladwijzers" -#: extras/dashboard/widgets.py:352 +#: netbox/extras/dashboard/widgets.py:352 msgid "Show your personal bookmarks" msgstr "Laat je persoonlijke bladwijzers zien" -#: extras/events.py:147 +#: netbox/extras/events.py:147 #, python-brace-format msgid "Unknown action type for an event rule: {action_type}" msgstr "Onbekend actietype voor een evenementregel: {action_type}" -#: extras/events.py:192 +#: netbox/extras/events.py:192 #, python-brace-format msgid "Cannot import events pipeline {name} error: {error}" msgstr "" "Kan de pijplijn voor gebeurtenissen niet importeren {name} fout: {error}" -#: extras/filtersets.py:45 +#: netbox/extras/filtersets.py:45 msgid "Script module (ID)" msgstr "Scriptmodule (ID)" -#: extras/filtersets.py:254 extras/filtersets.py:637 extras/filtersets.py:665 +#: netbox/extras/filtersets.py:254 netbox/extras/filtersets.py:637 +#: netbox/extras/filtersets.py:665 msgid "Data file (ID)" msgstr "Gegevensbestand (ID)" -#: extras/filtersets.py:370 users/filtersets.py:68 users/filtersets.py:191 +#: netbox/extras/filtersets.py:370 netbox/users/filtersets.py:68 +#: netbox/users/filtersets.py:191 msgid "Group (name)" msgstr "Groep (naam)" -#: extras/filtersets.py:574 virtualization/forms/filtersets.py:118 +#: netbox/extras/filtersets.py:574 +#: netbox/virtualization/forms/filtersets.py:118 msgid "Cluster type" msgstr "Clustertype" -#: extras/filtersets.py:580 virtualization/filtersets.py:95 -#: virtualization/filtersets.py:147 +#: netbox/extras/filtersets.py:580 netbox/virtualization/filtersets.py:95 +#: netbox/virtualization/filtersets.py:147 msgid "Cluster type (slug)" msgstr "Clustertype (slug)" -#: extras/filtersets.py:601 tenancy/forms/forms.py:16 -#: tenancy/forms/forms.py:39 +#: netbox/extras/filtersets.py:601 netbox/tenancy/forms/forms.py:16 +#: netbox/tenancy/forms/forms.py:39 msgid "Tenant group" msgstr "Tenant groep" -#: extras/filtersets.py:607 tenancy/filtersets.py:188 -#: tenancy/filtersets.py:208 +#: netbox/extras/filtersets.py:607 netbox/tenancy/filtersets.py:188 +#: netbox/tenancy/filtersets.py:208 msgid "Tenant group (slug)" msgstr "Tenant groep (slug)" -#: extras/filtersets.py:623 extras/forms/model_forms.py:495 -#: templates/extras/tag.html:11 +#: netbox/extras/filtersets.py:623 netbox/extras/forms/model_forms.py:495 +#: netbox/templates/extras/tag.html:11 msgid "Tag" msgstr "Tag" -#: extras/filtersets.py:629 +#: netbox/extras/filtersets.py:629 msgid "Tag (slug)" msgstr "Label (slug)" -#: extras/filtersets.py:689 extras/forms/filtersets.py:429 +#: netbox/extras/filtersets.py:689 netbox/extras/forms/filtersets.py:429 msgid "Has local config context data" msgstr "Heeft contextgegevens voor de lokale configuratie" -#: extras/forms/bulk_edit.py:35 extras/forms/filtersets.py:60 +#: netbox/extras/forms/bulk_edit.py:35 netbox/extras/forms/filtersets.py:60 msgid "Group name" msgstr "Groepsnaam" -#: extras/forms/bulk_edit.py:43 extras/forms/filtersets.py:68 -#: extras/tables/tables.py:65 templates/extras/customfield.html:38 -#: templates/generic/bulk_import.html:118 +#: netbox/extras/forms/bulk_edit.py:43 netbox/extras/forms/filtersets.py:68 +#: netbox/extras/tables/tables.py:65 +#: netbox/templates/extras/customfield.html:38 +#: netbox/templates/generic/bulk_import.html:118 msgid "Required" msgstr "Verplicht" -#: extras/forms/bulk_edit.py:48 extras/forms/filtersets.py:75 +#: netbox/extras/forms/bulk_edit.py:48 netbox/extras/forms/filtersets.py:75 msgid "Must be unique" msgstr "Moet uniek zijn" -#: extras/forms/bulk_edit.py:61 extras/forms/bulk_import.py:60 -#: extras/forms/filtersets.py:89 extras/models/customfields.py:209 +#: netbox/extras/forms/bulk_edit.py:61 netbox/extras/forms/bulk_import.py:60 +#: netbox/extras/forms/filtersets.py:89 +#: netbox/extras/models/customfields.py:209 msgid "UI visible" msgstr "UI zichtbaar" -#: extras/forms/bulk_edit.py:66 extras/forms/bulk_import.py:66 -#: extras/forms/filtersets.py:94 extras/models/customfields.py:216 +#: netbox/extras/forms/bulk_edit.py:66 netbox/extras/forms/bulk_import.py:66 +#: netbox/extras/forms/filtersets.py:94 +#: netbox/extras/models/customfields.py:216 msgid "UI editable" msgstr "UI bewerkbaar" -#: extras/forms/bulk_edit.py:71 extras/forms/filtersets.py:97 +#: netbox/extras/forms/bulk_edit.py:71 netbox/extras/forms/filtersets.py:97 msgid "Is cloneable" msgstr "Is kloonbaar" -#: extras/forms/bulk_edit.py:76 extras/forms/filtersets.py:104 +#: netbox/extras/forms/bulk_edit.py:76 netbox/extras/forms/filtersets.py:104 msgid "Minimum value" msgstr "Minimumwaarde" -#: extras/forms/bulk_edit.py:80 extras/forms/filtersets.py:108 +#: netbox/extras/forms/bulk_edit.py:80 netbox/extras/forms/filtersets.py:108 msgid "Maximum value" msgstr "Maximale waarde" -#: extras/forms/bulk_edit.py:84 extras/forms/filtersets.py:112 +#: netbox/extras/forms/bulk_edit.py:84 netbox/extras/forms/filtersets.py:112 msgid "Validation regex" msgstr "Validatieregex" -#: extras/forms/bulk_edit.py:91 extras/forms/filtersets.py:46 -#: extras/forms/model_forms.py:76 templates/extras/customfield.html:70 +#: netbox/extras/forms/bulk_edit.py:91 netbox/extras/forms/filtersets.py:46 +#: netbox/extras/forms/model_forms.py:76 +#: netbox/templates/extras/customfield.html:70 msgid "Behavior" msgstr "Gedrag" -#: extras/forms/bulk_edit.py:128 extras/forms/filtersets.py:149 +#: netbox/extras/forms/bulk_edit.py:128 netbox/extras/forms/filtersets.py:149 msgid "New window" msgstr "Nieuw venster" -#: extras/forms/bulk_edit.py:137 +#: netbox/extras/forms/bulk_edit.py:137 msgid "Button class" msgstr "Knopklasse" -#: extras/forms/bulk_edit.py:154 extras/forms/filtersets.py:187 -#: extras/models/models.py:409 +#: netbox/extras/forms/bulk_edit.py:154 netbox/extras/forms/filtersets.py:187 +#: netbox/extras/models/models.py:409 msgid "MIME type" msgstr "MIME-type" -#: extras/forms/bulk_edit.py:159 extras/forms/filtersets.py:190 +#: netbox/extras/forms/bulk_edit.py:159 netbox/extras/forms/filtersets.py:190 msgid "File extension" msgstr "bestandsextensie" -#: extras/forms/bulk_edit.py:164 extras/forms/filtersets.py:194 +#: netbox/extras/forms/bulk_edit.py:164 netbox/extras/forms/filtersets.py:194 msgid "As attachment" msgstr "Als bijlage" -#: extras/forms/bulk_edit.py:192 extras/forms/filtersets.py:236 -#: extras/tables/tables.py:256 templates/extras/savedfilter.html:29 +#: netbox/extras/forms/bulk_edit.py:192 netbox/extras/forms/filtersets.py:236 +#: netbox/extras/tables/tables.py:256 +#: netbox/templates/extras/savedfilter.html:29 msgid "Shared" msgstr "Gedeeld" -#: extras/forms/bulk_edit.py:215 extras/forms/filtersets.py:265 -#: extras/models/models.py:174 +#: netbox/extras/forms/bulk_edit.py:215 netbox/extras/forms/filtersets.py:265 +#: netbox/extras/models/models.py:174 msgid "HTTP method" msgstr "HTTP-methode" -#: extras/forms/bulk_edit.py:219 extras/forms/filtersets.py:259 -#: templates/extras/webhook.html:30 +#: netbox/extras/forms/bulk_edit.py:219 netbox/extras/forms/filtersets.py:259 +#: netbox/templates/extras/webhook.html:30 msgid "Payload URL" msgstr "URL van de payload" -#: extras/forms/bulk_edit.py:224 extras/models/models.py:214 +#: netbox/extras/forms/bulk_edit.py:224 netbox/extras/models/models.py:214 msgid "SSL verification" msgstr "SSL-verificatie" -#: extras/forms/bulk_edit.py:227 templates/extras/webhook.html:38 +#: netbox/extras/forms/bulk_edit.py:227 +#: netbox/templates/extras/webhook.html:38 msgid "Secret" msgstr "Geheim" -#: extras/forms/bulk_edit.py:232 +#: netbox/extras/forms/bulk_edit.py:232 msgid "CA file path" msgstr "CA-bestandspad" -#: extras/forms/bulk_edit.py:253 extras/forms/bulk_import.py:192 -#: extras/forms/model_forms.py:377 +#: netbox/extras/forms/bulk_edit.py:253 netbox/extras/forms/bulk_import.py:192 +#: netbox/extras/forms/model_forms.py:377 msgid "Event types" msgstr "Soorten evenementen" -#: extras/forms/bulk_edit.py:293 +#: netbox/extras/forms/bulk_edit.py:293 msgid "Is active" msgstr "Is actief" -#: extras/forms/bulk_import.py:37 extras/forms/bulk_import.py:118 -#: extras/forms/bulk_import.py:139 extras/forms/bulk_import.py:162 -#: extras/forms/bulk_import.py:186 extras/forms/filtersets.py:137 -#: extras/forms/filtersets.py:224 extras/forms/model_forms.py:47 -#: extras/forms/model_forms.py:205 extras/forms/model_forms.py:237 -#: extras/forms/model_forms.py:278 extras/forms/model_forms.py:372 -#: extras/forms/model_forms.py:489 users/forms/model_forms.py:276 +#: netbox/extras/forms/bulk_import.py:37 +#: netbox/extras/forms/bulk_import.py:118 +#: 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/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/users/forms/model_forms.py:276 msgid "Object types" msgstr "Objecttypen" -#: extras/forms/bulk_import.py:39 extras/forms/bulk_import.py:120 -#: extras/forms/bulk_import.py:141 extras/forms/bulk_import.py:164 -#: extras/forms/bulk_import.py:188 tenancy/forms/bulk_import.py:96 +#: netbox/extras/forms/bulk_import.py:39 +#: netbox/extras/forms/bulk_import.py:120 +#: netbox/extras/forms/bulk_import.py:141 +#: netbox/extras/forms/bulk_import.py:164 +#: netbox/extras/forms/bulk_import.py:188 +#: netbox/tenancy/forms/bulk_import.py:96 msgid "One or more assigned object types" msgstr "Een of meer toegewezen objecttypen" -#: extras/forms/bulk_import.py:44 +#: netbox/extras/forms/bulk_import.py:44 msgid "Field data type (e.g. text, integer, etc.)" msgstr "Veldgegevenstype (bijv. tekst, geheel getal, enz.)" -#: extras/forms/bulk_import.py:47 extras/forms/filtersets.py:208 -#: extras/forms/filtersets.py:281 extras/forms/model_forms.py:304 -#: extras/forms/model_forms.py:341 tenancy/forms/filtersets.py:92 +#: 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/tenancy/forms/filtersets.py:92 msgid "Object type" msgstr "Soort object" -#: extras/forms/bulk_import.py:50 +#: netbox/extras/forms/bulk_import.py:50 msgid "Object type (for object or multi-object fields)" msgstr "Objecttype (voor velden met objecten of velden met meerdere objecten)" -#: extras/forms/bulk_import.py:53 extras/forms/filtersets.py:84 +#: netbox/extras/forms/bulk_import.py:53 netbox/extras/forms/filtersets.py:84 msgid "Choice set" msgstr "Keuze set" -#: extras/forms/bulk_import.py:57 +#: netbox/extras/forms/bulk_import.py:57 msgid "Choice set (for selection fields)" msgstr "Keuzeset (voor selectievelden)" -#: extras/forms/bulk_import.py:63 +#: netbox/extras/forms/bulk_import.py:63 msgid "Whether the custom field is displayed in the UI" msgstr "Of het aangepaste veld wordt weergegeven in de gebruikersinterface" -#: extras/forms/bulk_import.py:69 +#: netbox/extras/forms/bulk_import.py:69 msgid "Whether the custom field is editable in the UI" msgstr "Of het aangepaste veld bewerkbaar is in de gebruikersinterface" -#: extras/forms/bulk_import.py:85 +#: netbox/extras/forms/bulk_import.py:85 msgid "The base set of predefined choices to use (if any)" msgstr "" "De basisset van vooraf gedefinieerde keuzes om te gebruiken (indien " "aanwezig)" -#: extras/forms/bulk_import.py:91 +#: netbox/extras/forms/bulk_import.py:91 msgid "" "Quoted string of comma-separated field choices with optional labels " "separated by colon: \"choice1:First Choice,choice2:Second Choice\"" @@ -7252,188 +7815,204 @@ msgstr "" "gescheiden door een dubbele punt: „Choice1:First Choice, Choice2:Second " "Choice”" -#: extras/forms/bulk_import.py:123 extras/models/models.py:323 +#: netbox/extras/forms/bulk_import.py:123 netbox/extras/models/models.py:323 msgid "button class" msgstr "knopklasse" -#: extras/forms/bulk_import.py:126 extras/models/models.py:327 +#: netbox/extras/forms/bulk_import.py:126 netbox/extras/models/models.py:327 msgid "" "The class of the first link in a group will be used for the dropdown button" msgstr "" "De klasse van de eerste link in een groep wordt gebruikt voor de dropdown-" "knop" -#: extras/forms/bulk_import.py:193 +#: netbox/extras/forms/bulk_import.py:193 msgid "The event type(s) which will trigger this rule" msgstr "Het (de) evenementtype (s) dat deze regel activeert" -#: extras/forms/bulk_import.py:196 +#: netbox/extras/forms/bulk_import.py:196 msgid "Action object" msgstr "Actieobject" -#: extras/forms/bulk_import.py:198 +#: netbox/extras/forms/bulk_import.py:198 msgid "Webhook name or script as dotted path module.Class" msgstr "Webhook-naam of script als stippelpad module.Class" -#: extras/forms/bulk_import.py:219 +#: netbox/extras/forms/bulk_import.py:219 #, python-brace-format msgid "Webhook {name} not found" msgstr "Webhook {name} niet gevonden" -#: extras/forms/bulk_import.py:228 +#: netbox/extras/forms/bulk_import.py:228 #, python-brace-format msgid "Script {name} not found" msgstr "Script {name} niet gevonden" -#: extras/forms/bulk_import.py:244 +#: netbox/extras/forms/bulk_import.py:244 msgid "Assigned object type" msgstr "Toegewezen objecttype" -#: extras/forms/bulk_import.py:249 +#: netbox/extras/forms/bulk_import.py:249 msgid "The classification of entry" msgstr "De classificatie van binnenkomst" -#: extras/forms/bulk_import.py:261 extras/forms/model_forms.py:320 -#: netbox/navigation/menu.py:390 templates/extras/notificationgroup.html:41 -#: templates/users/group.html:29 users/forms/model_forms.py:236 -#: users/forms/model_forms.py:248 users/forms/model_forms.py:300 -#: users/tables.py:102 +#: netbox/extras/forms/bulk_import.py:261 +#: netbox/extras/forms/model_forms.py:320 netbox/netbox/navigation/menu.py:390 +#: 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 +#: netbox/users/tables.py:102 msgid "Users" msgstr "Gebruikers" -#: extras/forms/bulk_import.py:265 +#: netbox/extras/forms/bulk_import.py:265 msgid "User names separated by commas, encased with double quotes" msgstr "" "Gebruikersnamen gescheiden door komma's, tussen dubbele aanhalingstekens" -#: extras/forms/bulk_import.py:268 extras/forms/model_forms.py:315 -#: netbox/navigation/menu.py:410 templates/extras/notificationgroup.html:31 -#: users/forms/model_forms.py:181 users/forms/model_forms.py:193 -#: users/forms/model_forms.py:305 users/tables.py:35 users/tables.py:106 +#: netbox/extras/forms/bulk_import.py:268 +#: netbox/extras/forms/model_forms.py:315 netbox/netbox/navigation/menu.py:410 +#: 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 +#: netbox/users/tables.py:106 msgid "Groups" msgstr "Groepen" -#: extras/forms/bulk_import.py:272 +#: netbox/extras/forms/bulk_import.py:272 msgid "Group names separated by commas, encased with double quotes" msgstr "Groepsnamen gescheiden door komma's, tussen dubbele aanhalingstekens" -#: extras/forms/filtersets.py:52 extras/forms/model_forms.py:56 +#: netbox/extras/forms/filtersets.py:52 netbox/extras/forms/model_forms.py:56 msgid "Related object type" msgstr "Gerelateerd objecttype" -#: extras/forms/filtersets.py:57 +#: netbox/extras/forms/filtersets.py:57 msgid "Field type" msgstr "Soort veld" -#: extras/forms/filtersets.py:120 extras/forms/model_forms.py:157 -#: extras/tables/tables.py:91 templates/generic/bulk_import.html:154 +#: netbox/extras/forms/filtersets.py:120 +#: netbox/extras/forms/model_forms.py:157 netbox/extras/tables/tables.py:91 +#: netbox/templates/generic/bulk_import.html:154 msgid "Choices" msgstr "Keuzes" -#: extras/forms/filtersets.py:164 extras/forms/filtersets.py:319 -#: extras/forms/filtersets.py:408 extras/forms/model_forms.py:572 -#: templates/core/job.html:96 templates/extras/eventrule.html:84 +#: 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/templates/extras/eventrule.html:84 msgid "Data" msgstr "Gegevens" -#: extras/forms/filtersets.py:175 extras/forms/filtersets.py:333 -#: extras/forms/filtersets.py:418 netbox/choices.py:130 -#: utilities/forms/bulk_import.py:26 +#: netbox/extras/forms/filtersets.py:175 netbox/extras/forms/filtersets.py:333 +#: netbox/extras/forms/filtersets.py:418 netbox/netbox/choices.py:130 +#: netbox/utilities/forms/bulk_import.py:26 msgid "Data file" msgstr "Gegevensbestand" -#: extras/forms/filtersets.py:183 +#: netbox/extras/forms/filtersets.py:183 msgid "Content types" msgstr "Inhoudstypen" -#: extras/forms/filtersets.py:255 extras/models/models.py:179 +#: netbox/extras/forms/filtersets.py:255 netbox/extras/models/models.py:179 msgid "HTTP content type" msgstr "HTTP-inhoudstype" -#: extras/forms/filtersets.py:286 +#: netbox/extras/forms/filtersets.py:286 msgid "Event type" msgstr "Soort evenement" -#: extras/forms/filtersets.py:291 +#: netbox/extras/forms/filtersets.py:291 msgid "Action type" msgstr "Soort actie" -#: extras/forms/filtersets.py:307 +#: netbox/extras/forms/filtersets.py:307 msgid "Tagged object type" msgstr "Objecttype met tags" -#: extras/forms/filtersets.py:312 +#: netbox/extras/forms/filtersets.py:312 msgid "Allowed object type" msgstr "Toegestaan objecttype" -#: extras/forms/filtersets.py:341 extras/forms/model_forms.py:507 -#: netbox/navigation/menu.py:18 +#: netbox/extras/forms/filtersets.py:341 +#: netbox/extras/forms/model_forms.py:507 netbox/netbox/navigation/menu.py:18 msgid "Regions" msgstr "Regio's" -#: extras/forms/filtersets.py:346 extras/forms/model_forms.py:512 +#: netbox/extras/forms/filtersets.py:346 +#: netbox/extras/forms/model_forms.py:512 msgid "Site groups" msgstr "Sitegroepen" -#: extras/forms/filtersets.py:356 extras/forms/model_forms.py:522 -#: netbox/navigation/menu.py:20 templates/dcim/site.html:127 +#: netbox/extras/forms/filtersets.py:356 +#: netbox/extras/forms/model_forms.py:522 netbox/netbox/navigation/menu.py:20 +#: netbox/templates/dcim/site.html:127 msgid "Locations" msgstr "Locaties" -#: extras/forms/filtersets.py:361 extras/forms/model_forms.py:527 +#: netbox/extras/forms/filtersets.py:361 +#: netbox/extras/forms/model_forms.py:527 msgid "Device types" msgstr "Apparaattypes" -#: extras/forms/filtersets.py:366 extras/forms/model_forms.py:532 +#: netbox/extras/forms/filtersets.py:366 +#: netbox/extras/forms/model_forms.py:532 msgid "Roles" msgstr "Rollen" -#: extras/forms/filtersets.py:376 extras/forms/model_forms.py:542 +#: netbox/extras/forms/filtersets.py:376 +#: netbox/extras/forms/model_forms.py:542 msgid "Cluster types" msgstr "Clustertypen" -#: extras/forms/filtersets.py:381 extras/forms/model_forms.py:547 +#: netbox/extras/forms/filtersets.py:381 +#: netbox/extras/forms/model_forms.py:547 msgid "Cluster groups" msgstr "Clustergroepen" -#: extras/forms/filtersets.py:386 extras/forms/model_forms.py:552 -#: netbox/navigation/menu.py:255 netbox/navigation/menu.py:257 -#: templates/virtualization/clustertype.html:30 -#: virtualization/tables/clusters.py:23 virtualization/tables/clusters.py:45 +#: 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/templates/virtualization/clustertype.html:30 +#: netbox/virtualization/tables/clusters.py:23 +#: netbox/virtualization/tables/clusters.py:45 msgid "Clusters" msgstr "Clusters" -#: extras/forms/filtersets.py:391 extras/forms/model_forms.py:557 +#: netbox/extras/forms/filtersets.py:391 +#: netbox/extras/forms/model_forms.py:557 msgid "Tenant groups" msgstr "Tenant groepen" -#: extras/forms/model_forms.py:49 +#: netbox/extras/forms/model_forms.py:49 msgid "The type(s) of object that have this custom field" msgstr "Het (de) objecttype (s) dat dit aangepaste veld heeft" -#: extras/forms/model_forms.py:52 +#: netbox/extras/forms/model_forms.py:52 msgid "Default value" msgstr "Standaardwaarde" -#: extras/forms/model_forms.py:58 +#: netbox/extras/forms/model_forms.py:58 msgid "Type of the related object (for object/multi-object fields only)" msgstr "" "Type van het gerelateerde object (alleen voor velden met object/meerdere " "objecten)" -#: extras/forms/model_forms.py:61 templates/extras/customfield.html:60 +#: netbox/extras/forms/model_forms.py:61 +#: netbox/templates/extras/customfield.html:60 msgid "Related object filter" msgstr "Filter voor gerelateerde objecten" -#: extras/forms/model_forms.py:63 +#: netbox/extras/forms/model_forms.py:63 msgid "Specify query parameters as a JSON object." msgstr "Specificeer queryparameters als een JSON-object." -#: extras/forms/model_forms.py:73 templates/extras/customfield.html:10 +#: netbox/extras/forms/model_forms.py:73 +#: netbox/templates/extras/customfield.html:10 msgid "Custom Field" msgstr "Aangepast veld" -#: extras/forms/model_forms.py:85 +#: netbox/extras/forms/model_forms.py:85 msgid "" "The type of data stored in this field. For object/multi-object fields, " "select the related object type below." @@ -7441,7 +8020,7 @@ msgstr "" "Het type gegevens dat in dit veld is opgeslagen. Voor velden met " "object/meerdere objecten selecteert u hieronder het gerelateerde objecttype." -#: extras/forms/model_forms.py:88 +#: netbox/extras/forms/model_forms.py:88 msgid "" "This will be displayed as help text for the form field. Markdown is " "supported." @@ -7449,11 +8028,11 @@ msgstr "" "Dit wordt weergegeven als helptekst voor het formulierveld. Markdown wordt " "ondersteund." -#: extras/forms/model_forms.py:143 +#: netbox/extras/forms/model_forms.py:143 msgid "Related Object" msgstr "Gerelateerd object" -#: extras/forms/model_forms.py:169 +#: netbox/extras/forms/model_forms.py:169 msgid "" "Enter one choice per line. An optional label may be specified for each " "choice by appending it with a colon. Example:" @@ -7461,15 +8040,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:" -#: extras/forms/model_forms.py:212 templates/extras/customlink.html:10 +#: netbox/extras/forms/model_forms.py:212 +#: netbox/templates/extras/customlink.html:10 msgid "Custom Link" msgstr "Aangepaste link" -#: extras/forms/model_forms.py:214 +#: netbox/extras/forms/model_forms.py:214 msgid "Templates" msgstr "Sjablonen" -#: extras/forms/model_forms.py:226 +#: netbox/extras/forms/model_forms.py:226 #, python-brace-format msgid "" "Jinja2 template code for the link text. Reference the object as {example}. " @@ -7479,62 +8059,68 @@ msgstr "" "{example}. Links die als lege tekst worden weergegeven, worden niet " "weergegeven." -#: extras/forms/model_forms.py:230 +#: netbox/extras/forms/model_forms.py:230 #, 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}." -#: extras/forms/model_forms.py:241 extras/forms/model_forms.py:624 +#: netbox/extras/forms/model_forms.py:241 +#: netbox/extras/forms/model_forms.py:624 msgid "Template code" msgstr "Sjablooncode" -#: extras/forms/model_forms.py:247 templates/extras/exporttemplate.html:12 +#: netbox/extras/forms/model_forms.py:247 +#: netbox/templates/extras/exporttemplate.html:12 msgid "Export Template" msgstr "Sjabloon exporteren" -#: extras/forms/model_forms.py:249 +#: netbox/extras/forms/model_forms.py:249 msgid "Rendering" msgstr "Renderen" -#: extras/forms/model_forms.py:263 extras/forms/model_forms.py:649 +#: netbox/extras/forms/model_forms.py:263 +#: netbox/extras/forms/model_forms.py:649 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." -#: extras/forms/model_forms.py:270 extras/forms/model_forms.py:656 +#: netbox/extras/forms/model_forms.py:270 +#: netbox/extras/forms/model_forms.py:656 msgid "Must specify either local content or a data file" msgstr "Moet lokale inhoud of een gegevensbestand specificeren" -#: extras/forms/model_forms.py:284 netbox/forms/mixins.py:70 -#: templates/extras/savedfilter.html:10 +#: netbox/extras/forms/model_forms.py:284 netbox/netbox/forms/mixins.py:70 +#: netbox/templates/extras/savedfilter.html:10 msgid "Saved Filter" msgstr "Opgeslagen filter" -#: extras/forms/model_forms.py:334 +#: netbox/extras/forms/model_forms.py:334 msgid "A notification group specify at least one user or group." msgstr "" "In een meldingsgroep wordt ten minste één gebruiker of groep gespecificeerd." -#: extras/forms/model_forms.py:356 templates/extras/webhook.html:23 +#: netbox/extras/forms/model_forms.py:356 +#: netbox/templates/extras/webhook.html:23 msgid "HTTP Request" msgstr "HTTP-aanvraag" -#: extras/forms/model_forms.py:358 templates/extras/webhook.html:44 +#: netbox/extras/forms/model_forms.py:358 +#: netbox/templates/extras/webhook.html:44 msgid "SSL" msgstr "SSL" -#: extras/forms/model_forms.py:380 +#: netbox/extras/forms/model_forms.py:380 msgid "Action choice" msgstr "Keuze van de actie" -#: extras/forms/model_forms.py:385 +#: netbox/extras/forms/model_forms.py:385 msgid "Enter conditions in JSON format." msgstr "Voer de voorwaarden in JSON formaat." -#: extras/forms/model_forms.py:389 +#: netbox/extras/forms/model_forms.py:389 msgid "" "Enter parameters to pass to the action in JSON format." @@ -7542,112 +8128,114 @@ msgstr "" "Voer parameters in om door te geven aan de actie JSON formaat." -#: extras/forms/model_forms.py:394 templates/extras/eventrule.html:10 +#: netbox/extras/forms/model_forms.py:394 +#: netbox/templates/extras/eventrule.html:10 msgid "Event Rule" msgstr "Regel voor evenementen" -#: extras/forms/model_forms.py:395 +#: netbox/extras/forms/model_forms.py:395 msgid "Triggers" msgstr "Triggers" -#: extras/forms/model_forms.py:442 +#: netbox/extras/forms/model_forms.py:442 msgid "Notification group" msgstr "Meldingsgroep" -#: extras/forms/model_forms.py:562 netbox/navigation/menu.py:26 -#: tenancy/tables/tenants.py:22 +#: netbox/extras/forms/model_forms.py:562 netbox/netbox/navigation/menu.py:26 +#: netbox/tenancy/tables/tenants.py:22 msgid "Tenants" msgstr "Tenant" -#: extras/forms/model_forms.py:606 +#: netbox/extras/forms/model_forms.py:606 msgid "Data is populated from the remote source selected below." msgstr "" "Gegevens worden ingevuld via de externe bron die hieronder is geselecteerd." -#: extras/forms/model_forms.py:612 +#: netbox/extras/forms/model_forms.py:612 msgid "Must specify either local data or a data file" msgstr "Moet lokale gegevens of een gegevensbestand specificeren" -#: extras/forms/model_forms.py:631 templates/core/datafile.html:55 +#: netbox/extras/forms/model_forms.py:631 +#: netbox/templates/core/datafile.html:55 msgid "Content" msgstr "Inhoud" -#: extras/forms/reports.py:17 extras/forms/scripts.py:23 +#: netbox/extras/forms/reports.py:17 netbox/extras/forms/scripts.py:23 msgid "Schedule at" msgstr "Schema op" -#: extras/forms/reports.py:18 +#: netbox/extras/forms/reports.py:18 msgid "Schedule execution of report to a set time" msgstr "Plan de uitvoering van het rapport op een vast tijdstip" -#: extras/forms/reports.py:23 extras/forms/scripts.py:29 +#: netbox/extras/forms/reports.py:23 netbox/extras/forms/scripts.py:29 msgid "Recurs every" msgstr "Gebeurd elke" -#: extras/forms/reports.py:27 +#: netbox/extras/forms/reports.py:27 msgid "Interval at which this report is re-run (in minutes)" msgstr "Interval waarop dit rapport opnieuw wordt uitgevoerd (in minuten)" -#: extras/forms/reports.py:35 extras/forms/scripts.py:41 +#: netbox/extras/forms/reports.py:35 netbox/extras/forms/scripts.py:41 #, python-brace-format msgid " (current time: {now})" msgstr " (huidige tijd: {now})" -#: extras/forms/reports.py:45 extras/forms/scripts.py:51 +#: netbox/extras/forms/reports.py:45 netbox/extras/forms/scripts.py:51 msgid "Scheduled time must be in the future." msgstr "De geplande tijd moet in de toekomst liggen." -#: extras/forms/scripts.py:17 +#: netbox/extras/forms/scripts.py:17 msgid "Commit changes" msgstr "Wijzigingen doorvoeren" -#: extras/forms/scripts.py:18 +#: netbox/extras/forms/scripts.py:18 msgid "Commit changes to the database (uncheck for a dry-run)" msgstr "" "Wijzigingen doorvoeren in de database (schakel het vinkje uit voor een " "oefening; een repetitie)" -#: extras/forms/scripts.py:24 +#: netbox/extras/forms/scripts.py:24 msgid "Schedule execution of script to a set time" msgstr "Plan de uitvoering van het script op een bepaald tijdstip" -#: extras/forms/scripts.py:33 +#: netbox/extras/forms/scripts.py:33 msgid "Interval at which this script is re-run (in minutes)" msgstr "Interval waarmee dit script opnieuw wordt uitgevoerd (in minuten)" -#: extras/jobs.py:49 +#: netbox/extras/jobs.py:47 msgid "Database changes have been reverted automatically." msgstr "Wijzigingen in de database zijn automatisch teruggedraaid." -#: extras/jobs.py:55 +#: netbox/extras/jobs.py:53 msgid "Script aborted with error: " msgstr "Script is met een fout afgebroken: " -#: extras/jobs.py:65 +#: netbox/extras/jobs.py:63 msgid "An exception occurred: " msgstr "Er deed zich een uitzondering voor: " -#: extras/jobs.py:70 +#: netbox/extras/jobs.py:68 msgid "Database changes have been reverted due to error." msgstr "Wijzigingen in de database zijn teruggedraaid vanwege een fout." -#: extras/management/commands/reindex.py:66 +#: netbox/extras/management/commands/reindex.py:66 msgid "No indexers found!" msgstr "Geen indexers gevonden!" -#: extras/models/configs.py:130 +#: netbox/extras/models/configs.py:130 msgid "config context" msgstr "context van de configuratie" -#: extras/models/configs.py:131 +#: netbox/extras/models/configs.py:131 msgid "config contexts" msgstr "contexten configureren" -#: extras/models/configs.py:149 extras/models/configs.py:205 +#: netbox/extras/models/configs.py:149 netbox/extras/models/configs.py:205 msgid "JSON data must be in object form. Example:" msgstr "JSON-gegevens moeten in objectvorm zijn. Voorbeeld:" -#: extras/models/configs.py:169 +#: netbox/extras/models/configs.py:169 msgid "" "Local config context data takes precedence over source contexts in the final" " rendered config context" @@ -7655,19 +8243,19 @@ msgstr "" "Contextgegevens van de lokale configuratie hebben voorrang op broncontexten " "in de uiteindelijke gerenderde configuratiecontext" -#: extras/models/configs.py:224 +#: netbox/extras/models/configs.py:224 msgid "template code" msgstr "sjablooncode" -#: extras/models/configs.py:225 +#: netbox/extras/models/configs.py:225 msgid "Jinja2 template code." msgstr "Jinja2-sjablooncode." -#: extras/models/configs.py:228 +#: netbox/extras/models/configs.py:228 msgid "environment parameters" msgstr "omgevingsparameters" -#: extras/models/configs.py:233 +#: netbox/extras/models/configs.py:233 msgid "" "Any additional" @@ -7677,42 +8265,42 @@ msgstr "" "href=\"https://jinja.palletsprojects.com/en/3.1.x/api/#jinja2.Environment\">aanvullende" " parameters om door te geven bij het bouwen van de Jinja2-omgeving." -#: extras/models/configs.py:240 +#: netbox/extras/models/configs.py:240 msgid "config template" msgstr "configuratiesjabloon" -#: extras/models/configs.py:241 +#: netbox/extras/models/configs.py:241 msgid "config templates" msgstr "configuratiesjablonen" -#: extras/models/customfields.py:75 +#: netbox/extras/models/customfields.py:75 msgid "The object(s) to which this field applies." msgstr "Het (de) object (en) waarop dit veld van toepassing is." -#: extras/models/customfields.py:82 +#: netbox/extras/models/customfields.py:82 msgid "The type of data this custom field holds" msgstr "Het type gegevens dat dit aangepaste veld bevat" -#: extras/models/customfields.py:89 +#: netbox/extras/models/customfields.py:89 msgid "The type of NetBox object this field maps to (for object fields)" msgstr "" "Het type NetBox-object waarnaar dit veld wordt toegewezen (voor " "objectvelden)" -#: extras/models/customfields.py:95 +#: netbox/extras/models/customfields.py:95 msgid "Internal field name" msgstr "Naam van het interne veld" -#: extras/models/customfields.py:99 +#: netbox/extras/models/customfields.py:99 msgid "Only alphanumeric characters and underscores are allowed." msgstr "Alleen alfanumerieke tekens en onderstrepingstekens zijn toegestaan." -#: extras/models/customfields.py:104 +#: netbox/extras/models/customfields.py:104 msgid "Double underscores are not permitted in custom field names." msgstr "" "Dubbele onderstrepingstekens zijn niet toegestaan in aangepaste veldnamen." -#: extras/models/customfields.py:115 +#: netbox/extras/models/customfields.py:115 msgid "" "Name of the field as displayed to users (if not provided, 'the field's name " "will be used)" @@ -7720,19 +8308,19 @@ msgstr "" "Naam van het veld zoals getoond aan gebruikers (indien niet opgegeven, wordt" " 'de veldnaam gebruikt)" -#: extras/models/customfields.py:119 extras/models/models.py:317 +#: netbox/extras/models/customfields.py:119 netbox/extras/models/models.py:317 msgid "group name" msgstr "naam van de groep" -#: extras/models/customfields.py:122 +#: netbox/extras/models/customfields.py:122 msgid "Custom fields within the same group will be displayed together" msgstr "Aangepaste velden binnen dezelfde groep worden samen weergegeven" -#: extras/models/customfields.py:130 +#: netbox/extras/models/customfields.py:130 msgid "required" msgstr "verplicht" -#: extras/models/customfields.py:132 +#: netbox/extras/models/customfields.py:132 msgid "" "This field is required when creating new objects or editing an existing " "object." @@ -7740,19 +8328,19 @@ msgstr "" "Dit veld is vereist wanneer u nieuwe objecten maakt of een bestaand object " "bewerkt." -#: extras/models/customfields.py:135 +#: netbox/extras/models/customfields.py:135 msgid "must be unique" msgstr "moet uniek zijn" -#: extras/models/customfields.py:137 +#: netbox/extras/models/customfields.py:137 msgid "The value of this field must be unique for the assigned object" msgstr "De waarde van dit veld moet uniek zijn voor het toegewezen object" -#: extras/models/customfields.py:140 +#: netbox/extras/models/customfields.py:140 msgid "search weight" msgstr "zoekgewicht" -#: extras/models/customfields.py:143 +#: netbox/extras/models/customfields.py:143 msgid "" "Weighting for search. Lower values are considered more important. Fields " "with a search weight of zero will be ignored." @@ -7760,11 +8348,11 @@ msgstr "" "Weging voor zoeken. Lagere waarden worden als belangrijker beschouwd. Velden" " met een zoekgewicht van nul worden genegeerd." -#: extras/models/customfields.py:148 +#: netbox/extras/models/customfields.py:148 msgid "filter logic" msgstr "filterlogica" -#: extras/models/customfields.py:152 +#: netbox/extras/models/customfields.py:152 msgid "" "Loose matches any instance of a given string; exact matches the entire " "field." @@ -7772,11 +8360,11 @@ msgstr "" "Loose komt overeen met elk exemplaar van een bepaalde tekenreeks; exact komt" " overeen met het hele veld." -#: extras/models/customfields.py:155 +#: netbox/extras/models/customfields.py:155 msgid "default" msgstr "standaard" -#: extras/models/customfields.py:159 +#: netbox/extras/models/customfields.py:159 msgid "" "Default value for the field (must be a JSON value). Encapsulate strings with" " double quotes (e.g. \"Foo\")." @@ -7784,7 +8372,7 @@ msgstr "" "Standaardwaarde voor het veld (moet een JSON-waarde zijn). Voeg tekenreeksen" " in met dubbele aanhalingstekens (bijvoorbeeld „Foo”)." -#: extras/models/customfields.py:166 +#: netbox/extras/models/customfields.py:166 msgid "" "Filter the object selection choices using a query_params dict (must be a " "JSON value).Encapsulate strings with double quotes (e.g. \"Foo\")." @@ -7793,36 +8381,36 @@ msgstr "" "dictaat (moet een JSON-waarde zijn) .Voeg tekenreeksen in met dubbele " "aanhalingstekens (bijvoorbeeld „Foo”)." -#: extras/models/customfields.py:172 +#: netbox/extras/models/customfields.py:172 msgid "display weight" msgstr "gewicht van het beeldscherm" -#: extras/models/customfields.py:173 +#: netbox/extras/models/customfields.py:173 msgid "Fields with higher weights appear lower in a form." msgstr "" "Velden met een hoger gewicht worden lager weergegeven in een formulier." -#: extras/models/customfields.py:178 +#: netbox/extras/models/customfields.py:178 msgid "minimum value" msgstr "minimumwaarde" -#: extras/models/customfields.py:179 +#: netbox/extras/models/customfields.py:179 msgid "Minimum allowed value (for numeric fields)" msgstr "Minimaal toegestane waarde (voor numerieke velden)" -#: extras/models/customfields.py:184 +#: netbox/extras/models/customfields.py:184 msgid "maximum value" msgstr "maximale waarde" -#: extras/models/customfields.py:185 +#: netbox/extras/models/customfields.py:185 msgid "Maximum allowed value (for numeric fields)" msgstr "Maximaal toegestane waarde (voor numerieke velden)" -#: extras/models/customfields.py:191 +#: netbox/extras/models/customfields.py:191 msgid "validation regex" msgstr "validatieregex" -#: extras/models/customfields.py:193 +#: netbox/extras/models/customfields.py:193 #, python-brace-format msgid "" "Regular expression to enforce on text field values. Use ^ and $ to force " @@ -7833,197 +8421,199 @@ msgstr "" "en $ om het matchen van de hele string te forceren. Bijvoorbeeld ^ " "[A-Z]{3}$ beperkt de waarden tot precies drie hoofdletters." -#: extras/models/customfields.py:201 +#: netbox/extras/models/customfields.py:201 msgid "choice set" msgstr "keuzeset" -#: extras/models/customfields.py:210 +#: netbox/extras/models/customfields.py:210 msgid "Specifies whether the custom field is displayed in the UI" msgstr "" "Specificeert of het aangepaste veld wordt weergegeven in de " "gebruikersinterface" -#: extras/models/customfields.py:217 +#: netbox/extras/models/customfields.py:217 msgid "Specifies whether the custom field value can be edited in the UI" msgstr "" "Specificeert of de aangepaste veldwaarde kan worden bewerkt in de " "gebruikersinterface" -#: extras/models/customfields.py:221 +#: netbox/extras/models/customfields.py:221 msgid "is cloneable" msgstr "is kloonbaar" -#: extras/models/customfields.py:222 +#: netbox/extras/models/customfields.py:222 msgid "Replicate this value when cloning objects" msgstr "Repliceer deze waarde bij het klonen van objecten" -#: extras/models/customfields.py:239 +#: netbox/extras/models/customfields.py:239 msgid "custom field" msgstr "aangepast veld" -#: extras/models/customfields.py:240 +#: netbox/extras/models/customfields.py:240 msgid "custom fields" msgstr "aangepaste velden" -#: extras/models/customfields.py:329 +#: netbox/extras/models/customfields.py:329 #, python-brace-format msgid "Invalid default value \"{value}\": {error}" msgstr "Ongeldige standaardwaarde”{value}„: {error}" -#: extras/models/customfields.py:336 +#: netbox/extras/models/customfields.py:336 msgid "A minimum value may be set only for numeric fields" msgstr "" "Er mag alleen een minimumwaarde worden ingesteld voor numerieke velden" -#: extras/models/customfields.py:338 +#: netbox/extras/models/customfields.py:338 msgid "A maximum value may be set only for numeric fields" msgstr "" "Er mag alleen een maximumwaarde worden ingesteld voor numerieke velden" -#: extras/models/customfields.py:348 +#: netbox/extras/models/customfields.py:348 msgid "" "Regular expression validation is supported only for text and URL fields" msgstr "" "Validatie van reguliere expressies wordt alleen ondersteund voor tekst- en " "URL-velden" -#: extras/models/customfields.py:354 +#: netbox/extras/models/customfields.py:354 msgid "Uniqueness cannot be enforced for boolean fields" msgstr "Uniciteit kan niet worden afgedwongen voor booleaanse velden" -#: extras/models/customfields.py:364 +#: netbox/extras/models/customfields.py:364 msgid "Selection fields must specify a set of choices." msgstr "Selectievelden moeten een reeks keuzes specificeren." -#: extras/models/customfields.py:368 +#: netbox/extras/models/customfields.py:368 msgid "Choices may be set only on selection fields." msgstr "Keuzes kunnen alleen worden ingesteld op selectievelden." -#: extras/models/customfields.py:375 +#: netbox/extras/models/customfields.py:375 msgid "Object fields must define an object type." msgstr "Objectvelden moeten een objecttype definiëren." -#: extras/models/customfields.py:379 +#: netbox/extras/models/customfields.py:379 #, python-brace-format msgid "{type} fields may not define an object type." msgstr "{type} velden definiëren mogelijk geen objecttype." -#: extras/models/customfields.py:386 +#: netbox/extras/models/customfields.py:386 msgid "A related object filter can be defined only for object fields." msgstr "" "Een gerelateerd objectfilter kan alleen voor objectvelden worden " "gedefinieerd." -#: extras/models/customfields.py:390 +#: netbox/extras/models/customfields.py:390 msgid "Filter must be defined as a dictionary mapping attributes to values." msgstr "" "Filter moet worden gedefinieerd als een woordenboek dat attributen aan " "waarden toewijst." -#: extras/models/customfields.py:469 +#: netbox/extras/models/customfields.py:469 msgid "True" msgstr "Waar" -#: extras/models/customfields.py:470 +#: netbox/extras/models/customfields.py:470 msgid "False" msgstr "Onwaar" -#: extras/models/customfields.py:560 +#: netbox/extras/models/customfields.py:560 #, python-brace-format msgid "Values must match this regex: {regex}" msgstr "Waarden moeten overeenkomen met deze regex: {regex}" -#: extras/models/customfields.py:654 +#: netbox/extras/models/customfields.py:654 msgid "Value must be a string." msgstr "De waarde moet een tekenreeks zijn." -#: extras/models/customfields.py:656 +#: netbox/extras/models/customfields.py:656 #, python-brace-format msgid "Value must match regex '{regex}'" msgstr "De waarde moet overeenkomen met regex '{regex}'" -#: extras/models/customfields.py:661 +#: netbox/extras/models/customfields.py:661 msgid "Value must be an integer." msgstr "De waarde moet een geheel getal zijn." -#: extras/models/customfields.py:664 extras/models/customfields.py:679 +#: netbox/extras/models/customfields.py:664 +#: netbox/extras/models/customfields.py:679 #, python-brace-format msgid "Value must be at least {minimum}" msgstr "De waarde moet minstens {minimum}" -#: extras/models/customfields.py:668 extras/models/customfields.py:683 +#: netbox/extras/models/customfields.py:668 +#: netbox/extras/models/customfields.py:683 #, python-brace-format msgid "Value must not exceed {maximum}" msgstr "De waarde mag niet hoger zijn dan {maximum}" -#: extras/models/customfields.py:676 +#: netbox/extras/models/customfields.py:676 msgid "Value must be a decimal." msgstr "De waarde moet een decimaal getal zijn." -#: extras/models/customfields.py:688 +#: netbox/extras/models/customfields.py:688 msgid "Value must be true or false." msgstr "De waarde moet waar of onwaar zijn." -#: extras/models/customfields.py:696 +#: netbox/extras/models/customfields.py:696 msgid "Date values must be in ISO 8601 format (YYYY-MM-DD)." msgstr "De datumwaarden moeten de indeling ISO 8601 hebben (JJJJ-MM-DD)." -#: extras/models/customfields.py:705 +#: netbox/extras/models/customfields.py:705 msgid "Date and time values must be in ISO 8601 format (YYYY-MM-DD HH:MM:SS)." msgstr "" "De datum- en tijdwaarden moeten de indeling ISO 8601 hebben (JJJJ-MM-DD " "H:MM:SS)." -#: extras/models/customfields.py:712 +#: netbox/extras/models/customfields.py:712 #, python-brace-format msgid "Invalid choice ({value}) for choice set {choiceset}." msgstr "Ongeldige keuze ({value}) voor keuzeset {choiceset}." -#: extras/models/customfields.py:722 +#: netbox/extras/models/customfields.py:722 #, python-brace-format msgid "Invalid choice(s) ({value}) for choice set {choiceset}." msgstr "Ongeldige keuze (s) ({value}) voor keuzeset {choiceset}." -#: extras/models/customfields.py:731 +#: netbox/extras/models/customfields.py:731 #, python-brace-format msgid "Value must be an object ID, not {type}" msgstr "De waarde moet een object-ID zijn, niet {type}" -#: extras/models/customfields.py:737 +#: netbox/extras/models/customfields.py:737 #, python-brace-format msgid "Value must be a list of object IDs, not {type}" msgstr "De waarde moet een lijst met object-ID's zijn, niet {type}" -#: extras/models/customfields.py:741 +#: netbox/extras/models/customfields.py:741 #, python-brace-format msgid "Found invalid object ID: {id}" msgstr "Ongeldige object-ID gevonden: {id}" -#: extras/models/customfields.py:744 +#: netbox/extras/models/customfields.py:744 msgid "Required field cannot be empty." msgstr "Het verplichte veld mag niet leeg zijn." -#: extras/models/customfields.py:763 +#: netbox/extras/models/customfields.py:763 msgid "Base set of predefined choices (optional)" msgstr "Basisset van vooraf gedefinieerde keuzes (optioneel)" -#: extras/models/customfields.py:775 +#: netbox/extras/models/customfields.py:775 msgid "Choices are automatically ordered alphabetically" msgstr "Keuzes worden automatisch alfabetisch gerangschikt" -#: extras/models/customfields.py:782 +#: netbox/extras/models/customfields.py:782 msgid "custom field choice set" msgstr "aangepaste veldkeuzeset" -#: extras/models/customfields.py:783 +#: netbox/extras/models/customfields.py:783 msgid "custom field choice sets" msgstr "aangepaste veldkeuzesets" -#: extras/models/customfields.py:825 +#: netbox/extras/models/customfields.py:825 msgid "Must define base or extra choices." msgstr "Moet basis- of extra keuzes definiëren." -#: extras/models/customfields.py:849 +#: netbox/extras/models/customfields.py:849 #, python-brace-format msgid "" "Cannot remove choice {choice} as there are {model} objects which reference " @@ -8032,60 +8622,60 @@ msgstr "" "Keuze kan niet worden verwijderd {choice} zoals er zijn {model} objecten die" " ernaar verwijzen." -#: extras/models/dashboard.py:18 +#: netbox/extras/models/dashboard.py:18 msgid "layout" msgstr "lay-out" -#: extras/models/dashboard.py:22 +#: netbox/extras/models/dashboard.py:22 msgid "config" msgstr "configuratie" -#: extras/models/dashboard.py:27 +#: netbox/extras/models/dashboard.py:27 msgid "dashboard" msgstr "dashboard" -#: extras/models/dashboard.py:28 +#: netbox/extras/models/dashboard.py:28 msgid "dashboards" msgstr "spatschermen" -#: extras/models/models.py:52 +#: netbox/extras/models/models.py:52 msgid "object types" msgstr "objecttypen" -#: extras/models/models.py:53 +#: netbox/extras/models/models.py:53 msgid "The object(s) to which this rule applies." msgstr "Het (de) object (en) waarop deze regel van toepassing is." -#: extras/models/models.py:67 +#: netbox/extras/models/models.py:67 msgid "The types of event which will trigger this rule." msgstr "De soorten gebeurtenissen die deze regel zullen activeren." -#: extras/models/models.py:74 +#: netbox/extras/models/models.py:74 msgid "conditions" msgstr "voorwaarden" -#: extras/models/models.py:77 +#: netbox/extras/models/models.py:77 msgid "" "A set of conditions which determine whether the event will be generated." msgstr "Een set voorwaarden die bepalen of de gebeurtenis wordt gegenereerd." -#: extras/models/models.py:85 +#: netbox/extras/models/models.py:85 msgid "action type" msgstr "actietype" -#: extras/models/models.py:104 +#: netbox/extras/models/models.py:104 msgid "Additional data to pass to the action object" msgstr "Aanvullende gegevens om door te geven aan het actieobject" -#: extras/models/models.py:116 +#: netbox/extras/models/models.py:116 msgid "event rule" msgstr "regel van het evenement" -#: extras/models/models.py:117 +#: netbox/extras/models/models.py:117 msgid "event rules" msgstr "regels voor evenementen" -#: extras/models/models.py:166 +#: netbox/extras/models/models.py:166 msgid "" "This URL will be called using the HTTP method defined when the webhook is " "called. Jinja2 template processing is supported with the same context as the" @@ -8096,7 +8686,7 @@ msgstr "" "Jinja2-sjablonen wordt ondersteund met dezelfde context als de hoofdtekst " "van het verzoek." -#: extras/models/models.py:181 +#: netbox/extras/models/models.py:181 msgid "" "The complete list of official content types is available hier." -#: extras/models/models.py:186 +#: netbox/extras/models/models.py:186 msgid "additional headers" msgstr "extra kopteksten" -#: extras/models/models.py:189 +#: netbox/extras/models/models.py:189 msgid "" "User-supplied HTTP headers to be sent with the request in addition to the " "HTTP content type. Headers should be defined in the format Name: " @@ -8123,11 +8713,11 @@ msgstr "" "Jinja2-sjablonen wordt ondersteund met dezelfde context als de hoofdtekst " "van het verzoek (hieronder)." -#: extras/models/models.py:195 +#: netbox/extras/models/models.py:195 msgid "body template" msgstr "sjabloon voor het lichaam" -#: extras/models/models.py:198 +#: netbox/extras/models/models.py:198 msgid "" "Jinja2 template for a custom request body. If blank, a JSON object " "representing the change will be included. Available context data includes: " @@ -8140,11 +8730,11 @@ msgstr "" "tijdstempel, gebruikersnaam, " "aanvraag_id, en gegevens." -#: extras/models/models.py:204 +#: netbox/extras/models/models.py:204 msgid "secret" msgstr "geheim" -#: extras/models/models.py:208 +#: netbox/extras/models/models.py:208 msgid "" "When provided, the request will include a X-Hook-Signature " "header containing a HMAC hex digest of the payload body using the secret as " @@ -8154,16 +8744,16 @@ msgstr "" "header met een HMAC-hex-samenvatting van de payload-body met het geheim als " "sleutel. Het geheim wordt niet in het verzoek doorgegeven." -#: extras/models/models.py:215 +#: netbox/extras/models/models.py:215 msgid "Enable SSL certificate verification. Disable with caution!" msgstr "" "Activeer de verificatie van SSL-certificaten. Voorzichtig uitschakelen!" -#: extras/models/models.py:221 templates/extras/webhook.html:51 +#: netbox/extras/models/models.py:221 netbox/templates/extras/webhook.html:51 msgid "CA File Path" msgstr "CA-bestandspad" -#: extras/models/models.py:223 +#: netbox/extras/models/models.py:223 msgid "" "The specific CA certificate file to use for SSL verification. Leave blank to" " use the system defaults." @@ -8172,64 +8762,64 @@ msgstr "" "verificatie. Laat dit veld leeg om de standaardinstellingen van het systeem " "te gebruiken." -#: extras/models/models.py:234 +#: netbox/extras/models/models.py:234 msgid "webhook" msgstr "webhook" -#: extras/models/models.py:235 +#: netbox/extras/models/models.py:235 msgid "webhooks" msgstr "webhooks" -#: extras/models/models.py:253 +#: netbox/extras/models/models.py:253 msgid "Do not specify a CA certificate file if SSL verification is disabled." msgstr "" "Geef geen CA-certificaatbestand op als SSL-verificatie is uitgeschakeld." -#: extras/models/models.py:293 +#: netbox/extras/models/models.py:293 msgid "The object type(s) to which this link applies." msgstr "Het (de) objecttype (s) waarop deze link van toepassing is." -#: extras/models/models.py:305 +#: netbox/extras/models/models.py:305 msgid "link text" msgstr "linktekst" -#: extras/models/models.py:306 +#: netbox/extras/models/models.py:306 msgid "Jinja2 template code for link text" msgstr "Jinja2-sjablooncode voor linktekst" -#: extras/models/models.py:309 +#: netbox/extras/models/models.py:309 msgid "link URL" msgstr "URL van de link" -#: extras/models/models.py:310 +#: netbox/extras/models/models.py:310 msgid "Jinja2 template code for link URL" msgstr "Jinja2-sjablooncode voor link-URL" -#: extras/models/models.py:320 +#: netbox/extras/models/models.py:320 msgid "Links with the same group will appear as a dropdown menu" msgstr "Links met dezelfde groep verschijnen als een dropdown-menu" -#: extras/models/models.py:330 +#: netbox/extras/models/models.py:330 msgid "new window" msgstr "nieuw venster" -#: extras/models/models.py:332 +#: netbox/extras/models/models.py:332 msgid "Force link to open in a new window" msgstr "Link forceren om in een nieuw venster te openen" -#: extras/models/models.py:341 +#: netbox/extras/models/models.py:341 msgid "custom link" msgstr "link op maat" -#: extras/models/models.py:342 +#: netbox/extras/models/models.py:342 msgid "custom links" msgstr "links op maat" -#: extras/models/models.py:389 +#: netbox/extras/models/models.py:389 msgid "The object type(s) to which this template applies." msgstr "Het (de) objecttype (s) waarop dit sjabloon van toepassing is." -#: extras/models/models.py:402 +#: netbox/extras/models/models.py:402 msgid "" "Jinja2 template code. The list of objects being exported is passed as a " "context variable named queryset." @@ -8237,1088 +8827,1154 @@ msgstr "" "Jinja2-sjablooncode. De lijst met objecten die worden geëxporteerd, wordt " "doorgegeven als een contextvariabele met de naam queryset." -#: extras/models/models.py:410 +#: netbox/extras/models/models.py:410 msgid "Defaults to text/plain; charset=utf-8" msgstr "Wordt standaard ingesteld op text/plain; charset=utf-8" -#: extras/models/models.py:413 +#: netbox/extras/models/models.py:413 msgid "file extension" msgstr "bestandsextensie" -#: extras/models/models.py:416 +#: netbox/extras/models/models.py:416 msgid "Extension to append to the rendered filename" msgstr "Uitbreiding om toe te voegen aan de gerenderde bestandsnaam" -#: extras/models/models.py:419 +#: netbox/extras/models/models.py:419 msgid "as attachment" msgstr "als bijlage" -#: extras/models/models.py:421 +#: netbox/extras/models/models.py:421 msgid "Download file as attachment" msgstr "Download het bestand als bijlage" -#: extras/models/models.py:430 +#: netbox/extras/models/models.py:430 msgid "export template" msgstr "sjabloon exporteren" -#: extras/models/models.py:431 +#: netbox/extras/models/models.py:431 msgid "export templates" msgstr "sjablonen exporteren" -#: extras/models/models.py:448 +#: netbox/extras/models/models.py:448 #, python-brace-format msgid "\"{name}\" is a reserved name. Please choose a different name." msgstr "„{name}„is een gereserveerde naam. Kies een andere naam." -#: extras/models/models.py:498 +#: netbox/extras/models/models.py:498 msgid "The object type(s) to which this filter applies." msgstr "Het (de) objecttype (s) waarop dit filter van toepassing is." -#: extras/models/models.py:530 +#: netbox/extras/models/models.py:530 msgid "shared" msgstr "gedeeld" -#: extras/models/models.py:543 +#: netbox/extras/models/models.py:543 msgid "saved filter" msgstr "opgeslagen filter" -#: extras/models/models.py:544 +#: netbox/extras/models/models.py:544 msgid "saved filters" msgstr "opgeslagen filters" -#: extras/models/models.py:562 +#: netbox/extras/models/models.py:562 msgid "Filter parameters must be stored as a dictionary of keyword arguments." msgstr "" "Filterparameters moeten worden opgeslagen als een woordenboek met " "trefwoordargumenten." -#: extras/models/models.py:590 +#: netbox/extras/models/models.py:590 msgid "image height" msgstr "hoogte van de afbeelding" -#: extras/models/models.py:593 +#: netbox/extras/models/models.py:593 msgid "image width" msgstr "breedte van de afbeelding" -#: extras/models/models.py:610 +#: netbox/extras/models/models.py:610 msgid "image attachment" msgstr "bijlage bij de afbeelding" -#: extras/models/models.py:611 +#: netbox/extras/models/models.py:611 msgid "image attachments" msgstr "bijlagen bij afbeeldingen" -#: extras/models/models.py:625 +#: netbox/extras/models/models.py:625 #, python-brace-format msgid "Image attachments cannot be assigned to this object type ({type})." msgstr "" "Afbeeldingsbijlagen kunnen niet aan dit objecttype worden toegewezen " "({type})." -#: extras/models/models.py:688 +#: netbox/extras/models/models.py:688 msgid "kind" msgstr "vriendelijk" -#: extras/models/models.py:702 +#: netbox/extras/models/models.py:702 msgid "journal entry" msgstr "journaalboeking" -#: extras/models/models.py:703 +#: netbox/extras/models/models.py:703 msgid "journal entries" msgstr "journaalboekingen" -#: extras/models/models.py:718 +#: netbox/extras/models/models.py:718 #, python-brace-format msgid "Journaling is not supported for this object type ({type})." msgstr "Journaling wordt niet ondersteund voor dit objecttype ({type})." -#: extras/models/models.py:760 +#: netbox/extras/models/models.py:760 msgid "bookmark" msgstr "bladwijzer" -#: extras/models/models.py:761 +#: netbox/extras/models/models.py:761 msgid "bookmarks" msgstr "bladwijzers" -#: extras/models/models.py:774 +#: netbox/extras/models/models.py:774 #, python-brace-format msgid "Bookmarks cannot be assigned to this object type ({type})." msgstr "" "Bladwijzers kunnen niet aan dit objecttype worden toegewezen ({type})." -#: extras/models/notifications.py:43 +#: netbox/extras/models/notifications.py:43 msgid "read" msgstr "lezen" -#: extras/models/notifications.py:66 +#: netbox/extras/models/notifications.py:66 msgid "event" msgstr "evenement" -#: extras/models/notifications.py:84 +#: netbox/extras/models/notifications.py:84 msgid "notification" msgstr "melding" -#: extras/models/notifications.py:85 +#: netbox/extras/models/notifications.py:85 msgid "notifications" msgstr "meldingen" -#: extras/models/notifications.py:99 extras/models/notifications.py:234 +#: netbox/extras/models/notifications.py:99 +#: netbox/extras/models/notifications.py:234 #, python-brace-format msgid "Objects of this type ({type}) do not support notifications." msgstr "Objecten van dit type ({type}) ondersteunen geen meldingen." -#: extras/models/notifications.py:137 users/models/users.py:58 -#: users/models/users.py:77 +#: netbox/extras/models/notifications.py:137 netbox/users/models/users.py:58 +#: netbox/users/models/users.py:77 msgid "groups" msgstr "groepen" -#: extras/models/notifications.py:143 users/models/users.py:93 +#: netbox/extras/models/notifications.py:143 netbox/users/models/users.py:93 msgid "users" msgstr "gebruikers" -#: extras/models/notifications.py:152 +#: netbox/extras/models/notifications.py:152 msgid "notification group" msgstr "meldingsgroep" -#: extras/models/notifications.py:153 +#: netbox/extras/models/notifications.py:153 msgid "notification groups" msgstr "meldingsgroepen" -#: extras/models/notifications.py:217 +#: netbox/extras/models/notifications.py:217 msgid "subscription" msgstr "abonnement" -#: extras/models/notifications.py:218 +#: netbox/extras/models/notifications.py:218 msgid "subscriptions" msgstr "abonnementen" -#: extras/models/scripts.py:42 +#: netbox/extras/models/scripts.py:42 msgid "is executable" msgstr "is uitvoerbaar" -#: extras/models/scripts.py:64 +#: netbox/extras/models/scripts.py:64 msgid "script" msgstr "script" -#: extras/models/scripts.py:65 +#: netbox/extras/models/scripts.py:65 msgid "scripts" msgstr "scripts" -#: extras/models/scripts.py:111 +#: netbox/extras/models/scripts.py:111 msgid "script module" msgstr "scriptmodule" -#: extras/models/scripts.py:112 +#: netbox/extras/models/scripts.py:112 msgid "script modules" msgstr "scriptmodules" -#: extras/models/search.py:22 +#: netbox/extras/models/search.py:22 msgid "timestamp" msgstr "tijdstempel" -#: extras/models/search.py:37 +#: netbox/extras/models/search.py:37 msgid "field" msgstr "veld" -#: extras/models/search.py:45 +#: netbox/extras/models/search.py:45 msgid "value" msgstr "waarde" -#: extras/models/search.py:56 +#: netbox/extras/models/search.py:56 msgid "cached value" msgstr "waarde in de cache" -#: extras/models/search.py:57 +#: netbox/extras/models/search.py:57 msgid "cached values" msgstr "waarden in de cache" -#: extras/models/staging.py:44 +#: netbox/extras/models/staging.py:44 msgid "branch" msgstr "filiaal" -#: extras/models/staging.py:45 +#: netbox/extras/models/staging.py:45 msgid "branches" msgstr "takken" -#: extras/models/staging.py:97 +#: netbox/extras/models/staging.py:97 msgid "staged change" msgstr "gefaseerde verandering" -#: extras/models/staging.py:98 +#: netbox/extras/models/staging.py:98 msgid "staged changes" msgstr "gefaseerde wijzigingen" -#: extras/models/tags.py:40 +#: netbox/extras/models/tags.py:40 msgid "The object type(s) to which this tag can be applied." msgstr "Het (de) objecttype (s) waarop deze tag kan worden toegepast." -#: extras/models/tags.py:49 +#: netbox/extras/models/tags.py:49 msgid "tag" msgstr "tag" -#: extras/models/tags.py:50 +#: netbox/extras/models/tags.py:50 msgid "tags" msgstr "labels" -#: extras/models/tags.py:78 +#: netbox/extras/models/tags.py:78 msgid "tagged item" msgstr "item met tags" -#: extras/models/tags.py:79 +#: netbox/extras/models/tags.py:79 msgid "tagged items" msgstr "getagde artikelen" -#: extras/scripts.py:429 +#: netbox/extras/scripts.py:429 msgid "Script Data" msgstr "Scriptgegevens" -#: extras/scripts.py:433 +#: netbox/extras/scripts.py:433 msgid "Script Execution Parameters" msgstr "Parameters voor uitvoering van scripts" -#: extras/tables/columns.py:12 templates/htmx/notifications.html:18 +#: netbox/extras/tables/columns.py:12 +#: netbox/templates/htmx/notifications.html:18 msgid "Dismiss" msgstr "Ontslaan" -#: extras/tables/tables.py:62 extras/tables/tables.py:159 -#: extras/tables/tables.py:184 extras/tables/tables.py:250 -#: extras/tables/tables.py:276 extras/tables/tables.py:412 -#: extras/tables/tables.py:446 templates/extras/customfield.html:105 -#: templates/extras/eventrule.html:27 templates/users/objectpermission.html:64 -#: users/tables.py:80 +#: netbox/extras/tables/tables.py:62 netbox/extras/tables/tables.py:159 +#: netbox/extras/tables/tables.py:184 netbox/extras/tables/tables.py:250 +#: netbox/extras/tables/tables.py:276 netbox/extras/tables/tables.py:412 +#: netbox/extras/tables/tables.py:446 +#: netbox/templates/extras/customfield.html:105 +#: netbox/templates/extras/eventrule.html:27 +#: netbox/templates/users/objectpermission.html:64 netbox/users/tables.py:80 msgid "Object Types" msgstr "Objecttypen" -#: extras/tables/tables.py:69 +#: netbox/extras/tables/tables.py:69 msgid "Validate Uniqueness" msgstr "Uniciteit valideren" -#: extras/tables/tables.py:73 +#: netbox/extras/tables/tables.py:73 msgid "Visible" msgstr "Zichtbaar" -#: extras/tables/tables.py:76 +#: netbox/extras/tables/tables.py:76 msgid "Editable" msgstr "Bewerkbaar" -#: extras/tables/tables.py:82 +#: netbox/extras/tables/tables.py:82 msgid "Related Object Type" msgstr "Gerelateerd objecttype" -#: extras/tables/tables.py:86 templates/extras/customfield.html:51 +#: netbox/extras/tables/tables.py:86 +#: netbox/templates/extras/customfield.html:51 msgid "Choice Set" msgstr "Keuzeset" -#: extras/tables/tables.py:94 +#: netbox/extras/tables/tables.py:94 msgid "Is Cloneable" msgstr "Is kloonbaar" -#: extras/tables/tables.py:98 templates/extras/customfield.html:118 +#: netbox/extras/tables/tables.py:98 +#: netbox/templates/extras/customfield.html:118 msgid "Minimum Value" msgstr "Minimumwaarde" -#: extras/tables/tables.py:101 templates/extras/customfield.html:122 +#: netbox/extras/tables/tables.py:101 +#: netbox/templates/extras/customfield.html:122 msgid "Maximum Value" msgstr "Maximale waarde" -#: extras/tables/tables.py:104 +#: netbox/extras/tables/tables.py:104 msgid "Validation Regex" msgstr "Validatie Regex" -#: extras/tables/tables.py:137 +#: netbox/extras/tables/tables.py:137 msgid "Count" msgstr "Tellen" -#: extras/tables/tables.py:140 +#: netbox/extras/tables/tables.py:140 msgid "Order Alphabetically" msgstr "Alfabetisch ordenen" -#: extras/tables/tables.py:165 templates/extras/customlink.html:33 +#: netbox/extras/tables/tables.py:165 +#: netbox/templates/extras/customlink.html:33 msgid "New Window" msgstr "Nieuw venster" -#: extras/tables/tables.py:187 +#: netbox/extras/tables/tables.py:187 msgid "As Attachment" msgstr "Als bijlage" -#: extras/tables/tables.py:195 extras/tables/tables.py:487 -#: extras/tables/tables.py:522 templates/core/datafile.html:24 -#: templates/dcim/device/render_config.html:22 -#: templates/extras/configcontext.html:39 -#: templates/extras/configtemplate.html:31 -#: templates/extras/exporttemplate.html:45 -#: templates/generic/bulk_import.html:35 -#: templates/virtualization/virtualmachine/render_config.html:22 +#: netbox/extras/tables/tables.py: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/generic/bulk_import.html:35 +#: netbox/templates/virtualization/virtualmachine/render_config.html:22 msgid "Data File" msgstr "Gegevensbestand" -#: extras/tables/tables.py:200 extras/tables/tables.py:499 -#: extras/tables/tables.py:527 +#: netbox/extras/tables/tables.py:200 netbox/extras/tables/tables.py:499 +#: netbox/extras/tables/tables.py:527 msgid "Synced" msgstr "Gesynchroniseerd" -#: extras/tables/tables.py:227 +#: netbox/extras/tables/tables.py:227 msgid "Image" msgstr "Afbeelding" -#: extras/tables/tables.py:232 +#: netbox/extras/tables/tables.py:232 msgid "Size (Bytes)" msgstr "Grootte (bytes)" -#: extras/tables/tables.py:339 +#: netbox/extras/tables/tables.py:339 msgid "Read" msgstr "Lees" -#: extras/tables/tables.py:382 +#: netbox/extras/tables/tables.py:382 msgid "SSL Validation" msgstr "SSL-validatie" -#: extras/tables/tables.py:418 templates/extras/eventrule.html:37 +#: netbox/extras/tables/tables.py:418 +#: netbox/templates/extras/eventrule.html:37 msgid "Event Types" msgstr "Soorten evenementen" -#: extras/tables/tables.py:535 netbox/navigation/menu.py:77 -#: templates/dcim/devicerole.html:8 +#: netbox/extras/tables/tables.py:535 netbox/netbox/navigation/menu.py:77 +#: netbox/templates/dcim/devicerole.html:8 msgid "Device Roles" msgstr "Apparaat rollen" -#: extras/tables/tables.py:587 +#: netbox/extras/tables/tables.py:587 msgid "Comments (Short)" msgstr "Opmerkingen (kort)" -#: extras/tables/tables.py:606 extras/tables/tables.py:640 +#: netbox/extras/tables/tables.py:606 netbox/extras/tables/tables.py:640 msgid "Line" msgstr "Lijn" -#: extras/tables/tables.py:613 extras/tables/tables.py:650 +#: netbox/extras/tables/tables.py:613 netbox/extras/tables/tables.py:650 msgid "Level" msgstr "Niveau" -#: extras/tables/tables.py:619 extras/tables/tables.py:659 +#: netbox/extras/tables/tables.py:619 netbox/extras/tables/tables.py:659 msgid "Message" msgstr "Bericht" -#: extras/tables/tables.py:643 +#: netbox/extras/tables/tables.py:643 msgid "Method" msgstr "Methode" -#: extras/validators.py:15 +#: netbox/extras/validators.py:15 #, python-format msgid "Ensure this value is equal to %(limit_value)s." msgstr "Zorg ervoor dat deze waarde gelijk is aan %(limit_value)s." -#: extras/validators.py:26 +#: netbox/extras/validators.py:26 #, python-format msgid "Ensure this value does not equal %(limit_value)s." msgstr "Zorg ervoor dat deze waarde niet gelijk is %(limit_value)s." -#: extras/validators.py:37 +#: netbox/extras/validators.py:37 msgid "This field must be empty." msgstr "Dit veld moet leeg zijn." -#: extras/validators.py:52 +#: netbox/extras/validators.py:52 msgid "This field must not be empty." msgstr "Dit veld mag niet leeg zijn." -#: extras/validators.py:94 +#: netbox/extras/validators.py:94 msgid "Validation rules must be passed as a dictionary" msgstr "Validatieregels moeten als woordenboek worden doorgegeven" -#: extras/validators.py:119 +#: netbox/extras/validators.py:119 #, python-brace-format msgid "Custom validation failed for {attribute}: {exception}" msgstr "Aangepaste validatie is mislukt voor {attribute}: {exception}" -#: extras/validators.py:133 +#: netbox/extras/validators.py:133 #, python-brace-format msgid "Invalid attribute \"{name}\" for request" msgstr "Ongeldig kenmerk”{name}„op aanvraag" -#: extras/validators.py:150 +#: netbox/extras/validators.py:150 #, python-brace-format msgid "Invalid attribute \"{name}\" for {model}" msgstr "Ongeldig kenmerk”{name}„voor {model}" -#: extras/views.py:960 +#: netbox/extras/views.py:960 msgid "Your dashboard has been reset." msgstr "Je dashboard is opnieuw ingesteld." -#: extras/views.py:1006 +#: netbox/extras/views.py:1006 msgid "Added widget: " msgstr "Widget toegevoegd: " -#: extras/views.py:1047 +#: netbox/extras/views.py:1047 msgid "Updated widget: " msgstr "Bijgewerkte widget: " -#: extras/views.py:1083 +#: netbox/extras/views.py:1083 msgid "Deleted widget: " msgstr "Widget verwijderd: " -#: extras/views.py:1085 +#: netbox/extras/views.py:1085 msgid "Error deleting widget: " msgstr "Fout bij het verwijderen van de widget: " -#: extras/views.py:1172 +#: netbox/extras/views.py:1175 msgid "Unable to run script: RQ worker process not running." msgstr "Kan script niet uitvoeren: het RQ-werkproces wordt niet uitgevoerd." -#: ipam/api/field_serializers.py:17 +#: netbox/ipam/api/field_serializers.py:17 msgid "Enter a valid IPv4 or IPv6 address with optional mask." msgstr "Voer een geldig IPv4- of IPv6-adres in met optioneel masker." -#: ipam/api/field_serializers.py:24 +#: netbox/ipam/api/field_serializers.py:24 #, python-brace-format msgid "Invalid IP address format: {data}" msgstr "Ongeldig formaat van het IP-adres: {data}" -#: ipam/api/field_serializers.py:37 +#: netbox/ipam/api/field_serializers.py:37 msgid "Enter a valid IPv4 or IPv6 prefix and mask in CIDR notation." msgstr "" "Voer een geldig IPv4- of IPv6-voorvoegsel en masker in de CIDR-notatie in." -#: ipam/api/field_serializers.py:44 +#: netbox/ipam/api/field_serializers.py:44 #, python-brace-format msgid "Invalid IP prefix format: {data}" msgstr "Ongeldig formaat voor IP-prefix: {data}" -#: ipam/api/views.py:358 +#: netbox/ipam/api/views.py:358 msgid "" "Insufficient space is available to accommodate the requested prefix size(s)" msgstr "" "Er is onvoldoende ruimte beschikbaar voor de gevraagde prefixgrootte (s)" -#: ipam/choices.py:30 +#: netbox/ipam/choices.py:30 msgid "Container" msgstr "Container" -#: ipam/choices.py:72 +#: netbox/ipam/choices.py:72 msgid "DHCP" msgstr "DHCP" -#: ipam/choices.py:73 +#: netbox/ipam/choices.py:73 msgid "SLAAC" msgstr "SLAAC" -#: ipam/choices.py:89 +#: netbox/ipam/choices.py:89 msgid "Loopback" msgstr "Loopback" -#: ipam/choices.py:91 +#: netbox/ipam/choices.py:91 msgid "Anycast" msgstr "Anycast" -#: ipam/choices.py:115 +#: netbox/ipam/choices.py:115 msgid "Standard" msgstr "Standaard" -#: ipam/choices.py:120 +#: netbox/ipam/choices.py:120 msgid "CheckPoint" msgstr "CheckPoint" -#: ipam/choices.py:123 +#: netbox/ipam/choices.py:123 msgid "Cisco" msgstr "Cisco" -#: ipam/choices.py:137 +#: netbox/ipam/choices.py:137 msgid "Plaintext" msgstr "Platte tekst" -#: ipam/fields.py:36 +#: netbox/ipam/fields.py:36 #, python-brace-format msgid "Invalid IP address format: {address}" msgstr "Ongeldig formaat van het IP-adres: {address}" -#: ipam/filtersets.py:48 vpn/filtersets.py:304 +#: netbox/ipam/filtersets.py:48 netbox/vpn/filtersets.py:304 msgid "Import target" msgstr "Doel importeren" -#: ipam/filtersets.py:54 vpn/filtersets.py:310 +#: netbox/ipam/filtersets.py:54 netbox/vpn/filtersets.py:310 msgid "Import target (name)" msgstr "Importdoel (naam)" -#: ipam/filtersets.py:59 vpn/filtersets.py:315 +#: netbox/ipam/filtersets.py:59 netbox/vpn/filtersets.py:315 msgid "Export target" msgstr "Doel exporteren" -#: ipam/filtersets.py:65 vpn/filtersets.py:321 +#: netbox/ipam/filtersets.py:65 netbox/vpn/filtersets.py:321 msgid "Export target (name)" msgstr "Exportdoel (naam)" -#: ipam/filtersets.py:86 +#: netbox/ipam/filtersets.py:86 msgid "Importing VRF" msgstr "VRF importeren" -#: ipam/filtersets.py:92 +#: netbox/ipam/filtersets.py:92 msgid "Import VRF (RD)" msgstr "VRF (RD) importeren" -#: ipam/filtersets.py:97 +#: netbox/ipam/filtersets.py:97 msgid "Exporting VRF" msgstr "VRF exporteren" -#: ipam/filtersets.py:103 +#: netbox/ipam/filtersets.py:103 msgid "Export VRF (RD)" msgstr "VRF (RD) exporteren" -#: ipam/filtersets.py:108 +#: netbox/ipam/filtersets.py:108 msgid "Importing L2VPN" msgstr "L2VPN importeren" -#: ipam/filtersets.py:114 +#: netbox/ipam/filtersets.py:114 msgid "Importing L2VPN (identifier)" msgstr "L2VPN importeren (identifier)" -#: ipam/filtersets.py:119 +#: netbox/ipam/filtersets.py:119 msgid "Exporting L2VPN" msgstr "L2VPN exporteren" -#: ipam/filtersets.py:125 +#: netbox/ipam/filtersets.py:125 msgid "Exporting L2VPN (identifier)" msgstr "L2VPN exporteren (identifier)" -#: ipam/filtersets.py:155 ipam/filtersets.py:281 ipam/forms/model_forms.py:229 -#: ipam/tables/ip.py:212 templates/ipam/prefix.html:12 +#: netbox/ipam/filtersets.py:155 netbox/ipam/filtersets.py:281 +#: netbox/ipam/forms/model_forms.py:229 netbox/ipam/tables/ip.py:212 +#: netbox/templates/ipam/prefix.html:12 msgid "Prefix" msgstr "Voorvoegsel" -#: ipam/filtersets.py:159 ipam/filtersets.py:198 ipam/filtersets.py:221 +#: netbox/ipam/filtersets.py:159 netbox/ipam/filtersets.py:198 +#: netbox/ipam/filtersets.py:221 msgid "RIR (ID)" msgstr "RIR (ID)" -#: ipam/filtersets.py:165 ipam/filtersets.py:204 ipam/filtersets.py:227 +#: netbox/ipam/filtersets.py:165 netbox/ipam/filtersets.py:204 +#: netbox/ipam/filtersets.py:227 msgid "RIR (slug)" msgstr "RIR (slak)" -#: ipam/filtersets.py:285 +#: netbox/ipam/filtersets.py:285 msgid "Within prefix" msgstr "Binnen het voorvoegsel" -#: ipam/filtersets.py:289 +#: netbox/ipam/filtersets.py:289 msgid "Within and including prefix" msgstr "Binnen en inclusief voorvoegsel" -#: ipam/filtersets.py:293 +#: netbox/ipam/filtersets.py:293 msgid "Prefixes which contain this prefix or IP" msgstr "Prefixen die dit voorvoegsel of IP-adres bevatten" -#: ipam/filtersets.py:304 ipam/filtersets.py:572 ipam/forms/bulk_edit.py:343 -#: ipam/forms/filtersets.py:196 ipam/forms/filtersets.py:331 +#: netbox/ipam/filtersets.py:304 netbox/ipam/filtersets.py:572 +#: netbox/ipam/forms/bulk_edit.py:343 netbox/ipam/forms/filtersets.py:196 +#: netbox/ipam/forms/filtersets.py:331 msgid "Mask length" msgstr "Lengte van het masker" -#: ipam/filtersets.py:373 vpn/filtersets.py:427 +#: netbox/ipam/filtersets.py:373 netbox/vpn/filtersets.py:427 msgid "VLAN (ID)" msgstr "VLAN (ID)" -#: ipam/filtersets.py:377 vpn/filtersets.py:422 +#: netbox/ipam/filtersets.py:377 netbox/vpn/filtersets.py:422 msgid "VLAN number (1-4094)" msgstr "VLAN-nummer (1-4094)" -#: ipam/filtersets.py:471 ipam/filtersets.py:475 ipam/filtersets.py:567 -#: ipam/forms/model_forms.py:463 templates/tenancy/contact.html:53 -#: tenancy/forms/bulk_edit.py:113 +#: netbox/ipam/filtersets.py:471 netbox/ipam/filtersets.py:475 +#: netbox/ipam/filtersets.py:567 netbox/ipam/forms/model_forms.py:496 +#: netbox/templates/tenancy/contact.html:53 +#: netbox/tenancy/forms/bulk_edit.py:113 msgid "Address" msgstr "Adres" -#: ipam/filtersets.py:479 +#: netbox/ipam/filtersets.py:479 msgid "Ranges which contain this prefix or IP" msgstr "Bereiken die dit voorvoegsel of IP-adres bevatten" -#: ipam/filtersets.py:507 ipam/filtersets.py:563 +#: netbox/ipam/filtersets.py:507 netbox/ipam/filtersets.py:563 msgid "Parent prefix" msgstr "Oudervoorvoegsel" -#: ipam/filtersets.py:616 ipam/filtersets.py:856 ipam/filtersets.py:1131 -#: vpn/filtersets.py:385 +#: netbox/ipam/filtersets.py:616 netbox/ipam/filtersets.py:856 +#: netbox/ipam/filtersets.py:1131 netbox/vpn/filtersets.py:385 msgid "Virtual machine (name)" msgstr "Virtuele machine (naam)" -#: ipam/filtersets.py:621 ipam/filtersets.py:861 ipam/filtersets.py:1125 -#: virtualization/filtersets.py:282 virtualization/filtersets.py:321 -#: vpn/filtersets.py:390 +#: netbox/ipam/filtersets.py:621 netbox/ipam/filtersets.py:861 +#: netbox/ipam/filtersets.py:1125 netbox/virtualization/filtersets.py:282 +#: netbox/virtualization/filtersets.py:321 netbox/vpn/filtersets.py:390 msgid "Virtual machine (ID)" msgstr "Virtuele machine (ID)" -#: ipam/filtersets.py:627 vpn/filtersets.py:97 vpn/filtersets.py:396 +#: netbox/ipam/filtersets.py:627 netbox/vpn/filtersets.py:97 +#: netbox/vpn/filtersets.py:396 msgid "Interface (name)" msgstr "Interface (naam)" -#: ipam/filtersets.py:638 vpn/filtersets.py:108 vpn/filtersets.py:407 +#: netbox/ipam/filtersets.py:638 netbox/vpn/filtersets.py:108 +#: netbox/vpn/filtersets.py:407 msgid "VM interface (name)" msgstr "VM-interface (naam)" -#: ipam/filtersets.py:643 vpn/filtersets.py:113 +#: netbox/ipam/filtersets.py:643 netbox/vpn/filtersets.py:113 msgid "VM interface (ID)" msgstr "VM-interface (ID)" -#: ipam/filtersets.py:648 +#: netbox/ipam/filtersets.py:648 msgid "FHRP group (ID)" msgstr "FHRP-groep (ID)" -#: ipam/filtersets.py:652 +#: netbox/ipam/filtersets.py:652 msgid "Is assigned to an interface" msgstr "Is toegewezen aan een interface" -#: ipam/filtersets.py:656 +#: netbox/ipam/filtersets.py:656 msgid "Is assigned" msgstr "Is toegewezen" -#: ipam/filtersets.py:668 +#: netbox/ipam/filtersets.py:668 msgid "Service (ID)" msgstr "Service (ID)" -#: ipam/filtersets.py:673 +#: netbox/ipam/filtersets.py:673 msgid "NAT inside IP address (ID)" msgstr "NAT binnen IP-adres (ID)" -#: ipam/filtersets.py:1041 ipam/forms/bulk_import.py:322 +#: netbox/ipam/filtersets.py:1041 netbox/ipam/forms/bulk_import.py:322 msgid "Assigned interface" msgstr "Toegewezen interface" -#: ipam/filtersets.py:1046 +#: netbox/ipam/filtersets.py:1046 msgid "Assigned VM interface" msgstr "Toegewezen VM-interface" -#: ipam/filtersets.py:1136 +#: netbox/ipam/filtersets.py:1136 msgid "IP address (ID)" msgstr "IP-adres (ID)" -#: ipam/filtersets.py:1142 ipam/models/ip.py:788 +#: netbox/ipam/filtersets.py:1142 netbox/ipam/models/ip.py:788 msgid "IP address" msgstr "IP-adres" -#: ipam/filtersets.py:1167 +#: netbox/ipam/filtersets.py:1167 msgid "Primary IPv4 (ID)" msgstr "Primaire IPv4 (ID)" -#: ipam/filtersets.py:1172 +#: netbox/ipam/filtersets.py:1172 msgid "Primary IPv6 (ID)" msgstr "Primaire IPv6 (ID)" -#: ipam/formfields.py:14 +#: netbox/ipam/formfields.py:14 msgid "Enter a valid IPv4 or IPv6 address (without a mask)." msgstr "Voer een geldig IPv4- of IPv6-adres in (zonder masker)." -#: ipam/formfields.py:32 +#: netbox/ipam/formfields.py:32 #, python-brace-format msgid "Invalid IPv4/IPv6 address format: {address}" msgstr "Ongeldig IPv4/IPv6-adresformaat: {address}" -#: ipam/formfields.py:37 +#: netbox/ipam/formfields.py:37 msgid "This field requires an IP address without a mask." msgstr "Dit veld vereist een IP-adres zonder masker." -#: ipam/formfields.py:39 ipam/formfields.py:61 +#: netbox/ipam/formfields.py:39 netbox/ipam/formfields.py:61 msgid "Please specify a valid IPv4 or IPv6 address." msgstr "Geef een geldig IPv4- of IPv6-adres op." -#: ipam/formfields.py:44 +#: netbox/ipam/formfields.py:44 msgid "Enter a valid IPv4 or IPv6 address (with CIDR mask)." msgstr "Voer een geldig IPv4- of IPv6-adres in (met CIDR-masker)." -#: ipam/formfields.py:56 +#: netbox/ipam/formfields.py:56 msgid "CIDR mask (e.g. /24) is required." msgstr "Een CIDR-masker (bijv /24) is vereist." -#: ipam/forms/bulk_create.py:13 +#: netbox/ipam/forms/bulk_create.py:13 msgid "Address pattern" msgstr "Adrespatroon" -#: ipam/forms/bulk_edit.py:50 +#: netbox/ipam/forms/bulk_edit.py:50 msgid "Enforce unique space" msgstr "Zorg voor unieke ruimte" -#: ipam/forms/bulk_edit.py:88 +#: netbox/ipam/forms/bulk_edit.py:88 msgid "Is private" msgstr "Is privé" -#: ipam/forms/bulk_edit.py:109 ipam/forms/bulk_edit.py:138 -#: ipam/forms/bulk_edit.py:163 ipam/forms/bulk_import.py:89 -#: ipam/forms/bulk_import.py:109 ipam/forms/bulk_import.py:129 -#: ipam/forms/filtersets.py:110 ipam/forms/filtersets.py:125 -#: ipam/forms/filtersets.py:148 ipam/forms/model_forms.py:96 -#: ipam/forms/model_forms.py:109 ipam/forms/model_forms.py:131 -#: ipam/forms/model_forms.py:149 ipam/models/asns.py:31 -#: ipam/models/asns.py:103 ipam/models/ip.py:71 ipam/models/ip.py:90 -#: ipam/tables/asn.py:20 ipam/tables/asn.py:45 -#: templates/ipam/aggregate.html:18 templates/ipam/asn.html:27 -#: templates/ipam/asnrange.html:19 templates/ipam/rir.html:19 +#: netbox/ipam/forms/bulk_edit.py: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/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" -#: ipam/forms/bulk_edit.py:171 +#: netbox/ipam/forms/bulk_edit.py:171 msgid "Date added" msgstr "Datum toegevoegd" -#: ipam/forms/bulk_edit.py:229 ipam/forms/model_forms.py:586 -#: ipam/forms/model_forms.py:633 ipam/tables/ip.py:251 -#: templates/ipam/vlan_edit.html:37 templates/ipam/vlangroup.html:27 +#: 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/templates/ipam/vlangroup.html:27 msgid "VLAN Group" msgstr "VLAN-groep" -#: ipam/forms/bulk_edit.py:234 ipam/forms/bulk_import.py:185 -#: ipam/forms/filtersets.py:256 ipam/forms/model_forms.py:218 -#: ipam/models/vlans.py:234 ipam/tables/ip.py:255 -#: templates/ipam/prefix.html:60 templates/ipam/vlan.html:12 -#: templates/ipam/vlan/base.html:6 templates/ipam/vlan_edit.html:10 -#: templates/wireless/wirelesslan.html:30 vpn/forms/bulk_import.py:304 -#: vpn/forms/filtersets.py:284 vpn/forms/model_forms.py:433 -#: vpn/forms/model_forms.py:452 wireless/forms/bulk_edit.py:55 -#: wireless/forms/bulk_import.py:48 wireless/forms/model_forms.py:48 -#: wireless/models.py:102 +#: 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/templates/ipam/vlan/base.html:6 +#: netbox/templates/ipam/vlan_edit.html:10 +#: netbox/templates/wireless/wirelesslan.html:30 +#: netbox/vpn/forms/bulk_import.py:304 netbox/vpn/forms/filtersets.py:284 +#: netbox/vpn/forms/model_forms.py:433 netbox/vpn/forms/model_forms.py:452 +#: netbox/wireless/forms/bulk_edit.py:55 +#: netbox/wireless/forms/bulk_import.py:48 +#: netbox/wireless/forms/model_forms.py:48 netbox/wireless/models.py:102 msgid "VLAN" msgstr "VLAN" -#: ipam/forms/bulk_edit.py:245 +#: netbox/ipam/forms/bulk_edit.py:245 msgid "Prefix length" msgstr "Lengte van het voorvoegsel" -#: ipam/forms/bulk_edit.py:268 ipam/forms/filtersets.py:241 -#: templates/ipam/prefix.html:85 +#: netbox/ipam/forms/bulk_edit.py:268 netbox/ipam/forms/filtersets.py:241 +#: netbox/templates/ipam/prefix.html:85 msgid "Is a pool" -msgstr "Is een zwembad" +msgstr "Is een pool" -#: ipam/forms/bulk_edit.py:273 ipam/forms/bulk_edit.py:318 -#: ipam/forms/filtersets.py:248 ipam/forms/filtersets.py:293 -#: ipam/models/ip.py:272 ipam/models/ip.py:539 +#: netbox/ipam/forms/bulk_edit.py: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 msgid "Treat as fully utilized" msgstr "Behandel als volledig gebruikt" -#: ipam/forms/bulk_edit.py:287 ipam/forms/filtersets.py:171 +#: netbox/ipam/forms/bulk_edit.py:287 netbox/ipam/forms/filtersets.py:171 msgid "VLAN Assignment" msgstr "VLAN-toewijzing" -#: ipam/forms/bulk_edit.py:366 ipam/models/ip.py:772 +#: netbox/ipam/forms/bulk_edit.py:366 netbox/ipam/models/ip.py:772 msgid "DNS name" msgstr "DNS-naam" -#: ipam/forms/bulk_edit.py:387 ipam/forms/bulk_edit.py:534 -#: ipam/forms/bulk_import.py:394 ipam/forms/bulk_import.py:469 -#: ipam/forms/bulk_import.py:495 ipam/forms/filtersets.py:390 -#: ipam/forms/filtersets.py:530 templates/ipam/fhrpgroup.html:22 -#: templates/ipam/inc/panels/fhrp_groups.html:24 -#: templates/ipam/service.html:32 templates/ipam/servicetemplate.html:19 +#: netbox/ipam/forms/bulk_edit.py: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/templates/ipam/inc/panels/fhrp_groups.html:24 +#: netbox/templates/ipam/service.html:32 +#: netbox/templates/ipam/servicetemplate.html:19 msgid "Protocol" msgstr "Protocol" -#: ipam/forms/bulk_edit.py:394 ipam/forms/filtersets.py:397 -#: ipam/tables/fhrp.py:22 templates/ipam/fhrpgroup.html:26 +#: netbox/ipam/forms/bulk_edit.py:394 netbox/ipam/forms/filtersets.py:397 +#: netbox/ipam/tables/fhrp.py:22 netbox/templates/ipam/fhrpgroup.html:26 msgid "Group ID" msgstr "Groeps-ID" -#: ipam/forms/bulk_edit.py:399 ipam/forms/filtersets.py:402 -#: wireless/forms/bulk_edit.py:68 wireless/forms/bulk_edit.py:115 -#: wireless/forms/bulk_import.py:62 wireless/forms/bulk_import.py:65 -#: wireless/forms/bulk_import.py:104 wireless/forms/bulk_import.py:107 -#: wireless/forms/filtersets.py:54 wireless/forms/filtersets.py:88 +#: netbox/ipam/forms/bulk_edit.py: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 msgid "Authentication type" msgstr "Authenticatietype" -#: ipam/forms/bulk_edit.py:404 ipam/forms/filtersets.py:406 +#: netbox/ipam/forms/bulk_edit.py:404 netbox/ipam/forms/filtersets.py:406 msgid "Authentication key" msgstr "Verificatiesleutel" -#: ipam/forms/bulk_edit.py:421 ipam/forms/filtersets.py:383 -#: ipam/forms/model_forms.py:474 netbox/navigation/menu.py:386 -#: templates/ipam/fhrpgroup.html:49 -#: templates/wireless/inc/authentication_attrs.html:5 -#: wireless/forms/bulk_edit.py:91 wireless/forms/bulk_edit.py:149 -#: wireless/forms/filtersets.py:36 wireless/forms/filtersets.py:76 -#: wireless/forms/model_forms.py:55 wireless/forms/model_forms.py:171 +#: 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/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 msgid "Authentication" msgstr "Authentificatie" -#: ipam/forms/bulk_edit.py:436 ipam/forms/model_forms.py:575 +#: netbox/ipam/forms/bulk_edit.py:436 netbox/ipam/forms/model_forms.py:608 msgid "Scope type" msgstr "Soort bereik" -#: ipam/forms/bulk_edit.py:439 ipam/forms/bulk_edit.py:453 -#: ipam/forms/model_forms.py:578 ipam/forms/model_forms.py:588 -#: ipam/tables/vlans.py:71 templates/ipam/vlangroup.html:38 +#: 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" -#: ipam/forms/bulk_edit.py:446 ipam/models/vlans.py:60 +#: netbox/ipam/forms/bulk_edit.py:446 netbox/ipam/models/vlans.py:60 msgid "VLAN ID ranges" msgstr "VLAN-ID-bereiken" -#: ipam/forms/bulk_edit.py:525 +#: netbox/ipam/forms/bulk_edit.py:525 msgid "Site & Group" msgstr "Site en groep" -#: ipam/forms/bulk_edit.py:539 ipam/forms/model_forms.py:659 -#: ipam/forms/model_forms.py:691 ipam/tables/services.py:19 -#: ipam/tables/services.py:49 templates/ipam/service.html:36 -#: templates/ipam/servicetemplate.html:23 +#: netbox/ipam/forms/bulk_edit.py:539 netbox/ipam/forms/model_forms.py:692 +#: netbox/ipam/forms/model_forms.py:724 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" -#: ipam/forms/bulk_import.py:48 +#: netbox/ipam/forms/bulk_import.py:48 msgid "Import route targets" msgstr "Routedoelen importeren" -#: ipam/forms/bulk_import.py:54 +#: netbox/ipam/forms/bulk_import.py:54 msgid "Export route targets" msgstr "Routedoelen exporteren" -#: ipam/forms/bulk_import.py:92 ipam/forms/bulk_import.py:112 -#: ipam/forms/bulk_import.py:132 +#: netbox/ipam/forms/bulk_import.py:92 netbox/ipam/forms/bulk_import.py:112 +#: netbox/ipam/forms/bulk_import.py:132 msgid "Assigned RIR" msgstr "Toegewezen RIR" -#: ipam/forms/bulk_import.py:182 +#: netbox/ipam/forms/bulk_import.py:182 msgid "VLAN's group (if any)" msgstr "VLAN-groep (indien aanwezig)" -#: ipam/forms/bulk_import.py:308 +#: netbox/ipam/forms/bulk_import.py:308 msgid "Parent device of assigned interface (if any)" msgstr "Ouderapparaat met toegewezen interface (indien aanwezig)" -#: ipam/forms/bulk_import.py:311 ipam/forms/bulk_import.py:488 -#: ipam/forms/model_forms.py:685 virtualization/filtersets.py:288 -#: virtualization/filtersets.py:327 virtualization/forms/bulk_edit.py:200 -#: virtualization/forms/bulk_edit.py:326 -#: virtualization/forms/bulk_import.py:146 -#: virtualization/forms/bulk_import.py:207 -#: virtualization/forms/filtersets.py:212 -#: virtualization/forms/filtersets.py:248 -#: virtualization/forms/model_forms.py:288 vpn/forms/bulk_import.py:93 -#: vpn/forms/bulk_import.py:290 +#: 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" -#: ipam/forms/bulk_import.py:315 +#: netbox/ipam/forms/bulk_import.py:315 msgid "Parent VM of assigned interface (if any)" msgstr "Bovenliggende VM van de toegewezen interface (indien aanwezig)" -#: ipam/forms/bulk_import.py:325 +#: netbox/ipam/forms/bulk_import.py:325 msgid "Is primary" msgstr "Is primair" -#: ipam/forms/bulk_import.py:326 +#: 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" -#: ipam/forms/bulk_import.py:365 +#: netbox/ipam/forms/bulk_import.py:330 +msgid "Is out-of-band" +msgstr "" + +#: netbox/ipam/forms/bulk_import.py:331 +msgid "Designate this as the out-of-band IP address for the assigned device" +msgstr "" + +#: netbox/ipam/forms/bulk_import.py:371 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" -#: ipam/forms/bulk_import.py:369 +#: netbox/ipam/forms/bulk_import.py:375 +msgid "No device specified; cannot set as out-of-band IP" +msgstr "" + +#: netbox/ipam/forms/bulk_import.py:379 +msgid "Cannot set out-of-band IP for virtual machines" +msgstr "" + +#: netbox/ipam/forms/bulk_import.py:383 msgid "No interface specified; cannot set as primary IP" msgstr "" "Geen interface gespecificeerd; kan niet worden ingesteld als primair IP-" "adres" -#: ipam/forms/bulk_import.py:398 +#: netbox/ipam/forms/bulk_import.py:387 +msgid "No interface specified; cannot set as out-of-band IP" +msgstr "" + +#: netbox/ipam/forms/bulk_import.py:422 msgid "Auth type" msgstr "Authenticatietype" -#: ipam/forms/bulk_import.py:413 +#: netbox/ipam/forms/bulk_import.py:437 msgid "Scope type (app & model)" msgstr "Soort bereik (app en model)" -#: ipam/forms/bulk_import.py:440 +#: netbox/ipam/forms/bulk_import.py:464 msgid "Assigned VLAN group" msgstr "Toegewezen VLAN-groep" -#: ipam/forms/bulk_import.py:471 ipam/forms/bulk_import.py:497 +#: netbox/ipam/forms/bulk_import.py:495 netbox/ipam/forms/bulk_import.py:521 msgid "IP protocol" msgstr "IP-protocol" -#: ipam/forms/bulk_import.py:485 +#: netbox/ipam/forms/bulk_import.py:509 msgid "Required if not assigned to a VM" msgstr "Vereist indien niet toegewezen aan een VM" -#: ipam/forms/bulk_import.py:492 +#: netbox/ipam/forms/bulk_import.py:516 msgid "Required if not assigned to a device" msgstr "Vereist indien niet toegewezen aan een apparaat" -#: ipam/forms/bulk_import.py:517 +#: netbox/ipam/forms/bulk_import.py:541 #, python-brace-format msgid "{ip} is not assigned to this device/VM." msgstr "{ip} is niet toegewezen aan dit apparaat/VM." -#: ipam/forms/filtersets.py:47 ipam/forms/model_forms.py:63 -#: netbox/navigation/menu.py:189 vpn/forms/model_forms.py:410 +#: 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 msgid "Route Targets" msgstr "Routedoelen" -#: ipam/forms/filtersets.py:53 ipam/forms/model_forms.py:50 -#: vpn/forms/filtersets.py:224 vpn/forms/model_forms.py:397 +#: 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 msgid "Import targets" msgstr "Doelen importeren" -#: ipam/forms/filtersets.py:58 ipam/forms/model_forms.py:55 -#: vpn/forms/filtersets.py:229 vpn/forms/model_forms.py:402 +#: 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 msgid "Export targets" msgstr "Doelen exporteren" -#: ipam/forms/filtersets.py:73 +#: netbox/ipam/forms/filtersets.py:73 msgid "Imported by VRF" msgstr "Geïmporteerd door VRF" -#: ipam/forms/filtersets.py:78 +#: netbox/ipam/forms/filtersets.py:78 msgid "Exported by VRF" msgstr "Geëxporteerd door VRF" -#: ipam/forms/filtersets.py:87 ipam/tables/ip.py:89 templates/ipam/rir.html:30 +#: netbox/ipam/forms/filtersets.py:87 netbox/ipam/tables/ip.py:89 +#: netbox/templates/ipam/rir.html:30 msgid "Private" msgstr "Privé" -#: ipam/forms/filtersets.py:105 ipam/forms/filtersets.py:191 -#: ipam/forms/filtersets.py:272 ipam/forms/filtersets.py:326 +#: netbox/ipam/forms/filtersets.py:105 netbox/ipam/forms/filtersets.py:191 +#: netbox/ipam/forms/filtersets.py:272 netbox/ipam/forms/filtersets.py:326 msgid "Address family" msgstr "Adres familie" -#: ipam/forms/filtersets.py:119 templates/ipam/asnrange.html:25 +#: netbox/ipam/forms/filtersets.py:119 netbox/templates/ipam/asnrange.html:25 msgid "Range" msgstr "Assortiment" -#: ipam/forms/filtersets.py:128 +#: netbox/ipam/forms/filtersets.py:128 msgid "Start" msgstr "Begin" -#: ipam/forms/filtersets.py:132 +#: netbox/ipam/forms/filtersets.py:132 msgid "End" msgstr "Einde" -#: ipam/forms/filtersets.py:186 +#: netbox/ipam/forms/filtersets.py:186 msgid "Search within" msgstr "Zoek binnen" -#: ipam/forms/filtersets.py:207 ipam/forms/filtersets.py:342 +#: netbox/ipam/forms/filtersets.py:207 netbox/ipam/forms/filtersets.py:342 msgid "Present in VRF" msgstr "Aanwezig in VRF" -#: ipam/forms/filtersets.py:311 +#: netbox/ipam/forms/filtersets.py:311 msgid "Device/VM" msgstr "Apparaat/VM" -#: ipam/forms/filtersets.py:321 +#: netbox/ipam/forms/filtersets.py:321 msgid "Parent Prefix" msgstr "Voorvoegsel voor ouders" -#: ipam/forms/filtersets.py:347 +#: netbox/ipam/forms/filtersets.py:347 msgid "Assigned Device" msgstr "Toegewezen apparaat" -#: ipam/forms/filtersets.py:352 +#: netbox/ipam/forms/filtersets.py:352 msgid "Assigned VM" msgstr "Toegewezen VM" -#: ipam/forms/filtersets.py:366 +#: netbox/ipam/forms/filtersets.py:366 msgid "Assigned to an interface" msgstr "Toegewezen aan een interface" -#: ipam/forms/filtersets.py:373 templates/ipam/ipaddress.html:51 +#: netbox/ipam/forms/filtersets.py:373 netbox/templates/ipam/ipaddress.html:51 msgid "DNS Name" msgstr "DNS-naam" -#: ipam/forms/filtersets.py:416 ipam/models/vlans.py:235 ipam/tables/ip.py:176 -#: ipam/tables/vlans.py:82 ipam/views.py:971 netbox/navigation/menu.py:193 -#: netbox/navigation/menu.py:195 +#: 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 msgid "VLANs" msgstr "VLAN's" -#: ipam/forms/filtersets.py:457 +#: netbox/ipam/forms/filtersets.py:457 msgid "Contains VLAN ID" msgstr "Bevat VLAN-ID" -#: ipam/forms/filtersets.py:513 ipam/models/vlans.py:176 -#: templates/ipam/vlan.html:31 +#: netbox/ipam/forms/filtersets.py:513 netbox/ipam/models/vlans.py:192 +#: netbox/templates/ipam/vlan.html:31 msgid "VLAN ID" msgstr "VLAN-ID" -#: ipam/forms/filtersets.py:556 ipam/forms/model_forms.py:320 -#: ipam/forms/model_forms.py:713 ipam/forms/model_forms.py:739 -#: ipam/tables/vlans.py:195 templates/virtualization/virtualdisk.html:21 -#: templates/virtualization/virtualmachine.html:12 -#: templates/virtualization/vminterface.html:21 -#: templates/vpn/tunneltermination.html:25 -#: virtualization/forms/filtersets.py:197 -#: virtualization/forms/filtersets.py:242 -#: virtualization/forms/model_forms.py:220 -#: virtualization/tables/virtualmachines.py:135 -#: virtualization/tables/virtualmachines.py:190 vpn/choices.py:45 -#: vpn/forms/filtersets.py:293 vpn/forms/model_forms.py:160 -#: vpn/forms/model_forms.py:171 vpn/forms/model_forms.py:273 -#: vpn/forms/model_forms.py:454 +#: netbox/ipam/forms/filtersets.py: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" -#: ipam/forms/model_forms.py:80 templates/ipam/routetarget.html:10 +#: netbox/ipam/forms/model_forms.py:80 +#: netbox/templates/ipam/routetarget.html:10 msgid "Route Target" msgstr "Doel van de route" -#: ipam/forms/model_forms.py:114 ipam/tables/ip.py:117 -#: templates/ipam/aggregate.html:11 templates/ipam/prefix.html:38 +#: netbox/ipam/forms/model_forms.py:114 netbox/ipam/tables/ip.py:117 +#: netbox/templates/ipam/aggregate.html:11 +#: netbox/templates/ipam/prefix.html:38 msgid "Aggregate" msgstr "Aggregaat" -#: ipam/forms/model_forms.py:135 templates/ipam/asnrange.html:12 +#: netbox/ipam/forms/model_forms.py:135 netbox/templates/ipam/asnrange.html:12 msgid "ASN Range" msgstr "ASN-assortiment" -#: ipam/forms/model_forms.py:231 +#: netbox/ipam/forms/model_forms.py:231 msgid "Site/VLAN Assignment" msgstr "Site/VLAN-toewijzing" -#: ipam/forms/model_forms.py:259 templates/ipam/iprange.html:10 +#: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10 msgid "IP Range" msgstr "IP-bereik" -#: ipam/forms/model_forms.py:295 ipam/forms/model_forms.py:321 -#: ipam/forms/model_forms.py:473 templates/ipam/fhrpgroup.html:19 +#: 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 msgid "FHRP Group" msgstr "FHRP-groep" -#: ipam/forms/model_forms.py:310 +#: netbox/ipam/forms/model_forms.py:310 msgid "Make this the primary IP for the device/VM" msgstr "Maak dit het primaire IP-adres voor het apparaat/VM" -#: ipam/forms/model_forms.py:325 +#: netbox/ipam/forms/model_forms.py:314 +msgid "Make this the out-of-band IP for the device" +msgstr "" + +#: netbox/ipam/forms/model_forms.py:329 msgid "NAT IP (Inside)" msgstr "NAT IP (binnenin)" -#: ipam/forms/model_forms.py:384 +#: netbox/ipam/forms/model_forms.py:391 msgid "An IP address can only be assigned to a single object." msgstr "Een IP-adres kan slechts aan één object worden toegewezen." -#: ipam/forms/model_forms.py:390 ipam/models/ip.py:897 -msgid "" -"Cannot reassign IP address while it is designated as the primary IP for the " -"parent object" +#: netbox/ipam/forms/model_forms.py:398 +msgid "Cannot reassign primary IP address for the parent device/VM" msgstr "" -"Kan het IP-adres niet opnieuw toewijzen terwijl dit is aangewezen als het " -"primaire IP-adres voor het bovenliggende object" -#: ipam/forms/model_forms.py:400 +#: netbox/ipam/forms/model_forms.py:402 +msgid "Cannot reassign out-of-Band IP address for the parent device" +msgstr "" + +#: netbox/ipam/forms/model_forms.py:412 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." -#: ipam/forms/model_forms.py:475 +#: netbox/ipam/forms/model_forms.py:420 +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 msgid "Virtual IP Address" msgstr "Virtueel IP-adres" -#: ipam/forms/model_forms.py:560 +#: netbox/ipam/forms/model_forms.py:593 msgid "Assignment already exists" msgstr "De opdracht bestaat al" -#: ipam/forms/model_forms.py:569 templates/ipam/vlangroup.html:42 +#: netbox/ipam/forms/model_forms.py:602 +#: netbox/templates/ipam/vlangroup.html:42 msgid "VLAN IDs" msgstr "VLAN-ID's" -#: ipam/forms/model_forms.py:587 +#: netbox/ipam/forms/model_forms.py:620 msgid "Child VLANs" msgstr "Kind-VLAN's" -#: ipam/forms/model_forms.py:664 ipam/forms/model_forms.py:696 +#: netbox/ipam/forms/model_forms.py:697 netbox/ipam/forms/model_forms.py:729 msgid "" "Comma-separated list of one or more port numbers. A range may be specified " "using a hyphen." @@ -9326,134 +9982,135 @@ msgstr "" "Door komma's gescheiden lijst van een of meer poortnummers. Een bereik kan " "worden gespecificeerd met een koppelteken." -#: ipam/forms/model_forms.py:669 templates/ipam/servicetemplate.html:12 +#: netbox/ipam/forms/model_forms.py:702 +#: netbox/templates/ipam/servicetemplate.html:12 msgid "Service Template" msgstr "Servicesjabloon" -#: ipam/forms/model_forms.py:716 +#: netbox/ipam/forms/model_forms.py:749 msgid "Port(s)" msgstr "Poort (en)" -#: ipam/forms/model_forms.py:717 ipam/forms/model_forms.py:745 -#: templates/ipam/service.html:21 +#: netbox/ipam/forms/model_forms.py:750 netbox/ipam/forms/model_forms.py:778 +#: netbox/templates/ipam/service.html:21 msgid "Service" msgstr "Service" -#: ipam/forms/model_forms.py:730 +#: netbox/ipam/forms/model_forms.py:763 msgid "Service template" msgstr "Servicesjabloon" -#: ipam/forms/model_forms.py:742 +#: netbox/ipam/forms/model_forms.py:775 msgid "From Template" msgstr "Van sjabloon" -#: ipam/forms/model_forms.py:743 +#: netbox/ipam/forms/model_forms.py:776 msgid "Custom" msgstr "Op maat" -#: ipam/forms/model_forms.py:773 +#: netbox/ipam/forms/model_forms.py:806 msgid "" "Must specify name, protocol, and port(s) if not using a service template." msgstr "" "U moet de naam, het protocol en de poort (en) opgeven als u geen " "servicesjabloon gebruikt." -#: ipam/models/asns.py:34 +#: netbox/ipam/models/asns.py:34 msgid "start" msgstr "begin" -#: ipam/models/asns.py:51 +#: netbox/ipam/models/asns.py:51 msgid "ASN range" msgstr "ASN-assortiment" -#: ipam/models/asns.py:52 +#: netbox/ipam/models/asns.py:52 msgid "ASN ranges" msgstr "ASN-reeksen" -#: ipam/models/asns.py:72 +#: netbox/ipam/models/asns.py:72 #, python-brace-format msgid "Starting ASN ({start}) must be lower than ending ASN ({end})." msgstr "ASN starten ({start}) moet lager zijn dan het einde van ASN ({end})." -#: ipam/models/asns.py:104 +#: netbox/ipam/models/asns.py:104 msgid "Regional Internet Registry responsible for this AS number space" msgstr "" "Regionaal internetregister dat verantwoordelijk is voor deze AS-nummerruimte" -#: ipam/models/asns.py:109 +#: netbox/ipam/models/asns.py:109 msgid "16- or 32-bit autonomous system number" msgstr "16- of 32-bits autonoom systeemnummer" -#: ipam/models/fhrp.py:22 +#: netbox/ipam/models/fhrp.py:22 msgid "group ID" msgstr "groeps-ID" -#: ipam/models/fhrp.py:30 ipam/models/services.py:22 +#: netbox/ipam/models/fhrp.py:30 netbox/ipam/models/services.py:22 msgid "protocol" msgstr "protocol" -#: ipam/models/fhrp.py:38 wireless/models.py:28 +#: netbox/ipam/models/fhrp.py:38 netbox/wireless/models.py:28 msgid "authentication type" msgstr "authenticatietype" -#: ipam/models/fhrp.py:43 +#: netbox/ipam/models/fhrp.py:43 msgid "authentication key" msgstr "authenticatiesleutel" -#: ipam/models/fhrp.py:56 +#: netbox/ipam/models/fhrp.py:56 msgid "FHRP group" msgstr "FHRP-groep" -#: ipam/models/fhrp.py:57 +#: netbox/ipam/models/fhrp.py:57 msgid "FHRP groups" msgstr "FHRP-groepen" -#: ipam/models/fhrp.py:113 +#: netbox/ipam/models/fhrp.py:113 msgid "FHRP group assignment" msgstr "FHRP-groepsopdracht" -#: ipam/models/fhrp.py:114 +#: netbox/ipam/models/fhrp.py:114 msgid "FHRP group assignments" msgstr "FHRP-groepstoewijzingen" -#: ipam/models/ip.py:65 +#: netbox/ipam/models/ip.py:65 msgid "private" msgstr "privé" -#: ipam/models/ip.py:66 +#: netbox/ipam/models/ip.py:66 msgid "IP space managed by this RIR is considered private" msgstr "IP-ruimte die door deze RIR wordt beheerd, wordt als privé beschouwd" -#: ipam/models/ip.py:72 netbox/navigation/menu.py:182 +#: netbox/ipam/models/ip.py:72 netbox/netbox/navigation/menu.py:182 msgid "RIRs" msgstr "RIR's" -#: ipam/models/ip.py:84 +#: netbox/ipam/models/ip.py:84 msgid "IPv4 or IPv6 network" msgstr "IPv4- of IPv6-netwerk" -#: ipam/models/ip.py:91 +#: netbox/ipam/models/ip.py:91 msgid "Regional Internet Registry responsible for this IP space" msgstr "" "Regionaal internetregister dat verantwoordelijk is voor deze IP-ruimte" -#: ipam/models/ip.py:101 +#: netbox/ipam/models/ip.py:101 msgid "date added" msgstr "datum toegevoegd" -#: ipam/models/ip.py:115 +#: netbox/ipam/models/ip.py:115 msgid "aggregate" msgstr "totaal" -#: ipam/models/ip.py:116 +#: netbox/ipam/models/ip.py:116 msgid "aggregates" msgstr "totalen" -#: ipam/models/ip.py:132 +#: netbox/ipam/models/ip.py:132 msgid "Cannot create aggregate with /0 mask." msgstr "Kan geen aggregaat maken met een masker /0." -#: ipam/models/ip.py:144 +#: netbox/ipam/models/ip.py:144 #, python-brace-format msgid "" "Aggregates cannot overlap. {prefix} is already covered by an existing " @@ -9462,7 +10119,7 @@ msgstr "" "Aggregaten kunnen elkaar niet overlappen. {prefix} is al gedekt door een " "bestaand aggregaat ({aggregate})." -#: ipam/models/ip.py:158 +#: netbox/ipam/models/ip.py:158 #, python-brace-format msgid "" "Prefixes cannot overlap aggregates. {prefix} covers an existing aggregate " @@ -9471,261 +10128,279 @@ msgstr "" "Voorvoegsels mogen aggregaten niet overlappen. {prefix} omvat een bestaand " "aggregaat ({aggregate})." -#: ipam/models/ip.py:200 ipam/models/ip.py:737 vpn/models/tunnels.py:114 +#: netbox/ipam/models/ip.py:200 netbox/ipam/models/ip.py:737 +#: netbox/vpn/models/tunnels.py:114 msgid "role" msgstr "functie" -#: ipam/models/ip.py:201 +#: netbox/ipam/models/ip.py:201 msgid "roles" msgstr "rollen" -#: ipam/models/ip.py:217 ipam/models/ip.py:293 +#: netbox/ipam/models/ip.py:217 netbox/ipam/models/ip.py:293 msgid "prefix" msgstr "voorvoegsel" -#: ipam/models/ip.py:218 +#: netbox/ipam/models/ip.py:218 msgid "IPv4 or IPv6 network with mask" msgstr "IPv4- of IPv6-netwerk met masker" -#: ipam/models/ip.py:254 +#: netbox/ipam/models/ip.py:254 msgid "Operational status of this prefix" msgstr "Operationele status van dit voorvoegsel" -#: ipam/models/ip.py:262 +#: netbox/ipam/models/ip.py:262 msgid "The primary function of this prefix" msgstr "De primaire functie van dit voorvoegsel" -#: ipam/models/ip.py:265 +#: netbox/ipam/models/ip.py:265 msgid "is a pool" msgstr "is een pool" -#: ipam/models/ip.py:267 +#: 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" -#: ipam/models/ip.py:270 ipam/models/ip.py:537 +#: netbox/ipam/models/ip.py:270 netbox/ipam/models/ip.py:537 msgid "mark utilized" msgstr "merk gebruikt" -#: ipam/models/ip.py:294 +#: netbox/ipam/models/ip.py:294 msgid "prefixes" msgstr "voorvoegsels" -#: ipam/models/ip.py:317 +#: netbox/ipam/models/ip.py:317 msgid "Cannot create prefix with /0 mask." msgstr "Kan geen voorvoegsel aanmaken met het masker /0." -#: ipam/models/ip.py:324 ipam/models/ip.py:874 +#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:874 #, python-brace-format msgid "VRF {vrf}" msgstr "VRF {vrf}" -#: ipam/models/ip.py:324 ipam/models/ip.py:874 +#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:874 msgid "global table" msgstr "globale tabel" -#: ipam/models/ip.py:326 +#: netbox/ipam/models/ip.py:326 #, python-brace-format msgid "Duplicate prefix found in {table}: {prefix}" msgstr "Duplicaat voorvoegsel gevonden in {table}: {prefix}" -#: ipam/models/ip.py:495 +#: netbox/ipam/models/ip.py:495 msgid "start address" msgstr "startadres" -#: ipam/models/ip.py:496 ipam/models/ip.py:500 ipam/models/ip.py:712 +#: netbox/ipam/models/ip.py:496 netbox/ipam/models/ip.py:500 +#: netbox/ipam/models/ip.py:712 msgid "IPv4 or IPv6 address (with mask)" msgstr "IPv4- of IPv6-adres (met masker)" -#: ipam/models/ip.py:499 +#: netbox/ipam/models/ip.py:499 msgid "end address" msgstr "eindadres" -#: ipam/models/ip.py:526 +#: netbox/ipam/models/ip.py:526 msgid "Operational status of this range" msgstr "Operationele status van deze serie" -#: ipam/models/ip.py:534 +#: netbox/ipam/models/ip.py:534 msgid "The primary function of this range" msgstr "De primaire functie van dit assortiment" -#: ipam/models/ip.py:548 +#: netbox/ipam/models/ip.py:548 msgid "IP range" msgstr "IP-bereik" -#: ipam/models/ip.py:549 +#: netbox/ipam/models/ip.py:549 msgid "IP ranges" msgstr "IP-bereiken" -#: ipam/models/ip.py:565 +#: netbox/ipam/models/ip.py:565 msgid "Starting and ending IP address versions must match" msgstr "" "De versies van het begin- en eindpunt van het IP-adres moeten overeenkomen" -#: ipam/models/ip.py:571 +#: netbox/ipam/models/ip.py:571 msgid "Starting and ending IP address masks must match" msgstr "De IP-adresmaskers voor het begin en einde moeten overeenkomen" -#: ipam/models/ip.py:578 +#: netbox/ipam/models/ip.py:578 #, python-brace-format msgid "" "Ending address must be greater than the starting address ({start_address})" msgstr "Het eindadres moet groter zijn dan het beginadres ({start_address})" -#: ipam/models/ip.py:590 +#: netbox/ipam/models/ip.py:590 #, python-brace-format msgid "Defined addresses overlap with range {overlapping_range} in VRF {vrf}" msgstr "" "Gedefinieerde adressen overlappen met het bereik {overlapping_range} in VRF " "{vrf}" -#: ipam/models/ip.py:599 +#: netbox/ipam/models/ip.py:599 #, python-brace-format msgid "Defined range exceeds maximum supported size ({max_size})" msgstr "" "Het gedefinieerde bereik overschrijdt de maximale ondersteunde grootte " "({max_size})" -#: ipam/models/ip.py:711 tenancy/models/contacts.py:82 +#: netbox/ipam/models/ip.py:711 netbox/tenancy/models/contacts.py:82 msgid "address" msgstr "adres" -#: ipam/models/ip.py:734 +#: netbox/ipam/models/ip.py:734 msgid "The operational status of this IP" msgstr "De operationele status van dit IP-adres" -#: ipam/models/ip.py:741 +#: netbox/ipam/models/ip.py:741 msgid "The functional role of this IP" msgstr "De functionele rol van dit IP-adres" -#: ipam/models/ip.py:765 templates/ipam/ipaddress.html:72 +#: netbox/ipam/models/ip.py:765 netbox/templates/ipam/ipaddress.html:72 msgid "NAT (inside)" msgstr "NAT (binnen)" -#: ipam/models/ip.py:766 +#: netbox/ipam/models/ip.py:766 msgid "The IP for which this address is the \"outside\" IP" msgstr "Het IP-adres waarvoor dit adres het „externe” IP-adres is" -#: ipam/models/ip.py:773 +#: netbox/ipam/models/ip.py:773 msgid "Hostname or FQDN (not case-sensitive)" msgstr "Hostnaam of FQDN (niet hoofdlettergevoelig)" -#: ipam/models/ip.py:789 ipam/models/services.py:94 +#: netbox/ipam/models/ip.py:789 netbox/ipam/models/services.py:94 msgid "IP addresses" msgstr "IP-adressen" -#: ipam/models/ip.py:845 +#: netbox/ipam/models/ip.py:845 msgid "Cannot create IP address with /0 mask." msgstr "Kan geen IP-adres aanmaken met een masker /0." -#: ipam/models/ip.py:851 +#: netbox/ipam/models/ip.py:851 #, python-brace-format msgid "{ip} is a network ID, which may not be assigned to an interface." msgstr "" "{ip} is een netwerk-ID, die mogelijk niet aan een interface is toegewezen." -#: ipam/models/ip.py:862 +#: netbox/ipam/models/ip.py:862 #, python-brace-format msgid "" "{ip} is a broadcast address, which may not be assigned to an interface." msgstr "" "{ip} is een uitzendadres dat mogelijk niet aan een interface is toegewezen." -#: ipam/models/ip.py:876 +#: netbox/ipam/models/ip.py:876 #, python-brace-format msgid "Duplicate IP address found in {table}: {ipaddress}" msgstr "Duplicaat IP-adres gevonden in {table}: {ipaddress}" -#: ipam/models/ip.py:903 +#: netbox/ipam/models/ip.py:897 +msgid "" +"Cannot reassign IP address while it is designated as the primary IP for the " +"parent object" +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 msgid "Only IPv6 addresses can be assigned SLAAC status" msgstr "Alleen IPv6-adressen kunnen een SLAAC-status krijgen" -#: ipam/models/services.py:33 +#: netbox/ipam/models/services.py:33 msgid "port numbers" msgstr "poortnummers" -#: ipam/models/services.py:59 +#: netbox/ipam/models/services.py:59 msgid "service template" msgstr "servicesjabloon" -#: ipam/models/services.py:60 +#: netbox/ipam/models/services.py:60 msgid "service templates" msgstr "servicesjablonen" -#: ipam/models/services.py:95 +#: netbox/ipam/models/services.py:95 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" -#: ipam/models/services.py:102 +#: netbox/ipam/models/services.py:102 msgid "service" msgstr "service" -#: ipam/models/services.py:103 +#: netbox/ipam/models/services.py:103 msgid "services" msgstr "diensten" -#: ipam/models/services.py:117 +#: netbox/ipam/models/services.py:117 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." -#: ipam/models/services.py:119 +#: netbox/ipam/models/services.py:119 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." -#: ipam/models/vlans.py:85 +#: netbox/ipam/models/vlans.py:85 msgid "VLAN groups" msgstr "VLAN-groepen" -#: ipam/models/vlans.py:95 +#: netbox/ipam/models/vlans.py:95 msgid "Cannot set scope_type without scope_id." msgstr "Kan scope_type niet instellen zonder scope_id." -#: ipam/models/vlans.py:97 +#: netbox/ipam/models/vlans.py:97 msgid "Cannot set scope_id without scope_type." msgstr "Kan scope_id niet instellen zonder scope_type." -#: ipam/models/vlans.py:101 +#: netbox/ipam/models/vlans.py:105 +#, python-brace-format +msgid "Starting VLAN ID in range ({value}) cannot be less than {minimum}" +msgstr "" + +#: netbox/ipam/models/vlans.py:111 +#, python-brace-format +msgid "Ending VLAN ID in range ({value}) cannot exceed {maximum}" +msgstr "" + +#: 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 "" + +#: netbox/ipam/models/vlans.py:124 msgid "Ranges cannot overlap." msgstr "Bereiken kunnen elkaar niet overlappen." -#: ipam/models/vlans.py:106 -#, python-brace-format -msgid "" -"Maximum child VID must be greater than or equal to minimum child VID " -"({value})" -msgstr "" -"De maximale VID voor kinderen moet groter zijn dan of gelijk zijn aan de " -"minimale VID voor kinderen ({value})" - -#: ipam/models/vlans.py:165 +#: netbox/ipam/models/vlans.py:181 msgid "The specific site to which this VLAN is assigned (if any)" msgstr "De specifieke site waaraan dit VLAN is toegewezen (indien aanwezig)" -#: ipam/models/vlans.py:173 +#: netbox/ipam/models/vlans.py:189 msgid "VLAN group (optional)" msgstr "VLAN-groep (optioneel)" -#: ipam/models/vlans.py:181 +#: netbox/ipam/models/vlans.py:197 msgid "Numeric VLAN ID (1-4094)" msgstr "Numerieke VLAN-id (1-4094)" -#: ipam/models/vlans.py:199 +#: netbox/ipam/models/vlans.py:215 msgid "Operational status of this VLAN" msgstr "Operationele status van dit VLAN" -#: ipam/models/vlans.py:207 +#: netbox/ipam/models/vlans.py:223 msgid "The primary function of this VLAN" msgstr "De primaire functie van dit VLAN" -#: ipam/models/vlans.py:250 +#: netbox/ipam/models/vlans.py:266 #, python-brace-format msgid "" "VLAN is assigned to group {group} (scope: {scope}); cannot also assign to " @@ -9734,169 +10409,171 @@ msgstr "" "VLAN is toegewezen aan de groep {group} (toepassingsgebied: {scope}); kan " "niet ook aan de site worden toegewezen {site}." -#: ipam/models/vlans.py:259 +#: netbox/ipam/models/vlans.py:275 #, 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}" -#: ipam/models/vrfs.py:30 +#: netbox/ipam/models/vrfs.py:30 msgid "route distinguisher" msgstr "route-onderscheider" -#: ipam/models/vrfs.py:31 +#: netbox/ipam/models/vrfs.py:31 msgid "Unique route distinguisher (as defined in RFC 4364)" msgstr "Unieke routedifferentiator (zoals gedefinieerd in RFC 4364)" -#: ipam/models/vrfs.py:42 +#: netbox/ipam/models/vrfs.py:42 msgid "enforce unique space" msgstr "unieke ruimte afdwingen" -#: ipam/models/vrfs.py:43 +#: netbox/ipam/models/vrfs.py:43 msgid "Prevent duplicate prefixes/IP addresses within this VRF" msgstr "Voorkom dubbele voorvoegsels/IP-adressen in deze VRF" -#: ipam/models/vrfs.py:63 netbox/navigation/menu.py:186 -#: netbox/navigation/menu.py:188 +#: netbox/ipam/models/vrfs.py:63 netbox/netbox/navigation/menu.py:186 +#: netbox/netbox/navigation/menu.py:188 msgid "VRFs" msgstr "VRF's" -#: ipam/models/vrfs.py:82 +#: netbox/ipam/models/vrfs.py:82 msgid "Route target value (formatted in accordance with RFC 4360)" msgstr "" "Doelwaarde van de route (geformatteerd in overeenstemming met RFC 4360)" -#: ipam/models/vrfs.py:94 +#: netbox/ipam/models/vrfs.py:94 msgid "route target" msgstr "doel van de route" -#: ipam/models/vrfs.py:95 +#: netbox/ipam/models/vrfs.py:95 msgid "route targets" msgstr "routedoelen" -#: ipam/tables/asn.py:52 +#: netbox/ipam/tables/asn.py:52 msgid "ASDOT" msgstr "ASDOT" -#: ipam/tables/asn.py:57 +#: netbox/ipam/tables/asn.py:57 msgid "Site Count" msgstr "Aantal sites" -#: ipam/tables/asn.py:62 +#: netbox/ipam/tables/asn.py:62 msgid "Provider Count" msgstr "Aantal providers" -#: ipam/tables/ip.py:95 netbox/navigation/menu.py:179 -#: netbox/navigation/menu.py:181 +#: netbox/ipam/tables/ip.py:95 netbox/netbox/navigation/menu.py:179 +#: netbox/netbox/navigation/menu.py:181 msgid "Aggregates" msgstr "Totalen" -#: ipam/tables/ip.py:125 +#: netbox/ipam/tables/ip.py:125 msgid "Added" msgstr "Toegevoegd" -#: ipam/tables/ip.py:128 ipam/tables/ip.py:166 ipam/tables/vlans.py:142 -#: ipam/views.py:346 netbox/navigation/menu.py:165 -#: netbox/navigation/menu.py:167 templates/ipam/vlan.html:84 +#: 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 msgid "Prefixes" msgstr "Voorvoegsels" -#: ipam/tables/ip.py:131 ipam/tables/ip.py:270 ipam/tables/ip.py:324 -#: ipam/tables/vlans.py:86 templates/dcim/device.html:260 -#: templates/ipam/aggregate.html:24 templates/ipam/iprange.html:29 -#: templates/ipam/prefix.html:106 +#: 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/templates/dcim/device.html:260 +#: netbox/templates/ipam/aggregate.html:24 +#: netbox/templates/ipam/iprange.html:29 netbox/templates/ipam/prefix.html:106 msgid "Utilization" msgstr "Gebruik" -#: ipam/tables/ip.py:171 netbox/navigation/menu.py:161 +#: netbox/ipam/tables/ip.py:171 netbox/netbox/navigation/menu.py:161 msgid "IP Ranges" msgstr "IP-bereiken" -#: ipam/tables/ip.py:221 +#: netbox/ipam/tables/ip.py:221 msgid "Prefix (Flat)" msgstr "Voorvoegsel (plat)" -#: ipam/tables/ip.py:225 +#: netbox/ipam/tables/ip.py:225 msgid "Depth" msgstr "Diepte" -#: ipam/tables/ip.py:262 +#: netbox/ipam/tables/ip.py:262 msgid "Pool" msgstr "Pool" -#: ipam/tables/ip.py:266 ipam/tables/ip.py:320 +#: netbox/ipam/tables/ip.py:266 netbox/ipam/tables/ip.py:320 msgid "Marked Utilized" msgstr "Gemarkeerd als gebruikt" -#: ipam/tables/ip.py:304 +#: netbox/ipam/tables/ip.py:304 msgid "Start address" msgstr "Startadres" -#: ipam/tables/ip.py:383 +#: netbox/ipam/tables/ip.py:383 msgid "NAT (Inside)" msgstr "NAT (binnenkant)" -#: ipam/tables/ip.py:388 +#: netbox/ipam/tables/ip.py:388 msgid "NAT (Outside)" msgstr "NAT (buiten)" -#: ipam/tables/ip.py:393 +#: netbox/ipam/tables/ip.py:393 msgid "Assigned" msgstr "Toegewezen" -#: ipam/tables/ip.py:429 templates/vpn/l2vpntermination.html:16 -#: vpn/forms/filtersets.py:240 +#: netbox/ipam/tables/ip.py:429 netbox/templates/vpn/l2vpntermination.html:16 +#: netbox/vpn/forms/filtersets.py:240 msgid "Assigned Object" msgstr "Toegewezen object" -#: ipam/tables/vlans.py:68 +#: netbox/ipam/tables/vlans.py:68 msgid "Scope Type" msgstr "Soort toepassingsgebied" -#: ipam/tables/vlans.py:76 +#: netbox/ipam/tables/vlans.py:76 msgid "VID Ranges" msgstr "VID-reeksen" -#: ipam/tables/vlans.py:111 ipam/tables/vlans.py:214 -#: templates/dcim/inc/interface_vlans_table.html:4 +#: netbox/ipam/tables/vlans.py:111 netbox/ipam/tables/vlans.py:214 +#: netbox/templates/dcim/inc/interface_vlans_table.html:4 msgid "VID" msgstr "VID" -#: ipam/tables/vrfs.py:30 +#: netbox/ipam/tables/vrfs.py:30 msgid "RD" msgstr "RD" -#: ipam/tables/vrfs.py:33 +#: netbox/ipam/tables/vrfs.py:33 msgid "Unique" msgstr "Uniek" -#: ipam/tables/vrfs.py:37 vpn/tables/l2vpn.py:27 +#: netbox/ipam/tables/vrfs.py:37 netbox/vpn/tables/l2vpn.py:27 msgid "Import Targets" msgstr "Doelen importeren" -#: ipam/tables/vrfs.py:42 vpn/tables/l2vpn.py:32 +#: netbox/ipam/tables/vrfs.py:42 netbox/vpn/tables/l2vpn.py:32 msgid "Export Targets" msgstr "Doelen exporteren" -#: ipam/validators.py:9 +#: 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}?" -#: ipam/validators.py:16 +#: netbox/ipam/validators.py:16 #, python-format msgid "The prefix length must be less than or equal to %(limit_value)s." msgstr "" "De lengte van het voorvoegsel moet kleiner zijn dan of gelijk aan " "%(limit_value)s." -#: ipam/validators.py:24 +#: netbox/ipam/validators.py:24 #, python-format msgid "The prefix length must be greater than or equal to %(limit_value)s." msgstr "" "De lengte van het voorvoegsel moet groter zijn dan of gelijk zijn aan " "%(limit_value)s." -#: ipam/validators.py:33 +#: netbox/ipam/validators.py:33 msgid "" "Only alphanumeric characters, asterisks, hyphens, periods, and underscores " "are allowed in DNS names" @@ -9904,31 +10581,31 @@ msgstr "" "Alleen alfanumerieke tekens, sterretjes, koppeltekens, punten en " "onderstrepingstekens zijn toegestaan in DNS-namen" -#: ipam/views.py:533 +#: netbox/ipam/views.py:533 msgid "Child Prefixes" msgstr "Voorvoegsels voor kinderen" -#: ipam/views.py:569 +#: netbox/ipam/views.py:569 msgid "Child Ranges" msgstr "Ranges voor kinderen" -#: ipam/views.py:898 +#: netbox/ipam/views.py:898 msgid "Related IPs" msgstr "Gerelateerde IP's" -#: ipam/views.py:1127 +#: netbox/ipam/views.py:1127 msgid "Device Interfaces" msgstr "Interfaces voor apparaten" -#: ipam/views.py:1145 +#: netbox/ipam/views.py:1145 msgid "VM Interfaces" msgstr "VM-interfaces" -#: netbox/api/fields.py:65 +#: netbox/netbox/api/fields.py:65 msgid "This field may not be blank." msgstr "Dit veld is mogelijk niet leeg." -#: netbox/api/fields.py:70 +#: netbox/netbox/api/fields.py:70 msgid "" "Value must be passed directly (e.g. \"foo\": 123); do not use a dictionary " "or list." @@ -9936,331 +10613,344 @@ msgstr "" "De waarde moet rechtstreeks worden doorgegeven (bijvoorbeeld „foo”: 123); " "gebruik geen woordenboek of lijst." -#: netbox/api/fields.py:91 +#: netbox/netbox/api/fields.py:91 #, python-brace-format msgid "{value} is not a valid choice." msgstr "{value} is geen geldige keuze." -#: netbox/api/fields.py:104 +#: netbox/netbox/api/fields.py:104 #, python-brace-format msgid "Invalid content type: {content_type}" msgstr "Ongeldig inhoudstype: {content_type}" -#: netbox/api/fields.py:105 +#: netbox/netbox/api/fields.py:105 msgid "Invalid value. Specify a content type as '.'." msgstr "" "Ongeldige waarde. Specificeer een inhoudstype als " "'.'." -#: netbox/api/fields.py:167 +#: netbox/netbox/api/fields.py:167 msgid "Ranges must be specified in the form (lower, upper)." msgstr "" "Bereiken moeten in het formulier worden gespecificeerd (onder, boven)." -#: netbox/api/fields.py:169 +#: netbox/netbox/api/fields.py:169 msgid "Range boundaries must be defined as integers." msgstr "Bereikgrenzen moeten worden gedefinieerd als gehele getallen." -#: netbox/api/serializers/fields.py:40 +#: netbox/netbox/api/serializers/fields.py:40 #, python-brace-format msgid "{class_name} must implement get_view_name()" msgstr "{class_name} moet get_view_name () implementeren" -#: netbox/authentication/__init__.py:138 +#: netbox/netbox/authentication/__init__.py:138 #, python-brace-format msgid "Invalid permission {permission} for model {model}" msgstr "Ongeldige toestemming {permission} voor model {model}" -#: netbox/choices.py:49 +#: netbox/netbox/choices.py:49 msgid "Dark Red" msgstr "Donkerrood" -#: netbox/choices.py:52 +#: netbox/netbox/choices.py:52 msgid "Rose" msgstr "Roos" -#: netbox/choices.py:53 +#: netbox/netbox/choices.py:53 msgid "Fuchsia" msgstr "Fuchsia" -#: netbox/choices.py:55 +#: netbox/netbox/choices.py:55 msgid "Dark Purple" msgstr "Donkerpaars" -#: netbox/choices.py:58 +#: netbox/netbox/choices.py:58 msgid "Light Blue" msgstr "Lichtblauw" -#: netbox/choices.py:61 +#: netbox/netbox/choices.py:61 msgid "Aqua" msgstr "Aqua" -#: netbox/choices.py:62 +#: netbox/netbox/choices.py:62 msgid "Dark Green" msgstr "Donkergroen" -#: netbox/choices.py:64 +#: netbox/netbox/choices.py:64 msgid "Light Green" msgstr "Lichtgroen" -#: netbox/choices.py:65 +#: netbox/netbox/choices.py:65 msgid "Lime" msgstr "Limoen" -#: netbox/choices.py:67 +#: netbox/netbox/choices.py:67 msgid "Amber" msgstr "Amber" -#: netbox/choices.py:69 +#: netbox/netbox/choices.py:69 msgid "Dark Orange" msgstr "Donkeroranje" -#: netbox/choices.py:70 +#: netbox/netbox/choices.py:70 msgid "Brown" msgstr "Bruin" -#: netbox/choices.py:71 +#: netbox/netbox/choices.py:71 msgid "Light Grey" msgstr "Lichtgrijs" -#: netbox/choices.py:72 +#: netbox/netbox/choices.py:72 msgid "Grey" msgstr "Grijs" -#: netbox/choices.py:73 +#: netbox/netbox/choices.py:73 msgid "Dark Grey" msgstr "Donkergrijs" -#: netbox/choices.py:128 +#: netbox/netbox/choices.py:128 msgid "Direct" msgstr "Rechtstreeks" -#: netbox/choices.py:129 +#: netbox/netbox/choices.py:129 msgid "Upload" msgstr "Uploaden" -#: netbox/choices.py:141 netbox/choices.py:155 +#: netbox/netbox/choices.py:141 netbox/netbox/choices.py:155 msgid "Auto-detect" msgstr "Automatisch detecteren" -#: netbox/choices.py:156 +#: netbox/netbox/choices.py:156 msgid "Comma" msgstr "Komma" -#: netbox/choices.py:157 +#: netbox/netbox/choices.py:157 msgid "Semicolon" msgstr "Puntkomma" -#: netbox/choices.py:158 +#: netbox/netbox/choices.py:158 msgid "Tab" msgstr "Tab" -#: netbox/config/__init__.py:67 +#: netbox/netbox/config/__init__.py:67 #, python-brace-format msgid "Invalid configuration parameter: {item}" msgstr "Ongeldige configuratieparameter: {item}" -#: netbox/config/parameters.py:22 templates/core/inc/config_data.html:62 +#: netbox/netbox/config/parameters.py:22 +#: netbox/templates/core/inc/config_data.html:62 msgid "Login banner" msgstr "Banner voor inloggen" -#: netbox/config/parameters.py:24 +#: netbox/netbox/config/parameters.py:24 msgid "Additional content to display on the login page" msgstr "Aanvullende inhoud om weer te geven op de inlogpagina" -#: netbox/config/parameters.py:33 templates/core/inc/config_data.html:66 +#: netbox/netbox/config/parameters.py:33 +#: netbox/templates/core/inc/config_data.html:66 msgid "Maintenance banner" msgstr "Onderhoudsbanner" -#: netbox/config/parameters.py:35 +#: netbox/netbox/config/parameters.py:35 msgid "Additional content to display when in maintenance mode" msgstr "Aanvullende inhoud om weer te geven in de onderhoudsmodus" -#: netbox/config/parameters.py:44 templates/core/inc/config_data.html:70 +#: netbox/netbox/config/parameters.py:44 +#: netbox/templates/core/inc/config_data.html:70 msgid "Top banner" msgstr "Bovenste banner" -#: netbox/config/parameters.py:46 +#: netbox/netbox/config/parameters.py:46 msgid "Additional content to display at the top of every page" msgstr "Aanvullende inhoud om bovenaan elke pagina weer te geven" -#: netbox/config/parameters.py:55 templates/core/inc/config_data.html:74 +#: netbox/netbox/config/parameters.py:55 +#: netbox/templates/core/inc/config_data.html:74 msgid "Bottom banner" msgstr "Onderste banner" -#: netbox/config/parameters.py:57 +#: netbox/netbox/config/parameters.py:57 msgid "Additional content to display at the bottom of every page" msgstr "Aanvullende inhoud om onderaan elke pagina weer te geven" -#: netbox/config/parameters.py:68 +#: netbox/netbox/config/parameters.py:68 msgid "Globally unique IP space" msgstr "Wereldwijd unieke IP-ruimte" -#: netbox/config/parameters.py:70 +#: netbox/netbox/config/parameters.py:70 msgid "Enforce unique IP addressing within the global table" msgstr "Unieke IP-adressering binnen de globale tabel afdwingen" -#: netbox/config/parameters.py:75 templates/core/inc/config_data.html:44 +#: netbox/netbox/config/parameters.py:75 +#: netbox/templates/core/inc/config_data.html:44 msgid "Prefer IPv4" msgstr "Geef de voorkeur aan IPv4" -#: netbox/config/parameters.py:77 +#: netbox/netbox/config/parameters.py:77 msgid "Prefer IPv4 addresses over IPv6" msgstr "Geef de voorkeur aan IPv4-adressen boven IPv6" -#: netbox/config/parameters.py:84 +#: netbox/netbox/config/parameters.py:84 msgid "Rack unit height" msgstr "Hoogte van de rackeenheid" -#: netbox/config/parameters.py:86 +#: netbox/netbox/config/parameters.py:86 msgid "Default unit height for rendered rack elevations" msgstr "Standaardeenheidshoogte voor gerenderde rackverhogingen" -#: netbox/config/parameters.py:91 +#: netbox/netbox/config/parameters.py:91 msgid "Rack unit width" msgstr "Breedte van de rackunit" -#: netbox/config/parameters.py:93 +#: netbox/netbox/config/parameters.py:93 msgid "Default unit width for rendered rack elevations" msgstr "Standaardeenheidsbreedte voor gerenderde rackhoogtes" -#: netbox/config/parameters.py:100 +#: netbox/netbox/config/parameters.py:100 msgid "Powerfeed voltage" msgstr "Voedingsspanning" -#: netbox/config/parameters.py:102 +#: netbox/netbox/config/parameters.py:102 msgid "Default voltage for powerfeeds" msgstr "Standaardspanning voor voedingen" -#: netbox/config/parameters.py:107 +#: netbox/netbox/config/parameters.py:107 msgid "Powerfeed amperage" msgstr "Stroomsterkte van de voeding" -#: netbox/config/parameters.py:109 +#: netbox/netbox/config/parameters.py:109 msgid "Default amperage for powerfeeds" msgstr "Standaardstroomsterkte voor voedingen" -#: netbox/config/parameters.py:114 +#: netbox/netbox/config/parameters.py:114 msgid "Powerfeed max utilization" msgstr "Maximaal gebruik van Powerfeed" -#: netbox/config/parameters.py:116 +#: netbox/netbox/config/parameters.py:116 msgid "Default max utilization for powerfeeds" msgstr "Maximaal standaardgebruik voor powerfeeds" -#: netbox/config/parameters.py:123 templates/core/inc/config_data.html:53 +#: netbox/netbox/config/parameters.py:123 +#: netbox/templates/core/inc/config_data.html:53 msgid "Allowed URL schemes" msgstr "Toegestane URL-schema's" -#: netbox/config/parameters.py:128 +#: netbox/netbox/config/parameters.py:128 msgid "Permitted schemes for URLs in user-provided content" msgstr "Toegestane schema's voor URL's in door gebruikers aangeleverde inhoud" -#: netbox/config/parameters.py:136 +#: netbox/netbox/config/parameters.py:136 msgid "Default page size" msgstr "Standaard paginaformaat" -#: netbox/config/parameters.py:142 +#: netbox/netbox/config/parameters.py:142 msgid "Maximum page size" msgstr "Maximale paginagrootte" -#: netbox/config/parameters.py:150 templates/core/inc/config_data.html:96 +#: netbox/netbox/config/parameters.py:150 +#: netbox/templates/core/inc/config_data.html:96 msgid "Custom validators" msgstr "Eigen Validators" -#: netbox/config/parameters.py:152 +#: netbox/netbox/config/parameters.py:152 msgid "Custom validation rules (JSON)" msgstr "Aangepaste validatieregels (JSON)" -#: netbox/config/parameters.py:160 templates/core/inc/config_data.html:104 +#: netbox/netbox/config/parameters.py:160 +#: netbox/templates/core/inc/config_data.html:104 msgid "Protection rules" msgstr "Beschermingsregels" -#: netbox/config/parameters.py:162 +#: netbox/netbox/config/parameters.py:162 msgid "Deletion protection rules (JSON)" msgstr "Regels voor verwijderingsbeveiliging (JSON)" -#: netbox/config/parameters.py:172 templates/core/inc/config_data.html:117 +#: netbox/netbox/config/parameters.py:172 +#: netbox/templates/core/inc/config_data.html:117 msgid "Default preferences" msgstr "Standaardvoorkeuren" -#: netbox/config/parameters.py:174 +#: netbox/netbox/config/parameters.py:174 msgid "Default preferences for new users" msgstr "Standaardvoorkeuren voor nieuwe gebruikers" -#: netbox/config/parameters.py:181 templates/core/inc/config_data.html:129 +#: netbox/netbox/config/parameters.py:181 +#: netbox/templates/core/inc/config_data.html:129 msgid "Maintenance mode" msgstr "Onderhoudsmodus" -#: netbox/config/parameters.py:183 +#: netbox/netbox/config/parameters.py:183 msgid "Enable maintenance mode" msgstr "Onderhoudsmodus inschakelen" -#: netbox/config/parameters.py:188 templates/core/inc/config_data.html:133 +#: netbox/netbox/config/parameters.py:188 +#: netbox/templates/core/inc/config_data.html:133 msgid "GraphQL enabled" msgstr "GraphQL ingeschakeld" -#: netbox/config/parameters.py:190 +#: netbox/netbox/config/parameters.py:190 msgid "Enable the GraphQL API" msgstr "De GraphQL-API inschakelen" -#: netbox/config/parameters.py:195 templates/core/inc/config_data.html:137 +#: netbox/netbox/config/parameters.py:195 +#: netbox/templates/core/inc/config_data.html:137 msgid "Changelog retention" msgstr "Behoud van changelog" -#: netbox/config/parameters.py:197 +#: netbox/netbox/config/parameters.py:197 msgid "Days to retain changelog history (set to zero for unlimited)" msgstr "" "Dagen om de geschiedenis van het changelog te bewaren (ingesteld op nul voor" " onbeperkt)" -#: netbox/config/parameters.py:202 +#: netbox/netbox/config/parameters.py:202 msgid "Job result retention" msgstr "Behoud van werkresultaten" -#: netbox/config/parameters.py:204 +#: netbox/netbox/config/parameters.py:204 msgid "Days to retain job result history (set to zero for unlimited)" msgstr "" "Dagen om de geschiedenis van de taakresultaten bij te houden (op nul gezet " "voor een onbeperkt aantal)" -#: netbox/config/parameters.py:209 templates/core/inc/config_data.html:145 +#: netbox/netbox/config/parameters.py:209 +#: netbox/templates/core/inc/config_data.html:145 msgid "Maps URL" msgstr "URL van de kaart" -#: netbox/config/parameters.py:211 +#: netbox/netbox/config/parameters.py:211 msgid "Base URL for mapping geographic locations" msgstr "Basis-URL voor het in kaart brengen van geografische locaties" -#: netbox/forms/__init__.py:12 +#: netbox/netbox/forms/__init__.py:12 msgid "Partial match" msgstr "Gedeeltelijke match" -#: netbox/forms/__init__.py:13 +#: netbox/netbox/forms/__init__.py:13 msgid "Exact match" msgstr "Exacte overeenkomst" -#: netbox/forms/__init__.py:14 +#: netbox/netbox/forms/__init__.py:14 msgid "Starts with" msgstr "Begint met" -#: netbox/forms/__init__.py:15 +#: netbox/netbox/forms/__init__.py:15 msgid "Ends with" msgstr "Eindigt met" -#: netbox/forms/__init__.py:16 +#: netbox/netbox/forms/__init__.py:16 msgid "Regex" msgstr "Regex" -#: netbox/forms/__init__.py:34 +#: netbox/netbox/forms/__init__.py:34 msgid "Object type(s)" msgstr "Objecttype (s)" -#: netbox/forms/__init__.py:40 +#: netbox/netbox/forms/__init__.py:40 msgid "Lookup" msgstr "Opzoeken" -#: netbox/forms/base.py:90 +#: netbox/netbox/forms/base.py:90 msgid "" "Tag slugs separated by commas, encased with double quotes (e.g. " "\"tag1,tag2,tag3\")" @@ -10268,416 +10958,427 @@ msgstr "" "Tag-slugs gescheiden door komma's, tussen dubbele aanhalingstekens " "(bijvoorbeeld „tag1, tag2, tag3\")" -#: netbox/forms/base.py:120 +#: netbox/netbox/forms/base.py:120 msgid "Add tags" msgstr "Tags toevoegen" -#: netbox/forms/base.py:125 +#: netbox/netbox/forms/base.py:125 msgid "Remove tags" msgstr "Tags verwijderen" -#: netbox/forms/mixins.py:38 +#: netbox/netbox/forms/mixins.py:38 #, python-brace-format msgid "{class_name} must specify a model class." msgstr "{class_name} moet een modelklasse specificeren." -#: netbox/models/features.py:280 +#: netbox/netbox/models/features.py:280 #, python-brace-format msgid "Unknown field name '{name}' in custom field data." msgstr "Onbekende veldnaam '{name}'in aangepaste veldgegevens." -#: netbox/models/features.py:286 +#: netbox/netbox/models/features.py:286 #, python-brace-format msgid "Invalid value for custom field '{name}': {error}" msgstr "Ongeldige waarde voor aangepast veld '{name}': {error}" -#: netbox/models/features.py:295 +#: netbox/netbox/models/features.py:295 #, python-brace-format msgid "Custom field '{name}' must have a unique value." msgstr "Aangepast veld '{name}'moet een unieke waarde hebben." -#: netbox/models/features.py:302 +#: netbox/netbox/models/features.py:302 #, python-brace-format msgid "Missing required custom field '{name}'." msgstr "Ontbreekt het vereiste aangepaste veld '{name}'." -#: netbox/models/features.py:462 +#: netbox/netbox/models/features.py:462 msgid "Remote data source" msgstr "Externe gegevensbron" -#: netbox/models/features.py:472 +#: netbox/netbox/models/features.py:472 msgid "data path" msgstr "datapad" -#: netbox/models/features.py:476 +#: netbox/netbox/models/features.py:476 msgid "Path to remote file (relative to data source root)" msgstr "" "Pad naar extern bestand (ten opzichte van de root van de gegevensbron)" -#: netbox/models/features.py:479 +#: netbox/netbox/models/features.py:479 msgid "auto sync enabled" msgstr "automatische synchronisatie ingeschakeld" -#: netbox/models/features.py:481 +#: netbox/netbox/models/features.py:481 msgid "Enable automatic synchronization of data when the data file is updated" msgstr "" "Automatische synchronisatie van gegevens inschakelen wanneer het " "gegevensbestand wordt bijgewerkt" -#: netbox/models/features.py:484 +#: netbox/netbox/models/features.py:484 msgid "date synced" msgstr "datum gesynchroniseerd" -#: netbox/models/features.py:578 +#: netbox/netbox/models/features.py:578 #, python-brace-format msgid "{class_name} must implement a sync_data() method." msgstr "{class_name} moet een sync_data () -methode implementeren." -#: netbox/navigation/menu.py:11 +#: netbox/netbox/navigation/menu.py:11 msgid "Organization" msgstr "Organisatie" -#: netbox/navigation/menu.py:19 +#: netbox/netbox/navigation/menu.py:19 msgid "Site Groups" msgstr "Sitegroepen" -#: netbox/navigation/menu.py:27 +#: netbox/netbox/navigation/menu.py:27 msgid "Tenant Groups" msgstr "Tenant Groepen" -#: netbox/navigation/menu.py:34 +#: netbox/netbox/navigation/menu.py:34 msgid "Contact Groups" msgstr "Contactgroepen" -#: netbox/navigation/menu.py:35 templates/tenancy/contactrole.html:8 +#: netbox/netbox/navigation/menu.py:35 +#: netbox/templates/tenancy/contactrole.html:8 msgid "Contact Roles" msgstr "Rollen voor contactpersonen" -#: netbox/navigation/menu.py:36 +#: netbox/netbox/navigation/menu.py:36 msgid "Contact Assignments" msgstr "Contacttoewijzingen" -#: netbox/navigation/menu.py:50 +#: netbox/netbox/navigation/menu.py:50 msgid "Rack Roles" msgstr "Rack rollen" -#: netbox/navigation/menu.py:54 +#: netbox/netbox/navigation/menu.py:54 msgid "Elevations" msgstr "Verhogingen" -#: netbox/navigation/menu.py:60 netbox/navigation/menu.py:62 +#: netbox/netbox/navigation/menu.py:60 netbox/netbox/navigation/menu.py:62 msgid "Rack Types" msgstr "Soorten rekken" -#: netbox/navigation/menu.py:76 +#: netbox/netbox/navigation/menu.py:76 msgid "Modules" msgstr "Modules" -#: netbox/navigation/menu.py:80 templates/dcim/device.html:160 -#: templates/dcim/virtualdevicecontext.html:8 +#: netbox/netbox/navigation/menu.py:80 netbox/templates/dcim/device.html:160 +#: netbox/templates/dcim/virtualdevicecontext.html:8 msgid "Virtual Device Contexts" msgstr "Contexten van virtuele apparaten" -#: netbox/navigation/menu.py:88 +#: netbox/netbox/navigation/menu.py:88 msgid "Manufacturers" msgstr "Fabrikanten" -#: netbox/navigation/menu.py:92 +#: netbox/netbox/navigation/menu.py:92 msgid "Device Components" msgstr "Onderdelen van het apparaat" -#: netbox/navigation/menu.py:104 templates/dcim/inventoryitemrole.html:8 +#: netbox/netbox/navigation/menu.py:104 +#: netbox/templates/dcim/inventoryitemrole.html:8 msgid "Inventory Item Roles" msgstr "Rollen van inventarisitems" -#: netbox/navigation/menu.py:111 netbox/navigation/menu.py:115 +#: netbox/netbox/navigation/menu.py:111 netbox/netbox/navigation/menu.py:115 msgid "Connections" msgstr "Verbindingen" -#: netbox/navigation/menu.py:117 +#: netbox/netbox/navigation/menu.py:117 msgid "Cables" msgstr "Kabels" -#: netbox/navigation/menu.py:118 +#: netbox/netbox/navigation/menu.py:118 msgid "Wireless Links" msgstr "Draadloze links" -#: netbox/navigation/menu.py:121 +#: netbox/netbox/navigation/menu.py:121 msgid "Interface Connections" msgstr "Interface-aansluitingen" -#: netbox/navigation/menu.py:126 +#: netbox/netbox/navigation/menu.py:126 msgid "Console Connections" msgstr "Console-aansluitingen" -#: netbox/navigation/menu.py:131 +#: netbox/netbox/navigation/menu.py:131 msgid "Power Connections" msgstr "Stroomaansluitingen" -#: netbox/navigation/menu.py:147 +#: netbox/netbox/navigation/menu.py:147 msgid "Wireless LAN Groups" msgstr "Draadloze LAN-groepen" -#: netbox/navigation/menu.py:168 +#: netbox/netbox/navigation/menu.py:168 msgid "Prefix & VLAN Roles" msgstr "Prefix- en VLAN-rollen" -#: netbox/navigation/menu.py:174 +#: netbox/netbox/navigation/menu.py:174 msgid "ASN Ranges" msgstr "ASN-reeksen" -#: netbox/navigation/menu.py:196 +#: netbox/netbox/navigation/menu.py:196 msgid "VLAN Groups" msgstr "VLAN-groepen" -#: netbox/navigation/menu.py:203 +#: netbox/netbox/navigation/menu.py:203 msgid "Service Templates" msgstr "Servicesjablonen" -#: netbox/navigation/menu.py:204 templates/dcim/device.html:302 -#: templates/ipam/ipaddress.html:118 -#: templates/virtualization/virtualmachine.html:154 +#: netbox/netbox/navigation/menu.py:204 netbox/templates/dcim/device.html:302 +#: netbox/templates/ipam/ipaddress.html:118 +#: netbox/templates/virtualization/virtualmachine.html:154 msgid "Services" msgstr "Diensten" -#: netbox/navigation/menu.py:211 +#: netbox/netbox/navigation/menu.py:211 msgid "VPN" msgstr "VPN" -#: netbox/navigation/menu.py:215 netbox/navigation/menu.py:217 -#: vpn/tables/tunnels.py:24 +#: netbox/netbox/navigation/menu.py:215 netbox/netbox/navigation/menu.py:217 +#: netbox/vpn/tables/tunnels.py:24 msgid "Tunnels" msgstr "Tunnels" -#: netbox/navigation/menu.py:218 templates/vpn/tunnelgroup.html:8 +#: netbox/netbox/navigation/menu.py:218 +#: netbox/templates/vpn/tunnelgroup.html:8 msgid "Tunnel Groups" msgstr "Tunnelgroepen" -#: netbox/navigation/menu.py:219 +#: netbox/netbox/navigation/menu.py:219 msgid "Tunnel Terminations" msgstr "Tunnelafsluitingen" -#: netbox/navigation/menu.py:223 netbox/navigation/menu.py:225 -#: vpn/models/l2vpn.py:64 +#: netbox/netbox/navigation/menu.py:223 netbox/netbox/navigation/menu.py:225 +#: netbox/vpn/models/l2vpn.py:64 msgid "L2VPNs" msgstr "L2VPN's" -#: netbox/navigation/menu.py:226 templates/vpn/l2vpn.html:56 -#: templates/vpn/tunnel.html:72 vpn/tables/tunnels.py:58 +#: 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/navigation/menu.py:232 +#: netbox/netbox/navigation/menu.py:232 msgid "IKE Proposals" msgstr "IKE-voorstellen" -#: netbox/navigation/menu.py:233 templates/vpn/ikeproposal.html:41 +#: netbox/netbox/navigation/menu.py:233 +#: netbox/templates/vpn/ikeproposal.html:41 msgid "IKE Policies" msgstr "IKE-beleid" -#: netbox/navigation/menu.py:234 +#: netbox/netbox/navigation/menu.py:234 msgid "IPSec Proposals" msgstr "IPsec-voorstellen" -#: netbox/navigation/menu.py:235 templates/vpn/ipsecproposal.html:37 +#: netbox/netbox/navigation/menu.py:235 +#: netbox/templates/vpn/ipsecproposal.html:37 msgid "IPSec Policies" msgstr "IPsec-beleid" -#: netbox/navigation/menu.py:236 templates/vpn/ikepolicy.html:38 -#: templates/vpn/ipsecpolicy.html:25 +#: netbox/netbox/navigation/menu.py:236 netbox/templates/vpn/ikepolicy.html:38 +#: netbox/templates/vpn/ipsecpolicy.html:25 msgid "IPSec Profiles" msgstr "IPsec-profielen" -#: netbox/navigation/menu.py:243 templates/dcim/device_edit.html:78 -msgid "Virtualization" -msgstr "Virtualisatie" - -#: netbox/navigation/menu.py:251 -#: templates/virtualization/virtualmachine.html:174 -#: templates/virtualization/virtualmachine/base.html:32 -#: templates/virtualization/virtualmachine_list.html:21 -#: virtualization/tables/virtualmachines.py:104 virtualization/views.py:388 +#: netbox/netbox/navigation/menu.py:251 +#: 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 msgid "Virtual Disks" msgstr "Virtuele schijven" -#: netbox/navigation/menu.py:258 +#: netbox/netbox/navigation/menu.py:258 msgid "Cluster Types" msgstr "Clustertypen" -#: netbox/navigation/menu.py:259 +#: netbox/netbox/navigation/menu.py:259 msgid "Cluster Groups" msgstr "Clustergroepen" -#: netbox/navigation/menu.py:273 +#: netbox/netbox/navigation/menu.py:273 msgid "Circuit Types" msgstr "Circuittypes" -#: netbox/navigation/menu.py:274 +#: netbox/netbox/navigation/menu.py:274 msgid "Circuit Groups" msgstr "Circuitgroepen" -#: netbox/navigation/menu.py:275 templates/circuits/circuit.html:66 +#: netbox/netbox/navigation/menu.py:275 +#: netbox/templates/circuits/circuit.html:66 msgid "Group Assignments" msgstr "Groepstoewijzingen" -#: netbox/navigation/menu.py:276 +#: netbox/netbox/navigation/menu.py:276 msgid "Circuit Terminations" msgstr "Circuitafsluitingen" -#: netbox/navigation/menu.py:280 netbox/navigation/menu.py:282 +#: netbox/netbox/navigation/menu.py:280 netbox/netbox/navigation/menu.py:282 msgid "Providers" msgstr "Providers" -#: netbox/navigation/menu.py:283 templates/circuits/provider.html:51 +#: netbox/netbox/navigation/menu.py:283 +#: netbox/templates/circuits/provider.html:51 msgid "Provider Accounts" msgstr "Accounts van providers" -#: netbox/navigation/menu.py:284 +#: netbox/netbox/navigation/menu.py:284 msgid "Provider Networks" msgstr "Netwerken van providers" -#: netbox/navigation/menu.py:298 +#: netbox/netbox/navigation/menu.py:298 msgid "Power Panels" msgstr "Voedingspanelen" -#: netbox/navigation/menu.py:309 +#: netbox/netbox/navigation/menu.py:309 msgid "Configurations" msgstr "Configuraties" -#: netbox/navigation/menu.py:311 +#: netbox/netbox/navigation/menu.py:311 msgid "Config Contexts" msgstr "Contexten configureren" -#: netbox/navigation/menu.py:312 +#: netbox/netbox/navigation/menu.py:312 msgid "Config Templates" msgstr "Configuratiesjablonen" -#: netbox/navigation/menu.py:319 netbox/navigation/menu.py:323 +#: netbox/netbox/navigation/menu.py:319 netbox/netbox/navigation/menu.py:323 msgid "Customization" msgstr "Aanpassing" -#: netbox/navigation/menu.py:325 templates/dcim/device_edit.html:103 -#: templates/dcim/htmx/cable_edit.html:81 -#: templates/dcim/virtualchassis_add.html:31 -#: templates/dcim/virtualchassis_edit.html:40 -#: templates/generic/bulk_edit.html:76 templates/htmx/form.html:19 -#: templates/inc/filter_list.html:30 templates/inc/panels/custom_fields.html:7 -#: templates/ipam/ipaddress_bulk_add.html:35 templates/ipam/vlan_edit.html:59 +#: netbox/netbox/navigation/menu.py:325 +#: netbox/templates/dcim/device_edit.html:103 +#: netbox/templates/dcim/htmx/cable_edit.html:81 +#: netbox/templates/dcim/virtualchassis_add.html:31 +#: netbox/templates/dcim/virtualchassis_edit.html:40 +#: netbox/templates/generic/bulk_edit.html:76 +#: netbox/templates/htmx/form.html:19 netbox/templates/inc/filter_list.html:30 +#: netbox/templates/inc/panels/custom_fields.html:7 +#: netbox/templates/ipam/ipaddress_bulk_add.html:35 +#: netbox/templates/ipam/vlan_edit.html:59 msgid "Custom Fields" msgstr "Aangepaste velden" -#: netbox/navigation/menu.py:326 +#: netbox/netbox/navigation/menu.py:326 msgid "Custom Field Choices" msgstr "Aangepaste veldkeuzes" -#: netbox/navigation/menu.py:327 +#: netbox/netbox/navigation/menu.py:327 msgid "Custom Links" msgstr "Aangepaste links" -#: netbox/navigation/menu.py:328 +#: netbox/netbox/navigation/menu.py:328 msgid "Export Templates" msgstr "Sjablonen exporteren" -#: netbox/navigation/menu.py:329 +#: netbox/netbox/navigation/menu.py:329 msgid "Saved Filters" msgstr "Opgeslagen filters" -#: netbox/navigation/menu.py:331 +#: netbox/netbox/navigation/menu.py:331 msgid "Image Attachments" msgstr "Afbeeldingsbijlagen" -#: netbox/navigation/menu.py:349 +#: netbox/netbox/navigation/menu.py:349 msgid "Operations" msgstr "Operaties" -#: netbox/navigation/menu.py:353 +#: netbox/netbox/navigation/menu.py:353 msgid "Integrations" msgstr "Integraties" -#: netbox/navigation/menu.py:355 +#: netbox/netbox/navigation/menu.py:355 msgid "Data Sources" msgstr "Gegevensbronnen" -#: netbox/navigation/menu.py:356 +#: netbox/netbox/navigation/menu.py:356 msgid "Event Rules" msgstr "Regels voor evenementen" -#: netbox/navigation/menu.py:357 +#: netbox/netbox/navigation/menu.py:357 msgid "Webhooks" msgstr "Webhooks" -#: netbox/navigation/menu.py:361 netbox/navigation/menu.py:365 -#: netbox/views/generic/feature_views.py:153 -#: templates/extras/report/base.html:37 templates/extras/script/base.html:36 +#: netbox/netbox/navigation/menu.py:361 netbox/netbox/navigation/menu.py:365 +#: netbox/netbox/views/generic/feature_views.py:153 +#: netbox/templates/extras/report/base.html:37 +#: netbox/templates/extras/script/base.html:36 msgid "Jobs" msgstr "Jobs" -#: netbox/navigation/menu.py:371 +#: netbox/netbox/navigation/menu.py:371 msgid "Logging" msgstr "Loggen" -#: netbox/navigation/menu.py:373 +#: netbox/netbox/navigation/menu.py:373 msgid "Notification Groups" msgstr "Meldingsgroepen" -#: netbox/navigation/menu.py:374 +#: netbox/netbox/navigation/menu.py:374 msgid "Journal Entries" msgstr "Journaalboekingen" -#: netbox/navigation/menu.py:375 templates/core/objectchange.html:9 -#: templates/core/objectchange_list.html:4 +#: netbox/netbox/navigation/menu.py:375 +#: netbox/templates/core/objectchange.html:9 +#: netbox/templates/core/objectchange_list.html:4 msgid "Change Log" msgstr "Logboek wijzigen" -#: netbox/navigation/menu.py:382 templates/inc/user_menu.html:29 +#: netbox/netbox/navigation/menu.py:382 netbox/templates/inc/user_menu.html:29 msgid "Admin" msgstr "beheerder" -#: netbox/navigation/menu.py:430 templates/account/base.html:27 -#: templates/inc/user_menu.html:57 +#: netbox/netbox/navigation/menu.py:430 netbox/templates/account/base.html:27 +#: netbox/templates/inc/user_menu.html:57 msgid "API Tokens" msgstr "API-tokens" -#: netbox/navigation/menu.py:437 users/forms/model_forms.py:187 -#: users/forms/model_forms.py:195 users/forms/model_forms.py:242 -#: users/forms/model_forms.py:249 +#: netbox/netbox/navigation/menu.py:437 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/navigation/menu.py:445 netbox/navigation/menu.py:449 -#: templates/core/system.html:7 +#: netbox/netbox/navigation/menu.py:445 netbox/netbox/navigation/menu.py:449 +#: netbox/templates/core/system.html:7 msgid "System" msgstr "Systeem" -#: netbox/navigation/menu.py:454 netbox/navigation/menu.py:502 -#: templates/500.html:35 templates/account/preferences.html:22 -#: templates/core/plugin.html:13 templates/core/plugin_list.html:7 -#: templates/core/plugin_list.html:12 +#: netbox/netbox/navigation/menu.py:454 netbox/netbox/navigation/menu.py:502 +#: netbox/templates/500.html:35 netbox/templates/account/preferences.html:22 +#: netbox/templates/core/plugin.html:13 +#: netbox/templates/core/plugin_list.html:7 +#: netbox/templates/core/plugin_list.html:12 msgid "Plugins" msgstr "Plug-ins" -#: netbox/navigation/menu.py:459 +#: netbox/netbox/navigation/menu.py:459 msgid "Configuration History" msgstr "Configuratiegeschiedenis" -#: netbox/navigation/menu.py:465 templates/core/rq_task.html:8 -#: templates/core/rq_task_list.html:22 +#: netbox/netbox/navigation/menu.py:465 netbox/templates/core/rq_task.html:8 +#: netbox/templates/core/rq_task_list.html:22 msgid "Background Tasks" msgstr "Achtergrondtaken" -#: netbox/plugins/navigation.py:47 netbox/plugins/navigation.py:69 +#: netbox/netbox/plugins/navigation.py:47 +#: netbox/netbox/plugins/navigation.py:69 msgid "Permissions must be passed as a tuple or list." msgstr "Machtigingen moeten worden doorgegeven als een tuple of lijst." -#: netbox/plugins/navigation.py:51 +#: netbox/netbox/plugins/navigation.py:51 msgid "Buttons must be passed as a tuple or list." msgstr "Knoppen moeten als een tuple of lijst worden doorgegeven." -#: netbox/plugins/navigation.py:73 +#: netbox/netbox/plugins/navigation.py:73 msgid "Button color must be a choice within ButtonColorChoices." msgstr "De kleur van de knop moet een keuze zijn binnen ButtonColorChoices." -#: netbox/plugins/registration.py:25 +#: netbox/netbox/plugins/registration.py:25 #, python-brace-format msgid "" "PluginTemplateExtension class {template_extension} was passed as an " @@ -10686,7 +11387,7 @@ msgstr "" "PluginTemplateExtension-klasse {template_extension} werd als voorbeeld " "aangenomen!" -#: netbox/plugins/registration.py:31 +#: netbox/netbox/plugins/registration.py:31 #, python-brace-format msgid "" "{template_extension} is not a subclass of " @@ -10695,196 +11396,197 @@ msgstr "" "{template_extension} is geen subklasse van de " "NetBox.Plugins.PluginTemplateExtension!" -#: netbox/plugins/registration.py:51 +#: netbox/netbox/plugins/registration.py:51 #, python-brace-format msgid "{item} must be an instance of netbox.plugins.PluginMenuItem" msgstr "{item} moet een exemplaar zijn van NetBox.Plugins.PluginMenuItem" -#: netbox/plugins/registration.py:62 +#: netbox/netbox/plugins/registration.py:62 #, 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/plugins/registration.py:67 +#: netbox/netbox/plugins/registration.py:67 #, python-brace-format msgid "{button} must be an instance of netbox.plugins.PluginMenuButton" msgstr "{button} moet een exemplaar zijn van NetBox.Plugins.PluginMenuButton" -#: netbox/plugins/templates.py:37 +#: netbox/netbox/plugins/templates.py:37 msgid "extra_context must be a dictionary" msgstr "extra_context moet een woordenboek zijn" -#: netbox/preferences.py:19 +#: netbox/netbox/preferences.py:19 msgid "HTMX Navigation" msgstr "HTMX-navigatie" -#: netbox/preferences.py:24 +#: netbox/netbox/preferences.py:24 msgid "Enable dynamic UI navigation" msgstr "Dynamische UI-navigatie inschakelen" -#: netbox/preferences.py:26 +#: netbox/netbox/preferences.py:26 msgid "Experimental feature" msgstr "Experimentele functie" -#: netbox/preferences.py:29 +#: netbox/netbox/preferences.py:29 msgid "Language" msgstr "Taal" -#: netbox/preferences.py:34 +#: netbox/netbox/preferences.py:34 msgid "Forces UI translation to the specified language" msgstr "Forceert UI-vertaling naar de opgegeven taal" -#: netbox/preferences.py:36 +#: netbox/netbox/preferences.py:36 msgid "Support for translation has been disabled locally" msgstr "Ondersteuning voor vertaling is lokaal uitgeschakeld" -#: netbox/preferences.py:42 +#: netbox/netbox/preferences.py:42 msgid "Page length" msgstr "Lengte van de pagina" -#: netbox/preferences.py:44 +#: netbox/netbox/preferences.py:44 msgid "The default number of objects to display per page" msgstr "Het standaardaantal objecten dat per pagina moet worden weergegeven" -#: netbox/preferences.py:48 +#: netbox/netbox/preferences.py:48 msgid "Paginator placement" msgstr "Plaatsing van de paginator" -#: netbox/preferences.py:50 +#: netbox/netbox/preferences.py:50 msgid "Bottom" msgstr "Onderkant" -#: netbox/preferences.py:51 +#: netbox/netbox/preferences.py:51 msgid "Top" msgstr "Bovenkant" -#: netbox/preferences.py:52 +#: netbox/netbox/preferences.py:52 msgid "Both" msgstr "Allebei" -#: netbox/preferences.py:55 +#: netbox/netbox/preferences.py:55 msgid "Where the paginator controls will be displayed relative to a table" msgstr "" "Waar de bedieningselementen van de paginator worden weergegeven ten opzichte" " van een tabel" -#: netbox/preferences.py:60 +#: netbox/netbox/preferences.py:60 msgid "Data format" msgstr "Formaat van de gegevens" -#: netbox/preferences.py:65 +#: netbox/netbox/preferences.py:65 msgid "The preferred syntax for displaying generic data within the UI" msgstr "" "De voorkeurssyntaxis voor het weergeven van generieke gegevens in de " "gebruikersinterface" -#: netbox/registry.py:14 +#: netbox/netbox/registry.py:14 #, python-brace-format msgid "Invalid store: {key}" msgstr "Ongeldige winkel: {key}" -#: netbox/registry.py:17 +#: netbox/netbox/registry.py:17 msgid "Cannot add stores to registry after initialization" msgstr "Kan na initialisatie geen winkels aan het register toevoegen" -#: netbox/registry.py:20 +#: netbox/netbox/registry.py:20 msgid "Cannot delete stores from registry" msgstr "Kan winkels niet verwijderen uit het register" -#: netbox/settings.py:760 +#: netbox/netbox/settings.py:760 msgid "Czech" msgstr "Tsjechisch" -#: netbox/settings.py:761 +#: netbox/netbox/settings.py:761 msgid "Danish" msgstr "Deens" -#: netbox/settings.py:762 +#: netbox/netbox/settings.py:762 msgid "German" msgstr "Duits" -#: netbox/settings.py:763 +#: netbox/netbox/settings.py:763 msgid "English" msgstr "Engels" -#: netbox/settings.py:764 +#: netbox/netbox/settings.py:764 msgid "Spanish" msgstr "Spaans" -#: netbox/settings.py:765 +#: netbox/netbox/settings.py:765 msgid "French" msgstr "Frans" -#: netbox/settings.py:766 +#: netbox/netbox/settings.py:766 msgid "Italian" msgstr "Italiaans" -#: netbox/settings.py:767 +#: netbox/netbox/settings.py:767 msgid "Japanese" msgstr "Japans" -#: netbox/settings.py:768 +#: netbox/netbox/settings.py:768 msgid "Dutch" msgstr "Nederlands" -#: netbox/settings.py:769 +#: netbox/netbox/settings.py:769 msgid "Polish" msgstr "Pools" -#: netbox/settings.py:770 +#: netbox/netbox/settings.py:770 msgid "Portuguese" msgstr "Portugees" -#: netbox/settings.py:771 +#: netbox/netbox/settings.py:771 msgid "Russian" msgstr "Russisch" -#: netbox/settings.py:772 +#: netbox/netbox/settings.py:772 msgid "Turkish" msgstr "Turks" -#: netbox/settings.py:773 +#: netbox/netbox/settings.py:773 msgid "Ukrainian" msgstr "Oekraïens" -#: netbox/settings.py:774 +#: netbox/netbox/settings.py:774 msgid "Chinese" msgstr "Chinees" -#: netbox/tables/columns.py:176 +#: netbox/netbox/tables/columns.py:176 msgid "Select all" msgstr "Alles selecteren" -#: netbox/tables/columns.py:189 +#: netbox/netbox/tables/columns.py:189 msgid "Toggle all" msgstr "Alles omschakelen" -#: netbox/tables/columns.py:300 +#: netbox/netbox/tables/columns.py:300 msgid "Toggle Dropdown" msgstr "Dropdown in- en uitschakelen" -#: netbox/tables/columns.py:572 templates/core/job.html:53 +#: netbox/netbox/tables/columns.py:572 netbox/templates/core/job.html:53 msgid "Error" msgstr "Fout" -#: netbox/tables/tables.py:58 +#: netbox/netbox/tables/tables.py:58 #, python-brace-format msgid "No {model_name} found" msgstr "Nee {model_name} gevonden" -#: netbox/tables/tables.py:249 templates/generic/bulk_import.html:117 +#: netbox/netbox/tables/tables.py:249 +#: netbox/templates/generic/bulk_import.html:117 msgid "Field" msgstr "Veld" -#: netbox/tables/tables.py:252 +#: netbox/netbox/tables/tables.py:252 msgid "Value" msgstr "Waarde" -#: netbox/tests/dummy_plugin/navigation.py:29 +#: netbox/netbox/tests/dummy_plugin/navigation.py:29 msgid "Dummy Plugin" msgstr "Dummy-plug-in" -#: netbox/views/generic/bulk_views.py:114 +#: netbox/netbox/views/generic/bulk_views.py:114 #, python-brace-format msgid "" "There was an error rendering the selected export template ({template}): " @@ -10893,57 +11595,57 @@ msgstr "" "Er is een fout opgetreden bij het weergeven van de geselecteerde " "exportsjabloon ({template}): {error}" -#: netbox/views/generic/bulk_views.py:416 +#: netbox/netbox/views/generic/bulk_views.py:416 #, python-brace-format msgid "Row {i}: Object with ID {id} does not exist" msgstr "Rij {i}: Object met ID {id} bestaat niet" -#: netbox/views/generic/bulk_views.py:702 -#: netbox/views/generic/bulk_views.py:900 -#: netbox/views/generic/bulk_views.py:948 +#: netbox/netbox/views/generic/bulk_views.py:709 +#: netbox/netbox/views/generic/bulk_views.py:910 +#: netbox/netbox/views/generic/bulk_views.py:958 #, python-brace-format msgid "No {object_type} were selected." msgstr "Nee {object_type} zijn geselecteerd." -#: netbox/views/generic/bulk_views.py:782 +#: netbox/netbox/views/generic/bulk_views.py:788 #, python-brace-format msgid "Renamed {count} {object_type}" msgstr "Hernoemd {count} {object_type}" -#: netbox/views/generic/bulk_views.py:878 +#: netbox/netbox/views/generic/bulk_views.py:888 #, python-brace-format msgid "Deleted {count} {object_type}" msgstr "Verwijderd {count} {object_type}" -#: netbox/views/generic/feature_views.py:40 +#: netbox/netbox/views/generic/feature_views.py:40 msgid "Changelog" msgstr "Log met wijzigingen" -#: netbox/views/generic/feature_views.py:93 +#: netbox/netbox/views/generic/feature_views.py:93 msgid "Journal" msgstr "Tijdschrift" -#: netbox/views/generic/feature_views.py:207 +#: netbox/netbox/views/generic/feature_views.py:207 msgid "Unable to synchronize data: No data file set." msgstr "" "Kan gegevens niet synchroniseren: er is geen gegevensbestand ingesteld." -#: netbox/views/generic/feature_views.py:211 +#: netbox/netbox/views/generic/feature_views.py:211 #, python-brace-format msgid "Synchronized data for {object_type} {object}." msgstr "Gesynchroniseerde gegevens voor {object_type} {object}." -#: netbox/views/generic/feature_views.py:236 +#: netbox/netbox/views/generic/feature_views.py:236 #, python-brace-format msgid "Synced {count} {object_type}" msgstr "Gesynchroniseerd {count} {object_type}" -#: netbox/views/generic/object_views.py:108 +#: netbox/netbox/views/generic/object_views.py:108 #, python-brace-format msgid "{class_name} must implement get_children()" msgstr "{class_name} moet get_children () implementeren" -#: netbox/views/misc.py:44 +#: netbox/netbox/views/misc.py:46 msgid "" "There was an error loading the dashboard configuration. A default dashboard " "is in use." @@ -10951,705 +11653,747 @@ msgstr "" "Er is een fout opgetreden tijdens het laden van de dashboardconfiguratie. Er" " wordt een standaarddashboard gebruikt." -#: templates/403.html:4 +#: netbox/templates/403.html:4 msgid "Access Denied" msgstr "Toegang geweigerd" -#: templates/403.html:9 +#: netbox/templates/403.html:9 msgid "You do not have permission to access this page" msgstr "Je hebt geen toestemming om deze pagina te openen" -#: templates/404.html:4 +#: netbox/templates/404.html:4 msgid "Page Not Found" msgstr "Pagina niet gevonden" -#: templates/404.html:9 +#: netbox/templates/404.html:9 msgid "The requested page does not exist" msgstr "De opgevraagde pagina bestaat niet" -#: templates/500.html:7 templates/500.html:18 +#: netbox/templates/500.html:7 netbox/templates/500.html:18 msgid "Server Error" msgstr "Serverfout" -#: templates/500.html:23 +#: netbox/templates/500.html:23 msgid "There was a problem with your request. Please contact an administrator" msgstr "" "Er was een probleem met je aanvraag. Neem contact op met een beheerder" -#: templates/500.html:28 +#: netbox/templates/500.html:28 msgid "The complete exception is provided below" msgstr "De volledige uitzondering wordt hieronder gegeven" -#: templates/500.html:33 templates/core/system.html:40 +#: netbox/templates/500.html:33 netbox/templates/core/system.html:40 msgid "Python version" msgstr "Python-versie" -#: templates/500.html:34 +#: netbox/templates/500.html:34 msgid "NetBox version" msgstr "NetBox-versie" -#: templates/500.html:36 +#: netbox/templates/500.html:36 msgid "None installed" msgstr "Niet geïnstalleerd" -#: templates/500.html:39 +#: netbox/templates/500.html:39 msgid "If further assistance is required, please post to the" msgstr "Als er meer hulp nodig is, stuur dan een bericht naar de" -#: templates/500.html:39 +#: netbox/templates/500.html:39 msgid "NetBox discussion forum" msgstr "NetBox-discussieforum" -#: templates/500.html:39 +#: netbox/templates/500.html:39 msgid "on GitHub" msgstr "op GitHub" -#: templates/500.html:42 templates/base/40x.html:17 +#: netbox/templates/500.html:42 netbox/templates/base/40x.html:17 msgid "Home Page" msgstr "Startpagina" -#: templates/account/base.html:7 templates/inc/user_menu.html:45 -#: vpn/forms/bulk_edit.py:255 vpn/forms/filtersets.py:189 -#: vpn/forms/model_forms.py:379 +#: netbox/templates/account/base.html:7 netbox/templates/inc/user_menu.html:45 +#: netbox/vpn/forms/bulk_edit.py:255 netbox/vpn/forms/filtersets.py:189 +#: netbox/vpn/forms/model_forms.py:379 msgid "Profile" msgstr "Profiel" -#: templates/account/base.html:13 templates/account/notifications.html:7 -#: templates/inc/user_menu.html:15 +#: netbox/templates/account/base.html:13 +#: netbox/templates/account/notifications.html:7 +#: netbox/templates/inc/user_menu.html:15 msgid "Notifications" msgstr "Meldingen" -#: templates/account/base.html:16 templates/account/subscriptions.html:7 -#: templates/inc/user_menu.html:51 +#: netbox/templates/account/base.html:16 +#: netbox/templates/account/subscriptions.html:7 +#: netbox/templates/inc/user_menu.html:51 msgid "Subscriptions" msgstr "Abonnementen" -#: templates/account/base.html:19 templates/inc/user_menu.html:54 +#: netbox/templates/account/base.html:19 +#: netbox/templates/inc/user_menu.html:54 msgid "Preferences" msgstr "Voorkeuren" -#: templates/account/password.html:5 +#: netbox/templates/account/password.html:5 msgid "Change Password" msgstr "Wachtwoord wijzigen" -#: templates/account/password.html:19 templates/account/preferences.html:77 -#: templates/core/configrevision_restore.html:63 -#: templates/dcim/devicebay_populate.html:34 -#: templates/dcim/virtualchassis_add_member.html:26 -#: templates/dcim/virtualchassis_edit.html:103 -#: templates/extras/object_journal.html:26 templates/extras/script.html:38 -#: templates/generic/bulk_add_component.html:67 -#: templates/generic/bulk_delete.html:65 templates/generic/bulk_edit.html:106 -#: templates/generic/bulk_import.html:56 templates/generic/bulk_import.html:78 -#: templates/generic/bulk_import.html:100 -#: templates/generic/bulk_remove.html:62 templates/generic/bulk_rename.html:63 -#: templates/generic/confirmation_form.html:19 -#: templates/generic/object_edit.html:72 templates/htmx/delete_form.html:53 -#: templates/htmx/delete_form.html:55 templates/ipam/ipaddress_assign.html:28 -#: templates/virtualization/cluster_add_devices.html:30 +#: netbox/templates/account/password.html:19 +#: netbox/templates/account/preferences.html:77 +#: netbox/templates/core/configrevision_restore.html:63 +#: netbox/templates/dcim/devicebay_populate.html:34 +#: netbox/templates/dcim/virtualchassis_add_member.html:26 +#: netbox/templates/dcim/virtualchassis_edit.html:103 +#: netbox/templates/extras/object_journal.html:26 +#: netbox/templates/extras/script.html:38 +#: netbox/templates/generic/bulk_add_component.html:67 +#: netbox/templates/generic/bulk_delete.html:65 +#: netbox/templates/generic/bulk_edit.html:106 +#: netbox/templates/generic/bulk_import.html:56 +#: netbox/templates/generic/bulk_import.html:78 +#: netbox/templates/generic/bulk_import.html:100 +#: netbox/templates/generic/bulk_remove.html:62 +#: netbox/templates/generic/bulk_rename.html:63 +#: netbox/templates/generic/confirmation_form.html:19 +#: netbox/templates/generic/object_edit.html:72 +#: netbox/templates/htmx/delete_form.html:53 +#: netbox/templates/htmx/delete_form.html:55 +#: netbox/templates/ipam/ipaddress_assign.html:28 +#: netbox/templates/virtualization/cluster_add_devices.html:30 msgid "Cancel" msgstr "Annuleer" -#: templates/account/password.html:20 templates/account/preferences.html:78 -#: templates/dcim/devicebay_populate.html:35 -#: templates/dcim/virtualchassis_add_member.html:28 -#: templates/dcim/virtualchassis_edit.html:105 -#: templates/extras/dashboard/widget_add.html:26 -#: templates/extras/dashboard/widget_config.html:19 -#: templates/extras/object_journal.html:27 -#: templates/generic/object_edit.html:75 -#: utilities/templates/helpers/applied_filters.html:16 -#: utilities/templates/helpers/table_config_form.html:40 +#: netbox/templates/account/password.html:20 +#: netbox/templates/account/preferences.html:78 +#: netbox/templates/dcim/devicebay_populate.html:35 +#: netbox/templates/dcim/virtualchassis_add_member.html:28 +#: netbox/templates/dcim/virtualchassis_edit.html:105 +#: netbox/templates/extras/dashboard/widget_add.html:26 +#: netbox/templates/extras/dashboard/widget_config.html:19 +#: netbox/templates/extras/object_journal.html:27 +#: netbox/templates/generic/object_edit.html:75 +#: netbox/utilities/templates/helpers/applied_filters.html:16 +#: netbox/utilities/templates/helpers/table_config_form.html:40 msgid "Save" msgstr "Opslaan" -#: templates/account/preferences.html:34 +#: netbox/templates/account/preferences.html:34 msgid "Table Configurations" msgstr "Tabelconfiguraties" -#: templates/account/preferences.html:39 +#: netbox/templates/account/preferences.html:39 msgid "Clear table preferences" msgstr "Tabelvoorkeuren wissen" -#: templates/account/preferences.html:47 +#: netbox/templates/account/preferences.html:47 msgid "Toggle All" msgstr "Alles omschakelen" -#: templates/account/preferences.html:49 +#: netbox/templates/account/preferences.html:49 msgid "Table" msgstr "Tafel" -#: templates/account/preferences.html:50 +#: netbox/templates/account/preferences.html:50 msgid "Ordering" msgstr "Bestellen" -#: templates/account/preferences.html:51 +#: netbox/templates/account/preferences.html:51 msgid "Columns" msgstr "Kolommen" -#: templates/account/preferences.html:71 templates/dcim/cable_trace.html:113 -#: templates/extras/object_configcontext.html:43 +#: netbox/templates/account/preferences.html:71 +#: netbox/templates/dcim/cable_trace.html:113 +#: netbox/templates/extras/object_configcontext.html:43 msgid "None found" msgstr "Niets gevonden" -#: templates/account/profile.html:6 +#: netbox/templates/account/profile.html:6 msgid "User Profile" msgstr "Gebruikersprofiel" -#: templates/account/profile.html:12 +#: netbox/templates/account/profile.html:12 msgid "Account Details" msgstr "Accountgegevens" -#: templates/account/profile.html:29 templates/tenancy/contact.html:43 -#: templates/users/user.html:25 tenancy/forms/bulk_edit.py:109 +#: netbox/templates/account/profile.html:29 +#: netbox/templates/tenancy/contact.html:43 +#: netbox/templates/users/user.html:25 netbox/tenancy/forms/bulk_edit.py:109 msgid "Email" msgstr "Email" -#: templates/account/profile.html:33 templates/users/user.html:29 +#: netbox/templates/account/profile.html:33 +#: netbox/templates/users/user.html:29 msgid "Account Created" msgstr "Account aangemaakt" -#: templates/account/profile.html:37 templates/users/user.html:33 +#: netbox/templates/account/profile.html:37 +#: netbox/templates/users/user.html:33 msgid "Last Login" msgstr "Laatste aanmelding" -#: templates/account/profile.html:41 templates/users/user.html:45 +#: netbox/templates/account/profile.html:41 +#: netbox/templates/users/user.html:45 msgid "Superuser" msgstr "Superuser" -#: templates/account/profile.html:45 templates/inc/user_menu.html:31 -#: templates/users/user.html:41 +#: netbox/templates/account/profile.html:45 +#: netbox/templates/inc/user_menu.html:31 netbox/templates/users/user.html:41 msgid "Staff" msgstr "Staf" -#: templates/account/profile.html:53 templates/users/objectpermission.html:82 -#: templates/users/user.html:53 +#: netbox/templates/account/profile.html:53 +#: netbox/templates/users/objectpermission.html:82 +#: netbox/templates/users/user.html:53 msgid "Assigned Groups" msgstr "Toegewezen groepen" -#: templates/account/profile.html:58 -#: templates/circuits/circuit_terminations_swap.html:18 -#: templates/circuits/circuit_terminations_swap.html:26 -#: templates/circuits/circuittermination.html:34 -#: templates/circuits/inc/circuit_termination.html:68 -#: templates/core/objectchange.html:124 templates/core/objectchange.html:142 -#: templates/dcim/devicebay.html:59 -#: templates/dcim/inc/panels/inventory_items.html:45 -#: templates/dcim/interface.html:296 templates/dcim/modulebay.html:80 -#: templates/extras/configcontext.html:70 templates/extras/eventrule.html:66 -#: templates/extras/htmx/script_result.html:60 -#: templates/extras/webhook.html:65 templates/extras/webhook.html:75 -#: templates/inc/panel_table.html:13 templates/inc/panels/comments.html:10 -#: templates/ipam/inc/panels/fhrp_groups.html:56 templates/users/group.html:34 -#: templates/users/group.html:44 templates/users/objectpermission.html:77 -#: templates/users/objectpermission.html:87 templates/users/user.html:58 -#: templates/users/user.html:68 +#: netbox/templates/account/profile.html:58 +#: netbox/templates/circuits/circuit_terminations_swap.html:18 +#: netbox/templates/circuits/circuit_terminations_swap.html:26 +#: netbox/templates/circuits/circuittermination.html:34 +#: netbox/templates/circuits/inc/circuit_termination.html:68 +#: netbox/templates/core/objectchange.html:124 +#: 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/modulebay.html:80 +#: netbox/templates/extras/configcontext.html:70 +#: netbox/templates/extras/eventrule.html:66 +#: netbox/templates/extras/htmx/script_result.html:60 +#: netbox/templates/extras/webhook.html:65 +#: netbox/templates/extras/webhook.html:75 +#: netbox/templates/inc/panel_table.html:13 +#: netbox/templates/inc/panels/comments.html:10 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:56 +#: netbox/templates/users/group.html:34 netbox/templates/users/group.html:44 +#: netbox/templates/users/objectpermission.html:77 +#: netbox/templates/users/objectpermission.html:87 +#: netbox/templates/users/user.html:58 netbox/templates/users/user.html:68 msgid "None" msgstr "Geen" -#: templates/account/profile.html:68 templates/users/user.html:78 +#: netbox/templates/account/profile.html:68 +#: netbox/templates/users/user.html:78 msgid "Recent Activity" msgstr "Recente activiteit" -#: templates/account/token.html:8 templates/account/token_list.html:6 +#: netbox/templates/account/token.html:8 +#: netbox/templates/account/token_list.html:6 msgid "My API Tokens" msgstr "Mijn API-tokens" -#: templates/account/token.html:11 templates/account/token.html:19 -#: templates/users/token.html:6 templates/users/token.html:14 -#: users/forms/filtersets.py:120 +#: netbox/templates/account/token.html:11 +#: netbox/templates/account/token.html:19 netbox/templates/users/token.html:6 +#: netbox/templates/users/token.html:14 netbox/users/forms/filtersets.py:120 msgid "Token" msgstr "Token" -#: templates/account/token.html:39 templates/users/token.html:31 -#: users/forms/bulk_edit.py:107 +#: netbox/templates/account/token.html:39 netbox/templates/users/token.html:31 +#: netbox/users/forms/bulk_edit.py:107 msgid "Write enabled" msgstr "Schrijven ingeschakeld" -#: templates/account/token.html:51 templates/users/token.html:43 +#: netbox/templates/account/token.html:51 netbox/templates/users/token.html:43 msgid "Last used" msgstr "Laatst gebruikt" -#: templates/account/token_list.html:12 +#: netbox/templates/account/token_list.html:12 msgid "Add a Token" msgstr "Een token toevoegen" -#: templates/base/base.html:22 templates/home.html:27 +#: netbox/templates/base/base.html:22 netbox/templates/home.html:27 msgid "Home" msgstr "Home" -#: templates/base/layout.html:25 +#: netbox/templates/base/layout.html:25 msgid "NetBox Motif" msgstr "NetBox-motief" -#: templates/base/layout.html:38 templates/base/layout.html:39 -#: templates/login.html:14 templates/login.html:15 +#: netbox/templates/base/layout.html:38 netbox/templates/base/layout.html:39 +#: netbox/templates/login.html:14 netbox/templates/login.html:15 msgid "NetBox Logo" msgstr "NetBox-logo" -#: templates/base/layout.html:150 templates/base/layout.html:151 +#: netbox/templates/base/layout.html:150 netbox/templates/base/layout.html:151 msgid "Docs" msgstr "Documenten" -#: templates/base/layout.html:156 templates/base/layout.html:157 -#: templates/rest_framework/api.html:10 +#: netbox/templates/base/layout.html:156 netbox/templates/base/layout.html:157 +#: netbox/templates/rest_framework/api.html:10 msgid "REST API" msgstr "REST API" -#: templates/base/layout.html:162 templates/base/layout.html:163 +#: netbox/templates/base/layout.html:162 netbox/templates/base/layout.html:163 msgid "REST API documentation" msgstr "REST API-documentatie" -#: templates/base/layout.html:169 templates/base/layout.html:170 +#: netbox/templates/base/layout.html:169 netbox/templates/base/layout.html:170 msgid "GraphQL API" msgstr "GraphQL-API" -#: templates/base/layout.html:185 templates/base/layout.html:186 +#: netbox/templates/base/layout.html:185 netbox/templates/base/layout.html:186 msgid "NetBox Labs Support" msgstr "Ondersteuning voor NetBox Labs" -#: templates/base/layout.html:194 templates/base/layout.html:195 +#: netbox/templates/base/layout.html:194 netbox/templates/base/layout.html:195 msgid "Source Code" msgstr "Broncode" -#: templates/base/layout.html:200 templates/base/layout.html:201 +#: netbox/templates/base/layout.html:200 netbox/templates/base/layout.html:201 msgid "Community" msgstr "Gemeenschap" -#: templates/circuits/circuit.html:47 +#: netbox/templates/circuits/circuit.html:47 msgid "Install Date" msgstr "Datum van installatie" -#: templates/circuits/circuit.html:51 +#: netbox/templates/circuits/circuit.html:51 msgid "Termination Date" msgstr "Beëindigingsdatum" -#: templates/circuits/circuit.html:70 -#: templates/ipam/inc/panels/fhrp_groups.html:15 +#: netbox/templates/circuits/circuit.html:70 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:15 msgid "Assign Group" msgstr "Groep toewijzen" -#: templates/circuits/circuit_terminations_swap.html:4 +#: netbox/templates/circuits/circuit_terminations_swap.html:4 msgid "Swap Circuit Terminations" msgstr "Swap Circuit-afsluitingen" -#: templates/circuits/circuit_terminations_swap.html:8 +#: netbox/templates/circuits/circuit_terminations_swap.html:8 #, python-format msgid "Swap these terminations for circuit %(circuit)s?" msgstr "Verwissel deze aansluitingen voor een circuit %(circuit)s?" -#: templates/circuits/circuit_terminations_swap.html:14 +#: netbox/templates/circuits/circuit_terminations_swap.html:14 msgid "A side" msgstr "A-kant" -#: templates/circuits/circuit_terminations_swap.html:22 +#: netbox/templates/circuits/circuit_terminations_swap.html:22 msgid "Z side" msgstr "Z-kant" -#: templates/circuits/circuitgroup.html:16 +#: netbox/templates/circuits/circuitgroup.html:16 msgid "Assign Circuit" msgstr "Circuit toewijzen" -#: templates/circuits/circuitgroupassignment.html:19 +#: netbox/templates/circuits/circuitgroupassignment.html:19 msgid "Circuit Group Assignment" msgstr "Circuitgroepopdracht" -#: templates/circuits/circuittype.html:10 +#: netbox/templates/circuits/circuittype.html:10 msgid "Add Circuit" msgstr "Circuit toevoegen" -#: templates/circuits/circuittype.html:19 +#: netbox/templates/circuits/circuittype.html:19 msgid "Circuit Type" msgstr "Circuittype" -#: templates/circuits/inc/circuit_termination.html:10 -#: templates/dcim/manufacturer.html:11 -#: templates/generic/bulk_add_component.html:22 -#: templates/users/objectpermission.html:38 -#: utilities/templates/buttons/add.html:4 -#: utilities/templates/helpers/table_config_form.html:20 +#: netbox/templates/circuits/inc/circuit_termination.html:10 +#: netbox/templates/dcim/manufacturer.html:11 +#: netbox/templates/generic/bulk_add_component.html:22 +#: netbox/templates/users/objectpermission.html:38 +#: netbox/utilities/templates/buttons/add.html:4 +#: netbox/utilities/templates/helpers/table_config_form.html:20 msgid "Add" msgstr "Toevoegen" -#: templates/circuits/inc/circuit_termination.html:15 -#: templates/circuits/inc/circuit_termination_fields.html:36 -#: templates/dcim/inc/panels/inventory_items.html:32 -#: templates/dcim/powerpanel.html:56 templates/extras/script_list.html:30 -#: templates/generic/object_edit.html:47 -#: templates/ipam/inc/ipaddress_edit_header.html:7 -#: templates/ipam/inc/panels/fhrp_groups.html:43 -#: utilities/templates/buttons/edit.html:3 +#: netbox/templates/circuits/inc/circuit_termination.html:15 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:36 +#: netbox/templates/dcim/inc/panels/inventory_items.html:32 +#: netbox/templates/dcim/powerpanel.html:56 +#: netbox/templates/extras/script_list.html:30 +#: netbox/templates/generic/object_edit.html:47 +#: netbox/templates/ipam/inc/ipaddress_edit_header.html:7 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:43 +#: netbox/utilities/templates/buttons/edit.html:3 msgid "Edit" msgstr "Bewerken" -#: templates/circuits/inc/circuit_termination.html:18 +#: netbox/templates/circuits/inc/circuit_termination.html:18 msgid "Swap" msgstr "Ruil" -#: templates/circuits/inc/circuit_termination_fields.html:19 -#: templates/dcim/consoleport.html:59 templates/dcim/consoleserverport.html:60 -#: templates/dcim/powerfeed.html:114 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:19 +#: netbox/templates/dcim/consoleport.html:59 +#: netbox/templates/dcim/consoleserverport.html:60 +#: netbox/templates/dcim/powerfeed.html:114 msgid "Marked as connected" msgstr "Gemarkeerd als verbonden" -#: templates/circuits/inc/circuit_termination_fields.html:21 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:21 msgid "to" msgstr "naar" -#: templates/circuits/inc/circuit_termination_fields.html:31 -#: templates/circuits/inc/circuit_termination_fields.html:32 -#: templates/dcim/frontport.html:80 -#: templates/dcim/inc/connection_endpoints.html:7 -#: templates/dcim/interface.html:154 templates/dcim/rearport.html:76 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:31 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:32 +#: netbox/templates/dcim/frontport.html:80 +#: netbox/templates/dcim/inc/connection_endpoints.html:7 +#: netbox/templates/dcim/interface.html:154 +#: netbox/templates/dcim/rearport.html:76 msgid "Trace" msgstr "Spoor" -#: templates/circuits/inc/circuit_termination_fields.html:35 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:35 msgid "Edit cable" msgstr "Kabel bewerken" -#: templates/circuits/inc/circuit_termination_fields.html:40 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:40 msgid "Remove cable" msgstr "Kabel verwijderen" -#: templates/circuits/inc/circuit_termination_fields.html:41 -#: templates/dcim/bulk_disconnect.html:5 -#: templates/dcim/device/consoleports.html:12 -#: templates/dcim/device/consoleserverports.html:12 -#: templates/dcim/device/frontports.html:12 -#: templates/dcim/device/interfaces.html:16 -#: templates/dcim/device/poweroutlets.html:12 -#: templates/dcim/device/powerports.html:12 -#: templates/dcim/device/rearports.html:12 templates/dcim/powerpanel.html:61 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:41 +#: netbox/templates/dcim/bulk_disconnect.html:5 +#: netbox/templates/dcim/device/consoleports.html:12 +#: netbox/templates/dcim/device/consoleserverports.html:12 +#: netbox/templates/dcim/device/frontports.html:12 +#: netbox/templates/dcim/device/interfaces.html:16 +#: netbox/templates/dcim/device/poweroutlets.html:12 +#: netbox/templates/dcim/device/powerports.html:12 +#: netbox/templates/dcim/device/rearports.html:12 +#: netbox/templates/dcim/powerpanel.html:61 msgid "Disconnect" msgstr "Verbinding verbreken" -#: templates/circuits/inc/circuit_termination_fields.html:48 -#: templates/dcim/consoleport.html:69 templates/dcim/consoleserverport.html:70 -#: templates/dcim/frontport.html:102 templates/dcim/interface.html:180 -#: templates/dcim/interface.html:200 templates/dcim/powerfeed.html:127 -#: templates/dcim/poweroutlet.html:71 templates/dcim/poweroutlet.html:72 -#: templates/dcim/powerport.html:73 templates/dcim/rearport.html:98 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:48 +#: netbox/templates/dcim/consoleport.html:69 +#: netbox/templates/dcim/consoleserverport.html:70 +#: netbox/templates/dcim/frontport.html:102 +#: netbox/templates/dcim/interface.html:180 +#: netbox/templates/dcim/interface.html:200 +#: netbox/templates/dcim/powerfeed.html:127 +#: netbox/templates/dcim/poweroutlet.html:71 +#: netbox/templates/dcim/poweroutlet.html:72 +#: netbox/templates/dcim/powerport.html:73 +#: netbox/templates/dcim/rearport.html:98 msgid "Connect" msgstr "Verbind" -#: templates/circuits/inc/circuit_termination_fields.html:70 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:70 msgid "Downstream" msgstr "Stroomafwaarts" -#: templates/circuits/inc/circuit_termination_fields.html:71 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:71 msgid "Upstream" msgstr "Stroomopwaarts" -#: templates/circuits/inc/circuit_termination_fields.html:80 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:80 msgid "Cross-Connect" msgstr "Cross-connect" -#: templates/circuits/inc/circuit_termination_fields.html:84 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:84 msgid "Patch Panel/Port" msgstr "Patchpaneel/poort" -#: templates/circuits/provider.html:11 +#: netbox/templates/circuits/provider.html:11 msgid "Add circuit" msgstr "Circuit toevoegen" -#: templates/circuits/provideraccount.html:17 +#: netbox/templates/circuits/provideraccount.html:17 msgid "Provider Account" msgstr "Account van de provider" -#: templates/core/configrevision.html:35 +#: netbox/templates/core/configrevision.html:35 msgid "Configuration Data" msgstr "Configuratiegegevens" -#: templates/core/configrevision.html:40 +#: netbox/templates/core/configrevision.html:40 msgid "Comment" msgstr "Commentaar" -#: templates/core/configrevision_restore.html:8 -#: templates/core/configrevision_restore.html:25 -#: templates/core/configrevision_restore.html:64 +#: netbox/templates/core/configrevision_restore.html:8 +#: netbox/templates/core/configrevision_restore.html:25 +#: netbox/templates/core/configrevision_restore.html:64 msgid "Restore" msgstr "Herstellen" -#: templates/core/configrevision_restore.html:36 +#: netbox/templates/core/configrevision_restore.html:36 msgid "Parameter" msgstr "Parameter" -#: templates/core/configrevision_restore.html:37 +#: netbox/templates/core/configrevision_restore.html:37 msgid "Current Value" msgstr "Huidige waarde" -#: templates/core/configrevision_restore.html:38 +#: netbox/templates/core/configrevision_restore.html:38 msgid "New Value" msgstr "Nieuwe waarde" -#: templates/core/configrevision_restore.html:50 +#: netbox/templates/core/configrevision_restore.html:50 msgid "Changed" msgstr "Gewijzigd" -#: templates/core/datafile.html:42 templates/ipam/iprange.html:25 -#: templates/virtualization/virtualdisk.html:29 -#: virtualization/tables/virtualmachines.py:198 +#: netbox/templates/core/datafile.html:42 +#: netbox/templates/ipam/iprange.html:25 +#: netbox/templates/virtualization/virtualdisk.html:29 +#: netbox/virtualization/tables/virtualmachines.py:198 msgid "Size" msgstr "Grootte" -#: templates/core/datafile.html:43 +#: netbox/templates/core/datafile.html:43 msgid "bytes" msgstr "bytes" -#: templates/core/datafile.html:46 +#: netbox/templates/core/datafile.html:46 msgid "SHA256 Hash" msgstr "SHA256-hash" -#: templates/core/datasource.html:14 templates/core/datasource.html:20 -#: utilities/templates/buttons/sync.html:5 +#: netbox/templates/core/datasource.html:14 +#: netbox/templates/core/datasource.html:20 +#: netbox/utilities/templates/buttons/sync.html:5 msgid "Sync" msgstr "Synchroniseer" -#: templates/core/datasource.html:50 +#: netbox/templates/core/datasource.html:50 msgid "Last synced" msgstr "Laatst gesynchroniseerd" -#: templates/core/datasource.html:84 +#: netbox/templates/core/datasource.html:84 msgid "Backend" msgstr "Backend" -#: templates/core/datasource.html:99 +#: netbox/templates/core/datasource.html:99 msgid "No parameters defined" msgstr "Geen parameters gedefinieerd" -#: templates/core/datasource.html:114 +#: netbox/templates/core/datasource.html:114 msgid "Files" msgstr "bestanden" -#: templates/core/inc/config_data.html:7 +#: netbox/templates/core/inc/config_data.html:7 msgid "Rack elevations" msgstr "Rackverhogingen" -#: templates/core/inc/config_data.html:10 +#: netbox/templates/core/inc/config_data.html:10 msgid "Default unit height" msgstr "Standaardeenheidshoogte" -#: templates/core/inc/config_data.html:14 +#: netbox/templates/core/inc/config_data.html:14 msgid "Default unit width" msgstr "Breedte van de standaardeenheid" -#: templates/core/inc/config_data.html:20 +#: netbox/templates/core/inc/config_data.html:20 msgid "Power feeds" msgstr "Stroomvoedingen" -#: templates/core/inc/config_data.html:23 +#: netbox/templates/core/inc/config_data.html:23 msgid "Default voltage" msgstr "Standaardspanning" -#: templates/core/inc/config_data.html:27 +#: netbox/templates/core/inc/config_data.html:27 msgid "Default amperage" msgstr "Standaard stroomsterkte" -#: templates/core/inc/config_data.html:31 +#: netbox/templates/core/inc/config_data.html:31 msgid "Default max utilization" msgstr "Maximaal standaardgebruik" -#: templates/core/inc/config_data.html:40 +#: netbox/templates/core/inc/config_data.html:40 msgid "Enforce global unique" msgstr "Wereldwijd uniek afdwingen" -#: templates/core/inc/config_data.html:83 +#: netbox/templates/core/inc/config_data.html:83 msgid "Paginate count" msgstr "Aantal paginaten" -#: templates/core/inc/config_data.html:87 +#: netbox/templates/core/inc/config_data.html:87 msgid "Max page size" msgstr "Maximale paginagrootte" -#: templates/core/inc/config_data.html:114 +#: netbox/templates/core/inc/config_data.html:114 msgid "User preferences" msgstr "Gebruikersvoorkeuren" -#: templates/core/inc/config_data.html:141 +#: netbox/templates/core/inc/config_data.html:141 msgid "Job retention" msgstr "Behoud van een baan" -#: templates/core/job.html:35 templates/core/rq_task.html:12 -#: templates/core/rq_task.html:49 templates/core/rq_task.html:58 +#: netbox/templates/core/job.html:35 netbox/templates/core/rq_task.html:12 +#: netbox/templates/core/rq_task.html:49 netbox/templates/core/rq_task.html:58 msgid "Job" msgstr "Taak" -#: templates/core/job.html:58 templates/extras/journalentry.html:26 +#: netbox/templates/core/job.html:58 +#: netbox/templates/extras/journalentry.html:26 msgid "Created By" msgstr "Gemaakt door" -#: templates/core/job.html:66 +#: netbox/templates/core/job.html:66 msgid "Scheduling" msgstr "Planning" -#: templates/core/job.html:77 +#: netbox/templates/core/job.html:77 #, python-format msgid "every %(interval)s minutes" msgstr "elk %(interval)s minuten" -#: templates/core/objectchange.html:29 -#: templates/users/objectpermission.html:42 +#: netbox/templates/core/objectchange.html:29 +#: netbox/templates/users/objectpermission.html:42 msgid "Change" msgstr "Verandering" -#: templates/core/objectchange.html:79 +#: netbox/templates/core/objectchange.html:79 msgid "Difference" msgstr "Verschil" -#: templates/core/objectchange.html:82 +#: netbox/templates/core/objectchange.html:82 msgid "Previous" msgstr "Vorige" -#: templates/core/objectchange.html:85 +#: netbox/templates/core/objectchange.html:85 msgid "Next" msgstr "Volgende" -#: templates/core/objectchange.html:93 +#: netbox/templates/core/objectchange.html:93 msgid "Object Created" msgstr "Object gemaakt" -#: templates/core/objectchange.html:95 +#: netbox/templates/core/objectchange.html:95 msgid "Object Deleted" msgstr "Object verwijderd" -#: templates/core/objectchange.html:97 +#: netbox/templates/core/objectchange.html:97 msgid "No Changes" msgstr "Geen wijzigingen" -#: templates/core/objectchange.html:111 +#: netbox/templates/core/objectchange.html:111 msgid "Pre-Change Data" msgstr "Gegevens vóór de wijziging" -#: templates/core/objectchange.html:122 +#: netbox/templates/core/objectchange.html:122 msgid "Warning: Comparing non-atomic change to previous change record" msgstr "" "Waarschuwing: niet-atomaire wijzigingen vergelijken met eerdere " "wijzigingsrecords" -#: templates/core/objectchange.html:131 +#: netbox/templates/core/objectchange.html:131 msgid "Post-Change Data" msgstr "Gegevens na de wijziging" -#: templates/core/objectchange.html:162 +#: netbox/templates/core/objectchange.html:162 #, python-format msgid "See All %(count)s Changes" msgstr "Alles bekijken %(count)s Veranderingen" -#: templates/core/objectchange_list.html:9 -#: templates/extras/object_changelog.html:15 +#: netbox/templates/core/objectchange_list.html:9 +#: netbox/templates/extras/object_changelog.html:15 msgid "Change log retention" msgstr "Het bewaren van logboeken wijzigen" -#: templates/core/objectchange_list.html:9 -#: templates/extras/object_changelog.html:15 +#: netbox/templates/core/objectchange_list.html:9 +#: netbox/templates/extras/object_changelog.html:15 msgid "days" msgstr "dagen" -#: templates/core/objectchange_list.html:9 -#: templates/extras/object_changelog.html:15 +#: netbox/templates/core/objectchange_list.html:9 +#: netbox/templates/extras/object_changelog.html:15 msgid "Indefinite" msgstr "Onbepaald" -#: templates/core/plugin.html:22 +#: netbox/templates/core/plugin.html:22 msgid "Not installed" msgstr "Niet geïnstalleerd" -#: templates/core/plugin.html:33 +#: netbox/templates/core/plugin.html:33 msgid "Overview" msgstr "Overzicht" -#: templates/core/plugin.html:39 +#: netbox/templates/core/plugin.html:39 msgid "Install" msgstr "Installeren" -#: templates/core/plugin.html:51 +#: netbox/templates/core/plugin.html:51 msgid "Plugin Details" msgstr "Details van de plug-in" -#: templates/core/plugin.html:58 +#: netbox/templates/core/plugin.html:58 msgid "Summary" msgstr "Samenvatting" -#: templates/core/plugin.html:76 +#: netbox/templates/core/plugin.html:76 msgid "License" msgstr "Licentie" -#: templates/core/plugin.html:96 +#: netbox/templates/core/plugin.html:96 msgid "Version History" msgstr "Versiegeschiedenis" -#: templates/core/plugin.html:107 +#: netbox/templates/core/plugin.html:107 msgid "Local Installation Instructions" msgstr "Lokale installatie-instructies" -#: templates/core/rq_queue_list.html:5 templates/core/rq_queue_list.html:13 -#: templates/core/rq_task_list.html:14 templates/core/rq_worker.html:7 +#: netbox/templates/core/rq_queue_list.html:5 +#: netbox/templates/core/rq_queue_list.html:13 +#: netbox/templates/core/rq_task_list.html:14 +#: netbox/templates/core/rq_worker.html:7 msgid "Background Queues" msgstr "Achtergrondwachtrijen" -#: templates/core/rq_queue_list.html:24 templates/core/rq_queue_list.html:25 -#: templates/core/rq_worker_list.html:49 templates/core/rq_worker_list.html:50 -#: templates/extras/script_result.html:67 -#: templates/extras/script_result.html:69 -#: templates/inc/table_controls_htmx.html:30 -#: templates/inc/table_controls_htmx.html:33 +#: netbox/templates/core/rq_queue_list.html:24 +#: netbox/templates/core/rq_queue_list.html:25 +#: netbox/templates/core/rq_worker_list.html:49 +#: netbox/templates/core/rq_worker_list.html:50 +#: netbox/templates/extras/script_result.html:67 +#: netbox/templates/extras/script_result.html:69 +#: netbox/templates/inc/table_controls_htmx.html:30 +#: netbox/templates/inc/table_controls_htmx.html:33 msgid "Configure Table" msgstr "Tabel configureren" -#: templates/core/rq_task.html:29 +#: netbox/templates/core/rq_task.html:29 msgid "Stop" msgstr "Stop" -#: templates/core/rq_task.html:34 +#: netbox/templates/core/rq_task.html:34 msgid "Requeue" msgstr "Requeue" -#: templates/core/rq_task.html:39 +#: netbox/templates/core/rq_task.html:39 msgid "Enqueue" msgstr "In de wachtrij" -#: templates/core/rq_task.html:61 +#: netbox/templates/core/rq_task.html:61 msgid "Queue" msgstr "Wachtrij" -#: templates/core/rq_task.html:65 +#: netbox/templates/core/rq_task.html:65 msgid "Timeout" msgstr "Time-out" -#: templates/core/rq_task.html:69 +#: netbox/templates/core/rq_task.html:69 msgid "Result TTL" msgstr "Resultaat TTL" -#: templates/core/rq_task.html:89 +#: netbox/templates/core/rq_task.html:89 msgid "Meta" msgstr "Meta" -#: templates/core/rq_task.html:93 +#: netbox/templates/core/rq_task.html:93 msgid "Arguments" msgstr "Argumenten" -#: templates/core/rq_task.html:97 +#: netbox/templates/core/rq_task.html:97 msgid "Keyword Arguments" msgstr "Argumenten voor zoekwoorden" -#: templates/core/rq_task.html:103 +#: netbox/templates/core/rq_task.html:103 msgid "Depends on" msgstr "Hangt af van" -#: templates/core/rq_task.html:109 +#: netbox/templates/core/rq_task.html:109 msgid "Exception" msgstr "Uitzondering" -#: templates/core/rq_task_list.html:28 +#: netbox/templates/core/rq_task_list.html:28 msgid "tasks in " msgstr "taken in " -#: templates/core/rq_task_list.html:33 +#: netbox/templates/core/rq_task_list.html:33 msgid "Queued Jobs" msgstr "Opdrachten in de wachtrij" -#: templates/core/rq_task_list.html:64 templates/extras/script_result.html:86 +#: netbox/templates/core/rq_task_list.html:64 +#: netbox/templates/extras/script_result.html:86 #, python-format msgid "" "Select all %(count)s %(object_type_plural)s matching query" @@ -11657,384 +12401,402 @@ msgstr "" "Selecteer allemaal %(count)s %(object_type_plural)s " "overeenkomende vraag" -#: templates/core/rq_worker.html:10 +#: netbox/templates/core/rq_worker.html:10 msgid "Worker Info" msgstr "Informatie voor werknemers" -#: templates/core/rq_worker.html:31 templates/core/rq_worker.html:40 +#: netbox/templates/core/rq_worker.html:31 +#: netbox/templates/core/rq_worker.html:40 msgid "Worker" msgstr "Worker" -#: templates/core/rq_worker.html:55 +#: netbox/templates/core/rq_worker.html:55 msgid "Queues" msgstr "Wachtrijen" -#: templates/core/rq_worker.html:63 +#: netbox/templates/core/rq_worker.html:63 msgid "Curent Job" msgstr "Huidige baan" -#: templates/core/rq_worker.html:67 +#: netbox/templates/core/rq_worker.html:67 msgid "Successful job count" msgstr "Aantal succesvolle taken" -#: templates/core/rq_worker.html:71 +#: netbox/templates/core/rq_worker.html:71 msgid "Failed job count" msgstr "Aantal mislukte taken" -#: templates/core/rq_worker.html:75 +#: netbox/templates/core/rq_worker.html:75 msgid "Total working time" msgstr "Totale werktijd" -#: templates/core/rq_worker.html:76 +#: netbox/templates/core/rq_worker.html:76 msgid "seconds" msgstr "seconden" -#: templates/core/rq_worker_list.html:13 templates/core/rq_worker_list.html:21 +#: netbox/templates/core/rq_worker_list.html:13 +#: netbox/templates/core/rq_worker_list.html:21 msgid "Background Workers" msgstr "Achtergrondwerkers" -#: templates/core/rq_worker_list.html:29 +#: netbox/templates/core/rq_worker_list.html:29 #, python-format msgid "Workers in %(queue_name)s" msgstr "Werknemers in %(queue_name)s" -#: templates/core/system.html:11 utilities/templates/buttons/export.html:4 +#: netbox/templates/core/system.html:11 +#: netbox/utilities/templates/buttons/export.html:4 msgid "Export" msgstr "Exporteren" -#: templates/core/system.html:28 +#: netbox/templates/core/system.html:28 msgid "System Status" msgstr "Status van het systeem" -#: templates/core/system.html:31 +#: netbox/templates/core/system.html:31 msgid "NetBox release" msgstr "NetBox-release" -#: templates/core/system.html:44 +#: netbox/templates/core/system.html:44 msgid "Django version" msgstr "Django-versie" -#: templates/core/system.html:48 +#: netbox/templates/core/system.html:48 msgid "PostgreSQL version" msgstr "PostgreSQL-versie" -#: templates/core/system.html:52 +#: netbox/templates/core/system.html:52 msgid "Database name" msgstr "Databasenaam" -#: templates/core/system.html:56 +#: netbox/templates/core/system.html:56 msgid "Database size" msgstr "Grootte van de database" -#: templates/core/system.html:61 +#: netbox/templates/core/system.html:61 msgid "Unavailable" msgstr "Niet beschikbaar" -#: templates/core/system.html:66 +#: netbox/templates/core/system.html:66 msgid "RQ workers" msgstr "RQ-werknemers" -#: templates/core/system.html:69 +#: netbox/templates/core/system.html:69 msgid "default queue" msgstr "standaardwachtrij" -#: templates/core/system.html:73 +#: netbox/templates/core/system.html:73 msgid "System time" msgstr "Systeemtijd" -#: templates/core/system.html:85 +#: netbox/templates/core/system.html:85 msgid "Current Configuration" msgstr "Huidige configuratie" -#: templates/dcim/bulk_disconnect.html:9 +#: netbox/templates/dcim/bulk_disconnect.html:9 #, python-format msgid "" "Are you sure you want to disconnect these %(count)s %(obj_type_plural)s?" msgstr "" "Weet je zeker dat je deze wilt loskoppelen %(count)s %(obj_type_plural)s?" -#: templates/dcim/cable_trace.html:10 +#: netbox/templates/dcim/cable_trace.html:10 #, python-format msgid "Cable Trace for %(object_type)s %(object)s" msgstr "Cable Trace voor %(object_type)s %(object)s" -#: templates/dcim/cable_trace.html:24 templates/dcim/inc/rack_elevation.html:7 +#: netbox/templates/dcim/cable_trace.html:24 +#: netbox/templates/dcim/inc/rack_elevation.html:7 msgid "Download SVG" msgstr "SVG downloaden" -#: templates/dcim/cable_trace.html:30 +#: netbox/templates/dcim/cable_trace.html:30 msgid "Asymmetric Path" msgstr "Asymmetrisch pad" -#: templates/dcim/cable_trace.html:31 +#: netbox/templates/dcim/cable_trace.html:31 msgid "The nodes below have no links and result in an asymmetric path" msgstr "" "De knooppunten hieronder hebben geen links en resulteren in een asymmetrisch" " pad" -#: templates/dcim/cable_trace.html:38 +#: netbox/templates/dcim/cable_trace.html:38 msgid "Path split" msgstr "Pad gesplitst" -#: templates/dcim/cable_trace.html:39 +#: netbox/templates/dcim/cable_trace.html:39 msgid "Select a node below to continue" msgstr "Selecteer hieronder een knooppunt om door te gaan" -#: templates/dcim/cable_trace.html:55 +#: netbox/templates/dcim/cable_trace.html:55 msgid "Trace Completed" msgstr "Traceren voltooid" -#: templates/dcim/cable_trace.html:58 +#: netbox/templates/dcim/cable_trace.html:58 msgid "Total segments" msgstr "Totaal aantal segmenten" -#: templates/dcim/cable_trace.html:62 +#: netbox/templates/dcim/cable_trace.html:62 msgid "Total length" msgstr "Totale lengte" -#: templates/dcim/cable_trace.html:77 +#: netbox/templates/dcim/cable_trace.html:77 msgid "No paths found" msgstr "Geen paden gevonden" -#: templates/dcim/cable_trace.html:85 +#: netbox/templates/dcim/cable_trace.html:85 msgid "Related Paths" msgstr "Gerelateerde paden" -#: templates/dcim/cable_trace.html:89 +#: netbox/templates/dcim/cable_trace.html:89 msgid "Origin" msgstr "Herkomst" -#: templates/dcim/cable_trace.html:90 +#: netbox/templates/dcim/cable_trace.html:90 msgid "Destination" msgstr "Bestemming" -#: templates/dcim/cable_trace.html:91 +#: netbox/templates/dcim/cable_trace.html:91 msgid "Segments" msgstr "Segmenten" -#: templates/dcim/cable_trace.html:104 +#: netbox/templates/dcim/cable_trace.html:104 msgid "Incomplete" msgstr "Onvolledig" -#: templates/dcim/component_list.html:14 +#: netbox/templates/dcim/component_list.html:14 msgid "Rename Selected" msgstr "Geselecteerde naam wijzigen" -#: templates/dcim/consoleport.html:65 templates/dcim/consoleserverport.html:66 -#: templates/dcim/frontport.html:98 templates/dcim/interface.html:176 -#: templates/dcim/poweroutlet.html:69 templates/dcim/powerport.html:69 +#: netbox/templates/dcim/consoleport.html:65 +#: netbox/templates/dcim/consoleserverport.html:66 +#: netbox/templates/dcim/frontport.html:98 +#: netbox/templates/dcim/interface.html:176 +#: netbox/templates/dcim/poweroutlet.html:69 +#: netbox/templates/dcim/powerport.html:69 msgid "Not Connected" msgstr "Niet verbonden" -#: templates/dcim/device.html:34 +#: netbox/templates/dcim/device.html:34 msgid "Highlight device in rack" msgstr "Markeer het apparaat in het rack" -#: templates/dcim/device.html:55 +#: netbox/templates/dcim/device.html:55 msgid "Not racked" msgstr "Niet gehackt" -#: templates/dcim/device.html:62 templates/dcim/site.html:94 +#: netbox/templates/dcim/device.html:62 netbox/templates/dcim/site.html:94 msgid "GPS Coordinates" msgstr "GPS-coördinaten" -#: templates/dcim/device.html:68 templates/dcim/site.html:81 -#: templates/dcim/site.html:100 +#: netbox/templates/dcim/device.html:68 netbox/templates/dcim/site.html:81 +#: netbox/templates/dcim/site.html:100 msgid "Map" msgstr "Kaart" -#: templates/dcim/device.html:108 templates/dcim/inventoryitem.html:56 -#: templates/dcim/module.html:81 templates/dcim/modulebay.html:74 -#: templates/dcim/rack.html:61 +#: netbox/templates/dcim/device.html:108 +#: netbox/templates/dcim/inventoryitem.html:56 +#: netbox/templates/dcim/module.html:81 +#: netbox/templates/dcim/modulebay.html:74 netbox/templates/dcim/rack.html:61 msgid "Asset Tag" msgstr "Tag voor bedrijfsmiddelen" -#: templates/dcim/device.html:123 +#: netbox/templates/dcim/device.html:123 msgid "View Virtual Chassis" msgstr "Bekijk het virtuele chassis" -#: templates/dcim/device.html:164 +#: netbox/templates/dcim/device.html:164 msgid "Create VDC" msgstr "VDC aanmaken" -#: templates/dcim/device.html:175 templates/dcim/device_edit.html:64 -#: virtualization/forms/model_forms.py:223 +#: netbox/templates/dcim/device.html:175 +#: netbox/templates/dcim/device_edit.html:64 +#: netbox/virtualization/forms/model_forms.py:223 msgid "Management" msgstr "Beheer" -#: templates/dcim/device.html:195 templates/dcim/device.html:211 -#: templates/dcim/device.html:227 -#: templates/virtualization/virtualmachine.html:57 -#: templates/virtualization/virtualmachine.html:73 +#: netbox/templates/dcim/device.html:195 netbox/templates/dcim/device.html:211 +#: netbox/templates/dcim/device.html:227 +#: netbox/templates/virtualization/virtualmachine.html:57 +#: netbox/templates/virtualization/virtualmachine.html:73 msgid "NAT for" msgstr "NAT voor" -#: templates/dcim/device.html:197 templates/dcim/device.html:213 -#: templates/dcim/device.html:229 -#: templates/virtualization/virtualmachine.html:59 -#: templates/virtualization/virtualmachine.html:75 +#: netbox/templates/dcim/device.html:197 netbox/templates/dcim/device.html:213 +#: netbox/templates/dcim/device.html:229 +#: netbox/templates/virtualization/virtualmachine.html:59 +#: netbox/templates/virtualization/virtualmachine.html:75 msgid "NAT" msgstr "NAT" -#: templates/dcim/device.html:252 templates/dcim/rack.html:73 +#: netbox/templates/dcim/device.html:252 netbox/templates/dcim/rack.html:73 msgid "Power Utilization" msgstr "Energiegebruik" -#: templates/dcim/device.html:256 +#: netbox/templates/dcim/device.html:256 msgid "Input" msgstr "Invoer" -#: templates/dcim/device.html:257 +#: netbox/templates/dcim/device.html:257 msgid "Outlets" msgstr "Verkooppunten" -#: templates/dcim/device.html:258 +#: netbox/templates/dcim/device.html:258 msgid "Allocated" msgstr "Toegewezen" -#: templates/dcim/device.html:268 templates/dcim/device.html:270 -#: templates/dcim/device.html:286 templates/dcim/powerfeed.html:67 +#: netbox/templates/dcim/device.html:268 netbox/templates/dcim/device.html:270 +#: netbox/templates/dcim/device.html:286 +#: netbox/templates/dcim/powerfeed.html:67 msgid "VA" msgstr "VA" -#: templates/dcim/device.html:280 +#: netbox/templates/dcim/device.html:280 msgctxt "Leg of a power feed" msgid "Leg" msgstr "Leg" -#: templates/dcim/device.html:306 -#: templates/virtualization/virtualmachine.html:158 +#: netbox/templates/dcim/device.html:306 +#: netbox/templates/virtualization/virtualmachine.html:158 msgid "Add a service" msgstr "Een service toevoegen" -#: templates/dcim/device/base.html:21 templates/dcim/device_list.html:9 -#: templates/dcim/devicetype/base.html:18 -#: templates/dcim/inc/moduletype_buttons.html:9 templates/dcim/module.html:18 -#: templates/virtualization/virtualmachine/base.html:22 -#: templates/virtualization/virtualmachine_list.html:8 +#: netbox/templates/dcim/device/base.html:21 +#: netbox/templates/dcim/device_list.html:9 +#: netbox/templates/dcim/devicetype/base.html:18 +#: netbox/templates/dcim/inc/moduletype_buttons.html:9 +#: netbox/templates/dcim/module.html:18 +#: netbox/templates/virtualization/virtualmachine/base.html:22 +#: netbox/templates/virtualization/virtualmachine_list.html:8 msgid "Add Components" msgstr "Componenten toevoegen" -#: templates/dcim/device/consoleports.html:24 +#: netbox/templates/dcim/device/consoleports.html:24 msgid "Add Console Ports" msgstr "Consolepoorten toevoegen" -#: templates/dcim/device/consoleserverports.html:24 +#: netbox/templates/dcim/device/consoleserverports.html:24 msgid "Add Console Server Ports" msgstr "Console Server-poorten toevoegen" -#: templates/dcim/device/devicebays.html:10 +#: netbox/templates/dcim/device/devicebays.html:10 msgid "Add Device Bays" msgstr "Apparaatbays toevoegen" -#: templates/dcim/device/frontports.html:24 +#: netbox/templates/dcim/device/frontports.html:24 msgid "Add Front Ports" msgstr "Poorten aan de voorkant toevoegen" -#: templates/dcim/device/inc/interface_table_controls.html:9 +#: netbox/templates/dcim/device/inc/interface_table_controls.html:9 msgid "Hide Enabled" msgstr "Verbergen ingeschakeld" -#: templates/dcim/device/inc/interface_table_controls.html:10 +#: netbox/templates/dcim/device/inc/interface_table_controls.html:10 msgid "Hide Disabled" msgstr "Verbergen Uitgeschakeld" -#: templates/dcim/device/inc/interface_table_controls.html:11 +#: netbox/templates/dcim/device/inc/interface_table_controls.html:11 msgid "Hide Virtual" msgstr "Virtueel verbergen" -#: templates/dcim/device/inc/interface_table_controls.html:12 +#: netbox/templates/dcim/device/inc/interface_table_controls.html:12 msgid "Hide Disconnected" msgstr "Verberg de verbinding verbroken" -#: templates/dcim/device/interfaces.html:27 +#: netbox/templates/dcim/device/interfaces.html:27 msgid "Add Interfaces" msgstr "Interfaces toevoegen" -#: templates/dcim/device/inventory.html:10 -#: templates/dcim/inc/panels/inventory_items.html:10 +#: netbox/templates/dcim/device/inventory.html:10 +#: netbox/templates/dcim/inc/panels/inventory_items.html:10 msgid "Add Inventory Item" msgstr "Inventarisitem toevoegen" -#: templates/dcim/device/modulebays.html:10 +#: netbox/templates/dcim/device/modulebays.html:10 msgid "Add Module Bays" msgstr "Modulebays toevoegen" -#: templates/dcim/device/poweroutlets.html:24 +#: netbox/templates/dcim/device/poweroutlets.html:24 msgid "Add Power Outlets" msgstr "Stopcontacten toevoegen" -#: templates/dcim/device/powerports.html:24 +#: netbox/templates/dcim/device/powerports.html:24 msgid "Add Power Port" msgstr "Voedingspoort toevoegen" -#: templates/dcim/device/rearports.html:24 +#: netbox/templates/dcim/device/rearports.html:24 msgid "Add Rear Ports" msgstr "Achterpoorten toevoegen" -#: templates/dcim/device/render_config.html:5 -#: templates/virtualization/virtualmachine/render_config.html:5 +#: netbox/templates/dcim/device/render_config.html:5 +#: netbox/templates/virtualization/virtualmachine/render_config.html:5 msgid "Config" msgstr "Configuratie" -#: templates/dcim/device/render_config.html:35 -#: templates/virtualization/virtualmachine/render_config.html:35 +#: netbox/templates/dcim/device/render_config.html:35 +#: netbox/templates/virtualization/virtualmachine/render_config.html:35 msgid "Context Data" msgstr "Contextgegevens" -#: templates/dcim/device/render_config.html:53 -#: templates/virtualization/virtualmachine/render_config.html:53 +#: netbox/templates/dcim/device/render_config.html:55 +#: netbox/templates/virtualization/virtualmachine/render_config.html:55 msgid "Rendered Config" msgstr "Gerenderde configuratie" -#: templates/dcim/device/render_config.html:55 -#: templates/virtualization/virtualmachine/render_config.html:55 +#: netbox/templates/dcim/device/render_config.html:57 +#: netbox/templates/virtualization/virtualmachine/render_config.html:57 msgid "Download" msgstr "Downloaden" -#: templates/dcim/device/render_config.html:61 -#: templates/virtualization/virtualmachine/render_config.html:61 -msgid "No configuration template found" -msgstr "Geen configuratiesjabloon gevonden" +#: netbox/templates/dcim/device/render_config.html:64 +#: netbox/templates/virtualization/virtualmachine/render_config.html:64 +msgid "Error rendering template" +msgstr "" -#: templates/dcim/device_edit.html:44 +#: 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" -#: templates/dcim/device_edit.html:48 -#: utilities/templates/form_helpers/render_field.html:22 +#: netbox/templates/dcim/device_edit.html:48 +#: netbox/utilities/templates/form_helpers/render_field.html:22 msgid "Regenerate Slug" msgstr "Regenereer naaktslak" -#: templates/dcim/device_edit.html:49 templates/generic/bulk_remove.html:21 -#: utilities/templates/helpers/table_config_form.html:23 +#: netbox/templates/dcim/device_edit.html:49 +#: netbox/templates/generic/bulk_remove.html:21 +#: netbox/utilities/templates/helpers/table_config_form.html:23 msgid "Remove" msgstr "Verwijderen" -#: templates/dcim/device_edit.html:110 +#: netbox/templates/dcim/device_edit.html:110 msgid "Local Config Context Data" msgstr "Contextgegevens voor lokale configuratie" -#: templates/dcim/device_list.html:82 templates/generic/bulk_rename.html:57 -#: templates/virtualization/virtualmachine/interfaces.html:11 -#: templates/virtualization/virtualmachine/virtual_disks.html:11 +#: netbox/templates/dcim/device_list.html:82 +#: netbox/templates/generic/bulk_rename.html:57 +#: netbox/templates/virtualization/virtualmachine/interfaces.html:11 +#: netbox/templates/virtualization/virtualmachine/virtual_disks.html:11 msgid "Rename" msgstr "Hernoemen" -#: templates/dcim/devicebay.html:17 +#: netbox/templates/dcim/devicebay.html:17 msgid "Device Bay" msgstr "Apparaatvak" -#: templates/dcim/devicebay.html:43 +#: netbox/templates/dcim/devicebay.html:43 msgid "Installed Device" msgstr "Geïnstalleerd apparaat" -#: templates/dcim/devicebay_depopulate.html:6 +#: netbox/templates/dcim/devicebay_depopulate.html:6 #, python-format msgid "Remove %(device)s from %(device_bay)s?" msgstr "Verwijderen %(device)s uit %(device_bay)s?" -#: templates/dcim/devicebay_depopulate.html:13 +#: netbox/templates/dcim/devicebay_depopulate.html:13 #, python-format msgid "" "Are you sure you want to remove %(device)s from " @@ -12043,430 +12805,449 @@ msgstr "" "Weet je zeker dat je wilt verwijderen %(device)s uit " "%(device_bay)s?" -#: templates/dcim/devicebay_populate.html:13 +#: netbox/templates/dcim/devicebay_populate.html:13 msgid "Populate" msgstr "Bevolken" -#: templates/dcim/devicebay_populate.html:22 +#: netbox/templates/dcim/devicebay_populate.html:22 msgid "Bay" msgstr "Bay" -#: templates/dcim/devicerole.html:14 templates/dcim/platform.html:17 +#: netbox/templates/dcim/devicerole.html:14 +#: netbox/templates/dcim/platform.html:17 msgid "Add Device" msgstr "Apparaat toevoegen" -#: templates/dcim/devicerole.html:40 +#: netbox/templates/dcim/devicerole.html:40 msgid "VM Role" msgstr "VM-rol" -#: templates/dcim/devicetype.html:18 templates/dcim/moduletype.html:29 +#: netbox/templates/dcim/devicetype.html:18 +#: netbox/templates/dcim/moduletype.html:29 msgid "Model Name" msgstr "Naam van het model" -#: templates/dcim/devicetype.html:25 templates/dcim/moduletype.html:33 +#: netbox/templates/dcim/devicetype.html:25 +#: netbox/templates/dcim/moduletype.html:33 msgid "Part Number" msgstr "Onderdeelnummer" -#: templates/dcim/devicetype.html:41 +#: netbox/templates/dcim/devicetype.html:41 msgid "Exclude From Utilization" msgstr "Van gebruik uitsluiten" -#: templates/dcim/devicetype.html:59 +#: netbox/templates/dcim/devicetype.html:59 msgid "Parent/Child" msgstr "Ouder/kind" -#: templates/dcim/devicetype.html:71 +#: netbox/templates/dcim/devicetype.html:71 msgid "Front Image" msgstr "Afbeelding op de voorkant" -#: templates/dcim/devicetype.html:83 +#: netbox/templates/dcim/devicetype.html:83 msgid "Rear Image" msgstr "Afbeelding aan de achterkant" -#: templates/dcim/frontport.html:54 +#: netbox/templates/dcim/frontport.html:54 msgid "Rear Port Position" msgstr "Positie van de achterpoort" -#: templates/dcim/frontport.html:72 templates/dcim/interface.html:144 -#: templates/dcim/poweroutlet.html:63 templates/dcim/powerport.html:63 -#: templates/dcim/rearport.html:68 +#: netbox/templates/dcim/frontport.html:72 +#: netbox/templates/dcim/interface.html:144 +#: netbox/templates/dcim/poweroutlet.html:63 +#: netbox/templates/dcim/powerport.html:63 +#: netbox/templates/dcim/rearport.html:68 msgid "Marked as Connected" msgstr "Gemarkeerd als verbonden" -#: templates/dcim/frontport.html:86 templates/dcim/rearport.html:82 +#: netbox/templates/dcim/frontport.html:86 +#: netbox/templates/dcim/rearport.html:82 msgid "Connection Status" msgstr "Status van de verbinding" -#: templates/dcim/htmx/cable_edit.html:10 +#: netbox/templates/dcim/htmx/cable_edit.html:10 msgid "A Side" msgstr "A-kant" -#: templates/dcim/htmx/cable_edit.html:30 +#: netbox/templates/dcim/htmx/cable_edit.html:30 msgid "B Side" msgstr "B-kant" -#: templates/dcim/inc/cable_termination.html:65 +#: netbox/templates/dcim/inc/cable_termination.html:65 msgid "No termination" msgstr "Geen beëindiging" -#: templates/dcim/inc/cable_toggle_buttons.html:3 +#: netbox/templates/dcim/inc/cable_toggle_buttons.html:3 msgid "Mark Planned" msgstr "Mark Gepland" -#: templates/dcim/inc/cable_toggle_buttons.html:6 +#: netbox/templates/dcim/inc/cable_toggle_buttons.html:6 msgid "Mark Installed" msgstr "Markeer geïnstalleerd" -#: templates/dcim/inc/connection_endpoints.html:13 +#: netbox/templates/dcim/inc/connection_endpoints.html:13 msgid "Path Status" msgstr "Status van het pad" -#: templates/dcim/inc/connection_endpoints.html:18 +#: netbox/templates/dcim/inc/connection_endpoints.html:18 msgid "Not Reachable" msgstr "Niet bereikbaar" -#: templates/dcim/inc/connection_endpoints.html:23 +#: netbox/templates/dcim/inc/connection_endpoints.html:23 msgid "Path Endpoints" msgstr "Eindpunten van het pad" -#: templates/dcim/inc/endpoint_connection.html:8 -#: templates/dcim/powerfeed.html:120 templates/dcim/rearport.html:94 +#: netbox/templates/dcim/inc/endpoint_connection.html:8 +#: netbox/templates/dcim/powerfeed.html:120 +#: netbox/templates/dcim/rearport.html:94 msgid "Not connected" msgstr "Niet verbonden" -#: templates/dcim/inc/interface_vlans_table.html:6 +#: netbox/templates/dcim/inc/interface_vlans_table.html:6 msgid "Untagged" msgstr "Niet gelabeld" -#: templates/dcim/inc/interface_vlans_table.html:37 +#: netbox/templates/dcim/inc/interface_vlans_table.html:37 msgid "No VLANs Assigned" msgstr "Geen VLAN's toegewezen" -#: templates/dcim/inc/interface_vlans_table.html:44 -#: templates/ipam/prefix_list.html:16 templates/ipam/prefix_list.html:33 +#: netbox/templates/dcim/inc/interface_vlans_table.html:44 +#: netbox/templates/ipam/prefix_list.html:16 +#: netbox/templates/ipam/prefix_list.html:33 msgid "Clear" msgstr "Duidelijk" -#: templates/dcim/inc/interface_vlans_table.html:47 +#: netbox/templates/dcim/inc/interface_vlans_table.html:47 msgid "Clear All" msgstr "Alles wissen" -#: templates/dcim/inc/panels/racktype_dimensions.html:38 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:38 msgid "Mounting Depth" msgstr "Montagediepte" -#: templates/dcim/inc/panels/racktype_numbering.html:6 +#: netbox/templates/dcim/inc/panels/racktype_numbering.html:6 msgid "Starting Unit" msgstr "Starteenheid" -#: templates/dcim/inc/panels/racktype_numbering.html:10 +#: netbox/templates/dcim/inc/panels/racktype_numbering.html:10 msgid "Descending Units" msgstr "Aflopende eenheden" -#: templates/dcim/inc/rack_elevation.html:3 +#: netbox/templates/dcim/inc/rack_elevation.html:3 msgid "Rack elevation" msgstr "Rackhoogte" -#: templates/dcim/interface.html:17 +#: netbox/templates/dcim/interface.html:17 msgid "Add Child Interface" msgstr "Kindinterface toevoegen" -#: templates/dcim/interface.html:50 +#: netbox/templates/dcim/interface.html:50 msgid "Speed/Duplex" msgstr "Snelheid/duplex" -#: templates/dcim/interface.html:73 +#: netbox/templates/dcim/interface.html:73 msgid "PoE Mode" msgstr "PoE-modus" -#: templates/dcim/interface.html:77 +#: netbox/templates/dcim/interface.html:77 msgid "PoE Type" msgstr "PoE-type" -#: templates/dcim/interface.html:81 -#: templates/virtualization/vminterface.html:63 +#: netbox/templates/dcim/interface.html:81 +#: netbox/templates/virtualization/vminterface.html:63 msgid "802.1Q Mode" msgstr "802.1Q-modus" -#: templates/dcim/interface.html:125 -#: templates/virtualization/vminterface.html:59 +#: netbox/templates/dcim/interface.html:125 +#: netbox/templates/virtualization/vminterface.html:59 msgid "MAC Address" msgstr "MAC-adres" -#: templates/dcim/interface.html:151 +#: netbox/templates/dcim/interface.html:151 msgid "Wireless Link" msgstr "Draadloze link" -#: templates/dcim/interface.html:218 vpn/choices.py:55 +#: netbox/templates/dcim/interface.html:218 netbox/vpn/choices.py:63 msgid "Peer" msgstr "Peer" -#: templates/dcim/interface.html:230 -#: templates/wireless/inc/wirelesslink_interface.html:26 +#: netbox/templates/dcim/interface.html:230 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:26 msgid "Channel" msgstr "Kanaal" -#: templates/dcim/interface.html:239 -#: templates/wireless/inc/wirelesslink_interface.html:32 +#: netbox/templates/dcim/interface.html:239 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:32 msgid "Channel Frequency" msgstr "Kanaalfrequentie" -#: templates/dcim/interface.html:242 templates/dcim/interface.html:250 -#: templates/dcim/interface.html:261 templates/dcim/interface.html:269 +#: netbox/templates/dcim/interface.html:242 +#: netbox/templates/dcim/interface.html:250 +#: netbox/templates/dcim/interface.html:261 +#: netbox/templates/dcim/interface.html:269 msgid "MHz" msgstr "MHz" -#: templates/dcim/interface.html:258 -#: templates/wireless/inc/wirelesslink_interface.html:42 +#: netbox/templates/dcim/interface.html:258 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:42 msgid "Channel Width" msgstr "Kanaalbreedte" -#: templates/dcim/interface.html:285 templates/wireless/wirelesslan.html:14 -#: templates/wireless/wirelesslink.html:21 wireless/forms/bulk_edit.py:60 -#: wireless/forms/bulk_edit.py:102 wireless/forms/filtersets.py:40 -#: wireless/forms/filtersets.py:80 wireless/models.py:82 -#: wireless/models.py:156 wireless/tables/wirelesslan.py:44 +#: netbox/templates/dcim/interface.html:285 +#: netbox/templates/wireless/wirelesslan.html:14 +#: netbox/templates/wireless/wirelesslink.html:21 +#: netbox/wireless/forms/bulk_edit.py:60 +#: netbox/wireless/forms/bulk_edit.py:102 +#: netbox/wireless/forms/filtersets.py:40 +#: netbox/wireless/forms/filtersets.py:80 netbox/wireless/models.py:82 +#: netbox/wireless/models.py:156 netbox/wireless/tables/wirelesslan.py:44 msgid "SSID" msgstr "SSID" -#: templates/dcim/interface.html:305 +#: netbox/templates/dcim/interface.html:305 msgid "LAG Members" msgstr "LAG-leden" -#: templates/dcim/interface.html:323 +#: netbox/templates/dcim/interface.html:323 msgid "No member interfaces" msgstr "Geen interfaces voor leden" -#: templates/dcim/interface.html:343 templates/ipam/fhrpgroup.html:73 -#: templates/ipam/iprange/ip_addresses.html:7 -#: templates/ipam/prefix/ip_addresses.html:7 -#: templates/virtualization/vminterface.html:89 +#: netbox/templates/dcim/interface.html:343 +#: netbox/templates/ipam/fhrpgroup.html:73 +#: netbox/templates/ipam/iprange/ip_addresses.html:7 +#: netbox/templates/ipam/prefix/ip_addresses.html:7 +#: netbox/templates/virtualization/vminterface.html:89 msgid "Add IP Address" msgstr "IP-adres toevoegen" -#: templates/dcim/inventoryitem.html:24 +#: netbox/templates/dcim/inventoryitem.html:24 msgid "Parent Item" msgstr "Bovenliggend item" -#: templates/dcim/inventoryitem.html:48 +#: netbox/templates/dcim/inventoryitem.html:48 msgid "Part ID" msgstr "Onderdeel-ID" -#: templates/dcim/location.html:17 +#: netbox/templates/dcim/location.html:17 msgid "Add Child Location" msgstr "Locatie van het kind toevoegen" -#: templates/dcim/location.html:77 +#: netbox/templates/dcim/location.html:77 msgid "Child Locations" msgstr "Locaties voor kinderen" -#: templates/dcim/location.html:81 templates/dcim/site.html:131 +#: netbox/templates/dcim/location.html:81 netbox/templates/dcim/site.html:131 msgid "Add a Location" msgstr "Een locatie toevoegen" -#: templates/dcim/location.html:94 templates/dcim/site.html:144 +#: netbox/templates/dcim/location.html:94 netbox/templates/dcim/site.html:144 msgid "Add a Device" msgstr "Een apparaat toevoegen" -#: templates/dcim/manufacturer.html:16 +#: netbox/templates/dcim/manufacturer.html:16 msgid "Add Device Type" msgstr "Apparaattype toevoegen" -#: templates/dcim/manufacturer.html:21 +#: netbox/templates/dcim/manufacturer.html:21 msgid "Add Module Type" msgstr "Moduletype toevoegen" -#: templates/dcim/powerfeed.html:53 +#: netbox/templates/dcim/powerfeed.html:53 msgid "Connected Device" msgstr "Aangesloten apparaat" -#: templates/dcim/powerfeed.html:63 +#: netbox/templates/dcim/powerfeed.html:63 msgid "Utilization (Allocated" msgstr "Verbruik (toegewezen)" -#: templates/dcim/powerfeed.html:80 +#: netbox/templates/dcim/powerfeed.html:80 msgid "Electrical Characteristics" msgstr "Elektrische kenmerken" -#: templates/dcim/powerfeed.html:88 +#: netbox/templates/dcim/powerfeed.html:88 msgctxt "Abbreviation for volts" msgid "V" msgstr "V" -#: templates/dcim/powerfeed.html:92 +#: netbox/templates/dcim/powerfeed.html:92 msgctxt "Abbreviation for amperes" msgid "A" msgstr "A" -#: templates/dcim/poweroutlet.html:48 +#: netbox/templates/dcim/poweroutlet.html:48 msgid "Feed Leg" msgstr "Voer de poot in" -#: templates/dcim/powerpanel.html:72 +#: netbox/templates/dcim/powerpanel.html:72 msgid "Add Power Feeds" msgstr "Power Feeds toevoegen" -#: templates/dcim/powerport.html:44 +#: netbox/templates/dcim/powerport.html:44 msgid "Maximum Draw" msgstr "Maximaal aantal trekkingen" -#: templates/dcim/powerport.html:48 +#: netbox/templates/dcim/powerport.html:48 msgid "Allocated Draw" msgstr "Toegewezen gelijkspel" -#: templates/dcim/rack.html:69 +#: netbox/templates/dcim/rack.html:69 msgid "Space Utilization" msgstr "Ruimtegebruik" -#: templates/dcim/rack.html:84 templates/dcim/racktype.html:44 +#: netbox/templates/dcim/rack.html:84 netbox/templates/dcim/racktype.html:44 msgid "Rack Weight" msgstr "Gewicht van het rek" -#: templates/dcim/rack.html:94 templates/dcim/racktype.html:54 +#: netbox/templates/dcim/rack.html:94 netbox/templates/dcim/racktype.html:54 msgid "Maximum Weight" msgstr "Maximaal gewicht" -#: templates/dcim/rack.html:104 +#: netbox/templates/dcim/rack.html:104 msgid "Total Weight" msgstr "Totaal gewicht" -#: templates/dcim/rack.html:125 templates/dcim/rack_elevation_list.html:15 +#: netbox/templates/dcim/rack.html:125 +#: netbox/templates/dcim/rack_elevation_list.html:15 msgid "Images and Labels" msgstr "Afbeeldingen en labels" -#: templates/dcim/rack.html:126 templates/dcim/rack_elevation_list.html:16 +#: netbox/templates/dcim/rack.html:126 +#: netbox/templates/dcim/rack_elevation_list.html:16 msgid "Images only" msgstr "Alleen afbeeldingen" -#: templates/dcim/rack.html:127 templates/dcim/rack_elevation_list.html:17 +#: netbox/templates/dcim/rack.html:127 +#: netbox/templates/dcim/rack_elevation_list.html:17 msgid "Labels only" msgstr "Alleen labels" -#: templates/dcim/rack/reservations.html:8 +#: netbox/templates/dcim/rack/reservations.html:8 msgid "Add reservation" msgstr "Reservering toevoegen" -#: templates/dcim/rack_elevation_list.html:12 +#: netbox/templates/dcim/rack_elevation_list.html:12 msgid "View List" msgstr "Lijst bekijken" -#: templates/dcim/rack_elevation_list.html:14 +#: netbox/templates/dcim/rack_elevation_list.html:14 msgid "Select rack view" msgstr "Rack-weergave selecteren" -#: templates/dcim/rack_elevation_list.html:25 +#: netbox/templates/dcim/rack_elevation_list.html:25 msgid "Sort By" msgstr "Sorteer op" -#: templates/dcim/rack_elevation_list.html:74 +#: netbox/templates/dcim/rack_elevation_list.html:74 msgid "No Racks Found" msgstr "Geen rekken gevonden" -#: templates/dcim/rack_list.html:8 +#: netbox/templates/dcim/rack_list.html:8 msgid "View Elevations" msgstr "Bekijk de verhogingen" -#: templates/dcim/rackreservation.html:42 +#: netbox/templates/dcim/rackreservation.html:42 msgid "Reservation Details" msgstr "Reserveringsgegevens" -#: templates/dcim/rackrole.html:10 +#: netbox/templates/dcim/rackrole.html:10 msgid "Add Rack" msgstr "Rack toevoegen" -#: templates/dcim/rearport.html:50 +#: netbox/templates/dcim/rearport.html:50 msgid "Positions" msgstr "Posities" -#: templates/dcim/region.html:17 templates/dcim/sitegroup.html:17 +#: netbox/templates/dcim/region.html:17 +#: netbox/templates/dcim/sitegroup.html:17 msgid "Add Site" msgstr "Site toevoegen" -#: templates/dcim/region.html:55 +#: netbox/templates/dcim/region.html:55 msgid "Child Regions" msgstr "Kindgebieden" -#: templates/dcim/region.html:59 +#: netbox/templates/dcim/region.html:59 msgid "Add Region" msgstr "Regio toevoegen" -#: templates/dcim/site.html:64 +#: netbox/templates/dcim/site.html:64 msgid "Time Zone" msgstr "Tijdzone" -#: templates/dcim/site.html:67 +#: netbox/templates/dcim/site.html:67 msgid "UTC" msgstr "UTC" -#: templates/dcim/site.html:68 +#: netbox/templates/dcim/site.html:68 msgid "Site time" msgstr "Tijd op de site" -#: templates/dcim/site.html:75 +#: netbox/templates/dcim/site.html:75 msgid "Physical Address" msgstr "Fysiek adres" -#: templates/dcim/site.html:90 +#: netbox/templates/dcim/site.html:90 msgid "Shipping Address" msgstr "Verzendadres" -#: templates/dcim/sitegroup.html:55 templates/tenancy/contactgroup.html:46 -#: templates/tenancy/tenantgroup.html:55 -#: templates/wireless/wirelesslangroup.html:55 +#: netbox/templates/dcim/sitegroup.html:55 +#: netbox/templates/tenancy/contactgroup.html:46 +#: netbox/templates/tenancy/tenantgroup.html:55 +#: netbox/templates/wireless/wirelesslangroup.html:55 msgid "Child Groups" msgstr "Kindergroepen" -#: templates/dcim/sitegroup.html:59 +#: netbox/templates/dcim/sitegroup.html:59 msgid "Add Site Group" msgstr "Sitegroep toevoegen" -#: templates/dcim/trace/attachment.html:5 -#: templates/extras/exporttemplate.html:31 +#: netbox/templates/dcim/trace/attachment.html:5 +#: netbox/templates/extras/exporttemplate.html:31 msgid "Attachment" msgstr "Gehechtheid" -#: templates/dcim/virtualchassis.html:57 +#: netbox/templates/dcim/virtualchassis.html:57 msgid "Add Member" msgstr "Lid toevoegen" -#: templates/dcim/virtualchassis_add.html:18 +#: netbox/templates/dcim/virtualchassis_add.html:18 msgid "Member Devices" msgstr "Apparaten voor leden" -#: templates/dcim/virtualchassis_add_member.html:10 +#: netbox/templates/dcim/virtualchassis_add_member.html:10 #, python-format msgid "Add New Member to Virtual Chassis %(virtual_chassis)s" msgstr "Nieuw lid toevoegen aan virtueel chassis %(virtual_chassis)s" -#: templates/dcim/virtualchassis_add_member.html:19 +#: netbox/templates/dcim/virtualchassis_add_member.html:19 msgid "Add New Member" msgstr "Nieuw lid toevoegen" -#: templates/dcim/virtualchassis_add_member.html:27 -#: templates/generic/object_edit.html:78 -#: templates/users/objectpermission.html:31 users/forms/filtersets.py:67 -#: users/forms/model_forms.py:312 +#: netbox/templates/dcim/virtualchassis_add_member.html:27 +#: netbox/templates/generic/object_edit.html:78 +#: netbox/templates/users/objectpermission.html:31 +#: netbox/users/forms/filtersets.py:67 netbox/users/forms/model_forms.py:312 msgid "Actions" msgstr "Acties" -#: templates/dcim/virtualchassis_add_member.html:29 +#: netbox/templates/dcim/virtualchassis_add_member.html:29 msgid "Save & Add Another" msgstr "Opslaan en nog een toevoegen" -#: templates/dcim/virtualchassis_edit.html:7 +#: netbox/templates/dcim/virtualchassis_edit.html:7 #, python-format msgid "Editing Virtual Chassis %(name)s" msgstr "Virtueel chassis bewerken %(name)s" -#: templates/dcim/virtualchassis_edit.html:53 +#: netbox/templates/dcim/virtualchassis_edit.html:53 msgid "Rack/Unit" msgstr "Rack/eenheid" -#: templates/dcim/virtualchassis_remove_member.html:5 +#: netbox/templates/dcim/virtualchassis_remove_member.html:5 msgid "Remove Virtual Chassis Member" msgstr "Virtueel chassislid verwijderen" -#: templates/dcim/virtualchassis_remove_member.html:9 +#: netbox/templates/dcim/virtualchassis_remove_member.html:9 #, python-format msgid "" "Are you sure you want to remove %(device)s from virtual " @@ -12475,11 +13256,12 @@ msgstr "" "Weet je zeker dat je wilt verwijderen %(device)s vanaf een " "virtueel chassis %(name)s?" -#: templates/dcim/virtualdevicecontext.html:26 templates/vpn/l2vpn.html:18 +#: netbox/templates/dcim/virtualdevicecontext.html:26 +#: netbox/templates/vpn/l2vpn.html:18 msgid "Identifier" msgstr "Identificatie" -#: templates/exceptions/import_error.html:6 +#: netbox/templates/exceptions/import_error.html:6 msgid "" "A module import error occurred during this request. Common causes include " "the following:" @@ -12487,11 +13269,11 @@ msgstr "" "Tijdens dit verzoek is er een fout opgetreden bij het importeren van de " "module. Veelvoorkomende oorzaken zijn onder meer:" -#: templates/exceptions/import_error.html:10 +#: netbox/templates/exceptions/import_error.html:10 msgid "Missing required packages" msgstr "Vereiste pakketten ontbreken" -#: templates/exceptions/import_error.html:11 +#: netbox/templates/exceptions/import_error.html:11 msgid "" "This installation of NetBox might be missing one or more required Python " "packages. These packages are listed in requirements.txt and " @@ -12508,11 +13290,11 @@ msgstr "" "freeze vanaf de console en vergelijk de uitvoer met de lijst met " "vereiste pakketten." -#: templates/exceptions/import_error.html:20 +#: netbox/templates/exceptions/import_error.html:20 msgid "WSGI service not restarted after upgrade" msgstr "De WSGI-service is niet opnieuw gestart na de upgrade" -#: templates/exceptions/import_error.html:21 +#: netbox/templates/exceptions/import_error.html:21 msgid "" "If this installation has recently been upgraded, check that the WSGI service" " (e.g. gunicorn or uWSGI) has been restarted. This ensures that the new code" @@ -12522,7 +13304,7 @@ msgstr "" "service (bijvoorbeeld gunicorn of uWSGI) opnieuw is gestart. Dit zorgt " "ervoor dat de nieuwe code actief is." -#: templates/exceptions/permission_error.html:6 +#: netbox/templates/exceptions/permission_error.html:6 msgid "" "A file permission error was detected while processing this request. Common " "causes include the following:" @@ -12530,11 +13312,11 @@ msgstr "" "Tijdens de verwerking van dit verzoek is een fout in de bestandsrechten " "gedetecteerd. Veelvoorkomende oorzaken zijn onder meer:" -#: templates/exceptions/permission_error.html:10 +#: netbox/templates/exceptions/permission_error.html:10 msgid "Insufficient write permission to the media root" msgstr "Onvoldoende schrijfrechten naar de mediaroot" -#: templates/exceptions/permission_error.html:11 +#: netbox/templates/exceptions/permission_error.html:11 #, python-format msgid "" "The configured media root is %(media_root)s. Ensure that the " @@ -12545,7 +13327,7 @@ msgstr "" " de gebruiker NetBox toegang heeft om bestanden naar alle locaties binnen " "dit pad te schrijven." -#: templates/exceptions/programming_error.html:6 +#: netbox/templates/exceptions/programming_error.html:6 msgid "" "A database programming error was detected while processing this request. " "Common causes include the following:" @@ -12553,11 +13335,11 @@ msgstr "" "Er is een programmeerfout in de database gedetecteerd tijdens de verwerking " "van dit verzoek. Veelvoorkomende oorzaken zijn onder meer:" -#: templates/exceptions/programming_error.html:10 +#: netbox/templates/exceptions/programming_error.html:10 msgid "Database migrations missing" msgstr "Databasemigraties ontbreken" -#: templates/exceptions/programming_error.html:11 +#: netbox/templates/exceptions/programming_error.html:11 msgid "" "When upgrading to a new NetBox release, the upgrade script must be run to " "apply any new database migrations. You can run migrations manually by " @@ -12568,11 +13350,11 @@ msgstr "" "migraties handmatig uitvoeren door het uitvoeren van python3 manage.py" " migreren vanaf de command line." -#: templates/exceptions/programming_error.html:18 +#: netbox/templates/exceptions/programming_error.html:18 msgid "Unsupported PostgreSQL version" msgstr "Niet ondersteunde PostgreSQL-versie" -#: templates/exceptions/programming_error.html:19 +#: netbox/templates/exceptions/programming_error.html:19 msgid "" "Ensure that PostgreSQL version 12 or later is in use. You can check this by " "connecting to the database using NetBox's credentials and issuing a query " @@ -12583,99 +13365,102 @@ msgstr "" "inloggegevens van NetBox en een query uit te voeren voor SELECTEER " "VERSIE ()." -#: templates/extras/configcontext.html:45 -#: templates/extras/configtemplate.html:37 -#: templates/extras/exporttemplate.html:51 +#: netbox/templates/extras/configcontext.html:45 +#: netbox/templates/extras/configtemplate.html:37 +#: netbox/templates/extras/exporttemplate.html:51 msgid "The data file associated with this object has been deleted" msgstr "Het gegevensbestand dat aan dit object is gekoppeld, is verwijderd" -#: templates/extras/configcontext.html:54 -#: templates/extras/configtemplate.html:46 -#: templates/extras/exporttemplate.html:60 +#: netbox/templates/extras/configcontext.html:54 +#: netbox/templates/extras/configtemplate.html:46 +#: netbox/templates/extras/exporttemplate.html:60 msgid "Data Synced" msgstr "Gegevens gesynchroniseerd" -#: templates/extras/configcontext_list.html:7 -#: templates/extras/configtemplate_list.html:7 -#: templates/extras/exporttemplate_list.html:7 +#: netbox/templates/extras/configcontext_list.html:7 +#: netbox/templates/extras/configtemplate_list.html:7 +#: netbox/templates/extras/exporttemplate_list.html:7 msgid "Sync Data" msgstr "Gegevens synchroniseren" -#: templates/extras/configtemplate.html:56 +#: netbox/templates/extras/configtemplate.html:56 msgid "Environment Parameters" msgstr "Milieuparameters" -#: templates/extras/configtemplate.html:67 -#: templates/extras/exporttemplate.html:79 +#: netbox/templates/extras/configtemplate.html:67 +#: netbox/templates/extras/exporttemplate.html:79 msgid "Template" msgstr "Sjabloon" -#: templates/extras/customfield.html:30 templates/extras/customlink.html:21 +#: netbox/templates/extras/customfield.html:30 +#: netbox/templates/extras/customlink.html:21 msgid "Group Name" msgstr "Naam van de groep" -#: templates/extras/customfield.html:42 +#: netbox/templates/extras/customfield.html:42 msgid "Must be Unique" msgstr "Moet uniek zijn" -#: templates/extras/customfield.html:46 +#: netbox/templates/extras/customfield.html:46 msgid "Cloneable" msgstr "Kloonbaar" -#: templates/extras/customfield.html:56 +#: netbox/templates/extras/customfield.html:56 msgid "Default Value" msgstr "Standaardwaarde" -#: templates/extras/customfield.html:73 +#: netbox/templates/extras/customfield.html:73 msgid "Search Weight" msgstr "Zoekgewicht" -#: templates/extras/customfield.html:83 +#: netbox/templates/extras/customfield.html:83 msgid "Filter Logic" msgstr "Filterlogica" -#: templates/extras/customfield.html:87 +#: netbox/templates/extras/customfield.html:87 msgid "Display Weight" msgstr "Gewicht van het scherm" -#: templates/extras/customfield.html:91 +#: netbox/templates/extras/customfield.html:91 msgid "UI Visible" msgstr "UI zichtbaar" -#: templates/extras/customfield.html:95 +#: netbox/templates/extras/customfield.html:95 msgid "UI Editable" msgstr "UI bewerkbaar" -#: templates/extras/customfield.html:115 +#: netbox/templates/extras/customfield.html:115 msgid "Validation Rules" msgstr "Validatieregels" -#: templates/extras/customfield.html:126 +#: netbox/templates/extras/customfield.html:126 msgid "Regular Expression" msgstr "Reguliere expressie" -#: templates/extras/customlink.html:29 +#: netbox/templates/extras/customlink.html:29 msgid "Button Class" msgstr "Knopklasse" -#: templates/extras/customlink.html:39 templates/extras/exporttemplate.html:66 -#: templates/extras/savedfilter.html:39 +#: netbox/templates/extras/customlink.html:39 +#: netbox/templates/extras/exporttemplate.html:66 +#: netbox/templates/extras/savedfilter.html:39 msgid "Assigned Models" msgstr "Toegewezen modellen" -#: templates/extras/customlink.html:52 +#: netbox/templates/extras/customlink.html:52 msgid "Link Text" msgstr "Tekst koppelen" -#: templates/extras/customlink.html:58 +#: netbox/templates/extras/customlink.html:58 msgid "Link URL" msgstr "URL van de link" -#: templates/extras/dashboard/reset.html:4 templates/home.html:66 +#: netbox/templates/extras/dashboard/reset.html:4 +#: netbox/templates/home.html:66 msgid "Reset Dashboard" msgstr "Dashboard opnieuw instellen" -#: templates/extras/dashboard/reset.html:8 +#: netbox/templates/extras/dashboard/reset.html:8 msgid "" "This will remove all configured widgets and restore the " "default dashboard configuration." @@ -12683,7 +13468,7 @@ msgstr "" "Dit zal verwijderen allemaal geconfigureerde widgets en " "herstel de standaard dashboardconfiguratie." -#: templates/extras/dashboard/reset.html:13 +#: netbox/templates/extras/dashboard/reset.html:13 msgid "" "This change affects only your dashboard, and will not impact other " "users." @@ -12691,154 +13476,161 @@ msgstr "" "Deze wijziging is alleen van invloed jouw dashboard, en heeft geen " "invloed op andere gebruikers." -#: templates/extras/dashboard/widget.html:21 +#: netbox/templates/extras/dashboard/widget.html:21 msgid "widget configuration" msgstr "configuratie van de widget" -#: templates/extras/dashboard/widget.html:36 +#: netbox/templates/extras/dashboard/widget.html:36 msgid "Close widget" msgstr "Widget sluiten" -#: templates/extras/dashboard/widget_add.html:7 +#: netbox/templates/extras/dashboard/widget_add.html:7 msgid "Add a Widget" msgstr "Een widget toevoegen" -#: templates/extras/dashboard/widgets/bookmarks.html:14 +#: netbox/templates/extras/dashboard/widgets/bookmarks.html:14 msgid "No bookmarks have been added yet." msgstr "Er zijn nog geen bladwijzers toegevoegd." -#: templates/extras/dashboard/widgets/objectcounts.html:10 +#: netbox/templates/extras/dashboard/widgets/objectcounts.html:10 msgid "No permission" msgstr "Geen toestemming" -#: templates/extras/dashboard/widgets/objectlist.html:6 +#: netbox/templates/extras/dashboard/widgets/objectlist.html:6 msgid "No permission to view this content" msgstr "Geen toestemming om deze inhoud te bekijken" -#: templates/extras/dashboard/widgets/objectlist.html:10 +#: netbox/templates/extras/dashboard/widgets/objectlist.html:10 msgid "Unable to load content. Invalid view name" msgstr "Kan inhoud niet laden. Ongeldige weergavenaam" -#: templates/extras/dashboard/widgets/rssfeed.html:12 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:12 msgid "No content found" msgstr "Geen inhoud gevonden" -#: templates/extras/dashboard/widgets/rssfeed.html:18 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:18 msgid "There was a problem fetching the RSS feed" msgstr "Er is een probleem opgetreden bij het ophalen van de RSS-feed" -#: templates/extras/dashboard/widgets/rssfeed.html:21 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:21 msgid "HTTP" msgstr "HTTP" -#: templates/extras/eventrule.html:61 +#: netbox/templates/extras/eventrule.html:61 msgid "Conditions" msgstr "Voorwaarden" -#: templates/extras/exporttemplate.html:23 +#: netbox/templates/extras/exporttemplate.html:23 msgid "MIME Type" msgstr "MIME-type" -#: templates/extras/exporttemplate.html:27 +#: netbox/templates/extras/exporttemplate.html:27 msgid "File Extension" msgstr "bestandsextensie" -#: templates/extras/htmx/script_result.html:10 +#: netbox/templates/extras/htmx/script_result.html:10 msgid "Scheduled for" msgstr "Gepland voor" -#: templates/extras/htmx/script_result.html:15 +#: netbox/templates/extras/htmx/script_result.html:15 msgid "Duration" msgstr "Duur" -#: templates/extras/htmx/script_result.html:23 +#: netbox/templates/extras/htmx/script_result.html:23 msgid "Test Summary" msgstr "Samenvatting van de test" -#: templates/extras/htmx/script_result.html:43 +#: netbox/templates/extras/htmx/script_result.html:43 msgid "Log" msgstr "Logboek" -#: templates/extras/htmx/script_result.html:56 +#: netbox/templates/extras/htmx/script_result.html:56 msgid "Output" msgstr "Uitgang" -#: templates/extras/inc/result_pending.html:4 +#: netbox/templates/extras/inc/result_pending.html:4 msgid "Loading" msgstr "Aan het laden" -#: templates/extras/inc/result_pending.html:6 +#: netbox/templates/extras/inc/result_pending.html:6 msgid "Results pending" msgstr "Resultaten in behandeling" -#: templates/extras/journalentry.html:15 +#: netbox/templates/extras/journalentry.html:15 msgid "Journal Entry" msgstr "Dagboekinvoer" -#: templates/extras/notificationgroup.html:11 +#: netbox/templates/extras/notificationgroup.html:11 msgid "Notification Group" msgstr "Meldingsgroep" -#: templates/extras/notificationgroup.html:36 -#: templates/extras/notificationgroup.html:46 -#: utilities/templates/widgets/clearable_file_input.html:12 +#: netbox/templates/extras/notificationgroup.html:36 +#: netbox/templates/extras/notificationgroup.html:46 +#: netbox/utilities/templates/widgets/clearable_file_input.html:12 msgid "None assigned" msgstr "Geen toegewezen" -#: templates/extras/object_configcontext.html:19 +#: netbox/templates/extras/object_configcontext.html:19 msgid "The local config context overwrites all source contexts" msgstr "De lokale configuratiecontext overschrijft alle broncontexten" -#: templates/extras/object_configcontext.html:25 +#: netbox/templates/extras/object_configcontext.html:25 msgid "Source Contexts" msgstr "Broncontexten" -#: templates/extras/object_journal.html:17 +#: netbox/templates/extras/object_journal.html:17 msgid "New Journal Entry" msgstr "Nieuwe journaalpost" -#: templates/extras/report/base.html:30 +#: netbox/templates/extras/report/base.html:30 msgid "Report" msgstr "Rapporteren" -#: templates/extras/script.html:14 +#: netbox/templates/extras/script.html:14 msgid "You do not have permission to run scripts" msgstr "Je hebt geen toestemming om scripts uit te voeren" -#: templates/extras/script.html:41 templates/extras/script.html:45 -#: templates/extras/script_list.html:86 +#: netbox/templates/extras/script.html:41 +#: netbox/templates/extras/script.html:45 +#: netbox/templates/extras/script_list.html:87 msgid "Run Script" msgstr "Script uitvoeren" -#: templates/extras/script.html:51 templates/extras/script/source.html:10 +#: netbox/templates/extras/script.html:51 +#: netbox/templates/extras/script/source.html:10 msgid "Error loading script" msgstr "Fout bij laden van script" -#: templates/extras/script/jobs.html:16 +#: netbox/templates/extras/script/jobs.html:16 msgid "Script no longer exists in the source file." msgstr "Het script bestaat niet meer in het bronbestand." -#: templates/extras/script_list.html:46 +#: netbox/templates/extras/script_list.html:47 msgid "Last Run" msgstr "Laatste run" -#: templates/extras/script_list.html:61 +#: netbox/templates/extras/script_list.html:62 msgid "Script is no longer present in the source file" msgstr "Het script is niet langer aanwezig in het bronbestand" -#: templates/extras/script_list.html:74 +#: netbox/templates/extras/script_list.html:75 msgid "Never" msgstr "Nooit" -#: templates/extras/script_list.html:84 +#: netbox/templates/extras/script_list.html:85 msgid "Run Again" msgstr "Draai opnieuw" -#: templates/extras/script_list.html:138 +#: netbox/templates/extras/script_list.html:133 +#, python-format +msgid "Could not load scripts from module %(module)s" +msgstr "Kon de scripts van niet laden van module %(module)s" + +#: netbox/templates/extras/script_list.html:141 msgid "No Scripts Found" msgstr "Geen scripts gevonden" -#: templates/extras/script_list.html:141 +#: netbox/templates/extras/script_list.html:144 #, python-format msgid "" "Get started by creating a script from " @@ -12847,81 +13639,83 @@ msgstr "" "Ga aan de slag met een script maken " "van een geüpload bestand of een gegevensbron." -#: templates/extras/script_result.html:35 -#: templates/generic/object_list.html:50 templates/search.html:13 +#: netbox/templates/extras/script_result.html:35 +#: netbox/templates/generic/object_list.html:50 +#: netbox/templates/search.html:13 msgid "Results" msgstr "Resultaten" -#: templates/extras/script_result.html:46 +#: netbox/templates/extras/script_result.html:46 msgid "Log threshold" msgstr "Drempel voor loggen" -#: templates/extras/script_result.html:56 +#: netbox/templates/extras/script_result.html:56 msgid "All" msgstr "Alles" -#: templates/extras/tag.html:32 +#: netbox/templates/extras/tag.html:32 msgid "Tagged Items" msgstr "Getagde artikelen" -#: templates/extras/tag.html:43 +#: netbox/templates/extras/tag.html:43 msgid "Allowed Object Types" msgstr "Toegestane objecttypen" -#: templates/extras/tag.html:51 +#: netbox/templates/extras/tag.html:51 msgid "Any" msgstr "Elke" -#: templates/extras/tag.html:57 +#: netbox/templates/extras/tag.html:57 msgid "Tagged Item Types" msgstr "Typen artikelen met tags" -#: templates/extras/tag.html:81 +#: netbox/templates/extras/tag.html:81 msgid "Tagged Objects" msgstr "Getagde objecten" -#: templates/extras/webhook.html:26 +#: netbox/templates/extras/webhook.html:26 msgid "HTTP Method" msgstr "HTTP-methode" -#: templates/extras/webhook.html:34 +#: netbox/templates/extras/webhook.html:34 msgid "HTTP Content Type" msgstr "HTTP-inhoudstype" -#: templates/extras/webhook.html:47 +#: netbox/templates/extras/webhook.html:47 msgid "SSL Verification" msgstr "SSL-verificatie" -#: templates/extras/webhook.html:60 +#: netbox/templates/extras/webhook.html:60 msgid "Additional Headers" msgstr "Aanvullende kopteksten" -#: templates/extras/webhook.html:70 +#: netbox/templates/extras/webhook.html:70 msgid "Body Template" msgstr "Lichaamssjabloon" -#: templates/generic/bulk_add_component.html:29 +#: netbox/templates/generic/bulk_add_component.html:29 msgid "Bulk Creation" msgstr "Creatie in bulk" -#: templates/generic/bulk_add_component.html:34 -#: templates/generic/bulk_delete.html:32 templates/generic/bulk_edit.html:33 +#: netbox/templates/generic/bulk_add_component.html:34 +#: netbox/templates/generic/bulk_delete.html:32 +#: netbox/templates/generic/bulk_edit.html:33 msgid "Selected Objects" msgstr "Geselecteerde objecten" -#: templates/generic/bulk_add_component.html:58 +#: netbox/templates/generic/bulk_add_component.html:58 msgid "to Add" msgstr "om toe te voegen" -#: templates/generic/bulk_delete.html:27 +#: netbox/templates/generic/bulk_delete.html:27 msgid "Bulk Delete" msgstr "Bulk verwijderen" -#: templates/generic/bulk_delete.html:49 +#: netbox/templates/generic/bulk_delete.html:49 msgid "Confirm Bulk Deletion" msgstr "Bulkverwijdering bevestigen" -#: templates/generic/bulk_delete.html:50 +#: netbox/templates/generic/bulk_delete.html:50 #, python-format msgid "" "The following operation will delete %(count)s " @@ -12932,66 +13726,69 @@ msgstr "" "%(type_plural)s. Controleer de geselecteerde objecten zorgvuldig en bevestig" " deze actie." -#: templates/generic/bulk_edit.html:21 templates/generic/object_edit.html:22 +#: netbox/templates/generic/bulk_edit.html:21 +#: netbox/templates/generic/object_edit.html:22 msgid "Editing" msgstr "Bewerken" -#: templates/generic/bulk_edit.html:28 +#: netbox/templates/generic/bulk_edit.html:28 msgid "Bulk Edit" msgstr "Bulkbewerking" -#: templates/generic/bulk_edit.html:107 templates/generic/bulk_rename.html:66 +#: netbox/templates/generic/bulk_edit.html:107 +#: netbox/templates/generic/bulk_rename.html:66 msgid "Apply" msgstr "Toepassen" -#: templates/generic/bulk_import.html:19 +#: netbox/templates/generic/bulk_import.html:19 msgid "Bulk Import" msgstr "Importeren in bulk" -#: templates/generic/bulk_import.html:25 +#: netbox/templates/generic/bulk_import.html:25 msgid "Direct Import" msgstr "Rechtstreeks importeren" -#: templates/generic/bulk_import.html:30 +#: netbox/templates/generic/bulk_import.html:30 msgid "Upload File" msgstr "Bestand uploaden" -#: templates/generic/bulk_import.html:58 templates/generic/bulk_import.html:80 -#: templates/generic/bulk_import.html:102 +#: netbox/templates/generic/bulk_import.html:58 +#: netbox/templates/generic/bulk_import.html:80 +#: netbox/templates/generic/bulk_import.html:102 msgid "Submit" msgstr "Verzenden" -#: templates/generic/bulk_import.html:113 +#: netbox/templates/generic/bulk_import.html:113 msgid "Field Options" msgstr "Veldopties" -#: templates/generic/bulk_import.html:119 +#: netbox/templates/generic/bulk_import.html:119 msgid "Accessor" msgstr "Accessor" -#: templates/generic/bulk_import.html:148 +#: netbox/templates/generic/bulk_import.html:148 msgid "choices" msgstr "keuzes" -#: templates/generic/bulk_import.html:161 +#: netbox/templates/generic/bulk_import.html:161 msgid "Import Value" msgstr "Importwaarde" -#: templates/generic/bulk_import.html:181 +#: netbox/templates/generic/bulk_import.html:181 msgid "Format: YYYY-MM-DD" msgstr "Formaat: JJJJ-MM-DD" -#: templates/generic/bulk_import.html:183 +#: netbox/templates/generic/bulk_import.html:183 msgid "Specify true or false" msgstr "Specificeer waar of onwaar" -#: templates/generic/bulk_import.html:195 +#: netbox/templates/generic/bulk_import.html:195 msgid "Required fields must be specified for all objects." msgstr "" "Verplichte velden moeten voor alle objecten worden " "gespecificeerd." -#: templates/generic/bulk_import.html:201 +#: netbox/templates/generic/bulk_import.html:201 #, python-format msgid "" "Related objects may be referenced by any unique attribute. For example, " @@ -13001,15 +13798,15 @@ msgstr "" "Bijvoorbeeld %(example)s zou een VRF identificeren aan de hand " "van zijn route-identificator." -#: templates/generic/bulk_remove.html:28 +#: netbox/templates/generic/bulk_remove.html:28 msgid "Bulk Remove" msgstr "Bulk verwijderen" -#: templates/generic/bulk_remove.html:42 +#: netbox/templates/generic/bulk_remove.html:42 msgid "Confirm Bulk Removal" msgstr "Bulkverwijdering bevestigen" -#: templates/generic/bulk_remove.html:43 +#: netbox/templates/generic/bulk_remove.html:43 #, python-format msgid "" "The following operation will remove %(count)s %(obj_type_plural)s from " @@ -13020,72 +13817,72 @@ msgstr "" "%(parent_obj)s. Lees a.u.b. zorgvuldig de %(obj_type_plural)s om hieronder " "te worden verwijderd en te bevestigen." -#: templates/generic/bulk_remove.html:64 +#: netbox/templates/generic/bulk_remove.html:64 #, python-format msgid "Remove these %(count)s %(obj_type_plural)s" msgstr "Verwijder deze %(count)s %(obj_type_plural)s" -#: templates/generic/bulk_rename.html:20 +#: netbox/templates/generic/bulk_rename.html:20 msgid "Renaming" msgstr "Hernoemen" -#: templates/generic/bulk_rename.html:27 +#: netbox/templates/generic/bulk_rename.html:27 msgid "Bulk Rename" msgstr "Bulk hernoemen" -#: templates/generic/bulk_rename.html:39 +#: netbox/templates/generic/bulk_rename.html:39 msgid "Current Name" msgstr "Huidige naam" -#: templates/generic/bulk_rename.html:40 +#: netbox/templates/generic/bulk_rename.html:40 msgid "New Name" msgstr "Nieuwe naam" -#: templates/generic/bulk_rename.html:64 -#: utilities/templates/widgets/markdown_input.html:11 +#: netbox/templates/generic/bulk_rename.html:64 +#: netbox/utilities/templates/widgets/markdown_input.html:11 msgid "Preview" msgstr "Voorbeeld" -#: templates/generic/confirmation_form.html:16 +#: netbox/templates/generic/confirmation_form.html:16 msgid "Are you sure" msgstr "Weet je het zeker" -#: templates/generic/confirmation_form.html:20 +#: netbox/templates/generic/confirmation_form.html:20 msgid "Confirm" msgstr "Bevestigen" -#: templates/generic/object_children.html:47 -#: utilities/templates/buttons/bulk_edit.html:4 +#: netbox/templates/generic/object_children.html:47 +#: netbox/utilities/templates/buttons/bulk_edit.html:4 msgid "Edit Selected" msgstr "Geselecteerde bewerken" -#: templates/generic/object_children.html:61 -#: utilities/templates/buttons/bulk_delete.html:4 +#: netbox/templates/generic/object_children.html:61 +#: netbox/utilities/templates/buttons/bulk_delete.html:4 msgid "Delete Selected" msgstr "Geselecteerde verwijderen" -#: templates/generic/object_edit.html:24 +#: netbox/templates/generic/object_edit.html:24 #, python-format msgid "Add a new %(object_type)s" msgstr "Voeg een nieuwe toe %(object_type)s" -#: templates/generic/object_edit.html:35 +#: netbox/templates/generic/object_edit.html:35 msgid "View model documentation" msgstr "Modeldocumentatie bekijken" -#: templates/generic/object_edit.html:36 +#: netbox/templates/generic/object_edit.html:36 msgid "Help" msgstr "Help" -#: templates/generic/object_edit.html:83 +#: netbox/templates/generic/object_edit.html:83 msgid "Create & Add Another" msgstr "Nog een aanmaken en toevoegen" -#: templates/generic/object_list.html:57 +#: netbox/templates/generic/object_list.html:57 msgid "Filters" msgstr "Filters" -#: templates/generic/object_list.html:88 +#: netbox/templates/generic/object_list.html:88 #, python-format msgid "" "Select all %(count)s " @@ -13095,40 +13892,40 @@ msgstr "" "count\">%(count)s %(object_type_plural)s overeenkomende " "vraag" -#: templates/home.html:15 +#: netbox/templates/home.html:15 msgid "New Release Available" msgstr "Nieuwe release beschikbaar" -#: templates/home.html:16 +#: netbox/templates/home.html:16 msgid "is available" msgstr "is beschikbaar" -#: templates/home.html:18 +#: netbox/templates/home.html:18 msgctxt "Document title" msgid "Upgrade Instructions" msgstr "Instructies voor de upgrade" -#: templates/home.html:40 +#: netbox/templates/home.html:40 msgid "Unlock Dashboard" msgstr "Dashboard ontgrendelen" -#: templates/home.html:49 +#: netbox/templates/home.html:49 msgid "Lock Dashboard" msgstr "Dashboard vergrendelen" -#: templates/home.html:60 +#: netbox/templates/home.html:60 msgid "Add Widget" msgstr "Widget toevoegen" -#: templates/home.html:63 +#: netbox/templates/home.html:63 msgid "Save Layout" msgstr "Lay-out opslaan" -#: templates/htmx/delete_form.html:7 +#: netbox/templates/htmx/delete_form.html:7 msgid "Confirm Deletion" msgstr "Verwijdering bevestigen" -#: templates/htmx/delete_form.html:11 +#: netbox/templates/htmx/delete_form.html:11 #, python-format msgid "" "Are you sure you want to delete " @@ -13137,40 +13934,40 @@ msgstr "" "Weet je zeker dat je dat wilt verwijderen %(object_type)s %(object)s?" -#: templates/htmx/delete_form.html:17 +#: netbox/templates/htmx/delete_form.html:17 msgid "The following objects will be deleted as a result of this action." msgstr "Als gevolg van deze actie worden de volgende objecten verwijderd." -#: templates/htmx/notifications.html:15 +#: netbox/templates/htmx/notifications.html:15 msgid "ago" msgstr "geleden" -#: templates/htmx/notifications.html:26 +#: netbox/templates/htmx/notifications.html:26 msgid "No unread notifications" msgstr "Geen ongelezen meldingen" -#: templates/htmx/notifications.html:31 +#: netbox/templates/htmx/notifications.html:31 msgid "All notifications" msgstr "Alle meldingen" -#: templates/htmx/object_selector.html:5 +#: netbox/templates/htmx/object_selector.html:5 msgid "Select" msgstr "Selecteer" -#: templates/inc/filter_list.html:43 -#: utilities/templates/helpers/table_config_form.html:39 +#: netbox/templates/inc/filter_list.html:43 +#: netbox/utilities/templates/helpers/table_config_form.html:39 msgid "Reset" msgstr "Resetten" -#: templates/inc/light_toggle.html:4 +#: netbox/templates/inc/light_toggle.html:4 msgid "Enable dark mode" msgstr "Schakel de donkere modus in" -#: templates/inc/light_toggle.html:7 +#: netbox/templates/inc/light_toggle.html:7 msgid "Enable light mode" msgstr "Lichtmodus inschakelen" -#: templates/inc/missing_prerequisites.html:8 +#: netbox/templates/inc/missing_prerequisites.html:8 #, python-format msgid "" "Before you can add a %(model)s you must first create a " @@ -13179,281 +13976,283 @@ msgstr "" "Voordat je een kunt toevoegen %(model)s je moet eerst een aanmaken " "%(prerequisite_model)s." -#: templates/inc/paginator.html:15 +#: netbox/templates/inc/paginator.html:15 msgid "Page selection" msgstr "Paginaselectie" -#: templates/inc/paginator.html:75 +#: netbox/templates/inc/paginator.html:75 #, python-format msgid "Showing %(start)s-%(end)s of %(total)s" msgstr "bewijs %(start)s-%(end)s van %(total)s" -#: templates/inc/paginator.html:82 +#: netbox/templates/inc/paginator.html:82 msgid "Pagination options" msgstr "Pagineringsopties" -#: templates/inc/paginator.html:86 +#: netbox/templates/inc/paginator.html:86 msgid "Per Page" msgstr "Per pagina" -#: templates/inc/panels/image_attachments.html:10 +#: netbox/templates/inc/panels/image_attachments.html:10 msgid "Attach an image" msgstr "Een afbeelding bijvoegen" -#: templates/inc/panels/related_objects.html:5 +#: netbox/templates/inc/panels/related_objects.html:5 msgid "Related Objects" msgstr "Gerelateerde objecten" -#: templates/inc/panels/tags.html:11 +#: netbox/templates/inc/panels/tags.html:11 msgid "No tags assigned" msgstr "Geen tags toegewezen" -#: templates/inc/sync_warning.html:10 +#: netbox/templates/inc/sync_warning.html:10 msgid "Data is out of sync with upstream file" msgstr "Gegevens lopen niet synchroon met het upstream-bestand" -#: templates/inc/table_controls_htmx.html:7 +#: netbox/templates/inc/table_controls_htmx.html:7 msgid "Quick search" msgstr "Snel zoeken" -#: templates/inc/table_controls_htmx.html:20 +#: netbox/templates/inc/table_controls_htmx.html:20 msgid "Saved filter" msgstr "Opgeslagen filter" -#: templates/inc/table_htmx.html:18 +#: netbox/templates/inc/table_htmx.html:18 msgid "Clear ordering" msgstr "Duidelijke bestelling" -#: templates/inc/user_menu.html:6 +#: netbox/templates/inc/user_menu.html:6 msgid "Help center" msgstr "Helpcentrum" -#: templates/inc/user_menu.html:41 +#: netbox/templates/inc/user_menu.html:41 msgid "Django Admin" msgstr "Django-beheerder" -#: templates/inc/user_menu.html:61 +#: netbox/templates/inc/user_menu.html:61 msgid "Log Out" msgstr "Uitloggen" -#: templates/inc/user_menu.html:68 templates/login.html:38 +#: netbox/templates/inc/user_menu.html:68 netbox/templates/login.html:38 msgid "Log In" msgstr "Inloggen" -#: templates/ipam/aggregate.html:14 templates/ipam/ipaddress.html:14 -#: templates/ipam/iprange.html:13 templates/ipam/prefix.html:15 +#: netbox/templates/ipam/aggregate.html:14 +#: netbox/templates/ipam/ipaddress.html:14 +#: netbox/templates/ipam/iprange.html:13 netbox/templates/ipam/prefix.html:15 msgid "Family" msgstr "Familie" -#: templates/ipam/aggregate.html:39 +#: netbox/templates/ipam/aggregate.html:39 msgid "Date Added" msgstr "Datum toegevoegd" -#: templates/ipam/aggregate/prefixes.html:8 -#: templates/ipam/prefix/prefixes.html:8 templates/ipam/role.html:10 +#: netbox/templates/ipam/aggregate/prefixes.html:8 +#: netbox/templates/ipam/prefix/prefixes.html:8 +#: netbox/templates/ipam/role.html:10 msgid "Add Prefix" msgstr "Voorvoegsel toevoegen" -#: templates/ipam/asn.html:23 +#: netbox/templates/ipam/asn.html:23 msgid "AS Number" msgstr "AS-nummer" -#: templates/ipam/fhrpgroup.html:52 +#: netbox/templates/ipam/fhrpgroup.html:52 msgid "Authentication Type" msgstr "Authenticatietype" -#: templates/ipam/fhrpgroup.html:56 +#: netbox/templates/ipam/fhrpgroup.html:56 msgid "Authentication Key" msgstr "Verificatiesleutel" -#: templates/ipam/fhrpgroup.html:69 +#: netbox/templates/ipam/fhrpgroup.html:69 msgid "Virtual IP Addresses" msgstr "Virtuele IP-adressen" -#: templates/ipam/inc/ipaddress_edit_header.html:13 +#: netbox/templates/ipam/inc/ipaddress_edit_header.html:13 msgid "Assign IP" msgstr "IP toewijzen" -#: templates/ipam/inc/ipaddress_edit_header.html:19 +#: netbox/templates/ipam/inc/ipaddress_edit_header.html:19 msgid "Bulk Create" msgstr "Bulk aanmaken" -#: templates/ipam/inc/panels/fhrp_groups.html:10 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:10 msgid "Create Group" msgstr "Groep aanmaken" -#: templates/ipam/inc/panels/fhrp_groups.html:25 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:25 msgid "Virtual IPs" msgstr "Virtuele IP-adressen" -#: templates/ipam/inc/toggle_available.html:7 +#: netbox/templates/ipam/inc/toggle_available.html:7 msgid "Show Assigned" msgstr "Toegewezen weergeven" -#: templates/ipam/inc/toggle_available.html:10 +#: netbox/templates/ipam/inc/toggle_available.html:10 msgid "Show Available" msgstr "Beschikbaar weergeven" -#: templates/ipam/inc/toggle_available.html:13 +#: netbox/templates/ipam/inc/toggle_available.html:13 msgid "Show All" msgstr "Alles weergeven" -#: templates/ipam/ipaddress.html:23 templates/ipam/iprange.html:45 -#: templates/ipam/prefix.html:24 +#: netbox/templates/ipam/ipaddress.html:23 +#: netbox/templates/ipam/iprange.html:45 netbox/templates/ipam/prefix.html:24 msgid "Global" msgstr "Globaal" -#: templates/ipam/ipaddress.html:85 +#: netbox/templates/ipam/ipaddress.html:85 msgid "NAT (outside)" msgstr "NAT (buiten)" -#: templates/ipam/ipaddress_assign.html:8 +#: netbox/templates/ipam/ipaddress_assign.html:8 msgid "Assign an IP Address" msgstr "Een IP-adres toewijzen" -#: templates/ipam/ipaddress_assign.html:22 +#: netbox/templates/ipam/ipaddress_assign.html:22 msgid "Select IP Address" msgstr "IP-adres selecteren" -#: templates/ipam/ipaddress_assign.html:35 +#: netbox/templates/ipam/ipaddress_assign.html:35 msgid "Search Results" msgstr "Zoekresultaten" -#: templates/ipam/ipaddress_bulk_add.html:6 +#: netbox/templates/ipam/ipaddress_bulk_add.html:6 msgid "Bulk Add IP Addresses" msgstr "IP-adressen in bulk toevoegen" -#: templates/ipam/iprange.html:17 +#: netbox/templates/ipam/iprange.html:17 msgid "Starting Address" msgstr "Startadres" -#: templates/ipam/iprange.html:21 +#: netbox/templates/ipam/iprange.html:21 msgid "Ending Address" msgstr "Eindadres" -#: templates/ipam/iprange.html:33 templates/ipam/prefix.html:110 +#: netbox/templates/ipam/iprange.html:33 netbox/templates/ipam/prefix.html:110 msgid "Marked fully utilized" msgstr "Gemarkeerd als volledig gebruikt" -#: templates/ipam/prefix.html:99 +#: netbox/templates/ipam/prefix.html:99 msgid "Addressing Details" msgstr "Adresseringsgegevens" -#: templates/ipam/prefix.html:118 +#: netbox/templates/ipam/prefix.html:118 msgid "Child IPs" msgstr "IP's voor kinderen" -#: templates/ipam/prefix.html:126 +#: netbox/templates/ipam/prefix.html:126 msgid "Available IPs" msgstr "Beschikbare IP-adressen" -#: templates/ipam/prefix.html:138 +#: netbox/templates/ipam/prefix.html:138 msgid "First available IP" msgstr "Eerste beschikbare IP" -#: templates/ipam/prefix.html:179 +#: netbox/templates/ipam/prefix.html:179 msgid "Prefix Details" msgstr "Details van het voorvoegsel" -#: templates/ipam/prefix.html:185 +#: netbox/templates/ipam/prefix.html:185 msgid "Network Address" msgstr "Netwerkadres" -#: templates/ipam/prefix.html:189 +#: netbox/templates/ipam/prefix.html:189 msgid "Network Mask" msgstr "Netwerkmasker" -#: templates/ipam/prefix.html:193 +#: netbox/templates/ipam/prefix.html:193 msgid "Wildcard Mask" msgstr "Wildcard-masker" -#: templates/ipam/prefix.html:197 +#: netbox/templates/ipam/prefix.html:197 msgid "Broadcast Address" msgstr "Adres van de uitzending" -#: templates/ipam/prefix/ip_ranges.html:7 +#: netbox/templates/ipam/prefix/ip_ranges.html:7 msgid "Add IP Range" msgstr "IP-bereik toevoegen" -#: templates/ipam/prefix_list.html:7 +#: netbox/templates/ipam/prefix_list.html:7 msgid "Hide Depth Indicators" msgstr "Diepte-indicatoren verbergen" -#: templates/ipam/prefix_list.html:11 +#: netbox/templates/ipam/prefix_list.html:11 msgid "Max Depth" msgstr "Maximale diepte" -#: templates/ipam/prefix_list.html:28 +#: netbox/templates/ipam/prefix_list.html:28 msgid "Max Length" msgstr "Maximale lengte" -#: templates/ipam/rir.html:10 +#: netbox/templates/ipam/rir.html:10 msgid "Add Aggregate" msgstr "Aggregaat toevoegen" -#: templates/ipam/routetarget.html:38 +#: netbox/templates/ipam/routetarget.html:38 msgid "Importing VRFs" msgstr "VRF's importeren" -#: templates/ipam/routetarget.html:44 +#: netbox/templates/ipam/routetarget.html:44 msgid "Exporting VRFs" msgstr "VRF's exporteren" -#: templates/ipam/routetarget.html:52 +#: netbox/templates/ipam/routetarget.html:52 msgid "Importing L2VPNs" msgstr "L2VPN's importeren" -#: templates/ipam/routetarget.html:58 +#: netbox/templates/ipam/routetarget.html:58 msgid "Exporting L2VPNs" msgstr "L2VPN's exporteren" -#: templates/ipam/vlan.html:88 +#: netbox/templates/ipam/vlan.html:88 msgid "Add a Prefix" msgstr "Een voorvoegsel toevoegen" -#: templates/ipam/vlangroup.html:18 +#: netbox/templates/ipam/vlangroup.html:18 msgid "Add VLAN" msgstr "VLAN toevoegen" -#: templates/ipam/vrf.html:16 +#: netbox/templates/ipam/vrf.html:16 msgid "Route Distinguisher" msgstr "Routeherkenner" -#: templates/ipam/vrf.html:29 +#: netbox/templates/ipam/vrf.html:29 msgid "Unique IP Space" msgstr "Unieke IP-ruimte" -#: templates/login.html:29 -#: utilities/templates/form_helpers/render_errors.html:7 +#: netbox/templates/login.html:29 +#: netbox/utilities/templates/form_helpers/render_errors.html:7 msgid "Errors" msgstr "Fouten" -#: templates/login.html:69 +#: netbox/templates/login.html:69 msgid "Sign In" msgstr "Inloggen" -#: templates/login.html:77 +#: netbox/templates/login.html:77 msgctxt "Denotes an alternative option" msgid "Or" msgstr "Of" -#: templates/media_failure.html:7 +#: netbox/templates/media_failure.html:7 msgid "Static Media Failure - NetBox" msgstr "Statische mediafout - NetBox" -#: templates/media_failure.html:21 +#: netbox/templates/media_failure.html:21 msgid "Static Media Failure" msgstr "Statische mediafout" -#: templates/media_failure.html:23 +#: netbox/templates/media_failure.html:23 msgid "The following static media file failed to load" msgstr "Het volgende statische mediabestand kon niet worden geladen" -#: templates/media_failure.html:26 +#: netbox/templates/media_failure.html:26 msgid "Check the following" msgstr "Controleer het volgende" -#: templates/media_failure.html:29 +#: netbox/templates/media_failure.html:29 msgid "" "manage.py collectstatic was run during the most recent upgrade." " This installs the most recent iteration of each static file into the static" @@ -13463,7 +14262,7 @@ msgstr "" "recente upgrade. Hiermee wordt de meest recente iteratie van elk statisch " "bestand in het statische hoofdpad geïnstalleerd." -#: templates/media_failure.html:35 +#: netbox/templates/media_failure.html:35 #, python-format msgid "" "The HTTP service (e.g. nginx or Apache) is configured to serve files from " @@ -13475,7 +14274,7 @@ msgstr "" " href=\"%(docs_url)s\">de installatiedocumentatie voor verdere " "begeleiding." -#: templates/media_failure.html:47 +#: netbox/templates/media_failure.html:47 #, python-format msgid "" "The file %(filename)s exists in the static root directory and " @@ -13484,550 +14283,573 @@ msgstr "" "Het bestand %(filename)s bestaat in de statische hoofdmap en is" " leesbaar voor de HTTP-server." -#: templates/media_failure.html:55 +#: netbox/templates/media_failure.html:55 #, python-format msgid "Click here to attempt loading NetBox again." msgstr "" "Klik hier om te proberen NetBox opnieuw te " "laden." -#: templates/tenancy/contact.html:18 tenancy/filtersets.py:147 -#: tenancy/forms/bulk_edit.py:137 tenancy/forms/filtersets.py:102 -#: tenancy/forms/forms.py:56 tenancy/forms/model_forms.py:106 -#: tenancy/forms/model_forms.py:130 tenancy/tables/contacts.py:98 +#: netbox/templates/tenancy/contact.html:18 netbox/tenancy/filtersets.py: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/model_forms.py:130 +#: netbox/tenancy/tables/contacts.py:98 msgid "Contact" msgstr "Neem contact op" -#: templates/tenancy/contact.html:29 tenancy/forms/bulk_edit.py:99 +#: netbox/templates/tenancy/contact.html:29 +#: netbox/tenancy/forms/bulk_edit.py:99 msgid "Title" msgstr "Titel" -#: templates/tenancy/contact.html:33 tenancy/forms/bulk_edit.py:104 -#: tenancy/tables/contacts.py:64 +#: netbox/templates/tenancy/contact.html:33 +#: netbox/tenancy/forms/bulk_edit.py:104 netbox/tenancy/tables/contacts.py:64 msgid "Phone" msgstr "Telefoon" -#: templates/tenancy/contactgroup.html:18 tenancy/forms/forms.py:66 -#: tenancy/forms/model_forms.py:75 +#: netbox/templates/tenancy/contactgroup.html:18 +#: netbox/tenancy/forms/forms.py:66 netbox/tenancy/forms/model_forms.py:75 msgid "Contact Group" msgstr "Contactgroep" -#: templates/tenancy/contactgroup.html:50 +#: netbox/templates/tenancy/contactgroup.html:50 msgid "Add Contact Group" msgstr "Contactgroep toevoegen" -#: templates/tenancy/contactrole.html:15 tenancy/filtersets.py:152 -#: tenancy/forms/forms.py:61 tenancy/forms/model_forms.py:87 +#: netbox/templates/tenancy/contactrole.html:15 +#: netbox/tenancy/filtersets.py:152 netbox/tenancy/forms/forms.py:61 +#: netbox/tenancy/forms/model_forms.py:87 msgid "Contact Role" msgstr "Rol van contactpersoon" -#: templates/tenancy/object_contacts.html:9 +#: netbox/templates/tenancy/object_contacts.html:9 msgid "Add a contact" msgstr "Een contact toevoegen" -#: templates/tenancy/tenantgroup.html:17 +#: netbox/templates/tenancy/tenantgroup.html:17 msgid "Add Tenant" msgstr "Tenant toevoegen" -#: templates/tenancy/tenantgroup.html:26 tenancy/forms/model_forms.py:32 -#: tenancy/tables/columns.py:51 tenancy/tables/columns.py:61 +#: netbox/templates/tenancy/tenantgroup.html:26 +#: netbox/tenancy/forms/model_forms.py:32 netbox/tenancy/tables/columns.py:51 +#: netbox/tenancy/tables/columns.py:61 msgid "Tenant Group" msgstr "Tenant Groep" -#: templates/tenancy/tenantgroup.html:59 +#: netbox/templates/tenancy/tenantgroup.html:59 msgid "Add Tenant Group" msgstr "Tenant Groep toevoegen" -#: templates/users/group.html:39 templates/users/user.html:63 +#: netbox/templates/users/group.html:39 netbox/templates/users/user.html:63 msgid "Assigned Permissions" msgstr "Toegewezen machtigingen" -#: templates/users/objectpermission.html:6 -#: templates/users/objectpermission.html:14 users/forms/filtersets.py:66 +#: netbox/templates/users/objectpermission.html:6 +#: netbox/templates/users/objectpermission.html:14 +#: netbox/users/forms/filtersets.py:66 msgid "Permission" msgstr "Toestemming" -#: templates/users/objectpermission.html:34 +#: netbox/templates/users/objectpermission.html:34 msgid "View" msgstr "Bekijken" -#: templates/users/objectpermission.html:52 users/forms/model_forms.py:315 +#: netbox/templates/users/objectpermission.html:52 +#: netbox/users/forms/model_forms.py:315 msgid "Constraints" msgstr "Beperkingen" -#: templates/users/objectpermission.html:72 +#: netbox/templates/users/objectpermission.html:72 msgid "Assigned Users" msgstr "Toegewezen gebruikers" -#: templates/virtualization/cluster.html:52 +#: netbox/templates/virtualization/cluster.html:52 msgid "Allocated Resources" msgstr "Toegewezen middelen" -#: templates/virtualization/cluster.html:55 -#: templates/virtualization/virtualmachine.html:125 +#: netbox/templates/virtualization/cluster.html:55 +#: netbox/templates/virtualization/virtualmachine.html:125 msgid "Virtual CPUs" msgstr "Virtuele CPU's" -#: templates/virtualization/cluster.html:59 -#: templates/virtualization/virtualmachine.html:129 +#: netbox/templates/virtualization/cluster.html:59 +#: netbox/templates/virtualization/virtualmachine.html:129 msgid "Memory" msgstr "Geheugen" -#: templates/virtualization/cluster.html:69 -#: templates/virtualization/virtualmachine.html:140 +#: netbox/templates/virtualization/cluster.html:69 +#: netbox/templates/virtualization/virtualmachine.html:140 msgid "Disk Space" msgstr "Schijfruimte" -#: templates/virtualization/cluster/base.html:18 +#: netbox/templates/virtualization/cluster/base.html:18 msgid "Add Virtual Machine" msgstr "Virtuele machine toevoegen" -#: templates/virtualization/cluster/base.html:24 +#: netbox/templates/virtualization/cluster/base.html:24 msgid "Assign Device" msgstr "Apparaat toewijzen" -#: templates/virtualization/cluster/devices.html:10 +#: netbox/templates/virtualization/cluster/devices.html:10 msgid "Remove Selected" msgstr "Geselecteerde verwijderen" -#: templates/virtualization/cluster_add_devices.html:9 +#: netbox/templates/virtualization/cluster_add_devices.html:9 #, python-format msgid "Add Device to Cluster %(cluster)s" msgstr "Apparaat aan cluster toevoegen %(cluster)s" -#: templates/virtualization/cluster_add_devices.html:23 +#: netbox/templates/virtualization/cluster_add_devices.html:23 msgid "Device Selection" msgstr "Selectie van het apparaat" -#: templates/virtualization/cluster_add_devices.html:31 +#: netbox/templates/virtualization/cluster_add_devices.html:31 msgid "Add Devices" msgstr "Apparaten toevoegen" -#: templates/virtualization/clustergroup.html:10 -#: templates/virtualization/clustertype.html:10 +#: netbox/templates/virtualization/clustergroup.html:10 +#: netbox/templates/virtualization/clustertype.html:10 msgid "Add Cluster" msgstr "Cluster toevoegen" -#: templates/virtualization/clustergroup.html:19 -#: virtualization/forms/model_forms.py:50 +#: netbox/templates/virtualization/clustergroup.html:19 +#: netbox/virtualization/forms/model_forms.py:50 msgid "Cluster Group" msgstr "Clustergroep" -#: templates/virtualization/clustertype.html:19 -#: templates/virtualization/virtualmachine.html:110 -#: virtualization/forms/model_forms.py:36 +#: netbox/templates/virtualization/clustertype.html:19 +#: netbox/templates/virtualization/virtualmachine.html:110 +#: netbox/virtualization/forms/model_forms.py:36 msgid "Cluster Type" msgstr "Clustertype" -#: templates/virtualization/virtualdisk.html:18 +#: netbox/templates/virtualization/virtualdisk.html:18 msgid "Virtual Disk" msgstr "Virtuele schijf" -#: templates/virtualization/virtualmachine.html:122 -#: virtualization/forms/bulk_edit.py:190 -#: virtualization/forms/model_forms.py:224 +#: netbox/templates/virtualization/virtualmachine.html:122 +#: netbox/virtualization/forms/bulk_edit.py:190 +#: netbox/virtualization/forms/model_forms.py:224 msgid "Resources" msgstr "Hulpbronnen" -#: templates/virtualization/virtualmachine.html:178 +#: netbox/templates/virtualization/virtualmachine.html:178 msgid "Add Virtual Disk" msgstr "Virtuele schijf toevoegen" -#: templates/vpn/ikepolicy.html:10 templates/vpn/ipsecprofile.html:33 -#: vpn/tables/crypto.py:166 +#: 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" msgstr "IKE-beleid" -#: templates/vpn/ikepolicy.html:21 +#: netbox/templates/vpn/ikepolicy.html:21 msgid "IKE Version" msgstr "IKE-versie" -#: templates/vpn/ikepolicy.html:29 +#: netbox/templates/vpn/ikepolicy.html:29 msgid "Pre-Shared Key" msgstr "Vooraf gedeelde sleutel" -#: templates/vpn/ikepolicy.html:33 -#: templates/wireless/inc/authentication_attrs.html:20 +#: netbox/templates/vpn/ikepolicy.html:33 +#: netbox/templates/wireless/inc/authentication_attrs.html:20 msgid "Show Secret" msgstr "Geheim tonen" -#: templates/vpn/ikepolicy.html:57 templates/vpn/ipsecpolicy.html:45 -#: templates/vpn/ipsecprofile.html:52 templates/vpn/ipsecprofile.html:77 -#: vpn/forms/model_forms.py:316 vpn/forms/model_forms.py:352 -#: vpn/tables/crypto.py:68 vpn/tables/crypto.py:134 +#: netbox/templates/vpn/ikepolicy.html:57 +#: netbox/templates/vpn/ipsecpolicy.html:45 +#: netbox/templates/vpn/ipsecprofile.html:52 +#: netbox/templates/vpn/ipsecprofile.html:77 +#: netbox/vpn/forms/model_forms.py:316 netbox/vpn/forms/model_forms.py:352 +#: netbox/vpn/tables/crypto.py:68 netbox/vpn/tables/crypto.py:134 msgid "Proposals" msgstr "Voorstellen" -#: templates/vpn/ikeproposal.html:10 +#: netbox/templates/vpn/ikeproposal.html:10 msgid "IKE Proposal" msgstr "IKE-voorstel" -#: templates/vpn/ikeproposal.html:21 vpn/forms/bulk_edit.py:97 -#: vpn/forms/bulk_import.py:145 vpn/forms/filtersets.py:101 +#: netbox/templates/vpn/ikeproposal.html:21 netbox/vpn/forms/bulk_edit.py:97 +#: netbox/vpn/forms/bulk_import.py:145 netbox/vpn/forms/filtersets.py:101 msgid "Authentication method" msgstr "Authenticatiemethode" -#: templates/vpn/ikeproposal.html:25 templates/vpn/ipsecproposal.html:21 -#: vpn/forms/bulk_edit.py:102 vpn/forms/bulk_edit.py:172 -#: vpn/forms/bulk_import.py:149 vpn/forms/bulk_import.py:195 -#: vpn/forms/filtersets.py:106 vpn/forms/filtersets.py:154 +#: netbox/templates/vpn/ikeproposal.html:25 +#: netbox/templates/vpn/ipsecproposal.html:21 +#: netbox/vpn/forms/bulk_edit.py:102 netbox/vpn/forms/bulk_edit.py:172 +#: netbox/vpn/forms/bulk_import.py:149 netbox/vpn/forms/bulk_import.py:195 +#: netbox/vpn/forms/filtersets.py:106 netbox/vpn/forms/filtersets.py:154 msgid "Encryption algorithm" msgstr "Encryptie-algoritme" -#: templates/vpn/ikeproposal.html:29 templates/vpn/ipsecproposal.html:25 -#: vpn/forms/bulk_edit.py:107 vpn/forms/bulk_edit.py:177 -#: vpn/forms/bulk_import.py:153 vpn/forms/bulk_import.py:200 -#: vpn/forms/filtersets.py:111 vpn/forms/filtersets.py:159 +#: netbox/templates/vpn/ikeproposal.html:29 +#: netbox/templates/vpn/ipsecproposal.html:25 +#: netbox/vpn/forms/bulk_edit.py:107 netbox/vpn/forms/bulk_edit.py:177 +#: netbox/vpn/forms/bulk_import.py:153 netbox/vpn/forms/bulk_import.py:200 +#: netbox/vpn/forms/filtersets.py:111 netbox/vpn/forms/filtersets.py:159 msgid "Authentication algorithm" msgstr "Authenticatie-algoritme" -#: templates/vpn/ikeproposal.html:33 +#: netbox/templates/vpn/ikeproposal.html:33 msgid "DH group" msgstr "DH-groep" -#: templates/vpn/ikeproposal.html:37 templates/vpn/ipsecproposal.html:29 -#: vpn/forms/bulk_edit.py:182 vpn/models/crypto.py:146 +#: netbox/templates/vpn/ikeproposal.html:37 +#: netbox/templates/vpn/ipsecproposal.html:29 +#: netbox/vpn/forms/bulk_edit.py:182 netbox/vpn/models/crypto.py:146 msgid "SA lifetime (seconds)" msgstr "Een leven lang (seconden)" -#: templates/vpn/ipsecpolicy.html:10 templates/vpn/ipsecprofile.html:66 -#: vpn/tables/crypto.py:170 +#: netbox/templates/vpn/ipsecpolicy.html:10 +#: netbox/templates/vpn/ipsecprofile.html:66 netbox/vpn/tables/crypto.py:170 msgid "IPSec Policy" msgstr "IPsec-beleid" -#: templates/vpn/ipsecpolicy.html:21 vpn/forms/bulk_edit.py:210 -#: vpn/models/crypto.py:193 +#: netbox/templates/vpn/ipsecpolicy.html:21 netbox/vpn/forms/bulk_edit.py:210 +#: netbox/vpn/models/crypto.py:193 msgid "PFS group" msgstr "PFS-groep" -#: templates/vpn/ipsecprofile.html:10 vpn/forms/model_forms.py:54 +#: netbox/templates/vpn/ipsecprofile.html:10 +#: netbox/vpn/forms/model_forms.py:54 msgid "IPSec Profile" msgstr "IPsec-profiel" -#: templates/vpn/ipsecprofile.html:89 vpn/tables/crypto.py:137 +#: netbox/templates/vpn/ipsecprofile.html:89 netbox/vpn/tables/crypto.py:137 msgid "PFS Group" msgstr "PFS-groep" -#: templates/vpn/ipsecproposal.html:10 +#: netbox/templates/vpn/ipsecproposal.html:10 msgid "IPSec Proposal" msgstr "IPsec-voorstel" -#: templates/vpn/ipsecproposal.html:33 vpn/forms/bulk_edit.py:186 -#: vpn/models/crypto.py:152 +#: netbox/templates/vpn/ipsecproposal.html:33 +#: netbox/vpn/forms/bulk_edit.py:186 netbox/vpn/models/crypto.py:152 msgid "SA lifetime (KB)" msgstr "Een leven lang (kB)" -#: templates/vpn/l2vpn.html:11 templates/vpn/l2vpntermination.html:9 +#: netbox/templates/vpn/l2vpn.html:11 +#: netbox/templates/vpn/l2vpntermination.html:9 msgid "L2VPN Attributes" msgstr "L2VPN-kenmerken" -#: templates/vpn/l2vpn.html:60 templates/vpn/tunnel.html:76 +#: netbox/templates/vpn/l2vpn.html:60 netbox/templates/vpn/tunnel.html:76 msgid "Add a Termination" msgstr "Een beëindiging toevoegen" -#: templates/vpn/tunnel.html:9 +#: netbox/templates/vpn/tunnel.html:9 msgid "Add Termination" msgstr "Beëindiging toevoegen" -#: templates/vpn/tunnel.html:37 vpn/forms/bulk_edit.py:49 -#: vpn/forms/bulk_import.py:48 vpn/forms/filtersets.py:57 +#: netbox/templates/vpn/tunnel.html:37 netbox/vpn/forms/bulk_edit.py:49 +#: netbox/vpn/forms/bulk_import.py:48 netbox/vpn/forms/filtersets.py:57 msgid "Encapsulation" msgstr "Inkapseling" -#: templates/vpn/tunnel.html:41 vpn/forms/bulk_edit.py:55 -#: vpn/forms/bulk_import.py:53 vpn/forms/filtersets.py:64 -#: vpn/models/crypto.py:250 vpn/tables/tunnels.py:51 +#: netbox/templates/vpn/tunnel.html:41 netbox/vpn/forms/bulk_edit.py:55 +#: netbox/vpn/forms/bulk_import.py:53 netbox/vpn/forms/filtersets.py:64 +#: netbox/vpn/models/crypto.py:250 netbox/vpn/tables/tunnels.py:51 msgid "IPSec profile" msgstr "IPsec-profiel" -#: templates/vpn/tunnel.html:45 vpn/forms/bulk_edit.py:69 -#: vpn/forms/filtersets.py:68 +#: netbox/templates/vpn/tunnel.html:45 netbox/vpn/forms/bulk_edit.py:69 +#: netbox/vpn/forms/filtersets.py:68 msgid "Tunnel ID" msgstr "Tunnel-ID" -#: templates/vpn/tunnelgroup.html:14 +#: netbox/templates/vpn/tunnelgroup.html:14 msgid "Add Tunnel" msgstr "Tunnel toevoegen" -#: templates/vpn/tunnelgroup.html:23 vpn/forms/model_forms.py:36 -#: vpn/forms/model_forms.py:49 +#: netbox/templates/vpn/tunnelgroup.html:23 netbox/vpn/forms/model_forms.py:36 +#: netbox/vpn/forms/model_forms.py:49 msgid "Tunnel Group" msgstr "Tunnelgroep" -#: templates/vpn/tunneltermination.html:10 +#: netbox/templates/vpn/tunneltermination.html:10 msgid "Tunnel Termination" msgstr "Afsluiting van de tunnel" -#: templates/vpn/tunneltermination.html:35 vpn/forms/bulk_import.py:107 -#: vpn/forms/model_forms.py:102 vpn/forms/model_forms.py:138 -#: vpn/forms/model_forms.py:247 vpn/tables/tunnels.py:101 +#: netbox/templates/vpn/tunneltermination.html:35 +#: netbox/vpn/forms/bulk_import.py:107 netbox/vpn/forms/model_forms.py:102 +#: netbox/vpn/forms/model_forms.py:138 netbox/vpn/forms/model_forms.py:247 +#: netbox/vpn/tables/tunnels.py:101 msgid "Outside IP" msgstr "Buiten IP" -#: templates/vpn/tunneltermination.html:51 +#: netbox/templates/vpn/tunneltermination.html:51 msgid "Peer Terminations" msgstr "Beëindigingen door collega's" -#: templates/wireless/inc/authentication_attrs.html:12 +#: netbox/templates/wireless/inc/authentication_attrs.html:12 msgid "Cipher" msgstr "Cijfer" -#: templates/wireless/inc/authentication_attrs.html:16 +#: netbox/templates/wireless/inc/authentication_attrs.html:16 msgid "PSK" msgstr "PSK" -#: templates/wireless/inc/wirelesslink_interface.html:35 -#: templates/wireless/inc/wirelesslink_interface.html:45 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:35 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:45 msgctxt "Abbreviation for megahertz" msgid "MHz" msgstr "MHz" -#: templates/wireless/wirelesslan.html:57 +#: netbox/templates/wireless/wirelesslan.html:57 msgid "Attached Interfaces" msgstr "Bijgevoegde interfaces" -#: templates/wireless/wirelesslangroup.html:17 +#: netbox/templates/wireless/wirelesslangroup.html:17 msgid "Add Wireless LAN" msgstr "Draadloos netwerk toevoegen" -#: templates/wireless/wirelesslangroup.html:26 -#: wireless/forms/model_forms.py:28 +#: netbox/templates/wireless/wirelesslangroup.html:26 +#: netbox/wireless/forms/model_forms.py:28 msgid "Wireless LAN Group" msgstr "Draadloze LAN-groep" -#: templates/wireless/wirelesslangroup.html:59 +#: netbox/templates/wireless/wirelesslangroup.html:59 msgid "Add Wireless LAN Group" msgstr "Draadloze LAN-groep toevoegen" -#: templates/wireless/wirelesslink.html:14 +#: netbox/templates/wireless/wirelesslink.html:14 msgid "Link Properties" msgstr "Eigenschappen van de link" -#: templates/wireless/wirelesslink.html:38 wireless/forms/bulk_edit.py:129 -#: wireless/forms/filtersets.py:102 wireless/forms/model_forms.py:165 +#: 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" -#: tenancy/filtersets.py:28 +#: netbox/tenancy/filtersets.py:28 msgid "Parent contact group (ID)" msgstr "Contactgroep voor ouders (ID)" -#: tenancy/filtersets.py:34 +#: netbox/tenancy/filtersets.py:34 msgid "Parent contact group (slug)" msgstr "Contactgroep voor ouders (slug)" -#: tenancy/filtersets.py:40 tenancy/filtersets.py:67 tenancy/filtersets.py:110 +#: netbox/tenancy/filtersets.py:40 netbox/tenancy/filtersets.py:67 +#: netbox/tenancy/filtersets.py:110 msgid "Contact group (ID)" msgstr "Contactgroep (ID)" -#: tenancy/filtersets.py:47 tenancy/filtersets.py:74 tenancy/filtersets.py:117 +#: netbox/tenancy/filtersets.py:47 netbox/tenancy/filtersets.py:74 +#: netbox/tenancy/filtersets.py:117 msgid "Contact group (slug)" msgstr "Contactgroep (slug)" -#: tenancy/filtersets.py:104 +#: netbox/tenancy/filtersets.py:104 msgid "Contact (ID)" msgstr "Contactpersoon (ID)" -#: tenancy/filtersets.py:121 +#: netbox/tenancy/filtersets.py:121 msgid "Contact role (ID)" msgstr "Rol van contactpersoon (ID)" -#: tenancy/filtersets.py:127 +#: netbox/tenancy/filtersets.py:127 msgid "Contact role (slug)" msgstr "Contactrol (slug)" -#: tenancy/filtersets.py:158 +#: netbox/tenancy/filtersets.py:158 msgid "Contact group" msgstr "Contactgroep" -#: tenancy/filtersets.py:169 +#: netbox/tenancy/filtersets.py:169 msgid "Parent tenant group (ID)" msgstr "Parent tenant groep (ID)" -#: tenancy/filtersets.py:175 +#: netbox/tenancy/filtersets.py:175 msgid "Parent tenant group (slug)" msgstr "Parent tenant groep (slug)" -#: tenancy/filtersets.py:181 tenancy/filtersets.py:201 +#: netbox/tenancy/filtersets.py:181 netbox/tenancy/filtersets.py:201 msgid "Tenant group (ID)" msgstr "Tenant groep (ID)" -#: tenancy/filtersets.py:234 +#: netbox/tenancy/filtersets.py:234 msgid "Tenant Group (ID)" msgstr "Tenant Groep (ID)" -#: tenancy/filtersets.py:241 +#: netbox/tenancy/filtersets.py:241 msgid "Tenant Group (slug)" msgstr "Tenant Groep (slug)" -#: tenancy/forms/bulk_edit.py:66 +#: netbox/tenancy/forms/bulk_edit.py:66 msgid "Desciption" msgstr "Beschrijving" -#: tenancy/forms/bulk_import.py:101 +#: netbox/tenancy/forms/bulk_import.py:101 msgid "Assigned contact" msgstr "Toegewezen contactpersoon" -#: tenancy/models/contacts.py:32 +#: netbox/tenancy/models/contacts.py:32 msgid "contact group" msgstr "contactgroep" -#: tenancy/models/contacts.py:33 +#: netbox/tenancy/models/contacts.py:33 msgid "contact groups" msgstr "contactgroepen" -#: tenancy/models/contacts.py:48 +#: netbox/tenancy/models/contacts.py:48 msgid "contact role" msgstr "contactrol" -#: tenancy/models/contacts.py:49 +#: netbox/tenancy/models/contacts.py:49 msgid "contact roles" msgstr "contactrollen" -#: tenancy/models/contacts.py:68 +#: netbox/tenancy/models/contacts.py:68 msgid "title" msgstr "noemen" -#: tenancy/models/contacts.py:73 +#: netbox/tenancy/models/contacts.py:73 msgid "phone" msgstr "telefoon" -#: tenancy/models/contacts.py:78 +#: netbox/tenancy/models/contacts.py:78 msgid "email" msgstr "e-mail" -#: tenancy/models/contacts.py:87 +#: netbox/tenancy/models/contacts.py:87 msgid "link" msgstr "verbinden" -#: tenancy/models/contacts.py:103 +#: netbox/tenancy/models/contacts.py:103 msgid "contact" msgstr "contact" -#: tenancy/models/contacts.py:104 +#: netbox/tenancy/models/contacts.py:104 msgid "contacts" msgstr "neemt contact op" -#: tenancy/models/contacts.py:153 +#: netbox/tenancy/models/contacts.py:153 msgid "contact assignment" msgstr "contactopdracht" -#: tenancy/models/contacts.py:154 +#: netbox/tenancy/models/contacts.py:154 msgid "contact assignments" msgstr "contacttoewijzingen" -#: tenancy/models/contacts.py:170 +#: netbox/tenancy/models/contacts.py:170 #, python-brace-format msgid "Contacts cannot be assigned to this object type ({type})." msgstr "" "Contactpersonen kunnen niet aan dit objecttype worden toegewezen ({type})." -#: tenancy/models/tenants.py:32 +#: netbox/tenancy/models/tenants.py:32 msgid "tenant group" msgstr "tenant groep" -#: tenancy/models/tenants.py:33 +#: netbox/tenancy/models/tenants.py:33 msgid "tenant groups" msgstr "tenant groepen" -#: tenancy/models/tenants.py:70 +#: netbox/tenancy/models/tenants.py:70 msgid "Tenant name must be unique per group." msgstr "De naam van de tenant moet per groep uniek zijn." -#: tenancy/models/tenants.py:80 +#: netbox/tenancy/models/tenants.py:80 msgid "Tenant slug must be unique per group." msgstr "De slug van de tentant moet per groep uniek zijn." -#: tenancy/models/tenants.py:88 +#: netbox/tenancy/models/tenants.py:88 msgid "tenant" msgstr "tenant" -#: tenancy/models/tenants.py:89 +#: netbox/tenancy/models/tenants.py:89 msgid "tenants" msgstr "tenants" -#: tenancy/tables/contacts.py:112 +#: netbox/tenancy/tables/contacts.py:112 msgid "Contact Title" msgstr "Titel van de contactpersoon" -#: tenancy/tables/contacts.py:116 +#: netbox/tenancy/tables/contacts.py:116 msgid "Contact Phone" msgstr "Telefoonnummer contact opnemen" -#: tenancy/tables/contacts.py:121 +#: netbox/tenancy/tables/contacts.py:121 msgid "Contact Email" msgstr "E-mailadres voor contact" -#: tenancy/tables/contacts.py:125 +#: netbox/tenancy/tables/contacts.py:125 msgid "Contact Address" msgstr "Contactadres" -#: tenancy/tables/contacts.py:129 +#: netbox/tenancy/tables/contacts.py:129 msgid "Contact Link" msgstr "Link contact opnemen" -#: tenancy/tables/contacts.py:133 +#: netbox/tenancy/tables/contacts.py:133 msgid "Contact Description" msgstr "Beschrijving van de contactpersoon" -#: users/filtersets.py:33 users/filtersets.py:73 +#: netbox/users/filtersets.py:33 netbox/users/filtersets.py:73 msgid "Permission (ID)" msgstr "Toestemming (ID)" -#: users/filtersets.py:38 users/filtersets.py:78 +#: netbox/users/filtersets.py:38 netbox/users/filtersets.py:78 msgid "Notification group (ID)" msgstr "Meldingsgroep (ID)" -#: users/forms/bulk_edit.py:26 +#: netbox/users/forms/bulk_edit.py:26 msgid "First name" msgstr "Voornaam" -#: users/forms/bulk_edit.py:31 +#: netbox/users/forms/bulk_edit.py:31 msgid "Last name" msgstr "Achternaam" -#: users/forms/bulk_edit.py:43 +#: netbox/users/forms/bulk_edit.py:43 msgid "Staff status" msgstr "Status van het personeel" -#: users/forms/bulk_edit.py:48 +#: netbox/users/forms/bulk_edit.py:48 msgid "Superuser status" msgstr "Status van superuser" -#: users/forms/bulk_import.py:41 +#: netbox/users/forms/bulk_import.py:41 msgid "If no key is provided, one will be generated automatically." msgstr "" "Als er geen sleutel wordt verstrekt, wordt er automatisch een gegenereerd." -#: users/forms/filtersets.py:51 users/tables.py:42 +#: netbox/users/forms/filtersets.py:51 netbox/users/tables.py:42 msgid "Is Staff" msgstr "Is personeel" -#: users/forms/filtersets.py:58 users/tables.py:45 +#: netbox/users/forms/filtersets.py:58 netbox/users/tables.py:45 msgid "Is Superuser" msgstr "Is Superuser" -#: users/forms/filtersets.py:91 users/tables.py:86 +#: netbox/users/forms/filtersets.py:91 netbox/users/tables.py:86 msgid "Can View" msgstr "Kan bekijken" -#: users/forms/filtersets.py:98 users/tables.py:89 +#: netbox/users/forms/filtersets.py:98 netbox/users/tables.py:89 msgid "Can Add" msgstr "Kan toevoegen" -#: users/forms/filtersets.py:105 users/tables.py:92 +#: netbox/users/forms/filtersets.py:105 netbox/users/tables.py:92 msgid "Can Change" msgstr "Kan veranderen" -#: users/forms/filtersets.py:112 users/tables.py:95 +#: netbox/users/forms/filtersets.py:112 netbox/users/tables.py:95 msgid "Can Delete" msgstr "Kan verwijderen" -#: users/forms/model_forms.py:62 +#: netbox/users/forms/model_forms.py:62 msgid "User Interface" msgstr "Gebruikersinterface" -#: users/forms/model_forms.py:114 +#: netbox/users/forms/model_forms.py:114 msgid "" "Keys must be at least 40 characters in length. Be sure to record " "your key prior to submitting this form, as it may no longer be " @@ -14037,7 +14859,7 @@ msgstr "" "sleutel opneemt
    voordat dit formulier wordt verzonden, omdat het " "mogelijk niet meer toegankelijk is nadat het token is aangemaakt." -#: users/forms/model_forms.py:126 +#: netbox/users/forms/model_forms.py:126 msgid "" "Allowed IPv4/IPv6 networks from where the token can be used. Leave blank for" " no restrictions. Example: " @@ -14047,33 +14869,33 @@ msgstr "" "Laat dit veld leeg zodat er geen beperkingen zijn. Voorbeeld: " "10.1.1.0/24, 192.168.10.16/32,2001:db 8:1: :/64" -#: users/forms/model_forms.py:175 +#: netbox/users/forms/model_forms.py:175 msgid "Confirm password" msgstr "Wachtwoord bevestigen" -#: users/forms/model_forms.py:178 +#: netbox/users/forms/model_forms.py:178 msgid "Enter the same password as before, for verification." msgstr "Voer ter verificatie hetzelfde wachtwoord in als voorheen." -#: users/forms/model_forms.py:227 +#: netbox/users/forms/model_forms.py:227 msgid "Passwords do not match! Please check your input and try again." msgstr "" "Wachtwoorden komen niet overeen! Controleer uw invoer en probeer het " "opnieuw." -#: users/forms/model_forms.py:294 +#: netbox/users/forms/model_forms.py:294 msgid "Additional actions" msgstr "Aanvullende acties" -#: users/forms/model_forms.py:297 +#: netbox/users/forms/model_forms.py:297 msgid "Actions granted in addition to those listed above" msgstr "Acties die zijn toegekend in aanvulling op de hierboven genoemde" -#: users/forms/model_forms.py:313 +#: netbox/users/forms/model_forms.py:313 msgid "Objects" msgstr "Objecten" -#: users/forms/model_forms.py:325 +#: netbox/users/forms/model_forms.py:325 msgid "" "JSON expression of a queryset filter that will return only permitted " "objects. Leave null to match all objects of this type. A list of multiple " @@ -14084,80 +14906,80 @@ msgstr "" " Een lijst met meerdere objecten zal resulteren in een logische OR-" "bewerking." -#: users/forms/model_forms.py:364 +#: netbox/users/forms/model_forms.py:364 msgid "At least one action must be selected." msgstr "Er moet minstens één actie worden geselecteerd." -#: users/forms/model_forms.py:382 +#: netbox/users/forms/model_forms.py:382 #, python-brace-format msgid "Invalid filter for {model}: {error}" msgstr "Ongeldig filter voor {model}: {error}" -#: users/models/permissions.py:39 +#: netbox/users/models/permissions.py:39 msgid "The list of actions granted by this permission" msgstr "De lijst met acties die met deze toestemming zijn verleend" -#: users/models/permissions.py:44 +#: netbox/users/models/permissions.py:44 msgid "constraints" msgstr "verplichtingen" -#: users/models/permissions.py:45 +#: netbox/users/models/permissions.py:45 msgid "" "Queryset filter matching the applicable objects of the selected type(s)" msgstr "" "Querysetfilter dat overeenkomt met de toepasselijke objecten van het " "geselecteerde type (s)" -#: users/models/permissions.py:52 +#: netbox/users/models/permissions.py:52 msgid "permission" msgstr "toestemming" -#: users/models/permissions.py:53 users/models/users.py:47 +#: netbox/users/models/permissions.py:53 netbox/users/models/users.py:47 msgid "permissions" msgstr "toestemmingen" -#: users/models/preferences.py:29 users/models/preferences.py:30 +#: netbox/users/models/preferences.py:29 netbox/users/models/preferences.py:30 msgid "user preferences" msgstr "gebruikersvoorkeuren" -#: users/models/preferences.py:97 +#: netbox/users/models/preferences.py:97 #, python-brace-format msgid "Key '{path}' is a leaf node; cannot assign new keys" msgstr "" "Sleutel '{path}'is een bladknooppunt; kan geen nieuwe sleutels toewijzen" -#: users/models/preferences.py:109 +#: netbox/users/models/preferences.py:109 #, python-brace-format msgid "Key '{path}' is a dictionary; cannot assign a non-dictionary value" msgstr "" "Sleutel '{path}'is een woordenboek; kan geen waarde toekennen die niet uit " "het woordenboek bestaat" -#: users/models/tokens.py:36 +#: netbox/users/models/tokens.py:36 msgid "expires" msgstr "vervalt" -#: users/models/tokens.py:41 +#: netbox/users/models/tokens.py:41 msgid "last used" msgstr "laatst gebruikt" -#: users/models/tokens.py:46 +#: netbox/users/models/tokens.py:46 msgid "key" msgstr "sleutel" -#: users/models/tokens.py:52 +#: netbox/users/models/tokens.py:52 msgid "write enabled" msgstr "schrijven ingeschakeld" -#: users/models/tokens.py:54 +#: netbox/users/models/tokens.py:54 msgid "Permit create/update/delete operations using this key" msgstr "Bewerkingen aanmaken, bijwerken/verwijderen met deze sleutel toestaan" -#: users/models/tokens.py:65 +#: netbox/users/models/tokens.py:65 msgid "allowed IPs" msgstr "toegestane IP's" -#: users/models/tokens.py:67 +#: netbox/users/models/tokens.py:67 msgid "" "Allowed IPv4/IPv6 networks from where the token can be used. Leave blank for" " no restrictions. Ex: \"10.1.1.0/24, 192.168.10.16/32, 2001:DB8:1::/64\"" @@ -14166,43 +14988,43 @@ msgstr "" "Laat dit veld leeg zodat er geen beperkingen zijn. Bijvoorbeeld: " "„10.1.1.0/24, 192.168.10.16/32, 2001:DB 8:1: :/64\"" -#: users/models/tokens.py:75 +#: netbox/users/models/tokens.py:75 msgid "token" msgstr "blijk" -#: users/models/tokens.py:76 +#: netbox/users/models/tokens.py:76 msgid "tokens" msgstr "tokens" -#: users/models/users.py:57 vpn/models/crypto.py:42 +#: netbox/users/models/users.py:57 netbox/vpn/models/crypto.py:42 msgid "group" msgstr "groeperen" -#: users/models/users.py:92 +#: netbox/users/models/users.py:92 msgid "user" msgstr "gebruiker" -#: users/models/users.py:104 +#: netbox/users/models/users.py:104 msgid "A user with this username already exists." msgstr "Er bestaat al een gebruiker met deze gebruikersnaam." -#: users/tables.py:98 +#: netbox/users/tables.py:98 msgid "Custom Actions" msgstr "Acties op maat" -#: utilities/api.py:153 +#: netbox/utilities/api.py:153 #, python-brace-format msgid "Related object not found using the provided attributes: {params}" msgstr "" "Gerelateerd object niet gevonden met behulp van de opgegeven kenmerken: " "{params}" -#: utilities/api.py:156 +#: netbox/utilities/api.py:156 #, python-brace-format msgid "Multiple objects match the provided attributes: {params}" msgstr "Meerdere objecten komen overeen met de opgegeven kenmerken: {params}" -#: utilities/api.py:168 +#: netbox/utilities/api.py:168 #, python-brace-format msgid "" "Related objects must be referenced by numeric ID or by dictionary of " @@ -14211,42 +15033,42 @@ msgstr "" "Naar gerelateerde objecten moet worden verwezen met een numerieke ID of een " "woordenboek met attributen. Een niet-herkende waarde ontvangen: {value}" -#: utilities/api.py:177 +#: netbox/utilities/api.py:177 #, python-brace-format msgid "Related object not found using the provided numeric ID: {id}" msgstr "" "Het gerelateerde object is niet gevonden met de opgegeven numerieke ID: {id}" -#: utilities/choices.py:19 +#: netbox/utilities/choices.py:19 #, python-brace-format msgid "{name} has a key defined but CHOICES is not a list" msgstr "{name} heeft een sleutel gedefinieerd, maar CHOICES is geen lijst" -#: utilities/conversion.py:19 +#: netbox/utilities/conversion.py:19 msgid "Weight must be a positive number" msgstr "Gewicht moet een positief getal zijn" -#: utilities/conversion.py:21 +#: netbox/utilities/conversion.py:21 #, python-brace-format msgid "Invalid value '{weight}' for weight (must be a number)" msgstr "Ongeldige waarde '{weight}'voor gewicht (moet een getal zijn)" -#: utilities/conversion.py:32 utilities/conversion.py:62 +#: netbox/utilities/conversion.py:32 netbox/utilities/conversion.py:62 #, python-brace-format msgid "Unknown unit {unit}. Must be one of the following: {valid_units}" msgstr "" "Onbekende eenheid {unit}. Moet een van de volgende zijn: {valid_units}" -#: utilities/conversion.py:45 +#: netbox/utilities/conversion.py:45 msgid "Length must be a positive number" msgstr "De lengte moet een positief getal zijn" -#: utilities/conversion.py:47 +#: netbox/utilities/conversion.py:47 #, python-brace-format msgid "Invalid value '{length}' for length (must be a number)" msgstr "Ongeldige waarde '{length}'voor lengte (moet een getal zijn)" -#: utilities/error_handlers.py:31 +#: netbox/utilities/error_handlers.py:31 #, python-brace-format msgid "" "Unable to delete {objects}. {count} dependent objects were " @@ -14255,15 +15077,15 @@ msgstr "" "Kan niet verwijderen {objects}. {count} afhankelijke " "objecten zijn gevonden: " -#: utilities/error_handlers.py:33 +#: netbox/utilities/error_handlers.py:33 msgid "More than 50" msgstr "Meer dan 50" -#: utilities/fields.py:30 +#: netbox/utilities/fields.py:30 msgid "RGB color in hexadecimal. Example: " msgstr "RGB-kleur in hexadecimaal. Voorbeeld: " -#: utilities/fields.py:159 +#: netbox/utilities/fields.py:159 #, python-format msgid "" "%s(%r) is invalid. to_model parameter to CounterCacheField must be a string " @@ -14272,7 +15094,7 @@ msgstr "" "%s(%r) is ongeldig. De parameter to_model voor CounterCacheField moet een " "tekenreeks zijn in het formaat 'app.model'" -#: utilities/fields.py:169 +#: netbox/utilities/fields.py:169 #, python-format msgid "" "%s(%r) is invalid. to_field parameter to CounterCacheField must be a string " @@ -14281,39 +15103,39 @@ msgstr "" "%s(%r) is ongeldig. De parameter to_field voor CounterCacheField moet een " "tekenreeks zijn in de indeling 'field'" -#: utilities/forms/bulk_import.py:23 +#: netbox/utilities/forms/bulk_import.py:23 msgid "Enter object data in CSV, JSON or YAML format." msgstr "Voer objectgegevens in CSV-, JSON- of YAML-formaat in." -#: utilities/forms/bulk_import.py:36 +#: netbox/utilities/forms/bulk_import.py:36 msgid "CSV delimiter" msgstr "CSV-scheidingsteken" -#: utilities/forms/bulk_import.py:37 +#: netbox/utilities/forms/bulk_import.py:37 msgid "The character which delimits CSV fields. Applies only to CSV format." msgstr "" "Het teken dat CSV-velden afbakent. Alleen van toepassing op CSV-formaat." -#: utilities/forms/bulk_import.py:51 +#: netbox/utilities/forms/bulk_import.py:51 msgid "Form data must be empty when uploading/selecting a file." msgstr "" "Formuliergegevens moeten leeg zijn bij het uploaden/selecteren van een " "bestand." -#: utilities/forms/bulk_import.py:80 +#: netbox/utilities/forms/bulk_import.py:80 #, python-brace-format msgid "Unknown data format: {format}" msgstr "Onbekend gegevensformaat: {format}" -#: utilities/forms/bulk_import.py:100 +#: netbox/utilities/forms/bulk_import.py:100 msgid "Unable to detect data format. Please specify." msgstr "Kan het gegevensformaat niet detecteren. Specificeer alstublieft." -#: utilities/forms/bulk_import.py:123 +#: netbox/utilities/forms/bulk_import.py:123 msgid "Invalid CSV delimiter" msgstr "Ongeldig CSV-scheidingsteken" -#: utilities/forms/bulk_import.py:167 +#: netbox/utilities/forms/bulk_import.py:167 msgid "" "Invalid YAML data. Data must be in the form of multiple documents, or a " "single document comprising a list of dictionaries." @@ -14321,7 +15143,7 @@ msgstr "" "Ongeldige YAML-gegevens. De gegevens moeten de vorm hebben van meerdere " "documenten, of een enkel document dat een lijst met woordenboeken bevat." -#: utilities/forms/fields/array.py:20 +#: netbox/utilities/forms/fields/array.py:20 #, python-brace-format msgid "" "Invalid list ({value}). Must be numeric and ranges must be in ascending " @@ -14330,7 +15152,7 @@ msgstr "" "Ongeldige lijst ({value}). Moet numeriek zijn en reeksen moeten in oplopende" " volgorde staan." -#: utilities/forms/fields/array.py:40 +#: netbox/utilities/forms/fields/array.py:40 msgid "" "Specify one or more numeric ranges separated by commas. Example: " "1-5,20-30" @@ -14338,7 +15160,7 @@ msgstr "" "Geef een of meer numerieke reeksen op, gescheiden door komma's. Voorbeeld: " "1-5,20-30" -#: utilities/forms/fields/array.py:47 +#: netbox/utilities/forms/fields/array.py:47 #, python-brace-format msgid "" "Invalid ranges ({value}). Must be a range of integers in ascending order." @@ -14346,17 +15168,18 @@ msgstr "" "Ongeldige reeksen ({value}). Moet een reeks gehele getallen in oplopende " "volgorde zijn." -#: utilities/forms/fields/csv.py:44 +#: netbox/utilities/forms/fields/csv.py:44 #, python-brace-format msgid "Invalid value for a multiple choice field: {value}" msgstr "Ongeldige waarde voor een meerkeuzeveld: {value}" -#: utilities/forms/fields/csv.py:57 utilities/forms/fields/csv.py:78 +#: netbox/utilities/forms/fields/csv.py:57 +#: netbox/utilities/forms/fields/csv.py:78 #, python-format msgid "Object not found: %(value)s" msgstr "Object niet gevonden: %(value)s" -#: utilities/forms/fields/csv.py:65 +#: netbox/utilities/forms/fields/csv.py:65 #, python-brace-format msgid "" "\"{value}\" is not a unique value for this field; multiple objects were " @@ -14365,20 +15188,20 @@ msgstr "" "„{value}„is geen unieke waarde voor dit veld; er zijn meerdere objecten " "gevonden" -#: utilities/forms/fields/csv.py:69 +#: netbox/utilities/forms/fields/csv.py:69 #, python-brace-format msgid "\"{field_name}\" is an invalid accessor field name." msgstr "„{field_name}„is een ongeldige naam voor het accessorveld." -#: utilities/forms/fields/csv.py:101 +#: netbox/utilities/forms/fields/csv.py:101 msgid "Object type must be specified as \".\"" msgstr "Het objecttype moet worden gespecificeerd als”.„" -#: utilities/forms/fields/csv.py:105 +#: netbox/utilities/forms/fields/csv.py:105 msgid "Invalid object type" msgstr "Ongeldig objecttype" -#: utilities/forms/fields/expandable.py:25 +#: netbox/utilities/forms/fields/expandable.py:25 msgid "" "Alphanumeric ranges are supported for bulk creation. Mixed cases and types " "within a single range are not supported (example: " @@ -14388,7 +15211,7 @@ msgstr "" " en typen binnen één bereik worden niet ondersteund (bijvoorbeeld: " "[leeftijd, ex] -0/0/ [0-9])." -#: utilities/forms/fields/expandable.py:46 +#: netbox/utilities/forms/fields/expandable.py:46 msgid "" "Specify a numeric range to create multiple IPs.
    Example: " "192.0.2.[1,5,100-254]/24" @@ -14396,7 +15219,7 @@ msgstr "" "Specificeer een numeriek bereik om meerdere IP-adressen te creëren.
    Voorbeeld: 192.0.2. [1,5,100-254] /24" -#: utilities/forms/fields/fields.py:31 +#: netbox/utilities/forms/fields/fields.py:31 #, python-brace-format msgid "" " Markdown syntaxis wordt ondersteund" -#: utilities/forms/fields/fields.py:48 +#: netbox/utilities/forms/fields/fields.py:48 msgid "URL-friendly unique shorthand" msgstr "URL-vriendelijke unieke afkorting" -#: utilities/forms/fields/fields.py:101 +#: netbox/utilities/forms/fields/fields.py:101 msgid "Enter context data in JSON format." msgstr "Voer contextgegevens in JSON formaat." -#: utilities/forms/fields/fields.py:124 +#: netbox/utilities/forms/fields/fields.py:124 msgid "MAC address must be in EUI-48 format" msgstr "MAC-adres moet het EUI-48-formaat hebben" -#: utilities/forms/forms.py:52 +#: netbox/utilities/forms/forms.py:52 msgid "Use regular expressions" msgstr "Reguliere expressies gebruiken" -#: utilities/forms/forms.py:75 +#: netbox/utilities/forms/forms.py:75 msgid "" "Numeric ID of an existing object to update (if not creating a new object)" msgstr "" "Numerieke ID van een bestaand object dat moet worden bijgewerkt (als er geen" " nieuw object wordt aangemaakt)" -#: utilities/forms/forms.py:92 +#: netbox/utilities/forms/forms.py:92 #, python-brace-format msgid "Unrecognized header: {name}" msgstr "Koptekst niet herkend: {name}" -#: utilities/forms/forms.py:118 +#: netbox/utilities/forms/forms.py:118 msgid "Available Columns" msgstr "Beschikbare kolommen" -#: utilities/forms/forms.py:126 +#: netbox/utilities/forms/forms.py:126 msgid "Selected Columns" msgstr "Geselecteerde kolommen" -#: utilities/forms/mixins.py:44 +#: netbox/utilities/forms/mixins.py:44 msgid "" "This object has been modified since the form was rendered. Please consult " "the object's change log for details." @@ -14449,13 +15272,13 @@ msgstr "" "Dit object is gewijzigd sinds de weergave van het formulier. Raadpleeg het " "wijzigingslogboek van het object voor meer informatie." -#: utilities/forms/utils.py:42 utilities/forms/utils.py:68 -#: utilities/forms/utils.py:85 utilities/forms/utils.py:87 +#: netbox/utilities/forms/utils.py:42 netbox/utilities/forms/utils.py:68 +#: netbox/utilities/forms/utils.py:85 netbox/utilities/forms/utils.py:87 #, python-brace-format msgid "Range \"{value}\" is invalid." msgstr "Bereik”{value}„is ongeldig." -#: utilities/forms/utils.py:74 +#: netbox/utilities/forms/utils.py:74 #, python-brace-format msgid "" "Invalid range: Ending value ({end}) must be greater than beginning value " @@ -14464,68 +15287,68 @@ msgstr "" "Ongeldig bereik: eindwaarde ({end}) moet groter zijn dan de beginwaarde " "({begin})." -#: utilities/forms/utils.py:232 +#: netbox/utilities/forms/utils.py:232 #, python-brace-format msgid "Duplicate or conflicting column header for \"{field}\"" msgstr "Dubbele of conflicterende kolomkop voor”{field}„" -#: utilities/forms/utils.py:238 +#: netbox/utilities/forms/utils.py:238 #, python-brace-format msgid "Duplicate or conflicting column header for \"{header}\"" msgstr "Dubbele of conflicterende kolomkop voor”{header}„" -#: utilities/forms/utils.py:247 +#: netbox/utilities/forms/utils.py:247 #, python-brace-format msgid "Row {row}: Expected {count_expected} columns but found {count_found}" msgstr "" "Rij {row}: Verwacht {count_expected} columns maar gevonden {count_found}" -#: utilities/forms/utils.py:270 +#: netbox/utilities/forms/utils.py:270 #, python-brace-format msgid "Unexpected column header \"{field}\" found." msgstr "Onverwachte kolomkop”{field}„gevonden." -#: utilities/forms/utils.py:272 +#: netbox/utilities/forms/utils.py:272 #, python-brace-format msgid "Column \"{field}\" is not a related object; cannot use dots" msgstr "Kolom”{field}„is geen gerelateerd object; kan geen punten gebruiken" -#: utilities/forms/utils.py:276 +#: netbox/utilities/forms/utils.py:276 #, python-brace-format msgid "Invalid related object attribute for column \"{field}\": {to_field}" msgstr "Ongeldig gerelateerd objectkenmerk voor kolom”{field}„: {to_field}" -#: utilities/forms/utils.py:284 +#: netbox/utilities/forms/utils.py:284 #, python-brace-format msgid "Required column header \"{header}\" not found." msgstr "Vereiste kolomkop”{header}„niet gevonden." -#: utilities/forms/widgets/apiselect.py:124 +#: netbox/utilities/forms/widgets/apiselect.py:124 #, python-brace-format msgid "Missing required value for dynamic query param: '{dynamic_params}'" msgstr "" "Ontbrekende vereiste waarde voor dynamische queryparameter: " "'{dynamic_params}'" -#: utilities/forms/widgets/apiselect.py:141 +#: netbox/utilities/forms/widgets/apiselect.py:141 #, python-brace-format msgid "Missing required value for static query param: '{static_params}'" msgstr "" "Ontbrekende vereiste waarde voor statische queryparameter: '{static_params}'" -#: utilities/password_validation.py:13 +#: netbox/utilities/password_validation.py:13 msgid "Password must have at least one numeral." msgstr "Het wachtwoord moet minstens één cijfer bevatten." -#: utilities/password_validation.py:18 +#: netbox/utilities/password_validation.py:18 msgid "Password must have at least one uppercase letter." msgstr "Het wachtwoord moet minstens één hoofdletter bevatten." -#: utilities/password_validation.py:23 +#: netbox/utilities/password_validation.py:23 msgid "Password must have at least one lowercase letter." msgstr "Het wachtwoord moet minstens één kleine letter bevatten." -#: utilities/password_validation.py:27 +#: netbox/utilities/password_validation.py:27 msgid "" "Your password must contain at least one numeral, one uppercase letter and " "one lowercase letter." @@ -14533,7 +15356,7 @@ msgstr "" "Je wachtwoord moet minstens één cijfer, één hoofdletter en één kleine letter" " bevatten." -#: utilities/permissions.py:42 +#: netbox/utilities/permissions.py:42 #, python-brace-format msgid "" "Invalid permission name: {name}. Must be in the format " @@ -14542,127 +15365,127 @@ msgstr "" "Ongeldige toestemmingsnaam: {name}. Moet in het formaat zijn " "._" -#: utilities/permissions.py:60 +#: netbox/utilities/permissions.py:60 #, python-brace-format msgid "Unknown app_label/model_name for {name}" msgstr "Onbekende app_label/model_name voor {name}" -#: utilities/request.py:76 +#: netbox/utilities/request.py:76 #, python-brace-format msgid "Invalid IP address set for {header}: {ip}" msgstr "Ongeldig IP-adres ingesteld voor {header}: {ip}" -#: utilities/tables.py:47 +#: netbox/utilities/tables.py:47 #, python-brace-format msgid "A column named {name} is already defined for table {table_name}" msgstr "" "Een kolom met de naam {name} is al gedefinieerd voor de tabel {table_name}" -#: utilities/templates/builtins/customfield_value.html:30 +#: netbox/utilities/templates/builtins/customfield_value.html:30 msgid "Not defined" msgstr "Niet gedefinieerd" -#: utilities/templates/buttons/bookmark.html:9 +#: netbox/utilities/templates/buttons/bookmark.html:9 msgid "Unbookmark" msgstr "Bladwijzer uitzetten" -#: utilities/templates/buttons/bookmark.html:13 +#: netbox/utilities/templates/buttons/bookmark.html:13 msgid "Bookmark" msgstr "Bladwijzer" -#: utilities/templates/buttons/clone.html:4 +#: netbox/utilities/templates/buttons/clone.html:4 msgid "Clone" msgstr "Kloon" -#: utilities/templates/buttons/export.html:7 +#: netbox/utilities/templates/buttons/export.html:7 msgid "Current View" msgstr "Huidige weergave" -#: utilities/templates/buttons/export.html:8 +#: netbox/utilities/templates/buttons/export.html:8 msgid "All Data" msgstr "Alle gegevens" -#: utilities/templates/buttons/export.html:28 +#: netbox/utilities/templates/buttons/export.html:28 msgid "Add export template" msgstr "Exportsjabloon toevoegen" -#: utilities/templates/buttons/import.html:4 +#: netbox/utilities/templates/buttons/import.html:4 msgid "Import" msgstr "Importeren" -#: utilities/templates/buttons/subscribe.html:10 +#: netbox/utilities/templates/buttons/subscribe.html:10 msgid "Unsubscribe" msgstr "Afmelden" -#: utilities/templates/buttons/subscribe.html:14 +#: netbox/utilities/templates/buttons/subscribe.html:14 msgid "Subscribe" msgstr "Abonneer" -#: utilities/templates/form_helpers/render_field.html:41 +#: netbox/utilities/templates/form_helpers/render_field.html:41 msgid "Copy to clipboard" msgstr "Naar klembord kopiëren" -#: utilities/templates/form_helpers/render_field.html:57 +#: netbox/utilities/templates/form_helpers/render_field.html:57 msgid "This field is required" msgstr "Dit veld is verplicht" -#: utilities/templates/form_helpers/render_field.html:70 +#: netbox/utilities/templates/form_helpers/render_field.html:70 msgid "Set Null" msgstr "Null instellen" -#: utilities/templates/helpers/applied_filters.html:11 +#: netbox/utilities/templates/helpers/applied_filters.html:11 msgid "Clear all" msgstr "Alles wissen" -#: utilities/templates/helpers/table_config_form.html:8 +#: netbox/utilities/templates/helpers/table_config_form.html:8 msgid "Table Configuration" msgstr "Tabelconfiguratie" -#: utilities/templates/helpers/table_config_form.html:31 +#: netbox/utilities/templates/helpers/table_config_form.html:31 msgid "Move Up" msgstr "Omhoog gaan" -#: utilities/templates/helpers/table_config_form.html:34 +#: netbox/utilities/templates/helpers/table_config_form.html:34 msgid "Move Down" msgstr "Naar beneden gaan" -#: utilities/templates/navigation/menu.html:14 +#: netbox/utilities/templates/navigation/menu.html:14 msgid "Search…" msgstr "Zoek..." -#: utilities/templates/navigation/menu.html:14 +#: netbox/utilities/templates/navigation/menu.html:14 msgid "Search NetBox" msgstr "Zoek in NetBox" -#: utilities/templates/widgets/apiselect.html:7 +#: netbox/utilities/templates/widgets/apiselect.html:7 msgid "Open selector" msgstr "Selector openen" -#: utilities/templates/widgets/markdown_input.html:6 +#: netbox/utilities/templates/widgets/markdown_input.html:6 msgid "Write" msgstr "Schrijf" -#: utilities/testing/views.py:632 +#: netbox/utilities/testing/views.py:632 msgid "The test must define csv_update_data." msgstr "De test moet csv_update_data definiëren." -#: utilities/validators.py:65 +#: netbox/utilities/validators.py:65 #, python-brace-format msgid "{value} is not a valid regular expression." msgstr "{value} is geen geldige reguliere expressie." -#: utilities/views.py:57 +#: netbox/utilities/views.py:57 #, python-brace-format msgid "{self.__class__.__name__} must implement get_required_permission()" msgstr "" "{self.__class__.__name__} moet get_required_permission () implementeren" -#: utilities/views.py:93 +#: netbox/utilities/views.py:93 #, python-brace-format msgid "{class_name} must implement get_required_permission()" msgstr "{class_name} moet get_required_permission () implementeren" -#: utilities/views.py:117 +#: netbox/utilities/views.py:117 #, python-brace-format msgid "" "{class_name} has no queryset defined. ObjectPermissionRequiredMixin may only" @@ -14671,61 +15494,63 @@ msgstr "" "{class_name} heeft geen queryset gedefinieerd. ObjectPermissionRequiredMixIn" " mag alleen worden gebruikt op views die een basisqueryset definiëren" -#: virtualization/filtersets.py:79 +#: netbox/virtualization/filtersets.py:79 msgid "Parent group (ID)" msgstr "Oudergroep (ID)" -#: virtualization/filtersets.py:85 +#: netbox/virtualization/filtersets.py:85 msgid "Parent group (slug)" msgstr "Oudergroep (slug)" -#: virtualization/filtersets.py:89 virtualization/filtersets.py:141 +#: netbox/virtualization/filtersets.py:89 +#: netbox/virtualization/filtersets.py:141 msgid "Cluster type (ID)" msgstr "Clustertype (ID)" -#: virtualization/filtersets.py:151 virtualization/filtersets.py:271 +#: netbox/virtualization/filtersets.py:151 +#: netbox/virtualization/filtersets.py:271 msgid "Cluster (ID)" msgstr "Cluster (ID)" -#: virtualization/forms/bulk_edit.py:166 -#: virtualization/models/virtualmachines.py:115 +#: netbox/virtualization/forms/bulk_edit.py:166 +#: netbox/virtualization/models/virtualmachines.py:115 msgid "vCPUs" msgstr "vCPU's" -#: virtualization/forms/bulk_edit.py:170 +#: netbox/virtualization/forms/bulk_edit.py:170 msgid "Memory (MB)" msgstr "Geheugen (MB)" -#: virtualization/forms/bulk_edit.py:174 -msgid "Disk (GB)" -msgstr "Schijf (GB)" +#: netbox/virtualization/forms/bulk_edit.py:174 +msgid "Disk (MB)" +msgstr "" -#: virtualization/forms/bulk_edit.py:334 -#: virtualization/forms/filtersets.py:251 -msgid "Size (GB)" -msgstr "Grootte (GB)" +#: netbox/virtualization/forms/bulk_edit.py:334 +#: netbox/virtualization/forms/filtersets.py:251 +msgid "Size (MB)" +msgstr "" -#: virtualization/forms/bulk_import.py:44 +#: netbox/virtualization/forms/bulk_import.py:44 msgid "Type of cluster" msgstr "Soort cluster" -#: virtualization/forms/bulk_import.py:51 +#: netbox/virtualization/forms/bulk_import.py:51 msgid "Assigned cluster group" msgstr "Toegewezen clustergroep" -#: virtualization/forms/bulk_import.py:96 +#: netbox/virtualization/forms/bulk_import.py:96 msgid "Assigned cluster" msgstr "Toegewezen cluster" -#: virtualization/forms/bulk_import.py:103 +#: netbox/virtualization/forms/bulk_import.py:103 msgid "Assigned device within cluster" msgstr "Toegewezen apparaat binnen cluster" -#: virtualization/forms/filtersets.py:183 +#: netbox/virtualization/forms/filtersets.py:183 msgid "Serial number" msgstr "Serienummer" -#: virtualization/forms/model_forms.py:153 +#: netbox/virtualization/forms/model_forms.py:153 #, python-brace-format msgid "" "{device} belongs to a different site ({device_site}) than the cluster " @@ -14734,51 +15559,51 @@ msgstr "" "{device} behoort tot een andere site ({device_site}) dan het cluster " "({cluster_site})" -#: virtualization/forms/model_forms.py:192 +#: netbox/virtualization/forms/model_forms.py:192 msgid "Optionally pin this VM to a specific host device within the cluster" msgstr "" "Optioneel kan deze VM worden vastgezet op een specifiek hostapparaat binnen " "het cluster" -#: virtualization/forms/model_forms.py:221 +#: netbox/virtualization/forms/model_forms.py:221 msgid "Site/Cluster" msgstr "Site/cluster" -#: virtualization/forms/model_forms.py:244 +#: netbox/virtualization/forms/model_forms.py:244 msgid "Disk size is managed via the attachment of virtual disks." msgstr "" "De schijfgrootte wordt beheerd via de koppeling van virtuele schijven." -#: virtualization/forms/model_forms.py:372 -#: virtualization/tables/virtualmachines.py:111 +#: netbox/virtualization/forms/model_forms.py:372 +#: netbox/virtualization/tables/virtualmachines.py:111 msgid "Disk" msgstr "Schijf" -#: virtualization/models/clusters.py:25 +#: netbox/virtualization/models/clusters.py:25 msgid "cluster type" msgstr "clustertype" -#: virtualization/models/clusters.py:26 +#: netbox/virtualization/models/clusters.py:26 msgid "cluster types" msgstr "clustertypen" -#: virtualization/models/clusters.py:45 +#: netbox/virtualization/models/clusters.py:45 msgid "cluster group" msgstr "clustergroep" -#: virtualization/models/clusters.py:46 +#: netbox/virtualization/models/clusters.py:46 msgid "cluster groups" msgstr "clustergroepen" -#: virtualization/models/clusters.py:121 +#: netbox/virtualization/models/clusters.py:121 msgid "cluster" msgstr "cluster" -#: virtualization/models/clusters.py:122 +#: netbox/virtualization/models/clusters.py:122 msgid "clusters" msgstr "clusters" -#: virtualization/models/clusters.py:141 +#: netbox/virtualization/models/clusters.py:141 #, python-brace-format msgid "" "{count} devices are assigned as hosts for this cluster but are not in site " @@ -14787,32 +15612,32 @@ msgstr "" "{count} apparaten zijn toegewezen als hosts voor dit cluster, maar bevinden " "zich niet op de locatie {site}" -#: virtualization/models/virtualmachines.py:123 +#: netbox/virtualization/models/virtualmachines.py:123 msgid "memory (MB)" msgstr "geheugen (MB)" -#: virtualization/models/virtualmachines.py:128 +#: netbox/virtualization/models/virtualmachines.py:128 msgid "disk (MB)" msgstr "schijf (MB)" -#: virtualization/models/virtualmachines.py:166 +#: netbox/virtualization/models/virtualmachines.py:166 msgid "Virtual machine name must be unique per cluster." msgstr "De naam van de virtuele machine moet per cluster uniek zijn." -#: virtualization/models/virtualmachines.py:169 +#: netbox/virtualization/models/virtualmachines.py:169 msgid "virtual machine" msgstr "virtuele machine" -#: virtualization/models/virtualmachines.py:170 +#: netbox/virtualization/models/virtualmachines.py:170 msgid "virtual machines" msgstr "virtuele machines" -#: virtualization/models/virtualmachines.py:184 +#: netbox/virtualization/models/virtualmachines.py:184 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." -#: virtualization/models/virtualmachines.py:191 +#: netbox/virtualization/models/virtualmachines.py:191 #, python-brace-format msgid "" "The selected cluster ({cluster}) is not assigned to this site ({site})." @@ -14820,11 +15645,11 @@ msgstr "" "Het geselecteerde cluster ({cluster}) is niet toegewezen aan deze site " "({site})." -#: virtualization/models/virtualmachines.py:198 +#: netbox/virtualization/models/virtualmachines.py:198 msgid "Must specify a cluster when assigning a host device." msgstr "Moet een cluster specificeren bij het toewijzen van een hostapparaat." -#: virtualization/models/virtualmachines.py:203 +#: netbox/virtualization/models/virtualmachines.py:203 #, python-brace-format msgid "" "The selected device ({device}) is not assigned to this cluster ({cluster})." @@ -14832,7 +15657,7 @@ msgstr "" "Het geselecteerde apparaat ({device}) is niet toegewezen aan dit cluster " "({cluster})." -#: virtualization/models/virtualmachines.py:215 +#: netbox/virtualization/models/virtualmachines.py:215 #, python-brace-format msgid "" "The specified disk size ({size}) must match the aggregate size of assigned " @@ -14841,17 +15666,17 @@ msgstr "" "De opgegeven schijfgrootte ({size}) moet overeenkomen met de totale grootte " "van toegewezen virtuele schijven ({total_size})." -#: virtualization/models/virtualmachines.py:229 +#: netbox/virtualization/models/virtualmachines.py:229 #, 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.)" -#: virtualization/models/virtualmachines.py:238 +#: netbox/virtualization/models/virtualmachines.py:238 #, 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." -#: virtualization/models/virtualmachines.py:396 +#: netbox/virtualization/models/virtualmachines.py:396 #, python-brace-format msgid "" "The selected parent interface ({parent}) belongs to a different virtual " @@ -14860,7 +15685,7 @@ msgstr "" "De geselecteerde ouderinterface ({parent}) behoort tot een andere virtuele " "machine ({virtual_machine})." -#: virtualization/models/virtualmachines.py:411 +#: netbox/virtualization/models/virtualmachines.py:411 #, python-brace-format msgid "" "The selected bridge interface ({bridge}) belongs to a different virtual " @@ -14869,7 +15694,7 @@ msgstr "" "De geselecteerde bridge-interface ({bridge}) behoort tot een andere virtuele" " machine ({virtual_machine})." -#: virtualization/models/virtualmachines.py:422 +#: netbox/virtualization/models/virtualmachines.py:422 #, python-brace-format msgid "" "The untagged VLAN ({untagged_vlan}) must belong to the same site as the " @@ -14878,395 +15703,418 @@ msgstr "" "Het VLAN zonder label ({untagged_vlan}) moet tot dezelfde site behoren als " "de bovenliggende virtuele machine van de interface, of moet globaal zijn." -#: virtualization/models/virtualmachines.py:434 +#: netbox/virtualization/models/virtualmachines.py:434 msgid "size (MB)" msgstr "grootte (MB)" -#: virtualization/models/virtualmachines.py:438 +#: netbox/virtualization/models/virtualmachines.py:438 msgid "virtual disk" msgstr "virtuele schijf" -#: virtualization/models/virtualmachines.py:439 +#: netbox/virtualization/models/virtualmachines.py:439 msgid "virtual disks" msgstr "virtuele schijven" -#: virtualization/views.py:275 +#: netbox/virtualization/views.py:273 #, python-brace-format msgid "Added {count} devices to cluster {cluster}" msgstr "Toegevoegd {count} apparaten om te clusteren {cluster}" -#: virtualization/views.py:310 +#: netbox/virtualization/views.py:308 #, python-brace-format msgid "Removed {count} devices from cluster {cluster}" msgstr "Verwijderd {count} apparaten uit het cluster {cluster}" -#: vpn/choices.py:31 +#: netbox/vpn/choices.py:35 msgid "IPsec - Transport" msgstr "IPsec - Vervoer" -#: vpn/choices.py:32 +#: netbox/vpn/choices.py:36 msgid "IPsec - Tunnel" msgstr "IPsec - Tunnel" -#: vpn/choices.py:33 +#: netbox/vpn/choices.py:37 msgid "IP-in-IP" msgstr "IP-in-IP" -#: vpn/choices.py:34 +#: netbox/vpn/choices.py:38 msgid "GRE" msgstr "GRE" -#: vpn/choices.py:56 +#: netbox/vpn/choices.py:39 +msgid "WireGuard" +msgstr "" + +#: netbox/vpn/choices.py:40 +msgid "OpenVPN" +msgstr "" + +#: netbox/vpn/choices.py:41 +msgid "L2TP" +msgstr "" + +#: netbox/vpn/choices.py:42 +msgid "PPTP" +msgstr "" + +#: netbox/vpn/choices.py:64 msgid "Hub" msgstr "Hub" -#: vpn/choices.py:57 +#: netbox/vpn/choices.py:65 msgid "Spoke" msgstr "Spoke" -#: vpn/choices.py:80 +#: netbox/vpn/choices.py:88 msgid "Aggressive" msgstr "Agressive" -#: vpn/choices.py:81 +#: netbox/vpn/choices.py:89 msgid "Main" msgstr "Main" -#: vpn/choices.py:92 +#: netbox/vpn/choices.py:100 msgid "Pre-shared keys" msgstr "Vooraf gedeelde sleutels" -#: vpn/choices.py:93 +#: netbox/vpn/choices.py:101 msgid "Certificates" msgstr "Certificaten" -#: vpn/choices.py:94 +#: netbox/vpn/choices.py:102 msgid "RSA signatures" msgstr "RSA-handtekeningen" -#: vpn/choices.py:95 +#: netbox/vpn/choices.py:103 msgid "DSA signatures" msgstr "DSA-handtekeningen" -#: vpn/choices.py:178 vpn/choices.py:179 vpn/choices.py:180 vpn/choices.py:181 -#: vpn/choices.py:182 vpn/choices.py:183 vpn/choices.py:184 vpn/choices.py:185 -#: vpn/choices.py:186 vpn/choices.py:187 vpn/choices.py:188 vpn/choices.py:189 -#: vpn/choices.py:190 vpn/choices.py:191 vpn/choices.py:192 vpn/choices.py:193 -#: vpn/choices.py:194 vpn/choices.py:195 vpn/choices.py:196 vpn/choices.py:197 -#: vpn/choices.py:198 vpn/choices.py:199 vpn/choices.py:200 vpn/choices.py:201 +#: netbox/vpn/choices.py:186 netbox/vpn/choices.py:187 +#: netbox/vpn/choices.py:188 netbox/vpn/choices.py:189 +#: netbox/vpn/choices.py:190 netbox/vpn/choices.py:191 +#: netbox/vpn/choices.py:192 netbox/vpn/choices.py:193 +#: netbox/vpn/choices.py:194 netbox/vpn/choices.py:195 +#: netbox/vpn/choices.py:196 netbox/vpn/choices.py:197 +#: netbox/vpn/choices.py:198 netbox/vpn/choices.py:199 +#: netbox/vpn/choices.py:200 netbox/vpn/choices.py:201 +#: netbox/vpn/choices.py:202 netbox/vpn/choices.py:203 +#: netbox/vpn/choices.py:204 netbox/vpn/choices.py:205 +#: netbox/vpn/choices.py:206 netbox/vpn/choices.py:207 +#: netbox/vpn/choices.py:208 netbox/vpn/choices.py:209 #, python-brace-format msgid "Group {n}" msgstr "groep {n}" -#: vpn/choices.py:243 +#: netbox/vpn/choices.py:251 msgid "Ethernet Private LAN" msgstr "Ethernet, privé-LAN" -#: vpn/choices.py:244 +#: netbox/vpn/choices.py:252 msgid "Ethernet Virtual Private LAN" msgstr "Virtueel privé-LAN via Ethernet" -#: vpn/choices.py:247 +#: netbox/vpn/choices.py:255 msgid "Ethernet Private Tree" msgstr "Ethernet Private Tree" -#: vpn/choices.py:248 +#: netbox/vpn/choices.py:256 msgid "Ethernet Virtual Private Tree" msgstr "Virtuele privéstructuur van Ethernet" -#: vpn/filtersets.py:41 +#: netbox/vpn/filtersets.py:41 msgid "Tunnel group (ID)" msgstr "Tunnelgroep (ID)" -#: vpn/filtersets.py:47 +#: netbox/vpn/filtersets.py:47 msgid "Tunnel group (slug)" msgstr "Tunnelgroep (slug)" -#: vpn/filtersets.py:54 +#: netbox/vpn/filtersets.py:54 msgid "IPSec profile (ID)" msgstr "IPsec-profiel (ID)" -#: vpn/filtersets.py:60 +#: netbox/vpn/filtersets.py:60 msgid "IPSec profile (name)" msgstr "IPsec-profiel (naam)" -#: vpn/filtersets.py:81 +#: netbox/vpn/filtersets.py:81 msgid "Tunnel (ID)" msgstr "Tunnel (ID)" -#: vpn/filtersets.py:87 +#: netbox/vpn/filtersets.py:87 msgid "Tunnel (name)" msgstr "Tunnel (naam)" -#: vpn/filtersets.py:118 +#: netbox/vpn/filtersets.py:118 msgid "Outside IP (ID)" msgstr "Buiten IP (ID)" -#: vpn/filtersets.py:130 vpn/filtersets.py:263 +#: netbox/vpn/filtersets.py:130 netbox/vpn/filtersets.py:263 msgid "IKE policy (ID)" msgstr "IKE-beleid (ID)" -#: vpn/filtersets.py:136 vpn/filtersets.py:269 +#: netbox/vpn/filtersets.py:136 netbox/vpn/filtersets.py:269 msgid "IKE policy (name)" msgstr "IKE-beleid (naam)" -#: vpn/filtersets.py:200 vpn/filtersets.py:273 +#: netbox/vpn/filtersets.py:200 netbox/vpn/filtersets.py:273 msgid "IPSec policy (ID)" msgstr "IPsec-beleid (ID)" -#: vpn/filtersets.py:206 vpn/filtersets.py:279 +#: netbox/vpn/filtersets.py:206 netbox/vpn/filtersets.py:279 msgid "IPSec policy (name)" msgstr "IPsec-beleid (naam)" -#: vpn/filtersets.py:348 +#: netbox/vpn/filtersets.py:348 msgid "L2VPN (slug)" msgstr "L2VPN (slug)" -#: vpn/filtersets.py:412 +#: netbox/vpn/filtersets.py:412 msgid "VM Interface (ID)" msgstr "VM-interface (ID)" -#: vpn/filtersets.py:418 +#: netbox/vpn/filtersets.py:418 msgid "VLAN (name)" msgstr "VLAN (naam)" -#: vpn/forms/bulk_edit.py:45 vpn/forms/bulk_import.py:42 -#: vpn/forms/filtersets.py:54 +#: netbox/vpn/forms/bulk_edit.py:45 netbox/vpn/forms/bulk_import.py:42 +#: netbox/vpn/forms/filtersets.py:54 msgid "Tunnel group" msgstr "Tunnelgroep" -#: vpn/forms/bulk_edit.py:117 vpn/models/crypto.py:47 +#: netbox/vpn/forms/bulk_edit.py:117 netbox/vpn/models/crypto.py:47 msgid "SA lifetime" msgstr "Een leven lang" -#: vpn/forms/bulk_edit.py:151 wireless/forms/bulk_edit.py:79 -#: wireless/forms/bulk_edit.py:126 wireless/forms/filtersets.py:64 -#: wireless/forms/filtersets.py:98 +#: netbox/vpn/forms/bulk_edit.py:151 netbox/wireless/forms/bulk_edit.py:79 +#: netbox/wireless/forms/bulk_edit.py:126 +#: netbox/wireless/forms/filtersets.py:64 +#: netbox/wireless/forms/filtersets.py:98 msgid "Pre-shared key" msgstr "Vooraf gedeelde sleutel" -#: vpn/forms/bulk_edit.py:237 vpn/forms/bulk_import.py:239 -#: vpn/forms/filtersets.py:199 vpn/forms/model_forms.py:370 -#: vpn/models/crypto.py:104 +#: netbox/vpn/forms/bulk_edit.py:237 netbox/vpn/forms/bulk_import.py:239 +#: netbox/vpn/forms/filtersets.py:199 netbox/vpn/forms/model_forms.py:370 +#: netbox/vpn/models/crypto.py:104 msgid "IKE policy" msgstr "IKE-beleid" -#: vpn/forms/bulk_edit.py:242 vpn/forms/bulk_import.py:244 -#: vpn/forms/filtersets.py:204 vpn/forms/model_forms.py:374 -#: vpn/models/crypto.py:209 +#: netbox/vpn/forms/bulk_edit.py:242 netbox/vpn/forms/bulk_import.py:244 +#: netbox/vpn/forms/filtersets.py:204 netbox/vpn/forms/model_forms.py:374 +#: netbox/vpn/models/crypto.py:209 msgid "IPSec policy" msgstr "IPsec-beleid" -#: vpn/forms/bulk_import.py:50 +#: netbox/vpn/forms/bulk_import.py:50 msgid "Tunnel encapsulation" msgstr "Inkapseling van tunnels" -#: vpn/forms/bulk_import.py:83 +#: netbox/vpn/forms/bulk_import.py:83 msgid "Operational role" msgstr "Operationele rol" -#: vpn/forms/bulk_import.py:90 +#: netbox/vpn/forms/bulk_import.py:90 msgid "Parent device of assigned interface" msgstr "Ouderapparaat met toegewezen interface" -#: vpn/forms/bulk_import.py:97 +#: netbox/vpn/forms/bulk_import.py:97 msgid "Parent VM of assigned interface" msgstr "Bovenliggende VM van de toegewezen interface" -#: vpn/forms/bulk_import.py:104 +#: netbox/vpn/forms/bulk_import.py:104 msgid "Device or virtual machine interface" msgstr "Interface voor apparaat of virtuele machine" -#: vpn/forms/bulk_import.py:183 +#: netbox/vpn/forms/bulk_import.py:183 msgid "IKE proposal(s)" msgstr "IKE-voorstel (en)" -#: vpn/forms/bulk_import.py:215 vpn/models/crypto.py:197 +#: netbox/vpn/forms/bulk_import.py:215 netbox/vpn/models/crypto.py:197 msgid "Diffie-Hellman group for Perfect Forward Secrecy" msgstr "Diffie-Hellman-groep voor Perfect Forward Secrecy" -#: vpn/forms/bulk_import.py:222 +#: netbox/vpn/forms/bulk_import.py:222 msgid "IPSec proposal(s)" msgstr "IPsec-voorstel (en)" -#: vpn/forms/bulk_import.py:236 +#: netbox/vpn/forms/bulk_import.py:236 msgid "IPSec protocol" msgstr "IPsec-protocol" -#: vpn/forms/bulk_import.py:266 +#: netbox/vpn/forms/bulk_import.py:266 msgid "L2VPN type" msgstr "L2VPN-type" -#: vpn/forms/bulk_import.py:287 +#: netbox/vpn/forms/bulk_import.py:287 msgid "Parent device (for interface)" msgstr "Ouderapparaat (voor interface)" -#: vpn/forms/bulk_import.py:294 +#: netbox/vpn/forms/bulk_import.py:294 msgid "Parent virtual machine (for interface)" msgstr "Virtuele bovenliggende machine (voor interface)" -#: vpn/forms/bulk_import.py:301 +#: netbox/vpn/forms/bulk_import.py:301 msgid "Assigned interface (device or VM)" msgstr "Toegewezen interface (apparaat of VM)" -#: vpn/forms/bulk_import.py:334 +#: netbox/vpn/forms/bulk_import.py:334 msgid "Cannot import device and VM interface terminations simultaneously." msgstr "" "Kan apparaat- en VM-interface-afsluitingen niet tegelijkertijd importeren." -#: vpn/forms/bulk_import.py:336 +#: netbox/vpn/forms/bulk_import.py:336 msgid "Each termination must specify either an interface or a VLAN." msgstr "Elke beëindiging moet een interface of een VLAN specificeren." -#: vpn/forms/bulk_import.py:338 +#: netbox/vpn/forms/bulk_import.py:338 msgid "Cannot assign both an interface and a VLAN." msgstr "Kan niet zowel een interface als een VLAN toewijzen." -#: vpn/forms/filtersets.py:130 +#: netbox/vpn/forms/filtersets.py:130 msgid "IKE version" msgstr "IKE-versie" -#: vpn/forms/filtersets.py:142 vpn/forms/filtersets.py:175 -#: vpn/forms/model_forms.py:298 vpn/forms/model_forms.py:334 +#: netbox/vpn/forms/filtersets.py:142 netbox/vpn/forms/filtersets.py:175 +#: netbox/vpn/forms/model_forms.py:298 netbox/vpn/forms/model_forms.py:334 msgid "Proposal" msgstr "Voorstel" -#: vpn/forms/filtersets.py:251 +#: netbox/vpn/forms/filtersets.py:251 msgid "Assigned Object Type" msgstr "Toegewezen objecttype" -#: vpn/forms/model_forms.py:95 vpn/forms/model_forms.py:130 -#: vpn/forms/model_forms.py:240 vpn/tables/tunnels.py:91 +#: netbox/vpn/forms/model_forms.py:95 netbox/vpn/forms/model_forms.py:130 +#: netbox/vpn/forms/model_forms.py:240 netbox/vpn/tables/tunnels.py:91 msgid "Tunnel interface" msgstr "Tunnelinterface" -#: vpn/forms/model_forms.py:150 +#: netbox/vpn/forms/model_forms.py:150 msgid "First Termination" msgstr "Eerste beëindiging" -#: vpn/forms/model_forms.py:153 +#: netbox/vpn/forms/model_forms.py:153 msgid "Second Termination" msgstr "Tweede beëindiging" -#: vpn/forms/model_forms.py:197 +#: netbox/vpn/forms/model_forms.py:197 msgid "This parameter is required when defining a termination." msgstr "Deze parameter is vereist voor het definiëren van een beëindiging." -#: vpn/forms/model_forms.py:320 vpn/forms/model_forms.py:356 +#: netbox/vpn/forms/model_forms.py:320 netbox/vpn/forms/model_forms.py:356 msgid "Policy" msgstr "Beleid" -#: vpn/forms/model_forms.py:487 +#: netbox/vpn/forms/model_forms.py:487 msgid "A termination must specify an interface or VLAN." msgstr "Een beëindiging moet een interface of VLAN specificeren." -#: vpn/forms/model_forms.py:489 +#: netbox/vpn/forms/model_forms.py:489 msgid "" "A termination can only have one terminating object (an interface or VLAN)." msgstr "" "Een beëindiging kan slechts één afsluitend object hebben (een interface of " "VLAN)." -#: vpn/models/crypto.py:33 +#: netbox/vpn/models/crypto.py:33 msgid "encryption algorithm" msgstr "coderingsalgoritme" -#: vpn/models/crypto.py:37 +#: netbox/vpn/models/crypto.py:37 msgid "authentication algorithm" msgstr "authenticatie-algoritme" -#: vpn/models/crypto.py:44 +#: netbox/vpn/models/crypto.py:44 msgid "Diffie-Hellman group ID" msgstr "Diffie-Hellman groeps-ID" -#: vpn/models/crypto.py:50 +#: netbox/vpn/models/crypto.py:50 msgid "Security association lifetime (in seconds)" msgstr "Levensduur van de beveiligingsvereniging (in seconden)" -#: vpn/models/crypto.py:59 +#: netbox/vpn/models/crypto.py:59 msgid "IKE proposal" msgstr "IKE-voorstel" -#: vpn/models/crypto.py:60 +#: netbox/vpn/models/crypto.py:60 msgid "IKE proposals" msgstr "IKE-voorstellen" -#: vpn/models/crypto.py:76 +#: netbox/vpn/models/crypto.py:76 msgid "version" msgstr "versie" -#: vpn/models/crypto.py:88 vpn/models/crypto.py:190 +#: netbox/vpn/models/crypto.py:88 netbox/vpn/models/crypto.py:190 msgid "proposals" msgstr "voorstellen" -#: vpn/models/crypto.py:91 wireless/models.py:39 +#: netbox/vpn/models/crypto.py:91 netbox/wireless/models.py:39 msgid "pre-shared key" msgstr "vooraf gedeelde sleutel" -#: vpn/models/crypto.py:105 +#: netbox/vpn/models/crypto.py:105 msgid "IKE policies" msgstr "IKE-beleid" -#: vpn/models/crypto.py:118 +#: netbox/vpn/models/crypto.py:118 msgid "Mode is required for selected IKE version" msgstr "Modus is vereist voor de geselecteerde IKE-versie" -#: vpn/models/crypto.py:122 +#: netbox/vpn/models/crypto.py:122 msgid "Mode cannot be used for selected IKE version" msgstr "De modus kan niet worden gebruikt voor de geselecteerde IKE-versie" -#: vpn/models/crypto.py:136 +#: netbox/vpn/models/crypto.py:136 msgid "encryption" msgstr "encryptie" -#: vpn/models/crypto.py:141 +#: netbox/vpn/models/crypto.py:141 msgid "authentication" msgstr "authenticatie" -#: vpn/models/crypto.py:149 +#: netbox/vpn/models/crypto.py:149 msgid "Security association lifetime (seconds)" msgstr "Levensduur van de beveiligingsvereniging (seconden)" -#: vpn/models/crypto.py:155 +#: netbox/vpn/models/crypto.py:155 msgid "Security association lifetime (in kilobytes)" msgstr "Levensduur van de veiligheidsorganisatie (in kilobytes)" -#: vpn/models/crypto.py:164 +#: netbox/vpn/models/crypto.py:164 msgid "IPSec proposal" msgstr "IPsec-voorstel" -#: vpn/models/crypto.py:165 +#: netbox/vpn/models/crypto.py:165 msgid "IPSec proposals" msgstr "IPsec-voorstellen" -#: vpn/models/crypto.py:178 +#: netbox/vpn/models/crypto.py:178 msgid "Encryption and/or authentication algorithm must be defined" msgstr "" "Het algoritme voor versleuteling en/of authenticatie moet worden " "gedefinieerd" -#: vpn/models/crypto.py:210 +#: netbox/vpn/models/crypto.py:210 msgid "IPSec policies" msgstr "IPsec-beleid" -#: vpn/models/crypto.py:251 +#: netbox/vpn/models/crypto.py:251 msgid "IPSec profiles" msgstr "IPsec-profielen" -#: vpn/models/l2vpn.py:116 +#: netbox/vpn/models/l2vpn.py:116 msgid "L2VPN termination" msgstr "L2VPN-beëindiging" -#: vpn/models/l2vpn.py:117 +#: netbox/vpn/models/l2vpn.py:117 msgid "L2VPN terminations" msgstr "L2VPN-beëindigingen" -#: vpn/models/l2vpn.py:135 +#: netbox/vpn/models/l2vpn.py:135 #, python-brace-format msgid "L2VPN Termination already assigned ({assigned_object})" msgstr "L2VPN Beëindiging is al toegewezen ({assigned_object})" -#: vpn/models/l2vpn.py:147 +#: netbox/vpn/models/l2vpn.py:147 #, python-brace-format msgid "" "{l2vpn_type} L2VPNs cannot have more than two terminations; found " @@ -15275,187 +16123,195 @@ msgstr "" "{l2vpn_type} L2VPN's kunnen niet meer dan twee beëindigingen hebben; " "gevonden {terminations_count} reeds gedefinieerd." -#: vpn/models/tunnels.py:26 +#: netbox/vpn/models/tunnels.py:26 msgid "tunnel group" msgstr "tunnelgroep" -#: vpn/models/tunnels.py:27 +#: netbox/vpn/models/tunnels.py:27 msgid "tunnel groups" msgstr "tunnelgroepen" -#: vpn/models/tunnels.py:53 +#: netbox/vpn/models/tunnels.py:53 msgid "encapsulation" msgstr "inkapseling" -#: vpn/models/tunnels.py:72 +#: netbox/vpn/models/tunnels.py:72 msgid "tunnel ID" msgstr "tunnel-ID" -#: vpn/models/tunnels.py:94 +#: netbox/vpn/models/tunnels.py:94 msgid "tunnel" msgstr "tunnel" -#: vpn/models/tunnels.py:95 +#: netbox/vpn/models/tunnels.py:95 msgid "tunnels" msgstr "tunnels" -#: vpn/models/tunnels.py:153 +#: netbox/vpn/models/tunnels.py:153 msgid "An object may be terminated to only one tunnel at a time." msgstr "Een object mag slechts in één tunnel tegelijk worden afgesloten." -#: vpn/models/tunnels.py:156 +#: netbox/vpn/models/tunnels.py:156 msgid "tunnel termination" msgstr "beëindiging van de tunnel" -#: vpn/models/tunnels.py:157 +#: netbox/vpn/models/tunnels.py:157 msgid "tunnel terminations" msgstr "tunnelafsluitingen" -#: vpn/models/tunnels.py:174 +#: netbox/vpn/models/tunnels.py:174 #, python-brace-format msgid "{name} is already attached to a tunnel ({tunnel})." msgstr "{name} is al bevestigd aan een tunnel ({tunnel})." -#: vpn/tables/crypto.py:22 +#: netbox/vpn/tables/crypto.py:22 msgid "Authentication Method" msgstr "Authenticatiemethode" -#: vpn/tables/crypto.py:25 vpn/tables/crypto.py:97 +#: netbox/vpn/tables/crypto.py:25 netbox/vpn/tables/crypto.py:97 msgid "Encryption Algorithm" msgstr "Encryptie-algoritme" -#: vpn/tables/crypto.py:28 vpn/tables/crypto.py:100 +#: netbox/vpn/tables/crypto.py:28 netbox/vpn/tables/crypto.py:100 msgid "Authentication Algorithm" msgstr "Authenticatie-algoritme" -#: vpn/tables/crypto.py:34 +#: netbox/vpn/tables/crypto.py:34 msgid "SA Lifetime" msgstr "Een leven lang" -#: vpn/tables/crypto.py:71 +#: netbox/vpn/tables/crypto.py:71 msgid "Pre-shared Key" msgstr "Vooraf gedeelde sleutel" -#: vpn/tables/crypto.py:103 +#: netbox/vpn/tables/crypto.py:103 msgid "SA Lifetime (Seconds)" msgstr "Een leven lang (seconden)" -#: vpn/tables/crypto.py:106 +#: netbox/vpn/tables/crypto.py:106 msgid "SA Lifetime (KB)" msgstr "SA-levensduur (KB)" -#: vpn/tables/l2vpn.py:69 +#: netbox/vpn/tables/l2vpn.py:69 msgid "Object Parent" msgstr "Voorwerp: ouder" -#: vpn/tables/l2vpn.py:74 +#: netbox/vpn/tables/l2vpn.py:74 msgid "Object Site" msgstr "Site van het object" -#: wireless/choices.py:11 +#: netbox/wireless/choices.py:11 msgid "Access point" msgstr "Toegangspunt" -#: wireless/choices.py:12 +#: netbox/wireless/choices.py:12 msgid "Station" msgstr "Station" -#: wireless/choices.py:467 +#: netbox/wireless/choices.py:467 msgid "Open" msgstr "Open" -#: wireless/choices.py:469 +#: netbox/wireless/choices.py:469 msgid "WPA Personal (PSK)" msgstr "WPA Personal (PSK)" -#: wireless/choices.py:470 +#: netbox/wireless/choices.py:470 msgid "WPA Enterprise" msgstr "WPA Enterprise" -#: wireless/forms/bulk_edit.py:73 wireless/forms/bulk_edit.py:120 -#: wireless/forms/bulk_import.py:68 wireless/forms/bulk_import.py:71 -#: wireless/forms/bulk_import.py:110 wireless/forms/bulk_import.py:113 -#: wireless/forms/filtersets.py:59 wireless/forms/filtersets.py:93 +#: netbox/wireless/forms/bulk_edit.py:73 +#: netbox/wireless/forms/bulk_edit.py:120 +#: netbox/wireless/forms/bulk_import.py:68 +#: netbox/wireless/forms/bulk_import.py:71 +#: netbox/wireless/forms/bulk_import.py:110 +#: netbox/wireless/forms/bulk_import.py:113 +#: netbox/wireless/forms/filtersets.py:59 +#: netbox/wireless/forms/filtersets.py:93 msgid "Authentication cipher" msgstr "Authenticatiecijfer" -#: wireless/forms/bulk_edit.py:134 wireless/forms/bulk_import.py:116 -#: wireless/forms/bulk_import.py:119 wireless/forms/filtersets.py:106 +#: 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" -#: wireless/forms/bulk_import.py:52 +#: netbox/wireless/forms/bulk_import.py:52 msgid "Bridged VLAN" msgstr "Overbrugd VLAN" -#: wireless/forms/bulk_import.py:89 wireless/tables/wirelesslink.py:28 +#: netbox/wireless/forms/bulk_import.py:89 +#: netbox/wireless/tables/wirelesslink.py:28 msgid "Interface A" msgstr "Interface A" -#: wireless/forms/bulk_import.py:93 wireless/tables/wirelesslink.py:37 +#: netbox/wireless/forms/bulk_import.py:93 +#: netbox/wireless/tables/wirelesslink.py:37 msgid "Interface B" msgstr "Interface B" -#: wireless/forms/model_forms.py:161 +#: netbox/wireless/forms/model_forms.py:161 msgid "Side B" msgstr "Kant B" -#: wireless/models.py:31 +#: netbox/wireless/models.py:31 msgid "authentication cipher" msgstr "authenticatiecijfer" -#: wireless/models.py:69 +#: netbox/wireless/models.py:69 msgid "wireless LAN group" msgstr "draadloze LAN-groep" -#: wireless/models.py:70 +#: netbox/wireless/models.py:70 msgid "wireless LAN groups" msgstr "draadloze LAN-groepen" -#: wireless/models.py:116 +#: netbox/wireless/models.py:116 msgid "wireless LAN" msgstr "draadloos LAN" -#: wireless/models.py:144 +#: netbox/wireless/models.py:144 msgid "interface A" msgstr "interface A" -#: wireless/models.py:151 +#: netbox/wireless/models.py:151 msgid "interface B" msgstr "interface B" -#: wireless/models.py:165 +#: netbox/wireless/models.py:165 msgid "distance" msgstr "afstand" -#: wireless/models.py:172 +#: netbox/wireless/models.py:172 msgid "distance unit" msgstr "afstandseenheid" -#: wireless/models.py:219 +#: netbox/wireless/models.py:219 msgid "wireless link" msgstr "draadloze link" -#: wireless/models.py:220 +#: netbox/wireless/models.py:220 msgid "wireless links" msgstr "draadloze verbindingen" -#: wireless/models.py:236 +#: netbox/wireless/models.py:236 msgid "Must specify a unit when setting a wireless distance" msgstr "" "Moet een eenheid specificeren bij het instellen van een draadloze afstand" -#: wireless/models.py:242 wireless/models.py:248 +#: netbox/wireless/models.py:242 netbox/wireless/models.py:248 #, python-brace-format msgid "{type} is not a wireless interface." msgstr "{type} is geen draadloze interface." -#: wireless/utils.py:16 +#: netbox/wireless/utils.py:16 #, python-brace-format msgid "Invalid channel value: {channel}" msgstr "Ongeldige kanaalwaarde: {channel}" -#: wireless/utils.py:26 +#: netbox/wireless/utils.py:26 #, python-brace-format msgid "Invalid channel attribute: {name}" msgstr "Ongeldig kanaalkenmerk: {name}" diff --git a/netbox/translations/pl/LC_MESSAGES/django.mo b/netbox/translations/pl/LC_MESSAGES/django.mo index 64ee5ba08..e0e9273fa 100644 Binary files a/netbox/translations/pl/LC_MESSAGES/django.mo and b/netbox/translations/pl/LC_MESSAGES/django.mo differ diff --git a/netbox/translations/pl/LC_MESSAGES/django.po b/netbox/translations/pl/LC_MESSAGES/django.po index 50a8f6f40..92dde3ca4 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: 2024-10-28 19:20+0000\n" +"POT-Creation-Date: 2024-12-12 05:02+0000\n" "PO-Revision-Date: 2023-10-30 17:48+0000\n" "Last-Translator: Grzegorz Szymaszek, 2024\n" "Language-Team: Polish (https://app.transifex.com/netbox-community/teams/178115/pl/)\n" @@ -24,3092 +24,3421 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: account/tables.py:27 templates/account/token.html:22 -#: templates/users/token.html:17 users/forms/bulk_import.py:39 -#: users/forms/model_forms.py:112 +#: netbox/account/tables.py:27 netbox/templates/account/token.html:22 +#: netbox/templates/users/token.html:17 netbox/users/forms/bulk_import.py:39 +#: netbox/users/forms/model_forms.py:112 msgid "Key" msgstr "Klucz" -#: account/tables.py:31 users/forms/filtersets.py:132 +#: netbox/account/tables.py:31 netbox/users/forms/filtersets.py:132 msgid "Write Enabled" msgstr "Zapis włączony" -#: account/tables.py:35 core/choices.py:86 core/tables/jobs.py:29 -#: core/tables/tasks.py:79 extras/tables/tables.py:335 -#: extras/tables/tables.py:566 templates/account/token.html:43 -#: templates/core/configrevision.html:26 -#: templates/core/configrevision_restore.html:12 templates/core/job.html:69 -#: templates/core/rq_task.html:16 templates/core/rq_task.html:73 -#: templates/core/rq_worker.html:14 -#: templates/extras/htmx/script_result.html:12 -#: templates/extras/journalentry.html:22 templates/generic/object.html:58 -#: templates/users/token.html:35 +#: netbox/account/tables.py:35 netbox/core/choices.py:86 +#: 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 +#: netbox/templates/core/configrevision.html:26 +#: netbox/templates/core/configrevision_restore.html:12 +#: netbox/templates/core/job.html:69 netbox/templates/core/rq_task.html:16 +#: netbox/templates/core/rq_task.html:73 +#: netbox/templates/core/rq_worker.html:14 +#: netbox/templates/extras/htmx/script_result.html:12 +#: netbox/templates/extras/journalentry.html:22 +#: netbox/templates/generic/object.html:58 +#: netbox/templates/users/token.html:35 msgid "Created" msgstr "Utworzony" -#: account/tables.py:39 templates/account/token.html:47 -#: templates/users/token.html:39 users/forms/bulk_edit.py:117 -#: users/forms/filtersets.py:136 +#: netbox/account/tables.py:39 netbox/templates/account/token.html:47 +#: netbox/templates/users/token.html:39 netbox/users/forms/bulk_edit.py:117 +#: netbox/users/forms/filtersets.py:136 msgid "Expires" msgstr "Wygasa" -#: account/tables.py:42 users/forms/filtersets.py:141 +#: netbox/account/tables.py:42 netbox/users/forms/filtersets.py:141 msgid "Last Used" msgstr "Ostatnio używane" -#: account/tables.py:45 templates/account/token.html:55 -#: templates/users/token.html:47 users/forms/bulk_edit.py:122 -#: users/forms/model_forms.py:124 +#: netbox/account/tables.py:45 netbox/templates/account/token.html:55 +#: netbox/templates/users/token.html:47 netbox/users/forms/bulk_edit.py:122 +#: netbox/users/forms/model_forms.py:124 msgid "Allowed IPs" msgstr "Dozwolone adresy IP" -#: account/views.py:114 +#: netbox/account/views.py:114 #, python-brace-format msgid "Logged in as {user}." msgstr "Zaloguj się jako {user}." -#: account/views.py:164 +#: netbox/account/views.py:164 msgid "You have logged out." msgstr "Wylogowałeś się." -#: account/views.py:216 +#: netbox/account/views.py:216 msgid "Your preferences have been updated." msgstr "Twoje preferencje zostały zaktualizowane." -#: account/views.py:239 +#: netbox/account/views.py:239 msgid "LDAP-authenticated user credentials cannot be changed within NetBox." msgstr "" "Poświadczenia użytkownika uwierzytelnionego LDAP nie mogą być zmieniane w " "NetBox." -#: account/views.py:254 +#: netbox/account/views.py:254 msgid "Your password has been changed successfully." msgstr "Twoje hasło zostało pomyślnie zmienione." -#: circuits/choices.py:21 dcim/choices.py:20 dcim/choices.py:102 -#: dcim/choices.py:185 dcim/choices.py:237 dcim/choices.py:1530 -#: dcim/choices.py:1606 dcim/choices.py:1656 virtualization/choices.py:20 -#: virtualization/choices.py:45 vpn/choices.py:18 +#: netbox/circuits/choices.py:21 netbox/dcim/choices.py:20 +#: netbox/dcim/choices.py:102 netbox/dcim/choices.py: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 msgid "Planned" msgstr "Planowane" -#: circuits/choices.py:22 netbox/navigation/menu.py:305 +#: netbox/circuits/choices.py:22 netbox/netbox/navigation/menu.py:305 msgid "Provisioning" msgstr "Zaopatrzenie" -#: circuits/choices.py:23 core/tables/tasks.py:22 dcim/choices.py:22 -#: dcim/choices.py:103 dcim/choices.py:184 dcim/choices.py:236 -#: dcim/choices.py:1605 dcim/choices.py:1655 extras/tables/tables.py:495 -#: ipam/choices.py:31 ipam/choices.py:49 ipam/choices.py:69 -#: ipam/choices.py:154 templates/extras/configcontext.html:25 -#: templates/users/user.html:37 users/forms/bulk_edit.py:38 -#: virtualization/choices.py:22 virtualization/choices.py:44 vpn/choices.py:19 -#: wireless/choices.py:25 +#: netbox/circuits/choices.py:23 netbox/core/tables/tasks.py:22 +#: netbox/dcim/choices.py:22 netbox/dcim/choices.py:103 +#: netbox/dcim/choices.py: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/templates/users/user.html:37 netbox/users/forms/bulk_edit.py:38 +#: netbox/virtualization/choices.py:22 netbox/virtualization/choices.py:44 +#: netbox/vpn/choices.py:19 netbox/wireless/choices.py:25 msgid "Active" msgstr "Aktywny" -#: circuits/choices.py:24 dcim/choices.py:183 dcim/choices.py:235 -#: dcim/choices.py:1604 dcim/choices.py:1657 virtualization/choices.py:24 -#: virtualization/choices.py:43 +#: 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 msgid "Offline" msgstr "Nieaktywne" -#: circuits/choices.py:25 +#: netbox/circuits/choices.py:25 msgid "Deprovisioning" msgstr "Odstąpienie od zaopatrzenia" -#: circuits/choices.py:26 +#: netbox/circuits/choices.py:26 msgid "Decommissioned" msgstr "Wycofane ze służby" -#: circuits/choices.py:90 dcim/choices.py:1617 tenancy/choices.py:17 +#: netbox/circuits/choices.py:90 netbox/dcim/choices.py:1619 +#: netbox/tenancy/choices.py:17 msgid "Primary" msgstr "Pierwszorzędny" -#: circuits/choices.py:91 ipam/choices.py:90 tenancy/choices.py:18 +#: netbox/circuits/choices.py:91 netbox/ipam/choices.py:90 +#: netbox/tenancy/choices.py:18 msgid "Secondary" msgstr "Drugorzędny" -#: circuits/choices.py:92 tenancy/choices.py:19 +#: netbox/circuits/choices.py:92 netbox/tenancy/choices.py:19 msgid "Tertiary" msgstr "Trzeciorzędny" -#: circuits/choices.py:93 tenancy/choices.py:20 +#: netbox/circuits/choices.py:93 netbox/tenancy/choices.py:20 msgid "Inactive" msgstr "Nieaktywny" -#: circuits/filtersets.py:31 circuits/filtersets.py:198 dcim/filtersets.py:98 -#: dcim/filtersets.py:152 dcim/filtersets.py:212 dcim/filtersets.py:333 -#: dcim/filtersets.py:464 dcim/filtersets.py:1021 dcim/filtersets.py:1368 -#: dcim/filtersets.py:1903 dcim/filtersets.py:2146 dcim/filtersets.py:2204 -#: ipam/filtersets.py:339 ipam/filtersets.py:959 -#: virtualization/filtersets.py:45 virtualization/filtersets.py:173 -#: vpn/filtersets.py:358 +#: 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:339 netbox/ipam/filtersets.py:959 +#: netbox/virtualization/filtersets.py:45 +#: netbox/virtualization/filtersets.py:173 netbox/vpn/filtersets.py:358 msgid "Region (ID)" msgstr "Region (ID)" -#: circuits/filtersets.py:38 circuits/filtersets.py:205 dcim/filtersets.py:105 -#: dcim/filtersets.py:158 dcim/filtersets.py:219 dcim/filtersets.py:340 -#: dcim/filtersets.py:471 dcim/filtersets.py:1028 dcim/filtersets.py:1375 -#: dcim/filtersets.py:1910 dcim/filtersets.py:2153 dcim/filtersets.py:2211 -#: extras/filtersets.py:509 ipam/filtersets.py:346 ipam/filtersets.py:966 -#: virtualization/filtersets.py:52 virtualization/filtersets.py:180 -#: vpn/filtersets.py:353 +#: 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:346 +#: netbox/ipam/filtersets.py:966 netbox/virtualization/filtersets.py:52 +#: netbox/virtualization/filtersets.py:180 netbox/vpn/filtersets.py:353 msgid "Region (slug)" msgstr "Region (identyfikator)" -#: circuits/filtersets.py:44 circuits/filtersets.py:211 dcim/filtersets.py:128 -#: dcim/filtersets.py:225 dcim/filtersets.py:346 dcim/filtersets.py:477 -#: dcim/filtersets.py:1034 dcim/filtersets.py:1381 dcim/filtersets.py:1916 -#: dcim/filtersets.py:2159 dcim/filtersets.py:2217 ipam/filtersets.py:352 -#: ipam/filtersets.py:972 virtualization/filtersets.py:58 -#: virtualization/filtersets.py:186 +#: 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:352 +#: netbox/ipam/filtersets.py:972 netbox/virtualization/filtersets.py:58 +#: netbox/virtualization/filtersets.py:186 msgid "Site group (ID)" msgstr "Grupa witryn (ID)" -#: circuits/filtersets.py:51 circuits/filtersets.py:218 dcim/filtersets.py:135 -#: dcim/filtersets.py:232 dcim/filtersets.py:353 dcim/filtersets.py:484 -#: dcim/filtersets.py:1041 dcim/filtersets.py:1388 dcim/filtersets.py:1923 -#: dcim/filtersets.py:2166 dcim/filtersets.py:2224 extras/filtersets.py:515 -#: ipam/filtersets.py:359 ipam/filtersets.py:979 -#: virtualization/filtersets.py:65 virtualization/filtersets.py:193 +#: 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:359 netbox/ipam/filtersets.py:979 +#: netbox/virtualization/filtersets.py:65 +#: netbox/virtualization/filtersets.py:193 msgid "Site group (slug)" msgstr "Grupa terenów (identyfikator)" -#: circuits/filtersets.py:56 circuits/forms/bulk_edit.py:188 -#: circuits/forms/bulk_edit.py:216 circuits/forms/bulk_import.py:124 -#: circuits/forms/filtersets.py:51 circuits/forms/filtersets.py:171 -#: circuits/forms/filtersets.py:209 circuits/forms/model_forms.py:138 -#: circuits/forms/model_forms.py:154 circuits/tables/circuits.py:113 -#: dcim/forms/bulk_edit.py:168 dcim/forms/bulk_edit.py:329 -#: dcim/forms/bulk_edit.py:677 dcim/forms/bulk_edit.py:873 -#: dcim/forms/bulk_import.py:131 dcim/forms/bulk_import.py:230 -#: dcim/forms/bulk_import.py:309 dcim/forms/bulk_import.py:540 -#: dcim/forms/bulk_import.py:1311 dcim/forms/bulk_import.py:1339 -#: dcim/forms/filtersets.py:87 dcim/forms/filtersets.py:225 -#: dcim/forms/filtersets.py:342 dcim/forms/filtersets.py:439 -#: dcim/forms/filtersets.py:753 dcim/forms/filtersets.py:997 -#: dcim/forms/filtersets.py:1021 dcim/forms/filtersets.py:1111 -#: dcim/forms/filtersets.py:1149 dcim/forms/filtersets.py:1584 -#: dcim/forms/filtersets.py:1608 dcim/forms/filtersets.py:1632 -#: dcim/forms/model_forms.py:137 dcim/forms/model_forms.py:165 -#: dcim/forms/model_forms.py:238 dcim/forms/model_forms.py:463 -#: dcim/forms/model_forms.py:723 dcim/forms/object_create.py:391 -#: dcim/tables/devices.py:153 dcim/tables/power.py:26 dcim/tables/power.py:93 -#: dcim/tables/racks.py:122 dcim/tables/racks.py:207 dcim/tables/sites.py:134 -#: extras/filtersets.py:525 ipam/forms/bulk_edit.py:218 -#: ipam/forms/bulk_edit.py:285 ipam/forms/bulk_edit.py:484 -#: ipam/forms/bulk_import.py:171 ipam/forms/bulk_import.py:429 -#: ipam/forms/filtersets.py:153 ipam/forms/filtersets.py:231 -#: ipam/forms/filtersets.py:432 ipam/forms/filtersets.py:489 -#: ipam/forms/model_forms.py:205 ipam/forms/model_forms.py:636 -#: ipam/tables/ip.py:245 ipam/tables/vlans.py:118 ipam/tables/vlans.py:221 -#: templates/circuits/inc/circuit_termination_fields.html:6 -#: templates/dcim/device.html:22 templates/dcim/inc/cable_termination.html:8 -#: templates/dcim/inc/cable_termination.html:33 -#: templates/dcim/location.html:37 templates/dcim/powerpanel.html:22 -#: templates/dcim/rack.html:20 templates/dcim/rackreservation.html:28 -#: templates/dcim/site.html:28 templates/ipam/prefix.html:56 -#: templates/ipam/vlan.html:23 templates/ipam/vlan_edit.html:40 -#: templates/virtualization/cluster.html:42 -#: templates/virtualization/virtualmachine.html:95 -#: virtualization/forms/bulk_edit.py:91 virtualization/forms/bulk_edit.py:109 -#: virtualization/forms/bulk_edit.py:124 -#: virtualization/forms/bulk_import.py:59 -#: virtualization/forms/bulk_import.py:85 -#: virtualization/forms/filtersets.py:79 -#: virtualization/forms/filtersets.py:148 -#: virtualization/forms/model_forms.py:71 -#: virtualization/forms/model_forms.py:104 -#: virtualization/forms/model_forms.py:171 -#: virtualization/tables/clusters.py:77 -#: virtualization/tables/virtualmachines.py:63 vpn/forms/filtersets.py:266 -#: wireless/forms/model_forms.py:76 wireless/forms/model_forms.py:118 +#: 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/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/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/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 msgid "Site" msgstr "Teren" -#: circuits/filtersets.py:62 circuits/filtersets.py:229 -#: circuits/filtersets.py:274 dcim/filtersets.py:242 dcim/filtersets.py:363 -#: dcim/filtersets.py:458 extras/filtersets.py:531 ipam/filtersets.py:238 -#: ipam/filtersets.py:369 ipam/filtersets.py:989 -#: virtualization/filtersets.py:75 virtualization/filtersets.py:203 -#: vpn/filtersets.py:363 +#: 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/virtualization/filtersets.py:75 +#: netbox/virtualization/filtersets.py:203 netbox/vpn/filtersets.py:363 msgid "Site (slug)" msgstr "Teren (identyfikator)" -#: circuits/filtersets.py:67 +#: netbox/circuits/filtersets.py:67 msgid "ASN (ID)" msgstr "ASN (ID)" -#: circuits/filtersets.py:73 circuits/forms/filtersets.py:31 -#: ipam/forms/model_forms.py:159 ipam/models/asns.py:108 -#: ipam/models/asns.py:125 ipam/tables/asn.py:41 templates/ipam/asn.html:20 +#: 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/templates/ipam/asn.html:20 msgid "ASN" msgstr "ASN" -#: circuits/filtersets.py:95 circuits/filtersets.py:122 -#: circuits/filtersets.py:156 circuits/filtersets.py:283 -#: circuits/filtersets.py:325 ipam/filtersets.py:243 +#: 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 msgid "Provider (ID)" msgstr "Dostawca (ID)" -#: circuits/filtersets.py:101 circuits/filtersets.py:128 -#: circuits/filtersets.py:162 circuits/filtersets.py:289 -#: circuits/filtersets.py:331 ipam/filtersets.py:249 +#: 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 msgid "Provider (slug)" msgstr "Dostawca (identyfikator)" -#: circuits/filtersets.py:167 +#: netbox/circuits/filtersets.py:167 msgid "Provider account (ID)" msgstr "Konto dostawcy (ID)" -#: circuits/filtersets.py:173 +#: netbox/circuits/filtersets.py:173 msgid "Provider account (account)" msgstr "Konto dostawcy (konto)" -#: circuits/filtersets.py:178 +#: netbox/circuits/filtersets.py:178 msgid "Provider network (ID)" msgstr "Sieć dostawcy (ID)" -#: circuits/filtersets.py:182 +#: netbox/circuits/filtersets.py:182 msgid "Circuit type (ID)" msgstr "Typ obwodu (ID)" -#: circuits/filtersets.py:188 +#: netbox/circuits/filtersets.py:188 msgid "Circuit type (slug)" msgstr "Typ obwodu (identyfikator)" -#: circuits/filtersets.py:223 circuits/filtersets.py:268 -#: dcim/filtersets.py:236 dcim/filtersets.py:357 dcim/filtersets.py:452 -#: dcim/filtersets.py:1045 dcim/filtersets.py:1393 dcim/filtersets.py:1928 -#: dcim/filtersets.py:2170 dcim/filtersets.py:2229 ipam/filtersets.py:232 -#: ipam/filtersets.py:363 ipam/filtersets.py:983 -#: virtualization/filtersets.py:69 virtualization/filtersets.py:197 -#: vpn/filtersets.py:368 +#: 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:232 netbox/ipam/filtersets.py:363 +#: netbox/ipam/filtersets.py:983 netbox/virtualization/filtersets.py:69 +#: netbox/virtualization/filtersets.py:197 netbox/vpn/filtersets.py:368 msgid "Site (ID)" msgstr "Teren (ID)" -#: circuits/filtersets.py:233 circuits/filtersets.py:237 +#: netbox/circuits/filtersets.py:233 netbox/circuits/filtersets.py:237 msgid "Termination A (ID)" msgstr "Wypowiedzenie A (ID)" -#: circuits/filtersets.py:260 circuits/filtersets.py:320 core/filtersets.py:77 -#: core/filtersets.py:136 core/filtersets.py:173 dcim/filtersets.py:751 -#: dcim/filtersets.py:1362 dcim/filtersets.py:2277 extras/filtersets.py:41 -#: extras/filtersets.py:63 extras/filtersets.py:92 extras/filtersets.py:132 -#: extras/filtersets.py:181 extras/filtersets.py:209 extras/filtersets.py:239 -#: extras/filtersets.py:276 extras/filtersets.py:348 extras/filtersets.py:391 -#: extras/filtersets.py:438 extras/filtersets.py:498 extras/filtersets.py:657 -#: extras/filtersets.py:703 ipam/forms/model_forms.py:449 -#: netbox/filtersets.py:282 netbox/forms/__init__.py:22 -#: netbox/forms/base.py:167 templates/htmx/object_selector.html:28 -#: templates/inc/filter_list.html:46 templates/ipam/ipaddress_assign.html:29 -#: templates/search.html:7 templates/search.html:26 tenancy/filtersets.py:99 -#: users/filtersets.py:23 users/filtersets.py:57 users/filtersets.py:102 -#: users/filtersets.py:150 utilities/forms/forms.py:104 -#: utilities/templates/navigation/menu.html:16 +#: 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/templates/htmx/object_selector.html:28 +#: netbox/templates/inc/filter_list.html:46 +#: netbox/templates/ipam/ipaddress_assign.html:29 +#: netbox/templates/search.html:7 netbox/templates/search.html:26 +#: netbox/tenancy/filtersets.py:99 netbox/users/filtersets.py:23 +#: netbox/users/filtersets.py:57 netbox/users/filtersets.py:102 +#: netbox/users/filtersets.py:150 netbox/utilities/forms/forms.py:104 +#: netbox/utilities/templates/navigation/menu.html:16 msgid "Search" msgstr "Szukaj" -#: circuits/filtersets.py:264 circuits/forms/bulk_edit.py:172 -#: circuits/forms/bulk_edit.py:246 circuits/forms/bulk_import.py:115 -#: circuits/forms/filtersets.py:198 circuits/forms/filtersets.py:214 -#: circuits/forms/filtersets.py:260 circuits/forms/model_forms.py:111 -#: circuits/forms/model_forms.py:133 circuits/forms/model_forms.py:199 -#: circuits/tables/circuits.py:104 circuits/tables/circuits.py:164 -#: dcim/forms/connections.py:73 templates/circuits/circuit.html:15 -#: templates/circuits/circuitgroupassignment.html:26 -#: templates/circuits/circuittermination.html:19 -#: templates/dcim/inc/cable_termination.html:55 -#: templates/dcim/trace/circuit.html:4 +#: 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/templates/circuits/circuit.html:15 +#: netbox/templates/circuits/circuitgroupassignment.html:26 +#: 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" -#: circuits/filtersets.py:278 +#: netbox/circuits/filtersets.py:278 msgid "ProviderNetwork (ID)" msgstr "Sieć dostawcy (ID)" -#: circuits/filtersets.py:335 +#: netbox/circuits/filtersets.py:335 msgid "Circuit (ID)" msgstr "Obwód (ID)" -#: circuits/filtersets.py:341 +#: netbox/circuits/filtersets.py:341 msgid "Circuit (CID)" msgstr "Obwód (CID)" -#: circuits/filtersets.py:345 +#: netbox/circuits/filtersets.py:345 msgid "Circuit group (ID)" msgstr "Grupa obwodów (ID)" -#: circuits/filtersets.py:351 +#: netbox/circuits/filtersets.py:351 msgid "Circuit group (slug)" msgstr "Grupa obwodów (identyfikator)" -#: circuits/forms/bulk_edit.py:30 circuits/forms/filtersets.py:56 -#: circuits/forms/model_forms.py:29 circuits/tables/providers.py:33 -#: dcim/forms/bulk_edit.py:128 dcim/forms/filtersets.py:195 -#: dcim/forms/model_forms.py:123 dcim/tables/sites.py:94 -#: ipam/models/asns.py:126 ipam/tables/asn.py:27 ipam/views.py:213 -#: netbox/navigation/menu.py:172 netbox/navigation/menu.py:175 -#: templates/circuits/provider.html:23 +#: 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/templates/circuits/provider.html:23 msgid "ASNs" msgstr "ASN" -#: circuits/forms/bulk_edit.py:34 circuits/forms/bulk_edit.py:56 -#: circuits/forms/bulk_edit.py:83 circuits/forms/bulk_edit.py:104 -#: circuits/forms/bulk_edit.py:164 circuits/forms/bulk_edit.py:183 -#: circuits/forms/bulk_edit.py:228 core/forms/bulk_edit.py:28 -#: dcim/forms/bulk_create.py:35 dcim/forms/bulk_edit.py:73 -#: dcim/forms/bulk_edit.py:92 dcim/forms/bulk_edit.py:151 -#: dcim/forms/bulk_edit.py:192 dcim/forms/bulk_edit.py:210 -#: dcim/forms/bulk_edit.py:288 dcim/forms/bulk_edit.py:432 -#: dcim/forms/bulk_edit.py:466 dcim/forms/bulk_edit.py:481 -#: dcim/forms/bulk_edit.py:540 dcim/forms/bulk_edit.py:584 -#: dcim/forms/bulk_edit.py:618 dcim/forms/bulk_edit.py:642 -#: dcim/forms/bulk_edit.py:715 dcim/forms/bulk_edit.py:767 -#: dcim/forms/bulk_edit.py:819 dcim/forms/bulk_edit.py:842 -#: dcim/forms/bulk_edit.py:890 dcim/forms/bulk_edit.py:960 -#: dcim/forms/bulk_edit.py:1013 dcim/forms/bulk_edit.py:1048 -#: dcim/forms/bulk_edit.py:1088 dcim/forms/bulk_edit.py:1132 -#: dcim/forms/bulk_edit.py:1177 dcim/forms/bulk_edit.py:1204 -#: dcim/forms/bulk_edit.py:1222 dcim/forms/bulk_edit.py:1240 -#: dcim/forms/bulk_edit.py:1258 dcim/forms/bulk_edit.py:1682 -#: extras/forms/bulk_edit.py:39 extras/forms/bulk_edit.py:149 -#: extras/forms/bulk_edit.py:178 extras/forms/bulk_edit.py:208 -#: extras/forms/bulk_edit.py:256 extras/forms/bulk_edit.py:274 -#: extras/forms/bulk_edit.py:298 extras/forms/bulk_edit.py:312 -#: extras/forms/bulk_edit.py:339 extras/tables/tables.py:79 -#: ipam/forms/bulk_edit.py:53 ipam/forms/bulk_edit.py:73 -#: ipam/forms/bulk_edit.py:93 ipam/forms/bulk_edit.py:117 -#: ipam/forms/bulk_edit.py:146 ipam/forms/bulk_edit.py:175 -#: ipam/forms/bulk_edit.py:194 ipam/forms/bulk_edit.py:276 -#: ipam/forms/bulk_edit.py:321 ipam/forms/bulk_edit.py:369 -#: ipam/forms/bulk_edit.py:412 ipam/forms/bulk_edit.py:428 -#: ipam/forms/bulk_edit.py:516 ipam/forms/bulk_edit.py:547 -#: templates/account/token.html:35 templates/circuits/circuit.html:59 -#: templates/circuits/circuitgroup.html:32 -#: templates/circuits/circuittype.html:26 -#: templates/circuits/inc/circuit_termination_fields.html:88 -#: templates/circuits/provider.html:33 -#: templates/circuits/providernetwork.html:32 -#: templates/core/datasource.html:54 templates/core/plugin.html:80 -#: templates/dcim/cable.html:36 templates/dcim/consoleport.html:44 -#: templates/dcim/consoleserverport.html:44 templates/dcim/device.html:94 -#: templates/dcim/devicebay.html:32 templates/dcim/devicerole.html:30 -#: templates/dcim/devicetype.html:33 templates/dcim/frontport.html:58 -#: templates/dcim/interface.html:69 templates/dcim/inventoryitem.html:60 -#: templates/dcim/inventoryitemrole.html:22 templates/dcim/location.html:33 -#: templates/dcim/manufacturer.html:40 templates/dcim/module.html:73 -#: templates/dcim/modulebay.html:42 templates/dcim/moduletype.html:37 -#: templates/dcim/platform.html:33 templates/dcim/powerfeed.html:40 -#: templates/dcim/poweroutlet.html:40 templates/dcim/powerpanel.html:30 -#: templates/dcim/powerport.html:40 templates/dcim/rack.html:53 -#: templates/dcim/rackreservation.html:62 templates/dcim/rackrole.html:26 -#: templates/dcim/racktype.html:24 templates/dcim/rearport.html:54 -#: templates/dcim/region.html:33 templates/dcim/site.html:60 -#: templates/dcim/sitegroup.html:33 templates/dcim/virtualchassis.html:31 -#: templates/extras/configcontext.html:21 -#: templates/extras/configtemplate.html:17 -#: templates/extras/customfield.html:34 -#: templates/extras/dashboard/widget_add.html:14 -#: templates/extras/eventrule.html:21 templates/extras/exporttemplate.html:19 -#: templates/extras/notificationgroup.html:20 -#: templates/extras/savedfilter.html:17 templates/extras/script_list.html:45 -#: templates/extras/tag.html:20 templates/extras/webhook.html:17 -#: templates/generic/bulk_import.html:120 templates/ipam/aggregate.html:43 -#: templates/ipam/asn.html:42 templates/ipam/asnrange.html:38 -#: templates/ipam/fhrpgroup.html:34 templates/ipam/ipaddress.html:55 -#: templates/ipam/iprange.html:67 templates/ipam/prefix.html:81 -#: templates/ipam/rir.html:26 templates/ipam/role.html:26 -#: templates/ipam/routetarget.html:21 templates/ipam/service.html:50 -#: templates/ipam/servicetemplate.html:27 templates/ipam/vlan.html:62 -#: templates/ipam/vlangroup.html:34 templates/ipam/vrf.html:33 -#: templates/tenancy/contact.html:67 templates/tenancy/contactgroup.html:25 -#: templates/tenancy/contactrole.html:22 templates/tenancy/tenant.html:24 -#: templates/tenancy/tenantgroup.html:33 templates/users/group.html:21 -#: templates/users/objectpermission.html:21 templates/users/token.html:27 -#: templates/virtualization/cluster.html:25 -#: templates/virtualization/clustergroup.html:26 -#: templates/virtualization/clustertype.html:26 -#: templates/virtualization/virtualdisk.html:39 -#: templates/virtualization/virtualmachine.html:31 -#: templates/virtualization/vminterface.html:51 -#: templates/vpn/ikepolicy.html:17 templates/vpn/ikeproposal.html:17 -#: templates/vpn/ipsecpolicy.html:17 templates/vpn/ipsecprofile.html:17 -#: templates/vpn/ipsecprofile.html:40 templates/vpn/ipsecprofile.html:73 -#: templates/vpn/ipsecproposal.html:17 templates/vpn/l2vpn.html:26 -#: templates/vpn/tunnel.html:33 templates/vpn/tunnelgroup.html:30 -#: templates/wireless/wirelesslan.html:26 -#: templates/wireless/wirelesslangroup.html:33 -#: templates/wireless/wirelesslink.html:34 tenancy/forms/bulk_edit.py:32 -#: tenancy/forms/bulk_edit.py:80 tenancy/forms/bulk_edit.py:122 -#: users/forms/bulk_edit.py:64 users/forms/bulk_edit.py:82 -#: users/forms/bulk_edit.py:112 virtualization/forms/bulk_edit.py:32 -#: virtualization/forms/bulk_edit.py:46 virtualization/forms/bulk_edit.py:100 -#: virtualization/forms/bulk_edit.py:177 virtualization/forms/bulk_edit.py:228 -#: virtualization/forms/bulk_edit.py:337 vpn/forms/bulk_edit.py:28 -#: vpn/forms/bulk_edit.py:64 vpn/forms/bulk_edit.py:121 -#: vpn/forms/bulk_edit.py:155 vpn/forms/bulk_edit.py:190 -#: vpn/forms/bulk_edit.py:215 vpn/forms/bulk_edit.py:247 -#: vpn/forms/bulk_edit.py:274 wireless/forms/bulk_edit.py:29 -#: wireless/forms/bulk_edit.py:82 wireless/forms/bulk_edit.py:140 +#: 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/templates/account/token.html:35 +#: netbox/templates/circuits/circuit.html:59 +#: netbox/templates/circuits/circuitgroup.html:32 +#: netbox/templates/circuits/circuittype.html:26 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:88 +#: netbox/templates/circuits/provider.html:33 +#: netbox/templates/circuits/providernetwork.html:32 +#: netbox/templates/core/datasource.html:54 +#: netbox/templates/core/plugin.html:80 netbox/templates/dcim/cable.html:36 +#: netbox/templates/dcim/consoleport.html:44 +#: netbox/templates/dcim/consoleserverport.html:44 +#: netbox/templates/dcim/device.html:94 +#: netbox/templates/dcim/devicebay.html:32 +#: netbox/templates/dcim/devicerole.html:30 +#: netbox/templates/dcim/devicetype.html:33 +#: netbox/templates/dcim/frontport.html:58 +#: netbox/templates/dcim/interface.html:69 +#: netbox/templates/dcim/inventoryitem.html:60 +#: netbox/templates/dcim/inventoryitemrole.html:22 +#: netbox/templates/dcim/location.html:33 +#: netbox/templates/dcim/manufacturer.html:40 +#: netbox/templates/dcim/module.html:73 +#: netbox/templates/dcim/modulebay.html:42 +#: netbox/templates/dcim/moduletype.html:37 +#: netbox/templates/dcim/platform.html:33 +#: netbox/templates/dcim/powerfeed.html:40 +#: netbox/templates/dcim/poweroutlet.html:40 +#: netbox/templates/dcim/powerpanel.html:30 +#: netbox/templates/dcim/powerport.html:40 netbox/templates/dcim/rack.html:53 +#: netbox/templates/dcim/rackreservation.html:62 +#: netbox/templates/dcim/rackrole.html:26 +#: netbox/templates/dcim/racktype.html:24 +#: netbox/templates/dcim/rearport.html:54 netbox/templates/dcim/region.html:33 +#: netbox/templates/dcim/site.html:60 netbox/templates/dcim/sitegroup.html:33 +#: netbox/templates/dcim/virtualchassis.html:31 +#: netbox/templates/extras/configcontext.html:21 +#: netbox/templates/extras/configtemplate.html:17 +#: netbox/templates/extras/customfield.html:34 +#: netbox/templates/extras/dashboard/widget_add.html:14 +#: netbox/templates/extras/eventrule.html:21 +#: netbox/templates/extras/exporttemplate.html:19 +#: netbox/templates/extras/notificationgroup.html:20 +#: netbox/templates/extras/savedfilter.html:17 +#: netbox/templates/extras/script_list.html:46 +#: netbox/templates/extras/tag.html:20 netbox/templates/extras/webhook.html:17 +#: netbox/templates/generic/bulk_import.html:120 +#: netbox/templates/ipam/aggregate.html:43 netbox/templates/ipam/asn.html:42 +#: netbox/templates/ipam/asnrange.html:38 +#: netbox/templates/ipam/fhrpgroup.html:34 +#: netbox/templates/ipam/ipaddress.html:55 +#: netbox/templates/ipam/iprange.html:67 netbox/templates/ipam/prefix.html:81 +#: netbox/templates/ipam/rir.html:26 netbox/templates/ipam/role.html:26 +#: netbox/templates/ipam/routetarget.html:21 +#: netbox/templates/ipam/service.html:50 +#: netbox/templates/ipam/servicetemplate.html:27 +#: netbox/templates/ipam/vlan.html:62 netbox/templates/ipam/vlangroup.html:34 +#: netbox/templates/ipam/vrf.html:33 netbox/templates/tenancy/contact.html:67 +#: netbox/templates/tenancy/contactgroup.html:25 +#: netbox/templates/tenancy/contactrole.html:22 +#: netbox/templates/tenancy/tenant.html:24 +#: netbox/templates/tenancy/tenantgroup.html:33 +#: netbox/templates/users/group.html:21 +#: netbox/templates/users/objectpermission.html:21 +#: netbox/templates/users/token.html:27 +#: netbox/templates/virtualization/cluster.html:25 +#: netbox/templates/virtualization/clustergroup.html:26 +#: netbox/templates/virtualization/clustertype.html:26 +#: netbox/templates/virtualization/virtualdisk.html:39 +#: netbox/templates/virtualization/virtualmachine.html:31 +#: netbox/templates/virtualization/vminterface.html:51 +#: netbox/templates/vpn/ikepolicy.html:17 +#: netbox/templates/vpn/ikeproposal.html:17 +#: netbox/templates/vpn/ipsecpolicy.html:17 +#: netbox/templates/vpn/ipsecprofile.html:17 +#: netbox/templates/vpn/ipsecprofile.html:40 +#: netbox/templates/vpn/ipsecprofile.html:73 +#: netbox/templates/vpn/ipsecproposal.html:17 +#: netbox/templates/vpn/l2vpn.html:26 netbox/templates/vpn/tunnel.html:33 +#: netbox/templates/vpn/tunnelgroup.html:30 +#: netbox/templates/wireless/wirelesslan.html:26 +#: netbox/templates/wireless/wirelesslangroup.html:33 +#: netbox/templates/wireless/wirelesslink.html:34 +#: netbox/tenancy/forms/bulk_edit.py:32 netbox/tenancy/forms/bulk_edit.py:80 +#: netbox/tenancy/forms/bulk_edit.py:122 netbox/users/forms/bulk_edit.py:64 +#: netbox/users/forms/bulk_edit.py:82 netbox/users/forms/bulk_edit.py:112 +#: netbox/virtualization/forms/bulk_edit.py:32 +#: netbox/virtualization/forms/bulk_edit.py:46 +#: netbox/virtualization/forms/bulk_edit.py:100 +#: netbox/virtualization/forms/bulk_edit.py:177 +#: netbox/virtualization/forms/bulk_edit.py:228 +#: netbox/virtualization/forms/bulk_edit.py:337 +#: netbox/vpn/forms/bulk_edit.py:28 netbox/vpn/forms/bulk_edit.py:64 +#: netbox/vpn/forms/bulk_edit.py:121 netbox/vpn/forms/bulk_edit.py:155 +#: netbox/vpn/forms/bulk_edit.py:190 netbox/vpn/forms/bulk_edit.py:215 +#: netbox/vpn/forms/bulk_edit.py:247 netbox/vpn/forms/bulk_edit.py:274 +#: netbox/wireless/forms/bulk_edit.py:29 netbox/wireless/forms/bulk_edit.py:82 +#: netbox/wireless/forms/bulk_edit.py:140 msgid "Description" msgstr "Opis" -#: circuits/forms/bulk_edit.py:51 circuits/forms/bulk_edit.py:73 -#: circuits/forms/bulk_edit.py:123 circuits/forms/bulk_import.py:36 -#: circuits/forms/bulk_import.py:51 circuits/forms/bulk_import.py:74 -#: circuits/forms/filtersets.py:70 circuits/forms/filtersets.py:88 -#: circuits/forms/filtersets.py:116 circuits/forms/filtersets.py:131 -#: circuits/forms/filtersets.py:199 circuits/forms/filtersets.py:232 -#: circuits/forms/filtersets.py:255 circuits/forms/model_forms.py:47 -#: circuits/forms/model_forms.py:61 circuits/forms/model_forms.py:93 -#: circuits/tables/circuits.py:58 circuits/tables/circuits.py:108 -#: circuits/tables/circuits.py:160 circuits/tables/providers.py:72 -#: circuits/tables/providers.py:103 templates/circuits/circuit.html:18 -#: templates/circuits/circuittermination.html:25 -#: templates/circuits/provider.html:20 -#: templates/circuits/provideraccount.html:20 -#: templates/circuits/providernetwork.html:20 -#: templates/dcim/inc/cable_termination.html:51 +#: netbox/circuits/forms/bulk_edit.py: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/templates/circuits/circuit.html:18 +#: netbox/templates/circuits/circuittermination.html:25 +#: netbox/templates/circuits/provider.html:20 +#: netbox/templates/circuits/provideraccount.html:20 +#: netbox/templates/circuits/providernetwork.html:20 +#: netbox/templates/dcim/inc/cable_termination.html:51 msgid "Provider" msgstr "Dostawca" -#: circuits/forms/bulk_edit.py:80 circuits/forms/filtersets.py:91 -#: templates/circuits/providernetwork.html:28 +#: netbox/circuits/forms/bulk_edit.py:80 +#: netbox/circuits/forms/filtersets.py:91 +#: netbox/templates/circuits/providernetwork.html:28 msgid "Service ID" msgstr "Identyfikator usługi" -#: circuits/forms/bulk_edit.py:100 circuits/forms/filtersets.py:107 -#: dcim/forms/bulk_edit.py:206 dcim/forms/bulk_edit.py:604 -#: dcim/forms/bulk_edit.py:804 dcim/forms/bulk_edit.py:1173 -#: dcim/forms/bulk_edit.py:1200 dcim/forms/bulk_edit.py:1678 -#: dcim/forms/filtersets.py:1064 dcim/forms/filtersets.py:1455 -#: dcim/forms/filtersets.py:1479 dcim/tables/devices.py:704 -#: dcim/tables/devices.py:761 dcim/tables/devices.py:1003 -#: dcim/tables/devicetypes.py:249 dcim/tables/devicetypes.py:264 -#: dcim/tables/racks.py:33 extras/forms/bulk_edit.py:270 -#: extras/tables/tables.py:443 templates/circuits/circuittype.html:30 -#: templates/dcim/cable.html:40 templates/dcim/devicerole.html:34 -#: templates/dcim/frontport.html:40 templates/dcim/inventoryitemrole.html:26 -#: templates/dcim/rackrole.html:30 templates/dcim/rearport.html:40 -#: templates/extras/tag.html:26 +#: netbox/circuits/forms/bulk_edit.py: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/templates/circuits/circuittype.html:30 +#: netbox/templates/dcim/cable.html:40 +#: netbox/templates/dcim/devicerole.html:34 +#: netbox/templates/dcim/frontport.html:40 +#: netbox/templates/dcim/inventoryitemrole.html:26 +#: netbox/templates/dcim/rackrole.html:30 +#: netbox/templates/dcim/rearport.html:40 netbox/templates/extras/tag.html:26 msgid "Color" msgstr "Kolor" -#: circuits/forms/bulk_edit.py:118 circuits/forms/bulk_import.py:87 -#: circuits/forms/filtersets.py:126 core/forms/bulk_edit.py:18 -#: core/forms/filtersets.py:33 core/tables/change_logging.py:32 -#: core/tables/data.py:20 core/tables/jobs.py:18 dcim/forms/bulk_edit.py:782 -#: dcim/forms/bulk_edit.py:921 dcim/forms/bulk_edit.py:989 -#: dcim/forms/bulk_edit.py:1008 dcim/forms/bulk_edit.py:1031 -#: dcim/forms/bulk_edit.py:1073 dcim/forms/bulk_edit.py:1117 -#: dcim/forms/bulk_edit.py:1168 dcim/forms/bulk_edit.py:1195 -#: dcim/forms/bulk_import.py:188 dcim/forms/bulk_import.py:260 -#: dcim/forms/bulk_import.py:708 dcim/forms/bulk_import.py:734 -#: dcim/forms/bulk_import.py:760 dcim/forms/bulk_import.py:780 -#: dcim/forms/bulk_import.py:863 dcim/forms/bulk_import.py:957 -#: dcim/forms/bulk_import.py:999 dcim/forms/bulk_import.py:1213 -#: dcim/forms/bulk_import.py:1376 dcim/forms/filtersets.py:955 -#: dcim/forms/filtersets.py:1054 dcim/forms/filtersets.py:1175 -#: dcim/forms/filtersets.py:1247 dcim/forms/filtersets.py:1272 -#: dcim/forms/filtersets.py:1296 dcim/forms/filtersets.py:1316 -#: dcim/forms/filtersets.py:1353 dcim/forms/filtersets.py:1450 -#: dcim/forms/filtersets.py:1474 dcim/forms/model_forms.py:703 -#: dcim/forms/model_forms.py:709 dcim/forms/object_import.py:84 -#: dcim/forms/object_import.py:113 dcim/forms/object_import.py:145 -#: dcim/tables/devices.py:178 dcim/tables/devices.py:814 -#: dcim/tables/power.py:77 dcim/tables/racks.py:138 -#: extras/forms/bulk_import.py:42 extras/tables/tables.py:405 -#: extras/tables/tables.py:465 netbox/tables/tables.py:240 -#: templates/circuits/circuit.html:30 templates/core/datasource.html:38 -#: templates/dcim/cable.html:15 templates/dcim/consoleport.html:36 -#: templates/dcim/consoleserverport.html:36 templates/dcim/frontport.html:36 -#: templates/dcim/interface.html:46 templates/dcim/interface.html:169 -#: templates/dcim/interface.html:311 templates/dcim/powerfeed.html:32 -#: templates/dcim/poweroutlet.html:36 templates/dcim/powerport.html:36 -#: templates/dcim/rearport.html:36 templates/extras/eventrule.html:74 -#: templates/virtualization/cluster.html:17 templates/vpn/l2vpn.html:22 -#: templates/wireless/inc/authentication_attrs.html:8 -#: templates/wireless/inc/wirelesslink_interface.html:14 -#: virtualization/forms/bulk_edit.py:60 virtualization/forms/bulk_import.py:41 -#: virtualization/forms/filtersets.py:54 -#: virtualization/forms/model_forms.py:62 virtualization/tables/clusters.py:66 -#: vpn/forms/bulk_edit.py:264 vpn/forms/bulk_import.py:264 -#: vpn/forms/filtersets.py:217 vpn/forms/model_forms.py:84 -#: vpn/forms/model_forms.py:119 vpn/forms/model_forms.py:231 +#: netbox/circuits/forms/bulk_edit.py: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/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/core/datasource.html:38 +#: netbox/templates/dcim/cable.html:15 +#: netbox/templates/dcim/consoleport.html:36 +#: netbox/templates/dcim/consoleserverport.html:36 +#: netbox/templates/dcim/frontport.html:36 +#: netbox/templates/dcim/interface.html:46 +#: netbox/templates/dcim/interface.html:169 +#: netbox/templates/dcim/interface.html:311 +#: netbox/templates/dcim/powerfeed.html:32 +#: netbox/templates/dcim/poweroutlet.html:36 +#: netbox/templates/dcim/powerport.html:36 +#: netbox/templates/dcim/rearport.html:36 +#: netbox/templates/extras/eventrule.html:74 +#: netbox/templates/virtualization/cluster.html:17 +#: netbox/templates/vpn/l2vpn.html:22 +#: netbox/templates/wireless/inc/authentication_attrs.html:8 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:14 +#: netbox/virtualization/forms/bulk_edit.py:60 +#: netbox/virtualization/forms/bulk_import.py:41 +#: netbox/virtualization/forms/filtersets.py:54 +#: netbox/virtualization/forms/model_forms.py:62 +#: netbox/virtualization/tables/clusters.py:66 +#: netbox/vpn/forms/bulk_edit.py:264 netbox/vpn/forms/bulk_import.py:264 +#: netbox/vpn/forms/filtersets.py:217 netbox/vpn/forms/model_forms.py:84 +#: netbox/vpn/forms/model_forms.py:119 netbox/vpn/forms/model_forms.py:231 msgid "Type" msgstr "Typ" -#: circuits/forms/bulk_edit.py:128 circuits/forms/bulk_import.py:80 -#: circuits/forms/filtersets.py:139 circuits/forms/model_forms.py:98 +#: 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 msgid "Provider account" msgstr "Konto dostawcy" -#: circuits/forms/bulk_edit.py:136 circuits/forms/bulk_import.py:93 -#: circuits/forms/filtersets.py:150 core/forms/filtersets.py:38 -#: core/forms/filtersets.py:79 core/tables/data.py:23 core/tables/jobs.py:26 -#: core/tables/tasks.py:88 dcim/forms/bulk_edit.py:106 -#: dcim/forms/bulk_edit.py:181 dcim/forms/bulk_edit.py:351 -#: dcim/forms/bulk_edit.py:700 dcim/forms/bulk_edit.py:756 -#: dcim/forms/bulk_edit.py:788 dcim/forms/bulk_edit.py:915 -#: dcim/forms/bulk_edit.py:1701 dcim/forms/bulk_import.py:88 -#: dcim/forms/bulk_import.py:147 dcim/forms/bulk_import.py:248 -#: dcim/forms/bulk_import.py:505 dcim/forms/bulk_import.py:659 -#: dcim/forms/bulk_import.py:1207 dcim/forms/bulk_import.py:1371 -#: dcim/forms/bulk_import.py:1435 dcim/forms/filtersets.py:178 -#: dcim/forms/filtersets.py:237 dcim/forms/filtersets.py:359 -#: dcim/forms/filtersets.py:799 dcim/forms/filtersets.py:924 -#: dcim/forms/filtersets.py:958 dcim/forms/filtersets.py:1059 -#: dcim/forms/filtersets.py:1170 dcim/tables/devices.py:140 -#: dcim/tables/devices.py:817 dcim/tables/devices.py:1063 -#: dcim/tables/modules.py:69 dcim/tables/power.py:74 dcim/tables/racks.py:126 -#: dcim/tables/sites.py:82 dcim/tables/sites.py:138 -#: ipam/forms/bulk_edit.py:256 ipam/forms/bulk_edit.py:306 -#: ipam/forms/bulk_edit.py:354 ipam/forms/bulk_edit.py:506 -#: ipam/forms/bulk_import.py:192 ipam/forms/bulk_import.py:257 -#: ipam/forms/bulk_import.py:293 ipam/forms/bulk_import.py:450 -#: ipam/forms/filtersets.py:210 ipam/forms/filtersets.py:281 -#: ipam/forms/filtersets.py:355 ipam/forms/filtersets.py:501 -#: ipam/forms/model_forms.py:468 ipam/tables/ip.py:237 ipam/tables/ip.py:312 -#: ipam/tables/ip.py:363 ipam/tables/ip.py:426 ipam/tables/ip.py:453 -#: ipam/tables/vlans.py:126 ipam/tables/vlans.py:232 -#: templates/circuits/circuit.html:34 templates/core/datasource.html:46 -#: templates/core/job.html:48 templates/core/rq_task.html:81 -#: templates/core/system.html:18 templates/dcim/cable.html:19 -#: templates/dcim/device.html:178 templates/dcim/location.html:45 -#: templates/dcim/module.html:69 templates/dcim/powerfeed.html:36 -#: templates/dcim/rack.html:41 templates/dcim/site.html:43 -#: templates/extras/script_list.html:47 templates/ipam/ipaddress.html:37 -#: templates/ipam/iprange.html:54 templates/ipam/prefix.html:73 -#: templates/ipam/vlan.html:48 templates/virtualization/cluster.html:21 -#: templates/virtualization/virtualmachine.html:19 -#: templates/vpn/tunnel.html:25 templates/wireless/wirelesslan.html:22 -#: templates/wireless/wirelesslink.html:17 users/forms/filtersets.py:32 -#: users/forms/model_forms.py:194 virtualization/forms/bulk_edit.py:70 -#: virtualization/forms/bulk_edit.py:118 -#: virtualization/forms/bulk_import.py:54 -#: virtualization/forms/bulk_import.py:80 -#: virtualization/forms/filtersets.py:62 -#: virtualization/forms/filtersets.py:160 virtualization/tables/clusters.py:74 -#: virtualization/tables/virtualmachines.py:60 vpn/forms/bulk_edit.py:39 -#: vpn/forms/bulk_import.py:37 vpn/forms/filtersets.py:47 -#: vpn/tables/tunnels.py:48 wireless/forms/bulk_edit.py:43 -#: wireless/forms/bulk_edit.py:105 wireless/forms/bulk_import.py:43 -#: wireless/forms/bulk_import.py:84 wireless/forms/filtersets.py:49 -#: wireless/forms/filtersets.py:83 wireless/tables/wirelesslan.py:52 -#: wireless/tables/wirelesslink.py:20 +#: 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/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:69 +#: 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/templates/circuits/circuit.html:34 +#: 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/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/vlan.html:48 +#: netbox/templates/virtualization/cluster.html:21 +#: netbox/templates/virtualization/virtualmachine.html:19 +#: netbox/templates/vpn/tunnel.html:25 +#: netbox/templates/wireless/wirelesslan.html:22 +#: netbox/templates/wireless/wirelesslink.html:17 +#: netbox/users/forms/filtersets.py: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/tables/clusters.py:74 +#: netbox/virtualization/tables/virtualmachines.py:60 +#: netbox/vpn/forms/bulk_edit.py:39 netbox/vpn/forms/bulk_import.py:37 +#: netbox/vpn/forms/filtersets.py:47 netbox/vpn/tables/tunnels.py:48 +#: netbox/wireless/forms/bulk_edit.py:43 +#: netbox/wireless/forms/bulk_edit.py:105 +#: netbox/wireless/forms/bulk_import.py:43 +#: netbox/wireless/forms/bulk_import.py:84 +#: netbox/wireless/forms/filtersets.py:49 +#: netbox/wireless/forms/filtersets.py:83 +#: netbox/wireless/tables/wirelesslan.py:52 +#: netbox/wireless/tables/wirelesslink.py:20 msgid "Status" msgstr "Status" -#: circuits/forms/bulk_edit.py:142 circuits/forms/bulk_edit.py:233 -#: circuits/forms/bulk_import.py:98 circuits/forms/bulk_import.py:158 -#: circuits/forms/filtersets.py:119 circuits/forms/filtersets.py:241 -#: dcim/forms/bulk_edit.py:122 dcim/forms/bulk_edit.py:187 -#: dcim/forms/bulk_edit.py:346 dcim/forms/bulk_edit.py:461 -#: dcim/forms/bulk_edit.py:690 dcim/forms/bulk_edit.py:794 -#: dcim/forms/bulk_edit.py:1706 dcim/forms/bulk_import.py:107 -#: dcim/forms/bulk_import.py:152 dcim/forms/bulk_import.py:241 -#: dcim/forms/bulk_import.py:334 dcim/forms/bulk_import.py:479 -#: dcim/forms/bulk_import.py:1219 dcim/forms/bulk_import.py:1428 -#: dcim/forms/filtersets.py:173 dcim/forms/filtersets.py:205 -#: dcim/forms/filtersets.py:323 dcim/forms/filtersets.py:399 -#: dcim/forms/filtersets.py:420 dcim/forms/filtersets.py:722 -#: dcim/forms/filtersets.py:916 dcim/forms/filtersets.py:978 -#: dcim/forms/filtersets.py:1008 dcim/forms/filtersets.py:1130 -#: dcim/tables/power.py:88 extras/filtersets.py:612 -#: extras/forms/filtersets.py:323 extras/forms/filtersets.py:396 -#: ipam/forms/bulk_edit.py:43 ipam/forms/bulk_edit.py:68 -#: ipam/forms/bulk_edit.py:112 ipam/forms/bulk_edit.py:141 -#: ipam/forms/bulk_edit.py:166 ipam/forms/bulk_edit.py:251 -#: ipam/forms/bulk_edit.py:301 ipam/forms/bulk_edit.py:349 -#: ipam/forms/bulk_edit.py:501 ipam/forms/bulk_import.py:38 -#: ipam/forms/bulk_import.py:67 ipam/forms/bulk_import.py:95 -#: ipam/forms/bulk_import.py:115 ipam/forms/bulk_import.py:135 -#: ipam/forms/bulk_import.py:164 ipam/forms/bulk_import.py:250 -#: ipam/forms/bulk_import.py:286 ipam/forms/bulk_import.py:443 -#: ipam/forms/filtersets.py:48 ipam/forms/filtersets.py:68 -#: ipam/forms/filtersets.py:100 ipam/forms/filtersets.py:120 -#: ipam/forms/filtersets.py:143 ipam/forms/filtersets.py:174 -#: ipam/forms/filtersets.py:267 ipam/forms/filtersets.py:310 -#: ipam/forms/filtersets.py:469 ipam/tables/ip.py:456 ipam/tables/vlans.py:229 -#: templates/circuits/circuit.html:38 templates/circuits/circuitgroup.html:36 -#: templates/dcim/cable.html:23 templates/dcim/device.html:79 -#: templates/dcim/location.html:49 templates/dcim/powerfeed.html:44 -#: templates/dcim/rack.html:32 templates/dcim/rackreservation.html:49 -#: templates/dcim/site.html:47 templates/dcim/virtualdevicecontext.html:52 -#: templates/ipam/aggregate.html:30 templates/ipam/asn.html:33 -#: templates/ipam/asnrange.html:29 templates/ipam/ipaddress.html:28 -#: templates/ipam/iprange.html:58 templates/ipam/prefix.html:29 -#: templates/ipam/routetarget.html:17 templates/ipam/vlan.html:39 -#: templates/ipam/vrf.html:20 templates/tenancy/tenant.html:17 -#: templates/virtualization/cluster.html:33 -#: templates/virtualization/virtualmachine.html:39 templates/vpn/l2vpn.html:30 -#: templates/vpn/tunnel.html:49 templates/wireless/wirelesslan.html:34 -#: templates/wireless/wirelesslink.html:25 tenancy/forms/forms.py:25 -#: tenancy/forms/forms.py:48 tenancy/forms/model_forms.py:52 -#: tenancy/tables/columns.py:64 virtualization/forms/bulk_edit.py:76 -#: virtualization/forms/bulk_edit.py:155 -#: virtualization/forms/bulk_import.py:66 -#: virtualization/forms/bulk_import.py:115 -#: virtualization/forms/filtersets.py:47 -#: virtualization/forms/filtersets.py:105 vpn/forms/bulk_edit.py:59 -#: vpn/forms/bulk_edit.py:269 vpn/forms/bulk_import.py:59 -#: vpn/forms/bulk_import.py:258 vpn/forms/filtersets.py:214 -#: wireless/forms/bulk_edit.py:63 wireless/forms/bulk_edit.py:110 -#: wireless/forms/bulk_import.py:55 wireless/forms/bulk_import.py:97 -#: wireless/forms/filtersets.py:35 wireless/forms/filtersets.py:75 +#: netbox/circuits/forms/bulk_edit.py: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/templates/circuits/circuitgroup.html:36 +#: 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 +#: netbox/templates/dcim/rackreservation.html:49 +#: netbox/templates/dcim/site.html:47 +#: netbox/templates/dcim/virtualdevicecontext.html:52 +#: netbox/templates/ipam/aggregate.html:30 netbox/templates/ipam/asn.html:33 +#: netbox/templates/ipam/asnrange.html:29 +#: netbox/templates/ipam/ipaddress.html:28 +#: netbox/templates/ipam/iprange.html:58 netbox/templates/ipam/prefix.html:29 +#: netbox/templates/ipam/routetarget.html:17 +#: netbox/templates/ipam/vlan.html:39 netbox/templates/ipam/vrf.html:20 +#: netbox/templates/tenancy/tenant.html:17 +#: netbox/templates/virtualization/cluster.html:33 +#: netbox/templates/virtualization/virtualmachine.html:39 +#: netbox/templates/vpn/l2vpn.html:30 netbox/templates/vpn/tunnel.html:49 +#: netbox/templates/wireless/wirelesslan.html:34 +#: netbox/templates/wireless/wirelesslink.html:25 +#: netbox/tenancy/forms/forms.py:25 netbox/tenancy/forms/forms.py:48 +#: netbox/tenancy/forms/model_forms.py:52 netbox/tenancy/tables/columns.py:64 +#: netbox/virtualization/forms/bulk_edit.py:76 +#: netbox/virtualization/forms/bulk_edit.py:155 +#: netbox/virtualization/forms/bulk_import.py:66 +#: netbox/virtualization/forms/bulk_import.py:115 +#: netbox/virtualization/forms/filtersets.py:47 +#: netbox/virtualization/forms/filtersets.py:105 +#: netbox/vpn/forms/bulk_edit.py:59 netbox/vpn/forms/bulk_edit.py:269 +#: netbox/vpn/forms/bulk_import.py:59 netbox/vpn/forms/bulk_import.py:258 +#: netbox/vpn/forms/filtersets.py:214 netbox/wireless/forms/bulk_edit.py:63 +#: netbox/wireless/forms/bulk_edit.py:110 +#: netbox/wireless/forms/bulk_import.py:55 +#: netbox/wireless/forms/bulk_import.py:97 +#: netbox/wireless/forms/filtersets.py:35 +#: netbox/wireless/forms/filtersets.py:75 msgid "Tenant" msgstr "Najemca" -#: circuits/forms/bulk_edit.py:147 circuits/forms/filtersets.py:174 +#: netbox/circuits/forms/bulk_edit.py:147 +#: netbox/circuits/forms/filtersets.py:174 msgid "Install date" msgstr "Data instalacji" -#: circuits/forms/bulk_edit.py:152 circuits/forms/filtersets.py:179 +#: netbox/circuits/forms/bulk_edit.py:152 +#: netbox/circuits/forms/filtersets.py:179 msgid "Termination date" msgstr "Data wypowiedzenia" -#: circuits/forms/bulk_edit.py:158 circuits/forms/filtersets.py:186 +#: netbox/circuits/forms/bulk_edit.py:158 +#: netbox/circuits/forms/filtersets.py:186 msgid "Commit rate (Kbps)" msgstr "Szybkość zatwierdzania (Kbps)" -#: circuits/forms/bulk_edit.py:173 circuits/forms/model_forms.py:112 +#: netbox/circuits/forms/bulk_edit.py:173 +#: netbox/circuits/forms/model_forms.py:112 msgid "Service Parameters" msgstr "Parametry serwisowe" -#: circuits/forms/bulk_edit.py:174 circuits/forms/model_forms.py:113 -#: circuits/forms/model_forms.py:183 dcim/forms/model_forms.py:139 -#: dcim/forms/model_forms.py:181 dcim/forms/model_forms.py:266 -#: dcim/forms/model_forms.py:323 dcim/forms/model_forms.py:768 -#: dcim/forms/model_forms.py:1692 ipam/forms/model_forms.py:64 -#: ipam/forms/model_forms.py:81 ipam/forms/model_forms.py:115 -#: ipam/forms/model_forms.py:136 ipam/forms/model_forms.py:160 -#: ipam/forms/model_forms.py:232 ipam/forms/model_forms.py:261 -#: ipam/forms/model_forms.py:316 netbox/navigation/menu.py:24 -#: templates/dcim/device_edit.html:85 templates/dcim/htmx/cable_edit.html:72 -#: templates/ipam/ipaddress_bulk_add.html:27 templates/ipam/vlan_edit.html:22 -#: virtualization/forms/model_forms.py:80 -#: virtualization/forms/model_forms.py:222 vpn/forms/bulk_edit.py:78 -#: vpn/forms/filtersets.py:44 vpn/forms/model_forms.py:62 -#: vpn/forms/model_forms.py:147 vpn/forms/model_forms.py:411 -#: wireless/forms/model_forms.py:54 wireless/forms/model_forms.py:170 +#: 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/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/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 msgid "Tenancy" msgstr "Najem" -#: circuits/forms/bulk_edit.py:193 circuits/forms/bulk_edit.py:217 -#: circuits/forms/model_forms.py:155 circuits/tables/circuits.py:117 -#: templates/circuits/inc/circuit_termination_fields.html:62 -#: templates/circuits/providernetwork.html:17 +#: 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" -#: circuits/forms/bulk_edit.py:199 +#: netbox/circuits/forms/bulk_edit.py:199 msgid "Port speed (Kbps)" msgstr "Prędkość portu (Kbps)" -#: circuits/forms/bulk_edit.py:203 +#: netbox/circuits/forms/bulk_edit.py:203 msgid "Upstream speed (Kbps)" msgstr "Prędkość od klienta do serwera (Kbps)" -#: circuits/forms/bulk_edit.py:206 dcim/forms/bulk_edit.py:951 -#: dcim/forms/bulk_edit.py:1315 dcim/forms/bulk_edit.py:1332 -#: dcim/forms/bulk_edit.py:1349 dcim/forms/bulk_edit.py:1367 -#: dcim/forms/bulk_edit.py:1455 dcim/forms/bulk_edit.py:1594 -#: dcim/forms/bulk_edit.py:1611 +#: 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 msgid "Mark connected" msgstr "Oznacz podłączony" -#: circuits/forms/bulk_edit.py:219 circuits/forms/model_forms.py:157 -#: templates/circuits/inc/circuit_termination_fields.html:54 -#: templates/dcim/frontport.html:121 templates/dcim/interface.html:193 -#: templates/dcim/rearport.html:111 +#: netbox/circuits/forms/bulk_edit.py:219 +#: netbox/circuits/forms/model_forms.py:157 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:54 +#: netbox/templates/dcim/frontport.html:121 +#: netbox/templates/dcim/interface.html:193 +#: netbox/templates/dcim/rearport.html:111 msgid "Circuit Termination" msgstr "Zakończenie obwodu" -#: circuits/forms/bulk_edit.py:221 circuits/forms/model_forms.py:159 +#: netbox/circuits/forms/bulk_edit.py:221 +#: netbox/circuits/forms/model_forms.py:159 msgid "Termination Details" msgstr "Szczegóły wypowiedzenia" -#: circuits/forms/bulk_edit.py:251 circuits/forms/filtersets.py:268 -#: circuits/tables/circuits.py:168 dcim/forms/model_forms.py:551 -#: templates/circuits/circuitgroupassignment.html:30 -#: templates/dcim/device.html:133 templates/dcim/virtualchassis.html:68 -#: templates/dcim/virtualchassis_edit.html:56 -#: templates/ipam/inc/panels/fhrp_groups.html:26 -#: tenancy/forms/bulk_edit.py:147 tenancy/forms/filtersets.py:110 +#: netbox/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/templates/dcim/device.html:133 +#: netbox/templates/dcim/virtualchassis.html:68 +#: netbox/templates/dcim/virtualchassis_edit.html:56 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:26 +#: netbox/tenancy/forms/bulk_edit.py:147 +#: netbox/tenancy/forms/filtersets.py:110 msgid "Priority" msgstr "Priorytet" -#: circuits/forms/bulk_import.py:39 circuits/forms/bulk_import.py:54 -#: circuits/forms/bulk_import.py:77 +#: 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" -#: circuits/forms/bulk_import.py:83 +#: netbox/circuits/forms/bulk_import.py:83 msgid "Assigned provider account" msgstr "Przydzielone konto dostawcy" -#: circuits/forms/bulk_import.py:90 +#: netbox/circuits/forms/bulk_import.py:90 msgid "Type of circuit" msgstr "Rodzaj obwodu" -#: circuits/forms/bulk_import.py:95 dcim/forms/bulk_import.py:90 -#: dcim/forms/bulk_import.py:149 dcim/forms/bulk_import.py:250 -#: dcim/forms/bulk_import.py:507 dcim/forms/bulk_import.py:661 -#: dcim/forms/bulk_import.py:1373 ipam/forms/bulk_import.py:194 -#: ipam/forms/bulk_import.py:259 ipam/forms/bulk_import.py:295 -#: ipam/forms/bulk_import.py:452 virtualization/forms/bulk_import.py:56 -#: virtualization/forms/bulk_import.py:82 vpn/forms/bulk_import.py:39 -#: wireless/forms/bulk_import.py:45 +#: netbox/circuits/forms/bulk_import.py: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" -#: circuits/forms/bulk_import.py:102 circuits/forms/bulk_import.py:162 -#: dcim/forms/bulk_import.py:111 dcim/forms/bulk_import.py:156 -#: dcim/forms/bulk_import.py:338 dcim/forms/bulk_import.py:483 -#: dcim/forms/bulk_import.py:1223 dcim/forms/bulk_import.py:1368 -#: dcim/forms/bulk_import.py:1432 ipam/forms/bulk_import.py:42 -#: ipam/forms/bulk_import.py:71 ipam/forms/bulk_import.py:99 -#: ipam/forms/bulk_import.py:119 ipam/forms/bulk_import.py:139 -#: ipam/forms/bulk_import.py:168 ipam/forms/bulk_import.py:254 -#: ipam/forms/bulk_import.py:290 ipam/forms/bulk_import.py:447 -#: virtualization/forms/bulk_import.py:70 -#: virtualization/forms/bulk_import.py:119 vpn/forms/bulk_import.py:63 -#: wireless/forms/bulk_import.py:59 wireless/forms/bulk_import.py:101 +#: netbox/circuits/forms/bulk_import.py: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" -#: circuits/forms/bulk_import.py:120 -#: templates/circuits/inc/circuit_termination.html:6 -#: templates/circuits/inc/circuit_termination_fields.html:15 -#: templates/dcim/cable.html:68 templates/dcim/cable.html:72 -#: vpn/forms/bulk_import.py:100 vpn/forms/filtersets.py:77 +#: netbox/circuits/forms/bulk_import.py: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" -#: circuits/forms/bulk_import.py:130 circuits/forms/filtersets.py:147 -#: circuits/forms/filtersets.py:227 circuits/forms/model_forms.py:144 +#: 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 msgid "Provider network" msgstr "Sieć dostawców" -#: circuits/forms/filtersets.py:30 circuits/forms/filtersets.py:118 -#: circuits/forms/filtersets.py:200 dcim/forms/bulk_edit.py:338 -#: dcim/forms/bulk_edit.py:441 dcim/forms/bulk_edit.py:682 -#: dcim/forms/bulk_edit.py:729 dcim/forms/bulk_edit.py:882 -#: dcim/forms/bulk_import.py:235 dcim/forms/bulk_import.py:315 -#: dcim/forms/bulk_import.py:546 dcim/forms/bulk_import.py:1317 -#: dcim/forms/bulk_import.py:1351 dcim/forms/filtersets.py:95 -#: dcim/forms/filtersets.py:322 dcim/forms/filtersets.py:356 -#: dcim/forms/filtersets.py:396 dcim/forms/filtersets.py:447 -#: dcim/forms/filtersets.py:719 dcim/forms/filtersets.py:762 -#: dcim/forms/filtersets.py:977 dcim/forms/filtersets.py:1006 -#: dcim/forms/filtersets.py:1026 dcim/forms/filtersets.py:1090 -#: dcim/forms/filtersets.py:1120 dcim/forms/filtersets.py:1129 -#: dcim/forms/filtersets.py:1240 dcim/forms/filtersets.py:1264 -#: dcim/forms/filtersets.py:1289 dcim/forms/filtersets.py:1308 -#: dcim/forms/filtersets.py:1331 dcim/forms/filtersets.py:1442 -#: dcim/forms/filtersets.py:1466 dcim/forms/filtersets.py:1490 -#: dcim/forms/filtersets.py:1508 dcim/forms/filtersets.py:1525 -#: dcim/forms/model_forms.py:180 dcim/forms/model_forms.py:243 -#: dcim/forms/model_forms.py:468 dcim/forms/model_forms.py:728 -#: dcim/tables/devices.py:157 dcim/tables/power.py:30 dcim/tables/racks.py:118 -#: dcim/tables/racks.py:212 extras/filtersets.py:536 -#: extras/forms/filtersets.py:320 ipam/forms/filtersets.py:173 -#: ipam/forms/filtersets.py:414 ipam/forms/filtersets.py:437 -#: ipam/forms/filtersets.py:467 templates/dcim/device.html:26 -#: templates/dcim/device_edit.html:30 -#: templates/dcim/inc/cable_termination.html:12 -#: templates/dcim/location.html:26 templates/dcim/powerpanel.html:26 -#: templates/dcim/rack.html:24 templates/dcim/rackreservation.html:32 -#: virtualization/forms/filtersets.py:46 -#: virtualization/forms/filtersets.py:100 wireless/forms/model_forms.py:87 -#: wireless/forms/model_forms.py:129 +#: netbox/circuits/forms/filtersets.py: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/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 msgid "Location" msgstr "Lokalizacja" -#: circuits/forms/filtersets.py:32 circuits/forms/filtersets.py:120 -#: dcim/forms/filtersets.py:144 dcim/forms/filtersets.py:158 -#: dcim/forms/filtersets.py:174 dcim/forms/filtersets.py:206 -#: dcim/forms/filtersets.py:328 dcim/forms/filtersets.py:400 -#: dcim/forms/filtersets.py:471 dcim/forms/filtersets.py:723 -#: dcim/forms/filtersets.py:1091 netbox/navigation/menu.py:31 -#: netbox/navigation/menu.py:33 tenancy/forms/filtersets.py:42 -#: tenancy/tables/columns.py:70 tenancy/tables/contacts.py:25 -#: tenancy/views.py:19 virtualization/forms/filtersets.py:37 -#: virtualization/forms/filtersets.py:48 -#: virtualization/forms/filtersets.py:106 +#: netbox/circuits/forms/filtersets.py: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/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/tables/contacts.py:25 netbox/tenancy/views.py:19 +#: netbox/virtualization/forms/filtersets.py:37 +#: netbox/virtualization/forms/filtersets.py:48 +#: netbox/virtualization/forms/filtersets.py:106 msgid "Contacts" msgstr "Łączność" -#: circuits/forms/filtersets.py:37 circuits/forms/filtersets.py:157 -#: dcim/forms/bulk_edit.py:112 dcim/forms/bulk_edit.py:313 -#: dcim/forms/bulk_edit.py:857 dcim/forms/bulk_import.py:93 -#: dcim/forms/filtersets.py:73 dcim/forms/filtersets.py:185 -#: dcim/forms/filtersets.py:211 dcim/forms/filtersets.py:334 -#: dcim/forms/filtersets.py:425 dcim/forms/filtersets.py:739 -#: dcim/forms/filtersets.py:983 dcim/forms/filtersets.py:1013 -#: dcim/forms/filtersets.py:1097 dcim/forms/filtersets.py:1136 -#: dcim/forms/filtersets.py:1576 dcim/forms/filtersets.py:1600 -#: dcim/forms/filtersets.py:1624 dcim/forms/model_forms.py:112 -#: dcim/forms/object_create.py:375 dcim/tables/devices.py:143 -#: dcim/tables/sites.py:85 extras/filtersets.py:503 -#: ipam/forms/bulk_edit.py:208 ipam/forms/bulk_edit.py:474 -#: ipam/forms/filtersets.py:217 ipam/forms/filtersets.py:422 -#: ipam/forms/filtersets.py:475 templates/dcim/device.html:18 -#: templates/dcim/rack.html:16 templates/dcim/rackreservation.html:22 -#: templates/dcim/region.html:26 templates/dcim/site.html:31 -#: templates/ipam/prefix.html:49 templates/ipam/vlan.html:16 -#: virtualization/forms/bulk_edit.py:81 virtualization/forms/filtersets.py:59 -#: virtualization/forms/filtersets.py:133 -#: virtualization/forms/model_forms.py:92 vpn/forms/filtersets.py:257 +#: netbox/circuits/forms/filtersets.py: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/templates/dcim/rackreservation.html:22 +#: netbox/templates/dcim/region.html:26 netbox/templates/dcim/site.html:31 +#: netbox/templates/ipam/prefix.html:49 netbox/templates/ipam/vlan.html:16 +#: netbox/virtualization/forms/bulk_edit.py:81 +#: netbox/virtualization/forms/filtersets.py:59 +#: netbox/virtualization/forms/filtersets.py:133 +#: netbox/virtualization/forms/model_forms.py:92 +#: netbox/vpn/forms/filtersets.py:257 msgid "Region" msgstr "Region" -#: circuits/forms/filtersets.py:42 circuits/forms/filtersets.py:162 -#: dcim/forms/bulk_edit.py:321 dcim/forms/bulk_edit.py:865 -#: dcim/forms/filtersets.py:78 dcim/forms/filtersets.py:190 -#: dcim/forms/filtersets.py:216 dcim/forms/filtersets.py:347 -#: dcim/forms/filtersets.py:430 dcim/forms/filtersets.py:744 -#: dcim/forms/filtersets.py:988 dcim/forms/filtersets.py:1102 -#: dcim/forms/filtersets.py:1141 dcim/forms/object_create.py:383 -#: extras/filtersets.py:520 ipam/forms/bulk_edit.py:213 -#: ipam/forms/bulk_edit.py:479 ipam/forms/filtersets.py:222 -#: ipam/forms/filtersets.py:427 ipam/forms/filtersets.py:480 -#: virtualization/forms/bulk_edit.py:86 virtualization/forms/filtersets.py:69 -#: virtualization/forms/filtersets.py:138 -#: virtualization/forms/model_forms.py:98 +#: netbox/circuits/forms/filtersets.py: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/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 msgid "Site group" msgstr "Grupa terenów" -#: circuits/forms/filtersets.py:65 circuits/forms/filtersets.py:83 -#: circuits/forms/filtersets.py:102 circuits/forms/filtersets.py:117 -#: core/forms/filtersets.py:67 core/forms/filtersets.py:135 -#: dcim/forms/bulk_edit.py:828 dcim/forms/filtersets.py:172 -#: dcim/forms/filtersets.py:204 dcim/forms/filtersets.py:915 -#: dcim/forms/filtersets.py:1007 dcim/forms/filtersets.py:1131 -#: dcim/forms/filtersets.py:1239 dcim/forms/filtersets.py:1263 -#: dcim/forms/filtersets.py:1288 dcim/forms/filtersets.py:1307 -#: dcim/forms/filtersets.py:1327 dcim/forms/filtersets.py:1441 -#: dcim/forms/filtersets.py:1465 dcim/forms/filtersets.py:1489 -#: dcim/forms/filtersets.py:1507 dcim/forms/filtersets.py:1523 -#: extras/forms/bulk_edit.py:90 extras/forms/filtersets.py:44 -#: extras/forms/filtersets.py:134 extras/forms/filtersets.py:165 -#: extras/forms/filtersets.py:205 extras/forms/filtersets.py:221 -#: extras/forms/filtersets.py:252 extras/forms/filtersets.py:276 -#: extras/forms/filtersets.py:441 ipam/forms/filtersets.py:99 -#: ipam/forms/filtersets.py:266 ipam/forms/filtersets.py:307 -#: ipam/forms/filtersets.py:382 ipam/forms/filtersets.py:468 -#: ipam/forms/filtersets.py:527 ipam/forms/filtersets.py:545 -#: netbox/tables/tables.py:256 virtualization/forms/filtersets.py:45 -#: virtualization/forms/filtersets.py:103 -#: virtualization/forms/filtersets.py:198 -#: virtualization/forms/filtersets.py:243 vpn/forms/filtersets.py:213 -#: wireless/forms/bulk_edit.py:150 wireless/forms/filtersets.py:34 -#: wireless/forms/filtersets.py:74 +#: 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" -#: circuits/forms/filtersets.py:73 circuits/tables/circuits.py:63 -#: circuits/tables/providers.py:66 templates/circuits/circuit.html:22 -#: templates/circuits/provideraccount.html:24 +#: netbox/circuits/forms/filtersets.py:73 +#: netbox/circuits/tables/circuits.py:63 +#: netbox/circuits/tables/providers.py:66 +#: netbox/templates/circuits/circuit.html:22 +#: netbox/templates/circuits/provideraccount.html:24 msgid "Account" msgstr "Konto" -#: circuits/forms/filtersets.py:217 +#: netbox/circuits/forms/filtersets.py:217 msgid "Term Side" msgstr "Strona terminowa" -#: circuits/forms/filtersets.py:250 extras/forms/model_forms.py:582 -#: ipam/forms/filtersets.py:142 ipam/forms/filtersets.py:546 -#: ipam/forms/model_forms.py:323 templates/extras/configcontext.html:60 -#: templates/ipam/ipaddress.html:59 templates/ipam/vlan_edit.html:30 -#: tenancy/forms/filtersets.py:87 users/forms/model_forms.py:314 +#: 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/templates/extras/configcontext.html:60 +#: netbox/templates/ipam/ipaddress.html:59 +#: netbox/templates/ipam/vlan_edit.html:30 +#: netbox/tenancy/forms/filtersets.py:87 netbox/users/forms/model_forms.py:314 msgid "Assignment" msgstr "Zlecenie" -#: circuits/forms/filtersets.py:265 circuits/forms/model_forms.py:195 -#: circuits/tables/circuits.py:155 dcim/forms/bulk_edit.py:117 -#: dcim/forms/bulk_import.py:100 dcim/forms/model_forms.py:117 -#: dcim/tables/sites.py:89 extras/forms/filtersets.py:480 -#: ipam/filtersets.py:999 ipam/forms/bulk_edit.py:493 -#: ipam/forms/bulk_import.py:436 ipam/forms/model_forms.py:528 -#: ipam/tables/fhrp.py:67 ipam/tables/vlans.py:122 ipam/tables/vlans.py:226 -#: templates/circuits/circuitgroupassignment.html:22 -#: templates/dcim/interface.html:284 templates/dcim/site.html:37 -#: templates/ipam/inc/panels/fhrp_groups.html:23 templates/ipam/vlan.html:27 -#: templates/tenancy/contact.html:21 templates/tenancy/tenant.html:20 -#: templates/users/group.html:6 templates/users/group.html:14 -#: templates/virtualization/cluster.html:29 templates/vpn/tunnel.html:29 -#: templates/wireless/wirelesslan.html:18 tenancy/forms/bulk_edit.py:43 -#: tenancy/forms/bulk_edit.py:94 tenancy/forms/bulk_import.py:40 -#: tenancy/forms/bulk_import.py:81 tenancy/forms/filtersets.py:48 -#: tenancy/forms/filtersets.py:78 tenancy/forms/filtersets.py:97 -#: tenancy/forms/model_forms.py:45 tenancy/forms/model_forms.py:97 -#: tenancy/forms/model_forms.py:122 tenancy/tables/contacts.py:60 -#: tenancy/tables/contacts.py:107 tenancy/tables/tenants.py:42 -#: users/filtersets.py:62 users/filtersets.py:185 users/forms/filtersets.py:31 -#: users/forms/filtersets.py:37 users/forms/filtersets.py:79 -#: virtualization/forms/bulk_edit.py:65 virtualization/forms/bulk_import.py:47 -#: virtualization/forms/filtersets.py:85 -#: virtualization/forms/model_forms.py:66 virtualization/tables/clusters.py:70 -#: vpn/forms/bulk_edit.py:112 vpn/forms/bulk_import.py:158 -#: vpn/forms/filtersets.py:116 vpn/tables/crypto.py:31 -#: vpn/tables/tunnels.py:44 wireless/forms/bulk_edit.py:48 -#: wireless/forms/bulk_import.py:36 wireless/forms/filtersets.py:46 -#: wireless/forms/model_forms.py:40 wireless/tables/wirelesslan.py:48 +#: netbox/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:999 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/templates/circuits/circuitgroupassignment.html:22 +#: netbox/templates/dcim/interface.html:284 netbox/templates/dcim/site.html:37 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:23 +#: netbox/templates/ipam/vlan.html:27 netbox/templates/tenancy/contact.html:21 +#: netbox/templates/tenancy/tenant.html:20 netbox/templates/users/group.html:6 +#: netbox/templates/users/group.html:14 +#: netbox/templates/virtualization/cluster.html:29 +#: netbox/templates/vpn/tunnel.html:29 +#: netbox/templates/wireless/wirelesslan.html:18 +#: netbox/tenancy/forms/bulk_edit.py:43 netbox/tenancy/forms/bulk_edit.py:94 +#: netbox/tenancy/forms/bulk_import.py:40 +#: netbox/tenancy/forms/bulk_import.py:81 +#: netbox/tenancy/forms/filtersets.py:48 netbox/tenancy/forms/filtersets.py:78 +#: netbox/tenancy/forms/filtersets.py:97 +#: netbox/tenancy/forms/model_forms.py:45 +#: netbox/tenancy/forms/model_forms.py:97 +#: netbox/tenancy/forms/model_forms.py:122 +#: netbox/tenancy/tables/contacts.py:60 netbox/tenancy/tables/contacts.py:107 +#: netbox/tenancy/tables/tenants.py:42 netbox/users/filtersets.py: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/tables/clusters.py:70 +#: netbox/vpn/forms/bulk_edit.py:112 netbox/vpn/forms/bulk_import.py:158 +#: netbox/vpn/forms/filtersets.py:116 netbox/vpn/tables/crypto.py:31 +#: netbox/vpn/tables/tunnels.py:44 netbox/wireless/forms/bulk_edit.py:48 +#: netbox/wireless/forms/bulk_import.py:36 +#: netbox/wireless/forms/filtersets.py:46 +#: netbox/wireless/forms/model_forms.py:40 +#: netbox/wireless/tables/wirelesslan.py:48 msgid "Group" msgstr "Grupa" -#: circuits/forms/model_forms.py:182 templates/circuits/circuitgroup.html:25 +#: netbox/circuits/forms/model_forms.py:182 +#: netbox/templates/circuits/circuitgroup.html:25 msgid "Circuit Group" msgstr "Grupa obwodów" -#: circuits/models/circuits.py:27 dcim/models/cables.py:67 -#: dcim/models/device_component_templates.py:517 -#: dcim/models/device_component_templates.py:617 -#: dcim/models/device_components.py:975 dcim/models/device_components.py:1049 -#: dcim/models/device_components.py:1204 dcim/models/devices.py:479 -#: dcim/models/racks.py:224 extras/models/tags.py:28 +#: 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/extras/models/tags.py:28 msgid "color" msgstr "kolor" -#: circuits/models/circuits.py:36 +#: netbox/circuits/models/circuits.py:36 msgid "circuit type" msgstr "typ obwodu" -#: circuits/models/circuits.py:37 +#: netbox/circuits/models/circuits.py:37 msgid "circuit types" msgstr "typy obwodów" -#: circuits/models/circuits.py:48 +#: netbox/circuits/models/circuits.py:48 msgid "circuit ID" msgstr "ID obwodu" -#: circuits/models/circuits.py:49 +#: netbox/circuits/models/circuits.py:49 msgid "Unique circuit ID" msgstr "Unikalny identyfikator obwodu" -#: circuits/models/circuits.py:69 core/models/data.py:52 -#: core/models/jobs.py:84 dcim/models/cables.py:49 dcim/models/devices.py:653 -#: dcim/models/devices.py:1173 dcim/models/devices.py:1399 -#: dcim/models/power.py:96 dcim/models/racks.py:297 dcim/models/sites.py:154 -#: dcim/models/sites.py:266 ipam/models/ip.py:253 ipam/models/ip.py:522 -#: ipam/models/ip.py:730 ipam/models/vlans.py:195 -#: virtualization/models/clusters.py:74 -#: virtualization/models/virtualmachines.py:84 vpn/models/tunnels.py:40 -#: wireless/models.py:95 wireless/models.py:159 +#: 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 msgid "status" msgstr "status" -#: circuits/models/circuits.py:84 templates/core/plugin.html:20 +#: netbox/circuits/models/circuits.py:84 netbox/templates/core/plugin.html:20 msgid "installed" msgstr "zainstalowany" -#: circuits/models/circuits.py:89 +#: netbox/circuits/models/circuits.py:89 msgid "terminates" msgstr "kończy się" -#: circuits/models/circuits.py:94 +#: netbox/circuits/models/circuits.py:94 msgid "commit rate (Kbps)" msgstr "szybkość zatwierdzania (Kbps)" -#: circuits/models/circuits.py:95 +#: netbox/circuits/models/circuits.py:95 msgid "Committed rate" msgstr "Stopa zobowiązań" -#: circuits/models/circuits.py:137 +#: netbox/circuits/models/circuits.py:137 msgid "circuit" msgstr "obwód" -#: circuits/models/circuits.py:138 +#: netbox/circuits/models/circuits.py:138 msgid "circuits" msgstr "obwodów" -#: circuits/models/circuits.py:170 +#: netbox/circuits/models/circuits.py:170 msgid "circuit group" msgstr "grupa obwodów" -#: circuits/models/circuits.py:171 +#: netbox/circuits/models/circuits.py:171 msgid "circuit groups" msgstr "grupy obwodów" -#: circuits/models/circuits.py:195 ipam/models/fhrp.py:93 -#: tenancy/models/contacts.py:134 +#: netbox/circuits/models/circuits.py:195 netbox/ipam/models/fhrp.py:93 +#: netbox/tenancy/models/contacts.py:134 msgid "priority" msgstr "priorytet" -#: circuits/models/circuits.py:213 +#: netbox/circuits/models/circuits.py:213 msgid "Circuit group assignment" msgstr "Przypisanie grupy obwodów" -#: circuits/models/circuits.py:214 +#: netbox/circuits/models/circuits.py:214 msgid "Circuit group assignments" msgstr "Przydziały grup obwodowych" -#: circuits/models/circuits.py:240 +#: netbox/circuits/models/circuits.py:240 msgid "termination" msgstr "wypowiedzenie" -#: circuits/models/circuits.py:257 +#: netbox/circuits/models/circuits.py:257 msgid "port speed (Kbps)" msgstr "Prędkość portu (Kbps)" -#: circuits/models/circuits.py:260 +#: netbox/circuits/models/circuits.py:260 msgid "Physical circuit speed" msgstr "Prędkość obwodu fizycznego" -#: circuits/models/circuits.py:265 +#: netbox/circuits/models/circuits.py:265 msgid "upstream speed (Kbps)" msgstr "prędkość przed strumieniem (Kbps)" -#: circuits/models/circuits.py:266 +#: netbox/circuits/models/circuits.py:266 msgid "Upstream speed, if different from port speed" msgstr "Prędkość poprzedzająca, jeśli różni się od prędkości portu" -#: circuits/models/circuits.py:271 +#: netbox/circuits/models/circuits.py:271 msgid "cross-connect ID" msgstr "identyfikator połączenia krzyżowego" -#: circuits/models/circuits.py:272 +#: netbox/circuits/models/circuits.py:272 msgid "ID of the local cross-connect" msgstr "Identyfikator lokalnego połączenia krzyżowego" -#: circuits/models/circuits.py:277 +#: netbox/circuits/models/circuits.py:277 msgid "patch panel/port(s)" msgstr "panel krosowy/port (y)" -#: circuits/models/circuits.py:278 +#: netbox/circuits/models/circuits.py:278 msgid "Patch panel ID and port number(s)" msgstr "Identyfikator panelu krosowego i numer (y) portu" -#: circuits/models/circuits.py:281 -#: dcim/models/device_component_templates.py:61 -#: dcim/models/device_components.py:68 dcim/models/racks.py:685 -#: extras/models/configs.py:45 extras/models/configs.py:219 -#: extras/models/customfields.py:125 extras/models/models.py:61 -#: extras/models/models.py:158 extras/models/models.py:396 -#: extras/models/models.py:511 extras/models/notifications.py:131 -#: extras/models/staging.py:31 extras/models/tags.py:32 -#: netbox/models/__init__.py:110 netbox/models/__init__.py:145 -#: netbox/models/__init__.py:191 users/models/permissions.py:24 -#: users/models/tokens.py:57 users/models/users.py:33 -#: virtualization/models/virtualmachines.py:289 +#: 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/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 msgid "description" msgstr "opis" -#: circuits/models/circuits.py:294 +#: netbox/circuits/models/circuits.py:294 msgid "circuit termination" msgstr "zakończenie obwodu" -#: circuits/models/circuits.py:295 +#: netbox/circuits/models/circuits.py:295 msgid "circuit terminations" msgstr "zakończenia obwodu" -#: circuits/models/circuits.py:308 +#: netbox/circuits/models/circuits.py:308 msgid "" "A circuit termination must attach to either a site or a provider network." msgstr "Zakończenie obwodu musi być podłączone do witryny lub sieci dostawcy." -#: circuits/models/circuits.py:310 +#: netbox/circuits/models/circuits.py:310 msgid "" "A circuit termination cannot attach to both a site and a provider network." msgstr "" "Zakończenie obwodu nie może połączyć się zarówno z witryną, jak i siecią " "dostawcy." -#: circuits/models/providers.py:22 circuits/models/providers.py:66 -#: circuits/models/providers.py:104 core/models/data.py:39 -#: core/models/jobs.py:45 dcim/models/device_component_templates.py:43 -#: dcim/models/device_components.py:53 dcim/models/devices.py:593 -#: dcim/models/devices.py:1330 dcim/models/devices.py:1395 -#: dcim/models/power.py:39 dcim/models/power.py:92 dcim/models/racks.py:262 -#: dcim/models/sites.py:138 extras/models/configs.py:36 -#: extras/models/configs.py:215 extras/models/customfields.py:92 -#: extras/models/models.py:56 extras/models/models.py:153 -#: extras/models/models.py:296 extras/models/models.py:392 -#: extras/models/models.py:501 extras/models/models.py:596 -#: extras/models/notifications.py:126 extras/models/scripts.py:30 -#: extras/models/staging.py:26 ipam/models/asns.py:18 ipam/models/fhrp.py:25 -#: ipam/models/services.py:52 ipam/models/services.py:88 -#: ipam/models/vlans.py:36 ipam/models/vlans.py:184 ipam/models/vrfs.py:22 -#: ipam/models/vrfs.py:79 netbox/models/__init__.py:137 -#: netbox/models/__init__.py:181 tenancy/models/contacts.py:64 -#: tenancy/models/tenants.py:20 tenancy/models/tenants.py:45 -#: users/models/permissions.py:20 users/models/users.py:28 -#: virtualization/models/clusters.py:57 -#: virtualization/models/virtualmachines.py:72 -#: virtualization/models/virtualmachines.py:279 vpn/models/crypto.py:24 -#: vpn/models/crypto.py:71 vpn/models/crypto.py:131 vpn/models/crypto.py:183 -#: vpn/models/crypto.py:221 vpn/models/l2vpn.py:22 vpn/models/tunnels.py:35 -#: wireless/models.py:51 +#: 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/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/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 msgid "name" msgstr "nazwa" -#: circuits/models/providers.py:25 +#: netbox/circuits/models/providers.py:25 msgid "Full name of the provider" msgstr "Pełna nazwa dostawcy" -#: circuits/models/providers.py:28 dcim/models/devices.py:86 -#: dcim/models/racks.py:137 dcim/models/sites.py:149 -#: extras/models/models.py:506 ipam/models/asns.py:23 ipam/models/vlans.py:40 -#: netbox/models/__init__.py:141 netbox/models/__init__.py:186 -#: tenancy/models/tenants.py:25 tenancy/models/tenants.py:49 -#: vpn/models/l2vpn.py:27 wireless/models.py:56 +#: netbox/circuits/models/providers.py:28 netbox/dcim/models/devices.py:86 +#: 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 msgid "slug" msgstr "identyfikator" -#: circuits/models/providers.py:42 +#: netbox/circuits/models/providers.py:42 msgid "provider" msgstr "dostawca" -#: circuits/models/providers.py:43 +#: netbox/circuits/models/providers.py:43 msgid "providers" msgstr "dostawcy" -#: circuits/models/providers.py:63 +#: netbox/circuits/models/providers.py:63 msgid "account ID" msgstr "Identyfikator konta" -#: circuits/models/providers.py:86 +#: netbox/circuits/models/providers.py:86 msgid "provider account" msgstr "konto dostawcy" -#: circuits/models/providers.py:87 +#: netbox/circuits/models/providers.py:87 msgid "provider accounts" msgstr "konta dostawcy" -#: circuits/models/providers.py:115 +#: netbox/circuits/models/providers.py:115 msgid "service ID" msgstr "Identyfikator usługi" -#: circuits/models/providers.py:126 +#: netbox/circuits/models/providers.py:126 msgid "provider network" msgstr "sieć dostawców" -#: circuits/models/providers.py:127 +#: netbox/circuits/models/providers.py:127 msgid "provider networks" msgstr "sieci dostawców" -#: circuits/tables/circuits.py:32 circuits/tables/circuits.py:132 -#: circuits/tables/providers.py:18 circuits/tables/providers.py:69 -#: circuits/tables/providers.py:99 core/tables/data.py:16 -#: core/tables/jobs.py:14 core/tables/plugins.py:44 core/tables/tasks.py:11 -#: core/tables/tasks.py:115 dcim/forms/filtersets.py:63 -#: dcim/forms/object_create.py:43 dcim/tables/devices.py:52 -#: dcim/tables/devices.py:92 dcim/tables/devices.py:134 -#: dcim/tables/devices.py:289 dcim/tables/devices.py:392 -#: dcim/tables/devices.py:433 dcim/tables/devices.py:482 -#: dcim/tables/devices.py:531 dcim/tables/devices.py:648 -#: dcim/tables/devices.py:731 dcim/tables/devices.py:778 -#: dcim/tables/devices.py:841 dcim/tables/devices.py:911 -#: dcim/tables/devices.py:974 dcim/tables/devices.py:994 -#: dcim/tables/devices.py:1023 dcim/tables/devices.py:1053 -#: dcim/tables/devicetypes.py:31 dcim/tables/power.py:22 -#: dcim/tables/power.py:62 dcim/tables/racks.py:24 dcim/tables/racks.py:113 -#: dcim/tables/sites.py:24 dcim/tables/sites.py:51 dcim/tables/sites.py:78 -#: dcim/tables/sites.py:130 extras/forms/filtersets.py:213 -#: extras/tables/tables.py:58 extras/tables/tables.py:122 -#: extras/tables/tables.py:155 extras/tables/tables.py:180 -#: extras/tables/tables.py:246 extras/tables/tables.py:361 -#: extras/tables/tables.py:378 extras/tables/tables.py:401 -#: extras/tables/tables.py:439 extras/tables/tables.py:491 -#: extras/tables/tables.py:514 ipam/forms/bulk_edit.py:407 -#: ipam/forms/filtersets.py:386 ipam/tables/asn.py:16 ipam/tables/ip.py:85 -#: ipam/tables/ip.py:160 ipam/tables/services.py:15 ipam/tables/services.py:40 -#: ipam/tables/vlans.py:64 ipam/tables/vlans.py:114 ipam/tables/vrfs.py:26 -#: ipam/tables/vrfs.py:68 templates/circuits/circuitgroup.html:28 -#: templates/circuits/circuittype.html:22 -#: templates/circuits/provideraccount.html:28 -#: templates/circuits/providernetwork.html:24 -#: templates/core/datasource.html:34 templates/core/job.html:44 -#: templates/core/plugin.html:54 templates/core/rq_worker.html:43 -#: templates/dcim/consoleport.html:28 templates/dcim/consoleserverport.html:28 -#: templates/dcim/devicebay.html:24 templates/dcim/devicerole.html:26 -#: templates/dcim/frontport.html:28 -#: templates/dcim/inc/interface_vlans_table.html:5 -#: templates/dcim/inc/panels/inventory_items.html:18 -#: templates/dcim/interface.html:38 templates/dcim/interface.html:165 -#: templates/dcim/inventoryitem.html:28 -#: templates/dcim/inventoryitemrole.html:18 templates/dcim/location.html:29 -#: templates/dcim/manufacturer.html:36 templates/dcim/modulebay.html:30 -#: templates/dcim/platform.html:29 templates/dcim/poweroutlet.html:28 -#: templates/dcim/powerport.html:28 templates/dcim/rackrole.html:22 -#: templates/dcim/rearport.html:28 templates/dcim/region.html:29 -#: templates/dcim/sitegroup.html:29 -#: templates/dcim/virtualdevicecontext.html:18 -#: templates/extras/configcontext.html:13 -#: templates/extras/configtemplate.html:13 -#: templates/extras/customfield.html:13 templates/extras/customlink.html:13 -#: templates/extras/eventrule.html:13 templates/extras/exporttemplate.html:15 -#: templates/extras/notificationgroup.html:14 -#: templates/extras/savedfilter.html:13 templates/extras/script_list.html:44 -#: templates/extras/tag.html:14 templates/extras/webhook.html:13 -#: templates/ipam/asnrange.html:15 templates/ipam/fhrpgroup.html:30 -#: templates/ipam/rir.html:22 templates/ipam/role.html:22 -#: templates/ipam/routetarget.html:13 templates/ipam/service.html:24 -#: templates/ipam/servicetemplate.html:15 templates/ipam/vlan.html:35 -#: templates/ipam/vlangroup.html:30 templates/tenancy/contact.html:25 -#: templates/tenancy/contactgroup.html:21 -#: templates/tenancy/contactrole.html:18 templates/tenancy/tenantgroup.html:29 -#: templates/users/group.html:17 templates/users/objectpermission.html:17 -#: templates/virtualization/cluster.html:13 -#: templates/virtualization/clustergroup.html:22 -#: templates/virtualization/clustertype.html:22 -#: templates/virtualization/virtualdisk.html:25 -#: templates/virtualization/virtualmachine.html:15 -#: templates/virtualization/vminterface.html:25 -#: templates/vpn/ikepolicy.html:13 templates/vpn/ikeproposal.html:13 -#: templates/vpn/ipsecpolicy.html:13 templates/vpn/ipsecprofile.html:13 -#: templates/vpn/ipsecprofile.html:36 templates/vpn/ipsecprofile.html:69 -#: templates/vpn/ipsecproposal.html:13 templates/vpn/l2vpn.html:14 -#: templates/vpn/tunnel.html:21 templates/vpn/tunnelgroup.html:26 -#: templates/wireless/wirelesslangroup.html:29 tenancy/tables/contacts.py:19 -#: tenancy/tables/contacts.py:41 tenancy/tables/contacts.py:56 -#: tenancy/tables/tenants.py:16 tenancy/tables/tenants.py:38 -#: users/tables.py:62 users/tables.py:76 -#: virtualization/forms/bulk_create.py:20 -#: virtualization/forms/object_create.py:13 -#: virtualization/forms/object_create.py:23 -#: virtualization/tables/clusters.py:17 virtualization/tables/clusters.py:39 -#: virtualization/tables/clusters.py:62 -#: virtualization/tables/virtualmachines.py:55 -#: virtualization/tables/virtualmachines.py:139 -#: virtualization/tables/virtualmachines.py:194 vpn/tables/crypto.py:18 -#: vpn/tables/crypto.py:57 vpn/tables/crypto.py:93 vpn/tables/crypto.py:129 -#: vpn/tables/crypto.py:158 vpn/tables/l2vpn.py:23 vpn/tables/tunnels.py:18 -#: vpn/tables/tunnels.py:40 wireless/tables/wirelesslan.py:18 -#: wireless/tables/wirelesslan.py:79 +#: netbox/circuits/tables/circuits.py:32 +#: netbox/circuits/tables/circuits.py:132 +#: netbox/circuits/tables/providers.py:18 +#: netbox/circuits/tables/providers.py:69 +#: netbox/circuits/tables/providers.py:99 netbox/core/tables/data.py:16 +#: netbox/core/tables/jobs.py:14 netbox/core/tables/plugins.py: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/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/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/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/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 +#: netbox/templates/dcim/consoleserverport.html:28 +#: netbox/templates/dcim/devicebay.html:24 +#: netbox/templates/dcim/devicerole.html:26 +#: netbox/templates/dcim/frontport.html:28 +#: netbox/templates/dcim/inc/interface_vlans_table.html:5 +#: netbox/templates/dcim/inc/panels/inventory_items.html:18 +#: netbox/templates/dcim/interface.html:38 +#: netbox/templates/dcim/interface.html:165 +#: netbox/templates/dcim/inventoryitem.html:28 +#: netbox/templates/dcim/inventoryitemrole.html:18 +#: netbox/templates/dcim/location.html:29 +#: netbox/templates/dcim/manufacturer.html:36 +#: netbox/templates/dcim/modulebay.html:30 +#: netbox/templates/dcim/platform.html:29 +#: netbox/templates/dcim/poweroutlet.html:28 +#: netbox/templates/dcim/powerport.html:28 +#: netbox/templates/dcim/rackrole.html:22 +#: netbox/templates/dcim/rearport.html:28 netbox/templates/dcim/region.html:29 +#: netbox/templates/dcim/sitegroup.html:29 +#: netbox/templates/dcim/virtualdevicecontext.html:18 +#: netbox/templates/extras/configcontext.html:13 +#: netbox/templates/extras/configtemplate.html:13 +#: netbox/templates/extras/customfield.html:13 +#: netbox/templates/extras/customlink.html:13 +#: netbox/templates/extras/eventrule.html:13 +#: netbox/templates/extras/exporttemplate.html:15 +#: netbox/templates/extras/notificationgroup.html:14 +#: netbox/templates/extras/savedfilter.html:13 +#: netbox/templates/extras/script_list.html:45 +#: netbox/templates/extras/tag.html:14 netbox/templates/extras/webhook.html:13 +#: netbox/templates/ipam/asnrange.html:15 +#: netbox/templates/ipam/fhrpgroup.html:30 netbox/templates/ipam/rir.html:22 +#: netbox/templates/ipam/role.html:22 +#: netbox/templates/ipam/routetarget.html:13 +#: netbox/templates/ipam/service.html:24 +#: netbox/templates/ipam/servicetemplate.html:15 +#: netbox/templates/ipam/vlan.html:35 netbox/templates/ipam/vlangroup.html:30 +#: netbox/templates/tenancy/contact.html:25 +#: netbox/templates/tenancy/contactgroup.html:21 +#: netbox/templates/tenancy/contactrole.html:18 +#: netbox/templates/tenancy/tenantgroup.html:29 +#: netbox/templates/users/group.html:17 +#: netbox/templates/users/objectpermission.html:17 +#: netbox/templates/virtualization/cluster.html:13 +#: netbox/templates/virtualization/clustergroup.html:22 +#: netbox/templates/virtualization/clustertype.html:22 +#: netbox/templates/virtualization/virtualdisk.html:25 +#: netbox/templates/virtualization/virtualmachine.html:15 +#: netbox/templates/virtualization/vminterface.html:25 +#: netbox/templates/vpn/ikepolicy.html:13 +#: netbox/templates/vpn/ikeproposal.html:13 +#: netbox/templates/vpn/ipsecpolicy.html:13 +#: netbox/templates/vpn/ipsecprofile.html:13 +#: netbox/templates/vpn/ipsecprofile.html:36 +#: netbox/templates/vpn/ipsecprofile.html:69 +#: netbox/templates/vpn/ipsecproposal.html:13 +#: netbox/templates/vpn/l2vpn.html:14 netbox/templates/vpn/tunnel.html:21 +#: netbox/templates/vpn/tunnelgroup.html:26 +#: netbox/templates/wireless/wirelesslangroup.html:29 +#: netbox/tenancy/tables/contacts.py:19 netbox/tenancy/tables/contacts.py:41 +#: netbox/tenancy/tables/contacts.py:56 netbox/tenancy/tables/tenants.py:16 +#: netbox/tenancy/tables/tenants.py:38 netbox/users/tables.py:62 +#: netbox/users/tables.py:76 netbox/virtualization/forms/bulk_create.py:20 +#: netbox/virtualization/forms/object_create.py:13 +#: netbox/virtualization/forms/object_create.py:23 +#: netbox/virtualization/tables/clusters.py:17 +#: netbox/virtualization/tables/clusters.py:39 +#: netbox/virtualization/tables/clusters.py:62 +#: netbox/virtualization/tables/virtualmachines.py:55 +#: netbox/virtualization/tables/virtualmachines.py:139 +#: netbox/virtualization/tables/virtualmachines.py:194 +#: netbox/vpn/tables/crypto.py:18 netbox/vpn/tables/crypto.py:57 +#: netbox/vpn/tables/crypto.py:93 netbox/vpn/tables/crypto.py:129 +#: netbox/vpn/tables/crypto.py:158 netbox/vpn/tables/l2vpn.py:23 +#: netbox/vpn/tables/tunnels.py:18 netbox/vpn/tables/tunnels.py:40 +#: netbox/wireless/tables/wirelesslan.py:18 +#: netbox/wireless/tables/wirelesslan.py:79 msgid "Name" msgstr "Nazwa" -#: circuits/tables/circuits.py:41 circuits/tables/circuits.py:138 -#: circuits/tables/providers.py:45 circuits/tables/providers.py:79 -#: netbox/navigation/menu.py:266 netbox/navigation/menu.py:270 -#: netbox/navigation/menu.py:272 templates/circuits/provider.html:57 -#: templates/circuits/provideraccount.html:44 -#: templates/circuits/providernetwork.html:50 +#: 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/templates/circuits/provider.html:57 +#: netbox/templates/circuits/provideraccount.html:44 +#: netbox/templates/circuits/providernetwork.html:50 msgid "Circuits" msgstr "Obwody" -#: circuits/tables/circuits.py:55 templates/circuits/circuit.html:26 +#: netbox/circuits/tables/circuits.py:55 +#: netbox/templates/circuits/circuit.html:26 msgid "Circuit ID" msgstr "Identyfikator obwodu" -#: circuits/tables/circuits.py:69 wireless/forms/model_forms.py:160 +#: netbox/circuits/tables/circuits.py:69 +#: netbox/wireless/forms/model_forms.py:160 msgid "Side A" msgstr "Strona A" -#: circuits/tables/circuits.py:74 +#: netbox/circuits/tables/circuits.py:74 msgid "Side Z" msgstr "Strona Z" -#: circuits/tables/circuits.py:77 templates/circuits/circuit.html:55 +#: netbox/circuits/tables/circuits.py:77 +#: netbox/templates/circuits/circuit.html:55 msgid "Commit Rate" msgstr "Współczynnik zatwierdzania" -#: circuits/tables/circuits.py:80 circuits/tables/providers.py:48 -#: circuits/tables/providers.py:82 circuits/tables/providers.py:107 -#: dcim/tables/devices.py:1036 dcim/tables/devicetypes.py:92 -#: dcim/tables/modules.py:29 dcim/tables/modules.py:72 dcim/tables/power.py:39 -#: dcim/tables/power.py:96 dcim/tables/racks.py:84 dcim/tables/racks.py:145 -#: dcim/tables/racks.py:225 dcim/tables/sites.py:108 -#: extras/tables/tables.py:582 ipam/tables/asn.py:69 ipam/tables/fhrp.py:34 -#: ipam/tables/ip.py:136 ipam/tables/ip.py:275 ipam/tables/ip.py:329 -#: ipam/tables/ip.py:397 ipam/tables/services.py:24 ipam/tables/services.py:54 -#: ipam/tables/vlans.py:145 ipam/tables/vrfs.py:47 ipam/tables/vrfs.py:72 -#: templates/dcim/htmx/cable_edit.html:89 templates/generic/bulk_edit.html:86 -#: templates/inc/panels/comments.html:5 tenancy/tables/contacts.py:68 -#: tenancy/tables/tenants.py:46 utilities/forms/fields/fields.py:29 -#: virtualization/tables/clusters.py:91 -#: virtualization/tables/virtualmachines.py:82 vpn/tables/crypto.py:37 -#: vpn/tables/crypto.py:74 vpn/tables/crypto.py:109 vpn/tables/crypto.py:140 -#: vpn/tables/crypto.py:173 vpn/tables/l2vpn.py:37 vpn/tables/tunnels.py:61 -#: wireless/tables/wirelesslan.py:27 wireless/tables/wirelesslan.py:58 +#: netbox/circuits/tables/circuits.py: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:72 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/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/vpn/tables/crypto.py:37 netbox/vpn/tables/crypto.py:74 +#: netbox/vpn/tables/crypto.py:109 netbox/vpn/tables/crypto.py:140 +#: netbox/vpn/tables/crypto.py:173 netbox/vpn/tables/l2vpn.py:37 +#: netbox/vpn/tables/tunnels.py:61 netbox/wireless/tables/wirelesslan.py:27 +#: netbox/wireless/tables/wirelesslan.py:58 msgid "Comments" msgstr "Komentarze" -#: circuits/tables/circuits.py:86 templates/tenancy/contact.html:84 -#: tenancy/tables/contacts.py:73 +#: netbox/circuits/tables/circuits.py:86 +#: netbox/templates/tenancy/contact.html:84 +#: netbox/tenancy/tables/contacts.py:73 msgid "Assignments" msgstr "Zadania" -#: circuits/tables/providers.py:23 +#: netbox/circuits/tables/providers.py:23 msgid "Accounts" msgstr "Konta" -#: circuits/tables/providers.py:29 +#: netbox/circuits/tables/providers.py:29 msgid "Account Count" msgstr "Liczba kont" -#: circuits/tables/providers.py:39 dcim/tables/sites.py:100 +#: netbox/circuits/tables/providers.py:39 netbox/dcim/tables/sites.py:100 msgid "ASN Count" msgstr "Liczba ASN" -#: circuits/views.py:331 +#: netbox/circuits/views.py:331 #, python-brace-format msgid "No terminations have been defined for circuit {circuit}." msgstr "Nie zdefiniowano zakończeń dla obwodu {circuit}." -#: circuits/views.py:380 +#: netbox/circuits/views.py:380 #, python-brace-format msgid "Swapped terminations for circuit {circuit}." msgstr "Wymienione zakończenia na obwód {circuit}." -#: core/api/views.py:39 +#: netbox/core/api/views.py:39 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." -#: core/choices.py:18 +#: netbox/core/choices.py:18 msgid "New" msgstr "Nowość" -#: core/choices.py:19 core/constants.py:18 core/tables/tasks.py:15 -#: templates/core/rq_task.html:77 +#: netbox/core/choices.py:19 netbox/core/constants.py:18 +#: netbox/core/tables/tasks.py:15 netbox/templates/core/rq_task.html:77 msgid "Queued" msgstr "W kolejce" -#: core/choices.py:20 +#: netbox/core/choices.py:20 msgid "Syncing" msgstr "Synchronizacja" -#: core/choices.py:21 core/choices.py:57 core/tables/jobs.py:41 -#: templates/core/job.html:86 +#: netbox/core/choices.py:21 netbox/core/choices.py:57 +#: netbox/core/tables/jobs.py:41 netbox/templates/core/job.html:86 msgid "Completed" msgstr "Zakończone" -#: core/choices.py:22 core/choices.py:59 core/constants.py:20 -#: core/tables/tasks.py:34 dcim/choices.py:187 dcim/choices.py:239 -#: dcim/choices.py:1607 virtualization/choices.py:47 +#: netbox/core/choices.py:22 netbox/core/choices.py:59 +#: netbox/core/constants.py:20 netbox/core/tables/tasks.py:34 +#: netbox/dcim/choices.py:187 netbox/dcim/choices.py:239 +#: netbox/dcim/choices.py:1609 netbox/virtualization/choices.py:47 msgid "Failed" msgstr "Nie powiodło się" -#: core/choices.py:35 netbox/navigation/menu.py:335 -#: netbox/navigation/menu.py:339 templates/extras/script/base.html:14 -#: templates/extras/script_list.html:7 templates/extras/script_list.html:12 -#: templates/extras/script_result.html:17 +#: netbox/core/choices.py:35 netbox/netbox/navigation/menu.py:335 +#: netbox/netbox/navigation/menu.py:339 +#: netbox/templates/extras/script/base.html:14 +#: netbox/templates/extras/script_list.html:7 +#: netbox/templates/extras/script_list.html:12 +#: netbox/templates/extras/script_result.html:17 msgid "Scripts" msgstr "Skrypty" -#: core/choices.py:36 templates/extras/report/base.html:13 +#: netbox/core/choices.py:36 netbox/templates/extras/report/base.html:13 msgid "Reports" msgstr "Raporty" -#: core/choices.py:54 +#: netbox/core/choices.py:54 msgid "Pending" msgstr "Oczekiwane" -#: core/choices.py:55 core/constants.py:23 core/tables/jobs.py:32 -#: core/tables/tasks.py:38 templates/core/job.html:73 +#: netbox/core/choices.py:55 netbox/core/constants.py:23 +#: netbox/core/tables/jobs.py:32 netbox/core/tables/tasks.py:38 +#: netbox/templates/core/job.html:73 msgid "Scheduled" msgstr "Zaplanowane" -#: core/choices.py:56 +#: netbox/core/choices.py:56 msgid "Running" msgstr "Uruchomione" -#: core/choices.py:58 +#: netbox/core/choices.py:58 msgid "Errored" msgstr "Zakończone z błędem" -#: core/choices.py:87 core/tables/plugins.py:63 -#: templates/generic/object.html:61 +#: netbox/core/choices.py:87 netbox/core/tables/plugins.py:63 +#: netbox/templates/generic/object.html:61 msgid "Updated" msgstr "Zaktualizowano" -#: core/choices.py:88 +#: netbox/core/choices.py:88 msgid "Deleted" msgstr "Usunięte" -#: core/constants.py:19 core/tables/tasks.py:30 +#: netbox/core/constants.py:19 netbox/core/tables/tasks.py:30 msgid "Finished" msgstr "Zakończone" -#: core/constants.py:21 core/tables/jobs.py:38 templates/core/job.html:82 -#: templates/extras/htmx/script_result.html:8 +#: netbox/core/constants.py:21 netbox/core/tables/jobs.py:38 +#: netbox/templates/core/job.html:82 +#: netbox/templates/extras/htmx/script_result.html:8 msgid "Started" msgstr "Rozpoczęte" -#: core/constants.py:22 core/tables/tasks.py:26 +#: netbox/core/constants.py:22 netbox/core/tables/tasks.py:26 msgid "Deferred" msgstr "Odroczone" -#: core/constants.py:24 +#: netbox/core/constants.py:24 msgid "Stopped" msgstr "Zatrzymane" -#: core/constants.py:25 +#: netbox/core/constants.py:25 msgid "Cancelled" msgstr "Anulowane" -#: core/data_backends.py:32 core/tables/plugins.py:51 -#: templates/core/plugin.html:88 templates/dcim/interface.html:216 +#: netbox/core/data_backends.py:32 netbox/core/tables/plugins.py:51 +#: netbox/templates/core/plugin.html:88 +#: netbox/templates/dcim/interface.html:216 msgid "Local" msgstr "Lokalne" -#: core/data_backends.py:50 core/tables/change_logging.py:20 -#: templates/account/profile.html:15 templates/users/user.html:17 -#: users/tables.py:31 +#: netbox/core/data_backends.py:50 netbox/core/tables/change_logging.py:20 +#: netbox/templates/account/profile.html:15 +#: netbox/templates/users/user.html:17 netbox/users/tables.py:31 msgid "Username" msgstr "Nazwa użytkownika" -#: core/data_backends.py:52 core/data_backends.py:58 +#: netbox/core/data_backends.py:52 netbox/core/data_backends.py:58 msgid "Only used for cloning with HTTP(S)" msgstr "Tylko używane do klonowania poprzez HTTP(S)" -#: core/data_backends.py:56 templates/account/base.html:23 -#: templates/account/password.html:12 users/forms/model_forms.py:170 +#: netbox/core/data_backends.py:56 netbox/templates/account/base.html:23 +#: netbox/templates/account/password.html:12 +#: netbox/users/forms/model_forms.py:170 msgid "Password" msgstr "Hasło" -#: core/data_backends.py:62 +#: netbox/core/data_backends.py:62 msgid "Branch" msgstr "gałąź" -#: core/data_backends.py:120 +#: netbox/core/data_backends.py:120 #, python-brace-format msgid "Fetching remote data failed ({name}): {error}" msgstr "Pobieranie zdalnych danych nie powiodło się ({name}): {error}" -#: core/data_backends.py:133 +#: netbox/core/data_backends.py:133 msgid "AWS access key ID" msgstr "Identyfikator klucza dostępu AWS" -#: core/data_backends.py:137 +#: netbox/core/data_backends.py:137 msgid "AWS secret access key" msgstr "Tajny klucz dostępu AWS" -#: core/events.py:27 +#: netbox/core/events.py:27 msgid "Object created" msgstr "Utworzony obiekt" -#: core/events.py:28 +#: netbox/core/events.py:28 msgid "Object updated" msgstr "Obiekt zaktualizowany" -#: core/events.py:29 +#: netbox/core/events.py:29 msgid "Object deleted" msgstr "Obiekt usunięty" -#: core/events.py:30 +#: netbox/core/events.py:30 msgid "Job started" msgstr "Praca rozpoczęta" -#: core/events.py:31 +#: netbox/core/events.py:31 msgid "Job completed" msgstr "Praca zakończona" -#: core/events.py:32 +#: netbox/core/events.py:32 msgid "Job failed" msgstr "Zadanie nie powiodło się" -#: core/events.py:33 +#: netbox/core/events.py:33 msgid "Job errored" msgstr "Błąd pracy" -#: core/filtersets.py:53 extras/filtersets.py:250 extras/filtersets.py:633 -#: extras/filtersets.py:661 +#: netbox/core/filtersets.py:53 netbox/extras/filtersets.py:250 +#: netbox/extras/filtersets.py:633 netbox/extras/filtersets.py:661 msgid "Data source (ID)" msgstr "Źródło danych (ID)" -#: core/filtersets.py:59 +#: netbox/core/filtersets.py:59 msgid "Data source (name)" msgstr "Źródło danych (nazwa)" -#: core/filtersets.py:145 dcim/filtersets.py:501 extras/filtersets.py:287 -#: extras/filtersets.py:331 extras/filtersets.py:353 extras/filtersets.py:413 -#: users/filtersets.py:28 +#: netbox/core/filtersets.py:145 netbox/dcim/filtersets.py:501 +#: 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 msgid "User (ID)" msgstr "Użytkownik (ID)" -#: core/filtersets.py:151 +#: netbox/core/filtersets.py:151 msgid "User name" msgstr "Nazwa użytkownika" -#: core/forms/bulk_edit.py:25 core/forms/filtersets.py:43 -#: core/tables/data.py:26 dcim/forms/bulk_edit.py:1122 -#: dcim/forms/bulk_edit.py:1400 dcim/forms/filtersets.py:1370 -#: dcim/tables/devices.py:553 dcim/tables/devicetypes.py:224 -#: extras/forms/bulk_edit.py:123 extras/forms/bulk_edit.py:187 -#: extras/forms/bulk_edit.py:246 extras/forms/filtersets.py:142 -#: extras/forms/filtersets.py:229 extras/forms/filtersets.py:294 -#: extras/tables/tables.py:162 extras/tables/tables.py:253 -#: extras/tables/tables.py:415 netbox/preferences.py:22 -#: templates/core/datasource.html:42 templates/dcim/interface.html:61 -#: templates/extras/customlink.html:17 templates/extras/eventrule.html:17 -#: templates/extras/savedfilter.html:25 -#: templates/users/objectpermission.html:25 -#: templates/virtualization/vminterface.html:29 users/forms/bulk_edit.py:89 -#: users/forms/filtersets.py:70 users/tables.py:83 -#: virtualization/forms/bulk_edit.py:217 -#: virtualization/forms/filtersets.py:215 +#: 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/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/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 +#: netbox/templates/dcim/interface.html:61 +#: netbox/templates/extras/customlink.html:17 +#: netbox/templates/extras/eventrule.html:17 +#: netbox/templates/extras/savedfilter.html:25 +#: netbox/templates/users/objectpermission.html:25 +#: netbox/templates/virtualization/vminterface.html:29 +#: netbox/users/forms/bulk_edit.py:89 netbox/users/forms/filtersets.py:70 +#: netbox/users/tables.py:83 netbox/virtualization/forms/bulk_edit.py:217 +#: netbox/virtualization/forms/filtersets.py:215 msgid "Enabled" msgstr "Włączone" -#: core/forms/bulk_edit.py:34 extras/forms/model_forms.py:285 -#: templates/extras/savedfilter.html:52 vpn/forms/filtersets.py:97 -#: vpn/forms/filtersets.py:127 vpn/forms/filtersets.py:151 -#: vpn/forms/filtersets.py:170 vpn/forms/model_forms.py:301 -#: vpn/forms/model_forms.py:321 vpn/forms/model_forms.py:337 -#: vpn/forms/model_forms.py:357 vpn/forms/model_forms.py:380 +#: netbox/core/forms/bulk_edit.py:34 netbox/extras/forms/model_forms.py:285 +#: 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 msgid "Parameters" msgstr "Parametry" -#: core/forms/bulk_edit.py:38 templates/core/datasource.html:68 +#: netbox/core/forms/bulk_edit.py:38 netbox/templates/core/datasource.html:68 msgid "Ignore rules" msgstr "Ignoruj reguły" -#: core/forms/filtersets.py:30 core/forms/model_forms.py:97 -#: extras/forms/model_forms.py:248 extras/forms/model_forms.py:578 -#: extras/forms/model_forms.py:632 extras/tables/tables.py:191 -#: extras/tables/tables.py:483 extras/tables/tables.py:518 -#: templates/core/datasource.html:31 -#: templates/dcim/device/render_config.html:18 -#: templates/extras/configcontext.html:29 -#: templates/extras/configtemplate.html:21 -#: templates/extras/exporttemplate.html:35 -#: templates/virtualization/virtualmachine/render_config.html:18 +#: netbox/core/forms/filtersets.py: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/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 msgid "Data Source" msgstr "Źródło danych" -#: core/forms/filtersets.py:55 core/forms/mixins.py:21 +#: netbox/core/forms/filtersets.py:55 netbox/core/forms/mixins.py:21 msgid "File" msgstr "Plik" -#: core/forms/filtersets.py:60 core/forms/mixins.py:16 -#: extras/forms/filtersets.py:170 extras/forms/filtersets.py:328 -#: extras/forms/filtersets.py:413 +#: 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 msgid "Data source" msgstr "Źródło danych" -#: core/forms/filtersets.py:70 extras/forms/filtersets.py:440 +#: netbox/core/forms/filtersets.py:70 netbox/extras/forms/filtersets.py:440 msgid "Creation" msgstr "Stworzenie" -#: core/forms/filtersets.py:74 core/forms/filtersets.py:160 -#: extras/forms/filtersets.py:461 extras/tables/tables.py:220 -#: extras/tables/tables.py:294 extras/tables/tables.py:326 -#: extras/tables/tables.py:571 templates/core/job.html:38 -#: templates/core/objectchange.html:52 tenancy/tables/contacts.py:90 -#: vpn/tables/l2vpn.py:59 +#: 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/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 +#: netbox/tenancy/tables/contacts.py:90 netbox/vpn/tables/l2vpn.py:59 msgid "Object Type" msgstr "Typ obiektu" -#: core/forms/filtersets.py:84 +#: netbox/core/forms/filtersets.py:84 msgid "Created after" msgstr "Utworzone po" -#: core/forms/filtersets.py:89 +#: netbox/core/forms/filtersets.py:89 msgid "Created before" msgstr "Utworzone przed" -#: core/forms/filtersets.py:94 +#: netbox/core/forms/filtersets.py:94 msgid "Scheduled after" msgstr "Zaplanowane po" -#: core/forms/filtersets.py:99 +#: netbox/core/forms/filtersets.py:99 msgid "Scheduled before" msgstr "Zaplanowane przed" -#: core/forms/filtersets.py:104 +#: netbox/core/forms/filtersets.py:104 msgid "Started after" msgstr "Rozpoczęte po" -#: core/forms/filtersets.py:109 +#: netbox/core/forms/filtersets.py:109 msgid "Started before" msgstr "Rozpoczęte przed" -#: core/forms/filtersets.py:114 +#: netbox/core/forms/filtersets.py:114 msgid "Completed after" msgstr "Zakończone po" -#: core/forms/filtersets.py:119 +#: netbox/core/forms/filtersets.py:119 msgid "Completed before" msgstr "Zakończone przed" -#: core/forms/filtersets.py:126 core/forms/filtersets.py:155 -#: dcim/forms/bulk_edit.py:456 dcim/forms/filtersets.py:418 -#: dcim/forms/filtersets.py:462 dcim/forms/model_forms.py:316 -#: extras/forms/filtersets.py:456 extras/forms/filtersets.py:475 -#: extras/tables/tables.py:302 extras/tables/tables.py:342 -#: templates/core/objectchange.html:36 templates/dcim/rackreservation.html:58 -#: templates/extras/savedfilter.html:21 templates/inc/user_menu.html:33 -#: templates/users/token.html:21 templates/users/user.html:6 -#: templates/users/user.html:14 users/filtersets.py:107 -#: users/filtersets.py:174 users/forms/filtersets.py:84 -#: users/forms/filtersets.py:125 users/forms/model_forms.py:155 -#: users/forms/model_forms.py:192 users/tables.py:19 +#: 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/extras/tables/tables.py:302 netbox/extras/tables/tables.py:342 +#: netbox/templates/core/objectchange.html:36 +#: netbox/templates/dcim/rackreservation.html:58 +#: netbox/templates/extras/savedfilter.html:21 +#: netbox/templates/inc/user_menu.html:33 netbox/templates/users/token.html:21 +#: netbox/templates/users/user.html:6 netbox/templates/users/user.html:14 +#: netbox/users/filtersets.py:107 netbox/users/filtersets.py:174 +#: netbox/users/forms/filtersets.py:84 netbox/users/forms/filtersets.py:125 +#: netbox/users/forms/model_forms.py:155 netbox/users/forms/model_forms.py:192 +#: netbox/users/tables.py:19 msgid "User" msgstr "Użytkownik" -#: core/forms/filtersets.py:134 core/tables/change_logging.py:15 -#: extras/tables/tables.py:609 extras/tables/tables.py:646 -#: templates/core/objectchange.html:32 +#: netbox/core/forms/filtersets.py:134 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" -#: core/forms/filtersets.py:139 extras/forms/filtersets.py:445 +#: netbox/core/forms/filtersets.py:139 netbox/extras/forms/filtersets.py:445 msgid "After" msgstr "Po" -#: core/forms/filtersets.py:144 extras/forms/filtersets.py:450 +#: netbox/core/forms/filtersets.py:144 netbox/extras/forms/filtersets.py:450 msgid "Before" msgstr "Wcześniej" -#: core/forms/filtersets.py:148 core/tables/change_logging.py:29 -#: extras/forms/model_forms.py:396 templates/core/objectchange.html:46 -#: templates/extras/eventrule.html:71 +#: netbox/core/forms/filtersets.py:148 netbox/core/tables/change_logging.py:29 +#: netbox/extras/forms/model_forms.py:396 +#: netbox/templates/core/objectchange.html:46 +#: netbox/templates/extras/eventrule.html:71 msgid "Action" msgstr "Działanie" -#: core/forms/model_forms.py:54 core/tables/data.py:46 -#: templates/core/datafile.html:27 templates/extras/report/base.html:33 -#: templates/extras/script/base.html:32 +#: netbox/core/forms/model_forms.py:54 netbox/core/tables/data.py:46 +#: netbox/templates/core/datafile.html:27 +#: netbox/templates/extras/report/base.html:33 +#: netbox/templates/extras/script/base.html:32 msgid "Source" msgstr "Źródło" -#: core/forms/model_forms.py:58 +#: netbox/core/forms/model_forms.py:58 msgid "Backend Parameters" msgstr "Parametry zaplecza" -#: core/forms/model_forms.py:96 +#: netbox/core/forms/model_forms.py:96 msgid "File Upload" msgstr "Przesyłanie plików" -#: core/forms/model_forms.py:108 +#: netbox/core/forms/model_forms.py:108 msgid "Cannot upload a file and sync from an existing file" msgstr "Nie można przesłać pliku i zsynchronizować z istniejącym plikiem" -#: core/forms/model_forms.py:110 +#: netbox/core/forms/model_forms.py:110 msgid "Must upload a file or select a data file to sync" msgstr "Musisz przesłać plik lub wybrać plik danych do synchronizacji" -#: core/forms/model_forms.py:153 templates/dcim/rack_elevation_list.html:6 +#: netbox/core/forms/model_forms.py:153 +#: netbox/templates/dcim/rack_elevation_list.html:6 msgid "Rack Elevations" msgstr "Elewacje szaf" -#: core/forms/model_forms.py:157 dcim/choices.py:1518 -#: dcim/forms/bulk_edit.py:969 dcim/forms/bulk_edit.py:1357 -#: dcim/forms/bulk_edit.py:1375 dcim/tables/racks.py:158 -#: netbox/navigation/menu.py:291 netbox/navigation/menu.py:295 +#: 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 msgid "Power" msgstr "Moc" -#: core/forms/model_forms.py:159 netbox/navigation/menu.py:154 -#: templates/core/inc/config_data.html:37 +#: netbox/core/forms/model_forms.py:159 netbox/netbox/navigation/menu.py:154 +#: netbox/templates/core/inc/config_data.html:37 msgid "IPAM" msgstr "IPAM" -#: core/forms/model_forms.py:160 netbox/navigation/menu.py:230 -#: templates/core/inc/config_data.html:50 vpn/forms/bulk_edit.py:77 -#: vpn/forms/filtersets.py:43 vpn/forms/model_forms.py:61 -#: vpn/forms/model_forms.py:146 +#: netbox/core/forms/model_forms.py:160 netbox/netbox/navigation/menu.py:230 +#: netbox/templates/core/inc/config_data.html:50 +#: netbox/vpn/forms/bulk_edit.py:77 netbox/vpn/forms/filtersets.py:43 +#: netbox/vpn/forms/model_forms.py:61 netbox/vpn/forms/model_forms.py:146 msgid "Security" msgstr "Bezpieczeństwo" -#: core/forms/model_forms.py:161 templates/core/inc/config_data.html:59 +#: netbox/core/forms/model_forms.py:161 +#: netbox/templates/core/inc/config_data.html:59 msgid "Banners" msgstr "Banery" -#: core/forms/model_forms.py:162 templates/core/inc/config_data.html:80 +#: netbox/core/forms/model_forms.py:162 +#: netbox/templates/core/inc/config_data.html:80 msgid "Pagination" msgstr "Paginacja" -#: core/forms/model_forms.py:163 extras/forms/bulk_edit.py:92 -#: extras/forms/filtersets.py:47 extras/forms/model_forms.py:116 -#: extras/forms/model_forms.py:129 templates/core/inc/config_data.html:93 +#: 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/model_forms.py:129 +#: netbox/templates/core/inc/config_data.html:93 msgid "Validation" msgstr "Walidacja" -#: core/forms/model_forms.py:164 templates/account/preferences.html:6 +#: netbox/core/forms/model_forms.py:164 +#: netbox/templates/account/preferences.html:6 msgid "User Preferences" msgstr "Preferencje użytkownika" -#: core/forms/model_forms.py:167 dcim/forms/filtersets.py:732 -#: templates/core/inc/config_data.html:127 users/forms/model_forms.py:64 +#: netbox/core/forms/model_forms.py:167 netbox/dcim/forms/filtersets.py:732 +#: netbox/templates/core/inc/config_data.html:127 +#: netbox/users/forms/model_forms.py:64 msgid "Miscellaneous" msgstr "Różne" -#: core/forms/model_forms.py:169 +#: netbox/core/forms/model_forms.py:169 msgid "Config Revision" msgstr "Zmiana konfiguracji" -#: core/forms/model_forms.py:208 +#: netbox/core/forms/model_forms.py:208 msgid "This parameter has been defined statically and cannot be modified." msgstr "" "Ten parametr został zdefiniowany statycznie i nie można go modyfikować." -#: core/forms/model_forms.py:216 +#: netbox/core/forms/model_forms.py:216 #, python-brace-format msgid "Current value: {value}" msgstr "Bieżąca wartość: {value}" -#: core/forms/model_forms.py:218 +#: netbox/core/forms/model_forms.py:218 msgid " (default)" msgstr " (domyślnie)" -#: core/models/change_logging.py:29 +#: netbox/core/models/change_logging.py:29 msgid "time" msgstr "czas" -#: core/models/change_logging.py:42 +#: netbox/core/models/change_logging.py:42 msgid "user name" msgstr "nazwa użytkownika" -#: core/models/change_logging.py:47 +#: netbox/core/models/change_logging.py:47 msgid "request ID" msgstr "Identyfikator żądania" -#: core/models/change_logging.py:52 extras/models/staging.py:69 +#: netbox/core/models/change_logging.py:52 netbox/extras/models/staging.py:69 msgid "action" msgstr "działanie" -#: core/models/change_logging.py:86 +#: netbox/core/models/change_logging.py:86 msgid "pre-change data" msgstr "dane wstępnej zmiany" -#: core/models/change_logging.py:92 +#: netbox/core/models/change_logging.py:92 msgid "post-change data" msgstr "dane po zmianie" -#: core/models/change_logging.py:106 +#: netbox/core/models/change_logging.py:106 msgid "object change" msgstr "zmiana obiektu" -#: core/models/change_logging.py:107 +#: netbox/core/models/change_logging.py:107 msgid "object changes" msgstr "zmiany obiektu" -#: core/models/change_logging.py:123 +#: netbox/core/models/change_logging.py:123 #, python-brace-format msgid "Change logging is not supported for this object type ({type})." msgstr "" "Rejestracja zmian nie jest obsługiwana dla tego typu obiektu ({type})." -#: core/models/config.py:18 core/models/data.py:266 core/models/files.py:27 -#: core/models/jobs.py:49 extras/models/models.py:730 -#: extras/models/notifications.py:39 extras/models/notifications.py:186 -#: netbox/models/features.py:53 users/models/tokens.py:32 +#: netbox/core/models/config.py:18 netbox/core/models/data.py:266 +#: 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/notifications.py:186 +#: netbox/netbox/models/features.py:53 netbox/users/models/tokens.py:32 msgid "created" msgstr "utworzony" -#: core/models/config.py:22 +#: netbox/core/models/config.py:22 msgid "comment" msgstr "komentarz" -#: core/models/config.py:29 +#: netbox/core/models/config.py:29 msgid "configuration data" msgstr "dane konfiguracyjne" -#: core/models/config.py:36 +#: netbox/core/models/config.py:36 msgid "config revision" msgstr "wersja konfiguracji" -#: core/models/config.py:37 +#: netbox/core/models/config.py:37 msgid "config revisions" msgstr "poprawki konfiguracji" -#: core/models/config.py:41 +#: netbox/core/models/config.py:41 msgid "Default configuration" msgstr "Domyślna konfiguracja" -#: core/models/config.py:43 +#: netbox/core/models/config.py:43 msgid "Current configuration" msgstr "Bieżąca konfiguracja" -#: core/models/config.py:44 +#: netbox/core/models/config.py:44 #, python-brace-format msgid "Config revision #{id}" msgstr "Wersja konfiguracji #{id}" -#: core/models/data.py:44 dcim/models/cables.py:43 -#: dcim/models/device_component_templates.py:203 -#: dcim/models/device_component_templates.py:237 -#: dcim/models/device_component_templates.py:272 -#: dcim/models/device_component_templates.py:334 -#: dcim/models/device_component_templates.py:413 -#: dcim/models/device_component_templates.py:512 -#: dcim/models/device_component_templates.py:612 -#: dcim/models/device_components.py:283 dcim/models/device_components.py:312 -#: dcim/models/device_components.py:345 dcim/models/device_components.py:463 -#: dcim/models/device_components.py:605 dcim/models/device_components.py:970 -#: dcim/models/device_components.py:1044 dcim/models/power.py:102 -#: extras/models/customfields.py:78 extras/models/search.py:41 -#: virtualization/models/clusters.py:61 vpn/models/l2vpn.py:32 +#: 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/extras/models/search.py:41 +#: netbox/virtualization/models/clusters.py:61 netbox/vpn/models/l2vpn.py:32 msgid "type" msgstr "typ" -#: core/models/data.py:49 extras/choices.py:37 extras/models/models.py:164 -#: extras/tables/tables.py:656 templates/core/datasource.html:58 -#: templates/core/plugin.html:66 +#: netbox/core/models/data.py:49 netbox/extras/choices.py:37 +#: netbox/extras/models/models.py:164 netbox/extras/tables/tables.py:656 +#: netbox/templates/core/datasource.html:58 +#: netbox/templates/core/plugin.html:66 msgid "URL" msgstr "URL" -#: core/models/data.py:59 dcim/models/device_component_templates.py:418 -#: dcim/models/device_components.py:512 extras/models/models.py:70 -#: extras/models/models.py:301 extras/models/models.py:526 -#: users/models/permissions.py:29 +#: netbox/core/models/data.py:59 +#: netbox/dcim/models/device_component_templates.py:418 +#: netbox/dcim/models/device_components.py:512 +#: 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" msgstr "włączone" -#: core/models/data.py:63 +#: netbox/core/models/data.py:63 msgid "ignore rules" msgstr "ignoruj zasady" -#: core/models/data.py:65 +#: netbox/core/models/data.py:65 msgid "Patterns (one per line) matching files to ignore when syncing" msgstr "" "Wzory (jeden na wiersz) pasujące do plików do zignorowania podczas " "synchronizacji" -#: core/models/data.py:68 extras/models/models.py:534 +#: netbox/core/models/data.py:68 netbox/extras/models/models.py:534 msgid "parameters" msgstr "parametry" -#: core/models/data.py:73 +#: netbox/core/models/data.py:73 msgid "last synced" msgstr "ostatnio zsynchronizowane" -#: core/models/data.py:81 +#: netbox/core/models/data.py:81 msgid "data source" msgstr "źródło danych" -#: core/models/data.py:82 +#: netbox/core/models/data.py:82 msgid "data sources" msgstr "źródła danych" -#: core/models/data.py:122 +#: netbox/core/models/data.py:122 #, python-brace-format msgid "Unknown backend type: {type}" msgstr "Nieznany typ zaplecza: {type}" -#: core/models/data.py:164 +#: netbox/core/models/data.py:164 msgid "Cannot initiate sync; syncing already in progress." msgstr "Nie można zainicjować synchronizacji; synchronizacja jest już w toku." -#: core/models/data.py:177 +#: netbox/core/models/data.py:177 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ść: " -#: core/models/data.py:270 core/models/files.py:31 -#: netbox/models/features.py:59 +#: netbox/core/models/data.py:270 netbox/core/models/files.py:31 +#: netbox/netbox/models/features.py:59 msgid "last updated" msgstr "Ostatnia aktualizacja" -#: core/models/data.py:280 dcim/models/cables.py:444 +#: netbox/core/models/data.py:280 netbox/dcim/models/cables.py:444 msgid "path" msgstr "ścieżka" -#: core/models/data.py:283 +#: netbox/core/models/data.py:283 msgid "File path relative to the data source's root" msgstr "Ścieżka pliku względem katalogu głównego źródła danych" -#: core/models/data.py:287 ipam/models/ip.py:503 +#: netbox/core/models/data.py:287 netbox/ipam/models/ip.py:503 msgid "size" msgstr "rozmiar" -#: core/models/data.py:290 +#: netbox/core/models/data.py:290 msgid "hash" msgstr "haszysz" -#: core/models/data.py:294 +#: netbox/core/models/data.py:294 msgid "Length must be 64 hexadecimal characters." msgstr "Długość musi wynosić 64 znaki szesnastkowe." -#: core/models/data.py:296 +#: netbox/core/models/data.py:296 msgid "SHA256 hash of the file data" msgstr "Skrót danych pliku SHA256" -#: core/models/data.py:313 +#: netbox/core/models/data.py:313 msgid "data file" msgstr "plik danych" -#: core/models/data.py:314 +#: netbox/core/models/data.py:314 msgid "data files" msgstr "pliki danych" -#: core/models/data.py:401 +#: netbox/core/models/data.py:401 msgid "auto sync record" msgstr "zapis automatycznej synchronizacji" -#: core/models/data.py:402 +#: netbox/core/models/data.py:402 msgid "auto sync records" msgstr "automatyczna synchronizacja rekordów" -#: core/models/files.py:37 +#: netbox/core/models/files.py:37 msgid "file root" msgstr "root pliku" -#: core/models/files.py:42 +#: netbox/core/models/files.py:42 msgid "file path" msgstr "ścieżka pliku" -#: core/models/files.py:44 +#: netbox/core/models/files.py:44 msgid "File path relative to the designated root path" msgstr "Ścieżka pliku względem wyznaczonej ścieżki głównej" -#: core/models/files.py:61 +#: netbox/core/models/files.py:61 msgid "managed file" msgstr "plik zarządzany" -#: core/models/files.py:62 +#: netbox/core/models/files.py:62 msgid "managed files" msgstr "zarządzane pliki" -#: core/models/jobs.py:53 +#: netbox/core/models/jobs.py:54 msgid "scheduled" msgstr "planowy" -#: core/models/jobs.py:58 +#: netbox/core/models/jobs.py:59 msgid "interval" msgstr "interwał" -#: core/models/jobs.py:64 +#: netbox/core/models/jobs.py:65 msgid "Recurrence interval (in minutes)" msgstr "Odstęp nawrotów (w minutach)" -#: core/models/jobs.py:67 +#: netbox/core/models/jobs.py:68 msgid "started" msgstr "rozpoczął się" -#: core/models/jobs.py:72 +#: netbox/core/models/jobs.py:73 msgid "completed" msgstr "ukończony" -#: core/models/jobs.py:90 extras/models/models.py:101 -#: extras/models/staging.py:87 +#: netbox/core/models/jobs.py:91 netbox/extras/models/models.py:101 +#: netbox/extras/models/staging.py:87 msgid "data" msgstr "dane" -#: core/models/jobs.py:95 +#: netbox/core/models/jobs.py:96 msgid "error" msgstr "błąd" -#: core/models/jobs.py:100 +#: netbox/core/models/jobs.py:101 msgid "job ID" msgstr "ID pracy" -#: core/models/jobs.py:111 +#: netbox/core/models/jobs.py:112 msgid "job" msgstr "pracy" -#: core/models/jobs.py:112 +#: netbox/core/models/jobs.py:113 msgid "jobs" msgstr "prace" -#: core/models/jobs.py:135 +#: netbox/core/models/jobs.py:136 #, python-brace-format msgid "Jobs cannot be assigned to this object type ({type})." msgstr "Zadania nie mogą być przypisane do tego typu obiektu ({type})." -#: core/models/jobs.py:185 +#: netbox/core/models/jobs.py:190 #, python-brace-format msgid "Invalid status for job termination. Choices are: {choices}" msgstr "Nieprawidłowy status zakończenia pracy. Wybory to: {choices}" -#: core/models/jobs.py:216 +#: netbox/core/models/jobs.py:221 msgid "" "enqueue() cannot be called with values for both schedule_at and immediate." msgstr "" "enqueue () nie można wywołać z wartościami zarówno dla schedule_at, jak i " "natychmiastowego." -#: core/signals.py:126 +#: netbox/core/signals.py:126 #, python-brace-format msgid "Deletion is prevented by a protection rule: {message}" msgstr "Usuwanie jest zapobiegane przez regułę ochrony: {message}" -#: core/tables/change_logging.py:25 templates/account/profile.html:19 -#: templates/users/user.html:21 +#: netbox/core/tables/change_logging.py:25 +#: netbox/templates/account/profile.html:19 +#: netbox/templates/users/user.html:21 msgid "Full Name" msgstr "Pełne imię i nazwisko" -#: core/tables/change_logging.py:37 core/tables/jobs.py:21 -#: extras/choices.py:41 extras/tables/tables.py:279 -#: extras/tables/tables.py:297 extras/tables/tables.py:329 -#: extras/tables/tables.py:409 extras/tables/tables.py:470 -#: extras/tables/tables.py:576 extras/tables/tables.py:616 -#: extras/tables/tables.py:653 netbox/tables/tables.py:244 -#: templates/core/objectchange.html:58 templates/extras/eventrule.html:78 -#: templates/extras/journalentry.html:18 tenancy/tables/contacts.py:93 -#: vpn/tables/l2vpn.py:64 +#: netbox/core/tables/change_logging.py:37 netbox/core/tables/jobs.py:21 +#: netbox/extras/choices.py:41 netbox/extras/tables/tables.py:279 +#: 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/templates/core/objectchange.html:58 +#: netbox/templates/extras/eventrule.html:78 +#: netbox/templates/extras/journalentry.html:18 +#: netbox/tenancy/tables/contacts.py:93 netbox/vpn/tables/l2vpn.py:64 msgid "Object" msgstr "Przedmiot" -#: core/tables/change_logging.py:42 templates/core/objectchange.html:68 +#: netbox/core/tables/change_logging.py:42 +#: netbox/templates/core/objectchange.html:68 msgid "Request ID" msgstr "Identyfikator żądania" -#: core/tables/config.py:21 users/forms/filtersets.py:44 users/tables.py:39 +#: netbox/core/tables/config.py:21 netbox/users/forms/filtersets.py:44 +#: netbox/users/tables.py:39 msgid "Is Active" msgstr "Jest aktywny" -#: core/tables/data.py:50 templates/core/datafile.html:31 +#: netbox/core/tables/data.py:50 netbox/templates/core/datafile.html:31 msgid "Path" msgstr "Ścieżka" -#: core/tables/data.py:54 templates/extras/inc/result_pending.html:7 +#: netbox/core/tables/data.py:54 +#: netbox/templates/extras/inc/result_pending.html:7 msgid "Last updated" msgstr "Ostatnia aktualizacja" -#: core/tables/jobs.py:10 core/tables/tasks.py:76 -#: dcim/tables/devicetypes.py:164 extras/tables/tables.py:216 -#: extras/tables/tables.py:460 netbox/tables/tables.py:189 -#: templates/dcim/virtualchassis_edit.html:52 utilities/forms/forms.py:73 -#: wireless/tables/wirelesslink.py:17 +#: 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/templates/dcim/virtualchassis_edit.html:52 +#: netbox/utilities/forms/forms.py:73 +#: netbox/wireless/tables/wirelesslink.py:17 msgid "ID" msgstr "IDENTYFIKATOR" -#: core/tables/jobs.py:35 +#: netbox/core/tables/jobs.py:35 msgid "Interval" msgstr "Przedział" -#: core/tables/plugins.py:14 templates/vpn/ipsecprofile.html:44 -#: vpn/forms/bulk_edit.py:141 vpn/forms/bulk_import.py:172 -#: vpn/tables/crypto.py:61 +#: netbox/core/tables/plugins.py:14 netbox/templates/vpn/ipsecprofile.html:44 +#: netbox/vpn/forms/bulk_edit.py:141 netbox/vpn/forms/bulk_import.py:172 +#: netbox/vpn/tables/crypto.py:61 msgid "Version" msgstr "Wersja" -#: core/tables/plugins.py:19 templates/core/datafile.html:38 +#: netbox/core/tables/plugins.py:19 netbox/templates/core/datafile.html:38 msgid "Last Updated" msgstr "Ostatnia aktualizacja" -#: core/tables/plugins.py:23 +#: netbox/core/tables/plugins.py:23 msgid "Minimum NetBox Version" msgstr "Minimalna wersja NetBox" -#: core/tables/plugins.py:27 +#: netbox/core/tables/plugins.py:27 msgid "Maximum NetBox Version" msgstr "Maksymalna wersja NetBox" -#: core/tables/plugins.py:31 core/tables/plugins.py:74 +#: netbox/core/tables/plugins.py:31 netbox/core/tables/plugins.py:74 msgid "No plugin data found" msgstr "Nie znaleziono danych wtyczki" -#: core/tables/plugins.py:48 templates/core/plugin.html:62 +#: netbox/core/tables/plugins.py:48 netbox/templates/core/plugin.html:62 msgid "Author" msgstr "Autor" -#: core/tables/plugins.py:54 +#: netbox/core/tables/plugins.py:54 msgid "Installed" msgstr "Zainstalowany" -#: core/tables/plugins.py:57 templates/core/plugin.html:84 +#: netbox/core/tables/plugins.py:57 netbox/templates/core/plugin.html:84 msgid "Certified" msgstr "Certyfikowany" -#: core/tables/plugins.py:60 +#: netbox/core/tables/plugins.py:60 msgid "Published" msgstr "Opublikowano" -#: core/tables/plugins.py:66 +#: netbox/core/tables/plugins.py:66 msgid "Installed Version" msgstr "Zainstalowana wersja" -#: core/tables/plugins.py:70 +#: netbox/core/tables/plugins.py:70 msgid "Latest Version" msgstr "Najnowsza wersja" -#: core/tables/tasks.py:18 +#: netbox/core/tables/tasks.py:18 msgid "Oldest Task" msgstr "Najstarsze zadanie" -#: core/tables/tasks.py:42 templates/core/rq_worker_list.html:39 +#: netbox/core/tables/tasks.py:42 netbox/templates/core/rq_worker_list.html:39 msgid "Workers" msgstr "Pracownicy" -#: core/tables/tasks.py:46 vpn/tables/tunnels.py:88 +#: netbox/core/tables/tasks.py:46 netbox/vpn/tables/tunnels.py:88 msgid "Host" msgstr "Gospodarz" -#: core/tables/tasks.py:50 ipam/forms/filtersets.py:535 +#: netbox/core/tables/tasks.py:50 netbox/ipam/forms/filtersets.py:535 msgid "Port" msgstr "Port" -#: core/tables/tasks.py:54 +#: netbox/core/tables/tasks.py:54 msgid "DB" msgstr "DB" -#: core/tables/tasks.py:58 +#: netbox/core/tables/tasks.py:58 msgid "Scheduler PID" msgstr "Harmonogram PID" -#: core/tables/tasks.py:62 +#: netbox/core/tables/tasks.py:62 msgid "No queues found" msgstr "Nie znaleziono kolejek" -#: core/tables/tasks.py:82 +#: netbox/core/tables/tasks.py:82 msgid "Enqueued" msgstr "W kolejce" -#: core/tables/tasks.py:85 +#: netbox/core/tables/tasks.py:85 msgid "Ended" msgstr "Zakończony" -#: core/tables/tasks.py:93 templates/core/rq_task.html:85 +#: netbox/core/tables/tasks.py:93 netbox/templates/core/rq_task.html:85 msgid "Callable" msgstr "Możliwość wywołania" -#: core/tables/tasks.py:97 +#: netbox/core/tables/tasks.py:97 msgid "No tasks found" msgstr "Nie znaleziono zadań" -#: core/tables/tasks.py:118 templates/core/rq_worker.html:47 +#: netbox/core/tables/tasks.py:118 netbox/templates/core/rq_worker.html:47 msgid "State" msgstr "Stan" -#: core/tables/tasks.py:121 templates/core/rq_worker.html:51 +#: netbox/core/tables/tasks.py:121 netbox/templates/core/rq_worker.html:51 msgid "Birth" msgstr "Narodziny" -#: core/tables/tasks.py:124 templates/core/rq_worker.html:59 +#: netbox/core/tables/tasks.py:124 netbox/templates/core/rq_worker.html:59 msgid "PID" msgstr "PID" -#: core/tables/tasks.py:128 +#: netbox/core/tables/tasks.py:128 msgid "No workers found" msgstr "Nie znaleziono pracowników" -#: core/views.py:90 +#: netbox/core/views.py:90 #, python-brace-format msgid "Queued job #{id} to sync {datasource}" msgstr "Zadanie w kolejce #{id} zsynchronizować {datasource}" -#: core/views.py:319 +#: netbox/core/views.py:319 #, python-brace-format msgid "Restored configuration revision #{id}" msgstr "Przywrócona wersja konfiguracji #{id}" -#: core/views.py:412 core/views.py:455 core/views.py:531 +#: 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 "Praca {job_id} nie znaleziono" -#: core/views.py:463 +#: netbox/core/views.py:463 #, python-brace-format msgid "Job {id} has been deleted." msgstr "Praca {id} został usunięty." -#: core/views.py:465 +#: netbox/core/views.py:465 #, python-brace-format msgid "Error deleting job {id}: {error}" msgstr "Błąd usuwania zadania {id}: {error}" -#: core/views.py:478 core/views.py:496 +#: netbox/core/views.py:478 netbox/core/views.py:496 #, python-brace-format msgid "Job {id} not found." msgstr "Praca {id} nie znaleziono." -#: core/views.py:484 +#: netbox/core/views.py:484 #, python-brace-format msgid "Job {id} has been re-enqueued." msgstr "Praca {id} został ponownie ustawiony w kolejce." -#: core/views.py:519 +#: netbox/core/views.py:519 #, python-brace-format msgid "Job {id} has been enqueued." msgstr "Praca {id} został ustawiony w kolejce." -#: core/views.py:538 +#: netbox/core/views.py:538 #, python-brace-format msgid "Job {id} has been stopped." msgstr "Praca {id} został zatrzymany." -#: core/views.py:540 +#: netbox/core/views.py:540 #, python-brace-format msgid "Failed to stop job {id}" msgstr "Nie udało się zatrzymać zadania {id}" -#: core/views.py:678 +#: netbox/core/views.py:674 msgid "Plugins catalog could not be loaded" msgstr "Nie można załadować katalogu wtyczek" -#: core/views.py:712 +#: netbox/core/views.py:708 #, python-brace-format msgid "Plugin {name} not found" msgstr "Wtyczka {name} nie znaleziono" -#: dcim/api/serializers_/devices.py:49 dcim/api/serializers_/devicetypes.py:25 +#: netbox/dcim/api/serializers_/devices.py:49 +#: netbox/dcim/api/serializers_/devicetypes.py:25 msgid "Position (U)" msgstr "Pozycja (U)" -#: dcim/api/serializers_/racks.py:112 templates/dcim/rack.html:28 +#: netbox/dcim/api/serializers_/racks.py:112 +#: netbox/templates/dcim/rack.html:28 msgid "Facility ID" msgstr "Identyfikator obiektu" -#: dcim/choices.py:21 virtualization/choices.py:21 +#: netbox/dcim/choices.py:21 netbox/virtualization/choices.py:21 msgid "Staging" msgstr "Inscenizacja" -#: dcim/choices.py:23 dcim/choices.py:189 dcim/choices.py:240 -#: dcim/choices.py:1531 virtualization/choices.py:23 -#: virtualization/choices.py:48 +#: 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 msgid "Decommissioning" msgstr "Wycofanie z eksploatacji" -#: dcim/choices.py:24 +#: netbox/dcim/choices.py:24 msgid "Retired" msgstr "Emerytowany" -#: dcim/choices.py:65 +#: netbox/dcim/choices.py:65 msgid "2-post frame" msgstr "Rama 2-słupkowa" -#: dcim/choices.py:66 +#: netbox/dcim/choices.py:66 msgid "4-post frame" msgstr "Rama 4-słupkowa" -#: dcim/choices.py:67 +#: netbox/dcim/choices.py:67 msgid "4-post cabinet" msgstr "Szafka 4-słupkowa" -#: dcim/choices.py:68 +#: netbox/dcim/choices.py:68 msgid "Wall-mounted frame" msgstr "Rama naścienna" -#: dcim/choices.py:69 +#: netbox/dcim/choices.py:69 msgid "Wall-mounted frame (vertical)" msgstr "Rama naścienna (pionowa)" -#: dcim/choices.py:70 +#: netbox/dcim/choices.py:70 msgid "Wall-mounted cabinet" msgstr "Szafka naścienna" -#: dcim/choices.py:71 +#: netbox/dcim/choices.py:71 msgid "Wall-mounted cabinet (vertical)" msgstr "Szafka naścienna (pionowa)" -#: dcim/choices.py:83 dcim/choices.py:84 dcim/choices.py:85 dcim/choices.py:86 +#: netbox/dcim/choices.py:83 netbox/dcim/choices.py:84 +#: netbox/dcim/choices.py:85 netbox/dcim/choices.py:86 #, python-brace-format msgid "{n} inches" msgstr "{n} cale" -#: dcim/choices.py:100 ipam/choices.py:32 ipam/choices.py:50 -#: ipam/choices.py:70 ipam/choices.py:155 wireless/choices.py:26 +#: netbox/dcim/choices.py:100 netbox/ipam/choices.py:32 +#: netbox/ipam/choices.py:50 netbox/ipam/choices.py:70 +#: netbox/ipam/choices.py:155 netbox/wireless/choices.py:26 msgid "Reserved" msgstr "Zastrzeżone" -#: dcim/choices.py:101 templates/dcim/device.html:259 +#: netbox/dcim/choices.py:101 netbox/templates/dcim/device.html:259 msgid "Available" msgstr "Dostępny" -#: dcim/choices.py:104 ipam/choices.py:33 ipam/choices.py:51 -#: ipam/choices.py:71 ipam/choices.py:156 wireless/choices.py:28 +#: netbox/dcim/choices.py:104 netbox/ipam/choices.py:33 +#: netbox/ipam/choices.py:51 netbox/ipam/choices.py:71 +#: netbox/ipam/choices.py:156 netbox/wireless/choices.py:28 msgid "Deprecated" msgstr "Przestarzałe" -#: dcim/choices.py:114 templates/dcim/inc/panels/racktype_dimensions.html:41 +#: netbox/dcim/choices.py:114 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:41 msgid "Millimeters" msgstr "Milimetrów" -#: dcim/choices.py:115 dcim/choices.py:1553 +#: netbox/dcim/choices.py:115 netbox/dcim/choices.py:1555 msgid "Inches" msgstr "Cale" -#: dcim/choices.py:136 dcim/choices.py:207 dcim/choices.py:254 +#: netbox/dcim/choices.py:136 netbox/dcim/choices.py:207 +#: netbox/dcim/choices.py:254 msgid "Front to rear" msgstr "Przód do tyłu" -#: dcim/choices.py:137 dcim/choices.py:208 dcim/choices.py:255 +#: netbox/dcim/choices.py:137 netbox/dcim/choices.py:208 +#: netbox/dcim/choices.py:255 msgid "Rear to front" msgstr "Tył do przodu" -#: dcim/choices.py:151 dcim/forms/bulk_edit.py:68 dcim/forms/bulk_edit.py:87 -#: dcim/forms/bulk_edit.py:173 dcim/forms/bulk_edit.py:1405 -#: dcim/forms/bulk_import.py:60 dcim/forms/bulk_import.py:74 -#: dcim/forms/bulk_import.py:137 dcim/forms/bulk_import.py:566 -#: dcim/forms/bulk_import.py:833 dcim/forms/bulk_import.py:1088 -#: dcim/forms/filtersets.py:234 dcim/forms/model_forms.py:74 -#: dcim/forms/model_forms.py:93 dcim/forms/model_forms.py:170 -#: dcim/forms/model_forms.py:1062 dcim/forms/model_forms.py:1502 -#: dcim/forms/object_import.py:176 dcim/tables/devices.py:656 -#: dcim/tables/devices.py:869 dcim/tables/devices.py:954 -#: extras/tables/tables.py:223 ipam/tables/fhrp.py:59 ipam/tables/ip.py:378 -#: ipam/tables/services.py:44 templates/dcim/interface.html:102 -#: templates/dcim/interface.html:309 templates/dcim/location.html:41 -#: templates/dcim/region.html:37 templates/dcim/sitegroup.html:37 -#: templates/ipam/service.html:28 templates/tenancy/contactgroup.html:29 -#: templates/tenancy/tenantgroup.html:37 -#: templates/virtualization/vminterface.html:39 -#: templates/wireless/wirelesslangroup.html:37 tenancy/forms/bulk_edit.py:27 -#: tenancy/forms/bulk_edit.py:61 tenancy/forms/bulk_import.py:24 -#: tenancy/forms/bulk_import.py:58 tenancy/forms/model_forms.py:25 -#: tenancy/forms/model_forms.py:68 virtualization/forms/bulk_edit.py:207 -#: virtualization/forms/bulk_import.py:151 -#: virtualization/tables/virtualmachines.py:162 wireless/forms/bulk_edit.py:24 -#: wireless/forms/bulk_import.py:21 wireless/forms/model_forms.py:21 +#: 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/templates/dcim/location.html:41 netbox/templates/dcim/region.html:37 +#: netbox/templates/dcim/sitegroup.html:37 +#: netbox/templates/ipam/service.html:28 +#: netbox/templates/tenancy/contactgroup.html:29 +#: netbox/templates/tenancy/tenantgroup.html:37 +#: netbox/templates/virtualization/vminterface.html:39 +#: netbox/templates/wireless/wirelesslangroup.html:37 +#: netbox/tenancy/forms/bulk_edit.py:27 netbox/tenancy/forms/bulk_edit.py:61 +#: netbox/tenancy/forms/bulk_import.py:24 +#: netbox/tenancy/forms/bulk_import.py:58 +#: netbox/tenancy/forms/model_forms.py:25 +#: netbox/tenancy/forms/model_forms.py:68 +#: netbox/virtualization/forms/bulk_edit.py:207 +#: netbox/virtualization/forms/bulk_import.py:151 +#: netbox/virtualization/tables/virtualmachines.py:162 +#: netbox/wireless/forms/bulk_edit.py:24 +#: netbox/wireless/forms/bulk_import.py:21 +#: netbox/wireless/forms/model_forms.py:21 msgid "Parent" msgstr "Rodzic" -#: dcim/choices.py:152 +#: netbox/dcim/choices.py:152 msgid "Child" msgstr "Dziecko" -#: dcim/choices.py:166 templates/dcim/device.html:340 -#: templates/dcim/rack.html:133 templates/dcim/rack_elevation_list.html:20 -#: templates/dcim/rackreservation.html:76 +#: netbox/dcim/choices.py:166 netbox/templates/dcim/device.html:340 +#: netbox/templates/dcim/rack.html:133 +#: netbox/templates/dcim/rack_elevation_list.html:20 +#: netbox/templates/dcim/rackreservation.html:76 msgid "Front" msgstr "Przód" -#: dcim/choices.py:167 templates/dcim/device.html:346 -#: templates/dcim/rack.html:139 templates/dcim/rack_elevation_list.html:21 -#: templates/dcim/rackreservation.html:82 +#: netbox/dcim/choices.py:167 netbox/templates/dcim/device.html:346 +#: netbox/templates/dcim/rack.html:139 +#: netbox/templates/dcim/rack_elevation_list.html:21 +#: netbox/templates/dcim/rackreservation.html:82 msgid "Rear" msgstr "Tył" -#: dcim/choices.py:186 dcim/choices.py:238 virtualization/choices.py:46 +#: netbox/dcim/choices.py:186 netbox/dcim/choices.py:238 +#: netbox/virtualization/choices.py:46 msgid "Staged" msgstr "Inscenizowane" -#: dcim/choices.py:188 +#: netbox/dcim/choices.py:188 msgid "Inventory" msgstr "Inwentaryzacja" -#: dcim/choices.py:209 dcim/choices.py:256 +#: netbox/dcim/choices.py:209 netbox/dcim/choices.py:256 msgid "Left to right" msgstr "Od lewej do prawej" -#: dcim/choices.py:210 dcim/choices.py:257 +#: netbox/dcim/choices.py:210 netbox/dcim/choices.py:257 msgid "Right to left" msgstr "Od prawej do lewej" -#: dcim/choices.py:211 dcim/choices.py:258 +#: netbox/dcim/choices.py:211 netbox/dcim/choices.py:258 msgid "Side to rear" msgstr "Z boku do tyłu" -#: dcim/choices.py:212 +#: netbox/dcim/choices.py:212 msgid "Rear to side" msgstr "Tył na bok" -#: dcim/choices.py:213 +#: netbox/dcim/choices.py:213 msgid "Bottom to top" msgstr "Od dołu do góry" -#: dcim/choices.py:214 +#: netbox/dcim/choices.py:214 msgid "Top to bottom" msgstr "Od góry do dołu" -#: dcim/choices.py:215 dcim/choices.py:259 dcim/choices.py:1303 +#: netbox/dcim/choices.py:215 netbox/dcim/choices.py:259 +#: netbox/dcim/choices.py:1305 msgid "Passive" msgstr "Pasywny" -#: dcim/choices.py:216 +#: netbox/dcim/choices.py:216 msgid "Mixed" msgstr "Mieszane" -#: dcim/choices.py:484 dcim/choices.py:733 +#: netbox/dcim/choices.py:484 netbox/dcim/choices.py:733 msgid "NEMA (Non-locking)" msgstr "NEMA (bez blokowania)" -#: dcim/choices.py:506 dcim/choices.py:755 +#: netbox/dcim/choices.py:506 netbox/dcim/choices.py:755 msgid "NEMA (Locking)" msgstr "NEMA (Blokowanie)" -#: dcim/choices.py:530 dcim/choices.py:779 +#: netbox/dcim/choices.py:530 netbox/dcim/choices.py:779 msgid "California Style" msgstr "Styl kalifornijski" -#: dcim/choices.py:538 +#: netbox/dcim/choices.py:538 msgid "International/ITA" msgstr "Międzynarodowy/ITA" -#: dcim/choices.py:573 dcim/choices.py:814 +#: netbox/dcim/choices.py:573 netbox/dcim/choices.py:814 msgid "Proprietary" msgstr "Własnościowy" -#: dcim/choices.py:581 dcim/choices.py:824 dcim/choices.py:1219 -#: dcim/choices.py:1221 dcim/choices.py:1447 dcim/choices.py:1449 -#: netbox/navigation/menu.py:200 +#: 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 msgid "Other" msgstr "Pozostałe" -#: dcim/choices.py:787 +#: netbox/dcim/choices.py:787 msgid "ITA/International" msgstr "ITA/Międzynarodowy" -#: dcim/choices.py:854 +#: netbox/dcim/choices.py:854 msgid "Physical" msgstr "Fizyczne" -#: dcim/choices.py:855 dcim/choices.py:1023 +#: netbox/dcim/choices.py:855 netbox/dcim/choices.py:1024 msgid "Virtual" msgstr "Wirtualny" -#: dcim/choices.py:856 dcim/choices.py:1097 dcim/forms/bulk_edit.py:1515 -#: dcim/forms/filtersets.py:1330 dcim/forms/model_forms.py:988 -#: dcim/forms/model_forms.py:1397 netbox/navigation/menu.py:140 -#: netbox/navigation/menu.py:144 templates/dcim/interface.html:210 +#: 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 msgid "Wireless" msgstr "Bezprzewodowy" -#: dcim/choices.py:1021 +#: netbox/dcim/choices.py:1022 msgid "Virtual interfaces" msgstr "Interfejsy wirtualne" -#: dcim/choices.py:1024 dcim/forms/bulk_edit.py:1410 -#: dcim/forms/bulk_import.py:840 dcim/forms/model_forms.py:974 -#: dcim/tables/devices.py:660 templates/dcim/interface.html:106 -#: templates/virtualization/vminterface.html:43 -#: virtualization/forms/bulk_edit.py:212 -#: virtualization/forms/bulk_import.py:158 -#: virtualization/tables/virtualmachines.py:166 +#: 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/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 msgid "Bridge" msgstr "Most" -#: dcim/choices.py:1025 +#: netbox/dcim/choices.py:1026 msgid "Link Aggregation Group (LAG)" msgstr "Grupa agregacji linków (LGD)" -#: dcim/choices.py:1029 +#: netbox/dcim/choices.py:1030 msgid "Ethernet (fixed)" msgstr "Ethernet (stały)" -#: dcim/choices.py:1044 +#: netbox/dcim/choices.py:1046 msgid "Ethernet (modular)" msgstr "Ethernet (modułowy)" -#: dcim/choices.py:1081 +#: netbox/dcim/choices.py:1083 msgid "Ethernet (backplane)" msgstr "Ethernet (płaszczyzna tylna)" -#: dcim/choices.py:1113 +#: netbox/dcim/choices.py:1115 msgid "Cellular" msgstr "Komórkowy" -#: dcim/choices.py:1165 dcim/forms/filtersets.py:383 -#: dcim/forms/filtersets.py:809 dcim/forms/filtersets.py:963 -#: dcim/forms/filtersets.py:1542 templates/dcim/inventoryitem.html:52 -#: templates/dcim/virtualchassis_edit.html:54 +#: 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/templates/dcim/virtualchassis_edit.html:54 msgid "Serial" msgstr "Seryjny" -#: dcim/choices.py:1180 +#: netbox/dcim/choices.py:1182 msgid "Coaxial" msgstr "koncentryczny" -#: dcim/choices.py:1200 +#: netbox/dcim/choices.py:1202 msgid "Stacking" msgstr "Układanie" -#: dcim/choices.py:1250 +#: netbox/dcim/choices.py:1252 msgid "Half" msgstr "Połowa" -#: dcim/choices.py:1251 +#: netbox/dcim/choices.py:1253 msgid "Full" msgstr "Pełny" -#: dcim/choices.py:1252 netbox/preferences.py:31 wireless/choices.py:480 +#: netbox/dcim/choices.py:1254 netbox/netbox/preferences.py:31 +#: netbox/wireless/choices.py:480 msgid "Auto" msgstr "Automatyczny" -#: dcim/choices.py:1263 +#: netbox/dcim/choices.py:1265 msgid "Access" msgstr "Dostęp" -#: dcim/choices.py:1264 ipam/tables/vlans.py:172 ipam/tables/vlans.py:217 -#: templates/dcim/inc/interface_vlans_table.html:7 +#: 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 "Oznaczone" -#: dcim/choices.py:1265 +#: netbox/dcim/choices.py:1267 msgid "Tagged (All)" msgstr "Oznaczone (Wszystkie)" -#: dcim/choices.py:1294 +#: netbox/dcim/choices.py:1296 msgid "IEEE Standard" msgstr "Standard IEEE" -#: dcim/choices.py:1305 +#: netbox/dcim/choices.py:1307 msgid "Passive 24V (2-pair)" msgstr "Pasywny 24V (2 pary)" -#: dcim/choices.py:1306 +#: netbox/dcim/choices.py:1308 msgid "Passive 24V (4-pair)" msgstr "Pasywny 24V (4-parowy)" -#: dcim/choices.py:1307 +#: netbox/dcim/choices.py:1309 msgid "Passive 48V (2-pair)" msgstr "Pasywny 48V (2 pary)" -#: dcim/choices.py:1308 +#: netbox/dcim/choices.py:1310 msgid "Passive 48V (4-pair)" msgstr "Pasywny 48V (4 pary)" -#: dcim/choices.py:1378 dcim/choices.py:1488 +#: netbox/dcim/choices.py:1380 netbox/dcim/choices.py:1490 msgid "Copper" msgstr "Miedź" -#: dcim/choices.py:1401 +#: netbox/dcim/choices.py:1403 msgid "Fiber Optic" msgstr "Światłowód" -#: dcim/choices.py:1434 dcim/choices.py:1517 +#: netbox/dcim/choices.py:1436 netbox/dcim/choices.py:1519 msgid "USB" msgstr "USB" -#: dcim/choices.py:1504 +#: netbox/dcim/choices.py:1506 msgid "Fiber" msgstr "Włókno" -#: dcim/choices.py:1529 dcim/forms/filtersets.py:1227 +#: netbox/dcim/choices.py:1531 netbox/dcim/forms/filtersets.py:1227 msgid "Connected" msgstr "Połączony" -#: dcim/choices.py:1548 wireless/choices.py:497 +#: netbox/dcim/choices.py:1550 netbox/wireless/choices.py:497 msgid "Kilometers" msgstr "Kilometry" -#: dcim/choices.py:1549 templates/dcim/cable_trace.html:65 -#: wireless/choices.py:498 +#: netbox/dcim/choices.py:1551 netbox/templates/dcim/cable_trace.html:65 +#: netbox/wireless/choices.py:498 msgid "Meters" msgstr "Mierniki" -#: dcim/choices.py:1550 +#: netbox/dcim/choices.py:1552 msgid "Centimeters" msgstr "Centymetry" -#: dcim/choices.py:1551 wireless/choices.py:499 +#: netbox/dcim/choices.py:1553 netbox/wireless/choices.py:499 msgid "Miles" msgstr "Mile" -#: dcim/choices.py:1552 templates/dcim/cable_trace.html:66 -#: wireless/choices.py:500 +#: netbox/dcim/choices.py:1554 netbox/templates/dcim/cable_trace.html:66 +#: netbox/wireless/choices.py:500 msgid "Feet" msgstr "Stopy" -#: dcim/choices.py:1568 templates/dcim/device.html:327 -#: templates/dcim/rack.html:107 +#: netbox/dcim/choices.py:1570 netbox/templates/dcim/device.html:327 +#: netbox/templates/dcim/rack.html:107 msgid "Kilograms" msgstr "Kilogramy" -#: dcim/choices.py:1569 +#: netbox/dcim/choices.py:1571 msgid "Grams" msgstr "Gramy" -#: dcim/choices.py:1570 templates/dcim/device.html:328 -#: templates/dcim/rack.html:108 +#: netbox/dcim/choices.py:1572 netbox/templates/dcim/device.html:328 +#: netbox/templates/dcim/rack.html:108 msgid "Pounds" msgstr "funty" -#: dcim/choices.py:1571 +#: netbox/dcim/choices.py:1573 msgid "Ounces" msgstr "Uncja" -#: dcim/choices.py:1618 +#: netbox/dcim/choices.py:1620 msgid "Redundant" msgstr "Nadmiarowy" -#: dcim/choices.py:1639 +#: netbox/dcim/choices.py:1641 msgid "Single phase" msgstr "Jednofazowy" -#: dcim/choices.py:1640 +#: netbox/dcim/choices.py:1642 msgid "Three-phase" msgstr "Trójfazowy" -#: dcim/fields.py:45 +#: netbox/dcim/fields.py:45 #, python-brace-format msgid "Invalid MAC address format: {value}" msgstr "Nieprawidłowy format adresu MAC: {value}" -#: dcim/fields.py:71 +#: netbox/dcim/fields.py:71 #, python-brace-format msgid "Invalid WWN format: {value}" msgstr "Nieprawidłowy format WWN: {value}" -#: dcim/filtersets.py:86 +#: netbox/dcim/filtersets.py:86 msgid "Parent region (ID)" msgstr "Region macierzysty (ID)" -#: dcim/filtersets.py:92 +#: netbox/dcim/filtersets.py:92 msgid "Parent region (slug)" msgstr "Region macierzysty (identyfikator)" -#: dcim/filtersets.py:116 +#: netbox/dcim/filtersets.py:116 msgid "Parent site group (ID)" msgstr "Nadrzędna grupa witryn (ID)" -#: dcim/filtersets.py:122 +#: netbox/dcim/filtersets.py:122 msgid "Parent site group (slug)" msgstr "Nadrzędna grupa terenów (identyfikator)" -#: dcim/filtersets.py:164 extras/filtersets.py:364 ipam/filtersets.py:841 -#: ipam/filtersets.py:993 +#: netbox/dcim/filtersets.py:164 netbox/extras/filtersets.py:364 +#: netbox/ipam/filtersets.py:841 netbox/ipam/filtersets.py:993 msgid "Group (ID)" msgstr "Grupa (ID)" -#: dcim/filtersets.py:170 +#: netbox/dcim/filtersets.py:170 msgid "Group (slug)" msgstr "Grupa (identyfikator)" -#: dcim/filtersets.py:176 dcim/filtersets.py:181 +#: netbox/dcim/filtersets.py:176 netbox/dcim/filtersets.py:181 msgid "AS (ID)" msgstr "JAKO (ID)" -#: dcim/filtersets.py:246 +#: netbox/dcim/filtersets.py:246 msgid "Parent location (ID)" msgstr "Lokalizacja nadrzędna (ID)" -#: dcim/filtersets.py:252 +#: netbox/dcim/filtersets.py:252 msgid "Parent location (slug)" msgstr "Lokalizacja nadrzędna (identyfikator)" -#: dcim/filtersets.py:258 dcim/filtersets.py:369 dcim/filtersets.py:490 -#: dcim/filtersets.py:1057 dcim/filtersets.py:1404 dcim/filtersets.py:2182 +#: 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)" -#: dcim/filtersets.py:265 dcim/filtersets.py:376 dcim/filtersets.py:497 -#: dcim/filtersets.py:1410 extras/filtersets.py:542 +#: 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)" -#: dcim/filtersets.py:296 dcim/filtersets.py:381 dcim/filtersets.py:539 -#: dcim/filtersets.py:678 dcim/filtersets.py:882 dcim/filtersets.py:933 -#: dcim/filtersets.py:973 dcim/filtersets.py:1306 dcim/filtersets.py:1840 +#: 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 msgid "Manufacturer (ID)" msgstr "Producent (ID)" -#: dcim/filtersets.py:302 dcim/filtersets.py:387 dcim/filtersets.py:545 -#: dcim/filtersets.py:684 dcim/filtersets.py:888 dcim/filtersets.py:939 -#: dcim/filtersets.py:979 dcim/filtersets.py:1312 dcim/filtersets.py:1846 +#: 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 msgid "Manufacturer (slug)" msgstr "Producent (identyfikator)" -#: dcim/filtersets.py:393 +#: netbox/dcim/filtersets.py:393 msgid "Rack type (slug)" msgstr "Typ szafy (identyfikator)" -#: dcim/filtersets.py:397 +#: netbox/dcim/filtersets.py:397 msgid "Rack type (ID)" msgstr "Typ szafy (numer identyfikacyjny)" -#: dcim/filtersets.py:411 dcim/filtersets.py:892 dcim/filtersets.py:994 -#: dcim/filtersets.py:1850 ipam/filtersets.py:381 ipam/filtersets.py:493 -#: ipam/filtersets.py:1003 virtualization/filtersets.py:210 +#: 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 msgid "Role (ID)" msgstr "Rola (ID)" -#: dcim/filtersets.py:417 dcim/filtersets.py:898 dcim/filtersets.py:1000 -#: dcim/filtersets.py:1856 extras/filtersets.py:558 ipam/filtersets.py:387 -#: ipam/filtersets.py:499 ipam/filtersets.py:1009 -#: virtualization/filtersets.py:216 +#: 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/virtualization/filtersets.py:216 msgid "Role (slug)" msgstr "Rola (identyfikator)" -#: dcim/filtersets.py:447 dcim/filtersets.py:1062 dcim/filtersets.py:1415 -#: dcim/filtersets.py:2244 +#: netbox/dcim/filtersets.py:447 netbox/dcim/filtersets.py:1062 +#: netbox/dcim/filtersets.py:1415 netbox/dcim/filtersets.py:2244 msgid "Rack (ID)" msgstr "Szafa (numer identyfikacyjny)" -#: dcim/filtersets.py:507 extras/filtersets.py:293 extras/filtersets.py:337 -#: extras/filtersets.py:359 extras/filtersets.py:419 users/filtersets.py:113 -#: users/filtersets.py:180 +#: netbox/dcim/filtersets.py:507 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)" -#: dcim/filtersets.py:549 +#: netbox/dcim/filtersets.py:549 msgid "Default platform (ID)" msgstr "Domyślna platforma (ID)" -#: dcim/filtersets.py:555 +#: netbox/dcim/filtersets.py:555 msgid "Default platform (slug)" msgstr "Domyślna platforma (identyfikator)" -#: dcim/filtersets.py:558 dcim/forms/filtersets.py:517 +#: netbox/dcim/filtersets.py:558 netbox/dcim/forms/filtersets.py:517 msgid "Has a front image" msgstr "Posiada obraz z przodu" -#: dcim/filtersets.py:562 dcim/forms/filtersets.py:524 +#: netbox/dcim/filtersets.py:562 netbox/dcim/forms/filtersets.py:524 msgid "Has a rear image" msgstr "Posiada tylny obraz" -#: dcim/filtersets.py:567 dcim/filtersets.py:688 dcim/filtersets.py:1131 -#: dcim/forms/filtersets.py:531 dcim/forms/filtersets.py:627 -#: dcim/forms/filtersets.py:848 +#: 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 msgid "Has console ports" msgstr "Posiada porty konsoli" -#: dcim/filtersets.py:571 dcim/filtersets.py:692 dcim/filtersets.py:1135 -#: dcim/forms/filtersets.py:538 dcim/forms/filtersets.py:634 -#: dcim/forms/filtersets.py:855 +#: 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 msgid "Has console server ports" msgstr "Posiada porty serwera konsoli" -#: dcim/filtersets.py:575 dcim/filtersets.py:696 dcim/filtersets.py:1139 -#: dcim/forms/filtersets.py:545 dcim/forms/filtersets.py:641 -#: dcim/forms/filtersets.py:862 +#: 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 msgid "Has power ports" msgstr "Posiada porty zasilania" -#: dcim/filtersets.py:579 dcim/filtersets.py:700 dcim/filtersets.py:1143 -#: dcim/forms/filtersets.py:552 dcim/forms/filtersets.py:648 -#: dcim/forms/filtersets.py:869 +#: 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 msgid "Has power outlets" msgstr "Posiada gniazdka elektryczne" -#: dcim/filtersets.py:583 dcim/filtersets.py:704 dcim/filtersets.py:1147 -#: dcim/forms/filtersets.py:559 dcim/forms/filtersets.py:655 -#: dcim/forms/filtersets.py:876 +#: 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 msgid "Has interfaces" msgstr "Posiada interfejsy" -#: dcim/filtersets.py:587 dcim/filtersets.py:708 dcim/filtersets.py:1151 -#: dcim/forms/filtersets.py:566 dcim/forms/filtersets.py:662 -#: dcim/forms/filtersets.py:883 +#: 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 msgid "Has pass-through ports" msgstr "Posiada porty przelotowe" -#: dcim/filtersets.py:591 dcim/filtersets.py:1155 dcim/forms/filtersets.py:580 +#: netbox/dcim/filtersets.py:591 netbox/dcim/filtersets.py:1155 +#: netbox/dcim/forms/filtersets.py:580 msgid "Has module bays" msgstr "Posiada kieszenie modułowe" -#: dcim/filtersets.py:595 dcim/filtersets.py:1159 dcim/forms/filtersets.py:573 +#: netbox/dcim/filtersets.py:595 netbox/dcim/filtersets.py:1159 +#: netbox/dcim/forms/filtersets.py:573 msgid "Has device bays" msgstr "Posiada zatoki na urządzenia" -#: dcim/filtersets.py:599 dcim/forms/filtersets.py:587 +#: netbox/dcim/filtersets.py:599 netbox/dcim/forms/filtersets.py:587 msgid "Has inventory items" msgstr "Posiada pozycje inwentaryzacyjne" -#: dcim/filtersets.py:756 dcim/filtersets.py:989 dcim/filtersets.py:1436 +#: netbox/dcim/filtersets.py:756 netbox/dcim/filtersets.py:989 +#: netbox/dcim/filtersets.py:1436 msgid "Device type (ID)" msgstr "Typ urządzenia (ID)" -#: dcim/filtersets.py:772 dcim/filtersets.py:1317 +#: netbox/dcim/filtersets.py:772 netbox/dcim/filtersets.py:1317 msgid "Module type (ID)" msgstr "Typ modułu (ID)" -#: dcim/filtersets.py:804 dcim/filtersets.py:1591 +#: netbox/dcim/filtersets.py:804 netbox/dcim/filtersets.py:1591 msgid "Power port (ID)" msgstr "Port zasilania (ID)" -#: dcim/filtersets.py:878 dcim/filtersets.py:1836 +#: netbox/dcim/filtersets.py:878 netbox/dcim/filtersets.py:1836 msgid "Parent inventory item (ID)" msgstr "Nadrzędny element zapasów (ID)" -#: dcim/filtersets.py:921 dcim/filtersets.py:947 dcim/filtersets.py:1127 -#: virtualization/filtersets.py:238 +#: netbox/dcim/filtersets.py:921 netbox/dcim/filtersets.py:947 +#: netbox/dcim/filtersets.py:1127 netbox/virtualization/filtersets.py:238 msgid "Config template (ID)" msgstr "Szablon konfiguracji (ID)" -#: dcim/filtersets.py:985 +#: netbox/dcim/filtersets.py:985 msgid "Device type (slug)" msgstr "Typ urządzenia (identyfikator)" -#: dcim/filtersets.py:1005 +#: netbox/dcim/filtersets.py:1005 msgid "Parent Device (ID)" msgstr "Urządzenie nadrzędne (ID)" -#: dcim/filtersets.py:1009 virtualization/filtersets.py:220 +#: netbox/dcim/filtersets.py:1009 netbox/virtualization/filtersets.py:220 msgid "Platform (ID)" msgstr "Platforma (ID)" -#: dcim/filtersets.py:1015 extras/filtersets.py:569 -#: virtualization/filtersets.py:226 +#: netbox/dcim/filtersets.py:1015 netbox/extras/filtersets.py:569 +#: netbox/virtualization/filtersets.py:226 msgid "Platform (slug)" msgstr "Platforma (identyfikator)" -#: dcim/filtersets.py:1051 dcim/filtersets.py:1399 dcim/filtersets.py:1934 -#: dcim/filtersets.py:2176 dcim/filtersets.py:2235 +#: 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 msgid "Site name (slug)" msgstr "Nazwa terenu (identyfikator)" -#: dcim/filtersets.py:1067 +#: netbox/dcim/filtersets.py:1067 msgid "Parent bay (ID)" msgstr "Zatoka macierzysta (ID)" -#: dcim/filtersets.py:1071 +#: netbox/dcim/filtersets.py:1071 msgid "VM cluster (ID)" msgstr "Klaster maszyn wirtualnych (ID)" -#: dcim/filtersets.py:1077 extras/filtersets.py:591 -#: virtualization/filtersets.py:136 +#: netbox/dcim/filtersets.py:1077 netbox/extras/filtersets.py:591 +#: netbox/virtualization/filtersets.py:136 msgid "Cluster group (slug)" msgstr "Grupa klastra (identyfikator)" -#: dcim/filtersets.py:1082 virtualization/filtersets.py:130 +#: netbox/dcim/filtersets.py:1082 netbox/virtualization/filtersets.py:130 msgid "Cluster group (ID)" msgstr "Grupa klastra (ID)" -#: dcim/filtersets.py:1088 +#: netbox/dcim/filtersets.py:1088 msgid "Device model (slug)" msgstr "Model urządzenia (identyfikator)" -#: dcim/filtersets.py:1099 dcim/forms/bulk_edit.py:516 +#: netbox/dcim/filtersets.py:1099 netbox/dcim/forms/bulk_edit.py:522 msgid "Is full depth" msgstr "Jest pełna głębokość" -#: dcim/filtersets.py:1103 dcim/forms/common.py:18 -#: dcim/forms/filtersets.py:818 dcim/forms/filtersets.py:1385 -#: dcim/models/device_components.py:518 virtualization/filtersets.py:230 -#: virtualization/filtersets.py:301 virtualization/forms/filtersets.py:172 -#: virtualization/forms/filtersets.py:223 +#: 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 msgid "MAC address" msgstr "Adres MAC" -#: dcim/filtersets.py:1110 dcim/filtersets.py:1274 -#: dcim/forms/filtersets.py:827 dcim/forms/filtersets.py:930 -#: virtualization/filtersets.py:234 virtualization/forms/filtersets.py:176 +#: 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 msgid "Has a primary IP" msgstr "Posiada podstawowy adres IP" -#: dcim/filtersets.py:1114 +#: netbox/dcim/filtersets.py:1114 msgid "Has an out-of-band IP" msgstr "Posiada adres IP poza pasmem" -#: dcim/filtersets.py:1119 +#: netbox/dcim/filtersets.py:1119 msgid "Virtual chassis (ID)" msgstr "Wirtualne podwozie (ID)" -#: dcim/filtersets.py:1123 +#: netbox/dcim/filtersets.py:1123 msgid "Is a virtual chassis member" msgstr "Jest członkiem wirtualnego podwozia" -#: dcim/filtersets.py:1164 +#: netbox/dcim/filtersets.py:1164 msgid "OOB IP (ID)" msgstr "OOB IP (ID)" -#: dcim/filtersets.py:1168 +#: netbox/dcim/filtersets.py:1168 msgid "Has virtual device context" msgstr "Posiada kontekst urządzenia wirtualnego" -#: dcim/filtersets.py:1257 +#: netbox/dcim/filtersets.py:1257 msgid "VDC (ID)" msgstr "VDC (ID)" -#: dcim/filtersets.py:1262 +#: netbox/dcim/filtersets.py:1262 msgid "Device model" msgstr "Model urządzenia" -#: dcim/filtersets.py:1267 ipam/filtersets.py:632 vpn/filtersets.py:102 -#: vpn/filtersets.py:401 +#: netbox/dcim/filtersets.py:1267 netbox/ipam/filtersets.py:632 +#: netbox/vpn/filtersets.py:102 netbox/vpn/filtersets.py:401 msgid "Interface (ID)" msgstr "Interfejs (ID)" -#: dcim/filtersets.py:1323 +#: netbox/dcim/filtersets.py:1323 msgid "Module type (model)" msgstr "Typ modułu (model)" -#: dcim/filtersets.py:1329 +#: netbox/dcim/filtersets.py:1329 msgid "Module bay (ID)" msgstr "Osłona modułu (ID)" -#: dcim/filtersets.py:1333 dcim/filtersets.py:1425 ipam/filtersets.py:611 -#: ipam/filtersets.py:851 ipam/filtersets.py:1115 -#: virtualization/filtersets.py:161 vpn/filtersets.py:379 +#: 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/vpn/filtersets.py:379 msgid "Device (ID)" msgstr "Urządzenie (ID)" -#: dcim/filtersets.py:1421 +#: netbox/dcim/filtersets.py:1421 msgid "Rack (name)" msgstr "Szafa (nazwa)" -#: dcim/filtersets.py:1431 ipam/filtersets.py:606 ipam/filtersets.py:846 -#: ipam/filtersets.py:1121 vpn/filtersets.py:374 +#: netbox/dcim/filtersets.py:1431 netbox/ipam/filtersets.py:606 +#: netbox/ipam/filtersets.py:846 netbox/ipam/filtersets.py:1121 +#: netbox/vpn/filtersets.py:374 msgid "Device (name)" msgstr "Urządzenie (nazwa)" -#: dcim/filtersets.py:1442 +#: netbox/dcim/filtersets.py:1442 msgid "Device type (model)" msgstr "Typ urządzenia (model)" -#: dcim/filtersets.py:1447 +#: netbox/dcim/filtersets.py:1447 msgid "Device role (ID)" msgstr "Rola urządzenia (ID)" -#: dcim/filtersets.py:1453 +#: netbox/dcim/filtersets.py:1453 msgid "Device role (slug)" msgstr "Rola urządzenia (identyfikator)" -#: dcim/filtersets.py:1458 +#: netbox/dcim/filtersets.py:1458 msgid "Virtual Chassis (ID)" msgstr "Wirtualne podwozie (ID)" -#: dcim/filtersets.py:1464 dcim/forms/filtersets.py:109 -#: dcim/tables/devices.py:206 netbox/navigation/menu.py:79 -#: templates/dcim/device.html:120 templates/dcim/device_edit.html:93 -#: templates/dcim/virtualchassis.html:20 -#: templates/dcim/virtualchassis_add.html:8 -#: templates/dcim/virtualchassis_edit.html:24 +#: netbox/dcim/filtersets.py:1464 netbox/dcim/forms/filtersets.py:109 +#: netbox/dcim/tables/devices.py:206 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 +#: netbox/templates/dcim/virtualchassis_add.html:8 +#: netbox/templates/dcim/virtualchassis_edit.html:24 msgid "Virtual Chassis" msgstr "Wirtualne podwozie" -#: dcim/filtersets.py:1488 +#: netbox/dcim/filtersets.py:1488 msgid "Module (ID)" msgstr "Moduł (ID)" -#: dcim/filtersets.py:1495 +#: netbox/dcim/filtersets.py:1495 msgid "Cable (ID)" msgstr "Kabel (ID)" -#: dcim/filtersets.py:1604 ipam/forms/bulk_import.py:189 -#: vpn/forms/bulk_import.py:308 +#: netbox/dcim/filtersets.py:1604 netbox/ipam/forms/bulk_import.py:189 +#: netbox/vpn/forms/bulk_import.py:308 msgid "Assigned VLAN" msgstr "Przypisana sieć VLAN" -#: dcim/filtersets.py:1608 +#: netbox/dcim/filtersets.py:1608 msgid "Assigned VID" msgstr "Przypisany VID" -#: dcim/filtersets.py:1613 dcim/forms/bulk_edit.py:1489 -#: dcim/forms/bulk_import.py:891 dcim/forms/filtersets.py:1428 -#: dcim/forms/model_forms.py:1378 dcim/models/device_components.py:711 -#: dcim/tables/devices.py:626 ipam/filtersets.py:316 ipam/filtersets.py:327 -#: ipam/filtersets.py:483 ipam/filtersets.py:584 ipam/filtersets.py:595 -#: ipam/forms/bulk_edit.py:242 ipam/forms/bulk_edit.py:298 -#: ipam/forms/bulk_edit.py:340 ipam/forms/bulk_import.py:157 -#: ipam/forms/bulk_import.py:243 ipam/forms/bulk_import.py:279 -#: ipam/forms/filtersets.py:67 ipam/forms/filtersets.py:172 -#: ipam/forms/filtersets.py:309 ipam/forms/model_forms.py:62 -#: ipam/forms/model_forms.py:202 ipam/forms/model_forms.py:247 -#: ipam/forms/model_forms.py:300 ipam/forms/model_forms.py:431 -#: ipam/forms/model_forms.py:445 ipam/forms/model_forms.py:459 -#: ipam/models/ip.py:233 ipam/models/ip.py:512 ipam/models/ip.py:720 -#: ipam/models/vrfs.py:62 ipam/tables/ip.py:242 ipam/tables/ip.py:309 -#: ipam/tables/ip.py:360 ipam/tables/ip.py:450 -#: templates/dcim/interface.html:133 templates/ipam/ipaddress.html:18 -#: templates/ipam/iprange.html:40 templates/ipam/prefix.html:19 -#: templates/ipam/vrf.html:7 templates/ipam/vrf.html:13 -#: templates/virtualization/vminterface.html:47 -#: virtualization/forms/bulk_edit.py:261 -#: virtualization/forms/bulk_import.py:171 -#: virtualization/forms/filtersets.py:228 -#: virtualization/forms/model_forms.py:344 -#: virtualization/models/virtualmachines.py:355 -#: virtualization/tables/virtualmachines.py:143 +#: 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:316 +#: netbox/ipam/filtersets.py:327 netbox/ipam/filtersets.py:483 +#: netbox/ipam/filtersets.py:584 netbox/ipam/filtersets.py:595 +#: netbox/ipam/forms/bulk_edit.py: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/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 msgid "VRF" msgstr "VRF" -#: dcim/filtersets.py:1619 ipam/filtersets.py:322 ipam/filtersets.py:333 -#: ipam/filtersets.py:489 ipam/filtersets.py:590 ipam/filtersets.py:601 +#: 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 msgid "VRF (RD)" msgstr "VRF (RD)" -#: dcim/filtersets.py:1624 ipam/filtersets.py:1030 vpn/filtersets.py:342 +#: netbox/dcim/filtersets.py:1624 netbox/ipam/filtersets.py:1030 +#: netbox/vpn/filtersets.py:342 msgid "L2VPN (ID)" msgstr "L2VPN (ID)" -#: dcim/filtersets.py:1630 dcim/forms/filtersets.py:1433 -#: dcim/tables/devices.py:570 ipam/filtersets.py:1036 -#: ipam/forms/filtersets.py:518 ipam/tables/vlans.py:137 -#: templates/dcim/interface.html:93 templates/ipam/vlan.html:66 -#: templates/vpn/l2vpntermination.html:12 -#: virtualization/forms/filtersets.py:233 vpn/forms/bulk_import.py:280 -#: vpn/forms/filtersets.py:246 vpn/forms/model_forms.py:409 -#: vpn/forms/model_forms.py:427 vpn/models/l2vpn.py:63 vpn/tables/l2vpn.py:55 +#: netbox/dcim/filtersets.py:1630 netbox/dcim/forms/filtersets.py:1433 +#: netbox/dcim/tables/devices.py:570 netbox/ipam/filtersets.py:1036 +#: 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 +#: netbox/virtualization/forms/filtersets.py:233 +#: netbox/vpn/forms/bulk_import.py:280 netbox/vpn/forms/filtersets.py:246 +#: netbox/vpn/forms/model_forms.py:409 netbox/vpn/forms/model_forms.py:427 +#: netbox/vpn/models/l2vpn.py:63 netbox/vpn/tables/l2vpn.py:55 msgid "L2VPN" msgstr "L2VPN" -#: dcim/filtersets.py:1662 +#: netbox/dcim/filtersets.py:1662 msgid "Virtual Chassis Interfaces for Device" msgstr "Interfejsy wirtualnej obudowy dla urządzenia" -#: dcim/filtersets.py:1667 +#: netbox/dcim/filtersets.py:1667 msgid "Virtual Chassis Interfaces for Device (ID)" msgstr "Interfejsy wirtualnej obudowy dla urządzenia (ID)" -#: dcim/filtersets.py:1671 +#: netbox/dcim/filtersets.py:1671 msgid "Kind of interface" msgstr "Rodzaj interfejsu" -#: dcim/filtersets.py:1676 virtualization/filtersets.py:293 +#: netbox/dcim/filtersets.py:1676 netbox/virtualization/filtersets.py:293 msgid "Parent interface (ID)" msgstr "Interfejs nadrzędny (ID)" -#: dcim/filtersets.py:1681 virtualization/filtersets.py:298 +#: netbox/dcim/filtersets.py:1681 netbox/virtualization/filtersets.py:298 msgid "Bridged interface (ID)" msgstr "Interfejs mostkowy (ID)" -#: dcim/filtersets.py:1686 +#: netbox/dcim/filtersets.py:1686 msgid "LAG interface (ID)" msgstr "Interfejs LAG (ID)" -#: dcim/filtersets.py:1713 dcim/filtersets.py:1725 -#: dcim/forms/filtersets.py:1345 dcim/forms/model_forms.py:1690 -#: templates/dcim/virtualdevicecontext.html:15 +#: netbox/dcim/filtersets.py:1713 netbox/dcim/filtersets.py:1725 +#: netbox/dcim/forms/filtersets.py:1345 netbox/dcim/forms/model_forms.py:1697 +#: netbox/templates/dcim/virtualdevicecontext.html:15 msgid "Virtual Device Context" msgstr "Kontekst urządzenia wirtualnego" -#: dcim/filtersets.py:1719 +#: netbox/dcim/filtersets.py:1719 msgid "Virtual Device Context (Identifier)" msgstr "Kontekst urządzenia wirtualnego (identyfikator)" -#: dcim/filtersets.py:1730 templates/wireless/wirelesslan.html:11 -#: wireless/forms/model_forms.py:53 +#: netbox/dcim/filtersets.py:1730 +#: netbox/templates/wireless/wirelesslan.html:11 +#: netbox/wireless/forms/model_forms.py:53 msgid "Wireless LAN" msgstr "Bezprzewodowa sieć LAN" -#: dcim/filtersets.py:1734 dcim/tables/devices.py:613 +#: netbox/dcim/filtersets.py:1734 netbox/dcim/tables/devices.py:613 msgid "Wireless link" msgstr "Połączenie bezprzewodowe" -#: dcim/filtersets.py:1803 +#: netbox/dcim/filtersets.py:1803 msgid "Parent module bay (ID)" msgstr "Osłona modułu nadrzędnego (ID)" -#: dcim/filtersets.py:1808 +#: netbox/dcim/filtersets.py:1808 msgid "Installed module (ID)" msgstr "Zainstalowany moduł (ID)" -#: dcim/filtersets.py:1819 +#: netbox/dcim/filtersets.py:1819 msgid "Installed device (ID)" msgstr "Zainstalowane urządzenie (ID)" -#: dcim/filtersets.py:1825 +#: netbox/dcim/filtersets.py:1825 msgid "Installed device (name)" msgstr "Zainstalowane urządzenie (nazwa)" -#: dcim/filtersets.py:1891 +#: netbox/dcim/filtersets.py:1891 msgid "Master (ID)" msgstr "Mistrz (ID)" -#: dcim/filtersets.py:1897 +#: netbox/dcim/filtersets.py:1897 msgid "Master (name)" msgstr "Mistrz (imię)" -#: dcim/filtersets.py:1939 tenancy/filtersets.py:245 +#: netbox/dcim/filtersets.py:1939 netbox/tenancy/filtersets.py:245 msgid "Tenant (ID)" msgstr "Najemca (ID)" -#: dcim/filtersets.py:1945 extras/filtersets.py:618 tenancy/filtersets.py:251 +#: netbox/dcim/filtersets.py:1945 netbox/extras/filtersets.py:618 +#: netbox/tenancy/filtersets.py:251 msgid "Tenant (slug)" msgstr "Najemca (identyfikator)" -#: dcim/filtersets.py:1981 dcim/forms/filtersets.py:1077 +#: netbox/dcim/filtersets.py:1981 netbox/dcim/forms/filtersets.py:1077 msgid "Unterminated" msgstr "Nieskończony" -#: dcim/filtersets.py:2239 +#: netbox/dcim/filtersets.py:2239 msgid "Power panel (ID)" msgstr "Panel zasilania (ID)" -#: dcim/forms/bulk_create.py:40 extras/forms/filtersets.py:401 -#: extras/forms/model_forms.py:567 extras/forms/model_forms.py:619 -#: netbox/forms/base.py:86 netbox/forms/mixins.py:81 -#: netbox/tables/columns.py:478 -#: templates/circuits/inc/circuit_termination.html:32 -#: templates/generic/bulk_edit.html:65 templates/inc/panels/tags.html:5 -#: utilities/forms/fields/fields.py:81 +#: netbox/dcim/forms/bulk_create.py:40 netbox/extras/forms/filtersets.py: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/templates/circuits/inc/circuit_termination.html:32 +#: netbox/templates/generic/bulk_edit.html:65 +#: netbox/templates/inc/panels/tags.html:5 +#: netbox/utilities/forms/fields/fields.py:81 msgid "Tags" msgstr "Tagi" -#: dcim/forms/bulk_create.py:112 dcim/forms/filtersets.py:1498 -#: dcim/forms/model_forms.py:488 dcim/forms/model_forms.py:546 -#: dcim/forms/object_create.py:197 dcim/forms/object_create.py:353 -#: dcim/tables/devices.py:165 dcim/tables/devices.py:707 -#: dcim/tables/devicetypes.py:246 templates/dcim/device.html:43 -#: templates/dcim/device.html:131 templates/dcim/modulebay.html:38 -#: templates/dcim/virtualchassis.html:66 -#: templates/dcim/virtualchassis_edit.html:55 +#: 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/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/templates/dcim/device.html:43 netbox/templates/dcim/device.html:131 +#: netbox/templates/dcim/modulebay.html:38 +#: netbox/templates/dcim/virtualchassis.html:66 +#: netbox/templates/dcim/virtualchassis_edit.html:55 msgid "Position" msgstr "Pozycja" -#: dcim/forms/bulk_create.py:114 +#: netbox/dcim/forms/bulk_create.py:114 msgid "" "Alphanumeric ranges are supported. (Must match the number of names being " "created.)" @@ -3117,825 +3446,922 @@ msgstr "" "Obsługiwane są zakresy alfanumeryczne. (Musi odpowiadać liczbie tworzonych " "nazw.)" -#: dcim/forms/bulk_edit.py:132 +#: netbox/dcim/forms/bulk_edit.py:133 msgid "Contact name" msgstr "Nazwa kontaktu" -#: dcim/forms/bulk_edit.py:137 +#: netbox/dcim/forms/bulk_edit.py:138 msgid "Contact phone" msgstr "Telefon kontaktowy" -#: dcim/forms/bulk_edit.py:143 +#: netbox/dcim/forms/bulk_edit.py:144 msgid "Contact E-mail" msgstr "Kontakt E-mail" -#: dcim/forms/bulk_edit.py:146 dcim/forms/bulk_import.py:123 -#: dcim/forms/model_forms.py:128 +#: netbox/dcim/forms/bulk_edit.py:147 netbox/dcim/forms/bulk_import.py:123 +#: netbox/dcim/forms/model_forms.py:128 msgid "Time zone" msgstr "Strefa czasowa" -#: dcim/forms/bulk_edit.py:224 dcim/forms/bulk_edit.py:495 -#: dcim/forms/bulk_edit.py:559 dcim/forms/bulk_edit.py:632 -#: dcim/forms/bulk_edit.py:656 dcim/forms/bulk_edit.py:740 -#: dcim/forms/bulk_edit.py:1267 dcim/forms/bulk_edit.py:1660 -#: dcim/forms/bulk_import.py:182 dcim/forms/bulk_import.py:371 -#: dcim/forms/bulk_import.py:405 dcim/forms/bulk_import.py:450 -#: dcim/forms/bulk_import.py:486 dcim/forms/bulk_import.py:1082 -#: dcim/forms/filtersets.py:313 dcim/forms/filtersets.py:372 -#: dcim/forms/filtersets.py:494 dcim/forms/filtersets.py:619 -#: dcim/forms/filtersets.py:700 dcim/forms/filtersets.py:782 -#: dcim/forms/filtersets.py:947 dcim/forms/filtersets.py:1539 -#: dcim/forms/model_forms.py:207 dcim/forms/model_forms.py:337 -#: dcim/forms/model_forms.py:349 dcim/forms/model_forms.py:395 -#: dcim/forms/model_forms.py:436 dcim/forms/model_forms.py:1075 -#: dcim/forms/model_forms.py:1515 dcim/forms/object_import.py:187 -#: dcim/tables/devices.py:96 dcim/tables/devices.py:172 -#: dcim/tables/devices.py:940 dcim/tables/devicetypes.py:80 -#: dcim/tables/devicetypes.py:308 dcim/tables/modules.py:20 -#: dcim/tables/modules.py:60 dcim/tables/racks.py:58 dcim/tables/racks.py:132 -#: templates/dcim/devicetype.html:14 templates/dcim/inventoryitem.html:44 -#: templates/dcim/manufacturer.html:33 templates/dcim/modulebay.html:62 -#: templates/dcim/moduletype.html:25 templates/dcim/platform.html:37 -#: templates/dcim/racktype.html:16 +#: 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/tables/modules.py:60 +#: 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/templates/dcim/manufacturer.html:33 +#: netbox/templates/dcim/modulebay.html:62 +#: netbox/templates/dcim/moduletype.html:25 +#: netbox/templates/dcim/platform.html:37 +#: netbox/templates/dcim/racktype.html:16 msgid "Manufacturer" msgstr "Producent" -#: dcim/forms/bulk_edit.py:229 dcim/forms/bulk_edit.py:372 -#: dcim/forms/bulk_import.py:191 dcim/forms/bulk_import.py:263 -#: dcim/forms/filtersets.py:255 -#: templates/dcim/inc/panels/racktype_dimensions.html:6 +#: 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/templates/dcim/inc/panels/racktype_dimensions.html:6 msgid "Form factor" msgstr "Współczynnik kształtu" -#: dcim/forms/bulk_edit.py:234 dcim/forms/bulk_edit.py:377 -#: dcim/forms/bulk_import.py:199 dcim/forms/bulk_import.py:266 -#: dcim/forms/filtersets.py:260 -#: templates/dcim/inc/panels/racktype_dimensions.html:10 +#: 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/templates/dcim/inc/panels/racktype_dimensions.html:10 msgid "Width" msgstr "Szerokość" -#: dcim/forms/bulk_edit.py:240 dcim/forms/bulk_edit.py:383 -#: templates/dcim/devicetype.html:37 +#: netbox/dcim/forms/bulk_edit.py:241 netbox/dcim/forms/bulk_edit.py:389 +#: netbox/dcim/forms/bulk_import.py:280 +#: netbox/templates/dcim/devicetype.html:37 msgid "Height (U)" msgstr "Wysokość (U)" -#: dcim/forms/bulk_edit.py:249 dcim/forms/bulk_edit.py:388 -#: dcim/forms/filtersets.py:274 +#: netbox/dcim/forms/bulk_edit.py:250 netbox/dcim/forms/bulk_edit.py:394 +#: netbox/dcim/forms/filtersets.py:274 msgid "Descending units" msgstr "Jednostki malejące" -#: dcim/forms/bulk_edit.py:252 dcim/forms/bulk_edit.py:391 +#: netbox/dcim/forms/bulk_edit.py:253 netbox/dcim/forms/bulk_edit.py:397 msgid "Outer width" msgstr "Szerokość zewnętrzna" -#: dcim/forms/bulk_edit.py:257 dcim/forms/bulk_edit.py:396 +#: netbox/dcim/forms/bulk_edit.py:258 netbox/dcim/forms/bulk_edit.py:402 msgid "Outer depth" msgstr "Głębokość zewnętrzna" -#: dcim/forms/bulk_edit.py:262 dcim/forms/bulk_edit.py:401 -#: dcim/forms/bulk_import.py:204 dcim/forms/bulk_import.py:271 +#: 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 msgid "Outer unit" msgstr "Jednostka zewnętrzna" -#: dcim/forms/bulk_edit.py:267 dcim/forms/bulk_edit.py:406 +#: netbox/dcim/forms/bulk_edit.py:268 netbox/dcim/forms/bulk_edit.py:412 msgid "Mounting depth" msgstr "Głębokość montażu" -#: dcim/forms/bulk_edit.py:272 dcim/forms/bulk_edit.py:299 -#: dcim/forms/bulk_edit.py:416 dcim/forms/bulk_edit.py:446 -#: dcim/forms/bulk_edit.py:529 dcim/forms/bulk_edit.py:552 -#: dcim/forms/bulk_edit.py:573 dcim/forms/bulk_edit.py:595 -#: dcim/forms/bulk_import.py:384 dcim/forms/bulk_import.py:416 -#: dcim/forms/filtersets.py:285 dcim/forms/filtersets.py:307 -#: dcim/forms/filtersets.py:327 dcim/forms/filtersets.py:401 -#: dcim/forms/filtersets.py:488 dcim/forms/filtersets.py:594 -#: dcim/forms/filtersets.py:613 dcim/forms/filtersets.py:674 -#: dcim/forms/model_forms.py:221 dcim/forms/model_forms.py:298 -#: dcim/tables/devicetypes.py:106 dcim/tables/modules.py:35 -#: dcim/tables/racks.py:74 dcim/tables/racks.py:172 -#: extras/forms/bulk_edit.py:53 extras/forms/bulk_edit.py:133 -#: extras/forms/bulk_edit.py:183 extras/forms/bulk_edit.py:288 -#: extras/forms/filtersets.py:64 extras/forms/filtersets.py:156 -#: extras/forms/filtersets.py:243 ipam/forms/bulk_edit.py:190 -#: templates/dcim/device.html:324 templates/dcim/devicetype.html:49 -#: templates/dcim/moduletype.html:45 templates/dcim/rack.html:81 -#: templates/dcim/racktype.html:41 templates/extras/configcontext.html:17 -#: templates/extras/customlink.html:25 templates/extras/savedfilter.html:33 -#: templates/ipam/role.html:30 +#: netbox/dcim/forms/bulk_edit.py: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/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/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/racktype.html:41 +#: netbox/templates/extras/configcontext.html:17 +#: netbox/templates/extras/customlink.html:25 +#: netbox/templates/extras/savedfilter.html:33 +#: netbox/templates/ipam/role.html:30 msgid "Weight" msgstr "Waga" -#: dcim/forms/bulk_edit.py:277 dcim/forms/bulk_edit.py:421 -#: dcim/forms/filtersets.py:290 +#: netbox/dcim/forms/bulk_edit.py:278 netbox/dcim/forms/bulk_edit.py:427 +#: netbox/dcim/forms/filtersets.py:290 msgid "Max weight" msgstr "Maksymalna waga" -#: dcim/forms/bulk_edit.py:282 dcim/forms/bulk_edit.py:426 -#: dcim/forms/bulk_edit.py:534 dcim/forms/bulk_edit.py:578 -#: dcim/forms/bulk_import.py:210 dcim/forms/bulk_import.py:283 -#: dcim/forms/bulk_import.py:389 dcim/forms/bulk_import.py:421 -#: dcim/forms/filtersets.py:295 dcim/forms/filtersets.py:598 -#: dcim/forms/filtersets.py:678 +#: 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 msgid "Weight unit" msgstr "Jednostka wagowa" -#: dcim/forms/bulk_edit.py:296 dcim/forms/filtersets.py:305 -#: dcim/forms/model_forms.py:217 dcim/forms/model_forms.py:256 -#: templates/dcim/rack.html:45 templates/dcim/racktype.html:13 +#: 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/templates/dcim/rack.html:45 netbox/templates/dcim/racktype.html:13 msgid "Rack Type" msgstr "Typ szafy" -#: dcim/forms/bulk_edit.py:298 dcim/forms/model_forms.py:220 -#: dcim/forms/model_forms.py:297 +#: netbox/dcim/forms/bulk_edit.py:299 netbox/dcim/forms/model_forms.py:220 +#: netbox/dcim/forms/model_forms.py:297 msgid "Outer Dimensions" msgstr "Wymiary zewnętrzne" -#: dcim/forms/bulk_edit.py:301 dcim/forms/model_forms.py:222 -#: dcim/forms/model_forms.py:299 templates/dcim/device.html:315 -#: templates/dcim/inc/panels/racktype_dimensions.html:3 +#: 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/templates/dcim/inc/panels/racktype_dimensions.html:3 msgid "Dimensions" msgstr "Wymiary" -#: dcim/forms/bulk_edit.py:303 dcim/forms/filtersets.py:306 -#: dcim/forms/filtersets.py:326 dcim/forms/model_forms.py:224 -#: templates/dcim/inc/panels/racktype_numbering.html:3 +#: 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/templates/dcim/inc/panels/racktype_numbering.html:3 msgid "Numbering" msgstr "Numeracja" -#: dcim/forms/bulk_edit.py:357 dcim/forms/bulk_edit.py:1262 -#: dcim/forms/bulk_edit.py:1655 dcim/forms/bulk_import.py:253 -#: dcim/forms/bulk_import.py:1076 dcim/forms/filtersets.py:367 -#: dcim/forms/filtersets.py:777 dcim/forms/filtersets.py:1534 -#: dcim/forms/model_forms.py:251 dcim/forms/model_forms.py:1070 -#: dcim/forms/model_forms.py:1510 dcim/forms/object_import.py:181 -#: dcim/tables/devices.py:169 dcim/tables/devices.py:809 -#: dcim/tables/devices.py:937 dcim/tables/devicetypes.py:304 -#: dcim/tables/racks.py:129 extras/filtersets.py:552 -#: ipam/forms/bulk_edit.py:261 ipam/forms/bulk_edit.py:311 -#: ipam/forms/bulk_edit.py:359 ipam/forms/bulk_edit.py:511 -#: ipam/forms/bulk_import.py:197 ipam/forms/bulk_import.py:262 -#: ipam/forms/bulk_import.py:298 ipam/forms/bulk_import.py:455 -#: ipam/forms/filtersets.py:237 ipam/forms/filtersets.py:289 -#: ipam/forms/filtersets.py:360 ipam/forms/filtersets.py:509 -#: ipam/forms/model_forms.py:188 ipam/forms/model_forms.py:221 -#: ipam/forms/model_forms.py:250 ipam/forms/model_forms.py:643 -#: ipam/tables/ip.py:258 ipam/tables/ip.py:316 ipam/tables/ip.py:367 -#: ipam/tables/vlans.py:130 ipam/tables/vlans.py:235 -#: templates/dcim/device.html:182 -#: templates/dcim/inc/panels/inventory_items.html:20 -#: templates/dcim/interface.html:223 templates/dcim/inventoryitem.html:36 -#: templates/dcim/rack.html:49 templates/ipam/ipaddress.html:41 -#: templates/ipam/iprange.html:50 templates/ipam/prefix.html:77 -#: templates/ipam/role.html:19 templates/ipam/vlan.html:52 -#: templates/virtualization/virtualmachine.html:23 -#: templates/vpn/tunneltermination.html:17 -#: templates/wireless/inc/wirelesslink_interface.html:20 -#: tenancy/forms/bulk_edit.py:142 tenancy/forms/filtersets.py:107 -#: tenancy/forms/model_forms.py:137 tenancy/tables/contacts.py:102 -#: virtualization/forms/bulk_edit.py:145 -#: virtualization/forms/bulk_import.py:106 -#: virtualization/forms/filtersets.py:157 -#: virtualization/forms/model_forms.py:195 -#: virtualization/tables/virtualmachines.py:75 vpn/forms/bulk_edit.py:87 -#: vpn/forms/bulk_import.py:81 vpn/forms/filtersets.py:85 -#: vpn/forms/model_forms.py:78 vpn/forms/model_forms.py:113 -#: vpn/tables/tunnels.py:82 +#: netbox/dcim/forms/bulk_edit.py: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" -#: dcim/forms/bulk_edit.py:364 dcim/forms/bulk_edit.py:712 -#: dcim/forms/bulk_edit.py:764 templates/dcim/device.html:104 -#: templates/dcim/module.html:77 templates/dcim/modulebay.html:70 -#: templates/dcim/rack.html:57 templates/virtualization/virtualmachine.html:35 +#: netbox/dcim/forms/bulk_edit.py:363 netbox/dcim/forms/bulk_import.py:260 +#: netbox/dcim/forms/filtersets.py:380 +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/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" -#: dcim/forms/bulk_edit.py:367 dcim/forms/filtersets.py:387 -#: dcim/forms/filtersets.py:813 dcim/forms/filtersets.py:967 -#: dcim/forms/filtersets.py:1546 +#: 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 msgid "Asset tag" msgstr "Etykieta zasobu" -#: dcim/forms/bulk_edit.py:411 dcim/forms/bulk_edit.py:524 -#: dcim/forms/bulk_edit.py:568 dcim/forms/bulk_edit.py:705 -#: dcim/forms/bulk_import.py:277 dcim/forms/bulk_import.py:410 -#: dcim/forms/bulk_import.py:580 dcim/forms/filtersets.py:280 -#: dcim/forms/filtersets.py:511 dcim/forms/filtersets.py:669 -#: dcim/forms/filtersets.py:804 templates/dcim/device.html:98 -#: templates/dcim/devicetype.html:65 templates/dcim/moduletype.html:41 -#: templates/dcim/rack.html:65 templates/dcim/racktype.html:28 +#: 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/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 "Przepływ powietrza" -#: dcim/forms/bulk_edit.py:440 dcim/forms/bulk_edit.py:910 -#: dcim/forms/bulk_import.py:322 dcim/forms/bulk_import.py:325 -#: dcim/forms/bulk_import.py:553 dcim/forms/bulk_import.py:1358 -#: dcim/forms/bulk_import.py:1362 dcim/forms/filtersets.py:104 -#: dcim/forms/filtersets.py:324 dcim/forms/filtersets.py:405 -#: dcim/forms/filtersets.py:419 dcim/forms/filtersets.py:457 -#: dcim/forms/filtersets.py:772 dcim/forms/filtersets.py:1035 -#: dcim/forms/filtersets.py:1167 dcim/forms/model_forms.py:264 -#: dcim/forms/model_forms.py:306 dcim/forms/model_forms.py:479 -#: dcim/forms/model_forms.py:755 dcim/forms/object_create.py:400 -#: dcim/tables/devices.py:161 dcim/tables/power.py:70 dcim/tables/racks.py:217 -#: ipam/forms/filtersets.py:442 templates/dcim/device.html:30 -#: templates/dcim/inc/cable_termination.html:16 -#: templates/dcim/powerfeed.html:28 templates/dcim/rack.html:13 -#: templates/dcim/rack/base.html:4 templates/dcim/rackreservation.html:19 -#: templates/dcim/rackreservation.html:36 -#: virtualization/forms/model_forms.py:113 +#: netbox/dcim/forms/bulk_edit.py: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/templates/dcim/device.html:30 +#: netbox/templates/dcim/inc/cable_termination.html:16 +#: netbox/templates/dcim/powerfeed.html:28 netbox/templates/dcim/rack.html:13 +#: netbox/templates/dcim/rack/base.html:4 +#: netbox/templates/dcim/rackreservation.html:19 +#: netbox/templates/dcim/rackreservation.html:36 +#: netbox/virtualization/forms/model_forms.py:113 msgid "Rack" msgstr "Szafa" -#: dcim/forms/bulk_edit.py:444 dcim/forms/bulk_edit.py:730 -#: dcim/forms/filtersets.py:325 dcim/forms/filtersets.py:398 -#: dcim/forms/filtersets.py:481 dcim/forms/filtersets.py:608 -#: dcim/forms/filtersets.py:721 dcim/forms/filtersets.py:942 -#: dcim/forms/model_forms.py:670 dcim/forms/model_forms.py:1580 -#: templates/dcim/device_edit.html:20 +#: 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/templates/dcim/device_edit.html:20 msgid "Hardware" msgstr "Sprzęt" -#: dcim/forms/bulk_edit.py:500 dcim/forms/bulk_import.py:377 -#: dcim/forms/filtersets.py:499 dcim/forms/model_forms.py:353 +#: 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 msgid "Default platform" msgstr "Domyślna platforma" -#: dcim/forms/bulk_edit.py:505 dcim/forms/bulk_edit.py:564 -#: dcim/forms/filtersets.py:502 dcim/forms/filtersets.py:622 +#: 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 msgid "Part number" msgstr "Numer części" -#: dcim/forms/bulk_edit.py:509 +#: netbox/dcim/forms/bulk_edit.py:515 msgid "U height" msgstr "Wysokość U" -#: dcim/forms/bulk_edit.py:521 dcim/tables/devicetypes.py:102 +#: netbox/dcim/forms/bulk_edit.py:527 netbox/dcim/tables/devicetypes.py:102 msgid "Exclude from utilization" msgstr "Wyklucz z wykorzystania" -#: dcim/forms/bulk_edit.py:550 dcim/forms/model_forms.py:368 -#: dcim/tables/devicetypes.py:77 templates/dcim/device.html:88 -#: templates/dcim/devicebay.html:52 templates/dcim/module.html:61 +#: 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/templates/dcim/devicebay.html:52 +#: netbox/templates/dcim/module.html:61 msgid "Device Type" msgstr "Typ urządzenia" -#: dcim/forms/bulk_edit.py:592 dcim/forms/model_forms.py:401 -#: dcim/tables/modules.py:17 dcim/tables/modules.py:65 -#: templates/dcim/module.html:65 templates/dcim/modulebay.html:66 -#: templates/dcim/moduletype.html:22 +#: 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/templates/dcim/module.html:65 +#: netbox/templates/dcim/modulebay.html:66 +#: netbox/templates/dcim/moduletype.html:22 msgid "Module Type" msgstr "Typ modułu" -#: dcim/forms/bulk_edit.py:596 dcim/forms/model_forms.py:371 -#: dcim/forms/model_forms.py:402 templates/dcim/devicetype.html:11 +#: netbox/dcim/forms/bulk_edit.py:602 netbox/dcim/forms/model_forms.py:371 +#: netbox/dcim/forms/model_forms.py:402 +#: netbox/templates/dcim/devicetype.html:11 msgid "Chassis" msgstr "Podwozie" -#: dcim/forms/bulk_edit.py:610 dcim/models/devices.py:484 -#: dcim/tables/devices.py:67 +#: netbox/dcim/forms/bulk_edit.py:616 netbox/dcim/models/devices.py:484 +#: netbox/dcim/tables/devices.py:67 msgid "VM role" msgstr "Rola maszyny wirtualnej" -#: dcim/forms/bulk_edit.py:613 dcim/forms/bulk_edit.py:637 -#: dcim/forms/bulk_edit.py:720 dcim/forms/bulk_import.py:434 -#: dcim/forms/bulk_import.py:438 dcim/forms/bulk_import.py:457 -#: dcim/forms/bulk_import.py:461 dcim/forms/bulk_import.py:586 -#: dcim/forms/bulk_import.py:590 dcim/forms/filtersets.py:689 -#: dcim/forms/filtersets.py:705 dcim/forms/filtersets.py:823 -#: dcim/forms/model_forms.py:415 dcim/forms/model_forms.py:441 -#: dcim/forms/model_forms.py:555 virtualization/forms/bulk_import.py:132 -#: virtualization/forms/bulk_import.py:133 -#: virtualization/forms/filtersets.py:188 -#: virtualization/forms/model_forms.py:215 +#: 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 msgid "Config template" msgstr "Szablon konfiguracji" -#: dcim/forms/bulk_edit.py:661 dcim/forms/bulk_edit.py:1061 -#: dcim/forms/bulk_import.py:492 dcim/forms/filtersets.py:114 -#: dcim/forms/model_forms.py:501 dcim/forms/model_forms.py:872 -#: dcim/forms/model_forms.py:889 extras/filtersets.py:547 +#: 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 msgid "Device type" msgstr "Typ urządzenia" -#: dcim/forms/bulk_edit.py:672 dcim/forms/bulk_import.py:473 -#: dcim/forms/filtersets.py:119 dcim/forms/model_forms.py:509 +#: 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 msgid "Device role" msgstr "Rola urządzenia" -#: dcim/forms/bulk_edit.py:695 dcim/forms/bulk_import.py:498 -#: dcim/forms/filtersets.py:796 dcim/forms/model_forms.py:451 -#: dcim/forms/model_forms.py:513 dcim/tables/devices.py:182 -#: extras/filtersets.py:563 templates/dcim/device.html:186 -#: templates/dcim/platform.html:26 -#: templates/virtualization/virtualmachine.html:27 -#: virtualization/forms/bulk_edit.py:160 -#: virtualization/forms/bulk_import.py:122 -#: virtualization/forms/filtersets.py:168 -#: virtualization/forms/model_forms.py:203 -#: virtualization/tables/virtualmachines.py:79 +#: 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/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 msgid "Platform" msgstr "Platforma" -#: dcim/forms/bulk_edit.py:728 dcim/forms/bulk_edit.py:1281 -#: dcim/forms/bulk_edit.py:1650 dcim/forms/bulk_edit.py:1696 -#: dcim/forms/bulk_import.py:641 dcim/forms/bulk_import.py:703 -#: dcim/forms/bulk_import.py:729 dcim/forms/bulk_import.py:755 -#: dcim/forms/bulk_import.py:775 dcim/forms/bulk_import.py:828 -#: dcim/forms/bulk_import.py:946 dcim/forms/bulk_import.py:994 -#: dcim/forms/bulk_import.py:1011 dcim/forms/bulk_import.py:1023 -#: dcim/forms/bulk_import.py:1071 dcim/forms/bulk_import.py:1422 -#: dcim/forms/connections.py:24 dcim/forms/filtersets.py:131 -#: dcim/forms/filtersets.py:921 dcim/forms/filtersets.py:1051 -#: dcim/forms/filtersets.py:1242 dcim/forms/filtersets.py:1267 -#: dcim/forms/filtersets.py:1291 dcim/forms/filtersets.py:1311 -#: dcim/forms/filtersets.py:1334 dcim/forms/filtersets.py:1444 -#: dcim/forms/filtersets.py:1469 dcim/forms/filtersets.py:1493 -#: dcim/forms/filtersets.py:1511 dcim/forms/filtersets.py:1528 -#: dcim/forms/filtersets.py:1592 dcim/forms/filtersets.py:1616 -#: dcim/forms/filtersets.py:1640 dcim/forms/model_forms.py:633 -#: dcim/forms/model_forms.py:849 dcim/forms/model_forms.py:1208 -#: dcim/forms/model_forms.py:1664 dcim/forms/object_create.py:257 -#: dcim/tables/connections.py:22 dcim/tables/connections.py:41 -#: dcim/tables/connections.py:60 dcim/tables/devices.py:285 -#: dcim/tables/devices.py:371 dcim/tables/devices.py:412 -#: dcim/tables/devices.py:454 dcim/tables/devices.py:505 -#: dcim/tables/devices.py:597 dcim/tables/devices.py:697 -#: dcim/tables/devices.py:754 dcim/tables/devices.py:801 -#: dcim/tables/devices.py:861 dcim/tables/devices.py:930 -#: dcim/tables/devices.py:1057 dcim/tables/modules.py:52 -#: extras/forms/filtersets.py:321 ipam/forms/bulk_import.py:304 -#: ipam/forms/bulk_import.py:481 ipam/forms/filtersets.py:551 -#: ipam/forms/model_forms.py:319 ipam/forms/model_forms.py:679 -#: ipam/forms/model_forms.py:712 ipam/forms/model_forms.py:738 -#: ipam/tables/vlans.py:180 templates/dcim/consoleport.html:20 -#: templates/dcim/consoleserverport.html:20 templates/dcim/device.html:15 -#: templates/dcim/device.html:130 templates/dcim/device_edit.html:10 -#: templates/dcim/devicebay.html:20 templates/dcim/devicebay.html:48 -#: templates/dcim/frontport.html:20 templates/dcim/interface.html:30 -#: templates/dcim/interface.html:161 templates/dcim/inventoryitem.html:20 -#: templates/dcim/module.html:57 templates/dcim/modulebay.html:20 -#: templates/dcim/poweroutlet.html:20 templates/dcim/powerport.html:20 -#: templates/dcim/rearport.html:20 templates/dcim/virtualchassis.html:65 -#: templates/dcim/virtualchassis_edit.html:51 -#: templates/dcim/virtualdevicecontext.html:22 -#: templates/virtualization/virtualmachine.html:114 -#: templates/vpn/tunneltermination.html:23 -#: templates/wireless/inc/wirelesslink_interface.html:6 -#: virtualization/filtersets.py:167 virtualization/forms/bulk_edit.py:137 -#: virtualization/forms/bulk_import.py:99 -#: virtualization/forms/filtersets.py:128 -#: virtualization/forms/model_forms.py:185 -#: virtualization/tables/virtualmachines.py:71 vpn/choices.py:44 -#: vpn/forms/bulk_import.py:86 vpn/forms/bulk_import.py:283 -#: vpn/forms/filtersets.py:275 vpn/forms/model_forms.py:90 -#: vpn/forms/model_forms.py:125 vpn/forms/model_forms.py:236 -#: vpn/forms/model_forms.py:453 wireless/forms/model_forms.py:99 -#: wireless/forms/model_forms.py:141 wireless/tables/wirelesslan.py:75 -msgid "Device" -msgstr "Urządzenie" - -#: dcim/forms/bulk_edit.py:731 templates/extras/dashboard/widget_config.html:7 -#: virtualization/forms/bulk_edit.py:191 -msgid "Configuration" -msgstr "Konfiguracja" - -#: dcim/forms/bulk_edit.py:745 dcim/forms/bulk_import.py:653 -#: dcim/forms/model_forms.py:647 dcim/forms/model_forms.py:897 -msgid "Module type" -msgstr "Rodzaj modułu" - -#: dcim/forms/bulk_edit.py:799 dcim/forms/bulk_edit.py:984 -#: dcim/forms/bulk_edit.py:1003 dcim/forms/bulk_edit.py:1026 -#: dcim/forms/bulk_edit.py:1068 dcim/forms/bulk_edit.py:1112 -#: dcim/forms/bulk_edit.py:1163 dcim/forms/bulk_edit.py:1190 -#: dcim/forms/bulk_edit.py:1217 dcim/forms/bulk_edit.py:1235 -#: dcim/forms/bulk_edit.py:1253 dcim/forms/filtersets.py:67 -#: dcim/forms/object_create.py:46 templates/dcim/cable.html:32 -#: templates/dcim/consoleport.html:32 templates/dcim/consoleserverport.html:32 -#: templates/dcim/devicebay.html:28 templates/dcim/frontport.html:32 -#: templates/dcim/inc/panels/inventory_items.html:19 -#: templates/dcim/interface.html:42 templates/dcim/inventoryitem.html:32 -#: templates/dcim/modulebay.html:34 templates/dcim/poweroutlet.html:32 -#: templates/dcim/powerport.html:32 templates/dcim/rearport.html:32 -#: templates/extras/customfield.html:26 templates/generic/bulk_import.html:162 -msgid "Label" -msgstr "Etykieta" - -#: dcim/forms/bulk_edit.py:808 dcim/forms/filtersets.py:1068 -#: templates/dcim/cable.html:50 -msgid "Length" -msgstr "Długość" - -#: dcim/forms/bulk_edit.py:813 dcim/forms/bulk_import.py:1226 -#: dcim/forms/bulk_import.py:1229 dcim/forms/filtersets.py:1072 -msgid "Length unit" -msgstr "Jednostka długości" - -#: dcim/forms/bulk_edit.py:837 templates/dcim/virtualchassis.html:23 -msgid "Domain" -msgstr "Domena" - -#: dcim/forms/bulk_edit.py:905 dcim/forms/bulk_import.py:1345 -#: dcim/forms/filtersets.py:1158 dcim/forms/model_forms.py:750 -msgid "Power panel" -msgstr "Panel zasilania" - -#: dcim/forms/bulk_edit.py:927 dcim/forms/bulk_import.py:1381 -#: dcim/forms/filtersets.py:1180 templates/dcim/powerfeed.html:83 -msgid "Supply" -msgstr "Dostawa" - -#: dcim/forms/bulk_edit.py:933 dcim/forms/bulk_import.py:1386 -#: dcim/forms/filtersets.py:1185 templates/dcim/powerfeed.html:95 -msgid "Phase" -msgstr "Faza" - -#: dcim/forms/bulk_edit.py:939 dcim/forms/filtersets.py:1190 -#: templates/dcim/powerfeed.html:87 -msgid "Voltage" -msgstr "Napięcie" - -#: dcim/forms/bulk_edit.py:943 dcim/forms/filtersets.py:1194 -#: templates/dcim/powerfeed.html:91 -msgid "Amperage" -msgstr "Natężenie prądu" - -#: dcim/forms/bulk_edit.py:947 dcim/forms/filtersets.py:1198 -msgid "Max utilization" -msgstr "Maksymalne wykorzystanie" - -#: dcim/forms/bulk_edit.py:1036 -msgid "Maximum draw" -msgstr "Maksymalne losowanie" - -#: dcim/forms/bulk_edit.py:1039 dcim/models/device_component_templates.py:282 -#: dcim/models/device_components.py:356 -msgid "Maximum power draw (watts)" -msgstr "Maksymalny pobór mocy (waty)" - -#: dcim/forms/bulk_edit.py:1042 -msgid "Allocated draw" -msgstr "Przydzielone losowanie" - -#: dcim/forms/bulk_edit.py:1045 dcim/models/device_component_templates.py:289 -#: dcim/models/device_components.py:363 -msgid "Allocated power draw (watts)" -msgstr "Przydzielony pobór mocy (waty)" - -#: dcim/forms/bulk_edit.py:1078 dcim/forms/bulk_import.py:786 -#: dcim/forms/model_forms.py:953 dcim/forms/model_forms.py:1278 -#: dcim/forms/model_forms.py:1567 dcim/forms/object_import.py:55 -msgid "Power port" -msgstr "Port zasilania" - -#: dcim/forms/bulk_edit.py:1083 dcim/forms/bulk_import.py:793 -msgid "Feed leg" -msgstr "Noga do karmienia" - -#: dcim/forms/bulk_edit.py:1129 dcim/forms/bulk_edit.py:1440 -msgid "Management only" -msgstr "Tylko zarządzanie" - -#: dcim/forms/bulk_edit.py:1139 dcim/forms/bulk_edit.py:1446 -#: dcim/forms/bulk_import.py:876 dcim/forms/filtersets.py:1394 -#: dcim/forms/object_import.py:90 -#: dcim/models/device_component_templates.py:437 -#: dcim/models/device_components.py:670 -msgid "PoE mode" -msgstr "Tryb PoE" - -#: dcim/forms/bulk_edit.py:1145 dcim/forms/bulk_edit.py:1452 -#: dcim/forms/bulk_import.py:882 dcim/forms/filtersets.py:1399 -#: dcim/forms/object_import.py:95 -#: dcim/models/device_component_templates.py:443 -#: dcim/models/device_components.py:676 -msgid "PoE type" -msgstr "Typ PoE" - -#: dcim/forms/bulk_edit.py:1151 dcim/forms/filtersets.py:1404 -#: dcim/forms/object_import.py:100 -msgid "Wireless role" -msgstr "Rola sieci bezprzewodowej" - -#: dcim/forms/bulk_edit.py:1288 dcim/forms/model_forms.py:669 -#: dcim/forms/model_forms.py:1223 dcim/tables/devices.py:313 -#: templates/dcim/consoleport.html:24 templates/dcim/consoleserverport.html:24 -#: templates/dcim/frontport.html:24 templates/dcim/interface.html:34 -#: templates/dcim/module.html:54 templates/dcim/modulebay.html:26 -#: templates/dcim/modulebay.html:58 templates/dcim/poweroutlet.html:24 -#: templates/dcim/powerport.html:24 templates/dcim/rearport.html:24 -msgid "Module" -msgstr "Moduł" - -#: dcim/forms/bulk_edit.py:1420 dcim/tables/devices.py:665 -#: templates/dcim/interface.html:110 -msgid "LAG" -msgstr "OPÓŹNIENIE" - -#: dcim/forms/bulk_edit.py:1425 dcim/forms/model_forms.py:1305 -msgid "Virtual device contexts" -msgstr "Konteksty urządzeń wirtualnych" - -#: dcim/forms/bulk_edit.py:1431 dcim/forms/bulk_import.py:714 -#: dcim/forms/bulk_import.py:740 dcim/forms/filtersets.py:1252 -#: dcim/forms/filtersets.py:1277 dcim/forms/filtersets.py:1358 -#: dcim/tables/devices.py:610 -#: templates/circuits/inc/circuit_termination_fields.html:67 -#: templates/dcim/consoleport.html:40 templates/dcim/consoleserverport.html:40 -msgid "Speed" -msgstr "Prędkość" - -#: dcim/forms/bulk_edit.py:1460 dcim/forms/bulk_import.py:885 -#: templates/vpn/ikepolicy.html:25 templates/vpn/ipsecprofile.html:21 -#: templates/vpn/ipsecprofile.html:48 virtualization/forms/bulk_edit.py:233 -#: virtualization/forms/bulk_import.py:165 vpn/forms/bulk_edit.py:146 -#: vpn/forms/bulk_edit.py:232 vpn/forms/bulk_import.py:176 -#: vpn/forms/bulk_import.py:234 vpn/forms/filtersets.py:135 -#: vpn/forms/filtersets.py:178 vpn/forms/filtersets.py:192 -#: vpn/tables/crypto.py:64 vpn/tables/crypto.py:162 -msgid "Mode" -msgstr "Tryb" - -#: dcim/forms/bulk_edit.py:1468 dcim/forms/model_forms.py:1354 -#: ipam/forms/bulk_import.py:178 ipam/forms/filtersets.py:498 -#: ipam/models/vlans.py:84 virtualization/forms/bulk_edit.py:240 -#: virtualization/forms/model_forms.py:321 -msgid "VLAN group" -msgstr "Grupa VLAN" - -#: dcim/forms/bulk_edit.py:1476 dcim/forms/model_forms.py:1360 -#: dcim/tables/devices.py:579 virtualization/forms/bulk_edit.py:248 -#: virtualization/forms/model_forms.py:326 -msgid "Untagged VLAN" -msgstr "Nieoznaczone sieci VLAN" - -#: dcim/forms/bulk_edit.py:1484 dcim/forms/model_forms.py:1369 -#: dcim/tables/devices.py:585 virtualization/forms/bulk_edit.py:256 -#: virtualization/forms/model_forms.py:335 -msgid "Tagged VLANs" -msgstr "Oznaczone sieci VLAN" - -#: dcim/forms/bulk_edit.py:1494 dcim/forms/model_forms.py:1341 -msgid "Wireless LAN group" -msgstr "Grupa sieci bezprzewodowej sieci LAN" - -#: dcim/forms/bulk_edit.py:1499 dcim/forms/model_forms.py:1346 -#: dcim/tables/devices.py:619 netbox/navigation/menu.py:146 -#: templates/dcim/interface.html:280 wireless/tables/wirelesslan.py:24 -msgid "Wireless LANs" -msgstr "Bezprzewodowe sieci LAN" - -#: dcim/forms/bulk_edit.py:1508 dcim/forms/filtersets.py:1328 -#: dcim/forms/model_forms.py:1390 ipam/forms/bulk_edit.py:286 -#: ipam/forms/bulk_edit.py:378 ipam/forms/filtersets.py:169 -#: templates/dcim/interface.html:122 templates/ipam/prefix.html:95 -#: virtualization/forms/model_forms.py:349 -msgid "Addressing" -msgstr "Adresowanie" - -#: dcim/forms/bulk_edit.py:1509 dcim/forms/filtersets.py:720 -#: dcim/forms/model_forms.py:1391 virtualization/forms/model_forms.py:350 -msgid "Operation" -msgstr "Operacja" - -#: dcim/forms/bulk_edit.py:1510 dcim/forms/filtersets.py:1329 -#: dcim/forms/model_forms.py:987 dcim/forms/model_forms.py:1393 -msgid "PoE" -msgstr "PoE" - -#: dcim/forms/bulk_edit.py:1511 dcim/forms/model_forms.py:1392 -#: templates/dcim/interface.html:99 virtualization/forms/bulk_edit.py:267 -#: virtualization/forms/model_forms.py:351 -msgid "Related Interfaces" -msgstr "Powiązane interfejsy" - -#: dcim/forms/bulk_edit.py:1512 dcim/forms/model_forms.py:1394 -#: virtualization/forms/bulk_edit.py:268 -#: virtualization/forms/model_forms.py:352 -msgid "802.1Q Switching" -msgstr "Przełączanie 802.1Q" - -#: dcim/forms/bulk_edit.py:1574 dcim/forms/bulk_edit.py:1576 -msgid "Interface mode must be specified to assign VLANs" -msgstr "Tryb interfejsu musi być określony, aby przypisać sieci VLAN" - -#: dcim/forms/bulk_edit.py:1581 dcim/forms/common.py:50 -msgid "An access interface cannot have tagged VLANs assigned." -msgstr "Interfejs dostępu nie może mieć przypisanych oznakowanych sieci VLAN." - -#: dcim/forms/bulk_import.py:64 -msgid "Name of parent region" -msgstr "Nazwa regionu macierzystego" - -#: dcim/forms/bulk_import.py:78 -msgid "Name of parent site group" -msgstr "Nazwa nadrzędnej grupy witryn" - -#: dcim/forms/bulk_import.py:97 -msgid "Assigned region" -msgstr "Przypisany region" - -#: dcim/forms/bulk_import.py:104 tenancy/forms/bulk_import.py:44 -#: tenancy/forms/bulk_import.py:85 wireless/forms/bulk_import.py:40 -msgid "Assigned group" -msgstr "Przydzielona grupa" - -#: dcim/forms/bulk_import.py:123 -msgid "available options" -msgstr "dostępne opcje" - -#: dcim/forms/bulk_import.py:134 dcim/forms/bulk_import.py:543 -#: dcim/forms/bulk_import.py:1342 ipam/forms/bulk_import.py:175 -#: ipam/forms/bulk_import.py:433 virtualization/forms/bulk_import.py:63 -#: virtualization/forms/bulk_import.py:89 -msgid "Assigned site" -msgstr "Przydzielona witryna" - -#: dcim/forms/bulk_import.py:141 -msgid "Parent location" -msgstr "Lokalizacja nadrzędna" - -#: dcim/forms/bulk_import.py:143 -msgid "Location not found." -msgstr "Lokalizacja nie została znaleziona." - -#: dcim/forms/bulk_import.py:185 -msgid "The manufacturer of this rack type" -msgstr "Producent tego typu szaf" - -#: dcim/forms/bulk_import.py:196 -msgid "The lowest-numbered position in the rack" -msgstr "Najniższy numer pozycji w szafie" - -#: dcim/forms/bulk_import.py:201 dcim/forms/bulk_import.py:268 -msgid "Rail-to-rail width (in inches)" -msgstr "Szerokość szyny do szyny (w calach)" - -#: dcim/forms/bulk_import.py:207 dcim/forms/bulk_import.py:274 -msgid "Unit for outer dimensions" -msgstr "Jednostka do wymiarów zewnętrznych" - -#: dcim/forms/bulk_import.py:213 dcim/forms/bulk_import.py:286 -msgid "Unit for rack weights" -msgstr "Jednostka masy w szafach" - -#: dcim/forms/bulk_import.py:245 -msgid "Name of assigned tenant" -msgstr "Nazwa przydzielonego najemcy" - -#: dcim/forms/bulk_import.py:257 -msgid "Name of assigned role" -msgstr "Nazwa przypisanej roli" - -#: dcim/forms/bulk_import.py:280 dcim/forms/bulk_import.py:413 -#: dcim/forms/bulk_import.py:583 -msgid "Airflow direction" -msgstr "Kierunek przepływu powietrza" - -#: dcim/forms/bulk_import.py:312 -msgid "Parent site" -msgstr "Witryna nadrzędna" - -#: dcim/forms/bulk_import.py:319 dcim/forms/bulk_import.py:1355 -msgid "Rack's location (if any)" -msgstr "Lokalizacja szafy (jeśli określona)" - -#: dcim/forms/bulk_import.py:328 dcim/forms/model_forms.py:311 -#: dcim/tables/racks.py:222 templates/dcim/rackreservation.html:12 -#: templates/dcim/rackreservation.html:45 -msgid "Units" -msgstr "Jednostki" - -#: dcim/forms/bulk_import.py:331 -msgid "Comma-separated list of individual unit numbers" -msgstr "Lista poszczególnych numerów jednostek oddzielona przecinkami" - -#: dcim/forms/bulk_import.py:374 -msgid "The manufacturer which produces this device type" -msgstr "Producent, który produkuje ten typ urządzenia" - -#: dcim/forms/bulk_import.py:381 -msgid "The default platform for devices of this type (optional)" -msgstr "Domyślna platforma dla urządzeń tego typu (opcjonalnie)" - -#: dcim/forms/bulk_import.py:386 -msgid "Device weight" -msgstr "Waga urządzenia" - -#: dcim/forms/bulk_import.py:392 -msgid "Unit for device weight" -msgstr "Jednostka do wagi urządzenia" - -#: dcim/forms/bulk_import.py:418 -msgid "Module weight" -msgstr "Waga modułu" - -#: dcim/forms/bulk_import.py:424 -msgid "Unit for module weight" -msgstr "Jednostka do ciężaru modułu" - -#: dcim/forms/bulk_import.py:454 -msgid "Limit platform assignments to this manufacturer" -msgstr "Ogranicz przypisania platformy do tego producenta" - -#: dcim/forms/bulk_import.py:476 dcim/forms/bulk_import.py:1425 -#: tenancy/forms/bulk_import.py:106 -msgid "Assigned role" -msgstr "Przypisana rola" - -#: dcim/forms/bulk_import.py:489 -msgid "Device type manufacturer" -msgstr "Producent typu urządzenia" - -#: dcim/forms/bulk_import.py:495 -msgid "Device type model" -msgstr "Model typu urządzenia" - -#: dcim/forms/bulk_import.py:502 virtualization/forms/bulk_import.py:126 -msgid "Assigned platform" -msgstr "Przydzielona platforma" - -#: dcim/forms/bulk_import.py:510 dcim/forms/bulk_import.py:514 -#: dcim/forms/model_forms.py:536 -msgid "Virtual chassis" -msgstr "Wirtualne podwozie" - -#: dcim/forms/bulk_import.py:517 dcim/forms/filtersets.py:728 -#: dcim/forms/filtersets.py:898 dcim/forms/model_forms.py:522 -#: dcim/tables/devices.py:202 extras/filtersets.py:596 -#: extras/forms/filtersets.py:322 ipam/forms/filtersets.py:415 -#: ipam/forms/filtersets.py:447 templates/dcim/device.html:239 -#: templates/virtualization/cluster.html:10 -#: templates/virtualization/virtualmachine.html:92 -#: templates/virtualization/virtualmachine.html:101 -#: virtualization/filtersets.py:157 virtualization/filtersets.py:277 -#: virtualization/forms/bulk_edit.py:129 -#: virtualization/forms/bulk_import.py:92 -#: virtualization/forms/filtersets.py:99 -#: virtualization/forms/filtersets.py:123 -#: virtualization/forms/filtersets.py:204 -#: virtualization/forms/model_forms.py:79 -#: virtualization/forms/model_forms.py:176 -#: virtualization/tables/virtualmachines.py:67 +#: 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/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 msgid "Cluster" msgstr "Klaster" -#: dcim/forms/bulk_import.py:521 +#: 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:52 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/templates/extras/dashboard/widget_config.html:7 +#: netbox/virtualization/forms/bulk_edit.py:191 +msgid "Configuration" +msgstr "Konfiguracja" + +#: netbox/dcim/forms/bulk_edit.py:746 netbox/netbox/navigation/menu.py:243 +#: 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 +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/object_create.py:46 netbox/templates/dcim/cable.html:32 +#: netbox/templates/dcim/consoleport.html:32 +#: netbox/templates/dcim/consoleserverport.html:32 +#: netbox/templates/dcim/devicebay.html:28 +#: netbox/templates/dcim/frontport.html:32 +#: netbox/templates/dcim/inc/panels/inventory_items.html:19 +#: netbox/templates/dcim/interface.html:42 +#: netbox/templates/dcim/inventoryitem.html:32 +#: netbox/templates/dcim/modulebay.html:34 +#: netbox/templates/dcim/poweroutlet.html:32 +#: netbox/templates/dcim/powerport.html:32 +#: netbox/templates/dcim/rearport.html:32 +#: netbox/templates/extras/customfield.html:26 +#: netbox/templates/generic/bulk_import.html:162 +msgid "Label" +msgstr "Etykieta" + +#: netbox/dcim/forms/bulk_edit.py:823 netbox/dcim/forms/filtersets.py:1068 +#: 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 +msgid "Length unit" +msgstr "Jednostka długości" + +#: netbox/dcim/forms/bulk_edit.py:852 +#: 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 +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/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/templates/dcim/powerfeed.html:95 +msgid "Phase" +msgstr "Faza" + +#: netbox/dcim/forms/bulk_edit.py:954 netbox/dcim/forms/filtersets.py:1190 +#: 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/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 +msgid "Max utilization" +msgstr "Maksymalne wykorzystanie" + +#: netbox/dcim/forms/bulk_edit.py:1051 +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 +msgid "Maximum power draw (watts)" +msgstr "Maksymalny pobór mocy (waty)" + +#: netbox/dcim/forms/bulk_edit.py:1057 +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 +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 +msgid "Power port" +msgstr "Port zasilania" + +#: netbox/dcim/forms/bulk_edit.py:1098 netbox/dcim/forms/bulk_import.py:815 +msgid "Feed leg" +msgstr "Noga do karmienia" + +#: netbox/dcim/forms/bulk_edit.py:1144 netbox/dcim/forms/bulk_edit.py:1462 +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/object_import.py:90 +#: netbox/dcim/models/device_component_templates.py:437 +#: netbox/dcim/models/device_components.py:670 +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/object_import.py:95 +#: netbox/dcim/models/device_component_templates.py:443 +#: netbox/dcim/models/device_components.py:676 +msgid "PoE type" +msgstr "Typ PoE" + +#: netbox/dcim/forms/bulk_edit.py:1166 netbox/dcim/forms/filtersets.py:1404 +#: 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/templates/dcim/consoleport.html:24 +#: netbox/templates/dcim/consoleserverport.html:24 +#: netbox/templates/dcim/frontport.html:24 +#: netbox/templates/dcim/interface.html:34 +#: netbox/templates/dcim/module.html:54 +#: netbox/templates/dcim/modulebay.html:26 +#: netbox/templates/dcim/modulebay.html:58 +#: netbox/templates/dcim/poweroutlet.html:24 +#: netbox/templates/dcim/powerport.html:24 +#: netbox/templates/dcim/rearport.html:24 +msgid "Module" +msgstr "Moduł" + +#: netbox/dcim/forms/bulk_edit.py:1442 netbox/dcim/tables/devices.py:665 +#: netbox/templates/dcim/interface.html:110 +msgid "LAG" +msgstr "OPÓŹNIENIE" + +#: netbox/dcim/forms/bulk_edit.py:1447 netbox/dcim/forms/model_forms.py:1312 +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/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/templates/vpn/ikepolicy.html:25 +#: netbox/templates/vpn/ipsecprofile.html:21 +#: netbox/templates/vpn/ipsecprofile.html:48 +#: netbox/virtualization/forms/bulk_edit.py:233 +#: netbox/virtualization/forms/bulk_import.py:165 +#: netbox/vpn/forms/bulk_edit.py:146 netbox/vpn/forms/bulk_edit.py:232 +#: netbox/vpn/forms/bulk_import.py:176 netbox/vpn/forms/bulk_import.py:234 +#: netbox/vpn/forms/filtersets.py:135 netbox/vpn/forms/filtersets.py:178 +#: netbox/vpn/forms/filtersets.py:192 netbox/vpn/tables/crypto.py:64 +#: netbox/vpn/tables/crypto.py:162 +msgid "Mode" +msgstr "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 +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 +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 +msgid "Tagged VLANs" +msgstr "Oznaczone sieci VLAN" + +#: netbox/dcim/forms/bulk_edit.py:1511 +msgid "Add tagged VLANs" +msgstr "" + +#: netbox/dcim/forms/bulk_edit.py:1520 +msgid "Remove tagged VLANs" +msgstr "" + +#: netbox/dcim/forms/bulk_edit.py:1536 netbox/dcim/forms/model_forms.py:1348 +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/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 +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 +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 +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 +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 +msgid "802.1Q Switching" +msgstr "Przełączanie 802.1Q" + +#: netbox/dcim/forms/bulk_edit.py:1558 +msgid "Add/Remove" +msgstr "" + +#: netbox/dcim/forms/bulk_edit.py:1617 netbox/dcim/forms/bulk_edit.py:1619 +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 +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 +msgid "Name of parent region" +msgstr "Nazwa regionu macierzystego" + +#: netbox/dcim/forms/bulk_import.py:78 +msgid "Name of parent site group" +msgstr "Nazwa nadrzędnej grupy witryn" + +#: netbox/dcim/forms/bulk_import.py:97 +msgid "Assigned region" +msgstr "Przypisany region" + +#: netbox/dcim/forms/bulk_import.py:104 netbox/tenancy/forms/bulk_import.py:44 +#: netbox/tenancy/forms/bulk_import.py:85 +#: netbox/wireless/forms/bulk_import.py:40 +msgid "Assigned group" +msgstr "Przydzielona grupa" + +#: netbox/dcim/forms/bulk_import.py:123 +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 +msgid "Assigned site" +msgstr "Przydzielona witryna" + +#: netbox/dcim/forms/bulk_import.py:141 +msgid "Parent location" +msgstr "Lokalizacja nadrzędna" + +#: netbox/dcim/forms/bulk_import.py:143 +msgid "Location not found." +msgstr "Lokalizacja nie została znaleziona." + +#: netbox/dcim/forms/bulk_import.py:185 +msgid "The manufacturer of this rack type" +msgstr "Producent tego typu szaf" + +#: netbox/dcim/forms/bulk_import.py:196 +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 +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 +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 +msgid "Unit for rack weights" +msgstr "Jednostka masy w szafach" + +#: netbox/dcim/forms/bulk_import.py:245 +msgid "Name of assigned tenant" +msgstr "Nazwa przydzielonego najemcy" + +#: netbox/dcim/forms/bulk_import.py:257 +msgid "Name of assigned role" +msgstr "Nazwa przypisanej roli" + +#: netbox/dcim/forms/bulk_import.py:264 +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 +msgid "Airflow direction" +msgstr "Kierunek przepływu powietrza" + +#: netbox/dcim/forms/bulk_import.py:324 +msgid "Width must be set if not specifying a rack type." +msgstr "" + +#: netbox/dcim/forms/bulk_import.py:326 +msgid "U height must be set if not specifying a rack type." +msgstr "" + +#: netbox/dcim/forms/bulk_import.py:334 +msgid "Parent site" +msgstr "Witryna nadrzędna" + +#: netbox/dcim/forms/bulk_import.py:341 netbox/dcim/forms/bulk_import.py:1377 +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/templates/dcim/rackreservation.html:12 +#: netbox/templates/dcim/rackreservation.html:45 +msgid "Units" +msgstr "Jednostki" + +#: netbox/dcim/forms/bulk_import.py:353 +msgid "Comma-separated list of individual unit numbers" +msgstr "Lista poszczególnych numerów jednostek oddzielona przecinkami" + +#: netbox/dcim/forms/bulk_import.py:396 +msgid "The manufacturer which produces this device type" +msgstr "Producent, który produkuje ten typ urządzenia" + +#: netbox/dcim/forms/bulk_import.py:403 +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 +msgid "Device weight" +msgstr "Waga urządzenia" + +#: netbox/dcim/forms/bulk_import.py:414 +msgid "Unit for device weight" +msgstr "Jednostka do wagi urządzenia" + +#: netbox/dcim/forms/bulk_import.py:440 +msgid "Module weight" +msgstr "Waga modułu" + +#: netbox/dcim/forms/bulk_import.py:446 +msgid "Unit for module weight" +msgstr "Jednostka do ciężaru modułu" + +#: netbox/dcim/forms/bulk_import.py:476 +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/tenancy/forms/bulk_import.py:106 +msgid "Assigned role" +msgstr "Przypisana rola" + +#: netbox/dcim/forms/bulk_import.py:511 +msgid "Device type manufacturer" +msgstr "Producent typu urządzenia" + +#: netbox/dcim/forms/bulk_import.py:517 +msgid "Device type model" +msgstr "Model typu urządzenia" + +#: netbox/dcim/forms/bulk_import.py:524 +#: netbox/virtualization/forms/bulk_import.py:126 +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 +msgid "Virtual chassis" +msgstr "Wirtualne podwozie" + +#: netbox/dcim/forms/bulk_import.py:543 msgid "Virtualization cluster" msgstr "Klaster wirtualizacji" -#: dcim/forms/bulk_import.py:550 +#: netbox/dcim/forms/bulk_import.py:572 msgid "Assigned location (if any)" msgstr "Przypisana lokalizacja (jeśli istnieje)" -#: dcim/forms/bulk_import.py:557 +#: netbox/dcim/forms/bulk_import.py:579 msgid "Assigned rack (if any)" msgstr "Przypisana szafa (jeśli określona)" -#: dcim/forms/bulk_import.py:560 +#: netbox/dcim/forms/bulk_import.py:582 msgid "Face" msgstr "Twarz" -#: dcim/forms/bulk_import.py:563 +#: netbox/dcim/forms/bulk_import.py:585 msgid "Mounted rack face" msgstr "Powierzchnia montażu w szafie" -#: dcim/forms/bulk_import.py:570 +#: netbox/dcim/forms/bulk_import.py:592 msgid "Parent device (for child devices)" msgstr "Urządzenie nadrzędne (dla urządzeń podrzędnych)" -#: dcim/forms/bulk_import.py:573 +#: netbox/dcim/forms/bulk_import.py:595 msgid "Device bay" msgstr "Osłona urządzenia" -#: dcim/forms/bulk_import.py:577 +#: netbox/dcim/forms/bulk_import.py:599 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)" -#: dcim/forms/bulk_import.py:644 +#: netbox/dcim/forms/bulk_import.py:666 msgid "The device in which this module is installed" msgstr "Urządzenie, w którym zainstalowany jest ten moduł" -#: dcim/forms/bulk_import.py:647 dcim/forms/model_forms.py:640 +#: netbox/dcim/forms/bulk_import.py:669 netbox/dcim/forms/model_forms.py:640 msgid "Module bay" msgstr "Wnęka modułu" -#: dcim/forms/bulk_import.py:650 +#: netbox/dcim/forms/bulk_import.py:672 msgid "The module bay in which this module is installed" msgstr "Wnęka modułu, w której ten moduł jest zainstalowany" -#: dcim/forms/bulk_import.py:656 +#: netbox/dcim/forms/bulk_import.py:678 msgid "The type of module" msgstr "Rodzaj modułu" -#: dcim/forms/bulk_import.py:664 dcim/forms/model_forms.py:656 +#: netbox/dcim/forms/bulk_import.py:686 netbox/dcim/forms/model_forms.py:656 msgid "Replicate components" msgstr "Replikacja komponentów" -#: dcim/forms/bulk_import.py:666 +#: netbox/dcim/forms/bulk_import.py:688 msgid "" "Automatically populate components associated with this module type (enabled " "by default)" @@ -3943,264 +4369,271 @@ msgstr "" "Automatyczne wypełnianie komponentów powiązanych z tym typem modułu " "(domyślnie włączone)" -#: dcim/forms/bulk_import.py:669 dcim/forms/model_forms.py:662 +#: netbox/dcim/forms/bulk_import.py:691 netbox/dcim/forms/model_forms.py:662 msgid "Adopt components" msgstr "Zastosuj komponenty" -#: dcim/forms/bulk_import.py:671 dcim/forms/model_forms.py:665 +#: netbox/dcim/forms/bulk_import.py:693 netbox/dcim/forms/model_forms.py:665 msgid "Adopt already existing components" msgstr "Zastosuj już istniejące komponenty" -#: dcim/forms/bulk_import.py:711 dcim/forms/bulk_import.py:737 -#: dcim/forms/bulk_import.py:763 +#: netbox/dcim/forms/bulk_import.py:733 netbox/dcim/forms/bulk_import.py:759 +#: netbox/dcim/forms/bulk_import.py:785 msgid "Port type" msgstr "Typ portu" -#: dcim/forms/bulk_import.py:719 dcim/forms/bulk_import.py:745 +#: netbox/dcim/forms/bulk_import.py:741 netbox/dcim/forms/bulk_import.py:767 msgid "Port speed in bps" msgstr "Prędkość portu w bps" -#: dcim/forms/bulk_import.py:783 +#: netbox/dcim/forms/bulk_import.py:805 msgid "Outlet type" msgstr "Rodzaj wylotu" -#: dcim/forms/bulk_import.py:790 +#: netbox/dcim/forms/bulk_import.py:812 msgid "Local power port which feeds this outlet" msgstr "Lokalny port zasilania zasilający to gniazdko" -#: dcim/forms/bulk_import.py:796 +#: netbox/dcim/forms/bulk_import.py:818 msgid "Electrical phase (for three-phase circuits)" msgstr "Faza elektryczna (dla obwodów trójfazowych)" -#: dcim/forms/bulk_import.py:837 dcim/forms/model_forms.py:1316 -#: virtualization/forms/bulk_import.py:155 -#: virtualization/forms/model_forms.py:305 +#: 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 msgid "Parent interface" msgstr "Interfejs nadrzędny" -#: dcim/forms/bulk_import.py:844 dcim/forms/model_forms.py:1324 -#: virtualization/forms/bulk_import.py:162 -#: virtualization/forms/model_forms.py:313 +#: 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 msgid "Bridged interface" msgstr "Interfejs mostkowy" -#: dcim/forms/bulk_import.py:847 +#: netbox/dcim/forms/bulk_import.py:869 msgid "Lag" msgstr "Opóźnienie" -#: dcim/forms/bulk_import.py:851 +#: netbox/dcim/forms/bulk_import.py:873 msgid "Parent LAG interface" msgstr "Nadrzędny interfejs LAG" -#: dcim/forms/bulk_import.py:854 +#: netbox/dcim/forms/bulk_import.py:876 msgid "Vdcs" msgstr "Vdc" -#: dcim/forms/bulk_import.py:859 +#: netbox/dcim/forms/bulk_import.py:881 msgid "VDC names separated by commas, encased with double quotes. Example:" msgstr "" "Nazwy VDC oddzielone przecinkami, otoczone podwójnymi cudzysłowami. " "Przykład:" -#: dcim/forms/bulk_import.py:865 +#: netbox/dcim/forms/bulk_import.py:887 msgid "Physical medium" msgstr "Medium fizyczne" -#: dcim/forms/bulk_import.py:868 dcim/forms/filtersets.py:1365 +#: netbox/dcim/forms/bulk_import.py:890 netbox/dcim/forms/filtersets.py:1365 msgid "Duplex" msgstr "Dwupoziomowy" -#: dcim/forms/bulk_import.py:873 +#: netbox/dcim/forms/bulk_import.py:895 msgid "Poe mode" msgstr "Tryb PoE" -#: dcim/forms/bulk_import.py:879 +#: netbox/dcim/forms/bulk_import.py:901 msgid "Poe type" msgstr "Typ PoE" -#: dcim/forms/bulk_import.py:888 virtualization/forms/bulk_import.py:168 +#: netbox/dcim/forms/bulk_import.py:910 +#: netbox/virtualization/forms/bulk_import.py:168 msgid "IEEE 802.1Q operational mode (for L2 interfaces)" msgstr "Tryb pracy IEEE 802.1Q (dla interfejsów L2)" -#: dcim/forms/bulk_import.py:895 ipam/forms/bulk_import.py:161 -#: ipam/forms/bulk_import.py:247 ipam/forms/bulk_import.py:283 -#: ipam/forms/filtersets.py:201 ipam/forms/filtersets.py:277 -#: ipam/forms/filtersets.py:336 virtualization/forms/bulk_import.py:175 +#: netbox/dcim/forms/bulk_import.py: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 msgid "Assigned VRF" msgstr "Przypisany VRF" -#: dcim/forms/bulk_import.py:898 +#: netbox/dcim/forms/bulk_import.py:920 msgid "Rf role" msgstr "Rola Rf" -#: dcim/forms/bulk_import.py:901 +#: netbox/dcim/forms/bulk_import.py:923 msgid "Wireless role (AP/station)" msgstr "Rola bezprzewodowa (AP/stacja)" -#: dcim/forms/bulk_import.py:937 +#: netbox/dcim/forms/bulk_import.py:959 #, python-brace-format msgid "VDC {vdc} is not assigned to device {device}" msgstr "VDC {vdc} nie jest przypisany do urządzenia {device}" -#: dcim/forms/bulk_import.py:951 dcim/forms/model_forms.py:1000 -#: dcim/forms/model_forms.py:1575 dcim/forms/object_import.py:117 +#: 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 msgid "Rear port" msgstr "Tylny port" -#: dcim/forms/bulk_import.py:954 +#: netbox/dcim/forms/bulk_import.py:976 msgid "Corresponding rear port" msgstr "Odpowiedni tylny port" -#: dcim/forms/bulk_import.py:959 dcim/forms/bulk_import.py:1000 -#: dcim/forms/bulk_import.py:1216 +#: netbox/dcim/forms/bulk_import.py:981 netbox/dcim/forms/bulk_import.py:1022 +#: netbox/dcim/forms/bulk_import.py:1238 msgid "Physical medium classification" msgstr "Klasyfikacja medium fizycznego" -#: dcim/forms/bulk_import.py:1028 dcim/tables/devices.py:822 +#: netbox/dcim/forms/bulk_import.py:1050 netbox/dcim/tables/devices.py:822 msgid "Installed device" msgstr "Zainstalowane urządzenie" -#: dcim/forms/bulk_import.py:1032 +#: netbox/dcim/forms/bulk_import.py:1054 msgid "Child device installed within this bay" msgstr "Urządzenie dziecięce zainstalowane w tej wnęce" -#: dcim/forms/bulk_import.py:1034 +#: netbox/dcim/forms/bulk_import.py:1056 msgid "Child device not found." msgstr "Nie znaleziono urządzenia dziecięcego." -#: dcim/forms/bulk_import.py:1092 +#: netbox/dcim/forms/bulk_import.py:1114 msgid "Parent inventory item" msgstr "Nadrzędny element zapasów" -#: dcim/forms/bulk_import.py:1095 +#: netbox/dcim/forms/bulk_import.py:1117 msgid "Component type" msgstr "Typ komponentu" -#: dcim/forms/bulk_import.py:1099 +#: netbox/dcim/forms/bulk_import.py:1121 msgid "Component Type" msgstr "Typ komponentu" -#: dcim/forms/bulk_import.py:1102 +#: netbox/dcim/forms/bulk_import.py:1124 msgid "Compnent name" msgstr "Nazwa firmy" -#: dcim/forms/bulk_import.py:1104 +#: netbox/dcim/forms/bulk_import.py:1126 msgid "Component Name" msgstr "Nazwa komponentu" -#: dcim/forms/bulk_import.py:1146 +#: netbox/dcim/forms/bulk_import.py:1168 #, python-brace-format msgid "Component not found: {device} - {component_name}" msgstr "Nie znaleziono komponentu: {device} - {component_name}" -#: dcim/forms/bulk_import.py:1171 +#: netbox/dcim/forms/bulk_import.py:1193 msgid "Side A device" msgstr "Urządzenie boczne A" -#: dcim/forms/bulk_import.py:1174 dcim/forms/bulk_import.py:1192 +#: netbox/dcim/forms/bulk_import.py:1196 netbox/dcim/forms/bulk_import.py:1214 msgid "Device name" msgstr "Nazwa urządzenia" -#: dcim/forms/bulk_import.py:1177 +#: netbox/dcim/forms/bulk_import.py:1199 msgid "Side A type" msgstr "Typ strony A" -#: dcim/forms/bulk_import.py:1180 dcim/forms/bulk_import.py:1198 +#: netbox/dcim/forms/bulk_import.py:1202 netbox/dcim/forms/bulk_import.py:1220 msgid "Termination type" msgstr "Typ zakończenia" -#: dcim/forms/bulk_import.py:1183 +#: netbox/dcim/forms/bulk_import.py:1205 msgid "Side A name" msgstr "Nazwa strony A" -#: dcim/forms/bulk_import.py:1184 dcim/forms/bulk_import.py:1202 +#: netbox/dcim/forms/bulk_import.py:1206 netbox/dcim/forms/bulk_import.py:1224 msgid "Termination name" msgstr "Nazwa zakończenia" -#: dcim/forms/bulk_import.py:1189 +#: netbox/dcim/forms/bulk_import.py:1211 msgid "Side B device" msgstr "Urządzenie boczne B" -#: dcim/forms/bulk_import.py:1195 +#: netbox/dcim/forms/bulk_import.py:1217 msgid "Side B type" msgstr "Strona typu B" -#: dcim/forms/bulk_import.py:1201 +#: netbox/dcim/forms/bulk_import.py:1223 msgid "Side B name" msgstr "Nazwa strony B" -#: dcim/forms/bulk_import.py:1210 wireless/forms/bulk_import.py:86 +#: netbox/dcim/forms/bulk_import.py:1232 +#: netbox/wireless/forms/bulk_import.py:86 msgid "Connection status" msgstr "Status połączenia" -#: dcim/forms/bulk_import.py:1262 +#: netbox/dcim/forms/bulk_import.py:1284 #, python-brace-format msgid "Side {side_upper}: {device} {termination_object} is already connected" msgstr "Bok {side_upper}: {device} {termination_object} jest już połączony" -#: dcim/forms/bulk_import.py:1268 +#: netbox/dcim/forms/bulk_import.py:1290 #, python-brace-format msgid "{side_upper} side termination not found: {device} {name}" msgstr "{side_upper} Nie znaleziono zakończenia bocznego: {device} {name}" -#: dcim/forms/bulk_import.py:1293 dcim/forms/model_forms.py:785 -#: dcim/tables/devices.py:1027 templates/dcim/device.html:132 -#: templates/dcim/virtualchassis.html:27 templates/dcim/virtualchassis.html:67 +#: 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/templates/dcim/virtualchassis.html:27 +#: netbox/templates/dcim/virtualchassis.html:67 msgid "Master" msgstr "Mistrzu" -#: dcim/forms/bulk_import.py:1297 +#: netbox/dcim/forms/bulk_import.py:1319 msgid "Master device" msgstr "Urządzenie główne" -#: dcim/forms/bulk_import.py:1314 +#: netbox/dcim/forms/bulk_import.py:1336 msgid "Name of parent site" msgstr "Nazwa witryny nadrzędnej" -#: dcim/forms/bulk_import.py:1348 +#: netbox/dcim/forms/bulk_import.py:1370 msgid "Upstream power panel" msgstr "Panel zasilania przed strumieniem" -#: dcim/forms/bulk_import.py:1378 +#: netbox/dcim/forms/bulk_import.py:1400 msgid "Primary or redundant" msgstr "Podstawowy lub nadmiarowy" -#: dcim/forms/bulk_import.py:1383 +#: netbox/dcim/forms/bulk_import.py:1405 msgid "Supply type (AC/DC)" msgstr "Rodzaj zasilania (AC/DC)" -#: dcim/forms/bulk_import.py:1388 +#: netbox/dcim/forms/bulk_import.py:1410 msgid "Single or three-phase" msgstr "Pojedynczy lub trójfazowy" -#: dcim/forms/bulk_import.py:1439 dcim/forms/model_forms.py:1670 -#: templates/dcim/device.html:190 templates/dcim/virtualdevicecontext.html:30 -#: templates/virtualization/virtualmachine.html:52 +#: netbox/dcim/forms/bulk_import.py:1461 netbox/dcim/forms/model_forms.py:1677 +#: netbox/templates/dcim/device.html:190 +#: netbox/templates/dcim/virtualdevicecontext.html:30 +#: netbox/templates/virtualization/virtualmachine.html:52 msgid "Primary IPv4" msgstr "Podstawowy IPv4" -#: dcim/forms/bulk_import.py:1443 +#: netbox/dcim/forms/bulk_import.py:1465 msgid "IPv4 address with mask, e.g. 1.2.3.4/24" msgstr "Adres IPv4 z maską, np. 1.2.3.4/24" -#: dcim/forms/bulk_import.py:1446 dcim/forms/model_forms.py:1679 -#: templates/dcim/device.html:206 templates/dcim/virtualdevicecontext.html:41 -#: templates/virtualization/virtualmachine.html:68 +#: netbox/dcim/forms/bulk_import.py:1468 netbox/dcim/forms/model_forms.py:1686 +#: netbox/templates/dcim/device.html:206 +#: netbox/templates/dcim/virtualdevicecontext.html:41 +#: netbox/templates/virtualization/virtualmachine.html:68 msgid "Primary IPv6" msgstr "Podstawowy IPv6" -#: dcim/forms/bulk_import.py:1450 +#: netbox/dcim/forms/bulk_import.py:1472 msgid "IPv6 address with prefix length, e.g. 2001:db8::1/64" msgstr "Adres IPv6 z prefiksem, np. 2001:db8::1/64" -#: dcim/forms/common.py:24 dcim/models/device_components.py:527 -#: templates/dcim/interface.html:57 -#: templates/virtualization/vminterface.html:55 -#: virtualization/forms/bulk_edit.py:225 +#: netbox/dcim/forms/common.py:24 netbox/dcim/models/device_components.py:527 +#: netbox/templates/dcim/interface.html:57 +#: netbox/templates/virtualization/vminterface.html:55 +#: netbox/virtualization/forms/bulk_edit.py:225 msgid "MTU" msgstr "MTU" -#: dcim/forms/common.py:65 +#: netbox/dcim/forms/common.py:65 #, python-brace-format msgid "" "The tagged VLANs ({vlans}) must belong to the same site as the interface's " @@ -4209,7 +4642,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" -#: dcim/forms/common.py:126 +#: netbox/dcim/forms/common.py:126 msgid "" "Cannot install module with placeholder values in a module bay with no " "position defined." @@ -4217,7 +4650,7 @@ msgstr "" "Nie można zainstalować modułu z wartościami zastępczymi w kieszeni modułu " "bez zdefiniowanej pozycji." -#: dcim/forms/common.py:131 +#: netbox/dcim/forms/common.py:131 #, python-brace-format msgid "" "Cannot install module with placeholder values in a module bay tree {level} " @@ -4226,187 +4659,198 @@ 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." -#: dcim/forms/common.py:144 +#: netbox/dcim/forms/common.py:144 #, 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" -#: dcim/forms/common.py:153 +#: netbox/dcim/forms/common.py:153 #, python-brace-format msgid "A {model} named {name} already exists" msgstr "A {model} o nazwie {name} już istnieje" -#: dcim/forms/connections.py:49 dcim/forms/model_forms.py:738 -#: dcim/tables/power.py:66 templates/dcim/inc/cable_termination.html:37 -#: templates/dcim/powerfeed.html:24 templates/dcim/powerpanel.html:19 -#: templates/dcim/trace/powerpanel.html:4 +#: netbox/dcim/forms/connections.py:49 netbox/dcim/forms/model_forms.py:738 +#: netbox/dcim/tables/power.py:66 +#: netbox/templates/dcim/inc/cable_termination.html:37 +#: netbox/templates/dcim/powerfeed.html:24 +#: netbox/templates/dcim/powerpanel.html:19 +#: netbox/templates/dcim/trace/powerpanel.html:4 msgid "Power Panel" msgstr "Panel zasilania" -#: dcim/forms/connections.py:58 dcim/forms/model_forms.py:765 -#: templates/dcim/powerfeed.html:21 templates/dcim/powerport.html:80 +#: netbox/dcim/forms/connections.py:58 netbox/dcim/forms/model_forms.py:765 +#: netbox/templates/dcim/powerfeed.html:21 +#: netbox/templates/dcim/powerport.html:80 msgid "Power Feed" msgstr "Zasilanie zasilania" -#: dcim/forms/connections.py:81 +#: netbox/dcim/forms/connections.py:81 msgid "Side" msgstr "Bok" -#: dcim/forms/filtersets.py:136 dcim/tables/devices.py:295 +#: netbox/dcim/forms/filtersets.py:136 netbox/dcim/tables/devices.py:295 msgid "Device Status" msgstr "Status urządzenia" -#: dcim/forms/filtersets.py:149 +#: netbox/dcim/forms/filtersets.py:149 msgid "Parent region" msgstr "Region macierzysty" -#: dcim/forms/filtersets.py:163 tenancy/forms/bulk_import.py:28 -#: tenancy/forms/bulk_import.py:62 tenancy/forms/filtersets.py:33 -#: tenancy/forms/filtersets.py:62 wireless/forms/bulk_import.py:25 -#: wireless/forms/filtersets.py:25 +#: netbox/dcim/forms/filtersets.py:163 netbox/tenancy/forms/bulk_import.py:28 +#: netbox/tenancy/forms/bulk_import.py:62 +#: netbox/tenancy/forms/filtersets.py:33 netbox/tenancy/forms/filtersets.py:62 +#: netbox/wireless/forms/bulk_import.py:25 +#: netbox/wireless/forms/filtersets.py:25 msgid "Parent group" msgstr "Grupa nadrzędna" -#: dcim/forms/filtersets.py:242 templates/dcim/location.html:58 -#: templates/dcim/site.html:56 +#: netbox/dcim/forms/filtersets.py:242 netbox/templates/dcim/location.html:58 +#: netbox/templates/dcim/site.html:56 msgid "Facility" msgstr "Obiekty" -#: dcim/forms/filtersets.py:380 -msgid "Rack type" -msgstr "Typ szafy" - -#: dcim/forms/filtersets.py:397 +#: netbox/dcim/forms/filtersets.py:397 msgid "Function" msgstr "Funkcja" -#: dcim/forms/filtersets.py:483 dcim/forms/model_forms.py:373 -#: templates/inc/panels/image_attachments.html:6 +#: netbox/dcim/forms/filtersets.py:483 netbox/dcim/forms/model_forms.py:373 +#: netbox/templates/inc/panels/image_attachments.html:6 msgid "Images" msgstr "Obrazy" -#: dcim/forms/filtersets.py:486 dcim/forms/filtersets.py:611 -#: dcim/forms/filtersets.py:726 +#: netbox/dcim/forms/filtersets.py:486 netbox/dcim/forms/filtersets.py:611 +#: netbox/dcim/forms/filtersets.py:726 msgid "Components" msgstr "Komponenty" -#: dcim/forms/filtersets.py:506 +#: netbox/dcim/forms/filtersets.py:506 msgid "Subdevice role" msgstr "Rola urządzenia podrzędnego" -#: dcim/forms/filtersets.py:790 dcim/tables/racks.py:54 -#: templates/dcim/racktype.html:20 +#: netbox/dcim/forms/filtersets.py:790 netbox/dcim/tables/racks.py:54 +#: netbox/templates/dcim/racktype.html:20 msgid "Model" msgstr "Model" -#: dcim/forms/filtersets.py:834 +#: netbox/dcim/forms/filtersets.py:834 msgid "Has an OOB IP" msgstr "Posiada adres IP OOB" -#: dcim/forms/filtersets.py:841 +#: netbox/dcim/forms/filtersets.py:841 msgid "Virtual chassis member" msgstr "Wirtualny element podwozia" -#: dcim/forms/filtersets.py:890 +#: netbox/dcim/forms/filtersets.py:890 msgid "Has virtual device contexts" msgstr "Posiada konteksty urządzeń wirtualnych" -#: dcim/forms/filtersets.py:903 extras/filtersets.py:585 -#: ipam/forms/filtersets.py:452 virtualization/forms/filtersets.py:112 +#: netbox/dcim/forms/filtersets.py:903 netbox/extras/filtersets.py:585 +#: netbox/ipam/forms/filtersets.py:452 +#: netbox/virtualization/forms/filtersets.py:112 msgid "Cluster group" msgstr "Grupa klastra" -#: dcim/forms/filtersets.py:1210 +#: netbox/dcim/forms/filtersets.py:1210 msgid "Cabled" msgstr "Okablowany" -#: dcim/forms/filtersets.py:1217 +#: netbox/dcim/forms/filtersets.py:1217 msgid "Occupied" msgstr "Zajęty" -#: dcim/forms/filtersets.py:1244 dcim/forms/filtersets.py:1269 -#: dcim/forms/filtersets.py:1293 dcim/forms/filtersets.py:1313 -#: dcim/forms/filtersets.py:1336 dcim/tables/devices.py:364 -#: templates/dcim/consoleport.html:55 templates/dcim/consoleserverport.html:55 -#: templates/dcim/frontport.html:69 templates/dcim/interface.html:140 -#: templates/dcim/powerfeed.html:110 templates/dcim/poweroutlet.html:59 -#: templates/dcim/powerport.html:59 templates/dcim/rearport.html:65 +#: netbox/dcim/forms/filtersets.py: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/templates/dcim/consoleport.html:55 +#: netbox/templates/dcim/consoleserverport.html:55 +#: netbox/templates/dcim/frontport.html:69 +#: netbox/templates/dcim/interface.html:140 +#: netbox/templates/dcim/powerfeed.html:110 +#: netbox/templates/dcim/poweroutlet.html:59 +#: netbox/templates/dcim/powerport.html:59 +#: netbox/templates/dcim/rearport.html:65 msgid "Connection" msgstr "Połączenie" -#: dcim/forms/filtersets.py:1348 extras/forms/bulk_edit.py:326 -#: extras/forms/bulk_import.py:247 extras/forms/filtersets.py:464 -#: extras/forms/model_forms.py:675 extras/tables/tables.py:579 -#: templates/extras/journalentry.html:30 +#: netbox/dcim/forms/filtersets.py:1348 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 "Uprzejmy" -#: dcim/forms/filtersets.py:1377 +#: netbox/dcim/forms/filtersets.py:1377 msgid "Mgmt only" msgstr "Tylko MGMT" -#: dcim/forms/filtersets.py:1389 dcim/forms/model_forms.py:1383 -#: dcim/models/device_components.py:629 templates/dcim/interface.html:129 +#: 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 msgid "WWN" msgstr "WWN" -#: dcim/forms/filtersets.py:1409 +#: netbox/dcim/forms/filtersets.py:1409 msgid "Wireless channel" msgstr "Kanał bezprzewodowy" -#: dcim/forms/filtersets.py:1413 +#: netbox/dcim/forms/filtersets.py:1413 msgid "Channel frequency (MHz)" msgstr "Częstotliwość kanału (MHz)" -#: dcim/forms/filtersets.py:1417 +#: netbox/dcim/forms/filtersets.py:1417 msgid "Channel width (MHz)" msgstr "Szerokość kanału (MHz)" -#: dcim/forms/filtersets.py:1421 templates/dcim/interface.html:85 +#: netbox/dcim/forms/filtersets.py:1421 +#: netbox/templates/dcim/interface.html:85 msgid "Transmit power (dBm)" msgstr "Moc transmisji (dBm)" -#: dcim/forms/filtersets.py:1446 dcim/forms/filtersets.py:1471 -#: dcim/tables/devices.py:327 templates/dcim/cable.html:12 -#: templates/dcim/cable_trace.html:46 templates/dcim/frontport.html:77 -#: templates/dcim/htmx/cable_edit.html:50 -#: templates/dcim/inc/connection_endpoints.html:4 -#: templates/dcim/rearport.html:73 templates/dcim/trace/cable.html:7 +#: netbox/dcim/forms/filtersets.py:1446 netbox/dcim/forms/filtersets.py:1471 +#: netbox/dcim/tables/devices.py:327 netbox/templates/dcim/cable.html:12 +#: netbox/templates/dcim/cable_trace.html:46 +#: netbox/templates/dcim/frontport.html:77 +#: netbox/templates/dcim/htmx/cable_edit.html:50 +#: netbox/templates/dcim/inc/connection_endpoints.html:4 +#: netbox/templates/dcim/rearport.html:73 +#: netbox/templates/dcim/trace/cable.html:7 msgid "Cable" msgstr "Kabel" -#: dcim/forms/filtersets.py:1550 dcim/tables/devices.py:949 +#: netbox/dcim/forms/filtersets.py:1550 netbox/dcim/tables/devices.py:949 msgid "Discovered" msgstr "Odkryte" -#: dcim/forms/formsets.py:20 +#: netbox/dcim/forms/formsets.py:20 #, python-brace-format msgid "A virtual chassis member already exists in position {vc_position}." msgstr "Wirtualny element podwozia istnieje już na pozycji {vc_position}." -#: dcim/forms/model_forms.py:140 +#: netbox/dcim/forms/model_forms.py:140 msgid "Contact Info" msgstr "Dane kontaktowe" -#: dcim/forms/model_forms.py:195 templates/dcim/rackrole.html:19 +#: netbox/dcim/forms/model_forms.py:195 netbox/templates/dcim/rackrole.html:19 msgid "Rack Role" msgstr "Rola szafy" -#: dcim/forms/model_forms.py:212 dcim/forms/model_forms.py:362 -#: dcim/forms/model_forms.py:446 utilities/forms/fields/fields.py:47 +#: netbox/dcim/forms/model_forms.py:212 netbox/dcim/forms/model_forms.py:362 +#: netbox/dcim/forms/model_forms.py:446 +#: netbox/utilities/forms/fields/fields.py:47 msgid "Slug" msgstr "Identyfikator" -#: dcim/forms/model_forms.py:259 +#: netbox/dcim/forms/model_forms.py:259 msgid "Select a pre-defined rack type, or set physical characteristics below." msgstr "" "Wybierz predefiniowany typ szafy lub ustaw parametry fizyczne poniżej." -#: dcim/forms/model_forms.py:265 +#: netbox/dcim/forms/model_forms.py:265 msgid "Inventory Control" msgstr "Kontrola zapasów" -#: dcim/forms/model_forms.py:313 +#: netbox/dcim/forms/model_forms.py:313 msgid "" "Comma-separated list of numeric unit IDs. A range may be specified using a " "hyphen." @@ -4414,145 +4858,172 @@ msgstr "" "Lista numerycznych identyfikatorów jednostek oddzielonych przecinkami. " "Zakres można określić za pomocą myślnika." -#: dcim/forms/model_forms.py:322 dcim/tables/racks.py:202 +#: netbox/dcim/forms/model_forms.py:322 netbox/dcim/tables/racks.py:202 msgid "Reservation" msgstr "Rezerwacje" -#: dcim/forms/model_forms.py:423 templates/dcim/devicerole.html:23 +#: netbox/dcim/forms/model_forms.py:423 +#: netbox/templates/dcim/devicerole.html:23 msgid "Device Role" msgstr "Rola urządzenia" -#: dcim/forms/model_forms.py:490 dcim/models/devices.py:644 +#: netbox/dcim/forms/model_forms.py:490 netbox/dcim/models/devices.py:644 msgid "The lowest-numbered unit occupied by the device" msgstr "Jednostka o najniższej liczbie zajmowana przez urządzenie" -#: dcim/forms/model_forms.py:547 +#: netbox/dcim/forms/model_forms.py:547 msgid "The position in the virtual chassis this device is identified by" msgstr "" "Pozycja w wirtualnej obudowie tego urządzenia jest identyfikowana przez" -#: dcim/forms/model_forms.py:552 +#: netbox/dcim/forms/model_forms.py:552 msgid "The priority of the device in the virtual chassis" msgstr "Priorytet urządzenia w wirtualnej obudowie" -#: dcim/forms/model_forms.py:659 +#: netbox/dcim/forms/model_forms.py:659 msgid "Automatically populate components associated with this module type" msgstr "Automatyczne wypełnianie komponentów powiązanych z tym typem modułu" -#: dcim/forms/model_forms.py:767 +#: netbox/dcim/forms/model_forms.py:767 msgid "Characteristics" msgstr "Charakterystyka" -#: dcim/forms/model_forms.py:1087 +#: netbox/dcim/forms/model_forms.py:914 +#, python-brace-format +msgid "" +"Alphanumeric ranges are supported for bulk creation. Mixed cases and types " +"within a single range are not supported (example: " +"[ge,xe]-0/0/[0-9]). The token {module}, if " +"present, will be automatically replaced with the position value when " +"creating a new module." +msgstr "" + +#: netbox/dcim/forms/model_forms.py:1094 msgid "Console port template" msgstr "Szablon portu konsoli" -#: dcim/forms/model_forms.py:1095 +#: netbox/dcim/forms/model_forms.py:1102 msgid "Console server port template" msgstr "Szablon portu serwera konsoli" -#: dcim/forms/model_forms.py:1103 +#: netbox/dcim/forms/model_forms.py:1110 msgid "Front port template" msgstr "Szablon portu przedniego" -#: dcim/forms/model_forms.py:1111 +#: netbox/dcim/forms/model_forms.py:1118 msgid "Interface template" msgstr "Szablon interfejsu" -#: dcim/forms/model_forms.py:1119 +#: netbox/dcim/forms/model_forms.py:1126 msgid "Power outlet template" msgstr "Szablon gniazdka elektrycznego" -#: dcim/forms/model_forms.py:1127 +#: netbox/dcim/forms/model_forms.py:1134 msgid "Power port template" msgstr "Szablon portu zasilania" -#: dcim/forms/model_forms.py:1135 +#: netbox/dcim/forms/model_forms.py:1142 msgid "Rear port template" msgstr "Szablon tylnego portu" -#: dcim/forms/model_forms.py:1144 dcim/forms/model_forms.py:1388 -#: dcim/forms/model_forms.py:1551 dcim/forms/model_forms.py:1583 -#: dcim/tables/connections.py:65 ipam/forms/bulk_import.py:318 -#: ipam/forms/model_forms.py:280 ipam/forms/model_forms.py:289 -#: ipam/tables/fhrp.py:64 ipam/tables/ip.py:372 ipam/tables/vlans.py:169 -#: templates/circuits/inc/circuit_termination_fields.html:51 -#: templates/dcim/frontport.html:106 templates/dcim/interface.html:27 -#: templates/dcim/interface.html:184 templates/dcim/interface.html:310 -#: templates/dcim/rearport.html:102 -#: templates/virtualization/vminterface.html:18 -#: templates/vpn/tunneltermination.html:31 -#: templates/wireless/inc/wirelesslink_interface.html:10 -#: templates/wireless/wirelesslink.html:10 -#: templates/wireless/wirelesslink.html:55 -#: virtualization/forms/model_forms.py:348 vpn/forms/bulk_import.py:297 -#: vpn/forms/model_forms.py:436 vpn/forms/model_forms.py:445 -#: wireless/forms/model_forms.py:113 wireless/forms/model_forms.py:155 +#: netbox/dcim/forms/model_forms.py: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" -#: dcim/forms/model_forms.py:1145 dcim/forms/model_forms.py:1584 -#: dcim/tables/connections.py:27 templates/dcim/consoleport.html:17 -#: templates/dcim/consoleserverport.html:74 templates/dcim/frontport.html:112 +#: netbox/dcim/forms/model_forms.py:1152 netbox/dcim/forms/model_forms.py:1591 +#: netbox/dcim/tables/connections.py:27 +#: netbox/templates/dcim/consoleport.html:17 +#: netbox/templates/dcim/consoleserverport.html:74 +#: netbox/templates/dcim/frontport.html:112 msgid "Console Port" msgstr "Port konsoli" -#: dcim/forms/model_forms.py:1146 dcim/forms/model_forms.py:1585 -#: templates/dcim/consoleport.html:73 templates/dcim/consoleserverport.html:17 -#: templates/dcim/frontport.html:109 +#: netbox/dcim/forms/model_forms.py:1153 netbox/dcim/forms/model_forms.py:1592 +#: 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" -#: dcim/forms/model_forms.py:1147 dcim/forms/model_forms.py:1586 -#: templates/circuits/inc/circuit_termination_fields.html:52 -#: templates/dcim/consoleport.html:76 templates/dcim/consoleserverport.html:77 -#: templates/dcim/frontport.html:17 templates/dcim/frontport.html:115 -#: templates/dcim/interface.html:187 templates/dcim/rearport.html:105 +#: netbox/dcim/forms/model_forms.py:1154 netbox/dcim/forms/model_forms.py:1593 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:52 +#: netbox/templates/dcim/consoleport.html:76 +#: netbox/templates/dcim/consoleserverport.html:77 +#: netbox/templates/dcim/frontport.html:17 +#: netbox/templates/dcim/frontport.html:115 +#: netbox/templates/dcim/interface.html:187 +#: netbox/templates/dcim/rearport.html:105 msgid "Front Port" msgstr "Port przedni" -#: dcim/forms/model_forms.py:1148 dcim/forms/model_forms.py:1587 -#: dcim/tables/devices.py:710 -#: templates/circuits/inc/circuit_termination_fields.html:53 -#: templates/dcim/consoleport.html:79 templates/dcim/consoleserverport.html:80 -#: templates/dcim/frontport.html:50 templates/dcim/frontport.html:118 -#: templates/dcim/interface.html:190 templates/dcim/rearport.html:17 -#: templates/dcim/rearport.html:108 +#: netbox/dcim/forms/model_forms.py:1155 netbox/dcim/forms/model_forms.py:1594 +#: netbox/dcim/tables/devices.py:710 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:53 +#: netbox/templates/dcim/consoleport.html:79 +#: netbox/templates/dcim/consoleserverport.html:80 +#: netbox/templates/dcim/frontport.html:50 +#: netbox/templates/dcim/frontport.html:118 +#: netbox/templates/dcim/interface.html:190 +#: netbox/templates/dcim/rearport.html:17 +#: netbox/templates/dcim/rearport.html:108 msgid "Rear Port" msgstr "Tylny port" -#: dcim/forms/model_forms.py:1149 dcim/forms/model_forms.py:1588 -#: dcim/tables/connections.py:46 dcim/tables/devices.py:512 -#: templates/dcim/poweroutlet.html:44 templates/dcim/powerport.html:17 +#: 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/templates/dcim/powerport.html:17 msgid "Power Port" msgstr "Port zasilania" -#: dcim/forms/model_forms.py:1150 dcim/forms/model_forms.py:1589 -#: templates/dcim/poweroutlet.html:17 templates/dcim/powerport.html:77 +#: netbox/dcim/forms/model_forms.py:1157 netbox/dcim/forms/model_forms.py:1596 +#: netbox/templates/dcim/poweroutlet.html:17 +#: netbox/templates/dcim/powerport.html:77 msgid "Power Outlet" msgstr "Gniazdo zasilania" -#: dcim/forms/model_forms.py:1152 dcim/forms/model_forms.py:1591 +#: netbox/dcim/forms/model_forms.py:1159 netbox/dcim/forms/model_forms.py:1598 msgid "Component Assignment" msgstr "Przypisywanie komponentów" -#: dcim/forms/model_forms.py:1195 dcim/forms/model_forms.py:1638 +#: netbox/dcim/forms/model_forms.py:1202 netbox/dcim/forms/model_forms.py:1645 msgid "An InventoryItem can only be assigned to a single component." msgstr "InventoryItem można przypisać tylko do pojedynczego komponentu." -#: dcim/forms/model_forms.py:1332 +#: netbox/dcim/forms/model_forms.py:1339 msgid "LAG interface" msgstr "Interfejs LAG" -#: dcim/forms/model_forms.py:1355 +#: netbox/dcim/forms/model_forms.py:1362 msgid "Filter VLANs available for assignment by group." msgstr "Filtruj sieci VLAN dostępne do przypisania według grup." -#: dcim/forms/model_forms.py:1484 +#: netbox/dcim/forms/model_forms.py:1491 msgid "Child Device" msgstr "Urządzenie dziecięce" -#: dcim/forms/model_forms.py:1485 +#: netbox/dcim/forms/model_forms.py:1492 msgid "" "Child devices must first be created and assigned to the site and rack of the" " parent device." @@ -4560,32 +5031,35 @@ msgstr "" "Urządzenia podrzędne muszą być najpierw utworzone i przypisane do terenu " "i szafy urządzenia nadrzędnego." -#: dcim/forms/model_forms.py:1527 +#: netbox/dcim/forms/model_forms.py:1534 msgid "Console port" msgstr "Port konsoli" -#: dcim/forms/model_forms.py:1535 +#: netbox/dcim/forms/model_forms.py:1542 msgid "Console server port" msgstr "Port serwera konsoli" -#: dcim/forms/model_forms.py:1543 +#: netbox/dcim/forms/model_forms.py:1550 msgid "Front port" msgstr "Port przedni" -#: dcim/forms/model_forms.py:1559 +#: netbox/dcim/forms/model_forms.py:1566 msgid "Power outlet" msgstr "Gniazdo zasilania" -#: dcim/forms/model_forms.py:1579 templates/dcim/inventoryitem.html:17 +#: netbox/dcim/forms/model_forms.py:1586 +#: netbox/templates/dcim/inventoryitem.html:17 msgid "Inventory Item" msgstr "Przedmiot zapasów" -#: dcim/forms/model_forms.py:1652 templates/dcim/inventoryitemrole.html:15 +#: netbox/dcim/forms/model_forms.py:1659 +#: netbox/templates/dcim/inventoryitemrole.html:15 msgid "Inventory Item Role" msgstr "Rola pozycji zapasów" -#: dcim/forms/object_create.py:48 dcim/forms/object_create.py:199 -#: dcim/forms/object_create.py:355 +#: netbox/dcim/forms/object_create.py:48 +#: netbox/dcim/forms/object_create.py:199 +#: netbox/dcim/forms/object_create.py:347 msgid "" "Alphanumeric ranges are supported. (Must match the number of objects being " "created.)" @@ -4593,7 +5067,7 @@ msgstr "" "Obsługiwane są zakresy alfanumeryczne. (Muszą odpowiadać liczbie tworzonych " "obiektów.)" -#: dcim/forms/object_create.py:68 +#: netbox/dcim/forms/object_create.py:68 #, python-brace-format msgid "" "The provided pattern specifies {value_count} values, but {pattern_count} are" @@ -4602,18 +5076,19 @@ msgstr "" "Podany wzór określa {value_count} wartości, ale {pattern_count} są " "oczekiwane." -#: dcim/forms/object_create.py:110 dcim/forms/object_create.py:271 -#: dcim/tables/devices.py:252 +#: netbox/dcim/forms/object_create.py:110 +#: netbox/dcim/forms/object_create.py:263 netbox/dcim/tables/devices.py:252 msgid "Rear ports" msgstr "Tylne porty" -#: dcim/forms/object_create.py:111 dcim/forms/object_create.py:272 +#: netbox/dcim/forms/object_create.py:111 +#: netbox/dcim/forms/object_create.py:264 msgid "Select one rear port assignment for each front port being created." msgstr "" "Wybierz jedno przypisanie portu tylnego dla każdego tworzonego portu " "przedniego." -#: dcim/forms/object_create.py:164 +#: netbox/dcim/forms/object_create.py:164 #, python-brace-format msgid "" "The number of front port templates to be created ({frontport_count}) must " @@ -4622,16 +5097,7 @@ msgstr "" "Liczba szablonów portów przednich do utworzenia ({frontport_count}) musi " "odpowiadać wybranej liczbie pozycji tylnych portów ({rearport_count})." -#: dcim/forms/object_create.py:251 -#, python-brace-format -msgid "" -"The string {module} will be replaced with the position of the " -"assigned module, if any." -msgstr "" -"Sznurek {module} zostanie zastąpiony pozycją przypisanego " -"modułu, jeśli istnieje." - -#: dcim/forms/object_create.py:320 +#: netbox/dcim/forms/object_create.py:312 #, python-brace-format msgid "" "The number of front ports to be created ({frontport_count}) must match the " @@ -4640,17 +5106,18 @@ msgstr "" "Liczba portów przednich do utworzenia ({frontport_count}) musi odpowiadać " "wybranej liczbie pozycji tylnych portów ({rearport_count})." -#: dcim/forms/object_create.py:409 dcim/tables/devices.py:1033 -#: ipam/tables/fhrp.py:31 templates/dcim/virtualchassis.html:53 -#: templates/dcim/virtualchassis_edit.html:47 templates/ipam/fhrpgroup.html:38 +#: netbox/dcim/forms/object_create.py:401 netbox/dcim/tables/devices.py:1033 +#: netbox/ipam/tables/fhrp.py:31 netbox/templates/dcim/virtualchassis.html:53 +#: netbox/templates/dcim/virtualchassis_edit.html:47 +#: netbox/templates/ipam/fhrpgroup.html:38 msgid "Members" msgstr "Członkowie" -#: dcim/forms/object_create.py:418 +#: netbox/dcim/forms/object_create.py:410 msgid "Initial position" msgstr "Pozycja początkowa" -#: dcim/forms/object_create.py:421 +#: netbox/dcim/forms/object_create.py:413 msgid "" "Position of the first member device. Increases by one for each additional " "member." @@ -4658,66 +5125,68 @@ msgstr "" "Położenie pierwszego urządzenia członkowskiego. Zwiększa się o jeden dla " "każdego dodatkowego członka." -#: dcim/forms/object_create.py:435 +#: netbox/dcim/forms/object_create.py:427 msgid "A position must be specified for the first VC member." msgstr "Pozycja musi być określona dla pierwszego członka VC." -#: dcim/models/cables.py:62 dcim/models/device_component_templates.py:55 -#: dcim/models/device_components.py:62 extras/models/customfields.py:111 +#: netbox/dcim/models/cables.py:62 +#: netbox/dcim/models/device_component_templates.py:55 +#: netbox/dcim/models/device_components.py:62 +#: netbox/extras/models/customfields.py:111 msgid "label" msgstr "marka" -#: dcim/models/cables.py:71 +#: netbox/dcim/models/cables.py:71 msgid "length" msgstr "długość" -#: dcim/models/cables.py:78 +#: netbox/dcim/models/cables.py:78 msgid "length unit" msgstr "jednostka długości" -#: dcim/models/cables.py:95 +#: netbox/dcim/models/cables.py:95 msgid "cable" msgstr "kabel" -#: dcim/models/cables.py:96 +#: netbox/dcim/models/cables.py:96 msgid "cables" msgstr "linki" -#: dcim/models/cables.py:165 +#: netbox/dcim/models/cables.py:165 msgid "Must specify a unit when setting a cable length" msgstr "Należy określić jednostkę podczas ustawiania długości kabla" -#: dcim/models/cables.py:168 +#: netbox/dcim/models/cables.py:168 msgid "Must define A and B terminations when creating a new cable." msgstr "Musi zdefiniować zakończenia A i B podczas tworzenia nowego kabla." -#: dcim/models/cables.py:175 +#: netbox/dcim/models/cables.py:175 msgid "Cannot connect different termination types to same end of cable." msgstr "" "Nie można podłączyć różnych typów zakończeń do tego samego końca kabla." -#: dcim/models/cables.py:183 +#: netbox/dcim/models/cables.py:183 #, python-brace-format msgid "Incompatible termination types: {type_a} and {type_b}" msgstr "Niekompatybilne typy zakończeń: {type_a} a {type_b}" -#: dcim/models/cables.py:193 +#: netbox/dcim/models/cables.py:193 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." -#: dcim/models/cables.py:260 ipam/models/asns.py:37 +#: netbox/dcim/models/cables.py:260 netbox/ipam/models/asns.py:37 msgid "end" msgstr "zakończyć" -#: dcim/models/cables.py:313 +#: netbox/dcim/models/cables.py:313 msgid "cable termination" msgstr "zakończenie kabla" -#: dcim/models/cables.py:314 +#: netbox/dcim/models/cables.py:314 msgid "cable terminations" msgstr "zakończenia kabli" -#: dcim/models/cables.py:333 +#: netbox/dcim/models/cables.py:333 #, python-brace-format msgid "" "Duplicate termination found for {app_label}.{model} {termination_id}: cable " @@ -4726,37 +5195,37 @@ msgstr "" "Znaleziono duplikat zakończenia {app_label}.{model} {termination_id}: kabel " "{cable_pk}" -#: dcim/models/cables.py:343 +#: netbox/dcim/models/cables.py:343 #, python-brace-format msgid "Cables cannot be terminated to {type_display} interfaces" msgstr "Kable nie mogą być zakończone {type_display} interfejsy" -#: dcim/models/cables.py:350 +#: netbox/dcim/models/cables.py:350 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." -#: dcim/models/cables.py:448 extras/models/configs.py:50 +#: netbox/dcim/models/cables.py:448 netbox/extras/models/configs.py:50 msgid "is active" msgstr "jest aktywny" -#: dcim/models/cables.py:452 +#: netbox/dcim/models/cables.py:452 msgid "is complete" msgstr "jest kompletny" -#: dcim/models/cables.py:456 +#: netbox/dcim/models/cables.py:456 msgid "is split" msgstr "jest podzielony" -#: dcim/models/cables.py:464 +#: netbox/dcim/models/cables.py:464 msgid "cable path" msgstr "ścieżka kabla" -#: dcim/models/cables.py:465 +#: netbox/dcim/models/cables.py:465 msgid "cable paths" msgstr "ścieżki kablowe" -#: dcim/models/device_component_templates.py:46 +#: netbox/dcim/models/device_component_templates.py:46 #, python-brace-format msgid "" "{module} is accepted as a substitution for the module bay position when " @@ -4765,17 +5234,17 @@ msgstr "" "{module} jest akceptowany jako substytucja położenia wnęki modułu po " "dołączeniu do typu modułu." -#: dcim/models/device_component_templates.py:58 -#: dcim/models/device_components.py:65 +#: netbox/dcim/models/device_component_templates.py:58 +#: netbox/dcim/models/device_components.py:65 msgid "Physical label" msgstr "Etykieta fizyczna" -#: dcim/models/device_component_templates.py:103 +#: netbox/dcim/models/device_component_templates.py:103 msgid "Component templates cannot be moved to a different device type." msgstr "" "Szablony komponentów nie mogą być przenoszone do innego typu urządzenia." -#: dcim/models/device_component_templates.py:154 +#: netbox/dcim/models/device_component_templates.py:154 msgid "" "A component template cannot be associated with both a device type and a " "module type." @@ -4783,146 +5252,146 @@ msgstr "" "Szablonu komponentu nie można skojarzyć zarówno z typem urządzenia, jak i " "typem modułu." -#: dcim/models/device_component_templates.py:158 +#: netbox/dcim/models/device_component_templates.py:158 msgid "" "A component template must be associated with either a device type or a " "module type." msgstr "" "Szablon komponentu musi być skojarzony z typem urządzenia lub typem modułu." -#: dcim/models/device_component_templates.py:212 +#: netbox/dcim/models/device_component_templates.py:212 msgid "console port template" msgstr "szablon portu konsoli" -#: dcim/models/device_component_templates.py:213 +#: netbox/dcim/models/device_component_templates.py:213 msgid "console port templates" msgstr "szablony portów konsoli" -#: dcim/models/device_component_templates.py:246 +#: netbox/dcim/models/device_component_templates.py:246 msgid "console server port template" msgstr "szablon portu serwera konsoli" -#: dcim/models/device_component_templates.py:247 +#: netbox/dcim/models/device_component_templates.py:247 msgid "console server port templates" msgstr "szablony portów serwera konsoli" -#: dcim/models/device_component_templates.py:278 -#: dcim/models/device_components.py:352 +#: netbox/dcim/models/device_component_templates.py:278 +#: netbox/dcim/models/device_components.py:352 msgid "maximum draw" msgstr "maksymalne losowanie" -#: dcim/models/device_component_templates.py:285 -#: dcim/models/device_components.py:359 +#: netbox/dcim/models/device_component_templates.py:285 +#: netbox/dcim/models/device_components.py:359 msgid "allocated draw" msgstr "przydzielone losowanie" -#: dcim/models/device_component_templates.py:295 +#: netbox/dcim/models/device_component_templates.py:295 msgid "power port template" msgstr "szablon portu zasilania" -#: dcim/models/device_component_templates.py:296 +#: netbox/dcim/models/device_component_templates.py:296 msgid "power port templates" msgstr "szablony portów zasilania" -#: dcim/models/device_component_templates.py:315 -#: dcim/models/device_components.py:382 +#: netbox/dcim/models/device_component_templates.py:315 +#: netbox/dcim/models/device_components.py:382 #, 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)." -#: dcim/models/device_component_templates.py:347 -#: dcim/models/device_components.py:477 +#: netbox/dcim/models/device_component_templates.py:347 +#: netbox/dcim/models/device_components.py:477 msgid "feed leg" msgstr "noga karmiąca" -#: dcim/models/device_component_templates.py:351 -#: dcim/models/device_components.py:481 +#: netbox/dcim/models/device_component_templates.py:351 +#: netbox/dcim/models/device_components.py:481 msgid "Phase (for three-phase feeds)" msgstr "Faza (dla zasilania trójfazowego)" -#: dcim/models/device_component_templates.py:357 +#: netbox/dcim/models/device_component_templates.py:357 msgid "power outlet template" msgstr "szablon gniazdka elektrycznego" -#: dcim/models/device_component_templates.py:358 +#: netbox/dcim/models/device_component_templates.py:358 msgid "power outlet templates" msgstr "szablony gniazdek elektrycznych" -#: dcim/models/device_component_templates.py:367 +#: netbox/dcim/models/device_component_templates.py:367 #, 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" -#: dcim/models/device_component_templates.py:371 +#: netbox/dcim/models/device_component_templates.py:371 #, 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" -#: dcim/models/device_component_templates.py:423 -#: dcim/models/device_components.py:611 +#: netbox/dcim/models/device_component_templates.py:423 +#: netbox/dcim/models/device_components.py:611 msgid "management only" msgstr "Tylko zarządzanie" -#: dcim/models/device_component_templates.py:431 -#: dcim/models/device_components.py:550 +#: netbox/dcim/models/device_component_templates.py:431 +#: netbox/dcim/models/device_components.py:550 msgid "bridge interface" msgstr "interfejs mostka" -#: dcim/models/device_component_templates.py:449 -#: dcim/models/device_components.py:636 +#: netbox/dcim/models/device_component_templates.py:449 +#: netbox/dcim/models/device_components.py:636 msgid "wireless role" msgstr "rola bezprzewodowa" -#: dcim/models/device_component_templates.py:455 +#: netbox/dcim/models/device_component_templates.py:455 msgid "interface template" msgstr "szablon interfejsu" -#: dcim/models/device_component_templates.py:456 +#: netbox/dcim/models/device_component_templates.py:456 msgid "interface templates" msgstr "szablony interfejsu" -#: dcim/models/device_component_templates.py:463 -#: dcim/models/device_components.py:804 -#: virtualization/models/virtualmachines.py:405 +#: netbox/dcim/models/device_component_templates.py:463 +#: netbox/dcim/models/device_components.py:804 +#: netbox/virtualization/models/virtualmachines.py:405 msgid "An interface cannot be bridged to itself." msgstr "Interfejs nie może być połączony z samym sobą." -#: dcim/models/device_component_templates.py:466 +#: netbox/dcim/models/device_component_templates.py:466 #, 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" -#: dcim/models/device_component_templates.py:470 +#: netbox/dcim/models/device_component_templates.py:470 #, 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" -#: dcim/models/device_component_templates.py:526 -#: dcim/models/device_components.py:984 +#: netbox/dcim/models/device_component_templates.py:526 +#: netbox/dcim/models/device_components.py:984 msgid "rear port position" msgstr "pozycja tylnego portu" -#: dcim/models/device_component_templates.py:551 +#: netbox/dcim/models/device_component_templates.py:551 msgid "front port template" msgstr "szablon portu przedniego" -#: dcim/models/device_component_templates.py:552 +#: netbox/dcim/models/device_component_templates.py:552 msgid "front port templates" msgstr "szablony portów przednich" -#: dcim/models/device_component_templates.py:562 +#: netbox/dcim/models/device_component_templates.py:562 #, 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" -#: dcim/models/device_component_templates.py:568 +#: netbox/dcim/models/device_component_templates.py:568 #, python-brace-format msgid "" "Invalid rear port position ({position}); rear port {name} has only {count} " @@ -4931,48 +5400,48 @@ msgstr "" "Nieprawidłowa pozycja tylnego portu ({position}); tylny port {name} ma tylko" " {count} położenia" -#: dcim/models/device_component_templates.py:621 -#: dcim/models/device_components.py:1053 +#: netbox/dcim/models/device_component_templates.py:621 +#: netbox/dcim/models/device_components.py:1053 msgid "positions" msgstr "położenia" -#: dcim/models/device_component_templates.py:632 +#: netbox/dcim/models/device_component_templates.py:632 msgid "rear port template" msgstr "szablon tylnego portu" -#: dcim/models/device_component_templates.py:633 +#: netbox/dcim/models/device_component_templates.py:633 msgid "rear port templates" msgstr "szablony tylnych portów" -#: dcim/models/device_component_templates.py:662 -#: dcim/models/device_components.py:1103 +#: netbox/dcim/models/device_component_templates.py:662 +#: netbox/dcim/models/device_components.py:1103 msgid "position" msgstr "położenie" -#: dcim/models/device_component_templates.py:665 -#: dcim/models/device_components.py:1106 +#: netbox/dcim/models/device_component_templates.py:665 +#: netbox/dcim/models/device_components.py:1106 msgid "Identifier to reference when renaming installed components" msgstr "" "Identyfikator, do którego należy odwołać się podczas zmiany nazwy " "zainstalowanych komponentów" -#: dcim/models/device_component_templates.py:671 +#: netbox/dcim/models/device_component_templates.py:671 msgid "module bay template" msgstr "szablon modułu wnęki" -#: dcim/models/device_component_templates.py:672 +#: netbox/dcim/models/device_component_templates.py:672 msgid "module bay templates" msgstr "szablony modułów" -#: dcim/models/device_component_templates.py:699 +#: netbox/dcim/models/device_component_templates.py:699 msgid "device bay template" msgstr "szablon kieszeni urządzenia" -#: dcim/models/device_component_templates.py:700 +#: netbox/dcim/models/device_component_templates.py:700 msgid "device bay templates" msgstr "szablony kieszeni urządzeń" -#: dcim/models/device_component_templates.py:713 +#: netbox/dcim/models/device_component_templates.py:713 #, python-brace-format msgid "" "Subdevice role of device type ({device_type}) must be set to \"parent\" to " @@ -4981,202 +5450,207 @@ msgstr "" "Rola podurządzenia typu urządzenia ({device_type}) musi być ustawiony na " "„rodzic”, aby zezwolić na gniazda urządzeń." -#: dcim/models/device_component_templates.py:768 -#: dcim/models/device_components.py:1262 +#: netbox/dcim/models/device_component_templates.py:768 +#: netbox/dcim/models/device_components.py:1262 msgid "part ID" msgstr "ID części" -#: dcim/models/device_component_templates.py:770 -#: dcim/models/device_components.py:1264 +#: netbox/dcim/models/device_component_templates.py:770 +#: netbox/dcim/models/device_components.py:1264 msgid "Manufacturer-assigned part identifier" msgstr "Identyfikator części przypisany przez producenta" -#: dcim/models/device_component_templates.py:787 +#: netbox/dcim/models/device_component_templates.py:787 msgid "inventory item template" msgstr "szablon pozycji inwentaryzacji" -#: dcim/models/device_component_templates.py:788 +#: netbox/dcim/models/device_component_templates.py:788 msgid "inventory item templates" msgstr "szablony pozycji inwentaryzacji" -#: dcim/models/device_components.py:105 +#: netbox/dcim/models/device_components.py:105 msgid "Components cannot be moved to a different device." msgstr "Komponentów nie można przenieść na inne urządzenie." -#: dcim/models/device_components.py:144 +#: netbox/dcim/models/device_components.py:144 msgid "cable end" msgstr "koniec kabla" -#: dcim/models/device_components.py:150 +#: netbox/dcim/models/device_components.py:150 msgid "mark connected" msgstr "znak połączony" -#: dcim/models/device_components.py:152 +#: netbox/dcim/models/device_components.py:152 msgid "Treat as if a cable is connected" msgstr "Traktuj tak, jakby kabel był podłączony" -#: dcim/models/device_components.py:170 +#: netbox/dcim/models/device_components.py:170 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." -#: dcim/models/device_components.py:174 +#: netbox/dcim/models/device_components.py:174 msgid "Cable end must not be set without a cable." msgstr "Końcówka kabla nie może być ustawiona bez kabla." -#: dcim/models/device_components.py:178 +#: netbox/dcim/models/device_components.py:178 msgid "Cannot mark as connected with a cable attached." msgstr "Nie można oznaczyć jako podłączonego za pomocą podłączonego kabla." -#: dcim/models/device_components.py:202 +#: netbox/dcim/models/device_components.py:202 #, python-brace-format msgid "{class_name} models must declare a parent_object property" msgstr "{class_name} modele muszą zadeklarować właściwość parent_object" -#: dcim/models/device_components.py:287 dcim/models/device_components.py:316 -#: dcim/models/device_components.py:349 dcim/models/device_components.py:467 +#: 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 msgid "Physical port type" msgstr "Typ portu fizycznego" -#: dcim/models/device_components.py:290 dcim/models/device_components.py:319 +#: netbox/dcim/models/device_components.py:290 +#: netbox/dcim/models/device_components.py:319 msgid "speed" msgstr "prędkość" -#: dcim/models/device_components.py:294 dcim/models/device_components.py:323 +#: netbox/dcim/models/device_components.py:294 +#: netbox/dcim/models/device_components.py:323 msgid "Port speed in bits per second" msgstr "Prędkość portu w bitach na sekundę" -#: dcim/models/device_components.py:300 +#: netbox/dcim/models/device_components.py:300 msgid "console port" msgstr "port konsoli" -#: dcim/models/device_components.py:301 +#: netbox/dcim/models/device_components.py:301 msgid "console ports" msgstr "porty konsoli" -#: dcim/models/device_components.py:329 +#: netbox/dcim/models/device_components.py:329 msgid "console server port" msgstr "port serwera konsoli" -#: dcim/models/device_components.py:330 +#: netbox/dcim/models/device_components.py:330 msgid "console server ports" msgstr "porty serwera konsoli" -#: dcim/models/device_components.py:369 +#: netbox/dcim/models/device_components.py:369 msgid "power port" msgstr "port zasilania" -#: dcim/models/device_components.py:370 +#: netbox/dcim/models/device_components.py:370 msgid "power ports" msgstr "porty zasilania" -#: dcim/models/device_components.py:487 +#: netbox/dcim/models/device_components.py:487 msgid "power outlet" msgstr "gniazdo zasilania" -#: dcim/models/device_components.py:488 +#: netbox/dcim/models/device_components.py:488 msgid "power outlets" msgstr "gniazdka elektryczne" -#: dcim/models/device_components.py:499 +#: netbox/dcim/models/device_components.py:499 #, 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" -#: dcim/models/device_components.py:530 vpn/models/crypto.py:81 -#: vpn/models/crypto.py:226 +#: netbox/dcim/models/device_components.py:530 netbox/vpn/models/crypto.py:81 +#: netbox/vpn/models/crypto.py:226 msgid "mode" msgstr "tryb" -#: dcim/models/device_components.py:534 +#: netbox/dcim/models/device_components.py:534 msgid "IEEE 802.1Q tagging strategy" msgstr "Strategia tagowania IEEE 802.1Q" -#: dcim/models/device_components.py:542 +#: netbox/dcim/models/device_components.py:542 msgid "parent interface" msgstr "interfejs macierzysty" -#: dcim/models/device_components.py:602 +#: netbox/dcim/models/device_components.py:602 msgid "parent LAG" msgstr "macierzysta LGD" -#: dcim/models/device_components.py:612 +#: 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" -#: dcim/models/device_components.py:617 +#: netbox/dcim/models/device_components.py:617 msgid "speed (Kbps)" msgstr "Prędkość (Kbps)" -#: dcim/models/device_components.py:620 +#: netbox/dcim/models/device_components.py:620 msgid "duplex" msgstr "dupleks" -#: dcim/models/device_components.py:630 +#: netbox/dcim/models/device_components.py:630 msgid "64-bit World Wide Name" msgstr "64-bitowa nazwa światowa" -#: dcim/models/device_components.py:642 +#: netbox/dcim/models/device_components.py:642 msgid "wireless channel" msgstr "kanał bezprzewodowy" -#: dcim/models/device_components.py:649 +#: netbox/dcim/models/device_components.py:649 msgid "channel frequency (MHz)" msgstr "częstotliwość kanału (MHz)" -#: dcim/models/device_components.py:650 dcim/models/device_components.py:658 +#: 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)" -#: dcim/models/device_components.py:664 +#: netbox/dcim/models/device_components.py:664 msgid "transmit power (dBm)" msgstr "moc nadawania (dBm)" -#: dcim/models/device_components.py:689 wireless/models.py:117 +#: netbox/dcim/models/device_components.py:689 netbox/wireless/models.py:117 msgid "wireless LANs" msgstr "bezprzewodowe sieci LAN" -#: dcim/models/device_components.py:697 -#: virtualization/models/virtualmachines.py:335 +#: netbox/dcim/models/device_components.py:697 +#: netbox/virtualization/models/virtualmachines.py:335 msgid "untagged VLAN" msgstr "nieoznaczone sieci VLAN" -#: dcim/models/device_components.py:703 -#: virtualization/models/virtualmachines.py:341 +#: netbox/dcim/models/device_components.py:703 +#: netbox/virtualization/models/virtualmachines.py:341 msgid "tagged VLANs" msgstr "oznaczone sieci VLAN" -#: dcim/models/device_components.py:745 -#: virtualization/models/virtualmachines.py:377 +#: netbox/dcim/models/device_components.py:745 +#: netbox/virtualization/models/virtualmachines.py:377 msgid "interface" msgstr "interfejs" -#: dcim/models/device_components.py:746 -#: virtualization/models/virtualmachines.py:378 +#: netbox/dcim/models/device_components.py:746 +#: netbox/virtualization/models/virtualmachines.py:378 msgid "interfaces" msgstr "interfejsy" -#: dcim/models/device_components.py:757 +#: netbox/dcim/models/device_components.py:757 #, python-brace-format msgid "{display_type} interfaces cannot have a cable attached." msgstr "{display_type} Interfejsy nie mogą mieć podłączonego kabla." -#: dcim/models/device_components.py:765 +#: netbox/dcim/models/device_components.py:765 #, python-brace-format msgid "{display_type} interfaces cannot be marked as connected." msgstr "{display_type} interfejsów nie można oznaczyć jako połączonych." -#: dcim/models/device_components.py:774 -#: virtualization/models/virtualmachines.py:390 +#: netbox/dcim/models/device_components.py:774 +#: netbox/virtualization/models/virtualmachines.py:390 msgid "An interface cannot be its own parent." msgstr "Interfejs nie może być własnym rodzicem." -#: dcim/models/device_components.py:778 +#: netbox/dcim/models/device_components.py:778 msgid "Only virtual interfaces may be assigned to a parent interface." msgstr "Do interfejsu nadrzędnego można przypisać tylko interfejsy wirtualne." -#: dcim/models/device_components.py:785 +#: netbox/dcim/models/device_components.py:785 #, python-brace-format msgid "" "The selected parent interface ({interface}) belongs to a different device " @@ -5185,7 +5659,7 @@ msgstr "" "Wybrany interfejs nadrzędny ({interface}) należy do innego urządzenia " "({device})" -#: dcim/models/device_components.py:791 +#: netbox/dcim/models/device_components.py:791 #, python-brace-format msgid "" "The selected parent interface ({interface}) belongs to {device}, which is " @@ -5194,7 +5668,7 @@ msgstr "" "Wybrany interfejs nadrzędny ({interface}) należy do {device}, która nie jest" " częścią wirtualnej obudowy {virtual_chassis}." -#: dcim/models/device_components.py:811 +#: netbox/dcim/models/device_components.py:811 #, python-brace-format msgid "" "The selected bridge interface ({bridge}) belongs to a different device " @@ -5202,7 +5676,7 @@ msgid "" msgstr "" "Wybrany interfejs mostu ({bridge}) należy do innego urządzenia ({device})." -#: dcim/models/device_components.py:817 +#: netbox/dcim/models/device_components.py:817 #, python-brace-format msgid "" "The selected bridge interface ({interface}) belongs to {device}, which is " @@ -5211,21 +5685,21 @@ msgstr "" "Wybrany interfejs mostu ({interface}) należy do {device}, która nie jest " "częścią wirtualnej obudowy {virtual_chassis}." -#: dcim/models/device_components.py:828 +#: netbox/dcim/models/device_components.py:828 msgid "Virtual interfaces cannot have a parent LAG interface." msgstr "Interfejsy wirtualne nie mogą mieć nadrzędnego interfejsu LAG." -#: dcim/models/device_components.py:832 +#: netbox/dcim/models/device_components.py:832 msgid "A LAG interface cannot be its own parent." msgstr "Interfejs LAG nie może być własnym rodzicem." -#: dcim/models/device_components.py:839 +#: netbox/dcim/models/device_components.py:839 #, 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})." -#: dcim/models/device_components.py:845 +#: netbox/dcim/models/device_components.py:845 #, python-brace-format msgid "" "The selected LAG interface ({lag}) belongs to {device}, which is not part of" @@ -5234,49 +5708,49 @@ msgstr "" "Wybrany interfejs LAG ({lag}) należy do {device}, która nie jest częścią " "wirtualnej obudowy {virtual_chassis}." -#: dcim/models/device_components.py:856 +#: netbox/dcim/models/device_components.py:856 msgid "Virtual interfaces cannot have a PoE mode." msgstr "Interfejsy wirtualne nie mogą mieć trybu PoE." -#: dcim/models/device_components.py:860 +#: netbox/dcim/models/device_components.py:860 msgid "Virtual interfaces cannot have a PoE type." msgstr "Interfejsy wirtualne nie mogą mieć typu PoE." -#: dcim/models/device_components.py:866 +#: netbox/dcim/models/device_components.py:866 msgid "Must specify PoE mode when designating a PoE type." msgstr "Musi określić tryb PoE podczas wyznaczania typu PoE." -#: dcim/models/device_components.py:873 +#: netbox/dcim/models/device_components.py:873 msgid "Wireless role may be set only on wireless interfaces." msgstr "" "Rola sieci bezprzewodowej może być ustawiona tylko na interfejsach " "bezprzewodowych." -#: dcim/models/device_components.py:875 +#: netbox/dcim/models/device_components.py:875 msgid "Channel may be set only on wireless interfaces." msgstr "Kanał można ustawić tylko na interfejsach bezprzewodowych." -#: dcim/models/device_components.py:881 +#: netbox/dcim/models/device_components.py:881 msgid "Channel frequency may be set only on wireless interfaces." msgstr "" "Częstotliwość kanału może być ustawiona tylko na interfejsach " "bezprzewodowych." -#: dcim/models/device_components.py:885 +#: netbox/dcim/models/device_components.py:885 msgid "Cannot specify custom frequency with channel selected." msgstr "Nie można określić niestandardowej częstotliwości z wybranym kanałem." -#: dcim/models/device_components.py:891 +#: netbox/dcim/models/device_components.py:891 msgid "Channel width may be set only on wireless interfaces." msgstr "" "Szerokość kanału może być ustawiona tylko na interfejsach bezprzewodowych." -#: dcim/models/device_components.py:893 +#: netbox/dcim/models/device_components.py:893 msgid "Cannot specify custom width with channel selected." msgstr "" "Nie można określić niestandardowej szerokości przy zaznaczonym kanale." -#: dcim/models/device_components.py:901 +#: netbox/dcim/models/device_components.py:901 #, python-brace-format msgid "" "The untagged VLAN ({untagged_vlan}) must belong to the same site as the " @@ -5285,24 +5759,24 @@ msgstr "" "Nieoznaczona sieć VLAN ({untagged_vlan}) musi należeć do tej samej witryny " "co urządzenie nadrzędne interfejsu lub musi być globalne." -#: dcim/models/device_components.py:990 +#: netbox/dcim/models/device_components.py:990 msgid "Mapped position on corresponding rear port" msgstr "Zmapowana pozycja na odpowiednim tylnym porcie" -#: dcim/models/device_components.py:1006 +#: netbox/dcim/models/device_components.py:1006 msgid "front port" msgstr "port przedni" -#: dcim/models/device_components.py:1007 +#: netbox/dcim/models/device_components.py:1007 msgid "front ports" msgstr "porty przednie" -#: dcim/models/device_components.py:1021 +#: netbox/dcim/models/device_components.py:1021 #, 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" -#: dcim/models/device_components.py:1029 +#: netbox/dcim/models/device_components.py:1029 #, python-brace-format msgid "" "Invalid rear port position ({rear_port_position}): Rear port {name} has only" @@ -5311,19 +5785,19 @@ msgstr "" "Nieprawidłowa pozycja tylnego portu ({rear_port_position}): Tylny port " "{name} ma tylko {positions} pozycje." -#: dcim/models/device_components.py:1059 +#: netbox/dcim/models/device_components.py:1059 msgid "Number of front ports which may be mapped" msgstr "Liczba portów przednich, które mogą być mapowane" -#: dcim/models/device_components.py:1064 +#: netbox/dcim/models/device_components.py:1064 msgid "rear port" msgstr "tylny port" -#: dcim/models/device_components.py:1065 +#: netbox/dcim/models/device_components.py:1065 msgid "rear ports" msgstr "tylne porty" -#: dcim/models/device_components.py:1079 +#: netbox/dcim/models/device_components.py:1079 #, python-brace-format msgid "" "The number of positions cannot be less than the number of mapped front ports" @@ -5332,36 +5806,37 @@ msgstr "" "Liczba pozycji nie może być mniejsza niż liczba zmapowanych portów przednich" " ({frontport_count})" -#: dcim/models/device_components.py:1120 +#: netbox/dcim/models/device_components.py:1120 msgid "module bay" msgstr "wnęka modułu" -#: dcim/models/device_components.py:1121 +#: netbox/dcim/models/device_components.py:1121 msgid "module bays" msgstr "kieszenie modułowe" -#: dcim/models/device_components.py:1138 dcim/models/devices.py:1224 +#: netbox/dcim/models/device_components.py:1138 +#: netbox/dcim/models/devices.py:1224 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." -#: dcim/models/device_components.py:1164 +#: netbox/dcim/models/device_components.py:1164 msgid "device bay" msgstr "wnęka urządzenia" -#: dcim/models/device_components.py:1165 +#: netbox/dcim/models/device_components.py:1165 msgid "device bays" msgstr "kieszenie na urządzenia" -#: dcim/models/device_components.py:1175 +#: netbox/dcim/models/device_components.py:1175 #, 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." -#: dcim/models/device_components.py:1181 +#: netbox/dcim/models/device_components.py:1181 msgid "Cannot install a device into itself." msgstr "Nie można zainstalować urządzenia w sobie." -#: dcim/models/device_components.py:1189 +#: netbox/dcim/models/device_components.py:1189 #, python-brace-format msgid "" "Cannot install the specified device; device is already installed in {bay}." @@ -5369,114 +5844,116 @@ msgstr "" "Nie można zainstalować określonego urządzenia; urządzenie jest już " "zainstalowane w {bay}." -#: dcim/models/device_components.py:1210 +#: netbox/dcim/models/device_components.py:1210 msgid "inventory item role" msgstr "rola pozycji zapasów" -#: dcim/models/device_components.py:1211 +#: netbox/dcim/models/device_components.py:1211 msgid "inventory item roles" msgstr "role pozycji zapasów" -#: dcim/models/device_components.py:1268 dcim/models/devices.py:607 -#: dcim/models/devices.py:1181 dcim/models/racks.py:313 -#: virtualization/models/virtualmachines.py:131 +#: 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 msgid "serial number" msgstr "numer seryjny" -#: dcim/models/device_components.py:1276 dcim/models/devices.py:615 -#: dcim/models/devices.py:1188 dcim/models/racks.py:320 +#: 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 msgid "asset tag" msgstr "znacznik zasobu" -#: dcim/models/device_components.py:1277 +#: netbox/dcim/models/device_components.py:1277 msgid "A unique tag used to identify this item" msgstr "Unikalny znacznik używany do identyfikacji tego elementu" -#: dcim/models/device_components.py:1280 +#: netbox/dcim/models/device_components.py:1280 msgid "discovered" msgstr "odkryty" -#: dcim/models/device_components.py:1282 +#: netbox/dcim/models/device_components.py:1282 msgid "This item was automatically discovered" msgstr "Ten przedmiot został automatycznie wykryty" -#: dcim/models/device_components.py:1300 +#: netbox/dcim/models/device_components.py:1300 msgid "inventory item" msgstr "pozycja inwentaryzacyjna" -#: dcim/models/device_components.py:1301 +#: netbox/dcim/models/device_components.py:1301 msgid "inventory items" msgstr "pozycje inwentaryzacyjne" -#: dcim/models/device_components.py:1312 +#: netbox/dcim/models/device_components.py:1312 msgid "Cannot assign self as parent." msgstr "Nie można przypisać siebie jako rodzica." -#: dcim/models/device_components.py:1320 +#: netbox/dcim/models/device_components.py:1320 msgid "Parent inventory item does not belong to the same device." msgstr "Nadrzędny element ekwipunku nie należy do tego samego urządzenia." -#: dcim/models/device_components.py:1326 +#: netbox/dcim/models/device_components.py:1326 msgid "Cannot move an inventory item with dependent children" msgstr "" "Nie można przenieść pozycji inwentarza z pozostałymi dziećmi na utrzymaniu" -#: dcim/models/device_components.py:1334 +#: netbox/dcim/models/device_components.py:1334 msgid "Cannot assign inventory item to component on another device" msgstr "" "Nie można przypisać elementu zapasów do komponentu na innym urządzeniu" -#: dcim/models/devices.py:54 +#: netbox/dcim/models/devices.py:54 msgid "manufacturer" msgstr "producenta" -#: dcim/models/devices.py:55 +#: netbox/dcim/models/devices.py:55 msgid "manufacturers" msgstr "producentów" -#: dcim/models/devices.py:82 dcim/models/devices.py:382 -#: dcim/models/racks.py:133 +#: netbox/dcim/models/devices.py:82 netbox/dcim/models/devices.py:382 +#: netbox/dcim/models/racks.py:133 msgid "model" msgstr "model" -#: dcim/models/devices.py:95 +#: netbox/dcim/models/devices.py:95 msgid "default platform" msgstr "domyślna platforma" -#: dcim/models/devices.py:98 dcim/models/devices.py:386 +#: netbox/dcim/models/devices.py:98 netbox/dcim/models/devices.py:386 msgid "part number" msgstr "numer części" -#: dcim/models/devices.py:101 dcim/models/devices.py:389 +#: netbox/dcim/models/devices.py:101 netbox/dcim/models/devices.py:389 msgid "Discrete part number (optional)" msgstr "Dyskretny numer części (opcjonalnie)" -#: dcim/models/devices.py:107 dcim/models/racks.py:54 +#: netbox/dcim/models/devices.py:107 netbox/dcim/models/racks.py:54 msgid "height (U)" msgstr "wysokość (U)" -#: dcim/models/devices.py:111 +#: netbox/dcim/models/devices.py:111 msgid "exclude from utilization" msgstr "wykluczyć z wykorzystania" -#: dcim/models/devices.py:112 +#: netbox/dcim/models/devices.py:112 msgid "Devices of this type are excluded when calculating rack utilization." msgstr "" "Urządzenia tego typu są wykluczone przy obliczaniu wykorzystania szafy." -#: dcim/models/devices.py:116 +#: netbox/dcim/models/devices.py:116 msgid "is full depth" msgstr "jest pełna głębokość" -#: dcim/models/devices.py:117 +#: netbox/dcim/models/devices.py:117 msgid "Device consumes both front and rear rack faces." msgstr "Urządzenie zajmuje zarówno przednią, jak i tylną powierzchnię szafy." -#: dcim/models/devices.py:123 +#: netbox/dcim/models/devices.py:123 msgid "parent/child status" msgstr "status rodzica/dziecka" -#: dcim/models/devices.py:124 +#: netbox/dcim/models/devices.py:124 msgid "" "Parent devices house child devices in device bays. Leave blank if this " "device type is neither a parent nor a child." @@ -5485,24 +5962,24 @@ msgstr "" " Pozostaw puste, jeśli ten typ urządzenia nie jest ani rodzicem, ani " "dzieckiem." -#: dcim/models/devices.py:128 dcim/models/devices.py:392 -#: dcim/models/devices.py:659 dcim/models/racks.py:324 +#: netbox/dcim/models/devices.py:128 netbox/dcim/models/devices.py:392 +#: netbox/dcim/models/devices.py:659 netbox/dcim/models/racks.py:324 msgid "airflow" msgstr "przepływ powietrza" -#: dcim/models/devices.py:204 +#: netbox/dcim/models/devices.py:204 msgid "device type" msgstr "typ urządzenia" -#: dcim/models/devices.py:205 +#: netbox/dcim/models/devices.py:205 msgid "device types" msgstr "typy urządzeń" -#: dcim/models/devices.py:290 +#: netbox/dcim/models/devices.py:290 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." -#: dcim/models/devices.py:307 +#: netbox/dcim/models/devices.py:307 #, python-brace-format msgid "" "Device {device} in rack {rack} does not have sufficient space to accommodate" @@ -5511,7 +5988,7 @@ msgstr "" "Urządzenie {device} w szafie {rack} nie ma wystarczającej ilości miejsca, " "aby pomieścić wysokość {height}U" -#: dcim/models/devices.py:322 +#: netbox/dcim/models/devices.py:322 #, python-brace-format msgid "" "Unable to set 0U height: Found {racked_instance_count} " @@ -5521,7 +5998,7 @@ msgstr "" "href=\"{url}\">{racked_instance_count} instancji już zamontowanych " "w szafach." -#: dcim/models/devices.py:331 +#: netbox/dcim/models/devices.py:331 msgid "" "Must delete all device bay templates associated with this device before " "declassifying it as a parent device." @@ -5529,157 +6006,157 @@ msgstr "" "Przed odtajnieniem go jako urządzenia nadrzędnego należy usunąć wszystkie " "szablony kieszeni urządzeń powiązane z tym urządzeniem." -#: dcim/models/devices.py:337 +#: netbox/dcim/models/devices.py:337 msgid "Child device types must be 0U." msgstr "Typy urządzeń podrzędnych muszą mieć wartość 0U." -#: dcim/models/devices.py:411 +#: netbox/dcim/models/devices.py:411 msgid "module type" msgstr "typ modułu" -#: dcim/models/devices.py:412 +#: netbox/dcim/models/devices.py:412 msgid "module types" msgstr "typy modułów" -#: dcim/models/devices.py:485 +#: netbox/dcim/models/devices.py:485 msgid "Virtual machines may be assigned to this role" msgstr "Maszyny wirtualne mogą być przypisane do tej roli" -#: dcim/models/devices.py:497 +#: netbox/dcim/models/devices.py:497 msgid "device role" msgstr "rola urządzenia" -#: dcim/models/devices.py:498 +#: netbox/dcim/models/devices.py:498 msgid "device roles" msgstr "role urządzenia" -#: dcim/models/devices.py:515 +#: netbox/dcim/models/devices.py:515 msgid "Optionally limit this platform to devices of a certain manufacturer" msgstr "Opcjonalnie ogranicz tę platformę do urządzeń określonego producenta" -#: dcim/models/devices.py:527 +#: netbox/dcim/models/devices.py:527 msgid "platform" msgstr "platforma" -#: dcim/models/devices.py:528 +#: netbox/dcim/models/devices.py:528 msgid "platforms" msgstr "platformy" -#: dcim/models/devices.py:576 +#: netbox/dcim/models/devices.py:576 msgid "The function this device serves" msgstr "Funkcja, jaką spełnia to urządzenie" -#: dcim/models/devices.py:608 +#: netbox/dcim/models/devices.py:608 msgid "Chassis serial number, assigned by the manufacturer" msgstr "Numer seryjny podwozia, przypisany przez producenta" -#: dcim/models/devices.py:616 dcim/models/devices.py:1189 +#: netbox/dcim/models/devices.py:616 netbox/dcim/models/devices.py:1189 msgid "A unique tag used to identify this device" msgstr "Unikalny znacznik używany do identyfikacji tego urządzenia" -#: dcim/models/devices.py:643 +#: netbox/dcim/models/devices.py:643 msgid "position (U)" msgstr "pozycja (U)" -#: dcim/models/devices.py:650 +#: netbox/dcim/models/devices.py:650 msgid "rack face" msgstr "powierzchnia szafy" -#: dcim/models/devices.py:670 dcim/models/devices.py:1415 -#: virtualization/models/virtualmachines.py:100 +#: netbox/dcim/models/devices.py:670 netbox/dcim/models/devices.py:1420 +#: netbox/virtualization/models/virtualmachines.py:100 msgid "primary IPv4" msgstr "podstawowy IPv4" -#: dcim/models/devices.py:678 dcim/models/devices.py:1423 -#: virtualization/models/virtualmachines.py:108 +#: netbox/dcim/models/devices.py:678 netbox/dcim/models/devices.py:1428 +#: netbox/virtualization/models/virtualmachines.py:108 msgid "primary IPv6" msgstr "podstawowy IPv6" -#: dcim/models/devices.py:686 +#: netbox/dcim/models/devices.py:686 msgid "out-of-band IP" msgstr "Poza pasmem IP" -#: dcim/models/devices.py:703 +#: netbox/dcim/models/devices.py:703 msgid "VC position" msgstr "Pozycja VC" -#: dcim/models/devices.py:706 +#: netbox/dcim/models/devices.py:706 msgid "Virtual chassis position" msgstr "Wirtualna pozycja podwozia" -#: dcim/models/devices.py:709 +#: netbox/dcim/models/devices.py:709 msgid "VC priority" msgstr "Priorytet VC" -#: dcim/models/devices.py:713 +#: netbox/dcim/models/devices.py:713 msgid "Virtual chassis master election priority" msgstr "Priorytet wyboru głównego wirtualnego podwozia" -#: dcim/models/devices.py:716 dcim/models/sites.py:207 +#: netbox/dcim/models/devices.py:716 netbox/dcim/models/sites.py:207 msgid "latitude" msgstr "swoboda" -#: dcim/models/devices.py:721 dcim/models/devices.py:729 -#: dcim/models/sites.py:212 dcim/models/sites.py:220 +#: netbox/dcim/models/devices.py:721 netbox/dcim/models/devices.py:729 +#: netbox/dcim/models/sites.py:212 netbox/dcim/models/sites.py:220 msgid "GPS coordinate in decimal format (xx.yyyyyy)" msgstr "Współrzędne GPS w formacie dziesiętnym (xx.rrrr)" -#: dcim/models/devices.py:724 dcim/models/sites.py:215 +#: netbox/dcim/models/devices.py:724 netbox/dcim/models/sites.py:215 msgid "longitude" msgstr "długość geograficzna" -#: dcim/models/devices.py:797 +#: netbox/dcim/models/devices.py:797 msgid "Device name must be unique per site." msgstr "Nazwa urządzenia musi być niepowtarzalna dla każdej witryny." -#: dcim/models/devices.py:808 ipam/models/services.py:75 +#: netbox/dcim/models/devices.py:808 netbox/ipam/models/services.py:75 msgid "device" msgstr "urządzenie" -#: dcim/models/devices.py:809 +#: netbox/dcim/models/devices.py:809 msgid "devices" msgstr "urządzenia" -#: dcim/models/devices.py:835 +#: netbox/dcim/models/devices.py:835 #, python-brace-format msgid "Rack {rack} does not belong to site {site}." msgstr "Szafa {rack} nie należy do terenu {site}." -#: dcim/models/devices.py:840 +#: netbox/dcim/models/devices.py:840 #, python-brace-format msgid "Location {location} does not belong to site {site}." msgstr "Lokalizacja {location} nie należy do strony {site}." -#: dcim/models/devices.py:846 +#: netbox/dcim/models/devices.py:846 #, python-brace-format msgid "Rack {rack} does not belong to location {location}." msgstr "Szafa {rack} nie należy do lokalizacji {location}." -#: dcim/models/devices.py:853 +#: netbox/dcim/models/devices.py:853 msgid "Cannot select a rack face without assigning a rack." msgstr "Nie można wybrać powierzchni szafy bez przypisania szafy." -#: dcim/models/devices.py:857 +#: netbox/dcim/models/devices.py:857 msgid "Cannot select a rack position without assigning a rack." msgstr "Nie można wybrać pozycji w szafie bez przypisania szafy." -#: dcim/models/devices.py:863 +#: netbox/dcim/models/devices.py:863 msgid "Position must be in increments of 0.5 rack units." msgstr "Pozycja musi być w odstępach co 0,5 jednostek regałowych." -#: dcim/models/devices.py:867 +#: netbox/dcim/models/devices.py:867 msgid "Must specify rack face when defining rack position." msgstr "" "Należy określić powierzchnię szafy podczas definiowania pozycji w szafie." -#: dcim/models/devices.py:875 +#: netbox/dcim/models/devices.py:875 #, 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." -#: dcim/models/devices.py:886 +#: netbox/dcim/models/devices.py:886 msgid "" "Child device types cannot be assigned to a rack face. This is an attribute " "of the parent device." @@ -5687,7 +6164,7 @@ msgstr "" "Typy urządzeń podrzędnych nie mogą być przypisane do powierzchni szafy. Jest" " to atrybut urządzenia nadrzędnego." -#: dcim/models/devices.py:893 +#: netbox/dcim/models/devices.py:893 msgid "" "Child device types cannot be assigned to a rack position. This is an " "attribute of the parent device." @@ -5695,7 +6172,7 @@ msgstr "" "Typy urządzeń podrzędnych nie mogą być przypisane do pozycji szafy. Jest to " "atrybut urządzenia nadrzędnego." -#: dcim/models/devices.py:907 +#: netbox/dcim/models/devices.py:907 #, python-brace-format msgid "" "U{position} is already occupied or does not have sufficient space to " @@ -5704,22 +6181,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)" -#: dcim/models/devices.py:922 +#: netbox/dcim/models/devices.py:922 #, python-brace-format msgid "{ip} is not an IPv4 address." msgstr "{ip} nie jest adresem IPv4." -#: dcim/models/devices.py:931 dcim/models/devices.py:946 +#: netbox/dcim/models/devices.py:931 netbox/dcim/models/devices.py:946 #, 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." -#: dcim/models/devices.py:937 +#: netbox/dcim/models/devices.py:937 #, python-brace-format msgid "{ip} is not an IPv6 address." msgstr "{ip} nie jest adresem IPv6." -#: dcim/models/devices.py:964 +#: netbox/dcim/models/devices.py:964 #, python-brace-format msgid "" "The assigned platform is limited to {platform_manufacturer} device types, " @@ -5728,18 +6205,18 @@ msgstr "" "Przydzielona platforma jest ograniczona do {platform_manufacturer} typy " "urządzeń, ale typ tego urządzenia należy do {devicetype_manufacturer}." -#: dcim/models/devices.py:975 +#: netbox/dcim/models/devices.py:975 #, python-brace-format msgid "The assigned cluster belongs to a different site ({site})" msgstr "Przypisany klaster należy do innej lokalizacji ({site})" -#: dcim/models/devices.py:983 +#: netbox/dcim/models/devices.py:983 msgid "A device assigned to a virtual chassis must have its position defined." msgstr "" "Urządzenie przypisane do wirtualnej obudowy musi mieć zdefiniowane " "położenie." -#: dcim/models/devices.py:988 +#: netbox/dcim/models/devices.py:988 #, python-brace-format msgid "" "Device cannot be removed from virtual chassis {virtual_chassis} because it " @@ -5748,15 +6225,15 @@ msgstr "" "Nie można usunąć urządzenia z wirtualnej obudowy {virtual_chassis} ponieważ " "jest obecnie wyznaczony jako jego mistrz." -#: dcim/models/devices.py:1196 +#: netbox/dcim/models/devices.py:1196 msgid "module" msgstr "moduł" -#: dcim/models/devices.py:1197 +#: netbox/dcim/models/devices.py:1197 msgid "modules" msgstr "modułów" -#: dcim/models/devices.py:1213 +#: netbox/dcim/models/devices.py:1213 #, python-brace-format msgid "" "Module must be installed within a module bay belonging to the assigned " @@ -5765,22 +6242,22 @@ msgstr "" "Moduł musi być zainstalowany w wnęce modułowej należącej do przypisanego " "urządzenia ({device})." -#: dcim/models/devices.py:1334 +#: netbox/dcim/models/devices.py:1339 msgid "domain" msgstr "domena" -#: dcim/models/devices.py:1347 dcim/models/devices.py:1348 +#: netbox/dcim/models/devices.py:1352 netbox/dcim/models/devices.py:1353 msgid "virtual chassis" msgstr "wirtualne podwozie" -#: dcim/models/devices.py:1363 +#: netbox/dcim/models/devices.py:1368 #, 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." -#: dcim/models/devices.py:1379 +#: netbox/dcim/models/devices.py:1384 #, python-brace-format msgid "" "Unable to delete virtual chassis {self}. There are member interfaces which " @@ -5789,61 +6266,61 @@ msgstr "" "Nie można usunąć wirtualnej obudowy {self}. Istnieją interfejsy członów, " "które tworzą interfejsy LAG między podwoziami." -#: dcim/models/devices.py:1404 vpn/models/l2vpn.py:37 +#: netbox/dcim/models/devices.py:1409 netbox/vpn/models/l2vpn.py:37 msgid "identifier" msgstr "identyfikator" -#: dcim/models/devices.py:1405 +#: netbox/dcim/models/devices.py:1410 msgid "Numeric identifier unique to the parent device" msgstr "Identyfikator numeryczny unikalny dla urządzenia nadrzędnego" -#: dcim/models/devices.py:1433 extras/models/customfields.py:225 -#: extras/models/models.py:107 extras/models/models.py:694 -#: netbox/models/__init__.py:115 +#: 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:115 msgid "comments" msgstr "komentarzy" -#: dcim/models/devices.py:1449 +#: netbox/dcim/models/devices.py:1454 msgid "virtual device context" msgstr "kontekst urządzenia wirtualnego" -#: dcim/models/devices.py:1450 +#: netbox/dcim/models/devices.py:1455 msgid "virtual device contexts" msgstr "konteksty urządzeń wirtualnych" -#: dcim/models/devices.py:1482 +#: netbox/dcim/models/devices.py:1487 #, python-brace-format msgid "{ip} is not an IPv{family} address." msgstr "{ip} nie jest IPV{family} adres." -#: dcim/models/devices.py:1488 +#: netbox/dcim/models/devices.py:1493 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." -#: dcim/models/mixins.py:15 extras/models/configs.py:41 -#: extras/models/models.py:313 extras/models/models.py:522 -#: extras/models/search.py:48 ipam/models/ip.py:194 +#: netbox/dcim/models/mixins.py:15 netbox/extras/models/configs.py:41 +#: netbox/extras/models/models.py:313 netbox/extras/models/models.py:522 +#: netbox/extras/models/search.py:48 netbox/ipam/models/ip.py:194 msgid "weight" msgstr "waga" -#: dcim/models/mixins.py:22 +#: netbox/dcim/models/mixins.py:22 msgid "weight unit" msgstr "jednostka wagowa" -#: dcim/models/mixins.py:51 +#: netbox/dcim/models/mixins.py:51 msgid "Must specify a unit when setting a weight" msgstr "Należy określić jednostkę podczas ustawiania wagi" -#: dcim/models/power.py:55 +#: netbox/dcim/models/power.py:55 msgid "power panel" msgstr "panel zasilania" -#: dcim/models/power.py:56 +#: netbox/dcim/models/power.py:56 msgid "power panels" msgstr "panele zasilające" -#: dcim/models/power.py:70 +#: netbox/dcim/models/power.py:70 #, python-brace-format msgid "" "Location {location} ({location_site}) is in a different site than {site}" @@ -5851,43 +6328,43 @@ msgstr "" "Lokalizacja {location} ({location_site}) znajduje się w innej witrynie niż " "{site}" -#: dcim/models/power.py:108 +#: netbox/dcim/models/power.py:108 msgid "supply" msgstr "zapas" -#: dcim/models/power.py:114 +#: netbox/dcim/models/power.py:114 msgid "phase" msgstr "etap" -#: dcim/models/power.py:120 +#: netbox/dcim/models/power.py:120 msgid "voltage" msgstr "napięcie" -#: dcim/models/power.py:125 +#: netbox/dcim/models/power.py:125 msgid "amperage" msgstr "natężenie prądu" -#: dcim/models/power.py:130 +#: netbox/dcim/models/power.py:130 msgid "max utilization" msgstr "maksymalne wykorzystanie" -#: dcim/models/power.py:133 +#: netbox/dcim/models/power.py:133 msgid "Maximum permissible draw (percentage)" msgstr "Maksymalne dopuszczalne losowanie (procent)" -#: dcim/models/power.py:136 +#: netbox/dcim/models/power.py:136 msgid "available power" msgstr "dostępna moc" -#: dcim/models/power.py:164 +#: netbox/dcim/models/power.py:164 msgid "power feed" msgstr "zasilanie" -#: dcim/models/power.py:165 +#: netbox/dcim/models/power.py:165 msgid "power feeds" msgstr "zasilanie" -#: dcim/models/power.py:179 +#: netbox/dcim/models/power.py:179 #, python-brace-format msgid "" "Rack {rack} ({rack_site}) and power panel {powerpanel} ({powerpanel_site}) " @@ -5896,63 +6373,63 @@ msgstr "" "Szafa {rack} ({rack_site}) i panel zasilania {powerpanel} " "({powerpanel_site}) znajdują się na różnych terenach." -#: dcim/models/power.py:190 +#: netbox/dcim/models/power.py:190 msgid "Voltage cannot be negative for AC supply" msgstr "Napięcie nie może być ujemne dla zasilania prądem przemiennym" -#: dcim/models/racks.py:47 +#: netbox/dcim/models/racks.py:47 msgid "width" msgstr "szerokość" -#: dcim/models/racks.py:48 +#: netbox/dcim/models/racks.py:48 msgid "Rail-to-rail width" msgstr "Szerokość szyny do szyny" -#: dcim/models/racks.py:56 +#: netbox/dcim/models/racks.py:56 msgid "Height in rack units" msgstr "Wysokość w jednostkach szafy" -#: dcim/models/racks.py:60 +#: netbox/dcim/models/racks.py:60 msgid "starting unit" msgstr "jednostka startowa" -#: dcim/models/racks.py:62 +#: netbox/dcim/models/racks.py:62 msgid "Starting unit for rack" msgstr "Jednostka początkowa szafy" -#: dcim/models/racks.py:66 +#: netbox/dcim/models/racks.py:66 msgid "descending units" msgstr "jednostki malejące" -#: dcim/models/racks.py:67 +#: netbox/dcim/models/racks.py:67 msgid "Units are numbered top-to-bottom" msgstr "Jednostki są ponumerowane od góry do dołu" -#: dcim/models/racks.py:72 +#: netbox/dcim/models/racks.py:72 msgid "outer width" msgstr "szerokość zewnętrzna" -#: dcim/models/racks.py:75 +#: netbox/dcim/models/racks.py:75 msgid "Outer dimension of rack (width)" msgstr "Wymiar zewnętrzny szafy (szerokość)" -#: dcim/models/racks.py:78 +#: netbox/dcim/models/racks.py:78 msgid "outer depth" msgstr "głębokość zewnętrzna" -#: dcim/models/racks.py:81 +#: netbox/dcim/models/racks.py:81 msgid "Outer dimension of rack (depth)" msgstr "Wymiar zewnętrzny szafy (głębokość)" -#: dcim/models/racks.py:84 +#: netbox/dcim/models/racks.py:84 msgid "outer unit" msgstr "jednostka zewnętrzna" -#: dcim/models/racks.py:90 +#: netbox/dcim/models/racks.py:90 msgid "mounting depth" msgstr "głębokość montażu" -#: dcim/models/racks.py:94 +#: netbox/dcim/models/racks.py:94 msgid "" "Maximum depth of a mounted device, in millimeters. For four-post racks, this" " is the distance between the front and rear rails." @@ -5960,76 +6437,77 @@ msgstr "" "Maksymalna głębokość zamontowanego urządzenia w milimetrach. W przypadku " "stojaków czterosłupkowych jest to odległość między przednią i tylną szyną." -#: dcim/models/racks.py:102 +#: netbox/dcim/models/racks.py:102 msgid "max weight" msgstr "maksymalna waga" -#: dcim/models/racks.py:105 +#: netbox/dcim/models/racks.py:105 msgid "Maximum load capacity for the rack" msgstr "Maksymalna nośność regału" -#: dcim/models/racks.py:125 dcim/models/racks.py:252 +#: netbox/dcim/models/racks.py:125 netbox/dcim/models/racks.py:252 msgid "form factor" msgstr "współczynnik kształtu" -#: dcim/models/racks.py:162 +#: netbox/dcim/models/racks.py:162 msgid "rack type" msgstr "typ szafy" -#: dcim/models/racks.py:163 +#: netbox/dcim/models/racks.py:163 msgid "rack types" msgstr "typy szaf" -#: dcim/models/racks.py:180 dcim/models/racks.py:379 +#: netbox/dcim/models/racks.py:180 netbox/dcim/models/racks.py:379 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" -#: dcim/models/racks.py:184 dcim/models/racks.py:383 +#: netbox/dcim/models/racks.py:184 netbox/dcim/models/racks.py:383 msgid "Must specify a unit when setting a maximum weight" msgstr "Należy określić jednostkę podczas ustawiania maksymalnej wagi" -#: dcim/models/racks.py:230 +#: netbox/dcim/models/racks.py:230 msgid "rack role" msgstr "rola szafy" -#: dcim/models/racks.py:231 +#: netbox/dcim/models/racks.py:231 msgid "rack roles" msgstr "role szafy" -#: dcim/models/racks.py:274 +#: netbox/dcim/models/racks.py:274 msgid "facility ID" msgstr "Identyfikator obiektu" -#: dcim/models/racks.py:275 +#: netbox/dcim/models/racks.py:275 msgid "Locally-assigned identifier" msgstr "Lokalnie przypisany identyfikator" -#: dcim/models/racks.py:308 ipam/forms/bulk_import.py:201 -#: ipam/forms/bulk_import.py:266 ipam/forms/bulk_import.py:301 -#: ipam/forms/bulk_import.py:459 virtualization/forms/bulk_import.py:112 +#: 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 msgid "Functional role" msgstr "Funkcjonalna rola" -#: dcim/models/racks.py:321 +#: netbox/dcim/models/racks.py:321 msgid "A unique tag used to identify this rack" msgstr "Unikalny tag używany do identyfikacji tej szafy" -#: dcim/models/racks.py:359 +#: netbox/dcim/models/racks.py:359 msgid "rack" msgstr "szafa" -#: dcim/models/racks.py:360 +#: netbox/dcim/models/racks.py:360 msgid "racks" msgstr "szafy" -#: dcim/models/racks.py:375 +#: netbox/dcim/models/racks.py:375 #, python-brace-format msgid "Assigned location must belong to parent site ({site})." msgstr "Przypisana lokalizacja musi należeć do witryny nadrzędnej ({site})." -#: dcim/models/racks.py:393 +#: netbox/dcim/models/racks.py:393 #, python-brace-format msgid "" "Rack must be at least {min_height}U tall to house currently installed " @@ -6038,7 +6516,7 @@ msgstr "" "Szafa musi być mieć najmniej {min_height}U wysokości aby pomieścić aktualnie" " zainstalowane urządzeń." -#: dcim/models/racks.py:400 +#: netbox/dcim/models/racks.py:400 #, python-brace-format msgid "" "Rack unit numbering must begin at {position} or less to house currently " @@ -6047,891 +6525,953 @@ msgstr "" "Numeracja jednostek szafy musi rozpoczynać się od {position} lub mniej, aby " "pomieścić aktualnie zainstalowane urządzenia." -#: dcim/models/racks.py:408 +#: netbox/dcim/models/racks.py:408 #, python-brace-format msgid "Location must be from the same site, {site}." msgstr "Lokalizacja musi pochodzić z tego samego miejsca, {site}." -#: dcim/models/racks.py:670 +#: netbox/dcim/models/racks.py:670 msgid "units" msgstr "jednostki" -#: dcim/models/racks.py:696 +#: netbox/dcim/models/racks.py:696 msgid "rack reservation" msgstr "rezerwacja szafy" -#: dcim/models/racks.py:697 +#: netbox/dcim/models/racks.py:697 msgid "rack reservations" msgstr "rezerwacje szafy" -#: dcim/models/racks.py:714 +#: netbox/dcim/models/racks.py:714 #, python-brace-format msgid "Invalid unit(s) for {height}U rack: {unit_list}" msgstr "Nieprawidłowa jednostka (jednostki) dla szafy {height}U: {unit_list}" -#: dcim/models/racks.py:727 +#: netbox/dcim/models/racks.py:727 #, python-brace-format msgid "The following units have already been reserved: {unit_list}" msgstr "Następujące jednostki zostały już zarezerwowane: {unit_list}" -#: dcim/models/sites.py:49 +#: netbox/dcim/models/sites.py:49 msgid "A top-level region with this name already exists." msgstr "Region najwyższego poziomu o tej nazwie już istnieje." -#: dcim/models/sites.py:59 +#: netbox/dcim/models/sites.py:59 msgid "A top-level region with this slug already exists." msgstr "Region najwyższego poziomu z tym identyfikatorem już istnieje." -#: dcim/models/sites.py:62 +#: netbox/dcim/models/sites.py:62 msgid "region" msgstr "regionu" -#: dcim/models/sites.py:63 +#: netbox/dcim/models/sites.py:63 msgid "regions" msgstr "regionów" -#: dcim/models/sites.py:102 +#: netbox/dcim/models/sites.py:102 msgid "A top-level site group with this name already exists." msgstr "Grupa witryn najwyższego poziomu o tej nazwie już istnieje." -#: dcim/models/sites.py:112 +#: netbox/dcim/models/sites.py:112 msgid "A top-level site group with this slug already exists." msgstr "Grupa terenów najwyższego poziomu z tym identyfikatorem już istnieje." -#: dcim/models/sites.py:115 +#: netbox/dcim/models/sites.py:115 msgid "site group" msgstr "grupa witryn" -#: dcim/models/sites.py:116 +#: netbox/dcim/models/sites.py:116 msgid "site groups" msgstr "grupy witryn" -#: dcim/models/sites.py:141 +#: netbox/dcim/models/sites.py:141 msgid "Full name of the site" msgstr "Pełna nazwa strony" -#: dcim/models/sites.py:181 dcim/models/sites.py:279 +#: netbox/dcim/models/sites.py:181 netbox/dcim/models/sites.py:279 msgid "facility" msgstr "obiekt" -#: dcim/models/sites.py:184 dcim/models/sites.py:282 +#: netbox/dcim/models/sites.py:184 netbox/dcim/models/sites.py:282 msgid "Local facility ID or description" msgstr "Identyfikator lub opis lokalnego obiektu" -#: dcim/models/sites.py:195 +#: netbox/dcim/models/sites.py:195 msgid "physical address" msgstr "adres fizyczny" -#: dcim/models/sites.py:198 +#: netbox/dcim/models/sites.py:198 msgid "Physical location of the building" msgstr "Fizyczne położenie budynku" -#: dcim/models/sites.py:201 +#: netbox/dcim/models/sites.py:201 msgid "shipping address" msgstr "adres wysyłki" -#: dcim/models/sites.py:204 +#: netbox/dcim/models/sites.py:204 msgid "If different from the physical address" msgstr "Jeśli różni się od adresu fizycznego" -#: dcim/models/sites.py:238 +#: netbox/dcim/models/sites.py:238 msgid "site" msgstr "miejsce" -#: dcim/models/sites.py:239 +#: netbox/dcim/models/sites.py:239 msgid "sites" msgstr "witryny" -#: dcim/models/sites.py:309 +#: netbox/dcim/models/sites.py:309 msgid "A location with this name already exists within the specified site." msgstr "Lokalizacja o tej nazwie istnieje już w określonej witrynie." -#: dcim/models/sites.py:319 +#: netbox/dcim/models/sites.py:319 msgid "A location with this slug already exists within the specified site." msgstr "Lokalizacja z tym identyfikatorem już istnieje na określonym terenie." -#: dcim/models/sites.py:322 +#: netbox/dcim/models/sites.py:322 msgid "location" msgstr "lokalizacja" -#: dcim/models/sites.py:323 +#: netbox/dcim/models/sites.py:323 msgid "locations" msgstr "lokalizacje" -#: dcim/models/sites.py:337 +#: netbox/dcim/models/sites.py:337 #, python-brace-format msgid "Parent location ({parent}) must belong to the same site ({site})." msgstr "" "Lokalizacja macierzysta ({parent}) musi należeć do tej samej witryny " "({site})." -#: dcim/tables/cables.py:55 +#: netbox/dcim/tables/cables.py:55 msgid "Termination A" msgstr "Wypowiedzenie A" -#: dcim/tables/cables.py:60 +#: netbox/dcim/tables/cables.py:60 msgid "Termination B" msgstr "Wypowiedzenie B" -#: dcim/tables/cables.py:66 wireless/tables/wirelesslink.py:23 +#: netbox/dcim/tables/cables.py:66 netbox/wireless/tables/wirelesslink.py:23 msgid "Device A" msgstr "Urządzenie A" -#: dcim/tables/cables.py:72 wireless/tables/wirelesslink.py:32 +#: netbox/dcim/tables/cables.py:72 netbox/wireless/tables/wirelesslink.py:32 msgid "Device B" msgstr "Urządzenie B" -#: dcim/tables/cables.py:78 +#: netbox/dcim/tables/cables.py:78 msgid "Location A" msgstr "Lokalizacja A" -#: dcim/tables/cables.py:84 +#: netbox/dcim/tables/cables.py:84 msgid "Location B" msgstr "Lokalizacja B" -#: dcim/tables/cables.py:90 +#: netbox/dcim/tables/cables.py:90 msgid "Rack A" msgstr "Szafa A" -#: dcim/tables/cables.py:96 +#: netbox/dcim/tables/cables.py:96 msgid "Rack B" msgstr "Szafa B" -#: dcim/tables/cables.py:102 +#: netbox/dcim/tables/cables.py:102 msgid "Site A" msgstr "Strona A" -#: dcim/tables/cables.py:108 +#: netbox/dcim/tables/cables.py:108 msgid "Site B" msgstr "Strona B" -#: dcim/tables/connections.py:31 dcim/tables/connections.py:50 -#: dcim/tables/connections.py:71 -#: templates/dcim/inc/connection_endpoints.html:16 +#: netbox/dcim/tables/connections.py:31 netbox/dcim/tables/connections.py:50 +#: netbox/dcim/tables/connections.py:71 +#: netbox/templates/dcim/inc/connection_endpoints.html:16 msgid "Reachable" msgstr "Osiągnięty" -#: dcim/tables/devices.py:58 dcim/tables/devices.py:106 -#: dcim/tables/racks.py:150 dcim/tables/sites.py:105 dcim/tables/sites.py:148 -#: extras/tables/tables.py:545 netbox/navigation/menu.py:69 -#: netbox/navigation/menu.py:73 netbox/navigation/menu.py:75 -#: virtualization/forms/model_forms.py:122 -#: virtualization/tables/clusters.py:83 virtualization/views.py:206 +#: 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/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 msgid "Devices" msgstr "Urządzenia" -#: dcim/tables/devices.py:63 dcim/tables/devices.py:111 -#: virtualization/tables/clusters.py:88 +#: netbox/dcim/tables/devices.py:63 netbox/dcim/tables/devices.py:111 +#: netbox/virtualization/tables/clusters.py:88 msgid "VMs" msgstr "maszyny wirtualne" -#: dcim/tables/devices.py:100 dcim/tables/devices.py:216 -#: extras/forms/model_forms.py:630 templates/dcim/device.html:112 -#: templates/dcim/device/render_config.html:11 -#: templates/dcim/device/render_config.html:14 -#: templates/dcim/devicerole.html:44 templates/dcim/platform.html:41 -#: templates/extras/configtemplate.html:10 -#: templates/virtualization/virtualmachine.html:48 -#: templates/virtualization/virtualmachine/render_config.html:11 -#: templates/virtualization/virtualmachine/render_config.html:14 -#: virtualization/tables/virtualmachines.py:107 +#: netbox/dcim/tables/devices.py:100 netbox/dcim/tables/devices.py:216 +#: 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/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 msgid "Config Template" msgstr "Szablon konfiguracji" -#: dcim/tables/devices.py:150 templates/dcim/sitegroup.html:26 +#: netbox/dcim/tables/devices.py:150 netbox/templates/dcim/sitegroup.html:26 msgid "Site Group" msgstr "Grupa witryn" -#: dcim/tables/devices.py:187 dcim/tables/devices.py:1068 -#: ipam/forms/bulk_import.py:503 ipam/forms/model_forms.py:306 -#: ipam/forms/model_forms.py:315 ipam/tables/ip.py:356 ipam/tables/ip.py:423 -#: ipam/tables/ip.py:446 templates/ipam/ipaddress.html:11 -#: virtualization/tables/virtualmachines.py:95 +#: 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/templates/ipam/ipaddress.html:11 +#: netbox/virtualization/tables/virtualmachines.py:95 msgid "IP Address" msgstr "Adres IP" -#: dcim/tables/devices.py:191 dcim/tables/devices.py:1072 -#: virtualization/tables/virtualmachines.py:86 +#: netbox/dcim/tables/devices.py:191 netbox/dcim/tables/devices.py:1072 +#: netbox/virtualization/tables/virtualmachines.py:86 msgid "IPv4 Address" msgstr "Adres IPv4" -#: dcim/tables/devices.py:195 dcim/tables/devices.py:1076 -#: virtualization/tables/virtualmachines.py:90 +#: netbox/dcim/tables/devices.py:195 netbox/dcim/tables/devices.py:1076 +#: netbox/virtualization/tables/virtualmachines.py:90 msgid "IPv6 Address" msgstr "Adres IPv6" -#: dcim/tables/devices.py:210 +#: netbox/dcim/tables/devices.py:210 msgid "VC Position" msgstr "Pozycja VC" -#: dcim/tables/devices.py:213 +#: netbox/dcim/tables/devices.py:213 msgid "VC Priority" msgstr "Priorytet VC" -#: dcim/tables/devices.py:220 templates/dcim/device_edit.html:38 -#: templates/dcim/devicebay_populate.html:16 +#: netbox/dcim/tables/devices.py:220 netbox/templates/dcim/device_edit.html:38 +#: netbox/templates/dcim/devicebay_populate.html:16 msgid "Parent Device" msgstr "Urządzenie nadrzędne" -#: dcim/tables/devices.py:225 +#: netbox/dcim/tables/devices.py:225 msgid "Position (Device Bay)" msgstr "Pozycja (gniazdo urządzenia)" -#: dcim/tables/devices.py:234 +#: netbox/dcim/tables/devices.py:234 msgid "Console ports" msgstr "Porty konsoli" -#: dcim/tables/devices.py:237 +#: netbox/dcim/tables/devices.py:237 msgid "Console server ports" msgstr "Porty serwera konsoli" -#: dcim/tables/devices.py:240 +#: netbox/dcim/tables/devices.py:240 msgid "Power ports" msgstr "Porty zasilania" -#: dcim/tables/devices.py:243 +#: netbox/dcim/tables/devices.py:243 msgid "Power outlets" msgstr "Gniazdka elektryczne" -#: dcim/tables/devices.py:246 dcim/tables/devices.py:1081 -#: dcim/tables/devicetypes.py:128 dcim/views.py:1042 dcim/views.py:1281 -#: dcim/views.py:1977 netbox/navigation/menu.py:94 -#: netbox/navigation/menu.py:250 templates/dcim/device/base.html:37 -#: templates/dcim/device_list.html:43 templates/dcim/devicetype/base.html:34 -#: templates/dcim/inc/moduletype_buttons.html:25 templates/dcim/module.html:34 -#: templates/dcim/virtualdevicecontext.html:61 -#: templates/dcim/virtualdevicecontext.html:81 -#: templates/virtualization/virtualmachine/base.html:27 -#: templates/virtualization/virtualmachine_list.html:14 -#: virtualization/tables/virtualmachines.py:101 virtualization/views.py:366 -#: wireless/tables/wirelesslan.py:55 +#: 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/templates/dcim/device/base.html:37 +#: netbox/templates/dcim/device_list.html:43 +#: netbox/templates/dcim/devicetype/base.html:34 +#: netbox/templates/dcim/inc/moduletype_buttons.html:25 +#: netbox/templates/dcim/module.html:34 +#: netbox/templates/dcim/virtualdevicecontext.html:61 +#: netbox/templates/dcim/virtualdevicecontext.html:81 +#: netbox/templates/virtualization/virtualmachine/base.html:27 +#: netbox/templates/virtualization/virtualmachine_list.html:14 +#: netbox/virtualization/tables/virtualmachines.py:101 +#: netbox/virtualization/views.py:364 netbox/wireless/tables/wirelesslan.py:55 msgid "Interfaces" msgstr "Interfejsy" -#: dcim/tables/devices.py:249 +#: netbox/dcim/tables/devices.py:249 msgid "Front ports" msgstr "Porty przednie" -#: dcim/tables/devices.py:255 +#: netbox/dcim/tables/devices.py:255 msgid "Device bays" msgstr "Wnęsy na urządzenia" -#: dcim/tables/devices.py:258 +#: netbox/dcim/tables/devices.py:258 msgid "Module bays" msgstr "Wnęsy modułowe" -#: dcim/tables/devices.py:261 +#: netbox/dcim/tables/devices.py:261 msgid "Inventory items" msgstr "Elementy inwentaryzacyjne" -#: dcim/tables/devices.py:305 dcim/tables/modules.py:56 -#: templates/dcim/modulebay.html:17 +#: netbox/dcim/tables/devices.py:305 netbox/dcim/tables/modules.py:56 +#: netbox/templates/dcim/modulebay.html:17 msgid "Module Bay" msgstr "Moduł Bay" -#: dcim/tables/devices.py:318 dcim/tables/devicetypes.py:47 -#: dcim/tables/devicetypes.py:143 dcim/views.py:1117 dcim/views.py:2075 -#: netbox/navigation/menu.py:103 templates/dcim/device/base.html:52 -#: templates/dcim/device_list.html:71 templates/dcim/devicetype/base.html:49 -#: templates/dcim/inc/panels/inventory_items.html:6 -#: templates/dcim/inventoryitemrole.html:32 +#: netbox/dcim/tables/devices.py:318 netbox/dcim/tables/devicetypes.py:47 +#: netbox/dcim/tables/devicetypes.py:143 netbox/dcim/views.py:1115 +#: netbox/dcim/views.py:2073 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 +#: netbox/templates/dcim/inc/panels/inventory_items.html:6 +#: netbox/templates/dcim/inventoryitemrole.html:32 msgid "Inventory Items" msgstr "Przedmioty magazynowe" -#: dcim/tables/devices.py:333 +#: netbox/dcim/tables/devices.py:333 msgid "Cable Color" msgstr "Kolor kabla" -#: dcim/tables/devices.py:339 +#: netbox/dcim/tables/devices.py:339 msgid "Link Peers" msgstr "Łącz rówieśników" -#: dcim/tables/devices.py:342 +#: netbox/dcim/tables/devices.py:342 msgid "Mark Connected" msgstr "Oznacz Połączony" -#: dcim/tables/devices.py:461 +#: netbox/dcim/tables/devices.py:461 msgid "Maximum draw (W)" msgstr "Maksymalne wyciąganie (W)" -#: dcim/tables/devices.py:464 +#: netbox/dcim/tables/devices.py:464 msgid "Allocated draw (W)" msgstr "Przydzielone losowanie (W)" -#: dcim/tables/devices.py:558 ipam/forms/model_forms.py:701 -#: ipam/tables/fhrp.py:28 ipam/views.py:596 ipam/views.py:696 -#: netbox/navigation/menu.py:158 netbox/navigation/menu.py:160 -#: templates/dcim/interface.html:339 templates/ipam/ipaddress_bulk_add.html:15 -#: templates/ipam/service.html:40 templates/virtualization/vminterface.html:85 -#: vpn/tables/tunnels.py:98 +#: netbox/dcim/tables/devices.py:558 netbox/ipam/forms/model_forms.py: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/templates/ipam/ipaddress_bulk_add.html:15 +#: netbox/templates/ipam/service.html:40 +#: netbox/templates/virtualization/vminterface.html:85 +#: netbox/vpn/tables/tunnels.py:98 msgid "IP Addresses" msgstr "Adresy IP" -#: dcim/tables/devices.py:564 netbox/navigation/menu.py:202 -#: templates/ipam/inc/panels/fhrp_groups.html:6 +#: netbox/dcim/tables/devices.py:564 netbox/netbox/navigation/menu.py:202 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:6 msgid "FHRP Groups" msgstr "Grupy FHRP" -#: dcim/tables/devices.py:576 templates/dcim/interface.html:89 -#: templates/virtualization/vminterface.html:67 templates/vpn/tunnel.html:18 -#: templates/vpn/tunneltermination.html:13 vpn/forms/bulk_edit.py:76 -#: vpn/forms/bulk_import.py:76 vpn/forms/filtersets.py:42 -#: vpn/forms/filtersets.py:82 vpn/forms/model_forms.py:60 -#: vpn/forms/model_forms.py:145 vpn/tables/tunnels.py:78 +#: netbox/dcim/tables/devices.py:576 netbox/templates/dcim/interface.html:89 +#: netbox/templates/virtualization/vminterface.html:67 +#: netbox/templates/vpn/tunnel.html:18 +#: netbox/templates/vpn/tunneltermination.html:13 +#: netbox/vpn/forms/bulk_edit.py:76 netbox/vpn/forms/bulk_import.py:76 +#: netbox/vpn/forms/filtersets.py:42 netbox/vpn/forms/filtersets.py:82 +#: netbox/vpn/forms/model_forms.py:60 netbox/vpn/forms/model_forms.py:145 +#: netbox/vpn/tables/tunnels.py:78 msgid "Tunnel" msgstr "Tunel" -#: dcim/tables/devices.py:604 dcim/tables/devicetypes.py:227 -#: templates/dcim/interface.html:65 +#: netbox/dcim/tables/devices.py:604 netbox/dcim/tables/devicetypes.py:227 +#: netbox/templates/dcim/interface.html:65 msgid "Management Only" msgstr "Tylko zarządzanie" -#: dcim/tables/devices.py:623 +#: netbox/dcim/tables/devices.py:623 msgid "VDCs" msgstr "VDC" -#: dcim/tables/devices.py:873 templates/dcim/modulebay.html:53 +#: netbox/dcim/tables/devices.py:873 netbox/templates/dcim/modulebay.html:53 msgid "Installed Module" msgstr "Zainstalowany moduł" -#: dcim/tables/devices.py:876 +#: netbox/dcim/tables/devices.py:876 msgid "Module Serial" msgstr "Moduł szeregowy" -#: dcim/tables/devices.py:880 +#: netbox/dcim/tables/devices.py:880 msgid "Module Asset Tag" msgstr "Etykietka zasobów modułu" -#: dcim/tables/devices.py:889 +#: netbox/dcim/tables/devices.py:889 msgid "Module Status" msgstr "Status modułu" -#: dcim/tables/devices.py:944 dcim/tables/devicetypes.py:312 -#: templates/dcim/inventoryitem.html:40 +#: netbox/dcim/tables/devices.py:944 netbox/dcim/tables/devicetypes.py:312 +#: netbox/templates/dcim/inventoryitem.html:40 msgid "Component" msgstr "Komponent" -#: dcim/tables/devices.py:1000 +#: netbox/dcim/tables/devices.py:1000 msgid "Items" msgstr "Przedmioty" -#: dcim/tables/devicetypes.py:37 netbox/navigation/menu.py:84 -#: netbox/navigation/menu.py:86 +#: netbox/dcim/tables/devicetypes.py:37 netbox/netbox/navigation/menu.py:84 +#: netbox/netbox/navigation/menu.py:86 msgid "Device Types" msgstr "Rodzaje urządzeń" -#: dcim/tables/devicetypes.py:42 netbox/navigation/menu.py:87 +#: netbox/dcim/tables/devicetypes.py:42 netbox/netbox/navigation/menu.py:87 msgid "Module Types" msgstr "Rodzaje modułów" -#: dcim/tables/devicetypes.py:52 extras/forms/filtersets.py:371 -#: extras/forms/model_forms.py:537 extras/tables/tables.py:540 -#: netbox/navigation/menu.py:78 +#: 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/netbox/navigation/menu.py:78 msgid "Platforms" msgstr "Platformy" -#: dcim/tables/devicetypes.py:84 templates/dcim/devicetype.html:29 +#: netbox/dcim/tables/devicetypes.py:84 +#: netbox/templates/dcim/devicetype.html:29 msgid "Default Platform" msgstr "Domyślna platforma" -#: dcim/tables/devicetypes.py:88 templates/dcim/devicetype.html:45 +#: netbox/dcim/tables/devicetypes.py:88 +#: netbox/templates/dcim/devicetype.html:45 msgid "Full Depth" msgstr "Pełna głębokość" -#: dcim/tables/devicetypes.py:98 +#: netbox/dcim/tables/devicetypes.py:98 msgid "U Height" msgstr "Wysokość U" -#: dcim/tables/devicetypes.py:113 dcim/tables/modules.py:26 -#: dcim/tables/racks.py:89 +#: netbox/dcim/tables/devicetypes.py:113 netbox/dcim/tables/modules.py:26 +#: netbox/dcim/tables/racks.py:89 msgid "Instances" msgstr "Instancje" -#: dcim/tables/devicetypes.py:116 dcim/views.py:982 dcim/views.py:1221 -#: dcim/views.py:1913 netbox/navigation/menu.py:97 -#: templates/dcim/device/base.html:25 templates/dcim/device_list.html:15 -#: templates/dcim/devicetype/base.html:22 -#: templates/dcim/inc/moduletype_buttons.html:13 templates/dcim/module.html:22 +#: netbox/dcim/tables/devicetypes.py:116 netbox/dcim/views.py:980 +#: netbox/dcim/views.py:1219 netbox/dcim/views.py:1911 +#: netbox/netbox/navigation/menu.py:97 +#: netbox/templates/dcim/device/base.html:25 +#: netbox/templates/dcim/device_list.html:15 +#: netbox/templates/dcim/devicetype/base.html:22 +#: netbox/templates/dcim/inc/moduletype_buttons.html:13 +#: netbox/templates/dcim/module.html:22 msgid "Console Ports" msgstr "Porty konsoli" -#: dcim/tables/devicetypes.py:119 dcim/views.py:997 dcim/views.py:1236 -#: dcim/views.py:1929 netbox/navigation/menu.py:98 -#: templates/dcim/device/base.html:28 templates/dcim/device_list.html:22 -#: templates/dcim/devicetype/base.html:25 -#: templates/dcim/inc/moduletype_buttons.html:16 templates/dcim/module.html:25 +#: netbox/dcim/tables/devicetypes.py:119 netbox/dcim/views.py:995 +#: netbox/dcim/views.py:1234 netbox/dcim/views.py:1927 +#: netbox/netbox/navigation/menu.py:98 +#: netbox/templates/dcim/device/base.html:28 +#: netbox/templates/dcim/device_list.html:22 +#: netbox/templates/dcim/devicetype/base.html:25 +#: netbox/templates/dcim/inc/moduletype_buttons.html:16 +#: netbox/templates/dcim/module.html:25 msgid "Console Server Ports" msgstr "Porty serwera konsoli" -#: dcim/tables/devicetypes.py:122 dcim/views.py:1012 dcim/views.py:1251 -#: dcim/views.py:1945 netbox/navigation/menu.py:99 -#: templates/dcim/device/base.html:31 templates/dcim/device_list.html:29 -#: templates/dcim/devicetype/base.html:28 -#: templates/dcim/inc/moduletype_buttons.html:19 templates/dcim/module.html:28 +#: netbox/dcim/tables/devicetypes.py:122 netbox/dcim/views.py:1010 +#: netbox/dcim/views.py:1249 netbox/dcim/views.py:1943 +#: netbox/netbox/navigation/menu.py:99 +#: netbox/templates/dcim/device/base.html:31 +#: netbox/templates/dcim/device_list.html:29 +#: netbox/templates/dcim/devicetype/base.html:28 +#: netbox/templates/dcim/inc/moduletype_buttons.html:19 +#: netbox/templates/dcim/module.html:28 msgid "Power Ports" msgstr "Porty zasilania" -#: dcim/tables/devicetypes.py:125 dcim/views.py:1027 dcim/views.py:1266 -#: dcim/views.py:1961 netbox/navigation/menu.py:100 -#: templates/dcim/device/base.html:34 templates/dcim/device_list.html:36 -#: templates/dcim/devicetype/base.html:31 -#: templates/dcim/inc/moduletype_buttons.html:22 templates/dcim/module.html:31 +#: netbox/dcim/tables/devicetypes.py:125 netbox/dcim/views.py:1025 +#: netbox/dcim/views.py:1264 netbox/dcim/views.py:1959 +#: netbox/netbox/navigation/menu.py:100 +#: netbox/templates/dcim/device/base.html:34 +#: netbox/templates/dcim/device_list.html:36 +#: netbox/templates/dcim/devicetype/base.html:31 +#: netbox/templates/dcim/inc/moduletype_buttons.html:22 +#: netbox/templates/dcim/module.html:31 msgid "Power Outlets" msgstr "Gniazdka elektryczne" -#: dcim/tables/devicetypes.py:131 dcim/views.py:1057 dcim/views.py:1296 -#: dcim/views.py:1999 netbox/navigation/menu.py:95 -#: templates/dcim/device/base.html:40 templates/dcim/devicetype/base.html:37 -#: templates/dcim/inc/moduletype_buttons.html:28 templates/dcim/module.html:37 +#: netbox/dcim/tables/devicetypes.py:131 netbox/dcim/views.py:1055 +#: netbox/dcim/views.py:1294 netbox/dcim/views.py:1997 +#: netbox/netbox/navigation/menu.py:95 +#: netbox/templates/dcim/device/base.html:40 +#: netbox/templates/dcim/devicetype/base.html:37 +#: netbox/templates/dcim/inc/moduletype_buttons.html:28 +#: netbox/templates/dcim/module.html:37 msgid "Front Ports" msgstr "Porty przednie" -#: dcim/tables/devicetypes.py:134 dcim/views.py:1072 dcim/views.py:1311 -#: dcim/views.py:2015 netbox/navigation/menu.py:96 -#: templates/dcim/device/base.html:43 templates/dcim/device_list.html:50 -#: templates/dcim/devicetype/base.html:40 -#: templates/dcim/inc/moduletype_buttons.html:31 templates/dcim/module.html:40 +#: netbox/dcim/tables/devicetypes.py:134 netbox/dcim/views.py:1070 +#: netbox/dcim/views.py:1309 netbox/dcim/views.py:2013 +#: netbox/netbox/navigation/menu.py:96 +#: netbox/templates/dcim/device/base.html:43 +#: netbox/templates/dcim/device_list.html:50 +#: netbox/templates/dcim/devicetype/base.html:40 +#: netbox/templates/dcim/inc/moduletype_buttons.html:31 +#: netbox/templates/dcim/module.html:40 msgid "Rear Ports" msgstr "Tylne porty" -#: dcim/tables/devicetypes.py:137 dcim/views.py:1102 dcim/views.py:2055 -#: netbox/navigation/menu.py:102 templates/dcim/device/base.html:49 -#: templates/dcim/device_list.html:57 templates/dcim/devicetype/base.html:46 +#: netbox/dcim/tables/devicetypes.py:137 netbox/dcim/views.py:1100 +#: netbox/dcim/views.py:2053 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" -#: dcim/tables/devicetypes.py:140 dcim/views.py:1087 dcim/views.py:1326 -#: dcim/views.py:2035 netbox/navigation/menu.py:101 -#: templates/dcim/device/base.html:46 templates/dcim/device_list.html:64 -#: templates/dcim/devicetype/base.html:43 -#: templates/dcim/inc/moduletype_buttons.html:34 templates/dcim/module.html:43 +#: netbox/dcim/tables/devicetypes.py:140 netbox/dcim/views.py:1085 +#: netbox/dcim/views.py:1324 netbox/dcim/views.py:2033 +#: netbox/netbox/navigation/menu.py:101 +#: netbox/templates/dcim/device/base.html:46 +#: netbox/templates/dcim/device_list.html:64 +#: netbox/templates/dcim/devicetype/base.html:43 +#: netbox/templates/dcim/inc/moduletype_buttons.html:34 +#: netbox/templates/dcim/module.html:43 msgid "Module Bays" msgstr "Wnęsy modułowe" -#: dcim/tables/power.py:36 netbox/navigation/menu.py:297 -#: templates/dcim/powerpanel.html:51 +#: netbox/dcim/tables/power.py:36 netbox/netbox/navigation/menu.py:297 +#: netbox/templates/dcim/powerpanel.html:51 msgid "Power Feeds" msgstr "Zasilanie zasilania" -#: dcim/tables/power.py:80 templates/dcim/powerfeed.html:99 +#: netbox/dcim/tables/power.py:80 netbox/templates/dcim/powerfeed.html:99 msgid "Max Utilization" msgstr "Maksymalne wykorzystanie" -#: dcim/tables/power.py:84 +#: netbox/dcim/tables/power.py:84 msgid "Available Power (VA)" msgstr "Dostępna moc (VA)" -#: dcim/tables/racks.py:30 dcim/tables/sites.py:143 -#: netbox/navigation/menu.py:43 netbox/navigation/menu.py:47 -#: netbox/navigation/menu.py:49 +#: netbox/dcim/tables/racks.py:30 netbox/dcim/tables/sites.py:143 +#: netbox/netbox/navigation/menu.py:43 netbox/netbox/navigation/menu.py:47 +#: netbox/netbox/navigation/menu.py:49 msgid "Racks" msgstr "Szafy" -#: dcim/tables/racks.py:63 dcim/tables/racks.py:142 -#: templates/dcim/device.html:318 -#: templates/dcim/inc/panels/racktype_dimensions.html:14 +#: netbox/dcim/tables/racks.py:63 netbox/dcim/tables/racks.py:142 +#: netbox/templates/dcim/device.html:318 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:14 msgid "Height" msgstr "Wysokość" -#: dcim/tables/racks.py:67 dcim/tables/racks.py:165 -#: templates/dcim/inc/panels/racktype_dimensions.html:18 +#: netbox/dcim/tables/racks.py:67 netbox/dcim/tables/racks.py:165 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:18 msgid "Outer Width" msgstr "Szerokość zewnętrzna" -#: dcim/tables/racks.py:71 dcim/tables/racks.py:169 -#: templates/dcim/inc/panels/racktype_dimensions.html:28 +#: netbox/dcim/tables/racks.py:71 netbox/dcim/tables/racks.py:169 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:28 msgid "Outer Depth" msgstr "Głębokość zewnętrzna" -#: dcim/tables/racks.py:79 dcim/tables/racks.py:177 +#: netbox/dcim/tables/racks.py:79 netbox/dcim/tables/racks.py:177 msgid "Max Weight" msgstr "Maksymalna waga" -#: dcim/tables/racks.py:154 +#: netbox/dcim/tables/racks.py:154 msgid "Space" msgstr "Przestrzeń" -#: dcim/tables/sites.py:30 dcim/tables/sites.py:57 -#: extras/forms/filtersets.py:351 extras/forms/model_forms.py:517 -#: ipam/forms/bulk_edit.py:131 ipam/forms/model_forms.py:153 -#: ipam/tables/asn.py:66 netbox/navigation/menu.py:15 -#: netbox/navigation/menu.py:17 +#: netbox/dcim/tables/sites.py:30 netbox/dcim/tables/sites.py:57 +#: netbox/extras/forms/filtersets.py: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/netbox/navigation/menu.py:15 netbox/netbox/navigation/menu.py:17 msgid "Sites" msgstr "Witryny" -#: dcim/tests/test_api.py:47 +#: netbox/dcim/tests/test_api.py:47 msgid "Test case must set peer_termination_type" msgstr "Przypadek testowy musi ustawić peer_termination_type" -#: dcim/views.py:140 +#: netbox/dcim/views.py:138 #, python-brace-format msgid "Disconnected {count} {type}" msgstr "Odłączony {count} {type}" -#: dcim/views.py:740 netbox/navigation/menu.py:51 +#: netbox/dcim/views.py:738 netbox/netbox/navigation/menu.py:51 msgid "Reservations" msgstr "Rezerwacje" -#: dcim/views.py:759 templates/dcim/location.html:90 -#: templates/dcim/site.html:140 +#: netbox/dcim/views.py:757 netbox/templates/dcim/location.html:90 +#: netbox/templates/dcim/site.html:140 msgid "Non-Racked Devices" msgstr "Urządzenia poza szafami" -#: dcim/views.py:2088 extras/forms/model_forms.py:577 -#: templates/extras/configcontext.html:10 -#: virtualization/forms/model_forms.py:225 virtualization/views.py:407 +#: netbox/dcim/views.py:2086 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 msgid "Config Context" msgstr "Kontekst konfiguracji" -#: dcim/views.py:2098 virtualization/views.py:417 +#: netbox/dcim/views.py:2096 netbox/virtualization/views.py:415 msgid "Render Config" msgstr "Konfiguracja renderowania" -#: dcim/views.py:2131 virtualization/views.py:450 +#: 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}" -#: dcim/views.py:2149 extras/tables/tables.py:550 -#: netbox/navigation/menu.py:247 netbox/navigation/menu.py:249 -#: virtualization/views.py:180 +#: 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 msgid "Virtual Machines" msgstr "Maszyny wirtualne" -#: dcim/views.py:2897 +#: netbox/dcim/views.py:2907 #, python-brace-format msgid "Installed device {device} in bay {device_bay}." msgstr "Zainstalowane urządzenie {device} w zatoce {device_bay}." -#: dcim/views.py:2938 +#: netbox/dcim/views.py:2948 #, python-brace-format msgid "Removed device {device} from bay {device_bay}." msgstr "Usunięte urządzenie {device} z zatoki {device_bay}." -#: dcim/views.py:3044 ipam/tables/ip.py:234 +#: netbox/dcim/views.py:3054 netbox/ipam/tables/ip.py:234 msgid "Children" msgstr "Dzieci" -#: dcim/views.py:3510 +#: netbox/dcim/views.py:3520 #, python-brace-format msgid "Added member {device}" msgstr "Dodano członka {device}" -#: dcim/views.py:3557 +#: netbox/dcim/views.py:3567 #, 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." -#: dcim/views.py:3570 +#: netbox/dcim/views.py:3580 #, python-brace-format msgid "Removed {device} from virtual chassis {chassis}" msgstr "Usunięto {device} z wirtualnego podwozia {chassis}" -#: extras/api/customfields.py:89 +#: netbox/extras/api/customfields.py:89 #, python-brace-format msgid "Unknown related object(s): {name}" msgstr "Nieznany obiekt (y) powiązany (y): {name}" -#: extras/api/serializers_/customfields.py:73 +#: netbox/extras/api/serializers_/customfields.py:73 msgid "Changing the type of custom fields is not supported." msgstr "Zmiana typu pól niestandardowych nie jest obsługiwana." -#: extras/api/serializers_/scripts.py:70 extras/api/serializers_/scripts.py:75 +#: netbox/extras/api/serializers_/scripts.py:70 +#: netbox/extras/api/serializers_/scripts.py:75 msgid "Scheduling is not enabled for this script." msgstr "Planowanie nie jest włączone dla tego skryptu." -#: extras/choices.py:30 extras/forms/misc.py:14 +#: netbox/extras/choices.py:30 netbox/extras/forms/misc.py:14 msgid "Text" msgstr "Tekst" -#: extras/choices.py:31 +#: netbox/extras/choices.py:31 msgid "Text (long)" msgstr "Tekst (długi)" -#: extras/choices.py:32 +#: netbox/extras/choices.py:32 msgid "Integer" msgstr "Liczba całkowita" -#: extras/choices.py:33 +#: netbox/extras/choices.py:33 msgid "Decimal" msgstr "Dziesiętny" -#: extras/choices.py:34 +#: netbox/extras/choices.py:34 msgid "Boolean (true/false)" msgstr "Boolean (prawda/fałsz)" -#: extras/choices.py:35 +#: netbox/extras/choices.py:35 msgid "Date" msgstr "Data" -#: extras/choices.py:36 +#: netbox/extras/choices.py:36 msgid "Date & time" msgstr "Data i godzina" -#: extras/choices.py:38 +#: netbox/extras/choices.py:38 msgid "JSON" msgstr "JSON" -#: extras/choices.py:39 +#: netbox/extras/choices.py:39 msgid "Selection" msgstr "Wybór" -#: extras/choices.py:40 +#: netbox/extras/choices.py:40 msgid "Multiple selection" msgstr "Wielokrotny wybór" -#: extras/choices.py:42 +#: netbox/extras/choices.py:42 msgid "Multiple objects" msgstr "Wiele obiektów" -#: extras/choices.py:53 netbox/preferences.py:21 -#: templates/extras/customfield.html:78 vpn/choices.py:20 -#: wireless/choices.py:27 +#: netbox/extras/choices.py:53 netbox/netbox/preferences.py:21 +#: netbox/templates/extras/customfield.html:78 netbox/vpn/choices.py:20 +#: netbox/wireless/choices.py:27 msgid "Disabled" msgstr "Niepełnosprawny" -#: extras/choices.py:54 +#: netbox/extras/choices.py:54 msgid "Loose" msgstr "Luźne" -#: extras/choices.py:55 +#: netbox/extras/choices.py:55 msgid "Exact" msgstr "Dokładny" -#: extras/choices.py:66 +#: netbox/extras/choices.py:66 msgid "Always" msgstr "Zawsze" -#: extras/choices.py:67 +#: netbox/extras/choices.py:67 msgid "If set" msgstr "Jeśli ustawiony" -#: extras/choices.py:68 extras/choices.py:81 +#: netbox/extras/choices.py:68 netbox/extras/choices.py:81 msgid "Hidden" msgstr "Ukryte" -#: extras/choices.py:79 +#: netbox/extras/choices.py:79 msgid "Yes" msgstr "tak" -#: extras/choices.py:80 +#: netbox/extras/choices.py:80 msgid "No" msgstr "Nie" -#: extras/choices.py:108 templates/tenancy/contact.html:57 -#: tenancy/forms/bulk_edit.py:118 wireless/forms/model_forms.py:168 +#: 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 msgid "Link" msgstr "Link" -#: extras/choices.py:124 +#: netbox/extras/choices.py:124 msgid "Newest" msgstr "Najnowszy" -#: extras/choices.py:125 +#: netbox/extras/choices.py:125 msgid "Oldest" msgstr "Najstarszy" -#: extras/choices.py:126 +#: netbox/extras/choices.py:126 msgid "Alphabetical (A-Z)" msgstr "Alfabetycznie (A-Z)" -#: extras/choices.py:127 +#: netbox/extras/choices.py:127 msgid "Alphabetical (Z-A)" msgstr "Alfabetycznie (Z-A)" -#: extras/choices.py:144 extras/choices.py:167 +#: netbox/extras/choices.py:144 netbox/extras/choices.py:167 msgid "Info" msgstr "Informacja" -#: extras/choices.py:145 extras/choices.py:168 +#: netbox/extras/choices.py:145 netbox/extras/choices.py:168 msgid "Success" msgstr "Sukces" -#: extras/choices.py:146 extras/choices.py:169 +#: netbox/extras/choices.py:146 netbox/extras/choices.py:169 msgid "Warning" msgstr "Ostrzeżenie" -#: extras/choices.py:147 +#: netbox/extras/choices.py:147 msgid "Danger" msgstr "Niebezpieczeństwo" -#: extras/choices.py:165 +#: netbox/extras/choices.py:165 msgid "Debug" msgstr "Debugowanie" -#: extras/choices.py:166 netbox/choices.py:101 +#: netbox/extras/choices.py:166 netbox/netbox/choices.py:101 msgid "Default" msgstr "Domyślnie" -#: extras/choices.py:170 +#: netbox/extras/choices.py:170 msgid "Failure" msgstr "Niepowodzenie" -#: extras/choices.py:186 +#: netbox/extras/choices.py:186 msgid "Hourly" msgstr "Godzinowe" -#: extras/choices.py:187 +#: netbox/extras/choices.py:187 msgid "12 hours" msgstr "12 godzin" -#: extras/choices.py:188 +#: netbox/extras/choices.py:188 msgid "Daily" msgstr "Codziennie" -#: extras/choices.py:189 +#: netbox/extras/choices.py:189 msgid "Weekly" msgstr "Tygodniowy" -#: extras/choices.py:190 +#: netbox/extras/choices.py:190 msgid "30 days" msgstr "30 dni" -#: extras/choices.py:226 templates/dcim/virtualchassis_edit.html:107 -#: templates/generic/bulk_add_component.html:68 -#: templates/generic/object_edit.html:47 templates/generic/object_edit.html:80 -#: templates/ipam/inc/ipaddress_edit_header.html:7 +#: netbox/extras/choices.py:226 +#: 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/ipam/inc/ipaddress_edit_header.html:7 msgid "Create" msgstr "Utwórz" -#: extras/choices.py:227 +#: netbox/extras/choices.py:227 msgid "Update" msgstr "Aktualizacja" -#: extras/choices.py:228 templates/circuits/inc/circuit_termination.html:23 -#: templates/dcim/inc/panels/inventory_items.html:37 -#: templates/dcim/powerpanel.html:66 templates/extras/script_list.html:35 -#: templates/generic/bulk_delete.html:20 templates/generic/bulk_delete.html:66 -#: templates/generic/object_delete.html:19 templates/htmx/delete_form.html:57 -#: templates/ipam/inc/panels/fhrp_groups.html:48 -#: templates/users/objectpermission.html:46 -#: utilities/templates/buttons/delete.html:11 +#: netbox/extras/choices.py:228 +#: netbox/templates/circuits/inc/circuit_termination.html:23 +#: netbox/templates/dcim/inc/panels/inventory_items.html:37 +#: netbox/templates/dcim/powerpanel.html:66 +#: netbox/templates/extras/script_list.html:35 +#: netbox/templates/generic/bulk_delete.html:20 +#: netbox/templates/generic/bulk_delete.html:66 +#: netbox/templates/generic/object_delete.html:19 +#: netbox/templates/htmx/delete_form.html:57 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:48 +#: netbox/templates/users/objectpermission.html:46 +#: netbox/utilities/templates/buttons/delete.html:11 msgid "Delete" msgstr "Usuń" -#: extras/choices.py:252 netbox/choices.py:57 netbox/choices.py:102 +#: netbox/extras/choices.py:252 netbox/netbox/choices.py:57 +#: netbox/netbox/choices.py:102 msgid "Blue" msgstr "Niebieska" -#: extras/choices.py:253 netbox/choices.py:56 netbox/choices.py:103 +#: netbox/extras/choices.py:253 netbox/netbox/choices.py:56 +#: netbox/netbox/choices.py:103 msgid "Indigo" msgstr "Indygo" -#: extras/choices.py:254 netbox/choices.py:54 netbox/choices.py:104 +#: netbox/extras/choices.py:254 netbox/netbox/choices.py:54 +#: netbox/netbox/choices.py:104 msgid "Purple" msgstr "Fioletowy" -#: extras/choices.py:255 netbox/choices.py:51 netbox/choices.py:105 +#: netbox/extras/choices.py:255 netbox/netbox/choices.py:51 +#: netbox/netbox/choices.py:105 msgid "Pink" msgstr "Różowy" -#: extras/choices.py:256 netbox/choices.py:50 netbox/choices.py:106 +#: netbox/extras/choices.py:256 netbox/netbox/choices.py:50 +#: netbox/netbox/choices.py:106 msgid "Red" msgstr "Czerwony" -#: extras/choices.py:257 netbox/choices.py:68 netbox/choices.py:107 +#: netbox/extras/choices.py:257 netbox/netbox/choices.py:68 +#: netbox/netbox/choices.py:107 msgid "Orange" msgstr "Pomarańczowy" -#: extras/choices.py:258 netbox/choices.py:66 netbox/choices.py:108 +#: netbox/extras/choices.py:258 netbox/netbox/choices.py:66 +#: netbox/netbox/choices.py:108 msgid "Yellow" msgstr "Żółty" -#: extras/choices.py:259 netbox/choices.py:63 netbox/choices.py:109 +#: netbox/extras/choices.py:259 netbox/netbox/choices.py:63 +#: netbox/netbox/choices.py:109 msgid "Green" msgstr "Zielony" -#: extras/choices.py:260 netbox/choices.py:60 netbox/choices.py:110 +#: netbox/extras/choices.py:260 netbox/netbox/choices.py:60 +#: netbox/netbox/choices.py:110 msgid "Teal" msgstr "Cyraneczka" -#: extras/choices.py:261 netbox/choices.py:59 netbox/choices.py:111 +#: netbox/extras/choices.py:261 netbox/netbox/choices.py:59 +#: netbox/netbox/choices.py:111 msgid "Cyan" msgstr "Niebieski" -#: extras/choices.py:262 netbox/choices.py:112 +#: netbox/extras/choices.py:262 netbox/netbox/choices.py:112 msgid "Gray" msgstr "Szary" -#: extras/choices.py:263 netbox/choices.py:74 netbox/choices.py:113 +#: netbox/extras/choices.py:263 netbox/netbox/choices.py:74 +#: netbox/netbox/choices.py:113 msgid "Black" msgstr "Czarny" -#: extras/choices.py:264 netbox/choices.py:75 netbox/choices.py:114 +#: netbox/extras/choices.py:264 netbox/netbox/choices.py:75 +#: netbox/netbox/choices.py:114 msgid "White" msgstr "Biały" -#: extras/choices.py:279 extras/forms/model_forms.py:353 -#: extras/forms/model_forms.py:430 templates/extras/webhook.html:10 +#: netbox/extras/choices.py:279 netbox/extras/forms/model_forms.py:353 +#: netbox/extras/forms/model_forms.py:430 +#: netbox/templates/extras/webhook.html:10 msgid "Webhook" msgstr "Hook internetowy" -#: extras/choices.py:280 extras/forms/model_forms.py:418 -#: templates/extras/script/base.html:29 +#: netbox/extras/choices.py:280 netbox/extras/forms/model_forms.py:418 +#: netbox/templates/extras/script/base.html:29 msgid "Script" msgstr "Skrypt" -#: extras/choices.py:281 +#: netbox/extras/choices.py:281 msgid "Notification" msgstr "Powiadomienie" -#: extras/conditions.py:54 +#: netbox/extras/conditions.py:54 #, python-brace-format msgid "Unknown operator: {op}. Must be one of: {operators}" msgstr "Nieznany operator: {op}. Musi być jednym z: {operators}" -#: extras/conditions.py:58 +#: netbox/extras/conditions.py:58 #, python-brace-format msgid "Unsupported value type: {value}" msgstr "Nieobsługiwany typ wartości: {value}" -#: extras/conditions.py:60 +#: netbox/extras/conditions.py:60 #, python-brace-format msgid "Invalid type for {op} operation: {value}" msgstr "Nieprawidłowy typ {op} operacja: {value}" -#: extras/conditions.py:137 +#: netbox/extras/conditions.py:137 #, python-brace-format msgid "Ruleset must be a dictionary, not {ruleset}." msgstr "Zestaw reguł musi być słownikiem, a nie {ruleset}." -#: extras/conditions.py:142 +#: netbox/extras/conditions.py:142 msgid "Invalid logic type: must be 'AND' or 'OR'. Please check documentation." msgstr "" "Nieprawidłowy typ logiki: musi być „AND” lub „OR”. Proszę sprawdzić " "dokumentację." -#: extras/conditions.py:154 +#: netbox/extras/conditions.py:154 msgid "Incorrect key(s) informed. Please check documentation." msgstr "Zgłoszono nieprawidłowy klucz (y). Proszę sprawdzić dokumentację." -#: extras/dashboard/forms.py:38 +#: netbox/extras/dashboard/forms.py:38 msgid "Widget type" msgstr "Typ widżetu" -#: extras/dashboard/utils.py:36 +#: netbox/extras/dashboard/utils.py:36 #, python-brace-format msgid "Unregistered widget class: {name}" msgstr "Niezarejestrowana klasa widgetów: {name}" -#: extras/dashboard/widgets.py:125 +#: netbox/extras/dashboard/widgets.py:125 #, python-brace-format msgid "{class_name} must define a render() method." msgstr "{class_name} musi zdefiniować metodę render ()." -#: extras/dashboard/widgets.py:144 +#: netbox/extras/dashboard/widgets.py:144 msgid "Note" msgstr "Uwaga" -#: extras/dashboard/widgets.py:145 +#: netbox/extras/dashboard/widgets.py:145 msgid "Display some arbitrary custom content. Markdown is supported." msgstr "Wyświetl dowolną niestandardową zawartość. Markdown jest obsługiwany." -#: extras/dashboard/widgets.py:158 +#: netbox/extras/dashboard/widgets.py:158 msgid "Object Counts" msgstr "Liczenie obiektów" -#: extras/dashboard/widgets.py:159 +#: netbox/extras/dashboard/widgets.py:159 msgid "" "Display a set of NetBox models and the number of objects created for each " "type." @@ -6939,269 +7479,291 @@ msgstr "" "Wyświetla zestaw modeli NetBox i liczbę obiektów utworzonych dla każdego " "typu." -#: extras/dashboard/widgets.py:169 +#: netbox/extras/dashboard/widgets.py:169 msgid "Filters to apply when counting the number of objects" msgstr "Filtry do zastosowania przy liczeniu liczby obiektów" -#: extras/dashboard/widgets.py:177 +#: netbox/extras/dashboard/widgets.py:177 msgid "Invalid format. Object filters must be passed as a dictionary." msgstr "" "Nieprawidłowy format. Filtry obiektów muszą być przekazywane jako słownik." -#: extras/dashboard/widgets.py:208 +#: netbox/extras/dashboard/widgets.py:208 msgid "Object List" msgstr "Lista obiektów" -#: extras/dashboard/widgets.py:209 +#: netbox/extras/dashboard/widgets.py:209 msgid "Display an arbitrary list of objects." msgstr "Wyświetla dowolną listę obiektów." -#: extras/dashboard/widgets.py:222 +#: netbox/extras/dashboard/widgets.py:222 msgid "The default number of objects to display" msgstr "Domyślna liczba obiektów do wyświetlenia" -#: extras/dashboard/widgets.py:234 +#: netbox/extras/dashboard/widgets.py:234 msgid "Invalid format. URL parameters must be passed as a dictionary." msgstr "" "Nieprawidłowy format. Parametry adresu URL muszą być przekazywane jako " "słownik." -#: extras/dashboard/widgets.py:274 +#: netbox/extras/dashboard/widgets.py:274 msgid "RSS Feed" msgstr "Kanał RSS" -#: extras/dashboard/widgets.py:279 +#: netbox/extras/dashboard/widgets.py:279 msgid "Embed an RSS feed from an external website." msgstr "Osadź kanał RSS z zewnętrznej strony internetowej." -#: extras/dashboard/widgets.py:286 +#: netbox/extras/dashboard/widgets.py:286 msgid "Feed URL" msgstr "Adres URL kanału" -#: extras/dashboard/widgets.py:291 +#: netbox/extras/dashboard/widgets.py:291 msgid "The maximum number of objects to display" msgstr "Maksymalna liczba obiektów do wyświetlenia" -#: extras/dashboard/widgets.py:296 +#: netbox/extras/dashboard/widgets.py:296 msgid "How long to stored the cached content (in seconds)" msgstr "Jak długo przechowywać zawartość w pamięci podręcznej (w sekundach)" -#: extras/dashboard/widgets.py:348 templates/account/base.html:10 -#: templates/account/bookmarks.html:7 templates/inc/user_menu.html:48 +#: netbox/extras/dashboard/widgets.py:348 +#: netbox/templates/account/base.html:10 +#: netbox/templates/account/bookmarks.html:7 +#: netbox/templates/inc/user_menu.html:48 msgid "Bookmarks" msgstr "Zakładki" -#: extras/dashboard/widgets.py:352 +#: netbox/extras/dashboard/widgets.py:352 msgid "Show your personal bookmarks" msgstr "Pokaż swoje osobiste zakładki" -#: extras/events.py:147 +#: netbox/extras/events.py:147 #, python-brace-format msgid "Unknown action type for an event rule: {action_type}" msgstr "Nieznany typ akcji dla reguły zdarzenia: {action_type}" -#: extras/events.py:192 +#: netbox/extras/events.py:192 #, python-brace-format msgid "Cannot import events pipeline {name} error: {error}" msgstr "Nie można importować pociągu zdarzeń {name} błąd: {error}" -#: extras/filtersets.py:45 +#: netbox/extras/filtersets.py:45 msgid "Script module (ID)" msgstr "Moduł skryptu (ID)" -#: extras/filtersets.py:254 extras/filtersets.py:637 extras/filtersets.py:665 +#: netbox/extras/filtersets.py:254 netbox/extras/filtersets.py:637 +#: netbox/extras/filtersets.py:665 msgid "Data file (ID)" msgstr "Plik danych (ID)" -#: extras/filtersets.py:370 users/filtersets.py:68 users/filtersets.py:191 +#: netbox/extras/filtersets.py:370 netbox/users/filtersets.py:68 +#: netbox/users/filtersets.py:191 msgid "Group (name)" msgstr "Grupa (nazwa)" -#: extras/filtersets.py:574 virtualization/forms/filtersets.py:118 +#: netbox/extras/filtersets.py:574 +#: netbox/virtualization/forms/filtersets.py:118 msgid "Cluster type" msgstr "Typ klastra" -#: extras/filtersets.py:580 virtualization/filtersets.py:95 -#: virtualization/filtersets.py:147 +#: netbox/extras/filtersets.py:580 netbox/virtualization/filtersets.py:95 +#: netbox/virtualization/filtersets.py:147 msgid "Cluster type (slug)" msgstr "Typ klastra (identyfikator)" -#: extras/filtersets.py:601 tenancy/forms/forms.py:16 -#: tenancy/forms/forms.py:39 +#: netbox/extras/filtersets.py:601 netbox/tenancy/forms/forms.py:16 +#: netbox/tenancy/forms/forms.py:39 msgid "Tenant group" msgstr "Grupa najemców" -#: extras/filtersets.py:607 tenancy/filtersets.py:188 -#: tenancy/filtersets.py:208 +#: netbox/extras/filtersets.py:607 netbox/tenancy/filtersets.py:188 +#: netbox/tenancy/filtersets.py:208 msgid "Tenant group (slug)" msgstr "Grupa najemców (identyfikator)" -#: extras/filtersets.py:623 extras/forms/model_forms.py:495 -#: templates/extras/tag.html:11 +#: netbox/extras/filtersets.py:623 netbox/extras/forms/model_forms.py:495 +#: netbox/templates/extras/tag.html:11 msgid "Tag" msgstr "Etykietka" -#: extras/filtersets.py:629 +#: netbox/extras/filtersets.py:629 msgid "Tag (slug)" msgstr "Tag (identyfikator)" -#: extras/filtersets.py:689 extras/forms/filtersets.py:429 +#: netbox/extras/filtersets.py:689 netbox/extras/forms/filtersets.py:429 msgid "Has local config context data" msgstr "Posiada lokalne dane kontekstowe konfiguracji" -#: extras/forms/bulk_edit.py:35 extras/forms/filtersets.py:60 +#: netbox/extras/forms/bulk_edit.py:35 netbox/extras/forms/filtersets.py:60 msgid "Group name" msgstr "Nazwa grupy" -#: extras/forms/bulk_edit.py:43 extras/forms/filtersets.py:68 -#: extras/tables/tables.py:65 templates/extras/customfield.html:38 -#: templates/generic/bulk_import.html:118 +#: netbox/extras/forms/bulk_edit.py:43 netbox/extras/forms/filtersets.py:68 +#: netbox/extras/tables/tables.py:65 +#: netbox/templates/extras/customfield.html:38 +#: netbox/templates/generic/bulk_import.html:118 msgid "Required" msgstr "Wymagane" -#: extras/forms/bulk_edit.py:48 extras/forms/filtersets.py:75 +#: netbox/extras/forms/bulk_edit.py:48 netbox/extras/forms/filtersets.py:75 msgid "Must be unique" msgstr "Musi być wyjątkowy" -#: extras/forms/bulk_edit.py:61 extras/forms/bulk_import.py:60 -#: extras/forms/filtersets.py:89 extras/models/customfields.py:209 +#: netbox/extras/forms/bulk_edit.py:61 netbox/extras/forms/bulk_import.py:60 +#: netbox/extras/forms/filtersets.py:89 +#: netbox/extras/models/customfields.py:209 msgid "UI visible" msgstr "Widoczny interfejs użytkownika" -#: extras/forms/bulk_edit.py:66 extras/forms/bulk_import.py:66 -#: extras/forms/filtersets.py:94 extras/models/customfields.py:216 +#: netbox/extras/forms/bulk_edit.py:66 netbox/extras/forms/bulk_import.py:66 +#: netbox/extras/forms/filtersets.py:94 +#: netbox/extras/models/customfields.py:216 msgid "UI editable" msgstr "Edytowalny interfejs użytkownika" -#: extras/forms/bulk_edit.py:71 extras/forms/filtersets.py:97 +#: netbox/extras/forms/bulk_edit.py:71 netbox/extras/forms/filtersets.py:97 msgid "Is cloneable" msgstr "Jest klonowalny" -#: extras/forms/bulk_edit.py:76 extras/forms/filtersets.py:104 +#: netbox/extras/forms/bulk_edit.py:76 netbox/extras/forms/filtersets.py:104 msgid "Minimum value" msgstr "Minimalna wartość" -#: extras/forms/bulk_edit.py:80 extras/forms/filtersets.py:108 +#: netbox/extras/forms/bulk_edit.py:80 netbox/extras/forms/filtersets.py:108 msgid "Maximum value" msgstr "Maksymalna wartość" -#: extras/forms/bulk_edit.py:84 extras/forms/filtersets.py:112 +#: netbox/extras/forms/bulk_edit.py:84 netbox/extras/forms/filtersets.py:112 msgid "Validation regex" msgstr "Walidacja regex" -#: extras/forms/bulk_edit.py:91 extras/forms/filtersets.py:46 -#: extras/forms/model_forms.py:76 templates/extras/customfield.html:70 +#: netbox/extras/forms/bulk_edit.py:91 netbox/extras/forms/filtersets.py:46 +#: netbox/extras/forms/model_forms.py:76 +#: netbox/templates/extras/customfield.html:70 msgid "Behavior" msgstr "Zachowanie" -#: extras/forms/bulk_edit.py:128 extras/forms/filtersets.py:149 +#: netbox/extras/forms/bulk_edit.py:128 netbox/extras/forms/filtersets.py:149 msgid "New window" msgstr "Nowe okno" -#: extras/forms/bulk_edit.py:137 +#: netbox/extras/forms/bulk_edit.py:137 msgid "Button class" msgstr "Klasa przycisków" -#: extras/forms/bulk_edit.py:154 extras/forms/filtersets.py:187 -#: extras/models/models.py:409 +#: netbox/extras/forms/bulk_edit.py:154 netbox/extras/forms/filtersets.py:187 +#: netbox/extras/models/models.py:409 msgid "MIME type" msgstr "Typ MIME" -#: extras/forms/bulk_edit.py:159 extras/forms/filtersets.py:190 +#: netbox/extras/forms/bulk_edit.py:159 netbox/extras/forms/filtersets.py:190 msgid "File extension" msgstr "Rozszerzenie pliku" -#: extras/forms/bulk_edit.py:164 extras/forms/filtersets.py:194 +#: netbox/extras/forms/bulk_edit.py:164 netbox/extras/forms/filtersets.py:194 msgid "As attachment" msgstr "Jako załącznik" -#: extras/forms/bulk_edit.py:192 extras/forms/filtersets.py:236 -#: extras/tables/tables.py:256 templates/extras/savedfilter.html:29 +#: netbox/extras/forms/bulk_edit.py:192 netbox/extras/forms/filtersets.py:236 +#: netbox/extras/tables/tables.py:256 +#: netbox/templates/extras/savedfilter.html:29 msgid "Shared" msgstr "Udostępnione" -#: extras/forms/bulk_edit.py:215 extras/forms/filtersets.py:265 -#: extras/models/models.py:174 +#: netbox/extras/forms/bulk_edit.py:215 netbox/extras/forms/filtersets.py:265 +#: netbox/extras/models/models.py:174 msgid "HTTP method" msgstr "Metoda HTTP" -#: extras/forms/bulk_edit.py:219 extras/forms/filtersets.py:259 -#: templates/extras/webhook.html:30 +#: netbox/extras/forms/bulk_edit.py:219 netbox/extras/forms/filtersets.py:259 +#: netbox/templates/extras/webhook.html:30 msgid "Payload URL" msgstr "Adres URL ładunku" -#: extras/forms/bulk_edit.py:224 extras/models/models.py:214 +#: netbox/extras/forms/bulk_edit.py:224 netbox/extras/models/models.py:214 msgid "SSL verification" msgstr "Weryfikacja SSL" -#: extras/forms/bulk_edit.py:227 templates/extras/webhook.html:38 +#: netbox/extras/forms/bulk_edit.py:227 +#: netbox/templates/extras/webhook.html:38 msgid "Secret" msgstr "Tajemnica" -#: extras/forms/bulk_edit.py:232 +#: netbox/extras/forms/bulk_edit.py:232 msgid "CA file path" msgstr "Ścieżka pliku CA" -#: extras/forms/bulk_edit.py:253 extras/forms/bulk_import.py:192 -#: extras/forms/model_forms.py:377 +#: netbox/extras/forms/bulk_edit.py:253 netbox/extras/forms/bulk_import.py:192 +#: netbox/extras/forms/model_forms.py:377 msgid "Event types" msgstr "Rodzaje zdarzeń" -#: extras/forms/bulk_edit.py:293 +#: netbox/extras/forms/bulk_edit.py:293 msgid "Is active" msgstr "Jest aktywny" -#: extras/forms/bulk_import.py:37 extras/forms/bulk_import.py:118 -#: extras/forms/bulk_import.py:139 extras/forms/bulk_import.py:162 -#: extras/forms/bulk_import.py:186 extras/forms/filtersets.py:137 -#: extras/forms/filtersets.py:224 extras/forms/model_forms.py:47 -#: extras/forms/model_forms.py:205 extras/forms/model_forms.py:237 -#: extras/forms/model_forms.py:278 extras/forms/model_forms.py:372 -#: extras/forms/model_forms.py:489 users/forms/model_forms.py:276 +#: netbox/extras/forms/bulk_import.py:37 +#: netbox/extras/forms/bulk_import.py:118 +#: 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/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/users/forms/model_forms.py:276 msgid "Object types" msgstr "Typy obiektów" -#: extras/forms/bulk_import.py:39 extras/forms/bulk_import.py:120 -#: extras/forms/bulk_import.py:141 extras/forms/bulk_import.py:164 -#: extras/forms/bulk_import.py:188 tenancy/forms/bulk_import.py:96 +#: netbox/extras/forms/bulk_import.py:39 +#: netbox/extras/forms/bulk_import.py:120 +#: netbox/extras/forms/bulk_import.py:141 +#: netbox/extras/forms/bulk_import.py:164 +#: netbox/extras/forms/bulk_import.py:188 +#: netbox/tenancy/forms/bulk_import.py:96 msgid "One or more assigned object types" msgstr "Jeden lub więcej przypisanych typów obiektów" -#: extras/forms/bulk_import.py:44 +#: netbox/extras/forms/bulk_import.py:44 msgid "Field data type (e.g. text, integer, etc.)" msgstr "Typ danych pola (np. tekst, liczba całkowita itp.)" -#: extras/forms/bulk_import.py:47 extras/forms/filtersets.py:208 -#: extras/forms/filtersets.py:281 extras/forms/model_forms.py:304 -#: extras/forms/model_forms.py:341 tenancy/forms/filtersets.py:92 +#: 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/tenancy/forms/filtersets.py:92 msgid "Object type" msgstr "Typ obiektu" -#: extras/forms/bulk_import.py:50 +#: netbox/extras/forms/bulk_import.py:50 msgid "Object type (for object or multi-object fields)" msgstr "Typ obiektu (dla pól obiektu lub wielu obiektów)" -#: extras/forms/bulk_import.py:53 extras/forms/filtersets.py:84 +#: netbox/extras/forms/bulk_import.py:53 netbox/extras/forms/filtersets.py:84 msgid "Choice set" msgstr "Zestaw do wyboru" -#: extras/forms/bulk_import.py:57 +#: netbox/extras/forms/bulk_import.py:57 msgid "Choice set (for selection fields)" msgstr "Zestaw wyboru (dla pól wyboru)" -#: extras/forms/bulk_import.py:63 +#: netbox/extras/forms/bulk_import.py:63 msgid "Whether the custom field is displayed in the UI" msgstr "Czy pole niestandardowe jest wyświetlane w interfejsie użytkownika" -#: extras/forms/bulk_import.py:69 +#: netbox/extras/forms/bulk_import.py:69 msgid "Whether the custom field is editable in the UI" msgstr "Czy pole niestandardowe można edytować w interfejsie użytkownika" -#: extras/forms/bulk_import.py:85 +#: netbox/extras/forms/bulk_import.py:85 msgid "The base set of predefined choices to use (if any)" msgstr "Podstawowy zestaw predefiniowanych opcji do użycia (jeśli istnieje)" -#: extras/forms/bulk_import.py:91 +#: netbox/extras/forms/bulk_import.py:91 msgid "" "Quoted string of comma-separated field choices with optional labels " "separated by colon: \"choice1:First Choice,choice2:Second Choice\"" @@ -7209,185 +7771,201 @@ msgstr "" "Cytowany ciąg opcji pól oddzielonych przecinkami z opcjonalnymi etykietami " "oddzielonymi dwukropkiem: „Choice1:First Choice, Choice2:Second Choice”" -#: extras/forms/bulk_import.py:123 extras/models/models.py:323 +#: netbox/extras/forms/bulk_import.py:123 netbox/extras/models/models.py:323 msgid "button class" msgstr "klasa przycisków" -#: extras/forms/bulk_import.py:126 extras/models/models.py:327 +#: netbox/extras/forms/bulk_import.py:126 netbox/extras/models/models.py:327 msgid "" "The class of the first link in a group will be used for the dropdown button" msgstr "" "Klasa pierwszego łącza w grupie zostanie użyta dla rozwijanego przycisku" -#: extras/forms/bulk_import.py:193 +#: netbox/extras/forms/bulk_import.py:193 msgid "The event type(s) which will trigger this rule" msgstr "Typy zdarzeń, które wyzwalają tę regułę" -#: extras/forms/bulk_import.py:196 +#: netbox/extras/forms/bulk_import.py:196 msgid "Action object" msgstr "Obiekt akcji" -#: extras/forms/bulk_import.py:198 +#: netbox/extras/forms/bulk_import.py:198 msgid "Webhook name or script as dotted path module.Class" msgstr "Nazwa lub skrypt Webhook jako ścieżka kropkowana module.Class" -#: extras/forms/bulk_import.py:219 +#: netbox/extras/forms/bulk_import.py:219 #, python-brace-format msgid "Webhook {name} not found" msgstr "Hook internetowy {name} nie znaleziono" -#: extras/forms/bulk_import.py:228 +#: netbox/extras/forms/bulk_import.py:228 #, python-brace-format msgid "Script {name} not found" msgstr "Skrypt {name} nie znaleziono" -#: extras/forms/bulk_import.py:244 +#: netbox/extras/forms/bulk_import.py:244 msgid "Assigned object type" msgstr "Przypisany typ obiektu" -#: extras/forms/bulk_import.py:249 +#: netbox/extras/forms/bulk_import.py:249 msgid "The classification of entry" msgstr "Klasyfikacja wpisu" -#: extras/forms/bulk_import.py:261 extras/forms/model_forms.py:320 -#: netbox/navigation/menu.py:390 templates/extras/notificationgroup.html:41 -#: templates/users/group.html:29 users/forms/model_forms.py:236 -#: users/forms/model_forms.py:248 users/forms/model_forms.py:300 -#: users/tables.py:102 +#: netbox/extras/forms/bulk_import.py:261 +#: netbox/extras/forms/model_forms.py:320 netbox/netbox/navigation/menu.py:390 +#: 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 +#: netbox/users/tables.py:102 msgid "Users" msgstr "Użytkownicy" -#: extras/forms/bulk_import.py:265 +#: netbox/extras/forms/bulk_import.py:265 msgid "User names separated by commas, encased with double quotes" msgstr "" "Nazwy użytkowników oddzielone przecinkami, otoczone podwójnymi cudzysłowami" -#: extras/forms/bulk_import.py:268 extras/forms/model_forms.py:315 -#: netbox/navigation/menu.py:410 templates/extras/notificationgroup.html:31 -#: users/forms/model_forms.py:181 users/forms/model_forms.py:193 -#: users/forms/model_forms.py:305 users/tables.py:35 users/tables.py:106 +#: netbox/extras/forms/bulk_import.py:268 +#: netbox/extras/forms/model_forms.py:315 netbox/netbox/navigation/menu.py:410 +#: 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 +#: netbox/users/tables.py:106 msgid "Groups" msgstr "Grupy" -#: extras/forms/bulk_import.py:272 +#: netbox/extras/forms/bulk_import.py:272 msgid "Group names separated by commas, encased with double quotes" msgstr "Nazwy grup oddzielone przecinkami, otoczone podwójnymi cudzysłowami" -#: extras/forms/filtersets.py:52 extras/forms/model_forms.py:56 +#: netbox/extras/forms/filtersets.py:52 netbox/extras/forms/model_forms.py:56 msgid "Related object type" msgstr "Powiązany typ obiektu" -#: extras/forms/filtersets.py:57 +#: netbox/extras/forms/filtersets.py:57 msgid "Field type" msgstr "Typ pola" -#: extras/forms/filtersets.py:120 extras/forms/model_forms.py:157 -#: extras/tables/tables.py:91 templates/generic/bulk_import.html:154 +#: netbox/extras/forms/filtersets.py:120 +#: netbox/extras/forms/model_forms.py:157 netbox/extras/tables/tables.py:91 +#: netbox/templates/generic/bulk_import.html:154 msgid "Choices" msgstr "Wybory" -#: extras/forms/filtersets.py:164 extras/forms/filtersets.py:319 -#: extras/forms/filtersets.py:408 extras/forms/model_forms.py:572 -#: templates/core/job.html:96 templates/extras/eventrule.html:84 +#: 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/templates/extras/eventrule.html:84 msgid "Data" msgstr "Dane" -#: extras/forms/filtersets.py:175 extras/forms/filtersets.py:333 -#: extras/forms/filtersets.py:418 netbox/choices.py:130 -#: utilities/forms/bulk_import.py:26 +#: netbox/extras/forms/filtersets.py:175 netbox/extras/forms/filtersets.py:333 +#: netbox/extras/forms/filtersets.py:418 netbox/netbox/choices.py:130 +#: netbox/utilities/forms/bulk_import.py:26 msgid "Data file" msgstr "Plik danych" -#: extras/forms/filtersets.py:183 +#: netbox/extras/forms/filtersets.py:183 msgid "Content types" msgstr "Typy treści" -#: extras/forms/filtersets.py:255 extras/models/models.py:179 +#: netbox/extras/forms/filtersets.py:255 netbox/extras/models/models.py:179 msgid "HTTP content type" msgstr "Typ zawartości HTTP" -#: extras/forms/filtersets.py:286 +#: netbox/extras/forms/filtersets.py:286 msgid "Event type" msgstr "Typ zdarzenia" -#: extras/forms/filtersets.py:291 +#: netbox/extras/forms/filtersets.py:291 msgid "Action type" msgstr "Rodzaj akcji" -#: extras/forms/filtersets.py:307 +#: netbox/extras/forms/filtersets.py:307 msgid "Tagged object type" msgstr "Typ obiektu oznaczonego" -#: extras/forms/filtersets.py:312 +#: netbox/extras/forms/filtersets.py:312 msgid "Allowed object type" msgstr "Dozwolony typ obiektu" -#: extras/forms/filtersets.py:341 extras/forms/model_forms.py:507 -#: netbox/navigation/menu.py:18 +#: netbox/extras/forms/filtersets.py:341 +#: netbox/extras/forms/model_forms.py:507 netbox/netbox/navigation/menu.py:18 msgid "Regions" msgstr "Regiony" -#: extras/forms/filtersets.py:346 extras/forms/model_forms.py:512 +#: netbox/extras/forms/filtersets.py:346 +#: netbox/extras/forms/model_forms.py:512 msgid "Site groups" msgstr "Grupy witryn" -#: extras/forms/filtersets.py:356 extras/forms/model_forms.py:522 -#: netbox/navigation/menu.py:20 templates/dcim/site.html:127 +#: netbox/extras/forms/filtersets.py:356 +#: netbox/extras/forms/model_forms.py:522 netbox/netbox/navigation/menu.py:20 +#: netbox/templates/dcim/site.html:127 msgid "Locations" msgstr "Lokalizacje" -#: extras/forms/filtersets.py:361 extras/forms/model_forms.py:527 +#: netbox/extras/forms/filtersets.py:361 +#: netbox/extras/forms/model_forms.py:527 msgid "Device types" msgstr "Rodzaje urządzeń" -#: extras/forms/filtersets.py:366 extras/forms/model_forms.py:532 +#: netbox/extras/forms/filtersets.py:366 +#: netbox/extras/forms/model_forms.py:532 msgid "Roles" msgstr "Role" -#: extras/forms/filtersets.py:376 extras/forms/model_forms.py:542 +#: netbox/extras/forms/filtersets.py:376 +#: netbox/extras/forms/model_forms.py:542 msgid "Cluster types" msgstr "Typy klastrów" -#: extras/forms/filtersets.py:381 extras/forms/model_forms.py:547 +#: netbox/extras/forms/filtersets.py:381 +#: netbox/extras/forms/model_forms.py:547 msgid "Cluster groups" msgstr "Grupy klastrów" -#: extras/forms/filtersets.py:386 extras/forms/model_forms.py:552 -#: netbox/navigation/menu.py:255 netbox/navigation/menu.py:257 -#: templates/virtualization/clustertype.html:30 -#: virtualization/tables/clusters.py:23 virtualization/tables/clusters.py:45 +#: 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/templates/virtualization/clustertype.html:30 +#: netbox/virtualization/tables/clusters.py:23 +#: netbox/virtualization/tables/clusters.py:45 msgid "Clusters" msgstr "Klastry" -#: extras/forms/filtersets.py:391 extras/forms/model_forms.py:557 +#: netbox/extras/forms/filtersets.py:391 +#: netbox/extras/forms/model_forms.py:557 msgid "Tenant groups" msgstr "Grupy najemców" -#: extras/forms/model_forms.py:49 +#: netbox/extras/forms/model_forms.py:49 msgid "The type(s) of object that have this custom field" msgstr "Typ (y) obiektu, który ma to pole niestandardowe" -#: extras/forms/model_forms.py:52 +#: netbox/extras/forms/model_forms.py:52 msgid "Default value" msgstr "Wartość domyślna" -#: extras/forms/model_forms.py:58 +#: netbox/extras/forms/model_forms.py:58 msgid "Type of the related object (for object/multi-object fields only)" msgstr "Typ powiązanego obiektu (tylko dla pól obiektu/wielu obiektów)" -#: extras/forms/model_forms.py:61 templates/extras/customfield.html:60 +#: netbox/extras/forms/model_forms.py:61 +#: netbox/templates/extras/customfield.html:60 msgid "Related object filter" msgstr "Powiązany filtr obiektów" -#: extras/forms/model_forms.py:63 +#: netbox/extras/forms/model_forms.py:63 msgid "Specify query parameters as a JSON object." msgstr "Określ parametry zapytania jako obiekt JSON." -#: extras/forms/model_forms.py:73 templates/extras/customfield.html:10 +#: netbox/extras/forms/model_forms.py:73 +#: netbox/templates/extras/customfield.html:10 msgid "Custom Field" msgstr "Pole niestandardowe" -#: extras/forms/model_forms.py:85 +#: netbox/extras/forms/model_forms.py:85 msgid "" "The type of data stored in this field. For object/multi-object fields, " "select the related object type below." @@ -7395,7 +7973,7 @@ msgstr "" "Rodzaj danych przechowywanych w tym polu. W przypadku pól obiektu/wielu " "obiektów wybierz powiązany typ obiektu poniżej." -#: extras/forms/model_forms.py:88 +#: netbox/extras/forms/model_forms.py:88 msgid "" "This will be displayed as help text for the form field. Markdown is " "supported." @@ -7403,11 +7981,11 @@ msgstr "" "Zostanie wyświetlony jako tekst pomocy dla pola formularza. Markdown jest " "obsługiwany." -#: extras/forms/model_forms.py:143 +#: netbox/extras/forms/model_forms.py:143 msgid "Related Object" msgstr "Powiązany obiekt" -#: extras/forms/model_forms.py:169 +#: netbox/extras/forms/model_forms.py:169 msgid "" "Enter one choice per line. An optional label may be specified for each " "choice by appending it with a colon. Example:" @@ -7415,15 +7993,16 @@ msgstr "" "Wprowadź jeden wybór na linię. Opcjonalną etykietę można określić dla " "każdego wyboru, dodając ją dwukropkiem. Przykład:" -#: extras/forms/model_forms.py:212 templates/extras/customlink.html:10 +#: netbox/extras/forms/model_forms.py:212 +#: netbox/templates/extras/customlink.html:10 msgid "Custom Link" msgstr "Niestandardowe łącze" -#: extras/forms/model_forms.py:214 +#: netbox/extras/forms/model_forms.py:214 msgid "Templates" msgstr "Szablony" -#: extras/forms/model_forms.py:226 +#: netbox/extras/forms/model_forms.py:226 #, python-brace-format msgid "" "Jinja2 template code for the link text. Reference the object as {example}. " @@ -7432,60 +8011,66 @@ msgstr "" "Kod szablonu Jinja2 dla tekstu łącza. Odwołaj obiekt jako {example}. Linki " "renderowane jako pusty tekst nie będą wyświetlane." -#: extras/forms/model_forms.py:230 +#: netbox/extras/forms/model_forms.py:230 #, 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}." -#: extras/forms/model_forms.py:241 extras/forms/model_forms.py:624 +#: netbox/extras/forms/model_forms.py:241 +#: netbox/extras/forms/model_forms.py:624 msgid "Template code" msgstr "Kod szablonu" -#: extras/forms/model_forms.py:247 templates/extras/exporttemplate.html:12 +#: netbox/extras/forms/model_forms.py:247 +#: netbox/templates/extras/exporttemplate.html:12 msgid "Export Template" msgstr "Szablon eksportu" -#: extras/forms/model_forms.py:249 +#: netbox/extras/forms/model_forms.py:249 msgid "Rendering" msgstr "Renderowanie" -#: extras/forms/model_forms.py:263 extras/forms/model_forms.py:649 +#: netbox/extras/forms/model_forms.py:263 +#: netbox/extras/forms/model_forms.py:649 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." -#: extras/forms/model_forms.py:270 extras/forms/model_forms.py:656 +#: netbox/extras/forms/model_forms.py:270 +#: netbox/extras/forms/model_forms.py:656 msgid "Must specify either local content or a data file" msgstr "Musi określić zawartość lokalną lub plik danych" -#: extras/forms/model_forms.py:284 netbox/forms/mixins.py:70 -#: templates/extras/savedfilter.html:10 +#: netbox/extras/forms/model_forms.py:284 netbox/netbox/forms/mixins.py:70 +#: netbox/templates/extras/savedfilter.html:10 msgid "Saved Filter" msgstr "Zapisany filtr" -#: extras/forms/model_forms.py:334 +#: netbox/extras/forms/model_forms.py:334 msgid "A notification group specify at least one user or group." msgstr "Grupa powiadomień określa co najmniej jednego użytkownika lub grupę." -#: extras/forms/model_forms.py:356 templates/extras/webhook.html:23 +#: netbox/extras/forms/model_forms.py:356 +#: netbox/templates/extras/webhook.html:23 msgid "HTTP Request" msgstr "Żądanie HTTP" -#: extras/forms/model_forms.py:358 templates/extras/webhook.html:44 +#: netbox/extras/forms/model_forms.py:358 +#: netbox/templates/extras/webhook.html:44 msgid "SSL" msgstr "SSL" -#: extras/forms/model_forms.py:380 +#: netbox/extras/forms/model_forms.py:380 msgid "Action choice" msgstr "Wybór działania" -#: extras/forms/model_forms.py:385 +#: netbox/extras/forms/model_forms.py:385 msgid "Enter conditions in JSON format." msgstr "Wprowadź warunki w JSON format." -#: extras/forms/model_forms.py:389 +#: netbox/extras/forms/model_forms.py:389 msgid "" "Enter parameters to pass to the action in JSON format." @@ -7493,110 +8078,112 @@ msgstr "" "Wprowadź parametry, które mają zostać przekazane do akcji w JSON format." -#: extras/forms/model_forms.py:394 templates/extras/eventrule.html:10 +#: netbox/extras/forms/model_forms.py:394 +#: netbox/templates/extras/eventrule.html:10 msgid "Event Rule" msgstr "Reguła zdarzenia" -#: extras/forms/model_forms.py:395 +#: netbox/extras/forms/model_forms.py:395 msgid "Triggers" msgstr "Wyzwalacze" -#: extras/forms/model_forms.py:442 +#: netbox/extras/forms/model_forms.py:442 msgid "Notification group" msgstr "Grupa powiadomień" -#: extras/forms/model_forms.py:562 netbox/navigation/menu.py:26 -#: tenancy/tables/tenants.py:22 +#: netbox/extras/forms/model_forms.py:562 netbox/netbox/navigation/menu.py:26 +#: netbox/tenancy/tables/tenants.py:22 msgid "Tenants" msgstr "Najemcy" -#: extras/forms/model_forms.py:606 +#: netbox/extras/forms/model_forms.py:606 msgid "Data is populated from the remote source selected below." msgstr "Dane są wypełniane ze zdalnego źródła wybranego poniżej." -#: extras/forms/model_forms.py:612 +#: netbox/extras/forms/model_forms.py:612 msgid "Must specify either local data or a data file" msgstr "Musi określić dane lokalne lub plik danych" -#: extras/forms/model_forms.py:631 templates/core/datafile.html:55 +#: netbox/extras/forms/model_forms.py:631 +#: netbox/templates/core/datafile.html:55 msgid "Content" msgstr "Zawartość" -#: extras/forms/reports.py:17 extras/forms/scripts.py:23 +#: netbox/extras/forms/reports.py:17 netbox/extras/forms/scripts.py:23 msgid "Schedule at" msgstr "Zaplanuj pod adresem" -#: extras/forms/reports.py:18 +#: netbox/extras/forms/reports.py:18 msgid "Schedule execution of report to a set time" msgstr "Zaplanuj wykonanie raportu na określony czas" -#: extras/forms/reports.py:23 extras/forms/scripts.py:29 +#: netbox/extras/forms/reports.py:23 netbox/extras/forms/scripts.py:29 msgid "Recurs every" msgstr "Powtarza się co" -#: extras/forms/reports.py:27 +#: netbox/extras/forms/reports.py:27 msgid "Interval at which this report is re-run (in minutes)" msgstr "Przedział, w którym raport jest ponownie uruchamiany (w minutach)" -#: extras/forms/reports.py:35 extras/forms/scripts.py:41 +#: netbox/extras/forms/reports.py:35 netbox/extras/forms/scripts.py:41 #, python-brace-format msgid " (current time: {now})" msgstr " (aktualny czas: {now})" -#: extras/forms/reports.py:45 extras/forms/scripts.py:51 +#: netbox/extras/forms/reports.py:45 netbox/extras/forms/scripts.py:51 msgid "Scheduled time must be in the future." msgstr "Zaplanowany czas musi być w przyszłości." -#: extras/forms/scripts.py:17 +#: netbox/extras/forms/scripts.py:17 msgid "Commit changes" msgstr "Zatwierdź zmiany" -#: extras/forms/scripts.py:18 +#: netbox/extras/forms/scripts.py:18 msgid "Commit changes to the database (uncheck for a dry-run)" msgstr "" "Zatwierdź zmiany w bazie danych (usuń zaznaczenie dla suchego uruchomienia)" -#: extras/forms/scripts.py:24 +#: netbox/extras/forms/scripts.py:24 msgid "Schedule execution of script to a set time" msgstr "Zaplanuj wykonanie skryptu na określony czas" -#: extras/forms/scripts.py:33 +#: netbox/extras/forms/scripts.py:33 msgid "Interval at which this script is re-run (in minutes)" msgstr "Interwał, w którym ten skrypt jest ponownie uruchamiany (w minutach)" -#: extras/jobs.py:49 +#: netbox/extras/jobs.py:47 msgid "Database changes have been reverted automatically." msgstr "Zmiany w bazie danych zostały wycofane automatycznie." -#: extras/jobs.py:55 +#: netbox/extras/jobs.py:53 msgid "Script aborted with error: " msgstr "Skrypt przerwany z błędem: " -#: extras/jobs.py:65 +#: netbox/extras/jobs.py:63 msgid "An exception occurred: " msgstr "Wystąpił wyjątek: " -#: extras/jobs.py:70 +#: netbox/extras/jobs.py:68 msgid "Database changes have been reverted due to error." msgstr "Zmiany bazy danych zostały cofnięte z powodu błędu." -#: extras/management/commands/reindex.py:66 +#: netbox/extras/management/commands/reindex.py:66 msgid "No indexers found!" msgstr "Nie znaleziono indeksatorów!" -#: extras/models/configs.py:130 +#: netbox/extras/models/configs.py:130 msgid "config context" msgstr "Kontekst konfiguracji" -#: extras/models/configs.py:131 +#: netbox/extras/models/configs.py:131 msgid "config contexts" msgstr "Konteksty konfiguracji" -#: extras/models/configs.py:149 extras/models/configs.py:205 +#: netbox/extras/models/configs.py:149 netbox/extras/models/configs.py:205 msgid "JSON data must be in object form. Example:" msgstr "Dane JSON muszą być w formie obiektu. Przykład:" -#: extras/models/configs.py:169 +#: netbox/extras/models/configs.py:169 msgid "" "Local config context data takes precedence over source contexts in the final" " rendered config context" @@ -7604,19 +8191,19 @@ msgstr "" "Lokalne dane kontekstowe konfiguracji mają pierwszeństwo przed kontekstami " "źródłowymi w ostatecznym renderowanym kontekście konfiguracji" -#: extras/models/configs.py:224 +#: netbox/extras/models/configs.py:224 msgid "template code" msgstr "kod szablonu" -#: extras/models/configs.py:225 +#: netbox/extras/models/configs.py:225 msgid "Jinja2 template code." msgstr "Kod szablonu Jinja2." -#: extras/models/configs.py:228 +#: netbox/extras/models/configs.py:228 msgid "environment parameters" msgstr "parametry środowiska" -#: extras/models/configs.py:233 +#: netbox/extras/models/configs.py:233 msgid "" "Any additional" @@ -7626,40 +8213,40 @@ msgstr "" "href=\"https://jinja.palletsprojects.com/en/3.1.x/api/#jinja2.Environment\">dodatkowe" " parametry do przejścia podczas konstruowania środowiska Jinja2." -#: extras/models/configs.py:240 +#: netbox/extras/models/configs.py:240 msgid "config template" msgstr "szablon konfiguracji" -#: extras/models/configs.py:241 +#: netbox/extras/models/configs.py:241 msgid "config templates" msgstr "szablony konfiguracji" -#: extras/models/customfields.py:75 +#: netbox/extras/models/customfields.py:75 msgid "The object(s) to which this field applies." msgstr "Obiekt (-y), do którego dotyczy to pole." -#: extras/models/customfields.py:82 +#: netbox/extras/models/customfields.py:82 msgid "The type of data this custom field holds" msgstr "Typ danych przechowywanych w tym polu niestandardowym" -#: extras/models/customfields.py:89 +#: netbox/extras/models/customfields.py:89 msgid "The type of NetBox object this field maps to (for object fields)" msgstr "Typ obiektu NetBox, do którego mapuje to pole (dla pól obiektowych)" -#: extras/models/customfields.py:95 +#: netbox/extras/models/customfields.py:95 msgid "Internal field name" msgstr "Nazwa pola wewnętrznego" -#: extras/models/customfields.py:99 +#: netbox/extras/models/customfields.py:99 msgid "Only alphanumeric characters and underscores are allowed." msgstr "Dozwolone są tylko znaki alfanumeryczne i podkreślenia." -#: extras/models/customfields.py:104 +#: netbox/extras/models/customfields.py:104 msgid "Double underscores are not permitted in custom field names." msgstr "" "Podwójne podkreślenia nie są dozwolone w niestandardowych nazwach pól." -#: extras/models/customfields.py:115 +#: netbox/extras/models/customfields.py:115 msgid "" "Name of the field as displayed to users (if not provided, 'the field's name " "will be used)" @@ -7667,19 +8254,19 @@ msgstr "" "Nazwa pola wyświetlana użytkownikom (jeśli nie zostanie podana, zostanie " "użyta nazwa pola)" -#: extras/models/customfields.py:119 extras/models/models.py:317 +#: netbox/extras/models/customfields.py:119 netbox/extras/models/models.py:317 msgid "group name" msgstr "nazwa grupy" -#: extras/models/customfields.py:122 +#: netbox/extras/models/customfields.py:122 msgid "Custom fields within the same group will be displayed together" msgstr "Pola niestandardowe w tej samej grupie będą wyświetlane razem" -#: extras/models/customfields.py:130 +#: netbox/extras/models/customfields.py:130 msgid "required" msgstr "wymagane" -#: extras/models/customfields.py:132 +#: netbox/extras/models/customfields.py:132 msgid "" "This field is required when creating new objects or editing an existing " "object." @@ -7687,19 +8274,19 @@ msgstr "" "To pole jest wymagane podczas tworzenia nowych obiektów lub edycji " "istniejącego obiektu." -#: extras/models/customfields.py:135 +#: netbox/extras/models/customfields.py:135 msgid "must be unique" msgstr "musi być wyjątkowy" -#: extras/models/customfields.py:137 +#: netbox/extras/models/customfields.py:137 msgid "The value of this field must be unique for the assigned object" msgstr "Wartość tego pola musi być niepowtarzalna dla przypisanego obiektu" -#: extras/models/customfields.py:140 +#: netbox/extras/models/customfields.py:140 msgid "search weight" msgstr "waga wyszukiwania" -#: extras/models/customfields.py:143 +#: netbox/extras/models/customfields.py:143 msgid "" "Weighting for search. Lower values are considered more important. Fields " "with a search weight of zero will be ignored." @@ -7707,11 +8294,11 @@ msgstr "" "Ważenie do wyszukiwania. Niższe wartości są uważane za ważniejsze. Pola o " "wadze wyszukiwania równej zero zostaną zignorowane." -#: extras/models/customfields.py:148 +#: netbox/extras/models/customfields.py:148 msgid "filter logic" msgstr "logika filtra" -#: extras/models/customfields.py:152 +#: netbox/extras/models/customfields.py:152 msgid "" "Loose matches any instance of a given string; exact matches the entire " "field." @@ -7719,11 +8306,11 @@ msgstr "" "Luźna pasuje do dowolnego wystąpienia danego ciągu; dokładnie pasuje do " "całego pola." -#: extras/models/customfields.py:155 +#: netbox/extras/models/customfields.py:155 msgid "default" msgstr "domyślny" -#: extras/models/customfields.py:159 +#: netbox/extras/models/customfields.py:159 msgid "" "Default value for the field (must be a JSON value). Encapsulate strings with" " double quotes (e.g. \"Foo\")." @@ -7731,7 +8318,7 @@ msgstr "" "Wartość domyślna dla pola (musi być wartością JSON). Enkapsuluj ciągi z " "podwójnymi cudzysłowami (np. „Foo”)." -#: extras/models/customfields.py:166 +#: netbox/extras/models/customfields.py:166 msgid "" "Filter the object selection choices using a query_params dict (must be a " "JSON value).Encapsulate strings with double quotes (e.g. \"Foo\")." @@ -7740,35 +8327,35 @@ msgstr "" "wartością JSON). Enkapsuluj ciągi znaków z podwójnymi cudzysłowami (np. " "„Foo”)." -#: extras/models/customfields.py:172 +#: netbox/extras/models/customfields.py:172 msgid "display weight" msgstr "waga wyświetlacza" -#: extras/models/customfields.py:173 +#: netbox/extras/models/customfields.py:173 msgid "Fields with higher weights appear lower in a form." msgstr "Pola o większej wadze wydają się niższe w formularzu." -#: extras/models/customfields.py:178 +#: netbox/extras/models/customfields.py:178 msgid "minimum value" msgstr "wartość minimalna" -#: extras/models/customfields.py:179 +#: netbox/extras/models/customfields.py:179 msgid "Minimum allowed value (for numeric fields)" msgstr "Minimalna dopuszczalna wartość (dla pól numerycznych)" -#: extras/models/customfields.py:184 +#: netbox/extras/models/customfields.py:184 msgid "maximum value" msgstr "maksymalna wartość" -#: extras/models/customfields.py:185 +#: netbox/extras/models/customfields.py:185 msgid "Maximum allowed value (for numeric fields)" msgstr "Maksymalna dopuszczalna wartość (dla pól numerycznych)" -#: extras/models/customfields.py:191 +#: netbox/extras/models/customfields.py:191 msgid "validation regex" msgstr "walidacja regex" -#: extras/models/customfields.py:193 +#: netbox/extras/models/customfields.py:193 #, python-brace-format msgid "" "Regular expression to enforce on text field values. Use ^ and $ to force " @@ -7779,191 +8366,193 @@ msgstr "" "wymusić dopasowanie całego ciągu. Na przykład, ^ [A-Z]{3}$ " "ograniczy wartości do dokładnie trzech wielkich liter." -#: extras/models/customfields.py:201 +#: netbox/extras/models/customfields.py:201 msgid "choice set" msgstr "zestaw wyboru" -#: extras/models/customfields.py:210 +#: netbox/extras/models/customfields.py:210 msgid "Specifies whether the custom field is displayed in the UI" msgstr "" "Określa, czy pole niestandardowe jest wyświetlane w interfejsie użytkownika" -#: extras/models/customfields.py:217 +#: netbox/extras/models/customfields.py:217 msgid "Specifies whether the custom field value can be edited in the UI" msgstr "" "Określa, czy wartość pola niestandardowego może być edytowana w interfejsie " "użytkownika" -#: extras/models/customfields.py:221 +#: netbox/extras/models/customfields.py:221 msgid "is cloneable" msgstr "jest klonowalny" -#: extras/models/customfields.py:222 +#: netbox/extras/models/customfields.py:222 msgid "Replicate this value when cloning objects" msgstr "Powtórz tę wartość podczas klonowania obiektów" -#: extras/models/customfields.py:239 +#: netbox/extras/models/customfields.py:239 msgid "custom field" msgstr "pole niestandardowe" -#: extras/models/customfields.py:240 +#: netbox/extras/models/customfields.py:240 msgid "custom fields" msgstr "pola niestandardowe" -#: extras/models/customfields.py:329 +#: netbox/extras/models/customfields.py:329 #, python-brace-format msgid "Invalid default value \"{value}\": {error}" msgstr "Nieprawidłowa wartość domyślna”{value}„: {error}" -#: extras/models/customfields.py:336 +#: netbox/extras/models/customfields.py:336 msgid "A minimum value may be set only for numeric fields" msgstr "Wartość minimalna może być ustawiona tylko dla pól numerycznych" -#: extras/models/customfields.py:338 +#: netbox/extras/models/customfields.py:338 msgid "A maximum value may be set only for numeric fields" msgstr "Maksymalna wartość może być ustawiona tylko dla pól liczbowych" -#: extras/models/customfields.py:348 +#: netbox/extras/models/customfields.py:348 msgid "" "Regular expression validation is supported only for text and URL fields" msgstr "" "Walidacja wyrażeń regularnych jest obsługiwana tylko dla pól tekstowych i " "URL" -#: extras/models/customfields.py:354 +#: netbox/extras/models/customfields.py:354 msgid "Uniqueness cannot be enforced for boolean fields" msgstr "Unikalność nie może być egzekwowana dla pól logicznych" -#: extras/models/customfields.py:364 +#: netbox/extras/models/customfields.py:364 msgid "Selection fields must specify a set of choices." msgstr "Pola wyboru muszą określać zestaw opcji." -#: extras/models/customfields.py:368 +#: netbox/extras/models/customfields.py:368 msgid "Choices may be set only on selection fields." msgstr "Opcje można ustawić tylko w polach wyboru." -#: extras/models/customfields.py:375 +#: netbox/extras/models/customfields.py:375 msgid "Object fields must define an object type." msgstr "Pola obiektu muszą definiować typ obiektu." -#: extras/models/customfields.py:379 +#: netbox/extras/models/customfields.py:379 #, python-brace-format msgid "{type} fields may not define an object type." msgstr "{type} pola mogą nie definiować typu obiektu." -#: extras/models/customfields.py:386 +#: netbox/extras/models/customfields.py:386 msgid "A related object filter can be defined only for object fields." msgstr "Powiązany filtr obiektów można zdefiniować tylko dla pól obiektu." -#: extras/models/customfields.py:390 +#: netbox/extras/models/customfields.py:390 msgid "Filter must be defined as a dictionary mapping attributes to values." msgstr "" "Filtr musi być zdefiniowany jako słownik mapowania atrybutów do wartości." -#: extras/models/customfields.py:469 +#: netbox/extras/models/customfields.py:469 msgid "True" msgstr "Prawda" -#: extras/models/customfields.py:470 +#: netbox/extras/models/customfields.py:470 msgid "False" msgstr "Fałszywe" -#: extras/models/customfields.py:560 +#: netbox/extras/models/customfields.py:560 #, python-brace-format msgid "Values must match this regex: {regex}" msgstr "Wartości muszą być zgodne z tym regex: {regex}" -#: extras/models/customfields.py:654 +#: netbox/extras/models/customfields.py:654 msgid "Value must be a string." msgstr "Wartość musi być ciągiem." -#: extras/models/customfields.py:656 +#: netbox/extras/models/customfields.py:656 #, python-brace-format msgid "Value must match regex '{regex}'" msgstr "Wartość musi być zgodna z regex '{regex}”" -#: extras/models/customfields.py:661 +#: netbox/extras/models/customfields.py:661 msgid "Value must be an integer." msgstr "Wartość musi być liczbą całkowitą." -#: extras/models/customfields.py:664 extras/models/customfields.py:679 +#: netbox/extras/models/customfields.py:664 +#: netbox/extras/models/customfields.py:679 #, python-brace-format msgid "Value must be at least {minimum}" msgstr "Wartość musi być co najmniej {minimum}" -#: extras/models/customfields.py:668 extras/models/customfields.py:683 +#: netbox/extras/models/customfields.py:668 +#: netbox/extras/models/customfields.py:683 #, python-brace-format msgid "Value must not exceed {maximum}" msgstr "Wartość nie może przekraczać {maximum}" -#: extras/models/customfields.py:676 +#: netbox/extras/models/customfields.py:676 msgid "Value must be a decimal." msgstr "Wartość musi być dziesiętna." -#: extras/models/customfields.py:688 +#: netbox/extras/models/customfields.py:688 msgid "Value must be true or false." msgstr "Wartość musi być prawdziwa lub fałszywa." -#: extras/models/customfields.py:696 +#: netbox/extras/models/customfields.py:696 msgid "Date values must be in ISO 8601 format (YYYY-MM-DD)." msgstr "Wartości dat muszą być w formacie ISO 8601 (RRRR-MM-DD)." -#: extras/models/customfields.py:705 +#: netbox/extras/models/customfields.py:705 msgid "Date and time values must be in ISO 8601 format (YYYY-MM-DD HH:MM:SS)." msgstr "" "Wartości daty i godziny muszą być zgodne z normą ISO 8601 (RRRR-MM-DD " "HH:MM:SS)." -#: extras/models/customfields.py:712 +#: netbox/extras/models/customfields.py:712 #, python-brace-format msgid "Invalid choice ({value}) for choice set {choiceset}." msgstr "Nieprawidłowy wybór ({value}) do wyboru zestawu {choiceset}." -#: extras/models/customfields.py:722 +#: netbox/extras/models/customfields.py:722 #, python-brace-format msgid "Invalid choice(s) ({value}) for choice set {choiceset}." msgstr "Nieprawidłowy wybór (y) ({value}) do wyboru zestawu {choiceset}." -#: extras/models/customfields.py:731 +#: netbox/extras/models/customfields.py:731 #, python-brace-format msgid "Value must be an object ID, not {type}" msgstr "Wartość musi być identyfikatorem obiektu, a nie {type}" -#: extras/models/customfields.py:737 +#: netbox/extras/models/customfields.py:737 #, python-brace-format msgid "Value must be a list of object IDs, not {type}" msgstr "Wartość musi być listą identyfikatorów obiektów, a nie {type}" -#: extras/models/customfields.py:741 +#: netbox/extras/models/customfields.py:741 #, python-brace-format msgid "Found invalid object ID: {id}" msgstr "Znaleziono nieprawidłowy identyfikator obiektu: {id}" -#: extras/models/customfields.py:744 +#: netbox/extras/models/customfields.py:744 msgid "Required field cannot be empty." msgstr "Pole wymagane nie może być puste." -#: extras/models/customfields.py:763 +#: netbox/extras/models/customfields.py:763 msgid "Base set of predefined choices (optional)" msgstr "Podstawowy zestaw predefiniowanych opcji (opcjonalnie)" -#: extras/models/customfields.py:775 +#: netbox/extras/models/customfields.py:775 msgid "Choices are automatically ordered alphabetically" msgstr "Wybory są automatycznie uporządkowane alfabetycznie" -#: extras/models/customfields.py:782 +#: netbox/extras/models/customfields.py:782 msgid "custom field choice set" msgstr "niestandardowy zestaw wyboru pola" -#: extras/models/customfields.py:783 +#: netbox/extras/models/customfields.py:783 msgid "custom field choice sets" msgstr "niestandardowe zestawy wyboru pól" -#: extras/models/customfields.py:825 +#: netbox/extras/models/customfields.py:825 msgid "Must define base or extra choices." msgstr "Musi zdefiniować opcje bazowe lub dodatkowe." -#: extras/models/customfields.py:849 +#: netbox/extras/models/customfields.py:849 #, python-brace-format msgid "" "Cannot remove choice {choice} as there are {model} objects which reference " @@ -7972,61 +8561,61 @@ msgstr "" "Nie można usunąć wyboru {choice} tak jak są {model} Obiekty, które się do " "niego odnoszą." -#: extras/models/dashboard.py:18 +#: netbox/extras/models/dashboard.py:18 msgid "layout" msgstr "układ" -#: extras/models/dashboard.py:22 +#: netbox/extras/models/dashboard.py:22 msgid "config" msgstr "konfiguruj" -#: extras/models/dashboard.py:27 +#: netbox/extras/models/dashboard.py:27 msgid "dashboard" msgstr "deska rozdzielcza" -#: extras/models/dashboard.py:28 +#: netbox/extras/models/dashboard.py:28 msgid "dashboards" msgstr "pulpity nawigacyjne" -#: extras/models/models.py:52 +#: netbox/extras/models/models.py:52 msgid "object types" msgstr "typy obiektów" -#: extras/models/models.py:53 +#: netbox/extras/models/models.py:53 msgid "The object(s) to which this rule applies." msgstr "Obiekt (-y), do którego ma zastosowanie ta reguła." -#: extras/models/models.py:67 +#: netbox/extras/models/models.py:67 msgid "The types of event which will trigger this rule." msgstr "Rodzaje zdarzeń, które wyzwalają tę regułę." -#: extras/models/models.py:74 +#: netbox/extras/models/models.py:74 msgid "conditions" msgstr "warunki" -#: extras/models/models.py:77 +#: netbox/extras/models/models.py:77 msgid "" "A set of conditions which determine whether the event will be generated." msgstr "" "Zestaw warunków decydujących o tym, czy zdarzenie zostanie wygenerowane." -#: extras/models/models.py:85 +#: netbox/extras/models/models.py:85 msgid "action type" msgstr "typ działania" -#: extras/models/models.py:104 +#: netbox/extras/models/models.py:104 msgid "Additional data to pass to the action object" msgstr "Dodatkowe dane do przekazania do obiektu akcji" -#: extras/models/models.py:116 +#: netbox/extras/models/models.py:116 msgid "event rule" msgstr "reguła zdarzenia" -#: extras/models/models.py:117 +#: netbox/extras/models/models.py:117 msgid "event rules" msgstr "zasady zdarzeń" -#: extras/models/models.py:166 +#: netbox/extras/models/models.py:166 msgid "" "This URL will be called using the HTTP method defined when the webhook is " "called. Jinja2 template processing is supported with the same context as the" @@ -8036,7 +8625,7 @@ msgstr "" "podczas wywołania webhook. Przetwarzanie szablonu Jinja2 jest obsługiwane w " "tym samym kontekście co treść żądania." -#: extras/models/models.py:181 +#: netbox/extras/models/models.py:181 msgid "" "The complete list of official content types is available tutaj." -#: extras/models/models.py:186 +#: netbox/extras/models/models.py:186 msgid "additional headers" msgstr "dodatkowe nagłówki" -#: extras/models/models.py:189 +#: netbox/extras/models/models.py:189 msgid "" "User-supplied HTTP headers to be sent with the request in addition to the " "HTTP content type. Headers should be defined in the format Name: " @@ -8062,11 +8651,11 @@ msgstr "" "formacie Nazwa: Value. Przetwarzanie szablonu Jinja2 jest " "obsługiwane w tym samym kontekście co treść żądania (poniżej)." -#: extras/models/models.py:195 +#: netbox/extras/models/models.py:195 msgid "body template" msgstr "szablon ciała" -#: extras/models/models.py:198 +#: netbox/extras/models/models.py:198 msgid "" "Jinja2 template for a custom request body. If blank, a JSON object " "representing the change will be included. Available context data includes: " @@ -8079,11 +8668,11 @@ msgstr "" "znacznik czasu, nazwa użytkownika, " "Identyfikator żądania, i dane." -#: extras/models/models.py:204 +#: netbox/extras/models/models.py:204 msgid "secret" msgstr "tajemnica" -#: extras/models/models.py:208 +#: netbox/extras/models/models.py:208 msgid "" "When provided, the request will include a X-Hook-Signature " "header containing a HMAC hex digest of the payload body using the secret as " @@ -8093,15 +8682,15 @@ msgstr "" "zawierający podsumowanie heksadecymalne HMAC korpusu ładunku użytkowego " "używającego sekretu jako klucza. Tajemnica nie jest przekazywana w żądaniu." -#: extras/models/models.py:215 +#: netbox/extras/models/models.py:215 msgid "Enable SSL certificate verification. Disable with caution!" msgstr "Włącz weryfikację certyfikatu SSL. Wyłącz ostrożnie!" -#: extras/models/models.py:221 templates/extras/webhook.html:51 +#: netbox/extras/models/models.py:221 netbox/templates/extras/webhook.html:51 msgid "CA File Path" msgstr "Ścieżka pliku CA" -#: extras/models/models.py:223 +#: netbox/extras/models/models.py:223 msgid "" "The specific CA certificate file to use for SSL verification. Leave blank to" " use the system defaults." @@ -8109,64 +8698,64 @@ msgstr "" "Określony plik certyfikatu CA, który ma być używany do weryfikacji SSL. " "Pozostaw puste miejsce, aby użyć ustawień domyślnych systemu." -#: extras/models/models.py:234 +#: netbox/extras/models/models.py:234 msgid "webhook" msgstr "haczyk internetowy" -#: extras/models/models.py:235 +#: netbox/extras/models/models.py:235 msgid "webhooks" msgstr "haczyki internetowe" -#: extras/models/models.py:253 +#: netbox/extras/models/models.py:253 msgid "Do not specify a CA certificate file if SSL verification is disabled." msgstr "" "Nie określaj pliku certyfikatu CA, jeśli weryfikacja SSL jest wyłączona." -#: extras/models/models.py:293 +#: netbox/extras/models/models.py:293 msgid "The object type(s) to which this link applies." msgstr "Typ obiektu (-y), do którego dotyczy to łącze." -#: extras/models/models.py:305 +#: netbox/extras/models/models.py:305 msgid "link text" msgstr "tekst linku" -#: extras/models/models.py:306 +#: netbox/extras/models/models.py:306 msgid "Jinja2 template code for link text" msgstr "Kod szablonu Jinja2 dla tekstu linku" -#: extras/models/models.py:309 +#: netbox/extras/models/models.py:309 msgid "link URL" msgstr "URL linku" -#: extras/models/models.py:310 +#: netbox/extras/models/models.py:310 msgid "Jinja2 template code for link URL" msgstr "Kod szablonu Jinja2 dla adresu URL linku" -#: extras/models/models.py:320 +#: netbox/extras/models/models.py:320 msgid "Links with the same group will appear as a dropdown menu" msgstr "Linki z tą samą grupą pojawią się jako menu rozwijane" -#: extras/models/models.py:330 +#: netbox/extras/models/models.py:330 msgid "new window" msgstr "nowe okno" -#: extras/models/models.py:332 +#: netbox/extras/models/models.py:332 msgid "Force link to open in a new window" msgstr "Wymuś otwarcie łącza w nowym oknie" -#: extras/models/models.py:341 +#: netbox/extras/models/models.py:341 msgid "custom link" msgstr "niestandardowy link" -#: extras/models/models.py:342 +#: netbox/extras/models/models.py:342 msgid "custom links" msgstr "niestandardowe linki" -#: extras/models/models.py:389 +#: netbox/extras/models/models.py:389 msgid "The object type(s) to which this template applies." msgstr "Typ obiektu, do którego ma zastosowanie ten szablon." -#: extras/models/models.py:402 +#: netbox/extras/models/models.py:402 msgid "" "Jinja2 template code. The list of objects being exported is passed as a " "context variable named queryset." @@ -8174,1085 +8763,1151 @@ msgstr "" "Kod szablonu Jinja2. Lista eksportowanych obiektów jest przekazywana jako " "zmienna kontekstowa o nazwie zestaw zapytań." -#: extras/models/models.py:410 +#: netbox/extras/models/models.py:410 msgid "Defaults to text/plain; charset=utf-8" msgstr "Domyślnie tekst/zwykły; charset = utf-8" -#: extras/models/models.py:413 +#: netbox/extras/models/models.py:413 msgid "file extension" msgstr "rozszerzenie pliku" -#: extras/models/models.py:416 +#: netbox/extras/models/models.py:416 msgid "Extension to append to the rendered filename" msgstr "Rozszerzenie do dołączenia do renderowanej nazwy pliku" -#: extras/models/models.py:419 +#: netbox/extras/models/models.py:419 msgid "as attachment" msgstr "jako załącznik" -#: extras/models/models.py:421 +#: netbox/extras/models/models.py:421 msgid "Download file as attachment" msgstr "Pobierz plik jako załącznik" -#: extras/models/models.py:430 +#: netbox/extras/models/models.py:430 msgid "export template" msgstr "szablon eksportu" -#: extras/models/models.py:431 +#: netbox/extras/models/models.py:431 msgid "export templates" msgstr "szablony eksportu" -#: extras/models/models.py:448 +#: netbox/extras/models/models.py:448 #, python-brace-format msgid "\"{name}\" is a reserved name. Please choose a different name." msgstr "„{name}„jest zastrzeżoną nazwą. Proszę wybrać inną nazwę." -#: extras/models/models.py:498 +#: netbox/extras/models/models.py:498 msgid "The object type(s) to which this filter applies." msgstr "Typ obiektu (-y), do którego ma zastosowanie ten filtr." -#: extras/models/models.py:530 +#: netbox/extras/models/models.py:530 msgid "shared" msgstr "wspólne" -#: extras/models/models.py:543 +#: netbox/extras/models/models.py:543 msgid "saved filter" msgstr "zapisany filtr" -#: extras/models/models.py:544 +#: netbox/extras/models/models.py:544 msgid "saved filters" msgstr "zapisane filtry" -#: extras/models/models.py:562 +#: netbox/extras/models/models.py:562 msgid "Filter parameters must be stored as a dictionary of keyword arguments." msgstr "" "Parametry filtra muszą być przechowywane jako słownik argumentów słów " "kluczowych." -#: extras/models/models.py:590 +#: netbox/extras/models/models.py:590 msgid "image height" msgstr "wysokość obrazu" -#: extras/models/models.py:593 +#: netbox/extras/models/models.py:593 msgid "image width" msgstr "szerokość obrazu" -#: extras/models/models.py:610 +#: netbox/extras/models/models.py:610 msgid "image attachment" msgstr "załącznik do obrazu" -#: extras/models/models.py:611 +#: netbox/extras/models/models.py:611 msgid "image attachments" msgstr "załączniki do obrazów" -#: extras/models/models.py:625 +#: netbox/extras/models/models.py:625 #, python-brace-format msgid "Image attachments cannot be assigned to this object type ({type})." msgstr "" "Załączniki obrazów nie mogą być przypisane do tego typu obiektu ({type})." -#: extras/models/models.py:688 +#: netbox/extras/models/models.py:688 msgid "kind" msgstr "rodzaj" -#: extras/models/models.py:702 +#: netbox/extras/models/models.py:702 msgid "journal entry" msgstr "wpis do dziennika" -#: extras/models/models.py:703 +#: netbox/extras/models/models.py:703 msgid "journal entries" msgstr "wpisy do dziennika" -#: extras/models/models.py:718 +#: netbox/extras/models/models.py:718 #, python-brace-format msgid "Journaling is not supported for this object type ({type})." msgstr "Rejestracja nie jest obsługiwana dla tego typu obiektu ({type})." -#: extras/models/models.py:760 +#: netbox/extras/models/models.py:760 msgid "bookmark" msgstr "zakładka" -#: extras/models/models.py:761 +#: netbox/extras/models/models.py:761 msgid "bookmarks" msgstr "zakładki" -#: extras/models/models.py:774 +#: netbox/extras/models/models.py:774 #, 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})." -#: extras/models/notifications.py:43 +#: netbox/extras/models/notifications.py:43 msgid "read" msgstr "przeczytać" -#: extras/models/notifications.py:66 +#: netbox/extras/models/notifications.py:66 msgid "event" msgstr "zdarzenie" -#: extras/models/notifications.py:84 +#: netbox/extras/models/notifications.py:84 msgid "notification" msgstr "powiadomienie" -#: extras/models/notifications.py:85 +#: netbox/extras/models/notifications.py:85 msgid "notifications" msgstr "powiadomienia" -#: extras/models/notifications.py:99 extras/models/notifications.py:234 +#: netbox/extras/models/notifications.py:99 +#: netbox/extras/models/notifications.py:234 #, python-brace-format msgid "Objects of this type ({type}) do not support notifications." msgstr "Obiekty tego typu ({type}) nie obsługują powiadomień." -#: extras/models/notifications.py:137 users/models/users.py:58 -#: users/models/users.py:77 +#: netbox/extras/models/notifications.py:137 netbox/users/models/users.py:58 +#: netbox/users/models/users.py:77 msgid "groups" msgstr "grupy" -#: extras/models/notifications.py:143 users/models/users.py:93 +#: netbox/extras/models/notifications.py:143 netbox/users/models/users.py:93 msgid "users" msgstr "użytkownicy" -#: extras/models/notifications.py:152 +#: netbox/extras/models/notifications.py:152 msgid "notification group" msgstr "grupa powiadomień" -#: extras/models/notifications.py:153 +#: netbox/extras/models/notifications.py:153 msgid "notification groups" msgstr "grupy powiadomień" -#: extras/models/notifications.py:217 +#: netbox/extras/models/notifications.py:217 msgid "subscription" msgstr "subskrypcja" -#: extras/models/notifications.py:218 +#: netbox/extras/models/notifications.py:218 msgid "subscriptions" msgstr "subskrypcje" -#: extras/models/scripts.py:42 +#: netbox/extras/models/scripts.py:42 msgid "is executable" msgstr "jest wykonywalny" -#: extras/models/scripts.py:64 +#: netbox/extras/models/scripts.py:64 msgid "script" msgstr "scenariusz" -#: extras/models/scripts.py:65 +#: netbox/extras/models/scripts.py:65 msgid "scripts" msgstr "scenariusze" -#: extras/models/scripts.py:111 +#: netbox/extras/models/scripts.py:111 msgid "script module" msgstr "moduł skryptu" -#: extras/models/scripts.py:112 +#: netbox/extras/models/scripts.py:112 msgid "script modules" msgstr "moduły skryptowe" -#: extras/models/search.py:22 +#: netbox/extras/models/search.py:22 msgid "timestamp" msgstr "znacznik czasu" -#: extras/models/search.py:37 +#: netbox/extras/models/search.py:37 msgid "field" msgstr "pole" -#: extras/models/search.py:45 +#: netbox/extras/models/search.py:45 msgid "value" msgstr "wartość" -#: extras/models/search.py:56 +#: netbox/extras/models/search.py:56 msgid "cached value" msgstr "wartość buforowana" -#: extras/models/search.py:57 +#: netbox/extras/models/search.py:57 msgid "cached values" msgstr "wartości buforowane" -#: extras/models/staging.py:44 +#: netbox/extras/models/staging.py:44 msgid "branch" msgstr "oddział" -#: extras/models/staging.py:45 +#: netbox/extras/models/staging.py:45 msgid "branches" msgstr "oddziałów" -#: extras/models/staging.py:97 +#: netbox/extras/models/staging.py:97 msgid "staged change" msgstr "zmiana etapowa" -#: extras/models/staging.py:98 +#: netbox/extras/models/staging.py:98 msgid "staged changes" msgstr "zmiany etapowe" -#: extras/models/tags.py:40 +#: netbox/extras/models/tags.py:40 msgid "The object type(s) to which this tag can be applied." msgstr "Typ obiektu, do którego można zastosować ten znacznik." -#: extras/models/tags.py:49 +#: netbox/extras/models/tags.py:49 msgid "tag" msgstr "metka" -#: extras/models/tags.py:50 +#: netbox/extras/models/tags.py:50 msgid "tags" msgstr "znakuje" -#: extras/models/tags.py:78 +#: netbox/extras/models/tags.py:78 msgid "tagged item" msgstr "przedmiot oznaczony" -#: extras/models/tags.py:79 +#: netbox/extras/models/tags.py:79 msgid "tagged items" msgstr "przedmioty oznaczone" -#: extras/scripts.py:429 +#: netbox/extras/scripts.py:429 msgid "Script Data" msgstr "Dane skryptu" -#: extras/scripts.py:433 +#: netbox/extras/scripts.py:433 msgid "Script Execution Parameters" msgstr "Parametry wykonywania skryptów" -#: extras/tables/columns.py:12 templates/htmx/notifications.html:18 +#: netbox/extras/tables/columns.py:12 +#: netbox/templates/htmx/notifications.html:18 msgid "Dismiss" msgstr "Odrzucić" -#: extras/tables/tables.py:62 extras/tables/tables.py:159 -#: extras/tables/tables.py:184 extras/tables/tables.py:250 -#: extras/tables/tables.py:276 extras/tables/tables.py:412 -#: extras/tables/tables.py:446 templates/extras/customfield.html:105 -#: templates/extras/eventrule.html:27 templates/users/objectpermission.html:64 -#: users/tables.py:80 +#: netbox/extras/tables/tables.py:62 netbox/extras/tables/tables.py:159 +#: netbox/extras/tables/tables.py:184 netbox/extras/tables/tables.py:250 +#: netbox/extras/tables/tables.py:276 netbox/extras/tables/tables.py:412 +#: netbox/extras/tables/tables.py:446 +#: netbox/templates/extras/customfield.html:105 +#: netbox/templates/extras/eventrule.html:27 +#: netbox/templates/users/objectpermission.html:64 netbox/users/tables.py:80 msgid "Object Types" msgstr "Typy obiektów" -#: extras/tables/tables.py:69 +#: netbox/extras/tables/tables.py:69 msgid "Validate Uniqueness" msgstr "Potwierdź wyjątkowość" -#: extras/tables/tables.py:73 +#: netbox/extras/tables/tables.py:73 msgid "Visible" msgstr "Widoczne" -#: extras/tables/tables.py:76 +#: netbox/extras/tables/tables.py:76 msgid "Editable" msgstr "Edytowalny" -#: extras/tables/tables.py:82 +#: netbox/extras/tables/tables.py:82 msgid "Related Object Type" msgstr "Powiązany typ obiektu" -#: extras/tables/tables.py:86 templates/extras/customfield.html:51 +#: netbox/extras/tables/tables.py:86 +#: netbox/templates/extras/customfield.html:51 msgid "Choice Set" msgstr "Zestaw wyboru" -#: extras/tables/tables.py:94 +#: netbox/extras/tables/tables.py:94 msgid "Is Cloneable" msgstr "Jest klonowalny" -#: extras/tables/tables.py:98 templates/extras/customfield.html:118 +#: netbox/extras/tables/tables.py:98 +#: netbox/templates/extras/customfield.html:118 msgid "Minimum Value" msgstr "Minimalna wartość" -#: extras/tables/tables.py:101 templates/extras/customfield.html:122 +#: netbox/extras/tables/tables.py:101 +#: netbox/templates/extras/customfield.html:122 msgid "Maximum Value" msgstr "Maksymalna wartość" -#: extras/tables/tables.py:104 +#: netbox/extras/tables/tables.py:104 msgid "Validation Regex" msgstr "Walidacja Regex" -#: extras/tables/tables.py:137 +#: netbox/extras/tables/tables.py:137 msgid "Count" msgstr "Policz" -#: extras/tables/tables.py:140 +#: netbox/extras/tables/tables.py:140 msgid "Order Alphabetically" msgstr "Uporządkuj alfabetycznie" -#: extras/tables/tables.py:165 templates/extras/customlink.html:33 +#: netbox/extras/tables/tables.py:165 +#: netbox/templates/extras/customlink.html:33 msgid "New Window" msgstr "Nowe okno" -#: extras/tables/tables.py:187 +#: netbox/extras/tables/tables.py:187 msgid "As Attachment" msgstr "Jako załącznik" -#: extras/tables/tables.py:195 extras/tables/tables.py:487 -#: extras/tables/tables.py:522 templates/core/datafile.html:24 -#: templates/dcim/device/render_config.html:22 -#: templates/extras/configcontext.html:39 -#: templates/extras/configtemplate.html:31 -#: templates/extras/exporttemplate.html:45 -#: templates/generic/bulk_import.html:35 -#: templates/virtualization/virtualmachine/render_config.html:22 +#: netbox/extras/tables/tables.py: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/generic/bulk_import.html:35 +#: netbox/templates/virtualization/virtualmachine/render_config.html:22 msgid "Data File" msgstr "Plik danych" -#: extras/tables/tables.py:200 extras/tables/tables.py:499 -#: extras/tables/tables.py:527 +#: netbox/extras/tables/tables.py:200 netbox/extras/tables/tables.py:499 +#: netbox/extras/tables/tables.py:527 msgid "Synced" msgstr "Zsynchronizowane" -#: extras/tables/tables.py:227 +#: netbox/extras/tables/tables.py:227 msgid "Image" msgstr "Obraz" -#: extras/tables/tables.py:232 +#: netbox/extras/tables/tables.py:232 msgid "Size (Bytes)" msgstr "Rozmiar (bajty)" -#: extras/tables/tables.py:339 +#: netbox/extras/tables/tables.py:339 msgid "Read" msgstr "Przeczytaj" -#: extras/tables/tables.py:382 +#: netbox/extras/tables/tables.py:382 msgid "SSL Validation" msgstr "Walidacja SSL" -#: extras/tables/tables.py:418 templates/extras/eventrule.html:37 +#: netbox/extras/tables/tables.py:418 +#: netbox/templates/extras/eventrule.html:37 msgid "Event Types" msgstr "Rodzaje zdarzeń" -#: extras/tables/tables.py:535 netbox/navigation/menu.py:77 -#: templates/dcim/devicerole.html:8 +#: netbox/extras/tables/tables.py:535 netbox/netbox/navigation/menu.py:77 +#: netbox/templates/dcim/devicerole.html:8 msgid "Device Roles" msgstr "Role urządzenia" -#: extras/tables/tables.py:587 +#: netbox/extras/tables/tables.py:587 msgid "Comments (Short)" msgstr "Komentarze (krótkie)" -#: extras/tables/tables.py:606 extras/tables/tables.py:640 +#: netbox/extras/tables/tables.py:606 netbox/extras/tables/tables.py:640 msgid "Line" msgstr "Linia" -#: extras/tables/tables.py:613 extras/tables/tables.py:650 +#: netbox/extras/tables/tables.py:613 netbox/extras/tables/tables.py:650 msgid "Level" msgstr "Poziom" -#: extras/tables/tables.py:619 extras/tables/tables.py:659 +#: netbox/extras/tables/tables.py:619 netbox/extras/tables/tables.py:659 msgid "Message" msgstr "Wiadomość" -#: extras/tables/tables.py:643 +#: netbox/extras/tables/tables.py:643 msgid "Method" msgstr "Metoda" -#: extras/validators.py:15 +#: netbox/extras/validators.py:15 #, python-format msgid "Ensure this value is equal to %(limit_value)s." msgstr "Upewnij się, że ta wartość jest równa %(limit_value)s." -#: extras/validators.py:26 +#: netbox/extras/validators.py:26 #, python-format msgid "Ensure this value does not equal %(limit_value)s." msgstr "Upewnij się, że ta wartość nie jest równa %(limit_value)s." -#: extras/validators.py:37 +#: netbox/extras/validators.py:37 msgid "This field must be empty." msgstr "To pole musi być puste." -#: extras/validators.py:52 +#: netbox/extras/validators.py:52 msgid "This field must not be empty." msgstr "To pole nie może być puste." -#: extras/validators.py:94 +#: netbox/extras/validators.py:94 msgid "Validation rules must be passed as a dictionary" msgstr "Reguły walidacji muszą być przekazane jako słownik" -#: extras/validators.py:119 +#: netbox/extras/validators.py:119 #, python-brace-format msgid "Custom validation failed for {attribute}: {exception}" msgstr "Niestandardowa walidacja nie powiodła się {attribute}: {exception}" -#: extras/validators.py:133 +#: netbox/extras/validators.py:133 #, python-brace-format msgid "Invalid attribute \"{name}\" for request" msgstr "Nieprawidłowy atrybut”{name}„na żądanie" -#: extras/validators.py:150 +#: netbox/extras/validators.py:150 #, python-brace-format msgid "Invalid attribute \"{name}\" for {model}" msgstr "Nieprawidłowy atrybut”{name}„dla {model}" -#: extras/views.py:960 +#: netbox/extras/views.py:960 msgid "Your dashboard has been reset." msgstr "Twój pulpit nawigacyjny został zresetowany." -#: extras/views.py:1006 +#: netbox/extras/views.py:1006 msgid "Added widget: " msgstr "Dodano widżet: " -#: extras/views.py:1047 +#: netbox/extras/views.py:1047 msgid "Updated widget: " msgstr "Zaktualizowano widżet: " -#: extras/views.py:1083 +#: netbox/extras/views.py:1083 msgid "Deleted widget: " msgstr "Usunięty widget: " -#: extras/views.py:1085 +#: netbox/extras/views.py:1085 msgid "Error deleting widget: " msgstr "Błąd usuwania widżetu: " -#: extras/views.py:1172 +#: netbox/extras/views.py:1175 msgid "Unable to run script: RQ worker process not running." msgstr "Nie można uruchomić skryptu: proces roboczy RQ nie działa." -#: ipam/api/field_serializers.py:17 +#: netbox/ipam/api/field_serializers.py:17 msgid "Enter a valid IPv4 or IPv6 address with optional mask." msgstr "Wprowadź prawidłowy adres IPv4 lub IPv6 z opcjonalną maską." -#: ipam/api/field_serializers.py:24 +#: netbox/ipam/api/field_serializers.py:24 #, python-brace-format msgid "Invalid IP address format: {data}" msgstr "Nieprawidłowy format adresu IP: {data}" -#: ipam/api/field_serializers.py:37 +#: netbox/ipam/api/field_serializers.py:37 msgid "Enter a valid IPv4 or IPv6 prefix and mask in CIDR notation." msgstr "Wprowadź prawidłowy prefiks IPv4 lub IPv6 i maskę w notacji CIDR." -#: ipam/api/field_serializers.py:44 +#: netbox/ipam/api/field_serializers.py:44 #, python-brace-format msgid "Invalid IP prefix format: {data}" msgstr "Nieprawidłowy format prefiksu IP: {data}" -#: ipam/api/views.py:358 +#: netbox/ipam/api/views.py:358 msgid "" "Insufficient space is available to accommodate the requested prefix size(s)" msgstr "" "Nie jest dostępna jest wystarczająca ilość miejsca, aby pomieścić żądany " "rozmiar prefiksu (prefiksów)" -#: ipam/choices.py:30 +#: netbox/ipam/choices.py:30 msgid "Container" msgstr "Pojemnik" -#: ipam/choices.py:72 +#: netbox/ipam/choices.py:72 msgid "DHCP" msgstr "DHCP" -#: ipam/choices.py:73 +#: netbox/ipam/choices.py:73 msgid "SLAAC" msgstr "SLACK" -#: ipam/choices.py:89 +#: netbox/ipam/choices.py:89 msgid "Loopback" msgstr "Pętla zwrotna" -#: ipam/choices.py:91 +#: netbox/ipam/choices.py:91 msgid "Anycast" msgstr "Anycast" -#: ipam/choices.py:115 +#: netbox/ipam/choices.py:115 msgid "Standard" msgstr "Standardowy" -#: ipam/choices.py:120 +#: netbox/ipam/choices.py:120 msgid "CheckPoint" msgstr "Punkt kontrolny" -#: ipam/choices.py:123 +#: netbox/ipam/choices.py:123 msgid "Cisco" msgstr "Cisco" -#: ipam/choices.py:137 +#: netbox/ipam/choices.py:137 msgid "Plaintext" msgstr "Zwykły tekst" -#: ipam/fields.py:36 +#: netbox/ipam/fields.py:36 #, python-brace-format msgid "Invalid IP address format: {address}" msgstr "Nieprawidłowy format adresu IP: {address}" -#: ipam/filtersets.py:48 vpn/filtersets.py:304 +#: netbox/ipam/filtersets.py:48 netbox/vpn/filtersets.py:304 msgid "Import target" msgstr "Importuj cel" -#: ipam/filtersets.py:54 vpn/filtersets.py:310 +#: netbox/ipam/filtersets.py:54 netbox/vpn/filtersets.py:310 msgid "Import target (name)" msgstr "Import docelowy (nazwa)" -#: ipam/filtersets.py:59 vpn/filtersets.py:315 +#: netbox/ipam/filtersets.py:59 netbox/vpn/filtersets.py:315 msgid "Export target" msgstr "Cel eksportu" -#: ipam/filtersets.py:65 vpn/filtersets.py:321 +#: netbox/ipam/filtersets.py:65 netbox/vpn/filtersets.py:321 msgid "Export target (name)" msgstr "Eksportuj cel (nazwa)" -#: ipam/filtersets.py:86 +#: netbox/ipam/filtersets.py:86 msgid "Importing VRF" msgstr "Importowanie VRF" -#: ipam/filtersets.py:92 +#: netbox/ipam/filtersets.py:92 msgid "Import VRF (RD)" msgstr "Import VRF (RD)" -#: ipam/filtersets.py:97 +#: netbox/ipam/filtersets.py:97 msgid "Exporting VRF" msgstr "Eksportowanie VRF" -#: ipam/filtersets.py:103 +#: netbox/ipam/filtersets.py:103 msgid "Export VRF (RD)" msgstr "Eksportuj VRF (RD)" -#: ipam/filtersets.py:108 +#: netbox/ipam/filtersets.py:108 msgid "Importing L2VPN" msgstr "Importowanie L2VPN" -#: ipam/filtersets.py:114 +#: netbox/ipam/filtersets.py:114 msgid "Importing L2VPN (identifier)" msgstr "Importowanie L2VPN (identyfikator)" -#: ipam/filtersets.py:119 +#: netbox/ipam/filtersets.py:119 msgid "Exporting L2VPN" msgstr "Eksportowanie L2VPN" -#: ipam/filtersets.py:125 +#: netbox/ipam/filtersets.py:125 msgid "Exporting L2VPN (identifier)" msgstr "Eksportowanie L2VPN (identyfikator)" -#: ipam/filtersets.py:155 ipam/filtersets.py:281 ipam/forms/model_forms.py:229 -#: ipam/tables/ip.py:212 templates/ipam/prefix.html:12 +#: netbox/ipam/filtersets.py:155 netbox/ipam/filtersets.py:281 +#: netbox/ipam/forms/model_forms.py:229 netbox/ipam/tables/ip.py:212 +#: netbox/templates/ipam/prefix.html:12 msgid "Prefix" msgstr "Prefiks" -#: ipam/filtersets.py:159 ipam/filtersets.py:198 ipam/filtersets.py:221 +#: netbox/ipam/filtersets.py:159 netbox/ipam/filtersets.py:198 +#: netbox/ipam/filtersets.py:221 msgid "RIR (ID)" msgstr "RIR (ID)" -#: ipam/filtersets.py:165 ipam/filtersets.py:204 ipam/filtersets.py:227 +#: netbox/ipam/filtersets.py:165 netbox/ipam/filtersets.py:204 +#: netbox/ipam/filtersets.py:227 msgid "RIR (slug)" msgstr "RIR (identyfikator)" -#: ipam/filtersets.py:285 +#: netbox/ipam/filtersets.py:285 msgid "Within prefix" msgstr "W prefiksie" -#: ipam/filtersets.py:289 +#: netbox/ipam/filtersets.py:289 msgid "Within and including prefix" msgstr "W i włącznie z prefiksem" -#: ipam/filtersets.py:293 +#: netbox/ipam/filtersets.py:293 msgid "Prefixes which contain this prefix or IP" msgstr "Prefiksy zawierające ten prefiks lub adres IP" -#: ipam/filtersets.py:304 ipam/filtersets.py:572 ipam/forms/bulk_edit.py:343 -#: ipam/forms/filtersets.py:196 ipam/forms/filtersets.py:331 +#: netbox/ipam/filtersets.py:304 netbox/ipam/filtersets.py:572 +#: netbox/ipam/forms/bulk_edit.py:343 netbox/ipam/forms/filtersets.py:196 +#: netbox/ipam/forms/filtersets.py:331 msgid "Mask length" msgstr "Długość maski" -#: ipam/filtersets.py:373 vpn/filtersets.py:427 +#: netbox/ipam/filtersets.py:373 netbox/vpn/filtersets.py:427 msgid "VLAN (ID)" msgstr "VLAN (ID)" -#: ipam/filtersets.py:377 vpn/filtersets.py:422 +#: netbox/ipam/filtersets.py:377 netbox/vpn/filtersets.py:422 msgid "VLAN number (1-4094)" msgstr "Numer VLAN (1-4094)" -#: ipam/filtersets.py:471 ipam/filtersets.py:475 ipam/filtersets.py:567 -#: ipam/forms/model_forms.py:463 templates/tenancy/contact.html:53 -#: tenancy/forms/bulk_edit.py:113 +#: netbox/ipam/filtersets.py:471 netbox/ipam/filtersets.py:475 +#: netbox/ipam/filtersets.py:567 netbox/ipam/forms/model_forms.py:496 +#: netbox/templates/tenancy/contact.html:53 +#: netbox/tenancy/forms/bulk_edit.py:113 msgid "Address" msgstr "Adres" -#: ipam/filtersets.py:479 +#: netbox/ipam/filtersets.py:479 msgid "Ranges which contain this prefix or IP" msgstr "Zakresy zawierające ten prefiks lub adres IP" -#: ipam/filtersets.py:507 ipam/filtersets.py:563 +#: netbox/ipam/filtersets.py:507 netbox/ipam/filtersets.py:563 msgid "Parent prefix" msgstr "Prefiks nadrzędny" -#: ipam/filtersets.py:616 ipam/filtersets.py:856 ipam/filtersets.py:1131 -#: vpn/filtersets.py:385 +#: netbox/ipam/filtersets.py:616 netbox/ipam/filtersets.py:856 +#: netbox/ipam/filtersets.py:1131 netbox/vpn/filtersets.py:385 msgid "Virtual machine (name)" msgstr "Maszyna wirtualna (nazwa)" -#: ipam/filtersets.py:621 ipam/filtersets.py:861 ipam/filtersets.py:1125 -#: virtualization/filtersets.py:282 virtualization/filtersets.py:321 -#: vpn/filtersets.py:390 +#: netbox/ipam/filtersets.py:621 netbox/ipam/filtersets.py:861 +#: netbox/ipam/filtersets.py:1125 netbox/virtualization/filtersets.py:282 +#: netbox/virtualization/filtersets.py:321 netbox/vpn/filtersets.py:390 msgid "Virtual machine (ID)" msgstr "Maszyna wirtualna (ID)" -#: ipam/filtersets.py:627 vpn/filtersets.py:97 vpn/filtersets.py:396 +#: netbox/ipam/filtersets.py:627 netbox/vpn/filtersets.py:97 +#: netbox/vpn/filtersets.py:396 msgid "Interface (name)" msgstr "Interfejs (nazwa)" -#: ipam/filtersets.py:638 vpn/filtersets.py:108 vpn/filtersets.py:407 +#: netbox/ipam/filtersets.py:638 netbox/vpn/filtersets.py:108 +#: netbox/vpn/filtersets.py:407 msgid "VM interface (name)" msgstr "Interfejs maszyny wirtualnej (nazwa)" -#: ipam/filtersets.py:643 vpn/filtersets.py:113 +#: netbox/ipam/filtersets.py:643 netbox/vpn/filtersets.py:113 msgid "VM interface (ID)" msgstr "Interfejs maszyny wirtualnej (ID)" -#: ipam/filtersets.py:648 +#: netbox/ipam/filtersets.py:648 msgid "FHRP group (ID)" msgstr "Grupa FHRP (ID)" -#: ipam/filtersets.py:652 +#: netbox/ipam/filtersets.py:652 msgid "Is assigned to an interface" msgstr "Jest przypisany do interfejsu" -#: ipam/filtersets.py:656 +#: netbox/ipam/filtersets.py:656 msgid "Is assigned" msgstr "Jest przypisany" -#: ipam/filtersets.py:668 +#: netbox/ipam/filtersets.py:668 msgid "Service (ID)" msgstr "Usługa (ID)" -#: ipam/filtersets.py:673 +#: netbox/ipam/filtersets.py:673 msgid "NAT inside IP address (ID)" msgstr "NAT wewnątrz adresu IP (ID)" -#: ipam/filtersets.py:1041 ipam/forms/bulk_import.py:322 +#: netbox/ipam/filtersets.py:1041 netbox/ipam/forms/bulk_import.py:322 msgid "Assigned interface" msgstr "Przypisany interfejs" -#: ipam/filtersets.py:1046 +#: netbox/ipam/filtersets.py:1046 msgid "Assigned VM interface" msgstr "Przypisany interfejs maszyny wirtualnej" -#: ipam/filtersets.py:1136 +#: netbox/ipam/filtersets.py:1136 msgid "IP address (ID)" msgstr "Adres IP (ID)" -#: ipam/filtersets.py:1142 ipam/models/ip.py:788 +#: netbox/ipam/filtersets.py:1142 netbox/ipam/models/ip.py:788 msgid "IP address" msgstr "Adres IP" -#: ipam/filtersets.py:1167 +#: netbox/ipam/filtersets.py:1167 msgid "Primary IPv4 (ID)" msgstr "Podstawowy IPv4 (ID)" -#: ipam/filtersets.py:1172 +#: netbox/ipam/filtersets.py:1172 msgid "Primary IPv6 (ID)" msgstr "Podstawowy IPv6 (ID)" -#: ipam/formfields.py:14 +#: netbox/ipam/formfields.py:14 msgid "Enter a valid IPv4 or IPv6 address (without a mask)." msgstr "Wprowadź prawidłowy adres IPv4 lub IPv6 (bez maski)." -#: ipam/formfields.py:32 +#: netbox/ipam/formfields.py:32 #, python-brace-format msgid "Invalid IPv4/IPv6 address format: {address}" msgstr "Nieprawidłowy format adresu IPv4/IPv6: {address}" -#: ipam/formfields.py:37 +#: netbox/ipam/formfields.py:37 msgid "This field requires an IP address without a mask." msgstr "To pole wymaga adresu IP bez maski." -#: ipam/formfields.py:39 ipam/formfields.py:61 +#: netbox/ipam/formfields.py:39 netbox/ipam/formfields.py:61 msgid "Please specify a valid IPv4 or IPv6 address." msgstr "Proszę podać prawidłowy adres IPv4 lub IPv6." -#: ipam/formfields.py:44 +#: netbox/ipam/formfields.py:44 msgid "Enter a valid IPv4 or IPv6 address (with CIDR mask)." msgstr "Wprowadź prawidłowy adres IPv4 lub IPv6 (z maską CIDR)." -#: ipam/formfields.py:56 +#: netbox/ipam/formfields.py:56 msgid "CIDR mask (e.g. /24) is required." msgstr "Wymagana jest maska CIDR (np. /24)." -#: ipam/forms/bulk_create.py:13 +#: netbox/ipam/forms/bulk_create.py:13 msgid "Address pattern" msgstr "Wzór adresu" -#: ipam/forms/bulk_edit.py:50 +#: netbox/ipam/forms/bulk_edit.py:50 msgid "Enforce unique space" msgstr "Wymuszaj unikalną przestrzeń" -#: ipam/forms/bulk_edit.py:88 +#: netbox/ipam/forms/bulk_edit.py:88 msgid "Is private" msgstr "Jest prywatny" -#: ipam/forms/bulk_edit.py:109 ipam/forms/bulk_edit.py:138 -#: ipam/forms/bulk_edit.py:163 ipam/forms/bulk_import.py:89 -#: ipam/forms/bulk_import.py:109 ipam/forms/bulk_import.py:129 -#: ipam/forms/filtersets.py:110 ipam/forms/filtersets.py:125 -#: ipam/forms/filtersets.py:148 ipam/forms/model_forms.py:96 -#: ipam/forms/model_forms.py:109 ipam/forms/model_forms.py:131 -#: ipam/forms/model_forms.py:149 ipam/models/asns.py:31 -#: ipam/models/asns.py:103 ipam/models/ip.py:71 ipam/models/ip.py:90 -#: ipam/tables/asn.py:20 ipam/tables/asn.py:45 -#: templates/ipam/aggregate.html:18 templates/ipam/asn.html:27 -#: templates/ipam/asnrange.html:19 templates/ipam/rir.html:19 +#: netbox/ipam/forms/bulk_edit.py: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/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Ć" -#: ipam/forms/bulk_edit.py:171 +#: netbox/ipam/forms/bulk_edit.py:171 msgid "Date added" msgstr "Data dodania" -#: ipam/forms/bulk_edit.py:229 ipam/forms/model_forms.py:586 -#: ipam/forms/model_forms.py:633 ipam/tables/ip.py:251 -#: templates/ipam/vlan_edit.html:37 templates/ipam/vlangroup.html:27 +#: 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/templates/ipam/vlangroup.html:27 msgid "VLAN Group" msgstr "Grupa VLAN" -#: ipam/forms/bulk_edit.py:234 ipam/forms/bulk_import.py:185 -#: ipam/forms/filtersets.py:256 ipam/forms/model_forms.py:218 -#: ipam/models/vlans.py:234 ipam/tables/ip.py:255 -#: templates/ipam/prefix.html:60 templates/ipam/vlan.html:12 -#: templates/ipam/vlan/base.html:6 templates/ipam/vlan_edit.html:10 -#: templates/wireless/wirelesslan.html:30 vpn/forms/bulk_import.py:304 -#: vpn/forms/filtersets.py:284 vpn/forms/model_forms.py:433 -#: vpn/forms/model_forms.py:452 wireless/forms/bulk_edit.py:55 -#: wireless/forms/bulk_import.py:48 wireless/forms/model_forms.py:48 -#: wireless/models.py:102 +#: 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/templates/ipam/vlan/base.html:6 +#: netbox/templates/ipam/vlan_edit.html:10 +#: netbox/templates/wireless/wirelesslan.html:30 +#: netbox/vpn/forms/bulk_import.py:304 netbox/vpn/forms/filtersets.py:284 +#: netbox/vpn/forms/model_forms.py:433 netbox/vpn/forms/model_forms.py:452 +#: netbox/wireless/forms/bulk_edit.py:55 +#: netbox/wireless/forms/bulk_import.py:48 +#: netbox/wireless/forms/model_forms.py:48 netbox/wireless/models.py:102 msgid "VLAN" msgstr "VLAN" -#: ipam/forms/bulk_edit.py:245 +#: netbox/ipam/forms/bulk_edit.py:245 msgid "Prefix length" msgstr "Długość prefiksu" -#: ipam/forms/bulk_edit.py:268 ipam/forms/filtersets.py:241 -#: templates/ipam/prefix.html:85 +#: netbox/ipam/forms/bulk_edit.py:268 netbox/ipam/forms/filtersets.py:241 +#: netbox/templates/ipam/prefix.html:85 msgid "Is a pool" msgstr "Jest basenem" -#: ipam/forms/bulk_edit.py:273 ipam/forms/bulk_edit.py:318 -#: ipam/forms/filtersets.py:248 ipam/forms/filtersets.py:293 -#: ipam/models/ip.py:272 ipam/models/ip.py:539 +#: netbox/ipam/forms/bulk_edit.py: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 msgid "Treat as fully utilized" msgstr "Traktuj jako w pełni wykorzystany" -#: ipam/forms/bulk_edit.py:287 ipam/forms/filtersets.py:171 +#: netbox/ipam/forms/bulk_edit.py:287 netbox/ipam/forms/filtersets.py:171 msgid "VLAN Assignment" msgstr "Przypisanie sieci VLAN" -#: ipam/forms/bulk_edit.py:366 ipam/models/ip.py:772 +#: netbox/ipam/forms/bulk_edit.py:366 netbox/ipam/models/ip.py:772 msgid "DNS name" msgstr "Nazwa DNS" -#: ipam/forms/bulk_edit.py:387 ipam/forms/bulk_edit.py:534 -#: ipam/forms/bulk_import.py:394 ipam/forms/bulk_import.py:469 -#: ipam/forms/bulk_import.py:495 ipam/forms/filtersets.py:390 -#: ipam/forms/filtersets.py:530 templates/ipam/fhrpgroup.html:22 -#: templates/ipam/inc/panels/fhrp_groups.html:24 -#: templates/ipam/service.html:32 templates/ipam/servicetemplate.html:19 +#: netbox/ipam/forms/bulk_edit.py: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/templates/ipam/inc/panels/fhrp_groups.html:24 +#: netbox/templates/ipam/service.html:32 +#: netbox/templates/ipam/servicetemplate.html:19 msgid "Protocol" msgstr "Protokół" -#: ipam/forms/bulk_edit.py:394 ipam/forms/filtersets.py:397 -#: ipam/tables/fhrp.py:22 templates/ipam/fhrpgroup.html:26 +#: netbox/ipam/forms/bulk_edit.py:394 netbox/ipam/forms/filtersets.py:397 +#: netbox/ipam/tables/fhrp.py:22 netbox/templates/ipam/fhrpgroup.html:26 msgid "Group ID" msgstr "Identyfikator grupy" -#: ipam/forms/bulk_edit.py:399 ipam/forms/filtersets.py:402 -#: wireless/forms/bulk_edit.py:68 wireless/forms/bulk_edit.py:115 -#: wireless/forms/bulk_import.py:62 wireless/forms/bulk_import.py:65 -#: wireless/forms/bulk_import.py:104 wireless/forms/bulk_import.py:107 -#: wireless/forms/filtersets.py:54 wireless/forms/filtersets.py:88 +#: netbox/ipam/forms/bulk_edit.py: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 msgid "Authentication type" msgstr "Typ uwierzytelniania" -#: ipam/forms/bulk_edit.py:404 ipam/forms/filtersets.py:406 +#: netbox/ipam/forms/bulk_edit.py:404 netbox/ipam/forms/filtersets.py:406 msgid "Authentication key" msgstr "klucz uwierzytelniania" -#: ipam/forms/bulk_edit.py:421 ipam/forms/filtersets.py:383 -#: ipam/forms/model_forms.py:474 netbox/navigation/menu.py:386 -#: templates/ipam/fhrpgroup.html:49 -#: templates/wireless/inc/authentication_attrs.html:5 -#: wireless/forms/bulk_edit.py:91 wireless/forms/bulk_edit.py:149 -#: wireless/forms/filtersets.py:36 wireless/forms/filtersets.py:76 -#: wireless/forms/model_forms.py:55 wireless/forms/model_forms.py:171 +#: 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/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 msgid "Authentication" msgstr "Uwierzytelnienie" -#: ipam/forms/bulk_edit.py:436 ipam/forms/model_forms.py:575 +#: netbox/ipam/forms/bulk_edit.py:436 netbox/ipam/forms/model_forms.py:608 msgid "Scope type" msgstr "Rodzaj zakresu" -#: ipam/forms/bulk_edit.py:439 ipam/forms/bulk_edit.py:453 -#: ipam/forms/model_forms.py:578 ipam/forms/model_forms.py:588 -#: ipam/tables/vlans.py:71 templates/ipam/vlangroup.html:38 +#: 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" -#: ipam/forms/bulk_edit.py:446 ipam/models/vlans.py:60 +#: netbox/ipam/forms/bulk_edit.py:446 netbox/ipam/models/vlans.py:60 msgid "VLAN ID ranges" msgstr "Zakresy identyfikatorów VLAN" -#: ipam/forms/bulk_edit.py:525 +#: netbox/ipam/forms/bulk_edit.py:525 msgid "Site & Group" msgstr "Strona & Grupa" -#: ipam/forms/bulk_edit.py:539 ipam/forms/model_forms.py:659 -#: ipam/forms/model_forms.py:691 ipam/tables/services.py:19 -#: ipam/tables/services.py:49 templates/ipam/service.html:36 -#: templates/ipam/servicetemplate.html:23 +#: netbox/ipam/forms/bulk_edit.py:539 netbox/ipam/forms/model_forms.py:692 +#: netbox/ipam/forms/model_forms.py:724 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" -#: ipam/forms/bulk_import.py:48 +#: netbox/ipam/forms/bulk_import.py:48 msgid "Import route targets" msgstr "Importuj cele trasy" -#: ipam/forms/bulk_import.py:54 +#: netbox/ipam/forms/bulk_import.py:54 msgid "Export route targets" msgstr "Cele trasy eksportu" -#: ipam/forms/bulk_import.py:92 ipam/forms/bulk_import.py:112 -#: ipam/forms/bulk_import.py:132 +#: netbox/ipam/forms/bulk_import.py:92 netbox/ipam/forms/bulk_import.py:112 +#: netbox/ipam/forms/bulk_import.py:132 msgid "Assigned RIR" msgstr "Przypisany RIR" -#: ipam/forms/bulk_import.py:182 +#: netbox/ipam/forms/bulk_import.py:182 msgid "VLAN's group (if any)" msgstr "Grupa sieci VLAN (jeśli istnieje)" -#: ipam/forms/bulk_import.py:308 +#: 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)" -#: ipam/forms/bulk_import.py:311 ipam/forms/bulk_import.py:488 -#: ipam/forms/model_forms.py:685 virtualization/filtersets.py:288 -#: virtualization/filtersets.py:327 virtualization/forms/bulk_edit.py:200 -#: virtualization/forms/bulk_edit.py:326 -#: virtualization/forms/bulk_import.py:146 -#: virtualization/forms/bulk_import.py:207 -#: virtualization/forms/filtersets.py:212 -#: virtualization/forms/filtersets.py:248 -#: virtualization/forms/model_forms.py:288 vpn/forms/bulk_import.py:93 -#: vpn/forms/bulk_import.py:290 +#: 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" -#: ipam/forms/bulk_import.py:315 +#: 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)" -#: ipam/forms/bulk_import.py:325 +#: netbox/ipam/forms/bulk_import.py:325 msgid "Is primary" msgstr "Jest podstawowy" -#: ipam/forms/bulk_import.py:326 +#: 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" -#: ipam/forms/bulk_import.py:365 +#: netbox/ipam/forms/bulk_import.py:330 +msgid "Is out-of-band" +msgstr "" + +#: netbox/ipam/forms/bulk_import.py:331 +msgid "Designate this as the out-of-band IP address for the assigned device" +msgstr "" + +#: netbox/ipam/forms/bulk_import.py:371 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" -#: ipam/forms/bulk_import.py:369 +#: netbox/ipam/forms/bulk_import.py:375 +msgid "No device specified; cannot set as out-of-band IP" +msgstr "" + +#: netbox/ipam/forms/bulk_import.py:379 +msgid "Cannot set out-of-band IP for virtual machines" +msgstr "" + +#: netbox/ipam/forms/bulk_import.py:383 msgid "No interface specified; cannot set as primary IP" msgstr "" "Nie określono interfejsu; nie można ustawić jako podstawowego adresu IP" -#: ipam/forms/bulk_import.py:398 +#: netbox/ipam/forms/bulk_import.py:387 +msgid "No interface specified; cannot set as out-of-band IP" +msgstr "" + +#: netbox/ipam/forms/bulk_import.py:422 msgid "Auth type" msgstr "Rodzaj auth" -#: ipam/forms/bulk_import.py:413 +#: netbox/ipam/forms/bulk_import.py:437 msgid "Scope type (app & model)" msgstr "Typ zakresu (aplikacja i model)" -#: ipam/forms/bulk_import.py:440 +#: netbox/ipam/forms/bulk_import.py:464 msgid "Assigned VLAN group" msgstr "Przypisana grupa VLAN" -#: ipam/forms/bulk_import.py:471 ipam/forms/bulk_import.py:497 +#: netbox/ipam/forms/bulk_import.py:495 netbox/ipam/forms/bulk_import.py:521 msgid "IP protocol" msgstr "protokół IP" -#: ipam/forms/bulk_import.py:485 +#: netbox/ipam/forms/bulk_import.py:509 msgid "Required if not assigned to a VM" msgstr "Wymagane, jeśli nie jest przypisane do maszyny wirtualnej" -#: ipam/forms/bulk_import.py:492 +#: netbox/ipam/forms/bulk_import.py:516 msgid "Required if not assigned to a device" msgstr "Wymagane, jeśli nie jest przypisane do urządzenia" -#: ipam/forms/bulk_import.py:517 +#: netbox/ipam/forms/bulk_import.py:541 #, python-brace-format msgid "{ip} is not assigned to this device/VM." msgstr "{ip} nie jest przypisany do tego urządzenia/maszyny wirtualnej." -#: ipam/forms/filtersets.py:47 ipam/forms/model_forms.py:63 -#: netbox/navigation/menu.py:189 vpn/forms/model_forms.py:410 +#: 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 msgid "Route Targets" msgstr "Cele trasy" -#: ipam/forms/filtersets.py:53 ipam/forms/model_forms.py:50 -#: vpn/forms/filtersets.py:224 vpn/forms/model_forms.py:397 +#: 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 msgid "Import targets" msgstr "Importuj cele" -#: ipam/forms/filtersets.py:58 ipam/forms/model_forms.py:55 -#: vpn/forms/filtersets.py:229 vpn/forms/model_forms.py:402 +#: 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 msgid "Export targets" msgstr "Cele eksportowe" -#: ipam/forms/filtersets.py:73 +#: netbox/ipam/forms/filtersets.py:73 msgid "Imported by VRF" msgstr "Importowane przez VRF" -#: ipam/forms/filtersets.py:78 +#: netbox/ipam/forms/filtersets.py:78 msgid "Exported by VRF" msgstr "Eksportowane przez VRF" -#: ipam/forms/filtersets.py:87 ipam/tables/ip.py:89 templates/ipam/rir.html:30 +#: netbox/ipam/forms/filtersets.py:87 netbox/ipam/tables/ip.py:89 +#: netbox/templates/ipam/rir.html:30 msgid "Private" msgstr "Prywatny" -#: ipam/forms/filtersets.py:105 ipam/forms/filtersets.py:191 -#: ipam/forms/filtersets.py:272 ipam/forms/filtersets.py:326 +#: netbox/ipam/forms/filtersets.py:105 netbox/ipam/forms/filtersets.py:191 +#: netbox/ipam/forms/filtersets.py:272 netbox/ipam/forms/filtersets.py:326 msgid "Address family" msgstr "Rodzina adresu" -#: ipam/forms/filtersets.py:119 templates/ipam/asnrange.html:25 +#: netbox/ipam/forms/filtersets.py:119 netbox/templates/ipam/asnrange.html:25 msgid "Range" msgstr "Zasięg" -#: ipam/forms/filtersets.py:128 +#: netbox/ipam/forms/filtersets.py:128 msgid "Start" msgstr "Rozpocznij" -#: ipam/forms/filtersets.py:132 +#: netbox/ipam/forms/filtersets.py:132 msgid "End" msgstr "Koniec" -#: ipam/forms/filtersets.py:186 +#: netbox/ipam/forms/filtersets.py:186 msgid "Search within" msgstr "Szukaj w obrębie" -#: ipam/forms/filtersets.py:207 ipam/forms/filtersets.py:342 +#: netbox/ipam/forms/filtersets.py:207 netbox/ipam/forms/filtersets.py:342 msgid "Present in VRF" msgstr "Obecny w VRF" -#: ipam/forms/filtersets.py:311 +#: netbox/ipam/forms/filtersets.py:311 msgid "Device/VM" msgstr "Urządzenie/VM" -#: ipam/forms/filtersets.py:321 +#: netbox/ipam/forms/filtersets.py:321 msgid "Parent Prefix" msgstr "Prefiks nadrzędny" -#: ipam/forms/filtersets.py:347 +#: netbox/ipam/forms/filtersets.py:347 msgid "Assigned Device" msgstr "Przypisane urządzenie" -#: ipam/forms/filtersets.py:352 +#: netbox/ipam/forms/filtersets.py:352 msgid "Assigned VM" msgstr "Przypisana maszyna maszynowa" -#: ipam/forms/filtersets.py:366 +#: netbox/ipam/forms/filtersets.py:366 msgid "Assigned to an interface" msgstr "Przypisany do interfejsu" -#: ipam/forms/filtersets.py:373 templates/ipam/ipaddress.html:51 +#: netbox/ipam/forms/filtersets.py:373 netbox/templates/ipam/ipaddress.html:51 msgid "DNS Name" msgstr "Nazwa DNS" -#: ipam/forms/filtersets.py:416 ipam/models/vlans.py:235 ipam/tables/ip.py:176 -#: ipam/tables/vlans.py:82 ipam/views.py:971 netbox/navigation/menu.py:193 -#: netbox/navigation/menu.py:195 +#: 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 msgid "VLANs" msgstr "sieci VLAN" -#: ipam/forms/filtersets.py:457 +#: netbox/ipam/forms/filtersets.py:457 msgid "Contains VLAN ID" msgstr "Zawiera identyfikator VLAN" -#: ipam/forms/filtersets.py:513 ipam/models/vlans.py:176 -#: templates/ipam/vlan.html:31 +#: netbox/ipam/forms/filtersets.py:513 netbox/ipam/models/vlans.py:192 +#: netbox/templates/ipam/vlan.html:31 msgid "VLAN ID" msgstr "IDENTYFIKATOR VLAN" -#: ipam/forms/filtersets.py:556 ipam/forms/model_forms.py:320 -#: ipam/forms/model_forms.py:713 ipam/forms/model_forms.py:739 -#: ipam/tables/vlans.py:195 templates/virtualization/virtualdisk.html:21 -#: templates/virtualization/virtualmachine.html:12 -#: templates/virtualization/vminterface.html:21 -#: templates/vpn/tunneltermination.html:25 -#: virtualization/forms/filtersets.py:197 -#: virtualization/forms/filtersets.py:242 -#: virtualization/forms/model_forms.py:220 -#: virtualization/tables/virtualmachines.py:135 -#: virtualization/tables/virtualmachines.py:190 vpn/choices.py:45 -#: vpn/forms/filtersets.py:293 vpn/forms/model_forms.py:160 -#: vpn/forms/model_forms.py:171 vpn/forms/model_forms.py:273 -#: vpn/forms/model_forms.py:454 +#: netbox/ipam/forms/filtersets.py: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" -#: ipam/forms/model_forms.py:80 templates/ipam/routetarget.html:10 +#: netbox/ipam/forms/model_forms.py:80 +#: netbox/templates/ipam/routetarget.html:10 msgid "Route Target" msgstr "Cel trasy" -#: ipam/forms/model_forms.py:114 ipam/tables/ip.py:117 -#: templates/ipam/aggregate.html:11 templates/ipam/prefix.html:38 +#: netbox/ipam/forms/model_forms.py:114 netbox/ipam/tables/ip.py:117 +#: netbox/templates/ipam/aggregate.html:11 +#: netbox/templates/ipam/prefix.html:38 msgid "Aggregate" msgstr "agregat" -#: ipam/forms/model_forms.py:135 templates/ipam/asnrange.html:12 +#: netbox/ipam/forms/model_forms.py:135 netbox/templates/ipam/asnrange.html:12 msgid "ASN Range" msgstr "Zakres ASN" -#: ipam/forms/model_forms.py:231 +#: netbox/ipam/forms/model_forms.py:231 msgid "Site/VLAN Assignment" msgstr "Przypisanie witryny/sieci VLAN" -#: ipam/forms/model_forms.py:259 templates/ipam/iprange.html:10 +#: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10 msgid "IP Range" msgstr "Zakres IP" -#: ipam/forms/model_forms.py:295 ipam/forms/model_forms.py:321 -#: ipam/forms/model_forms.py:473 templates/ipam/fhrpgroup.html:19 +#: 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 msgid "FHRP Group" msgstr "Grupa FHRP" -#: ipam/forms/model_forms.py:310 +#: netbox/ipam/forms/model_forms.py:310 msgid "Make this the primary IP for the device/VM" msgstr "Ustaw to podstawowy adres IP urządzenia/maszyny wirtualnej" -#: ipam/forms/model_forms.py:325 +#: netbox/ipam/forms/model_forms.py:314 +msgid "Make this the out-of-band IP for the device" +msgstr "" + +#: netbox/ipam/forms/model_forms.py:329 msgid "NAT IP (Inside)" msgstr "NAT IP (wewnątrz)" -#: ipam/forms/model_forms.py:384 +#: netbox/ipam/forms/model_forms.py:391 msgid "An IP address can only be assigned to a single object." msgstr "Adres IP może być przypisany tylko do jednego obiektu." -#: ipam/forms/model_forms.py:390 ipam/models/ip.py:897 -msgid "" -"Cannot reassign IP address while it is designated as the primary IP for the " -"parent object" +#: netbox/ipam/forms/model_forms.py:398 +msgid "Cannot reassign primary IP address for the parent device/VM" msgstr "" -"Nie można ponownie przypisać adresu IP, gdy jest on wyznaczony jako główny " -"adres IP dla obiektu nadrzędnego" -#: ipam/forms/model_forms.py:400 +#: netbox/ipam/forms/model_forms.py:402 +msgid "Cannot reassign out-of-Band IP address for the parent device" +msgstr "" + +#: netbox/ipam/forms/model_forms.py:412 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." -#: ipam/forms/model_forms.py:475 +#: netbox/ipam/forms/model_forms.py:420 +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 msgid "Virtual IP Address" msgstr "Wirtualny adres IP" -#: ipam/forms/model_forms.py:560 +#: netbox/ipam/forms/model_forms.py:593 msgid "Assignment already exists" msgstr "Przydział już istnieje" -#: ipam/forms/model_forms.py:569 templates/ipam/vlangroup.html:42 +#: netbox/ipam/forms/model_forms.py:602 +#: netbox/templates/ipam/vlangroup.html:42 msgid "VLAN IDs" msgstr "Identyfikatory sieci VLAN" -#: ipam/forms/model_forms.py:587 +#: netbox/ipam/forms/model_forms.py:620 msgid "Child VLANs" msgstr "Dziecięce sieci VLAN" -#: ipam/forms/model_forms.py:664 ipam/forms/model_forms.py:696 +#: netbox/ipam/forms/model_forms.py:697 netbox/ipam/forms/model_forms.py:729 msgid "" "Comma-separated list of one or more port numbers. A range may be specified " "using a hyphen." @@ -9260,133 +9915,134 @@ msgstr "" "Oddzielona przecinkami lista jednego lub więcej numerów portów. Zakres można" " określić za pomocą myślnika." -#: ipam/forms/model_forms.py:669 templates/ipam/servicetemplate.html:12 +#: netbox/ipam/forms/model_forms.py:702 +#: netbox/templates/ipam/servicetemplate.html:12 msgid "Service Template" msgstr "Szablon usługi" -#: ipam/forms/model_forms.py:716 +#: netbox/ipam/forms/model_forms.py:749 msgid "Port(s)" msgstr "Port (y)" -#: ipam/forms/model_forms.py:717 ipam/forms/model_forms.py:745 -#: templates/ipam/service.html:21 +#: netbox/ipam/forms/model_forms.py:750 netbox/ipam/forms/model_forms.py:778 +#: netbox/templates/ipam/service.html:21 msgid "Service" msgstr "Serwis" -#: ipam/forms/model_forms.py:730 +#: netbox/ipam/forms/model_forms.py:763 msgid "Service template" msgstr "Szablon usługi" -#: ipam/forms/model_forms.py:742 +#: netbox/ipam/forms/model_forms.py:775 msgid "From Template" msgstr "Z szablonu" -#: ipam/forms/model_forms.py:743 +#: netbox/ipam/forms/model_forms.py:776 msgid "Custom" msgstr "Niestandardowe" -#: ipam/forms/model_forms.py:773 +#: netbox/ipam/forms/model_forms.py:806 msgid "" "Must specify name, protocol, and port(s) if not using a service template." msgstr "" "Musi podać nazwę, protokół i port (y), jeśli nie używasz szablonu usługi." -#: ipam/models/asns.py:34 +#: netbox/ipam/models/asns.py:34 msgid "start" msgstr "start" -#: ipam/models/asns.py:51 +#: netbox/ipam/models/asns.py:51 msgid "ASN range" msgstr "Zakres ASN" -#: ipam/models/asns.py:52 +#: netbox/ipam/models/asns.py:52 msgid "ASN ranges" msgstr "Zakresy ASN" -#: ipam/models/asns.py:72 +#: netbox/ipam/models/asns.py:72 #, python-brace-format msgid "Starting ASN ({start}) must be lower than ending ASN ({end})." msgstr "" "Rozpoczęcie ASN ({start}) musi być niższy niż kończący się ASN ({end})." -#: ipam/models/asns.py:104 +#: netbox/ipam/models/asns.py:104 msgid "Regional Internet Registry responsible for this AS number space" msgstr "" "Regionalny Rejestr Internetowy odpowiedzialny za tę przestrzeń numeryczną AS" -#: ipam/models/asns.py:109 +#: netbox/ipam/models/asns.py:109 msgid "16- or 32-bit autonomous system number" msgstr "16- lub 32-bitowy autonomiczny numer systemu" -#: ipam/models/fhrp.py:22 +#: netbox/ipam/models/fhrp.py:22 msgid "group ID" msgstr "ID grupy" -#: ipam/models/fhrp.py:30 ipam/models/services.py:22 +#: netbox/ipam/models/fhrp.py:30 netbox/ipam/models/services.py:22 msgid "protocol" msgstr "protokół" -#: ipam/models/fhrp.py:38 wireless/models.py:28 +#: netbox/ipam/models/fhrp.py:38 netbox/wireless/models.py:28 msgid "authentication type" msgstr "typ uwierzytelniania" -#: ipam/models/fhrp.py:43 +#: netbox/ipam/models/fhrp.py:43 msgid "authentication key" msgstr "klucz uwierzytelniania" -#: ipam/models/fhrp.py:56 +#: netbox/ipam/models/fhrp.py:56 msgid "FHRP group" msgstr "Grupa FHRP" -#: ipam/models/fhrp.py:57 +#: netbox/ipam/models/fhrp.py:57 msgid "FHRP groups" msgstr "Grupy FHRP" -#: ipam/models/fhrp.py:113 +#: netbox/ipam/models/fhrp.py:113 msgid "FHRP group assignment" msgstr "Przydział grupy FHRP" -#: ipam/models/fhrp.py:114 +#: netbox/ipam/models/fhrp.py:114 msgid "FHRP group assignments" msgstr "Zadania grupowe FHRP" -#: ipam/models/ip.py:65 +#: netbox/ipam/models/ip.py:65 msgid "private" msgstr "prywatny" -#: ipam/models/ip.py:66 +#: netbox/ipam/models/ip.py:66 msgid "IP space managed by this RIR is considered private" msgstr "Przestrzeń IP zarządzana przez ten RIR jest uważana za prywatną" -#: ipam/models/ip.py:72 netbox/navigation/menu.py:182 +#: netbox/ipam/models/ip.py:72 netbox/netbox/navigation/menu.py:182 msgid "RIRs" msgstr "RIR" -#: ipam/models/ip.py:84 +#: netbox/ipam/models/ip.py:84 msgid "IPv4 or IPv6 network" msgstr "Sieć IPv4 lub IPv6" -#: ipam/models/ip.py:91 +#: netbox/ipam/models/ip.py:91 msgid "Regional Internet Registry responsible for this IP space" msgstr "Regionalny Rejestr Internetowy odpowiedzialny za tę przestrzeń IP" -#: ipam/models/ip.py:101 +#: netbox/ipam/models/ip.py:101 msgid "date added" msgstr "data dodania" -#: ipam/models/ip.py:115 +#: netbox/ipam/models/ip.py:115 msgid "aggregate" msgstr "agregat" -#: ipam/models/ip.py:116 +#: netbox/ipam/models/ip.py:116 msgid "aggregates" msgstr "agregaty" -#: ipam/models/ip.py:132 +#: netbox/ipam/models/ip.py:132 msgid "Cannot create aggregate with /0 mask." msgstr "Nie można utworzyć agregatu z maską /0." -#: ipam/models/ip.py:144 +#: netbox/ipam/models/ip.py:144 #, python-brace-format msgid "" "Aggregates cannot overlap. {prefix} is already covered by an existing " @@ -9395,7 +10051,7 @@ msgstr "" "Agregaty nie mogą się nakładać. {prefix} jest już objęty istniejącym " "agregatem ({aggregate})." -#: ipam/models/ip.py:158 +#: netbox/ipam/models/ip.py:158 #, python-brace-format msgid "" "Prefixes cannot overlap aggregates. {prefix} covers an existing aggregate " @@ -9404,257 +10060,275 @@ msgstr "" "Prefiksy nie mogą nakładać się na agregaty. {prefix} obejmuje istniejące " "kruszywo ({aggregate})." -#: ipam/models/ip.py:200 ipam/models/ip.py:737 vpn/models/tunnels.py:114 +#: netbox/ipam/models/ip.py:200 netbox/ipam/models/ip.py:737 +#: netbox/vpn/models/tunnels.py:114 msgid "role" msgstr "roli" -#: ipam/models/ip.py:201 +#: netbox/ipam/models/ip.py:201 msgid "roles" msgstr "ról" -#: ipam/models/ip.py:217 ipam/models/ip.py:293 +#: netbox/ipam/models/ip.py:217 netbox/ipam/models/ip.py:293 msgid "prefix" msgstr "prefiks" -#: ipam/models/ip.py:218 +#: netbox/ipam/models/ip.py:218 msgid "IPv4 or IPv6 network with mask" msgstr "Sieć IPv4 lub IPv6 z maską" -#: ipam/models/ip.py:254 +#: netbox/ipam/models/ip.py:254 msgid "Operational status of this prefix" msgstr "Status operacyjny tego prefiksu" -#: ipam/models/ip.py:262 +#: netbox/ipam/models/ip.py:262 msgid "The primary function of this prefix" msgstr "Podstawowa funkcja tego prefiksu" -#: ipam/models/ip.py:265 +#: netbox/ipam/models/ip.py:265 msgid "is a pool" msgstr "jest basenem" -#: ipam/models/ip.py:267 +#: netbox/ipam/models/ip.py:267 msgid "All IP addresses within this prefix are considered usable" msgstr "Wszystkie adresy IP w tym prefiksie są uważane za użyteczne" -#: ipam/models/ip.py:270 ipam/models/ip.py:537 +#: netbox/ipam/models/ip.py:270 netbox/ipam/models/ip.py:537 msgid "mark utilized" msgstr "użyty znak" -#: ipam/models/ip.py:294 +#: netbox/ipam/models/ip.py:294 msgid "prefixes" msgstr "prefiksy" -#: ipam/models/ip.py:317 +#: netbox/ipam/models/ip.py:317 msgid "Cannot create prefix with /0 mask." msgstr "Nie można utworzyć prefiksu z maską /0." -#: ipam/models/ip.py:324 ipam/models/ip.py:874 +#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:874 #, python-brace-format msgid "VRF {vrf}" msgstr "VRF {vrf}" -#: ipam/models/ip.py:324 ipam/models/ip.py:874 +#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:874 msgid "global table" msgstr "tabela globalna" -#: ipam/models/ip.py:326 +#: netbox/ipam/models/ip.py:326 #, python-brace-format msgid "Duplicate prefix found in {table}: {prefix}" msgstr "Zduplikowany prefiks znaleziony w {table}: {prefix}" -#: ipam/models/ip.py:495 +#: netbox/ipam/models/ip.py:495 msgid "start address" msgstr "adres początkowy" -#: ipam/models/ip.py:496 ipam/models/ip.py:500 ipam/models/ip.py:712 +#: netbox/ipam/models/ip.py:496 netbox/ipam/models/ip.py:500 +#: netbox/ipam/models/ip.py:712 msgid "IPv4 or IPv6 address (with mask)" msgstr "Adres IPv4 lub IPv6 (z maską)" -#: ipam/models/ip.py:499 +#: netbox/ipam/models/ip.py:499 msgid "end address" msgstr "adres końcowy" -#: ipam/models/ip.py:526 +#: netbox/ipam/models/ip.py:526 msgid "Operational status of this range" msgstr "Stan operacyjny tego zakresu" -#: ipam/models/ip.py:534 +#: netbox/ipam/models/ip.py:534 msgid "The primary function of this range" msgstr "Podstawowa funkcja tego zakresu" -#: ipam/models/ip.py:548 +#: netbox/ipam/models/ip.py:548 msgid "IP range" msgstr "Zakres IP" -#: ipam/models/ip.py:549 +#: netbox/ipam/models/ip.py:549 msgid "IP ranges" msgstr "Zakresy IP" -#: ipam/models/ip.py:565 +#: netbox/ipam/models/ip.py:565 msgid "Starting and ending IP address versions must match" msgstr "Początkowe i kończące wersje adresu IP muszą być zgodne" -#: ipam/models/ip.py:571 +#: netbox/ipam/models/ip.py:571 msgid "Starting and ending IP address masks must match" msgstr "Początkowe i kończące maski adresów IP muszą być zgodne" -#: ipam/models/ip.py:578 +#: netbox/ipam/models/ip.py:578 #, python-brace-format msgid "" "Ending address must be greater than the starting address ({start_address})" msgstr "Adres końcowy musi być większy niż adres początkowy ({start_address})" -#: ipam/models/ip.py:590 +#: netbox/ipam/models/ip.py:590 #, python-brace-format msgid "Defined addresses overlap with range {overlapping_range} in VRF {vrf}" msgstr "" "Zdefiniowane adresy pokrywają się z zakresem {overlapping_range} w VRF {vrf}" -#: ipam/models/ip.py:599 +#: netbox/ipam/models/ip.py:599 #, python-brace-format msgid "Defined range exceeds maximum supported size ({max_size})" msgstr "" "Zdefiniowany zakres przekracza maksymalny obsługiwany rozmiar ({max_size})" -#: ipam/models/ip.py:711 tenancy/models/contacts.py:82 +#: netbox/ipam/models/ip.py:711 netbox/tenancy/models/contacts.py:82 msgid "address" msgstr "przemawiać" -#: ipam/models/ip.py:734 +#: netbox/ipam/models/ip.py:734 msgid "The operational status of this IP" msgstr "Status operacyjny niniejszego IP" -#: ipam/models/ip.py:741 +#: netbox/ipam/models/ip.py:741 msgid "The functional role of this IP" msgstr "Funkcjonalna rola tego IP" -#: ipam/models/ip.py:765 templates/ipam/ipaddress.html:72 +#: netbox/ipam/models/ip.py:765 netbox/templates/ipam/ipaddress.html:72 msgid "NAT (inside)" msgstr "NAT (wewnątrz)" -#: ipam/models/ip.py:766 +#: netbox/ipam/models/ip.py:766 msgid "The IP for which this address is the \"outside\" IP" msgstr "IP, dla którego ten adres jest „zewnętrznym” adresem IP" -#: ipam/models/ip.py:773 +#: netbox/ipam/models/ip.py:773 msgid "Hostname or FQDN (not case-sensitive)" msgstr "Nazwa hosta lub FQDN (nie rozróżnia wielkości liter)" -#: ipam/models/ip.py:789 ipam/models/services.py:94 +#: netbox/ipam/models/ip.py:789 netbox/ipam/models/services.py:94 msgid "IP addresses" msgstr "Adresy IP" -#: ipam/models/ip.py:845 +#: netbox/ipam/models/ip.py:845 msgid "Cannot create IP address with /0 mask." msgstr "Nie można utworzyć adresu IP z maską /0." -#: ipam/models/ip.py:851 +#: netbox/ipam/models/ip.py:851 #, python-brace-format msgid "{ip} is a network ID, which may not be assigned to an interface." msgstr "" "{ip} jest identyfikatorem sieci, który może nie być przypisany do " "interfejsu." -#: ipam/models/ip.py:862 +#: netbox/ipam/models/ip.py:862 #, python-brace-format msgid "" "{ip} is a broadcast address, which may not be assigned to an interface." msgstr "" "{ip} jest adresem nadawczym, który nie może być przypisany do interfejsu." -#: ipam/models/ip.py:876 +#: netbox/ipam/models/ip.py:876 #, python-brace-format msgid "Duplicate IP address found in {table}: {ipaddress}" msgstr "Zduplikowany adres IP znaleziony w {table}: {ipaddress}" -#: ipam/models/ip.py:903 +#: netbox/ipam/models/ip.py:897 +msgid "" +"Cannot reassign IP address while it is designated as the primary IP for the " +"parent object" +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 msgid "Only IPv6 addresses can be assigned SLAAC status" msgstr "Tylko adresy IPv6 mogą mieć przypisany status SLAAC" -#: ipam/models/services.py:33 +#: netbox/ipam/models/services.py:33 msgid "port numbers" msgstr "numery portów" -#: ipam/models/services.py:59 +#: netbox/ipam/models/services.py:59 msgid "service template" msgstr "szablon usługi" -#: ipam/models/services.py:60 +#: netbox/ipam/models/services.py:60 msgid "service templates" msgstr "szablony usług" -#: ipam/models/services.py:95 +#: netbox/ipam/models/services.py:95 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" -#: ipam/models/services.py:102 +#: netbox/ipam/models/services.py:102 msgid "service" msgstr "usługi" -#: ipam/models/services.py:103 +#: netbox/ipam/models/services.py:103 msgid "services" msgstr "usług" -#: ipam/models/services.py:117 +#: netbox/ipam/models/services.py:117 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ą." -#: ipam/models/services.py:119 +#: netbox/ipam/models/services.py:119 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ą." -#: ipam/models/vlans.py:85 +#: netbox/ipam/models/vlans.py:85 msgid "VLAN groups" msgstr "Grupy VLAN" -#: ipam/models/vlans.py:95 +#: netbox/ipam/models/vlans.py:95 msgid "Cannot set scope_type without scope_id." msgstr "Nie można ustawić typu skope_bez identyfikatora scope_id." -#: ipam/models/vlans.py:97 +#: netbox/ipam/models/vlans.py:97 msgid "Cannot set scope_id without scope_type." msgstr "Nie można ustawić scope_id bez scope_type." -#: ipam/models/vlans.py:101 +#: netbox/ipam/models/vlans.py:105 +#, python-brace-format +msgid "Starting VLAN ID in range ({value}) cannot be less than {minimum}" +msgstr "" + +#: netbox/ipam/models/vlans.py:111 +#, python-brace-format +msgid "Ending VLAN ID in range ({value}) cannot exceed {maximum}" +msgstr "" + +#: 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 "" + +#: netbox/ipam/models/vlans.py:124 msgid "Ranges cannot overlap." msgstr "Zakresy nie mogą się nakładać." -#: ipam/models/vlans.py:106 -#, python-brace-format -msgid "" -"Maximum child VID must be greater than or equal to minimum child VID " -"({value})" -msgstr "" -"Maksymalny VID dziecka musi być większy lub równy minimalnej wartości VID " -"dziecka ({value})" - -#: ipam/models/vlans.py:165 +#: netbox/ipam/models/vlans.py:181 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)" -#: ipam/models/vlans.py:173 +#: netbox/ipam/models/vlans.py:189 msgid "VLAN group (optional)" msgstr "Grupa VLAN (opcjonalnie)" -#: ipam/models/vlans.py:181 +#: netbox/ipam/models/vlans.py:197 msgid "Numeric VLAN ID (1-4094)" msgstr "Numeryczny identyfikator sieci VLAN (1-4094)" -#: ipam/models/vlans.py:199 +#: netbox/ipam/models/vlans.py:215 msgid "Operational status of this VLAN" msgstr "Stan operacyjny tej sieci VLAN" -#: ipam/models/vlans.py:207 +#: netbox/ipam/models/vlans.py:223 msgid "The primary function of this VLAN" msgstr "Podstawowa funkcja tej VLAN" -#: ipam/models/vlans.py:250 +#: netbox/ipam/models/vlans.py:266 #, python-brace-format msgid "" "VLAN is assigned to group {group} (scope: {scope}); cannot also assign to " @@ -9663,165 +10337,167 @@ msgstr "" "VLAN jest przypisana do grupy {group} (zakres: {scope}); nie można również " "przypisać do witryny {site}." -#: ipam/models/vlans.py:259 +#: netbox/ipam/models/vlans.py:275 #, 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}" -#: ipam/models/vrfs.py:30 +#: netbox/ipam/models/vrfs.py:30 msgid "route distinguisher" msgstr "rozróżniacz trasy" -#: ipam/models/vrfs.py:31 +#: netbox/ipam/models/vrfs.py:31 msgid "Unique route distinguisher (as defined in RFC 4364)" msgstr "Unikalny rozróżniacz trasy (zgodnie z definicją w RFC 4364)" -#: ipam/models/vrfs.py:42 +#: netbox/ipam/models/vrfs.py:42 msgid "enforce unique space" msgstr "egzekwuj unikalną przestrzeń" -#: ipam/models/vrfs.py:43 +#: netbox/ipam/models/vrfs.py:43 msgid "Prevent duplicate prefixes/IP addresses within this VRF" msgstr "Zapobiegaj duplikowaniu prefiksów / adresów IP w tym VRF" -#: ipam/models/vrfs.py:63 netbox/navigation/menu.py:186 -#: netbox/navigation/menu.py:188 +#: netbox/ipam/models/vrfs.py:63 netbox/netbox/navigation/menu.py:186 +#: netbox/netbox/navigation/menu.py:188 msgid "VRFs" msgstr "VRF" -#: ipam/models/vrfs.py:82 +#: netbox/ipam/models/vrfs.py:82 msgid "Route target value (formatted in accordance with RFC 4360)" msgstr "Wartość docelowa trasy (sformatowana zgodnie z RFC 4360)" -#: ipam/models/vrfs.py:94 +#: netbox/ipam/models/vrfs.py:94 msgid "route target" msgstr "cel trasy" -#: ipam/models/vrfs.py:95 +#: netbox/ipam/models/vrfs.py:95 msgid "route targets" msgstr "cele trasy" -#: ipam/tables/asn.py:52 +#: netbox/ipam/tables/asn.py:52 msgid "ASDOT" msgstr "ASDOT" -#: ipam/tables/asn.py:57 +#: netbox/ipam/tables/asn.py:57 msgid "Site Count" msgstr "Liczba witryn" -#: ipam/tables/asn.py:62 +#: netbox/ipam/tables/asn.py:62 msgid "Provider Count" msgstr "Liczba dostawców" -#: ipam/tables/ip.py:95 netbox/navigation/menu.py:179 -#: netbox/navigation/menu.py:181 +#: netbox/ipam/tables/ip.py:95 netbox/netbox/navigation/menu.py:179 +#: netbox/netbox/navigation/menu.py:181 msgid "Aggregates" msgstr "Agregaty" -#: ipam/tables/ip.py:125 +#: netbox/ipam/tables/ip.py:125 msgid "Added" msgstr "Dodano" -#: ipam/tables/ip.py:128 ipam/tables/ip.py:166 ipam/tables/vlans.py:142 -#: ipam/views.py:346 netbox/navigation/menu.py:165 -#: netbox/navigation/menu.py:167 templates/ipam/vlan.html:84 +#: 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 msgid "Prefixes" msgstr "Prefiksy" -#: ipam/tables/ip.py:131 ipam/tables/ip.py:270 ipam/tables/ip.py:324 -#: ipam/tables/vlans.py:86 templates/dcim/device.html:260 -#: templates/ipam/aggregate.html:24 templates/ipam/iprange.html:29 -#: templates/ipam/prefix.html:106 +#: 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/templates/dcim/device.html:260 +#: netbox/templates/ipam/aggregate.html:24 +#: netbox/templates/ipam/iprange.html:29 netbox/templates/ipam/prefix.html:106 msgid "Utilization" msgstr "Wykorzystanie" -#: ipam/tables/ip.py:171 netbox/navigation/menu.py:161 +#: netbox/ipam/tables/ip.py:171 netbox/netbox/navigation/menu.py:161 msgid "IP Ranges" msgstr "Zakresy IP" -#: ipam/tables/ip.py:221 +#: netbox/ipam/tables/ip.py:221 msgid "Prefix (Flat)" msgstr "Prefiks (płaski)" -#: ipam/tables/ip.py:225 +#: netbox/ipam/tables/ip.py:225 msgid "Depth" msgstr "Głębokość" -#: ipam/tables/ip.py:262 +#: netbox/ipam/tables/ip.py:262 msgid "Pool" msgstr "Basen" -#: ipam/tables/ip.py:266 ipam/tables/ip.py:320 +#: netbox/ipam/tables/ip.py:266 netbox/ipam/tables/ip.py:320 msgid "Marked Utilized" msgstr "Oznaczone Używane" -#: ipam/tables/ip.py:304 +#: netbox/ipam/tables/ip.py:304 msgid "Start address" msgstr "Adres początkowy" -#: ipam/tables/ip.py:383 +#: netbox/ipam/tables/ip.py:383 msgid "NAT (Inside)" msgstr "NAT (Wewnątrz)" -#: ipam/tables/ip.py:388 +#: netbox/ipam/tables/ip.py:388 msgid "NAT (Outside)" msgstr "NAT (na zewnątrz)" -#: ipam/tables/ip.py:393 +#: netbox/ipam/tables/ip.py:393 msgid "Assigned" msgstr "Przypisany" -#: ipam/tables/ip.py:429 templates/vpn/l2vpntermination.html:16 -#: vpn/forms/filtersets.py:240 +#: netbox/ipam/tables/ip.py:429 netbox/templates/vpn/l2vpntermination.html:16 +#: netbox/vpn/forms/filtersets.py:240 msgid "Assigned Object" msgstr "Przypisany obiekt" -#: ipam/tables/vlans.py:68 +#: netbox/ipam/tables/vlans.py:68 msgid "Scope Type" msgstr "Rodzaj zakresu" -#: ipam/tables/vlans.py:76 +#: netbox/ipam/tables/vlans.py:76 msgid "VID Ranges" msgstr "Zakresy VID" -#: ipam/tables/vlans.py:111 ipam/tables/vlans.py:214 -#: templates/dcim/inc/interface_vlans_table.html:4 +#: netbox/ipam/tables/vlans.py:111 netbox/ipam/tables/vlans.py:214 +#: netbox/templates/dcim/inc/interface_vlans_table.html:4 msgid "VID" msgstr "VIDEO" -#: ipam/tables/vrfs.py:30 +#: netbox/ipam/tables/vrfs.py:30 msgid "RD" msgstr "RD." -#: ipam/tables/vrfs.py:33 +#: netbox/ipam/tables/vrfs.py:33 msgid "Unique" msgstr "Wyjątkowy" -#: ipam/tables/vrfs.py:37 vpn/tables/l2vpn.py:27 +#: netbox/ipam/tables/vrfs.py:37 netbox/vpn/tables/l2vpn.py:27 msgid "Import Targets" msgstr "Importuj cele" -#: ipam/tables/vrfs.py:42 vpn/tables/l2vpn.py:32 +#: netbox/ipam/tables/vrfs.py:42 netbox/vpn/tables/l2vpn.py:32 msgid "Export Targets" msgstr "Cele eksportu" -#: ipam/validators.py:9 +#: netbox/ipam/validators.py:9 #, python-brace-format msgid "{prefix} is not a valid prefix. Did you mean {suggested}?" msgstr "" "{prefix} nie jest prawidłowym prefiksem. Czy chodziło Ci o {suggested}?" -#: ipam/validators.py:16 +#: netbox/ipam/validators.py:16 #, python-format msgid "The prefix length must be less than or equal to %(limit_value)s." msgstr "Długość przedrostka musi być mniejsza niż lub równa %(limit_value)s." -#: ipam/validators.py:24 +#: netbox/ipam/validators.py:24 #, python-format msgid "The prefix length must be greater than or equal to %(limit_value)s." msgstr "Długość przedrostka musi być większa niż lub równa %(limit_value)s." -#: ipam/validators.py:33 +#: netbox/ipam/validators.py:33 msgid "" "Only alphanumeric characters, asterisks, hyphens, periods, and underscores " "are allowed in DNS names" @@ -9829,31 +10505,31 @@ msgstr "" "W nazwach DNS dozwolone są tylko znaki alfanumeryczne, gwiazdki, łączniki, " "kropki i podkreślenia" -#: ipam/views.py:533 +#: netbox/ipam/views.py:533 msgid "Child Prefixes" msgstr "Prefiksy podrzędne" -#: ipam/views.py:569 +#: netbox/ipam/views.py:569 msgid "Child Ranges" msgstr "Zakresy dla dzieci" -#: ipam/views.py:898 +#: netbox/ipam/views.py:898 msgid "Related IPs" msgstr "Powiązane adresy IP" -#: ipam/views.py:1127 +#: netbox/ipam/views.py:1127 msgid "Device Interfaces" msgstr "Interfejsy urządzeń" -#: ipam/views.py:1145 +#: netbox/ipam/views.py:1145 msgid "VM Interfaces" msgstr "Interfejsy VM" -#: netbox/api/fields.py:65 +#: netbox/netbox/api/fields.py:65 msgid "This field may not be blank." msgstr "To pole może nie być puste." -#: netbox/api/fields.py:70 +#: netbox/netbox/api/fields.py:70 msgid "" "Value must be passed directly (e.g. \"foo\": 123); do not use a dictionary " "or list." @@ -9861,331 +10537,344 @@ msgstr "" "Wartość musi być przekazana bezpośrednio (np. „foo”: 123); nie używaj " "słownika ani listy." -#: netbox/api/fields.py:91 +#: netbox/netbox/api/fields.py:91 #, python-brace-format msgid "{value} is not a valid choice." msgstr "{value} Nie jest ważnym wyborem." -#: netbox/api/fields.py:104 +#: netbox/netbox/api/fields.py:104 #, python-brace-format msgid "Invalid content type: {content_type}" msgstr "Nieprawidłowy typ zawartości: {content_type}" -#: netbox/api/fields.py:105 +#: netbox/netbox/api/fields.py:105 msgid "Invalid value. Specify a content type as '.'." msgstr "" "Nieprawidłowa wartość. Określ typ zawartości jako " "'.”." -#: netbox/api/fields.py:167 +#: netbox/netbox/api/fields.py:167 msgid "Ranges must be specified in the form (lower, upper)." msgstr "Zakresy muszą być określone w formularzu (dolny, górny)." -#: netbox/api/fields.py:169 +#: netbox/netbox/api/fields.py:169 msgid "Range boundaries must be defined as integers." msgstr "Granice zakresu muszą być zdefiniowane jako liczby całkowite." -#: netbox/api/serializers/fields.py:40 +#: netbox/netbox/api/serializers/fields.py:40 #, python-brace-format msgid "{class_name} must implement get_view_name()" msgstr "{class_name} musi zaimplementować get_view_name ()" -#: netbox/authentication/__init__.py:138 +#: netbox/netbox/authentication/__init__.py:138 #, python-brace-format msgid "Invalid permission {permission} for model {model}" msgstr "Nieprawidłowe uprawnienia {permission} dla modelu {model}" -#: netbox/choices.py:49 +#: netbox/netbox/choices.py:49 msgid "Dark Red" msgstr "Ciemny czerwony" -#: netbox/choices.py:52 +#: netbox/netbox/choices.py:52 msgid "Rose" msgstr "Róża" -#: netbox/choices.py:53 +#: netbox/netbox/choices.py:53 msgid "Fuchsia" msgstr "Fuksja" -#: netbox/choices.py:55 +#: netbox/netbox/choices.py:55 msgid "Dark Purple" msgstr "Ciemnofioletowy" -#: netbox/choices.py:58 +#: netbox/netbox/choices.py:58 msgid "Light Blue" msgstr "Jasnoniebieski" -#: netbox/choices.py:61 +#: netbox/netbox/choices.py:61 msgid "Aqua" msgstr "wodny" -#: netbox/choices.py:62 +#: netbox/netbox/choices.py:62 msgid "Dark Green" msgstr "Ciemnozielony" -#: netbox/choices.py:64 +#: netbox/netbox/choices.py:64 msgid "Light Green" msgstr "Jasnozielony" -#: netbox/choices.py:65 +#: netbox/netbox/choices.py:65 msgid "Lime" msgstr "Wapno" -#: netbox/choices.py:67 +#: netbox/netbox/choices.py:67 msgid "Amber" msgstr "Amber" -#: netbox/choices.py:69 +#: netbox/netbox/choices.py:69 msgid "Dark Orange" msgstr "Ciemny Pomarańczowy" -#: netbox/choices.py:70 +#: netbox/netbox/choices.py:70 msgid "Brown" msgstr "Brązowy" -#: netbox/choices.py:71 +#: netbox/netbox/choices.py:71 msgid "Light Grey" msgstr "Jasnoszary" -#: netbox/choices.py:72 +#: netbox/netbox/choices.py:72 msgid "Grey" msgstr "Szary" -#: netbox/choices.py:73 +#: netbox/netbox/choices.py:73 msgid "Dark Grey" msgstr "Ciemny szary" -#: netbox/choices.py:128 +#: netbox/netbox/choices.py:128 msgid "Direct" msgstr "Bezpośredni" -#: netbox/choices.py:129 +#: netbox/netbox/choices.py:129 msgid "Upload" msgstr "Przesyłanie" -#: netbox/choices.py:141 netbox/choices.py:155 +#: netbox/netbox/choices.py:141 netbox/netbox/choices.py:155 msgid "Auto-detect" msgstr "Automatyczne wykrywanie" -#: netbox/choices.py:156 +#: netbox/netbox/choices.py:156 msgid "Comma" msgstr "przecinek" -#: netbox/choices.py:157 +#: netbox/netbox/choices.py:157 msgid "Semicolon" msgstr "Średnik" -#: netbox/choices.py:158 +#: netbox/netbox/choices.py:158 msgid "Tab" msgstr "Zakładka" -#: netbox/config/__init__.py:67 +#: netbox/netbox/config/__init__.py:67 #, python-brace-format msgid "Invalid configuration parameter: {item}" msgstr "Nieprawidłowy parametr konfiguracyjny: {item}" -#: netbox/config/parameters.py:22 templates/core/inc/config_data.html:62 +#: netbox/netbox/config/parameters.py:22 +#: netbox/templates/core/inc/config_data.html:62 msgid "Login banner" msgstr "Baner logowania" -#: netbox/config/parameters.py:24 +#: netbox/netbox/config/parameters.py:24 msgid "Additional content to display on the login page" msgstr "Dodatkowe treści do wyświetlenia na stronie logowania" -#: netbox/config/parameters.py:33 templates/core/inc/config_data.html:66 +#: netbox/netbox/config/parameters.py:33 +#: netbox/templates/core/inc/config_data.html:66 msgid "Maintenance banner" msgstr "Baner konserwacyjny" -#: netbox/config/parameters.py:35 +#: netbox/netbox/config/parameters.py:35 msgid "Additional content to display when in maintenance mode" msgstr "Dodatkowa zawartość do wyświetlania w trybie konserwacji" -#: netbox/config/parameters.py:44 templates/core/inc/config_data.html:70 +#: netbox/netbox/config/parameters.py:44 +#: netbox/templates/core/inc/config_data.html:70 msgid "Top banner" msgstr "Górny baner" -#: netbox/config/parameters.py:46 +#: netbox/netbox/config/parameters.py:46 msgid "Additional content to display at the top of every page" msgstr "Dodatkowe treści do wyświetlenia na górze każdej strony" -#: netbox/config/parameters.py:55 templates/core/inc/config_data.html:74 +#: netbox/netbox/config/parameters.py:55 +#: netbox/templates/core/inc/config_data.html:74 msgid "Bottom banner" msgstr "Dolny baner" -#: netbox/config/parameters.py:57 +#: netbox/netbox/config/parameters.py:57 msgid "Additional content to display at the bottom of every page" msgstr "Dodatkowe treści do wyświetlenia na dole każdej strony" -#: netbox/config/parameters.py:68 +#: netbox/netbox/config/parameters.py:68 msgid "Globally unique IP space" msgstr "Unikalna na całym świecie przestrzeń IP" -#: netbox/config/parameters.py:70 +#: netbox/netbox/config/parameters.py:70 msgid "Enforce unique IP addressing within the global table" msgstr "Wymuszanie unikalnego adresowania IP w tabeli globalnej" -#: netbox/config/parameters.py:75 templates/core/inc/config_data.html:44 +#: netbox/netbox/config/parameters.py:75 +#: netbox/templates/core/inc/config_data.html:44 msgid "Prefer IPv4" msgstr "Preferuj IPv4" -#: netbox/config/parameters.py:77 +#: netbox/netbox/config/parameters.py:77 msgid "Prefer IPv4 addresses over IPv6" msgstr "Preferuj adresy IPv4 niż IPv6" -#: netbox/config/parameters.py:84 +#: netbox/netbox/config/parameters.py:84 msgid "Rack unit height" msgstr "Wysokość jednostki szafy" -#: netbox/config/parameters.py:86 +#: netbox/netbox/config/parameters.py:86 msgid "Default unit height for rendered rack elevations" msgstr "Domyślna wysokość jednostki dla renderowanych elewacji szafy" -#: netbox/config/parameters.py:91 +#: netbox/netbox/config/parameters.py:91 msgid "Rack unit width" msgstr "Szerokość jednostki szafy" -#: netbox/config/parameters.py:93 +#: netbox/netbox/config/parameters.py:93 msgid "Default unit width for rendered rack elevations" msgstr "Domyślna szerokość jednostki dla renderowanych elewacji szafy" -#: netbox/config/parameters.py:100 +#: netbox/netbox/config/parameters.py:100 msgid "Powerfeed voltage" msgstr "Napięcie zasilania" -#: netbox/config/parameters.py:102 +#: netbox/netbox/config/parameters.py:102 msgid "Default voltage for powerfeeds" msgstr "Domyślne napięcie zasilania" -#: netbox/config/parameters.py:107 +#: netbox/netbox/config/parameters.py:107 msgid "Powerfeed amperage" msgstr "Natężenie prądu zasilającego" -#: netbox/config/parameters.py:109 +#: netbox/netbox/config/parameters.py:109 msgid "Default amperage for powerfeeds" msgstr "Domyślne natężenie prądu zasilania" -#: netbox/config/parameters.py:114 +#: netbox/netbox/config/parameters.py:114 msgid "Powerfeed max utilization" msgstr "Maksymalne wykorzystanie zasilania" -#: netbox/config/parameters.py:116 +#: netbox/netbox/config/parameters.py:116 msgid "Default max utilization for powerfeeds" msgstr "Domyślne maksymalne wykorzystanie zasilaczy" -#: netbox/config/parameters.py:123 templates/core/inc/config_data.html:53 +#: netbox/netbox/config/parameters.py:123 +#: netbox/templates/core/inc/config_data.html:53 msgid "Allowed URL schemes" msgstr "Dozwolone schematy adresów URL" -#: netbox/config/parameters.py:128 +#: netbox/netbox/config/parameters.py:128 msgid "Permitted schemes for URLs in user-provided content" msgstr "" "Dozwolone schematy adresów URL w treści dostarczonych przez użytkownika" -#: netbox/config/parameters.py:136 +#: netbox/netbox/config/parameters.py:136 msgid "Default page size" msgstr "Domyślny rozmiar strony" -#: netbox/config/parameters.py:142 +#: netbox/netbox/config/parameters.py:142 msgid "Maximum page size" msgstr "Maksymalny rozmiar strony" -#: netbox/config/parameters.py:150 templates/core/inc/config_data.html:96 +#: netbox/netbox/config/parameters.py:150 +#: netbox/templates/core/inc/config_data.html:96 msgid "Custom validators" msgstr "Niestandardowe walidatory" -#: netbox/config/parameters.py:152 +#: netbox/netbox/config/parameters.py:152 msgid "Custom validation rules (JSON)" msgstr "Niestandardowe reguły walidacji (JSON)" -#: netbox/config/parameters.py:160 templates/core/inc/config_data.html:104 +#: netbox/netbox/config/parameters.py:160 +#: netbox/templates/core/inc/config_data.html:104 msgid "Protection rules" msgstr "Zasady ochrony" -#: netbox/config/parameters.py:162 +#: netbox/netbox/config/parameters.py:162 msgid "Deletion protection rules (JSON)" msgstr "Reguły ochrony przed usunięciem (JSON)" -#: netbox/config/parameters.py:172 templates/core/inc/config_data.html:117 +#: netbox/netbox/config/parameters.py:172 +#: netbox/templates/core/inc/config_data.html:117 msgid "Default preferences" msgstr "Preferencje domyślne" -#: netbox/config/parameters.py:174 +#: netbox/netbox/config/parameters.py:174 msgid "Default preferences for new users" msgstr "Domyślne preferencje dla nowych użytkowników" -#: netbox/config/parameters.py:181 templates/core/inc/config_data.html:129 +#: netbox/netbox/config/parameters.py:181 +#: netbox/templates/core/inc/config_data.html:129 msgid "Maintenance mode" msgstr "Tryb konserwacji" -#: netbox/config/parameters.py:183 +#: netbox/netbox/config/parameters.py:183 msgid "Enable maintenance mode" msgstr "Włącz tryb konserwacji" -#: netbox/config/parameters.py:188 templates/core/inc/config_data.html:133 +#: netbox/netbox/config/parameters.py:188 +#: netbox/templates/core/inc/config_data.html:133 msgid "GraphQL enabled" msgstr "GraphQL włączony" -#: netbox/config/parameters.py:190 +#: netbox/netbox/config/parameters.py:190 msgid "Enable the GraphQL API" msgstr "Włącz interfejs API GraphQL" -#: netbox/config/parameters.py:195 templates/core/inc/config_data.html:137 +#: netbox/netbox/config/parameters.py:195 +#: netbox/templates/core/inc/config_data.html:137 msgid "Changelog retention" msgstr "Przechowywanie dziennika zmian" -#: netbox/config/parameters.py:197 +#: netbox/netbox/config/parameters.py:197 msgid "Days to retain changelog history (set to zero for unlimited)" msgstr "" "Dni na zachowanie historii dziennika zmian (ustawione na zero dla " "nieograniczonego)" -#: netbox/config/parameters.py:202 +#: netbox/netbox/config/parameters.py:202 msgid "Job result retention" msgstr "Zachowanie wyników pracy" -#: netbox/config/parameters.py:204 +#: netbox/netbox/config/parameters.py:204 msgid "Days to retain job result history (set to zero for unlimited)" msgstr "" "Dni na zachowanie historii wyników pracy (ustawione na zero dla " "nieograniczonej liczby)" -#: netbox/config/parameters.py:209 templates/core/inc/config_data.html:145 +#: netbox/netbox/config/parameters.py:209 +#: netbox/templates/core/inc/config_data.html:145 msgid "Maps URL" msgstr "Adres URL map" -#: netbox/config/parameters.py:211 +#: netbox/netbox/config/parameters.py:211 msgid "Base URL for mapping geographic locations" msgstr "Podstawowy adres URL do mapowania lokalizacji geograficznych" -#: netbox/forms/__init__.py:12 +#: netbox/netbox/forms/__init__.py:12 msgid "Partial match" msgstr "Mecz częściowy" -#: netbox/forms/__init__.py:13 +#: netbox/netbox/forms/__init__.py:13 msgid "Exact match" msgstr "Dokładne dopasowanie" -#: netbox/forms/__init__.py:14 +#: netbox/netbox/forms/__init__.py:14 msgid "Starts with" msgstr "Zaczyna się od" -#: netbox/forms/__init__.py:15 +#: netbox/netbox/forms/__init__.py:15 msgid "Ends with" msgstr "Kończy się z" -#: netbox/forms/__init__.py:16 +#: netbox/netbox/forms/__init__.py:16 msgid "Regex" msgstr "Regex" -#: netbox/forms/__init__.py:34 +#: netbox/netbox/forms/__init__.py:34 msgid "Object type(s)" msgstr "Typ (y) obiektu" -#: netbox/forms/__init__.py:40 +#: netbox/netbox/forms/__init__.py:40 msgid "Lookup" msgstr "Wyszukiwanie" -#: netbox/forms/base.py:90 +#: netbox/netbox/forms/base.py:90 msgid "" "Tag slugs separated by commas, encased with double quotes (e.g. " "\"tag1,tag2,tag3\")" @@ -10193,413 +10882,424 @@ msgstr "" "Identyfikatory tagów oddzielone przecinkami, otoczone podwójnymi " "cudzysłowami (np. \"tag1,tag2,tag3\")" -#: netbox/forms/base.py:120 +#: netbox/netbox/forms/base.py:120 msgid "Add tags" msgstr "Dodawanie tagów" -#: netbox/forms/base.py:125 +#: netbox/netbox/forms/base.py:125 msgid "Remove tags" msgstr "Usuń tagi" -#: netbox/forms/mixins.py:38 +#: netbox/netbox/forms/mixins.py:38 #, python-brace-format msgid "{class_name} must specify a model class." msgstr "{class_name} musi określić klasę modelu." -#: netbox/models/features.py:280 +#: netbox/netbox/models/features.py:280 #, python-brace-format msgid "Unknown field name '{name}' in custom field data." msgstr "Nieznana nazwa pola '{name}'w danych pola niestandardowego." -#: netbox/models/features.py:286 +#: netbox/netbox/models/features.py:286 #, python-brace-format msgid "Invalid value for custom field '{name}': {error}" msgstr "Nieprawidłowa wartość pola niestandardowego '{name}”: {error}" -#: netbox/models/features.py:295 +#: netbox/netbox/models/features.py:295 #, python-brace-format msgid "Custom field '{name}' must have a unique value." msgstr "Pole niestandardowe '{name}„musi mieć unikalną wartość." -#: netbox/models/features.py:302 +#: netbox/netbox/models/features.py:302 #, python-brace-format msgid "Missing required custom field '{name}'." msgstr "Brakujące wymagane pole niestandardowe '{name}”." -#: netbox/models/features.py:462 +#: netbox/netbox/models/features.py:462 msgid "Remote data source" msgstr "Zdalne źródło danych" -#: netbox/models/features.py:472 +#: netbox/netbox/models/features.py:472 msgid "data path" msgstr "ścieżka danych" -#: netbox/models/features.py:476 +#: netbox/netbox/models/features.py:476 msgid "Path to remote file (relative to data source root)" msgstr "Ścieżka do pliku zdalnego (względem katalogu głównego źródła danych)" -#: netbox/models/features.py:479 +#: netbox/netbox/models/features.py:479 msgid "auto sync enabled" msgstr "włączona automatyczna synchronizacja" -#: netbox/models/features.py:481 +#: netbox/netbox/models/features.py:481 msgid "Enable automatic synchronization of data when the data file is updated" msgstr "Włącz automatyczną synchronizację danych po aktualizacji pliku danych" -#: netbox/models/features.py:484 +#: netbox/netbox/models/features.py:484 msgid "date synced" msgstr "data zsynchronizowana" -#: netbox/models/features.py:578 +#: netbox/netbox/models/features.py:578 #, python-brace-format msgid "{class_name} must implement a sync_data() method." msgstr "{class_name} musi wdrożyć metodę sync_data ()." -#: netbox/navigation/menu.py:11 +#: netbox/netbox/navigation/menu.py:11 msgid "Organization" msgstr "Organizacja" -#: netbox/navigation/menu.py:19 +#: netbox/netbox/navigation/menu.py:19 msgid "Site Groups" msgstr "Grupy witryn" -#: netbox/navigation/menu.py:27 +#: netbox/netbox/navigation/menu.py:27 msgid "Tenant Groups" msgstr "Grupy najemców" -#: netbox/navigation/menu.py:34 +#: netbox/netbox/navigation/menu.py:34 msgid "Contact Groups" msgstr "Grupy kontaktowe" -#: netbox/navigation/menu.py:35 templates/tenancy/contactrole.html:8 +#: netbox/netbox/navigation/menu.py:35 +#: netbox/templates/tenancy/contactrole.html:8 msgid "Contact Roles" msgstr "Role kontaktowe" -#: netbox/navigation/menu.py:36 +#: netbox/netbox/navigation/menu.py:36 msgid "Contact Assignments" msgstr "Zadania kontaktowe" -#: netbox/navigation/menu.py:50 +#: netbox/netbox/navigation/menu.py:50 msgid "Rack Roles" msgstr "Role szafy" -#: netbox/navigation/menu.py:54 +#: netbox/netbox/navigation/menu.py:54 msgid "Elevations" msgstr "Elewacje" -#: netbox/navigation/menu.py:60 netbox/navigation/menu.py:62 +#: netbox/netbox/navigation/menu.py:60 netbox/netbox/navigation/menu.py:62 msgid "Rack Types" msgstr "Rodzaje szaf" -#: netbox/navigation/menu.py:76 +#: netbox/netbox/navigation/menu.py:76 msgid "Modules" msgstr "Moduły" -#: netbox/navigation/menu.py:80 templates/dcim/device.html:160 -#: templates/dcim/virtualdevicecontext.html:8 +#: netbox/netbox/navigation/menu.py:80 netbox/templates/dcim/device.html:160 +#: netbox/templates/dcim/virtualdevicecontext.html:8 msgid "Virtual Device Contexts" msgstr "Konteksty urządzeń wirtualnych" -#: netbox/navigation/menu.py:88 +#: netbox/netbox/navigation/menu.py:88 msgid "Manufacturers" msgstr "Producenci" -#: netbox/navigation/menu.py:92 +#: netbox/netbox/navigation/menu.py:92 msgid "Device Components" msgstr "Komponenty urządzenia" -#: netbox/navigation/menu.py:104 templates/dcim/inventoryitemrole.html:8 +#: netbox/netbox/navigation/menu.py:104 +#: netbox/templates/dcim/inventoryitemrole.html:8 msgid "Inventory Item Roles" msgstr "Role pozycji zapasów" -#: netbox/navigation/menu.py:111 netbox/navigation/menu.py:115 +#: netbox/netbox/navigation/menu.py:111 netbox/netbox/navigation/menu.py:115 msgid "Connections" msgstr "Połączenia" -#: netbox/navigation/menu.py:117 +#: netbox/netbox/navigation/menu.py:117 msgid "Cables" msgstr "Kable" -#: netbox/navigation/menu.py:118 +#: netbox/netbox/navigation/menu.py:118 msgid "Wireless Links" msgstr "Linki bezprzewodowe" -#: netbox/navigation/menu.py:121 +#: netbox/netbox/navigation/menu.py:121 msgid "Interface Connections" msgstr "Połączenia interfejsu" -#: netbox/navigation/menu.py:126 +#: netbox/netbox/navigation/menu.py:126 msgid "Console Connections" msgstr "Połączenia konsoli" -#: netbox/navigation/menu.py:131 +#: netbox/netbox/navigation/menu.py:131 msgid "Power Connections" msgstr "Połączenia zasilania" -#: netbox/navigation/menu.py:147 +#: netbox/netbox/navigation/menu.py:147 msgid "Wireless LAN Groups" msgstr "Grupy sieci bezprzewodowej sieci LAN" -#: netbox/navigation/menu.py:168 +#: netbox/netbox/navigation/menu.py:168 msgid "Prefix & VLAN Roles" msgstr "Role prefiksów i VLAN" -#: netbox/navigation/menu.py:174 +#: netbox/netbox/navigation/menu.py:174 msgid "ASN Ranges" msgstr "Zakresy ASN" -#: netbox/navigation/menu.py:196 +#: netbox/netbox/navigation/menu.py:196 msgid "VLAN Groups" msgstr "Grupy VLAN" -#: netbox/navigation/menu.py:203 +#: netbox/netbox/navigation/menu.py:203 msgid "Service Templates" msgstr "Szablony usług" -#: netbox/navigation/menu.py:204 templates/dcim/device.html:302 -#: templates/ipam/ipaddress.html:118 -#: templates/virtualization/virtualmachine.html:154 +#: netbox/netbox/navigation/menu.py:204 netbox/templates/dcim/device.html:302 +#: netbox/templates/ipam/ipaddress.html:118 +#: netbox/templates/virtualization/virtualmachine.html:154 msgid "Services" msgstr "Usługi" -#: netbox/navigation/menu.py:211 +#: netbox/netbox/navigation/menu.py:211 msgid "VPN" msgstr "VPN" -#: netbox/navigation/menu.py:215 netbox/navigation/menu.py:217 -#: vpn/tables/tunnels.py:24 +#: netbox/netbox/navigation/menu.py:215 netbox/netbox/navigation/menu.py:217 +#: netbox/vpn/tables/tunnels.py:24 msgid "Tunnels" msgstr "Tunele" -#: netbox/navigation/menu.py:218 templates/vpn/tunnelgroup.html:8 +#: netbox/netbox/navigation/menu.py:218 +#: netbox/templates/vpn/tunnelgroup.html:8 msgid "Tunnel Groups" msgstr "Grupy tuneli" -#: netbox/navigation/menu.py:219 +#: netbox/netbox/navigation/menu.py:219 msgid "Tunnel Terminations" msgstr "Zakończenia tunelu" -#: netbox/navigation/menu.py:223 netbox/navigation/menu.py:225 -#: vpn/models/l2vpn.py:64 +#: netbox/netbox/navigation/menu.py:223 netbox/netbox/navigation/menu.py:225 +#: netbox/vpn/models/l2vpn.py:64 msgid "L2VPNs" msgstr "L2VPN" -#: netbox/navigation/menu.py:226 templates/vpn/l2vpn.html:56 -#: templates/vpn/tunnel.html:72 vpn/tables/tunnels.py:58 +#: 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/navigation/menu.py:232 +#: netbox/netbox/navigation/menu.py:232 msgid "IKE Proposals" msgstr "Propozycje IKE" -#: netbox/navigation/menu.py:233 templates/vpn/ikeproposal.html:41 +#: netbox/netbox/navigation/menu.py:233 +#: netbox/templates/vpn/ikeproposal.html:41 msgid "IKE Policies" msgstr "IKE Zasady działalności" -#: netbox/navigation/menu.py:234 +#: netbox/netbox/navigation/menu.py:234 msgid "IPSec Proposals" msgstr "Propozycje IPsec" -#: netbox/navigation/menu.py:235 templates/vpn/ipsecproposal.html:37 +#: netbox/netbox/navigation/menu.py:235 +#: netbox/templates/vpn/ipsecproposal.html:37 msgid "IPSec Policies" msgstr "Zasady IPsec" -#: netbox/navigation/menu.py:236 templates/vpn/ikepolicy.html:38 -#: templates/vpn/ipsecpolicy.html:25 +#: netbox/netbox/navigation/menu.py:236 netbox/templates/vpn/ikepolicy.html:38 +#: netbox/templates/vpn/ipsecpolicy.html:25 msgid "IPSec Profiles" msgstr "Profile IPsec" -#: netbox/navigation/menu.py:243 templates/dcim/device_edit.html:78 -msgid "Virtualization" -msgstr "Wirtualizacja" - -#: netbox/navigation/menu.py:251 -#: templates/virtualization/virtualmachine.html:174 -#: templates/virtualization/virtualmachine/base.html:32 -#: templates/virtualization/virtualmachine_list.html:21 -#: virtualization/tables/virtualmachines.py:104 virtualization/views.py:388 +#: netbox/netbox/navigation/menu.py:251 +#: 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 msgid "Virtual Disks" msgstr "Wirtualne dyski" -#: netbox/navigation/menu.py:258 +#: netbox/netbox/navigation/menu.py:258 msgid "Cluster Types" msgstr "Typy klastrów" -#: netbox/navigation/menu.py:259 +#: netbox/netbox/navigation/menu.py:259 msgid "Cluster Groups" msgstr "Grupy klastrów" -#: netbox/navigation/menu.py:273 +#: netbox/netbox/navigation/menu.py:273 msgid "Circuit Types" msgstr "Typy obwodów" -#: netbox/navigation/menu.py:274 +#: netbox/netbox/navigation/menu.py:274 msgid "Circuit Groups" msgstr "Grupy obwodów" -#: netbox/navigation/menu.py:275 templates/circuits/circuit.html:66 +#: netbox/netbox/navigation/menu.py:275 +#: netbox/templates/circuits/circuit.html:66 msgid "Group Assignments" msgstr "Zadania grupowe" -#: netbox/navigation/menu.py:276 +#: netbox/netbox/navigation/menu.py:276 msgid "Circuit Terminations" msgstr "Zakończenia obwodów" -#: netbox/navigation/menu.py:280 netbox/navigation/menu.py:282 +#: netbox/netbox/navigation/menu.py:280 netbox/netbox/navigation/menu.py:282 msgid "Providers" msgstr "Dostawcy" -#: netbox/navigation/menu.py:283 templates/circuits/provider.html:51 +#: netbox/netbox/navigation/menu.py:283 +#: netbox/templates/circuits/provider.html:51 msgid "Provider Accounts" msgstr "Konta dostawców" -#: netbox/navigation/menu.py:284 +#: netbox/netbox/navigation/menu.py:284 msgid "Provider Networks" msgstr "Sieci dostawców" -#: netbox/navigation/menu.py:298 +#: netbox/netbox/navigation/menu.py:298 msgid "Power Panels" msgstr "Panele zasilające" -#: netbox/navigation/menu.py:309 +#: netbox/netbox/navigation/menu.py:309 msgid "Configurations" msgstr "Konfiguracje" -#: netbox/navigation/menu.py:311 +#: netbox/netbox/navigation/menu.py:311 msgid "Config Contexts" msgstr "Konteksty konfiguracji" -#: netbox/navigation/menu.py:312 +#: netbox/netbox/navigation/menu.py:312 msgid "Config Templates" msgstr "Szablony konfiguracji" -#: netbox/navigation/menu.py:319 netbox/navigation/menu.py:323 +#: netbox/netbox/navigation/menu.py:319 netbox/netbox/navigation/menu.py:323 msgid "Customization" msgstr "Dostosowywanie" -#: netbox/navigation/menu.py:325 templates/dcim/device_edit.html:103 -#: templates/dcim/htmx/cable_edit.html:81 -#: templates/dcim/virtualchassis_add.html:31 -#: templates/dcim/virtualchassis_edit.html:40 -#: templates/generic/bulk_edit.html:76 templates/htmx/form.html:19 -#: templates/inc/filter_list.html:30 templates/inc/panels/custom_fields.html:7 -#: templates/ipam/ipaddress_bulk_add.html:35 templates/ipam/vlan_edit.html:59 +#: netbox/netbox/navigation/menu.py:325 +#: netbox/templates/dcim/device_edit.html:103 +#: netbox/templates/dcim/htmx/cable_edit.html:81 +#: netbox/templates/dcim/virtualchassis_add.html:31 +#: netbox/templates/dcim/virtualchassis_edit.html:40 +#: netbox/templates/generic/bulk_edit.html:76 +#: netbox/templates/htmx/form.html:19 netbox/templates/inc/filter_list.html:30 +#: netbox/templates/inc/panels/custom_fields.html:7 +#: netbox/templates/ipam/ipaddress_bulk_add.html:35 +#: netbox/templates/ipam/vlan_edit.html:59 msgid "Custom Fields" msgstr "Pola niestandardowe" -#: netbox/navigation/menu.py:326 +#: netbox/netbox/navigation/menu.py:326 msgid "Custom Field Choices" msgstr "Niestandardowe opcje pól" -#: netbox/navigation/menu.py:327 +#: netbox/netbox/navigation/menu.py:327 msgid "Custom Links" msgstr "Linki niestandardowe" -#: netbox/navigation/menu.py:328 +#: netbox/netbox/navigation/menu.py:328 msgid "Export Templates" msgstr "Szablony eksportu" -#: netbox/navigation/menu.py:329 +#: netbox/netbox/navigation/menu.py:329 msgid "Saved Filters" msgstr "Zapisane filtry" -#: netbox/navigation/menu.py:331 +#: netbox/netbox/navigation/menu.py:331 msgid "Image Attachments" msgstr "Załączniki do obrazów" -#: netbox/navigation/menu.py:349 +#: netbox/netbox/navigation/menu.py:349 msgid "Operations" msgstr "Operacje" -#: netbox/navigation/menu.py:353 +#: netbox/netbox/navigation/menu.py:353 msgid "Integrations" msgstr "Integracje" -#: netbox/navigation/menu.py:355 +#: netbox/netbox/navigation/menu.py:355 msgid "Data Sources" msgstr "Źródła danych" -#: netbox/navigation/menu.py:356 +#: netbox/netbox/navigation/menu.py:356 msgid "Event Rules" msgstr "Zasady zdarzeń" -#: netbox/navigation/menu.py:357 +#: netbox/netbox/navigation/menu.py:357 msgid "Webhooks" msgstr "Haczyki internetowe" -#: netbox/navigation/menu.py:361 netbox/navigation/menu.py:365 -#: netbox/views/generic/feature_views.py:153 -#: templates/extras/report/base.html:37 templates/extras/script/base.html:36 +#: netbox/netbox/navigation/menu.py:361 netbox/netbox/navigation/menu.py:365 +#: netbox/netbox/views/generic/feature_views.py:153 +#: netbox/templates/extras/report/base.html:37 +#: netbox/templates/extras/script/base.html:36 msgid "Jobs" msgstr "Oferty pracy" -#: netbox/navigation/menu.py:371 +#: netbox/netbox/navigation/menu.py:371 msgid "Logging" msgstr "Rejestracja" -#: netbox/navigation/menu.py:373 +#: netbox/netbox/navigation/menu.py:373 msgid "Notification Groups" msgstr "Grupy powiadomień" -#: netbox/navigation/menu.py:374 +#: netbox/netbox/navigation/menu.py:374 msgid "Journal Entries" msgstr "Wpisy do czasopism" -#: netbox/navigation/menu.py:375 templates/core/objectchange.html:9 -#: templates/core/objectchange_list.html:4 +#: netbox/netbox/navigation/menu.py:375 +#: netbox/templates/core/objectchange.html:9 +#: netbox/templates/core/objectchange_list.html:4 msgid "Change Log" msgstr "Dziennik zmian" -#: netbox/navigation/menu.py:382 templates/inc/user_menu.html:29 +#: netbox/netbox/navigation/menu.py:382 netbox/templates/inc/user_menu.html:29 msgid "Admin" msgstr "Administrator" -#: netbox/navigation/menu.py:430 templates/account/base.html:27 -#: templates/inc/user_menu.html:57 +#: netbox/netbox/navigation/menu.py:430 netbox/templates/account/base.html:27 +#: netbox/templates/inc/user_menu.html:57 msgid "API Tokens" msgstr "Tokeny API" -#: netbox/navigation/menu.py:437 users/forms/model_forms.py:187 -#: users/forms/model_forms.py:195 users/forms/model_forms.py:242 -#: users/forms/model_forms.py:249 +#: netbox/netbox/navigation/menu.py:437 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/navigation/menu.py:445 netbox/navigation/menu.py:449 -#: templates/core/system.html:7 +#: netbox/netbox/navigation/menu.py:445 netbox/netbox/navigation/menu.py:449 +#: netbox/templates/core/system.html:7 msgid "System" msgstr "System" -#: netbox/navigation/menu.py:454 netbox/navigation/menu.py:502 -#: templates/500.html:35 templates/account/preferences.html:22 -#: templates/core/plugin.html:13 templates/core/plugin_list.html:7 -#: templates/core/plugin_list.html:12 +#: netbox/netbox/navigation/menu.py:454 netbox/netbox/navigation/menu.py:502 +#: netbox/templates/500.html:35 netbox/templates/account/preferences.html:22 +#: netbox/templates/core/plugin.html:13 +#: netbox/templates/core/plugin_list.html:7 +#: netbox/templates/core/plugin_list.html:12 msgid "Plugins" msgstr "Wtyczki" -#: netbox/navigation/menu.py:459 +#: netbox/netbox/navigation/menu.py:459 msgid "Configuration History" msgstr "Historia konfiguracji" -#: netbox/navigation/menu.py:465 templates/core/rq_task.html:8 -#: templates/core/rq_task_list.html:22 +#: netbox/netbox/navigation/menu.py:465 netbox/templates/core/rq_task.html:8 +#: netbox/templates/core/rq_task_list.html:22 msgid "Background Tasks" msgstr "Zadania w tle" -#: netbox/plugins/navigation.py:47 netbox/plugins/navigation.py:69 +#: netbox/netbox/plugins/navigation.py:47 +#: netbox/netbox/plugins/navigation.py:69 msgid "Permissions must be passed as a tuple or list." msgstr "Uprawnienia muszą być przekazywane jako kropka lub lista." -#: netbox/plugins/navigation.py:51 +#: netbox/netbox/plugins/navigation.py:51 msgid "Buttons must be passed as a tuple or list." msgstr "Przyciski muszą być przekazywane jako kółka lub lista." -#: netbox/plugins/navigation.py:73 +#: netbox/netbox/plugins/navigation.py:73 msgid "Button color must be a choice within ButtonColorChoices." msgstr "Kolor przycisku musi być wybrany w ButtonColorChoices." -#: netbox/plugins/registration.py:25 +#: netbox/netbox/plugins/registration.py:25 #, python-brace-format msgid "" "PluginTemplateExtension class {template_extension} was passed as an " @@ -10608,7 +11308,7 @@ msgstr "" "PluginTemplateExtension class {template_extension} Został przekazany jako " "przykład!" -#: netbox/plugins/registration.py:31 +#: netbox/netbox/plugins/registration.py:31 #, python-brace-format msgid "" "{template_extension} is not a subclass of " @@ -10617,196 +11317,197 @@ msgstr "" "{template_extension} nie jest podklasą " "Netbox.Plugins.Plugins.PluginTemplateExtension!" -#: netbox/plugins/registration.py:51 +#: netbox/netbox/plugins/registration.py:51 #, python-brace-format msgid "{item} must be an instance of netbox.plugins.PluginMenuItem" msgstr "{item} musi być wystąpieniem Netbox.Plugins.Plugins.PluginMenuItem" -#: netbox/plugins/registration.py:62 +#: netbox/netbox/plugins/registration.py:62 #, 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/plugins/registration.py:67 +#: netbox/netbox/plugins/registration.py:67 #, python-brace-format msgid "{button} must be an instance of netbox.plugins.PluginMenuButton" msgstr "" "{button} musi być wystąpieniem Netbox.Plugins.Plugins.PluginMenuButton" -#: netbox/plugins/templates.py:37 +#: netbox/netbox/plugins/templates.py:37 msgid "extra_context must be a dictionary" msgstr "extra_context musi być słownikiem" -#: netbox/preferences.py:19 +#: netbox/netbox/preferences.py:19 msgid "HTMX Navigation" msgstr "Nawigacja HTMX" -#: netbox/preferences.py:24 +#: netbox/netbox/preferences.py:24 msgid "Enable dynamic UI navigation" msgstr "Włącz dynamiczną nawigację interfejsu użytkownika" -#: netbox/preferences.py:26 +#: netbox/netbox/preferences.py:26 msgid "Experimental feature" msgstr "Funkcja eksperymentalna" -#: netbox/preferences.py:29 +#: netbox/netbox/preferences.py:29 msgid "Language" msgstr "Język" -#: netbox/preferences.py:34 +#: netbox/netbox/preferences.py:34 msgid "Forces UI translation to the specified language" msgstr "Wymusza tłumaczenie interfejsu użytkownika na określony język" -#: netbox/preferences.py:36 +#: netbox/netbox/preferences.py:36 msgid "Support for translation has been disabled locally" msgstr "Obsługa tłumaczeń została wyłączona lokalnie" -#: netbox/preferences.py:42 +#: netbox/netbox/preferences.py:42 msgid "Page length" msgstr "Długość strony" -#: netbox/preferences.py:44 +#: netbox/netbox/preferences.py:44 msgid "The default number of objects to display per page" msgstr "Domyślna liczba obiektów do wyświetlenia na stronie" -#: netbox/preferences.py:48 +#: netbox/netbox/preferences.py:48 msgid "Paginator placement" msgstr "Umieszczenie paginatora" -#: netbox/preferences.py:50 +#: netbox/netbox/preferences.py:50 msgid "Bottom" msgstr "Dół" -#: netbox/preferences.py:51 +#: netbox/netbox/preferences.py:51 msgid "Top" msgstr "Top" -#: netbox/preferences.py:52 +#: netbox/netbox/preferences.py:52 msgid "Both" msgstr "Obie" -#: netbox/preferences.py:55 +#: netbox/netbox/preferences.py:55 msgid "Where the paginator controls will be displayed relative to a table" msgstr "Gdzie elementy sterujące paginatora będą wyświetlane względem tabeli" -#: netbox/preferences.py:60 +#: netbox/netbox/preferences.py:60 msgid "Data format" msgstr "Format danych" -#: netbox/preferences.py:65 +#: netbox/netbox/preferences.py:65 msgid "The preferred syntax for displaying generic data within the UI" msgstr "" "Preferowana składnia do wyświetlania ogólnych danych w interfejsie " "użytkownika" -#: netbox/registry.py:14 +#: netbox/netbox/registry.py:14 #, python-brace-format msgid "Invalid store: {key}" msgstr "Nieprawidłowy sklep: {key}" -#: netbox/registry.py:17 +#: netbox/netbox/registry.py:17 msgid "Cannot add stores to registry after initialization" msgstr "Nie można dodać sklepów do rejestru po zainicjowaniu" -#: netbox/registry.py:20 +#: netbox/netbox/registry.py:20 msgid "Cannot delete stores from registry" msgstr "Nie można usunąć sklepów z rejestru" -#: netbox/settings.py:760 +#: netbox/netbox/settings.py:760 msgid "Czech" msgstr "czeski" -#: netbox/settings.py:761 +#: netbox/netbox/settings.py:761 msgid "Danish" msgstr "duński" -#: netbox/settings.py:762 +#: netbox/netbox/settings.py:762 msgid "German" msgstr "niemiecki" -#: netbox/settings.py:763 +#: netbox/netbox/settings.py:763 msgid "English" msgstr "angielski" -#: netbox/settings.py:764 +#: netbox/netbox/settings.py:764 msgid "Spanish" msgstr "hiszpański" -#: netbox/settings.py:765 +#: netbox/netbox/settings.py:765 msgid "French" msgstr "francuski" -#: netbox/settings.py:766 +#: netbox/netbox/settings.py:766 msgid "Italian" msgstr "włoski" -#: netbox/settings.py:767 +#: netbox/netbox/settings.py:767 msgid "Japanese" msgstr "japoński" -#: netbox/settings.py:768 +#: netbox/netbox/settings.py:768 msgid "Dutch" msgstr "holenderski" -#: netbox/settings.py:769 +#: netbox/netbox/settings.py:769 msgid "Polish" msgstr "polski" -#: netbox/settings.py:770 +#: netbox/netbox/settings.py:770 msgid "Portuguese" msgstr "portugalski" -#: netbox/settings.py:771 +#: netbox/netbox/settings.py:771 msgid "Russian" msgstr "rosyjski" -#: netbox/settings.py:772 +#: netbox/netbox/settings.py:772 msgid "Turkish" msgstr "turecki" -#: netbox/settings.py:773 +#: netbox/netbox/settings.py:773 msgid "Ukrainian" msgstr "ukraiński" -#: netbox/settings.py:774 +#: netbox/netbox/settings.py:774 msgid "Chinese" msgstr "chiński" -#: netbox/tables/columns.py:176 +#: netbox/netbox/tables/columns.py:176 msgid "Select all" msgstr "Zaznacz wszystko" -#: netbox/tables/columns.py:189 +#: netbox/netbox/tables/columns.py:189 msgid "Toggle all" msgstr "Przełącz wszystko" -#: netbox/tables/columns.py:300 +#: netbox/netbox/tables/columns.py:300 msgid "Toggle Dropdown" msgstr "Przełącz menu rozwijane" -#: netbox/tables/columns.py:572 templates/core/job.html:53 +#: netbox/netbox/tables/columns.py:572 netbox/templates/core/job.html:53 msgid "Error" msgstr "Błąd" -#: netbox/tables/tables.py:58 +#: netbox/netbox/tables/tables.py:58 #, python-brace-format msgid "No {model_name} found" msgstr "Nie znaleziono {model_name} " -#: netbox/tables/tables.py:249 templates/generic/bulk_import.html:117 +#: netbox/netbox/tables/tables.py:249 +#: netbox/templates/generic/bulk_import.html:117 msgid "Field" msgstr "Pole" -#: netbox/tables/tables.py:252 +#: netbox/netbox/tables/tables.py:252 msgid "Value" msgstr "Wartość" -#: netbox/tests/dummy_plugin/navigation.py:29 +#: netbox/netbox/tests/dummy_plugin/navigation.py:29 msgid "Dummy Plugin" msgstr "Wtyczka Dummy" -#: netbox/views/generic/bulk_views.py:114 +#: netbox/netbox/views/generic/bulk_views.py:114 #, python-brace-format msgid "" "There was an error rendering the selected export template ({template}): " @@ -10814,56 +11515,56 @@ msgid "" msgstr "" "Wystąpił błąd renderowania wybranego szablonu eksportu ({template}): {error}" -#: netbox/views/generic/bulk_views.py:416 +#: netbox/netbox/views/generic/bulk_views.py:416 #, python-brace-format msgid "Row {i}: Object with ID {id} does not exist" msgstr "Wiersz {i}: Obiekt z identyfikatorem {id} nie istnieje" -#: netbox/views/generic/bulk_views.py:702 -#: netbox/views/generic/bulk_views.py:900 -#: netbox/views/generic/bulk_views.py:948 +#: netbox/netbox/views/generic/bulk_views.py:709 +#: netbox/netbox/views/generic/bulk_views.py:910 +#: netbox/netbox/views/generic/bulk_views.py:958 #, python-brace-format msgid "No {object_type} were selected." msgstr "Nie {object_type} zostały wybrane." -#: netbox/views/generic/bulk_views.py:782 +#: netbox/netbox/views/generic/bulk_views.py:788 #, python-brace-format msgid "Renamed {count} {object_type}" msgstr "Zmiana nazwy {count} {object_type}" -#: netbox/views/generic/bulk_views.py:878 +#: netbox/netbox/views/generic/bulk_views.py:888 #, python-brace-format msgid "Deleted {count} {object_type}" msgstr "Usunięte {count} {object_type}" -#: netbox/views/generic/feature_views.py:40 +#: netbox/netbox/views/generic/feature_views.py:40 msgid "Changelog" msgstr "Dziennik zmian" -#: netbox/views/generic/feature_views.py:93 +#: netbox/netbox/views/generic/feature_views.py:93 msgid "Journal" msgstr "Dziennik" -#: netbox/views/generic/feature_views.py:207 +#: netbox/netbox/views/generic/feature_views.py:207 msgid "Unable to synchronize data: No data file set." msgstr "Nie można zsynchronizować danych: Brak zestawu plików danych." -#: netbox/views/generic/feature_views.py:211 +#: netbox/netbox/views/generic/feature_views.py:211 #, python-brace-format msgid "Synchronized data for {object_type} {object}." msgstr "Zsynchronizowane dane dla {object_type} {object}." -#: netbox/views/generic/feature_views.py:236 +#: netbox/netbox/views/generic/feature_views.py:236 #, python-brace-format msgid "Synced {count} {object_type}" msgstr "Zsynchronizowane {count} {object_type}" -#: netbox/views/generic/object_views.py:108 +#: netbox/netbox/views/generic/object_views.py:108 #, python-brace-format msgid "{class_name} must implement get_children()" msgstr "{class_name} musi zaimplementować get_children ()" -#: netbox/views/misc.py:44 +#: netbox/netbox/views/misc.py:46 msgid "" "There was an error loading the dashboard configuration. A default dashboard " "is in use." @@ -10871,703 +11572,745 @@ msgstr "" "Wystąpił błąd podczas ładowania konfiguracji deski rozdzielczej. Używany " "jest domyślny pulpit nawigacyjny." -#: templates/403.html:4 +#: netbox/templates/403.html:4 msgid "Access Denied" msgstr "Odmowa dostępu" -#: templates/403.html:9 +#: netbox/templates/403.html:9 msgid "You do not have permission to access this page" msgstr "Nie masz dostępu do tej strony" -#: templates/404.html:4 +#: netbox/templates/404.html:4 msgid "Page Not Found" msgstr "Strona nie znaleziona" -#: templates/404.html:9 +#: netbox/templates/404.html:9 msgid "The requested page does not exist" msgstr "Żądana strona nie istnieje" -#: templates/500.html:7 templates/500.html:18 +#: netbox/templates/500.html:7 netbox/templates/500.html:18 msgid "Server Error" msgstr "Błąd serwera" -#: templates/500.html:23 +#: netbox/templates/500.html:23 msgid "There was a problem with your request. Please contact an administrator" msgstr "Wystąpił problem z twoją prośbą. Skontaktuj się z administratorem" -#: templates/500.html:28 +#: netbox/templates/500.html:28 msgid "The complete exception is provided below" msgstr "Pełny wyjątek znajduje się poniżej" -#: templates/500.html:33 templates/core/system.html:40 +#: netbox/templates/500.html:33 netbox/templates/core/system.html:40 msgid "Python version" msgstr "Wersja Pythona" -#: templates/500.html:34 +#: netbox/templates/500.html:34 msgid "NetBox version" msgstr "Wersja NetBox" -#: templates/500.html:36 +#: netbox/templates/500.html:36 msgid "None installed" msgstr "Brak zainstalowanego" -#: templates/500.html:39 +#: netbox/templates/500.html:39 msgid "If further assistance is required, please post to the" msgstr "Jeśli wymagana jest dalsza pomoc, prosimy o przesłanie do" -#: templates/500.html:39 +#: netbox/templates/500.html:39 msgid "NetBox discussion forum" msgstr "Forum dyskusyjne NetBox" -#: templates/500.html:39 +#: netbox/templates/500.html:39 msgid "on GitHub" msgstr "na GitHub" -#: templates/500.html:42 templates/base/40x.html:17 +#: netbox/templates/500.html:42 netbox/templates/base/40x.html:17 msgid "Home Page" msgstr "Strona główna" -#: templates/account/base.html:7 templates/inc/user_menu.html:45 -#: vpn/forms/bulk_edit.py:255 vpn/forms/filtersets.py:189 -#: vpn/forms/model_forms.py:379 +#: netbox/templates/account/base.html:7 netbox/templates/inc/user_menu.html:45 +#: netbox/vpn/forms/bulk_edit.py:255 netbox/vpn/forms/filtersets.py:189 +#: netbox/vpn/forms/model_forms.py:379 msgid "Profile" msgstr "Profil" -#: templates/account/base.html:13 templates/account/notifications.html:7 -#: templates/inc/user_menu.html:15 +#: netbox/templates/account/base.html:13 +#: netbox/templates/account/notifications.html:7 +#: netbox/templates/inc/user_menu.html:15 msgid "Notifications" msgstr "Powiadomienia" -#: templates/account/base.html:16 templates/account/subscriptions.html:7 -#: templates/inc/user_menu.html:51 +#: netbox/templates/account/base.html:16 +#: netbox/templates/account/subscriptions.html:7 +#: netbox/templates/inc/user_menu.html:51 msgid "Subscriptions" msgstr "Subskrypcje" -#: templates/account/base.html:19 templates/inc/user_menu.html:54 +#: netbox/templates/account/base.html:19 +#: netbox/templates/inc/user_menu.html:54 msgid "Preferences" msgstr "Preferencje" -#: templates/account/password.html:5 +#: netbox/templates/account/password.html:5 msgid "Change Password" msgstr "Zmień hasło" -#: templates/account/password.html:19 templates/account/preferences.html:77 -#: templates/core/configrevision_restore.html:63 -#: templates/dcim/devicebay_populate.html:34 -#: templates/dcim/virtualchassis_add_member.html:26 -#: templates/dcim/virtualchassis_edit.html:103 -#: templates/extras/object_journal.html:26 templates/extras/script.html:38 -#: templates/generic/bulk_add_component.html:67 -#: templates/generic/bulk_delete.html:65 templates/generic/bulk_edit.html:106 -#: templates/generic/bulk_import.html:56 templates/generic/bulk_import.html:78 -#: templates/generic/bulk_import.html:100 -#: templates/generic/bulk_remove.html:62 templates/generic/bulk_rename.html:63 -#: templates/generic/confirmation_form.html:19 -#: templates/generic/object_edit.html:72 templates/htmx/delete_form.html:53 -#: templates/htmx/delete_form.html:55 templates/ipam/ipaddress_assign.html:28 -#: templates/virtualization/cluster_add_devices.html:30 +#: netbox/templates/account/password.html:19 +#: netbox/templates/account/preferences.html:77 +#: netbox/templates/core/configrevision_restore.html:63 +#: netbox/templates/dcim/devicebay_populate.html:34 +#: netbox/templates/dcim/virtualchassis_add_member.html:26 +#: netbox/templates/dcim/virtualchassis_edit.html:103 +#: netbox/templates/extras/object_journal.html:26 +#: netbox/templates/extras/script.html:38 +#: netbox/templates/generic/bulk_add_component.html:67 +#: netbox/templates/generic/bulk_delete.html:65 +#: netbox/templates/generic/bulk_edit.html:106 +#: netbox/templates/generic/bulk_import.html:56 +#: netbox/templates/generic/bulk_import.html:78 +#: netbox/templates/generic/bulk_import.html:100 +#: netbox/templates/generic/bulk_remove.html:62 +#: netbox/templates/generic/bulk_rename.html:63 +#: netbox/templates/generic/confirmation_form.html:19 +#: netbox/templates/generic/object_edit.html:72 +#: netbox/templates/htmx/delete_form.html:53 +#: netbox/templates/htmx/delete_form.html:55 +#: netbox/templates/ipam/ipaddress_assign.html:28 +#: netbox/templates/virtualization/cluster_add_devices.html:30 msgid "Cancel" msgstr "Anuluj" -#: templates/account/password.html:20 templates/account/preferences.html:78 -#: templates/dcim/devicebay_populate.html:35 -#: templates/dcim/virtualchassis_add_member.html:28 -#: templates/dcim/virtualchassis_edit.html:105 -#: templates/extras/dashboard/widget_add.html:26 -#: templates/extras/dashboard/widget_config.html:19 -#: templates/extras/object_journal.html:27 -#: templates/generic/object_edit.html:75 -#: utilities/templates/helpers/applied_filters.html:16 -#: utilities/templates/helpers/table_config_form.html:40 +#: netbox/templates/account/password.html:20 +#: netbox/templates/account/preferences.html:78 +#: netbox/templates/dcim/devicebay_populate.html:35 +#: netbox/templates/dcim/virtualchassis_add_member.html:28 +#: netbox/templates/dcim/virtualchassis_edit.html:105 +#: netbox/templates/extras/dashboard/widget_add.html:26 +#: netbox/templates/extras/dashboard/widget_config.html:19 +#: netbox/templates/extras/object_journal.html:27 +#: netbox/templates/generic/object_edit.html:75 +#: netbox/utilities/templates/helpers/applied_filters.html:16 +#: netbox/utilities/templates/helpers/table_config_form.html:40 msgid "Save" msgstr "Zapisz" -#: templates/account/preferences.html:34 +#: netbox/templates/account/preferences.html:34 msgid "Table Configurations" msgstr "Konfiguracje tabel" -#: templates/account/preferences.html:39 +#: netbox/templates/account/preferences.html:39 msgid "Clear table preferences" msgstr "Wyczyść preferencje tabeli" -#: templates/account/preferences.html:47 +#: netbox/templates/account/preferences.html:47 msgid "Toggle All" msgstr "Przełącz wszystko" -#: templates/account/preferences.html:49 +#: netbox/templates/account/preferences.html:49 msgid "Table" msgstr "Tabela" -#: templates/account/preferences.html:50 +#: netbox/templates/account/preferences.html:50 msgid "Ordering" msgstr "Zamawianie" -#: templates/account/preferences.html:51 +#: netbox/templates/account/preferences.html:51 msgid "Columns" msgstr "Kolumny" -#: templates/account/preferences.html:71 templates/dcim/cable_trace.html:113 -#: templates/extras/object_configcontext.html:43 +#: netbox/templates/account/preferences.html:71 +#: netbox/templates/dcim/cable_trace.html:113 +#: netbox/templates/extras/object_configcontext.html:43 msgid "None found" msgstr "Nie znaleziono" -#: templates/account/profile.html:6 +#: netbox/templates/account/profile.html:6 msgid "User Profile" msgstr "Profil użytkownika" -#: templates/account/profile.html:12 +#: netbox/templates/account/profile.html:12 msgid "Account Details" msgstr "Szczegóły konta" -#: templates/account/profile.html:29 templates/tenancy/contact.html:43 -#: templates/users/user.html:25 tenancy/forms/bulk_edit.py:109 +#: netbox/templates/account/profile.html:29 +#: netbox/templates/tenancy/contact.html:43 +#: netbox/templates/users/user.html:25 netbox/tenancy/forms/bulk_edit.py:109 msgid "Email" msgstr "E-mail" -#: templates/account/profile.html:33 templates/users/user.html:29 +#: netbox/templates/account/profile.html:33 +#: netbox/templates/users/user.html:29 msgid "Account Created" msgstr "Konto utworzone" -#: templates/account/profile.html:37 templates/users/user.html:33 +#: netbox/templates/account/profile.html:37 +#: netbox/templates/users/user.html:33 msgid "Last Login" msgstr "Ostatnie logowanie" -#: templates/account/profile.html:41 templates/users/user.html:45 +#: netbox/templates/account/profile.html:41 +#: netbox/templates/users/user.html:45 msgid "Superuser" msgstr "Superuser" -#: templates/account/profile.html:45 templates/inc/user_menu.html:31 -#: templates/users/user.html:41 +#: netbox/templates/account/profile.html:45 +#: netbox/templates/inc/user_menu.html:31 netbox/templates/users/user.html:41 msgid "Staff" msgstr "Personel" -#: templates/account/profile.html:53 templates/users/objectpermission.html:82 -#: templates/users/user.html:53 +#: netbox/templates/account/profile.html:53 +#: netbox/templates/users/objectpermission.html:82 +#: netbox/templates/users/user.html:53 msgid "Assigned Groups" msgstr "Przydzielone grupy" -#: templates/account/profile.html:58 -#: templates/circuits/circuit_terminations_swap.html:18 -#: templates/circuits/circuit_terminations_swap.html:26 -#: templates/circuits/circuittermination.html:34 -#: templates/circuits/inc/circuit_termination.html:68 -#: templates/core/objectchange.html:124 templates/core/objectchange.html:142 -#: templates/dcim/devicebay.html:59 -#: templates/dcim/inc/panels/inventory_items.html:45 -#: templates/dcim/interface.html:296 templates/dcim/modulebay.html:80 -#: templates/extras/configcontext.html:70 templates/extras/eventrule.html:66 -#: templates/extras/htmx/script_result.html:60 -#: templates/extras/webhook.html:65 templates/extras/webhook.html:75 -#: templates/inc/panel_table.html:13 templates/inc/panels/comments.html:10 -#: templates/ipam/inc/panels/fhrp_groups.html:56 templates/users/group.html:34 -#: templates/users/group.html:44 templates/users/objectpermission.html:77 -#: templates/users/objectpermission.html:87 templates/users/user.html:58 -#: templates/users/user.html:68 +#: netbox/templates/account/profile.html:58 +#: netbox/templates/circuits/circuit_terminations_swap.html:18 +#: netbox/templates/circuits/circuit_terminations_swap.html:26 +#: netbox/templates/circuits/circuittermination.html:34 +#: netbox/templates/circuits/inc/circuit_termination.html:68 +#: netbox/templates/core/objectchange.html:124 +#: 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/modulebay.html:80 +#: netbox/templates/extras/configcontext.html:70 +#: netbox/templates/extras/eventrule.html:66 +#: netbox/templates/extras/htmx/script_result.html:60 +#: netbox/templates/extras/webhook.html:65 +#: netbox/templates/extras/webhook.html:75 +#: netbox/templates/inc/panel_table.html:13 +#: netbox/templates/inc/panels/comments.html:10 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:56 +#: netbox/templates/users/group.html:34 netbox/templates/users/group.html:44 +#: netbox/templates/users/objectpermission.html:77 +#: netbox/templates/users/objectpermission.html:87 +#: netbox/templates/users/user.html:58 netbox/templates/users/user.html:68 msgid "None" msgstr "Żaden" -#: templates/account/profile.html:68 templates/users/user.html:78 +#: netbox/templates/account/profile.html:68 +#: netbox/templates/users/user.html:78 msgid "Recent Activity" msgstr "Ostatnia aktywność" -#: templates/account/token.html:8 templates/account/token_list.html:6 +#: netbox/templates/account/token.html:8 +#: netbox/templates/account/token_list.html:6 msgid "My API Tokens" msgstr "Moje tokeny API" -#: templates/account/token.html:11 templates/account/token.html:19 -#: templates/users/token.html:6 templates/users/token.html:14 -#: users/forms/filtersets.py:120 +#: netbox/templates/account/token.html:11 +#: netbox/templates/account/token.html:19 netbox/templates/users/token.html:6 +#: netbox/templates/users/token.html:14 netbox/users/forms/filtersets.py:120 msgid "Token" msgstr "Token" -#: templates/account/token.html:39 templates/users/token.html:31 -#: users/forms/bulk_edit.py:107 +#: netbox/templates/account/token.html:39 netbox/templates/users/token.html:31 +#: netbox/users/forms/bulk_edit.py:107 msgid "Write enabled" msgstr "Zapis włączony" -#: templates/account/token.html:51 templates/users/token.html:43 +#: netbox/templates/account/token.html:51 netbox/templates/users/token.html:43 msgid "Last used" msgstr "Ostatnio używane" -#: templates/account/token_list.html:12 +#: netbox/templates/account/token_list.html:12 msgid "Add a Token" msgstr "Dodaj token" -#: templates/base/base.html:22 templates/home.html:27 +#: netbox/templates/base/base.html:22 netbox/templates/home.html:27 msgid "Home" msgstr "Strona główna" -#: templates/base/layout.html:25 +#: netbox/templates/base/layout.html:25 msgid "NetBox Motif" msgstr "Motyw NetBox" -#: templates/base/layout.html:38 templates/base/layout.html:39 -#: templates/login.html:14 templates/login.html:15 +#: netbox/templates/base/layout.html:38 netbox/templates/base/layout.html:39 +#: netbox/templates/login.html:14 netbox/templates/login.html:15 msgid "NetBox Logo" msgstr "Logo NetBox" -#: templates/base/layout.html:150 templates/base/layout.html:151 +#: netbox/templates/base/layout.html:150 netbox/templates/base/layout.html:151 msgid "Docs" msgstr "Dokumenty" -#: templates/base/layout.html:156 templates/base/layout.html:157 -#: templates/rest_framework/api.html:10 +#: netbox/templates/base/layout.html:156 netbox/templates/base/layout.html:157 +#: netbox/templates/rest_framework/api.html:10 msgid "REST API" msgstr "REST API" -#: templates/base/layout.html:162 templates/base/layout.html:163 +#: netbox/templates/base/layout.html:162 netbox/templates/base/layout.html:163 msgid "REST API documentation" msgstr "Dokumentacja REST API" -#: templates/base/layout.html:169 templates/base/layout.html:170 +#: netbox/templates/base/layout.html:169 netbox/templates/base/layout.html:170 msgid "GraphQL API" msgstr "Interfejs API GraphQL" -#: templates/base/layout.html:185 templates/base/layout.html:186 +#: netbox/templates/base/layout.html:185 netbox/templates/base/layout.html:186 msgid "NetBox Labs Support" msgstr "Wsparcie NetBox Labs" -#: templates/base/layout.html:194 templates/base/layout.html:195 +#: netbox/templates/base/layout.html:194 netbox/templates/base/layout.html:195 msgid "Source Code" msgstr "Kod źródłowy" -#: templates/base/layout.html:200 templates/base/layout.html:201 +#: netbox/templates/base/layout.html:200 netbox/templates/base/layout.html:201 msgid "Community" msgstr "Społeczność" -#: templates/circuits/circuit.html:47 +#: netbox/templates/circuits/circuit.html:47 msgid "Install Date" msgstr "Data instalacji" -#: templates/circuits/circuit.html:51 +#: netbox/templates/circuits/circuit.html:51 msgid "Termination Date" msgstr "Data wypowiedzenia" -#: templates/circuits/circuit.html:70 -#: templates/ipam/inc/panels/fhrp_groups.html:15 +#: netbox/templates/circuits/circuit.html:70 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:15 msgid "Assign Group" msgstr "Przypisz grupę" -#: templates/circuits/circuit_terminations_swap.html:4 +#: netbox/templates/circuits/circuit_terminations_swap.html:4 msgid "Swap Circuit Terminations" msgstr "Zamknięcia obwodu zamiennego" -#: templates/circuits/circuit_terminations_swap.html:8 +#: netbox/templates/circuits/circuit_terminations_swap.html:8 #, python-format msgid "Swap these terminations for circuit %(circuit)s?" msgstr "Zamień te zakończenia na obwód %(circuit)s?" -#: templates/circuits/circuit_terminations_swap.html:14 +#: netbox/templates/circuits/circuit_terminations_swap.html:14 msgid "A side" msgstr "Strona A" -#: templates/circuits/circuit_terminations_swap.html:22 +#: netbox/templates/circuits/circuit_terminations_swap.html:22 msgid "Z side" msgstr "Strona Z" -#: templates/circuits/circuitgroup.html:16 +#: netbox/templates/circuits/circuitgroup.html:16 msgid "Assign Circuit" msgstr "Przypisz obwód" -#: templates/circuits/circuitgroupassignment.html:19 +#: netbox/templates/circuits/circuitgroupassignment.html:19 msgid "Circuit Group Assignment" msgstr "Przypisanie grupy obwodów" -#: templates/circuits/circuittype.html:10 +#: netbox/templates/circuits/circuittype.html:10 msgid "Add Circuit" msgstr "Dodaj obwód" -#: templates/circuits/circuittype.html:19 +#: netbox/templates/circuits/circuittype.html:19 msgid "Circuit Type" msgstr "Typ obwodu" -#: templates/circuits/inc/circuit_termination.html:10 -#: templates/dcim/manufacturer.html:11 -#: templates/generic/bulk_add_component.html:22 -#: templates/users/objectpermission.html:38 -#: utilities/templates/buttons/add.html:4 -#: utilities/templates/helpers/table_config_form.html:20 +#: netbox/templates/circuits/inc/circuit_termination.html:10 +#: netbox/templates/dcim/manufacturer.html:11 +#: netbox/templates/generic/bulk_add_component.html:22 +#: netbox/templates/users/objectpermission.html:38 +#: netbox/utilities/templates/buttons/add.html:4 +#: netbox/utilities/templates/helpers/table_config_form.html:20 msgid "Add" msgstr "Dodaj" -#: templates/circuits/inc/circuit_termination.html:15 -#: templates/circuits/inc/circuit_termination_fields.html:36 -#: templates/dcim/inc/panels/inventory_items.html:32 -#: templates/dcim/powerpanel.html:56 templates/extras/script_list.html:30 -#: templates/generic/object_edit.html:47 -#: templates/ipam/inc/ipaddress_edit_header.html:7 -#: templates/ipam/inc/panels/fhrp_groups.html:43 -#: utilities/templates/buttons/edit.html:3 +#: netbox/templates/circuits/inc/circuit_termination.html:15 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:36 +#: netbox/templates/dcim/inc/panels/inventory_items.html:32 +#: netbox/templates/dcim/powerpanel.html:56 +#: netbox/templates/extras/script_list.html:30 +#: netbox/templates/generic/object_edit.html:47 +#: netbox/templates/ipam/inc/ipaddress_edit_header.html:7 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:43 +#: netbox/utilities/templates/buttons/edit.html:3 msgid "Edit" msgstr "Edytuj" -#: templates/circuits/inc/circuit_termination.html:18 +#: netbox/templates/circuits/inc/circuit_termination.html:18 msgid "Swap" msgstr "Zamień" -#: templates/circuits/inc/circuit_termination_fields.html:19 -#: templates/dcim/consoleport.html:59 templates/dcim/consoleserverport.html:60 -#: templates/dcim/powerfeed.html:114 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:19 +#: netbox/templates/dcim/consoleport.html:59 +#: netbox/templates/dcim/consoleserverport.html:60 +#: netbox/templates/dcim/powerfeed.html:114 msgid "Marked as connected" msgstr "Oznaczony jako połączony" -#: templates/circuits/inc/circuit_termination_fields.html:21 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:21 msgid "to" msgstr "do" -#: templates/circuits/inc/circuit_termination_fields.html:31 -#: templates/circuits/inc/circuit_termination_fields.html:32 -#: templates/dcim/frontport.html:80 -#: templates/dcim/inc/connection_endpoints.html:7 -#: templates/dcim/interface.html:154 templates/dcim/rearport.html:76 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:31 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:32 +#: netbox/templates/dcim/frontport.html:80 +#: netbox/templates/dcim/inc/connection_endpoints.html:7 +#: netbox/templates/dcim/interface.html:154 +#: netbox/templates/dcim/rearport.html:76 msgid "Trace" msgstr "Ślad" -#: templates/circuits/inc/circuit_termination_fields.html:35 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:35 msgid "Edit cable" msgstr "Edytuj kabel" -#: templates/circuits/inc/circuit_termination_fields.html:40 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:40 msgid "Remove cable" msgstr "Wyjmij kabel" -#: templates/circuits/inc/circuit_termination_fields.html:41 -#: templates/dcim/bulk_disconnect.html:5 -#: templates/dcim/device/consoleports.html:12 -#: templates/dcim/device/consoleserverports.html:12 -#: templates/dcim/device/frontports.html:12 -#: templates/dcim/device/interfaces.html:16 -#: templates/dcim/device/poweroutlets.html:12 -#: templates/dcim/device/powerports.html:12 -#: templates/dcim/device/rearports.html:12 templates/dcim/powerpanel.html:61 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:41 +#: netbox/templates/dcim/bulk_disconnect.html:5 +#: netbox/templates/dcim/device/consoleports.html:12 +#: netbox/templates/dcim/device/consoleserverports.html:12 +#: netbox/templates/dcim/device/frontports.html:12 +#: netbox/templates/dcim/device/interfaces.html:16 +#: netbox/templates/dcim/device/poweroutlets.html:12 +#: netbox/templates/dcim/device/powerports.html:12 +#: netbox/templates/dcim/device/rearports.html:12 +#: netbox/templates/dcim/powerpanel.html:61 msgid "Disconnect" msgstr "Odłącz" -#: templates/circuits/inc/circuit_termination_fields.html:48 -#: templates/dcim/consoleport.html:69 templates/dcim/consoleserverport.html:70 -#: templates/dcim/frontport.html:102 templates/dcim/interface.html:180 -#: templates/dcim/interface.html:200 templates/dcim/powerfeed.html:127 -#: templates/dcim/poweroutlet.html:71 templates/dcim/poweroutlet.html:72 -#: templates/dcim/powerport.html:73 templates/dcim/rearport.html:98 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:48 +#: netbox/templates/dcim/consoleport.html:69 +#: netbox/templates/dcim/consoleserverport.html:70 +#: netbox/templates/dcim/frontport.html:102 +#: netbox/templates/dcim/interface.html:180 +#: netbox/templates/dcim/interface.html:200 +#: netbox/templates/dcim/powerfeed.html:127 +#: netbox/templates/dcim/poweroutlet.html:71 +#: netbox/templates/dcim/poweroutlet.html:72 +#: netbox/templates/dcim/powerport.html:73 +#: netbox/templates/dcim/rearport.html:98 msgid "Connect" msgstr "Połącz" -#: templates/circuits/inc/circuit_termination_fields.html:70 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:70 msgid "Downstream" msgstr "W dalszej części" -#: templates/circuits/inc/circuit_termination_fields.html:71 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:71 msgid "Upstream" msgstr "W górę rzeki" -#: templates/circuits/inc/circuit_termination_fields.html:80 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:80 msgid "Cross-Connect" msgstr "Połączenie krzyżowe" -#: templates/circuits/inc/circuit_termination_fields.html:84 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:84 msgid "Patch Panel/Port" msgstr "Panel krosowy/port" -#: templates/circuits/provider.html:11 +#: netbox/templates/circuits/provider.html:11 msgid "Add circuit" msgstr "Dodaj obwód" -#: templates/circuits/provideraccount.html:17 +#: netbox/templates/circuits/provideraccount.html:17 msgid "Provider Account" msgstr "Konto dostawcy" -#: templates/core/configrevision.html:35 +#: netbox/templates/core/configrevision.html:35 msgid "Configuration Data" msgstr "Dane konfiguracyjne" -#: templates/core/configrevision.html:40 +#: netbox/templates/core/configrevision.html:40 msgid "Comment" msgstr "Komentarz" -#: templates/core/configrevision_restore.html:8 -#: templates/core/configrevision_restore.html:25 -#: templates/core/configrevision_restore.html:64 +#: netbox/templates/core/configrevision_restore.html:8 +#: netbox/templates/core/configrevision_restore.html:25 +#: netbox/templates/core/configrevision_restore.html:64 msgid "Restore" msgstr "Przywróć" -#: templates/core/configrevision_restore.html:36 +#: netbox/templates/core/configrevision_restore.html:36 msgid "Parameter" msgstr "Parametr" -#: templates/core/configrevision_restore.html:37 +#: netbox/templates/core/configrevision_restore.html:37 msgid "Current Value" msgstr "Bieżąca wartość" -#: templates/core/configrevision_restore.html:38 +#: netbox/templates/core/configrevision_restore.html:38 msgid "New Value" msgstr "Nowa wartość" -#: templates/core/configrevision_restore.html:50 +#: netbox/templates/core/configrevision_restore.html:50 msgid "Changed" msgstr "Zmieniono" -#: templates/core/datafile.html:42 templates/ipam/iprange.html:25 -#: templates/virtualization/virtualdisk.html:29 -#: virtualization/tables/virtualmachines.py:198 +#: netbox/templates/core/datafile.html:42 +#: netbox/templates/ipam/iprange.html:25 +#: netbox/templates/virtualization/virtualdisk.html:29 +#: netbox/virtualization/tables/virtualmachines.py:198 msgid "Size" msgstr "Rozmiar" -#: templates/core/datafile.html:43 +#: netbox/templates/core/datafile.html:43 msgid "bytes" msgstr "bajty" -#: templates/core/datafile.html:46 +#: netbox/templates/core/datafile.html:46 msgid "SHA256 Hash" msgstr "SHA256 Hash" -#: templates/core/datasource.html:14 templates/core/datasource.html:20 -#: utilities/templates/buttons/sync.html:5 +#: netbox/templates/core/datasource.html:14 +#: netbox/templates/core/datasource.html:20 +#: netbox/utilities/templates/buttons/sync.html:5 msgid "Sync" msgstr "Synchronizacja" -#: templates/core/datasource.html:50 +#: netbox/templates/core/datasource.html:50 msgid "Last synced" msgstr "Ostatnia synchronizacja" -#: templates/core/datasource.html:84 +#: netbox/templates/core/datasource.html:84 msgid "Backend" msgstr "Backend" -#: templates/core/datasource.html:99 +#: netbox/templates/core/datasource.html:99 msgid "No parameters defined" msgstr "Brak zdefiniowanych parametrów" -#: templates/core/datasource.html:114 +#: netbox/templates/core/datasource.html:114 msgid "Files" msgstr "Pliki" -#: templates/core/inc/config_data.html:7 +#: netbox/templates/core/inc/config_data.html:7 msgid "Rack elevations" msgstr "Elewacje szaf" -#: templates/core/inc/config_data.html:10 +#: netbox/templates/core/inc/config_data.html:10 msgid "Default unit height" msgstr "Domyślna wysokość jednostki" -#: templates/core/inc/config_data.html:14 +#: netbox/templates/core/inc/config_data.html:14 msgid "Default unit width" msgstr "Domyślna szerokość jednostki" -#: templates/core/inc/config_data.html:20 +#: netbox/templates/core/inc/config_data.html:20 msgid "Power feeds" msgstr "Zasilanie zasilania" -#: templates/core/inc/config_data.html:23 +#: netbox/templates/core/inc/config_data.html:23 msgid "Default voltage" msgstr "Domyślne napięcie" -#: templates/core/inc/config_data.html:27 +#: netbox/templates/core/inc/config_data.html:27 msgid "Default amperage" msgstr "Domyślne natężenie prądu" -#: templates/core/inc/config_data.html:31 +#: netbox/templates/core/inc/config_data.html:31 msgid "Default max utilization" msgstr "Domyślne maksymalne wykorzystanie" -#: templates/core/inc/config_data.html:40 +#: netbox/templates/core/inc/config_data.html:40 msgid "Enforce global unique" msgstr "Egzekwuj globalny unikalny" -#: templates/core/inc/config_data.html:83 +#: netbox/templates/core/inc/config_data.html:83 msgid "Paginate count" msgstr "Liczba stron" -#: templates/core/inc/config_data.html:87 +#: netbox/templates/core/inc/config_data.html:87 msgid "Max page size" msgstr "Maksymalny rozmiar strony" -#: templates/core/inc/config_data.html:114 +#: netbox/templates/core/inc/config_data.html:114 msgid "User preferences" msgstr "Preferencje użytkownika" -#: templates/core/inc/config_data.html:141 +#: netbox/templates/core/inc/config_data.html:141 msgid "Job retention" msgstr "Zatrzymanie pracy" -#: templates/core/job.html:35 templates/core/rq_task.html:12 -#: templates/core/rq_task.html:49 templates/core/rq_task.html:58 +#: netbox/templates/core/job.html:35 netbox/templates/core/rq_task.html:12 +#: netbox/templates/core/rq_task.html:49 netbox/templates/core/rq_task.html:58 msgid "Job" msgstr "Praca" -#: templates/core/job.html:58 templates/extras/journalentry.html:26 +#: netbox/templates/core/job.html:58 +#: netbox/templates/extras/journalentry.html:26 msgid "Created By" msgstr "Utworzony przez" -#: templates/core/job.html:66 +#: netbox/templates/core/job.html:66 msgid "Scheduling" msgstr "Planowanie" -#: templates/core/job.html:77 +#: netbox/templates/core/job.html:77 #, python-format msgid "every %(interval)s minutes" msgstr "co %(interval)s minut(ę/y)" -#: templates/core/objectchange.html:29 -#: templates/users/objectpermission.html:42 +#: netbox/templates/core/objectchange.html:29 +#: netbox/templates/users/objectpermission.html:42 msgid "Change" msgstr "Zmień" -#: templates/core/objectchange.html:79 +#: netbox/templates/core/objectchange.html:79 msgid "Difference" msgstr "Różnica" -#: templates/core/objectchange.html:82 +#: netbox/templates/core/objectchange.html:82 msgid "Previous" msgstr "Poprzednie" -#: templates/core/objectchange.html:85 +#: netbox/templates/core/objectchange.html:85 msgid "Next" msgstr "Kolejny" -#: templates/core/objectchange.html:93 +#: netbox/templates/core/objectchange.html:93 msgid "Object Created" msgstr "Utworzony obiekt" -#: templates/core/objectchange.html:95 +#: netbox/templates/core/objectchange.html:95 msgid "Object Deleted" msgstr "Obiekt usunięty" -#: templates/core/objectchange.html:97 +#: netbox/templates/core/objectchange.html:97 msgid "No Changes" msgstr "Brak zmian" -#: templates/core/objectchange.html:111 +#: netbox/templates/core/objectchange.html:111 msgid "Pre-Change Data" msgstr "Wstępna zmiana danych" -#: templates/core/objectchange.html:122 +#: netbox/templates/core/objectchange.html:122 msgid "Warning: Comparing non-atomic change to previous change record" msgstr "" "Ostrzeżenie: Porównywanie zmian nieatomowych z poprzednim rekordem zmian" -#: templates/core/objectchange.html:131 +#: netbox/templates/core/objectchange.html:131 msgid "Post-Change Data" msgstr "Dane po zmianie" -#: templates/core/objectchange.html:162 +#: netbox/templates/core/objectchange.html:162 #, python-format msgid "See All %(count)s Changes" msgstr "Zobacz wszystko %(count)s Zmiany" -#: templates/core/objectchange_list.html:9 -#: templates/extras/object_changelog.html:15 +#: netbox/templates/core/objectchange_list.html:9 +#: netbox/templates/extras/object_changelog.html:15 msgid "Change log retention" msgstr "Zmień przechowywanie dziennika" -#: templates/core/objectchange_list.html:9 -#: templates/extras/object_changelog.html:15 +#: netbox/templates/core/objectchange_list.html:9 +#: netbox/templates/extras/object_changelog.html:15 msgid "days" msgstr "dni" -#: templates/core/objectchange_list.html:9 -#: templates/extras/object_changelog.html:15 +#: netbox/templates/core/objectchange_list.html:9 +#: netbox/templates/extras/object_changelog.html:15 msgid "Indefinite" msgstr "Nieokreślony" -#: templates/core/plugin.html:22 +#: netbox/templates/core/plugin.html:22 msgid "Not installed" msgstr "Nie zainstalowany" -#: templates/core/plugin.html:33 +#: netbox/templates/core/plugin.html:33 msgid "Overview" msgstr "Przegląd" -#: templates/core/plugin.html:39 +#: netbox/templates/core/plugin.html:39 msgid "Install" msgstr "Zainstaluj" -#: templates/core/plugin.html:51 +#: netbox/templates/core/plugin.html:51 msgid "Plugin Details" msgstr "Szczegóły wtyczki" -#: templates/core/plugin.html:58 +#: netbox/templates/core/plugin.html:58 msgid "Summary" msgstr "Podsumowanie" -#: templates/core/plugin.html:76 +#: netbox/templates/core/plugin.html:76 msgid "License" msgstr "Licencja" -#: templates/core/plugin.html:96 +#: netbox/templates/core/plugin.html:96 msgid "Version History" msgstr "Historia wersji" -#: templates/core/plugin.html:107 +#: netbox/templates/core/plugin.html:107 msgid "Local Installation Instructions" msgstr "Lokalne instrukcje instalacji" -#: templates/core/rq_queue_list.html:5 templates/core/rq_queue_list.html:13 -#: templates/core/rq_task_list.html:14 templates/core/rq_worker.html:7 +#: netbox/templates/core/rq_queue_list.html:5 +#: netbox/templates/core/rq_queue_list.html:13 +#: netbox/templates/core/rq_task_list.html:14 +#: netbox/templates/core/rq_worker.html:7 msgid "Background Queues" msgstr "Kolejki tła" -#: templates/core/rq_queue_list.html:24 templates/core/rq_queue_list.html:25 -#: templates/core/rq_worker_list.html:49 templates/core/rq_worker_list.html:50 -#: templates/extras/script_result.html:67 -#: templates/extras/script_result.html:69 -#: templates/inc/table_controls_htmx.html:30 -#: templates/inc/table_controls_htmx.html:33 +#: netbox/templates/core/rq_queue_list.html:24 +#: netbox/templates/core/rq_queue_list.html:25 +#: netbox/templates/core/rq_worker_list.html:49 +#: netbox/templates/core/rq_worker_list.html:50 +#: netbox/templates/extras/script_result.html:67 +#: netbox/templates/extras/script_result.html:69 +#: netbox/templates/inc/table_controls_htmx.html:30 +#: netbox/templates/inc/table_controls_htmx.html:33 msgid "Configure Table" msgstr "Skonfiguruj tabelę" -#: templates/core/rq_task.html:29 +#: netbox/templates/core/rq_task.html:29 msgid "Stop" msgstr "Przestań" -#: templates/core/rq_task.html:34 +#: netbox/templates/core/rq_task.html:34 msgid "Requeue" msgstr "Request" -#: templates/core/rq_task.html:39 +#: netbox/templates/core/rq_task.html:39 msgid "Enqueue" msgstr "Zaciągnij kolejkę" -#: templates/core/rq_task.html:61 +#: netbox/templates/core/rq_task.html:61 msgid "Queue" msgstr "Kolejka" -#: templates/core/rq_task.html:65 +#: netbox/templates/core/rq_task.html:65 msgid "Timeout" msgstr "Limit czasu" -#: templates/core/rq_task.html:69 +#: netbox/templates/core/rq_task.html:69 msgid "Result TTL" msgstr "Wynik TTL" -#: templates/core/rq_task.html:89 +#: netbox/templates/core/rq_task.html:89 msgid "Meta" msgstr "Meta" -#: templates/core/rq_task.html:93 +#: netbox/templates/core/rq_task.html:93 msgid "Arguments" msgstr "Argumenty" -#: templates/core/rq_task.html:97 +#: netbox/templates/core/rq_task.html:97 msgid "Keyword Arguments" msgstr "Argumenty słów kluczowych" -#: templates/core/rq_task.html:103 +#: netbox/templates/core/rq_task.html:103 msgid "Depends on" msgstr "Zależy od" -#: templates/core/rq_task.html:109 +#: netbox/templates/core/rq_task.html:109 msgid "Exception" msgstr "Wyjątek" -#: templates/core/rq_task_list.html:28 +#: netbox/templates/core/rq_task_list.html:28 msgid "tasks in " msgstr "zadania w " -#: templates/core/rq_task_list.html:33 +#: netbox/templates/core/rq_task_list.html:33 msgid "Queued Jobs" msgstr "Zlecenia w kolejce" -#: templates/core/rq_task_list.html:64 templates/extras/script_result.html:86 +#: netbox/templates/core/rq_task_list.html:64 +#: netbox/templates/extras/script_result.html:86 #, python-format msgid "" "Select all %(count)s %(object_type_plural)s matching query" @@ -11575,381 +12318,399 @@ msgstr "" "Wybierz wszyscy %(count)s %(object_type_plural)s pasujące " "zapytanie" -#: templates/core/rq_worker.html:10 +#: netbox/templates/core/rq_worker.html:10 msgid "Worker Info" msgstr "Informacje o pracowniku" -#: templates/core/rq_worker.html:31 templates/core/rq_worker.html:40 +#: netbox/templates/core/rq_worker.html:31 +#: netbox/templates/core/rq_worker.html:40 msgid "Worker" msgstr "Pracownik" -#: templates/core/rq_worker.html:55 +#: netbox/templates/core/rq_worker.html:55 msgid "Queues" msgstr "Kolejki" -#: templates/core/rq_worker.html:63 +#: netbox/templates/core/rq_worker.html:63 msgid "Curent Job" msgstr "Bieżąca praca" -#: templates/core/rq_worker.html:67 +#: netbox/templates/core/rq_worker.html:67 msgid "Successful job count" msgstr "Liczba udanych miejsc pracy" -#: templates/core/rq_worker.html:71 +#: netbox/templates/core/rq_worker.html:71 msgid "Failed job count" msgstr "Liczba nieudanych zadań" -#: templates/core/rq_worker.html:75 +#: netbox/templates/core/rq_worker.html:75 msgid "Total working time" msgstr "Całkowity czas pracy" -#: templates/core/rq_worker.html:76 +#: netbox/templates/core/rq_worker.html:76 msgid "seconds" msgstr "sekundy" -#: templates/core/rq_worker_list.html:13 templates/core/rq_worker_list.html:21 +#: netbox/templates/core/rq_worker_list.html:13 +#: netbox/templates/core/rq_worker_list.html:21 msgid "Background Workers" msgstr "Pracownicy w tle" -#: templates/core/rq_worker_list.html:29 +#: netbox/templates/core/rq_worker_list.html:29 #, python-format msgid "Workers in %(queue_name)s" msgstr "Pracownicy w %(queue_name)s" -#: templates/core/system.html:11 utilities/templates/buttons/export.html:4 +#: netbox/templates/core/system.html:11 +#: netbox/utilities/templates/buttons/export.html:4 msgid "Export" msgstr "Eksportuj" -#: templates/core/system.html:28 +#: netbox/templates/core/system.html:28 msgid "System Status" msgstr "Status systemu" -#: templates/core/system.html:31 +#: netbox/templates/core/system.html:31 msgid "NetBox release" msgstr "Wydanie NetBox" -#: templates/core/system.html:44 +#: netbox/templates/core/system.html:44 msgid "Django version" msgstr "Wersja Django" -#: templates/core/system.html:48 +#: netbox/templates/core/system.html:48 msgid "PostgreSQL version" msgstr "Wersja PostgreSQL" -#: templates/core/system.html:52 +#: netbox/templates/core/system.html:52 msgid "Database name" msgstr "Nazwa bazy danych" -#: templates/core/system.html:56 +#: netbox/templates/core/system.html:56 msgid "Database size" msgstr "Wielkość bazy danych" -#: templates/core/system.html:61 +#: netbox/templates/core/system.html:61 msgid "Unavailable" msgstr "Niedostępne" -#: templates/core/system.html:66 +#: netbox/templates/core/system.html:66 msgid "RQ workers" msgstr "Pracownicy RQ" -#: templates/core/system.html:69 +#: netbox/templates/core/system.html:69 msgid "default queue" msgstr "domyślna kolejka" -#: templates/core/system.html:73 +#: netbox/templates/core/system.html:73 msgid "System time" msgstr "Czas systemu" -#: templates/core/system.html:85 +#: netbox/templates/core/system.html:85 msgid "Current Configuration" msgstr "Bieżąca konfiguracja" -#: templates/dcim/bulk_disconnect.html:9 +#: netbox/templates/dcim/bulk_disconnect.html:9 #, python-format msgid "" "Are you sure you want to disconnect these %(count)s %(obj_type_plural)s?" msgstr "Czy na pewno chcesz je odłączyć %(count)s %(obj_type_plural)s?" -#: templates/dcim/cable_trace.html:10 +#: netbox/templates/dcim/cable_trace.html:10 #, python-format msgid "Cable Trace for %(object_type)s %(object)s" msgstr "Śledzenie kabli dla %(object_type)s %(object)s" -#: templates/dcim/cable_trace.html:24 templates/dcim/inc/rack_elevation.html:7 +#: netbox/templates/dcim/cable_trace.html:24 +#: netbox/templates/dcim/inc/rack_elevation.html:7 msgid "Download SVG" msgstr "Pobierz SVG" -#: templates/dcim/cable_trace.html:30 +#: netbox/templates/dcim/cable_trace.html:30 msgid "Asymmetric Path" msgstr "Ścieżka asymetryczna" -#: templates/dcim/cable_trace.html:31 +#: netbox/templates/dcim/cable_trace.html:31 msgid "The nodes below have no links and result in an asymmetric path" msgstr "Poniższe węzły nie mają linków i powodują asymetryczną ścieżkę" -#: templates/dcim/cable_trace.html:38 +#: netbox/templates/dcim/cable_trace.html:38 msgid "Path split" msgstr "Podział ścieżki" -#: templates/dcim/cable_trace.html:39 +#: netbox/templates/dcim/cable_trace.html:39 msgid "Select a node below to continue" msgstr "Wybierz węzeł poniżej, aby kontynuować" -#: templates/dcim/cable_trace.html:55 +#: netbox/templates/dcim/cable_trace.html:55 msgid "Trace Completed" msgstr "Śledzenie zakończone" -#: templates/dcim/cable_trace.html:58 +#: netbox/templates/dcim/cable_trace.html:58 msgid "Total segments" msgstr "Segmenty ogółem" -#: templates/dcim/cable_trace.html:62 +#: netbox/templates/dcim/cable_trace.html:62 msgid "Total length" msgstr "Całkowita długość" -#: templates/dcim/cable_trace.html:77 +#: netbox/templates/dcim/cable_trace.html:77 msgid "No paths found" msgstr "Nie znaleziono ścieżek" -#: templates/dcim/cable_trace.html:85 +#: netbox/templates/dcim/cable_trace.html:85 msgid "Related Paths" msgstr "Powiązane ścieżki" -#: templates/dcim/cable_trace.html:89 +#: netbox/templates/dcim/cable_trace.html:89 msgid "Origin" msgstr "Pochodzenie" -#: templates/dcim/cable_trace.html:90 +#: netbox/templates/dcim/cable_trace.html:90 msgid "Destination" msgstr "Miejsce docelowe" -#: templates/dcim/cable_trace.html:91 +#: netbox/templates/dcim/cable_trace.html:91 msgid "Segments" msgstr "Segmenty" -#: templates/dcim/cable_trace.html:104 +#: netbox/templates/dcim/cable_trace.html:104 msgid "Incomplete" msgstr "Niekompletny" -#: templates/dcim/component_list.html:14 +#: netbox/templates/dcim/component_list.html:14 msgid "Rename Selected" msgstr "Zmień nazwę Wybrano" -#: templates/dcim/consoleport.html:65 templates/dcim/consoleserverport.html:66 -#: templates/dcim/frontport.html:98 templates/dcim/interface.html:176 -#: templates/dcim/poweroutlet.html:69 templates/dcim/powerport.html:69 +#: netbox/templates/dcim/consoleport.html:65 +#: netbox/templates/dcim/consoleserverport.html:66 +#: netbox/templates/dcim/frontport.html:98 +#: netbox/templates/dcim/interface.html:176 +#: netbox/templates/dcim/poweroutlet.html:69 +#: netbox/templates/dcim/powerport.html:69 msgid "Not Connected" msgstr "Nie jest połączony" -#: templates/dcim/device.html:34 +#: netbox/templates/dcim/device.html:34 msgid "Highlight device in rack" msgstr "Podświetl urządzenie w szafie" -#: templates/dcim/device.html:55 +#: netbox/templates/dcim/device.html:55 msgid "Not racked" msgstr "Poza szafą" -#: templates/dcim/device.html:62 templates/dcim/site.html:94 +#: netbox/templates/dcim/device.html:62 netbox/templates/dcim/site.html:94 msgid "GPS Coordinates" msgstr "Współrzędne GPS" -#: templates/dcim/device.html:68 templates/dcim/site.html:81 -#: templates/dcim/site.html:100 +#: netbox/templates/dcim/device.html:68 netbox/templates/dcim/site.html:81 +#: netbox/templates/dcim/site.html:100 msgid "Map" msgstr "Mapa" -#: templates/dcim/device.html:108 templates/dcim/inventoryitem.html:56 -#: templates/dcim/module.html:81 templates/dcim/modulebay.html:74 -#: templates/dcim/rack.html:61 +#: netbox/templates/dcim/device.html:108 +#: netbox/templates/dcim/inventoryitem.html:56 +#: netbox/templates/dcim/module.html:81 +#: netbox/templates/dcim/modulebay.html:74 netbox/templates/dcim/rack.html:61 msgid "Asset Tag" msgstr "Etykietka zasobów" -#: templates/dcim/device.html:123 +#: netbox/templates/dcim/device.html:123 msgid "View Virtual Chassis" msgstr "Wyświetl wirtualne podwozie" -#: templates/dcim/device.html:164 +#: netbox/templates/dcim/device.html:164 msgid "Create VDC" msgstr "Utwórz VDC" -#: templates/dcim/device.html:175 templates/dcim/device_edit.html:64 -#: virtualization/forms/model_forms.py:223 +#: netbox/templates/dcim/device.html:175 +#: netbox/templates/dcim/device_edit.html:64 +#: netbox/virtualization/forms/model_forms.py:223 msgid "Management" msgstr "Zarządzanie" -#: templates/dcim/device.html:195 templates/dcim/device.html:211 -#: templates/dcim/device.html:227 -#: templates/virtualization/virtualmachine.html:57 -#: templates/virtualization/virtualmachine.html:73 +#: netbox/templates/dcim/device.html:195 netbox/templates/dcim/device.html:211 +#: netbox/templates/dcim/device.html:227 +#: netbox/templates/virtualization/virtualmachine.html:57 +#: netbox/templates/virtualization/virtualmachine.html:73 msgid "NAT for" msgstr "NAT dla" -#: templates/dcim/device.html:197 templates/dcim/device.html:213 -#: templates/dcim/device.html:229 -#: templates/virtualization/virtualmachine.html:59 -#: templates/virtualization/virtualmachine.html:75 +#: netbox/templates/dcim/device.html:197 netbox/templates/dcim/device.html:213 +#: netbox/templates/dcim/device.html:229 +#: netbox/templates/virtualization/virtualmachine.html:59 +#: netbox/templates/virtualization/virtualmachine.html:75 msgid "NAT" msgstr "NAT" -#: templates/dcim/device.html:252 templates/dcim/rack.html:73 +#: netbox/templates/dcim/device.html:252 netbox/templates/dcim/rack.html:73 msgid "Power Utilization" msgstr "Wykorzystanie mocy" -#: templates/dcim/device.html:256 +#: netbox/templates/dcim/device.html:256 msgid "Input" msgstr "Wejście" -#: templates/dcim/device.html:257 +#: netbox/templates/dcim/device.html:257 msgid "Outlets" msgstr "Punkty sprzedaży" -#: templates/dcim/device.html:258 +#: netbox/templates/dcim/device.html:258 msgid "Allocated" msgstr "Przydzielony" -#: templates/dcim/device.html:268 templates/dcim/device.html:270 -#: templates/dcim/device.html:286 templates/dcim/powerfeed.html:67 +#: netbox/templates/dcim/device.html:268 netbox/templates/dcim/device.html:270 +#: netbox/templates/dcim/device.html:286 +#: netbox/templates/dcim/powerfeed.html:67 msgid "VA" msgstr "VA" -#: templates/dcim/device.html:280 +#: netbox/templates/dcim/device.html:280 msgctxt "Leg of a power feed" msgid "Leg" msgstr "Noga" -#: templates/dcim/device.html:306 -#: templates/virtualization/virtualmachine.html:158 +#: netbox/templates/dcim/device.html:306 +#: netbox/templates/virtualization/virtualmachine.html:158 msgid "Add a service" msgstr "Dodawanie usługi" -#: templates/dcim/device/base.html:21 templates/dcim/device_list.html:9 -#: templates/dcim/devicetype/base.html:18 -#: templates/dcim/inc/moduletype_buttons.html:9 templates/dcim/module.html:18 -#: templates/virtualization/virtualmachine/base.html:22 -#: templates/virtualization/virtualmachine_list.html:8 +#: netbox/templates/dcim/device/base.html:21 +#: netbox/templates/dcim/device_list.html:9 +#: netbox/templates/dcim/devicetype/base.html:18 +#: netbox/templates/dcim/inc/moduletype_buttons.html:9 +#: netbox/templates/dcim/module.html:18 +#: netbox/templates/virtualization/virtualmachine/base.html:22 +#: netbox/templates/virtualization/virtualmachine_list.html:8 msgid "Add Components" msgstr "Dodawanie komponentów" -#: templates/dcim/device/consoleports.html:24 +#: netbox/templates/dcim/device/consoleports.html:24 msgid "Add Console Ports" msgstr "Dodaj porty konsoli" -#: templates/dcim/device/consoleserverports.html:24 +#: netbox/templates/dcim/device/consoleserverports.html:24 msgid "Add Console Server Ports" msgstr "Dodaj porty serwera konsoli" -#: templates/dcim/device/devicebays.html:10 +#: netbox/templates/dcim/device/devicebays.html:10 msgid "Add Device Bays" msgstr "Dodaj kieszenie na urządzenia" -#: templates/dcim/device/frontports.html:24 +#: netbox/templates/dcim/device/frontports.html:24 msgid "Add Front Ports" msgstr "Dodaj przednie porty" -#: templates/dcim/device/inc/interface_table_controls.html:9 +#: netbox/templates/dcim/device/inc/interface_table_controls.html:9 msgid "Hide Enabled" msgstr "Ukryj włączone" -#: templates/dcim/device/inc/interface_table_controls.html:10 +#: netbox/templates/dcim/device/inc/interface_table_controls.html:10 msgid "Hide Disabled" msgstr "Ukryj wyłączone" -#: templates/dcim/device/inc/interface_table_controls.html:11 +#: netbox/templates/dcim/device/inc/interface_table_controls.html:11 msgid "Hide Virtual" msgstr "Ukryj wirtualny" -#: templates/dcim/device/inc/interface_table_controls.html:12 +#: netbox/templates/dcim/device/inc/interface_table_controls.html:12 msgid "Hide Disconnected" msgstr "Ukryj odłączony" -#: templates/dcim/device/interfaces.html:27 +#: netbox/templates/dcim/device/interfaces.html:27 msgid "Add Interfaces" msgstr "Dodaj interfejsy" -#: templates/dcim/device/inventory.html:10 -#: templates/dcim/inc/panels/inventory_items.html:10 +#: netbox/templates/dcim/device/inventory.html:10 +#: netbox/templates/dcim/inc/panels/inventory_items.html:10 msgid "Add Inventory Item" msgstr "Dodaj przedmiot zapasów" -#: templates/dcim/device/modulebays.html:10 +#: netbox/templates/dcim/device/modulebays.html:10 msgid "Add Module Bays" msgstr "Dodaj kieszenie modułowe" -#: templates/dcim/device/poweroutlets.html:24 +#: netbox/templates/dcim/device/poweroutlets.html:24 msgid "Add Power Outlets" msgstr "Dodaj gniazdka elektryczne" -#: templates/dcim/device/powerports.html:24 +#: netbox/templates/dcim/device/powerports.html:24 msgid "Add Power Port" msgstr "Dodaj port zasilania" -#: templates/dcim/device/rearports.html:24 +#: netbox/templates/dcim/device/rearports.html:24 msgid "Add Rear Ports" msgstr "Dodaj tylne porty" -#: templates/dcim/device/render_config.html:5 -#: templates/virtualization/virtualmachine/render_config.html:5 +#: netbox/templates/dcim/device/render_config.html:5 +#: netbox/templates/virtualization/virtualmachine/render_config.html:5 msgid "Config" msgstr "Konfiguracja" -#: templates/dcim/device/render_config.html:35 -#: templates/virtualization/virtualmachine/render_config.html:35 +#: netbox/templates/dcim/device/render_config.html:35 +#: netbox/templates/virtualization/virtualmachine/render_config.html:35 msgid "Context Data" msgstr "Dane kontekstowe" -#: templates/dcim/device/render_config.html:53 -#: templates/virtualization/virtualmachine/render_config.html:53 +#: netbox/templates/dcim/device/render_config.html:55 +#: netbox/templates/virtualization/virtualmachine/render_config.html:55 msgid "Rendered Config" msgstr "Wyrenderowana konfiguracja" -#: templates/dcim/device/render_config.html:55 -#: templates/virtualization/virtualmachine/render_config.html:55 +#: netbox/templates/dcim/device/render_config.html:57 +#: netbox/templates/virtualization/virtualmachine/render_config.html:57 msgid "Download" msgstr "Ściągnij" -#: templates/dcim/device/render_config.html:61 -#: templates/virtualization/virtualmachine/render_config.html:61 -msgid "No configuration template found" -msgstr "Nie znaleziono szablonu konfiguracji" +#: netbox/templates/dcim/device/render_config.html:64 +#: netbox/templates/virtualization/virtualmachine/render_config.html:64 +msgid "Error rendering template" +msgstr "" -#: templates/dcim/device_edit.html:44 +#: 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" -#: templates/dcim/device_edit.html:48 -#: utilities/templates/form_helpers/render_field.html:22 +#: netbox/templates/dcim/device_edit.html:48 +#: netbox/utilities/templates/form_helpers/render_field.html:22 msgid "Regenerate Slug" msgstr "Regeneruj identyfikator" -#: templates/dcim/device_edit.html:49 templates/generic/bulk_remove.html:21 -#: utilities/templates/helpers/table_config_form.html:23 +#: netbox/templates/dcim/device_edit.html:49 +#: netbox/templates/generic/bulk_remove.html:21 +#: netbox/utilities/templates/helpers/table_config_form.html:23 msgid "Remove" msgstr "Usuń" -#: templates/dcim/device_edit.html:110 +#: netbox/templates/dcim/device_edit.html:110 msgid "Local Config Context Data" msgstr "Dane kontekstowe konfiguracji lokalnej" -#: templates/dcim/device_list.html:82 templates/generic/bulk_rename.html:57 -#: templates/virtualization/virtualmachine/interfaces.html:11 -#: templates/virtualization/virtualmachine/virtual_disks.html:11 +#: netbox/templates/dcim/device_list.html:82 +#: netbox/templates/generic/bulk_rename.html:57 +#: netbox/templates/virtualization/virtualmachine/interfaces.html:11 +#: netbox/templates/virtualization/virtualmachine/virtual_disks.html:11 msgid "Rename" msgstr "Przemianować" -#: templates/dcim/devicebay.html:17 +#: netbox/templates/dcim/devicebay.html:17 msgid "Device Bay" msgstr "Zatoka na urządzenia" -#: templates/dcim/devicebay.html:43 +#: netbox/templates/dcim/devicebay.html:43 msgid "Installed Device" msgstr "Zainstalowane urządzenie" -#: templates/dcim/devicebay_depopulate.html:6 +#: netbox/templates/dcim/devicebay_depopulate.html:6 #, python-format msgid "Remove %(device)s from %(device_bay)s?" msgstr "Usuń %(device)s od %(device_bay)s?" -#: templates/dcim/devicebay_depopulate.html:13 +#: netbox/templates/dcim/devicebay_depopulate.html:13 #, python-format msgid "" "Are you sure you want to remove %(device)s from " @@ -11958,430 +12719,449 @@ msgstr "" "Czy na pewno chcesz usunąć %(device)s od " "%(device_bay)s?" -#: templates/dcim/devicebay_populate.html:13 +#: netbox/templates/dcim/devicebay_populate.html:13 msgid "Populate" msgstr "Wypełnić" -#: templates/dcim/devicebay_populate.html:22 +#: netbox/templates/dcim/devicebay_populate.html:22 msgid "Bay" msgstr "Zatoka" -#: templates/dcim/devicerole.html:14 templates/dcim/platform.html:17 +#: netbox/templates/dcim/devicerole.html:14 +#: netbox/templates/dcim/platform.html:17 msgid "Add Device" msgstr "Dodaj urządzenie" -#: templates/dcim/devicerole.html:40 +#: netbox/templates/dcim/devicerole.html:40 msgid "VM Role" msgstr "Rola maszyny wirtualnej" -#: templates/dcim/devicetype.html:18 templates/dcim/moduletype.html:29 +#: netbox/templates/dcim/devicetype.html:18 +#: netbox/templates/dcim/moduletype.html:29 msgid "Model Name" msgstr "Nazwa modelu" -#: templates/dcim/devicetype.html:25 templates/dcim/moduletype.html:33 +#: netbox/templates/dcim/devicetype.html:25 +#: netbox/templates/dcim/moduletype.html:33 msgid "Part Number" msgstr "Numer części" -#: templates/dcim/devicetype.html:41 +#: netbox/templates/dcim/devicetype.html:41 msgid "Exclude From Utilization" msgstr "Wyklucz z użytkowania" -#: templates/dcim/devicetype.html:59 +#: netbox/templates/dcim/devicetype.html:59 msgid "Parent/Child" msgstr "Rodzic/Dziecko" -#: templates/dcim/devicetype.html:71 +#: netbox/templates/dcim/devicetype.html:71 msgid "Front Image" msgstr "Obraz z przodu" -#: templates/dcim/devicetype.html:83 +#: netbox/templates/dcim/devicetype.html:83 msgid "Rear Image" msgstr "Obraz z tyłu" -#: templates/dcim/frontport.html:54 +#: netbox/templates/dcim/frontport.html:54 msgid "Rear Port Position" msgstr "Pozycja tylnego portu" -#: templates/dcim/frontport.html:72 templates/dcim/interface.html:144 -#: templates/dcim/poweroutlet.html:63 templates/dcim/powerport.html:63 -#: templates/dcim/rearport.html:68 +#: netbox/templates/dcim/frontport.html:72 +#: netbox/templates/dcim/interface.html:144 +#: netbox/templates/dcim/poweroutlet.html:63 +#: netbox/templates/dcim/powerport.html:63 +#: netbox/templates/dcim/rearport.html:68 msgid "Marked as Connected" msgstr "Oznaczone jako połączone" -#: templates/dcim/frontport.html:86 templates/dcim/rearport.html:82 +#: netbox/templates/dcim/frontport.html:86 +#: netbox/templates/dcim/rearport.html:82 msgid "Connection Status" msgstr "Status połączenia" -#: templates/dcim/htmx/cable_edit.html:10 +#: netbox/templates/dcim/htmx/cable_edit.html:10 msgid "A Side" msgstr "Strona" -#: templates/dcim/htmx/cable_edit.html:30 +#: netbox/templates/dcim/htmx/cable_edit.html:30 msgid "B Side" msgstr "Strona B" -#: templates/dcim/inc/cable_termination.html:65 +#: netbox/templates/dcim/inc/cable_termination.html:65 msgid "No termination" msgstr "Brak wypowiedzenia" -#: templates/dcim/inc/cable_toggle_buttons.html:3 +#: netbox/templates/dcim/inc/cable_toggle_buttons.html:3 msgid "Mark Planned" msgstr "Oznacz zaplanowane" -#: templates/dcim/inc/cable_toggle_buttons.html:6 +#: netbox/templates/dcim/inc/cable_toggle_buttons.html:6 msgid "Mark Installed" msgstr "Oznacz zainstalowany" -#: templates/dcim/inc/connection_endpoints.html:13 +#: netbox/templates/dcim/inc/connection_endpoints.html:13 msgid "Path Status" msgstr "Status ścieżki" -#: templates/dcim/inc/connection_endpoints.html:18 +#: netbox/templates/dcim/inc/connection_endpoints.html:18 msgid "Not Reachable" msgstr "Nieosiągalny" -#: templates/dcim/inc/connection_endpoints.html:23 +#: netbox/templates/dcim/inc/connection_endpoints.html:23 msgid "Path Endpoints" msgstr "Punkty końcowe ścieżki" -#: templates/dcim/inc/endpoint_connection.html:8 -#: templates/dcim/powerfeed.html:120 templates/dcim/rearport.html:94 +#: netbox/templates/dcim/inc/endpoint_connection.html:8 +#: netbox/templates/dcim/powerfeed.html:120 +#: netbox/templates/dcim/rearport.html:94 msgid "Not connected" msgstr "Nie podłączony" -#: templates/dcim/inc/interface_vlans_table.html:6 +#: netbox/templates/dcim/inc/interface_vlans_table.html:6 msgid "Untagged" msgstr "Bez oznakowania" -#: templates/dcim/inc/interface_vlans_table.html:37 +#: netbox/templates/dcim/inc/interface_vlans_table.html:37 msgid "No VLANs Assigned" msgstr "Brak przypisanych sieci VLAN" -#: templates/dcim/inc/interface_vlans_table.html:44 -#: templates/ipam/prefix_list.html:16 templates/ipam/prefix_list.html:33 +#: netbox/templates/dcim/inc/interface_vlans_table.html:44 +#: netbox/templates/ipam/prefix_list.html:16 +#: netbox/templates/ipam/prefix_list.html:33 msgid "Clear" msgstr "Wyczyść" -#: templates/dcim/inc/interface_vlans_table.html:47 +#: netbox/templates/dcim/inc/interface_vlans_table.html:47 msgid "Clear All" msgstr "Wyczyść wszystko" -#: templates/dcim/inc/panels/racktype_dimensions.html:38 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:38 msgid "Mounting Depth" msgstr "Głębokość montażu" -#: templates/dcim/inc/panels/racktype_numbering.html:6 +#: netbox/templates/dcim/inc/panels/racktype_numbering.html:6 msgid "Starting Unit" msgstr "Jednostka startowa" -#: templates/dcim/inc/panels/racktype_numbering.html:10 +#: netbox/templates/dcim/inc/panels/racktype_numbering.html:10 msgid "Descending Units" msgstr "Jednostki malejące" -#: templates/dcim/inc/rack_elevation.html:3 +#: netbox/templates/dcim/inc/rack_elevation.html:3 msgid "Rack elevation" msgstr "Elewacja szafy" -#: templates/dcim/interface.html:17 +#: netbox/templates/dcim/interface.html:17 msgid "Add Child Interface" msgstr "Dodaj interfejs podrzędny" -#: templates/dcim/interface.html:50 +#: netbox/templates/dcim/interface.html:50 msgid "Speed/Duplex" msgstr "Prędkości/Duplex" -#: templates/dcim/interface.html:73 +#: netbox/templates/dcim/interface.html:73 msgid "PoE Mode" msgstr "Tryb PoE" -#: templates/dcim/interface.html:77 +#: netbox/templates/dcim/interface.html:77 msgid "PoE Type" msgstr "Typ PoE" -#: templates/dcim/interface.html:81 -#: templates/virtualization/vminterface.html:63 +#: netbox/templates/dcim/interface.html:81 +#: netbox/templates/virtualization/vminterface.html:63 msgid "802.1Q Mode" msgstr "Tryb 802.1Q" -#: templates/dcim/interface.html:125 -#: templates/virtualization/vminterface.html:59 +#: netbox/templates/dcim/interface.html:125 +#: netbox/templates/virtualization/vminterface.html:59 msgid "MAC Address" msgstr "Adres MAC" -#: templates/dcim/interface.html:151 +#: netbox/templates/dcim/interface.html:151 msgid "Wireless Link" msgstr "Bezprzewodowe łącze" -#: templates/dcim/interface.html:218 vpn/choices.py:55 +#: netbox/templates/dcim/interface.html:218 netbox/vpn/choices.py:63 msgid "Peer" msgstr "Peer" -#: templates/dcim/interface.html:230 -#: templates/wireless/inc/wirelesslink_interface.html:26 +#: netbox/templates/dcim/interface.html:230 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:26 msgid "Channel" msgstr "Kanał" -#: templates/dcim/interface.html:239 -#: templates/wireless/inc/wirelesslink_interface.html:32 +#: netbox/templates/dcim/interface.html:239 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:32 msgid "Channel Frequency" msgstr "Częstotliwość kanału" -#: templates/dcim/interface.html:242 templates/dcim/interface.html:250 -#: templates/dcim/interface.html:261 templates/dcim/interface.html:269 +#: netbox/templates/dcim/interface.html:242 +#: netbox/templates/dcim/interface.html:250 +#: netbox/templates/dcim/interface.html:261 +#: netbox/templates/dcim/interface.html:269 msgid "MHz" msgstr "MHz" -#: templates/dcim/interface.html:258 -#: templates/wireless/inc/wirelesslink_interface.html:42 +#: netbox/templates/dcim/interface.html:258 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:42 msgid "Channel Width" msgstr "Szerokość kanału" -#: templates/dcim/interface.html:285 templates/wireless/wirelesslan.html:14 -#: templates/wireless/wirelesslink.html:21 wireless/forms/bulk_edit.py:60 -#: wireless/forms/bulk_edit.py:102 wireless/forms/filtersets.py:40 -#: wireless/forms/filtersets.py:80 wireless/models.py:82 -#: wireless/models.py:156 wireless/tables/wirelesslan.py:44 +#: netbox/templates/dcim/interface.html:285 +#: netbox/templates/wireless/wirelesslan.html:14 +#: netbox/templates/wireless/wirelesslink.html:21 +#: netbox/wireless/forms/bulk_edit.py:60 +#: netbox/wireless/forms/bulk_edit.py:102 +#: netbox/wireless/forms/filtersets.py:40 +#: netbox/wireless/forms/filtersets.py:80 netbox/wireless/models.py:82 +#: netbox/wireless/models.py:156 netbox/wireless/tables/wirelesslan.py:44 msgid "SSID" msgstr "SSID" -#: templates/dcim/interface.html:305 +#: netbox/templates/dcim/interface.html:305 msgid "LAG Members" msgstr "Członkowie LGD" -#: templates/dcim/interface.html:323 +#: netbox/templates/dcim/interface.html:323 msgid "No member interfaces" msgstr "Brak interfejsów członka" -#: templates/dcim/interface.html:343 templates/ipam/fhrpgroup.html:73 -#: templates/ipam/iprange/ip_addresses.html:7 -#: templates/ipam/prefix/ip_addresses.html:7 -#: templates/virtualization/vminterface.html:89 +#: netbox/templates/dcim/interface.html:343 +#: netbox/templates/ipam/fhrpgroup.html:73 +#: netbox/templates/ipam/iprange/ip_addresses.html:7 +#: netbox/templates/ipam/prefix/ip_addresses.html:7 +#: netbox/templates/virtualization/vminterface.html:89 msgid "Add IP Address" msgstr "Dodaj adres IP" -#: templates/dcim/inventoryitem.html:24 +#: netbox/templates/dcim/inventoryitem.html:24 msgid "Parent Item" msgstr "Element nadrzędny" -#: templates/dcim/inventoryitem.html:48 +#: netbox/templates/dcim/inventoryitem.html:48 msgid "Part ID" msgstr "Identyfikator części" -#: templates/dcim/location.html:17 +#: netbox/templates/dcim/location.html:17 msgid "Add Child Location" msgstr "Dodaj lokalizację dziecka" -#: templates/dcim/location.html:77 +#: netbox/templates/dcim/location.html:77 msgid "Child Locations" msgstr "Lokalizacje dzieci" -#: templates/dcim/location.html:81 templates/dcim/site.html:131 +#: netbox/templates/dcim/location.html:81 netbox/templates/dcim/site.html:131 msgid "Add a Location" msgstr "Dodawanie lokalizacji" -#: templates/dcim/location.html:94 templates/dcim/site.html:144 +#: netbox/templates/dcim/location.html:94 netbox/templates/dcim/site.html:144 msgid "Add a Device" msgstr "Dodawanie urządzenia" -#: templates/dcim/manufacturer.html:16 +#: netbox/templates/dcim/manufacturer.html:16 msgid "Add Device Type" msgstr "Dodaj typ urządzenia" -#: templates/dcim/manufacturer.html:21 +#: netbox/templates/dcim/manufacturer.html:21 msgid "Add Module Type" msgstr "Dodaj typ modułu" -#: templates/dcim/powerfeed.html:53 +#: netbox/templates/dcim/powerfeed.html:53 msgid "Connected Device" msgstr "Podłączone urządzenie" -#: templates/dcim/powerfeed.html:63 +#: netbox/templates/dcim/powerfeed.html:63 msgid "Utilization (Allocated" msgstr "Wykorzystanie (przydzielone" -#: templates/dcim/powerfeed.html:80 +#: netbox/templates/dcim/powerfeed.html:80 msgid "Electrical Characteristics" msgstr "Charakterystyka elektryczna" -#: templates/dcim/powerfeed.html:88 +#: netbox/templates/dcim/powerfeed.html:88 msgctxt "Abbreviation for volts" msgid "V" msgstr "V" -#: templates/dcim/powerfeed.html:92 +#: netbox/templates/dcim/powerfeed.html:92 msgctxt "Abbreviation for amperes" msgid "A" msgstr "A" -#: templates/dcim/poweroutlet.html:48 +#: netbox/templates/dcim/poweroutlet.html:48 msgid "Feed Leg" msgstr "Noga karmienia" -#: templates/dcim/powerpanel.html:72 +#: netbox/templates/dcim/powerpanel.html:72 msgid "Add Power Feeds" msgstr "Dodaj źródła zasilania" -#: templates/dcim/powerport.html:44 +#: netbox/templates/dcim/powerport.html:44 msgid "Maximum Draw" msgstr "Maksymalne losowanie" -#: templates/dcim/powerport.html:48 +#: netbox/templates/dcim/powerport.html:48 msgid "Allocated Draw" msgstr "Przydzielone losowanie" -#: templates/dcim/rack.html:69 +#: netbox/templates/dcim/rack.html:69 msgid "Space Utilization" msgstr "Wykorzystanie przestrzeni" -#: templates/dcim/rack.html:84 templates/dcim/racktype.html:44 +#: netbox/templates/dcim/rack.html:84 netbox/templates/dcim/racktype.html:44 msgid "Rack Weight" msgstr "Waga szafy" -#: templates/dcim/rack.html:94 templates/dcim/racktype.html:54 +#: netbox/templates/dcim/rack.html:94 netbox/templates/dcim/racktype.html:54 msgid "Maximum Weight" msgstr "Maksymalna waga" -#: templates/dcim/rack.html:104 +#: netbox/templates/dcim/rack.html:104 msgid "Total Weight" msgstr "Całkowita waga" -#: templates/dcim/rack.html:125 templates/dcim/rack_elevation_list.html:15 +#: netbox/templates/dcim/rack.html:125 +#: netbox/templates/dcim/rack_elevation_list.html:15 msgid "Images and Labels" msgstr "Obrazy i etykiety" -#: templates/dcim/rack.html:126 templates/dcim/rack_elevation_list.html:16 +#: netbox/templates/dcim/rack.html:126 +#: netbox/templates/dcim/rack_elevation_list.html:16 msgid "Images only" msgstr "Tylko obrazy" -#: templates/dcim/rack.html:127 templates/dcim/rack_elevation_list.html:17 +#: netbox/templates/dcim/rack.html:127 +#: netbox/templates/dcim/rack_elevation_list.html:17 msgid "Labels only" msgstr "Tylko etykiety" -#: templates/dcim/rack/reservations.html:8 +#: netbox/templates/dcim/rack/reservations.html:8 msgid "Add reservation" msgstr "Dodaj rezerwację" -#: templates/dcim/rack_elevation_list.html:12 +#: netbox/templates/dcim/rack_elevation_list.html:12 msgid "View List" msgstr "Wyświetl listę" -#: templates/dcim/rack_elevation_list.html:14 +#: netbox/templates/dcim/rack_elevation_list.html:14 msgid "Select rack view" msgstr "Wybierz widok szafy" -#: templates/dcim/rack_elevation_list.html:25 +#: netbox/templates/dcim/rack_elevation_list.html:25 msgid "Sort By" msgstr "Sortuj wg" -#: templates/dcim/rack_elevation_list.html:74 +#: netbox/templates/dcim/rack_elevation_list.html:74 msgid "No Racks Found" msgstr "Nie znaleziono szaf" -#: templates/dcim/rack_list.html:8 +#: netbox/templates/dcim/rack_list.html:8 msgid "View Elevations" msgstr "Wyświetl elewacje" -#: templates/dcim/rackreservation.html:42 +#: netbox/templates/dcim/rackreservation.html:42 msgid "Reservation Details" msgstr "Szczegóły rezerwacji" -#: templates/dcim/rackrole.html:10 +#: netbox/templates/dcim/rackrole.html:10 msgid "Add Rack" msgstr "Dodaj szafę" -#: templates/dcim/rearport.html:50 +#: netbox/templates/dcim/rearport.html:50 msgid "Positions" msgstr "Pozycje" -#: templates/dcim/region.html:17 templates/dcim/sitegroup.html:17 +#: netbox/templates/dcim/region.html:17 +#: netbox/templates/dcim/sitegroup.html:17 msgid "Add Site" msgstr "Dodaj witrynę" -#: templates/dcim/region.html:55 +#: netbox/templates/dcim/region.html:55 msgid "Child Regions" msgstr "Regiony dziecięce" -#: templates/dcim/region.html:59 +#: netbox/templates/dcim/region.html:59 msgid "Add Region" msgstr "Dodaj region" -#: templates/dcim/site.html:64 +#: netbox/templates/dcim/site.html:64 msgid "Time Zone" msgstr "Strefa czasowa" -#: templates/dcim/site.html:67 +#: netbox/templates/dcim/site.html:67 msgid "UTC" msgstr "UTC" -#: templates/dcim/site.html:68 +#: netbox/templates/dcim/site.html:68 msgid "Site time" msgstr "Czas na stronie" -#: templates/dcim/site.html:75 +#: netbox/templates/dcim/site.html:75 msgid "Physical Address" msgstr "Adres fizyczny" -#: templates/dcim/site.html:90 +#: netbox/templates/dcim/site.html:90 msgid "Shipping Address" msgstr "Adres wysyłki" -#: templates/dcim/sitegroup.html:55 templates/tenancy/contactgroup.html:46 -#: templates/tenancy/tenantgroup.html:55 -#: templates/wireless/wirelesslangroup.html:55 +#: netbox/templates/dcim/sitegroup.html:55 +#: netbox/templates/tenancy/contactgroup.html:46 +#: netbox/templates/tenancy/tenantgroup.html:55 +#: netbox/templates/wireless/wirelesslangroup.html:55 msgid "Child Groups" msgstr "Grupy dzieci" -#: templates/dcim/sitegroup.html:59 +#: netbox/templates/dcim/sitegroup.html:59 msgid "Add Site Group" msgstr "Dodaj grupę witryn" -#: templates/dcim/trace/attachment.html:5 -#: templates/extras/exporttemplate.html:31 +#: netbox/templates/dcim/trace/attachment.html:5 +#: netbox/templates/extras/exporttemplate.html:31 msgid "Attachment" msgstr "Załącznik" -#: templates/dcim/virtualchassis.html:57 +#: netbox/templates/dcim/virtualchassis.html:57 msgid "Add Member" msgstr "Dodaj członka" -#: templates/dcim/virtualchassis_add.html:18 +#: netbox/templates/dcim/virtualchassis_add.html:18 msgid "Member Devices" msgstr "Urządzenia członkowskie" -#: templates/dcim/virtualchassis_add_member.html:10 +#: netbox/templates/dcim/virtualchassis_add_member.html:10 #, python-format msgid "Add New Member to Virtual Chassis %(virtual_chassis)s" msgstr "Dodaj nowego członka do wirtualnej obudowy %(virtual_chassis)s" -#: templates/dcim/virtualchassis_add_member.html:19 +#: netbox/templates/dcim/virtualchassis_add_member.html:19 msgid "Add New Member" msgstr "Dodaj nowego członka" -#: templates/dcim/virtualchassis_add_member.html:27 -#: templates/generic/object_edit.html:78 -#: templates/users/objectpermission.html:31 users/forms/filtersets.py:67 -#: users/forms/model_forms.py:312 +#: netbox/templates/dcim/virtualchassis_add_member.html:27 +#: netbox/templates/generic/object_edit.html:78 +#: netbox/templates/users/objectpermission.html:31 +#: netbox/users/forms/filtersets.py:67 netbox/users/forms/model_forms.py:312 msgid "Actions" msgstr "Działania" -#: templates/dcim/virtualchassis_add_member.html:29 +#: netbox/templates/dcim/virtualchassis_add_member.html:29 msgid "Save & Add Another" msgstr "Zapisz i dodaj kolejny" -#: templates/dcim/virtualchassis_edit.html:7 +#: netbox/templates/dcim/virtualchassis_edit.html:7 #, python-format msgid "Editing Virtual Chassis %(name)s" msgstr "Edycja wirtualnej obudowy %(name)s" -#: templates/dcim/virtualchassis_edit.html:53 +#: netbox/templates/dcim/virtualchassis_edit.html:53 msgid "Rack/Unit" msgstr "Szafa/jednostka" -#: templates/dcim/virtualchassis_remove_member.html:5 +#: netbox/templates/dcim/virtualchassis_remove_member.html:5 msgid "Remove Virtual Chassis Member" msgstr "Usuń członek wirtualnej obudowy" -#: templates/dcim/virtualchassis_remove_member.html:9 +#: netbox/templates/dcim/virtualchassis_remove_member.html:9 #, python-format msgid "" "Are you sure you want to remove %(device)s from virtual " @@ -12390,11 +13170,12 @@ msgstr "" "Czy na pewno chcesz usunąć %(device)s z wirtualnego " "podwozia %(name)s?" -#: templates/dcim/virtualdevicecontext.html:26 templates/vpn/l2vpn.html:18 +#: netbox/templates/dcim/virtualdevicecontext.html:26 +#: netbox/templates/vpn/l2vpn.html:18 msgid "Identifier" msgstr "Identyfikator" -#: templates/exceptions/import_error.html:6 +#: netbox/templates/exceptions/import_error.html:6 msgid "" "A module import error occurred during this request. Common causes include " "the following:" @@ -12402,11 +13183,11 @@ msgstr "" "Podczas tego żądania wystąpił błąd importu modułu. Typowe przyczyny " "obejmują:" -#: templates/exceptions/import_error.html:10 +#: netbox/templates/exceptions/import_error.html:10 msgid "Missing required packages" msgstr "Brakujące wymagane pakiety" -#: templates/exceptions/import_error.html:11 +#: netbox/templates/exceptions/import_error.html:11 msgid "" "This installation of NetBox might be missing one or more required Python " "packages. These packages are listed in requirements.txt and " @@ -12422,11 +13203,11 @@ msgstr "" " uruchom zamrażanie pip z konsoli i porównaj dane wyjściowe z " "listą wymaganych pakietów." -#: templates/exceptions/import_error.html:20 +#: netbox/templates/exceptions/import_error.html:20 msgid "WSGI service not restarted after upgrade" msgstr "Usługa WSGI nie została ponownie uruchomiona po aktualizacji" -#: templates/exceptions/import_error.html:21 +#: netbox/templates/exceptions/import_error.html:21 msgid "" "If this installation has recently been upgraded, check that the WSGI service" " (e.g. gunicorn or uWSGI) has been restarted. This ensures that the new code" @@ -12436,7 +13217,7 @@ msgstr "" "WSGI (np. gunicorn lub uwsGI) została ponownie uruchomiona. Zapewnia to " "uruchomienie nowego kodu." -#: templates/exceptions/permission_error.html:6 +#: netbox/templates/exceptions/permission_error.html:6 msgid "" "A file permission error was detected while processing this request. Common " "causes include the following:" @@ -12444,11 +13225,11 @@ msgstr "" "Podczas przetwarzania tego żądania wykryto błąd uprawnień do pliku. Typowe " "przyczyny obejmują:" -#: templates/exceptions/permission_error.html:10 +#: netbox/templates/exceptions/permission_error.html:10 msgid "Insufficient write permission to the media root" msgstr "Niewystarczające uprawnienia do zapisu do katalogu głównego nośnika" -#: templates/exceptions/permission_error.html:11 +#: netbox/templates/exceptions/permission_error.html:11 #, python-format msgid "" "The configured media root is %(media_root)s. Ensure that the " @@ -12459,7 +13240,7 @@ msgstr "" "się, że użytkownik NetBox działa tak, jak ma dostęp do zapisu plików we " "wszystkich lokalizacjach w tej ścieżce." -#: templates/exceptions/programming_error.html:6 +#: netbox/templates/exceptions/programming_error.html:6 msgid "" "A database programming error was detected while processing this request. " "Common causes include the following:" @@ -12467,11 +13248,11 @@ msgstr "" "Podczas przetwarzania tego żądania wykryto błąd programowania bazy danych. " "Typowe przyczyny obejmują:" -#: templates/exceptions/programming_error.html:10 +#: netbox/templates/exceptions/programming_error.html:10 msgid "Database migrations missing" msgstr "Brak migracji baz danych" -#: templates/exceptions/programming_error.html:11 +#: netbox/templates/exceptions/programming_error.html:11 msgid "" "When upgrading to a new NetBox release, the upgrade script must be run to " "apply any new database migrations. You can run migrations manually by " @@ -12482,11 +13263,11 @@ msgstr "" "Migracje można uruchamiać ręcznie, wykonując migracja python3 " "manage.py z wiersza poleceń." -#: templates/exceptions/programming_error.html:18 +#: netbox/templates/exceptions/programming_error.html:18 msgid "Unsupported PostgreSQL version" msgstr "Nieobsługiwana wersja PostgreSQL" -#: templates/exceptions/programming_error.html:19 +#: netbox/templates/exceptions/programming_error.html:19 msgid "" "Ensure that PostgreSQL version 12 or later is in use. You can check this by " "connecting to the database using NetBox's credentials and issuing a query " @@ -12496,99 +13277,102 @@ msgstr "" "sprawdzić, łącząc się z bazą danych za pomocą poświadczeń NetBox i wydając " "zapytanie dotyczące WYBIERZ WERSJĘ ()." -#: templates/extras/configcontext.html:45 -#: templates/extras/configtemplate.html:37 -#: templates/extras/exporttemplate.html:51 +#: netbox/templates/extras/configcontext.html:45 +#: netbox/templates/extras/configtemplate.html:37 +#: netbox/templates/extras/exporttemplate.html:51 msgid "The data file associated with this object has been deleted" msgstr "Plik danych powiązany z tym obiektem został usunięty" -#: templates/extras/configcontext.html:54 -#: templates/extras/configtemplate.html:46 -#: templates/extras/exporttemplate.html:60 +#: netbox/templates/extras/configcontext.html:54 +#: netbox/templates/extras/configtemplate.html:46 +#: netbox/templates/extras/exporttemplate.html:60 msgid "Data Synced" msgstr "Zsynchronizowane dane" -#: templates/extras/configcontext_list.html:7 -#: templates/extras/configtemplate_list.html:7 -#: templates/extras/exporttemplate_list.html:7 +#: netbox/templates/extras/configcontext_list.html:7 +#: netbox/templates/extras/configtemplate_list.html:7 +#: netbox/templates/extras/exporttemplate_list.html:7 msgid "Sync Data" msgstr "Synchronizuj dane" -#: templates/extras/configtemplate.html:56 +#: netbox/templates/extras/configtemplate.html:56 msgid "Environment Parameters" msgstr "Parametry środowiska" -#: templates/extras/configtemplate.html:67 -#: templates/extras/exporttemplate.html:79 +#: netbox/templates/extras/configtemplate.html:67 +#: netbox/templates/extras/exporttemplate.html:79 msgid "Template" msgstr "Szablon" -#: templates/extras/customfield.html:30 templates/extras/customlink.html:21 +#: netbox/templates/extras/customfield.html:30 +#: netbox/templates/extras/customlink.html:21 msgid "Group Name" msgstr "Nazwa grupy" -#: templates/extras/customfield.html:42 +#: netbox/templates/extras/customfield.html:42 msgid "Must be Unique" msgstr "Musi być wyjątkowy" -#: templates/extras/customfield.html:46 +#: netbox/templates/extras/customfield.html:46 msgid "Cloneable" msgstr "Klonowalne" -#: templates/extras/customfield.html:56 +#: netbox/templates/extras/customfield.html:56 msgid "Default Value" msgstr "Wartość domyślna" -#: templates/extras/customfield.html:73 +#: netbox/templates/extras/customfield.html:73 msgid "Search Weight" msgstr "Szukaj wagi" -#: templates/extras/customfield.html:83 +#: netbox/templates/extras/customfield.html:83 msgid "Filter Logic" msgstr "Filtruj logikę" -#: templates/extras/customfield.html:87 +#: netbox/templates/extras/customfield.html:87 msgid "Display Weight" msgstr "Waga wyświetlacza" -#: templates/extras/customfield.html:91 +#: netbox/templates/extras/customfield.html:91 msgid "UI Visible" msgstr "Widoczny interfejs użytkownika" -#: templates/extras/customfield.html:95 +#: netbox/templates/extras/customfield.html:95 msgid "UI Editable" msgstr "Edytowalny interfejs użytkownika" -#: templates/extras/customfield.html:115 +#: netbox/templates/extras/customfield.html:115 msgid "Validation Rules" msgstr "Reguły walidacji" -#: templates/extras/customfield.html:126 +#: netbox/templates/extras/customfield.html:126 msgid "Regular Expression" msgstr "Wyrażenie regularne" -#: templates/extras/customlink.html:29 +#: netbox/templates/extras/customlink.html:29 msgid "Button Class" msgstr "Klasa przycisków" -#: templates/extras/customlink.html:39 templates/extras/exporttemplate.html:66 -#: templates/extras/savedfilter.html:39 +#: netbox/templates/extras/customlink.html:39 +#: netbox/templates/extras/exporttemplate.html:66 +#: netbox/templates/extras/savedfilter.html:39 msgid "Assigned Models" msgstr "Przypisane modele" -#: templates/extras/customlink.html:52 +#: netbox/templates/extras/customlink.html:52 msgid "Link Text" msgstr "Tekst linku" -#: templates/extras/customlink.html:58 +#: netbox/templates/extras/customlink.html:58 msgid "Link URL" msgstr "Adres URL łącza" -#: templates/extras/dashboard/reset.html:4 templates/home.html:66 +#: netbox/templates/extras/dashboard/reset.html:4 +#: netbox/templates/home.html:66 msgid "Reset Dashboard" msgstr "Resetuj pulpit" -#: templates/extras/dashboard/reset.html:8 +#: netbox/templates/extras/dashboard/reset.html:8 msgid "" "This will remove all configured widgets and restore the " "default dashboard configuration." @@ -12596,7 +13380,7 @@ msgstr "" "Spowoduje to usunięcie wszyscy skonfigurowane widżety i " "przywrócenie domyślnej konfiguracji pulpitu nawigacyjnego." -#: templates/extras/dashboard/reset.html:13 +#: netbox/templates/extras/dashboard/reset.html:13 msgid "" "This change affects only your dashboard, and will not impact other " "users." @@ -12604,154 +13388,161 @@ msgstr "" "Ta zmiana dotyczy tylko twój pulpit nawigacyjny i nie wpłynie na " "innych użytkowników." -#: templates/extras/dashboard/widget.html:21 +#: netbox/templates/extras/dashboard/widget.html:21 msgid "widget configuration" msgstr "konfiguracja widżetu" -#: templates/extras/dashboard/widget.html:36 +#: netbox/templates/extras/dashboard/widget.html:36 msgid "Close widget" msgstr "Zamknij widżet" -#: templates/extras/dashboard/widget_add.html:7 +#: netbox/templates/extras/dashboard/widget_add.html:7 msgid "Add a Widget" msgstr "Dodawanie widżetu" -#: templates/extras/dashboard/widgets/bookmarks.html:14 +#: netbox/templates/extras/dashboard/widgets/bookmarks.html:14 msgid "No bookmarks have been added yet." msgstr "Nie dodano jeszcze żadnych zakładek." -#: templates/extras/dashboard/widgets/objectcounts.html:10 +#: netbox/templates/extras/dashboard/widgets/objectcounts.html:10 msgid "No permission" msgstr "Bez pozwolenia" -#: templates/extras/dashboard/widgets/objectlist.html:6 +#: netbox/templates/extras/dashboard/widgets/objectlist.html:6 msgid "No permission to view this content" msgstr "Brak uprawnień do przeglądania tych treści" -#: templates/extras/dashboard/widgets/objectlist.html:10 +#: netbox/templates/extras/dashboard/widgets/objectlist.html:10 msgid "Unable to load content. Invalid view name" msgstr "Nie można załadować treści. Nieprawidłowa nazwa widoku" -#: templates/extras/dashboard/widgets/rssfeed.html:12 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:12 msgid "No content found" msgstr "Nie znaleziono treści" -#: templates/extras/dashboard/widgets/rssfeed.html:18 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:18 msgid "There was a problem fetching the RSS feed" msgstr "Wystąpił problem z pobieraniem kanału RSS" -#: templates/extras/dashboard/widgets/rssfeed.html:21 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:21 msgid "HTTP" msgstr "HTTP" -#: templates/extras/eventrule.html:61 +#: netbox/templates/extras/eventrule.html:61 msgid "Conditions" msgstr "Warunki" -#: templates/extras/exporttemplate.html:23 +#: netbox/templates/extras/exporttemplate.html:23 msgid "MIME Type" msgstr "Typ MIME" -#: templates/extras/exporttemplate.html:27 +#: netbox/templates/extras/exporttemplate.html:27 msgid "File Extension" msgstr "Rozszerzenie pliku" -#: templates/extras/htmx/script_result.html:10 +#: netbox/templates/extras/htmx/script_result.html:10 msgid "Scheduled for" msgstr "Zaplanowane na" -#: templates/extras/htmx/script_result.html:15 +#: netbox/templates/extras/htmx/script_result.html:15 msgid "Duration" msgstr "Czas trwania" -#: templates/extras/htmx/script_result.html:23 +#: netbox/templates/extras/htmx/script_result.html:23 msgid "Test Summary" msgstr "Podsumowanie testu" -#: templates/extras/htmx/script_result.html:43 +#: netbox/templates/extras/htmx/script_result.html:43 msgid "Log" msgstr "Dziennik" -#: templates/extras/htmx/script_result.html:56 +#: netbox/templates/extras/htmx/script_result.html:56 msgid "Output" msgstr "Wyjście" -#: templates/extras/inc/result_pending.html:4 +#: netbox/templates/extras/inc/result_pending.html:4 msgid "Loading" msgstr "Ładowanie" -#: templates/extras/inc/result_pending.html:6 +#: netbox/templates/extras/inc/result_pending.html:6 msgid "Results pending" msgstr "Wyniki oczekujące" -#: templates/extras/journalentry.html:15 +#: netbox/templates/extras/journalentry.html:15 msgid "Journal Entry" msgstr "Wpis do dziennika" -#: templates/extras/notificationgroup.html:11 +#: netbox/templates/extras/notificationgroup.html:11 msgid "Notification Group" msgstr "Grupa powiadomień" -#: templates/extras/notificationgroup.html:36 -#: templates/extras/notificationgroup.html:46 -#: utilities/templates/widgets/clearable_file_input.html:12 +#: netbox/templates/extras/notificationgroup.html:36 +#: netbox/templates/extras/notificationgroup.html:46 +#: netbox/utilities/templates/widgets/clearable_file_input.html:12 msgid "None assigned" msgstr "Brak przypisanych" -#: templates/extras/object_configcontext.html:19 +#: netbox/templates/extras/object_configcontext.html:19 msgid "The local config context overwrites all source contexts" msgstr "Kontekst konfiguracji lokalnej zastępuje wszystkie konteksty źródłowe" -#: templates/extras/object_configcontext.html:25 +#: netbox/templates/extras/object_configcontext.html:25 msgid "Source Contexts" msgstr "Konteksty źródłowe" -#: templates/extras/object_journal.html:17 +#: netbox/templates/extras/object_journal.html:17 msgid "New Journal Entry" msgstr "Nowy wpis do dziennika" -#: templates/extras/report/base.html:30 +#: netbox/templates/extras/report/base.html:30 msgid "Report" msgstr "Zgłoś" -#: templates/extras/script.html:14 +#: netbox/templates/extras/script.html:14 msgid "You do not have permission to run scripts" msgstr "Nie masz uprawnień do uruchamiania skryptów" -#: templates/extras/script.html:41 templates/extras/script.html:45 -#: templates/extras/script_list.html:86 +#: netbox/templates/extras/script.html:41 +#: netbox/templates/extras/script.html:45 +#: netbox/templates/extras/script_list.html:87 msgid "Run Script" msgstr "Uruchom skrypt" -#: templates/extras/script.html:51 templates/extras/script/source.html:10 +#: netbox/templates/extras/script.html:51 +#: netbox/templates/extras/script/source.html:10 msgid "Error loading script" msgstr "Błąd ładowania skryptu" -#: templates/extras/script/jobs.html:16 +#: netbox/templates/extras/script/jobs.html:16 msgid "Script no longer exists in the source file." msgstr "Skrypt nie istnieje już w pliku źródłowym." -#: templates/extras/script_list.html:46 +#: netbox/templates/extras/script_list.html:47 msgid "Last Run" msgstr "Ostatni bieg" -#: templates/extras/script_list.html:61 +#: netbox/templates/extras/script_list.html:62 msgid "Script is no longer present in the source file" msgstr "Skrypt nie jest już obecny w pliku źródłowym" -#: templates/extras/script_list.html:74 +#: netbox/templates/extras/script_list.html:75 msgid "Never" msgstr "Nigdy" -#: templates/extras/script_list.html:84 +#: netbox/templates/extras/script_list.html:85 msgid "Run Again" msgstr "Uruchom ponownie" -#: templates/extras/script_list.html:138 +#: netbox/templates/extras/script_list.html:133 +#, python-format +msgid "Could not load scripts from module %(module)s" +msgstr "" + +#: netbox/templates/extras/script_list.html:141 msgid "No Scripts Found" msgstr "Nie znaleziono skryptów" -#: templates/extras/script_list.html:141 +#: netbox/templates/extras/script_list.html:144 #, python-format msgid "" "Get started by creating a script from " @@ -12760,81 +13551,83 @@ msgstr "" "Zacznij od utworzenia skryptu " "z przesłanego pliku lub źródła danych." -#: templates/extras/script_result.html:35 -#: templates/generic/object_list.html:50 templates/search.html:13 +#: netbox/templates/extras/script_result.html:35 +#: netbox/templates/generic/object_list.html:50 +#: netbox/templates/search.html:13 msgid "Results" msgstr "Wyniki" -#: templates/extras/script_result.html:46 +#: netbox/templates/extras/script_result.html:46 msgid "Log threshold" msgstr "Próg dziennika" -#: templates/extras/script_result.html:56 +#: netbox/templates/extras/script_result.html:56 msgid "All" msgstr "Wszystko" -#: templates/extras/tag.html:32 +#: netbox/templates/extras/tag.html:32 msgid "Tagged Items" msgstr "Oznaczone przedmioty" -#: templates/extras/tag.html:43 +#: netbox/templates/extras/tag.html:43 msgid "Allowed Object Types" msgstr "Dozwolone typy obiektów" -#: templates/extras/tag.html:51 +#: netbox/templates/extras/tag.html:51 msgid "Any" msgstr "Dowolny" -#: templates/extras/tag.html:57 +#: netbox/templates/extras/tag.html:57 msgid "Tagged Item Types" msgstr "Oznaczone typy przedmiotów" -#: templates/extras/tag.html:81 +#: netbox/templates/extras/tag.html:81 msgid "Tagged Objects" msgstr "Oznaczone obiekty" -#: templates/extras/webhook.html:26 +#: netbox/templates/extras/webhook.html:26 msgid "HTTP Method" msgstr "Metoda HTTP" -#: templates/extras/webhook.html:34 +#: netbox/templates/extras/webhook.html:34 msgid "HTTP Content Type" msgstr "Typ zawartości HTTP" -#: templates/extras/webhook.html:47 +#: netbox/templates/extras/webhook.html:47 msgid "SSL Verification" msgstr "Weryfikacja SSL" -#: templates/extras/webhook.html:60 +#: netbox/templates/extras/webhook.html:60 msgid "Additional Headers" msgstr "Dodatkowe nagłówki" -#: templates/extras/webhook.html:70 +#: netbox/templates/extras/webhook.html:70 msgid "Body Template" msgstr "Szablon ciała" -#: templates/generic/bulk_add_component.html:29 +#: netbox/templates/generic/bulk_add_component.html:29 msgid "Bulk Creation" msgstr "Tworzenie zbiorcze" -#: templates/generic/bulk_add_component.html:34 -#: templates/generic/bulk_delete.html:32 templates/generic/bulk_edit.html:33 +#: netbox/templates/generic/bulk_add_component.html:34 +#: netbox/templates/generic/bulk_delete.html:32 +#: netbox/templates/generic/bulk_edit.html:33 msgid "Selected Objects" msgstr "Wybrane obiekty" -#: templates/generic/bulk_add_component.html:58 +#: netbox/templates/generic/bulk_add_component.html:58 msgid "to Add" msgstr "Dodać" -#: templates/generic/bulk_delete.html:27 +#: netbox/templates/generic/bulk_delete.html:27 msgid "Bulk Delete" msgstr "Usuwanie zbiorcze" -#: templates/generic/bulk_delete.html:49 +#: netbox/templates/generic/bulk_delete.html:49 msgid "Confirm Bulk Deletion" msgstr "Potwierdź masowe usuwanie" -#: templates/generic/bulk_delete.html:50 +#: netbox/templates/generic/bulk_delete.html:50 #, python-format msgid "" "The following operation will delete %(count)s " @@ -12845,65 +13638,68 @@ msgstr "" "%(type_plural)s. Proszę dokładnie przejrzeć wybrane obiekty i potwierdzić tę" " akcję." -#: templates/generic/bulk_edit.html:21 templates/generic/object_edit.html:22 +#: netbox/templates/generic/bulk_edit.html:21 +#: netbox/templates/generic/object_edit.html:22 msgid "Editing" msgstr "Edycja" -#: templates/generic/bulk_edit.html:28 +#: netbox/templates/generic/bulk_edit.html:28 msgid "Bulk Edit" msgstr "Edycja zbiorcza" -#: templates/generic/bulk_edit.html:107 templates/generic/bulk_rename.html:66 +#: netbox/templates/generic/bulk_edit.html:107 +#: netbox/templates/generic/bulk_rename.html:66 msgid "Apply" msgstr "Zastosuj" -#: templates/generic/bulk_import.html:19 +#: netbox/templates/generic/bulk_import.html:19 msgid "Bulk Import" msgstr "Import zbiorczy" -#: templates/generic/bulk_import.html:25 +#: netbox/templates/generic/bulk_import.html:25 msgid "Direct Import" msgstr "Import bezpośredni" -#: templates/generic/bulk_import.html:30 +#: netbox/templates/generic/bulk_import.html:30 msgid "Upload File" msgstr "Prześlij plik" -#: templates/generic/bulk_import.html:58 templates/generic/bulk_import.html:80 -#: templates/generic/bulk_import.html:102 +#: netbox/templates/generic/bulk_import.html:58 +#: netbox/templates/generic/bulk_import.html:80 +#: netbox/templates/generic/bulk_import.html:102 msgid "Submit" msgstr "Zatwierdź" -#: templates/generic/bulk_import.html:113 +#: netbox/templates/generic/bulk_import.html:113 msgid "Field Options" msgstr "Opcje pola" -#: templates/generic/bulk_import.html:119 +#: netbox/templates/generic/bulk_import.html:119 msgid "Accessor" msgstr "Akcesoria" -#: templates/generic/bulk_import.html:148 +#: netbox/templates/generic/bulk_import.html:148 msgid "choices" msgstr "wyborów" -#: templates/generic/bulk_import.html:161 +#: netbox/templates/generic/bulk_import.html:161 msgid "Import Value" msgstr "Wartość importu" -#: templates/generic/bulk_import.html:181 +#: netbox/templates/generic/bulk_import.html:181 msgid "Format: YYYY-MM-DD" msgstr "Format: RRRR-MM-DD" -#: templates/generic/bulk_import.html:183 +#: netbox/templates/generic/bulk_import.html:183 msgid "Specify true or false" msgstr "Określ prawdę lub fałsz" -#: templates/generic/bulk_import.html:195 +#: netbox/templates/generic/bulk_import.html:195 msgid "Required fields must be specified for all objects." msgstr "" "Wymagane pola musi być określony dla wszystkich obiektów." -#: templates/generic/bulk_import.html:201 +#: netbox/templates/generic/bulk_import.html:201 #, python-format msgid "" "Related objects may be referenced by any unique attribute. For example, " @@ -12913,15 +13709,15 @@ msgstr "" "przykład, %(example)s zidentyfikowałby VRF za pomocą " "rozróżniacza trasy." -#: templates/generic/bulk_remove.html:28 +#: netbox/templates/generic/bulk_remove.html:28 msgid "Bulk Remove" msgstr "Usuwanie zbiorcze" -#: templates/generic/bulk_remove.html:42 +#: netbox/templates/generic/bulk_remove.html:42 msgid "Confirm Bulk Removal" msgstr "Potwierdź usuwanie zbiorcze" -#: templates/generic/bulk_remove.html:43 +#: netbox/templates/generic/bulk_remove.html:43 #, python-format msgid "" "The following operation will remove %(count)s %(obj_type_plural)s from " @@ -12932,72 +13728,72 @@ msgstr "" "%(parent_obj)s. Proszę dokładnie zapoznać się z %(obj_type_plural)s do " "usunięcia i potwierdzenia poniżej." -#: templates/generic/bulk_remove.html:64 +#: netbox/templates/generic/bulk_remove.html:64 #, python-format msgid "Remove these %(count)s %(obj_type_plural)s" msgstr "Usuń te %(count)s %(obj_type_plural)s" -#: templates/generic/bulk_rename.html:20 +#: netbox/templates/generic/bulk_rename.html:20 msgid "Renaming" msgstr "Zmiana nazwy" -#: templates/generic/bulk_rename.html:27 +#: netbox/templates/generic/bulk_rename.html:27 msgid "Bulk Rename" msgstr "Zbiorcza zmiana nazwy" -#: templates/generic/bulk_rename.html:39 +#: netbox/templates/generic/bulk_rename.html:39 msgid "Current Name" msgstr "Obecna nazwa" -#: templates/generic/bulk_rename.html:40 +#: netbox/templates/generic/bulk_rename.html:40 msgid "New Name" msgstr "Nowa nazwa" -#: templates/generic/bulk_rename.html:64 -#: utilities/templates/widgets/markdown_input.html:11 +#: netbox/templates/generic/bulk_rename.html:64 +#: netbox/utilities/templates/widgets/markdown_input.html:11 msgid "Preview" msgstr "Podgląd" -#: templates/generic/confirmation_form.html:16 +#: netbox/templates/generic/confirmation_form.html:16 msgid "Are you sure" msgstr "Jesteś pewien" -#: templates/generic/confirmation_form.html:20 +#: netbox/templates/generic/confirmation_form.html:20 msgid "Confirm" msgstr "Potwierdź" -#: templates/generic/object_children.html:47 -#: utilities/templates/buttons/bulk_edit.html:4 +#: netbox/templates/generic/object_children.html:47 +#: netbox/utilities/templates/buttons/bulk_edit.html:4 msgid "Edit Selected" msgstr "Edytuj wybrane" -#: templates/generic/object_children.html:61 -#: utilities/templates/buttons/bulk_delete.html:4 +#: netbox/templates/generic/object_children.html:61 +#: netbox/utilities/templates/buttons/bulk_delete.html:4 msgid "Delete Selected" msgstr "Usuń zaznaczone" -#: templates/generic/object_edit.html:24 +#: netbox/templates/generic/object_edit.html:24 #, python-format msgid "Add a new %(object_type)s" msgstr "Dodaj nowy %(object_type)s" -#: templates/generic/object_edit.html:35 +#: netbox/templates/generic/object_edit.html:35 msgid "View model documentation" msgstr "Wyświetl dokumentację modelu" -#: templates/generic/object_edit.html:36 +#: netbox/templates/generic/object_edit.html:36 msgid "Help" msgstr "Pomoc" -#: templates/generic/object_edit.html:83 +#: netbox/templates/generic/object_edit.html:83 msgid "Create & Add Another" msgstr "Utwórz i dodaj kolejny" -#: templates/generic/object_list.html:57 +#: netbox/templates/generic/object_list.html:57 msgid "Filters" msgstr "Filtry" -#: templates/generic/object_list.html:88 +#: netbox/templates/generic/object_list.html:88 #, python-format msgid "" "Select all %(count)s " @@ -13006,40 +13802,40 @@ msgstr "" "Wybierz wszyscy %(count)s " "%(object_type_plural)s pasujące zapytanie" -#: templates/home.html:15 +#: netbox/templates/home.html:15 msgid "New Release Available" msgstr "Dostępne nowe wydanie" -#: templates/home.html:16 +#: netbox/templates/home.html:16 msgid "is available" msgstr "jest dostępny" -#: templates/home.html:18 +#: netbox/templates/home.html:18 msgctxt "Document title" msgid "Upgrade Instructions" msgstr "Instrukcje uaktualnienia" -#: templates/home.html:40 +#: netbox/templates/home.html:40 msgid "Unlock Dashboard" msgstr "Odblokuj pulpit" -#: templates/home.html:49 +#: netbox/templates/home.html:49 msgid "Lock Dashboard" msgstr "Zablokuj pulpit" -#: templates/home.html:60 +#: netbox/templates/home.html:60 msgid "Add Widget" msgstr "Dodaj widżet" -#: templates/home.html:63 +#: netbox/templates/home.html:63 msgid "Save Layout" msgstr "Zapisz układ" -#: templates/htmx/delete_form.html:7 +#: netbox/templates/htmx/delete_form.html:7 msgid "Confirm Deletion" msgstr "Potwierdź usunięcie" -#: templates/htmx/delete_form.html:11 +#: netbox/templates/htmx/delete_form.html:11 #, python-format msgid "" "Are you sure you want to delete " @@ -13048,40 +13844,40 @@ msgstr "" "Jesteś pewien, że chcesz usunąć " "%(object_type)s %(object)s?" -#: templates/htmx/delete_form.html:17 +#: netbox/templates/htmx/delete_form.html:17 msgid "The following objects will be deleted as a result of this action." msgstr "Następujące obiekty zostaną usunięte w wyniku tej akcji." -#: templates/htmx/notifications.html:15 +#: netbox/templates/htmx/notifications.html:15 msgid "ago" msgstr "temu" -#: templates/htmx/notifications.html:26 +#: netbox/templates/htmx/notifications.html:26 msgid "No unread notifications" msgstr "Brak nieprzeczytanych powiadomień" -#: templates/htmx/notifications.html:31 +#: netbox/templates/htmx/notifications.html:31 msgid "All notifications" msgstr "Wszystkie powiadomienia" -#: templates/htmx/object_selector.html:5 +#: netbox/templates/htmx/object_selector.html:5 msgid "Select" msgstr "Wybierz" -#: templates/inc/filter_list.html:43 -#: utilities/templates/helpers/table_config_form.html:39 +#: netbox/templates/inc/filter_list.html:43 +#: netbox/utilities/templates/helpers/table_config_form.html:39 msgid "Reset" msgstr "Resetuj" -#: templates/inc/light_toggle.html:4 +#: netbox/templates/inc/light_toggle.html:4 msgid "Enable dark mode" msgstr "Włącz tryb ciemny" -#: templates/inc/light_toggle.html:7 +#: netbox/templates/inc/light_toggle.html:7 msgid "Enable light mode" msgstr "Włącz tryb oświetlenia" -#: templates/inc/missing_prerequisites.html:8 +#: netbox/templates/inc/missing_prerequisites.html:8 #, python-format msgid "" "Before you can add a %(model)s you must first create a " @@ -13090,282 +13886,284 @@ msgstr "" "Zanim będziesz mógł dodać %(model)s musisz najpierw utworzyć " "%(prerequisite_model)s." -#: templates/inc/paginator.html:15 +#: netbox/templates/inc/paginator.html:15 msgid "Page selection" msgstr "Wybór strony" -#: templates/inc/paginator.html:75 +#: netbox/templates/inc/paginator.html:75 #, python-format msgid "Showing %(start)s-%(end)s of %(total)s" msgstr "Pokazują %(start)s-%(end)s z %(total)s" -#: templates/inc/paginator.html:82 +#: netbox/templates/inc/paginator.html:82 msgid "Pagination options" msgstr "Opcje stronicowania" -#: templates/inc/paginator.html:86 +#: netbox/templates/inc/paginator.html:86 msgid "Per Page" msgstr "Na stronę" -#: templates/inc/panels/image_attachments.html:10 +#: netbox/templates/inc/panels/image_attachments.html:10 msgid "Attach an image" msgstr "Dołącz obraz" -#: templates/inc/panels/related_objects.html:5 +#: netbox/templates/inc/panels/related_objects.html:5 msgid "Related Objects" msgstr "Powiązane obiekty" -#: templates/inc/panels/tags.html:11 +#: netbox/templates/inc/panels/tags.html:11 msgid "No tags assigned" msgstr "Brak przypisanych tagów" -#: templates/inc/sync_warning.html:10 +#: netbox/templates/inc/sync_warning.html:10 msgid "Data is out of sync with upstream file" msgstr "Dane nie są zsynchronizowane z plikiem poprzedzającym" -#: templates/inc/table_controls_htmx.html:7 +#: netbox/templates/inc/table_controls_htmx.html:7 msgid "Quick search" msgstr "Szybkie wyszukiwanie" -#: templates/inc/table_controls_htmx.html:20 +#: netbox/templates/inc/table_controls_htmx.html:20 msgid "Saved filter" msgstr "Zapisany filtr" -#: templates/inc/table_htmx.html:18 +#: netbox/templates/inc/table_htmx.html:18 msgid "Clear ordering" msgstr "Wyraźne zamawianie" -#: templates/inc/user_menu.html:6 +#: netbox/templates/inc/user_menu.html:6 msgid "Help center" msgstr "Centrum pomocy" -#: templates/inc/user_menu.html:41 +#: netbox/templates/inc/user_menu.html:41 msgid "Django Admin" msgstr "Administrator Django" -#: templates/inc/user_menu.html:61 +#: netbox/templates/inc/user_menu.html:61 msgid "Log Out" msgstr "Wyloguj się" -#: templates/inc/user_menu.html:68 templates/login.html:38 +#: netbox/templates/inc/user_menu.html:68 netbox/templates/login.html:38 msgid "Log In" msgstr "Zaloguj się" -#: templates/ipam/aggregate.html:14 templates/ipam/ipaddress.html:14 -#: templates/ipam/iprange.html:13 templates/ipam/prefix.html:15 +#: netbox/templates/ipam/aggregate.html:14 +#: netbox/templates/ipam/ipaddress.html:14 +#: netbox/templates/ipam/iprange.html:13 netbox/templates/ipam/prefix.html:15 msgid "Family" msgstr "Rodzina" -#: templates/ipam/aggregate.html:39 +#: netbox/templates/ipam/aggregate.html:39 msgid "Date Added" msgstr "Data dodania" -#: templates/ipam/aggregate/prefixes.html:8 -#: templates/ipam/prefix/prefixes.html:8 templates/ipam/role.html:10 +#: netbox/templates/ipam/aggregate/prefixes.html:8 +#: netbox/templates/ipam/prefix/prefixes.html:8 +#: netbox/templates/ipam/role.html:10 msgid "Add Prefix" msgstr "Dodaj prefiks" -#: templates/ipam/asn.html:23 +#: netbox/templates/ipam/asn.html:23 msgid "AS Number" msgstr "Numer AS" -#: templates/ipam/fhrpgroup.html:52 +#: netbox/templates/ipam/fhrpgroup.html:52 msgid "Authentication Type" msgstr "Typ uwierzytelniania" -#: templates/ipam/fhrpgroup.html:56 +#: netbox/templates/ipam/fhrpgroup.html:56 msgid "Authentication Key" msgstr "klucz uwierzytelniania" -#: templates/ipam/fhrpgroup.html:69 +#: netbox/templates/ipam/fhrpgroup.html:69 msgid "Virtual IP Addresses" msgstr "Wirtualne adresy IP" -#: templates/ipam/inc/ipaddress_edit_header.html:13 +#: netbox/templates/ipam/inc/ipaddress_edit_header.html:13 msgid "Assign IP" msgstr "Przypisz adres IP" -#: templates/ipam/inc/ipaddress_edit_header.html:19 +#: netbox/templates/ipam/inc/ipaddress_edit_header.html:19 msgid "Bulk Create" msgstr "Tworzenie zbiorcze" -#: templates/ipam/inc/panels/fhrp_groups.html:10 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:10 msgid "Create Group" msgstr "Utwórz grupę" -#: templates/ipam/inc/panels/fhrp_groups.html:25 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:25 msgid "Virtual IPs" msgstr "Wirtualne adresy IP" -#: templates/ipam/inc/toggle_available.html:7 +#: netbox/templates/ipam/inc/toggle_available.html:7 msgid "Show Assigned" msgstr "Pokaż przypisane" -#: templates/ipam/inc/toggle_available.html:10 +#: netbox/templates/ipam/inc/toggle_available.html:10 msgid "Show Available" msgstr "Pokaż dostępne" -#: templates/ipam/inc/toggle_available.html:13 +#: netbox/templates/ipam/inc/toggle_available.html:13 msgid "Show All" msgstr "Pokaż wszystko" -#: templates/ipam/ipaddress.html:23 templates/ipam/iprange.html:45 -#: templates/ipam/prefix.html:24 +#: netbox/templates/ipam/ipaddress.html:23 +#: netbox/templates/ipam/iprange.html:45 netbox/templates/ipam/prefix.html:24 msgid "Global" msgstr "Globalny" -#: templates/ipam/ipaddress.html:85 +#: netbox/templates/ipam/ipaddress.html:85 msgid "NAT (outside)" msgstr "NAT (na zewnątrz)" -#: templates/ipam/ipaddress_assign.html:8 +#: netbox/templates/ipam/ipaddress_assign.html:8 msgid "Assign an IP Address" msgstr "Przypisanie adresu IP" -#: templates/ipam/ipaddress_assign.html:22 +#: netbox/templates/ipam/ipaddress_assign.html:22 msgid "Select IP Address" msgstr "Wybierz adres IP" -#: templates/ipam/ipaddress_assign.html:35 +#: netbox/templates/ipam/ipaddress_assign.html:35 msgid "Search Results" msgstr "Wyniki wyszukiwania" -#: templates/ipam/ipaddress_bulk_add.html:6 +#: netbox/templates/ipam/ipaddress_bulk_add.html:6 msgid "Bulk Add IP Addresses" msgstr "Masowe dodawanie adresów IP" -#: templates/ipam/iprange.html:17 +#: netbox/templates/ipam/iprange.html:17 msgid "Starting Address" msgstr "Adres początkowy" -#: templates/ipam/iprange.html:21 +#: netbox/templates/ipam/iprange.html:21 msgid "Ending Address" msgstr "Adres końcowy" -#: templates/ipam/iprange.html:33 templates/ipam/prefix.html:110 +#: netbox/templates/ipam/iprange.html:33 netbox/templates/ipam/prefix.html:110 msgid "Marked fully utilized" msgstr "Oznaczone w pełni wykorzystane" -#: templates/ipam/prefix.html:99 +#: netbox/templates/ipam/prefix.html:99 msgid "Addressing Details" msgstr "Szczegóły adresowania" -#: templates/ipam/prefix.html:118 +#: netbox/templates/ipam/prefix.html:118 msgid "Child IPs" msgstr "Adresy IP dla dzieci" -#: templates/ipam/prefix.html:126 +#: netbox/templates/ipam/prefix.html:126 msgid "Available IPs" msgstr "Dostępne adresy IP" -#: templates/ipam/prefix.html:138 +#: netbox/templates/ipam/prefix.html:138 msgid "First available IP" msgstr "Pierwszy dostępny adres IP" -#: templates/ipam/prefix.html:179 +#: netbox/templates/ipam/prefix.html:179 msgid "Prefix Details" msgstr "Szczegóły prefiksu" -#: templates/ipam/prefix.html:185 +#: netbox/templates/ipam/prefix.html:185 msgid "Network Address" msgstr "Adres sieciowy" -#: templates/ipam/prefix.html:189 +#: netbox/templates/ipam/prefix.html:189 msgid "Network Mask" msgstr "Maska sieciowa" -#: templates/ipam/prefix.html:193 +#: netbox/templates/ipam/prefix.html:193 msgid "Wildcard Mask" msgstr "Maska wieloznaczna" -#: templates/ipam/prefix.html:197 +#: netbox/templates/ipam/prefix.html:197 msgid "Broadcast Address" msgstr "Adres transmisji" -#: templates/ipam/prefix/ip_ranges.html:7 +#: netbox/templates/ipam/prefix/ip_ranges.html:7 msgid "Add IP Range" msgstr "Dodaj zakres IP" -#: templates/ipam/prefix_list.html:7 +#: netbox/templates/ipam/prefix_list.html:7 msgid "Hide Depth Indicators" msgstr "Ukryj wskaźniki głębokości" -#: templates/ipam/prefix_list.html:11 +#: netbox/templates/ipam/prefix_list.html:11 msgid "Max Depth" msgstr "Maksymalna głębokość" -#: templates/ipam/prefix_list.html:28 +#: netbox/templates/ipam/prefix_list.html:28 msgid "Max Length" msgstr "Maksymalna długość" -#: templates/ipam/rir.html:10 +#: netbox/templates/ipam/rir.html:10 msgid "Add Aggregate" msgstr "Dodaj agregat" -#: templates/ipam/routetarget.html:38 +#: netbox/templates/ipam/routetarget.html:38 msgid "Importing VRFs" msgstr "Importowanie plików VRF" -#: templates/ipam/routetarget.html:44 +#: netbox/templates/ipam/routetarget.html:44 msgid "Exporting VRFs" msgstr "Eksportowanie plików VRF" -#: templates/ipam/routetarget.html:52 +#: netbox/templates/ipam/routetarget.html:52 msgid "Importing L2VPNs" msgstr "Importowanie L2VPN" -#: templates/ipam/routetarget.html:58 +#: netbox/templates/ipam/routetarget.html:58 msgid "Exporting L2VPNs" msgstr "Eksportowanie L2VPN" -#: templates/ipam/vlan.html:88 +#: netbox/templates/ipam/vlan.html:88 msgid "Add a Prefix" msgstr "Dodaj prefiks" -#: templates/ipam/vlangroup.html:18 +#: netbox/templates/ipam/vlangroup.html:18 msgid "Add VLAN" msgstr "Dodaj VLAN" -#: templates/ipam/vrf.html:16 +#: netbox/templates/ipam/vrf.html:16 msgid "Route Distinguisher" msgstr "Rozróżniacz trasy" -#: templates/ipam/vrf.html:29 +#: netbox/templates/ipam/vrf.html:29 msgid "Unique IP Space" msgstr "Unikalna przestrzeń IP" -#: templates/login.html:29 -#: utilities/templates/form_helpers/render_errors.html:7 +#: netbox/templates/login.html:29 +#: netbox/utilities/templates/form_helpers/render_errors.html:7 msgid "Errors" msgstr "Błędy" -#: templates/login.html:69 +#: netbox/templates/login.html:69 msgid "Sign In" msgstr "Zaloguj się" -#: templates/login.html:77 +#: netbox/templates/login.html:77 msgctxt "Denotes an alternative option" msgid "Or" msgstr "Lub" -#: templates/media_failure.html:7 +#: netbox/templates/media_failure.html:7 msgid "Static Media Failure - NetBox" msgstr "Awaria nośnika statycznego - NetBox" -#: templates/media_failure.html:21 +#: netbox/templates/media_failure.html:21 msgid "Static Media Failure" msgstr "Awaria nośnika statycznego" -#: templates/media_failure.html:23 +#: netbox/templates/media_failure.html:23 msgid "The following static media file failed to load" msgstr "" "Nie udało się załadować następującego statycznego pliku multimedialnego" -#: templates/media_failure.html:26 +#: netbox/templates/media_failure.html:26 msgid "Check the following" msgstr "Sprawdź następujące" -#: templates/media_failure.html:29 +#: netbox/templates/media_failure.html:29 msgid "" "manage.py collectstatic was run during the most recent upgrade." " This installs the most recent iteration of each static file into the static" @@ -13375,7 +14173,7 @@ msgstr "" "aktualizacji. Spowoduje to zainstalowanie najnowszej iteracji każdego pliku " "statycznego do statycznej ścieżki głównej." -#: templates/media_failure.html:35 +#: netbox/templates/media_failure.html:35 #, python-format msgid "" "The HTTP service (e.g. nginx or Apache) is configured to serve files from " @@ -13386,7 +14184,7 @@ msgstr "" "STATYCZNY KORZEŃ ścieżka. Zapoznaj się z dokumentacja instalacji dalszych wskazówek." -#: templates/media_failure.html:47 +#: netbox/templates/media_failure.html:47 #, python-format msgid "" "The file %(filename)s exists in the static root directory and " @@ -13395,548 +14193,571 @@ msgstr "" "Plik %(filename)s istnieje w statycznym katalogu głównym i jest" " czytelny przez serwer HTTP." -#: templates/media_failure.html:55 +#: netbox/templates/media_failure.html:55 #, python-format msgid "Click here to attempt loading NetBox again." msgstr "" "Kliknij tutaj aby spróbować ponownie załadować " "NetBox." -#: templates/tenancy/contact.html:18 tenancy/filtersets.py:147 -#: tenancy/forms/bulk_edit.py:137 tenancy/forms/filtersets.py:102 -#: tenancy/forms/forms.py:56 tenancy/forms/model_forms.py:106 -#: tenancy/forms/model_forms.py:130 tenancy/tables/contacts.py:98 +#: netbox/templates/tenancy/contact.html:18 netbox/tenancy/filtersets.py: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/model_forms.py:130 +#: netbox/tenancy/tables/contacts.py:98 msgid "Contact" msgstr "Kontakt" -#: templates/tenancy/contact.html:29 tenancy/forms/bulk_edit.py:99 +#: netbox/templates/tenancy/contact.html:29 +#: netbox/tenancy/forms/bulk_edit.py:99 msgid "Title" msgstr "Tytuł" -#: templates/tenancy/contact.html:33 tenancy/forms/bulk_edit.py:104 -#: tenancy/tables/contacts.py:64 +#: netbox/templates/tenancy/contact.html:33 +#: netbox/tenancy/forms/bulk_edit.py:104 netbox/tenancy/tables/contacts.py:64 msgid "Phone" msgstr "Telefon" -#: templates/tenancy/contactgroup.html:18 tenancy/forms/forms.py:66 -#: tenancy/forms/model_forms.py:75 +#: netbox/templates/tenancy/contactgroup.html:18 +#: netbox/tenancy/forms/forms.py:66 netbox/tenancy/forms/model_forms.py:75 msgid "Contact Group" msgstr "Grupa kontaktowa" -#: templates/tenancy/contactgroup.html:50 +#: netbox/templates/tenancy/contactgroup.html:50 msgid "Add Contact Group" msgstr "Dodaj grupę kontaktów" -#: templates/tenancy/contactrole.html:15 tenancy/filtersets.py:152 -#: tenancy/forms/forms.py:61 tenancy/forms/model_forms.py:87 +#: netbox/templates/tenancy/contactrole.html:15 +#: netbox/tenancy/filtersets.py:152 netbox/tenancy/forms/forms.py:61 +#: netbox/tenancy/forms/model_forms.py:87 msgid "Contact Role" msgstr "Rola kontaktowa" -#: templates/tenancy/object_contacts.html:9 +#: netbox/templates/tenancy/object_contacts.html:9 msgid "Add a contact" msgstr "Dodawanie kontaktu" -#: templates/tenancy/tenantgroup.html:17 +#: netbox/templates/tenancy/tenantgroup.html:17 msgid "Add Tenant" msgstr "Dodaj najemcę" -#: templates/tenancy/tenantgroup.html:26 tenancy/forms/model_forms.py:32 -#: tenancy/tables/columns.py:51 tenancy/tables/columns.py:61 +#: netbox/templates/tenancy/tenantgroup.html:26 +#: netbox/tenancy/forms/model_forms.py:32 netbox/tenancy/tables/columns.py:51 +#: netbox/tenancy/tables/columns.py:61 msgid "Tenant Group" msgstr "Grupa Najemców" -#: templates/tenancy/tenantgroup.html:59 +#: netbox/templates/tenancy/tenantgroup.html:59 msgid "Add Tenant Group" msgstr "Dodaj grupę najemców" -#: templates/users/group.html:39 templates/users/user.html:63 +#: netbox/templates/users/group.html:39 netbox/templates/users/user.html:63 msgid "Assigned Permissions" msgstr "Przypisane uprawnienia" -#: templates/users/objectpermission.html:6 -#: templates/users/objectpermission.html:14 users/forms/filtersets.py:66 +#: netbox/templates/users/objectpermission.html:6 +#: netbox/templates/users/objectpermission.html:14 +#: netbox/users/forms/filtersets.py:66 msgid "Permission" msgstr "Pozwolenie" -#: templates/users/objectpermission.html:34 +#: netbox/templates/users/objectpermission.html:34 msgid "View" msgstr "Widok" -#: templates/users/objectpermission.html:52 users/forms/model_forms.py:315 +#: netbox/templates/users/objectpermission.html:52 +#: netbox/users/forms/model_forms.py:315 msgid "Constraints" msgstr "Ograniczenia" -#: templates/users/objectpermission.html:72 +#: netbox/templates/users/objectpermission.html:72 msgid "Assigned Users" msgstr "Przydzieleni użytkownicy" -#: templates/virtualization/cluster.html:52 +#: netbox/templates/virtualization/cluster.html:52 msgid "Allocated Resources" msgstr "Przydzielone zasoby" -#: templates/virtualization/cluster.html:55 -#: templates/virtualization/virtualmachine.html:125 +#: netbox/templates/virtualization/cluster.html:55 +#: netbox/templates/virtualization/virtualmachine.html:125 msgid "Virtual CPUs" msgstr "Wirtualne procesory" -#: templates/virtualization/cluster.html:59 -#: templates/virtualization/virtualmachine.html:129 +#: netbox/templates/virtualization/cluster.html:59 +#: netbox/templates/virtualization/virtualmachine.html:129 msgid "Memory" msgstr "Pamięć" -#: templates/virtualization/cluster.html:69 -#: templates/virtualization/virtualmachine.html:140 +#: netbox/templates/virtualization/cluster.html:69 +#: netbox/templates/virtualization/virtualmachine.html:140 msgid "Disk Space" msgstr "Miejsce na dysku" -#: templates/virtualization/cluster/base.html:18 +#: netbox/templates/virtualization/cluster/base.html:18 msgid "Add Virtual Machine" msgstr "Dodaj maszynę wirtualną" -#: templates/virtualization/cluster/base.html:24 +#: netbox/templates/virtualization/cluster/base.html:24 msgid "Assign Device" msgstr "Przypisz urządzenie" -#: templates/virtualization/cluster/devices.html:10 +#: netbox/templates/virtualization/cluster/devices.html:10 msgid "Remove Selected" msgstr "Usuń zaznaczone" -#: templates/virtualization/cluster_add_devices.html:9 +#: netbox/templates/virtualization/cluster_add_devices.html:9 #, python-format msgid "Add Device to Cluster %(cluster)s" msgstr "Dodaj urządzenie do klastra %(cluster)s" -#: templates/virtualization/cluster_add_devices.html:23 +#: netbox/templates/virtualization/cluster_add_devices.html:23 msgid "Device Selection" msgstr "Wybór urządzenia" -#: templates/virtualization/cluster_add_devices.html:31 +#: netbox/templates/virtualization/cluster_add_devices.html:31 msgid "Add Devices" msgstr "Dodawanie urządzeń" -#: templates/virtualization/clustergroup.html:10 -#: templates/virtualization/clustertype.html:10 +#: netbox/templates/virtualization/clustergroup.html:10 +#: netbox/templates/virtualization/clustertype.html:10 msgid "Add Cluster" msgstr "Dodaj klaster" -#: templates/virtualization/clustergroup.html:19 -#: virtualization/forms/model_forms.py:50 +#: netbox/templates/virtualization/clustergroup.html:19 +#: netbox/virtualization/forms/model_forms.py:50 msgid "Cluster Group" msgstr "Grupa klastrów" -#: templates/virtualization/clustertype.html:19 -#: templates/virtualization/virtualmachine.html:110 -#: virtualization/forms/model_forms.py:36 +#: netbox/templates/virtualization/clustertype.html:19 +#: netbox/templates/virtualization/virtualmachine.html:110 +#: netbox/virtualization/forms/model_forms.py:36 msgid "Cluster Type" msgstr "Typ klastra" -#: templates/virtualization/virtualdisk.html:18 +#: netbox/templates/virtualization/virtualdisk.html:18 msgid "Virtual Disk" msgstr "Wirtualny dysk" -#: templates/virtualization/virtualmachine.html:122 -#: virtualization/forms/bulk_edit.py:190 -#: virtualization/forms/model_forms.py:224 +#: netbox/templates/virtualization/virtualmachine.html:122 +#: netbox/virtualization/forms/bulk_edit.py:190 +#: netbox/virtualization/forms/model_forms.py:224 msgid "Resources" msgstr "Zasoby" -#: templates/virtualization/virtualmachine.html:178 +#: netbox/templates/virtualization/virtualmachine.html:178 msgid "Add Virtual Disk" msgstr "Dodaj dysk wirtualny" -#: templates/vpn/ikepolicy.html:10 templates/vpn/ipsecprofile.html:33 -#: vpn/tables/crypto.py:166 +#: 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" msgstr "Polityka IKE" -#: templates/vpn/ikepolicy.html:21 +#: netbox/templates/vpn/ikepolicy.html:21 msgid "IKE Version" msgstr "Wersja IKE" -#: templates/vpn/ikepolicy.html:29 +#: netbox/templates/vpn/ikepolicy.html:29 msgid "Pre-Shared Key" msgstr "Klucz wstępnie udostępniony" -#: templates/vpn/ikepolicy.html:33 -#: templates/wireless/inc/authentication_attrs.html:20 +#: netbox/templates/vpn/ikepolicy.html:33 +#: netbox/templates/wireless/inc/authentication_attrs.html:20 msgid "Show Secret" msgstr "Pokaż sekret" -#: templates/vpn/ikepolicy.html:57 templates/vpn/ipsecpolicy.html:45 -#: templates/vpn/ipsecprofile.html:52 templates/vpn/ipsecprofile.html:77 -#: vpn/forms/model_forms.py:316 vpn/forms/model_forms.py:352 -#: vpn/tables/crypto.py:68 vpn/tables/crypto.py:134 +#: netbox/templates/vpn/ikepolicy.html:57 +#: netbox/templates/vpn/ipsecpolicy.html:45 +#: netbox/templates/vpn/ipsecprofile.html:52 +#: netbox/templates/vpn/ipsecprofile.html:77 +#: netbox/vpn/forms/model_forms.py:316 netbox/vpn/forms/model_forms.py:352 +#: netbox/vpn/tables/crypto.py:68 netbox/vpn/tables/crypto.py:134 msgid "Proposals" msgstr "Propozycje" -#: templates/vpn/ikeproposal.html:10 +#: netbox/templates/vpn/ikeproposal.html:10 msgid "IKE Proposal" msgstr "Propozycja IKE" -#: templates/vpn/ikeproposal.html:21 vpn/forms/bulk_edit.py:97 -#: vpn/forms/bulk_import.py:145 vpn/forms/filtersets.py:101 +#: netbox/templates/vpn/ikeproposal.html:21 netbox/vpn/forms/bulk_edit.py:97 +#: netbox/vpn/forms/bulk_import.py:145 netbox/vpn/forms/filtersets.py:101 msgid "Authentication method" msgstr "Metoda uwierzytelniania" -#: templates/vpn/ikeproposal.html:25 templates/vpn/ipsecproposal.html:21 -#: vpn/forms/bulk_edit.py:102 vpn/forms/bulk_edit.py:172 -#: vpn/forms/bulk_import.py:149 vpn/forms/bulk_import.py:195 -#: vpn/forms/filtersets.py:106 vpn/forms/filtersets.py:154 +#: netbox/templates/vpn/ikeproposal.html:25 +#: netbox/templates/vpn/ipsecproposal.html:21 +#: netbox/vpn/forms/bulk_edit.py:102 netbox/vpn/forms/bulk_edit.py:172 +#: netbox/vpn/forms/bulk_import.py:149 netbox/vpn/forms/bulk_import.py:195 +#: netbox/vpn/forms/filtersets.py:106 netbox/vpn/forms/filtersets.py:154 msgid "Encryption algorithm" msgstr "Algorytm szyfrowania" -#: templates/vpn/ikeproposal.html:29 templates/vpn/ipsecproposal.html:25 -#: vpn/forms/bulk_edit.py:107 vpn/forms/bulk_edit.py:177 -#: vpn/forms/bulk_import.py:153 vpn/forms/bulk_import.py:200 -#: vpn/forms/filtersets.py:111 vpn/forms/filtersets.py:159 +#: netbox/templates/vpn/ikeproposal.html:29 +#: netbox/templates/vpn/ipsecproposal.html:25 +#: netbox/vpn/forms/bulk_edit.py:107 netbox/vpn/forms/bulk_edit.py:177 +#: netbox/vpn/forms/bulk_import.py:153 netbox/vpn/forms/bulk_import.py:200 +#: netbox/vpn/forms/filtersets.py:111 netbox/vpn/forms/filtersets.py:159 msgid "Authentication algorithm" msgstr "Algorytm autoryzacji" -#: templates/vpn/ikeproposal.html:33 +#: netbox/templates/vpn/ikeproposal.html:33 msgid "DH group" msgstr "Grupa DH" -#: templates/vpn/ikeproposal.html:37 templates/vpn/ipsecproposal.html:29 -#: vpn/forms/bulk_edit.py:182 vpn/models/crypto.py:146 +#: netbox/templates/vpn/ikeproposal.html:37 +#: netbox/templates/vpn/ipsecproposal.html:29 +#: netbox/vpn/forms/bulk_edit.py:182 netbox/vpn/models/crypto.py:146 msgid "SA lifetime (seconds)" msgstr "Żywotność SA (sekundy)" -#: templates/vpn/ipsecpolicy.html:10 templates/vpn/ipsecprofile.html:66 -#: vpn/tables/crypto.py:170 +#: netbox/templates/vpn/ipsecpolicy.html:10 +#: netbox/templates/vpn/ipsecprofile.html:66 netbox/vpn/tables/crypto.py:170 msgid "IPSec Policy" msgstr "Polityka IPsec" -#: templates/vpn/ipsecpolicy.html:21 vpn/forms/bulk_edit.py:210 -#: vpn/models/crypto.py:193 +#: netbox/templates/vpn/ipsecpolicy.html:21 netbox/vpn/forms/bulk_edit.py:210 +#: netbox/vpn/models/crypto.py:193 msgid "PFS group" msgstr "Grupa PFS" -#: templates/vpn/ipsecprofile.html:10 vpn/forms/model_forms.py:54 +#: netbox/templates/vpn/ipsecprofile.html:10 +#: netbox/vpn/forms/model_forms.py:54 msgid "IPSec Profile" msgstr "Profil IPsec" -#: templates/vpn/ipsecprofile.html:89 vpn/tables/crypto.py:137 +#: netbox/templates/vpn/ipsecprofile.html:89 netbox/vpn/tables/crypto.py:137 msgid "PFS Group" msgstr "Grupa PFS" -#: templates/vpn/ipsecproposal.html:10 +#: netbox/templates/vpn/ipsecproposal.html:10 msgid "IPSec Proposal" msgstr "Propozycja IPsec" -#: templates/vpn/ipsecproposal.html:33 vpn/forms/bulk_edit.py:186 -#: vpn/models/crypto.py:152 +#: netbox/templates/vpn/ipsecproposal.html:33 +#: netbox/vpn/forms/bulk_edit.py:186 netbox/vpn/models/crypto.py:152 msgid "SA lifetime (KB)" msgstr "Żywotność SA (KB)" -#: templates/vpn/l2vpn.html:11 templates/vpn/l2vpntermination.html:9 +#: netbox/templates/vpn/l2vpn.html:11 +#: netbox/templates/vpn/l2vpntermination.html:9 msgid "L2VPN Attributes" msgstr "L2VPN Atrybuty" -#: templates/vpn/l2vpn.html:60 templates/vpn/tunnel.html:76 +#: netbox/templates/vpn/l2vpn.html:60 netbox/templates/vpn/tunnel.html:76 msgid "Add a Termination" msgstr "Dodaj zakończenie" -#: templates/vpn/tunnel.html:9 +#: netbox/templates/vpn/tunnel.html:9 msgid "Add Termination" msgstr "Dodaj zakończenie" -#: templates/vpn/tunnel.html:37 vpn/forms/bulk_edit.py:49 -#: vpn/forms/bulk_import.py:48 vpn/forms/filtersets.py:57 +#: netbox/templates/vpn/tunnel.html:37 netbox/vpn/forms/bulk_edit.py:49 +#: netbox/vpn/forms/bulk_import.py:48 netbox/vpn/forms/filtersets.py:57 msgid "Encapsulation" msgstr "Enkapsulacja" -#: templates/vpn/tunnel.html:41 vpn/forms/bulk_edit.py:55 -#: vpn/forms/bulk_import.py:53 vpn/forms/filtersets.py:64 -#: vpn/models/crypto.py:250 vpn/tables/tunnels.py:51 +#: netbox/templates/vpn/tunnel.html:41 netbox/vpn/forms/bulk_edit.py:55 +#: netbox/vpn/forms/bulk_import.py:53 netbox/vpn/forms/filtersets.py:64 +#: netbox/vpn/models/crypto.py:250 netbox/vpn/tables/tunnels.py:51 msgid "IPSec profile" msgstr "Profil IPsec" -#: templates/vpn/tunnel.html:45 vpn/forms/bulk_edit.py:69 -#: vpn/forms/filtersets.py:68 +#: netbox/templates/vpn/tunnel.html:45 netbox/vpn/forms/bulk_edit.py:69 +#: netbox/vpn/forms/filtersets.py:68 msgid "Tunnel ID" msgstr "Identyfikator tunelu" -#: templates/vpn/tunnelgroup.html:14 +#: netbox/templates/vpn/tunnelgroup.html:14 msgid "Add Tunnel" msgstr "Dodaj tunel" -#: templates/vpn/tunnelgroup.html:23 vpn/forms/model_forms.py:36 -#: vpn/forms/model_forms.py:49 +#: netbox/templates/vpn/tunnelgroup.html:23 netbox/vpn/forms/model_forms.py:36 +#: netbox/vpn/forms/model_forms.py:49 msgid "Tunnel Group" msgstr "Grupa tuneli" -#: templates/vpn/tunneltermination.html:10 +#: netbox/templates/vpn/tunneltermination.html:10 msgid "Tunnel Termination" msgstr "Zakończenie tunelu" -#: templates/vpn/tunneltermination.html:35 vpn/forms/bulk_import.py:107 -#: vpn/forms/model_forms.py:102 vpn/forms/model_forms.py:138 -#: vpn/forms/model_forms.py:247 vpn/tables/tunnels.py:101 +#: netbox/templates/vpn/tunneltermination.html:35 +#: netbox/vpn/forms/bulk_import.py:107 netbox/vpn/forms/model_forms.py:102 +#: netbox/vpn/forms/model_forms.py:138 netbox/vpn/forms/model_forms.py:247 +#: netbox/vpn/tables/tunnels.py:101 msgid "Outside IP" msgstr "Zewnętrzny adres IP" -#: templates/vpn/tunneltermination.html:51 +#: netbox/templates/vpn/tunneltermination.html:51 msgid "Peer Terminations" msgstr "Zakończenia rówieśników" -#: templates/wireless/inc/authentication_attrs.html:12 +#: netbox/templates/wireless/inc/authentication_attrs.html:12 msgid "Cipher" msgstr "Szyfr" -#: templates/wireless/inc/authentication_attrs.html:16 +#: netbox/templates/wireless/inc/authentication_attrs.html:16 msgid "PSK" msgstr "PSK" -#: templates/wireless/inc/wirelesslink_interface.html:35 -#: templates/wireless/inc/wirelesslink_interface.html:45 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:35 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:45 msgctxt "Abbreviation for megahertz" msgid "MHz" msgstr "MHz" -#: templates/wireless/wirelesslan.html:57 +#: netbox/templates/wireless/wirelesslan.html:57 msgid "Attached Interfaces" msgstr "Dołączone interfejsy" -#: templates/wireless/wirelesslangroup.html:17 +#: netbox/templates/wireless/wirelesslangroup.html:17 msgid "Add Wireless LAN" msgstr "Dodaj bezprzewodową sieć LAN" -#: templates/wireless/wirelesslangroup.html:26 -#: wireless/forms/model_forms.py:28 +#: netbox/templates/wireless/wirelesslangroup.html:26 +#: netbox/wireless/forms/model_forms.py:28 msgid "Wireless LAN Group" msgstr "Grupa sieci bezprzewodowej sieci LAN" -#: templates/wireless/wirelesslangroup.html:59 +#: netbox/templates/wireless/wirelesslangroup.html:59 msgid "Add Wireless LAN Group" msgstr "Dodaj grupę sieci bezprzewodowej sieci LAN" -#: templates/wireless/wirelesslink.html:14 +#: netbox/templates/wireless/wirelesslink.html:14 msgid "Link Properties" msgstr "Właściwości łącza" -#: templates/wireless/wirelesslink.html:38 wireless/forms/bulk_edit.py:129 -#: wireless/forms/filtersets.py:102 wireless/forms/model_forms.py:165 +#: 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" -#: tenancy/filtersets.py:28 +#: netbox/tenancy/filtersets.py:28 msgid "Parent contact group (ID)" msgstr "Nadrzędna grupa kontaktów (ID)" -#: tenancy/filtersets.py:34 +#: netbox/tenancy/filtersets.py:34 msgid "Parent contact group (slug)" msgstr "Nadrzędna grupa kontaktów (identyfikator)" -#: tenancy/filtersets.py:40 tenancy/filtersets.py:67 tenancy/filtersets.py:110 +#: netbox/tenancy/filtersets.py:40 netbox/tenancy/filtersets.py:67 +#: netbox/tenancy/filtersets.py:110 msgid "Contact group (ID)" msgstr "Grupa kontaktowa (ID)" -#: tenancy/filtersets.py:47 tenancy/filtersets.py:74 tenancy/filtersets.py:117 +#: netbox/tenancy/filtersets.py:47 netbox/tenancy/filtersets.py:74 +#: netbox/tenancy/filtersets.py:117 msgid "Contact group (slug)" msgstr "Grupa kontaktów (identyfikator)" -#: tenancy/filtersets.py:104 +#: netbox/tenancy/filtersets.py:104 msgid "Contact (ID)" msgstr "Kontakt (ID)" -#: tenancy/filtersets.py:121 +#: netbox/tenancy/filtersets.py:121 msgid "Contact role (ID)" msgstr "Rola kontaktowa (ID)" -#: tenancy/filtersets.py:127 +#: netbox/tenancy/filtersets.py:127 msgid "Contact role (slug)" msgstr "Rola kontaktu (identyfikator)" -#: tenancy/filtersets.py:158 +#: netbox/tenancy/filtersets.py:158 msgid "Contact group" msgstr "Grupa kontaktowa" -#: tenancy/filtersets.py:169 +#: netbox/tenancy/filtersets.py:169 msgid "Parent tenant group (ID)" msgstr "Grupa nadrzędnych najemców (ID)" -#: tenancy/filtersets.py:175 +#: netbox/tenancy/filtersets.py:175 msgid "Parent tenant group (slug)" msgstr "Nadrzędna grupa najemców (identyfikator)" -#: tenancy/filtersets.py:181 tenancy/filtersets.py:201 +#: netbox/tenancy/filtersets.py:181 netbox/tenancy/filtersets.py:201 msgid "Tenant group (ID)" msgstr "Grupa najemców (ID)" -#: tenancy/filtersets.py:234 +#: netbox/tenancy/filtersets.py:234 msgid "Tenant Group (ID)" msgstr "Grupa najemców (ID)" -#: tenancy/filtersets.py:241 +#: netbox/tenancy/filtersets.py:241 msgid "Tenant Group (slug)" msgstr "Grupa najemców (identyfikator)" -#: tenancy/forms/bulk_edit.py:66 +#: netbox/tenancy/forms/bulk_edit.py:66 msgid "Desciption" msgstr "Opisanie" -#: tenancy/forms/bulk_import.py:101 +#: netbox/tenancy/forms/bulk_import.py:101 msgid "Assigned contact" msgstr "Przypisany kontakt" -#: tenancy/models/contacts.py:32 +#: netbox/tenancy/models/contacts.py:32 msgid "contact group" msgstr "grupa kontaktowa" -#: tenancy/models/contacts.py:33 +#: netbox/tenancy/models/contacts.py:33 msgid "contact groups" msgstr "grupy kontaktowe" -#: tenancy/models/contacts.py:48 +#: netbox/tenancy/models/contacts.py:48 msgid "contact role" msgstr "rola kontaktowa" -#: tenancy/models/contacts.py:49 +#: netbox/tenancy/models/contacts.py:49 msgid "contact roles" msgstr "role kontaktowe" -#: tenancy/models/contacts.py:68 +#: netbox/tenancy/models/contacts.py:68 msgid "title" msgstr "tytuł" -#: tenancy/models/contacts.py:73 +#: netbox/tenancy/models/contacts.py:73 msgid "phone" msgstr "telefon" -#: tenancy/models/contacts.py:78 +#: netbox/tenancy/models/contacts.py:78 msgid "email" msgstr "e-mail" -#: tenancy/models/contacts.py:87 +#: netbox/tenancy/models/contacts.py:87 msgid "link" msgstr "link" -#: tenancy/models/contacts.py:103 +#: netbox/tenancy/models/contacts.py:103 msgid "contact" msgstr "kontakt" -#: tenancy/models/contacts.py:104 +#: netbox/tenancy/models/contacts.py:104 msgid "contacts" msgstr "łączność" -#: tenancy/models/contacts.py:153 +#: netbox/tenancy/models/contacts.py:153 msgid "contact assignment" msgstr "przypisanie kontaktu" -#: tenancy/models/contacts.py:154 +#: netbox/tenancy/models/contacts.py:154 msgid "contact assignments" msgstr "zadania kontaktowe" -#: tenancy/models/contacts.py:170 +#: netbox/tenancy/models/contacts.py:170 #, python-brace-format msgid "Contacts cannot be assigned to this object type ({type})." msgstr "Kontakty nie mogą być przypisane do tego typu obiektu ({type})." -#: tenancy/models/tenants.py:32 +#: netbox/tenancy/models/tenants.py:32 msgid "tenant group" msgstr "grupa najemców" -#: tenancy/models/tenants.py:33 +#: netbox/tenancy/models/tenants.py:33 msgid "tenant groups" msgstr "grupy najemców" -#: tenancy/models/tenants.py:70 +#: netbox/tenancy/models/tenants.py:70 msgid "Tenant name must be unique per group." msgstr "Nazwa najemcy musi być niepowtarzalna dla każdej grupy." -#: tenancy/models/tenants.py:80 +#: netbox/tenancy/models/tenants.py:80 msgid "Tenant slug must be unique per group." msgstr "Identyfikator najemcy musi być unikalny dla każdej grupy." -#: tenancy/models/tenants.py:88 +#: netbox/tenancy/models/tenants.py:88 msgid "tenant" msgstr "najemcy" -#: tenancy/models/tenants.py:89 +#: netbox/tenancy/models/tenants.py:89 msgid "tenants" msgstr "najemcy" -#: tenancy/tables/contacts.py:112 +#: netbox/tenancy/tables/contacts.py:112 msgid "Contact Title" msgstr "Tytuł kontaktu" -#: tenancy/tables/contacts.py:116 +#: netbox/tenancy/tables/contacts.py:116 msgid "Contact Phone" msgstr "Telefon kontaktowy" -#: tenancy/tables/contacts.py:121 +#: netbox/tenancy/tables/contacts.py:121 msgid "Contact Email" msgstr "Kontakt e-mail" -#: tenancy/tables/contacts.py:125 +#: netbox/tenancy/tables/contacts.py:125 msgid "Contact Address" msgstr "Adres kontaktowy" -#: tenancy/tables/contacts.py:129 +#: netbox/tenancy/tables/contacts.py:129 msgid "Contact Link" msgstr "Link do kontaktu" -#: tenancy/tables/contacts.py:133 +#: netbox/tenancy/tables/contacts.py:133 msgid "Contact Description" msgstr "Opis kontaktu" -#: users/filtersets.py:33 users/filtersets.py:73 +#: netbox/users/filtersets.py:33 netbox/users/filtersets.py:73 msgid "Permission (ID)" msgstr "Zezwolenie (ID)" -#: users/filtersets.py:38 users/filtersets.py:78 +#: netbox/users/filtersets.py:38 netbox/users/filtersets.py:78 msgid "Notification group (ID)" msgstr "Grupa powiadomień (ID)" -#: users/forms/bulk_edit.py:26 +#: netbox/users/forms/bulk_edit.py:26 msgid "First name" msgstr "Imię" -#: users/forms/bulk_edit.py:31 +#: netbox/users/forms/bulk_edit.py:31 msgid "Last name" msgstr "Nazwisko" -#: users/forms/bulk_edit.py:43 +#: netbox/users/forms/bulk_edit.py:43 msgid "Staff status" msgstr "Status personelu" -#: users/forms/bulk_edit.py:48 +#: netbox/users/forms/bulk_edit.py:48 msgid "Superuser status" msgstr "Status superużytkownika" -#: users/forms/bulk_import.py:41 +#: netbox/users/forms/bulk_import.py:41 msgid "If no key is provided, one will be generated automatically." msgstr "Jeśli klucz nie zostanie podany, zostanie wygenerowany automatycznie." -#: users/forms/filtersets.py:51 users/tables.py:42 +#: netbox/users/forms/filtersets.py:51 netbox/users/tables.py:42 msgid "Is Staff" msgstr "Jest personelem" -#: users/forms/filtersets.py:58 users/tables.py:45 +#: netbox/users/forms/filtersets.py:58 netbox/users/tables.py:45 msgid "Is Superuser" msgstr "Jest superużytkownikiem" -#: users/forms/filtersets.py:91 users/tables.py:86 +#: netbox/users/forms/filtersets.py:91 netbox/users/tables.py:86 msgid "Can View" msgstr "Można wyświetlić" -#: users/forms/filtersets.py:98 users/tables.py:89 +#: netbox/users/forms/filtersets.py:98 netbox/users/tables.py:89 msgid "Can Add" msgstr "Można dodać" -#: users/forms/filtersets.py:105 users/tables.py:92 +#: netbox/users/forms/filtersets.py:105 netbox/users/tables.py:92 msgid "Can Change" msgstr "Może się zmienić" -#: users/forms/filtersets.py:112 users/tables.py:95 +#: netbox/users/forms/filtersets.py:112 netbox/users/tables.py:95 msgid "Can Delete" msgstr "Można usunąć" -#: users/forms/model_forms.py:62 +#: netbox/users/forms/model_forms.py:62 msgid "User Interface" msgstr "Interfejs użytkownika" -#: users/forms/model_forms.py:114 +#: netbox/users/forms/model_forms.py:114 msgid "" "Keys must be at least 40 characters in length. Be sure to record " "your key prior to submitting this form, as it may no longer be " @@ -13946,7 +14767,7 @@ msgstr "" "zapisać swój klucz przed przesłaniem tego formularza, ponieważ może" " nie być już dostępny po utworzeniu tokena." -#: users/forms/model_forms.py:126 +#: netbox/users/forms/model_forms.py:126 msgid "" "Allowed IPv4/IPv6 networks from where the token can be used. Leave blank for" " no restrictions. Example: " @@ -13956,31 +14777,31 @@ msgstr "" " ograniczeń. Przykład: 10.1.1.0/24,192.168.10.16/32,2001: db 8:1: " ":/64" -#: users/forms/model_forms.py:175 +#: netbox/users/forms/model_forms.py:175 msgid "Confirm password" msgstr "Potwierdź hasło" -#: users/forms/model_forms.py:178 +#: netbox/users/forms/model_forms.py:178 msgid "Enter the same password as before, for verification." msgstr "Wprowadź to samo hasło, co poprzednio, w celu weryfikacji." -#: users/forms/model_forms.py:227 +#: netbox/users/forms/model_forms.py:227 msgid "Passwords do not match! Please check your input and try again." msgstr "Hasła nie pasują! Sprawdź dane wejściowe i spróbuj ponownie." -#: users/forms/model_forms.py:294 +#: netbox/users/forms/model_forms.py:294 msgid "Additional actions" msgstr "Dodatkowe działania" -#: users/forms/model_forms.py:297 +#: netbox/users/forms/model_forms.py:297 msgid "Actions granted in addition to those listed above" msgstr "Działania udzielone w uzupełnieniu do wymienionych powyżej" -#: users/forms/model_forms.py:313 +#: netbox/users/forms/model_forms.py:313 msgid "Objects" msgstr "Obiekty" -#: users/forms/model_forms.py:325 +#: netbox/users/forms/model_forms.py:325 msgid "" "JSON expression of a queryset filter that will return only permitted " "objects. Leave null to match all objects of this type. A list of multiple " @@ -13990,79 +14811,79 @@ msgstr "" "Pozostaw wartość null, aby pasowała do wszystkich obiektów tego typu. Lista " "wielu obiektów spowoduje logiczną operację OR." -#: users/forms/model_forms.py:364 +#: netbox/users/forms/model_forms.py:364 msgid "At least one action must be selected." msgstr "Należy wybrać co najmniej jedną akcję." -#: users/forms/model_forms.py:382 +#: netbox/users/forms/model_forms.py:382 #, python-brace-format msgid "Invalid filter for {model}: {error}" msgstr "Nieprawidłowy filtr dla {model}: {error}" -#: users/models/permissions.py:39 +#: netbox/users/models/permissions.py:39 msgid "The list of actions granted by this permission" msgstr "Wykaz działań udzielonych niniejszym zezwoleniem" -#: users/models/permissions.py:44 +#: netbox/users/models/permissions.py:44 msgid "constraints" msgstr "ograniczenia" -#: users/models/permissions.py:45 +#: netbox/users/models/permissions.py:45 msgid "" "Queryset filter matching the applicable objects of the selected type(s)" msgstr "" "Filtr Queryset pasujący do odpowiednich obiektów wybranego typu (typów)" -#: users/models/permissions.py:52 +#: netbox/users/models/permissions.py:52 msgid "permission" msgstr "pozwolenie" -#: users/models/permissions.py:53 users/models/users.py:47 +#: netbox/users/models/permissions.py:53 netbox/users/models/users.py:47 msgid "permissions" msgstr "zezwolenia" -#: users/models/preferences.py:29 users/models/preferences.py:30 +#: netbox/users/models/preferences.py:29 netbox/users/models/preferences.py:30 msgid "user preferences" msgstr "preferencje użytkownika" -#: users/models/preferences.py:97 +#: netbox/users/models/preferences.py:97 #, python-brace-format msgid "Key '{path}' is a leaf node; cannot assign new keys" msgstr "Klucz '{path}'jest węzłem liścia; nie można przypisać nowych kluczy" -#: users/models/preferences.py:109 +#: netbox/users/models/preferences.py:109 #, python-brace-format msgid "Key '{path}' is a dictionary; cannot assign a non-dictionary value" msgstr "" "Klucz '{path}'jest słownikiem; nie może przypisać wartości innej niż słownik" -#: users/models/tokens.py:36 +#: netbox/users/models/tokens.py:36 msgid "expires" msgstr "wygasa" -#: users/models/tokens.py:41 +#: netbox/users/models/tokens.py:41 msgid "last used" msgstr "ostatnio używane" -#: users/models/tokens.py:46 +#: netbox/users/models/tokens.py:46 msgid "key" msgstr "przycisk" -#: users/models/tokens.py:52 +#: netbox/users/models/tokens.py:52 msgid "write enabled" msgstr "włączony zapis" -#: users/models/tokens.py:54 +#: netbox/users/models/tokens.py:54 msgid "Permit create/update/delete operations using this key" msgstr "" "Zezwalaj na operacje tworzenia/aktualizowania/usuwania przy użyciu tego " "klucza" -#: users/models/tokens.py:65 +#: netbox/users/models/tokens.py:65 msgid "allowed IPs" msgstr "dozwolone adresy IP" -#: users/models/tokens.py:67 +#: netbox/users/models/tokens.py:67 msgid "" "Allowed IPv4/IPv6 networks from where the token can be used. Leave blank for" " no restrictions. Ex: \"10.1.1.0/24, 192.168.10.16/32, 2001:DB8:1::/64\"" @@ -14071,43 +14892,43 @@ msgstr "" " ograniczeń. Na przykład: „10.1.1.0/24, 192.168.10.16/32, 2001: DB 8:1: " ":/64”" -#: users/models/tokens.py:75 +#: netbox/users/models/tokens.py:75 msgid "token" msgstr "żeton" -#: users/models/tokens.py:76 +#: netbox/users/models/tokens.py:76 msgid "tokens" msgstr "tokeny" -#: users/models/users.py:57 vpn/models/crypto.py:42 +#: netbox/users/models/users.py:57 netbox/vpn/models/crypto.py:42 msgid "group" msgstr "grupa" -#: users/models/users.py:92 +#: netbox/users/models/users.py:92 msgid "user" msgstr "użytkownika" -#: users/models/users.py:104 +#: netbox/users/models/users.py:104 msgid "A user with this username already exists." msgstr "Użytkownik z tą nazwą użytkownika już istnieje." -#: users/tables.py:98 +#: netbox/users/tables.py:98 msgid "Custom Actions" msgstr "Akcje niestandardowe" -#: utilities/api.py:153 +#: netbox/utilities/api.py:153 #, python-brace-format msgid "Related object not found using the provided attributes: {params}" msgstr "" "Powiązany obiekt nie został znaleziony przy użyciu podanych atrybutów: " "{params}" -#: utilities/api.py:156 +#: netbox/utilities/api.py:156 #, python-brace-format msgid "Multiple objects match the provided attributes: {params}" msgstr "Wiele obiektów pasuje do podanych atrybutów: {params}" -#: utilities/api.py:168 +#: netbox/utilities/api.py:168 #, python-brace-format msgid "" "Related objects must be referenced by numeric ID or by dictionary of " @@ -14117,44 +14938,44 @@ msgstr "" "numerycznego lub słownika atrybutów. Otrzymała nierozpoznaną wartość: " "{value}" -#: utilities/api.py:177 +#: netbox/utilities/api.py:177 #, python-brace-format msgid "Related object not found using the provided numeric ID: {id}" msgstr "" "Powiązany obiekt nie został znaleziony przy użyciu podanego identyfikatora " "numerycznego: {id}" -#: utilities/choices.py:19 +#: netbox/utilities/choices.py:19 #, python-brace-format msgid "{name} has a key defined but CHOICES is not a list" msgstr "{name} ma zdefiniowany klucz, ale CHOICES nie jest listą" -#: utilities/conversion.py:19 +#: netbox/utilities/conversion.py:19 msgid "Weight must be a positive number" msgstr "Waga musi być liczbą dodatnią" -#: utilities/conversion.py:21 +#: netbox/utilities/conversion.py:21 #, python-brace-format msgid "Invalid value '{weight}' for weight (must be a number)" msgstr "Nieprawidłowa wartość '{weight}„dla wagi (musi być liczbą)" -#: utilities/conversion.py:32 utilities/conversion.py:62 +#: netbox/utilities/conversion.py:32 netbox/utilities/conversion.py:62 #, python-brace-format msgid "Unknown unit {unit}. Must be one of the following: {valid_units}" msgstr "" "Nieznana jednostka {unit}. Musi być jednym z następujących elementów: " "{valid_units}" -#: utilities/conversion.py:45 +#: netbox/utilities/conversion.py:45 msgid "Length must be a positive number" msgstr "Długość musi być liczbą dodatnią" -#: utilities/conversion.py:47 +#: netbox/utilities/conversion.py:47 #, 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ą)" -#: utilities/error_handlers.py:31 +#: netbox/utilities/error_handlers.py:31 #, python-brace-format msgid "" "Unable to delete {objects}. {count} dependent objects were " @@ -14163,15 +14984,15 @@ msgstr "" "Nie można usunąć {objects}. {count} Znaleziono obiekty " "zależne: " -#: utilities/error_handlers.py:33 +#: netbox/utilities/error_handlers.py:33 msgid "More than 50" msgstr "Ponad 50" -#: utilities/fields.py:30 +#: netbox/utilities/fields.py:30 msgid "RGB color in hexadecimal. Example: " msgstr "Kolor RGB w wersji szesnastkowej. Przykład: " -#: utilities/fields.py:159 +#: netbox/utilities/fields.py:159 #, python-format msgid "" "%s(%r) is invalid. to_model parameter to CounterCacheField must be a string " @@ -14180,7 +15001,7 @@ msgstr "" "%s(%r) jest nieprawidłowy. parametr to_model do CounterCacheField musi być " "ciągiem w formacie „app.model”" -#: utilities/fields.py:169 +#: netbox/utilities/fields.py:169 #, python-format msgid "" "%s(%r) is invalid. to_field parameter to CounterCacheField must be a string " @@ -14189,36 +15010,36 @@ msgstr "" "%s(%r) jest nieprawidłowy. parametr to_field do CounterCacheField musi być " "ciągiem w formacie „field”" -#: utilities/forms/bulk_import.py:23 +#: netbox/utilities/forms/bulk_import.py:23 msgid "Enter object data in CSV, JSON or YAML format." msgstr "Wprowadź dane obiektu w formacie CSV, JSON lub YAML." -#: utilities/forms/bulk_import.py:36 +#: netbox/utilities/forms/bulk_import.py:36 msgid "CSV delimiter" msgstr "Ogranicznik CSV" -#: utilities/forms/bulk_import.py:37 +#: netbox/utilities/forms/bulk_import.py:37 msgid "The character which delimits CSV fields. Applies only to CSV format." msgstr "Znak oddzielający pola CSV. Dotyczy tylko formatu CSV." -#: utilities/forms/bulk_import.py:51 +#: netbox/utilities/forms/bulk_import.py:51 msgid "Form data must be empty when uploading/selecting a file." msgstr "Dane formularza muszą być puste podczas przesyłania/wybierania pliku." -#: utilities/forms/bulk_import.py:80 +#: netbox/utilities/forms/bulk_import.py:80 #, python-brace-format msgid "Unknown data format: {format}" msgstr "Nieznany format danych: {format}" -#: utilities/forms/bulk_import.py:100 +#: netbox/utilities/forms/bulk_import.py:100 msgid "Unable to detect data format. Please specify." msgstr "Nie można wykryć formatu danych. Proszę określić." -#: utilities/forms/bulk_import.py:123 +#: netbox/utilities/forms/bulk_import.py:123 msgid "Invalid CSV delimiter" msgstr "Nieprawidłowy separator CSV" -#: utilities/forms/bulk_import.py:167 +#: netbox/utilities/forms/bulk_import.py:167 msgid "" "Invalid YAML data. Data must be in the form of multiple documents, or a " "single document comprising a list of dictionaries." @@ -14226,7 +15047,7 @@ msgstr "" "Nieprawidłowe dane YAML. Dane muszą mieć formę wielu dokumentów lub jednego " "dokumentu zawierającego listę słowników." -#: utilities/forms/fields/array.py:20 +#: netbox/utilities/forms/fields/array.py:20 #, python-brace-format msgid "" "Invalid list ({value}). Must be numeric and ranges must be in ascending " @@ -14235,7 +15056,7 @@ msgstr "" "Nieprawidłowa lista ({value}). Musi być numeryczny, a zakresy muszą być w " "kolejności rosnącej." -#: utilities/forms/fields/array.py:40 +#: netbox/utilities/forms/fields/array.py:40 msgid "" "Specify one or more numeric ranges separated by commas. Example: " "1-5,20-30" @@ -14243,7 +15064,7 @@ msgstr "" "Określ jeden lub więcej zakresów liczbowych oddzielonych przecinkami. " "Przykład: 1-5.20-30" -#: utilities/forms/fields/array.py:47 +#: netbox/utilities/forms/fields/array.py:47 #, python-brace-format msgid "" "Invalid ranges ({value}). Must be a range of integers in ascending order." @@ -14251,17 +15072,18 @@ msgstr "" "Nieprawidłowe zakresy ({value}). Musi być zakresem liczb całkowitych w " "kolejności rosnącej." -#: utilities/forms/fields/csv.py:44 +#: netbox/utilities/forms/fields/csv.py:44 #, python-brace-format msgid "Invalid value for a multiple choice field: {value}" msgstr "Nieprawidłowa wartość pola wyboru wielokrotnego wyboru: {value}" -#: utilities/forms/fields/csv.py:57 utilities/forms/fields/csv.py:78 +#: netbox/utilities/forms/fields/csv.py:57 +#: netbox/utilities/forms/fields/csv.py:78 #, python-format msgid "Object not found: %(value)s" msgstr "Obiekt nie został znaleziony: %(value)s" -#: utilities/forms/fields/csv.py:65 +#: netbox/utilities/forms/fields/csv.py:65 #, python-brace-format msgid "" "\"{value}\" is not a unique value for this field; multiple objects were " @@ -14270,20 +15092,20 @@ msgstr "" "„{value}„nie jest unikalną wartością dla tego pola; znaleziono wiele " "obiektów" -#: utilities/forms/fields/csv.py:69 +#: netbox/utilities/forms/fields/csv.py:69 #, python-brace-format msgid "\"{field_name}\" is an invalid accessor field name." msgstr "„{field_name}„jest nieprawidłową nazwą pola dostępu." -#: utilities/forms/fields/csv.py:101 +#: netbox/utilities/forms/fields/csv.py:101 msgid "Object type must be specified as \".\"" msgstr "Typ obiektu musi być określony jako”.„" -#: utilities/forms/fields/csv.py:105 +#: netbox/utilities/forms/fields/csv.py:105 msgid "Invalid object type" msgstr "Nieprawidłowy typ obiektu" -#: utilities/forms/fields/expandable.py:25 +#: netbox/utilities/forms/fields/expandable.py:25 msgid "" "Alphanumeric ranges are supported for bulk creation. Mixed cases and types " "within a single range are not supported (example: " @@ -14293,7 +15115,7 @@ msgstr "" "przypadki i typy w jednym zakresie nie są obsługiwane (przykład: [ge, " "xe] -0/0/ [0-9])." -#: utilities/forms/fields/expandable.py:46 +#: netbox/utilities/forms/fields/expandable.py:46 msgid "" "Specify a numeric range to create multiple IPs.
    Example: " "192.0.2.[1,5,100-254]/24" @@ -14301,7 +15123,7 @@ msgstr "" "Określ zakres numeryczny, aby utworzyć wiele adresów IP.
    Przykład: " "192.0.2.[1,5,100-254]/24" -#: utilities/forms/fields/fields.py:31 +#: netbox/utilities/forms/fields/fields.py:31 #, python-brace-format msgid "" " Markdown składnia jest obsługiwana" -#: utilities/forms/fields/fields.py:48 +#: netbox/utilities/forms/fields/fields.py:48 msgid "URL-friendly unique shorthand" msgstr "Przyjazny dla adresów URL unikatowy skrót" -#: utilities/forms/fields/fields.py:101 +#: netbox/utilities/forms/fields/fields.py:101 msgid "Enter context data in JSON format." msgstr "" "Wprowadź dane kontekstowe w JSON format." -#: utilities/forms/fields/fields.py:124 +#: netbox/utilities/forms/fields/fields.py:124 msgid "MAC address must be in EUI-48 format" msgstr "Adres MAC musi być w formacie EUI-48" -#: utilities/forms/forms.py:52 +#: netbox/utilities/forms/forms.py:52 msgid "Use regular expressions" msgstr "Używanie wyrażeń regularnych" -#: utilities/forms/forms.py:75 +#: netbox/utilities/forms/forms.py:75 msgid "" "Numeric ID of an existing object to update (if not creating a new object)" msgstr "" "Numeryczny identyfikator istniejącego obiektu do aktualizacji (jeśli nie " "zostanie utworzony nowy obiekt)" -#: utilities/forms/forms.py:92 +#: netbox/utilities/forms/forms.py:92 #, python-brace-format msgid "Unrecognized header: {name}" msgstr "Nierozpoznany nagłówek: {name}" -#: utilities/forms/forms.py:118 +#: netbox/utilities/forms/forms.py:118 msgid "Available Columns" msgstr "Dostępne kolumny" -#: utilities/forms/forms.py:126 +#: netbox/utilities/forms/forms.py:126 msgid "Selected Columns" msgstr "Wybrane kolumny" -#: utilities/forms/mixins.py:44 +#: netbox/utilities/forms/mixins.py:44 msgid "" "This object has been modified since the form was rendered. Please consult " "the object's change log for details." @@ -14355,13 +15177,13 @@ msgstr "" "Ten obiekt został zmodyfikowany od czasu renderowania formularza. " "Szczegółowe informacje można znaleźć w dzienniku zmian obiektu." -#: utilities/forms/utils.py:42 utilities/forms/utils.py:68 -#: utilities/forms/utils.py:85 utilities/forms/utils.py:87 +#: netbox/utilities/forms/utils.py:42 netbox/utilities/forms/utils.py:68 +#: netbox/utilities/forms/utils.py:85 netbox/utilities/forms/utils.py:87 #, python-brace-format msgid "Range \"{value}\" is invalid." msgstr "Zasięg”{value}„jest nieważny." -#: utilities/forms/utils.py:74 +#: netbox/utilities/forms/utils.py:74 #, python-brace-format msgid "" "Invalid range: Ending value ({end}) must be greater than beginning value " @@ -14370,71 +15192,71 @@ msgstr "" "Nieprawidłowy zakres: wartość końcowa ({end}) musi być większa niż wartość " "początkowa ({begin})." -#: utilities/forms/utils.py:232 +#: netbox/utilities/forms/utils.py:232 #, python-brace-format msgid "Duplicate or conflicting column header for \"{field}\"" msgstr "Zduplikowany lub sprzeczny nagłówek kolumny dla”{field}„" -#: utilities/forms/utils.py:238 +#: netbox/utilities/forms/utils.py:238 #, python-brace-format msgid "Duplicate or conflicting column header for \"{header}\"" msgstr "Zduplikowany lub sprzeczny nagłówek kolumny dla”{header}„" -#: utilities/forms/utils.py:247 +#: netbox/utilities/forms/utils.py:247 #, python-brace-format msgid "Row {row}: Expected {count_expected} columns but found {count_found}" msgstr "" "Wiersz {row}: Oczekiwane {count_expected} kolumny, ale znalezione " "{count_found}" -#: utilities/forms/utils.py:270 +#: netbox/utilities/forms/utils.py:270 #, python-brace-format msgid "Unexpected column header \"{field}\" found." msgstr "Nieoczekiwany nagłówek kolumny”{field}„znaleziono." -#: utilities/forms/utils.py:272 +#: netbox/utilities/forms/utils.py:272 #, python-brace-format msgid "Column \"{field}\" is not a related object; cannot use dots" msgstr "Kolumna”{field}„nie jest obiektem powiązanym; nie może używać kropek" -#: utilities/forms/utils.py:276 +#: netbox/utilities/forms/utils.py:276 #, python-brace-format msgid "Invalid related object attribute for column \"{field}\": {to_field}" msgstr "" "Nieprawidłowy atrybut obiektu powiązanego dla kolumny”{field}„: {to_field}" -#: utilities/forms/utils.py:284 +#: netbox/utilities/forms/utils.py:284 #, python-brace-format msgid "Required column header \"{header}\" not found." msgstr "Wymagany nagłówek kolumny”{header}„Nie znaleziono." -#: utilities/forms/widgets/apiselect.py:124 +#: netbox/utilities/forms/widgets/apiselect.py:124 #, python-brace-format msgid "Missing required value for dynamic query param: '{dynamic_params}'" msgstr "" "Brak wymaganej wartości dla parametru zapytania dynamicznego: " "'{dynamic_params}”" -#: utilities/forms/widgets/apiselect.py:141 +#: netbox/utilities/forms/widgets/apiselect.py:141 #, python-brace-format msgid "Missing required value for static query param: '{static_params}'" msgstr "" "Brak wymaganej wartości dla parametru zapytania statycznego: " "'{static_params}”" -#: utilities/password_validation.py:13 +#: netbox/utilities/password_validation.py:13 msgid "Password must have at least one numeral." msgstr "Hasło musi zawierać co najmniej jedną cyfrę." -#: utilities/password_validation.py:18 +#: netbox/utilities/password_validation.py:18 msgid "Password must have at least one uppercase letter." msgstr "Hasło musi mieć co najmniej jedną wielką literę." -#: utilities/password_validation.py:23 +#: netbox/utilities/password_validation.py:23 msgid "Password must have at least one lowercase letter." msgstr "Hasło musi zawierać co najmniej jedną małą literę." -#: utilities/password_validation.py:27 +#: netbox/utilities/password_validation.py:27 msgid "" "Your password must contain at least one numeral, one uppercase letter and " "one lowercase letter." @@ -14442,7 +15264,7 @@ msgstr "" "Twoje hasło musi zawierać co najmniej jedną cyfrę, jedną wielką literę i " "jedną małą literę." -#: utilities/permissions.py:42 +#: netbox/utilities/permissions.py:42 #, python-brace-format msgid "" "Invalid permission name: {name}. Must be in the format " @@ -14451,125 +15273,125 @@ msgstr "" "Nieprawidłowa nazwa uprawnienia: {name}. Musi być w formacie " "._" -#: utilities/permissions.py:60 +#: netbox/utilities/permissions.py:60 #, python-brace-format msgid "Unknown app_label/model_name for {name}" msgstr "Nieznany app_label/model_name dla {name}" -#: utilities/request.py:76 +#: netbox/utilities/request.py:76 #, python-brace-format msgid "Invalid IP address set for {header}: {ip}" msgstr "Nieprawidłowy adres IP ustawiony dla {header}: {ip}" -#: utilities/tables.py:47 +#: netbox/utilities/tables.py:47 #, python-brace-format msgid "A column named {name} is already defined for table {table_name}" msgstr "Kolumna o nazwie {name} jest już zdefiniowany dla tabeli {table_name}" -#: utilities/templates/builtins/customfield_value.html:30 +#: netbox/utilities/templates/builtins/customfield_value.html:30 msgid "Not defined" msgstr "Niezdefiniowane" -#: utilities/templates/buttons/bookmark.html:9 +#: netbox/utilities/templates/buttons/bookmark.html:9 msgid "Unbookmark" msgstr "Usuń zakładkę" -#: utilities/templates/buttons/bookmark.html:13 +#: netbox/utilities/templates/buttons/bookmark.html:13 msgid "Bookmark" msgstr "Zakładka" -#: utilities/templates/buttons/clone.html:4 +#: netbox/utilities/templates/buttons/clone.html:4 msgid "Clone" msgstr "Klonowanie" -#: utilities/templates/buttons/export.html:7 +#: netbox/utilities/templates/buttons/export.html:7 msgid "Current View" msgstr "Bieżący widok" -#: utilities/templates/buttons/export.html:8 +#: netbox/utilities/templates/buttons/export.html:8 msgid "All Data" msgstr "Wszystkie dane" -#: utilities/templates/buttons/export.html:28 +#: netbox/utilities/templates/buttons/export.html:28 msgid "Add export template" msgstr "Dodaj szablon eksportu" -#: utilities/templates/buttons/import.html:4 +#: netbox/utilities/templates/buttons/import.html:4 msgid "Import" msgstr "Import" -#: utilities/templates/buttons/subscribe.html:10 +#: netbox/utilities/templates/buttons/subscribe.html:10 msgid "Unsubscribe" msgstr "Anuluj subskrypcję" -#: utilities/templates/buttons/subscribe.html:14 +#: netbox/utilities/templates/buttons/subscribe.html:14 msgid "Subscribe" msgstr "Subskrybuj" -#: utilities/templates/form_helpers/render_field.html:41 +#: netbox/utilities/templates/form_helpers/render_field.html:41 msgid "Copy to clipboard" msgstr "Kopiuj do schowka" -#: utilities/templates/form_helpers/render_field.html:57 +#: netbox/utilities/templates/form_helpers/render_field.html:57 msgid "This field is required" msgstr "To pole jest wymagane" -#: utilities/templates/form_helpers/render_field.html:70 +#: netbox/utilities/templates/form_helpers/render_field.html:70 msgid "Set Null" msgstr "Ustaw Null" -#: utilities/templates/helpers/applied_filters.html:11 +#: netbox/utilities/templates/helpers/applied_filters.html:11 msgid "Clear all" msgstr "Wyczyść wszystko" -#: utilities/templates/helpers/table_config_form.html:8 +#: netbox/utilities/templates/helpers/table_config_form.html:8 msgid "Table Configuration" msgstr "Konfiguracja tabeli" -#: utilities/templates/helpers/table_config_form.html:31 +#: netbox/utilities/templates/helpers/table_config_form.html:31 msgid "Move Up" msgstr "Przesuń w górę" -#: utilities/templates/helpers/table_config_form.html:34 +#: netbox/utilities/templates/helpers/table_config_form.html:34 msgid "Move Down" msgstr "Przesuń w dół" -#: utilities/templates/navigation/menu.html:14 +#: netbox/utilities/templates/navigation/menu.html:14 msgid "Search…" msgstr "Szukaj..." -#: utilities/templates/navigation/menu.html:14 +#: netbox/utilities/templates/navigation/menu.html:14 msgid "Search NetBox" msgstr "Szukaj NetBox" -#: utilities/templates/widgets/apiselect.html:7 +#: netbox/utilities/templates/widgets/apiselect.html:7 msgid "Open selector" msgstr "Otwórz selektor" -#: utilities/templates/widgets/markdown_input.html:6 +#: netbox/utilities/templates/widgets/markdown_input.html:6 msgid "Write" msgstr "Napisz" -#: utilities/testing/views.py:632 +#: netbox/utilities/testing/views.py:632 msgid "The test must define csv_update_data." msgstr "Test musi zdefiniować csv_update_data." -#: utilities/validators.py:65 +#: netbox/utilities/validators.py:65 #, python-brace-format msgid "{value} is not a valid regular expression." msgstr "{value} nie jest prawidłowym wyrażeniem regularnym." -#: utilities/views.py:57 +#: netbox/utilities/views.py:57 #, python-brace-format msgid "{self.__class__.__name__} must implement get_required_permission()" msgstr "{self.__class__.__name__} musi zaimplementować get_required_permit ()" -#: utilities/views.py:93 +#: netbox/utilities/views.py:93 #, python-brace-format msgid "{class_name} must implement get_required_permission()" msgstr "{class_name} musi zaimplementować get_required_permit ()" -#: utilities/views.py:117 +#: netbox/utilities/views.py:117 #, python-brace-format msgid "" "{class_name} has no queryset defined. ObjectPermissionRequiredMixin may only" @@ -14579,61 +15401,63 @@ msgstr "" "ObjectPermissionRequiredMixIn może być używany tylko w widokach, które " "definiują podstawowy zestaw zapytań" -#: virtualization/filtersets.py:79 +#: netbox/virtualization/filtersets.py:79 msgid "Parent group (ID)" msgstr "Grupa nadrzędna (ID)" -#: virtualization/filtersets.py:85 +#: netbox/virtualization/filtersets.py:85 msgid "Parent group (slug)" msgstr "Grupa nadrzędna (identyfikator)" -#: virtualization/filtersets.py:89 virtualization/filtersets.py:141 +#: netbox/virtualization/filtersets.py:89 +#: netbox/virtualization/filtersets.py:141 msgid "Cluster type (ID)" msgstr "Typ klastra (ID)" -#: virtualization/filtersets.py:151 virtualization/filtersets.py:271 +#: netbox/virtualization/filtersets.py:151 +#: netbox/virtualization/filtersets.py:271 msgid "Cluster (ID)" msgstr "Klaster (ID)" -#: virtualization/forms/bulk_edit.py:166 -#: virtualization/models/virtualmachines.py:115 +#: netbox/virtualization/forms/bulk_edit.py:166 +#: netbox/virtualization/models/virtualmachines.py:115 msgid "vCPUs" msgstr "VCPU" -#: virtualization/forms/bulk_edit.py:170 +#: netbox/virtualization/forms/bulk_edit.py:170 msgid "Memory (MB)" msgstr "Pamięć (MB)" -#: virtualization/forms/bulk_edit.py:174 -msgid "Disk (GB)" -msgstr "Dysk (GB)" +#: netbox/virtualization/forms/bulk_edit.py:174 +msgid "Disk (MB)" +msgstr "" -#: virtualization/forms/bulk_edit.py:334 -#: virtualization/forms/filtersets.py:251 -msgid "Size (GB)" -msgstr "Rozmiar (GB)" +#: netbox/virtualization/forms/bulk_edit.py:334 +#: netbox/virtualization/forms/filtersets.py:251 +msgid "Size (MB)" +msgstr "" -#: virtualization/forms/bulk_import.py:44 +#: netbox/virtualization/forms/bulk_import.py:44 msgid "Type of cluster" msgstr "Rodzaj klastra" -#: virtualization/forms/bulk_import.py:51 +#: netbox/virtualization/forms/bulk_import.py:51 msgid "Assigned cluster group" msgstr "Przypisana grupa klastrów" -#: virtualization/forms/bulk_import.py:96 +#: netbox/virtualization/forms/bulk_import.py:96 msgid "Assigned cluster" msgstr "Przypisany klaster" -#: virtualization/forms/bulk_import.py:103 +#: netbox/virtualization/forms/bulk_import.py:103 msgid "Assigned device within cluster" msgstr "Przypisane urządzenie w klastrze" -#: virtualization/forms/filtersets.py:183 +#: netbox/virtualization/forms/filtersets.py:183 msgid "Serial number" msgstr "Numer seryjny" -#: virtualization/forms/model_forms.py:153 +#: netbox/virtualization/forms/model_forms.py:153 #, python-brace-format msgid "" "{device} belongs to a different site ({device_site}) than the cluster " @@ -14641,50 +15465,50 @@ msgid "" msgstr "" "{device} należy do innej strony ({device_site}) niż klaster ({cluster_site})" -#: virtualization/forms/model_forms.py:192 +#: netbox/virtualization/forms/model_forms.py:192 msgid "Optionally pin this VM to a specific host device within the cluster" msgstr "" "Opcjonalnie przypiąć tę maszynę wirtualną do określonego urządzenia hosta w " "klastrze" -#: virtualization/forms/model_forms.py:221 +#: netbox/virtualization/forms/model_forms.py:221 msgid "Site/Cluster" msgstr "Witryna/Klaster" -#: virtualization/forms/model_forms.py:244 +#: netbox/virtualization/forms/model_forms.py:244 msgid "Disk size is managed via the attachment of virtual disks." msgstr "Rozmiar dysku jest zarządzany poprzez załączenie dysków wirtualnych." -#: virtualization/forms/model_forms.py:372 -#: virtualization/tables/virtualmachines.py:111 +#: netbox/virtualization/forms/model_forms.py:372 +#: netbox/virtualization/tables/virtualmachines.py:111 msgid "Disk" msgstr "Dysk" -#: virtualization/models/clusters.py:25 +#: netbox/virtualization/models/clusters.py:25 msgid "cluster type" msgstr "typ klastra" -#: virtualization/models/clusters.py:26 +#: netbox/virtualization/models/clusters.py:26 msgid "cluster types" msgstr "typy klastrów" -#: virtualization/models/clusters.py:45 +#: netbox/virtualization/models/clusters.py:45 msgid "cluster group" msgstr "grupa klastra" -#: virtualization/models/clusters.py:46 +#: netbox/virtualization/models/clusters.py:46 msgid "cluster groups" msgstr "grupy klastrów" -#: virtualization/models/clusters.py:121 +#: netbox/virtualization/models/clusters.py:121 msgid "cluster" msgstr "klastra" -#: virtualization/models/clusters.py:122 +#: netbox/virtualization/models/clusters.py:122 msgid "clusters" msgstr "gromady" -#: virtualization/models/clusters.py:141 +#: netbox/virtualization/models/clusters.py:141 #, python-brace-format msgid "" "{count} devices are assigned as hosts for this cluster but are not in site " @@ -14693,42 +15517,42 @@ msgstr "" "{count} urządzenia są przypisane jako hosty dla tego klastra, ale nie są w " "witrynie {site}" -#: virtualization/models/virtualmachines.py:123 +#: netbox/virtualization/models/virtualmachines.py:123 msgid "memory (MB)" msgstr "pamięć (MB)" -#: virtualization/models/virtualmachines.py:128 +#: netbox/virtualization/models/virtualmachines.py:128 msgid "disk (MB)" msgstr "dysk (MB)" -#: virtualization/models/virtualmachines.py:166 +#: netbox/virtualization/models/virtualmachines.py:166 msgid "Virtual machine name must be unique per cluster." msgstr "Nazwa maszyny wirtualnej musi być unikatowa dla każdego klastra." -#: virtualization/models/virtualmachines.py:169 +#: netbox/virtualization/models/virtualmachines.py:169 msgid "virtual machine" msgstr "maszyna wirtualna" -#: virtualization/models/virtualmachines.py:170 +#: netbox/virtualization/models/virtualmachines.py:170 msgid "virtual machines" msgstr "maszyny wirtualne" -#: virtualization/models/virtualmachines.py:184 +#: netbox/virtualization/models/virtualmachines.py:184 msgid "A virtual machine must be assigned to a site and/or cluster." msgstr "Maszyna wirtualna musi być przypisana do witryny i/lub klastra." -#: virtualization/models/virtualmachines.py:191 +#: netbox/virtualization/models/virtualmachines.py:191 #, 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})." -#: virtualization/models/virtualmachines.py:198 +#: netbox/virtualization/models/virtualmachines.py:198 msgid "Must specify a cluster when assigning a host device." msgstr "Musi określić klaster podczas przypisywania urządzenia hosta." -#: virtualization/models/virtualmachines.py:203 +#: netbox/virtualization/models/virtualmachines.py:203 #, python-brace-format msgid "" "The selected device ({device}) is not assigned to this cluster ({cluster})." @@ -14736,7 +15560,7 @@ msgstr "" "Wybrane urządzenie ({device}) nie jest przypisany do tego klastra " "({cluster})." -#: virtualization/models/virtualmachines.py:215 +#: netbox/virtualization/models/virtualmachines.py:215 #, python-brace-format msgid "" "The specified disk size ({size}) must match the aggregate size of assigned " @@ -14745,17 +15569,17 @@ msgstr "" "Określony rozmiar dysku ({size}) musi odpowiadać zagregowanemu rozmiarowi " "przypisanych dysków wirtualnych ({total_size})." -#: virtualization/models/virtualmachines.py:229 +#: netbox/virtualization/models/virtualmachines.py:229 #, 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.)" -#: virtualization/models/virtualmachines.py:238 +#: netbox/virtualization/models/virtualmachines.py:238 #, 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." -#: virtualization/models/virtualmachines.py:396 +#: netbox/virtualization/models/virtualmachines.py:396 #, python-brace-format msgid "" "The selected parent interface ({parent}) belongs to a different virtual " @@ -14764,7 +15588,7 @@ msgstr "" "Wybrany interfejs nadrzędny ({parent}) należy do innej maszyny wirtualnej " "({virtual_machine})." -#: virtualization/models/virtualmachines.py:411 +#: netbox/virtualization/models/virtualmachines.py:411 #, python-brace-format msgid "" "The selected bridge interface ({bridge}) belongs to a different virtual " @@ -14773,7 +15597,7 @@ msgstr "" "Wybrany interfejs mostu ({bridge}) należy do innej maszyny wirtualnej " "({virtual_machine})." -#: virtualization/models/virtualmachines.py:422 +#: netbox/virtualization/models/virtualmachines.py:422 #, python-brace-format msgid "" "The untagged VLAN ({untagged_vlan}) must belong to the same site as the " @@ -14782,393 +15606,416 @@ msgstr "" "Nieoznaczona sieć VLAN ({untagged_vlan}) musi należeć do tej samej witryny " "co macierzysta maszyna wirtualna interfejsu lub musi być globalna." -#: virtualization/models/virtualmachines.py:434 +#: netbox/virtualization/models/virtualmachines.py:434 msgid "size (MB)" msgstr "rozmiar (MB)" -#: virtualization/models/virtualmachines.py:438 +#: netbox/virtualization/models/virtualmachines.py:438 msgid "virtual disk" msgstr "dysk wirtualny" -#: virtualization/models/virtualmachines.py:439 +#: netbox/virtualization/models/virtualmachines.py:439 msgid "virtual disks" msgstr "dyski wirtualne" -#: virtualization/views.py:275 +#: netbox/virtualization/views.py:273 #, python-brace-format msgid "Added {count} devices to cluster {cluster}" msgstr "Dodano {count} urządzenia do klastrowania {cluster}" -#: virtualization/views.py:310 +#: netbox/virtualization/views.py:308 #, python-brace-format msgid "Removed {count} devices from cluster {cluster}" msgstr "Usunięto {count} urządzenia z klastra {cluster}" -#: vpn/choices.py:31 +#: netbox/vpn/choices.py:35 msgid "IPsec - Transport" msgstr "IPsec - Transport" -#: vpn/choices.py:32 +#: netbox/vpn/choices.py:36 msgid "IPsec - Tunnel" msgstr "IPsec - Tunel" -#: vpn/choices.py:33 +#: netbox/vpn/choices.py:37 msgid "IP-in-IP" msgstr "IP w IP" -#: vpn/choices.py:34 +#: netbox/vpn/choices.py:38 msgid "GRE" msgstr "GREE" -#: vpn/choices.py:56 +#: netbox/vpn/choices.py:39 +msgid "WireGuard" +msgstr "" + +#: netbox/vpn/choices.py:40 +msgid "OpenVPN" +msgstr "" + +#: netbox/vpn/choices.py:41 +msgid "L2TP" +msgstr "" + +#: netbox/vpn/choices.py:42 +msgid "PPTP" +msgstr "" + +#: netbox/vpn/choices.py:64 msgid "Hub" msgstr "Piasta" -#: vpn/choices.py:57 +#: netbox/vpn/choices.py:65 msgid "Spoke" msgstr "Mówił" -#: vpn/choices.py:80 +#: netbox/vpn/choices.py:88 msgid "Aggressive" msgstr "Agresywny" -#: vpn/choices.py:81 +#: netbox/vpn/choices.py:89 msgid "Main" msgstr "Główny" -#: vpn/choices.py:92 +#: netbox/vpn/choices.py:100 msgid "Pre-shared keys" msgstr "Wstępnie udostępnione klucze" -#: vpn/choices.py:93 +#: netbox/vpn/choices.py:101 msgid "Certificates" msgstr "Certyfikaty" -#: vpn/choices.py:94 +#: netbox/vpn/choices.py:102 msgid "RSA signatures" msgstr "Podpisy RSA" -#: vpn/choices.py:95 +#: netbox/vpn/choices.py:103 msgid "DSA signatures" msgstr "Podpisy DSA" -#: vpn/choices.py:178 vpn/choices.py:179 vpn/choices.py:180 vpn/choices.py:181 -#: vpn/choices.py:182 vpn/choices.py:183 vpn/choices.py:184 vpn/choices.py:185 -#: vpn/choices.py:186 vpn/choices.py:187 vpn/choices.py:188 vpn/choices.py:189 -#: vpn/choices.py:190 vpn/choices.py:191 vpn/choices.py:192 vpn/choices.py:193 -#: vpn/choices.py:194 vpn/choices.py:195 vpn/choices.py:196 vpn/choices.py:197 -#: vpn/choices.py:198 vpn/choices.py:199 vpn/choices.py:200 vpn/choices.py:201 +#: netbox/vpn/choices.py:186 netbox/vpn/choices.py:187 +#: netbox/vpn/choices.py:188 netbox/vpn/choices.py:189 +#: netbox/vpn/choices.py:190 netbox/vpn/choices.py:191 +#: netbox/vpn/choices.py:192 netbox/vpn/choices.py:193 +#: netbox/vpn/choices.py:194 netbox/vpn/choices.py:195 +#: netbox/vpn/choices.py:196 netbox/vpn/choices.py:197 +#: netbox/vpn/choices.py:198 netbox/vpn/choices.py:199 +#: netbox/vpn/choices.py:200 netbox/vpn/choices.py:201 +#: netbox/vpn/choices.py:202 netbox/vpn/choices.py:203 +#: netbox/vpn/choices.py:204 netbox/vpn/choices.py:205 +#: netbox/vpn/choices.py:206 netbox/vpn/choices.py:207 +#: netbox/vpn/choices.py:208 netbox/vpn/choices.py:209 #, python-brace-format msgid "Group {n}" msgstr "Grupa {n}" -#: vpn/choices.py:243 +#: netbox/vpn/choices.py:251 msgid "Ethernet Private LAN" msgstr "Prywatna sieć LAN Ethernet" -#: vpn/choices.py:244 +#: netbox/vpn/choices.py:252 msgid "Ethernet Virtual Private LAN" msgstr "Wirtualna prywatna sieć LAN Ethernet" -#: vpn/choices.py:247 +#: netbox/vpn/choices.py:255 msgid "Ethernet Private Tree" msgstr "Prywatne drzewo Ethernet" -#: vpn/choices.py:248 +#: netbox/vpn/choices.py:256 msgid "Ethernet Virtual Private Tree" msgstr "Wirtualne prywatne drzewo Ethernet" -#: vpn/filtersets.py:41 +#: netbox/vpn/filtersets.py:41 msgid "Tunnel group (ID)" msgstr "Grupa tuneli (ID)" -#: vpn/filtersets.py:47 +#: netbox/vpn/filtersets.py:47 msgid "Tunnel group (slug)" msgstr "Grupa tunelowa (ślimak)" -#: vpn/filtersets.py:54 +#: netbox/vpn/filtersets.py:54 msgid "IPSec profile (ID)" msgstr "Profil IPsec (ID)" -#: vpn/filtersets.py:60 +#: netbox/vpn/filtersets.py:60 msgid "IPSec profile (name)" msgstr "Profil IPsec (nazwa)" -#: vpn/filtersets.py:81 +#: netbox/vpn/filtersets.py:81 msgid "Tunnel (ID)" msgstr "Tunel (ID)" -#: vpn/filtersets.py:87 +#: netbox/vpn/filtersets.py:87 msgid "Tunnel (name)" msgstr "Tunel (nazwa)" -#: vpn/filtersets.py:118 +#: netbox/vpn/filtersets.py:118 msgid "Outside IP (ID)" msgstr "Zewnętrzny adres IP (ID)" -#: vpn/filtersets.py:130 vpn/filtersets.py:263 +#: netbox/vpn/filtersets.py:130 netbox/vpn/filtersets.py:263 msgid "IKE policy (ID)" msgstr "Polityka IKE (ID)" -#: vpn/filtersets.py:136 vpn/filtersets.py:269 +#: netbox/vpn/filtersets.py:136 netbox/vpn/filtersets.py:269 msgid "IKE policy (name)" msgstr "Polityka IKE (nazwa)" -#: vpn/filtersets.py:200 vpn/filtersets.py:273 +#: netbox/vpn/filtersets.py:200 netbox/vpn/filtersets.py:273 msgid "IPSec policy (ID)" msgstr "Polityka IPsec (ID)" -#: vpn/filtersets.py:206 vpn/filtersets.py:279 +#: netbox/vpn/filtersets.py:206 netbox/vpn/filtersets.py:279 msgid "IPSec policy (name)" msgstr "Polityka IPsec (nazwa)" -#: vpn/filtersets.py:348 +#: netbox/vpn/filtersets.py:348 msgid "L2VPN (slug)" msgstr "L2VPN (identyfikator)" -#: vpn/filtersets.py:412 +#: netbox/vpn/filtersets.py:412 msgid "VM Interface (ID)" msgstr "Interfejs maszyny wirtualnej (ID)" -#: vpn/filtersets.py:418 +#: netbox/vpn/filtersets.py:418 msgid "VLAN (name)" msgstr "VLAN (nazwa)" -#: vpn/forms/bulk_edit.py:45 vpn/forms/bulk_import.py:42 -#: vpn/forms/filtersets.py:54 +#: netbox/vpn/forms/bulk_edit.py:45 netbox/vpn/forms/bulk_import.py:42 +#: netbox/vpn/forms/filtersets.py:54 msgid "Tunnel group" msgstr "Grupa tuneli" -#: vpn/forms/bulk_edit.py:117 vpn/models/crypto.py:47 +#: netbox/vpn/forms/bulk_edit.py:117 netbox/vpn/models/crypto.py:47 msgid "SA lifetime" msgstr "Żywotność SA" -#: vpn/forms/bulk_edit.py:151 wireless/forms/bulk_edit.py:79 -#: wireless/forms/bulk_edit.py:126 wireless/forms/filtersets.py:64 -#: wireless/forms/filtersets.py:98 +#: netbox/vpn/forms/bulk_edit.py:151 netbox/wireless/forms/bulk_edit.py:79 +#: netbox/wireless/forms/bulk_edit.py:126 +#: netbox/wireless/forms/filtersets.py:64 +#: netbox/wireless/forms/filtersets.py:98 msgid "Pre-shared key" msgstr "Klucz wstępnie udostępniony" -#: vpn/forms/bulk_edit.py:237 vpn/forms/bulk_import.py:239 -#: vpn/forms/filtersets.py:199 vpn/forms/model_forms.py:370 -#: vpn/models/crypto.py:104 +#: netbox/vpn/forms/bulk_edit.py:237 netbox/vpn/forms/bulk_import.py:239 +#: netbox/vpn/forms/filtersets.py:199 netbox/vpn/forms/model_forms.py:370 +#: netbox/vpn/models/crypto.py:104 msgid "IKE policy" msgstr "Polityka IKE" -#: vpn/forms/bulk_edit.py:242 vpn/forms/bulk_import.py:244 -#: vpn/forms/filtersets.py:204 vpn/forms/model_forms.py:374 -#: vpn/models/crypto.py:209 +#: netbox/vpn/forms/bulk_edit.py:242 netbox/vpn/forms/bulk_import.py:244 +#: netbox/vpn/forms/filtersets.py:204 netbox/vpn/forms/model_forms.py:374 +#: netbox/vpn/models/crypto.py:209 msgid "IPSec policy" msgstr "Polityka IPsec" -#: vpn/forms/bulk_import.py:50 +#: netbox/vpn/forms/bulk_import.py:50 msgid "Tunnel encapsulation" msgstr "Enkapsulacja tunelu" -#: vpn/forms/bulk_import.py:83 +#: netbox/vpn/forms/bulk_import.py:83 msgid "Operational role" msgstr "Rola operacyjna" -#: vpn/forms/bulk_import.py:90 +#: netbox/vpn/forms/bulk_import.py:90 msgid "Parent device of assigned interface" msgstr "Urządzenie nadrzędne przypisanego interfejsu" -#: vpn/forms/bulk_import.py:97 +#: netbox/vpn/forms/bulk_import.py:97 msgid "Parent VM of assigned interface" msgstr "Nadrzędna maszyna wirtualna przypisanego interfejsu" -#: vpn/forms/bulk_import.py:104 +#: netbox/vpn/forms/bulk_import.py:104 msgid "Device or virtual machine interface" msgstr "Interfejs urządzenia lub maszyny wirtualnej" -#: vpn/forms/bulk_import.py:183 +#: netbox/vpn/forms/bulk_import.py:183 msgid "IKE proposal(s)" msgstr "Propozycje IKE" -#: vpn/forms/bulk_import.py:215 vpn/models/crypto.py:197 +#: netbox/vpn/forms/bulk_import.py:215 netbox/vpn/models/crypto.py:197 msgid "Diffie-Hellman group for Perfect Forward Secrecy" msgstr "Grupa Diffie-Hellman dla Perfect Forward Secretary" -#: vpn/forms/bulk_import.py:222 +#: netbox/vpn/forms/bulk_import.py:222 msgid "IPSec proposal(s)" msgstr "Propozycje IPsec" -#: vpn/forms/bulk_import.py:236 +#: netbox/vpn/forms/bulk_import.py:236 msgid "IPSec protocol" msgstr "Protokół IPsec" -#: vpn/forms/bulk_import.py:266 +#: netbox/vpn/forms/bulk_import.py:266 msgid "L2VPN type" msgstr "Typ L2VPN" -#: vpn/forms/bulk_import.py:287 +#: netbox/vpn/forms/bulk_import.py:287 msgid "Parent device (for interface)" msgstr "Urządzenie nadrzędne (dla interfejsu)" -#: vpn/forms/bulk_import.py:294 +#: netbox/vpn/forms/bulk_import.py:294 msgid "Parent virtual machine (for interface)" msgstr "Nadrzędna maszyna wirtualna (dla interfejsu)" -#: vpn/forms/bulk_import.py:301 +#: netbox/vpn/forms/bulk_import.py:301 msgid "Assigned interface (device or VM)" msgstr "Przypisany interfejs (urządzenie lub maszyna wirtualna)" -#: vpn/forms/bulk_import.py:334 +#: netbox/vpn/forms/bulk_import.py:334 msgid "Cannot import device and VM interface terminations simultaneously." msgstr "" "Nie można jednocześnie importować zakończeń interfejsu urządzenia i maszyny " "wirtualnej." -#: vpn/forms/bulk_import.py:336 +#: netbox/vpn/forms/bulk_import.py:336 msgid "Each termination must specify either an interface or a VLAN." msgstr "Każde zakończenie musi określać interfejs lub sieć VLAN." -#: vpn/forms/bulk_import.py:338 +#: netbox/vpn/forms/bulk_import.py:338 msgid "Cannot assign both an interface and a VLAN." msgstr "Nie można przypisać zarówno interfejsu, jak i sieci VLAN." -#: vpn/forms/filtersets.py:130 +#: netbox/vpn/forms/filtersets.py:130 msgid "IKE version" msgstr "Wersja IKE" -#: vpn/forms/filtersets.py:142 vpn/forms/filtersets.py:175 -#: vpn/forms/model_forms.py:298 vpn/forms/model_forms.py:334 +#: netbox/vpn/forms/filtersets.py:142 netbox/vpn/forms/filtersets.py:175 +#: netbox/vpn/forms/model_forms.py:298 netbox/vpn/forms/model_forms.py:334 msgid "Proposal" msgstr "Propozycja" -#: vpn/forms/filtersets.py:251 +#: netbox/vpn/forms/filtersets.py:251 msgid "Assigned Object Type" msgstr "Przypisany typ obiektu" -#: vpn/forms/model_forms.py:95 vpn/forms/model_forms.py:130 -#: vpn/forms/model_forms.py:240 vpn/tables/tunnels.py:91 +#: netbox/vpn/forms/model_forms.py:95 netbox/vpn/forms/model_forms.py:130 +#: netbox/vpn/forms/model_forms.py:240 netbox/vpn/tables/tunnels.py:91 msgid "Tunnel interface" msgstr "Interfejs tunelu" -#: vpn/forms/model_forms.py:150 +#: netbox/vpn/forms/model_forms.py:150 msgid "First Termination" msgstr "Pierwsze zakończenie" -#: vpn/forms/model_forms.py:153 +#: netbox/vpn/forms/model_forms.py:153 msgid "Second Termination" msgstr "Drugie zakończenie" -#: vpn/forms/model_forms.py:197 +#: netbox/vpn/forms/model_forms.py:197 msgid "This parameter is required when defining a termination." msgstr "Ten parametr jest wymagany przy definiowaniu zakończenia." -#: vpn/forms/model_forms.py:320 vpn/forms/model_forms.py:356 +#: netbox/vpn/forms/model_forms.py:320 netbox/vpn/forms/model_forms.py:356 msgid "Policy" msgstr "Polityka" -#: vpn/forms/model_forms.py:487 +#: netbox/vpn/forms/model_forms.py:487 msgid "A termination must specify an interface or VLAN." msgstr "Zakończenie musi określać interfejs lub sieć VLAN." -#: vpn/forms/model_forms.py:489 +#: netbox/vpn/forms/model_forms.py:489 msgid "" "A termination can only have one terminating object (an interface or VLAN)." msgstr "" "Zakończenie może mieć tylko jeden obiekt końcowy (interfejs lub sieć VLAN)." -#: vpn/models/crypto.py:33 +#: netbox/vpn/models/crypto.py:33 msgid "encryption algorithm" msgstr "algorytm szyfrowania" -#: vpn/models/crypto.py:37 +#: netbox/vpn/models/crypto.py:37 msgid "authentication algorithm" msgstr "algoritm uwierzytelniania" -#: vpn/models/crypto.py:44 +#: netbox/vpn/models/crypto.py:44 msgid "Diffie-Hellman group ID" msgstr "Identyfikator grupy Diffie-Hellman" -#: vpn/models/crypto.py:50 +#: netbox/vpn/models/crypto.py:50 msgid "Security association lifetime (in seconds)" msgstr "Żywotność skojarzenia zabezpieczeń (w sekundach)" -#: vpn/models/crypto.py:59 +#: netbox/vpn/models/crypto.py:59 msgid "IKE proposal" msgstr "Propozycja IKE" -#: vpn/models/crypto.py:60 +#: netbox/vpn/models/crypto.py:60 msgid "IKE proposals" msgstr "Propozycje IKE" -#: vpn/models/crypto.py:76 +#: netbox/vpn/models/crypto.py:76 msgid "version" msgstr "wersji" -#: vpn/models/crypto.py:88 vpn/models/crypto.py:190 +#: netbox/vpn/models/crypto.py:88 netbox/vpn/models/crypto.py:190 msgid "proposals" msgstr "oferty" -#: vpn/models/crypto.py:91 wireless/models.py:39 +#: netbox/vpn/models/crypto.py:91 netbox/wireless/models.py:39 msgid "pre-shared key" msgstr "klucz wstępnie udostępniony" -#: vpn/models/crypto.py:105 +#: netbox/vpn/models/crypto.py:105 msgid "IKE policies" msgstr "Zasady IKE" -#: vpn/models/crypto.py:118 +#: netbox/vpn/models/crypto.py:118 msgid "Mode is required for selected IKE version" msgstr "Tryb jest wymagany dla wybranej wersji IKE" -#: vpn/models/crypto.py:122 +#: netbox/vpn/models/crypto.py:122 msgid "Mode cannot be used for selected IKE version" msgstr "Tryb nie może być używany dla wybranej wersji IKE" -#: vpn/models/crypto.py:136 +#: netbox/vpn/models/crypto.py:136 msgid "encryption" msgstr "szyfrowanie" -#: vpn/models/crypto.py:141 +#: netbox/vpn/models/crypto.py:141 msgid "authentication" msgstr "poświadczenie" -#: vpn/models/crypto.py:149 +#: netbox/vpn/models/crypto.py:149 msgid "Security association lifetime (seconds)" msgstr "Żywotność skojarzenia zabezpieczeń (sekundy)" -#: vpn/models/crypto.py:155 +#: netbox/vpn/models/crypto.py:155 msgid "Security association lifetime (in kilobytes)" msgstr "Żywotność skojarzenia zabezpieczeń (w kilobajtach)" -#: vpn/models/crypto.py:164 +#: netbox/vpn/models/crypto.py:164 msgid "IPSec proposal" msgstr "Propozycja IPsec" -#: vpn/models/crypto.py:165 +#: netbox/vpn/models/crypto.py:165 msgid "IPSec proposals" msgstr "Propozycje IPsec" -#: vpn/models/crypto.py:178 +#: netbox/vpn/models/crypto.py:178 msgid "Encryption and/or authentication algorithm must be defined" msgstr "Należy zdefiniować algorytm szyfrowania i/lub uwierzytelniania" -#: vpn/models/crypto.py:210 +#: netbox/vpn/models/crypto.py:210 msgid "IPSec policies" msgstr "Zasady IPsec" -#: vpn/models/crypto.py:251 +#: netbox/vpn/models/crypto.py:251 msgid "IPSec profiles" msgstr "Profile IPsec" -#: vpn/models/l2vpn.py:116 +#: netbox/vpn/models/l2vpn.py:116 msgid "L2VPN termination" msgstr "Zakończenie L2VPN" -#: vpn/models/l2vpn.py:117 +#: netbox/vpn/models/l2vpn.py:117 msgid "L2VPN terminations" msgstr "Zakończenia L2VPN" -#: vpn/models/l2vpn.py:135 +#: netbox/vpn/models/l2vpn.py:135 #, python-brace-format msgid "L2VPN Termination already assigned ({assigned_object})" msgstr "Zakończenie L2VPN już przypisane ({assigned_object})" -#: vpn/models/l2vpn.py:147 +#: netbox/vpn/models/l2vpn.py:147 #, python-brace-format msgid "" "{l2vpn_type} L2VPNs cannot have more than two terminations; found " @@ -15177,187 +16024,195 @@ msgstr "" "{l2vpn_type} L2VPN nie mogą mieć więcej niż dwóch terminów; znaleziono " "{terminations_count} już zdefiniowane." -#: vpn/models/tunnels.py:26 +#: netbox/vpn/models/tunnels.py:26 msgid "tunnel group" msgstr "grupa tuneli" -#: vpn/models/tunnels.py:27 +#: netbox/vpn/models/tunnels.py:27 msgid "tunnel groups" msgstr "grupy tuneli" -#: vpn/models/tunnels.py:53 +#: netbox/vpn/models/tunnels.py:53 msgid "encapsulation" msgstr "hermetyzacja" -#: vpn/models/tunnels.py:72 +#: netbox/vpn/models/tunnels.py:72 msgid "tunnel ID" msgstr "Identyfikator tunelu" -#: vpn/models/tunnels.py:94 +#: netbox/vpn/models/tunnels.py:94 msgid "tunnel" msgstr "tunel" -#: vpn/models/tunnels.py:95 +#: netbox/vpn/models/tunnels.py:95 msgid "tunnels" msgstr "tunele" -#: vpn/models/tunnels.py:153 +#: netbox/vpn/models/tunnels.py:153 msgid "An object may be terminated to only one tunnel at a time." msgstr "Obiekt może zostać zakończony tylko jednym tunelem naraz." -#: vpn/models/tunnels.py:156 +#: netbox/vpn/models/tunnels.py:156 msgid "tunnel termination" msgstr "zakończenie tunelu" -#: vpn/models/tunnels.py:157 +#: netbox/vpn/models/tunnels.py:157 msgid "tunnel terminations" msgstr "zakończenia tunelu" -#: vpn/models/tunnels.py:174 +#: netbox/vpn/models/tunnels.py:174 #, python-brace-format msgid "{name} is already attached to a tunnel ({tunnel})." msgstr "{name} jest już przymocowany do tunelu ({tunnel})." -#: vpn/tables/crypto.py:22 +#: netbox/vpn/tables/crypto.py:22 msgid "Authentication Method" msgstr "Metoda uwierzytelniania" -#: vpn/tables/crypto.py:25 vpn/tables/crypto.py:97 +#: netbox/vpn/tables/crypto.py:25 netbox/vpn/tables/crypto.py:97 msgid "Encryption Algorithm" msgstr "Algorytm szyfrowania" -#: vpn/tables/crypto.py:28 vpn/tables/crypto.py:100 +#: netbox/vpn/tables/crypto.py:28 netbox/vpn/tables/crypto.py:100 msgid "Authentication Algorithm" msgstr "Algorytm autoryzacji" -#: vpn/tables/crypto.py:34 +#: netbox/vpn/tables/crypto.py:34 msgid "SA Lifetime" msgstr "Żywotność SA" -#: vpn/tables/crypto.py:71 +#: netbox/vpn/tables/crypto.py:71 msgid "Pre-shared Key" msgstr "Klucz wstępnie udostępniony" -#: vpn/tables/crypto.py:103 +#: netbox/vpn/tables/crypto.py:103 msgid "SA Lifetime (Seconds)" msgstr "Żywotność SA (sekundy)" -#: vpn/tables/crypto.py:106 +#: netbox/vpn/tables/crypto.py:106 msgid "SA Lifetime (KB)" msgstr "Żywotność SA (KB)" -#: vpn/tables/l2vpn.py:69 +#: netbox/vpn/tables/l2vpn.py:69 msgid "Object Parent" msgstr "Nadrzędny obiekt" -#: vpn/tables/l2vpn.py:74 +#: netbox/vpn/tables/l2vpn.py:74 msgid "Object Site" msgstr "Strona obiektu" -#: wireless/choices.py:11 +#: netbox/wireless/choices.py:11 msgid "Access point" msgstr "Punkt dostępu" -#: wireless/choices.py:12 +#: netbox/wireless/choices.py:12 msgid "Station" msgstr "Stacja" -#: wireless/choices.py:467 +#: netbox/wireless/choices.py:467 msgid "Open" msgstr "Otwórz" -#: wireless/choices.py:469 +#: netbox/wireless/choices.py:469 msgid "WPA Personal (PSK)" msgstr "WPA Personal (PSK)" -#: wireless/choices.py:470 +#: netbox/wireless/choices.py:470 msgid "WPA Enterprise" msgstr "WPA Przedsiębiorstwo" -#: wireless/forms/bulk_edit.py:73 wireless/forms/bulk_edit.py:120 -#: wireless/forms/bulk_import.py:68 wireless/forms/bulk_import.py:71 -#: wireless/forms/bulk_import.py:110 wireless/forms/bulk_import.py:113 -#: wireless/forms/filtersets.py:59 wireless/forms/filtersets.py:93 +#: netbox/wireless/forms/bulk_edit.py:73 +#: netbox/wireless/forms/bulk_edit.py:120 +#: netbox/wireless/forms/bulk_import.py:68 +#: netbox/wireless/forms/bulk_import.py:71 +#: netbox/wireless/forms/bulk_import.py:110 +#: netbox/wireless/forms/bulk_import.py:113 +#: netbox/wireless/forms/filtersets.py:59 +#: netbox/wireless/forms/filtersets.py:93 msgid "Authentication cipher" msgstr "Szyfr uwierzytelniania" -#: wireless/forms/bulk_edit.py:134 wireless/forms/bulk_import.py:116 -#: wireless/forms/bulk_import.py:119 wireless/forms/filtersets.py:106 +#: 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" -#: wireless/forms/bulk_import.py:52 +#: netbox/wireless/forms/bulk_import.py:52 msgid "Bridged VLAN" msgstr "Zmostkowana sieć VLAN" -#: wireless/forms/bulk_import.py:89 wireless/tables/wirelesslink.py:28 +#: netbox/wireless/forms/bulk_import.py:89 +#: netbox/wireless/tables/wirelesslink.py:28 msgid "Interface A" msgstr "Interfejs A" -#: wireless/forms/bulk_import.py:93 wireless/tables/wirelesslink.py:37 +#: netbox/wireless/forms/bulk_import.py:93 +#: netbox/wireless/tables/wirelesslink.py:37 msgid "Interface B" msgstr "Interfejs B" -#: wireless/forms/model_forms.py:161 +#: netbox/wireless/forms/model_forms.py:161 msgid "Side B" msgstr "Strona B" -#: wireless/models.py:31 +#: netbox/wireless/models.py:31 msgid "authentication cipher" msgstr "szyfr uwierzytelniania" -#: wireless/models.py:69 +#: netbox/wireless/models.py:69 msgid "wireless LAN group" msgstr "grupa sieci bezprzewodowej LAN" -#: wireless/models.py:70 +#: netbox/wireless/models.py:70 msgid "wireless LAN groups" msgstr "grupy sieci bezprzewodowej LAN" -#: wireless/models.py:116 +#: netbox/wireless/models.py:116 msgid "wireless LAN" msgstr "bezprzewodowa sieć LAN" -#: wireless/models.py:144 +#: netbox/wireless/models.py:144 msgid "interface A" msgstr "interfejs A" -#: wireless/models.py:151 +#: netbox/wireless/models.py:151 msgid "interface B" msgstr "interfejs B" -#: wireless/models.py:165 +#: netbox/wireless/models.py:165 msgid "distance" msgstr "odstęp" -#: wireless/models.py:172 +#: netbox/wireless/models.py:172 msgid "distance unit" msgstr "jednostka odległości" -#: wireless/models.py:219 +#: netbox/wireless/models.py:219 msgid "wireless link" msgstr "łącze bezprzewodowe" -#: wireless/models.py:220 +#: netbox/wireless/models.py:220 msgid "wireless links" msgstr "łącza bezprzewodowe" -#: wireless/models.py:236 +#: netbox/wireless/models.py:236 msgid "Must specify a unit when setting a wireless distance" msgstr "" "Należy określić jednostkę podczas ustawiania odległości bezprzewodowej" -#: wireless/models.py:242 wireless/models.py:248 +#: netbox/wireless/models.py:242 netbox/wireless/models.py:248 #, python-brace-format msgid "{type} is not a wireless interface." msgstr "{type} nie jest interfejsem bezprzewodowym." -#: wireless/utils.py:16 +#: netbox/wireless/utils.py:16 #, python-brace-format msgid "Invalid channel value: {channel}" msgstr "Nieprawidłowa wartość kanału: {channel}" -#: wireless/utils.py:26 +#: netbox/wireless/utils.py:26 #, python-brace-format msgid "Invalid channel attribute: {name}" msgstr "Nieprawidłowy atrybut kanału: {name}" diff --git a/netbox/translations/pt/LC_MESSAGES/django.mo b/netbox/translations/pt/LC_MESSAGES/django.mo index 9a287344c..e6d410f9a 100644 Binary files a/netbox/translations/pt/LC_MESSAGES/django.mo and b/netbox/translations/pt/LC_MESSAGES/django.mo differ diff --git a/netbox/translations/pt/LC_MESSAGES/django.po b/netbox/translations/pt/LC_MESSAGES/django.po index 72135959b..496b8dda1 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 -# Fabricio Maciel, 2024 # Jeremy Stretch, 2024 +# Fabricio Maciel, 2024 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-10-28 19:20+0000\n" +"POT-Creation-Date: 2024-12-13 05:02+0000\n" "PO-Revision-Date: 2023-10-30 17:48+0000\n" -"Last-Translator: Jeremy Stretch, 2024\n" +"Last-Translator: Fabricio Maciel, 2024\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" @@ -24,1876 +24,2143 @@ msgstr "" "Language: pt\n" "Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n" -#: account/tables.py:27 templates/account/token.html:22 -#: templates/users/token.html:17 users/forms/bulk_import.py:39 -#: users/forms/model_forms.py:112 +#: netbox/account/tables.py:27 netbox/templates/account/token.html:22 +#: netbox/templates/users/token.html:17 netbox/users/forms/bulk_import.py:39 +#: netbox/users/forms/model_forms.py:112 msgid "Key" msgstr "Chave" -#: account/tables.py:31 users/forms/filtersets.py:132 +#: netbox/account/tables.py:31 netbox/users/forms/filtersets.py:132 msgid "Write Enabled" msgstr "Permissão de Escrita" -#: account/tables.py:35 core/choices.py:86 core/tables/jobs.py:29 -#: core/tables/tasks.py:79 extras/tables/tables.py:335 -#: extras/tables/tables.py:566 templates/account/token.html:43 -#: templates/core/configrevision.html:26 -#: templates/core/configrevision_restore.html:12 templates/core/job.html:69 -#: templates/core/rq_task.html:16 templates/core/rq_task.html:73 -#: templates/core/rq_worker.html:14 -#: templates/extras/htmx/script_result.html:12 -#: templates/extras/journalentry.html:22 templates/generic/object.html:58 -#: templates/users/token.html:35 +#: netbox/account/tables.py:35 netbox/core/choices.py:86 +#: 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 +#: netbox/templates/core/configrevision.html:26 +#: netbox/templates/core/configrevision_restore.html:12 +#: netbox/templates/core/job.html:69 netbox/templates/core/rq_task.html:16 +#: netbox/templates/core/rq_task.html:73 +#: netbox/templates/core/rq_worker.html:14 +#: netbox/templates/extras/htmx/script_result.html:12 +#: netbox/templates/extras/journalentry.html:22 +#: netbox/templates/generic/object.html:58 +#: netbox/templates/users/token.html:35 msgid "Created" msgstr "Criado" -#: account/tables.py:39 templates/account/token.html:47 -#: templates/users/token.html:39 users/forms/bulk_edit.py:117 -#: users/forms/filtersets.py:136 +#: netbox/account/tables.py:39 netbox/templates/account/token.html:47 +#: netbox/templates/users/token.html:39 netbox/users/forms/bulk_edit.py:117 +#: netbox/users/forms/filtersets.py:136 msgid "Expires" msgstr "Expira" -#: account/tables.py:42 users/forms/filtersets.py:141 +#: netbox/account/tables.py:42 netbox/users/forms/filtersets.py:141 msgid "Last Used" msgstr "Usado pela Última Vez" -#: account/tables.py:45 templates/account/token.html:55 -#: templates/users/token.html:47 users/forms/bulk_edit.py:122 -#: users/forms/model_forms.py:124 +#: netbox/account/tables.py:45 netbox/templates/account/token.html:55 +#: netbox/templates/users/token.html:47 netbox/users/forms/bulk_edit.py:122 +#: netbox/users/forms/model_forms.py:124 msgid "Allowed IPs" msgstr "IPs Permitidos" -#: account/views.py:114 +#: netbox/account/views.py:114 #, python-brace-format msgid "Logged in as {user}." msgstr "Logado como {user}." -#: account/views.py:164 +#: netbox/account/views.py:164 msgid "You have logged out." msgstr "Você se desconectou." -#: account/views.py:216 +#: netbox/account/views.py:216 msgid "Your preferences have been updated." msgstr "Suas preferências foram atualizadas." -#: account/views.py:239 +#: netbox/account/views.py:239 msgid "LDAP-authenticated user credentials cannot be changed within NetBox." msgstr "" "As credenciais de usuário autenticadas pelo LDAP não podem ser alteradas no " "NetBox." -#: account/views.py:254 +#: netbox/account/views.py:254 msgid "Your password has been changed successfully." msgstr "Sua senha foi alterada com sucesso." -#: circuits/choices.py:21 dcim/choices.py:20 dcim/choices.py:102 -#: dcim/choices.py:185 dcim/choices.py:237 dcim/choices.py:1530 -#: dcim/choices.py:1606 dcim/choices.py:1656 virtualization/choices.py:20 -#: virtualization/choices.py:45 vpn/choices.py:18 +#: netbox/circuits/choices.py:21 netbox/dcim/choices.py:20 +#: netbox/dcim/choices.py:102 netbox/dcim/choices.py: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 msgid "Planned" msgstr "Planejado" -#: circuits/choices.py:22 netbox/navigation/menu.py:305 +#: netbox/circuits/choices.py:22 netbox/netbox/navigation/menu.py:305 msgid "Provisioning" msgstr "Provisionamento" -#: circuits/choices.py:23 core/tables/tasks.py:22 dcim/choices.py:22 -#: dcim/choices.py:103 dcim/choices.py:184 dcim/choices.py:236 -#: dcim/choices.py:1605 dcim/choices.py:1655 extras/tables/tables.py:495 -#: ipam/choices.py:31 ipam/choices.py:49 ipam/choices.py:69 -#: ipam/choices.py:154 templates/extras/configcontext.html:25 -#: templates/users/user.html:37 users/forms/bulk_edit.py:38 -#: virtualization/choices.py:22 virtualization/choices.py:44 vpn/choices.py:19 -#: wireless/choices.py:25 +#: netbox/circuits/choices.py:23 netbox/core/tables/tasks.py:22 +#: netbox/dcim/choices.py:22 netbox/dcim/choices.py:103 +#: netbox/dcim/choices.py: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/templates/users/user.html:37 netbox/users/forms/bulk_edit.py:38 +#: netbox/virtualization/choices.py:22 netbox/virtualization/choices.py:44 +#: netbox/vpn/choices.py:19 netbox/wireless/choices.py:25 msgid "Active" msgstr "Ativo" -#: circuits/choices.py:24 dcim/choices.py:183 dcim/choices.py:235 -#: dcim/choices.py:1604 dcim/choices.py:1657 virtualization/choices.py:24 -#: virtualization/choices.py:43 +#: 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 msgid "Offline" msgstr "Offline" -#: circuits/choices.py:25 +#: netbox/circuits/choices.py:25 msgid "Deprovisioning" msgstr "Em Desprovisionamento" -#: circuits/choices.py:26 +#: netbox/circuits/choices.py:26 msgid "Decommissioned" msgstr "Descomissionado" -#: circuits/choices.py:90 dcim/choices.py:1617 tenancy/choices.py:17 +#: netbox/circuits/choices.py:90 netbox/dcim/choices.py:1619 +#: netbox/tenancy/choices.py:17 msgid "Primary" msgstr "Primário" -#: circuits/choices.py:91 ipam/choices.py:90 tenancy/choices.py:18 +#: netbox/circuits/choices.py:91 netbox/ipam/choices.py:90 +#: netbox/tenancy/choices.py:18 msgid "Secondary" msgstr "Secundário" -#: circuits/choices.py:92 tenancy/choices.py:19 +#: netbox/circuits/choices.py:92 netbox/tenancy/choices.py:19 msgid "Tertiary" msgstr "Terciário" -#: circuits/choices.py:93 tenancy/choices.py:20 +#: netbox/circuits/choices.py:93 netbox/tenancy/choices.py:20 msgid "Inactive" msgstr "Inativo" -#: circuits/filtersets.py:31 circuits/filtersets.py:198 dcim/filtersets.py:98 -#: dcim/filtersets.py:152 dcim/filtersets.py:212 dcim/filtersets.py:333 -#: dcim/filtersets.py:464 dcim/filtersets.py:1021 dcim/filtersets.py:1368 -#: dcim/filtersets.py:1903 dcim/filtersets.py:2146 dcim/filtersets.py:2204 -#: ipam/filtersets.py:339 ipam/filtersets.py:959 -#: virtualization/filtersets.py:45 virtualization/filtersets.py:173 -#: vpn/filtersets.py:358 +#: 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 msgid "Region (ID)" msgstr "Região (ID)" -#: circuits/filtersets.py:38 circuits/filtersets.py:205 dcim/filtersets.py:105 -#: dcim/filtersets.py:158 dcim/filtersets.py:219 dcim/filtersets.py:340 -#: dcim/filtersets.py:471 dcim/filtersets.py:1028 dcim/filtersets.py:1375 -#: dcim/filtersets.py:1910 dcim/filtersets.py:2153 dcim/filtersets.py:2211 -#: extras/filtersets.py:509 ipam/filtersets.py:346 ipam/filtersets.py:966 -#: virtualization/filtersets.py:52 virtualization/filtersets.py:180 -#: vpn/filtersets.py:353 +#: 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 msgid "Region (slug)" msgstr "Região (slug)" -#: circuits/filtersets.py:44 circuits/filtersets.py:211 dcim/filtersets.py:128 -#: dcim/filtersets.py:225 dcim/filtersets.py:346 dcim/filtersets.py:477 -#: dcim/filtersets.py:1034 dcim/filtersets.py:1381 dcim/filtersets.py:1916 -#: dcim/filtersets.py:2159 dcim/filtersets.py:2217 ipam/filtersets.py:352 -#: ipam/filtersets.py:972 virtualization/filtersets.py:58 -#: virtualization/filtersets.py:186 +#: 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 msgid "Site group (ID)" msgstr "Grupo de sites (ID)" -#: circuits/filtersets.py:51 circuits/filtersets.py:218 dcim/filtersets.py:135 -#: dcim/filtersets.py:232 dcim/filtersets.py:353 dcim/filtersets.py:484 -#: dcim/filtersets.py:1041 dcim/filtersets.py:1388 dcim/filtersets.py:1923 -#: dcim/filtersets.py:2166 dcim/filtersets.py:2224 extras/filtersets.py:515 -#: ipam/filtersets.py:359 ipam/filtersets.py:979 -#: virtualization/filtersets.py:65 virtualization/filtersets.py:193 +#: 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 msgid "Site group (slug)" msgstr "Grupo de sites (slug)" -#: circuits/filtersets.py:56 circuits/forms/bulk_edit.py:188 -#: circuits/forms/bulk_edit.py:216 circuits/forms/bulk_import.py:124 -#: circuits/forms/filtersets.py:51 circuits/forms/filtersets.py:171 -#: circuits/forms/filtersets.py:209 circuits/forms/model_forms.py:138 -#: circuits/forms/model_forms.py:154 circuits/tables/circuits.py:113 -#: dcim/forms/bulk_edit.py:168 dcim/forms/bulk_edit.py:329 -#: dcim/forms/bulk_edit.py:677 dcim/forms/bulk_edit.py:873 -#: dcim/forms/bulk_import.py:131 dcim/forms/bulk_import.py:230 -#: dcim/forms/bulk_import.py:309 dcim/forms/bulk_import.py:540 -#: dcim/forms/bulk_import.py:1311 dcim/forms/bulk_import.py:1339 -#: dcim/forms/filtersets.py:87 dcim/forms/filtersets.py:225 -#: dcim/forms/filtersets.py:342 dcim/forms/filtersets.py:439 -#: dcim/forms/filtersets.py:753 dcim/forms/filtersets.py:997 -#: dcim/forms/filtersets.py:1021 dcim/forms/filtersets.py:1111 -#: dcim/forms/filtersets.py:1149 dcim/forms/filtersets.py:1584 -#: dcim/forms/filtersets.py:1608 dcim/forms/filtersets.py:1632 -#: dcim/forms/model_forms.py:137 dcim/forms/model_forms.py:165 -#: dcim/forms/model_forms.py:238 dcim/forms/model_forms.py:463 -#: dcim/forms/model_forms.py:723 dcim/forms/object_create.py:391 -#: dcim/tables/devices.py:153 dcim/tables/power.py:26 dcim/tables/power.py:93 -#: dcim/tables/racks.py:122 dcim/tables/racks.py:207 dcim/tables/sites.py:134 -#: extras/filtersets.py:525 ipam/forms/bulk_edit.py:218 -#: ipam/forms/bulk_edit.py:285 ipam/forms/bulk_edit.py:484 -#: ipam/forms/bulk_import.py:171 ipam/forms/bulk_import.py:429 -#: ipam/forms/filtersets.py:153 ipam/forms/filtersets.py:231 -#: ipam/forms/filtersets.py:432 ipam/forms/filtersets.py:489 -#: ipam/forms/model_forms.py:205 ipam/forms/model_forms.py:636 -#: ipam/tables/ip.py:245 ipam/tables/vlans.py:118 ipam/tables/vlans.py:221 -#: templates/circuits/inc/circuit_termination_fields.html:6 -#: templates/dcim/device.html:22 templates/dcim/inc/cable_termination.html:8 -#: templates/dcim/inc/cable_termination.html:33 -#: templates/dcim/location.html:37 templates/dcim/powerpanel.html:22 -#: templates/dcim/rack.html:20 templates/dcim/rackreservation.html:28 -#: templates/dcim/site.html:28 templates/ipam/prefix.html:56 -#: templates/ipam/vlan.html:23 templates/ipam/vlan_edit.html:40 -#: templates/virtualization/cluster.html:42 -#: templates/virtualization/virtualmachine.html:95 -#: virtualization/forms/bulk_edit.py:91 virtualization/forms/bulk_edit.py:109 -#: virtualization/forms/bulk_edit.py:124 -#: virtualization/forms/bulk_import.py:59 -#: virtualization/forms/bulk_import.py:85 -#: virtualization/forms/filtersets.py:79 -#: virtualization/forms/filtersets.py:148 -#: virtualization/forms/model_forms.py:71 -#: virtualization/forms/model_forms.py:104 -#: virtualization/forms/model_forms.py:171 -#: virtualization/tables/clusters.py:77 -#: virtualization/tables/virtualmachines.py:63 vpn/forms/filtersets.py:266 -#: wireless/forms/model_forms.py:76 wireless/forms/model_forms.py:118 +#: 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/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/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/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 msgid "Site" msgstr "Site" -#: circuits/filtersets.py:62 circuits/filtersets.py:229 -#: circuits/filtersets.py:274 dcim/filtersets.py:242 dcim/filtersets.py:363 -#: dcim/filtersets.py:458 extras/filtersets.py:531 ipam/filtersets.py:238 -#: ipam/filtersets.py:369 ipam/filtersets.py:989 -#: virtualization/filtersets.py:75 virtualization/filtersets.py:203 -#: vpn/filtersets.py:363 +#: 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 msgid "Site (slug)" msgstr "Site (slug)" -#: circuits/filtersets.py:67 +#: netbox/circuits/filtersets.py:67 msgid "ASN (ID)" msgstr "ASN (ID)" -#: circuits/filtersets.py:73 circuits/forms/filtersets.py:31 -#: ipam/forms/model_forms.py:159 ipam/models/asns.py:108 -#: ipam/models/asns.py:125 ipam/tables/asn.py:41 templates/ipam/asn.html:20 +#: 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/templates/ipam/asn.html:20 msgid "ASN" msgstr "ASN" -#: circuits/filtersets.py:95 circuits/filtersets.py:122 -#: circuits/filtersets.py:156 circuits/filtersets.py:283 -#: circuits/filtersets.py:325 ipam/filtersets.py:243 +#: 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 msgid "Provider (ID)" msgstr "Provedor (ID)" -#: circuits/filtersets.py:101 circuits/filtersets.py:128 -#: circuits/filtersets.py:162 circuits/filtersets.py:289 -#: circuits/filtersets.py:331 ipam/filtersets.py:249 +#: 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 msgid "Provider (slug)" msgstr "Provedor (slug)" -#: circuits/filtersets.py:167 +#: netbox/circuits/filtersets.py:167 msgid "Provider account (ID)" msgstr "Conta do provedor (ID)" -#: circuits/filtersets.py:173 +#: netbox/circuits/filtersets.py:173 msgid "Provider account (account)" msgstr "Conta do provedor (conta)" -#: circuits/filtersets.py:178 +#: netbox/circuits/filtersets.py:178 msgid "Provider network (ID)" msgstr "Rede do provedor (ID)" -#: circuits/filtersets.py:182 +#: netbox/circuits/filtersets.py:182 msgid "Circuit type (ID)" msgstr "Tipo de circuito (ID)" -#: circuits/filtersets.py:188 +#: netbox/circuits/filtersets.py:188 msgid "Circuit type (slug)" msgstr "Tipo de circuito (slug)" -#: circuits/filtersets.py:223 circuits/filtersets.py:268 -#: dcim/filtersets.py:236 dcim/filtersets.py:357 dcim/filtersets.py:452 -#: dcim/filtersets.py:1045 dcim/filtersets.py:1393 dcim/filtersets.py:1928 -#: dcim/filtersets.py:2170 dcim/filtersets.py:2229 ipam/filtersets.py:232 -#: ipam/filtersets.py:363 ipam/filtersets.py:983 -#: virtualization/filtersets.py:69 virtualization/filtersets.py:197 -#: vpn/filtersets.py:368 +#: 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 msgid "Site (ID)" msgstr "Site (ID)" -#: circuits/filtersets.py:233 circuits/filtersets.py:237 +#: netbox/circuits/filtersets.py:233 netbox/circuits/filtersets.py:237 msgid "Termination A (ID)" msgstr "Terminação A (ID)" -#: circuits/filtersets.py:260 circuits/filtersets.py:320 core/filtersets.py:77 -#: core/filtersets.py:136 core/filtersets.py:173 dcim/filtersets.py:751 -#: dcim/filtersets.py:1362 dcim/filtersets.py:2277 extras/filtersets.py:41 -#: extras/filtersets.py:63 extras/filtersets.py:92 extras/filtersets.py:132 -#: extras/filtersets.py:181 extras/filtersets.py:209 extras/filtersets.py:239 -#: extras/filtersets.py:276 extras/filtersets.py:348 extras/filtersets.py:391 -#: extras/filtersets.py:438 extras/filtersets.py:498 extras/filtersets.py:657 -#: extras/filtersets.py:703 ipam/forms/model_forms.py:449 -#: netbox/filtersets.py:282 netbox/forms/__init__.py:22 -#: netbox/forms/base.py:167 templates/htmx/object_selector.html:28 -#: templates/inc/filter_list.html:46 templates/ipam/ipaddress_assign.html:29 -#: templates/search.html:7 templates/search.html:26 tenancy/filtersets.py:99 -#: users/filtersets.py:23 users/filtersets.py:57 users/filtersets.py:102 -#: users/filtersets.py:150 utilities/forms/forms.py:104 -#: utilities/templates/navigation/menu.html:16 +#: 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/templates/htmx/object_selector.html:28 +#: netbox/templates/inc/filter_list.html:46 +#: netbox/templates/ipam/ipaddress_assign.html:29 +#: netbox/templates/search.html:7 netbox/templates/search.html:26 +#: netbox/tenancy/filtersets.py:99 netbox/users/filtersets.py:23 +#: netbox/users/filtersets.py:57 netbox/users/filtersets.py:102 +#: netbox/users/filtersets.py:150 netbox/utilities/forms/forms.py:104 +#: netbox/utilities/templates/navigation/menu.html:16 msgid "Search" msgstr "Busca" -#: circuits/filtersets.py:264 circuits/forms/bulk_edit.py:172 -#: circuits/forms/bulk_edit.py:246 circuits/forms/bulk_import.py:115 -#: circuits/forms/filtersets.py:198 circuits/forms/filtersets.py:214 -#: circuits/forms/filtersets.py:260 circuits/forms/model_forms.py:111 -#: circuits/forms/model_forms.py:133 circuits/forms/model_forms.py:199 -#: circuits/tables/circuits.py:104 circuits/tables/circuits.py:164 -#: dcim/forms/connections.py:73 templates/circuits/circuit.html:15 -#: templates/circuits/circuitgroupassignment.html:26 -#: templates/circuits/circuittermination.html:19 -#: templates/dcim/inc/cable_termination.html:55 -#: templates/dcim/trace/circuit.html:4 +#: 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/templates/circuits/circuit.html:15 +#: netbox/templates/circuits/circuitgroupassignment.html:26 +#: 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" -#: circuits/filtersets.py:278 +#: netbox/circuits/filtersets.py:278 msgid "ProviderNetwork (ID)" msgstr "Rede do provedor (ID)" -#: circuits/filtersets.py:335 +#: netbox/circuits/filtersets.py:335 msgid "Circuit (ID)" msgstr "Circuito (ID)" -#: circuits/filtersets.py:341 +#: netbox/circuits/filtersets.py:341 msgid "Circuit (CID)" msgstr "Circuito (CID)" -#: circuits/filtersets.py:345 +#: netbox/circuits/filtersets.py:345 msgid "Circuit group (ID)" msgstr "Grupo de circuitos (ID)" -#: circuits/filtersets.py:351 +#: netbox/circuits/filtersets.py:351 msgid "Circuit group (slug)" msgstr "Grupo de circuitos (slug)" -#: circuits/forms/bulk_edit.py:30 circuits/forms/filtersets.py:56 -#: circuits/forms/model_forms.py:29 circuits/tables/providers.py:33 -#: dcim/forms/bulk_edit.py:128 dcim/forms/filtersets.py:195 -#: dcim/forms/model_forms.py:123 dcim/tables/sites.py:94 -#: ipam/models/asns.py:126 ipam/tables/asn.py:27 ipam/views.py:213 -#: netbox/navigation/menu.py:172 netbox/navigation/menu.py:175 -#: templates/circuits/provider.html:23 +#: 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/templates/circuits/provider.html:23 msgid "ASNs" msgstr "ASNs" -#: circuits/forms/bulk_edit.py:34 circuits/forms/bulk_edit.py:56 -#: circuits/forms/bulk_edit.py:83 circuits/forms/bulk_edit.py:104 -#: circuits/forms/bulk_edit.py:164 circuits/forms/bulk_edit.py:183 -#: circuits/forms/bulk_edit.py:228 core/forms/bulk_edit.py:28 -#: dcim/forms/bulk_create.py:35 dcim/forms/bulk_edit.py:73 -#: dcim/forms/bulk_edit.py:92 dcim/forms/bulk_edit.py:151 -#: dcim/forms/bulk_edit.py:192 dcim/forms/bulk_edit.py:210 -#: dcim/forms/bulk_edit.py:288 dcim/forms/bulk_edit.py:432 -#: dcim/forms/bulk_edit.py:466 dcim/forms/bulk_edit.py:481 -#: dcim/forms/bulk_edit.py:540 dcim/forms/bulk_edit.py:584 -#: dcim/forms/bulk_edit.py:618 dcim/forms/bulk_edit.py:642 -#: dcim/forms/bulk_edit.py:715 dcim/forms/bulk_edit.py:767 -#: dcim/forms/bulk_edit.py:819 dcim/forms/bulk_edit.py:842 -#: dcim/forms/bulk_edit.py:890 dcim/forms/bulk_edit.py:960 -#: dcim/forms/bulk_edit.py:1013 dcim/forms/bulk_edit.py:1048 -#: dcim/forms/bulk_edit.py:1088 dcim/forms/bulk_edit.py:1132 -#: dcim/forms/bulk_edit.py:1177 dcim/forms/bulk_edit.py:1204 -#: dcim/forms/bulk_edit.py:1222 dcim/forms/bulk_edit.py:1240 -#: dcim/forms/bulk_edit.py:1258 dcim/forms/bulk_edit.py:1682 -#: extras/forms/bulk_edit.py:39 extras/forms/bulk_edit.py:149 -#: extras/forms/bulk_edit.py:178 extras/forms/bulk_edit.py:208 -#: extras/forms/bulk_edit.py:256 extras/forms/bulk_edit.py:274 -#: extras/forms/bulk_edit.py:298 extras/forms/bulk_edit.py:312 -#: extras/forms/bulk_edit.py:339 extras/tables/tables.py:79 -#: ipam/forms/bulk_edit.py:53 ipam/forms/bulk_edit.py:73 -#: ipam/forms/bulk_edit.py:93 ipam/forms/bulk_edit.py:117 -#: ipam/forms/bulk_edit.py:146 ipam/forms/bulk_edit.py:175 -#: ipam/forms/bulk_edit.py:194 ipam/forms/bulk_edit.py:276 -#: ipam/forms/bulk_edit.py:321 ipam/forms/bulk_edit.py:369 -#: ipam/forms/bulk_edit.py:412 ipam/forms/bulk_edit.py:428 -#: ipam/forms/bulk_edit.py:516 ipam/forms/bulk_edit.py:547 -#: templates/account/token.html:35 templates/circuits/circuit.html:59 -#: templates/circuits/circuitgroup.html:32 -#: templates/circuits/circuittype.html:26 -#: templates/circuits/inc/circuit_termination_fields.html:88 -#: templates/circuits/provider.html:33 -#: templates/circuits/providernetwork.html:32 -#: templates/core/datasource.html:54 templates/core/plugin.html:80 -#: templates/dcim/cable.html:36 templates/dcim/consoleport.html:44 -#: templates/dcim/consoleserverport.html:44 templates/dcim/device.html:94 -#: templates/dcim/devicebay.html:32 templates/dcim/devicerole.html:30 -#: templates/dcim/devicetype.html:33 templates/dcim/frontport.html:58 -#: templates/dcim/interface.html:69 templates/dcim/inventoryitem.html:60 -#: templates/dcim/inventoryitemrole.html:22 templates/dcim/location.html:33 -#: templates/dcim/manufacturer.html:40 templates/dcim/module.html:73 -#: templates/dcim/modulebay.html:42 templates/dcim/moduletype.html:37 -#: templates/dcim/platform.html:33 templates/dcim/powerfeed.html:40 -#: templates/dcim/poweroutlet.html:40 templates/dcim/powerpanel.html:30 -#: templates/dcim/powerport.html:40 templates/dcim/rack.html:53 -#: templates/dcim/rackreservation.html:62 templates/dcim/rackrole.html:26 -#: templates/dcim/racktype.html:24 templates/dcim/rearport.html:54 -#: templates/dcim/region.html:33 templates/dcim/site.html:60 -#: templates/dcim/sitegroup.html:33 templates/dcim/virtualchassis.html:31 -#: templates/extras/configcontext.html:21 -#: templates/extras/configtemplate.html:17 -#: templates/extras/customfield.html:34 -#: templates/extras/dashboard/widget_add.html:14 -#: templates/extras/eventrule.html:21 templates/extras/exporttemplate.html:19 -#: templates/extras/notificationgroup.html:20 -#: templates/extras/savedfilter.html:17 templates/extras/script_list.html:45 -#: templates/extras/tag.html:20 templates/extras/webhook.html:17 -#: templates/generic/bulk_import.html:120 templates/ipam/aggregate.html:43 -#: templates/ipam/asn.html:42 templates/ipam/asnrange.html:38 -#: templates/ipam/fhrpgroup.html:34 templates/ipam/ipaddress.html:55 -#: templates/ipam/iprange.html:67 templates/ipam/prefix.html:81 -#: templates/ipam/rir.html:26 templates/ipam/role.html:26 -#: templates/ipam/routetarget.html:21 templates/ipam/service.html:50 -#: templates/ipam/servicetemplate.html:27 templates/ipam/vlan.html:62 -#: templates/ipam/vlangroup.html:34 templates/ipam/vrf.html:33 -#: templates/tenancy/contact.html:67 templates/tenancy/contactgroup.html:25 -#: templates/tenancy/contactrole.html:22 templates/tenancy/tenant.html:24 -#: templates/tenancy/tenantgroup.html:33 templates/users/group.html:21 -#: templates/users/objectpermission.html:21 templates/users/token.html:27 -#: templates/virtualization/cluster.html:25 -#: templates/virtualization/clustergroup.html:26 -#: templates/virtualization/clustertype.html:26 -#: templates/virtualization/virtualdisk.html:39 -#: templates/virtualization/virtualmachine.html:31 -#: templates/virtualization/vminterface.html:51 -#: templates/vpn/ikepolicy.html:17 templates/vpn/ikeproposal.html:17 -#: templates/vpn/ipsecpolicy.html:17 templates/vpn/ipsecprofile.html:17 -#: templates/vpn/ipsecprofile.html:40 templates/vpn/ipsecprofile.html:73 -#: templates/vpn/ipsecproposal.html:17 templates/vpn/l2vpn.html:26 -#: templates/vpn/tunnel.html:33 templates/vpn/tunnelgroup.html:30 -#: templates/wireless/wirelesslan.html:26 -#: templates/wireless/wirelesslangroup.html:33 -#: templates/wireless/wirelesslink.html:34 tenancy/forms/bulk_edit.py:32 -#: tenancy/forms/bulk_edit.py:80 tenancy/forms/bulk_edit.py:122 -#: users/forms/bulk_edit.py:64 users/forms/bulk_edit.py:82 -#: users/forms/bulk_edit.py:112 virtualization/forms/bulk_edit.py:32 -#: virtualization/forms/bulk_edit.py:46 virtualization/forms/bulk_edit.py:100 -#: virtualization/forms/bulk_edit.py:177 virtualization/forms/bulk_edit.py:228 -#: virtualization/forms/bulk_edit.py:337 vpn/forms/bulk_edit.py:28 -#: vpn/forms/bulk_edit.py:64 vpn/forms/bulk_edit.py:121 -#: vpn/forms/bulk_edit.py:155 vpn/forms/bulk_edit.py:190 -#: vpn/forms/bulk_edit.py:215 vpn/forms/bulk_edit.py:247 -#: vpn/forms/bulk_edit.py:274 wireless/forms/bulk_edit.py:29 -#: wireless/forms/bulk_edit.py:82 wireless/forms/bulk_edit.py:140 +#: 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/templates/account/token.html:35 +#: netbox/templates/circuits/circuit.html:59 +#: netbox/templates/circuits/circuitgroup.html:32 +#: netbox/templates/circuits/circuittype.html:26 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:88 +#: netbox/templates/circuits/provider.html:33 +#: netbox/templates/circuits/providernetwork.html:32 +#: netbox/templates/core/datasource.html:54 +#: netbox/templates/core/plugin.html:80 netbox/templates/dcim/cable.html:36 +#: netbox/templates/dcim/consoleport.html:44 +#: netbox/templates/dcim/consoleserverport.html:44 +#: netbox/templates/dcim/device.html:94 +#: netbox/templates/dcim/devicebay.html:32 +#: netbox/templates/dcim/devicerole.html:30 +#: netbox/templates/dcim/devicetype.html:33 +#: netbox/templates/dcim/frontport.html:58 +#: netbox/templates/dcim/interface.html:69 +#: netbox/templates/dcim/inventoryitem.html:60 +#: netbox/templates/dcim/inventoryitemrole.html:22 +#: netbox/templates/dcim/location.html:33 +#: netbox/templates/dcim/manufacturer.html:40 +#: netbox/templates/dcim/module.html:73 +#: netbox/templates/dcim/modulebay.html:42 +#: netbox/templates/dcim/moduletype.html:37 +#: netbox/templates/dcim/platform.html:33 +#: netbox/templates/dcim/powerfeed.html:40 +#: netbox/templates/dcim/poweroutlet.html:40 +#: netbox/templates/dcim/powerpanel.html:30 +#: netbox/templates/dcim/powerport.html:40 netbox/templates/dcim/rack.html:53 +#: netbox/templates/dcim/rackreservation.html:62 +#: netbox/templates/dcim/rackrole.html:26 +#: netbox/templates/dcim/racktype.html:24 +#: netbox/templates/dcim/rearport.html:54 netbox/templates/dcim/region.html:33 +#: netbox/templates/dcim/site.html:60 netbox/templates/dcim/sitegroup.html:33 +#: netbox/templates/dcim/virtualchassis.html:31 +#: netbox/templates/extras/configcontext.html:21 +#: netbox/templates/extras/configtemplate.html:17 +#: netbox/templates/extras/customfield.html:34 +#: netbox/templates/extras/dashboard/widget_add.html:14 +#: netbox/templates/extras/eventrule.html:21 +#: netbox/templates/extras/exporttemplate.html:19 +#: netbox/templates/extras/notificationgroup.html:20 +#: netbox/templates/extras/savedfilter.html:17 +#: netbox/templates/extras/script_list.html:46 +#: netbox/templates/extras/tag.html:20 netbox/templates/extras/webhook.html:17 +#: netbox/templates/generic/bulk_import.html:120 +#: netbox/templates/ipam/aggregate.html:43 netbox/templates/ipam/asn.html:42 +#: netbox/templates/ipam/asnrange.html:38 +#: netbox/templates/ipam/fhrpgroup.html:34 +#: netbox/templates/ipam/ipaddress.html:55 +#: netbox/templates/ipam/iprange.html:67 netbox/templates/ipam/prefix.html:81 +#: netbox/templates/ipam/rir.html:26 netbox/templates/ipam/role.html:26 +#: netbox/templates/ipam/routetarget.html:21 +#: netbox/templates/ipam/service.html:50 +#: netbox/templates/ipam/servicetemplate.html:27 +#: netbox/templates/ipam/vlan.html:62 netbox/templates/ipam/vlangroup.html:34 +#: netbox/templates/ipam/vrf.html:33 netbox/templates/tenancy/contact.html:67 +#: netbox/templates/tenancy/contactgroup.html:25 +#: netbox/templates/tenancy/contactrole.html:22 +#: netbox/templates/tenancy/tenant.html:24 +#: netbox/templates/tenancy/tenantgroup.html:33 +#: netbox/templates/users/group.html:21 +#: netbox/templates/users/objectpermission.html:21 +#: netbox/templates/users/token.html:27 +#: netbox/templates/virtualization/cluster.html:25 +#: netbox/templates/virtualization/clustergroup.html:26 +#: netbox/templates/virtualization/clustertype.html:26 +#: netbox/templates/virtualization/virtualdisk.html:39 +#: netbox/templates/virtualization/virtualmachine.html:31 +#: netbox/templates/virtualization/vminterface.html:51 +#: netbox/templates/vpn/ikepolicy.html:17 +#: netbox/templates/vpn/ikeproposal.html:17 +#: netbox/templates/vpn/ipsecpolicy.html:17 +#: netbox/templates/vpn/ipsecprofile.html:17 +#: netbox/templates/vpn/ipsecprofile.html:40 +#: netbox/templates/vpn/ipsecprofile.html:73 +#: netbox/templates/vpn/ipsecproposal.html:17 +#: netbox/templates/vpn/l2vpn.html:26 netbox/templates/vpn/tunnel.html:33 +#: netbox/templates/vpn/tunnelgroup.html:30 +#: netbox/templates/wireless/wirelesslan.html:26 +#: netbox/templates/wireless/wirelesslangroup.html:33 +#: netbox/templates/wireless/wirelesslink.html:34 +#: netbox/tenancy/forms/bulk_edit.py:32 netbox/tenancy/forms/bulk_edit.py:80 +#: netbox/tenancy/forms/bulk_edit.py:122 netbox/users/forms/bulk_edit.py:64 +#: netbox/users/forms/bulk_edit.py:82 netbox/users/forms/bulk_edit.py:112 +#: netbox/virtualization/forms/bulk_edit.py:32 +#: netbox/virtualization/forms/bulk_edit.py:46 +#: netbox/virtualization/forms/bulk_edit.py:100 +#: netbox/virtualization/forms/bulk_edit.py:177 +#: netbox/virtualization/forms/bulk_edit.py:228 +#: netbox/virtualization/forms/bulk_edit.py:337 +#: netbox/vpn/forms/bulk_edit.py:28 netbox/vpn/forms/bulk_edit.py:64 +#: netbox/vpn/forms/bulk_edit.py:121 netbox/vpn/forms/bulk_edit.py:155 +#: netbox/vpn/forms/bulk_edit.py:190 netbox/vpn/forms/bulk_edit.py:215 +#: netbox/vpn/forms/bulk_edit.py:247 netbox/vpn/forms/bulk_edit.py:274 +#: netbox/wireless/forms/bulk_edit.py:29 netbox/wireless/forms/bulk_edit.py:82 +#: netbox/wireless/forms/bulk_edit.py:140 msgid "Description" msgstr "Descrição" -#: circuits/forms/bulk_edit.py:51 circuits/forms/bulk_edit.py:73 -#: circuits/forms/bulk_edit.py:123 circuits/forms/bulk_import.py:36 -#: circuits/forms/bulk_import.py:51 circuits/forms/bulk_import.py:74 -#: circuits/forms/filtersets.py:70 circuits/forms/filtersets.py:88 -#: circuits/forms/filtersets.py:116 circuits/forms/filtersets.py:131 -#: circuits/forms/filtersets.py:199 circuits/forms/filtersets.py:232 -#: circuits/forms/filtersets.py:255 circuits/forms/model_forms.py:47 -#: circuits/forms/model_forms.py:61 circuits/forms/model_forms.py:93 -#: circuits/tables/circuits.py:58 circuits/tables/circuits.py:108 -#: circuits/tables/circuits.py:160 circuits/tables/providers.py:72 -#: circuits/tables/providers.py:103 templates/circuits/circuit.html:18 -#: templates/circuits/circuittermination.html:25 -#: templates/circuits/provider.html:20 -#: templates/circuits/provideraccount.html:20 -#: templates/circuits/providernetwork.html:20 -#: templates/dcim/inc/cable_termination.html:51 +#: netbox/circuits/forms/bulk_edit.py: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/templates/circuits/circuit.html:18 +#: netbox/templates/circuits/circuittermination.html:25 +#: netbox/templates/circuits/provider.html:20 +#: netbox/templates/circuits/provideraccount.html:20 +#: netbox/templates/circuits/providernetwork.html:20 +#: netbox/templates/dcim/inc/cable_termination.html:51 msgid "Provider" msgstr "Provedor" -#: circuits/forms/bulk_edit.py:80 circuits/forms/filtersets.py:91 -#: templates/circuits/providernetwork.html:28 +#: netbox/circuits/forms/bulk_edit.py:80 +#: netbox/circuits/forms/filtersets.py:91 +#: netbox/templates/circuits/providernetwork.html:28 msgid "Service ID" msgstr "ID do serviço" -#: circuits/forms/bulk_edit.py:100 circuits/forms/filtersets.py:107 -#: dcim/forms/bulk_edit.py:206 dcim/forms/bulk_edit.py:604 -#: dcim/forms/bulk_edit.py:804 dcim/forms/bulk_edit.py:1173 -#: dcim/forms/bulk_edit.py:1200 dcim/forms/bulk_edit.py:1678 -#: dcim/forms/filtersets.py:1064 dcim/forms/filtersets.py:1455 -#: dcim/forms/filtersets.py:1479 dcim/tables/devices.py:704 -#: dcim/tables/devices.py:761 dcim/tables/devices.py:1003 -#: dcim/tables/devicetypes.py:249 dcim/tables/devicetypes.py:264 -#: dcim/tables/racks.py:33 extras/forms/bulk_edit.py:270 -#: extras/tables/tables.py:443 templates/circuits/circuittype.html:30 -#: templates/dcim/cable.html:40 templates/dcim/devicerole.html:34 -#: templates/dcim/frontport.html:40 templates/dcim/inventoryitemrole.html:26 -#: templates/dcim/rackrole.html:30 templates/dcim/rearport.html:40 -#: templates/extras/tag.html:26 +#: netbox/circuits/forms/bulk_edit.py: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/templates/circuits/circuittype.html:30 +#: netbox/templates/dcim/cable.html:40 +#: netbox/templates/dcim/devicerole.html:34 +#: netbox/templates/dcim/frontport.html:40 +#: netbox/templates/dcim/inventoryitemrole.html:26 +#: netbox/templates/dcim/rackrole.html:30 +#: netbox/templates/dcim/rearport.html:40 netbox/templates/extras/tag.html:26 msgid "Color" msgstr "Cor" -#: circuits/forms/bulk_edit.py:118 circuits/forms/bulk_import.py:87 -#: circuits/forms/filtersets.py:126 core/forms/bulk_edit.py:18 -#: core/forms/filtersets.py:33 core/tables/change_logging.py:32 -#: core/tables/data.py:20 core/tables/jobs.py:18 dcim/forms/bulk_edit.py:782 -#: dcim/forms/bulk_edit.py:921 dcim/forms/bulk_edit.py:989 -#: dcim/forms/bulk_edit.py:1008 dcim/forms/bulk_edit.py:1031 -#: dcim/forms/bulk_edit.py:1073 dcim/forms/bulk_edit.py:1117 -#: dcim/forms/bulk_edit.py:1168 dcim/forms/bulk_edit.py:1195 -#: dcim/forms/bulk_import.py:188 dcim/forms/bulk_import.py:260 -#: dcim/forms/bulk_import.py:708 dcim/forms/bulk_import.py:734 -#: dcim/forms/bulk_import.py:760 dcim/forms/bulk_import.py:780 -#: dcim/forms/bulk_import.py:863 dcim/forms/bulk_import.py:957 -#: dcim/forms/bulk_import.py:999 dcim/forms/bulk_import.py:1213 -#: dcim/forms/bulk_import.py:1376 dcim/forms/filtersets.py:955 -#: dcim/forms/filtersets.py:1054 dcim/forms/filtersets.py:1175 -#: dcim/forms/filtersets.py:1247 dcim/forms/filtersets.py:1272 -#: dcim/forms/filtersets.py:1296 dcim/forms/filtersets.py:1316 -#: dcim/forms/filtersets.py:1353 dcim/forms/filtersets.py:1450 -#: dcim/forms/filtersets.py:1474 dcim/forms/model_forms.py:703 -#: dcim/forms/model_forms.py:709 dcim/forms/object_import.py:84 -#: dcim/forms/object_import.py:113 dcim/forms/object_import.py:145 -#: dcim/tables/devices.py:178 dcim/tables/devices.py:814 -#: dcim/tables/power.py:77 dcim/tables/racks.py:138 -#: extras/forms/bulk_import.py:42 extras/tables/tables.py:405 -#: extras/tables/tables.py:465 netbox/tables/tables.py:240 -#: templates/circuits/circuit.html:30 templates/core/datasource.html:38 -#: templates/dcim/cable.html:15 templates/dcim/consoleport.html:36 -#: templates/dcim/consoleserverport.html:36 templates/dcim/frontport.html:36 -#: templates/dcim/interface.html:46 templates/dcim/interface.html:169 -#: templates/dcim/interface.html:311 templates/dcim/powerfeed.html:32 -#: templates/dcim/poweroutlet.html:36 templates/dcim/powerport.html:36 -#: templates/dcim/rearport.html:36 templates/extras/eventrule.html:74 -#: templates/virtualization/cluster.html:17 templates/vpn/l2vpn.html:22 -#: templates/wireless/inc/authentication_attrs.html:8 -#: templates/wireless/inc/wirelesslink_interface.html:14 -#: virtualization/forms/bulk_edit.py:60 virtualization/forms/bulk_import.py:41 -#: virtualization/forms/filtersets.py:54 -#: virtualization/forms/model_forms.py:62 virtualization/tables/clusters.py:66 -#: vpn/forms/bulk_edit.py:264 vpn/forms/bulk_import.py:264 -#: vpn/forms/filtersets.py:217 vpn/forms/model_forms.py:84 -#: vpn/forms/model_forms.py:119 vpn/forms/model_forms.py:231 +#: netbox/circuits/forms/bulk_edit.py: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/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/core/datasource.html:38 +#: netbox/templates/dcim/cable.html:15 +#: netbox/templates/dcim/consoleport.html:36 +#: netbox/templates/dcim/consoleserverport.html:36 +#: netbox/templates/dcim/frontport.html:36 +#: netbox/templates/dcim/interface.html:46 +#: netbox/templates/dcim/interface.html:169 +#: netbox/templates/dcim/interface.html:311 +#: netbox/templates/dcim/powerfeed.html:32 +#: netbox/templates/dcim/poweroutlet.html:36 +#: netbox/templates/dcim/powerport.html:36 +#: netbox/templates/dcim/rearport.html:36 +#: netbox/templates/extras/eventrule.html:74 +#: netbox/templates/virtualization/cluster.html:17 +#: netbox/templates/vpn/l2vpn.html:22 +#: netbox/templates/wireless/inc/authentication_attrs.html:8 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:14 +#: netbox/virtualization/forms/bulk_edit.py:60 +#: netbox/virtualization/forms/bulk_import.py:41 +#: netbox/virtualization/forms/filtersets.py:54 +#: netbox/virtualization/forms/model_forms.py:62 +#: netbox/virtualization/tables/clusters.py:66 +#: netbox/vpn/forms/bulk_edit.py:264 netbox/vpn/forms/bulk_import.py:264 +#: netbox/vpn/forms/filtersets.py:217 netbox/vpn/forms/model_forms.py:84 +#: netbox/vpn/forms/model_forms.py:119 netbox/vpn/forms/model_forms.py:231 msgid "Type" msgstr "Tipo" -#: circuits/forms/bulk_edit.py:128 circuits/forms/bulk_import.py:80 -#: circuits/forms/filtersets.py:139 circuits/forms/model_forms.py:98 +#: 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 msgid "Provider account" msgstr "Conta do provedor" -#: circuits/forms/bulk_edit.py:136 circuits/forms/bulk_import.py:93 -#: circuits/forms/filtersets.py:150 core/forms/filtersets.py:38 -#: core/forms/filtersets.py:79 core/tables/data.py:23 core/tables/jobs.py:26 -#: core/tables/tasks.py:88 dcim/forms/bulk_edit.py:106 -#: dcim/forms/bulk_edit.py:181 dcim/forms/bulk_edit.py:351 -#: dcim/forms/bulk_edit.py:700 dcim/forms/bulk_edit.py:756 -#: dcim/forms/bulk_edit.py:788 dcim/forms/bulk_edit.py:915 -#: dcim/forms/bulk_edit.py:1701 dcim/forms/bulk_import.py:88 -#: dcim/forms/bulk_import.py:147 dcim/forms/bulk_import.py:248 -#: dcim/forms/bulk_import.py:505 dcim/forms/bulk_import.py:659 -#: dcim/forms/bulk_import.py:1207 dcim/forms/bulk_import.py:1371 -#: dcim/forms/bulk_import.py:1435 dcim/forms/filtersets.py:178 -#: dcim/forms/filtersets.py:237 dcim/forms/filtersets.py:359 -#: dcim/forms/filtersets.py:799 dcim/forms/filtersets.py:924 -#: dcim/forms/filtersets.py:958 dcim/forms/filtersets.py:1059 -#: dcim/forms/filtersets.py:1170 dcim/tables/devices.py:140 -#: dcim/tables/devices.py:817 dcim/tables/devices.py:1063 -#: dcim/tables/modules.py:69 dcim/tables/power.py:74 dcim/tables/racks.py:126 -#: dcim/tables/sites.py:82 dcim/tables/sites.py:138 -#: ipam/forms/bulk_edit.py:256 ipam/forms/bulk_edit.py:306 -#: ipam/forms/bulk_edit.py:354 ipam/forms/bulk_edit.py:506 -#: ipam/forms/bulk_import.py:192 ipam/forms/bulk_import.py:257 -#: ipam/forms/bulk_import.py:293 ipam/forms/bulk_import.py:450 -#: ipam/forms/filtersets.py:210 ipam/forms/filtersets.py:281 -#: ipam/forms/filtersets.py:355 ipam/forms/filtersets.py:501 -#: ipam/forms/model_forms.py:468 ipam/tables/ip.py:237 ipam/tables/ip.py:312 -#: ipam/tables/ip.py:363 ipam/tables/ip.py:426 ipam/tables/ip.py:453 -#: ipam/tables/vlans.py:126 ipam/tables/vlans.py:232 -#: templates/circuits/circuit.html:34 templates/core/datasource.html:46 -#: templates/core/job.html:48 templates/core/rq_task.html:81 -#: templates/core/system.html:18 templates/dcim/cable.html:19 -#: templates/dcim/device.html:178 templates/dcim/location.html:45 -#: templates/dcim/module.html:69 templates/dcim/powerfeed.html:36 -#: templates/dcim/rack.html:41 templates/dcim/site.html:43 -#: templates/extras/script_list.html:47 templates/ipam/ipaddress.html:37 -#: templates/ipam/iprange.html:54 templates/ipam/prefix.html:73 -#: templates/ipam/vlan.html:48 templates/virtualization/cluster.html:21 -#: templates/virtualization/virtualmachine.html:19 -#: templates/vpn/tunnel.html:25 templates/wireless/wirelesslan.html:22 -#: templates/wireless/wirelesslink.html:17 users/forms/filtersets.py:32 -#: users/forms/model_forms.py:194 virtualization/forms/bulk_edit.py:70 -#: virtualization/forms/bulk_edit.py:118 -#: virtualization/forms/bulk_import.py:54 -#: virtualization/forms/bulk_import.py:80 -#: virtualization/forms/filtersets.py:62 -#: virtualization/forms/filtersets.py:160 virtualization/tables/clusters.py:74 -#: virtualization/tables/virtualmachines.py:60 vpn/forms/bulk_edit.py:39 -#: vpn/forms/bulk_import.py:37 vpn/forms/filtersets.py:47 -#: vpn/tables/tunnels.py:48 wireless/forms/bulk_edit.py:43 -#: wireless/forms/bulk_edit.py:105 wireless/forms/bulk_import.py:43 -#: wireless/forms/bulk_import.py:84 wireless/forms/filtersets.py:49 -#: wireless/forms/filtersets.py:83 wireless/tables/wirelesslan.py:52 -#: wireless/tables/wirelesslink.py:20 +#: 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/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:69 +#: 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/templates/circuits/circuit.html:34 +#: 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/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/vlan.html:48 +#: netbox/templates/virtualization/cluster.html:21 +#: netbox/templates/virtualization/virtualmachine.html:19 +#: netbox/templates/vpn/tunnel.html:25 +#: netbox/templates/wireless/wirelesslan.html:22 +#: netbox/templates/wireless/wirelesslink.html:17 +#: netbox/users/forms/filtersets.py: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/tables/clusters.py:74 +#: netbox/virtualization/tables/virtualmachines.py:60 +#: netbox/vpn/forms/bulk_edit.py:39 netbox/vpn/forms/bulk_import.py:37 +#: netbox/vpn/forms/filtersets.py:47 netbox/vpn/tables/tunnels.py:48 +#: netbox/wireless/forms/bulk_edit.py:43 +#: netbox/wireless/forms/bulk_edit.py:105 +#: netbox/wireless/forms/bulk_import.py:43 +#: netbox/wireless/forms/bulk_import.py:84 +#: netbox/wireless/forms/filtersets.py:49 +#: netbox/wireless/forms/filtersets.py:83 +#: netbox/wireless/tables/wirelesslan.py:52 +#: netbox/wireless/tables/wirelesslink.py:20 msgid "Status" msgstr "Status" -#: circuits/forms/bulk_edit.py:142 circuits/forms/bulk_edit.py:233 -#: circuits/forms/bulk_import.py:98 circuits/forms/bulk_import.py:158 -#: circuits/forms/filtersets.py:119 circuits/forms/filtersets.py:241 -#: dcim/forms/bulk_edit.py:122 dcim/forms/bulk_edit.py:187 -#: dcim/forms/bulk_edit.py:346 dcim/forms/bulk_edit.py:461 -#: dcim/forms/bulk_edit.py:690 dcim/forms/bulk_edit.py:794 -#: dcim/forms/bulk_edit.py:1706 dcim/forms/bulk_import.py:107 -#: dcim/forms/bulk_import.py:152 dcim/forms/bulk_import.py:241 -#: dcim/forms/bulk_import.py:334 dcim/forms/bulk_import.py:479 -#: dcim/forms/bulk_import.py:1219 dcim/forms/bulk_import.py:1428 -#: dcim/forms/filtersets.py:173 dcim/forms/filtersets.py:205 -#: dcim/forms/filtersets.py:323 dcim/forms/filtersets.py:399 -#: dcim/forms/filtersets.py:420 dcim/forms/filtersets.py:722 -#: dcim/forms/filtersets.py:916 dcim/forms/filtersets.py:978 -#: dcim/forms/filtersets.py:1008 dcim/forms/filtersets.py:1130 -#: dcim/tables/power.py:88 extras/filtersets.py:612 -#: extras/forms/filtersets.py:323 extras/forms/filtersets.py:396 -#: ipam/forms/bulk_edit.py:43 ipam/forms/bulk_edit.py:68 -#: ipam/forms/bulk_edit.py:112 ipam/forms/bulk_edit.py:141 -#: ipam/forms/bulk_edit.py:166 ipam/forms/bulk_edit.py:251 -#: ipam/forms/bulk_edit.py:301 ipam/forms/bulk_edit.py:349 -#: ipam/forms/bulk_edit.py:501 ipam/forms/bulk_import.py:38 -#: ipam/forms/bulk_import.py:67 ipam/forms/bulk_import.py:95 -#: ipam/forms/bulk_import.py:115 ipam/forms/bulk_import.py:135 -#: ipam/forms/bulk_import.py:164 ipam/forms/bulk_import.py:250 -#: ipam/forms/bulk_import.py:286 ipam/forms/bulk_import.py:443 -#: ipam/forms/filtersets.py:48 ipam/forms/filtersets.py:68 -#: ipam/forms/filtersets.py:100 ipam/forms/filtersets.py:120 -#: ipam/forms/filtersets.py:143 ipam/forms/filtersets.py:174 -#: ipam/forms/filtersets.py:267 ipam/forms/filtersets.py:310 -#: ipam/forms/filtersets.py:469 ipam/tables/ip.py:456 ipam/tables/vlans.py:229 -#: templates/circuits/circuit.html:38 templates/circuits/circuitgroup.html:36 -#: templates/dcim/cable.html:23 templates/dcim/device.html:79 -#: templates/dcim/location.html:49 templates/dcim/powerfeed.html:44 -#: templates/dcim/rack.html:32 templates/dcim/rackreservation.html:49 -#: templates/dcim/site.html:47 templates/dcim/virtualdevicecontext.html:52 -#: templates/ipam/aggregate.html:30 templates/ipam/asn.html:33 -#: templates/ipam/asnrange.html:29 templates/ipam/ipaddress.html:28 -#: templates/ipam/iprange.html:58 templates/ipam/prefix.html:29 -#: templates/ipam/routetarget.html:17 templates/ipam/vlan.html:39 -#: templates/ipam/vrf.html:20 templates/tenancy/tenant.html:17 -#: templates/virtualization/cluster.html:33 -#: templates/virtualization/virtualmachine.html:39 templates/vpn/l2vpn.html:30 -#: templates/vpn/tunnel.html:49 templates/wireless/wirelesslan.html:34 -#: templates/wireless/wirelesslink.html:25 tenancy/forms/forms.py:25 -#: tenancy/forms/forms.py:48 tenancy/forms/model_forms.py:52 -#: tenancy/tables/columns.py:64 virtualization/forms/bulk_edit.py:76 -#: virtualization/forms/bulk_edit.py:155 -#: virtualization/forms/bulk_import.py:66 -#: virtualization/forms/bulk_import.py:115 -#: virtualization/forms/filtersets.py:47 -#: virtualization/forms/filtersets.py:105 vpn/forms/bulk_edit.py:59 -#: vpn/forms/bulk_edit.py:269 vpn/forms/bulk_import.py:59 -#: vpn/forms/bulk_import.py:258 vpn/forms/filtersets.py:214 -#: wireless/forms/bulk_edit.py:63 wireless/forms/bulk_edit.py:110 -#: wireless/forms/bulk_import.py:55 wireless/forms/bulk_import.py:97 -#: wireless/forms/filtersets.py:35 wireless/forms/filtersets.py:75 +#: netbox/circuits/forms/bulk_edit.py: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/templates/circuits/circuitgroup.html:36 +#: 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 +#: netbox/templates/dcim/rackreservation.html:49 +#: netbox/templates/dcim/site.html:47 +#: netbox/templates/dcim/virtualdevicecontext.html:52 +#: netbox/templates/ipam/aggregate.html:30 netbox/templates/ipam/asn.html:33 +#: netbox/templates/ipam/asnrange.html:29 +#: netbox/templates/ipam/ipaddress.html:28 +#: netbox/templates/ipam/iprange.html:58 netbox/templates/ipam/prefix.html:29 +#: netbox/templates/ipam/routetarget.html:17 +#: netbox/templates/ipam/vlan.html:39 netbox/templates/ipam/vrf.html:20 +#: netbox/templates/tenancy/tenant.html:17 +#: netbox/templates/virtualization/cluster.html:33 +#: netbox/templates/virtualization/virtualmachine.html:39 +#: netbox/templates/vpn/l2vpn.html:30 netbox/templates/vpn/tunnel.html:49 +#: netbox/templates/wireless/wirelesslan.html:34 +#: netbox/templates/wireless/wirelesslink.html:25 +#: netbox/tenancy/forms/forms.py:25 netbox/tenancy/forms/forms.py:48 +#: netbox/tenancy/forms/model_forms.py:52 netbox/tenancy/tables/columns.py:64 +#: netbox/virtualization/forms/bulk_edit.py:76 +#: netbox/virtualization/forms/bulk_edit.py:155 +#: netbox/virtualization/forms/bulk_import.py:66 +#: netbox/virtualization/forms/bulk_import.py:115 +#: netbox/virtualization/forms/filtersets.py:47 +#: netbox/virtualization/forms/filtersets.py:105 +#: netbox/vpn/forms/bulk_edit.py:59 netbox/vpn/forms/bulk_edit.py:269 +#: netbox/vpn/forms/bulk_import.py:59 netbox/vpn/forms/bulk_import.py:258 +#: netbox/vpn/forms/filtersets.py:214 netbox/wireless/forms/bulk_edit.py:63 +#: netbox/wireless/forms/bulk_edit.py:110 +#: netbox/wireless/forms/bulk_import.py:55 +#: netbox/wireless/forms/bulk_import.py:97 +#: netbox/wireless/forms/filtersets.py:35 +#: netbox/wireless/forms/filtersets.py:75 msgid "Tenant" msgstr "Inquilino" -#: circuits/forms/bulk_edit.py:147 circuits/forms/filtersets.py:174 +#: netbox/circuits/forms/bulk_edit.py:147 +#: netbox/circuits/forms/filtersets.py:174 msgid "Install date" msgstr "Data de ativação" -#: circuits/forms/bulk_edit.py:152 circuits/forms/filtersets.py:179 +#: netbox/circuits/forms/bulk_edit.py:152 +#: netbox/circuits/forms/filtersets.py:179 msgid "Termination date" msgstr "Data de desativação" -#: circuits/forms/bulk_edit.py:158 circuits/forms/filtersets.py:186 +#: netbox/circuits/forms/bulk_edit.py:158 +#: netbox/circuits/forms/filtersets.py:186 msgid "Commit rate (Kbps)" msgstr "Taxa garantida (Kbps)" -#: circuits/forms/bulk_edit.py:173 circuits/forms/model_forms.py:112 +#: netbox/circuits/forms/bulk_edit.py:173 +#: netbox/circuits/forms/model_forms.py:112 msgid "Service Parameters" msgstr "Parâmetros do serviço" -#: circuits/forms/bulk_edit.py:174 circuits/forms/model_forms.py:113 -#: circuits/forms/model_forms.py:183 dcim/forms/model_forms.py:139 -#: dcim/forms/model_forms.py:181 dcim/forms/model_forms.py:266 -#: dcim/forms/model_forms.py:323 dcim/forms/model_forms.py:768 -#: dcim/forms/model_forms.py:1692 ipam/forms/model_forms.py:64 -#: ipam/forms/model_forms.py:81 ipam/forms/model_forms.py:115 -#: ipam/forms/model_forms.py:136 ipam/forms/model_forms.py:160 -#: ipam/forms/model_forms.py:232 ipam/forms/model_forms.py:261 -#: ipam/forms/model_forms.py:316 netbox/navigation/menu.py:24 -#: templates/dcim/device_edit.html:85 templates/dcim/htmx/cable_edit.html:72 -#: templates/ipam/ipaddress_bulk_add.html:27 templates/ipam/vlan_edit.html:22 -#: virtualization/forms/model_forms.py:80 -#: virtualization/forms/model_forms.py:222 vpn/forms/bulk_edit.py:78 -#: vpn/forms/filtersets.py:44 vpn/forms/model_forms.py:62 -#: vpn/forms/model_forms.py:147 vpn/forms/model_forms.py:411 -#: wireless/forms/model_forms.py:54 wireless/forms/model_forms.py:170 +#: 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/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/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 msgid "Tenancy" msgstr "Locação" -#: circuits/forms/bulk_edit.py:193 circuits/forms/bulk_edit.py:217 -#: circuits/forms/model_forms.py:155 circuits/tables/circuits.py:117 -#: templates/circuits/inc/circuit_termination_fields.html:62 -#: templates/circuits/providernetwork.html:17 +#: 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 "Rede do Provedor" -#: circuits/forms/bulk_edit.py:199 +#: netbox/circuits/forms/bulk_edit.py:199 msgid "Port speed (Kbps)" msgstr "Velocidade da porta (Kbps)" -#: circuits/forms/bulk_edit.py:203 +#: netbox/circuits/forms/bulk_edit.py:203 msgid "Upstream speed (Kbps)" msgstr "Velocidade de upstream (Kbps)" -#: circuits/forms/bulk_edit.py:206 dcim/forms/bulk_edit.py:951 -#: dcim/forms/bulk_edit.py:1315 dcim/forms/bulk_edit.py:1332 -#: dcim/forms/bulk_edit.py:1349 dcim/forms/bulk_edit.py:1367 -#: dcim/forms/bulk_edit.py:1455 dcim/forms/bulk_edit.py:1594 -#: dcim/forms/bulk_edit.py:1611 +#: 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 msgid "Mark connected" msgstr "Marcar como conectado" -#: circuits/forms/bulk_edit.py:219 circuits/forms/model_forms.py:157 -#: templates/circuits/inc/circuit_termination_fields.html:54 -#: templates/dcim/frontport.html:121 templates/dcim/interface.html:193 -#: templates/dcim/rearport.html:111 +#: netbox/circuits/forms/bulk_edit.py:219 +#: netbox/circuits/forms/model_forms.py:157 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:54 +#: netbox/templates/dcim/frontport.html:121 +#: netbox/templates/dcim/interface.html:193 +#: netbox/templates/dcim/rearport.html:111 msgid "Circuit Termination" msgstr "Terminação do Circuito" -#: circuits/forms/bulk_edit.py:221 circuits/forms/model_forms.py:159 +#: netbox/circuits/forms/bulk_edit.py:221 +#: netbox/circuits/forms/model_forms.py:159 msgid "Termination Details" msgstr "Detalhes da Terminação" -#: circuits/forms/bulk_edit.py:251 circuits/forms/filtersets.py:268 -#: circuits/tables/circuits.py:168 dcim/forms/model_forms.py:551 -#: templates/circuits/circuitgroupassignment.html:30 -#: templates/dcim/device.html:133 templates/dcim/virtualchassis.html:68 -#: templates/dcim/virtualchassis_edit.html:56 -#: templates/ipam/inc/panels/fhrp_groups.html:26 -#: tenancy/forms/bulk_edit.py:147 tenancy/forms/filtersets.py:110 +#: netbox/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/templates/dcim/device.html:133 +#: netbox/templates/dcim/virtualchassis.html:68 +#: netbox/templates/dcim/virtualchassis_edit.html:56 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:26 +#: netbox/tenancy/forms/bulk_edit.py:147 +#: netbox/tenancy/forms/filtersets.py:110 msgid "Priority" msgstr "Prioridade" -#: circuits/forms/bulk_import.py:39 circuits/forms/bulk_import.py:54 -#: circuits/forms/bulk_import.py:77 +#: 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 "Provedor designado" -#: circuits/forms/bulk_import.py:83 +#: netbox/circuits/forms/bulk_import.py:83 msgid "Assigned provider account" msgstr "Conta de provedor designada" -#: circuits/forms/bulk_import.py:90 +#: netbox/circuits/forms/bulk_import.py:90 msgid "Type of circuit" msgstr "Tipo de circuito" -#: circuits/forms/bulk_import.py:95 dcim/forms/bulk_import.py:90 -#: dcim/forms/bulk_import.py:149 dcim/forms/bulk_import.py:250 -#: dcim/forms/bulk_import.py:507 dcim/forms/bulk_import.py:661 -#: dcim/forms/bulk_import.py:1373 ipam/forms/bulk_import.py:194 -#: ipam/forms/bulk_import.py:259 ipam/forms/bulk_import.py:295 -#: ipam/forms/bulk_import.py:452 virtualization/forms/bulk_import.py:56 -#: virtualization/forms/bulk_import.py:82 vpn/forms/bulk_import.py:39 -#: wireless/forms/bulk_import.py:45 +#: netbox/circuits/forms/bulk_import.py: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 operacional" -#: circuits/forms/bulk_import.py:102 circuits/forms/bulk_import.py:162 -#: dcim/forms/bulk_import.py:111 dcim/forms/bulk_import.py:156 -#: dcim/forms/bulk_import.py:338 dcim/forms/bulk_import.py:483 -#: dcim/forms/bulk_import.py:1223 dcim/forms/bulk_import.py:1368 -#: dcim/forms/bulk_import.py:1432 ipam/forms/bulk_import.py:42 -#: ipam/forms/bulk_import.py:71 ipam/forms/bulk_import.py:99 -#: ipam/forms/bulk_import.py:119 ipam/forms/bulk_import.py:139 -#: ipam/forms/bulk_import.py:168 ipam/forms/bulk_import.py:254 -#: ipam/forms/bulk_import.py:290 ipam/forms/bulk_import.py:447 -#: virtualization/forms/bulk_import.py:70 -#: virtualization/forms/bulk_import.py:119 vpn/forms/bulk_import.py:63 -#: wireless/forms/bulk_import.py:59 wireless/forms/bulk_import.py:101 +#: netbox/circuits/forms/bulk_import.py: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 "Inquilino designado" -#: circuits/forms/bulk_import.py:120 -#: templates/circuits/inc/circuit_termination.html:6 -#: templates/circuits/inc/circuit_termination_fields.html:15 -#: templates/dcim/cable.html:68 templates/dcim/cable.html:72 -#: vpn/forms/bulk_import.py:100 vpn/forms/filtersets.py:77 +#: netbox/circuits/forms/bulk_import.py: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 "Terminação" -#: circuits/forms/bulk_import.py:130 circuits/forms/filtersets.py:147 -#: circuits/forms/filtersets.py:227 circuits/forms/model_forms.py:144 +#: 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 msgid "Provider network" msgstr "Rede do provedor" -#: circuits/forms/filtersets.py:30 circuits/forms/filtersets.py:118 -#: circuits/forms/filtersets.py:200 dcim/forms/bulk_edit.py:338 -#: dcim/forms/bulk_edit.py:441 dcim/forms/bulk_edit.py:682 -#: dcim/forms/bulk_edit.py:729 dcim/forms/bulk_edit.py:882 -#: dcim/forms/bulk_import.py:235 dcim/forms/bulk_import.py:315 -#: dcim/forms/bulk_import.py:546 dcim/forms/bulk_import.py:1317 -#: dcim/forms/bulk_import.py:1351 dcim/forms/filtersets.py:95 -#: dcim/forms/filtersets.py:322 dcim/forms/filtersets.py:356 -#: dcim/forms/filtersets.py:396 dcim/forms/filtersets.py:447 -#: dcim/forms/filtersets.py:719 dcim/forms/filtersets.py:762 -#: dcim/forms/filtersets.py:977 dcim/forms/filtersets.py:1006 -#: dcim/forms/filtersets.py:1026 dcim/forms/filtersets.py:1090 -#: dcim/forms/filtersets.py:1120 dcim/forms/filtersets.py:1129 -#: dcim/forms/filtersets.py:1240 dcim/forms/filtersets.py:1264 -#: dcim/forms/filtersets.py:1289 dcim/forms/filtersets.py:1308 -#: dcim/forms/filtersets.py:1331 dcim/forms/filtersets.py:1442 -#: dcim/forms/filtersets.py:1466 dcim/forms/filtersets.py:1490 -#: dcim/forms/filtersets.py:1508 dcim/forms/filtersets.py:1525 -#: dcim/forms/model_forms.py:180 dcim/forms/model_forms.py:243 -#: dcim/forms/model_forms.py:468 dcim/forms/model_forms.py:728 -#: dcim/tables/devices.py:157 dcim/tables/power.py:30 dcim/tables/racks.py:118 -#: dcim/tables/racks.py:212 extras/filtersets.py:536 -#: extras/forms/filtersets.py:320 ipam/forms/filtersets.py:173 -#: ipam/forms/filtersets.py:414 ipam/forms/filtersets.py:437 -#: ipam/forms/filtersets.py:467 templates/dcim/device.html:26 -#: templates/dcim/device_edit.html:30 -#: templates/dcim/inc/cable_termination.html:12 -#: templates/dcim/location.html:26 templates/dcim/powerpanel.html:26 -#: templates/dcim/rack.html:24 templates/dcim/rackreservation.html:32 -#: virtualization/forms/filtersets.py:46 -#: virtualization/forms/filtersets.py:100 wireless/forms/model_forms.py:87 -#: wireless/forms/model_forms.py:129 +#: netbox/circuits/forms/filtersets.py: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/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 msgid "Location" msgstr "Localização" -#: circuits/forms/filtersets.py:32 circuits/forms/filtersets.py:120 -#: dcim/forms/filtersets.py:144 dcim/forms/filtersets.py:158 -#: dcim/forms/filtersets.py:174 dcim/forms/filtersets.py:206 -#: dcim/forms/filtersets.py:328 dcim/forms/filtersets.py:400 -#: dcim/forms/filtersets.py:471 dcim/forms/filtersets.py:723 -#: dcim/forms/filtersets.py:1091 netbox/navigation/menu.py:31 -#: netbox/navigation/menu.py:33 tenancy/forms/filtersets.py:42 -#: tenancy/tables/columns.py:70 tenancy/tables/contacts.py:25 -#: tenancy/views.py:19 virtualization/forms/filtersets.py:37 -#: virtualization/forms/filtersets.py:48 -#: virtualization/forms/filtersets.py:106 +#: netbox/circuits/forms/filtersets.py: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/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/tables/contacts.py:25 netbox/tenancy/views.py:19 +#: netbox/virtualization/forms/filtersets.py:37 +#: netbox/virtualization/forms/filtersets.py:48 +#: netbox/virtualization/forms/filtersets.py:106 msgid "Contacts" msgstr "Contatos" -#: circuits/forms/filtersets.py:37 circuits/forms/filtersets.py:157 -#: dcim/forms/bulk_edit.py:112 dcim/forms/bulk_edit.py:313 -#: dcim/forms/bulk_edit.py:857 dcim/forms/bulk_import.py:93 -#: dcim/forms/filtersets.py:73 dcim/forms/filtersets.py:185 -#: dcim/forms/filtersets.py:211 dcim/forms/filtersets.py:334 -#: dcim/forms/filtersets.py:425 dcim/forms/filtersets.py:739 -#: dcim/forms/filtersets.py:983 dcim/forms/filtersets.py:1013 -#: dcim/forms/filtersets.py:1097 dcim/forms/filtersets.py:1136 -#: dcim/forms/filtersets.py:1576 dcim/forms/filtersets.py:1600 -#: dcim/forms/filtersets.py:1624 dcim/forms/model_forms.py:112 -#: dcim/forms/object_create.py:375 dcim/tables/devices.py:143 -#: dcim/tables/sites.py:85 extras/filtersets.py:503 -#: ipam/forms/bulk_edit.py:208 ipam/forms/bulk_edit.py:474 -#: ipam/forms/filtersets.py:217 ipam/forms/filtersets.py:422 -#: ipam/forms/filtersets.py:475 templates/dcim/device.html:18 -#: templates/dcim/rack.html:16 templates/dcim/rackreservation.html:22 -#: templates/dcim/region.html:26 templates/dcim/site.html:31 -#: templates/ipam/prefix.html:49 templates/ipam/vlan.html:16 -#: virtualization/forms/bulk_edit.py:81 virtualization/forms/filtersets.py:59 -#: virtualization/forms/filtersets.py:133 -#: virtualization/forms/model_forms.py:92 vpn/forms/filtersets.py:257 +#: netbox/circuits/forms/filtersets.py: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/templates/dcim/rackreservation.html:22 +#: netbox/templates/dcim/region.html:26 netbox/templates/dcim/site.html:31 +#: netbox/templates/ipam/prefix.html:49 netbox/templates/ipam/vlan.html:16 +#: netbox/virtualization/forms/bulk_edit.py:81 +#: netbox/virtualization/forms/filtersets.py:59 +#: netbox/virtualization/forms/filtersets.py:133 +#: netbox/virtualization/forms/model_forms.py:92 +#: netbox/vpn/forms/filtersets.py:257 msgid "Region" msgstr "Região" -#: circuits/forms/filtersets.py:42 circuits/forms/filtersets.py:162 -#: dcim/forms/bulk_edit.py:321 dcim/forms/bulk_edit.py:865 -#: dcim/forms/filtersets.py:78 dcim/forms/filtersets.py:190 -#: dcim/forms/filtersets.py:216 dcim/forms/filtersets.py:347 -#: dcim/forms/filtersets.py:430 dcim/forms/filtersets.py:744 -#: dcim/forms/filtersets.py:988 dcim/forms/filtersets.py:1102 -#: dcim/forms/filtersets.py:1141 dcim/forms/object_create.py:383 -#: extras/filtersets.py:520 ipam/forms/bulk_edit.py:213 -#: ipam/forms/bulk_edit.py:479 ipam/forms/filtersets.py:222 -#: ipam/forms/filtersets.py:427 ipam/forms/filtersets.py:480 -#: virtualization/forms/bulk_edit.py:86 virtualization/forms/filtersets.py:69 -#: virtualization/forms/filtersets.py:138 -#: virtualization/forms/model_forms.py:98 +#: netbox/circuits/forms/filtersets.py: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/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 msgid "Site group" msgstr "Grupo de sites" -#: circuits/forms/filtersets.py:65 circuits/forms/filtersets.py:83 -#: circuits/forms/filtersets.py:102 circuits/forms/filtersets.py:117 -#: core/forms/filtersets.py:67 core/forms/filtersets.py:135 -#: dcim/forms/bulk_edit.py:828 dcim/forms/filtersets.py:172 -#: dcim/forms/filtersets.py:204 dcim/forms/filtersets.py:915 -#: dcim/forms/filtersets.py:1007 dcim/forms/filtersets.py:1131 -#: dcim/forms/filtersets.py:1239 dcim/forms/filtersets.py:1263 -#: dcim/forms/filtersets.py:1288 dcim/forms/filtersets.py:1307 -#: dcim/forms/filtersets.py:1327 dcim/forms/filtersets.py:1441 -#: dcim/forms/filtersets.py:1465 dcim/forms/filtersets.py:1489 -#: dcim/forms/filtersets.py:1507 dcim/forms/filtersets.py:1523 -#: extras/forms/bulk_edit.py:90 extras/forms/filtersets.py:44 -#: extras/forms/filtersets.py:134 extras/forms/filtersets.py:165 -#: extras/forms/filtersets.py:205 extras/forms/filtersets.py:221 -#: extras/forms/filtersets.py:252 extras/forms/filtersets.py:276 -#: extras/forms/filtersets.py:441 ipam/forms/filtersets.py:99 -#: ipam/forms/filtersets.py:266 ipam/forms/filtersets.py:307 -#: ipam/forms/filtersets.py:382 ipam/forms/filtersets.py:468 -#: ipam/forms/filtersets.py:527 ipam/forms/filtersets.py:545 -#: netbox/tables/tables.py:256 virtualization/forms/filtersets.py:45 -#: virtualization/forms/filtersets.py:103 -#: virtualization/forms/filtersets.py:198 -#: virtualization/forms/filtersets.py:243 vpn/forms/filtersets.py:213 -#: wireless/forms/bulk_edit.py:150 wireless/forms/filtersets.py:34 -#: wireless/forms/filtersets.py:74 +#: 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 "Atributos" -#: circuits/forms/filtersets.py:73 circuits/tables/circuits.py:63 -#: circuits/tables/providers.py:66 templates/circuits/circuit.html:22 -#: templates/circuits/provideraccount.html:24 +#: netbox/circuits/forms/filtersets.py:73 +#: netbox/circuits/tables/circuits.py:63 +#: netbox/circuits/tables/providers.py:66 +#: netbox/templates/circuits/circuit.html:22 +#: netbox/templates/circuits/provideraccount.html:24 msgid "Account" msgstr "Conta" -#: circuits/forms/filtersets.py:217 +#: netbox/circuits/forms/filtersets.py:217 msgid "Term Side" msgstr "Lado da Terminação" -#: circuits/forms/filtersets.py:250 extras/forms/model_forms.py:582 -#: ipam/forms/filtersets.py:142 ipam/forms/filtersets.py:546 -#: ipam/forms/model_forms.py:323 templates/extras/configcontext.html:60 -#: templates/ipam/ipaddress.html:59 templates/ipam/vlan_edit.html:30 -#: tenancy/forms/filtersets.py:87 users/forms/model_forms.py:314 +#: 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/templates/extras/configcontext.html:60 +#: netbox/templates/ipam/ipaddress.html:59 +#: netbox/templates/ipam/vlan_edit.html:30 +#: netbox/tenancy/forms/filtersets.py:87 netbox/users/forms/model_forms.py:314 msgid "Assignment" msgstr "Atribuição" -#: circuits/forms/filtersets.py:265 circuits/forms/model_forms.py:195 -#: circuits/tables/circuits.py:155 dcim/forms/bulk_edit.py:117 -#: dcim/forms/bulk_import.py:100 dcim/forms/model_forms.py:117 -#: dcim/tables/sites.py:89 extras/forms/filtersets.py:480 -#: ipam/filtersets.py:999 ipam/forms/bulk_edit.py:493 -#: ipam/forms/bulk_import.py:436 ipam/forms/model_forms.py:528 -#: ipam/tables/fhrp.py:67 ipam/tables/vlans.py:122 ipam/tables/vlans.py:226 -#: templates/circuits/circuitgroupassignment.html:22 -#: templates/dcim/interface.html:284 templates/dcim/site.html:37 -#: templates/ipam/inc/panels/fhrp_groups.html:23 templates/ipam/vlan.html:27 -#: templates/tenancy/contact.html:21 templates/tenancy/tenant.html:20 -#: templates/users/group.html:6 templates/users/group.html:14 -#: templates/virtualization/cluster.html:29 templates/vpn/tunnel.html:29 -#: templates/wireless/wirelesslan.html:18 tenancy/forms/bulk_edit.py:43 -#: tenancy/forms/bulk_edit.py:94 tenancy/forms/bulk_import.py:40 -#: tenancy/forms/bulk_import.py:81 tenancy/forms/filtersets.py:48 -#: tenancy/forms/filtersets.py:78 tenancy/forms/filtersets.py:97 -#: tenancy/forms/model_forms.py:45 tenancy/forms/model_forms.py:97 -#: tenancy/forms/model_forms.py:122 tenancy/tables/contacts.py:60 -#: tenancy/tables/contacts.py:107 tenancy/tables/tenants.py:42 -#: users/filtersets.py:62 users/filtersets.py:185 users/forms/filtersets.py:31 -#: users/forms/filtersets.py:37 users/forms/filtersets.py:79 -#: virtualization/forms/bulk_edit.py:65 virtualization/forms/bulk_import.py:47 -#: virtualization/forms/filtersets.py:85 -#: virtualization/forms/model_forms.py:66 virtualization/tables/clusters.py:70 -#: vpn/forms/bulk_edit.py:112 vpn/forms/bulk_import.py:158 -#: vpn/forms/filtersets.py:116 vpn/tables/crypto.py:31 -#: vpn/tables/tunnels.py:44 wireless/forms/bulk_edit.py:48 -#: wireless/forms/bulk_import.py:36 wireless/forms/filtersets.py:46 -#: wireless/forms/model_forms.py:40 wireless/tables/wirelesslan.py:48 +#: netbox/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/templates/circuits/circuitgroupassignment.html:22 +#: netbox/templates/dcim/interface.html:284 netbox/templates/dcim/site.html:37 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:23 +#: netbox/templates/ipam/vlan.html:27 netbox/templates/tenancy/contact.html:21 +#: netbox/templates/tenancy/tenant.html:20 netbox/templates/users/group.html:6 +#: netbox/templates/users/group.html:14 +#: netbox/templates/virtualization/cluster.html:29 +#: netbox/templates/vpn/tunnel.html:29 +#: netbox/templates/wireless/wirelesslan.html:18 +#: netbox/tenancy/forms/bulk_edit.py:43 netbox/tenancy/forms/bulk_edit.py:94 +#: netbox/tenancy/forms/bulk_import.py:40 +#: netbox/tenancy/forms/bulk_import.py:81 +#: netbox/tenancy/forms/filtersets.py:48 netbox/tenancy/forms/filtersets.py:78 +#: netbox/tenancy/forms/filtersets.py:97 +#: netbox/tenancy/forms/model_forms.py:45 +#: netbox/tenancy/forms/model_forms.py:97 +#: netbox/tenancy/forms/model_forms.py:122 +#: netbox/tenancy/tables/contacts.py:60 netbox/tenancy/tables/contacts.py:107 +#: netbox/tenancy/tables/tenants.py:42 netbox/users/filtersets.py: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/tables/clusters.py:70 +#: netbox/vpn/forms/bulk_edit.py:112 netbox/vpn/forms/bulk_import.py:158 +#: netbox/vpn/forms/filtersets.py:116 netbox/vpn/tables/crypto.py:31 +#: netbox/vpn/tables/tunnels.py:44 netbox/wireless/forms/bulk_edit.py:48 +#: netbox/wireless/forms/bulk_import.py:36 +#: netbox/wireless/forms/filtersets.py:46 +#: netbox/wireless/forms/model_forms.py:40 +#: netbox/wireless/tables/wirelesslan.py:48 msgid "Group" msgstr "Grupo" -#: circuits/forms/model_forms.py:182 templates/circuits/circuitgroup.html:25 +#: netbox/circuits/forms/model_forms.py:182 +#: netbox/templates/circuits/circuitgroup.html:25 msgid "Circuit Group" msgstr "Grupo de Circuitos" -#: circuits/models/circuits.py:27 dcim/models/cables.py:67 -#: dcim/models/device_component_templates.py:517 -#: dcim/models/device_component_templates.py:617 -#: dcim/models/device_components.py:975 dcim/models/device_components.py:1049 -#: dcim/models/device_components.py:1204 dcim/models/devices.py:479 -#: dcim/models/racks.py:224 extras/models/tags.py:28 +#: 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/extras/models/tags.py:28 msgid "color" msgstr "cor" -#: circuits/models/circuits.py:36 +#: netbox/circuits/models/circuits.py:36 msgid "circuit type" msgstr "tipo de circuito" -#: circuits/models/circuits.py:37 +#: netbox/circuits/models/circuits.py:37 msgid "circuit types" msgstr "tipos de circuitos" -#: circuits/models/circuits.py:48 +#: netbox/circuits/models/circuits.py:48 msgid "circuit ID" msgstr "ID do circuito" -#: circuits/models/circuits.py:49 +#: netbox/circuits/models/circuits.py:49 msgid "Unique circuit ID" msgstr "ID única do circuito" -#: circuits/models/circuits.py:69 core/models/data.py:52 -#: core/models/jobs.py:84 dcim/models/cables.py:49 dcim/models/devices.py:653 -#: dcim/models/devices.py:1173 dcim/models/devices.py:1399 -#: dcim/models/power.py:96 dcim/models/racks.py:297 dcim/models/sites.py:154 -#: dcim/models/sites.py:266 ipam/models/ip.py:253 ipam/models/ip.py:522 -#: ipam/models/ip.py:730 ipam/models/vlans.py:195 -#: virtualization/models/clusters.py:74 -#: virtualization/models/virtualmachines.py:84 vpn/models/tunnels.py:40 -#: wireless/models.py:95 wireless/models.py:159 +#: 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 msgid "status" msgstr "status" -#: circuits/models/circuits.py:84 templates/core/plugin.html:20 +#: netbox/circuits/models/circuits.py:84 netbox/templates/core/plugin.html:20 msgid "installed" msgstr "instalado" -#: circuits/models/circuits.py:89 +#: netbox/circuits/models/circuits.py:89 msgid "terminates" msgstr "encerramento" -#: circuits/models/circuits.py:94 +#: netbox/circuits/models/circuits.py:94 msgid "commit rate (Kbps)" msgstr "taxa garantida (Kbps)" -#: circuits/models/circuits.py:95 +#: netbox/circuits/models/circuits.py:95 msgid "Committed rate" msgstr "Taxa garantida" -#: circuits/models/circuits.py:137 +#: netbox/circuits/models/circuits.py:137 msgid "circuit" msgstr "circuito" -#: circuits/models/circuits.py:138 +#: netbox/circuits/models/circuits.py:138 msgid "circuits" msgstr "circuitos" -#: circuits/models/circuits.py:170 +#: netbox/circuits/models/circuits.py:170 msgid "circuit group" msgstr "grupo de circuitos" -#: circuits/models/circuits.py:171 +#: netbox/circuits/models/circuits.py:171 msgid "circuit groups" msgstr "grupos de circuitos" -#: circuits/models/circuits.py:195 ipam/models/fhrp.py:93 -#: tenancy/models/contacts.py:134 +#: netbox/circuits/models/circuits.py:195 netbox/ipam/models/fhrp.py:93 +#: netbox/tenancy/models/contacts.py:134 msgid "priority" msgstr "prioridade" -#: circuits/models/circuits.py:213 +#: netbox/circuits/models/circuits.py:213 msgid "Circuit group assignment" msgstr "Atribuição do grupo de circuitos" -#: circuits/models/circuits.py:214 +#: netbox/circuits/models/circuits.py:214 msgid "Circuit group assignments" msgstr "Atribuições do grupo de circuitos" -#: circuits/models/circuits.py:240 +#: netbox/circuits/models/circuits.py:240 msgid "termination" msgstr "terminação" -#: circuits/models/circuits.py:257 +#: netbox/circuits/models/circuits.py:257 msgid "port speed (Kbps)" msgstr "velocidade da porta (Kbps)" -#: circuits/models/circuits.py:260 +#: netbox/circuits/models/circuits.py:260 msgid "Physical circuit speed" msgstr "Velocidade do circuito físico" -#: circuits/models/circuits.py:265 +#: netbox/circuits/models/circuits.py:265 msgid "upstream speed (Kbps)" msgstr "velocidade de upstream (Kbps)" -#: circuits/models/circuits.py:266 +#: netbox/circuits/models/circuits.py:266 msgid "Upstream speed, if different from port speed" msgstr "Velocidade de upstream, se diferente da velocidade da porta" -#: circuits/models/circuits.py:271 +#: netbox/circuits/models/circuits.py:271 msgid "cross-connect ID" msgstr "ID da conexão cruzada" -#: circuits/models/circuits.py:272 +#: netbox/circuits/models/circuits.py:272 msgid "ID of the local cross-connect" msgstr "ID da conexão cruzada local" -#: circuits/models/circuits.py:277 +#: netbox/circuits/models/circuits.py:277 msgid "patch panel/port(s)" msgstr "patch panel/porta(s)" -#: circuits/models/circuits.py:278 +#: netbox/circuits/models/circuits.py:278 msgid "Patch panel ID and port number(s)" msgstr "ID do patch panel e número da(s) porta(s)" -#: circuits/models/circuits.py:281 -#: dcim/models/device_component_templates.py:61 -#: dcim/models/device_components.py:68 dcim/models/racks.py:685 -#: extras/models/configs.py:45 extras/models/configs.py:219 -#: extras/models/customfields.py:125 extras/models/models.py:61 -#: extras/models/models.py:158 extras/models/models.py:396 -#: extras/models/models.py:511 extras/models/notifications.py:131 -#: extras/models/staging.py:31 extras/models/tags.py:32 -#: netbox/models/__init__.py:110 netbox/models/__init__.py:145 -#: netbox/models/__init__.py:191 users/models/permissions.py:24 -#: users/models/tokens.py:57 users/models/users.py:33 -#: virtualization/models/virtualmachines.py:289 +#: 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/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 msgid "description" msgstr "descrição" -#: circuits/models/circuits.py:294 +#: netbox/circuits/models/circuits.py:294 msgid "circuit termination" msgstr "terminação do circuito" -#: circuits/models/circuits.py:295 +#: netbox/circuits/models/circuits.py:295 msgid "circuit terminations" msgstr "terminações dos circuitos" -#: circuits/models/circuits.py:308 +#: netbox/circuits/models/circuits.py:308 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 " "provedor." -#: circuits/models/circuits.py:310 +#: 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." -#: circuits/models/providers.py:22 circuits/models/providers.py:66 -#: circuits/models/providers.py:104 core/models/data.py:39 -#: core/models/jobs.py:45 dcim/models/device_component_templates.py:43 -#: dcim/models/device_components.py:53 dcim/models/devices.py:593 -#: dcim/models/devices.py:1330 dcim/models/devices.py:1395 -#: dcim/models/power.py:39 dcim/models/power.py:92 dcim/models/racks.py:262 -#: dcim/models/sites.py:138 extras/models/configs.py:36 -#: extras/models/configs.py:215 extras/models/customfields.py:92 -#: extras/models/models.py:56 extras/models/models.py:153 -#: extras/models/models.py:296 extras/models/models.py:392 -#: extras/models/models.py:501 extras/models/models.py:596 -#: extras/models/notifications.py:126 extras/models/scripts.py:30 -#: extras/models/staging.py:26 ipam/models/asns.py:18 ipam/models/fhrp.py:25 -#: ipam/models/services.py:52 ipam/models/services.py:88 -#: ipam/models/vlans.py:36 ipam/models/vlans.py:184 ipam/models/vrfs.py:22 -#: ipam/models/vrfs.py:79 netbox/models/__init__.py:137 -#: netbox/models/__init__.py:181 tenancy/models/contacts.py:64 -#: tenancy/models/tenants.py:20 tenancy/models/tenants.py:45 -#: users/models/permissions.py:20 users/models/users.py:28 -#: virtualization/models/clusters.py:57 -#: virtualization/models/virtualmachines.py:72 -#: virtualization/models/virtualmachines.py:279 vpn/models/crypto.py:24 -#: vpn/models/crypto.py:71 vpn/models/crypto.py:131 vpn/models/crypto.py:183 -#: vpn/models/crypto.py:221 vpn/models/l2vpn.py:22 vpn/models/tunnels.py:35 -#: wireless/models.py:51 +#: 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/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/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 msgid "name" msgstr "nome" -#: circuits/models/providers.py:25 +#: netbox/circuits/models/providers.py:25 msgid "Full name of the provider" msgstr "Nome completo do provedor" -#: circuits/models/providers.py:28 dcim/models/devices.py:86 -#: dcim/models/racks.py:137 dcim/models/sites.py:149 -#: extras/models/models.py:506 ipam/models/asns.py:23 ipam/models/vlans.py:40 -#: netbox/models/__init__.py:141 netbox/models/__init__.py:186 -#: tenancy/models/tenants.py:25 tenancy/models/tenants.py:49 -#: vpn/models/l2vpn.py:27 wireless/models.py:56 +#: netbox/circuits/models/providers.py:28 netbox/dcim/models/devices.py:86 +#: 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 msgid "slug" msgstr "slug" -#: circuits/models/providers.py:42 +#: netbox/circuits/models/providers.py:42 msgid "provider" msgstr "provedor" -#: circuits/models/providers.py:43 +#: netbox/circuits/models/providers.py:43 msgid "providers" msgstr "provedores" -#: circuits/models/providers.py:63 +#: netbox/circuits/models/providers.py:63 msgid "account ID" msgstr "ID da conta" -#: circuits/models/providers.py:86 +#: netbox/circuits/models/providers.py:86 msgid "provider account" msgstr "conta de provedor" -#: circuits/models/providers.py:87 +#: netbox/circuits/models/providers.py:87 msgid "provider accounts" msgstr "contas de provedores" -#: circuits/models/providers.py:115 +#: netbox/circuits/models/providers.py:115 msgid "service ID" msgstr "ID do serviço" -#: circuits/models/providers.py:126 +#: netbox/circuits/models/providers.py:126 msgid "provider network" msgstr "rede do provedor" -#: circuits/models/providers.py:127 +#: netbox/circuits/models/providers.py:127 msgid "provider networks" msgstr "redes dos provedores" -#: circuits/tables/circuits.py:32 circuits/tables/circuits.py:132 -#: circuits/tables/providers.py:18 circuits/tables/providers.py:69 -#: circuits/tables/providers.py:99 core/tables/data.py:16 -#: core/tables/jobs.py:14 core/tables/plugins.py:44 core/tables/tasks.py:11 -#: core/tables/tasks.py:115 dcim/forms/filtersets.py:63 -#: dcim/forms/object_create.py:43 dcim/tables/devices.py:52 -#: dcim/tables/devices.py:92 dcim/tables/devices.py:134 -#: dcim/tables/devices.py:289 dcim/tables/devices.py:392 -#: dcim/tables/devices.py:433 dcim/tables/devices.py:482 -#: dcim/tables/devices.py:531 dcim/tables/devices.py:648 -#: dcim/tables/devices.py:731 dcim/tables/devices.py:778 -#: dcim/tables/devices.py:841 dcim/tables/devices.py:911 -#: dcim/tables/devices.py:974 dcim/tables/devices.py:994 -#: dcim/tables/devices.py:1023 dcim/tables/devices.py:1053 -#: dcim/tables/devicetypes.py:31 dcim/tables/power.py:22 -#: dcim/tables/power.py:62 dcim/tables/racks.py:24 dcim/tables/racks.py:113 -#: dcim/tables/sites.py:24 dcim/tables/sites.py:51 dcim/tables/sites.py:78 -#: dcim/tables/sites.py:130 extras/forms/filtersets.py:213 -#: extras/tables/tables.py:58 extras/tables/tables.py:122 -#: extras/tables/tables.py:155 extras/tables/tables.py:180 -#: extras/tables/tables.py:246 extras/tables/tables.py:361 -#: extras/tables/tables.py:378 extras/tables/tables.py:401 -#: extras/tables/tables.py:439 extras/tables/tables.py:491 -#: extras/tables/tables.py:514 ipam/forms/bulk_edit.py:407 -#: ipam/forms/filtersets.py:386 ipam/tables/asn.py:16 ipam/tables/ip.py:85 -#: ipam/tables/ip.py:160 ipam/tables/services.py:15 ipam/tables/services.py:40 -#: ipam/tables/vlans.py:64 ipam/tables/vlans.py:114 ipam/tables/vrfs.py:26 -#: ipam/tables/vrfs.py:68 templates/circuits/circuitgroup.html:28 -#: templates/circuits/circuittype.html:22 -#: templates/circuits/provideraccount.html:28 -#: templates/circuits/providernetwork.html:24 -#: templates/core/datasource.html:34 templates/core/job.html:44 -#: templates/core/plugin.html:54 templates/core/rq_worker.html:43 -#: templates/dcim/consoleport.html:28 templates/dcim/consoleserverport.html:28 -#: templates/dcim/devicebay.html:24 templates/dcim/devicerole.html:26 -#: templates/dcim/frontport.html:28 -#: templates/dcim/inc/interface_vlans_table.html:5 -#: templates/dcim/inc/panels/inventory_items.html:18 -#: templates/dcim/interface.html:38 templates/dcim/interface.html:165 -#: templates/dcim/inventoryitem.html:28 -#: templates/dcim/inventoryitemrole.html:18 templates/dcim/location.html:29 -#: templates/dcim/manufacturer.html:36 templates/dcim/modulebay.html:30 -#: templates/dcim/platform.html:29 templates/dcim/poweroutlet.html:28 -#: templates/dcim/powerport.html:28 templates/dcim/rackrole.html:22 -#: templates/dcim/rearport.html:28 templates/dcim/region.html:29 -#: templates/dcim/sitegroup.html:29 -#: templates/dcim/virtualdevicecontext.html:18 -#: templates/extras/configcontext.html:13 -#: templates/extras/configtemplate.html:13 -#: templates/extras/customfield.html:13 templates/extras/customlink.html:13 -#: templates/extras/eventrule.html:13 templates/extras/exporttemplate.html:15 -#: templates/extras/notificationgroup.html:14 -#: templates/extras/savedfilter.html:13 templates/extras/script_list.html:44 -#: templates/extras/tag.html:14 templates/extras/webhook.html:13 -#: templates/ipam/asnrange.html:15 templates/ipam/fhrpgroup.html:30 -#: templates/ipam/rir.html:22 templates/ipam/role.html:22 -#: templates/ipam/routetarget.html:13 templates/ipam/service.html:24 -#: templates/ipam/servicetemplate.html:15 templates/ipam/vlan.html:35 -#: templates/ipam/vlangroup.html:30 templates/tenancy/contact.html:25 -#: templates/tenancy/contactgroup.html:21 -#: templates/tenancy/contactrole.html:18 templates/tenancy/tenantgroup.html:29 -#: templates/users/group.html:17 templates/users/objectpermission.html:17 -#: templates/virtualization/cluster.html:13 -#: templates/virtualization/clustergroup.html:22 -#: templates/virtualization/clustertype.html:22 -#: templates/virtualization/virtualdisk.html:25 -#: templates/virtualization/virtualmachine.html:15 -#: templates/virtualization/vminterface.html:25 -#: templates/vpn/ikepolicy.html:13 templates/vpn/ikeproposal.html:13 -#: templates/vpn/ipsecpolicy.html:13 templates/vpn/ipsecprofile.html:13 -#: templates/vpn/ipsecprofile.html:36 templates/vpn/ipsecprofile.html:69 -#: templates/vpn/ipsecproposal.html:13 templates/vpn/l2vpn.html:14 -#: templates/vpn/tunnel.html:21 templates/vpn/tunnelgroup.html:26 -#: templates/wireless/wirelesslangroup.html:29 tenancy/tables/contacts.py:19 -#: tenancy/tables/contacts.py:41 tenancy/tables/contacts.py:56 -#: tenancy/tables/tenants.py:16 tenancy/tables/tenants.py:38 -#: users/tables.py:62 users/tables.py:76 -#: virtualization/forms/bulk_create.py:20 -#: virtualization/forms/object_create.py:13 -#: virtualization/forms/object_create.py:23 -#: virtualization/tables/clusters.py:17 virtualization/tables/clusters.py:39 -#: virtualization/tables/clusters.py:62 -#: virtualization/tables/virtualmachines.py:55 -#: virtualization/tables/virtualmachines.py:139 -#: virtualization/tables/virtualmachines.py:194 vpn/tables/crypto.py:18 -#: vpn/tables/crypto.py:57 vpn/tables/crypto.py:93 vpn/tables/crypto.py:129 -#: vpn/tables/crypto.py:158 vpn/tables/l2vpn.py:23 vpn/tables/tunnels.py:18 -#: vpn/tables/tunnels.py:40 wireless/tables/wirelesslan.py:18 -#: wireless/tables/wirelesslan.py:79 +#: netbox/circuits/tables/circuits.py:32 +#: netbox/circuits/tables/circuits.py:132 +#: netbox/circuits/tables/providers.py:18 +#: netbox/circuits/tables/providers.py:69 +#: netbox/circuits/tables/providers.py:99 netbox/core/tables/data.py:16 +#: netbox/core/tables/jobs.py:14 netbox/core/tables/plugins.py: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/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/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/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/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 +#: netbox/templates/dcim/consoleserverport.html:28 +#: netbox/templates/dcim/devicebay.html:24 +#: netbox/templates/dcim/devicerole.html:26 +#: netbox/templates/dcim/frontport.html:28 +#: netbox/templates/dcim/inc/interface_vlans_table.html:5 +#: netbox/templates/dcim/inc/panels/inventory_items.html:18 +#: netbox/templates/dcim/interface.html:38 +#: netbox/templates/dcim/interface.html:165 +#: netbox/templates/dcim/inventoryitem.html:28 +#: netbox/templates/dcim/inventoryitemrole.html:18 +#: netbox/templates/dcim/location.html:29 +#: netbox/templates/dcim/manufacturer.html:36 +#: netbox/templates/dcim/modulebay.html:30 +#: netbox/templates/dcim/platform.html:29 +#: netbox/templates/dcim/poweroutlet.html:28 +#: netbox/templates/dcim/powerport.html:28 +#: netbox/templates/dcim/rackrole.html:22 +#: netbox/templates/dcim/rearport.html:28 netbox/templates/dcim/region.html:29 +#: netbox/templates/dcim/sitegroup.html:29 +#: netbox/templates/dcim/virtualdevicecontext.html:18 +#: netbox/templates/extras/configcontext.html:13 +#: netbox/templates/extras/configtemplate.html:13 +#: netbox/templates/extras/customfield.html:13 +#: netbox/templates/extras/customlink.html:13 +#: netbox/templates/extras/eventrule.html:13 +#: netbox/templates/extras/exporttemplate.html:15 +#: netbox/templates/extras/notificationgroup.html:14 +#: netbox/templates/extras/savedfilter.html:13 +#: netbox/templates/extras/script_list.html:45 +#: netbox/templates/extras/tag.html:14 netbox/templates/extras/webhook.html:13 +#: netbox/templates/ipam/asnrange.html:15 +#: netbox/templates/ipam/fhrpgroup.html:30 netbox/templates/ipam/rir.html:22 +#: netbox/templates/ipam/role.html:22 +#: netbox/templates/ipam/routetarget.html:13 +#: netbox/templates/ipam/service.html:24 +#: netbox/templates/ipam/servicetemplate.html:15 +#: netbox/templates/ipam/vlan.html:35 netbox/templates/ipam/vlangroup.html:30 +#: netbox/templates/tenancy/contact.html:25 +#: netbox/templates/tenancy/contactgroup.html:21 +#: netbox/templates/tenancy/contactrole.html:18 +#: netbox/templates/tenancy/tenantgroup.html:29 +#: netbox/templates/users/group.html:17 +#: netbox/templates/users/objectpermission.html:17 +#: netbox/templates/virtualization/cluster.html:13 +#: netbox/templates/virtualization/clustergroup.html:22 +#: netbox/templates/virtualization/clustertype.html:22 +#: netbox/templates/virtualization/virtualdisk.html:25 +#: netbox/templates/virtualization/virtualmachine.html:15 +#: netbox/templates/virtualization/vminterface.html:25 +#: netbox/templates/vpn/ikepolicy.html:13 +#: netbox/templates/vpn/ikeproposal.html:13 +#: netbox/templates/vpn/ipsecpolicy.html:13 +#: netbox/templates/vpn/ipsecprofile.html:13 +#: netbox/templates/vpn/ipsecprofile.html:36 +#: netbox/templates/vpn/ipsecprofile.html:69 +#: netbox/templates/vpn/ipsecproposal.html:13 +#: netbox/templates/vpn/l2vpn.html:14 netbox/templates/vpn/tunnel.html:21 +#: netbox/templates/vpn/tunnelgroup.html:26 +#: netbox/templates/wireless/wirelesslangroup.html:29 +#: netbox/tenancy/tables/contacts.py:19 netbox/tenancy/tables/contacts.py:41 +#: netbox/tenancy/tables/contacts.py:56 netbox/tenancy/tables/tenants.py:16 +#: netbox/tenancy/tables/tenants.py:38 netbox/users/tables.py:62 +#: netbox/users/tables.py:76 netbox/virtualization/forms/bulk_create.py:20 +#: netbox/virtualization/forms/object_create.py:13 +#: netbox/virtualization/forms/object_create.py:23 +#: netbox/virtualization/tables/clusters.py:17 +#: netbox/virtualization/tables/clusters.py:39 +#: netbox/virtualization/tables/clusters.py:62 +#: netbox/virtualization/tables/virtualmachines.py:55 +#: netbox/virtualization/tables/virtualmachines.py:139 +#: netbox/virtualization/tables/virtualmachines.py:194 +#: netbox/vpn/tables/crypto.py:18 netbox/vpn/tables/crypto.py:57 +#: netbox/vpn/tables/crypto.py:93 netbox/vpn/tables/crypto.py:129 +#: netbox/vpn/tables/crypto.py:158 netbox/vpn/tables/l2vpn.py:23 +#: netbox/vpn/tables/tunnels.py:18 netbox/vpn/tables/tunnels.py:40 +#: netbox/wireless/tables/wirelesslan.py:18 +#: netbox/wireless/tables/wirelesslan.py:79 msgid "Name" msgstr "Nome" -#: circuits/tables/circuits.py:41 circuits/tables/circuits.py:138 -#: circuits/tables/providers.py:45 circuits/tables/providers.py:79 -#: netbox/navigation/menu.py:266 netbox/navigation/menu.py:270 -#: netbox/navigation/menu.py:272 templates/circuits/provider.html:57 -#: templates/circuits/provideraccount.html:44 -#: templates/circuits/providernetwork.html:50 +#: 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/templates/circuits/provider.html:57 +#: netbox/templates/circuits/provideraccount.html:44 +#: netbox/templates/circuits/providernetwork.html:50 msgid "Circuits" msgstr "Circuitos" -#: circuits/tables/circuits.py:55 templates/circuits/circuit.html:26 +#: netbox/circuits/tables/circuits.py:55 +#: netbox/templates/circuits/circuit.html:26 msgid "Circuit ID" msgstr "ID do Circuito" -#: circuits/tables/circuits.py:69 wireless/forms/model_forms.py:160 +#: netbox/circuits/tables/circuits.py:69 +#: netbox/wireless/forms/model_forms.py:160 msgid "Side A" msgstr "Lado A" -#: circuits/tables/circuits.py:74 +#: netbox/circuits/tables/circuits.py:74 msgid "Side Z" msgstr "Lado Z" -#: circuits/tables/circuits.py:77 templates/circuits/circuit.html:55 +#: netbox/circuits/tables/circuits.py:77 +#: netbox/templates/circuits/circuit.html:55 msgid "Commit Rate" msgstr "Taxa Garantida" -#: circuits/tables/circuits.py:80 circuits/tables/providers.py:48 -#: circuits/tables/providers.py:82 circuits/tables/providers.py:107 -#: dcim/tables/devices.py:1036 dcim/tables/devicetypes.py:92 -#: dcim/tables/modules.py:29 dcim/tables/modules.py:72 dcim/tables/power.py:39 -#: dcim/tables/power.py:96 dcim/tables/racks.py:84 dcim/tables/racks.py:145 -#: dcim/tables/racks.py:225 dcim/tables/sites.py:108 -#: extras/tables/tables.py:582 ipam/tables/asn.py:69 ipam/tables/fhrp.py:34 -#: ipam/tables/ip.py:136 ipam/tables/ip.py:275 ipam/tables/ip.py:329 -#: ipam/tables/ip.py:397 ipam/tables/services.py:24 ipam/tables/services.py:54 -#: ipam/tables/vlans.py:145 ipam/tables/vrfs.py:47 ipam/tables/vrfs.py:72 -#: templates/dcim/htmx/cable_edit.html:89 templates/generic/bulk_edit.html:86 -#: templates/inc/panels/comments.html:5 tenancy/tables/contacts.py:68 -#: tenancy/tables/tenants.py:46 utilities/forms/fields/fields.py:29 -#: virtualization/tables/clusters.py:91 -#: virtualization/tables/virtualmachines.py:82 vpn/tables/crypto.py:37 -#: vpn/tables/crypto.py:74 vpn/tables/crypto.py:109 vpn/tables/crypto.py:140 -#: vpn/tables/crypto.py:173 vpn/tables/l2vpn.py:37 vpn/tables/tunnels.py:61 -#: wireless/tables/wirelesslan.py:27 wireless/tables/wirelesslan.py:58 +#: netbox/circuits/tables/circuits.py: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:72 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/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/vpn/tables/crypto.py:37 netbox/vpn/tables/crypto.py:74 +#: netbox/vpn/tables/crypto.py:109 netbox/vpn/tables/crypto.py:140 +#: netbox/vpn/tables/crypto.py:173 netbox/vpn/tables/l2vpn.py:37 +#: netbox/vpn/tables/tunnels.py:61 netbox/wireless/tables/wirelesslan.py:27 +#: netbox/wireless/tables/wirelesslan.py:58 msgid "Comments" msgstr "Comentários" -#: circuits/tables/circuits.py:86 templates/tenancy/contact.html:84 -#: tenancy/tables/contacts.py:73 +#: netbox/circuits/tables/circuits.py:86 +#: netbox/templates/tenancy/contact.html:84 +#: netbox/tenancy/tables/contacts.py:73 msgid "Assignments" msgstr "Atribuições" -#: circuits/tables/providers.py:23 +#: netbox/circuits/tables/providers.py:23 msgid "Accounts" msgstr "Contas" -#: circuits/tables/providers.py:29 +#: netbox/circuits/tables/providers.py:29 msgid "Account Count" msgstr "Quantidade de contas" -#: circuits/tables/providers.py:39 dcim/tables/sites.py:100 +#: netbox/circuits/tables/providers.py:39 netbox/dcim/tables/sites.py:100 msgid "ASN Count" msgstr "Quantidade de ASNs" -#: circuits/views.py:331 +#: netbox/circuits/views.py:331 #, python-brace-format msgid "No terminations have been defined for circuit {circuit}." msgstr "Nenhuma terminação foi definida para o circuito {circuit}." -#: circuits/views.py:380 +#: netbox/circuits/views.py:380 #, python-brace-format msgid "Swapped terminations for circuit {circuit}." msgstr "Terminações trocadas para o circuito {circuit}." -#: core/api/views.py:39 +#: netbox/core/api/views.py:39 msgid "This user does not have permission to synchronize this data source." msgstr "Este usuário não tem permissão para sincronizar esta origem de dados." -#: core/choices.py:18 +#: netbox/core/choices.py:18 msgid "New" msgstr "Novo" -#: core/choices.py:19 core/constants.py:18 core/tables/tasks.py:15 -#: templates/core/rq_task.html:77 +#: netbox/core/choices.py:19 netbox/core/constants.py:18 +#: netbox/core/tables/tasks.py:15 netbox/templates/core/rq_task.html:77 msgid "Queued" msgstr "Em Fila" -#: core/choices.py:20 +#: netbox/core/choices.py:20 msgid "Syncing" msgstr "Sincronizando" -#: core/choices.py:21 core/choices.py:57 core/tables/jobs.py:41 -#: templates/core/job.html:86 +#: netbox/core/choices.py:21 netbox/core/choices.py:57 +#: netbox/core/tables/jobs.py:41 netbox/templates/core/job.html:86 msgid "Completed" msgstr "Concluído" -#: core/choices.py:22 core/choices.py:59 core/constants.py:20 -#: core/tables/tasks.py:34 dcim/choices.py:187 dcim/choices.py:239 -#: dcim/choices.py:1607 virtualization/choices.py:47 +#: netbox/core/choices.py:22 netbox/core/choices.py:59 +#: netbox/core/constants.py:20 netbox/core/tables/tasks.py:34 +#: netbox/dcim/choices.py:187 netbox/dcim/choices.py:239 +#: netbox/dcim/choices.py:1609 netbox/virtualization/choices.py:47 msgid "Failed" msgstr "Falhou" -#: core/choices.py:35 netbox/navigation/menu.py:335 -#: netbox/navigation/menu.py:339 templates/extras/script/base.html:14 -#: templates/extras/script_list.html:7 templates/extras/script_list.html:12 -#: templates/extras/script_result.html:17 +#: netbox/core/choices.py:35 netbox/netbox/navigation/menu.py:335 +#: netbox/netbox/navigation/menu.py:339 +#: netbox/templates/extras/script/base.html:14 +#: netbox/templates/extras/script_list.html:7 +#: netbox/templates/extras/script_list.html:12 +#: netbox/templates/extras/script_result.html:17 msgid "Scripts" msgstr "Scripts" -#: core/choices.py:36 templates/extras/report/base.html:13 +#: netbox/core/choices.py:36 netbox/templates/extras/report/base.html:13 msgid "Reports" msgstr "Relatórios" -#: core/choices.py:54 +#: netbox/core/choices.py:54 msgid "Pending" msgstr "Pendente" -#: core/choices.py:55 core/constants.py:23 core/tables/jobs.py:32 -#: core/tables/tasks.py:38 templates/core/job.html:73 +#: netbox/core/choices.py:55 netbox/core/constants.py:23 +#: netbox/core/tables/jobs.py:32 netbox/core/tables/tasks.py:38 +#: netbox/templates/core/job.html:73 msgid "Scheduled" msgstr "Agendado" -#: core/choices.py:56 +#: netbox/core/choices.py:56 msgid "Running" msgstr "Em Execução" -#: core/choices.py:58 +#: netbox/core/choices.py:58 msgid "Errored" msgstr "Falhou" -#: core/choices.py:87 core/tables/plugins.py:63 -#: templates/generic/object.html:61 +#: netbox/core/choices.py:87 netbox/core/tables/plugins.py:63 +#: netbox/templates/generic/object.html:61 msgid "Updated" msgstr "Atualizado" -#: core/choices.py:88 +#: netbox/core/choices.py:88 msgid "Deleted" msgstr "Excluído" -#: core/constants.py:19 core/tables/tasks.py:30 +#: netbox/core/constants.py:19 netbox/core/tables/tasks.py:30 msgid "Finished" msgstr "Concluído" -#: core/constants.py:21 core/tables/jobs.py:38 templates/core/job.html:82 -#: templates/extras/htmx/script_result.html:8 +#: netbox/core/constants.py:21 netbox/core/tables/jobs.py:38 +#: netbox/templates/core/job.html:82 +#: netbox/templates/extras/htmx/script_result.html:8 msgid "Started" msgstr "Iniciado" -#: core/constants.py:22 core/tables/tasks.py:26 +#: netbox/core/constants.py:22 netbox/core/tables/tasks.py:26 msgid "Deferred" msgstr "Adiado" -#: core/constants.py:24 +#: netbox/core/constants.py:24 msgid "Stopped" msgstr "Parado" -#: core/constants.py:25 +#: netbox/core/constants.py:25 msgid "Cancelled" msgstr "Cancelado" -#: core/data_backends.py:32 core/tables/plugins.py:51 -#: templates/core/plugin.html:88 templates/dcim/interface.html:216 +#: netbox/core/data_backends.py:32 netbox/core/tables/plugins.py:51 +#: netbox/templates/core/plugin.html:88 +#: netbox/templates/dcim/interface.html:216 msgid "Local" msgstr "Local" -#: core/data_backends.py:50 core/tables/change_logging.py:20 -#: templates/account/profile.html:15 templates/users/user.html:17 -#: users/tables.py:31 +#: netbox/core/data_backends.py:50 netbox/core/tables/change_logging.py:20 +#: netbox/templates/account/profile.html:15 +#: netbox/templates/users/user.html:17 netbox/users/tables.py:31 msgid "Username" msgstr "Nome de Usuário" -#: core/data_backends.py:52 core/data_backends.py:58 +#: netbox/core/data_backends.py:52 netbox/core/data_backends.py:58 msgid "Only used for cloning with HTTP(S)" msgstr "Usado apenas para clonagem com HTTP(S)" -#: core/data_backends.py:56 templates/account/base.html:23 -#: templates/account/password.html:12 users/forms/model_forms.py:170 +#: netbox/core/data_backends.py:56 netbox/templates/account/base.html:23 +#: netbox/templates/account/password.html:12 +#: netbox/users/forms/model_forms.py:170 msgid "Password" msgstr "Senha" -#: core/data_backends.py:62 +#: netbox/core/data_backends.py:62 msgid "Branch" msgstr "Filial" -#: core/data_backends.py:120 +#: netbox/core/data_backends.py:120 #, python-brace-format msgid "Fetching remote data failed ({name}): {error}" msgstr "Falha na obtenção de dados remotos ({name}): {error}" -#: core/data_backends.py:133 +#: netbox/core/data_backends.py:133 msgid "AWS access key ID" msgstr "ID da chave de acesso da AWS" -#: core/data_backends.py:137 +#: netbox/core/data_backends.py:137 msgid "AWS secret access key" msgstr "Chave de acesso secreta da AWS" -#: core/events.py:27 +#: netbox/core/events.py:27 msgid "Object created" msgstr "Objeto criado" -#: core/events.py:28 +#: netbox/core/events.py:28 msgid "Object updated" msgstr "Objeto atualizado" -#: core/events.py:29 +#: netbox/core/events.py:29 msgid "Object deleted" msgstr "Objeto excluído" -#: core/events.py:30 +#: netbox/core/events.py:30 msgid "Job started" msgstr "Tarefa iniciada" -#: core/events.py:31 +#: netbox/core/events.py:31 msgid "Job completed" msgstr "Tarefa completada" -#: core/events.py:32 +#: netbox/core/events.py:32 msgid "Job failed" msgstr "Tarefa com falha" -#: core/events.py:33 +#: netbox/core/events.py:33 msgid "Job errored" msgstr "Tarefa com erro" -#: core/filtersets.py:53 extras/filtersets.py:250 extras/filtersets.py:633 -#: extras/filtersets.py:661 +#: netbox/core/filtersets.py:53 netbox/extras/filtersets.py:250 +#: netbox/extras/filtersets.py:633 netbox/extras/filtersets.py:661 msgid "Data source (ID)" msgstr "Origem de dados (ID)" -#: core/filtersets.py:59 +#: netbox/core/filtersets.py:59 msgid "Data source (name)" msgstr "Origem de dados (nome)" -#: core/filtersets.py:145 dcim/filtersets.py:501 extras/filtersets.py:287 -#: extras/filtersets.py:331 extras/filtersets.py:353 extras/filtersets.py:413 -#: users/filtersets.py:28 +#: netbox/core/filtersets.py:145 netbox/dcim/filtersets.py:501 +#: 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 msgid "User (ID)" msgstr "Usuário (ID)" -#: core/filtersets.py:151 +#: netbox/core/filtersets.py:151 msgid "User name" msgstr "Nome de usuário" -#: core/forms/bulk_edit.py:25 core/forms/filtersets.py:43 -#: core/tables/data.py:26 dcim/forms/bulk_edit.py:1122 -#: dcim/forms/bulk_edit.py:1400 dcim/forms/filtersets.py:1370 -#: dcim/tables/devices.py:553 dcim/tables/devicetypes.py:224 -#: extras/forms/bulk_edit.py:123 extras/forms/bulk_edit.py:187 -#: extras/forms/bulk_edit.py:246 extras/forms/filtersets.py:142 -#: extras/forms/filtersets.py:229 extras/forms/filtersets.py:294 -#: extras/tables/tables.py:162 extras/tables/tables.py:253 -#: extras/tables/tables.py:415 netbox/preferences.py:22 -#: templates/core/datasource.html:42 templates/dcim/interface.html:61 -#: templates/extras/customlink.html:17 templates/extras/eventrule.html:17 -#: templates/extras/savedfilter.html:25 -#: templates/users/objectpermission.html:25 -#: templates/virtualization/vminterface.html:29 users/forms/bulk_edit.py:89 -#: users/forms/filtersets.py:70 users/tables.py:83 -#: virtualization/forms/bulk_edit.py:217 -#: virtualization/forms/filtersets.py:215 +#: 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/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/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 +#: netbox/templates/dcim/interface.html:61 +#: netbox/templates/extras/customlink.html:17 +#: netbox/templates/extras/eventrule.html:17 +#: netbox/templates/extras/savedfilter.html:25 +#: netbox/templates/users/objectpermission.html:25 +#: netbox/templates/virtualization/vminterface.html:29 +#: netbox/users/forms/bulk_edit.py:89 netbox/users/forms/filtersets.py:70 +#: netbox/users/tables.py:83 netbox/virtualization/forms/bulk_edit.py:217 +#: netbox/virtualization/forms/filtersets.py:215 msgid "Enabled" msgstr "Habilitado" -#: core/forms/bulk_edit.py:34 extras/forms/model_forms.py:285 -#: templates/extras/savedfilter.html:52 vpn/forms/filtersets.py:97 -#: vpn/forms/filtersets.py:127 vpn/forms/filtersets.py:151 -#: vpn/forms/filtersets.py:170 vpn/forms/model_forms.py:301 -#: vpn/forms/model_forms.py:321 vpn/forms/model_forms.py:337 -#: vpn/forms/model_forms.py:357 vpn/forms/model_forms.py:380 +#: netbox/core/forms/bulk_edit.py:34 netbox/extras/forms/model_forms.py:285 +#: 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 msgid "Parameters" msgstr "Parâmetros" -#: core/forms/bulk_edit.py:38 templates/core/datasource.html:68 +#: netbox/core/forms/bulk_edit.py:38 netbox/templates/core/datasource.html:68 msgid "Ignore rules" msgstr "Ignorar regras" -#: core/forms/filtersets.py:30 core/forms/model_forms.py:97 -#: extras/forms/model_forms.py:248 extras/forms/model_forms.py:578 -#: extras/forms/model_forms.py:632 extras/tables/tables.py:191 -#: extras/tables/tables.py:483 extras/tables/tables.py:518 -#: templates/core/datasource.html:31 -#: templates/dcim/device/render_config.html:18 -#: templates/extras/configcontext.html:29 -#: templates/extras/configtemplate.html:21 -#: templates/extras/exporttemplate.html:35 -#: templates/virtualization/virtualmachine/render_config.html:18 +#: netbox/core/forms/filtersets.py: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/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 msgid "Data Source" msgstr "Origem de dados" -#: core/forms/filtersets.py:55 core/forms/mixins.py:21 +#: netbox/core/forms/filtersets.py:55 netbox/core/forms/mixins.py:21 msgid "File" msgstr "Arquivo" -#: core/forms/filtersets.py:60 core/forms/mixins.py:16 -#: extras/forms/filtersets.py:170 extras/forms/filtersets.py:328 -#: extras/forms/filtersets.py:413 +#: 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 msgid "Data source" msgstr "Origem de dados" -#: core/forms/filtersets.py:70 extras/forms/filtersets.py:440 +#: netbox/core/forms/filtersets.py:70 netbox/extras/forms/filtersets.py:440 msgid "Creation" msgstr "Criação" -#: core/forms/filtersets.py:74 core/forms/filtersets.py:160 -#: extras/forms/filtersets.py:461 extras/tables/tables.py:220 -#: extras/tables/tables.py:294 extras/tables/tables.py:326 -#: extras/tables/tables.py:571 templates/core/job.html:38 -#: templates/core/objectchange.html:52 tenancy/tables/contacts.py:90 -#: vpn/tables/l2vpn.py:59 +#: 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/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 +#: netbox/tenancy/tables/contacts.py:90 netbox/vpn/tables/l2vpn.py:59 msgid "Object Type" msgstr "Tipo de Objeto" -#: core/forms/filtersets.py:84 +#: netbox/core/forms/filtersets.py:84 msgid "Created after" msgstr "Criado após" -#: core/forms/filtersets.py:89 +#: netbox/core/forms/filtersets.py:89 msgid "Created before" msgstr "Criado antes" -#: core/forms/filtersets.py:94 +#: netbox/core/forms/filtersets.py:94 msgid "Scheduled after" msgstr "Programado após" -#: core/forms/filtersets.py:99 +#: netbox/core/forms/filtersets.py:99 msgid "Scheduled before" msgstr "Programado antes" -#: core/forms/filtersets.py:104 +#: netbox/core/forms/filtersets.py:104 msgid "Started after" msgstr "Iniciado após" -#: core/forms/filtersets.py:109 +#: netbox/core/forms/filtersets.py:109 msgid "Started before" msgstr "Iniciado antes" -#: core/forms/filtersets.py:114 +#: netbox/core/forms/filtersets.py:114 msgid "Completed after" msgstr "Concluído após" -#: core/forms/filtersets.py:119 +#: netbox/core/forms/filtersets.py:119 msgid "Completed before" msgstr "Concluído antes" -#: core/forms/filtersets.py:126 core/forms/filtersets.py:155 -#: dcim/forms/bulk_edit.py:456 dcim/forms/filtersets.py:418 -#: dcim/forms/filtersets.py:462 dcim/forms/model_forms.py:316 -#: extras/forms/filtersets.py:456 extras/forms/filtersets.py:475 -#: extras/tables/tables.py:302 extras/tables/tables.py:342 -#: templates/core/objectchange.html:36 templates/dcim/rackreservation.html:58 -#: templates/extras/savedfilter.html:21 templates/inc/user_menu.html:33 -#: templates/users/token.html:21 templates/users/user.html:6 -#: templates/users/user.html:14 users/filtersets.py:107 -#: users/filtersets.py:174 users/forms/filtersets.py:84 -#: users/forms/filtersets.py:125 users/forms/model_forms.py:155 -#: users/forms/model_forms.py:192 users/tables.py:19 +#: 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/extras/tables/tables.py:302 netbox/extras/tables/tables.py:342 +#: netbox/templates/core/objectchange.html:36 +#: netbox/templates/dcim/rackreservation.html:58 +#: netbox/templates/extras/savedfilter.html:21 +#: netbox/templates/inc/user_menu.html:33 netbox/templates/users/token.html:21 +#: netbox/templates/users/user.html:6 netbox/templates/users/user.html:14 +#: netbox/users/filtersets.py:107 netbox/users/filtersets.py:174 +#: netbox/users/forms/filtersets.py:84 netbox/users/forms/filtersets.py:125 +#: netbox/users/forms/model_forms.py:155 netbox/users/forms/model_forms.py:192 +#: netbox/users/tables.py:19 msgid "User" msgstr "Usuário" -#: core/forms/filtersets.py:134 core/tables/change_logging.py:15 -#: extras/tables/tables.py:609 extras/tables/tables.py:646 -#: templates/core/objectchange.html:32 +#: netbox/core/forms/filtersets.py:134 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 "Tempo" -#: core/forms/filtersets.py:139 extras/forms/filtersets.py:445 +#: netbox/core/forms/filtersets.py:139 netbox/extras/forms/filtersets.py:445 msgid "After" msgstr "Depois" -#: core/forms/filtersets.py:144 extras/forms/filtersets.py:450 +#: netbox/core/forms/filtersets.py:144 netbox/extras/forms/filtersets.py:450 msgid "Before" msgstr "Antes" -#: core/forms/filtersets.py:148 core/tables/change_logging.py:29 -#: extras/forms/model_forms.py:396 templates/core/objectchange.html:46 -#: templates/extras/eventrule.html:71 +#: netbox/core/forms/filtersets.py:148 netbox/core/tables/change_logging.py:29 +#: netbox/extras/forms/model_forms.py:396 +#: netbox/templates/core/objectchange.html:46 +#: netbox/templates/extras/eventrule.html:71 msgid "Action" msgstr "Ação" -#: core/forms/model_forms.py:54 core/tables/data.py:46 -#: templates/core/datafile.html:27 templates/extras/report/base.html:33 -#: templates/extras/script/base.html:32 +#: netbox/core/forms/model_forms.py:54 netbox/core/tables/data.py:46 +#: netbox/templates/core/datafile.html:27 +#: netbox/templates/extras/report/base.html:33 +#: netbox/templates/extras/script/base.html:32 msgid "Source" msgstr "Origem" -#: core/forms/model_forms.py:58 +#: netbox/core/forms/model_forms.py:58 msgid "Backend Parameters" msgstr "Parâmetros de Backend" -#: core/forms/model_forms.py:96 +#: netbox/core/forms/model_forms.py:96 msgid "File Upload" msgstr "Upload de Arquivo" -#: core/forms/model_forms.py:108 +#: netbox/core/forms/model_forms.py:108 msgid "Cannot upload a file and sync from an existing file" msgstr "" "Não é possível carregar um arquivo e sincronizar a partir de um arquivo " "existente" -#: core/forms/model_forms.py:110 +#: netbox/core/forms/model_forms.py:110 msgid "Must upload a file or select a data file to sync" msgstr "" "É necessário carregar um arquivo ou selecionar um arquivo de dados para " "sincronizar" -#: core/forms/model_forms.py:153 templates/dcim/rack_elevation_list.html:6 +#: netbox/core/forms/model_forms.py:153 +#: netbox/templates/dcim/rack_elevation_list.html:6 msgid "Rack Elevations" msgstr "Elevações de Rack" -#: core/forms/model_forms.py:157 dcim/choices.py:1518 -#: dcim/forms/bulk_edit.py:969 dcim/forms/bulk_edit.py:1357 -#: dcim/forms/bulk_edit.py:1375 dcim/tables/racks.py:158 -#: netbox/navigation/menu.py:291 netbox/navigation/menu.py:295 +#: 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 msgid "Power" msgstr "Alimentação Elétrica" -#: core/forms/model_forms.py:159 netbox/navigation/menu.py:154 -#: templates/core/inc/config_data.html:37 +#: netbox/core/forms/model_forms.py:159 netbox/netbox/navigation/menu.py:154 +#: netbox/templates/core/inc/config_data.html:37 msgid "IPAM" msgstr "IPAM" -#: core/forms/model_forms.py:160 netbox/navigation/menu.py:230 -#: templates/core/inc/config_data.html:50 vpn/forms/bulk_edit.py:77 -#: vpn/forms/filtersets.py:43 vpn/forms/model_forms.py:61 -#: vpn/forms/model_forms.py:146 +#: netbox/core/forms/model_forms.py:160 netbox/netbox/navigation/menu.py:230 +#: netbox/templates/core/inc/config_data.html:50 +#: netbox/vpn/forms/bulk_edit.py:77 netbox/vpn/forms/filtersets.py:43 +#: netbox/vpn/forms/model_forms.py:61 netbox/vpn/forms/model_forms.py:146 msgid "Security" msgstr "Segurança" -#: core/forms/model_forms.py:161 templates/core/inc/config_data.html:59 +#: netbox/core/forms/model_forms.py:161 +#: netbox/templates/core/inc/config_data.html:59 msgid "Banners" msgstr "Banners" -#: core/forms/model_forms.py:162 templates/core/inc/config_data.html:80 +#: netbox/core/forms/model_forms.py:162 +#: netbox/templates/core/inc/config_data.html:80 msgid "Pagination" msgstr "Paginação" -#: core/forms/model_forms.py:163 extras/forms/bulk_edit.py:92 -#: extras/forms/filtersets.py:47 extras/forms/model_forms.py:116 -#: extras/forms/model_forms.py:129 templates/core/inc/config_data.html:93 +#: 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/model_forms.py:129 +#: netbox/templates/core/inc/config_data.html:93 msgid "Validation" msgstr "Validação" -#: core/forms/model_forms.py:164 templates/account/preferences.html:6 +#: netbox/core/forms/model_forms.py:164 +#: netbox/templates/account/preferences.html:6 msgid "User Preferences" msgstr "Preferências de Usuário" -#: core/forms/model_forms.py:167 dcim/forms/filtersets.py:732 -#: templates/core/inc/config_data.html:127 users/forms/model_forms.py:64 +#: netbox/core/forms/model_forms.py:167 netbox/dcim/forms/filtersets.py:732 +#: netbox/templates/core/inc/config_data.html:127 +#: netbox/users/forms/model_forms.py:64 msgid "Miscellaneous" msgstr "Diversos" -#: core/forms/model_forms.py:169 +#: netbox/core/forms/model_forms.py:169 msgid "Config Revision" msgstr "Revisão da Configuração" -#: core/forms/model_forms.py:208 +#: netbox/core/forms/model_forms.py:208 msgid "This parameter has been defined statically and cannot be modified." msgstr "Este parâmetro foi definido estaticamente e não pode ser modificado." -#: core/forms/model_forms.py:216 +#: netbox/core/forms/model_forms.py:216 #, python-brace-format msgid "Current value: {value}" msgstr "Valor atual: {value}" -#: core/forms/model_forms.py:218 +#: netbox/core/forms/model_forms.py:218 msgid " (default)" msgstr " (padrão)" -#: core/models/change_logging.py:29 +#: netbox/core/models/change_logging.py:29 msgid "time" msgstr "horas" -#: core/models/change_logging.py:42 +#: netbox/core/models/change_logging.py:42 msgid "user name" msgstr "nome de usuário" -#: core/models/change_logging.py:47 +#: netbox/core/models/change_logging.py:47 msgid "request ID" msgstr "ID da solicitação" -#: core/models/change_logging.py:52 extras/models/staging.py:69 +#: netbox/core/models/change_logging.py:52 netbox/extras/models/staging.py:69 msgid "action" msgstr "ação" -#: core/models/change_logging.py:86 +#: netbox/core/models/change_logging.py:86 msgid "pre-change data" msgstr "dados pré-alteração" -#: core/models/change_logging.py:92 +#: netbox/core/models/change_logging.py:92 msgid "post-change data" msgstr "dados pós-alteração" -#: core/models/change_logging.py:106 +#: netbox/core/models/change_logging.py:106 msgid "object change" msgstr "mudança no objeto" -#: core/models/change_logging.py:107 +#: netbox/core/models/change_logging.py:107 msgid "object changes" msgstr "mudanças no objeto" -#: core/models/change_logging.py:123 +#: netbox/core/models/change_logging.py:123 #, python-brace-format msgid "Change logging is not supported for this object type ({type})." msgstr "Changelog não é suportado para este tipo de objeto ({type})." -#: core/models/config.py:18 core/models/data.py:266 core/models/files.py:27 -#: core/models/jobs.py:49 extras/models/models.py:730 -#: extras/models/notifications.py:39 extras/models/notifications.py:186 -#: netbox/models/features.py:53 users/models/tokens.py:32 +#: netbox/core/models/config.py:18 netbox/core/models/data.py:266 +#: 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/notifications.py:186 +#: netbox/netbox/models/features.py:53 netbox/users/models/tokens.py:32 msgid "created" msgstr "criado" -#: core/models/config.py:22 +#: netbox/core/models/config.py:22 msgid "comment" msgstr "comentário" -#: core/models/config.py:29 +#: netbox/core/models/config.py:29 msgid "configuration data" msgstr "dados de configuração" -#: core/models/config.py:36 +#: netbox/core/models/config.py:36 msgid "config revision" msgstr "revisão da configuração" -#: core/models/config.py:37 +#: netbox/core/models/config.py:37 msgid "config revisions" msgstr "revisões da configuração" -#: core/models/config.py:41 +#: netbox/core/models/config.py:41 msgid "Default configuration" msgstr "Configuração padrão" -#: core/models/config.py:43 +#: netbox/core/models/config.py:43 msgid "Current configuration" msgstr "Configuração atual" -#: core/models/config.py:44 +#: netbox/core/models/config.py:44 #, python-brace-format msgid "Config revision #{id}" msgstr "Revisão da configuração #{id}" -#: core/models/data.py:44 dcim/models/cables.py:43 -#: dcim/models/device_component_templates.py:203 -#: dcim/models/device_component_templates.py:237 -#: dcim/models/device_component_templates.py:272 -#: dcim/models/device_component_templates.py:334 -#: dcim/models/device_component_templates.py:413 -#: dcim/models/device_component_templates.py:512 -#: dcim/models/device_component_templates.py:612 -#: dcim/models/device_components.py:283 dcim/models/device_components.py:312 -#: dcim/models/device_components.py:345 dcim/models/device_components.py:463 -#: dcim/models/device_components.py:605 dcim/models/device_components.py:970 -#: dcim/models/device_components.py:1044 dcim/models/power.py:102 -#: extras/models/customfields.py:78 extras/models/search.py:41 -#: virtualization/models/clusters.py:61 vpn/models/l2vpn.py:32 +#: 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/extras/models/search.py:41 +#: netbox/virtualization/models/clusters.py:61 netbox/vpn/models/l2vpn.py:32 msgid "type" msgstr "tipo" -#: core/models/data.py:49 extras/choices.py:37 extras/models/models.py:164 -#: extras/tables/tables.py:656 templates/core/datasource.html:58 -#: templates/core/plugin.html:66 +#: netbox/core/models/data.py:49 netbox/extras/choices.py:37 +#: netbox/extras/models/models.py:164 netbox/extras/tables/tables.py:656 +#: netbox/templates/core/datasource.html:58 +#: netbox/templates/core/plugin.html:66 msgid "URL" msgstr "URL" -#: core/models/data.py:59 dcim/models/device_component_templates.py:418 -#: dcim/models/device_components.py:512 extras/models/models.py:70 -#: extras/models/models.py:301 extras/models/models.py:526 -#: users/models/permissions.py:29 +#: netbox/core/models/data.py:59 +#: netbox/dcim/models/device_component_templates.py:418 +#: netbox/dcim/models/device_components.py:512 +#: 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" msgstr "ativado" -#: core/models/data.py:63 +#: netbox/core/models/data.py:63 msgid "ignore rules" msgstr "ignorar regras" -#: core/models/data.py:65 +#: netbox/core/models/data.py:65 msgid "Patterns (one per line) matching files to ignore when syncing" msgstr "" "Padrões (um por linha) de correspondencia de arquivos a serem ignorados ao " "sincronizar" -#: core/models/data.py:68 extras/models/models.py:534 +#: netbox/core/models/data.py:68 netbox/extras/models/models.py:534 msgid "parameters" msgstr "parâmetros" -#: core/models/data.py:73 +#: netbox/core/models/data.py:73 msgid "last synced" msgstr "última sincronização" -#: core/models/data.py:81 +#: netbox/core/models/data.py:81 msgid "data source" msgstr "origem de dados" -#: core/models/data.py:82 +#: netbox/core/models/data.py:82 msgid "data sources" msgstr "origens de dados" -#: core/models/data.py:122 +#: netbox/core/models/data.py:122 #, python-brace-format msgid "Unknown backend type: {type}" msgstr "Tipo de backend desconhecido: {type}" -#: core/models/data.py:164 +#: netbox/core/models/data.py:164 msgid "Cannot initiate sync; syncing already in progress." msgstr "" "Não é possível iniciar a sincronização; a sincronização já está em " "andamento." -#: core/models/data.py:177 +#: netbox/core/models/data.py:177 msgid "" "There was an error initializing the backend. A dependency needs to be " "installed: " @@ -1901,1222 +2168,1284 @@ msgstr "" "Houve um erro ao inicializar o backend. Uma dependência precisa ser " "instalada: " -#: core/models/data.py:270 core/models/files.py:31 -#: netbox/models/features.py:59 +#: netbox/core/models/data.py:270 netbox/core/models/files.py:31 +#: netbox/netbox/models/features.py:59 msgid "last updated" msgstr "última atualização" -#: core/models/data.py:280 dcim/models/cables.py:444 +#: netbox/core/models/data.py:280 netbox/dcim/models/cables.py:444 msgid "path" msgstr "caminho" -#: core/models/data.py:283 +#: netbox/core/models/data.py:283 msgid "File path relative to the data source's root" msgstr "Caminho de arquivo relativo à raiz da origem de dados" -#: core/models/data.py:287 ipam/models/ip.py:503 +#: netbox/core/models/data.py:287 netbox/ipam/models/ip.py:503 msgid "size" msgstr "tamanho" -#: core/models/data.py:290 +#: netbox/core/models/data.py:290 msgid "hash" msgstr "hash" -#: core/models/data.py:294 +#: netbox/core/models/data.py:294 msgid "Length must be 64 hexadecimal characters." msgstr "O comprimento deve ser de 64 caracteres hexadecimais." -#: core/models/data.py:296 +#: netbox/core/models/data.py:296 msgid "SHA256 hash of the file data" msgstr "Hash SHA256 do arquivo de dados" -#: core/models/data.py:313 +#: netbox/core/models/data.py:313 msgid "data file" msgstr "arquivo de dados" -#: core/models/data.py:314 +#: netbox/core/models/data.py:314 msgid "data files" msgstr "arquivos de dados" -#: core/models/data.py:401 +#: netbox/core/models/data.py:401 msgid "auto sync record" msgstr "registro de sincronização automática" -#: core/models/data.py:402 +#: netbox/core/models/data.py:402 msgid "auto sync records" msgstr "registros de sincronização automática" -#: core/models/files.py:37 +#: netbox/core/models/files.py:37 msgid "file root" msgstr "raíz do arquivo" -#: core/models/files.py:42 +#: netbox/core/models/files.py:42 msgid "file path" msgstr "caminho do arquivo" -#: core/models/files.py:44 +#: netbox/core/models/files.py:44 msgid "File path relative to the designated root path" msgstr "Caminho do arquivo em relação ao caminho raíz designado" -#: core/models/files.py:61 +#: netbox/core/models/files.py:61 msgid "managed file" msgstr "arquivo gerenciado" -#: core/models/files.py:62 +#: netbox/core/models/files.py:62 msgid "managed files" msgstr "arquivos gerenciados" -#: core/models/jobs.py:53 +#: netbox/core/models/jobs.py:54 msgid "scheduled" msgstr "agendado" -#: core/models/jobs.py:58 +#: netbox/core/models/jobs.py:59 msgid "interval" msgstr "intervalo" -#: core/models/jobs.py:64 +#: netbox/core/models/jobs.py:65 msgid "Recurrence interval (in minutes)" msgstr "Intervalo de recorrência (em minutos)" -#: core/models/jobs.py:67 +#: netbox/core/models/jobs.py:68 msgid "started" msgstr "iniciado" -#: core/models/jobs.py:72 +#: netbox/core/models/jobs.py:73 msgid "completed" msgstr "concluído" -#: core/models/jobs.py:90 extras/models/models.py:101 -#: extras/models/staging.py:87 +#: netbox/core/models/jobs.py:91 netbox/extras/models/models.py:101 +#: netbox/extras/models/staging.py:87 msgid "data" msgstr "dados" -#: core/models/jobs.py:95 +#: netbox/core/models/jobs.py:96 msgid "error" msgstr "erro" -#: core/models/jobs.py:100 +#: netbox/core/models/jobs.py:101 msgid "job ID" msgstr "ID da tarefa" -#: core/models/jobs.py:111 +#: netbox/core/models/jobs.py:112 msgid "job" msgstr "tarefa" -#: core/models/jobs.py:112 +#: netbox/core/models/jobs.py:113 msgid "jobs" msgstr "tarefas" -#: core/models/jobs.py:135 +#: netbox/core/models/jobs.py:136 #, python-brace-format msgid "Jobs cannot be assigned to this object type ({type})." msgstr "Tarefas não podem ser atribuídas a este tipo de objeto ({type})." -#: core/models/jobs.py:185 +#: netbox/core/models/jobs.py:190 #, python-brace-format msgid "Invalid status for job termination. Choices are: {choices}" msgstr "Status inválido para encerramento da tarefa. As opções são: {choices}" -#: core/models/jobs.py:216 +#: netbox/core/models/jobs.py:221 msgid "" "enqueue() cannot be called with values for both schedule_at and immediate." msgstr "" "enqueue() não pode ser chamado com valores para ambos schedule_at e " "immediate." -#: core/signals.py:126 +#: netbox/core/signals.py:126 #, python-brace-format msgid "Deletion is prevented by a protection rule: {message}" msgstr "A exclusão é impedida por uma regra de proteção: {message}" -#: core/tables/change_logging.py:25 templates/account/profile.html:19 -#: templates/users/user.html:21 +#: netbox/core/tables/change_logging.py:25 +#: netbox/templates/account/profile.html:19 +#: netbox/templates/users/user.html:21 msgid "Full Name" msgstr "Nome Completo" -#: core/tables/change_logging.py:37 core/tables/jobs.py:21 -#: extras/choices.py:41 extras/tables/tables.py:279 -#: extras/tables/tables.py:297 extras/tables/tables.py:329 -#: extras/tables/tables.py:409 extras/tables/tables.py:470 -#: extras/tables/tables.py:576 extras/tables/tables.py:616 -#: extras/tables/tables.py:653 netbox/tables/tables.py:244 -#: templates/core/objectchange.html:58 templates/extras/eventrule.html:78 -#: templates/extras/journalentry.html:18 tenancy/tables/contacts.py:93 -#: vpn/tables/l2vpn.py:64 +#: netbox/core/tables/change_logging.py:37 netbox/core/tables/jobs.py:21 +#: netbox/extras/choices.py:41 netbox/extras/tables/tables.py:279 +#: 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/templates/core/objectchange.html:58 +#: netbox/templates/extras/eventrule.html:78 +#: netbox/templates/extras/journalentry.html:18 +#: netbox/tenancy/tables/contacts.py:93 netbox/vpn/tables/l2vpn.py:64 msgid "Object" msgstr "Objeto" -#: core/tables/change_logging.py:42 templates/core/objectchange.html:68 +#: netbox/core/tables/change_logging.py:42 +#: netbox/templates/core/objectchange.html:68 msgid "Request ID" msgstr "ID da Solicitação" -#: core/tables/config.py:21 users/forms/filtersets.py:44 users/tables.py:39 +#: netbox/core/tables/config.py:21 netbox/users/forms/filtersets.py:44 +#: netbox/users/tables.py:39 msgid "Is Active" msgstr "Está Ativo" -#: core/tables/data.py:50 templates/core/datafile.html:31 +#: netbox/core/tables/data.py:50 netbox/templates/core/datafile.html:31 msgid "Path" msgstr "Caminho" -#: core/tables/data.py:54 templates/extras/inc/result_pending.html:7 +#: netbox/core/tables/data.py:54 +#: netbox/templates/extras/inc/result_pending.html:7 msgid "Last updated" msgstr "Última atualização" -#: core/tables/jobs.py:10 core/tables/tasks.py:76 -#: dcim/tables/devicetypes.py:164 extras/tables/tables.py:216 -#: extras/tables/tables.py:460 netbox/tables/tables.py:189 -#: templates/dcim/virtualchassis_edit.html:52 utilities/forms/forms.py:73 -#: wireless/tables/wirelesslink.py:17 +#: 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/templates/dcim/virtualchassis_edit.html:52 +#: netbox/utilities/forms/forms.py:73 +#: netbox/wireless/tables/wirelesslink.py:17 msgid "ID" msgstr "ID" -#: core/tables/jobs.py:35 +#: netbox/core/tables/jobs.py:35 msgid "Interval" msgstr "Intervalo" -#: core/tables/plugins.py:14 templates/vpn/ipsecprofile.html:44 -#: vpn/forms/bulk_edit.py:141 vpn/forms/bulk_import.py:172 -#: vpn/tables/crypto.py:61 +#: netbox/core/tables/plugins.py:14 netbox/templates/vpn/ipsecprofile.html:44 +#: netbox/vpn/forms/bulk_edit.py:141 netbox/vpn/forms/bulk_import.py:172 +#: netbox/vpn/tables/crypto.py:61 msgid "Version" msgstr "Versão" -#: core/tables/plugins.py:19 templates/core/datafile.html:38 +#: netbox/core/tables/plugins.py:19 netbox/templates/core/datafile.html:38 msgid "Last Updated" msgstr "Última Atualização" -#: core/tables/plugins.py:23 +#: netbox/core/tables/plugins.py:23 msgid "Minimum NetBox Version" msgstr "Versão Mínima do Netbox" -#: core/tables/plugins.py:27 +#: netbox/core/tables/plugins.py:27 msgid "Maximum NetBox Version" msgstr "Versão Máxima do Netbox" -#: core/tables/plugins.py:31 core/tables/plugins.py:74 +#: netbox/core/tables/plugins.py:31 netbox/core/tables/plugins.py:74 msgid "No plugin data found" msgstr "Nenhum dado do plugin encontrado" -#: core/tables/plugins.py:48 templates/core/plugin.html:62 +#: netbox/core/tables/plugins.py:48 netbox/templates/core/plugin.html:62 msgid "Author" msgstr "Autor" -#: core/tables/plugins.py:54 +#: netbox/core/tables/plugins.py:54 msgid "Installed" msgstr "Instalado" -#: core/tables/plugins.py:57 templates/core/plugin.html:84 +#: netbox/core/tables/plugins.py:57 netbox/templates/core/plugin.html:84 msgid "Certified" msgstr "Certificado" -#: core/tables/plugins.py:60 +#: netbox/core/tables/plugins.py:60 msgid "Published" msgstr "Publicado" -#: core/tables/plugins.py:66 +#: netbox/core/tables/plugins.py:66 msgid "Installed Version" msgstr "Versão Instalada" -#: core/tables/plugins.py:70 +#: netbox/core/tables/plugins.py:70 msgid "Latest Version" msgstr "Última Versão" -#: core/tables/tasks.py:18 +#: netbox/core/tables/tasks.py:18 msgid "Oldest Task" msgstr "Tarefa mais Antiga" -#: core/tables/tasks.py:42 templates/core/rq_worker_list.html:39 +#: netbox/core/tables/tasks.py:42 netbox/templates/core/rq_worker_list.html:39 msgid "Workers" msgstr "Agentes" -#: core/tables/tasks.py:46 vpn/tables/tunnels.py:88 +#: netbox/core/tables/tasks.py:46 netbox/vpn/tables/tunnels.py:88 msgid "Host" msgstr "Host" -#: core/tables/tasks.py:50 ipam/forms/filtersets.py:535 +#: netbox/core/tables/tasks.py:50 netbox/ipam/forms/filtersets.py:535 msgid "Port" msgstr "Porta" -#: core/tables/tasks.py:54 +#: netbox/core/tables/tasks.py:54 msgid "DB" msgstr "Banco de Dados" -#: core/tables/tasks.py:58 +#: netbox/core/tables/tasks.py:58 msgid "Scheduler PID" msgstr "Agendador PID" -#: core/tables/tasks.py:62 +#: netbox/core/tables/tasks.py:62 msgid "No queues found" msgstr "Nenhuma fila foi encontrada" -#: core/tables/tasks.py:82 +#: netbox/core/tables/tasks.py:82 msgid "Enqueued" msgstr "Enfileirado" -#: core/tables/tasks.py:85 +#: netbox/core/tables/tasks.py:85 msgid "Ended" msgstr "Finalizado" -#: core/tables/tasks.py:93 templates/core/rq_task.html:85 +#: netbox/core/tables/tasks.py:93 netbox/templates/core/rq_task.html:85 msgid "Callable" msgstr "Chamável" -#: core/tables/tasks.py:97 +#: netbox/core/tables/tasks.py:97 msgid "No tasks found" msgstr "Nenhuma tarefa encontrada" -#: core/tables/tasks.py:118 templates/core/rq_worker.html:47 +#: netbox/core/tables/tasks.py:118 netbox/templates/core/rq_worker.html:47 msgid "State" msgstr "Estado" -#: core/tables/tasks.py:121 templates/core/rq_worker.html:51 +#: netbox/core/tables/tasks.py:121 netbox/templates/core/rq_worker.html:51 msgid "Birth" msgstr "Começo" -#: core/tables/tasks.py:124 templates/core/rq_worker.html:59 +#: netbox/core/tables/tasks.py:124 netbox/templates/core/rq_worker.html:59 msgid "PID" msgstr "PID" -#: core/tables/tasks.py:128 +#: netbox/core/tables/tasks.py:128 msgid "No workers found" msgstr "Nenhum agente encontrado" -#: core/views.py:90 +#: netbox/core/views.py:90 #, python-brace-format msgid "Queued job #{id} to sync {datasource}" msgstr "Tarefa {id} enfileirada para sincronizar {datasource}" -#: core/views.py:319 +#: netbox/core/views.py:319 #, python-brace-format msgid "Restored configuration revision #{id}" msgstr "Revisão da configuração nº {id} restaurada" -#: core/views.py:412 core/views.py:455 core/views.py:531 +#: 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 "Tarefa {job_id} não encontrada" -#: core/views.py:463 +#: netbox/core/views.py:463 #, python-brace-format msgid "Job {id} has been deleted." msgstr "Tarefa {id} foi excluída." -#: core/views.py:465 +#: netbox/core/views.py:465 #, python-brace-format msgid "Error deleting job {id}: {error}" msgstr "Erro ao excluir a tarefa {id}: {error}" -#: core/views.py:478 core/views.py:496 +#: netbox/core/views.py:478 netbox/core/views.py:496 #, python-brace-format msgid "Job {id} not found." msgstr "Tarefa {id} não encontrada." -#: core/views.py:484 +#: netbox/core/views.py:484 #, python-brace-format msgid "Job {id} has been re-enqueued." msgstr "Tarefa {id} foi reenfileirada." -#: core/views.py:519 +#: netbox/core/views.py:519 #, python-brace-format msgid "Job {id} has been enqueued." msgstr "Tarefa {id} foi enfileirada." -#: core/views.py:538 +#: netbox/core/views.py:538 #, python-brace-format msgid "Job {id} has been stopped." msgstr "Tarefa {id} foi interrompida." -#: core/views.py:540 +#: netbox/core/views.py:540 #, python-brace-format msgid "Failed to stop job {id}" msgstr "Falha ao interromper a tarefa {id}" -#: core/views.py:678 +#: netbox/core/views.py:674 msgid "Plugins catalog could not be loaded" msgstr "Catálogo de plugins não pode ser carregado" -#: core/views.py:712 +#: netbox/core/views.py:708 #, python-brace-format msgid "Plugin {name} not found" msgstr "Plugin {name} não encontrado" -#: dcim/api/serializers_/devices.py:49 dcim/api/serializers_/devicetypes.py:25 +#: netbox/dcim/api/serializers_/devices.py:49 +#: netbox/dcim/api/serializers_/devicetypes.py:25 msgid "Position (U)" msgstr "Posição (U)" -#: dcim/api/serializers_/racks.py:112 templates/dcim/rack.html:28 +#: netbox/dcim/api/serializers_/racks.py:112 +#: netbox/templates/dcim/rack.html:28 msgid "Facility ID" msgstr "ID do Facility" -#: dcim/choices.py:21 virtualization/choices.py:21 +#: netbox/dcim/choices.py:21 netbox/virtualization/choices.py:21 msgid "Staging" msgstr "Em Preparação" -#: dcim/choices.py:23 dcim/choices.py:189 dcim/choices.py:240 -#: dcim/choices.py:1531 virtualization/choices.py:23 -#: virtualization/choices.py:48 +#: 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 msgid "Decommissioning" msgstr "Em Descomissionamento" -#: dcim/choices.py:24 +#: netbox/dcim/choices.py:24 msgid "Retired" msgstr "Desativado" -#: dcim/choices.py:65 +#: netbox/dcim/choices.py:65 msgid "2-post frame" msgstr "Rack aberto de 2 colunas" -#: dcim/choices.py:66 +#: netbox/dcim/choices.py:66 msgid "4-post frame" msgstr "Rack aberto de 4 colunas" -#: dcim/choices.py:67 +#: netbox/dcim/choices.py:67 msgid "4-post cabinet" msgstr "Rack fechado" -#: dcim/choices.py:68 +#: netbox/dcim/choices.py:68 msgid "Wall-mounted frame" msgstr "Bracket de parede" -#: dcim/choices.py:69 +#: netbox/dcim/choices.py:69 msgid "Wall-mounted frame (vertical)" msgstr "Bracket de parede (vertical)" -#: dcim/choices.py:70 +#: netbox/dcim/choices.py:70 msgid "Wall-mounted cabinet" msgstr "Rack de parede" -#: dcim/choices.py:71 +#: netbox/dcim/choices.py:71 msgid "Wall-mounted cabinet (vertical)" msgstr "Rack de parede (vertical)" -#: dcim/choices.py:83 dcim/choices.py:84 dcim/choices.py:85 dcim/choices.py:86 +#: netbox/dcim/choices.py:83 netbox/dcim/choices.py:84 +#: netbox/dcim/choices.py:85 netbox/dcim/choices.py:86 #, python-brace-format msgid "{n} inches" msgstr "{n} polegadas" -#: dcim/choices.py:100 ipam/choices.py:32 ipam/choices.py:50 -#: ipam/choices.py:70 ipam/choices.py:155 wireless/choices.py:26 +#: netbox/dcim/choices.py:100 netbox/ipam/choices.py:32 +#: netbox/ipam/choices.py:50 netbox/ipam/choices.py:70 +#: netbox/ipam/choices.py:155 netbox/wireless/choices.py:26 msgid "Reserved" msgstr "Reservado" -#: dcim/choices.py:101 templates/dcim/device.html:259 +#: netbox/dcim/choices.py:101 netbox/templates/dcim/device.html:259 msgid "Available" msgstr "Disponível" -#: dcim/choices.py:104 ipam/choices.py:33 ipam/choices.py:51 -#: ipam/choices.py:71 ipam/choices.py:156 wireless/choices.py:28 +#: netbox/dcim/choices.py:104 netbox/ipam/choices.py:33 +#: netbox/ipam/choices.py:51 netbox/ipam/choices.py:71 +#: netbox/ipam/choices.py:156 netbox/wireless/choices.py:28 msgid "Deprecated" msgstr "Obsoleto" -#: dcim/choices.py:114 templates/dcim/inc/panels/racktype_dimensions.html:41 +#: netbox/dcim/choices.py:114 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:41 msgid "Millimeters" msgstr "Milímetros" -#: dcim/choices.py:115 dcim/choices.py:1553 +#: netbox/dcim/choices.py:115 netbox/dcim/choices.py:1555 msgid "Inches" msgstr "Polegadas" -#: dcim/choices.py:136 dcim/choices.py:207 dcim/choices.py:254 +#: netbox/dcim/choices.py:136 netbox/dcim/choices.py:207 +#: netbox/dcim/choices.py:254 msgid "Front to rear" msgstr "Frente para trás" -#: dcim/choices.py:137 dcim/choices.py:208 dcim/choices.py:255 +#: netbox/dcim/choices.py:137 netbox/dcim/choices.py:208 +#: netbox/dcim/choices.py:255 msgid "Rear to front" msgstr "Trás para frente" -#: dcim/choices.py:151 dcim/forms/bulk_edit.py:68 dcim/forms/bulk_edit.py:87 -#: dcim/forms/bulk_edit.py:173 dcim/forms/bulk_edit.py:1405 -#: dcim/forms/bulk_import.py:60 dcim/forms/bulk_import.py:74 -#: dcim/forms/bulk_import.py:137 dcim/forms/bulk_import.py:566 -#: dcim/forms/bulk_import.py:833 dcim/forms/bulk_import.py:1088 -#: dcim/forms/filtersets.py:234 dcim/forms/model_forms.py:74 -#: dcim/forms/model_forms.py:93 dcim/forms/model_forms.py:170 -#: dcim/forms/model_forms.py:1062 dcim/forms/model_forms.py:1502 -#: dcim/forms/object_import.py:176 dcim/tables/devices.py:656 -#: dcim/tables/devices.py:869 dcim/tables/devices.py:954 -#: extras/tables/tables.py:223 ipam/tables/fhrp.py:59 ipam/tables/ip.py:378 -#: ipam/tables/services.py:44 templates/dcim/interface.html:102 -#: templates/dcim/interface.html:309 templates/dcim/location.html:41 -#: templates/dcim/region.html:37 templates/dcim/sitegroup.html:37 -#: templates/ipam/service.html:28 templates/tenancy/contactgroup.html:29 -#: templates/tenancy/tenantgroup.html:37 -#: templates/virtualization/vminterface.html:39 -#: templates/wireless/wirelesslangroup.html:37 tenancy/forms/bulk_edit.py:27 -#: tenancy/forms/bulk_edit.py:61 tenancy/forms/bulk_import.py:24 -#: tenancy/forms/bulk_import.py:58 tenancy/forms/model_forms.py:25 -#: tenancy/forms/model_forms.py:68 virtualization/forms/bulk_edit.py:207 -#: virtualization/forms/bulk_import.py:151 -#: virtualization/tables/virtualmachines.py:162 wireless/forms/bulk_edit.py:24 -#: wireless/forms/bulk_import.py:21 wireless/forms/model_forms.py:21 +#: 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/templates/dcim/location.html:41 netbox/templates/dcim/region.html:37 +#: netbox/templates/dcim/sitegroup.html:37 +#: netbox/templates/ipam/service.html:28 +#: netbox/templates/tenancy/contactgroup.html:29 +#: netbox/templates/tenancy/tenantgroup.html:37 +#: netbox/templates/virtualization/vminterface.html:39 +#: netbox/templates/wireless/wirelesslangroup.html:37 +#: netbox/tenancy/forms/bulk_edit.py:27 netbox/tenancy/forms/bulk_edit.py:61 +#: netbox/tenancy/forms/bulk_import.py:24 +#: netbox/tenancy/forms/bulk_import.py:58 +#: netbox/tenancy/forms/model_forms.py:25 +#: netbox/tenancy/forms/model_forms.py:68 +#: netbox/virtualization/forms/bulk_edit.py:207 +#: netbox/virtualization/forms/bulk_import.py:151 +#: netbox/virtualization/tables/virtualmachines.py:162 +#: netbox/wireless/forms/bulk_edit.py:24 +#: netbox/wireless/forms/bulk_import.py:21 +#: netbox/wireless/forms/model_forms.py:21 msgid "Parent" msgstr "Pai" -#: dcim/choices.py:152 +#: netbox/dcim/choices.py:152 msgid "Child" msgstr "Filho" -#: dcim/choices.py:166 templates/dcim/device.html:340 -#: templates/dcim/rack.html:133 templates/dcim/rack_elevation_list.html:20 -#: templates/dcim/rackreservation.html:76 +#: netbox/dcim/choices.py:166 netbox/templates/dcim/device.html:340 +#: netbox/templates/dcim/rack.html:133 +#: netbox/templates/dcim/rack_elevation_list.html:20 +#: netbox/templates/dcim/rackreservation.html:76 msgid "Front" msgstr "Frente" -#: dcim/choices.py:167 templates/dcim/device.html:346 -#: templates/dcim/rack.html:139 templates/dcim/rack_elevation_list.html:21 -#: templates/dcim/rackreservation.html:82 +#: netbox/dcim/choices.py:167 netbox/templates/dcim/device.html:346 +#: netbox/templates/dcim/rack.html:139 +#: netbox/templates/dcim/rack_elevation_list.html:21 +#: netbox/templates/dcim/rackreservation.html:82 msgid "Rear" msgstr "Traseira" -#: dcim/choices.py:186 dcim/choices.py:238 virtualization/choices.py:46 +#: netbox/dcim/choices.py:186 netbox/dcim/choices.py:238 +#: netbox/virtualization/choices.py:46 msgid "Staged" msgstr "Preparado" -#: dcim/choices.py:188 +#: netbox/dcim/choices.py:188 msgid "Inventory" msgstr "Inventário" -#: dcim/choices.py:209 dcim/choices.py:256 +#: netbox/dcim/choices.py:209 netbox/dcim/choices.py:256 msgid "Left to right" msgstr "Esquerda para direita" -#: dcim/choices.py:210 dcim/choices.py:257 +#: netbox/dcim/choices.py:210 netbox/dcim/choices.py:257 msgid "Right to left" msgstr "Direita para esquerda" -#: dcim/choices.py:211 dcim/choices.py:258 +#: netbox/dcim/choices.py:211 netbox/dcim/choices.py:258 msgid "Side to rear" msgstr "Lado para trás" -#: dcim/choices.py:212 +#: netbox/dcim/choices.py:212 msgid "Rear to side" msgstr "De trás para o lado" -#: dcim/choices.py:213 +#: netbox/dcim/choices.py:213 msgid "Bottom to top" msgstr "De baixo para cima" -#: dcim/choices.py:214 +#: netbox/dcim/choices.py:214 msgid "Top to bottom" msgstr "De cima para baixo" -#: dcim/choices.py:215 dcim/choices.py:259 dcim/choices.py:1303 +#: netbox/dcim/choices.py:215 netbox/dcim/choices.py:259 +#: netbox/dcim/choices.py:1305 msgid "Passive" msgstr "Passivo" -#: dcim/choices.py:216 +#: netbox/dcim/choices.py:216 msgid "Mixed" msgstr "Misto" -#: dcim/choices.py:484 dcim/choices.py:733 +#: netbox/dcim/choices.py:484 netbox/dcim/choices.py:733 msgid "NEMA (Non-locking)" msgstr "NEMA (sem trava)" -#: dcim/choices.py:506 dcim/choices.py:755 +#: netbox/dcim/choices.py:506 netbox/dcim/choices.py:755 msgid "NEMA (Locking)" msgstr "NEMA (twist-lock)" -#: dcim/choices.py:530 dcim/choices.py:779 +#: netbox/dcim/choices.py:530 netbox/dcim/choices.py:779 msgid "California Style" msgstr "California Standard" -#: dcim/choices.py:538 +#: netbox/dcim/choices.py:538 msgid "International/ITA" msgstr "Internacional/ITA" -#: dcim/choices.py:573 dcim/choices.py:814 +#: netbox/dcim/choices.py:573 netbox/dcim/choices.py:814 msgid "Proprietary" msgstr "Proprietário" -#: dcim/choices.py:581 dcim/choices.py:824 dcim/choices.py:1219 -#: dcim/choices.py:1221 dcim/choices.py:1447 dcim/choices.py:1449 -#: netbox/navigation/menu.py:200 +#: 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 msgid "Other" msgstr "Outros" -#: dcim/choices.py:787 +#: netbox/dcim/choices.py:787 msgid "ITA/International" msgstr "ITA/Internacional" -#: dcim/choices.py:854 +#: netbox/dcim/choices.py:854 msgid "Physical" msgstr "Físico" -#: dcim/choices.py:855 dcim/choices.py:1023 +#: netbox/dcim/choices.py:855 netbox/dcim/choices.py:1024 msgid "Virtual" msgstr "Virtual" -#: dcim/choices.py:856 dcim/choices.py:1097 dcim/forms/bulk_edit.py:1515 -#: dcim/forms/filtersets.py:1330 dcim/forms/model_forms.py:988 -#: dcim/forms/model_forms.py:1397 netbox/navigation/menu.py:140 -#: netbox/navigation/menu.py:144 templates/dcim/interface.html:210 +#: 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 msgid "Wireless" msgstr "Wireless" -#: dcim/choices.py:1021 +#: netbox/dcim/choices.py:1022 msgid "Virtual interfaces" msgstr "Interfaces virtuais" -#: dcim/choices.py:1024 dcim/forms/bulk_edit.py:1410 -#: dcim/forms/bulk_import.py:840 dcim/forms/model_forms.py:974 -#: dcim/tables/devices.py:660 templates/dcim/interface.html:106 -#: templates/virtualization/vminterface.html:43 -#: virtualization/forms/bulk_edit.py:212 -#: virtualization/forms/bulk_import.py:158 -#: virtualization/tables/virtualmachines.py:166 +#: 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/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 msgid "Bridge" msgstr "Bridge" -#: dcim/choices.py:1025 +#: netbox/dcim/choices.py:1026 msgid "Link Aggregation Group (LAG)" msgstr "Link Aggregation (LAG)" -#: dcim/choices.py:1029 +#: netbox/dcim/choices.py:1030 msgid "Ethernet (fixed)" msgstr "Ethernet (fixa)" -#: dcim/choices.py:1044 +#: netbox/dcim/choices.py:1046 msgid "Ethernet (modular)" msgstr "Ethernet (modular)" -#: dcim/choices.py:1081 +#: netbox/dcim/choices.py:1083 msgid "Ethernet (backplane)" msgstr "Ethernet (backplane)" -#: dcim/choices.py:1113 +#: netbox/dcim/choices.py:1115 msgid "Cellular" msgstr "Celular" -#: dcim/choices.py:1165 dcim/forms/filtersets.py:383 -#: dcim/forms/filtersets.py:809 dcim/forms/filtersets.py:963 -#: dcim/forms/filtersets.py:1542 templates/dcim/inventoryitem.html:52 -#: templates/dcim/virtualchassis_edit.html:54 +#: 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/templates/dcim/virtualchassis_edit.html:54 msgid "Serial" msgstr "Serial" -#: dcim/choices.py:1180 +#: netbox/dcim/choices.py:1182 msgid "Coaxial" msgstr "Coaxial" -#: dcim/choices.py:1200 +#: netbox/dcim/choices.py:1202 msgid "Stacking" msgstr "Empilhamento" -#: dcim/choices.py:1250 +#: netbox/dcim/choices.py:1252 msgid "Half" msgstr "Half" -#: dcim/choices.py:1251 +#: netbox/dcim/choices.py:1253 msgid "Full" msgstr "Full" -#: dcim/choices.py:1252 netbox/preferences.py:31 wireless/choices.py:480 +#: netbox/dcim/choices.py:1254 netbox/netbox/preferences.py:31 +#: netbox/wireless/choices.py:480 msgid "Auto" msgstr "Automático" -#: dcim/choices.py:1263 +#: netbox/dcim/choices.py:1265 msgid "Access" msgstr "Acesso" -#: dcim/choices.py:1264 ipam/tables/vlans.py:172 ipam/tables/vlans.py:217 -#: templates/dcim/inc/interface_vlans_table.html:7 +#: 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 "Tagueada" -#: dcim/choices.py:1265 +#: netbox/dcim/choices.py:1267 msgid "Tagged (All)" msgstr "Tagueada (Todos)" -#: dcim/choices.py:1294 +#: netbox/dcim/choices.py:1296 msgid "IEEE Standard" msgstr "Padrão IEEE" -#: dcim/choices.py:1305 +#: netbox/dcim/choices.py:1307 msgid "Passive 24V (2-pair)" msgstr "24V passivo (2 pares)" -#: dcim/choices.py:1306 +#: netbox/dcim/choices.py:1308 msgid "Passive 24V (4-pair)" msgstr "24V passivo (4 pares)" -#: dcim/choices.py:1307 +#: netbox/dcim/choices.py:1309 msgid "Passive 48V (2-pair)" msgstr "48V passivo (2 pares)" -#: dcim/choices.py:1308 +#: netbox/dcim/choices.py:1310 msgid "Passive 48V (4-pair)" msgstr "48V passivo (4 pares)" -#: dcim/choices.py:1378 dcim/choices.py:1488 +#: netbox/dcim/choices.py:1380 netbox/dcim/choices.py:1490 msgid "Copper" msgstr "Cabo Metálico" -#: dcim/choices.py:1401 +#: netbox/dcim/choices.py:1403 msgid "Fiber Optic" msgstr "Fibra Óptica" -#: dcim/choices.py:1434 dcim/choices.py:1517 +#: netbox/dcim/choices.py:1436 netbox/dcim/choices.py:1519 msgid "USB" msgstr "USB" -#: dcim/choices.py:1504 +#: netbox/dcim/choices.py:1506 msgid "Fiber" msgstr "Fibra" -#: dcim/choices.py:1529 dcim/forms/filtersets.py:1227 +#: netbox/dcim/choices.py:1531 netbox/dcim/forms/filtersets.py:1227 msgid "Connected" msgstr "Conectado" -#: dcim/choices.py:1548 wireless/choices.py:497 +#: netbox/dcim/choices.py:1550 netbox/wireless/choices.py:497 msgid "Kilometers" msgstr "Quilômetros" -#: dcim/choices.py:1549 templates/dcim/cable_trace.html:65 -#: wireless/choices.py:498 +#: netbox/dcim/choices.py:1551 netbox/templates/dcim/cable_trace.html:65 +#: netbox/wireless/choices.py:498 msgid "Meters" msgstr "Metros" -#: dcim/choices.py:1550 +#: netbox/dcim/choices.py:1552 msgid "Centimeters" msgstr "Centímetros" -#: dcim/choices.py:1551 wireless/choices.py:499 +#: netbox/dcim/choices.py:1553 netbox/wireless/choices.py:499 msgid "Miles" msgstr "Milhas" -#: dcim/choices.py:1552 templates/dcim/cable_trace.html:66 -#: wireless/choices.py:500 +#: netbox/dcim/choices.py:1554 netbox/templates/dcim/cable_trace.html:66 +#: netbox/wireless/choices.py:500 msgid "Feet" msgstr "Pés" -#: dcim/choices.py:1568 templates/dcim/device.html:327 -#: templates/dcim/rack.html:107 +#: netbox/dcim/choices.py:1570 netbox/templates/dcim/device.html:327 +#: netbox/templates/dcim/rack.html:107 msgid "Kilograms" msgstr "Quilogramas" -#: dcim/choices.py:1569 +#: netbox/dcim/choices.py:1571 msgid "Grams" msgstr "Gramas" -#: dcim/choices.py:1570 templates/dcim/device.html:328 -#: templates/dcim/rack.html:108 +#: netbox/dcim/choices.py:1572 netbox/templates/dcim/device.html:328 +#: netbox/templates/dcim/rack.html:108 msgid "Pounds" msgstr "Libras" -#: dcim/choices.py:1571 +#: netbox/dcim/choices.py:1573 msgid "Ounces" msgstr "Onças" -#: dcim/choices.py:1618 +#: netbox/dcim/choices.py:1620 msgid "Redundant" msgstr "Redundante" -#: dcim/choices.py:1639 +#: netbox/dcim/choices.py:1641 msgid "Single phase" msgstr "Monofásico" -#: dcim/choices.py:1640 +#: netbox/dcim/choices.py:1642 msgid "Three-phase" msgstr "Trifásico" -#: dcim/fields.py:45 +#: netbox/dcim/fields.py:45 #, python-brace-format msgid "Invalid MAC address format: {value}" msgstr "Formato de endereço MAC inválido: {value}" -#: dcim/fields.py:71 +#: netbox/dcim/fields.py:71 #, python-brace-format msgid "Invalid WWN format: {value}" msgstr "Formato WWN inválido: {value}" -#: dcim/filtersets.py:86 +#: netbox/dcim/filtersets.py:86 msgid "Parent region (ID)" msgstr "Região principal (ID)" -#: dcim/filtersets.py:92 +#: netbox/dcim/filtersets.py:92 msgid "Parent region (slug)" msgstr "Região principal (slug)" -#: dcim/filtersets.py:116 +#: netbox/dcim/filtersets.py:116 msgid "Parent site group (ID)" msgstr "Grupo de sites principais (ID)" -#: dcim/filtersets.py:122 +#: netbox/dcim/filtersets.py:122 msgid "Parent site group (slug)" msgstr "Grupo de sites principais (slug)" -#: dcim/filtersets.py:164 extras/filtersets.py:364 ipam/filtersets.py:841 -#: ipam/filtersets.py:993 +#: netbox/dcim/filtersets.py:164 netbox/extras/filtersets.py:364 +#: netbox/ipam/filtersets.py:843 netbox/ipam/filtersets.py:995 msgid "Group (ID)" msgstr "Grupo (ID)" -#: dcim/filtersets.py:170 +#: netbox/dcim/filtersets.py:170 msgid "Group (slug)" msgstr "Grupo (slug)" -#: dcim/filtersets.py:176 dcim/filtersets.py:181 +#: netbox/dcim/filtersets.py:176 netbox/dcim/filtersets.py:181 msgid "AS (ID)" msgstr "AS (ID)" -#: dcim/filtersets.py:246 +#: netbox/dcim/filtersets.py:246 msgid "Parent location (ID)" msgstr "Localização principal (ID)" -#: dcim/filtersets.py:252 +#: netbox/dcim/filtersets.py:252 msgid "Parent location (slug)" msgstr "Localização principal (slug)" -#: dcim/filtersets.py:258 dcim/filtersets.py:369 dcim/filtersets.py:490 -#: dcim/filtersets.py:1057 dcim/filtersets.py:1404 dcim/filtersets.py:2182 +#: 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)" -#: dcim/filtersets.py:265 dcim/filtersets.py:376 dcim/filtersets.py:497 -#: dcim/filtersets.py:1410 extras/filtersets.py:542 +#: 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)" -#: dcim/filtersets.py:296 dcim/filtersets.py:381 dcim/filtersets.py:539 -#: dcim/filtersets.py:678 dcim/filtersets.py:882 dcim/filtersets.py:933 -#: dcim/filtersets.py:973 dcim/filtersets.py:1306 dcim/filtersets.py:1840 +#: 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 msgid "Manufacturer (ID)" msgstr "Fabricante (ID)" -#: dcim/filtersets.py:302 dcim/filtersets.py:387 dcim/filtersets.py:545 -#: dcim/filtersets.py:684 dcim/filtersets.py:888 dcim/filtersets.py:939 -#: dcim/filtersets.py:979 dcim/filtersets.py:1312 dcim/filtersets.py:1846 +#: 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 msgid "Manufacturer (slug)" msgstr "Fabricante (slug)" -#: dcim/filtersets.py:393 +#: netbox/dcim/filtersets.py:393 msgid "Rack type (slug)" msgstr "Tipo de rack (slug)" -#: dcim/filtersets.py:397 +#: netbox/dcim/filtersets.py:397 msgid "Rack type (ID)" msgstr "Tipo de rack (ID)" -#: dcim/filtersets.py:411 dcim/filtersets.py:892 dcim/filtersets.py:994 -#: dcim/filtersets.py:1850 ipam/filtersets.py:381 ipam/filtersets.py:493 -#: ipam/filtersets.py:1003 virtualization/filtersets.py:210 +#: 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 msgid "Role (ID)" msgstr "Função (ID)" -#: dcim/filtersets.py:417 dcim/filtersets.py:898 dcim/filtersets.py:1000 -#: dcim/filtersets.py:1856 extras/filtersets.py:558 ipam/filtersets.py:387 -#: ipam/filtersets.py:499 ipam/filtersets.py:1009 -#: virtualization/filtersets.py:216 +#: 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 msgid "Role (slug)" msgstr "Função (slug)" -#: dcim/filtersets.py:447 dcim/filtersets.py:1062 dcim/filtersets.py:1415 -#: dcim/filtersets.py:2244 +#: netbox/dcim/filtersets.py:447 netbox/dcim/filtersets.py:1062 +#: netbox/dcim/filtersets.py:1415 netbox/dcim/filtersets.py:2244 msgid "Rack (ID)" msgstr "Rack (ID)" -#: dcim/filtersets.py:507 extras/filtersets.py:293 extras/filtersets.py:337 -#: extras/filtersets.py:359 extras/filtersets.py:419 users/filtersets.py:113 -#: users/filtersets.py:180 +#: netbox/dcim/filtersets.py:507 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 "Usuário (nome)" -#: dcim/filtersets.py:549 +#: netbox/dcim/filtersets.py:549 msgid "Default platform (ID)" msgstr "Plataforma padrão (ID)" -#: dcim/filtersets.py:555 +#: netbox/dcim/filtersets.py:555 msgid "Default platform (slug)" msgstr "Plataforma padrão (slug)" -#: dcim/filtersets.py:558 dcim/forms/filtersets.py:517 +#: netbox/dcim/filtersets.py:558 netbox/dcim/forms/filtersets.py:517 msgid "Has a front image" msgstr "Possui imagem frontal" -#: dcim/filtersets.py:562 dcim/forms/filtersets.py:524 +#: netbox/dcim/filtersets.py:562 netbox/dcim/forms/filtersets.py:524 msgid "Has a rear image" msgstr "Possui imagem traseira" -#: dcim/filtersets.py:567 dcim/filtersets.py:688 dcim/filtersets.py:1131 -#: dcim/forms/filtersets.py:531 dcim/forms/filtersets.py:627 -#: dcim/forms/filtersets.py:848 +#: 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 msgid "Has console ports" msgstr "Possui portas de console" -#: dcim/filtersets.py:571 dcim/filtersets.py:692 dcim/filtersets.py:1135 -#: dcim/forms/filtersets.py:538 dcim/forms/filtersets.py:634 -#: dcim/forms/filtersets.py:855 +#: 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 msgid "Has console server ports" msgstr "Possui portas de servidor de console" -#: dcim/filtersets.py:575 dcim/filtersets.py:696 dcim/filtersets.py:1139 -#: dcim/forms/filtersets.py:545 dcim/forms/filtersets.py:641 -#: dcim/forms/filtersets.py:862 +#: 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 msgid "Has power ports" msgstr "Possui portas de alimentação" -#: dcim/filtersets.py:579 dcim/filtersets.py:700 dcim/filtersets.py:1143 -#: dcim/forms/filtersets.py:552 dcim/forms/filtersets.py:648 -#: dcim/forms/filtersets.py:869 +#: 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 msgid "Has power outlets" msgstr "Possui tomadas elétricas" -#: dcim/filtersets.py:583 dcim/filtersets.py:704 dcim/filtersets.py:1147 -#: dcim/forms/filtersets.py:559 dcim/forms/filtersets.py:655 -#: dcim/forms/filtersets.py:876 +#: 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 msgid "Has interfaces" msgstr "Possui interfaces" -#: dcim/filtersets.py:587 dcim/filtersets.py:708 dcim/filtersets.py:1151 -#: dcim/forms/filtersets.py:566 dcim/forms/filtersets.py:662 -#: dcim/forms/filtersets.py:883 +#: 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 msgid "Has pass-through ports" msgstr "Possui portas passthrough" -#: dcim/filtersets.py:591 dcim/filtersets.py:1155 dcim/forms/filtersets.py:580 +#: netbox/dcim/filtersets.py:591 netbox/dcim/filtersets.py:1155 +#: netbox/dcim/forms/filtersets.py:580 msgid "Has module bays" msgstr "Possui compartimentos de módulos" -#: dcim/filtersets.py:595 dcim/filtersets.py:1159 dcim/forms/filtersets.py:573 +#: netbox/dcim/filtersets.py:595 netbox/dcim/filtersets.py:1159 +#: netbox/dcim/forms/filtersets.py:573 msgid "Has device bays" msgstr "Possui compartimentos de dispositivos" -#: dcim/filtersets.py:599 dcim/forms/filtersets.py:587 +#: netbox/dcim/filtersets.py:599 netbox/dcim/forms/filtersets.py:587 msgid "Has inventory items" msgstr "Possui itens de inventário" -#: dcim/filtersets.py:756 dcim/filtersets.py:989 dcim/filtersets.py:1436 +#: netbox/dcim/filtersets.py:756 netbox/dcim/filtersets.py:989 +#: netbox/dcim/filtersets.py:1436 msgid "Device type (ID)" msgstr "Tipo de dispositivo (ID)" -#: dcim/filtersets.py:772 dcim/filtersets.py:1317 +#: netbox/dcim/filtersets.py:772 netbox/dcim/filtersets.py:1317 msgid "Module type (ID)" msgstr "Tipo de módulo (ID)" -#: dcim/filtersets.py:804 dcim/filtersets.py:1591 +#: netbox/dcim/filtersets.py:804 netbox/dcim/filtersets.py:1591 msgid "Power port (ID)" msgstr "Porta de alimentação (ID)" -#: dcim/filtersets.py:878 dcim/filtersets.py:1836 +#: netbox/dcim/filtersets.py:878 netbox/dcim/filtersets.py:1836 msgid "Parent inventory item (ID)" msgstr "Item principal do inventário (ID)" -#: dcim/filtersets.py:921 dcim/filtersets.py:947 dcim/filtersets.py:1127 -#: virtualization/filtersets.py:238 +#: netbox/dcim/filtersets.py:921 netbox/dcim/filtersets.py:947 +#: netbox/dcim/filtersets.py:1127 netbox/virtualization/filtersets.py:238 msgid "Config template (ID)" msgstr "Modelo de configuração (ID)" -#: dcim/filtersets.py:985 +#: netbox/dcim/filtersets.py:985 msgid "Device type (slug)" msgstr "Tipo de dispositivo (slug)" -#: dcim/filtersets.py:1005 +#: netbox/dcim/filtersets.py:1005 msgid "Parent Device (ID)" msgstr "Dispositivo Pai (ID)" -#: dcim/filtersets.py:1009 virtualization/filtersets.py:220 +#: netbox/dcim/filtersets.py:1009 netbox/virtualization/filtersets.py:220 msgid "Platform (ID)" msgstr "Plataforma (ID)" -#: dcim/filtersets.py:1015 extras/filtersets.py:569 -#: virtualization/filtersets.py:226 +#: netbox/dcim/filtersets.py:1015 netbox/extras/filtersets.py:569 +#: netbox/virtualization/filtersets.py:226 msgid "Platform (slug)" msgstr "Plataforma (slug)" -#: dcim/filtersets.py:1051 dcim/filtersets.py:1399 dcim/filtersets.py:1934 -#: dcim/filtersets.py:2176 dcim/filtersets.py:2235 +#: 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 msgid "Site name (slug)" msgstr "Nome do site (slug)" -#: dcim/filtersets.py:1067 +#: netbox/dcim/filtersets.py:1067 msgid "Parent bay (ID)" msgstr "Compartimento Pai (ID)" -#: dcim/filtersets.py:1071 +#: netbox/dcim/filtersets.py:1071 msgid "VM cluster (ID)" msgstr "Cluster de VMs (ID)" -#: dcim/filtersets.py:1077 extras/filtersets.py:591 -#: virtualization/filtersets.py:136 +#: netbox/dcim/filtersets.py:1077 netbox/extras/filtersets.py:591 +#: netbox/virtualization/filtersets.py:136 msgid "Cluster group (slug)" msgstr "Grupo de clusters (slug)" -#: dcim/filtersets.py:1082 virtualization/filtersets.py:130 +#: netbox/dcim/filtersets.py:1082 netbox/virtualization/filtersets.py:130 msgid "Cluster group (ID)" msgstr "Grupo de clusters (ID)" -#: dcim/filtersets.py:1088 +#: netbox/dcim/filtersets.py:1088 msgid "Device model (slug)" msgstr "Modelo do dispositivo (slug)" -#: dcim/filtersets.py:1099 dcim/forms/bulk_edit.py:516 +#: netbox/dcim/filtersets.py:1099 netbox/dcim/forms/bulk_edit.py:522 msgid "Is full depth" msgstr "É full-depth" -#: dcim/filtersets.py:1103 dcim/forms/common.py:18 -#: dcim/forms/filtersets.py:818 dcim/forms/filtersets.py:1385 -#: dcim/models/device_components.py:518 virtualization/filtersets.py:230 -#: virtualization/filtersets.py:301 virtualization/forms/filtersets.py:172 -#: virtualization/forms/filtersets.py:223 +#: 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 msgid "MAC address" msgstr "Endereço MAC" -#: dcim/filtersets.py:1110 dcim/filtersets.py:1274 -#: dcim/forms/filtersets.py:827 dcim/forms/filtersets.py:930 -#: virtualization/filtersets.py:234 virtualization/forms/filtersets.py:176 +#: 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 msgid "Has a primary IP" msgstr "Possui IP primário" -#: dcim/filtersets.py:1114 +#: netbox/dcim/filtersets.py:1114 msgid "Has an out-of-band IP" msgstr "Possui IP fora de banda" -#: dcim/filtersets.py:1119 +#: netbox/dcim/filtersets.py:1119 msgid "Virtual chassis (ID)" msgstr "Chassi virtual (ID)" -#: dcim/filtersets.py:1123 +#: netbox/dcim/filtersets.py:1123 msgid "Is a virtual chassis member" msgstr "É membro do chassi virtual" -#: dcim/filtersets.py:1164 +#: netbox/dcim/filtersets.py:1164 msgid "OOB IP (ID)" msgstr "IP Fora de Banda (ID)" -#: dcim/filtersets.py:1168 +#: netbox/dcim/filtersets.py:1168 msgid "Has virtual device context" msgstr "Possui contexto de dispositivo virtual" -#: dcim/filtersets.py:1257 +#: netbox/dcim/filtersets.py:1257 msgid "VDC (ID)" msgstr "Contexto de Dispositivo Virtual (ID)" -#: dcim/filtersets.py:1262 +#: netbox/dcim/filtersets.py:1262 msgid "Device model" msgstr "Modelo de dispositivo" -#: dcim/filtersets.py:1267 ipam/filtersets.py:632 vpn/filtersets.py:102 -#: vpn/filtersets.py:401 +#: 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)" -#: dcim/filtersets.py:1323 +#: netbox/dcim/filtersets.py:1323 msgid "Module type (model)" msgstr "Tipo de módulo (modelo)" -#: dcim/filtersets.py:1329 +#: netbox/dcim/filtersets.py:1329 msgid "Module bay (ID)" msgstr "Compartimento de módulo (ID)" -#: dcim/filtersets.py:1333 dcim/filtersets.py:1425 ipam/filtersets.py:611 -#: ipam/filtersets.py:851 ipam/filtersets.py:1115 -#: virtualization/filtersets.py:161 vpn/filtersets.py:379 +#: 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 msgid "Device (ID)" msgstr "Dispositivo (ID)" -#: dcim/filtersets.py:1421 +#: netbox/dcim/filtersets.py:1421 msgid "Rack (name)" msgstr "Rack (nome)" -#: dcim/filtersets.py:1431 ipam/filtersets.py:606 ipam/filtersets.py:846 -#: ipam/filtersets.py:1121 vpn/filtersets.py:374 +#: 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)" -#: dcim/filtersets.py:1442 +#: netbox/dcim/filtersets.py:1442 msgid "Device type (model)" msgstr "Tipo de dispositivo (modelo)" -#: dcim/filtersets.py:1447 +#: netbox/dcim/filtersets.py:1447 msgid "Device role (ID)" msgstr "Função do dispositivo (ID)" -#: dcim/filtersets.py:1453 +#: netbox/dcim/filtersets.py:1453 msgid "Device role (slug)" msgstr "Função do dispositivo (slug)" -#: dcim/filtersets.py:1458 +#: netbox/dcim/filtersets.py:1458 msgid "Virtual Chassis (ID)" msgstr "Chassi Virtual (ID)" -#: dcim/filtersets.py:1464 dcim/forms/filtersets.py:109 -#: dcim/tables/devices.py:206 netbox/navigation/menu.py:79 -#: templates/dcim/device.html:120 templates/dcim/device_edit.html:93 -#: templates/dcim/virtualchassis.html:20 -#: templates/dcim/virtualchassis_add.html:8 -#: templates/dcim/virtualchassis_edit.html:24 +#: netbox/dcim/filtersets.py:1464 netbox/dcim/forms/filtersets.py:109 +#: netbox/dcim/tables/devices.py:206 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 +#: netbox/templates/dcim/virtualchassis_add.html:8 +#: netbox/templates/dcim/virtualchassis_edit.html:24 msgid "Virtual Chassis" msgstr "Chassi Virtual" -#: dcim/filtersets.py:1488 +#: netbox/dcim/filtersets.py:1488 msgid "Module (ID)" msgstr "Módulo (ID)" -#: dcim/filtersets.py:1495 +#: netbox/dcim/filtersets.py:1495 msgid "Cable (ID)" msgstr "Cabo (ID)" -#: dcim/filtersets.py:1604 ipam/forms/bulk_import.py:189 -#: vpn/forms/bulk_import.py:308 +#: netbox/dcim/filtersets.py:1604 netbox/ipam/forms/bulk_import.py:189 +#: netbox/vpn/forms/bulk_import.py:308 msgid "Assigned VLAN" msgstr "VLAN Designada" -#: dcim/filtersets.py:1608 +#: netbox/dcim/filtersets.py:1608 msgid "Assigned VID" msgstr "VLAN ID Designada " -#: dcim/filtersets.py:1613 dcim/forms/bulk_edit.py:1489 -#: dcim/forms/bulk_import.py:891 dcim/forms/filtersets.py:1428 -#: dcim/forms/model_forms.py:1378 dcim/models/device_components.py:711 -#: dcim/tables/devices.py:626 ipam/filtersets.py:316 ipam/filtersets.py:327 -#: ipam/filtersets.py:483 ipam/filtersets.py:584 ipam/filtersets.py:595 -#: ipam/forms/bulk_edit.py:242 ipam/forms/bulk_edit.py:298 -#: ipam/forms/bulk_edit.py:340 ipam/forms/bulk_import.py:157 -#: ipam/forms/bulk_import.py:243 ipam/forms/bulk_import.py:279 -#: ipam/forms/filtersets.py:67 ipam/forms/filtersets.py:172 -#: ipam/forms/filtersets.py:309 ipam/forms/model_forms.py:62 -#: ipam/forms/model_forms.py:202 ipam/forms/model_forms.py:247 -#: ipam/forms/model_forms.py:300 ipam/forms/model_forms.py:431 -#: ipam/forms/model_forms.py:445 ipam/forms/model_forms.py:459 -#: ipam/models/ip.py:233 ipam/models/ip.py:512 ipam/models/ip.py:720 -#: ipam/models/vrfs.py:62 ipam/tables/ip.py:242 ipam/tables/ip.py:309 -#: ipam/tables/ip.py:360 ipam/tables/ip.py:450 -#: templates/dcim/interface.html:133 templates/ipam/ipaddress.html:18 -#: templates/ipam/iprange.html:40 templates/ipam/prefix.html:19 -#: templates/ipam/vrf.html:7 templates/ipam/vrf.html:13 -#: templates/virtualization/vminterface.html:47 -#: virtualization/forms/bulk_edit.py:261 -#: virtualization/forms/bulk_import.py:171 -#: virtualization/forms/filtersets.py:228 -#: virtualization/forms/model_forms.py:344 -#: virtualization/models/virtualmachines.py:355 -#: virtualization/tables/virtualmachines.py:143 +#: 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/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 msgid "VRF" msgstr "VRF" -#: dcim/filtersets.py:1619 ipam/filtersets.py:322 ipam/filtersets.py:333 -#: ipam/filtersets.py:489 ipam/filtersets.py:590 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)" -#: dcim/filtersets.py:1624 ipam/filtersets.py:1030 vpn/filtersets.py:342 +#: netbox/dcim/filtersets.py:1624 netbox/ipam/filtersets.py:1032 +#: netbox/vpn/filtersets.py:342 msgid "L2VPN (ID)" msgstr "L2VPN (ID)" -#: dcim/filtersets.py:1630 dcim/forms/filtersets.py:1433 -#: dcim/tables/devices.py:570 ipam/filtersets.py:1036 -#: ipam/forms/filtersets.py:518 ipam/tables/vlans.py:137 -#: templates/dcim/interface.html:93 templates/ipam/vlan.html:66 -#: templates/vpn/l2vpntermination.html:12 -#: virtualization/forms/filtersets.py:233 vpn/forms/bulk_import.py:280 -#: vpn/forms/filtersets.py:246 vpn/forms/model_forms.py:409 -#: vpn/forms/model_forms.py:427 vpn/models/l2vpn.py:63 vpn/tables/l2vpn.py:55 +#: netbox/dcim/filtersets.py: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/templates/vpn/l2vpntermination.html:12 +#: netbox/virtualization/forms/filtersets.py:233 +#: netbox/vpn/forms/bulk_import.py:280 netbox/vpn/forms/filtersets.py:246 +#: netbox/vpn/forms/model_forms.py:409 netbox/vpn/forms/model_forms.py:427 +#: netbox/vpn/models/l2vpn.py:63 netbox/vpn/tables/l2vpn.py:55 msgid "L2VPN" msgstr "L2VPN" -#: dcim/filtersets.py:1662 +#: netbox/dcim/filtersets.py:1662 msgid "Virtual Chassis Interfaces for Device" msgstr "Interfaces de Chassi Virtual para Dispositivo" -#: dcim/filtersets.py:1667 +#: netbox/dcim/filtersets.py:1667 msgid "Virtual Chassis Interfaces for Device (ID)" msgstr "Interfaces de Chassi Virtual para Dispositivo (ID)" -#: dcim/filtersets.py:1671 +#: netbox/dcim/filtersets.py:1671 msgid "Kind of interface" msgstr "Tipo de interface" -#: dcim/filtersets.py:1676 virtualization/filtersets.py:293 +#: netbox/dcim/filtersets.py:1676 netbox/virtualization/filtersets.py:293 msgid "Parent interface (ID)" msgstr "Interface pai (ID)" -#: dcim/filtersets.py:1681 virtualization/filtersets.py:298 +#: netbox/dcim/filtersets.py:1681 netbox/virtualization/filtersets.py:298 msgid "Bridged interface (ID)" msgstr "Interface bridged (ID)" -#: dcim/filtersets.py:1686 +#: netbox/dcim/filtersets.py:1686 msgid "LAG interface (ID)" msgstr "Interface LAG (ID)" -#: dcim/filtersets.py:1713 dcim/filtersets.py:1725 -#: dcim/forms/filtersets.py:1345 dcim/forms/model_forms.py:1690 -#: templates/dcim/virtualdevicecontext.html:15 +#: netbox/dcim/filtersets.py:1713 netbox/dcim/filtersets.py:1725 +#: netbox/dcim/forms/filtersets.py:1345 netbox/dcim/forms/model_forms.py:1697 +#: netbox/templates/dcim/virtualdevicecontext.html:15 msgid "Virtual Device Context" msgstr "Contexto de Dispositivo Virtual" -#: dcim/filtersets.py:1719 +#: netbox/dcim/filtersets.py:1719 msgid "Virtual Device Context (Identifier)" msgstr "Contexto de Dispositivo Virtual (ID)" -#: dcim/filtersets.py:1730 templates/wireless/wirelesslan.html:11 -#: wireless/forms/model_forms.py:53 +#: netbox/dcim/filtersets.py:1730 +#: netbox/templates/wireless/wirelesslan.html:11 +#: netbox/wireless/forms/model_forms.py:53 msgid "Wireless LAN" msgstr "Rede Wireless" -#: dcim/filtersets.py:1734 dcim/tables/devices.py:613 +#: netbox/dcim/filtersets.py:1734 netbox/dcim/tables/devices.py:613 msgid "Wireless link" msgstr "Link Wireless" -#: dcim/filtersets.py:1803 +#: netbox/dcim/filtersets.py:1803 msgid "Parent module bay (ID)" msgstr "Compartimento de módulo pai (ID)" -#: dcim/filtersets.py:1808 +#: netbox/dcim/filtersets.py:1808 msgid "Installed module (ID)" msgstr "Módulo instalado (ID)" -#: dcim/filtersets.py:1819 +#: netbox/dcim/filtersets.py:1819 msgid "Installed device (ID)" msgstr "Dispositivo instalado (ID)" -#: dcim/filtersets.py:1825 +#: netbox/dcim/filtersets.py:1825 msgid "Installed device (name)" msgstr "Dispositivo instalado (nome)" -#: dcim/filtersets.py:1891 +#: netbox/dcim/filtersets.py:1891 msgid "Master (ID)" msgstr "Mestre (ID)" -#: dcim/filtersets.py:1897 +#: netbox/dcim/filtersets.py:1897 msgid "Master (name)" msgstr "Mestre (nome)" -#: dcim/filtersets.py:1939 tenancy/filtersets.py:245 +#: netbox/dcim/filtersets.py:1939 netbox/tenancy/filtersets.py:245 msgid "Tenant (ID)" msgstr "Inquilino (ID)" -#: dcim/filtersets.py:1945 extras/filtersets.py:618 tenancy/filtersets.py:251 +#: netbox/dcim/filtersets.py:1945 netbox/extras/filtersets.py:618 +#: netbox/tenancy/filtersets.py:251 msgid "Tenant (slug)" msgstr "Inquilino (slug)" -#: dcim/filtersets.py:1981 dcim/forms/filtersets.py:1077 +#: netbox/dcim/filtersets.py:1981 netbox/dcim/forms/filtersets.py:1077 msgid "Unterminated" msgstr "Não terminado" -#: dcim/filtersets.py:2239 +#: netbox/dcim/filtersets.py:2239 msgid "Power panel (ID)" msgstr "Quadro de alimentação (ID)" -#: dcim/forms/bulk_create.py:40 extras/forms/filtersets.py:401 -#: extras/forms/model_forms.py:567 extras/forms/model_forms.py:619 -#: netbox/forms/base.py:86 netbox/forms/mixins.py:81 -#: netbox/tables/columns.py:478 -#: templates/circuits/inc/circuit_termination.html:32 -#: templates/generic/bulk_edit.html:65 templates/inc/panels/tags.html:5 -#: utilities/forms/fields/fields.py:81 +#: netbox/dcim/forms/bulk_create.py:40 netbox/extras/forms/filtersets.py: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/templates/circuits/inc/circuit_termination.html:32 +#: netbox/templates/generic/bulk_edit.html:65 +#: netbox/templates/inc/panels/tags.html:5 +#: netbox/utilities/forms/fields/fields.py:81 msgid "Tags" msgstr "Etiquetas" -#: dcim/forms/bulk_create.py:112 dcim/forms/filtersets.py:1498 -#: dcim/forms/model_forms.py:488 dcim/forms/model_forms.py:546 -#: dcim/forms/object_create.py:197 dcim/forms/object_create.py:353 -#: dcim/tables/devices.py:165 dcim/tables/devices.py:707 -#: dcim/tables/devicetypes.py:246 templates/dcim/device.html:43 -#: templates/dcim/device.html:131 templates/dcim/modulebay.html:38 -#: templates/dcim/virtualchassis.html:66 -#: templates/dcim/virtualchassis_edit.html:55 +#: 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/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/templates/dcim/device.html:43 netbox/templates/dcim/device.html:131 +#: netbox/templates/dcim/modulebay.html:38 +#: netbox/templates/dcim/virtualchassis.html:66 +#: netbox/templates/dcim/virtualchassis_edit.html:55 msgid "Position" msgstr "Posição" -#: dcim/forms/bulk_create.py:114 +#: netbox/dcim/forms/bulk_create.py:114 msgid "" "Alphanumeric ranges are supported. (Must match the number of names being " "created.)" @@ -3124,825 +3453,923 @@ msgstr "" "Intervalos alfanuméricos são suportados. (Devem corresponder ao número de " "nomes que estão sendo criados.)" -#: dcim/forms/bulk_edit.py:132 +#: netbox/dcim/forms/bulk_edit.py:133 msgid "Contact name" msgstr "Contato" -#: dcim/forms/bulk_edit.py:137 +#: netbox/dcim/forms/bulk_edit.py:138 msgid "Contact phone" msgstr "Telefone de Contato" -#: dcim/forms/bulk_edit.py:143 +#: netbox/dcim/forms/bulk_edit.py:144 msgid "Contact E-mail" msgstr "E-mail de Contato" -#: dcim/forms/bulk_edit.py:146 dcim/forms/bulk_import.py:123 -#: dcim/forms/model_forms.py:128 +#: netbox/dcim/forms/bulk_edit.py:147 netbox/dcim/forms/bulk_import.py:123 +#: netbox/dcim/forms/model_forms.py:128 msgid "Time zone" msgstr "Fuso horário" -#: dcim/forms/bulk_edit.py:224 dcim/forms/bulk_edit.py:495 -#: dcim/forms/bulk_edit.py:559 dcim/forms/bulk_edit.py:632 -#: dcim/forms/bulk_edit.py:656 dcim/forms/bulk_edit.py:740 -#: dcim/forms/bulk_edit.py:1267 dcim/forms/bulk_edit.py:1660 -#: dcim/forms/bulk_import.py:182 dcim/forms/bulk_import.py:371 -#: dcim/forms/bulk_import.py:405 dcim/forms/bulk_import.py:450 -#: dcim/forms/bulk_import.py:486 dcim/forms/bulk_import.py:1082 -#: dcim/forms/filtersets.py:313 dcim/forms/filtersets.py:372 -#: dcim/forms/filtersets.py:494 dcim/forms/filtersets.py:619 -#: dcim/forms/filtersets.py:700 dcim/forms/filtersets.py:782 -#: dcim/forms/filtersets.py:947 dcim/forms/filtersets.py:1539 -#: dcim/forms/model_forms.py:207 dcim/forms/model_forms.py:337 -#: dcim/forms/model_forms.py:349 dcim/forms/model_forms.py:395 -#: dcim/forms/model_forms.py:436 dcim/forms/model_forms.py:1075 -#: dcim/forms/model_forms.py:1515 dcim/forms/object_import.py:187 -#: dcim/tables/devices.py:96 dcim/tables/devices.py:172 -#: dcim/tables/devices.py:940 dcim/tables/devicetypes.py:80 -#: dcim/tables/devicetypes.py:308 dcim/tables/modules.py:20 -#: dcim/tables/modules.py:60 dcim/tables/racks.py:58 dcim/tables/racks.py:132 -#: templates/dcim/devicetype.html:14 templates/dcim/inventoryitem.html:44 -#: templates/dcim/manufacturer.html:33 templates/dcim/modulebay.html:62 -#: templates/dcim/moduletype.html:25 templates/dcim/platform.html:37 -#: templates/dcim/racktype.html:16 +#: 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/tables/modules.py:60 +#: 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/templates/dcim/manufacturer.html:33 +#: netbox/templates/dcim/modulebay.html:62 +#: netbox/templates/dcim/moduletype.html:25 +#: netbox/templates/dcim/platform.html:37 +#: netbox/templates/dcim/racktype.html:16 msgid "Manufacturer" msgstr "Fabricante" -#: dcim/forms/bulk_edit.py:229 dcim/forms/bulk_edit.py:372 -#: dcim/forms/bulk_import.py:191 dcim/forms/bulk_import.py:263 -#: dcim/forms/filtersets.py:255 -#: templates/dcim/inc/panels/racktype_dimensions.html:6 +#: 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/templates/dcim/inc/panels/racktype_dimensions.html:6 msgid "Form factor" msgstr "Formato físico" -#: dcim/forms/bulk_edit.py:234 dcim/forms/bulk_edit.py:377 -#: dcim/forms/bulk_import.py:199 dcim/forms/bulk_import.py:266 -#: dcim/forms/filtersets.py:260 -#: templates/dcim/inc/panels/racktype_dimensions.html:10 +#: 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/templates/dcim/inc/panels/racktype_dimensions.html:10 msgid "Width" msgstr "Largura" -#: dcim/forms/bulk_edit.py:240 dcim/forms/bulk_edit.py:383 -#: templates/dcim/devicetype.html:37 +#: netbox/dcim/forms/bulk_edit.py:241 netbox/dcim/forms/bulk_edit.py:389 +#: netbox/dcim/forms/bulk_import.py:280 +#: netbox/templates/dcim/devicetype.html:37 msgid "Height (U)" msgstr "Altura (U)" -#: dcim/forms/bulk_edit.py:249 dcim/forms/bulk_edit.py:388 -#: dcim/forms/filtersets.py:274 +#: netbox/dcim/forms/bulk_edit.py:250 netbox/dcim/forms/bulk_edit.py:394 +#: netbox/dcim/forms/filtersets.py:274 msgid "Descending units" msgstr "Unidades descendentes" -#: dcim/forms/bulk_edit.py:252 dcim/forms/bulk_edit.py:391 +#: netbox/dcim/forms/bulk_edit.py:253 netbox/dcim/forms/bulk_edit.py:397 msgid "Outer width" msgstr "Largura externa" -#: dcim/forms/bulk_edit.py:257 dcim/forms/bulk_edit.py:396 +#: netbox/dcim/forms/bulk_edit.py:258 netbox/dcim/forms/bulk_edit.py:402 msgid "Outer depth" msgstr "Profundidade externa" -#: dcim/forms/bulk_edit.py:262 dcim/forms/bulk_edit.py:401 -#: dcim/forms/bulk_import.py:204 dcim/forms/bulk_import.py:271 +#: 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 msgid "Outer unit" msgstr "Unidade externa" -#: dcim/forms/bulk_edit.py:267 dcim/forms/bulk_edit.py:406 +#: netbox/dcim/forms/bulk_edit.py:268 netbox/dcim/forms/bulk_edit.py:412 msgid "Mounting depth" msgstr "Profundidade de montagem" -#: dcim/forms/bulk_edit.py:272 dcim/forms/bulk_edit.py:299 -#: dcim/forms/bulk_edit.py:416 dcim/forms/bulk_edit.py:446 -#: dcim/forms/bulk_edit.py:529 dcim/forms/bulk_edit.py:552 -#: dcim/forms/bulk_edit.py:573 dcim/forms/bulk_edit.py:595 -#: dcim/forms/bulk_import.py:384 dcim/forms/bulk_import.py:416 -#: dcim/forms/filtersets.py:285 dcim/forms/filtersets.py:307 -#: dcim/forms/filtersets.py:327 dcim/forms/filtersets.py:401 -#: dcim/forms/filtersets.py:488 dcim/forms/filtersets.py:594 -#: dcim/forms/filtersets.py:613 dcim/forms/filtersets.py:674 -#: dcim/forms/model_forms.py:221 dcim/forms/model_forms.py:298 -#: dcim/tables/devicetypes.py:106 dcim/tables/modules.py:35 -#: dcim/tables/racks.py:74 dcim/tables/racks.py:172 -#: extras/forms/bulk_edit.py:53 extras/forms/bulk_edit.py:133 -#: extras/forms/bulk_edit.py:183 extras/forms/bulk_edit.py:288 -#: extras/forms/filtersets.py:64 extras/forms/filtersets.py:156 -#: extras/forms/filtersets.py:243 ipam/forms/bulk_edit.py:190 -#: templates/dcim/device.html:324 templates/dcim/devicetype.html:49 -#: templates/dcim/moduletype.html:45 templates/dcim/rack.html:81 -#: templates/dcim/racktype.html:41 templates/extras/configcontext.html:17 -#: templates/extras/customlink.html:25 templates/extras/savedfilter.html:33 -#: templates/ipam/role.html:30 +#: netbox/dcim/forms/bulk_edit.py: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/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/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/racktype.html:41 +#: netbox/templates/extras/configcontext.html:17 +#: netbox/templates/extras/customlink.html:25 +#: netbox/templates/extras/savedfilter.html:33 +#: netbox/templates/ipam/role.html:30 msgid "Weight" msgstr "Peso" -#: dcim/forms/bulk_edit.py:277 dcim/forms/bulk_edit.py:421 -#: dcim/forms/filtersets.py:290 +#: netbox/dcim/forms/bulk_edit.py:278 netbox/dcim/forms/bulk_edit.py:427 +#: netbox/dcim/forms/filtersets.py:290 msgid "Max weight" msgstr "Peso máximo" -#: dcim/forms/bulk_edit.py:282 dcim/forms/bulk_edit.py:426 -#: dcim/forms/bulk_edit.py:534 dcim/forms/bulk_edit.py:578 -#: dcim/forms/bulk_import.py:210 dcim/forms/bulk_import.py:283 -#: dcim/forms/bulk_import.py:389 dcim/forms/bulk_import.py:421 -#: dcim/forms/filtersets.py:295 dcim/forms/filtersets.py:598 -#: dcim/forms/filtersets.py:678 +#: 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 msgid "Weight unit" msgstr "Unidade de peso" -#: dcim/forms/bulk_edit.py:296 dcim/forms/filtersets.py:305 -#: dcim/forms/model_forms.py:217 dcim/forms/model_forms.py:256 -#: templates/dcim/rack.html:45 templates/dcim/racktype.html:13 +#: 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/templates/dcim/rack.html:45 netbox/templates/dcim/racktype.html:13 msgid "Rack Type" msgstr "Tipo de Rack" -#: dcim/forms/bulk_edit.py:298 dcim/forms/model_forms.py:220 -#: dcim/forms/model_forms.py:297 +#: netbox/dcim/forms/bulk_edit.py:299 netbox/dcim/forms/model_forms.py:220 +#: netbox/dcim/forms/model_forms.py:297 msgid "Outer Dimensions" msgstr "Dimensões externas" -#: dcim/forms/bulk_edit.py:301 dcim/forms/model_forms.py:222 -#: dcim/forms/model_forms.py:299 templates/dcim/device.html:315 -#: templates/dcim/inc/panels/racktype_dimensions.html:3 +#: 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/templates/dcim/inc/panels/racktype_dimensions.html:3 msgid "Dimensions" msgstr "Dimensões" -#: dcim/forms/bulk_edit.py:303 dcim/forms/filtersets.py:306 -#: dcim/forms/filtersets.py:326 dcim/forms/model_forms.py:224 -#: templates/dcim/inc/panels/racktype_numbering.html:3 +#: 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/templates/dcim/inc/panels/racktype_numbering.html:3 msgid "Numbering" msgstr "Numeração" -#: dcim/forms/bulk_edit.py:357 dcim/forms/bulk_edit.py:1262 -#: dcim/forms/bulk_edit.py:1655 dcim/forms/bulk_import.py:253 -#: dcim/forms/bulk_import.py:1076 dcim/forms/filtersets.py:367 -#: dcim/forms/filtersets.py:777 dcim/forms/filtersets.py:1534 -#: dcim/forms/model_forms.py:251 dcim/forms/model_forms.py:1070 -#: dcim/forms/model_forms.py:1510 dcim/forms/object_import.py:181 -#: dcim/tables/devices.py:169 dcim/tables/devices.py:809 -#: dcim/tables/devices.py:937 dcim/tables/devicetypes.py:304 -#: dcim/tables/racks.py:129 extras/filtersets.py:552 -#: ipam/forms/bulk_edit.py:261 ipam/forms/bulk_edit.py:311 -#: ipam/forms/bulk_edit.py:359 ipam/forms/bulk_edit.py:511 -#: ipam/forms/bulk_import.py:197 ipam/forms/bulk_import.py:262 -#: ipam/forms/bulk_import.py:298 ipam/forms/bulk_import.py:455 -#: ipam/forms/filtersets.py:237 ipam/forms/filtersets.py:289 -#: ipam/forms/filtersets.py:360 ipam/forms/filtersets.py:509 -#: ipam/forms/model_forms.py:188 ipam/forms/model_forms.py:221 -#: ipam/forms/model_forms.py:250 ipam/forms/model_forms.py:643 -#: ipam/tables/ip.py:258 ipam/tables/ip.py:316 ipam/tables/ip.py:367 -#: ipam/tables/vlans.py:130 ipam/tables/vlans.py:235 -#: templates/dcim/device.html:182 -#: templates/dcim/inc/panels/inventory_items.html:20 -#: templates/dcim/interface.html:223 templates/dcim/inventoryitem.html:36 -#: templates/dcim/rack.html:49 templates/ipam/ipaddress.html:41 -#: templates/ipam/iprange.html:50 templates/ipam/prefix.html:77 -#: templates/ipam/role.html:19 templates/ipam/vlan.html:52 -#: templates/virtualization/virtualmachine.html:23 -#: templates/vpn/tunneltermination.html:17 -#: templates/wireless/inc/wirelesslink_interface.html:20 -#: tenancy/forms/bulk_edit.py:142 tenancy/forms/filtersets.py:107 -#: tenancy/forms/model_forms.py:137 tenancy/tables/contacts.py:102 -#: virtualization/forms/bulk_edit.py:145 -#: virtualization/forms/bulk_import.py:106 -#: virtualization/forms/filtersets.py:157 -#: virtualization/forms/model_forms.py:195 -#: virtualization/tables/virtualmachines.py:75 vpn/forms/bulk_edit.py:87 -#: vpn/forms/bulk_import.py:81 vpn/forms/filtersets.py:85 -#: vpn/forms/model_forms.py:78 vpn/forms/model_forms.py:113 -#: vpn/tables/tunnels.py:82 +#: netbox/dcim/forms/bulk_edit.py: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 "Função" -#: dcim/forms/bulk_edit.py:364 dcim/forms/bulk_edit.py:712 -#: dcim/forms/bulk_edit.py:764 templates/dcim/device.html:104 -#: templates/dcim/module.html:77 templates/dcim/modulebay.html:70 -#: templates/dcim/rack.html:57 templates/virtualization/virtualmachine.html:35 +#: netbox/dcim/forms/bulk_edit.py:363 netbox/dcim/forms/bulk_import.py:260 +#: netbox/dcim/forms/filtersets.py:380 +msgid "Rack type" +msgstr "Tipo de 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/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 "Número de Série" -#: dcim/forms/bulk_edit.py:367 dcim/forms/filtersets.py:387 -#: dcim/forms/filtersets.py:813 dcim/forms/filtersets.py:967 -#: dcim/forms/filtersets.py:1546 +#: 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 msgid "Asset tag" msgstr "Etiqueta de patrimônio" -#: dcim/forms/bulk_edit.py:411 dcim/forms/bulk_edit.py:524 -#: dcim/forms/bulk_edit.py:568 dcim/forms/bulk_edit.py:705 -#: dcim/forms/bulk_import.py:277 dcim/forms/bulk_import.py:410 -#: dcim/forms/bulk_import.py:580 dcim/forms/filtersets.py:280 -#: dcim/forms/filtersets.py:511 dcim/forms/filtersets.py:669 -#: dcim/forms/filtersets.py:804 templates/dcim/device.html:98 -#: templates/dcim/devicetype.html:65 templates/dcim/moduletype.html:41 -#: templates/dcim/rack.html:65 templates/dcim/racktype.html:28 +#: 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/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 "Fluxo de Ar" -#: dcim/forms/bulk_edit.py:440 dcim/forms/bulk_edit.py:910 -#: dcim/forms/bulk_import.py:322 dcim/forms/bulk_import.py:325 -#: dcim/forms/bulk_import.py:553 dcim/forms/bulk_import.py:1358 -#: dcim/forms/bulk_import.py:1362 dcim/forms/filtersets.py:104 -#: dcim/forms/filtersets.py:324 dcim/forms/filtersets.py:405 -#: dcim/forms/filtersets.py:419 dcim/forms/filtersets.py:457 -#: dcim/forms/filtersets.py:772 dcim/forms/filtersets.py:1035 -#: dcim/forms/filtersets.py:1167 dcim/forms/model_forms.py:264 -#: dcim/forms/model_forms.py:306 dcim/forms/model_forms.py:479 -#: dcim/forms/model_forms.py:755 dcim/forms/object_create.py:400 -#: dcim/tables/devices.py:161 dcim/tables/power.py:70 dcim/tables/racks.py:217 -#: ipam/forms/filtersets.py:442 templates/dcim/device.html:30 -#: templates/dcim/inc/cable_termination.html:16 -#: templates/dcim/powerfeed.html:28 templates/dcim/rack.html:13 -#: templates/dcim/rack/base.html:4 templates/dcim/rackreservation.html:19 -#: templates/dcim/rackreservation.html:36 -#: virtualization/forms/model_forms.py:113 +#: netbox/dcim/forms/bulk_edit.py: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/templates/dcim/device.html:30 +#: netbox/templates/dcim/inc/cable_termination.html:16 +#: netbox/templates/dcim/powerfeed.html:28 netbox/templates/dcim/rack.html:13 +#: netbox/templates/dcim/rack/base.html:4 +#: netbox/templates/dcim/rackreservation.html:19 +#: netbox/templates/dcim/rackreservation.html:36 +#: netbox/virtualization/forms/model_forms.py:113 msgid "Rack" msgstr "Rack" -#: dcim/forms/bulk_edit.py:444 dcim/forms/bulk_edit.py:730 -#: dcim/forms/filtersets.py:325 dcim/forms/filtersets.py:398 -#: dcim/forms/filtersets.py:481 dcim/forms/filtersets.py:608 -#: dcim/forms/filtersets.py:721 dcim/forms/filtersets.py:942 -#: dcim/forms/model_forms.py:670 dcim/forms/model_forms.py:1580 -#: templates/dcim/device_edit.html:20 +#: 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/templates/dcim/device_edit.html:20 msgid "Hardware" msgstr "Hardware" -#: dcim/forms/bulk_edit.py:500 dcim/forms/bulk_import.py:377 -#: dcim/forms/filtersets.py:499 dcim/forms/model_forms.py:353 +#: 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 msgid "Default platform" msgstr "Plataforma padrão" -#: dcim/forms/bulk_edit.py:505 dcim/forms/bulk_edit.py:564 -#: dcim/forms/filtersets.py:502 dcim/forms/filtersets.py:622 +#: 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 msgid "Part number" msgstr "Part number" -#: dcim/forms/bulk_edit.py:509 +#: netbox/dcim/forms/bulk_edit.py:515 msgid "U height" msgstr "Altura em U" -#: dcim/forms/bulk_edit.py:521 dcim/tables/devicetypes.py:102 +#: netbox/dcim/forms/bulk_edit.py:527 netbox/dcim/tables/devicetypes.py:102 msgid "Exclude from utilization" msgstr "Excluir da utilização" -#: dcim/forms/bulk_edit.py:550 dcim/forms/model_forms.py:368 -#: dcim/tables/devicetypes.py:77 templates/dcim/device.html:88 -#: templates/dcim/devicebay.html:52 templates/dcim/module.html:61 +#: 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/templates/dcim/devicebay.html:52 +#: netbox/templates/dcim/module.html:61 msgid "Device Type" msgstr "Tipo de Dispositivo" -#: dcim/forms/bulk_edit.py:592 dcim/forms/model_forms.py:401 -#: dcim/tables/modules.py:17 dcim/tables/modules.py:65 -#: templates/dcim/module.html:65 templates/dcim/modulebay.html:66 -#: templates/dcim/moduletype.html:22 +#: 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/templates/dcim/module.html:65 +#: netbox/templates/dcim/modulebay.html:66 +#: netbox/templates/dcim/moduletype.html:22 msgid "Module Type" msgstr "Tipo de Módulo" -#: dcim/forms/bulk_edit.py:596 dcim/forms/model_forms.py:371 -#: dcim/forms/model_forms.py:402 templates/dcim/devicetype.html:11 +#: netbox/dcim/forms/bulk_edit.py:602 netbox/dcim/forms/model_forms.py:371 +#: netbox/dcim/forms/model_forms.py:402 +#: netbox/templates/dcim/devicetype.html:11 msgid "Chassis" msgstr "Chassi" -#: dcim/forms/bulk_edit.py:610 dcim/models/devices.py:484 -#: dcim/tables/devices.py:67 +#: netbox/dcim/forms/bulk_edit.py:616 netbox/dcim/models/devices.py:484 +#: netbox/dcim/tables/devices.py:67 msgid "VM role" msgstr "Função da VM" -#: dcim/forms/bulk_edit.py:613 dcim/forms/bulk_edit.py:637 -#: dcim/forms/bulk_edit.py:720 dcim/forms/bulk_import.py:434 -#: dcim/forms/bulk_import.py:438 dcim/forms/bulk_import.py:457 -#: dcim/forms/bulk_import.py:461 dcim/forms/bulk_import.py:586 -#: dcim/forms/bulk_import.py:590 dcim/forms/filtersets.py:689 -#: dcim/forms/filtersets.py:705 dcim/forms/filtersets.py:823 -#: dcim/forms/model_forms.py:415 dcim/forms/model_forms.py:441 -#: dcim/forms/model_forms.py:555 virtualization/forms/bulk_import.py:132 -#: virtualization/forms/bulk_import.py:133 -#: virtualization/forms/filtersets.py:188 -#: virtualization/forms/model_forms.py:215 +#: 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 msgid "Config template" msgstr "Modelo de configuração" -#: dcim/forms/bulk_edit.py:661 dcim/forms/bulk_edit.py:1061 -#: dcim/forms/bulk_import.py:492 dcim/forms/filtersets.py:114 -#: dcim/forms/model_forms.py:501 dcim/forms/model_forms.py:872 -#: dcim/forms/model_forms.py:889 extras/filtersets.py:547 +#: 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 msgid "Device type" msgstr "Tipo de dispositivo" -#: dcim/forms/bulk_edit.py:672 dcim/forms/bulk_import.py:473 -#: dcim/forms/filtersets.py:119 dcim/forms/model_forms.py:509 +#: 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 msgid "Device role" msgstr "Função do dispositivo" -#: dcim/forms/bulk_edit.py:695 dcim/forms/bulk_import.py:498 -#: dcim/forms/filtersets.py:796 dcim/forms/model_forms.py:451 -#: dcim/forms/model_forms.py:513 dcim/tables/devices.py:182 -#: extras/filtersets.py:563 templates/dcim/device.html:186 -#: templates/dcim/platform.html:26 -#: templates/virtualization/virtualmachine.html:27 -#: virtualization/forms/bulk_edit.py:160 -#: virtualization/forms/bulk_import.py:122 -#: virtualization/forms/filtersets.py:168 -#: virtualization/forms/model_forms.py:203 -#: virtualization/tables/virtualmachines.py:79 +#: 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/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 msgid "Platform" msgstr "Plataforma" -#: dcim/forms/bulk_edit.py:728 dcim/forms/bulk_edit.py:1281 -#: dcim/forms/bulk_edit.py:1650 dcim/forms/bulk_edit.py:1696 -#: dcim/forms/bulk_import.py:641 dcim/forms/bulk_import.py:703 -#: dcim/forms/bulk_import.py:729 dcim/forms/bulk_import.py:755 -#: dcim/forms/bulk_import.py:775 dcim/forms/bulk_import.py:828 -#: dcim/forms/bulk_import.py:946 dcim/forms/bulk_import.py:994 -#: dcim/forms/bulk_import.py:1011 dcim/forms/bulk_import.py:1023 -#: dcim/forms/bulk_import.py:1071 dcim/forms/bulk_import.py:1422 -#: dcim/forms/connections.py:24 dcim/forms/filtersets.py:131 -#: dcim/forms/filtersets.py:921 dcim/forms/filtersets.py:1051 -#: dcim/forms/filtersets.py:1242 dcim/forms/filtersets.py:1267 -#: dcim/forms/filtersets.py:1291 dcim/forms/filtersets.py:1311 -#: dcim/forms/filtersets.py:1334 dcim/forms/filtersets.py:1444 -#: dcim/forms/filtersets.py:1469 dcim/forms/filtersets.py:1493 -#: dcim/forms/filtersets.py:1511 dcim/forms/filtersets.py:1528 -#: dcim/forms/filtersets.py:1592 dcim/forms/filtersets.py:1616 -#: dcim/forms/filtersets.py:1640 dcim/forms/model_forms.py:633 -#: dcim/forms/model_forms.py:849 dcim/forms/model_forms.py:1208 -#: dcim/forms/model_forms.py:1664 dcim/forms/object_create.py:257 -#: dcim/tables/connections.py:22 dcim/tables/connections.py:41 -#: dcim/tables/connections.py:60 dcim/tables/devices.py:285 -#: dcim/tables/devices.py:371 dcim/tables/devices.py:412 -#: dcim/tables/devices.py:454 dcim/tables/devices.py:505 -#: dcim/tables/devices.py:597 dcim/tables/devices.py:697 -#: dcim/tables/devices.py:754 dcim/tables/devices.py:801 -#: dcim/tables/devices.py:861 dcim/tables/devices.py:930 -#: dcim/tables/devices.py:1057 dcim/tables/modules.py:52 -#: extras/forms/filtersets.py:321 ipam/forms/bulk_import.py:304 -#: ipam/forms/bulk_import.py:481 ipam/forms/filtersets.py:551 -#: ipam/forms/model_forms.py:319 ipam/forms/model_forms.py:679 -#: ipam/forms/model_forms.py:712 ipam/forms/model_forms.py:738 -#: ipam/tables/vlans.py:180 templates/dcim/consoleport.html:20 -#: templates/dcim/consoleserverport.html:20 templates/dcim/device.html:15 -#: templates/dcim/device.html:130 templates/dcim/device_edit.html:10 -#: templates/dcim/devicebay.html:20 templates/dcim/devicebay.html:48 -#: templates/dcim/frontport.html:20 templates/dcim/interface.html:30 -#: templates/dcim/interface.html:161 templates/dcim/inventoryitem.html:20 -#: templates/dcim/module.html:57 templates/dcim/modulebay.html:20 -#: templates/dcim/poweroutlet.html:20 templates/dcim/powerport.html:20 -#: templates/dcim/rearport.html:20 templates/dcim/virtualchassis.html:65 -#: templates/dcim/virtualchassis_edit.html:51 -#: templates/dcim/virtualdevicecontext.html:22 -#: templates/virtualization/virtualmachine.html:114 -#: templates/vpn/tunneltermination.html:23 -#: templates/wireless/inc/wirelesslink_interface.html:6 -#: virtualization/filtersets.py:167 virtualization/forms/bulk_edit.py:137 -#: virtualization/forms/bulk_import.py:99 -#: virtualization/forms/filtersets.py:128 -#: virtualization/forms/model_forms.py:185 -#: virtualization/tables/virtualmachines.py:71 vpn/choices.py:44 -#: vpn/forms/bulk_import.py:86 vpn/forms/bulk_import.py:283 -#: vpn/forms/filtersets.py:275 vpn/forms/model_forms.py:90 -#: vpn/forms/model_forms.py:125 vpn/forms/model_forms.py:236 -#: vpn/forms/model_forms.py:453 wireless/forms/model_forms.py:99 -#: wireless/forms/model_forms.py:141 wireless/tables/wirelesslan.py:75 -msgid "Device" -msgstr "Dispositivo" - -#: dcim/forms/bulk_edit.py:731 templates/extras/dashboard/widget_config.html:7 -#: virtualization/forms/bulk_edit.py:191 -msgid "Configuration" -msgstr "Configuração" - -#: dcim/forms/bulk_edit.py:745 dcim/forms/bulk_import.py:653 -#: dcim/forms/model_forms.py:647 dcim/forms/model_forms.py:897 -msgid "Module type" -msgstr "Tipo de módulo" - -#: dcim/forms/bulk_edit.py:799 dcim/forms/bulk_edit.py:984 -#: dcim/forms/bulk_edit.py:1003 dcim/forms/bulk_edit.py:1026 -#: dcim/forms/bulk_edit.py:1068 dcim/forms/bulk_edit.py:1112 -#: dcim/forms/bulk_edit.py:1163 dcim/forms/bulk_edit.py:1190 -#: dcim/forms/bulk_edit.py:1217 dcim/forms/bulk_edit.py:1235 -#: dcim/forms/bulk_edit.py:1253 dcim/forms/filtersets.py:67 -#: dcim/forms/object_create.py:46 templates/dcim/cable.html:32 -#: templates/dcim/consoleport.html:32 templates/dcim/consoleserverport.html:32 -#: templates/dcim/devicebay.html:28 templates/dcim/frontport.html:32 -#: templates/dcim/inc/panels/inventory_items.html:19 -#: templates/dcim/interface.html:42 templates/dcim/inventoryitem.html:32 -#: templates/dcim/modulebay.html:34 templates/dcim/poweroutlet.html:32 -#: templates/dcim/powerport.html:32 templates/dcim/rearport.html:32 -#: templates/extras/customfield.html:26 templates/generic/bulk_import.html:162 -msgid "Label" -msgstr "Rótulo" - -#: dcim/forms/bulk_edit.py:808 dcim/forms/filtersets.py:1068 -#: templates/dcim/cable.html:50 -msgid "Length" -msgstr "Comprimento" - -#: dcim/forms/bulk_edit.py:813 dcim/forms/bulk_import.py:1226 -#: dcim/forms/bulk_import.py:1229 dcim/forms/filtersets.py:1072 -msgid "Length unit" -msgstr "Unidade de comprimento" - -#: dcim/forms/bulk_edit.py:837 templates/dcim/virtualchassis.html:23 -msgid "Domain" -msgstr "Domínio" - -#: dcim/forms/bulk_edit.py:905 dcim/forms/bulk_import.py:1345 -#: dcim/forms/filtersets.py:1158 dcim/forms/model_forms.py:750 -msgid "Power panel" -msgstr "Quadro de alimentação" - -#: dcim/forms/bulk_edit.py:927 dcim/forms/bulk_import.py:1381 -#: dcim/forms/filtersets.py:1180 templates/dcim/powerfeed.html:83 -msgid "Supply" -msgstr "Tipo de Alimentação" - -#: dcim/forms/bulk_edit.py:933 dcim/forms/bulk_import.py:1386 -#: dcim/forms/filtersets.py:1185 templates/dcim/powerfeed.html:95 -msgid "Phase" -msgstr "Fase" - -#: dcim/forms/bulk_edit.py:939 dcim/forms/filtersets.py:1190 -#: templates/dcim/powerfeed.html:87 -msgid "Voltage" -msgstr "Tensão" - -#: dcim/forms/bulk_edit.py:943 dcim/forms/filtersets.py:1194 -#: templates/dcim/powerfeed.html:91 -msgid "Amperage" -msgstr "Corrente" - -#: dcim/forms/bulk_edit.py:947 dcim/forms/filtersets.py:1198 -msgid "Max utilization" -msgstr "Utilização máxima" - -#: dcim/forms/bulk_edit.py:1036 -msgid "Maximum draw" -msgstr "Consumo máximo" - -#: dcim/forms/bulk_edit.py:1039 dcim/models/device_component_templates.py:282 -#: dcim/models/device_components.py:356 -msgid "Maximum power draw (watts)" -msgstr "Consumo máximo de energia (Watts)" - -#: dcim/forms/bulk_edit.py:1042 -msgid "Allocated draw" -msgstr "Consumo alocado" - -#: dcim/forms/bulk_edit.py:1045 dcim/models/device_component_templates.py:289 -#: dcim/models/device_components.py:363 -msgid "Allocated power draw (watts)" -msgstr "Consumo de energia alocado (Watts)" - -#: dcim/forms/bulk_edit.py:1078 dcim/forms/bulk_import.py:786 -#: dcim/forms/model_forms.py:953 dcim/forms/model_forms.py:1278 -#: dcim/forms/model_forms.py:1567 dcim/forms/object_import.py:55 -msgid "Power port" -msgstr "Porta de alimentação" - -#: dcim/forms/bulk_edit.py:1083 dcim/forms/bulk_import.py:793 -msgid "Feed leg" -msgstr "Ramal de alimentação" - -#: dcim/forms/bulk_edit.py:1129 dcim/forms/bulk_edit.py:1440 -msgid "Management only" -msgstr "Somente gerenciamento" - -#: dcim/forms/bulk_edit.py:1139 dcim/forms/bulk_edit.py:1446 -#: dcim/forms/bulk_import.py:876 dcim/forms/filtersets.py:1394 -#: dcim/forms/object_import.py:90 -#: dcim/models/device_component_templates.py:437 -#: dcim/models/device_components.py:670 -msgid "PoE mode" -msgstr "Modo de Operação" - -#: dcim/forms/bulk_edit.py:1145 dcim/forms/bulk_edit.py:1452 -#: dcim/forms/bulk_import.py:882 dcim/forms/filtersets.py:1399 -#: dcim/forms/object_import.py:95 -#: dcim/models/device_component_templates.py:443 -#: dcim/models/device_components.py:676 -msgid "PoE type" -msgstr "Tipo de PoE" - -#: dcim/forms/bulk_edit.py:1151 dcim/forms/filtersets.py:1404 -#: dcim/forms/object_import.py:100 -msgid "Wireless role" -msgstr "Função do Wireless" - -#: dcim/forms/bulk_edit.py:1288 dcim/forms/model_forms.py:669 -#: dcim/forms/model_forms.py:1223 dcim/tables/devices.py:313 -#: templates/dcim/consoleport.html:24 templates/dcim/consoleserverport.html:24 -#: templates/dcim/frontport.html:24 templates/dcim/interface.html:34 -#: templates/dcim/module.html:54 templates/dcim/modulebay.html:26 -#: templates/dcim/modulebay.html:58 templates/dcim/poweroutlet.html:24 -#: templates/dcim/powerport.html:24 templates/dcim/rearport.html:24 -msgid "Module" -msgstr "Módulo" - -#: dcim/forms/bulk_edit.py:1420 dcim/tables/devices.py:665 -#: templates/dcim/interface.html:110 -msgid "LAG" -msgstr "LAG" - -#: dcim/forms/bulk_edit.py:1425 dcim/forms/model_forms.py:1305 -msgid "Virtual device contexts" -msgstr "Contextos de dispositivos virtuais" - -#: dcim/forms/bulk_edit.py:1431 dcim/forms/bulk_import.py:714 -#: dcim/forms/bulk_import.py:740 dcim/forms/filtersets.py:1252 -#: dcim/forms/filtersets.py:1277 dcim/forms/filtersets.py:1358 -#: dcim/tables/devices.py:610 -#: templates/circuits/inc/circuit_termination_fields.html:67 -#: templates/dcim/consoleport.html:40 templates/dcim/consoleserverport.html:40 -msgid "Speed" -msgstr "Velocidade" - -#: dcim/forms/bulk_edit.py:1460 dcim/forms/bulk_import.py:885 -#: templates/vpn/ikepolicy.html:25 templates/vpn/ipsecprofile.html:21 -#: templates/vpn/ipsecprofile.html:48 virtualization/forms/bulk_edit.py:233 -#: virtualization/forms/bulk_import.py:165 vpn/forms/bulk_edit.py:146 -#: vpn/forms/bulk_edit.py:232 vpn/forms/bulk_import.py:176 -#: vpn/forms/bulk_import.py:234 vpn/forms/filtersets.py:135 -#: vpn/forms/filtersets.py:178 vpn/forms/filtersets.py:192 -#: vpn/tables/crypto.py:64 vpn/tables/crypto.py:162 -msgid "Mode" -msgstr "Modo" - -#: dcim/forms/bulk_edit.py:1468 dcim/forms/model_forms.py:1354 -#: ipam/forms/bulk_import.py:178 ipam/forms/filtersets.py:498 -#: ipam/models/vlans.py:84 virtualization/forms/bulk_edit.py:240 -#: virtualization/forms/model_forms.py:321 -msgid "VLAN group" -msgstr "Grupo de VLANs" - -#: dcim/forms/bulk_edit.py:1476 dcim/forms/model_forms.py:1360 -#: dcim/tables/devices.py:579 virtualization/forms/bulk_edit.py:248 -#: virtualization/forms/model_forms.py:326 -msgid "Untagged VLAN" -msgstr "VLAN Não Tagueada" - -#: dcim/forms/bulk_edit.py:1484 dcim/forms/model_forms.py:1369 -#: dcim/tables/devices.py:585 virtualization/forms/bulk_edit.py:256 -#: virtualization/forms/model_forms.py:335 -msgid "Tagged VLANs" -msgstr "VLANs Tagueadas" - -#: dcim/forms/bulk_edit.py:1494 dcim/forms/model_forms.py:1341 -msgid "Wireless LAN group" -msgstr "Grupo da Rede Wireless" - -#: dcim/forms/bulk_edit.py:1499 dcim/forms/model_forms.py:1346 -#: dcim/tables/devices.py:619 netbox/navigation/menu.py:146 -#: templates/dcim/interface.html:280 wireless/tables/wirelesslan.py:24 -msgid "Wireless LANs" -msgstr "Redes Wireless" - -#: dcim/forms/bulk_edit.py:1508 dcim/forms/filtersets.py:1328 -#: dcim/forms/model_forms.py:1390 ipam/forms/bulk_edit.py:286 -#: ipam/forms/bulk_edit.py:378 ipam/forms/filtersets.py:169 -#: templates/dcim/interface.html:122 templates/ipam/prefix.html:95 -#: virtualization/forms/model_forms.py:349 -msgid "Addressing" -msgstr "Endereçamento" - -#: dcim/forms/bulk_edit.py:1509 dcim/forms/filtersets.py:720 -#: dcim/forms/model_forms.py:1391 virtualization/forms/model_forms.py:350 -msgid "Operation" -msgstr "Operação" - -#: dcim/forms/bulk_edit.py:1510 dcim/forms/filtersets.py:1329 -#: dcim/forms/model_forms.py:987 dcim/forms/model_forms.py:1393 -msgid "PoE" -msgstr "PoE" - -#: dcim/forms/bulk_edit.py:1511 dcim/forms/model_forms.py:1392 -#: templates/dcim/interface.html:99 virtualization/forms/bulk_edit.py:267 -#: virtualization/forms/model_forms.py:351 -msgid "Related Interfaces" -msgstr "Interfaces Relacionadas" - -#: dcim/forms/bulk_edit.py:1512 dcim/forms/model_forms.py:1394 -#: virtualization/forms/bulk_edit.py:268 -#: virtualization/forms/model_forms.py:352 -msgid "802.1Q Switching" -msgstr "Comutação 802.1Q" - -#: dcim/forms/bulk_edit.py:1574 dcim/forms/bulk_edit.py:1576 -msgid "Interface mode must be specified to assign VLANs" -msgstr "O modo de interface deve ser especificado para atribuir VLANs" - -#: dcim/forms/bulk_edit.py:1581 dcim/forms/common.py:50 -msgid "An access interface cannot have tagged VLANs assigned." -msgstr "Uma interface de acesso não pode ter VLANs tagueadas." - -#: dcim/forms/bulk_import.py:64 -msgid "Name of parent region" -msgstr "Nome da região principal" - -#: dcim/forms/bulk_import.py:78 -msgid "Name of parent site group" -msgstr "Nome do grupo de sites principais" - -#: dcim/forms/bulk_import.py:97 -msgid "Assigned region" -msgstr "Região designada" - -#: dcim/forms/bulk_import.py:104 tenancy/forms/bulk_import.py:44 -#: tenancy/forms/bulk_import.py:85 wireless/forms/bulk_import.py:40 -msgid "Assigned group" -msgstr "Grupo designado" - -#: dcim/forms/bulk_import.py:123 -msgid "available options" -msgstr "opções disponíveis" - -#: dcim/forms/bulk_import.py:134 dcim/forms/bulk_import.py:543 -#: dcim/forms/bulk_import.py:1342 ipam/forms/bulk_import.py:175 -#: ipam/forms/bulk_import.py:433 virtualization/forms/bulk_import.py:63 -#: virtualization/forms/bulk_import.py:89 -msgid "Assigned site" -msgstr "Site designado" - -#: dcim/forms/bulk_import.py:141 -msgid "Parent location" -msgstr "Localização principal" - -#: dcim/forms/bulk_import.py:143 -msgid "Location not found." -msgstr "Localização não encontrada." - -#: dcim/forms/bulk_import.py:185 -msgid "The manufacturer of this rack type" -msgstr "Fabricante deste tipo de rack" - -#: dcim/forms/bulk_import.py:196 -msgid "The lowest-numbered position in the rack" -msgstr "A numeração de posição mais baixa no rack" - -#: dcim/forms/bulk_import.py:201 dcim/forms/bulk_import.py:268 -msgid "Rail-to-rail width (in inches)" -msgstr "Largura de trilho a trilho (em polegadas)" - -#: dcim/forms/bulk_import.py:207 dcim/forms/bulk_import.py:274 -msgid "Unit for outer dimensions" -msgstr "Unidade para dimensões externas" - -#: dcim/forms/bulk_import.py:213 dcim/forms/bulk_import.py:286 -msgid "Unit for rack weights" -msgstr "Unidade de peso do rack" - -#: dcim/forms/bulk_import.py:245 -msgid "Name of assigned tenant" -msgstr "Nome do inquilino designado" - -#: dcim/forms/bulk_import.py:257 -msgid "Name of assigned role" -msgstr "Nome da função designada" - -#: dcim/forms/bulk_import.py:280 dcim/forms/bulk_import.py:413 -#: dcim/forms/bulk_import.py:583 -msgid "Airflow direction" -msgstr "Direção do fluxo de ar" - -#: dcim/forms/bulk_import.py:312 -msgid "Parent site" -msgstr "Site principal" - -#: dcim/forms/bulk_import.py:319 dcim/forms/bulk_import.py:1355 -msgid "Rack's location (if any)" -msgstr "Localização do rack (se houver)" - -#: dcim/forms/bulk_import.py:328 dcim/forms/model_forms.py:311 -#: dcim/tables/racks.py:222 templates/dcim/rackreservation.html:12 -#: templates/dcim/rackreservation.html:45 -msgid "Units" -msgstr "Unidades" - -#: dcim/forms/bulk_import.py:331 -msgid "Comma-separated list of individual unit numbers" -msgstr "Lista separada por vírgula de unidades individuais" - -#: dcim/forms/bulk_import.py:374 -msgid "The manufacturer which produces this device type" -msgstr "Fabricante que produz este tipo de dispositivo" - -#: dcim/forms/bulk_import.py:381 -msgid "The default platform for devices of this type (optional)" -msgstr "A plataforma padrão para dispositivos deste tipo (opcional)" - -#: dcim/forms/bulk_import.py:386 -msgid "Device weight" -msgstr "Peso do dispositivo" - -#: dcim/forms/bulk_import.py:392 -msgid "Unit for device weight" -msgstr "Unidade de peso do dispositivo" - -#: dcim/forms/bulk_import.py:418 -msgid "Module weight" -msgstr "Peso do módulo" - -#: dcim/forms/bulk_import.py:424 -msgid "Unit for module weight" -msgstr "Unidade de peso do módulo" - -#: dcim/forms/bulk_import.py:454 -msgid "Limit platform assignments to this manufacturer" -msgstr "Limitar as atribuições de plataforma a este fabricante" - -#: dcim/forms/bulk_import.py:476 dcim/forms/bulk_import.py:1425 -#: tenancy/forms/bulk_import.py:106 -msgid "Assigned role" -msgstr "Função designada" - -#: dcim/forms/bulk_import.py:489 -msgid "Device type manufacturer" -msgstr "Fabricante do tipo de dispositivo" - -#: dcim/forms/bulk_import.py:495 -msgid "Device type model" -msgstr "Modelo do tipo de dispositivo" - -#: dcim/forms/bulk_import.py:502 virtualization/forms/bulk_import.py:126 -msgid "Assigned platform" -msgstr "Plataforma designada" - -#: dcim/forms/bulk_import.py:510 dcim/forms/bulk_import.py:514 -#: dcim/forms/model_forms.py:536 -msgid "Virtual chassis" -msgstr "Chassi virtual" - -#: dcim/forms/bulk_import.py:517 dcim/forms/filtersets.py:728 -#: dcim/forms/filtersets.py:898 dcim/forms/model_forms.py:522 -#: dcim/tables/devices.py:202 extras/filtersets.py:596 -#: extras/forms/filtersets.py:322 ipam/forms/filtersets.py:415 -#: ipam/forms/filtersets.py:447 templates/dcim/device.html:239 -#: templates/virtualization/cluster.html:10 -#: templates/virtualization/virtualmachine.html:92 -#: templates/virtualization/virtualmachine.html:101 -#: virtualization/filtersets.py:157 virtualization/filtersets.py:277 -#: virtualization/forms/bulk_edit.py:129 -#: virtualization/forms/bulk_import.py:92 -#: virtualization/forms/filtersets.py:99 -#: virtualization/forms/filtersets.py:123 -#: virtualization/forms/filtersets.py:204 -#: virtualization/forms/model_forms.py:79 -#: virtualization/forms/model_forms.py:176 -#: virtualization/tables/virtualmachines.py:67 +#: 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/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 msgid "Cluster" msgstr "Cluster" -#: dcim/forms/bulk_import.py:521 +#: 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:52 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/templates/extras/dashboard/widget_config.html:7 +#: netbox/virtualization/forms/bulk_edit.py:191 +msgid "Configuration" +msgstr "Configuração" + +#: netbox/dcim/forms/bulk_edit.py:746 netbox/netbox/navigation/menu.py:243 +#: netbox/templates/dcim/device_edit.html:78 +msgid "Virtualization" +msgstr "Virtualização" + +#: 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 +msgid "Module type" +msgstr "Tipo de módulo" + +#: 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/object_create.py:46 netbox/templates/dcim/cable.html:32 +#: netbox/templates/dcim/consoleport.html:32 +#: netbox/templates/dcim/consoleserverport.html:32 +#: netbox/templates/dcim/devicebay.html:28 +#: netbox/templates/dcim/frontport.html:32 +#: netbox/templates/dcim/inc/panels/inventory_items.html:19 +#: netbox/templates/dcim/interface.html:42 +#: netbox/templates/dcim/inventoryitem.html:32 +#: netbox/templates/dcim/modulebay.html:34 +#: netbox/templates/dcim/poweroutlet.html:32 +#: netbox/templates/dcim/powerport.html:32 +#: netbox/templates/dcim/rearport.html:32 +#: netbox/templates/extras/customfield.html:26 +#: netbox/templates/generic/bulk_import.html:162 +msgid "Label" +msgstr "Rótulo" + +#: netbox/dcim/forms/bulk_edit.py:823 netbox/dcim/forms/filtersets.py:1068 +#: netbox/templates/dcim/cable.html:50 +msgid "Length" +msgstr "Comprimento" + +#: 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 +msgid "Length unit" +msgstr "Unidade de comprimento" + +#: netbox/dcim/forms/bulk_edit.py:852 +#: netbox/templates/dcim/virtualchassis.html:23 +msgid "Domain" +msgstr "Domínio" + +#: 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 +msgid "Power panel" +msgstr "Quadro de alimentação" + +#: 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 +msgid "Supply" +msgstr "Tipo de Alimentação" + +#: 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 +msgid "Phase" +msgstr "Fase" + +#: netbox/dcim/forms/bulk_edit.py:954 netbox/dcim/forms/filtersets.py:1190 +#: netbox/templates/dcim/powerfeed.html:87 +msgid "Voltage" +msgstr "Tensão" + +#: netbox/dcim/forms/bulk_edit.py:958 netbox/dcim/forms/filtersets.py:1194 +#: netbox/templates/dcim/powerfeed.html:91 +msgid "Amperage" +msgstr "Corrente" + +#: netbox/dcim/forms/bulk_edit.py:962 netbox/dcim/forms/filtersets.py:1198 +msgid "Max utilization" +msgstr "Utilização máxima" + +#: netbox/dcim/forms/bulk_edit.py:1051 +msgid "Maximum draw" +msgstr "Consumo máximo" + +#: netbox/dcim/forms/bulk_edit.py:1054 +#: netbox/dcim/models/device_component_templates.py:282 +#: netbox/dcim/models/device_components.py:356 +msgid "Maximum power draw (watts)" +msgstr "Consumo máximo de energia (Watts)" + +#: netbox/dcim/forms/bulk_edit.py:1057 +msgid "Allocated draw" +msgstr "Consumo alocado" + +#: netbox/dcim/forms/bulk_edit.py:1060 +#: netbox/dcim/models/device_component_templates.py:289 +#: netbox/dcim/models/device_components.py:363 +msgid "Allocated power draw (watts)" +msgstr "Consumo de energia alocado (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 +msgid "Power port" +msgstr "Porta de alimentação" + +#: netbox/dcim/forms/bulk_edit.py:1098 netbox/dcim/forms/bulk_import.py:815 +msgid "Feed leg" +msgstr "Ramal de alimentação" + +#: netbox/dcim/forms/bulk_edit.py:1144 netbox/dcim/forms/bulk_edit.py:1462 +msgid "Management only" +msgstr "Somente gerenciamento" + +#: 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/object_import.py:90 +#: netbox/dcim/models/device_component_templates.py:437 +#: netbox/dcim/models/device_components.py:670 +msgid "PoE mode" +msgstr "Modo de Operação" + +#: 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/object_import.py:95 +#: netbox/dcim/models/device_component_templates.py:443 +#: netbox/dcim/models/device_components.py:676 +msgid "PoE type" +msgstr "Tipo de PoE" + +#: netbox/dcim/forms/bulk_edit.py:1166 netbox/dcim/forms/filtersets.py:1404 +#: netbox/dcim/forms/object_import.py:100 +msgid "Wireless role" +msgstr "Função do 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/templates/dcim/consoleport.html:24 +#: netbox/templates/dcim/consoleserverport.html:24 +#: netbox/templates/dcim/frontport.html:24 +#: netbox/templates/dcim/interface.html:34 +#: netbox/templates/dcim/module.html:54 +#: netbox/templates/dcim/modulebay.html:26 +#: netbox/templates/dcim/modulebay.html:58 +#: netbox/templates/dcim/poweroutlet.html:24 +#: netbox/templates/dcim/powerport.html:24 +#: netbox/templates/dcim/rearport.html:24 +msgid "Module" +msgstr "Módulo" + +#: netbox/dcim/forms/bulk_edit.py:1442 netbox/dcim/tables/devices.py:665 +#: netbox/templates/dcim/interface.html:110 +msgid "LAG" +msgstr "LAG" + +#: netbox/dcim/forms/bulk_edit.py:1447 netbox/dcim/forms/model_forms.py:1312 +msgid "Virtual device contexts" +msgstr "Contextos de dispositivos virtuais" + +#: 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/templates/dcim/consoleport.html:40 +#: netbox/templates/dcim/consoleserverport.html:40 +msgid "Speed" +msgstr "Velocidade" + +#: netbox/dcim/forms/bulk_edit.py:1482 netbox/dcim/forms/bulk_import.py:907 +#: netbox/templates/vpn/ikepolicy.html:25 +#: netbox/templates/vpn/ipsecprofile.html:21 +#: netbox/templates/vpn/ipsecprofile.html:48 +#: netbox/virtualization/forms/bulk_edit.py:233 +#: netbox/virtualization/forms/bulk_import.py:165 +#: netbox/vpn/forms/bulk_edit.py:146 netbox/vpn/forms/bulk_edit.py:232 +#: netbox/vpn/forms/bulk_import.py:176 netbox/vpn/forms/bulk_import.py:234 +#: netbox/vpn/forms/filtersets.py:135 netbox/vpn/forms/filtersets.py:178 +#: netbox/vpn/forms/filtersets.py:192 netbox/vpn/tables/crypto.py:64 +#: netbox/vpn/tables/crypto.py:162 +msgid "Mode" +msgstr "Modo" + +#: 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 +msgid "VLAN group" +msgstr "Grupo de VLANs" + +#: 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 +msgid "Untagged VLAN" +msgstr "VLAN Não Tagueada" + +#: 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 "VLANs Tagueadas" + +#: netbox/dcim/forms/bulk_edit.py:1511 +msgid "Add tagged VLANs" +msgstr "Adicionar VLANs tagueadas" + +#: netbox/dcim/forms/bulk_edit.py:1520 +msgid "Remove tagged VLANs" +msgstr "Remover VLANs tagueadas" + +#: netbox/dcim/forms/bulk_edit.py:1536 netbox/dcim/forms/model_forms.py:1348 +msgid "Wireless LAN group" +msgstr "Grupo da Rede 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/wireless/tables/wirelesslan.py:24 +msgid "Wireless LANs" +msgstr "Redes 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 +msgid "Addressing" +msgstr "Endereçamento" + +#: 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 +msgid "Operation" +msgstr "Operação" + +#: 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 +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 +msgid "Related Interfaces" +msgstr "Interfaces Relacionadas" + +#: 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 +msgid "802.1Q Switching" +msgstr "Comutação 802.1Q" + +#: netbox/dcim/forms/bulk_edit.py:1558 +msgid "Add/Remove" +msgstr "Adicionar/Remover" + +#: netbox/dcim/forms/bulk_edit.py:1617 netbox/dcim/forms/bulk_edit.py:1619 +msgid "Interface mode must be specified to assign VLANs" +msgstr "O modo de interface deve ser especificado para atribuir VLANs" + +#: netbox/dcim/forms/bulk_edit.py:1624 netbox/dcim/forms/common.py:50 +msgid "An access interface cannot have tagged VLANs assigned." +msgstr "Uma interface de acesso não pode ter VLANs tagueadas." + +#: netbox/dcim/forms/bulk_import.py:64 +msgid "Name of parent region" +msgstr "Nome da região principal" + +#: netbox/dcim/forms/bulk_import.py:78 +msgid "Name of parent site group" +msgstr "Nome do grupo de sites principais" + +#: netbox/dcim/forms/bulk_import.py:97 +msgid "Assigned region" +msgstr "Região designada" + +#: netbox/dcim/forms/bulk_import.py:104 netbox/tenancy/forms/bulk_import.py:44 +#: netbox/tenancy/forms/bulk_import.py:85 +#: netbox/wireless/forms/bulk_import.py:40 +msgid "Assigned group" +msgstr "Grupo designado" + +#: netbox/dcim/forms/bulk_import.py:123 +msgid "available options" +msgstr "opções disponíveis" + +#: 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 +msgid "Assigned site" +msgstr "Site designado" + +#: netbox/dcim/forms/bulk_import.py:141 +msgid "Parent location" +msgstr "Localização principal" + +#: netbox/dcim/forms/bulk_import.py:143 +msgid "Location not found." +msgstr "Localização não encontrada." + +#: netbox/dcim/forms/bulk_import.py:185 +msgid "The manufacturer of this rack type" +msgstr "Fabricante deste tipo de rack" + +#: netbox/dcim/forms/bulk_import.py:196 +msgid "The lowest-numbered position in the rack" +msgstr "A numeração de posição mais baixa no rack" + +#: netbox/dcim/forms/bulk_import.py:201 netbox/dcim/forms/bulk_import.py:276 +msgid "Rail-to-rail width (in inches)" +msgstr "Largura de trilho a trilho (em polegadas)" + +#: netbox/dcim/forms/bulk_import.py:207 netbox/dcim/forms/bulk_import.py:286 +msgid "Unit for outer dimensions" +msgstr "Unidade para dimensões externas" + +#: netbox/dcim/forms/bulk_import.py:213 netbox/dcim/forms/bulk_import.py:298 +msgid "Unit for rack weights" +msgstr "Unidade de peso do rack" + +#: netbox/dcim/forms/bulk_import.py:245 +msgid "Name of assigned tenant" +msgstr "Nome do inquilino designado" + +#: netbox/dcim/forms/bulk_import.py:257 +msgid "Name of assigned role" +msgstr "Nome da função designada" + +#: netbox/dcim/forms/bulk_import.py:264 +msgid "Rack type model" +msgstr "Modelo do tipo de rack" + +#: netbox/dcim/forms/bulk_import.py:292 netbox/dcim/forms/bulk_import.py:435 +#: netbox/dcim/forms/bulk_import.py:605 +msgid "Airflow direction" +msgstr "Direção do fluxo de ar" + +#: netbox/dcim/forms/bulk_import.py:324 +msgid "Width must be set if not specifying a rack type." +msgstr "A largura deve ser definida se um tipo de rack não for especificado." + +#: netbox/dcim/forms/bulk_import.py:326 +msgid "U height must be set if not specifying a rack type." +msgstr "" +"A altura em U deve ser definida se um tipo de rack não for especificado." + +#: netbox/dcim/forms/bulk_import.py:334 +msgid "Parent site" +msgstr "Site principal" + +#: netbox/dcim/forms/bulk_import.py:341 netbox/dcim/forms/bulk_import.py:1377 +msgid "Rack's location (if any)" +msgstr "Localização do rack (se houver)" + +#: netbox/dcim/forms/bulk_import.py:350 netbox/dcim/forms/model_forms.py:311 +#: netbox/dcim/tables/racks.py:222 +#: netbox/templates/dcim/rackreservation.html:12 +#: netbox/templates/dcim/rackreservation.html:45 +msgid "Units" +msgstr "Unidades" + +#: netbox/dcim/forms/bulk_import.py:353 +msgid "Comma-separated list of individual unit numbers" +msgstr "Lista separada por vírgula de unidades individuais" + +#: netbox/dcim/forms/bulk_import.py:396 +msgid "The manufacturer which produces this device type" +msgstr "Fabricante que produz este tipo de dispositivo" + +#: netbox/dcim/forms/bulk_import.py:403 +msgid "The default platform for devices of this type (optional)" +msgstr "A plataforma padrão para dispositivos deste tipo (opcional)" + +#: netbox/dcim/forms/bulk_import.py:408 +msgid "Device weight" +msgstr "Peso do dispositivo" + +#: netbox/dcim/forms/bulk_import.py:414 +msgid "Unit for device weight" +msgstr "Unidade de peso do dispositivo" + +#: netbox/dcim/forms/bulk_import.py:440 +msgid "Module weight" +msgstr "Peso do módulo" + +#: netbox/dcim/forms/bulk_import.py:446 +msgid "Unit for module weight" +msgstr "Unidade de peso do módulo" + +#: netbox/dcim/forms/bulk_import.py:476 +msgid "Limit platform assignments to this manufacturer" +msgstr "Limitar as atribuições de plataforma a este fabricante" + +#: netbox/dcim/forms/bulk_import.py:498 netbox/dcim/forms/bulk_import.py:1447 +#: netbox/tenancy/forms/bulk_import.py:106 +msgid "Assigned role" +msgstr "Função designada" + +#: netbox/dcim/forms/bulk_import.py:511 +msgid "Device type manufacturer" +msgstr "Fabricante do tipo de dispositivo" + +#: netbox/dcim/forms/bulk_import.py:517 +msgid "Device type model" +msgstr "Modelo do tipo de dispositivo" + +#: netbox/dcim/forms/bulk_import.py:524 +#: netbox/virtualization/forms/bulk_import.py:126 +msgid "Assigned platform" +msgstr "Plataforma designada" + +#: netbox/dcim/forms/bulk_import.py:532 netbox/dcim/forms/bulk_import.py:536 +#: netbox/dcim/forms/model_forms.py:536 +msgid "Virtual chassis" +msgstr "Chassi virtual" + +#: netbox/dcim/forms/bulk_import.py:543 msgid "Virtualization cluster" msgstr "Cluster de virtualização" -#: dcim/forms/bulk_import.py:550 +#: netbox/dcim/forms/bulk_import.py:572 msgid "Assigned location (if any)" msgstr "Local designado (se houver)" -#: dcim/forms/bulk_import.py:557 +#: netbox/dcim/forms/bulk_import.py:579 msgid "Assigned rack (if any)" msgstr "Rack designado (se houver)" -#: dcim/forms/bulk_import.py:560 +#: netbox/dcim/forms/bulk_import.py:582 msgid "Face" msgstr "Face" -#: dcim/forms/bulk_import.py:563 +#: netbox/dcim/forms/bulk_import.py:585 msgid "Mounted rack face" msgstr "Face do rack em que está montado" -#: dcim/forms/bulk_import.py:570 +#: netbox/dcim/forms/bulk_import.py:592 msgid "Parent device (for child devices)" msgstr "Dispositivo pai (para dispositivos filhos)" -#: dcim/forms/bulk_import.py:573 +#: netbox/dcim/forms/bulk_import.py:595 msgid "Device bay" msgstr "Compartimento de dispositivos" -#: dcim/forms/bulk_import.py:577 +#: netbox/dcim/forms/bulk_import.py:599 msgid "Device bay in which this device is installed (for child devices)" msgstr "" "Compartimento de dispositivos no qual este dispositivo está instalado (para " "dispositivos filhos)" -#: dcim/forms/bulk_import.py:644 +#: netbox/dcim/forms/bulk_import.py:666 msgid "The device in which this module is installed" msgstr "O dispositivo no qual este módulo está instalado" -#: dcim/forms/bulk_import.py:647 dcim/forms/model_forms.py:640 +#: netbox/dcim/forms/bulk_import.py:669 netbox/dcim/forms/model_forms.py:640 msgid "Module bay" msgstr "Compartimento de módulo" -#: dcim/forms/bulk_import.py:650 +#: netbox/dcim/forms/bulk_import.py:672 msgid "The module bay in which this module is installed" msgstr "O compartimento no qual este módulo está instalado" -#: dcim/forms/bulk_import.py:656 +#: netbox/dcim/forms/bulk_import.py:678 msgid "The type of module" msgstr "O tipo de módulo" -#: dcim/forms/bulk_import.py:664 dcim/forms/model_forms.py:656 +#: netbox/dcim/forms/bulk_import.py:686 netbox/dcim/forms/model_forms.py:656 msgid "Replicate components" msgstr "Replicar componentes" -#: dcim/forms/bulk_import.py:666 +#: netbox/dcim/forms/bulk_import.py:688 msgid "" "Automatically populate components associated with this module type (enabled " "by default)" @@ -3950,266 +4377,273 @@ msgstr "" "Popular automaticamente os componentes associados a este tipo de módulo " "(ativado por padrão)" -#: dcim/forms/bulk_import.py:669 dcim/forms/model_forms.py:662 +#: netbox/dcim/forms/bulk_import.py:691 netbox/dcim/forms/model_forms.py:662 msgid "Adopt components" msgstr "Adotar componentes" -#: dcim/forms/bulk_import.py:671 dcim/forms/model_forms.py:665 +#: netbox/dcim/forms/bulk_import.py:693 netbox/dcim/forms/model_forms.py:665 msgid "Adopt already existing components" msgstr "Adotar componentes já existentes" -#: dcim/forms/bulk_import.py:711 dcim/forms/bulk_import.py:737 -#: dcim/forms/bulk_import.py:763 +#: netbox/dcim/forms/bulk_import.py:733 netbox/dcim/forms/bulk_import.py:759 +#: netbox/dcim/forms/bulk_import.py:785 msgid "Port type" msgstr "Tipo de porta" -#: dcim/forms/bulk_import.py:719 dcim/forms/bulk_import.py:745 +#: netbox/dcim/forms/bulk_import.py:741 netbox/dcim/forms/bulk_import.py:767 msgid "Port speed in bps" msgstr "Velocidade da porta em bps" -#: dcim/forms/bulk_import.py:783 +#: netbox/dcim/forms/bulk_import.py:805 msgid "Outlet type" msgstr "Tipo de tomada" -#: dcim/forms/bulk_import.py:790 +#: netbox/dcim/forms/bulk_import.py:812 msgid "Local power port which feeds this outlet" msgstr "Porta de alimentação local que alimenta esta tomada" -#: dcim/forms/bulk_import.py:796 +#: netbox/dcim/forms/bulk_import.py:818 msgid "Electrical phase (for three-phase circuits)" msgstr "Fase (para circuitos trifásicos)" -#: dcim/forms/bulk_import.py:837 dcim/forms/model_forms.py:1316 -#: virtualization/forms/bulk_import.py:155 -#: virtualization/forms/model_forms.py:305 +#: 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 msgid "Parent interface" msgstr "Interface pai" -#: dcim/forms/bulk_import.py:844 dcim/forms/model_forms.py:1324 -#: virtualization/forms/bulk_import.py:162 -#: virtualization/forms/model_forms.py:313 +#: 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 msgid "Bridged interface" msgstr "Interface bridged" -#: dcim/forms/bulk_import.py:847 +#: netbox/dcim/forms/bulk_import.py:869 msgid "Lag" msgstr "LAG" -#: dcim/forms/bulk_import.py:851 +#: netbox/dcim/forms/bulk_import.py:873 msgid "Parent LAG interface" msgstr "Interface LAG pai" -#: dcim/forms/bulk_import.py:854 +#: netbox/dcim/forms/bulk_import.py:876 msgid "Vdcs" msgstr "Contextos de Dispositivos Virtuais" -#: dcim/forms/bulk_import.py:859 +#: netbox/dcim/forms/bulk_import.py:881 msgid "VDC names separated by commas, encased with double quotes. Example:" msgstr "" "Nomes de contextos de dispositivos virtuais separados por vírgulas, entre " "aspas duplas. Exemplo:" -#: dcim/forms/bulk_import.py:865 +#: netbox/dcim/forms/bulk_import.py:887 msgid "Physical medium" msgstr "Meio físico" -#: dcim/forms/bulk_import.py:868 dcim/forms/filtersets.py:1365 +#: netbox/dcim/forms/bulk_import.py:890 netbox/dcim/forms/filtersets.py:1365 msgid "Duplex" msgstr "Duplex" -#: dcim/forms/bulk_import.py:873 +#: netbox/dcim/forms/bulk_import.py:895 msgid "Poe mode" msgstr "Modo de operação do PoE" -#: dcim/forms/bulk_import.py:879 +#: netbox/dcim/forms/bulk_import.py:901 msgid "Poe type" msgstr "Tipo de PoE" -#: dcim/forms/bulk_import.py:888 virtualization/forms/bulk_import.py:168 +#: netbox/dcim/forms/bulk_import.py:910 +#: netbox/virtualization/forms/bulk_import.py:168 msgid "IEEE 802.1Q operational mode (for L2 interfaces)" msgstr "Modo de operação do IEEE 802.1Q (para interfaces L2)" -#: dcim/forms/bulk_import.py:895 ipam/forms/bulk_import.py:161 -#: ipam/forms/bulk_import.py:247 ipam/forms/bulk_import.py:283 -#: ipam/forms/filtersets.py:201 ipam/forms/filtersets.py:277 -#: ipam/forms/filtersets.py:336 virtualization/forms/bulk_import.py:175 +#: netbox/dcim/forms/bulk_import.py: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 msgid "Assigned VRF" msgstr "VRF designado" -#: dcim/forms/bulk_import.py:898 +#: netbox/dcim/forms/bulk_import.py:920 msgid "Rf role" msgstr "Função RF" -#: dcim/forms/bulk_import.py:901 +#: netbox/dcim/forms/bulk_import.py:923 msgid "Wireless role (AP/station)" msgstr "Função do Wireless (AP/Station)" -#: dcim/forms/bulk_import.py:937 +#: netbox/dcim/forms/bulk_import.py:959 #, python-brace-format msgid "VDC {vdc} is not assigned to device {device}" msgstr "" "Contexto de dispositivo virtual {vdc} não está associado ao dispositivo " "{device}" -#: dcim/forms/bulk_import.py:951 dcim/forms/model_forms.py:1000 -#: dcim/forms/model_forms.py:1575 dcim/forms/object_import.py:117 +#: 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 msgid "Rear port" msgstr "Porta traseira" -#: dcim/forms/bulk_import.py:954 +#: netbox/dcim/forms/bulk_import.py:976 msgid "Corresponding rear port" msgstr "Porta traseira correspondente" -#: dcim/forms/bulk_import.py:959 dcim/forms/bulk_import.py:1000 -#: dcim/forms/bulk_import.py:1216 +#: netbox/dcim/forms/bulk_import.py:981 netbox/dcim/forms/bulk_import.py:1022 +#: netbox/dcim/forms/bulk_import.py:1238 msgid "Physical medium classification" msgstr "Tipo de conexão do meio físico" -#: dcim/forms/bulk_import.py:1028 dcim/tables/devices.py:822 +#: netbox/dcim/forms/bulk_import.py:1050 netbox/dcim/tables/devices.py:822 msgid "Installed device" msgstr "Dispositivo instalado" -#: dcim/forms/bulk_import.py:1032 +#: netbox/dcim/forms/bulk_import.py:1054 msgid "Child device installed within this bay" msgstr "Dispositivo filho instalado neste compartimento" -#: dcim/forms/bulk_import.py:1034 +#: netbox/dcim/forms/bulk_import.py:1056 msgid "Child device not found." msgstr "Dispositivo filho não encontrado." -#: dcim/forms/bulk_import.py:1092 +#: netbox/dcim/forms/bulk_import.py:1114 msgid "Parent inventory item" msgstr "Item pai do inventário" -#: dcim/forms/bulk_import.py:1095 +#: netbox/dcim/forms/bulk_import.py:1117 msgid "Component type" msgstr "Tipo de componente" -#: dcim/forms/bulk_import.py:1099 +#: netbox/dcim/forms/bulk_import.py:1121 msgid "Component Type" msgstr "Tipo de Componente" -#: dcim/forms/bulk_import.py:1102 +#: netbox/dcim/forms/bulk_import.py:1124 msgid "Compnent name" msgstr "Nome do componente" -#: dcim/forms/bulk_import.py:1104 +#: netbox/dcim/forms/bulk_import.py:1126 msgid "Component Name" msgstr "Nome do Componente" -#: dcim/forms/bulk_import.py:1146 +#: netbox/dcim/forms/bulk_import.py:1168 #, python-brace-format msgid "Component not found: {device} - {component_name}" msgstr "Componente não encontrado: {device} - {component_name}" -#: dcim/forms/bulk_import.py:1171 +#: netbox/dcim/forms/bulk_import.py:1193 msgid "Side A device" msgstr "Dispositivo no lado A" -#: dcim/forms/bulk_import.py:1174 dcim/forms/bulk_import.py:1192 +#: netbox/dcim/forms/bulk_import.py:1196 netbox/dcim/forms/bulk_import.py:1214 msgid "Device name" msgstr "Nome do dispositivo" -#: dcim/forms/bulk_import.py:1177 +#: netbox/dcim/forms/bulk_import.py:1199 msgid "Side A type" msgstr "Tipo de terminação no lado A" -#: dcim/forms/bulk_import.py:1180 dcim/forms/bulk_import.py:1198 +#: netbox/dcim/forms/bulk_import.py:1202 netbox/dcim/forms/bulk_import.py:1220 msgid "Termination type" msgstr "Tipo de terminação" -#: dcim/forms/bulk_import.py:1183 +#: netbox/dcim/forms/bulk_import.py:1205 msgid "Side A name" msgstr "Nome da terminação no lado A" -#: dcim/forms/bulk_import.py:1184 dcim/forms/bulk_import.py:1202 +#: netbox/dcim/forms/bulk_import.py:1206 netbox/dcim/forms/bulk_import.py:1224 msgid "Termination name" msgstr "Nome da terminação" -#: dcim/forms/bulk_import.py:1189 +#: netbox/dcim/forms/bulk_import.py:1211 msgid "Side B device" msgstr "Dispositivo no lado B" -#: dcim/forms/bulk_import.py:1195 +#: netbox/dcim/forms/bulk_import.py:1217 msgid "Side B type" msgstr "Tipo de terminação no lado B" -#: dcim/forms/bulk_import.py:1201 +#: netbox/dcim/forms/bulk_import.py:1223 msgid "Side B name" msgstr "Nome da terminação no lado B" -#: dcim/forms/bulk_import.py:1210 wireless/forms/bulk_import.py:86 +#: netbox/dcim/forms/bulk_import.py:1232 +#: netbox/wireless/forms/bulk_import.py:86 msgid "Connection status" msgstr "Status da conexão" -#: dcim/forms/bulk_import.py:1262 +#: netbox/dcim/forms/bulk_import.py:1284 #, python-brace-format msgid "Side {side_upper}: {device} {termination_object} is already connected" msgstr "Lado {side_upper}: {device} {termination_object} já está conectado" -#: dcim/forms/bulk_import.py:1268 +#: netbox/dcim/forms/bulk_import.py:1290 #, python-brace-format msgid "{side_upper} side termination not found: {device} {name}" msgstr " Terminação {side_upper} não encontrada: {device} {name}" -#: dcim/forms/bulk_import.py:1293 dcim/forms/model_forms.py:785 -#: dcim/tables/devices.py:1027 templates/dcim/device.html:132 -#: templates/dcim/virtualchassis.html:27 templates/dcim/virtualchassis.html:67 +#: 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/templates/dcim/virtualchassis.html:27 +#: netbox/templates/dcim/virtualchassis.html:67 msgid "Master" msgstr "Mestre" -#: dcim/forms/bulk_import.py:1297 +#: netbox/dcim/forms/bulk_import.py:1319 msgid "Master device" msgstr "Dispositivo mestre" -#: dcim/forms/bulk_import.py:1314 +#: netbox/dcim/forms/bulk_import.py:1336 msgid "Name of parent site" msgstr "Nome do site principal" -#: dcim/forms/bulk_import.py:1348 +#: netbox/dcim/forms/bulk_import.py:1370 msgid "Upstream power panel" msgstr "Quadro de alimentação" -#: dcim/forms/bulk_import.py:1378 +#: netbox/dcim/forms/bulk_import.py:1400 msgid "Primary or redundant" msgstr "Primário ou redundante" -#: dcim/forms/bulk_import.py:1383 +#: netbox/dcim/forms/bulk_import.py:1405 msgid "Supply type (AC/DC)" msgstr "Tipo de alimentação (AC/DC)" -#: dcim/forms/bulk_import.py:1388 +#: netbox/dcim/forms/bulk_import.py:1410 msgid "Single or three-phase" msgstr "Monofásico ou trifásico" -#: dcim/forms/bulk_import.py:1439 dcim/forms/model_forms.py:1670 -#: templates/dcim/device.html:190 templates/dcim/virtualdevicecontext.html:30 -#: templates/virtualization/virtualmachine.html:52 +#: netbox/dcim/forms/bulk_import.py:1461 netbox/dcim/forms/model_forms.py:1677 +#: netbox/templates/dcim/device.html:190 +#: netbox/templates/dcim/virtualdevicecontext.html:30 +#: netbox/templates/virtualization/virtualmachine.html:52 msgid "Primary IPv4" msgstr "IPv4 Primário" -#: dcim/forms/bulk_import.py:1443 +#: netbox/dcim/forms/bulk_import.py:1465 msgid "IPv4 address with mask, e.g. 1.2.3.4/24" msgstr "Endereço IPv4 com máscara, por exemplo, 1.2.3.4/24" -#: dcim/forms/bulk_import.py:1446 dcim/forms/model_forms.py:1679 -#: templates/dcim/device.html:206 templates/dcim/virtualdevicecontext.html:41 -#: templates/virtualization/virtualmachine.html:68 +#: netbox/dcim/forms/bulk_import.py:1468 netbox/dcim/forms/model_forms.py:1686 +#: netbox/templates/dcim/device.html:206 +#: netbox/templates/dcim/virtualdevicecontext.html:41 +#: netbox/templates/virtualization/virtualmachine.html:68 msgid "Primary IPv6" msgstr "IPv6 Primário" -#: dcim/forms/bulk_import.py:1450 +#: netbox/dcim/forms/bulk_import.py:1472 msgid "IPv6 address with prefix length, e.g. 2001:db8::1/64" msgstr "Endereço IPv6 com tamanho de prefixo, por exemplo, 2001:db8: :1/64" -#: dcim/forms/common.py:24 dcim/models/device_components.py:527 -#: templates/dcim/interface.html:57 -#: templates/virtualization/vminterface.html:55 -#: virtualization/forms/bulk_edit.py:225 +#: netbox/dcim/forms/common.py:24 netbox/dcim/models/device_components.py:527 +#: netbox/templates/dcim/interface.html:57 +#: netbox/templates/virtualization/vminterface.html:55 +#: netbox/virtualization/forms/bulk_edit.py:225 msgid "MTU" msgstr "MTU" -#: dcim/forms/common.py:65 +#: netbox/dcim/forms/common.py:65 #, python-brace-format msgid "" "The tagged VLANs ({vlans}) must belong to the same site as the interface's " @@ -4218,7 +4652,7 @@ msgstr "" "As VLANs tagueadas ({vlans}) devem pertencer ao mesmo site do dispositivo/VM" " pai da interface ou devem ser globais." -#: dcim/forms/common.py:126 +#: netbox/dcim/forms/common.py:126 msgid "" "Cannot install module with placeholder values in a module bay with no " "position defined." @@ -4226,7 +4660,7 @@ msgstr "" "Não é possível instalar o módulo com valores de espaço reservado em um " "compartimento de módulo sem a sua posição definida." -#: dcim/forms/common.py:131 +#: netbox/dcim/forms/common.py:131 #, python-brace-format msgid "" "Cannot install module with placeholder values in a module bay tree {level} " @@ -4236,187 +4670,198 @@ msgstr "" "compartimento de módulos {level} na árvore, pois foram fornecidos {tokens} " "espaços reservados" -#: dcim/forms/common.py:144 +#: netbox/dcim/forms/common.py:144 #, python-brace-format msgid "Cannot adopt {model} {name} as it already belongs to a module" msgstr "Não é possível adotar {model} {name} pois já pertence a outro módulo." -#: dcim/forms/common.py:153 +#: netbox/dcim/forms/common.py:153 #, python-brace-format msgid "A {model} named {name} already exists" msgstr "Um {model} com nome {name} já existe." -#: dcim/forms/connections.py:49 dcim/forms/model_forms.py:738 -#: dcim/tables/power.py:66 templates/dcim/inc/cable_termination.html:37 -#: templates/dcim/powerfeed.html:24 templates/dcim/powerpanel.html:19 -#: templates/dcim/trace/powerpanel.html:4 +#: netbox/dcim/forms/connections.py:49 netbox/dcim/forms/model_forms.py:738 +#: netbox/dcim/tables/power.py:66 +#: netbox/templates/dcim/inc/cable_termination.html:37 +#: netbox/templates/dcim/powerfeed.html:24 +#: netbox/templates/dcim/powerpanel.html:19 +#: netbox/templates/dcim/trace/powerpanel.html:4 msgid "Power Panel" msgstr "Quadro de Alimentação" -#: dcim/forms/connections.py:58 dcim/forms/model_forms.py:765 -#: templates/dcim/powerfeed.html:21 templates/dcim/powerport.html:80 +#: netbox/dcim/forms/connections.py:58 netbox/dcim/forms/model_forms.py:765 +#: netbox/templates/dcim/powerfeed.html:21 +#: netbox/templates/dcim/powerport.html:80 msgid "Power Feed" msgstr "Fontes de Alimentação" -#: dcim/forms/connections.py:81 +#: netbox/dcim/forms/connections.py:81 msgid "Side" msgstr "Lado" -#: dcim/forms/filtersets.py:136 dcim/tables/devices.py:295 +#: netbox/dcim/forms/filtersets.py:136 netbox/dcim/tables/devices.py:295 msgid "Device Status" msgstr "Status do Dispositivo" -#: dcim/forms/filtersets.py:149 +#: netbox/dcim/forms/filtersets.py:149 msgid "Parent region" msgstr "Região principal" -#: dcim/forms/filtersets.py:163 tenancy/forms/bulk_import.py:28 -#: tenancy/forms/bulk_import.py:62 tenancy/forms/filtersets.py:33 -#: tenancy/forms/filtersets.py:62 wireless/forms/bulk_import.py:25 -#: wireless/forms/filtersets.py:25 +#: netbox/dcim/forms/filtersets.py:163 netbox/tenancy/forms/bulk_import.py:28 +#: netbox/tenancy/forms/bulk_import.py:62 +#: netbox/tenancy/forms/filtersets.py:33 netbox/tenancy/forms/filtersets.py:62 +#: netbox/wireless/forms/bulk_import.py:25 +#: netbox/wireless/forms/filtersets.py:25 msgid "Parent group" msgstr "Grupo principal" -#: dcim/forms/filtersets.py:242 templates/dcim/location.html:58 -#: templates/dcim/site.html:56 +#: netbox/dcim/forms/filtersets.py:242 netbox/templates/dcim/location.html:58 +#: netbox/templates/dcim/site.html:56 msgid "Facility" msgstr "Facility" -#: dcim/forms/filtersets.py:380 -msgid "Rack type" -msgstr "Tipo de rack" - -#: dcim/forms/filtersets.py:397 +#: netbox/dcim/forms/filtersets.py:397 msgid "Function" msgstr "Função" -#: dcim/forms/filtersets.py:483 dcim/forms/model_forms.py:373 -#: templates/inc/panels/image_attachments.html:6 +#: netbox/dcim/forms/filtersets.py:483 netbox/dcim/forms/model_forms.py:373 +#: netbox/templates/inc/panels/image_attachments.html:6 msgid "Images" msgstr "Imagens" -#: dcim/forms/filtersets.py:486 dcim/forms/filtersets.py:611 -#: dcim/forms/filtersets.py:726 +#: netbox/dcim/forms/filtersets.py:486 netbox/dcim/forms/filtersets.py:611 +#: netbox/dcim/forms/filtersets.py:726 msgid "Components" msgstr "Componentes" -#: dcim/forms/filtersets.py:506 +#: netbox/dcim/forms/filtersets.py:506 msgid "Subdevice role" msgstr "Função do subdispositivo" -#: dcim/forms/filtersets.py:790 dcim/tables/racks.py:54 -#: templates/dcim/racktype.html:20 +#: netbox/dcim/forms/filtersets.py:790 netbox/dcim/tables/racks.py:54 +#: netbox/templates/dcim/racktype.html:20 msgid "Model" msgstr "Modelo" -#: dcim/forms/filtersets.py:834 +#: netbox/dcim/forms/filtersets.py:834 msgid "Has an OOB IP" msgstr "Possui um IP fora de banda" -#: dcim/forms/filtersets.py:841 +#: netbox/dcim/forms/filtersets.py:841 msgid "Virtual chassis member" msgstr "Membro do chassi virtual" -#: dcim/forms/filtersets.py:890 +#: netbox/dcim/forms/filtersets.py:890 msgid "Has virtual device contexts" msgstr "Possui contextos de dispositivos virtuais" -#: dcim/forms/filtersets.py:903 extras/filtersets.py:585 -#: ipam/forms/filtersets.py:452 virtualization/forms/filtersets.py:112 +#: netbox/dcim/forms/filtersets.py:903 netbox/extras/filtersets.py:585 +#: netbox/ipam/forms/filtersets.py:452 +#: netbox/virtualization/forms/filtersets.py:112 msgid "Cluster group" msgstr "Grupo de clusters" -#: dcim/forms/filtersets.py:1210 +#: netbox/dcim/forms/filtersets.py:1210 msgid "Cabled" msgstr "Cabeado" -#: dcim/forms/filtersets.py:1217 +#: netbox/dcim/forms/filtersets.py:1217 msgid "Occupied" msgstr "Ocupado" -#: dcim/forms/filtersets.py:1244 dcim/forms/filtersets.py:1269 -#: dcim/forms/filtersets.py:1293 dcim/forms/filtersets.py:1313 -#: dcim/forms/filtersets.py:1336 dcim/tables/devices.py:364 -#: templates/dcim/consoleport.html:55 templates/dcim/consoleserverport.html:55 -#: templates/dcim/frontport.html:69 templates/dcim/interface.html:140 -#: templates/dcim/powerfeed.html:110 templates/dcim/poweroutlet.html:59 -#: templates/dcim/powerport.html:59 templates/dcim/rearport.html:65 +#: netbox/dcim/forms/filtersets.py: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/templates/dcim/consoleport.html:55 +#: netbox/templates/dcim/consoleserverport.html:55 +#: netbox/templates/dcim/frontport.html:69 +#: netbox/templates/dcim/interface.html:140 +#: netbox/templates/dcim/powerfeed.html:110 +#: netbox/templates/dcim/poweroutlet.html:59 +#: netbox/templates/dcim/powerport.html:59 +#: netbox/templates/dcim/rearport.html:65 msgid "Connection" msgstr "Conexão" -#: dcim/forms/filtersets.py:1348 extras/forms/bulk_edit.py:326 -#: extras/forms/bulk_import.py:247 extras/forms/filtersets.py:464 -#: extras/forms/model_forms.py:675 extras/tables/tables.py:579 -#: templates/extras/journalentry.html:30 +#: netbox/dcim/forms/filtersets.py:1348 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 "Tipo" -#: dcim/forms/filtersets.py:1377 +#: netbox/dcim/forms/filtersets.py:1377 msgid "Mgmt only" msgstr "Somente gerenciamento" -#: dcim/forms/filtersets.py:1389 dcim/forms/model_forms.py:1383 -#: dcim/models/device_components.py:629 templates/dcim/interface.html:129 +#: 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 msgid "WWN" msgstr "WWN" -#: dcim/forms/filtersets.py:1409 +#: netbox/dcim/forms/filtersets.py:1409 msgid "Wireless channel" msgstr "Canal do Wireless" -#: dcim/forms/filtersets.py:1413 +#: netbox/dcim/forms/filtersets.py:1413 msgid "Channel frequency (MHz)" msgstr "Frequência do canal (MHz)" -#: dcim/forms/filtersets.py:1417 +#: netbox/dcim/forms/filtersets.py:1417 msgid "Channel width (MHz)" msgstr "Largura do canal (MHz)" -#: dcim/forms/filtersets.py:1421 templates/dcim/interface.html:85 +#: netbox/dcim/forms/filtersets.py:1421 +#: netbox/templates/dcim/interface.html:85 msgid "Transmit power (dBm)" msgstr "Potência de transmissão (dBm)" -#: dcim/forms/filtersets.py:1446 dcim/forms/filtersets.py:1471 -#: dcim/tables/devices.py:327 templates/dcim/cable.html:12 -#: templates/dcim/cable_trace.html:46 templates/dcim/frontport.html:77 -#: templates/dcim/htmx/cable_edit.html:50 -#: templates/dcim/inc/connection_endpoints.html:4 -#: templates/dcim/rearport.html:73 templates/dcim/trace/cable.html:7 +#: netbox/dcim/forms/filtersets.py:1446 netbox/dcim/forms/filtersets.py:1471 +#: netbox/dcim/tables/devices.py:327 netbox/templates/dcim/cable.html:12 +#: netbox/templates/dcim/cable_trace.html:46 +#: netbox/templates/dcim/frontport.html:77 +#: netbox/templates/dcim/htmx/cable_edit.html:50 +#: netbox/templates/dcim/inc/connection_endpoints.html:4 +#: netbox/templates/dcim/rearport.html:73 +#: netbox/templates/dcim/trace/cable.html:7 msgid "Cable" msgstr "Cabo" -#: dcim/forms/filtersets.py:1550 dcim/tables/devices.py:949 +#: netbox/dcim/forms/filtersets.py:1550 netbox/dcim/tables/devices.py:949 msgid "Discovered" msgstr "Descoberto" -#: dcim/forms/formsets.py:20 +#: netbox/dcim/forms/formsets.py:20 #, python-brace-format msgid "A virtual chassis member already exists in position {vc_position}." msgstr "Já existe um membro no chassi virtual na posição {vc_position}." -#: dcim/forms/model_forms.py:140 +#: netbox/dcim/forms/model_forms.py:140 msgid "Contact Info" msgstr "Informações de Contato" -#: dcim/forms/model_forms.py:195 templates/dcim/rackrole.html:19 +#: netbox/dcim/forms/model_forms.py:195 netbox/templates/dcim/rackrole.html:19 msgid "Rack Role" msgstr "Função do Rack" -#: dcim/forms/model_forms.py:212 dcim/forms/model_forms.py:362 -#: dcim/forms/model_forms.py:446 utilities/forms/fields/fields.py:47 +#: netbox/dcim/forms/model_forms.py:212 netbox/dcim/forms/model_forms.py:362 +#: netbox/dcim/forms/model_forms.py:446 +#: netbox/utilities/forms/fields/fields.py:47 msgid "Slug" msgstr "Slug" -#: dcim/forms/model_forms.py:259 +#: netbox/dcim/forms/model_forms.py:259 msgid "Select a pre-defined rack type, or set physical characteristics below." msgstr "" "Selecione um tipo pré-definido de rack, ou ajuste as características abaixo." -#: dcim/forms/model_forms.py:265 +#: netbox/dcim/forms/model_forms.py:265 msgid "Inventory Control" msgstr "Controle de Inventário" -#: dcim/forms/model_forms.py:313 +#: netbox/dcim/forms/model_forms.py:313 msgid "" "Comma-separated list of numeric unit IDs. A range may be specified using a " "hyphen." @@ -4424,145 +4869,177 @@ msgstr "" "Lista separada por vírgulas de números de IDs. Um intervalo pode ser " "especificado usando hífen." -#: dcim/forms/model_forms.py:322 dcim/tables/racks.py:202 +#: netbox/dcim/forms/model_forms.py:322 netbox/dcim/tables/racks.py:202 msgid "Reservation" msgstr "Reserva" -#: dcim/forms/model_forms.py:423 templates/dcim/devicerole.html:23 +#: netbox/dcim/forms/model_forms.py:423 +#: netbox/templates/dcim/devicerole.html:23 msgid "Device Role" msgstr "Função do Dispositivo" -#: dcim/forms/model_forms.py:490 dcim/models/devices.py:644 +#: netbox/dcim/forms/model_forms.py:490 netbox/dcim/models/devices.py:644 msgid "The lowest-numbered unit occupied by the device" msgstr "A unidade mais baixa ocupada pelo dispositivo" -#: dcim/forms/model_forms.py:547 +#: netbox/dcim/forms/model_forms.py:547 msgid "The position in the virtual chassis this device is identified by" msgstr "A posição no chassi virtual pela qual este dispositivo é identificado" -#: dcim/forms/model_forms.py:552 +#: netbox/dcim/forms/model_forms.py:552 msgid "The priority of the device in the virtual chassis" msgstr "A prioridade do dispositivo no chassi virtual" -#: dcim/forms/model_forms.py:659 +#: netbox/dcim/forms/model_forms.py:659 msgid "Automatically populate components associated with this module type" msgstr "" "Popular automaticamente os componentes associados a este tipo de módulo" -#: dcim/forms/model_forms.py:767 +#: netbox/dcim/forms/model_forms.py:767 msgid "Characteristics" msgstr "Características" -#: dcim/forms/model_forms.py:1087 +#: netbox/dcim/forms/model_forms.py:914 +#, python-brace-format +msgid "" +"Alphanumeric ranges are supported for bulk creation. Mixed cases and types " +"within a single range are not supported (example: " +"[ge,xe]-0/0/[0-9]). The token {module}, if " +"present, will be automatically replaced with the position value when " +"creating a new module." +msgstr "" +"Intervalos alfanuméricos são suportados para criação em massa. Casos e tipos" +" mistos dentro de um único intervalo não são suportados (exemplo: " +"[ge,xe]-0/0/[0-9]). O token {module}, se presente," +" será automaticamente substituído pelo valor da posição ao criar um novo " +"módulo." + +#: netbox/dcim/forms/model_forms.py:1094 msgid "Console port template" msgstr "Modelo da porta de console" -#: dcim/forms/model_forms.py:1095 +#: netbox/dcim/forms/model_forms.py:1102 msgid "Console server port template" msgstr "Modelo da porta do servidor de console" -#: dcim/forms/model_forms.py:1103 +#: netbox/dcim/forms/model_forms.py:1110 msgid "Front port template" msgstr "Modelo da porta frontal" -#: dcim/forms/model_forms.py:1111 +#: netbox/dcim/forms/model_forms.py:1118 msgid "Interface template" msgstr "Modelo da interface" -#: dcim/forms/model_forms.py:1119 +#: netbox/dcim/forms/model_forms.py:1126 msgid "Power outlet template" msgstr "Modelo da tomada elétrica" -#: dcim/forms/model_forms.py:1127 +#: netbox/dcim/forms/model_forms.py:1134 msgid "Power port template" msgstr "Modelo da porta de alimentação" -#: dcim/forms/model_forms.py:1135 +#: netbox/dcim/forms/model_forms.py:1142 msgid "Rear port template" msgstr "Modelo da porta traseira" -#: dcim/forms/model_forms.py:1144 dcim/forms/model_forms.py:1388 -#: dcim/forms/model_forms.py:1551 dcim/forms/model_forms.py:1583 -#: dcim/tables/connections.py:65 ipam/forms/bulk_import.py:318 -#: ipam/forms/model_forms.py:280 ipam/forms/model_forms.py:289 -#: ipam/tables/fhrp.py:64 ipam/tables/ip.py:372 ipam/tables/vlans.py:169 -#: templates/circuits/inc/circuit_termination_fields.html:51 -#: templates/dcim/frontport.html:106 templates/dcim/interface.html:27 -#: templates/dcim/interface.html:184 templates/dcim/interface.html:310 -#: templates/dcim/rearport.html:102 -#: templates/virtualization/vminterface.html:18 -#: templates/vpn/tunneltermination.html:31 -#: templates/wireless/inc/wirelesslink_interface.html:10 -#: templates/wireless/wirelesslink.html:10 -#: templates/wireless/wirelesslink.html:55 -#: virtualization/forms/model_forms.py:348 vpn/forms/bulk_import.py:297 -#: vpn/forms/model_forms.py:436 vpn/forms/model_forms.py:445 -#: wireless/forms/model_forms.py:113 wireless/forms/model_forms.py:155 +#: netbox/dcim/forms/model_forms.py: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" -#: dcim/forms/model_forms.py:1145 dcim/forms/model_forms.py:1584 -#: dcim/tables/connections.py:27 templates/dcim/consoleport.html:17 -#: templates/dcim/consoleserverport.html:74 templates/dcim/frontport.html:112 +#: netbox/dcim/forms/model_forms.py:1152 netbox/dcim/forms/model_forms.py:1591 +#: netbox/dcim/tables/connections.py:27 +#: netbox/templates/dcim/consoleport.html:17 +#: netbox/templates/dcim/consoleserverport.html:74 +#: netbox/templates/dcim/frontport.html:112 msgid "Console Port" msgstr "Porta de Console" -#: dcim/forms/model_forms.py:1146 dcim/forms/model_forms.py:1585 -#: templates/dcim/consoleport.html:73 templates/dcim/consoleserverport.html:17 -#: templates/dcim/frontport.html:109 +#: netbox/dcim/forms/model_forms.py:1153 netbox/dcim/forms/model_forms.py:1592 +#: netbox/templates/dcim/consoleport.html:73 +#: netbox/templates/dcim/consoleserverport.html:17 +#: netbox/templates/dcim/frontport.html:109 msgid "Console Server Port" msgstr "Porta do Servidor de Console" -#: dcim/forms/model_forms.py:1147 dcim/forms/model_forms.py:1586 -#: templates/circuits/inc/circuit_termination_fields.html:52 -#: templates/dcim/consoleport.html:76 templates/dcim/consoleserverport.html:77 -#: templates/dcim/frontport.html:17 templates/dcim/frontport.html:115 -#: templates/dcim/interface.html:187 templates/dcim/rearport.html:105 +#: netbox/dcim/forms/model_forms.py:1154 netbox/dcim/forms/model_forms.py:1593 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:52 +#: netbox/templates/dcim/consoleport.html:76 +#: netbox/templates/dcim/consoleserverport.html:77 +#: netbox/templates/dcim/frontport.html:17 +#: netbox/templates/dcim/frontport.html:115 +#: netbox/templates/dcim/interface.html:187 +#: netbox/templates/dcim/rearport.html:105 msgid "Front Port" msgstr "Porta Frontal" -#: dcim/forms/model_forms.py:1148 dcim/forms/model_forms.py:1587 -#: dcim/tables/devices.py:710 -#: templates/circuits/inc/circuit_termination_fields.html:53 -#: templates/dcim/consoleport.html:79 templates/dcim/consoleserverport.html:80 -#: templates/dcim/frontport.html:50 templates/dcim/frontport.html:118 -#: templates/dcim/interface.html:190 templates/dcim/rearport.html:17 -#: templates/dcim/rearport.html:108 +#: netbox/dcim/forms/model_forms.py:1155 netbox/dcim/forms/model_forms.py:1594 +#: netbox/dcim/tables/devices.py:710 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:53 +#: netbox/templates/dcim/consoleport.html:79 +#: netbox/templates/dcim/consoleserverport.html:80 +#: netbox/templates/dcim/frontport.html:50 +#: netbox/templates/dcim/frontport.html:118 +#: netbox/templates/dcim/interface.html:190 +#: netbox/templates/dcim/rearport.html:17 +#: netbox/templates/dcim/rearport.html:108 msgid "Rear Port" msgstr "Porta Traseira" -#: dcim/forms/model_forms.py:1149 dcim/forms/model_forms.py:1588 -#: dcim/tables/connections.py:46 dcim/tables/devices.py:512 -#: templates/dcim/poweroutlet.html:44 templates/dcim/powerport.html:17 +#: 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/templates/dcim/powerport.html:17 msgid "Power Port" msgstr "Porta de Alimentação" -#: dcim/forms/model_forms.py:1150 dcim/forms/model_forms.py:1589 -#: templates/dcim/poweroutlet.html:17 templates/dcim/powerport.html:77 +#: netbox/dcim/forms/model_forms.py:1157 netbox/dcim/forms/model_forms.py:1596 +#: netbox/templates/dcim/poweroutlet.html:17 +#: netbox/templates/dcim/powerport.html:77 msgid "Power Outlet" msgstr "Tomada Elétrica" -#: dcim/forms/model_forms.py:1152 dcim/forms/model_forms.py:1591 +#: netbox/dcim/forms/model_forms.py:1159 netbox/dcim/forms/model_forms.py:1598 msgid "Component Assignment" msgstr "Atribuição de Componentes" -#: dcim/forms/model_forms.py:1195 dcim/forms/model_forms.py:1638 +#: netbox/dcim/forms/model_forms.py:1202 netbox/dcim/forms/model_forms.py:1645 msgid "An InventoryItem can only be assigned to a single component." msgstr "Um item de inventário só pode ser associado a um único componente." -#: dcim/forms/model_forms.py:1332 +#: netbox/dcim/forms/model_forms.py:1339 msgid "LAG interface" msgstr "Interface LAG" -#: dcim/forms/model_forms.py:1355 +#: netbox/dcim/forms/model_forms.py:1362 msgid "Filter VLANs available for assignment by group." msgstr "Filtre as VLANs disponíveis para atribuição por grupo." -#: dcim/forms/model_forms.py:1484 +#: netbox/dcim/forms/model_forms.py:1491 msgid "Child Device" msgstr "Dispositivo Filho" -#: dcim/forms/model_forms.py:1485 +#: netbox/dcim/forms/model_forms.py:1492 msgid "" "Child devices must first be created and assigned to the site and rack of the" " parent device." @@ -4570,32 +5047,35 @@ msgstr "" "Os dispositivos filhos devem primeiro ser criados e atribuídos ao site e ao " "rack do dispositivo pai." -#: dcim/forms/model_forms.py:1527 +#: netbox/dcim/forms/model_forms.py:1534 msgid "Console port" msgstr "Porta de console" -#: dcim/forms/model_forms.py:1535 +#: netbox/dcim/forms/model_forms.py:1542 msgid "Console server port" msgstr "Porta do servidor de console" -#: dcim/forms/model_forms.py:1543 +#: netbox/dcim/forms/model_forms.py:1550 msgid "Front port" msgstr "Porta frontal" -#: dcim/forms/model_forms.py:1559 +#: netbox/dcim/forms/model_forms.py:1566 msgid "Power outlet" msgstr "Tomada elétrica" -#: dcim/forms/model_forms.py:1579 templates/dcim/inventoryitem.html:17 +#: netbox/dcim/forms/model_forms.py:1586 +#: netbox/templates/dcim/inventoryitem.html:17 msgid "Inventory Item" msgstr "Item de Inventário" -#: dcim/forms/model_forms.py:1652 templates/dcim/inventoryitemrole.html:15 +#: netbox/dcim/forms/model_forms.py:1659 +#: netbox/templates/dcim/inventoryitemrole.html:15 msgid "Inventory Item Role" msgstr "Função do Item de Inventário" -#: dcim/forms/object_create.py:48 dcim/forms/object_create.py:199 -#: dcim/forms/object_create.py:355 +#: netbox/dcim/forms/object_create.py:48 +#: netbox/dcim/forms/object_create.py:199 +#: netbox/dcim/forms/object_create.py:347 msgid "" "Alphanumeric ranges are supported. (Must match the number of objects being " "created.)" @@ -4603,7 +5083,7 @@ msgstr "" "Intervalos alfanuméricos são suportados. (Deve corresponder ao número de " "objetos a serem criados.)" -#: dcim/forms/object_create.py:68 +#: netbox/dcim/forms/object_create.py:68 #, python-brace-format msgid "" "The provided pattern specifies {value_count} values, but {pattern_count} are" @@ -4612,18 +5092,19 @@ msgstr "" "O padrão fornecido especifica {value_count} valores, mas {pattern_count} são" " esperados." -#: dcim/forms/object_create.py:110 dcim/forms/object_create.py:271 -#: dcim/tables/devices.py:252 +#: netbox/dcim/forms/object_create.py:110 +#: netbox/dcim/forms/object_create.py:263 netbox/dcim/tables/devices.py:252 msgid "Rear ports" msgstr "Portas traseiras" -#: dcim/forms/object_create.py:111 dcim/forms/object_create.py:272 +#: netbox/dcim/forms/object_create.py:111 +#: netbox/dcim/forms/object_create.py:264 msgid "Select one rear port assignment for each front port being created." msgstr "" "Selecione uma atribuição de porta traseira para cada porta frontal que está " "sendo criada." -#: dcim/forms/object_create.py:164 +#: netbox/dcim/forms/object_create.py:164 #, python-brace-format msgid "" "The number of front port templates to be created ({frontport_count}) must " @@ -4633,16 +5114,7 @@ msgstr "" "deve corresponder ao número selecionado de posições dE porta traseira " "({rearport_count})." -#: dcim/forms/object_create.py:251 -#, python-brace-format -msgid "" -"The string {module} will be replaced with the position of the " -"assigned module, if any." -msgstr "" -"A string {module} será substituída pela posição do módulo " -"designado, se houver." - -#: dcim/forms/object_create.py:320 +#: netbox/dcim/forms/object_create.py:312 #, python-brace-format msgid "" "The number of front ports to be created ({frontport_count}) must match the " @@ -4652,17 +5124,18 @@ msgstr "" "corresponder ao número selecionado de posições de portas traseiras " "({rearport_count})." -#: dcim/forms/object_create.py:409 dcim/tables/devices.py:1033 -#: ipam/tables/fhrp.py:31 templates/dcim/virtualchassis.html:53 -#: templates/dcim/virtualchassis_edit.html:47 templates/ipam/fhrpgroup.html:38 +#: netbox/dcim/forms/object_create.py:401 netbox/dcim/tables/devices.py:1033 +#: netbox/ipam/tables/fhrp.py:31 netbox/templates/dcim/virtualchassis.html:53 +#: netbox/templates/dcim/virtualchassis_edit.html:47 +#: netbox/templates/ipam/fhrpgroup.html:38 msgid "Members" msgstr "Membros" -#: dcim/forms/object_create.py:418 +#: netbox/dcim/forms/object_create.py:410 msgid "Initial position" msgstr "Posição inicial" -#: dcim/forms/object_create.py:421 +#: netbox/dcim/forms/object_create.py:413 msgid "" "Position of the first member device. Increases by one for each additional " "member." @@ -4670,68 +5143,70 @@ msgstr "" "Posição do primeiro dispositivo membro. Aumenta em um para cada membro " "adicional." -#: dcim/forms/object_create.py:435 +#: netbox/dcim/forms/object_create.py:427 msgid "A position must be specified for the first VC member." msgstr "" "Uma posição deve ser especificada para o primeiro membro do chassi virtual." -#: dcim/models/cables.py:62 dcim/models/device_component_templates.py:55 -#: dcim/models/device_components.py:62 extras/models/customfields.py:111 +#: netbox/dcim/models/cables.py:62 +#: netbox/dcim/models/device_component_templates.py:55 +#: netbox/dcim/models/device_components.py:62 +#: netbox/extras/models/customfields.py:111 msgid "label" msgstr "rótulo" -#: dcim/models/cables.py:71 +#: netbox/dcim/models/cables.py:71 msgid "length" msgstr "comprimento" -#: dcim/models/cables.py:78 +#: netbox/dcim/models/cables.py:78 msgid "length unit" msgstr "unidade de comprimento" -#: dcim/models/cables.py:95 +#: netbox/dcim/models/cables.py:95 msgid "cable" msgstr "cabo" -#: dcim/models/cables.py:96 +#: netbox/dcim/models/cables.py:96 msgid "cables" msgstr "cabos" -#: dcim/models/cables.py:165 +#: netbox/dcim/models/cables.py:165 msgid "Must specify a unit when setting a cable length" msgstr "Deve especificar uma unidade ao definir o comprimento do cabo" -#: dcim/models/cables.py:168 +#: netbox/dcim/models/cables.py:168 msgid "Must define A and B terminations when creating a new cable." msgstr "Terminações A e B devem ser definidas ao criar um novo cabo." -#: dcim/models/cables.py:175 +#: netbox/dcim/models/cables.py:175 msgid "Cannot connect different termination types to same end of cable." msgstr "" "Não é possível conectar diferentes tipos de terminação à mesma extremidade " "do cabo." -#: dcim/models/cables.py:183 +#: netbox/dcim/models/cables.py:183 #, python-brace-format msgid "Incompatible termination types: {type_a} and {type_b}" msgstr "Tipos de terminações incompatíveis: {type_a} e {type_b}" -#: dcim/models/cables.py:193 +#: netbox/dcim/models/cables.py:193 msgid "A and B terminations cannot connect to the same object." msgstr "As terminações A e B não podem se conectar ao mesmo objeto." -#: dcim/models/cables.py:260 ipam/models/asns.py:37 +#: netbox/dcim/models/cables.py:260 netbox/ipam/models/asns.py:37 msgid "end" msgstr "fim" -#: dcim/models/cables.py:313 +#: netbox/dcim/models/cables.py:313 msgid "cable termination" msgstr "terminação de cabo" -#: dcim/models/cables.py:314 +#: netbox/dcim/models/cables.py:314 msgid "cable terminations" msgstr "terminações de cabos" -#: dcim/models/cables.py:333 +#: netbox/dcim/models/cables.py:333 #, python-brace-format msgid "" "Duplicate termination found for {app_label}.{model} {termination_id}: cable " @@ -4740,38 +5215,38 @@ msgstr "" "Terminação duplicada encontrada para {app_label}.{model} {termination_id}: " "cabo {cable_pk}" -#: dcim/models/cables.py:343 +#: netbox/dcim/models/cables.py:343 #, python-brace-format msgid "Cables cannot be terminated to {type_display} interfaces" msgstr "Os cabos não podem ser terminados em interfaces {type_display}" -#: dcim/models/cables.py:350 +#: netbox/dcim/models/cables.py:350 msgid "Circuit terminations attached to a provider network may not be cabled." msgstr "" "As terminações de circuito conectadas a uma rede de provedor não podem ser " "cabeadas." -#: dcim/models/cables.py:448 extras/models/configs.py:50 +#: netbox/dcim/models/cables.py:448 netbox/extras/models/configs.py:50 msgid "is active" msgstr "está ativo" -#: dcim/models/cables.py:452 +#: netbox/dcim/models/cables.py:452 msgid "is complete" msgstr "está completo" -#: dcim/models/cables.py:456 +#: netbox/dcim/models/cables.py:456 msgid "is split" msgstr "é dividido" -#: dcim/models/cables.py:464 +#: netbox/dcim/models/cables.py:464 msgid "cable path" msgstr "caminho do cabo" -#: dcim/models/cables.py:465 +#: netbox/dcim/models/cables.py:465 msgid "cable paths" msgstr "caminhos do cabos" -#: dcim/models/device_component_templates.py:46 +#: netbox/dcim/models/device_component_templates.py:46 #, python-brace-format msgid "" "{module} is accepted as a substitution for the module bay position when " @@ -4780,18 +5255,18 @@ msgstr "" "{module} é aceito como substituto para a posição do compartimento do módulo " "quando conectado a um tipo de módulo." -#: dcim/models/device_component_templates.py:58 -#: dcim/models/device_components.py:65 +#: netbox/dcim/models/device_component_templates.py:58 +#: netbox/dcim/models/device_components.py:65 msgid "Physical label" msgstr "Rótulo físico" -#: dcim/models/device_component_templates.py:103 +#: netbox/dcim/models/device_component_templates.py:103 msgid "Component templates cannot be moved to a different device type." msgstr "" "Os modelos de componentes não podem ser movidos para um tipo diferente de " "dispositivo." -#: dcim/models/device_component_templates.py:154 +#: netbox/dcim/models/device_component_templates.py:154 msgid "" "A component template cannot be associated with both a device type and a " "module type." @@ -4799,7 +5274,7 @@ msgstr "" "Um modelo de componente não pode ser associado a um tipo de dispositivo e " "módulo ao mesmo tempo." -#: dcim/models/device_component_templates.py:158 +#: netbox/dcim/models/device_component_templates.py:158 msgid "" "A component template must be associated with either a device type or a " "module type." @@ -4807,138 +5282,138 @@ msgstr "" "Um modelo de componente deve estar associado a um tipo de dispositivo ou a " "um tipo de módulo." -#: dcim/models/device_component_templates.py:212 +#: netbox/dcim/models/device_component_templates.py:212 msgid "console port template" msgstr "modelo de porta de console" -#: dcim/models/device_component_templates.py:213 +#: netbox/dcim/models/device_component_templates.py:213 msgid "console port templates" msgstr "modelos de porta de console" -#: dcim/models/device_component_templates.py:246 +#: netbox/dcim/models/device_component_templates.py:246 msgid "console server port template" msgstr "modelo de porta de servidor de console" -#: dcim/models/device_component_templates.py:247 +#: netbox/dcim/models/device_component_templates.py:247 msgid "console server port templates" msgstr "modelos de porta de servidor de console" -#: dcim/models/device_component_templates.py:278 -#: dcim/models/device_components.py:352 +#: netbox/dcim/models/device_component_templates.py:278 +#: netbox/dcim/models/device_components.py:352 msgid "maximum draw" msgstr "consumo máximo" -#: dcim/models/device_component_templates.py:285 -#: dcim/models/device_components.py:359 +#: netbox/dcim/models/device_component_templates.py:285 +#: netbox/dcim/models/device_components.py:359 msgid "allocated draw" msgstr "consumo alocado" -#: dcim/models/device_component_templates.py:295 +#: netbox/dcim/models/device_component_templates.py:295 msgid "power port template" msgstr "modelo de porta de alimentação" -#: dcim/models/device_component_templates.py:296 +#: netbox/dcim/models/device_component_templates.py:296 msgid "power port templates" msgstr "modelos de porta de alimentação" -#: dcim/models/device_component_templates.py:315 -#: dcim/models/device_components.py:382 +#: netbox/dcim/models/device_component_templates.py:315 +#: netbox/dcim/models/device_components.py:382 #, python-brace-format msgid "Allocated draw cannot exceed the maximum draw ({maximum_draw}W)." msgstr "" "O consumo alocado não pode exceder o consumo máximo ({maximum_draw}W)." -#: dcim/models/device_component_templates.py:347 -#: dcim/models/device_components.py:477 +#: netbox/dcim/models/device_component_templates.py:347 +#: netbox/dcim/models/device_components.py:477 msgid "feed leg" msgstr "ramal de alimentação" -#: dcim/models/device_component_templates.py:351 -#: dcim/models/device_components.py:481 +#: netbox/dcim/models/device_component_templates.py:351 +#: netbox/dcim/models/device_components.py:481 msgid "Phase (for three-phase feeds)" msgstr "Fase (para alimentação trifásica)" -#: dcim/models/device_component_templates.py:357 +#: netbox/dcim/models/device_component_templates.py:357 msgid "power outlet template" msgstr "modelo de tomada elétrica" -#: dcim/models/device_component_templates.py:358 +#: netbox/dcim/models/device_component_templates.py:358 msgid "power outlet templates" msgstr "modelos de tomadas elétricas" -#: dcim/models/device_component_templates.py:367 +#: netbox/dcim/models/device_component_templates.py:367 #, python-brace-format msgid "Parent power port ({power_port}) must belong to the same device type" msgstr "" "Porta de alimentação principal ({power_port}) deve pertencer ao mesmo tipo " "de dispositivo" -#: dcim/models/device_component_templates.py:371 +#: netbox/dcim/models/device_component_templates.py:371 #, python-brace-format msgid "Parent power port ({power_port}) must belong to the same module type" msgstr "" "Porta de alimentação principal ({power_port}) deve pertencer ao mesmo tipo " "de módulo" -#: dcim/models/device_component_templates.py:423 -#: dcim/models/device_components.py:611 +#: netbox/dcim/models/device_component_templates.py:423 +#: netbox/dcim/models/device_components.py:611 msgid "management only" msgstr "somente gerenciamento" -#: dcim/models/device_component_templates.py:431 -#: dcim/models/device_components.py:550 +#: netbox/dcim/models/device_component_templates.py:431 +#: netbox/dcim/models/device_components.py:550 msgid "bridge interface" msgstr "interface bridge" -#: dcim/models/device_component_templates.py:449 -#: dcim/models/device_components.py:636 +#: netbox/dcim/models/device_component_templates.py:449 +#: netbox/dcim/models/device_components.py:636 msgid "wireless role" msgstr "função do wireless" -#: dcim/models/device_component_templates.py:455 +#: netbox/dcim/models/device_component_templates.py:455 msgid "interface template" msgstr "modelo de interface" -#: dcim/models/device_component_templates.py:456 +#: netbox/dcim/models/device_component_templates.py:456 msgid "interface templates" msgstr "modelos de interface" -#: dcim/models/device_component_templates.py:463 -#: dcim/models/device_components.py:804 -#: virtualization/models/virtualmachines.py:405 +#: netbox/dcim/models/device_component_templates.py:463 +#: netbox/dcim/models/device_components.py:804 +#: netbox/virtualization/models/virtualmachines.py:405 msgid "An interface cannot be bridged to itself." msgstr "Uma interface não pode ser conectada a si mesma." -#: dcim/models/device_component_templates.py:466 +#: netbox/dcim/models/device_component_templates.py:466 #, python-brace-format msgid "Bridge interface ({bridge}) must belong to the same device type" msgstr "" "Interface bridge ({bridge}) deve pertencer ao mesmo tipo de dispositivo" -#: dcim/models/device_component_templates.py:470 +#: netbox/dcim/models/device_component_templates.py:470 #, python-brace-format msgid "Bridge interface ({bridge}) must belong to the same module type" msgstr "Interface bridge ({bridge}) deve pertencer ao mesmo tipo de módulo" -#: dcim/models/device_component_templates.py:526 -#: dcim/models/device_components.py:984 +#: netbox/dcim/models/device_component_templates.py:526 +#: netbox/dcim/models/device_components.py:984 msgid "rear port position" msgstr "posição da porta traseira" -#: dcim/models/device_component_templates.py:551 +#: netbox/dcim/models/device_component_templates.py:551 msgid "front port template" msgstr "modelo de porta frontal" -#: dcim/models/device_component_templates.py:552 +#: netbox/dcim/models/device_component_templates.py:552 msgid "front port templates" msgstr "modelos de porta frontal" -#: dcim/models/device_component_templates.py:562 +#: netbox/dcim/models/device_component_templates.py:562 #, python-brace-format msgid "Rear port ({name}) must belong to the same device type" msgstr "Porta traseira ({name}) deve pertencer ao mesmo tipo de dispositivo" -#: dcim/models/device_component_templates.py:568 +#: netbox/dcim/models/device_component_templates.py:568 #, python-brace-format msgid "" "Invalid rear port position ({position}); rear port {name} has only {count} " @@ -4947,46 +5422,46 @@ msgstr "" "Posição inválida da porta traseira ({position}); porta traseira {name} tem " "apenas {count} posições" -#: dcim/models/device_component_templates.py:621 -#: dcim/models/device_components.py:1053 +#: netbox/dcim/models/device_component_templates.py:621 +#: netbox/dcim/models/device_components.py:1053 msgid "positions" msgstr "posições" -#: dcim/models/device_component_templates.py:632 +#: netbox/dcim/models/device_component_templates.py:632 msgid "rear port template" msgstr "modelo de porta traseira" -#: dcim/models/device_component_templates.py:633 +#: netbox/dcim/models/device_component_templates.py:633 msgid "rear port templates" msgstr "modelos de porta traseira" -#: dcim/models/device_component_templates.py:662 -#: dcim/models/device_components.py:1103 +#: netbox/dcim/models/device_component_templates.py:662 +#: netbox/dcim/models/device_components.py:1103 msgid "position" msgstr "posição" -#: dcim/models/device_component_templates.py:665 -#: dcim/models/device_components.py:1106 +#: netbox/dcim/models/device_component_templates.py:665 +#: netbox/dcim/models/device_components.py:1106 msgid "Identifier to reference when renaming installed components" msgstr "Identificador a ser referenciado ao renomear componentes instalados" -#: dcim/models/device_component_templates.py:671 +#: netbox/dcim/models/device_component_templates.py:671 msgid "module bay template" msgstr "modelo de compartimento de módulo" -#: dcim/models/device_component_templates.py:672 +#: netbox/dcim/models/device_component_templates.py:672 msgid "module bay templates" msgstr "modelos de compartimento de módulos" -#: dcim/models/device_component_templates.py:699 +#: netbox/dcim/models/device_component_templates.py:699 msgid "device bay template" msgstr "modelo de compartimento de dispositivos" -#: dcim/models/device_component_templates.py:700 +#: netbox/dcim/models/device_component_templates.py:700 msgid "device bay templates" msgstr "modelos de compartimentos de dispositivos" -#: dcim/models/device_component_templates.py:713 +#: netbox/dcim/models/device_component_templates.py:713 #, python-brace-format msgid "" "Subdevice role of device type ({device_type}) must be set to \"parent\" to " @@ -4995,202 +5470,207 @@ msgstr "" "Função do subdispositivo do tipo {device_type} deve ser definido como “pai” " "para permitir compartimentos de dispositivos." -#: dcim/models/device_component_templates.py:768 -#: dcim/models/device_components.py:1262 +#: netbox/dcim/models/device_component_templates.py:768 +#: netbox/dcim/models/device_components.py:1262 msgid "part ID" msgstr "ID da peça" -#: dcim/models/device_component_templates.py:770 -#: dcim/models/device_components.py:1264 +#: netbox/dcim/models/device_component_templates.py:770 +#: netbox/dcim/models/device_components.py:1264 msgid "Manufacturer-assigned part identifier" msgstr "Identificador da peça, designado pelo fabricante" -#: dcim/models/device_component_templates.py:787 +#: netbox/dcim/models/device_component_templates.py:787 msgid "inventory item template" msgstr "modelo de item de inventário" -#: dcim/models/device_component_templates.py:788 +#: netbox/dcim/models/device_component_templates.py:788 msgid "inventory item templates" msgstr "modelos de itens de inventário" -#: dcim/models/device_components.py:105 +#: netbox/dcim/models/device_components.py:105 msgid "Components cannot be moved to a different device." msgstr "Os componentes não podem ser movidos para um dispositivo diferente." -#: dcim/models/device_components.py:144 +#: netbox/dcim/models/device_components.py:144 msgid "cable end" msgstr "extremidade do cabo" -#: dcim/models/device_components.py:150 +#: netbox/dcim/models/device_components.py:150 msgid "mark connected" msgstr "marcar conectado" -#: dcim/models/device_components.py:152 +#: netbox/dcim/models/device_components.py:152 msgid "Treat as if a cable is connected" msgstr "Tratar como se um cabo estivesse conectado" -#: dcim/models/device_components.py:170 +#: netbox/dcim/models/device_components.py:170 msgid "Must specify cable end (A or B) when attaching a cable." msgstr "Deve especificar a extremidade (A ou B) ao conectar um cabo." -#: dcim/models/device_components.py:174 +#: netbox/dcim/models/device_components.py:174 msgid "Cable end must not be set without a cable." msgstr "A extremidade do cabo não deve ser definida sem um cabo." -#: dcim/models/device_components.py:178 +#: netbox/dcim/models/device_components.py:178 msgid "Cannot mark as connected with a cable attached." msgstr "Não é possível marcar como conectado com um cabo já conectado." -#: dcim/models/device_components.py:202 +#: netbox/dcim/models/device_components.py:202 #, python-brace-format msgid "{class_name} models must declare a parent_object property" msgstr " Os modelos {class_name} devem declarar uma propriedade parent_object" -#: dcim/models/device_components.py:287 dcim/models/device_components.py:316 -#: dcim/models/device_components.py:349 dcim/models/device_components.py:467 +#: 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 msgid "Physical port type" msgstr "Tipo de porta física" -#: dcim/models/device_components.py:290 dcim/models/device_components.py:319 +#: netbox/dcim/models/device_components.py:290 +#: netbox/dcim/models/device_components.py:319 msgid "speed" msgstr "velocidade" -#: dcim/models/device_components.py:294 dcim/models/device_components.py:323 +#: netbox/dcim/models/device_components.py:294 +#: netbox/dcim/models/device_components.py:323 msgid "Port speed in bits per second" msgstr "Velocidade da porta em bits por segundo" -#: dcim/models/device_components.py:300 +#: netbox/dcim/models/device_components.py:300 msgid "console port" msgstr "porta de console" -#: dcim/models/device_components.py:301 +#: netbox/dcim/models/device_components.py:301 msgid "console ports" msgstr "portas de console" -#: dcim/models/device_components.py:329 +#: netbox/dcim/models/device_components.py:329 msgid "console server port" msgstr "porta de servidor de console" -#: dcim/models/device_components.py:330 +#: netbox/dcim/models/device_components.py:330 msgid "console server ports" msgstr "portas de servidor de console" -#: dcim/models/device_components.py:369 +#: netbox/dcim/models/device_components.py:369 msgid "power port" msgstr "porta de alimentação" -#: dcim/models/device_components.py:370 +#: netbox/dcim/models/device_components.py:370 msgid "power ports" msgstr "portas de alimentação" -#: dcim/models/device_components.py:487 +#: netbox/dcim/models/device_components.py:487 msgid "power outlet" msgstr "tomada elétrica" -#: dcim/models/device_components.py:488 +#: netbox/dcim/models/device_components.py:488 msgid "power outlets" msgstr "tomadas elétricas" -#: dcim/models/device_components.py:499 +#: netbox/dcim/models/device_components.py:499 #, python-brace-format msgid "Parent power port ({power_port}) must belong to the same device" msgstr "" "Porta de alimentação principal ({power_port}) deve pertencer ao mesmo " "dispositivo" -#: dcim/models/device_components.py:530 vpn/models/crypto.py:81 -#: vpn/models/crypto.py:226 +#: netbox/dcim/models/device_components.py:530 netbox/vpn/models/crypto.py:81 +#: netbox/vpn/models/crypto.py:226 msgid "mode" msgstr "modo" -#: dcim/models/device_components.py:534 +#: netbox/dcim/models/device_components.py:534 msgid "IEEE 802.1Q tagging strategy" msgstr "Estratégia de tagueamento IEEE 802.1Q" -#: dcim/models/device_components.py:542 +#: netbox/dcim/models/device_components.py:542 msgid "parent interface" msgstr "interface pai" -#: dcim/models/device_components.py:602 +#: netbox/dcim/models/device_components.py:602 msgid "parent LAG" msgstr "LAG pai" -#: dcim/models/device_components.py:612 +#: netbox/dcim/models/device_components.py:612 msgid "This interface is used only for out-of-band management" msgstr "Esta interface é usada somente para gerenciamento fora de banda" -#: dcim/models/device_components.py:617 +#: netbox/dcim/models/device_components.py:617 msgid "speed (Kbps)" msgstr "velocidade (Kbps)" -#: dcim/models/device_components.py:620 +#: netbox/dcim/models/device_components.py:620 msgid "duplex" msgstr "duplex" -#: dcim/models/device_components.py:630 +#: netbox/dcim/models/device_components.py:630 msgid "64-bit World Wide Name" msgstr "64-bit World Wide Name" -#: dcim/models/device_components.py:642 +#: netbox/dcim/models/device_components.py:642 msgid "wireless channel" msgstr "canal do wireless" -#: dcim/models/device_components.py:649 +#: netbox/dcim/models/device_components.py:649 msgid "channel frequency (MHz)" msgstr "frequência do canal (MHz)" -#: dcim/models/device_components.py:650 dcim/models/device_components.py:658 +#: netbox/dcim/models/device_components.py:650 +#: netbox/dcim/models/device_components.py:658 msgid "Populated by selected channel (if set)" msgstr "Preenchido pelo canal selecionado (se definido)" -#: dcim/models/device_components.py:664 +#: netbox/dcim/models/device_components.py:664 msgid "transmit power (dBm)" msgstr "potência de transmissão (dBm)" -#: dcim/models/device_components.py:689 wireless/models.py:117 +#: netbox/dcim/models/device_components.py:689 netbox/wireless/models.py:117 msgid "wireless LANs" msgstr "redes wireless" -#: dcim/models/device_components.py:697 -#: virtualization/models/virtualmachines.py:335 +#: netbox/dcim/models/device_components.py:697 +#: netbox/virtualization/models/virtualmachines.py:335 msgid "untagged VLAN" msgstr "VLAN não tagueada" -#: dcim/models/device_components.py:703 -#: virtualization/models/virtualmachines.py:341 +#: netbox/dcim/models/device_components.py:703 +#: netbox/virtualization/models/virtualmachines.py:341 msgid "tagged VLANs" msgstr "VLANs tagueadas" -#: dcim/models/device_components.py:745 -#: virtualization/models/virtualmachines.py:377 +#: netbox/dcim/models/device_components.py:745 +#: netbox/virtualization/models/virtualmachines.py:377 msgid "interface" msgstr "interface" -#: dcim/models/device_components.py:746 -#: virtualization/models/virtualmachines.py:378 +#: netbox/dcim/models/device_components.py:746 +#: netbox/virtualization/models/virtualmachines.py:378 msgid "interfaces" msgstr "interfaces" -#: dcim/models/device_components.py:757 +#: netbox/dcim/models/device_components.py:757 #, python-brace-format msgid "{display_type} interfaces cannot have a cable attached." msgstr "As interfaces {display_type} não podem ter um cabo conectado." -#: dcim/models/device_components.py:765 +#: netbox/dcim/models/device_components.py:765 #, python-brace-format msgid "{display_type} interfaces cannot be marked as connected." msgstr " As interfaces {display_type}não podem ser marcadas como conectadas." -#: dcim/models/device_components.py:774 -#: virtualization/models/virtualmachines.py:390 +#: netbox/dcim/models/device_components.py:774 +#: netbox/virtualization/models/virtualmachines.py:390 msgid "An interface cannot be its own parent." msgstr "Uma interface não pode ser pai de si mesma." -#: dcim/models/device_components.py:778 +#: netbox/dcim/models/device_components.py:778 msgid "Only virtual interfaces may be assigned to a parent interface." msgstr "Somente interfaces virtuais podem ser associadas a uma interface pai." -#: dcim/models/device_components.py:785 +#: netbox/dcim/models/device_components.py:785 #, python-brace-format msgid "" "The selected parent interface ({interface}) belongs to a different device " @@ -5199,7 +5679,7 @@ msgstr "" "A interface pai selecionada ({interface}) pertence a um dispositivo " "diferente ({device})" -#: dcim/models/device_components.py:791 +#: netbox/dcim/models/device_components.py:791 #, python-brace-format msgid "" "The selected parent interface ({interface}) belongs to {device}, which is " @@ -5208,7 +5688,7 @@ msgstr "" "A interface pai selecionada ({interface}) pertence a {device}, que não faz " "parte do chassi virtual {virtual_chassis}." -#: dcim/models/device_components.py:811 +#: netbox/dcim/models/device_components.py:811 #, python-brace-format msgid "" "The selected bridge interface ({bridge}) belongs to a different device " @@ -5217,7 +5697,7 @@ msgstr "" "A interface bridge selecionada ({bridge}) pertence a um dispositivo " "diferente ({device})." -#: dcim/models/device_components.py:817 +#: netbox/dcim/models/device_components.py:817 #, python-brace-format msgid "" "The selected bridge interface ({interface}) belongs to {device}, which is " @@ -5226,15 +5706,15 @@ msgstr "" "A interface bridge selecionada ({interface}) pertence a {device}, que não " "faz parte do chassi virtual {virtual_chassis}." -#: dcim/models/device_components.py:828 +#: netbox/dcim/models/device_components.py:828 msgid "Virtual interfaces cannot have a parent LAG interface." msgstr "Interfaces virtuais não podem ter uma interface LAG pai." -#: dcim/models/device_components.py:832 +#: netbox/dcim/models/device_components.py:832 msgid "A LAG interface cannot be its own parent." msgstr "Uma interface LAG não pode ser pai de si mesma." -#: dcim/models/device_components.py:839 +#: netbox/dcim/models/device_components.py:839 #, python-brace-format msgid "" "The selected LAG interface ({lag}) belongs to a different device ({device})." @@ -5242,7 +5722,7 @@ msgstr "" "A interface LAG selecionada ({lag}) pertence a um dispositivo diferente " "({device})." -#: dcim/models/device_components.py:845 +#: netbox/dcim/models/device_components.py:845 #, python-brace-format msgid "" "The selected LAG interface ({lag}) belongs to {device}, which is not part of" @@ -5251,48 +5731,48 @@ msgstr "" "A interface LAG selecionada ({lag}) pertence a {device}, que não faz parte " "do chassi virtual {virtual_chassis}." -#: dcim/models/device_components.py:856 +#: netbox/dcim/models/device_components.py:856 msgid "Virtual interfaces cannot have a PoE mode." msgstr "Interfaces virtuais não podem ter um modo de operação do PoE." -#: dcim/models/device_components.py:860 +#: netbox/dcim/models/device_components.py:860 msgid "Virtual interfaces cannot have a PoE type." msgstr "As interfaces virtuais não podem ter um tipo de PoE." -#: dcim/models/device_components.py:866 +#: netbox/dcim/models/device_components.py:866 msgid "Must specify PoE mode when designating a PoE type." msgstr "Deve especificar o modo PoE ao designar um tipo de PoE." -#: dcim/models/device_components.py:873 +#: netbox/dcim/models/device_components.py:873 msgid "Wireless role may be set only on wireless interfaces." msgstr "" "A função do wireless pode ser definida somente em interfaces wireless." -#: dcim/models/device_components.py:875 +#: netbox/dcim/models/device_components.py:875 msgid "Channel may be set only on wireless interfaces." msgstr "O canal pode ser configurado somente em interfaces wireless." -#: dcim/models/device_components.py:881 +#: netbox/dcim/models/device_components.py:881 msgid "Channel frequency may be set only on wireless interfaces." msgstr "" "A frequência do canal pode ser definida somente em interfaces wireless." -#: dcim/models/device_components.py:885 +#: netbox/dcim/models/device_components.py:885 msgid "Cannot specify custom frequency with channel selected." msgstr "" "Não é possível especificar a frequência personalizada com o canal " "selecionado." -#: dcim/models/device_components.py:891 +#: netbox/dcim/models/device_components.py:891 msgid "Channel width may be set only on wireless interfaces." msgstr "A largura do canal pode ser definida somente em interfaces wireless." -#: dcim/models/device_components.py:893 +#: netbox/dcim/models/device_components.py:893 msgid "Cannot specify custom width with channel selected." msgstr "" "Não é possível especificar a largura personalizada com o canal selecionado." -#: dcim/models/device_components.py:901 +#: netbox/dcim/models/device_components.py:901 #, python-brace-format msgid "" "The untagged VLAN ({untagged_vlan}) must belong to the same site as the " @@ -5301,24 +5781,24 @@ msgstr "" "A VLAN não tagueada ({untagged_vlan}) deve pertencer ao mesmo site do " "dispositivo pai da interface ou deve ser global." -#: dcim/models/device_components.py:990 +#: netbox/dcim/models/device_components.py:990 msgid "Mapped position on corresponding rear port" msgstr "Posição mapeada na porta traseira correspondente" -#: dcim/models/device_components.py:1006 +#: netbox/dcim/models/device_components.py:1006 msgid "front port" msgstr "porta frontal" -#: dcim/models/device_components.py:1007 +#: netbox/dcim/models/device_components.py:1007 msgid "front ports" msgstr "portas frontais" -#: dcim/models/device_components.py:1021 +#: netbox/dcim/models/device_components.py:1021 #, python-brace-format msgid "Rear port ({rear_port}) must belong to the same device" msgstr "Porta traseira ({rear_port}) deve pertencer ao mesmo dispositivo" -#: dcim/models/device_components.py:1029 +#: netbox/dcim/models/device_components.py:1029 #, python-brace-format msgid "" "Invalid rear port position ({rear_port_position}): Rear port {name} has only" @@ -5327,19 +5807,19 @@ msgstr "" "Posição inválida da porta traseira ({rear_port_position}): Porta traseira " "{name} tem apenas {positions} posições." -#: dcim/models/device_components.py:1059 +#: netbox/dcim/models/device_components.py:1059 msgid "Number of front ports which may be mapped" msgstr "Número de portas frontais que podem ser mapeadas" -#: dcim/models/device_components.py:1064 +#: netbox/dcim/models/device_components.py:1064 msgid "rear port" msgstr "porta traseira" -#: dcim/models/device_components.py:1065 +#: netbox/dcim/models/device_components.py:1065 msgid "rear ports" msgstr "portas traseiras" -#: dcim/models/device_components.py:1079 +#: netbox/dcim/models/device_components.py:1079 #, python-brace-format msgid "" "The number of positions cannot be less than the number of mapped front ports" @@ -5348,40 +5828,41 @@ msgstr "" "O número de posições não pode ser menor que o número de portas frontais " "mapeadas ({frontport_count})" -#: dcim/models/device_components.py:1120 +#: netbox/dcim/models/device_components.py:1120 msgid "module bay" msgstr "compartimento de módulos" -#: dcim/models/device_components.py:1121 +#: netbox/dcim/models/device_components.py:1121 msgid "module bays" msgstr "compartimentos de módulos" -#: dcim/models/device_components.py:1138 dcim/models/devices.py:1224 +#: netbox/dcim/models/device_components.py:1138 +#: netbox/dcim/models/devices.py:1224 msgid "A module bay cannot belong to a module installed within it." msgstr "" "Um compartimento de módulo não pode pertencer a um módulo instalado dentro " "dele." -#: dcim/models/device_components.py:1164 +#: netbox/dcim/models/device_components.py:1164 msgid "device bay" msgstr "compartimento de dispositivos" -#: dcim/models/device_components.py:1165 +#: netbox/dcim/models/device_components.py:1165 msgid "device bays" msgstr "compartimentos de dispositivos" -#: dcim/models/device_components.py:1175 +#: netbox/dcim/models/device_components.py:1175 #, python-brace-format msgid "This type of device ({device_type}) does not support device bays." msgstr "" "Este tipo de dispositivo ({device_type}) não suporta compartimentos de " "dispositivos." -#: dcim/models/device_components.py:1181 +#: netbox/dcim/models/device_components.py:1181 msgid "Cannot install a device into itself." msgstr "Não é possível instalar um dispositivo em si mesmo." -#: dcim/models/device_components.py:1189 +#: netbox/dcim/models/device_components.py:1189 #, python-brace-format msgid "" "Cannot install the specified device; device is already installed in {bay}." @@ -5389,115 +5870,117 @@ msgstr "" "Não é possível instalar o dispositivo especificado; o dispositivo já está " "instalado em {bay}." -#: dcim/models/device_components.py:1210 +#: netbox/dcim/models/device_components.py:1210 msgid "inventory item role" msgstr "função do item de inventário" -#: dcim/models/device_components.py:1211 +#: netbox/dcim/models/device_components.py:1211 msgid "inventory item roles" msgstr "funções dos itens de inventário" -#: dcim/models/device_components.py:1268 dcim/models/devices.py:607 -#: dcim/models/devices.py:1181 dcim/models/racks.py:313 -#: virtualization/models/virtualmachines.py:131 +#: 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 msgid "serial number" msgstr "número de série" -#: dcim/models/device_components.py:1276 dcim/models/devices.py:615 -#: dcim/models/devices.py:1188 dcim/models/racks.py:320 +#: 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 msgid "asset tag" msgstr "etiqueta de patrimônio" -#: dcim/models/device_components.py:1277 +#: netbox/dcim/models/device_components.py:1277 msgid "A unique tag used to identify this item" msgstr "Uma etiqueta exclusiva usada para identificar este item" -#: dcim/models/device_components.py:1280 +#: netbox/dcim/models/device_components.py:1280 msgid "discovered" msgstr "descoberto" -#: dcim/models/device_components.py:1282 +#: netbox/dcim/models/device_components.py:1282 msgid "This item was automatically discovered" msgstr "Este item foi descoberto automaticamente" -#: dcim/models/device_components.py:1300 +#: netbox/dcim/models/device_components.py:1300 msgid "inventory item" msgstr "item de inventário" -#: dcim/models/device_components.py:1301 +#: netbox/dcim/models/device_components.py:1301 msgid "inventory items" msgstr "itens de inventário" -#: dcim/models/device_components.py:1312 +#: netbox/dcim/models/device_components.py:1312 msgid "Cannot assign self as parent." msgstr "Não é possível designar a si mesmo como pai." -#: dcim/models/device_components.py:1320 +#: netbox/dcim/models/device_components.py:1320 msgid "Parent inventory item does not belong to the same device." msgstr "O item pai do inventário não pertence ao mesmo dispositivo." -#: dcim/models/device_components.py:1326 +#: netbox/dcim/models/device_components.py:1326 msgid "Cannot move an inventory item with dependent children" msgstr "" "Não é possível mover um item de inventário com itens filhos dependentes" -#: dcim/models/device_components.py:1334 +#: netbox/dcim/models/device_components.py:1334 msgid "Cannot assign inventory item to component on another device" msgstr "" "Não é possível atribuir um item de inventário ao componente em outro " "dispositivo" -#: dcim/models/devices.py:54 +#: netbox/dcim/models/devices.py:54 msgid "manufacturer" msgstr "fabricante" -#: dcim/models/devices.py:55 +#: netbox/dcim/models/devices.py:55 msgid "manufacturers" msgstr "fabricantes" -#: dcim/models/devices.py:82 dcim/models/devices.py:382 -#: dcim/models/racks.py:133 +#: netbox/dcim/models/devices.py:82 netbox/dcim/models/devices.py:382 +#: netbox/dcim/models/racks.py:133 msgid "model" msgstr "modelo" -#: dcim/models/devices.py:95 +#: netbox/dcim/models/devices.py:95 msgid "default platform" msgstr "plataforma padrão" -#: dcim/models/devices.py:98 dcim/models/devices.py:386 +#: netbox/dcim/models/devices.py:98 netbox/dcim/models/devices.py:386 msgid "part number" msgstr "part number" -#: dcim/models/devices.py:101 dcim/models/devices.py:389 +#: netbox/dcim/models/devices.py:101 netbox/dcim/models/devices.py:389 msgid "Discrete part number (optional)" msgstr "Part number discreto (opcional)" -#: dcim/models/devices.py:107 dcim/models/racks.py:54 +#: netbox/dcim/models/devices.py:107 netbox/dcim/models/racks.py:54 msgid "height (U)" msgstr "altura (U)" -#: dcim/models/devices.py:111 +#: netbox/dcim/models/devices.py:111 msgid "exclude from utilization" msgstr "excluir da utilização" -#: dcim/models/devices.py:112 +#: netbox/dcim/models/devices.py:112 msgid "Devices of this type are excluded when calculating rack utilization." msgstr "" "Dispositivos deste tipo são excluídos ao calcular a utilização do rack." -#: dcim/models/devices.py:116 +#: netbox/dcim/models/devices.py:116 msgid "is full depth" msgstr "é full-depth" -#: dcim/models/devices.py:117 +#: netbox/dcim/models/devices.py:117 msgid "Device consumes both front and rear rack faces." msgstr "O dispositivo consome as faces frontal e traseira do rack." -#: dcim/models/devices.py:123 +#: netbox/dcim/models/devices.py:123 msgid "parent/child status" msgstr "status pai/filho" -#: dcim/models/devices.py:124 +#: netbox/dcim/models/devices.py:124 msgid "" "Parent devices house child devices in device bays. Leave blank if this " "device type is neither a parent nor a child." @@ -5506,24 +5989,24 @@ msgstr "" "dispositivos. Deixe em branco se este tipo de dispositivo não for nem pai " "nem filho." -#: dcim/models/devices.py:128 dcim/models/devices.py:392 -#: dcim/models/devices.py:659 dcim/models/racks.py:324 +#: netbox/dcim/models/devices.py:128 netbox/dcim/models/devices.py:392 +#: netbox/dcim/models/devices.py:659 netbox/dcim/models/racks.py:324 msgid "airflow" msgstr "fluxo de ar" -#: dcim/models/devices.py:204 +#: netbox/dcim/models/devices.py:204 msgid "device type" msgstr "tipo de dispositivo" -#: dcim/models/devices.py:205 +#: netbox/dcim/models/devices.py:205 msgid "device types" msgstr "tipos de dispositivos" -#: dcim/models/devices.py:290 +#: netbox/dcim/models/devices.py:290 msgid "U height must be in increments of 0.5 rack units." msgstr "A altura U deve estar em incrementos de 0,5U." -#: dcim/models/devices.py:307 +#: netbox/dcim/models/devices.py:307 #, python-brace-format msgid "" "Device {device} in rack {rack} does not have sufficient space to accommodate" @@ -5532,7 +6015,7 @@ msgstr "" "Dispositivo {device} no rack {rack} não tem espaço suficiente para acomodar " "uma altura de {height}U" -#: dcim/models/devices.py:322 +#: netbox/dcim/models/devices.py:322 #, python-brace-format msgid "" "Unable to set 0U height: Found {racked_instance_count} " @@ -5542,7 +6025,7 @@ msgstr "" "href=\"{url}\">{racked_instance_count} instância(s) já montada(s) " "dentro de racks." -#: dcim/models/devices.py:331 +#: netbox/dcim/models/devices.py:331 msgid "" "Must delete all device bay templates associated with this device before " "declassifying it as a parent device." @@ -5551,151 +6034,151 @@ msgstr "" "associados a este dispositivo antes de desclassificá-lo como dispositivo " "pai." -#: dcim/models/devices.py:337 +#: netbox/dcim/models/devices.py:337 msgid "Child device types must be 0U." msgstr "Dispositivo filho deve ser 0U." -#: dcim/models/devices.py:411 +#: netbox/dcim/models/devices.py:411 msgid "module type" msgstr "tipo de módulo" -#: dcim/models/devices.py:412 +#: netbox/dcim/models/devices.py:412 msgid "module types" msgstr "tipos de módulos" -#: dcim/models/devices.py:485 +#: netbox/dcim/models/devices.py:485 msgid "Virtual machines may be assigned to this role" msgstr "Máquinas virtuais podem ser atribuídas a esta função" -#: dcim/models/devices.py:497 +#: netbox/dcim/models/devices.py:497 msgid "device role" msgstr "função de dispositivo" -#: dcim/models/devices.py:498 +#: netbox/dcim/models/devices.py:498 msgid "device roles" msgstr "funções de dispositivos" -#: dcim/models/devices.py:515 +#: netbox/dcim/models/devices.py:515 msgid "Optionally limit this platform to devices of a certain manufacturer" msgstr "" "Opcionalmente, limite esta plataforma a dispositivos de um determinado " "fabricante" -#: dcim/models/devices.py:527 +#: netbox/dcim/models/devices.py:527 msgid "platform" msgstr "plataforma" -#: dcim/models/devices.py:528 +#: netbox/dcim/models/devices.py:528 msgid "platforms" msgstr "plataformas" -#: dcim/models/devices.py:576 +#: netbox/dcim/models/devices.py:576 msgid "The function this device serves" msgstr "A função que este dispositivo desempenha" -#: dcim/models/devices.py:608 +#: netbox/dcim/models/devices.py:608 msgid "Chassis serial number, assigned by the manufacturer" msgstr "Número de série do chassi, designado pelo fabricante" -#: dcim/models/devices.py:616 dcim/models/devices.py:1189 +#: netbox/dcim/models/devices.py:616 netbox/dcim/models/devices.py:1189 msgid "A unique tag used to identify this device" msgstr "Uma etiqueta exclusiva usada para identificar este dispositivo" -#: dcim/models/devices.py:643 +#: netbox/dcim/models/devices.py:643 msgid "position (U)" msgstr "posição (U)" -#: dcim/models/devices.py:650 +#: netbox/dcim/models/devices.py:650 msgid "rack face" msgstr "face do rack" -#: dcim/models/devices.py:670 dcim/models/devices.py:1415 -#: virtualization/models/virtualmachines.py:100 +#: netbox/dcim/models/devices.py:670 netbox/dcim/models/devices.py:1420 +#: netbox/virtualization/models/virtualmachines.py:100 msgid "primary IPv4" msgstr "IPv4 primário" -#: dcim/models/devices.py:678 dcim/models/devices.py:1423 -#: virtualization/models/virtualmachines.py:108 +#: netbox/dcim/models/devices.py:678 netbox/dcim/models/devices.py:1428 +#: netbox/virtualization/models/virtualmachines.py:108 msgid "primary IPv6" msgstr "IPv6 primário" -#: dcim/models/devices.py:686 +#: netbox/dcim/models/devices.py:686 msgid "out-of-band IP" msgstr "IP fora de banda" -#: dcim/models/devices.py:703 +#: netbox/dcim/models/devices.py:703 msgid "VC position" msgstr "Posição no Chassi Virtual" -#: dcim/models/devices.py:706 +#: netbox/dcim/models/devices.py:706 msgid "Virtual chassis position" msgstr "Posição no chassi virtual" -#: dcim/models/devices.py:709 +#: netbox/dcim/models/devices.py:709 msgid "VC priority" msgstr "Prioridade no Chassi Virtual" -#: dcim/models/devices.py:713 +#: netbox/dcim/models/devices.py:713 msgid "Virtual chassis master election priority" msgstr "Prioridade de eleição do mestre no chassi virtual" -#: dcim/models/devices.py:716 dcim/models/sites.py:207 +#: netbox/dcim/models/devices.py:716 netbox/dcim/models/sites.py:207 msgid "latitude" msgstr "latitude" -#: dcim/models/devices.py:721 dcim/models/devices.py:729 -#: dcim/models/sites.py:212 dcim/models/sites.py:220 +#: netbox/dcim/models/devices.py:721 netbox/dcim/models/devices.py:729 +#: netbox/dcim/models/sites.py:212 netbox/dcim/models/sites.py:220 msgid "GPS coordinate in decimal format (xx.yyyyyy)" msgstr "Coordenada GPS em formato decimal (xx.yyyyyy)" -#: dcim/models/devices.py:724 dcim/models/sites.py:215 +#: netbox/dcim/models/devices.py:724 netbox/dcim/models/sites.py:215 msgid "longitude" msgstr "longitude" -#: dcim/models/devices.py:797 +#: netbox/dcim/models/devices.py:797 msgid "Device name must be unique per site." msgstr "O nome do dispositivo deve ser exclusivo por site." -#: dcim/models/devices.py:808 ipam/models/services.py:75 +#: netbox/dcim/models/devices.py:808 netbox/ipam/models/services.py:75 msgid "device" msgstr "dispositivo" -#: dcim/models/devices.py:809 +#: netbox/dcim/models/devices.py:809 msgid "devices" msgstr "dispositivos" -#: dcim/models/devices.py:835 +#: netbox/dcim/models/devices.py:835 #, python-brace-format msgid "Rack {rack} does not belong to site {site}." msgstr "Rack {rack} não pertence ao site {site}." -#: dcim/models/devices.py:840 +#: 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}." -#: dcim/models/devices.py:846 +#: 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}." -#: dcim/models/devices.py:853 +#: netbox/dcim/models/devices.py:853 msgid "Cannot select a rack face without assigning a rack." msgstr "Não é possível selecionar uma face de rack sem atribuir um rack." -#: dcim/models/devices.py:857 +#: netbox/dcim/models/devices.py:857 msgid "Cannot select a rack position without assigning a rack." msgstr "Não é possível selecionar uma posição de rack sem atribuir um rack." -#: dcim/models/devices.py:863 +#: netbox/dcim/models/devices.py:863 msgid "Position must be in increments of 0.5 rack units." msgstr "A posição deve estar em incrementos de 0,5U." -#: dcim/models/devices.py:867 +#: netbox/dcim/models/devices.py:867 msgid "Must specify rack face when defining rack position." msgstr "Deve especificar a face do rack ao definir a posição do rack." -#: dcim/models/devices.py:875 +#: netbox/dcim/models/devices.py:875 #, python-brace-format msgid "" "A 0U device type ({device_type}) cannot be assigned to a rack position." @@ -5703,7 +6186,7 @@ msgstr "" "Um tipo de dispositivo 0U ({device_type}) não pode ser alocado em uma " "posição de rack." -#: dcim/models/devices.py:886 +#: netbox/dcim/models/devices.py:886 msgid "" "Child device types cannot be assigned to a rack face. This is an attribute " "of the parent device." @@ -5711,7 +6194,7 @@ msgstr "" "Dispositivo filho não pode ser alocado em uma face do rack. Este é um " "atributo do dispositivo pai." -#: dcim/models/devices.py:893 +#: netbox/dcim/models/devices.py:893 msgid "" "Child device types cannot be assigned to a rack position. This is an " "attribute of the parent device." @@ -5719,7 +6202,7 @@ msgstr "" "Dispositivo filho não pode ser alocado em uma posição de rack. Este é um " "atributo do dispositivo pai." -#: dcim/models/devices.py:907 +#: netbox/dcim/models/devices.py:907 #, python-brace-format msgid "" "U{position} is already occupied or does not have sufficient space to " @@ -5728,23 +6211,23 @@ msgstr "" "U{position} já está ocupado ou não tem espaço suficiente para acomodar este " "tipo de dispositivo: {device_type} ({u_height}U)" -#: dcim/models/devices.py:922 +#: netbox/dcim/models/devices.py:922 #, python-brace-format msgid "{ip} is not an IPv4 address." msgstr "{ip} não é um endereço IPv4." -#: dcim/models/devices.py:931 dcim/models/devices.py:946 +#: netbox/dcim/models/devices.py:931 netbox/dcim/models/devices.py:946 #, python-brace-format msgid "The specified IP address ({ip}) is not assigned to this device." msgstr "" "O endereço IP especificado ({ip}) não está alocado a este dispositivo." -#: dcim/models/devices.py:937 +#: netbox/dcim/models/devices.py:937 #, python-brace-format msgid "{ip} is not an IPv6 address." msgstr "{ip} não é um endereço IPv6." -#: dcim/models/devices.py:964 +#: netbox/dcim/models/devices.py:964 #, python-brace-format msgid "" "The assigned platform is limited to {platform_manufacturer} device types, " @@ -5754,17 +6237,17 @@ msgstr "" "{platform_manufacturer}, mas este pertence ao fabricante " "{devicetype_manufacturer}." -#: dcim/models/devices.py:975 +#: netbox/dcim/models/devices.py:975 #, python-brace-format msgid "The assigned cluster belongs to a different site ({site})" msgstr "O cluster definido pertence a um site diferente ({site})" -#: dcim/models/devices.py:983 +#: netbox/dcim/models/devices.py:983 msgid "A device assigned to a virtual chassis must have its position defined." msgstr "" "Um dispositivo associado a um chassi virtual deve ter sua posição definida." -#: dcim/models/devices.py:988 +#: netbox/dcim/models/devices.py:988 #, python-brace-format msgid "" "Device cannot be removed from virtual chassis {virtual_chassis} because it " @@ -5773,15 +6256,15 @@ msgstr "" "O dispositivo não pode ser removido do chassi virtual {virtual_chassis} " "porque atualmente é designado como seu mestre." -#: dcim/models/devices.py:1196 +#: netbox/dcim/models/devices.py:1196 msgid "module" msgstr "módulo" -#: dcim/models/devices.py:1197 +#: netbox/dcim/models/devices.py:1197 msgid "modules" msgstr "módulos" -#: dcim/models/devices.py:1213 +#: netbox/dcim/models/devices.py:1213 #, python-brace-format msgid "" "Module must be installed within a module bay belonging to the assigned " @@ -5790,22 +6273,22 @@ msgstr "" "O módulo deve ser instalado dentro de um compartimento pertencente ao " "dispositivo ({device})." -#: dcim/models/devices.py:1334 +#: netbox/dcim/models/devices.py:1339 msgid "domain" msgstr "domínio" -#: dcim/models/devices.py:1347 dcim/models/devices.py:1348 +#: netbox/dcim/models/devices.py:1352 netbox/dcim/models/devices.py:1353 msgid "virtual chassis" msgstr "chassi virtual" -#: dcim/models/devices.py:1363 +#: netbox/dcim/models/devices.py:1368 #, python-brace-format msgid "" "The selected master ({master}) is not assigned to this virtual chassis." msgstr "" "O mestre selecionado ({master}) não está associado a este chassi virtual." -#: dcim/models/devices.py:1379 +#: netbox/dcim/models/devices.py:1384 #, python-brace-format msgid "" "Unable to delete virtual chassis {self}. There are member interfaces which " @@ -5814,105 +6297,105 @@ msgstr "" "Não foi possível excluir o chassi virtual {self}. Existem interfaces membro " "que formam interfaces LAG entre chassis." -#: dcim/models/devices.py:1404 vpn/models/l2vpn.py:37 +#: netbox/dcim/models/devices.py:1409 netbox/vpn/models/l2vpn.py:37 msgid "identifier" msgstr "identificador" -#: dcim/models/devices.py:1405 +#: netbox/dcim/models/devices.py:1410 msgid "Numeric identifier unique to the parent device" msgstr "Identificador numérico exclusivo para o dispositivo principal" -#: dcim/models/devices.py:1433 extras/models/customfields.py:225 -#: extras/models/models.py:107 extras/models/models.py:694 -#: netbox/models/__init__.py:115 +#: 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:115 msgid "comments" msgstr "comentários" -#: dcim/models/devices.py:1449 +#: netbox/dcim/models/devices.py:1454 msgid "virtual device context" msgstr "contexto de dispositivo virtual" -#: dcim/models/devices.py:1450 +#: netbox/dcim/models/devices.py:1455 msgid "virtual device contexts" msgstr "contextos de dispositivos virtuais" -#: dcim/models/devices.py:1482 +#: netbox/dcim/models/devices.py:1487 #, python-brace-format msgid "{ip} is not an IPv{family} address." msgstr "{ip} não é um endereço IPv{family}." -#: dcim/models/devices.py:1488 +#: netbox/dcim/models/devices.py:1493 msgid "Primary IP address must belong to an interface on the assigned device." msgstr "" "O endereço IP primário deve pertencer a uma interface no dispositivo " "associado." -#: dcim/models/mixins.py:15 extras/models/configs.py:41 -#: extras/models/models.py:313 extras/models/models.py:522 -#: extras/models/search.py:48 ipam/models/ip.py:194 +#: netbox/dcim/models/mixins.py:15 netbox/extras/models/configs.py:41 +#: netbox/extras/models/models.py:313 netbox/extras/models/models.py:522 +#: netbox/extras/models/search.py:48 netbox/ipam/models/ip.py:194 msgid "weight" msgstr "peso" -#: dcim/models/mixins.py:22 +#: netbox/dcim/models/mixins.py:22 msgid "weight unit" msgstr "unidade de peso" -#: dcim/models/mixins.py:51 +#: netbox/dcim/models/mixins.py:51 msgid "Must specify a unit when setting a weight" msgstr "Deve especificar uma unidade ao definir um peso" -#: dcim/models/power.py:55 +#: netbox/dcim/models/power.py:55 msgid "power panel" msgstr "painel de alimentação" -#: dcim/models/power.py:56 +#: netbox/dcim/models/power.py:56 msgid "power panels" msgstr "quadros de alimentação" -#: dcim/models/power.py:70 +#: netbox/dcim/models/power.py:70 #, python-brace-format msgid "" "Location {location} ({location_site}) is in a different site than {site}" msgstr "" "Localização {location} ({location_site}) está em um site diferente do {site}" -#: dcim/models/power.py:108 +#: netbox/dcim/models/power.py:108 msgid "supply" msgstr "tipo de alimentação" -#: dcim/models/power.py:114 +#: netbox/dcim/models/power.py:114 msgid "phase" msgstr "fase" -#: dcim/models/power.py:120 +#: netbox/dcim/models/power.py:120 msgid "voltage" msgstr "tensão" -#: dcim/models/power.py:125 +#: netbox/dcim/models/power.py:125 msgid "amperage" msgstr "corrente" -#: dcim/models/power.py:130 +#: netbox/dcim/models/power.py:130 msgid "max utilization" msgstr "utilização máxima" -#: dcim/models/power.py:133 +#: netbox/dcim/models/power.py:133 msgid "Maximum permissible draw (percentage)" msgstr "Consumo máximo permitido (porcentagem)" -#: dcim/models/power.py:136 +#: netbox/dcim/models/power.py:136 msgid "available power" msgstr "potência disponível" -#: dcim/models/power.py:164 +#: netbox/dcim/models/power.py:164 msgid "power feed" msgstr "fonte de alimentação" -#: dcim/models/power.py:165 +#: netbox/dcim/models/power.py:165 msgid "power feeds" msgstr "fontes de alimentação" -#: dcim/models/power.py:179 +#: netbox/dcim/models/power.py:179 #, python-brace-format msgid "" "Rack {rack} ({rack_site}) and power panel {powerpanel} ({powerpanel_site}) " @@ -5921,63 +6404,63 @@ msgstr "" "Rack {rack} ({rack_site}) e quadro de alimentação {powerpanel} " "({powerpanel_site}) estão em sites diferentes." -#: dcim/models/power.py:190 +#: netbox/dcim/models/power.py:190 msgid "Voltage cannot be negative for AC supply" msgstr "A tensão não pode ser negativa para alimentação do tipo CA" -#: dcim/models/racks.py:47 +#: netbox/dcim/models/racks.py:47 msgid "width" msgstr "largura" -#: dcim/models/racks.py:48 +#: netbox/dcim/models/racks.py:48 msgid "Rail-to-rail width" msgstr "Largura de trilho a trilho" -#: dcim/models/racks.py:56 +#: netbox/dcim/models/racks.py:56 msgid "Height in rack units" msgstr "Altura em U" -#: dcim/models/racks.py:60 +#: netbox/dcim/models/racks.py:60 msgid "starting unit" msgstr "unidade inicial" -#: dcim/models/racks.py:62 +#: netbox/dcim/models/racks.py:62 msgid "Starting unit for rack" msgstr "Unidade inicial do rack" -#: dcim/models/racks.py:66 +#: netbox/dcim/models/racks.py:66 msgid "descending units" msgstr "unidades descendentes" -#: dcim/models/racks.py:67 +#: netbox/dcim/models/racks.py:67 msgid "Units are numbered top-to-bottom" msgstr "As unidades são numeradas de cima para baixo" -#: dcim/models/racks.py:72 +#: netbox/dcim/models/racks.py:72 msgid "outer width" msgstr "largura externa" -#: dcim/models/racks.py:75 +#: netbox/dcim/models/racks.py:75 msgid "Outer dimension of rack (width)" msgstr "Dimensão externa do rack (largura)" -#: dcim/models/racks.py:78 +#: netbox/dcim/models/racks.py:78 msgid "outer depth" msgstr "profundidade externa" -#: dcim/models/racks.py:81 +#: netbox/dcim/models/racks.py:81 msgid "Outer dimension of rack (depth)" msgstr "Dimensão externa do rack (profundidade)" -#: dcim/models/racks.py:84 +#: netbox/dcim/models/racks.py:84 msgid "outer unit" msgstr "unidade externa" -#: dcim/models/racks.py:90 +#: netbox/dcim/models/racks.py:90 msgid "mounting depth" msgstr "profundidade de montagem" -#: dcim/models/racks.py:94 +#: netbox/dcim/models/racks.py:94 msgid "" "Maximum depth of a mounted device, in millimeters. For four-post racks, this" " is the distance between the front and rear rails." @@ -5986,75 +6469,76 @@ msgstr "" "abertos de 4 colunas, esta é a distância entre os trilhos dianteiro e " "traseiro." -#: dcim/models/racks.py:102 +#: netbox/dcim/models/racks.py:102 msgid "max weight" msgstr "peso máximo" -#: dcim/models/racks.py:105 +#: netbox/dcim/models/racks.py:105 msgid "Maximum load capacity for the rack" msgstr "Capacidade máxima de carga do rack" -#: dcim/models/racks.py:125 dcim/models/racks.py:252 +#: netbox/dcim/models/racks.py:125 netbox/dcim/models/racks.py:252 msgid "form factor" msgstr "formato físico" -#: dcim/models/racks.py:162 +#: netbox/dcim/models/racks.py:162 msgid "rack type" msgstr "tipo de rack" -#: dcim/models/racks.py:163 +#: netbox/dcim/models/racks.py:163 msgid "rack types" msgstr "tipos de rack" -#: dcim/models/racks.py:180 dcim/models/racks.py:379 +#: netbox/dcim/models/racks.py:180 netbox/dcim/models/racks.py:379 msgid "Must specify a unit when setting an outer width/depth" msgstr "" "Deve especificar uma unidade ao definir a largura/profundidade externa" -#: dcim/models/racks.py:184 dcim/models/racks.py:383 +#: netbox/dcim/models/racks.py:184 netbox/dcim/models/racks.py:383 msgid "Must specify a unit when setting a maximum weight" msgstr "Deve especificar uma unidade ao definir um peso máximo" -#: dcim/models/racks.py:230 +#: netbox/dcim/models/racks.py:230 msgid "rack role" msgstr "função do rack" -#: dcim/models/racks.py:231 +#: netbox/dcim/models/racks.py:231 msgid "rack roles" -msgstr "funções de rack" +msgstr "funções do rack" -#: dcim/models/racks.py:274 +#: netbox/dcim/models/racks.py:274 msgid "facility ID" msgstr "ID do facility" -#: dcim/models/racks.py:275 +#: netbox/dcim/models/racks.py:275 msgid "Locally-assigned identifier" msgstr "Identificador atribuído localmente" -#: dcim/models/racks.py:308 ipam/forms/bulk_import.py:201 -#: ipam/forms/bulk_import.py:266 ipam/forms/bulk_import.py:301 -#: ipam/forms/bulk_import.py:459 virtualization/forms/bulk_import.py:112 +#: 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 msgid "Functional role" msgstr "Papel funcional" -#: dcim/models/racks.py:321 +#: netbox/dcim/models/racks.py:321 msgid "A unique tag used to identify this rack" msgstr "Uma etiqueta exclusiva usada para identificar este rack" -#: dcim/models/racks.py:359 +#: netbox/dcim/models/racks.py:359 msgid "rack" msgstr "rack" -#: dcim/models/racks.py:360 +#: netbox/dcim/models/racks.py:360 msgid "racks" msgstr "racks" -#: dcim/models/racks.py:375 +#: 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})." -#: dcim/models/racks.py:393 +#: netbox/dcim/models/racks.py:393 #, python-brace-format msgid "" "Rack must be at least {min_height}U tall to house currently installed " @@ -6063,7 +6547,7 @@ msgstr "" "O rack deve ter pelo menos {min_height}U de altura para abrigar os " "dispositivos instalados." -#: dcim/models/racks.py:400 +#: netbox/dcim/models/racks.py:400 #, python-brace-format msgid "" "Rack unit numbering must begin at {position} or less to house currently " @@ -6072,892 +6556,954 @@ msgstr "" "A numeração do rack deve começar em {position} ou menos para abrigar " "dispositivos atualmente instalados." -#: dcim/models/racks.py:408 +#: 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}." -#: dcim/models/racks.py:670 +#: netbox/dcim/models/racks.py:670 msgid "units" msgstr "unidades" -#: dcim/models/racks.py:696 +#: netbox/dcim/models/racks.py:696 msgid "rack reservation" msgstr "reserva em rack" -#: dcim/models/racks.py:697 +#: netbox/dcim/models/racks.py:697 msgid "rack reservations" msgstr "reservas em rack" -#: dcim/models/racks.py:714 +#: netbox/dcim/models/racks.py:714 #, python-brace-format msgid "Invalid unit(s) for {height}U rack: {unit_list}" msgstr "Unidade(s) inválida(s) para rack {height}U: {unit_list}" -#: dcim/models/racks.py:727 +#: netbox/dcim/models/racks.py:727 #, python-brace-format msgid "The following units have already been reserved: {unit_list}" msgstr "As seguintes unidades já foram reservadas: {unit_list}" -#: dcim/models/sites.py:49 +#: netbox/dcim/models/sites.py:49 msgid "A top-level region with this name already exists." msgstr "Já existe uma região de nível superior com este nome." -#: dcim/models/sites.py:59 +#: netbox/dcim/models/sites.py:59 msgid "A top-level region with this slug already exists." msgstr "Já existe uma região de alto nível com esta slug." -#: dcim/models/sites.py:62 +#: netbox/dcim/models/sites.py:62 msgid "region" msgstr "região" -#: dcim/models/sites.py:63 +#: netbox/dcim/models/sites.py:63 msgid "regions" msgstr "regiões" -#: dcim/models/sites.py:102 +#: netbox/dcim/models/sites.py:102 msgid "A top-level site group with this name already exists." msgstr "Já existe um grupo de sites de nível superior com este nome." -#: dcim/models/sites.py:112 +#: netbox/dcim/models/sites.py:112 msgid "A top-level site group with this slug already exists." msgstr "Já existe um grupo de sites de nível superior com este slug." -#: dcim/models/sites.py:115 +#: netbox/dcim/models/sites.py:115 msgid "site group" msgstr "grupo de sites" -#: dcim/models/sites.py:116 +#: netbox/dcim/models/sites.py:116 msgid "site groups" msgstr "grupos de sites" -#: dcim/models/sites.py:141 +#: netbox/dcim/models/sites.py:141 msgid "Full name of the site" msgstr "Nome completo do site" -#: dcim/models/sites.py:181 dcim/models/sites.py:279 +#: netbox/dcim/models/sites.py:181 netbox/dcim/models/sites.py:279 msgid "facility" msgstr "facility" -#: dcim/models/sites.py:184 dcim/models/sites.py:282 +#: netbox/dcim/models/sites.py:184 netbox/dcim/models/sites.py:282 msgid "Local facility ID or description" msgstr "ID ou descrição do facility" -#: dcim/models/sites.py:195 +#: netbox/dcim/models/sites.py:195 msgid "physical address" msgstr "endereço físico" -#: dcim/models/sites.py:198 +#: netbox/dcim/models/sites.py:198 msgid "Physical location of the building" msgstr "Localização física do edifício" -#: dcim/models/sites.py:201 +#: netbox/dcim/models/sites.py:201 msgid "shipping address" msgstr "endereço de entrega" -#: dcim/models/sites.py:204 +#: netbox/dcim/models/sites.py:204 msgid "If different from the physical address" msgstr "Se for diferente do endereço físico" -#: dcim/models/sites.py:238 +#: netbox/dcim/models/sites.py:238 msgid "site" msgstr "site" -#: dcim/models/sites.py:239 +#: netbox/dcim/models/sites.py:239 msgid "sites" msgstr "sites" -#: dcim/models/sites.py:309 +#: 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." -#: dcim/models/sites.py:319 +#: 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." -#: dcim/models/sites.py:322 +#: netbox/dcim/models/sites.py:322 msgid "location" msgstr "localização" -#: dcim/models/sites.py:323 +#: netbox/dcim/models/sites.py:323 msgid "locations" msgstr "localizações" -#: dcim/models/sites.py:337 +#: netbox/dcim/models/sites.py:337 #, python-brace-format msgid "Parent location ({parent}) must belong to the same site ({site})." msgstr "" "Localização principal ({parent}) deve pertencer ao mesmo site ({site})." -#: dcim/tables/cables.py:55 +#: netbox/dcim/tables/cables.py:55 msgid "Termination A" msgstr "Terminação A" -#: dcim/tables/cables.py:60 +#: netbox/dcim/tables/cables.py:60 msgid "Termination B" msgstr "Terminação B" -#: dcim/tables/cables.py:66 wireless/tables/wirelesslink.py:23 +#: netbox/dcim/tables/cables.py:66 netbox/wireless/tables/wirelesslink.py:23 msgid "Device A" msgstr "Dispositivo A" -#: dcim/tables/cables.py:72 wireless/tables/wirelesslink.py:32 +#: netbox/dcim/tables/cables.py:72 netbox/wireless/tables/wirelesslink.py:32 msgid "Device B" msgstr "Dispositivo B" -#: dcim/tables/cables.py:78 +#: netbox/dcim/tables/cables.py:78 msgid "Location A" msgstr "Localização A" -#: dcim/tables/cables.py:84 +#: netbox/dcim/tables/cables.py:84 msgid "Location B" msgstr "Localização B" -#: dcim/tables/cables.py:90 +#: netbox/dcim/tables/cables.py:90 msgid "Rack A" msgstr "Rack A" -#: dcim/tables/cables.py:96 +#: netbox/dcim/tables/cables.py:96 msgid "Rack B" msgstr "Rack B" -#: dcim/tables/cables.py:102 +#: netbox/dcim/tables/cables.py:102 msgid "Site A" msgstr "Site A" -#: dcim/tables/cables.py:108 +#: netbox/dcim/tables/cables.py:108 msgid "Site B" msgstr "Sítio B" -#: dcim/tables/connections.py:31 dcim/tables/connections.py:50 -#: dcim/tables/connections.py:71 -#: templates/dcim/inc/connection_endpoints.html:16 +#: netbox/dcim/tables/connections.py:31 netbox/dcim/tables/connections.py:50 +#: netbox/dcim/tables/connections.py:71 +#: netbox/templates/dcim/inc/connection_endpoints.html:16 msgid "Reachable" msgstr "Acessível" -#: dcim/tables/devices.py:58 dcim/tables/devices.py:106 -#: dcim/tables/racks.py:150 dcim/tables/sites.py:105 dcim/tables/sites.py:148 -#: extras/tables/tables.py:545 netbox/navigation/menu.py:69 -#: netbox/navigation/menu.py:73 netbox/navigation/menu.py:75 -#: virtualization/forms/model_forms.py:122 -#: virtualization/tables/clusters.py:83 virtualization/views.py:206 +#: 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/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 msgid "Devices" msgstr "Dispositivos" -#: dcim/tables/devices.py:63 dcim/tables/devices.py:111 -#: virtualization/tables/clusters.py:88 +#: netbox/dcim/tables/devices.py:63 netbox/dcim/tables/devices.py:111 +#: netbox/virtualization/tables/clusters.py:88 msgid "VMs" msgstr "VMs" -#: dcim/tables/devices.py:100 dcim/tables/devices.py:216 -#: extras/forms/model_forms.py:630 templates/dcim/device.html:112 -#: templates/dcim/device/render_config.html:11 -#: templates/dcim/device/render_config.html:14 -#: templates/dcim/devicerole.html:44 templates/dcim/platform.html:41 -#: templates/extras/configtemplate.html:10 -#: templates/virtualization/virtualmachine.html:48 -#: templates/virtualization/virtualmachine/render_config.html:11 -#: templates/virtualization/virtualmachine/render_config.html:14 -#: virtualization/tables/virtualmachines.py:107 +#: netbox/dcim/tables/devices.py:100 netbox/dcim/tables/devices.py:216 +#: 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/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 msgid "Config Template" msgstr "Modelo de Configuração" -#: dcim/tables/devices.py:150 templates/dcim/sitegroup.html:26 +#: netbox/dcim/tables/devices.py:150 netbox/templates/dcim/sitegroup.html:26 msgid "Site Group" msgstr "Grupo de Sites" -#: dcim/tables/devices.py:187 dcim/tables/devices.py:1068 -#: ipam/forms/bulk_import.py:503 ipam/forms/model_forms.py:306 -#: ipam/forms/model_forms.py:315 ipam/tables/ip.py:356 ipam/tables/ip.py:423 -#: ipam/tables/ip.py:446 templates/ipam/ipaddress.html:11 -#: virtualization/tables/virtualmachines.py:95 +#: 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/templates/ipam/ipaddress.html:11 +#: netbox/virtualization/tables/virtualmachines.py:95 msgid "IP Address" msgstr "Endereço IP" -#: dcim/tables/devices.py:191 dcim/tables/devices.py:1072 -#: virtualization/tables/virtualmachines.py:86 +#: netbox/dcim/tables/devices.py:191 netbox/dcim/tables/devices.py:1072 +#: netbox/virtualization/tables/virtualmachines.py:86 msgid "IPv4 Address" msgstr "Endereço IPv4" -#: dcim/tables/devices.py:195 dcim/tables/devices.py:1076 -#: virtualization/tables/virtualmachines.py:90 +#: netbox/dcim/tables/devices.py:195 netbox/dcim/tables/devices.py:1076 +#: netbox/virtualization/tables/virtualmachines.py:90 msgid "IPv6 Address" msgstr "Endereço IPv6" -#: dcim/tables/devices.py:210 +#: netbox/dcim/tables/devices.py:210 msgid "VC Position" msgstr "Posição no Chassi Virtual" -#: dcim/tables/devices.py:213 +#: netbox/dcim/tables/devices.py:213 msgid "VC Priority" msgstr "Prioridade no Chassi Virtual" -#: dcim/tables/devices.py:220 templates/dcim/device_edit.html:38 -#: templates/dcim/devicebay_populate.html:16 +#: netbox/dcim/tables/devices.py:220 netbox/templates/dcim/device_edit.html:38 +#: netbox/templates/dcim/devicebay_populate.html:16 msgid "Parent Device" msgstr "Dispositivo Pai" -#: dcim/tables/devices.py:225 +#: netbox/dcim/tables/devices.py:225 msgid "Position (Device Bay)" msgstr "Posição (Compartimento de Dispositivo)" -#: dcim/tables/devices.py:234 +#: netbox/dcim/tables/devices.py:234 msgid "Console ports" msgstr "Portas de console" -#: dcim/tables/devices.py:237 +#: netbox/dcim/tables/devices.py:237 msgid "Console server ports" msgstr "Portas de servidor de console" -#: dcim/tables/devices.py:240 +#: netbox/dcim/tables/devices.py:240 msgid "Power ports" msgstr "Portas de alimentação" -#: dcim/tables/devices.py:243 +#: netbox/dcim/tables/devices.py:243 msgid "Power outlets" msgstr "Tomadas elétricas" -#: dcim/tables/devices.py:246 dcim/tables/devices.py:1081 -#: dcim/tables/devicetypes.py:128 dcim/views.py:1042 dcim/views.py:1281 -#: dcim/views.py:1977 netbox/navigation/menu.py:94 -#: netbox/navigation/menu.py:250 templates/dcim/device/base.html:37 -#: templates/dcim/device_list.html:43 templates/dcim/devicetype/base.html:34 -#: templates/dcim/inc/moduletype_buttons.html:25 templates/dcim/module.html:34 -#: templates/dcim/virtualdevicecontext.html:61 -#: templates/dcim/virtualdevicecontext.html:81 -#: templates/virtualization/virtualmachine/base.html:27 -#: templates/virtualization/virtualmachine_list.html:14 -#: virtualization/tables/virtualmachines.py:101 virtualization/views.py:366 -#: wireless/tables/wirelesslan.py:55 +#: 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/templates/dcim/device/base.html:37 +#: netbox/templates/dcim/device_list.html:43 +#: netbox/templates/dcim/devicetype/base.html:34 +#: netbox/templates/dcim/inc/moduletype_buttons.html:25 +#: netbox/templates/dcim/module.html:34 +#: netbox/templates/dcim/virtualdevicecontext.html:61 +#: netbox/templates/dcim/virtualdevicecontext.html:81 +#: netbox/templates/virtualization/virtualmachine/base.html:27 +#: netbox/templates/virtualization/virtualmachine_list.html:14 +#: netbox/virtualization/tables/virtualmachines.py:101 +#: netbox/virtualization/views.py:364 netbox/wireless/tables/wirelesslan.py:55 msgid "Interfaces" msgstr "Interfaces" -#: dcim/tables/devices.py:249 +#: netbox/dcim/tables/devices.py:249 msgid "Front ports" msgstr "Portas frontais" -#: dcim/tables/devices.py:255 +#: netbox/dcim/tables/devices.py:255 msgid "Device bays" msgstr "Compartimentos de dispositivos" -#: dcim/tables/devices.py:258 +#: netbox/dcim/tables/devices.py:258 msgid "Module bays" msgstr "Compartimentos de módulos" -#: dcim/tables/devices.py:261 +#: netbox/dcim/tables/devices.py:261 msgid "Inventory items" msgstr "Itens de inventário" -#: dcim/tables/devices.py:305 dcim/tables/modules.py:56 -#: templates/dcim/modulebay.html:17 +#: netbox/dcim/tables/devices.py:305 netbox/dcim/tables/modules.py:56 +#: netbox/templates/dcim/modulebay.html:17 msgid "Module Bay" msgstr "Compartimento de módulo" -#: dcim/tables/devices.py:318 dcim/tables/devicetypes.py:47 -#: dcim/tables/devicetypes.py:143 dcim/views.py:1117 dcim/views.py:2075 -#: netbox/navigation/menu.py:103 templates/dcim/device/base.html:52 -#: templates/dcim/device_list.html:71 templates/dcim/devicetype/base.html:49 -#: templates/dcim/inc/panels/inventory_items.html:6 -#: templates/dcim/inventoryitemrole.html:32 +#: netbox/dcim/tables/devices.py:318 netbox/dcim/tables/devicetypes.py:47 +#: netbox/dcim/tables/devicetypes.py:143 netbox/dcim/views.py:1115 +#: netbox/dcim/views.py:2073 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 +#: netbox/templates/dcim/inc/panels/inventory_items.html:6 +#: netbox/templates/dcim/inventoryitemrole.html:32 msgid "Inventory Items" msgstr "Itens de Inventário" -#: dcim/tables/devices.py:333 +#: netbox/dcim/tables/devices.py:333 msgid "Cable Color" msgstr "Cor do Cabo" -#: dcim/tables/devices.py:339 +#: netbox/dcim/tables/devices.py:339 msgid "Link Peers" msgstr "Pares Vinculados" -#: dcim/tables/devices.py:342 +#: netbox/dcim/tables/devices.py:342 msgid "Mark Connected" msgstr "Marcar Conectado" -#: dcim/tables/devices.py:461 +#: netbox/dcim/tables/devices.py:461 msgid "Maximum draw (W)" msgstr "Consumo máximo (W)" -#: dcim/tables/devices.py:464 +#: netbox/dcim/tables/devices.py:464 msgid "Allocated draw (W)" msgstr "Consumo alocado (W)" -#: dcim/tables/devices.py:558 ipam/forms/model_forms.py:701 -#: ipam/tables/fhrp.py:28 ipam/views.py:596 ipam/views.py:696 -#: netbox/navigation/menu.py:158 netbox/navigation/menu.py:160 -#: templates/dcim/interface.html:339 templates/ipam/ipaddress_bulk_add.html:15 -#: templates/ipam/service.html:40 templates/virtualization/vminterface.html:85 -#: vpn/tables/tunnels.py:98 +#: netbox/dcim/tables/devices.py:558 netbox/ipam/forms/model_forms.py: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/templates/ipam/ipaddress_bulk_add.html:15 +#: netbox/templates/ipam/service.html:40 +#: netbox/templates/virtualization/vminterface.html:85 +#: netbox/vpn/tables/tunnels.py:98 msgid "IP Addresses" msgstr "Endereços IP" -#: dcim/tables/devices.py:564 netbox/navigation/menu.py:202 -#: templates/ipam/inc/panels/fhrp_groups.html:6 +#: netbox/dcim/tables/devices.py:564 netbox/netbox/navigation/menu.py:202 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:6 msgid "FHRP Groups" msgstr "Grupos FHRP" -#: dcim/tables/devices.py:576 templates/dcim/interface.html:89 -#: templates/virtualization/vminterface.html:67 templates/vpn/tunnel.html:18 -#: templates/vpn/tunneltermination.html:13 vpn/forms/bulk_edit.py:76 -#: vpn/forms/bulk_import.py:76 vpn/forms/filtersets.py:42 -#: vpn/forms/filtersets.py:82 vpn/forms/model_forms.py:60 -#: vpn/forms/model_forms.py:145 vpn/tables/tunnels.py:78 +#: netbox/dcim/tables/devices.py:576 netbox/templates/dcim/interface.html:89 +#: netbox/templates/virtualization/vminterface.html:67 +#: netbox/templates/vpn/tunnel.html:18 +#: netbox/templates/vpn/tunneltermination.html:13 +#: netbox/vpn/forms/bulk_edit.py:76 netbox/vpn/forms/bulk_import.py:76 +#: netbox/vpn/forms/filtersets.py:42 netbox/vpn/forms/filtersets.py:82 +#: netbox/vpn/forms/model_forms.py:60 netbox/vpn/forms/model_forms.py:145 +#: netbox/vpn/tables/tunnels.py:78 msgid "Tunnel" msgstr "Túnel" -#: dcim/tables/devices.py:604 dcim/tables/devicetypes.py:227 -#: templates/dcim/interface.html:65 +#: netbox/dcim/tables/devices.py:604 netbox/dcim/tables/devicetypes.py:227 +#: netbox/templates/dcim/interface.html:65 msgid "Management Only" msgstr "Somente Gerenciamento" -#: dcim/tables/devices.py:623 +#: netbox/dcim/tables/devices.py:623 msgid "VDCs" msgstr "Contextos de Dispositivos Virtuais" -#: dcim/tables/devices.py:873 templates/dcim/modulebay.html:53 +#: netbox/dcim/tables/devices.py:873 netbox/templates/dcim/modulebay.html:53 msgid "Installed Module" msgstr "Módulo Instalado" -#: dcim/tables/devices.py:876 +#: netbox/dcim/tables/devices.py:876 msgid "Module Serial" msgstr "Serial do Módulo" -#: dcim/tables/devices.py:880 +#: netbox/dcim/tables/devices.py:880 msgid "Module Asset Tag" msgstr "Etiqueta de Patrimônio do Módulo" -#: dcim/tables/devices.py:889 +#: netbox/dcim/tables/devices.py:889 msgid "Module Status" msgstr "Status do Módulo" -#: dcim/tables/devices.py:944 dcim/tables/devicetypes.py:312 -#: templates/dcim/inventoryitem.html:40 +#: netbox/dcim/tables/devices.py:944 netbox/dcim/tables/devicetypes.py:312 +#: netbox/templates/dcim/inventoryitem.html:40 msgid "Component" msgstr "Componente" -#: dcim/tables/devices.py:1000 +#: netbox/dcim/tables/devices.py:1000 msgid "Items" msgstr "Itens" -#: dcim/tables/devicetypes.py:37 netbox/navigation/menu.py:84 -#: netbox/navigation/menu.py:86 +#: netbox/dcim/tables/devicetypes.py:37 netbox/netbox/navigation/menu.py:84 +#: netbox/netbox/navigation/menu.py:86 msgid "Device Types" msgstr "Tipos de Dispositivos" -#: dcim/tables/devicetypes.py:42 netbox/navigation/menu.py:87 +#: netbox/dcim/tables/devicetypes.py:42 netbox/netbox/navigation/menu.py:87 msgid "Module Types" msgstr "Tipos de Módulos" -#: dcim/tables/devicetypes.py:52 extras/forms/filtersets.py:371 -#: extras/forms/model_forms.py:537 extras/tables/tables.py:540 -#: netbox/navigation/menu.py:78 +#: 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/netbox/navigation/menu.py:78 msgid "Platforms" msgstr "Plataformas" -#: dcim/tables/devicetypes.py:84 templates/dcim/devicetype.html:29 +#: netbox/dcim/tables/devicetypes.py:84 +#: netbox/templates/dcim/devicetype.html:29 msgid "Default Platform" msgstr "Plataforma Padrão" -#: dcim/tables/devicetypes.py:88 templates/dcim/devicetype.html:45 +#: netbox/dcim/tables/devicetypes.py:88 +#: netbox/templates/dcim/devicetype.html:45 msgid "Full Depth" msgstr "Full-Depth" -#: dcim/tables/devicetypes.py:98 +#: netbox/dcim/tables/devicetypes.py:98 msgid "U Height" msgstr "Altura em U" -#: dcim/tables/devicetypes.py:113 dcim/tables/modules.py:26 -#: dcim/tables/racks.py:89 +#: netbox/dcim/tables/devicetypes.py:113 netbox/dcim/tables/modules.py:26 +#: netbox/dcim/tables/racks.py:89 msgid "Instances" msgstr "Instâncias" -#: dcim/tables/devicetypes.py:116 dcim/views.py:982 dcim/views.py:1221 -#: dcim/views.py:1913 netbox/navigation/menu.py:97 -#: templates/dcim/device/base.html:25 templates/dcim/device_list.html:15 -#: templates/dcim/devicetype/base.html:22 -#: templates/dcim/inc/moduletype_buttons.html:13 templates/dcim/module.html:22 +#: netbox/dcim/tables/devicetypes.py:116 netbox/dcim/views.py:980 +#: netbox/dcim/views.py:1219 netbox/dcim/views.py:1911 +#: netbox/netbox/navigation/menu.py:97 +#: netbox/templates/dcim/device/base.html:25 +#: netbox/templates/dcim/device_list.html:15 +#: netbox/templates/dcim/devicetype/base.html:22 +#: netbox/templates/dcim/inc/moduletype_buttons.html:13 +#: netbox/templates/dcim/module.html:22 msgid "Console Ports" msgstr "Portas de Console" -#: dcim/tables/devicetypes.py:119 dcim/views.py:997 dcim/views.py:1236 -#: dcim/views.py:1929 netbox/navigation/menu.py:98 -#: templates/dcim/device/base.html:28 templates/dcim/device_list.html:22 -#: templates/dcim/devicetype/base.html:25 -#: templates/dcim/inc/moduletype_buttons.html:16 templates/dcim/module.html:25 +#: netbox/dcim/tables/devicetypes.py:119 netbox/dcim/views.py:995 +#: netbox/dcim/views.py:1234 netbox/dcim/views.py:1927 +#: netbox/netbox/navigation/menu.py:98 +#: netbox/templates/dcim/device/base.html:28 +#: netbox/templates/dcim/device_list.html:22 +#: netbox/templates/dcim/devicetype/base.html:25 +#: netbox/templates/dcim/inc/moduletype_buttons.html:16 +#: netbox/templates/dcim/module.html:25 msgid "Console Server Ports" msgstr "Portas de Servidor de Console" -#: dcim/tables/devicetypes.py:122 dcim/views.py:1012 dcim/views.py:1251 -#: dcim/views.py:1945 netbox/navigation/menu.py:99 -#: templates/dcim/device/base.html:31 templates/dcim/device_list.html:29 -#: templates/dcim/devicetype/base.html:28 -#: templates/dcim/inc/moduletype_buttons.html:19 templates/dcim/module.html:28 +#: netbox/dcim/tables/devicetypes.py:122 netbox/dcim/views.py:1010 +#: netbox/dcim/views.py:1249 netbox/dcim/views.py:1943 +#: netbox/netbox/navigation/menu.py:99 +#: netbox/templates/dcim/device/base.html:31 +#: netbox/templates/dcim/device_list.html:29 +#: netbox/templates/dcim/devicetype/base.html:28 +#: netbox/templates/dcim/inc/moduletype_buttons.html:19 +#: netbox/templates/dcim/module.html:28 msgid "Power Ports" msgstr "Portas de Alimentação" -#: dcim/tables/devicetypes.py:125 dcim/views.py:1027 dcim/views.py:1266 -#: dcim/views.py:1961 netbox/navigation/menu.py:100 -#: templates/dcim/device/base.html:34 templates/dcim/device_list.html:36 -#: templates/dcim/devicetype/base.html:31 -#: templates/dcim/inc/moduletype_buttons.html:22 templates/dcim/module.html:31 +#: netbox/dcim/tables/devicetypes.py:125 netbox/dcim/views.py:1025 +#: netbox/dcim/views.py:1264 netbox/dcim/views.py:1959 +#: netbox/netbox/navigation/menu.py:100 +#: netbox/templates/dcim/device/base.html:34 +#: netbox/templates/dcim/device_list.html:36 +#: netbox/templates/dcim/devicetype/base.html:31 +#: netbox/templates/dcim/inc/moduletype_buttons.html:22 +#: netbox/templates/dcim/module.html:31 msgid "Power Outlets" msgstr "Tomadas Elétricas" -#: dcim/tables/devicetypes.py:131 dcim/views.py:1057 dcim/views.py:1296 -#: dcim/views.py:1999 netbox/navigation/menu.py:95 -#: templates/dcim/device/base.html:40 templates/dcim/devicetype/base.html:37 -#: templates/dcim/inc/moduletype_buttons.html:28 templates/dcim/module.html:37 +#: netbox/dcim/tables/devicetypes.py:131 netbox/dcim/views.py:1055 +#: netbox/dcim/views.py:1294 netbox/dcim/views.py:1997 +#: netbox/netbox/navigation/menu.py:95 +#: netbox/templates/dcim/device/base.html:40 +#: netbox/templates/dcim/devicetype/base.html:37 +#: netbox/templates/dcim/inc/moduletype_buttons.html:28 +#: netbox/templates/dcim/module.html:37 msgid "Front Ports" msgstr "Portas Frontais" -#: dcim/tables/devicetypes.py:134 dcim/views.py:1072 dcim/views.py:1311 -#: dcim/views.py:2015 netbox/navigation/menu.py:96 -#: templates/dcim/device/base.html:43 templates/dcim/device_list.html:50 -#: templates/dcim/devicetype/base.html:40 -#: templates/dcim/inc/moduletype_buttons.html:31 templates/dcim/module.html:40 +#: netbox/dcim/tables/devicetypes.py:134 netbox/dcim/views.py:1070 +#: netbox/dcim/views.py:1309 netbox/dcim/views.py:2013 +#: netbox/netbox/navigation/menu.py:96 +#: netbox/templates/dcim/device/base.html:43 +#: netbox/templates/dcim/device_list.html:50 +#: netbox/templates/dcim/devicetype/base.html:40 +#: netbox/templates/dcim/inc/moduletype_buttons.html:31 +#: netbox/templates/dcim/module.html:40 msgid "Rear Ports" msgstr "Portas Traseiras" -#: dcim/tables/devicetypes.py:137 dcim/views.py:1102 dcim/views.py:2055 -#: netbox/navigation/menu.py:102 templates/dcim/device/base.html:49 -#: templates/dcim/device_list.html:57 templates/dcim/devicetype/base.html:46 +#: netbox/dcim/tables/devicetypes.py:137 netbox/dcim/views.py:1100 +#: netbox/dcim/views.py:2053 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 "Compartimentos de Dispositivos" -#: dcim/tables/devicetypes.py:140 dcim/views.py:1087 dcim/views.py:1326 -#: dcim/views.py:2035 netbox/navigation/menu.py:101 -#: templates/dcim/device/base.html:46 templates/dcim/device_list.html:64 -#: templates/dcim/devicetype/base.html:43 -#: templates/dcim/inc/moduletype_buttons.html:34 templates/dcim/module.html:43 +#: netbox/dcim/tables/devicetypes.py:140 netbox/dcim/views.py:1085 +#: netbox/dcim/views.py:1324 netbox/dcim/views.py:2033 +#: netbox/netbox/navigation/menu.py:101 +#: netbox/templates/dcim/device/base.html:46 +#: netbox/templates/dcim/device_list.html:64 +#: netbox/templates/dcim/devicetype/base.html:43 +#: netbox/templates/dcim/inc/moduletype_buttons.html:34 +#: netbox/templates/dcim/module.html:43 msgid "Module Bays" msgstr "Compartimentos de Módulos" -#: dcim/tables/power.py:36 netbox/navigation/menu.py:297 -#: templates/dcim/powerpanel.html:51 +#: netbox/dcim/tables/power.py:36 netbox/netbox/navigation/menu.py:297 +#: netbox/templates/dcim/powerpanel.html:51 msgid "Power Feeds" msgstr "Fontes de Alimentação" -#: dcim/tables/power.py:80 templates/dcim/powerfeed.html:99 +#: netbox/dcim/tables/power.py:80 netbox/templates/dcim/powerfeed.html:99 msgid "Max Utilization" msgstr "Utilização Máxima" -#: dcim/tables/power.py:84 +#: netbox/dcim/tables/power.py:84 msgid "Available Power (VA)" msgstr "Potência Disponível (VA)" -#: dcim/tables/racks.py:30 dcim/tables/sites.py:143 -#: netbox/navigation/menu.py:43 netbox/navigation/menu.py:47 -#: netbox/navigation/menu.py:49 +#: netbox/dcim/tables/racks.py:30 netbox/dcim/tables/sites.py:143 +#: netbox/netbox/navigation/menu.py:43 netbox/netbox/navigation/menu.py:47 +#: netbox/netbox/navigation/menu.py:49 msgid "Racks" msgstr "Racks" -#: dcim/tables/racks.py:63 dcim/tables/racks.py:142 -#: templates/dcim/device.html:318 -#: templates/dcim/inc/panels/racktype_dimensions.html:14 +#: netbox/dcim/tables/racks.py:63 netbox/dcim/tables/racks.py:142 +#: netbox/templates/dcim/device.html:318 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:14 msgid "Height" msgstr "Altura" -#: dcim/tables/racks.py:67 dcim/tables/racks.py:165 -#: templates/dcim/inc/panels/racktype_dimensions.html:18 +#: netbox/dcim/tables/racks.py:67 netbox/dcim/tables/racks.py:165 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:18 msgid "Outer Width" msgstr "Largura Externa" -#: dcim/tables/racks.py:71 dcim/tables/racks.py:169 -#: templates/dcim/inc/panels/racktype_dimensions.html:28 +#: netbox/dcim/tables/racks.py:71 netbox/dcim/tables/racks.py:169 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:28 msgid "Outer Depth" msgstr "Profundidade Externa" -#: dcim/tables/racks.py:79 dcim/tables/racks.py:177 +#: netbox/dcim/tables/racks.py:79 netbox/dcim/tables/racks.py:177 msgid "Max Weight" msgstr "Peso Máximo" -#: dcim/tables/racks.py:154 +#: netbox/dcim/tables/racks.py:154 msgid "Space" msgstr "Espaço" -#: dcim/tables/sites.py:30 dcim/tables/sites.py:57 -#: extras/forms/filtersets.py:351 extras/forms/model_forms.py:517 -#: ipam/forms/bulk_edit.py:131 ipam/forms/model_forms.py:153 -#: ipam/tables/asn.py:66 netbox/navigation/menu.py:15 -#: netbox/navigation/menu.py:17 +#: netbox/dcim/tables/sites.py:30 netbox/dcim/tables/sites.py:57 +#: netbox/extras/forms/filtersets.py: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/netbox/navigation/menu.py:15 netbox/netbox/navigation/menu.py:17 msgid "Sites" msgstr "Sites" -#: dcim/tests/test_api.py:47 +#: netbox/dcim/tests/test_api.py:47 msgid "Test case must set peer_termination_type" msgstr "O caso de teste deve definir peer_termination_type" -#: dcim/views.py:140 +#: netbox/dcim/views.py:138 #, python-brace-format msgid "Disconnected {count} {type}" msgstr "Desconectado {count} {type}" -#: dcim/views.py:740 netbox/navigation/menu.py:51 +#: netbox/dcim/views.py:738 netbox/netbox/navigation/menu.py:51 msgid "Reservations" msgstr "Reservas" -#: dcim/views.py:759 templates/dcim/location.html:90 -#: templates/dcim/site.html:140 +#: netbox/dcim/views.py:757 netbox/templates/dcim/location.html:90 +#: netbox/templates/dcim/site.html:140 msgid "Non-Racked Devices" msgstr "Dispositivos Não Montados em Rack" -#: dcim/views.py:2088 extras/forms/model_forms.py:577 -#: templates/extras/configcontext.html:10 -#: virtualization/forms/model_forms.py:225 virtualization/views.py:407 +#: netbox/dcim/views.py:2086 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 msgid "Config Context" msgstr "Contexto de Configuração" -#: dcim/views.py:2098 virtualization/views.py:417 +#: netbox/dcim/views.py:2096 netbox/virtualization/views.py:415 msgid "Render Config" msgstr "Renderização de Configuração" -#: dcim/views.py:2131 virtualization/views.py:450 +#: netbox/dcim/views.py:2131 netbox/virtualization/views.py:450 #, python-brace-format msgid "An error occurred while rendering the template: {error}" msgstr "Ocorreu um erro ao renderizar o modelo: {error}" -#: dcim/views.py:2149 extras/tables/tables.py:550 -#: netbox/navigation/menu.py:247 netbox/navigation/menu.py:249 -#: virtualization/views.py:180 +#: 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 msgid "Virtual Machines" msgstr "Máquinas Virtuais" -#: dcim/views.py:2897 +#: netbox/dcim/views.py:2907 #, python-brace-format msgid "Installed device {device} in bay {device_bay}." msgstr "Dispositivo instalado {device} no compartimento {device_bay}." -#: dcim/views.py:2938 +#: netbox/dcim/views.py:2948 #, python-brace-format msgid "Removed device {device} from bay {device_bay}." msgstr "Dispositivo {device} removido do compartimento {device_bay}." -#: dcim/views.py:3044 ipam/tables/ip.py:234 +#: netbox/dcim/views.py:3054 netbox/ipam/tables/ip.py:234 msgid "Children" msgstr "Filhos" -#: dcim/views.py:3510 +#: netbox/dcim/views.py:3520 #, python-brace-format msgid "Added member {device}" msgstr "Membro {device} adicionado" -#: dcim/views.py:3557 +#: netbox/dcim/views.py:3567 #, python-brace-format msgid "Unable to remove master device {device} from the virtual chassis." msgstr "" "Não é possível remover o dispositivo principal {device} do chassi virtual." -#: dcim/views.py:3570 +#: netbox/dcim/views.py:3580 #, python-brace-format msgid "Removed {device} from virtual chassis {chassis}" msgstr "Removido {device} do chassi virtual {chassis}" -#: extras/api/customfields.py:89 +#: netbox/extras/api/customfields.py:89 #, python-brace-format msgid "Unknown related object(s): {name}" msgstr "Objeto(s) relacionado(s) desconhecido(s): {name}" -#: extras/api/serializers_/customfields.py:73 +#: netbox/extras/api/serializers_/customfields.py:73 msgid "Changing the type of custom fields is not supported." msgstr "Alteração do tipo do campo customizado não é suportado." -#: extras/api/serializers_/scripts.py:70 extras/api/serializers_/scripts.py:75 +#: netbox/extras/api/serializers_/scripts.py:70 +#: netbox/extras/api/serializers_/scripts.py:75 msgid "Scheduling is not enabled for this script." msgstr "O agendamento não está habilitado para este script." -#: extras/choices.py:30 extras/forms/misc.py:14 +#: netbox/extras/choices.py:30 netbox/extras/forms/misc.py:14 msgid "Text" msgstr "Texto" -#: extras/choices.py:31 +#: netbox/extras/choices.py:31 msgid "Text (long)" msgstr "Texto (longo)" -#: extras/choices.py:32 +#: netbox/extras/choices.py:32 msgid "Integer" msgstr "Número Inteiro" -#: extras/choices.py:33 +#: netbox/extras/choices.py:33 msgid "Decimal" msgstr "Decimal" -#: extras/choices.py:34 +#: netbox/extras/choices.py:34 msgid "Boolean (true/false)" msgstr "Booleano (verdadeiro/falso)" -#: extras/choices.py:35 +#: netbox/extras/choices.py:35 msgid "Date" msgstr "Data" -#: extras/choices.py:36 +#: netbox/extras/choices.py:36 msgid "Date & time" msgstr "Data e hora" -#: extras/choices.py:38 +#: netbox/extras/choices.py:38 msgid "JSON" msgstr "JSON" -#: extras/choices.py:39 +#: netbox/extras/choices.py:39 msgid "Selection" msgstr "Seleção" -#: extras/choices.py:40 +#: netbox/extras/choices.py:40 msgid "Multiple selection" msgstr "Múltipla Seleção" -#: extras/choices.py:42 +#: netbox/extras/choices.py:42 msgid "Multiple objects" msgstr "Múltiplos objetos" -#: extras/choices.py:53 netbox/preferences.py:21 -#: templates/extras/customfield.html:78 vpn/choices.py:20 -#: wireless/choices.py:27 +#: netbox/extras/choices.py:53 netbox/netbox/preferences.py:21 +#: netbox/templates/extras/customfield.html:78 netbox/vpn/choices.py:20 +#: netbox/wireless/choices.py:27 msgid "Disabled" msgstr "Desativado" -#: extras/choices.py:54 +#: netbox/extras/choices.py:54 msgid "Loose" msgstr "Flexível" -#: extras/choices.py:55 +#: netbox/extras/choices.py:55 msgid "Exact" msgstr "Exato" -#: extras/choices.py:66 +#: netbox/extras/choices.py:66 msgid "Always" msgstr "Sempre" -#: extras/choices.py:67 +#: netbox/extras/choices.py:67 msgid "If set" msgstr "Se Definido" -#: extras/choices.py:68 extras/choices.py:81 +#: netbox/extras/choices.py:68 netbox/extras/choices.py:81 msgid "Hidden" msgstr "Oculto" -#: extras/choices.py:79 +#: netbox/extras/choices.py:79 msgid "Yes" msgstr "Sim" -#: extras/choices.py:80 +#: netbox/extras/choices.py:80 msgid "No" msgstr "Não" -#: extras/choices.py:108 templates/tenancy/contact.html:57 -#: tenancy/forms/bulk_edit.py:118 wireless/forms/model_forms.py:168 +#: 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 msgid "Link" msgstr "Link" -#: extras/choices.py:124 +#: netbox/extras/choices.py:124 msgid "Newest" msgstr "Mais Recente" -#: extras/choices.py:125 +#: netbox/extras/choices.py:125 msgid "Oldest" msgstr "Mais Antigo" -#: extras/choices.py:126 +#: netbox/extras/choices.py:126 msgid "Alphabetical (A-Z)" msgstr "Ordem Alfabética (A-Z)" -#: extras/choices.py:127 +#: netbox/extras/choices.py:127 msgid "Alphabetical (Z-A)" msgstr "Ordem Alfabética (Z-A)" -#: extras/choices.py:144 extras/choices.py:167 +#: netbox/extras/choices.py:144 netbox/extras/choices.py:167 msgid "Info" msgstr "Informações" -#: extras/choices.py:145 extras/choices.py:168 +#: netbox/extras/choices.py:145 netbox/extras/choices.py:168 msgid "Success" msgstr "Sucesso" -#: extras/choices.py:146 extras/choices.py:169 +#: netbox/extras/choices.py:146 netbox/extras/choices.py:169 msgid "Warning" msgstr "Aviso" -#: extras/choices.py:147 +#: netbox/extras/choices.py:147 msgid "Danger" msgstr "Perigo" -#: extras/choices.py:165 +#: netbox/extras/choices.py:165 msgid "Debug" msgstr "Debug" -#: extras/choices.py:166 netbox/choices.py:101 +#: netbox/extras/choices.py:166 netbox/netbox/choices.py:101 msgid "Default" msgstr "Padrão" -#: extras/choices.py:170 +#: netbox/extras/choices.py:170 msgid "Failure" msgstr "Falha" -#: extras/choices.py:186 +#: netbox/extras/choices.py:186 msgid "Hourly" msgstr "A cada hora" -#: extras/choices.py:187 +#: netbox/extras/choices.py:187 msgid "12 hours" msgstr "12 horas" -#: extras/choices.py:188 +#: netbox/extras/choices.py:188 msgid "Daily" msgstr "Diariamente" -#: extras/choices.py:189 +#: netbox/extras/choices.py:189 msgid "Weekly" msgstr "Semanalmente" -#: extras/choices.py:190 +#: netbox/extras/choices.py:190 msgid "30 days" msgstr "30 dias" -#: extras/choices.py:226 templates/dcim/virtualchassis_edit.html:107 -#: templates/generic/bulk_add_component.html:68 -#: templates/generic/object_edit.html:47 templates/generic/object_edit.html:80 -#: templates/ipam/inc/ipaddress_edit_header.html:7 +#: netbox/extras/choices.py:226 +#: 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/ipam/inc/ipaddress_edit_header.html:7 msgid "Create" msgstr "Criar" -#: extras/choices.py:227 +#: netbox/extras/choices.py:227 msgid "Update" msgstr "Atualizar" -#: extras/choices.py:228 templates/circuits/inc/circuit_termination.html:23 -#: templates/dcim/inc/panels/inventory_items.html:37 -#: templates/dcim/powerpanel.html:66 templates/extras/script_list.html:35 -#: templates/generic/bulk_delete.html:20 templates/generic/bulk_delete.html:66 -#: templates/generic/object_delete.html:19 templates/htmx/delete_form.html:57 -#: templates/ipam/inc/panels/fhrp_groups.html:48 -#: templates/users/objectpermission.html:46 -#: utilities/templates/buttons/delete.html:11 +#: netbox/extras/choices.py:228 +#: netbox/templates/circuits/inc/circuit_termination.html:23 +#: netbox/templates/dcim/inc/panels/inventory_items.html:37 +#: netbox/templates/dcim/powerpanel.html:66 +#: netbox/templates/extras/script_list.html:35 +#: netbox/templates/generic/bulk_delete.html:20 +#: netbox/templates/generic/bulk_delete.html:66 +#: netbox/templates/generic/object_delete.html:19 +#: netbox/templates/htmx/delete_form.html:57 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:48 +#: netbox/templates/users/objectpermission.html:46 +#: netbox/utilities/templates/buttons/delete.html:11 msgid "Delete" msgstr "Excluir" -#: extras/choices.py:252 netbox/choices.py:57 netbox/choices.py:102 +#: netbox/extras/choices.py:252 netbox/netbox/choices.py:57 +#: netbox/netbox/choices.py:102 msgid "Blue" msgstr "Azul" -#: extras/choices.py:253 netbox/choices.py:56 netbox/choices.py:103 +#: netbox/extras/choices.py:253 netbox/netbox/choices.py:56 +#: netbox/netbox/choices.py:103 msgid "Indigo" msgstr "Índigo" -#: extras/choices.py:254 netbox/choices.py:54 netbox/choices.py:104 +#: netbox/extras/choices.py:254 netbox/netbox/choices.py:54 +#: netbox/netbox/choices.py:104 msgid "Purple" msgstr "Roxo" -#: extras/choices.py:255 netbox/choices.py:51 netbox/choices.py:105 +#: netbox/extras/choices.py:255 netbox/netbox/choices.py:51 +#: netbox/netbox/choices.py:105 msgid "Pink" msgstr "Rosa" -#: extras/choices.py:256 netbox/choices.py:50 netbox/choices.py:106 +#: netbox/extras/choices.py:256 netbox/netbox/choices.py:50 +#: netbox/netbox/choices.py:106 msgid "Red" msgstr "Vermelho" -#: extras/choices.py:257 netbox/choices.py:68 netbox/choices.py:107 +#: netbox/extras/choices.py:257 netbox/netbox/choices.py:68 +#: netbox/netbox/choices.py:107 msgid "Orange" msgstr "Laranja" -#: extras/choices.py:258 netbox/choices.py:66 netbox/choices.py:108 +#: netbox/extras/choices.py:258 netbox/netbox/choices.py:66 +#: netbox/netbox/choices.py:108 msgid "Yellow" msgstr "Amarelo" -#: extras/choices.py:259 netbox/choices.py:63 netbox/choices.py:109 +#: netbox/extras/choices.py:259 netbox/netbox/choices.py:63 +#: netbox/netbox/choices.py:109 msgid "Green" msgstr "Verde" -#: extras/choices.py:260 netbox/choices.py:60 netbox/choices.py:110 +#: netbox/extras/choices.py:260 netbox/netbox/choices.py:60 +#: netbox/netbox/choices.py:110 msgid "Teal" msgstr "Azul petróleo" -#: extras/choices.py:261 netbox/choices.py:59 netbox/choices.py:111 +#: netbox/extras/choices.py:261 netbox/netbox/choices.py:59 +#: netbox/netbox/choices.py:111 msgid "Cyan" msgstr "Ciano" -#: extras/choices.py:262 netbox/choices.py:112 +#: netbox/extras/choices.py:262 netbox/netbox/choices.py:112 msgid "Gray" msgstr "Cinza" -#: extras/choices.py:263 netbox/choices.py:74 netbox/choices.py:113 +#: netbox/extras/choices.py:263 netbox/netbox/choices.py:74 +#: netbox/netbox/choices.py:113 msgid "Black" msgstr "Preto" -#: extras/choices.py:264 netbox/choices.py:75 netbox/choices.py:114 +#: netbox/extras/choices.py:264 netbox/netbox/choices.py:75 +#: netbox/netbox/choices.py:114 msgid "White" msgstr "Branco" -#: extras/choices.py:279 extras/forms/model_forms.py:353 -#: extras/forms/model_forms.py:430 templates/extras/webhook.html:10 +#: netbox/extras/choices.py:279 netbox/extras/forms/model_forms.py:353 +#: netbox/extras/forms/model_forms.py:430 +#: netbox/templates/extras/webhook.html:10 msgid "Webhook" msgstr "Webhook" -#: extras/choices.py:280 extras/forms/model_forms.py:418 -#: templates/extras/script/base.html:29 +#: netbox/extras/choices.py:280 netbox/extras/forms/model_forms.py:418 +#: netbox/templates/extras/script/base.html:29 msgid "Script" msgstr "Script" -#: extras/choices.py:281 +#: netbox/extras/choices.py:281 msgid "Notification" msgstr "Notificação" -#: extras/conditions.py:54 +#: netbox/extras/conditions.py:54 #, python-brace-format msgid "Unknown operator: {op}. Must be one of: {operators}" msgstr "Operador desconhecido: {op}. Deve ser um dos seguintes: {operators}" -#: extras/conditions.py:58 +#: netbox/extras/conditions.py:58 #, python-brace-format msgid "Unsupported value type: {value}" msgstr "Tipo de valor não suportado: {value}" -#: extras/conditions.py:60 +#: netbox/extras/conditions.py:60 #, python-brace-format msgid "Invalid type for {op} operation: {value}" msgstr "Tipo inválido para operação {op}: {value}" -#: extras/conditions.py:137 +#: netbox/extras/conditions.py:137 #, python-brace-format msgid "Ruleset must be a dictionary, not {ruleset}." msgstr "O conjunto de regras deve ser um dicionário, não {ruleset}." -#: extras/conditions.py:142 +#: netbox/extras/conditions.py:142 msgid "Invalid logic type: must be 'AND' or 'OR'. Please check documentation." msgstr "" "Tipo lógico inválido: deve ser 'AND' ou 'OR'. Por favor, verifique a " "documentação." -#: extras/conditions.py:154 +#: netbox/extras/conditions.py:154 msgid "Incorrect key(s) informed. Please check documentation." msgstr "Chave(s) inválida(s) informada(s). Por favor, cheque a documentação." -#: extras/dashboard/forms.py:38 +#: netbox/extras/dashboard/forms.py:38 msgid "Widget type" msgstr "Tipo de widget" -#: extras/dashboard/utils.py:36 +#: netbox/extras/dashboard/utils.py:36 #, python-brace-format msgid "Unregistered widget class: {name}" msgstr "Classe de widget não registrada: {name}" -#: extras/dashboard/widgets.py:125 +#: netbox/extras/dashboard/widgets.py:125 #, python-brace-format msgid "{class_name} must define a render() method." msgstr "{class_name} deve definir um método render ()." -#: extras/dashboard/widgets.py:144 +#: netbox/extras/dashboard/widgets.py:144 msgid "Note" msgstr "Nota" -#: extras/dashboard/widgets.py:145 +#: netbox/extras/dashboard/widgets.py:145 msgid "Display some arbitrary custom content. Markdown is supported." msgstr "" "Exibe qualquer conteúdo personalizado arbitrário. Markdown é suportado." -#: extras/dashboard/widgets.py:158 +#: netbox/extras/dashboard/widgets.py:158 msgid "Object Counts" msgstr "Contagem de Objetos" -#: extras/dashboard/widgets.py:159 +#: netbox/extras/dashboard/widgets.py:159 msgid "" "Display a set of NetBox models and the number of objects created for each " "type." @@ -6965,271 +7511,293 @@ msgstr "" "Exibe um conjunto de modelos do NetBox e o número de objetos criados para " "cada tipo." -#: extras/dashboard/widgets.py:169 +#: netbox/extras/dashboard/widgets.py:169 msgid "Filters to apply when counting the number of objects" msgstr "Filtros a serem aplicados ao contar o número de objetos" -#: extras/dashboard/widgets.py:177 +#: netbox/extras/dashboard/widgets.py:177 msgid "Invalid format. Object filters must be passed as a dictionary." msgstr "" "Formato inválido. Os filtros de objetos devem ser passados como um " "dicionário." -#: extras/dashboard/widgets.py:208 +#: netbox/extras/dashboard/widgets.py:208 msgid "Object List" msgstr "Lista de Objetos" -#: extras/dashboard/widgets.py:209 +#: netbox/extras/dashboard/widgets.py:209 msgid "Display an arbitrary list of objects." msgstr "Exibe uma lista arbitrária de objetos." -#: extras/dashboard/widgets.py:222 +#: netbox/extras/dashboard/widgets.py:222 msgid "The default number of objects to display" msgstr "O número padrão de objetos a serem exibidos" -#: extras/dashboard/widgets.py:234 +#: netbox/extras/dashboard/widgets.py:234 msgid "Invalid format. URL parameters must be passed as a dictionary." msgstr "" "Formato inválido. Os parâmetros de URL devem ser passados como um " "dicionário." -#: extras/dashboard/widgets.py:274 +#: netbox/extras/dashboard/widgets.py:274 msgid "RSS Feed" msgstr "Feed RSS" -#: extras/dashboard/widgets.py:279 +#: netbox/extras/dashboard/widgets.py:279 msgid "Embed an RSS feed from an external website." msgstr "Incorpore um feed RSS de um site externo." -#: extras/dashboard/widgets.py:286 +#: netbox/extras/dashboard/widgets.py:286 msgid "Feed URL" msgstr "URL do feed" -#: extras/dashboard/widgets.py:291 +#: netbox/extras/dashboard/widgets.py:291 msgid "The maximum number of objects to display" msgstr "O número máximo de objetos a serem exibidos" -#: extras/dashboard/widgets.py:296 +#: netbox/extras/dashboard/widgets.py:296 msgid "How long to stored the cached content (in seconds)" msgstr "" "Por quanto tempo o conteúdo em cache deve ser armazenado (em segundos)" -#: extras/dashboard/widgets.py:348 templates/account/base.html:10 -#: templates/account/bookmarks.html:7 templates/inc/user_menu.html:48 +#: netbox/extras/dashboard/widgets.py:348 +#: netbox/templates/account/base.html:10 +#: netbox/templates/account/bookmarks.html:7 +#: netbox/templates/inc/user_menu.html:48 msgid "Bookmarks" msgstr "Favoritos" -#: extras/dashboard/widgets.py:352 +#: netbox/extras/dashboard/widgets.py:352 msgid "Show your personal bookmarks" msgstr "Exibe seus favoritos pessoais" -#: extras/events.py:147 +#: netbox/extras/events.py:147 #, 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}" -#: extras/events.py:192 +#: netbox/extras/events.py:192 #, python-brace-format msgid "Cannot import events pipeline {name} error: {error}" msgstr "Não é possível importar o pipeline de eventos {name}: {error}" -#: extras/filtersets.py:45 +#: netbox/extras/filtersets.py:45 msgid "Script module (ID)" msgstr "Módulo script (ID)" -#: extras/filtersets.py:254 extras/filtersets.py:637 extras/filtersets.py:665 +#: netbox/extras/filtersets.py:254 netbox/extras/filtersets.py:637 +#: netbox/extras/filtersets.py:665 msgid "Data file (ID)" msgstr "Arquivo de dados (ID)" -#: extras/filtersets.py:370 users/filtersets.py:68 users/filtersets.py:191 +#: netbox/extras/filtersets.py:370 netbox/users/filtersets.py:68 +#: netbox/users/filtersets.py:191 msgid "Group (name)" msgstr "Grupo (nome)" -#: extras/filtersets.py:574 virtualization/forms/filtersets.py:118 +#: netbox/extras/filtersets.py:574 +#: netbox/virtualization/forms/filtersets.py:118 msgid "Cluster type" msgstr "Tipo de cluster" -#: extras/filtersets.py:580 virtualization/filtersets.py:95 -#: virtualization/filtersets.py:147 +#: netbox/extras/filtersets.py:580 netbox/virtualization/filtersets.py:95 +#: netbox/virtualization/filtersets.py:147 msgid "Cluster type (slug)" msgstr "Tipo de cluster (slug)" -#: extras/filtersets.py:601 tenancy/forms/forms.py:16 -#: tenancy/forms/forms.py:39 +#: netbox/extras/filtersets.py:601 netbox/tenancy/forms/forms.py:16 +#: netbox/tenancy/forms/forms.py:39 msgid "Tenant group" msgstr "Grupo de inquilinos" -#: extras/filtersets.py:607 tenancy/filtersets.py:188 -#: tenancy/filtersets.py:208 +#: netbox/extras/filtersets.py:607 netbox/tenancy/filtersets.py:188 +#: netbox/tenancy/filtersets.py:208 msgid "Tenant group (slug)" msgstr "Grupo de inquilinos (slug)" -#: extras/filtersets.py:623 extras/forms/model_forms.py:495 -#: templates/extras/tag.html:11 +#: netbox/extras/filtersets.py:623 netbox/extras/forms/model_forms.py:495 +#: netbox/templates/extras/tag.html:11 msgid "Tag" msgstr "Etiqueta" -#: extras/filtersets.py:629 +#: netbox/extras/filtersets.py:629 msgid "Tag (slug)" msgstr "Etiqueta (slug)" -#: extras/filtersets.py:689 extras/forms/filtersets.py:429 +#: netbox/extras/filtersets.py:689 netbox/extras/forms/filtersets.py:429 msgid "Has local config context data" msgstr "Possui dados de contexto de configuração local" -#: extras/forms/bulk_edit.py:35 extras/forms/filtersets.py:60 +#: netbox/extras/forms/bulk_edit.py:35 netbox/extras/forms/filtersets.py:60 msgid "Group name" msgstr "Nome do grupo" -#: extras/forms/bulk_edit.py:43 extras/forms/filtersets.py:68 -#: extras/tables/tables.py:65 templates/extras/customfield.html:38 -#: templates/generic/bulk_import.html:118 +#: netbox/extras/forms/bulk_edit.py:43 netbox/extras/forms/filtersets.py:68 +#: netbox/extras/tables/tables.py:65 +#: netbox/templates/extras/customfield.html:38 +#: netbox/templates/generic/bulk_import.html:118 msgid "Required" msgstr "Obrigatório" -#: extras/forms/bulk_edit.py:48 extras/forms/filtersets.py:75 +#: netbox/extras/forms/bulk_edit.py:48 netbox/extras/forms/filtersets.py:75 msgid "Must be unique" msgstr "Deve ser único" -#: extras/forms/bulk_edit.py:61 extras/forms/bulk_import.py:60 -#: extras/forms/filtersets.py:89 extras/models/customfields.py:209 +#: netbox/extras/forms/bulk_edit.py:61 netbox/extras/forms/bulk_import.py:60 +#: netbox/extras/forms/filtersets.py:89 +#: netbox/extras/models/customfields.py:209 msgid "UI visible" msgstr "UI visível" -#: extras/forms/bulk_edit.py:66 extras/forms/bulk_import.py:66 -#: extras/forms/filtersets.py:94 extras/models/customfields.py:216 +#: netbox/extras/forms/bulk_edit.py:66 netbox/extras/forms/bulk_import.py:66 +#: netbox/extras/forms/filtersets.py:94 +#: netbox/extras/models/customfields.py:216 msgid "UI editable" msgstr "UI editável" -#: extras/forms/bulk_edit.py:71 extras/forms/filtersets.py:97 +#: netbox/extras/forms/bulk_edit.py:71 netbox/extras/forms/filtersets.py:97 msgid "Is cloneable" msgstr "É clonável" -#: extras/forms/bulk_edit.py:76 extras/forms/filtersets.py:104 +#: netbox/extras/forms/bulk_edit.py:76 netbox/extras/forms/filtersets.py:104 msgid "Minimum value" msgstr "Valor mínimo" -#: extras/forms/bulk_edit.py:80 extras/forms/filtersets.py:108 +#: netbox/extras/forms/bulk_edit.py:80 netbox/extras/forms/filtersets.py:108 msgid "Maximum value" msgstr "Valor máximo" -#: extras/forms/bulk_edit.py:84 extras/forms/filtersets.py:112 +#: netbox/extras/forms/bulk_edit.py:84 netbox/extras/forms/filtersets.py:112 msgid "Validation regex" msgstr "Expressão regular de validação" -#: extras/forms/bulk_edit.py:91 extras/forms/filtersets.py:46 -#: extras/forms/model_forms.py:76 templates/extras/customfield.html:70 +#: netbox/extras/forms/bulk_edit.py:91 netbox/extras/forms/filtersets.py:46 +#: netbox/extras/forms/model_forms.py:76 +#: netbox/templates/extras/customfield.html:70 msgid "Behavior" msgstr "Comportamento" -#: extras/forms/bulk_edit.py:128 extras/forms/filtersets.py:149 +#: netbox/extras/forms/bulk_edit.py:128 netbox/extras/forms/filtersets.py:149 msgid "New window" msgstr "Nova janela" -#: extras/forms/bulk_edit.py:137 +#: netbox/extras/forms/bulk_edit.py:137 msgid "Button class" msgstr "Classe de botão" -#: extras/forms/bulk_edit.py:154 extras/forms/filtersets.py:187 -#: extras/models/models.py:409 +#: netbox/extras/forms/bulk_edit.py:154 netbox/extras/forms/filtersets.py:187 +#: netbox/extras/models/models.py:409 msgid "MIME type" msgstr "Tipo MIME" -#: extras/forms/bulk_edit.py:159 extras/forms/filtersets.py:190 +#: netbox/extras/forms/bulk_edit.py:159 netbox/extras/forms/filtersets.py:190 msgid "File extension" msgstr "Extensão de arquivo" -#: extras/forms/bulk_edit.py:164 extras/forms/filtersets.py:194 +#: netbox/extras/forms/bulk_edit.py:164 netbox/extras/forms/filtersets.py:194 msgid "As attachment" msgstr "Como anexo" -#: extras/forms/bulk_edit.py:192 extras/forms/filtersets.py:236 -#: extras/tables/tables.py:256 templates/extras/savedfilter.html:29 +#: netbox/extras/forms/bulk_edit.py:192 netbox/extras/forms/filtersets.py:236 +#: netbox/extras/tables/tables.py:256 +#: netbox/templates/extras/savedfilter.html:29 msgid "Shared" msgstr "Compartilhado" -#: extras/forms/bulk_edit.py:215 extras/forms/filtersets.py:265 -#: extras/models/models.py:174 +#: netbox/extras/forms/bulk_edit.py:215 netbox/extras/forms/filtersets.py:265 +#: netbox/extras/models/models.py:174 msgid "HTTP method" msgstr "Método HTTP" -#: extras/forms/bulk_edit.py:219 extras/forms/filtersets.py:259 -#: templates/extras/webhook.html:30 +#: netbox/extras/forms/bulk_edit.py:219 netbox/extras/forms/filtersets.py:259 +#: netbox/templates/extras/webhook.html:30 msgid "Payload URL" msgstr "URL do payload" -#: extras/forms/bulk_edit.py:224 extras/models/models.py:214 +#: netbox/extras/forms/bulk_edit.py:224 netbox/extras/models/models.py:214 msgid "SSL verification" msgstr "Verificação SSL" -#: extras/forms/bulk_edit.py:227 templates/extras/webhook.html:38 +#: netbox/extras/forms/bulk_edit.py:227 +#: netbox/templates/extras/webhook.html:38 msgid "Secret" msgstr "Senha" -#: extras/forms/bulk_edit.py:232 +#: netbox/extras/forms/bulk_edit.py:232 msgid "CA file path" msgstr "Caminho do arquivo CA" -#: extras/forms/bulk_edit.py:253 extras/forms/bulk_import.py:192 -#: extras/forms/model_forms.py:377 +#: netbox/extras/forms/bulk_edit.py:253 netbox/extras/forms/bulk_import.py:192 +#: netbox/extras/forms/model_forms.py:377 msgid "Event types" msgstr "Tipos de evento" -#: extras/forms/bulk_edit.py:293 +#: netbox/extras/forms/bulk_edit.py:293 msgid "Is active" msgstr "Está ativo" -#: extras/forms/bulk_import.py:37 extras/forms/bulk_import.py:118 -#: extras/forms/bulk_import.py:139 extras/forms/bulk_import.py:162 -#: extras/forms/bulk_import.py:186 extras/forms/filtersets.py:137 -#: extras/forms/filtersets.py:224 extras/forms/model_forms.py:47 -#: extras/forms/model_forms.py:205 extras/forms/model_forms.py:237 -#: extras/forms/model_forms.py:278 extras/forms/model_forms.py:372 -#: extras/forms/model_forms.py:489 users/forms/model_forms.py:276 +#: netbox/extras/forms/bulk_import.py:37 +#: netbox/extras/forms/bulk_import.py:118 +#: 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/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/users/forms/model_forms.py:276 msgid "Object types" msgstr "Tipos de objetos" -#: extras/forms/bulk_import.py:39 extras/forms/bulk_import.py:120 -#: extras/forms/bulk_import.py:141 extras/forms/bulk_import.py:164 -#: extras/forms/bulk_import.py:188 tenancy/forms/bulk_import.py:96 +#: netbox/extras/forms/bulk_import.py:39 +#: netbox/extras/forms/bulk_import.py:120 +#: netbox/extras/forms/bulk_import.py:141 +#: netbox/extras/forms/bulk_import.py:164 +#: netbox/extras/forms/bulk_import.py:188 +#: netbox/tenancy/forms/bulk_import.py:96 msgid "One or more assigned object types" msgstr "Um ou mais tipos de objetos associados" -#: extras/forms/bulk_import.py:44 +#: netbox/extras/forms/bulk_import.py:44 msgid "Field data type (e.g. text, integer, etc.)" msgstr "Tipo de campo de dados (por exemplo, texto, número inteiro etc.)" -#: extras/forms/bulk_import.py:47 extras/forms/filtersets.py:208 -#: extras/forms/filtersets.py:281 extras/forms/model_forms.py:304 -#: extras/forms/model_forms.py:341 tenancy/forms/filtersets.py:92 +#: 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/tenancy/forms/filtersets.py:92 msgid "Object type" msgstr "Tipo de objeto" -#: extras/forms/bulk_import.py:50 +#: netbox/extras/forms/bulk_import.py:50 msgid "Object type (for object or multi-object fields)" msgstr "Tipo de objeto (para campos de objeto ou de multiobjetos)" -#: extras/forms/bulk_import.py:53 extras/forms/filtersets.py:84 +#: netbox/extras/forms/bulk_import.py:53 netbox/extras/forms/filtersets.py:84 msgid "Choice set" msgstr "Conjunto de opções" -#: extras/forms/bulk_import.py:57 +#: netbox/extras/forms/bulk_import.py:57 msgid "Choice set (for selection fields)" msgstr "Conjunto de opções (para campos de seleção)" -#: extras/forms/bulk_import.py:63 +#: netbox/extras/forms/bulk_import.py:63 msgid "Whether the custom field is displayed in the UI" msgstr "Se o campo personalizado é exibido na interface do usuário" -#: extras/forms/bulk_import.py:69 +#: netbox/extras/forms/bulk_import.py:69 msgid "Whether the custom field is editable in the UI" msgstr "Se o campo personalizado é editável na interface do usuário" -#: extras/forms/bulk_import.py:85 +#: netbox/extras/forms/bulk_import.py:85 msgid "The base set of predefined choices to use (if any)" msgstr "O conjunto básico de opções predefinidas a serem usadas (se houver)" -#: extras/forms/bulk_import.py:91 +#: netbox/extras/forms/bulk_import.py:91 msgid "" "Quoted string of comma-separated field choices with optional labels " "separated by colon: \"choice1:First Choice,choice2:Second Choice\"" @@ -7238,185 +7806,201 @@ msgstr "" "com rótulos opcionais separados por dois pontos: “Choice1:First Choice, " "Choice2:Second Choice”" -#: extras/forms/bulk_import.py:123 extras/models/models.py:323 +#: netbox/extras/forms/bulk_import.py:123 netbox/extras/models/models.py:323 msgid "button class" msgstr "classe de botão" -#: extras/forms/bulk_import.py:126 extras/models/models.py:327 +#: netbox/extras/forms/bulk_import.py:126 netbox/extras/models/models.py:327 msgid "" "The class of the first link in a group will be used for the dropdown button" msgstr "" "A classe do primeiro link em um grupo será usada para o botão suspenso" -#: extras/forms/bulk_import.py:193 +#: netbox/extras/forms/bulk_import.py:193 msgid "The event type(s) which will trigger this rule" msgstr "O(s) tipo(s) de evento que acionará(ão) esta regra." -#: extras/forms/bulk_import.py:196 +#: netbox/extras/forms/bulk_import.py:196 msgid "Action object" msgstr "Objeto de ação" -#: extras/forms/bulk_import.py:198 +#: netbox/extras/forms/bulk_import.py:198 msgid "Webhook name or script as dotted path module.Class" msgstr "Nome do webhook ou script como caminho pontilhado module.Class" -#: extras/forms/bulk_import.py:219 +#: netbox/extras/forms/bulk_import.py:219 #, python-brace-format msgid "Webhook {name} not found" msgstr "Webhook {name} não encontrado" -#: extras/forms/bulk_import.py:228 +#: netbox/extras/forms/bulk_import.py:228 #, python-brace-format msgid "Script {name} not found" msgstr "Script {name} não encontrado" -#: extras/forms/bulk_import.py:244 +#: netbox/extras/forms/bulk_import.py:244 msgid "Assigned object type" msgstr "Tipo de objeto associado" -#: extras/forms/bulk_import.py:249 +#: netbox/extras/forms/bulk_import.py:249 msgid "The classification of entry" msgstr "A classificação da entrada" -#: extras/forms/bulk_import.py:261 extras/forms/model_forms.py:320 -#: netbox/navigation/menu.py:390 templates/extras/notificationgroup.html:41 -#: templates/users/group.html:29 users/forms/model_forms.py:236 -#: users/forms/model_forms.py:248 users/forms/model_forms.py:300 -#: users/tables.py:102 +#: netbox/extras/forms/bulk_import.py:261 +#: netbox/extras/forms/model_forms.py:320 netbox/netbox/navigation/menu.py:390 +#: 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 +#: netbox/users/tables.py:102 msgid "Users" msgstr "Usuários" -#: extras/forms/bulk_import.py:265 +#: netbox/extras/forms/bulk_import.py:265 msgid "User names separated by commas, encased with double quotes" msgstr "Nomes de usuários separados por vírgulas, envoltos por aspas duplas." -#: extras/forms/bulk_import.py:268 extras/forms/model_forms.py:315 -#: netbox/navigation/menu.py:410 templates/extras/notificationgroup.html:31 -#: users/forms/model_forms.py:181 users/forms/model_forms.py:193 -#: users/forms/model_forms.py:305 users/tables.py:35 users/tables.py:106 +#: netbox/extras/forms/bulk_import.py:268 +#: netbox/extras/forms/model_forms.py:315 netbox/netbox/navigation/menu.py:410 +#: 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 +#: netbox/users/tables.py:106 msgid "Groups" msgstr "Grupos" -#: extras/forms/bulk_import.py:272 +#: netbox/extras/forms/bulk_import.py:272 msgid "Group names separated by commas, encased with double quotes" msgstr "Nomes de grupo separados por vírgulas, envoltos por aspas duplas." -#: extras/forms/filtersets.py:52 extras/forms/model_forms.py:56 +#: netbox/extras/forms/filtersets.py:52 netbox/extras/forms/model_forms.py:56 msgid "Related object type" msgstr "Tipo de objeto relacionado" -#: extras/forms/filtersets.py:57 +#: netbox/extras/forms/filtersets.py:57 msgid "Field type" msgstr "Tipo de campo" -#: extras/forms/filtersets.py:120 extras/forms/model_forms.py:157 -#: extras/tables/tables.py:91 templates/generic/bulk_import.html:154 +#: netbox/extras/forms/filtersets.py:120 +#: netbox/extras/forms/model_forms.py:157 netbox/extras/tables/tables.py:91 +#: netbox/templates/generic/bulk_import.html:154 msgid "Choices" msgstr "Escolhas" -#: extras/forms/filtersets.py:164 extras/forms/filtersets.py:319 -#: extras/forms/filtersets.py:408 extras/forms/model_forms.py:572 -#: templates/core/job.html:96 templates/extras/eventrule.html:84 +#: 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/templates/extras/eventrule.html:84 msgid "Data" msgstr "Dados" -#: extras/forms/filtersets.py:175 extras/forms/filtersets.py:333 -#: extras/forms/filtersets.py:418 netbox/choices.py:130 -#: utilities/forms/bulk_import.py:26 +#: netbox/extras/forms/filtersets.py:175 netbox/extras/forms/filtersets.py:333 +#: netbox/extras/forms/filtersets.py:418 netbox/netbox/choices.py:130 +#: netbox/utilities/forms/bulk_import.py:26 msgid "Data file" msgstr "Arquivo de dados" -#: extras/forms/filtersets.py:183 +#: netbox/extras/forms/filtersets.py:183 msgid "Content types" msgstr "Tipos de conteúdo" -#: extras/forms/filtersets.py:255 extras/models/models.py:179 +#: netbox/extras/forms/filtersets.py:255 netbox/extras/models/models.py:179 msgid "HTTP content type" msgstr "Tipo de conteúdo HTTP" -#: extras/forms/filtersets.py:286 +#: netbox/extras/forms/filtersets.py:286 msgid "Event type" msgstr "Tipo de evento" -#: extras/forms/filtersets.py:291 +#: netbox/extras/forms/filtersets.py:291 msgid "Action type" msgstr "Tipo de ação" -#: extras/forms/filtersets.py:307 +#: netbox/extras/forms/filtersets.py:307 msgid "Tagged object type" msgstr "Tipo de objeto etiquetado" -#: extras/forms/filtersets.py:312 +#: netbox/extras/forms/filtersets.py:312 msgid "Allowed object type" msgstr "Tipo de objeto permitido" -#: extras/forms/filtersets.py:341 extras/forms/model_forms.py:507 -#: netbox/navigation/menu.py:18 +#: netbox/extras/forms/filtersets.py:341 +#: netbox/extras/forms/model_forms.py:507 netbox/netbox/navigation/menu.py:18 msgid "Regions" msgstr "Regiões" -#: extras/forms/filtersets.py:346 extras/forms/model_forms.py:512 +#: netbox/extras/forms/filtersets.py:346 +#: netbox/extras/forms/model_forms.py:512 msgid "Site groups" msgstr "Grupos de sites" -#: extras/forms/filtersets.py:356 extras/forms/model_forms.py:522 -#: netbox/navigation/menu.py:20 templates/dcim/site.html:127 +#: netbox/extras/forms/filtersets.py:356 +#: netbox/extras/forms/model_forms.py:522 netbox/netbox/navigation/menu.py:20 +#: netbox/templates/dcim/site.html:127 msgid "Locations" msgstr "Localizações" -#: extras/forms/filtersets.py:361 extras/forms/model_forms.py:527 +#: netbox/extras/forms/filtersets.py:361 +#: netbox/extras/forms/model_forms.py:527 msgid "Device types" msgstr "Tipos de dispositivos" -#: extras/forms/filtersets.py:366 extras/forms/model_forms.py:532 +#: netbox/extras/forms/filtersets.py:366 +#: netbox/extras/forms/model_forms.py:532 msgid "Roles" msgstr "Funções" -#: extras/forms/filtersets.py:376 extras/forms/model_forms.py:542 +#: netbox/extras/forms/filtersets.py:376 +#: netbox/extras/forms/model_forms.py:542 msgid "Cluster types" msgstr "Tipos de cluster" -#: extras/forms/filtersets.py:381 extras/forms/model_forms.py:547 +#: netbox/extras/forms/filtersets.py:381 +#: netbox/extras/forms/model_forms.py:547 msgid "Cluster groups" msgstr "Grupos de clusters" -#: extras/forms/filtersets.py:386 extras/forms/model_forms.py:552 -#: netbox/navigation/menu.py:255 netbox/navigation/menu.py:257 -#: templates/virtualization/clustertype.html:30 -#: virtualization/tables/clusters.py:23 virtualization/tables/clusters.py:45 +#: 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/templates/virtualization/clustertype.html:30 +#: netbox/virtualization/tables/clusters.py:23 +#: netbox/virtualization/tables/clusters.py:45 msgid "Clusters" msgstr "Clusters" -#: extras/forms/filtersets.py:391 extras/forms/model_forms.py:557 +#: netbox/extras/forms/filtersets.py:391 +#: netbox/extras/forms/model_forms.py:557 msgid "Tenant groups" msgstr "Grupos de inquilinos" -#: extras/forms/model_forms.py:49 +#: netbox/extras/forms/model_forms.py:49 msgid "The type(s) of object that have this custom field" msgstr "O(s) tipo(s) de objeto que possuem este campo customizado." -#: extras/forms/model_forms.py:52 +#: netbox/extras/forms/model_forms.py:52 msgid "Default value" msgstr "Valor padrão" -#: extras/forms/model_forms.py:58 +#: netbox/extras/forms/model_forms.py:58 msgid "Type of the related object (for object/multi-object fields only)" msgstr "" "Tipo do objeto relacionado (somente para campos de objeto/vários objetos)" -#: extras/forms/model_forms.py:61 templates/extras/customfield.html:60 +#: netbox/extras/forms/model_forms.py:61 +#: netbox/templates/extras/customfield.html:60 msgid "Related object filter" msgstr "Filtro de objeto relacionado" -#: extras/forms/model_forms.py:63 +#: netbox/extras/forms/model_forms.py:63 msgid "Specify query parameters as a JSON object." msgstr "Especifique os parâmetros da consulta como um objeto JSON." -#: extras/forms/model_forms.py:73 templates/extras/customfield.html:10 +#: netbox/extras/forms/model_forms.py:73 +#: netbox/templates/extras/customfield.html:10 msgid "Custom Field" msgstr "Campo personalizado" -#: extras/forms/model_forms.py:85 +#: netbox/extras/forms/model_forms.py:85 msgid "" "The type of data stored in this field. For object/multi-object fields, " "select the related object type below." @@ -7424,7 +8008,7 @@ msgstr "" "O tipo de dados armazenados neste campo. Para campos de objeto/multiobjeto, " "selecione o tipo de objeto relacionado abaixo." -#: extras/forms/model_forms.py:88 +#: netbox/extras/forms/model_forms.py:88 msgid "" "This will be displayed as help text for the form field. Markdown is " "supported." @@ -7432,11 +8016,11 @@ msgstr "" "Isso será exibido como texto de ajuda para o campo do formulário. Markdown é" " suportado." -#: extras/forms/model_forms.py:143 +#: netbox/extras/forms/model_forms.py:143 msgid "Related Object" msgstr "Objeto Relacionado" -#: extras/forms/model_forms.py:169 +#: netbox/extras/forms/model_forms.py:169 msgid "" "Enter one choice per line. An optional label may be specified for each " "choice by appending it with a colon. Example:" @@ -7444,15 +8028,16 @@ msgstr "" "Insira uma opção por linha. Um rótulo opcional pode ser especificado para " "cada opção anexando-o com dois pontos. Exemplo:" -#: extras/forms/model_forms.py:212 templates/extras/customlink.html:10 +#: netbox/extras/forms/model_forms.py:212 +#: netbox/templates/extras/customlink.html:10 msgid "Custom Link" msgstr "Link Personalizado" -#: extras/forms/model_forms.py:214 +#: netbox/extras/forms/model_forms.py:214 msgid "Templates" msgstr "Modelos" -#: extras/forms/model_forms.py:226 +#: netbox/extras/forms/model_forms.py:226 #, python-brace-format msgid "" "Jinja2 template code for the link text. Reference the object as {example}. " @@ -7461,7 +8046,7 @@ msgstr "" "Modelo de código Jinja2 para o texto do link. Faça referência ao objeto como" " {example}. Links renderizados como texto vazio não serão exibidos." -#: extras/forms/model_forms.py:230 +#: netbox/extras/forms/model_forms.py:230 #, python-brace-format msgid "" "Jinja2 template code for the link URL. Reference the object as {example}." @@ -7469,55 +8054,61 @@ msgstr "" "Modelo de código Jinja2 para a URL do link. Faça referência ao objeto como " "{example}." -#: extras/forms/model_forms.py:241 extras/forms/model_forms.py:624 +#: netbox/extras/forms/model_forms.py:241 +#: netbox/extras/forms/model_forms.py:624 msgid "Template code" msgstr "Modelo de código" -#: extras/forms/model_forms.py:247 templates/extras/exporttemplate.html:12 +#: netbox/extras/forms/model_forms.py:247 +#: netbox/templates/extras/exporttemplate.html:12 msgid "Export Template" msgstr "Modelo de Exportação" -#: extras/forms/model_forms.py:249 +#: netbox/extras/forms/model_forms.py:249 msgid "Rendering" msgstr "Renderizando" -#: extras/forms/model_forms.py:263 extras/forms/model_forms.py:649 +#: netbox/extras/forms/model_forms.py:263 +#: netbox/extras/forms/model_forms.py:649 msgid "Template content is populated from the remote source selected below." msgstr "" "O conteúdo do modelo é preenchido a partir da fonte remota selecionada " "abaixo." -#: extras/forms/model_forms.py:270 extras/forms/model_forms.py:656 +#: netbox/extras/forms/model_forms.py:270 +#: netbox/extras/forms/model_forms.py:656 msgid "Must specify either local content or a data file" msgstr "Deve especificar o conteúdo local ou um arquivo de dados" -#: extras/forms/model_forms.py:284 netbox/forms/mixins.py:70 -#: templates/extras/savedfilter.html:10 +#: netbox/extras/forms/model_forms.py:284 netbox/netbox/forms/mixins.py:70 +#: netbox/templates/extras/savedfilter.html:10 msgid "Saved Filter" msgstr "Filtro Salvo" -#: extras/forms/model_forms.py:334 +#: netbox/extras/forms/model_forms.py:334 msgid "A notification group specify at least one user or group." msgstr "" "Um grupo de notificações deve especificar pelo menos um usuário ou grupo." -#: extras/forms/model_forms.py:356 templates/extras/webhook.html:23 +#: netbox/extras/forms/model_forms.py:356 +#: netbox/templates/extras/webhook.html:23 msgid "HTTP Request" msgstr "Solicitação HTTP" -#: extras/forms/model_forms.py:358 templates/extras/webhook.html:44 +#: netbox/extras/forms/model_forms.py:358 +#: netbox/templates/extras/webhook.html:44 msgid "SSL" msgstr "SSL" -#: extras/forms/model_forms.py:380 +#: netbox/extras/forms/model_forms.py:380 msgid "Action choice" msgstr "Escolha da ação" -#: extras/forms/model_forms.py:385 +#: netbox/extras/forms/model_forms.py:385 msgid "Enter conditions in JSON format." msgstr "Insira as condições em formato JSON." -#: extras/forms/model_forms.py:389 +#: netbox/extras/forms/model_forms.py:389 msgid "" "Enter parameters to pass to the action in JSON format." @@ -7525,109 +8116,111 @@ msgstr "" "Insira os parâmetros a serem passados para a ação em formato JSON." -#: extras/forms/model_forms.py:394 templates/extras/eventrule.html:10 +#: netbox/extras/forms/model_forms.py:394 +#: netbox/templates/extras/eventrule.html:10 msgid "Event Rule" msgstr "Regra de Evento" -#: extras/forms/model_forms.py:395 +#: netbox/extras/forms/model_forms.py:395 msgid "Triggers" msgstr "Triggers" -#: extras/forms/model_forms.py:442 +#: netbox/extras/forms/model_forms.py:442 msgid "Notification group" msgstr "Grupo de notificação" -#: extras/forms/model_forms.py:562 netbox/navigation/menu.py:26 -#: tenancy/tables/tenants.py:22 +#: netbox/extras/forms/model_forms.py:562 netbox/netbox/navigation/menu.py:26 +#: netbox/tenancy/tables/tenants.py:22 msgid "Tenants" msgstr "Inquilinos" -#: extras/forms/model_forms.py:606 +#: netbox/extras/forms/model_forms.py:606 msgid "Data is populated from the remote source selected below." msgstr "Os dados são preenchidos a partir da fonte remota selecionada abaixo." -#: extras/forms/model_forms.py:612 +#: netbox/extras/forms/model_forms.py:612 msgid "Must specify either local data or a data file" msgstr "Deve especificar dados locais ou um arquivo de dados" -#: extras/forms/model_forms.py:631 templates/core/datafile.html:55 +#: netbox/extras/forms/model_forms.py:631 +#: netbox/templates/core/datafile.html:55 msgid "Content" msgstr "Conteúdo" -#: extras/forms/reports.py:17 extras/forms/scripts.py:23 +#: netbox/extras/forms/reports.py:17 netbox/extras/forms/scripts.py:23 msgid "Schedule at" msgstr "Agende para" -#: extras/forms/reports.py:18 +#: netbox/extras/forms/reports.py:18 msgid "Schedule execution of report to a set time" msgstr "Agende a execução do relatório em um horário definido" -#: extras/forms/reports.py:23 extras/forms/scripts.py:29 +#: netbox/extras/forms/reports.py:23 netbox/extras/forms/scripts.py:29 msgid "Recurs every" msgstr "Repita a cada" -#: extras/forms/reports.py:27 +#: netbox/extras/forms/reports.py:27 msgid "Interval at which this report is re-run (in minutes)" msgstr "Intervalo no qual este relatório é executado novamente (em minutos)" -#: extras/forms/reports.py:35 extras/forms/scripts.py:41 +#: netbox/extras/forms/reports.py:35 netbox/extras/forms/scripts.py:41 #, python-brace-format msgid " (current time: {now})" msgstr " (hora atual: {now})" -#: extras/forms/reports.py:45 extras/forms/scripts.py:51 +#: netbox/extras/forms/reports.py:45 netbox/extras/forms/scripts.py:51 msgid "Scheduled time must be in the future." msgstr "O horário agendado deve ser no futuro." -#: extras/forms/scripts.py:17 +#: netbox/extras/forms/scripts.py:17 msgid "Commit changes" msgstr "Confirmar alterações" -#: extras/forms/scripts.py:18 +#: netbox/extras/forms/scripts.py:18 msgid "Commit changes to the database (uncheck for a dry-run)" msgstr "Confirme as alterações no banco de dados (desmarque para um teste)" -#: extras/forms/scripts.py:24 +#: netbox/extras/forms/scripts.py:24 msgid "Schedule execution of script to a set time" msgstr "Programe a execução do script para um horário definido" -#: extras/forms/scripts.py:33 +#: netbox/extras/forms/scripts.py:33 msgid "Interval at which this script is re-run (in minutes)" msgstr "Intervalo no qual este script é executado novamente (em minutos)" -#: extras/jobs.py:49 +#: netbox/extras/jobs.py:47 msgid "Database changes have been reverted automatically." msgstr "As alterações no banco de dados foram revertidas automaticamente." -#: extras/jobs.py:55 +#: netbox/extras/jobs.py:53 msgid "Script aborted with error: " msgstr "Script abortado com erro: " -#: extras/jobs.py:65 +#: netbox/extras/jobs.py:63 msgid "An exception occurred: " msgstr "Ocorreu uma exceção: " -#: extras/jobs.py:70 +#: netbox/extras/jobs.py:68 msgid "Database changes have been reverted due to error." msgstr "As alterações do banco de dados foram revertidas devido a um erro." -#: extras/management/commands/reindex.py:66 +#: netbox/extras/management/commands/reindex.py:66 msgid "No indexers found!" msgstr "Nenhum indexador encontrado!" -#: extras/models/configs.py:130 +#: netbox/extras/models/configs.py:130 msgid "config context" msgstr "contexto de configuração" -#: extras/models/configs.py:131 +#: netbox/extras/models/configs.py:131 msgid "config contexts" msgstr "contexto de configuração" -#: extras/models/configs.py:149 extras/models/configs.py:205 +#: netbox/extras/models/configs.py:149 netbox/extras/models/configs.py:205 msgid "JSON data must be in object form. Example:" msgstr "Os dados JSON devem estar no formato de objeto. Exemplo:" -#: extras/models/configs.py:169 +#: netbox/extras/models/configs.py:169 msgid "" "Local config context data takes precedence over source contexts in the final" " rendered config context" @@ -7635,19 +8228,19 @@ msgstr "" "Os dados do contexto de configuração local têm precedência sobre os " "contextos de origem no contexto de configuração renderizado final" -#: extras/models/configs.py:224 +#: netbox/extras/models/configs.py:224 msgid "template code" msgstr "modelo de código" -#: extras/models/configs.py:225 +#: netbox/extras/models/configs.py:225 msgid "Jinja2 template code." msgstr "Modelo de código Jinja2." -#: extras/models/configs.py:228 +#: netbox/extras/models/configs.py:228 msgid "environment parameters" msgstr "parâmetros do ambiente" -#: extras/models/configs.py:233 +#: netbox/extras/models/configs.py:233 msgid "" "Any additional" @@ -7657,42 +8250,42 @@ msgstr "" "href=\"https://jinja.palletsprojects.com/en/3.1.x/api/#jinja2.Environment\">parâmetros" " adicionais para passar ao construir o ambiente Jinja2." -#: extras/models/configs.py:240 +#: netbox/extras/models/configs.py:240 msgid "config template" msgstr "modelo de configuração" -#: extras/models/configs.py:241 +#: netbox/extras/models/configs.py:241 msgid "config templates" msgstr "modelos de configuração" -#: extras/models/customfields.py:75 +#: netbox/extras/models/customfields.py:75 msgid "The object(s) to which this field applies." msgstr "Objetos aos quais este campo se aplica." -#: extras/models/customfields.py:82 +#: netbox/extras/models/customfields.py:82 msgid "The type of data this custom field holds" msgstr "O tipo de dados que este campo personalizado contém" -#: extras/models/customfields.py:89 +#: netbox/extras/models/customfields.py:89 msgid "The type of NetBox object this field maps to (for object fields)" msgstr "" "O tipo de objeto do NetBox para o qual este campo é mapeado (para campos de " "objeto)" -#: extras/models/customfields.py:95 +#: netbox/extras/models/customfields.py:95 msgid "Internal field name" msgstr "Nome interno do campo" -#: extras/models/customfields.py:99 +#: netbox/extras/models/customfields.py:99 msgid "Only alphanumeric characters and underscores are allowed." msgstr "Somente caracteres alfanuméricos e sublinhados são permitidos." -#: extras/models/customfields.py:104 +#: netbox/extras/models/customfields.py:104 msgid "Double underscores are not permitted in custom field names." msgstr "" "Sublinhados duplos não são permitidos em nomes de campos personalizados." -#: extras/models/customfields.py:115 +#: netbox/extras/models/customfields.py:115 msgid "" "Name of the field as displayed to users (if not provided, 'the field's name " "will be used)" @@ -7700,19 +8293,19 @@ msgstr "" "Nome do campo exibido aos usuários (se não for fornecido, o nome do campo " "será usado)" -#: extras/models/customfields.py:119 extras/models/models.py:317 +#: netbox/extras/models/customfields.py:119 netbox/extras/models/models.py:317 msgid "group name" msgstr "nome do grupo" -#: extras/models/customfields.py:122 +#: netbox/extras/models/customfields.py:122 msgid "Custom fields within the same group will be displayed together" msgstr "Os campos personalizados dentro do mesmo grupo serão exibidos juntos" -#: extras/models/customfields.py:130 +#: netbox/extras/models/customfields.py:130 msgid "required" msgstr "requeridos" -#: extras/models/customfields.py:132 +#: netbox/extras/models/customfields.py:132 msgid "" "This field is required when creating new objects or editing an existing " "object." @@ -7720,19 +8313,19 @@ msgstr "" "Este campo é necessário ao criar novos objetos ou editar um objeto " "existente." -#: extras/models/customfields.py:135 +#: netbox/extras/models/customfields.py:135 msgid "must be unique" msgstr "deve ser único" -#: extras/models/customfields.py:137 +#: netbox/extras/models/customfields.py:137 msgid "The value of this field must be unique for the assigned object" msgstr "O valor deste campo deve ser único para o objeto atribuído" -#: extras/models/customfields.py:140 +#: netbox/extras/models/customfields.py:140 msgid "search weight" msgstr "peso da pesquisa" -#: extras/models/customfields.py:143 +#: netbox/extras/models/customfields.py:143 msgid "" "Weighting for search. Lower values are considered more important. Fields " "with a search weight of zero will be ignored." @@ -7740,11 +8333,11 @@ msgstr "" "Peso durante uma pesquisa. Valores mais baixos são considerados mais " "importantes. Campos com peso de pesquisa zero serão ignorados." -#: extras/models/customfields.py:148 +#: netbox/extras/models/customfields.py:148 msgid "filter logic" msgstr "lógica do filtro" -#: extras/models/customfields.py:152 +#: netbox/extras/models/customfields.py:152 msgid "" "Loose matches any instance of a given string; exact matches the entire " "field." @@ -7752,11 +8345,11 @@ msgstr "" "Flexível corresponde a qualquer instância de uma determinada string; exata " "corresponde a todo o campo." -#: extras/models/customfields.py:155 +#: netbox/extras/models/customfields.py:155 msgid "default" msgstr "padrão" -#: extras/models/customfields.py:159 +#: netbox/extras/models/customfields.py:159 msgid "" "Default value for the field (must be a JSON value). Encapsulate strings with" " double quotes (e.g. \"Foo\")." @@ -7764,7 +8357,7 @@ msgstr "" "Valor padrão para o campo (deve ser um valor JSON). Encapsule strings usando" " aspas duplas (por exemplo, “Foo”)." -#: extras/models/customfields.py:166 +#: netbox/extras/models/customfields.py:166 msgid "" "Filter the object selection choices using a query_params dict (must be a " "JSON value).Encapsulate strings with double quotes (e.g. \"Foo\")." @@ -7773,35 +8366,35 @@ msgstr "" "(deve ser um valor JSON). Encapsule strings com aspas duplas (por exemplo, " "'Foo')." -#: extras/models/customfields.py:172 +#: netbox/extras/models/customfields.py:172 msgid "display weight" msgstr "peso de exibição" -#: extras/models/customfields.py:173 +#: netbox/extras/models/customfields.py:173 msgid "Fields with higher weights appear lower in a form." msgstr "Os campos com pesos maiores aparecem mais abaixo em um formulário." -#: extras/models/customfields.py:178 +#: netbox/extras/models/customfields.py:178 msgid "minimum value" msgstr "valor mínimo" -#: extras/models/customfields.py:179 +#: netbox/extras/models/customfields.py:179 msgid "Minimum allowed value (for numeric fields)" msgstr "Valor mínimo permitido (para campos numéricos)" -#: extras/models/customfields.py:184 +#: netbox/extras/models/customfields.py:184 msgid "maximum value" msgstr "valor máximo" -#: extras/models/customfields.py:185 +#: netbox/extras/models/customfields.py:185 msgid "Maximum allowed value (for numeric fields)" msgstr "Valor máximo permitido (para campos numéricos)" -#: extras/models/customfields.py:191 +#: netbox/extras/models/customfields.py:191 msgid "validation regex" msgstr "expressão regular de validação" -#: extras/models/customfields.py:193 +#: netbox/extras/models/customfields.py:193 #, python-brace-format msgid "" "Regular expression to enforce on text field values. Use ^ and $ to force " @@ -7812,193 +8405,195 @@ msgstr "" "forçar a correspondência de toda a string. Por exemplo, ^ " "[A-Z]{3}$ limitará os valores a exatamente três letras maiúsculas." -#: extras/models/customfields.py:201 +#: netbox/extras/models/customfields.py:201 msgid "choice set" msgstr "conjunto de opções" -#: extras/models/customfields.py:210 +#: netbox/extras/models/customfields.py:210 msgid "Specifies whether the custom field is displayed in the UI" msgstr "Especifica se o campo personalizado é exibido na interface do usuário" -#: extras/models/customfields.py:217 +#: netbox/extras/models/customfields.py:217 msgid "Specifies whether the custom field value can be edited in the UI" msgstr "" "Especifica se o valor do campo personalizado pode ser editado na interface " "do usuário" -#: extras/models/customfields.py:221 +#: netbox/extras/models/customfields.py:221 msgid "is cloneable" msgstr "é clonável" -#: extras/models/customfields.py:222 +#: netbox/extras/models/customfields.py:222 msgid "Replicate this value when cloning objects" msgstr "Replique este valor ao clonar objetos" -#: extras/models/customfields.py:239 +#: netbox/extras/models/customfields.py:239 msgid "custom field" msgstr "campo personalizado" -#: extras/models/customfields.py:240 +#: netbox/extras/models/customfields.py:240 msgid "custom fields" msgstr "campos personalizados" -#: extras/models/customfields.py:329 +#: netbox/extras/models/customfields.py:329 #, python-brace-format msgid "Invalid default value \"{value}\": {error}" msgstr "Valor padrão inválido”{value}“: {error}" -#: extras/models/customfields.py:336 +#: netbox/extras/models/customfields.py:336 msgid "A minimum value may be set only for numeric fields" msgstr "Um valor mínimo pode ser definido somente para campos numéricos" -#: extras/models/customfields.py:338 +#: netbox/extras/models/customfields.py:338 msgid "A maximum value may be set only for numeric fields" msgstr "Um valor máximo pode ser definido somente para campos numéricos" -#: extras/models/customfields.py:348 +#: netbox/extras/models/customfields.py:348 msgid "" "Regular expression validation is supported only for text and URL fields" msgstr "" "Expressões regulares são suportadas somente para campos de texto e URLs" -#: extras/models/customfields.py:354 +#: netbox/extras/models/customfields.py:354 msgid "Uniqueness cannot be enforced for boolean fields" msgstr "A unicidade não pode ser aplicada para campos booleanos." -#: extras/models/customfields.py:364 +#: netbox/extras/models/customfields.py:364 msgid "Selection fields must specify a set of choices." msgstr "Os campos de seleção devem especificar um conjunto de opções." -#: extras/models/customfields.py:368 +#: netbox/extras/models/customfields.py:368 msgid "Choices may be set only on selection fields." msgstr "As opções podem ser definidas somente nos campos de seleção." -#: extras/models/customfields.py:375 +#: netbox/extras/models/customfields.py:375 msgid "Object fields must define an object type." msgstr "Os campos de objeto devem definir um tipo de objeto." -#: extras/models/customfields.py:379 +#: netbox/extras/models/customfields.py:379 #, python-brace-format msgid "{type} fields may not define an object type." msgstr "Campos {type} não podem definir um tipo de objeto." -#: extras/models/customfields.py:386 +#: netbox/extras/models/customfields.py:386 msgid "A related object filter can be defined only for object fields." msgstr "" "Um filtro de objeto relacionado pode ser definido apenas para campos de " "objeto." -#: extras/models/customfields.py:390 +#: netbox/extras/models/customfields.py:390 msgid "Filter must be defined as a dictionary mapping attributes to values." msgstr "" "O filtro deve ser definido como um dicionário que mapeia atributos para " "valores." -#: extras/models/customfields.py:469 +#: netbox/extras/models/customfields.py:469 msgid "True" msgstr "Verdadeiro" -#: extras/models/customfields.py:470 +#: netbox/extras/models/customfields.py:470 msgid "False" msgstr "Falso" -#: extras/models/customfields.py:560 +#: netbox/extras/models/customfields.py:560 #, python-brace-format msgid "Values must match this regex: {regex}" msgstr "" "Os valores devem corresponder a esta expressão regular: {regex}" -#: extras/models/customfields.py:654 +#: netbox/extras/models/customfields.py:654 msgid "Value must be a string." msgstr "O valor deve ser uma string." -#: extras/models/customfields.py:656 +#: netbox/extras/models/customfields.py:656 #, python-brace-format msgid "Value must match regex '{regex}'" msgstr "O valor deve corresponder à expressão regular '{regex}'" -#: extras/models/customfields.py:661 +#: netbox/extras/models/customfields.py:661 msgid "Value must be an integer." msgstr "O valor deve ser um número inteiro." -#: extras/models/customfields.py:664 extras/models/customfields.py:679 +#: netbox/extras/models/customfields.py:664 +#: netbox/extras/models/customfields.py:679 #, python-brace-format msgid "Value must be at least {minimum}" msgstr "O valor deve ser pelo menos {minimum}" -#: extras/models/customfields.py:668 extras/models/customfields.py:683 +#: netbox/extras/models/customfields.py:668 +#: netbox/extras/models/customfields.py:683 #, python-brace-format msgid "Value must not exceed {maximum}" msgstr "O valor não deve exceder {maximum}" -#: extras/models/customfields.py:676 +#: netbox/extras/models/customfields.py:676 msgid "Value must be a decimal." msgstr "O valor deve ser decimal." -#: extras/models/customfields.py:688 +#: netbox/extras/models/customfields.py:688 msgid "Value must be true or false." msgstr "O valor deve ser verdadeiro ou falso." -#: extras/models/customfields.py:696 +#: netbox/extras/models/customfields.py:696 msgid "Date values must be in ISO 8601 format (YYYY-MM-DD)." msgstr "Os valores de data devem estar no formato ISO 8601 (AAAA-MM-DD)." -#: extras/models/customfields.py:705 +#: netbox/extras/models/customfields.py:705 msgid "Date and time values must be in ISO 8601 format (YYYY-MM-DD HH:MM:SS)." msgstr "" "Os valores de data e hora devem estar no formato ISO 8601 (AAAA-MM-DD " "HH:MM:SS)." -#: extras/models/customfields.py:712 +#: netbox/extras/models/customfields.py:712 #, python-brace-format msgid "Invalid choice ({value}) for choice set {choiceset}." msgstr "Escolha {value} é inválida para o conjunto de escolhas {choiceset}." -#: extras/models/customfields.py:722 +#: netbox/extras/models/customfields.py:722 #, python-brace-format msgid "Invalid choice(s) ({value}) for choice set {choiceset}." msgstr "Escolha {value} é inválida para o conjunto de escolhas {choiceset}." -#: extras/models/customfields.py:731 +#: netbox/extras/models/customfields.py:731 #, python-brace-format msgid "Value must be an object ID, not {type}" msgstr "O valor deve ser um ID de objeto, não {type}" -#: extras/models/customfields.py:737 +#: netbox/extras/models/customfields.py:737 #, python-brace-format msgid "Value must be a list of object IDs, not {type}" msgstr "O valor deve ser uma lista de IDs de objetos, não {type}" -#: extras/models/customfields.py:741 +#: netbox/extras/models/customfields.py:741 #, python-brace-format msgid "Found invalid object ID: {id}" msgstr "ID de objeto inválida encontrada: {id}" -#: extras/models/customfields.py:744 +#: netbox/extras/models/customfields.py:744 msgid "Required field cannot be empty." msgstr "O campo obrigatório não pode estar vazio." -#: extras/models/customfields.py:763 +#: netbox/extras/models/customfields.py:763 msgid "Base set of predefined choices (optional)" msgstr "Conjunto básico de opções predefinidas (opcional)" -#: extras/models/customfields.py:775 +#: netbox/extras/models/customfields.py:775 msgid "Choices are automatically ordered alphabetically" msgstr "As opções são ordenadas automaticamente em ordem alfabética" -#: extras/models/customfields.py:782 +#: netbox/extras/models/customfields.py:782 msgid "custom field choice set" msgstr "conjunto de opções de campo personalizado" -#: extras/models/customfields.py:783 +#: netbox/extras/models/customfields.py:783 msgid "custom field choice sets" msgstr "conjuntos de opções de campos personalizados" -#: extras/models/customfields.py:825 +#: netbox/extras/models/customfields.py:825 msgid "Must define base or extra choices." msgstr "Deve definir opções básicas ou extras." -#: extras/models/customfields.py:849 +#: netbox/extras/models/customfields.py:849 #, python-brace-format msgid "" "Cannot remove choice {choice} as there are {model} objects which reference " @@ -8007,60 +8602,60 @@ msgstr "" "Não é possível remover a escolha {choice} como existem {model} objetos que " "fazem referência a ele." -#: extras/models/dashboard.py:18 +#: netbox/extras/models/dashboard.py:18 msgid "layout" msgstr "layout" -#: extras/models/dashboard.py:22 +#: netbox/extras/models/dashboard.py:22 msgid "config" msgstr "configuração" -#: extras/models/dashboard.py:27 +#: netbox/extras/models/dashboard.py:27 msgid "dashboard" msgstr "dashboard" -#: extras/models/dashboard.py:28 +#: netbox/extras/models/dashboard.py:28 msgid "dashboards" msgstr "dashboards" -#: extras/models/models.py:52 +#: netbox/extras/models/models.py:52 msgid "object types" msgstr "tipos de objetos" -#: extras/models/models.py:53 +#: netbox/extras/models/models.py:53 msgid "The object(s) to which this rule applies." msgstr "Objeto(s) aos quais esta regra se aplica." -#: extras/models/models.py:67 +#: netbox/extras/models/models.py:67 msgid "The types of event which will trigger this rule." msgstr "Os tipos de eventos que irão acionar esta regra." -#: extras/models/models.py:74 +#: netbox/extras/models/models.py:74 msgid "conditions" msgstr "condições" -#: extras/models/models.py:77 +#: netbox/extras/models/models.py:77 msgid "" "A set of conditions which determine whether the event will be generated." msgstr "Um conjunto de condições que determinam se o evento será gerado." -#: extras/models/models.py:85 +#: netbox/extras/models/models.py:85 msgid "action type" msgstr "tipo de ação" -#: extras/models/models.py:104 +#: netbox/extras/models/models.py:104 msgid "Additional data to pass to the action object" msgstr "Dados adicionais para passar ao objeto da ação" -#: extras/models/models.py:116 +#: netbox/extras/models/models.py:116 msgid "event rule" msgstr "regra de evento" -#: extras/models/models.py:117 +#: netbox/extras/models/models.py:117 msgid "event rules" msgstr "regras dos eventos" -#: extras/models/models.py:166 +#: netbox/extras/models/models.py:166 msgid "" "This URL will be called using the HTTP method defined when the webhook is " "called. Jinja2 template processing is supported with the same context as the" @@ -8070,7 +8665,7 @@ msgstr "" "chamado. O processamento do modelo Jinja2 é suportado com o mesmo contexto " "do corpo da solicitação." -#: extras/models/models.py:181 +#: netbox/extras/models/models.py:181 msgid "" "The complete list of official content types is available aqui." -#: extras/models/models.py:186 +#: netbox/extras/models/models.py:186 msgid "additional headers" msgstr "cabeçalhos adicionais" -#: extras/models/models.py:189 +#: netbox/extras/models/models.py:189 msgid "" "User-supplied HTTP headers to be sent with the request in addition to the " "HTTP content type. Headers should be defined in the format Name: " @@ -8096,11 +8691,11 @@ msgstr "" "Name:Value. O processamento do modelo Jinja2 é suportado com o " "mesmo contexto do corpo da solicitação (abaixo)." -#: extras/models/models.py:195 +#: netbox/extras/models/models.py:195 msgid "body template" msgstr "corpo modelo" -#: extras/models/models.py:198 +#: netbox/extras/models/models.py:198 msgid "" "Jinja2 template for a custom request body. If blank, a JSON object " "representing the change will be included. Available context data includes: " @@ -8113,11 +8708,11 @@ msgstr "" "timestamp, username, request_id, e " "data." -#: extras/models/models.py:204 +#: netbox/extras/models/models.py:204 msgid "secret" msgstr "senha" -#: extras/models/models.py:208 +#: netbox/extras/models/models.py:208 msgid "" "When provided, the request will include a X-Hook-Signature " "header containing a HMAC hex digest of the payload body using the secret as " @@ -8127,15 +8722,15 @@ msgstr "" "Signature contendo um HMAC hex digest do corpo do payload usando a " "senha como chave. A senha não é transmitido na solicitação." -#: extras/models/models.py:215 +#: netbox/extras/models/models.py:215 msgid "Enable SSL certificate verification. Disable with caution!" msgstr "Ative a verificação do certificado SSL. Desative com cuidado!" -#: extras/models/models.py:221 templates/extras/webhook.html:51 +#: netbox/extras/models/models.py:221 netbox/templates/extras/webhook.html:51 msgid "CA File Path" msgstr "Caminho do arquivo CA" -#: extras/models/models.py:223 +#: netbox/extras/models/models.py:223 msgid "" "The specific CA certificate file to use for SSL verification. Leave blank to" " use the system defaults." @@ -8143,65 +8738,65 @@ msgstr "" "O arquivo de certificado CA específico a ser usado para verificação SSL. " "Deixe em branco para usar os padrões do sistema." -#: extras/models/models.py:234 +#: netbox/extras/models/models.py:234 msgid "webhook" msgstr "webhook" -#: extras/models/models.py:235 +#: netbox/extras/models/models.py:235 msgid "webhooks" msgstr "webhooks" -#: extras/models/models.py:253 +#: netbox/extras/models/models.py:253 msgid "Do not specify a CA certificate file if SSL verification is disabled." msgstr "" "Não especifique um arquivo de certificado CA se a verificação SSL estiver " "desativada." -#: extras/models/models.py:293 +#: netbox/extras/models/models.py:293 msgid "The object type(s) to which this link applies." msgstr "O(s) tipo(s) de objeto aos quais este link se aplica." -#: extras/models/models.py:305 +#: netbox/extras/models/models.py:305 msgid "link text" msgstr "texto do link" -#: extras/models/models.py:306 +#: netbox/extras/models/models.py:306 msgid "Jinja2 template code for link text" msgstr "Modelo de código Jinja2 para texto do link" -#: extras/models/models.py:309 +#: netbox/extras/models/models.py:309 msgid "link URL" msgstr "URL do link" -#: extras/models/models.py:310 +#: netbox/extras/models/models.py:310 msgid "Jinja2 template code for link URL" msgstr "Modelo de código Jinja2 para URL do link" -#: extras/models/models.py:320 +#: netbox/extras/models/models.py:320 msgid "Links with the same group will appear as a dropdown menu" msgstr "Links com o mesmo grupo aparecerão como um menu suspenso" -#: extras/models/models.py:330 +#: netbox/extras/models/models.py:330 msgid "new window" msgstr "nova janela" -#: extras/models/models.py:332 +#: netbox/extras/models/models.py:332 msgid "Force link to open in a new window" msgstr "Forçar o link a abrir em uma nova janela" -#: extras/models/models.py:341 +#: netbox/extras/models/models.py:341 msgid "custom link" msgstr "link personalizado" -#: extras/models/models.py:342 +#: netbox/extras/models/models.py:342 msgid "custom links" msgstr "links personalizados" -#: extras/models/models.py:389 +#: netbox/extras/models/models.py:389 msgid "The object type(s) to which this template applies." msgstr "O (s) tipo (s) de objeto aos quais este modelo se aplica." -#: extras/models/models.py:402 +#: netbox/extras/models/models.py:402 msgid "" "Jinja2 template code. The list of objects being exported is passed as a " "context variable named queryset." @@ -8209,1087 +8804,1160 @@ msgstr "" "Modelo de código Jinja2. A lista de objetos que estão sendo exportados é " "passada como uma variável de contexto chamada queryset." -#: extras/models/models.py:410 +#: netbox/extras/models/models.py:410 msgid "Defaults to text/plain; charset=utf-8" msgstr "O padrão é text/plain; charset=utf-8" -#: extras/models/models.py:413 +#: netbox/extras/models/models.py:413 msgid "file extension" msgstr "extensão do arquivo" -#: extras/models/models.py:416 +#: netbox/extras/models/models.py:416 msgid "Extension to append to the rendered filename" msgstr "Extensão para anexar ao nome do arquivo renderizado" -#: extras/models/models.py:419 +#: netbox/extras/models/models.py:419 msgid "as attachment" msgstr "como anexo" -#: extras/models/models.py:421 +#: netbox/extras/models/models.py:421 msgid "Download file as attachment" msgstr "Baixar arquivo como anexo" -#: extras/models/models.py:430 +#: netbox/extras/models/models.py:430 msgid "export template" msgstr "modelo de exportação" -#: extras/models/models.py:431 +#: netbox/extras/models/models.py:431 msgid "export templates" msgstr "modelos de exportação" -#: extras/models/models.py:448 +#: netbox/extras/models/models.py:448 #, python-brace-format msgid "\"{name}\" is a reserved name. Please choose a different name." msgstr "“{name}“é um nome reservado. Escolha um nome diferente." -#: extras/models/models.py:498 +#: netbox/extras/models/models.py:498 msgid "The object type(s) to which this filter applies." msgstr "O (s) tipo (s) de objeto aos quais este filtro se aplica." -#: extras/models/models.py:530 +#: netbox/extras/models/models.py:530 msgid "shared" msgstr "compartilhado" -#: extras/models/models.py:543 +#: netbox/extras/models/models.py:543 msgid "saved filter" msgstr "filtro salvo" -#: extras/models/models.py:544 +#: netbox/extras/models/models.py:544 msgid "saved filters" msgstr "filtros salvos" -#: extras/models/models.py:562 +#: netbox/extras/models/models.py:562 msgid "Filter parameters must be stored as a dictionary of keyword arguments." msgstr "" "Os parâmetros de filtro devem ser armazenados como um dicionário de " "palavras-chave." -#: extras/models/models.py:590 +#: netbox/extras/models/models.py:590 msgid "image height" msgstr "altura da imagem" -#: extras/models/models.py:593 +#: netbox/extras/models/models.py:593 msgid "image width" msgstr "largura da imagem" -#: extras/models/models.py:610 +#: netbox/extras/models/models.py:610 msgid "image attachment" msgstr "anexo de imagem" -#: extras/models/models.py:611 +#: netbox/extras/models/models.py:611 msgid "image attachments" msgstr "anexos de imagens" -#: extras/models/models.py:625 +#: netbox/extras/models/models.py:625 #, python-brace-format msgid "Image attachments cannot be assigned to this object type ({type})." msgstr "" "Os anexos de imagens não podem ser associados a este tipo de objeto " "({type})." -#: extras/models/models.py:688 +#: netbox/extras/models/models.py:688 msgid "kind" msgstr "tipo" -#: extras/models/models.py:702 +#: netbox/extras/models/models.py:702 msgid "journal entry" msgstr "registro de evento" -#: extras/models/models.py:703 +#: netbox/extras/models/models.py:703 msgid "journal entries" msgstr "registros de eventos" -#: extras/models/models.py:718 +#: netbox/extras/models/models.py:718 #, python-brace-format msgid "Journaling is not supported for this object type ({type})." msgstr "Registro de eventos não é suportado para o tipo de objeto ({type})." -#: extras/models/models.py:760 +#: netbox/extras/models/models.py:760 msgid "bookmark" msgstr "favorito" -#: extras/models/models.py:761 +#: netbox/extras/models/models.py:761 msgid "bookmarks" msgstr "favoritos" -#: extras/models/models.py:774 +#: netbox/extras/models/models.py:774 #, python-brace-format msgid "Bookmarks cannot be assigned to this object type ({type})." msgstr "O tipo de objeto ({type}) não pode ser favoritado." -#: extras/models/notifications.py:43 +#: netbox/extras/models/notifications.py:43 msgid "read" msgstr "leitura" -#: extras/models/notifications.py:66 +#: netbox/extras/models/notifications.py:66 msgid "event" msgstr "evento" -#: extras/models/notifications.py:84 +#: netbox/extras/models/notifications.py:84 msgid "notification" msgstr "notificação" -#: extras/models/notifications.py:85 +#: netbox/extras/models/notifications.py:85 msgid "notifications" msgstr "notificações" -#: extras/models/notifications.py:99 extras/models/notifications.py:234 +#: netbox/extras/models/notifications.py:99 +#: netbox/extras/models/notifications.py:234 #, python-brace-format msgid "Objects of this type ({type}) do not support notifications." msgstr "Objetos deste tipo ({type}) não suportam notificações." -#: extras/models/notifications.py:137 users/models/users.py:58 -#: users/models/users.py:77 +#: netbox/extras/models/notifications.py:137 netbox/users/models/users.py:58 +#: netbox/users/models/users.py:77 msgid "groups" msgstr "grupos" -#: extras/models/notifications.py:143 users/models/users.py:93 +#: netbox/extras/models/notifications.py:143 netbox/users/models/users.py:93 msgid "users" msgstr "usuários" -#: extras/models/notifications.py:152 +#: netbox/extras/models/notifications.py:152 msgid "notification group" msgstr "grupo de notificação" -#: extras/models/notifications.py:153 +#: netbox/extras/models/notifications.py:153 msgid "notification groups" msgstr "grupos de notificação" -#: extras/models/notifications.py:217 +#: netbox/extras/models/notifications.py:217 msgid "subscription" msgstr "subscrição" -#: extras/models/notifications.py:218 +#: netbox/extras/models/notifications.py:218 msgid "subscriptions" msgstr "subscrições" -#: extras/models/scripts.py:42 +#: netbox/extras/models/scripts.py:42 msgid "is executable" msgstr "é executável" -#: extras/models/scripts.py:64 +#: netbox/extras/models/scripts.py:64 msgid "script" msgstr "script" -#: extras/models/scripts.py:65 +#: netbox/extras/models/scripts.py:65 msgid "scripts" msgstr "scripts" -#: extras/models/scripts.py:111 +#: netbox/extras/models/scripts.py:111 msgid "script module" msgstr "módulo de script" -#: extras/models/scripts.py:112 +#: netbox/extras/models/scripts.py:112 msgid "script modules" msgstr "módulos de scripts" -#: extras/models/search.py:22 +#: netbox/extras/models/search.py:22 msgid "timestamp" msgstr "timestamp" -#: extras/models/search.py:37 +#: netbox/extras/models/search.py:37 msgid "field" msgstr "campo" -#: extras/models/search.py:45 +#: netbox/extras/models/search.py:45 msgid "value" msgstr "valor" -#: extras/models/search.py:56 +#: netbox/extras/models/search.py:56 msgid "cached value" msgstr "valor em cache" -#: extras/models/search.py:57 +#: netbox/extras/models/search.py:57 msgid "cached values" msgstr "valores em cache" -#: extras/models/staging.py:44 +#: netbox/extras/models/staging.py:44 msgid "branch" msgstr "filial" -#: extras/models/staging.py:45 +#: netbox/extras/models/staging.py:45 msgid "branches" msgstr "filiais" -#: extras/models/staging.py:97 +#: netbox/extras/models/staging.py:97 msgid "staged change" msgstr "mudança preparada" -#: extras/models/staging.py:98 +#: netbox/extras/models/staging.py:98 msgid "staged changes" msgstr "mudanças preparadas" -#: extras/models/tags.py:40 +#: netbox/extras/models/tags.py:40 msgid "The object type(s) to which this tag can be applied." msgstr "Tipo(s) de objeto aos quais esta etiqueta pode ser aplicada." -#: extras/models/tags.py:49 +#: netbox/extras/models/tags.py:49 msgid "tag" msgstr "etiqueta" -#: extras/models/tags.py:50 +#: netbox/extras/models/tags.py:50 msgid "tags" msgstr "etiquetas" -#: extras/models/tags.py:78 +#: netbox/extras/models/tags.py:78 msgid "tagged item" msgstr "item etiquetado" -#: extras/models/tags.py:79 +#: netbox/extras/models/tags.py:79 msgid "tagged items" msgstr "itens etiquetados" -#: extras/scripts.py:429 +#: netbox/extras/scripts.py:429 msgid "Script Data" msgstr "Dados do Script" -#: extras/scripts.py:433 +#: netbox/extras/scripts.py:433 msgid "Script Execution Parameters" msgstr "Parâmetros de Execução do Script" -#: extras/tables/columns.py:12 templates/htmx/notifications.html:18 +#: netbox/extras/tables/columns.py:12 +#: netbox/templates/htmx/notifications.html:18 msgid "Dismiss" msgstr "Descartar" -#: extras/tables/tables.py:62 extras/tables/tables.py:159 -#: extras/tables/tables.py:184 extras/tables/tables.py:250 -#: extras/tables/tables.py:276 extras/tables/tables.py:412 -#: extras/tables/tables.py:446 templates/extras/customfield.html:105 -#: templates/extras/eventrule.html:27 templates/users/objectpermission.html:64 -#: users/tables.py:80 +#: netbox/extras/tables/tables.py:62 netbox/extras/tables/tables.py:159 +#: netbox/extras/tables/tables.py:184 netbox/extras/tables/tables.py:250 +#: netbox/extras/tables/tables.py:276 netbox/extras/tables/tables.py:412 +#: netbox/extras/tables/tables.py:446 +#: netbox/templates/extras/customfield.html:105 +#: netbox/templates/extras/eventrule.html:27 +#: netbox/templates/users/objectpermission.html:64 netbox/users/tables.py:80 msgid "Object Types" msgstr "Tipos de Objetos" -#: extras/tables/tables.py:69 +#: netbox/extras/tables/tables.py:69 msgid "Validate Uniqueness" msgstr "Validar Unicidade" -#: extras/tables/tables.py:73 +#: netbox/extras/tables/tables.py:73 msgid "Visible" msgstr "Visível" -#: extras/tables/tables.py:76 +#: netbox/extras/tables/tables.py:76 msgid "Editable" msgstr "Editável" -#: extras/tables/tables.py:82 +#: netbox/extras/tables/tables.py:82 msgid "Related Object Type" msgstr "Tipo de Objeto Relacionado" -#: extras/tables/tables.py:86 templates/extras/customfield.html:51 +#: netbox/extras/tables/tables.py:86 +#: netbox/templates/extras/customfield.html:51 msgid "Choice Set" msgstr "Conjunto de Opções" -#: extras/tables/tables.py:94 +#: netbox/extras/tables/tables.py:94 msgid "Is Cloneable" msgstr "É Clonável" -#: extras/tables/tables.py:98 templates/extras/customfield.html:118 +#: netbox/extras/tables/tables.py:98 +#: netbox/templates/extras/customfield.html:118 msgid "Minimum Value" msgstr "Valor Mínimo" -#: extras/tables/tables.py:101 templates/extras/customfield.html:122 +#: netbox/extras/tables/tables.py:101 +#: netbox/templates/extras/customfield.html:122 msgid "Maximum Value" msgstr "Valor Máximo" -#: extras/tables/tables.py:104 +#: netbox/extras/tables/tables.py:104 msgid "Validation Regex" msgstr "Expressão Regular de Validação" -#: extras/tables/tables.py:137 +#: netbox/extras/tables/tables.py:137 msgid "Count" msgstr "Contar" -#: extras/tables/tables.py:140 +#: netbox/extras/tables/tables.py:140 msgid "Order Alphabetically" msgstr "Ordenar Alfabeticamente" -#: extras/tables/tables.py:165 templates/extras/customlink.html:33 +#: netbox/extras/tables/tables.py:165 +#: netbox/templates/extras/customlink.html:33 msgid "New Window" msgstr "Nova Janela" -#: extras/tables/tables.py:187 +#: netbox/extras/tables/tables.py:187 msgid "As Attachment" msgstr "Como Anexo" -#: extras/tables/tables.py:195 extras/tables/tables.py:487 -#: extras/tables/tables.py:522 templates/core/datafile.html:24 -#: templates/dcim/device/render_config.html:22 -#: templates/extras/configcontext.html:39 -#: templates/extras/configtemplate.html:31 -#: templates/extras/exporttemplate.html:45 -#: templates/generic/bulk_import.html:35 -#: templates/virtualization/virtualmachine/render_config.html:22 +#: netbox/extras/tables/tables.py: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/generic/bulk_import.html:35 +#: netbox/templates/virtualization/virtualmachine/render_config.html:22 msgid "Data File" msgstr "Arquivo de Dados" -#: extras/tables/tables.py:200 extras/tables/tables.py:499 -#: extras/tables/tables.py:527 +#: netbox/extras/tables/tables.py:200 netbox/extras/tables/tables.py:499 +#: netbox/extras/tables/tables.py:527 msgid "Synced" msgstr "Sincronizado" -#: extras/tables/tables.py:227 +#: netbox/extras/tables/tables.py:227 msgid "Image" msgstr "Imagem" -#: extras/tables/tables.py:232 +#: netbox/extras/tables/tables.py:232 msgid "Size (Bytes)" msgstr "Tamanho (Bytes)" -#: extras/tables/tables.py:339 +#: netbox/extras/tables/tables.py:339 msgid "Read" msgstr "Leitura" -#: extras/tables/tables.py:382 +#: netbox/extras/tables/tables.py:382 msgid "SSL Validation" msgstr "Validação SSL" -#: extras/tables/tables.py:418 templates/extras/eventrule.html:37 +#: netbox/extras/tables/tables.py:418 +#: netbox/templates/extras/eventrule.html:37 msgid "Event Types" msgstr "Tipos de Evento" -#: extras/tables/tables.py:535 netbox/navigation/menu.py:77 -#: templates/dcim/devicerole.html:8 +#: netbox/extras/tables/tables.py:535 netbox/netbox/navigation/menu.py:77 +#: netbox/templates/dcim/devicerole.html:8 msgid "Device Roles" msgstr "Funções de Dispositivos" -#: extras/tables/tables.py:587 +#: netbox/extras/tables/tables.py:587 msgid "Comments (Short)" msgstr "Comentários (curto)" -#: extras/tables/tables.py:606 extras/tables/tables.py:640 +#: netbox/extras/tables/tables.py:606 netbox/extras/tables/tables.py:640 msgid "Line" msgstr "Linha" -#: extras/tables/tables.py:613 extras/tables/tables.py:650 +#: netbox/extras/tables/tables.py:613 netbox/extras/tables/tables.py:650 msgid "Level" msgstr "Nível" -#: extras/tables/tables.py:619 extras/tables/tables.py:659 +#: netbox/extras/tables/tables.py:619 netbox/extras/tables/tables.py:659 msgid "Message" msgstr "Mensagem" -#: extras/tables/tables.py:643 +#: netbox/extras/tables/tables.py:643 msgid "Method" msgstr "Método" -#: extras/validators.py:15 +#: netbox/extras/validators.py:15 #, python-format msgid "Ensure this value is equal to %(limit_value)s." msgstr "Verifique se este valor é igual a %(limit_value)s." -#: extras/validators.py:26 +#: netbox/extras/validators.py:26 #, python-format msgid "Ensure this value does not equal %(limit_value)s." msgstr "Certifique-se de que este valor não seja igual a%(limit_value)s." -#: extras/validators.py:37 +#: netbox/extras/validators.py:37 msgid "This field must be empty." msgstr "Este campo deve estar vazio." -#: extras/validators.py:52 +#: netbox/extras/validators.py:52 msgid "This field must not be empty." msgstr "Este campo não deve estar vazio." -#: extras/validators.py:94 +#: netbox/extras/validators.py:94 msgid "Validation rules must be passed as a dictionary" msgstr "As regras de validação devem ser passadas como um dicionário" -#: extras/validators.py:119 +#: netbox/extras/validators.py:119 #, python-brace-format msgid "Custom validation failed for {attribute}: {exception}" msgstr "Falha na validação personalizada para {attribute}: {exception}" -#: extras/validators.py:133 +#: netbox/extras/validators.py:133 #, python-brace-format msgid "Invalid attribute \"{name}\" for request" msgstr "Atributo \"{name}\" é inválido para a requisição" -#: extras/validators.py:150 +#: netbox/extras/validators.py:150 #, python-brace-format msgid "Invalid attribute \"{name}\" for {model}" msgstr "Atributo \"{name}\" é inválido para {model}" -#: extras/views.py:960 +#: netbox/extras/views.py:960 msgid "Your dashboard has been reset." msgstr "Seu dashboard foi redefinido." -#: extras/views.py:1006 +#: netbox/extras/views.py:1006 msgid "Added widget: " msgstr "Widget adicionado: " -#: extras/views.py:1047 +#: netbox/extras/views.py:1047 msgid "Updated widget: " msgstr "Widget atualizado: " -#: extras/views.py:1083 +#: netbox/extras/views.py:1083 msgid "Deleted widget: " msgstr "Widget excluído: " -#: extras/views.py:1085 +#: netbox/extras/views.py:1085 msgid "Error deleting widget: " msgstr "Erro ao excluir o widget: " -#: extras/views.py:1172 +#: netbox/extras/views.py:1175 msgid "Unable to run script: RQ worker process not running." msgstr "" "Não é possível executar o script: o processo do agente RQ não está em " "execução." -#: ipam/api/field_serializers.py:17 +#: netbox/ipam/api/field_serializers.py:17 msgid "Enter a valid IPv4 or IPv6 address with optional mask." msgstr "Insira um endereço IPv4 ou IPv6 válido com máscara opcional." -#: ipam/api/field_serializers.py:24 +#: netbox/ipam/api/field_serializers.py:24 #, python-brace-format msgid "Invalid IP address format: {data}" msgstr "Formato de endereço IP inválido: {data}" -#: ipam/api/field_serializers.py:37 +#: netbox/ipam/api/field_serializers.py:37 msgid "Enter a valid IPv4 or IPv6 prefix and mask in CIDR notation." msgstr "Insira um prefixo IPv4 ou IPv6 válido e uma máscara na notação CIDR." -#: ipam/api/field_serializers.py:44 +#: netbox/ipam/api/field_serializers.py:44 #, python-brace-format msgid "Invalid IP prefix format: {data}" msgstr "Formato de prefixo IP inválido: {data}" -#: ipam/api/views.py:358 +#: netbox/ipam/api/views.py:358 msgid "" "Insufficient space is available to accommodate the requested prefix size(s)" msgstr "" "Espaço insuficiente para acomodar o(s) tamanho(s) de prefixo solicitado" -#: ipam/choices.py:30 +#: netbox/ipam/choices.py:30 msgid "Container" msgstr "Contêiner" -#: ipam/choices.py:72 +#: netbox/ipam/choices.py:72 msgid "DHCP" msgstr "DHCP" -#: ipam/choices.py:73 +#: netbox/ipam/choices.py:73 msgid "SLAAC" msgstr "SLAAC" -#: ipam/choices.py:89 +#: netbox/ipam/choices.py:89 msgid "Loopback" msgstr "Loopback" -#: ipam/choices.py:91 +#: netbox/ipam/choices.py:91 msgid "Anycast" msgstr "Anycast" -#: ipam/choices.py:115 +#: netbox/ipam/choices.py:115 msgid "Standard" msgstr "Padrão" -#: ipam/choices.py:120 +#: netbox/ipam/choices.py:120 msgid "CheckPoint" msgstr "CheckPoint" -#: ipam/choices.py:123 +#: netbox/ipam/choices.py:123 msgid "Cisco" msgstr "Cisco" -#: ipam/choices.py:137 +#: netbox/ipam/choices.py:137 msgid "Plaintext" msgstr "Texto sem formatação" -#: ipam/fields.py:36 +#: netbox/ipam/fields.py:36 #, python-brace-format msgid "Invalid IP address format: {address}" msgstr "Formato de endereço IP inválido: {address}" -#: ipam/filtersets.py:48 vpn/filtersets.py:304 +#: netbox/ipam/filtersets.py:48 netbox/vpn/filtersets.py:304 msgid "Import target" msgstr "Import target" -#: ipam/filtersets.py:54 vpn/filtersets.py:310 +#: netbox/ipam/filtersets.py:54 netbox/vpn/filtersets.py:310 msgid "Import target (name)" msgstr "Import target (nome)" -#: ipam/filtersets.py:59 vpn/filtersets.py:315 +#: netbox/ipam/filtersets.py:59 netbox/vpn/filtersets.py:315 msgid "Export target" msgstr "Export target" -#: ipam/filtersets.py:65 vpn/filtersets.py:321 +#: netbox/ipam/filtersets.py:65 netbox/vpn/filtersets.py:321 msgid "Export target (name)" msgstr "Export target (nome)" -#: ipam/filtersets.py:86 +#: netbox/ipam/filtersets.py:86 msgid "Importing VRF" msgstr "Importando VRF" -#: ipam/filtersets.py:92 +#: netbox/ipam/filtersets.py:92 msgid "Import VRF (RD)" msgstr "Importar VRF (Route Distinguisher)" -#: ipam/filtersets.py:97 +#: netbox/ipam/filtersets.py:97 msgid "Exporting VRF" msgstr "Exportando VRF" -#: ipam/filtersets.py:103 +#: netbox/ipam/filtersets.py:103 msgid "Export VRF (RD)" msgstr "Exportar VRF (Route Distinguisher)" -#: ipam/filtersets.py:108 +#: netbox/ipam/filtersets.py:108 msgid "Importing L2VPN" msgstr "Importando L2VPN" -#: ipam/filtersets.py:114 +#: netbox/ipam/filtersets.py:114 msgid "Importing L2VPN (identifier)" msgstr "Importando L2VPN (identificador)" -#: ipam/filtersets.py:119 +#: netbox/ipam/filtersets.py:119 msgid "Exporting L2VPN" msgstr "Exportando L2VPN" -#: ipam/filtersets.py:125 +#: netbox/ipam/filtersets.py:125 msgid "Exporting L2VPN (identifier)" msgstr "Exportando L2VPN (identificador)" -#: ipam/filtersets.py:155 ipam/filtersets.py:281 ipam/forms/model_forms.py:229 -#: ipam/tables/ip.py:212 templates/ipam/prefix.html:12 +#: 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 "Prefixo" -#: ipam/filtersets.py:159 ipam/filtersets.py:198 ipam/filtersets.py:221 +#: netbox/ipam/filtersets.py:159 netbox/ipam/filtersets.py:198 +#: netbox/ipam/filtersets.py:223 msgid "RIR (ID)" msgstr "RIR (ID)" -#: ipam/filtersets.py:165 ipam/filtersets.py:204 ipam/filtersets.py:227 +#: netbox/ipam/filtersets.py:165 netbox/ipam/filtersets.py:204 +#: netbox/ipam/filtersets.py:229 msgid "RIR (slug)" msgstr "RIR (slug)" -#: ipam/filtersets.py:285 +#: netbox/ipam/filtersets.py:287 msgid "Within prefix" msgstr "Dentro do prefixo" -#: ipam/filtersets.py:289 +#: netbox/ipam/filtersets.py:291 msgid "Within and including prefix" msgstr "Dentro e incluindo o prefixo" -#: ipam/filtersets.py:293 +#: netbox/ipam/filtersets.py:295 msgid "Prefixes which contain this prefix or IP" msgstr "Prefixos que contêm este prefixo ou IP" -#: ipam/filtersets.py:304 ipam/filtersets.py:572 ipam/forms/bulk_edit.py:343 -#: ipam/forms/filtersets.py:196 ipam/forms/filtersets.py:331 +#: 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 "Tamanho da máscara" -#: ipam/filtersets.py:373 vpn/filtersets.py:427 +#: netbox/ipam/filtersets.py:375 netbox/vpn/filtersets.py:427 msgid "VLAN (ID)" msgstr "VLAN (ID)" -#: ipam/filtersets.py:377 vpn/filtersets.py:422 +#: netbox/ipam/filtersets.py:379 netbox/vpn/filtersets.py:422 msgid "VLAN number (1-4094)" msgstr "Número da VLAN (1-4094)" -#: ipam/filtersets.py:471 ipam/filtersets.py:475 ipam/filtersets.py:567 -#: ipam/forms/model_forms.py:463 templates/tenancy/contact.html:53 -#: tenancy/forms/bulk_edit.py:113 +#: 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 "Endereço" -#: ipam/filtersets.py:479 +#: netbox/ipam/filtersets.py:481 msgid "Ranges which contain this prefix or IP" msgstr "Faixas que contêm este prefixo ou IP" -#: ipam/filtersets.py:507 ipam/filtersets.py:563 +#: netbox/ipam/filtersets.py:509 netbox/ipam/filtersets.py:565 msgid "Parent prefix" msgstr "Prefixo pai" -#: ipam/filtersets.py:616 ipam/filtersets.py:856 ipam/filtersets.py:1131 -#: 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 (nome)" -#: ipam/filtersets.py:621 ipam/filtersets.py:861 ipam/filtersets.py:1125 -#: virtualization/filtersets.py:282 virtualization/filtersets.py:321 -#: vpn/filtersets.py:390 +#: 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)" -#: ipam/filtersets.py:627 vpn/filtersets.py:97 vpn/filtersets.py:396 +#: netbox/ipam/filtersets.py:629 netbox/vpn/filtersets.py:97 +#: netbox/vpn/filtersets.py:396 msgid "Interface (name)" msgstr "Interface (nome)" -#: ipam/filtersets.py:638 vpn/filtersets.py:108 vpn/filtersets.py:407 +#: netbox/ipam/filtersets.py:640 netbox/vpn/filtersets.py:108 +#: netbox/vpn/filtersets.py:407 msgid "VM interface (name)" msgstr "Interface da VM (nome)" -#: ipam/filtersets.py:643 vpn/filtersets.py:113 +#: netbox/ipam/filtersets.py:645 netbox/vpn/filtersets.py:113 msgid "VM interface (ID)" msgstr "Interface da VM (ID)" -#: ipam/filtersets.py:648 +#: netbox/ipam/filtersets.py:650 msgid "FHRP group (ID)" msgstr "Grupo FHRP (ID)" -#: ipam/filtersets.py:652 +#: netbox/ipam/filtersets.py:654 msgid "Is assigned to an interface" msgstr "Está associado a uma interface" -#: ipam/filtersets.py:656 +#: netbox/ipam/filtersets.py:658 msgid "Is assigned" msgstr "Está associado" -#: ipam/filtersets.py:668 +#: netbox/ipam/filtersets.py:670 msgid "Service (ID)" msgstr "Serviço (ID)" -#: ipam/filtersets.py:673 +#: netbox/ipam/filtersets.py:675 msgid "NAT inside IP address (ID)" msgstr "NAT dentro do endereço IP (ID)" -#: ipam/filtersets.py:1041 ipam/forms/bulk_import.py:322 +#: netbox/ipam/filtersets.py:1043 netbox/ipam/forms/bulk_import.py:322 msgid "Assigned interface" msgstr "Interface associada" -#: ipam/filtersets.py:1046 +#: netbox/ipam/filtersets.py:1048 msgid "Assigned VM interface" msgstr "Interface de VM atribuída" -#: ipam/filtersets.py:1136 +#: netbox/ipam/filtersets.py:1138 msgid "IP address (ID)" msgstr "Endereço IP (ID)" -#: ipam/filtersets.py:1142 ipam/models/ip.py:788 +#: netbox/ipam/filtersets.py:1144 netbox/ipam/models/ip.py:788 msgid "IP address" msgstr "Endereço IP" -#: ipam/filtersets.py:1167 +#: netbox/ipam/filtersets.py:1169 msgid "Primary IPv4 (ID)" msgstr "IPv4 Primário (ID)" -#: ipam/filtersets.py:1172 +#: netbox/ipam/filtersets.py:1174 msgid "Primary IPv6 (ID)" msgstr "IPv6 Primário (ID)" -#: ipam/formfields.py:14 +#: netbox/ipam/formfields.py:14 msgid "Enter a valid IPv4 or IPv6 address (without a mask)." msgstr "Insira um endereço IPv4 ou IPv6 válido (sem máscara)." -#: ipam/formfields.py:32 +#: netbox/ipam/formfields.py:32 #, python-brace-format msgid "Invalid IPv4/IPv6 address format: {address}" msgstr "Formato de endereço IPv4/IPv6 inválido: {address}" -#: ipam/formfields.py:37 +#: netbox/ipam/formfields.py:37 msgid "This field requires an IP address without a mask." msgstr "Este campo exige um endereço IP sem máscara." -#: ipam/formfields.py:39 ipam/formfields.py:61 +#: netbox/ipam/formfields.py:39 netbox/ipam/formfields.py:61 msgid "Please specify a valid IPv4 or IPv6 address." msgstr "Especifique um endereço IPv4 ou IPv6 válido." -#: ipam/formfields.py:44 +#: netbox/ipam/formfields.py:44 msgid "Enter a valid IPv4 or IPv6 address (with CIDR mask)." msgstr "Insira um endereço IPv4 ou IPv6 válido (com máscara CIDR)." -#: ipam/formfields.py:56 +#: netbox/ipam/formfields.py:56 msgid "CIDR mask (e.g. /24) is required." msgstr "A máscara CIDR (por exemplo, /24) é obrigatória." -#: ipam/forms/bulk_create.py:13 +#: netbox/ipam/forms/bulk_create.py:13 msgid "Address pattern" msgstr "Padrão de endereço" -#: ipam/forms/bulk_edit.py:50 +#: netbox/ipam/forms/bulk_edit.py:50 msgid "Enforce unique space" msgstr "Imponha um espaço exclusivo" -#: ipam/forms/bulk_edit.py:88 +#: netbox/ipam/forms/bulk_edit.py:88 msgid "Is private" msgstr "É privado" -#: ipam/forms/bulk_edit.py:109 ipam/forms/bulk_edit.py:138 -#: ipam/forms/bulk_edit.py:163 ipam/forms/bulk_import.py:89 -#: ipam/forms/bulk_import.py:109 ipam/forms/bulk_import.py:129 -#: ipam/forms/filtersets.py:110 ipam/forms/filtersets.py:125 -#: ipam/forms/filtersets.py:148 ipam/forms/model_forms.py:96 -#: ipam/forms/model_forms.py:109 ipam/forms/model_forms.py:131 -#: ipam/forms/model_forms.py:149 ipam/models/asns.py:31 -#: ipam/models/asns.py:103 ipam/models/ip.py:71 ipam/models/ip.py:90 -#: ipam/tables/asn.py:20 ipam/tables/asn.py:45 -#: templates/ipam/aggregate.html:18 templates/ipam/asn.html:27 -#: templates/ipam/asnrange.html:19 templates/ipam/rir.html:19 +#: netbox/ipam/forms/bulk_edit.py: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/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" -#: ipam/forms/bulk_edit.py:171 +#: netbox/ipam/forms/bulk_edit.py:171 msgid "Date added" msgstr "Data da adição" -#: ipam/forms/bulk_edit.py:229 ipam/forms/model_forms.py:586 -#: ipam/forms/model_forms.py:633 ipam/tables/ip.py:251 -#: templates/ipam/vlan_edit.html:37 templates/ipam/vlangroup.html:27 +#: 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/templates/ipam/vlangroup.html:27 msgid "VLAN Group" msgstr "Grupo de VLANs" -#: ipam/forms/bulk_edit.py:234 ipam/forms/bulk_import.py:185 -#: ipam/forms/filtersets.py:256 ipam/forms/model_forms.py:218 -#: ipam/models/vlans.py:234 ipam/tables/ip.py:255 -#: templates/ipam/prefix.html:60 templates/ipam/vlan.html:12 -#: templates/ipam/vlan/base.html:6 templates/ipam/vlan_edit.html:10 -#: templates/wireless/wirelesslan.html:30 vpn/forms/bulk_import.py:304 -#: vpn/forms/filtersets.py:284 vpn/forms/model_forms.py:433 -#: vpn/forms/model_forms.py:452 wireless/forms/bulk_edit.py:55 -#: wireless/forms/bulk_import.py:48 wireless/forms/model_forms.py:48 -#: wireless/models.py:102 +#: 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/templates/ipam/vlan/base.html:6 +#: netbox/templates/ipam/vlan_edit.html:10 +#: netbox/templates/wireless/wirelesslan.html:30 +#: netbox/vpn/forms/bulk_import.py:304 netbox/vpn/forms/filtersets.py:284 +#: netbox/vpn/forms/model_forms.py:433 netbox/vpn/forms/model_forms.py:452 +#: netbox/wireless/forms/bulk_edit.py:55 +#: netbox/wireless/forms/bulk_import.py:48 +#: netbox/wireless/forms/model_forms.py:48 netbox/wireless/models.py:102 msgid "VLAN" msgstr "VLAN" -#: ipam/forms/bulk_edit.py:245 +#: netbox/ipam/forms/bulk_edit.py:245 msgid "Prefix length" msgstr "Comprimento do prefixo" -#: ipam/forms/bulk_edit.py:268 ipam/forms/filtersets.py:241 -#: templates/ipam/prefix.html:85 +#: netbox/ipam/forms/bulk_edit.py:268 netbox/ipam/forms/filtersets.py:241 +#: netbox/templates/ipam/prefix.html:85 msgid "Is a pool" msgstr "É um pool" -#: ipam/forms/bulk_edit.py:273 ipam/forms/bulk_edit.py:318 -#: ipam/forms/filtersets.py:248 ipam/forms/filtersets.py:293 -#: ipam/models/ip.py:272 ipam/models/ip.py:539 +#: netbox/ipam/forms/bulk_edit.py: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 msgid "Treat as fully utilized" msgstr "Trate como totalmente utilizado" -#: ipam/forms/bulk_edit.py:287 ipam/forms/filtersets.py:171 +#: netbox/ipam/forms/bulk_edit.py:287 netbox/ipam/forms/filtersets.py:171 msgid "VLAN Assignment" msgstr "Atribuição de VLAN" -#: ipam/forms/bulk_edit.py:366 ipam/models/ip.py:772 +#: netbox/ipam/forms/bulk_edit.py:366 netbox/ipam/models/ip.py:772 msgid "DNS name" msgstr "Nome DNS" -#: ipam/forms/bulk_edit.py:387 ipam/forms/bulk_edit.py:534 -#: ipam/forms/bulk_import.py:394 ipam/forms/bulk_import.py:469 -#: ipam/forms/bulk_import.py:495 ipam/forms/filtersets.py:390 -#: ipam/forms/filtersets.py:530 templates/ipam/fhrpgroup.html:22 -#: templates/ipam/inc/panels/fhrp_groups.html:24 -#: templates/ipam/service.html:32 templates/ipam/servicetemplate.html:19 +#: netbox/ipam/forms/bulk_edit.py: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/templates/ipam/inc/panels/fhrp_groups.html:24 +#: netbox/templates/ipam/service.html:32 +#: netbox/templates/ipam/servicetemplate.html:19 msgid "Protocol" msgstr "Protocolo" -#: ipam/forms/bulk_edit.py:394 ipam/forms/filtersets.py:397 -#: ipam/tables/fhrp.py:22 templates/ipam/fhrpgroup.html:26 +#: netbox/ipam/forms/bulk_edit.py:394 netbox/ipam/forms/filtersets.py:397 +#: netbox/ipam/tables/fhrp.py:22 netbox/templates/ipam/fhrpgroup.html:26 msgid "Group ID" msgstr "ID do Grupo" -#: ipam/forms/bulk_edit.py:399 ipam/forms/filtersets.py:402 -#: wireless/forms/bulk_edit.py:68 wireless/forms/bulk_edit.py:115 -#: wireless/forms/bulk_import.py:62 wireless/forms/bulk_import.py:65 -#: wireless/forms/bulk_import.py:104 wireless/forms/bulk_import.py:107 -#: wireless/forms/filtersets.py:54 wireless/forms/filtersets.py:88 +#: netbox/ipam/forms/bulk_edit.py: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 msgid "Authentication type" msgstr "Tipo de autenticação" -#: ipam/forms/bulk_edit.py:404 ipam/forms/filtersets.py:406 +#: netbox/ipam/forms/bulk_edit.py:404 netbox/ipam/forms/filtersets.py:406 msgid "Authentication key" msgstr "Chave de autenticação" -#: ipam/forms/bulk_edit.py:421 ipam/forms/filtersets.py:383 -#: ipam/forms/model_forms.py:474 netbox/navigation/menu.py:386 -#: templates/ipam/fhrpgroup.html:49 -#: templates/wireless/inc/authentication_attrs.html:5 -#: wireless/forms/bulk_edit.py:91 wireless/forms/bulk_edit.py:149 -#: wireless/forms/filtersets.py:36 wireless/forms/filtersets.py:76 -#: wireless/forms/model_forms.py:55 wireless/forms/model_forms.py:171 +#: 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/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 msgid "Authentication" msgstr "Autenticação" -#: ipam/forms/bulk_edit.py:436 ipam/forms/model_forms.py:575 +#: netbox/ipam/forms/bulk_edit.py:436 netbox/ipam/forms/model_forms.py:608 msgid "Scope type" msgstr "Tipo de escopo" -#: ipam/forms/bulk_edit.py:439 ipam/forms/bulk_edit.py:453 -#: ipam/forms/model_forms.py:578 ipam/forms/model_forms.py:588 -#: ipam/tables/vlans.py:71 templates/ipam/vlangroup.html:38 +#: 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 "Escopo" -#: ipam/forms/bulk_edit.py:446 ipam/models/vlans.py:60 +#: netbox/ipam/forms/bulk_edit.py:446 netbox/ipam/models/vlans.py:60 msgid "VLAN ID ranges" msgstr "Faixas para ID de VLAN." -#: ipam/forms/bulk_edit.py:525 +#: netbox/ipam/forms/bulk_edit.py:525 msgid "Site & Group" msgstr "Site e Grupo" -#: ipam/forms/bulk_edit.py:539 ipam/forms/model_forms.py:659 -#: ipam/forms/model_forms.py:691 ipam/tables/services.py:19 -#: ipam/tables/services.py:49 templates/ipam/service.html:36 -#: templates/ipam/servicetemplate.html:23 +#: netbox/ipam/forms/bulk_edit.py:539 netbox/ipam/forms/model_forms.py:692 +#: netbox/ipam/forms/model_forms.py:724 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 "Portas" -#: ipam/forms/bulk_import.py:48 +#: netbox/ipam/forms/bulk_import.py:48 msgid "Import route targets" msgstr "Import route targets" -#: ipam/forms/bulk_import.py:54 +#: netbox/ipam/forms/bulk_import.py:54 msgid "Export route targets" msgstr "Export route targets" -#: ipam/forms/bulk_import.py:92 ipam/forms/bulk_import.py:112 -#: ipam/forms/bulk_import.py:132 +#: netbox/ipam/forms/bulk_import.py:92 netbox/ipam/forms/bulk_import.py:112 +#: netbox/ipam/forms/bulk_import.py:132 msgid "Assigned RIR" msgstr "RIR associado" -#: ipam/forms/bulk_import.py:182 +#: netbox/ipam/forms/bulk_import.py:182 msgid "VLAN's group (if any)" msgstr "Grupo de VLANs (se houver)" -#: ipam/forms/bulk_import.py:308 +#: netbox/ipam/forms/bulk_import.py:308 msgid "Parent device of assigned interface (if any)" msgstr "Dispositivo pai da interface associada (se houver)" -#: ipam/forms/bulk_import.py:311 ipam/forms/bulk_import.py:488 -#: ipam/forms/model_forms.py:685 virtualization/filtersets.py:288 -#: virtualization/filtersets.py:327 virtualization/forms/bulk_edit.py:200 -#: virtualization/forms/bulk_edit.py:326 -#: virtualization/forms/bulk_import.py:146 -#: virtualization/forms/bulk_import.py:207 -#: virtualization/forms/filtersets.py:212 -#: virtualization/forms/filtersets.py:248 -#: virtualization/forms/model_forms.py:288 vpn/forms/bulk_import.py:93 -#: vpn/forms/bulk_import.py:290 +#: 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" -#: ipam/forms/bulk_import.py:315 +#: netbox/ipam/forms/bulk_import.py:315 msgid "Parent VM of assigned interface (if any)" msgstr "VM pai da interface associada (se houver)" -#: ipam/forms/bulk_import.py:325 +#: netbox/ipam/forms/bulk_import.py:325 msgid "Is primary" msgstr "É primário" -#: ipam/forms/bulk_import.py:326 +#: netbox/ipam/forms/bulk_import.py:326 msgid "Make this the primary IP for the assigned device" msgstr "Tornar este o IP primário do dispositivo associado" -#: ipam/forms/bulk_import.py:365 +#: netbox/ipam/forms/bulk_import.py:330 +msgid "Is out-of-band" +msgstr "É out-of-band" + +#: netbox/ipam/forms/bulk_import.py:331 +msgid "Designate this as the out-of-band IP address for the assigned device" +msgstr "" +"Designar este como endereço IP out-f-band para o dispositvo associado." + +#: netbox/ipam/forms/bulk_import.py:371 msgid "No device or virtual machine specified; cannot set as primary IP" msgstr "" "Nenhum dispositivo ou máquina virtual especificado; não pode ser definido " "como IP primário" -#: ipam/forms/bulk_import.py:369 +#: netbox/ipam/forms/bulk_import.py:375 +msgid "No device specified; cannot set as out-of-band IP" +msgstr "" +"Nenhum dispositivo especificado; não pode ser definido como IP out-of-band" + +#: netbox/ipam/forms/bulk_import.py:379 +msgid "Cannot set out-of-band IP for virtual machines" +msgstr "Não é possível definir IP out-of-band para máquinas virtuais" + +#: netbox/ipam/forms/bulk_import.py:383 msgid "No interface specified; cannot set as primary IP" msgstr "" "Nenhuma interface especificada; não é possível definir como IP primário" -#: ipam/forms/bulk_import.py:398 +#: netbox/ipam/forms/bulk_import.py:387 +msgid "No interface specified; cannot set as out-of-band IP" +msgstr "" +"Nenhuma interface especificada; não pode ser definido como IP out-of-band" + +#: netbox/ipam/forms/bulk_import.py:422 msgid "Auth type" msgstr "Tipo de autenticação" -#: ipam/forms/bulk_import.py:413 +#: netbox/ipam/forms/bulk_import.py:437 msgid "Scope type (app & model)" msgstr "Tipo de escopo (aplicativo e modelo)" -#: ipam/forms/bulk_import.py:440 +#: netbox/ipam/forms/bulk_import.py:464 msgid "Assigned VLAN group" msgstr "Grupo de VLANs associado" -#: ipam/forms/bulk_import.py:471 ipam/forms/bulk_import.py:497 +#: netbox/ipam/forms/bulk_import.py:495 netbox/ipam/forms/bulk_import.py:521 msgid "IP protocol" msgstr "Protocolo IP" -#: ipam/forms/bulk_import.py:485 +#: netbox/ipam/forms/bulk_import.py:509 msgid "Required if not assigned to a VM" msgstr "Obrigatório se não estiver atribuído a uma VM" -#: ipam/forms/bulk_import.py:492 +#: netbox/ipam/forms/bulk_import.py:516 msgid "Required if not assigned to a device" msgstr "Obrigatório se não estiver atribuído a um dispositivo" -#: ipam/forms/bulk_import.py:517 +#: netbox/ipam/forms/bulk_import.py:541 #, python-brace-format msgid "{ip} is not assigned to this device/VM." msgstr "{ip} não está associado a este dispositivo/VM." -#: ipam/forms/filtersets.py:47 ipam/forms/model_forms.py:63 -#: netbox/navigation/menu.py:189 vpn/forms/model_forms.py:410 +#: 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 msgid "Route Targets" msgstr "Route Targets" -#: ipam/forms/filtersets.py:53 ipam/forms/model_forms.py:50 -#: vpn/forms/filtersets.py:224 vpn/forms/model_forms.py:397 +#: 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 msgid "Import targets" msgstr "Import targets" -#: ipam/forms/filtersets.py:58 ipam/forms/model_forms.py:55 -#: vpn/forms/filtersets.py:229 vpn/forms/model_forms.py:402 +#: 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 msgid "Export targets" msgstr "Export targets" -#: ipam/forms/filtersets.py:73 +#: netbox/ipam/forms/filtersets.py:73 msgid "Imported by VRF" msgstr "Importado pela VRF" -#: ipam/forms/filtersets.py:78 +#: netbox/ipam/forms/filtersets.py:78 msgid "Exported by VRF" msgstr "Exportado pela VRF" -#: ipam/forms/filtersets.py:87 ipam/tables/ip.py:89 templates/ipam/rir.html:30 +#: netbox/ipam/forms/filtersets.py:87 netbox/ipam/tables/ip.py:89 +#: netbox/templates/ipam/rir.html:30 msgid "Private" msgstr "Privado" -#: ipam/forms/filtersets.py:105 ipam/forms/filtersets.py:191 -#: ipam/forms/filtersets.py:272 ipam/forms/filtersets.py:326 +#: netbox/ipam/forms/filtersets.py:105 netbox/ipam/forms/filtersets.py:191 +#: netbox/ipam/forms/filtersets.py:272 netbox/ipam/forms/filtersets.py:326 msgid "Address family" msgstr "Família de endereços" -#: ipam/forms/filtersets.py:119 templates/ipam/asnrange.html:25 +#: netbox/ipam/forms/filtersets.py:119 netbox/templates/ipam/asnrange.html:25 msgid "Range" msgstr "Faixa" -#: ipam/forms/filtersets.py:128 +#: netbox/ipam/forms/filtersets.py:128 msgid "Start" msgstr "Início" -#: ipam/forms/filtersets.py:132 +#: netbox/ipam/forms/filtersets.py:132 msgid "End" msgstr "Fim" -#: ipam/forms/filtersets.py:186 +#: netbox/ipam/forms/filtersets.py:186 msgid "Search within" msgstr "Pesquisar dentro" -#: ipam/forms/filtersets.py:207 ipam/forms/filtersets.py:342 +#: netbox/ipam/forms/filtersets.py:207 netbox/ipam/forms/filtersets.py:342 msgid "Present in VRF" msgstr "Presente em VRF" -#: ipam/forms/filtersets.py:311 +#: netbox/ipam/forms/filtersets.py:311 msgid "Device/VM" msgstr "Dispositivo/VM" -#: ipam/forms/filtersets.py:321 +#: netbox/ipam/forms/filtersets.py:321 msgid "Parent Prefix" msgstr "Prefixo Pai" -#: ipam/forms/filtersets.py:347 +#: netbox/ipam/forms/filtersets.py:347 msgid "Assigned Device" msgstr "Dispositivo Associado" -#: ipam/forms/filtersets.py:352 +#: netbox/ipam/forms/filtersets.py:352 msgid "Assigned VM" msgstr "VM Associada" -#: ipam/forms/filtersets.py:366 +#: netbox/ipam/forms/filtersets.py:366 msgid "Assigned to an interface" msgstr "Associado a uma interface" -#: ipam/forms/filtersets.py:373 templates/ipam/ipaddress.html:51 +#: netbox/ipam/forms/filtersets.py:373 netbox/templates/ipam/ipaddress.html:51 msgid "DNS Name" msgstr "Nome DNS" -#: ipam/forms/filtersets.py:416 ipam/models/vlans.py:235 ipam/tables/ip.py:176 -#: ipam/tables/vlans.py:82 ipam/views.py:971 netbox/navigation/menu.py:193 -#: netbox/navigation/menu.py:195 +#: 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 msgid "VLANs" msgstr "VLANs" -#: ipam/forms/filtersets.py:457 +#: netbox/ipam/forms/filtersets.py:457 msgid "Contains VLAN ID" msgstr "Contém ID de VLAN" -#: ipam/forms/filtersets.py:513 ipam/models/vlans.py:176 -#: templates/ipam/vlan.html:31 +#: netbox/ipam/forms/filtersets.py:513 netbox/ipam/models/vlans.py:192 +#: netbox/templates/ipam/vlan.html:31 msgid "VLAN ID" msgstr "ID da VLAN" -#: ipam/forms/filtersets.py:556 ipam/forms/model_forms.py:320 -#: ipam/forms/model_forms.py:713 ipam/forms/model_forms.py:739 -#: ipam/tables/vlans.py:195 templates/virtualization/virtualdisk.html:21 -#: templates/virtualization/virtualmachine.html:12 -#: templates/virtualization/vminterface.html:21 -#: templates/vpn/tunneltermination.html:25 -#: virtualization/forms/filtersets.py:197 -#: virtualization/forms/filtersets.py:242 -#: virtualization/forms/model_forms.py:220 -#: virtualization/tables/virtualmachines.py:135 -#: virtualization/tables/virtualmachines.py:190 vpn/choices.py:45 -#: vpn/forms/filtersets.py:293 vpn/forms/model_forms.py:160 -#: vpn/forms/model_forms.py:171 vpn/forms/model_forms.py:273 -#: vpn/forms/model_forms.py:454 +#: netbox/ipam/forms/filtersets.py: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" -#: ipam/forms/model_forms.py:80 templates/ipam/routetarget.html:10 +#: netbox/ipam/forms/model_forms.py:80 +#: netbox/templates/ipam/routetarget.html:10 msgid "Route Target" msgstr "Route Target" -#: ipam/forms/model_forms.py:114 ipam/tables/ip.py:117 -#: templates/ipam/aggregate.html:11 templates/ipam/prefix.html:38 +#: netbox/ipam/forms/model_forms.py:114 netbox/ipam/tables/ip.py:117 +#: netbox/templates/ipam/aggregate.html:11 +#: netbox/templates/ipam/prefix.html:38 msgid "Aggregate" msgstr "Agregado" -#: ipam/forms/model_forms.py:135 templates/ipam/asnrange.html:12 +#: netbox/ipam/forms/model_forms.py:135 netbox/templates/ipam/asnrange.html:12 msgid "ASN Range" msgstr "Intervalo de ASN" -#: ipam/forms/model_forms.py:231 +#: netbox/ipam/forms/model_forms.py:231 msgid "Site/VLAN Assignment" msgstr "Atribuição de Site/VLAN" -#: ipam/forms/model_forms.py:259 templates/ipam/iprange.html:10 +#: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10 msgid "IP Range" msgstr "Faixa de IP" -#: ipam/forms/model_forms.py:295 ipam/forms/model_forms.py:321 -#: ipam/forms/model_forms.py:473 templates/ipam/fhrpgroup.html:19 +#: 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 msgid "FHRP Group" msgstr "Grupo FHRP" -#: ipam/forms/model_forms.py:310 +#: netbox/ipam/forms/model_forms.py:310 msgid "Make this the primary IP for the device/VM" msgstr "Torne este o IP primário do dispositivo/VM" -#: ipam/forms/model_forms.py:325 +#: netbox/ipam/forms/model_forms.py:314 +msgid "Make this the out-of-band IP for the device" +msgstr "Definir este como endereço IP out-of-band para o dispositivo" + +#: netbox/ipam/forms/model_forms.py:329 msgid "NAT IP (Inside)" msgstr "IP NAT (interno)" -#: ipam/forms/model_forms.py:384 +#: netbox/ipam/forms/model_forms.py:391 msgid "An IP address can only be assigned to a single object." msgstr "Um endereço IP só pode ser atribuído a um único objeto." -#: ipam/forms/model_forms.py:390 ipam/models/ip.py:897 -msgid "" -"Cannot reassign IP address while it is designated as the primary IP for the " -"parent object" +#: netbox/ipam/forms/model_forms.py:398 +msgid "Cannot reassign primary IP address for the parent device/VM" msgstr "" -"Não é possível reatribuir o endereço IP enquanto ele estiver designado como " -"o IP primário do objeto pai" +"Não é possível reatribuir o endereço primário para o dispositivo/VM pai" -#: ipam/forms/model_forms.py:400 +#: netbox/ipam/forms/model_forms.py:402 +msgid "Cannot reassign out-of-Band IP address for the parent device" +msgstr "" +"Não é possível reatribuir o endereço IP out-of-band para o dispositivo pai" + +#: netbox/ipam/forms/model_forms.py:412 msgid "" "Only IP addresses assigned to an interface can be designated as primary IPs." msgstr "" "Somente endereços IP associados a uma interface podem ser designados como " "IPs primários." -#: ipam/forms/model_forms.py:475 +#: netbox/ipam/forms/model_forms.py:420 +msgid "" +"Only IP addresses assigned to a device interface can be designated as the " +"out-of-band IP for a device." +msgstr "" +"Somente endereços IP atribuídos para uma interface podem ser designados como" +" IP out-of-band para o dispositivo." + +#: netbox/ipam/forms/model_forms.py:508 msgid "Virtual IP Address" msgstr "Endereço IP Virtual" -#: ipam/forms/model_forms.py:560 +#: netbox/ipam/forms/model_forms.py:593 msgid "Assignment already exists" msgstr "A atribuição já existe" -#: ipam/forms/model_forms.py:569 templates/ipam/vlangroup.html:42 +#: netbox/ipam/forms/model_forms.py:602 +#: netbox/templates/ipam/vlangroup.html:42 msgid "VLAN IDs" msgstr "IDs de VLAN" -#: ipam/forms/model_forms.py:587 +#: netbox/ipam/forms/model_forms.py:620 msgid "Child VLANs" msgstr "VLANs filhas" -#: ipam/forms/model_forms.py:664 ipam/forms/model_forms.py:696 +#: netbox/ipam/forms/model_forms.py:697 netbox/ipam/forms/model_forms.py:729 msgid "" "Comma-separated list of one or more port numbers. A range may be specified " "using a hyphen." @@ -9297,132 +9965,133 @@ msgstr "" "Lista separada por vírgula de um ou mais números de portas. Um intervalo " "pode ser especificado usando hífen." -#: ipam/forms/model_forms.py:669 templates/ipam/servicetemplate.html:12 +#: netbox/ipam/forms/model_forms.py:702 +#: netbox/templates/ipam/servicetemplate.html:12 msgid "Service Template" msgstr "Modelo de Serviço" -#: ipam/forms/model_forms.py:716 +#: netbox/ipam/forms/model_forms.py:749 msgid "Port(s)" msgstr "Porta(s)" -#: ipam/forms/model_forms.py:717 ipam/forms/model_forms.py:745 -#: templates/ipam/service.html:21 +#: netbox/ipam/forms/model_forms.py:750 netbox/ipam/forms/model_forms.py:778 +#: netbox/templates/ipam/service.html:21 msgid "Service" msgstr "Serviço" -#: ipam/forms/model_forms.py:730 +#: netbox/ipam/forms/model_forms.py:763 msgid "Service template" msgstr "Modelo de serviço" -#: ipam/forms/model_forms.py:742 +#: netbox/ipam/forms/model_forms.py:775 msgid "From Template" msgstr "Do Modelo" -#: ipam/forms/model_forms.py:743 +#: netbox/ipam/forms/model_forms.py:776 msgid "Custom" msgstr "Personalizado" -#: ipam/forms/model_forms.py:773 +#: netbox/ipam/forms/model_forms.py:806 msgid "" "Must specify name, protocol, and port(s) if not using a service template." msgstr "" "Deve especificar nome, protocolo e porta(s) se não estiver usando um modelo " "de serviço." -#: ipam/models/asns.py:34 +#: netbox/ipam/models/asns.py:34 msgid "start" msgstr "iniciar" -#: ipam/models/asns.py:51 +#: netbox/ipam/models/asns.py:51 msgid "ASN range" msgstr "intervalo de ASN" -#: ipam/models/asns.py:52 +#: netbox/ipam/models/asns.py:52 msgid "ASN ranges" msgstr "Intervalos de ASNs" -#: ipam/models/asns.py:72 +#: netbox/ipam/models/asns.py:72 #, python-brace-format msgid "Starting ASN ({start}) must be lower than ending ASN ({end})." msgstr "ASN inicial ({start}) deve ser menor do que o ASN final ({end})." -#: ipam/models/asns.py:104 +#: netbox/ipam/models/asns.py:104 msgid "Regional Internet Registry responsible for this AS number space" msgstr "Regional Internet Registry responsável por este espaço numérico de AS" -#: ipam/models/asns.py:109 +#: netbox/ipam/models/asns.py:109 msgid "16- or 32-bit autonomous system number" msgstr "Número de 16 ou 32 bits do sistema autônomo" -#: ipam/models/fhrp.py:22 +#: netbox/ipam/models/fhrp.py:22 msgid "group ID" msgstr "ID do grupo" -#: ipam/models/fhrp.py:30 ipam/models/services.py:22 +#: netbox/ipam/models/fhrp.py:30 netbox/ipam/models/services.py:22 msgid "protocol" msgstr "protocolo" -#: ipam/models/fhrp.py:38 wireless/models.py:28 +#: netbox/ipam/models/fhrp.py:38 netbox/wireless/models.py:28 msgid "authentication type" msgstr "tipo de autenticação" -#: ipam/models/fhrp.py:43 +#: netbox/ipam/models/fhrp.py:43 msgid "authentication key" msgstr "chave de autenticação" -#: ipam/models/fhrp.py:56 +#: netbox/ipam/models/fhrp.py:56 msgid "FHRP group" msgstr "Grupo FHRP" -#: ipam/models/fhrp.py:57 +#: netbox/ipam/models/fhrp.py:57 msgid "FHRP groups" msgstr "Grupos FHRP" -#: ipam/models/fhrp.py:113 +#: netbox/ipam/models/fhrp.py:113 msgid "FHRP group assignment" msgstr "Associação a um grupo de FHRP" -#: ipam/models/fhrp.py:114 +#: netbox/ipam/models/fhrp.py:114 msgid "FHRP group assignments" msgstr "Associações a grupos de FHRPs" -#: ipam/models/ip.py:65 +#: netbox/ipam/models/ip.py:65 msgid "private" msgstr "privado" -#: ipam/models/ip.py:66 +#: netbox/ipam/models/ip.py:66 msgid "IP space managed by this RIR is considered private" msgstr "O espaço IP gerenciado por este RIR é considerado privado" -#: ipam/models/ip.py:72 netbox/navigation/menu.py:182 +#: netbox/ipam/models/ip.py:72 netbox/netbox/navigation/menu.py:182 msgid "RIRs" msgstr "RIRs" -#: ipam/models/ip.py:84 +#: netbox/ipam/models/ip.py:84 msgid "IPv4 or IPv6 network" msgstr "Rede IPv4 ou IPv6" -#: ipam/models/ip.py:91 +#: netbox/ipam/models/ip.py:91 msgid "Regional Internet Registry responsible for this IP space" msgstr "Regional Internet Registry responsável por este espaço de IP" -#: ipam/models/ip.py:101 +#: netbox/ipam/models/ip.py:101 msgid "date added" msgstr "data adicionada" -#: ipam/models/ip.py:115 +#: netbox/ipam/models/ip.py:115 msgid "aggregate" msgstr "agregado" -#: ipam/models/ip.py:116 +#: netbox/ipam/models/ip.py:116 msgid "aggregates" msgstr "agregados" -#: ipam/models/ip.py:132 +#: netbox/ipam/models/ip.py:132 msgid "Cannot create aggregate with /0 mask." msgstr "Não é possível criar agregação com máscara /0." -#: ipam/models/ip.py:144 +#: netbox/ipam/models/ip.py:144 #, python-brace-format msgid "" "Aggregates cannot overlap. {prefix} is already covered by an existing " @@ -9431,7 +10100,7 @@ msgstr "" "Os agregados não podem se sobrepor. {prefix} já está coberto por um agregado" " existente ({aggregate})." -#: ipam/models/ip.py:158 +#: netbox/ipam/models/ip.py:158 #, python-brace-format msgid "" "Prefixes cannot overlap aggregates. {prefix} covers an existing aggregate " @@ -9440,258 +10109,278 @@ msgstr "" "Os prefixos não podem se sobrepor aos agregados. {prefix} cobre um agregado " "existente ({aggregate})." -#: ipam/models/ip.py:200 ipam/models/ip.py:737 vpn/models/tunnels.py:114 +#: netbox/ipam/models/ip.py:200 netbox/ipam/models/ip.py:737 +#: netbox/vpn/models/tunnels.py:114 msgid "role" msgstr "função" -#: ipam/models/ip.py:201 +#: netbox/ipam/models/ip.py:201 msgid "roles" msgstr "funções" -#: ipam/models/ip.py:217 ipam/models/ip.py:293 +#: netbox/ipam/models/ip.py:217 netbox/ipam/models/ip.py:293 msgid "prefix" msgstr "prefixo" -#: ipam/models/ip.py:218 +#: netbox/ipam/models/ip.py:218 msgid "IPv4 or IPv6 network with mask" msgstr "Rede IPv4 ou IPv6 com máscara" -#: ipam/models/ip.py:254 +#: netbox/ipam/models/ip.py:254 msgid "Operational status of this prefix" msgstr "Status operacional deste prefixo" -#: ipam/models/ip.py:262 +#: netbox/ipam/models/ip.py:262 msgid "The primary function of this prefix" msgstr "A função primária deste prefixo" -#: ipam/models/ip.py:265 +#: netbox/ipam/models/ip.py:265 msgid "is a pool" msgstr "é um pool" -#: ipam/models/ip.py:267 +#: netbox/ipam/models/ip.py:267 msgid "All IP addresses within this prefix are considered usable" msgstr "" "Todos os endereços IP dentro deste prefixo são considerados utilizáveis" -#: ipam/models/ip.py:270 ipam/models/ip.py:537 +#: netbox/ipam/models/ip.py:270 netbox/ipam/models/ip.py:537 msgid "mark utilized" msgstr "marcar utilizado" -#: ipam/models/ip.py:294 +#: netbox/ipam/models/ip.py:294 msgid "prefixes" msgstr "prefixos" -#: ipam/models/ip.py:317 +#: netbox/ipam/models/ip.py:317 msgid "Cannot create prefix with /0 mask." msgstr "Não é possível criar prefixo com a máscara /0." -#: ipam/models/ip.py:324 ipam/models/ip.py:874 +#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:874 #, python-brace-format msgid "VRF {vrf}" msgstr "VRF {vrf}" -#: ipam/models/ip.py:324 ipam/models/ip.py:874 +#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:874 msgid "global table" msgstr "tabela global" -#: ipam/models/ip.py:326 +#: netbox/ipam/models/ip.py:326 #, python-brace-format msgid "Duplicate prefix found in {table}: {prefix}" msgstr "Prefixo duplicado encontrado em {table}: {prefix}" -#: ipam/models/ip.py:495 +#: netbox/ipam/models/ip.py:495 msgid "start address" msgstr "endereço inicial" -#: ipam/models/ip.py:496 ipam/models/ip.py:500 ipam/models/ip.py:712 +#: netbox/ipam/models/ip.py:496 netbox/ipam/models/ip.py:500 +#: netbox/ipam/models/ip.py:712 msgid "IPv4 or IPv6 address (with mask)" msgstr "Endereço IPv4 ou IPv6 (com máscara)" -#: ipam/models/ip.py:499 +#: netbox/ipam/models/ip.py:499 msgid "end address" msgstr "endereço final" -#: ipam/models/ip.py:526 +#: netbox/ipam/models/ip.py:526 msgid "Operational status of this range" msgstr "Status operacional desta faixa" -#: ipam/models/ip.py:534 +#: netbox/ipam/models/ip.py:534 msgid "The primary function of this range" msgstr "A função principal desta faixa" -#: ipam/models/ip.py:548 +#: netbox/ipam/models/ip.py:548 msgid "IP range" msgstr "Faixa de IP" -#: ipam/models/ip.py:549 +#: netbox/ipam/models/ip.py:549 msgid "IP ranges" msgstr "Faixas de IP" -#: ipam/models/ip.py:565 +#: netbox/ipam/models/ip.py:565 msgid "Starting and ending IP address versions must match" msgstr "Endereços IP inicial e final devem ter a mesma versão" -#: ipam/models/ip.py:571 +#: netbox/ipam/models/ip.py:571 msgid "Starting and ending IP address masks must match" msgstr "Máscaras de endereço IP inicial e final precisam ser iguais" -#: ipam/models/ip.py:578 +#: netbox/ipam/models/ip.py:578 #, python-brace-format msgid "" "Ending address must be greater than the starting address ({start_address})" msgstr "" "O endereço final deve ser maior que o endereço inicial ({start_address})" -#: ipam/models/ip.py:590 +#: netbox/ipam/models/ip.py:590 #, python-brace-format msgid "Defined addresses overlap with range {overlapping_range} in VRF {vrf}" msgstr "" "Endereços definidos se sobrepõem com a faixa {overlapping_range} em VRF " "{vrf}" -#: ipam/models/ip.py:599 +#: netbox/ipam/models/ip.py:599 #, python-brace-format msgid "Defined range exceeds maximum supported size ({max_size})" msgstr "Faixa definida excede o tamanho máximo suportado ({max_size})" -#: ipam/models/ip.py:711 tenancy/models/contacts.py:82 +#: netbox/ipam/models/ip.py:711 netbox/tenancy/models/contacts.py:82 msgid "address" msgstr "endereço" -#: ipam/models/ip.py:734 +#: netbox/ipam/models/ip.py:734 msgid "The operational status of this IP" msgstr "O status operacional deste IP" -#: ipam/models/ip.py:741 +#: netbox/ipam/models/ip.py:741 msgid "The functional role of this IP" msgstr "O papel funcional deste IP" -#: ipam/models/ip.py:765 templates/ipam/ipaddress.html:72 +#: netbox/ipam/models/ip.py:765 netbox/templates/ipam/ipaddress.html:72 msgid "NAT (inside)" msgstr "NAT (interno)" -#: ipam/models/ip.py:766 +#: netbox/ipam/models/ip.py:766 msgid "The IP for which this address is the \"outside\" IP" msgstr "O IP para o qual este endereço é o IP “externo”" -#: ipam/models/ip.py:773 +#: netbox/ipam/models/ip.py:773 msgid "Hostname or FQDN (not case-sensitive)" msgstr "Hostname ou FQDN (não diferencia maiúsculas de minúsculas)" -#: ipam/models/ip.py:789 ipam/models/services.py:94 +#: netbox/ipam/models/ip.py:789 netbox/ipam/models/services.py:94 msgid "IP addresses" msgstr "Endereços IP" -#: ipam/models/ip.py:845 +#: netbox/ipam/models/ip.py:845 msgid "Cannot create IP address with /0 mask." msgstr "Não é possível criar endereço IP com máscara /0." -#: ipam/models/ip.py:851 +#: netbox/ipam/models/ip.py:851 #, python-brace-format msgid "{ip} is a network ID, which may not be assigned to an interface." msgstr "{ip} é um ID de rede, que não pode ser atribuído a uma interface." -#: ipam/models/ip.py:862 +#: netbox/ipam/models/ip.py:862 #, python-brace-format msgid "" "{ip} is a broadcast address, which may not be assigned to an interface." msgstr "" "{ip} é um endereço de broadcast, que não pode ser atribuído a uma interface." -#: ipam/models/ip.py:876 +#: netbox/ipam/models/ip.py:876 #, python-brace-format msgid "Duplicate IP address found in {table}: {ipaddress}" msgstr "Endereço IP duplicado encontrado em {table}: {ipaddress}" -#: ipam/models/ip.py:903 +#: netbox/ipam/models/ip.py:897 +msgid "" +"Cannot reassign IP address while it is designated as the primary IP for the " +"parent object" +msgstr "" +"Não é possível reatribuir o endereço IP enquanto ele estiver designado como " +"o IP primário do objeto pai" + +#: netbox/ipam/models/ip.py:903 msgid "Only IPv6 addresses can be assigned SLAAC status" msgstr "Somente endereços IPv6 podem receber o status SLAAC" -#: ipam/models/services.py:33 +#: netbox/ipam/models/services.py:33 msgid "port numbers" msgstr "números de porta" -#: ipam/models/services.py:59 +#: netbox/ipam/models/services.py:59 msgid "service template" msgstr "modelo de serviço" -#: ipam/models/services.py:60 +#: netbox/ipam/models/services.py:60 msgid "service templates" msgstr "modelos de serviços" -#: ipam/models/services.py:95 +#: netbox/ipam/models/services.py:95 msgid "The specific IP addresses (if any) to which this service is bound" msgstr "" "Os endereços IP específicos (se houver) aos quais este serviço está " "vinculado" -#: ipam/models/services.py:102 +#: netbox/ipam/models/services.py:102 msgid "service" msgstr "serviço" -#: ipam/models/services.py:103 +#: netbox/ipam/models/services.py:103 msgid "services" msgstr "serviços" -#: ipam/models/services.py:117 +#: netbox/ipam/models/services.py:117 msgid "" "A service cannot be associated with both a device and a virtual machine." msgstr "" "Um serviço não pode ser associado a um dispositivo e a uma máquina virtual " "ao mesmo tempo." -#: ipam/models/services.py:119 +#: netbox/ipam/models/services.py:119 msgid "" "A service must be associated with either a device or a virtual machine." msgstr "" "Um serviço deve estar associado a um dispositivo ou a uma máquina virtual." -#: ipam/models/vlans.py:85 +#: netbox/ipam/models/vlans.py:85 msgid "VLAN groups" msgstr "Grupos de VLANs" -#: ipam/models/vlans.py:95 +#: netbox/ipam/models/vlans.py:95 msgid "Cannot set scope_type without scope_id." msgstr "Não é possível definir scope_type sem scope_id." -#: ipam/models/vlans.py:97 +#: netbox/ipam/models/vlans.py:97 msgid "Cannot set scope_id without scope_type." msgstr "Não é possível definir scope_id sem scope_type." -#: ipam/models/vlans.py:101 +#: netbox/ipam/models/vlans.py:105 +#, python-brace-format +msgid "Starting VLAN ID in range ({value}) cannot be less than {minimum}" +msgstr "VLAN ID inicial no intervalo {value} não pode ser menor que {minimum}" + +#: netbox/ipam/models/vlans.py:111 +#, python-brace-format +msgid "Ending VLAN ID in range ({value}) cannot exceed {maximum}" +msgstr "VLAN ID final no intervalo {value} não pode ser maior que {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 "" +"VLAN ID final do intervalo deve ser maior ou igual à VLAN ID inicial " +"({range})" + +#: netbox/ipam/models/vlans.py:124 msgid "Ranges cannot overlap." msgstr "Os intervalos não podem se sobrepor." -#: ipam/models/vlans.py:106 -#, python-brace-format -msgid "" -"Maximum child VID must be greater than or equal to minimum child VID " -"({value})" -msgstr "" -"A VLAN ID máxima do filho deve ser maior ou igual a VLAN ID mínima do filho." -" ({value})" - -#: ipam/models/vlans.py:165 +#: netbox/ipam/models/vlans.py:181 msgid "The specific site to which this VLAN is assigned (if any)" msgstr "O site específico ao qual esta VLAN está associada (se houver)" -#: ipam/models/vlans.py:173 +#: netbox/ipam/models/vlans.py:189 msgid "VLAN group (optional)" msgstr "Grupo de VLANs (opcional)" -#: ipam/models/vlans.py:181 +#: netbox/ipam/models/vlans.py:197 msgid "Numeric VLAN ID (1-4094)" msgstr "ID numérica da VLAN (1-4094)" -#: ipam/models/vlans.py:199 +#: netbox/ipam/models/vlans.py:215 msgid "Operational status of this VLAN" msgstr "Status operacional desta VLAN" -#: ipam/models/vlans.py:207 +#: netbox/ipam/models/vlans.py:223 msgid "The primary function of this VLAN" msgstr "Função principal desta VLAN" -#: ipam/models/vlans.py:250 +#: netbox/ipam/models/vlans.py:266 #, python-brace-format msgid "" "VLAN is assigned to group {group} (scope: {scope}); cannot also assign to " @@ -9700,164 +10389,166 @@ msgstr "" "A VLAN está atribuída ao grupo {group} (escopo: {scope}); não pode ser " "associada ao site {site}." -#: ipam/models/vlans.py:259 +#: netbox/ipam/models/vlans.py:275 #, python-brace-format msgid "VID must be in ranges {ranges} for VLANs in group {group}" msgstr "VLAN ID devem estar nas faixas {ranges} para VLANs no grupo {group}" -#: ipam/models/vrfs.py:30 +#: netbox/ipam/models/vrfs.py:30 msgid "route distinguisher" msgstr "route distinguisher" -#: ipam/models/vrfs.py:31 +#: netbox/ipam/models/vrfs.py:31 msgid "Unique route distinguisher (as defined in RFC 4364)" msgstr "Route Distinguisher único (conforme definido na RFC 4364)" -#: ipam/models/vrfs.py:42 +#: netbox/ipam/models/vrfs.py:42 msgid "enforce unique space" msgstr "imponha um espaço exclusivo" -#: ipam/models/vrfs.py:43 +#: netbox/ipam/models/vrfs.py:43 msgid "Prevent duplicate prefixes/IP addresses within this VRF" msgstr "Prevenir prefixos/endereços IP duplicados dentro deste VRF" -#: ipam/models/vrfs.py:63 netbox/navigation/menu.py:186 -#: netbox/navigation/menu.py:188 +#: netbox/ipam/models/vrfs.py:63 netbox/netbox/navigation/menu.py:186 +#: netbox/netbox/navigation/menu.py:188 msgid "VRFs" msgstr "VRFs" -#: ipam/models/vrfs.py:82 +#: netbox/ipam/models/vrfs.py:82 msgid "Route target value (formatted in accordance with RFC 4360)" msgstr "Valor do Route Target (formatado de acordo com a RFC 4360)" -#: ipam/models/vrfs.py:94 +#: netbox/ipam/models/vrfs.py:94 msgid "route target" msgstr "route target" -#: ipam/models/vrfs.py:95 +#: netbox/ipam/models/vrfs.py:95 msgid "route targets" msgstr "route targets" -#: ipam/tables/asn.py:52 +#: netbox/ipam/tables/asn.py:52 msgid "ASDOT" msgstr "ASDOT" -#: ipam/tables/asn.py:57 +#: netbox/ipam/tables/asn.py:57 msgid "Site Count" msgstr "Total de Sites" -#: ipam/tables/asn.py:62 +#: netbox/ipam/tables/asn.py:62 msgid "Provider Count" msgstr "Total de Provedores" -#: ipam/tables/ip.py:95 netbox/navigation/menu.py:179 -#: netbox/navigation/menu.py:181 +#: netbox/ipam/tables/ip.py:95 netbox/netbox/navigation/menu.py:179 +#: netbox/netbox/navigation/menu.py:181 msgid "Aggregates" msgstr "Agregados" -#: ipam/tables/ip.py:125 +#: netbox/ipam/tables/ip.py:125 msgid "Added" msgstr "Adicionado" -#: ipam/tables/ip.py:128 ipam/tables/ip.py:166 ipam/tables/vlans.py:142 -#: ipam/views.py:346 netbox/navigation/menu.py:165 -#: netbox/navigation/menu.py:167 templates/ipam/vlan.html:84 +#: 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 msgid "Prefixes" msgstr "Prefixos" -#: ipam/tables/ip.py:131 ipam/tables/ip.py:270 ipam/tables/ip.py:324 -#: ipam/tables/vlans.py:86 templates/dcim/device.html:260 -#: templates/ipam/aggregate.html:24 templates/ipam/iprange.html:29 -#: templates/ipam/prefix.html:106 +#: 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/templates/dcim/device.html:260 +#: netbox/templates/ipam/aggregate.html:24 +#: netbox/templates/ipam/iprange.html:29 netbox/templates/ipam/prefix.html:106 msgid "Utilization" msgstr "Utilização" -#: ipam/tables/ip.py:171 netbox/navigation/menu.py:161 +#: netbox/ipam/tables/ip.py:171 netbox/netbox/navigation/menu.py:161 msgid "IP Ranges" msgstr "Faixas de IP" -#: ipam/tables/ip.py:221 +#: netbox/ipam/tables/ip.py:221 msgid "Prefix (Flat)" msgstr "Prefixo (Plano)" -#: ipam/tables/ip.py:225 +#: netbox/ipam/tables/ip.py:225 msgid "Depth" msgstr "Profundidade" -#: ipam/tables/ip.py:262 +#: netbox/ipam/tables/ip.py:262 msgid "Pool" msgstr "Pool" -#: ipam/tables/ip.py:266 ipam/tables/ip.py:320 +#: netbox/ipam/tables/ip.py:266 netbox/ipam/tables/ip.py:320 msgid "Marked Utilized" msgstr "Marcado como Utilizado" -#: ipam/tables/ip.py:304 +#: netbox/ipam/tables/ip.py:304 msgid "Start address" msgstr "Endereço inicial" -#: ipam/tables/ip.py:383 +#: netbox/ipam/tables/ip.py:383 msgid "NAT (Inside)" msgstr "NAT (interno)" -#: ipam/tables/ip.py:388 +#: netbox/ipam/tables/ip.py:388 msgid "NAT (Outside)" msgstr "NAT (Externo)" -#: ipam/tables/ip.py:393 +#: netbox/ipam/tables/ip.py:393 msgid "Assigned" msgstr "Associado" -#: ipam/tables/ip.py:429 templates/vpn/l2vpntermination.html:16 -#: vpn/forms/filtersets.py:240 +#: netbox/ipam/tables/ip.py:429 netbox/templates/vpn/l2vpntermination.html:16 +#: netbox/vpn/forms/filtersets.py:240 msgid "Assigned Object" msgstr "Objeto Associado" -#: ipam/tables/vlans.py:68 +#: netbox/ipam/tables/vlans.py:68 msgid "Scope Type" msgstr "Tipo de Escopo" -#: ipam/tables/vlans.py:76 +#: netbox/ipam/tables/vlans.py:76 msgid "VID Ranges" msgstr "Faixas de ID de VLAN" -#: ipam/tables/vlans.py:111 ipam/tables/vlans.py:214 -#: templates/dcim/inc/interface_vlans_table.html:4 +#: netbox/ipam/tables/vlans.py:111 netbox/ipam/tables/vlans.py:214 +#: netbox/templates/dcim/inc/interface_vlans_table.html:4 msgid "VID" msgstr "VLAN ID" -#: ipam/tables/vrfs.py:30 +#: netbox/ipam/tables/vrfs.py:30 msgid "RD" msgstr "Route Distinguiser" -#: ipam/tables/vrfs.py:33 +#: netbox/ipam/tables/vrfs.py:33 msgid "Unique" msgstr "Único" -#: ipam/tables/vrfs.py:37 vpn/tables/l2vpn.py:27 +#: netbox/ipam/tables/vrfs.py:37 netbox/vpn/tables/l2vpn.py:27 msgid "Import Targets" msgstr "Import Targets" -#: ipam/tables/vrfs.py:42 vpn/tables/l2vpn.py:32 +#: netbox/ipam/tables/vrfs.py:42 netbox/vpn/tables/l2vpn.py:32 msgid "Export Targets" msgstr "Export Targets" -#: ipam/validators.py:9 +#: netbox/ipam/validators.py:9 #, python-brace-format msgid "{prefix} is not a valid prefix. Did you mean {suggested}?" msgstr "{prefix} não é um prefixo válido. Você quis dizer {suggested}?" -#: ipam/validators.py:16 +#: netbox/ipam/validators.py:16 #, python-format msgid "The prefix length must be less than or equal to %(limit_value)s." msgstr "O comprimento do prefixo deve ser menor ou igual a %(limit_value)s." -#: ipam/validators.py:24 +#: netbox/ipam/validators.py:24 #, python-format msgid "The prefix length must be greater than or equal to %(limit_value)s." msgstr "O comprimento do prefixo deve ser maior ou igual a %(limit_value)s." -#: ipam/validators.py:33 +#: netbox/ipam/validators.py:33 msgid "" "Only alphanumeric characters, asterisks, hyphens, periods, and underscores " "are allowed in DNS names" @@ -9865,31 +10556,31 @@ msgstr "" "Somente caracteres alfanuméricos, asteriscos, hífens, pontos e sublinhados " "são permitidos em nomes DNS" -#: ipam/views.py:533 +#: netbox/ipam/views.py:533 msgid "Child Prefixes" msgstr "Prefixos Filhos" -#: ipam/views.py:569 +#: netbox/ipam/views.py:569 msgid "Child Ranges" msgstr "Intervalos Filhos" -#: ipam/views.py:898 +#: netbox/ipam/views.py:898 msgid "Related IPs" msgstr "IPs relacionados" -#: ipam/views.py:1127 +#: netbox/ipam/views.py:1127 msgid "Device Interfaces" msgstr "Interfaces de dispositivos" -#: ipam/views.py:1145 +#: netbox/ipam/views.py:1145 msgid "VM Interfaces" msgstr "Interfaces de Máquina Virtual" -#: netbox/api/fields.py:65 +#: netbox/netbox/api/fields.py:65 msgid "This field may not be blank." msgstr "Este campo pode não estar em branco." -#: netbox/api/fields.py:70 +#: netbox/netbox/api/fields.py:70 msgid "" "Value must be passed directly (e.g. \"foo\": 123); do not use a dictionary " "or list." @@ -9897,329 +10588,342 @@ msgstr "" "O valor deve ser passado diretamente (por exemplo, “foo”: 123); não use um " "dicionário ou uma lista." -#: netbox/api/fields.py:91 +#: netbox/netbox/api/fields.py:91 #, python-brace-format msgid "{value} is not a valid choice." msgstr "{value} não é uma escolha válida." -#: netbox/api/fields.py:104 +#: netbox/netbox/api/fields.py:104 #, python-brace-format msgid "Invalid content type: {content_type}" msgstr "Tipo de conteúdo inválido: {content_type}" -#: netbox/api/fields.py:105 +#: netbox/netbox/api/fields.py:105 msgid "Invalid value. Specify a content type as '.'." msgstr "" "Valor inválido. Especifique um tipo de conteúdo como " "'.'." -#: netbox/api/fields.py:167 +#: netbox/netbox/api/fields.py:167 msgid "Ranges must be specified in the form (lower, upper)." msgstr "Intervalos devem ser especificados no formato (inferior,superior)." -#: netbox/api/fields.py:169 +#: netbox/netbox/api/fields.py:169 msgid "Range boundaries must be defined as integers." msgstr "Fronteiras do intervalo devem ser definidas como inteiros." -#: netbox/api/serializers/fields.py:40 +#: netbox/netbox/api/serializers/fields.py:40 #, python-brace-format msgid "{class_name} must implement get_view_name()" msgstr "{class_name} deve implementar get_view_name()" -#: netbox/authentication/__init__.py:138 +#: netbox/netbox/authentication/__init__.py:138 #, python-brace-format msgid "Invalid permission {permission} for model {model}" msgstr "Permissão {permission} é inválida para o modelo {model}" -#: netbox/choices.py:49 +#: netbox/netbox/choices.py:49 msgid "Dark Red" msgstr "Vermelho Escuro" -#: netbox/choices.py:52 +#: netbox/netbox/choices.py:52 msgid "Rose" msgstr "Rosa" -#: netbox/choices.py:53 +#: netbox/netbox/choices.py:53 msgid "Fuchsia" msgstr "Fúcsia" -#: netbox/choices.py:55 +#: netbox/netbox/choices.py:55 msgid "Dark Purple" msgstr "Roxo Escuro" -#: netbox/choices.py:58 +#: netbox/netbox/choices.py:58 msgid "Light Blue" msgstr "Azul Claro" -#: netbox/choices.py:61 +#: netbox/netbox/choices.py:61 msgid "Aqua" msgstr "Aqua" -#: netbox/choices.py:62 +#: netbox/netbox/choices.py:62 msgid "Dark Green" msgstr "Verde Escuro" -#: netbox/choices.py:64 +#: netbox/netbox/choices.py:64 msgid "Light Green" msgstr "Verde Claro" -#: netbox/choices.py:65 +#: netbox/netbox/choices.py:65 msgid "Lime" msgstr "Verde-Limão" -#: netbox/choices.py:67 +#: netbox/netbox/choices.py:67 msgid "Amber" msgstr "Âmbar" -#: netbox/choices.py:69 +#: netbox/netbox/choices.py:69 msgid "Dark Orange" msgstr "Laranja Escuro" -#: netbox/choices.py:70 +#: netbox/netbox/choices.py:70 msgid "Brown" msgstr "Marrom" -#: netbox/choices.py:71 +#: netbox/netbox/choices.py:71 msgid "Light Grey" msgstr "Cinza Claro" -#: netbox/choices.py:72 +#: netbox/netbox/choices.py:72 msgid "Grey" msgstr "Cinza" -#: netbox/choices.py:73 +#: netbox/netbox/choices.py:73 msgid "Dark Grey" msgstr "Cinza Escuro" -#: netbox/choices.py:128 +#: netbox/netbox/choices.py:128 msgid "Direct" msgstr "Direto" -#: netbox/choices.py:129 +#: netbox/netbox/choices.py:129 msgid "Upload" msgstr "Carregar" -#: netbox/choices.py:141 netbox/choices.py:155 +#: netbox/netbox/choices.py:141 netbox/netbox/choices.py:155 msgid "Auto-detect" msgstr "Detecção automática" -#: netbox/choices.py:156 +#: netbox/netbox/choices.py:156 msgid "Comma" msgstr "Vírgula" -#: netbox/choices.py:157 +#: netbox/netbox/choices.py:157 msgid "Semicolon" msgstr "Ponto e vírgula" -#: netbox/choices.py:158 +#: netbox/netbox/choices.py:158 msgid "Tab" msgstr "Aba" -#: netbox/config/__init__.py:67 +#: netbox/netbox/config/__init__.py:67 #, python-brace-format msgid "Invalid configuration parameter: {item}" msgstr "Parâmetro de configuração inválido: {item}" -#: netbox/config/parameters.py:22 templates/core/inc/config_data.html:62 +#: netbox/netbox/config/parameters.py:22 +#: netbox/templates/core/inc/config_data.html:62 msgid "Login banner" msgstr "Banner de login" -#: netbox/config/parameters.py:24 +#: netbox/netbox/config/parameters.py:24 msgid "Additional content to display on the login page" msgstr "Conteúdo adicional a ser exibido na página de login" -#: netbox/config/parameters.py:33 templates/core/inc/config_data.html:66 +#: netbox/netbox/config/parameters.py:33 +#: netbox/templates/core/inc/config_data.html:66 msgid "Maintenance banner" msgstr "Banner de manutenção" -#: netbox/config/parameters.py:35 +#: netbox/netbox/config/parameters.py:35 msgid "Additional content to display when in maintenance mode" msgstr "Conteúdo adicional a ser exibido no modo de manutenção" -#: netbox/config/parameters.py:44 templates/core/inc/config_data.html:70 +#: netbox/netbox/config/parameters.py:44 +#: netbox/templates/core/inc/config_data.html:70 msgid "Top banner" msgstr "Banner superior" -#: netbox/config/parameters.py:46 +#: netbox/netbox/config/parameters.py:46 msgid "Additional content to display at the top of every page" msgstr "Conteúdo adicional a ser exibido na parte superior de cada página" -#: netbox/config/parameters.py:55 templates/core/inc/config_data.html:74 +#: netbox/netbox/config/parameters.py:55 +#: netbox/templates/core/inc/config_data.html:74 msgid "Bottom banner" msgstr "Banner inferior" -#: netbox/config/parameters.py:57 +#: netbox/netbox/config/parameters.py:57 msgid "Additional content to display at the bottom of every page" msgstr "Conteúdo adicional a ser exibido na parte inferior de cada página" -#: netbox/config/parameters.py:68 +#: netbox/netbox/config/parameters.py:68 msgid "Globally unique IP space" msgstr "Espaço de IP globalmente exclusivo" -#: netbox/config/parameters.py:70 +#: netbox/netbox/config/parameters.py:70 msgid "Enforce unique IP addressing within the global table" msgstr "Imponha endereçamento IP único na tabela global" -#: netbox/config/parameters.py:75 templates/core/inc/config_data.html:44 +#: netbox/netbox/config/parameters.py:75 +#: netbox/templates/core/inc/config_data.html:44 msgid "Prefer IPv4" msgstr "Preferir IPv4" -#: netbox/config/parameters.py:77 +#: netbox/netbox/config/parameters.py:77 msgid "Prefer IPv4 addresses over IPv6" msgstr "Preferir endereços IPv4 em vez de IPv6" -#: netbox/config/parameters.py:84 +#: netbox/netbox/config/parameters.py:84 msgid "Rack unit height" msgstr "Altura do rack" -#: netbox/config/parameters.py:86 +#: netbox/netbox/config/parameters.py:86 msgid "Default unit height for rendered rack elevations" msgstr "Altura padrão para elevações de rack renderizados" -#: netbox/config/parameters.py:91 +#: netbox/netbox/config/parameters.py:91 msgid "Rack unit width" msgstr "Largura do rack" -#: netbox/config/parameters.py:93 +#: netbox/netbox/config/parameters.py:93 msgid "Default unit width for rendered rack elevations" msgstr "Largura padrão para elevações de rack renderizados" -#: netbox/config/parameters.py:100 +#: netbox/netbox/config/parameters.py:100 msgid "Powerfeed voltage" msgstr "Tensão da fonte de alimentação" -#: netbox/config/parameters.py:102 +#: netbox/netbox/config/parameters.py:102 msgid "Default voltage for powerfeeds" msgstr "Tensão padrão para fontes de alimentação" -#: netbox/config/parameters.py:107 +#: netbox/netbox/config/parameters.py:107 msgid "Powerfeed amperage" msgstr "Corrente da fonte de alimentação" -#: netbox/config/parameters.py:109 +#: netbox/netbox/config/parameters.py:109 msgid "Default amperage for powerfeeds" msgstr "Corrente padrão para fontes de alimentação" -#: netbox/config/parameters.py:114 +#: netbox/netbox/config/parameters.py:114 msgid "Powerfeed max utilization" msgstr "Utilização máxima da fonte de alimentação" -#: netbox/config/parameters.py:116 +#: netbox/netbox/config/parameters.py:116 msgid "Default max utilization for powerfeeds" msgstr "Padrão máximo de utilização para fontes alimentação" -#: netbox/config/parameters.py:123 templates/core/inc/config_data.html:53 +#: netbox/netbox/config/parameters.py:123 +#: netbox/templates/core/inc/config_data.html:53 msgid "Allowed URL schemes" msgstr "Esquemas de URL permitidos" -#: netbox/config/parameters.py:128 +#: netbox/netbox/config/parameters.py:128 msgid "Permitted schemes for URLs in user-provided content" msgstr "Esquemas permitidos para URLs em conteúdo fornecido pelo usuário" -#: netbox/config/parameters.py:136 +#: netbox/netbox/config/parameters.py:136 msgid "Default page size" msgstr "Tamanho padrão da página" -#: netbox/config/parameters.py:142 +#: netbox/netbox/config/parameters.py:142 msgid "Maximum page size" msgstr "Tamanho máximo da página" -#: netbox/config/parameters.py:150 templates/core/inc/config_data.html:96 +#: netbox/netbox/config/parameters.py:150 +#: netbox/templates/core/inc/config_data.html:96 msgid "Custom validators" msgstr "Validadores personalizados" -#: netbox/config/parameters.py:152 +#: netbox/netbox/config/parameters.py:152 msgid "Custom validation rules (JSON)" msgstr "Regras de validação personalizadas (JSON)" -#: netbox/config/parameters.py:160 templates/core/inc/config_data.html:104 +#: netbox/netbox/config/parameters.py:160 +#: netbox/templates/core/inc/config_data.html:104 msgid "Protection rules" msgstr "Regras de proteção" -#: netbox/config/parameters.py:162 +#: netbox/netbox/config/parameters.py:162 msgid "Deletion protection rules (JSON)" msgstr "Regras de proteção contra exclusão (JSON)" -#: netbox/config/parameters.py:172 templates/core/inc/config_data.html:117 +#: netbox/netbox/config/parameters.py:172 +#: netbox/templates/core/inc/config_data.html:117 msgid "Default preferences" msgstr "Preferências padrão" -#: netbox/config/parameters.py:174 +#: netbox/netbox/config/parameters.py:174 msgid "Default preferences for new users" msgstr "Preferências padrão para novos usuários" -#: netbox/config/parameters.py:181 templates/core/inc/config_data.html:129 +#: netbox/netbox/config/parameters.py:181 +#: netbox/templates/core/inc/config_data.html:129 msgid "Maintenance mode" msgstr "Modo de manutenção" -#: netbox/config/parameters.py:183 +#: netbox/netbox/config/parameters.py:183 msgid "Enable maintenance mode" msgstr "Ativar o modo de manutenção" -#: netbox/config/parameters.py:188 templates/core/inc/config_data.html:133 +#: netbox/netbox/config/parameters.py:188 +#: netbox/templates/core/inc/config_data.html:133 msgid "GraphQL enabled" msgstr "GraphQL habilitado" -#: netbox/config/parameters.py:190 +#: netbox/netbox/config/parameters.py:190 msgid "Enable the GraphQL API" msgstr "Habilite a API do GraphQL" -#: netbox/config/parameters.py:195 templates/core/inc/config_data.html:137 +#: netbox/netbox/config/parameters.py:195 +#: netbox/templates/core/inc/config_data.html:137 msgid "Changelog retention" msgstr "Retenção do changelog" -#: netbox/config/parameters.py:197 +#: netbox/netbox/config/parameters.py:197 msgid "Days to retain changelog history (set to zero for unlimited)" msgstr "" "Dias para reter o histórico do changelog (definido como zero ilimitado)" -#: netbox/config/parameters.py:202 +#: netbox/netbox/config/parameters.py:202 msgid "Job result retention" msgstr "Retenção dos resultados de tarefas" -#: netbox/config/parameters.py:204 +#: netbox/netbox/config/parameters.py:204 msgid "Days to retain job result history (set to zero for unlimited)" msgstr "" "Dias para reter o histórico de resultados das tarefas (definido como zero " "para ilimitado)" -#: netbox/config/parameters.py:209 templates/core/inc/config_data.html:145 +#: netbox/netbox/config/parameters.py:209 +#: netbox/templates/core/inc/config_data.html:145 msgid "Maps URL" msgstr "URL dos mapas" -#: netbox/config/parameters.py:211 +#: netbox/netbox/config/parameters.py:211 msgid "Base URL for mapping geographic locations" msgstr "URL Base para mapear localizações geográficas" -#: netbox/forms/__init__.py:12 +#: netbox/netbox/forms/__init__.py:12 msgid "Partial match" msgstr "Correspondência parcial" -#: netbox/forms/__init__.py:13 +#: netbox/netbox/forms/__init__.py:13 msgid "Exact match" msgstr "Correspondência exata" -#: netbox/forms/__init__.py:14 +#: netbox/netbox/forms/__init__.py:14 msgid "Starts with" msgstr "Começa com" -#: netbox/forms/__init__.py:15 +#: netbox/netbox/forms/__init__.py:15 msgid "Ends with" msgstr "Termina com" -#: netbox/forms/__init__.py:16 +#: netbox/netbox/forms/__init__.py:16 msgid "Regex" msgstr "Expressão Regular" -#: netbox/forms/__init__.py:34 +#: netbox/netbox/forms/__init__.py:34 msgid "Object type(s)" msgstr "Tipo(s) de objeto" -#: netbox/forms/__init__.py:40 +#: netbox/netbox/forms/__init__.py:40 msgid "Lookup" msgstr "Procurar" -#: netbox/forms/base.py:90 +#: netbox/netbox/forms/base.py:90 msgid "" "Tag slugs separated by commas, encased with double quotes (e.g. " "\"tag1,tag2,tag3\")" @@ -10227,415 +10931,426 @@ msgstr "" "Slugs das etiquetas separadas por vírgulas, entre aspas duplas (por exemplo," " “tag1, tag2, tag3\")" -#: netbox/forms/base.py:120 +#: netbox/netbox/forms/base.py:120 msgid "Add tags" msgstr "Adicionar etiquetas" -#: netbox/forms/base.py:125 +#: netbox/netbox/forms/base.py:125 msgid "Remove tags" msgstr "Remover etiquetas" -#: netbox/forms/mixins.py:38 +#: netbox/netbox/forms/mixins.py:38 #, python-brace-format msgid "{class_name} must specify a model class." msgstr "{class_name} deve especificar um modelo de classe." -#: netbox/models/features.py:280 +#: netbox/netbox/models/features.py:280 #, python-brace-format msgid "Unknown field name '{name}' in custom field data." msgstr "Nome de campo desconhecido '{name}' nos dados do campo personalizado." -#: netbox/models/features.py:286 +#: netbox/netbox/models/features.py:286 #, python-brace-format msgid "Invalid value for custom field '{name}': {error}" msgstr "Valor inválido para o campo personalizado '{name}': {error}" -#: netbox/models/features.py:295 +#: netbox/netbox/models/features.py:295 #, python-brace-format msgid "Custom field '{name}' must have a unique value." msgstr "Campo customizado '{name}' deve ser um valor único." -#: netbox/models/features.py:302 +#: netbox/netbox/models/features.py:302 #, python-brace-format msgid "Missing required custom field '{name}'." msgstr "Campo personalizado obrigatório '{name}' ausente." -#: netbox/models/features.py:462 +#: netbox/netbox/models/features.py:462 msgid "Remote data source" msgstr "Fonte de dados remota" -#: netbox/models/features.py:472 +#: netbox/netbox/models/features.py:472 msgid "data path" msgstr "caminho dos dados" -#: netbox/models/features.py:476 +#: netbox/netbox/models/features.py:476 msgid "Path to remote file (relative to data source root)" msgstr "Caminho para o arquivo remoto (em relação à raiz da fonte de dados)" -#: netbox/models/features.py:479 +#: netbox/netbox/models/features.py:479 msgid "auto sync enabled" msgstr "sincronização automática ativada" -#: netbox/models/features.py:481 +#: netbox/netbox/models/features.py:481 msgid "Enable automatic synchronization of data when the data file is updated" msgstr "" "Habilita a sincronização automática de dados quando o arquivo de dados for " "atualizado" -#: netbox/models/features.py:484 +#: netbox/netbox/models/features.py:484 msgid "date synced" msgstr "data sincronizada" -#: netbox/models/features.py:578 +#: netbox/netbox/models/features.py:578 #, python-brace-format msgid "{class_name} must implement a sync_data() method." msgstr "{class_name} deve implementar um método sync_data ()." -#: netbox/navigation/menu.py:11 +#: netbox/netbox/navigation/menu.py:11 msgid "Organization" msgstr "Organização" -#: netbox/navigation/menu.py:19 +#: netbox/netbox/navigation/menu.py:19 msgid "Site Groups" msgstr "Grupos de Sites" -#: netbox/navigation/menu.py:27 +#: netbox/netbox/navigation/menu.py:27 msgid "Tenant Groups" msgstr "Grupos de Inquilinos" -#: netbox/navigation/menu.py:34 +#: netbox/netbox/navigation/menu.py:34 msgid "Contact Groups" msgstr "Grupos de Contatos" -#: netbox/navigation/menu.py:35 templates/tenancy/contactrole.html:8 +#: netbox/netbox/navigation/menu.py:35 +#: netbox/templates/tenancy/contactrole.html:8 msgid "Contact Roles" msgstr "Funções dos Contatos" -#: netbox/navigation/menu.py:36 +#: netbox/netbox/navigation/menu.py:36 msgid "Contact Assignments" msgstr "Atribuições dos Contatos" -#: netbox/navigation/menu.py:50 +#: netbox/netbox/navigation/menu.py:50 msgid "Rack Roles" -msgstr "Funções de Rack" +msgstr "Funções do Rack" -#: netbox/navigation/menu.py:54 +#: netbox/netbox/navigation/menu.py:54 msgid "Elevations" msgstr "Elevações" -#: netbox/navigation/menu.py:60 netbox/navigation/menu.py:62 +#: netbox/netbox/navigation/menu.py:60 netbox/netbox/navigation/menu.py:62 msgid "Rack Types" msgstr "Tipos de Racks" -#: netbox/navigation/menu.py:76 +#: netbox/netbox/navigation/menu.py:76 msgid "Modules" msgstr "Módulos" -#: netbox/navigation/menu.py:80 templates/dcim/device.html:160 -#: templates/dcim/virtualdevicecontext.html:8 +#: netbox/netbox/navigation/menu.py:80 netbox/templates/dcim/device.html:160 +#: netbox/templates/dcim/virtualdevicecontext.html:8 msgid "Virtual Device Contexts" msgstr "Contextos de Dispositivos Virtuais" -#: netbox/navigation/menu.py:88 +#: netbox/netbox/navigation/menu.py:88 msgid "Manufacturers" msgstr "Fabricantes" -#: netbox/navigation/menu.py:92 +#: netbox/netbox/navigation/menu.py:92 msgid "Device Components" msgstr "Componentes de Dispositivos" -#: netbox/navigation/menu.py:104 templates/dcim/inventoryitemrole.html:8 +#: netbox/netbox/navigation/menu.py:104 +#: netbox/templates/dcim/inventoryitemrole.html:8 msgid "Inventory Item Roles" msgstr "Funções dos Itens de Inventário" -#: netbox/navigation/menu.py:111 netbox/navigation/menu.py:115 +#: netbox/netbox/navigation/menu.py:111 netbox/netbox/navigation/menu.py:115 msgid "Connections" msgstr "Conexões" -#: netbox/navigation/menu.py:117 +#: netbox/netbox/navigation/menu.py:117 msgid "Cables" msgstr "Cabos" -#: netbox/navigation/menu.py:118 +#: netbox/netbox/navigation/menu.py:118 msgid "Wireless Links" msgstr "Links Wireless" -#: netbox/navigation/menu.py:121 +#: netbox/netbox/navigation/menu.py:121 msgid "Interface Connections" msgstr "Conexões de Interface" -#: netbox/navigation/menu.py:126 +#: netbox/netbox/navigation/menu.py:126 msgid "Console Connections" msgstr "Conexões de Console" -#: netbox/navigation/menu.py:131 +#: netbox/netbox/navigation/menu.py:131 msgid "Power Connections" msgstr "Conexões de Alimentação" -#: netbox/navigation/menu.py:147 +#: netbox/netbox/navigation/menu.py:147 msgid "Wireless LAN Groups" msgstr "Grupos de Redes Wireless" -#: netbox/navigation/menu.py:168 +#: netbox/netbox/navigation/menu.py:168 msgid "Prefix & VLAN Roles" msgstr "Funções de Prefixo e VLAN" -#: netbox/navigation/menu.py:174 +#: netbox/netbox/navigation/menu.py:174 msgid "ASN Ranges" msgstr "Intervalos de ASNs" -#: netbox/navigation/menu.py:196 +#: netbox/netbox/navigation/menu.py:196 msgid "VLAN Groups" msgstr "Grupos de VLANs" -#: netbox/navigation/menu.py:203 +#: netbox/netbox/navigation/menu.py:203 msgid "Service Templates" msgstr "Modelos de Serviço" -#: netbox/navigation/menu.py:204 templates/dcim/device.html:302 -#: templates/ipam/ipaddress.html:118 -#: templates/virtualization/virtualmachine.html:154 +#: netbox/netbox/navigation/menu.py:204 netbox/templates/dcim/device.html:302 +#: netbox/templates/ipam/ipaddress.html:118 +#: netbox/templates/virtualization/virtualmachine.html:154 msgid "Services" msgstr "Serviços" -#: netbox/navigation/menu.py:211 +#: netbox/netbox/navigation/menu.py:211 msgid "VPN" msgstr "VPN" -#: netbox/navigation/menu.py:215 netbox/navigation/menu.py:217 -#: vpn/tables/tunnels.py:24 +#: netbox/netbox/navigation/menu.py:215 netbox/netbox/navigation/menu.py:217 +#: netbox/vpn/tables/tunnels.py:24 msgid "Tunnels" msgstr "Túneis" -#: netbox/navigation/menu.py:218 templates/vpn/tunnelgroup.html:8 +#: netbox/netbox/navigation/menu.py:218 +#: netbox/templates/vpn/tunnelgroup.html:8 msgid "Tunnel Groups" msgstr "Grupos de Túneis" -#: netbox/navigation/menu.py:219 +#: netbox/netbox/navigation/menu.py:219 msgid "Tunnel Terminations" msgstr "Terminações de Túneis" -#: netbox/navigation/menu.py:223 netbox/navigation/menu.py:225 -#: vpn/models/l2vpn.py:64 +#: netbox/netbox/navigation/menu.py:223 netbox/netbox/navigation/menu.py:225 +#: netbox/vpn/models/l2vpn.py:64 msgid "L2VPNs" msgstr "L2VPNs" -#: netbox/navigation/menu.py:226 templates/vpn/l2vpn.html:56 -#: templates/vpn/tunnel.html:72 vpn/tables/tunnels.py:58 +#: 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 "Terminações" -#: netbox/navigation/menu.py:232 +#: netbox/netbox/navigation/menu.py:232 msgid "IKE Proposals" msgstr "Propostas de IKE" -#: netbox/navigation/menu.py:233 templates/vpn/ikeproposal.html:41 +#: netbox/netbox/navigation/menu.py:233 +#: netbox/templates/vpn/ikeproposal.html:41 msgid "IKE Policies" msgstr "Políticas de IKE" -#: netbox/navigation/menu.py:234 +#: netbox/netbox/navigation/menu.py:234 msgid "IPSec Proposals" msgstr "Propostas de IPsec" -#: netbox/navigation/menu.py:235 templates/vpn/ipsecproposal.html:37 +#: netbox/netbox/navigation/menu.py:235 +#: netbox/templates/vpn/ipsecproposal.html:37 msgid "IPSec Policies" msgstr "Políticas de IPsec" -#: netbox/navigation/menu.py:236 templates/vpn/ikepolicy.html:38 -#: templates/vpn/ipsecpolicy.html:25 +#: netbox/netbox/navigation/menu.py:236 netbox/templates/vpn/ikepolicy.html:38 +#: netbox/templates/vpn/ipsecpolicy.html:25 msgid "IPSec Profiles" msgstr "Perfis de IPsec" -#: netbox/navigation/menu.py:243 templates/dcim/device_edit.html:78 -msgid "Virtualization" -msgstr "Virtualização" - -#: netbox/navigation/menu.py:251 -#: templates/virtualization/virtualmachine.html:174 -#: templates/virtualization/virtualmachine/base.html:32 -#: templates/virtualization/virtualmachine_list.html:21 -#: virtualization/tables/virtualmachines.py:104 virtualization/views.py:388 +#: netbox/netbox/navigation/menu.py:251 +#: 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 msgid "Virtual Disks" msgstr "Discos Virtuais" -#: netbox/navigation/menu.py:258 +#: netbox/netbox/navigation/menu.py:258 msgid "Cluster Types" msgstr "Tipos de Clusters" -#: netbox/navigation/menu.py:259 +#: netbox/netbox/navigation/menu.py:259 msgid "Cluster Groups" msgstr "Grupos de Clusters" -#: netbox/navigation/menu.py:273 +#: netbox/netbox/navigation/menu.py:273 msgid "Circuit Types" msgstr "Tipos de Circuitos" -#: netbox/navigation/menu.py:274 +#: netbox/netbox/navigation/menu.py:274 msgid "Circuit Groups" msgstr "Grupos de Circuitos" -#: netbox/navigation/menu.py:275 templates/circuits/circuit.html:66 +#: netbox/netbox/navigation/menu.py:275 +#: netbox/templates/circuits/circuit.html:66 msgid "Group Assignments" msgstr "Atribuições do Grupo" -#: netbox/navigation/menu.py:276 +#: netbox/netbox/navigation/menu.py:276 msgid "Circuit Terminations" msgstr "Terminações de Circuitos" -#: netbox/navigation/menu.py:280 netbox/navigation/menu.py:282 +#: netbox/netbox/navigation/menu.py:280 netbox/netbox/navigation/menu.py:282 msgid "Providers" msgstr "Provedores" -#: netbox/navigation/menu.py:283 templates/circuits/provider.html:51 +#: netbox/netbox/navigation/menu.py:283 +#: netbox/templates/circuits/provider.html:51 msgid "Provider Accounts" msgstr "Contas de Provedores" -#: netbox/navigation/menu.py:284 +#: netbox/netbox/navigation/menu.py:284 msgid "Provider Networks" msgstr "Redes dos Provedores" -#: netbox/navigation/menu.py:298 +#: netbox/netbox/navigation/menu.py:298 msgid "Power Panels" msgstr "Quadros de Alimentação" -#: netbox/navigation/menu.py:309 +#: netbox/netbox/navigation/menu.py:309 msgid "Configurations" msgstr "Configurações" -#: netbox/navigation/menu.py:311 +#: netbox/netbox/navigation/menu.py:311 msgid "Config Contexts" msgstr "Contexto de Configuração" -#: netbox/navigation/menu.py:312 +#: netbox/netbox/navigation/menu.py:312 msgid "Config Templates" msgstr "Modelos de Configuração" -#: netbox/navigation/menu.py:319 netbox/navigation/menu.py:323 +#: netbox/netbox/navigation/menu.py:319 netbox/netbox/navigation/menu.py:323 msgid "Customization" msgstr "Personalização" -#: netbox/navigation/menu.py:325 templates/dcim/device_edit.html:103 -#: templates/dcim/htmx/cable_edit.html:81 -#: templates/dcim/virtualchassis_add.html:31 -#: templates/dcim/virtualchassis_edit.html:40 -#: templates/generic/bulk_edit.html:76 templates/htmx/form.html:19 -#: templates/inc/filter_list.html:30 templates/inc/panels/custom_fields.html:7 -#: templates/ipam/ipaddress_bulk_add.html:35 templates/ipam/vlan_edit.html:59 +#: netbox/netbox/navigation/menu.py:325 +#: netbox/templates/dcim/device_edit.html:103 +#: netbox/templates/dcim/htmx/cable_edit.html:81 +#: netbox/templates/dcim/virtualchassis_add.html:31 +#: netbox/templates/dcim/virtualchassis_edit.html:40 +#: netbox/templates/generic/bulk_edit.html:76 +#: netbox/templates/htmx/form.html:19 netbox/templates/inc/filter_list.html:30 +#: netbox/templates/inc/panels/custom_fields.html:7 +#: netbox/templates/ipam/ipaddress_bulk_add.html:35 +#: netbox/templates/ipam/vlan_edit.html:59 msgid "Custom Fields" msgstr "Campos Personalizados" -#: netbox/navigation/menu.py:326 +#: netbox/netbox/navigation/menu.py:326 msgid "Custom Field Choices" msgstr "Opções de Campo Personalizadas" -#: netbox/navigation/menu.py:327 +#: netbox/netbox/navigation/menu.py:327 msgid "Custom Links" msgstr "Links Personalizados" -#: netbox/navigation/menu.py:328 +#: netbox/netbox/navigation/menu.py:328 msgid "Export Templates" msgstr "Modelos de Exportação" -#: netbox/navigation/menu.py:329 +#: netbox/netbox/navigation/menu.py:329 msgid "Saved Filters" msgstr "Filtros Salvos" -#: netbox/navigation/menu.py:331 +#: netbox/netbox/navigation/menu.py:331 msgid "Image Attachments" msgstr "Anexos de Imagens" -#: netbox/navigation/menu.py:349 +#: netbox/netbox/navigation/menu.py:349 msgid "Operations" msgstr "Operações" -#: netbox/navigation/menu.py:353 +#: netbox/netbox/navigation/menu.py:353 msgid "Integrations" msgstr "Integrações" -#: netbox/navigation/menu.py:355 +#: netbox/netbox/navigation/menu.py:355 msgid "Data Sources" msgstr "Fontes de dados" -#: netbox/navigation/menu.py:356 +#: netbox/netbox/navigation/menu.py:356 msgid "Event Rules" msgstr "Regras dos eventos" -#: netbox/navigation/menu.py:357 +#: netbox/netbox/navigation/menu.py:357 msgid "Webhooks" msgstr "Webhooks" -#: netbox/navigation/menu.py:361 netbox/navigation/menu.py:365 -#: netbox/views/generic/feature_views.py:153 -#: templates/extras/report/base.html:37 templates/extras/script/base.html:36 +#: netbox/netbox/navigation/menu.py:361 netbox/netbox/navigation/menu.py:365 +#: netbox/netbox/views/generic/feature_views.py:153 +#: netbox/templates/extras/report/base.html:37 +#: netbox/templates/extras/script/base.html:36 msgid "Jobs" msgstr "Tarefas" -#: netbox/navigation/menu.py:371 +#: netbox/netbox/navigation/menu.py:371 msgid "Logging" msgstr "Rastreamento" -#: netbox/navigation/menu.py:373 +#: netbox/netbox/navigation/menu.py:373 msgid "Notification Groups" msgstr "Grupos de Notificação" -#: netbox/navigation/menu.py:374 +#: netbox/netbox/navigation/menu.py:374 msgid "Journal Entries" msgstr "Registros de Eventos" -#: netbox/navigation/menu.py:375 templates/core/objectchange.html:9 -#: templates/core/objectchange_list.html:4 +#: netbox/netbox/navigation/menu.py:375 +#: netbox/templates/core/objectchange.html:9 +#: netbox/templates/core/objectchange_list.html:4 msgid "Change Log" msgstr "Changelog" -#: netbox/navigation/menu.py:382 templates/inc/user_menu.html:29 +#: netbox/netbox/navigation/menu.py:382 netbox/templates/inc/user_menu.html:29 msgid "Admin" msgstr "Administrador" -#: netbox/navigation/menu.py:430 templates/account/base.html:27 -#: templates/inc/user_menu.html:57 +#: netbox/netbox/navigation/menu.py:430 netbox/templates/account/base.html:27 +#: netbox/templates/inc/user_menu.html:57 msgid "API Tokens" msgstr "Tokens de API" -#: netbox/navigation/menu.py:437 users/forms/model_forms.py:187 -#: users/forms/model_forms.py:195 users/forms/model_forms.py:242 -#: users/forms/model_forms.py:249 +#: netbox/netbox/navigation/menu.py:437 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 "Permissões" -#: netbox/navigation/menu.py:445 netbox/navigation/menu.py:449 -#: templates/core/system.html:7 +#: netbox/netbox/navigation/menu.py:445 netbox/netbox/navigation/menu.py:449 +#: netbox/templates/core/system.html:7 msgid "System" msgstr "Sistema" -#: netbox/navigation/menu.py:454 netbox/navigation/menu.py:502 -#: templates/500.html:35 templates/account/preferences.html:22 -#: templates/core/plugin.html:13 templates/core/plugin_list.html:7 -#: templates/core/plugin_list.html:12 +#: netbox/netbox/navigation/menu.py:454 netbox/netbox/navigation/menu.py:502 +#: netbox/templates/500.html:35 netbox/templates/account/preferences.html:22 +#: netbox/templates/core/plugin.html:13 +#: netbox/templates/core/plugin_list.html:7 +#: netbox/templates/core/plugin_list.html:12 msgid "Plugins" msgstr "Plugins" -#: netbox/navigation/menu.py:459 +#: netbox/netbox/navigation/menu.py:459 msgid "Configuration History" msgstr "Histórico de Configuração" -#: netbox/navigation/menu.py:465 templates/core/rq_task.html:8 -#: templates/core/rq_task_list.html:22 +#: netbox/netbox/navigation/menu.py:465 netbox/templates/core/rq_task.html:8 +#: netbox/templates/core/rq_task_list.html:22 msgid "Background Tasks" msgstr "Tarefas em Background" -#: netbox/plugins/navigation.py:47 netbox/plugins/navigation.py:69 +#: netbox/netbox/plugins/navigation.py:47 +#: netbox/netbox/plugins/navigation.py:69 msgid "Permissions must be passed as a tuple or list." msgstr "Permissões devem ser passadas como uma tupla ou lista." -#: netbox/plugins/navigation.py:51 +#: netbox/netbox/plugins/navigation.py:51 msgid "Buttons must be passed as a tuple or list." msgstr "Botões devem ser passados como uma tupla ou lista." -#: netbox/plugins/navigation.py:73 +#: netbox/netbox/plugins/navigation.py:73 msgid "Button color must be a choice within ButtonColorChoices." msgstr "Cor do botão deve ser uma opção em ButtonColorChoices." -#: netbox/plugins/registration.py:25 +#: netbox/netbox/plugins/registration.py:25 #, python-brace-format msgid "" "PluginTemplateExtension class {template_extension} was passed as an " @@ -10644,7 +11359,7 @@ msgstr "" "Classe PluginTemplateExtension {template_extension} foi passada como uma " "instância!" -#: netbox/plugins/registration.py:31 +#: netbox/netbox/plugins/registration.py:31 #, python-brace-format msgid "" "{template_extension} is not a subclass of " @@ -10653,193 +11368,194 @@ msgstr "" "{template_extension} não é uma subclasse de " "netbox.plugins.PluginTemplateExtension!" -#: netbox/plugins/registration.py:51 +#: netbox/netbox/plugins/registration.py:51 #, python-brace-format msgid "{item} must be an instance of netbox.plugins.PluginMenuItem" msgstr "{item} deve ser uma instância de netbox.plugins.PluginMenuItem" -#: netbox/plugins/registration.py:62 +#: netbox/netbox/plugins/registration.py:62 #, python-brace-format msgid "{menu_link} must be an instance of netbox.plugins.PluginMenuItem" msgstr "{menu_link} deve ser uma instância de netbox.plugins.PluginMenuItem" -#: netbox/plugins/registration.py:67 +#: netbox/netbox/plugins/registration.py:67 #, python-brace-format msgid "{button} must be an instance of netbox.plugins.PluginMenuButton" msgstr "{button} deve ser uma instância de netbox.plugins.PluginMenuButton" -#: netbox/plugins/templates.py:37 +#: netbox/netbox/plugins/templates.py:37 msgid "extra_context must be a dictionary" msgstr "extra_context deve ser um dicionário" -#: netbox/preferences.py:19 +#: netbox/netbox/preferences.py:19 msgid "HTMX Navigation" msgstr "Navegação HTMX" -#: netbox/preferences.py:24 +#: netbox/netbox/preferences.py:24 msgid "Enable dynamic UI navigation" msgstr "Habilitar navegação dinâmica na interface do usuário" -#: netbox/preferences.py:26 +#: netbox/netbox/preferences.py:26 msgid "Experimental feature" msgstr "Característica experimental" -#: netbox/preferences.py:29 +#: netbox/netbox/preferences.py:29 msgid "Language" msgstr "Idioma" -#: netbox/preferences.py:34 +#: netbox/netbox/preferences.py:34 msgid "Forces UI translation to the specified language" msgstr "Força a tradução da interface do usuário para o idioma especificado" -#: netbox/preferences.py:36 +#: netbox/netbox/preferences.py:36 msgid "Support for translation has been disabled locally" msgstr "Suporte para tradução foi desativado localmente" -#: netbox/preferences.py:42 +#: netbox/netbox/preferences.py:42 msgid "Page length" msgstr "Comprimento da página" -#: netbox/preferences.py:44 +#: netbox/netbox/preferences.py:44 msgid "The default number of objects to display per page" msgstr "O número padrão de objetos a serem exibidos por página" -#: netbox/preferences.py:48 +#: netbox/netbox/preferences.py:48 msgid "Paginator placement" msgstr "Posição do paginador" -#: netbox/preferences.py:50 +#: netbox/netbox/preferences.py:50 msgid "Bottom" msgstr "Parte Inferior" -#: netbox/preferences.py:51 +#: netbox/netbox/preferences.py:51 msgid "Top" msgstr "Topo" -#: netbox/preferences.py:52 +#: netbox/netbox/preferences.py:52 msgid "Both" msgstr "Ambos" -#: netbox/preferences.py:55 +#: netbox/netbox/preferences.py:55 msgid "Where the paginator controls will be displayed relative to a table" msgstr "Onde os controles do paginador serão exibidos em relação a uma tabela" -#: netbox/preferences.py:60 +#: netbox/netbox/preferences.py:60 msgid "Data format" msgstr "Formato de dados" -#: netbox/preferences.py:65 +#: netbox/netbox/preferences.py:65 msgid "The preferred syntax for displaying generic data within the UI" msgstr "" "A sintaxe preferida para exibir dados genéricos na interface do usuário" -#: netbox/registry.py:14 +#: netbox/netbox/registry.py:14 #, python-brace-format msgid "Invalid store: {key}" msgstr "Store inválido: {key}" -#: netbox/registry.py:17 +#: netbox/netbox/registry.py:17 msgid "Cannot add stores to registry after initialization" msgstr "Não é possível adicionar stores ao registro após a inicialização" -#: netbox/registry.py:20 +#: netbox/netbox/registry.py:20 msgid "Cannot delete stores from registry" msgstr "Não é possível excluir stores do registro" -#: netbox/settings.py:760 +#: netbox/netbox/settings.py:760 msgid "Czech" msgstr "Tcheco" -#: netbox/settings.py:761 +#: netbox/netbox/settings.py:761 msgid "Danish" msgstr "Dinamarquês" -#: netbox/settings.py:762 +#: netbox/netbox/settings.py:762 msgid "German" msgstr "Alemão" -#: netbox/settings.py:763 +#: netbox/netbox/settings.py:763 msgid "English" msgstr "Inglês" -#: netbox/settings.py:764 +#: netbox/netbox/settings.py:764 msgid "Spanish" msgstr "Espanhol" -#: netbox/settings.py:765 +#: netbox/netbox/settings.py:765 msgid "French" msgstr "Francês" -#: netbox/settings.py:766 +#: netbox/netbox/settings.py:766 msgid "Italian" msgstr "Italiano" -#: netbox/settings.py:767 +#: netbox/netbox/settings.py:767 msgid "Japanese" msgstr "Japonês" -#: netbox/settings.py:768 +#: netbox/netbox/settings.py:768 msgid "Dutch" msgstr "Holandês" -#: netbox/settings.py:769 +#: netbox/netbox/settings.py:769 msgid "Polish" msgstr "Polonês" -#: netbox/settings.py:770 +#: netbox/netbox/settings.py:770 msgid "Portuguese" msgstr "Português" -#: netbox/settings.py:771 +#: netbox/netbox/settings.py:771 msgid "Russian" msgstr "Russo" -#: netbox/settings.py:772 +#: netbox/netbox/settings.py:772 msgid "Turkish" msgstr "Turco" -#: netbox/settings.py:773 +#: netbox/netbox/settings.py:773 msgid "Ukrainian" msgstr "Ucraniano" -#: netbox/settings.py:774 +#: netbox/netbox/settings.py:774 msgid "Chinese" msgstr "Chinês" -#: netbox/tables/columns.py:176 +#: netbox/netbox/tables/columns.py:176 msgid "Select all" msgstr "Selecionar todos" -#: netbox/tables/columns.py:189 +#: netbox/netbox/tables/columns.py:189 msgid "Toggle all" msgstr "Alternar todos" -#: netbox/tables/columns.py:300 +#: netbox/netbox/tables/columns.py:300 msgid "Toggle Dropdown" msgstr "Alternar Lista Suspensa" -#: netbox/tables/columns.py:572 templates/core/job.html:53 +#: netbox/netbox/tables/columns.py:572 netbox/templates/core/job.html:53 msgid "Error" msgstr "Erro" -#: netbox/tables/tables.py:58 +#: netbox/netbox/tables/tables.py:58 #, python-brace-format msgid "No {model_name} found" msgstr "{model_name} não encontrados" -#: netbox/tables/tables.py:249 templates/generic/bulk_import.html:117 +#: netbox/netbox/tables/tables.py:249 +#: netbox/templates/generic/bulk_import.html:117 msgid "Field" msgstr "Campo" -#: netbox/tables/tables.py:252 +#: netbox/netbox/tables/tables.py:252 msgid "Value" msgstr "Valor" -#: netbox/tests/dummy_plugin/navigation.py:29 +#: netbox/netbox/tests/dummy_plugin/navigation.py:29 msgid "Dummy Plugin" msgstr "Plugin Dummy" -#: netbox/views/generic/bulk_views.py:114 +#: netbox/netbox/views/generic/bulk_views.py:114 #, python-brace-format msgid "" "There was an error rendering the selected export template ({template}): " @@ -10847,57 +11563,57 @@ msgid "" msgstr "" "Houve um erro ao renderizar o modelo de exportação ({template}): {error}" -#: netbox/views/generic/bulk_views.py:416 +#: netbox/netbox/views/generic/bulk_views.py:416 #, python-brace-format msgid "Row {i}: Object with ID {id} does not exist" msgstr "Linha {i}: Objeto com ID {id} não existe" -#: netbox/views/generic/bulk_views.py:702 -#: netbox/views/generic/bulk_views.py:900 -#: netbox/views/generic/bulk_views.py:948 +#: netbox/netbox/views/generic/bulk_views.py:709 +#: netbox/netbox/views/generic/bulk_views.py:910 +#: netbox/netbox/views/generic/bulk_views.py:958 #, python-brace-format msgid "No {object_type} were selected." msgstr "Nenhum {object_type} foi/foram selecionado(s)." -#: netbox/views/generic/bulk_views.py:782 +#: netbox/netbox/views/generic/bulk_views.py:788 #, python-brace-format msgid "Renamed {count} {object_type}" msgstr "Renomeado(s) {count} {object_type}" -#: netbox/views/generic/bulk_views.py:878 +#: netbox/netbox/views/generic/bulk_views.py:888 #, python-brace-format msgid "Deleted {count} {object_type}" msgstr "Excluído(s) {count} {object_type}" -#: netbox/views/generic/feature_views.py:40 +#: netbox/netbox/views/generic/feature_views.py:40 msgid "Changelog" msgstr "Changelog" -#: netbox/views/generic/feature_views.py:93 +#: netbox/netbox/views/generic/feature_views.py:93 msgid "Journal" msgstr "Registro" -#: netbox/views/generic/feature_views.py:207 +#: netbox/netbox/views/generic/feature_views.py:207 msgid "Unable to synchronize data: No data file set." msgstr "" "Não é possível sincronizar os dados: Nenhum arquivo de dados definido." -#: netbox/views/generic/feature_views.py:211 +#: netbox/netbox/views/generic/feature_views.py:211 #, python-brace-format msgid "Synchronized data for {object_type} {object}." msgstr "Dados sincronizados para {object_type} {object}." -#: netbox/views/generic/feature_views.py:236 +#: netbox/netbox/views/generic/feature_views.py:236 #, python-brace-format msgid "Synced {count} {object_type}" msgstr "Sincronizado(s) {count} {object_type}" -#: netbox/views/generic/object_views.py:108 +#: netbox/netbox/views/generic/object_views.py:108 #, python-brace-format msgid "{class_name} must implement get_children()" msgstr "{class_name} deve implementar get_children ()" -#: netbox/views/misc.py:44 +#: netbox/netbox/views/misc.py:46 msgid "" "There was an error loading the dashboard configuration. A default dashboard " "is in use." @@ -10905,704 +11621,746 @@ msgstr "" "Erro ao carregar a configuração do dashboard. Um dashboard padrão está em " "uso." -#: templates/403.html:4 +#: netbox/templates/403.html:4 msgid "Access Denied" msgstr "Acesso Negado" -#: templates/403.html:9 +#: netbox/templates/403.html:9 msgid "You do not have permission to access this page" msgstr "Você não tem permissão para acessar esta página" -#: templates/404.html:4 +#: netbox/templates/404.html:4 msgid "Page Not Found" msgstr "Página Não Encontrada" -#: templates/404.html:9 +#: netbox/templates/404.html:9 msgid "The requested page does not exist" msgstr "A página solicitada não existe" -#: templates/500.html:7 templates/500.html:18 +#: netbox/templates/500.html:7 netbox/templates/500.html:18 msgid "Server Error" msgstr "Erro no Servidor" -#: templates/500.html:23 +#: netbox/templates/500.html:23 msgid "There was a problem with your request. Please contact an administrator" msgstr "" "Houve um problema com sua solicitação. Entre em contato com o administrador" -#: templates/500.html:28 +#: netbox/templates/500.html:28 msgid "The complete exception is provided below" msgstr "A exceção completa é fornecida abaixo" -#: templates/500.html:33 templates/core/system.html:40 +#: netbox/templates/500.html:33 netbox/templates/core/system.html:40 msgid "Python version" msgstr "Versão do Python" -#: templates/500.html:34 +#: netbox/templates/500.html:34 msgid "NetBox version" msgstr "Versão do NetBox" -#: templates/500.html:36 +#: netbox/templates/500.html:36 msgid "None installed" msgstr "Nenhum instalado" -#: templates/500.html:39 +#: netbox/templates/500.html:39 msgid "If further assistance is required, please post to the" msgstr "Se necessitar de mais ajuda, por favor poste no" -#: templates/500.html:39 +#: netbox/templates/500.html:39 msgid "NetBox discussion forum" msgstr "Fórum de discussão do NetBox" -#: templates/500.html:39 +#: netbox/templates/500.html:39 msgid "on GitHub" msgstr "no GitHub" -#: templates/500.html:42 templates/base/40x.html:17 +#: netbox/templates/500.html:42 netbox/templates/base/40x.html:17 msgid "Home Page" msgstr "Página Inicial" -#: templates/account/base.html:7 templates/inc/user_menu.html:45 -#: vpn/forms/bulk_edit.py:255 vpn/forms/filtersets.py:189 -#: vpn/forms/model_forms.py:379 +#: netbox/templates/account/base.html:7 netbox/templates/inc/user_menu.html:45 +#: netbox/vpn/forms/bulk_edit.py:255 netbox/vpn/forms/filtersets.py:189 +#: netbox/vpn/forms/model_forms.py:379 msgid "Profile" msgstr "Perfil" -#: templates/account/base.html:13 templates/account/notifications.html:7 -#: templates/inc/user_menu.html:15 +#: netbox/templates/account/base.html:13 +#: netbox/templates/account/notifications.html:7 +#: netbox/templates/inc/user_menu.html:15 msgid "Notifications" msgstr "Notificações" -#: templates/account/base.html:16 templates/account/subscriptions.html:7 -#: templates/inc/user_menu.html:51 +#: netbox/templates/account/base.html:16 +#: netbox/templates/account/subscriptions.html:7 +#: netbox/templates/inc/user_menu.html:51 msgid "Subscriptions" msgstr "Subscrições" -#: templates/account/base.html:19 templates/inc/user_menu.html:54 +#: netbox/templates/account/base.html:19 +#: netbox/templates/inc/user_menu.html:54 msgid "Preferences" msgstr "Preferências" -#: templates/account/password.html:5 +#: netbox/templates/account/password.html:5 msgid "Change Password" msgstr "Alterar senha" -#: templates/account/password.html:19 templates/account/preferences.html:77 -#: templates/core/configrevision_restore.html:63 -#: templates/dcim/devicebay_populate.html:34 -#: templates/dcim/virtualchassis_add_member.html:26 -#: templates/dcim/virtualchassis_edit.html:103 -#: templates/extras/object_journal.html:26 templates/extras/script.html:38 -#: templates/generic/bulk_add_component.html:67 -#: templates/generic/bulk_delete.html:65 templates/generic/bulk_edit.html:106 -#: templates/generic/bulk_import.html:56 templates/generic/bulk_import.html:78 -#: templates/generic/bulk_import.html:100 -#: templates/generic/bulk_remove.html:62 templates/generic/bulk_rename.html:63 -#: templates/generic/confirmation_form.html:19 -#: templates/generic/object_edit.html:72 templates/htmx/delete_form.html:53 -#: templates/htmx/delete_form.html:55 templates/ipam/ipaddress_assign.html:28 -#: templates/virtualization/cluster_add_devices.html:30 +#: netbox/templates/account/password.html:19 +#: netbox/templates/account/preferences.html:77 +#: netbox/templates/core/configrevision_restore.html:63 +#: netbox/templates/dcim/devicebay_populate.html:34 +#: netbox/templates/dcim/virtualchassis_add_member.html:26 +#: netbox/templates/dcim/virtualchassis_edit.html:103 +#: netbox/templates/extras/object_journal.html:26 +#: netbox/templates/extras/script.html:38 +#: netbox/templates/generic/bulk_add_component.html:67 +#: netbox/templates/generic/bulk_delete.html:65 +#: netbox/templates/generic/bulk_edit.html:106 +#: netbox/templates/generic/bulk_import.html:56 +#: netbox/templates/generic/bulk_import.html:78 +#: netbox/templates/generic/bulk_import.html:100 +#: netbox/templates/generic/bulk_remove.html:62 +#: netbox/templates/generic/bulk_rename.html:63 +#: netbox/templates/generic/confirmation_form.html:19 +#: netbox/templates/generic/object_edit.html:72 +#: netbox/templates/htmx/delete_form.html:53 +#: netbox/templates/htmx/delete_form.html:55 +#: netbox/templates/ipam/ipaddress_assign.html:28 +#: netbox/templates/virtualization/cluster_add_devices.html:30 msgid "Cancel" msgstr "Cancelar" -#: templates/account/password.html:20 templates/account/preferences.html:78 -#: templates/dcim/devicebay_populate.html:35 -#: templates/dcim/virtualchassis_add_member.html:28 -#: templates/dcim/virtualchassis_edit.html:105 -#: templates/extras/dashboard/widget_add.html:26 -#: templates/extras/dashboard/widget_config.html:19 -#: templates/extras/object_journal.html:27 -#: templates/generic/object_edit.html:75 -#: utilities/templates/helpers/applied_filters.html:16 -#: utilities/templates/helpers/table_config_form.html:40 +#: netbox/templates/account/password.html:20 +#: netbox/templates/account/preferences.html:78 +#: netbox/templates/dcim/devicebay_populate.html:35 +#: netbox/templates/dcim/virtualchassis_add_member.html:28 +#: netbox/templates/dcim/virtualchassis_edit.html:105 +#: netbox/templates/extras/dashboard/widget_add.html:26 +#: netbox/templates/extras/dashboard/widget_config.html:19 +#: netbox/templates/extras/object_journal.html:27 +#: netbox/templates/generic/object_edit.html:75 +#: netbox/utilities/templates/helpers/applied_filters.html:16 +#: netbox/utilities/templates/helpers/table_config_form.html:40 msgid "Save" msgstr "Salvar" -#: templates/account/preferences.html:34 +#: netbox/templates/account/preferences.html:34 msgid "Table Configurations" msgstr "Configurações de Tabelas" -#: templates/account/preferences.html:39 +#: netbox/templates/account/preferences.html:39 msgid "Clear table preferences" msgstr "Limpar preferências de tabela" -#: templates/account/preferences.html:47 +#: netbox/templates/account/preferences.html:47 msgid "Toggle All" msgstr "Alternar Tudo" -#: templates/account/preferences.html:49 +#: netbox/templates/account/preferences.html:49 msgid "Table" msgstr "Tabela" -#: templates/account/preferences.html:50 +#: netbox/templates/account/preferences.html:50 msgid "Ordering" msgstr "Ordenação" -#: templates/account/preferences.html:51 +#: netbox/templates/account/preferences.html:51 msgid "Columns" msgstr "Colunas" -#: templates/account/preferences.html:71 templates/dcim/cable_trace.html:113 -#: templates/extras/object_configcontext.html:43 +#: netbox/templates/account/preferences.html:71 +#: netbox/templates/dcim/cable_trace.html:113 +#: netbox/templates/extras/object_configcontext.html:43 msgid "None found" msgstr "Nenhum encontrado" -#: templates/account/profile.html:6 +#: netbox/templates/account/profile.html:6 msgid "User Profile" msgstr "Perfil do Usuário" -#: templates/account/profile.html:12 +#: netbox/templates/account/profile.html:12 msgid "Account Details" msgstr "Detalhes da Conta" -#: templates/account/profile.html:29 templates/tenancy/contact.html:43 -#: templates/users/user.html:25 tenancy/forms/bulk_edit.py:109 +#: netbox/templates/account/profile.html:29 +#: netbox/templates/tenancy/contact.html:43 +#: netbox/templates/users/user.html:25 netbox/tenancy/forms/bulk_edit.py:109 msgid "Email" msgstr "E-mail" -#: templates/account/profile.html:33 templates/users/user.html:29 +#: netbox/templates/account/profile.html:33 +#: netbox/templates/users/user.html:29 msgid "Account Created" msgstr "Conta Criada" -#: templates/account/profile.html:37 templates/users/user.html:33 +#: netbox/templates/account/profile.html:37 +#: netbox/templates/users/user.html:33 msgid "Last Login" msgstr "Último Login" -#: templates/account/profile.html:41 templates/users/user.html:45 +#: netbox/templates/account/profile.html:41 +#: netbox/templates/users/user.html:45 msgid "Superuser" msgstr "Superusuário" -#: templates/account/profile.html:45 templates/inc/user_menu.html:31 -#: templates/users/user.html:41 +#: netbox/templates/account/profile.html:45 +#: netbox/templates/inc/user_menu.html:31 netbox/templates/users/user.html:41 msgid "Staff" msgstr "Staff" -#: templates/account/profile.html:53 templates/users/objectpermission.html:82 -#: templates/users/user.html:53 +#: netbox/templates/account/profile.html:53 +#: netbox/templates/users/objectpermission.html:82 +#: netbox/templates/users/user.html:53 msgid "Assigned Groups" msgstr "Grupos Associados" -#: templates/account/profile.html:58 -#: templates/circuits/circuit_terminations_swap.html:18 -#: templates/circuits/circuit_terminations_swap.html:26 -#: templates/circuits/circuittermination.html:34 -#: templates/circuits/inc/circuit_termination.html:68 -#: templates/core/objectchange.html:124 templates/core/objectchange.html:142 -#: templates/dcim/devicebay.html:59 -#: templates/dcim/inc/panels/inventory_items.html:45 -#: templates/dcim/interface.html:296 templates/dcim/modulebay.html:80 -#: templates/extras/configcontext.html:70 templates/extras/eventrule.html:66 -#: templates/extras/htmx/script_result.html:60 -#: templates/extras/webhook.html:65 templates/extras/webhook.html:75 -#: templates/inc/panel_table.html:13 templates/inc/panels/comments.html:10 -#: templates/ipam/inc/panels/fhrp_groups.html:56 templates/users/group.html:34 -#: templates/users/group.html:44 templates/users/objectpermission.html:77 -#: templates/users/objectpermission.html:87 templates/users/user.html:58 -#: templates/users/user.html:68 +#: netbox/templates/account/profile.html:58 +#: netbox/templates/circuits/circuit_terminations_swap.html:18 +#: netbox/templates/circuits/circuit_terminations_swap.html:26 +#: netbox/templates/circuits/circuittermination.html:34 +#: netbox/templates/circuits/inc/circuit_termination.html:68 +#: netbox/templates/core/objectchange.html:124 +#: 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/modulebay.html:80 +#: netbox/templates/extras/configcontext.html:70 +#: netbox/templates/extras/eventrule.html:66 +#: netbox/templates/extras/htmx/script_result.html:60 +#: netbox/templates/extras/webhook.html:65 +#: netbox/templates/extras/webhook.html:75 +#: netbox/templates/inc/panel_table.html:13 +#: netbox/templates/inc/panels/comments.html:10 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:56 +#: netbox/templates/users/group.html:34 netbox/templates/users/group.html:44 +#: netbox/templates/users/objectpermission.html:77 +#: netbox/templates/users/objectpermission.html:87 +#: netbox/templates/users/user.html:58 netbox/templates/users/user.html:68 msgid "None" msgstr "Nenhum" -#: templates/account/profile.html:68 templates/users/user.html:78 +#: netbox/templates/account/profile.html:68 +#: netbox/templates/users/user.html:78 msgid "Recent Activity" msgstr "Atividade Recente" -#: templates/account/token.html:8 templates/account/token_list.html:6 +#: netbox/templates/account/token.html:8 +#: netbox/templates/account/token_list.html:6 msgid "My API Tokens" msgstr "Meus Tokens de API" -#: templates/account/token.html:11 templates/account/token.html:19 -#: templates/users/token.html:6 templates/users/token.html:14 -#: users/forms/filtersets.py:120 +#: netbox/templates/account/token.html:11 +#: netbox/templates/account/token.html:19 netbox/templates/users/token.html:6 +#: netbox/templates/users/token.html:14 netbox/users/forms/filtersets.py:120 msgid "Token" msgstr "Token" -#: templates/account/token.html:39 templates/users/token.html:31 -#: users/forms/bulk_edit.py:107 +#: netbox/templates/account/token.html:39 netbox/templates/users/token.html:31 +#: netbox/users/forms/bulk_edit.py:107 msgid "Write enabled" msgstr "Permissão de escrita" -#: templates/account/token.html:51 templates/users/token.html:43 +#: netbox/templates/account/token.html:51 netbox/templates/users/token.html:43 msgid "Last used" msgstr "Usado pela última vez" -#: templates/account/token_list.html:12 +#: netbox/templates/account/token_list.html:12 msgid "Add a Token" msgstr "Adicionar um Token" -#: templates/base/base.html:22 templates/home.html:27 +#: netbox/templates/base/base.html:22 netbox/templates/home.html:27 msgid "Home" msgstr "Início" -#: templates/base/layout.html:25 +#: netbox/templates/base/layout.html:25 msgid "NetBox Motif" msgstr "Tema do NetBox" -#: templates/base/layout.html:38 templates/base/layout.html:39 -#: templates/login.html:14 templates/login.html:15 +#: netbox/templates/base/layout.html:38 netbox/templates/base/layout.html:39 +#: netbox/templates/login.html:14 netbox/templates/login.html:15 msgid "NetBox Logo" msgstr "Logotipo do NetBox" -#: templates/base/layout.html:150 templates/base/layout.html:151 +#: netbox/templates/base/layout.html:150 netbox/templates/base/layout.html:151 msgid "Docs" msgstr "Documentos" -#: templates/base/layout.html:156 templates/base/layout.html:157 -#: templates/rest_framework/api.html:10 +#: netbox/templates/base/layout.html:156 netbox/templates/base/layout.html:157 +#: netbox/templates/rest_framework/api.html:10 msgid "REST API" msgstr "API REST" -#: templates/base/layout.html:162 templates/base/layout.html:163 +#: netbox/templates/base/layout.html:162 netbox/templates/base/layout.html:163 msgid "REST API documentation" msgstr "Documentação da API REST" -#: templates/base/layout.html:169 templates/base/layout.html:170 +#: netbox/templates/base/layout.html:169 netbox/templates/base/layout.html:170 msgid "GraphQL API" msgstr "API do GraphQL" -#: templates/base/layout.html:185 templates/base/layout.html:186 +#: netbox/templates/base/layout.html:185 netbox/templates/base/layout.html:186 msgid "NetBox Labs Support" msgstr "Suporte NetBox Labs " -#: templates/base/layout.html:194 templates/base/layout.html:195 +#: netbox/templates/base/layout.html:194 netbox/templates/base/layout.html:195 msgid "Source Code" msgstr "Código-Fonte" -#: templates/base/layout.html:200 templates/base/layout.html:201 +#: netbox/templates/base/layout.html:200 netbox/templates/base/layout.html:201 msgid "Community" msgstr "Comunidade" -#: templates/circuits/circuit.html:47 +#: netbox/templates/circuits/circuit.html:47 msgid "Install Date" msgstr "Data de Ativação" -#: templates/circuits/circuit.html:51 +#: netbox/templates/circuits/circuit.html:51 msgid "Termination Date" msgstr "Data de Desativação" -#: templates/circuits/circuit.html:70 -#: templates/ipam/inc/panels/fhrp_groups.html:15 +#: netbox/templates/circuits/circuit.html:70 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:15 msgid "Assign Group" msgstr "Atribuir Grupo" -#: templates/circuits/circuit_terminations_swap.html:4 +#: netbox/templates/circuits/circuit_terminations_swap.html:4 msgid "Swap Circuit Terminations" msgstr "Troca das Terminações dos Circuitos" -#: templates/circuits/circuit_terminations_swap.html:8 +#: netbox/templates/circuits/circuit_terminations_swap.html:8 #, python-format msgid "Swap these terminations for circuit %(circuit)s?" msgstr "Trocar as terminações do circuito %(circuit)s?" -#: templates/circuits/circuit_terminations_swap.html:14 +#: netbox/templates/circuits/circuit_terminations_swap.html:14 msgid "A side" msgstr "Lado A" -#: templates/circuits/circuit_terminations_swap.html:22 +#: netbox/templates/circuits/circuit_terminations_swap.html:22 msgid "Z side" msgstr "Lado Z" -#: templates/circuits/circuitgroup.html:16 +#: netbox/templates/circuits/circuitgroup.html:16 msgid "Assign Circuit" msgstr "Atribuir Circuito" -#: templates/circuits/circuitgroupassignment.html:19 +#: netbox/templates/circuits/circuitgroupassignment.html:19 msgid "Circuit Group Assignment" msgstr "Atribuição do Grupo de Circuitos" -#: templates/circuits/circuittype.html:10 +#: netbox/templates/circuits/circuittype.html:10 msgid "Add Circuit" msgstr "Adicionar Circuito" -#: templates/circuits/circuittype.html:19 +#: netbox/templates/circuits/circuittype.html:19 msgid "Circuit Type" msgstr "Tipo de circuito" -#: templates/circuits/inc/circuit_termination.html:10 -#: templates/dcim/manufacturer.html:11 -#: templates/generic/bulk_add_component.html:22 -#: templates/users/objectpermission.html:38 -#: utilities/templates/buttons/add.html:4 -#: utilities/templates/helpers/table_config_form.html:20 +#: netbox/templates/circuits/inc/circuit_termination.html:10 +#: netbox/templates/dcim/manufacturer.html:11 +#: netbox/templates/generic/bulk_add_component.html:22 +#: netbox/templates/users/objectpermission.html:38 +#: netbox/utilities/templates/buttons/add.html:4 +#: netbox/utilities/templates/helpers/table_config_form.html:20 msgid "Add" msgstr "Adicionar" -#: templates/circuits/inc/circuit_termination.html:15 -#: templates/circuits/inc/circuit_termination_fields.html:36 -#: templates/dcim/inc/panels/inventory_items.html:32 -#: templates/dcim/powerpanel.html:56 templates/extras/script_list.html:30 -#: templates/generic/object_edit.html:47 -#: templates/ipam/inc/ipaddress_edit_header.html:7 -#: templates/ipam/inc/panels/fhrp_groups.html:43 -#: utilities/templates/buttons/edit.html:3 +#: netbox/templates/circuits/inc/circuit_termination.html:15 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:36 +#: netbox/templates/dcim/inc/panels/inventory_items.html:32 +#: netbox/templates/dcim/powerpanel.html:56 +#: netbox/templates/extras/script_list.html:30 +#: netbox/templates/generic/object_edit.html:47 +#: netbox/templates/ipam/inc/ipaddress_edit_header.html:7 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:43 +#: netbox/utilities/templates/buttons/edit.html:3 msgid "Edit" msgstr "Editar" -#: templates/circuits/inc/circuit_termination.html:18 +#: netbox/templates/circuits/inc/circuit_termination.html:18 msgid "Swap" msgstr "Trocar" -#: templates/circuits/inc/circuit_termination_fields.html:19 -#: templates/dcim/consoleport.html:59 templates/dcim/consoleserverport.html:60 -#: templates/dcim/powerfeed.html:114 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:19 +#: netbox/templates/dcim/consoleport.html:59 +#: netbox/templates/dcim/consoleserverport.html:60 +#: netbox/templates/dcim/powerfeed.html:114 msgid "Marked as connected" msgstr "Marcado como conectado" -#: templates/circuits/inc/circuit_termination_fields.html:21 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:21 msgid "to" msgstr "para" -#: templates/circuits/inc/circuit_termination_fields.html:31 -#: templates/circuits/inc/circuit_termination_fields.html:32 -#: templates/dcim/frontport.html:80 -#: templates/dcim/inc/connection_endpoints.html:7 -#: templates/dcim/interface.html:154 templates/dcim/rearport.html:76 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:31 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:32 +#: netbox/templates/dcim/frontport.html:80 +#: netbox/templates/dcim/inc/connection_endpoints.html:7 +#: netbox/templates/dcim/interface.html:154 +#: netbox/templates/dcim/rearport.html:76 msgid "Trace" msgstr "Rastrear" -#: templates/circuits/inc/circuit_termination_fields.html:35 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:35 msgid "Edit cable" msgstr "Editar cabo" -#: templates/circuits/inc/circuit_termination_fields.html:40 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:40 msgid "Remove cable" msgstr "Remover cabo" -#: templates/circuits/inc/circuit_termination_fields.html:41 -#: templates/dcim/bulk_disconnect.html:5 -#: templates/dcim/device/consoleports.html:12 -#: templates/dcim/device/consoleserverports.html:12 -#: templates/dcim/device/frontports.html:12 -#: templates/dcim/device/interfaces.html:16 -#: templates/dcim/device/poweroutlets.html:12 -#: templates/dcim/device/powerports.html:12 -#: templates/dcim/device/rearports.html:12 templates/dcim/powerpanel.html:61 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:41 +#: netbox/templates/dcim/bulk_disconnect.html:5 +#: netbox/templates/dcim/device/consoleports.html:12 +#: netbox/templates/dcim/device/consoleserverports.html:12 +#: netbox/templates/dcim/device/frontports.html:12 +#: netbox/templates/dcim/device/interfaces.html:16 +#: netbox/templates/dcim/device/poweroutlets.html:12 +#: netbox/templates/dcim/device/powerports.html:12 +#: netbox/templates/dcim/device/rearports.html:12 +#: netbox/templates/dcim/powerpanel.html:61 msgid "Disconnect" msgstr "Desconectar" -#: templates/circuits/inc/circuit_termination_fields.html:48 -#: templates/dcim/consoleport.html:69 templates/dcim/consoleserverport.html:70 -#: templates/dcim/frontport.html:102 templates/dcim/interface.html:180 -#: templates/dcim/interface.html:200 templates/dcim/powerfeed.html:127 -#: templates/dcim/poweroutlet.html:71 templates/dcim/poweroutlet.html:72 -#: templates/dcim/powerport.html:73 templates/dcim/rearport.html:98 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:48 +#: netbox/templates/dcim/consoleport.html:69 +#: netbox/templates/dcim/consoleserverport.html:70 +#: netbox/templates/dcim/frontport.html:102 +#: netbox/templates/dcim/interface.html:180 +#: netbox/templates/dcim/interface.html:200 +#: netbox/templates/dcim/powerfeed.html:127 +#: netbox/templates/dcim/poweroutlet.html:71 +#: netbox/templates/dcim/poweroutlet.html:72 +#: netbox/templates/dcim/powerport.html:73 +#: netbox/templates/dcim/rearport.html:98 msgid "Connect" msgstr "Conectar" -#: templates/circuits/inc/circuit_termination_fields.html:70 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:70 msgid "Downstream" msgstr "Downstream" -#: templates/circuits/inc/circuit_termination_fields.html:71 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:71 msgid "Upstream" msgstr "Upstream" -#: templates/circuits/inc/circuit_termination_fields.html:80 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:80 msgid "Cross-Connect" msgstr "Conexão Cruzada" -#: templates/circuits/inc/circuit_termination_fields.html:84 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:84 msgid "Patch Panel/Port" msgstr "Patch Panel/Porta" -#: templates/circuits/provider.html:11 +#: netbox/templates/circuits/provider.html:11 msgid "Add circuit" msgstr "Adicionar circuito" -#: templates/circuits/provideraccount.html:17 +#: netbox/templates/circuits/provideraccount.html:17 msgid "Provider Account" msgstr "Conta de Provedor" -#: templates/core/configrevision.html:35 +#: netbox/templates/core/configrevision.html:35 msgid "Configuration Data" msgstr "Dados de Configuração" -#: templates/core/configrevision.html:40 +#: netbox/templates/core/configrevision.html:40 msgid "Comment" msgstr "Comentário" -#: templates/core/configrevision_restore.html:8 -#: templates/core/configrevision_restore.html:25 -#: templates/core/configrevision_restore.html:64 +#: netbox/templates/core/configrevision_restore.html:8 +#: netbox/templates/core/configrevision_restore.html:25 +#: netbox/templates/core/configrevision_restore.html:64 msgid "Restore" msgstr "Restaurar" -#: templates/core/configrevision_restore.html:36 +#: netbox/templates/core/configrevision_restore.html:36 msgid "Parameter" msgstr "Parâmetro" -#: templates/core/configrevision_restore.html:37 +#: netbox/templates/core/configrevision_restore.html:37 msgid "Current Value" msgstr "Valor Atual" -#: templates/core/configrevision_restore.html:38 +#: netbox/templates/core/configrevision_restore.html:38 msgid "New Value" msgstr "Novo Valor" -#: templates/core/configrevision_restore.html:50 +#: netbox/templates/core/configrevision_restore.html:50 msgid "Changed" msgstr "Alterado" -#: templates/core/datafile.html:42 templates/ipam/iprange.html:25 -#: templates/virtualization/virtualdisk.html:29 -#: virtualization/tables/virtualmachines.py:198 +#: netbox/templates/core/datafile.html:42 +#: netbox/templates/ipam/iprange.html:25 +#: netbox/templates/virtualization/virtualdisk.html:29 +#: netbox/virtualization/tables/virtualmachines.py:198 msgid "Size" msgstr "Tamanho" -#: templates/core/datafile.html:43 +#: netbox/templates/core/datafile.html:43 msgid "bytes" msgstr "bytes" -#: templates/core/datafile.html:46 +#: netbox/templates/core/datafile.html:46 msgid "SHA256 Hash" msgstr "Hash SHA256" -#: templates/core/datasource.html:14 templates/core/datasource.html:20 -#: utilities/templates/buttons/sync.html:5 +#: netbox/templates/core/datasource.html:14 +#: netbox/templates/core/datasource.html:20 +#: netbox/utilities/templates/buttons/sync.html:5 msgid "Sync" msgstr "Sincronizar" -#: templates/core/datasource.html:50 +#: netbox/templates/core/datasource.html:50 msgid "Last synced" msgstr "Última sincronização" -#: templates/core/datasource.html:84 +#: netbox/templates/core/datasource.html:84 msgid "Backend" msgstr "Backend" -#: templates/core/datasource.html:99 +#: netbox/templates/core/datasource.html:99 msgid "No parameters defined" msgstr "Nenhum parâmetro definido" -#: templates/core/datasource.html:114 +#: netbox/templates/core/datasource.html:114 msgid "Files" msgstr "Arquivos" -#: templates/core/inc/config_data.html:7 +#: netbox/templates/core/inc/config_data.html:7 msgid "Rack elevations" msgstr "Elevações de rack" -#: templates/core/inc/config_data.html:10 +#: netbox/templates/core/inc/config_data.html:10 msgid "Default unit height" msgstr "Altura padrão" -#: templates/core/inc/config_data.html:14 +#: netbox/templates/core/inc/config_data.html:14 msgid "Default unit width" msgstr "Largura padrão" -#: templates/core/inc/config_data.html:20 +#: netbox/templates/core/inc/config_data.html:20 msgid "Power feeds" msgstr "Fontes de Alimentação" -#: templates/core/inc/config_data.html:23 +#: netbox/templates/core/inc/config_data.html:23 msgid "Default voltage" msgstr "Tensão padrão" -#: templates/core/inc/config_data.html:27 +#: netbox/templates/core/inc/config_data.html:27 msgid "Default amperage" msgstr "Corrente padrão" -#: templates/core/inc/config_data.html:31 +#: netbox/templates/core/inc/config_data.html:31 msgid "Default max utilization" msgstr "Utilização máxima padrão" -#: templates/core/inc/config_data.html:40 +#: netbox/templates/core/inc/config_data.html:40 msgid "Enforce global unique" msgstr "Impor unicidade global" -#: templates/core/inc/config_data.html:83 +#: netbox/templates/core/inc/config_data.html:83 msgid "Paginate count" msgstr "Contagem de paginações" -#: templates/core/inc/config_data.html:87 +#: netbox/templates/core/inc/config_data.html:87 msgid "Max page size" msgstr "Tamanho máximo da página" -#: templates/core/inc/config_data.html:114 +#: netbox/templates/core/inc/config_data.html:114 msgid "User preferences" msgstr "Preferências do usuário" -#: templates/core/inc/config_data.html:141 +#: netbox/templates/core/inc/config_data.html:141 msgid "Job retention" msgstr "Retenção da tarefa" -#: templates/core/job.html:35 templates/core/rq_task.html:12 -#: templates/core/rq_task.html:49 templates/core/rq_task.html:58 +#: netbox/templates/core/job.html:35 netbox/templates/core/rq_task.html:12 +#: netbox/templates/core/rq_task.html:49 netbox/templates/core/rq_task.html:58 msgid "Job" msgstr "Tarefa" -#: templates/core/job.html:58 templates/extras/journalentry.html:26 +#: netbox/templates/core/job.html:58 +#: netbox/templates/extras/journalentry.html:26 msgid "Created By" msgstr "Criado Por" -#: templates/core/job.html:66 +#: netbox/templates/core/job.html:66 msgid "Scheduling" msgstr "Agendamento" -#: templates/core/job.html:77 +#: netbox/templates/core/job.html:77 #, python-format msgid "every %(interval)s minutes" msgstr "a cada %(interval)s minuto(s)" -#: templates/core/objectchange.html:29 -#: templates/users/objectpermission.html:42 +#: netbox/templates/core/objectchange.html:29 +#: netbox/templates/users/objectpermission.html:42 msgid "Change" msgstr "Alteração" -#: templates/core/objectchange.html:79 +#: netbox/templates/core/objectchange.html:79 msgid "Difference" msgstr "Diferença" -#: templates/core/objectchange.html:82 +#: netbox/templates/core/objectchange.html:82 msgid "Previous" msgstr "Anterior" -#: templates/core/objectchange.html:85 +#: netbox/templates/core/objectchange.html:85 msgid "Next" msgstr "Próximo" -#: templates/core/objectchange.html:93 +#: netbox/templates/core/objectchange.html:93 msgid "Object Created" msgstr "Objeto Criado" -#: templates/core/objectchange.html:95 +#: netbox/templates/core/objectchange.html:95 msgid "Object Deleted" msgstr "Objeto Excluído" -#: templates/core/objectchange.html:97 +#: netbox/templates/core/objectchange.html:97 msgid "No Changes" msgstr "Sem Alterações" -#: templates/core/objectchange.html:111 +#: netbox/templates/core/objectchange.html:111 msgid "Pre-Change Data" msgstr "Dados Pré-Alteração" -#: templates/core/objectchange.html:122 +#: netbox/templates/core/objectchange.html:122 msgid "Warning: Comparing non-atomic change to previous change record" msgstr "" "Aviso: Comparando alteração não atômica com o registro de alteração anterior" -#: templates/core/objectchange.html:131 +#: netbox/templates/core/objectchange.html:131 msgid "Post-Change Data" msgstr "Dados Pós-Alteração" -#: templates/core/objectchange.html:162 +#: netbox/templates/core/objectchange.html:162 #, python-format msgid "See All %(count)s Changes" msgstr "Visualizar %(count)s Alterações" -#: templates/core/objectchange_list.html:9 -#: templates/extras/object_changelog.html:15 +#: netbox/templates/core/objectchange_list.html:9 +#: netbox/templates/extras/object_changelog.html:15 msgid "Change log retention" msgstr "Retenção do changelog" -#: templates/core/objectchange_list.html:9 -#: templates/extras/object_changelog.html:15 +#: netbox/templates/core/objectchange_list.html:9 +#: netbox/templates/extras/object_changelog.html:15 msgid "days" msgstr "dias" -#: templates/core/objectchange_list.html:9 -#: templates/extras/object_changelog.html:15 +#: netbox/templates/core/objectchange_list.html:9 +#: netbox/templates/extras/object_changelog.html:15 msgid "Indefinite" msgstr "Indefinido" -#: templates/core/plugin.html:22 +#: netbox/templates/core/plugin.html:22 msgid "Not installed" msgstr "Não instalado" -#: templates/core/plugin.html:33 +#: netbox/templates/core/plugin.html:33 msgid "Overview" msgstr "Visão Geral" -#: templates/core/plugin.html:39 +#: netbox/templates/core/plugin.html:39 msgid "Install" msgstr "Instalar" -#: templates/core/plugin.html:51 +#: netbox/templates/core/plugin.html:51 msgid "Plugin Details" msgstr "Detalhes do Plugin" -#: templates/core/plugin.html:58 +#: netbox/templates/core/plugin.html:58 msgid "Summary" msgstr "Sumário" -#: templates/core/plugin.html:76 +#: netbox/templates/core/plugin.html:76 msgid "License" msgstr "Licença" -#: templates/core/plugin.html:96 +#: netbox/templates/core/plugin.html:96 msgid "Version History" msgstr "Histórico da Versão" -#: templates/core/plugin.html:107 +#: netbox/templates/core/plugin.html:107 msgid "Local Installation Instructions" msgstr "Instruções para Instalação Local" -#: templates/core/rq_queue_list.html:5 templates/core/rq_queue_list.html:13 -#: templates/core/rq_task_list.html:14 templates/core/rq_worker.html:7 +#: netbox/templates/core/rq_queue_list.html:5 +#: netbox/templates/core/rq_queue_list.html:13 +#: netbox/templates/core/rq_task_list.html:14 +#: netbox/templates/core/rq_worker.html:7 msgid "Background Queues" msgstr "Filas em Segundo Plano" -#: templates/core/rq_queue_list.html:24 templates/core/rq_queue_list.html:25 -#: templates/core/rq_worker_list.html:49 templates/core/rq_worker_list.html:50 -#: templates/extras/script_result.html:67 -#: templates/extras/script_result.html:69 -#: templates/inc/table_controls_htmx.html:30 -#: templates/inc/table_controls_htmx.html:33 +#: netbox/templates/core/rq_queue_list.html:24 +#: netbox/templates/core/rq_queue_list.html:25 +#: netbox/templates/core/rq_worker_list.html:49 +#: netbox/templates/core/rq_worker_list.html:50 +#: netbox/templates/extras/script_result.html:67 +#: netbox/templates/extras/script_result.html:69 +#: netbox/templates/inc/table_controls_htmx.html:30 +#: netbox/templates/inc/table_controls_htmx.html:33 msgid "Configure Table" msgstr "Configurar Tabela" -#: templates/core/rq_task.html:29 +#: netbox/templates/core/rq_task.html:29 msgid "Stop" msgstr "Parar" -#: templates/core/rq_task.html:34 +#: netbox/templates/core/rq_task.html:34 msgid "Requeue" msgstr "Reenfileirar" -#: templates/core/rq_task.html:39 +#: netbox/templates/core/rq_task.html:39 msgid "Enqueue" msgstr "Enfileirar" -#: templates/core/rq_task.html:61 +#: netbox/templates/core/rq_task.html:61 msgid "Queue" msgstr "Fila" -#: templates/core/rq_task.html:65 +#: netbox/templates/core/rq_task.html:65 msgid "Timeout" msgstr "Tempo Limite" -#: templates/core/rq_task.html:69 +#: netbox/templates/core/rq_task.html:69 msgid "Result TTL" msgstr "TTL Resultado" -#: templates/core/rq_task.html:89 +#: netbox/templates/core/rq_task.html:89 msgid "Meta" msgstr "Meta" -#: templates/core/rq_task.html:93 +#: netbox/templates/core/rq_task.html:93 msgid "Arguments" msgstr "Argumentos" -#: templates/core/rq_task.html:97 +#: netbox/templates/core/rq_task.html:97 msgid "Keyword Arguments" msgstr "Argumentos Chave" -#: templates/core/rq_task.html:103 +#: netbox/templates/core/rq_task.html:103 msgid "Depends on" msgstr "Depende de" -#: templates/core/rq_task.html:109 +#: netbox/templates/core/rq_task.html:109 msgid "Exception" msgstr "Exceção" -#: templates/core/rq_task_list.html:28 +#: netbox/templates/core/rq_task_list.html:28 msgid "tasks in " msgstr "tarefas em " -#: templates/core/rq_task_list.html:33 +#: netbox/templates/core/rq_task_list.html:33 msgid "Queued Jobs" msgstr "Trabalhos em Fila" -#: templates/core/rq_task_list.html:64 templates/extras/script_result.html:86 +#: netbox/templates/core/rq_task_list.html:64 +#: netbox/templates/extras/script_result.html:86 #, python-format msgid "" "Select all %(count)s %(object_type_plural)s matching query" @@ -11610,382 +12368,400 @@ msgstr "" "Selecione todas as %(count)s %(object_type_plural)s " "consultas correspondentes" -#: templates/core/rq_worker.html:10 +#: netbox/templates/core/rq_worker.html:10 msgid "Worker Info" msgstr "Informações sobre o Agente" -#: templates/core/rq_worker.html:31 templates/core/rq_worker.html:40 +#: netbox/templates/core/rq_worker.html:31 +#: netbox/templates/core/rq_worker.html:40 msgid "Worker" msgstr "Agente" -#: templates/core/rq_worker.html:55 +#: netbox/templates/core/rq_worker.html:55 msgid "Queues" msgstr "Filas" -#: templates/core/rq_worker.html:63 +#: netbox/templates/core/rq_worker.html:63 msgid "Curent Job" msgstr "Tarefa Atual" -#: templates/core/rq_worker.html:67 +#: netbox/templates/core/rq_worker.html:67 msgid "Successful job count" msgstr "Total de tarefas bem-sucedidas" -#: templates/core/rq_worker.html:71 +#: netbox/templates/core/rq_worker.html:71 msgid "Failed job count" msgstr "Total de tarefas falhadas" -#: templates/core/rq_worker.html:75 +#: netbox/templates/core/rq_worker.html:75 msgid "Total working time" msgstr "Tempo total de execução" -#: templates/core/rq_worker.html:76 +#: netbox/templates/core/rq_worker.html:76 msgid "seconds" msgstr "segundos" -#: templates/core/rq_worker_list.html:13 templates/core/rq_worker_list.html:21 +#: netbox/templates/core/rq_worker_list.html:13 +#: netbox/templates/core/rq_worker_list.html:21 msgid "Background Workers" msgstr "Agentes em Background" -#: templates/core/rq_worker_list.html:29 +#: netbox/templates/core/rq_worker_list.html:29 #, python-format msgid "Workers in %(queue_name)s" msgstr "Agentes em %(queue_name)s" -#: templates/core/system.html:11 utilities/templates/buttons/export.html:4 +#: netbox/templates/core/system.html:11 +#: netbox/utilities/templates/buttons/export.html:4 msgid "Export" msgstr "Exportar" -#: templates/core/system.html:28 +#: netbox/templates/core/system.html:28 msgid "System Status" msgstr "Status do Sistema" -#: templates/core/system.html:31 +#: netbox/templates/core/system.html:31 msgid "NetBox release" msgstr "Versão do NetBox" -#: templates/core/system.html:44 +#: netbox/templates/core/system.html:44 msgid "Django version" msgstr "Versão do Django" -#: templates/core/system.html:48 +#: netbox/templates/core/system.html:48 msgid "PostgreSQL version" msgstr "Versão do PostgreSQL" -#: templates/core/system.html:52 +#: netbox/templates/core/system.html:52 msgid "Database name" msgstr "Nome do banco de dados" -#: templates/core/system.html:56 +#: netbox/templates/core/system.html:56 msgid "Database size" msgstr "Tamanho do banco de dados" -#: templates/core/system.html:61 +#: netbox/templates/core/system.html:61 msgid "Unavailable" msgstr "Indisponível" -#: templates/core/system.html:66 +#: netbox/templates/core/system.html:66 msgid "RQ workers" msgstr "Agentes RQ" -#: templates/core/system.html:69 +#: netbox/templates/core/system.html:69 msgid "default queue" msgstr "fila padrão" -#: templates/core/system.html:73 +#: netbox/templates/core/system.html:73 msgid "System time" msgstr "Hora do sistema" -#: templates/core/system.html:85 +#: netbox/templates/core/system.html:85 msgid "Current Configuration" msgstr "Configuração Atual" -#: templates/dcim/bulk_disconnect.html:9 +#: netbox/templates/dcim/bulk_disconnect.html:9 #, python-format msgid "" "Are you sure you want to disconnect these %(count)s %(obj_type_plural)s?" msgstr "" "Tem certeza de que deseja desconectar estes %(count)s %(obj_type_plural)s?" -#: templates/dcim/cable_trace.html:10 +#: netbox/templates/dcim/cable_trace.html:10 #, python-format msgid "Cable Trace for %(object_type)s %(object)s" msgstr "Rastrear Cabo para %(object_type)s %(object)s" -#: templates/dcim/cable_trace.html:24 templates/dcim/inc/rack_elevation.html:7 +#: netbox/templates/dcim/cable_trace.html:24 +#: netbox/templates/dcim/inc/rack_elevation.html:7 msgid "Download SVG" msgstr "Baixar SVG" -#: templates/dcim/cable_trace.html:30 +#: netbox/templates/dcim/cable_trace.html:30 msgid "Asymmetric Path" msgstr "Caminho Assimétrico" -#: templates/dcim/cable_trace.html:31 +#: netbox/templates/dcim/cable_trace.html:31 msgid "The nodes below have no links and result in an asymmetric path" msgstr "Os nós abaixo não possuem links e resultam em um caminho assimétrico" -#: templates/dcim/cable_trace.html:38 +#: netbox/templates/dcim/cable_trace.html:38 msgid "Path split" msgstr "Divisão de caminho" -#: templates/dcim/cable_trace.html:39 +#: netbox/templates/dcim/cable_trace.html:39 msgid "Select a node below to continue" msgstr "Selecione um nó abaixo para continuar" -#: templates/dcim/cable_trace.html:55 +#: netbox/templates/dcim/cable_trace.html:55 msgid "Trace Completed" msgstr "Rastreamento Concluído" -#: templates/dcim/cable_trace.html:58 +#: netbox/templates/dcim/cable_trace.html:58 msgid "Total segments" msgstr "Total de segmentos" -#: templates/dcim/cable_trace.html:62 +#: netbox/templates/dcim/cable_trace.html:62 msgid "Total length" msgstr "Comprimento total" -#: templates/dcim/cable_trace.html:77 +#: netbox/templates/dcim/cable_trace.html:77 msgid "No paths found" msgstr "Nenhum caminho encontrado" -#: templates/dcim/cable_trace.html:85 +#: netbox/templates/dcim/cable_trace.html:85 msgid "Related Paths" msgstr "Caminhos Relacionados" -#: templates/dcim/cable_trace.html:89 +#: netbox/templates/dcim/cable_trace.html:89 msgid "Origin" msgstr "Origem" -#: templates/dcim/cable_trace.html:90 +#: netbox/templates/dcim/cable_trace.html:90 msgid "Destination" msgstr "Destino" -#: templates/dcim/cable_trace.html:91 +#: netbox/templates/dcim/cable_trace.html:91 msgid "Segments" msgstr "Segmentos" -#: templates/dcim/cable_trace.html:104 +#: netbox/templates/dcim/cable_trace.html:104 msgid "Incomplete" msgstr "Incompleto" -#: templates/dcim/component_list.html:14 +#: netbox/templates/dcim/component_list.html:14 msgid "Rename Selected" msgstr "Renomear Selecionado" -#: templates/dcim/consoleport.html:65 templates/dcim/consoleserverport.html:66 -#: templates/dcim/frontport.html:98 templates/dcim/interface.html:176 -#: templates/dcim/poweroutlet.html:69 templates/dcim/powerport.html:69 +#: netbox/templates/dcim/consoleport.html:65 +#: netbox/templates/dcim/consoleserverport.html:66 +#: netbox/templates/dcim/frontport.html:98 +#: netbox/templates/dcim/interface.html:176 +#: netbox/templates/dcim/poweroutlet.html:69 +#: netbox/templates/dcim/powerport.html:69 msgid "Not Connected" msgstr "Não Conectado" -#: templates/dcim/device.html:34 +#: netbox/templates/dcim/device.html:34 msgid "Highlight device in rack" msgstr "Destacar o dispositivo no rack" -#: templates/dcim/device.html:55 +#: netbox/templates/dcim/device.html:55 msgid "Not racked" msgstr "Não montado em rack" -#: templates/dcim/device.html:62 templates/dcim/site.html:94 +#: netbox/templates/dcim/device.html:62 netbox/templates/dcim/site.html:94 msgid "GPS Coordinates" msgstr "Coordenadas GPS" -#: templates/dcim/device.html:68 templates/dcim/site.html:81 -#: templates/dcim/site.html:100 +#: netbox/templates/dcim/device.html:68 netbox/templates/dcim/site.html:81 +#: netbox/templates/dcim/site.html:100 msgid "Map" msgstr "Mapa" -#: templates/dcim/device.html:108 templates/dcim/inventoryitem.html:56 -#: templates/dcim/module.html:81 templates/dcim/modulebay.html:74 -#: templates/dcim/rack.html:61 +#: netbox/templates/dcim/device.html:108 +#: netbox/templates/dcim/inventoryitem.html:56 +#: netbox/templates/dcim/module.html:81 +#: netbox/templates/dcim/modulebay.html:74 netbox/templates/dcim/rack.html:61 msgid "Asset Tag" msgstr "Etiqueta de Patrimônio" -#: templates/dcim/device.html:123 +#: netbox/templates/dcim/device.html:123 msgid "View Virtual Chassis" msgstr "Exibir Chassi Virtual" -#: templates/dcim/device.html:164 +#: netbox/templates/dcim/device.html:164 msgid "Create VDC" msgstr "Criar Contexto de Dispositivo Virtual" -#: templates/dcim/device.html:175 templates/dcim/device_edit.html:64 -#: virtualization/forms/model_forms.py:223 +#: netbox/templates/dcim/device.html:175 +#: netbox/templates/dcim/device_edit.html:64 +#: netbox/virtualization/forms/model_forms.py:223 msgid "Management" msgstr "Gestão" -#: templates/dcim/device.html:195 templates/dcim/device.html:211 -#: templates/dcim/device.html:227 -#: templates/virtualization/virtualmachine.html:57 -#: templates/virtualization/virtualmachine.html:73 +#: netbox/templates/dcim/device.html:195 netbox/templates/dcim/device.html:211 +#: netbox/templates/dcim/device.html:227 +#: netbox/templates/virtualization/virtualmachine.html:57 +#: netbox/templates/virtualization/virtualmachine.html:73 msgid "NAT for" msgstr "NAT para" -#: templates/dcim/device.html:197 templates/dcim/device.html:213 -#: templates/dcim/device.html:229 -#: templates/virtualization/virtualmachine.html:59 -#: templates/virtualization/virtualmachine.html:75 +#: netbox/templates/dcim/device.html:197 netbox/templates/dcim/device.html:213 +#: netbox/templates/dcim/device.html:229 +#: netbox/templates/virtualization/virtualmachine.html:59 +#: netbox/templates/virtualization/virtualmachine.html:75 msgid "NAT" msgstr "NAT" -#: templates/dcim/device.html:252 templates/dcim/rack.html:73 +#: netbox/templates/dcim/device.html:252 netbox/templates/dcim/rack.html:73 msgid "Power Utilization" msgstr "Utilização de Energia" -#: templates/dcim/device.html:256 +#: netbox/templates/dcim/device.html:256 msgid "Input" msgstr "Entrada" -#: templates/dcim/device.html:257 +#: netbox/templates/dcim/device.html:257 msgid "Outlets" msgstr "Tomadas" -#: templates/dcim/device.html:258 +#: netbox/templates/dcim/device.html:258 msgid "Allocated" msgstr "Alocado" -#: templates/dcim/device.html:268 templates/dcim/device.html:270 -#: templates/dcim/device.html:286 templates/dcim/powerfeed.html:67 +#: netbox/templates/dcim/device.html:268 netbox/templates/dcim/device.html:270 +#: netbox/templates/dcim/device.html:286 +#: netbox/templates/dcim/powerfeed.html:67 msgid "VA" msgstr "VA" -#: templates/dcim/device.html:280 +#: netbox/templates/dcim/device.html:280 msgctxt "Leg of a power feed" msgid "Leg" msgstr "Ramal" -#: templates/dcim/device.html:306 -#: templates/virtualization/virtualmachine.html:158 +#: netbox/templates/dcim/device.html:306 +#: netbox/templates/virtualization/virtualmachine.html:158 msgid "Add a service" msgstr "Adicionar um serviço" -#: templates/dcim/device/base.html:21 templates/dcim/device_list.html:9 -#: templates/dcim/devicetype/base.html:18 -#: templates/dcim/inc/moduletype_buttons.html:9 templates/dcim/module.html:18 -#: templates/virtualization/virtualmachine/base.html:22 -#: templates/virtualization/virtualmachine_list.html:8 +#: netbox/templates/dcim/device/base.html:21 +#: netbox/templates/dcim/device_list.html:9 +#: netbox/templates/dcim/devicetype/base.html:18 +#: netbox/templates/dcim/inc/moduletype_buttons.html:9 +#: netbox/templates/dcim/module.html:18 +#: netbox/templates/virtualization/virtualmachine/base.html:22 +#: netbox/templates/virtualization/virtualmachine_list.html:8 msgid "Add Components" msgstr "Adicionar Componentes" -#: templates/dcim/device/consoleports.html:24 +#: netbox/templates/dcim/device/consoleports.html:24 msgid "Add Console Ports" msgstr "Adicionar Portas de Console" -#: templates/dcim/device/consoleserverports.html:24 +#: netbox/templates/dcim/device/consoleserverports.html:24 msgid "Add Console Server Ports" msgstr "Adicionar Portas de Servidor de Console" -#: templates/dcim/device/devicebays.html:10 +#: netbox/templates/dcim/device/devicebays.html:10 msgid "Add Device Bays" msgstr "Adicionar Compartimentos de Dispositivos" -#: templates/dcim/device/frontports.html:24 +#: netbox/templates/dcim/device/frontports.html:24 msgid "Add Front Ports" msgstr "Adicionar Portas Frontais" -#: templates/dcim/device/inc/interface_table_controls.html:9 +#: netbox/templates/dcim/device/inc/interface_table_controls.html:9 msgid "Hide Enabled" msgstr "Ocultar Ativado" -#: templates/dcim/device/inc/interface_table_controls.html:10 +#: netbox/templates/dcim/device/inc/interface_table_controls.html:10 msgid "Hide Disabled" msgstr "Ocultar Desativado" -#: templates/dcim/device/inc/interface_table_controls.html:11 +#: netbox/templates/dcim/device/inc/interface_table_controls.html:11 msgid "Hide Virtual" msgstr "Ocultar Virtual" -#: templates/dcim/device/inc/interface_table_controls.html:12 +#: netbox/templates/dcim/device/inc/interface_table_controls.html:12 msgid "Hide Disconnected" msgstr "Ocultar Desconectado" -#: templates/dcim/device/interfaces.html:27 +#: netbox/templates/dcim/device/interfaces.html:27 msgid "Add Interfaces" msgstr "Adicionar Interfaces" -#: templates/dcim/device/inventory.html:10 -#: templates/dcim/inc/panels/inventory_items.html:10 +#: netbox/templates/dcim/device/inventory.html:10 +#: netbox/templates/dcim/inc/panels/inventory_items.html:10 msgid "Add Inventory Item" msgstr "Adicionar Item de Inventário" -#: templates/dcim/device/modulebays.html:10 +#: netbox/templates/dcim/device/modulebays.html:10 msgid "Add Module Bays" msgstr "Adicionar Compartimentos de Módulos" -#: templates/dcim/device/poweroutlets.html:24 +#: netbox/templates/dcim/device/poweroutlets.html:24 msgid "Add Power Outlets" msgstr "Adicionar Tomadas Elétricas" -#: templates/dcim/device/powerports.html:24 +#: netbox/templates/dcim/device/powerports.html:24 msgid "Add Power Port" msgstr "Adicionar Porta de Alimentação" -#: templates/dcim/device/rearports.html:24 +#: netbox/templates/dcim/device/rearports.html:24 msgid "Add Rear Ports" msgstr "Adicionar Portas Traseiras" -#: templates/dcim/device/render_config.html:5 -#: templates/virtualization/virtualmachine/render_config.html:5 +#: netbox/templates/dcim/device/render_config.html:5 +#: netbox/templates/virtualization/virtualmachine/render_config.html:5 msgid "Config" msgstr "Configuração" -#: templates/dcim/device/render_config.html:35 -#: templates/virtualization/virtualmachine/render_config.html:35 +#: netbox/templates/dcim/device/render_config.html:35 +#: netbox/templates/virtualization/virtualmachine/render_config.html:35 msgid "Context Data" msgstr "Dados do Contexto" -#: templates/dcim/device/render_config.html:53 -#: templates/virtualization/virtualmachine/render_config.html:53 +#: netbox/templates/dcim/device/render_config.html:55 +#: netbox/templates/virtualization/virtualmachine/render_config.html:55 msgid "Rendered Config" msgstr "Configuração Renderizada" -#: templates/dcim/device/render_config.html:55 -#: templates/virtualization/virtualmachine/render_config.html:55 +#: netbox/templates/dcim/device/render_config.html:57 +#: netbox/templates/virtualization/virtualmachine/render_config.html:57 msgid "Download" msgstr "Baixar" -#: templates/dcim/device/render_config.html:61 -#: templates/virtualization/virtualmachine/render_config.html:61 -msgid "No configuration template found" -msgstr "Nenhum modelo de configuração encontrado" +#: netbox/templates/dcim/device/render_config.html:64 +#: netbox/templates/virtualization/virtualmachine/render_config.html:64 +msgid "Error rendering template" +msgstr "Erro ao renderizar o modelo" -#: templates/dcim/device_edit.html:44 +#: netbox/templates/dcim/device/render_config.html:70 +msgid "No configuration template has been assigned for this device." +msgstr "Nenhum modelo de configuração foi atribuído para este dispositivo." + +#: netbox/templates/dcim/device_edit.html:44 msgid "Parent Bay" msgstr "Compartimento Pai" -#: templates/dcim/device_edit.html:48 -#: utilities/templates/form_helpers/render_field.html:22 +#: netbox/templates/dcim/device_edit.html:48 +#: netbox/utilities/templates/form_helpers/render_field.html:22 msgid "Regenerate Slug" msgstr "Regenerar Slug" -#: templates/dcim/device_edit.html:49 templates/generic/bulk_remove.html:21 -#: utilities/templates/helpers/table_config_form.html:23 +#: netbox/templates/dcim/device_edit.html:49 +#: netbox/templates/generic/bulk_remove.html:21 +#: netbox/utilities/templates/helpers/table_config_form.html:23 msgid "Remove" msgstr "Remover" -#: templates/dcim/device_edit.html:110 +#: netbox/templates/dcim/device_edit.html:110 msgid "Local Config Context Data" msgstr "Dados de Contexto de Configuração Local" -#: templates/dcim/device_list.html:82 templates/generic/bulk_rename.html:57 -#: templates/virtualization/virtualmachine/interfaces.html:11 -#: templates/virtualization/virtualmachine/virtual_disks.html:11 +#: netbox/templates/dcim/device_list.html:82 +#: netbox/templates/generic/bulk_rename.html:57 +#: netbox/templates/virtualization/virtualmachine/interfaces.html:11 +#: netbox/templates/virtualization/virtualmachine/virtual_disks.html:11 msgid "Rename" msgstr "Renomear" -#: templates/dcim/devicebay.html:17 +#: netbox/templates/dcim/devicebay.html:17 msgid "Device Bay" msgstr "Compartimento de Dispositivos" -#: templates/dcim/devicebay.html:43 +#: netbox/templates/dcim/devicebay.html:43 msgid "Installed Device" msgstr "Dispositivo Instalado" -#: templates/dcim/devicebay_depopulate.html:6 +#: netbox/templates/dcim/devicebay_depopulate.html:6 #, python-format msgid "Remove %(device)s from %(device_bay)s?" msgstr "Remover %(device)s de %(device_bay)s?" -#: templates/dcim/devicebay_depopulate.html:13 +#: netbox/templates/dcim/devicebay_depopulate.html:13 #, python-format msgid "" "Are you sure you want to remove %(device)s from " @@ -11994,430 +12770,449 @@ msgstr "" "Tem certeza de que deseja remover %(device)s de " "%(device_bay)s?" -#: templates/dcim/devicebay_populate.html:13 +#: netbox/templates/dcim/devicebay_populate.html:13 msgid "Populate" msgstr "Popular" -#: templates/dcim/devicebay_populate.html:22 +#: netbox/templates/dcim/devicebay_populate.html:22 msgid "Bay" msgstr "Compartimento" -#: templates/dcim/devicerole.html:14 templates/dcim/platform.html:17 +#: netbox/templates/dcim/devicerole.html:14 +#: netbox/templates/dcim/platform.html:17 msgid "Add Device" msgstr "Adicionar Dispositivo" -#: templates/dcim/devicerole.html:40 +#: netbox/templates/dcim/devicerole.html:40 msgid "VM Role" msgstr "Função da VM" -#: templates/dcim/devicetype.html:18 templates/dcim/moduletype.html:29 +#: netbox/templates/dcim/devicetype.html:18 +#: netbox/templates/dcim/moduletype.html:29 msgid "Model Name" msgstr "Nome do Modelo" -#: templates/dcim/devicetype.html:25 templates/dcim/moduletype.html:33 +#: netbox/templates/dcim/devicetype.html:25 +#: netbox/templates/dcim/moduletype.html:33 msgid "Part Number" msgstr "Part Number" -#: templates/dcim/devicetype.html:41 +#: netbox/templates/dcim/devicetype.html:41 msgid "Exclude From Utilization" msgstr "Excluir da Utilização" -#: templates/dcim/devicetype.html:59 +#: netbox/templates/dcim/devicetype.html:59 msgid "Parent/Child" msgstr "Pai/Filho" -#: templates/dcim/devicetype.html:71 +#: netbox/templates/dcim/devicetype.html:71 msgid "Front Image" msgstr "Imagem Frontal" -#: templates/dcim/devicetype.html:83 +#: netbox/templates/dcim/devicetype.html:83 msgid "Rear Image" msgstr "Imagem Traseira" -#: templates/dcim/frontport.html:54 +#: netbox/templates/dcim/frontport.html:54 msgid "Rear Port Position" msgstr "Posição da Porta Traseira" -#: templates/dcim/frontport.html:72 templates/dcim/interface.html:144 -#: templates/dcim/poweroutlet.html:63 templates/dcim/powerport.html:63 -#: templates/dcim/rearport.html:68 +#: netbox/templates/dcim/frontport.html:72 +#: netbox/templates/dcim/interface.html:144 +#: netbox/templates/dcim/poweroutlet.html:63 +#: netbox/templates/dcim/powerport.html:63 +#: netbox/templates/dcim/rearport.html:68 msgid "Marked as Connected" msgstr "Marcado como Conectado" -#: templates/dcim/frontport.html:86 templates/dcim/rearport.html:82 +#: netbox/templates/dcim/frontport.html:86 +#: netbox/templates/dcim/rearport.html:82 msgid "Connection Status" msgstr "Status da Conexão" -#: templates/dcim/htmx/cable_edit.html:10 +#: netbox/templates/dcim/htmx/cable_edit.html:10 msgid "A Side" msgstr "Lado A" -#: templates/dcim/htmx/cable_edit.html:30 +#: netbox/templates/dcim/htmx/cable_edit.html:30 msgid "B Side" msgstr "Lado B" -#: templates/dcim/inc/cable_termination.html:65 +#: netbox/templates/dcim/inc/cable_termination.html:65 msgid "No termination" msgstr "Sem Terminação" -#: templates/dcim/inc/cable_toggle_buttons.html:3 +#: netbox/templates/dcim/inc/cable_toggle_buttons.html:3 msgid "Mark Planned" msgstr "Marcar Planejado" -#: templates/dcim/inc/cable_toggle_buttons.html:6 +#: netbox/templates/dcim/inc/cable_toggle_buttons.html:6 msgid "Mark Installed" msgstr "Marcar Instalado" -#: templates/dcim/inc/connection_endpoints.html:13 +#: netbox/templates/dcim/inc/connection_endpoints.html:13 msgid "Path Status" msgstr "Status do Caminho" -#: templates/dcim/inc/connection_endpoints.html:18 +#: netbox/templates/dcim/inc/connection_endpoints.html:18 msgid "Not Reachable" msgstr "Não Acessível" -#: templates/dcim/inc/connection_endpoints.html:23 +#: netbox/templates/dcim/inc/connection_endpoints.html:23 msgid "Path Endpoints" msgstr "Endpoints do Caminho" -#: templates/dcim/inc/endpoint_connection.html:8 -#: templates/dcim/powerfeed.html:120 templates/dcim/rearport.html:94 +#: netbox/templates/dcim/inc/endpoint_connection.html:8 +#: netbox/templates/dcim/powerfeed.html:120 +#: netbox/templates/dcim/rearport.html:94 msgid "Not connected" msgstr "Não conectado" -#: templates/dcim/inc/interface_vlans_table.html:6 +#: netbox/templates/dcim/inc/interface_vlans_table.html:6 msgid "Untagged" msgstr "Não tagueada" -#: templates/dcim/inc/interface_vlans_table.html:37 +#: netbox/templates/dcim/inc/interface_vlans_table.html:37 msgid "No VLANs Assigned" msgstr "Nenhuma VLAN Associada" -#: templates/dcim/inc/interface_vlans_table.html:44 -#: templates/ipam/prefix_list.html:16 templates/ipam/prefix_list.html:33 +#: netbox/templates/dcim/inc/interface_vlans_table.html:44 +#: netbox/templates/ipam/prefix_list.html:16 +#: netbox/templates/ipam/prefix_list.html:33 msgid "Clear" msgstr "Limpar" -#: templates/dcim/inc/interface_vlans_table.html:47 +#: netbox/templates/dcim/inc/interface_vlans_table.html:47 msgid "Clear All" msgstr "Limpar Tudo" -#: templates/dcim/inc/panels/racktype_dimensions.html:38 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:38 msgid "Mounting Depth" msgstr "Profundidade de Montagem" -#: templates/dcim/inc/panels/racktype_numbering.html:6 +#: netbox/templates/dcim/inc/panels/racktype_numbering.html:6 msgid "Starting Unit" msgstr "Unidade Inicial" -#: templates/dcim/inc/panels/racktype_numbering.html:10 +#: netbox/templates/dcim/inc/panels/racktype_numbering.html:10 msgid "Descending Units" msgstr "Unidades Descendentes" -#: templates/dcim/inc/rack_elevation.html:3 +#: netbox/templates/dcim/inc/rack_elevation.html:3 msgid "Rack elevation" msgstr "Elevação de rack" -#: templates/dcim/interface.html:17 +#: netbox/templates/dcim/interface.html:17 msgid "Add Child Interface" msgstr "Adicionar Interface Filha" -#: templates/dcim/interface.html:50 +#: netbox/templates/dcim/interface.html:50 msgid "Speed/Duplex" msgstr "Velocidade/Duplex" -#: templates/dcim/interface.html:73 +#: netbox/templates/dcim/interface.html:73 msgid "PoE Mode" msgstr "Modo do PoE" -#: templates/dcim/interface.html:77 +#: netbox/templates/dcim/interface.html:77 msgid "PoE Type" msgstr "Tipo de PoE" -#: templates/dcim/interface.html:81 -#: templates/virtualization/vminterface.html:63 +#: netbox/templates/dcim/interface.html:81 +#: netbox/templates/virtualization/vminterface.html:63 msgid "802.1Q Mode" msgstr "Modo 802.1Q" -#: templates/dcim/interface.html:125 -#: templates/virtualization/vminterface.html:59 +#: netbox/templates/dcim/interface.html:125 +#: netbox/templates/virtualization/vminterface.html:59 msgid "MAC Address" msgstr "Endereço MAC" -#: templates/dcim/interface.html:151 +#: netbox/templates/dcim/interface.html:151 msgid "Wireless Link" msgstr "Link Wireless" -#: templates/dcim/interface.html:218 vpn/choices.py:55 +#: netbox/templates/dcim/interface.html:218 netbox/vpn/choices.py:63 msgid "Peer" msgstr "Par" -#: templates/dcim/interface.html:230 -#: templates/wireless/inc/wirelesslink_interface.html:26 +#: netbox/templates/dcim/interface.html:230 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:26 msgid "Channel" msgstr "Canal" -#: templates/dcim/interface.html:239 -#: templates/wireless/inc/wirelesslink_interface.html:32 +#: netbox/templates/dcim/interface.html:239 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:32 msgid "Channel Frequency" msgstr "Frequência do Canal" -#: templates/dcim/interface.html:242 templates/dcim/interface.html:250 -#: templates/dcim/interface.html:261 templates/dcim/interface.html:269 +#: netbox/templates/dcim/interface.html:242 +#: netbox/templates/dcim/interface.html:250 +#: netbox/templates/dcim/interface.html:261 +#: netbox/templates/dcim/interface.html:269 msgid "MHz" msgstr "MHz" -#: templates/dcim/interface.html:258 -#: templates/wireless/inc/wirelesslink_interface.html:42 +#: netbox/templates/dcim/interface.html:258 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:42 msgid "Channel Width" msgstr "Largura do Canal" -#: templates/dcim/interface.html:285 templates/wireless/wirelesslan.html:14 -#: templates/wireless/wirelesslink.html:21 wireless/forms/bulk_edit.py:60 -#: wireless/forms/bulk_edit.py:102 wireless/forms/filtersets.py:40 -#: wireless/forms/filtersets.py:80 wireless/models.py:82 -#: wireless/models.py:156 wireless/tables/wirelesslan.py:44 +#: netbox/templates/dcim/interface.html:285 +#: netbox/templates/wireless/wirelesslan.html:14 +#: netbox/templates/wireless/wirelesslink.html:21 +#: netbox/wireless/forms/bulk_edit.py:60 +#: netbox/wireless/forms/bulk_edit.py:102 +#: netbox/wireless/forms/filtersets.py:40 +#: netbox/wireless/forms/filtersets.py:80 netbox/wireless/models.py:82 +#: netbox/wireless/models.py:156 netbox/wireless/tables/wirelesslan.py:44 msgid "SSID" msgstr "SSID" -#: templates/dcim/interface.html:305 +#: netbox/templates/dcim/interface.html:305 msgid "LAG Members" msgstr "Membros do LAG" -#: templates/dcim/interface.html:323 +#: netbox/templates/dcim/interface.html:323 msgid "No member interfaces" msgstr "Nenhuma interface membro" -#: templates/dcim/interface.html:343 templates/ipam/fhrpgroup.html:73 -#: templates/ipam/iprange/ip_addresses.html:7 -#: templates/ipam/prefix/ip_addresses.html:7 -#: templates/virtualization/vminterface.html:89 +#: netbox/templates/dcim/interface.html:343 +#: netbox/templates/ipam/fhrpgroup.html:73 +#: netbox/templates/ipam/iprange/ip_addresses.html:7 +#: netbox/templates/ipam/prefix/ip_addresses.html:7 +#: netbox/templates/virtualization/vminterface.html:89 msgid "Add IP Address" msgstr "Adicionar Endereço IP" -#: templates/dcim/inventoryitem.html:24 +#: netbox/templates/dcim/inventoryitem.html:24 msgid "Parent Item" msgstr "Item Pai" -#: templates/dcim/inventoryitem.html:48 +#: netbox/templates/dcim/inventoryitem.html:48 msgid "Part ID" msgstr "Part ID" -#: templates/dcim/location.html:17 +#: netbox/templates/dcim/location.html:17 msgid "Add Child Location" msgstr "Adicionar Sub-Localização" -#: templates/dcim/location.html:77 +#: netbox/templates/dcim/location.html:77 msgid "Child Locations" msgstr "Sub-Localizações" -#: templates/dcim/location.html:81 templates/dcim/site.html:131 +#: netbox/templates/dcim/location.html:81 netbox/templates/dcim/site.html:131 msgid "Add a Location" msgstr "Adicionar uma localização" -#: templates/dcim/location.html:94 templates/dcim/site.html:144 +#: netbox/templates/dcim/location.html:94 netbox/templates/dcim/site.html:144 msgid "Add a Device" msgstr "Adicionar um Dispositivo" -#: templates/dcim/manufacturer.html:16 +#: netbox/templates/dcim/manufacturer.html:16 msgid "Add Device Type" msgstr "Adicionar Tipo de Dispositivo" -#: templates/dcim/manufacturer.html:21 +#: netbox/templates/dcim/manufacturer.html:21 msgid "Add Module Type" msgstr "Adicionar Tipo de Módulo" -#: templates/dcim/powerfeed.html:53 +#: netbox/templates/dcim/powerfeed.html:53 msgid "Connected Device" msgstr "Dispositivo Conectado" -#: templates/dcim/powerfeed.html:63 +#: netbox/templates/dcim/powerfeed.html:63 msgid "Utilization (Allocated" msgstr "Utilização (Alocada)" -#: templates/dcim/powerfeed.html:80 +#: netbox/templates/dcim/powerfeed.html:80 msgid "Electrical Characteristics" msgstr "Características Elétricas" -#: templates/dcim/powerfeed.html:88 +#: netbox/templates/dcim/powerfeed.html:88 msgctxt "Abbreviation for volts" msgid "V" msgstr "V" -#: templates/dcim/powerfeed.html:92 +#: netbox/templates/dcim/powerfeed.html:92 msgctxt "Abbreviation for amperes" msgid "A" msgstr "A" -#: templates/dcim/poweroutlet.html:48 +#: netbox/templates/dcim/poweroutlet.html:48 msgid "Feed Leg" msgstr "Ramal de Alimentação" -#: templates/dcim/powerpanel.html:72 +#: netbox/templates/dcim/powerpanel.html:72 msgid "Add Power Feeds" msgstr "Adicionar Fontes de Alimentação" -#: templates/dcim/powerport.html:44 +#: netbox/templates/dcim/powerport.html:44 msgid "Maximum Draw" msgstr "Consumo Máximo" -#: templates/dcim/powerport.html:48 +#: netbox/templates/dcim/powerport.html:48 msgid "Allocated Draw" msgstr "Consumo Alocado" -#: templates/dcim/rack.html:69 +#: netbox/templates/dcim/rack.html:69 msgid "Space Utilization" msgstr "Espaço Utilizado" -#: templates/dcim/rack.html:84 templates/dcim/racktype.html:44 +#: netbox/templates/dcim/rack.html:84 netbox/templates/dcim/racktype.html:44 msgid "Rack Weight" msgstr "Peso do Rack" -#: templates/dcim/rack.html:94 templates/dcim/racktype.html:54 +#: netbox/templates/dcim/rack.html:94 netbox/templates/dcim/racktype.html:54 msgid "Maximum Weight" msgstr "Peso Máximo" -#: templates/dcim/rack.html:104 +#: netbox/templates/dcim/rack.html:104 msgid "Total Weight" msgstr "Peso Total" -#: templates/dcim/rack.html:125 templates/dcim/rack_elevation_list.html:15 +#: netbox/templates/dcim/rack.html:125 +#: netbox/templates/dcim/rack_elevation_list.html:15 msgid "Images and Labels" msgstr "Imagens e Rótulos" -#: templates/dcim/rack.html:126 templates/dcim/rack_elevation_list.html:16 +#: netbox/templates/dcim/rack.html:126 +#: netbox/templates/dcim/rack_elevation_list.html:16 msgid "Images only" msgstr "Somente imagens" -#: templates/dcim/rack.html:127 templates/dcim/rack_elevation_list.html:17 +#: netbox/templates/dcim/rack.html:127 +#: netbox/templates/dcim/rack_elevation_list.html:17 msgid "Labels only" msgstr "Somente rótulos" -#: templates/dcim/rack/reservations.html:8 +#: netbox/templates/dcim/rack/reservations.html:8 msgid "Add reservation" msgstr "Adicionar reserva" -#: templates/dcim/rack_elevation_list.html:12 +#: netbox/templates/dcim/rack_elevation_list.html:12 msgid "View List" msgstr "Exibir Lista" -#: templates/dcim/rack_elevation_list.html:14 +#: netbox/templates/dcim/rack_elevation_list.html:14 msgid "Select rack view" msgstr "Selecione visão do rack" -#: templates/dcim/rack_elevation_list.html:25 +#: netbox/templates/dcim/rack_elevation_list.html:25 msgid "Sort By" msgstr "Ordenar Por" -#: templates/dcim/rack_elevation_list.html:74 +#: netbox/templates/dcim/rack_elevation_list.html:74 msgid "No Racks Found" msgstr "Nenhum Rack Localizado" -#: templates/dcim/rack_list.html:8 +#: netbox/templates/dcim/rack_list.html:8 msgid "View Elevations" msgstr "Exibir Elevações" -#: templates/dcim/rackreservation.html:42 +#: netbox/templates/dcim/rackreservation.html:42 msgid "Reservation Details" msgstr "Detalhes da Reserva" -#: templates/dcim/rackrole.html:10 +#: netbox/templates/dcim/rackrole.html:10 msgid "Add Rack" msgstr "Adicionar Rack" -#: templates/dcim/rearport.html:50 +#: netbox/templates/dcim/rearport.html:50 msgid "Positions" msgstr "Posições" -#: templates/dcim/region.html:17 templates/dcim/sitegroup.html:17 +#: netbox/templates/dcim/region.html:17 +#: netbox/templates/dcim/sitegroup.html:17 msgid "Add Site" msgstr "Adicionar Site" -#: templates/dcim/region.html:55 +#: netbox/templates/dcim/region.html:55 msgid "Child Regions" msgstr "Regiões de Sub-Localizações" -#: templates/dcim/region.html:59 +#: netbox/templates/dcim/region.html:59 msgid "Add Region" msgstr "Adicionar Região" -#: templates/dcim/site.html:64 +#: netbox/templates/dcim/site.html:64 msgid "Time Zone" msgstr "Fuso Horário" -#: templates/dcim/site.html:67 +#: netbox/templates/dcim/site.html:67 msgid "UTC" msgstr "UTC" -#: templates/dcim/site.html:68 +#: netbox/templates/dcim/site.html:68 msgid "Site time" msgstr "Horário local" -#: templates/dcim/site.html:75 +#: netbox/templates/dcim/site.html:75 msgid "Physical Address" msgstr "Endereço Físico" -#: templates/dcim/site.html:90 +#: netbox/templates/dcim/site.html:90 msgid "Shipping Address" msgstr "Endereço de Entrega" -#: templates/dcim/sitegroup.html:55 templates/tenancy/contactgroup.html:46 -#: templates/tenancy/tenantgroup.html:55 -#: templates/wireless/wirelesslangroup.html:55 +#: netbox/templates/dcim/sitegroup.html:55 +#: netbox/templates/tenancy/contactgroup.html:46 +#: netbox/templates/tenancy/tenantgroup.html:55 +#: netbox/templates/wireless/wirelesslangroup.html:55 msgid "Child Groups" msgstr "Grupos de Sub-Localizações" -#: templates/dcim/sitegroup.html:59 +#: netbox/templates/dcim/sitegroup.html:59 msgid "Add Site Group" msgstr "Adicionar Grupo de Sites" -#: templates/dcim/trace/attachment.html:5 -#: templates/extras/exporttemplate.html:31 +#: netbox/templates/dcim/trace/attachment.html:5 +#: netbox/templates/extras/exporttemplate.html:31 msgid "Attachment" msgstr "Anexo" -#: templates/dcim/virtualchassis.html:57 +#: netbox/templates/dcim/virtualchassis.html:57 msgid "Add Member" msgstr "Adicionar Membro" -#: templates/dcim/virtualchassis_add.html:18 +#: netbox/templates/dcim/virtualchassis_add.html:18 msgid "Member Devices" msgstr "Dispositivos Membros" -#: templates/dcim/virtualchassis_add_member.html:10 +#: netbox/templates/dcim/virtualchassis_add_member.html:10 #, python-format msgid "Add New Member to Virtual Chassis %(virtual_chassis)s" msgstr "Adicionar Novo Membro ao Chassi Virtual %(virtual_chassis)s" -#: templates/dcim/virtualchassis_add_member.html:19 +#: netbox/templates/dcim/virtualchassis_add_member.html:19 msgid "Add New Member" msgstr "Adicionar Novo Membro" -#: templates/dcim/virtualchassis_add_member.html:27 -#: templates/generic/object_edit.html:78 -#: templates/users/objectpermission.html:31 users/forms/filtersets.py:67 -#: users/forms/model_forms.py:312 +#: netbox/templates/dcim/virtualchassis_add_member.html:27 +#: netbox/templates/generic/object_edit.html:78 +#: netbox/templates/users/objectpermission.html:31 +#: netbox/users/forms/filtersets.py:67 netbox/users/forms/model_forms.py:312 msgid "Actions" msgstr "Ações" -#: templates/dcim/virtualchassis_add_member.html:29 +#: netbox/templates/dcim/virtualchassis_add_member.html:29 msgid "Save & Add Another" msgstr "Salvar e Adicionar Outro" -#: templates/dcim/virtualchassis_edit.html:7 +#: netbox/templates/dcim/virtualchassis_edit.html:7 #, python-format msgid "Editing Virtual Chassis %(name)s" msgstr "Editando Chassi Virtual %(name)s" -#: templates/dcim/virtualchassis_edit.html:53 +#: netbox/templates/dcim/virtualchassis_edit.html:53 msgid "Rack/Unit" msgstr "Rack/Posição" -#: templates/dcim/virtualchassis_remove_member.html:5 +#: netbox/templates/dcim/virtualchassis_remove_member.html:5 msgid "Remove Virtual Chassis Member" msgstr "Remover Membro do Chassi Virtual" -#: templates/dcim/virtualchassis_remove_member.html:9 +#: netbox/templates/dcim/virtualchassis_remove_member.html:9 #, python-format msgid "" "Are you sure you want to remove %(device)s from virtual " @@ -12426,11 +13221,12 @@ msgstr "" "Tem certeza de que deseja remover %(device)s do chassi " "virtual %(name)s?" -#: templates/dcim/virtualdevicecontext.html:26 templates/vpn/l2vpn.html:18 +#: netbox/templates/dcim/virtualdevicecontext.html:26 +#: netbox/templates/vpn/l2vpn.html:18 msgid "Identifier" msgstr "Identificador" -#: templates/exceptions/import_error.html:6 +#: netbox/templates/exceptions/import_error.html:6 msgid "" "A module import error occurred during this request. Common causes include " "the following:" @@ -12438,11 +13234,11 @@ msgstr "" "Ocorreu um erro de importação do módulo durante esta solicitação. As causas " "comuns incluem o seguinte:" -#: templates/exceptions/import_error.html:10 +#: netbox/templates/exceptions/import_error.html:10 msgid "Missing required packages" msgstr "Pacotes necessários ausentes" -#: templates/exceptions/import_error.html:11 +#: netbox/templates/exceptions/import_error.html:11 msgid "" "This installation of NetBox might be missing one or more required Python " "packages. These packages are listed in requirements.txt and " @@ -12458,11 +13254,11 @@ msgstr "" "instalados, execute pip freeze a partir do console e compare a " "saída com a lista de pacotes necessários." -#: templates/exceptions/import_error.html:20 +#: netbox/templates/exceptions/import_error.html:20 msgid "WSGI service not restarted after upgrade" msgstr "O serviço WSGI não foi reiniciado após a atualização" -#: templates/exceptions/import_error.html:21 +#: netbox/templates/exceptions/import_error.html:21 msgid "" "If this installation has recently been upgraded, check that the WSGI service" " (e.g. gunicorn or uWSGI) has been restarted. This ensures that the new code" @@ -12472,7 +13268,7 @@ msgstr "" "(por exemplo, gunicorn ou uWSGI) foi reiniciado. Isso garante que o novo " "código esteja em execução." -#: templates/exceptions/permission_error.html:6 +#: netbox/templates/exceptions/permission_error.html:6 msgid "" "A file permission error was detected while processing this request. Common " "causes include the following:" @@ -12480,11 +13276,11 @@ msgstr "" "Um erro de permissão de arquivo foi detectado ao processar esta solicitação." " As causas comuns incluem o seguinte:" -#: templates/exceptions/permission_error.html:10 +#: netbox/templates/exceptions/permission_error.html:10 msgid "Insufficient write permission to the media root" msgstr "Permissão de gravação insuficiente para a raíz da mídia" -#: templates/exceptions/permission_error.html:11 +#: netbox/templates/exceptions/permission_error.html:11 #, python-format msgid "" "The configured media root is %(media_root)s. Ensure that the " @@ -12495,7 +13291,7 @@ msgstr "" "que o usuário NetBox seja executado com acesso para gravar arquivos em todos" " os locais dentro deste caminho." -#: templates/exceptions/programming_error.html:6 +#: netbox/templates/exceptions/programming_error.html:6 msgid "" "A database programming error was detected while processing this request. " "Common causes include the following:" @@ -12503,11 +13299,11 @@ msgstr "" "Um erro de programação do banco de dados foi detectado ao processar esta " "solicitação. As causas comuns incluem o seguinte:" -#: templates/exceptions/programming_error.html:10 +#: netbox/templates/exceptions/programming_error.html:10 msgid "Database migrations missing" msgstr "Migrações do banco de dados ausentes" -#: templates/exceptions/programming_error.html:11 +#: netbox/templates/exceptions/programming_error.html:11 msgid "" "When upgrading to a new NetBox release, the upgrade script must be run to " "apply any new database migrations. You can run migrations manually by " @@ -12518,11 +13314,11 @@ msgstr "" "pode executar migrações manualmente executando python3 manage.py " "migrate a partir da linha de comando." -#: templates/exceptions/programming_error.html:18 +#: netbox/templates/exceptions/programming_error.html:18 msgid "Unsupported PostgreSQL version" msgstr "Versão não suportada do PostgreSQL" -#: templates/exceptions/programming_error.html:19 +#: netbox/templates/exceptions/programming_error.html:19 msgid "" "Ensure that PostgreSQL version 12 or later is in use. You can check this by " "connecting to the database using NetBox's credentials and issuing a query " @@ -12532,99 +13328,102 @@ msgstr "" " pode verificar isso conectando-se ao banco de dados usando as credenciais " "do NetBox e emitindo uma consulta para SELECT VERSION()." -#: templates/extras/configcontext.html:45 -#: templates/extras/configtemplate.html:37 -#: templates/extras/exporttemplate.html:51 +#: netbox/templates/extras/configcontext.html:45 +#: netbox/templates/extras/configtemplate.html:37 +#: netbox/templates/extras/exporttemplate.html:51 msgid "The data file associated with this object has been deleted" msgstr "O arquivo de dados associado a este objeto foi excluído" -#: templates/extras/configcontext.html:54 -#: templates/extras/configtemplate.html:46 -#: templates/extras/exporttemplate.html:60 +#: netbox/templates/extras/configcontext.html:54 +#: netbox/templates/extras/configtemplate.html:46 +#: netbox/templates/extras/exporttemplate.html:60 msgid "Data Synced" msgstr "Dados Sincronizados" -#: templates/extras/configcontext_list.html:7 -#: templates/extras/configtemplate_list.html:7 -#: templates/extras/exporttemplate_list.html:7 +#: netbox/templates/extras/configcontext_list.html:7 +#: netbox/templates/extras/configtemplate_list.html:7 +#: netbox/templates/extras/exporttemplate_list.html:7 msgid "Sync Data" msgstr "Sincronizar Dados" -#: templates/extras/configtemplate.html:56 +#: netbox/templates/extras/configtemplate.html:56 msgid "Environment Parameters" msgstr "Parâmetros do Ambiente" -#: templates/extras/configtemplate.html:67 -#: templates/extras/exporttemplate.html:79 +#: netbox/templates/extras/configtemplate.html:67 +#: netbox/templates/extras/exporttemplate.html:79 msgid "Template" msgstr "Modelo" -#: templates/extras/customfield.html:30 templates/extras/customlink.html:21 +#: netbox/templates/extras/customfield.html:30 +#: netbox/templates/extras/customlink.html:21 msgid "Group Name" msgstr "Nome do Grupo" -#: templates/extras/customfield.html:42 +#: netbox/templates/extras/customfield.html:42 msgid "Must be Unique" msgstr "Deve ser Único" -#: templates/extras/customfield.html:46 +#: netbox/templates/extras/customfield.html:46 msgid "Cloneable" msgstr "Clonável" -#: templates/extras/customfield.html:56 +#: netbox/templates/extras/customfield.html:56 msgid "Default Value" msgstr "Valor Padrão" -#: templates/extras/customfield.html:73 +#: netbox/templates/extras/customfield.html:73 msgid "Search Weight" msgstr "Peso na Pesquisa" -#: templates/extras/customfield.html:83 +#: netbox/templates/extras/customfield.html:83 msgid "Filter Logic" msgstr "Lógica do Filtro" -#: templates/extras/customfield.html:87 +#: netbox/templates/extras/customfield.html:87 msgid "Display Weight" msgstr "Peso de Exibição" -#: templates/extras/customfield.html:91 +#: netbox/templates/extras/customfield.html:91 msgid "UI Visible" msgstr "Interface de Usuário Visível" -#: templates/extras/customfield.html:95 +#: netbox/templates/extras/customfield.html:95 msgid "UI Editable" msgstr "Interface de Usuário Editável" -#: templates/extras/customfield.html:115 +#: netbox/templates/extras/customfield.html:115 msgid "Validation Rules" msgstr "Regras de Validação" -#: templates/extras/customfield.html:126 +#: netbox/templates/extras/customfield.html:126 msgid "Regular Expression" msgstr "Expressão Regular" -#: templates/extras/customlink.html:29 +#: netbox/templates/extras/customlink.html:29 msgid "Button Class" msgstr "Classe do Botão" -#: templates/extras/customlink.html:39 templates/extras/exporttemplate.html:66 -#: templates/extras/savedfilter.html:39 +#: netbox/templates/extras/customlink.html:39 +#: netbox/templates/extras/exporttemplate.html:66 +#: netbox/templates/extras/savedfilter.html:39 msgid "Assigned Models" msgstr "Modelos Associados" -#: templates/extras/customlink.html:52 +#: netbox/templates/extras/customlink.html:52 msgid "Link Text" msgstr "Texto do Link" -#: templates/extras/customlink.html:58 +#: netbox/templates/extras/customlink.html:58 msgid "Link URL" msgstr "URL do link" -#: templates/extras/dashboard/reset.html:4 templates/home.html:66 +#: netbox/templates/extras/dashboard/reset.html:4 +#: netbox/templates/home.html:66 msgid "Reset Dashboard" msgstr "Redefinir Dashboard" -#: templates/extras/dashboard/reset.html:8 +#: netbox/templates/extras/dashboard/reset.html:8 msgid "" "This will remove all configured widgets and restore the " "default dashboard configuration." @@ -12632,7 +13431,7 @@ msgstr "" "Isso removerá todos os widgets configurados e irá restaurar" " as configurações padrão do dashboard." -#: templates/extras/dashboard/reset.html:13 +#: netbox/templates/extras/dashboard/reset.html:13 msgid "" "This change affects only your dashboard, and will not impact other " "users." @@ -12640,155 +13439,162 @@ msgstr "" "Esta mudança afetará apenas seu dashboard e não impactará os outros " "usuários." -#: templates/extras/dashboard/widget.html:21 +#: netbox/templates/extras/dashboard/widget.html:21 msgid "widget configuration" msgstr "configuração do widget" -#: templates/extras/dashboard/widget.html:36 +#: netbox/templates/extras/dashboard/widget.html:36 msgid "Close widget" msgstr "Fechar widget" -#: templates/extras/dashboard/widget_add.html:7 +#: netbox/templates/extras/dashboard/widget_add.html:7 msgid "Add a Widget" msgstr "Adicionar um Widget" -#: templates/extras/dashboard/widgets/bookmarks.html:14 +#: netbox/templates/extras/dashboard/widgets/bookmarks.html:14 msgid "No bookmarks have been added yet." msgstr "Nenhum favorito foi adicionado ainda." -#: templates/extras/dashboard/widgets/objectcounts.html:10 +#: netbox/templates/extras/dashboard/widgets/objectcounts.html:10 msgid "No permission" msgstr "Sem permissão" -#: templates/extras/dashboard/widgets/objectlist.html:6 +#: netbox/templates/extras/dashboard/widgets/objectlist.html:6 msgid "No permission to view this content" msgstr "Sem permissão para visualizar este conteúdo" -#: templates/extras/dashboard/widgets/objectlist.html:10 +#: netbox/templates/extras/dashboard/widgets/objectlist.html:10 msgid "Unable to load content. Invalid view name" msgstr "Não é possível carregar o conteúdo. Nome de exibição inválido" -#: templates/extras/dashboard/widgets/rssfeed.html:12 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:12 msgid "No content found" msgstr "Nenhum conteúdo encontrado" -#: templates/extras/dashboard/widgets/rssfeed.html:18 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:18 msgid "There was a problem fetching the RSS feed" msgstr "Houve um problema ao obter o feed RSS" -#: templates/extras/dashboard/widgets/rssfeed.html:21 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:21 msgid "HTTP" msgstr "HTTP" -#: templates/extras/eventrule.html:61 +#: netbox/templates/extras/eventrule.html:61 msgid "Conditions" msgstr "Condições" -#: templates/extras/exporttemplate.html:23 +#: netbox/templates/extras/exporttemplate.html:23 msgid "MIME Type" msgstr "MIME Type" -#: templates/extras/exporttemplate.html:27 +#: netbox/templates/extras/exporttemplate.html:27 msgid "File Extension" msgstr "Extensão do arquivo" -#: templates/extras/htmx/script_result.html:10 +#: netbox/templates/extras/htmx/script_result.html:10 msgid "Scheduled for" msgstr "Agendado para" -#: templates/extras/htmx/script_result.html:15 +#: netbox/templates/extras/htmx/script_result.html:15 msgid "Duration" msgstr "Duração" -#: templates/extras/htmx/script_result.html:23 +#: netbox/templates/extras/htmx/script_result.html:23 msgid "Test Summary" msgstr "Resumo do Teste" -#: templates/extras/htmx/script_result.html:43 +#: netbox/templates/extras/htmx/script_result.html:43 msgid "Log" msgstr "Log" -#: templates/extras/htmx/script_result.html:56 +#: netbox/templates/extras/htmx/script_result.html:56 msgid "Output" msgstr "Saída" -#: templates/extras/inc/result_pending.html:4 +#: netbox/templates/extras/inc/result_pending.html:4 msgid "Loading" msgstr "Carregando" -#: templates/extras/inc/result_pending.html:6 +#: netbox/templates/extras/inc/result_pending.html:6 msgid "Results pending" msgstr "Resultados pendentes" -#: templates/extras/journalentry.html:15 +#: netbox/templates/extras/journalentry.html:15 msgid "Journal Entry" msgstr "Registro de Evento" -#: templates/extras/notificationgroup.html:11 +#: netbox/templates/extras/notificationgroup.html:11 msgid "Notification Group" msgstr "Grupo de Notificação" -#: templates/extras/notificationgroup.html:36 -#: templates/extras/notificationgroup.html:46 -#: utilities/templates/widgets/clearable_file_input.html:12 +#: netbox/templates/extras/notificationgroup.html:36 +#: netbox/templates/extras/notificationgroup.html:46 +#: netbox/utilities/templates/widgets/clearable_file_input.html:12 msgid "None assigned" msgstr "Nenhum atribuído" -#: templates/extras/object_configcontext.html:19 +#: netbox/templates/extras/object_configcontext.html:19 msgid "The local config context overwrites all source contexts" msgstr "" "O contexto de configuração local sobrescreve todos os contextos de origem" -#: templates/extras/object_configcontext.html:25 +#: netbox/templates/extras/object_configcontext.html:25 msgid "Source Contexts" msgstr "Contextos de Origem" -#: templates/extras/object_journal.html:17 +#: netbox/templates/extras/object_journal.html:17 msgid "New Journal Entry" msgstr "Novo Registro de Evento" -#: templates/extras/report/base.html:30 +#: netbox/templates/extras/report/base.html:30 msgid "Report" msgstr "Relatório" -#: templates/extras/script.html:14 +#: netbox/templates/extras/script.html:14 msgid "You do not have permission to run scripts" msgstr "Você não tem permissão para executar scripts" -#: templates/extras/script.html:41 templates/extras/script.html:45 -#: templates/extras/script_list.html:86 +#: netbox/templates/extras/script.html:41 +#: netbox/templates/extras/script.html:45 +#: netbox/templates/extras/script_list.html:87 msgid "Run Script" msgstr "Executar Script" -#: templates/extras/script.html:51 templates/extras/script/source.html:10 +#: netbox/templates/extras/script.html:51 +#: netbox/templates/extras/script/source.html:10 msgid "Error loading script" msgstr "Erro ao carregar o script" -#: templates/extras/script/jobs.html:16 +#: netbox/templates/extras/script/jobs.html:16 msgid "Script no longer exists in the source file." msgstr "O script não existe mais no arquivo de origem." -#: templates/extras/script_list.html:46 +#: netbox/templates/extras/script_list.html:47 msgid "Last Run" msgstr "Última Execução" -#: templates/extras/script_list.html:61 +#: netbox/templates/extras/script_list.html:62 msgid "Script is no longer present in the source file" msgstr "O script não está mais presente no arquivo de origem" -#: templates/extras/script_list.html:74 +#: netbox/templates/extras/script_list.html:75 msgid "Never" msgstr "Nunca" -#: templates/extras/script_list.html:84 +#: netbox/templates/extras/script_list.html:85 msgid "Run Again" msgstr "Execute Novamente" -#: templates/extras/script_list.html:138 +#: netbox/templates/extras/script_list.html:133 +#, python-format +msgid "Could not load scripts from module %(module)s" +msgstr "Não foi possível carregar os scripts do módulo %(module)s" + +#: netbox/templates/extras/script_list.html:141 msgid "No Scripts Found" msgstr "Nenhum Script Encontrado" -#: templates/extras/script_list.html:141 +#: netbox/templates/extras/script_list.html:144 #, python-format msgid "" "Get started by creating a script from " @@ -12797,81 +13603,83 @@ msgstr "" "Comece criando um script a partir de " "um arquivo ou fonte de dados carregado." -#: templates/extras/script_result.html:35 -#: templates/generic/object_list.html:50 templates/search.html:13 +#: netbox/templates/extras/script_result.html:35 +#: netbox/templates/generic/object_list.html:50 +#: netbox/templates/search.html:13 msgid "Results" msgstr "Resultados" -#: templates/extras/script_result.html:46 +#: netbox/templates/extras/script_result.html:46 msgid "Log threshold" msgstr "Limite do log" -#: templates/extras/script_result.html:56 +#: netbox/templates/extras/script_result.html:56 msgid "All" msgstr "Todos" -#: templates/extras/tag.html:32 +#: netbox/templates/extras/tag.html:32 msgid "Tagged Items" msgstr "Itens Etiquetados" -#: templates/extras/tag.html:43 +#: netbox/templates/extras/tag.html:43 msgid "Allowed Object Types" msgstr "Tipos de Objetos Permitidos" -#: templates/extras/tag.html:51 +#: netbox/templates/extras/tag.html:51 msgid "Any" msgstr "Qualquer" -#: templates/extras/tag.html:57 +#: netbox/templates/extras/tag.html:57 msgid "Tagged Item Types" msgstr "Tipos de Itens Etiquetados" -#: templates/extras/tag.html:81 +#: netbox/templates/extras/tag.html:81 msgid "Tagged Objects" msgstr "Objetos Etiquetados" -#: templates/extras/webhook.html:26 +#: netbox/templates/extras/webhook.html:26 msgid "HTTP Method" msgstr "Método HTTP" -#: templates/extras/webhook.html:34 +#: netbox/templates/extras/webhook.html:34 msgid "HTTP Content Type" msgstr "Tipo de Conteúdo HTTP" -#: templates/extras/webhook.html:47 +#: netbox/templates/extras/webhook.html:47 msgid "SSL Verification" msgstr "Verificação SSL" -#: templates/extras/webhook.html:60 +#: netbox/templates/extras/webhook.html:60 msgid "Additional Headers" msgstr "Cabeçalhos Adicionais" -#: templates/extras/webhook.html:70 +#: netbox/templates/extras/webhook.html:70 msgid "Body Template" msgstr "Modelo de Corpo" -#: templates/generic/bulk_add_component.html:29 +#: netbox/templates/generic/bulk_add_component.html:29 msgid "Bulk Creation" msgstr "Criação em Massa" -#: templates/generic/bulk_add_component.html:34 -#: templates/generic/bulk_delete.html:32 templates/generic/bulk_edit.html:33 +#: netbox/templates/generic/bulk_add_component.html:34 +#: netbox/templates/generic/bulk_delete.html:32 +#: netbox/templates/generic/bulk_edit.html:33 msgid "Selected Objects" msgstr "Objetos Selecionados" -#: templates/generic/bulk_add_component.html:58 +#: netbox/templates/generic/bulk_add_component.html:58 msgid "to Add" msgstr "para Adicionar" -#: templates/generic/bulk_delete.html:27 +#: netbox/templates/generic/bulk_delete.html:27 msgid "Bulk Delete" msgstr "Exclusão em Massa" -#: templates/generic/bulk_delete.html:49 +#: netbox/templates/generic/bulk_delete.html:49 msgid "Confirm Bulk Deletion" msgstr "Confirmar Exclusão em Massa" -#: templates/generic/bulk_delete.html:50 +#: netbox/templates/generic/bulk_delete.html:50 #, python-format msgid "" "The following operation will delete %(count)s " @@ -12881,66 +13689,69 @@ msgstr "" "A operação a seguir excluirá %(count)s %(type_plural)s. " "Analise cuidadosamente o(s) objeto(s) selecionado(s) e confirme esta ação." -#: templates/generic/bulk_edit.html:21 templates/generic/object_edit.html:22 +#: netbox/templates/generic/bulk_edit.html:21 +#: netbox/templates/generic/object_edit.html:22 msgid "Editing" msgstr "Editando" -#: templates/generic/bulk_edit.html:28 +#: netbox/templates/generic/bulk_edit.html:28 msgid "Bulk Edit" msgstr "Edição em Massa" -#: templates/generic/bulk_edit.html:107 templates/generic/bulk_rename.html:66 +#: netbox/templates/generic/bulk_edit.html:107 +#: netbox/templates/generic/bulk_rename.html:66 msgid "Apply" msgstr "Aplicar" -#: templates/generic/bulk_import.html:19 +#: netbox/templates/generic/bulk_import.html:19 msgid "Bulk Import" msgstr "Importação em Massa" -#: templates/generic/bulk_import.html:25 +#: netbox/templates/generic/bulk_import.html:25 msgid "Direct Import" msgstr "Importação Direta" -#: templates/generic/bulk_import.html:30 +#: netbox/templates/generic/bulk_import.html:30 msgid "Upload File" msgstr "Carregar Arquivo" -#: templates/generic/bulk_import.html:58 templates/generic/bulk_import.html:80 -#: templates/generic/bulk_import.html:102 +#: netbox/templates/generic/bulk_import.html:58 +#: netbox/templates/generic/bulk_import.html:80 +#: netbox/templates/generic/bulk_import.html:102 msgid "Submit" msgstr "Enviar" -#: templates/generic/bulk_import.html:113 +#: netbox/templates/generic/bulk_import.html:113 msgid "Field Options" msgstr "Opções de Campos" -#: templates/generic/bulk_import.html:119 +#: netbox/templates/generic/bulk_import.html:119 msgid "Accessor" msgstr "Acessador" -#: templates/generic/bulk_import.html:148 +#: netbox/templates/generic/bulk_import.html:148 msgid "choices" msgstr "escolhas" -#: templates/generic/bulk_import.html:161 +#: netbox/templates/generic/bulk_import.html:161 msgid "Import Value" msgstr "Importar Valor" -#: templates/generic/bulk_import.html:181 +#: netbox/templates/generic/bulk_import.html:181 msgid "Format: YYYY-MM-DD" msgstr "Formato: AAAA-MM-DD" -#: templates/generic/bulk_import.html:183 +#: netbox/templates/generic/bulk_import.html:183 msgid "Specify true or false" msgstr "Especifique verdadeiro ou falso" -#: templates/generic/bulk_import.html:195 +#: netbox/templates/generic/bulk_import.html:195 msgid "Required fields must be specified for all objects." msgstr "" "Campos obrigatórios devem ser especificados para todos os " "objetos." -#: templates/generic/bulk_import.html:201 +#: netbox/templates/generic/bulk_import.html:201 #, python-format msgid "" "Related objects may be referenced by any unique attribute. For example, " @@ -12950,15 +13761,15 @@ msgstr "" "exclusivo. Por exemplo, %(example)s identificaria um VRF por " "seu Route Distinguiser." -#: templates/generic/bulk_remove.html:28 +#: netbox/templates/generic/bulk_remove.html:28 msgid "Bulk Remove" msgstr "Remoção em Massa" -#: templates/generic/bulk_remove.html:42 +#: netbox/templates/generic/bulk_remove.html:42 msgid "Confirm Bulk Removal" msgstr "Confirme Remoção em Massa" -#: templates/generic/bulk_remove.html:43 +#: netbox/templates/generic/bulk_remove.html:43 #, python-format msgid "" "The following operation will remove %(count)s %(obj_type_plural)s from " @@ -12969,72 +13780,72 @@ msgstr "" "%(parent_obj)s. Por favor, revise cuidadosamente o(s) %(obj_type_plural)s a " "ser(em) removido(s) e confirme abaixo." -#: templates/generic/bulk_remove.html:64 +#: netbox/templates/generic/bulk_remove.html:64 #, python-format msgid "Remove these %(count)s %(obj_type_plural)s" msgstr "Remova este(s) %(count)s %(obj_type_plural)s" -#: templates/generic/bulk_rename.html:20 +#: netbox/templates/generic/bulk_rename.html:20 msgid "Renaming" msgstr "Renomeando" -#: templates/generic/bulk_rename.html:27 +#: netbox/templates/generic/bulk_rename.html:27 msgid "Bulk Rename" msgstr "Renomeação em Massa" -#: templates/generic/bulk_rename.html:39 +#: netbox/templates/generic/bulk_rename.html:39 msgid "Current Name" msgstr "Nome Atual" -#: templates/generic/bulk_rename.html:40 +#: netbox/templates/generic/bulk_rename.html:40 msgid "New Name" msgstr "Novo Nome" -#: templates/generic/bulk_rename.html:64 -#: utilities/templates/widgets/markdown_input.html:11 +#: netbox/templates/generic/bulk_rename.html:64 +#: netbox/utilities/templates/widgets/markdown_input.html:11 msgid "Preview" msgstr "Pré-visualização" -#: templates/generic/confirmation_form.html:16 +#: netbox/templates/generic/confirmation_form.html:16 msgid "Are you sure" msgstr "Você tem certeza" -#: templates/generic/confirmation_form.html:20 +#: netbox/templates/generic/confirmation_form.html:20 msgid "Confirm" msgstr "Confirma" -#: templates/generic/object_children.html:47 -#: utilities/templates/buttons/bulk_edit.html:4 +#: netbox/templates/generic/object_children.html:47 +#: netbox/utilities/templates/buttons/bulk_edit.html:4 msgid "Edit Selected" msgstr "Editar Selecionado" -#: templates/generic/object_children.html:61 -#: utilities/templates/buttons/bulk_delete.html:4 +#: netbox/templates/generic/object_children.html:61 +#: netbox/utilities/templates/buttons/bulk_delete.html:4 msgid "Delete Selected" msgstr "Excluir Selecionado" -#: templates/generic/object_edit.html:24 +#: netbox/templates/generic/object_edit.html:24 #, python-format msgid "Add a new %(object_type)s" msgstr "Adicionar %(object_type)s" -#: templates/generic/object_edit.html:35 +#: netbox/templates/generic/object_edit.html:35 msgid "View model documentation" msgstr "Veja a documentação do modelo" -#: templates/generic/object_edit.html:36 +#: netbox/templates/generic/object_edit.html:36 msgid "Help" msgstr "Ajuda" -#: templates/generic/object_edit.html:83 +#: netbox/templates/generic/object_edit.html:83 msgid "Create & Add Another" msgstr "Criar e Adicionar Outro" -#: templates/generic/object_list.html:57 +#: netbox/templates/generic/object_list.html:57 msgid "Filters" msgstr "Filtros" -#: templates/generic/object_list.html:88 +#: netbox/templates/generic/object_list.html:88 #, python-format msgid "" "Select all %(count)s " @@ -13043,40 +13854,40 @@ msgstr "" "Selecione toda(s)%(count)s" " %(object_type_plural)s consulta(s) correspondente(s)" -#: templates/home.html:15 +#: netbox/templates/home.html:15 msgid "New Release Available" msgstr "Nova Versão Disponível" -#: templates/home.html:16 +#: netbox/templates/home.html:16 msgid "is available" msgstr "está disponível" -#: templates/home.html:18 +#: netbox/templates/home.html:18 msgctxt "Document title" msgid "Upgrade Instructions" msgstr "Instruções para Atualização" -#: templates/home.html:40 +#: netbox/templates/home.html:40 msgid "Unlock Dashboard" msgstr "Desbloquear Dashboard" -#: templates/home.html:49 +#: netbox/templates/home.html:49 msgid "Lock Dashboard" msgstr "Bloquear Dashboard" -#: templates/home.html:60 +#: netbox/templates/home.html:60 msgid "Add Widget" msgstr "Adicionar Widget" -#: templates/home.html:63 +#: netbox/templates/home.html:63 msgid "Save Layout" msgstr "Salvar Layout" -#: templates/htmx/delete_form.html:7 +#: netbox/templates/htmx/delete_form.html:7 msgid "Confirm Deletion" msgstr "Confirmar Exclusão" -#: templates/htmx/delete_form.html:11 +#: netbox/templates/htmx/delete_form.html:11 #, python-format msgid "" "Are you sure you want to delete " @@ -13085,40 +13896,40 @@ msgstr "" "Tem certeza que deseja deletar " "%(object_type)s %(object)s?" -#: templates/htmx/delete_form.html:17 +#: netbox/templates/htmx/delete_form.html:17 msgid "The following objects will be deleted as a result of this action." msgstr "Os objetos a seguir serão excluídos como resultado desta ação." -#: templates/htmx/notifications.html:15 +#: netbox/templates/htmx/notifications.html:15 msgid "ago" msgstr "atrás" -#: templates/htmx/notifications.html:26 +#: netbox/templates/htmx/notifications.html:26 msgid "No unread notifications" msgstr "Nenhuma notificação não lida" -#: templates/htmx/notifications.html:31 +#: netbox/templates/htmx/notifications.html:31 msgid "All notifications" msgstr "Todas as notificações" -#: templates/htmx/object_selector.html:5 +#: netbox/templates/htmx/object_selector.html:5 msgid "Select" msgstr "Selecionar" -#: templates/inc/filter_list.html:43 -#: utilities/templates/helpers/table_config_form.html:39 +#: netbox/templates/inc/filter_list.html:43 +#: netbox/utilities/templates/helpers/table_config_form.html:39 msgid "Reset" msgstr "Redefinir" -#: templates/inc/light_toggle.html:4 +#: netbox/templates/inc/light_toggle.html:4 msgid "Enable dark mode" msgstr "Ativar o modo escuro" -#: templates/inc/light_toggle.html:7 +#: netbox/templates/inc/light_toggle.html:7 msgid "Enable light mode" msgstr "Ativar o modo claro" -#: templates/inc/missing_prerequisites.html:8 +#: netbox/templates/inc/missing_prerequisites.html:8 #, python-format msgid "" "Before you can add a %(model)s you must first create a " @@ -13127,281 +13938,283 @@ msgstr "" "Antes que você possa adicionar um %(model)s, você deve primeiro criar um " "%(prerequisite_model)s." -#: templates/inc/paginator.html:15 +#: netbox/templates/inc/paginator.html:15 msgid "Page selection" msgstr "Seleção de página" -#: templates/inc/paginator.html:75 +#: netbox/templates/inc/paginator.html:75 #, python-format msgid "Showing %(start)s-%(end)s of %(total)s" msgstr "Exibindo %(start)s-%(end)s de %(total)s" -#: templates/inc/paginator.html:82 +#: netbox/templates/inc/paginator.html:82 msgid "Pagination options" msgstr "Opções de paginação" -#: templates/inc/paginator.html:86 +#: netbox/templates/inc/paginator.html:86 msgid "Per Page" msgstr "Por Página" -#: templates/inc/panels/image_attachments.html:10 +#: netbox/templates/inc/panels/image_attachments.html:10 msgid "Attach an image" msgstr "Anexar uma imagem" -#: templates/inc/panels/related_objects.html:5 +#: netbox/templates/inc/panels/related_objects.html:5 msgid "Related Objects" msgstr "Objetos Relacionados" -#: templates/inc/panels/tags.html:11 +#: netbox/templates/inc/panels/tags.html:11 msgid "No tags assigned" msgstr "Nenhuma tag associada" -#: templates/inc/sync_warning.html:10 +#: netbox/templates/inc/sync_warning.html:10 msgid "Data is out of sync with upstream file" msgstr "Os dados não estão sincronizados com o arquivo de upstream" -#: templates/inc/table_controls_htmx.html:7 +#: netbox/templates/inc/table_controls_htmx.html:7 msgid "Quick search" msgstr "Busca rápida" -#: templates/inc/table_controls_htmx.html:20 +#: netbox/templates/inc/table_controls_htmx.html:20 msgid "Saved filter" msgstr "Filtro salvo" -#: templates/inc/table_htmx.html:18 +#: netbox/templates/inc/table_htmx.html:18 msgid "Clear ordering" msgstr "Limpar ordenação" -#: templates/inc/user_menu.html:6 +#: netbox/templates/inc/user_menu.html:6 msgid "Help center" msgstr "Centro de ajuda" -#: templates/inc/user_menu.html:41 +#: netbox/templates/inc/user_menu.html:41 msgid "Django Admin" msgstr "Administrador do Django" -#: templates/inc/user_menu.html:61 +#: netbox/templates/inc/user_menu.html:61 msgid "Log Out" msgstr "Logout" -#: templates/inc/user_menu.html:68 templates/login.html:38 +#: netbox/templates/inc/user_menu.html:68 netbox/templates/login.html:38 msgid "Log In" msgstr "Login" -#: templates/ipam/aggregate.html:14 templates/ipam/ipaddress.html:14 -#: templates/ipam/iprange.html:13 templates/ipam/prefix.html:15 +#: netbox/templates/ipam/aggregate.html:14 +#: netbox/templates/ipam/ipaddress.html:14 +#: netbox/templates/ipam/iprange.html:13 netbox/templates/ipam/prefix.html:15 msgid "Family" msgstr "Família" -#: templates/ipam/aggregate.html:39 +#: netbox/templates/ipam/aggregate.html:39 msgid "Date Added" msgstr "Data Adicionada" -#: templates/ipam/aggregate/prefixes.html:8 -#: templates/ipam/prefix/prefixes.html:8 templates/ipam/role.html:10 +#: netbox/templates/ipam/aggregate/prefixes.html:8 +#: netbox/templates/ipam/prefix/prefixes.html:8 +#: netbox/templates/ipam/role.html:10 msgid "Add Prefix" msgstr "Adicionar Prefixo" -#: templates/ipam/asn.html:23 +#: netbox/templates/ipam/asn.html:23 msgid "AS Number" msgstr "Número do AS" -#: templates/ipam/fhrpgroup.html:52 +#: netbox/templates/ipam/fhrpgroup.html:52 msgid "Authentication Type" msgstr "Tipo de Autenticação" -#: templates/ipam/fhrpgroup.html:56 +#: netbox/templates/ipam/fhrpgroup.html:56 msgid "Authentication Key" msgstr "Chave de Autenticação" -#: templates/ipam/fhrpgroup.html:69 +#: netbox/templates/ipam/fhrpgroup.html:69 msgid "Virtual IP Addresses" msgstr "Endereços IP Virtuais" -#: templates/ipam/inc/ipaddress_edit_header.html:13 +#: netbox/templates/ipam/inc/ipaddress_edit_header.html:13 msgid "Assign IP" msgstr "Atribuir IP" -#: templates/ipam/inc/ipaddress_edit_header.html:19 +#: netbox/templates/ipam/inc/ipaddress_edit_header.html:19 msgid "Bulk Create" msgstr "Criar em Massa" -#: templates/ipam/inc/panels/fhrp_groups.html:10 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:10 msgid "Create Group" msgstr "Criar Grupo" -#: templates/ipam/inc/panels/fhrp_groups.html:25 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:25 msgid "Virtual IPs" msgstr "IPs Virtuais" -#: templates/ipam/inc/toggle_available.html:7 +#: netbox/templates/ipam/inc/toggle_available.html:7 msgid "Show Assigned" msgstr "Mostrar Atribuído" -#: templates/ipam/inc/toggle_available.html:10 +#: netbox/templates/ipam/inc/toggle_available.html:10 msgid "Show Available" msgstr "Mostrar Disponível" -#: templates/ipam/inc/toggle_available.html:13 +#: netbox/templates/ipam/inc/toggle_available.html:13 msgid "Show All" msgstr "Mostrar Tudo" -#: templates/ipam/ipaddress.html:23 templates/ipam/iprange.html:45 -#: templates/ipam/prefix.html:24 +#: netbox/templates/ipam/ipaddress.html:23 +#: netbox/templates/ipam/iprange.html:45 netbox/templates/ipam/prefix.html:24 msgid "Global" msgstr "Global" -#: templates/ipam/ipaddress.html:85 +#: netbox/templates/ipam/ipaddress.html:85 msgid "NAT (outside)" msgstr "NAT (externo)" -#: templates/ipam/ipaddress_assign.html:8 +#: netbox/templates/ipam/ipaddress_assign.html:8 msgid "Assign an IP Address" msgstr "Atribuir um Endereço IP" -#: templates/ipam/ipaddress_assign.html:22 +#: netbox/templates/ipam/ipaddress_assign.html:22 msgid "Select IP Address" msgstr "Selecione o Endereço IP" -#: templates/ipam/ipaddress_assign.html:35 +#: netbox/templates/ipam/ipaddress_assign.html:35 msgid "Search Results" msgstr "Resultados da Pesquisa" -#: templates/ipam/ipaddress_bulk_add.html:6 +#: netbox/templates/ipam/ipaddress_bulk_add.html:6 msgid "Bulk Add IP Addresses" msgstr "Adicionar Endereços IP em Massa" -#: templates/ipam/iprange.html:17 +#: netbox/templates/ipam/iprange.html:17 msgid "Starting Address" msgstr "Endereço Inicial" -#: templates/ipam/iprange.html:21 +#: netbox/templates/ipam/iprange.html:21 msgid "Ending Address" msgstr "Endereço Final" -#: templates/ipam/iprange.html:33 templates/ipam/prefix.html:110 +#: netbox/templates/ipam/iprange.html:33 netbox/templates/ipam/prefix.html:110 msgid "Marked fully utilized" msgstr "Marcado como totalmente utilizado" -#: templates/ipam/prefix.html:99 +#: netbox/templates/ipam/prefix.html:99 msgid "Addressing Details" msgstr "Detalhes do Endereçamento" -#: templates/ipam/prefix.html:118 +#: netbox/templates/ipam/prefix.html:118 msgid "Child IPs" msgstr "IPs Filhos" -#: templates/ipam/prefix.html:126 +#: netbox/templates/ipam/prefix.html:126 msgid "Available IPs" msgstr "IPs Disponíveis" -#: templates/ipam/prefix.html:138 +#: netbox/templates/ipam/prefix.html:138 msgid "First available IP" msgstr "Primeiro IP disponível" -#: templates/ipam/prefix.html:179 +#: netbox/templates/ipam/prefix.html:179 msgid "Prefix Details" msgstr "Detalhes do Prefixo" -#: templates/ipam/prefix.html:185 +#: netbox/templates/ipam/prefix.html:185 msgid "Network Address" msgstr "Endereço de Rede" -#: templates/ipam/prefix.html:189 +#: netbox/templates/ipam/prefix.html:189 msgid "Network Mask" msgstr "Máscara de Rede" -#: templates/ipam/prefix.html:193 +#: netbox/templates/ipam/prefix.html:193 msgid "Wildcard Mask" msgstr "Máscara Curinga" -#: templates/ipam/prefix.html:197 +#: netbox/templates/ipam/prefix.html:197 msgid "Broadcast Address" msgstr "Endereço de Broadcast" -#: templates/ipam/prefix/ip_ranges.html:7 +#: netbox/templates/ipam/prefix/ip_ranges.html:7 msgid "Add IP Range" msgstr "Adicionar Faixa de IP" -#: templates/ipam/prefix_list.html:7 +#: netbox/templates/ipam/prefix_list.html:7 msgid "Hide Depth Indicators" msgstr "Ocultar Indicadores de Profundidade" -#: templates/ipam/prefix_list.html:11 +#: netbox/templates/ipam/prefix_list.html:11 msgid "Max Depth" msgstr "Profundidade Máxima" -#: templates/ipam/prefix_list.html:28 +#: netbox/templates/ipam/prefix_list.html:28 msgid "Max Length" msgstr "Comprimento Máximo" -#: templates/ipam/rir.html:10 +#: netbox/templates/ipam/rir.html:10 msgid "Add Aggregate" msgstr "Adicionar Agregado" -#: templates/ipam/routetarget.html:38 +#: netbox/templates/ipam/routetarget.html:38 msgid "Importing VRFs" msgstr "Importando VRFs" -#: templates/ipam/routetarget.html:44 +#: netbox/templates/ipam/routetarget.html:44 msgid "Exporting VRFs" msgstr "Exportando VRFs" -#: templates/ipam/routetarget.html:52 +#: netbox/templates/ipam/routetarget.html:52 msgid "Importing L2VPNs" msgstr "Importando L2VPNs" -#: templates/ipam/routetarget.html:58 +#: netbox/templates/ipam/routetarget.html:58 msgid "Exporting L2VPNs" msgstr "Exportando L2VPNs" -#: templates/ipam/vlan.html:88 +#: netbox/templates/ipam/vlan.html:88 msgid "Add a Prefix" msgstr "Adicionar um Prefixo" -#: templates/ipam/vlangroup.html:18 +#: netbox/templates/ipam/vlangroup.html:18 msgid "Add VLAN" msgstr "Adicionar VLAN" -#: templates/ipam/vrf.html:16 +#: netbox/templates/ipam/vrf.html:16 msgid "Route Distinguisher" msgstr "Route Distinguisher" -#: templates/ipam/vrf.html:29 +#: netbox/templates/ipam/vrf.html:29 msgid "Unique IP Space" msgstr "Espaço de IP exclusivo" -#: templates/login.html:29 -#: utilities/templates/form_helpers/render_errors.html:7 +#: netbox/templates/login.html:29 +#: netbox/utilities/templates/form_helpers/render_errors.html:7 msgid "Errors" msgstr "Erros" -#: templates/login.html:69 +#: netbox/templates/login.html:69 msgid "Sign In" msgstr "Entrar" -#: templates/login.html:77 +#: netbox/templates/login.html:77 msgctxt "Denotes an alternative option" msgid "Or" msgstr "Ou" -#: templates/media_failure.html:7 +#: netbox/templates/media_failure.html:7 msgid "Static Media Failure - NetBox" msgstr "Falha de Mídia Estática - NetBox" -#: templates/media_failure.html:21 +#: netbox/templates/media_failure.html:21 msgid "Static Media Failure" msgstr "Falha de Mídia Estática" -#: templates/media_failure.html:23 +#: netbox/templates/media_failure.html:23 msgid "The following static media file failed to load" msgstr "O seguinte arquivo de mídia estática falhou ao carregar" -#: templates/media_failure.html:26 +#: netbox/templates/media_failure.html:26 msgid "Check the following" msgstr "Verifique o seguinte" -#: templates/media_failure.html:29 +#: netbox/templates/media_failure.html:29 msgid "" "manage.py collectstatic was run during the most recent upgrade." " This installs the most recent iteration of each static file into the static" @@ -13411,7 +14224,7 @@ msgstr "" "mais recente. Isso instala a iteração mais recente de cada arquivo estático " "no caminho raiz estático." -#: templates/media_failure.html:35 +#: netbox/templates/media_failure.html:35 #, python-format msgid "" "The HTTP service (e.g. nginx or Apache) is configured to serve files from " @@ -13422,7 +14235,7 @@ msgstr "" "caminho RAIZ_ESTÁTICA. Consulte a " "documentação de instalação para obter mais orientações." -#: templates/media_failure.html:47 +#: netbox/templates/media_failure.html:47 #, python-format msgid "" "The file %(filename)s exists in the static root directory and " @@ -13431,548 +14244,572 @@ msgstr "" "O arquivo %(filename)s existe no diretório raiz estático e pode" " ser lido pelo servidor HTTP." -#: templates/media_failure.html:55 +#: netbox/templates/media_failure.html:55 #, python-format msgid "Click here to attempt loading NetBox again." msgstr "" "Clique aqui para tentar carregar o NetBox " "novamente." -#: templates/tenancy/contact.html:18 tenancy/filtersets.py:147 -#: tenancy/forms/bulk_edit.py:137 tenancy/forms/filtersets.py:102 -#: tenancy/forms/forms.py:56 tenancy/forms/model_forms.py:106 -#: tenancy/forms/model_forms.py:130 tenancy/tables/contacts.py:98 +#: netbox/templates/tenancy/contact.html:18 netbox/tenancy/filtersets.py: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/model_forms.py:130 +#: netbox/tenancy/tables/contacts.py:98 msgid "Contact" msgstr "Contato" -#: templates/tenancy/contact.html:29 tenancy/forms/bulk_edit.py:99 +#: netbox/templates/tenancy/contact.html:29 +#: netbox/tenancy/forms/bulk_edit.py:99 msgid "Title" msgstr "Título" -#: templates/tenancy/contact.html:33 tenancy/forms/bulk_edit.py:104 -#: tenancy/tables/contacts.py:64 +#: netbox/templates/tenancy/contact.html:33 +#: netbox/tenancy/forms/bulk_edit.py:104 netbox/tenancy/tables/contacts.py:64 msgid "Phone" msgstr "Telefone" -#: templates/tenancy/contactgroup.html:18 tenancy/forms/forms.py:66 -#: tenancy/forms/model_forms.py:75 +#: netbox/templates/tenancy/contactgroup.html:18 +#: netbox/tenancy/forms/forms.py:66 netbox/tenancy/forms/model_forms.py:75 msgid "Contact Group" msgstr "Grupo de Contatos" -#: templates/tenancy/contactgroup.html:50 +#: netbox/templates/tenancy/contactgroup.html:50 msgid "Add Contact Group" msgstr "Adicionar Grupo de Contato" -#: templates/tenancy/contactrole.html:15 tenancy/filtersets.py:152 -#: tenancy/forms/forms.py:61 tenancy/forms/model_forms.py:87 +#: netbox/templates/tenancy/contactrole.html:15 +#: netbox/tenancy/filtersets.py:152 netbox/tenancy/forms/forms.py:61 +#: netbox/tenancy/forms/model_forms.py:87 msgid "Contact Role" msgstr "Função dos Contatos" -#: templates/tenancy/object_contacts.html:9 +#: netbox/templates/tenancy/object_contacts.html:9 msgid "Add a contact" msgstr "Adicionar um contato" -#: templates/tenancy/tenantgroup.html:17 +#: netbox/templates/tenancy/tenantgroup.html:17 msgid "Add Tenant" msgstr "Adicionar Inquilino" -#: templates/tenancy/tenantgroup.html:26 tenancy/forms/model_forms.py:32 -#: tenancy/tables/columns.py:51 tenancy/tables/columns.py:61 +#: netbox/templates/tenancy/tenantgroup.html:26 +#: netbox/tenancy/forms/model_forms.py:32 netbox/tenancy/tables/columns.py:51 +#: netbox/tenancy/tables/columns.py:61 msgid "Tenant Group" msgstr "Grupo de Inquilinos" -#: templates/tenancy/tenantgroup.html:59 +#: netbox/templates/tenancy/tenantgroup.html:59 msgid "Add Tenant Group" msgstr "Adicionar Grupo de Inquilinos" -#: templates/users/group.html:39 templates/users/user.html:63 +#: netbox/templates/users/group.html:39 netbox/templates/users/user.html:63 msgid "Assigned Permissions" msgstr "Permissões Atribuídas" -#: templates/users/objectpermission.html:6 -#: templates/users/objectpermission.html:14 users/forms/filtersets.py:66 +#: netbox/templates/users/objectpermission.html:6 +#: netbox/templates/users/objectpermission.html:14 +#: netbox/users/forms/filtersets.py:66 msgid "Permission" msgstr "Permissão" -#: templates/users/objectpermission.html:34 +#: netbox/templates/users/objectpermission.html:34 msgid "View" msgstr "Visualizar" -#: templates/users/objectpermission.html:52 users/forms/model_forms.py:315 +#: netbox/templates/users/objectpermission.html:52 +#: netbox/users/forms/model_forms.py:315 msgid "Constraints" msgstr "Restrições" -#: templates/users/objectpermission.html:72 +#: netbox/templates/users/objectpermission.html:72 msgid "Assigned Users" msgstr "Usuários Atribuídos" -#: templates/virtualization/cluster.html:52 +#: netbox/templates/virtualization/cluster.html:52 msgid "Allocated Resources" msgstr "Recursos Alocados" -#: templates/virtualization/cluster.html:55 -#: templates/virtualization/virtualmachine.html:125 +#: netbox/templates/virtualization/cluster.html:55 +#: netbox/templates/virtualization/virtualmachine.html:125 msgid "Virtual CPUs" msgstr "CPUs Virtuais" -#: templates/virtualization/cluster.html:59 -#: templates/virtualization/virtualmachine.html:129 +#: netbox/templates/virtualization/cluster.html:59 +#: netbox/templates/virtualization/virtualmachine.html:129 msgid "Memory" msgstr "Memória" -#: templates/virtualization/cluster.html:69 -#: templates/virtualization/virtualmachine.html:140 +#: netbox/templates/virtualization/cluster.html:69 +#: netbox/templates/virtualization/virtualmachine.html:140 msgid "Disk Space" msgstr "Espaço em Disco" -#: templates/virtualization/cluster/base.html:18 +#: netbox/templates/virtualization/cluster/base.html:18 msgid "Add Virtual Machine" msgstr "Adicionar Máquina Virtual" -#: templates/virtualization/cluster/base.html:24 +#: netbox/templates/virtualization/cluster/base.html:24 msgid "Assign Device" msgstr "Atribuir Dispositivo" -#: templates/virtualization/cluster/devices.html:10 +#: netbox/templates/virtualization/cluster/devices.html:10 msgid "Remove Selected" msgstr "Remover Selecionado" -#: templates/virtualization/cluster_add_devices.html:9 +#: netbox/templates/virtualization/cluster_add_devices.html:9 #, python-format msgid "Add Device to Cluster %(cluster)s" msgstr "Adicionar Dispositivo ao Cluster %(cluster)s" -#: templates/virtualization/cluster_add_devices.html:23 +#: netbox/templates/virtualization/cluster_add_devices.html:23 msgid "Device Selection" msgstr "Seleção de Dispositivos" -#: templates/virtualization/cluster_add_devices.html:31 +#: netbox/templates/virtualization/cluster_add_devices.html:31 msgid "Add Devices" msgstr "Adicionar Dispositivos" -#: templates/virtualization/clustergroup.html:10 -#: templates/virtualization/clustertype.html:10 +#: netbox/templates/virtualization/clustergroup.html:10 +#: netbox/templates/virtualization/clustertype.html:10 msgid "Add Cluster" msgstr "Adicionar Cluster" -#: templates/virtualization/clustergroup.html:19 -#: virtualization/forms/model_forms.py:50 +#: netbox/templates/virtualization/clustergroup.html:19 +#: netbox/virtualization/forms/model_forms.py:50 msgid "Cluster Group" msgstr "Grupo de Clusters" -#: templates/virtualization/clustertype.html:19 -#: templates/virtualization/virtualmachine.html:110 -#: virtualization/forms/model_forms.py:36 +#: netbox/templates/virtualization/clustertype.html:19 +#: netbox/templates/virtualization/virtualmachine.html:110 +#: netbox/virtualization/forms/model_forms.py:36 msgid "Cluster Type" msgstr "Tipo de Cluster" -#: templates/virtualization/virtualdisk.html:18 +#: netbox/templates/virtualization/virtualdisk.html:18 msgid "Virtual Disk" msgstr "Disco Virtual" -#: templates/virtualization/virtualmachine.html:122 -#: virtualization/forms/bulk_edit.py:190 -#: virtualization/forms/model_forms.py:224 +#: netbox/templates/virtualization/virtualmachine.html:122 +#: netbox/virtualization/forms/bulk_edit.py:190 +#: netbox/virtualization/forms/model_forms.py:224 msgid "Resources" msgstr "Recursos" -#: templates/virtualization/virtualmachine.html:178 +#: netbox/templates/virtualization/virtualmachine.html:178 msgid "Add Virtual Disk" msgstr "Adicionar Disco Virtual" -#: templates/vpn/ikepolicy.html:10 templates/vpn/ipsecprofile.html:33 -#: vpn/tables/crypto.py:166 +#: netbox/templates/virtualization/virtualmachine/render_config.html:70 +msgid "No configuration template has been assigned for this virtual machine." +msgstr "" +"Nenhum modelo de configuração foi atribuído para esta máquina virtual." + +#: netbox/templates/vpn/ikepolicy.html:10 +#: netbox/templates/vpn/ipsecprofile.html:33 netbox/vpn/tables/crypto.py:166 msgid "IKE Policy" msgstr "Política da IKE" -#: templates/vpn/ikepolicy.html:21 +#: netbox/templates/vpn/ikepolicy.html:21 msgid "IKE Version" msgstr "Versão da IKE" -#: templates/vpn/ikepolicy.html:29 +#: netbox/templates/vpn/ikepolicy.html:29 msgid "Pre-Shared Key" msgstr "Chave Pré-compartilhada" -#: templates/vpn/ikepolicy.html:33 -#: templates/wireless/inc/authentication_attrs.html:20 +#: netbox/templates/vpn/ikepolicy.html:33 +#: netbox/templates/wireless/inc/authentication_attrs.html:20 msgid "Show Secret" msgstr "Mostrar Senha" -#: templates/vpn/ikepolicy.html:57 templates/vpn/ipsecpolicy.html:45 -#: templates/vpn/ipsecprofile.html:52 templates/vpn/ipsecprofile.html:77 -#: vpn/forms/model_forms.py:316 vpn/forms/model_forms.py:352 -#: vpn/tables/crypto.py:68 vpn/tables/crypto.py:134 +#: netbox/templates/vpn/ikepolicy.html:57 +#: netbox/templates/vpn/ipsecpolicy.html:45 +#: netbox/templates/vpn/ipsecprofile.html:52 +#: netbox/templates/vpn/ipsecprofile.html:77 +#: netbox/vpn/forms/model_forms.py:316 netbox/vpn/forms/model_forms.py:352 +#: netbox/vpn/tables/crypto.py:68 netbox/vpn/tables/crypto.py:134 msgid "Proposals" msgstr "Propostas" -#: templates/vpn/ikeproposal.html:10 +#: netbox/templates/vpn/ikeproposal.html:10 msgid "IKE Proposal" msgstr "Proposta de IKE" -#: templates/vpn/ikeproposal.html:21 vpn/forms/bulk_edit.py:97 -#: vpn/forms/bulk_import.py:145 vpn/forms/filtersets.py:101 +#: netbox/templates/vpn/ikeproposal.html:21 netbox/vpn/forms/bulk_edit.py:97 +#: netbox/vpn/forms/bulk_import.py:145 netbox/vpn/forms/filtersets.py:101 msgid "Authentication method" msgstr "Método de autenticação" -#: templates/vpn/ikeproposal.html:25 templates/vpn/ipsecproposal.html:21 -#: vpn/forms/bulk_edit.py:102 vpn/forms/bulk_edit.py:172 -#: vpn/forms/bulk_import.py:149 vpn/forms/bulk_import.py:195 -#: vpn/forms/filtersets.py:106 vpn/forms/filtersets.py:154 +#: netbox/templates/vpn/ikeproposal.html:25 +#: netbox/templates/vpn/ipsecproposal.html:21 +#: netbox/vpn/forms/bulk_edit.py:102 netbox/vpn/forms/bulk_edit.py:172 +#: netbox/vpn/forms/bulk_import.py:149 netbox/vpn/forms/bulk_import.py:195 +#: netbox/vpn/forms/filtersets.py:106 netbox/vpn/forms/filtersets.py:154 msgid "Encryption algorithm" msgstr "Algoritmo de criptografia" -#: templates/vpn/ikeproposal.html:29 templates/vpn/ipsecproposal.html:25 -#: vpn/forms/bulk_edit.py:107 vpn/forms/bulk_edit.py:177 -#: vpn/forms/bulk_import.py:153 vpn/forms/bulk_import.py:200 -#: vpn/forms/filtersets.py:111 vpn/forms/filtersets.py:159 +#: netbox/templates/vpn/ikeproposal.html:29 +#: netbox/templates/vpn/ipsecproposal.html:25 +#: netbox/vpn/forms/bulk_edit.py:107 netbox/vpn/forms/bulk_edit.py:177 +#: netbox/vpn/forms/bulk_import.py:153 netbox/vpn/forms/bulk_import.py:200 +#: netbox/vpn/forms/filtersets.py:111 netbox/vpn/forms/filtersets.py:159 msgid "Authentication algorithm" msgstr "Algoritmo de autenticação" -#: templates/vpn/ikeproposal.html:33 +#: netbox/templates/vpn/ikeproposal.html:33 msgid "DH group" msgstr "Grupo DH" -#: templates/vpn/ikeproposal.html:37 templates/vpn/ipsecproposal.html:29 -#: vpn/forms/bulk_edit.py:182 vpn/models/crypto.py:146 +#: netbox/templates/vpn/ikeproposal.html:37 +#: netbox/templates/vpn/ipsecproposal.html:29 +#: netbox/vpn/forms/bulk_edit.py:182 netbox/vpn/models/crypto.py:146 msgid "SA lifetime (seconds)" msgstr "Vida útil da Associação de Segurança (segundos)" -#: templates/vpn/ipsecpolicy.html:10 templates/vpn/ipsecprofile.html:66 -#: vpn/tables/crypto.py:170 +#: netbox/templates/vpn/ipsecpolicy.html:10 +#: netbox/templates/vpn/ipsecprofile.html:66 netbox/vpn/tables/crypto.py:170 msgid "IPSec Policy" msgstr "Política de IPsec" -#: templates/vpn/ipsecpolicy.html:21 vpn/forms/bulk_edit.py:210 -#: vpn/models/crypto.py:193 +#: netbox/templates/vpn/ipsecpolicy.html:21 netbox/vpn/forms/bulk_edit.py:210 +#: netbox/vpn/models/crypto.py:193 msgid "PFS group" msgstr "Grupo PFS" -#: templates/vpn/ipsecprofile.html:10 vpn/forms/model_forms.py:54 +#: netbox/templates/vpn/ipsecprofile.html:10 +#: netbox/vpn/forms/model_forms.py:54 msgid "IPSec Profile" msgstr "Perfil IPsec" -#: templates/vpn/ipsecprofile.html:89 vpn/tables/crypto.py:137 +#: netbox/templates/vpn/ipsecprofile.html:89 netbox/vpn/tables/crypto.py:137 msgid "PFS Group" msgstr "Grupo PFS" -#: templates/vpn/ipsecproposal.html:10 +#: netbox/templates/vpn/ipsecproposal.html:10 msgid "IPSec Proposal" msgstr "Proposta de IPsec" -#: templates/vpn/ipsecproposal.html:33 vpn/forms/bulk_edit.py:186 -#: vpn/models/crypto.py:152 +#: netbox/templates/vpn/ipsecproposal.html:33 +#: netbox/vpn/forms/bulk_edit.py:186 netbox/vpn/models/crypto.py:152 msgid "SA lifetime (KB)" msgstr "Vida útil da Security Association (KB)" -#: templates/vpn/l2vpn.html:11 templates/vpn/l2vpntermination.html:9 +#: netbox/templates/vpn/l2vpn.html:11 +#: netbox/templates/vpn/l2vpntermination.html:9 msgid "L2VPN Attributes" msgstr "Atributos da L2VPN" -#: templates/vpn/l2vpn.html:60 templates/vpn/tunnel.html:76 +#: netbox/templates/vpn/l2vpn.html:60 netbox/templates/vpn/tunnel.html:76 msgid "Add a Termination" msgstr "Adicionar uma Terminação" -#: templates/vpn/tunnel.html:9 +#: netbox/templates/vpn/tunnel.html:9 msgid "Add Termination" msgstr "Adicionar Terminação" -#: templates/vpn/tunnel.html:37 vpn/forms/bulk_edit.py:49 -#: vpn/forms/bulk_import.py:48 vpn/forms/filtersets.py:57 +#: netbox/templates/vpn/tunnel.html:37 netbox/vpn/forms/bulk_edit.py:49 +#: netbox/vpn/forms/bulk_import.py:48 netbox/vpn/forms/filtersets.py:57 msgid "Encapsulation" msgstr "Encapsulamento" -#: templates/vpn/tunnel.html:41 vpn/forms/bulk_edit.py:55 -#: vpn/forms/bulk_import.py:53 vpn/forms/filtersets.py:64 -#: vpn/models/crypto.py:250 vpn/tables/tunnels.py:51 +#: netbox/templates/vpn/tunnel.html:41 netbox/vpn/forms/bulk_edit.py:55 +#: netbox/vpn/forms/bulk_import.py:53 netbox/vpn/forms/filtersets.py:64 +#: netbox/vpn/models/crypto.py:250 netbox/vpn/tables/tunnels.py:51 msgid "IPSec profile" msgstr "Perfil IPsec" -#: templates/vpn/tunnel.html:45 vpn/forms/bulk_edit.py:69 -#: vpn/forms/filtersets.py:68 +#: netbox/templates/vpn/tunnel.html:45 netbox/vpn/forms/bulk_edit.py:69 +#: netbox/vpn/forms/filtersets.py:68 msgid "Tunnel ID" msgstr "ID do Túnel" -#: templates/vpn/tunnelgroup.html:14 +#: netbox/templates/vpn/tunnelgroup.html:14 msgid "Add Tunnel" msgstr "Adicionar Túnel" -#: templates/vpn/tunnelgroup.html:23 vpn/forms/model_forms.py:36 -#: vpn/forms/model_forms.py:49 +#: netbox/templates/vpn/tunnelgroup.html:23 netbox/vpn/forms/model_forms.py:36 +#: netbox/vpn/forms/model_forms.py:49 msgid "Tunnel Group" msgstr "Grupo de Túneis" -#: templates/vpn/tunneltermination.html:10 +#: netbox/templates/vpn/tunneltermination.html:10 msgid "Tunnel Termination" msgstr "Terminação do Túnel" -#: templates/vpn/tunneltermination.html:35 vpn/forms/bulk_import.py:107 -#: vpn/forms/model_forms.py:102 vpn/forms/model_forms.py:138 -#: vpn/forms/model_forms.py:247 vpn/tables/tunnels.py:101 +#: netbox/templates/vpn/tunneltermination.html:35 +#: netbox/vpn/forms/bulk_import.py:107 netbox/vpn/forms/model_forms.py:102 +#: netbox/vpn/forms/model_forms.py:138 netbox/vpn/forms/model_forms.py:247 +#: netbox/vpn/tables/tunnels.py:101 msgid "Outside IP" msgstr "IP Externo" -#: templates/vpn/tunneltermination.html:51 +#: netbox/templates/vpn/tunneltermination.html:51 msgid "Peer Terminations" msgstr "Pares de Terminações" -#: templates/wireless/inc/authentication_attrs.html:12 +#: netbox/templates/wireless/inc/authentication_attrs.html:12 msgid "Cipher" msgstr "Cifra" -#: templates/wireless/inc/authentication_attrs.html:16 +#: netbox/templates/wireless/inc/authentication_attrs.html:16 msgid "PSK" msgstr "PSK" -#: templates/wireless/inc/wirelesslink_interface.html:35 -#: templates/wireless/inc/wirelesslink_interface.html:45 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:35 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:45 msgctxt "Abbreviation for megahertz" msgid "MHz" msgstr "MHz" -#: templates/wireless/wirelesslan.html:57 +#: netbox/templates/wireless/wirelesslan.html:57 msgid "Attached Interfaces" msgstr "Interfaces Anexadas" -#: templates/wireless/wirelesslangroup.html:17 +#: netbox/templates/wireless/wirelesslangroup.html:17 msgid "Add Wireless LAN" msgstr "Adicionar Rede Wireless" -#: templates/wireless/wirelesslangroup.html:26 -#: wireless/forms/model_forms.py:28 +#: netbox/templates/wireless/wirelesslangroup.html:26 +#: netbox/wireless/forms/model_forms.py:28 msgid "Wireless LAN Group" msgstr "Grupo de Redes Wireless" -#: templates/wireless/wirelesslangroup.html:59 +#: netbox/templates/wireless/wirelesslangroup.html:59 msgid "Add Wireless LAN Group" msgstr "Adicionar Grupo de Redes Wireless" -#: templates/wireless/wirelesslink.html:14 +#: netbox/templates/wireless/wirelesslink.html:14 msgid "Link Properties" msgstr "Propriedades do Link" -#: templates/wireless/wirelesslink.html:38 wireless/forms/bulk_edit.py:129 -#: wireless/forms/filtersets.py:102 wireless/forms/model_forms.py:165 +#: 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 "Distância" -#: tenancy/filtersets.py:28 +#: netbox/tenancy/filtersets.py:28 msgid "Parent contact group (ID)" msgstr "Grupo de contatos principal (ID)" -#: tenancy/filtersets.py:34 +#: netbox/tenancy/filtersets.py:34 msgid "Parent contact group (slug)" msgstr "Grupo de contatos principal (slug)" -#: tenancy/filtersets.py:40 tenancy/filtersets.py:67 tenancy/filtersets.py:110 +#: netbox/tenancy/filtersets.py:40 netbox/tenancy/filtersets.py:67 +#: netbox/tenancy/filtersets.py:110 msgid "Contact group (ID)" msgstr "Grupo de contatos (ID)" -#: tenancy/filtersets.py:47 tenancy/filtersets.py:74 tenancy/filtersets.py:117 +#: netbox/tenancy/filtersets.py:47 netbox/tenancy/filtersets.py:74 +#: netbox/tenancy/filtersets.py:117 msgid "Contact group (slug)" msgstr "Grupo de contatos (slug)" -#: tenancy/filtersets.py:104 +#: netbox/tenancy/filtersets.py:104 msgid "Contact (ID)" msgstr "Contato (ID)" -#: tenancy/filtersets.py:121 +#: netbox/tenancy/filtersets.py:121 msgid "Contact role (ID)" msgstr "Função do contato (ID)" -#: tenancy/filtersets.py:127 +#: netbox/tenancy/filtersets.py:127 msgid "Contact role (slug)" msgstr "Função do contato (slug)" -#: tenancy/filtersets.py:158 +#: netbox/tenancy/filtersets.py:158 msgid "Contact group" msgstr "Grupo de contatos" -#: tenancy/filtersets.py:169 +#: netbox/tenancy/filtersets.py:169 msgid "Parent tenant group (ID)" msgstr "Grupo de inquilinos principal (ID)" -#: tenancy/filtersets.py:175 +#: netbox/tenancy/filtersets.py:175 msgid "Parent tenant group (slug)" msgstr "Grupo de inquilinos principal (slug)" -#: tenancy/filtersets.py:181 tenancy/filtersets.py:201 +#: netbox/tenancy/filtersets.py:181 netbox/tenancy/filtersets.py:201 msgid "Tenant group (ID)" msgstr "Grupo de inquilinos (ID)" -#: tenancy/filtersets.py:234 +#: netbox/tenancy/filtersets.py:234 msgid "Tenant Group (ID)" msgstr "Grupo de Inquilinos (ID)" -#: tenancy/filtersets.py:241 +#: netbox/tenancy/filtersets.py:241 msgid "Tenant Group (slug)" msgstr "Grupo de inquilinos (slug)" -#: tenancy/forms/bulk_edit.py:66 +#: netbox/tenancy/forms/bulk_edit.py:66 msgid "Desciption" msgstr "Descrição" -#: tenancy/forms/bulk_import.py:101 +#: netbox/tenancy/forms/bulk_import.py:101 msgid "Assigned contact" msgstr "Contato atribuído" -#: tenancy/models/contacts.py:32 +#: netbox/tenancy/models/contacts.py:32 msgid "contact group" msgstr "grupo de contatos" -#: tenancy/models/contacts.py:33 +#: netbox/tenancy/models/contacts.py:33 msgid "contact groups" msgstr "grupos de contatos" -#: tenancy/models/contacts.py:48 +#: netbox/tenancy/models/contacts.py:48 msgid "contact role" msgstr "função do contato" -#: tenancy/models/contacts.py:49 +#: netbox/tenancy/models/contacts.py:49 msgid "contact roles" msgstr "funções do contato" -#: tenancy/models/contacts.py:68 +#: netbox/tenancy/models/contacts.py:68 msgid "title" msgstr "título" -#: tenancy/models/contacts.py:73 +#: netbox/tenancy/models/contacts.py:73 msgid "phone" msgstr "telefone" -#: tenancy/models/contacts.py:78 +#: netbox/tenancy/models/contacts.py:78 msgid "email" msgstr "e-mail" -#: tenancy/models/contacts.py:87 +#: netbox/tenancy/models/contacts.py:87 msgid "link" msgstr "link" -#: tenancy/models/contacts.py:103 +#: netbox/tenancy/models/contacts.py:103 msgid "contact" msgstr "contato" -#: tenancy/models/contacts.py:104 +#: netbox/tenancy/models/contacts.py:104 msgid "contacts" msgstr "contatos" -#: tenancy/models/contacts.py:153 +#: netbox/tenancy/models/contacts.py:153 msgid "contact assignment" msgstr "atribuição do contato" -#: tenancy/models/contacts.py:154 +#: netbox/tenancy/models/contacts.py:154 msgid "contact assignments" msgstr "atribuições do contato" -#: tenancy/models/contacts.py:170 +#: netbox/tenancy/models/contacts.py:170 #, python-brace-format msgid "Contacts cannot be assigned to this object type ({type})." msgstr "Os contatos não podem ser atribuídos a este tipo de objeto ({type})." -#: tenancy/models/tenants.py:32 +#: netbox/tenancy/models/tenants.py:32 msgid "tenant group" msgstr "grupo de inquilinos" -#: tenancy/models/tenants.py:33 +#: netbox/tenancy/models/tenants.py:33 msgid "tenant groups" msgstr "grupos de inquilinos" -#: tenancy/models/tenants.py:70 +#: netbox/tenancy/models/tenants.py:70 msgid "Tenant name must be unique per group." msgstr "O nome do inquilino deve ser exclusivo por grupo." -#: tenancy/models/tenants.py:80 +#: netbox/tenancy/models/tenants.py:80 msgid "Tenant slug must be unique per group." msgstr "Slug do inquilino deve ser exclusivo por grupo." -#: tenancy/models/tenants.py:88 +#: netbox/tenancy/models/tenants.py:88 msgid "tenant" msgstr "inquilino" -#: tenancy/models/tenants.py:89 +#: netbox/tenancy/models/tenants.py:89 msgid "tenants" msgstr "inquilinos" -#: tenancy/tables/contacts.py:112 +#: netbox/tenancy/tables/contacts.py:112 msgid "Contact Title" msgstr "Título do Contato" -#: tenancy/tables/contacts.py:116 +#: netbox/tenancy/tables/contacts.py:116 msgid "Contact Phone" msgstr "Telefone de Contato" -#: tenancy/tables/contacts.py:121 +#: netbox/tenancy/tables/contacts.py:121 msgid "Contact Email" msgstr "E-mail de Contato" -#: tenancy/tables/contacts.py:125 +#: netbox/tenancy/tables/contacts.py:125 msgid "Contact Address" msgstr "Endereço de Contato" -#: tenancy/tables/contacts.py:129 +#: netbox/tenancy/tables/contacts.py:129 msgid "Contact Link" msgstr "Link de Contato" -#: tenancy/tables/contacts.py:133 +#: netbox/tenancy/tables/contacts.py:133 msgid "Contact Description" msgstr "Descrição do Contato" -#: users/filtersets.py:33 users/filtersets.py:73 +#: netbox/users/filtersets.py:33 netbox/users/filtersets.py:73 msgid "Permission (ID)" msgstr "Permissão (ID)" -#: users/filtersets.py:38 users/filtersets.py:78 +#: netbox/users/filtersets.py:38 netbox/users/filtersets.py:78 msgid "Notification group (ID)" msgstr "Grupo de notificação (ID)" -#: users/forms/bulk_edit.py:26 +#: netbox/users/forms/bulk_edit.py:26 msgid "First name" msgstr "Primeiro nome" -#: users/forms/bulk_edit.py:31 +#: netbox/users/forms/bulk_edit.py:31 msgid "Last name" msgstr "Último nome" -#: users/forms/bulk_edit.py:43 +#: netbox/users/forms/bulk_edit.py:43 msgid "Staff status" msgstr "Status de staff" -#: users/forms/bulk_edit.py:48 +#: netbox/users/forms/bulk_edit.py:48 msgid "Superuser status" msgstr "Superusuário" -#: users/forms/bulk_import.py:41 +#: netbox/users/forms/bulk_import.py:41 msgid "If no key is provided, one will be generated automatically." msgstr "Se nenhuma chave for fornecida, uma será gerada automaticamente." -#: users/forms/filtersets.py:51 users/tables.py:42 +#: netbox/users/forms/filtersets.py:51 netbox/users/tables.py:42 msgid "Is Staff" msgstr "Staff" -#: users/forms/filtersets.py:58 users/tables.py:45 +#: netbox/users/forms/filtersets.py:58 netbox/users/tables.py:45 msgid "Is Superuser" msgstr "É Superusuário" -#: users/forms/filtersets.py:91 users/tables.py:86 +#: netbox/users/forms/filtersets.py:91 netbox/users/tables.py:86 msgid "Can View" msgstr "Pode Visualizar" -#: users/forms/filtersets.py:98 users/tables.py:89 +#: netbox/users/forms/filtersets.py:98 netbox/users/tables.py:89 msgid "Can Add" msgstr "Pode Adicionar" -#: users/forms/filtersets.py:105 users/tables.py:92 +#: netbox/users/forms/filtersets.py:105 netbox/users/tables.py:92 msgid "Can Change" msgstr "Pode Alterar" -#: users/forms/filtersets.py:112 users/tables.py:95 +#: netbox/users/forms/filtersets.py:112 netbox/users/tables.py:95 msgid "Can Delete" msgstr "Pode Excluir" -#: users/forms/model_forms.py:62 +#: netbox/users/forms/model_forms.py:62 msgid "User Interface" msgstr "Interface de Usuário" -#: users/forms/model_forms.py:114 +#: netbox/users/forms/model_forms.py:114 msgid "" "Keys must be at least 40 characters in length. Be sure to record " "your key prior to submitting this form, as it may no longer be " @@ -13982,7 +14819,7 @@ msgstr "" "salvar sua chave antes de enviar este formulário, pois ela não será" " mais acessível depois que o token for criado." -#: users/forms/model_forms.py:126 +#: netbox/users/forms/model_forms.py:126 msgid "" "Allowed IPv4/IPv6 networks from where the token can be used. Leave blank for" " no restrictions. Example: " @@ -13992,31 +14829,31 @@ msgstr "" "para nenhuma restrição. Exemplo: 10.1.1.0/24.192.168.10.16/32, 2001:db" " 8:1: :/64" -#: users/forms/model_forms.py:175 +#: netbox/users/forms/model_forms.py:175 msgid "Confirm password" msgstr "Confirme a senha" -#: users/forms/model_forms.py:178 +#: netbox/users/forms/model_forms.py:178 msgid "Enter the same password as before, for verification." msgstr "Digite a senha novamente." -#: users/forms/model_forms.py:227 +#: netbox/users/forms/model_forms.py:227 msgid "Passwords do not match! Please check your input and try again." msgstr "As senhas não coincidem! Verifique e tente novamente." -#: users/forms/model_forms.py:294 +#: netbox/users/forms/model_forms.py:294 msgid "Additional actions" msgstr "Ações adicionais" -#: users/forms/model_forms.py:297 +#: netbox/users/forms/model_forms.py:297 msgid "Actions granted in addition to those listed above" msgstr "Ações concedidas além das listadas acima" -#: users/forms/model_forms.py:313 +#: netbox/users/forms/model_forms.py:313 msgid "Objects" msgstr "Objetos" -#: users/forms/model_forms.py:325 +#: netbox/users/forms/model_forms.py:325 msgid "" "JSON expression of a queryset filter that will return only permitted " "objects. Leave null to match all objects of this type. A list of multiple " @@ -14026,79 +14863,79 @@ msgstr "" "permitidos. Deixe em nulo para corresponder a todos os objetos deste tipo. " "Uma lista de vários objetos resultará em uma operação lógica \"OR\"." -#: users/forms/model_forms.py:364 +#: netbox/users/forms/model_forms.py:364 msgid "At least one action must be selected." msgstr "Ao menos uma ação deve ser selecionada." -#: users/forms/model_forms.py:382 +#: netbox/users/forms/model_forms.py:382 #, python-brace-format msgid "Invalid filter for {model}: {error}" msgstr "Filtro inválido para {model}: {error}" -#: users/models/permissions.py:39 +#: netbox/users/models/permissions.py:39 msgid "The list of actions granted by this permission" msgstr "A lista de ações concedidas por esta permissão" -#: users/models/permissions.py:44 +#: netbox/users/models/permissions.py:44 msgid "constraints" msgstr "restrições" -#: users/models/permissions.py:45 +#: netbox/users/models/permissions.py:45 msgid "" "Queryset filter matching the applicable objects of the selected type(s)" msgstr "" "Filtro queryset que corresponde aos objetos aplicáveis do(s) tipo(s) " "selecionado(s)" -#: users/models/permissions.py:52 +#: netbox/users/models/permissions.py:52 msgid "permission" msgstr "permissão" -#: users/models/permissions.py:53 users/models/users.py:47 +#: netbox/users/models/permissions.py:53 netbox/users/models/users.py:47 msgid "permissions" msgstr "permissões" -#: users/models/preferences.py:29 users/models/preferences.py:30 +#: netbox/users/models/preferences.py:29 netbox/users/models/preferences.py:30 msgid "user preferences" msgstr "preferências do usuário" -#: users/models/preferences.py:97 +#: netbox/users/models/preferences.py:97 #, python-brace-format msgid "Key '{path}' is a leaf node; cannot assign new keys" msgstr "Chave '{path}'é um nó folha; não é possível atribuir novas chaves" -#: users/models/preferences.py:109 +#: netbox/users/models/preferences.py:109 #, python-brace-format msgid "Key '{path}' is a dictionary; cannot assign a non-dictionary value" msgstr "" "Chave '{path}'é um dicionário; não pode atribuir um valor que não seja do " "dicionário" -#: users/models/tokens.py:36 +#: netbox/users/models/tokens.py:36 msgid "expires" msgstr "expira" -#: users/models/tokens.py:41 +#: netbox/users/models/tokens.py:41 msgid "last used" msgstr "usado pela última vez" -#: users/models/tokens.py:46 +#: netbox/users/models/tokens.py:46 msgid "key" msgstr "chave" -#: users/models/tokens.py:52 +#: netbox/users/models/tokens.py:52 msgid "write enabled" msgstr "escrita habilitada" -#: users/models/tokens.py:54 +#: netbox/users/models/tokens.py:54 msgid "Permit create/update/delete operations using this key" msgstr "Permitir operações de criação/atualização/exclusão usando esta chave" -#: users/models/tokens.py:65 +#: netbox/users/models/tokens.py:65 msgid "allowed IPs" msgstr "IPs permitidos" -#: users/models/tokens.py:67 +#: netbox/users/models/tokens.py:67 msgid "" "Allowed IPv4/IPv6 networks from where the token can be used. Leave blank for" " no restrictions. Ex: \"10.1.1.0/24, 192.168.10.16/32, 2001:DB8:1::/64\"" @@ -14107,42 +14944,42 @@ msgstr "" "para nenhuma restrição. Ex: “10.1.1.0/24, 192.168.10.16/32, 2001:DB 8:1: " ":/64\"" -#: users/models/tokens.py:75 +#: netbox/users/models/tokens.py:75 msgid "token" msgstr "token" -#: users/models/tokens.py:76 +#: netbox/users/models/tokens.py:76 msgid "tokens" msgstr "tokens" -#: users/models/users.py:57 vpn/models/crypto.py:42 +#: netbox/users/models/users.py:57 netbox/vpn/models/crypto.py:42 msgid "group" msgstr "grupo" -#: users/models/users.py:92 +#: netbox/users/models/users.py:92 msgid "user" msgstr "usuário" -#: users/models/users.py:104 +#: netbox/users/models/users.py:104 msgid "A user with this username already exists." msgstr "Nome de usuário já existente." -#: users/tables.py:98 +#: netbox/users/tables.py:98 msgid "Custom Actions" msgstr "Ações Personalizadas" -#: utilities/api.py:153 +#: netbox/utilities/api.py:153 #, python-brace-format msgid "Related object not found using the provided attributes: {params}" msgstr "" "Objeto relacionado não encontrado usando os atributos fornecidos: {params}" -#: utilities/api.py:156 +#: netbox/utilities/api.py:156 #, python-brace-format msgid "Multiple objects match the provided attributes: {params}" msgstr "Vários objetos correspondem aos atributos fornecidos: {params}" -#: utilities/api.py:168 +#: netbox/utilities/api.py:168 #, python-brace-format msgid "" "Related objects must be referenced by numeric ID or by dictionary of " @@ -14151,42 +14988,42 @@ msgstr "" "Objetos relacionados devem ser referenciados por uma ID numérica ou por um " "dicionário de atributos. Recebeu um valor desconhecido: {value}" -#: utilities/api.py:177 +#: netbox/utilities/api.py:177 #, python-brace-format msgid "Related object not found using the provided numeric ID: {id}" msgstr "" "Objeto relacionado não encontrado usando a ID numérica fornecida: {id}" -#: utilities/choices.py:19 +#: netbox/utilities/choices.py:19 #, python-brace-format msgid "{name} has a key defined but CHOICES is not a list" msgstr "{name} possui uma chave definida, mas CHOICES não é uma lista" -#: utilities/conversion.py:19 +#: netbox/utilities/conversion.py:19 msgid "Weight must be a positive number" msgstr "Peso deve ser um número positivo" -#: utilities/conversion.py:21 +#: netbox/utilities/conversion.py:21 #, python-brace-format msgid "Invalid value '{weight}' for weight (must be a number)" msgstr "Valor '{weight}'para peso é inválido (deve ser um número)" -#: utilities/conversion.py:32 utilities/conversion.py:62 +#: netbox/utilities/conversion.py:32 netbox/utilities/conversion.py:62 #, python-brace-format msgid "Unknown unit {unit}. Must be one of the following: {valid_units}" msgstr "" "Unidade {unit} é desconhecida. Deve ser um dos seguintes: {valid_units}" -#: utilities/conversion.py:45 +#: netbox/utilities/conversion.py:45 msgid "Length must be a positive number" msgstr "Comprimento deve ser um número positivo" -#: utilities/conversion.py:47 +#: netbox/utilities/conversion.py:47 #, python-brace-format msgid "Invalid value '{length}' for length (must be a number)" msgstr "Valor '{length}'para comprimento é inválido (deve ser um número)" -#: utilities/error_handlers.py:31 +#: netbox/utilities/error_handlers.py:31 #, python-brace-format msgid "" "Unable to delete {objects}. {count} dependent objects were " @@ -14195,15 +15032,15 @@ msgstr "" "Não é possível excluir {objects}. {count} objetos " "dependentes foram encontrados: " -#: utilities/error_handlers.py:33 +#: netbox/utilities/error_handlers.py:33 msgid "More than 50" msgstr "Mais que 50" -#: utilities/fields.py:30 +#: netbox/utilities/fields.py:30 msgid "RGB color in hexadecimal. Example: " msgstr "Cor RGB em hexadecimal. Exemplo:" -#: utilities/fields.py:159 +#: netbox/utilities/fields.py:159 #, python-format msgid "" "%s(%r) is invalid. to_model parameter to CounterCacheField must be a string " @@ -14212,7 +15049,7 @@ msgstr "" "%s(%r) é inválido. O parâmetro to_model para CounterCacheField deve ser uma " "string no formato 'app.model'" -#: utilities/fields.py:169 +#: netbox/utilities/fields.py:169 #, python-format msgid "" "%s(%r) is invalid. to_field parameter to CounterCacheField must be a string " @@ -14221,39 +15058,39 @@ msgstr "" "%s(%r) é inválido. O parâmetro to_field para CounterCacheField deve ser uma " "string no formato 'field'" -#: utilities/forms/bulk_import.py:23 +#: netbox/utilities/forms/bulk_import.py:23 msgid "Enter object data in CSV, JSON or YAML format." msgstr "Insira os dados do objeto no formato CSV, JSON ou YAML." -#: utilities/forms/bulk_import.py:36 +#: netbox/utilities/forms/bulk_import.py:36 msgid "CSV delimiter" msgstr "Delimitador CSV" -#: utilities/forms/bulk_import.py:37 +#: netbox/utilities/forms/bulk_import.py:37 msgid "The character which delimits CSV fields. Applies only to CSV format." msgstr "" "O caractere que delimita os campos CSV. Aplica-se somente ao formato CSV." -#: utilities/forms/bulk_import.py:51 +#: netbox/utilities/forms/bulk_import.py:51 msgid "Form data must be empty when uploading/selecting a file." msgstr "" "Os dados do formulário devem estar vazios ao carregar/selecionar um arquivo." -#: utilities/forms/bulk_import.py:80 +#: netbox/utilities/forms/bulk_import.py:80 #, python-brace-format msgid "Unknown data format: {format}" msgstr "Formato de dados desconhecido: {format}" -#: utilities/forms/bulk_import.py:100 +#: netbox/utilities/forms/bulk_import.py:100 msgid "Unable to detect data format. Please specify." msgstr "" "Não foi possível detectar o formato dos dados. Por favor, especifique." -#: utilities/forms/bulk_import.py:123 +#: netbox/utilities/forms/bulk_import.py:123 msgid "Invalid CSV delimiter" msgstr "Delimitador CSV inválido" -#: utilities/forms/bulk_import.py:167 +#: netbox/utilities/forms/bulk_import.py:167 msgid "" "Invalid YAML data. Data must be in the form of multiple documents, or a " "single document comprising a list of dictionaries." @@ -14261,7 +15098,7 @@ msgstr "" "Dados YAML inválidos. Os dados devem estar na forma de vários documentos ou " "de um único documento contendo uma lista de dicionários." -#: utilities/forms/fields/array.py:20 +#: netbox/utilities/forms/fields/array.py:20 #, python-brace-format msgid "" "Invalid list ({value}). Must be numeric and ranges must be in ascending " @@ -14270,7 +15107,7 @@ msgstr "" "Lista inválida ({value}). Deve ser numérica e os intervalos devem estar em " "ordem crescente." -#: utilities/forms/fields/array.py:40 +#: netbox/utilities/forms/fields/array.py:40 msgid "" "Specify one or more numeric ranges separated by commas. Example: " "1-5,20-30" @@ -14278,7 +15115,7 @@ msgstr "" "Especifique um ou mais intervalos numéricos separados por vírgulas. Exemplo:" " 1-5,20-30" -#: utilities/forms/fields/array.py:47 +#: netbox/utilities/forms/fields/array.py:47 #, python-brace-format msgid "" "Invalid ranges ({value}). Must be a range of integers in ascending order." @@ -14286,17 +15123,18 @@ msgstr "" "Intervalos inválidos ({value}). Deve ser um intervalo de inteiros em ordem " "ascendente." -#: utilities/forms/fields/csv.py:44 +#: netbox/utilities/forms/fields/csv.py:44 #, python-brace-format msgid "Invalid value for a multiple choice field: {value}" msgstr "Valor inválido para um campo de múltipla escolha: {value}" -#: utilities/forms/fields/csv.py:57 utilities/forms/fields/csv.py:78 +#: netbox/utilities/forms/fields/csv.py:57 +#: netbox/utilities/forms/fields/csv.py:78 #, python-format msgid "Object not found: %(value)s" msgstr "Objeto não encontrado: %(value)s" -#: utilities/forms/fields/csv.py:65 +#: netbox/utilities/forms/fields/csv.py:65 #, python-brace-format msgid "" "\"{value}\" is not a unique value for this field; multiple objects were " @@ -14305,20 +15143,20 @@ msgstr "" "“{value}“não é um valor exclusivo para este campo; vários objetos foram " "encontrados" -#: utilities/forms/fields/csv.py:69 +#: netbox/utilities/forms/fields/csv.py:69 #, python-brace-format msgid "\"{field_name}\" is an invalid accessor field name." msgstr "“{field_name}“é um nome de campo de acesso inválido." -#: utilities/forms/fields/csv.py:101 +#: netbox/utilities/forms/fields/csv.py:101 msgid "Object type must be specified as \".\"" msgstr "O tipo de objeto deve ser especificado como”.“" -#: utilities/forms/fields/csv.py:105 +#: netbox/utilities/forms/fields/csv.py:105 msgid "Invalid object type" msgstr "Tipo de objeto inválido" -#: utilities/forms/fields/expandable.py:25 +#: netbox/utilities/forms/fields/expandable.py:25 msgid "" "Alphanumeric ranges are supported for bulk creation. Mixed cases and types " "within a single range are not supported (example: " @@ -14328,7 +15166,7 @@ msgstr "" " mistos dentro de um único intervalo não são suportados (exemplo: [ge," " xe] -0/0/ [0-9])." -#: utilities/forms/fields/expandable.py:46 +#: netbox/utilities/forms/fields/expandable.py:46 msgid "" "Specify a numeric range to create multiple IPs.
    Example: " "192.0.2.[1,5,100-254]/24" @@ -14336,7 +15174,7 @@ msgstr "" "Especifique um intervalo numérico para criar vários IPs.
    Exemplo: " "192,0.2. [1,5,100-254] /24" -#: utilities/forms/fields/fields.py:31 +#: netbox/utilities/forms/fields/fields.py:31 #, python-brace-format msgid "" " Uso de sintaxe Markdown é suportada" -#: utilities/forms/fields/fields.py:48 +#: netbox/utilities/forms/fields/fields.py:48 msgid "URL-friendly unique shorthand" msgstr "Abreviatura exclusiva da URL amigável" -#: utilities/forms/fields/fields.py:101 +#: netbox/utilities/forms/fields/fields.py:101 msgid "Enter context data in JSON format." msgstr "" "Inserir dados de contexto no formato JSON." -#: utilities/forms/fields/fields.py:124 +#: netbox/utilities/forms/fields/fields.py:124 msgid "MAC address must be in EUI-48 format" msgstr "O endereço MAC deve estar no formato EUI-48" -#: utilities/forms/forms.py:52 +#: netbox/utilities/forms/forms.py:52 msgid "Use regular expressions" msgstr "Usar expressões regulares" -#: utilities/forms/forms.py:75 +#: netbox/utilities/forms/forms.py:75 msgid "" "Numeric ID of an existing object to update (if not creating a new object)" msgstr "" "ID numérica de um objeto existente a ser atualizado (se não estiver criando " "um novo objeto)" -#: utilities/forms/forms.py:92 +#: netbox/utilities/forms/forms.py:92 #, python-brace-format msgid "Unrecognized header: {name}" msgstr "Cabeçalho não reconhecido: {name}" -#: utilities/forms/forms.py:118 +#: netbox/utilities/forms/forms.py:118 msgid "Available Columns" msgstr "Colunas Disponíveis" -#: utilities/forms/forms.py:126 +#: netbox/utilities/forms/forms.py:126 msgid "Selected Columns" msgstr "Colunas Selecionadas" -#: utilities/forms/mixins.py:44 +#: netbox/utilities/forms/mixins.py:44 msgid "" "This object has been modified since the form was rendered. Please consult " "the object's change log for details." @@ -14390,13 +15228,13 @@ msgstr "" "Este objeto foi modificado desde que o formulário foi renderizado. Consulte " "o changelog do objeto para obter mais detalhes." -#: utilities/forms/utils.py:42 utilities/forms/utils.py:68 -#: utilities/forms/utils.py:85 utilities/forms/utils.py:87 +#: netbox/utilities/forms/utils.py:42 netbox/utilities/forms/utils.py:68 +#: netbox/utilities/forms/utils.py:85 netbox/utilities/forms/utils.py:87 #, python-brace-format msgid "Range \"{value}\" is invalid." msgstr "Intervalo ”{value}“ é inválido." -#: utilities/forms/utils.py:74 +#: netbox/utilities/forms/utils.py:74 #, python-brace-format msgid "" "Invalid range: Ending value ({end}) must be greater than beginning value " @@ -14405,71 +15243,71 @@ msgstr "" "Intervalo inválido: valor final ({end}) deve ser maior que o valor inicial " "({begin})." -#: utilities/forms/utils.py:232 +#: netbox/utilities/forms/utils.py:232 #, python-brace-format msgid "Duplicate or conflicting column header for \"{field}\"" msgstr "Cabeçalho de coluna duplicado ou conflitante com ”{field}“" -#: utilities/forms/utils.py:238 +#: netbox/utilities/forms/utils.py:238 #, python-brace-format msgid "Duplicate or conflicting column header for \"{header}\"" msgstr "Cabeçalho de coluna duplicado ou conflitante com ”{header}“" -#: utilities/forms/utils.py:247 +#: netbox/utilities/forms/utils.py:247 #, python-brace-format msgid "Row {row}: Expected {count_expected} columns but found {count_found}" msgstr "" "Linha {row}: Esperado(s) {count_expected} coluna(s), mas encontrado(s) " "{count_found}" -#: utilities/forms/utils.py:270 +#: netbox/utilities/forms/utils.py:270 #, python-brace-format msgid "Unexpected column header \"{field}\" found." msgstr "Cabeçalho de coluna inesperado ”{field}“ encontrado." -#: utilities/forms/utils.py:272 +#: netbox/utilities/forms/utils.py:272 #, python-brace-format msgid "Column \"{field}\" is not a related object; cannot use dots" msgstr "Coluna ”{field}“ não é um objeto relacionado; não pode usar pontos" -#: utilities/forms/utils.py:276 +#: netbox/utilities/forms/utils.py:276 #, python-brace-format msgid "Invalid related object attribute for column \"{field}\": {to_field}" msgstr "" "Atributo de objeto relacionado inválido para a coluna ”{field}“: {to_field}" -#: utilities/forms/utils.py:284 +#: netbox/utilities/forms/utils.py:284 #, python-brace-format msgid "Required column header \"{header}\" not found." msgstr "Cabeçalho de coluna obrigatório ”{header}“ não encontrado." -#: utilities/forms/widgets/apiselect.py:124 +#: netbox/utilities/forms/widgets/apiselect.py:124 #, python-brace-format msgid "Missing required value for dynamic query param: '{dynamic_params}'" msgstr "" "Valor necessário ausente para o parâmetro de consulta dinâmica: " "'{dynamic_params}'" -#: utilities/forms/widgets/apiselect.py:141 +#: netbox/utilities/forms/widgets/apiselect.py:141 #, python-brace-format msgid "Missing required value for static query param: '{static_params}'" msgstr "" "Valor necessário ausente para o parâmetro de consulta estática: " "'{static_params}'" -#: utilities/password_validation.py:13 +#: netbox/utilities/password_validation.py:13 msgid "Password must have at least one numeral." msgstr "Senha deve possuir ao menos um número." -#: utilities/password_validation.py:18 +#: netbox/utilities/password_validation.py:18 msgid "Password must have at least one uppercase letter." msgstr "Senha deve possuir ao menos uma letra maiúscula." -#: utilities/password_validation.py:23 +#: netbox/utilities/password_validation.py:23 msgid "Password must have at least one lowercase letter." msgstr "Senha deve possuir ao menos uma letra minúscula." -#: utilities/password_validation.py:27 +#: netbox/utilities/password_validation.py:27 msgid "" "Your password must contain at least one numeral, one uppercase letter and " "one lowercase letter." @@ -14477,7 +15315,7 @@ msgstr "" "Sua senha deve possuir ao menos um número, uma letra maíuscula e uma letra " "minúscula." -#: utilities/permissions.py:42 +#: netbox/utilities/permissions.py:42 #, python-brace-format msgid "" "Invalid permission name: {name}. Must be in the format " @@ -14486,125 +15324,125 @@ msgstr "" "Nome de permissão inválido: {name}. Deve estar no formato " "._" -#: utilities/permissions.py:60 +#: netbox/utilities/permissions.py:60 #, python-brace-format msgid "Unknown app_label/model_name for {name}" msgstr "app_label/model_name desconhecido para {name}" -#: utilities/request.py:76 +#: netbox/utilities/request.py:76 #, python-brace-format msgid "Invalid IP address set for {header}: {ip}" msgstr "Endereço IP inválido definido para {header}: {ip}" -#: utilities/tables.py:47 +#: netbox/utilities/tables.py:47 #, python-brace-format msgid "A column named {name} is already defined for table {table_name}" msgstr "Uma coluna chamada {name} já está definida para a tabela {table_name}" -#: utilities/templates/builtins/customfield_value.html:30 +#: netbox/utilities/templates/builtins/customfield_value.html:30 msgid "Not defined" msgstr "Não definido" -#: utilities/templates/buttons/bookmark.html:9 +#: netbox/utilities/templates/buttons/bookmark.html:9 msgid "Unbookmark" msgstr "Desfavoritar" -#: utilities/templates/buttons/bookmark.html:13 +#: netbox/utilities/templates/buttons/bookmark.html:13 msgid "Bookmark" msgstr "Favorito" -#: utilities/templates/buttons/clone.html:4 +#: netbox/utilities/templates/buttons/clone.html:4 msgid "Clone" msgstr "Clonar" -#: utilities/templates/buttons/export.html:7 +#: netbox/utilities/templates/buttons/export.html:7 msgid "Current View" msgstr "Visualização Atual" -#: utilities/templates/buttons/export.html:8 +#: netbox/utilities/templates/buttons/export.html:8 msgid "All Data" msgstr "Todos os Dados" -#: utilities/templates/buttons/export.html:28 +#: netbox/utilities/templates/buttons/export.html:28 msgid "Add export template" msgstr "Adicionar modelo de exportação" -#: utilities/templates/buttons/import.html:4 +#: netbox/utilities/templates/buttons/import.html:4 msgid "Import" msgstr "Importar" -#: utilities/templates/buttons/subscribe.html:10 +#: netbox/utilities/templates/buttons/subscribe.html:10 msgid "Unsubscribe" msgstr "Cancelar inscrição" -#: utilities/templates/buttons/subscribe.html:14 +#: netbox/utilities/templates/buttons/subscribe.html:14 msgid "Subscribe" msgstr "Inscrever" -#: utilities/templates/form_helpers/render_field.html:41 +#: netbox/utilities/templates/form_helpers/render_field.html:41 msgid "Copy to clipboard" msgstr "Copiar para área de transferência" -#: utilities/templates/form_helpers/render_field.html:57 +#: netbox/utilities/templates/form_helpers/render_field.html:57 msgid "This field is required" msgstr "Este campo é obrigatório" -#: utilities/templates/form_helpers/render_field.html:70 +#: netbox/utilities/templates/form_helpers/render_field.html:70 msgid "Set Null" msgstr "Definir como Nulo" -#: utilities/templates/helpers/applied_filters.html:11 +#: netbox/utilities/templates/helpers/applied_filters.html:11 msgid "Clear all" msgstr "Limpar tudo" -#: utilities/templates/helpers/table_config_form.html:8 +#: netbox/utilities/templates/helpers/table_config_form.html:8 msgid "Table Configuration" msgstr "Configuração da Tabela" -#: utilities/templates/helpers/table_config_form.html:31 +#: netbox/utilities/templates/helpers/table_config_form.html:31 msgid "Move Up" msgstr "Mover para Cima" -#: utilities/templates/helpers/table_config_form.html:34 +#: netbox/utilities/templates/helpers/table_config_form.html:34 msgid "Move Down" msgstr "Mover para Baixo" -#: utilities/templates/navigation/menu.html:14 +#: netbox/utilities/templates/navigation/menu.html:14 msgid "Search…" msgstr "Buscar..." -#: utilities/templates/navigation/menu.html:14 +#: netbox/utilities/templates/navigation/menu.html:14 msgid "Search NetBox" msgstr "Buscar no Netbox" -#: utilities/templates/widgets/apiselect.html:7 +#: netbox/utilities/templates/widgets/apiselect.html:7 msgid "Open selector" msgstr "Abrir seletor" -#: utilities/templates/widgets/markdown_input.html:6 +#: netbox/utilities/templates/widgets/markdown_input.html:6 msgid "Write" msgstr "Escrita" -#: utilities/testing/views.py:632 +#: netbox/utilities/testing/views.py:632 msgid "The test must define csv_update_data." msgstr "O teste deve definir csv_update_data." -#: utilities/validators.py:65 +#: netbox/utilities/validators.py:65 #, python-brace-format msgid "{value} is not a valid regular expression." msgstr "{value} não é uma expressão regular válida." -#: utilities/views.py:57 +#: netbox/utilities/views.py:57 #, python-brace-format msgid "{self.__class__.__name__} must implement get_required_permission()" msgstr "{self.__class__.__name__} deve implementar get_required_permission ()" -#: utilities/views.py:93 +#: netbox/utilities/views.py:93 #, python-brace-format msgid "{class_name} must implement get_required_permission()" msgstr "{class_name} deve implementar get_required_permission ()" -#: utilities/views.py:117 +#: netbox/utilities/views.py:117 #, python-brace-format msgid "" "{class_name} has no queryset defined. ObjectPermissionRequiredMixin may only" @@ -14613,61 +15451,63 @@ msgstr "" "{class_name} não possui queryset definido. ObjectPermissionRequiredMixin só " "pode ser usado em visualizações que definem um queryset básico." -#: virtualization/filtersets.py:79 +#: netbox/virtualization/filtersets.py:79 msgid "Parent group (ID)" msgstr "Grupo principal (ID)" -#: virtualization/filtersets.py:85 +#: netbox/virtualization/filtersets.py:85 msgid "Parent group (slug)" msgstr "Grupo principal (slug)" -#: virtualization/filtersets.py:89 virtualization/filtersets.py:141 +#: netbox/virtualization/filtersets.py:89 +#: netbox/virtualization/filtersets.py:141 msgid "Cluster type (ID)" msgstr "Tipo de cluster (ID)" -#: virtualization/filtersets.py:151 virtualization/filtersets.py:271 +#: netbox/virtualization/filtersets.py:151 +#: netbox/virtualization/filtersets.py:271 msgid "Cluster (ID)" msgstr "Cluster (ID)" -#: virtualization/forms/bulk_edit.py:166 -#: virtualization/models/virtualmachines.py:115 +#: netbox/virtualization/forms/bulk_edit.py:166 +#: netbox/virtualization/models/virtualmachines.py:115 msgid "vCPUs" msgstr "vCPUs" -#: virtualization/forms/bulk_edit.py:170 +#: netbox/virtualization/forms/bulk_edit.py:170 msgid "Memory (MB)" msgstr "Memória (MB)" -#: virtualization/forms/bulk_edit.py:174 -msgid "Disk (GB)" -msgstr "Disco (GB)" +#: netbox/virtualization/forms/bulk_edit.py:174 +msgid "Disk (MB)" +msgstr "Disco (MB)" -#: virtualization/forms/bulk_edit.py:334 -#: virtualization/forms/filtersets.py:251 -msgid "Size (GB)" -msgstr "Tamanho (GB)" +#: netbox/virtualization/forms/bulk_edit.py:334 +#: netbox/virtualization/forms/filtersets.py:251 +msgid "Size (MB)" +msgstr "Tamanho (MB)" -#: virtualization/forms/bulk_import.py:44 +#: netbox/virtualization/forms/bulk_import.py:44 msgid "Type of cluster" msgstr "Tipo de cluster" -#: virtualization/forms/bulk_import.py:51 +#: netbox/virtualization/forms/bulk_import.py:51 msgid "Assigned cluster group" msgstr "Grupo de clusters atribuído" -#: virtualization/forms/bulk_import.py:96 +#: netbox/virtualization/forms/bulk_import.py:96 msgid "Assigned cluster" msgstr "Cluster atribuído" -#: virtualization/forms/bulk_import.py:103 +#: netbox/virtualization/forms/bulk_import.py:103 msgid "Assigned device within cluster" msgstr "Dispositivo atribuído dentro do cluster" -#: virtualization/forms/filtersets.py:183 +#: netbox/virtualization/forms/filtersets.py:183 msgid "Serial number" msgstr "Número de série" -#: virtualization/forms/model_forms.py:153 +#: netbox/virtualization/forms/model_forms.py:153 #, python-brace-format msgid "" "{device} belongs to a different site ({device_site}) than the cluster " @@ -14676,49 +15516,49 @@ msgstr "" "{device} pertence ao site ({device_site}), diferente do que pertence o " "cluster ({cluster_site})" -#: virtualization/forms/model_forms.py:192 +#: netbox/virtualization/forms/model_forms.py:192 msgid "Optionally pin this VM to a specific host device within the cluster" msgstr "Opcionalmente, vincule esta VM a um host específico dentro do cluster" -#: virtualization/forms/model_forms.py:221 +#: netbox/virtualization/forms/model_forms.py:221 msgid "Site/Cluster" msgstr "Site/Cluster" -#: virtualization/forms/model_forms.py:244 +#: netbox/virtualization/forms/model_forms.py:244 msgid "Disk size is managed via the attachment of virtual disks." msgstr "" "O tamanho do disco é gerenciado por meio da conexão de discos virtuais." -#: virtualization/forms/model_forms.py:372 -#: virtualization/tables/virtualmachines.py:111 +#: netbox/virtualization/forms/model_forms.py:372 +#: netbox/virtualization/tables/virtualmachines.py:111 msgid "Disk" msgstr "Disco" -#: virtualization/models/clusters.py:25 +#: netbox/virtualization/models/clusters.py:25 msgid "cluster type" msgstr "tipo de cluster" -#: virtualization/models/clusters.py:26 +#: netbox/virtualization/models/clusters.py:26 msgid "cluster types" msgstr "tipos de cluster" -#: virtualization/models/clusters.py:45 +#: netbox/virtualization/models/clusters.py:45 msgid "cluster group" msgstr "grupo de clusters" -#: virtualization/models/clusters.py:46 +#: netbox/virtualization/models/clusters.py:46 msgid "cluster groups" msgstr "grupos de clusters" -#: virtualization/models/clusters.py:121 +#: netbox/virtualization/models/clusters.py:121 msgid "cluster" msgstr "grupo" -#: virtualization/models/clusters.py:122 +#: netbox/virtualization/models/clusters.py:122 msgid "clusters" msgstr "clusters" -#: virtualization/models/clusters.py:141 +#: netbox/virtualization/models/clusters.py:141 #, python-brace-format msgid "" "{count} devices are assigned as hosts for this cluster but are not in site " @@ -14727,42 +15567,42 @@ msgstr "" "{count} dispositivo(s) está/estão atribuído(s) como host(s) para este " "cluster, mas não está/estão no site {site}" -#: virtualization/models/virtualmachines.py:123 +#: netbox/virtualization/models/virtualmachines.py:123 msgid "memory (MB)" msgstr "memória (MB)" -#: virtualization/models/virtualmachines.py:128 +#: netbox/virtualization/models/virtualmachines.py:128 msgid "disk (MB)" msgstr "disco (MB)" -#: virtualization/models/virtualmachines.py:166 +#: netbox/virtualization/models/virtualmachines.py:166 msgid "Virtual machine name must be unique per cluster." msgstr "O nome da máquina virtual deve ser exclusivo por cluster." -#: virtualization/models/virtualmachines.py:169 +#: netbox/virtualization/models/virtualmachines.py:169 msgid "virtual machine" msgstr "máquina virtual" -#: virtualization/models/virtualmachines.py:170 +#: netbox/virtualization/models/virtualmachines.py:170 msgid "virtual machines" msgstr "máquinas virtuais" -#: virtualization/models/virtualmachines.py:184 +#: netbox/virtualization/models/virtualmachines.py:184 msgid "A virtual machine must be assigned to a site and/or cluster." msgstr "Uma máquina virtual deve ser associada a um site e/ou cluster." -#: virtualization/models/virtualmachines.py:191 +#: netbox/virtualization/models/virtualmachines.py:191 #, python-brace-format msgid "" "The selected cluster ({cluster}) is not assigned to this site ({site})." msgstr "" "O cluster selecionado ({cluster}) não está atribuído a este site ({site})." -#: virtualization/models/virtualmachines.py:198 +#: netbox/virtualization/models/virtualmachines.py:198 msgid "Must specify a cluster when assigning a host device." msgstr "É necessário especificar um cluster ao atribuir um host." -#: virtualization/models/virtualmachines.py:203 +#: netbox/virtualization/models/virtualmachines.py:203 #, python-brace-format msgid "" "The selected device ({device}) is not assigned to this cluster ({cluster})." @@ -14770,7 +15610,7 @@ msgstr "" "O dispositivo selecionado ({device}) não está associado a este cluster " "({cluster})." -#: virtualization/models/virtualmachines.py:215 +#: netbox/virtualization/models/virtualmachines.py:215 #, python-brace-format msgid "" "The specified disk size ({size}) must match the aggregate size of assigned " @@ -14779,17 +15619,17 @@ msgstr "" "O tamanho do disco especificado ({size}) deve corresponder ao tamanho " "agregado dos discos virtuais associados ({total_size})." -#: virtualization/models/virtualmachines.py:229 +#: netbox/virtualization/models/virtualmachines.py:229 #, python-brace-format msgid "Must be an IPv{family} address. ({ip} is an IPv{version} address.)" msgstr "Deve ser um endereço IPv{family}. ({ip} é um endereço IPv{version}.)" -#: virtualization/models/virtualmachines.py:238 +#: netbox/virtualization/models/virtualmachines.py:238 #, python-brace-format msgid "The specified IP address ({ip}) is not assigned to this VM." msgstr "O endereço IP especificado ({ip}) não está associado a esta VM." -#: virtualization/models/virtualmachines.py:396 +#: netbox/virtualization/models/virtualmachines.py:396 #, python-brace-format msgid "" "The selected parent interface ({parent}) belongs to a different virtual " @@ -14798,7 +15638,7 @@ msgstr "" "A interface pai selecionada ({parent}) pertence a uma máquina virtual " "diferente ({virtual_machine})." -#: virtualization/models/virtualmachines.py:411 +#: netbox/virtualization/models/virtualmachines.py:411 #, python-brace-format msgid "" "The selected bridge interface ({bridge}) belongs to a different virtual " @@ -14807,7 +15647,7 @@ msgstr "" "A interface bridge selecionada ({bridge}) pertence a uma máquina virtual " "diferente ({virtual_machine})." -#: virtualization/models/virtualmachines.py:422 +#: netbox/virtualization/models/virtualmachines.py:422 #, python-brace-format msgid "" "The untagged VLAN ({untagged_vlan}) must belong to the same site as the " @@ -14816,393 +15656,416 @@ msgstr "" "A VLAN não tagueada ({untagged_vlan}) deve pertencer ao mesmo site da " "máquina virtual pai da interface ou deve ser global." -#: virtualization/models/virtualmachines.py:434 +#: netbox/virtualization/models/virtualmachines.py:434 msgid "size (MB)" msgstr "tamanho (MB)" -#: virtualization/models/virtualmachines.py:438 +#: netbox/virtualization/models/virtualmachines.py:438 msgid "virtual disk" msgstr "disco virtual" -#: virtualization/models/virtualmachines.py:439 +#: netbox/virtualization/models/virtualmachines.py:439 msgid "virtual disks" msgstr "discos virtuais" -#: virtualization/views.py:275 +#: netbox/virtualization/views.py:273 #, python-brace-format msgid "Added {count} devices to cluster {cluster}" msgstr "Adicionado(s) {count} dispositivo(s) para agrupar {cluster}" -#: virtualization/views.py:310 +#: netbox/virtualization/views.py:308 #, python-brace-format msgid "Removed {count} devices from cluster {cluster}" msgstr "Removido(s) {count} dispositivo(s) do cluster {cluster}" -#: vpn/choices.py:31 +#: netbox/vpn/choices.py:35 msgid "IPsec - Transport" msgstr "IPsec - Transporte" -#: vpn/choices.py:32 +#: netbox/vpn/choices.py:36 msgid "IPsec - Tunnel" msgstr "IPsec - Túnel" -#: vpn/choices.py:33 +#: netbox/vpn/choices.py:37 msgid "IP-in-IP" msgstr "IP-in-IP" -#: vpn/choices.py:34 +#: netbox/vpn/choices.py:38 msgid "GRE" msgstr "GRE" -#: vpn/choices.py:56 +#: netbox/vpn/choices.py:39 +msgid "WireGuard" +msgstr "WireGuard" + +#: netbox/vpn/choices.py:40 +msgid "OpenVPN" +msgstr "OpenVPN" + +#: netbox/vpn/choices.py:41 +msgid "L2TP" +msgstr "L2TP" + +#: netbox/vpn/choices.py:42 +msgid "PPTP" +msgstr "PPTP" + +#: netbox/vpn/choices.py:64 msgid "Hub" msgstr "Hub" -#: vpn/choices.py:57 +#: netbox/vpn/choices.py:65 msgid "Spoke" msgstr "Spoke" -#: vpn/choices.py:80 +#: netbox/vpn/choices.py:88 msgid "Aggressive" msgstr "Agressivo" -#: vpn/choices.py:81 +#: netbox/vpn/choices.py:89 msgid "Main" msgstr "Principal" -#: vpn/choices.py:92 +#: netbox/vpn/choices.py:100 msgid "Pre-shared keys" msgstr "Chaves pré-compartilhadas" -#: vpn/choices.py:93 +#: netbox/vpn/choices.py:101 msgid "Certificates" msgstr "Certificados" -#: vpn/choices.py:94 +#: netbox/vpn/choices.py:102 msgid "RSA signatures" msgstr "Assinaturas RSA" -#: vpn/choices.py:95 +#: netbox/vpn/choices.py:103 msgid "DSA signatures" msgstr "Assinaturas DSA" -#: vpn/choices.py:178 vpn/choices.py:179 vpn/choices.py:180 vpn/choices.py:181 -#: vpn/choices.py:182 vpn/choices.py:183 vpn/choices.py:184 vpn/choices.py:185 -#: vpn/choices.py:186 vpn/choices.py:187 vpn/choices.py:188 vpn/choices.py:189 -#: vpn/choices.py:190 vpn/choices.py:191 vpn/choices.py:192 vpn/choices.py:193 -#: vpn/choices.py:194 vpn/choices.py:195 vpn/choices.py:196 vpn/choices.py:197 -#: vpn/choices.py:198 vpn/choices.py:199 vpn/choices.py:200 vpn/choices.py:201 +#: netbox/vpn/choices.py:186 netbox/vpn/choices.py:187 +#: netbox/vpn/choices.py:188 netbox/vpn/choices.py:189 +#: netbox/vpn/choices.py:190 netbox/vpn/choices.py:191 +#: netbox/vpn/choices.py:192 netbox/vpn/choices.py:193 +#: netbox/vpn/choices.py:194 netbox/vpn/choices.py:195 +#: netbox/vpn/choices.py:196 netbox/vpn/choices.py:197 +#: netbox/vpn/choices.py:198 netbox/vpn/choices.py:199 +#: netbox/vpn/choices.py:200 netbox/vpn/choices.py:201 +#: netbox/vpn/choices.py:202 netbox/vpn/choices.py:203 +#: netbox/vpn/choices.py:204 netbox/vpn/choices.py:205 +#: netbox/vpn/choices.py:206 netbox/vpn/choices.py:207 +#: netbox/vpn/choices.py:208 netbox/vpn/choices.py:209 #, python-brace-format msgid "Group {n}" msgstr "Grupo {n}" -#: vpn/choices.py:243 +#: netbox/vpn/choices.py:251 msgid "Ethernet Private LAN" msgstr "Ethernet Private LAN" -#: vpn/choices.py:244 +#: netbox/vpn/choices.py:252 msgid "Ethernet Virtual Private LAN" msgstr "Ethernet Virtual Private LAN" -#: vpn/choices.py:247 +#: netbox/vpn/choices.py:255 msgid "Ethernet Private Tree" msgstr "Ethernet Private Tree" -#: vpn/choices.py:248 +#: netbox/vpn/choices.py:256 msgid "Ethernet Virtual Private Tree" msgstr "Árvore privada virtual Ethernet" -#: vpn/filtersets.py:41 +#: netbox/vpn/filtersets.py:41 msgid "Tunnel group (ID)" msgstr "Grupo de túneis (ID)" -#: vpn/filtersets.py:47 +#: netbox/vpn/filtersets.py:47 msgid "Tunnel group (slug)" msgstr "Grupo de túneis (slug)" -#: vpn/filtersets.py:54 +#: netbox/vpn/filtersets.py:54 msgid "IPSec profile (ID)" msgstr "Perfil de IPsec (ID)" -#: vpn/filtersets.py:60 +#: netbox/vpn/filtersets.py:60 msgid "IPSec profile (name)" msgstr "Perfil de IPsec (nome)" -#: vpn/filtersets.py:81 +#: netbox/vpn/filtersets.py:81 msgid "Tunnel (ID)" msgstr "Túnel (ID)" -#: vpn/filtersets.py:87 +#: netbox/vpn/filtersets.py:87 msgid "Tunnel (name)" msgstr "Túnel (nome)" -#: vpn/filtersets.py:118 +#: netbox/vpn/filtersets.py:118 msgid "Outside IP (ID)" msgstr "IP Externo (ID)" -#: vpn/filtersets.py:130 vpn/filtersets.py:263 +#: netbox/vpn/filtersets.py:130 netbox/vpn/filtersets.py:263 msgid "IKE policy (ID)" msgstr "Política da IKE (ID)" -#: vpn/filtersets.py:136 vpn/filtersets.py:269 +#: netbox/vpn/filtersets.py:136 netbox/vpn/filtersets.py:269 msgid "IKE policy (name)" msgstr "Política da IKE (nome)" -#: vpn/filtersets.py:200 vpn/filtersets.py:273 +#: netbox/vpn/filtersets.py:200 netbox/vpn/filtersets.py:273 msgid "IPSec policy (ID)" msgstr "Política de IPsec (ID)" -#: vpn/filtersets.py:206 vpn/filtersets.py:279 +#: netbox/vpn/filtersets.py:206 netbox/vpn/filtersets.py:279 msgid "IPSec policy (name)" msgstr "Política de IPsec (nome)" -#: vpn/filtersets.py:348 +#: netbox/vpn/filtersets.py:348 msgid "L2VPN (slug)" msgstr "L2VPN (slug)" -#: vpn/filtersets.py:412 +#: netbox/vpn/filtersets.py:412 msgid "VM Interface (ID)" msgstr "Interface da VM (ID)" -#: vpn/filtersets.py:418 +#: netbox/vpn/filtersets.py:418 msgid "VLAN (name)" msgstr "VLAN (nome)" -#: vpn/forms/bulk_edit.py:45 vpn/forms/bulk_import.py:42 -#: vpn/forms/filtersets.py:54 +#: netbox/vpn/forms/bulk_edit.py:45 netbox/vpn/forms/bulk_import.py:42 +#: netbox/vpn/forms/filtersets.py:54 msgid "Tunnel group" msgstr "Grupo de túneis" -#: vpn/forms/bulk_edit.py:117 vpn/models/crypto.py:47 +#: netbox/vpn/forms/bulk_edit.py:117 netbox/vpn/models/crypto.py:47 msgid "SA lifetime" msgstr "Vida útil da Security Association" -#: vpn/forms/bulk_edit.py:151 wireless/forms/bulk_edit.py:79 -#: wireless/forms/bulk_edit.py:126 wireless/forms/filtersets.py:64 -#: wireless/forms/filtersets.py:98 +#: netbox/vpn/forms/bulk_edit.py:151 netbox/wireless/forms/bulk_edit.py:79 +#: netbox/wireless/forms/bulk_edit.py:126 +#: netbox/wireless/forms/filtersets.py:64 +#: netbox/wireless/forms/filtersets.py:98 msgid "Pre-shared key" msgstr "Chave pré-compartilhada" -#: vpn/forms/bulk_edit.py:237 vpn/forms/bulk_import.py:239 -#: vpn/forms/filtersets.py:199 vpn/forms/model_forms.py:370 -#: vpn/models/crypto.py:104 +#: netbox/vpn/forms/bulk_edit.py:237 netbox/vpn/forms/bulk_import.py:239 +#: netbox/vpn/forms/filtersets.py:199 netbox/vpn/forms/model_forms.py:370 +#: netbox/vpn/models/crypto.py:104 msgid "IKE policy" msgstr "Política da IKE" -#: vpn/forms/bulk_edit.py:242 vpn/forms/bulk_import.py:244 -#: vpn/forms/filtersets.py:204 vpn/forms/model_forms.py:374 -#: vpn/models/crypto.py:209 +#: netbox/vpn/forms/bulk_edit.py:242 netbox/vpn/forms/bulk_import.py:244 +#: netbox/vpn/forms/filtersets.py:204 netbox/vpn/forms/model_forms.py:374 +#: netbox/vpn/models/crypto.py:209 msgid "IPSec policy" msgstr "Política de IPsec" -#: vpn/forms/bulk_import.py:50 +#: netbox/vpn/forms/bulk_import.py:50 msgid "Tunnel encapsulation" msgstr "Encapsulamento do túnel" -#: vpn/forms/bulk_import.py:83 +#: netbox/vpn/forms/bulk_import.py:83 msgid "Operational role" msgstr "Função operacional" -#: vpn/forms/bulk_import.py:90 +#: netbox/vpn/forms/bulk_import.py:90 msgid "Parent device of assigned interface" msgstr "Dispositivo pai da interface associada" -#: vpn/forms/bulk_import.py:97 +#: netbox/vpn/forms/bulk_import.py:97 msgid "Parent VM of assigned interface" msgstr "VM principal da interface pai" -#: vpn/forms/bulk_import.py:104 +#: netbox/vpn/forms/bulk_import.py:104 msgid "Device or virtual machine interface" msgstr "Interface de dispositivo ou máquina virtual" -#: vpn/forms/bulk_import.py:183 +#: netbox/vpn/forms/bulk_import.py:183 msgid "IKE proposal(s)" msgstr "Proposta(s) de IKE" -#: vpn/forms/bulk_import.py:215 vpn/models/crypto.py:197 +#: netbox/vpn/forms/bulk_import.py:215 netbox/vpn/models/crypto.py:197 msgid "Diffie-Hellman group for Perfect Forward Secrecy" msgstr "Grupo Diffie-Hellman para Perfect Forward Secrecy" -#: vpn/forms/bulk_import.py:222 +#: netbox/vpn/forms/bulk_import.py:222 msgid "IPSec proposal(s)" msgstr "Proposta(s) de IPsec" -#: vpn/forms/bulk_import.py:236 +#: netbox/vpn/forms/bulk_import.py:236 msgid "IPSec protocol" msgstr "Protocolo IPsec" -#: vpn/forms/bulk_import.py:266 +#: netbox/vpn/forms/bulk_import.py:266 msgid "L2VPN type" msgstr "Tipo de L2VPN" -#: vpn/forms/bulk_import.py:287 +#: netbox/vpn/forms/bulk_import.py:287 msgid "Parent device (for interface)" msgstr "Dispositivo pai (para interface)" -#: vpn/forms/bulk_import.py:294 +#: netbox/vpn/forms/bulk_import.py:294 msgid "Parent virtual machine (for interface)" msgstr "Máquina virtual pai (para interface)" -#: vpn/forms/bulk_import.py:301 +#: netbox/vpn/forms/bulk_import.py:301 msgid "Assigned interface (device or VM)" msgstr "Interface atribuída (dispositivo ou VM)" -#: vpn/forms/bulk_import.py:334 +#: netbox/vpn/forms/bulk_import.py:334 msgid "Cannot import device and VM interface terminations simultaneously." msgstr "" "Não é possível importar terminações de dispositivo e de interface de VM " "simultaneamente." -#: vpn/forms/bulk_import.py:336 +#: netbox/vpn/forms/bulk_import.py:336 msgid "Each termination must specify either an interface or a VLAN." msgstr "Cada terminação deve especificar uma interface ou uma VLAN." -#: vpn/forms/bulk_import.py:338 +#: netbox/vpn/forms/bulk_import.py:338 msgid "Cannot assign both an interface and a VLAN." msgstr "Não é possível associar tanto uma interface e uma VLAN." -#: vpn/forms/filtersets.py:130 +#: netbox/vpn/forms/filtersets.py:130 msgid "IKE version" msgstr "Versão da IKE" -#: vpn/forms/filtersets.py:142 vpn/forms/filtersets.py:175 -#: vpn/forms/model_forms.py:298 vpn/forms/model_forms.py:334 +#: netbox/vpn/forms/filtersets.py:142 netbox/vpn/forms/filtersets.py:175 +#: netbox/vpn/forms/model_forms.py:298 netbox/vpn/forms/model_forms.py:334 msgid "Proposal" msgstr "Proposta" -#: vpn/forms/filtersets.py:251 +#: netbox/vpn/forms/filtersets.py:251 msgid "Assigned Object Type" msgstr "Tipo de Objeto Atribuído" -#: vpn/forms/model_forms.py:95 vpn/forms/model_forms.py:130 -#: vpn/forms/model_forms.py:240 vpn/tables/tunnels.py:91 +#: netbox/vpn/forms/model_forms.py:95 netbox/vpn/forms/model_forms.py:130 +#: netbox/vpn/forms/model_forms.py:240 netbox/vpn/tables/tunnels.py:91 msgid "Tunnel interface" msgstr "Interface do túnel" -#: vpn/forms/model_forms.py:150 +#: netbox/vpn/forms/model_forms.py:150 msgid "First Termination" msgstr "Primeira Terminação" -#: vpn/forms/model_forms.py:153 +#: netbox/vpn/forms/model_forms.py:153 msgid "Second Termination" msgstr "Segunda Terminação" -#: vpn/forms/model_forms.py:197 +#: netbox/vpn/forms/model_forms.py:197 msgid "This parameter is required when defining a termination." msgstr "Este parâmetro é necessário ao definir uma terminação." -#: vpn/forms/model_forms.py:320 vpn/forms/model_forms.py:356 +#: netbox/vpn/forms/model_forms.py:320 netbox/vpn/forms/model_forms.py:356 msgid "Policy" msgstr "Política" -#: vpn/forms/model_forms.py:487 +#: netbox/vpn/forms/model_forms.py:487 msgid "A termination must specify an interface or VLAN." msgstr "Uma terminação deve especificar uma interface ou VLAN." -#: vpn/forms/model_forms.py:489 +#: netbox/vpn/forms/model_forms.py:489 msgid "" "A termination can only have one terminating object (an interface or VLAN)." msgstr "" "Uma terminação só pode ter um objeto de terminação (uma interface ou VLAN)." -#: vpn/models/crypto.py:33 +#: netbox/vpn/models/crypto.py:33 msgid "encryption algorithm" msgstr "algoritmo de criptografia" -#: vpn/models/crypto.py:37 +#: netbox/vpn/models/crypto.py:37 msgid "authentication algorithm" msgstr "algoritmo de autenticação" -#: vpn/models/crypto.py:44 +#: netbox/vpn/models/crypto.py:44 msgid "Diffie-Hellman group ID" msgstr "ID do grupo Diffie-Hellman" -#: vpn/models/crypto.py:50 +#: netbox/vpn/models/crypto.py:50 msgid "Security association lifetime (in seconds)" msgstr "Vida útil da Security Association (em segundos)" -#: vpn/models/crypto.py:59 +#: netbox/vpn/models/crypto.py:59 msgid "IKE proposal" msgstr "Proposta de IKE" -#: vpn/models/crypto.py:60 +#: netbox/vpn/models/crypto.py:60 msgid "IKE proposals" msgstr "Propostas de IKE" -#: vpn/models/crypto.py:76 +#: netbox/vpn/models/crypto.py:76 msgid "version" msgstr "versão" -#: vpn/models/crypto.py:88 vpn/models/crypto.py:190 +#: netbox/vpn/models/crypto.py:88 netbox/vpn/models/crypto.py:190 msgid "proposals" msgstr "propostas" -#: vpn/models/crypto.py:91 wireless/models.py:39 +#: netbox/vpn/models/crypto.py:91 netbox/wireless/models.py:39 msgid "pre-shared key" msgstr "chave pré-compartilhada" -#: vpn/models/crypto.py:105 +#: netbox/vpn/models/crypto.py:105 msgid "IKE policies" msgstr "Políticas de IKE" -#: vpn/models/crypto.py:118 +#: netbox/vpn/models/crypto.py:118 msgid "Mode is required for selected IKE version" msgstr "Modo é necessário para a versão da IKE selecionada" -#: vpn/models/crypto.py:122 +#: netbox/vpn/models/crypto.py:122 msgid "Mode cannot be used for selected IKE version" msgstr "Modo não pode ser usado para a versão da IKE selecionada" -#: vpn/models/crypto.py:136 +#: netbox/vpn/models/crypto.py:136 msgid "encryption" msgstr "criptografia" -#: vpn/models/crypto.py:141 +#: netbox/vpn/models/crypto.py:141 msgid "authentication" msgstr "autenticação" -#: vpn/models/crypto.py:149 +#: netbox/vpn/models/crypto.py:149 msgid "Security association lifetime (seconds)" msgstr "Vida útil da Security Association (segundos)" -#: vpn/models/crypto.py:155 +#: netbox/vpn/models/crypto.py:155 msgid "Security association lifetime (in kilobytes)" msgstr "Vida útil da Security Association (em kilobytes)" -#: vpn/models/crypto.py:164 +#: netbox/vpn/models/crypto.py:164 msgid "IPSec proposal" msgstr "Proposta de IPsec" -#: vpn/models/crypto.py:165 +#: netbox/vpn/models/crypto.py:165 msgid "IPSec proposals" msgstr "Propostas de IPsec" -#: vpn/models/crypto.py:178 +#: netbox/vpn/models/crypto.py:178 msgid "Encryption and/or authentication algorithm must be defined" msgstr "O algoritmo de criptografia e/ou autenticação deve ser definido" -#: vpn/models/crypto.py:210 +#: netbox/vpn/models/crypto.py:210 msgid "IPSec policies" msgstr "Políticas de IPsec" -#: vpn/models/crypto.py:251 +#: netbox/vpn/models/crypto.py:251 msgid "IPSec profiles" msgstr "Perfis de IPsec" -#: vpn/models/l2vpn.py:116 +#: netbox/vpn/models/l2vpn.py:116 msgid "L2VPN termination" msgstr "Terminação L2VPN" -#: vpn/models/l2vpn.py:117 +#: netbox/vpn/models/l2vpn.py:117 msgid "L2VPN terminations" msgstr "Terminações L2VPN" -#: vpn/models/l2vpn.py:135 +#: netbox/vpn/models/l2vpn.py:135 #, python-brace-format msgid "L2VPN Termination already assigned ({assigned_object})" msgstr "Terminação L2VPN ({assigned_object}) já atribuída" -#: vpn/models/l2vpn.py:147 +#: netbox/vpn/models/l2vpn.py:147 #, python-brace-format msgid "" "{l2vpn_type} L2VPNs cannot have more than two terminations; found " @@ -15211,187 +16074,195 @@ msgstr "" "L2VPNs {l2vpn_type} não podem ter mais de duas terminações; encontrada(s) " "{terminations_count} já definida(s)." -#: vpn/models/tunnels.py:26 +#: netbox/vpn/models/tunnels.py:26 msgid "tunnel group" msgstr "grupo de túneis" -#: vpn/models/tunnels.py:27 +#: netbox/vpn/models/tunnels.py:27 msgid "tunnel groups" msgstr "grupos de túneis" -#: vpn/models/tunnels.py:53 +#: netbox/vpn/models/tunnels.py:53 msgid "encapsulation" msgstr "encapsulamento" -#: vpn/models/tunnels.py:72 +#: netbox/vpn/models/tunnels.py:72 msgid "tunnel ID" msgstr "ID do túnel" -#: vpn/models/tunnels.py:94 +#: netbox/vpn/models/tunnels.py:94 msgid "tunnel" msgstr "túnel" -#: vpn/models/tunnels.py:95 +#: netbox/vpn/models/tunnels.py:95 msgid "tunnels" msgstr "túneis" -#: vpn/models/tunnels.py:153 +#: netbox/vpn/models/tunnels.py:153 msgid "An object may be terminated to only one tunnel at a time." msgstr "Um objeto pode ser terminado em apenas um túnel por vez." -#: vpn/models/tunnels.py:156 +#: netbox/vpn/models/tunnels.py:156 msgid "tunnel termination" msgstr "terminação do túnel" -#: vpn/models/tunnels.py:157 +#: netbox/vpn/models/tunnels.py:157 msgid "tunnel terminations" msgstr "terminações dos túneis" -#: vpn/models/tunnels.py:174 +#: netbox/vpn/models/tunnels.py:174 #, python-brace-format msgid "{name} is already attached to a tunnel ({tunnel})." msgstr "{name} já está conectado ao túnel ({tunnel})." -#: vpn/tables/crypto.py:22 +#: netbox/vpn/tables/crypto.py:22 msgid "Authentication Method" msgstr "Método de Autenticação" -#: vpn/tables/crypto.py:25 vpn/tables/crypto.py:97 +#: netbox/vpn/tables/crypto.py:25 netbox/vpn/tables/crypto.py:97 msgid "Encryption Algorithm" msgstr "Algoritmo de Criptografia" -#: vpn/tables/crypto.py:28 vpn/tables/crypto.py:100 +#: netbox/vpn/tables/crypto.py:28 netbox/vpn/tables/crypto.py:100 msgid "Authentication Algorithm" msgstr "Algoritmo de Autenticação" -#: vpn/tables/crypto.py:34 +#: netbox/vpn/tables/crypto.py:34 msgid "SA Lifetime" msgstr "Vida útil da Security Association" -#: vpn/tables/crypto.py:71 +#: netbox/vpn/tables/crypto.py:71 msgid "Pre-shared Key" msgstr "Chave pré-compartilhada" -#: vpn/tables/crypto.py:103 +#: netbox/vpn/tables/crypto.py:103 msgid "SA Lifetime (Seconds)" msgstr "Vida útil da Security Association (segundos)" -#: vpn/tables/crypto.py:106 +#: netbox/vpn/tables/crypto.py:106 msgid "SA Lifetime (KB)" msgstr "Vida útil da Security Association (KB)" -#: vpn/tables/l2vpn.py:69 +#: netbox/vpn/tables/l2vpn.py:69 msgid "Object Parent" msgstr "Objeto Pai" -#: vpn/tables/l2vpn.py:74 +#: netbox/vpn/tables/l2vpn.py:74 msgid "Object Site" msgstr "Site do Objeto" -#: wireless/choices.py:11 +#: netbox/wireless/choices.py:11 msgid "Access point" msgstr "Ponto de acesso" -#: wireless/choices.py:12 +#: netbox/wireless/choices.py:12 msgid "Station" msgstr "Estação" -#: wireless/choices.py:467 +#: netbox/wireless/choices.py:467 msgid "Open" msgstr "Aberto" -#: wireless/choices.py:469 +#: netbox/wireless/choices.py:469 msgid "WPA Personal (PSK)" msgstr "WPA Personal (PSK)" -#: wireless/choices.py:470 +#: netbox/wireless/choices.py:470 msgid "WPA Enterprise" msgstr "WPA Enterprise" -#: wireless/forms/bulk_edit.py:73 wireless/forms/bulk_edit.py:120 -#: wireless/forms/bulk_import.py:68 wireless/forms/bulk_import.py:71 -#: wireless/forms/bulk_import.py:110 wireless/forms/bulk_import.py:113 -#: wireless/forms/filtersets.py:59 wireless/forms/filtersets.py:93 +#: netbox/wireless/forms/bulk_edit.py:73 +#: netbox/wireless/forms/bulk_edit.py:120 +#: netbox/wireless/forms/bulk_import.py:68 +#: netbox/wireless/forms/bulk_import.py:71 +#: netbox/wireless/forms/bulk_import.py:110 +#: netbox/wireless/forms/bulk_import.py:113 +#: netbox/wireless/forms/filtersets.py:59 +#: netbox/wireless/forms/filtersets.py:93 msgid "Authentication cipher" msgstr "Cifra de autenticação" -#: wireless/forms/bulk_edit.py:134 wireless/forms/bulk_import.py:116 -#: wireless/forms/bulk_import.py:119 wireless/forms/filtersets.py:106 +#: 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 "Unidade de distância" -#: wireless/forms/bulk_import.py:52 +#: netbox/wireless/forms/bulk_import.py:52 msgid "Bridged VLAN" msgstr "VLAN Bridged" -#: wireless/forms/bulk_import.py:89 wireless/tables/wirelesslink.py:28 +#: netbox/wireless/forms/bulk_import.py:89 +#: netbox/wireless/tables/wirelesslink.py:28 msgid "Interface A" msgstr "Interface A" -#: wireless/forms/bulk_import.py:93 wireless/tables/wirelesslink.py:37 +#: netbox/wireless/forms/bulk_import.py:93 +#: netbox/wireless/tables/wirelesslink.py:37 msgid "Interface B" msgstr "Interface B" -#: wireless/forms/model_forms.py:161 +#: netbox/wireless/forms/model_forms.py:161 msgid "Side B" msgstr "Lado B" -#: wireless/models.py:31 +#: netbox/wireless/models.py:31 msgid "authentication cipher" msgstr "cifra de autenticação" -#: wireless/models.py:69 +#: netbox/wireless/models.py:69 msgid "wireless LAN group" msgstr "grupo de redes wireless" -#: wireless/models.py:70 +#: netbox/wireless/models.py:70 msgid "wireless LAN groups" msgstr "grupos de redes wireless" -#: wireless/models.py:116 +#: netbox/wireless/models.py:116 msgid "wireless LAN" msgstr "rede wireless" -#: wireless/models.py:144 +#: netbox/wireless/models.py:144 msgid "interface A" msgstr "interface A" -#: wireless/models.py:151 +#: netbox/wireless/models.py:151 msgid "interface B" msgstr "interface B" -#: wireless/models.py:165 +#: netbox/wireless/models.py:165 msgid "distance" msgstr "distância" -#: wireless/models.py:172 +#: netbox/wireless/models.py:172 msgid "distance unit" msgstr "unidade de distância" -#: wireless/models.py:219 +#: netbox/wireless/models.py:219 msgid "wireless link" msgstr "link wireless" -#: wireless/models.py:220 +#: netbox/wireless/models.py:220 msgid "wireless links" msgstr "links wireless" -#: wireless/models.py:236 +#: 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." -#: wireless/models.py:242 wireless/models.py:248 +#: netbox/wireless/models.py:242 netbox/wireless/models.py:248 #, python-brace-format msgid "{type} is not a wireless interface." msgstr "{type} não é uma interface wireless." -#: wireless/utils.py:16 +#: netbox/wireless/utils.py:16 #, python-brace-format msgid "Invalid channel value: {channel}" msgstr "Valor de canal inválido: {channel}" -#: wireless/utils.py:26 +#: netbox/wireless/utils.py:26 #, python-brace-format msgid "Invalid channel attribute: {name}" msgstr "Atributo de canal inválido: {name}" diff --git a/netbox/translations/ru/LC_MESSAGES/django.mo b/netbox/translations/ru/LC_MESSAGES/django.mo index b1e1f8921..d64540464 100644 Binary files a/netbox/translations/ru/LC_MESSAGES/django.mo and b/netbox/translations/ru/LC_MESSAGES/django.mo differ diff --git a/netbox/translations/ru/LC_MESSAGES/django.po b/netbox/translations/ru/LC_MESSAGES/django.po index 3c4d40f08..7980f7202 100644 --- a/netbox/translations/ru/LC_MESSAGES/django.po +++ b/netbox/translations/ru/LC_MESSAGES/django.po @@ -11,17 +11,18 @@ # stavr666, 2024 # Alexander Ryazanov (alryaz) , 2024 # Vladyslav V. Prodan, 2024 -# Artem Kotik, 2024 # Jeremy Stretch, 2024 +# Artem Kotik, 2025 +# Michail Tatarinov, 2025 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-10-28 19:20+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: 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" @@ -29,1872 +30,2139 @@ msgstr "" "Language: ru\n" "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" -#: account/tables.py:27 templates/account/token.html:22 -#: templates/users/token.html:17 users/forms/bulk_import.py:39 -#: users/forms/model_forms.py:112 +#: netbox/account/tables.py:27 netbox/templates/account/token.html:22 +#: netbox/templates/users/token.html:17 netbox/users/forms/bulk_import.py:39 +#: netbox/users/forms/model_forms.py:112 msgid "Key" msgstr "Ключ" -#: account/tables.py:31 users/forms/filtersets.py:132 +#: netbox/account/tables.py:31 netbox/users/forms/filtersets.py:132 msgid "Write Enabled" msgstr "Запись включена" -#: account/tables.py:35 core/choices.py:86 core/tables/jobs.py:29 -#: core/tables/tasks.py:79 extras/tables/tables.py:335 -#: extras/tables/tables.py:566 templates/account/token.html:43 -#: templates/core/configrevision.html:26 -#: templates/core/configrevision_restore.html:12 templates/core/job.html:69 -#: templates/core/rq_task.html:16 templates/core/rq_task.html:73 -#: templates/core/rq_worker.html:14 -#: templates/extras/htmx/script_result.html:12 -#: templates/extras/journalentry.html:22 templates/generic/object.html:58 -#: templates/users/token.html:35 +#: netbox/account/tables.py:35 netbox/core/choices.py:86 +#: 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 +#: netbox/templates/core/configrevision.html:26 +#: netbox/templates/core/configrevision_restore.html:12 +#: netbox/templates/core/job.html:69 netbox/templates/core/rq_task.html:16 +#: netbox/templates/core/rq_task.html:73 +#: netbox/templates/core/rq_worker.html:14 +#: netbox/templates/extras/htmx/script_result.html:12 +#: netbox/templates/extras/journalentry.html:22 +#: netbox/templates/generic/object.html:58 +#: netbox/templates/users/token.html:35 msgid "Created" msgstr "Создан" -#: account/tables.py:39 templates/account/token.html:47 -#: templates/users/token.html:39 users/forms/bulk_edit.py:117 -#: users/forms/filtersets.py:136 +#: netbox/account/tables.py:39 netbox/templates/account/token.html:47 +#: netbox/templates/users/token.html:39 netbox/users/forms/bulk_edit.py:117 +#: netbox/users/forms/filtersets.py:136 msgid "Expires" msgstr "Истекает" -#: account/tables.py:42 users/forms/filtersets.py:141 +#: netbox/account/tables.py:42 netbox/users/forms/filtersets.py:141 msgid "Last Used" msgstr "Последнее использование" -#: account/tables.py:45 templates/account/token.html:55 -#: templates/users/token.html:47 users/forms/bulk_edit.py:122 -#: users/forms/model_forms.py:124 +#: netbox/account/tables.py:45 netbox/templates/account/token.html:55 +#: netbox/templates/users/token.html:47 netbox/users/forms/bulk_edit.py:122 +#: netbox/users/forms/model_forms.py:124 msgid "Allowed IPs" msgstr "Разрешенные IP-адреса" -#: account/views.py:114 +#: netbox/account/views.py:114 #, python-brace-format msgid "Logged in as {user}." msgstr "Вошел(-ла) в систему как {user}." -#: account/views.py:164 +#: netbox/account/views.py:164 msgid "You have logged out." msgstr "Вы вышли из системы." -#: account/views.py:216 +#: netbox/account/views.py:216 msgid "Your preferences have been updated." msgstr "Ваши настройки были обновлены." -#: account/views.py:239 +#: netbox/account/views.py:239 msgid "LDAP-authenticated user credentials cannot be changed within NetBox." msgstr "Учетные данные доменных пользователей нельзя изменить в NetBox." -#: account/views.py:254 +#: netbox/account/views.py:254 msgid "Your password has been changed successfully." msgstr "Ваш пароль успешно изменен." -#: circuits/choices.py:21 dcim/choices.py:20 dcim/choices.py:102 -#: dcim/choices.py:185 dcim/choices.py:237 dcim/choices.py:1530 -#: dcim/choices.py:1606 dcim/choices.py:1656 virtualization/choices.py:20 -#: virtualization/choices.py:45 vpn/choices.py:18 +#: netbox/circuits/choices.py:21 netbox/dcim/choices.py:20 +#: netbox/dcim/choices.py:102 netbox/dcim/choices.py: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 msgid "Planned" msgstr "Запланировано" -#: circuits/choices.py:22 netbox/navigation/menu.py:305 +#: netbox/circuits/choices.py:22 netbox/netbox/navigation/menu.py:305 msgid "Provisioning" msgstr "Эксплутация" -#: circuits/choices.py:23 core/tables/tasks.py:22 dcim/choices.py:22 -#: dcim/choices.py:103 dcim/choices.py:184 dcim/choices.py:236 -#: dcim/choices.py:1605 dcim/choices.py:1655 extras/tables/tables.py:495 -#: ipam/choices.py:31 ipam/choices.py:49 ipam/choices.py:69 -#: ipam/choices.py:154 templates/extras/configcontext.html:25 -#: templates/users/user.html:37 users/forms/bulk_edit.py:38 -#: virtualization/choices.py:22 virtualization/choices.py:44 vpn/choices.py:19 -#: wireless/choices.py:25 +#: netbox/circuits/choices.py:23 netbox/core/tables/tasks.py:22 +#: netbox/dcim/choices.py:22 netbox/dcim/choices.py:103 +#: netbox/dcim/choices.py: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/templates/users/user.html:37 netbox/users/forms/bulk_edit.py:38 +#: netbox/virtualization/choices.py:22 netbox/virtualization/choices.py:44 +#: netbox/vpn/choices.py:19 netbox/wireless/choices.py:25 msgid "Active" msgstr "Активный" -#: circuits/choices.py:24 dcim/choices.py:183 dcim/choices.py:235 -#: dcim/choices.py:1604 dcim/choices.py:1657 virtualization/choices.py:24 -#: virtualization/choices.py:43 +#: 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 msgid "Offline" msgstr "Оффлайн" -#: circuits/choices.py:25 +#: netbox/circuits/choices.py:25 msgid "Deprovisioning" msgstr "Вывод из эксплуатации" -#: circuits/choices.py:26 +#: netbox/circuits/choices.py:26 msgid "Decommissioned" msgstr "Списан" -#: circuits/choices.py:90 dcim/choices.py:1617 tenancy/choices.py:17 +#: netbox/circuits/choices.py:90 netbox/dcim/choices.py:1619 +#: netbox/tenancy/choices.py:17 msgid "Primary" msgstr "Основной" -#: circuits/choices.py:91 ipam/choices.py:90 tenancy/choices.py:18 +#: netbox/circuits/choices.py:91 netbox/ipam/choices.py:90 +#: netbox/tenancy/choices.py:18 msgid "Secondary" msgstr "Вторичный" -#: circuits/choices.py:92 tenancy/choices.py:19 +#: netbox/circuits/choices.py:92 netbox/tenancy/choices.py:19 msgid "Tertiary" msgstr "Третичный" -#: circuits/choices.py:93 tenancy/choices.py:20 +#: netbox/circuits/choices.py:93 netbox/tenancy/choices.py:20 msgid "Inactive" msgstr "Неактивный" -#: circuits/filtersets.py:31 circuits/filtersets.py:198 dcim/filtersets.py:98 -#: dcim/filtersets.py:152 dcim/filtersets.py:212 dcim/filtersets.py:333 -#: dcim/filtersets.py:464 dcim/filtersets.py:1021 dcim/filtersets.py:1368 -#: dcim/filtersets.py:1903 dcim/filtersets.py:2146 dcim/filtersets.py:2204 -#: ipam/filtersets.py:339 ipam/filtersets.py:959 -#: virtualization/filtersets.py:45 virtualization/filtersets.py:173 -#: vpn/filtersets.py:358 +#: 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 msgid "Region (ID)" msgstr "Регион (ID)" -#: circuits/filtersets.py:38 circuits/filtersets.py:205 dcim/filtersets.py:105 -#: dcim/filtersets.py:158 dcim/filtersets.py:219 dcim/filtersets.py:340 -#: dcim/filtersets.py:471 dcim/filtersets.py:1028 dcim/filtersets.py:1375 -#: dcim/filtersets.py:1910 dcim/filtersets.py:2153 dcim/filtersets.py:2211 -#: extras/filtersets.py:509 ipam/filtersets.py:346 ipam/filtersets.py:966 -#: virtualization/filtersets.py:52 virtualization/filtersets.py:180 -#: vpn/filtersets.py:353 +#: 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 msgid "Region (slug)" msgstr "Регион (подстрока)" -#: circuits/filtersets.py:44 circuits/filtersets.py:211 dcim/filtersets.py:128 -#: dcim/filtersets.py:225 dcim/filtersets.py:346 dcim/filtersets.py:477 -#: dcim/filtersets.py:1034 dcim/filtersets.py:1381 dcim/filtersets.py:1916 -#: dcim/filtersets.py:2159 dcim/filtersets.py:2217 ipam/filtersets.py:352 -#: ipam/filtersets.py:972 virtualization/filtersets.py:58 -#: virtualization/filtersets.py:186 +#: 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 msgid "Site group (ID)" msgstr "Группа сайтов (ID)" -#: circuits/filtersets.py:51 circuits/filtersets.py:218 dcim/filtersets.py:135 -#: dcim/filtersets.py:232 dcim/filtersets.py:353 dcim/filtersets.py:484 -#: dcim/filtersets.py:1041 dcim/filtersets.py:1388 dcim/filtersets.py:1923 -#: dcim/filtersets.py:2166 dcim/filtersets.py:2224 extras/filtersets.py:515 -#: ipam/filtersets.py:359 ipam/filtersets.py:979 -#: virtualization/filtersets.py:65 virtualization/filtersets.py:193 +#: 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 msgid "Site group (slug)" msgstr "Группа сайтов (подстрока)" -#: circuits/filtersets.py:56 circuits/forms/bulk_edit.py:188 -#: circuits/forms/bulk_edit.py:216 circuits/forms/bulk_import.py:124 -#: circuits/forms/filtersets.py:51 circuits/forms/filtersets.py:171 -#: circuits/forms/filtersets.py:209 circuits/forms/model_forms.py:138 -#: circuits/forms/model_forms.py:154 circuits/tables/circuits.py:113 -#: dcim/forms/bulk_edit.py:168 dcim/forms/bulk_edit.py:329 -#: dcim/forms/bulk_edit.py:677 dcim/forms/bulk_edit.py:873 -#: dcim/forms/bulk_import.py:131 dcim/forms/bulk_import.py:230 -#: dcim/forms/bulk_import.py:309 dcim/forms/bulk_import.py:540 -#: dcim/forms/bulk_import.py:1311 dcim/forms/bulk_import.py:1339 -#: dcim/forms/filtersets.py:87 dcim/forms/filtersets.py:225 -#: dcim/forms/filtersets.py:342 dcim/forms/filtersets.py:439 -#: dcim/forms/filtersets.py:753 dcim/forms/filtersets.py:997 -#: dcim/forms/filtersets.py:1021 dcim/forms/filtersets.py:1111 -#: dcim/forms/filtersets.py:1149 dcim/forms/filtersets.py:1584 -#: dcim/forms/filtersets.py:1608 dcim/forms/filtersets.py:1632 -#: dcim/forms/model_forms.py:137 dcim/forms/model_forms.py:165 -#: dcim/forms/model_forms.py:238 dcim/forms/model_forms.py:463 -#: dcim/forms/model_forms.py:723 dcim/forms/object_create.py:391 -#: dcim/tables/devices.py:153 dcim/tables/power.py:26 dcim/tables/power.py:93 -#: dcim/tables/racks.py:122 dcim/tables/racks.py:207 dcim/tables/sites.py:134 -#: extras/filtersets.py:525 ipam/forms/bulk_edit.py:218 -#: ipam/forms/bulk_edit.py:285 ipam/forms/bulk_edit.py:484 -#: ipam/forms/bulk_import.py:171 ipam/forms/bulk_import.py:429 -#: ipam/forms/filtersets.py:153 ipam/forms/filtersets.py:231 -#: ipam/forms/filtersets.py:432 ipam/forms/filtersets.py:489 -#: ipam/forms/model_forms.py:205 ipam/forms/model_forms.py:636 -#: ipam/tables/ip.py:245 ipam/tables/vlans.py:118 ipam/tables/vlans.py:221 -#: templates/circuits/inc/circuit_termination_fields.html:6 -#: templates/dcim/device.html:22 templates/dcim/inc/cable_termination.html:8 -#: templates/dcim/inc/cable_termination.html:33 -#: templates/dcim/location.html:37 templates/dcim/powerpanel.html:22 -#: templates/dcim/rack.html:20 templates/dcim/rackreservation.html:28 -#: templates/dcim/site.html:28 templates/ipam/prefix.html:56 -#: templates/ipam/vlan.html:23 templates/ipam/vlan_edit.html:40 -#: templates/virtualization/cluster.html:42 -#: templates/virtualization/virtualmachine.html:95 -#: virtualization/forms/bulk_edit.py:91 virtualization/forms/bulk_edit.py:109 -#: virtualization/forms/bulk_edit.py:124 -#: virtualization/forms/bulk_import.py:59 -#: virtualization/forms/bulk_import.py:85 -#: virtualization/forms/filtersets.py:79 -#: virtualization/forms/filtersets.py:148 -#: virtualization/forms/model_forms.py:71 -#: virtualization/forms/model_forms.py:104 -#: virtualization/forms/model_forms.py:171 -#: virtualization/tables/clusters.py:77 -#: virtualization/tables/virtualmachines.py:63 vpn/forms/filtersets.py:266 -#: wireless/forms/model_forms.py:76 wireless/forms/model_forms.py:118 +#: 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/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/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/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 msgid "Site" msgstr "Сайт" -#: circuits/filtersets.py:62 circuits/filtersets.py:229 -#: circuits/filtersets.py:274 dcim/filtersets.py:242 dcim/filtersets.py:363 -#: dcim/filtersets.py:458 extras/filtersets.py:531 ipam/filtersets.py:238 -#: ipam/filtersets.py:369 ipam/filtersets.py:989 -#: virtualization/filtersets.py:75 virtualization/filtersets.py:203 -#: vpn/filtersets.py:363 +#: 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 msgid "Site (slug)" msgstr "Сайт (подстрока)" -#: circuits/filtersets.py:67 +#: netbox/circuits/filtersets.py:67 msgid "ASN (ID)" msgstr "ASN (ID)" -#: circuits/filtersets.py:73 circuits/forms/filtersets.py:31 -#: ipam/forms/model_forms.py:159 ipam/models/asns.py:108 -#: ipam/models/asns.py:125 ipam/tables/asn.py:41 templates/ipam/asn.html:20 +#: 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/templates/ipam/asn.html:20 msgid "ASN" msgstr "ASN" -#: circuits/filtersets.py:95 circuits/filtersets.py:122 -#: circuits/filtersets.py:156 circuits/filtersets.py:283 -#: circuits/filtersets.py:325 ipam/filtersets.py:243 +#: 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 msgid "Provider (ID)" msgstr "Провайдер (ID)" -#: circuits/filtersets.py:101 circuits/filtersets.py:128 -#: circuits/filtersets.py:162 circuits/filtersets.py:289 -#: circuits/filtersets.py:331 ipam/filtersets.py:249 +#: 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 msgid "Provider (slug)" msgstr "Провайдер (подстрока)" -#: circuits/filtersets.py:167 +#: netbox/circuits/filtersets.py:167 msgid "Provider account (ID)" msgstr "Аккаунт провайдера (ID)" -#: circuits/filtersets.py:173 +#: netbox/circuits/filtersets.py:173 msgid "Provider account (account)" msgstr "Учетная запись провайдера" -#: circuits/filtersets.py:178 +#: netbox/circuits/filtersets.py:178 msgid "Provider network (ID)" msgstr "Сеть провайдера (ID)" -#: circuits/filtersets.py:182 +#: netbox/circuits/filtersets.py:182 msgid "Circuit type (ID)" msgstr "Тип канала связи (ID)" -#: circuits/filtersets.py:188 +#: netbox/circuits/filtersets.py:188 msgid "Circuit type (slug)" msgstr "Тип канала связи (подстрока)" -#: circuits/filtersets.py:223 circuits/filtersets.py:268 -#: dcim/filtersets.py:236 dcim/filtersets.py:357 dcim/filtersets.py:452 -#: dcim/filtersets.py:1045 dcim/filtersets.py:1393 dcim/filtersets.py:1928 -#: dcim/filtersets.py:2170 dcim/filtersets.py:2229 ipam/filtersets.py:232 -#: ipam/filtersets.py:363 ipam/filtersets.py:983 -#: virtualization/filtersets.py:69 virtualization/filtersets.py:197 -#: vpn/filtersets.py:368 +#: 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 msgid "Site (ID)" msgstr "Сайт (ID)" -#: circuits/filtersets.py:233 circuits/filtersets.py:237 +#: netbox/circuits/filtersets.py:233 netbox/circuits/filtersets.py:237 msgid "Termination A (ID)" msgstr "Точка подключения A (ID)" -#: circuits/filtersets.py:260 circuits/filtersets.py:320 core/filtersets.py:77 -#: core/filtersets.py:136 core/filtersets.py:173 dcim/filtersets.py:751 -#: dcim/filtersets.py:1362 dcim/filtersets.py:2277 extras/filtersets.py:41 -#: extras/filtersets.py:63 extras/filtersets.py:92 extras/filtersets.py:132 -#: extras/filtersets.py:181 extras/filtersets.py:209 extras/filtersets.py:239 -#: extras/filtersets.py:276 extras/filtersets.py:348 extras/filtersets.py:391 -#: extras/filtersets.py:438 extras/filtersets.py:498 extras/filtersets.py:657 -#: extras/filtersets.py:703 ipam/forms/model_forms.py:449 -#: netbox/filtersets.py:282 netbox/forms/__init__.py:22 -#: netbox/forms/base.py:167 templates/htmx/object_selector.html:28 -#: templates/inc/filter_list.html:46 templates/ipam/ipaddress_assign.html:29 -#: templates/search.html:7 templates/search.html:26 tenancy/filtersets.py:99 -#: users/filtersets.py:23 users/filtersets.py:57 users/filtersets.py:102 -#: users/filtersets.py:150 utilities/forms/forms.py:104 -#: utilities/templates/navigation/menu.html:16 +#: 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/templates/htmx/object_selector.html:28 +#: netbox/templates/inc/filter_list.html:46 +#: netbox/templates/ipam/ipaddress_assign.html:29 +#: netbox/templates/search.html:7 netbox/templates/search.html:26 +#: netbox/tenancy/filtersets.py:99 netbox/users/filtersets.py:23 +#: netbox/users/filtersets.py:57 netbox/users/filtersets.py:102 +#: netbox/users/filtersets.py:150 netbox/utilities/forms/forms.py:104 +#: netbox/utilities/templates/navigation/menu.html:16 msgid "Search" msgstr "Поиск" -#: circuits/filtersets.py:264 circuits/forms/bulk_edit.py:172 -#: circuits/forms/bulk_edit.py:246 circuits/forms/bulk_import.py:115 -#: circuits/forms/filtersets.py:198 circuits/forms/filtersets.py:214 -#: circuits/forms/filtersets.py:260 circuits/forms/model_forms.py:111 -#: circuits/forms/model_forms.py:133 circuits/forms/model_forms.py:199 -#: circuits/tables/circuits.py:104 circuits/tables/circuits.py:164 -#: dcim/forms/connections.py:73 templates/circuits/circuit.html:15 -#: templates/circuits/circuitgroupassignment.html:26 -#: templates/circuits/circuittermination.html:19 -#: templates/dcim/inc/cable_termination.html:55 -#: templates/dcim/trace/circuit.html:4 +#: 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/templates/circuits/circuit.html:15 +#: netbox/templates/circuits/circuitgroupassignment.html:26 +#: netbox/templates/circuits/circuittermination.html:19 +#: netbox/templates/dcim/inc/cable_termination.html:55 +#: netbox/templates/dcim/trace/circuit.html:4 msgid "Circuit" msgstr "Канал связи" -#: circuits/filtersets.py:278 +#: netbox/circuits/filtersets.py:278 msgid "ProviderNetwork (ID)" msgstr "Сеть провайдера (ID)" -#: circuits/filtersets.py:335 +#: netbox/circuits/filtersets.py:335 msgid "Circuit (ID)" msgstr "Канал связи (ID)" -#: circuits/filtersets.py:341 +#: netbox/circuits/filtersets.py:341 msgid "Circuit (CID)" msgstr "Канал связи (CID)" -#: circuits/filtersets.py:345 +#: netbox/circuits/filtersets.py:345 msgid "Circuit group (ID)" msgstr "Группа каналов связи (ID)" -#: circuits/filtersets.py:351 +#: netbox/circuits/filtersets.py:351 msgid "Circuit group (slug)" msgstr "Группа каналов связи (подстрока)" -#: circuits/forms/bulk_edit.py:30 circuits/forms/filtersets.py:56 -#: circuits/forms/model_forms.py:29 circuits/tables/providers.py:33 -#: dcim/forms/bulk_edit.py:128 dcim/forms/filtersets.py:195 -#: dcim/forms/model_forms.py:123 dcim/tables/sites.py:94 -#: ipam/models/asns.py:126 ipam/tables/asn.py:27 ipam/views.py:213 -#: netbox/navigation/menu.py:172 netbox/navigation/menu.py:175 -#: templates/circuits/provider.html:23 +#: 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/templates/circuits/provider.html:23 msgid "ASNs" msgstr "ASN" -#: circuits/forms/bulk_edit.py:34 circuits/forms/bulk_edit.py:56 -#: circuits/forms/bulk_edit.py:83 circuits/forms/bulk_edit.py:104 -#: circuits/forms/bulk_edit.py:164 circuits/forms/bulk_edit.py:183 -#: circuits/forms/bulk_edit.py:228 core/forms/bulk_edit.py:28 -#: dcim/forms/bulk_create.py:35 dcim/forms/bulk_edit.py:73 -#: dcim/forms/bulk_edit.py:92 dcim/forms/bulk_edit.py:151 -#: dcim/forms/bulk_edit.py:192 dcim/forms/bulk_edit.py:210 -#: dcim/forms/bulk_edit.py:288 dcim/forms/bulk_edit.py:432 -#: dcim/forms/bulk_edit.py:466 dcim/forms/bulk_edit.py:481 -#: dcim/forms/bulk_edit.py:540 dcim/forms/bulk_edit.py:584 -#: dcim/forms/bulk_edit.py:618 dcim/forms/bulk_edit.py:642 -#: dcim/forms/bulk_edit.py:715 dcim/forms/bulk_edit.py:767 -#: dcim/forms/bulk_edit.py:819 dcim/forms/bulk_edit.py:842 -#: dcim/forms/bulk_edit.py:890 dcim/forms/bulk_edit.py:960 -#: dcim/forms/bulk_edit.py:1013 dcim/forms/bulk_edit.py:1048 -#: dcim/forms/bulk_edit.py:1088 dcim/forms/bulk_edit.py:1132 -#: dcim/forms/bulk_edit.py:1177 dcim/forms/bulk_edit.py:1204 -#: dcim/forms/bulk_edit.py:1222 dcim/forms/bulk_edit.py:1240 -#: dcim/forms/bulk_edit.py:1258 dcim/forms/bulk_edit.py:1682 -#: extras/forms/bulk_edit.py:39 extras/forms/bulk_edit.py:149 -#: extras/forms/bulk_edit.py:178 extras/forms/bulk_edit.py:208 -#: extras/forms/bulk_edit.py:256 extras/forms/bulk_edit.py:274 -#: extras/forms/bulk_edit.py:298 extras/forms/bulk_edit.py:312 -#: extras/forms/bulk_edit.py:339 extras/tables/tables.py:79 -#: ipam/forms/bulk_edit.py:53 ipam/forms/bulk_edit.py:73 -#: ipam/forms/bulk_edit.py:93 ipam/forms/bulk_edit.py:117 -#: ipam/forms/bulk_edit.py:146 ipam/forms/bulk_edit.py:175 -#: ipam/forms/bulk_edit.py:194 ipam/forms/bulk_edit.py:276 -#: ipam/forms/bulk_edit.py:321 ipam/forms/bulk_edit.py:369 -#: ipam/forms/bulk_edit.py:412 ipam/forms/bulk_edit.py:428 -#: ipam/forms/bulk_edit.py:516 ipam/forms/bulk_edit.py:547 -#: templates/account/token.html:35 templates/circuits/circuit.html:59 -#: templates/circuits/circuitgroup.html:32 -#: templates/circuits/circuittype.html:26 -#: templates/circuits/inc/circuit_termination_fields.html:88 -#: templates/circuits/provider.html:33 -#: templates/circuits/providernetwork.html:32 -#: templates/core/datasource.html:54 templates/core/plugin.html:80 -#: templates/dcim/cable.html:36 templates/dcim/consoleport.html:44 -#: templates/dcim/consoleserverport.html:44 templates/dcim/device.html:94 -#: templates/dcim/devicebay.html:32 templates/dcim/devicerole.html:30 -#: templates/dcim/devicetype.html:33 templates/dcim/frontport.html:58 -#: templates/dcim/interface.html:69 templates/dcim/inventoryitem.html:60 -#: templates/dcim/inventoryitemrole.html:22 templates/dcim/location.html:33 -#: templates/dcim/manufacturer.html:40 templates/dcim/module.html:73 -#: templates/dcim/modulebay.html:42 templates/dcim/moduletype.html:37 -#: templates/dcim/platform.html:33 templates/dcim/powerfeed.html:40 -#: templates/dcim/poweroutlet.html:40 templates/dcim/powerpanel.html:30 -#: templates/dcim/powerport.html:40 templates/dcim/rack.html:53 -#: templates/dcim/rackreservation.html:62 templates/dcim/rackrole.html:26 -#: templates/dcim/racktype.html:24 templates/dcim/rearport.html:54 -#: templates/dcim/region.html:33 templates/dcim/site.html:60 -#: templates/dcim/sitegroup.html:33 templates/dcim/virtualchassis.html:31 -#: templates/extras/configcontext.html:21 -#: templates/extras/configtemplate.html:17 -#: templates/extras/customfield.html:34 -#: templates/extras/dashboard/widget_add.html:14 -#: templates/extras/eventrule.html:21 templates/extras/exporttemplate.html:19 -#: templates/extras/notificationgroup.html:20 -#: templates/extras/savedfilter.html:17 templates/extras/script_list.html:45 -#: templates/extras/tag.html:20 templates/extras/webhook.html:17 -#: templates/generic/bulk_import.html:120 templates/ipam/aggregate.html:43 -#: templates/ipam/asn.html:42 templates/ipam/asnrange.html:38 -#: templates/ipam/fhrpgroup.html:34 templates/ipam/ipaddress.html:55 -#: templates/ipam/iprange.html:67 templates/ipam/prefix.html:81 -#: templates/ipam/rir.html:26 templates/ipam/role.html:26 -#: templates/ipam/routetarget.html:21 templates/ipam/service.html:50 -#: templates/ipam/servicetemplate.html:27 templates/ipam/vlan.html:62 -#: templates/ipam/vlangroup.html:34 templates/ipam/vrf.html:33 -#: templates/tenancy/contact.html:67 templates/tenancy/contactgroup.html:25 -#: templates/tenancy/contactrole.html:22 templates/tenancy/tenant.html:24 -#: templates/tenancy/tenantgroup.html:33 templates/users/group.html:21 -#: templates/users/objectpermission.html:21 templates/users/token.html:27 -#: templates/virtualization/cluster.html:25 -#: templates/virtualization/clustergroup.html:26 -#: templates/virtualization/clustertype.html:26 -#: templates/virtualization/virtualdisk.html:39 -#: templates/virtualization/virtualmachine.html:31 -#: templates/virtualization/vminterface.html:51 -#: templates/vpn/ikepolicy.html:17 templates/vpn/ikeproposal.html:17 -#: templates/vpn/ipsecpolicy.html:17 templates/vpn/ipsecprofile.html:17 -#: templates/vpn/ipsecprofile.html:40 templates/vpn/ipsecprofile.html:73 -#: templates/vpn/ipsecproposal.html:17 templates/vpn/l2vpn.html:26 -#: templates/vpn/tunnel.html:33 templates/vpn/tunnelgroup.html:30 -#: templates/wireless/wirelesslan.html:26 -#: templates/wireless/wirelesslangroup.html:33 -#: templates/wireless/wirelesslink.html:34 tenancy/forms/bulk_edit.py:32 -#: tenancy/forms/bulk_edit.py:80 tenancy/forms/bulk_edit.py:122 -#: users/forms/bulk_edit.py:64 users/forms/bulk_edit.py:82 -#: users/forms/bulk_edit.py:112 virtualization/forms/bulk_edit.py:32 -#: virtualization/forms/bulk_edit.py:46 virtualization/forms/bulk_edit.py:100 -#: virtualization/forms/bulk_edit.py:177 virtualization/forms/bulk_edit.py:228 -#: virtualization/forms/bulk_edit.py:337 vpn/forms/bulk_edit.py:28 -#: vpn/forms/bulk_edit.py:64 vpn/forms/bulk_edit.py:121 -#: vpn/forms/bulk_edit.py:155 vpn/forms/bulk_edit.py:190 -#: vpn/forms/bulk_edit.py:215 vpn/forms/bulk_edit.py:247 -#: vpn/forms/bulk_edit.py:274 wireless/forms/bulk_edit.py:29 -#: wireless/forms/bulk_edit.py:82 wireless/forms/bulk_edit.py:140 +#: 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/templates/account/token.html:35 +#: netbox/templates/circuits/circuit.html:59 +#: netbox/templates/circuits/circuitgroup.html:32 +#: netbox/templates/circuits/circuittype.html:26 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:88 +#: netbox/templates/circuits/provider.html:33 +#: netbox/templates/circuits/providernetwork.html:32 +#: netbox/templates/core/datasource.html:54 +#: netbox/templates/core/plugin.html:80 netbox/templates/dcim/cable.html:36 +#: netbox/templates/dcim/consoleport.html:44 +#: netbox/templates/dcim/consoleserverport.html:44 +#: netbox/templates/dcim/device.html:94 +#: netbox/templates/dcim/devicebay.html:32 +#: netbox/templates/dcim/devicerole.html:30 +#: netbox/templates/dcim/devicetype.html:33 +#: netbox/templates/dcim/frontport.html:58 +#: netbox/templates/dcim/interface.html:69 +#: netbox/templates/dcim/inventoryitem.html:60 +#: netbox/templates/dcim/inventoryitemrole.html:22 +#: netbox/templates/dcim/location.html:33 +#: netbox/templates/dcim/manufacturer.html:40 +#: netbox/templates/dcim/module.html:73 +#: netbox/templates/dcim/modulebay.html:42 +#: netbox/templates/dcim/moduletype.html:37 +#: netbox/templates/dcim/platform.html:33 +#: netbox/templates/dcim/powerfeed.html:40 +#: netbox/templates/dcim/poweroutlet.html:40 +#: netbox/templates/dcim/powerpanel.html:30 +#: netbox/templates/dcim/powerport.html:40 netbox/templates/dcim/rack.html:53 +#: netbox/templates/dcim/rackreservation.html:62 +#: netbox/templates/dcim/rackrole.html:26 +#: netbox/templates/dcim/racktype.html:24 +#: netbox/templates/dcim/rearport.html:54 netbox/templates/dcim/region.html:33 +#: netbox/templates/dcim/site.html:60 netbox/templates/dcim/sitegroup.html:33 +#: netbox/templates/dcim/virtualchassis.html:31 +#: netbox/templates/extras/configcontext.html:21 +#: netbox/templates/extras/configtemplate.html:17 +#: netbox/templates/extras/customfield.html:34 +#: netbox/templates/extras/dashboard/widget_add.html:14 +#: netbox/templates/extras/eventrule.html:21 +#: netbox/templates/extras/exporttemplate.html:19 +#: netbox/templates/extras/notificationgroup.html:20 +#: netbox/templates/extras/savedfilter.html:17 +#: netbox/templates/extras/script_list.html:46 +#: netbox/templates/extras/tag.html:20 netbox/templates/extras/webhook.html:17 +#: netbox/templates/generic/bulk_import.html:120 +#: netbox/templates/ipam/aggregate.html:43 netbox/templates/ipam/asn.html:42 +#: netbox/templates/ipam/asnrange.html:38 +#: netbox/templates/ipam/fhrpgroup.html:34 +#: netbox/templates/ipam/ipaddress.html:55 +#: netbox/templates/ipam/iprange.html:67 netbox/templates/ipam/prefix.html:81 +#: netbox/templates/ipam/rir.html:26 netbox/templates/ipam/role.html:26 +#: netbox/templates/ipam/routetarget.html:21 +#: netbox/templates/ipam/service.html:50 +#: netbox/templates/ipam/servicetemplate.html:27 +#: netbox/templates/ipam/vlan.html:62 netbox/templates/ipam/vlangroup.html:34 +#: netbox/templates/ipam/vrf.html:33 netbox/templates/tenancy/contact.html:67 +#: netbox/templates/tenancy/contactgroup.html:25 +#: netbox/templates/tenancy/contactrole.html:22 +#: netbox/templates/tenancy/tenant.html:24 +#: netbox/templates/tenancy/tenantgroup.html:33 +#: netbox/templates/users/group.html:21 +#: netbox/templates/users/objectpermission.html:21 +#: netbox/templates/users/token.html:27 +#: netbox/templates/virtualization/cluster.html:25 +#: netbox/templates/virtualization/clustergroup.html:26 +#: netbox/templates/virtualization/clustertype.html:26 +#: netbox/templates/virtualization/virtualdisk.html:39 +#: netbox/templates/virtualization/virtualmachine.html:31 +#: netbox/templates/virtualization/vminterface.html:51 +#: netbox/templates/vpn/ikepolicy.html:17 +#: netbox/templates/vpn/ikeproposal.html:17 +#: netbox/templates/vpn/ipsecpolicy.html:17 +#: netbox/templates/vpn/ipsecprofile.html:17 +#: netbox/templates/vpn/ipsecprofile.html:40 +#: netbox/templates/vpn/ipsecprofile.html:73 +#: netbox/templates/vpn/ipsecproposal.html:17 +#: netbox/templates/vpn/l2vpn.html:26 netbox/templates/vpn/tunnel.html:33 +#: netbox/templates/vpn/tunnelgroup.html:30 +#: netbox/templates/wireless/wirelesslan.html:26 +#: netbox/templates/wireless/wirelesslangroup.html:33 +#: netbox/templates/wireless/wirelesslink.html:34 +#: netbox/tenancy/forms/bulk_edit.py:32 netbox/tenancy/forms/bulk_edit.py:80 +#: netbox/tenancy/forms/bulk_edit.py:122 netbox/users/forms/bulk_edit.py:64 +#: netbox/users/forms/bulk_edit.py:82 netbox/users/forms/bulk_edit.py:112 +#: netbox/virtualization/forms/bulk_edit.py:32 +#: netbox/virtualization/forms/bulk_edit.py:46 +#: netbox/virtualization/forms/bulk_edit.py:100 +#: netbox/virtualization/forms/bulk_edit.py:177 +#: netbox/virtualization/forms/bulk_edit.py:228 +#: netbox/virtualization/forms/bulk_edit.py:337 +#: netbox/vpn/forms/bulk_edit.py:28 netbox/vpn/forms/bulk_edit.py:64 +#: netbox/vpn/forms/bulk_edit.py:121 netbox/vpn/forms/bulk_edit.py:155 +#: netbox/vpn/forms/bulk_edit.py:190 netbox/vpn/forms/bulk_edit.py:215 +#: netbox/vpn/forms/bulk_edit.py:247 netbox/vpn/forms/bulk_edit.py:274 +#: netbox/wireless/forms/bulk_edit.py:29 netbox/wireless/forms/bulk_edit.py:82 +#: netbox/wireless/forms/bulk_edit.py:140 msgid "Description" msgstr "Описание" -#: circuits/forms/bulk_edit.py:51 circuits/forms/bulk_edit.py:73 -#: circuits/forms/bulk_edit.py:123 circuits/forms/bulk_import.py:36 -#: circuits/forms/bulk_import.py:51 circuits/forms/bulk_import.py:74 -#: circuits/forms/filtersets.py:70 circuits/forms/filtersets.py:88 -#: circuits/forms/filtersets.py:116 circuits/forms/filtersets.py:131 -#: circuits/forms/filtersets.py:199 circuits/forms/filtersets.py:232 -#: circuits/forms/filtersets.py:255 circuits/forms/model_forms.py:47 -#: circuits/forms/model_forms.py:61 circuits/forms/model_forms.py:93 -#: circuits/tables/circuits.py:58 circuits/tables/circuits.py:108 -#: circuits/tables/circuits.py:160 circuits/tables/providers.py:72 -#: circuits/tables/providers.py:103 templates/circuits/circuit.html:18 -#: templates/circuits/circuittermination.html:25 -#: templates/circuits/provider.html:20 -#: templates/circuits/provideraccount.html:20 -#: templates/circuits/providernetwork.html:20 -#: templates/dcim/inc/cable_termination.html:51 +#: netbox/circuits/forms/bulk_edit.py: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/templates/circuits/circuit.html:18 +#: netbox/templates/circuits/circuittermination.html:25 +#: netbox/templates/circuits/provider.html:20 +#: netbox/templates/circuits/provideraccount.html:20 +#: netbox/templates/circuits/providernetwork.html:20 +#: netbox/templates/dcim/inc/cable_termination.html:51 msgid "Provider" msgstr "Провайдер" -#: circuits/forms/bulk_edit.py:80 circuits/forms/filtersets.py:91 -#: templates/circuits/providernetwork.html:28 +#: netbox/circuits/forms/bulk_edit.py:80 +#: netbox/circuits/forms/filtersets.py:91 +#: netbox/templates/circuits/providernetwork.html:28 msgid "Service ID" msgstr "Идентификатор Службы" -#: circuits/forms/bulk_edit.py:100 circuits/forms/filtersets.py:107 -#: dcim/forms/bulk_edit.py:206 dcim/forms/bulk_edit.py:604 -#: dcim/forms/bulk_edit.py:804 dcim/forms/bulk_edit.py:1173 -#: dcim/forms/bulk_edit.py:1200 dcim/forms/bulk_edit.py:1678 -#: dcim/forms/filtersets.py:1064 dcim/forms/filtersets.py:1455 -#: dcim/forms/filtersets.py:1479 dcim/tables/devices.py:704 -#: dcim/tables/devices.py:761 dcim/tables/devices.py:1003 -#: dcim/tables/devicetypes.py:249 dcim/tables/devicetypes.py:264 -#: dcim/tables/racks.py:33 extras/forms/bulk_edit.py:270 -#: extras/tables/tables.py:443 templates/circuits/circuittype.html:30 -#: templates/dcim/cable.html:40 templates/dcim/devicerole.html:34 -#: templates/dcim/frontport.html:40 templates/dcim/inventoryitemrole.html:26 -#: templates/dcim/rackrole.html:30 templates/dcim/rearport.html:40 -#: templates/extras/tag.html:26 +#: netbox/circuits/forms/bulk_edit.py: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/templates/circuits/circuittype.html:30 +#: netbox/templates/dcim/cable.html:40 +#: netbox/templates/dcim/devicerole.html:34 +#: netbox/templates/dcim/frontport.html:40 +#: netbox/templates/dcim/inventoryitemrole.html:26 +#: netbox/templates/dcim/rackrole.html:30 +#: netbox/templates/dcim/rearport.html:40 netbox/templates/extras/tag.html:26 msgid "Color" msgstr "Цвет" -#: circuits/forms/bulk_edit.py:118 circuits/forms/bulk_import.py:87 -#: circuits/forms/filtersets.py:126 core/forms/bulk_edit.py:18 -#: core/forms/filtersets.py:33 core/tables/change_logging.py:32 -#: core/tables/data.py:20 core/tables/jobs.py:18 dcim/forms/bulk_edit.py:782 -#: dcim/forms/bulk_edit.py:921 dcim/forms/bulk_edit.py:989 -#: dcim/forms/bulk_edit.py:1008 dcim/forms/bulk_edit.py:1031 -#: dcim/forms/bulk_edit.py:1073 dcim/forms/bulk_edit.py:1117 -#: dcim/forms/bulk_edit.py:1168 dcim/forms/bulk_edit.py:1195 -#: dcim/forms/bulk_import.py:188 dcim/forms/bulk_import.py:260 -#: dcim/forms/bulk_import.py:708 dcim/forms/bulk_import.py:734 -#: dcim/forms/bulk_import.py:760 dcim/forms/bulk_import.py:780 -#: dcim/forms/bulk_import.py:863 dcim/forms/bulk_import.py:957 -#: dcim/forms/bulk_import.py:999 dcim/forms/bulk_import.py:1213 -#: dcim/forms/bulk_import.py:1376 dcim/forms/filtersets.py:955 -#: dcim/forms/filtersets.py:1054 dcim/forms/filtersets.py:1175 -#: dcim/forms/filtersets.py:1247 dcim/forms/filtersets.py:1272 -#: dcim/forms/filtersets.py:1296 dcim/forms/filtersets.py:1316 -#: dcim/forms/filtersets.py:1353 dcim/forms/filtersets.py:1450 -#: dcim/forms/filtersets.py:1474 dcim/forms/model_forms.py:703 -#: dcim/forms/model_forms.py:709 dcim/forms/object_import.py:84 -#: dcim/forms/object_import.py:113 dcim/forms/object_import.py:145 -#: dcim/tables/devices.py:178 dcim/tables/devices.py:814 -#: dcim/tables/power.py:77 dcim/tables/racks.py:138 -#: extras/forms/bulk_import.py:42 extras/tables/tables.py:405 -#: extras/tables/tables.py:465 netbox/tables/tables.py:240 -#: templates/circuits/circuit.html:30 templates/core/datasource.html:38 -#: templates/dcim/cable.html:15 templates/dcim/consoleport.html:36 -#: templates/dcim/consoleserverport.html:36 templates/dcim/frontport.html:36 -#: templates/dcim/interface.html:46 templates/dcim/interface.html:169 -#: templates/dcim/interface.html:311 templates/dcim/powerfeed.html:32 -#: templates/dcim/poweroutlet.html:36 templates/dcim/powerport.html:36 -#: templates/dcim/rearport.html:36 templates/extras/eventrule.html:74 -#: templates/virtualization/cluster.html:17 templates/vpn/l2vpn.html:22 -#: templates/wireless/inc/authentication_attrs.html:8 -#: templates/wireless/inc/wirelesslink_interface.html:14 -#: virtualization/forms/bulk_edit.py:60 virtualization/forms/bulk_import.py:41 -#: virtualization/forms/filtersets.py:54 -#: virtualization/forms/model_forms.py:62 virtualization/tables/clusters.py:66 -#: vpn/forms/bulk_edit.py:264 vpn/forms/bulk_import.py:264 -#: vpn/forms/filtersets.py:217 vpn/forms/model_forms.py:84 -#: vpn/forms/model_forms.py:119 vpn/forms/model_forms.py:231 +#: netbox/circuits/forms/bulk_edit.py: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/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/core/datasource.html:38 +#: netbox/templates/dcim/cable.html:15 +#: netbox/templates/dcim/consoleport.html:36 +#: netbox/templates/dcim/consoleserverport.html:36 +#: netbox/templates/dcim/frontport.html:36 +#: netbox/templates/dcim/interface.html:46 +#: netbox/templates/dcim/interface.html:169 +#: netbox/templates/dcim/interface.html:311 +#: netbox/templates/dcim/powerfeed.html:32 +#: netbox/templates/dcim/poweroutlet.html:36 +#: netbox/templates/dcim/powerport.html:36 +#: netbox/templates/dcim/rearport.html:36 +#: netbox/templates/extras/eventrule.html:74 +#: netbox/templates/virtualization/cluster.html:17 +#: netbox/templates/vpn/l2vpn.html:22 +#: netbox/templates/wireless/inc/authentication_attrs.html:8 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:14 +#: netbox/virtualization/forms/bulk_edit.py:60 +#: netbox/virtualization/forms/bulk_import.py:41 +#: netbox/virtualization/forms/filtersets.py:54 +#: netbox/virtualization/forms/model_forms.py:62 +#: netbox/virtualization/tables/clusters.py:66 +#: netbox/vpn/forms/bulk_edit.py:264 netbox/vpn/forms/bulk_import.py:264 +#: netbox/vpn/forms/filtersets.py:217 netbox/vpn/forms/model_forms.py:84 +#: netbox/vpn/forms/model_forms.py:119 netbox/vpn/forms/model_forms.py:231 msgid "Type" msgstr "Тип" -#: circuits/forms/bulk_edit.py:128 circuits/forms/bulk_import.py:80 -#: circuits/forms/filtersets.py:139 circuits/forms/model_forms.py:98 +#: 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 msgid "Provider account" msgstr "Аккаунт провайдера" -#: circuits/forms/bulk_edit.py:136 circuits/forms/bulk_import.py:93 -#: circuits/forms/filtersets.py:150 core/forms/filtersets.py:38 -#: core/forms/filtersets.py:79 core/tables/data.py:23 core/tables/jobs.py:26 -#: core/tables/tasks.py:88 dcim/forms/bulk_edit.py:106 -#: dcim/forms/bulk_edit.py:181 dcim/forms/bulk_edit.py:351 -#: dcim/forms/bulk_edit.py:700 dcim/forms/bulk_edit.py:756 -#: dcim/forms/bulk_edit.py:788 dcim/forms/bulk_edit.py:915 -#: dcim/forms/bulk_edit.py:1701 dcim/forms/bulk_import.py:88 -#: dcim/forms/bulk_import.py:147 dcim/forms/bulk_import.py:248 -#: dcim/forms/bulk_import.py:505 dcim/forms/bulk_import.py:659 -#: dcim/forms/bulk_import.py:1207 dcim/forms/bulk_import.py:1371 -#: dcim/forms/bulk_import.py:1435 dcim/forms/filtersets.py:178 -#: dcim/forms/filtersets.py:237 dcim/forms/filtersets.py:359 -#: dcim/forms/filtersets.py:799 dcim/forms/filtersets.py:924 -#: dcim/forms/filtersets.py:958 dcim/forms/filtersets.py:1059 -#: dcim/forms/filtersets.py:1170 dcim/tables/devices.py:140 -#: dcim/tables/devices.py:817 dcim/tables/devices.py:1063 -#: dcim/tables/modules.py:69 dcim/tables/power.py:74 dcim/tables/racks.py:126 -#: dcim/tables/sites.py:82 dcim/tables/sites.py:138 -#: ipam/forms/bulk_edit.py:256 ipam/forms/bulk_edit.py:306 -#: ipam/forms/bulk_edit.py:354 ipam/forms/bulk_edit.py:506 -#: ipam/forms/bulk_import.py:192 ipam/forms/bulk_import.py:257 -#: ipam/forms/bulk_import.py:293 ipam/forms/bulk_import.py:450 -#: ipam/forms/filtersets.py:210 ipam/forms/filtersets.py:281 -#: ipam/forms/filtersets.py:355 ipam/forms/filtersets.py:501 -#: ipam/forms/model_forms.py:468 ipam/tables/ip.py:237 ipam/tables/ip.py:312 -#: ipam/tables/ip.py:363 ipam/tables/ip.py:426 ipam/tables/ip.py:453 -#: ipam/tables/vlans.py:126 ipam/tables/vlans.py:232 -#: templates/circuits/circuit.html:34 templates/core/datasource.html:46 -#: templates/core/job.html:48 templates/core/rq_task.html:81 -#: templates/core/system.html:18 templates/dcim/cable.html:19 -#: templates/dcim/device.html:178 templates/dcim/location.html:45 -#: templates/dcim/module.html:69 templates/dcim/powerfeed.html:36 -#: templates/dcim/rack.html:41 templates/dcim/site.html:43 -#: templates/extras/script_list.html:47 templates/ipam/ipaddress.html:37 -#: templates/ipam/iprange.html:54 templates/ipam/prefix.html:73 -#: templates/ipam/vlan.html:48 templates/virtualization/cluster.html:21 -#: templates/virtualization/virtualmachine.html:19 -#: templates/vpn/tunnel.html:25 templates/wireless/wirelesslan.html:22 -#: templates/wireless/wirelesslink.html:17 users/forms/filtersets.py:32 -#: users/forms/model_forms.py:194 virtualization/forms/bulk_edit.py:70 -#: virtualization/forms/bulk_edit.py:118 -#: virtualization/forms/bulk_import.py:54 -#: virtualization/forms/bulk_import.py:80 -#: virtualization/forms/filtersets.py:62 -#: virtualization/forms/filtersets.py:160 virtualization/tables/clusters.py:74 -#: virtualization/tables/virtualmachines.py:60 vpn/forms/bulk_edit.py:39 -#: vpn/forms/bulk_import.py:37 vpn/forms/filtersets.py:47 -#: vpn/tables/tunnels.py:48 wireless/forms/bulk_edit.py:43 -#: wireless/forms/bulk_edit.py:105 wireless/forms/bulk_import.py:43 -#: wireless/forms/bulk_import.py:84 wireless/forms/filtersets.py:49 -#: wireless/forms/filtersets.py:83 wireless/tables/wirelesslan.py:52 -#: wireless/tables/wirelesslink.py:20 +#: 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/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/templates/circuits/circuit.html:34 +#: 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/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/vlan.html:48 +#: netbox/templates/virtualization/cluster.html:21 +#: netbox/templates/virtualization/virtualmachine.html:19 +#: netbox/templates/vpn/tunnel.html:25 +#: netbox/templates/wireless/wirelesslan.html:22 +#: netbox/templates/wireless/wirelesslink.html:17 +#: netbox/users/forms/filtersets.py: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/tables/clusters.py:74 +#: netbox/virtualization/tables/virtualmachines.py:60 +#: netbox/vpn/forms/bulk_edit.py:39 netbox/vpn/forms/bulk_import.py:37 +#: netbox/vpn/forms/filtersets.py:47 netbox/vpn/tables/tunnels.py:48 +#: netbox/wireless/forms/bulk_edit.py:43 +#: netbox/wireless/forms/bulk_edit.py:105 +#: netbox/wireless/forms/bulk_import.py:43 +#: netbox/wireless/forms/bulk_import.py:84 +#: netbox/wireless/forms/filtersets.py:49 +#: netbox/wireless/forms/filtersets.py:83 +#: netbox/wireless/tables/wirelesslan.py:52 +#: netbox/wireless/tables/wirelesslink.py:20 msgid "Status" msgstr "Статус" -#: circuits/forms/bulk_edit.py:142 circuits/forms/bulk_edit.py:233 -#: circuits/forms/bulk_import.py:98 circuits/forms/bulk_import.py:158 -#: circuits/forms/filtersets.py:119 circuits/forms/filtersets.py:241 -#: dcim/forms/bulk_edit.py:122 dcim/forms/bulk_edit.py:187 -#: dcim/forms/bulk_edit.py:346 dcim/forms/bulk_edit.py:461 -#: dcim/forms/bulk_edit.py:690 dcim/forms/bulk_edit.py:794 -#: dcim/forms/bulk_edit.py:1706 dcim/forms/bulk_import.py:107 -#: dcim/forms/bulk_import.py:152 dcim/forms/bulk_import.py:241 -#: dcim/forms/bulk_import.py:334 dcim/forms/bulk_import.py:479 -#: dcim/forms/bulk_import.py:1219 dcim/forms/bulk_import.py:1428 -#: dcim/forms/filtersets.py:173 dcim/forms/filtersets.py:205 -#: dcim/forms/filtersets.py:323 dcim/forms/filtersets.py:399 -#: dcim/forms/filtersets.py:420 dcim/forms/filtersets.py:722 -#: dcim/forms/filtersets.py:916 dcim/forms/filtersets.py:978 -#: dcim/forms/filtersets.py:1008 dcim/forms/filtersets.py:1130 -#: dcim/tables/power.py:88 extras/filtersets.py:612 -#: extras/forms/filtersets.py:323 extras/forms/filtersets.py:396 -#: ipam/forms/bulk_edit.py:43 ipam/forms/bulk_edit.py:68 -#: ipam/forms/bulk_edit.py:112 ipam/forms/bulk_edit.py:141 -#: ipam/forms/bulk_edit.py:166 ipam/forms/bulk_edit.py:251 -#: ipam/forms/bulk_edit.py:301 ipam/forms/bulk_edit.py:349 -#: ipam/forms/bulk_edit.py:501 ipam/forms/bulk_import.py:38 -#: ipam/forms/bulk_import.py:67 ipam/forms/bulk_import.py:95 -#: ipam/forms/bulk_import.py:115 ipam/forms/bulk_import.py:135 -#: ipam/forms/bulk_import.py:164 ipam/forms/bulk_import.py:250 -#: ipam/forms/bulk_import.py:286 ipam/forms/bulk_import.py:443 -#: ipam/forms/filtersets.py:48 ipam/forms/filtersets.py:68 -#: ipam/forms/filtersets.py:100 ipam/forms/filtersets.py:120 -#: ipam/forms/filtersets.py:143 ipam/forms/filtersets.py:174 -#: ipam/forms/filtersets.py:267 ipam/forms/filtersets.py:310 -#: ipam/forms/filtersets.py:469 ipam/tables/ip.py:456 ipam/tables/vlans.py:229 -#: templates/circuits/circuit.html:38 templates/circuits/circuitgroup.html:36 -#: templates/dcim/cable.html:23 templates/dcim/device.html:79 -#: templates/dcim/location.html:49 templates/dcim/powerfeed.html:44 -#: templates/dcim/rack.html:32 templates/dcim/rackreservation.html:49 -#: templates/dcim/site.html:47 templates/dcim/virtualdevicecontext.html:52 -#: templates/ipam/aggregate.html:30 templates/ipam/asn.html:33 -#: templates/ipam/asnrange.html:29 templates/ipam/ipaddress.html:28 -#: templates/ipam/iprange.html:58 templates/ipam/prefix.html:29 -#: templates/ipam/routetarget.html:17 templates/ipam/vlan.html:39 -#: templates/ipam/vrf.html:20 templates/tenancy/tenant.html:17 -#: templates/virtualization/cluster.html:33 -#: templates/virtualization/virtualmachine.html:39 templates/vpn/l2vpn.html:30 -#: templates/vpn/tunnel.html:49 templates/wireless/wirelesslan.html:34 -#: templates/wireless/wirelesslink.html:25 tenancy/forms/forms.py:25 -#: tenancy/forms/forms.py:48 tenancy/forms/model_forms.py:52 -#: tenancy/tables/columns.py:64 virtualization/forms/bulk_edit.py:76 -#: virtualization/forms/bulk_edit.py:155 -#: virtualization/forms/bulk_import.py:66 -#: virtualization/forms/bulk_import.py:115 -#: virtualization/forms/filtersets.py:47 -#: virtualization/forms/filtersets.py:105 vpn/forms/bulk_edit.py:59 -#: vpn/forms/bulk_edit.py:269 vpn/forms/bulk_import.py:59 -#: vpn/forms/bulk_import.py:258 vpn/forms/filtersets.py:214 -#: wireless/forms/bulk_edit.py:63 wireless/forms/bulk_edit.py:110 -#: wireless/forms/bulk_import.py:55 wireless/forms/bulk_import.py:97 -#: wireless/forms/filtersets.py:35 wireless/forms/filtersets.py:75 +#: netbox/circuits/forms/bulk_edit.py: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/templates/circuits/circuitgroup.html:36 +#: 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 +#: netbox/templates/dcim/rackreservation.html:49 +#: netbox/templates/dcim/site.html:47 +#: netbox/templates/dcim/virtualdevicecontext.html:52 +#: netbox/templates/ipam/aggregate.html:30 netbox/templates/ipam/asn.html:33 +#: netbox/templates/ipam/asnrange.html:29 +#: netbox/templates/ipam/ipaddress.html:28 +#: netbox/templates/ipam/iprange.html:58 netbox/templates/ipam/prefix.html:29 +#: netbox/templates/ipam/routetarget.html:17 +#: netbox/templates/ipam/vlan.html:39 netbox/templates/ipam/vrf.html:20 +#: netbox/templates/tenancy/tenant.html:17 +#: netbox/templates/virtualization/cluster.html:33 +#: netbox/templates/virtualization/virtualmachine.html:39 +#: netbox/templates/vpn/l2vpn.html:30 netbox/templates/vpn/tunnel.html:49 +#: netbox/templates/wireless/wirelesslan.html:34 +#: netbox/templates/wireless/wirelesslink.html:25 +#: netbox/tenancy/forms/forms.py:25 netbox/tenancy/forms/forms.py:48 +#: netbox/tenancy/forms/model_forms.py:52 netbox/tenancy/tables/columns.py:64 +#: netbox/virtualization/forms/bulk_edit.py:76 +#: netbox/virtualization/forms/bulk_edit.py:155 +#: netbox/virtualization/forms/bulk_import.py:66 +#: netbox/virtualization/forms/bulk_import.py:115 +#: netbox/virtualization/forms/filtersets.py:47 +#: netbox/virtualization/forms/filtersets.py:105 +#: netbox/vpn/forms/bulk_edit.py:59 netbox/vpn/forms/bulk_edit.py:269 +#: netbox/vpn/forms/bulk_import.py:59 netbox/vpn/forms/bulk_import.py:258 +#: netbox/vpn/forms/filtersets.py:214 netbox/wireless/forms/bulk_edit.py:63 +#: netbox/wireless/forms/bulk_edit.py:110 +#: netbox/wireless/forms/bulk_import.py:55 +#: netbox/wireless/forms/bulk_import.py:97 +#: netbox/wireless/forms/filtersets.py:35 +#: netbox/wireless/forms/filtersets.py:75 msgid "Tenant" msgstr "Арендатор" -#: circuits/forms/bulk_edit.py:147 circuits/forms/filtersets.py:174 +#: netbox/circuits/forms/bulk_edit.py:147 +#: netbox/circuits/forms/filtersets.py:174 msgid "Install date" msgstr "Дата установки" -#: circuits/forms/bulk_edit.py:152 circuits/forms/filtersets.py:179 +#: netbox/circuits/forms/bulk_edit.py:152 +#: netbox/circuits/forms/filtersets.py:179 msgid "Termination date" msgstr "Дата отключения" -#: circuits/forms/bulk_edit.py:158 circuits/forms/filtersets.py:186 +#: netbox/circuits/forms/bulk_edit.py:158 +#: netbox/circuits/forms/filtersets.py:186 msgid "Commit rate (Kbps)" msgstr "Гарантированная скорость (Кбит/с)" -#: circuits/forms/bulk_edit.py:173 circuits/forms/model_forms.py:112 +#: netbox/circuits/forms/bulk_edit.py:173 +#: netbox/circuits/forms/model_forms.py:112 msgid "Service Parameters" msgstr "Параметры Службы" -#: circuits/forms/bulk_edit.py:174 circuits/forms/model_forms.py:113 -#: circuits/forms/model_forms.py:183 dcim/forms/model_forms.py:139 -#: dcim/forms/model_forms.py:181 dcim/forms/model_forms.py:266 -#: dcim/forms/model_forms.py:323 dcim/forms/model_forms.py:768 -#: dcim/forms/model_forms.py:1692 ipam/forms/model_forms.py:64 -#: ipam/forms/model_forms.py:81 ipam/forms/model_forms.py:115 -#: ipam/forms/model_forms.py:136 ipam/forms/model_forms.py:160 -#: ipam/forms/model_forms.py:232 ipam/forms/model_forms.py:261 -#: ipam/forms/model_forms.py:316 netbox/navigation/menu.py:24 -#: templates/dcim/device_edit.html:85 templates/dcim/htmx/cable_edit.html:72 -#: templates/ipam/ipaddress_bulk_add.html:27 templates/ipam/vlan_edit.html:22 -#: virtualization/forms/model_forms.py:80 -#: virtualization/forms/model_forms.py:222 vpn/forms/bulk_edit.py:78 -#: vpn/forms/filtersets.py:44 vpn/forms/model_forms.py:62 -#: vpn/forms/model_forms.py:147 vpn/forms/model_forms.py:411 -#: wireless/forms/model_forms.py:54 wireless/forms/model_forms.py:170 +#: 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/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/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 msgid "Tenancy" msgstr "Аренда" -#: circuits/forms/bulk_edit.py:193 circuits/forms/bulk_edit.py:217 -#: circuits/forms/model_forms.py:155 circuits/tables/circuits.py:117 -#: templates/circuits/inc/circuit_termination_fields.html:62 -#: templates/circuits/providernetwork.html:17 +#: 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 "Сеть провайдера" -#: circuits/forms/bulk_edit.py:199 +#: netbox/circuits/forms/bulk_edit.py:199 msgid "Port speed (Kbps)" msgstr "Скорость порта (Кбит/с)" -#: circuits/forms/bulk_edit.py:203 +#: netbox/circuits/forms/bulk_edit.py:203 msgid "Upstream speed (Kbps)" msgstr "Скорость восходящего потока (Кбит/с)" -#: circuits/forms/bulk_edit.py:206 dcim/forms/bulk_edit.py:951 -#: dcim/forms/bulk_edit.py:1315 dcim/forms/bulk_edit.py:1332 -#: dcim/forms/bulk_edit.py:1349 dcim/forms/bulk_edit.py:1367 -#: dcim/forms/bulk_edit.py:1455 dcim/forms/bulk_edit.py:1594 -#: dcim/forms/bulk_edit.py:1611 +#: 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 msgid "Mark connected" msgstr "Пометить подключенным" -#: circuits/forms/bulk_edit.py:219 circuits/forms/model_forms.py:157 -#: templates/circuits/inc/circuit_termination_fields.html:54 -#: templates/dcim/frontport.html:121 templates/dcim/interface.html:193 -#: templates/dcim/rearport.html:111 +#: netbox/circuits/forms/bulk_edit.py:219 +#: netbox/circuits/forms/model_forms.py:157 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:54 +#: netbox/templates/dcim/frontport.html:121 +#: netbox/templates/dcim/interface.html:193 +#: netbox/templates/dcim/rearport.html:111 msgid "Circuit Termination" msgstr "Точка подключения канала связи" -#: circuits/forms/bulk_edit.py:221 circuits/forms/model_forms.py:159 +#: netbox/circuits/forms/bulk_edit.py:221 +#: netbox/circuits/forms/model_forms.py:159 msgid "Termination Details" msgstr "Сведения об точке подключения" -#: circuits/forms/bulk_edit.py:251 circuits/forms/filtersets.py:268 -#: circuits/tables/circuits.py:168 dcim/forms/model_forms.py:551 -#: templates/circuits/circuitgroupassignment.html:30 -#: templates/dcim/device.html:133 templates/dcim/virtualchassis.html:68 -#: templates/dcim/virtualchassis_edit.html:56 -#: templates/ipam/inc/panels/fhrp_groups.html:26 -#: tenancy/forms/bulk_edit.py:147 tenancy/forms/filtersets.py:110 +#: netbox/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/templates/dcim/device.html:133 +#: netbox/templates/dcim/virtualchassis.html:68 +#: netbox/templates/dcim/virtualchassis_edit.html:56 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:26 +#: netbox/tenancy/forms/bulk_edit.py:147 +#: netbox/tenancy/forms/filtersets.py:110 msgid "Priority" msgstr "Приоритет" -#: circuits/forms/bulk_import.py:39 circuits/forms/bulk_import.py:54 -#: circuits/forms/bulk_import.py:77 +#: 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 "Назначенный провайдер" -#: circuits/forms/bulk_import.py:83 +#: netbox/circuits/forms/bulk_import.py:83 msgid "Assigned provider account" msgstr "Назначенный аккаунт провайдера" -#: circuits/forms/bulk_import.py:90 +#: netbox/circuits/forms/bulk_import.py:90 msgid "Type of circuit" msgstr "Тип канала связи" -#: circuits/forms/bulk_import.py:95 dcim/forms/bulk_import.py:90 -#: dcim/forms/bulk_import.py:149 dcim/forms/bulk_import.py:250 -#: dcim/forms/bulk_import.py:507 dcim/forms/bulk_import.py:661 -#: dcim/forms/bulk_import.py:1373 ipam/forms/bulk_import.py:194 -#: ipam/forms/bulk_import.py:259 ipam/forms/bulk_import.py:295 -#: ipam/forms/bulk_import.py:452 virtualization/forms/bulk_import.py:56 -#: virtualization/forms/bulk_import.py:82 vpn/forms/bulk_import.py:39 -#: wireless/forms/bulk_import.py:45 +#: netbox/circuits/forms/bulk_import.py: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 "Операционный статус" -#: circuits/forms/bulk_import.py:102 circuits/forms/bulk_import.py:162 -#: dcim/forms/bulk_import.py:111 dcim/forms/bulk_import.py:156 -#: dcim/forms/bulk_import.py:338 dcim/forms/bulk_import.py:483 -#: dcim/forms/bulk_import.py:1223 dcim/forms/bulk_import.py:1368 -#: dcim/forms/bulk_import.py:1432 ipam/forms/bulk_import.py:42 -#: ipam/forms/bulk_import.py:71 ipam/forms/bulk_import.py:99 -#: ipam/forms/bulk_import.py:119 ipam/forms/bulk_import.py:139 -#: ipam/forms/bulk_import.py:168 ipam/forms/bulk_import.py:254 -#: ipam/forms/bulk_import.py:290 ipam/forms/bulk_import.py:447 -#: virtualization/forms/bulk_import.py:70 -#: virtualization/forms/bulk_import.py:119 vpn/forms/bulk_import.py:63 -#: wireless/forms/bulk_import.py:59 wireless/forms/bulk_import.py:101 +#: netbox/circuits/forms/bulk_import.py: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 "Назначенный арендатор" -#: circuits/forms/bulk_import.py:120 -#: templates/circuits/inc/circuit_termination.html:6 -#: templates/circuits/inc/circuit_termination_fields.html:15 -#: templates/dcim/cable.html:68 templates/dcim/cable.html:72 -#: vpn/forms/bulk_import.py:100 vpn/forms/filtersets.py:77 +#: netbox/circuits/forms/bulk_import.py: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 "Прекращение" -#: circuits/forms/bulk_import.py:130 circuits/forms/filtersets.py:147 -#: circuits/forms/filtersets.py:227 circuits/forms/model_forms.py:144 +#: 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 msgid "Provider network" msgstr "Сеть провайдера" -#: circuits/forms/filtersets.py:30 circuits/forms/filtersets.py:118 -#: circuits/forms/filtersets.py:200 dcim/forms/bulk_edit.py:338 -#: dcim/forms/bulk_edit.py:441 dcim/forms/bulk_edit.py:682 -#: dcim/forms/bulk_edit.py:729 dcim/forms/bulk_edit.py:882 -#: dcim/forms/bulk_import.py:235 dcim/forms/bulk_import.py:315 -#: dcim/forms/bulk_import.py:546 dcim/forms/bulk_import.py:1317 -#: dcim/forms/bulk_import.py:1351 dcim/forms/filtersets.py:95 -#: dcim/forms/filtersets.py:322 dcim/forms/filtersets.py:356 -#: dcim/forms/filtersets.py:396 dcim/forms/filtersets.py:447 -#: dcim/forms/filtersets.py:719 dcim/forms/filtersets.py:762 -#: dcim/forms/filtersets.py:977 dcim/forms/filtersets.py:1006 -#: dcim/forms/filtersets.py:1026 dcim/forms/filtersets.py:1090 -#: dcim/forms/filtersets.py:1120 dcim/forms/filtersets.py:1129 -#: dcim/forms/filtersets.py:1240 dcim/forms/filtersets.py:1264 -#: dcim/forms/filtersets.py:1289 dcim/forms/filtersets.py:1308 -#: dcim/forms/filtersets.py:1331 dcim/forms/filtersets.py:1442 -#: dcim/forms/filtersets.py:1466 dcim/forms/filtersets.py:1490 -#: dcim/forms/filtersets.py:1508 dcim/forms/filtersets.py:1525 -#: dcim/forms/model_forms.py:180 dcim/forms/model_forms.py:243 -#: dcim/forms/model_forms.py:468 dcim/forms/model_forms.py:728 -#: dcim/tables/devices.py:157 dcim/tables/power.py:30 dcim/tables/racks.py:118 -#: dcim/tables/racks.py:212 extras/filtersets.py:536 -#: extras/forms/filtersets.py:320 ipam/forms/filtersets.py:173 -#: ipam/forms/filtersets.py:414 ipam/forms/filtersets.py:437 -#: ipam/forms/filtersets.py:467 templates/dcim/device.html:26 -#: templates/dcim/device_edit.html:30 -#: templates/dcim/inc/cable_termination.html:12 -#: templates/dcim/location.html:26 templates/dcim/powerpanel.html:26 -#: templates/dcim/rack.html:24 templates/dcim/rackreservation.html:32 -#: virtualization/forms/filtersets.py:46 -#: virtualization/forms/filtersets.py:100 wireless/forms/model_forms.py:87 -#: wireless/forms/model_forms.py:129 +#: netbox/circuits/forms/filtersets.py: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/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 msgid "Location" msgstr "Локация" -#: circuits/forms/filtersets.py:32 circuits/forms/filtersets.py:120 -#: dcim/forms/filtersets.py:144 dcim/forms/filtersets.py:158 -#: dcim/forms/filtersets.py:174 dcim/forms/filtersets.py:206 -#: dcim/forms/filtersets.py:328 dcim/forms/filtersets.py:400 -#: dcim/forms/filtersets.py:471 dcim/forms/filtersets.py:723 -#: dcim/forms/filtersets.py:1091 netbox/navigation/menu.py:31 -#: netbox/navigation/menu.py:33 tenancy/forms/filtersets.py:42 -#: tenancy/tables/columns.py:70 tenancy/tables/contacts.py:25 -#: tenancy/views.py:19 virtualization/forms/filtersets.py:37 -#: virtualization/forms/filtersets.py:48 -#: virtualization/forms/filtersets.py:106 +#: netbox/circuits/forms/filtersets.py: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/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/tables/contacts.py:25 netbox/tenancy/views.py:19 +#: netbox/virtualization/forms/filtersets.py:37 +#: netbox/virtualization/forms/filtersets.py:48 +#: netbox/virtualization/forms/filtersets.py:106 msgid "Contacts" msgstr "Контакты" -#: circuits/forms/filtersets.py:37 circuits/forms/filtersets.py:157 -#: dcim/forms/bulk_edit.py:112 dcim/forms/bulk_edit.py:313 -#: dcim/forms/bulk_edit.py:857 dcim/forms/bulk_import.py:93 -#: dcim/forms/filtersets.py:73 dcim/forms/filtersets.py:185 -#: dcim/forms/filtersets.py:211 dcim/forms/filtersets.py:334 -#: dcim/forms/filtersets.py:425 dcim/forms/filtersets.py:739 -#: dcim/forms/filtersets.py:983 dcim/forms/filtersets.py:1013 -#: dcim/forms/filtersets.py:1097 dcim/forms/filtersets.py:1136 -#: dcim/forms/filtersets.py:1576 dcim/forms/filtersets.py:1600 -#: dcim/forms/filtersets.py:1624 dcim/forms/model_forms.py:112 -#: dcim/forms/object_create.py:375 dcim/tables/devices.py:143 -#: dcim/tables/sites.py:85 extras/filtersets.py:503 -#: ipam/forms/bulk_edit.py:208 ipam/forms/bulk_edit.py:474 -#: ipam/forms/filtersets.py:217 ipam/forms/filtersets.py:422 -#: ipam/forms/filtersets.py:475 templates/dcim/device.html:18 -#: templates/dcim/rack.html:16 templates/dcim/rackreservation.html:22 -#: templates/dcim/region.html:26 templates/dcim/site.html:31 -#: templates/ipam/prefix.html:49 templates/ipam/vlan.html:16 -#: virtualization/forms/bulk_edit.py:81 virtualization/forms/filtersets.py:59 -#: virtualization/forms/filtersets.py:133 -#: virtualization/forms/model_forms.py:92 vpn/forms/filtersets.py:257 +#: netbox/circuits/forms/filtersets.py: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/templates/dcim/rackreservation.html:22 +#: netbox/templates/dcim/region.html:26 netbox/templates/dcim/site.html:31 +#: netbox/templates/ipam/prefix.html:49 netbox/templates/ipam/vlan.html:16 +#: netbox/virtualization/forms/bulk_edit.py:81 +#: netbox/virtualization/forms/filtersets.py:59 +#: netbox/virtualization/forms/filtersets.py:133 +#: netbox/virtualization/forms/model_forms.py:92 +#: netbox/vpn/forms/filtersets.py:257 msgid "Region" msgstr "Регион" -#: circuits/forms/filtersets.py:42 circuits/forms/filtersets.py:162 -#: dcim/forms/bulk_edit.py:321 dcim/forms/bulk_edit.py:865 -#: dcim/forms/filtersets.py:78 dcim/forms/filtersets.py:190 -#: dcim/forms/filtersets.py:216 dcim/forms/filtersets.py:347 -#: dcim/forms/filtersets.py:430 dcim/forms/filtersets.py:744 -#: dcim/forms/filtersets.py:988 dcim/forms/filtersets.py:1102 -#: dcim/forms/filtersets.py:1141 dcim/forms/object_create.py:383 -#: extras/filtersets.py:520 ipam/forms/bulk_edit.py:213 -#: ipam/forms/bulk_edit.py:479 ipam/forms/filtersets.py:222 -#: ipam/forms/filtersets.py:427 ipam/forms/filtersets.py:480 -#: virtualization/forms/bulk_edit.py:86 virtualization/forms/filtersets.py:69 -#: virtualization/forms/filtersets.py:138 -#: virtualization/forms/model_forms.py:98 +#: netbox/circuits/forms/filtersets.py: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/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 msgid "Site group" msgstr "Группа сайтов" -#: circuits/forms/filtersets.py:65 circuits/forms/filtersets.py:83 -#: circuits/forms/filtersets.py:102 circuits/forms/filtersets.py:117 -#: core/forms/filtersets.py:67 core/forms/filtersets.py:135 -#: dcim/forms/bulk_edit.py:828 dcim/forms/filtersets.py:172 -#: dcim/forms/filtersets.py:204 dcim/forms/filtersets.py:915 -#: dcim/forms/filtersets.py:1007 dcim/forms/filtersets.py:1131 -#: dcim/forms/filtersets.py:1239 dcim/forms/filtersets.py:1263 -#: dcim/forms/filtersets.py:1288 dcim/forms/filtersets.py:1307 -#: dcim/forms/filtersets.py:1327 dcim/forms/filtersets.py:1441 -#: dcim/forms/filtersets.py:1465 dcim/forms/filtersets.py:1489 -#: dcim/forms/filtersets.py:1507 dcim/forms/filtersets.py:1523 -#: extras/forms/bulk_edit.py:90 extras/forms/filtersets.py:44 -#: extras/forms/filtersets.py:134 extras/forms/filtersets.py:165 -#: extras/forms/filtersets.py:205 extras/forms/filtersets.py:221 -#: extras/forms/filtersets.py:252 extras/forms/filtersets.py:276 -#: extras/forms/filtersets.py:441 ipam/forms/filtersets.py:99 -#: ipam/forms/filtersets.py:266 ipam/forms/filtersets.py:307 -#: ipam/forms/filtersets.py:382 ipam/forms/filtersets.py:468 -#: ipam/forms/filtersets.py:527 ipam/forms/filtersets.py:545 -#: netbox/tables/tables.py:256 virtualization/forms/filtersets.py:45 -#: virtualization/forms/filtersets.py:103 -#: virtualization/forms/filtersets.py:198 -#: virtualization/forms/filtersets.py:243 vpn/forms/filtersets.py:213 -#: wireless/forms/bulk_edit.py:150 wireless/forms/filtersets.py:34 -#: wireless/forms/filtersets.py:74 +#: 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 "Атрибуты" -#: circuits/forms/filtersets.py:73 circuits/tables/circuits.py:63 -#: circuits/tables/providers.py:66 templates/circuits/circuit.html:22 -#: templates/circuits/provideraccount.html:24 +#: netbox/circuits/forms/filtersets.py:73 +#: netbox/circuits/tables/circuits.py:63 +#: netbox/circuits/tables/providers.py:66 +#: netbox/templates/circuits/circuit.html:22 +#: netbox/templates/circuits/provideraccount.html:24 msgid "Account" msgstr "Аккаунт" -#: circuits/forms/filtersets.py:217 +#: netbox/circuits/forms/filtersets.py:217 msgid "Term Side" msgstr "Терминология" -#: circuits/forms/filtersets.py:250 extras/forms/model_forms.py:582 -#: ipam/forms/filtersets.py:142 ipam/forms/filtersets.py:546 -#: ipam/forms/model_forms.py:323 templates/extras/configcontext.html:60 -#: templates/ipam/ipaddress.html:59 templates/ipam/vlan_edit.html:30 -#: tenancy/forms/filtersets.py:87 users/forms/model_forms.py:314 +#: 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/templates/extras/configcontext.html:60 +#: netbox/templates/ipam/ipaddress.html:59 +#: netbox/templates/ipam/vlan_edit.html:30 +#: netbox/tenancy/forms/filtersets.py:87 netbox/users/forms/model_forms.py:314 msgid "Assignment" msgstr "Задание" -#: circuits/forms/filtersets.py:265 circuits/forms/model_forms.py:195 -#: circuits/tables/circuits.py:155 dcim/forms/bulk_edit.py:117 -#: dcim/forms/bulk_import.py:100 dcim/forms/model_forms.py:117 -#: dcim/tables/sites.py:89 extras/forms/filtersets.py:480 -#: ipam/filtersets.py:999 ipam/forms/bulk_edit.py:493 -#: ipam/forms/bulk_import.py:436 ipam/forms/model_forms.py:528 -#: ipam/tables/fhrp.py:67 ipam/tables/vlans.py:122 ipam/tables/vlans.py:226 -#: templates/circuits/circuitgroupassignment.html:22 -#: templates/dcim/interface.html:284 templates/dcim/site.html:37 -#: templates/ipam/inc/panels/fhrp_groups.html:23 templates/ipam/vlan.html:27 -#: templates/tenancy/contact.html:21 templates/tenancy/tenant.html:20 -#: templates/users/group.html:6 templates/users/group.html:14 -#: templates/virtualization/cluster.html:29 templates/vpn/tunnel.html:29 -#: templates/wireless/wirelesslan.html:18 tenancy/forms/bulk_edit.py:43 -#: tenancy/forms/bulk_edit.py:94 tenancy/forms/bulk_import.py:40 -#: tenancy/forms/bulk_import.py:81 tenancy/forms/filtersets.py:48 -#: tenancy/forms/filtersets.py:78 tenancy/forms/filtersets.py:97 -#: tenancy/forms/model_forms.py:45 tenancy/forms/model_forms.py:97 -#: tenancy/forms/model_forms.py:122 tenancy/tables/contacts.py:60 -#: tenancy/tables/contacts.py:107 tenancy/tables/tenants.py:42 -#: users/filtersets.py:62 users/filtersets.py:185 users/forms/filtersets.py:31 -#: users/forms/filtersets.py:37 users/forms/filtersets.py:79 -#: virtualization/forms/bulk_edit.py:65 virtualization/forms/bulk_import.py:47 -#: virtualization/forms/filtersets.py:85 -#: virtualization/forms/model_forms.py:66 virtualization/tables/clusters.py:70 -#: vpn/forms/bulk_edit.py:112 vpn/forms/bulk_import.py:158 -#: vpn/forms/filtersets.py:116 vpn/tables/crypto.py:31 -#: vpn/tables/tunnels.py:44 wireless/forms/bulk_edit.py:48 -#: wireless/forms/bulk_import.py:36 wireless/forms/filtersets.py:46 -#: wireless/forms/model_forms.py:40 wireless/tables/wirelesslan.py:48 +#: netbox/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/templates/circuits/circuitgroupassignment.html:22 +#: netbox/templates/dcim/interface.html:284 netbox/templates/dcim/site.html:37 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:23 +#: netbox/templates/ipam/vlan.html:27 netbox/templates/tenancy/contact.html:21 +#: netbox/templates/tenancy/tenant.html:20 netbox/templates/users/group.html:6 +#: netbox/templates/users/group.html:14 +#: netbox/templates/virtualization/cluster.html:29 +#: netbox/templates/vpn/tunnel.html:29 +#: netbox/templates/wireless/wirelesslan.html:18 +#: netbox/tenancy/forms/bulk_edit.py:43 netbox/tenancy/forms/bulk_edit.py:94 +#: netbox/tenancy/forms/bulk_import.py:40 +#: netbox/tenancy/forms/bulk_import.py:81 +#: netbox/tenancy/forms/filtersets.py:48 netbox/tenancy/forms/filtersets.py:78 +#: netbox/tenancy/forms/filtersets.py:97 +#: netbox/tenancy/forms/model_forms.py:45 +#: netbox/tenancy/forms/model_forms.py:97 +#: netbox/tenancy/forms/model_forms.py:122 +#: netbox/tenancy/tables/contacts.py:60 netbox/tenancy/tables/contacts.py:107 +#: netbox/tenancy/tables/tenants.py:42 netbox/users/filtersets.py: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/tables/clusters.py:70 +#: netbox/vpn/forms/bulk_edit.py:112 netbox/vpn/forms/bulk_import.py:158 +#: netbox/vpn/forms/filtersets.py:116 netbox/vpn/tables/crypto.py:31 +#: netbox/vpn/tables/tunnels.py:44 netbox/wireless/forms/bulk_edit.py:48 +#: netbox/wireless/forms/bulk_import.py:36 +#: netbox/wireless/forms/filtersets.py:46 +#: netbox/wireless/forms/model_forms.py:40 +#: netbox/wireless/tables/wirelesslan.py:48 msgid "Group" msgstr "Группа" -#: circuits/forms/model_forms.py:182 templates/circuits/circuitgroup.html:25 +#: netbox/circuits/forms/model_forms.py:182 +#: netbox/templates/circuits/circuitgroup.html:25 msgid "Circuit Group" msgstr "Группа каналов связи" -#: circuits/models/circuits.py:27 dcim/models/cables.py:67 -#: dcim/models/device_component_templates.py:517 -#: dcim/models/device_component_templates.py:617 -#: dcim/models/device_components.py:975 dcim/models/device_components.py:1049 -#: dcim/models/device_components.py:1204 dcim/models/devices.py:479 -#: dcim/models/racks.py:224 extras/models/tags.py:28 +#: 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/extras/models/tags.py:28 msgid "color" msgstr "цвет" -#: circuits/models/circuits.py:36 +#: netbox/circuits/models/circuits.py:36 msgid "circuit type" msgstr "тип канала связи" -#: circuits/models/circuits.py:37 +#: netbox/circuits/models/circuits.py:37 msgid "circuit types" msgstr "типы каналов связи" -#: circuits/models/circuits.py:48 +#: netbox/circuits/models/circuits.py:48 msgid "circuit ID" msgstr "Идентификатор канала связи" -#: circuits/models/circuits.py:49 +#: netbox/circuits/models/circuits.py:49 msgid "Unique circuit ID" msgstr "Уникальный ID канала связи" -#: circuits/models/circuits.py:69 core/models/data.py:52 -#: core/models/jobs.py:84 dcim/models/cables.py:49 dcim/models/devices.py:653 -#: dcim/models/devices.py:1173 dcim/models/devices.py:1399 -#: dcim/models/power.py:96 dcim/models/racks.py:297 dcim/models/sites.py:154 -#: dcim/models/sites.py:266 ipam/models/ip.py:253 ipam/models/ip.py:522 -#: ipam/models/ip.py:730 ipam/models/vlans.py:195 -#: virtualization/models/clusters.py:74 -#: virtualization/models/virtualmachines.py:84 vpn/models/tunnels.py:40 -#: wireless/models.py:95 wireless/models.py:159 +#: 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 msgid "status" msgstr "статус" -#: circuits/models/circuits.py:84 templates/core/plugin.html:20 +#: netbox/circuits/models/circuits.py:84 netbox/templates/core/plugin.html:20 msgid "installed" msgstr "установлен" -#: circuits/models/circuits.py:89 +#: netbox/circuits/models/circuits.py:89 msgid "terminates" msgstr "разобран" -#: circuits/models/circuits.py:94 +#: netbox/circuits/models/circuits.py:94 msgid "commit rate (Kbps)" msgstr "гарантированная скорость (Кбит/с)" -#: circuits/models/circuits.py:95 +#: netbox/circuits/models/circuits.py:95 msgid "Committed rate" msgstr "Гарантированная скорость" -#: circuits/models/circuits.py:137 +#: netbox/circuits/models/circuits.py:137 msgid "circuit" msgstr "канал связи" -#: circuits/models/circuits.py:138 +#: netbox/circuits/models/circuits.py:138 msgid "circuits" msgstr "каналы связи" -#: circuits/models/circuits.py:170 +#: netbox/circuits/models/circuits.py:170 msgid "circuit group" msgstr "группа каналов связи" -#: circuits/models/circuits.py:171 +#: netbox/circuits/models/circuits.py:171 msgid "circuit groups" msgstr "группы каналов связи" -#: circuits/models/circuits.py:195 ipam/models/fhrp.py:93 -#: tenancy/models/contacts.py:134 +#: netbox/circuits/models/circuits.py:195 netbox/ipam/models/fhrp.py:93 +#: netbox/tenancy/models/contacts.py:134 msgid "priority" msgstr "приоритет" -#: circuits/models/circuits.py:213 +#: netbox/circuits/models/circuits.py:213 msgid "Circuit group assignment" msgstr "Назначение группы каналов связи" -#: circuits/models/circuits.py:214 +#: netbox/circuits/models/circuits.py:214 msgid "Circuit group assignments" msgstr "Назначения групп каналов связи" -#: circuits/models/circuits.py:240 +#: netbox/circuits/models/circuits.py:240 msgid "termination" msgstr "завершение" -#: circuits/models/circuits.py:257 +#: netbox/circuits/models/circuits.py:257 msgid "port speed (Kbps)" msgstr "скорость порта (Кбит/с)" -#: circuits/models/circuits.py:260 +#: netbox/circuits/models/circuits.py:260 msgid "Physical circuit speed" msgstr "Физическая скорость канала связи" -#: circuits/models/circuits.py:265 +#: netbox/circuits/models/circuits.py:265 msgid "upstream speed (Kbps)" msgstr "скорость отдачи (Кбит/с)" -#: circuits/models/circuits.py:266 +#: netbox/circuits/models/circuits.py:266 msgid "Upstream speed, if different from port speed" msgstr "Скорость отдачи, если она отличается от скорости порта" -#: circuits/models/circuits.py:271 +#: netbox/circuits/models/circuits.py:271 msgid "cross-connect ID" msgstr "ID кросс-соединения" -#: circuits/models/circuits.py:272 +#: netbox/circuits/models/circuits.py:272 msgid "ID of the local cross-connect" msgstr "ID локального кросс-соединения" -#: circuits/models/circuits.py:277 +#: netbox/circuits/models/circuits.py:277 msgid "patch panel/port(s)" msgstr "патч-панель или порт(ы)" -#: circuits/models/circuits.py:278 +#: netbox/circuits/models/circuits.py:278 msgid "Patch panel ID and port number(s)" msgstr "ID патч-панели и номера порта(-ов)" -#: circuits/models/circuits.py:281 -#: dcim/models/device_component_templates.py:61 -#: dcim/models/device_components.py:68 dcim/models/racks.py:685 -#: extras/models/configs.py:45 extras/models/configs.py:219 -#: extras/models/customfields.py:125 extras/models/models.py:61 -#: extras/models/models.py:158 extras/models/models.py:396 -#: extras/models/models.py:511 extras/models/notifications.py:131 -#: extras/models/staging.py:31 extras/models/tags.py:32 -#: netbox/models/__init__.py:110 netbox/models/__init__.py:145 -#: netbox/models/__init__.py:191 users/models/permissions.py:24 -#: users/models/tokens.py:57 users/models/users.py:33 -#: virtualization/models/virtualmachines.py:289 +#: 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/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 msgid "description" msgstr "описание" -#: circuits/models/circuits.py:294 +#: netbox/circuits/models/circuits.py:294 msgid "circuit termination" msgstr "точка подключения канала связи" -#: circuits/models/circuits.py:295 +#: netbox/circuits/models/circuits.py:295 msgid "circuit terminations" msgstr "точки подключения канала связи" -#: circuits/models/circuits.py:308 +#: netbox/circuits/models/circuits.py:308 msgid "" "A circuit termination must attach to either a site or a provider network." msgstr "" "Оконечное устройство канала должно быть подключено либо к узлу, либо к сети " "провайдера." -#: circuits/models/circuits.py:310 +#: netbox/circuits/models/circuits.py:310 msgid "" "A circuit termination cannot attach to both a site and a provider network." msgstr "" "Терминатор канала не может быть подключен как к сайту, так и к сети " "поставщика." -#: circuits/models/providers.py:22 circuits/models/providers.py:66 -#: circuits/models/providers.py:104 core/models/data.py:39 -#: core/models/jobs.py:45 dcim/models/device_component_templates.py:43 -#: dcim/models/device_components.py:53 dcim/models/devices.py:593 -#: dcim/models/devices.py:1330 dcim/models/devices.py:1395 -#: dcim/models/power.py:39 dcim/models/power.py:92 dcim/models/racks.py:262 -#: dcim/models/sites.py:138 extras/models/configs.py:36 -#: extras/models/configs.py:215 extras/models/customfields.py:92 -#: extras/models/models.py:56 extras/models/models.py:153 -#: extras/models/models.py:296 extras/models/models.py:392 -#: extras/models/models.py:501 extras/models/models.py:596 -#: extras/models/notifications.py:126 extras/models/scripts.py:30 -#: extras/models/staging.py:26 ipam/models/asns.py:18 ipam/models/fhrp.py:25 -#: ipam/models/services.py:52 ipam/models/services.py:88 -#: ipam/models/vlans.py:36 ipam/models/vlans.py:184 ipam/models/vrfs.py:22 -#: ipam/models/vrfs.py:79 netbox/models/__init__.py:137 -#: netbox/models/__init__.py:181 tenancy/models/contacts.py:64 -#: tenancy/models/tenants.py:20 tenancy/models/tenants.py:45 -#: users/models/permissions.py:20 users/models/users.py:28 -#: virtualization/models/clusters.py:57 -#: virtualization/models/virtualmachines.py:72 -#: virtualization/models/virtualmachines.py:279 vpn/models/crypto.py:24 -#: vpn/models/crypto.py:71 vpn/models/crypto.py:131 vpn/models/crypto.py:183 -#: vpn/models/crypto.py:221 vpn/models/l2vpn.py:22 vpn/models/tunnels.py:35 -#: wireless/models.py:51 +#: 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/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/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 msgid "name" msgstr "имя" -#: circuits/models/providers.py:25 +#: netbox/circuits/models/providers.py:25 msgid "Full name of the provider" msgstr "Полное имя провайдера" -#: circuits/models/providers.py:28 dcim/models/devices.py:86 -#: dcim/models/racks.py:137 dcim/models/sites.py:149 -#: extras/models/models.py:506 ipam/models/asns.py:23 ipam/models/vlans.py:40 -#: netbox/models/__init__.py:141 netbox/models/__init__.py:186 -#: tenancy/models/tenants.py:25 tenancy/models/tenants.py:49 -#: vpn/models/l2vpn.py:27 wireless/models.py:56 +#: netbox/circuits/models/providers.py:28 netbox/dcim/models/devices.py:86 +#: 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 msgid "slug" msgstr "подстрока" -#: circuits/models/providers.py:42 +#: netbox/circuits/models/providers.py:42 msgid "provider" msgstr "провайдер" -#: circuits/models/providers.py:43 +#: netbox/circuits/models/providers.py:43 msgid "providers" msgstr "провайдеры" -#: circuits/models/providers.py:63 +#: netbox/circuits/models/providers.py:63 msgid "account ID" msgstr "идентификатор аккаунта" -#: circuits/models/providers.py:86 +#: netbox/circuits/models/providers.py:86 msgid "provider account" msgstr "аккаунт провайдера" -#: circuits/models/providers.py:87 +#: netbox/circuits/models/providers.py:87 msgid "provider accounts" msgstr "аккаунты провайдера" -#: circuits/models/providers.py:115 +#: netbox/circuits/models/providers.py:115 msgid "service ID" msgstr "идентификатор службы" -#: circuits/models/providers.py:126 +#: netbox/circuits/models/providers.py:126 msgid "provider network" msgstr "сеть провайдера" -#: circuits/models/providers.py:127 +#: netbox/circuits/models/providers.py:127 msgid "provider networks" msgstr "сети провайдера" -#: circuits/tables/circuits.py:32 circuits/tables/circuits.py:132 -#: circuits/tables/providers.py:18 circuits/tables/providers.py:69 -#: circuits/tables/providers.py:99 core/tables/data.py:16 -#: core/tables/jobs.py:14 core/tables/plugins.py:44 core/tables/tasks.py:11 -#: core/tables/tasks.py:115 dcim/forms/filtersets.py:63 -#: dcim/forms/object_create.py:43 dcim/tables/devices.py:52 -#: dcim/tables/devices.py:92 dcim/tables/devices.py:134 -#: dcim/tables/devices.py:289 dcim/tables/devices.py:392 -#: dcim/tables/devices.py:433 dcim/tables/devices.py:482 -#: dcim/tables/devices.py:531 dcim/tables/devices.py:648 -#: dcim/tables/devices.py:731 dcim/tables/devices.py:778 -#: dcim/tables/devices.py:841 dcim/tables/devices.py:911 -#: dcim/tables/devices.py:974 dcim/tables/devices.py:994 -#: dcim/tables/devices.py:1023 dcim/tables/devices.py:1053 -#: dcim/tables/devicetypes.py:31 dcim/tables/power.py:22 -#: dcim/tables/power.py:62 dcim/tables/racks.py:24 dcim/tables/racks.py:113 -#: dcim/tables/sites.py:24 dcim/tables/sites.py:51 dcim/tables/sites.py:78 -#: dcim/tables/sites.py:130 extras/forms/filtersets.py:213 -#: extras/tables/tables.py:58 extras/tables/tables.py:122 -#: extras/tables/tables.py:155 extras/tables/tables.py:180 -#: extras/tables/tables.py:246 extras/tables/tables.py:361 -#: extras/tables/tables.py:378 extras/tables/tables.py:401 -#: extras/tables/tables.py:439 extras/tables/tables.py:491 -#: extras/tables/tables.py:514 ipam/forms/bulk_edit.py:407 -#: ipam/forms/filtersets.py:386 ipam/tables/asn.py:16 ipam/tables/ip.py:85 -#: ipam/tables/ip.py:160 ipam/tables/services.py:15 ipam/tables/services.py:40 -#: ipam/tables/vlans.py:64 ipam/tables/vlans.py:114 ipam/tables/vrfs.py:26 -#: ipam/tables/vrfs.py:68 templates/circuits/circuitgroup.html:28 -#: templates/circuits/circuittype.html:22 -#: templates/circuits/provideraccount.html:28 -#: templates/circuits/providernetwork.html:24 -#: templates/core/datasource.html:34 templates/core/job.html:44 -#: templates/core/plugin.html:54 templates/core/rq_worker.html:43 -#: templates/dcim/consoleport.html:28 templates/dcim/consoleserverport.html:28 -#: templates/dcim/devicebay.html:24 templates/dcim/devicerole.html:26 -#: templates/dcim/frontport.html:28 -#: templates/dcim/inc/interface_vlans_table.html:5 -#: templates/dcim/inc/panels/inventory_items.html:18 -#: templates/dcim/interface.html:38 templates/dcim/interface.html:165 -#: templates/dcim/inventoryitem.html:28 -#: templates/dcim/inventoryitemrole.html:18 templates/dcim/location.html:29 -#: templates/dcim/manufacturer.html:36 templates/dcim/modulebay.html:30 -#: templates/dcim/platform.html:29 templates/dcim/poweroutlet.html:28 -#: templates/dcim/powerport.html:28 templates/dcim/rackrole.html:22 -#: templates/dcim/rearport.html:28 templates/dcim/region.html:29 -#: templates/dcim/sitegroup.html:29 -#: templates/dcim/virtualdevicecontext.html:18 -#: templates/extras/configcontext.html:13 -#: templates/extras/configtemplate.html:13 -#: templates/extras/customfield.html:13 templates/extras/customlink.html:13 -#: templates/extras/eventrule.html:13 templates/extras/exporttemplate.html:15 -#: templates/extras/notificationgroup.html:14 -#: templates/extras/savedfilter.html:13 templates/extras/script_list.html:44 -#: templates/extras/tag.html:14 templates/extras/webhook.html:13 -#: templates/ipam/asnrange.html:15 templates/ipam/fhrpgroup.html:30 -#: templates/ipam/rir.html:22 templates/ipam/role.html:22 -#: templates/ipam/routetarget.html:13 templates/ipam/service.html:24 -#: templates/ipam/servicetemplate.html:15 templates/ipam/vlan.html:35 -#: templates/ipam/vlangroup.html:30 templates/tenancy/contact.html:25 -#: templates/tenancy/contactgroup.html:21 -#: templates/tenancy/contactrole.html:18 templates/tenancy/tenantgroup.html:29 -#: templates/users/group.html:17 templates/users/objectpermission.html:17 -#: templates/virtualization/cluster.html:13 -#: templates/virtualization/clustergroup.html:22 -#: templates/virtualization/clustertype.html:22 -#: templates/virtualization/virtualdisk.html:25 -#: templates/virtualization/virtualmachine.html:15 -#: templates/virtualization/vminterface.html:25 -#: templates/vpn/ikepolicy.html:13 templates/vpn/ikeproposal.html:13 -#: templates/vpn/ipsecpolicy.html:13 templates/vpn/ipsecprofile.html:13 -#: templates/vpn/ipsecprofile.html:36 templates/vpn/ipsecprofile.html:69 -#: templates/vpn/ipsecproposal.html:13 templates/vpn/l2vpn.html:14 -#: templates/vpn/tunnel.html:21 templates/vpn/tunnelgroup.html:26 -#: templates/wireless/wirelesslangroup.html:29 tenancy/tables/contacts.py:19 -#: tenancy/tables/contacts.py:41 tenancy/tables/contacts.py:56 -#: tenancy/tables/tenants.py:16 tenancy/tables/tenants.py:38 -#: users/tables.py:62 users/tables.py:76 -#: virtualization/forms/bulk_create.py:20 -#: virtualization/forms/object_create.py:13 -#: virtualization/forms/object_create.py:23 -#: virtualization/tables/clusters.py:17 virtualization/tables/clusters.py:39 -#: virtualization/tables/clusters.py:62 -#: virtualization/tables/virtualmachines.py:55 -#: virtualization/tables/virtualmachines.py:139 -#: virtualization/tables/virtualmachines.py:194 vpn/tables/crypto.py:18 -#: vpn/tables/crypto.py:57 vpn/tables/crypto.py:93 vpn/tables/crypto.py:129 -#: vpn/tables/crypto.py:158 vpn/tables/l2vpn.py:23 vpn/tables/tunnels.py:18 -#: vpn/tables/tunnels.py:40 wireless/tables/wirelesslan.py:18 -#: wireless/tables/wirelesslan.py:79 +#: netbox/circuits/tables/circuits.py:32 +#: netbox/circuits/tables/circuits.py:132 +#: netbox/circuits/tables/providers.py:18 +#: netbox/circuits/tables/providers.py:69 +#: netbox/circuits/tables/providers.py:99 netbox/core/tables/data.py:16 +#: netbox/core/tables/jobs.py:14 netbox/core/tables/plugins.py: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/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/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/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/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 +#: netbox/templates/dcim/consoleserverport.html:28 +#: netbox/templates/dcim/devicebay.html:24 +#: netbox/templates/dcim/devicerole.html:26 +#: netbox/templates/dcim/frontport.html:28 +#: netbox/templates/dcim/inc/interface_vlans_table.html:5 +#: netbox/templates/dcim/inc/panels/inventory_items.html:18 +#: netbox/templates/dcim/interface.html:38 +#: netbox/templates/dcim/interface.html:165 +#: netbox/templates/dcim/inventoryitem.html:28 +#: netbox/templates/dcim/inventoryitemrole.html:18 +#: netbox/templates/dcim/location.html:29 +#: netbox/templates/dcim/manufacturer.html:36 +#: netbox/templates/dcim/modulebay.html:30 +#: netbox/templates/dcim/platform.html:29 +#: netbox/templates/dcim/poweroutlet.html:28 +#: netbox/templates/dcim/powerport.html:28 +#: netbox/templates/dcim/rackrole.html:22 +#: netbox/templates/dcim/rearport.html:28 netbox/templates/dcim/region.html:29 +#: netbox/templates/dcim/sitegroup.html:29 +#: netbox/templates/dcim/virtualdevicecontext.html:18 +#: netbox/templates/extras/configcontext.html:13 +#: netbox/templates/extras/configtemplate.html:13 +#: netbox/templates/extras/customfield.html:13 +#: netbox/templates/extras/customlink.html:13 +#: netbox/templates/extras/eventrule.html:13 +#: netbox/templates/extras/exporttemplate.html:15 +#: netbox/templates/extras/notificationgroup.html:14 +#: netbox/templates/extras/savedfilter.html:13 +#: netbox/templates/extras/script_list.html:45 +#: netbox/templates/extras/tag.html:14 netbox/templates/extras/webhook.html:13 +#: netbox/templates/ipam/asnrange.html:15 +#: netbox/templates/ipam/fhrpgroup.html:30 netbox/templates/ipam/rir.html:22 +#: netbox/templates/ipam/role.html:22 +#: netbox/templates/ipam/routetarget.html:13 +#: netbox/templates/ipam/service.html:24 +#: netbox/templates/ipam/servicetemplate.html:15 +#: netbox/templates/ipam/vlan.html:35 netbox/templates/ipam/vlangroup.html:30 +#: netbox/templates/tenancy/contact.html:25 +#: netbox/templates/tenancy/contactgroup.html:21 +#: netbox/templates/tenancy/contactrole.html:18 +#: netbox/templates/tenancy/tenantgroup.html:29 +#: netbox/templates/users/group.html:17 +#: netbox/templates/users/objectpermission.html:17 +#: netbox/templates/virtualization/cluster.html:13 +#: netbox/templates/virtualization/clustergroup.html:22 +#: netbox/templates/virtualization/clustertype.html:22 +#: netbox/templates/virtualization/virtualdisk.html:25 +#: netbox/templates/virtualization/virtualmachine.html:15 +#: netbox/templates/virtualization/vminterface.html:25 +#: netbox/templates/vpn/ikepolicy.html:13 +#: netbox/templates/vpn/ikeproposal.html:13 +#: netbox/templates/vpn/ipsecpolicy.html:13 +#: netbox/templates/vpn/ipsecprofile.html:13 +#: netbox/templates/vpn/ipsecprofile.html:36 +#: netbox/templates/vpn/ipsecprofile.html:69 +#: netbox/templates/vpn/ipsecproposal.html:13 +#: netbox/templates/vpn/l2vpn.html:14 netbox/templates/vpn/tunnel.html:21 +#: netbox/templates/vpn/tunnelgroup.html:26 +#: netbox/templates/wireless/wirelesslangroup.html:29 +#: netbox/tenancy/tables/contacts.py:19 netbox/tenancy/tables/contacts.py:41 +#: netbox/tenancy/tables/contacts.py:56 netbox/tenancy/tables/tenants.py:16 +#: netbox/tenancy/tables/tenants.py:38 netbox/users/tables.py:62 +#: netbox/users/tables.py:76 netbox/virtualization/forms/bulk_create.py:20 +#: netbox/virtualization/forms/object_create.py:13 +#: netbox/virtualization/forms/object_create.py:23 +#: netbox/virtualization/tables/clusters.py:17 +#: netbox/virtualization/tables/clusters.py:39 +#: netbox/virtualization/tables/clusters.py:62 +#: netbox/virtualization/tables/virtualmachines.py:55 +#: netbox/virtualization/tables/virtualmachines.py:139 +#: netbox/virtualization/tables/virtualmachines.py:194 +#: netbox/vpn/tables/crypto.py:18 netbox/vpn/tables/crypto.py:57 +#: netbox/vpn/tables/crypto.py:93 netbox/vpn/tables/crypto.py:129 +#: netbox/vpn/tables/crypto.py:158 netbox/vpn/tables/l2vpn.py:23 +#: netbox/vpn/tables/tunnels.py:18 netbox/vpn/tables/tunnels.py:40 +#: netbox/wireless/tables/wirelesslan.py:18 +#: netbox/wireless/tables/wirelesslan.py:79 msgid "Name" msgstr "Имя" -#: circuits/tables/circuits.py:41 circuits/tables/circuits.py:138 -#: circuits/tables/providers.py:45 circuits/tables/providers.py:79 -#: netbox/navigation/menu.py:266 netbox/navigation/menu.py:270 -#: netbox/navigation/menu.py:272 templates/circuits/provider.html:57 -#: templates/circuits/provideraccount.html:44 -#: templates/circuits/providernetwork.html:50 +#: 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/templates/circuits/provider.html:57 +#: netbox/templates/circuits/provideraccount.html:44 +#: netbox/templates/circuits/providernetwork.html:50 msgid "Circuits" msgstr "Каналы связи" -#: circuits/tables/circuits.py:55 templates/circuits/circuit.html:26 +#: netbox/circuits/tables/circuits.py:55 +#: netbox/templates/circuits/circuit.html:26 msgid "Circuit ID" msgstr "Идентификатор канала связи" -#: circuits/tables/circuits.py:69 wireless/forms/model_forms.py:160 +#: netbox/circuits/tables/circuits.py:69 +#: netbox/wireless/forms/model_forms.py:160 msgid "Side A" msgstr "Сторона А" -#: circuits/tables/circuits.py:74 +#: netbox/circuits/tables/circuits.py:74 msgid "Side Z" msgstr "Сторона Z" -#: circuits/tables/circuits.py:77 templates/circuits/circuit.html:55 +#: netbox/circuits/tables/circuits.py:77 +#: netbox/templates/circuits/circuit.html:55 msgid "Commit Rate" msgstr "Гарантированная скорость" -#: circuits/tables/circuits.py:80 circuits/tables/providers.py:48 -#: circuits/tables/providers.py:82 circuits/tables/providers.py:107 -#: dcim/tables/devices.py:1036 dcim/tables/devicetypes.py:92 -#: dcim/tables/modules.py:29 dcim/tables/modules.py:72 dcim/tables/power.py:39 -#: dcim/tables/power.py:96 dcim/tables/racks.py:84 dcim/tables/racks.py:145 -#: dcim/tables/racks.py:225 dcim/tables/sites.py:108 -#: extras/tables/tables.py:582 ipam/tables/asn.py:69 ipam/tables/fhrp.py:34 -#: ipam/tables/ip.py:136 ipam/tables/ip.py:275 ipam/tables/ip.py:329 -#: ipam/tables/ip.py:397 ipam/tables/services.py:24 ipam/tables/services.py:54 -#: ipam/tables/vlans.py:145 ipam/tables/vrfs.py:47 ipam/tables/vrfs.py:72 -#: templates/dcim/htmx/cable_edit.html:89 templates/generic/bulk_edit.html:86 -#: templates/inc/panels/comments.html:5 tenancy/tables/contacts.py:68 -#: tenancy/tables/tenants.py:46 utilities/forms/fields/fields.py:29 -#: virtualization/tables/clusters.py:91 -#: virtualization/tables/virtualmachines.py:82 vpn/tables/crypto.py:37 -#: vpn/tables/crypto.py:74 vpn/tables/crypto.py:109 vpn/tables/crypto.py:140 -#: vpn/tables/crypto.py:173 vpn/tables/l2vpn.py:37 vpn/tables/tunnels.py:61 -#: wireless/tables/wirelesslan.py:27 wireless/tables/wirelesslan.py:58 +#: netbox/circuits/tables/circuits.py: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/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/vpn/tables/crypto.py:37 netbox/vpn/tables/crypto.py:74 +#: netbox/vpn/tables/crypto.py:109 netbox/vpn/tables/crypto.py:140 +#: netbox/vpn/tables/crypto.py:173 netbox/vpn/tables/l2vpn.py:37 +#: netbox/vpn/tables/tunnels.py:61 netbox/wireless/tables/wirelesslan.py:27 +#: netbox/wireless/tables/wirelesslan.py:58 msgid "Comments" msgstr "Комментарии" -#: circuits/tables/circuits.py:86 templates/tenancy/contact.html:84 -#: tenancy/tables/contacts.py:73 +#: netbox/circuits/tables/circuits.py:86 +#: netbox/templates/tenancy/contact.html:84 +#: netbox/tenancy/tables/contacts.py:73 msgid "Assignments" msgstr "Задания" -#: circuits/tables/providers.py:23 +#: netbox/circuits/tables/providers.py:23 msgid "Accounts" msgstr "Аккаунты" -#: circuits/tables/providers.py:29 +#: netbox/circuits/tables/providers.py:29 msgid "Account Count" msgstr "Количество аккаунтов" -#: circuits/tables/providers.py:39 dcim/tables/sites.py:100 +#: netbox/circuits/tables/providers.py:39 netbox/dcim/tables/sites.py:100 msgid "ASN Count" msgstr "Количество ASN" -#: circuits/views.py:331 +#: netbox/circuits/views.py:331 #, python-brace-format msgid "No terminations have been defined for circuit {circuit}." msgstr "Не определены точки подключения для канала связи {circuit}." -#: circuits/views.py:380 +#: netbox/circuits/views.py:380 #, python-brace-format msgid "Swapped terminations for circuit {circuit}." msgstr "Поменены местами точки подключения для канала связи {circuit}." -#: core/api/views.py:39 +#: netbox/core/api/views.py:39 msgid "This user does not have permission to synchronize this data source." msgstr "" "У этого пользователя нет разрешения на синхронизацию этого источника данных." -#: core/choices.py:18 +#: netbox/core/choices.py:18 msgid "New" msgstr "Новый" -#: core/choices.py:19 core/constants.py:18 core/tables/tasks.py:15 -#: templates/core/rq_task.html:77 +#: netbox/core/choices.py:19 netbox/core/constants.py:18 +#: netbox/core/tables/tasks.py:15 netbox/templates/core/rq_task.html:77 msgid "Queued" msgstr "В очереди" -#: core/choices.py:20 +#: netbox/core/choices.py:20 msgid "Syncing" msgstr "Синхронизируется" -#: core/choices.py:21 core/choices.py:57 core/tables/jobs.py:41 -#: templates/core/job.html:86 +#: netbox/core/choices.py:21 netbox/core/choices.py:57 +#: netbox/core/tables/jobs.py:41 netbox/templates/core/job.html:86 msgid "Completed" msgstr "Завершено" -#: core/choices.py:22 core/choices.py:59 core/constants.py:20 -#: core/tables/tasks.py:34 dcim/choices.py:187 dcim/choices.py:239 -#: dcim/choices.py:1607 virtualization/choices.py:47 +#: netbox/core/choices.py:22 netbox/core/choices.py:59 +#: netbox/core/constants.py:20 netbox/core/tables/tasks.py:34 +#: netbox/dcim/choices.py:187 netbox/dcim/choices.py:239 +#: netbox/dcim/choices.py:1609 netbox/virtualization/choices.py:47 msgid "Failed" msgstr "Неисправно" -#: core/choices.py:35 netbox/navigation/menu.py:335 -#: netbox/navigation/menu.py:339 templates/extras/script/base.html:14 -#: templates/extras/script_list.html:7 templates/extras/script_list.html:12 -#: templates/extras/script_result.html:17 +#: netbox/core/choices.py:35 netbox/netbox/navigation/menu.py:335 +#: netbox/netbox/navigation/menu.py:339 +#: netbox/templates/extras/script/base.html:14 +#: netbox/templates/extras/script_list.html:7 +#: netbox/templates/extras/script_list.html:12 +#: netbox/templates/extras/script_result.html:17 msgid "Scripts" msgstr "Скрипты" -#: core/choices.py:36 templates/extras/report/base.html:13 +#: netbox/core/choices.py:36 netbox/templates/extras/report/base.html:13 msgid "Reports" msgstr "Отчеты" -#: core/choices.py:54 +#: netbox/core/choices.py:54 msgid "Pending" msgstr "В ожидании" -#: core/choices.py:55 core/constants.py:23 core/tables/jobs.py:32 -#: core/tables/tasks.py:38 templates/core/job.html:73 +#: netbox/core/choices.py:55 netbox/core/constants.py:23 +#: netbox/core/tables/jobs.py:32 netbox/core/tables/tasks.py:38 +#: netbox/templates/core/job.html:73 msgid "Scheduled" msgstr "Запланировано" -#: core/choices.py:56 +#: netbox/core/choices.py:56 msgid "Running" msgstr "Исполняется" -#: core/choices.py:58 +#: netbox/core/choices.py:58 msgid "Errored" msgstr "Ошибка" -#: core/choices.py:87 core/tables/plugins.py:63 -#: templates/generic/object.html:61 +#: netbox/core/choices.py:87 netbox/core/tables/plugins.py:63 +#: netbox/templates/generic/object.html:61 msgid "Updated" msgstr "Обновлено" -#: core/choices.py:88 +#: netbox/core/choices.py:88 msgid "Deleted" msgstr "Удалено" -#: core/constants.py:19 core/tables/tasks.py:30 +#: netbox/core/constants.py:19 netbox/core/tables/tasks.py:30 msgid "Finished" msgstr "Закончено" -#: core/constants.py:21 core/tables/jobs.py:38 templates/core/job.html:82 -#: templates/extras/htmx/script_result.html:8 +#: netbox/core/constants.py:21 netbox/core/tables/jobs.py:38 +#: netbox/templates/core/job.html:82 +#: netbox/templates/extras/htmx/script_result.html:8 msgid "Started" msgstr "Запущено" -#: core/constants.py:22 core/tables/tasks.py:26 +#: netbox/core/constants.py:22 netbox/core/tables/tasks.py:26 msgid "Deferred" msgstr "Отложено" -#: core/constants.py:24 +#: netbox/core/constants.py:24 msgid "Stopped" msgstr "Остановлен" -#: core/constants.py:25 +#: netbox/core/constants.py:25 msgid "Cancelled" msgstr "Отменено" -#: core/data_backends.py:32 core/tables/plugins.py:51 -#: templates/core/plugin.html:88 templates/dcim/interface.html:216 +#: netbox/core/data_backends.py:32 netbox/core/tables/plugins.py:51 +#: netbox/templates/core/plugin.html:88 +#: netbox/templates/dcim/interface.html:216 msgid "Local" msgstr "Локальный" -#: core/data_backends.py:50 core/tables/change_logging.py:20 -#: templates/account/profile.html:15 templates/users/user.html:17 -#: users/tables.py:31 +#: netbox/core/data_backends.py:50 netbox/core/tables/change_logging.py:20 +#: netbox/templates/account/profile.html:15 +#: netbox/templates/users/user.html:17 netbox/users/tables.py:31 msgid "Username" msgstr "Имя пользователя" -#: core/data_backends.py:52 core/data_backends.py:58 +#: netbox/core/data_backends.py:52 netbox/core/data_backends.py:58 msgid "Only used for cloning with HTTP(S)" msgstr "Используется только для клонирования по HTTP (S)" -#: core/data_backends.py:56 templates/account/base.html:23 -#: templates/account/password.html:12 users/forms/model_forms.py:170 +#: netbox/core/data_backends.py:56 netbox/templates/account/base.html:23 +#: netbox/templates/account/password.html:12 +#: netbox/users/forms/model_forms.py:170 msgid "Password" msgstr "Пароль" -#: core/data_backends.py:62 +#: netbox/core/data_backends.py:62 msgid "Branch" msgstr "Ветка" -#: core/data_backends.py:120 +#: netbox/core/data_backends.py:120 #, python-brace-format msgid "Fetching remote data failed ({name}): {error}" msgstr "Не удалось получить удаленные данные ({name}): {error}" -#: core/data_backends.py:133 +#: netbox/core/data_backends.py:133 msgid "AWS access key ID" msgstr "ID ключа доступа AWS" -#: core/data_backends.py:137 +#: netbox/core/data_backends.py:137 msgid "AWS secret access key" msgstr "Секретный ключ доступа AWS" -#: core/events.py:27 +#: netbox/core/events.py:27 msgid "Object created" msgstr "Объект создан" -#: core/events.py:28 +#: netbox/core/events.py:28 msgid "Object updated" msgstr "Объект обновлен" -#: core/events.py:29 +#: netbox/core/events.py:29 msgid "Object deleted" msgstr "Объект удален" -#: core/events.py:30 +#: netbox/core/events.py:30 msgid "Job started" msgstr "Задача начата" -#: core/events.py:31 +#: netbox/core/events.py:31 msgid "Job completed" msgstr "Задача выполнена" -#: core/events.py:32 +#: netbox/core/events.py:32 msgid "Job failed" msgstr "Задача не выполнена" -#: core/events.py:33 +#: netbox/core/events.py:33 msgid "Job errored" msgstr "Задача выполнена с ошибкой" -#: core/filtersets.py:53 extras/filtersets.py:250 extras/filtersets.py:633 -#: extras/filtersets.py:661 +#: netbox/core/filtersets.py:53 netbox/extras/filtersets.py:250 +#: netbox/extras/filtersets.py:633 netbox/extras/filtersets.py:661 msgid "Data source (ID)" msgstr "Источник данных (ID)" -#: core/filtersets.py:59 +#: netbox/core/filtersets.py:59 msgid "Data source (name)" msgstr "Источник данных (имя)" -#: core/filtersets.py:145 dcim/filtersets.py:501 extras/filtersets.py:287 -#: extras/filtersets.py:331 extras/filtersets.py:353 extras/filtersets.py:413 -#: users/filtersets.py:28 +#: netbox/core/filtersets.py:145 netbox/dcim/filtersets.py:501 +#: 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 msgid "User (ID)" msgstr "Пользователь (ID)" -#: core/filtersets.py:151 +#: netbox/core/filtersets.py:151 msgid "User name" msgstr "Имя пользователя" -#: core/forms/bulk_edit.py:25 core/forms/filtersets.py:43 -#: core/tables/data.py:26 dcim/forms/bulk_edit.py:1122 -#: dcim/forms/bulk_edit.py:1400 dcim/forms/filtersets.py:1370 -#: dcim/tables/devices.py:553 dcim/tables/devicetypes.py:224 -#: extras/forms/bulk_edit.py:123 extras/forms/bulk_edit.py:187 -#: extras/forms/bulk_edit.py:246 extras/forms/filtersets.py:142 -#: extras/forms/filtersets.py:229 extras/forms/filtersets.py:294 -#: extras/tables/tables.py:162 extras/tables/tables.py:253 -#: extras/tables/tables.py:415 netbox/preferences.py:22 -#: templates/core/datasource.html:42 templates/dcim/interface.html:61 -#: templates/extras/customlink.html:17 templates/extras/eventrule.html:17 -#: templates/extras/savedfilter.html:25 -#: templates/users/objectpermission.html:25 -#: templates/virtualization/vminterface.html:29 users/forms/bulk_edit.py:89 -#: users/forms/filtersets.py:70 users/tables.py:83 -#: virtualization/forms/bulk_edit.py:217 -#: virtualization/forms/filtersets.py:215 +#: 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/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/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 +#: netbox/templates/dcim/interface.html:61 +#: netbox/templates/extras/customlink.html:17 +#: netbox/templates/extras/eventrule.html:17 +#: netbox/templates/extras/savedfilter.html:25 +#: netbox/templates/users/objectpermission.html:25 +#: netbox/templates/virtualization/vminterface.html:29 +#: netbox/users/forms/bulk_edit.py:89 netbox/users/forms/filtersets.py:70 +#: netbox/users/tables.py:83 netbox/virtualization/forms/bulk_edit.py:217 +#: netbox/virtualization/forms/filtersets.py:215 msgid "Enabled" msgstr "Включено" -#: core/forms/bulk_edit.py:34 extras/forms/model_forms.py:285 -#: templates/extras/savedfilter.html:52 vpn/forms/filtersets.py:97 -#: vpn/forms/filtersets.py:127 vpn/forms/filtersets.py:151 -#: vpn/forms/filtersets.py:170 vpn/forms/model_forms.py:301 -#: vpn/forms/model_forms.py:321 vpn/forms/model_forms.py:337 -#: vpn/forms/model_forms.py:357 vpn/forms/model_forms.py:380 +#: netbox/core/forms/bulk_edit.py:34 netbox/extras/forms/model_forms.py:285 +#: 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 msgid "Parameters" msgstr "Параметры" -#: core/forms/bulk_edit.py:38 templates/core/datasource.html:68 +#: netbox/core/forms/bulk_edit.py:38 netbox/templates/core/datasource.html:68 msgid "Ignore rules" msgstr "Правила исключения" -#: core/forms/filtersets.py:30 core/forms/model_forms.py:97 -#: extras/forms/model_forms.py:248 extras/forms/model_forms.py:578 -#: extras/forms/model_forms.py:632 extras/tables/tables.py:191 -#: extras/tables/tables.py:483 extras/tables/tables.py:518 -#: templates/core/datasource.html:31 -#: templates/dcim/device/render_config.html:18 -#: templates/extras/configcontext.html:29 -#: templates/extras/configtemplate.html:21 -#: templates/extras/exporttemplate.html:35 -#: templates/virtualization/virtualmachine/render_config.html:18 +#: netbox/core/forms/filtersets.py: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/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 msgid "Data Source" msgstr "Источник данных" -#: core/forms/filtersets.py:55 core/forms/mixins.py:21 +#: netbox/core/forms/filtersets.py:55 netbox/core/forms/mixins.py:21 msgid "File" msgstr "Файл" -#: core/forms/filtersets.py:60 core/forms/mixins.py:16 -#: extras/forms/filtersets.py:170 extras/forms/filtersets.py:328 -#: extras/forms/filtersets.py:413 +#: 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 msgid "Data source" msgstr "Источник данных" -#: core/forms/filtersets.py:70 extras/forms/filtersets.py:440 +#: netbox/core/forms/filtersets.py:70 netbox/extras/forms/filtersets.py:440 msgid "Creation" msgstr "Создание" -#: core/forms/filtersets.py:74 core/forms/filtersets.py:160 -#: extras/forms/filtersets.py:461 extras/tables/tables.py:220 -#: extras/tables/tables.py:294 extras/tables/tables.py:326 -#: extras/tables/tables.py:571 templates/core/job.html:38 -#: templates/core/objectchange.html:52 tenancy/tables/contacts.py:90 -#: vpn/tables/l2vpn.py:59 +#: 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/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 +#: netbox/tenancy/tables/contacts.py:90 netbox/vpn/tables/l2vpn.py:59 msgid "Object Type" msgstr "Тип объекта" -#: core/forms/filtersets.py:84 +#: netbox/core/forms/filtersets.py:84 msgid "Created after" msgstr "Создано после" -#: core/forms/filtersets.py:89 +#: netbox/core/forms/filtersets.py:89 msgid "Created before" msgstr "Создано до" -#: core/forms/filtersets.py:94 +#: netbox/core/forms/filtersets.py:94 msgid "Scheduled after" msgstr "Запланировано после" -#: core/forms/filtersets.py:99 +#: netbox/core/forms/filtersets.py:99 msgid "Scheduled before" msgstr "Запланировано до" -#: core/forms/filtersets.py:104 +#: netbox/core/forms/filtersets.py:104 msgid "Started after" msgstr "Запустилось после" -#: core/forms/filtersets.py:109 +#: netbox/core/forms/filtersets.py:109 msgid "Started before" msgstr "Запустилось до" -#: core/forms/filtersets.py:114 +#: netbox/core/forms/filtersets.py:114 msgid "Completed after" msgstr "Завершено после" -#: core/forms/filtersets.py:119 +#: netbox/core/forms/filtersets.py:119 msgid "Completed before" msgstr "Завершено до" -#: core/forms/filtersets.py:126 core/forms/filtersets.py:155 -#: dcim/forms/bulk_edit.py:456 dcim/forms/filtersets.py:418 -#: dcim/forms/filtersets.py:462 dcim/forms/model_forms.py:316 -#: extras/forms/filtersets.py:456 extras/forms/filtersets.py:475 -#: extras/tables/tables.py:302 extras/tables/tables.py:342 -#: templates/core/objectchange.html:36 templates/dcim/rackreservation.html:58 -#: templates/extras/savedfilter.html:21 templates/inc/user_menu.html:33 -#: templates/users/token.html:21 templates/users/user.html:6 -#: templates/users/user.html:14 users/filtersets.py:107 -#: users/filtersets.py:174 users/forms/filtersets.py:84 -#: users/forms/filtersets.py:125 users/forms/model_forms.py:155 -#: users/forms/model_forms.py:192 users/tables.py:19 +#: 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/extras/tables/tables.py:302 netbox/extras/tables/tables.py:342 +#: netbox/templates/core/objectchange.html:36 +#: netbox/templates/dcim/rackreservation.html:58 +#: netbox/templates/extras/savedfilter.html:21 +#: netbox/templates/inc/user_menu.html:33 netbox/templates/users/token.html:21 +#: netbox/templates/users/user.html:6 netbox/templates/users/user.html:14 +#: netbox/users/filtersets.py:107 netbox/users/filtersets.py:174 +#: netbox/users/forms/filtersets.py:84 netbox/users/forms/filtersets.py:125 +#: netbox/users/forms/model_forms.py:155 netbox/users/forms/model_forms.py:192 +#: netbox/users/tables.py:19 msgid "User" msgstr "Пользователь" -#: core/forms/filtersets.py:134 core/tables/change_logging.py:15 -#: extras/tables/tables.py:609 extras/tables/tables.py:646 -#: templates/core/objectchange.html:32 +#: netbox/core/forms/filtersets.py:134 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 "Время" -#: core/forms/filtersets.py:139 extras/forms/filtersets.py:445 +#: netbox/core/forms/filtersets.py:139 netbox/extras/forms/filtersets.py:445 msgid "After" msgstr "После" -#: core/forms/filtersets.py:144 extras/forms/filtersets.py:450 +#: netbox/core/forms/filtersets.py:144 netbox/extras/forms/filtersets.py:450 msgid "Before" msgstr "До" -#: core/forms/filtersets.py:148 core/tables/change_logging.py:29 -#: extras/forms/model_forms.py:396 templates/core/objectchange.html:46 -#: templates/extras/eventrule.html:71 +#: netbox/core/forms/filtersets.py:148 netbox/core/tables/change_logging.py:29 +#: netbox/extras/forms/model_forms.py:396 +#: netbox/templates/core/objectchange.html:46 +#: netbox/templates/extras/eventrule.html:71 msgid "Action" msgstr "Действие" -#: core/forms/model_forms.py:54 core/tables/data.py:46 -#: templates/core/datafile.html:27 templates/extras/report/base.html:33 -#: templates/extras/script/base.html:32 +#: netbox/core/forms/model_forms.py:54 netbox/core/tables/data.py:46 +#: netbox/templates/core/datafile.html:27 +#: netbox/templates/extras/report/base.html:33 +#: netbox/templates/extras/script/base.html:32 msgid "Source" msgstr "Источник" -#: core/forms/model_forms.py:58 +#: netbox/core/forms/model_forms.py:58 msgid "Backend Parameters" msgstr "Параметры backend" -#: core/forms/model_forms.py:96 +#: netbox/core/forms/model_forms.py:96 msgid "File Upload" msgstr "Загрузка файла" -#: core/forms/model_forms.py:108 +#: netbox/core/forms/model_forms.py:108 msgid "Cannot upload a file and sync from an existing file" msgstr "" "Невозможно загрузить файл и синхронизировать его с существующим файлом" -#: core/forms/model_forms.py:110 +#: netbox/core/forms/model_forms.py:110 msgid "Must upload a file or select a data file to sync" msgstr "Необходимо загрузить файл или выбрать файл данных для синхронизации" -#: core/forms/model_forms.py:153 templates/dcim/rack_elevation_list.html:6 +#: netbox/core/forms/model_forms.py:153 +#: netbox/templates/dcim/rack_elevation_list.html:6 msgid "Rack Elevations" msgstr "Фасады стоек" -#: core/forms/model_forms.py:157 dcim/choices.py:1518 -#: dcim/forms/bulk_edit.py:969 dcim/forms/bulk_edit.py:1357 -#: dcim/forms/bulk_edit.py:1375 dcim/tables/racks.py:158 -#: netbox/navigation/menu.py:291 netbox/navigation/menu.py:295 +#: 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 msgid "Power" -msgstr "Мощность" +msgstr "Электропитание" -#: core/forms/model_forms.py:159 netbox/navigation/menu.py:154 -#: templates/core/inc/config_data.html:37 +#: netbox/core/forms/model_forms.py:159 netbox/netbox/navigation/menu.py:154 +#: netbox/templates/core/inc/config_data.html:37 msgid "IPAM" msgstr "IPAM" -#: core/forms/model_forms.py:160 netbox/navigation/menu.py:230 -#: templates/core/inc/config_data.html:50 vpn/forms/bulk_edit.py:77 -#: vpn/forms/filtersets.py:43 vpn/forms/model_forms.py:61 -#: vpn/forms/model_forms.py:146 +#: netbox/core/forms/model_forms.py:160 netbox/netbox/navigation/menu.py:230 +#: netbox/templates/core/inc/config_data.html:50 +#: netbox/vpn/forms/bulk_edit.py:77 netbox/vpn/forms/filtersets.py:43 +#: netbox/vpn/forms/model_forms.py:61 netbox/vpn/forms/model_forms.py:146 msgid "Security" msgstr "Безопасность" -#: core/forms/model_forms.py:161 templates/core/inc/config_data.html:59 +#: netbox/core/forms/model_forms.py:161 +#: netbox/templates/core/inc/config_data.html:59 msgid "Banners" msgstr "Баннеры" -#: core/forms/model_forms.py:162 templates/core/inc/config_data.html:80 +#: netbox/core/forms/model_forms.py:162 +#: netbox/templates/core/inc/config_data.html:80 msgid "Pagination" msgstr "Разбивка на страницы" -#: core/forms/model_forms.py:163 extras/forms/bulk_edit.py:92 -#: extras/forms/filtersets.py:47 extras/forms/model_forms.py:116 -#: extras/forms/model_forms.py:129 templates/core/inc/config_data.html:93 +#: 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/model_forms.py:129 +#: netbox/templates/core/inc/config_data.html:93 msgid "Validation" msgstr "Валидация" -#: core/forms/model_forms.py:164 templates/account/preferences.html:6 +#: netbox/core/forms/model_forms.py:164 +#: netbox/templates/account/preferences.html:6 msgid "User Preferences" msgstr "Пользовательские настройки" -#: core/forms/model_forms.py:167 dcim/forms/filtersets.py:732 -#: templates/core/inc/config_data.html:127 users/forms/model_forms.py:64 +#: netbox/core/forms/model_forms.py:167 netbox/dcim/forms/filtersets.py:732 +#: netbox/templates/core/inc/config_data.html:127 +#: netbox/users/forms/model_forms.py:64 msgid "Miscellaneous" msgstr "Разное" -#: core/forms/model_forms.py:169 +#: netbox/core/forms/model_forms.py:169 msgid "Config Revision" msgstr "Ревизия конфигурации" -#: core/forms/model_forms.py:208 +#: netbox/core/forms/model_forms.py:208 msgid "This parameter has been defined statically and cannot be modified." msgstr "Этот параметр определен статически и не может быть изменен." -#: core/forms/model_forms.py:216 +#: netbox/core/forms/model_forms.py:216 #, python-brace-format msgid "Current value: {value}" msgstr "Текущее значение: {value}" -#: core/forms/model_forms.py:218 +#: netbox/core/forms/model_forms.py:218 msgid " (default)" msgstr " (по умолчанию)" -#: core/models/change_logging.py:29 +#: netbox/core/models/change_logging.py:29 msgid "time" msgstr "время" -#: core/models/change_logging.py:42 +#: netbox/core/models/change_logging.py:42 msgid "user name" msgstr "имя пользователя" -#: core/models/change_logging.py:47 +#: netbox/core/models/change_logging.py:47 msgid "request ID" msgstr "идентификатор запроса" -#: core/models/change_logging.py:52 extras/models/staging.py:69 +#: netbox/core/models/change_logging.py:52 netbox/extras/models/staging.py:69 msgid "action" msgstr "действие" -#: core/models/change_logging.py:86 +#: netbox/core/models/change_logging.py:86 msgid "pre-change data" msgstr "данные перед изменением" -#: core/models/change_logging.py:92 +#: netbox/core/models/change_logging.py:92 msgid "post-change data" msgstr "данные после изменений" -#: core/models/change_logging.py:106 +#: netbox/core/models/change_logging.py:106 msgid "object change" msgstr "изменение объекта" -#: core/models/change_logging.py:107 +#: netbox/core/models/change_logging.py:107 msgid "object changes" msgstr "изменения объекта" -#: core/models/change_logging.py:123 +#: netbox/core/models/change_logging.py:123 #, python-brace-format msgid "Change logging is not supported for this object type ({type})." msgstr "" "Ведение журнала изменений не поддерживается для этого типа объектов " "({type})." -#: core/models/config.py:18 core/models/data.py:266 core/models/files.py:27 -#: core/models/jobs.py:49 extras/models/models.py:730 -#: extras/models/notifications.py:39 extras/models/notifications.py:186 -#: netbox/models/features.py:53 users/models/tokens.py:32 +#: netbox/core/models/config.py:18 netbox/core/models/data.py:266 +#: 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/notifications.py:186 +#: netbox/netbox/models/features.py:53 netbox/users/models/tokens.py:32 msgid "created" msgstr "создан(а)" -#: core/models/config.py:22 +#: netbox/core/models/config.py:22 msgid "comment" msgstr "комментарий" -#: core/models/config.py:29 +#: netbox/core/models/config.py:29 msgid "configuration data" msgstr "конфигурационные данные" -#: core/models/config.py:36 +#: netbox/core/models/config.py:36 msgid "config revision" msgstr "ревизия конфигурации" -#: core/models/config.py:37 +#: netbox/core/models/config.py:37 msgid "config revisions" msgstr "ревизии конфигураций" -#: core/models/config.py:41 +#: netbox/core/models/config.py:41 msgid "Default configuration" msgstr "Конфигурация по умолчанию" -#: core/models/config.py:43 +#: netbox/core/models/config.py:43 msgid "Current configuration" msgstr "Текущая конфигурация" -#: core/models/config.py:44 +#: netbox/core/models/config.py:44 #, python-brace-format msgid "Config revision #{id}" msgstr "Ревизия конфигурации #{id}" -#: core/models/data.py:44 dcim/models/cables.py:43 -#: dcim/models/device_component_templates.py:203 -#: dcim/models/device_component_templates.py:237 -#: dcim/models/device_component_templates.py:272 -#: dcim/models/device_component_templates.py:334 -#: dcim/models/device_component_templates.py:413 -#: dcim/models/device_component_templates.py:512 -#: dcim/models/device_component_templates.py:612 -#: dcim/models/device_components.py:283 dcim/models/device_components.py:312 -#: dcim/models/device_components.py:345 dcim/models/device_components.py:463 -#: dcim/models/device_components.py:605 dcim/models/device_components.py:970 -#: dcim/models/device_components.py:1044 dcim/models/power.py:102 -#: extras/models/customfields.py:78 extras/models/search.py:41 -#: virtualization/models/clusters.py:61 vpn/models/l2vpn.py:32 +#: 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/extras/models/search.py:41 +#: netbox/virtualization/models/clusters.py:61 netbox/vpn/models/l2vpn.py:32 msgid "type" msgstr "тип" -#: core/models/data.py:49 extras/choices.py:37 extras/models/models.py:164 -#: extras/tables/tables.py:656 templates/core/datasource.html:58 -#: templates/core/plugin.html:66 +#: netbox/core/models/data.py:49 netbox/extras/choices.py:37 +#: netbox/extras/models/models.py:164 netbox/extras/tables/tables.py:656 +#: netbox/templates/core/datasource.html:58 +#: netbox/templates/core/plugin.html:66 msgid "URL" msgstr "URL" -#: core/models/data.py:59 dcim/models/device_component_templates.py:418 -#: dcim/models/device_components.py:512 extras/models/models.py:70 -#: extras/models/models.py:301 extras/models/models.py:526 -#: users/models/permissions.py:29 +#: netbox/core/models/data.py:59 +#: netbox/dcim/models/device_component_templates.py:418 +#: netbox/dcim/models/device_components.py:512 +#: 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" msgstr "включен" -#: core/models/data.py:63 +#: netbox/core/models/data.py:63 msgid "ignore rules" msgstr "правила исключения" -#: core/models/data.py:65 +#: netbox/core/models/data.py:65 msgid "Patterns (one per line) matching files to ignore when syncing" msgstr "" "Шаблоны (по одному в строке), соответствующие файлам, которые следует " "игнорировать при синхронизации" -#: core/models/data.py:68 extras/models/models.py:534 +#: netbox/core/models/data.py:68 netbox/extras/models/models.py:534 msgid "parameters" msgstr "параметры" -#: core/models/data.py:73 +#: netbox/core/models/data.py:73 msgid "last synced" msgstr "время последней синхронизации" -#: core/models/data.py:81 +#: netbox/core/models/data.py:81 msgid "data source" msgstr "источник данных" -#: core/models/data.py:82 +#: netbox/core/models/data.py:82 msgid "data sources" msgstr "источники данных" -#: core/models/data.py:122 +#: netbox/core/models/data.py:122 #, python-brace-format msgid "Unknown backend type: {type}" msgstr "Неизвестный тип backend: {type}" -#: core/models/data.py:164 +#: netbox/core/models/data.py:164 msgid "Cannot initiate sync; syncing already in progress." msgstr "Невозможно запустить синхронизацию; синхронизация уже выполняется." -#: core/models/data.py:177 +#: netbox/core/models/data.py:177 msgid "" "There was an error initializing the backend. A dependency needs to be " "installed: " @@ -1902,1222 +2170,1284 @@ msgstr "" "Произошла ошибка при инициализации бэкэнда. Необходимо установить " "зависимость: " -#: core/models/data.py:270 core/models/files.py:31 -#: netbox/models/features.py:59 +#: netbox/core/models/data.py:270 netbox/core/models/files.py:31 +#: netbox/netbox/models/features.py:59 msgid "last updated" msgstr "последнее обновление" -#: core/models/data.py:280 dcim/models/cables.py:444 +#: netbox/core/models/data.py:280 netbox/dcim/models/cables.py:444 msgid "path" msgstr "путь" -#: core/models/data.py:283 +#: netbox/core/models/data.py:283 msgid "File path relative to the data source's root" msgstr "Путь к файлу относительно корня источника данных" -#: core/models/data.py:287 ipam/models/ip.py:503 +#: netbox/core/models/data.py:287 netbox/ipam/models/ip.py:503 msgid "size" msgstr "размер" -#: core/models/data.py:290 +#: netbox/core/models/data.py:290 msgid "hash" msgstr "хэш" -#: core/models/data.py:294 +#: netbox/core/models/data.py:294 msgid "Length must be 64 hexadecimal characters." msgstr "Длина должна быть 64 шестнадцатеричных символа." -#: core/models/data.py:296 +#: netbox/core/models/data.py:296 msgid "SHA256 hash of the file data" msgstr "SHA256 хэш данных файла" -#: core/models/data.py:313 +#: netbox/core/models/data.py:313 msgid "data file" msgstr "файл данных" -#: core/models/data.py:314 +#: netbox/core/models/data.py:314 msgid "data files" msgstr "файлы данных" -#: core/models/data.py:401 +#: netbox/core/models/data.py:401 msgid "auto sync record" msgstr "автоматическая синхронизация записи" -#: core/models/data.py:402 +#: netbox/core/models/data.py:402 msgid "auto sync records" msgstr "автоматическая синхронизация записей" -#: core/models/files.py:37 +#: netbox/core/models/files.py:37 msgid "file root" msgstr "корень файла" -#: core/models/files.py:42 +#: netbox/core/models/files.py:42 msgid "file path" msgstr "путь к файлу" -#: core/models/files.py:44 +#: netbox/core/models/files.py:44 msgid "File path relative to the designated root path" msgstr "Путь к файлу относительно указанного корневого пути" -#: core/models/files.py:61 +#: netbox/core/models/files.py:61 msgid "managed file" msgstr "Настраиваемый файл" -#: core/models/files.py:62 +#: netbox/core/models/files.py:62 msgid "managed files" msgstr "Настраиваемые файлы" -#: core/models/jobs.py:53 +#: netbox/core/models/jobs.py:54 msgid "scheduled" msgstr "по расписанию" -#: core/models/jobs.py:58 +#: netbox/core/models/jobs.py:59 msgid "interval" msgstr "интервал" -#: core/models/jobs.py:64 +#: netbox/core/models/jobs.py:65 msgid "Recurrence interval (in minutes)" msgstr "Интервал повторения (в минутах)" -#: core/models/jobs.py:67 +#: netbox/core/models/jobs.py:68 msgid "started" msgstr "начало" -#: core/models/jobs.py:72 +#: netbox/core/models/jobs.py:73 msgid "completed" msgstr "завершено" -#: core/models/jobs.py:90 extras/models/models.py:101 -#: extras/models/staging.py:87 +#: netbox/core/models/jobs.py:91 netbox/extras/models/models.py:101 +#: netbox/extras/models/staging.py:87 msgid "data" msgstr "данные" -#: core/models/jobs.py:95 +#: netbox/core/models/jobs.py:96 msgid "error" msgstr "ошибка" -#: core/models/jobs.py:100 +#: netbox/core/models/jobs.py:101 msgid "job ID" msgstr "идентификатор задачи" -#: core/models/jobs.py:111 +#: netbox/core/models/jobs.py:112 msgid "job" msgstr "задача" -#: core/models/jobs.py:112 +#: netbox/core/models/jobs.py:113 msgid "jobs" msgstr " задачи" -#: core/models/jobs.py:135 +#: netbox/core/models/jobs.py:136 #, python-brace-format msgid "Jobs cannot be assigned to this object type ({type})." msgstr "Нельзя присвоить задачи этому типу объектов ({type})." -#: core/models/jobs.py:185 +#: netbox/core/models/jobs.py:190 #, python-brace-format msgid "Invalid status for job termination. Choices are: {choices}" msgstr "" "Неверный статус для завершения задачи. Возможны следующие варианты: " "{choices}" -#: core/models/jobs.py:216 +#: netbox/core/models/jobs.py:221 msgid "" "enqueue() cannot be called with values for both schedule_at and immediate." msgstr "Невозможно вызвать enqueue() со значениями schedule_at и immediate." -#: core/signals.py:126 +#: netbox/core/signals.py:126 #, python-brace-format msgid "Deletion is prevented by a protection rule: {message}" msgstr "Удаление предотвращается правилом защиты: {message}" -#: core/tables/change_logging.py:25 templates/account/profile.html:19 -#: templates/users/user.html:21 +#: netbox/core/tables/change_logging.py:25 +#: netbox/templates/account/profile.html:19 +#: netbox/templates/users/user.html:21 msgid "Full Name" msgstr "Полное имя" -#: core/tables/change_logging.py:37 core/tables/jobs.py:21 -#: extras/choices.py:41 extras/tables/tables.py:279 -#: extras/tables/tables.py:297 extras/tables/tables.py:329 -#: extras/tables/tables.py:409 extras/tables/tables.py:470 -#: extras/tables/tables.py:576 extras/tables/tables.py:616 -#: extras/tables/tables.py:653 netbox/tables/tables.py:244 -#: templates/core/objectchange.html:58 templates/extras/eventrule.html:78 -#: templates/extras/journalentry.html:18 tenancy/tables/contacts.py:93 -#: vpn/tables/l2vpn.py:64 +#: netbox/core/tables/change_logging.py:37 netbox/core/tables/jobs.py:21 +#: netbox/extras/choices.py:41 netbox/extras/tables/tables.py:279 +#: 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/templates/core/objectchange.html:58 +#: netbox/templates/extras/eventrule.html:78 +#: netbox/templates/extras/journalentry.html:18 +#: netbox/tenancy/tables/contacts.py:93 netbox/vpn/tables/l2vpn.py:64 msgid "Object" msgstr "Объект" -#: core/tables/change_logging.py:42 templates/core/objectchange.html:68 +#: netbox/core/tables/change_logging.py:42 +#: netbox/templates/core/objectchange.html:68 msgid "Request ID" msgstr "Идентификатор запроса" -#: core/tables/config.py:21 users/forms/filtersets.py:44 users/tables.py:39 +#: netbox/core/tables/config.py:21 netbox/users/forms/filtersets.py:44 +#: netbox/users/tables.py:39 msgid "Is Active" msgstr "Активен" -#: core/tables/data.py:50 templates/core/datafile.html:31 +#: netbox/core/tables/data.py:50 netbox/templates/core/datafile.html:31 msgid "Path" msgstr "Путь" -#: core/tables/data.py:54 templates/extras/inc/result_pending.html:7 +#: netbox/core/tables/data.py:54 +#: netbox/templates/extras/inc/result_pending.html:7 msgid "Last updated" msgstr "Последнее обновление" -#: core/tables/jobs.py:10 core/tables/tasks.py:76 -#: dcim/tables/devicetypes.py:164 extras/tables/tables.py:216 -#: extras/tables/tables.py:460 netbox/tables/tables.py:189 -#: templates/dcim/virtualchassis_edit.html:52 utilities/forms/forms.py:73 -#: wireless/tables/wirelesslink.py:17 +#: 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/templates/dcim/virtualchassis_edit.html:52 +#: netbox/utilities/forms/forms.py:73 +#: netbox/wireless/tables/wirelesslink.py:17 msgid "ID" msgstr "ID" -#: core/tables/jobs.py:35 +#: netbox/core/tables/jobs.py:35 msgid "Interval" msgstr "Интервал" -#: core/tables/plugins.py:14 templates/vpn/ipsecprofile.html:44 -#: vpn/forms/bulk_edit.py:141 vpn/forms/bulk_import.py:172 -#: vpn/tables/crypto.py:61 +#: netbox/core/tables/plugins.py:14 netbox/templates/vpn/ipsecprofile.html:44 +#: netbox/vpn/forms/bulk_edit.py:141 netbox/vpn/forms/bulk_import.py:172 +#: netbox/vpn/tables/crypto.py:61 msgid "Version" msgstr "Версия" -#: core/tables/plugins.py:19 templates/core/datafile.html:38 +#: netbox/core/tables/plugins.py:19 netbox/templates/core/datafile.html:38 msgid "Last Updated" msgstr "Последнее обновление" -#: core/tables/plugins.py:23 +#: netbox/core/tables/plugins.py:23 msgid "Minimum NetBox Version" msgstr "Минимальная версия NetBox" -#: core/tables/plugins.py:27 +#: netbox/core/tables/plugins.py:27 msgid "Maximum NetBox Version" msgstr "Максимальная версия NetBox" -#: core/tables/plugins.py:31 core/tables/plugins.py:74 +#: netbox/core/tables/plugins.py:31 netbox/core/tables/plugins.py:74 msgid "No plugin data found" msgstr "Данные плагина не найдены" -#: core/tables/plugins.py:48 templates/core/plugin.html:62 +#: netbox/core/tables/plugins.py:48 netbox/templates/core/plugin.html:62 msgid "Author" msgstr "Автор" -#: core/tables/plugins.py:54 +#: netbox/core/tables/plugins.py:54 msgid "Installed" msgstr "Установлен" -#: core/tables/plugins.py:57 templates/core/plugin.html:84 +#: netbox/core/tables/plugins.py:57 netbox/templates/core/plugin.html:84 msgid "Certified" msgstr "Сертифицирован" -#: core/tables/plugins.py:60 +#: netbox/core/tables/plugins.py:60 msgid "Published" msgstr "Опубликовано" -#: core/tables/plugins.py:66 +#: netbox/core/tables/plugins.py:66 msgid "Installed Version" msgstr "Установленная версия" -#: core/tables/plugins.py:70 +#: netbox/core/tables/plugins.py:70 msgid "Latest Version" msgstr "Последняя версия" -#: core/tables/tasks.py:18 +#: netbox/core/tables/tasks.py:18 msgid "Oldest Task" msgstr "Самая старая задача" -#: core/tables/tasks.py:42 templates/core/rq_worker_list.html:39 +#: netbox/core/tables/tasks.py:42 netbox/templates/core/rq_worker_list.html:39 msgid "Workers" msgstr "Рабочие процессы" -#: core/tables/tasks.py:46 vpn/tables/tunnels.py:88 +#: netbox/core/tables/tasks.py:46 netbox/vpn/tables/tunnels.py:88 msgid "Host" msgstr "Хост" -#: core/tables/tasks.py:50 ipam/forms/filtersets.py:535 +#: netbox/core/tables/tasks.py:50 netbox/ipam/forms/filtersets.py:535 msgid "Port" msgstr "Порт" -#: core/tables/tasks.py:54 +#: netbox/core/tables/tasks.py:54 msgid "DB" msgstr "БАЗА ДАННЫХ" -#: core/tables/tasks.py:58 +#: netbox/core/tables/tasks.py:58 msgid "Scheduler PID" msgstr "PID планировщика" -#: core/tables/tasks.py:62 +#: netbox/core/tables/tasks.py:62 msgid "No queues found" msgstr "Очереди не найдены" -#: core/tables/tasks.py:82 +#: netbox/core/tables/tasks.py:82 msgid "Enqueued" msgstr "В очереди" -#: core/tables/tasks.py:85 +#: netbox/core/tables/tasks.py:85 msgid "Ended" msgstr "Закончено" -#: core/tables/tasks.py:93 templates/core/rq_task.html:85 +#: netbox/core/tables/tasks.py:93 netbox/templates/core/rq_task.html:85 msgid "Callable" msgstr "Вызываемый" -#: core/tables/tasks.py:97 +#: netbox/core/tables/tasks.py:97 msgid "No tasks found" msgstr "Задач не найдено" -#: core/tables/tasks.py:118 templates/core/rq_worker.html:47 +#: netbox/core/tables/tasks.py:118 netbox/templates/core/rq_worker.html:47 msgid "State" msgstr "Состояние" -#: core/tables/tasks.py:121 templates/core/rq_worker.html:51 +#: netbox/core/tables/tasks.py:121 netbox/templates/core/rq_worker.html:51 msgid "Birth" msgstr "Рождение" -#: core/tables/tasks.py:124 templates/core/rq_worker.html:59 +#: netbox/core/tables/tasks.py:124 netbox/templates/core/rq_worker.html:59 msgid "PID" msgstr "ПІД" -#: core/tables/tasks.py:128 +#: netbox/core/tables/tasks.py:128 msgid "No workers found" msgstr "Рабочие процессы не найдены" -#: core/views.py:90 +#: netbox/core/views.py:90 #, python-brace-format msgid "Queued job #{id} to sync {datasource}" msgstr "Задача #{id} для синхронизации {datasource} добавлена в очередь" -#: core/views.py:319 +#: netbox/core/views.py:319 #, python-brace-format msgid "Restored configuration revision #{id}" msgstr "Ревизия конфигурации #{id} восстановлена" -#: core/views.py:412 core/views.py:455 core/views.py:531 +#: 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 "Задача {job_id} не найдена" -#: core/views.py:463 +#: netbox/core/views.py:463 #, python-brace-format msgid "Job {id} has been deleted." msgstr "Задача {id} была удалена." -#: core/views.py:465 +#: netbox/core/views.py:465 #, python-brace-format msgid "Error deleting job {id}: {error}" msgstr "Ошибка при удалении задачи {id}: {error}" -#: core/views.py:478 core/views.py:496 +#: netbox/core/views.py:478 netbox/core/views.py:496 #, python-brace-format msgid "Job {id} not found." msgstr "Задача {id} не найдена." -#: core/views.py:484 +#: netbox/core/views.py:484 #, python-brace-format msgid "Job {id} has been re-enqueued." msgstr "вЗадача {id} была повторно добавлена в очередь." -#: core/views.py:519 +#: netbox/core/views.py:519 #, python-brace-format msgid "Job {id} has been enqueued." msgstr "Задача {id} добавлена в очередь." -#: core/views.py:538 +#: netbox/core/views.py:538 #, python-brace-format msgid "Job {id} has been stopped." msgstr "Задача {id} остановлена." -#: core/views.py:540 +#: netbox/core/views.py:540 #, python-brace-format msgid "Failed to stop job {id}" msgstr "Не удалось остановить задачу {id}" -#: core/views.py:678 +#: netbox/core/views.py:674 msgid "Plugins catalog could not be loaded" msgstr "Не удалось загрузить каталог плагинов" -#: core/views.py:712 +#: netbox/core/views.py:708 #, python-brace-format msgid "Plugin {name} not found" msgstr "Плагин {name} не найден" -#: dcim/api/serializers_/devices.py:49 dcim/api/serializers_/devicetypes.py:25 +#: netbox/dcim/api/serializers_/devices.py:49 +#: netbox/dcim/api/serializers_/devicetypes.py:25 msgid "Position (U)" msgstr "Позиция (U)" -#: dcim/api/serializers_/racks.py:112 templates/dcim/rack.html:28 +#: netbox/dcim/api/serializers_/racks.py:112 +#: netbox/templates/dcim/rack.html:28 msgid "Facility ID" msgstr "Идентификатор объекта" -#: dcim/choices.py:21 virtualization/choices.py:21 +#: netbox/dcim/choices.py:21 netbox/virtualization/choices.py:21 msgid "Staging" msgstr "Подготовка к развертыванию" -#: dcim/choices.py:23 dcim/choices.py:189 dcim/choices.py:240 -#: dcim/choices.py:1531 virtualization/choices.py:23 -#: virtualization/choices.py:48 +#: 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 msgid "Decommissioning" msgstr "Вывод из эксплуатации" -#: dcim/choices.py:24 +#: netbox/dcim/choices.py:24 msgid "Retired" msgstr " Вывод из эксплуатации" -#: dcim/choices.py:65 +#: netbox/dcim/choices.py:65 msgid "2-post frame" msgstr "2-стоечная рама" -#: dcim/choices.py:66 +#: netbox/dcim/choices.py:66 msgid "4-post frame" msgstr "4-стоечная рама" -#: dcim/choices.py:67 +#: netbox/dcim/choices.py:67 msgid "4-post cabinet" msgstr "4-стоечный шкаф" -#: dcim/choices.py:68 +#: netbox/dcim/choices.py:68 msgid "Wall-mounted frame" msgstr "Настенная рама" -#: dcim/choices.py:69 +#: netbox/dcim/choices.py:69 msgid "Wall-mounted frame (vertical)" msgstr "Настенная рама (вертикальная)" -#: dcim/choices.py:70 +#: netbox/dcim/choices.py:70 msgid "Wall-mounted cabinet" msgstr "Настенный шкаф" -#: dcim/choices.py:71 +#: netbox/dcim/choices.py:71 msgid "Wall-mounted cabinet (vertical)" msgstr "Настенный шкаф (вертикальный)" -#: dcim/choices.py:83 dcim/choices.py:84 dcim/choices.py:85 dcim/choices.py:86 +#: netbox/dcim/choices.py:83 netbox/dcim/choices.py:84 +#: netbox/dcim/choices.py:85 netbox/dcim/choices.py:86 #, python-brace-format msgid "{n} inches" msgstr "{n} дюймов" -#: dcim/choices.py:100 ipam/choices.py:32 ipam/choices.py:50 -#: ipam/choices.py:70 ipam/choices.py:155 wireless/choices.py:26 +#: netbox/dcim/choices.py:100 netbox/ipam/choices.py:32 +#: netbox/ipam/choices.py:50 netbox/ipam/choices.py:70 +#: netbox/ipam/choices.py:155 netbox/wireless/choices.py:26 msgid "Reserved" msgstr "Зарезервировано" -#: dcim/choices.py:101 templates/dcim/device.html:259 +#: netbox/dcim/choices.py:101 netbox/templates/dcim/device.html:259 msgid "Available" msgstr "Доступно" -#: dcim/choices.py:104 ipam/choices.py:33 ipam/choices.py:51 -#: ipam/choices.py:71 ipam/choices.py:156 wireless/choices.py:28 +#: netbox/dcim/choices.py:104 netbox/ipam/choices.py:33 +#: netbox/ipam/choices.py:51 netbox/ipam/choices.py:71 +#: netbox/ipam/choices.py:156 netbox/wireless/choices.py:28 msgid "Deprecated" msgstr "Выведенный(-ая) из использования" -#: dcim/choices.py:114 templates/dcim/inc/panels/racktype_dimensions.html:41 +#: netbox/dcim/choices.py:114 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:41 msgid "Millimeters" msgstr "Миллиметры" -#: dcim/choices.py:115 dcim/choices.py:1553 +#: netbox/dcim/choices.py:115 netbox/dcim/choices.py:1555 msgid "Inches" msgstr "Дюймы" -#: dcim/choices.py:136 dcim/choices.py:207 dcim/choices.py:254 +#: netbox/dcim/choices.py:136 netbox/dcim/choices.py:207 +#: netbox/dcim/choices.py:254 msgid "Front to rear" msgstr "Спереди назад" -#: dcim/choices.py:137 dcim/choices.py:208 dcim/choices.py:255 +#: netbox/dcim/choices.py:137 netbox/dcim/choices.py:208 +#: netbox/dcim/choices.py:255 msgid "Rear to front" msgstr "Сзади вперед" -#: dcim/choices.py:151 dcim/forms/bulk_edit.py:68 dcim/forms/bulk_edit.py:87 -#: dcim/forms/bulk_edit.py:173 dcim/forms/bulk_edit.py:1405 -#: dcim/forms/bulk_import.py:60 dcim/forms/bulk_import.py:74 -#: dcim/forms/bulk_import.py:137 dcim/forms/bulk_import.py:566 -#: dcim/forms/bulk_import.py:833 dcim/forms/bulk_import.py:1088 -#: dcim/forms/filtersets.py:234 dcim/forms/model_forms.py:74 -#: dcim/forms/model_forms.py:93 dcim/forms/model_forms.py:170 -#: dcim/forms/model_forms.py:1062 dcim/forms/model_forms.py:1502 -#: dcim/forms/object_import.py:176 dcim/tables/devices.py:656 -#: dcim/tables/devices.py:869 dcim/tables/devices.py:954 -#: extras/tables/tables.py:223 ipam/tables/fhrp.py:59 ipam/tables/ip.py:378 -#: ipam/tables/services.py:44 templates/dcim/interface.html:102 -#: templates/dcim/interface.html:309 templates/dcim/location.html:41 -#: templates/dcim/region.html:37 templates/dcim/sitegroup.html:37 -#: templates/ipam/service.html:28 templates/tenancy/contactgroup.html:29 -#: templates/tenancy/tenantgroup.html:37 -#: templates/virtualization/vminterface.html:39 -#: templates/wireless/wirelesslangroup.html:37 tenancy/forms/bulk_edit.py:27 -#: tenancy/forms/bulk_edit.py:61 tenancy/forms/bulk_import.py:24 -#: tenancy/forms/bulk_import.py:58 tenancy/forms/model_forms.py:25 -#: tenancy/forms/model_forms.py:68 virtualization/forms/bulk_edit.py:207 -#: virtualization/forms/bulk_import.py:151 -#: virtualization/tables/virtualmachines.py:162 wireless/forms/bulk_edit.py:24 -#: wireless/forms/bulk_import.py:21 wireless/forms/model_forms.py:21 +#: 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/templates/dcim/location.html:41 netbox/templates/dcim/region.html:37 +#: netbox/templates/dcim/sitegroup.html:37 +#: netbox/templates/ipam/service.html:28 +#: netbox/templates/tenancy/contactgroup.html:29 +#: netbox/templates/tenancy/tenantgroup.html:37 +#: netbox/templates/virtualization/vminterface.html:39 +#: netbox/templates/wireless/wirelesslangroup.html:37 +#: netbox/tenancy/forms/bulk_edit.py:27 netbox/tenancy/forms/bulk_edit.py:61 +#: netbox/tenancy/forms/bulk_import.py:24 +#: netbox/tenancy/forms/bulk_import.py:58 +#: netbox/tenancy/forms/model_forms.py:25 +#: netbox/tenancy/forms/model_forms.py:68 +#: netbox/virtualization/forms/bulk_edit.py:207 +#: netbox/virtualization/forms/bulk_import.py:151 +#: netbox/virtualization/tables/virtualmachines.py:162 +#: netbox/wireless/forms/bulk_edit.py:24 +#: netbox/wireless/forms/bulk_import.py:21 +#: netbox/wireless/forms/model_forms.py:21 msgid "Parent" msgstr "Родитель" -#: dcim/choices.py:152 +#: netbox/dcim/choices.py:152 msgid "Child" msgstr "Потомок" -#: dcim/choices.py:166 templates/dcim/device.html:340 -#: templates/dcim/rack.html:133 templates/dcim/rack_elevation_list.html:20 -#: templates/dcim/rackreservation.html:76 +#: netbox/dcim/choices.py:166 netbox/templates/dcim/device.html:340 +#: netbox/templates/dcim/rack.html:133 +#: netbox/templates/dcim/rack_elevation_list.html:20 +#: netbox/templates/dcim/rackreservation.html:76 msgid "Front" msgstr "Вид спереди" -#: dcim/choices.py:167 templates/dcim/device.html:346 -#: templates/dcim/rack.html:139 templates/dcim/rack_elevation_list.html:21 -#: templates/dcim/rackreservation.html:82 +#: netbox/dcim/choices.py:167 netbox/templates/dcim/device.html:346 +#: netbox/templates/dcim/rack.html:139 +#: netbox/templates/dcim/rack_elevation_list.html:21 +#: netbox/templates/dcim/rackreservation.html:82 msgid "Rear" msgstr "Вид сзади" -#: dcim/choices.py:186 dcim/choices.py:238 virtualization/choices.py:46 +#: netbox/dcim/choices.py:186 netbox/dcim/choices.py:238 +#: netbox/virtualization/choices.py:46 msgid "Staged" msgstr "Подготовлен" -#: dcim/choices.py:188 +#: netbox/dcim/choices.py:188 msgid "Inventory" msgstr "Инвентарь" -#: dcim/choices.py:209 dcim/choices.py:256 +#: netbox/dcim/choices.py:209 netbox/dcim/choices.py:256 msgid "Left to right" msgstr "Слева направо" -#: dcim/choices.py:210 dcim/choices.py:257 +#: netbox/dcim/choices.py:210 netbox/dcim/choices.py:257 msgid "Right to left" msgstr "Справа налево" -#: dcim/choices.py:211 dcim/choices.py:258 +#: netbox/dcim/choices.py:211 netbox/dcim/choices.py:258 msgid "Side to rear" msgstr "Бок назад" -#: dcim/choices.py:212 +#: netbox/dcim/choices.py:212 msgid "Rear to side" msgstr "Сзади в сторону" -#: dcim/choices.py:213 +#: netbox/dcim/choices.py:213 msgid "Bottom to top" msgstr "Снизу вверх" -#: dcim/choices.py:214 +#: netbox/dcim/choices.py:214 msgid "Top to bottom" msgstr "Сверху вниз" -#: dcim/choices.py:215 dcim/choices.py:259 dcim/choices.py:1303 +#: netbox/dcim/choices.py:215 netbox/dcim/choices.py:259 +#: netbox/dcim/choices.py:1305 msgid "Passive" msgstr "Пассивный" -#: dcim/choices.py:216 +#: netbox/dcim/choices.py:216 msgid "Mixed" msgstr "Смешанный" -#: dcim/choices.py:484 dcim/choices.py:733 +#: netbox/dcim/choices.py:484 netbox/dcim/choices.py:733 msgid "NEMA (Non-locking)" msgstr "NEMA (не блокирующий)" -#: dcim/choices.py:506 dcim/choices.py:755 +#: netbox/dcim/choices.py:506 netbox/dcim/choices.py:755 msgid "NEMA (Locking)" msgstr "NEMA (блокирующий)" -#: dcim/choices.py:530 dcim/choices.py:779 +#: netbox/dcim/choices.py:530 netbox/dcim/choices.py:779 msgid "California Style" msgstr "Калифорнийский стиль" -#: dcim/choices.py:538 +#: netbox/dcim/choices.py:538 msgid "International/ITA" msgstr "ITA/Международный" -#: dcim/choices.py:573 dcim/choices.py:814 +#: netbox/dcim/choices.py:573 netbox/dcim/choices.py:814 msgid "Proprietary" msgstr "Проприетарный" -#: dcim/choices.py:581 dcim/choices.py:824 dcim/choices.py:1219 -#: dcim/choices.py:1221 dcim/choices.py:1447 dcim/choices.py:1449 -#: netbox/navigation/menu.py:200 +#: 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 msgid "Other" msgstr "Другой" -#: dcim/choices.py:787 +#: netbox/dcim/choices.py:787 msgid "ITA/International" msgstr "ITA/Международный" -#: dcim/choices.py:854 +#: netbox/dcim/choices.py:854 msgid "Physical" msgstr "Физический" -#: dcim/choices.py:855 dcim/choices.py:1023 +#: netbox/dcim/choices.py:855 netbox/dcim/choices.py:1024 msgid "Virtual" msgstr "Виртуальный" -#: dcim/choices.py:856 dcim/choices.py:1097 dcim/forms/bulk_edit.py:1515 -#: dcim/forms/filtersets.py:1330 dcim/forms/model_forms.py:988 -#: dcim/forms/model_forms.py:1397 netbox/navigation/menu.py:140 -#: netbox/navigation/menu.py:144 templates/dcim/interface.html:210 +#: 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 msgid "Wireless" msgstr "Беспроводной" -#: dcim/choices.py:1021 +#: netbox/dcim/choices.py:1022 msgid "Virtual interfaces" msgstr "Виртуальные интерфейсы" -#: dcim/choices.py:1024 dcim/forms/bulk_edit.py:1410 -#: dcim/forms/bulk_import.py:840 dcim/forms/model_forms.py:974 -#: dcim/tables/devices.py:660 templates/dcim/interface.html:106 -#: templates/virtualization/vminterface.html:43 -#: virtualization/forms/bulk_edit.py:212 -#: virtualization/forms/bulk_import.py:158 -#: virtualization/tables/virtualmachines.py:166 +#: 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/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 msgid "Bridge" msgstr "Мост" -#: dcim/choices.py:1025 +#: netbox/dcim/choices.py:1026 msgid "Link Aggregation Group (LAG)" msgstr "Группа агрегации линков (LAG)" -#: dcim/choices.py:1029 +#: netbox/dcim/choices.py:1030 msgid "Ethernet (fixed)" msgstr "Ethernet (фиксированный)" -#: dcim/choices.py:1044 +#: netbox/dcim/choices.py:1046 msgid "Ethernet (modular)" msgstr "Ethernet (модульный)" -#: dcim/choices.py:1081 +#: netbox/dcim/choices.py:1083 msgid "Ethernet (backplane)" msgstr "Ethernet (объединительная плата)" -#: dcim/choices.py:1113 +#: netbox/dcim/choices.py:1115 msgid "Cellular" msgstr "Сотовая связь" -#: dcim/choices.py:1165 dcim/forms/filtersets.py:383 -#: dcim/forms/filtersets.py:809 dcim/forms/filtersets.py:963 -#: dcim/forms/filtersets.py:1542 templates/dcim/inventoryitem.html:52 -#: templates/dcim/virtualchassis_edit.html:54 +#: 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/templates/dcim/virtualchassis_edit.html:54 msgid "Serial" msgstr "Серийный" -#: dcim/choices.py:1180 +#: netbox/dcim/choices.py:1182 msgid "Coaxial" msgstr "Коаксиальный" -#: dcim/choices.py:1200 +#: netbox/dcim/choices.py:1202 msgid "Stacking" msgstr "Стекирование" -#: dcim/choices.py:1250 +#: netbox/dcim/choices.py:1252 msgid "Half" msgstr "Полу" -#: dcim/choices.py:1251 +#: netbox/dcim/choices.py:1253 msgid "Full" msgstr "Полный" -#: dcim/choices.py:1252 netbox/preferences.py:31 wireless/choices.py:480 +#: netbox/dcim/choices.py:1254 netbox/netbox/preferences.py:31 +#: netbox/wireless/choices.py:480 msgid "Auto" msgstr "Авто" -#: dcim/choices.py:1263 +#: netbox/dcim/choices.py:1265 msgid "Access" msgstr "Доступ" -#: dcim/choices.py:1264 ipam/tables/vlans.py:172 ipam/tables/vlans.py:217 -#: templates/dcim/inc/interface_vlans_table.html:7 +#: 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 "Тегированный" -#: dcim/choices.py:1265 +#: netbox/dcim/choices.py:1267 msgid "Tagged (All)" msgstr "Тегированный (все)" -#: dcim/choices.py:1294 +#: netbox/dcim/choices.py:1296 msgid "IEEE Standard" msgstr "Стандарт IEEE" -#: dcim/choices.py:1305 +#: netbox/dcim/choices.py:1307 msgid "Passive 24V (2-pair)" msgstr "Пассивный режим 24 В (2 пары)" -#: dcim/choices.py:1306 +#: netbox/dcim/choices.py:1308 msgid "Passive 24V (4-pair)" msgstr "Пассивное напряжение 24 В (4 пары)" -#: dcim/choices.py:1307 +#: netbox/dcim/choices.py:1309 msgid "Passive 48V (2-pair)" msgstr "Пассивное напряжение 48 В (2 пары)" -#: dcim/choices.py:1308 +#: netbox/dcim/choices.py:1310 msgid "Passive 48V (4-pair)" msgstr "Пассивное напряжение 48 В (4 пары)" -#: dcim/choices.py:1378 dcim/choices.py:1488 +#: netbox/dcim/choices.py:1380 netbox/dcim/choices.py:1490 msgid "Copper" msgstr "Медь" -#: dcim/choices.py:1401 +#: netbox/dcim/choices.py:1403 msgid "Fiber Optic" msgstr "Оптоволоконное" -#: dcim/choices.py:1434 dcim/choices.py:1517 +#: netbox/dcim/choices.py:1436 netbox/dcim/choices.py:1519 msgid "USB" msgstr "USB" -#: dcim/choices.py:1504 +#: netbox/dcim/choices.py:1506 msgid "Fiber" msgstr "Волокно" -#: dcim/choices.py:1529 dcim/forms/filtersets.py:1227 +#: netbox/dcim/choices.py:1531 netbox/dcim/forms/filtersets.py:1227 msgid "Connected" msgstr "Подключено" -#: dcim/choices.py:1548 wireless/choices.py:497 +#: netbox/dcim/choices.py:1550 netbox/wireless/choices.py:497 msgid "Kilometers" msgstr "Километры" -#: dcim/choices.py:1549 templates/dcim/cable_trace.html:65 -#: wireless/choices.py:498 +#: netbox/dcim/choices.py:1551 netbox/templates/dcim/cable_trace.html:65 +#: netbox/wireless/choices.py:498 msgid "Meters" msgstr "Метры" -#: dcim/choices.py:1550 +#: netbox/dcim/choices.py:1552 msgid "Centimeters" msgstr "Сантиметры" -#: dcim/choices.py:1551 wireless/choices.py:499 +#: netbox/dcim/choices.py:1553 netbox/wireless/choices.py:499 msgid "Miles" msgstr "Мили" -#: dcim/choices.py:1552 templates/dcim/cable_trace.html:66 -#: wireless/choices.py:500 +#: netbox/dcim/choices.py:1554 netbox/templates/dcim/cable_trace.html:66 +#: netbox/wireless/choices.py:500 msgid "Feet" msgstr "Футы" -#: dcim/choices.py:1568 templates/dcim/device.html:327 -#: templates/dcim/rack.html:107 +#: netbox/dcim/choices.py:1570 netbox/templates/dcim/device.html:327 +#: netbox/templates/dcim/rack.html:107 msgid "Kilograms" msgstr "Килограммы" -#: dcim/choices.py:1569 +#: netbox/dcim/choices.py:1571 msgid "Grams" msgstr "Граммы" -#: dcim/choices.py:1570 templates/dcim/device.html:328 -#: templates/dcim/rack.html:108 +#: netbox/dcim/choices.py:1572 netbox/templates/dcim/device.html:328 +#: netbox/templates/dcim/rack.html:108 msgid "Pounds" msgstr "Фунты" -#: dcim/choices.py:1571 +#: netbox/dcim/choices.py:1573 msgid "Ounces" msgstr "Унции" -#: dcim/choices.py:1618 +#: netbox/dcim/choices.py:1620 msgid "Redundant" msgstr "Резервный" -#: dcim/choices.py:1639 +#: netbox/dcim/choices.py:1641 msgid "Single phase" msgstr "Однофазный" -#: dcim/choices.py:1640 +#: netbox/dcim/choices.py:1642 msgid "Three-phase" msgstr "Трехфазный" -#: dcim/fields.py:45 +#: netbox/dcim/fields.py:45 #, python-brace-format msgid "Invalid MAC address format: {value}" msgstr "Неверный формат MAC-адреса: {value}" -#: dcim/fields.py:71 +#: netbox/dcim/fields.py:71 #, python-brace-format msgid "Invalid WWN format: {value}" msgstr "Неверный формат WWN: {value}" -#: dcim/filtersets.py:86 +#: netbox/dcim/filtersets.py:86 msgid "Parent region (ID)" msgstr "Родительский регион (ID)" -#: dcim/filtersets.py:92 +#: netbox/dcim/filtersets.py:92 msgid "Parent region (slug)" msgstr "Регион родителя (подстрока)" -#: dcim/filtersets.py:116 +#: netbox/dcim/filtersets.py:116 msgid "Parent site group (ID)" msgstr "Родительская группа сайтов (ID)" -#: dcim/filtersets.py:122 +#: netbox/dcim/filtersets.py:122 msgid "Parent site group (slug)" msgstr "Группа сайтов родителя (подстрока)" -#: dcim/filtersets.py:164 extras/filtersets.py:364 ipam/filtersets.py:841 -#: ipam/filtersets.py:993 +#: netbox/dcim/filtersets.py:164 netbox/extras/filtersets.py:364 +#: netbox/ipam/filtersets.py:843 netbox/ipam/filtersets.py:995 msgid "Group (ID)" msgstr "Группа (ID)" -#: dcim/filtersets.py:170 +#: netbox/dcim/filtersets.py:170 msgid "Group (slug)" msgstr "Группа (подстрока)" -#: dcim/filtersets.py:176 dcim/filtersets.py:181 +#: netbox/dcim/filtersets.py:176 netbox/dcim/filtersets.py:181 msgid "AS (ID)" msgstr "Автономная система (ID)" -#: dcim/filtersets.py:246 +#: netbox/dcim/filtersets.py:246 msgid "Parent location (ID)" msgstr "Родительская локация (ID)" -#: dcim/filtersets.py:252 +#: netbox/dcim/filtersets.py:252 msgid "Parent location (slug)" msgstr "Локация родителя (подстрока)" -#: dcim/filtersets.py:258 dcim/filtersets.py:369 dcim/filtersets.py:490 -#: dcim/filtersets.py:1057 dcim/filtersets.py:1404 dcim/filtersets.py:2182 +#: 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)" -#: dcim/filtersets.py:265 dcim/filtersets.py:376 dcim/filtersets.py:497 -#: dcim/filtersets.py:1410 extras/filtersets.py:542 +#: 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 "Локация (подстрока)" -#: dcim/filtersets.py:296 dcim/filtersets.py:381 dcim/filtersets.py:539 -#: dcim/filtersets.py:678 dcim/filtersets.py:882 dcim/filtersets.py:933 -#: dcim/filtersets.py:973 dcim/filtersets.py:1306 dcim/filtersets.py:1840 +#: 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 msgid "Manufacturer (ID)" msgstr "Производитель (ID)" -#: dcim/filtersets.py:302 dcim/filtersets.py:387 dcim/filtersets.py:545 -#: dcim/filtersets.py:684 dcim/filtersets.py:888 dcim/filtersets.py:939 -#: dcim/filtersets.py:979 dcim/filtersets.py:1312 dcim/filtersets.py:1846 +#: 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 msgid "Manufacturer (slug)" msgstr "Производитель (подстрока)" -#: dcim/filtersets.py:393 +#: netbox/dcim/filtersets.py:393 msgid "Rack type (slug)" msgstr "Тип стойки (подстрока)" -#: dcim/filtersets.py:397 +#: netbox/dcim/filtersets.py:397 msgid "Rack type (ID)" msgstr "Тип стойки (ID)" -#: dcim/filtersets.py:411 dcim/filtersets.py:892 dcim/filtersets.py:994 -#: dcim/filtersets.py:1850 ipam/filtersets.py:381 ipam/filtersets.py:493 -#: ipam/filtersets.py:1003 virtualization/filtersets.py:210 +#: 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 msgid "Role (ID)" msgstr "Роль (ID)" -#: dcim/filtersets.py:417 dcim/filtersets.py:898 dcim/filtersets.py:1000 -#: dcim/filtersets.py:1856 extras/filtersets.py:558 ipam/filtersets.py:387 -#: ipam/filtersets.py:499 ipam/filtersets.py:1009 -#: virtualization/filtersets.py:216 +#: 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 msgid "Role (slug)" msgstr "Роль (подстрока)" -#: dcim/filtersets.py:447 dcim/filtersets.py:1062 dcim/filtersets.py:1415 -#: dcim/filtersets.py:2244 +#: netbox/dcim/filtersets.py:447 netbox/dcim/filtersets.py:1062 +#: netbox/dcim/filtersets.py:1415 netbox/dcim/filtersets.py:2244 msgid "Rack (ID)" msgstr "Стойка (ID)" -#: dcim/filtersets.py:507 extras/filtersets.py:293 extras/filtersets.py:337 -#: extras/filtersets.py:359 extras/filtersets.py:419 users/filtersets.py:113 -#: users/filtersets.py:180 +#: netbox/dcim/filtersets.py:507 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 "Пользователь (имя)" -#: dcim/filtersets.py:549 +#: netbox/dcim/filtersets.py:549 msgid "Default platform (ID)" msgstr "Платформа по умолчанию (ID)" -#: dcim/filtersets.py:555 +#: netbox/dcim/filtersets.py:555 msgid "Default platform (slug)" msgstr "Платформа по умолчанию (подстрока)" -#: dcim/filtersets.py:558 dcim/forms/filtersets.py:517 +#: netbox/dcim/filtersets.py:558 netbox/dcim/forms/filtersets.py:517 msgid "Has a front image" msgstr "Имеет фронтальное изображение" -#: dcim/filtersets.py:562 dcim/forms/filtersets.py:524 +#: netbox/dcim/filtersets.py:562 netbox/dcim/forms/filtersets.py:524 msgid "Has a rear image" msgstr "Имеет изображение сзади" -#: dcim/filtersets.py:567 dcim/filtersets.py:688 dcim/filtersets.py:1131 -#: dcim/forms/filtersets.py:531 dcim/forms/filtersets.py:627 -#: dcim/forms/filtersets.py:848 +#: 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 msgid "Has console ports" msgstr "Имеет консольные порты" -#: dcim/filtersets.py:571 dcim/filtersets.py:692 dcim/filtersets.py:1135 -#: dcim/forms/filtersets.py:538 dcim/forms/filtersets.py:634 -#: dcim/forms/filtersets.py:855 +#: 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 msgid "Has console server ports" msgstr "Имеет серверные консольные порты" -#: dcim/filtersets.py:575 dcim/filtersets.py:696 dcim/filtersets.py:1139 -#: dcim/forms/filtersets.py:545 dcim/forms/filtersets.py:641 -#: dcim/forms/filtersets.py:862 +#: 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 msgid "Has power ports" msgstr "Имеет порты питания" -#: dcim/filtersets.py:579 dcim/filtersets.py:700 dcim/filtersets.py:1143 -#: dcim/forms/filtersets.py:552 dcim/forms/filtersets.py:648 -#: dcim/forms/filtersets.py:869 +#: 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 msgid "Has power outlets" msgstr "Имеет розетки" -#: dcim/filtersets.py:583 dcim/filtersets.py:704 dcim/filtersets.py:1147 -#: dcim/forms/filtersets.py:559 dcim/forms/filtersets.py:655 -#: dcim/forms/filtersets.py:876 +#: 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 msgid "Has interfaces" msgstr "Имеет интерфейсы" -#: dcim/filtersets.py:587 dcim/filtersets.py:708 dcim/filtersets.py:1151 -#: dcim/forms/filtersets.py:566 dcim/forms/filtersets.py:662 -#: dcim/forms/filtersets.py:883 +#: 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 msgid "Has pass-through ports" msgstr "Имеет сквозные порты" -#: dcim/filtersets.py:591 dcim/filtersets.py:1155 dcim/forms/filtersets.py:580 +#: netbox/dcim/filtersets.py:591 netbox/dcim/filtersets.py:1155 +#: netbox/dcim/forms/filtersets.py:580 msgid "Has module bays" msgstr "Имеет отсеки для модулей" -#: dcim/filtersets.py:595 dcim/filtersets.py:1159 dcim/forms/filtersets.py:573 +#: netbox/dcim/filtersets.py:595 netbox/dcim/filtersets.py:1159 +#: netbox/dcim/forms/filtersets.py:573 msgid "Has device bays" msgstr "Имеет отсеки для устройств" -#: dcim/filtersets.py:599 dcim/forms/filtersets.py:587 +#: netbox/dcim/filtersets.py:599 netbox/dcim/forms/filtersets.py:587 msgid "Has inventory items" msgstr "Имеет инвентарь" -#: dcim/filtersets.py:756 dcim/filtersets.py:989 dcim/filtersets.py:1436 +#: netbox/dcim/filtersets.py:756 netbox/dcim/filtersets.py:989 +#: netbox/dcim/filtersets.py:1436 msgid "Device type (ID)" msgstr "Тип устройства (ID)" -#: dcim/filtersets.py:772 dcim/filtersets.py:1317 +#: netbox/dcim/filtersets.py:772 netbox/dcim/filtersets.py:1317 msgid "Module type (ID)" msgstr "Тип модуля (ID)" -#: dcim/filtersets.py:804 dcim/filtersets.py:1591 +#: netbox/dcim/filtersets.py:804 netbox/dcim/filtersets.py:1591 msgid "Power port (ID)" msgstr "Порт питания (ID)" -#: dcim/filtersets.py:878 dcim/filtersets.py:1836 +#: netbox/dcim/filtersets.py:878 netbox/dcim/filtersets.py:1836 msgid "Parent inventory item (ID)" msgstr "Родительский инвентарь (ID)" -#: dcim/filtersets.py:921 dcim/filtersets.py:947 dcim/filtersets.py:1127 -#: virtualization/filtersets.py:238 +#: netbox/dcim/filtersets.py:921 netbox/dcim/filtersets.py:947 +#: netbox/dcim/filtersets.py:1127 netbox/virtualization/filtersets.py:238 msgid "Config template (ID)" msgstr "Шаблон конфигурации (ID)" -#: dcim/filtersets.py:985 +#: netbox/dcim/filtersets.py:985 msgid "Device type (slug)" msgstr "Тип устройства (подстрока)" -#: dcim/filtersets.py:1005 +#: netbox/dcim/filtersets.py:1005 msgid "Parent Device (ID)" msgstr "Родительское устройство (ID)" -#: dcim/filtersets.py:1009 virtualization/filtersets.py:220 +#: netbox/dcim/filtersets.py:1009 netbox/virtualization/filtersets.py:220 msgid "Platform (ID)" msgstr "Платформа (ID)" -#: dcim/filtersets.py:1015 extras/filtersets.py:569 -#: virtualization/filtersets.py:226 +#: netbox/dcim/filtersets.py:1015 netbox/extras/filtersets.py:569 +#: netbox/virtualization/filtersets.py:226 msgid "Platform (slug)" msgstr "Платформа (подстрока)" -#: dcim/filtersets.py:1051 dcim/filtersets.py:1399 dcim/filtersets.py:1934 -#: dcim/filtersets.py:2176 dcim/filtersets.py:2235 +#: 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 msgid "Site name (slug)" msgstr "Имя сайта (подстрока)" -#: dcim/filtersets.py:1067 +#: netbox/dcim/filtersets.py:1067 msgid "Parent bay (ID)" msgstr "Родительский ребенок (ID)" -#: dcim/filtersets.py:1071 +#: netbox/dcim/filtersets.py:1071 msgid "VM cluster (ID)" msgstr "Кластер виртуальных машин (ID)" -#: dcim/filtersets.py:1077 extras/filtersets.py:591 -#: virtualization/filtersets.py:136 +#: netbox/dcim/filtersets.py:1077 netbox/extras/filtersets.py:591 +#: netbox/virtualization/filtersets.py:136 msgid "Cluster group (slug)" msgstr "Группа кластеров (подстрока)" -#: dcim/filtersets.py:1082 virtualization/filtersets.py:130 +#: netbox/dcim/filtersets.py:1082 netbox/virtualization/filtersets.py:130 msgid "Cluster group (ID)" msgstr "Кластерная группа (ID)" -#: dcim/filtersets.py:1088 +#: netbox/dcim/filtersets.py:1088 msgid "Device model (slug)" msgstr "Модель устройства (подстрока)" -#: dcim/filtersets.py:1099 dcim/forms/bulk_edit.py:516 +#: netbox/dcim/filtersets.py:1099 netbox/dcim/forms/bulk_edit.py:522 msgid "Is full depth" msgstr "Полная глубина" -#: dcim/filtersets.py:1103 dcim/forms/common.py:18 -#: dcim/forms/filtersets.py:818 dcim/forms/filtersets.py:1385 -#: dcim/models/device_components.py:518 virtualization/filtersets.py:230 -#: virtualization/filtersets.py:301 virtualization/forms/filtersets.py:172 -#: virtualization/forms/filtersets.py:223 +#: 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 msgid "MAC address" msgstr "MAC-адрес" -#: dcim/filtersets.py:1110 dcim/filtersets.py:1274 -#: dcim/forms/filtersets.py:827 dcim/forms/filtersets.py:930 -#: virtualization/filtersets.py:234 virtualization/forms/filtersets.py:176 +#: 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 msgid "Has a primary IP" msgstr "Имеет основной IP-адрес" -#: dcim/filtersets.py:1114 +#: netbox/dcim/filtersets.py:1114 msgid "Has an out-of-band IP" msgstr "Имеет внеполосный IP-адрес" -#: dcim/filtersets.py:1119 +#: netbox/dcim/filtersets.py:1119 msgid "Virtual chassis (ID)" msgstr "Виртуальное шасси (ID)" -#: dcim/filtersets.py:1123 +#: netbox/dcim/filtersets.py:1123 msgid "Is a virtual chassis member" msgstr "Является членом виртуального шасси" -#: dcim/filtersets.py:1164 +#: netbox/dcim/filtersets.py:1164 msgid "OOB IP (ID)" msgstr "Сервисный порт (ID)" -#: dcim/filtersets.py:1168 +#: netbox/dcim/filtersets.py:1168 msgid "Has virtual device context" msgstr "Имеет контекст виртуального устройства" -#: dcim/filtersets.py:1257 +#: netbox/dcim/filtersets.py:1257 msgid "VDC (ID)" msgstr "VDC (ID)" -#: dcim/filtersets.py:1262 +#: netbox/dcim/filtersets.py:1262 msgid "Device model" msgstr "модель устройства" -#: dcim/filtersets.py:1267 ipam/filtersets.py:632 vpn/filtersets.py:102 -#: vpn/filtersets.py:401 +#: 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)" -#: dcim/filtersets.py:1323 +#: netbox/dcim/filtersets.py:1323 msgid "Module type (model)" msgstr "Тип модуля (модель)" -#: dcim/filtersets.py:1329 +#: netbox/dcim/filtersets.py:1329 msgid "Module bay (ID)" msgstr "Отсек для модулей (ID)" -#: dcim/filtersets.py:1333 dcim/filtersets.py:1425 ipam/filtersets.py:611 -#: ipam/filtersets.py:851 ipam/filtersets.py:1115 -#: virtualization/filtersets.py:161 vpn/filtersets.py:379 +#: 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 msgid "Device (ID)" msgstr "Устройство (ID)" -#: dcim/filtersets.py:1421 +#: netbox/dcim/filtersets.py:1421 msgid "Rack (name)" msgstr "Стойка (имя)" -#: dcim/filtersets.py:1431 ipam/filtersets.py:606 ipam/filtersets.py:846 -#: ipam/filtersets.py:1121 vpn/filtersets.py:374 +#: 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 "Устройство (имя)" -#: dcim/filtersets.py:1442 +#: netbox/dcim/filtersets.py:1442 msgid "Device type (model)" msgstr "Тип устройства (модель)" -#: dcim/filtersets.py:1447 +#: netbox/dcim/filtersets.py:1447 msgid "Device role (ID)" msgstr "Роль устройства (ID)" -#: dcim/filtersets.py:1453 +#: netbox/dcim/filtersets.py:1453 msgid "Device role (slug)" msgstr "Роль устройства (подстрока)" -#: dcim/filtersets.py:1458 +#: netbox/dcim/filtersets.py:1458 msgid "Virtual Chassis (ID)" msgstr "Виртуальное шасси (ID)" -#: dcim/filtersets.py:1464 dcim/forms/filtersets.py:109 -#: dcim/tables/devices.py:206 netbox/navigation/menu.py:79 -#: templates/dcim/device.html:120 templates/dcim/device_edit.html:93 -#: templates/dcim/virtualchassis.html:20 -#: templates/dcim/virtualchassis_add.html:8 -#: templates/dcim/virtualchassis_edit.html:24 +#: netbox/dcim/filtersets.py:1464 netbox/dcim/forms/filtersets.py:109 +#: netbox/dcim/tables/devices.py:206 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 +#: netbox/templates/dcim/virtualchassis_add.html:8 +#: netbox/templates/dcim/virtualchassis_edit.html:24 msgid "Virtual Chassis" msgstr "Виртуальное шасси" -#: dcim/filtersets.py:1488 +#: netbox/dcim/filtersets.py:1488 msgid "Module (ID)" msgstr "Модуль (ID)" -#: dcim/filtersets.py:1495 +#: netbox/dcim/filtersets.py:1495 msgid "Cable (ID)" msgstr "Кабель (ID)" -#: dcim/filtersets.py:1604 ipam/forms/bulk_import.py:189 -#: vpn/forms/bulk_import.py:308 +#: netbox/dcim/filtersets.py:1604 netbox/ipam/forms/bulk_import.py:189 +#: netbox/vpn/forms/bulk_import.py:308 msgid "Assigned VLAN" msgstr "Назначенная VLAN" -#: dcim/filtersets.py:1608 +#: netbox/dcim/filtersets.py:1608 msgid "Assigned VID" msgstr "Назначенный VID" -#: dcim/filtersets.py:1613 dcim/forms/bulk_edit.py:1489 -#: dcim/forms/bulk_import.py:891 dcim/forms/filtersets.py:1428 -#: dcim/forms/model_forms.py:1378 dcim/models/device_components.py:711 -#: dcim/tables/devices.py:626 ipam/filtersets.py:316 ipam/filtersets.py:327 -#: ipam/filtersets.py:483 ipam/filtersets.py:584 ipam/filtersets.py:595 -#: ipam/forms/bulk_edit.py:242 ipam/forms/bulk_edit.py:298 -#: ipam/forms/bulk_edit.py:340 ipam/forms/bulk_import.py:157 -#: ipam/forms/bulk_import.py:243 ipam/forms/bulk_import.py:279 -#: ipam/forms/filtersets.py:67 ipam/forms/filtersets.py:172 -#: ipam/forms/filtersets.py:309 ipam/forms/model_forms.py:62 -#: ipam/forms/model_forms.py:202 ipam/forms/model_forms.py:247 -#: ipam/forms/model_forms.py:300 ipam/forms/model_forms.py:431 -#: ipam/forms/model_forms.py:445 ipam/forms/model_forms.py:459 -#: ipam/models/ip.py:233 ipam/models/ip.py:512 ipam/models/ip.py:720 -#: ipam/models/vrfs.py:62 ipam/tables/ip.py:242 ipam/tables/ip.py:309 -#: ipam/tables/ip.py:360 ipam/tables/ip.py:450 -#: templates/dcim/interface.html:133 templates/ipam/ipaddress.html:18 -#: templates/ipam/iprange.html:40 templates/ipam/prefix.html:19 -#: templates/ipam/vrf.html:7 templates/ipam/vrf.html:13 -#: templates/virtualization/vminterface.html:47 -#: virtualization/forms/bulk_edit.py:261 -#: virtualization/forms/bulk_import.py:171 -#: virtualization/forms/filtersets.py:228 -#: virtualization/forms/model_forms.py:344 -#: virtualization/models/virtualmachines.py:355 -#: virtualization/tables/virtualmachines.py:143 +#: 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/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 msgid "VRF" msgstr "VRF" -#: dcim/filtersets.py:1619 ipam/filtersets.py:322 ipam/filtersets.py:333 -#: ipam/filtersets.py:489 ipam/filtersets.py:590 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)" -#: dcim/filtersets.py:1624 ipam/filtersets.py:1030 vpn/filtersets.py:342 +#: netbox/dcim/filtersets.py:1624 netbox/ipam/filtersets.py:1032 +#: netbox/vpn/filtersets.py:342 msgid "L2VPN (ID)" msgstr "L2VPN (ID)" -#: dcim/filtersets.py:1630 dcim/forms/filtersets.py:1433 -#: dcim/tables/devices.py:570 ipam/filtersets.py:1036 -#: ipam/forms/filtersets.py:518 ipam/tables/vlans.py:137 -#: templates/dcim/interface.html:93 templates/ipam/vlan.html:66 -#: templates/vpn/l2vpntermination.html:12 -#: virtualization/forms/filtersets.py:233 vpn/forms/bulk_import.py:280 -#: vpn/forms/filtersets.py:246 vpn/forms/model_forms.py:409 -#: vpn/forms/model_forms.py:427 vpn/models/l2vpn.py:63 vpn/tables/l2vpn.py:55 +#: netbox/dcim/filtersets.py: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/templates/vpn/l2vpntermination.html:12 +#: netbox/virtualization/forms/filtersets.py:233 +#: netbox/vpn/forms/bulk_import.py:280 netbox/vpn/forms/filtersets.py:246 +#: netbox/vpn/forms/model_forms.py:409 netbox/vpn/forms/model_forms.py:427 +#: netbox/vpn/models/l2vpn.py:63 netbox/vpn/tables/l2vpn.py:55 msgid "L2VPN" msgstr "L2VPN" -#: dcim/filtersets.py:1662 +#: netbox/dcim/filtersets.py:1662 msgid "Virtual Chassis Interfaces for Device" msgstr "Интерфейсы виртуального шасси для устройства" -#: dcim/filtersets.py:1667 +#: netbox/dcim/filtersets.py:1667 msgid "Virtual Chassis Interfaces for Device (ID)" msgstr "Интерфейсы виртуального шасси для устройства (ID)" -#: dcim/filtersets.py:1671 +#: netbox/dcim/filtersets.py:1671 msgid "Kind of interface" msgstr "Вид интерфейса" -#: dcim/filtersets.py:1676 virtualization/filtersets.py:293 +#: netbox/dcim/filtersets.py:1676 netbox/virtualization/filtersets.py:293 msgid "Parent interface (ID)" msgstr "Родительский интерфейс (ID)" -#: dcim/filtersets.py:1681 virtualization/filtersets.py:298 +#: netbox/dcim/filtersets.py:1681 netbox/virtualization/filtersets.py:298 msgid "Bridged interface (ID)" msgstr "Мостовой интерфейс (ID)" -#: dcim/filtersets.py:1686 +#: netbox/dcim/filtersets.py:1686 msgid "LAG interface (ID)" msgstr "Интерфейс LAG (ID)" -#: dcim/filtersets.py:1713 dcim/filtersets.py:1725 -#: dcim/forms/filtersets.py:1345 dcim/forms/model_forms.py:1690 -#: templates/dcim/virtualdevicecontext.html:15 +#: netbox/dcim/filtersets.py:1713 netbox/dcim/filtersets.py:1725 +#: netbox/dcim/forms/filtersets.py:1345 netbox/dcim/forms/model_forms.py:1697 +#: netbox/templates/dcim/virtualdevicecontext.html:15 msgid "Virtual Device Context" msgstr "Виртуальный контекст" -#: dcim/filtersets.py:1719 +#: netbox/dcim/filtersets.py:1719 msgid "Virtual Device Context (Identifier)" msgstr "Контекст виртуального устройства (идентификатор)" -#: dcim/filtersets.py:1730 templates/wireless/wirelesslan.html:11 -#: wireless/forms/model_forms.py:53 +#: netbox/dcim/filtersets.py:1730 +#: netbox/templates/wireless/wirelesslan.html:11 +#: netbox/wireless/forms/model_forms.py:53 msgid "Wireless LAN" msgstr "Беспроводная сеть" -#: dcim/filtersets.py:1734 dcim/tables/devices.py:613 +#: netbox/dcim/filtersets.py:1734 netbox/dcim/tables/devices.py:613 msgid "Wireless link" msgstr "Беспроводная связь" -#: dcim/filtersets.py:1803 +#: netbox/dcim/filtersets.py:1803 msgid "Parent module bay (ID)" msgstr "Отсек для родительского модуля (ID)" -#: dcim/filtersets.py:1808 +#: netbox/dcim/filtersets.py:1808 msgid "Installed module (ID)" msgstr "Установленный модуль (ID)" -#: dcim/filtersets.py:1819 +#: netbox/dcim/filtersets.py:1819 msgid "Installed device (ID)" msgstr "Установленное устройство (ID)" -#: dcim/filtersets.py:1825 +#: netbox/dcim/filtersets.py:1825 msgid "Installed device (name)" msgstr "Установленное устройство (имя)" -#: dcim/filtersets.py:1891 +#: netbox/dcim/filtersets.py:1891 msgid "Master (ID)" msgstr "Мастер (удостоверение личности)" -#: dcim/filtersets.py:1897 +#: netbox/dcim/filtersets.py:1897 msgid "Master (name)" msgstr "Мастер (имя)" -#: dcim/filtersets.py:1939 tenancy/filtersets.py:245 +#: netbox/dcim/filtersets.py:1939 netbox/tenancy/filtersets.py:245 msgid "Tenant (ID)" msgstr "Арендатор (ID)" -#: dcim/filtersets.py:1945 extras/filtersets.py:618 tenancy/filtersets.py:251 +#: netbox/dcim/filtersets.py:1945 netbox/extras/filtersets.py:618 +#: netbox/tenancy/filtersets.py:251 msgid "Tenant (slug)" msgstr "Арендатор (подстрока)" -#: dcim/filtersets.py:1981 dcim/forms/filtersets.py:1077 +#: netbox/dcim/filtersets.py:1981 netbox/dcim/forms/filtersets.py:1077 msgid "Unterminated" msgstr "Нерасторгнутый" -#: dcim/filtersets.py:2239 +#: netbox/dcim/filtersets.py:2239 msgid "Power panel (ID)" -msgstr "Панель питания (ID)" +msgstr "Распределительный щит (ID)" -#: dcim/forms/bulk_create.py:40 extras/forms/filtersets.py:401 -#: extras/forms/model_forms.py:567 extras/forms/model_forms.py:619 -#: netbox/forms/base.py:86 netbox/forms/mixins.py:81 -#: netbox/tables/columns.py:478 -#: templates/circuits/inc/circuit_termination.html:32 -#: templates/generic/bulk_edit.html:65 templates/inc/panels/tags.html:5 -#: utilities/forms/fields/fields.py:81 +#: netbox/dcim/forms/bulk_create.py:40 netbox/extras/forms/filtersets.py: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/templates/circuits/inc/circuit_termination.html:32 +#: netbox/templates/generic/bulk_edit.html:65 +#: netbox/templates/inc/panels/tags.html:5 +#: netbox/utilities/forms/fields/fields.py:81 msgid "Tags" msgstr "Теги" -#: dcim/forms/bulk_create.py:112 dcim/forms/filtersets.py:1498 -#: dcim/forms/model_forms.py:488 dcim/forms/model_forms.py:546 -#: dcim/forms/object_create.py:197 dcim/forms/object_create.py:353 -#: dcim/tables/devices.py:165 dcim/tables/devices.py:707 -#: dcim/tables/devicetypes.py:246 templates/dcim/device.html:43 -#: templates/dcim/device.html:131 templates/dcim/modulebay.html:38 -#: templates/dcim/virtualchassis.html:66 -#: templates/dcim/virtualchassis_edit.html:55 +#: 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/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/templates/dcim/device.html:43 netbox/templates/dcim/device.html:131 +#: netbox/templates/dcim/modulebay.html:38 +#: netbox/templates/dcim/virtualchassis.html:66 +#: netbox/templates/dcim/virtualchassis_edit.html:55 msgid "Position" msgstr "Позиция" -#: dcim/forms/bulk_create.py:114 +#: netbox/dcim/forms/bulk_create.py:114 msgid "" "Alphanumeric ranges are supported. (Must match the number of names being " "created.)" @@ -3125,825 +3455,922 @@ msgstr "" "Поддерживаются алфавитно-цифровые диапазоны. (Должно совпадать с количеством" " создаваемых имен.)" -#: dcim/forms/bulk_edit.py:132 +#: netbox/dcim/forms/bulk_edit.py:133 msgid "Contact name" msgstr "Имя контактного лица" -#: dcim/forms/bulk_edit.py:137 +#: netbox/dcim/forms/bulk_edit.py:138 msgid "Contact phone" msgstr "Контактный телефон" -#: dcim/forms/bulk_edit.py:143 +#: netbox/dcim/forms/bulk_edit.py:144 msgid "Contact E-mail" msgstr "Контактный адрес электронной почты" -#: dcim/forms/bulk_edit.py:146 dcim/forms/bulk_import.py:123 -#: dcim/forms/model_forms.py:128 +#: netbox/dcim/forms/bulk_edit.py:147 netbox/dcim/forms/bulk_import.py:123 +#: netbox/dcim/forms/model_forms.py:128 msgid "Time zone" msgstr "Часовой пояс" -#: dcim/forms/bulk_edit.py:224 dcim/forms/bulk_edit.py:495 -#: dcim/forms/bulk_edit.py:559 dcim/forms/bulk_edit.py:632 -#: dcim/forms/bulk_edit.py:656 dcim/forms/bulk_edit.py:740 -#: dcim/forms/bulk_edit.py:1267 dcim/forms/bulk_edit.py:1660 -#: dcim/forms/bulk_import.py:182 dcim/forms/bulk_import.py:371 -#: dcim/forms/bulk_import.py:405 dcim/forms/bulk_import.py:450 -#: dcim/forms/bulk_import.py:486 dcim/forms/bulk_import.py:1082 -#: dcim/forms/filtersets.py:313 dcim/forms/filtersets.py:372 -#: dcim/forms/filtersets.py:494 dcim/forms/filtersets.py:619 -#: dcim/forms/filtersets.py:700 dcim/forms/filtersets.py:782 -#: dcim/forms/filtersets.py:947 dcim/forms/filtersets.py:1539 -#: dcim/forms/model_forms.py:207 dcim/forms/model_forms.py:337 -#: dcim/forms/model_forms.py:349 dcim/forms/model_forms.py:395 -#: dcim/forms/model_forms.py:436 dcim/forms/model_forms.py:1075 -#: dcim/forms/model_forms.py:1515 dcim/forms/object_import.py:187 -#: dcim/tables/devices.py:96 dcim/tables/devices.py:172 -#: dcim/tables/devices.py:940 dcim/tables/devicetypes.py:80 -#: dcim/tables/devicetypes.py:308 dcim/tables/modules.py:20 -#: dcim/tables/modules.py:60 dcim/tables/racks.py:58 dcim/tables/racks.py:132 -#: templates/dcim/devicetype.html:14 templates/dcim/inventoryitem.html:44 -#: templates/dcim/manufacturer.html:33 templates/dcim/modulebay.html:62 -#: templates/dcim/moduletype.html:25 templates/dcim/platform.html:37 -#: templates/dcim/racktype.html:16 +#: 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/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/templates/dcim/manufacturer.html:33 +#: netbox/templates/dcim/modulebay.html:62 +#: netbox/templates/dcim/moduletype.html:25 +#: netbox/templates/dcim/platform.html:37 +#: netbox/templates/dcim/racktype.html:16 msgid "Manufacturer" msgstr "Производитель" -#: dcim/forms/bulk_edit.py:229 dcim/forms/bulk_edit.py:372 -#: dcim/forms/bulk_import.py:191 dcim/forms/bulk_import.py:263 -#: dcim/forms/filtersets.py:255 -#: templates/dcim/inc/panels/racktype_dimensions.html:6 +#: 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/templates/dcim/inc/panels/racktype_dimensions.html:6 msgid "Form factor" msgstr "Форм-фактор" -#: dcim/forms/bulk_edit.py:234 dcim/forms/bulk_edit.py:377 -#: dcim/forms/bulk_import.py:199 dcim/forms/bulk_import.py:266 -#: dcim/forms/filtersets.py:260 -#: templates/dcim/inc/panels/racktype_dimensions.html:10 +#: 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/templates/dcim/inc/panels/racktype_dimensions.html:10 msgid "Width" msgstr "Ширина" -#: dcim/forms/bulk_edit.py:240 dcim/forms/bulk_edit.py:383 -#: templates/dcim/devicetype.html:37 +#: netbox/dcim/forms/bulk_edit.py:241 netbox/dcim/forms/bulk_edit.py:389 +#: netbox/dcim/forms/bulk_import.py:280 +#: netbox/templates/dcim/devicetype.html:37 msgid "Height (U)" msgstr "Высота (U)" -#: dcim/forms/bulk_edit.py:249 dcim/forms/bulk_edit.py:388 -#: dcim/forms/filtersets.py:274 +#: netbox/dcim/forms/bulk_edit.py:250 netbox/dcim/forms/bulk_edit.py:394 +#: netbox/dcim/forms/filtersets.py:274 msgid "Descending units" msgstr "Единицы по убыванию" -#: dcim/forms/bulk_edit.py:252 dcim/forms/bulk_edit.py:391 +#: netbox/dcim/forms/bulk_edit.py:253 netbox/dcim/forms/bulk_edit.py:397 msgid "Outer width" msgstr "Наружная ширина" -#: dcim/forms/bulk_edit.py:257 dcim/forms/bulk_edit.py:396 +#: netbox/dcim/forms/bulk_edit.py:258 netbox/dcim/forms/bulk_edit.py:402 msgid "Outer depth" msgstr "Внешняя глубина" -#: dcim/forms/bulk_edit.py:262 dcim/forms/bulk_edit.py:401 -#: dcim/forms/bulk_import.py:204 dcim/forms/bulk_import.py:271 +#: 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 msgid "Outer unit" msgstr "Внешний блок" -#: dcim/forms/bulk_edit.py:267 dcim/forms/bulk_edit.py:406 +#: netbox/dcim/forms/bulk_edit.py:268 netbox/dcim/forms/bulk_edit.py:412 msgid "Mounting depth" msgstr "Глубина крепления" -#: dcim/forms/bulk_edit.py:272 dcim/forms/bulk_edit.py:299 -#: dcim/forms/bulk_edit.py:416 dcim/forms/bulk_edit.py:446 -#: dcim/forms/bulk_edit.py:529 dcim/forms/bulk_edit.py:552 -#: dcim/forms/bulk_edit.py:573 dcim/forms/bulk_edit.py:595 -#: dcim/forms/bulk_import.py:384 dcim/forms/bulk_import.py:416 -#: dcim/forms/filtersets.py:285 dcim/forms/filtersets.py:307 -#: dcim/forms/filtersets.py:327 dcim/forms/filtersets.py:401 -#: dcim/forms/filtersets.py:488 dcim/forms/filtersets.py:594 -#: dcim/forms/filtersets.py:613 dcim/forms/filtersets.py:674 -#: dcim/forms/model_forms.py:221 dcim/forms/model_forms.py:298 -#: dcim/tables/devicetypes.py:106 dcim/tables/modules.py:35 -#: dcim/tables/racks.py:74 dcim/tables/racks.py:172 -#: extras/forms/bulk_edit.py:53 extras/forms/bulk_edit.py:133 -#: extras/forms/bulk_edit.py:183 extras/forms/bulk_edit.py:288 -#: extras/forms/filtersets.py:64 extras/forms/filtersets.py:156 -#: extras/forms/filtersets.py:243 ipam/forms/bulk_edit.py:190 -#: templates/dcim/device.html:324 templates/dcim/devicetype.html:49 -#: templates/dcim/moduletype.html:45 templates/dcim/rack.html:81 -#: templates/dcim/racktype.html:41 templates/extras/configcontext.html:17 -#: templates/extras/customlink.html:25 templates/extras/savedfilter.html:33 -#: templates/ipam/role.html:30 +#: netbox/dcim/forms/bulk_edit.py: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/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/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/racktype.html:41 +#: netbox/templates/extras/configcontext.html:17 +#: netbox/templates/extras/customlink.html:25 +#: netbox/templates/extras/savedfilter.html:33 +#: netbox/templates/ipam/role.html:30 msgid "Weight" msgstr "Вес" -#: dcim/forms/bulk_edit.py:277 dcim/forms/bulk_edit.py:421 -#: dcim/forms/filtersets.py:290 +#: netbox/dcim/forms/bulk_edit.py:278 netbox/dcim/forms/bulk_edit.py:427 +#: netbox/dcim/forms/filtersets.py:290 msgid "Max weight" msgstr "Максимальный вес" -#: dcim/forms/bulk_edit.py:282 dcim/forms/bulk_edit.py:426 -#: dcim/forms/bulk_edit.py:534 dcim/forms/bulk_edit.py:578 -#: dcim/forms/bulk_import.py:210 dcim/forms/bulk_import.py:283 -#: dcim/forms/bulk_import.py:389 dcim/forms/bulk_import.py:421 -#: dcim/forms/filtersets.py:295 dcim/forms/filtersets.py:598 -#: dcim/forms/filtersets.py:678 +#: 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 msgid "Weight unit" msgstr "Единица веса" -#: dcim/forms/bulk_edit.py:296 dcim/forms/filtersets.py:305 -#: dcim/forms/model_forms.py:217 dcim/forms/model_forms.py:256 -#: templates/dcim/rack.html:45 templates/dcim/racktype.html:13 +#: 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/templates/dcim/rack.html:45 netbox/templates/dcim/racktype.html:13 msgid "Rack Type" msgstr "Тип стойки" -#: dcim/forms/bulk_edit.py:298 dcim/forms/model_forms.py:220 -#: dcim/forms/model_forms.py:297 +#: netbox/dcim/forms/bulk_edit.py:299 netbox/dcim/forms/model_forms.py:220 +#: netbox/dcim/forms/model_forms.py:297 msgid "Outer Dimensions" msgstr "Внешние размеры" -#: dcim/forms/bulk_edit.py:301 dcim/forms/model_forms.py:222 -#: dcim/forms/model_forms.py:299 templates/dcim/device.html:315 -#: templates/dcim/inc/panels/racktype_dimensions.html:3 +#: 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/templates/dcim/inc/panels/racktype_dimensions.html:3 msgid "Dimensions" msgstr "Габариты" -#: dcim/forms/bulk_edit.py:303 dcim/forms/filtersets.py:306 -#: dcim/forms/filtersets.py:326 dcim/forms/model_forms.py:224 -#: templates/dcim/inc/panels/racktype_numbering.html:3 +#: 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/templates/dcim/inc/panels/racktype_numbering.html:3 msgid "Numbering" msgstr "Нумерация" -#: dcim/forms/bulk_edit.py:357 dcim/forms/bulk_edit.py:1262 -#: dcim/forms/bulk_edit.py:1655 dcim/forms/bulk_import.py:253 -#: dcim/forms/bulk_import.py:1076 dcim/forms/filtersets.py:367 -#: dcim/forms/filtersets.py:777 dcim/forms/filtersets.py:1534 -#: dcim/forms/model_forms.py:251 dcim/forms/model_forms.py:1070 -#: dcim/forms/model_forms.py:1510 dcim/forms/object_import.py:181 -#: dcim/tables/devices.py:169 dcim/tables/devices.py:809 -#: dcim/tables/devices.py:937 dcim/tables/devicetypes.py:304 -#: dcim/tables/racks.py:129 extras/filtersets.py:552 -#: ipam/forms/bulk_edit.py:261 ipam/forms/bulk_edit.py:311 -#: ipam/forms/bulk_edit.py:359 ipam/forms/bulk_edit.py:511 -#: ipam/forms/bulk_import.py:197 ipam/forms/bulk_import.py:262 -#: ipam/forms/bulk_import.py:298 ipam/forms/bulk_import.py:455 -#: ipam/forms/filtersets.py:237 ipam/forms/filtersets.py:289 -#: ipam/forms/filtersets.py:360 ipam/forms/filtersets.py:509 -#: ipam/forms/model_forms.py:188 ipam/forms/model_forms.py:221 -#: ipam/forms/model_forms.py:250 ipam/forms/model_forms.py:643 -#: ipam/tables/ip.py:258 ipam/tables/ip.py:316 ipam/tables/ip.py:367 -#: ipam/tables/vlans.py:130 ipam/tables/vlans.py:235 -#: templates/dcim/device.html:182 -#: templates/dcim/inc/panels/inventory_items.html:20 -#: templates/dcim/interface.html:223 templates/dcim/inventoryitem.html:36 -#: templates/dcim/rack.html:49 templates/ipam/ipaddress.html:41 -#: templates/ipam/iprange.html:50 templates/ipam/prefix.html:77 -#: templates/ipam/role.html:19 templates/ipam/vlan.html:52 -#: templates/virtualization/virtualmachine.html:23 -#: templates/vpn/tunneltermination.html:17 -#: templates/wireless/inc/wirelesslink_interface.html:20 -#: tenancy/forms/bulk_edit.py:142 tenancy/forms/filtersets.py:107 -#: tenancy/forms/model_forms.py:137 tenancy/tables/contacts.py:102 -#: virtualization/forms/bulk_edit.py:145 -#: virtualization/forms/bulk_import.py:106 -#: virtualization/forms/filtersets.py:157 -#: virtualization/forms/model_forms.py:195 -#: virtualization/tables/virtualmachines.py:75 vpn/forms/bulk_edit.py:87 -#: vpn/forms/bulk_import.py:81 vpn/forms/filtersets.py:85 -#: vpn/forms/model_forms.py:78 vpn/forms/model_forms.py:113 -#: vpn/tables/tunnels.py:82 +#: netbox/dcim/forms/bulk_edit.py: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 "Роль" -#: dcim/forms/bulk_edit.py:364 dcim/forms/bulk_edit.py:712 -#: dcim/forms/bulk_edit.py:764 templates/dcim/device.html:104 -#: templates/dcim/module.html:77 templates/dcim/modulebay.html:70 -#: templates/dcim/rack.html:57 templates/virtualization/virtualmachine.html:35 +#: netbox/dcim/forms/bulk_edit.py:363 netbox/dcim/forms/bulk_import.py:260 +#: netbox/dcim/forms/filtersets.py:380 +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/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 "Серийный номер" -#: dcim/forms/bulk_edit.py:367 dcim/forms/filtersets.py:387 -#: dcim/forms/filtersets.py:813 dcim/forms/filtersets.py:967 -#: dcim/forms/filtersets.py:1546 +#: 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 msgid "Asset tag" msgstr "Инвентарный номер" -#: dcim/forms/bulk_edit.py:411 dcim/forms/bulk_edit.py:524 -#: dcim/forms/bulk_edit.py:568 dcim/forms/bulk_edit.py:705 -#: dcim/forms/bulk_import.py:277 dcim/forms/bulk_import.py:410 -#: dcim/forms/bulk_import.py:580 dcim/forms/filtersets.py:280 -#: dcim/forms/filtersets.py:511 dcim/forms/filtersets.py:669 -#: dcim/forms/filtersets.py:804 templates/dcim/device.html:98 -#: templates/dcim/devicetype.html:65 templates/dcim/moduletype.html:41 -#: templates/dcim/rack.html:65 templates/dcim/racktype.html:28 +#: 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/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 "Воздушный поток" -#: dcim/forms/bulk_edit.py:440 dcim/forms/bulk_edit.py:910 -#: dcim/forms/bulk_import.py:322 dcim/forms/bulk_import.py:325 -#: dcim/forms/bulk_import.py:553 dcim/forms/bulk_import.py:1358 -#: dcim/forms/bulk_import.py:1362 dcim/forms/filtersets.py:104 -#: dcim/forms/filtersets.py:324 dcim/forms/filtersets.py:405 -#: dcim/forms/filtersets.py:419 dcim/forms/filtersets.py:457 -#: dcim/forms/filtersets.py:772 dcim/forms/filtersets.py:1035 -#: dcim/forms/filtersets.py:1167 dcim/forms/model_forms.py:264 -#: dcim/forms/model_forms.py:306 dcim/forms/model_forms.py:479 -#: dcim/forms/model_forms.py:755 dcim/forms/object_create.py:400 -#: dcim/tables/devices.py:161 dcim/tables/power.py:70 dcim/tables/racks.py:217 -#: ipam/forms/filtersets.py:442 templates/dcim/device.html:30 -#: templates/dcim/inc/cable_termination.html:16 -#: templates/dcim/powerfeed.html:28 templates/dcim/rack.html:13 -#: templates/dcim/rack/base.html:4 templates/dcim/rackreservation.html:19 -#: templates/dcim/rackreservation.html:36 -#: virtualization/forms/model_forms.py:113 +#: netbox/dcim/forms/bulk_edit.py: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/templates/dcim/device.html:30 +#: netbox/templates/dcim/inc/cable_termination.html:16 +#: netbox/templates/dcim/powerfeed.html:28 netbox/templates/dcim/rack.html:13 +#: netbox/templates/dcim/rack/base.html:4 +#: netbox/templates/dcim/rackreservation.html:19 +#: netbox/templates/dcim/rackreservation.html:36 +#: netbox/virtualization/forms/model_forms.py:113 msgid "Rack" msgstr "Стойка" -#: dcim/forms/bulk_edit.py:444 dcim/forms/bulk_edit.py:730 -#: dcim/forms/filtersets.py:325 dcim/forms/filtersets.py:398 -#: dcim/forms/filtersets.py:481 dcim/forms/filtersets.py:608 -#: dcim/forms/filtersets.py:721 dcim/forms/filtersets.py:942 -#: dcim/forms/model_forms.py:670 dcim/forms/model_forms.py:1580 -#: templates/dcim/device_edit.html:20 +#: 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/templates/dcim/device_edit.html:20 msgid "Hardware" msgstr "Аппаратное обеспечение" -#: dcim/forms/bulk_edit.py:500 dcim/forms/bulk_import.py:377 -#: dcim/forms/filtersets.py:499 dcim/forms/model_forms.py:353 +#: 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 msgid "Default platform" msgstr "Платформа по умолчанию" -#: dcim/forms/bulk_edit.py:505 dcim/forms/bulk_edit.py:564 -#: dcim/forms/filtersets.py:502 dcim/forms/filtersets.py:622 +#: 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 msgid "Part number" msgstr "Номер детали" -#: dcim/forms/bulk_edit.py:509 +#: netbox/dcim/forms/bulk_edit.py:515 msgid "U height" msgstr "Высота U" -#: dcim/forms/bulk_edit.py:521 dcim/tables/devicetypes.py:102 +#: netbox/dcim/forms/bulk_edit.py:527 netbox/dcim/tables/devicetypes.py:102 msgid "Exclude from utilization" msgstr "Исключить из использования" -#: dcim/forms/bulk_edit.py:550 dcim/forms/model_forms.py:368 -#: dcim/tables/devicetypes.py:77 templates/dcim/device.html:88 -#: templates/dcim/devicebay.html:52 templates/dcim/module.html:61 +#: 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/templates/dcim/devicebay.html:52 +#: netbox/templates/dcim/module.html:61 msgid "Device Type" msgstr "Тип устройства" -#: dcim/forms/bulk_edit.py:592 dcim/forms/model_forms.py:401 -#: dcim/tables/modules.py:17 dcim/tables/modules.py:65 -#: templates/dcim/module.html:65 templates/dcim/modulebay.html:66 -#: templates/dcim/moduletype.html:22 +#: 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:66 +#: netbox/templates/dcim/module.html:65 +#: netbox/templates/dcim/modulebay.html:66 +#: netbox/templates/dcim/moduletype.html:22 msgid "Module Type" msgstr "Тип модуля" -#: dcim/forms/bulk_edit.py:596 dcim/forms/model_forms.py:371 -#: dcim/forms/model_forms.py:402 templates/dcim/devicetype.html:11 +#: netbox/dcim/forms/bulk_edit.py:602 netbox/dcim/forms/model_forms.py:371 +#: netbox/dcim/forms/model_forms.py:402 +#: netbox/templates/dcim/devicetype.html:11 msgid "Chassis" msgstr "Шасси" -#: dcim/forms/bulk_edit.py:610 dcim/models/devices.py:484 -#: dcim/tables/devices.py:67 +#: netbox/dcim/forms/bulk_edit.py:616 netbox/dcim/models/devices.py:484 +#: netbox/dcim/tables/devices.py:67 msgid "VM role" msgstr "Роль виртуальной машины" -#: dcim/forms/bulk_edit.py:613 dcim/forms/bulk_edit.py:637 -#: dcim/forms/bulk_edit.py:720 dcim/forms/bulk_import.py:434 -#: dcim/forms/bulk_import.py:438 dcim/forms/bulk_import.py:457 -#: dcim/forms/bulk_import.py:461 dcim/forms/bulk_import.py:586 -#: dcim/forms/bulk_import.py:590 dcim/forms/filtersets.py:689 -#: dcim/forms/filtersets.py:705 dcim/forms/filtersets.py:823 -#: dcim/forms/model_forms.py:415 dcim/forms/model_forms.py:441 -#: dcim/forms/model_forms.py:555 virtualization/forms/bulk_import.py:132 -#: virtualization/forms/bulk_import.py:133 -#: virtualization/forms/filtersets.py:188 -#: virtualization/forms/model_forms.py:215 +#: 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 msgid "Config template" msgstr "Шаблон конфигурации" -#: dcim/forms/bulk_edit.py:661 dcim/forms/bulk_edit.py:1061 -#: dcim/forms/bulk_import.py:492 dcim/forms/filtersets.py:114 -#: dcim/forms/model_forms.py:501 dcim/forms/model_forms.py:872 -#: dcim/forms/model_forms.py:889 extras/filtersets.py:547 +#: 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 msgid "Device type" msgstr "Тип устройства" -#: dcim/forms/bulk_edit.py:672 dcim/forms/bulk_import.py:473 -#: dcim/forms/filtersets.py:119 dcim/forms/model_forms.py:509 +#: 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 msgid "Device role" msgstr "Роль устройства" -#: dcim/forms/bulk_edit.py:695 dcim/forms/bulk_import.py:498 -#: dcim/forms/filtersets.py:796 dcim/forms/model_forms.py:451 -#: dcim/forms/model_forms.py:513 dcim/tables/devices.py:182 -#: extras/filtersets.py:563 templates/dcim/device.html:186 -#: templates/dcim/platform.html:26 -#: templates/virtualization/virtualmachine.html:27 -#: virtualization/forms/bulk_edit.py:160 -#: virtualization/forms/bulk_import.py:122 -#: virtualization/forms/filtersets.py:168 -#: virtualization/forms/model_forms.py:203 -#: virtualization/tables/virtualmachines.py:79 +#: 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/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 msgid "Platform" msgstr "Платформа" -#: dcim/forms/bulk_edit.py:728 dcim/forms/bulk_edit.py:1281 -#: dcim/forms/bulk_edit.py:1650 dcim/forms/bulk_edit.py:1696 -#: dcim/forms/bulk_import.py:641 dcim/forms/bulk_import.py:703 -#: dcim/forms/bulk_import.py:729 dcim/forms/bulk_import.py:755 -#: dcim/forms/bulk_import.py:775 dcim/forms/bulk_import.py:828 -#: dcim/forms/bulk_import.py:946 dcim/forms/bulk_import.py:994 -#: dcim/forms/bulk_import.py:1011 dcim/forms/bulk_import.py:1023 -#: dcim/forms/bulk_import.py:1071 dcim/forms/bulk_import.py:1422 -#: dcim/forms/connections.py:24 dcim/forms/filtersets.py:131 -#: dcim/forms/filtersets.py:921 dcim/forms/filtersets.py:1051 -#: dcim/forms/filtersets.py:1242 dcim/forms/filtersets.py:1267 -#: dcim/forms/filtersets.py:1291 dcim/forms/filtersets.py:1311 -#: dcim/forms/filtersets.py:1334 dcim/forms/filtersets.py:1444 -#: dcim/forms/filtersets.py:1469 dcim/forms/filtersets.py:1493 -#: dcim/forms/filtersets.py:1511 dcim/forms/filtersets.py:1528 -#: dcim/forms/filtersets.py:1592 dcim/forms/filtersets.py:1616 -#: dcim/forms/filtersets.py:1640 dcim/forms/model_forms.py:633 -#: dcim/forms/model_forms.py:849 dcim/forms/model_forms.py:1208 -#: dcim/forms/model_forms.py:1664 dcim/forms/object_create.py:257 -#: dcim/tables/connections.py:22 dcim/tables/connections.py:41 -#: dcim/tables/connections.py:60 dcim/tables/devices.py:285 -#: dcim/tables/devices.py:371 dcim/tables/devices.py:412 -#: dcim/tables/devices.py:454 dcim/tables/devices.py:505 -#: dcim/tables/devices.py:597 dcim/tables/devices.py:697 -#: dcim/tables/devices.py:754 dcim/tables/devices.py:801 -#: dcim/tables/devices.py:861 dcim/tables/devices.py:930 -#: dcim/tables/devices.py:1057 dcim/tables/modules.py:52 -#: extras/forms/filtersets.py:321 ipam/forms/bulk_import.py:304 -#: ipam/forms/bulk_import.py:481 ipam/forms/filtersets.py:551 -#: ipam/forms/model_forms.py:319 ipam/forms/model_forms.py:679 -#: ipam/forms/model_forms.py:712 ipam/forms/model_forms.py:738 -#: ipam/tables/vlans.py:180 templates/dcim/consoleport.html:20 -#: templates/dcim/consoleserverport.html:20 templates/dcim/device.html:15 -#: templates/dcim/device.html:130 templates/dcim/device_edit.html:10 -#: templates/dcim/devicebay.html:20 templates/dcim/devicebay.html:48 -#: templates/dcim/frontport.html:20 templates/dcim/interface.html:30 -#: templates/dcim/interface.html:161 templates/dcim/inventoryitem.html:20 -#: templates/dcim/module.html:57 templates/dcim/modulebay.html:20 -#: templates/dcim/poweroutlet.html:20 templates/dcim/powerport.html:20 -#: templates/dcim/rearport.html:20 templates/dcim/virtualchassis.html:65 -#: templates/dcim/virtualchassis_edit.html:51 -#: templates/dcim/virtualdevicecontext.html:22 -#: templates/virtualization/virtualmachine.html:114 -#: templates/vpn/tunneltermination.html:23 -#: templates/wireless/inc/wirelesslink_interface.html:6 -#: virtualization/filtersets.py:167 virtualization/forms/bulk_edit.py:137 -#: virtualization/forms/bulk_import.py:99 -#: virtualization/forms/filtersets.py:128 -#: virtualization/forms/model_forms.py:185 -#: virtualization/tables/virtualmachines.py:71 vpn/choices.py:44 -#: vpn/forms/bulk_import.py:86 vpn/forms/bulk_import.py:283 -#: vpn/forms/filtersets.py:275 vpn/forms/model_forms.py:90 -#: vpn/forms/model_forms.py:125 vpn/forms/model_forms.py:236 -#: vpn/forms/model_forms.py:453 wireless/forms/model_forms.py:99 -#: wireless/forms/model_forms.py:141 wireless/tables/wirelesslan.py:75 -msgid "Device" -msgstr "Устройство" - -#: dcim/forms/bulk_edit.py:731 templates/extras/dashboard/widget_config.html:7 -#: virtualization/forms/bulk_edit.py:191 -msgid "Configuration" -msgstr "Конфигурация" - -#: dcim/forms/bulk_edit.py:745 dcim/forms/bulk_import.py:653 -#: dcim/forms/model_forms.py:647 dcim/forms/model_forms.py:897 -msgid "Module type" -msgstr "Тип модуля" - -#: dcim/forms/bulk_edit.py:799 dcim/forms/bulk_edit.py:984 -#: dcim/forms/bulk_edit.py:1003 dcim/forms/bulk_edit.py:1026 -#: dcim/forms/bulk_edit.py:1068 dcim/forms/bulk_edit.py:1112 -#: dcim/forms/bulk_edit.py:1163 dcim/forms/bulk_edit.py:1190 -#: dcim/forms/bulk_edit.py:1217 dcim/forms/bulk_edit.py:1235 -#: dcim/forms/bulk_edit.py:1253 dcim/forms/filtersets.py:67 -#: dcim/forms/object_create.py:46 templates/dcim/cable.html:32 -#: templates/dcim/consoleport.html:32 templates/dcim/consoleserverport.html:32 -#: templates/dcim/devicebay.html:28 templates/dcim/frontport.html:32 -#: templates/dcim/inc/panels/inventory_items.html:19 -#: templates/dcim/interface.html:42 templates/dcim/inventoryitem.html:32 -#: templates/dcim/modulebay.html:34 templates/dcim/poweroutlet.html:32 -#: templates/dcim/powerport.html:32 templates/dcim/rearport.html:32 -#: templates/extras/customfield.html:26 templates/generic/bulk_import.html:162 -msgid "Label" -msgstr "Лейбл" - -#: dcim/forms/bulk_edit.py:808 dcim/forms/filtersets.py:1068 -#: templates/dcim/cable.html:50 -msgid "Length" -msgstr "Длина" - -#: dcim/forms/bulk_edit.py:813 dcim/forms/bulk_import.py:1226 -#: dcim/forms/bulk_import.py:1229 dcim/forms/filtersets.py:1072 -msgid "Length unit" -msgstr "Единица длины" - -#: dcim/forms/bulk_edit.py:837 templates/dcim/virtualchassis.html:23 -msgid "Domain" -msgstr "Домен" - -#: dcim/forms/bulk_edit.py:905 dcim/forms/bulk_import.py:1345 -#: dcim/forms/filtersets.py:1158 dcim/forms/model_forms.py:750 -msgid "Power panel" -msgstr "Панель питания" - -#: dcim/forms/bulk_edit.py:927 dcim/forms/bulk_import.py:1381 -#: dcim/forms/filtersets.py:1180 templates/dcim/powerfeed.html:83 -msgid "Supply" -msgstr "Снабжение" - -#: dcim/forms/bulk_edit.py:933 dcim/forms/bulk_import.py:1386 -#: dcim/forms/filtersets.py:1185 templates/dcim/powerfeed.html:95 -msgid "Phase" -msgstr "Фаза" - -#: dcim/forms/bulk_edit.py:939 dcim/forms/filtersets.py:1190 -#: templates/dcim/powerfeed.html:87 -msgid "Voltage" -msgstr "Напряжение" - -#: dcim/forms/bulk_edit.py:943 dcim/forms/filtersets.py:1194 -#: templates/dcim/powerfeed.html:91 -msgid "Amperage" -msgstr "Сила тока" - -#: dcim/forms/bulk_edit.py:947 dcim/forms/filtersets.py:1198 -msgid "Max utilization" -msgstr "Максимальное использование" - -#: dcim/forms/bulk_edit.py:1036 -msgid "Maximum draw" -msgstr "Максимальное потребление" - -#: dcim/forms/bulk_edit.py:1039 dcim/models/device_component_templates.py:282 -#: dcim/models/device_components.py:356 -msgid "Maximum power draw (watts)" -msgstr "Максимальная потребляемая мощность (Вт)" - -#: dcim/forms/bulk_edit.py:1042 -msgid "Allocated draw" -msgstr "Выделенная мощность" - -#: dcim/forms/bulk_edit.py:1045 dcim/models/device_component_templates.py:289 -#: dcim/models/device_components.py:363 -msgid "Allocated power draw (watts)" -msgstr "Распределенная потребляемая мощность (Вт)" - -#: dcim/forms/bulk_edit.py:1078 dcim/forms/bulk_import.py:786 -#: dcim/forms/model_forms.py:953 dcim/forms/model_forms.py:1278 -#: dcim/forms/model_forms.py:1567 dcim/forms/object_import.py:55 -msgid "Power port" -msgstr "Порт питания" - -#: dcim/forms/bulk_edit.py:1083 dcim/forms/bulk_import.py:793 -msgid "Feed leg" -msgstr "Фаза электропитания" - -#: dcim/forms/bulk_edit.py:1129 dcim/forms/bulk_edit.py:1440 -msgid "Management only" -msgstr "Только управление" - -#: dcim/forms/bulk_edit.py:1139 dcim/forms/bulk_edit.py:1446 -#: dcim/forms/bulk_import.py:876 dcim/forms/filtersets.py:1394 -#: dcim/forms/object_import.py:90 -#: dcim/models/device_component_templates.py:437 -#: dcim/models/device_components.py:670 -msgid "PoE mode" -msgstr "Режим PoE" - -#: dcim/forms/bulk_edit.py:1145 dcim/forms/bulk_edit.py:1452 -#: dcim/forms/bulk_import.py:882 dcim/forms/filtersets.py:1399 -#: dcim/forms/object_import.py:95 -#: dcim/models/device_component_templates.py:443 -#: dcim/models/device_components.py:676 -msgid "PoE type" -msgstr "Тип PoE" - -#: dcim/forms/bulk_edit.py:1151 dcim/forms/filtersets.py:1404 -#: dcim/forms/object_import.py:100 -msgid "Wireless role" -msgstr "Роль беспроводной связи" - -#: dcim/forms/bulk_edit.py:1288 dcim/forms/model_forms.py:669 -#: dcim/forms/model_forms.py:1223 dcim/tables/devices.py:313 -#: templates/dcim/consoleport.html:24 templates/dcim/consoleserverport.html:24 -#: templates/dcim/frontport.html:24 templates/dcim/interface.html:34 -#: templates/dcim/module.html:54 templates/dcim/modulebay.html:26 -#: templates/dcim/modulebay.html:58 templates/dcim/poweroutlet.html:24 -#: templates/dcim/powerport.html:24 templates/dcim/rearport.html:24 -msgid "Module" -msgstr "Модуль" - -#: dcim/forms/bulk_edit.py:1420 dcim/tables/devices.py:665 -#: templates/dcim/interface.html:110 -msgid "LAG" -msgstr "LAG" - -#: dcim/forms/bulk_edit.py:1425 dcim/forms/model_forms.py:1305 -msgid "Virtual device contexts" -msgstr "Виртуальные контексты" - -#: dcim/forms/bulk_edit.py:1431 dcim/forms/bulk_import.py:714 -#: dcim/forms/bulk_import.py:740 dcim/forms/filtersets.py:1252 -#: dcim/forms/filtersets.py:1277 dcim/forms/filtersets.py:1358 -#: dcim/tables/devices.py:610 -#: templates/circuits/inc/circuit_termination_fields.html:67 -#: templates/dcim/consoleport.html:40 templates/dcim/consoleserverport.html:40 -msgid "Speed" -msgstr "Скорость" - -#: dcim/forms/bulk_edit.py:1460 dcim/forms/bulk_import.py:885 -#: templates/vpn/ikepolicy.html:25 templates/vpn/ipsecprofile.html:21 -#: templates/vpn/ipsecprofile.html:48 virtualization/forms/bulk_edit.py:233 -#: virtualization/forms/bulk_import.py:165 vpn/forms/bulk_edit.py:146 -#: vpn/forms/bulk_edit.py:232 vpn/forms/bulk_import.py:176 -#: vpn/forms/bulk_import.py:234 vpn/forms/filtersets.py:135 -#: vpn/forms/filtersets.py:178 vpn/forms/filtersets.py:192 -#: vpn/tables/crypto.py:64 vpn/tables/crypto.py:162 -msgid "Mode" -msgstr "Режим" - -#: dcim/forms/bulk_edit.py:1468 dcim/forms/model_forms.py:1354 -#: ipam/forms/bulk_import.py:178 ipam/forms/filtersets.py:498 -#: ipam/models/vlans.py:84 virtualization/forms/bulk_edit.py:240 -#: virtualization/forms/model_forms.py:321 -msgid "VLAN group" -msgstr "Группа VLAN" - -#: dcim/forms/bulk_edit.py:1476 dcim/forms/model_forms.py:1360 -#: dcim/tables/devices.py:579 virtualization/forms/bulk_edit.py:248 -#: virtualization/forms/model_forms.py:326 -msgid "Untagged VLAN" -msgstr "VLAN без тегов" - -#: dcim/forms/bulk_edit.py:1484 dcim/forms/model_forms.py:1369 -#: dcim/tables/devices.py:585 virtualization/forms/bulk_edit.py:256 -#: virtualization/forms/model_forms.py:335 -msgid "Tagged VLANs" -msgstr "VLAN с тегами" - -#: dcim/forms/bulk_edit.py:1494 dcim/forms/model_forms.py:1341 -msgid "Wireless LAN group" -msgstr "Беспроводная группа LAN" - -#: dcim/forms/bulk_edit.py:1499 dcim/forms/model_forms.py:1346 -#: dcim/tables/devices.py:619 netbox/navigation/menu.py:146 -#: templates/dcim/interface.html:280 wireless/tables/wirelesslan.py:24 -msgid "Wireless LANs" -msgstr "Беспроводные LANы" - -#: dcim/forms/bulk_edit.py:1508 dcim/forms/filtersets.py:1328 -#: dcim/forms/model_forms.py:1390 ipam/forms/bulk_edit.py:286 -#: ipam/forms/bulk_edit.py:378 ipam/forms/filtersets.py:169 -#: templates/dcim/interface.html:122 templates/ipam/prefix.html:95 -#: virtualization/forms/model_forms.py:349 -msgid "Addressing" -msgstr "Адресация" - -#: dcim/forms/bulk_edit.py:1509 dcim/forms/filtersets.py:720 -#: dcim/forms/model_forms.py:1391 virtualization/forms/model_forms.py:350 -msgid "Operation" -msgstr "Операция" - -#: dcim/forms/bulk_edit.py:1510 dcim/forms/filtersets.py:1329 -#: dcim/forms/model_forms.py:987 dcim/forms/model_forms.py:1393 -msgid "PoE" -msgstr "PoE" - -#: dcim/forms/bulk_edit.py:1511 dcim/forms/model_forms.py:1392 -#: templates/dcim/interface.html:99 virtualization/forms/bulk_edit.py:267 -#: virtualization/forms/model_forms.py:351 -msgid "Related Interfaces" -msgstr "Связанные интерфейсы" - -#: dcim/forms/bulk_edit.py:1512 dcim/forms/model_forms.py:1394 -#: virtualization/forms/bulk_edit.py:268 -#: virtualization/forms/model_forms.py:352 -msgid "802.1Q Switching" -msgstr "Коммутация 802.1Q" - -#: dcim/forms/bulk_edit.py:1574 dcim/forms/bulk_edit.py:1576 -msgid "Interface mode must be specified to assign VLANs" -msgstr "Для назначения VLAN необходимо указать режим интерфейса" - -#: dcim/forms/bulk_edit.py:1581 dcim/forms/common.py:50 -msgid "An access interface cannot have tagged VLANs assigned." -msgstr "Интерфейсу доступа нельзя назначать VLAN с тегами." - -#: dcim/forms/bulk_import.py:64 -msgid "Name of parent region" -msgstr "Название родительского региона" - -#: dcim/forms/bulk_import.py:78 -msgid "Name of parent site group" -msgstr "Имя родительской группы сайтов" - -#: dcim/forms/bulk_import.py:97 -msgid "Assigned region" -msgstr "Назначенный регион" - -#: dcim/forms/bulk_import.py:104 tenancy/forms/bulk_import.py:44 -#: tenancy/forms/bulk_import.py:85 wireless/forms/bulk_import.py:40 -msgid "Assigned group" -msgstr "Назначенная группа" - -#: dcim/forms/bulk_import.py:123 -msgid "available options" -msgstr "доступные опции" - -#: dcim/forms/bulk_import.py:134 dcim/forms/bulk_import.py:543 -#: dcim/forms/bulk_import.py:1342 ipam/forms/bulk_import.py:175 -#: ipam/forms/bulk_import.py:433 virtualization/forms/bulk_import.py:63 -#: virtualization/forms/bulk_import.py:89 -msgid "Assigned site" -msgstr "Назначенное место" - -#: dcim/forms/bulk_import.py:141 -msgid "Parent location" -msgstr "Родительская локация" - -#: dcim/forms/bulk_import.py:143 -msgid "Location not found." -msgstr "Локация не найдена." - -#: dcim/forms/bulk_import.py:185 -msgid "The manufacturer of this rack type" -msgstr "Производитель этого типа стоек" - -#: dcim/forms/bulk_import.py:196 -msgid "The lowest-numbered position in the rack" -msgstr "Позиция с наименьшим юнитом в стойке" - -#: dcim/forms/bulk_import.py:201 dcim/forms/bulk_import.py:268 -msgid "Rail-to-rail width (in inches)" -msgstr "Ширина от рельса до рельса (в дюймах)" - -#: dcim/forms/bulk_import.py:207 dcim/forms/bulk_import.py:274 -msgid "Unit for outer dimensions" -msgstr "Единица измерения внешних размеров" - -#: dcim/forms/bulk_import.py:213 dcim/forms/bulk_import.py:286 -msgid "Unit for rack weights" -msgstr "Единица измерения веса стойки" - -#: dcim/forms/bulk_import.py:245 -msgid "Name of assigned tenant" -msgstr "Имя назначенного арендатора" - -#: dcim/forms/bulk_import.py:257 -msgid "Name of assigned role" -msgstr "Название назначенной роли" - -#: dcim/forms/bulk_import.py:280 dcim/forms/bulk_import.py:413 -#: dcim/forms/bulk_import.py:583 -msgid "Airflow direction" -msgstr "Направление воздушного потока" - -#: dcim/forms/bulk_import.py:312 -msgid "Parent site" -msgstr "Родительское место" - -#: dcim/forms/bulk_import.py:319 dcim/forms/bulk_import.py:1355 -msgid "Rack's location (if any)" -msgstr "Локация стойки (если есть)" - -#: dcim/forms/bulk_import.py:328 dcim/forms/model_forms.py:311 -#: dcim/tables/racks.py:222 templates/dcim/rackreservation.html:12 -#: templates/dcim/rackreservation.html:45 -msgid "Units" -msgstr "Единицы" - -#: dcim/forms/bulk_import.py:331 -msgid "Comma-separated list of individual unit numbers" -msgstr "Список отдельных номеров объектов, разделенных запятыми" - -#: dcim/forms/bulk_import.py:374 -msgid "The manufacturer which produces this device type" -msgstr "Производитель, выпускающий этот тип устройства" - -#: dcim/forms/bulk_import.py:381 -msgid "The default platform for devices of this type (optional)" -msgstr "Платформа по умолчанию для устройств этого типа (опционально)" - -#: dcim/forms/bulk_import.py:386 -msgid "Device weight" -msgstr "Вес устройства" - -#: dcim/forms/bulk_import.py:392 -msgid "Unit for device weight" -msgstr "Единица измерения веса устройства" - -#: dcim/forms/bulk_import.py:418 -msgid "Module weight" -msgstr "Вес модуля" - -#: dcim/forms/bulk_import.py:424 -msgid "Unit for module weight" -msgstr "Единица измерения веса модуля" - -#: dcim/forms/bulk_import.py:454 -msgid "Limit platform assignments to this manufacturer" -msgstr "Ограничьте назначение платформ этим производителем" - -#: dcim/forms/bulk_import.py:476 dcim/forms/bulk_import.py:1425 -#: tenancy/forms/bulk_import.py:106 -msgid "Assigned role" -msgstr "Назначенная роль" - -#: dcim/forms/bulk_import.py:489 -msgid "Device type manufacturer" -msgstr "Производитель типа устройства" - -#: dcim/forms/bulk_import.py:495 -msgid "Device type model" -msgstr "Модель типа устройства" - -#: dcim/forms/bulk_import.py:502 virtualization/forms/bulk_import.py:126 -msgid "Assigned platform" -msgstr "Назначенная платформа" - -#: dcim/forms/bulk_import.py:510 dcim/forms/bulk_import.py:514 -#: dcim/forms/model_forms.py:536 -msgid "Virtual chassis" -msgstr "Виртуальное шасси" - -#: dcim/forms/bulk_import.py:517 dcim/forms/filtersets.py:728 -#: dcim/forms/filtersets.py:898 dcim/forms/model_forms.py:522 -#: dcim/tables/devices.py:202 extras/filtersets.py:596 -#: extras/forms/filtersets.py:322 ipam/forms/filtersets.py:415 -#: ipam/forms/filtersets.py:447 templates/dcim/device.html:239 -#: templates/virtualization/cluster.html:10 -#: templates/virtualization/virtualmachine.html:92 -#: templates/virtualization/virtualmachine.html:101 -#: virtualization/filtersets.py:157 virtualization/filtersets.py:277 -#: virtualization/forms/bulk_edit.py:129 -#: virtualization/forms/bulk_import.py:92 -#: virtualization/forms/filtersets.py:99 -#: virtualization/forms/filtersets.py:123 -#: virtualization/forms/filtersets.py:204 -#: virtualization/forms/model_forms.py:79 -#: virtualization/forms/model_forms.py:176 -#: virtualization/tables/virtualmachines.py:67 +#: 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/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 msgid "Cluster" msgstr "Кластер" -#: dcim/forms/bulk_import.py:521 +#: 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/templates/extras/dashboard/widget_config.html:7 +#: netbox/virtualization/forms/bulk_edit.py:191 +msgid "Configuration" +msgstr "Конфигурация" + +#: netbox/dcim/forms/bulk_edit.py:746 netbox/netbox/navigation/menu.py:243 +#: 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 +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/object_create.py:46 netbox/templates/dcim/cable.html:32 +#: netbox/templates/dcim/consoleport.html:32 +#: netbox/templates/dcim/consoleserverport.html:32 +#: netbox/templates/dcim/devicebay.html:28 +#: netbox/templates/dcim/frontport.html:32 +#: netbox/templates/dcim/inc/panels/inventory_items.html:19 +#: netbox/templates/dcim/interface.html:42 +#: netbox/templates/dcim/inventoryitem.html:32 +#: netbox/templates/dcim/modulebay.html:34 +#: netbox/templates/dcim/poweroutlet.html:32 +#: netbox/templates/dcim/powerport.html:32 +#: netbox/templates/dcim/rearport.html:32 +#: netbox/templates/extras/customfield.html:26 +#: netbox/templates/generic/bulk_import.html:162 +msgid "Label" +msgstr "Лейбл" + +#: netbox/dcim/forms/bulk_edit.py:823 netbox/dcim/forms/filtersets.py:1068 +#: 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 +msgid "Length unit" +msgstr "Единица длины" + +#: netbox/dcim/forms/bulk_edit.py:852 +#: 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 +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 +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 +msgid "Phase" +msgstr "Фаза" + +#: netbox/dcim/forms/bulk_edit.py:954 netbox/dcim/forms/filtersets.py:1190 +#: netbox/templates/dcim/powerfeed.html:87 +msgid "Voltage" +msgstr "Напряжение" + +#: netbox/dcim/forms/bulk_edit.py:958 netbox/dcim/forms/filtersets.py:1194 +#: netbox/templates/dcim/powerfeed.html:91 +msgid "Amperage" +msgstr "Сила тока" + +#: netbox/dcim/forms/bulk_edit.py:962 netbox/dcim/forms/filtersets.py:1198 +msgid "Max utilization" +msgstr "Максимальное использование" + +#: netbox/dcim/forms/bulk_edit.py:1051 +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 +msgid "Maximum power draw (watts)" +msgstr "Максимальная потребляемая мощность (Вт)" + +#: netbox/dcim/forms/bulk_edit.py:1057 +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 +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 +msgid "Power port" +msgstr "Порт питания" + +#: netbox/dcim/forms/bulk_edit.py:1098 netbox/dcim/forms/bulk_import.py:815 +msgid "Feed leg" +msgstr "Фаза электропитания" + +#: netbox/dcim/forms/bulk_edit.py:1144 netbox/dcim/forms/bulk_edit.py:1462 +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/object_import.py:90 +#: netbox/dcim/models/device_component_templates.py:437 +#: netbox/dcim/models/device_components.py:670 +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/object_import.py:95 +#: netbox/dcim/models/device_component_templates.py:443 +#: netbox/dcim/models/device_components.py:676 +msgid "PoE type" +msgstr "Тип PoE" + +#: netbox/dcim/forms/bulk_edit.py:1166 netbox/dcim/forms/filtersets.py:1404 +#: 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/templates/dcim/consoleport.html:24 +#: netbox/templates/dcim/consoleserverport.html:24 +#: netbox/templates/dcim/frontport.html:24 +#: netbox/templates/dcim/interface.html:34 +#: netbox/templates/dcim/module.html:54 +#: netbox/templates/dcim/modulebay.html:26 +#: netbox/templates/dcim/modulebay.html:58 +#: netbox/templates/dcim/poweroutlet.html:24 +#: netbox/templates/dcim/powerport.html:24 +#: netbox/templates/dcim/rearport.html:24 +msgid "Module" +msgstr "Модуль" + +#: netbox/dcim/forms/bulk_edit.py:1442 netbox/dcim/tables/devices.py:665 +#: netbox/templates/dcim/interface.html:110 +msgid "LAG" +msgstr "LAG" + +#: netbox/dcim/forms/bulk_edit.py:1447 netbox/dcim/forms/model_forms.py:1312 +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/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/templates/vpn/ikepolicy.html:25 +#: netbox/templates/vpn/ipsecprofile.html:21 +#: netbox/templates/vpn/ipsecprofile.html:48 +#: netbox/virtualization/forms/bulk_edit.py:233 +#: netbox/virtualization/forms/bulk_import.py:165 +#: netbox/vpn/forms/bulk_edit.py:146 netbox/vpn/forms/bulk_edit.py:232 +#: netbox/vpn/forms/bulk_import.py:176 netbox/vpn/forms/bulk_import.py:234 +#: netbox/vpn/forms/filtersets.py:135 netbox/vpn/forms/filtersets.py:178 +#: netbox/vpn/forms/filtersets.py:192 netbox/vpn/tables/crypto.py:64 +#: netbox/vpn/tables/crypto.py:162 +msgid "Mode" +msgstr "Режим" + +#: 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 +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 +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 +msgid "Tagged VLANs" +msgstr "Тегированные VLAN-ы" + +#: netbox/dcim/forms/bulk_edit.py:1511 +msgid "Add tagged VLANs" +msgstr "Добавить тегированные VLAN-ы" + +#: netbox/dcim/forms/bulk_edit.py:1520 +msgid "Remove tagged VLANs" +msgstr "Удалить тегированные VLAN-ы" + +#: netbox/dcim/forms/bulk_edit.py:1536 netbox/dcim/forms/model_forms.py:1348 +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/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 +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 +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 +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 +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 +msgid "802.1Q Switching" +msgstr "Коммутация 802.1Q" + +#: netbox/dcim/forms/bulk_edit.py:1558 +msgid "Add/Remove" +msgstr "Добавить/удалить" + +#: netbox/dcim/forms/bulk_edit.py:1617 netbox/dcim/forms/bulk_edit.py:1619 +msgid "Interface mode must be specified to assign VLANs" +msgstr "Для назначения VLAN необходимо указать режим интерфейса" + +#: netbox/dcim/forms/bulk_edit.py:1624 netbox/dcim/forms/common.py:50 +msgid "An access interface cannot have tagged VLANs assigned." +msgstr "Интерфейсу доступа нельзя назначать VLAN с тегами." + +#: netbox/dcim/forms/bulk_import.py:64 +msgid "Name of parent region" +msgstr "Название родительского региона" + +#: netbox/dcim/forms/bulk_import.py:78 +msgid "Name of parent site group" +msgstr "Имя родительской группы сайтов" + +#: netbox/dcim/forms/bulk_import.py:97 +msgid "Assigned region" +msgstr "Назначенный регион" + +#: netbox/dcim/forms/bulk_import.py:104 netbox/tenancy/forms/bulk_import.py:44 +#: netbox/tenancy/forms/bulk_import.py:85 +#: netbox/wireless/forms/bulk_import.py:40 +msgid "Assigned group" +msgstr "Назначенная группа" + +#: netbox/dcim/forms/bulk_import.py:123 +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 +msgid "Assigned site" +msgstr "Назначенное место" + +#: netbox/dcim/forms/bulk_import.py:141 +msgid "Parent location" +msgstr "Родительская локация" + +#: netbox/dcim/forms/bulk_import.py:143 +msgid "Location not found." +msgstr "Локация не найдена." + +#: netbox/dcim/forms/bulk_import.py:185 +msgid "The manufacturer of this rack type" +msgstr "Производитель этого типа стоек" + +#: netbox/dcim/forms/bulk_import.py:196 +msgid "The lowest-numbered position in the rack" +msgstr "Позиция с наименьшим юнитом в стойке" + +#: netbox/dcim/forms/bulk_import.py:201 netbox/dcim/forms/bulk_import.py:276 +msgid "Rail-to-rail width (in inches)" +msgstr "Ширина от рельса до рельса (в дюймах)" + +#: netbox/dcim/forms/bulk_import.py:207 netbox/dcim/forms/bulk_import.py:286 +msgid "Unit for outer dimensions" +msgstr "Единица измерения внешних размеров" + +#: netbox/dcim/forms/bulk_import.py:213 netbox/dcim/forms/bulk_import.py:298 +msgid "Unit for rack weights" +msgstr "Единица измерения веса стойки" + +#: netbox/dcim/forms/bulk_import.py:245 +msgid "Name of assigned tenant" +msgstr "Имя назначенного арендатора" + +#: netbox/dcim/forms/bulk_import.py:257 +msgid "Name of assigned role" +msgstr "Название назначенной роли" + +#: netbox/dcim/forms/bulk_import.py:264 +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 +msgid "Airflow direction" +msgstr "Направление воздушного потока" + +#: netbox/dcim/forms/bulk_import.py:324 +msgid "Width must be set if not specifying a rack type." +msgstr "Если не указан тип стойки, необходимо задать ширину." + +#: netbox/dcim/forms/bulk_import.py:326 +msgid "U height must be set if not specifying a rack type." +msgstr "Если не указан тип стойки, необходимо задать высоту в юнитах." + +#: netbox/dcim/forms/bulk_import.py:334 +msgid "Parent site" +msgstr "Родительское место" + +#: netbox/dcim/forms/bulk_import.py:341 netbox/dcim/forms/bulk_import.py:1377 +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/templates/dcim/rackreservation.html:12 +#: netbox/templates/dcim/rackreservation.html:45 +msgid "Units" +msgstr "Единицы" + +#: netbox/dcim/forms/bulk_import.py:353 +msgid "Comma-separated list of individual unit numbers" +msgstr "Список отдельных номеров объектов, разделенных запятыми" + +#: netbox/dcim/forms/bulk_import.py:396 +msgid "The manufacturer which produces this device type" +msgstr "Производитель, выпускающий этот тип устройства" + +#: netbox/dcim/forms/bulk_import.py:403 +msgid "The default platform for devices of this type (optional)" +msgstr "Платформа по умолчанию для устройств этого типа (опционально)" + +#: netbox/dcim/forms/bulk_import.py:408 +msgid "Device weight" +msgstr "Вес устройства" + +#: netbox/dcim/forms/bulk_import.py:414 +msgid "Unit for device weight" +msgstr "Единица измерения веса устройства" + +#: netbox/dcim/forms/bulk_import.py:440 +msgid "Module weight" +msgstr "Вес модуля" + +#: netbox/dcim/forms/bulk_import.py:446 +msgid "Unit for module weight" +msgstr "Единица измерения веса модуля" + +#: netbox/dcim/forms/bulk_import.py:476 +msgid "Limit platform assignments to this manufacturer" +msgstr "Ограничьте назначение платформ этим производителем" + +#: netbox/dcim/forms/bulk_import.py:498 netbox/dcim/forms/bulk_import.py:1447 +#: netbox/tenancy/forms/bulk_import.py:106 +msgid "Assigned role" +msgstr "Назначенная роль" + +#: netbox/dcim/forms/bulk_import.py:511 +msgid "Device type manufacturer" +msgstr "Производитель типа устройства" + +#: netbox/dcim/forms/bulk_import.py:517 +msgid "Device type model" +msgstr "Модель типа устройства" + +#: netbox/dcim/forms/bulk_import.py:524 +#: netbox/virtualization/forms/bulk_import.py:126 +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 +msgid "Virtual chassis" +msgstr "Виртуальное шасси" + +#: netbox/dcim/forms/bulk_import.py:543 msgid "Virtualization cluster" msgstr "Кластер виртуализации" -#: dcim/forms/bulk_import.py:550 +#: netbox/dcim/forms/bulk_import.py:572 msgid "Assigned location (if any)" msgstr "Назначенная локация (если есть)" -#: dcim/forms/bulk_import.py:557 +#: netbox/dcim/forms/bulk_import.py:579 msgid "Assigned rack (if any)" msgstr "Назначенная стойка (если есть)" -#: dcim/forms/bulk_import.py:560 +#: netbox/dcim/forms/bulk_import.py:582 msgid "Face" msgstr "Лицевая сторона" -#: dcim/forms/bulk_import.py:563 +#: netbox/dcim/forms/bulk_import.py:585 msgid "Mounted rack face" msgstr "Сторона монтажа в стойке" -#: dcim/forms/bulk_import.py:570 +#: netbox/dcim/forms/bulk_import.py:592 msgid "Parent device (for child devices)" msgstr "Родительское устройство (для дочерних устройств)" -#: dcim/forms/bulk_import.py:573 +#: netbox/dcim/forms/bulk_import.py:595 msgid "Device bay" msgstr "Отсек для устройств" -#: dcim/forms/bulk_import.py:577 +#: netbox/dcim/forms/bulk_import.py:599 msgid "Device bay in which this device is installed (for child devices)" msgstr "" "Отсек для устройств, в котором установлено данное устройство (для детских " "устройств)" -#: dcim/forms/bulk_import.py:644 +#: netbox/dcim/forms/bulk_import.py:666 msgid "The device in which this module is installed" msgstr "Устройство, в котором установлен данный модуль" -#: dcim/forms/bulk_import.py:647 dcim/forms/model_forms.py:640 +#: netbox/dcim/forms/bulk_import.py:669 netbox/dcim/forms/model_forms.py:640 msgid "Module bay" msgstr "Отсек для модулей" -#: dcim/forms/bulk_import.py:650 +#: netbox/dcim/forms/bulk_import.py:672 msgid "The module bay in which this module is installed" msgstr "Отсек для модулей, в котором установлен данный модуль" -#: dcim/forms/bulk_import.py:656 +#: netbox/dcim/forms/bulk_import.py:678 msgid "The type of module" msgstr "Тип модуля" -#: dcim/forms/bulk_import.py:664 dcim/forms/model_forms.py:656 +#: netbox/dcim/forms/bulk_import.py:686 netbox/dcim/forms/model_forms.py:656 msgid "Replicate components" msgstr "Репликация компонентов" -#: dcim/forms/bulk_import.py:666 +#: netbox/dcim/forms/bulk_import.py:688 msgid "" "Automatically populate components associated with this module type (enabled " "by default)" @@ -3951,262 +4378,269 @@ msgstr "" "Автоматическое заполнение компонентов, связанных с этим типом модуля " "(включено по умолчанию)" -#: dcim/forms/bulk_import.py:669 dcim/forms/model_forms.py:662 +#: netbox/dcim/forms/bulk_import.py:691 netbox/dcim/forms/model_forms.py:662 msgid "Adopt components" msgstr "Принять компоненты" -#: dcim/forms/bulk_import.py:671 dcim/forms/model_forms.py:665 +#: netbox/dcim/forms/bulk_import.py:693 netbox/dcim/forms/model_forms.py:665 msgid "Adopt already existing components" msgstr "Используйте уже существующие компоненты" -#: dcim/forms/bulk_import.py:711 dcim/forms/bulk_import.py:737 -#: dcim/forms/bulk_import.py:763 +#: netbox/dcim/forms/bulk_import.py:733 netbox/dcim/forms/bulk_import.py:759 +#: netbox/dcim/forms/bulk_import.py:785 msgid "Port type" msgstr "Тип порта" -#: dcim/forms/bulk_import.py:719 dcim/forms/bulk_import.py:745 +#: netbox/dcim/forms/bulk_import.py:741 netbox/dcim/forms/bulk_import.py:767 msgid "Port speed in bps" msgstr "Скорость порта в бит/с" -#: dcim/forms/bulk_import.py:783 +#: netbox/dcim/forms/bulk_import.py:805 msgid "Outlet type" msgstr "Тип розетки" -#: dcim/forms/bulk_import.py:790 +#: netbox/dcim/forms/bulk_import.py:812 msgid "Local power port which feeds this outlet" msgstr "Локальный порт питания, питающий эту розетку" -#: dcim/forms/bulk_import.py:796 +#: netbox/dcim/forms/bulk_import.py:818 msgid "Electrical phase (for three-phase circuits)" msgstr "Электрическая фаза (для трехфазных цепей)" -#: dcim/forms/bulk_import.py:837 dcim/forms/model_forms.py:1316 -#: virtualization/forms/bulk_import.py:155 -#: virtualization/forms/model_forms.py:305 +#: 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 msgid "Parent interface" msgstr "Родительский интерфейс" -#: dcim/forms/bulk_import.py:844 dcim/forms/model_forms.py:1324 -#: virtualization/forms/bulk_import.py:162 -#: virtualization/forms/model_forms.py:313 +#: 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 msgid "Bridged interface" msgstr "Мостовой интерфейс" -#: dcim/forms/bulk_import.py:847 +#: netbox/dcim/forms/bulk_import.py:869 msgid "Lag" msgstr "Lag" -#: dcim/forms/bulk_import.py:851 +#: netbox/dcim/forms/bulk_import.py:873 msgid "Parent LAG interface" msgstr "Родительский интерфейс LAG" -#: dcim/forms/bulk_import.py:854 +#: netbox/dcim/forms/bulk_import.py:876 msgid "Vdcs" msgstr "Виртуальные контексты устройств(VDCs)" -#: dcim/forms/bulk_import.py:859 +#: netbox/dcim/forms/bulk_import.py:881 msgid "VDC names separated by commas, encased with double quotes. Example:" msgstr "Имена VDC разделены запятыми и заключены в двойные кавычки. Пример:" -#: dcim/forms/bulk_import.py:865 +#: netbox/dcim/forms/bulk_import.py:887 msgid "Physical medium" msgstr "Физическая среда" -#: dcim/forms/bulk_import.py:868 dcim/forms/filtersets.py:1365 +#: netbox/dcim/forms/bulk_import.py:890 netbox/dcim/forms/filtersets.py:1365 msgid "Duplex" msgstr "Дуплекс" -#: dcim/forms/bulk_import.py:873 +#: netbox/dcim/forms/bulk_import.py:895 msgid "Poe mode" msgstr "Режим Poe" -#: dcim/forms/bulk_import.py:879 +#: netbox/dcim/forms/bulk_import.py:901 msgid "Poe type" msgstr "Тип Poe" -#: dcim/forms/bulk_import.py:888 virtualization/forms/bulk_import.py:168 +#: netbox/dcim/forms/bulk_import.py:910 +#: netbox/virtualization/forms/bulk_import.py:168 msgid "IEEE 802.1Q operational mode (for L2 interfaces)" msgstr "Рабочий режим IEEE 802.1Q (для интерфейсов L2)" -#: dcim/forms/bulk_import.py:895 ipam/forms/bulk_import.py:161 -#: ipam/forms/bulk_import.py:247 ipam/forms/bulk_import.py:283 -#: ipam/forms/filtersets.py:201 ipam/forms/filtersets.py:277 -#: ipam/forms/filtersets.py:336 virtualization/forms/bulk_import.py:175 +#: netbox/dcim/forms/bulk_import.py: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 msgid "Assigned VRF" msgstr "Назначенный VRF" -#: dcim/forms/bulk_import.py:898 +#: netbox/dcim/forms/bulk_import.py:920 msgid "Rf role" msgstr "Роль Rf" -#: dcim/forms/bulk_import.py:901 +#: netbox/dcim/forms/bulk_import.py:923 msgid "Wireless role (AP/station)" msgstr "Роль беспроводной сети (точка доступа/станция)" -#: dcim/forms/bulk_import.py:937 +#: netbox/dcim/forms/bulk_import.py:959 #, python-brace-format msgid "VDC {vdc} is not assigned to device {device}" msgstr "В ПОСТОЯННОГО ТОКА {vdc} не присвоено устройству {device}" -#: dcim/forms/bulk_import.py:951 dcim/forms/model_forms.py:1000 -#: dcim/forms/model_forms.py:1575 dcim/forms/object_import.py:117 +#: 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 msgid "Rear port" msgstr "Задний порт" -#: dcim/forms/bulk_import.py:954 +#: netbox/dcim/forms/bulk_import.py:976 msgid "Corresponding rear port" msgstr "Соответствующий задний порт" -#: dcim/forms/bulk_import.py:959 dcim/forms/bulk_import.py:1000 -#: dcim/forms/bulk_import.py:1216 +#: netbox/dcim/forms/bulk_import.py:981 netbox/dcim/forms/bulk_import.py:1022 +#: netbox/dcim/forms/bulk_import.py:1238 msgid "Physical medium classification" msgstr "Классификация физических сред" -#: dcim/forms/bulk_import.py:1028 dcim/tables/devices.py:822 +#: netbox/dcim/forms/bulk_import.py:1050 netbox/dcim/tables/devices.py:822 msgid "Installed device" msgstr "Установленное устройство" -#: dcim/forms/bulk_import.py:1032 +#: netbox/dcim/forms/bulk_import.py:1054 msgid "Child device installed within this bay" msgstr "Дочернее устройство, установленное в этом отсеке" -#: dcim/forms/bulk_import.py:1034 +#: netbox/dcim/forms/bulk_import.py:1056 msgid "Child device not found." msgstr "Дочернее устройство не найдено." -#: dcim/forms/bulk_import.py:1092 +#: netbox/dcim/forms/bulk_import.py:1114 msgid "Parent inventory item" msgstr "Предмет родительского инвентаря" -#: dcim/forms/bulk_import.py:1095 +#: netbox/dcim/forms/bulk_import.py:1117 msgid "Component type" msgstr "Тип компонента" -#: dcim/forms/bulk_import.py:1099 +#: netbox/dcim/forms/bulk_import.py:1121 msgid "Component Type" msgstr "Тип компонента" -#: dcim/forms/bulk_import.py:1102 +#: netbox/dcim/forms/bulk_import.py:1124 msgid "Compnent name" msgstr "Имя компонента" -#: dcim/forms/bulk_import.py:1104 +#: netbox/dcim/forms/bulk_import.py:1126 msgid "Component Name" msgstr "Имя компонента" -#: dcim/forms/bulk_import.py:1146 +#: netbox/dcim/forms/bulk_import.py:1168 #, python-brace-format msgid "Component not found: {device} - {component_name}" msgstr "Компонент не найден: {device} - {component_name}" -#: dcim/forms/bulk_import.py:1171 +#: netbox/dcim/forms/bulk_import.py:1193 msgid "Side A device" msgstr "Устройство на стороне А" -#: dcim/forms/bulk_import.py:1174 dcim/forms/bulk_import.py:1192 +#: netbox/dcim/forms/bulk_import.py:1196 netbox/dcim/forms/bulk_import.py:1214 msgid "Device name" msgstr "Имя устройства" -#: dcim/forms/bulk_import.py:1177 +#: netbox/dcim/forms/bulk_import.py:1199 msgid "Side A type" msgstr "Сторона типа А" -#: dcim/forms/bulk_import.py:1180 dcim/forms/bulk_import.py:1198 +#: netbox/dcim/forms/bulk_import.py:1202 netbox/dcim/forms/bulk_import.py:1220 msgid "Termination type" msgstr "Тип точки подключения" -#: dcim/forms/bulk_import.py:1183 +#: netbox/dcim/forms/bulk_import.py:1205 msgid "Side A name" msgstr "Название стороны А" -#: dcim/forms/bulk_import.py:1184 dcim/forms/bulk_import.py:1202 +#: netbox/dcim/forms/bulk_import.py:1206 netbox/dcim/forms/bulk_import.py:1224 msgid "Termination name" msgstr "Название точки подключения" -#: dcim/forms/bulk_import.py:1189 +#: netbox/dcim/forms/bulk_import.py:1211 msgid "Side B device" msgstr "Устройство на стороне B" -#: dcim/forms/bulk_import.py:1195 +#: netbox/dcim/forms/bulk_import.py:1217 msgid "Side B type" msgstr "Тип стороны B" -#: dcim/forms/bulk_import.py:1201 +#: netbox/dcim/forms/bulk_import.py:1223 msgid "Side B name" msgstr "Название стороны B" -#: dcim/forms/bulk_import.py:1210 wireless/forms/bulk_import.py:86 +#: netbox/dcim/forms/bulk_import.py:1232 +#: netbox/wireless/forms/bulk_import.py:86 msgid "Connection status" msgstr "Состояние подключения" -#: dcim/forms/bulk_import.py:1262 +#: netbox/dcim/forms/bulk_import.py:1284 #, python-brace-format msgid "Side {side_upper}: {device} {termination_object} is already connected" msgstr "Сторона {side_upper}: {device} {termination_object} уже подключен" -#: dcim/forms/bulk_import.py:1268 +#: netbox/dcim/forms/bulk_import.py:1290 #, python-brace-format msgid "{side_upper} side termination not found: {device} {name}" msgstr "{side_upper} боковое завершение не найдено: {device} {name}" -#: dcim/forms/bulk_import.py:1293 dcim/forms/model_forms.py:785 -#: dcim/tables/devices.py:1027 templates/dcim/device.html:132 -#: templates/dcim/virtualchassis.html:27 templates/dcim/virtualchassis.html:67 +#: 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/templates/dcim/virtualchassis.html:27 +#: netbox/templates/dcim/virtualchassis.html:67 msgid "Master" msgstr "Мастер" -#: dcim/forms/bulk_import.py:1297 +#: netbox/dcim/forms/bulk_import.py:1319 msgid "Master device" msgstr "Мастер-устройство" -#: dcim/forms/bulk_import.py:1314 +#: netbox/dcim/forms/bulk_import.py:1336 msgid "Name of parent site" msgstr "Имя родительского сайта" -#: dcim/forms/bulk_import.py:1348 +#: netbox/dcim/forms/bulk_import.py:1370 msgid "Upstream power panel" -msgstr "Панель питания в восходящем направлении" +msgstr "Распределительный щит" -#: dcim/forms/bulk_import.py:1378 +#: netbox/dcim/forms/bulk_import.py:1400 msgid "Primary or redundant" msgstr "Основное или резервное" -#: dcim/forms/bulk_import.py:1383 +#: netbox/dcim/forms/bulk_import.py:1405 msgid "Supply type (AC/DC)" msgstr "Тип питания (AC/DC)" -#: dcim/forms/bulk_import.py:1388 +#: netbox/dcim/forms/bulk_import.py:1410 msgid "Single or three-phase" msgstr "Однофазный или трехфазный" -#: dcim/forms/bulk_import.py:1439 dcim/forms/model_forms.py:1670 -#: templates/dcim/device.html:190 templates/dcim/virtualdevicecontext.html:30 -#: templates/virtualization/virtualmachine.html:52 +#: netbox/dcim/forms/bulk_import.py:1461 netbox/dcim/forms/model_forms.py:1677 +#: netbox/templates/dcim/device.html:190 +#: netbox/templates/dcim/virtualdevicecontext.html:30 +#: netbox/templates/virtualization/virtualmachine.html:52 msgid "Primary IPv4" msgstr "Основной IPv4" -#: dcim/forms/bulk_import.py:1443 +#: netbox/dcim/forms/bulk_import.py:1465 msgid "IPv4 address with mask, e.g. 1.2.3.4/24" msgstr "Адрес IPv4 с маской, напр. 1.2.3.4/24" -#: dcim/forms/bulk_import.py:1446 dcim/forms/model_forms.py:1679 -#: templates/dcim/device.html:206 templates/dcim/virtualdevicecontext.html:41 -#: templates/virtualization/virtualmachine.html:68 +#: netbox/dcim/forms/bulk_import.py:1468 netbox/dcim/forms/model_forms.py:1686 +#: netbox/templates/dcim/device.html:206 +#: netbox/templates/dcim/virtualdevicecontext.html:41 +#: netbox/templates/virtualization/virtualmachine.html:68 msgid "Primary IPv6" msgstr "Основной IPv6" -#: dcim/forms/bulk_import.py:1450 +#: netbox/dcim/forms/bulk_import.py:1472 msgid "IPv6 address with prefix length, e.g. 2001:db8::1/64" msgstr "Адрес IPv6 с длиной префикса, напр. 2001:db8::1/64" -#: dcim/forms/common.py:24 dcim/models/device_components.py:527 -#: templates/dcim/interface.html:57 -#: templates/virtualization/vminterface.html:55 -#: virtualization/forms/bulk_edit.py:225 +#: netbox/dcim/forms/common.py:24 netbox/dcim/models/device_components.py:527 +#: netbox/templates/dcim/interface.html:57 +#: netbox/templates/virtualization/vminterface.html:55 +#: netbox/virtualization/forms/bulk_edit.py:225 msgid "MTU" msgstr "MTU" -#: dcim/forms/common.py:65 +#: netbox/dcim/forms/common.py:65 #, python-brace-format msgid "" "The tagged VLANs ({vlans}) must belong to the same site as the interface's " @@ -4216,7 +4650,7 @@ msgstr "" "родительское устройство/виртуальная машина интерфейса, или они должны быть " "глобальными" -#: dcim/forms/common.py:126 +#: netbox/dcim/forms/common.py:126 msgid "" "Cannot install module with placeholder values in a module bay with no " "position defined." @@ -4224,7 +4658,7 @@ msgstr "" "Невозможно установить модуль со значениями-заполнителями в модульном отсеке " "без определенного положения." -#: dcim/forms/common.py:131 +#: netbox/dcim/forms/common.py:131 #, python-brace-format msgid "" "Cannot install module with placeholder values in a module bay tree {level} " @@ -4233,189 +4667,200 @@ msgstr "" "Невозможно установить модуль с указанами значениями на уровне {level}, но " "переданы значения {tokens}." -#: dcim/forms/common.py:144 +#: netbox/dcim/forms/common.py:144 #, python-brace-format msgid "Cannot adopt {model} {name} as it already belongs to a module" msgstr "" "Невозможно принять {model} {name} поскольку оно уже принадлежит модулю" -#: dcim/forms/common.py:153 +#: netbox/dcim/forms/common.py:153 #, python-brace-format msgid "A {model} named {name} already exists" msgstr "A {model} названный {name} уже существует" -#: dcim/forms/connections.py:49 dcim/forms/model_forms.py:738 -#: dcim/tables/power.py:66 templates/dcim/inc/cable_termination.html:37 -#: templates/dcim/powerfeed.html:24 templates/dcim/powerpanel.html:19 -#: templates/dcim/trace/powerpanel.html:4 +#: netbox/dcim/forms/connections.py:49 netbox/dcim/forms/model_forms.py:738 +#: netbox/dcim/tables/power.py:66 +#: netbox/templates/dcim/inc/cable_termination.html:37 +#: netbox/templates/dcim/powerfeed.html:24 +#: netbox/templates/dcim/powerpanel.html:19 +#: netbox/templates/dcim/trace/powerpanel.html:4 msgid "Power Panel" -msgstr "Панель питания" +msgstr "Распределительный щит" -#: dcim/forms/connections.py:58 dcim/forms/model_forms.py:765 -#: templates/dcim/powerfeed.html:21 templates/dcim/powerport.html:80 +#: netbox/dcim/forms/connections.py:58 netbox/dcim/forms/model_forms.py:765 +#: netbox/templates/dcim/powerfeed.html:21 +#: netbox/templates/dcim/powerport.html:80 msgid "Power Feed" -msgstr "Подача питания" +msgstr "Кабель питания" -#: dcim/forms/connections.py:81 +#: netbox/dcim/forms/connections.py:81 msgid "Side" msgstr "Сторона" -#: dcim/forms/filtersets.py:136 dcim/tables/devices.py:295 +#: netbox/dcim/forms/filtersets.py:136 netbox/dcim/tables/devices.py:295 msgid "Device Status" msgstr "Статус устройства" -#: dcim/forms/filtersets.py:149 +#: netbox/dcim/forms/filtersets.py:149 msgid "Parent region" msgstr "Родительский регион" -#: dcim/forms/filtersets.py:163 tenancy/forms/bulk_import.py:28 -#: tenancy/forms/bulk_import.py:62 tenancy/forms/filtersets.py:33 -#: tenancy/forms/filtersets.py:62 wireless/forms/bulk_import.py:25 -#: wireless/forms/filtersets.py:25 +#: netbox/dcim/forms/filtersets.py:163 netbox/tenancy/forms/bulk_import.py:28 +#: netbox/tenancy/forms/bulk_import.py:62 +#: netbox/tenancy/forms/filtersets.py:33 netbox/tenancy/forms/filtersets.py:62 +#: netbox/wireless/forms/bulk_import.py:25 +#: netbox/wireless/forms/filtersets.py:25 msgid "Parent group" msgstr "Родительская группа" -#: dcim/forms/filtersets.py:242 templates/dcim/location.html:58 -#: templates/dcim/site.html:56 +#: netbox/dcim/forms/filtersets.py:242 netbox/templates/dcim/location.html:58 +#: netbox/templates/dcim/site.html:56 msgid "Facility" msgstr "Объект" -#: dcim/forms/filtersets.py:380 -msgid "Rack type" -msgstr "Тип стойки" - -#: dcim/forms/filtersets.py:397 +#: netbox/dcim/forms/filtersets.py:397 msgid "Function" msgstr "Функция" -#: dcim/forms/filtersets.py:483 dcim/forms/model_forms.py:373 -#: templates/inc/panels/image_attachments.html:6 +#: netbox/dcim/forms/filtersets.py:483 netbox/dcim/forms/model_forms.py:373 +#: netbox/templates/inc/panels/image_attachments.html:6 msgid "Images" msgstr "Изображения" -#: dcim/forms/filtersets.py:486 dcim/forms/filtersets.py:611 -#: dcim/forms/filtersets.py:726 +#: netbox/dcim/forms/filtersets.py:486 netbox/dcim/forms/filtersets.py:611 +#: netbox/dcim/forms/filtersets.py:726 msgid "Components" msgstr "Компоненты" -#: dcim/forms/filtersets.py:506 +#: netbox/dcim/forms/filtersets.py:506 msgid "Subdevice role" msgstr "Роль подустройства" -#: dcim/forms/filtersets.py:790 dcim/tables/racks.py:54 -#: templates/dcim/racktype.html:20 +#: netbox/dcim/forms/filtersets.py:790 netbox/dcim/tables/racks.py:54 +#: netbox/templates/dcim/racktype.html:20 msgid "Model" msgstr "Модель" -#: dcim/forms/filtersets.py:834 +#: netbox/dcim/forms/filtersets.py:834 msgid "Has an OOB IP" msgstr "Имеет IP-адрес OOB" -#: dcim/forms/filtersets.py:841 +#: netbox/dcim/forms/filtersets.py:841 msgid "Virtual chassis member" msgstr "Элемент виртуального шасси" -#: dcim/forms/filtersets.py:890 +#: netbox/dcim/forms/filtersets.py:890 msgid "Has virtual device contexts" msgstr "Имеет контексты виртуальных устройств" -#: dcim/forms/filtersets.py:903 extras/filtersets.py:585 -#: ipam/forms/filtersets.py:452 virtualization/forms/filtersets.py:112 +#: netbox/dcim/forms/filtersets.py:903 netbox/extras/filtersets.py:585 +#: netbox/ipam/forms/filtersets.py:452 +#: netbox/virtualization/forms/filtersets.py:112 msgid "Cluster group" msgstr "Кластерная группа" -#: dcim/forms/filtersets.py:1210 +#: netbox/dcim/forms/filtersets.py:1210 msgid "Cabled" msgstr "Кабельный" -#: dcim/forms/filtersets.py:1217 +#: netbox/dcim/forms/filtersets.py:1217 msgid "Occupied" msgstr "Занятый" -#: dcim/forms/filtersets.py:1244 dcim/forms/filtersets.py:1269 -#: dcim/forms/filtersets.py:1293 dcim/forms/filtersets.py:1313 -#: dcim/forms/filtersets.py:1336 dcim/tables/devices.py:364 -#: templates/dcim/consoleport.html:55 templates/dcim/consoleserverport.html:55 -#: templates/dcim/frontport.html:69 templates/dcim/interface.html:140 -#: templates/dcim/powerfeed.html:110 templates/dcim/poweroutlet.html:59 -#: templates/dcim/powerport.html:59 templates/dcim/rearport.html:65 +#: netbox/dcim/forms/filtersets.py: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/templates/dcim/consoleport.html:55 +#: netbox/templates/dcim/consoleserverport.html:55 +#: netbox/templates/dcim/frontport.html:69 +#: netbox/templates/dcim/interface.html:140 +#: netbox/templates/dcim/powerfeed.html:110 +#: netbox/templates/dcim/poweroutlet.html:59 +#: netbox/templates/dcim/powerport.html:59 +#: netbox/templates/dcim/rearport.html:65 msgid "Connection" msgstr "Подключение" -#: dcim/forms/filtersets.py:1348 extras/forms/bulk_edit.py:326 -#: extras/forms/bulk_import.py:247 extras/forms/filtersets.py:464 -#: extras/forms/model_forms.py:675 extras/tables/tables.py:579 -#: templates/extras/journalentry.html:30 +#: netbox/dcim/forms/filtersets.py:1348 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 "Вид" -#: dcim/forms/filtersets.py:1377 +#: netbox/dcim/forms/filtersets.py:1377 msgid "Mgmt only" msgstr "Только менеджмент" -#: dcim/forms/filtersets.py:1389 dcim/forms/model_forms.py:1383 -#: dcim/models/device_components.py:629 templates/dcim/interface.html:129 +#: 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 msgid "WWN" msgstr "Глобальное уникальное имя (WWN)" -#: dcim/forms/filtersets.py:1409 +#: netbox/dcim/forms/filtersets.py:1409 msgid "Wireless channel" msgstr "Беспроводной канал" -#: dcim/forms/filtersets.py:1413 +#: netbox/dcim/forms/filtersets.py:1413 msgid "Channel frequency (MHz)" msgstr "Частота канала (МГц)" -#: dcim/forms/filtersets.py:1417 +#: netbox/dcim/forms/filtersets.py:1417 msgid "Channel width (MHz)" msgstr "Ширина канала (МГц)" -#: dcim/forms/filtersets.py:1421 templates/dcim/interface.html:85 +#: netbox/dcim/forms/filtersets.py:1421 +#: netbox/templates/dcim/interface.html:85 msgid "Transmit power (dBm)" msgstr "Мощность передачи (дБм)" -#: dcim/forms/filtersets.py:1446 dcim/forms/filtersets.py:1471 -#: dcim/tables/devices.py:327 templates/dcim/cable.html:12 -#: templates/dcim/cable_trace.html:46 templates/dcim/frontport.html:77 -#: templates/dcim/htmx/cable_edit.html:50 -#: templates/dcim/inc/connection_endpoints.html:4 -#: templates/dcim/rearport.html:73 templates/dcim/trace/cable.html:7 +#: netbox/dcim/forms/filtersets.py:1446 netbox/dcim/forms/filtersets.py:1471 +#: netbox/dcim/tables/devices.py:327 netbox/templates/dcim/cable.html:12 +#: netbox/templates/dcim/cable_trace.html:46 +#: netbox/templates/dcim/frontport.html:77 +#: netbox/templates/dcim/htmx/cable_edit.html:50 +#: netbox/templates/dcim/inc/connection_endpoints.html:4 +#: netbox/templates/dcim/rearport.html:73 +#: netbox/templates/dcim/trace/cable.html:7 msgid "Cable" msgstr "Кабель" -#: dcim/forms/filtersets.py:1550 dcim/tables/devices.py:949 +#: netbox/dcim/forms/filtersets.py:1550 netbox/dcim/tables/devices.py:949 msgid "Discovered" msgstr "Обнаружено" -#: dcim/forms/formsets.py:20 +#: netbox/dcim/forms/formsets.py:20 #, python-brace-format msgid "A virtual chassis member already exists in position {vc_position}." msgstr "Виртуальный элемент шасси уже находится на месте {vc_position}." -#: dcim/forms/model_forms.py:140 +#: netbox/dcim/forms/model_forms.py:140 msgid "Contact Info" msgstr "Контактная информация" -#: dcim/forms/model_forms.py:195 templates/dcim/rackrole.html:19 +#: netbox/dcim/forms/model_forms.py:195 netbox/templates/dcim/rackrole.html:19 msgid "Rack Role" msgstr "Роль стойки" -#: dcim/forms/model_forms.py:212 dcim/forms/model_forms.py:362 -#: dcim/forms/model_forms.py:446 utilities/forms/fields/fields.py:47 +#: netbox/dcim/forms/model_forms.py:212 netbox/dcim/forms/model_forms.py:362 +#: netbox/dcim/forms/model_forms.py:446 +#: netbox/utilities/forms/fields/fields.py:47 msgid "Slug" msgstr "Подстрока" -#: dcim/forms/model_forms.py:259 +#: netbox/dcim/forms/model_forms.py:259 msgid "Select a pre-defined rack type, or set physical characteristics below." msgstr "" "Выберите заранее определенный тип стойки или задайте физические " "характеристики ниже." -#: dcim/forms/model_forms.py:265 +#: netbox/dcim/forms/model_forms.py:265 msgid "Inventory Control" msgstr "Управление запасами" -#: dcim/forms/model_forms.py:313 +#: netbox/dcim/forms/model_forms.py:313 msgid "" "Comma-separated list of numeric unit IDs. A range may be specified using a " "hyphen." @@ -4423,144 +4868,175 @@ msgstr "" "Список числовых идентификаторов, разделенных запятыми. Диапазон можно " "указать с помощью дефиса." -#: dcim/forms/model_forms.py:322 dcim/tables/racks.py:202 +#: netbox/dcim/forms/model_forms.py:322 netbox/dcim/tables/racks.py:202 msgid "Reservation" msgstr "Резервирование" -#: dcim/forms/model_forms.py:423 templates/dcim/devicerole.html:23 +#: netbox/dcim/forms/model_forms.py:423 +#: netbox/templates/dcim/devicerole.html:23 msgid "Device Role" msgstr "Роль устройства" -#: dcim/forms/model_forms.py:490 dcim/models/devices.py:644 +#: netbox/dcim/forms/model_forms.py:490 netbox/dcim/models/devices.py:644 msgid "The lowest-numbered unit occupied by the device" msgstr "Устройство с наименьшим номером, занимаемое устройством" -#: dcim/forms/model_forms.py:547 +#: netbox/dcim/forms/model_forms.py:547 msgid "The position in the virtual chassis this device is identified by" msgstr "Положение в виртуальном корпусе этого устройства определяется по" -#: dcim/forms/model_forms.py:552 +#: netbox/dcim/forms/model_forms.py:552 msgid "The priority of the device in the virtual chassis" msgstr "Приоритет устройства в виртуальном шасси" -#: dcim/forms/model_forms.py:659 +#: netbox/dcim/forms/model_forms.py:659 msgid "Automatically populate components associated with this module type" msgstr "Автоматическое заполнение компонентов, связанных с этим типом модуля" -#: dcim/forms/model_forms.py:767 +#: netbox/dcim/forms/model_forms.py:767 msgid "Characteristics" msgstr "Характеристики" -#: dcim/forms/model_forms.py:1087 +#: netbox/dcim/forms/model_forms.py:914 +#, python-brace-format +msgid "" +"Alphanumeric ranges are supported for bulk creation. Mixed cases and types " +"within a single range are not supported (example: " +"[ge,xe]-0/0/[0-9]). The token {module}, if " +"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" msgstr "Шаблон консольного порта" -#: dcim/forms/model_forms.py:1095 +#: netbox/dcim/forms/model_forms.py:1102 msgid "Console server port template" msgstr "Шаблон порта консольного сервера" -#: dcim/forms/model_forms.py:1103 +#: netbox/dcim/forms/model_forms.py:1110 msgid "Front port template" msgstr "Шаблон переднего порта" -#: dcim/forms/model_forms.py:1111 +#: netbox/dcim/forms/model_forms.py:1118 msgid "Interface template" msgstr "Шаблон интерфейса" -#: dcim/forms/model_forms.py:1119 +#: netbox/dcim/forms/model_forms.py:1126 msgid "Power outlet template" msgstr "Шаблон розетки питания" -#: dcim/forms/model_forms.py:1127 +#: netbox/dcim/forms/model_forms.py:1134 msgid "Power port template" msgstr "Шаблон порта питания" -#: dcim/forms/model_forms.py:1135 +#: netbox/dcim/forms/model_forms.py:1142 msgid "Rear port template" msgstr "Шаблон заднего порта" -#: dcim/forms/model_forms.py:1144 dcim/forms/model_forms.py:1388 -#: dcim/forms/model_forms.py:1551 dcim/forms/model_forms.py:1583 -#: dcim/tables/connections.py:65 ipam/forms/bulk_import.py:318 -#: ipam/forms/model_forms.py:280 ipam/forms/model_forms.py:289 -#: ipam/tables/fhrp.py:64 ipam/tables/ip.py:372 ipam/tables/vlans.py:169 -#: templates/circuits/inc/circuit_termination_fields.html:51 -#: templates/dcim/frontport.html:106 templates/dcim/interface.html:27 -#: templates/dcim/interface.html:184 templates/dcim/interface.html:310 -#: templates/dcim/rearport.html:102 -#: templates/virtualization/vminterface.html:18 -#: templates/vpn/tunneltermination.html:31 -#: templates/wireless/inc/wirelesslink_interface.html:10 -#: templates/wireless/wirelesslink.html:10 -#: templates/wireless/wirelesslink.html:55 -#: virtualization/forms/model_forms.py:348 vpn/forms/bulk_import.py:297 -#: vpn/forms/model_forms.py:436 vpn/forms/model_forms.py:445 -#: wireless/forms/model_forms.py:113 wireless/forms/model_forms.py:155 +#: netbox/dcim/forms/model_forms.py: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 "Интерфейс" -#: dcim/forms/model_forms.py:1145 dcim/forms/model_forms.py:1584 -#: dcim/tables/connections.py:27 templates/dcim/consoleport.html:17 -#: templates/dcim/consoleserverport.html:74 templates/dcim/frontport.html:112 +#: netbox/dcim/forms/model_forms.py:1152 netbox/dcim/forms/model_forms.py:1591 +#: netbox/dcim/tables/connections.py:27 +#: netbox/templates/dcim/consoleport.html:17 +#: netbox/templates/dcim/consoleserverport.html:74 +#: netbox/templates/dcim/frontport.html:112 msgid "Console Port" msgstr "Консольный порт" -#: dcim/forms/model_forms.py:1146 dcim/forms/model_forms.py:1585 -#: templates/dcim/consoleport.html:73 templates/dcim/consoleserverport.html:17 -#: templates/dcim/frontport.html:109 +#: netbox/dcim/forms/model_forms.py:1153 netbox/dcim/forms/model_forms.py:1592 +#: netbox/templates/dcim/consoleport.html:73 +#: netbox/templates/dcim/consoleserverport.html:17 +#: netbox/templates/dcim/frontport.html:109 msgid "Console Server Port" msgstr "Порт консольного сервера" -#: dcim/forms/model_forms.py:1147 dcim/forms/model_forms.py:1586 -#: templates/circuits/inc/circuit_termination_fields.html:52 -#: templates/dcim/consoleport.html:76 templates/dcim/consoleserverport.html:77 -#: templates/dcim/frontport.html:17 templates/dcim/frontport.html:115 -#: templates/dcim/interface.html:187 templates/dcim/rearport.html:105 +#: netbox/dcim/forms/model_forms.py:1154 netbox/dcim/forms/model_forms.py:1593 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:52 +#: netbox/templates/dcim/consoleport.html:76 +#: netbox/templates/dcim/consoleserverport.html:77 +#: netbox/templates/dcim/frontport.html:17 +#: netbox/templates/dcim/frontport.html:115 +#: netbox/templates/dcim/interface.html:187 +#: netbox/templates/dcim/rearport.html:105 msgid "Front Port" msgstr "Передний порт" -#: dcim/forms/model_forms.py:1148 dcim/forms/model_forms.py:1587 -#: dcim/tables/devices.py:710 -#: templates/circuits/inc/circuit_termination_fields.html:53 -#: templates/dcim/consoleport.html:79 templates/dcim/consoleserverport.html:80 -#: templates/dcim/frontport.html:50 templates/dcim/frontport.html:118 -#: templates/dcim/interface.html:190 templates/dcim/rearport.html:17 -#: templates/dcim/rearport.html:108 +#: netbox/dcim/forms/model_forms.py:1155 netbox/dcim/forms/model_forms.py:1594 +#: netbox/dcim/tables/devices.py:710 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:53 +#: netbox/templates/dcim/consoleport.html:79 +#: netbox/templates/dcim/consoleserverport.html:80 +#: netbox/templates/dcim/frontport.html:50 +#: netbox/templates/dcim/frontport.html:118 +#: netbox/templates/dcim/interface.html:190 +#: netbox/templates/dcim/rearport.html:17 +#: netbox/templates/dcim/rearport.html:108 msgid "Rear Port" msgstr "Задний порт" -#: dcim/forms/model_forms.py:1149 dcim/forms/model_forms.py:1588 -#: dcim/tables/connections.py:46 dcim/tables/devices.py:512 -#: templates/dcim/poweroutlet.html:44 templates/dcim/powerport.html:17 +#: 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/templates/dcim/powerport.html:17 msgid "Power Port" msgstr "Порт питания" -#: dcim/forms/model_forms.py:1150 dcim/forms/model_forms.py:1589 -#: templates/dcim/poweroutlet.html:17 templates/dcim/powerport.html:77 +#: netbox/dcim/forms/model_forms.py:1157 netbox/dcim/forms/model_forms.py:1596 +#: netbox/templates/dcim/poweroutlet.html:17 +#: netbox/templates/dcim/powerport.html:77 msgid "Power Outlet" msgstr "Розетка питания" -#: dcim/forms/model_forms.py:1152 dcim/forms/model_forms.py:1591 +#: netbox/dcim/forms/model_forms.py:1159 netbox/dcim/forms/model_forms.py:1598 msgid "Component Assignment" msgstr "Назначение компонентов" -#: dcim/forms/model_forms.py:1195 dcim/forms/model_forms.py:1638 +#: netbox/dcim/forms/model_forms.py:1202 netbox/dcim/forms/model_forms.py:1645 msgid "An InventoryItem can only be assigned to a single component." msgstr "Инвентарный номер можно присвоить только одному компоненту." -#: dcim/forms/model_forms.py:1332 +#: netbox/dcim/forms/model_forms.py:1339 msgid "LAG interface" msgstr "Интерфейс LAG" -#: dcim/forms/model_forms.py:1355 +#: netbox/dcim/forms/model_forms.py:1362 msgid "Filter VLANs available for assignment by group." msgstr "Фильтровать доступные к назначению VLAN-ы по группе." -#: dcim/forms/model_forms.py:1484 +#: netbox/dcim/forms/model_forms.py:1491 msgid "Child Device" msgstr "Дочернее устройство" -#: dcim/forms/model_forms.py:1485 +#: netbox/dcim/forms/model_forms.py:1492 msgid "" "Child devices must first be created and assigned to the site and rack of the" " parent device." @@ -4568,32 +5044,35 @@ msgstr "" "Сначала необходимо создать дочерние устройства и назначить их сайту и стойке" " родительского устройства." -#: dcim/forms/model_forms.py:1527 +#: netbox/dcim/forms/model_forms.py:1534 msgid "Console port" msgstr "Консольный порт" -#: dcim/forms/model_forms.py:1535 +#: netbox/dcim/forms/model_forms.py:1542 msgid "Console server port" msgstr "Порт консольного сервера" -#: dcim/forms/model_forms.py:1543 +#: netbox/dcim/forms/model_forms.py:1550 msgid "Front port" msgstr "Передний порт" -#: dcim/forms/model_forms.py:1559 +#: netbox/dcim/forms/model_forms.py:1566 msgid "Power outlet" msgstr "Розетка питания" -#: dcim/forms/model_forms.py:1579 templates/dcim/inventoryitem.html:17 +#: netbox/dcim/forms/model_forms.py:1586 +#: netbox/templates/dcim/inventoryitem.html:17 msgid "Inventory Item" msgstr "Комплектующие" -#: dcim/forms/model_forms.py:1652 templates/dcim/inventoryitemrole.html:15 +#: netbox/dcim/forms/model_forms.py:1659 +#: netbox/templates/dcim/inventoryitemrole.html:15 msgid "Inventory Item Role" msgstr "Роли комплектующих" -#: dcim/forms/object_create.py:48 dcim/forms/object_create.py:199 -#: dcim/forms/object_create.py:355 +#: netbox/dcim/forms/object_create.py:48 +#: netbox/dcim/forms/object_create.py:199 +#: netbox/dcim/forms/object_create.py:347 msgid "" "Alphanumeric ranges are supported. (Must match the number of objects being " "created.)" @@ -4601,7 +5080,7 @@ msgstr "" "Поддерживаются алфавитно-цифровые диапазоны. (Количество создаваемых " "объектов должно соответствовать количеству создаваемых объектов.)" -#: dcim/forms/object_create.py:68 +#: netbox/dcim/forms/object_create.py:68 #, python-brace-format msgid "" "The provided pattern specifies {value_count} values, but {pattern_count} are" @@ -4610,18 +5089,19 @@ msgstr "" "Предоставленный шаблон определяет {value_count} ценности, но {pattern_count}" " ожидаются." -#: dcim/forms/object_create.py:110 dcim/forms/object_create.py:271 -#: dcim/tables/devices.py:252 +#: netbox/dcim/forms/object_create.py:110 +#: netbox/dcim/forms/object_create.py:263 netbox/dcim/tables/devices.py:252 msgid "Rear ports" msgstr "Задние порты" -#: dcim/forms/object_create.py:111 dcim/forms/object_create.py:272 +#: netbox/dcim/forms/object_create.py:111 +#: netbox/dcim/forms/object_create.py:264 msgid "Select one rear port assignment for each front port being created." msgstr "" "Выберите одно назначение заднего порта для каждого создаваемого переднего " "порта." -#: dcim/forms/object_create.py:164 +#: netbox/dcim/forms/object_create.py:164 #, python-brace-format msgid "" "The number of front port templates to be created ({frontport_count}) must " @@ -4631,16 +5111,7 @@ msgstr "" "должно соответствовать выбранному количеству положений задних портов " "({rearport_count})." -#: dcim/forms/object_create.py:251 -#, python-brace-format -msgid "" -"The string {module} will be replaced with the position of the " -"assigned module, if any." -msgstr "" -"Строка {module} будет заменено позицией назначенного модуля, " -"если таковая имеется." - -#: dcim/forms/object_create.py:320 +#: netbox/dcim/forms/object_create.py:312 #, python-brace-format msgid "" "The number of front ports to be created ({frontport_count}) must match the " @@ -4650,17 +5121,18 @@ msgstr "" "соответствовать выбранному количеству положений задних портов " "({rearport_count})." -#: dcim/forms/object_create.py:409 dcim/tables/devices.py:1033 -#: ipam/tables/fhrp.py:31 templates/dcim/virtualchassis.html:53 -#: templates/dcim/virtualchassis_edit.html:47 templates/ipam/fhrpgroup.html:38 +#: netbox/dcim/forms/object_create.py:401 netbox/dcim/tables/devices.py:1033 +#: netbox/ipam/tables/fhrp.py:31 netbox/templates/dcim/virtualchassis.html:53 +#: netbox/templates/dcim/virtualchassis_edit.html:47 +#: netbox/templates/ipam/fhrpgroup.html:38 msgid "Members" msgstr "Участники" -#: dcim/forms/object_create.py:418 +#: netbox/dcim/forms/object_create.py:410 msgid "Initial position" msgstr "Исходное положение" -#: dcim/forms/object_create.py:421 +#: netbox/dcim/forms/object_create.py:413 msgid "" "Position of the first member device. Increases by one for each additional " "member." @@ -4668,67 +5140,69 @@ msgstr "" "Положение первого элементного устройства. Увеличивается на единицу за каждый" " дополнительный элемент." -#: dcim/forms/object_create.py:435 +#: netbox/dcim/forms/object_create.py:427 msgid "A position must be specified for the first VC member." msgstr "Должность должна быть указана для первого члена VC." -#: dcim/models/cables.py:62 dcim/models/device_component_templates.py:55 -#: dcim/models/device_components.py:62 extras/models/customfields.py:111 +#: netbox/dcim/models/cables.py:62 +#: netbox/dcim/models/device_component_templates.py:55 +#: netbox/dcim/models/device_components.py:62 +#: netbox/extras/models/customfields.py:111 msgid "label" msgstr " лейбл" -#: dcim/models/cables.py:71 +#: netbox/dcim/models/cables.py:71 msgid "length" msgstr "Длина" -#: dcim/models/cables.py:78 +#: netbox/dcim/models/cables.py:78 msgid "length unit" msgstr "единица длины" -#: dcim/models/cables.py:95 +#: netbox/dcim/models/cables.py:95 msgid "cable" msgstr "кабель" -#: dcim/models/cables.py:96 +#: netbox/dcim/models/cables.py:96 msgid "cables" msgstr "кабели" -#: dcim/models/cables.py:165 +#: netbox/dcim/models/cables.py:165 msgid "Must specify a unit when setting a cable length" msgstr "При настройке длины кабеля необходимо указать единицу измерения" -#: dcim/models/cables.py:168 +#: netbox/dcim/models/cables.py:168 msgid "Must define A and B terminations when creating a new cable." msgstr "" "При создании нового кабеля необходимо определить концевые разъемы A и B." -#: dcim/models/cables.py:175 +#: netbox/dcim/models/cables.py:175 msgid "Cannot connect different termination types to same end of cable." msgstr "" "Невозможно подключить разные типы разъемов к одному и тому же концу кабеля." -#: dcim/models/cables.py:183 +#: netbox/dcim/models/cables.py:183 #, python-brace-format msgid "Incompatible termination types: {type_a} and {type_b}" msgstr "Несовместимые типы терминации: {type_a} а также {type_b}" -#: dcim/models/cables.py:193 +#: netbox/dcim/models/cables.py:193 msgid "A and B terminations cannot connect to the same object." msgstr "Окончания A и B не могут подключаться к одному и тому же объекту." -#: dcim/models/cables.py:260 ipam/models/asns.py:37 +#: netbox/dcim/models/cables.py:260 netbox/ipam/models/asns.py:37 msgid "end" msgstr "конец" -#: dcim/models/cables.py:313 +#: netbox/dcim/models/cables.py:313 msgid "cable termination" msgstr "точка подключения кабеля" -#: dcim/models/cables.py:314 +#: netbox/dcim/models/cables.py:314 msgid "cable terminations" msgstr "точки подключения кабеля" -#: dcim/models/cables.py:333 +#: netbox/dcim/models/cables.py:333 #, python-brace-format msgid "" "Duplicate termination found for {app_label}.{model} {termination_id}: cable " @@ -4737,38 +5211,38 @@ msgstr "" "Обнаружен дубликат подключения для {app_label}.{model} {termination_id}: " "кабель {cable_pk}" -#: dcim/models/cables.py:343 +#: netbox/dcim/models/cables.py:343 #, python-brace-format msgid "Cables cannot be terminated to {type_display} interfaces" msgstr "Кабели не могут быть подключены к {type_display} интерфейсов" -#: dcim/models/cables.py:350 +#: netbox/dcim/models/cables.py:350 msgid "Circuit terminations attached to a provider network may not be cabled." msgstr "" "Концевые разъемы, подключенные к сети провайдера, могут не подключаться к " "кабелям." -#: dcim/models/cables.py:448 extras/models/configs.py:50 +#: netbox/dcim/models/cables.py:448 netbox/extras/models/configs.py:50 msgid "is active" msgstr "активен" -#: dcim/models/cables.py:452 +#: netbox/dcim/models/cables.py:452 msgid "is complete" msgstr "завершен" -#: dcim/models/cables.py:456 +#: netbox/dcim/models/cables.py:456 msgid "is split" msgstr "разделен" -#: dcim/models/cables.py:464 +#: netbox/dcim/models/cables.py:464 msgid "cable path" msgstr "кабельная трасса" -#: dcim/models/cables.py:465 +#: netbox/dcim/models/cables.py:465 msgid "cable paths" msgstr "кабельные трассы" -#: dcim/models/device_component_templates.py:46 +#: netbox/dcim/models/device_component_templates.py:46 #, python-brace-format msgid "" "{module} is accepted as a substitution for the module bay position when " @@ -4777,16 +5251,16 @@ msgstr "" "{module} принимается в качестве замены положения отсека для модулей при " "подключении к модулю того или иного типа." -#: dcim/models/device_component_templates.py:58 -#: dcim/models/device_components.py:65 +#: netbox/dcim/models/device_component_templates.py:58 +#: netbox/dcim/models/device_components.py:65 msgid "Physical label" msgstr "Физический лейбл" -#: dcim/models/device_component_templates.py:103 +#: netbox/dcim/models/device_component_templates.py:103 msgid "Component templates cannot be moved to a different device type." msgstr "Шаблоны компонентов нельзя перемещать на устройства другого типа." -#: dcim/models/device_component_templates.py:154 +#: netbox/dcim/models/device_component_templates.py:154 msgid "" "A component template cannot be associated with both a device type and a " "module type." @@ -4794,145 +5268,145 @@ msgstr "" "Шаблон компонента нельзя связать как с типом устройства, так и с типом " "модуля." -#: dcim/models/device_component_templates.py:158 +#: netbox/dcim/models/device_component_templates.py:158 msgid "" "A component template must be associated with either a device type or a " "module type." msgstr "" "Шаблон компонента должен быть связан с типом устройства или типом модуля." -#: dcim/models/device_component_templates.py:212 +#: netbox/dcim/models/device_component_templates.py:212 msgid "console port template" msgstr "шаблон консольного порта" -#: dcim/models/device_component_templates.py:213 +#: netbox/dcim/models/device_component_templates.py:213 msgid "console port templates" msgstr "шаблоны консольных портов" -#: dcim/models/device_component_templates.py:246 +#: netbox/dcim/models/device_component_templates.py:246 msgid "console server port template" msgstr "шаблон порта консольного сервера" -#: dcim/models/device_component_templates.py:247 +#: netbox/dcim/models/device_component_templates.py:247 msgid "console server port templates" msgstr "шаблоны портов консольного сервера" -#: dcim/models/device_component_templates.py:278 -#: dcim/models/device_components.py:352 +#: netbox/dcim/models/device_component_templates.py:278 +#: netbox/dcim/models/device_components.py:352 msgid "maximum draw" msgstr "максимальное потребление" -#: dcim/models/device_component_templates.py:285 -#: dcim/models/device_components.py:359 +#: netbox/dcim/models/device_component_templates.py:285 +#: netbox/dcim/models/device_components.py:359 msgid "allocated draw" msgstr "выделенное потребление" -#: dcim/models/device_component_templates.py:295 +#: netbox/dcim/models/device_component_templates.py:295 msgid "power port template" msgstr "шаблон порта питания" -#: dcim/models/device_component_templates.py:296 +#: netbox/dcim/models/device_component_templates.py:296 msgid "power port templates" msgstr "шаблоны портов питания" -#: dcim/models/device_component_templates.py:315 -#: dcim/models/device_components.py:382 +#: netbox/dcim/models/device_component_templates.py:315 +#: netbox/dcim/models/device_components.py:382 #, python-brace-format msgid "Allocated draw cannot exceed the maximum draw ({maximum_draw}W)." msgstr "" "Выделенная мощность не может превышать максимальную ({maximum_draw}Вт)." -#: dcim/models/device_component_templates.py:347 -#: dcim/models/device_components.py:477 +#: netbox/dcim/models/device_component_templates.py:347 +#: netbox/dcim/models/device_components.py:477 msgid "feed leg" msgstr "фаза электропитания" -#: dcim/models/device_component_templates.py:351 -#: dcim/models/device_components.py:481 +#: netbox/dcim/models/device_component_templates.py:351 +#: netbox/dcim/models/device_components.py:481 msgid "Phase (for three-phase feeds)" msgstr "Фаза (для трехфазных)" -#: dcim/models/device_component_templates.py:357 +#: netbox/dcim/models/device_component_templates.py:357 msgid "power outlet template" msgstr "шаблон розетки питания" -#: dcim/models/device_component_templates.py:358 +#: netbox/dcim/models/device_component_templates.py:358 msgid "power outlet templates" msgstr "шаблоны розеток питания" -#: dcim/models/device_component_templates.py:367 +#: netbox/dcim/models/device_component_templates.py:367 #, python-brace-format msgid "Parent power port ({power_port}) must belong to the same device type" msgstr "" "Родительский порт питания ({power_port}) должен принадлежать тому же типу " "устройства" -#: dcim/models/device_component_templates.py:371 +#: netbox/dcim/models/device_component_templates.py:371 #, python-brace-format msgid "Parent power port ({power_port}) must belong to the same module type" msgstr "" "Родительский порт питания ({power_port}) должен принадлежать тому же типу " "модулей" -#: dcim/models/device_component_templates.py:423 -#: dcim/models/device_components.py:611 +#: netbox/dcim/models/device_component_templates.py:423 +#: netbox/dcim/models/device_components.py:611 msgid "management only" msgstr "только управление" -#: dcim/models/device_component_templates.py:431 -#: dcim/models/device_components.py:550 +#: netbox/dcim/models/device_component_templates.py:431 +#: netbox/dcim/models/device_components.py:550 msgid "bridge interface" msgstr "интерфейс моста" -#: dcim/models/device_component_templates.py:449 -#: dcim/models/device_components.py:636 +#: netbox/dcim/models/device_component_templates.py:449 +#: netbox/dcim/models/device_components.py:636 msgid "wireless role" msgstr "роль беспроводной сети" -#: dcim/models/device_component_templates.py:455 +#: netbox/dcim/models/device_component_templates.py:455 msgid "interface template" msgstr "шаблон интерфейса" -#: dcim/models/device_component_templates.py:456 +#: netbox/dcim/models/device_component_templates.py:456 msgid "interface templates" msgstr "шаблоны интерфейсов" -#: dcim/models/device_component_templates.py:463 -#: dcim/models/device_components.py:804 -#: virtualization/models/virtualmachines.py:405 +#: netbox/dcim/models/device_component_templates.py:463 +#: netbox/dcim/models/device_components.py:804 +#: netbox/virtualization/models/virtualmachines.py:405 msgid "An interface cannot be bridged to itself." msgstr "Интерфейс не может быть подключен к самому себе." -#: dcim/models/device_component_templates.py:466 +#: netbox/dcim/models/device_component_templates.py:466 #, python-brace-format msgid "Bridge interface ({bridge}) must belong to the same device type" msgstr "" "Интерфейс моста ({bridge}) должно принадлежать к тому же типу устройства" -#: dcim/models/device_component_templates.py:470 +#: netbox/dcim/models/device_component_templates.py:470 #, python-brace-format msgid "Bridge interface ({bridge}) must belong to the same module type" msgstr "Интерфейс моста ({bridge}) должен принадлежать к одному типу модулей" -#: dcim/models/device_component_templates.py:526 -#: dcim/models/device_components.py:984 +#: netbox/dcim/models/device_component_templates.py:526 +#: netbox/dcim/models/device_components.py:984 msgid "rear port position" msgstr "положение заднего порта" -#: dcim/models/device_component_templates.py:551 +#: netbox/dcim/models/device_component_templates.py:551 msgid "front port template" msgstr "шаблон переднего порта" -#: dcim/models/device_component_templates.py:552 +#: netbox/dcim/models/device_component_templates.py:552 msgid "front port templates" msgstr "шаблоны передних портов" -#: dcim/models/device_component_templates.py:562 +#: netbox/dcim/models/device_component_templates.py:562 #, python-brace-format msgid "Rear port ({name}) must belong to the same device type" msgstr "Задний порт ({name}) должно принадлежать к тому же типу устройства" -#: dcim/models/device_component_templates.py:568 +#: netbox/dcim/models/device_component_templates.py:568 #, python-brace-format msgid "" "Invalid rear port position ({position}); rear port {name} has only {count} " @@ -4941,48 +5415,48 @@ msgstr "" "Неверное положение заднего порта ({position}); задний порт {name} имеет " "только {count} позиции" -#: dcim/models/device_component_templates.py:621 -#: dcim/models/device_components.py:1053 +#: netbox/dcim/models/device_component_templates.py:621 +#: netbox/dcim/models/device_components.py:1053 msgid "positions" msgstr "позиция" -#: dcim/models/device_component_templates.py:632 +#: netbox/dcim/models/device_component_templates.py:632 msgid "rear port template" msgstr "шаблон заднего порта" -#: dcim/models/device_component_templates.py:633 +#: netbox/dcim/models/device_component_templates.py:633 msgid "rear port templates" msgstr "шаблоны задних портов" -#: dcim/models/device_component_templates.py:662 -#: dcim/models/device_components.py:1103 +#: netbox/dcim/models/device_component_templates.py:662 +#: netbox/dcim/models/device_components.py:1103 msgid "position" msgstr "позиция" -#: dcim/models/device_component_templates.py:665 -#: dcim/models/device_components.py:1106 +#: netbox/dcim/models/device_component_templates.py:665 +#: netbox/dcim/models/device_components.py:1106 msgid "Identifier to reference when renaming installed components" msgstr "" "Идентификатор, на который следует ссылаться при переименовании установленных" " компонентов" -#: dcim/models/device_component_templates.py:671 +#: netbox/dcim/models/device_component_templates.py:671 msgid "module bay template" msgstr "шаблон модульного отсека" -#: dcim/models/device_component_templates.py:672 +#: netbox/dcim/models/device_component_templates.py:672 msgid "module bay templates" msgstr "шаблоны модульных отсеков" -#: dcim/models/device_component_templates.py:699 +#: netbox/dcim/models/device_component_templates.py:699 msgid "device bay template" msgstr "шаблон отсека для устройств" -#: dcim/models/device_component_templates.py:700 +#: netbox/dcim/models/device_component_templates.py:700 msgid "device bay templates" msgstr "шаблоны отсеков для устройств" -#: dcim/models/device_component_templates.py:713 +#: netbox/dcim/models/device_component_templates.py:713 #, python-brace-format msgid "" "Subdevice role of device type ({device_type}) must be set to \"parent\" to " @@ -4991,203 +5465,208 @@ msgstr "" "Роль подустройства типа устройства ({device_type}) должно быть установлено " "значение «родительский», чтобы разрешить отсеки для устройств." -#: dcim/models/device_component_templates.py:768 -#: dcim/models/device_components.py:1262 +#: netbox/dcim/models/device_component_templates.py:768 +#: netbox/dcim/models/device_components.py:1262 msgid "part ID" msgstr "номер модели" -#: dcim/models/device_component_templates.py:770 -#: dcim/models/device_components.py:1264 +#: netbox/dcim/models/device_component_templates.py:770 +#: netbox/dcim/models/device_components.py:1264 msgid "Manufacturer-assigned part identifier" msgstr "Номер модели, присвоенный производителем" -#: dcim/models/device_component_templates.py:787 +#: netbox/dcim/models/device_component_templates.py:787 msgid "inventory item template" msgstr "шаблон инвентарного товара" -#: dcim/models/device_component_templates.py:788 +#: netbox/dcim/models/device_component_templates.py:788 msgid "inventory item templates" msgstr "шаблоны товаров инвентаря" -#: dcim/models/device_components.py:105 +#: netbox/dcim/models/device_components.py:105 msgid "Components cannot be moved to a different device." msgstr "Компоненты нельзя перемещать на другое устройство." -#: dcim/models/device_components.py:144 +#: netbox/dcim/models/device_components.py:144 msgid "cable end" msgstr "конец кабеля" -#: dcim/models/device_components.py:150 +#: netbox/dcim/models/device_components.py:150 msgid "mark connected" msgstr "отметка подключена" -#: dcim/models/device_components.py:152 +#: netbox/dcim/models/device_components.py:152 msgid "Treat as if a cable is connected" msgstr "Обращайтесь так, как будто кабель подключен" -#: dcim/models/device_components.py:170 +#: netbox/dcim/models/device_components.py:170 msgid "Must specify cable end (A or B) when attaching a cable." msgstr "При подключении кабеля необходимо указать конец кабеля (A или B)." -#: dcim/models/device_components.py:174 +#: netbox/dcim/models/device_components.py:174 msgid "Cable end must not be set without a cable." msgstr "Нельзя указывать конец кабеля без указания самого кабеля." -#: dcim/models/device_components.py:178 +#: netbox/dcim/models/device_components.py:178 msgid "Cannot mark as connected with a cable attached." msgstr "Невозможно отметить как подключенный, если присоединен кабель." -#: dcim/models/device_components.py:202 +#: netbox/dcim/models/device_components.py:202 #, python-brace-format msgid "{class_name} models must declare a parent_object property" msgstr "{class_name} модели должны объявить свойство parent_object" -#: dcim/models/device_components.py:287 dcim/models/device_components.py:316 -#: dcim/models/device_components.py:349 dcim/models/device_components.py:467 +#: 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 msgid "Physical port type" msgstr "Тип физического порта" -#: dcim/models/device_components.py:290 dcim/models/device_components.py:319 +#: netbox/dcim/models/device_components.py:290 +#: netbox/dcim/models/device_components.py:319 msgid "speed" msgstr "скорость" -#: dcim/models/device_components.py:294 dcim/models/device_components.py:323 +#: netbox/dcim/models/device_components.py:294 +#: netbox/dcim/models/device_components.py:323 msgid "Port speed in bits per second" msgstr "Скорость порта в битах в секунду" -#: dcim/models/device_components.py:300 +#: netbox/dcim/models/device_components.py:300 msgid "console port" msgstr "консольный порт" -#: dcim/models/device_components.py:301 +#: netbox/dcim/models/device_components.py:301 msgid "console ports" msgstr "консольные порты" -#: dcim/models/device_components.py:329 +#: netbox/dcim/models/device_components.py:329 msgid "console server port" msgstr "порт консольного сервера" -#: dcim/models/device_components.py:330 +#: netbox/dcim/models/device_components.py:330 msgid "console server ports" msgstr "порты консольного сервера" -#: dcim/models/device_components.py:369 +#: netbox/dcim/models/device_components.py:369 msgid "power port" msgstr "порт питания" -#: dcim/models/device_components.py:370 +#: netbox/dcim/models/device_components.py:370 msgid "power ports" msgstr "порты питания" -#: dcim/models/device_components.py:487 +#: netbox/dcim/models/device_components.py:487 msgid "power outlet" msgstr "розетка питания" -#: dcim/models/device_components.py:488 +#: netbox/dcim/models/device_components.py:488 msgid "power outlets" msgstr "розетки питания" -#: dcim/models/device_components.py:499 +#: netbox/dcim/models/device_components.py:499 #, python-brace-format msgid "Parent power port ({power_port}) must belong to the same device" msgstr "" "Родительский порт питания ({power_port}) должен принадлежать тому же " "устройству" -#: dcim/models/device_components.py:530 vpn/models/crypto.py:81 -#: vpn/models/crypto.py:226 +#: netbox/dcim/models/device_components.py:530 netbox/vpn/models/crypto.py:81 +#: netbox/vpn/models/crypto.py:226 msgid "mode" msgstr "режим" -#: dcim/models/device_components.py:534 +#: netbox/dcim/models/device_components.py:534 msgid "IEEE 802.1Q tagging strategy" msgstr "Стратегия маркировки IEEE 802.1Q" -#: dcim/models/device_components.py:542 +#: netbox/dcim/models/device_components.py:542 msgid "parent interface" msgstr "родительский интерфейс" -#: dcim/models/device_components.py:602 +#: netbox/dcim/models/device_components.py:602 msgid "parent LAG" msgstr "родительский LAG" -#: dcim/models/device_components.py:612 +#: netbox/dcim/models/device_components.py:612 msgid "This interface is used only for out-of-band management" msgstr "Этот интерфейс используется только для внеполосного управления" -#: dcim/models/device_components.py:617 +#: netbox/dcim/models/device_components.py:617 msgid "speed (Kbps)" msgstr "скорость (Кбит/с)" -#: dcim/models/device_components.py:620 +#: netbox/dcim/models/device_components.py:620 msgid "duplex" msgstr "дуплекс" -#: dcim/models/device_components.py:630 +#: netbox/dcim/models/device_components.py:630 msgid "64-bit World Wide Name" msgstr "64-битное всемирное имя" -#: dcim/models/device_components.py:642 +#: netbox/dcim/models/device_components.py:642 msgid "wireless channel" msgstr "беспроводной канал" -#: dcim/models/device_components.py:649 +#: netbox/dcim/models/device_components.py:649 msgid "channel frequency (MHz)" msgstr "частота канала (МГц)" -#: dcim/models/device_components.py:650 dcim/models/device_components.py:658 +#: netbox/dcim/models/device_components.py:650 +#: netbox/dcim/models/device_components.py:658 msgid "Populated by selected channel (if set)" msgstr "Заполнено выбранным каналом (если задано)" -#: dcim/models/device_components.py:664 +#: netbox/dcim/models/device_components.py:664 msgid "transmit power (dBm)" msgstr "мощность передачи (дБм)" -#: dcim/models/device_components.py:689 wireless/models.py:117 +#: netbox/dcim/models/device_components.py:689 netbox/wireless/models.py:117 msgid "wireless LANs" msgstr "беспроводные LANs" -#: dcim/models/device_components.py:697 -#: virtualization/models/virtualmachines.py:335 +#: netbox/dcim/models/device_components.py:697 +#: netbox/virtualization/models/virtualmachines.py:335 msgid "untagged VLAN" msgstr "VLAN без тегов" -#: dcim/models/device_components.py:703 -#: virtualization/models/virtualmachines.py:341 +#: netbox/dcim/models/device_components.py:703 +#: netbox/virtualization/models/virtualmachines.py:341 msgid "tagged VLANs" -msgstr "VLAN без тегов" +msgstr "тегированные VLAN" -#: dcim/models/device_components.py:745 -#: virtualization/models/virtualmachines.py:377 +#: netbox/dcim/models/device_components.py:745 +#: netbox/virtualization/models/virtualmachines.py:377 msgid "interface" msgstr "интерфейс" -#: dcim/models/device_components.py:746 -#: virtualization/models/virtualmachines.py:378 +#: netbox/dcim/models/device_components.py:746 +#: netbox/virtualization/models/virtualmachines.py:378 msgid "interfaces" msgstr "интерфейсы" -#: dcim/models/device_components.py:757 +#: netbox/dcim/models/device_components.py:757 #, python-brace-format msgid "{display_type} interfaces cannot have a cable attached." msgstr "{display_type} к интерфейсам нельзя подключать кабель." -#: dcim/models/device_components.py:765 +#: netbox/dcim/models/device_components.py:765 #, python-brace-format msgid "{display_type} interfaces cannot be marked as connected." msgstr "{display_type} интерфейсы нельзя пометить как подключенные." -#: dcim/models/device_components.py:774 -#: virtualization/models/virtualmachines.py:390 +#: netbox/dcim/models/device_components.py:774 +#: netbox/virtualization/models/virtualmachines.py:390 msgid "An interface cannot be its own parent." msgstr "Интерфейс не может быть собственным родителем." -#: dcim/models/device_components.py:778 +#: netbox/dcim/models/device_components.py:778 msgid "Only virtual interfaces may be assigned to a parent interface." msgstr "" "Родительскому интерфейсу могут быть назначены только виртуальные интерфейсы." -#: dcim/models/device_components.py:785 +#: netbox/dcim/models/device_components.py:785 #, python-brace-format msgid "" "The selected parent interface ({interface}) belongs to a different device " @@ -5196,7 +5675,7 @@ msgstr "" "Выбранный родительский интерфейс ({interface}) принадлежит другому " "устройству ({device})" -#: dcim/models/device_components.py:791 +#: netbox/dcim/models/device_components.py:791 #, python-brace-format msgid "" "The selected parent interface ({interface}) belongs to {device}, which is " @@ -5205,7 +5684,7 @@ msgstr "" "Выбранный родительский интерфейс ({interface}) принадлежит {device}, который" " не является частью виртуального шасси {virtual_chassis}." -#: dcim/models/device_components.py:811 +#: netbox/dcim/models/device_components.py:811 #, python-brace-format msgid "" "The selected bridge interface ({bridge}) belongs to a different device " @@ -5214,7 +5693,7 @@ msgstr "" "Выбранный интерфейс моста ({bridge}) принадлежит другому устройству " "({device})." -#: dcim/models/device_components.py:817 +#: netbox/dcim/models/device_components.py:817 #, python-brace-format msgid "" "The selected bridge interface ({interface}) belongs to {device}, which is " @@ -5223,22 +5702,22 @@ msgstr "" "Выбранный интерфейс моста ({interface}) принадлежит {device}, который не " "является частью виртуального шасси {virtual_chassis}." -#: dcim/models/device_components.py:828 +#: netbox/dcim/models/device_components.py:828 msgid "Virtual interfaces cannot have a parent LAG interface." msgstr "Виртуальные интерфейсы не могут иметь родительский интерфейс LAG." -#: dcim/models/device_components.py:832 +#: netbox/dcim/models/device_components.py:832 msgid "A LAG interface cannot be its own parent." msgstr "Интерфейс LAG не может быть собственным родителем." -#: dcim/models/device_components.py:839 +#: netbox/dcim/models/device_components.py:839 #, python-brace-format msgid "" "The selected LAG interface ({lag}) belongs to a different device ({device})." msgstr "" "Выбранный интерфейс LAG ({lag}) принадлежит другому устройству ({device})." -#: dcim/models/device_components.py:845 +#: netbox/dcim/models/device_components.py:845 #, python-brace-format msgid "" "The selected LAG interface ({lag}) belongs to {device}, which is not part of" @@ -5247,47 +5726,47 @@ msgstr "" "Выбранный интерфейс LAG ({lag}) принадлежит {device}, который не является " "частью виртуального шасси {virtual_chassis}." -#: dcim/models/device_components.py:856 +#: netbox/dcim/models/device_components.py:856 msgid "Virtual interfaces cannot have a PoE mode." msgstr "Виртуальные интерфейсы не могут иметь режим PoE." -#: dcim/models/device_components.py:860 +#: netbox/dcim/models/device_components.py:860 msgid "Virtual interfaces cannot have a PoE type." msgstr "Виртуальные интерфейсы не могут иметь тип PoE." -#: dcim/models/device_components.py:866 +#: netbox/dcim/models/device_components.py:866 msgid "Must specify PoE mode when designating a PoE type." msgstr "При назначении типа PoE необходимо указать режим PoE." -#: dcim/models/device_components.py:873 +#: netbox/dcim/models/device_components.py:873 msgid "Wireless role may be set only on wireless interfaces." msgstr "" "Роль беспроводной связи может быть установлена только на беспроводных " "интерфейсах." -#: dcim/models/device_components.py:875 +#: netbox/dcim/models/device_components.py:875 msgid "Channel may be set only on wireless interfaces." msgstr "Канал можно настроить только на беспроводных интерфейсах." -#: dcim/models/device_components.py:881 +#: netbox/dcim/models/device_components.py:881 msgid "Channel frequency may be set only on wireless interfaces." msgstr "" "Частота канала может быть установлена только на беспроводных интерфейсах." -#: dcim/models/device_components.py:885 +#: netbox/dcim/models/device_components.py:885 msgid "Cannot specify custom frequency with channel selected." msgstr "Невозможно указать произвольную частоту для выбранного канала." -#: dcim/models/device_components.py:891 +#: netbox/dcim/models/device_components.py:891 msgid "Channel width may be set only on wireless interfaces." msgstr "" "Ширина канала может быть установлена только на беспроводных интерфейсах." -#: dcim/models/device_components.py:893 +#: netbox/dcim/models/device_components.py:893 msgid "Cannot specify custom width with channel selected." msgstr "Невозможно указать произвольную ширину полосы для выбранного канала." -#: dcim/models/device_components.py:901 +#: netbox/dcim/models/device_components.py:901 #, python-brace-format msgid "" "The untagged VLAN ({untagged_vlan}) must belong to the same site as the " @@ -5296,25 +5775,25 @@ msgstr "" "VLAN без тегов ({untagged_vlan}) должно принадлежать тому же сайту, что и " "родительское устройство интерфейса, или оно должно быть глобальным." -#: dcim/models/device_components.py:990 +#: netbox/dcim/models/device_components.py:990 msgid "Mapped position on corresponding rear port" msgstr "Нанесенное на карту положение на соответствующем заднем порту" -#: dcim/models/device_components.py:1006 +#: netbox/dcim/models/device_components.py:1006 msgid "front port" msgstr "фронтальный порт" -#: dcim/models/device_components.py:1007 +#: netbox/dcim/models/device_components.py:1007 msgid "front ports" msgstr "фронтальные порты" -#: dcim/models/device_components.py:1021 +#: netbox/dcim/models/device_components.py:1021 #, python-brace-format msgid "Rear port ({rear_port}) must belong to the same device" msgstr "" "Задний порт ({rear_port}) должно принадлежать одному и тому же устройству" -#: dcim/models/device_components.py:1029 +#: netbox/dcim/models/device_components.py:1029 #, python-brace-format msgid "" "Invalid rear port position ({rear_port_position}): Rear port {name} has only" @@ -5323,19 +5802,19 @@ msgstr "" "Неверное положение заднего порта ({rear_port_position}): Задний порт {name} " "имеет только {positions} позиции." -#: dcim/models/device_components.py:1059 +#: netbox/dcim/models/device_components.py:1059 msgid "Number of front ports which may be mapped" msgstr "Количество передних портов, которые можно сопоставить" -#: dcim/models/device_components.py:1064 +#: netbox/dcim/models/device_components.py:1064 msgid "rear port" msgstr "задний порт" -#: dcim/models/device_components.py:1065 +#: netbox/dcim/models/device_components.py:1065 msgid "rear ports" msgstr "задние порты" -#: dcim/models/device_components.py:1079 +#: netbox/dcim/models/device_components.py:1079 #, python-brace-format msgid "" "The number of positions cannot be less than the number of mapped front ports" @@ -5344,37 +5823,38 @@ msgstr "" "Количество позиций не может быть меньше количества сопоставленных передних " "портов ({frontport_count})" -#: dcim/models/device_components.py:1120 +#: netbox/dcim/models/device_components.py:1120 msgid "module bay" msgstr "модульный отсек" -#: dcim/models/device_components.py:1121 +#: netbox/dcim/models/device_components.py:1121 msgid "module bays" msgstr "отсеки для модулей" -#: dcim/models/device_components.py:1138 dcim/models/devices.py:1224 +#: netbox/dcim/models/device_components.py:1138 +#: netbox/dcim/models/devices.py:1224 msgid "A module bay cannot belong to a module installed within it." msgstr "Отсек для модулей не может принадлежать установленному в нем модулю." -#: dcim/models/device_components.py:1164 +#: netbox/dcim/models/device_components.py:1164 msgid "device bay" msgstr "отсек для устройств" -#: dcim/models/device_components.py:1165 +#: netbox/dcim/models/device_components.py:1165 msgid "device bays" msgstr "отсеки для устройств" -#: dcim/models/device_components.py:1175 +#: netbox/dcim/models/device_components.py:1175 #, python-brace-format msgid "This type of device ({device_type}) does not support device bays." msgstr "" "Этот тип устройства ({device_type}) не поддерживает отсеки для устройств." -#: dcim/models/device_components.py:1181 +#: netbox/dcim/models/device_components.py:1181 msgid "Cannot install a device into itself." msgstr "Невозможно установить устройство в само по себе." -#: dcim/models/device_components.py:1189 +#: netbox/dcim/models/device_components.py:1189 #, python-brace-format msgid "" "Cannot install the specified device; device is already installed in {bay}." @@ -5382,114 +5862,116 @@ msgstr "" "Невозможно установить указанное устройство; устройство уже установлено в " "{bay}." -#: dcim/models/device_components.py:1210 +#: netbox/dcim/models/device_components.py:1210 msgid "inventory item role" msgstr "роль элемента инвентаря" -#: dcim/models/device_components.py:1211 +#: netbox/dcim/models/device_components.py:1211 msgid "inventory item roles" msgstr "роли элементов инвентаря" -#: dcim/models/device_components.py:1268 dcim/models/devices.py:607 -#: dcim/models/devices.py:1181 dcim/models/racks.py:313 -#: virtualization/models/virtualmachines.py:131 +#: 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 msgid "serial number" msgstr "серийный номер" -#: dcim/models/device_components.py:1276 dcim/models/devices.py:615 -#: dcim/models/devices.py:1188 dcim/models/racks.py:320 +#: 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 msgid "asset tag" msgstr "инвентарный номер" -#: dcim/models/device_components.py:1277 +#: netbox/dcim/models/device_components.py:1277 msgid "A unique tag used to identify this item" msgstr "Инвентарный номер, используемый для идентификации этого элемента" -#: dcim/models/device_components.py:1280 +#: netbox/dcim/models/device_components.py:1280 msgid "discovered" msgstr "обнаружено" -#: dcim/models/device_components.py:1282 +#: netbox/dcim/models/device_components.py:1282 msgid "This item was automatically discovered" msgstr "Этот элемент был обнаружен автоматически" -#: dcim/models/device_components.py:1300 +#: netbox/dcim/models/device_components.py:1300 msgid "inventory item" msgstr "элемент инвентаря" -#: dcim/models/device_components.py:1301 +#: netbox/dcim/models/device_components.py:1301 msgid "inventory items" msgstr "элементы инвентаря" -#: dcim/models/device_components.py:1312 +#: netbox/dcim/models/device_components.py:1312 msgid "Cannot assign self as parent." msgstr "Невозможно назначить себя родителем." -#: dcim/models/device_components.py:1320 +#: netbox/dcim/models/device_components.py:1320 msgid "Parent inventory item does not belong to the same device." msgstr "" "Предмет родительского инвентаря не принадлежит одному и тому же устройству." -#: dcim/models/device_components.py:1326 +#: netbox/dcim/models/device_components.py:1326 msgid "Cannot move an inventory item with dependent children" msgstr "Невозможно переместить инвентарь вместе с дочерней зависимостью" -#: dcim/models/device_components.py:1334 +#: netbox/dcim/models/device_components.py:1334 msgid "Cannot assign inventory item to component on another device" msgstr "" "Невозможно присвоить инвентарный предмет компоненту на другом устройстве" -#: dcim/models/devices.py:54 +#: netbox/dcim/models/devices.py:54 msgid "manufacturer" msgstr "производитель" -#: dcim/models/devices.py:55 +#: netbox/dcim/models/devices.py:55 msgid "manufacturers" msgstr "производители" -#: dcim/models/devices.py:82 dcim/models/devices.py:382 -#: dcim/models/racks.py:133 +#: netbox/dcim/models/devices.py:82 netbox/dcim/models/devices.py:382 +#: netbox/dcim/models/racks.py:133 msgid "model" msgstr "модель" -#: dcim/models/devices.py:95 +#: netbox/dcim/models/devices.py:95 msgid "default platform" msgstr "платформа по умолчанию" -#: dcim/models/devices.py:98 dcim/models/devices.py:386 +#: netbox/dcim/models/devices.py:98 netbox/dcim/models/devices.py:386 msgid "part number" msgstr "номер модели" -#: dcim/models/devices.py:101 dcim/models/devices.py:389 +#: netbox/dcim/models/devices.py:101 netbox/dcim/models/devices.py:389 msgid "Discrete part number (optional)" msgstr "Дискретный номер детали (опционально)" -#: dcim/models/devices.py:107 dcim/models/racks.py:54 +#: netbox/dcim/models/devices.py:107 netbox/dcim/models/racks.py:54 msgid "height (U)" msgstr "высота (U)" -#: dcim/models/devices.py:111 +#: netbox/dcim/models/devices.py:111 msgid "exclude from utilization" msgstr "исключить из использования" -#: dcim/models/devices.py:112 +#: netbox/dcim/models/devices.py:112 msgid "Devices of this type are excluded when calculating rack utilization." msgstr "Устройства этого типа исключаются при расчёте загруженности стоек." -#: dcim/models/devices.py:116 +#: netbox/dcim/models/devices.py:116 msgid "is full depth" msgstr "полная глубина" -#: dcim/models/devices.py:117 +#: netbox/dcim/models/devices.py:117 msgid "Device consumes both front and rear rack faces." msgstr "" "Устройство занимает/блокирует юниты с обоих сторон стойки (спереди и сзади)." -#: dcim/models/devices.py:123 +#: netbox/dcim/models/devices.py:123 msgid "parent/child status" msgstr "статус родителя/потомка" -#: dcim/models/devices.py:124 +#: netbox/dcim/models/devices.py:124 msgid "" "Parent devices house child devices in device bays. Leave blank if this " "device type is neither a parent nor a child." @@ -5498,24 +5980,24 @@ msgstr "" "устройств. Оставьте поле пустым, если этот тип устройства не относится ни к " "родительскому, ни к дочернему." -#: dcim/models/devices.py:128 dcim/models/devices.py:392 -#: dcim/models/devices.py:659 dcim/models/racks.py:324 +#: netbox/dcim/models/devices.py:128 netbox/dcim/models/devices.py:392 +#: netbox/dcim/models/devices.py:659 netbox/dcim/models/racks.py:324 msgid "airflow" msgstr "воздушный поток" -#: dcim/models/devices.py:204 +#: netbox/dcim/models/devices.py:204 msgid "device type" msgstr "тип устройства" -#: dcim/models/devices.py:205 +#: netbox/dcim/models/devices.py:205 msgid "device types" msgstr "типы устройств" -#: dcim/models/devices.py:290 +#: netbox/dcim/models/devices.py:290 msgid "U height must be in increments of 0.5 rack units." msgstr "Высоту в юнитах нужно указывать с шагом 0.5 юнита." -#: dcim/models/devices.py:307 +#: netbox/dcim/models/devices.py:307 #, python-brace-format msgid "" "Device {device} in rack {rack} does not have sufficient space to accommodate" @@ -5524,7 +6006,7 @@ msgstr "" "Устройству {device} в стойке {rack} для размещения на высоте {height}U не " "хватет свободных юнитов." -#: dcim/models/devices.py:322 +#: netbox/dcim/models/devices.py:322 #, python-brace-format msgid "" "Unable to set 0U height: Found {racked_instance_count} " @@ -5534,7 +6016,7 @@ msgstr "" "href=\"{url}\">{racked_instance_count} экземпляр(ов) уже смонтированых в" " стойках." -#: dcim/models/devices.py:331 +#: netbox/dcim/models/devices.py:331 msgid "" "Must delete all device bay templates associated with this device before " "declassifying it as a parent device." @@ -5542,156 +6024,156 @@ msgstr "" "Необходимо удалить все шаблоны отсеков устройств, связанные с этим " "устройством, прежде чем рассекретить его как родительское устройство." -#: dcim/models/devices.py:337 +#: netbox/dcim/models/devices.py:337 msgid "Child device types must be 0U." msgstr "Типы дочерних устройств должны быть 0U." -#: dcim/models/devices.py:411 +#: netbox/dcim/models/devices.py:411 msgid "module type" msgstr "тип модуля" -#: dcim/models/devices.py:412 +#: netbox/dcim/models/devices.py:412 msgid "module types" msgstr "типы модулей" -#: dcim/models/devices.py:485 +#: netbox/dcim/models/devices.py:485 msgid "Virtual machines may be assigned to this role" msgstr "Эта роль может быть назначена виртуальным машинам." -#: dcim/models/devices.py:497 +#: netbox/dcim/models/devices.py:497 msgid "device role" msgstr "роль устройства" -#: dcim/models/devices.py:498 +#: netbox/dcim/models/devices.py:498 msgid "device roles" msgstr "роли устройств" -#: dcim/models/devices.py:515 +#: netbox/dcim/models/devices.py:515 msgid "Optionally limit this platform to devices of a certain manufacturer" msgstr "" "Опционально ограничьте эту платформу устройствам определенного производителя" -#: dcim/models/devices.py:527 +#: netbox/dcim/models/devices.py:527 msgid "platform" msgstr "платформа" -#: dcim/models/devices.py:528 +#: netbox/dcim/models/devices.py:528 msgid "platforms" msgstr "платформы" -#: dcim/models/devices.py:576 +#: netbox/dcim/models/devices.py:576 msgid "The function this device serves" msgstr "Функция, которую выполняет это устройство" -#: dcim/models/devices.py:608 +#: netbox/dcim/models/devices.py:608 msgid "Chassis serial number, assigned by the manufacturer" msgstr "Серийный номер шасси, присвоенный производителем" -#: dcim/models/devices.py:616 dcim/models/devices.py:1189 +#: netbox/dcim/models/devices.py:616 netbox/dcim/models/devices.py:1189 msgid "A unique tag used to identify this device" msgstr "Уникальный тег, используемый для идентификации этого устройства" -#: dcim/models/devices.py:643 +#: netbox/dcim/models/devices.py:643 msgid "position (U)" msgstr "положение (U)" -#: dcim/models/devices.py:650 +#: netbox/dcim/models/devices.py:650 msgid "rack face" msgstr "лицевая сторона стойки" -#: dcim/models/devices.py:670 dcim/models/devices.py:1415 -#: virtualization/models/virtualmachines.py:100 +#: netbox/dcim/models/devices.py:670 netbox/dcim/models/devices.py:1420 +#: netbox/virtualization/models/virtualmachines.py:100 msgid "primary IPv4" msgstr "основной IPv4" -#: dcim/models/devices.py:678 dcim/models/devices.py:1423 -#: virtualization/models/virtualmachines.py:108 +#: netbox/dcim/models/devices.py:678 netbox/dcim/models/devices.py:1428 +#: netbox/virtualization/models/virtualmachines.py:108 msgid "primary IPv6" msgstr "основной IPv6" -#: dcim/models/devices.py:686 +#: netbox/dcim/models/devices.py:686 msgid "out-of-band IP" msgstr "внеполосный IP-адрес" -#: dcim/models/devices.py:703 +#: netbox/dcim/models/devices.py:703 msgid "VC position" msgstr "Позиция VC" -#: dcim/models/devices.py:706 +#: netbox/dcim/models/devices.py:706 msgid "Virtual chassis position" msgstr "Положение виртуального шасси" -#: dcim/models/devices.py:709 +#: netbox/dcim/models/devices.py:709 msgid "VC priority" msgstr "Приоритет VC" -#: dcim/models/devices.py:713 +#: netbox/dcim/models/devices.py:713 msgid "Virtual chassis master election priority" msgstr "Приоритет выбора основного виртуального шасси" -#: dcim/models/devices.py:716 dcim/models/sites.py:207 +#: netbox/dcim/models/devices.py:716 netbox/dcim/models/sites.py:207 msgid "latitude" msgstr "широта" -#: dcim/models/devices.py:721 dcim/models/devices.py:729 -#: dcim/models/sites.py:212 dcim/models/sites.py:220 +#: netbox/dcim/models/devices.py:721 netbox/dcim/models/devices.py:729 +#: netbox/dcim/models/sites.py:212 netbox/dcim/models/sites.py:220 msgid "GPS coordinate in decimal format (xx.yyyyyy)" msgstr "GPS координата в десятичном формате (xx.yyyyyy)" -#: dcim/models/devices.py:724 dcim/models/sites.py:215 +#: netbox/dcim/models/devices.py:724 netbox/dcim/models/sites.py:215 msgid "longitude" msgstr "долгота" -#: dcim/models/devices.py:797 +#: netbox/dcim/models/devices.py:797 msgid "Device name must be unique per site." msgstr "Имя устройства должно быть уникальным для каждого сайта." -#: dcim/models/devices.py:808 ipam/models/services.py:75 +#: netbox/dcim/models/devices.py:808 netbox/ipam/models/services.py:75 msgid "device" msgstr "устройство" -#: dcim/models/devices.py:809 +#: netbox/dcim/models/devices.py:809 msgid "devices" msgstr "устройства" -#: dcim/models/devices.py:835 +#: netbox/dcim/models/devices.py:835 #, python-brace-format msgid "Rack {rack} does not belong to site {site}." msgstr "Стойка {rack} не принадлежит сайту {site}." -#: dcim/models/devices.py:840 +#: netbox/dcim/models/devices.py:840 #, python-brace-format msgid "Location {location} does not belong to site {site}." msgstr "Локация {location} не принадлежит сайту {site}." -#: dcim/models/devices.py:846 +#: netbox/dcim/models/devices.py:846 #, python-brace-format msgid "Rack {rack} does not belong to location {location}." msgstr "Стойка {rack} не принадлежит локации {location}." -#: dcim/models/devices.py:853 +#: netbox/dcim/models/devices.py:853 msgid "Cannot select a rack face without assigning a rack." msgstr "Невозможно выбрать лицевую сторону стойки, не выбрав саму стойку." -#: dcim/models/devices.py:857 +#: netbox/dcim/models/devices.py:857 msgid "Cannot select a rack position without assigning a rack." msgstr "Невозможно выбрать позицию в стойке, не выбрав саму стойку." -#: dcim/models/devices.py:863 +#: netbox/dcim/models/devices.py:863 msgid "Position must be in increments of 0.5 rack units." msgstr "Позиция должна быть указана с шагом 0,5 единицы стойки." -#: dcim/models/devices.py:867 +#: netbox/dcim/models/devices.py:867 msgid "Must specify rack face when defining rack position." msgstr "При определении лицевой стороны необходимо указать позицию в стойке." -#: dcim/models/devices.py:875 +#: netbox/dcim/models/devices.py:875 #, python-brace-format msgid "" "A 0U device type ({device_type}) cannot be assigned to a rack position." msgstr "Тип устройства 0U ({device_type}) не может быть отнесено к стойке." -#: dcim/models/devices.py:886 +#: netbox/dcim/models/devices.py:886 msgid "" "Child device types cannot be assigned to a rack face. This is an attribute " "of the parent device." @@ -5699,7 +6181,7 @@ msgstr "" "Устройствам с указанным в типе свойством \"дочернее\" нельзя выбрать лицевую" " сторону стойки. Этот атрибут указывается для \"родительского\" устройства." -#: dcim/models/devices.py:893 +#: netbox/dcim/models/devices.py:893 msgid "" "Child device types cannot be assigned to a rack position. This is an " "attribute of the parent device." @@ -5707,7 +6189,7 @@ msgstr "" "Типы дочерних устройств нельзя отнести к позиции в стойке. Это атрибут " "родительского устройства." -#: dcim/models/devices.py:907 +#: netbox/dcim/models/devices.py:907 #, python-brace-format msgid "" "U{position} is already occupied or does not have sufficient space to " @@ -5716,22 +6198,22 @@ msgstr "" "U{position} уже занят или в нем недостаточно места для размещения этого типа" " устройств: {device_type} ({u_height}U)" -#: dcim/models/devices.py:922 +#: netbox/dcim/models/devices.py:922 #, python-brace-format msgid "{ip} is not an IPv4 address." msgstr "{ip} не является адресом IPv4." -#: dcim/models/devices.py:931 dcim/models/devices.py:946 +#: netbox/dcim/models/devices.py:931 netbox/dcim/models/devices.py:946 #, python-brace-format msgid "The specified IP address ({ip}) is not assigned to this device." msgstr "Указанный IP-адрес ({ip}) не назначено этому устройству." -#: dcim/models/devices.py:937 +#: netbox/dcim/models/devices.py:937 #, python-brace-format msgid "{ip} is not an IPv6 address." msgstr "{ip} не является адресом IPv6." -#: dcim/models/devices.py:964 +#: netbox/dcim/models/devices.py:964 #, python-brace-format msgid "" "The assigned platform is limited to {platform_manufacturer} device types, " @@ -5740,18 +6222,18 @@ msgstr "" "Назначенная платформа ограничена {platform_manufacturer} типы устройств, но " "данный тип устройства относится к {devicetype_manufacturer}." -#: dcim/models/devices.py:975 +#: netbox/dcim/models/devices.py:975 #, python-brace-format msgid "The assigned cluster belongs to a different site ({site})" msgstr "Назначенный кластер принадлежит другому сайту ({site})" -#: dcim/models/devices.py:983 +#: netbox/dcim/models/devices.py:983 msgid "A device assigned to a virtual chassis must have its position defined." msgstr "" "Положение устройства, назначенного виртуальному шасси, должно быть " "определено." -#: dcim/models/devices.py:988 +#: netbox/dcim/models/devices.py:988 #, python-brace-format msgid "" "Device cannot be removed from virtual chassis {virtual_chassis} because it " @@ -5760,15 +6242,15 @@ msgstr "" "Устройство нельзя удалить из виртуального корпуса {virtual_chassis} потому " "что в настоящее время оно назначено его хозяином." -#: dcim/models/devices.py:1196 +#: netbox/dcim/models/devices.py:1196 msgid "module" msgstr "модуль" -#: dcim/models/devices.py:1197 +#: netbox/dcim/models/devices.py:1197 msgid "modules" msgstr "модули" -#: dcim/models/devices.py:1213 +#: netbox/dcim/models/devices.py:1213 #, python-brace-format msgid "" "Module must be installed within a module bay belonging to the assigned " @@ -5777,21 +6259,21 @@ msgstr "" "Модуль должен быть установлен в модульном отсеке, принадлежащем назначенному" " устройству ({device})." -#: dcim/models/devices.py:1334 +#: netbox/dcim/models/devices.py:1339 msgid "domain" msgstr "Домен" -#: dcim/models/devices.py:1347 dcim/models/devices.py:1348 +#: netbox/dcim/models/devices.py:1352 netbox/dcim/models/devices.py:1353 msgid "virtual chassis" msgstr "виртуальное шасси" -#: dcim/models/devices.py:1363 +#: netbox/dcim/models/devices.py:1368 #, python-brace-format msgid "" "The selected master ({master}) is not assigned to this virtual chassis." msgstr "Выбранный мастер ({master}) не назначено этому виртуальному шасси." -#: dcim/models/devices.py:1379 +#: netbox/dcim/models/devices.py:1384 #, python-brace-format msgid "" "Unable to delete virtual chassis {self}. There are member interfaces which " @@ -5800,61 +6282,61 @@ msgstr "" "Невозможно удалить виртуальное шасси {self}. Существуют интерфейсы-члены, " "которые образуют межкорпусные интерфейсы LAG." -#: dcim/models/devices.py:1404 vpn/models/l2vpn.py:37 +#: netbox/dcim/models/devices.py:1409 netbox/vpn/models/l2vpn.py:37 msgid "identifier" msgstr "идентификатор" -#: dcim/models/devices.py:1405 +#: netbox/dcim/models/devices.py:1410 msgid "Numeric identifier unique to the parent device" msgstr "Цифровой идентификатор, уникальный для родительского устройства" -#: dcim/models/devices.py:1433 extras/models/customfields.py:225 -#: extras/models/models.py:107 extras/models/models.py:694 -#: netbox/models/__init__.py:115 +#: 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:115 msgid "comments" msgstr "комментарии" -#: dcim/models/devices.py:1449 +#: netbox/dcim/models/devices.py:1454 msgid "virtual device context" msgstr "виртуальный контекст" -#: dcim/models/devices.py:1450 +#: netbox/dcim/models/devices.py:1455 msgid "virtual device contexts" msgstr "виртуальные контексты" -#: dcim/models/devices.py:1482 +#: netbox/dcim/models/devices.py:1487 #, python-brace-format msgid "{ip} is not an IPv{family} address." msgstr "{ip} не является IPV{family} адрес." -#: dcim/models/devices.py:1488 +#: netbox/dcim/models/devices.py:1493 msgid "Primary IP address must belong to an interface on the assigned device." msgstr "" "Основной IP-адрес должен принадлежать интерфейсу на назначенном устройстве." -#: dcim/models/mixins.py:15 extras/models/configs.py:41 -#: extras/models/models.py:313 extras/models/models.py:522 -#: extras/models/search.py:48 ipam/models/ip.py:194 +#: netbox/dcim/models/mixins.py:15 netbox/extras/models/configs.py:41 +#: netbox/extras/models/models.py:313 netbox/extras/models/models.py:522 +#: netbox/extras/models/search.py:48 netbox/ipam/models/ip.py:194 msgid "weight" msgstr "вес" -#: dcim/models/mixins.py:22 +#: netbox/dcim/models/mixins.py:22 msgid "weight unit" msgstr "весовая единица" -#: dcim/models/mixins.py:51 +#: netbox/dcim/models/mixins.py:51 msgid "Must specify a unit when setting a weight" msgstr "При установке веса необходимо указать единицу измерения" -#: dcim/models/power.py:55 +#: netbox/dcim/models/power.py:55 msgid "power panel" -msgstr "панель питания" +msgstr "распределительный щит" -#: dcim/models/power.py:56 +#: netbox/dcim/models/power.py:56 msgid "power panels" -msgstr "панели питания" +msgstr "распределительные щиты" -#: dcim/models/power.py:70 +#: netbox/dcim/models/power.py:70 #, python-brace-format msgid "" "Location {location} ({location_site}) is in a different site than {site}" @@ -5862,108 +6344,108 @@ msgstr "" "Расположение локации{location} ({location_site}) не соответствует " "требующемуся сайту {site}" -#: dcim/models/power.py:108 +#: netbox/dcim/models/power.py:108 msgid "supply" msgstr "запас" -#: dcim/models/power.py:114 +#: netbox/dcim/models/power.py:114 msgid "phase" msgstr "фаза" -#: dcim/models/power.py:120 +#: netbox/dcim/models/power.py:120 msgid "voltage" msgstr "напряжение" -#: dcim/models/power.py:125 +#: netbox/dcim/models/power.py:125 msgid "amperage" msgstr "сила тока" -#: dcim/models/power.py:130 +#: netbox/dcim/models/power.py:130 msgid "max utilization" msgstr "максимальное использование" -#: dcim/models/power.py:133 +#: netbox/dcim/models/power.py:133 msgid "Maximum permissible draw (percentage)" msgstr "Максимально допустимое потребление (в процентах)" -#: dcim/models/power.py:136 +#: netbox/dcim/models/power.py:136 msgid "available power" msgstr "доступная мощность" -#: dcim/models/power.py:164 +#: netbox/dcim/models/power.py:164 msgid "power feed" -msgstr "подача питания" +msgstr "Кабель питания" -#: dcim/models/power.py:165 +#: netbox/dcim/models/power.py:165 msgid "power feeds" -msgstr "источники питания" +msgstr "кабели питания" -#: dcim/models/power.py:179 +#: netbox/dcim/models/power.py:179 #, python-brace-format msgid "" "Rack {rack} ({rack_site}) and power panel {powerpanel} ({powerpanel_site}) " "are in different sites." msgstr "" -"Стойка {rack} ({rack_site}) и панель питания {powerpanel} " +"Стойка {rack} ({rack_site}) и распределительный щит {powerpanel} " "({powerpanel_site}) расположены на разных сайтах." -#: dcim/models/power.py:190 +#: netbox/dcim/models/power.py:190 msgid "Voltage cannot be negative for AC supply" msgstr "Напряжение питания переменного тока не может быть отрицательным" -#: dcim/models/racks.py:47 +#: netbox/dcim/models/racks.py:47 msgid "width" msgstr "ширина" -#: dcim/models/racks.py:48 +#: netbox/dcim/models/racks.py:48 msgid "Rail-to-rail width" msgstr "Ширина от рельса до рельса" -#: dcim/models/racks.py:56 +#: netbox/dcim/models/racks.py:56 msgid "Height in rack units" msgstr "Высота в юнитах стойки" -#: dcim/models/racks.py:60 +#: netbox/dcim/models/racks.py:60 msgid "starting unit" msgstr "начальный юнит" -#: dcim/models/racks.py:62 +#: netbox/dcim/models/racks.py:62 msgid "Starting unit for rack" msgstr "Начальный юнит для стойки" -#: dcim/models/racks.py:66 +#: netbox/dcim/models/racks.py:66 msgid "descending units" msgstr "единицы по убыванию" -#: dcim/models/racks.py:67 +#: netbox/dcim/models/racks.py:67 msgid "Units are numbered top-to-bottom" msgstr "Единицы нумеруются сверху вниз" -#: dcim/models/racks.py:72 +#: netbox/dcim/models/racks.py:72 msgid "outer width" msgstr "внешняя ширина" -#: dcim/models/racks.py:75 +#: netbox/dcim/models/racks.py:75 msgid "Outer dimension of rack (width)" msgstr "Наружный размер стойки (ширина)" -#: dcim/models/racks.py:78 +#: netbox/dcim/models/racks.py:78 msgid "outer depth" msgstr "внешняя глубина" -#: dcim/models/racks.py:81 +#: netbox/dcim/models/racks.py:81 msgid "Outer dimension of rack (depth)" msgstr "Внешний размер стойки (глубина)" -#: dcim/models/racks.py:84 +#: netbox/dcim/models/racks.py:84 msgid "outer unit" msgstr "внешний юнит" -#: dcim/models/racks.py:90 +#: netbox/dcim/models/racks.py:90 msgid "mounting depth" msgstr "глубина монтажа" -#: dcim/models/racks.py:94 +#: netbox/dcim/models/racks.py:94 msgid "" "Maximum depth of a mounted device, in millimeters. For four-post racks, this" " is the distance between the front and rear rails." @@ -5972,75 +6454,76 @@ msgstr "" "четырехстоечных стоек это расстояние между передними и задними " "направляющими." -#: dcim/models/racks.py:102 +#: netbox/dcim/models/racks.py:102 msgid "max weight" msgstr "максимальный вес" -#: dcim/models/racks.py:105 +#: netbox/dcim/models/racks.py:105 msgid "Maximum load capacity for the rack" msgstr "Максимальная грузоподъемность стойки" -#: dcim/models/racks.py:125 dcim/models/racks.py:252 +#: netbox/dcim/models/racks.py:125 netbox/dcim/models/racks.py:252 msgid "form factor" msgstr "форм-фактор" -#: dcim/models/racks.py:162 +#: netbox/dcim/models/racks.py:162 msgid "rack type" msgstr "тип стойки" -#: dcim/models/racks.py:163 +#: netbox/dcim/models/racks.py:163 msgid "rack types" msgstr "типы стоек" -#: dcim/models/racks.py:180 dcim/models/racks.py:379 +#: netbox/dcim/models/racks.py:180 netbox/dcim/models/racks.py:379 msgid "Must specify a unit when setting an outer width/depth" msgstr "" "При настройке внешней ширины/глубины необходимо указать единицу измерения" -#: dcim/models/racks.py:184 dcim/models/racks.py:383 +#: netbox/dcim/models/racks.py:184 netbox/dcim/models/racks.py:383 msgid "Must specify a unit when setting a maximum weight" msgstr "При установке максимального веса необходимо указать единицу измерения" -#: dcim/models/racks.py:230 +#: netbox/dcim/models/racks.py:230 msgid "rack role" msgstr "назначение стойки" -#: dcim/models/racks.py:231 +#: netbox/dcim/models/racks.py:231 msgid "rack roles" msgstr "назначение стоек" -#: dcim/models/racks.py:274 +#: netbox/dcim/models/racks.py:274 msgid "facility ID" msgstr "идентификатор объекта" -#: dcim/models/racks.py:275 +#: netbox/dcim/models/racks.py:275 msgid "Locally-assigned identifier" msgstr "Локально назначенный идентификатор" -#: dcim/models/racks.py:308 ipam/forms/bulk_import.py:201 -#: ipam/forms/bulk_import.py:266 ipam/forms/bulk_import.py:301 -#: ipam/forms/bulk_import.py:459 virtualization/forms/bulk_import.py:112 +#: 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 msgid "Functional role" msgstr "Функциональная роль" -#: dcim/models/racks.py:321 +#: netbox/dcim/models/racks.py:321 msgid "A unique tag used to identify this rack" msgstr "Инвентарный номер, используемый для идентификации этой стойки" -#: dcim/models/racks.py:359 +#: netbox/dcim/models/racks.py:359 msgid "rack" msgstr "стойка" -#: dcim/models/racks.py:360 +#: netbox/dcim/models/racks.py:360 msgid "racks" msgstr "стойки" -#: dcim/models/racks.py:375 +#: netbox/dcim/models/racks.py:375 #, python-brace-format msgid "Assigned location must belong to parent site ({site})." msgstr "Назначенная локация должна принадлежать родительскому сайту ({site})." -#: dcim/models/racks.py:393 +#: netbox/dcim/models/racks.py:393 #, python-brace-format msgid "" "Rack must be at least {min_height}U tall to house currently installed " @@ -6049,7 +6532,7 @@ msgstr "" "Стойка должна иметь высоту не менее {min_height}чтобы разместить, " "установленные в настоящее время устройства." -#: dcim/models/racks.py:400 +#: netbox/dcim/models/racks.py:400 #, python-brace-format msgid "" "Rack unit numbering must begin at {position} or less to house currently " @@ -6058,895 +6541,957 @@ msgstr "" "Нумерация стоек должна начинаться с {position} или меньше для размещения " "установленных в настоящее время устройств." -#: dcim/models/racks.py:408 +#: netbox/dcim/models/racks.py:408 #, python-brace-format msgid "Location must be from the same site, {site}." msgstr "Локация должна располагаться в том-же сайте, {site}." -#: dcim/models/racks.py:670 +#: netbox/dcim/models/racks.py:670 msgid "units" msgstr "юниты" -#: dcim/models/racks.py:696 +#: netbox/dcim/models/racks.py:696 msgid "rack reservation" msgstr "Резервирование стойки" -#: dcim/models/racks.py:697 +#: netbox/dcim/models/racks.py:697 msgid "rack reservations" msgstr "Резервирование стоек" -#: dcim/models/racks.py:714 +#: netbox/dcim/models/racks.py:714 #, python-brace-format msgid "Invalid unit(s) for {height}U rack: {unit_list}" msgstr "" "Неверные единицы измерения для стоек высотой{height}U по списку: {unit_list}" -#: dcim/models/racks.py:727 +#: netbox/dcim/models/racks.py:727 #, python-brace-format msgid "The following units have already been reserved: {unit_list}" msgstr "Следующие юниты уже зарезервированы: {unit_list}" -#: dcim/models/sites.py:49 +#: netbox/dcim/models/sites.py:49 msgid "A top-level region with this name already exists." msgstr "Регион верхнего уровня с таким названием уже существует." -#: dcim/models/sites.py:59 +#: netbox/dcim/models/sites.py:59 msgid "A top-level region with this slug already exists." msgstr "Регион верхнего уровня с этой подстрокой уже существует." -#: dcim/models/sites.py:62 +#: netbox/dcim/models/sites.py:62 msgid "region" msgstr "регион" -#: dcim/models/sites.py:63 +#: netbox/dcim/models/sites.py:63 msgid "regions" msgstr "регионы" -#: dcim/models/sites.py:102 +#: netbox/dcim/models/sites.py:102 msgid "A top-level site group with this name already exists." msgstr "Группа сайтов верхнего уровня с таким именем уже существует." -#: dcim/models/sites.py:112 +#: netbox/dcim/models/sites.py:112 msgid "A top-level site group with this slug already exists." msgstr "Группа сайтов верхнего уровня с этой подстрокой уже существует." -#: dcim/models/sites.py:115 +#: netbox/dcim/models/sites.py:115 msgid "site group" msgstr "группа сайта" -#: dcim/models/sites.py:116 +#: netbox/dcim/models/sites.py:116 msgid "site groups" msgstr "группы сайтов" -#: dcim/models/sites.py:141 +#: netbox/dcim/models/sites.py:141 msgid "Full name of the site" msgstr "Полное имя сайта" -#: dcim/models/sites.py:181 dcim/models/sites.py:279 +#: netbox/dcim/models/sites.py:181 netbox/dcim/models/sites.py:279 msgid "facility" msgstr "объект" -#: dcim/models/sites.py:184 dcim/models/sites.py:282 +#: netbox/dcim/models/sites.py:184 netbox/dcim/models/sites.py:282 msgid "Local facility ID or description" msgstr "Идентификатор или описание местного объекта" -#: dcim/models/sites.py:195 +#: netbox/dcim/models/sites.py:195 msgid "physical address" msgstr "физический адрес" -#: dcim/models/sites.py:198 +#: netbox/dcim/models/sites.py:198 msgid "Physical location of the building" msgstr "Физическое местоположение здания" -#: dcim/models/sites.py:201 +#: netbox/dcim/models/sites.py:201 msgid "shipping address" msgstr "адрес доставки" -#: dcim/models/sites.py:204 +#: netbox/dcim/models/sites.py:204 msgid "If different from the physical address" msgstr "Если отличается от физического адреса" -#: dcim/models/sites.py:238 +#: netbox/dcim/models/sites.py:238 msgid "site" msgstr "сайт" -#: dcim/models/sites.py:239 +#: netbox/dcim/models/sites.py:239 msgid "sites" msgstr "сайты" -#: dcim/models/sites.py:309 +#: netbox/dcim/models/sites.py:309 msgid "A location with this name already exists within the specified site." msgstr "Локация с таким именем уже существует в указанном сайте." -#: dcim/models/sites.py:319 +#: netbox/dcim/models/sites.py:319 msgid "A location with this slug already exists within the specified site." msgstr "Локация с этой подстрокой уже существует в указанном сайте." -#: dcim/models/sites.py:322 +#: netbox/dcim/models/sites.py:322 msgid "location" msgstr "локация" -#: dcim/models/sites.py:323 +#: netbox/dcim/models/sites.py:323 msgid "locations" msgstr "локации" -#: dcim/models/sites.py:337 +#: netbox/dcim/models/sites.py:337 #, python-brace-format msgid "Parent location ({parent}) must belong to the same site ({site})." msgstr "" "Родительская локация ({parent}) должна принадлежать тому же сайту ({site})." -#: dcim/tables/cables.py:55 +#: netbox/dcim/tables/cables.py:55 msgid "Termination A" msgstr "Точка подключения A" -#: dcim/tables/cables.py:60 +#: netbox/dcim/tables/cables.py:60 msgid "Termination B" msgstr "Точка подключения Б" -#: dcim/tables/cables.py:66 wireless/tables/wirelesslink.py:23 +#: netbox/dcim/tables/cables.py:66 netbox/wireless/tables/wirelesslink.py:23 msgid "Device A" msgstr "Устройство A" -#: dcim/tables/cables.py:72 wireless/tables/wirelesslink.py:32 +#: netbox/dcim/tables/cables.py:72 netbox/wireless/tables/wirelesslink.py:32 msgid "Device B" msgstr "Устройство Б" -#: dcim/tables/cables.py:78 +#: netbox/dcim/tables/cables.py:78 msgid "Location A" msgstr "Локация A" -#: dcim/tables/cables.py:84 +#: netbox/dcim/tables/cables.py:84 msgid "Location B" msgstr "Локация Б" -#: dcim/tables/cables.py:90 +#: netbox/dcim/tables/cables.py:90 msgid "Rack A" msgstr "Стойка A" -#: dcim/tables/cables.py:96 +#: netbox/dcim/tables/cables.py:96 msgid "Rack B" msgstr "Стойка Б" -#: dcim/tables/cables.py:102 +#: netbox/dcim/tables/cables.py:102 msgid "Site A" msgstr "Сайт A" -#: dcim/tables/cables.py:108 +#: netbox/dcim/tables/cables.py:108 msgid "Site B" msgstr "Сайт Б" -#: dcim/tables/connections.py:31 dcim/tables/connections.py:50 -#: dcim/tables/connections.py:71 -#: templates/dcim/inc/connection_endpoints.html:16 +#: netbox/dcim/tables/connections.py:31 netbox/dcim/tables/connections.py:50 +#: netbox/dcim/tables/connections.py:71 +#: netbox/templates/dcim/inc/connection_endpoints.html:16 msgid "Reachable" msgstr "Доступен" -#: dcim/tables/devices.py:58 dcim/tables/devices.py:106 -#: dcim/tables/racks.py:150 dcim/tables/sites.py:105 dcim/tables/sites.py:148 -#: extras/tables/tables.py:545 netbox/navigation/menu.py:69 -#: netbox/navigation/menu.py:73 netbox/navigation/menu.py:75 -#: virtualization/forms/model_forms.py:122 -#: virtualization/tables/clusters.py:83 virtualization/views.py:206 +#: 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/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 msgid "Devices" msgstr "Устройства" -#: dcim/tables/devices.py:63 dcim/tables/devices.py:111 -#: virtualization/tables/clusters.py:88 +#: netbox/dcim/tables/devices.py:63 netbox/dcim/tables/devices.py:111 +#: netbox/virtualization/tables/clusters.py:88 msgid "VMs" msgstr "Виртуальные машины" -#: dcim/tables/devices.py:100 dcim/tables/devices.py:216 -#: extras/forms/model_forms.py:630 templates/dcim/device.html:112 -#: templates/dcim/device/render_config.html:11 -#: templates/dcim/device/render_config.html:14 -#: templates/dcim/devicerole.html:44 templates/dcim/platform.html:41 -#: templates/extras/configtemplate.html:10 -#: templates/virtualization/virtualmachine.html:48 -#: templates/virtualization/virtualmachine/render_config.html:11 -#: templates/virtualization/virtualmachine/render_config.html:14 -#: virtualization/tables/virtualmachines.py:107 +#: netbox/dcim/tables/devices.py:100 netbox/dcim/tables/devices.py:216 +#: 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/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 msgid "Config Template" msgstr "Шаблон конфигурации" -#: dcim/tables/devices.py:150 templates/dcim/sitegroup.html:26 +#: netbox/dcim/tables/devices.py:150 netbox/templates/dcim/sitegroup.html:26 msgid "Site Group" msgstr "Группа сайтов" -#: dcim/tables/devices.py:187 dcim/tables/devices.py:1068 -#: ipam/forms/bulk_import.py:503 ipam/forms/model_forms.py:306 -#: ipam/forms/model_forms.py:315 ipam/tables/ip.py:356 ipam/tables/ip.py:423 -#: ipam/tables/ip.py:446 templates/ipam/ipaddress.html:11 -#: virtualization/tables/virtualmachines.py:95 +#: 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/templates/ipam/ipaddress.html:11 +#: netbox/virtualization/tables/virtualmachines.py:95 msgid "IP Address" msgstr "IP-адрес" -#: dcim/tables/devices.py:191 dcim/tables/devices.py:1072 -#: virtualization/tables/virtualmachines.py:86 +#: netbox/dcim/tables/devices.py:191 netbox/dcim/tables/devices.py:1072 +#: netbox/virtualization/tables/virtualmachines.py:86 msgid "IPv4 Address" msgstr "Адрес IPv4" -#: dcim/tables/devices.py:195 dcim/tables/devices.py:1076 -#: virtualization/tables/virtualmachines.py:90 +#: netbox/dcim/tables/devices.py:195 netbox/dcim/tables/devices.py:1076 +#: netbox/virtualization/tables/virtualmachines.py:90 msgid "IPv6 Address" msgstr "Адрес IPv6" -#: dcim/tables/devices.py:210 +#: netbox/dcim/tables/devices.py:210 msgid "VC Position" msgstr "Позиция в шасси" -#: dcim/tables/devices.py:213 +#: netbox/dcim/tables/devices.py:213 msgid "VC Priority" msgstr "Приоритет шасси" -#: dcim/tables/devices.py:220 templates/dcim/device_edit.html:38 -#: templates/dcim/devicebay_populate.html:16 +#: netbox/dcim/tables/devices.py:220 netbox/templates/dcim/device_edit.html:38 +#: netbox/templates/dcim/devicebay_populate.html:16 msgid "Parent Device" msgstr "Родительское устройство" -#: dcim/tables/devices.py:225 +#: netbox/dcim/tables/devices.py:225 msgid "Position (Device Bay)" msgstr "Положение (отсек для устройств)" -#: dcim/tables/devices.py:234 +#: netbox/dcim/tables/devices.py:234 msgid "Console ports" msgstr "Консольные порты" -#: dcim/tables/devices.py:237 +#: netbox/dcim/tables/devices.py:237 msgid "Console server ports" msgstr "Порты консольного сервера" -#: dcim/tables/devices.py:240 +#: netbox/dcim/tables/devices.py:240 msgid "Power ports" msgstr "Порты питания" -#: dcim/tables/devices.py:243 +#: netbox/dcim/tables/devices.py:243 msgid "Power outlets" msgstr "Розетки питания" -#: dcim/tables/devices.py:246 dcim/tables/devices.py:1081 -#: dcim/tables/devicetypes.py:128 dcim/views.py:1042 dcim/views.py:1281 -#: dcim/views.py:1977 netbox/navigation/menu.py:94 -#: netbox/navigation/menu.py:250 templates/dcim/device/base.html:37 -#: templates/dcim/device_list.html:43 templates/dcim/devicetype/base.html:34 -#: templates/dcim/inc/moduletype_buttons.html:25 templates/dcim/module.html:34 -#: templates/dcim/virtualdevicecontext.html:61 -#: templates/dcim/virtualdevicecontext.html:81 -#: templates/virtualization/virtualmachine/base.html:27 -#: templates/virtualization/virtualmachine_list.html:14 -#: virtualization/tables/virtualmachines.py:101 virtualization/views.py:366 -#: wireless/tables/wirelesslan.py:55 +#: 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/templates/dcim/device/base.html:37 +#: netbox/templates/dcim/device_list.html:43 +#: netbox/templates/dcim/devicetype/base.html:34 +#: netbox/templates/dcim/inc/moduletype_buttons.html:25 +#: netbox/templates/dcim/module.html:34 +#: netbox/templates/dcim/virtualdevicecontext.html:61 +#: netbox/templates/dcim/virtualdevicecontext.html:81 +#: netbox/templates/virtualization/virtualmachine/base.html:27 +#: netbox/templates/virtualization/virtualmachine_list.html:14 +#: netbox/virtualization/tables/virtualmachines.py:101 +#: netbox/virtualization/views.py:364 netbox/wireless/tables/wirelesslan.py:55 msgid "Interfaces" msgstr "Интерфейсы" -#: dcim/tables/devices.py:249 +#: netbox/dcim/tables/devices.py:249 msgid "Front ports" msgstr "Фронтальные порты" -#: dcim/tables/devices.py:255 +#: netbox/dcim/tables/devices.py:255 msgid "Device bays" msgstr "Отсеки для устройств" -#: dcim/tables/devices.py:258 +#: netbox/dcim/tables/devices.py:258 msgid "Module bays" msgstr "Отсеки для модулей" -#: dcim/tables/devices.py:261 +#: netbox/dcim/tables/devices.py:261 msgid "Inventory items" msgstr "Комплектующие" -#: dcim/tables/devices.py:305 dcim/tables/modules.py:56 -#: templates/dcim/modulebay.html:17 +#: netbox/dcim/tables/devices.py:305 netbox/dcim/tables/modules.py:57 +#: netbox/templates/dcim/modulebay.html:17 msgid "Module Bay" msgstr "Модульный отсек" -#: dcim/tables/devices.py:318 dcim/tables/devicetypes.py:47 -#: dcim/tables/devicetypes.py:143 dcim/views.py:1117 dcim/views.py:2075 -#: netbox/navigation/menu.py:103 templates/dcim/device/base.html:52 -#: templates/dcim/device_list.html:71 templates/dcim/devicetype/base.html:49 -#: templates/dcim/inc/panels/inventory_items.html:6 -#: templates/dcim/inventoryitemrole.html:32 +#: netbox/dcim/tables/devices.py:318 netbox/dcim/tables/devicetypes.py:47 +#: netbox/dcim/tables/devicetypes.py:143 netbox/dcim/views.py:1115 +#: netbox/dcim/views.py:2073 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 +#: netbox/templates/dcim/inc/panels/inventory_items.html:6 +#: netbox/templates/dcim/inventoryitemrole.html:32 msgid "Inventory Items" msgstr "Предметы инвентаря" -#: dcim/tables/devices.py:333 +#: netbox/dcim/tables/devices.py:333 msgid "Cable Color" msgstr "Цвет кабеля" -#: dcim/tables/devices.py:339 +#: netbox/dcim/tables/devices.py:339 msgid "Link Peers" msgstr "Связать узлы" -#: dcim/tables/devices.py:342 +#: netbox/dcim/tables/devices.py:342 msgid "Mark Connected" msgstr "Отметить подключение" -#: dcim/tables/devices.py:461 +#: netbox/dcim/tables/devices.py:461 msgid "Maximum draw (W)" msgstr "Максимальная потребляемая мощность (Вт)" -#: dcim/tables/devices.py:464 +#: netbox/dcim/tables/devices.py:464 msgid "Allocated draw (W)" msgstr "Выделенная мощность (Вт)" -#: dcim/tables/devices.py:558 ipam/forms/model_forms.py:701 -#: ipam/tables/fhrp.py:28 ipam/views.py:596 ipam/views.py:696 -#: netbox/navigation/menu.py:158 netbox/navigation/menu.py:160 -#: templates/dcim/interface.html:339 templates/ipam/ipaddress_bulk_add.html:15 -#: templates/ipam/service.html:40 templates/virtualization/vminterface.html:85 -#: vpn/tables/tunnels.py:98 +#: netbox/dcim/tables/devices.py:558 netbox/ipam/forms/model_forms.py: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/templates/ipam/ipaddress_bulk_add.html:15 +#: netbox/templates/ipam/service.html:40 +#: netbox/templates/virtualization/vminterface.html:85 +#: netbox/vpn/tables/tunnels.py:98 msgid "IP Addresses" msgstr "IP-адреса" -#: dcim/tables/devices.py:564 netbox/navigation/menu.py:202 -#: templates/ipam/inc/panels/fhrp_groups.html:6 +#: netbox/dcim/tables/devices.py:564 netbox/netbox/navigation/menu.py:202 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:6 msgid "FHRP Groups" msgstr "Группы FHRP" -#: dcim/tables/devices.py:576 templates/dcim/interface.html:89 -#: templates/virtualization/vminterface.html:67 templates/vpn/tunnel.html:18 -#: templates/vpn/tunneltermination.html:13 vpn/forms/bulk_edit.py:76 -#: vpn/forms/bulk_import.py:76 vpn/forms/filtersets.py:42 -#: vpn/forms/filtersets.py:82 vpn/forms/model_forms.py:60 -#: vpn/forms/model_forms.py:145 vpn/tables/tunnels.py:78 +#: netbox/dcim/tables/devices.py:576 netbox/templates/dcim/interface.html:89 +#: netbox/templates/virtualization/vminterface.html:67 +#: netbox/templates/vpn/tunnel.html:18 +#: netbox/templates/vpn/tunneltermination.html:13 +#: netbox/vpn/forms/bulk_edit.py:76 netbox/vpn/forms/bulk_import.py:76 +#: netbox/vpn/forms/filtersets.py:42 netbox/vpn/forms/filtersets.py:82 +#: netbox/vpn/forms/model_forms.py:60 netbox/vpn/forms/model_forms.py:145 +#: netbox/vpn/tables/tunnels.py:78 msgid "Tunnel" msgstr "Туннель" -#: dcim/tables/devices.py:604 dcim/tables/devicetypes.py:227 -#: templates/dcim/interface.html:65 +#: netbox/dcim/tables/devices.py:604 netbox/dcim/tables/devicetypes.py:227 +#: netbox/templates/dcim/interface.html:65 msgid "Management Only" msgstr "Только управление" -#: dcim/tables/devices.py:623 +#: netbox/dcim/tables/devices.py:623 msgid "VDCs" msgstr "Виртуальные контексты устройств(VDCs)" -#: dcim/tables/devices.py:873 templates/dcim/modulebay.html:53 +#: netbox/dcim/tables/devices.py:873 netbox/templates/dcim/modulebay.html:53 msgid "Installed Module" msgstr "Установленный модуль" -#: dcim/tables/devices.py:876 +#: netbox/dcim/tables/devices.py:876 msgid "Module Serial" msgstr "Серийный номер модуля" -#: dcim/tables/devices.py:880 +#: netbox/dcim/tables/devices.py:880 msgid "Module Asset Tag" msgstr "Тег активов модуля" -#: dcim/tables/devices.py:889 +#: netbox/dcim/tables/devices.py:889 msgid "Module Status" msgstr "Состояние модуля" -#: dcim/tables/devices.py:944 dcim/tables/devicetypes.py:312 -#: templates/dcim/inventoryitem.html:40 +#: netbox/dcim/tables/devices.py:944 netbox/dcim/tables/devicetypes.py:312 +#: netbox/templates/dcim/inventoryitem.html:40 msgid "Component" msgstr "Компонент" -#: dcim/tables/devices.py:1000 +#: netbox/dcim/tables/devices.py:1000 msgid "Items" msgstr "Предметы" -#: dcim/tables/devicetypes.py:37 netbox/navigation/menu.py:84 -#: netbox/navigation/menu.py:86 +#: netbox/dcim/tables/devicetypes.py:37 netbox/netbox/navigation/menu.py:84 +#: netbox/netbox/navigation/menu.py:86 msgid "Device Types" msgstr "Типы устройств" -#: dcim/tables/devicetypes.py:42 netbox/navigation/menu.py:87 +#: netbox/dcim/tables/devicetypes.py:42 netbox/netbox/navigation/menu.py:87 msgid "Module Types" msgstr "Типы модулей" -#: dcim/tables/devicetypes.py:52 extras/forms/filtersets.py:371 -#: extras/forms/model_forms.py:537 extras/tables/tables.py:540 -#: netbox/navigation/menu.py:78 +#: 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/netbox/navigation/menu.py:78 msgid "Platforms" msgstr "Платформы" -#: dcim/tables/devicetypes.py:84 templates/dcim/devicetype.html:29 +#: netbox/dcim/tables/devicetypes.py:84 +#: netbox/templates/dcim/devicetype.html:29 msgid "Default Platform" msgstr "Платформа по умолчанию" -#: dcim/tables/devicetypes.py:88 templates/dcim/devicetype.html:45 +#: netbox/dcim/tables/devicetypes.py:88 +#: netbox/templates/dcim/devicetype.html:45 msgid "Full Depth" msgstr "Полная глубина" -#: dcim/tables/devicetypes.py:98 +#: netbox/dcim/tables/devicetypes.py:98 msgid "U Height" msgstr "Высота U" -#: dcim/tables/devicetypes.py:113 dcim/tables/modules.py:26 -#: dcim/tables/racks.py:89 +#: netbox/dcim/tables/devicetypes.py:113 netbox/dcim/tables/modules.py:26 +#: netbox/dcim/tables/racks.py:89 msgid "Instances" msgstr "Инстансы" -#: dcim/tables/devicetypes.py:116 dcim/views.py:982 dcim/views.py:1221 -#: dcim/views.py:1913 netbox/navigation/menu.py:97 -#: templates/dcim/device/base.html:25 templates/dcim/device_list.html:15 -#: templates/dcim/devicetype/base.html:22 -#: templates/dcim/inc/moduletype_buttons.html:13 templates/dcim/module.html:22 +#: netbox/dcim/tables/devicetypes.py:116 netbox/dcim/views.py:980 +#: netbox/dcim/views.py:1219 netbox/dcim/views.py:1911 +#: netbox/netbox/navigation/menu.py:97 +#: netbox/templates/dcim/device/base.html:25 +#: netbox/templates/dcim/device_list.html:15 +#: netbox/templates/dcim/devicetype/base.html:22 +#: netbox/templates/dcim/inc/moduletype_buttons.html:13 +#: netbox/templates/dcim/module.html:22 msgid "Console Ports" msgstr "Порты консоли" -#: dcim/tables/devicetypes.py:119 dcim/views.py:997 dcim/views.py:1236 -#: dcim/views.py:1929 netbox/navigation/menu.py:98 -#: templates/dcim/device/base.html:28 templates/dcim/device_list.html:22 -#: templates/dcim/devicetype/base.html:25 -#: templates/dcim/inc/moduletype_buttons.html:16 templates/dcim/module.html:25 +#: netbox/dcim/tables/devicetypes.py:119 netbox/dcim/views.py:995 +#: netbox/dcim/views.py:1234 netbox/dcim/views.py:1927 +#: netbox/netbox/navigation/menu.py:98 +#: netbox/templates/dcim/device/base.html:28 +#: netbox/templates/dcim/device_list.html:22 +#: netbox/templates/dcim/devicetype/base.html:25 +#: netbox/templates/dcim/inc/moduletype_buttons.html:16 +#: netbox/templates/dcim/module.html:25 msgid "Console Server Ports" msgstr "Порты консольного сервера" -#: dcim/tables/devicetypes.py:122 dcim/views.py:1012 dcim/views.py:1251 -#: dcim/views.py:1945 netbox/navigation/menu.py:99 -#: templates/dcim/device/base.html:31 templates/dcim/device_list.html:29 -#: templates/dcim/devicetype/base.html:28 -#: templates/dcim/inc/moduletype_buttons.html:19 templates/dcim/module.html:28 +#: netbox/dcim/tables/devicetypes.py:122 netbox/dcim/views.py:1010 +#: netbox/dcim/views.py:1249 netbox/dcim/views.py:1943 +#: netbox/netbox/navigation/menu.py:99 +#: netbox/templates/dcim/device/base.html:31 +#: netbox/templates/dcim/device_list.html:29 +#: netbox/templates/dcim/devicetype/base.html:28 +#: netbox/templates/dcim/inc/moduletype_buttons.html:19 +#: netbox/templates/dcim/module.html:28 msgid "Power Ports" msgstr "Порты питания" -#: dcim/tables/devicetypes.py:125 dcim/views.py:1027 dcim/views.py:1266 -#: dcim/views.py:1961 netbox/navigation/menu.py:100 -#: templates/dcim/device/base.html:34 templates/dcim/device_list.html:36 -#: templates/dcim/devicetype/base.html:31 -#: templates/dcim/inc/moduletype_buttons.html:22 templates/dcim/module.html:31 +#: netbox/dcim/tables/devicetypes.py:125 netbox/dcim/views.py:1025 +#: netbox/dcim/views.py:1264 netbox/dcim/views.py:1959 +#: netbox/netbox/navigation/menu.py:100 +#: netbox/templates/dcim/device/base.html:34 +#: netbox/templates/dcim/device_list.html:36 +#: netbox/templates/dcim/devicetype/base.html:31 +#: netbox/templates/dcim/inc/moduletype_buttons.html:22 +#: netbox/templates/dcim/module.html:31 msgid "Power Outlets" msgstr "Розетки питания" -#: dcim/tables/devicetypes.py:131 dcim/views.py:1057 dcim/views.py:1296 -#: dcim/views.py:1999 netbox/navigation/menu.py:95 -#: templates/dcim/device/base.html:40 templates/dcim/devicetype/base.html:37 -#: templates/dcim/inc/moduletype_buttons.html:28 templates/dcim/module.html:37 +#: netbox/dcim/tables/devicetypes.py:131 netbox/dcim/views.py:1055 +#: netbox/dcim/views.py:1294 netbox/dcim/views.py:1997 +#: netbox/netbox/navigation/menu.py:95 +#: netbox/templates/dcim/device/base.html:40 +#: netbox/templates/dcim/devicetype/base.html:37 +#: netbox/templates/dcim/inc/moduletype_buttons.html:28 +#: netbox/templates/dcim/module.html:37 msgid "Front Ports" msgstr "Фронтальные порты" -#: dcim/tables/devicetypes.py:134 dcim/views.py:1072 dcim/views.py:1311 -#: dcim/views.py:2015 netbox/navigation/menu.py:96 -#: templates/dcim/device/base.html:43 templates/dcim/device_list.html:50 -#: templates/dcim/devicetype/base.html:40 -#: templates/dcim/inc/moduletype_buttons.html:31 templates/dcim/module.html:40 +#: netbox/dcim/tables/devicetypes.py:134 netbox/dcim/views.py:1070 +#: netbox/dcim/views.py:1309 netbox/dcim/views.py:2013 +#: netbox/netbox/navigation/menu.py:96 +#: netbox/templates/dcim/device/base.html:43 +#: netbox/templates/dcim/device_list.html:50 +#: netbox/templates/dcim/devicetype/base.html:40 +#: netbox/templates/dcim/inc/moduletype_buttons.html:31 +#: netbox/templates/dcim/module.html:40 msgid "Rear Ports" msgstr "Задние порты" -#: dcim/tables/devicetypes.py:137 dcim/views.py:1102 dcim/views.py:2055 -#: netbox/navigation/menu.py:102 templates/dcim/device/base.html:49 -#: templates/dcim/device_list.html:57 templates/dcim/devicetype/base.html:46 +#: netbox/dcim/tables/devicetypes.py:137 netbox/dcim/views.py:1100 +#: netbox/dcim/views.py:2053 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 "Отсеки для устройств" -#: dcim/tables/devicetypes.py:140 dcim/views.py:1087 dcim/views.py:1326 -#: dcim/views.py:2035 netbox/navigation/menu.py:101 -#: templates/dcim/device/base.html:46 templates/dcim/device_list.html:64 -#: templates/dcim/devicetype/base.html:43 -#: templates/dcim/inc/moduletype_buttons.html:34 templates/dcim/module.html:43 +#: netbox/dcim/tables/devicetypes.py:140 netbox/dcim/views.py:1085 +#: netbox/dcim/views.py:1324 netbox/dcim/views.py:2033 +#: netbox/netbox/navigation/menu.py:101 +#: netbox/templates/dcim/device/base.html:46 +#: netbox/templates/dcim/device_list.html:64 +#: netbox/templates/dcim/devicetype/base.html:43 +#: netbox/templates/dcim/inc/moduletype_buttons.html:34 +#: netbox/templates/dcim/module.html:43 msgid "Module Bays" msgstr "Отсеки для модулей" -#: dcim/tables/power.py:36 netbox/navigation/menu.py:297 -#: templates/dcim/powerpanel.html:51 +#: netbox/dcim/tables/power.py:36 netbox/netbox/navigation/menu.py:297 +#: netbox/templates/dcim/powerpanel.html:51 msgid "Power Feeds" -msgstr "Источники питания" +msgstr "Кабели питания" -#: dcim/tables/power.py:80 templates/dcim/powerfeed.html:99 +#: netbox/dcim/tables/power.py:80 netbox/templates/dcim/powerfeed.html:99 msgid "Max Utilization" msgstr "Максимальное использование" -#: dcim/tables/power.py:84 +#: netbox/dcim/tables/power.py:84 msgid "Available Power (VA)" msgstr "Доступная мощность (ВА)" -#: dcim/tables/racks.py:30 dcim/tables/sites.py:143 -#: netbox/navigation/menu.py:43 netbox/navigation/menu.py:47 -#: netbox/navigation/menu.py:49 +#: netbox/dcim/tables/racks.py:30 netbox/dcim/tables/sites.py:143 +#: netbox/netbox/navigation/menu.py:43 netbox/netbox/navigation/menu.py:47 +#: netbox/netbox/navigation/menu.py:49 msgid "Racks" msgstr "Стойки" -#: dcim/tables/racks.py:63 dcim/tables/racks.py:142 -#: templates/dcim/device.html:318 -#: templates/dcim/inc/panels/racktype_dimensions.html:14 +#: netbox/dcim/tables/racks.py:63 netbox/dcim/tables/racks.py:142 +#: netbox/templates/dcim/device.html:318 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:14 msgid "Height" msgstr "Высота" -#: dcim/tables/racks.py:67 dcim/tables/racks.py:165 -#: templates/dcim/inc/panels/racktype_dimensions.html:18 +#: netbox/dcim/tables/racks.py:67 netbox/dcim/tables/racks.py:165 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:18 msgid "Outer Width" msgstr "Внешняя ширина" -#: dcim/tables/racks.py:71 dcim/tables/racks.py:169 -#: templates/dcim/inc/panels/racktype_dimensions.html:28 +#: netbox/dcim/tables/racks.py:71 netbox/dcim/tables/racks.py:169 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:28 msgid "Outer Depth" msgstr "Внешняя глубина" -#: dcim/tables/racks.py:79 dcim/tables/racks.py:177 +#: netbox/dcim/tables/racks.py:79 netbox/dcim/tables/racks.py:177 msgid "Max Weight" msgstr "Максимальный вес" -#: dcim/tables/racks.py:154 +#: netbox/dcim/tables/racks.py:154 msgid "Space" msgstr "Пространство" -#: dcim/tables/sites.py:30 dcim/tables/sites.py:57 -#: extras/forms/filtersets.py:351 extras/forms/model_forms.py:517 -#: ipam/forms/bulk_edit.py:131 ipam/forms/model_forms.py:153 -#: ipam/tables/asn.py:66 netbox/navigation/menu.py:15 -#: netbox/navigation/menu.py:17 +#: netbox/dcim/tables/sites.py:30 netbox/dcim/tables/sites.py:57 +#: netbox/extras/forms/filtersets.py: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/netbox/navigation/menu.py:15 netbox/netbox/navigation/menu.py:17 msgid "Sites" msgstr "Сайты" -#: dcim/tests/test_api.py:47 +#: netbox/dcim/tests/test_api.py:47 msgid "Test case must set peer_termination_type" msgstr "" "В тестовом примере должно быть установлено значение peer_termination_type" -#: dcim/views.py:140 +#: netbox/dcim/views.py:138 #, python-brace-format msgid "Disconnected {count} {type}" msgstr "Отключен {count} {type}" -#: dcim/views.py:740 netbox/navigation/menu.py:51 +#: netbox/dcim/views.py:738 netbox/netbox/navigation/menu.py:51 msgid "Reservations" msgstr "Резервирование" -#: dcim/views.py:759 templates/dcim/location.html:90 -#: templates/dcim/site.html:140 +#: netbox/dcim/views.py:757 netbox/templates/dcim/location.html:90 +#: netbox/templates/dcim/site.html:140 msgid "Non-Racked Devices" msgstr "Устройства без стоек" -#: dcim/views.py:2088 extras/forms/model_forms.py:577 -#: templates/extras/configcontext.html:10 -#: virtualization/forms/model_forms.py:225 virtualization/views.py:407 +#: netbox/dcim/views.py:2086 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 msgid "Config Context" msgstr "Контекст конфигурации" -#: dcim/views.py:2098 virtualization/views.py:417 +#: netbox/dcim/views.py:2096 netbox/virtualization/views.py:415 msgid "Render Config" msgstr "Конфигурация рендера" -#: dcim/views.py:2131 virtualization/views.py:450 +#: netbox/dcim/views.py:2131 netbox/virtualization/views.py:450 #, python-brace-format msgid "An error occurred while rendering the template: {error}" msgstr "Во время рендеринга шаблона произошла ошибка: {error}" -#: dcim/views.py:2149 extras/tables/tables.py:550 -#: netbox/navigation/menu.py:247 netbox/navigation/menu.py:249 -#: virtualization/views.py:180 +#: 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 msgid "Virtual Machines" msgstr "Виртуальные машины" -#: dcim/views.py:2897 +#: netbox/dcim/views.py:2907 #, python-brace-format msgid "Installed device {device} in bay {device_bay}." msgstr "Установлено устройство {device} в отсек {device_bay}." -#: dcim/views.py:2938 +#: netbox/dcim/views.py:2948 #, python-brace-format msgid "Removed device {device} from bay {device_bay}." msgstr "Удалено устройство {device} из отсека {device_bay}." -#: dcim/views.py:3044 ipam/tables/ip.py:234 +#: netbox/dcim/views.py:3054 netbox/ipam/tables/ip.py:234 msgid "Children" msgstr "Потомки" -#: dcim/views.py:3510 +#: netbox/dcim/views.py:3520 #, python-brace-format msgid "Added member {device}" msgstr "Добавлен участник {device}" -#: dcim/views.py:3557 +#: netbox/dcim/views.py:3567 #, python-brace-format msgid "Unable to remove master device {device} from the virtual chassis." msgstr "Невозможно удалить главное устройство {device} из виртуального шасси." -#: dcim/views.py:3570 +#: netbox/dcim/views.py:3580 #, python-brace-format msgid "Removed {device} from virtual chassis {chassis}" msgstr "{device} удалено из виртуального шасси {chassis}" -#: extras/api/customfields.py:89 +#: netbox/extras/api/customfields.py:89 #, python-brace-format msgid "Unknown related object(s): {name}" msgstr "Неизвестный связанный объект (ы): {name}" -#: extras/api/serializers_/customfields.py:73 +#: netbox/extras/api/serializers_/customfields.py:73 msgid "Changing the type of custom fields is not supported." msgstr "Изменение типа настраиваемых полей не поддерживается." -#: extras/api/serializers_/scripts.py:70 extras/api/serializers_/scripts.py:75 +#: netbox/extras/api/serializers_/scripts.py:70 +#: netbox/extras/api/serializers_/scripts.py:75 msgid "Scheduling is not enabled for this script." msgstr "Для этого сценария планирование отключено." -#: extras/choices.py:30 extras/forms/misc.py:14 +#: netbox/extras/choices.py:30 netbox/extras/forms/misc.py:14 msgid "Text" msgstr "Текст" -#: extras/choices.py:31 +#: netbox/extras/choices.py:31 msgid "Text (long)" msgstr "Текст (длинный)" -#: extras/choices.py:32 +#: netbox/extras/choices.py:32 msgid "Integer" msgstr "Целое число" -#: extras/choices.py:33 +#: netbox/extras/choices.py:33 msgid "Decimal" msgstr "Десятичный" -#: extras/choices.py:34 +#: netbox/extras/choices.py:34 msgid "Boolean (true/false)" msgstr "Логическое значение (истинно/ложь)" -#: extras/choices.py:35 +#: netbox/extras/choices.py:35 msgid "Date" msgstr "Дата" -#: extras/choices.py:36 +#: netbox/extras/choices.py:36 msgid "Date & time" msgstr "Дата и время" -#: extras/choices.py:38 +#: netbox/extras/choices.py:38 msgid "JSON" msgstr "JSON" -#: extras/choices.py:39 +#: netbox/extras/choices.py:39 msgid "Selection" msgstr "Выбор" -#: extras/choices.py:40 +#: netbox/extras/choices.py:40 msgid "Multiple selection" msgstr "Множественный выбор" -#: extras/choices.py:42 +#: netbox/extras/choices.py:42 msgid "Multiple objects" msgstr "Несколько объектов" -#: extras/choices.py:53 netbox/preferences.py:21 -#: templates/extras/customfield.html:78 vpn/choices.py:20 -#: wireless/choices.py:27 +#: netbox/extras/choices.py:53 netbox/netbox/preferences.py:21 +#: netbox/templates/extras/customfield.html:78 netbox/vpn/choices.py:20 +#: netbox/wireless/choices.py:27 msgid "Disabled" msgstr "Инвалид" -#: extras/choices.py:54 +#: netbox/extras/choices.py:54 msgid "Loose" msgstr "Свободный" -#: extras/choices.py:55 +#: netbox/extras/choices.py:55 msgid "Exact" msgstr "Точный" -#: extras/choices.py:66 +#: netbox/extras/choices.py:66 msgid "Always" msgstr "Всегда" -#: extras/choices.py:67 +#: netbox/extras/choices.py:67 msgid "If set" msgstr "Если установлено" -#: extras/choices.py:68 extras/choices.py:81 +#: netbox/extras/choices.py:68 netbox/extras/choices.py:81 msgid "Hidden" msgstr "Скрытый" -#: extras/choices.py:79 +#: netbox/extras/choices.py:79 msgid "Yes" msgstr "Да" -#: extras/choices.py:80 +#: netbox/extras/choices.py:80 msgid "No" msgstr "Нет" -#: extras/choices.py:108 templates/tenancy/contact.html:57 -#: tenancy/forms/bulk_edit.py:118 wireless/forms/model_forms.py:168 +#: 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 msgid "Link" msgstr "Ссылка" -#: extras/choices.py:124 +#: netbox/extras/choices.py:124 msgid "Newest" msgstr "Новейший" -#: extras/choices.py:125 +#: netbox/extras/choices.py:125 msgid "Oldest" msgstr "Самый старый" -#: extras/choices.py:126 +#: netbox/extras/choices.py:126 msgid "Alphabetical (A-Z)" msgstr "В алфавитном порядке (А-Я)" -#: extras/choices.py:127 +#: netbox/extras/choices.py:127 msgid "Alphabetical (Z-A)" msgstr "В обратном алфавитном порядке (Я-А)" -#: extras/choices.py:144 extras/choices.py:167 +#: netbox/extras/choices.py:144 netbox/extras/choices.py:167 msgid "Info" msgstr "Информация" -#: extras/choices.py:145 extras/choices.py:168 +#: netbox/extras/choices.py:145 netbox/extras/choices.py:168 msgid "Success" msgstr "Успех" -#: extras/choices.py:146 extras/choices.py:169 +#: netbox/extras/choices.py:146 netbox/extras/choices.py:169 msgid "Warning" msgstr "Предупреждение" -#: extras/choices.py:147 +#: netbox/extras/choices.py:147 msgid "Danger" msgstr "Опасность" -#: extras/choices.py:165 +#: netbox/extras/choices.py:165 msgid "Debug" msgstr "Отладка" -#: extras/choices.py:166 netbox/choices.py:101 +#: netbox/extras/choices.py:166 netbox/netbox/choices.py:101 msgid "Default" msgstr "По умолчанию" -#: extras/choices.py:170 +#: netbox/extras/choices.py:170 msgid "Failure" msgstr "Неудача" -#: extras/choices.py:186 +#: netbox/extras/choices.py:186 msgid "Hourly" msgstr "Ежечасно" -#: extras/choices.py:187 +#: netbox/extras/choices.py:187 msgid "12 hours" msgstr "12 часов" -#: extras/choices.py:188 +#: netbox/extras/choices.py:188 msgid "Daily" msgstr "Ежедневно" -#: extras/choices.py:189 +#: netbox/extras/choices.py:189 msgid "Weekly" msgstr "Еженедельно" -#: extras/choices.py:190 +#: netbox/extras/choices.py:190 msgid "30 days" msgstr "30 дней" -#: extras/choices.py:226 templates/dcim/virtualchassis_edit.html:107 -#: templates/generic/bulk_add_component.html:68 -#: templates/generic/object_edit.html:47 templates/generic/object_edit.html:80 -#: templates/ipam/inc/ipaddress_edit_header.html:7 +#: netbox/extras/choices.py:226 +#: 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/ipam/inc/ipaddress_edit_header.html:7 msgid "Create" msgstr "Создать" -#: extras/choices.py:227 +#: netbox/extras/choices.py:227 msgid "Update" msgstr "Обновить" -#: extras/choices.py:228 templates/circuits/inc/circuit_termination.html:23 -#: templates/dcim/inc/panels/inventory_items.html:37 -#: templates/dcim/powerpanel.html:66 templates/extras/script_list.html:35 -#: templates/generic/bulk_delete.html:20 templates/generic/bulk_delete.html:66 -#: templates/generic/object_delete.html:19 templates/htmx/delete_form.html:57 -#: templates/ipam/inc/panels/fhrp_groups.html:48 -#: templates/users/objectpermission.html:46 -#: utilities/templates/buttons/delete.html:11 +#: netbox/extras/choices.py:228 +#: netbox/templates/circuits/inc/circuit_termination.html:23 +#: netbox/templates/dcim/inc/panels/inventory_items.html:37 +#: netbox/templates/dcim/powerpanel.html:66 +#: netbox/templates/extras/script_list.html:35 +#: netbox/templates/generic/bulk_delete.html:20 +#: netbox/templates/generic/bulk_delete.html:66 +#: netbox/templates/generic/object_delete.html:19 +#: netbox/templates/htmx/delete_form.html:57 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:48 +#: netbox/templates/users/objectpermission.html:46 +#: netbox/utilities/templates/buttons/delete.html:11 msgid "Delete" msgstr "Удалить" -#: extras/choices.py:252 netbox/choices.py:57 netbox/choices.py:102 +#: netbox/extras/choices.py:252 netbox/netbox/choices.py:57 +#: netbox/netbox/choices.py:102 msgid "Blue" msgstr "Синий" -#: extras/choices.py:253 netbox/choices.py:56 netbox/choices.py:103 +#: netbox/extras/choices.py:253 netbox/netbox/choices.py:56 +#: netbox/netbox/choices.py:103 msgid "Indigo" msgstr "Темно-синий" -#: extras/choices.py:254 netbox/choices.py:54 netbox/choices.py:104 +#: netbox/extras/choices.py:254 netbox/netbox/choices.py:54 +#: netbox/netbox/choices.py:104 msgid "Purple" msgstr "Фиолетовый" -#: extras/choices.py:255 netbox/choices.py:51 netbox/choices.py:105 +#: netbox/extras/choices.py:255 netbox/netbox/choices.py:51 +#: netbox/netbox/choices.py:105 msgid "Pink" msgstr "Розовый" -#: extras/choices.py:256 netbox/choices.py:50 netbox/choices.py:106 +#: netbox/extras/choices.py:256 netbox/netbox/choices.py:50 +#: netbox/netbox/choices.py:106 msgid "Red" msgstr "Красный" -#: extras/choices.py:257 netbox/choices.py:68 netbox/choices.py:107 +#: netbox/extras/choices.py:257 netbox/netbox/choices.py:68 +#: netbox/netbox/choices.py:107 msgid "Orange" msgstr "Оранжевый" -#: extras/choices.py:258 netbox/choices.py:66 netbox/choices.py:108 +#: netbox/extras/choices.py:258 netbox/netbox/choices.py:66 +#: netbox/netbox/choices.py:108 msgid "Yellow" msgstr "Желтый" -#: extras/choices.py:259 netbox/choices.py:63 netbox/choices.py:109 +#: netbox/extras/choices.py:259 netbox/netbox/choices.py:63 +#: netbox/netbox/choices.py:109 msgid "Green" msgstr "Зелёный" -#: extras/choices.py:260 netbox/choices.py:60 netbox/choices.py:110 +#: netbox/extras/choices.py:260 netbox/netbox/choices.py:60 +#: netbox/netbox/choices.py:110 msgid "Teal" msgstr "Cине-зеленый" -#: extras/choices.py:261 netbox/choices.py:59 netbox/choices.py:111 +#: netbox/extras/choices.py:261 netbox/netbox/choices.py:59 +#: netbox/netbox/choices.py:111 msgid "Cyan" msgstr "Голубой" -#: extras/choices.py:262 netbox/choices.py:112 +#: netbox/extras/choices.py:262 netbox/netbox/choices.py:112 msgid "Gray" msgstr "Серый" -#: extras/choices.py:263 netbox/choices.py:74 netbox/choices.py:113 +#: netbox/extras/choices.py:263 netbox/netbox/choices.py:74 +#: netbox/netbox/choices.py:113 msgid "Black" msgstr "Черный" -#: extras/choices.py:264 netbox/choices.py:75 netbox/choices.py:114 +#: netbox/extras/choices.py:264 netbox/netbox/choices.py:75 +#: netbox/netbox/choices.py:114 msgid "White" msgstr "Белый" -#: extras/choices.py:279 extras/forms/model_forms.py:353 -#: extras/forms/model_forms.py:430 templates/extras/webhook.html:10 +#: netbox/extras/choices.py:279 netbox/extras/forms/model_forms.py:353 +#: netbox/extras/forms/model_forms.py:430 +#: netbox/templates/extras/webhook.html:10 msgid "Webhook" msgstr "Вебхук" -#: extras/choices.py:280 extras/forms/model_forms.py:418 -#: templates/extras/script/base.html:29 +#: netbox/extras/choices.py:280 netbox/extras/forms/model_forms.py:418 +#: netbox/templates/extras/script/base.html:29 msgid "Script" msgstr "Сценарий" -#: extras/choices.py:281 +#: netbox/extras/choices.py:281 msgid "Notification" msgstr "Уведомление" -#: extras/conditions.py:54 +#: netbox/extras/conditions.py:54 #, python-brace-format msgid "Unknown operator: {op}. Must be one of: {operators}" msgstr "" "Неизвестный оператор: {op}. Должен быть одним из следующих: {operators}" -#: extras/conditions.py:58 +#: netbox/extras/conditions.py:58 #, python-brace-format msgid "Unsupported value type: {value}" msgstr "Неподдерживаемый тип значения: {value}" -#: extras/conditions.py:60 +#: netbox/extras/conditions.py:60 #, python-brace-format msgid "Invalid type for {op} operation: {value}" msgstr "Неверный тип для {op} операция: {value}" -#: extras/conditions.py:137 +#: netbox/extras/conditions.py:137 #, python-brace-format msgid "Ruleset must be a dictionary, not {ruleset}." msgstr "Набор правил должен быть словарем, а не {ruleset}." -#: extras/conditions.py:142 +#: netbox/extras/conditions.py:142 msgid "Invalid logic type: must be 'AND' or 'OR'. Please check documentation." msgstr "" "Неверный тип логики: должен быть И или ИЛИ. Пожалуйста, проверьте " "документацию." -#: extras/conditions.py:154 +#: netbox/extras/conditions.py:154 msgid "Incorrect key(s) informed. Please check documentation." msgstr "Введены неверные ключ(и). Пожалуйста, проверьте документацию." -#: extras/dashboard/forms.py:38 +#: netbox/extras/dashboard/forms.py:38 msgid "Widget type" msgstr "Тип виджета" -#: extras/dashboard/utils.py:36 +#: netbox/extras/dashboard/utils.py:36 #, python-brace-format msgid "Unregistered widget class: {name}" msgstr "Незарегистрированный класс виджета: {name}" -#: extras/dashboard/widgets.py:125 +#: netbox/extras/dashboard/widgets.py:125 #, python-brace-format msgid "{class_name} must define a render() method." msgstr "{class_name} должен определить метод render ()." -#: extras/dashboard/widgets.py:144 +#: netbox/extras/dashboard/widgets.py:144 msgid "Note" msgstr "Примечание" -#: extras/dashboard/widgets.py:145 +#: netbox/extras/dashboard/widgets.py:145 msgid "Display some arbitrary custom content. Markdown is supported." msgstr "" "Отображает произвольный пользовательский контент. Поддерживается разметка " "Markdown." -#: extras/dashboard/widgets.py:158 +#: netbox/extras/dashboard/widgets.py:158 msgid "Object Counts" msgstr "Количество объектов" -#: extras/dashboard/widgets.py:159 +#: netbox/extras/dashboard/widgets.py:159 msgid "" "Display a set of NetBox models and the number of objects created for each " "type." @@ -6954,269 +7499,291 @@ msgstr "" "Отобразите набор моделей NetBox и количество объектов, созданных для каждого" " типа." -#: extras/dashboard/widgets.py:169 +#: netbox/extras/dashboard/widgets.py:169 msgid "Filters to apply when counting the number of objects" msgstr "Фильтры, применяемые при подсчете количества объектов" -#: extras/dashboard/widgets.py:177 +#: netbox/extras/dashboard/widgets.py:177 msgid "Invalid format. Object filters must be passed as a dictionary." msgstr "" "Неверный формат. Фильтры объектов необходимо передавать в виде словаря." -#: extras/dashboard/widgets.py:208 +#: netbox/extras/dashboard/widgets.py:208 msgid "Object List" msgstr "Список объектов" -#: extras/dashboard/widgets.py:209 +#: netbox/extras/dashboard/widgets.py:209 msgid "Display an arbitrary list of objects." msgstr "Отобразите произвольный список объектов." -#: extras/dashboard/widgets.py:222 +#: netbox/extras/dashboard/widgets.py:222 msgid "The default number of objects to display" msgstr "Количество отображаемых объектов по умолчанию" -#: extras/dashboard/widgets.py:234 +#: netbox/extras/dashboard/widgets.py:234 msgid "Invalid format. URL parameters must be passed as a dictionary." msgstr "Неверный формат. Параметры URL должны быть переданы в виде словаря." -#: extras/dashboard/widgets.py:274 +#: netbox/extras/dashboard/widgets.py:274 msgid "RSS Feed" msgstr "RSS-канал" -#: extras/dashboard/widgets.py:279 +#: netbox/extras/dashboard/widgets.py:279 msgid "Embed an RSS feed from an external website." msgstr "Вставьте RSS-канал с внешнего веб-сайта." -#: extras/dashboard/widgets.py:286 +#: netbox/extras/dashboard/widgets.py:286 msgid "Feed URL" msgstr "URL-адрес ленты" -#: extras/dashboard/widgets.py:291 +#: netbox/extras/dashboard/widgets.py:291 msgid "The maximum number of objects to display" msgstr "Максимальное количество отображаемых объектов" -#: extras/dashboard/widgets.py:296 +#: netbox/extras/dashboard/widgets.py:296 msgid "How long to stored the cached content (in seconds)" msgstr "Как долго хранить кэшированный контент (в секундах)" -#: extras/dashboard/widgets.py:348 templates/account/base.html:10 -#: templates/account/bookmarks.html:7 templates/inc/user_menu.html:48 +#: netbox/extras/dashboard/widgets.py:348 +#: netbox/templates/account/base.html:10 +#: netbox/templates/account/bookmarks.html:7 +#: netbox/templates/inc/user_menu.html:48 msgid "Bookmarks" msgstr "Закладки" -#: extras/dashboard/widgets.py:352 +#: netbox/extras/dashboard/widgets.py:352 msgid "Show your personal bookmarks" msgstr "Покажите свои личные закладки" -#: 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}" -#: extras/events.py:192 +#: netbox/extras/events.py:196 #, python-brace-format msgid "Cannot import events pipeline {name} error: {error}" msgstr "Невозможно импортировать конвейер событий {name} ошибка: {error}" -#: extras/filtersets.py:45 +#: netbox/extras/filtersets.py:45 msgid "Script module (ID)" msgstr "Модуль сценария (ID)" -#: extras/filtersets.py:254 extras/filtersets.py:637 extras/filtersets.py:665 +#: netbox/extras/filtersets.py:254 netbox/extras/filtersets.py:637 +#: netbox/extras/filtersets.py:665 msgid "Data file (ID)" msgstr "Файл данных (ID)" -#: extras/filtersets.py:370 users/filtersets.py:68 users/filtersets.py:191 +#: netbox/extras/filtersets.py:370 netbox/users/filtersets.py:68 +#: netbox/users/filtersets.py:191 msgid "Group (name)" msgstr "Группа (название)" -#: extras/filtersets.py:574 virtualization/forms/filtersets.py:118 +#: netbox/extras/filtersets.py:574 +#: netbox/virtualization/forms/filtersets.py:118 msgid "Cluster type" msgstr "Тип кластера" -#: extras/filtersets.py:580 virtualization/filtersets.py:95 -#: virtualization/filtersets.py:147 +#: netbox/extras/filtersets.py:580 netbox/virtualization/filtersets.py:95 +#: netbox/virtualization/filtersets.py:147 msgid "Cluster type (slug)" msgstr "Тип кластера (подстрока)" -#: extras/filtersets.py:601 tenancy/forms/forms.py:16 -#: tenancy/forms/forms.py:39 +#: netbox/extras/filtersets.py:601 netbox/tenancy/forms/forms.py:16 +#: netbox/tenancy/forms/forms.py:39 msgid "Tenant group" msgstr "Группы арендаторов" -#: extras/filtersets.py:607 tenancy/filtersets.py:188 -#: tenancy/filtersets.py:208 +#: netbox/extras/filtersets.py:607 netbox/tenancy/filtersets.py:188 +#: netbox/tenancy/filtersets.py:208 msgid "Tenant group (slug)" msgstr "Группа арендаторов (подстрока)" -#: extras/filtersets.py:623 extras/forms/model_forms.py:495 -#: templates/extras/tag.html:11 +#: netbox/extras/filtersets.py:623 netbox/extras/forms/model_forms.py:495 +#: netbox/templates/extras/tag.html:11 msgid "Tag" msgstr "Тег" -#: extras/filtersets.py:629 +#: netbox/extras/filtersets.py:629 msgid "Tag (slug)" msgstr "Тег (подстрока)" -#: extras/filtersets.py:689 extras/forms/filtersets.py:429 +#: netbox/extras/filtersets.py:689 netbox/extras/forms/filtersets.py:429 msgid "Has local config context data" msgstr "Имеет локальные контекстные данные конфигурации" -#: extras/forms/bulk_edit.py:35 extras/forms/filtersets.py:60 +#: netbox/extras/forms/bulk_edit.py:35 netbox/extras/forms/filtersets.py:60 msgid "Group name" msgstr "Название группы" -#: extras/forms/bulk_edit.py:43 extras/forms/filtersets.py:68 -#: extras/tables/tables.py:65 templates/extras/customfield.html:38 -#: templates/generic/bulk_import.html:118 +#: netbox/extras/forms/bulk_edit.py:43 netbox/extras/forms/filtersets.py:68 +#: netbox/extras/tables/tables.py:65 +#: netbox/templates/extras/customfield.html:38 +#: netbox/templates/generic/bulk_import.html:118 msgid "Required" msgstr "Обязательно" -#: extras/forms/bulk_edit.py:48 extras/forms/filtersets.py:75 +#: netbox/extras/forms/bulk_edit.py:48 netbox/extras/forms/filtersets.py:75 msgid "Must be unique" msgstr "Должно быть уникальным" -#: extras/forms/bulk_edit.py:61 extras/forms/bulk_import.py:60 -#: extras/forms/filtersets.py:89 extras/models/customfields.py:209 +#: netbox/extras/forms/bulk_edit.py:61 netbox/extras/forms/bulk_import.py:60 +#: netbox/extras/forms/filtersets.py:89 +#: netbox/extras/models/customfields.py:209 msgid "UI visible" msgstr "Видимый пользовательский интерфейс" -#: extras/forms/bulk_edit.py:66 extras/forms/bulk_import.py:66 -#: extras/forms/filtersets.py:94 extras/models/customfields.py:216 +#: netbox/extras/forms/bulk_edit.py:66 netbox/extras/forms/bulk_import.py:66 +#: netbox/extras/forms/filtersets.py:94 +#: netbox/extras/models/customfields.py:216 msgid "UI editable" msgstr "Редактируемый UI" -#: extras/forms/bulk_edit.py:71 extras/forms/filtersets.py:97 +#: netbox/extras/forms/bulk_edit.py:71 netbox/extras/forms/filtersets.py:97 msgid "Is cloneable" msgstr "Можно клонировать" -#: extras/forms/bulk_edit.py:76 extras/forms/filtersets.py:104 +#: netbox/extras/forms/bulk_edit.py:76 netbox/extras/forms/filtersets.py:104 msgid "Minimum value" msgstr "Минимальное значение" -#: extras/forms/bulk_edit.py:80 extras/forms/filtersets.py:108 +#: netbox/extras/forms/bulk_edit.py:80 netbox/extras/forms/filtersets.py:108 msgid "Maximum value" msgstr "Максимальное значение" -#: extras/forms/bulk_edit.py:84 extras/forms/filtersets.py:112 +#: netbox/extras/forms/bulk_edit.py:84 netbox/extras/forms/filtersets.py:112 msgid "Validation regex" msgstr "Регулярное выражение валидации" -#: extras/forms/bulk_edit.py:91 extras/forms/filtersets.py:46 -#: extras/forms/model_forms.py:76 templates/extras/customfield.html:70 +#: netbox/extras/forms/bulk_edit.py:91 netbox/extras/forms/filtersets.py:46 +#: netbox/extras/forms/model_forms.py:76 +#: netbox/templates/extras/customfield.html:70 msgid "Behavior" msgstr "Поведение" -#: extras/forms/bulk_edit.py:128 extras/forms/filtersets.py:149 +#: netbox/extras/forms/bulk_edit.py:128 netbox/extras/forms/filtersets.py:149 msgid "New window" msgstr "Новое окно" -#: extras/forms/bulk_edit.py:137 +#: netbox/extras/forms/bulk_edit.py:137 msgid "Button class" msgstr "Класс кнопки" -#: extras/forms/bulk_edit.py:154 extras/forms/filtersets.py:187 -#: extras/models/models.py:409 +#: netbox/extras/forms/bulk_edit.py:154 netbox/extras/forms/filtersets.py:187 +#: netbox/extras/models/models.py:409 msgid "MIME type" msgstr "Тип MIME" -#: extras/forms/bulk_edit.py:159 extras/forms/filtersets.py:190 +#: netbox/extras/forms/bulk_edit.py:159 netbox/extras/forms/filtersets.py:190 msgid "File extension" msgstr "Расширение файла" -#: extras/forms/bulk_edit.py:164 extras/forms/filtersets.py:194 +#: netbox/extras/forms/bulk_edit.py:164 netbox/extras/forms/filtersets.py:194 msgid "As attachment" msgstr "В качестве вложения" -#: extras/forms/bulk_edit.py:192 extras/forms/filtersets.py:236 -#: extras/tables/tables.py:256 templates/extras/savedfilter.html:29 +#: netbox/extras/forms/bulk_edit.py:192 netbox/extras/forms/filtersets.py:236 +#: netbox/extras/tables/tables.py:256 +#: netbox/templates/extras/savedfilter.html:29 msgid "Shared" msgstr "Общий" -#: extras/forms/bulk_edit.py:215 extras/forms/filtersets.py:265 -#: extras/models/models.py:174 +#: netbox/extras/forms/bulk_edit.py:215 netbox/extras/forms/filtersets.py:265 +#: netbox/extras/models/models.py:174 msgid "HTTP method" msgstr "Метод HTTP" -#: extras/forms/bulk_edit.py:219 extras/forms/filtersets.py:259 -#: templates/extras/webhook.html:30 +#: netbox/extras/forms/bulk_edit.py:219 netbox/extras/forms/filtersets.py:259 +#: netbox/templates/extras/webhook.html:30 msgid "Payload URL" msgstr "URL-адрес полезной нагрузки" -#: extras/forms/bulk_edit.py:224 extras/models/models.py:214 +#: netbox/extras/forms/bulk_edit.py:224 netbox/extras/models/models.py:214 msgid "SSL verification" msgstr "Проверка SSL" -#: extras/forms/bulk_edit.py:227 templates/extras/webhook.html:38 +#: netbox/extras/forms/bulk_edit.py:227 +#: netbox/templates/extras/webhook.html:38 msgid "Secret" msgstr "Секрет" -#: extras/forms/bulk_edit.py:232 +#: netbox/extras/forms/bulk_edit.py:232 msgid "CA file path" msgstr "Путь к файлу CA" -#: extras/forms/bulk_edit.py:253 extras/forms/bulk_import.py:192 -#: extras/forms/model_forms.py:377 +#: netbox/extras/forms/bulk_edit.py:253 netbox/extras/forms/bulk_import.py:192 +#: netbox/extras/forms/model_forms.py:377 msgid "Event types" msgstr "Типы событий" -#: extras/forms/bulk_edit.py:293 +#: netbox/extras/forms/bulk_edit.py:293 msgid "Is active" msgstr "Активен" -#: extras/forms/bulk_import.py:37 extras/forms/bulk_import.py:118 -#: extras/forms/bulk_import.py:139 extras/forms/bulk_import.py:162 -#: extras/forms/bulk_import.py:186 extras/forms/filtersets.py:137 -#: extras/forms/filtersets.py:224 extras/forms/model_forms.py:47 -#: extras/forms/model_forms.py:205 extras/forms/model_forms.py:237 -#: extras/forms/model_forms.py:278 extras/forms/model_forms.py:372 -#: extras/forms/model_forms.py:489 users/forms/model_forms.py:276 +#: netbox/extras/forms/bulk_import.py:37 +#: netbox/extras/forms/bulk_import.py:118 +#: 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/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/users/forms/model_forms.py:276 msgid "Object types" msgstr "Типы объектов" -#: extras/forms/bulk_import.py:39 extras/forms/bulk_import.py:120 -#: extras/forms/bulk_import.py:141 extras/forms/bulk_import.py:164 -#: extras/forms/bulk_import.py:188 tenancy/forms/bulk_import.py:96 +#: netbox/extras/forms/bulk_import.py:39 +#: netbox/extras/forms/bulk_import.py:120 +#: netbox/extras/forms/bulk_import.py:141 +#: netbox/extras/forms/bulk_import.py:164 +#: netbox/extras/forms/bulk_import.py:188 +#: netbox/tenancy/forms/bulk_import.py:96 msgid "One or more assigned object types" msgstr "Один или несколько назначенных типов объектов" -#: extras/forms/bulk_import.py:44 +#: netbox/extras/forms/bulk_import.py:44 msgid "Field data type (e.g. text, integer, etc.)" msgstr "Тип данных поля (например, текст, целое число и т. д.)" -#: extras/forms/bulk_import.py:47 extras/forms/filtersets.py:208 -#: extras/forms/filtersets.py:281 extras/forms/model_forms.py:304 -#: extras/forms/model_forms.py:341 tenancy/forms/filtersets.py:92 +#: 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/tenancy/forms/filtersets.py:92 msgid "Object type" msgstr "Тип объекта" -#: extras/forms/bulk_import.py:50 +#: netbox/extras/forms/bulk_import.py:50 msgid "Object type (for object or multi-object fields)" msgstr "" "Тип объекта (для полей объектов или полей, состоящих из нескольких объектов)" -#: extras/forms/bulk_import.py:53 extras/forms/filtersets.py:84 +#: netbox/extras/forms/bulk_import.py:53 netbox/extras/forms/filtersets.py:84 msgid "Choice set" msgstr "Набор для выбора" -#: extras/forms/bulk_import.py:57 +#: netbox/extras/forms/bulk_import.py:57 msgid "Choice set (for selection fields)" msgstr "Набор вариантов (для полей выбора)" -#: extras/forms/bulk_import.py:63 +#: netbox/extras/forms/bulk_import.py:63 msgid "Whether the custom field is displayed in the UI" msgstr "Отображается ли настраиваемое поле в пользовательском интерфейсе" -#: extras/forms/bulk_import.py:69 +#: netbox/extras/forms/bulk_import.py:69 msgid "Whether the custom field is editable in the UI" msgstr "" "Доступно ли редактирование настраиваемого поля в пользовательском интерфейсе" -#: extras/forms/bulk_import.py:85 +#: netbox/extras/forms/bulk_import.py:85 msgid "The base set of predefined choices to use (if any)" msgstr "Базовый набор стандартных вариантов для использования (если есть)" -#: extras/forms/bulk_import.py:91 +#: netbox/extras/forms/bulk_import.py:91 msgid "" "Quoted string of comma-separated field choices with optional labels " "separated by colon: \"choice1:First Choice,choice2:Second Choice\"" @@ -7225,187 +7792,203 @@ msgstr "" "запятыми, с дополнительными метками через двоеточие: «Choice1:First Choice, " "Choice2:Second Choice»" -#: extras/forms/bulk_import.py:123 extras/models/models.py:323 +#: netbox/extras/forms/bulk_import.py:123 netbox/extras/models/models.py:323 msgid "button class" msgstr "класс кнопок" -#: extras/forms/bulk_import.py:126 extras/models/models.py:327 +#: netbox/extras/forms/bulk_import.py:126 netbox/extras/models/models.py:327 msgid "" "The class of the first link in a group will be used for the dropdown button" msgstr "" "Класс первой ссылки в группе будет использоваться для кнопки раскрывающегося" " списка" -#: extras/forms/bulk_import.py:193 +#: netbox/extras/forms/bulk_import.py:193 msgid "The event type(s) which will trigger this rule" msgstr "Тип(ы) события(-ий), при котором будет запущено это правило" -#: extras/forms/bulk_import.py:196 +#: netbox/extras/forms/bulk_import.py:196 msgid "Action object" msgstr "Объект действия" -#: extras/forms/bulk_import.py:198 +#: netbox/extras/forms/bulk_import.py:198 msgid "Webhook name or script as dotted path module.Class" msgstr "Имя веб-хука или скрипт в виде пунктирного пути module.Class" -#: extras/forms/bulk_import.py:219 +#: netbox/extras/forms/bulk_import.py:219 #, python-brace-format msgid "Webhook {name} not found" msgstr "Вебхук {name} не найден" -#: extras/forms/bulk_import.py:228 +#: netbox/extras/forms/bulk_import.py:228 #, python-brace-format msgid "Script {name} not found" msgstr "Сценарий {name} не найден" -#: extras/forms/bulk_import.py:244 +#: netbox/extras/forms/bulk_import.py:244 msgid "Assigned object type" msgstr "Назначенный тип объекта" -#: extras/forms/bulk_import.py:249 +#: netbox/extras/forms/bulk_import.py:249 msgid "The classification of entry" msgstr "Классификация записей" -#: extras/forms/bulk_import.py:261 extras/forms/model_forms.py:320 -#: netbox/navigation/menu.py:390 templates/extras/notificationgroup.html:41 -#: templates/users/group.html:29 users/forms/model_forms.py:236 -#: users/forms/model_forms.py:248 users/forms/model_forms.py:300 -#: users/tables.py:102 +#: netbox/extras/forms/bulk_import.py:261 +#: netbox/extras/forms/model_forms.py:320 netbox/netbox/navigation/menu.py:390 +#: 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 +#: netbox/users/tables.py:102 msgid "Users" msgstr "Пользователи" -#: extras/forms/bulk_import.py:265 +#: netbox/extras/forms/bulk_import.py:265 msgid "User names separated by commas, encased with double quotes" msgstr "" "Имена пользователей, разделенные запятыми и заключенные в двойные кавычки" -#: extras/forms/bulk_import.py:268 extras/forms/model_forms.py:315 -#: netbox/navigation/menu.py:410 templates/extras/notificationgroup.html:31 -#: users/forms/model_forms.py:181 users/forms/model_forms.py:193 -#: users/forms/model_forms.py:305 users/tables.py:35 users/tables.py:106 +#: netbox/extras/forms/bulk_import.py:268 +#: netbox/extras/forms/model_forms.py:315 netbox/netbox/navigation/menu.py:410 +#: 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 +#: netbox/users/tables.py:106 msgid "Groups" msgstr "Группы" -#: extras/forms/bulk_import.py:272 +#: netbox/extras/forms/bulk_import.py:272 msgid "Group names separated by commas, encased with double quotes" msgstr "Имена групп, разделенные запятыми и заключенные в двойные кавычки" -#: extras/forms/filtersets.py:52 extras/forms/model_forms.py:56 +#: netbox/extras/forms/filtersets.py:52 netbox/extras/forms/model_forms.py:56 msgid "Related object type" msgstr "Тип связанного объекта" -#: extras/forms/filtersets.py:57 +#: netbox/extras/forms/filtersets.py:57 msgid "Field type" msgstr "Тип поля" -#: extras/forms/filtersets.py:120 extras/forms/model_forms.py:157 -#: extras/tables/tables.py:91 templates/generic/bulk_import.html:154 +#: netbox/extras/forms/filtersets.py:120 +#: netbox/extras/forms/model_forms.py:157 netbox/extras/tables/tables.py:91 +#: netbox/templates/generic/bulk_import.html:154 msgid "Choices" msgstr "Варианты" -#: extras/forms/filtersets.py:164 extras/forms/filtersets.py:319 -#: extras/forms/filtersets.py:408 extras/forms/model_forms.py:572 -#: templates/core/job.html:96 templates/extras/eventrule.html:84 +#: 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/templates/extras/eventrule.html:84 msgid "Data" msgstr "Данные" -#: extras/forms/filtersets.py:175 extras/forms/filtersets.py:333 -#: extras/forms/filtersets.py:418 netbox/choices.py:130 -#: utilities/forms/bulk_import.py:26 +#: netbox/extras/forms/filtersets.py:175 netbox/extras/forms/filtersets.py:333 +#: netbox/extras/forms/filtersets.py:418 netbox/netbox/choices.py:130 +#: netbox/utilities/forms/bulk_import.py:26 msgid "Data file" msgstr "Файл данных" -#: extras/forms/filtersets.py:183 +#: netbox/extras/forms/filtersets.py:183 msgid "Content types" msgstr "Типы контента" -#: extras/forms/filtersets.py:255 extras/models/models.py:179 +#: netbox/extras/forms/filtersets.py:255 netbox/extras/models/models.py:179 msgid "HTTP content type" msgstr "Тип содержимого HTTP" -#: extras/forms/filtersets.py:286 +#: netbox/extras/forms/filtersets.py:286 msgid "Event type" msgstr "Тип события" -#: extras/forms/filtersets.py:291 +#: netbox/extras/forms/filtersets.py:291 msgid "Action type" msgstr "Тип действия" -#: extras/forms/filtersets.py:307 +#: netbox/extras/forms/filtersets.py:307 msgid "Tagged object type" msgstr "Тип объекта с тегами" -#: extras/forms/filtersets.py:312 +#: netbox/extras/forms/filtersets.py:312 msgid "Allowed object type" msgstr "Разрешенный тип объекта" -#: extras/forms/filtersets.py:341 extras/forms/model_forms.py:507 -#: netbox/navigation/menu.py:18 +#: netbox/extras/forms/filtersets.py:341 +#: netbox/extras/forms/model_forms.py:507 netbox/netbox/navigation/menu.py:18 msgid "Regions" msgstr "Регионы" -#: extras/forms/filtersets.py:346 extras/forms/model_forms.py:512 +#: netbox/extras/forms/filtersets.py:346 +#: netbox/extras/forms/model_forms.py:512 msgid "Site groups" msgstr "Группы сайтов" -#: extras/forms/filtersets.py:356 extras/forms/model_forms.py:522 -#: netbox/navigation/menu.py:20 templates/dcim/site.html:127 +#: netbox/extras/forms/filtersets.py:356 +#: netbox/extras/forms/model_forms.py:522 netbox/netbox/navigation/menu.py:20 +#: netbox/templates/dcim/site.html:127 msgid "Locations" msgstr "Локации" -#: extras/forms/filtersets.py:361 extras/forms/model_forms.py:527 +#: netbox/extras/forms/filtersets.py:361 +#: netbox/extras/forms/model_forms.py:527 msgid "Device types" msgstr "Типы устройств" -#: extras/forms/filtersets.py:366 extras/forms/model_forms.py:532 +#: netbox/extras/forms/filtersets.py:366 +#: netbox/extras/forms/model_forms.py:532 msgid "Roles" msgstr "Роли" -#: extras/forms/filtersets.py:376 extras/forms/model_forms.py:542 +#: netbox/extras/forms/filtersets.py:376 +#: netbox/extras/forms/model_forms.py:542 msgid "Cluster types" msgstr "Типы кластеров" -#: extras/forms/filtersets.py:381 extras/forms/model_forms.py:547 +#: netbox/extras/forms/filtersets.py:381 +#: netbox/extras/forms/model_forms.py:547 msgid "Cluster groups" msgstr "Кластерные группы" -#: extras/forms/filtersets.py:386 extras/forms/model_forms.py:552 -#: netbox/navigation/menu.py:255 netbox/navigation/menu.py:257 -#: templates/virtualization/clustertype.html:30 -#: virtualization/tables/clusters.py:23 virtualization/tables/clusters.py:45 +#: 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/templates/virtualization/clustertype.html:30 +#: netbox/virtualization/tables/clusters.py:23 +#: netbox/virtualization/tables/clusters.py:45 msgid "Clusters" msgstr "Кластеры" -#: extras/forms/filtersets.py:391 extras/forms/model_forms.py:557 +#: netbox/extras/forms/filtersets.py:391 +#: netbox/extras/forms/model_forms.py:557 msgid "Tenant groups" msgstr "Группы арендаторов" -#: extras/forms/model_forms.py:49 +#: netbox/extras/forms/model_forms.py:49 msgid "The type(s) of object that have this custom field" msgstr "Тип(ы) объекта(-ов), в котором есть это настраиваемое поле" -#: extras/forms/model_forms.py:52 +#: netbox/extras/forms/model_forms.py:52 msgid "Default value" msgstr "Значение по умолчанию" -#: extras/forms/model_forms.py:58 +#: netbox/extras/forms/model_forms.py:58 msgid "Type of the related object (for object/multi-object fields only)" msgstr "" "Тип связанного объекта (только для полей объектов/нескольких объектов)" -#: extras/forms/model_forms.py:61 templates/extras/customfield.html:60 +#: netbox/extras/forms/model_forms.py:61 +#: netbox/templates/extras/customfield.html:60 msgid "Related object filter" msgstr "Фильтр связанных объектов" -#: extras/forms/model_forms.py:63 +#: netbox/extras/forms/model_forms.py:63 msgid "Specify query parameters as a JSON object." msgstr "Укажите параметры запроса в виде объекта JSON." -#: extras/forms/model_forms.py:73 templates/extras/customfield.html:10 +#: netbox/extras/forms/model_forms.py:73 +#: netbox/templates/extras/customfield.html:10 msgid "Custom Field" msgstr "Настраиваемое Поле" -#: extras/forms/model_forms.py:85 +#: netbox/extras/forms/model_forms.py:85 msgid "" "The type of data stored in this field. For object/multi-object fields, " "select the related object type below." @@ -7413,7 +7996,7 @@ msgstr "" "Тип данных, хранящихся в этом поле. Для полей объектов или полей, состоящих " "из нескольких объектов, выберите соответствующий тип объекта ниже." -#: extras/forms/model_forms.py:88 +#: netbox/extras/forms/model_forms.py:88 msgid "" "This will be displayed as help text for the form field. Markdown is " "supported." @@ -7421,11 +8004,11 @@ msgstr "" "Это будет отображаться в виде справочного текста для поля формы. " "Поддерживается функция Markdown." -#: extras/forms/model_forms.py:143 +#: netbox/extras/forms/model_forms.py:143 msgid "Related Object" msgstr "Связанный объект" -#: extras/forms/model_forms.py:169 +#: netbox/extras/forms/model_forms.py:169 msgid "" "Enter one choice per line. An optional label may be specified for each " "choice by appending it with a colon. Example:" @@ -7433,15 +8016,16 @@ msgstr "" "Введите по одному варианту в строке. Для каждого варианта можно указать " "дополнительный лейбл через двоеточие. Пример:" -#: extras/forms/model_forms.py:212 templates/extras/customlink.html:10 +#: netbox/extras/forms/model_forms.py:212 +#: netbox/templates/extras/customlink.html:10 msgid "Custom Link" msgstr "Настраиваемая Ссылка" -#: extras/forms/model_forms.py:214 +#: netbox/extras/forms/model_forms.py:214 msgid "Templates" msgstr "Шаблоны" -#: extras/forms/model_forms.py:226 +#: netbox/extras/forms/model_forms.py:226 #, python-brace-format msgid "" "Jinja2 template code for the link text. Reference the object as {example}. " @@ -7450,60 +8034,66 @@ msgstr "" "Код Jinja2 шаблона для текста ссылки. Ссылайтесь на объект как {example}. " "Ссылки с пустым текстом отображены не будут." -#: extras/forms/model_forms.py:230 +#: netbox/extras/forms/model_forms.py:230 #, python-brace-format msgid "" "Jinja2 template code for the link URL. Reference the object as {example}." msgstr "" "Код Jinja2 шаблона для URL-адреса. Ссылайтесь на объект как {example}." -#: extras/forms/model_forms.py:241 extras/forms/model_forms.py:624 +#: netbox/extras/forms/model_forms.py:241 +#: netbox/extras/forms/model_forms.py:624 msgid "Template code" msgstr "Код шаблона" -#: extras/forms/model_forms.py:247 templates/extras/exporttemplate.html:12 +#: netbox/extras/forms/model_forms.py:247 +#: netbox/templates/extras/exporttemplate.html:12 msgid "Export Template" msgstr "Шаблон экспорта" -#: extras/forms/model_forms.py:249 +#: netbox/extras/forms/model_forms.py:249 msgid "Rendering" msgstr "Рендеринг" -#: extras/forms/model_forms.py:263 extras/forms/model_forms.py:649 +#: netbox/extras/forms/model_forms.py:263 +#: netbox/extras/forms/model_forms.py:649 msgid "Template content is populated from the remote source selected below." msgstr "" "Содержимое шаблона заполняется из удаленного источника, выбранного ниже." -#: extras/forms/model_forms.py:270 extras/forms/model_forms.py:656 +#: netbox/extras/forms/model_forms.py:270 +#: netbox/extras/forms/model_forms.py:656 msgid "Must specify either local content or a data file" msgstr "Необходимо указать локальное содержимое или файл данных" -#: extras/forms/model_forms.py:284 netbox/forms/mixins.py:70 -#: templates/extras/savedfilter.html:10 +#: netbox/extras/forms/model_forms.py:284 netbox/netbox/forms/mixins.py:70 +#: netbox/templates/extras/savedfilter.html:10 msgid "Saved Filter" msgstr "Сохраненный фильтр" -#: extras/forms/model_forms.py:334 +#: netbox/extras/forms/model_forms.py:334 msgid "A notification group specify at least one user or group." msgstr "В группе уведомлений укажите хотя бы одного пользователя или группу." -#: extras/forms/model_forms.py:356 templates/extras/webhook.html:23 +#: netbox/extras/forms/model_forms.py:356 +#: netbox/templates/extras/webhook.html:23 msgid "HTTP Request" msgstr "HTTP-запрос" -#: extras/forms/model_forms.py:358 templates/extras/webhook.html:44 +#: netbox/extras/forms/model_forms.py:358 +#: netbox/templates/extras/webhook.html:44 msgid "SSL" msgstr "SSL" -#: extras/forms/model_forms.py:380 +#: netbox/extras/forms/model_forms.py:380 msgid "Action choice" msgstr "Выбор действия" -#: extras/forms/model_forms.py:385 +#: netbox/extras/forms/model_forms.py:385 msgid "Enter conditions in JSON format." msgstr "Введите условия в JSON формат." -#: extras/forms/model_forms.py:389 +#: netbox/extras/forms/model_forms.py:389 msgid "" "Enter parameters to pass to the action in JSON format." @@ -7511,110 +8101,112 @@ msgstr "" "Введите параметры для перехода к действию в JSON формат." -#: extras/forms/model_forms.py:394 templates/extras/eventrule.html:10 +#: netbox/extras/forms/model_forms.py:394 +#: netbox/templates/extras/eventrule.html:10 msgid "Event Rule" msgstr "Правило мероприятия" -#: extras/forms/model_forms.py:395 +#: netbox/extras/forms/model_forms.py:395 msgid "Triggers" msgstr "Триггеры" -#: extras/forms/model_forms.py:442 +#: netbox/extras/forms/model_forms.py:442 msgid "Notification group" msgstr "Группа уведомлений" -#: extras/forms/model_forms.py:562 netbox/navigation/menu.py:26 -#: tenancy/tables/tenants.py:22 +#: netbox/extras/forms/model_forms.py:562 netbox/netbox/navigation/menu.py:26 +#: netbox/tenancy/tables/tenants.py:22 msgid "Tenants" msgstr "Арендаторы" -#: extras/forms/model_forms.py:606 +#: netbox/extras/forms/model_forms.py:606 msgid "Data is populated from the remote source selected below." msgstr "Данные заполняются из удаленного источника, выбранного ниже." -#: extras/forms/model_forms.py:612 +#: netbox/extras/forms/model_forms.py:612 msgid "Must specify either local data or a data file" msgstr "Необходимо указать локальные данные или файл данных" -#: extras/forms/model_forms.py:631 templates/core/datafile.html:55 +#: netbox/extras/forms/model_forms.py:631 +#: netbox/templates/core/datafile.html:55 msgid "Content" msgstr "Контент" -#: extras/forms/reports.py:17 extras/forms/scripts.py:23 +#: netbox/extras/forms/reports.py:17 netbox/extras/forms/scripts.py:23 msgid "Schedule at" msgstr "Расписание на" -#: extras/forms/reports.py:18 +#: netbox/extras/forms/reports.py:18 msgid "Schedule execution of report to a set time" msgstr "Запланировать выполнение отчета на установленное время" -#: extras/forms/reports.py:23 extras/forms/scripts.py:29 +#: netbox/extras/forms/reports.py:23 netbox/extras/forms/scripts.py:29 msgid "Recurs every" msgstr "Повторяется каждый" -#: extras/forms/reports.py:27 +#: netbox/extras/forms/reports.py:27 msgid "Interval at which this report is re-run (in minutes)" msgstr "Интервал повторного запуска отчета (в минутах)" -#: extras/forms/reports.py:35 extras/forms/scripts.py:41 +#: netbox/extras/forms/reports.py:35 netbox/extras/forms/scripts.py:41 #, python-brace-format msgid " (current time: {now})" msgstr " (текущее время: {now})" -#: extras/forms/reports.py:45 extras/forms/scripts.py:51 +#: netbox/extras/forms/reports.py:45 netbox/extras/forms/scripts.py:51 msgid "Scheduled time must be in the future." msgstr "Запланированное время должно быть в будущем." -#: extras/forms/scripts.py:17 +#: netbox/extras/forms/scripts.py:17 msgid "Commit changes" msgstr "Зафиксируйте изменения" -#: extras/forms/scripts.py:18 +#: netbox/extras/forms/scripts.py:18 msgid "Commit changes to the database (uncheck for a dry-run)" msgstr "" "Зафиксируйте изменения в базе данных (снимите флажок для пробного запуска)" -#: extras/forms/scripts.py:24 +#: netbox/extras/forms/scripts.py:24 msgid "Schedule execution of script to a set time" msgstr "Запланируйте выполнение скрипта на заданное время" -#: extras/forms/scripts.py:33 +#: netbox/extras/forms/scripts.py:33 msgid "Interval at which this script is re-run (in minutes)" msgstr "Интервал повторного запуска этого скрипта (в минутах)" -#: extras/jobs.py:49 +#: netbox/extras/jobs.py:47 msgid "Database changes have been reverted automatically." msgstr "Изменения в базе данных были автоматически отменены." -#: extras/jobs.py:55 +#: netbox/extras/jobs.py:53 msgid "Script aborted with error: " msgstr "Скрипт прерван с ошибкой: " -#: extras/jobs.py:65 +#: netbox/extras/jobs.py:63 msgid "An exception occurred: " msgstr "Возникло исключение: " -#: extras/jobs.py:70 +#: netbox/extras/jobs.py:68 msgid "Database changes have been reverted due to error." msgstr "Изменения в базе данных отменены из-за ошибки." -#: extras/management/commands/reindex.py:66 +#: netbox/extras/management/commands/reindex.py:66 msgid "No indexers found!" msgstr "Индексаторы не найдены!" -#: extras/models/configs.py:130 +#: netbox/extras/models/configs.py:130 msgid "config context" msgstr "контекст конфигурации" -#: extras/models/configs.py:131 +#: netbox/extras/models/configs.py:131 msgid "config contexts" msgstr "контексты конфигурации" -#: extras/models/configs.py:149 extras/models/configs.py:205 +#: netbox/extras/models/configs.py:149 netbox/extras/models/configs.py:205 msgid "JSON data must be in object form. Example:" msgstr "Данные JSON должны быть в форме объекта. Пример:" -#: extras/models/configs.py:169 +#: netbox/extras/models/configs.py:169 msgid "" "Local config context data takes precedence over source contexts in the final" " rendered config context" @@ -7622,19 +8214,19 @@ msgstr "" "Данные контекста локальной конфигурации имеют приоритет над исходными " "контекстами в окончательном визуализированном контексте конфигурации" -#: extras/models/configs.py:224 +#: netbox/extras/models/configs.py:224 msgid "template code" msgstr "код шаблона" -#: extras/models/configs.py:225 +#: netbox/extras/models/configs.py:225 msgid "Jinja2 template code." msgstr "Код Jinja2 шаблона." -#: extras/models/configs.py:228 +#: netbox/extras/models/configs.py:228 msgid "environment parameters" msgstr "параметры окружения" -#: extras/models/configs.py:233 +#: netbox/extras/models/configs.py:233 msgid "" "Any additional" @@ -7644,42 +8236,42 @@ msgstr "" "href=\"https://jinja.palletsprojects.com/en/3.1.x/api/#jinja2.Environment\">дополнительные" " параметры для Jinja2 окружения." -#: extras/models/configs.py:240 +#: netbox/extras/models/configs.py:240 msgid "config template" msgstr "шаблон конфигурации" -#: extras/models/configs.py:241 +#: netbox/extras/models/configs.py:241 msgid "config templates" msgstr "шаблоны конфигураций" -#: extras/models/customfields.py:75 +#: netbox/extras/models/customfields.py:75 msgid "The object(s) to which this field applies." msgstr "Объекты, к которым относится это поле." -#: extras/models/customfields.py:82 +#: netbox/extras/models/customfields.py:82 msgid "The type of data this custom field holds" msgstr "Тип данных, которые содержит это настраиваемое поле" -#: extras/models/customfields.py:89 +#: netbox/extras/models/customfields.py:89 msgid "The type of NetBox object this field maps to (for object fields)" msgstr "" "Тип объекта NetBox, которому соответствует это поле (для полей объектов)" -#: extras/models/customfields.py:95 +#: netbox/extras/models/customfields.py:95 msgid "Internal field name" msgstr "Имя внутреннего поля" -#: extras/models/customfields.py:99 +#: netbox/extras/models/customfields.py:99 msgid "Only alphanumeric characters and underscores are allowed." msgstr "Допустимы только буквенно-цифровые символы и символы подчеркивания." -#: extras/models/customfields.py:104 +#: netbox/extras/models/customfields.py:104 msgid "Double underscores are not permitted in custom field names." msgstr "" "В именах настраиваемых полей недопустимо использовать два подчеркивания " "подряд (зарезервировано)." -#: extras/models/customfields.py:115 +#: netbox/extras/models/customfields.py:115 msgid "" "Name of the field as displayed to users (if not provided, 'the field's name " "will be used)" @@ -7687,19 +8279,19 @@ msgstr "" "Имя поля, отображаемое пользователям (если оно не указано, будет " "использовано имя поля)" -#: extras/models/customfields.py:119 extras/models/models.py:317 +#: netbox/extras/models/customfields.py:119 netbox/extras/models/models.py:317 msgid "group name" msgstr "имя группы" -#: extras/models/customfields.py:122 +#: netbox/extras/models/customfields.py:122 msgid "Custom fields within the same group will be displayed together" msgstr "Настраиваемые поля в одной группе будут отображаться вместе" -#: extras/models/customfields.py:130 +#: netbox/extras/models/customfields.py:130 msgid "required" msgstr "Требуется" -#: extras/models/customfields.py:132 +#: netbox/extras/models/customfields.py:132 msgid "" "This field is required when creating new objects or editing an existing " "object." @@ -7707,19 +8299,19 @@ msgstr "" "Это поле необходимо для создания новых объектов или редактирования " "существующего объекта." -#: extras/models/customfields.py:135 +#: netbox/extras/models/customfields.py:135 msgid "must be unique" msgstr "должен быть уникальным" -#: extras/models/customfields.py:137 +#: netbox/extras/models/customfields.py:137 msgid "The value of this field must be unique for the assigned object" msgstr "Значение этого поля должно быть уникальным для назначенного объекта" -#: extras/models/customfields.py:140 +#: netbox/extras/models/customfields.py:140 msgid "search weight" msgstr "вес поиска" -#: extras/models/customfields.py:143 +#: netbox/extras/models/customfields.py:143 msgid "" "Weighting for search. Lower values are considered more important. Fields " "with a search weight of zero will be ignored." @@ -7727,11 +8319,11 @@ msgstr "" "Взвешивание для поиска. Более низкие значения считаются более важными. Поля " "с нулевым весом поиска будут проигнорированы." -#: extras/models/customfields.py:148 +#: netbox/extras/models/customfields.py:148 msgid "filter logic" msgstr "логика фильтрации" -#: extras/models/customfields.py:152 +#: netbox/extras/models/customfields.py:152 msgid "" "Loose matches any instance of a given string; exact matches the entire " "field." @@ -7739,11 +8331,11 @@ msgstr "" "Loose соответствует любому экземпляру заданной строки; точно соответствует " "всему полю." -#: extras/models/customfields.py:155 +#: netbox/extras/models/customfields.py:155 msgid "default" msgstr "по умолчанию" -#: extras/models/customfields.py:159 +#: netbox/extras/models/customfields.py:159 msgid "" "Default value for the field (must be a JSON value). Encapsulate strings with" " double quotes (e.g. \"Foo\")." @@ -7751,7 +8343,7 @@ msgstr "" "Значение по умолчанию для поля (должно быть JSON-значением). Заключайте " "строки в двойные кавычки (например, «Foo»)." -#: extras/models/customfields.py:166 +#: netbox/extras/models/customfields.py:166 msgid "" "Filter the object selection choices using a query_params dict (must be a " "JSON value).Encapsulate strings with double quotes (e.g. \"Foo\")." @@ -7759,35 +8351,35 @@ msgstr "" "Отфильтруйте варианты выбора объектов, используя dict query_params (должно " "быть значение JSON). Заключайте строки в двойные кавычки (например, «Foo»)." -#: extras/models/customfields.py:172 +#: netbox/extras/models/customfields.py:172 msgid "display weight" msgstr "вес дисплея" -#: extras/models/customfields.py:173 +#: netbox/extras/models/customfields.py:173 msgid "Fields with higher weights appear lower in a form." msgstr "Поля с большим весом отображаются в форме ниже." -#: extras/models/customfields.py:178 +#: netbox/extras/models/customfields.py:178 msgid "minimum value" msgstr "минимальное значение" -#: extras/models/customfields.py:179 +#: netbox/extras/models/customfields.py:179 msgid "Minimum allowed value (for numeric fields)" msgstr "Минимальное допустимое значение (для числовых полей)" -#: extras/models/customfields.py:184 +#: netbox/extras/models/customfields.py:184 msgid "maximum value" msgstr "максимальное значение" -#: extras/models/customfields.py:185 +#: netbox/extras/models/customfields.py:185 msgid "Maximum allowed value (for numeric fields)" msgstr "Максимально допустимое значение (для числовых полей)" -#: extras/models/customfields.py:191 +#: netbox/extras/models/customfields.py:191 msgid "validation regex" msgstr "регулярное выражение валидации" -#: extras/models/customfields.py:193 +#: netbox/extras/models/customfields.py:193 #, python-brace-format msgid "" "Regular expression to enforce on text field values. Use ^ and $ to force " @@ -7798,195 +8390,197 @@ msgstr "" " ^ и $ для принудительного сопоставления всей строки. Например, ^ " "[A-Z]{3}$ ограничит значения ровно тремя заглавными буквами." -#: extras/models/customfields.py:201 +#: netbox/extras/models/customfields.py:201 msgid "choice set" msgstr "набор для выбора" -#: extras/models/customfields.py:210 +#: netbox/extras/models/customfields.py:210 msgid "Specifies whether the custom field is displayed in the UI" msgstr "" "Указывает, отображается ли настраиваемое поле в пользовательском интерфейсе" -#: extras/models/customfields.py:217 +#: netbox/extras/models/customfields.py:217 msgid "Specifies whether the custom field value can be edited in the UI" msgstr "" "Указывает, можно ли редактировать значение настраиваемого поля в " "пользовательском интерфейсе" -#: extras/models/customfields.py:221 +#: netbox/extras/models/customfields.py:221 msgid "is cloneable" msgstr "клонируется" -#: extras/models/customfields.py:222 +#: netbox/extras/models/customfields.py:222 msgid "Replicate this value when cloning objects" msgstr "Реплицируйте это значение при клонировании объектов" -#: extras/models/customfields.py:239 +#: netbox/extras/models/customfields.py:239 msgid "custom field" msgstr "настраиваемое поле" -#: extras/models/customfields.py:240 +#: netbox/extras/models/customfields.py:240 msgid "custom fields" msgstr "настраиваемые поля" -#: extras/models/customfields.py:329 +#: netbox/extras/models/customfields.py:329 #, python-brace-format msgid "Invalid default value \"{value}\": {error}" msgstr "Неверное значение по умолчанию»{value}«: {error}" -#: extras/models/customfields.py:336 +#: netbox/extras/models/customfields.py:336 msgid "A minimum value may be set only for numeric fields" msgstr "Минимальное значение может быть установлено только для числовых полей" -#: extras/models/customfields.py:338 +#: netbox/extras/models/customfields.py:338 msgid "A maximum value may be set only for numeric fields" msgstr "" "Максимальное значение может быть установлено только для числовых полей" -#: extras/models/customfields.py:348 +#: netbox/extras/models/customfields.py:348 msgid "" "Regular expression validation is supported only for text and URL fields" msgstr "" "Проверка регулярных выражений поддерживается только для текстовых полей и " "полей URL" -#: extras/models/customfields.py:354 +#: netbox/extras/models/customfields.py:354 msgid "Uniqueness cannot be enforced for boolean fields" msgstr "Уникальность не может быть обеспечена для булевых полей" -#: extras/models/customfields.py:364 +#: netbox/extras/models/customfields.py:364 msgid "Selection fields must specify a set of choices." msgstr "В полях выбора должен быть указан набор вариантов." -#: extras/models/customfields.py:368 +#: netbox/extras/models/customfields.py:368 msgid "Choices may be set only on selection fields." msgstr "Варианты могут быть заданы только в полях выбора." -#: extras/models/customfields.py:375 +#: netbox/extras/models/customfields.py:375 msgid "Object fields must define an object type." msgstr "Поля объекта должны определять тип объекта." -#: extras/models/customfields.py:379 +#: netbox/extras/models/customfields.py:379 #, python-brace-format msgid "{type} fields may not define an object type." msgstr "{type} поля не могут определять тип объекта." -#: extras/models/customfields.py:386 +#: netbox/extras/models/customfields.py:386 msgid "A related object filter can be defined only for object fields." msgstr "Фильтр связанных объектов можно определить только для полей объектов." -#: extras/models/customfields.py:390 +#: netbox/extras/models/customfields.py:390 msgid "Filter must be defined as a dictionary mapping attributes to values." msgstr "" "Фильтр должен быть определен как словарь, сопоставляющий атрибуты со " "значениями." -#: extras/models/customfields.py:469 +#: netbox/extras/models/customfields.py:469 msgid "True" msgstr "Истина" -#: extras/models/customfields.py:470 +#: netbox/extras/models/customfields.py:470 msgid "False" msgstr "Ложь" -#: extras/models/customfields.py:560 +#: netbox/extras/models/customfields.py:560 #, python-brace-format msgid "Values must match this regex: {regex}" msgstr "" "Значения должны соответствовать этому регулярному вырагу: " "{regex}" -#: extras/models/customfields.py:654 +#: netbox/extras/models/customfields.py:654 msgid "Value must be a string." msgstr "Значение должно быть строкой." -#: extras/models/customfields.py:656 +#: netbox/extras/models/customfields.py:656 #, python-brace-format msgid "Value must match regex '{regex}'" msgstr "Значение должно совпадать с регулярным выраженностью '{regex}'" -#: extras/models/customfields.py:661 +#: netbox/extras/models/customfields.py:661 msgid "Value must be an integer." msgstr "Значение должно быть целым числом." -#: extras/models/customfields.py:664 extras/models/customfields.py:679 +#: netbox/extras/models/customfields.py:664 +#: netbox/extras/models/customfields.py:679 #, python-brace-format msgid "Value must be at least {minimum}" msgstr "Значение должно быть не менее {minimum}" -#: extras/models/customfields.py:668 extras/models/customfields.py:683 +#: netbox/extras/models/customfields.py:668 +#: netbox/extras/models/customfields.py:683 #, python-brace-format msgid "Value must not exceed {maximum}" msgstr "Значение не должно превышать {maximum}" -#: extras/models/customfields.py:676 +#: netbox/extras/models/customfields.py:676 msgid "Value must be a decimal." msgstr "Значение должно быть десятичным." -#: extras/models/customfields.py:688 +#: netbox/extras/models/customfields.py:688 msgid "Value must be true or false." msgstr "Значение должно быть истинным или ложным." -#: extras/models/customfields.py:696 +#: netbox/extras/models/customfields.py:696 msgid "Date values must be in ISO 8601 format (YYYY-MM-DD)." msgstr "Значения дат должны быть в формате ISO 8601 (YYYY-MM-DD)." -#: extras/models/customfields.py:705 +#: netbox/extras/models/customfields.py:705 msgid "Date and time values must be in ISO 8601 format (YYYY-MM-DD HH:MM:SS)." msgstr "" "Значения даты и времени должны быть в формате ISO 8601 (YYYY-MM-DD " "HH:MM:SS)." -#: extras/models/customfields.py:712 +#: netbox/extras/models/customfields.py:712 #, python-brace-format msgid "Invalid choice ({value}) for choice set {choiceset}." msgstr "Неверный выбор ({value}2) для выбора набора {choiceset}." -#: extras/models/customfields.py:722 +#: netbox/extras/models/customfields.py:722 #, python-brace-format msgid "Invalid choice(s) ({value}) for choice set {choiceset}." msgstr "Неверный выбор (ы){value}2) для выбора набора {choiceset}." -#: extras/models/customfields.py:731 +#: netbox/extras/models/customfields.py:731 #, python-brace-format msgid "Value must be an object ID, not {type}" msgstr "Значение должно быть идентификатором объекта, а не {type}" -#: extras/models/customfields.py:737 +#: netbox/extras/models/customfields.py:737 #, python-brace-format msgid "Value must be a list of object IDs, not {type}" msgstr "Значение должно быть списком идентификаторов объектов, а не {type}" -#: extras/models/customfields.py:741 +#: netbox/extras/models/customfields.py:741 #, python-brace-format msgid "Found invalid object ID: {id}" msgstr "Обнаружен неправильный идентификатор объекта: {id}" -#: extras/models/customfields.py:744 +#: netbox/extras/models/customfields.py:744 msgid "Required field cannot be empty." msgstr "Обязательное поле не может быть пустым." -#: extras/models/customfields.py:763 +#: netbox/extras/models/customfields.py:763 msgid "Base set of predefined choices (optional)" msgstr "Базовый набор предопределенных вариантов (опционально)" -#: extras/models/customfields.py:775 +#: netbox/extras/models/customfields.py:775 msgid "Choices are automatically ordered alphabetically" msgstr "Варианты автоматически упорядочены в алфавитном порядке" -#: extras/models/customfields.py:782 +#: netbox/extras/models/customfields.py:782 msgid "custom field choice set" msgstr "набор вариантов для настраиваемых полей" -#: extras/models/customfields.py:783 +#: netbox/extras/models/customfields.py:783 msgid "custom field choice sets" msgstr "наборы вариантов для настраиваемых полей" -#: extras/models/customfields.py:825 +#: netbox/extras/models/customfields.py:825 msgid "Must define base or extra choices." msgstr "Должен определить базовые или дополнительные варианты." -#: extras/models/customfields.py:849 +#: netbox/extras/models/customfields.py:849 #, python-brace-format msgid "" "Cannot remove choice {choice} as there are {model} objects which reference " @@ -7995,60 +8589,60 @@ msgstr "" "Невозможно удалить выбор {choice} так как есть {model} объекты, ссылающиеся " "на него." -#: extras/models/dashboard.py:18 +#: netbox/extras/models/dashboard.py:18 msgid "layout" msgstr "макет" -#: extras/models/dashboard.py:22 +#: netbox/extras/models/dashboard.py:22 msgid "config" msgstr "конфигурация" -#: extras/models/dashboard.py:27 +#: netbox/extras/models/dashboard.py:27 msgid "dashboard" msgstr "панель управления" -#: extras/models/dashboard.py:28 +#: netbox/extras/models/dashboard.py:28 msgid "dashboards" msgstr "панели управления" -#: extras/models/models.py:52 +#: netbox/extras/models/models.py:52 msgid "object types" msgstr "типы объектов" -#: extras/models/models.py:53 +#: netbox/extras/models/models.py:53 msgid "The object(s) to which this rule applies." msgstr "Объект (объекты), к которым применяется данное правило." -#: extras/models/models.py:67 +#: netbox/extras/models/models.py:67 msgid "The types of event which will trigger this rule." msgstr "Типы событий, которые повлекут за собой действие этого правила." -#: extras/models/models.py:74 +#: netbox/extras/models/models.py:74 msgid "conditions" msgstr "условия" -#: extras/models/models.py:77 +#: netbox/extras/models/models.py:77 msgid "" "A set of conditions which determine whether the event will be generated." msgstr "Набор условий, определяющих, будет ли создано событие." -#: extras/models/models.py:85 +#: netbox/extras/models/models.py:85 msgid "action type" msgstr "тип действия" -#: extras/models/models.py:104 +#: netbox/extras/models/models.py:104 msgid "Additional data to pass to the action object" msgstr "Дополнительные данные для передачи объекту действия" -#: extras/models/models.py:116 +#: netbox/extras/models/models.py:116 msgid "event rule" msgstr "правило события" -#: extras/models/models.py:117 +#: netbox/extras/models/models.py:117 msgid "event rules" msgstr "правила мероприятия" -#: extras/models/models.py:166 +#: netbox/extras/models/models.py:166 msgid "" "This URL will be called using the HTTP method defined when the webhook is " "called. Jinja2 template processing is supported with the same context as the" @@ -8058,7 +8652,7 @@ msgstr "" "вызове веб-хука. Обработка шаблона Jinja2 поддерживается в том же контексте," " что и тело запроса." -#: extras/models/models.py:181 +#: netbox/extras/models/models.py:181 msgid "" "The complete list of official content types is available здесь." -#: extras/models/models.py:186 +#: netbox/extras/models/models.py:186 msgid "additional headers" msgstr "дополнительные заголовки" -#: extras/models/models.py:189 +#: netbox/extras/models/models.py:189 msgid "" "User-supplied HTTP headers to be sent with the request in addition to the " "HTTP content type. Headers should be defined in the format Name: " @@ -8084,11 +8678,11 @@ msgstr "" "быть определены в формате Название: Значение. Обработка шаблона" " Jinja2 поддерживается в том же контексте, что и тело запроса (см. ниже)." -#: extras/models/models.py:195 +#: netbox/extras/models/models.py:195 msgid "body template" msgstr "шаблон тела" -#: extras/models/models.py:198 +#: netbox/extras/models/models.py:198 msgid "" "Jinja2 template for a custom request body. If blank, a JSON object " "representing the change will be included. Available context data includes: " @@ -8100,11 +8694,11 @@ msgstr "" "event, model, timestamp, " "username, request_id, и data." -#: extras/models/models.py:204 +#: netbox/extras/models/models.py:204 msgid "secret" msgstr "секретный" -#: extras/models/models.py:208 +#: netbox/extras/models/models.py:208 msgid "" "When provided, the request will include a X-Hook-Signature " "header containing a HMAC hex digest of the payload body using the secret as " @@ -8115,15 +8709,15 @@ msgstr "" " нагрузки в формате HMAC, в котором в качестве ключа используется секрет. " "Секрет не передается в запросе." -#: extras/models/models.py:215 +#: netbox/extras/models/models.py:215 msgid "Enable SSL certificate verification. Disable with caution!" msgstr "Включите проверку сертификата SSL. Отключайте с осторожностью!" -#: extras/models/models.py:221 templates/extras/webhook.html:51 +#: netbox/extras/models/models.py:221 netbox/templates/extras/webhook.html:51 msgid "CA File Path" msgstr "Путь к файлу CA" -#: extras/models/models.py:223 +#: netbox/extras/models/models.py:223 msgid "" "The specific CA certificate file to use for SSL verification. Leave blank to" " use the system defaults." @@ -8131,63 +8725,63 @@ msgstr "" "Конкретный файл сертификата CA, используемый для проверки SSL. Оставьте поле" " пустым, чтобы использовать системные настройки по умолчанию." -#: extras/models/models.py:234 +#: netbox/extras/models/models.py:234 msgid "webhook" msgstr "вебхук" -#: extras/models/models.py:235 +#: netbox/extras/models/models.py:235 msgid "webhooks" msgstr "вебхуки" -#: extras/models/models.py:253 +#: netbox/extras/models/models.py:253 msgid "Do not specify a CA certificate file if SSL verification is disabled." msgstr "Не указывайте файл сертификата CA, если проверка SSL отключена." -#: extras/models/models.py:293 +#: netbox/extras/models/models.py:293 msgid "The object type(s) to which this link applies." msgstr "Тип (ы) объекта, к которому относится эта ссылка." -#: extras/models/models.py:305 +#: netbox/extras/models/models.py:305 msgid "link text" msgstr "текст ссылки" -#: extras/models/models.py:306 +#: netbox/extras/models/models.py:306 msgid "Jinja2 template code for link text" msgstr "Код Jinja2 шаблона для текста ссылки" -#: extras/models/models.py:309 +#: netbox/extras/models/models.py:309 msgid "link URL" msgstr "URL-адрес ссылки" -#: extras/models/models.py:310 +#: netbox/extras/models/models.py:310 msgid "Jinja2 template code for link URL" msgstr "Код Jinja2 шаблона для URL-адреса" -#: extras/models/models.py:320 +#: netbox/extras/models/models.py:320 msgid "Links with the same group will appear as a dropdown menu" msgstr "Ссылки с той же группой появятся в выпадающем меню" -#: extras/models/models.py:330 +#: netbox/extras/models/models.py:330 msgid "new window" msgstr "новое окно" -#: extras/models/models.py:332 +#: netbox/extras/models/models.py:332 msgid "Force link to open in a new window" msgstr "Принудительно открыть ссылку в новом окне" -#: extras/models/models.py:341 +#: netbox/extras/models/models.py:341 msgid "custom link" msgstr "настраиваемая ссылка" -#: extras/models/models.py:342 +#: netbox/extras/models/models.py:342 msgid "custom links" msgstr "настраиваемые ссылки" -#: extras/models/models.py:389 +#: netbox/extras/models/models.py:389 msgid "The object type(s) to which this template applies." msgstr "Тип (типы) объектов, к которым применим этот шаблон." -#: extras/models/models.py:402 +#: netbox/extras/models/models.py:402 msgid "" "Jinja2 template code. The list of objects being exported is passed as a " "context variable named queryset." @@ -8195,1081 +8789,1152 @@ msgstr "" "Код Jinja2 шаблона. Список экспортируемых объектов передается в виде " "контекстной переменной с именем queryset." -#: extras/models/models.py:410 +#: netbox/extras/models/models.py:410 msgid "Defaults to text/plain; charset=utf-8" msgstr "По умолчанию текстовый/обычный; кодировка=utf-8" -#: extras/models/models.py:413 +#: netbox/extras/models/models.py:413 msgid "file extension" msgstr "расширение файла" -#: extras/models/models.py:416 +#: netbox/extras/models/models.py:416 msgid "Extension to append to the rendered filename" msgstr "Расширение для добавления к отображаемому имени файла" -#: extras/models/models.py:419 +#: netbox/extras/models/models.py:419 msgid "as attachment" msgstr "в качестве вложения" -#: extras/models/models.py:421 +#: netbox/extras/models/models.py:421 msgid "Download file as attachment" msgstr "Загрузить файл в виде вложения" -#: extras/models/models.py:430 +#: netbox/extras/models/models.py:430 msgid "export template" msgstr "шаблон экспорта" -#: extras/models/models.py:431 +#: netbox/extras/models/models.py:431 msgid "export templates" msgstr "шаблоны экспорта" -#: extras/models/models.py:448 +#: netbox/extras/models/models.py:448 #, python-brace-format msgid "\"{name}\" is a reserved name. Please choose a different name." msgstr "«{name}\"— зарезервированное имя. Пожалуйста, выберите другое имя." -#: extras/models/models.py:498 +#: netbox/extras/models/models.py:498 msgid "The object type(s) to which this filter applies." msgstr "Тип (типы) объектов, к которым применяется этот фильтр." -#: extras/models/models.py:530 +#: netbox/extras/models/models.py:530 msgid "shared" msgstr "общий" -#: extras/models/models.py:543 +#: netbox/extras/models/models.py:543 msgid "saved filter" msgstr "сохраненный фильтр" -#: extras/models/models.py:544 +#: netbox/extras/models/models.py:544 msgid "saved filters" msgstr "сохраненные фильтры" -#: extras/models/models.py:562 +#: netbox/extras/models/models.py:562 msgid "Filter parameters must be stored as a dictionary of keyword arguments." msgstr "" "Параметры фильтра должны храниться в виде словаря аргументов ключевых слов." -#: extras/models/models.py:590 +#: netbox/extras/models/models.py:590 msgid "image height" msgstr "высота изображения" -#: extras/models/models.py:593 +#: netbox/extras/models/models.py:593 msgid "image width" msgstr "ширина изображения" -#: extras/models/models.py:610 +#: netbox/extras/models/models.py:610 msgid "image attachment" msgstr "прикрепить изображение" -#: extras/models/models.py:611 +#: netbox/extras/models/models.py:611 msgid "image attachments" msgstr "прикрепленные изображения" -#: extras/models/models.py:625 +#: netbox/extras/models/models.py:625 #, python-brace-format msgid "Image attachments cannot be assigned to this object type ({type})." msgstr "Вложенные изображения нельзя присвоить этому типу объекта ({type})." -#: extras/models/models.py:688 +#: netbox/extras/models/models.py:688 msgid "kind" msgstr "добрый" -#: extras/models/models.py:702 +#: netbox/extras/models/models.py:702 msgid "journal entry" msgstr "запись в журнале" -#: extras/models/models.py:703 +#: netbox/extras/models/models.py:703 msgid "journal entries" msgstr "записи в журнале" -#: extras/models/models.py:718 +#: netbox/extras/models/models.py:718 #, python-brace-format msgid "Journaling is not supported for this object type ({type})." msgstr "Ведение журнала не поддерживается для этого типа объектов ({type})." -#: extras/models/models.py:760 +#: netbox/extras/models/models.py:760 msgid "bookmark" msgstr "закладка" -#: extras/models/models.py:761 +#: netbox/extras/models/models.py:761 msgid "bookmarks" msgstr "закладки" -#: extras/models/models.py:774 +#: netbox/extras/models/models.py:774 #, python-brace-format msgid "Bookmarks cannot be assigned to this object type ({type})." msgstr "Закладки нельзя присвоить этому типу объекта ({type})." -#: extras/models/notifications.py:43 +#: netbox/extras/models/notifications.py:43 msgid "read" msgstr "читать" -#: extras/models/notifications.py:66 +#: netbox/extras/models/notifications.py:66 msgid "event" msgstr "событие" -#: extras/models/notifications.py:84 +#: netbox/extras/models/notifications.py:84 msgid "notification" msgstr "уведомление" -#: extras/models/notifications.py:85 +#: netbox/extras/models/notifications.py:85 msgid "notifications" msgstr "уведомления" -#: extras/models/notifications.py:99 extras/models/notifications.py:234 +#: netbox/extras/models/notifications.py:99 +#: netbox/extras/models/notifications.py:234 #, python-brace-format msgid "Objects of this type ({type}) do not support notifications." msgstr "Объекты этого типа ({type}) не поддерживают уведомления." -#: extras/models/notifications.py:137 users/models/users.py:58 -#: users/models/users.py:77 +#: netbox/extras/models/notifications.py:137 netbox/users/models/users.py:58 +#: netbox/users/models/users.py:77 msgid "groups" msgstr "групп" -#: extras/models/notifications.py:143 users/models/users.py:93 +#: netbox/extras/models/notifications.py:143 netbox/users/models/users.py:93 msgid "users" msgstr "пользователей" -#: extras/models/notifications.py:152 +#: netbox/extras/models/notifications.py:152 msgid "notification group" msgstr "группа уведомлений" -#: extras/models/notifications.py:153 +#: netbox/extras/models/notifications.py:153 msgid "notification groups" msgstr "группы уведомлений" -#: extras/models/notifications.py:217 +#: netbox/extras/models/notifications.py:217 msgid "subscription" msgstr "подписка" -#: extras/models/notifications.py:218 +#: netbox/extras/models/notifications.py:218 msgid "subscriptions" msgstr "подписки" -#: extras/models/scripts.py:42 +#: netbox/extras/models/scripts.py:42 msgid "is executable" msgstr "является исполняемым" -#: extras/models/scripts.py:64 +#: netbox/extras/models/scripts.py:64 msgid "script" msgstr "сценарий" -#: extras/models/scripts.py:65 +#: netbox/extras/models/scripts.py:65 msgid "scripts" msgstr "сценарии" -#: extras/models/scripts.py:111 +#: netbox/extras/models/scripts.py:111 msgid "script module" msgstr "скриптовый модуль" -#: extras/models/scripts.py:112 +#: netbox/extras/models/scripts.py:112 msgid "script modules" msgstr "скриптовые модули" -#: extras/models/search.py:22 +#: netbox/extras/models/search.py:22 msgid "timestamp" msgstr "отметка времени" -#: extras/models/search.py:37 +#: netbox/extras/models/search.py:37 msgid "field" msgstr "полк" -#: extras/models/search.py:45 +#: netbox/extras/models/search.py:45 msgid "value" msgstr "значение" -#: extras/models/search.py:56 +#: netbox/extras/models/search.py:56 msgid "cached value" msgstr "кэшированное значение" -#: extras/models/search.py:57 +#: netbox/extras/models/search.py:57 msgid "cached values" msgstr "кэшированные значения" -#: extras/models/staging.py:44 +#: netbox/extras/models/staging.py:44 msgid "branch" msgstr "ветка" -#: extras/models/staging.py:45 +#: netbox/extras/models/staging.py:45 msgid "branches" msgstr "ветки" -#: extras/models/staging.py:97 +#: netbox/extras/models/staging.py:97 msgid "staged change" msgstr "поэтапное изменение" -#: extras/models/staging.py:98 +#: netbox/extras/models/staging.py:98 msgid "staged changes" msgstr "поэтапные изменения" -#: extras/models/tags.py:40 +#: netbox/extras/models/tags.py:40 msgid "The object type(s) to which this tag can be applied." msgstr "Тип (ы) объекта, к которому можно применить этот тег." -#: extras/models/tags.py:49 +#: netbox/extras/models/tags.py:49 msgid "tag" msgstr "тег" -#: extras/models/tags.py:50 +#: netbox/extras/models/tags.py:50 msgid "tags" msgstr "теги" -#: extras/models/tags.py:78 +#: netbox/extras/models/tags.py:78 msgid "tagged item" msgstr "помеченный товар" -#: extras/models/tags.py:79 +#: netbox/extras/models/tags.py:79 msgid "tagged items" msgstr "помеченные товары" -#: extras/scripts.py:429 +#: netbox/extras/scripts.py:429 msgid "Script Data" msgstr "Данные скрипта" -#: extras/scripts.py:433 +#: netbox/extras/scripts.py:433 msgid "Script Execution Parameters" msgstr "Параметры выполнения сценария" -#: extras/tables/columns.py:12 templates/htmx/notifications.html:18 +#: netbox/extras/tables/columns.py:12 +#: netbox/templates/htmx/notifications.html:18 msgid "Dismiss" msgstr "Отклонить" -#: extras/tables/tables.py:62 extras/tables/tables.py:159 -#: extras/tables/tables.py:184 extras/tables/tables.py:250 -#: extras/tables/tables.py:276 extras/tables/tables.py:412 -#: extras/tables/tables.py:446 templates/extras/customfield.html:105 -#: templates/extras/eventrule.html:27 templates/users/objectpermission.html:64 -#: users/tables.py:80 +#: netbox/extras/tables/tables.py:62 netbox/extras/tables/tables.py:159 +#: netbox/extras/tables/tables.py:184 netbox/extras/tables/tables.py:250 +#: netbox/extras/tables/tables.py:276 netbox/extras/tables/tables.py:412 +#: netbox/extras/tables/tables.py:446 +#: netbox/templates/extras/customfield.html:105 +#: netbox/templates/extras/eventrule.html:27 +#: netbox/templates/users/objectpermission.html:64 netbox/users/tables.py:80 msgid "Object Types" msgstr "Типы объектов" -#: extras/tables/tables.py:69 +#: netbox/extras/tables/tables.py:69 msgid "Validate Uniqueness" msgstr "Подтвердите уникальность" -#: extras/tables/tables.py:73 +#: netbox/extras/tables/tables.py:73 msgid "Visible" msgstr "Видимый" -#: extras/tables/tables.py:76 +#: netbox/extras/tables/tables.py:76 msgid "Editable" msgstr "Редактируемый" -#: extras/tables/tables.py:82 +#: netbox/extras/tables/tables.py:82 msgid "Related Object Type" msgstr "Тип связанного объекта" -#: extras/tables/tables.py:86 templates/extras/customfield.html:51 +#: netbox/extras/tables/tables.py:86 +#: netbox/templates/extras/customfield.html:51 msgid "Choice Set" msgstr "Набор для выбора" -#: extras/tables/tables.py:94 +#: netbox/extras/tables/tables.py:94 msgid "Is Cloneable" msgstr "Можно ли клонировать" -#: extras/tables/tables.py:98 templates/extras/customfield.html:118 +#: netbox/extras/tables/tables.py:98 +#: netbox/templates/extras/customfield.html:118 msgid "Minimum Value" msgstr "Минимальное значение" -#: extras/tables/tables.py:101 templates/extras/customfield.html:122 +#: netbox/extras/tables/tables.py:101 +#: netbox/templates/extras/customfield.html:122 msgid "Maximum Value" msgstr "Максимальное значение" -#: extras/tables/tables.py:104 +#: netbox/extras/tables/tables.py:104 msgid "Validation Regex" msgstr "Валидации регулярным выражением" -#: extras/tables/tables.py:137 +#: netbox/extras/tables/tables.py:137 msgid "Count" msgstr "Количество" -#: extras/tables/tables.py:140 +#: netbox/extras/tables/tables.py:140 msgid "Order Alphabetically" msgstr "Упорядочить в алфавитном порядке" -#: extras/tables/tables.py:165 templates/extras/customlink.html:33 +#: netbox/extras/tables/tables.py:165 +#: netbox/templates/extras/customlink.html:33 msgid "New Window" msgstr "Новое окно" -#: extras/tables/tables.py:187 +#: netbox/extras/tables/tables.py:187 msgid "As Attachment" msgstr "В качестве вложения" -#: extras/tables/tables.py:195 extras/tables/tables.py:487 -#: extras/tables/tables.py:522 templates/core/datafile.html:24 -#: templates/dcim/device/render_config.html:22 -#: templates/extras/configcontext.html:39 -#: templates/extras/configtemplate.html:31 -#: templates/extras/exporttemplate.html:45 -#: templates/generic/bulk_import.html:35 -#: templates/virtualization/virtualmachine/render_config.html:22 +#: netbox/extras/tables/tables.py: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/generic/bulk_import.html:35 +#: netbox/templates/virtualization/virtualmachine/render_config.html:22 msgid "Data File" msgstr "Файл данных" -#: extras/tables/tables.py:200 extras/tables/tables.py:499 -#: extras/tables/tables.py:527 +#: netbox/extras/tables/tables.py:200 netbox/extras/tables/tables.py:499 +#: netbox/extras/tables/tables.py:527 msgid "Synced" msgstr "Синхронизировано" -#: extras/tables/tables.py:227 +#: netbox/extras/tables/tables.py:227 msgid "Image" msgstr "Изображение" -#: extras/tables/tables.py:232 +#: netbox/extras/tables/tables.py:232 msgid "Size (Bytes)" msgstr "Размер (байты)" -#: extras/tables/tables.py:339 +#: netbox/extras/tables/tables.py:339 msgid "Read" msgstr "Прочтите" -#: extras/tables/tables.py:382 +#: netbox/extras/tables/tables.py:382 msgid "SSL Validation" msgstr "Валидация SSL" -#: extras/tables/tables.py:418 templates/extras/eventrule.html:37 +#: netbox/extras/tables/tables.py:418 +#: netbox/templates/extras/eventrule.html:37 msgid "Event Types" msgstr "Типы событий" -#: extras/tables/tables.py:535 netbox/navigation/menu.py:77 -#: templates/dcim/devicerole.html:8 +#: netbox/extras/tables/tables.py:535 netbox/netbox/navigation/menu.py:77 +#: netbox/templates/dcim/devicerole.html:8 msgid "Device Roles" msgstr "Роли устройств" -#: extras/tables/tables.py:587 +#: netbox/extras/tables/tables.py:587 msgid "Comments (Short)" msgstr "Комментарии (короткие)" -#: extras/tables/tables.py:606 extras/tables/tables.py:640 +#: netbox/extras/tables/tables.py:606 netbox/extras/tables/tables.py:640 msgid "Line" msgstr "Линия" -#: extras/tables/tables.py:613 extras/tables/tables.py:650 +#: netbox/extras/tables/tables.py:613 netbox/extras/tables/tables.py:650 msgid "Level" msgstr "Уровень" -#: extras/tables/tables.py:619 extras/tables/tables.py:659 +#: netbox/extras/tables/tables.py:619 netbox/extras/tables/tables.py:659 msgid "Message" msgstr "Сообщение" -#: extras/tables/tables.py:643 +#: netbox/extras/tables/tables.py:643 msgid "Method" msgstr "Метод" -#: extras/validators.py:15 +#: netbox/extras/validators.py:15 #, python-format msgid "Ensure this value is equal to %(limit_value)s." msgstr "Убедитесь, что это значение равно %(limit_value)s." -#: extras/validators.py:26 +#: netbox/extras/validators.py:26 #, python-format msgid "Ensure this value does not equal %(limit_value)s." msgstr "Убедитесь, что это значение не равно %(limit_value)s." -#: extras/validators.py:37 +#: netbox/extras/validators.py:37 msgid "This field must be empty." msgstr "Это поле должно быть пустым." -#: extras/validators.py:52 +#: netbox/extras/validators.py:52 msgid "This field must not be empty." msgstr "Это поле не должно быть пустым." -#: extras/validators.py:94 +#: netbox/extras/validators.py:94 msgid "Validation rules must be passed as a dictionary" msgstr "Правила валидации должны быть переданы в виде словаря" -#: extras/validators.py:119 +#: netbox/extras/validators.py:119 #, python-brace-format msgid "Custom validation failed for {attribute}: {exception}" msgstr "Пользовательская проверка не удалась для {attribute}: {exception}" -#: extras/validators.py:133 +#: netbox/extras/validators.py:133 #, python-brace-format msgid "Invalid attribute \"{name}\" for request" msgstr "Неверный атрибут»{name}\"по запросу" -#: extras/validators.py:150 +#: netbox/extras/validators.py:150 #, python-brace-format msgid "Invalid attribute \"{name}\" for {model}" msgstr "Недопустимый атрибут \"{name}\" для {model}" -#: extras/views.py:960 +#: netbox/extras/views.py:960 msgid "Your dashboard has been reset." msgstr "Панель виджетов была сброшена." -#: extras/views.py:1006 +#: netbox/extras/views.py:1006 msgid "Added widget: " msgstr "Добавлен виджет: " -#: extras/views.py:1047 +#: netbox/extras/views.py:1047 msgid "Updated widget: " msgstr "Обновлен виджет: " -#: extras/views.py:1083 +#: netbox/extras/views.py:1083 msgid "Deleted widget: " msgstr "Удален виджет: " -#: extras/views.py:1085 +#: netbox/extras/views.py:1085 msgid "Error deleting widget: " msgstr "Ошибка при удалении виджета: " -#: extras/views.py:1172 +#: netbox/extras/views.py:1175 msgid "Unable to run script: RQ worker process not running." msgstr "Невозможно запустить скрипт: процесс RQ не запущен." -#: ipam/api/field_serializers.py:17 +#: netbox/ipam/api/field_serializers.py:17 msgid "Enter a valid IPv4 or IPv6 address with optional mask." msgstr "Введите действительный адрес IPv4 или IPv6 с дополнительной маской." -#: ipam/api/field_serializers.py:24 +#: netbox/ipam/api/field_serializers.py:24 #, python-brace-format msgid "Invalid IP address format: {data}" msgstr "Неверный формат IP-адреса: {data}" -#: ipam/api/field_serializers.py:37 +#: netbox/ipam/api/field_serializers.py:37 msgid "Enter a valid IPv4 or IPv6 prefix and mask in CIDR notation." msgstr "Введите действительный префикс и маску IPv4 или IPv6 в нотации CIDR." -#: ipam/api/field_serializers.py:44 +#: netbox/ipam/api/field_serializers.py:44 #, python-brace-format msgid "Invalid IP prefix format: {data}" msgstr "Неверный формат IP-префикса: {data}" -#: ipam/api/views.py:358 +#: netbox/ipam/api/views.py:358 msgid "" "Insufficient space is available to accommodate the requested prefix size(s)" msgstr "Недостаточно места для размещения запрошенных размеров префиксов" -#: ipam/choices.py:30 +#: netbox/ipam/choices.py:30 msgid "Container" msgstr "Контейнер" -#: ipam/choices.py:72 +#: netbox/ipam/choices.py:72 msgid "DHCP" msgstr "DHCP" -#: ipam/choices.py:73 +#: netbox/ipam/choices.py:73 msgid "SLAAC" msgstr "SLAAC" -#: ipam/choices.py:89 +#: netbox/ipam/choices.py:89 msgid "Loopback" -msgstr "Обратная петля" +msgstr "Loopback" -#: ipam/choices.py:91 +#: netbox/ipam/choices.py:91 msgid "Anycast" msgstr "Anycast" -#: ipam/choices.py:115 +#: netbox/ipam/choices.py:115 msgid "Standard" msgstr "Стандарт" -#: ipam/choices.py:120 +#: netbox/ipam/choices.py:120 msgid "CheckPoint" msgstr "CheckPoint" -#: ipam/choices.py:123 +#: netbox/ipam/choices.py:123 msgid "Cisco" msgstr "Cisco" -#: ipam/choices.py:137 +#: netbox/ipam/choices.py:137 msgid "Plaintext" msgstr "Обычный текст" -#: ipam/fields.py:36 +#: netbox/ipam/fields.py:36 #, python-brace-format msgid "Invalid IP address format: {address}" msgstr "Неверный формат IP-адреса: {address}" -#: ipam/filtersets.py:48 vpn/filtersets.py:304 +#: netbox/ipam/filtersets.py:48 netbox/vpn/filtersets.py:304 msgid "Import target" msgstr "Цель импорта" -#: ipam/filtersets.py:54 vpn/filtersets.py:310 +#: netbox/ipam/filtersets.py:54 netbox/vpn/filtersets.py:310 msgid "Import target (name)" msgstr "Цель импорта (имя)" -#: ipam/filtersets.py:59 vpn/filtersets.py:315 +#: netbox/ipam/filtersets.py:59 netbox/vpn/filtersets.py:315 msgid "Export target" msgstr "Цель экспорта" -#: ipam/filtersets.py:65 vpn/filtersets.py:321 +#: netbox/ipam/filtersets.py:65 netbox/vpn/filtersets.py:321 msgid "Export target (name)" msgstr "Цель экспорта (имя)" -#: ipam/filtersets.py:86 +#: netbox/ipam/filtersets.py:86 msgid "Importing VRF" msgstr "Импорт VRF" -#: ipam/filtersets.py:92 +#: netbox/ipam/filtersets.py:92 msgid "Import VRF (RD)" msgstr "Импорт VRF (RD)" -#: ipam/filtersets.py:97 +#: netbox/ipam/filtersets.py:97 msgid "Exporting VRF" msgstr "Экспорт VRF" -#: ipam/filtersets.py:103 +#: netbox/ipam/filtersets.py:103 msgid "Export VRF (RD)" msgstr "Экспорт VRF (RD)" -#: ipam/filtersets.py:108 +#: netbox/ipam/filtersets.py:108 msgid "Importing L2VPN" msgstr "Импорт L2VPN" -#: ipam/filtersets.py:114 +#: netbox/ipam/filtersets.py:114 msgid "Importing L2VPN (identifier)" msgstr "Импорт L2VPN (идентификатор)" -#: ipam/filtersets.py:119 +#: netbox/ipam/filtersets.py:119 msgid "Exporting L2VPN" msgstr "Экспорт L2VPN" -#: ipam/filtersets.py:125 +#: netbox/ipam/filtersets.py:125 msgid "Exporting L2VPN (identifier)" msgstr "Экспорт L2VPN (идентификатор)" -#: ipam/filtersets.py:155 ipam/filtersets.py:281 ipam/forms/model_forms.py:229 -#: ipam/tables/ip.py:212 templates/ipam/prefix.html:12 +#: 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 "Префикс" -#: ipam/filtersets.py:159 ipam/filtersets.py:198 ipam/filtersets.py:221 +#: netbox/ipam/filtersets.py:159 netbox/ipam/filtersets.py:198 +#: netbox/ipam/filtersets.py:223 msgid "RIR (ID)" msgstr "RIR (ID)" -#: ipam/filtersets.py:165 ipam/filtersets.py:204 ipam/filtersets.py:227 +#: netbox/ipam/filtersets.py:165 netbox/ipam/filtersets.py:204 +#: netbox/ipam/filtersets.py:229 msgid "RIR (slug)" msgstr "RIR (подстрока)" -#: ipam/filtersets.py:285 +#: netbox/ipam/filtersets.py:287 msgid "Within prefix" msgstr "В префиксе" -#: ipam/filtersets.py:289 +#: netbox/ipam/filtersets.py:291 msgid "Within and including prefix" msgstr "В префиксе и включительно" -#: ipam/filtersets.py:293 +#: netbox/ipam/filtersets.py:295 msgid "Prefixes which contain this prefix or IP" msgstr "Префиксы, содержащие этот префикс или IP-адрес" -#: ipam/filtersets.py:304 ipam/filtersets.py:572 ipam/forms/bulk_edit.py:343 -#: ipam/forms/filtersets.py:196 ipam/forms/filtersets.py:331 +#: 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 "Длина маски" -#: ipam/filtersets.py:373 vpn/filtersets.py:427 +#: netbox/ipam/filtersets.py:375 netbox/vpn/filtersets.py:427 msgid "VLAN (ID)" msgstr "VLAN (ID)" -#: ipam/filtersets.py:377 vpn/filtersets.py:422 +#: netbox/ipam/filtersets.py:379 netbox/vpn/filtersets.py:422 msgid "VLAN number (1-4094)" msgstr "Номер VLAN (1-4094)" -#: ipam/filtersets.py:471 ipam/filtersets.py:475 ipam/filtersets.py:567 -#: ipam/forms/model_forms.py:463 templates/tenancy/contact.html:53 -#: tenancy/forms/bulk_edit.py:113 +#: 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 "Адрес" -#: ipam/filtersets.py:479 +#: netbox/ipam/filtersets.py:481 msgid "Ranges which contain this prefix or IP" msgstr "Диапазоны, содержащие этот префикс или IP-адрес" -#: ipam/filtersets.py:507 ipam/filtersets.py:563 +#: netbox/ipam/filtersets.py:509 netbox/ipam/filtersets.py:565 msgid "Parent prefix" msgstr "Родительский префикс" -#: ipam/filtersets.py:616 ipam/filtersets.py:856 ipam/filtersets.py:1131 -#: 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 "Виртуальная машина (имя)" -#: ipam/filtersets.py:621 ipam/filtersets.py:861 ipam/filtersets.py:1125 -#: virtualization/filtersets.py:282 virtualization/filtersets.py:321 -#: vpn/filtersets.py:390 +#: 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)" -#: ipam/filtersets.py:627 vpn/filtersets.py:97 vpn/filtersets.py:396 +#: netbox/ipam/filtersets.py:629 netbox/vpn/filtersets.py:97 +#: netbox/vpn/filtersets.py:396 msgid "Interface (name)" msgstr "Интерфейс (имя)" -#: ipam/filtersets.py:638 vpn/filtersets.py:108 vpn/filtersets.py:407 +#: netbox/ipam/filtersets.py:640 netbox/vpn/filtersets.py:108 +#: netbox/vpn/filtersets.py:407 msgid "VM interface (name)" msgstr "Интерфейс виртуальной машины (имя)" -#: ipam/filtersets.py:643 vpn/filtersets.py:113 +#: netbox/ipam/filtersets.py:645 netbox/vpn/filtersets.py:113 msgid "VM interface (ID)" msgstr "Интерфейс виртуальной машины (ID)" -#: ipam/filtersets.py:648 +#: netbox/ipam/filtersets.py:650 msgid "FHRP group (ID)" msgstr "FHRP группа (ID)" -#: ipam/filtersets.py:652 +#: netbox/ipam/filtersets.py:654 msgid "Is assigned to an interface" msgstr "Присвоен интерфейсу" -#: ipam/filtersets.py:656 +#: netbox/ipam/filtersets.py:658 msgid "Is assigned" msgstr "Назначено" -#: ipam/filtersets.py:668 +#: netbox/ipam/filtersets.py:670 msgid "Service (ID)" msgstr "Сервис (ID)" -#: ipam/filtersets.py:673 +#: netbox/ipam/filtersets.py:675 msgid "NAT inside IP address (ID)" msgstr "Внутренний NAT IP-адрес (ID)" -#: ipam/filtersets.py:1041 ipam/forms/bulk_import.py:322 +#: netbox/ipam/filtersets.py:1043 netbox/ipam/forms/bulk_import.py:322 msgid "Assigned interface" msgstr "Назначенный интерфейс" -#: ipam/filtersets.py:1046 +#: netbox/ipam/filtersets.py:1048 msgid "Assigned VM interface" msgstr "Назначенный интерфейс виртуальной машины" -#: ipam/filtersets.py:1136 +#: netbox/ipam/filtersets.py:1138 msgid "IP address (ID)" msgstr "IP-адрес (ID)" -#: ipam/filtersets.py:1142 ipam/models/ip.py:788 +#: netbox/ipam/filtersets.py:1144 netbox/ipam/models/ip.py:788 msgid "IP address" msgstr "IP-адрес" -#: ipam/filtersets.py:1167 +#: netbox/ipam/filtersets.py:1169 msgid "Primary IPv4 (ID)" msgstr "Основной IPv4 (ID)" -#: ipam/filtersets.py:1172 +#: netbox/ipam/filtersets.py:1174 msgid "Primary IPv6 (ID)" msgstr "Основной IPv6 (ID)" -#: ipam/formfields.py:14 +#: netbox/ipam/formfields.py:14 msgid "Enter a valid IPv4 or IPv6 address (without a mask)." msgstr "Введите действительный адрес IPv4 или IPv6 (без маски)." -#: ipam/formfields.py:32 +#: netbox/ipam/formfields.py:32 #, python-brace-format msgid "Invalid IPv4/IPv6 address format: {address}" msgstr "Неверный формат адреса IPv4/IPv6: {address}" -#: ipam/formfields.py:37 +#: netbox/ipam/formfields.py:37 msgid "This field requires an IP address without a mask." msgstr "В этом поле требуется IP-адрес без маски." -#: ipam/formfields.py:39 ipam/formfields.py:61 +#: netbox/ipam/formfields.py:39 netbox/ipam/formfields.py:61 msgid "Please specify a valid IPv4 or IPv6 address." msgstr "Укажите действительный адрес IPv4 или IPv6." -#: ipam/formfields.py:44 +#: netbox/ipam/formfields.py:44 msgid "Enter a valid IPv4 or IPv6 address (with CIDR mask)." msgstr "Введите действительный адрес IPv4 или IPv6 (с маской CIDR)." -#: ipam/formfields.py:56 +#: netbox/ipam/formfields.py:56 msgid "CIDR mask (e.g. /24) is required." msgstr "Требуется маска CIDR (например, /24)." -#: ipam/forms/bulk_create.py:13 +#: netbox/ipam/forms/bulk_create.py:13 msgid "Address pattern" msgstr "Шаблон адреса" -#: ipam/forms/bulk_edit.py:50 +#: netbox/ipam/forms/bulk_edit.py:50 msgid "Enforce unique space" msgstr "Обеспечить уникальное пространство" -#: ipam/forms/bulk_edit.py:88 +#: netbox/ipam/forms/bulk_edit.py:88 msgid "Is private" msgstr "Является приватным" -#: ipam/forms/bulk_edit.py:109 ipam/forms/bulk_edit.py:138 -#: ipam/forms/bulk_edit.py:163 ipam/forms/bulk_import.py:89 -#: ipam/forms/bulk_import.py:109 ipam/forms/bulk_import.py:129 -#: ipam/forms/filtersets.py:110 ipam/forms/filtersets.py:125 -#: ipam/forms/filtersets.py:148 ipam/forms/model_forms.py:96 -#: ipam/forms/model_forms.py:109 ipam/forms/model_forms.py:131 -#: ipam/forms/model_forms.py:149 ipam/models/asns.py:31 -#: ipam/models/asns.py:103 ipam/models/ip.py:71 ipam/models/ip.py:90 -#: ipam/tables/asn.py:20 ipam/tables/asn.py:45 -#: templates/ipam/aggregate.html:18 templates/ipam/asn.html:27 -#: templates/ipam/asnrange.html:19 templates/ipam/rir.html:19 +#: netbox/ipam/forms/bulk_edit.py: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/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" -#: ipam/forms/bulk_edit.py:171 +#: netbox/ipam/forms/bulk_edit.py:171 msgid "Date added" msgstr "Дата добавления" -#: ipam/forms/bulk_edit.py:229 ipam/forms/model_forms.py:586 -#: ipam/forms/model_forms.py:633 ipam/tables/ip.py:251 -#: templates/ipam/vlan_edit.html:37 templates/ipam/vlangroup.html:27 +#: 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/templates/ipam/vlangroup.html:27 msgid "VLAN Group" msgstr "VLAN группа" -#: ipam/forms/bulk_edit.py:234 ipam/forms/bulk_import.py:185 -#: ipam/forms/filtersets.py:256 ipam/forms/model_forms.py:218 -#: ipam/models/vlans.py:234 ipam/tables/ip.py:255 -#: templates/ipam/prefix.html:60 templates/ipam/vlan.html:12 -#: templates/ipam/vlan/base.html:6 templates/ipam/vlan_edit.html:10 -#: templates/wireless/wirelesslan.html:30 vpn/forms/bulk_import.py:304 -#: vpn/forms/filtersets.py:284 vpn/forms/model_forms.py:433 -#: vpn/forms/model_forms.py:452 wireless/forms/bulk_edit.py:55 -#: wireless/forms/bulk_import.py:48 wireless/forms/model_forms.py:48 -#: wireless/models.py:102 +#: 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/templates/ipam/vlan/base.html:6 +#: netbox/templates/ipam/vlan_edit.html:10 +#: netbox/templates/wireless/wirelesslan.html:30 +#: netbox/vpn/forms/bulk_import.py:304 netbox/vpn/forms/filtersets.py:284 +#: netbox/vpn/forms/model_forms.py:433 netbox/vpn/forms/model_forms.py:452 +#: netbox/wireless/forms/bulk_edit.py:55 +#: netbox/wireless/forms/bulk_import.py:48 +#: netbox/wireless/forms/model_forms.py:48 netbox/wireless/models.py:102 msgid "VLAN" msgstr "VLAN" -#: ipam/forms/bulk_edit.py:245 +#: netbox/ipam/forms/bulk_edit.py:245 msgid "Prefix length" msgstr "Длина префикса" -#: ipam/forms/bulk_edit.py:268 ipam/forms/filtersets.py:241 -#: templates/ipam/prefix.html:85 +#: netbox/ipam/forms/bulk_edit.py:268 netbox/ipam/forms/filtersets.py:241 +#: netbox/templates/ipam/prefix.html:85 msgid "Is a pool" msgstr "Является пулом" -#: ipam/forms/bulk_edit.py:273 ipam/forms/bulk_edit.py:318 -#: ipam/forms/filtersets.py:248 ipam/forms/filtersets.py:293 -#: ipam/models/ip.py:272 ipam/models/ip.py:539 +#: netbox/ipam/forms/bulk_edit.py: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 msgid "Treat as fully utilized" msgstr "Считать полностью использованным" -#: ipam/forms/bulk_edit.py:287 ipam/forms/filtersets.py:171 +#: netbox/ipam/forms/bulk_edit.py:287 netbox/ipam/forms/filtersets.py:171 msgid "VLAN Assignment" msgstr "Назначение VLAN" -#: ipam/forms/bulk_edit.py:366 ipam/models/ip.py:772 +#: netbox/ipam/forms/bulk_edit.py:366 netbox/ipam/models/ip.py:772 msgid "DNS name" msgstr "DNS-имя" -#: ipam/forms/bulk_edit.py:387 ipam/forms/bulk_edit.py:534 -#: ipam/forms/bulk_import.py:394 ipam/forms/bulk_import.py:469 -#: ipam/forms/bulk_import.py:495 ipam/forms/filtersets.py:390 -#: ipam/forms/filtersets.py:530 templates/ipam/fhrpgroup.html:22 -#: templates/ipam/inc/panels/fhrp_groups.html:24 -#: templates/ipam/service.html:32 templates/ipam/servicetemplate.html:19 +#: netbox/ipam/forms/bulk_edit.py: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/templates/ipam/inc/panels/fhrp_groups.html:24 +#: netbox/templates/ipam/service.html:32 +#: netbox/templates/ipam/servicetemplate.html:19 msgid "Protocol" msgstr "Протокол" -#: ipam/forms/bulk_edit.py:394 ipam/forms/filtersets.py:397 -#: ipam/tables/fhrp.py:22 templates/ipam/fhrpgroup.html:26 +#: netbox/ipam/forms/bulk_edit.py:394 netbox/ipam/forms/filtersets.py:397 +#: netbox/ipam/tables/fhrp.py:22 netbox/templates/ipam/fhrpgroup.html:26 msgid "Group ID" msgstr "Идентификатор группы" -#: ipam/forms/bulk_edit.py:399 ipam/forms/filtersets.py:402 -#: wireless/forms/bulk_edit.py:68 wireless/forms/bulk_edit.py:115 -#: wireless/forms/bulk_import.py:62 wireless/forms/bulk_import.py:65 -#: wireless/forms/bulk_import.py:104 wireless/forms/bulk_import.py:107 -#: wireless/forms/filtersets.py:54 wireless/forms/filtersets.py:88 +#: netbox/ipam/forms/bulk_edit.py: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 msgid "Authentication type" msgstr "Тип аутентификации" -#: ipam/forms/bulk_edit.py:404 ipam/forms/filtersets.py:406 +#: netbox/ipam/forms/bulk_edit.py:404 netbox/ipam/forms/filtersets.py:406 msgid "Authentication key" msgstr "Ключ аутентификации" -#: ipam/forms/bulk_edit.py:421 ipam/forms/filtersets.py:383 -#: ipam/forms/model_forms.py:474 netbox/navigation/menu.py:386 -#: templates/ipam/fhrpgroup.html:49 -#: templates/wireless/inc/authentication_attrs.html:5 -#: wireless/forms/bulk_edit.py:91 wireless/forms/bulk_edit.py:149 -#: wireless/forms/filtersets.py:36 wireless/forms/filtersets.py:76 -#: wireless/forms/model_forms.py:55 wireless/forms/model_forms.py:171 +#: 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/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 msgid "Authentication" msgstr "Аутентификация" -#: ipam/forms/bulk_edit.py:436 ipam/forms/model_forms.py:575 +#: netbox/ipam/forms/bulk_edit.py:436 netbox/ipam/forms/model_forms.py:608 msgid "Scope type" msgstr "Тип прицела" -#: ipam/forms/bulk_edit.py:439 ipam/forms/bulk_edit.py:453 -#: ipam/forms/model_forms.py:578 ipam/forms/model_forms.py:588 -#: ipam/tables/vlans.py:71 templates/ipam/vlangroup.html:38 +#: 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 "Область применения" -#: ipam/forms/bulk_edit.py:446 ipam/models/vlans.py:60 +#: netbox/ipam/forms/bulk_edit.py:446 netbox/ipam/models/vlans.py:60 msgid "VLAN ID ranges" msgstr "Диапазоны идентификаторов VLAN" -#: ipam/forms/bulk_edit.py:525 +#: netbox/ipam/forms/bulk_edit.py:525 msgid "Site & Group" msgstr "Сайт и группа" -#: ipam/forms/bulk_edit.py:539 ipam/forms/model_forms.py:659 -#: ipam/forms/model_forms.py:691 ipam/tables/services.py:19 -#: ipam/tables/services.py:49 templates/ipam/service.html:36 -#: templates/ipam/servicetemplate.html:23 +#: netbox/ipam/forms/bulk_edit.py:539 netbox/ipam/forms/model_forms.py:692 +#: netbox/ipam/forms/model_forms.py:724 netbox/ipam/tables/services.py:19 +#: netbox/ipam/tables/services.py:49 netbox/templates/ipam/service.html:36 +#: netbox/templates/ipam/servicetemplate.html:23 msgid "Ports" msgstr "Порты" -#: ipam/forms/bulk_import.py:48 +#: netbox/ipam/forms/bulk_import.py:48 msgid "Import route targets" msgstr "Импортируйте цели маршрута" -#: ipam/forms/bulk_import.py:54 +#: netbox/ipam/forms/bulk_import.py:54 msgid "Export route targets" msgstr "Экспортные цели маршрута" -#: ipam/forms/bulk_import.py:92 ipam/forms/bulk_import.py:112 -#: ipam/forms/bulk_import.py:132 +#: netbox/ipam/forms/bulk_import.py:92 netbox/ipam/forms/bulk_import.py:112 +#: netbox/ipam/forms/bulk_import.py:132 msgid "Assigned RIR" msgstr "Назначенный RIR" -#: ipam/forms/bulk_import.py:182 +#: netbox/ipam/forms/bulk_import.py:182 msgid "VLAN's group (if any)" msgstr "Группа VLAN (если есть)" -#: ipam/forms/bulk_import.py:308 +#: netbox/ipam/forms/bulk_import.py:308 msgid "Parent device of assigned interface (if any)" msgstr "Родительское устройство назначенного интерфейса (если есть)" -#: ipam/forms/bulk_import.py:311 ipam/forms/bulk_import.py:488 -#: ipam/forms/model_forms.py:685 virtualization/filtersets.py:288 -#: virtualization/filtersets.py:327 virtualization/forms/bulk_edit.py:200 -#: virtualization/forms/bulk_edit.py:326 -#: virtualization/forms/bulk_import.py:146 -#: virtualization/forms/bulk_import.py:207 -#: virtualization/forms/filtersets.py:212 -#: virtualization/forms/filtersets.py:248 -#: virtualization/forms/model_forms.py:288 vpn/forms/bulk_import.py:93 -#: vpn/forms/bulk_import.py:290 +#: 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 "Виртуальная машина" -#: ipam/forms/bulk_import.py:315 +#: netbox/ipam/forms/bulk_import.py:315 msgid "Parent VM of assigned interface (if any)" msgstr "Родительская виртуальная машина назначенного интерфейса (если есть)" -#: ipam/forms/bulk_import.py:325 +#: netbox/ipam/forms/bulk_import.py:325 msgid "Is primary" msgstr "Является основным" -#: ipam/forms/bulk_import.py:326 +#: netbox/ipam/forms/bulk_import.py:326 msgid "Make this the primary IP for the assigned device" msgstr "Сделайте этот IP-адрес основным для назначенного устройства" -#: ipam/forms/bulk_import.py:365 +#: netbox/ipam/forms/bulk_import.py:330 +msgid "Is out-of-band" +msgstr "Внеполосный IP-адрес" + +#: 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" msgstr "" "Не указано устройство или виртуальная машина; невозможно установить в " "качестве основного IP-адреса" -#: ipam/forms/bulk_import.py:369 +#: 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" msgstr "" "Интерфейс не указан; невозможно установить в качестве основного IP-адреса" -#: ipam/forms/bulk_import.py:398 +#: 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" msgstr "Тип авторизации" -#: ipam/forms/bulk_import.py:413 +#: netbox/ipam/forms/bulk_import.py:437 msgid "Scope type (app & model)" msgstr "Тип прицела (приложение и модель)" -#: ipam/forms/bulk_import.py:440 +#: netbox/ipam/forms/bulk_import.py:464 msgid "Assigned VLAN group" msgstr "Назначенная VLAN группа" -#: ipam/forms/bulk_import.py:471 ipam/forms/bulk_import.py:497 +#: netbox/ipam/forms/bulk_import.py:495 netbox/ipam/forms/bulk_import.py:521 msgid "IP protocol" msgstr "протокол IP" -#: ipam/forms/bulk_import.py:485 +#: netbox/ipam/forms/bulk_import.py:509 msgid "Required if not assigned to a VM" msgstr "Требуется, если не назначено виртуальной машине" -#: ipam/forms/bulk_import.py:492 +#: netbox/ipam/forms/bulk_import.py:516 msgid "Required if not assigned to a device" msgstr "Требуется, если не назначено устройству" -#: ipam/forms/bulk_import.py:517 +#: netbox/ipam/forms/bulk_import.py:541 #, python-brace-format msgid "{ip} is not assigned to this device/VM." msgstr "{ip} не назначено этому устройству/виртуальной машине." -#: ipam/forms/filtersets.py:47 ipam/forms/model_forms.py:63 -#: netbox/navigation/menu.py:189 vpn/forms/model_forms.py:410 +#: 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 msgid "Route Targets" msgstr "Цели маршрута" -#: ipam/forms/filtersets.py:53 ipam/forms/model_forms.py:50 -#: vpn/forms/filtersets.py:224 vpn/forms/model_forms.py:397 +#: 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 msgid "Import targets" msgstr "Цели импорта" -#: ipam/forms/filtersets.py:58 ipam/forms/model_forms.py:55 -#: vpn/forms/filtersets.py:229 vpn/forms/model_forms.py:402 +#: 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 msgid "Export targets" msgstr "Экспортные цели" -#: ipam/forms/filtersets.py:73 +#: netbox/ipam/forms/filtersets.py:73 msgid "Imported by VRF" msgstr "Импортировано компанией VRF" -#: ipam/forms/filtersets.py:78 +#: netbox/ipam/forms/filtersets.py:78 msgid "Exported by VRF" msgstr "Экспортируется компанией VRF" -#: ipam/forms/filtersets.py:87 ipam/tables/ip.py:89 templates/ipam/rir.html:30 +#: netbox/ipam/forms/filtersets.py:87 netbox/ipam/tables/ip.py:89 +#: netbox/templates/ipam/rir.html:30 msgid "Private" msgstr "Частное" -#: ipam/forms/filtersets.py:105 ipam/forms/filtersets.py:191 -#: ipam/forms/filtersets.py:272 ipam/forms/filtersets.py:326 +#: netbox/ipam/forms/filtersets.py:105 netbox/ipam/forms/filtersets.py:191 +#: netbox/ipam/forms/filtersets.py:272 netbox/ipam/forms/filtersets.py:326 msgid "Address family" msgstr "Семейство адресов" -#: ipam/forms/filtersets.py:119 templates/ipam/asnrange.html:25 +#: netbox/ipam/forms/filtersets.py:119 netbox/templates/ipam/asnrange.html:25 msgid "Range" msgstr "Диапозон" -#: ipam/forms/filtersets.py:128 +#: netbox/ipam/forms/filtersets.py:128 msgid "Start" msgstr "Начало" -#: ipam/forms/filtersets.py:132 +#: netbox/ipam/forms/filtersets.py:132 msgid "End" msgstr "Конец" -#: ipam/forms/filtersets.py:186 +#: netbox/ipam/forms/filtersets.py:186 msgid "Search within" msgstr "Поиск внутри" -#: ipam/forms/filtersets.py:207 ipam/forms/filtersets.py:342 +#: netbox/ipam/forms/filtersets.py:207 netbox/ipam/forms/filtersets.py:342 msgid "Present in VRF" msgstr "Присутствует в VRF" -#: ipam/forms/filtersets.py:311 +#: netbox/ipam/forms/filtersets.py:311 msgid "Device/VM" msgstr "Устройство/виртуальная машина" -#: ipam/forms/filtersets.py:321 +#: netbox/ipam/forms/filtersets.py:321 msgid "Parent Prefix" msgstr "Родительский префикс" -#: ipam/forms/filtersets.py:347 +#: netbox/ipam/forms/filtersets.py:347 msgid "Assigned Device" msgstr "Назначенное устройство" -#: ipam/forms/filtersets.py:352 +#: netbox/ipam/forms/filtersets.py:352 msgid "Assigned VM" msgstr "Назначенная виртуальная машина" -#: ipam/forms/filtersets.py:366 +#: netbox/ipam/forms/filtersets.py:366 msgid "Assigned to an interface" msgstr "Назначено интерфейсу" -#: ipam/forms/filtersets.py:373 templates/ipam/ipaddress.html:51 +#: netbox/ipam/forms/filtersets.py:373 netbox/templates/ipam/ipaddress.html:51 msgid "DNS Name" msgstr "DNS-имя" -#: ipam/forms/filtersets.py:416 ipam/models/vlans.py:235 ipam/tables/ip.py:176 -#: ipam/tables/vlans.py:82 ipam/views.py:971 netbox/navigation/menu.py:193 -#: netbox/navigation/menu.py:195 +#: 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 msgid "VLANs" -msgstr "VLAN" +msgstr "VLAN-ы" -#: ipam/forms/filtersets.py:457 +#: netbox/ipam/forms/filtersets.py:457 msgid "Contains VLAN ID" msgstr "Содержит идентификатор VLAN" -#: ipam/forms/filtersets.py:513 ipam/models/vlans.py:176 -#: templates/ipam/vlan.html:31 +#: netbox/ipam/forms/filtersets.py:513 netbox/ipam/models/vlans.py:192 +#: netbox/templates/ipam/vlan.html:31 msgid "VLAN ID" msgstr "VLAN ID" -#: ipam/forms/filtersets.py:556 ipam/forms/model_forms.py:320 -#: ipam/forms/model_forms.py:713 ipam/forms/model_forms.py:739 -#: ipam/tables/vlans.py:195 templates/virtualization/virtualdisk.html:21 -#: templates/virtualization/virtualmachine.html:12 -#: templates/virtualization/vminterface.html:21 -#: templates/vpn/tunneltermination.html:25 -#: virtualization/forms/filtersets.py:197 -#: virtualization/forms/filtersets.py:242 -#: virtualization/forms/model_forms.py:220 -#: virtualization/tables/virtualmachines.py:135 -#: virtualization/tables/virtualmachines.py:190 vpn/choices.py:45 -#: vpn/forms/filtersets.py:293 vpn/forms/model_forms.py:160 -#: vpn/forms/model_forms.py:171 vpn/forms/model_forms.py:273 -#: vpn/forms/model_forms.py:454 +#: netbox/ipam/forms/filtersets.py: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 "Виртуальная машина" -#: ipam/forms/model_forms.py:80 templates/ipam/routetarget.html:10 +#: netbox/ipam/forms/model_forms.py:80 +#: netbox/templates/ipam/routetarget.html:10 msgid "Route Target" msgstr "Цель маршрута" -#: ipam/forms/model_forms.py:114 ipam/tables/ip.py:117 -#: templates/ipam/aggregate.html:11 templates/ipam/prefix.html:38 +#: netbox/ipam/forms/model_forms.py:114 netbox/ipam/tables/ip.py:117 +#: netbox/templates/ipam/aggregate.html:11 +#: netbox/templates/ipam/prefix.html:38 msgid "Aggregate" msgstr "агрегат" -#: ipam/forms/model_forms.py:135 templates/ipam/asnrange.html:12 +#: netbox/ipam/forms/model_forms.py:135 netbox/templates/ipam/asnrange.html:12 msgid "ASN Range" msgstr "Диапазон ASN" -#: ipam/forms/model_forms.py:231 +#: netbox/ipam/forms/model_forms.py:231 msgid "Site/VLAN Assignment" msgstr "Назначение сайта/VLAN" -#: ipam/forms/model_forms.py:259 templates/ipam/iprange.html:10 +#: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10 msgid "IP Range" msgstr "Диапазон IP-адресов" -#: ipam/forms/model_forms.py:295 ipam/forms/model_forms.py:321 -#: ipam/forms/model_forms.py:473 templates/ipam/fhrpgroup.html:19 +#: 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 msgid "FHRP Group" msgstr "Группа компаний FHRP" -#: ipam/forms/model_forms.py:310 +#: netbox/ipam/forms/model_forms.py:310 msgid "Make this the primary IP for the device/VM" msgstr "Сделайте этот IP-адрес основным для устройства/виртуальной машины" -#: ipam/forms/model_forms.py:325 +#: netbox/ipam/forms/model_forms.py:314 +msgid "Make this the out-of-band IP for the device" +msgstr "Назначить внеполосным IP-адресом устройства" + +#: netbox/ipam/forms/model_forms.py:329 msgid "NAT IP (Inside)" msgstr "IP-адрес NAT (внутренний)" -#: ipam/forms/model_forms.py:384 +#: netbox/ipam/forms/model_forms.py:391 msgid "An IP address can only be assigned to a single object." msgstr "IP-адрес можно присвоить только одному объекту." -#: ipam/forms/model_forms.py:390 ipam/models/ip.py:897 -msgid "" -"Cannot reassign IP address while it is designated as the primary IP for the " -"parent object" +#: netbox/ipam/forms/model_forms.py:398 +msgid "Cannot reassign primary IP address for the parent device/VM" msgstr "" -"Невозможно переназначить IP-адрес, если он назначен основным IP-адресом " -"родительского объекта" +"Невозможно переназначить основной IP-адрес родительского " +"устройства/виртуальной машины" -#: ipam/forms/model_forms.py:400 +#: 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 "" "Only IP addresses assigned to an interface can be designated as primary IPs." msgstr "" "В качестве основных IP-адресов можно назначить только IP-адреса, назначенные" " интерфейсу." -#: ipam/forms/model_forms.py:475 +#: netbox/ipam/forms/model_forms.py:420 +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" msgstr "Виртуальный IP-адрес" -#: ipam/forms/model_forms.py:560 +#: netbox/ipam/forms/model_forms.py:593 msgid "Assignment already exists" msgstr "Задание уже существует" -#: ipam/forms/model_forms.py:569 templates/ipam/vlangroup.html:42 +#: netbox/ipam/forms/model_forms.py:602 +#: netbox/templates/ipam/vlangroup.html:42 msgid "VLAN IDs" msgstr "Идентификаторы VLAN" -#: ipam/forms/model_forms.py:587 +#: netbox/ipam/forms/model_forms.py:620 msgid "Child VLANs" msgstr "Дочерние VLAN" -#: ipam/forms/model_forms.py:664 ipam/forms/model_forms.py:696 +#: netbox/ipam/forms/model_forms.py:697 netbox/ipam/forms/model_forms.py:729 msgid "" "Comma-separated list of one or more port numbers. A range may be specified " "using a hyphen." @@ -9277,133 +9942,134 @@ msgstr "" "Список одного или нескольких номеров портов, разделенных запятыми. Диапазон " "можно указать с помощью дефиса." -#: ipam/forms/model_forms.py:669 templates/ipam/servicetemplate.html:12 +#: netbox/ipam/forms/model_forms.py:702 +#: netbox/templates/ipam/servicetemplate.html:12 msgid "Service Template" msgstr "Шаблон Службы" -#: ipam/forms/model_forms.py:716 +#: netbox/ipam/forms/model_forms.py:749 msgid "Port(s)" msgstr "Порт(ы)" -#: ipam/forms/model_forms.py:717 ipam/forms/model_forms.py:745 -#: templates/ipam/service.html:21 +#: netbox/ipam/forms/model_forms.py:750 netbox/ipam/forms/model_forms.py:778 +#: netbox/templates/ipam/service.html:21 msgid "Service" msgstr "Служба" -#: ipam/forms/model_forms.py:730 +#: netbox/ipam/forms/model_forms.py:763 msgid "Service template" msgstr "Шаблон службы" -#: ipam/forms/model_forms.py:742 +#: netbox/ipam/forms/model_forms.py:775 msgid "From Template" msgstr "Из шаблона" -#: ipam/forms/model_forms.py:743 +#: netbox/ipam/forms/model_forms.py:776 msgid "Custom" msgstr "Настраиваемый" -#: ipam/forms/model_forms.py:773 +#: netbox/ipam/forms/model_forms.py:806 msgid "" "Must specify name, protocol, and port(s) if not using a service template." msgstr "" "Если шаблон сервиса не используется, необходимо указать имя, протокол и порт" " (порты)." -#: ipam/models/asns.py:34 +#: netbox/ipam/models/asns.py:34 msgid "start" msgstr "старт" -#: ipam/models/asns.py:51 +#: netbox/ipam/models/asns.py:51 msgid "ASN range" msgstr "Диапазон ASN" -#: ipam/models/asns.py:52 +#: netbox/ipam/models/asns.py:52 msgid "ASN ranges" msgstr "Диапазоны ASN" -#: ipam/models/asns.py:72 +#: netbox/ipam/models/asns.py:72 #, python-brace-format msgid "Starting ASN ({start}) must be lower than ending ASN ({end})." msgstr "Запуск ASN ({start}) должно быть меньше, чем конечный ASN ({end})." -#: ipam/models/asns.py:104 +#: netbox/ipam/models/asns.py:104 msgid "Regional Internet Registry responsible for this AS number space" msgstr "" "Региональный интернет-реестр, отвечающий за это номерное пространство AS" -#: ipam/models/asns.py:109 +#: netbox/ipam/models/asns.py:109 msgid "16- or 32-bit autonomous system number" msgstr "16- или 32-разрядный номер автономной системы" -#: ipam/models/fhrp.py:22 +#: netbox/ipam/models/fhrp.py:22 msgid "group ID" msgstr "идентификатор группы" -#: ipam/models/fhrp.py:30 ipam/models/services.py:22 +#: netbox/ipam/models/fhrp.py:30 netbox/ipam/models/services.py:22 msgid "protocol" msgstr "протокол" -#: ipam/models/fhrp.py:38 wireless/models.py:28 +#: netbox/ipam/models/fhrp.py:38 netbox/wireless/models.py:28 msgid "authentication type" msgstr "тип аутентификации" -#: ipam/models/fhrp.py:43 +#: netbox/ipam/models/fhrp.py:43 msgid "authentication key" msgstr "ключ аутентификации" -#: ipam/models/fhrp.py:56 +#: netbox/ipam/models/fhrp.py:56 msgid "FHRP group" msgstr "Группа FHRP" -#: ipam/models/fhrp.py:57 +#: netbox/ipam/models/fhrp.py:57 msgid "FHRP groups" msgstr "Группы FHRP" -#: ipam/models/fhrp.py:113 +#: netbox/ipam/models/fhrp.py:113 msgid "FHRP group assignment" msgstr "Групповое назначение FHRP" -#: ipam/models/fhrp.py:114 +#: netbox/ipam/models/fhrp.py:114 msgid "FHRP group assignments" msgstr "Групповые задания FHRP" -#: ipam/models/ip.py:65 +#: netbox/ipam/models/ip.py:65 msgid "private" msgstr "частного" -#: ipam/models/ip.py:66 +#: netbox/ipam/models/ip.py:66 msgid "IP space managed by this RIR is considered private" msgstr "IP-пространство, управляемое этим RIR, считается частным" -#: ipam/models/ip.py:72 netbox/navigation/menu.py:182 +#: netbox/ipam/models/ip.py:72 netbox/netbox/navigation/menu.py:182 msgid "RIRs" msgstr "RIR's" -#: ipam/models/ip.py:84 +#: netbox/ipam/models/ip.py:84 msgid "IPv4 or IPv6 network" msgstr "Сеть IPv4 или IPv6" -#: ipam/models/ip.py:91 +#: netbox/ipam/models/ip.py:91 msgid "Regional Internet Registry responsible for this IP space" msgstr "Региональный реестр Интернета, отвечающий за это IP-пространство" -#: ipam/models/ip.py:101 +#: netbox/ipam/models/ip.py:101 msgid "date added" msgstr "дата добавления" -#: ipam/models/ip.py:115 +#: netbox/ipam/models/ip.py:115 msgid "aggregate" msgstr "совокупный" -#: ipam/models/ip.py:116 +#: netbox/ipam/models/ip.py:116 msgid "aggregates" msgstr "сводные показатели" -#: ipam/models/ip.py:132 +#: netbox/ipam/models/ip.py:132 msgid "Cannot create aggregate with /0 mask." msgstr "Невозможно создать агрегат с маской /0." -#: ipam/models/ip.py:144 +#: netbox/ipam/models/ip.py:144 #, python-brace-format msgid "" "Aggregates cannot overlap. {prefix} is already covered by an existing " @@ -9412,7 +10078,7 @@ msgstr "" "Агрегаты не могут перекрываться. {prefix} уже покрывается существующим " "агрегатом ({aggregate})." -#: ipam/models/ip.py:158 +#: netbox/ipam/models/ip.py:158 #, python-brace-format msgid "" "Prefixes cannot overlap aggregates. {prefix} covers an existing aggregate " @@ -9421,253 +10087,277 @@ msgstr "" "Префиксы не могут перекрывать агрегаты. {prefix} охватывает существующий " "агрегат ({aggregate})." -#: ipam/models/ip.py:200 ipam/models/ip.py:737 vpn/models/tunnels.py:114 +#: netbox/ipam/models/ip.py:200 netbox/ipam/models/ip.py:737 +#: netbox/vpn/models/tunnels.py:114 msgid "role" msgstr "роль" -#: ipam/models/ip.py:201 +#: netbox/ipam/models/ip.py:201 msgid "roles" msgstr "ролей" -#: ipam/models/ip.py:217 ipam/models/ip.py:293 +#: netbox/ipam/models/ip.py:217 netbox/ipam/models/ip.py:293 msgid "prefix" msgstr "префикс" -#: ipam/models/ip.py:218 +#: netbox/ipam/models/ip.py:218 msgid "IPv4 or IPv6 network with mask" msgstr "Сеть IPv4 или IPv6 с маской" -#: ipam/models/ip.py:254 +#: netbox/ipam/models/ip.py:254 msgid "Operational status of this prefix" msgstr "Рабочий статус этого префикса" -#: ipam/models/ip.py:262 +#: netbox/ipam/models/ip.py:262 msgid "The primary function of this prefix" msgstr "Основная функция этого префикса" -#: ipam/models/ip.py:265 +#: netbox/ipam/models/ip.py:265 msgid "is a pool" msgstr "это пул" -#: ipam/models/ip.py:267 +#: netbox/ipam/models/ip.py:267 msgid "All IP addresses within this prefix are considered usable" msgstr "Все IP-адреса в этом префиксе считаются пригодными для использования" -#: ipam/models/ip.py:270 ipam/models/ip.py:537 +#: netbox/ipam/models/ip.py:270 netbox/ipam/models/ip.py:537 msgid "mark utilized" msgstr "использованная марка" -#: ipam/models/ip.py:294 +#: netbox/ipam/models/ip.py:294 msgid "prefixes" msgstr "префиксы" -#: ipam/models/ip.py:317 +#: netbox/ipam/models/ip.py:317 msgid "Cannot create prefix with /0 mask." msgstr "Невозможно создать префикс с маской /0." -#: ipam/models/ip.py:324 ipam/models/ip.py:874 +#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:874 #, python-brace-format msgid "VRF {vrf}" msgstr "VRF {vrf}" -#: ipam/models/ip.py:324 ipam/models/ip.py:874 +#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:874 msgid "global table" msgstr "глобальная таблица" -#: ipam/models/ip.py:326 +#: netbox/ipam/models/ip.py:326 #, python-brace-format msgid "Duplicate prefix found in {table}: {prefix}" msgstr "Дубликат префикса обнаружен в {table}: {prefix}" -#: ipam/models/ip.py:495 +#: netbox/ipam/models/ip.py:495 msgid "start address" msgstr "начальный адрес" -#: ipam/models/ip.py:496 ipam/models/ip.py:500 ipam/models/ip.py:712 +#: netbox/ipam/models/ip.py:496 netbox/ipam/models/ip.py:500 +#: netbox/ipam/models/ip.py:712 msgid "IPv4 or IPv6 address (with mask)" msgstr "Адрес IPv4 или IPv6 (с маской)" -#: ipam/models/ip.py:499 +#: netbox/ipam/models/ip.py:499 msgid "end address" msgstr "конечный адрес" -#: ipam/models/ip.py:526 +#: netbox/ipam/models/ip.py:526 msgid "Operational status of this range" msgstr "Эксплуатационное состояние этой линейки" -#: ipam/models/ip.py:534 +#: netbox/ipam/models/ip.py:534 msgid "The primary function of this range" msgstr "Основная функция этого диапазона" -#: ipam/models/ip.py:548 +#: netbox/ipam/models/ip.py:548 msgid "IP range" msgstr "Диапазон IP-адресов" -#: ipam/models/ip.py:549 +#: netbox/ipam/models/ip.py:549 msgid "IP ranges" msgstr "Диапазоны IP-адресов" -#: ipam/models/ip.py:565 +#: netbox/ipam/models/ip.py:565 msgid "Starting and ending IP address versions must match" msgstr "Начальная и конечная версии IP-адресов должны совпадать" -#: ipam/models/ip.py:571 +#: netbox/ipam/models/ip.py:571 msgid "Starting and ending IP address masks must match" msgstr "Маски начального и конечного IP-адресов должны совпадать" -#: ipam/models/ip.py:578 +#: netbox/ipam/models/ip.py:578 #, python-brace-format msgid "" "Ending address must be greater than the starting address ({start_address})" msgstr "Конечный адрес должен быть больше начального адреса ({start_address})" -#: ipam/models/ip.py:590 +#: netbox/ipam/models/ip.py:590 #, python-brace-format msgid "Defined addresses overlap with range {overlapping_range} in VRF {vrf}" msgstr "" "Определенные адреса пересекаются с диапазоном {overlapping_range} в формате " "VRF {vrf}" -#: ipam/models/ip.py:599 +#: netbox/ipam/models/ip.py:599 #, python-brace-format msgid "Defined range exceeds maximum supported size ({max_size})" msgstr "" "Заданный диапазон превышает максимальный поддерживаемый размер ({max_size})" -#: ipam/models/ip.py:711 tenancy/models/contacts.py:82 +#: netbox/ipam/models/ip.py:711 netbox/tenancy/models/contacts.py:82 msgid "address" msgstr "адрес" -#: ipam/models/ip.py:734 +#: netbox/ipam/models/ip.py:734 msgid "The operational status of this IP" msgstr "Рабочий статус этого IP-адреса" -#: ipam/models/ip.py:741 +#: netbox/ipam/models/ip.py:741 msgid "The functional role of this IP" msgstr "Функциональная роль этого IP" -#: ipam/models/ip.py:765 templates/ipam/ipaddress.html:72 +#: netbox/ipam/models/ip.py:765 netbox/templates/ipam/ipaddress.html:72 msgid "NAT (inside)" msgstr "NAT (внутри)" -#: ipam/models/ip.py:766 +#: netbox/ipam/models/ip.py:766 msgid "The IP for which this address is the \"outside\" IP" msgstr "IP-адрес, для которого этот адрес является «внешним»" -#: ipam/models/ip.py:773 +#: netbox/ipam/models/ip.py:773 msgid "Hostname or FQDN (not case-sensitive)" msgstr "Имя хоста или полное доменное имя (регистр не учитывается)" -#: ipam/models/ip.py:789 ipam/models/services.py:94 +#: netbox/ipam/models/ip.py:789 netbox/ipam/models/services.py:94 msgid "IP addresses" msgstr "IP-адреса" -#: ipam/models/ip.py:845 +#: netbox/ipam/models/ip.py:845 msgid "Cannot create IP address with /0 mask." msgstr "Невозможно создать IP-адрес с маской /0." -#: ipam/models/ip.py:851 +#: netbox/ipam/models/ip.py:851 #, python-brace-format msgid "{ip} is a network ID, which may not be assigned to an interface." msgstr "" "{ip} это идентификатор сети, который не может быть присвоен интерфейсу." -#: ipam/models/ip.py:862 +#: netbox/ipam/models/ip.py:862 #, python-brace-format msgid "" "{ip} is a broadcast address, which may not be assigned to an interface." msgstr "" "{ip} это широковещательный адрес, который может не быть присвоен интерфейсу." -#: ipam/models/ip.py:876 +#: netbox/ipam/models/ip.py:876 #, python-brace-format msgid "Duplicate IP address found in {table}: {ipaddress}" msgstr "Дубликат IP-адреса обнаружен в {table}: {ipaddress}" -#: ipam/models/ip.py:903 +#: netbox/ipam/models/ip.py:897 +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 msgid "Only IPv6 addresses can be assigned SLAAC status" msgstr "Только адресам IPv6 можно присвоить статус SLAAC" -#: ipam/models/services.py:33 +#: netbox/ipam/models/services.py:33 msgid "port numbers" msgstr "номера портов" -#: ipam/models/services.py:59 +#: netbox/ipam/models/services.py:59 msgid "service template" msgstr "шаблон службы" -#: ipam/models/services.py:60 +#: netbox/ipam/models/services.py:60 msgid "service templates" msgstr "шаблоны служб" -#: ipam/models/services.py:95 +#: netbox/ipam/models/services.py:95 msgid "The specific IP addresses (if any) to which this service is bound" msgstr "Конкретные IP-адреса (если есть), к которым привязана эта служба" -#: ipam/models/services.py:102 +#: netbox/ipam/models/services.py:102 msgid "service" msgstr "служба" -#: ipam/models/services.py:103 +#: netbox/ipam/models/services.py:103 msgid "services" msgstr "службы" -#: ipam/models/services.py:117 +#: netbox/ipam/models/services.py:117 msgid "" "A service cannot be associated with both a device and a virtual machine." msgstr "Службу нельзя связать как с устройством, так и с виртуальной машиной." -#: ipam/models/services.py:119 +#: netbox/ipam/models/services.py:119 msgid "" "A service must be associated with either a device or a virtual machine." msgstr "Служба должна быть связана с устройством или виртуальной машиной." -#: ipam/models/vlans.py:85 +#: netbox/ipam/models/vlans.py:85 msgid "VLAN groups" msgstr "Группы VLAN" -#: ipam/models/vlans.py:95 +#: netbox/ipam/models/vlans.py:95 msgid "Cannot set scope_type without scope_id." msgstr "Невозможно установить scope_type без scope_id." -#: ipam/models/vlans.py:97 +#: netbox/ipam/models/vlans.py:97 msgid "Cannot set scope_id without scope_type." msgstr "Невозможно установить scope_id без scope_type." -#: ipam/models/vlans.py:101 +#: netbox/ipam/models/vlans.py:105 +#, 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 +#, python-brace-format +msgid "Ending VLAN ID in range ({value}) cannot exceed {maximum}" +msgstr "" +"Последний идентификатор VLAN в диапазоне ({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 "" +"Последний идентификатор VLAN в диапазоне должен быть больше или равен " +"начальному идентификатору VLAN ({range})" + +#: netbox/ipam/models/vlans.py:124 msgid "Ranges cannot overlap." msgstr "Диапазоны не могут перекрываться." -#: ipam/models/vlans.py:106 -#, python-brace-format -msgid "" -"Maximum child VID must be greater than or equal to minimum child VID " -"({value})" -msgstr "" -"Максимальное количество детских VID должно быть больше или равно " -"минимальному детскому VID ({value})" - -#: ipam/models/vlans.py:165 +#: netbox/ipam/models/vlans.py:181 msgid "The specific site to which this VLAN is assigned (if any)" msgstr "Конкретный сайт, которому назначена эта VLAN (если есть)" -#: ipam/models/vlans.py:173 +#: netbox/ipam/models/vlans.py:189 msgid "VLAN group (optional)" msgstr "Группа VLAN (опционально)" -#: ipam/models/vlans.py:181 +#: netbox/ipam/models/vlans.py:197 msgid "Numeric VLAN ID (1-4094)" msgstr "Цифровой VLAN ID (1-4094)" -#: ipam/models/vlans.py:199 +#: netbox/ipam/models/vlans.py:215 msgid "Operational status of this VLAN" msgstr "Рабочее состояние этой VLAN" -#: ipam/models/vlans.py:207 +#: netbox/ipam/models/vlans.py:223 msgid "The primary function of this VLAN" msgstr "Основная функция этой VLAN" -#: ipam/models/vlans.py:250 +#: netbox/ipam/models/vlans.py:266 #, python-brace-format msgid "" "VLAN is assigned to group {group} (scope: {scope}); cannot also assign to " @@ -9676,167 +10366,169 @@ msgstr "" "VLAN назначена группе {group} (область применения: {scope}); также не может " "быть присвоено сайту {site}." -#: ipam/models/vlans.py:259 +#: netbox/ipam/models/vlans.py:275 #, python-brace-format msgid "VID must be in ranges {ranges} for VLANs in group {group}" msgstr "" "VID должен быть в диапазонах {ranges} для виртуальных локальных сетей в " "группе {group}" -#: ipam/models/vrfs.py:30 +#: netbox/ipam/models/vrfs.py:30 msgid "route distinguisher" msgstr "разграничитель маршрута" -#: ipam/models/vrfs.py:31 +#: netbox/ipam/models/vrfs.py:31 msgid "Unique route distinguisher (as defined in RFC 4364)" msgstr "Уникальный отличитель маршрута (как определено в RFC 4364)" -#: ipam/models/vrfs.py:42 +#: netbox/ipam/models/vrfs.py:42 msgid "enforce unique space" msgstr "создайте уникальное пространство" -#: ipam/models/vrfs.py:43 +#: netbox/ipam/models/vrfs.py:43 msgid "Prevent duplicate prefixes/IP addresses within this VRF" msgstr "Предотвращение дублирования префиксов/IP-адресов в этом VRF" -#: ipam/models/vrfs.py:63 netbox/navigation/menu.py:186 -#: netbox/navigation/menu.py:188 +#: netbox/ipam/models/vrfs.py:63 netbox/netbox/navigation/menu.py:186 +#: netbox/netbox/navigation/menu.py:188 msgid "VRFs" msgstr "VRF" -#: ipam/models/vrfs.py:82 +#: netbox/ipam/models/vrfs.py:82 msgid "Route target value (formatted in accordance with RFC 4360)" msgstr "Целевое значение маршрута (отформатировано в соответствии с RFC 4360)" -#: ipam/models/vrfs.py:94 +#: netbox/ipam/models/vrfs.py:94 msgid "route target" msgstr "цель маршрута" -#: ipam/models/vrfs.py:95 +#: netbox/ipam/models/vrfs.py:95 msgid "route targets" msgstr "цели маршрута" -#: ipam/tables/asn.py:52 +#: netbox/ipam/tables/asn.py:52 msgid "ASDOT" msgstr "АСДОТ" -#: ipam/tables/asn.py:57 +#: netbox/ipam/tables/asn.py:57 msgid "Site Count" msgstr "Количество сайтов" -#: ipam/tables/asn.py:62 +#: netbox/ipam/tables/asn.py:62 msgid "Provider Count" msgstr "Количество провайдеров" -#: ipam/tables/ip.py:95 netbox/navigation/menu.py:179 -#: netbox/navigation/menu.py:181 +#: netbox/ipam/tables/ip.py:95 netbox/netbox/navigation/menu.py:179 +#: netbox/netbox/navigation/menu.py:181 msgid "Aggregates" msgstr "Агрегаты" -#: ipam/tables/ip.py:125 +#: netbox/ipam/tables/ip.py:125 msgid "Added" msgstr "Добавлено" -#: ipam/tables/ip.py:128 ipam/tables/ip.py:166 ipam/tables/vlans.py:142 -#: ipam/views.py:346 netbox/navigation/menu.py:165 -#: netbox/navigation/menu.py:167 templates/ipam/vlan.html:84 +#: 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 msgid "Prefixes" msgstr "Префиксы" -#: ipam/tables/ip.py:131 ipam/tables/ip.py:270 ipam/tables/ip.py:324 -#: ipam/tables/vlans.py:86 templates/dcim/device.html:260 -#: templates/ipam/aggregate.html:24 templates/ipam/iprange.html:29 -#: templates/ipam/prefix.html:106 +#: 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/templates/dcim/device.html:260 +#: netbox/templates/ipam/aggregate.html:24 +#: netbox/templates/ipam/iprange.html:29 netbox/templates/ipam/prefix.html:106 msgid "Utilization" msgstr "Использование" -#: ipam/tables/ip.py:171 netbox/navigation/menu.py:161 +#: netbox/ipam/tables/ip.py:171 netbox/netbox/navigation/menu.py:161 msgid "IP Ranges" msgstr "Диапазоны IP-адресов" -#: ipam/tables/ip.py:221 +#: netbox/ipam/tables/ip.py:221 msgid "Prefix (Flat)" msgstr "Префикс (плоский)" -#: ipam/tables/ip.py:225 +#: netbox/ipam/tables/ip.py:225 msgid "Depth" msgstr "Глубина" -#: ipam/tables/ip.py:262 +#: netbox/ipam/tables/ip.py:262 msgid "Pool" msgstr "Пул" -#: ipam/tables/ip.py:266 ipam/tables/ip.py:320 +#: netbox/ipam/tables/ip.py:266 netbox/ipam/tables/ip.py:320 msgid "Marked Utilized" msgstr "Отмечено как использованный" -#: ipam/tables/ip.py:304 +#: netbox/ipam/tables/ip.py:304 msgid "Start address" msgstr "Начальный адрес" -#: ipam/tables/ip.py:383 +#: netbox/ipam/tables/ip.py:383 msgid "NAT (Inside)" msgstr "NAT (внутри)" -#: ipam/tables/ip.py:388 +#: netbox/ipam/tables/ip.py:388 msgid "NAT (Outside)" msgstr "NAT (за пределами сети)" -#: ipam/tables/ip.py:393 +#: netbox/ipam/tables/ip.py:393 msgid "Assigned" msgstr "Назначено" -#: ipam/tables/ip.py:429 templates/vpn/l2vpntermination.html:16 -#: vpn/forms/filtersets.py:240 +#: netbox/ipam/tables/ip.py:429 netbox/templates/vpn/l2vpntermination.html:16 +#: netbox/vpn/forms/filtersets.py:240 msgid "Assigned Object" msgstr "Назначенный объект" -#: ipam/tables/vlans.py:68 +#: netbox/ipam/tables/vlans.py:68 msgid "Scope Type" msgstr "Тип прицела" -#: ipam/tables/vlans.py:76 +#: netbox/ipam/tables/vlans.py:76 msgid "VID Ranges" msgstr "Диапазоны VID" -#: ipam/tables/vlans.py:111 ipam/tables/vlans.py:214 -#: templates/dcim/inc/interface_vlans_table.html:4 +#: netbox/ipam/tables/vlans.py:111 netbox/ipam/tables/vlans.py:214 +#: netbox/templates/dcim/inc/interface_vlans_table.html:4 msgid "VID" msgstr "VID" -#: ipam/tables/vrfs.py:30 +#: netbox/ipam/tables/vrfs.py:30 msgid "RD" msgstr "КРАСНЫЙ" -#: ipam/tables/vrfs.py:33 +#: netbox/ipam/tables/vrfs.py:33 msgid "Unique" msgstr "Уникальный" -#: ipam/tables/vrfs.py:37 vpn/tables/l2vpn.py:27 +#: netbox/ipam/tables/vrfs.py:37 netbox/vpn/tables/l2vpn.py:27 msgid "Import Targets" msgstr "Цели импорта" -#: ipam/tables/vrfs.py:42 vpn/tables/l2vpn.py:32 +#: netbox/ipam/tables/vrfs.py:42 netbox/vpn/tables/l2vpn.py:32 msgid "Export Targets" msgstr "Цели экспорта" -#: ipam/validators.py:9 +#: netbox/ipam/validators.py:9 #, python-brace-format msgid "{prefix} is not a valid prefix. Did you mean {suggested}?" msgstr "" "{prefix} не является допустимым префиксом. Вы имели в виду {suggested}?" -#: ipam/validators.py:16 +#: netbox/ipam/validators.py:16 #, python-format msgid "The prefix length must be less than or equal to %(limit_value)s." msgstr "Длина префикса должна быть меньше или равна %(limit_value)s." -#: ipam/validators.py:24 +#: netbox/ipam/validators.py:24 #, python-format msgid "The prefix length must be greater than or equal to %(limit_value)s." msgstr "Длина префикса должна быть больше или равна %(limit_value)s." -#: ipam/validators.py:33 +#: netbox/ipam/validators.py:33 msgid "" "Only alphanumeric characters, asterisks, hyphens, periods, and underscores " "are allowed in DNS names" @@ -9844,31 +10536,31 @@ msgstr "" "В именах DNS разрешены только буквенно-цифровые символы, звездочки, дефисы, " "точки и символы подчеркивания" -#: ipam/views.py:533 +#: netbox/ipam/views.py:533 msgid "Child Prefixes" msgstr "Дочерние префиксы" -#: ipam/views.py:569 +#: netbox/ipam/views.py:569 msgid "Child Ranges" msgstr "Детские диапазоны" -#: ipam/views.py:898 +#: netbox/ipam/views.py:898 msgid "Related IPs" msgstr "Связанные IP-адреса" -#: ipam/views.py:1127 +#: netbox/ipam/views.py:1127 msgid "Device Interfaces" msgstr "Интерфейсы устройств" -#: ipam/views.py:1145 +#: netbox/ipam/views.py:1145 msgid "VM Interfaces" msgstr "Интерфейсы виртуальных машин" -#: netbox/api/fields.py:65 +#: netbox/netbox/api/fields.py:65 msgid "This field may not be blank." msgstr "Это поле не может быть пустым." -#: netbox/api/fields.py:70 +#: netbox/netbox/api/fields.py:70 msgid "" "Value must be passed directly (e.g. \"foo\": 123); do not use a dictionary " "or list." @@ -9876,331 +10568,344 @@ msgstr "" "Значение должно быть передано напрямую (например, «foo»: 123); не " "используйте словарь или список." -#: netbox/api/fields.py:91 +#: netbox/netbox/api/fields.py:91 #, python-brace-format msgid "{value} is not a valid choice." msgstr "{value} не является правильным выбором." -#: netbox/api/fields.py:104 +#: netbox/netbox/api/fields.py:104 #, python-brace-format msgid "Invalid content type: {content_type}" msgstr "Неверный тип контента: {content_type}" -#: netbox/api/fields.py:105 +#: netbox/netbox/api/fields.py:105 msgid "Invalid value. Specify a content type as '.'." msgstr "" "Неверное значение. Укажите тип контента как '.'." -#: netbox/api/fields.py:167 +#: netbox/netbox/api/fields.py:167 msgid "Ranges must be specified in the form (lower, upper)." msgstr "В форме должны быть указаны диапазоны (нижний, верхний)." -#: netbox/api/fields.py:169 +#: netbox/netbox/api/fields.py:169 msgid "Range boundaries must be defined as integers." msgstr "Границы диапазона должны быть определены целыми числами." -#: netbox/api/serializers/fields.py:40 +#: netbox/netbox/api/serializers/fields.py:40 #, python-brace-format msgid "{class_name} must implement get_view_name()" msgstr "{class_name} должен реализовать функцию get_view_name ()" -#: netbox/authentication/__init__.py:138 +#: netbox/netbox/authentication/__init__.py:138 #, python-brace-format msgid "Invalid permission {permission} for model {model}" msgstr "Неверное разрешение {permission} для модели {model}" -#: netbox/choices.py:49 +#: netbox/netbox/choices.py:49 msgid "Dark Red" msgstr "Темно-красный" -#: netbox/choices.py:52 +#: netbox/netbox/choices.py:52 msgid "Rose" msgstr "Роза" -#: netbox/choices.py:53 +#: netbox/netbox/choices.py:53 msgid "Fuchsia" msgstr "Фуксия" -#: netbox/choices.py:55 +#: netbox/netbox/choices.py:55 msgid "Dark Purple" msgstr "Темно-фиолетовый" -#: netbox/choices.py:58 +#: netbox/netbox/choices.py:58 msgid "Light Blue" msgstr "Светло-синий" -#: netbox/choices.py:61 +#: netbox/netbox/choices.py:61 msgid "Aqua" msgstr "Бирюзовый" -#: netbox/choices.py:62 +#: netbox/netbox/choices.py:62 msgid "Dark Green" msgstr "Темно-зеленый" -#: netbox/choices.py:64 +#: netbox/netbox/choices.py:64 msgid "Light Green" msgstr "Светло-зеленый" -#: netbox/choices.py:65 +#: netbox/netbox/choices.py:65 msgid "Lime" msgstr "Лайм" -#: netbox/choices.py:67 +#: netbox/netbox/choices.py:67 msgid "Amber" msgstr "Янтарь" -#: netbox/choices.py:69 +#: netbox/netbox/choices.py:69 msgid "Dark Orange" msgstr "Темно-оранжевый" -#: netbox/choices.py:70 +#: netbox/netbox/choices.py:70 msgid "Brown" msgstr "Коричневый" -#: netbox/choices.py:71 +#: netbox/netbox/choices.py:71 msgid "Light Grey" msgstr "Светло-серый" -#: netbox/choices.py:72 +#: netbox/netbox/choices.py:72 msgid "Grey" msgstr "Серый" -#: netbox/choices.py:73 +#: netbox/netbox/choices.py:73 msgid "Dark Grey" msgstr "Темно-серый" -#: netbox/choices.py:128 +#: netbox/netbox/choices.py:128 msgid "Direct" msgstr "Прямой" -#: netbox/choices.py:129 +#: netbox/netbox/choices.py:129 msgid "Upload" msgstr "Загрузить" -#: netbox/choices.py:141 netbox/choices.py:155 +#: netbox/netbox/choices.py:141 netbox/netbox/choices.py:155 msgid "Auto-detect" msgstr "Автоматическое обнаружение" -#: netbox/choices.py:156 +#: netbox/netbox/choices.py:156 msgid "Comma" msgstr "Запятая" -#: netbox/choices.py:157 +#: netbox/netbox/choices.py:157 msgid "Semicolon" msgstr "Точка с запятой" -#: netbox/choices.py:158 +#: netbox/netbox/choices.py:158 msgid "Tab" msgstr "Вкладка" -#: netbox/config/__init__.py:67 +#: netbox/netbox/config/__init__.py:67 #, python-brace-format msgid "Invalid configuration parameter: {item}" msgstr "Неверный параметр конфигурации: {item}" -#: netbox/config/parameters.py:22 templates/core/inc/config_data.html:62 +#: netbox/netbox/config/parameters.py:22 +#: netbox/templates/core/inc/config_data.html:62 msgid "Login banner" msgstr "Баннер для входа" -#: netbox/config/parameters.py:24 +#: netbox/netbox/config/parameters.py:24 msgid "Additional content to display on the login page" msgstr "Дополнительный контент для отображения на странице входа" -#: netbox/config/parameters.py:33 templates/core/inc/config_data.html:66 +#: netbox/netbox/config/parameters.py:33 +#: netbox/templates/core/inc/config_data.html:66 msgid "Maintenance banner" msgstr "Баннер технического обслуживания" -#: netbox/config/parameters.py:35 +#: netbox/netbox/config/parameters.py:35 msgid "Additional content to display when in maintenance mode" msgstr "Дополнительный контент для отображения в режиме обслуживания" -#: netbox/config/parameters.py:44 templates/core/inc/config_data.html:70 +#: netbox/netbox/config/parameters.py:44 +#: netbox/templates/core/inc/config_data.html:70 msgid "Top banner" msgstr "Верхний баннер" -#: netbox/config/parameters.py:46 +#: netbox/netbox/config/parameters.py:46 msgid "Additional content to display at the top of every page" msgstr "" "Дополнительный контент для отображения в верхней части каждой страницы" -#: netbox/config/parameters.py:55 templates/core/inc/config_data.html:74 +#: netbox/netbox/config/parameters.py:55 +#: netbox/templates/core/inc/config_data.html:74 msgid "Bottom banner" msgstr "Нижний баннер" -#: netbox/config/parameters.py:57 +#: netbox/netbox/config/parameters.py:57 msgid "Additional content to display at the bottom of every page" msgstr "Дополнительный контент для отображения внизу каждой страницы" -#: netbox/config/parameters.py:68 +#: netbox/netbox/config/parameters.py:68 msgid "Globally unique IP space" msgstr "Уникальное в глобальном масштабе IP-пространство" -#: netbox/config/parameters.py:70 +#: netbox/netbox/config/parameters.py:70 msgid "Enforce unique IP addressing within the global table" msgstr "Обеспечьте уникальную IP-адресацию в глобальной таблице" -#: netbox/config/parameters.py:75 templates/core/inc/config_data.html:44 +#: netbox/netbox/config/parameters.py:75 +#: netbox/templates/core/inc/config_data.html:44 msgid "Prefer IPv4" msgstr "Предпочитаю IPv4" -#: netbox/config/parameters.py:77 +#: netbox/netbox/config/parameters.py:77 msgid "Prefer IPv4 addresses over IPv6" msgstr "Предпочитайте адреса IPv4, а не IPv6" -#: netbox/config/parameters.py:84 +#: netbox/netbox/config/parameters.py:84 msgid "Rack unit height" msgstr "Высота стойки" -#: netbox/config/parameters.py:86 +#: netbox/netbox/config/parameters.py:86 msgid "Default unit height for rendered rack elevations" msgstr "" "Высота единиц измерения по умолчанию для визуализированных высот стоек" -#: netbox/config/parameters.py:91 +#: netbox/netbox/config/parameters.py:91 msgid "Rack unit width" msgstr "Ширина стойки" -#: netbox/config/parameters.py:93 +#: netbox/netbox/config/parameters.py:93 msgid "Default unit width for rendered rack elevations" msgstr "Ширина юнита по умолчанию для визуализированных высот стоек" -#: netbox/config/parameters.py:100 +#: netbox/netbox/config/parameters.py:100 msgid "Powerfeed voltage" msgstr "Напряжение питания" -#: netbox/config/parameters.py:102 +#: netbox/netbox/config/parameters.py:102 msgid "Default voltage for powerfeeds" msgstr "Напряжение по умолчанию для источников питания" -#: netbox/config/parameters.py:107 +#: netbox/netbox/config/parameters.py:107 msgid "Powerfeed amperage" msgstr "Сила тока в питающей сети" -#: netbox/config/parameters.py:109 +#: netbox/netbox/config/parameters.py:109 msgid "Default amperage for powerfeeds" msgstr "Сила тока по умолчанию для источников питания" -#: netbox/config/parameters.py:114 +#: netbox/netbox/config/parameters.py:114 msgid "Powerfeed max utilization" msgstr "Максимальное использование Powerfeed" -#: netbox/config/parameters.py:116 +#: netbox/netbox/config/parameters.py:116 msgid "Default max utilization for powerfeeds" msgstr "Максимальное использование по умолчанию для Powerfeeds" -#: netbox/config/parameters.py:123 templates/core/inc/config_data.html:53 +#: netbox/netbox/config/parameters.py:123 +#: netbox/templates/core/inc/config_data.html:53 msgid "Allowed URL schemes" msgstr "Разрешенные схемы URL-адресов" -#: netbox/config/parameters.py:128 +#: netbox/netbox/config/parameters.py:128 msgid "Permitted schemes for URLs in user-provided content" msgstr "" "Разрешенные схемы URL-адресов в предоставляемом пользователем контенте" -#: netbox/config/parameters.py:136 +#: netbox/netbox/config/parameters.py:136 msgid "Default page size" msgstr "Размер страницы по умолчанию" -#: netbox/config/parameters.py:142 +#: netbox/netbox/config/parameters.py:142 msgid "Maximum page size" msgstr "Максимальный размер страницы" -#: netbox/config/parameters.py:150 templates/core/inc/config_data.html:96 +#: netbox/netbox/config/parameters.py:150 +#: netbox/templates/core/inc/config_data.html:96 msgid "Custom validators" msgstr "Настраиваемые валидаторы" -#: netbox/config/parameters.py:152 +#: netbox/netbox/config/parameters.py:152 msgid "Custom validation rules (JSON)" msgstr "Настраиваемые правила проверки (JSON)" -#: netbox/config/parameters.py:160 templates/core/inc/config_data.html:104 +#: netbox/netbox/config/parameters.py:160 +#: netbox/templates/core/inc/config_data.html:104 msgid "Protection rules" msgstr "Правила защиты" -#: netbox/config/parameters.py:162 +#: netbox/netbox/config/parameters.py:162 msgid "Deletion protection rules (JSON)" msgstr "Правила защиты от удаления (JSON)" -#: netbox/config/parameters.py:172 templates/core/inc/config_data.html:117 +#: netbox/netbox/config/parameters.py:172 +#: netbox/templates/core/inc/config_data.html:117 msgid "Default preferences" msgstr "Настройки по умолчанию" -#: netbox/config/parameters.py:174 +#: netbox/netbox/config/parameters.py:174 msgid "Default preferences for new users" msgstr "Настройки по умолчанию для новых пользователей" -#: netbox/config/parameters.py:181 templates/core/inc/config_data.html:129 +#: netbox/netbox/config/parameters.py:181 +#: netbox/templates/core/inc/config_data.html:129 msgid "Maintenance mode" msgstr "Режим обслуживания" -#: netbox/config/parameters.py:183 +#: netbox/netbox/config/parameters.py:183 msgid "Enable maintenance mode" msgstr "Включить режим обслуживания" -#: netbox/config/parameters.py:188 templates/core/inc/config_data.html:133 +#: netbox/netbox/config/parameters.py:188 +#: netbox/templates/core/inc/config_data.html:133 msgid "GraphQL enabled" msgstr "GraphQL включен" -#: netbox/config/parameters.py:190 +#: netbox/netbox/config/parameters.py:190 msgid "Enable the GraphQL API" msgstr "Включите API GraphQL" -#: netbox/config/parameters.py:195 templates/core/inc/config_data.html:137 +#: netbox/netbox/config/parameters.py:195 +#: netbox/templates/core/inc/config_data.html:137 msgid "Changelog retention" msgstr "Хранение журнала изменений" -#: netbox/config/parameters.py:197 +#: netbox/netbox/config/parameters.py:197 msgid "Days to retain changelog history (set to zero for unlimited)" msgstr "" "Количество дней для хранения истории изменений (равно нулю без ограничений)" -#: netbox/config/parameters.py:202 +#: netbox/netbox/config/parameters.py:202 msgid "Job result retention" msgstr "Сохранение результатов задач" -#: netbox/config/parameters.py:204 +#: netbox/netbox/config/parameters.py:204 msgid "Days to retain job result history (set to zero for unlimited)" msgstr "" "Количество дней для хранения истории результатов задач (укажите 0 для " "неограниченного хранения)" -#: netbox/config/parameters.py:209 templates/core/inc/config_data.html:145 +#: netbox/netbox/config/parameters.py:209 +#: netbox/templates/core/inc/config_data.html:145 msgid "Maps URL" msgstr "URL-адрес карты" -#: netbox/config/parameters.py:211 +#: netbox/netbox/config/parameters.py:211 msgid "Base URL for mapping geographic locations" msgstr "Базовый URL-адрес для картографирования географических местоположений" -#: netbox/forms/__init__.py:12 +#: netbox/netbox/forms/__init__.py:12 msgid "Partial match" msgstr "Частичное совпадение" -#: netbox/forms/__init__.py:13 +#: netbox/netbox/forms/__init__.py:13 msgid "Exact match" msgstr "Точное совпадение" -#: netbox/forms/__init__.py:14 +#: netbox/netbox/forms/__init__.py:14 msgid "Starts with" msgstr "Начинается с" -#: netbox/forms/__init__.py:15 +#: netbox/netbox/forms/__init__.py:15 msgid "Ends with" msgstr "Заканчивается на" -#: netbox/forms/__init__.py:16 +#: netbox/netbox/forms/__init__.py:16 msgid "Regex" msgstr "Regex" -#: netbox/forms/__init__.py:34 +#: netbox/netbox/forms/__init__.py:34 msgid "Object type(s)" msgstr "Тип (ы) объекта" -#: netbox/forms/__init__.py:40 +#: netbox/netbox/forms/__init__.py:40 msgid "Lookup" msgstr "Запрос" -#: netbox/forms/base.py:90 +#: netbox/netbox/forms/base.py:90 msgid "" "Tag slugs separated by commas, encased with double quotes (e.g. " "\"tag1,tag2,tag3\")" @@ -10208,414 +10913,425 @@ msgstr "" "Подстрока тегов разделены запятыми и заключены в двойные кавычки (например, " "«tag1, tag2, tag3\")" -#: netbox/forms/base.py:120 +#: netbox/netbox/forms/base.py:120 msgid "Add tags" msgstr "Добавить теги" -#: netbox/forms/base.py:125 +#: netbox/netbox/forms/base.py:125 msgid "Remove tags" msgstr "Удалить теги" -#: netbox/forms/mixins.py:38 +#: netbox/netbox/forms/mixins.py:38 #, python-brace-format msgid "{class_name} must specify a model class." msgstr "{class_name} необходимо указать класс модели." -#: netbox/models/features.py:280 +#: netbox/netbox/models/features.py:280 #, python-brace-format msgid "Unknown field name '{name}' in custom field data." msgstr "Неизвестное имя поля '{name}' в данных для настраиваемых полей." -#: netbox/models/features.py:286 +#: netbox/netbox/models/features.py:286 #, python-brace-format msgid "Invalid value for custom field '{name}': {error}" msgstr "Неверное значение для настраиваемого поля '{name}': {error}" -#: netbox/models/features.py:295 +#: netbox/netbox/models/features.py:295 #, python-brace-format msgid "Custom field '{name}' must have a unique value." msgstr "Настраиваемое поле '{name}'должно иметь уникальное значение." -#: netbox/models/features.py:302 +#: netbox/netbox/models/features.py:302 #, python-brace-format msgid "Missing required custom field '{name}'." msgstr "Отсутствует обязательное настраиваемое поле '{name}'." -#: netbox/models/features.py:462 +#: netbox/netbox/models/features.py:462 msgid "Remote data source" msgstr "Удаленный источник данных" -#: netbox/models/features.py:472 +#: netbox/netbox/models/features.py:472 msgid "data path" msgstr "путь к данным" -#: netbox/models/features.py:476 +#: netbox/netbox/models/features.py:476 msgid "Path to remote file (relative to data source root)" msgstr "Путь к удаленному файлу (относительно корня источника данных)" -#: netbox/models/features.py:479 +#: netbox/netbox/models/features.py:479 msgid "auto sync enabled" msgstr "автоматическая синхронизация включена" -#: netbox/models/features.py:481 +#: netbox/netbox/models/features.py:481 msgid "Enable automatic synchronization of data when the data file is updated" msgstr "" "Включить автоматическую синхронизацию данных при обновлении файла данных" -#: netbox/models/features.py:484 +#: netbox/netbox/models/features.py:484 msgid "date synced" msgstr "дата синхронизирована" -#: netbox/models/features.py:578 +#: netbox/netbox/models/features.py:578 #, python-brace-format msgid "{class_name} must implement a sync_data() method." msgstr "{class_name} должен реализовать метод sync_data ()." -#: netbox/navigation/menu.py:11 +#: netbox/netbox/navigation/menu.py:11 msgid "Organization" msgstr "Организация" -#: netbox/navigation/menu.py:19 +#: netbox/netbox/navigation/menu.py:19 msgid "Site Groups" msgstr "Группы сайтов" -#: netbox/navigation/menu.py:27 +#: netbox/netbox/navigation/menu.py:27 msgid "Tenant Groups" msgstr "Группы арендаторов" -#: netbox/navigation/menu.py:34 +#: netbox/netbox/navigation/menu.py:34 msgid "Contact Groups" msgstr "Группы контактов" -#: netbox/navigation/menu.py:35 templates/tenancy/contactrole.html:8 +#: netbox/netbox/navigation/menu.py:35 +#: netbox/templates/tenancy/contactrole.html:8 msgid "Contact Roles" msgstr "Роли контактов" -#: netbox/navigation/menu.py:36 +#: netbox/netbox/navigation/menu.py:36 msgid "Contact Assignments" msgstr "Назначения контактов" -#: netbox/navigation/menu.py:50 +#: netbox/netbox/navigation/menu.py:50 msgid "Rack Roles" msgstr "Роли стоек" -#: netbox/navigation/menu.py:54 +#: netbox/netbox/navigation/menu.py:54 msgid "Elevations" msgstr "Возвышения" -#: netbox/navigation/menu.py:60 netbox/navigation/menu.py:62 +#: netbox/netbox/navigation/menu.py:60 netbox/netbox/navigation/menu.py:62 msgid "Rack Types" msgstr "Типы стоек" -#: netbox/navigation/menu.py:76 +#: netbox/netbox/navigation/menu.py:76 msgid "Modules" msgstr "Модули" -#: netbox/navigation/menu.py:80 templates/dcim/device.html:160 -#: templates/dcim/virtualdevicecontext.html:8 +#: netbox/netbox/navigation/menu.py:80 netbox/templates/dcim/device.html:160 +#: netbox/templates/dcim/virtualdevicecontext.html:8 msgid "Virtual Device Contexts" msgstr "Виртуальные контексты" -#: netbox/navigation/menu.py:88 +#: netbox/netbox/navigation/menu.py:88 msgid "Manufacturers" msgstr "Производители" -#: netbox/navigation/menu.py:92 +#: netbox/netbox/navigation/menu.py:92 msgid "Device Components" msgstr "Компоненты устройства" -#: netbox/navigation/menu.py:104 templates/dcim/inventoryitemrole.html:8 +#: netbox/netbox/navigation/menu.py:104 +#: netbox/templates/dcim/inventoryitemrole.html:8 msgid "Inventory Item Roles" msgstr "Роли предметов" -#: netbox/navigation/menu.py:111 netbox/navigation/menu.py:115 +#: netbox/netbox/navigation/menu.py:111 netbox/netbox/navigation/menu.py:115 msgid "Connections" msgstr "Подключения" -#: netbox/navigation/menu.py:117 +#: netbox/netbox/navigation/menu.py:117 msgid "Cables" msgstr "Кабели" -#: netbox/navigation/menu.py:118 +#: netbox/netbox/navigation/menu.py:118 msgid "Wireless Links" msgstr "Беспроводные каналы" -#: netbox/navigation/menu.py:121 +#: netbox/netbox/navigation/menu.py:121 msgid "Interface Connections" msgstr "Интерфейсные подключения" -#: netbox/navigation/menu.py:126 +#: netbox/netbox/navigation/menu.py:126 msgid "Console Connections" msgstr "Консольные подключения" -#: netbox/navigation/menu.py:131 +#: netbox/netbox/navigation/menu.py:131 msgid "Power Connections" msgstr "Подключения кабелей питания" -#: netbox/navigation/menu.py:147 +#: netbox/netbox/navigation/menu.py:147 msgid "Wireless LAN Groups" msgstr "Группы WLAN" -#: netbox/navigation/menu.py:168 +#: netbox/netbox/navigation/menu.py:168 msgid "Prefix & VLAN Roles" msgstr "Роли префиксов и VLAN" -#: netbox/navigation/menu.py:174 +#: netbox/netbox/navigation/menu.py:174 msgid "ASN Ranges" msgstr "Диапазоны ASN" -#: netbox/navigation/menu.py:196 +#: netbox/netbox/navigation/menu.py:196 msgid "VLAN Groups" msgstr "Группы VLAN" -#: netbox/navigation/menu.py:203 +#: netbox/netbox/navigation/menu.py:203 msgid "Service Templates" msgstr "Шаблоны Служб" -#: netbox/navigation/menu.py:204 templates/dcim/device.html:302 -#: templates/ipam/ipaddress.html:118 -#: templates/virtualization/virtualmachine.html:154 +#: netbox/netbox/navigation/menu.py:204 netbox/templates/dcim/device.html:302 +#: netbox/templates/ipam/ipaddress.html:118 +#: netbox/templates/virtualization/virtualmachine.html:154 msgid "Services" msgstr "Службы" -#: netbox/navigation/menu.py:211 +#: netbox/netbox/navigation/menu.py:211 msgid "VPN" msgstr "VPN" -#: netbox/navigation/menu.py:215 netbox/navigation/menu.py:217 -#: vpn/tables/tunnels.py:24 +#: netbox/netbox/navigation/menu.py:215 netbox/netbox/navigation/menu.py:217 +#: netbox/vpn/tables/tunnels.py:24 msgid "Tunnels" msgstr "Туннели" -#: netbox/navigation/menu.py:218 templates/vpn/tunnelgroup.html:8 +#: netbox/netbox/navigation/menu.py:218 +#: netbox/templates/vpn/tunnelgroup.html:8 msgid "Tunnel Groups" msgstr "Группы туннелей" -#: netbox/navigation/menu.py:219 +#: netbox/netbox/navigation/menu.py:219 msgid "Tunnel Terminations" msgstr "Окончание туннелей" -#: netbox/navigation/menu.py:223 netbox/navigation/menu.py:225 -#: vpn/models/l2vpn.py:64 +#: netbox/netbox/navigation/menu.py:223 netbox/netbox/navigation/menu.py:225 +#: netbox/vpn/models/l2vpn.py:64 msgid "L2VPNs" msgstr "L2VPN" -#: netbox/navigation/menu.py:226 templates/vpn/l2vpn.html:56 -#: templates/vpn/tunnel.html:72 vpn/tables/tunnels.py:58 +#: 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/navigation/menu.py:232 +#: netbox/netbox/navigation/menu.py:232 msgid "IKE Proposals" msgstr "Предложения IKE" -#: netbox/navigation/menu.py:233 templates/vpn/ikeproposal.html:41 +#: netbox/netbox/navigation/menu.py:233 +#: netbox/templates/vpn/ikeproposal.html:41 msgid "IKE Policies" msgstr "Политики IKE" -#: netbox/navigation/menu.py:234 +#: netbox/netbox/navigation/menu.py:234 msgid "IPSec Proposals" msgstr "Предложения IPsec" -#: netbox/navigation/menu.py:235 templates/vpn/ipsecproposal.html:37 +#: netbox/netbox/navigation/menu.py:235 +#: netbox/templates/vpn/ipsecproposal.html:37 msgid "IPSec Policies" msgstr "Политики IPsec" -#: netbox/navigation/menu.py:236 templates/vpn/ikepolicy.html:38 -#: templates/vpn/ipsecpolicy.html:25 +#: netbox/netbox/navigation/menu.py:236 netbox/templates/vpn/ikepolicy.html:38 +#: netbox/templates/vpn/ipsecpolicy.html:25 msgid "IPSec Profiles" msgstr "Профили IPsec" -#: netbox/navigation/menu.py:243 templates/dcim/device_edit.html:78 -msgid "Virtualization" -msgstr "Виртуализация" - -#: netbox/navigation/menu.py:251 -#: templates/virtualization/virtualmachine.html:174 -#: templates/virtualization/virtualmachine/base.html:32 -#: templates/virtualization/virtualmachine_list.html:21 -#: virtualization/tables/virtualmachines.py:104 virtualization/views.py:388 +#: netbox/netbox/navigation/menu.py:251 +#: 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 msgid "Virtual Disks" msgstr "Виртуальные диски" -#: netbox/navigation/menu.py:258 +#: netbox/netbox/navigation/menu.py:258 msgid "Cluster Types" msgstr "Типы кластеров" -#: netbox/navigation/menu.py:259 +#: netbox/netbox/navigation/menu.py:259 msgid "Cluster Groups" msgstr "Группы кластеров" -#: netbox/navigation/menu.py:273 +#: netbox/netbox/navigation/menu.py:273 msgid "Circuit Types" msgstr "Типы каналов связи" -#: netbox/navigation/menu.py:274 +#: netbox/netbox/navigation/menu.py:274 msgid "Circuit Groups" msgstr "Группы каналов связей" -#: netbox/navigation/menu.py:275 templates/circuits/circuit.html:66 +#: netbox/netbox/navigation/menu.py:275 +#: netbox/templates/circuits/circuit.html:66 msgid "Group Assignments" msgstr "Групповые задания" -#: netbox/navigation/menu.py:276 +#: netbox/netbox/navigation/menu.py:276 msgid "Circuit Terminations" msgstr "Точка подключения канала связи" -#: netbox/navigation/menu.py:280 netbox/navigation/menu.py:282 +#: netbox/netbox/navigation/menu.py:280 netbox/netbox/navigation/menu.py:282 msgid "Providers" msgstr "Провайдеры" -#: netbox/navigation/menu.py:283 templates/circuits/provider.html:51 +#: netbox/netbox/navigation/menu.py:283 +#: netbox/templates/circuits/provider.html:51 msgid "Provider Accounts" msgstr "Аккаунты провайдеров" -#: netbox/navigation/menu.py:284 +#: netbox/netbox/navigation/menu.py:284 msgid "Provider Networks" msgstr "Сети провайдеров" -#: netbox/navigation/menu.py:298 +#: netbox/netbox/navigation/menu.py:298 msgid "Power Panels" -msgstr "Панели питания" +msgstr "Распределительные щиты" -#: netbox/navigation/menu.py:309 +#: netbox/netbox/navigation/menu.py:309 msgid "Configurations" msgstr "Конфигурации" -#: netbox/navigation/menu.py:311 +#: netbox/netbox/navigation/menu.py:311 msgid "Config Contexts" msgstr "Контексты конфигурации" -#: netbox/navigation/menu.py:312 +#: netbox/netbox/navigation/menu.py:312 msgid "Config Templates" msgstr "Шаблоны конфигурации" -#: netbox/navigation/menu.py:319 netbox/navigation/menu.py:323 +#: netbox/netbox/navigation/menu.py:319 netbox/netbox/navigation/menu.py:323 msgid "Customization" msgstr "Настройка" -#: netbox/navigation/menu.py:325 templates/dcim/device_edit.html:103 -#: templates/dcim/htmx/cable_edit.html:81 -#: templates/dcim/virtualchassis_add.html:31 -#: templates/dcim/virtualchassis_edit.html:40 -#: templates/generic/bulk_edit.html:76 templates/htmx/form.html:19 -#: templates/inc/filter_list.html:30 templates/inc/panels/custom_fields.html:7 -#: templates/ipam/ipaddress_bulk_add.html:35 templates/ipam/vlan_edit.html:59 +#: netbox/netbox/navigation/menu.py:325 +#: netbox/templates/dcim/device_edit.html:103 +#: netbox/templates/dcim/htmx/cable_edit.html:81 +#: netbox/templates/dcim/virtualchassis_add.html:31 +#: netbox/templates/dcim/virtualchassis_edit.html:40 +#: netbox/templates/generic/bulk_edit.html:76 +#: netbox/templates/htmx/form.html:19 netbox/templates/inc/filter_list.html:30 +#: netbox/templates/inc/panels/custom_fields.html:7 +#: netbox/templates/ipam/ipaddress_bulk_add.html:35 +#: netbox/templates/ipam/vlan_edit.html:59 msgid "Custom Fields" msgstr "Настраиваемые Поля" -#: netbox/navigation/menu.py:326 +#: netbox/netbox/navigation/menu.py:326 msgid "Custom Field Choices" msgstr "Варианты для Настраиваемых Полей" -#: netbox/navigation/menu.py:327 +#: netbox/netbox/navigation/menu.py:327 msgid "Custom Links" msgstr "Настраиваемые Ссылки" -#: netbox/navigation/menu.py:328 +#: netbox/netbox/navigation/menu.py:328 msgid "Export Templates" msgstr "Шаблоны экспорта" -#: netbox/navigation/menu.py:329 +#: netbox/netbox/navigation/menu.py:329 msgid "Saved Filters" msgstr "Сохраненные фильтры" -#: netbox/navigation/menu.py:331 +#: netbox/netbox/navigation/menu.py:331 msgid "Image Attachments" msgstr "Прикрепленные Изображения" -#: netbox/navigation/menu.py:349 +#: netbox/netbox/navigation/menu.py:349 msgid "Operations" msgstr "Операции" -#: netbox/navigation/menu.py:353 +#: netbox/netbox/navigation/menu.py:353 msgid "Integrations" msgstr "Интеграции" -#: netbox/navigation/menu.py:355 +#: netbox/netbox/navigation/menu.py:355 msgid "Data Sources" msgstr "Источники данных" -#: netbox/navigation/menu.py:356 +#: netbox/netbox/navigation/menu.py:356 msgid "Event Rules" msgstr "Правила мероприятия" -#: netbox/navigation/menu.py:357 +#: netbox/netbox/navigation/menu.py:357 msgid "Webhooks" msgstr "Вебхуки" -#: netbox/navigation/menu.py:361 netbox/navigation/menu.py:365 -#: netbox/views/generic/feature_views.py:153 -#: templates/extras/report/base.html:37 templates/extras/script/base.html:36 +#: netbox/netbox/navigation/menu.py:361 netbox/netbox/navigation/menu.py:365 +#: netbox/netbox/views/generic/feature_views.py:153 +#: netbox/templates/extras/report/base.html:37 +#: netbox/templates/extras/script/base.html:36 msgid "Jobs" msgstr "Задачи" -#: netbox/navigation/menu.py:371 +#: netbox/netbox/navigation/menu.py:371 msgid "Logging" msgstr "Ведение журнала" -#: netbox/navigation/menu.py:373 +#: netbox/netbox/navigation/menu.py:373 msgid "Notification Groups" msgstr "Группы уведомлений" -#: netbox/navigation/menu.py:374 +#: netbox/netbox/navigation/menu.py:374 msgid "Journal Entries" msgstr "Записи в журнале" -#: netbox/navigation/menu.py:375 templates/core/objectchange.html:9 -#: templates/core/objectchange_list.html:4 +#: netbox/netbox/navigation/menu.py:375 +#: netbox/templates/core/objectchange.html:9 +#: netbox/templates/core/objectchange_list.html:4 msgid "Change Log" msgstr "Журнал изменений" -#: netbox/navigation/menu.py:382 templates/inc/user_menu.html:29 +#: netbox/netbox/navigation/menu.py:382 netbox/templates/inc/user_menu.html:29 msgid "Admin" msgstr "Администратор" -#: netbox/navigation/menu.py:430 templates/account/base.html:27 -#: templates/inc/user_menu.html:57 +#: netbox/netbox/navigation/menu.py:430 netbox/templates/account/base.html:27 +#: netbox/templates/inc/user_menu.html:57 msgid "API Tokens" msgstr "Токены API" -#: netbox/navigation/menu.py:437 users/forms/model_forms.py:187 -#: users/forms/model_forms.py:195 users/forms/model_forms.py:242 -#: users/forms/model_forms.py:249 +#: netbox/netbox/navigation/menu.py:437 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/navigation/menu.py:445 netbox/navigation/menu.py:449 -#: templates/core/system.html:7 +#: netbox/netbox/navigation/menu.py:445 netbox/netbox/navigation/menu.py:449 +#: netbox/templates/core/system.html:7 msgid "System" msgstr "система" -#: netbox/navigation/menu.py:454 netbox/navigation/menu.py:502 -#: templates/500.html:35 templates/account/preferences.html:22 -#: templates/core/plugin.html:13 templates/core/plugin_list.html:7 -#: templates/core/plugin_list.html:12 +#: netbox/netbox/navigation/menu.py:454 netbox/netbox/navigation/menu.py:502 +#: netbox/templates/500.html:35 netbox/templates/account/preferences.html:22 +#: netbox/templates/core/plugin.html:13 +#: netbox/templates/core/plugin_list.html:7 +#: netbox/templates/core/plugin_list.html:12 msgid "Plugins" msgstr "Плагины" -#: netbox/navigation/menu.py:459 +#: netbox/netbox/navigation/menu.py:459 msgid "Configuration History" msgstr "История конфигурации" -#: netbox/navigation/menu.py:465 templates/core/rq_task.html:8 -#: templates/core/rq_task_list.html:22 +#: netbox/netbox/navigation/menu.py:465 netbox/templates/core/rq_task.html:8 +#: netbox/templates/core/rq_task_list.html:22 msgid "Background Tasks" msgstr "Фоновые задачи" -#: netbox/plugins/navigation.py:47 netbox/plugins/navigation.py:69 +#: netbox/netbox/plugins/navigation.py:47 +#: netbox/netbox/plugins/navigation.py:69 msgid "Permissions must be passed as a tuple or list." msgstr "Разрешения должны передаваться в виде кортежа или списка." -#: netbox/plugins/navigation.py:51 +#: netbox/netbox/plugins/navigation.py:51 msgid "Buttons must be passed as a tuple or list." msgstr "Кнопки должны передаваться в виде кортежа или списка." -#: netbox/plugins/navigation.py:73 +#: netbox/netbox/plugins/navigation.py:73 msgid "Button color must be a choice within ButtonColorChoices." msgstr "Цвет кнопки должен быть выбран в ButtonColorChoices." -#: netbox/plugins/registration.py:25 +#: netbox/netbox/plugins/registration.py:25 #, python-brace-format msgid "" "PluginTemplateExtension class {template_extension} was passed as an " @@ -10624,7 +11340,7 @@ msgstr "" "Класс расширения шаблонов плагинов {template_extension} было принято в " "качестве экземпляра!" -#: netbox/plugins/registration.py:31 +#: netbox/netbox/plugins/registration.py:31 #, python-brace-format msgid "" "{template_extension} is not a subclass of " @@ -10633,196 +11349,197 @@ msgstr "" "{template_extension} не является подклассом расширения " "Netbox.Plugins.Plugins.PluginstemplateExtension!" -#: netbox/plugins/registration.py:51 +#: netbox/netbox/plugins/registration.py:51 #, python-brace-format msgid "{item} must be an instance of netbox.plugins.PluginMenuItem" msgstr "{item} должен быть экземпляром Netbox.plugins.pluginmenuItem" -#: netbox/plugins/registration.py:62 +#: netbox/netbox/plugins/registration.py:62 #, python-brace-format msgid "{menu_link} must be an instance of netbox.plugins.PluginMenuItem" msgstr "{menu_link} должен быть экземпляром Netbox.plugins.pluginmenuItem" -#: netbox/plugins/registration.py:67 +#: netbox/netbox/plugins/registration.py:67 #, python-brace-format msgid "{button} must be an instance of netbox.plugins.PluginMenuButton" msgstr "" "{button} должен быть экземпляром кнопки Netbox.plugins.PluginMenuButton" -#: netbox/plugins/templates.py:37 +#: netbox/netbox/plugins/templates.py:37 msgid "extra_context must be a dictionary" msgstr "extra_context должен быть словарём" -#: netbox/preferences.py:19 +#: netbox/netbox/preferences.py:19 msgid "HTMX Navigation" msgstr "Навигация по HTMX" -#: netbox/preferences.py:24 +#: netbox/netbox/preferences.py:24 msgid "Enable dynamic UI navigation" msgstr "Включить динамическую навигацию пользовательского интерфейса" -#: netbox/preferences.py:26 +#: netbox/netbox/preferences.py:26 msgid "Experimental feature" msgstr "экспериментальная функция" -#: netbox/preferences.py:29 +#: netbox/netbox/preferences.py:29 msgid "Language" msgstr "Язык" -#: netbox/preferences.py:34 +#: netbox/netbox/preferences.py:34 msgid "Forces UI translation to the specified language" msgstr "Принудительно переводит пользовательский интерфейс на указанный язык" -#: netbox/preferences.py:36 +#: netbox/netbox/preferences.py:36 msgid "Support for translation has been disabled locally" msgstr "Поддержка перевода отключена локально" -#: netbox/preferences.py:42 +#: netbox/netbox/preferences.py:42 msgid "Page length" msgstr "Длина страницы" -#: netbox/preferences.py:44 +#: netbox/netbox/preferences.py:44 msgid "The default number of objects to display per page" msgstr "Количество объектов, отображаемых на странице по умолчанию" -#: netbox/preferences.py:48 +#: netbox/netbox/preferences.py:48 msgid "Paginator placement" msgstr "Размещение пагинатора" -#: netbox/preferences.py:50 +#: netbox/netbox/preferences.py:50 msgid "Bottom" msgstr "Внизу" -#: netbox/preferences.py:51 +#: netbox/netbox/preferences.py:51 msgid "Top" msgstr "Вверху" -#: netbox/preferences.py:52 +#: netbox/netbox/preferences.py:52 msgid "Both" msgstr "Вверху и внизу" -#: netbox/preferences.py:55 +#: netbox/netbox/preferences.py:55 msgid "Where the paginator controls will be displayed relative to a table" msgstr "" "Где элементы управления пагинатором будут отображаться относительно таблицы" -#: netbox/preferences.py:60 +#: netbox/netbox/preferences.py:60 msgid "Data format" msgstr "Формат данных" -#: netbox/preferences.py:65 +#: netbox/netbox/preferences.py:65 msgid "The preferred syntax for displaying generic data within the UI" msgstr "" "Предпочтительный синтаксис для отображения общих данных в пользовательском " "интерфейсе" -#: netbox/registry.py:14 +#: netbox/netbox/registry.py:14 #, python-brace-format msgid "Invalid store: {key}" msgstr "Неверное хранилище: {key}" -#: netbox/registry.py:17 +#: netbox/netbox/registry.py:17 msgid "Cannot add stores to registry after initialization" msgstr "Невозможно добавить хранилище в реестр после инициализации" -#: netbox/registry.py:20 +#: netbox/netbox/registry.py:20 msgid "Cannot delete stores from registry" msgstr "Невозможно удалить хранилище из реестра" -#: netbox/settings.py:760 +#: netbox/netbox/settings.py:760 msgid "Czech" msgstr "Чешский" -#: netbox/settings.py:761 +#: netbox/netbox/settings.py:761 msgid "Danish" msgstr "Датский" -#: netbox/settings.py:762 +#: netbox/netbox/settings.py:762 msgid "German" msgstr "Немецкий" -#: netbox/settings.py:763 +#: netbox/netbox/settings.py:763 msgid "English" msgstr "Английский" -#: netbox/settings.py:764 +#: netbox/netbox/settings.py:764 msgid "Spanish" msgstr "Испанский" -#: netbox/settings.py:765 +#: netbox/netbox/settings.py:765 msgid "French" msgstr "Французский" -#: netbox/settings.py:766 +#: netbox/netbox/settings.py:766 msgid "Italian" msgstr "Итальянский" -#: netbox/settings.py:767 +#: netbox/netbox/settings.py:767 msgid "Japanese" msgstr "Японский" -#: netbox/settings.py:768 +#: netbox/netbox/settings.py:768 msgid "Dutch" msgstr "Голландский" -#: netbox/settings.py:769 +#: netbox/netbox/settings.py:769 msgid "Polish" msgstr "Польский" -#: netbox/settings.py:770 +#: netbox/netbox/settings.py:770 msgid "Portuguese" msgstr "Португальский" -#: netbox/settings.py:771 +#: netbox/netbox/settings.py:771 msgid "Russian" msgstr "Русский" -#: netbox/settings.py:772 +#: netbox/netbox/settings.py:772 msgid "Turkish" msgstr "Турецкий" -#: netbox/settings.py:773 +#: netbox/netbox/settings.py:773 msgid "Ukrainian" msgstr "Украинский" -#: netbox/settings.py:774 +#: netbox/netbox/settings.py:774 msgid "Chinese" msgstr "Китайский" -#: netbox/tables/columns.py:176 +#: netbox/netbox/tables/columns.py:176 msgid "Select all" msgstr "Выбрать все" -#: netbox/tables/columns.py:189 +#: netbox/netbox/tables/columns.py:189 msgid "Toggle all" msgstr "Переключить все" -#: netbox/tables/columns.py:300 +#: netbox/netbox/tables/columns.py:300 msgid "Toggle Dropdown" msgstr "Переключить выпадающий список" -#: netbox/tables/columns.py:572 templates/core/job.html:53 +#: netbox/netbox/tables/columns.py:572 netbox/templates/core/job.html:53 msgid "Error" msgstr "Ошибка" -#: netbox/tables/tables.py:58 +#: netbox/netbox/tables/tables.py:58 #, python-brace-format msgid "No {model_name} found" msgstr "{model_name} не найдена" -#: netbox/tables/tables.py:249 templates/generic/bulk_import.html:117 +#: netbox/netbox/tables/tables.py:249 +#: netbox/templates/generic/bulk_import.html:117 msgid "Field" msgstr "Поле" -#: netbox/tables/tables.py:252 +#: netbox/netbox/tables/tables.py:252 msgid "Value" msgstr "Значение" -#: netbox/tests/dummy_plugin/navigation.py:29 +#: netbox/netbox/tests/dummy_plugin/navigation.py:29 msgid "Dummy Plugin" msgstr "Фиктивный плагин" -#: netbox/views/generic/bulk_views.py:114 +#: netbox/netbox/views/generic/bulk_views.py:114 #, python-brace-format msgid "" "There was an error rendering the selected export template ({template}): " @@ -10830,56 +11547,56 @@ msgid "" msgstr "" "Произошла ошибка при рендеринге выбранного шаблона ({template}): {error}" -#: netbox/views/generic/bulk_views.py:416 +#: netbox/netbox/views/generic/bulk_views.py:416 #, python-brace-format msgid "Row {i}: Object with ID {id} does not exist" msgstr "Ряд {i}: Объект с идентификатором {id} не существует" -#: netbox/views/generic/bulk_views.py:702 -#: netbox/views/generic/bulk_views.py:900 -#: netbox/views/generic/bulk_views.py:948 +#: netbox/netbox/views/generic/bulk_views.py:709 +#: netbox/netbox/views/generic/bulk_views.py:910 +#: netbox/netbox/views/generic/bulk_views.py:958 #, python-brace-format msgid "No {object_type} were selected." msgstr "{object_type} не были выбраны." -#: netbox/views/generic/bulk_views.py:782 +#: netbox/netbox/views/generic/bulk_views.py:788 #, python-brace-format msgid "Renamed {count} {object_type}" msgstr "Переименован(-о) {count} {object_type}" -#: netbox/views/generic/bulk_views.py:878 +#: netbox/netbox/views/generic/bulk_views.py:888 #, python-brace-format msgid "Deleted {count} {object_type}" msgstr "Удален(-о) {count} {object_type}" -#: netbox/views/generic/feature_views.py:40 +#: netbox/netbox/views/generic/feature_views.py:40 msgid "Changelog" msgstr "Журнал изменений" -#: netbox/views/generic/feature_views.py:93 +#: netbox/netbox/views/generic/feature_views.py:93 msgid "Journal" msgstr "Журнал" -#: netbox/views/generic/feature_views.py:207 +#: netbox/netbox/views/generic/feature_views.py:207 msgid "Unable to synchronize data: No data file set." msgstr "Невозможно синхронизировать данные: не указан файл данных." -#: netbox/views/generic/feature_views.py:211 +#: netbox/netbox/views/generic/feature_views.py:211 #, python-brace-format msgid "Synchronized data for {object_type} {object}." msgstr "Синхронизированы данные для {object_type} {object}." -#: netbox/views/generic/feature_views.py:236 +#: netbox/netbox/views/generic/feature_views.py:236 #, python-brace-format msgid "Synced {count} {object_type}" msgstr "Синхронизирован(-о) {count} {object_type}" -#: netbox/views/generic/object_views.py:108 +#: netbox/netbox/views/generic/object_views.py:108 #, python-brace-format msgid "{class_name} must implement get_children()" msgstr "{class_name} должен реализовать get_children ()" -#: netbox/views/misc.py:44 +#: netbox/netbox/views/misc.py:46 msgid "" "There was an error loading the dashboard configuration. A default dashboard " "is in use." @@ -10887,705 +11604,747 @@ msgstr "" "Произошла ошибка при загрузке конфигурации панели управления. По умолчанию " "используется панель управления." -#: templates/403.html:4 +#: netbox/templates/403.html:4 msgid "Access Denied" msgstr "Отказано в доступе" -#: templates/403.html:9 +#: netbox/templates/403.html:9 msgid "You do not have permission to access this page" msgstr "У вас нет разрешения на доступ к этой странице" -#: templates/404.html:4 +#: netbox/templates/404.html:4 msgid "Page Not Found" msgstr "Страница не найдена" -#: templates/404.html:9 +#: netbox/templates/404.html:9 msgid "The requested page does not exist" msgstr "Запрошенная страница не существует" -#: templates/500.html:7 templates/500.html:18 +#: netbox/templates/500.html:7 netbox/templates/500.html:18 msgid "Server Error" msgstr "Ошибка сервера" -#: templates/500.html:23 +#: netbox/templates/500.html:23 msgid "There was a problem with your request. Please contact an administrator" msgstr "С вашим запросом возникла проблема. Обратитесь к администратору" -#: templates/500.html:28 +#: netbox/templates/500.html:28 msgid "The complete exception is provided below" msgstr "Полное исключение приведено ниже" -#: templates/500.html:33 templates/core/system.html:40 +#: netbox/templates/500.html:33 netbox/templates/core/system.html:40 msgid "Python version" msgstr "Версия для Python" -#: templates/500.html:34 +#: netbox/templates/500.html:34 msgid "NetBox version" msgstr "Версия NetBox" -#: templates/500.html:36 +#: netbox/templates/500.html:36 msgid "None installed" msgstr "Ничего не установлено" -#: templates/500.html:39 +#: netbox/templates/500.html:39 msgid "If further assistance is required, please post to the" msgstr "Если требуется дополнительная помощь, отправьте сообщение по адресу" -#: templates/500.html:39 +#: netbox/templates/500.html:39 msgid "NetBox discussion forum" msgstr "Дискуссионный форум NetBox" -#: templates/500.html:39 +#: netbox/templates/500.html:39 msgid "on GitHub" msgstr "на GitHub" -#: templates/500.html:42 templates/base/40x.html:17 +#: netbox/templates/500.html:42 netbox/templates/base/40x.html:17 msgid "Home Page" msgstr "Домашняя страница" -#: templates/account/base.html:7 templates/inc/user_menu.html:45 -#: vpn/forms/bulk_edit.py:255 vpn/forms/filtersets.py:189 -#: vpn/forms/model_forms.py:379 +#: netbox/templates/account/base.html:7 netbox/templates/inc/user_menu.html:45 +#: netbox/vpn/forms/bulk_edit.py:255 netbox/vpn/forms/filtersets.py:189 +#: netbox/vpn/forms/model_forms.py:379 msgid "Profile" msgstr "Профиль" -#: templates/account/base.html:13 templates/account/notifications.html:7 -#: templates/inc/user_menu.html:15 +#: netbox/templates/account/base.html:13 +#: netbox/templates/account/notifications.html:7 +#: netbox/templates/inc/user_menu.html:15 msgid "Notifications" msgstr "Уведомления" -#: templates/account/base.html:16 templates/account/subscriptions.html:7 -#: templates/inc/user_menu.html:51 +#: netbox/templates/account/base.html:16 +#: netbox/templates/account/subscriptions.html:7 +#: netbox/templates/inc/user_menu.html:51 msgid "Subscriptions" msgstr "Подписки" -#: templates/account/base.html:19 templates/inc/user_menu.html:54 +#: netbox/templates/account/base.html:19 +#: netbox/templates/inc/user_menu.html:54 msgid "Preferences" msgstr "Настройки" -#: templates/account/password.html:5 +#: netbox/templates/account/password.html:5 msgid "Change Password" msgstr "Изменить пароль" -#: templates/account/password.html:19 templates/account/preferences.html:77 -#: templates/core/configrevision_restore.html:63 -#: templates/dcim/devicebay_populate.html:34 -#: templates/dcim/virtualchassis_add_member.html:26 -#: templates/dcim/virtualchassis_edit.html:103 -#: templates/extras/object_journal.html:26 templates/extras/script.html:38 -#: templates/generic/bulk_add_component.html:67 -#: templates/generic/bulk_delete.html:65 templates/generic/bulk_edit.html:106 -#: templates/generic/bulk_import.html:56 templates/generic/bulk_import.html:78 -#: templates/generic/bulk_import.html:100 -#: templates/generic/bulk_remove.html:62 templates/generic/bulk_rename.html:63 -#: templates/generic/confirmation_form.html:19 -#: templates/generic/object_edit.html:72 templates/htmx/delete_form.html:53 -#: templates/htmx/delete_form.html:55 templates/ipam/ipaddress_assign.html:28 -#: templates/virtualization/cluster_add_devices.html:30 +#: netbox/templates/account/password.html:19 +#: netbox/templates/account/preferences.html:77 +#: netbox/templates/core/configrevision_restore.html:63 +#: netbox/templates/dcim/devicebay_populate.html:34 +#: netbox/templates/dcim/virtualchassis_add_member.html:26 +#: netbox/templates/dcim/virtualchassis_edit.html:103 +#: netbox/templates/extras/object_journal.html:26 +#: netbox/templates/extras/script.html:38 +#: netbox/templates/generic/bulk_add_component.html:67 +#: netbox/templates/generic/bulk_delete.html:65 +#: netbox/templates/generic/bulk_edit.html:106 +#: netbox/templates/generic/bulk_import.html:56 +#: netbox/templates/generic/bulk_import.html:78 +#: netbox/templates/generic/bulk_import.html:100 +#: netbox/templates/generic/bulk_remove.html:62 +#: netbox/templates/generic/bulk_rename.html:63 +#: netbox/templates/generic/confirmation_form.html:19 +#: netbox/templates/generic/object_edit.html:72 +#: netbox/templates/htmx/delete_form.html:53 +#: netbox/templates/htmx/delete_form.html:55 +#: netbox/templates/ipam/ipaddress_assign.html:28 +#: netbox/templates/virtualization/cluster_add_devices.html:30 msgid "Cancel" msgstr "Отменить" -#: templates/account/password.html:20 templates/account/preferences.html:78 -#: templates/dcim/devicebay_populate.html:35 -#: templates/dcim/virtualchassis_add_member.html:28 -#: templates/dcim/virtualchassis_edit.html:105 -#: templates/extras/dashboard/widget_add.html:26 -#: templates/extras/dashboard/widget_config.html:19 -#: templates/extras/object_journal.html:27 -#: templates/generic/object_edit.html:75 -#: utilities/templates/helpers/applied_filters.html:16 -#: utilities/templates/helpers/table_config_form.html:40 +#: netbox/templates/account/password.html:20 +#: netbox/templates/account/preferences.html:78 +#: netbox/templates/dcim/devicebay_populate.html:35 +#: netbox/templates/dcim/virtualchassis_add_member.html:28 +#: netbox/templates/dcim/virtualchassis_edit.html:105 +#: netbox/templates/extras/dashboard/widget_add.html:26 +#: netbox/templates/extras/dashboard/widget_config.html:19 +#: netbox/templates/extras/object_journal.html:27 +#: netbox/templates/generic/object_edit.html:75 +#: netbox/utilities/templates/helpers/applied_filters.html:16 +#: netbox/utilities/templates/helpers/table_config_form.html:40 msgid "Save" msgstr "Сохранить" -#: templates/account/preferences.html:34 +#: netbox/templates/account/preferences.html:34 msgid "Table Configurations" msgstr "Конфигурации таблиц" -#: templates/account/preferences.html:39 +#: netbox/templates/account/preferences.html:39 msgid "Clear table preferences" msgstr "Очистить настройки таблицы" -#: templates/account/preferences.html:47 +#: netbox/templates/account/preferences.html:47 msgid "Toggle All" msgstr "Переключить все" -#: templates/account/preferences.html:49 +#: netbox/templates/account/preferences.html:49 msgid "Table" msgstr "Таблица" -#: templates/account/preferences.html:50 +#: netbox/templates/account/preferences.html:50 msgid "Ordering" msgstr "Заказ" -#: templates/account/preferences.html:51 +#: netbox/templates/account/preferences.html:51 msgid "Columns" msgstr "Колонны" -#: templates/account/preferences.html:71 templates/dcim/cable_trace.html:113 -#: templates/extras/object_configcontext.html:43 +#: netbox/templates/account/preferences.html:71 +#: netbox/templates/dcim/cable_trace.html:113 +#: netbox/templates/extras/object_configcontext.html:43 msgid "None found" msgstr "Ничего не найдено" -#: templates/account/profile.html:6 +#: netbox/templates/account/profile.html:6 msgid "User Profile" msgstr "Профиль пользователя" -#: templates/account/profile.html:12 +#: netbox/templates/account/profile.html:12 msgid "Account Details" msgstr "Сведения об учетной записи" -#: templates/account/profile.html:29 templates/tenancy/contact.html:43 -#: templates/users/user.html:25 tenancy/forms/bulk_edit.py:109 +#: netbox/templates/account/profile.html:29 +#: netbox/templates/tenancy/contact.html:43 +#: netbox/templates/users/user.html:25 netbox/tenancy/forms/bulk_edit.py:109 msgid "Email" msgstr "Электронная почта" -#: templates/account/profile.html:33 templates/users/user.html:29 +#: netbox/templates/account/profile.html:33 +#: netbox/templates/users/user.html:29 msgid "Account Created" msgstr "Учетная запись создана" -#: templates/account/profile.html:37 templates/users/user.html:33 +#: netbox/templates/account/profile.html:37 +#: netbox/templates/users/user.html:33 msgid "Last Login" msgstr "Последний вход в систему" -#: templates/account/profile.html:41 templates/users/user.html:45 +#: netbox/templates/account/profile.html:41 +#: netbox/templates/users/user.html:45 msgid "Superuser" msgstr "Суперпользователь" -#: templates/account/profile.html:45 templates/inc/user_menu.html:31 -#: templates/users/user.html:41 +#: netbox/templates/account/profile.html:45 +#: netbox/templates/inc/user_menu.html:31 netbox/templates/users/user.html:41 msgid "Staff" msgstr "Персонал" -#: templates/account/profile.html:53 templates/users/objectpermission.html:82 -#: templates/users/user.html:53 +#: netbox/templates/account/profile.html:53 +#: netbox/templates/users/objectpermission.html:82 +#: netbox/templates/users/user.html:53 msgid "Assigned Groups" msgstr "Назначенные группы" -#: templates/account/profile.html:58 -#: templates/circuits/circuit_terminations_swap.html:18 -#: templates/circuits/circuit_terminations_swap.html:26 -#: templates/circuits/circuittermination.html:34 -#: templates/circuits/inc/circuit_termination.html:68 -#: templates/core/objectchange.html:124 templates/core/objectchange.html:142 -#: templates/dcim/devicebay.html:59 -#: templates/dcim/inc/panels/inventory_items.html:45 -#: templates/dcim/interface.html:296 templates/dcim/modulebay.html:80 -#: templates/extras/configcontext.html:70 templates/extras/eventrule.html:66 -#: templates/extras/htmx/script_result.html:60 -#: templates/extras/webhook.html:65 templates/extras/webhook.html:75 -#: templates/inc/panel_table.html:13 templates/inc/panels/comments.html:10 -#: templates/ipam/inc/panels/fhrp_groups.html:56 templates/users/group.html:34 -#: templates/users/group.html:44 templates/users/objectpermission.html:77 -#: templates/users/objectpermission.html:87 templates/users/user.html:58 -#: templates/users/user.html:68 +#: netbox/templates/account/profile.html:58 +#: netbox/templates/circuits/circuit_terminations_swap.html:18 +#: netbox/templates/circuits/circuit_terminations_swap.html:26 +#: netbox/templates/circuits/circuittermination.html:34 +#: netbox/templates/circuits/inc/circuit_termination.html:68 +#: netbox/templates/core/objectchange.html:124 +#: 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/modulebay.html:80 +#: netbox/templates/extras/configcontext.html:70 +#: netbox/templates/extras/eventrule.html:66 +#: netbox/templates/extras/htmx/script_result.html:60 +#: netbox/templates/extras/webhook.html:65 +#: netbox/templates/extras/webhook.html:75 +#: netbox/templates/inc/panel_table.html:13 +#: netbox/templates/inc/panels/comments.html:10 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:56 +#: netbox/templates/users/group.html:34 netbox/templates/users/group.html:44 +#: netbox/templates/users/objectpermission.html:77 +#: netbox/templates/users/objectpermission.html:87 +#: netbox/templates/users/user.html:58 netbox/templates/users/user.html:68 msgid "None" msgstr "Нет" -#: templates/account/profile.html:68 templates/users/user.html:78 +#: netbox/templates/account/profile.html:68 +#: netbox/templates/users/user.html:78 msgid "Recent Activity" msgstr "Недавняя активность" -#: templates/account/token.html:8 templates/account/token_list.html:6 +#: netbox/templates/account/token.html:8 +#: netbox/templates/account/token_list.html:6 msgid "My API Tokens" msgstr "Мои токены API" -#: templates/account/token.html:11 templates/account/token.html:19 -#: templates/users/token.html:6 templates/users/token.html:14 -#: users/forms/filtersets.py:120 +#: netbox/templates/account/token.html:11 +#: netbox/templates/account/token.html:19 netbox/templates/users/token.html:6 +#: netbox/templates/users/token.html:14 netbox/users/forms/filtersets.py:120 msgid "Token" msgstr "Токен" -#: templates/account/token.html:39 templates/users/token.html:31 -#: users/forms/bulk_edit.py:107 +#: netbox/templates/account/token.html:39 netbox/templates/users/token.html:31 +#: netbox/users/forms/bulk_edit.py:107 msgid "Write enabled" msgstr "Запись включена" -#: templates/account/token.html:51 templates/users/token.html:43 +#: netbox/templates/account/token.html:51 netbox/templates/users/token.html:43 msgid "Last used" msgstr "Последний раз использованный" -#: templates/account/token_list.html:12 +#: netbox/templates/account/token_list.html:12 msgid "Add a Token" msgstr "Добавить токен" -#: templates/base/base.html:22 templates/home.html:27 +#: netbox/templates/base/base.html:22 netbox/templates/home.html:27 msgid "Home" msgstr "Главная" -#: templates/base/layout.html:25 +#: netbox/templates/base/layout.html:25 msgid "NetBox Motif" msgstr "Мотив NetBox" -#: templates/base/layout.html:38 templates/base/layout.html:39 -#: templates/login.html:14 templates/login.html:15 +#: netbox/templates/base/layout.html:38 netbox/templates/base/layout.html:39 +#: netbox/templates/login.html:14 netbox/templates/login.html:15 msgid "NetBox Logo" msgstr "Логотип NetBox" -#: templates/base/layout.html:150 templates/base/layout.html:151 +#: netbox/templates/base/layout.html:150 netbox/templates/base/layout.html:151 msgid "Docs" msgstr "Документация" -#: templates/base/layout.html:156 templates/base/layout.html:157 -#: templates/rest_framework/api.html:10 +#: netbox/templates/base/layout.html:156 netbox/templates/base/layout.html:157 +#: netbox/templates/rest_framework/api.html:10 msgid "REST API" msgstr "REST API" -#: templates/base/layout.html:162 templates/base/layout.html:163 +#: netbox/templates/base/layout.html:162 netbox/templates/base/layout.html:163 msgid "REST API documentation" msgstr "Документация по REST API" -#: templates/base/layout.html:169 templates/base/layout.html:170 +#: netbox/templates/base/layout.html:169 netbox/templates/base/layout.html:170 msgid "GraphQL API" msgstr "API GraphQL" -#: templates/base/layout.html:185 templates/base/layout.html:186 +#: netbox/templates/base/layout.html:185 netbox/templates/base/layout.html:186 msgid "NetBox Labs Support" msgstr "Поддержка NetBox Labs" -#: templates/base/layout.html:194 templates/base/layout.html:195 +#: netbox/templates/base/layout.html:194 netbox/templates/base/layout.html:195 msgid "Source Code" msgstr "Исходный код" -#: templates/base/layout.html:200 templates/base/layout.html:201 +#: netbox/templates/base/layout.html:200 netbox/templates/base/layout.html:201 msgid "Community" msgstr "Сообщество" -#: templates/circuits/circuit.html:47 +#: netbox/templates/circuits/circuit.html:47 msgid "Install Date" msgstr "Дата установки" -#: templates/circuits/circuit.html:51 +#: netbox/templates/circuits/circuit.html:51 msgid "Termination Date" msgstr "Дата отключения" -#: templates/circuits/circuit.html:70 -#: templates/ipam/inc/panels/fhrp_groups.html:15 +#: netbox/templates/circuits/circuit.html:70 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:15 msgid "Assign Group" msgstr "Назначить группу" -#: templates/circuits/circuit_terminations_swap.html:4 +#: netbox/templates/circuits/circuit_terminations_swap.html:4 msgid "Swap Circuit Terminations" msgstr "Прерывания цепей Swap" -#: templates/circuits/circuit_terminations_swap.html:8 +#: netbox/templates/circuits/circuit_terminations_swap.html:8 #, python-format msgid "Swap these terminations for circuit %(circuit)s?" msgstr "" "Поменять местами эти эти точки подключения в канале связи %(circuit)s?" -#: templates/circuits/circuit_terminations_swap.html:14 +#: netbox/templates/circuits/circuit_terminations_swap.html:14 msgid "A side" msgstr "Сторона" -#: templates/circuits/circuit_terminations_swap.html:22 +#: netbox/templates/circuits/circuit_terminations_swap.html:22 msgid "Z side" msgstr "Сторона Z" -#: templates/circuits/circuitgroup.html:16 +#: netbox/templates/circuits/circuitgroup.html:16 msgid "Assign Circuit" msgstr "Назначить цепь" -#: templates/circuits/circuitgroupassignment.html:19 +#: netbox/templates/circuits/circuitgroupassignment.html:19 msgid "Circuit Group Assignment" msgstr "Назначение группы цепей" -#: templates/circuits/circuittype.html:10 +#: netbox/templates/circuits/circuittype.html:10 msgid "Add Circuit" msgstr "Добавить канал связи" -#: templates/circuits/circuittype.html:19 +#: netbox/templates/circuits/circuittype.html:19 msgid "Circuit Type" msgstr "Тип канала связи" -#: templates/circuits/inc/circuit_termination.html:10 -#: templates/dcim/manufacturer.html:11 -#: templates/generic/bulk_add_component.html:22 -#: templates/users/objectpermission.html:38 -#: utilities/templates/buttons/add.html:4 -#: utilities/templates/helpers/table_config_form.html:20 +#: netbox/templates/circuits/inc/circuit_termination.html:10 +#: netbox/templates/dcim/manufacturer.html:11 +#: netbox/templates/generic/bulk_add_component.html:22 +#: netbox/templates/users/objectpermission.html:38 +#: netbox/utilities/templates/buttons/add.html:4 +#: netbox/utilities/templates/helpers/table_config_form.html:20 msgid "Add" msgstr "Добавить" -#: templates/circuits/inc/circuit_termination.html:15 -#: templates/circuits/inc/circuit_termination_fields.html:36 -#: templates/dcim/inc/panels/inventory_items.html:32 -#: templates/dcim/powerpanel.html:56 templates/extras/script_list.html:30 -#: templates/generic/object_edit.html:47 -#: templates/ipam/inc/ipaddress_edit_header.html:7 -#: templates/ipam/inc/panels/fhrp_groups.html:43 -#: utilities/templates/buttons/edit.html:3 +#: netbox/templates/circuits/inc/circuit_termination.html:15 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:36 +#: netbox/templates/dcim/inc/panels/inventory_items.html:32 +#: netbox/templates/dcim/powerpanel.html:56 +#: netbox/templates/extras/script_list.html:30 +#: netbox/templates/generic/object_edit.html:47 +#: netbox/templates/ipam/inc/ipaddress_edit_header.html:7 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:43 +#: netbox/utilities/templates/buttons/edit.html:3 msgid "Edit" msgstr "Редактировать" -#: templates/circuits/inc/circuit_termination.html:18 +#: netbox/templates/circuits/inc/circuit_termination.html:18 msgid "Swap" msgstr "Обмен" -#: templates/circuits/inc/circuit_termination_fields.html:19 -#: templates/dcim/consoleport.html:59 templates/dcim/consoleserverport.html:60 -#: templates/dcim/powerfeed.html:114 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:19 +#: netbox/templates/dcim/consoleport.html:59 +#: netbox/templates/dcim/consoleserverport.html:60 +#: netbox/templates/dcim/powerfeed.html:114 msgid "Marked as connected" msgstr "Отмечено как подключенное" -#: templates/circuits/inc/circuit_termination_fields.html:21 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:21 msgid "to" msgstr "к" -#: templates/circuits/inc/circuit_termination_fields.html:31 -#: templates/circuits/inc/circuit_termination_fields.html:32 -#: templates/dcim/frontport.html:80 -#: templates/dcim/inc/connection_endpoints.html:7 -#: templates/dcim/interface.html:154 templates/dcim/rearport.html:76 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:31 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:32 +#: netbox/templates/dcim/frontport.html:80 +#: netbox/templates/dcim/inc/connection_endpoints.html:7 +#: netbox/templates/dcim/interface.html:154 +#: netbox/templates/dcim/rearport.html:76 msgid "Trace" msgstr "Следить" -#: templates/circuits/inc/circuit_termination_fields.html:35 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:35 msgid "Edit cable" msgstr "Редактирование кабеля" -#: templates/circuits/inc/circuit_termination_fields.html:40 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:40 msgid "Remove cable" msgstr "Извлеките кабель" -#: templates/circuits/inc/circuit_termination_fields.html:41 -#: templates/dcim/bulk_disconnect.html:5 -#: templates/dcim/device/consoleports.html:12 -#: templates/dcim/device/consoleserverports.html:12 -#: templates/dcim/device/frontports.html:12 -#: templates/dcim/device/interfaces.html:16 -#: templates/dcim/device/poweroutlets.html:12 -#: templates/dcim/device/powerports.html:12 -#: templates/dcim/device/rearports.html:12 templates/dcim/powerpanel.html:61 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:41 +#: netbox/templates/dcim/bulk_disconnect.html:5 +#: netbox/templates/dcim/device/consoleports.html:12 +#: netbox/templates/dcim/device/consoleserverports.html:12 +#: netbox/templates/dcim/device/frontports.html:12 +#: netbox/templates/dcim/device/interfaces.html:16 +#: netbox/templates/dcim/device/poweroutlets.html:12 +#: netbox/templates/dcim/device/powerports.html:12 +#: netbox/templates/dcim/device/rearports.html:12 +#: netbox/templates/dcim/powerpanel.html:61 msgid "Disconnect" msgstr "Отключить" -#: templates/circuits/inc/circuit_termination_fields.html:48 -#: templates/dcim/consoleport.html:69 templates/dcim/consoleserverport.html:70 -#: templates/dcim/frontport.html:102 templates/dcim/interface.html:180 -#: templates/dcim/interface.html:200 templates/dcim/powerfeed.html:127 -#: templates/dcim/poweroutlet.html:71 templates/dcim/poweroutlet.html:72 -#: templates/dcim/powerport.html:73 templates/dcim/rearport.html:98 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:48 +#: netbox/templates/dcim/consoleport.html:69 +#: netbox/templates/dcim/consoleserverport.html:70 +#: netbox/templates/dcim/frontport.html:102 +#: netbox/templates/dcim/interface.html:180 +#: netbox/templates/dcim/interface.html:200 +#: netbox/templates/dcim/powerfeed.html:127 +#: netbox/templates/dcim/poweroutlet.html:71 +#: netbox/templates/dcim/poweroutlet.html:72 +#: netbox/templates/dcim/powerport.html:73 +#: netbox/templates/dcim/rearport.html:98 msgid "Connect" msgstr "Подключить" -#: templates/circuits/inc/circuit_termination_fields.html:70 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:70 msgid "Downstream" msgstr "Ниже по течению" -#: templates/circuits/inc/circuit_termination_fields.html:71 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:71 msgid "Upstream" msgstr "Вверх по течению" -#: templates/circuits/inc/circuit_termination_fields.html:80 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:80 msgid "Cross-Connect" msgstr "Кросс-коннект" -#: templates/circuits/inc/circuit_termination_fields.html:84 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:84 msgid "Patch Panel/Port" msgstr "Патч-панель/порт" -#: templates/circuits/provider.html:11 +#: netbox/templates/circuits/provider.html:11 msgid "Add circuit" msgstr "Добавить канал связи" -#: templates/circuits/provideraccount.html:17 +#: netbox/templates/circuits/provideraccount.html:17 msgid "Provider Account" msgstr "Учетная запись поставщика" -#: templates/core/configrevision.html:35 +#: netbox/templates/core/configrevision.html:35 msgid "Configuration Data" msgstr "Конфигурационные данные" -#: templates/core/configrevision.html:40 +#: netbox/templates/core/configrevision.html:40 msgid "Comment" msgstr "Комментарий" -#: templates/core/configrevision_restore.html:8 -#: templates/core/configrevision_restore.html:25 -#: templates/core/configrevision_restore.html:64 +#: netbox/templates/core/configrevision_restore.html:8 +#: netbox/templates/core/configrevision_restore.html:25 +#: netbox/templates/core/configrevision_restore.html:64 msgid "Restore" msgstr "Восстановить" -#: templates/core/configrevision_restore.html:36 +#: netbox/templates/core/configrevision_restore.html:36 msgid "Parameter" msgstr "Параметр" -#: templates/core/configrevision_restore.html:37 +#: netbox/templates/core/configrevision_restore.html:37 msgid "Current Value" msgstr "Текущее значение" -#: templates/core/configrevision_restore.html:38 +#: netbox/templates/core/configrevision_restore.html:38 msgid "New Value" msgstr "Новое значение" -#: templates/core/configrevision_restore.html:50 +#: netbox/templates/core/configrevision_restore.html:50 msgid "Changed" msgstr "Изменено" -#: templates/core/datafile.html:42 templates/ipam/iprange.html:25 -#: templates/virtualization/virtualdisk.html:29 -#: virtualization/tables/virtualmachines.py:198 +#: netbox/templates/core/datafile.html:42 +#: netbox/templates/ipam/iprange.html:25 +#: netbox/templates/virtualization/virtualdisk.html:29 +#: netbox/virtualization/tables/virtualmachines.py:198 msgid "Size" msgstr "Размер" -#: templates/core/datafile.html:43 +#: netbox/templates/core/datafile.html:43 msgid "bytes" msgstr "байтов" -#: templates/core/datafile.html:46 +#: netbox/templates/core/datafile.html:46 msgid "SHA256 Hash" msgstr "Хэш SHA256" -#: templates/core/datasource.html:14 templates/core/datasource.html:20 -#: utilities/templates/buttons/sync.html:5 +#: netbox/templates/core/datasource.html:14 +#: netbox/templates/core/datasource.html:20 +#: netbox/utilities/templates/buttons/sync.html:5 msgid "Sync" msgstr "Синхронизация" -#: templates/core/datasource.html:50 +#: netbox/templates/core/datasource.html:50 msgid "Last synced" msgstr "Последняя синхронизация" -#: templates/core/datasource.html:84 +#: netbox/templates/core/datasource.html:84 msgid "Backend" msgstr "Серверная часть" -#: templates/core/datasource.html:99 +#: netbox/templates/core/datasource.html:99 msgid "No parameters defined" msgstr "Параметры не определены" -#: templates/core/datasource.html:114 +#: netbox/templates/core/datasource.html:114 msgid "Files" msgstr "файлы" -#: templates/core/inc/config_data.html:7 +#: netbox/templates/core/inc/config_data.html:7 msgid "Rack elevations" msgstr "Высота стеллажей" -#: templates/core/inc/config_data.html:10 +#: netbox/templates/core/inc/config_data.html:10 msgid "Default unit height" msgstr "Высота юнита по умолчанию" -#: templates/core/inc/config_data.html:14 +#: netbox/templates/core/inc/config_data.html:14 msgid "Default unit width" msgstr "Ширина юнита по умолчанию" -#: templates/core/inc/config_data.html:20 +#: netbox/templates/core/inc/config_data.html:20 msgid "Power feeds" -msgstr "Источники питания" +msgstr "Кабели питания" -#: templates/core/inc/config_data.html:23 +#: netbox/templates/core/inc/config_data.html:23 msgid "Default voltage" msgstr "Напряжение по умолчанию" -#: templates/core/inc/config_data.html:27 +#: netbox/templates/core/inc/config_data.html:27 msgid "Default amperage" msgstr "Сила тока по умолчанию" -#: templates/core/inc/config_data.html:31 +#: netbox/templates/core/inc/config_data.html:31 msgid "Default max utilization" msgstr "Максимальное использование по умолчанию" -#: templates/core/inc/config_data.html:40 +#: netbox/templates/core/inc/config_data.html:40 msgid "Enforce global unique" msgstr "Обеспечьте глобальную уникальность" -#: templates/core/inc/config_data.html:83 +#: netbox/templates/core/inc/config_data.html:83 msgid "Paginate count" msgstr "Количество страниц" -#: templates/core/inc/config_data.html:87 +#: netbox/templates/core/inc/config_data.html:87 msgid "Max page size" msgstr "Максимальный размер страницы" -#: templates/core/inc/config_data.html:114 +#: netbox/templates/core/inc/config_data.html:114 msgid "User preferences" msgstr "Пользовательские предпочтения" -#: templates/core/inc/config_data.html:141 +#: netbox/templates/core/inc/config_data.html:141 msgid "Job retention" msgstr "Сохранение рабочих мест" -#: templates/core/job.html:35 templates/core/rq_task.html:12 -#: templates/core/rq_task.html:49 templates/core/rq_task.html:58 +#: netbox/templates/core/job.html:35 netbox/templates/core/rq_task.html:12 +#: netbox/templates/core/rq_task.html:49 netbox/templates/core/rq_task.html:58 msgid "Job" msgstr "Задача" -#: templates/core/job.html:58 templates/extras/journalentry.html:26 +#: netbox/templates/core/job.html:58 +#: netbox/templates/extras/journalentry.html:26 msgid "Created By" msgstr "Создано" -#: templates/core/job.html:66 +#: netbox/templates/core/job.html:66 msgid "Scheduling" msgstr "Планирование" -#: templates/core/job.html:77 +#: netbox/templates/core/job.html:77 #, python-format msgid "every %(interval)s minutes" msgstr "каждый %(interval)s протокол" -#: templates/core/objectchange.html:29 -#: templates/users/objectpermission.html:42 +#: netbox/templates/core/objectchange.html:29 +#: netbox/templates/users/objectpermission.html:42 msgid "Change" msgstr "Изменить" -#: templates/core/objectchange.html:79 +#: netbox/templates/core/objectchange.html:79 msgid "Difference" msgstr "Разница" -#: templates/core/objectchange.html:82 +#: netbox/templates/core/objectchange.html:82 msgid "Previous" msgstr "Предыдущий" -#: templates/core/objectchange.html:85 +#: netbox/templates/core/objectchange.html:85 msgid "Next" msgstr "Следующий" -#: templates/core/objectchange.html:93 +#: netbox/templates/core/objectchange.html:93 msgid "Object Created" msgstr "Объект создан" -#: templates/core/objectchange.html:95 +#: netbox/templates/core/objectchange.html:95 msgid "Object Deleted" msgstr "Объект удален" -#: templates/core/objectchange.html:97 +#: netbox/templates/core/objectchange.html:97 msgid "No Changes" msgstr "Без изменений" -#: templates/core/objectchange.html:111 +#: netbox/templates/core/objectchange.html:111 msgid "Pre-Change Data" msgstr "Данные перед изменением" -#: templates/core/objectchange.html:122 +#: netbox/templates/core/objectchange.html:122 msgid "Warning: Comparing non-atomic change to previous change record" msgstr "" "Предупреждение: сравнение неатомарного изменения с предыдущей записью " "изменений" -#: templates/core/objectchange.html:131 +#: netbox/templates/core/objectchange.html:131 msgid "Post-Change Data" msgstr "Данные после изменений" -#: templates/core/objectchange.html:162 +#: netbox/templates/core/objectchange.html:162 #, python-format msgid "See All %(count)s Changes" msgstr "Показать все %(count)s Изменения" -#: templates/core/objectchange_list.html:9 -#: templates/extras/object_changelog.html:15 +#: netbox/templates/core/objectchange_list.html:9 +#: netbox/templates/extras/object_changelog.html:15 msgid "Change log retention" msgstr "Хранение журнала изменений" -#: templates/core/objectchange_list.html:9 -#: templates/extras/object_changelog.html:15 +#: netbox/templates/core/objectchange_list.html:9 +#: netbox/templates/extras/object_changelog.html:15 msgid "days" msgstr "дни" -#: templates/core/objectchange_list.html:9 -#: templates/extras/object_changelog.html:15 +#: netbox/templates/core/objectchange_list.html:9 +#: netbox/templates/extras/object_changelog.html:15 msgid "Indefinite" msgstr "Бессрочно" -#: templates/core/plugin.html:22 +#: netbox/templates/core/plugin.html:22 msgid "Not installed" msgstr "Не установлено" -#: templates/core/plugin.html:33 +#: netbox/templates/core/plugin.html:33 msgid "Overview" msgstr "Обзор" -#: templates/core/plugin.html:39 +#: netbox/templates/core/plugin.html:39 msgid "Install" msgstr "Установить" -#: templates/core/plugin.html:51 +#: netbox/templates/core/plugin.html:51 msgid "Plugin Details" msgstr "Сведения о плагине" -#: templates/core/plugin.html:58 +#: netbox/templates/core/plugin.html:58 msgid "Summary" msgstr "Резюме" -#: templates/core/plugin.html:76 +#: netbox/templates/core/plugin.html:76 msgid "License" msgstr "Лицензия" -#: templates/core/plugin.html:96 +#: netbox/templates/core/plugin.html:96 msgid "Version History" msgstr "История версий" -#: templates/core/plugin.html:107 +#: netbox/templates/core/plugin.html:107 msgid "Local Installation Instructions" msgstr "Инструкции по локальной установке" -#: templates/core/rq_queue_list.html:5 templates/core/rq_queue_list.html:13 -#: templates/core/rq_task_list.html:14 templates/core/rq_worker.html:7 +#: netbox/templates/core/rq_queue_list.html:5 +#: netbox/templates/core/rq_queue_list.html:13 +#: netbox/templates/core/rq_task_list.html:14 +#: netbox/templates/core/rq_worker.html:7 msgid "Background Queues" msgstr "Фоновые очереди" -#: templates/core/rq_queue_list.html:24 templates/core/rq_queue_list.html:25 -#: templates/core/rq_worker_list.html:49 templates/core/rq_worker_list.html:50 -#: templates/extras/script_result.html:67 -#: templates/extras/script_result.html:69 -#: templates/inc/table_controls_htmx.html:30 -#: templates/inc/table_controls_htmx.html:33 +#: netbox/templates/core/rq_queue_list.html:24 +#: netbox/templates/core/rq_queue_list.html:25 +#: netbox/templates/core/rq_worker_list.html:49 +#: netbox/templates/core/rq_worker_list.html:50 +#: netbox/templates/extras/script_result.html:67 +#: netbox/templates/extras/script_result.html:69 +#: netbox/templates/inc/table_controls_htmx.html:30 +#: netbox/templates/inc/table_controls_htmx.html:33 msgid "Configure Table" msgstr "Настроить таблицу" -#: templates/core/rq_task.html:29 +#: netbox/templates/core/rq_task.html:29 msgid "Stop" msgstr "Стоп" -#: templates/core/rq_task.html:34 +#: netbox/templates/core/rq_task.html:34 msgid "Requeue" msgstr "Запросить" -#: templates/core/rq_task.html:39 +#: netbox/templates/core/rq_task.html:39 msgid "Enqueue" msgstr "Поставить в очередь" -#: templates/core/rq_task.html:61 +#: netbox/templates/core/rq_task.html:61 msgid "Queue" msgstr "Очередь" -#: templates/core/rq_task.html:65 +#: netbox/templates/core/rq_task.html:65 msgid "Timeout" msgstr "Тайм-аут" -#: templates/core/rq_task.html:69 +#: netbox/templates/core/rq_task.html:69 msgid "Result TTL" msgstr "Результат TTL" -#: templates/core/rq_task.html:89 +#: netbox/templates/core/rq_task.html:89 msgid "Meta" msgstr "Мета" -#: templates/core/rq_task.html:93 +#: netbox/templates/core/rq_task.html:93 msgid "Arguments" msgstr "Аргументы" -#: templates/core/rq_task.html:97 +#: netbox/templates/core/rq_task.html:97 msgid "Keyword Arguments" msgstr "Аргументы ключевых слов" -#: templates/core/rq_task.html:103 +#: netbox/templates/core/rq_task.html:103 msgid "Depends on" msgstr "Зависит от" -#: templates/core/rq_task.html:109 +#: netbox/templates/core/rq_task.html:109 msgid "Exception" msgstr "Исключение" -#: templates/core/rq_task_list.html:28 +#: netbox/templates/core/rq_task_list.html:28 msgid "tasks in " msgstr "задачи в " -#: templates/core/rq_task_list.html:33 +#: netbox/templates/core/rq_task_list.html:33 msgid "Queued Jobs" msgstr "Задачи в очереди" -#: templates/core/rq_task_list.html:64 templates/extras/script_result.html:86 +#: netbox/templates/core/rq_task_list.html:64 +#: netbox/templates/extras/script_result.html:86 #, python-format msgid "" "Select all %(count)s %(object_type_plural)s matching query" @@ -11593,382 +12352,400 @@ msgstr "" "Выберите все %(count)s %(object_type_plural)s " "соответствующий запрос" -#: templates/core/rq_worker.html:10 +#: netbox/templates/core/rq_worker.html:10 msgid "Worker Info" msgstr "Информация о рабочем процессе" -#: templates/core/rq_worker.html:31 templates/core/rq_worker.html:40 +#: netbox/templates/core/rq_worker.html:31 +#: netbox/templates/core/rq_worker.html:40 msgid "Worker" msgstr "Рабочий процесс" -#: templates/core/rq_worker.html:55 +#: netbox/templates/core/rq_worker.html:55 msgid "Queues" msgstr "Очереди" -#: templates/core/rq_worker.html:63 +#: netbox/templates/core/rq_worker.html:63 msgid "Curent Job" msgstr "Текущая задача" -#: templates/core/rq_worker.html:67 +#: netbox/templates/core/rq_worker.html:67 msgid "Successful job count" msgstr "Количество успешных задач" -#: templates/core/rq_worker.html:71 +#: netbox/templates/core/rq_worker.html:71 msgid "Failed job count" msgstr "Количество неуспешных задач" -#: templates/core/rq_worker.html:75 +#: netbox/templates/core/rq_worker.html:75 msgid "Total working time" msgstr "Общее рабочее время" -#: templates/core/rq_worker.html:76 +#: netbox/templates/core/rq_worker.html:76 msgid "seconds" msgstr "секунды" -#: templates/core/rq_worker_list.html:13 templates/core/rq_worker_list.html:21 +#: netbox/templates/core/rq_worker_list.html:13 +#: netbox/templates/core/rq_worker_list.html:21 msgid "Background Workers" msgstr "Фоновые рабочие процессы" -#: templates/core/rq_worker_list.html:29 +#: netbox/templates/core/rq_worker_list.html:29 #, python-format msgid "Workers in %(queue_name)s" msgstr "Рабочие процессы в %(queue_name)s" -#: templates/core/system.html:11 utilities/templates/buttons/export.html:4 +#: netbox/templates/core/system.html:11 +#: netbox/utilities/templates/buttons/export.html:4 msgid "Export" msgstr "Экспорт" -#: templates/core/system.html:28 +#: netbox/templates/core/system.html:28 msgid "System Status" msgstr "Состояние системы" -#: templates/core/system.html:31 +#: netbox/templates/core/system.html:31 msgid "NetBox release" msgstr "Релиз NetBox" -#: templates/core/system.html:44 +#: netbox/templates/core/system.html:44 msgid "Django version" msgstr "Версия для Django" -#: templates/core/system.html:48 +#: netbox/templates/core/system.html:48 msgid "PostgreSQL version" msgstr "Версия PostgreSQL" -#: templates/core/system.html:52 +#: netbox/templates/core/system.html:52 msgid "Database name" msgstr "Имя базы данных" -#: templates/core/system.html:56 +#: netbox/templates/core/system.html:56 msgid "Database size" msgstr "Размер базы данных" -#: templates/core/system.html:61 +#: netbox/templates/core/system.html:61 msgid "Unavailable" msgstr "Недоступно" -#: templates/core/system.html:66 +#: netbox/templates/core/system.html:66 msgid "RQ workers" msgstr "Рабочие процессы RQ" -#: templates/core/system.html:69 +#: netbox/templates/core/system.html:69 msgid "default queue" msgstr "очередь по умолчанию" -#: templates/core/system.html:73 +#: netbox/templates/core/system.html:73 msgid "System time" msgstr "Системное время" -#: templates/core/system.html:85 +#: netbox/templates/core/system.html:85 msgid "Current Configuration" msgstr "Текущая конфигурация" -#: templates/dcim/bulk_disconnect.html:9 +#: netbox/templates/dcim/bulk_disconnect.html:9 #, python-format msgid "" "Are you sure you want to disconnect these %(count)s %(obj_type_plural)s?" msgstr "Вы действительно хотите отключить их? %(count)s %(obj_type_plural)s?" -#: templates/dcim/cable_trace.html:10 +#: netbox/templates/dcim/cable_trace.html:10 #, python-format msgid "Cable Trace for %(object_type)s %(object)s" msgstr "Трассировка кабелей для %(object_type)s %(object)s" -#: templates/dcim/cable_trace.html:24 templates/dcim/inc/rack_elevation.html:7 +#: netbox/templates/dcim/cable_trace.html:24 +#: netbox/templates/dcim/inc/rack_elevation.html:7 msgid "Download SVG" msgstr "Загрузить SVG" -#: templates/dcim/cable_trace.html:30 +#: netbox/templates/dcim/cable_trace.html:30 msgid "Asymmetric Path" msgstr "Асимметричный путь" -#: templates/dcim/cable_trace.html:31 +#: netbox/templates/dcim/cable_trace.html:31 msgid "The nodes below have no links and result in an asymmetric path" msgstr "" "Приведенные ниже узлы не имеют ссылок и обеспечивают асимметричный путь" -#: templates/dcim/cable_trace.html:38 +#: netbox/templates/dcim/cable_trace.html:38 msgid "Path split" msgstr "Разделение путей" -#: templates/dcim/cable_trace.html:39 +#: netbox/templates/dcim/cable_trace.html:39 msgid "Select a node below to continue" msgstr "Выберите узел ниже, чтобы продолжить" -#: templates/dcim/cable_trace.html:55 +#: netbox/templates/dcim/cable_trace.html:55 msgid "Trace Completed" msgstr "Трассировка завершена" -#: templates/dcim/cable_trace.html:58 +#: netbox/templates/dcim/cable_trace.html:58 msgid "Total segments" msgstr "Всего сегментов" -#: templates/dcim/cable_trace.html:62 +#: netbox/templates/dcim/cable_trace.html:62 msgid "Total length" msgstr "Общая длина" -#: templates/dcim/cable_trace.html:77 +#: netbox/templates/dcim/cable_trace.html:77 msgid "No paths found" msgstr "Пути не найдены" -#: templates/dcim/cable_trace.html:85 +#: netbox/templates/dcim/cable_trace.html:85 msgid "Related Paths" msgstr "Связанные пути" -#: templates/dcim/cable_trace.html:89 +#: netbox/templates/dcim/cable_trace.html:89 msgid "Origin" msgstr "Происхождение" -#: templates/dcim/cable_trace.html:90 +#: netbox/templates/dcim/cable_trace.html:90 msgid "Destination" msgstr "Пункт назначения" -#: templates/dcim/cable_trace.html:91 +#: netbox/templates/dcim/cable_trace.html:91 msgid "Segments" msgstr "Сегменты" -#: templates/dcim/cable_trace.html:104 +#: netbox/templates/dcim/cable_trace.html:104 msgid "Incomplete" msgstr "Неполный" -#: templates/dcim/component_list.html:14 +#: netbox/templates/dcim/component_list.html:14 msgid "Rename Selected" msgstr "Переименовать Выбранное" -#: templates/dcim/consoleport.html:65 templates/dcim/consoleserverport.html:66 -#: templates/dcim/frontport.html:98 templates/dcim/interface.html:176 -#: templates/dcim/poweroutlet.html:69 templates/dcim/powerport.html:69 +#: netbox/templates/dcim/consoleport.html:65 +#: netbox/templates/dcim/consoleserverport.html:66 +#: netbox/templates/dcim/frontport.html:98 +#: netbox/templates/dcim/interface.html:176 +#: netbox/templates/dcim/poweroutlet.html:69 +#: netbox/templates/dcim/powerport.html:69 msgid "Not Connected" msgstr "Не подключено" -#: templates/dcim/device.html:34 +#: netbox/templates/dcim/device.html:34 msgid "Highlight device in rack" msgstr "Выделите устройство в стойке" -#: templates/dcim/device.html:55 +#: netbox/templates/dcim/device.html:55 msgid "Not racked" msgstr "Не в стойке" -#: templates/dcim/device.html:62 templates/dcim/site.html:94 +#: netbox/templates/dcim/device.html:62 netbox/templates/dcim/site.html:94 msgid "GPS Coordinates" msgstr "Координаты GPS" -#: templates/dcim/device.html:68 templates/dcim/site.html:81 -#: templates/dcim/site.html:100 +#: netbox/templates/dcim/device.html:68 netbox/templates/dcim/site.html:81 +#: netbox/templates/dcim/site.html:100 msgid "Map" msgstr "Карта" -#: templates/dcim/device.html:108 templates/dcim/inventoryitem.html:56 -#: templates/dcim/module.html:81 templates/dcim/modulebay.html:74 -#: templates/dcim/rack.html:61 +#: netbox/templates/dcim/device.html:108 +#: netbox/templates/dcim/inventoryitem.html:56 +#: netbox/templates/dcim/module.html:81 +#: netbox/templates/dcim/modulebay.html:74 netbox/templates/dcim/rack.html:61 msgid "Asset Tag" msgstr "Тег актива" -#: templates/dcim/device.html:123 +#: netbox/templates/dcim/device.html:123 msgid "View Virtual Chassis" msgstr "Смотреть виртуальное шасси" -#: templates/dcim/device.html:164 +#: netbox/templates/dcim/device.html:164 msgid "Create VDC" msgstr "Создайте VDC" -#: templates/dcim/device.html:175 templates/dcim/device_edit.html:64 -#: virtualization/forms/model_forms.py:223 +#: netbox/templates/dcim/device.html:175 +#: netbox/templates/dcim/device_edit.html:64 +#: netbox/virtualization/forms/model_forms.py:223 msgid "Management" msgstr "Управление" -#: templates/dcim/device.html:195 templates/dcim/device.html:211 -#: templates/dcim/device.html:227 -#: templates/virtualization/virtualmachine.html:57 -#: templates/virtualization/virtualmachine.html:73 +#: netbox/templates/dcim/device.html:195 netbox/templates/dcim/device.html:211 +#: netbox/templates/dcim/device.html:227 +#: netbox/templates/virtualization/virtualmachine.html:57 +#: netbox/templates/virtualization/virtualmachine.html:73 msgid "NAT for" msgstr "NAT для" -#: templates/dcim/device.html:197 templates/dcim/device.html:213 -#: templates/dcim/device.html:229 -#: templates/virtualization/virtualmachine.html:59 -#: templates/virtualization/virtualmachine.html:75 +#: netbox/templates/dcim/device.html:197 netbox/templates/dcim/device.html:213 +#: netbox/templates/dcim/device.html:229 +#: netbox/templates/virtualization/virtualmachine.html:59 +#: netbox/templates/virtualization/virtualmachine.html:75 msgid "NAT" msgstr "КОТ" -#: templates/dcim/device.html:252 templates/dcim/rack.html:73 +#: netbox/templates/dcim/device.html:252 netbox/templates/dcim/rack.html:73 msgid "Power Utilization" msgstr "Использование энергии" -#: templates/dcim/device.html:256 +#: netbox/templates/dcim/device.html:256 msgid "Input" msgstr "Ввод" -#: templates/dcim/device.html:257 +#: netbox/templates/dcim/device.html:257 msgid "Outlets" msgstr "Торговые точки" -#: templates/dcim/device.html:258 +#: netbox/templates/dcim/device.html:258 msgid "Allocated" msgstr "Выделено" -#: templates/dcim/device.html:268 templates/dcim/device.html:270 -#: templates/dcim/device.html:286 templates/dcim/powerfeed.html:67 +#: netbox/templates/dcim/device.html:268 netbox/templates/dcim/device.html:270 +#: netbox/templates/dcim/device.html:286 +#: netbox/templates/dcim/powerfeed.html:67 msgid "VA" msgstr "ВА" -#: templates/dcim/device.html:280 +#: netbox/templates/dcim/device.html:280 msgctxt "Leg of a power feed" msgid "Leg" msgstr "Ножка" -#: templates/dcim/device.html:306 -#: templates/virtualization/virtualmachine.html:158 +#: netbox/templates/dcim/device.html:306 +#: netbox/templates/virtualization/virtualmachine.html:158 msgid "Add a service" msgstr "Добавить службу" -#: templates/dcim/device/base.html:21 templates/dcim/device_list.html:9 -#: templates/dcim/devicetype/base.html:18 -#: templates/dcim/inc/moduletype_buttons.html:9 templates/dcim/module.html:18 -#: templates/virtualization/virtualmachine/base.html:22 -#: templates/virtualization/virtualmachine_list.html:8 +#: netbox/templates/dcim/device/base.html:21 +#: netbox/templates/dcim/device_list.html:9 +#: netbox/templates/dcim/devicetype/base.html:18 +#: netbox/templates/dcim/inc/moduletype_buttons.html:9 +#: netbox/templates/dcim/module.html:18 +#: netbox/templates/virtualization/virtualmachine/base.html:22 +#: netbox/templates/virtualization/virtualmachine_list.html:8 msgid "Add Components" msgstr "Добавить компоненты" -#: templates/dcim/device/consoleports.html:24 +#: netbox/templates/dcim/device/consoleports.html:24 msgid "Add Console Ports" msgstr "Добавить консольные порты" -#: templates/dcim/device/consoleserverports.html:24 +#: netbox/templates/dcim/device/consoleserverports.html:24 msgid "Add Console Server Ports" msgstr "Добавить порты консольного сервера" -#: templates/dcim/device/devicebays.html:10 +#: netbox/templates/dcim/device/devicebays.html:10 msgid "Add Device Bays" msgstr "Добавить отсеки для устройств" -#: templates/dcim/device/frontports.html:24 +#: netbox/templates/dcim/device/frontports.html:24 msgid "Add Front Ports" msgstr "Добавить передние порты" -#: templates/dcim/device/inc/interface_table_controls.html:9 +#: netbox/templates/dcim/device/inc/interface_table_controls.html:9 msgid "Hide Enabled" msgstr "Скрыть включено" -#: templates/dcim/device/inc/interface_table_controls.html:10 +#: netbox/templates/dcim/device/inc/interface_table_controls.html:10 msgid "Hide Disabled" msgstr "Скрыть отключено" -#: templates/dcim/device/inc/interface_table_controls.html:11 +#: netbox/templates/dcim/device/inc/interface_table_controls.html:11 msgid "Hide Virtual" msgstr "Скрыть виртуальное" -#: templates/dcim/device/inc/interface_table_controls.html:12 +#: netbox/templates/dcim/device/inc/interface_table_controls.html:12 msgid "Hide Disconnected" msgstr "Скрыть отключено" -#: templates/dcim/device/interfaces.html:27 +#: netbox/templates/dcim/device/interfaces.html:27 msgid "Add Interfaces" msgstr "Добавить интерфейсы" -#: templates/dcim/device/inventory.html:10 -#: templates/dcim/inc/panels/inventory_items.html:10 +#: netbox/templates/dcim/device/inventory.html:10 +#: netbox/templates/dcim/inc/panels/inventory_items.html:10 msgid "Add Inventory Item" msgstr "Добавить инвентарь" -#: templates/dcim/device/modulebays.html:10 +#: netbox/templates/dcim/device/modulebays.html:10 msgid "Add Module Bays" msgstr "Добавить отсеки для модулей" -#: templates/dcim/device/poweroutlets.html:24 +#: netbox/templates/dcim/device/poweroutlets.html:24 msgid "Add Power Outlets" msgstr "Добавить розетки питания" -#: templates/dcim/device/powerports.html:24 +#: netbox/templates/dcim/device/powerports.html:24 msgid "Add Power Port" msgstr "Добавить порт питания" -#: templates/dcim/device/rearports.html:24 +#: netbox/templates/dcim/device/rearports.html:24 msgid "Add Rear Ports" msgstr "Добавить задние порты" -#: templates/dcim/device/render_config.html:5 -#: templates/virtualization/virtualmachine/render_config.html:5 +#: netbox/templates/dcim/device/render_config.html:5 +#: netbox/templates/virtualization/virtualmachine/render_config.html:5 msgid "Config" msgstr "Конфигурация" -#: templates/dcim/device/render_config.html:35 -#: templates/virtualization/virtualmachine/render_config.html:35 +#: netbox/templates/dcim/device/render_config.html:35 +#: netbox/templates/virtualization/virtualmachine/render_config.html:35 msgid "Context Data" msgstr "Контекстные данные" -#: templates/dcim/device/render_config.html:53 -#: templates/virtualization/virtualmachine/render_config.html:53 +#: netbox/templates/dcim/device/render_config.html:55 +#: netbox/templates/virtualization/virtualmachine/render_config.html:55 msgid "Rendered Config" msgstr "Отображенная конфигурация" -#: templates/dcim/device/render_config.html:55 -#: templates/virtualization/virtualmachine/render_config.html:55 +#: netbox/templates/dcim/device/render_config.html:57 +#: netbox/templates/virtualization/virtualmachine/render_config.html:57 msgid "Download" msgstr "Скачать" -#: templates/dcim/device/render_config.html:61 -#: templates/virtualization/virtualmachine/render_config.html:61 -msgid "No configuration template found" -msgstr "Шаблон конфигурации не найден" +#: netbox/templates/dcim/device/render_config.html:64 +#: netbox/templates/virtualization/virtualmachine/render_config.html:64 +msgid "Error rendering template" +msgstr "Ошибка при отображении шаблона" -#: templates/dcim/device_edit.html:44 +#: 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 "Родительский залив" -#: templates/dcim/device_edit.html:48 -#: utilities/templates/form_helpers/render_field.html:22 +#: netbox/templates/dcim/device_edit.html:48 +#: netbox/utilities/templates/form_helpers/render_field.html:22 msgid "Regenerate Slug" msgstr "Сгенерировать Подстроку" -#: templates/dcim/device_edit.html:49 templates/generic/bulk_remove.html:21 -#: utilities/templates/helpers/table_config_form.html:23 +#: netbox/templates/dcim/device_edit.html:49 +#: netbox/templates/generic/bulk_remove.html:21 +#: netbox/utilities/templates/helpers/table_config_form.html:23 msgid "Remove" msgstr "Удалить" -#: templates/dcim/device_edit.html:110 +#: netbox/templates/dcim/device_edit.html:110 msgid "Local Config Context Data" msgstr "Контекстные данные локальной конфигурации" -#: templates/dcim/device_list.html:82 templates/generic/bulk_rename.html:57 -#: templates/virtualization/virtualmachine/interfaces.html:11 -#: templates/virtualization/virtualmachine/virtual_disks.html:11 +#: netbox/templates/dcim/device_list.html:82 +#: netbox/templates/generic/bulk_rename.html:57 +#: netbox/templates/virtualization/virtualmachine/interfaces.html:11 +#: netbox/templates/virtualization/virtualmachine/virtual_disks.html:11 msgid "Rename" msgstr "Переименовать" -#: templates/dcim/devicebay.html:17 +#: netbox/templates/dcim/devicebay.html:17 msgid "Device Bay" msgstr "Отсек для устройств" -#: templates/dcim/devicebay.html:43 +#: netbox/templates/dcim/devicebay.html:43 msgid "Installed Device" msgstr "Вставленное устройство" -#: templates/dcim/devicebay_depopulate.html:6 +#: netbox/templates/dcim/devicebay_depopulate.html:6 #, python-format msgid "Remove %(device)s from %(device_bay)s?" msgstr "Удалить %(device)s из %(device_bay)s?" -#: templates/dcim/devicebay_depopulate.html:13 +#: netbox/templates/dcim/devicebay_depopulate.html:13 #, python-format msgid "" "Are you sure you want to remove %(device)s from " @@ -11977,430 +12754,449 @@ msgstr "" "Вы действительно хотите удалить %(device)s из " "%(device_bay)s?" -#: templates/dcim/devicebay_populate.html:13 +#: netbox/templates/dcim/devicebay_populate.html:13 msgid "Populate" msgstr "Заселить" -#: templates/dcim/devicebay_populate.html:22 +#: netbox/templates/dcim/devicebay_populate.html:22 msgid "Bay" msgstr "залив" -#: templates/dcim/devicerole.html:14 templates/dcim/platform.html:17 +#: netbox/templates/dcim/devicerole.html:14 +#: netbox/templates/dcim/platform.html:17 msgid "Add Device" msgstr "Добавить устройство" -#: templates/dcim/devicerole.html:40 +#: netbox/templates/dcim/devicerole.html:40 msgid "VM Role" msgstr "Роль виртуальной машины" -#: templates/dcim/devicetype.html:18 templates/dcim/moduletype.html:29 +#: netbox/templates/dcim/devicetype.html:18 +#: netbox/templates/dcim/moduletype.html:29 msgid "Model Name" msgstr "Название модели" -#: templates/dcim/devicetype.html:25 templates/dcim/moduletype.html:33 +#: netbox/templates/dcim/devicetype.html:25 +#: netbox/templates/dcim/moduletype.html:33 msgid "Part Number" msgstr "Номер детали" -#: templates/dcim/devicetype.html:41 +#: netbox/templates/dcim/devicetype.html:41 msgid "Exclude From Utilization" msgstr "Исключить из использования" -#: templates/dcim/devicetype.html:59 +#: netbox/templates/dcim/devicetype.html:59 msgid "Parent/Child" msgstr "Родитель/ребенок" -#: templates/dcim/devicetype.html:71 +#: netbox/templates/dcim/devicetype.html:71 msgid "Front Image" msgstr "Изображение спереди" -#: templates/dcim/devicetype.html:83 +#: netbox/templates/dcim/devicetype.html:83 msgid "Rear Image" msgstr "Изображение сзади" -#: templates/dcim/frontport.html:54 +#: netbox/templates/dcim/frontport.html:54 msgid "Rear Port Position" msgstr "Положение заднего порта" -#: templates/dcim/frontport.html:72 templates/dcim/interface.html:144 -#: templates/dcim/poweroutlet.html:63 templates/dcim/powerport.html:63 -#: templates/dcim/rearport.html:68 +#: netbox/templates/dcim/frontport.html:72 +#: netbox/templates/dcim/interface.html:144 +#: netbox/templates/dcim/poweroutlet.html:63 +#: netbox/templates/dcim/powerport.html:63 +#: netbox/templates/dcim/rearport.html:68 msgid "Marked as Connected" msgstr "Отмечено как подключенное" -#: templates/dcim/frontport.html:86 templates/dcim/rearport.html:82 +#: netbox/templates/dcim/frontport.html:86 +#: netbox/templates/dcim/rearport.html:82 msgid "Connection Status" msgstr "Состояние подключения" -#: templates/dcim/htmx/cable_edit.html:10 +#: netbox/templates/dcim/htmx/cable_edit.html:10 msgid "A Side" msgstr "Сторона «А»" -#: templates/dcim/htmx/cable_edit.html:30 +#: netbox/templates/dcim/htmx/cable_edit.html:30 msgid "B Side" msgstr "Сторона «Б»" -#: templates/dcim/inc/cable_termination.html:65 +#: netbox/templates/dcim/inc/cable_termination.html:65 msgid "No termination" msgstr "Без окончания" -#: templates/dcim/inc/cable_toggle_buttons.html:3 +#: netbox/templates/dcim/inc/cable_toggle_buttons.html:3 msgid "Mark Planned" msgstr "Отметить как запланированное" -#: templates/dcim/inc/cable_toggle_buttons.html:6 +#: netbox/templates/dcim/inc/cable_toggle_buttons.html:6 msgid "Mark Installed" msgstr "Отметить как установленное" -#: templates/dcim/inc/connection_endpoints.html:13 +#: netbox/templates/dcim/inc/connection_endpoints.html:13 msgid "Path Status" msgstr "Состояние пути" -#: templates/dcim/inc/connection_endpoints.html:18 +#: netbox/templates/dcim/inc/connection_endpoints.html:18 msgid "Not Reachable" msgstr "Недоступно" -#: templates/dcim/inc/connection_endpoints.html:23 +#: netbox/templates/dcim/inc/connection_endpoints.html:23 msgid "Path Endpoints" msgstr "Конечные точки пути" -#: templates/dcim/inc/endpoint_connection.html:8 -#: templates/dcim/powerfeed.html:120 templates/dcim/rearport.html:94 +#: netbox/templates/dcim/inc/endpoint_connection.html:8 +#: netbox/templates/dcim/powerfeed.html:120 +#: netbox/templates/dcim/rearport.html:94 msgid "Not connected" msgstr "Не подключено" -#: templates/dcim/inc/interface_vlans_table.html:6 +#: netbox/templates/dcim/inc/interface_vlans_table.html:6 msgid "Untagged" msgstr "Без тегов" -#: templates/dcim/inc/interface_vlans_table.html:37 +#: netbox/templates/dcim/inc/interface_vlans_table.html:37 msgid "No VLANs Assigned" -msgstr "VLAN не назначены" +msgstr "VLAN-ы не назначены" -#: templates/dcim/inc/interface_vlans_table.html:44 -#: templates/ipam/prefix_list.html:16 templates/ipam/prefix_list.html:33 +#: netbox/templates/dcim/inc/interface_vlans_table.html:44 +#: netbox/templates/ipam/prefix_list.html:16 +#: netbox/templates/ipam/prefix_list.html:33 msgid "Clear" msgstr "Чисто" -#: templates/dcim/inc/interface_vlans_table.html:47 +#: netbox/templates/dcim/inc/interface_vlans_table.html:47 msgid "Clear All" msgstr "Очистить все" -#: templates/dcim/inc/panels/racktype_dimensions.html:38 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:38 msgid "Mounting Depth" msgstr "Глубина монтажа" -#: templates/dcim/inc/panels/racktype_numbering.html:6 +#: netbox/templates/dcim/inc/panels/racktype_numbering.html:6 msgid "Starting Unit" msgstr "Начальный юнит" -#: templates/dcim/inc/panels/racktype_numbering.html:10 +#: netbox/templates/dcim/inc/panels/racktype_numbering.html:10 msgid "Descending Units" msgstr "Единицы по убыванию" -#: templates/dcim/inc/rack_elevation.html:3 +#: netbox/templates/dcim/inc/rack_elevation.html:3 msgid "Rack elevation" msgstr "Высота стойки" -#: templates/dcim/interface.html:17 +#: netbox/templates/dcim/interface.html:17 msgid "Add Child Interface" msgstr "Добавить дочерний интерфейс" -#: templates/dcim/interface.html:50 +#: netbox/templates/dcim/interface.html:50 msgid "Speed/Duplex" msgstr "Скорость/дуплекс" -#: templates/dcim/interface.html:73 +#: netbox/templates/dcim/interface.html:73 msgid "PoE Mode" msgstr "Режим PoE" -#: templates/dcim/interface.html:77 +#: netbox/templates/dcim/interface.html:77 msgid "PoE Type" msgstr "Тип PoE" -#: templates/dcim/interface.html:81 -#: templates/virtualization/vminterface.html:63 +#: netbox/templates/dcim/interface.html:81 +#: netbox/templates/virtualization/vminterface.html:63 msgid "802.1Q Mode" msgstr "Режим 802.1Q" -#: templates/dcim/interface.html:125 -#: templates/virtualization/vminterface.html:59 +#: netbox/templates/dcim/interface.html:125 +#: netbox/templates/virtualization/vminterface.html:59 msgid "MAC Address" msgstr "MAC-адрес" -#: templates/dcim/interface.html:151 +#: netbox/templates/dcim/interface.html:151 msgid "Wireless Link" msgstr "Беспроводная связь" -#: templates/dcim/interface.html:218 vpn/choices.py:55 +#: netbox/templates/dcim/interface.html:218 netbox/vpn/choices.py:63 msgid "Peer" msgstr "Peer" -#: templates/dcim/interface.html:230 -#: templates/wireless/inc/wirelesslink_interface.html:26 +#: netbox/templates/dcim/interface.html:230 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:26 msgid "Channel" msgstr "Канал" -#: templates/dcim/interface.html:239 -#: templates/wireless/inc/wirelesslink_interface.html:32 +#: netbox/templates/dcim/interface.html:239 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:32 msgid "Channel Frequency" msgstr "Частота канала" -#: templates/dcim/interface.html:242 templates/dcim/interface.html:250 -#: templates/dcim/interface.html:261 templates/dcim/interface.html:269 +#: netbox/templates/dcim/interface.html:242 +#: netbox/templates/dcim/interface.html:250 +#: netbox/templates/dcim/interface.html:261 +#: netbox/templates/dcim/interface.html:269 msgid "MHz" msgstr "МГц" -#: templates/dcim/interface.html:258 -#: templates/wireless/inc/wirelesslink_interface.html:42 +#: netbox/templates/dcim/interface.html:258 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:42 msgid "Channel Width" msgstr "Ширина канала" -#: templates/dcim/interface.html:285 templates/wireless/wirelesslan.html:14 -#: templates/wireless/wirelesslink.html:21 wireless/forms/bulk_edit.py:60 -#: wireless/forms/bulk_edit.py:102 wireless/forms/filtersets.py:40 -#: wireless/forms/filtersets.py:80 wireless/models.py:82 -#: wireless/models.py:156 wireless/tables/wirelesslan.py:44 +#: netbox/templates/dcim/interface.html:285 +#: netbox/templates/wireless/wirelesslan.html:14 +#: netbox/templates/wireless/wirelesslink.html:21 +#: netbox/wireless/forms/bulk_edit.py:60 +#: netbox/wireless/forms/bulk_edit.py:102 +#: netbox/wireless/forms/filtersets.py:40 +#: netbox/wireless/forms/filtersets.py:80 netbox/wireless/models.py:82 +#: netbox/wireless/models.py:156 netbox/wireless/tables/wirelesslan.py:44 msgid "SSID" msgstr "SSID" -#: templates/dcim/interface.html:305 +#: netbox/templates/dcim/interface.html:305 msgid "LAG Members" msgstr "Члены LAG" -#: templates/dcim/interface.html:323 +#: netbox/templates/dcim/interface.html:323 msgid "No member interfaces" msgstr "Нет интерфейсов участников" -#: templates/dcim/interface.html:343 templates/ipam/fhrpgroup.html:73 -#: templates/ipam/iprange/ip_addresses.html:7 -#: templates/ipam/prefix/ip_addresses.html:7 -#: templates/virtualization/vminterface.html:89 +#: netbox/templates/dcim/interface.html:343 +#: netbox/templates/ipam/fhrpgroup.html:73 +#: netbox/templates/ipam/iprange/ip_addresses.html:7 +#: netbox/templates/ipam/prefix/ip_addresses.html:7 +#: netbox/templates/virtualization/vminterface.html:89 msgid "Add IP Address" msgstr "Добавить IP-адрес" -#: templates/dcim/inventoryitem.html:24 +#: netbox/templates/dcim/inventoryitem.html:24 msgid "Parent Item" msgstr "Родительский товар" -#: templates/dcim/inventoryitem.html:48 +#: netbox/templates/dcim/inventoryitem.html:48 msgid "Part ID" msgstr "Номер модели" -#: templates/dcim/location.html:17 +#: netbox/templates/dcim/location.html:17 msgid "Add Child Location" msgstr "Добавить Дочернюю Локацию" -#: templates/dcim/location.html:77 +#: netbox/templates/dcim/location.html:77 msgid "Child Locations" msgstr "Дочерние Локации" -#: templates/dcim/location.html:81 templates/dcim/site.html:131 +#: netbox/templates/dcim/location.html:81 netbox/templates/dcim/site.html:131 msgid "Add a Location" msgstr "Добавить Локацию" -#: templates/dcim/location.html:94 templates/dcim/site.html:144 +#: netbox/templates/dcim/location.html:94 netbox/templates/dcim/site.html:144 msgid "Add a Device" msgstr "Добавить устройство" -#: templates/dcim/manufacturer.html:16 +#: netbox/templates/dcim/manufacturer.html:16 msgid "Add Device Type" msgstr "Добавить тип устройства" -#: templates/dcim/manufacturer.html:21 +#: netbox/templates/dcim/manufacturer.html:21 msgid "Add Module Type" msgstr "Добавить тип модуля" -#: templates/dcim/powerfeed.html:53 +#: netbox/templates/dcim/powerfeed.html:53 msgid "Connected Device" msgstr "Подключенное устройство" -#: templates/dcim/powerfeed.html:63 +#: netbox/templates/dcim/powerfeed.html:63 msgid "Utilization (Allocated" msgstr "Использование (распределенное)" -#: templates/dcim/powerfeed.html:80 +#: netbox/templates/dcim/powerfeed.html:80 msgid "Electrical Characteristics" msgstr "Электрические характеристики" -#: templates/dcim/powerfeed.html:88 +#: netbox/templates/dcim/powerfeed.html:88 msgctxt "Abbreviation for volts" msgid "V" msgstr "V" -#: templates/dcim/powerfeed.html:92 +#: netbox/templates/dcim/powerfeed.html:92 msgctxt "Abbreviation for amperes" msgid "A" msgstr "A" -#: templates/dcim/poweroutlet.html:48 +#: netbox/templates/dcim/poweroutlet.html:48 msgid "Feed Leg" msgstr "Фаза электропитания" -#: templates/dcim/powerpanel.html:72 +#: netbox/templates/dcim/powerpanel.html:72 msgid "Add Power Feeds" -msgstr "Добавить каналы питания" +msgstr "Добавить кабели питания" -#: templates/dcim/powerport.html:44 +#: netbox/templates/dcim/powerport.html:44 msgid "Maximum Draw" msgstr "Максимальное потребление" -#: templates/dcim/powerport.html:48 +#: netbox/templates/dcim/powerport.html:48 msgid "Allocated Draw" msgstr "Выделенная мощность" -#: templates/dcim/rack.html:69 +#: netbox/templates/dcim/rack.html:69 msgid "Space Utilization" msgstr "Использование пространства" -#: templates/dcim/rack.html:84 templates/dcim/racktype.html:44 +#: netbox/templates/dcim/rack.html:84 netbox/templates/dcim/racktype.html:44 msgid "Rack Weight" msgstr "Вес стойки" -#: templates/dcim/rack.html:94 templates/dcim/racktype.html:54 +#: netbox/templates/dcim/rack.html:94 netbox/templates/dcim/racktype.html:54 msgid "Maximum Weight" msgstr "Максимальный вес" -#: templates/dcim/rack.html:104 +#: netbox/templates/dcim/rack.html:104 msgid "Total Weight" msgstr "Общий вес" -#: templates/dcim/rack.html:125 templates/dcim/rack_elevation_list.html:15 +#: netbox/templates/dcim/rack.html:125 +#: netbox/templates/dcim/rack_elevation_list.html:15 msgid "Images and Labels" msgstr "Изображения и лейблы" -#: templates/dcim/rack.html:126 templates/dcim/rack_elevation_list.html:16 +#: netbox/templates/dcim/rack.html:126 +#: netbox/templates/dcim/rack_elevation_list.html:16 msgid "Images only" msgstr "Только изображения" -#: templates/dcim/rack.html:127 templates/dcim/rack_elevation_list.html:17 +#: netbox/templates/dcim/rack.html:127 +#: netbox/templates/dcim/rack_elevation_list.html:17 msgid "Labels only" msgstr "Только лейблы" -#: templates/dcim/rack/reservations.html:8 +#: netbox/templates/dcim/rack/reservations.html:8 msgid "Add reservation" msgstr "Добавить бронирование" -#: templates/dcim/rack_elevation_list.html:12 +#: netbox/templates/dcim/rack_elevation_list.html:12 msgid "View List" msgstr "Показать список" -#: templates/dcim/rack_elevation_list.html:14 +#: netbox/templates/dcim/rack_elevation_list.html:14 msgid "Select rack view" msgstr "Выберите вид стойки" -#: templates/dcim/rack_elevation_list.html:25 +#: netbox/templates/dcim/rack_elevation_list.html:25 msgid "Sort By" msgstr "Сортировать по" -#: templates/dcim/rack_elevation_list.html:74 +#: netbox/templates/dcim/rack_elevation_list.html:74 msgid "No Racks Found" msgstr "Стойки не найдены" -#: templates/dcim/rack_list.html:8 +#: netbox/templates/dcim/rack_list.html:8 msgid "View Elevations" msgstr "Просмотр высот" -#: templates/dcim/rackreservation.html:42 +#: netbox/templates/dcim/rackreservation.html:42 msgid "Reservation Details" msgstr "Сведения о бронировании" -#: templates/dcim/rackrole.html:10 +#: netbox/templates/dcim/rackrole.html:10 msgid "Add Rack" msgstr "Добавить стойку" -#: templates/dcim/rearport.html:50 +#: netbox/templates/dcim/rearport.html:50 msgid "Positions" msgstr "Позиции" -#: templates/dcim/region.html:17 templates/dcim/sitegroup.html:17 +#: netbox/templates/dcim/region.html:17 +#: netbox/templates/dcim/sitegroup.html:17 msgid "Add Site" msgstr "Добавить сайт" -#: templates/dcim/region.html:55 +#: netbox/templates/dcim/region.html:55 msgid "Child Regions" msgstr "Дочерние регионы" -#: templates/dcim/region.html:59 +#: netbox/templates/dcim/region.html:59 msgid "Add Region" msgstr "Добавить регион" -#: templates/dcim/site.html:64 +#: netbox/templates/dcim/site.html:64 msgid "Time Zone" msgstr "Часовой пояс" -#: templates/dcim/site.html:67 +#: netbox/templates/dcim/site.html:67 msgid "UTC" msgstr "UTC" -#: templates/dcim/site.html:68 +#: netbox/templates/dcim/site.html:68 msgid "Site time" msgstr "Время работы сайта" -#: templates/dcim/site.html:75 +#: netbox/templates/dcim/site.html:75 msgid "Physical Address" msgstr "Физический адрес" -#: templates/dcim/site.html:90 +#: netbox/templates/dcim/site.html:90 msgid "Shipping Address" msgstr "Адрес доставки" -#: templates/dcim/sitegroup.html:55 templates/tenancy/contactgroup.html:46 -#: templates/tenancy/tenantgroup.html:55 -#: templates/wireless/wirelesslangroup.html:55 +#: netbox/templates/dcim/sitegroup.html:55 +#: netbox/templates/tenancy/contactgroup.html:46 +#: netbox/templates/tenancy/tenantgroup.html:55 +#: netbox/templates/wireless/wirelesslangroup.html:55 msgid "Child Groups" msgstr "Дочерние группы" -#: templates/dcim/sitegroup.html:59 +#: netbox/templates/dcim/sitegroup.html:59 msgid "Add Site Group" msgstr "Добавить группу сайтов" -#: templates/dcim/trace/attachment.html:5 -#: templates/extras/exporttemplate.html:31 +#: netbox/templates/dcim/trace/attachment.html:5 +#: netbox/templates/extras/exporttemplate.html:31 msgid "Attachment" msgstr "Вложение" -#: templates/dcim/virtualchassis.html:57 +#: netbox/templates/dcim/virtualchassis.html:57 msgid "Add Member" msgstr "Добавить участника" -#: templates/dcim/virtualchassis_add.html:18 +#: netbox/templates/dcim/virtualchassis_add.html:18 msgid "Member Devices" msgstr "Устройства для участников" -#: templates/dcim/virtualchassis_add_member.html:10 +#: netbox/templates/dcim/virtualchassis_add_member.html:10 #, python-format msgid "Add New Member to Virtual Chassis %(virtual_chassis)s" msgstr "Добавить нового участника в виртуальное шасси %(virtual_chassis)s" -#: templates/dcim/virtualchassis_add_member.html:19 +#: netbox/templates/dcim/virtualchassis_add_member.html:19 msgid "Add New Member" msgstr "Добавить нового участника" -#: templates/dcim/virtualchassis_add_member.html:27 -#: templates/generic/object_edit.html:78 -#: templates/users/objectpermission.html:31 users/forms/filtersets.py:67 -#: users/forms/model_forms.py:312 +#: netbox/templates/dcim/virtualchassis_add_member.html:27 +#: netbox/templates/generic/object_edit.html:78 +#: netbox/templates/users/objectpermission.html:31 +#: netbox/users/forms/filtersets.py:67 netbox/users/forms/model_forms.py:312 msgid "Actions" msgstr "Действия" -#: templates/dcim/virtualchassis_add_member.html:29 +#: netbox/templates/dcim/virtualchassis_add_member.html:29 msgid "Save & Add Another" msgstr "Сохранить и добавить еще" -#: templates/dcim/virtualchassis_edit.html:7 +#: netbox/templates/dcim/virtualchassis_edit.html:7 #, python-format msgid "Editing Virtual Chassis %(name)s" msgstr "Редактирование виртуального корпуса %(name)s" -#: templates/dcim/virtualchassis_edit.html:53 +#: netbox/templates/dcim/virtualchassis_edit.html:53 msgid "Rack/Unit" msgstr "Стойка/Юнит" -#: templates/dcim/virtualchassis_remove_member.html:5 +#: netbox/templates/dcim/virtualchassis_remove_member.html:5 msgid "Remove Virtual Chassis Member" msgstr "Удалить элемент виртуального шасси" -#: templates/dcim/virtualchassis_remove_member.html:9 +#: netbox/templates/dcim/virtualchassis_remove_member.html:9 #, python-format msgid "" "Are you sure you want to remove %(device)s from virtual " @@ -12409,11 +13205,12 @@ msgstr "" "Вы действительно хотите удалить %(device)s из виртуального " "шасси %(name)s?" -#: templates/dcim/virtualdevicecontext.html:26 templates/vpn/l2vpn.html:18 +#: netbox/templates/dcim/virtualdevicecontext.html:26 +#: netbox/templates/vpn/l2vpn.html:18 msgid "Identifier" msgstr "Идентификатор" -#: templates/exceptions/import_error.html:6 +#: netbox/templates/exceptions/import_error.html:6 msgid "" "A module import error occurred during this request. Common causes include " "the following:" @@ -12421,11 +13218,11 @@ msgstr "" "Во время этого запроса произошла ошибка импорта модуля. К распространенным " "причинам относятся следующие:" -#: templates/exceptions/import_error.html:10 +#: netbox/templates/exceptions/import_error.html:10 msgid "Missing required packages" msgstr "Отсутствуют необходимые пакеты" -#: templates/exceptions/import_error.html:11 +#: netbox/templates/exceptions/import_error.html:11 msgid "" "This installation of NetBox might be missing one or more required Python " "packages. These packages are listed in requirements.txt and " @@ -12441,11 +13238,11 @@ msgstr "" "запустите замораживание губ из консоли и сравните выходные " "данные со списком необходимых пакетов." -#: templates/exceptions/import_error.html:20 +#: netbox/templates/exceptions/import_error.html:20 msgid "WSGI service not restarted after upgrade" msgstr "Служба WSGI не перезапущена после обновления" -#: templates/exceptions/import_error.html:21 +#: netbox/templates/exceptions/import_error.html:21 msgid "" "If this installation has recently been upgraded, check that the WSGI service" " (e.g. gunicorn or uWSGI) has been restarted. This ensures that the new code" @@ -12455,7 +13252,7 @@ msgstr "" "(например, gunicorn или uWSGI) перезапущена. Это гарантирует, что новый код " "работает." -#: templates/exceptions/permission_error.html:6 +#: netbox/templates/exceptions/permission_error.html:6 msgid "" "A file permission error was detected while processing this request. Common " "causes include the following:" @@ -12463,11 +13260,11 @@ msgstr "" "При обработке этого запроса была обнаружена ошибка разрешения на доступ к " "файлу. К распространенным причинам относятся следующие:" -#: templates/exceptions/permission_error.html:10 +#: netbox/templates/exceptions/permission_error.html:10 msgid "Insufficient write permission to the media root" msgstr "Недостаточное разрешение на запись в корень носителя" -#: templates/exceptions/permission_error.html:11 +#: netbox/templates/exceptions/permission_error.html:11 #, python-format msgid "" "The configured media root is %(media_root)s. Ensure that the " @@ -12478,7 +13275,7 @@ msgstr "" "пользователь NetBox, запущенный от имени пользователя, имеет доступ к записи" " файлов во все места на этом пути." -#: templates/exceptions/programming_error.html:6 +#: netbox/templates/exceptions/programming_error.html:6 msgid "" "A database programming error was detected while processing this request. " "Common causes include the following:" @@ -12486,11 +13283,11 @@ msgstr "" "При обработке этого запроса была обнаружена ошибка программирования базы " "данных. К распространенным причинам относятся следующие:" -#: templates/exceptions/programming_error.html:10 +#: netbox/templates/exceptions/programming_error.html:10 msgid "Database migrations missing" msgstr "Отсутствует миграция баз данных" -#: templates/exceptions/programming_error.html:11 +#: netbox/templates/exceptions/programming_error.html:11 msgid "" "When upgrading to a new NetBox release, the upgrade script must be run to " "apply any new database migrations. You can run migrations manually by " @@ -12501,11 +13298,11 @@ msgstr "" "запустить вручную, выполнив Миграция manage.py на python3 из " "командной строки." -#: templates/exceptions/programming_error.html:18 +#: netbox/templates/exceptions/programming_error.html:18 msgid "Unsupported PostgreSQL version" msgstr "Неподдерживаемая версия PostgreSQL" -#: templates/exceptions/programming_error.html:19 +#: netbox/templates/exceptions/programming_error.html:19 msgid "" "Ensure that PostgreSQL version 12 or later is in use. You can check this by " "connecting to the database using NetBox's credentials and issuing a query " @@ -12515,99 +13312,102 @@ msgstr "" "можете проверить это, подключившись к базе данных NetBox, и отправив запрос " "на ВЫБЕРИТЕ ВЕРСИЮ ()." -#: templates/extras/configcontext.html:45 -#: templates/extras/configtemplate.html:37 -#: templates/extras/exporttemplate.html:51 +#: netbox/templates/extras/configcontext.html:45 +#: netbox/templates/extras/configtemplate.html:37 +#: netbox/templates/extras/exporttemplate.html:51 msgid "The data file associated with this object has been deleted" msgstr "Файл данных, связанный с этим объектом, был удален" -#: templates/extras/configcontext.html:54 -#: templates/extras/configtemplate.html:46 -#: templates/extras/exporttemplate.html:60 +#: netbox/templates/extras/configcontext.html:54 +#: netbox/templates/extras/configtemplate.html:46 +#: netbox/templates/extras/exporttemplate.html:60 msgid "Data Synced" msgstr "Синхронизация данных" -#: templates/extras/configcontext_list.html:7 -#: templates/extras/configtemplate_list.html:7 -#: templates/extras/exporttemplate_list.html:7 +#: netbox/templates/extras/configcontext_list.html:7 +#: netbox/templates/extras/configtemplate_list.html:7 +#: netbox/templates/extras/exporttemplate_list.html:7 msgid "Sync Data" msgstr "Синхронизация данных" -#: templates/extras/configtemplate.html:56 +#: netbox/templates/extras/configtemplate.html:56 msgid "Environment Parameters" msgstr "Параметры окружающей среды" -#: templates/extras/configtemplate.html:67 -#: templates/extras/exporttemplate.html:79 +#: netbox/templates/extras/configtemplate.html:67 +#: netbox/templates/extras/exporttemplate.html:79 msgid "Template" msgstr "Шаблон" -#: templates/extras/customfield.html:30 templates/extras/customlink.html:21 +#: netbox/templates/extras/customfield.html:30 +#: netbox/templates/extras/customlink.html:21 msgid "Group Name" msgstr "Название группы" -#: templates/extras/customfield.html:42 +#: netbox/templates/extras/customfield.html:42 msgid "Must be Unique" msgstr "Должен быть уникальным" -#: templates/extras/customfield.html:46 +#: netbox/templates/extras/customfield.html:46 msgid "Cloneable" msgstr "Клонируемый" -#: templates/extras/customfield.html:56 +#: netbox/templates/extras/customfield.html:56 msgid "Default Value" msgstr "Значение по умолчанию" -#: templates/extras/customfield.html:73 +#: netbox/templates/extras/customfield.html:73 msgid "Search Weight" msgstr "Вес поиска" -#: templates/extras/customfield.html:83 +#: netbox/templates/extras/customfield.html:83 msgid "Filter Logic" msgstr "Логика фильтрации" -#: templates/extras/customfield.html:87 +#: netbox/templates/extras/customfield.html:87 msgid "Display Weight" msgstr "Вес дисплея" -#: templates/extras/customfield.html:91 +#: netbox/templates/extras/customfield.html:91 msgid "UI Visible" msgstr "Видимый пользовательский интерфейс" -#: templates/extras/customfield.html:95 +#: netbox/templates/extras/customfield.html:95 msgid "UI Editable" msgstr "Редактируемый UI" -#: templates/extras/customfield.html:115 +#: netbox/templates/extras/customfield.html:115 msgid "Validation Rules" msgstr "Правила валидации" -#: templates/extras/customfield.html:126 +#: netbox/templates/extras/customfield.html:126 msgid "Regular Expression" msgstr "Регулярное выражение" -#: templates/extras/customlink.html:29 +#: netbox/templates/extras/customlink.html:29 msgid "Button Class" msgstr "Класс кнопок" -#: templates/extras/customlink.html:39 templates/extras/exporttemplate.html:66 -#: templates/extras/savedfilter.html:39 +#: netbox/templates/extras/customlink.html:39 +#: netbox/templates/extras/exporttemplate.html:66 +#: netbox/templates/extras/savedfilter.html:39 msgid "Assigned Models" msgstr "Назначенные модели" -#: templates/extras/customlink.html:52 +#: netbox/templates/extras/customlink.html:52 msgid "Link Text" msgstr "Текст ссылки" -#: templates/extras/customlink.html:58 +#: netbox/templates/extras/customlink.html:58 msgid "Link URL" msgstr "URL-адрес ссылки" -#: templates/extras/dashboard/reset.html:4 templates/home.html:66 +#: netbox/templates/extras/dashboard/reset.html:4 +#: netbox/templates/home.html:66 msgid "Reset Dashboard" msgstr "Сбросить панель управления" -#: templates/extras/dashboard/reset.html:8 +#: netbox/templates/extras/dashboard/reset.html:8 msgid "" "This will remove all configured widgets and restore the " "default dashboard configuration." @@ -12615,7 +13415,7 @@ msgstr "" "Это удалит все настроенные виджеты и восстановит настройку " "панели по умолчанию." -#: templates/extras/dashboard/reset.html:13 +#: netbox/templates/extras/dashboard/reset.html:13 msgid "" "This change affects only your dashboard, and will not impact other " "users." @@ -12623,154 +13423,161 @@ msgstr "" "Это изменение затрагивает только ваш панель управления и не повлияет " "на других пользователей." -#: templates/extras/dashboard/widget.html:21 +#: netbox/templates/extras/dashboard/widget.html:21 msgid "widget configuration" msgstr "конфигурация виджета" -#: templates/extras/dashboard/widget.html:36 +#: netbox/templates/extras/dashboard/widget.html:36 msgid "Close widget" msgstr "Закрыть виджет" -#: templates/extras/dashboard/widget_add.html:7 +#: netbox/templates/extras/dashboard/widget_add.html:7 msgid "Add a Widget" msgstr "Добавить виджет" -#: templates/extras/dashboard/widgets/bookmarks.html:14 +#: netbox/templates/extras/dashboard/widgets/bookmarks.html:14 msgid "No bookmarks have been added yet." msgstr "Пока не добавлено ни одной закладки." -#: templates/extras/dashboard/widgets/objectcounts.html:10 +#: netbox/templates/extras/dashboard/widgets/objectcounts.html:10 msgid "No permission" msgstr "Нет прав" -#: templates/extras/dashboard/widgets/objectlist.html:6 +#: netbox/templates/extras/dashboard/widgets/objectlist.html:6 msgid "No permission to view this content" msgstr "Нет прав на просмотр этого контента" -#: templates/extras/dashboard/widgets/objectlist.html:10 +#: netbox/templates/extras/dashboard/widgets/objectlist.html:10 msgid "Unable to load content. Invalid view name" msgstr "Невозможно загрузить содержимое. Неверное имя" -#: templates/extras/dashboard/widgets/rssfeed.html:12 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:12 msgid "No content found" msgstr "Контент не найден" -#: templates/extras/dashboard/widgets/rssfeed.html:18 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:18 msgid "There was a problem fetching the RSS feed" msgstr "Возникла проблема при загрузке RSS-канала" -#: templates/extras/dashboard/widgets/rssfeed.html:21 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:21 msgid "HTTP" msgstr "HTTP" -#: templates/extras/eventrule.html:61 +#: netbox/templates/extras/eventrule.html:61 msgid "Conditions" msgstr "условия" -#: templates/extras/exporttemplate.html:23 +#: netbox/templates/extras/exporttemplate.html:23 msgid "MIME Type" msgstr "Тип MIME" -#: templates/extras/exporttemplate.html:27 +#: netbox/templates/extras/exporttemplate.html:27 msgid "File Extension" msgstr "Расширение файла" -#: templates/extras/htmx/script_result.html:10 +#: netbox/templates/extras/htmx/script_result.html:10 msgid "Scheduled for" msgstr "Запланировано на" -#: templates/extras/htmx/script_result.html:15 +#: netbox/templates/extras/htmx/script_result.html:15 msgid "Duration" msgstr "Продолжительность" -#: templates/extras/htmx/script_result.html:23 +#: netbox/templates/extras/htmx/script_result.html:23 msgid "Test Summary" msgstr "Сводка теста" -#: templates/extras/htmx/script_result.html:43 +#: netbox/templates/extras/htmx/script_result.html:43 msgid "Log" msgstr "Журнал" -#: templates/extras/htmx/script_result.html:56 +#: netbox/templates/extras/htmx/script_result.html:56 msgid "Output" msgstr "Вывод" -#: templates/extras/inc/result_pending.html:4 +#: netbox/templates/extras/inc/result_pending.html:4 msgid "Loading" msgstr "Загрузка" -#: templates/extras/inc/result_pending.html:6 +#: netbox/templates/extras/inc/result_pending.html:6 msgid "Results pending" msgstr "Результаты ожидаются" -#: templates/extras/journalentry.html:15 +#: netbox/templates/extras/journalentry.html:15 msgid "Journal Entry" msgstr "Запись в журнале" -#: templates/extras/notificationgroup.html:11 +#: netbox/templates/extras/notificationgroup.html:11 msgid "Notification Group" msgstr "Группа уведомлений" -#: templates/extras/notificationgroup.html:36 -#: templates/extras/notificationgroup.html:46 -#: utilities/templates/widgets/clearable_file_input.html:12 +#: netbox/templates/extras/notificationgroup.html:36 +#: netbox/templates/extras/notificationgroup.html:46 +#: netbox/utilities/templates/widgets/clearable_file_input.html:12 msgid "None assigned" msgstr "Ничего не назначено" -#: templates/extras/object_configcontext.html:19 +#: netbox/templates/extras/object_configcontext.html:19 msgid "The local config context overwrites all source contexts" msgstr "Локальный контекст конфигурации перезаписывает все исходные контексты" -#: templates/extras/object_configcontext.html:25 +#: netbox/templates/extras/object_configcontext.html:25 msgid "Source Contexts" msgstr "Исходные контексты" -#: templates/extras/object_journal.html:17 +#: netbox/templates/extras/object_journal.html:17 msgid "New Journal Entry" msgstr "Новая запись в журнале" -#: templates/extras/report/base.html:30 +#: netbox/templates/extras/report/base.html:30 msgid "Report" msgstr "Отчет" -#: templates/extras/script.html:14 +#: netbox/templates/extras/script.html:14 msgid "You do not have permission to run scripts" msgstr "У вас нет разрешения на запуск скриптов" -#: templates/extras/script.html:41 templates/extras/script.html:45 -#: templates/extras/script_list.html:86 +#: netbox/templates/extras/script.html:41 +#: netbox/templates/extras/script.html:45 +#: netbox/templates/extras/script_list.html:87 msgid "Run Script" msgstr "Запустить скрипт" -#: templates/extras/script.html:51 templates/extras/script/source.html:10 +#: netbox/templates/extras/script.html:51 +#: netbox/templates/extras/script/source.html:10 msgid "Error loading script" msgstr "Ошибка при загрузке скрипта" -#: templates/extras/script/jobs.html:16 +#: netbox/templates/extras/script/jobs.html:16 msgid "Script no longer exists in the source file." msgstr "Скрипт больше не существует в исходном файле." -#: templates/extras/script_list.html:46 +#: netbox/templates/extras/script_list.html:47 msgid "Last Run" msgstr "Последний запуск" -#: templates/extras/script_list.html:61 +#: netbox/templates/extras/script_list.html:62 msgid "Script is no longer present in the source file" msgstr "Скрипт больше не присутствует в исходном файле" -#: templates/extras/script_list.html:74 +#: netbox/templates/extras/script_list.html:75 msgid "Never" msgstr "Никогда" -#: templates/extras/script_list.html:84 +#: netbox/templates/extras/script_list.html:85 msgid "Run Again" msgstr "Повторить" -#: templates/extras/script_list.html:138 +#: netbox/templates/extras/script_list.html:133 +#, python-format +msgid "Could not load scripts from module %(module)s" +msgstr "Не удалось загрузить скрипты из модуля %(module)s" + +#: netbox/templates/extras/script_list.html:141 msgid "No Scripts Found" msgstr "Скрипты не найдены" -#: templates/extras/script_list.html:141 +#: netbox/templates/extras/script_list.html:144 #, python-format msgid "" "Get started by creating a script from " @@ -12779,81 +13586,83 @@ msgstr "" "Начните с создание сценария из " "загруженного файла или источника данных." -#: templates/extras/script_result.html:35 -#: templates/generic/object_list.html:50 templates/search.html:13 +#: netbox/templates/extras/script_result.html:35 +#: netbox/templates/generic/object_list.html:50 +#: netbox/templates/search.html:13 msgid "Results" msgstr "Результаты" -#: templates/extras/script_result.html:46 +#: netbox/templates/extras/script_result.html:46 msgid "Log threshold" msgstr "Пороговое значение журнала" -#: templates/extras/script_result.html:56 +#: netbox/templates/extras/script_result.html:56 msgid "All" msgstr "Все" -#: templates/extras/tag.html:32 +#: netbox/templates/extras/tag.html:32 msgid "Tagged Items" msgstr "Элементы с тэгом" -#: templates/extras/tag.html:43 +#: netbox/templates/extras/tag.html:43 msgid "Allowed Object Types" msgstr "Разрешенные типы объектов" -#: templates/extras/tag.html:51 +#: netbox/templates/extras/tag.html:51 msgid "Any" msgstr "Любое" -#: templates/extras/tag.html:57 +#: netbox/templates/extras/tag.html:57 msgid "Tagged Item Types" msgstr "Типы товаров с тегами" -#: templates/extras/tag.html:81 +#: netbox/templates/extras/tag.html:81 msgid "Tagged Objects" msgstr "Объекты с тегами" -#: templates/extras/webhook.html:26 +#: netbox/templates/extras/webhook.html:26 msgid "HTTP Method" msgstr "Метод HTTP" -#: templates/extras/webhook.html:34 +#: netbox/templates/extras/webhook.html:34 msgid "HTTP Content Type" msgstr "Тип содержимого HTTP" -#: templates/extras/webhook.html:47 +#: netbox/templates/extras/webhook.html:47 msgid "SSL Verification" msgstr "Проверка SSL" -#: templates/extras/webhook.html:60 +#: netbox/templates/extras/webhook.html:60 msgid "Additional Headers" msgstr "Дополнительные заголовки" -#: templates/extras/webhook.html:70 +#: netbox/templates/extras/webhook.html:70 msgid "Body Template" msgstr "Шаблон тела запроса" -#: templates/generic/bulk_add_component.html:29 +#: netbox/templates/generic/bulk_add_component.html:29 msgid "Bulk Creation" msgstr "Массовое создание" -#: templates/generic/bulk_add_component.html:34 -#: templates/generic/bulk_delete.html:32 templates/generic/bulk_edit.html:33 +#: netbox/templates/generic/bulk_add_component.html:34 +#: netbox/templates/generic/bulk_delete.html:32 +#: netbox/templates/generic/bulk_edit.html:33 msgid "Selected Objects" msgstr "Выбранные объекты" -#: templates/generic/bulk_add_component.html:58 +#: netbox/templates/generic/bulk_add_component.html:58 msgid "to Add" msgstr "добавить" -#: templates/generic/bulk_delete.html:27 +#: netbox/templates/generic/bulk_delete.html:27 msgid "Bulk Delete" msgstr "Массовое удаление" -#: templates/generic/bulk_delete.html:49 +#: netbox/templates/generic/bulk_delete.html:49 msgid "Confirm Bulk Deletion" msgstr "Подтвердить массовое удаление" -#: templates/generic/bulk_delete.html:50 +#: netbox/templates/generic/bulk_delete.html:50 #, python-format msgid "" "The following operation will delete %(count)s " @@ -12864,66 +13673,69 @@ msgstr "" "Пожалуйста, внимательно просмотрите выбранные объекты и подтвердите это " "действие." -#: templates/generic/bulk_edit.html:21 templates/generic/object_edit.html:22 +#: netbox/templates/generic/bulk_edit.html:21 +#: netbox/templates/generic/object_edit.html:22 msgid "Editing" msgstr "Редактирование" -#: templates/generic/bulk_edit.html:28 +#: netbox/templates/generic/bulk_edit.html:28 msgid "Bulk Edit" msgstr "Массовое редактирование" -#: templates/generic/bulk_edit.html:107 templates/generic/bulk_rename.html:66 +#: netbox/templates/generic/bulk_edit.html:107 +#: netbox/templates/generic/bulk_rename.html:66 msgid "Apply" msgstr "Подать заявку" -#: templates/generic/bulk_import.html:19 +#: netbox/templates/generic/bulk_import.html:19 msgid "Bulk Import" msgstr "Массовый импорт" -#: templates/generic/bulk_import.html:25 +#: netbox/templates/generic/bulk_import.html:25 msgid "Direct Import" msgstr "Прямой импорт" -#: templates/generic/bulk_import.html:30 +#: netbox/templates/generic/bulk_import.html:30 msgid "Upload File" msgstr "Загрузить файл" -#: templates/generic/bulk_import.html:58 templates/generic/bulk_import.html:80 -#: templates/generic/bulk_import.html:102 +#: netbox/templates/generic/bulk_import.html:58 +#: netbox/templates/generic/bulk_import.html:80 +#: netbox/templates/generic/bulk_import.html:102 msgid "Submit" msgstr "Отправить" -#: templates/generic/bulk_import.html:113 +#: netbox/templates/generic/bulk_import.html:113 msgid "Field Options" msgstr "Опции полей" -#: templates/generic/bulk_import.html:119 +#: netbox/templates/generic/bulk_import.html:119 msgid "Accessor" msgstr "Аксессор" -#: templates/generic/bulk_import.html:148 +#: netbox/templates/generic/bulk_import.html:148 msgid "choices" msgstr "выбор" -#: templates/generic/bulk_import.html:161 +#: netbox/templates/generic/bulk_import.html:161 msgid "Import Value" msgstr "Стоимость импорта" -#: templates/generic/bulk_import.html:181 +#: netbox/templates/generic/bulk_import.html:181 msgid "Format: YYYY-MM-DD" msgstr "Формат: ГГГГ-ММ-ДД" -#: templates/generic/bulk_import.html:183 +#: netbox/templates/generic/bulk_import.html:183 msgid "Specify true or false" msgstr "Укажите истину или ложь" -#: templates/generic/bulk_import.html:195 +#: netbox/templates/generic/bulk_import.html:195 msgid "Required fields must be specified for all objects." msgstr "" "Обязательные поля должен должно быть указано для всех " "объектов." -#: templates/generic/bulk_import.html:201 +#: netbox/templates/generic/bulk_import.html:201 #, python-format msgid "" "Related objects may be referenced by any unique attribute. For example, " @@ -12933,15 +13745,15 @@ msgstr "" "Например, %(example)s будет идентифицировать VRF по индикатору " "маршрута." -#: templates/generic/bulk_remove.html:28 +#: netbox/templates/generic/bulk_remove.html:28 msgid "Bulk Remove" msgstr "Массовое удаление" -#: templates/generic/bulk_remove.html:42 +#: netbox/templates/generic/bulk_remove.html:42 msgid "Confirm Bulk Removal" msgstr "Подтвердите массовое удаление" -#: templates/generic/bulk_remove.html:43 +#: netbox/templates/generic/bulk_remove.html:43 #, python-format msgid "" "The following operation will remove %(count)s %(obj_type_plural)s from " @@ -12952,72 +13764,72 @@ msgstr "" "Пожалуйста, внимательно ознакомьтесь с %(obj_type_plural)s должно быть " "удалено и подтверждено ниже." -#: templates/generic/bulk_remove.html:64 +#: netbox/templates/generic/bulk_remove.html:64 #, python-format msgid "Remove these %(count)s %(obj_type_plural)s" msgstr "Удалите эти %(count)s %(obj_type_plural)s" -#: templates/generic/bulk_rename.html:20 +#: netbox/templates/generic/bulk_rename.html:20 msgid "Renaming" msgstr "Переименование" -#: templates/generic/bulk_rename.html:27 +#: netbox/templates/generic/bulk_rename.html:27 msgid "Bulk Rename" msgstr "Массовое Переименование" -#: templates/generic/bulk_rename.html:39 +#: netbox/templates/generic/bulk_rename.html:39 msgid "Current Name" msgstr "Текущее Имя" -#: templates/generic/bulk_rename.html:40 +#: netbox/templates/generic/bulk_rename.html:40 msgid "New Name" msgstr "Новое Имя" -#: templates/generic/bulk_rename.html:64 -#: utilities/templates/widgets/markdown_input.html:11 +#: netbox/templates/generic/bulk_rename.html:64 +#: netbox/utilities/templates/widgets/markdown_input.html:11 msgid "Preview" msgstr "Предварительный просмотр" -#: templates/generic/confirmation_form.html:16 +#: netbox/templates/generic/confirmation_form.html:16 msgid "Are you sure" msgstr "Вы уверены" -#: templates/generic/confirmation_form.html:20 +#: netbox/templates/generic/confirmation_form.html:20 msgid "Confirm" msgstr "Подтвердить" -#: templates/generic/object_children.html:47 -#: utilities/templates/buttons/bulk_edit.html:4 +#: netbox/templates/generic/object_children.html:47 +#: netbox/utilities/templates/buttons/bulk_edit.html:4 msgid "Edit Selected" msgstr "Изменить выбранное" -#: templates/generic/object_children.html:61 -#: utilities/templates/buttons/bulk_delete.html:4 +#: netbox/templates/generic/object_children.html:61 +#: netbox/utilities/templates/buttons/bulk_delete.html:4 msgid "Delete Selected" msgstr "Удалить выбранное" -#: templates/generic/object_edit.html:24 +#: netbox/templates/generic/object_edit.html:24 #, python-format msgid "Add a new %(object_type)s" msgstr "Добавить новое %(object_type)s" -#: templates/generic/object_edit.html:35 +#: netbox/templates/generic/object_edit.html:35 msgid "View model documentation" msgstr "Смотреть документацию по модели" -#: templates/generic/object_edit.html:36 +#: netbox/templates/generic/object_edit.html:36 msgid "Help" msgstr "Помощь" -#: templates/generic/object_edit.html:83 +#: netbox/templates/generic/object_edit.html:83 msgid "Create & Add Another" msgstr "Создать и добавить еще" -#: templates/generic/object_list.html:57 +#: netbox/templates/generic/object_list.html:57 msgid "Filters" msgstr "Фильтры" -#: templates/generic/object_list.html:88 +#: netbox/templates/generic/object_list.html:88 #, python-format msgid "" "Select all %(count)s " @@ -13026,40 +13838,40 @@ msgstr "" "Выберите все %(count)s " "%(object_type_plural)s соответствующий запрос" -#: templates/home.html:15 +#: netbox/templates/home.html:15 msgid "New Release Available" msgstr "Доступен новый релиз" -#: templates/home.html:16 +#: netbox/templates/home.html:16 msgid "is available" msgstr "доступен" -#: templates/home.html:18 +#: netbox/templates/home.html:18 msgctxt "Document title" msgid "Upgrade Instructions" msgstr "Инструкции по обновлению" -#: templates/home.html:40 +#: netbox/templates/home.html:40 msgid "Unlock Dashboard" msgstr "Разблокируйте панель управления" -#: templates/home.html:49 +#: netbox/templates/home.html:49 msgid "Lock Dashboard" msgstr "Заблокировать панель управления" -#: templates/home.html:60 +#: netbox/templates/home.html:60 msgid "Add Widget" msgstr "Добавить виджет" -#: templates/home.html:63 +#: netbox/templates/home.html:63 msgid "Save Layout" msgstr "Сохранить макет" -#: templates/htmx/delete_form.html:7 +#: netbox/templates/htmx/delete_form.html:7 msgid "Confirm Deletion" msgstr "Подтвердить удаление" -#: templates/htmx/delete_form.html:11 +#: netbox/templates/htmx/delete_form.html:11 #, python-format msgid "" "Are you sure you want to delete " @@ -13068,40 +13880,40 @@ msgstr "" "Вы уверены, что хотите удалить " "%(object_type)s %(object)s?" -#: templates/htmx/delete_form.html:17 +#: netbox/templates/htmx/delete_form.html:17 msgid "The following objects will be deleted as a result of this action." msgstr "В результате этого действия следующие объекты будут удалены." -#: templates/htmx/notifications.html:15 +#: netbox/templates/htmx/notifications.html:15 msgid "ago" msgstr "тому назад" -#: templates/htmx/notifications.html:26 +#: netbox/templates/htmx/notifications.html:26 msgid "No unread notifications" msgstr "Нет непрочитанных уведомлений" -#: templates/htmx/notifications.html:31 +#: netbox/templates/htmx/notifications.html:31 msgid "All notifications" msgstr "Все уведомления" -#: templates/htmx/object_selector.html:5 +#: netbox/templates/htmx/object_selector.html:5 msgid "Select" msgstr "Выберите" -#: templates/inc/filter_list.html:43 -#: utilities/templates/helpers/table_config_form.html:39 +#: netbox/templates/inc/filter_list.html:43 +#: netbox/utilities/templates/helpers/table_config_form.html:39 msgid "Reset" msgstr "Сбросить" -#: templates/inc/light_toggle.html:4 +#: netbox/templates/inc/light_toggle.html:4 msgid "Enable dark mode" msgstr "Включить темный режим" -#: templates/inc/light_toggle.html:7 +#: netbox/templates/inc/light_toggle.html:7 msgid "Enable light mode" msgstr "Включить режим освещения" -#: templates/inc/missing_prerequisites.html:8 +#: netbox/templates/inc/missing_prerequisites.html:8 #, python-format msgid "" "Before you can add a %(model)s you must first create a " @@ -13110,281 +13922,283 @@ msgstr "" "Прежде чем вы сможете добавить %(model)s вы должны сначала создать " "%(prerequisite_model)s." -#: templates/inc/paginator.html:15 +#: netbox/templates/inc/paginator.html:15 msgid "Page selection" msgstr "Выбор страницы" -#: templates/inc/paginator.html:75 +#: netbox/templates/inc/paginator.html:75 #, python-format msgid "Showing %(start)s-%(end)s of %(total)s" msgstr "показывая %(start)s-%(end)s из %(total)s" -#: templates/inc/paginator.html:82 +#: netbox/templates/inc/paginator.html:82 msgid "Pagination options" msgstr "Варианты разбиения на страницы" -#: templates/inc/paginator.html:86 +#: netbox/templates/inc/paginator.html:86 msgid "Per Page" msgstr "На страницу" -#: templates/inc/panels/image_attachments.html:10 +#: netbox/templates/inc/panels/image_attachments.html:10 msgid "Attach an image" msgstr "Прикрепите изображение" -#: templates/inc/panels/related_objects.html:5 +#: netbox/templates/inc/panels/related_objects.html:5 msgid "Related Objects" msgstr "Связанные объекты" -#: templates/inc/panels/tags.html:11 +#: netbox/templates/inc/panels/tags.html:11 msgid "No tags assigned" msgstr "Теги не назначены" -#: templates/inc/sync_warning.html:10 +#: netbox/templates/inc/sync_warning.html:10 msgid "Data is out of sync with upstream file" msgstr "Данные не синхронизированы с вышестоящим файлом" -#: templates/inc/table_controls_htmx.html:7 +#: netbox/templates/inc/table_controls_htmx.html:7 msgid "Quick search" msgstr "Быстрый поиск" -#: templates/inc/table_controls_htmx.html:20 +#: netbox/templates/inc/table_controls_htmx.html:20 msgid "Saved filter" msgstr "Сохраненный фильтр" -#: templates/inc/table_htmx.html:18 +#: netbox/templates/inc/table_htmx.html:18 msgid "Clear ordering" msgstr "Очистить сортировку" -#: templates/inc/user_menu.html:6 +#: netbox/templates/inc/user_menu.html:6 msgid "Help center" msgstr "Справочный центр" -#: templates/inc/user_menu.html:41 +#: netbox/templates/inc/user_menu.html:41 msgid "Django Admin" msgstr "Администратор Джанго" -#: templates/inc/user_menu.html:61 +#: netbox/templates/inc/user_menu.html:61 msgid "Log Out" msgstr "Выйти" -#: templates/inc/user_menu.html:68 templates/login.html:38 +#: netbox/templates/inc/user_menu.html:68 netbox/templates/login.html:38 msgid "Log In" msgstr "Войти" -#: templates/ipam/aggregate.html:14 templates/ipam/ipaddress.html:14 -#: templates/ipam/iprange.html:13 templates/ipam/prefix.html:15 +#: netbox/templates/ipam/aggregate.html:14 +#: netbox/templates/ipam/ipaddress.html:14 +#: netbox/templates/ipam/iprange.html:13 netbox/templates/ipam/prefix.html:15 msgid "Family" msgstr "Семейство" -#: templates/ipam/aggregate.html:39 +#: netbox/templates/ipam/aggregate.html:39 msgid "Date Added" msgstr "Дата добавления" -#: templates/ipam/aggregate/prefixes.html:8 -#: templates/ipam/prefix/prefixes.html:8 templates/ipam/role.html:10 +#: netbox/templates/ipam/aggregate/prefixes.html:8 +#: netbox/templates/ipam/prefix/prefixes.html:8 +#: netbox/templates/ipam/role.html:10 msgid "Add Prefix" msgstr "Добавить префикс" -#: templates/ipam/asn.html:23 +#: netbox/templates/ipam/asn.html:23 msgid "AS Number" msgstr "Номер AS" -#: templates/ipam/fhrpgroup.html:52 +#: netbox/templates/ipam/fhrpgroup.html:52 msgid "Authentication Type" msgstr "Тип аутентификации" -#: templates/ipam/fhrpgroup.html:56 +#: netbox/templates/ipam/fhrpgroup.html:56 msgid "Authentication Key" msgstr "Ключ аутентификации" -#: templates/ipam/fhrpgroup.html:69 +#: netbox/templates/ipam/fhrpgroup.html:69 msgid "Virtual IP Addresses" msgstr "Виртуальные IP-адреса" -#: templates/ipam/inc/ipaddress_edit_header.html:13 +#: netbox/templates/ipam/inc/ipaddress_edit_header.html:13 msgid "Assign IP" msgstr "Назначить IP-адрес" -#: templates/ipam/inc/ipaddress_edit_header.html:19 +#: netbox/templates/ipam/inc/ipaddress_edit_header.html:19 msgid "Bulk Create" msgstr "Массовое создание" -#: templates/ipam/inc/panels/fhrp_groups.html:10 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:10 msgid "Create Group" msgstr "Создать группу" -#: templates/ipam/inc/panels/fhrp_groups.html:25 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:25 msgid "Virtual IPs" msgstr "Виртуальные IP-адреса" -#: templates/ipam/inc/toggle_available.html:7 +#: netbox/templates/ipam/inc/toggle_available.html:7 msgid "Show Assigned" msgstr "Показать назначенное" -#: templates/ipam/inc/toggle_available.html:10 +#: netbox/templates/ipam/inc/toggle_available.html:10 msgid "Show Available" msgstr "Показать доступные" -#: templates/ipam/inc/toggle_available.html:13 +#: netbox/templates/ipam/inc/toggle_available.html:13 msgid "Show All" msgstr "Показать все" -#: templates/ipam/ipaddress.html:23 templates/ipam/iprange.html:45 -#: templates/ipam/prefix.html:24 +#: netbox/templates/ipam/ipaddress.html:23 +#: netbox/templates/ipam/iprange.html:45 netbox/templates/ipam/prefix.html:24 msgid "Global" msgstr "Глобальный" -#: templates/ipam/ipaddress.html:85 +#: netbox/templates/ipam/ipaddress.html:85 msgid "NAT (outside)" msgstr "NAT (снаружи)" -#: templates/ipam/ipaddress_assign.html:8 +#: netbox/templates/ipam/ipaddress_assign.html:8 msgid "Assign an IP Address" msgstr "Назначьте IP-адрес" -#: templates/ipam/ipaddress_assign.html:22 +#: netbox/templates/ipam/ipaddress_assign.html:22 msgid "Select IP Address" msgstr "Выберите IP-адрес" -#: templates/ipam/ipaddress_assign.html:35 +#: netbox/templates/ipam/ipaddress_assign.html:35 msgid "Search Results" msgstr "Результаты поиска" -#: templates/ipam/ipaddress_bulk_add.html:6 +#: netbox/templates/ipam/ipaddress_bulk_add.html:6 msgid "Bulk Add IP Addresses" msgstr "Массовое добавление IP-адресов" -#: templates/ipam/iprange.html:17 +#: netbox/templates/ipam/iprange.html:17 msgid "Starting Address" msgstr "Начальный адрес" -#: templates/ipam/iprange.html:21 +#: netbox/templates/ipam/iprange.html:21 msgid "Ending Address" msgstr "Конечный адрес" -#: templates/ipam/iprange.html:33 templates/ipam/prefix.html:110 +#: netbox/templates/ipam/iprange.html:33 netbox/templates/ipam/prefix.html:110 msgid "Marked fully utilized" msgstr "Отмечено как полностью использованное" -#: templates/ipam/prefix.html:99 +#: netbox/templates/ipam/prefix.html:99 msgid "Addressing Details" msgstr "Детали адресации" -#: templates/ipam/prefix.html:118 +#: netbox/templates/ipam/prefix.html:118 msgid "Child IPs" msgstr "Зависимые IP-адреса" -#: templates/ipam/prefix.html:126 +#: netbox/templates/ipam/prefix.html:126 msgid "Available IPs" msgstr "Доступные IP-адреса" -#: templates/ipam/prefix.html:138 +#: netbox/templates/ipam/prefix.html:138 msgid "First available IP" msgstr "Первый доступный IP-адрес" -#: templates/ipam/prefix.html:179 +#: netbox/templates/ipam/prefix.html:179 msgid "Prefix Details" msgstr "Детали префикса" -#: templates/ipam/prefix.html:185 +#: netbox/templates/ipam/prefix.html:185 msgid "Network Address" msgstr "Сетевой адрес" -#: templates/ipam/prefix.html:189 +#: netbox/templates/ipam/prefix.html:189 msgid "Network Mask" msgstr "Сетевая маска" -#: templates/ipam/prefix.html:193 +#: netbox/templates/ipam/prefix.html:193 msgid "Wildcard Mask" msgstr "Обратная маска" -#: templates/ipam/prefix.html:197 +#: netbox/templates/ipam/prefix.html:197 msgid "Broadcast Address" msgstr "Адрес вещания" -#: templates/ipam/prefix/ip_ranges.html:7 +#: netbox/templates/ipam/prefix/ip_ranges.html:7 msgid "Add IP Range" msgstr "Добавить диапазон IP-адресов" -#: templates/ipam/prefix_list.html:7 +#: netbox/templates/ipam/prefix_list.html:7 msgid "Hide Depth Indicators" msgstr "Скрыть индикаторы глубины" -#: templates/ipam/prefix_list.html:11 +#: netbox/templates/ipam/prefix_list.html:11 msgid "Max Depth" msgstr "Максимальная глубина" -#: templates/ipam/prefix_list.html:28 +#: netbox/templates/ipam/prefix_list.html:28 msgid "Max Length" msgstr "Максимальная длина" -#: templates/ipam/rir.html:10 +#: netbox/templates/ipam/rir.html:10 msgid "Add Aggregate" msgstr "Добавить агрегат" -#: templates/ipam/routetarget.html:38 +#: netbox/templates/ipam/routetarget.html:38 msgid "Importing VRFs" msgstr "Импорт VRF" -#: templates/ipam/routetarget.html:44 +#: netbox/templates/ipam/routetarget.html:44 msgid "Exporting VRFs" msgstr "Экспорт VRF" -#: templates/ipam/routetarget.html:52 +#: netbox/templates/ipam/routetarget.html:52 msgid "Importing L2VPNs" msgstr "Импорт L2VPN" -#: templates/ipam/routetarget.html:58 +#: netbox/templates/ipam/routetarget.html:58 msgid "Exporting L2VPNs" msgstr "Экспорт L2VPN" -#: templates/ipam/vlan.html:88 +#: netbox/templates/ipam/vlan.html:88 msgid "Add a Prefix" msgstr "Добавить префикс" -#: templates/ipam/vlangroup.html:18 +#: netbox/templates/ipam/vlangroup.html:18 msgid "Add VLAN" msgstr "Добавить VLAN" -#: templates/ipam/vrf.html:16 +#: netbox/templates/ipam/vrf.html:16 msgid "Route Distinguisher" msgstr "RD" -#: templates/ipam/vrf.html:29 +#: netbox/templates/ipam/vrf.html:29 msgid "Unique IP Space" msgstr "Уникальное IP-пространство" -#: templates/login.html:29 -#: utilities/templates/form_helpers/render_errors.html:7 +#: netbox/templates/login.html:29 +#: netbox/utilities/templates/form_helpers/render_errors.html:7 msgid "Errors" msgstr "Ошибки" -#: templates/login.html:69 +#: netbox/templates/login.html:69 msgid "Sign In" msgstr "Войти" -#: templates/login.html:77 +#: netbox/templates/login.html:77 msgctxt "Denotes an alternative option" msgid "Or" msgstr "Или" -#: templates/media_failure.html:7 +#: netbox/templates/media_failure.html:7 msgid "Static Media Failure - NetBox" msgstr "Ошибка статичных медиа - NetBox" -#: templates/media_failure.html:21 +#: netbox/templates/media_failure.html:21 msgid "Static Media Failure" msgstr "Ошибка статичных медиа" -#: templates/media_failure.html:23 +#: netbox/templates/media_failure.html:23 msgid "The following static media file failed to load" msgstr "Не удалось загрузить следующий статический медиафайл" -#: templates/media_failure.html:26 +#: netbox/templates/media_failure.html:26 msgid "Check the following" msgstr "Проверьте следующее" -#: templates/media_failure.html:29 +#: netbox/templates/media_failure.html:29 msgid "" "manage.py collectstatic was run during the most recent upgrade." " This installs the most recent iteration of each static file into the static" @@ -13394,7 +14208,7 @@ msgstr "" "обновления. При этом последняя итерация каждого статического файла " "устанавливается в статический корневой путь." -#: templates/media_failure.html:35 +#: netbox/templates/media_failure.html:35 #, python-format msgid "" "The HTTP service (e.g. nginx or Apache) is configured to serve files from " @@ -13404,7 +14218,7 @@ msgstr "" "Служба HTTP (например, nginx или Apache) настроена на обслуживание файлов из пути STATIC_ROOT\n" " . Обратитесь к документация по установке для получения дополнительных рекомендаций." -#: templates/media_failure.html:47 +#: netbox/templates/media_failure.html:47 #, python-format msgid "" "The file %(filename)s exists in the static root directory and " @@ -13413,548 +14227,571 @@ msgstr "" "Файл %(filename)s существует в статическом корневом каталоге и " "доступен для чтения HTTP-сервером." -#: templates/media_failure.html:55 +#: netbox/templates/media_failure.html:55 #, python-format msgid "Click here to attempt loading NetBox again." msgstr "" "Нажмите здесь чтобы снова попытаться загрузить " "NetBox." -#: templates/tenancy/contact.html:18 tenancy/filtersets.py:147 -#: tenancy/forms/bulk_edit.py:137 tenancy/forms/filtersets.py:102 -#: tenancy/forms/forms.py:56 tenancy/forms/model_forms.py:106 -#: tenancy/forms/model_forms.py:130 tenancy/tables/contacts.py:98 +#: netbox/templates/tenancy/contact.html:18 netbox/tenancy/filtersets.py: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/model_forms.py:130 +#: netbox/tenancy/tables/contacts.py:98 msgid "Contact" msgstr "Связаться" -#: templates/tenancy/contact.html:29 tenancy/forms/bulk_edit.py:99 +#: netbox/templates/tenancy/contact.html:29 +#: netbox/tenancy/forms/bulk_edit.py:99 msgid "Title" msgstr "Заголовок" -#: templates/tenancy/contact.html:33 tenancy/forms/bulk_edit.py:104 -#: tenancy/tables/contacts.py:64 +#: netbox/templates/tenancy/contact.html:33 +#: netbox/tenancy/forms/bulk_edit.py:104 netbox/tenancy/tables/contacts.py:64 msgid "Phone" msgstr "Телефон" -#: templates/tenancy/contactgroup.html:18 tenancy/forms/forms.py:66 -#: tenancy/forms/model_forms.py:75 +#: netbox/templates/tenancy/contactgroup.html:18 +#: netbox/tenancy/forms/forms.py:66 netbox/tenancy/forms/model_forms.py:75 msgid "Contact Group" msgstr "Контактная группа" -#: templates/tenancy/contactgroup.html:50 +#: netbox/templates/tenancy/contactgroup.html:50 msgid "Add Contact Group" msgstr "Добавить контактную группу" -#: templates/tenancy/contactrole.html:15 tenancy/filtersets.py:152 -#: tenancy/forms/forms.py:61 tenancy/forms/model_forms.py:87 +#: netbox/templates/tenancy/contactrole.html:15 +#: netbox/tenancy/filtersets.py:152 netbox/tenancy/forms/forms.py:61 +#: netbox/tenancy/forms/model_forms.py:87 msgid "Contact Role" msgstr "Роль контакта" -#: templates/tenancy/object_contacts.html:9 +#: netbox/templates/tenancy/object_contacts.html:9 msgid "Add a contact" msgstr "Добавить контакт" -#: templates/tenancy/tenantgroup.html:17 +#: netbox/templates/tenancy/tenantgroup.html:17 msgid "Add Tenant" msgstr "Добавить арендатора" -#: templates/tenancy/tenantgroup.html:26 tenancy/forms/model_forms.py:32 -#: tenancy/tables/columns.py:51 tenancy/tables/columns.py:61 +#: netbox/templates/tenancy/tenantgroup.html:26 +#: netbox/tenancy/forms/model_forms.py:32 netbox/tenancy/tables/columns.py:51 +#: netbox/tenancy/tables/columns.py:61 msgid "Tenant Group" msgstr "Группа арендаторов" -#: templates/tenancy/tenantgroup.html:59 +#: netbox/templates/tenancy/tenantgroup.html:59 msgid "Add Tenant Group" msgstr "Добавить группу арендаторов" -#: templates/users/group.html:39 templates/users/user.html:63 +#: netbox/templates/users/group.html:39 netbox/templates/users/user.html:63 msgid "Assigned Permissions" msgstr "Назначенные разрешения" -#: templates/users/objectpermission.html:6 -#: templates/users/objectpermission.html:14 users/forms/filtersets.py:66 +#: netbox/templates/users/objectpermission.html:6 +#: netbox/templates/users/objectpermission.html:14 +#: netbox/users/forms/filtersets.py:66 msgid "Permission" msgstr "Разрешение" -#: templates/users/objectpermission.html:34 +#: netbox/templates/users/objectpermission.html:34 msgid "View" msgstr "Вид" -#: templates/users/objectpermission.html:52 users/forms/model_forms.py:315 +#: netbox/templates/users/objectpermission.html:52 +#: netbox/users/forms/model_forms.py:315 msgid "Constraints" msgstr "Ограничения" -#: templates/users/objectpermission.html:72 +#: netbox/templates/users/objectpermission.html:72 msgid "Assigned Users" msgstr "Назначенные пользователи" -#: templates/virtualization/cluster.html:52 +#: netbox/templates/virtualization/cluster.html:52 msgid "Allocated Resources" msgstr "Выделенные ресурсы" -#: templates/virtualization/cluster.html:55 -#: templates/virtualization/virtualmachine.html:125 +#: netbox/templates/virtualization/cluster.html:55 +#: netbox/templates/virtualization/virtualmachine.html:125 msgid "Virtual CPUs" msgstr "Виртуальные процессоры" -#: templates/virtualization/cluster.html:59 -#: templates/virtualization/virtualmachine.html:129 +#: netbox/templates/virtualization/cluster.html:59 +#: netbox/templates/virtualization/virtualmachine.html:129 msgid "Memory" msgstr "Память" -#: templates/virtualization/cluster.html:69 -#: templates/virtualization/virtualmachine.html:140 +#: netbox/templates/virtualization/cluster.html:69 +#: netbox/templates/virtualization/virtualmachine.html:140 msgid "Disk Space" msgstr "Дисковое пространство" -#: templates/virtualization/cluster/base.html:18 +#: netbox/templates/virtualization/cluster/base.html:18 msgid "Add Virtual Machine" msgstr "Добавить виртуальную машину" -#: templates/virtualization/cluster/base.html:24 +#: netbox/templates/virtualization/cluster/base.html:24 msgid "Assign Device" msgstr "Назначить устройство" -#: templates/virtualization/cluster/devices.html:10 +#: netbox/templates/virtualization/cluster/devices.html:10 msgid "Remove Selected" msgstr "Удалить выбранное" -#: templates/virtualization/cluster_add_devices.html:9 +#: netbox/templates/virtualization/cluster_add_devices.html:9 #, python-format msgid "Add Device to Cluster %(cluster)s" msgstr "Добавить устройство в кластер %(cluster)s" -#: templates/virtualization/cluster_add_devices.html:23 +#: netbox/templates/virtualization/cluster_add_devices.html:23 msgid "Device Selection" msgstr "Выбор устройства" -#: templates/virtualization/cluster_add_devices.html:31 +#: netbox/templates/virtualization/cluster_add_devices.html:31 msgid "Add Devices" msgstr "Добавить устройства" -#: templates/virtualization/clustergroup.html:10 -#: templates/virtualization/clustertype.html:10 +#: netbox/templates/virtualization/clustergroup.html:10 +#: netbox/templates/virtualization/clustertype.html:10 msgid "Add Cluster" msgstr "Добавить кластер" -#: templates/virtualization/clustergroup.html:19 -#: virtualization/forms/model_forms.py:50 +#: netbox/templates/virtualization/clustergroup.html:19 +#: netbox/virtualization/forms/model_forms.py:50 msgid "Cluster Group" msgstr "Кластерная группа" -#: templates/virtualization/clustertype.html:19 -#: templates/virtualization/virtualmachine.html:110 -#: virtualization/forms/model_forms.py:36 +#: netbox/templates/virtualization/clustertype.html:19 +#: netbox/templates/virtualization/virtualmachine.html:110 +#: netbox/virtualization/forms/model_forms.py:36 msgid "Cluster Type" msgstr "Тип кластера" -#: templates/virtualization/virtualdisk.html:18 +#: netbox/templates/virtualization/virtualdisk.html:18 msgid "Virtual Disk" msgstr "Виртуальный диск" -#: templates/virtualization/virtualmachine.html:122 -#: virtualization/forms/bulk_edit.py:190 -#: virtualization/forms/model_forms.py:224 +#: netbox/templates/virtualization/virtualmachine.html:122 +#: netbox/virtualization/forms/bulk_edit.py:190 +#: netbox/virtualization/forms/model_forms.py:224 msgid "Resources" msgstr "Ресурсы" -#: templates/virtualization/virtualmachine.html:178 +#: netbox/templates/virtualization/virtualmachine.html:178 msgid "Add Virtual Disk" msgstr "Добавить виртуальный диск" -#: templates/vpn/ikepolicy.html:10 templates/vpn/ipsecprofile.html:33 -#: vpn/tables/crypto.py:166 +#: 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" msgstr "Политика IKE" -#: templates/vpn/ikepolicy.html:21 +#: netbox/templates/vpn/ikepolicy.html:21 msgid "IKE Version" msgstr "Версия IKE" -#: templates/vpn/ikepolicy.html:29 +#: netbox/templates/vpn/ikepolicy.html:29 msgid "Pre-Shared Key" msgstr "Pre-Shared ключ" -#: templates/vpn/ikepolicy.html:33 -#: templates/wireless/inc/authentication_attrs.html:20 +#: netbox/templates/vpn/ikepolicy.html:33 +#: netbox/templates/wireless/inc/authentication_attrs.html:20 msgid "Show Secret" msgstr "Показать секрет" -#: templates/vpn/ikepolicy.html:57 templates/vpn/ipsecpolicy.html:45 -#: templates/vpn/ipsecprofile.html:52 templates/vpn/ipsecprofile.html:77 -#: vpn/forms/model_forms.py:316 vpn/forms/model_forms.py:352 -#: vpn/tables/crypto.py:68 vpn/tables/crypto.py:134 +#: netbox/templates/vpn/ikepolicy.html:57 +#: netbox/templates/vpn/ipsecpolicy.html:45 +#: netbox/templates/vpn/ipsecprofile.html:52 +#: netbox/templates/vpn/ipsecprofile.html:77 +#: netbox/vpn/forms/model_forms.py:316 netbox/vpn/forms/model_forms.py:352 +#: netbox/vpn/tables/crypto.py:68 netbox/vpn/tables/crypto.py:134 msgid "Proposals" msgstr "Предложения" -#: templates/vpn/ikeproposal.html:10 +#: netbox/templates/vpn/ikeproposal.html:10 msgid "IKE Proposal" msgstr "Предложение IKE" -#: templates/vpn/ikeproposal.html:21 vpn/forms/bulk_edit.py:97 -#: vpn/forms/bulk_import.py:145 vpn/forms/filtersets.py:101 +#: netbox/templates/vpn/ikeproposal.html:21 netbox/vpn/forms/bulk_edit.py:97 +#: netbox/vpn/forms/bulk_import.py:145 netbox/vpn/forms/filtersets.py:101 msgid "Authentication method" msgstr "Метод аутентификации" -#: templates/vpn/ikeproposal.html:25 templates/vpn/ipsecproposal.html:21 -#: vpn/forms/bulk_edit.py:102 vpn/forms/bulk_edit.py:172 -#: vpn/forms/bulk_import.py:149 vpn/forms/bulk_import.py:195 -#: vpn/forms/filtersets.py:106 vpn/forms/filtersets.py:154 +#: netbox/templates/vpn/ikeproposal.html:25 +#: netbox/templates/vpn/ipsecproposal.html:21 +#: netbox/vpn/forms/bulk_edit.py:102 netbox/vpn/forms/bulk_edit.py:172 +#: netbox/vpn/forms/bulk_import.py:149 netbox/vpn/forms/bulk_import.py:195 +#: netbox/vpn/forms/filtersets.py:106 netbox/vpn/forms/filtersets.py:154 msgid "Encryption algorithm" msgstr "Алгоритм шифрования" -#: templates/vpn/ikeproposal.html:29 templates/vpn/ipsecproposal.html:25 -#: vpn/forms/bulk_edit.py:107 vpn/forms/bulk_edit.py:177 -#: vpn/forms/bulk_import.py:153 vpn/forms/bulk_import.py:200 -#: vpn/forms/filtersets.py:111 vpn/forms/filtersets.py:159 +#: netbox/templates/vpn/ikeproposal.html:29 +#: netbox/templates/vpn/ipsecproposal.html:25 +#: netbox/vpn/forms/bulk_edit.py:107 netbox/vpn/forms/bulk_edit.py:177 +#: netbox/vpn/forms/bulk_import.py:153 netbox/vpn/forms/bulk_import.py:200 +#: netbox/vpn/forms/filtersets.py:111 netbox/vpn/forms/filtersets.py:159 msgid "Authentication algorithm" msgstr "Алгоритм аутентификации" -#: templates/vpn/ikeproposal.html:33 +#: netbox/templates/vpn/ikeproposal.html:33 msgid "DH group" msgstr "Группа DH" -#: templates/vpn/ikeproposal.html:37 templates/vpn/ipsecproposal.html:29 -#: vpn/forms/bulk_edit.py:182 vpn/models/crypto.py:146 +#: netbox/templates/vpn/ikeproposal.html:37 +#: netbox/templates/vpn/ipsecproposal.html:29 +#: netbox/vpn/forms/bulk_edit.py:182 netbox/vpn/models/crypto.py:146 msgid "SA lifetime (seconds)" msgstr "Срок службы SA (в секундах)" -#: templates/vpn/ipsecpolicy.html:10 templates/vpn/ipsecprofile.html:66 -#: vpn/tables/crypto.py:170 +#: netbox/templates/vpn/ipsecpolicy.html:10 +#: netbox/templates/vpn/ipsecprofile.html:66 netbox/vpn/tables/crypto.py:170 msgid "IPSec Policy" msgstr "Политика IPsec" -#: templates/vpn/ipsecpolicy.html:21 vpn/forms/bulk_edit.py:210 -#: vpn/models/crypto.py:193 +#: netbox/templates/vpn/ipsecpolicy.html:21 netbox/vpn/forms/bulk_edit.py:210 +#: netbox/vpn/models/crypto.py:193 msgid "PFS group" msgstr "Группа PFS" -#: templates/vpn/ipsecprofile.html:10 vpn/forms/model_forms.py:54 +#: netbox/templates/vpn/ipsecprofile.html:10 +#: netbox/vpn/forms/model_forms.py:54 msgid "IPSec Profile" msgstr "Профиль IPsec" -#: templates/vpn/ipsecprofile.html:89 vpn/tables/crypto.py:137 +#: netbox/templates/vpn/ipsecprofile.html:89 netbox/vpn/tables/crypto.py:137 msgid "PFS Group" msgstr "Группа компаний PFS" -#: templates/vpn/ipsecproposal.html:10 +#: netbox/templates/vpn/ipsecproposal.html:10 msgid "IPSec Proposal" msgstr "Предложение IPsec" -#: templates/vpn/ipsecproposal.html:33 vpn/forms/bulk_edit.py:186 -#: vpn/models/crypto.py:152 +#: netbox/templates/vpn/ipsecproposal.html:33 +#: netbox/vpn/forms/bulk_edit.py:186 netbox/vpn/models/crypto.py:152 msgid "SA lifetime (KB)" msgstr "Срок службы (КБ)" -#: templates/vpn/l2vpn.html:11 templates/vpn/l2vpntermination.html:9 +#: netbox/templates/vpn/l2vpn.html:11 +#: netbox/templates/vpn/l2vpntermination.html:9 msgid "L2VPN Attributes" msgstr "Атрибуты L2VPN" -#: templates/vpn/l2vpn.html:60 templates/vpn/tunnel.html:76 +#: netbox/templates/vpn/l2vpn.html:60 netbox/templates/vpn/tunnel.html:76 msgid "Add a Termination" msgstr "Добавить окончание" -#: templates/vpn/tunnel.html:9 +#: netbox/templates/vpn/tunnel.html:9 msgid "Add Termination" msgstr "Добавить окончание" -#: templates/vpn/tunnel.html:37 vpn/forms/bulk_edit.py:49 -#: vpn/forms/bulk_import.py:48 vpn/forms/filtersets.py:57 +#: netbox/templates/vpn/tunnel.html:37 netbox/vpn/forms/bulk_edit.py:49 +#: netbox/vpn/forms/bulk_import.py:48 netbox/vpn/forms/filtersets.py:57 msgid "Encapsulation" msgstr "Инкапсуляция" -#: templates/vpn/tunnel.html:41 vpn/forms/bulk_edit.py:55 -#: vpn/forms/bulk_import.py:53 vpn/forms/filtersets.py:64 -#: vpn/models/crypto.py:250 vpn/tables/tunnels.py:51 +#: netbox/templates/vpn/tunnel.html:41 netbox/vpn/forms/bulk_edit.py:55 +#: netbox/vpn/forms/bulk_import.py:53 netbox/vpn/forms/filtersets.py:64 +#: netbox/vpn/models/crypto.py:250 netbox/vpn/tables/tunnels.py:51 msgid "IPSec profile" msgstr "Профиль IPsec" -#: templates/vpn/tunnel.html:45 vpn/forms/bulk_edit.py:69 -#: vpn/forms/filtersets.py:68 +#: netbox/templates/vpn/tunnel.html:45 netbox/vpn/forms/bulk_edit.py:69 +#: netbox/vpn/forms/filtersets.py:68 msgid "Tunnel ID" msgstr "Идентификатор туннеля" -#: templates/vpn/tunnelgroup.html:14 +#: netbox/templates/vpn/tunnelgroup.html:14 msgid "Add Tunnel" msgstr "Добавить туннель" -#: templates/vpn/tunnelgroup.html:23 vpn/forms/model_forms.py:36 -#: vpn/forms/model_forms.py:49 +#: netbox/templates/vpn/tunnelgroup.html:23 netbox/vpn/forms/model_forms.py:36 +#: netbox/vpn/forms/model_forms.py:49 msgid "Tunnel Group" msgstr "Туннельная группа" -#: templates/vpn/tunneltermination.html:10 +#: netbox/templates/vpn/tunneltermination.html:10 msgid "Tunnel Termination" msgstr "Окончание Туннеля" -#: templates/vpn/tunneltermination.html:35 vpn/forms/bulk_import.py:107 -#: vpn/forms/model_forms.py:102 vpn/forms/model_forms.py:138 -#: vpn/forms/model_forms.py:247 vpn/tables/tunnels.py:101 +#: netbox/templates/vpn/tunneltermination.html:35 +#: netbox/vpn/forms/bulk_import.py:107 netbox/vpn/forms/model_forms.py:102 +#: netbox/vpn/forms/model_forms.py:138 netbox/vpn/forms/model_forms.py:247 +#: netbox/vpn/tables/tunnels.py:101 msgid "Outside IP" msgstr "Внешний IP-адрес" -#: templates/vpn/tunneltermination.html:51 +#: netbox/templates/vpn/tunneltermination.html:51 msgid "Peer Terminations" msgstr "Конечные Точки" -#: templates/wireless/inc/authentication_attrs.html:12 +#: netbox/templates/wireless/inc/authentication_attrs.html:12 msgid "Cipher" msgstr "Шифр" -#: templates/wireless/inc/authentication_attrs.html:16 +#: netbox/templates/wireless/inc/authentication_attrs.html:16 msgid "PSK" msgstr "PSK" -#: templates/wireless/inc/wirelesslink_interface.html:35 -#: templates/wireless/inc/wirelesslink_interface.html:45 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:35 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:45 msgctxt "Abbreviation for megahertz" msgid "MHz" msgstr "МГц" -#: templates/wireless/wirelesslan.html:57 +#: netbox/templates/wireless/wirelesslan.html:57 msgid "Attached Interfaces" msgstr "Подключенные интерфейсы" -#: templates/wireless/wirelesslangroup.html:17 +#: netbox/templates/wireless/wirelesslangroup.html:17 msgid "Add Wireless LAN" msgstr "Добавить беспроводную локальную сеть" -#: templates/wireless/wirelesslangroup.html:26 -#: wireless/forms/model_forms.py:28 +#: netbox/templates/wireless/wirelesslangroup.html:26 +#: netbox/wireless/forms/model_forms.py:28 msgid "Wireless LAN Group" msgstr "Группа беспроводных локальных сетей" -#: templates/wireless/wirelesslangroup.html:59 +#: netbox/templates/wireless/wirelesslangroup.html:59 msgid "Add Wireless LAN Group" msgstr "Добавить группу беспроводной локальной сети" -#: templates/wireless/wirelesslink.html:14 +#: netbox/templates/wireless/wirelesslink.html:14 msgid "Link Properties" msgstr "Свойства ссылки" -#: templates/wireless/wirelesslink.html:38 wireless/forms/bulk_edit.py:129 -#: wireless/forms/filtersets.py:102 wireless/forms/model_forms.py:165 +#: 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 "Расстояние" -#: tenancy/filtersets.py:28 +#: netbox/tenancy/filtersets.py:28 msgid "Parent contact group (ID)" msgstr "Контактная группа родителей (ID)" -#: tenancy/filtersets.py:34 +#: netbox/tenancy/filtersets.py:34 msgid "Parent contact group (slug)" msgstr "Контактная группа родителей (подстрока)" -#: tenancy/filtersets.py:40 tenancy/filtersets.py:67 tenancy/filtersets.py:110 +#: netbox/tenancy/filtersets.py:40 netbox/tenancy/filtersets.py:67 +#: netbox/tenancy/filtersets.py:110 msgid "Contact group (ID)" msgstr "Контактная группа (ID)" -#: tenancy/filtersets.py:47 tenancy/filtersets.py:74 tenancy/filtersets.py:117 +#: netbox/tenancy/filtersets.py:47 netbox/tenancy/filtersets.py:74 +#: netbox/tenancy/filtersets.py:117 msgid "Contact group (slug)" msgstr "Группа контактов (подстрока)" -#: tenancy/filtersets.py:104 +#: netbox/tenancy/filtersets.py:104 msgid "Contact (ID)" msgstr "Контактное лицо (ID)" -#: tenancy/filtersets.py:121 +#: netbox/tenancy/filtersets.py:121 msgid "Contact role (ID)" msgstr "Роль контакта (ID)" -#: tenancy/filtersets.py:127 +#: netbox/tenancy/filtersets.py:127 msgid "Contact role (slug)" msgstr "Роль контакта (подстрока)" -#: tenancy/filtersets.py:158 +#: netbox/tenancy/filtersets.py:158 msgid "Contact group" msgstr "Контактная группа" -#: tenancy/filtersets.py:169 +#: netbox/tenancy/filtersets.py:169 msgid "Parent tenant group (ID)" msgstr "Родительская группа арендаторов (ID)" -#: tenancy/filtersets.py:175 +#: netbox/tenancy/filtersets.py:175 msgid "Parent tenant group (slug)" msgstr "Родительская группа арендаторов (подстрока)" -#: tenancy/filtersets.py:181 tenancy/filtersets.py:201 +#: netbox/tenancy/filtersets.py:181 netbox/tenancy/filtersets.py:201 msgid "Tenant group (ID)" msgstr "Группа арендаторов (ID)" -#: tenancy/filtersets.py:234 +#: netbox/tenancy/filtersets.py:234 msgid "Tenant Group (ID)" msgstr "Группа арендаторов (ID)" -#: tenancy/filtersets.py:241 +#: netbox/tenancy/filtersets.py:241 msgid "Tenant Group (slug)" msgstr "Группа арендаторов (подстрока)" -#: tenancy/forms/bulk_edit.py:66 +#: netbox/tenancy/forms/bulk_edit.py:66 msgid "Desciption" msgstr "Описание" -#: tenancy/forms/bulk_import.py:101 +#: netbox/tenancy/forms/bulk_import.py:101 msgid "Assigned contact" msgstr "Назначенный контакт" -#: tenancy/models/contacts.py:32 +#: netbox/tenancy/models/contacts.py:32 msgid "contact group" msgstr "контактная группа" -#: tenancy/models/contacts.py:33 +#: netbox/tenancy/models/contacts.py:33 msgid "contact groups" msgstr "контактные группы" -#: tenancy/models/contacts.py:48 +#: netbox/tenancy/models/contacts.py:48 msgid "contact role" msgstr "роль контакта" -#: tenancy/models/contacts.py:49 +#: netbox/tenancy/models/contacts.py:49 msgid "contact roles" msgstr "контактные роли" -#: tenancy/models/contacts.py:68 +#: netbox/tenancy/models/contacts.py:68 msgid "title" msgstr "название" -#: tenancy/models/contacts.py:73 +#: netbox/tenancy/models/contacts.py:73 msgid "phone" msgstr "телефон" -#: tenancy/models/contacts.py:78 +#: netbox/tenancy/models/contacts.py:78 msgid "email" msgstr "email" -#: tenancy/models/contacts.py:87 +#: netbox/tenancy/models/contacts.py:87 msgid "link" msgstr "ссылка на сайт" -#: tenancy/models/contacts.py:103 +#: netbox/tenancy/models/contacts.py:103 msgid "contact" msgstr "контакт" -#: tenancy/models/contacts.py:104 +#: netbox/tenancy/models/contacts.py:104 msgid "contacts" msgstr "контакты" -#: tenancy/models/contacts.py:153 +#: netbox/tenancy/models/contacts.py:153 msgid "contact assignment" msgstr "назначение контакта" -#: tenancy/models/contacts.py:154 +#: netbox/tenancy/models/contacts.py:154 msgid "contact assignments" msgstr "назначение контактов" -#: tenancy/models/contacts.py:170 +#: netbox/tenancy/models/contacts.py:170 #, python-brace-format msgid "Contacts cannot be assigned to this object type ({type})." msgstr "Контакты не могут быть присвоены этому типу объекта ({type})." -#: tenancy/models/tenants.py:32 +#: netbox/tenancy/models/tenants.py:32 msgid "tenant group" msgstr "группа арендаторов" -#: tenancy/models/tenants.py:33 +#: netbox/tenancy/models/tenants.py:33 msgid "tenant groups" msgstr "группы арендаторов" -#: tenancy/models/tenants.py:70 +#: netbox/tenancy/models/tenants.py:70 msgid "Tenant name must be unique per group." msgstr "Имя арендатора должно быть уникальным для каждой группы." -#: tenancy/models/tenants.py:80 +#: netbox/tenancy/models/tenants.py:80 msgid "Tenant slug must be unique per group." msgstr "Подстрока арендатора должна быть уникальной для каждой группы." -#: tenancy/models/tenants.py:88 +#: netbox/tenancy/models/tenants.py:88 msgid "tenant" msgstr "арендатор" -#: tenancy/models/tenants.py:89 +#: netbox/tenancy/models/tenants.py:89 msgid "tenants" msgstr "арендаторы" -#: tenancy/tables/contacts.py:112 +#: netbox/tenancy/tables/contacts.py:112 msgid "Contact Title" msgstr "Название контактного лица" -#: tenancy/tables/contacts.py:116 +#: netbox/tenancy/tables/contacts.py:116 msgid "Contact Phone" msgstr "Контактный телефон" -#: tenancy/tables/contacts.py:121 +#: netbox/tenancy/tables/contacts.py:121 msgid "Contact Email" msgstr "Контактный адрес электронной почты" -#: tenancy/tables/contacts.py:125 +#: netbox/tenancy/tables/contacts.py:125 msgid "Contact Address" msgstr "Контактный адрес" -#: tenancy/tables/contacts.py:129 +#: netbox/tenancy/tables/contacts.py:129 msgid "Contact Link" msgstr "Контактная ссылка" -#: tenancy/tables/contacts.py:133 +#: netbox/tenancy/tables/contacts.py:133 msgid "Contact Description" msgstr "Описание контакта" -#: users/filtersets.py:33 users/filtersets.py:73 +#: netbox/users/filtersets.py:33 netbox/users/filtersets.py:73 msgid "Permission (ID)" msgstr "Разрешение (ID)" -#: users/filtersets.py:38 users/filtersets.py:78 +#: netbox/users/filtersets.py:38 netbox/users/filtersets.py:78 msgid "Notification group (ID)" msgstr "Группа уведомлений (ID)" -#: users/forms/bulk_edit.py:26 +#: netbox/users/forms/bulk_edit.py:26 msgid "First name" msgstr "Имя" -#: users/forms/bulk_edit.py:31 +#: netbox/users/forms/bulk_edit.py:31 msgid "Last name" msgstr "Фамилия" -#: users/forms/bulk_edit.py:43 +#: netbox/users/forms/bulk_edit.py:43 msgid "Staff status" msgstr "Статус персонала" -#: users/forms/bulk_edit.py:48 +#: netbox/users/forms/bulk_edit.py:48 msgid "Superuser status" msgstr "Статус суперпользователя" -#: users/forms/bulk_import.py:41 +#: netbox/users/forms/bulk_import.py:41 msgid "If no key is provided, one will be generated automatically." msgstr "Если ключ не указан, он будет сгенерирован автоматически." -#: users/forms/filtersets.py:51 users/tables.py:42 +#: netbox/users/forms/filtersets.py:51 netbox/users/tables.py:42 msgid "Is Staff" msgstr "Является ли персонал" -#: users/forms/filtersets.py:58 users/tables.py:45 +#: netbox/users/forms/filtersets.py:58 netbox/users/tables.py:45 msgid "Is Superuser" msgstr "Является суперпользователем" -#: users/forms/filtersets.py:91 users/tables.py:86 +#: netbox/users/forms/filtersets.py:91 netbox/users/tables.py:86 msgid "Can View" msgstr "Может просматривать" -#: users/forms/filtersets.py:98 users/tables.py:89 +#: netbox/users/forms/filtersets.py:98 netbox/users/tables.py:89 msgid "Can Add" msgstr "Можно добавить" -#: users/forms/filtersets.py:105 users/tables.py:92 +#: netbox/users/forms/filtersets.py:105 netbox/users/tables.py:92 msgid "Can Change" msgstr "Может измениться" -#: users/forms/filtersets.py:112 users/tables.py:95 +#: netbox/users/forms/filtersets.py:112 netbox/users/tables.py:95 msgid "Can Delete" msgstr "Можно удалить" -#: users/forms/model_forms.py:62 +#: netbox/users/forms/model_forms.py:62 msgid "User Interface" msgstr "Пользовательский интерфейс" -#: users/forms/model_forms.py:114 +#: netbox/users/forms/model_forms.py:114 msgid "" "Keys must be at least 40 characters in length. Be sure to record " "your key prior to submitting this form, as it may no longer be " @@ -13964,7 +14801,7 @@ msgstr "" "свой ключ до отправки этой формы, так как после создания токена она" " может быть недоступна." -#: users/forms/model_forms.py:126 +#: netbox/users/forms/model_forms.py:126 msgid "" "Allowed IPv4/IPv6 networks from where the token can be used. Leave blank for" " no restrictions. Example: " @@ -13974,33 +14811,33 @@ msgstr "" "поле пустым, чтобы не было ограничений. Пример: 10.1.1.0/24, " "192.168.10.16/32, 2001:DB8:1::/64" -#: users/forms/model_forms.py:175 +#: netbox/users/forms/model_forms.py:175 msgid "Confirm password" msgstr "Подтвердите пароль" -#: users/forms/model_forms.py:178 +#: netbox/users/forms/model_forms.py:178 msgid "Enter the same password as before, for verification." msgstr "Введите тот же пароль, что и раньше, для проверки." -#: users/forms/model_forms.py:227 +#: netbox/users/forms/model_forms.py:227 msgid "Passwords do not match! Please check your input and try again." msgstr "" "Пароли не совпадают! Пожалуйста, проверьте введенные данные и попробуйте " "снова." -#: users/forms/model_forms.py:294 +#: netbox/users/forms/model_forms.py:294 msgid "Additional actions" msgstr "Дополнительные действия" -#: users/forms/model_forms.py:297 +#: netbox/users/forms/model_forms.py:297 msgid "Actions granted in addition to those listed above" msgstr "Действия, предпринятые в дополнение к перечисленным выше" -#: users/forms/model_forms.py:313 +#: netbox/users/forms/model_forms.py:313 msgid "Objects" msgstr "Объекты" -#: users/forms/model_forms.py:325 +#: netbox/users/forms/model_forms.py:325 msgid "" "JSON expression of a queryset filter that will return only permitted " "objects. Leave null to match all objects of this type. A list of multiple " @@ -14010,78 +14847,78 @@ msgstr "" "Оставьте значение null для соответствия всем объектам этого типа. Список из " "нескольких объектов приведет к логической операции ИЛИ." -#: users/forms/model_forms.py:364 +#: netbox/users/forms/model_forms.py:364 msgid "At least one action must be selected." msgstr "Должно быть выбрано хотя бы одно действие." -#: users/forms/model_forms.py:382 +#: netbox/users/forms/model_forms.py:382 #, python-brace-format msgid "Invalid filter for {model}: {error}" msgstr "Неверный фильтр для {model}: {error}" -#: users/models/permissions.py:39 +#: netbox/users/models/permissions.py:39 msgid "The list of actions granted by this permission" msgstr "Список действий, предусмотренных этим разрешением" -#: users/models/permissions.py:44 +#: netbox/users/models/permissions.py:44 msgid "constraints" msgstr "ограничения" -#: users/models/permissions.py:45 +#: netbox/users/models/permissions.py:45 msgid "" "Queryset filter matching the applicable objects of the selected type(s)" msgstr "" "Фильтр Queryset, соответствующий применимым объектам выбранного типа (типов)" -#: users/models/permissions.py:52 +#: netbox/users/models/permissions.py:52 msgid "permission" msgstr "разрешение" -#: users/models/permissions.py:53 users/models/users.py:47 +#: netbox/users/models/permissions.py:53 netbox/users/models/users.py:47 msgid "permissions" msgstr "разрешения" -#: users/models/preferences.py:29 users/models/preferences.py:30 +#: netbox/users/models/preferences.py:29 netbox/users/models/preferences.py:30 msgid "user preferences" msgstr "пользовательские настройки" -#: users/models/preferences.py:97 +#: netbox/users/models/preferences.py:97 #, python-brace-format msgid "Key '{path}' is a leaf node; cannot assign new keys" msgstr "Ключ '{path}'является листовым узлом; не может назначать новые ключи" -#: users/models/preferences.py:109 +#: netbox/users/models/preferences.py:109 #, python-brace-format msgid "Key '{path}' is a dictionary; cannot assign a non-dictionary value" msgstr "" "Ключ '{path}'— словарь; не может присвоить значение, отличное от словаря" -#: users/models/tokens.py:36 +#: netbox/users/models/tokens.py:36 msgid "expires" msgstr "истекает" -#: users/models/tokens.py:41 +#: netbox/users/models/tokens.py:41 msgid "last used" msgstr "последний раз использованный" -#: users/models/tokens.py:46 +#: netbox/users/models/tokens.py:46 msgid "key" msgstr "ключ" -#: users/models/tokens.py:52 +#: netbox/users/models/tokens.py:52 msgid "write enabled" msgstr "запись включена" -#: users/models/tokens.py:54 +#: netbox/users/models/tokens.py:54 msgid "Permit create/update/delete operations using this key" msgstr "" "Разрешить операции создания/обновления/удаления с использованием этого ключа" -#: users/models/tokens.py:65 +#: netbox/users/models/tokens.py:65 msgid "allowed IPs" msgstr "разрешенные IP-адреса" -#: users/models/tokens.py:67 +#: netbox/users/models/tokens.py:67 msgid "" "Allowed IPv4/IPv6 networks from where the token can be used. Leave blank for" " no restrictions. Ex: \"10.1.1.0/24, 192.168.10.16/32, 2001:DB8:1::/64\"" @@ -14090,43 +14927,43 @@ msgstr "" "поле пустым, чтобы не было ограничений. Пример: «10.1.1.0/24, " "192.168.10.16/32, 2001:DB8:1::/64»" -#: users/models/tokens.py:75 +#: netbox/users/models/tokens.py:75 msgid "token" msgstr "токен" -#: users/models/tokens.py:76 +#: netbox/users/models/tokens.py:76 msgid "tokens" msgstr "токены" -#: users/models/users.py:57 vpn/models/crypto.py:42 +#: netbox/users/models/users.py:57 netbox/vpn/models/crypto.py:42 msgid "group" msgstr "группа" -#: users/models/users.py:92 +#: netbox/users/models/users.py:92 msgid "user" msgstr "пользователя" -#: users/models/users.py:104 +#: netbox/users/models/users.py:104 msgid "A user with this username already exists." msgstr "Пользователь с таким именем уже существует." -#: users/tables.py:98 +#: netbox/users/tables.py:98 msgid "Custom Actions" msgstr "Настраиваемые Действия" -#: utilities/api.py:153 +#: netbox/utilities/api.py:153 #, python-brace-format msgid "Related object not found using the provided attributes: {params}" msgstr "" "Связанный объект не найден с использованием предоставленных атрибутов: " "{params}" -#: utilities/api.py:156 +#: netbox/utilities/api.py:156 #, python-brace-format msgid "Multiple objects match the provided attributes: {params}" msgstr "Предоставленным атрибутам соответствуют несколько объектов: {params}" -#: utilities/api.py:168 +#: netbox/utilities/api.py:168 #, python-brace-format msgid "" "Related objects must be referenced by numeric ID or by dictionary of " @@ -14135,43 +14972,43 @@ msgstr "" "На связанные объекты следует ссылаться с помощью числового идентификатора " "или словаря атрибутов. Получено нераспознанное значение: {value}" -#: utilities/api.py:177 +#: netbox/utilities/api.py:177 #, python-brace-format msgid "Related object not found using the provided numeric ID: {id}" msgstr "" "Связанный объект не найден с использованием предоставленного числового " "идентификатора: {id}" -#: utilities/choices.py:19 +#: netbox/utilities/choices.py:19 #, python-brace-format msgid "{name} has a key defined but CHOICES is not a list" msgstr "{name} имеет определенный ключ, но CHOICES не является списком" -#: utilities/conversion.py:19 +#: netbox/utilities/conversion.py:19 msgid "Weight must be a positive number" msgstr "Вес должен быть положительным числом" -#: utilities/conversion.py:21 +#: netbox/utilities/conversion.py:21 #, python-brace-format msgid "Invalid value '{weight}' for weight (must be a number)" msgstr "Неверное значение '{weight}'для веса (должно быть число)" -#: utilities/conversion.py:32 utilities/conversion.py:62 +#: netbox/utilities/conversion.py:32 netbox/utilities/conversion.py:62 #, python-brace-format msgid "Unknown unit {unit}. Must be one of the following: {valid_units}" msgstr "" "Неизвестная единица {unit}. Должно быть одно из следующих: {valid_units}" -#: utilities/conversion.py:45 +#: netbox/utilities/conversion.py:45 msgid "Length must be a positive number" msgstr "Длина должна быть положительным числом" -#: utilities/conversion.py:47 +#: netbox/utilities/conversion.py:47 #, python-brace-format msgid "Invalid value '{length}' for length (must be a number)" msgstr "Неверное значение '{length}'для длины (должно быть число)" -#: utilities/error_handlers.py:31 +#: netbox/utilities/error_handlers.py:31 #, python-brace-format msgid "" "Unable to delete {objects}. {count} dependent objects were " @@ -14180,15 +15017,15 @@ msgstr "" "Невозможно удалить {objects}. {count} найдены зависимые " "объекты: " -#: utilities/error_handlers.py:33 +#: netbox/utilities/error_handlers.py:33 msgid "More than 50" msgstr "Более 50" -#: utilities/fields.py:30 +#: netbox/utilities/fields.py:30 msgid "RGB color in hexadecimal. Example: " msgstr "Цвет RGB в шестнадцатеричном формате. Пример:" -#: utilities/fields.py:159 +#: netbox/utilities/fields.py:159 #, python-format msgid "" "%s(%r) is invalid. to_model parameter to CounterCacheField must be a string " @@ -14197,7 +15034,7 @@ msgstr "" "%s(%r) недействителен. Параметр to_model для CounterCacheField должен быть " "строкой в формате app.model" -#: utilities/fields.py:169 +#: netbox/utilities/fields.py:169 #, python-format msgid "" "%s(%r) is invalid. to_field parameter to CounterCacheField must be a string " @@ -14206,36 +15043,36 @@ msgstr "" "%s(%r) недействителен. Параметр to_field для CounterCacheField должен быть " "строкой в формате «поле»" -#: utilities/forms/bulk_import.py:23 +#: netbox/utilities/forms/bulk_import.py:23 msgid "Enter object data in CSV, JSON or YAML format." msgstr "Введите объектные данные в формате CSV, JSON или YAML." -#: utilities/forms/bulk_import.py:36 +#: netbox/utilities/forms/bulk_import.py:36 msgid "CSV delimiter" msgstr "CSV-разделитель" -#: utilities/forms/bulk_import.py:37 +#: netbox/utilities/forms/bulk_import.py:37 msgid "The character which delimits CSV fields. Applies only to CSV format." msgstr "Символ, ограничивающий поля CSV. Применяется только к формату CSV." -#: utilities/forms/bulk_import.py:51 +#: netbox/utilities/forms/bulk_import.py:51 msgid "Form data must be empty when uploading/selecting a file." msgstr "При загрузке/выборе файла данные формы должны быть пустыми." -#: utilities/forms/bulk_import.py:80 +#: netbox/utilities/forms/bulk_import.py:80 #, python-brace-format msgid "Unknown data format: {format}" msgstr "Неизвестный формат данных: {format}" -#: utilities/forms/bulk_import.py:100 +#: netbox/utilities/forms/bulk_import.py:100 msgid "Unable to detect data format. Please specify." msgstr "Не удалось определить формат данных. Пожалуйста, укажите." -#: utilities/forms/bulk_import.py:123 +#: netbox/utilities/forms/bulk_import.py:123 msgid "Invalid CSV delimiter" msgstr "Неверный разделитель CSV" -#: utilities/forms/bulk_import.py:167 +#: netbox/utilities/forms/bulk_import.py:167 msgid "" "Invalid YAML data. Data must be in the form of multiple documents, or a " "single document comprising a list of dictionaries." @@ -14243,7 +15080,7 @@ msgstr "" "Неверные данные YAML. Данные должны быть в форме нескольких документов или " "одного документа, содержащего список словарей." -#: utilities/forms/fields/array.py:20 +#: netbox/utilities/forms/fields/array.py:20 #, python-brace-format msgid "" "Invalid list ({value}). Must be numeric and ranges must be in ascending " @@ -14252,7 +15089,7 @@ msgstr "" "Неверный список ({value}). Должен быть числовым, а диапазоны — в порядке " "возрастания." -#: utilities/forms/fields/array.py:40 +#: netbox/utilities/forms/fields/array.py:40 msgid "" "Specify one or more numeric ranges separated by commas. Example: " "1-5,20-30" @@ -14260,7 +15097,7 @@ msgstr "" "Укажите один или несколько числовых диапазонов, разделенных запятыми. " "Пример: 1-5, 20-30" -#: utilities/forms/fields/array.py:47 +#: netbox/utilities/forms/fields/array.py:47 #, python-brace-format msgid "" "Invalid ranges ({value}). Must be a range of integers in ascending order." @@ -14268,17 +15105,18 @@ msgstr "" "Неверные диапазоны ({value}). Должен быть диапазон целых чисел в порядке " "возрастания." -#: utilities/forms/fields/csv.py:44 +#: netbox/utilities/forms/fields/csv.py:44 #, python-brace-format msgid "Invalid value for a multiple choice field: {value}" msgstr "Неверное значение для поля с несколькими вариантами ответов: {value}" -#: utilities/forms/fields/csv.py:57 utilities/forms/fields/csv.py:78 +#: netbox/utilities/forms/fields/csv.py:57 +#: netbox/utilities/forms/fields/csv.py:78 #, python-format msgid "Object not found: %(value)s" msgstr "Объект не найден: %(value)s" -#: utilities/forms/fields/csv.py:65 +#: netbox/utilities/forms/fields/csv.py:65 #, python-brace-format msgid "" "\"{value}\" is not a unique value for this field; multiple objects were " @@ -14287,20 +15125,20 @@ msgstr "" "«{value}\"не является уникальным значением для этого поля; найдено несколько" " объектов" -#: utilities/forms/fields/csv.py:69 +#: netbox/utilities/forms/fields/csv.py:69 #, python-brace-format msgid "\"{field_name}\" is an invalid accessor field name." msgstr "\"{field_name}\" — неправильное имя поля доступа." -#: utilities/forms/fields/csv.py:101 +#: netbox/utilities/forms/fields/csv.py:101 msgid "Object type must be specified as \".\"" msgstr "Тип объекта должен быть указан как».»" -#: utilities/forms/fields/csv.py:105 +#: netbox/utilities/forms/fields/csv.py:105 msgid "Invalid object type" msgstr "Неверный тип объекта" -#: utilities/forms/fields/expandable.py:25 +#: netbox/utilities/forms/fields/expandable.py:25 msgid "" "Alphanumeric ranges are supported for bulk creation. Mixed cases and types " "within a single range are not supported (example: " @@ -14310,7 +15148,7 @@ msgstr "" "Смешанные регистр и типы в одном диапазоне не поддерживаются (например: " "[возраст, пол] -0/0/ [0-9])." -#: utilities/forms/fields/expandable.py:46 +#: netbox/utilities/forms/fields/expandable.py:46 msgid "" "Specify a numeric range to create multiple IPs.
    Example: " "192.0.2.[1,5,100-254]/24" @@ -14318,7 +15156,7 @@ msgstr "" "Укажите числовой диапазон для создания нескольких IP-адресов.
    Пример: " "192.0.2 [1,5,100-254] /24" -#: utilities/forms/fields/fields.py:31 +#: netbox/utilities/forms/fields/fields.py:31 #, python-brace-format msgid "" " Уценка поддерживается синтаксис" -#: utilities/forms/fields/fields.py:48 +#: netbox/utilities/forms/fields/fields.py:48 msgid "URL-friendly unique shorthand" msgstr "Уникальное сокращение, удобное для URL-адресов" -#: utilities/forms/fields/fields.py:101 +#: netbox/utilities/forms/fields/fields.py:101 msgid "Enter context data in JSON format." msgstr "" "Введите контекстные данные в JSON формат." -#: utilities/forms/fields/fields.py:124 +#: netbox/utilities/forms/fields/fields.py:124 msgid "MAC address must be in EUI-48 format" msgstr "MAC-адрес должен быть в формате EUI-48" -#: utilities/forms/forms.py:52 +#: netbox/utilities/forms/forms.py:52 msgid "Use regular expressions" msgstr "Используйте регулярные выражения" -#: utilities/forms/forms.py:75 +#: netbox/utilities/forms/forms.py:75 msgid "" "Numeric ID of an existing object to update (if not creating a new object)" msgstr "" "Числовой ID существующего объекта для обновления (если не создается новый " "объект)" -#: utilities/forms/forms.py:92 +#: netbox/utilities/forms/forms.py:92 #, python-brace-format msgid "Unrecognized header: {name}" msgstr "Неизвестный заголовок: {name}" -#: utilities/forms/forms.py:118 +#: netbox/utilities/forms/forms.py:118 msgid "Available Columns" msgstr "Доступные столбцы" -#: utilities/forms/forms.py:126 +#: netbox/utilities/forms/forms.py:126 msgid "Selected Columns" msgstr "Выбранные столбцы" -#: utilities/forms/mixins.py:44 +#: netbox/utilities/forms/mixins.py:44 msgid "" "This object has been modified since the form was rendered. Please consult " "the object's change log for details." @@ -14372,13 +15210,13 @@ msgstr "" "Этот объект был изменен с момента визуализации формы. Подробности см. в " "журнале изменений объекта." -#: utilities/forms/utils.py:42 utilities/forms/utils.py:68 -#: utilities/forms/utils.py:85 utilities/forms/utils.py:87 +#: netbox/utilities/forms/utils.py:42 netbox/utilities/forms/utils.py:68 +#: netbox/utilities/forms/utils.py:85 netbox/utilities/forms/utils.py:87 #, python-brace-format msgid "Range \"{value}\" is invalid." msgstr "Ассортимент»{value}\"недействительно." -#: utilities/forms/utils.py:74 +#: netbox/utilities/forms/utils.py:74 #, python-brace-format msgid "" "Invalid range: Ending value ({end}) must be greater than beginning value " @@ -14387,70 +15225,70 @@ msgstr "" "Неверный диапазон: конечное значение ({end}) должно быть больше начального " "значения ({begin})." -#: utilities/forms/utils.py:232 +#: netbox/utilities/forms/utils.py:232 #, python-brace-format msgid "Duplicate or conflicting column header for \"{field}\"" msgstr "Повторяющийся или конфликтующий заголовок столбца для»{field}»" -#: utilities/forms/utils.py:238 +#: netbox/utilities/forms/utils.py:238 #, python-brace-format msgid "Duplicate or conflicting column header for \"{header}\"" msgstr "Повторяющийся или конфликтующий заголовок столбца для»{header}»" -#: utilities/forms/utils.py:247 +#: netbox/utilities/forms/utils.py:247 #, python-brace-format msgid "Row {row}: Expected {count_expected} columns but found {count_found}" msgstr "" "Ряд {row}: Ожидается {count_expected} столбцы, но найдены {count_found}" -#: utilities/forms/utils.py:270 +#: netbox/utilities/forms/utils.py:270 #, python-brace-format msgid "Unexpected column header \"{field}\" found." msgstr "Неожиданный заголовок столбца»{field}«найдено." -#: utilities/forms/utils.py:272 +#: netbox/utilities/forms/utils.py:272 #, python-brace-format msgid "Column \"{field}\" is not a related object; cannot use dots" msgstr "" "Столбец»{field}\"не является родственным объектом; нельзя использовать точки" -#: utilities/forms/utils.py:276 +#: netbox/utilities/forms/utils.py:276 #, python-brace-format msgid "Invalid related object attribute for column \"{field}\": {to_field}" msgstr "Неверный атрибут связанного объекта для столбца»{field}«: {to_field}" -#: utilities/forms/utils.py:284 +#: netbox/utilities/forms/utils.py:284 #, python-brace-format msgid "Required column header \"{header}\" not found." msgstr "Обязательный заголовок столбца»{header}\"не найден." -#: utilities/forms/widgets/apiselect.py:124 +#: netbox/utilities/forms/widgets/apiselect.py:124 #, python-brace-format msgid "Missing required value for dynamic query param: '{dynamic_params}'" msgstr "" "Отсутствует обязательное значение параметра динамического запроса: " "'{dynamic_params}'" -#: utilities/forms/widgets/apiselect.py:141 +#: netbox/utilities/forms/widgets/apiselect.py:141 #, python-brace-format msgid "Missing required value for static query param: '{static_params}'" msgstr "" "Отсутствует обязательное значение для статического параметра запроса: " "'{static_params}'" -#: utilities/password_validation.py:13 +#: netbox/utilities/password_validation.py:13 msgid "Password must have at least one numeral." msgstr "Пароль должен содержать хотя бы одну цифру." -#: utilities/password_validation.py:18 +#: netbox/utilities/password_validation.py:18 msgid "Password must have at least one uppercase letter." msgstr "Пароль должен содержать хотя бы одну прописную букву." -#: utilities/password_validation.py:23 +#: netbox/utilities/password_validation.py:23 msgid "Password must have at least one lowercase letter." msgstr "Пароль должен содержать хотя бы одну строчную букву." -#: utilities/password_validation.py:27 +#: netbox/utilities/password_validation.py:27 msgid "" "Your password must contain at least one numeral, one uppercase letter and " "one lowercase letter." @@ -14458,7 +15296,7 @@ msgstr "" "Пароль должен содержать как минимум одну цифру, одну прописную и одну " "строчную букву." -#: utilities/permissions.py:42 +#: netbox/utilities/permissions.py:42 #, python-brace-format msgid "" "Invalid permission name: {name}. Must be in the format " @@ -14467,127 +15305,127 @@ msgstr "" "Неверное имя правила доступа: {name}. Должно быть в формате " "._" -#: utilities/permissions.py:60 +#: netbox/utilities/permissions.py:60 #, python-brace-format msgid "Unknown app_label/model_name for {name}" msgstr "Неизвестный app_label/model_name для {name}" -#: utilities/request.py:76 +#: netbox/utilities/request.py:76 #, python-brace-format msgid "Invalid IP address set for {header}: {ip}" msgstr "Неверный IP-адрес установлен для {header}: {ip}" -#: utilities/tables.py:47 +#: netbox/utilities/tables.py:47 #, python-brace-format msgid "A column named {name} is already defined for table {table_name}" msgstr "Столбец с именем {name} уже определено для таблицы {table_name}" -#: utilities/templates/builtins/customfield_value.html:30 +#: netbox/utilities/templates/builtins/customfield_value.html:30 msgid "Not defined" msgstr "Не определено" -#: utilities/templates/buttons/bookmark.html:9 +#: netbox/utilities/templates/buttons/bookmark.html:9 msgid "Unbookmark" msgstr "Удалить закладки" -#: utilities/templates/buttons/bookmark.html:13 +#: netbox/utilities/templates/buttons/bookmark.html:13 msgid "Bookmark" msgstr "Закладка" -#: utilities/templates/buttons/clone.html:4 +#: netbox/utilities/templates/buttons/clone.html:4 msgid "Clone" msgstr "Клонировать" -#: utilities/templates/buttons/export.html:7 +#: netbox/utilities/templates/buttons/export.html:7 msgid "Current View" msgstr "Текущий вид" -#: utilities/templates/buttons/export.html:8 +#: netbox/utilities/templates/buttons/export.html:8 msgid "All Data" msgstr "Все данные" -#: utilities/templates/buttons/export.html:28 +#: netbox/utilities/templates/buttons/export.html:28 msgid "Add export template" msgstr "Добавить шаблон экспорта" -#: utilities/templates/buttons/import.html:4 +#: netbox/utilities/templates/buttons/import.html:4 msgid "Import" msgstr "Импорт" -#: utilities/templates/buttons/subscribe.html:10 +#: netbox/utilities/templates/buttons/subscribe.html:10 msgid "Unsubscribe" msgstr "Отписаться" -#: utilities/templates/buttons/subscribe.html:14 +#: netbox/utilities/templates/buttons/subscribe.html:14 msgid "Subscribe" msgstr "Подписаться" -#: utilities/templates/form_helpers/render_field.html:41 +#: netbox/utilities/templates/form_helpers/render_field.html:41 msgid "Copy to clipboard" msgstr "Скопировать в буфер обмена" -#: utilities/templates/form_helpers/render_field.html:57 +#: netbox/utilities/templates/form_helpers/render_field.html:57 msgid "This field is required" msgstr "Это поле обязательно" -#: utilities/templates/form_helpers/render_field.html:70 +#: netbox/utilities/templates/form_helpers/render_field.html:70 msgid "Set Null" msgstr "Установить значение Null" -#: utilities/templates/helpers/applied_filters.html:11 +#: netbox/utilities/templates/helpers/applied_filters.html:11 msgid "Clear all" msgstr "Очистить все" -#: utilities/templates/helpers/table_config_form.html:8 +#: netbox/utilities/templates/helpers/table_config_form.html:8 msgid "Table Configuration" msgstr "Конфигурация таблицы" -#: utilities/templates/helpers/table_config_form.html:31 +#: netbox/utilities/templates/helpers/table_config_form.html:31 msgid "Move Up" msgstr "Двигаться вверх" -#: utilities/templates/helpers/table_config_form.html:34 +#: netbox/utilities/templates/helpers/table_config_form.html:34 msgid "Move Down" msgstr "Переместить вниз" -#: utilities/templates/navigation/menu.html:14 +#: netbox/utilities/templates/navigation/menu.html:14 msgid "Search…" msgstr "Поиск..." -#: utilities/templates/navigation/menu.html:14 +#: netbox/utilities/templates/navigation/menu.html:14 msgid "Search NetBox" msgstr "Поиск в NetBox" -#: utilities/templates/widgets/apiselect.html:7 +#: netbox/utilities/templates/widgets/apiselect.html:7 msgid "Open selector" msgstr "Открыть селектор" -#: utilities/templates/widgets/markdown_input.html:6 +#: netbox/utilities/templates/widgets/markdown_input.html:6 msgid "Write" msgstr "Текст" -#: utilities/testing/views.py:632 +#: netbox/utilities/testing/views.py:632 msgid "The test must define csv_update_data." msgstr "Тест должен определить csv_update_data." -#: utilities/validators.py:65 +#: netbox/utilities/validators.py:65 #, python-brace-format msgid "{value} is not a valid regular expression." msgstr "{value} не является допустимым регулярным выражением." -#: utilities/views.py:57 +#: netbox/utilities/views.py:57 #, python-brace-format msgid "{self.__class__.__name__} must implement get_required_permission()" msgstr "" "{self.__class__.__name__} должен реализовать функцию get_required_permission" " ()" -#: utilities/views.py:93 +#: netbox/utilities/views.py:93 #, python-brace-format msgid "{class_name} must implement get_required_permission()" msgstr "{class_name} должен реализовать функцию get_required_permission ()" -#: utilities/views.py:117 +#: netbox/utilities/views.py:117 #, python-brace-format msgid "" "{class_name} has no queryset defined. ObjectPermissionRequiredMixin may only" @@ -14597,61 +15435,63 @@ msgstr "" "ObjectPermissionRequiredMixin можно использовать только в представлениях, " "определяющих базовый набор запросов" -#: virtualization/filtersets.py:79 +#: netbox/virtualization/filtersets.py:79 msgid "Parent group (ID)" msgstr "Родительская группа (ID)" -#: virtualization/filtersets.py:85 +#: netbox/virtualization/filtersets.py:85 msgid "Parent group (slug)" msgstr "Родительская группа (подстрока)" -#: virtualization/filtersets.py:89 virtualization/filtersets.py:141 +#: netbox/virtualization/filtersets.py:89 +#: netbox/virtualization/filtersets.py:141 msgid "Cluster type (ID)" msgstr "Тип кластера (ID)" -#: virtualization/filtersets.py:151 virtualization/filtersets.py:271 +#: netbox/virtualization/filtersets.py:151 +#: netbox/virtualization/filtersets.py:271 msgid "Cluster (ID)" msgstr "Кластер (ID)" -#: virtualization/forms/bulk_edit.py:166 -#: virtualization/models/virtualmachines.py:115 +#: netbox/virtualization/forms/bulk_edit.py:166 +#: netbox/virtualization/models/virtualmachines.py:115 msgid "vCPUs" msgstr "Виртуальные процессоры" -#: virtualization/forms/bulk_edit.py:170 +#: netbox/virtualization/forms/bulk_edit.py:170 msgid "Memory (MB)" msgstr "Память (МБ)" -#: virtualization/forms/bulk_edit.py:174 -msgid "Disk (GB)" -msgstr "Диск (ГБ)" +#: netbox/virtualization/forms/bulk_edit.py:174 +msgid "Disk (MB)" +msgstr "Диск (МБ)" -#: virtualization/forms/bulk_edit.py:334 -#: virtualization/forms/filtersets.py:251 -msgid "Size (GB)" -msgstr "Размер (ГБ)" +#: netbox/virtualization/forms/bulk_edit.py:334 +#: netbox/virtualization/forms/filtersets.py:251 +msgid "Size (MB)" +msgstr "Размер (МБ)" -#: virtualization/forms/bulk_import.py:44 +#: netbox/virtualization/forms/bulk_import.py:44 msgid "Type of cluster" msgstr "Тип кластера" -#: virtualization/forms/bulk_import.py:51 +#: netbox/virtualization/forms/bulk_import.py:51 msgid "Assigned cluster group" msgstr "Назначенная кластерная группа" -#: virtualization/forms/bulk_import.py:96 +#: netbox/virtualization/forms/bulk_import.py:96 msgid "Assigned cluster" msgstr "Назначенный кластер" -#: virtualization/forms/bulk_import.py:103 +#: netbox/virtualization/forms/bulk_import.py:103 msgid "Assigned device within cluster" msgstr "Назначенное устройство в кластере" -#: virtualization/forms/filtersets.py:183 +#: netbox/virtualization/forms/filtersets.py:183 msgid "Serial number" msgstr "Серийный номер" -#: virtualization/forms/model_forms.py:153 +#: netbox/virtualization/forms/model_forms.py:153 #, python-brace-format msgid "" "{device} belongs to a different site ({device_site}) than the cluster " @@ -14660,50 +15500,50 @@ msgstr "" "{device} принадлежит другому сайту ({device_site}), чем кластер " "({cluster_site})" -#: virtualization/forms/model_forms.py:192 +#: netbox/virtualization/forms/model_forms.py:192 msgid "Optionally pin this VM to a specific host device within the cluster" msgstr "" "Дополнительно подключите эту виртуальную машину к определенному хост-" "устройству в кластере." -#: virtualization/forms/model_forms.py:221 +#: netbox/virtualization/forms/model_forms.py:221 msgid "Site/Cluster" msgstr "Сайт/кластер" -#: virtualization/forms/model_forms.py:244 +#: netbox/virtualization/forms/model_forms.py:244 msgid "Disk size is managed via the attachment of virtual disks." msgstr "Размер диска регулируется путем вложения виртуальных дисков." -#: virtualization/forms/model_forms.py:372 -#: virtualization/tables/virtualmachines.py:111 +#: netbox/virtualization/forms/model_forms.py:372 +#: netbox/virtualization/tables/virtualmachines.py:111 msgid "Disk" msgstr "Диск" -#: virtualization/models/clusters.py:25 +#: netbox/virtualization/models/clusters.py:25 msgid "cluster type" msgstr "тип кластера" -#: virtualization/models/clusters.py:26 +#: netbox/virtualization/models/clusters.py:26 msgid "cluster types" msgstr "типы кластеров" -#: virtualization/models/clusters.py:45 +#: netbox/virtualization/models/clusters.py:45 msgid "cluster group" msgstr "кластерная группа" -#: virtualization/models/clusters.py:46 +#: netbox/virtualization/models/clusters.py:46 msgid "cluster groups" msgstr "кластерные группы" -#: virtualization/models/clusters.py:121 +#: netbox/virtualization/models/clusters.py:121 msgid "cluster" msgstr "кластер" -#: virtualization/models/clusters.py:122 +#: netbox/virtualization/models/clusters.py:122 msgid "clusters" msgstr "кластеры" -#: virtualization/models/clusters.py:141 +#: netbox/virtualization/models/clusters.py:141 #, python-brace-format msgid "" "{count} devices are assigned as hosts for this cluster but are not in site " @@ -14712,48 +15552,48 @@ msgstr "" "{count} устройства назначены в качестве хостов для этого кластера, но их нет" " на сайте {site}" -#: virtualization/models/virtualmachines.py:123 +#: netbox/virtualization/models/virtualmachines.py:123 msgid "memory (MB)" msgstr "память (МБ)" -#: virtualization/models/virtualmachines.py:128 +#: netbox/virtualization/models/virtualmachines.py:128 msgid "disk (MB)" msgstr "диск (МБ)" -#: virtualization/models/virtualmachines.py:166 +#: netbox/virtualization/models/virtualmachines.py:166 msgid "Virtual machine name must be unique per cluster." msgstr "Имя виртуальной машины должно быть уникальным для каждого кластера." -#: virtualization/models/virtualmachines.py:169 +#: netbox/virtualization/models/virtualmachines.py:169 msgid "virtual machine" msgstr "виртуальная машина" -#: virtualization/models/virtualmachines.py:170 +#: netbox/virtualization/models/virtualmachines.py:170 msgid "virtual machines" msgstr "виртуальные машины" -#: virtualization/models/virtualmachines.py:184 +#: netbox/virtualization/models/virtualmachines.py:184 msgid "A virtual machine must be assigned to a site and/or cluster." msgstr "Виртуальная машина должна быть назначена сайту и/или кластеру." -#: virtualization/models/virtualmachines.py:191 +#: netbox/virtualization/models/virtualmachines.py:191 #, python-brace-format msgid "" "The selected cluster ({cluster}) is not assigned to this site ({site})." msgstr "Выбранный кластер ({cluster}) не относится к этому сайту ({site})." -#: virtualization/models/virtualmachines.py:198 +#: netbox/virtualization/models/virtualmachines.py:198 msgid "Must specify a cluster when assigning a host device." msgstr "При назначении хост-устройства необходимо указать кластер." -#: virtualization/models/virtualmachines.py:203 +#: netbox/virtualization/models/virtualmachines.py:203 #, python-brace-format msgid "" "The selected device ({device}) is not assigned to this cluster ({cluster})." msgstr "" "Выбранное устройство ({device}) не относится к этому кластеру ({cluster})." -#: virtualization/models/virtualmachines.py:215 +#: netbox/virtualization/models/virtualmachines.py:215 #, python-brace-format msgid "" "The specified disk size ({size}) must match the aggregate size of assigned " @@ -14762,18 +15602,18 @@ msgstr "" "Указанный размер диска ({size}) должен соответствовать совокупному размеру " "назначенных виртуальных дисков ({total_size})." -#: virtualization/models/virtualmachines.py:229 +#: netbox/virtualization/models/virtualmachines.py:229 #, python-brace-format msgid "Must be an IPv{family} address. ({ip} is an IPv{version} address.)" msgstr "" "Должен быть IPV{family} адрес. ({ip} является IP-адресом{version} адрес.)" -#: virtualization/models/virtualmachines.py:238 +#: netbox/virtualization/models/virtualmachines.py:238 #, python-brace-format msgid "The specified IP address ({ip}) is not assigned to this VM." msgstr "Указанный IP-адрес ({ip}) не назначено этой виртуальной машине." -#: virtualization/models/virtualmachines.py:396 +#: netbox/virtualization/models/virtualmachines.py:396 #, python-brace-format msgid "" "The selected parent interface ({parent}) belongs to a different virtual " @@ -14782,7 +15622,7 @@ msgstr "" "Выбранный родительский интерфейс ({parent}) принадлежит другой виртуальной " "машине ({virtual_machine})." -#: virtualization/models/virtualmachines.py:411 +#: netbox/virtualization/models/virtualmachines.py:411 #, python-brace-format msgid "" "The selected bridge interface ({bridge}) belongs to a different virtual " @@ -14791,7 +15631,7 @@ msgstr "" "Выбранный интерфейс моста ({bridge}) принадлежит другой виртуальной машине " "({virtual_machine})." -#: virtualization/models/virtualmachines.py:422 +#: netbox/virtualization/models/virtualmachines.py:422 #, python-brace-format msgid "" "The untagged VLAN ({untagged_vlan}) must belong to the same site as the " @@ -14800,393 +15640,416 @@ msgstr "" "VLAN без тегов ({untagged_vlan}) должна принадлежать тому же сайту, что и " "родительская виртуальная машина интерфейса, или она должна быть глобальной." -#: virtualization/models/virtualmachines.py:434 +#: netbox/virtualization/models/virtualmachines.py:434 msgid "size (MB)" msgstr "размер (МБ)" -#: virtualization/models/virtualmachines.py:438 +#: netbox/virtualization/models/virtualmachines.py:438 msgid "virtual disk" msgstr "виртуальный диск" -#: virtualization/models/virtualmachines.py:439 +#: netbox/virtualization/models/virtualmachines.py:439 msgid "virtual disks" msgstr "виртуальные диски" -#: virtualization/views.py:275 +#: netbox/virtualization/views.py:273 #, python-brace-format msgid "Added {count} devices to cluster {cluster}" msgstr "Добавлено {count} устройств(-а) для кластеризации {cluster}" -#: virtualization/views.py:310 +#: netbox/virtualization/views.py:308 #, python-brace-format msgid "Removed {count} devices from cluster {cluster}" msgstr "Удалено {count} устройств(-а) из кластера {cluster}" -#: vpn/choices.py:31 +#: netbox/vpn/choices.py:35 msgid "IPsec - Transport" msgstr "IPsec — транспорт" -#: vpn/choices.py:32 +#: netbox/vpn/choices.py:36 msgid "IPsec - Tunnel" msgstr "IPsec — туннель" -#: vpn/choices.py:33 +#: netbox/vpn/choices.py:37 msgid "IP-in-IP" msgstr "IP-адрес в IP-адресе" -#: vpn/choices.py:34 +#: netbox/vpn/choices.py:38 msgid "GRE" msgstr "GRE" -#: vpn/choices.py:56 +#: netbox/vpn/choices.py:39 +msgid "WireGuard" +msgstr "WireGuard" + +#: netbox/vpn/choices.py:40 +msgid "OpenVPN" +msgstr "OpenVPN" + +#: netbox/vpn/choices.py:41 +msgid "L2TP" +msgstr "L2TP" + +#: netbox/vpn/choices.py:42 +msgid "PPTP" +msgstr "PPTP" + +#: netbox/vpn/choices.py:64 msgid "Hub" msgstr "Hub" -#: vpn/choices.py:57 +#: netbox/vpn/choices.py:65 msgid "Spoke" msgstr "Spoke" -#: vpn/choices.py:80 +#: netbox/vpn/choices.py:88 msgid "Aggressive" msgstr "Агрессивный" -#: vpn/choices.py:81 +#: netbox/vpn/choices.py:89 msgid "Main" msgstr "Главная" -#: vpn/choices.py:92 +#: netbox/vpn/choices.py:100 msgid "Pre-shared keys" msgstr "PSK" -#: vpn/choices.py:93 +#: netbox/vpn/choices.py:101 msgid "Certificates" msgstr "Сертификаты" -#: vpn/choices.py:94 +#: netbox/vpn/choices.py:102 msgid "RSA signatures" msgstr "Подписи RSA" -#: vpn/choices.py:95 +#: netbox/vpn/choices.py:103 msgid "DSA signatures" msgstr "Подписи DSA" -#: vpn/choices.py:178 vpn/choices.py:179 vpn/choices.py:180 vpn/choices.py:181 -#: vpn/choices.py:182 vpn/choices.py:183 vpn/choices.py:184 vpn/choices.py:185 -#: vpn/choices.py:186 vpn/choices.py:187 vpn/choices.py:188 vpn/choices.py:189 -#: vpn/choices.py:190 vpn/choices.py:191 vpn/choices.py:192 vpn/choices.py:193 -#: vpn/choices.py:194 vpn/choices.py:195 vpn/choices.py:196 vpn/choices.py:197 -#: vpn/choices.py:198 vpn/choices.py:199 vpn/choices.py:200 vpn/choices.py:201 +#: netbox/vpn/choices.py:186 netbox/vpn/choices.py:187 +#: netbox/vpn/choices.py:188 netbox/vpn/choices.py:189 +#: netbox/vpn/choices.py:190 netbox/vpn/choices.py:191 +#: netbox/vpn/choices.py:192 netbox/vpn/choices.py:193 +#: netbox/vpn/choices.py:194 netbox/vpn/choices.py:195 +#: netbox/vpn/choices.py:196 netbox/vpn/choices.py:197 +#: netbox/vpn/choices.py:198 netbox/vpn/choices.py:199 +#: netbox/vpn/choices.py:200 netbox/vpn/choices.py:201 +#: netbox/vpn/choices.py:202 netbox/vpn/choices.py:203 +#: netbox/vpn/choices.py:204 netbox/vpn/choices.py:205 +#: netbox/vpn/choices.py:206 netbox/vpn/choices.py:207 +#: netbox/vpn/choices.py:208 netbox/vpn/choices.py:209 #, python-brace-format msgid "Group {n}" msgstr "Группа {n}" -#: vpn/choices.py:243 +#: netbox/vpn/choices.py:251 msgid "Ethernet Private LAN" msgstr "Частная локальная сеть Ethernet" -#: vpn/choices.py:244 +#: netbox/vpn/choices.py:252 msgid "Ethernet Virtual Private LAN" msgstr "Виртуальная частная локальная сеть Ethernet" -#: vpn/choices.py:247 +#: netbox/vpn/choices.py:255 msgid "Ethernet Private Tree" msgstr "Частное дерево Ethernet" -#: vpn/choices.py:248 +#: netbox/vpn/choices.py:256 msgid "Ethernet Virtual Private Tree" msgstr "Виртуальное частное дерево Ethernet" -#: vpn/filtersets.py:41 +#: netbox/vpn/filtersets.py:41 msgid "Tunnel group (ID)" msgstr "Группа туннелей (ID)" -#: vpn/filtersets.py:47 +#: netbox/vpn/filtersets.py:47 msgid "Tunnel group (slug)" msgstr "Группа туннелей (подстрока)" -#: vpn/filtersets.py:54 +#: netbox/vpn/filtersets.py:54 msgid "IPSec profile (ID)" msgstr "Профиль IPsec (ID)" -#: vpn/filtersets.py:60 +#: netbox/vpn/filtersets.py:60 msgid "IPSec profile (name)" msgstr "Профиль IPsec (имя)" -#: vpn/filtersets.py:81 +#: netbox/vpn/filtersets.py:81 msgid "Tunnel (ID)" msgstr "Туннель (ID)" -#: vpn/filtersets.py:87 +#: netbox/vpn/filtersets.py:87 msgid "Tunnel (name)" msgstr "Туннель (название)" -#: vpn/filtersets.py:118 +#: netbox/vpn/filtersets.py:118 msgid "Outside IP (ID)" msgstr "Внешний IP-адрес (ID)" -#: vpn/filtersets.py:130 vpn/filtersets.py:263 +#: netbox/vpn/filtersets.py:130 netbox/vpn/filtersets.py:263 msgid "IKE policy (ID)" msgstr "Политика IKE (ID)" -#: vpn/filtersets.py:136 vpn/filtersets.py:269 +#: netbox/vpn/filtersets.py:136 netbox/vpn/filtersets.py:269 msgid "IKE policy (name)" msgstr "Политика IKE (название)" -#: vpn/filtersets.py:200 vpn/filtersets.py:273 +#: netbox/vpn/filtersets.py:200 netbox/vpn/filtersets.py:273 msgid "IPSec policy (ID)" msgstr "Политика IPsec (ID)" -#: vpn/filtersets.py:206 vpn/filtersets.py:279 +#: netbox/vpn/filtersets.py:206 netbox/vpn/filtersets.py:279 msgid "IPSec policy (name)" msgstr "Политика IPsec (имя)" -#: vpn/filtersets.py:348 +#: netbox/vpn/filtersets.py:348 msgid "L2VPN (slug)" msgstr "L2VPN (подстрока)" -#: vpn/filtersets.py:412 +#: netbox/vpn/filtersets.py:412 msgid "VM Interface (ID)" msgstr "Интерфейс виртуальной машины (ID)" -#: vpn/filtersets.py:418 +#: netbox/vpn/filtersets.py:418 msgid "VLAN (name)" msgstr "VLAN (название)" -#: vpn/forms/bulk_edit.py:45 vpn/forms/bulk_import.py:42 -#: vpn/forms/filtersets.py:54 +#: netbox/vpn/forms/bulk_edit.py:45 netbox/vpn/forms/bulk_import.py:42 +#: netbox/vpn/forms/filtersets.py:54 msgid "Tunnel group" msgstr "Группа туннелей" -#: vpn/forms/bulk_edit.py:117 vpn/models/crypto.py:47 +#: netbox/vpn/forms/bulk_edit.py:117 netbox/vpn/models/crypto.py:47 msgid "SA lifetime" msgstr "Время жизни SA" -#: vpn/forms/bulk_edit.py:151 wireless/forms/bulk_edit.py:79 -#: wireless/forms/bulk_edit.py:126 wireless/forms/filtersets.py:64 -#: wireless/forms/filtersets.py:98 +#: netbox/vpn/forms/bulk_edit.py:151 netbox/wireless/forms/bulk_edit.py:79 +#: netbox/wireless/forms/bulk_edit.py:126 +#: netbox/wireless/forms/filtersets.py:64 +#: netbox/wireless/forms/filtersets.py:98 msgid "Pre-shared key" msgstr "Предварительный общий ключ" -#: vpn/forms/bulk_edit.py:237 vpn/forms/bulk_import.py:239 -#: vpn/forms/filtersets.py:199 vpn/forms/model_forms.py:370 -#: vpn/models/crypto.py:104 +#: netbox/vpn/forms/bulk_edit.py:237 netbox/vpn/forms/bulk_import.py:239 +#: netbox/vpn/forms/filtersets.py:199 netbox/vpn/forms/model_forms.py:370 +#: netbox/vpn/models/crypto.py:104 msgid "IKE policy" msgstr "Политика IKE" -#: vpn/forms/bulk_edit.py:242 vpn/forms/bulk_import.py:244 -#: vpn/forms/filtersets.py:204 vpn/forms/model_forms.py:374 -#: vpn/models/crypto.py:209 +#: netbox/vpn/forms/bulk_edit.py:242 netbox/vpn/forms/bulk_import.py:244 +#: netbox/vpn/forms/filtersets.py:204 netbox/vpn/forms/model_forms.py:374 +#: netbox/vpn/models/crypto.py:209 msgid "IPSec policy" msgstr "Политика IPsec" -#: vpn/forms/bulk_import.py:50 +#: netbox/vpn/forms/bulk_import.py:50 msgid "Tunnel encapsulation" msgstr "Инкапсуляция туннелей" -#: vpn/forms/bulk_import.py:83 +#: netbox/vpn/forms/bulk_import.py:83 msgid "Operational role" msgstr "Операционная роль" -#: vpn/forms/bulk_import.py:90 +#: netbox/vpn/forms/bulk_import.py:90 msgid "Parent device of assigned interface" msgstr "Родительское устройство назначенного интерфейса" -#: vpn/forms/bulk_import.py:97 +#: netbox/vpn/forms/bulk_import.py:97 msgid "Parent VM of assigned interface" msgstr "Родительская виртуальная машина назначенного интерфейса" -#: vpn/forms/bulk_import.py:104 +#: netbox/vpn/forms/bulk_import.py:104 msgid "Device or virtual machine interface" msgstr "Интерфейс устройства или виртуальной машины" -#: vpn/forms/bulk_import.py:183 +#: netbox/vpn/forms/bulk_import.py:183 msgid "IKE proposal(s)" msgstr "Предложение (предложения) IKE" -#: vpn/forms/bulk_import.py:215 vpn/models/crypto.py:197 +#: netbox/vpn/forms/bulk_import.py:215 netbox/vpn/models/crypto.py:197 msgid "Diffie-Hellman group for Perfect Forward Secrecy" msgstr "Группа Диффи-Хеллмана за Perfect Forward Secrecy" -#: vpn/forms/bulk_import.py:222 +#: netbox/vpn/forms/bulk_import.py:222 msgid "IPSec proposal(s)" msgstr "Предложение (предложения) IPsec" -#: vpn/forms/bulk_import.py:236 +#: netbox/vpn/forms/bulk_import.py:236 msgid "IPSec protocol" msgstr "Протокол IPsec" -#: vpn/forms/bulk_import.py:266 +#: netbox/vpn/forms/bulk_import.py:266 msgid "L2VPN type" msgstr "Тип L2VPN" -#: vpn/forms/bulk_import.py:287 +#: netbox/vpn/forms/bulk_import.py:287 msgid "Parent device (for interface)" msgstr "Родительское устройство (для интерфейса)" -#: vpn/forms/bulk_import.py:294 +#: netbox/vpn/forms/bulk_import.py:294 msgid "Parent virtual machine (for interface)" msgstr "Родительская виртуальная машина (для интерфейса)" -#: vpn/forms/bulk_import.py:301 +#: netbox/vpn/forms/bulk_import.py:301 msgid "Assigned interface (device or VM)" msgstr "Назначенный интерфейс (устройство или виртуальная машина)" -#: vpn/forms/bulk_import.py:334 +#: netbox/vpn/forms/bulk_import.py:334 msgid "Cannot import device and VM interface terminations simultaneously." msgstr "" "Невозможно одновременно сетевые окончания интерфейса устройства и " "виртуальной машины." -#: vpn/forms/bulk_import.py:336 +#: netbox/vpn/forms/bulk_import.py:336 msgid "Each termination must specify either an interface or a VLAN." msgstr "Каждое оконечное устройство должно указывать интерфейс или VLAN." -#: vpn/forms/bulk_import.py:338 +#: netbox/vpn/forms/bulk_import.py:338 msgid "Cannot assign both an interface and a VLAN." msgstr "Невозможно назначить одновременно интерфейс и VLAN." -#: vpn/forms/filtersets.py:130 +#: netbox/vpn/forms/filtersets.py:130 msgid "IKE version" msgstr "Версия IKE" -#: vpn/forms/filtersets.py:142 vpn/forms/filtersets.py:175 -#: vpn/forms/model_forms.py:298 vpn/forms/model_forms.py:334 +#: netbox/vpn/forms/filtersets.py:142 netbox/vpn/forms/filtersets.py:175 +#: netbox/vpn/forms/model_forms.py:298 netbox/vpn/forms/model_forms.py:334 msgid "Proposal" msgstr "Предложение" -#: vpn/forms/filtersets.py:251 +#: netbox/vpn/forms/filtersets.py:251 msgid "Assigned Object Type" msgstr "Назначенный тип объекта" -#: vpn/forms/model_forms.py:95 vpn/forms/model_forms.py:130 -#: vpn/forms/model_forms.py:240 vpn/tables/tunnels.py:91 +#: netbox/vpn/forms/model_forms.py:95 netbox/vpn/forms/model_forms.py:130 +#: netbox/vpn/forms/model_forms.py:240 netbox/vpn/tables/tunnels.py:91 msgid "Tunnel interface" msgstr "Туннельный интерфейс" -#: vpn/forms/model_forms.py:150 +#: netbox/vpn/forms/model_forms.py:150 msgid "First Termination" msgstr "Первая точка" -#: vpn/forms/model_forms.py:153 +#: netbox/vpn/forms/model_forms.py:153 msgid "Second Termination" msgstr "Вторая точка" -#: vpn/forms/model_forms.py:197 +#: netbox/vpn/forms/model_forms.py:197 msgid "This parameter is required when defining a termination." msgstr "Этот параметр необходим при определении точки." -#: vpn/forms/model_forms.py:320 vpn/forms/model_forms.py:356 +#: netbox/vpn/forms/model_forms.py:320 netbox/vpn/forms/model_forms.py:356 msgid "Policy" msgstr "Политика" -#: vpn/forms/model_forms.py:487 +#: netbox/vpn/forms/model_forms.py:487 msgid "A termination must specify an interface or VLAN." msgstr "В терминации должен быть указан интерфейс или VLAN." -#: vpn/forms/model_forms.py:489 +#: netbox/vpn/forms/model_forms.py:489 msgid "" "A termination can only have one terminating object (an interface or VLAN)." msgstr "" "Терминал может иметь только один конечный объект (интерфейс или VLAN)." -#: vpn/models/crypto.py:33 +#: netbox/vpn/models/crypto.py:33 msgid "encryption algorithm" msgstr "алгоритм шифрования" -#: vpn/models/crypto.py:37 +#: netbox/vpn/models/crypto.py:37 msgid "authentication algorithm" msgstr "алгоритм аутентификации" -#: vpn/models/crypto.py:44 +#: netbox/vpn/models/crypto.py:44 msgid "Diffie-Hellman group ID" msgstr "Идентификатор группы Диффи-Хеллман" -#: vpn/models/crypto.py:50 +#: netbox/vpn/models/crypto.py:50 msgid "Security association lifetime (in seconds)" msgstr "Срок службы охранной ассоциации (в секундах)" -#: vpn/models/crypto.py:59 +#: netbox/vpn/models/crypto.py:59 msgid "IKE proposal" msgstr "Предложение IKE" -#: vpn/models/crypto.py:60 +#: netbox/vpn/models/crypto.py:60 msgid "IKE proposals" msgstr "Предложения IKE" -#: vpn/models/crypto.py:76 +#: netbox/vpn/models/crypto.py:76 msgid "version" msgstr "версия" -#: vpn/models/crypto.py:88 vpn/models/crypto.py:190 +#: netbox/vpn/models/crypto.py:88 netbox/vpn/models/crypto.py:190 msgid "proposals" msgstr "предложений" -#: vpn/models/crypto.py:91 wireless/models.py:39 +#: netbox/vpn/models/crypto.py:91 netbox/wireless/models.py:39 msgid "pre-shared key" msgstr "предварительный общий ключ" -#: vpn/models/crypto.py:105 +#: netbox/vpn/models/crypto.py:105 msgid "IKE policies" msgstr "Политики IKE" -#: vpn/models/crypto.py:118 +#: netbox/vpn/models/crypto.py:118 msgid "Mode is required for selected IKE version" msgstr "Режим необходим для выбранной версии IKE" -#: vpn/models/crypto.py:122 +#: netbox/vpn/models/crypto.py:122 msgid "Mode cannot be used for selected IKE version" msgstr "Режим не может быть использован для выбранной версии IKE" -#: vpn/models/crypto.py:136 +#: netbox/vpn/models/crypto.py:136 msgid "encryption" msgstr "шифрование" -#: vpn/models/crypto.py:141 +#: netbox/vpn/models/crypto.py:141 msgid "authentication" msgstr "аутентификация" -#: vpn/models/crypto.py:149 +#: netbox/vpn/models/crypto.py:149 msgid "Security association lifetime (seconds)" msgstr "Срок действия ассоциации безопасности (в секундах)" -#: vpn/models/crypto.py:155 +#: netbox/vpn/models/crypto.py:155 msgid "Security association lifetime (in kilobytes)" msgstr "Срок действия ассоциации безопасности (в килобайтах)" -#: vpn/models/crypto.py:164 +#: netbox/vpn/models/crypto.py:164 msgid "IPSec proposal" msgstr "Предложение IPsec" -#: vpn/models/crypto.py:165 +#: netbox/vpn/models/crypto.py:165 msgid "IPSec proposals" msgstr "Предложения IPsec" -#: vpn/models/crypto.py:178 +#: netbox/vpn/models/crypto.py:178 msgid "Encryption and/or authentication algorithm must be defined" msgstr "Необходимо определить алгоритм шифрования и/или аутентификации" -#: vpn/models/crypto.py:210 +#: netbox/vpn/models/crypto.py:210 msgid "IPSec policies" msgstr "Политики IPsec" -#: vpn/models/crypto.py:251 +#: netbox/vpn/models/crypto.py:251 msgid "IPSec profiles" msgstr "Профили IPsec" -#: vpn/models/l2vpn.py:116 +#: netbox/vpn/models/l2vpn.py:116 msgid "L2VPN termination" msgstr "L2VPN соединение" -#: vpn/models/l2vpn.py:117 +#: netbox/vpn/models/l2vpn.py:117 msgid "L2VPN terminations" msgstr "L2VPN соединения" -#: vpn/models/l2vpn.py:135 +#: netbox/vpn/models/l2vpn.py:135 #, python-brace-format msgid "L2VPN Termination already assigned ({assigned_object})" msgstr "Терминация L2VPN уже назначена ({assigned_object})" -#: vpn/models/l2vpn.py:147 +#: netbox/vpn/models/l2vpn.py:147 #, python-brace-format msgid "" "{l2vpn_type} L2VPNs cannot have more than two terminations; found " @@ -15195,187 +16058,195 @@ msgstr "" "{l2vpn_type} У L2VPN не может быть более двух терминаций; найдено " "{terminations_count} уже определено." -#: vpn/models/tunnels.py:26 +#: netbox/vpn/models/tunnels.py:26 msgid "tunnel group" msgstr "группа туннелей" -#: vpn/models/tunnels.py:27 +#: netbox/vpn/models/tunnels.py:27 msgid "tunnel groups" msgstr "группы туннелей" -#: vpn/models/tunnels.py:53 +#: netbox/vpn/models/tunnels.py:53 msgid "encapsulation" msgstr "инкапсуляция" -#: vpn/models/tunnels.py:72 +#: netbox/vpn/models/tunnels.py:72 msgid "tunnel ID" msgstr "идентификатор туннеля" -#: vpn/models/tunnels.py:94 +#: netbox/vpn/models/tunnels.py:94 msgid "tunnel" msgstr "туннель" -#: vpn/models/tunnels.py:95 +#: netbox/vpn/models/tunnels.py:95 msgid "tunnels" msgstr "туннели" -#: vpn/models/tunnels.py:153 +#: netbox/vpn/models/tunnels.py:153 msgid "An object may be terminated to only one tunnel at a time." msgstr "Одновременно объект может быть отправлен только в один туннель." -#: vpn/models/tunnels.py:156 +#: netbox/vpn/models/tunnels.py:156 msgid "tunnel termination" msgstr "точка подключения туннеля" -#: vpn/models/tunnels.py:157 +#: netbox/vpn/models/tunnels.py:157 msgid "tunnel terminations" msgstr "точки подключения туннеля" -#: vpn/models/tunnels.py:174 +#: netbox/vpn/models/tunnels.py:174 #, python-brace-format msgid "{name} is already attached to a tunnel ({tunnel})." msgstr "{name} уже подключен к туннелю ({tunnel})." -#: vpn/tables/crypto.py:22 +#: netbox/vpn/tables/crypto.py:22 msgid "Authentication Method" msgstr "Метод аутентификации" -#: vpn/tables/crypto.py:25 vpn/tables/crypto.py:97 +#: netbox/vpn/tables/crypto.py:25 netbox/vpn/tables/crypto.py:97 msgid "Encryption Algorithm" msgstr "Алгоритм шифрования" -#: vpn/tables/crypto.py:28 vpn/tables/crypto.py:100 +#: netbox/vpn/tables/crypto.py:28 netbox/vpn/tables/crypto.py:100 msgid "Authentication Algorithm" msgstr "Алгоритм аутентификации" -#: vpn/tables/crypto.py:34 +#: netbox/vpn/tables/crypto.py:34 msgid "SA Lifetime" msgstr "Срок службы" -#: vpn/tables/crypto.py:71 +#: netbox/vpn/tables/crypto.py:71 msgid "Pre-shared Key" msgstr "Предварительный общий ключ" -#: vpn/tables/crypto.py:103 +#: netbox/vpn/tables/crypto.py:103 msgid "SA Lifetime (Seconds)" msgstr "Срок службы SA (в секундах)" -#: vpn/tables/crypto.py:106 +#: netbox/vpn/tables/crypto.py:106 msgid "SA Lifetime (KB)" msgstr "Срок службы SA (КБ)" -#: vpn/tables/l2vpn.py:69 +#: netbox/vpn/tables/l2vpn.py:69 msgid "Object Parent" msgstr "Родитель объекта" -#: vpn/tables/l2vpn.py:74 +#: netbox/vpn/tables/l2vpn.py:74 msgid "Object Site" msgstr "Сайт объекта" -#: wireless/choices.py:11 +#: netbox/wireless/choices.py:11 msgid "Access point" msgstr "Точка доступа" -#: wireless/choices.py:12 +#: netbox/wireless/choices.py:12 msgid "Station" msgstr "Станция" -#: wireless/choices.py:467 +#: netbox/wireless/choices.py:467 msgid "Open" msgstr "Открыть" -#: wireless/choices.py:469 +#: netbox/wireless/choices.py:469 msgid "WPA Personal (PSK)" msgstr "Персонал WPA (PSK)" -#: wireless/choices.py:470 +#: netbox/wireless/choices.py:470 msgid "WPA Enterprise" msgstr "Предприятие WPA" -#: wireless/forms/bulk_edit.py:73 wireless/forms/bulk_edit.py:120 -#: wireless/forms/bulk_import.py:68 wireless/forms/bulk_import.py:71 -#: wireless/forms/bulk_import.py:110 wireless/forms/bulk_import.py:113 -#: wireless/forms/filtersets.py:59 wireless/forms/filtersets.py:93 +#: netbox/wireless/forms/bulk_edit.py:73 +#: netbox/wireless/forms/bulk_edit.py:120 +#: netbox/wireless/forms/bulk_import.py:68 +#: netbox/wireless/forms/bulk_import.py:71 +#: netbox/wireless/forms/bulk_import.py:110 +#: netbox/wireless/forms/bulk_import.py:113 +#: netbox/wireless/forms/filtersets.py:59 +#: netbox/wireless/forms/filtersets.py:93 msgid "Authentication cipher" msgstr "Шифр аутентификации" -#: wireless/forms/bulk_edit.py:134 wireless/forms/bulk_import.py:116 -#: wireless/forms/bulk_import.py:119 wireless/forms/filtersets.py:106 +#: 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 "Единица измерения расстояний" -#: wireless/forms/bulk_import.py:52 +#: netbox/wireless/forms/bulk_import.py:52 msgid "Bridged VLAN" msgstr "Мостовая VLAN" -#: wireless/forms/bulk_import.py:89 wireless/tables/wirelesslink.py:28 +#: netbox/wireless/forms/bulk_import.py:89 +#: netbox/wireless/tables/wirelesslink.py:28 msgid "Interface A" msgstr "Интерфейс A" -#: wireless/forms/bulk_import.py:93 wireless/tables/wirelesslink.py:37 +#: netbox/wireless/forms/bulk_import.py:93 +#: netbox/wireless/tables/wirelesslink.py:37 msgid "Interface B" msgstr "Интерфейс B" -#: wireless/forms/model_forms.py:161 +#: netbox/wireless/forms/model_forms.py:161 msgid "Side B" msgstr "Сторона B" -#: wireless/models.py:31 +#: netbox/wireless/models.py:31 msgid "authentication cipher" msgstr "шифр аутентификации" -#: wireless/models.py:69 +#: netbox/wireless/models.py:69 msgid "wireless LAN group" msgstr "группа беспроводной локальной сети" -#: wireless/models.py:70 +#: netbox/wireless/models.py:70 msgid "wireless LAN groups" msgstr "группы беспроводной локальной сети" -#: wireless/models.py:116 +#: netbox/wireless/models.py:116 msgid "wireless LAN" msgstr "беспроводная локальная сеть" -#: wireless/models.py:144 +#: netbox/wireless/models.py:144 msgid "interface A" msgstr "Интерфейс A" -#: wireless/models.py:151 +#: netbox/wireless/models.py:151 msgid "interface B" msgstr "Интерфейс B" -#: wireless/models.py:165 +#: netbox/wireless/models.py:165 msgid "distance" msgstr "расстояние" -#: wireless/models.py:172 +#: netbox/wireless/models.py:172 msgid "distance unit" msgstr "единица измерения расстояний" -#: wireless/models.py:219 +#: netbox/wireless/models.py:219 msgid "wireless link" msgstr "беспроводное соединение" -#: wireless/models.py:220 +#: netbox/wireless/models.py:220 msgid "wireless links" msgstr "беспроводные соединения" -#: wireless/models.py:236 +#: netbox/wireless/models.py:236 msgid "Must specify a unit when setting a wireless distance" msgstr "" "При настройке беспроводного расстояния необходимо указать единицу измерения" -#: wireless/models.py:242 wireless/models.py:248 +#: netbox/wireless/models.py:242 netbox/wireless/models.py:248 #, python-brace-format msgid "{type} is not a wireless interface." msgstr "{type} не является беспроводным интерфейсом." -#: wireless/utils.py:16 +#: netbox/wireless/utils.py:16 #, python-brace-format msgid "Invalid channel value: {channel}" msgstr "Неверное значение канала: {channel}" -#: wireless/utils.py:26 +#: netbox/wireless/utils.py:26 #, python-brace-format msgid "Invalid channel attribute: {name}" msgstr "Неверный атрибут канала: {name}" diff --git a/netbox/translations/tr/LC_MESSAGES/django.mo b/netbox/translations/tr/LC_MESSAGES/django.mo index 9117323f5..0455483e3 100644 Binary files a/netbox/translations/tr/LC_MESSAGES/django.mo and b/netbox/translations/tr/LC_MESSAGES/django.mo differ diff --git a/netbox/translations/tr/LC_MESSAGES/django.po b/netbox/translations/tr/LC_MESSAGES/django.po index aec1ef71e..18fd06563 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: 2024-10-28 19:20+0000\n" +"POT-Creation-Date: 2024-12-12 05:02+0000\n" "PO-Revision-Date: 2023-10-30 17:48+0000\n" "Last-Translator: Jeremy Stretch, 2024\n" "Language-Team: Turkish (https://app.transifex.com/netbox-community/teams/178115/tr/)\n" @@ -23,1869 +23,2136 @@ msgstr "" "Language: tr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: account/tables.py:27 templates/account/token.html:22 -#: templates/users/token.html:17 users/forms/bulk_import.py:39 -#: users/forms/model_forms.py:112 +#: netbox/account/tables.py:27 netbox/templates/account/token.html:22 +#: netbox/templates/users/token.html:17 netbox/users/forms/bulk_import.py:39 +#: netbox/users/forms/model_forms.py:112 msgid "Key" msgstr "Anahtar" -#: account/tables.py:31 users/forms/filtersets.py:132 +#: netbox/account/tables.py:31 netbox/users/forms/filtersets.py:132 msgid "Write Enabled" msgstr "Yazma Etkin" -#: account/tables.py:35 core/choices.py:86 core/tables/jobs.py:29 -#: core/tables/tasks.py:79 extras/tables/tables.py:335 -#: extras/tables/tables.py:566 templates/account/token.html:43 -#: templates/core/configrevision.html:26 -#: templates/core/configrevision_restore.html:12 templates/core/job.html:69 -#: templates/core/rq_task.html:16 templates/core/rq_task.html:73 -#: templates/core/rq_worker.html:14 -#: templates/extras/htmx/script_result.html:12 -#: templates/extras/journalentry.html:22 templates/generic/object.html:58 -#: templates/users/token.html:35 +#: netbox/account/tables.py:35 netbox/core/choices.py:86 +#: 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 +#: netbox/templates/core/configrevision.html:26 +#: netbox/templates/core/configrevision_restore.html:12 +#: netbox/templates/core/job.html:69 netbox/templates/core/rq_task.html:16 +#: netbox/templates/core/rq_task.html:73 +#: netbox/templates/core/rq_worker.html:14 +#: netbox/templates/extras/htmx/script_result.html:12 +#: netbox/templates/extras/journalentry.html:22 +#: netbox/templates/generic/object.html:58 +#: netbox/templates/users/token.html:35 msgid "Created" msgstr "Oluşturuldu" -#: account/tables.py:39 templates/account/token.html:47 -#: templates/users/token.html:39 users/forms/bulk_edit.py:117 -#: users/forms/filtersets.py:136 +#: netbox/account/tables.py:39 netbox/templates/account/token.html:47 +#: netbox/templates/users/token.html:39 netbox/users/forms/bulk_edit.py:117 +#: netbox/users/forms/filtersets.py:136 msgid "Expires" msgstr "Süre bitiş tarihi" -#: account/tables.py:42 users/forms/filtersets.py:141 +#: netbox/account/tables.py:42 netbox/users/forms/filtersets.py:141 msgid "Last Used" msgstr "Son Kullanım" -#: account/tables.py:45 templates/account/token.html:55 -#: templates/users/token.html:47 users/forms/bulk_edit.py:122 -#: users/forms/model_forms.py:124 +#: netbox/account/tables.py:45 netbox/templates/account/token.html:55 +#: netbox/templates/users/token.html:47 netbox/users/forms/bulk_edit.py:122 +#: netbox/users/forms/model_forms.py:124 msgid "Allowed IPs" msgstr "İzin verilen IP'ler" -#: account/views.py:114 +#: netbox/account/views.py:114 #, python-brace-format msgid "Logged in as {user}." msgstr "Olarak oturum açtı {user}." -#: account/views.py:164 +#: netbox/account/views.py:164 msgid "You have logged out." msgstr "Oturumu kapattınız." -#: account/views.py:216 +#: netbox/account/views.py:216 msgid "Your preferences have been updated." msgstr "Tercihleriniz güncellendi." -#: account/views.py:239 +#: netbox/account/views.py:239 msgid "LDAP-authenticated user credentials cannot be changed within NetBox." msgstr "" "LDAP kimliği doğrulanmış kullanıcı kimlik bilgileri NetBox içinde " "değiştirilemez." -#: account/views.py:254 +#: netbox/account/views.py:254 msgid "Your password has been changed successfully." msgstr "Şifreniz başarıyla değiştirildi." -#: circuits/choices.py:21 dcim/choices.py:20 dcim/choices.py:102 -#: dcim/choices.py:185 dcim/choices.py:237 dcim/choices.py:1530 -#: dcim/choices.py:1606 dcim/choices.py:1656 virtualization/choices.py:20 -#: virtualization/choices.py:45 vpn/choices.py:18 +#: netbox/circuits/choices.py:21 netbox/dcim/choices.py:20 +#: netbox/dcim/choices.py:102 netbox/dcim/choices.py: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 msgid "Planned" msgstr "Planlanan" -#: circuits/choices.py:22 netbox/navigation/menu.py:305 +#: netbox/circuits/choices.py:22 netbox/netbox/navigation/menu.py:305 msgid "Provisioning" msgstr "Tedarik" -#: circuits/choices.py:23 core/tables/tasks.py:22 dcim/choices.py:22 -#: dcim/choices.py:103 dcim/choices.py:184 dcim/choices.py:236 -#: dcim/choices.py:1605 dcim/choices.py:1655 extras/tables/tables.py:495 -#: ipam/choices.py:31 ipam/choices.py:49 ipam/choices.py:69 -#: ipam/choices.py:154 templates/extras/configcontext.html:25 -#: templates/users/user.html:37 users/forms/bulk_edit.py:38 -#: virtualization/choices.py:22 virtualization/choices.py:44 vpn/choices.py:19 -#: wireless/choices.py:25 +#: netbox/circuits/choices.py:23 netbox/core/tables/tasks.py:22 +#: netbox/dcim/choices.py:22 netbox/dcim/choices.py:103 +#: netbox/dcim/choices.py: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/templates/users/user.html:37 netbox/users/forms/bulk_edit.py:38 +#: netbox/virtualization/choices.py:22 netbox/virtualization/choices.py:44 +#: netbox/vpn/choices.py:19 netbox/wireless/choices.py:25 msgid "Active" msgstr "Aktif" -#: circuits/choices.py:24 dcim/choices.py:183 dcim/choices.py:235 -#: dcim/choices.py:1604 dcim/choices.py:1657 virtualization/choices.py:24 -#: virtualization/choices.py:43 +#: 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 msgid "Offline" msgstr "Çevrim dışı" -#: circuits/choices.py:25 +#: netbox/circuits/choices.py:25 msgid "Deprovisioning" msgstr "Hazırlıktan Kaldırma" -#: circuits/choices.py:26 +#: netbox/circuits/choices.py:26 msgid "Decommissioned" msgstr "Hizmet dışı bırakıldı" -#: circuits/choices.py:90 dcim/choices.py:1617 tenancy/choices.py:17 +#: netbox/circuits/choices.py:90 netbox/dcim/choices.py:1619 +#: netbox/tenancy/choices.py:17 msgid "Primary" msgstr "Birincil" -#: circuits/choices.py:91 ipam/choices.py:90 tenancy/choices.py:18 +#: netbox/circuits/choices.py:91 netbox/ipam/choices.py:90 +#: netbox/tenancy/choices.py:18 msgid "Secondary" msgstr "İkincil" -#: circuits/choices.py:92 tenancy/choices.py:19 +#: netbox/circuits/choices.py:92 netbox/tenancy/choices.py:19 msgid "Tertiary" msgstr "Üçüncül" -#: circuits/choices.py:93 tenancy/choices.py:20 +#: netbox/circuits/choices.py:93 netbox/tenancy/choices.py:20 msgid "Inactive" msgstr "Etkin Olmayan" -#: circuits/filtersets.py:31 circuits/filtersets.py:198 dcim/filtersets.py:98 -#: dcim/filtersets.py:152 dcim/filtersets.py:212 dcim/filtersets.py:333 -#: dcim/filtersets.py:464 dcim/filtersets.py:1021 dcim/filtersets.py:1368 -#: dcim/filtersets.py:1903 dcim/filtersets.py:2146 dcim/filtersets.py:2204 -#: ipam/filtersets.py:339 ipam/filtersets.py:959 -#: virtualization/filtersets.py:45 virtualization/filtersets.py:173 -#: vpn/filtersets.py:358 +#: 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:339 netbox/ipam/filtersets.py:959 +#: netbox/virtualization/filtersets.py:45 +#: netbox/virtualization/filtersets.py:173 netbox/vpn/filtersets.py:358 msgid "Region (ID)" msgstr "Bölge (ID)" -#: circuits/filtersets.py:38 circuits/filtersets.py:205 dcim/filtersets.py:105 -#: dcim/filtersets.py:158 dcim/filtersets.py:219 dcim/filtersets.py:340 -#: dcim/filtersets.py:471 dcim/filtersets.py:1028 dcim/filtersets.py:1375 -#: dcim/filtersets.py:1910 dcim/filtersets.py:2153 dcim/filtersets.py:2211 -#: extras/filtersets.py:509 ipam/filtersets.py:346 ipam/filtersets.py:966 -#: virtualization/filtersets.py:52 virtualization/filtersets.py:180 -#: vpn/filtersets.py:353 +#: 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:346 +#: netbox/ipam/filtersets.py:966 netbox/virtualization/filtersets.py:52 +#: netbox/virtualization/filtersets.py:180 netbox/vpn/filtersets.py:353 msgid "Region (slug)" msgstr "Bölge (kısa ad)" -#: circuits/filtersets.py:44 circuits/filtersets.py:211 dcim/filtersets.py:128 -#: dcim/filtersets.py:225 dcim/filtersets.py:346 dcim/filtersets.py:477 -#: dcim/filtersets.py:1034 dcim/filtersets.py:1381 dcim/filtersets.py:1916 -#: dcim/filtersets.py:2159 dcim/filtersets.py:2217 ipam/filtersets.py:352 -#: ipam/filtersets.py:972 virtualization/filtersets.py:58 -#: virtualization/filtersets.py:186 +#: 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:352 +#: netbox/ipam/filtersets.py:972 netbox/virtualization/filtersets.py:58 +#: netbox/virtualization/filtersets.py:186 msgid "Site group (ID)" msgstr "Site grubu (ID)" -#: circuits/filtersets.py:51 circuits/filtersets.py:218 dcim/filtersets.py:135 -#: dcim/filtersets.py:232 dcim/filtersets.py:353 dcim/filtersets.py:484 -#: dcim/filtersets.py:1041 dcim/filtersets.py:1388 dcim/filtersets.py:1923 -#: dcim/filtersets.py:2166 dcim/filtersets.py:2224 extras/filtersets.py:515 -#: ipam/filtersets.py:359 ipam/filtersets.py:979 -#: virtualization/filtersets.py:65 virtualization/filtersets.py:193 +#: 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:359 netbox/ipam/filtersets.py:979 +#: netbox/virtualization/filtersets.py:65 +#: netbox/virtualization/filtersets.py:193 msgid "Site group (slug)" msgstr "Site grubu (kısa ad)" -#: circuits/filtersets.py:56 circuits/forms/bulk_edit.py:188 -#: circuits/forms/bulk_edit.py:216 circuits/forms/bulk_import.py:124 -#: circuits/forms/filtersets.py:51 circuits/forms/filtersets.py:171 -#: circuits/forms/filtersets.py:209 circuits/forms/model_forms.py:138 -#: circuits/forms/model_forms.py:154 circuits/tables/circuits.py:113 -#: dcim/forms/bulk_edit.py:168 dcim/forms/bulk_edit.py:329 -#: dcim/forms/bulk_edit.py:677 dcim/forms/bulk_edit.py:873 -#: dcim/forms/bulk_import.py:131 dcim/forms/bulk_import.py:230 -#: dcim/forms/bulk_import.py:309 dcim/forms/bulk_import.py:540 -#: dcim/forms/bulk_import.py:1311 dcim/forms/bulk_import.py:1339 -#: dcim/forms/filtersets.py:87 dcim/forms/filtersets.py:225 -#: dcim/forms/filtersets.py:342 dcim/forms/filtersets.py:439 -#: dcim/forms/filtersets.py:753 dcim/forms/filtersets.py:997 -#: dcim/forms/filtersets.py:1021 dcim/forms/filtersets.py:1111 -#: dcim/forms/filtersets.py:1149 dcim/forms/filtersets.py:1584 -#: dcim/forms/filtersets.py:1608 dcim/forms/filtersets.py:1632 -#: dcim/forms/model_forms.py:137 dcim/forms/model_forms.py:165 -#: dcim/forms/model_forms.py:238 dcim/forms/model_forms.py:463 -#: dcim/forms/model_forms.py:723 dcim/forms/object_create.py:391 -#: dcim/tables/devices.py:153 dcim/tables/power.py:26 dcim/tables/power.py:93 -#: dcim/tables/racks.py:122 dcim/tables/racks.py:207 dcim/tables/sites.py:134 -#: extras/filtersets.py:525 ipam/forms/bulk_edit.py:218 -#: ipam/forms/bulk_edit.py:285 ipam/forms/bulk_edit.py:484 -#: ipam/forms/bulk_import.py:171 ipam/forms/bulk_import.py:429 -#: ipam/forms/filtersets.py:153 ipam/forms/filtersets.py:231 -#: ipam/forms/filtersets.py:432 ipam/forms/filtersets.py:489 -#: ipam/forms/model_forms.py:205 ipam/forms/model_forms.py:636 -#: ipam/tables/ip.py:245 ipam/tables/vlans.py:118 ipam/tables/vlans.py:221 -#: templates/circuits/inc/circuit_termination_fields.html:6 -#: templates/dcim/device.html:22 templates/dcim/inc/cable_termination.html:8 -#: templates/dcim/inc/cable_termination.html:33 -#: templates/dcim/location.html:37 templates/dcim/powerpanel.html:22 -#: templates/dcim/rack.html:20 templates/dcim/rackreservation.html:28 -#: templates/dcim/site.html:28 templates/ipam/prefix.html:56 -#: templates/ipam/vlan.html:23 templates/ipam/vlan_edit.html:40 -#: templates/virtualization/cluster.html:42 -#: templates/virtualization/virtualmachine.html:95 -#: virtualization/forms/bulk_edit.py:91 virtualization/forms/bulk_edit.py:109 -#: virtualization/forms/bulk_edit.py:124 -#: virtualization/forms/bulk_import.py:59 -#: virtualization/forms/bulk_import.py:85 -#: virtualization/forms/filtersets.py:79 -#: virtualization/forms/filtersets.py:148 -#: virtualization/forms/model_forms.py:71 -#: virtualization/forms/model_forms.py:104 -#: virtualization/forms/model_forms.py:171 -#: virtualization/tables/clusters.py:77 -#: virtualization/tables/virtualmachines.py:63 vpn/forms/filtersets.py:266 -#: wireless/forms/model_forms.py:76 wireless/forms/model_forms.py:118 +#: 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/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/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/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 msgid "Site" msgstr "Site" -#: circuits/filtersets.py:62 circuits/filtersets.py:229 -#: circuits/filtersets.py:274 dcim/filtersets.py:242 dcim/filtersets.py:363 -#: dcim/filtersets.py:458 extras/filtersets.py:531 ipam/filtersets.py:238 -#: ipam/filtersets.py:369 ipam/filtersets.py:989 -#: virtualization/filtersets.py:75 virtualization/filtersets.py:203 -#: vpn/filtersets.py:363 +#: 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/virtualization/filtersets.py:75 +#: netbox/virtualization/filtersets.py:203 netbox/vpn/filtersets.py:363 msgid "Site (slug)" msgstr "Site (kısa ad)" -#: circuits/filtersets.py:67 +#: netbox/circuits/filtersets.py:67 msgid "ASN (ID)" msgstr "ASN (ID)" -#: circuits/filtersets.py:73 circuits/forms/filtersets.py:31 -#: ipam/forms/model_forms.py:159 ipam/models/asns.py:108 -#: ipam/models/asns.py:125 ipam/tables/asn.py:41 templates/ipam/asn.html:20 +#: 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/templates/ipam/asn.html:20 msgid "ASN" msgstr "ASN" -#: circuits/filtersets.py:95 circuits/filtersets.py:122 -#: circuits/filtersets.py:156 circuits/filtersets.py:283 -#: circuits/filtersets.py:325 ipam/filtersets.py:243 +#: 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 msgid "Provider (ID)" msgstr "Sağlayıcı (ID)" -#: circuits/filtersets.py:101 circuits/filtersets.py:128 -#: circuits/filtersets.py:162 circuits/filtersets.py:289 -#: circuits/filtersets.py:331 ipam/filtersets.py:249 +#: 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 msgid "Provider (slug)" msgstr "Sağlayıcı (kısa ad)" -#: circuits/filtersets.py:167 +#: netbox/circuits/filtersets.py:167 msgid "Provider account (ID)" msgstr "Sağlayıcı hesabı (ID)" -#: circuits/filtersets.py:173 +#: netbox/circuits/filtersets.py:173 msgid "Provider account (account)" msgstr "Sağlayıcı hesabı (hesap)" -#: circuits/filtersets.py:178 +#: netbox/circuits/filtersets.py:178 msgid "Provider network (ID)" msgstr "Sağlayıcı ağı (ID)" -#: circuits/filtersets.py:182 +#: netbox/circuits/filtersets.py:182 msgid "Circuit type (ID)" msgstr "Devre tipi (ID)" -#: circuits/filtersets.py:188 +#: netbox/circuits/filtersets.py:188 msgid "Circuit type (slug)" msgstr "Devre tipi (kısa ad)" -#: circuits/filtersets.py:223 circuits/filtersets.py:268 -#: dcim/filtersets.py:236 dcim/filtersets.py:357 dcim/filtersets.py:452 -#: dcim/filtersets.py:1045 dcim/filtersets.py:1393 dcim/filtersets.py:1928 -#: dcim/filtersets.py:2170 dcim/filtersets.py:2229 ipam/filtersets.py:232 -#: ipam/filtersets.py:363 ipam/filtersets.py:983 -#: virtualization/filtersets.py:69 virtualization/filtersets.py:197 -#: vpn/filtersets.py:368 +#: 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:232 netbox/ipam/filtersets.py:363 +#: netbox/ipam/filtersets.py:983 netbox/virtualization/filtersets.py:69 +#: netbox/virtualization/filtersets.py:197 netbox/vpn/filtersets.py:368 msgid "Site (ID)" msgstr "Site (ID)" -#: circuits/filtersets.py:233 circuits/filtersets.py:237 +#: netbox/circuits/filtersets.py:233 netbox/circuits/filtersets.py:237 msgid "Termination A (ID)" msgstr "Fesih A (ID)" -#: circuits/filtersets.py:260 circuits/filtersets.py:320 core/filtersets.py:77 -#: core/filtersets.py:136 core/filtersets.py:173 dcim/filtersets.py:751 -#: dcim/filtersets.py:1362 dcim/filtersets.py:2277 extras/filtersets.py:41 -#: extras/filtersets.py:63 extras/filtersets.py:92 extras/filtersets.py:132 -#: extras/filtersets.py:181 extras/filtersets.py:209 extras/filtersets.py:239 -#: extras/filtersets.py:276 extras/filtersets.py:348 extras/filtersets.py:391 -#: extras/filtersets.py:438 extras/filtersets.py:498 extras/filtersets.py:657 -#: extras/filtersets.py:703 ipam/forms/model_forms.py:449 -#: netbox/filtersets.py:282 netbox/forms/__init__.py:22 -#: netbox/forms/base.py:167 templates/htmx/object_selector.html:28 -#: templates/inc/filter_list.html:46 templates/ipam/ipaddress_assign.html:29 -#: templates/search.html:7 templates/search.html:26 tenancy/filtersets.py:99 -#: users/filtersets.py:23 users/filtersets.py:57 users/filtersets.py:102 -#: users/filtersets.py:150 utilities/forms/forms.py:104 -#: utilities/templates/navigation/menu.html:16 +#: 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/templates/htmx/object_selector.html:28 +#: netbox/templates/inc/filter_list.html:46 +#: netbox/templates/ipam/ipaddress_assign.html:29 +#: netbox/templates/search.html:7 netbox/templates/search.html:26 +#: netbox/tenancy/filtersets.py:99 netbox/users/filtersets.py:23 +#: netbox/users/filtersets.py:57 netbox/users/filtersets.py:102 +#: netbox/users/filtersets.py:150 netbox/utilities/forms/forms.py:104 +#: netbox/utilities/templates/navigation/menu.html:16 msgid "Search" msgstr "Arama" -#: circuits/filtersets.py:264 circuits/forms/bulk_edit.py:172 -#: circuits/forms/bulk_edit.py:246 circuits/forms/bulk_import.py:115 -#: circuits/forms/filtersets.py:198 circuits/forms/filtersets.py:214 -#: circuits/forms/filtersets.py:260 circuits/forms/model_forms.py:111 -#: circuits/forms/model_forms.py:133 circuits/forms/model_forms.py:199 -#: circuits/tables/circuits.py:104 circuits/tables/circuits.py:164 -#: dcim/forms/connections.py:73 templates/circuits/circuit.html:15 -#: templates/circuits/circuitgroupassignment.html:26 -#: templates/circuits/circuittermination.html:19 -#: templates/dcim/inc/cable_termination.html:55 -#: templates/dcim/trace/circuit.html:4 +#: 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/templates/circuits/circuit.html:15 +#: netbox/templates/circuits/circuitgroupassignment.html:26 +#: 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" -#: circuits/filtersets.py:278 +#: netbox/circuits/filtersets.py:278 msgid "ProviderNetwork (ID)" msgstr "Sağlayıcı Ağı (ID)" -#: circuits/filtersets.py:335 +#: netbox/circuits/filtersets.py:335 msgid "Circuit (ID)" msgstr "Devre (ID)" -#: circuits/filtersets.py:341 +#: netbox/circuits/filtersets.py:341 msgid "Circuit (CID)" msgstr "Devre (CID)" -#: circuits/filtersets.py:345 +#: netbox/circuits/filtersets.py:345 msgid "Circuit group (ID)" msgstr "Devre grubu (ID)" -#: circuits/filtersets.py:351 +#: netbox/circuits/filtersets.py:351 msgid "Circuit group (slug)" msgstr "Devre grubu (sümüklü böcek)" -#: circuits/forms/bulk_edit.py:30 circuits/forms/filtersets.py:56 -#: circuits/forms/model_forms.py:29 circuits/tables/providers.py:33 -#: dcim/forms/bulk_edit.py:128 dcim/forms/filtersets.py:195 -#: dcim/forms/model_forms.py:123 dcim/tables/sites.py:94 -#: ipam/models/asns.py:126 ipam/tables/asn.py:27 ipam/views.py:213 -#: netbox/navigation/menu.py:172 netbox/navigation/menu.py:175 -#: templates/circuits/provider.html:23 +#: 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/templates/circuits/provider.html:23 msgid "ASNs" msgstr "ASN'ler" -#: circuits/forms/bulk_edit.py:34 circuits/forms/bulk_edit.py:56 -#: circuits/forms/bulk_edit.py:83 circuits/forms/bulk_edit.py:104 -#: circuits/forms/bulk_edit.py:164 circuits/forms/bulk_edit.py:183 -#: circuits/forms/bulk_edit.py:228 core/forms/bulk_edit.py:28 -#: dcim/forms/bulk_create.py:35 dcim/forms/bulk_edit.py:73 -#: dcim/forms/bulk_edit.py:92 dcim/forms/bulk_edit.py:151 -#: dcim/forms/bulk_edit.py:192 dcim/forms/bulk_edit.py:210 -#: dcim/forms/bulk_edit.py:288 dcim/forms/bulk_edit.py:432 -#: dcim/forms/bulk_edit.py:466 dcim/forms/bulk_edit.py:481 -#: dcim/forms/bulk_edit.py:540 dcim/forms/bulk_edit.py:584 -#: dcim/forms/bulk_edit.py:618 dcim/forms/bulk_edit.py:642 -#: dcim/forms/bulk_edit.py:715 dcim/forms/bulk_edit.py:767 -#: dcim/forms/bulk_edit.py:819 dcim/forms/bulk_edit.py:842 -#: dcim/forms/bulk_edit.py:890 dcim/forms/bulk_edit.py:960 -#: dcim/forms/bulk_edit.py:1013 dcim/forms/bulk_edit.py:1048 -#: dcim/forms/bulk_edit.py:1088 dcim/forms/bulk_edit.py:1132 -#: dcim/forms/bulk_edit.py:1177 dcim/forms/bulk_edit.py:1204 -#: dcim/forms/bulk_edit.py:1222 dcim/forms/bulk_edit.py:1240 -#: dcim/forms/bulk_edit.py:1258 dcim/forms/bulk_edit.py:1682 -#: extras/forms/bulk_edit.py:39 extras/forms/bulk_edit.py:149 -#: extras/forms/bulk_edit.py:178 extras/forms/bulk_edit.py:208 -#: extras/forms/bulk_edit.py:256 extras/forms/bulk_edit.py:274 -#: extras/forms/bulk_edit.py:298 extras/forms/bulk_edit.py:312 -#: extras/forms/bulk_edit.py:339 extras/tables/tables.py:79 -#: ipam/forms/bulk_edit.py:53 ipam/forms/bulk_edit.py:73 -#: ipam/forms/bulk_edit.py:93 ipam/forms/bulk_edit.py:117 -#: ipam/forms/bulk_edit.py:146 ipam/forms/bulk_edit.py:175 -#: ipam/forms/bulk_edit.py:194 ipam/forms/bulk_edit.py:276 -#: ipam/forms/bulk_edit.py:321 ipam/forms/bulk_edit.py:369 -#: ipam/forms/bulk_edit.py:412 ipam/forms/bulk_edit.py:428 -#: ipam/forms/bulk_edit.py:516 ipam/forms/bulk_edit.py:547 -#: templates/account/token.html:35 templates/circuits/circuit.html:59 -#: templates/circuits/circuitgroup.html:32 -#: templates/circuits/circuittype.html:26 -#: templates/circuits/inc/circuit_termination_fields.html:88 -#: templates/circuits/provider.html:33 -#: templates/circuits/providernetwork.html:32 -#: templates/core/datasource.html:54 templates/core/plugin.html:80 -#: templates/dcim/cable.html:36 templates/dcim/consoleport.html:44 -#: templates/dcim/consoleserverport.html:44 templates/dcim/device.html:94 -#: templates/dcim/devicebay.html:32 templates/dcim/devicerole.html:30 -#: templates/dcim/devicetype.html:33 templates/dcim/frontport.html:58 -#: templates/dcim/interface.html:69 templates/dcim/inventoryitem.html:60 -#: templates/dcim/inventoryitemrole.html:22 templates/dcim/location.html:33 -#: templates/dcim/manufacturer.html:40 templates/dcim/module.html:73 -#: templates/dcim/modulebay.html:42 templates/dcim/moduletype.html:37 -#: templates/dcim/platform.html:33 templates/dcim/powerfeed.html:40 -#: templates/dcim/poweroutlet.html:40 templates/dcim/powerpanel.html:30 -#: templates/dcim/powerport.html:40 templates/dcim/rack.html:53 -#: templates/dcim/rackreservation.html:62 templates/dcim/rackrole.html:26 -#: templates/dcim/racktype.html:24 templates/dcim/rearport.html:54 -#: templates/dcim/region.html:33 templates/dcim/site.html:60 -#: templates/dcim/sitegroup.html:33 templates/dcim/virtualchassis.html:31 -#: templates/extras/configcontext.html:21 -#: templates/extras/configtemplate.html:17 -#: templates/extras/customfield.html:34 -#: templates/extras/dashboard/widget_add.html:14 -#: templates/extras/eventrule.html:21 templates/extras/exporttemplate.html:19 -#: templates/extras/notificationgroup.html:20 -#: templates/extras/savedfilter.html:17 templates/extras/script_list.html:45 -#: templates/extras/tag.html:20 templates/extras/webhook.html:17 -#: templates/generic/bulk_import.html:120 templates/ipam/aggregate.html:43 -#: templates/ipam/asn.html:42 templates/ipam/asnrange.html:38 -#: templates/ipam/fhrpgroup.html:34 templates/ipam/ipaddress.html:55 -#: templates/ipam/iprange.html:67 templates/ipam/prefix.html:81 -#: templates/ipam/rir.html:26 templates/ipam/role.html:26 -#: templates/ipam/routetarget.html:21 templates/ipam/service.html:50 -#: templates/ipam/servicetemplate.html:27 templates/ipam/vlan.html:62 -#: templates/ipam/vlangroup.html:34 templates/ipam/vrf.html:33 -#: templates/tenancy/contact.html:67 templates/tenancy/contactgroup.html:25 -#: templates/tenancy/contactrole.html:22 templates/tenancy/tenant.html:24 -#: templates/tenancy/tenantgroup.html:33 templates/users/group.html:21 -#: templates/users/objectpermission.html:21 templates/users/token.html:27 -#: templates/virtualization/cluster.html:25 -#: templates/virtualization/clustergroup.html:26 -#: templates/virtualization/clustertype.html:26 -#: templates/virtualization/virtualdisk.html:39 -#: templates/virtualization/virtualmachine.html:31 -#: templates/virtualization/vminterface.html:51 -#: templates/vpn/ikepolicy.html:17 templates/vpn/ikeproposal.html:17 -#: templates/vpn/ipsecpolicy.html:17 templates/vpn/ipsecprofile.html:17 -#: templates/vpn/ipsecprofile.html:40 templates/vpn/ipsecprofile.html:73 -#: templates/vpn/ipsecproposal.html:17 templates/vpn/l2vpn.html:26 -#: templates/vpn/tunnel.html:33 templates/vpn/tunnelgroup.html:30 -#: templates/wireless/wirelesslan.html:26 -#: templates/wireless/wirelesslangroup.html:33 -#: templates/wireless/wirelesslink.html:34 tenancy/forms/bulk_edit.py:32 -#: tenancy/forms/bulk_edit.py:80 tenancy/forms/bulk_edit.py:122 -#: users/forms/bulk_edit.py:64 users/forms/bulk_edit.py:82 -#: users/forms/bulk_edit.py:112 virtualization/forms/bulk_edit.py:32 -#: virtualization/forms/bulk_edit.py:46 virtualization/forms/bulk_edit.py:100 -#: virtualization/forms/bulk_edit.py:177 virtualization/forms/bulk_edit.py:228 -#: virtualization/forms/bulk_edit.py:337 vpn/forms/bulk_edit.py:28 -#: vpn/forms/bulk_edit.py:64 vpn/forms/bulk_edit.py:121 -#: vpn/forms/bulk_edit.py:155 vpn/forms/bulk_edit.py:190 -#: vpn/forms/bulk_edit.py:215 vpn/forms/bulk_edit.py:247 -#: vpn/forms/bulk_edit.py:274 wireless/forms/bulk_edit.py:29 -#: wireless/forms/bulk_edit.py:82 wireless/forms/bulk_edit.py:140 +#: 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/templates/account/token.html:35 +#: netbox/templates/circuits/circuit.html:59 +#: netbox/templates/circuits/circuitgroup.html:32 +#: netbox/templates/circuits/circuittype.html:26 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:88 +#: netbox/templates/circuits/provider.html:33 +#: netbox/templates/circuits/providernetwork.html:32 +#: netbox/templates/core/datasource.html:54 +#: netbox/templates/core/plugin.html:80 netbox/templates/dcim/cable.html:36 +#: netbox/templates/dcim/consoleport.html:44 +#: netbox/templates/dcim/consoleserverport.html:44 +#: netbox/templates/dcim/device.html:94 +#: netbox/templates/dcim/devicebay.html:32 +#: netbox/templates/dcim/devicerole.html:30 +#: netbox/templates/dcim/devicetype.html:33 +#: netbox/templates/dcim/frontport.html:58 +#: netbox/templates/dcim/interface.html:69 +#: netbox/templates/dcim/inventoryitem.html:60 +#: netbox/templates/dcim/inventoryitemrole.html:22 +#: netbox/templates/dcim/location.html:33 +#: netbox/templates/dcim/manufacturer.html:40 +#: netbox/templates/dcim/module.html:73 +#: netbox/templates/dcim/modulebay.html:42 +#: netbox/templates/dcim/moduletype.html:37 +#: netbox/templates/dcim/platform.html:33 +#: netbox/templates/dcim/powerfeed.html:40 +#: netbox/templates/dcim/poweroutlet.html:40 +#: netbox/templates/dcim/powerpanel.html:30 +#: netbox/templates/dcim/powerport.html:40 netbox/templates/dcim/rack.html:53 +#: netbox/templates/dcim/rackreservation.html:62 +#: netbox/templates/dcim/rackrole.html:26 +#: netbox/templates/dcim/racktype.html:24 +#: netbox/templates/dcim/rearport.html:54 netbox/templates/dcim/region.html:33 +#: netbox/templates/dcim/site.html:60 netbox/templates/dcim/sitegroup.html:33 +#: netbox/templates/dcim/virtualchassis.html:31 +#: netbox/templates/extras/configcontext.html:21 +#: netbox/templates/extras/configtemplate.html:17 +#: netbox/templates/extras/customfield.html:34 +#: netbox/templates/extras/dashboard/widget_add.html:14 +#: netbox/templates/extras/eventrule.html:21 +#: netbox/templates/extras/exporttemplate.html:19 +#: netbox/templates/extras/notificationgroup.html:20 +#: netbox/templates/extras/savedfilter.html:17 +#: netbox/templates/extras/script_list.html:46 +#: netbox/templates/extras/tag.html:20 netbox/templates/extras/webhook.html:17 +#: netbox/templates/generic/bulk_import.html:120 +#: netbox/templates/ipam/aggregate.html:43 netbox/templates/ipam/asn.html:42 +#: netbox/templates/ipam/asnrange.html:38 +#: netbox/templates/ipam/fhrpgroup.html:34 +#: netbox/templates/ipam/ipaddress.html:55 +#: netbox/templates/ipam/iprange.html:67 netbox/templates/ipam/prefix.html:81 +#: netbox/templates/ipam/rir.html:26 netbox/templates/ipam/role.html:26 +#: netbox/templates/ipam/routetarget.html:21 +#: netbox/templates/ipam/service.html:50 +#: netbox/templates/ipam/servicetemplate.html:27 +#: netbox/templates/ipam/vlan.html:62 netbox/templates/ipam/vlangroup.html:34 +#: netbox/templates/ipam/vrf.html:33 netbox/templates/tenancy/contact.html:67 +#: netbox/templates/tenancy/contactgroup.html:25 +#: netbox/templates/tenancy/contactrole.html:22 +#: netbox/templates/tenancy/tenant.html:24 +#: netbox/templates/tenancy/tenantgroup.html:33 +#: netbox/templates/users/group.html:21 +#: netbox/templates/users/objectpermission.html:21 +#: netbox/templates/users/token.html:27 +#: netbox/templates/virtualization/cluster.html:25 +#: netbox/templates/virtualization/clustergroup.html:26 +#: netbox/templates/virtualization/clustertype.html:26 +#: netbox/templates/virtualization/virtualdisk.html:39 +#: netbox/templates/virtualization/virtualmachine.html:31 +#: netbox/templates/virtualization/vminterface.html:51 +#: netbox/templates/vpn/ikepolicy.html:17 +#: netbox/templates/vpn/ikeproposal.html:17 +#: netbox/templates/vpn/ipsecpolicy.html:17 +#: netbox/templates/vpn/ipsecprofile.html:17 +#: netbox/templates/vpn/ipsecprofile.html:40 +#: netbox/templates/vpn/ipsecprofile.html:73 +#: netbox/templates/vpn/ipsecproposal.html:17 +#: netbox/templates/vpn/l2vpn.html:26 netbox/templates/vpn/tunnel.html:33 +#: netbox/templates/vpn/tunnelgroup.html:30 +#: netbox/templates/wireless/wirelesslan.html:26 +#: netbox/templates/wireless/wirelesslangroup.html:33 +#: netbox/templates/wireless/wirelesslink.html:34 +#: netbox/tenancy/forms/bulk_edit.py:32 netbox/tenancy/forms/bulk_edit.py:80 +#: netbox/tenancy/forms/bulk_edit.py:122 netbox/users/forms/bulk_edit.py:64 +#: netbox/users/forms/bulk_edit.py:82 netbox/users/forms/bulk_edit.py:112 +#: netbox/virtualization/forms/bulk_edit.py:32 +#: netbox/virtualization/forms/bulk_edit.py:46 +#: netbox/virtualization/forms/bulk_edit.py:100 +#: netbox/virtualization/forms/bulk_edit.py:177 +#: netbox/virtualization/forms/bulk_edit.py:228 +#: netbox/virtualization/forms/bulk_edit.py:337 +#: netbox/vpn/forms/bulk_edit.py:28 netbox/vpn/forms/bulk_edit.py:64 +#: netbox/vpn/forms/bulk_edit.py:121 netbox/vpn/forms/bulk_edit.py:155 +#: netbox/vpn/forms/bulk_edit.py:190 netbox/vpn/forms/bulk_edit.py:215 +#: netbox/vpn/forms/bulk_edit.py:247 netbox/vpn/forms/bulk_edit.py:274 +#: netbox/wireless/forms/bulk_edit.py:29 netbox/wireless/forms/bulk_edit.py:82 +#: netbox/wireless/forms/bulk_edit.py:140 msgid "Description" msgstr "Açıklama" -#: circuits/forms/bulk_edit.py:51 circuits/forms/bulk_edit.py:73 -#: circuits/forms/bulk_edit.py:123 circuits/forms/bulk_import.py:36 -#: circuits/forms/bulk_import.py:51 circuits/forms/bulk_import.py:74 -#: circuits/forms/filtersets.py:70 circuits/forms/filtersets.py:88 -#: circuits/forms/filtersets.py:116 circuits/forms/filtersets.py:131 -#: circuits/forms/filtersets.py:199 circuits/forms/filtersets.py:232 -#: circuits/forms/filtersets.py:255 circuits/forms/model_forms.py:47 -#: circuits/forms/model_forms.py:61 circuits/forms/model_forms.py:93 -#: circuits/tables/circuits.py:58 circuits/tables/circuits.py:108 -#: circuits/tables/circuits.py:160 circuits/tables/providers.py:72 -#: circuits/tables/providers.py:103 templates/circuits/circuit.html:18 -#: templates/circuits/circuittermination.html:25 -#: templates/circuits/provider.html:20 -#: templates/circuits/provideraccount.html:20 -#: templates/circuits/providernetwork.html:20 -#: templates/dcim/inc/cable_termination.html:51 +#: netbox/circuits/forms/bulk_edit.py: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/templates/circuits/circuit.html:18 +#: netbox/templates/circuits/circuittermination.html:25 +#: netbox/templates/circuits/provider.html:20 +#: netbox/templates/circuits/provideraccount.html:20 +#: netbox/templates/circuits/providernetwork.html:20 +#: netbox/templates/dcim/inc/cable_termination.html:51 msgid "Provider" msgstr "Sağlayıcı" -#: circuits/forms/bulk_edit.py:80 circuits/forms/filtersets.py:91 -#: templates/circuits/providernetwork.html:28 +#: netbox/circuits/forms/bulk_edit.py:80 +#: netbox/circuits/forms/filtersets.py:91 +#: netbox/templates/circuits/providernetwork.html:28 msgid "Service ID" msgstr "Servis ID" -#: circuits/forms/bulk_edit.py:100 circuits/forms/filtersets.py:107 -#: dcim/forms/bulk_edit.py:206 dcim/forms/bulk_edit.py:604 -#: dcim/forms/bulk_edit.py:804 dcim/forms/bulk_edit.py:1173 -#: dcim/forms/bulk_edit.py:1200 dcim/forms/bulk_edit.py:1678 -#: dcim/forms/filtersets.py:1064 dcim/forms/filtersets.py:1455 -#: dcim/forms/filtersets.py:1479 dcim/tables/devices.py:704 -#: dcim/tables/devices.py:761 dcim/tables/devices.py:1003 -#: dcim/tables/devicetypes.py:249 dcim/tables/devicetypes.py:264 -#: dcim/tables/racks.py:33 extras/forms/bulk_edit.py:270 -#: extras/tables/tables.py:443 templates/circuits/circuittype.html:30 -#: templates/dcim/cable.html:40 templates/dcim/devicerole.html:34 -#: templates/dcim/frontport.html:40 templates/dcim/inventoryitemrole.html:26 -#: templates/dcim/rackrole.html:30 templates/dcim/rearport.html:40 -#: templates/extras/tag.html:26 +#: netbox/circuits/forms/bulk_edit.py: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/templates/circuits/circuittype.html:30 +#: netbox/templates/dcim/cable.html:40 +#: netbox/templates/dcim/devicerole.html:34 +#: netbox/templates/dcim/frontport.html:40 +#: netbox/templates/dcim/inventoryitemrole.html:26 +#: netbox/templates/dcim/rackrole.html:30 +#: netbox/templates/dcim/rearport.html:40 netbox/templates/extras/tag.html:26 msgid "Color" msgstr "Renk" -#: circuits/forms/bulk_edit.py:118 circuits/forms/bulk_import.py:87 -#: circuits/forms/filtersets.py:126 core/forms/bulk_edit.py:18 -#: core/forms/filtersets.py:33 core/tables/change_logging.py:32 -#: core/tables/data.py:20 core/tables/jobs.py:18 dcim/forms/bulk_edit.py:782 -#: dcim/forms/bulk_edit.py:921 dcim/forms/bulk_edit.py:989 -#: dcim/forms/bulk_edit.py:1008 dcim/forms/bulk_edit.py:1031 -#: dcim/forms/bulk_edit.py:1073 dcim/forms/bulk_edit.py:1117 -#: dcim/forms/bulk_edit.py:1168 dcim/forms/bulk_edit.py:1195 -#: dcim/forms/bulk_import.py:188 dcim/forms/bulk_import.py:260 -#: dcim/forms/bulk_import.py:708 dcim/forms/bulk_import.py:734 -#: dcim/forms/bulk_import.py:760 dcim/forms/bulk_import.py:780 -#: dcim/forms/bulk_import.py:863 dcim/forms/bulk_import.py:957 -#: dcim/forms/bulk_import.py:999 dcim/forms/bulk_import.py:1213 -#: dcim/forms/bulk_import.py:1376 dcim/forms/filtersets.py:955 -#: dcim/forms/filtersets.py:1054 dcim/forms/filtersets.py:1175 -#: dcim/forms/filtersets.py:1247 dcim/forms/filtersets.py:1272 -#: dcim/forms/filtersets.py:1296 dcim/forms/filtersets.py:1316 -#: dcim/forms/filtersets.py:1353 dcim/forms/filtersets.py:1450 -#: dcim/forms/filtersets.py:1474 dcim/forms/model_forms.py:703 -#: dcim/forms/model_forms.py:709 dcim/forms/object_import.py:84 -#: dcim/forms/object_import.py:113 dcim/forms/object_import.py:145 -#: dcim/tables/devices.py:178 dcim/tables/devices.py:814 -#: dcim/tables/power.py:77 dcim/tables/racks.py:138 -#: extras/forms/bulk_import.py:42 extras/tables/tables.py:405 -#: extras/tables/tables.py:465 netbox/tables/tables.py:240 -#: templates/circuits/circuit.html:30 templates/core/datasource.html:38 -#: templates/dcim/cable.html:15 templates/dcim/consoleport.html:36 -#: templates/dcim/consoleserverport.html:36 templates/dcim/frontport.html:36 -#: templates/dcim/interface.html:46 templates/dcim/interface.html:169 -#: templates/dcim/interface.html:311 templates/dcim/powerfeed.html:32 -#: templates/dcim/poweroutlet.html:36 templates/dcim/powerport.html:36 -#: templates/dcim/rearport.html:36 templates/extras/eventrule.html:74 -#: templates/virtualization/cluster.html:17 templates/vpn/l2vpn.html:22 -#: templates/wireless/inc/authentication_attrs.html:8 -#: templates/wireless/inc/wirelesslink_interface.html:14 -#: virtualization/forms/bulk_edit.py:60 virtualization/forms/bulk_import.py:41 -#: virtualization/forms/filtersets.py:54 -#: virtualization/forms/model_forms.py:62 virtualization/tables/clusters.py:66 -#: vpn/forms/bulk_edit.py:264 vpn/forms/bulk_import.py:264 -#: vpn/forms/filtersets.py:217 vpn/forms/model_forms.py:84 -#: vpn/forms/model_forms.py:119 vpn/forms/model_forms.py:231 +#: netbox/circuits/forms/bulk_edit.py: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/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/core/datasource.html:38 +#: netbox/templates/dcim/cable.html:15 +#: netbox/templates/dcim/consoleport.html:36 +#: netbox/templates/dcim/consoleserverport.html:36 +#: netbox/templates/dcim/frontport.html:36 +#: netbox/templates/dcim/interface.html:46 +#: netbox/templates/dcim/interface.html:169 +#: netbox/templates/dcim/interface.html:311 +#: netbox/templates/dcim/powerfeed.html:32 +#: netbox/templates/dcim/poweroutlet.html:36 +#: netbox/templates/dcim/powerport.html:36 +#: netbox/templates/dcim/rearport.html:36 +#: netbox/templates/extras/eventrule.html:74 +#: netbox/templates/virtualization/cluster.html:17 +#: netbox/templates/vpn/l2vpn.html:22 +#: netbox/templates/wireless/inc/authentication_attrs.html:8 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:14 +#: netbox/virtualization/forms/bulk_edit.py:60 +#: netbox/virtualization/forms/bulk_import.py:41 +#: netbox/virtualization/forms/filtersets.py:54 +#: netbox/virtualization/forms/model_forms.py:62 +#: netbox/virtualization/tables/clusters.py:66 +#: netbox/vpn/forms/bulk_edit.py:264 netbox/vpn/forms/bulk_import.py:264 +#: netbox/vpn/forms/filtersets.py:217 netbox/vpn/forms/model_forms.py:84 +#: netbox/vpn/forms/model_forms.py:119 netbox/vpn/forms/model_forms.py:231 msgid "Type" msgstr "Tür" -#: circuits/forms/bulk_edit.py:128 circuits/forms/bulk_import.py:80 -#: circuits/forms/filtersets.py:139 circuits/forms/model_forms.py:98 +#: 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 msgid "Provider account" msgstr "Sağlayıcı hesabı" -#: circuits/forms/bulk_edit.py:136 circuits/forms/bulk_import.py:93 -#: circuits/forms/filtersets.py:150 core/forms/filtersets.py:38 -#: core/forms/filtersets.py:79 core/tables/data.py:23 core/tables/jobs.py:26 -#: core/tables/tasks.py:88 dcim/forms/bulk_edit.py:106 -#: dcim/forms/bulk_edit.py:181 dcim/forms/bulk_edit.py:351 -#: dcim/forms/bulk_edit.py:700 dcim/forms/bulk_edit.py:756 -#: dcim/forms/bulk_edit.py:788 dcim/forms/bulk_edit.py:915 -#: dcim/forms/bulk_edit.py:1701 dcim/forms/bulk_import.py:88 -#: dcim/forms/bulk_import.py:147 dcim/forms/bulk_import.py:248 -#: dcim/forms/bulk_import.py:505 dcim/forms/bulk_import.py:659 -#: dcim/forms/bulk_import.py:1207 dcim/forms/bulk_import.py:1371 -#: dcim/forms/bulk_import.py:1435 dcim/forms/filtersets.py:178 -#: dcim/forms/filtersets.py:237 dcim/forms/filtersets.py:359 -#: dcim/forms/filtersets.py:799 dcim/forms/filtersets.py:924 -#: dcim/forms/filtersets.py:958 dcim/forms/filtersets.py:1059 -#: dcim/forms/filtersets.py:1170 dcim/tables/devices.py:140 -#: dcim/tables/devices.py:817 dcim/tables/devices.py:1063 -#: dcim/tables/modules.py:69 dcim/tables/power.py:74 dcim/tables/racks.py:126 -#: dcim/tables/sites.py:82 dcim/tables/sites.py:138 -#: ipam/forms/bulk_edit.py:256 ipam/forms/bulk_edit.py:306 -#: ipam/forms/bulk_edit.py:354 ipam/forms/bulk_edit.py:506 -#: ipam/forms/bulk_import.py:192 ipam/forms/bulk_import.py:257 -#: ipam/forms/bulk_import.py:293 ipam/forms/bulk_import.py:450 -#: ipam/forms/filtersets.py:210 ipam/forms/filtersets.py:281 -#: ipam/forms/filtersets.py:355 ipam/forms/filtersets.py:501 -#: ipam/forms/model_forms.py:468 ipam/tables/ip.py:237 ipam/tables/ip.py:312 -#: ipam/tables/ip.py:363 ipam/tables/ip.py:426 ipam/tables/ip.py:453 -#: ipam/tables/vlans.py:126 ipam/tables/vlans.py:232 -#: templates/circuits/circuit.html:34 templates/core/datasource.html:46 -#: templates/core/job.html:48 templates/core/rq_task.html:81 -#: templates/core/system.html:18 templates/dcim/cable.html:19 -#: templates/dcim/device.html:178 templates/dcim/location.html:45 -#: templates/dcim/module.html:69 templates/dcim/powerfeed.html:36 -#: templates/dcim/rack.html:41 templates/dcim/site.html:43 -#: templates/extras/script_list.html:47 templates/ipam/ipaddress.html:37 -#: templates/ipam/iprange.html:54 templates/ipam/prefix.html:73 -#: templates/ipam/vlan.html:48 templates/virtualization/cluster.html:21 -#: templates/virtualization/virtualmachine.html:19 -#: templates/vpn/tunnel.html:25 templates/wireless/wirelesslan.html:22 -#: templates/wireless/wirelesslink.html:17 users/forms/filtersets.py:32 -#: users/forms/model_forms.py:194 virtualization/forms/bulk_edit.py:70 -#: virtualization/forms/bulk_edit.py:118 -#: virtualization/forms/bulk_import.py:54 -#: virtualization/forms/bulk_import.py:80 -#: virtualization/forms/filtersets.py:62 -#: virtualization/forms/filtersets.py:160 virtualization/tables/clusters.py:74 -#: virtualization/tables/virtualmachines.py:60 vpn/forms/bulk_edit.py:39 -#: vpn/forms/bulk_import.py:37 vpn/forms/filtersets.py:47 -#: vpn/tables/tunnels.py:48 wireless/forms/bulk_edit.py:43 -#: wireless/forms/bulk_edit.py:105 wireless/forms/bulk_import.py:43 -#: wireless/forms/bulk_import.py:84 wireless/forms/filtersets.py:49 -#: wireless/forms/filtersets.py:83 wireless/tables/wirelesslan.py:52 -#: wireless/tables/wirelesslink.py:20 +#: 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/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:69 +#: 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/templates/circuits/circuit.html:34 +#: 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/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/vlan.html:48 +#: netbox/templates/virtualization/cluster.html:21 +#: netbox/templates/virtualization/virtualmachine.html:19 +#: netbox/templates/vpn/tunnel.html:25 +#: netbox/templates/wireless/wirelesslan.html:22 +#: netbox/templates/wireless/wirelesslink.html:17 +#: netbox/users/forms/filtersets.py: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/tables/clusters.py:74 +#: netbox/virtualization/tables/virtualmachines.py:60 +#: netbox/vpn/forms/bulk_edit.py:39 netbox/vpn/forms/bulk_import.py:37 +#: netbox/vpn/forms/filtersets.py:47 netbox/vpn/tables/tunnels.py:48 +#: netbox/wireless/forms/bulk_edit.py:43 +#: netbox/wireless/forms/bulk_edit.py:105 +#: netbox/wireless/forms/bulk_import.py:43 +#: netbox/wireless/forms/bulk_import.py:84 +#: netbox/wireless/forms/filtersets.py:49 +#: netbox/wireless/forms/filtersets.py:83 +#: netbox/wireless/tables/wirelesslan.py:52 +#: netbox/wireless/tables/wirelesslink.py:20 msgid "Status" msgstr "Durum" -#: circuits/forms/bulk_edit.py:142 circuits/forms/bulk_edit.py:233 -#: circuits/forms/bulk_import.py:98 circuits/forms/bulk_import.py:158 -#: circuits/forms/filtersets.py:119 circuits/forms/filtersets.py:241 -#: dcim/forms/bulk_edit.py:122 dcim/forms/bulk_edit.py:187 -#: dcim/forms/bulk_edit.py:346 dcim/forms/bulk_edit.py:461 -#: dcim/forms/bulk_edit.py:690 dcim/forms/bulk_edit.py:794 -#: dcim/forms/bulk_edit.py:1706 dcim/forms/bulk_import.py:107 -#: dcim/forms/bulk_import.py:152 dcim/forms/bulk_import.py:241 -#: dcim/forms/bulk_import.py:334 dcim/forms/bulk_import.py:479 -#: dcim/forms/bulk_import.py:1219 dcim/forms/bulk_import.py:1428 -#: dcim/forms/filtersets.py:173 dcim/forms/filtersets.py:205 -#: dcim/forms/filtersets.py:323 dcim/forms/filtersets.py:399 -#: dcim/forms/filtersets.py:420 dcim/forms/filtersets.py:722 -#: dcim/forms/filtersets.py:916 dcim/forms/filtersets.py:978 -#: dcim/forms/filtersets.py:1008 dcim/forms/filtersets.py:1130 -#: dcim/tables/power.py:88 extras/filtersets.py:612 -#: extras/forms/filtersets.py:323 extras/forms/filtersets.py:396 -#: ipam/forms/bulk_edit.py:43 ipam/forms/bulk_edit.py:68 -#: ipam/forms/bulk_edit.py:112 ipam/forms/bulk_edit.py:141 -#: ipam/forms/bulk_edit.py:166 ipam/forms/bulk_edit.py:251 -#: ipam/forms/bulk_edit.py:301 ipam/forms/bulk_edit.py:349 -#: ipam/forms/bulk_edit.py:501 ipam/forms/bulk_import.py:38 -#: ipam/forms/bulk_import.py:67 ipam/forms/bulk_import.py:95 -#: ipam/forms/bulk_import.py:115 ipam/forms/bulk_import.py:135 -#: ipam/forms/bulk_import.py:164 ipam/forms/bulk_import.py:250 -#: ipam/forms/bulk_import.py:286 ipam/forms/bulk_import.py:443 -#: ipam/forms/filtersets.py:48 ipam/forms/filtersets.py:68 -#: ipam/forms/filtersets.py:100 ipam/forms/filtersets.py:120 -#: ipam/forms/filtersets.py:143 ipam/forms/filtersets.py:174 -#: ipam/forms/filtersets.py:267 ipam/forms/filtersets.py:310 -#: ipam/forms/filtersets.py:469 ipam/tables/ip.py:456 ipam/tables/vlans.py:229 -#: templates/circuits/circuit.html:38 templates/circuits/circuitgroup.html:36 -#: templates/dcim/cable.html:23 templates/dcim/device.html:79 -#: templates/dcim/location.html:49 templates/dcim/powerfeed.html:44 -#: templates/dcim/rack.html:32 templates/dcim/rackreservation.html:49 -#: templates/dcim/site.html:47 templates/dcim/virtualdevicecontext.html:52 -#: templates/ipam/aggregate.html:30 templates/ipam/asn.html:33 -#: templates/ipam/asnrange.html:29 templates/ipam/ipaddress.html:28 -#: templates/ipam/iprange.html:58 templates/ipam/prefix.html:29 -#: templates/ipam/routetarget.html:17 templates/ipam/vlan.html:39 -#: templates/ipam/vrf.html:20 templates/tenancy/tenant.html:17 -#: templates/virtualization/cluster.html:33 -#: templates/virtualization/virtualmachine.html:39 templates/vpn/l2vpn.html:30 -#: templates/vpn/tunnel.html:49 templates/wireless/wirelesslan.html:34 -#: templates/wireless/wirelesslink.html:25 tenancy/forms/forms.py:25 -#: tenancy/forms/forms.py:48 tenancy/forms/model_forms.py:52 -#: tenancy/tables/columns.py:64 virtualization/forms/bulk_edit.py:76 -#: virtualization/forms/bulk_edit.py:155 -#: virtualization/forms/bulk_import.py:66 -#: virtualization/forms/bulk_import.py:115 -#: virtualization/forms/filtersets.py:47 -#: virtualization/forms/filtersets.py:105 vpn/forms/bulk_edit.py:59 -#: vpn/forms/bulk_edit.py:269 vpn/forms/bulk_import.py:59 -#: vpn/forms/bulk_import.py:258 vpn/forms/filtersets.py:214 -#: wireless/forms/bulk_edit.py:63 wireless/forms/bulk_edit.py:110 -#: wireless/forms/bulk_import.py:55 wireless/forms/bulk_import.py:97 -#: wireless/forms/filtersets.py:35 wireless/forms/filtersets.py:75 +#: netbox/circuits/forms/bulk_edit.py: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/templates/circuits/circuitgroup.html:36 +#: 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 +#: netbox/templates/dcim/rackreservation.html:49 +#: netbox/templates/dcim/site.html:47 +#: netbox/templates/dcim/virtualdevicecontext.html:52 +#: netbox/templates/ipam/aggregate.html:30 netbox/templates/ipam/asn.html:33 +#: netbox/templates/ipam/asnrange.html:29 +#: netbox/templates/ipam/ipaddress.html:28 +#: netbox/templates/ipam/iprange.html:58 netbox/templates/ipam/prefix.html:29 +#: netbox/templates/ipam/routetarget.html:17 +#: netbox/templates/ipam/vlan.html:39 netbox/templates/ipam/vrf.html:20 +#: netbox/templates/tenancy/tenant.html:17 +#: netbox/templates/virtualization/cluster.html:33 +#: netbox/templates/virtualization/virtualmachine.html:39 +#: netbox/templates/vpn/l2vpn.html:30 netbox/templates/vpn/tunnel.html:49 +#: netbox/templates/wireless/wirelesslan.html:34 +#: netbox/templates/wireless/wirelesslink.html:25 +#: netbox/tenancy/forms/forms.py:25 netbox/tenancy/forms/forms.py:48 +#: netbox/tenancy/forms/model_forms.py:52 netbox/tenancy/tables/columns.py:64 +#: netbox/virtualization/forms/bulk_edit.py:76 +#: netbox/virtualization/forms/bulk_edit.py:155 +#: netbox/virtualization/forms/bulk_import.py:66 +#: netbox/virtualization/forms/bulk_import.py:115 +#: netbox/virtualization/forms/filtersets.py:47 +#: netbox/virtualization/forms/filtersets.py:105 +#: netbox/vpn/forms/bulk_edit.py:59 netbox/vpn/forms/bulk_edit.py:269 +#: netbox/vpn/forms/bulk_import.py:59 netbox/vpn/forms/bulk_import.py:258 +#: netbox/vpn/forms/filtersets.py:214 netbox/wireless/forms/bulk_edit.py:63 +#: netbox/wireless/forms/bulk_edit.py:110 +#: netbox/wireless/forms/bulk_import.py:55 +#: netbox/wireless/forms/bulk_import.py:97 +#: netbox/wireless/forms/filtersets.py:35 +#: netbox/wireless/forms/filtersets.py:75 msgid "Tenant" msgstr "Kiracı" -#: circuits/forms/bulk_edit.py:147 circuits/forms/filtersets.py:174 +#: netbox/circuits/forms/bulk_edit.py:147 +#: netbox/circuits/forms/filtersets.py:174 msgid "Install date" msgstr "Yükleme tarihi" -#: circuits/forms/bulk_edit.py:152 circuits/forms/filtersets.py:179 +#: netbox/circuits/forms/bulk_edit.py:152 +#: netbox/circuits/forms/filtersets.py:179 msgid "Termination date" msgstr "Fesih tarihi" -#: circuits/forms/bulk_edit.py:158 circuits/forms/filtersets.py:186 +#: netbox/circuits/forms/bulk_edit.py:158 +#: netbox/circuits/forms/filtersets.py:186 msgid "Commit rate (Kbps)" msgstr "Taahhüt oranı (Kbps)" -#: circuits/forms/bulk_edit.py:173 circuits/forms/model_forms.py:112 +#: netbox/circuits/forms/bulk_edit.py:173 +#: netbox/circuits/forms/model_forms.py:112 msgid "Service Parameters" msgstr "Servis Parametreleri" -#: circuits/forms/bulk_edit.py:174 circuits/forms/model_forms.py:113 -#: circuits/forms/model_forms.py:183 dcim/forms/model_forms.py:139 -#: dcim/forms/model_forms.py:181 dcim/forms/model_forms.py:266 -#: dcim/forms/model_forms.py:323 dcim/forms/model_forms.py:768 -#: dcim/forms/model_forms.py:1692 ipam/forms/model_forms.py:64 -#: ipam/forms/model_forms.py:81 ipam/forms/model_forms.py:115 -#: ipam/forms/model_forms.py:136 ipam/forms/model_forms.py:160 -#: ipam/forms/model_forms.py:232 ipam/forms/model_forms.py:261 -#: ipam/forms/model_forms.py:316 netbox/navigation/menu.py:24 -#: templates/dcim/device_edit.html:85 templates/dcim/htmx/cable_edit.html:72 -#: templates/ipam/ipaddress_bulk_add.html:27 templates/ipam/vlan_edit.html:22 -#: virtualization/forms/model_forms.py:80 -#: virtualization/forms/model_forms.py:222 vpn/forms/bulk_edit.py:78 -#: vpn/forms/filtersets.py:44 vpn/forms/model_forms.py:62 -#: vpn/forms/model_forms.py:147 vpn/forms/model_forms.py:411 -#: wireless/forms/model_forms.py:54 wireless/forms/model_forms.py:170 +#: 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/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/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 msgid "Tenancy" msgstr "Kiracılık" -#: circuits/forms/bulk_edit.py:193 circuits/forms/bulk_edit.py:217 -#: circuits/forms/model_forms.py:155 circuits/tables/circuits.py:117 -#: templates/circuits/inc/circuit_termination_fields.html:62 -#: templates/circuits/providernetwork.html:17 +#: 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ğı" -#: circuits/forms/bulk_edit.py:199 +#: netbox/circuits/forms/bulk_edit.py:199 msgid "Port speed (Kbps)" msgstr "Bağlantı noktası hızı (Kbps)" -#: circuits/forms/bulk_edit.py:203 +#: netbox/circuits/forms/bulk_edit.py:203 msgid "Upstream speed (Kbps)" msgstr "Yukarı akış hızı (Kbps)" -#: circuits/forms/bulk_edit.py:206 dcim/forms/bulk_edit.py:951 -#: dcim/forms/bulk_edit.py:1315 dcim/forms/bulk_edit.py:1332 -#: dcim/forms/bulk_edit.py:1349 dcim/forms/bulk_edit.py:1367 -#: dcim/forms/bulk_edit.py:1455 dcim/forms/bulk_edit.py:1594 -#: dcim/forms/bulk_edit.py:1611 +#: 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 msgid "Mark connected" msgstr "Bağlı olarak işaretle" -#: circuits/forms/bulk_edit.py:219 circuits/forms/model_forms.py:157 -#: templates/circuits/inc/circuit_termination_fields.html:54 -#: templates/dcim/frontport.html:121 templates/dcim/interface.html:193 -#: templates/dcim/rearport.html:111 +#: netbox/circuits/forms/bulk_edit.py:219 +#: netbox/circuits/forms/model_forms.py:157 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:54 +#: netbox/templates/dcim/frontport.html:121 +#: netbox/templates/dcim/interface.html:193 +#: netbox/templates/dcim/rearport.html:111 msgid "Circuit Termination" msgstr "Devre Sonlandırma" -#: circuits/forms/bulk_edit.py:221 circuits/forms/model_forms.py:159 +#: netbox/circuits/forms/bulk_edit.py:221 +#: netbox/circuits/forms/model_forms.py:159 msgid "Termination Details" msgstr "Fesih Ayrıntıları" -#: circuits/forms/bulk_edit.py:251 circuits/forms/filtersets.py:268 -#: circuits/tables/circuits.py:168 dcim/forms/model_forms.py:551 -#: templates/circuits/circuitgroupassignment.html:30 -#: templates/dcim/device.html:133 templates/dcim/virtualchassis.html:68 -#: templates/dcim/virtualchassis_edit.html:56 -#: templates/ipam/inc/panels/fhrp_groups.html:26 -#: tenancy/forms/bulk_edit.py:147 tenancy/forms/filtersets.py:110 +#: netbox/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/templates/dcim/device.html:133 +#: netbox/templates/dcim/virtualchassis.html:68 +#: netbox/templates/dcim/virtualchassis_edit.html:56 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:26 +#: netbox/tenancy/forms/bulk_edit.py:147 +#: netbox/tenancy/forms/filtersets.py:110 msgid "Priority" msgstr "Öncelik" -#: circuits/forms/bulk_import.py:39 circuits/forms/bulk_import.py:54 -#: circuits/forms/bulk_import.py:77 +#: 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ı" -#: circuits/forms/bulk_import.py:83 +#: netbox/circuits/forms/bulk_import.py:83 msgid "Assigned provider account" msgstr "Atanan sağlayıcı hesabı" -#: circuits/forms/bulk_import.py:90 +#: netbox/circuits/forms/bulk_import.py:90 msgid "Type of circuit" msgstr "Devre tipi" -#: circuits/forms/bulk_import.py:95 dcim/forms/bulk_import.py:90 -#: dcim/forms/bulk_import.py:149 dcim/forms/bulk_import.py:250 -#: dcim/forms/bulk_import.py:507 dcim/forms/bulk_import.py:661 -#: dcim/forms/bulk_import.py:1373 ipam/forms/bulk_import.py:194 -#: ipam/forms/bulk_import.py:259 ipam/forms/bulk_import.py:295 -#: ipam/forms/bulk_import.py:452 virtualization/forms/bulk_import.py:56 -#: virtualization/forms/bulk_import.py:82 vpn/forms/bulk_import.py:39 -#: wireless/forms/bulk_import.py:45 +#: netbox/circuits/forms/bulk_import.py: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" -#: circuits/forms/bulk_import.py:102 circuits/forms/bulk_import.py:162 -#: dcim/forms/bulk_import.py:111 dcim/forms/bulk_import.py:156 -#: dcim/forms/bulk_import.py:338 dcim/forms/bulk_import.py:483 -#: dcim/forms/bulk_import.py:1223 dcim/forms/bulk_import.py:1368 -#: dcim/forms/bulk_import.py:1432 ipam/forms/bulk_import.py:42 -#: ipam/forms/bulk_import.py:71 ipam/forms/bulk_import.py:99 -#: ipam/forms/bulk_import.py:119 ipam/forms/bulk_import.py:139 -#: ipam/forms/bulk_import.py:168 ipam/forms/bulk_import.py:254 -#: ipam/forms/bulk_import.py:290 ipam/forms/bulk_import.py:447 -#: virtualization/forms/bulk_import.py:70 -#: virtualization/forms/bulk_import.py:119 vpn/forms/bulk_import.py:63 -#: wireless/forms/bulk_import.py:59 wireless/forms/bulk_import.py:101 +#: netbox/circuits/forms/bulk_import.py: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ı" -#: circuits/forms/bulk_import.py:120 -#: templates/circuits/inc/circuit_termination.html:6 -#: templates/circuits/inc/circuit_termination_fields.html:15 -#: templates/dcim/cable.html:68 templates/dcim/cable.html:72 -#: vpn/forms/bulk_import.py:100 vpn/forms/filtersets.py:77 +#: netbox/circuits/forms/bulk_import.py: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" -#: circuits/forms/bulk_import.py:130 circuits/forms/filtersets.py:147 -#: circuits/forms/filtersets.py:227 circuits/forms/model_forms.py:144 +#: 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 msgid "Provider network" msgstr "Sağlayıcı ağı" -#: circuits/forms/filtersets.py:30 circuits/forms/filtersets.py:118 -#: circuits/forms/filtersets.py:200 dcim/forms/bulk_edit.py:338 -#: dcim/forms/bulk_edit.py:441 dcim/forms/bulk_edit.py:682 -#: dcim/forms/bulk_edit.py:729 dcim/forms/bulk_edit.py:882 -#: dcim/forms/bulk_import.py:235 dcim/forms/bulk_import.py:315 -#: dcim/forms/bulk_import.py:546 dcim/forms/bulk_import.py:1317 -#: dcim/forms/bulk_import.py:1351 dcim/forms/filtersets.py:95 -#: dcim/forms/filtersets.py:322 dcim/forms/filtersets.py:356 -#: dcim/forms/filtersets.py:396 dcim/forms/filtersets.py:447 -#: dcim/forms/filtersets.py:719 dcim/forms/filtersets.py:762 -#: dcim/forms/filtersets.py:977 dcim/forms/filtersets.py:1006 -#: dcim/forms/filtersets.py:1026 dcim/forms/filtersets.py:1090 -#: dcim/forms/filtersets.py:1120 dcim/forms/filtersets.py:1129 -#: dcim/forms/filtersets.py:1240 dcim/forms/filtersets.py:1264 -#: dcim/forms/filtersets.py:1289 dcim/forms/filtersets.py:1308 -#: dcim/forms/filtersets.py:1331 dcim/forms/filtersets.py:1442 -#: dcim/forms/filtersets.py:1466 dcim/forms/filtersets.py:1490 -#: dcim/forms/filtersets.py:1508 dcim/forms/filtersets.py:1525 -#: dcim/forms/model_forms.py:180 dcim/forms/model_forms.py:243 -#: dcim/forms/model_forms.py:468 dcim/forms/model_forms.py:728 -#: dcim/tables/devices.py:157 dcim/tables/power.py:30 dcim/tables/racks.py:118 -#: dcim/tables/racks.py:212 extras/filtersets.py:536 -#: extras/forms/filtersets.py:320 ipam/forms/filtersets.py:173 -#: ipam/forms/filtersets.py:414 ipam/forms/filtersets.py:437 -#: ipam/forms/filtersets.py:467 templates/dcim/device.html:26 -#: templates/dcim/device_edit.html:30 -#: templates/dcim/inc/cable_termination.html:12 -#: templates/dcim/location.html:26 templates/dcim/powerpanel.html:26 -#: templates/dcim/rack.html:24 templates/dcim/rackreservation.html:32 -#: virtualization/forms/filtersets.py:46 -#: virtualization/forms/filtersets.py:100 wireless/forms/model_forms.py:87 -#: wireless/forms/model_forms.py:129 +#: netbox/circuits/forms/filtersets.py: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/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 msgid "Location" msgstr "Konum" -#: circuits/forms/filtersets.py:32 circuits/forms/filtersets.py:120 -#: dcim/forms/filtersets.py:144 dcim/forms/filtersets.py:158 -#: dcim/forms/filtersets.py:174 dcim/forms/filtersets.py:206 -#: dcim/forms/filtersets.py:328 dcim/forms/filtersets.py:400 -#: dcim/forms/filtersets.py:471 dcim/forms/filtersets.py:723 -#: dcim/forms/filtersets.py:1091 netbox/navigation/menu.py:31 -#: netbox/navigation/menu.py:33 tenancy/forms/filtersets.py:42 -#: tenancy/tables/columns.py:70 tenancy/tables/contacts.py:25 -#: tenancy/views.py:19 virtualization/forms/filtersets.py:37 -#: virtualization/forms/filtersets.py:48 -#: virtualization/forms/filtersets.py:106 +#: netbox/circuits/forms/filtersets.py: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/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/tables/contacts.py:25 netbox/tenancy/views.py:19 +#: netbox/virtualization/forms/filtersets.py:37 +#: netbox/virtualization/forms/filtersets.py:48 +#: netbox/virtualization/forms/filtersets.py:106 msgid "Contacts" msgstr "İletişim" -#: circuits/forms/filtersets.py:37 circuits/forms/filtersets.py:157 -#: dcim/forms/bulk_edit.py:112 dcim/forms/bulk_edit.py:313 -#: dcim/forms/bulk_edit.py:857 dcim/forms/bulk_import.py:93 -#: dcim/forms/filtersets.py:73 dcim/forms/filtersets.py:185 -#: dcim/forms/filtersets.py:211 dcim/forms/filtersets.py:334 -#: dcim/forms/filtersets.py:425 dcim/forms/filtersets.py:739 -#: dcim/forms/filtersets.py:983 dcim/forms/filtersets.py:1013 -#: dcim/forms/filtersets.py:1097 dcim/forms/filtersets.py:1136 -#: dcim/forms/filtersets.py:1576 dcim/forms/filtersets.py:1600 -#: dcim/forms/filtersets.py:1624 dcim/forms/model_forms.py:112 -#: dcim/forms/object_create.py:375 dcim/tables/devices.py:143 -#: dcim/tables/sites.py:85 extras/filtersets.py:503 -#: ipam/forms/bulk_edit.py:208 ipam/forms/bulk_edit.py:474 -#: ipam/forms/filtersets.py:217 ipam/forms/filtersets.py:422 -#: ipam/forms/filtersets.py:475 templates/dcim/device.html:18 -#: templates/dcim/rack.html:16 templates/dcim/rackreservation.html:22 -#: templates/dcim/region.html:26 templates/dcim/site.html:31 -#: templates/ipam/prefix.html:49 templates/ipam/vlan.html:16 -#: virtualization/forms/bulk_edit.py:81 virtualization/forms/filtersets.py:59 -#: virtualization/forms/filtersets.py:133 -#: virtualization/forms/model_forms.py:92 vpn/forms/filtersets.py:257 +#: netbox/circuits/forms/filtersets.py: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/templates/dcim/rackreservation.html:22 +#: netbox/templates/dcim/region.html:26 netbox/templates/dcim/site.html:31 +#: netbox/templates/ipam/prefix.html:49 netbox/templates/ipam/vlan.html:16 +#: netbox/virtualization/forms/bulk_edit.py:81 +#: netbox/virtualization/forms/filtersets.py:59 +#: netbox/virtualization/forms/filtersets.py:133 +#: netbox/virtualization/forms/model_forms.py:92 +#: netbox/vpn/forms/filtersets.py:257 msgid "Region" msgstr "Bölge" -#: circuits/forms/filtersets.py:42 circuits/forms/filtersets.py:162 -#: dcim/forms/bulk_edit.py:321 dcim/forms/bulk_edit.py:865 -#: dcim/forms/filtersets.py:78 dcim/forms/filtersets.py:190 -#: dcim/forms/filtersets.py:216 dcim/forms/filtersets.py:347 -#: dcim/forms/filtersets.py:430 dcim/forms/filtersets.py:744 -#: dcim/forms/filtersets.py:988 dcim/forms/filtersets.py:1102 -#: dcim/forms/filtersets.py:1141 dcim/forms/object_create.py:383 -#: extras/filtersets.py:520 ipam/forms/bulk_edit.py:213 -#: ipam/forms/bulk_edit.py:479 ipam/forms/filtersets.py:222 -#: ipam/forms/filtersets.py:427 ipam/forms/filtersets.py:480 -#: virtualization/forms/bulk_edit.py:86 virtualization/forms/filtersets.py:69 -#: virtualization/forms/filtersets.py:138 -#: virtualization/forms/model_forms.py:98 +#: netbox/circuits/forms/filtersets.py: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/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 msgid "Site group" msgstr "Site grubu" -#: circuits/forms/filtersets.py:65 circuits/forms/filtersets.py:83 -#: circuits/forms/filtersets.py:102 circuits/forms/filtersets.py:117 -#: core/forms/filtersets.py:67 core/forms/filtersets.py:135 -#: dcim/forms/bulk_edit.py:828 dcim/forms/filtersets.py:172 -#: dcim/forms/filtersets.py:204 dcim/forms/filtersets.py:915 -#: dcim/forms/filtersets.py:1007 dcim/forms/filtersets.py:1131 -#: dcim/forms/filtersets.py:1239 dcim/forms/filtersets.py:1263 -#: dcim/forms/filtersets.py:1288 dcim/forms/filtersets.py:1307 -#: dcim/forms/filtersets.py:1327 dcim/forms/filtersets.py:1441 -#: dcim/forms/filtersets.py:1465 dcim/forms/filtersets.py:1489 -#: dcim/forms/filtersets.py:1507 dcim/forms/filtersets.py:1523 -#: extras/forms/bulk_edit.py:90 extras/forms/filtersets.py:44 -#: extras/forms/filtersets.py:134 extras/forms/filtersets.py:165 -#: extras/forms/filtersets.py:205 extras/forms/filtersets.py:221 -#: extras/forms/filtersets.py:252 extras/forms/filtersets.py:276 -#: extras/forms/filtersets.py:441 ipam/forms/filtersets.py:99 -#: ipam/forms/filtersets.py:266 ipam/forms/filtersets.py:307 -#: ipam/forms/filtersets.py:382 ipam/forms/filtersets.py:468 -#: ipam/forms/filtersets.py:527 ipam/forms/filtersets.py:545 -#: netbox/tables/tables.py:256 virtualization/forms/filtersets.py:45 -#: virtualization/forms/filtersets.py:103 -#: virtualization/forms/filtersets.py:198 -#: virtualization/forms/filtersets.py:243 vpn/forms/filtersets.py:213 -#: wireless/forms/bulk_edit.py:150 wireless/forms/filtersets.py:34 -#: wireless/forms/filtersets.py:74 +#: 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" -#: circuits/forms/filtersets.py:73 circuits/tables/circuits.py:63 -#: circuits/tables/providers.py:66 templates/circuits/circuit.html:22 -#: templates/circuits/provideraccount.html:24 +#: netbox/circuits/forms/filtersets.py:73 +#: netbox/circuits/tables/circuits.py:63 +#: netbox/circuits/tables/providers.py:66 +#: netbox/templates/circuits/circuit.html:22 +#: netbox/templates/circuits/provideraccount.html:24 msgid "Account" msgstr "Hesap" -#: circuits/forms/filtersets.py:217 +#: netbox/circuits/forms/filtersets.py:217 msgid "Term Side" msgstr "Dönem Tarafı" -#: circuits/forms/filtersets.py:250 extras/forms/model_forms.py:582 -#: ipam/forms/filtersets.py:142 ipam/forms/filtersets.py:546 -#: ipam/forms/model_forms.py:323 templates/extras/configcontext.html:60 -#: templates/ipam/ipaddress.html:59 templates/ipam/vlan_edit.html:30 -#: tenancy/forms/filtersets.py:87 users/forms/model_forms.py:314 +#: 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/templates/extras/configcontext.html:60 +#: netbox/templates/ipam/ipaddress.html:59 +#: netbox/templates/ipam/vlan_edit.html:30 +#: netbox/tenancy/forms/filtersets.py:87 netbox/users/forms/model_forms.py:314 msgid "Assignment" msgstr "Ödev" -#: circuits/forms/filtersets.py:265 circuits/forms/model_forms.py:195 -#: circuits/tables/circuits.py:155 dcim/forms/bulk_edit.py:117 -#: dcim/forms/bulk_import.py:100 dcim/forms/model_forms.py:117 -#: dcim/tables/sites.py:89 extras/forms/filtersets.py:480 -#: ipam/filtersets.py:999 ipam/forms/bulk_edit.py:493 -#: ipam/forms/bulk_import.py:436 ipam/forms/model_forms.py:528 -#: ipam/tables/fhrp.py:67 ipam/tables/vlans.py:122 ipam/tables/vlans.py:226 -#: templates/circuits/circuitgroupassignment.html:22 -#: templates/dcim/interface.html:284 templates/dcim/site.html:37 -#: templates/ipam/inc/panels/fhrp_groups.html:23 templates/ipam/vlan.html:27 -#: templates/tenancy/contact.html:21 templates/tenancy/tenant.html:20 -#: templates/users/group.html:6 templates/users/group.html:14 -#: templates/virtualization/cluster.html:29 templates/vpn/tunnel.html:29 -#: templates/wireless/wirelesslan.html:18 tenancy/forms/bulk_edit.py:43 -#: tenancy/forms/bulk_edit.py:94 tenancy/forms/bulk_import.py:40 -#: tenancy/forms/bulk_import.py:81 tenancy/forms/filtersets.py:48 -#: tenancy/forms/filtersets.py:78 tenancy/forms/filtersets.py:97 -#: tenancy/forms/model_forms.py:45 tenancy/forms/model_forms.py:97 -#: tenancy/forms/model_forms.py:122 tenancy/tables/contacts.py:60 -#: tenancy/tables/contacts.py:107 tenancy/tables/tenants.py:42 -#: users/filtersets.py:62 users/filtersets.py:185 users/forms/filtersets.py:31 -#: users/forms/filtersets.py:37 users/forms/filtersets.py:79 -#: virtualization/forms/bulk_edit.py:65 virtualization/forms/bulk_import.py:47 -#: virtualization/forms/filtersets.py:85 -#: virtualization/forms/model_forms.py:66 virtualization/tables/clusters.py:70 -#: vpn/forms/bulk_edit.py:112 vpn/forms/bulk_import.py:158 -#: vpn/forms/filtersets.py:116 vpn/tables/crypto.py:31 -#: vpn/tables/tunnels.py:44 wireless/forms/bulk_edit.py:48 -#: wireless/forms/bulk_import.py:36 wireless/forms/filtersets.py:46 -#: wireless/forms/model_forms.py:40 wireless/tables/wirelesslan.py:48 +#: netbox/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:999 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/templates/circuits/circuitgroupassignment.html:22 +#: netbox/templates/dcim/interface.html:284 netbox/templates/dcim/site.html:37 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:23 +#: netbox/templates/ipam/vlan.html:27 netbox/templates/tenancy/contact.html:21 +#: netbox/templates/tenancy/tenant.html:20 netbox/templates/users/group.html:6 +#: netbox/templates/users/group.html:14 +#: netbox/templates/virtualization/cluster.html:29 +#: netbox/templates/vpn/tunnel.html:29 +#: netbox/templates/wireless/wirelesslan.html:18 +#: netbox/tenancy/forms/bulk_edit.py:43 netbox/tenancy/forms/bulk_edit.py:94 +#: netbox/tenancy/forms/bulk_import.py:40 +#: netbox/tenancy/forms/bulk_import.py:81 +#: netbox/tenancy/forms/filtersets.py:48 netbox/tenancy/forms/filtersets.py:78 +#: netbox/tenancy/forms/filtersets.py:97 +#: netbox/tenancy/forms/model_forms.py:45 +#: netbox/tenancy/forms/model_forms.py:97 +#: netbox/tenancy/forms/model_forms.py:122 +#: netbox/tenancy/tables/contacts.py:60 netbox/tenancy/tables/contacts.py:107 +#: netbox/tenancy/tables/tenants.py:42 netbox/users/filtersets.py: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/tables/clusters.py:70 +#: netbox/vpn/forms/bulk_edit.py:112 netbox/vpn/forms/bulk_import.py:158 +#: netbox/vpn/forms/filtersets.py:116 netbox/vpn/tables/crypto.py:31 +#: netbox/vpn/tables/tunnels.py:44 netbox/wireless/forms/bulk_edit.py:48 +#: netbox/wireless/forms/bulk_import.py:36 +#: netbox/wireless/forms/filtersets.py:46 +#: netbox/wireless/forms/model_forms.py:40 +#: netbox/wireless/tables/wirelesslan.py:48 msgid "Group" msgstr "Grup" -#: circuits/forms/model_forms.py:182 templates/circuits/circuitgroup.html:25 +#: netbox/circuits/forms/model_forms.py:182 +#: netbox/templates/circuits/circuitgroup.html:25 msgid "Circuit Group" msgstr "Devre Grubu" -#: circuits/models/circuits.py:27 dcim/models/cables.py:67 -#: dcim/models/device_component_templates.py:517 -#: dcim/models/device_component_templates.py:617 -#: dcim/models/device_components.py:975 dcim/models/device_components.py:1049 -#: dcim/models/device_components.py:1204 dcim/models/devices.py:479 -#: dcim/models/racks.py:224 extras/models/tags.py:28 +#: 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/extras/models/tags.py:28 msgid "color" msgstr "renk" -#: circuits/models/circuits.py:36 +#: netbox/circuits/models/circuits.py:36 msgid "circuit type" msgstr "devre tipi" -#: circuits/models/circuits.py:37 +#: netbox/circuits/models/circuits.py:37 msgid "circuit types" msgstr "devre türleri" -#: circuits/models/circuits.py:48 +#: netbox/circuits/models/circuits.py:48 msgid "circuit ID" msgstr "devre ID" -#: circuits/models/circuits.py:49 +#: netbox/circuits/models/circuits.py:49 msgid "Unique circuit ID" msgstr "Benzersiz devre ID" -#: circuits/models/circuits.py:69 core/models/data.py:52 -#: core/models/jobs.py:84 dcim/models/cables.py:49 dcim/models/devices.py:653 -#: dcim/models/devices.py:1173 dcim/models/devices.py:1399 -#: dcim/models/power.py:96 dcim/models/racks.py:297 dcim/models/sites.py:154 -#: dcim/models/sites.py:266 ipam/models/ip.py:253 ipam/models/ip.py:522 -#: ipam/models/ip.py:730 ipam/models/vlans.py:195 -#: virtualization/models/clusters.py:74 -#: virtualization/models/virtualmachines.py:84 vpn/models/tunnels.py:40 -#: wireless/models.py:95 wireless/models.py:159 +#: 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 msgid "status" msgstr "durum" -#: circuits/models/circuits.py:84 templates/core/plugin.html:20 +#: netbox/circuits/models/circuits.py:84 netbox/templates/core/plugin.html:20 msgid "installed" msgstr "kurulmuş" -#: circuits/models/circuits.py:89 +#: netbox/circuits/models/circuits.py:89 msgid "terminates" msgstr "sonlandırır" -#: circuits/models/circuits.py:94 +#: netbox/circuits/models/circuits.py:94 msgid "commit rate (Kbps)" msgstr "taahhüt oranı (Kbps)" -#: circuits/models/circuits.py:95 +#: netbox/circuits/models/circuits.py:95 msgid "Committed rate" msgstr "Taahhüt oranı" -#: circuits/models/circuits.py:137 +#: netbox/circuits/models/circuits.py:137 msgid "circuit" msgstr "devre" -#: circuits/models/circuits.py:138 +#: netbox/circuits/models/circuits.py:138 msgid "circuits" msgstr "devreler" -#: circuits/models/circuits.py:170 +#: netbox/circuits/models/circuits.py:170 msgid "circuit group" msgstr "devre grubu" -#: circuits/models/circuits.py:171 +#: netbox/circuits/models/circuits.py:171 msgid "circuit groups" msgstr "devre grupları" -#: circuits/models/circuits.py:195 ipam/models/fhrp.py:93 -#: tenancy/models/contacts.py:134 +#: netbox/circuits/models/circuits.py:195 netbox/ipam/models/fhrp.py:93 +#: netbox/tenancy/models/contacts.py:134 msgid "priority" msgstr "öncelik" -#: circuits/models/circuits.py:213 +#: netbox/circuits/models/circuits.py:213 msgid "Circuit group assignment" msgstr "Devre grubu ataması" -#: circuits/models/circuits.py:214 +#: netbox/circuits/models/circuits.py:214 msgid "Circuit group assignments" msgstr "Devre grubu atamaları" -#: circuits/models/circuits.py:240 +#: netbox/circuits/models/circuits.py:240 msgid "termination" msgstr "sonlandırma" -#: circuits/models/circuits.py:257 +#: netbox/circuits/models/circuits.py:257 msgid "port speed (Kbps)" msgstr "bağlantı noktası hızı (Kbps)" -#: circuits/models/circuits.py:260 +#: netbox/circuits/models/circuits.py:260 msgid "Physical circuit speed" msgstr "Fiziksel devre hızı" -#: circuits/models/circuits.py:265 +#: netbox/circuits/models/circuits.py:265 msgid "upstream speed (Kbps)" msgstr "yukarı akış hızı (Kbps)" -#: circuits/models/circuits.py:266 +#: netbox/circuits/models/circuits.py:266 msgid "Upstream speed, if different from port speed" msgstr "Bağlantı noktası hızından farklıysa yukarı akış hızı" -#: circuits/models/circuits.py:271 +#: netbox/circuits/models/circuits.py:271 msgid "cross-connect ID" msgstr "çapraz bağlantı kimliği" -#: circuits/models/circuits.py:272 +#: netbox/circuits/models/circuits.py:272 msgid "ID of the local cross-connect" msgstr "Yerel çapraz bağlantının kimliği" -#: circuits/models/circuits.py:277 +#: netbox/circuits/models/circuits.py:277 msgid "patch panel/port(s)" msgstr "bağlantı paneli/port(lar)" -#: circuits/models/circuits.py:278 +#: netbox/circuits/models/circuits.py:278 msgid "Patch panel ID and port number(s)" msgstr "Bağlantı paneli ID ve port numaraları" -#: circuits/models/circuits.py:281 -#: dcim/models/device_component_templates.py:61 -#: dcim/models/device_components.py:68 dcim/models/racks.py:685 -#: extras/models/configs.py:45 extras/models/configs.py:219 -#: extras/models/customfields.py:125 extras/models/models.py:61 -#: extras/models/models.py:158 extras/models/models.py:396 -#: extras/models/models.py:511 extras/models/notifications.py:131 -#: extras/models/staging.py:31 extras/models/tags.py:32 -#: netbox/models/__init__.py:110 netbox/models/__init__.py:145 -#: netbox/models/__init__.py:191 users/models/permissions.py:24 -#: users/models/tokens.py:57 users/models/users.py:33 -#: virtualization/models/virtualmachines.py:289 +#: 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/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 msgid "description" msgstr "açıklama" -#: circuits/models/circuits.py:294 +#: netbox/circuits/models/circuits.py:294 msgid "circuit termination" msgstr "devre sonlandırma" -#: circuits/models/circuits.py:295 +#: netbox/circuits/models/circuits.py:295 msgid "circuit terminations" msgstr "devre sonlandırmaları" -#: circuits/models/circuits.py:308 +#: netbox/circuits/models/circuits.py:308 msgid "" "A circuit termination must attach to either a site or a provider network." msgstr "" "Bir devre sonlandırma, bir siteye veya bir sağlayıcı ağına bağlanmalıdır." -#: circuits/models/circuits.py:310 +#: netbox/circuits/models/circuits.py:310 msgid "" "A circuit termination cannot attach to both a site and a provider network." msgstr "Devre sonlandırma hem siteye hem de sağlayıcı ağına bağlanamaz." -#: circuits/models/providers.py:22 circuits/models/providers.py:66 -#: circuits/models/providers.py:104 core/models/data.py:39 -#: core/models/jobs.py:45 dcim/models/device_component_templates.py:43 -#: dcim/models/device_components.py:53 dcim/models/devices.py:593 -#: dcim/models/devices.py:1330 dcim/models/devices.py:1395 -#: dcim/models/power.py:39 dcim/models/power.py:92 dcim/models/racks.py:262 -#: dcim/models/sites.py:138 extras/models/configs.py:36 -#: extras/models/configs.py:215 extras/models/customfields.py:92 -#: extras/models/models.py:56 extras/models/models.py:153 -#: extras/models/models.py:296 extras/models/models.py:392 -#: extras/models/models.py:501 extras/models/models.py:596 -#: extras/models/notifications.py:126 extras/models/scripts.py:30 -#: extras/models/staging.py:26 ipam/models/asns.py:18 ipam/models/fhrp.py:25 -#: ipam/models/services.py:52 ipam/models/services.py:88 -#: ipam/models/vlans.py:36 ipam/models/vlans.py:184 ipam/models/vrfs.py:22 -#: ipam/models/vrfs.py:79 netbox/models/__init__.py:137 -#: netbox/models/__init__.py:181 tenancy/models/contacts.py:64 -#: tenancy/models/tenants.py:20 tenancy/models/tenants.py:45 -#: users/models/permissions.py:20 users/models/users.py:28 -#: virtualization/models/clusters.py:57 -#: virtualization/models/virtualmachines.py:72 -#: virtualization/models/virtualmachines.py:279 vpn/models/crypto.py:24 -#: vpn/models/crypto.py:71 vpn/models/crypto.py:131 vpn/models/crypto.py:183 -#: vpn/models/crypto.py:221 vpn/models/l2vpn.py:22 vpn/models/tunnels.py:35 -#: wireless/models.py:51 +#: 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/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/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 msgid "name" msgstr "ad" -#: circuits/models/providers.py:25 +#: netbox/circuits/models/providers.py:25 msgid "Full name of the provider" msgstr "Sağlayıcının tam adı" -#: circuits/models/providers.py:28 dcim/models/devices.py:86 -#: dcim/models/racks.py:137 dcim/models/sites.py:149 -#: extras/models/models.py:506 ipam/models/asns.py:23 ipam/models/vlans.py:40 -#: netbox/models/__init__.py:141 netbox/models/__init__.py:186 -#: tenancy/models/tenants.py:25 tenancy/models/tenants.py:49 -#: vpn/models/l2vpn.py:27 wireless/models.py:56 +#: netbox/circuits/models/providers.py:28 netbox/dcim/models/devices.py:86 +#: 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 msgid "slug" msgstr "kısa ad" -#: circuits/models/providers.py:42 +#: netbox/circuits/models/providers.py:42 msgid "provider" msgstr "sağlayıcı" -#: circuits/models/providers.py:43 +#: netbox/circuits/models/providers.py:43 msgid "providers" msgstr "sağlayıcılar" -#: circuits/models/providers.py:63 +#: netbox/circuits/models/providers.py:63 msgid "account ID" msgstr "hesap kimliği" -#: circuits/models/providers.py:86 +#: netbox/circuits/models/providers.py:86 msgid "provider account" msgstr "sağlayıcı hesabı" -#: circuits/models/providers.py:87 +#: netbox/circuits/models/providers.py:87 msgid "provider accounts" msgstr "sağlayıcı hesapları" -#: circuits/models/providers.py:115 +#: netbox/circuits/models/providers.py:115 msgid "service ID" msgstr "servis kimliği" -#: circuits/models/providers.py:126 +#: netbox/circuits/models/providers.py:126 msgid "provider network" msgstr "sağlayıcı ağı" -#: circuits/models/providers.py:127 +#: netbox/circuits/models/providers.py:127 msgid "provider networks" msgstr "sağlayıcı ağları" -#: circuits/tables/circuits.py:32 circuits/tables/circuits.py:132 -#: circuits/tables/providers.py:18 circuits/tables/providers.py:69 -#: circuits/tables/providers.py:99 core/tables/data.py:16 -#: core/tables/jobs.py:14 core/tables/plugins.py:44 core/tables/tasks.py:11 -#: core/tables/tasks.py:115 dcim/forms/filtersets.py:63 -#: dcim/forms/object_create.py:43 dcim/tables/devices.py:52 -#: dcim/tables/devices.py:92 dcim/tables/devices.py:134 -#: dcim/tables/devices.py:289 dcim/tables/devices.py:392 -#: dcim/tables/devices.py:433 dcim/tables/devices.py:482 -#: dcim/tables/devices.py:531 dcim/tables/devices.py:648 -#: dcim/tables/devices.py:731 dcim/tables/devices.py:778 -#: dcim/tables/devices.py:841 dcim/tables/devices.py:911 -#: dcim/tables/devices.py:974 dcim/tables/devices.py:994 -#: dcim/tables/devices.py:1023 dcim/tables/devices.py:1053 -#: dcim/tables/devicetypes.py:31 dcim/tables/power.py:22 -#: dcim/tables/power.py:62 dcim/tables/racks.py:24 dcim/tables/racks.py:113 -#: dcim/tables/sites.py:24 dcim/tables/sites.py:51 dcim/tables/sites.py:78 -#: dcim/tables/sites.py:130 extras/forms/filtersets.py:213 -#: extras/tables/tables.py:58 extras/tables/tables.py:122 -#: extras/tables/tables.py:155 extras/tables/tables.py:180 -#: extras/tables/tables.py:246 extras/tables/tables.py:361 -#: extras/tables/tables.py:378 extras/tables/tables.py:401 -#: extras/tables/tables.py:439 extras/tables/tables.py:491 -#: extras/tables/tables.py:514 ipam/forms/bulk_edit.py:407 -#: ipam/forms/filtersets.py:386 ipam/tables/asn.py:16 ipam/tables/ip.py:85 -#: ipam/tables/ip.py:160 ipam/tables/services.py:15 ipam/tables/services.py:40 -#: ipam/tables/vlans.py:64 ipam/tables/vlans.py:114 ipam/tables/vrfs.py:26 -#: ipam/tables/vrfs.py:68 templates/circuits/circuitgroup.html:28 -#: templates/circuits/circuittype.html:22 -#: templates/circuits/provideraccount.html:28 -#: templates/circuits/providernetwork.html:24 -#: templates/core/datasource.html:34 templates/core/job.html:44 -#: templates/core/plugin.html:54 templates/core/rq_worker.html:43 -#: templates/dcim/consoleport.html:28 templates/dcim/consoleserverport.html:28 -#: templates/dcim/devicebay.html:24 templates/dcim/devicerole.html:26 -#: templates/dcim/frontport.html:28 -#: templates/dcim/inc/interface_vlans_table.html:5 -#: templates/dcim/inc/panels/inventory_items.html:18 -#: templates/dcim/interface.html:38 templates/dcim/interface.html:165 -#: templates/dcim/inventoryitem.html:28 -#: templates/dcim/inventoryitemrole.html:18 templates/dcim/location.html:29 -#: templates/dcim/manufacturer.html:36 templates/dcim/modulebay.html:30 -#: templates/dcim/platform.html:29 templates/dcim/poweroutlet.html:28 -#: templates/dcim/powerport.html:28 templates/dcim/rackrole.html:22 -#: templates/dcim/rearport.html:28 templates/dcim/region.html:29 -#: templates/dcim/sitegroup.html:29 -#: templates/dcim/virtualdevicecontext.html:18 -#: templates/extras/configcontext.html:13 -#: templates/extras/configtemplate.html:13 -#: templates/extras/customfield.html:13 templates/extras/customlink.html:13 -#: templates/extras/eventrule.html:13 templates/extras/exporttemplate.html:15 -#: templates/extras/notificationgroup.html:14 -#: templates/extras/savedfilter.html:13 templates/extras/script_list.html:44 -#: templates/extras/tag.html:14 templates/extras/webhook.html:13 -#: templates/ipam/asnrange.html:15 templates/ipam/fhrpgroup.html:30 -#: templates/ipam/rir.html:22 templates/ipam/role.html:22 -#: templates/ipam/routetarget.html:13 templates/ipam/service.html:24 -#: templates/ipam/servicetemplate.html:15 templates/ipam/vlan.html:35 -#: templates/ipam/vlangroup.html:30 templates/tenancy/contact.html:25 -#: templates/tenancy/contactgroup.html:21 -#: templates/tenancy/contactrole.html:18 templates/tenancy/tenantgroup.html:29 -#: templates/users/group.html:17 templates/users/objectpermission.html:17 -#: templates/virtualization/cluster.html:13 -#: templates/virtualization/clustergroup.html:22 -#: templates/virtualization/clustertype.html:22 -#: templates/virtualization/virtualdisk.html:25 -#: templates/virtualization/virtualmachine.html:15 -#: templates/virtualization/vminterface.html:25 -#: templates/vpn/ikepolicy.html:13 templates/vpn/ikeproposal.html:13 -#: templates/vpn/ipsecpolicy.html:13 templates/vpn/ipsecprofile.html:13 -#: templates/vpn/ipsecprofile.html:36 templates/vpn/ipsecprofile.html:69 -#: templates/vpn/ipsecproposal.html:13 templates/vpn/l2vpn.html:14 -#: templates/vpn/tunnel.html:21 templates/vpn/tunnelgroup.html:26 -#: templates/wireless/wirelesslangroup.html:29 tenancy/tables/contacts.py:19 -#: tenancy/tables/contacts.py:41 tenancy/tables/contacts.py:56 -#: tenancy/tables/tenants.py:16 tenancy/tables/tenants.py:38 -#: users/tables.py:62 users/tables.py:76 -#: virtualization/forms/bulk_create.py:20 -#: virtualization/forms/object_create.py:13 -#: virtualization/forms/object_create.py:23 -#: virtualization/tables/clusters.py:17 virtualization/tables/clusters.py:39 -#: virtualization/tables/clusters.py:62 -#: virtualization/tables/virtualmachines.py:55 -#: virtualization/tables/virtualmachines.py:139 -#: virtualization/tables/virtualmachines.py:194 vpn/tables/crypto.py:18 -#: vpn/tables/crypto.py:57 vpn/tables/crypto.py:93 vpn/tables/crypto.py:129 -#: vpn/tables/crypto.py:158 vpn/tables/l2vpn.py:23 vpn/tables/tunnels.py:18 -#: vpn/tables/tunnels.py:40 wireless/tables/wirelesslan.py:18 -#: wireless/tables/wirelesslan.py:79 +#: netbox/circuits/tables/circuits.py:32 +#: netbox/circuits/tables/circuits.py:132 +#: netbox/circuits/tables/providers.py:18 +#: netbox/circuits/tables/providers.py:69 +#: netbox/circuits/tables/providers.py:99 netbox/core/tables/data.py:16 +#: netbox/core/tables/jobs.py:14 netbox/core/tables/plugins.py: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/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/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/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/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 +#: netbox/templates/dcim/consoleserverport.html:28 +#: netbox/templates/dcim/devicebay.html:24 +#: netbox/templates/dcim/devicerole.html:26 +#: netbox/templates/dcim/frontport.html:28 +#: netbox/templates/dcim/inc/interface_vlans_table.html:5 +#: netbox/templates/dcim/inc/panels/inventory_items.html:18 +#: netbox/templates/dcim/interface.html:38 +#: netbox/templates/dcim/interface.html:165 +#: netbox/templates/dcim/inventoryitem.html:28 +#: netbox/templates/dcim/inventoryitemrole.html:18 +#: netbox/templates/dcim/location.html:29 +#: netbox/templates/dcim/manufacturer.html:36 +#: netbox/templates/dcim/modulebay.html:30 +#: netbox/templates/dcim/platform.html:29 +#: netbox/templates/dcim/poweroutlet.html:28 +#: netbox/templates/dcim/powerport.html:28 +#: netbox/templates/dcim/rackrole.html:22 +#: netbox/templates/dcim/rearport.html:28 netbox/templates/dcim/region.html:29 +#: netbox/templates/dcim/sitegroup.html:29 +#: netbox/templates/dcim/virtualdevicecontext.html:18 +#: netbox/templates/extras/configcontext.html:13 +#: netbox/templates/extras/configtemplate.html:13 +#: netbox/templates/extras/customfield.html:13 +#: netbox/templates/extras/customlink.html:13 +#: netbox/templates/extras/eventrule.html:13 +#: netbox/templates/extras/exporttemplate.html:15 +#: netbox/templates/extras/notificationgroup.html:14 +#: netbox/templates/extras/savedfilter.html:13 +#: netbox/templates/extras/script_list.html:45 +#: netbox/templates/extras/tag.html:14 netbox/templates/extras/webhook.html:13 +#: netbox/templates/ipam/asnrange.html:15 +#: netbox/templates/ipam/fhrpgroup.html:30 netbox/templates/ipam/rir.html:22 +#: netbox/templates/ipam/role.html:22 +#: netbox/templates/ipam/routetarget.html:13 +#: netbox/templates/ipam/service.html:24 +#: netbox/templates/ipam/servicetemplate.html:15 +#: netbox/templates/ipam/vlan.html:35 netbox/templates/ipam/vlangroup.html:30 +#: netbox/templates/tenancy/contact.html:25 +#: netbox/templates/tenancy/contactgroup.html:21 +#: netbox/templates/tenancy/contactrole.html:18 +#: netbox/templates/tenancy/tenantgroup.html:29 +#: netbox/templates/users/group.html:17 +#: netbox/templates/users/objectpermission.html:17 +#: netbox/templates/virtualization/cluster.html:13 +#: netbox/templates/virtualization/clustergroup.html:22 +#: netbox/templates/virtualization/clustertype.html:22 +#: netbox/templates/virtualization/virtualdisk.html:25 +#: netbox/templates/virtualization/virtualmachine.html:15 +#: netbox/templates/virtualization/vminterface.html:25 +#: netbox/templates/vpn/ikepolicy.html:13 +#: netbox/templates/vpn/ikeproposal.html:13 +#: netbox/templates/vpn/ipsecpolicy.html:13 +#: netbox/templates/vpn/ipsecprofile.html:13 +#: netbox/templates/vpn/ipsecprofile.html:36 +#: netbox/templates/vpn/ipsecprofile.html:69 +#: netbox/templates/vpn/ipsecproposal.html:13 +#: netbox/templates/vpn/l2vpn.html:14 netbox/templates/vpn/tunnel.html:21 +#: netbox/templates/vpn/tunnelgroup.html:26 +#: netbox/templates/wireless/wirelesslangroup.html:29 +#: netbox/tenancy/tables/contacts.py:19 netbox/tenancy/tables/contacts.py:41 +#: netbox/tenancy/tables/contacts.py:56 netbox/tenancy/tables/tenants.py:16 +#: netbox/tenancy/tables/tenants.py:38 netbox/users/tables.py:62 +#: netbox/users/tables.py:76 netbox/virtualization/forms/bulk_create.py:20 +#: netbox/virtualization/forms/object_create.py:13 +#: netbox/virtualization/forms/object_create.py:23 +#: netbox/virtualization/tables/clusters.py:17 +#: netbox/virtualization/tables/clusters.py:39 +#: netbox/virtualization/tables/clusters.py:62 +#: netbox/virtualization/tables/virtualmachines.py:55 +#: netbox/virtualization/tables/virtualmachines.py:139 +#: netbox/virtualization/tables/virtualmachines.py:194 +#: netbox/vpn/tables/crypto.py:18 netbox/vpn/tables/crypto.py:57 +#: netbox/vpn/tables/crypto.py:93 netbox/vpn/tables/crypto.py:129 +#: netbox/vpn/tables/crypto.py:158 netbox/vpn/tables/l2vpn.py:23 +#: netbox/vpn/tables/tunnels.py:18 netbox/vpn/tables/tunnels.py:40 +#: netbox/wireless/tables/wirelesslan.py:18 +#: netbox/wireless/tables/wirelesslan.py:79 msgid "Name" msgstr "İsim" -#: circuits/tables/circuits.py:41 circuits/tables/circuits.py:138 -#: circuits/tables/providers.py:45 circuits/tables/providers.py:79 -#: netbox/navigation/menu.py:266 netbox/navigation/menu.py:270 -#: netbox/navigation/menu.py:272 templates/circuits/provider.html:57 -#: templates/circuits/provideraccount.html:44 -#: templates/circuits/providernetwork.html:50 +#: 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/templates/circuits/provider.html:57 +#: netbox/templates/circuits/provideraccount.html:44 +#: netbox/templates/circuits/providernetwork.html:50 msgid "Circuits" msgstr "Devreler" -#: circuits/tables/circuits.py:55 templates/circuits/circuit.html:26 +#: netbox/circuits/tables/circuits.py:55 +#: netbox/templates/circuits/circuit.html:26 msgid "Circuit ID" msgstr "Devre ID" -#: circuits/tables/circuits.py:69 wireless/forms/model_forms.py:160 +#: netbox/circuits/tables/circuits.py:69 +#: netbox/wireless/forms/model_forms.py:160 msgid "Side A" msgstr "A Tarafı" -#: circuits/tables/circuits.py:74 +#: netbox/circuits/tables/circuits.py:74 msgid "Side Z" msgstr "Z Tarafı" -#: circuits/tables/circuits.py:77 templates/circuits/circuit.html:55 +#: netbox/circuits/tables/circuits.py:77 +#: netbox/templates/circuits/circuit.html:55 msgid "Commit Rate" msgstr "Taahhüt Oranı" -#: circuits/tables/circuits.py:80 circuits/tables/providers.py:48 -#: circuits/tables/providers.py:82 circuits/tables/providers.py:107 -#: dcim/tables/devices.py:1036 dcim/tables/devicetypes.py:92 -#: dcim/tables/modules.py:29 dcim/tables/modules.py:72 dcim/tables/power.py:39 -#: dcim/tables/power.py:96 dcim/tables/racks.py:84 dcim/tables/racks.py:145 -#: dcim/tables/racks.py:225 dcim/tables/sites.py:108 -#: extras/tables/tables.py:582 ipam/tables/asn.py:69 ipam/tables/fhrp.py:34 -#: ipam/tables/ip.py:136 ipam/tables/ip.py:275 ipam/tables/ip.py:329 -#: ipam/tables/ip.py:397 ipam/tables/services.py:24 ipam/tables/services.py:54 -#: ipam/tables/vlans.py:145 ipam/tables/vrfs.py:47 ipam/tables/vrfs.py:72 -#: templates/dcim/htmx/cable_edit.html:89 templates/generic/bulk_edit.html:86 -#: templates/inc/panels/comments.html:5 tenancy/tables/contacts.py:68 -#: tenancy/tables/tenants.py:46 utilities/forms/fields/fields.py:29 -#: virtualization/tables/clusters.py:91 -#: virtualization/tables/virtualmachines.py:82 vpn/tables/crypto.py:37 -#: vpn/tables/crypto.py:74 vpn/tables/crypto.py:109 vpn/tables/crypto.py:140 -#: vpn/tables/crypto.py:173 vpn/tables/l2vpn.py:37 vpn/tables/tunnels.py:61 -#: wireless/tables/wirelesslan.py:27 wireless/tables/wirelesslan.py:58 +#: netbox/circuits/tables/circuits.py: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:72 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/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/vpn/tables/crypto.py:37 netbox/vpn/tables/crypto.py:74 +#: netbox/vpn/tables/crypto.py:109 netbox/vpn/tables/crypto.py:140 +#: netbox/vpn/tables/crypto.py:173 netbox/vpn/tables/l2vpn.py:37 +#: netbox/vpn/tables/tunnels.py:61 netbox/wireless/tables/wirelesslan.py:27 +#: netbox/wireless/tables/wirelesslan.py:58 msgid "Comments" msgstr "Yorumlar" -#: circuits/tables/circuits.py:86 templates/tenancy/contact.html:84 -#: tenancy/tables/contacts.py:73 +#: netbox/circuits/tables/circuits.py:86 +#: netbox/templates/tenancy/contact.html:84 +#: netbox/tenancy/tables/contacts.py:73 msgid "Assignments" msgstr "Ödevler" -#: circuits/tables/providers.py:23 +#: netbox/circuits/tables/providers.py:23 msgid "Accounts" msgstr "Hesaplar" -#: circuits/tables/providers.py:29 +#: netbox/circuits/tables/providers.py:29 msgid "Account Count" msgstr "Hesap Sayısı" -#: circuits/tables/providers.py:39 dcim/tables/sites.py:100 +#: netbox/circuits/tables/providers.py:39 netbox/dcim/tables/sites.py:100 msgid "ASN Count" msgstr "ASN Sayısı" -#: circuits/views.py:331 +#: netbox/circuits/views.py:331 #, python-brace-format msgid "No terminations have been defined for circuit {circuit}." msgstr "Devre için sonlandırma tanımlanmamıştır {circuit}." -#: circuits/views.py:380 +#: netbox/circuits/views.py:380 #, python-brace-format msgid "Swapped terminations for circuit {circuit}." msgstr "Devre için değiştirilmiş sonlandırmalar {circuit}." -#: core/api/views.py:39 +#: netbox/core/api/views.py:39 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." -#: core/choices.py:18 +#: netbox/core/choices.py:18 msgid "New" msgstr "Yeni" -#: core/choices.py:19 core/constants.py:18 core/tables/tasks.py:15 -#: templates/core/rq_task.html:77 +#: netbox/core/choices.py:19 netbox/core/constants.py:18 +#: netbox/core/tables/tasks.py:15 netbox/templates/core/rq_task.html:77 msgid "Queued" msgstr "Kuyruğa alındı" -#: core/choices.py:20 +#: netbox/core/choices.py:20 msgid "Syncing" msgstr "Senkronizasyon" -#: core/choices.py:21 core/choices.py:57 core/tables/jobs.py:41 -#: templates/core/job.html:86 +#: netbox/core/choices.py:21 netbox/core/choices.py:57 +#: netbox/core/tables/jobs.py:41 netbox/templates/core/job.html:86 msgid "Completed" msgstr "Tamamlandı" -#: core/choices.py:22 core/choices.py:59 core/constants.py:20 -#: core/tables/tasks.py:34 dcim/choices.py:187 dcim/choices.py:239 -#: dcim/choices.py:1607 virtualization/choices.py:47 +#: netbox/core/choices.py:22 netbox/core/choices.py:59 +#: netbox/core/constants.py:20 netbox/core/tables/tasks.py:34 +#: netbox/dcim/choices.py:187 netbox/dcim/choices.py:239 +#: netbox/dcim/choices.py:1609 netbox/virtualization/choices.py:47 msgid "Failed" msgstr "Başarısız" -#: core/choices.py:35 netbox/navigation/menu.py:335 -#: netbox/navigation/menu.py:339 templates/extras/script/base.html:14 -#: templates/extras/script_list.html:7 templates/extras/script_list.html:12 -#: templates/extras/script_result.html:17 +#: netbox/core/choices.py:35 netbox/netbox/navigation/menu.py:335 +#: netbox/netbox/navigation/menu.py:339 +#: netbox/templates/extras/script/base.html:14 +#: netbox/templates/extras/script_list.html:7 +#: netbox/templates/extras/script_list.html:12 +#: netbox/templates/extras/script_result.html:17 msgid "Scripts" msgstr "Komut Dosyaları" -#: core/choices.py:36 templates/extras/report/base.html:13 +#: netbox/core/choices.py:36 netbox/templates/extras/report/base.html:13 msgid "Reports" msgstr "Raporlar" -#: core/choices.py:54 +#: netbox/core/choices.py:54 msgid "Pending" msgstr "Beklemede" -#: core/choices.py:55 core/constants.py:23 core/tables/jobs.py:32 -#: core/tables/tasks.py:38 templates/core/job.html:73 +#: netbox/core/choices.py:55 netbox/core/constants.py:23 +#: netbox/core/tables/jobs.py:32 netbox/core/tables/tasks.py:38 +#: netbox/templates/core/job.html:73 msgid "Scheduled" msgstr "Zamanlanmış" -#: core/choices.py:56 +#: netbox/core/choices.py:56 msgid "Running" msgstr "Koşu" -#: core/choices.py:58 +#: netbox/core/choices.py:58 msgid "Errored" msgstr "Hatalı" -#: core/choices.py:87 core/tables/plugins.py:63 -#: templates/generic/object.html:61 +#: netbox/core/choices.py:87 netbox/core/tables/plugins.py:63 +#: netbox/templates/generic/object.html:61 msgid "Updated" msgstr "Güncellendi" -#: core/choices.py:88 +#: netbox/core/choices.py:88 msgid "Deleted" msgstr "Silinmiş" -#: core/constants.py:19 core/tables/tasks.py:30 +#: netbox/core/constants.py:19 netbox/core/tables/tasks.py:30 msgid "Finished" msgstr "Bitmiş" -#: core/constants.py:21 core/tables/jobs.py:38 templates/core/job.html:82 -#: templates/extras/htmx/script_result.html:8 +#: netbox/core/constants.py:21 netbox/core/tables/jobs.py:38 +#: netbox/templates/core/job.html:82 +#: netbox/templates/extras/htmx/script_result.html:8 msgid "Started" msgstr "Başladı" -#: core/constants.py:22 core/tables/tasks.py:26 +#: netbox/core/constants.py:22 netbox/core/tables/tasks.py:26 msgid "Deferred" msgstr "Ertelenmiş" -#: core/constants.py:24 +#: netbox/core/constants.py:24 msgid "Stopped" msgstr "Durduruldu" -#: core/constants.py:25 +#: netbox/core/constants.py:25 msgid "Cancelled" msgstr "İptal Edildi" -#: core/data_backends.py:32 core/tables/plugins.py:51 -#: templates/core/plugin.html:88 templates/dcim/interface.html:216 +#: netbox/core/data_backends.py:32 netbox/core/tables/plugins.py:51 +#: netbox/templates/core/plugin.html:88 +#: netbox/templates/dcim/interface.html:216 msgid "Local" msgstr "Yerel" -#: core/data_backends.py:50 core/tables/change_logging.py:20 -#: templates/account/profile.html:15 templates/users/user.html:17 -#: users/tables.py:31 +#: netbox/core/data_backends.py:50 netbox/core/tables/change_logging.py:20 +#: netbox/templates/account/profile.html:15 +#: netbox/templates/users/user.html:17 netbox/users/tables.py:31 msgid "Username" msgstr "Kullanıcı Adı" -#: core/data_backends.py:52 core/data_backends.py:58 +#: netbox/core/data_backends.py:52 netbox/core/data_backends.py:58 msgid "Only used for cloning with HTTP(S)" msgstr "Sadece HTTP(S) ile klonlama için kullanılır" -#: core/data_backends.py:56 templates/account/base.html:23 -#: templates/account/password.html:12 users/forms/model_forms.py:170 +#: netbox/core/data_backends.py:56 netbox/templates/account/base.html:23 +#: netbox/templates/account/password.html:12 +#: netbox/users/forms/model_forms.py:170 msgid "Password" msgstr "Şifre" -#: core/data_backends.py:62 +#: netbox/core/data_backends.py:62 msgid "Branch" msgstr "Şube" -#: core/data_backends.py:120 +#: netbox/core/data_backends.py:120 #, python-brace-format msgid "Fetching remote data failed ({name}): {error}" msgstr "Uzaktan veri getirilemedi ({name}): {error}" -#: core/data_backends.py:133 +#: netbox/core/data_backends.py:133 msgid "AWS access key ID" msgstr "AWS erişim anahtarı kimliği" -#: core/data_backends.py:137 +#: netbox/core/data_backends.py:137 msgid "AWS secret access key" msgstr "AWS gizli erişim anahtarı" -#: core/events.py:27 +#: netbox/core/events.py:27 msgid "Object created" msgstr "Oluşturulan nesne" -#: core/events.py:28 +#: netbox/core/events.py:28 msgid "Object updated" msgstr "Nesne güncellendi" -#: core/events.py:29 +#: netbox/core/events.py:29 msgid "Object deleted" msgstr "Nesne silindi" -#: core/events.py:30 +#: netbox/core/events.py:30 msgid "Job started" msgstr "İş başladı" -#: core/events.py:31 +#: netbox/core/events.py:31 msgid "Job completed" msgstr "İş tamamlandı" -#: core/events.py:32 +#: netbox/core/events.py:32 msgid "Job failed" msgstr "İş başarısız oldu" -#: core/events.py:33 +#: netbox/core/events.py:33 msgid "Job errored" msgstr "İş hatası" -#: core/filtersets.py:53 extras/filtersets.py:250 extras/filtersets.py:633 -#: extras/filtersets.py:661 +#: netbox/core/filtersets.py:53 netbox/extras/filtersets.py:250 +#: netbox/extras/filtersets.py:633 netbox/extras/filtersets.py:661 msgid "Data source (ID)" msgstr "Veri kaynağı (ID)" -#: core/filtersets.py:59 +#: netbox/core/filtersets.py:59 msgid "Data source (name)" msgstr "Veri kaynağı (isim)" -#: core/filtersets.py:145 dcim/filtersets.py:501 extras/filtersets.py:287 -#: extras/filtersets.py:331 extras/filtersets.py:353 extras/filtersets.py:413 -#: users/filtersets.py:28 +#: netbox/core/filtersets.py:145 netbox/dcim/filtersets.py:501 +#: 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 msgid "User (ID)" msgstr "Kullanıcı (ID)" -#: core/filtersets.py:151 +#: netbox/core/filtersets.py:151 msgid "User name" msgstr "Kullanıcı adı" -#: core/forms/bulk_edit.py:25 core/forms/filtersets.py:43 -#: core/tables/data.py:26 dcim/forms/bulk_edit.py:1122 -#: dcim/forms/bulk_edit.py:1400 dcim/forms/filtersets.py:1370 -#: dcim/tables/devices.py:553 dcim/tables/devicetypes.py:224 -#: extras/forms/bulk_edit.py:123 extras/forms/bulk_edit.py:187 -#: extras/forms/bulk_edit.py:246 extras/forms/filtersets.py:142 -#: extras/forms/filtersets.py:229 extras/forms/filtersets.py:294 -#: extras/tables/tables.py:162 extras/tables/tables.py:253 -#: extras/tables/tables.py:415 netbox/preferences.py:22 -#: templates/core/datasource.html:42 templates/dcim/interface.html:61 -#: templates/extras/customlink.html:17 templates/extras/eventrule.html:17 -#: templates/extras/savedfilter.html:25 -#: templates/users/objectpermission.html:25 -#: templates/virtualization/vminterface.html:29 users/forms/bulk_edit.py:89 -#: users/forms/filtersets.py:70 users/tables.py:83 -#: virtualization/forms/bulk_edit.py:217 -#: virtualization/forms/filtersets.py:215 +#: 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/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/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 +#: netbox/templates/dcim/interface.html:61 +#: netbox/templates/extras/customlink.html:17 +#: netbox/templates/extras/eventrule.html:17 +#: netbox/templates/extras/savedfilter.html:25 +#: netbox/templates/users/objectpermission.html:25 +#: netbox/templates/virtualization/vminterface.html:29 +#: netbox/users/forms/bulk_edit.py:89 netbox/users/forms/filtersets.py:70 +#: netbox/users/tables.py:83 netbox/virtualization/forms/bulk_edit.py:217 +#: netbox/virtualization/forms/filtersets.py:215 msgid "Enabled" msgstr "Etkin" -#: core/forms/bulk_edit.py:34 extras/forms/model_forms.py:285 -#: templates/extras/savedfilter.html:52 vpn/forms/filtersets.py:97 -#: vpn/forms/filtersets.py:127 vpn/forms/filtersets.py:151 -#: vpn/forms/filtersets.py:170 vpn/forms/model_forms.py:301 -#: vpn/forms/model_forms.py:321 vpn/forms/model_forms.py:337 -#: vpn/forms/model_forms.py:357 vpn/forms/model_forms.py:380 +#: netbox/core/forms/bulk_edit.py:34 netbox/extras/forms/model_forms.py:285 +#: 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 msgid "Parameters" msgstr "Parametreler" -#: core/forms/bulk_edit.py:38 templates/core/datasource.html:68 +#: netbox/core/forms/bulk_edit.py:38 netbox/templates/core/datasource.html:68 msgid "Ignore rules" msgstr "Kuralları yok sayın" -#: core/forms/filtersets.py:30 core/forms/model_forms.py:97 -#: extras/forms/model_forms.py:248 extras/forms/model_forms.py:578 -#: extras/forms/model_forms.py:632 extras/tables/tables.py:191 -#: extras/tables/tables.py:483 extras/tables/tables.py:518 -#: templates/core/datasource.html:31 -#: templates/dcim/device/render_config.html:18 -#: templates/extras/configcontext.html:29 -#: templates/extras/configtemplate.html:21 -#: templates/extras/exporttemplate.html:35 -#: templates/virtualization/virtualmachine/render_config.html:18 +#: netbox/core/forms/filtersets.py: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/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 msgid "Data Source" msgstr "Veri Kaynağı" -#: core/forms/filtersets.py:55 core/forms/mixins.py:21 +#: netbox/core/forms/filtersets.py:55 netbox/core/forms/mixins.py:21 msgid "File" msgstr "Dosya" -#: core/forms/filtersets.py:60 core/forms/mixins.py:16 -#: extras/forms/filtersets.py:170 extras/forms/filtersets.py:328 -#: extras/forms/filtersets.py:413 +#: 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 msgid "Data source" msgstr "Veri kaynağı" -#: core/forms/filtersets.py:70 extras/forms/filtersets.py:440 +#: netbox/core/forms/filtersets.py:70 netbox/extras/forms/filtersets.py:440 msgid "Creation" msgstr "Oluşturma" -#: core/forms/filtersets.py:74 core/forms/filtersets.py:160 -#: extras/forms/filtersets.py:461 extras/tables/tables.py:220 -#: extras/tables/tables.py:294 extras/tables/tables.py:326 -#: extras/tables/tables.py:571 templates/core/job.html:38 -#: templates/core/objectchange.html:52 tenancy/tables/contacts.py:90 -#: vpn/tables/l2vpn.py:59 +#: 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/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 +#: netbox/tenancy/tables/contacts.py:90 netbox/vpn/tables/l2vpn.py:59 msgid "Object Type" msgstr "Nesne Türü" -#: core/forms/filtersets.py:84 +#: netbox/core/forms/filtersets.py:84 msgid "Created after" msgstr "Sonra oluşturuldu" -#: core/forms/filtersets.py:89 +#: netbox/core/forms/filtersets.py:89 msgid "Created before" msgstr "Daha önce oluşturuldu" -#: core/forms/filtersets.py:94 +#: netbox/core/forms/filtersets.py:94 msgid "Scheduled after" msgstr "Sonrasında planlandı" -#: core/forms/filtersets.py:99 +#: netbox/core/forms/filtersets.py:99 msgid "Scheduled before" msgstr "Önceden planlanmış" -#: core/forms/filtersets.py:104 +#: netbox/core/forms/filtersets.py:104 msgid "Started after" msgstr "Sonra başladı" -#: core/forms/filtersets.py:109 +#: netbox/core/forms/filtersets.py:109 msgid "Started before" msgstr "Daha önce başladı" -#: core/forms/filtersets.py:114 +#: netbox/core/forms/filtersets.py:114 msgid "Completed after" msgstr "Sonrasında tamamlandı" -#: core/forms/filtersets.py:119 +#: netbox/core/forms/filtersets.py:119 msgid "Completed before" msgstr "Daha önce tamamlandı" -#: core/forms/filtersets.py:126 core/forms/filtersets.py:155 -#: dcim/forms/bulk_edit.py:456 dcim/forms/filtersets.py:418 -#: dcim/forms/filtersets.py:462 dcim/forms/model_forms.py:316 -#: extras/forms/filtersets.py:456 extras/forms/filtersets.py:475 -#: extras/tables/tables.py:302 extras/tables/tables.py:342 -#: templates/core/objectchange.html:36 templates/dcim/rackreservation.html:58 -#: templates/extras/savedfilter.html:21 templates/inc/user_menu.html:33 -#: templates/users/token.html:21 templates/users/user.html:6 -#: templates/users/user.html:14 users/filtersets.py:107 -#: users/filtersets.py:174 users/forms/filtersets.py:84 -#: users/forms/filtersets.py:125 users/forms/model_forms.py:155 -#: users/forms/model_forms.py:192 users/tables.py:19 +#: 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/extras/tables/tables.py:302 netbox/extras/tables/tables.py:342 +#: netbox/templates/core/objectchange.html:36 +#: netbox/templates/dcim/rackreservation.html:58 +#: netbox/templates/extras/savedfilter.html:21 +#: netbox/templates/inc/user_menu.html:33 netbox/templates/users/token.html:21 +#: netbox/templates/users/user.html:6 netbox/templates/users/user.html:14 +#: netbox/users/filtersets.py:107 netbox/users/filtersets.py:174 +#: netbox/users/forms/filtersets.py:84 netbox/users/forms/filtersets.py:125 +#: netbox/users/forms/model_forms.py:155 netbox/users/forms/model_forms.py:192 +#: netbox/users/tables.py:19 msgid "User" msgstr "Kullanıcı" -#: core/forms/filtersets.py:134 core/tables/change_logging.py:15 -#: extras/tables/tables.py:609 extras/tables/tables.py:646 -#: templates/core/objectchange.html:32 +#: netbox/core/forms/filtersets.py:134 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" -#: core/forms/filtersets.py:139 extras/forms/filtersets.py:445 +#: netbox/core/forms/filtersets.py:139 netbox/extras/forms/filtersets.py:445 msgid "After" msgstr "Sonra" -#: core/forms/filtersets.py:144 extras/forms/filtersets.py:450 +#: netbox/core/forms/filtersets.py:144 netbox/extras/forms/filtersets.py:450 msgid "Before" msgstr "Önce" -#: core/forms/filtersets.py:148 core/tables/change_logging.py:29 -#: extras/forms/model_forms.py:396 templates/core/objectchange.html:46 -#: templates/extras/eventrule.html:71 +#: netbox/core/forms/filtersets.py:148 netbox/core/tables/change_logging.py:29 +#: netbox/extras/forms/model_forms.py:396 +#: netbox/templates/core/objectchange.html:46 +#: netbox/templates/extras/eventrule.html:71 msgid "Action" msgstr "Eylem" -#: core/forms/model_forms.py:54 core/tables/data.py:46 -#: templates/core/datafile.html:27 templates/extras/report/base.html:33 -#: templates/extras/script/base.html:32 +#: netbox/core/forms/model_forms.py:54 netbox/core/tables/data.py:46 +#: netbox/templates/core/datafile.html:27 +#: netbox/templates/extras/report/base.html:33 +#: netbox/templates/extras/script/base.html:32 msgid "Source" msgstr "Kaynak" -#: core/forms/model_forms.py:58 +#: netbox/core/forms/model_forms.py:58 msgid "Backend Parameters" msgstr "Arka Uç Parametreleri" -#: core/forms/model_forms.py:96 +#: netbox/core/forms/model_forms.py:96 msgid "File Upload" msgstr "Dosya Yükleme" -#: core/forms/model_forms.py:108 +#: netbox/core/forms/model_forms.py:108 msgid "Cannot upload a file and sync from an existing file" msgstr "Dosya yüklenemiyor ve varolan bir dosyadan senkronize edilemiyor" -#: core/forms/model_forms.py:110 +#: netbox/core/forms/model_forms.py:110 msgid "Must upload a file or select a data file to sync" msgstr "" "Senkronize etmek için bir dosya yüklemeniz veya bir veri dosyası seçmeniz " "gerekir" -#: core/forms/model_forms.py:153 templates/dcim/rack_elevation_list.html:6 +#: netbox/core/forms/model_forms.py:153 +#: netbox/templates/dcim/rack_elevation_list.html:6 msgid "Rack Elevations" msgstr "Raf Yükseltmeleri" -#: core/forms/model_forms.py:157 dcim/choices.py:1518 -#: dcim/forms/bulk_edit.py:969 dcim/forms/bulk_edit.py:1357 -#: dcim/forms/bulk_edit.py:1375 dcim/tables/racks.py:158 -#: netbox/navigation/menu.py:291 netbox/navigation/menu.py:295 +#: 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 msgid "Power" msgstr "Güç" -#: core/forms/model_forms.py:159 netbox/navigation/menu.py:154 -#: templates/core/inc/config_data.html:37 +#: netbox/core/forms/model_forms.py:159 netbox/netbox/navigation/menu.py:154 +#: netbox/templates/core/inc/config_data.html:37 msgid "IPAM" msgstr "IPAM" -#: core/forms/model_forms.py:160 netbox/navigation/menu.py:230 -#: templates/core/inc/config_data.html:50 vpn/forms/bulk_edit.py:77 -#: vpn/forms/filtersets.py:43 vpn/forms/model_forms.py:61 -#: vpn/forms/model_forms.py:146 +#: netbox/core/forms/model_forms.py:160 netbox/netbox/navigation/menu.py:230 +#: netbox/templates/core/inc/config_data.html:50 +#: netbox/vpn/forms/bulk_edit.py:77 netbox/vpn/forms/filtersets.py:43 +#: netbox/vpn/forms/model_forms.py:61 netbox/vpn/forms/model_forms.py:146 msgid "Security" msgstr "Güvenlik" -#: core/forms/model_forms.py:161 templates/core/inc/config_data.html:59 +#: netbox/core/forms/model_forms.py:161 +#: netbox/templates/core/inc/config_data.html:59 msgid "Banners" msgstr "Afişler" -#: core/forms/model_forms.py:162 templates/core/inc/config_data.html:80 +#: netbox/core/forms/model_forms.py:162 +#: netbox/templates/core/inc/config_data.html:80 msgid "Pagination" msgstr "Sayfalandırma" -#: core/forms/model_forms.py:163 extras/forms/bulk_edit.py:92 -#: extras/forms/filtersets.py:47 extras/forms/model_forms.py:116 -#: extras/forms/model_forms.py:129 templates/core/inc/config_data.html:93 +#: 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/model_forms.py:129 +#: netbox/templates/core/inc/config_data.html:93 msgid "Validation" msgstr "Doğrulama" -#: core/forms/model_forms.py:164 templates/account/preferences.html:6 +#: netbox/core/forms/model_forms.py:164 +#: netbox/templates/account/preferences.html:6 msgid "User Preferences" msgstr "Kullanıcı Tercihleri" -#: core/forms/model_forms.py:167 dcim/forms/filtersets.py:732 -#: templates/core/inc/config_data.html:127 users/forms/model_forms.py:64 +#: netbox/core/forms/model_forms.py:167 netbox/dcim/forms/filtersets.py:732 +#: netbox/templates/core/inc/config_data.html:127 +#: netbox/users/forms/model_forms.py:64 msgid "Miscellaneous" msgstr "Çeşitli" -#: core/forms/model_forms.py:169 +#: netbox/core/forms/model_forms.py:169 msgid "Config Revision" msgstr "Yapılandırma Revizyonu" -#: core/forms/model_forms.py:208 +#: netbox/core/forms/model_forms.py:208 msgid "This parameter has been defined statically and cannot be modified." msgstr "Bu parametre statik olarak tanımlanmıştır ve değiştirilemez." -#: core/forms/model_forms.py:216 +#: netbox/core/forms/model_forms.py:216 #, python-brace-format msgid "Current value: {value}" msgstr "Mevcut değer: {value}" -#: core/forms/model_forms.py:218 +#: netbox/core/forms/model_forms.py:218 msgid " (default)" msgstr " (varsayılan)" -#: core/models/change_logging.py:29 +#: netbox/core/models/change_logging.py:29 msgid "time" msgstr "zaman" -#: core/models/change_logging.py:42 +#: netbox/core/models/change_logging.py:42 msgid "user name" msgstr "kullanıcı adı" -#: core/models/change_logging.py:47 +#: netbox/core/models/change_logging.py:47 msgid "request ID" msgstr "istek kimliği" -#: core/models/change_logging.py:52 extras/models/staging.py:69 +#: netbox/core/models/change_logging.py:52 netbox/extras/models/staging.py:69 msgid "action" msgstr "aksiyon" -#: core/models/change_logging.py:86 +#: netbox/core/models/change_logging.py:86 msgid "pre-change data" msgstr "değişiklik öncesi veriler" -#: core/models/change_logging.py:92 +#: netbox/core/models/change_logging.py:92 msgid "post-change data" msgstr "değişim sonrası veriler" -#: core/models/change_logging.py:106 +#: netbox/core/models/change_logging.py:106 msgid "object change" msgstr "nesne değişikliği" -#: core/models/change_logging.py:107 +#: netbox/core/models/change_logging.py:107 msgid "object changes" msgstr "nesne değişiklikleri" -#: core/models/change_logging.py:123 +#: netbox/core/models/change_logging.py:123 #, python-brace-format 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})." -#: core/models/config.py:18 core/models/data.py:266 core/models/files.py:27 -#: core/models/jobs.py:49 extras/models/models.py:730 -#: extras/models/notifications.py:39 extras/models/notifications.py:186 -#: netbox/models/features.py:53 users/models/tokens.py:32 +#: netbox/core/models/config.py:18 netbox/core/models/data.py:266 +#: 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/notifications.py:186 +#: netbox/netbox/models/features.py:53 netbox/users/models/tokens.py:32 msgid "created" msgstr "oluşturulan" -#: core/models/config.py:22 +#: netbox/core/models/config.py:22 msgid "comment" msgstr "yorum Yap" -#: core/models/config.py:29 +#: netbox/core/models/config.py:29 msgid "configuration data" msgstr "yapılandırma verileri" -#: core/models/config.py:36 +#: netbox/core/models/config.py:36 msgid "config revision" msgstr "yapılandırma revizyonu" -#: core/models/config.py:37 +#: netbox/core/models/config.py:37 msgid "config revisions" msgstr "yapılandırma revizyonları" -#: core/models/config.py:41 +#: netbox/core/models/config.py:41 msgid "Default configuration" msgstr "Varsayılan yapılandırma" -#: core/models/config.py:43 +#: netbox/core/models/config.py:43 msgid "Current configuration" msgstr "Geçerli yapılandırma" -#: core/models/config.py:44 +#: netbox/core/models/config.py:44 #, python-brace-format msgid "Config revision #{id}" msgstr "Yapılandırma revizyonu #{id}" -#: core/models/data.py:44 dcim/models/cables.py:43 -#: dcim/models/device_component_templates.py:203 -#: dcim/models/device_component_templates.py:237 -#: dcim/models/device_component_templates.py:272 -#: dcim/models/device_component_templates.py:334 -#: dcim/models/device_component_templates.py:413 -#: dcim/models/device_component_templates.py:512 -#: dcim/models/device_component_templates.py:612 -#: dcim/models/device_components.py:283 dcim/models/device_components.py:312 -#: dcim/models/device_components.py:345 dcim/models/device_components.py:463 -#: dcim/models/device_components.py:605 dcim/models/device_components.py:970 -#: dcim/models/device_components.py:1044 dcim/models/power.py:102 -#: extras/models/customfields.py:78 extras/models/search.py:41 -#: virtualization/models/clusters.py:61 vpn/models/l2vpn.py:32 +#: 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/extras/models/search.py:41 +#: netbox/virtualization/models/clusters.py:61 netbox/vpn/models/l2vpn.py:32 msgid "type" msgstr "türü" -#: core/models/data.py:49 extras/choices.py:37 extras/models/models.py:164 -#: extras/tables/tables.py:656 templates/core/datasource.html:58 -#: templates/core/plugin.html:66 +#: netbox/core/models/data.py:49 netbox/extras/choices.py:37 +#: netbox/extras/models/models.py:164 netbox/extras/tables/tables.py:656 +#: netbox/templates/core/datasource.html:58 +#: netbox/templates/core/plugin.html:66 msgid "URL" msgstr "URL" -#: core/models/data.py:59 dcim/models/device_component_templates.py:418 -#: dcim/models/device_components.py:512 extras/models/models.py:70 -#: extras/models/models.py:301 extras/models/models.py:526 -#: users/models/permissions.py:29 +#: netbox/core/models/data.py:59 +#: netbox/dcim/models/device_component_templates.py:418 +#: netbox/dcim/models/device_components.py:512 +#: 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" msgstr "etkin" -#: core/models/data.py:63 +#: netbox/core/models/data.py:63 msgid "ignore rules" msgstr "kuralları yok sayın" -#: core/models/data.py:65 +#: netbox/core/models/data.py:65 msgid "Patterns (one per line) matching files to ignore when syncing" msgstr "" "Senkronizasyon sırasında yok sayılacak dosyalarla eşleşen desenler (satır " "başına bir tane)" -#: core/models/data.py:68 extras/models/models.py:534 +#: netbox/core/models/data.py:68 netbox/extras/models/models.py:534 msgid "parameters" msgstr "parametreler" -#: core/models/data.py:73 +#: netbox/core/models/data.py:73 msgid "last synced" msgstr "son senkronize edildi" -#: core/models/data.py:81 +#: netbox/core/models/data.py:81 msgid "data source" msgstr "veri kaynağı" -#: core/models/data.py:82 +#: netbox/core/models/data.py:82 msgid "data sources" msgstr "veri kaynakları" -#: core/models/data.py:122 +#: netbox/core/models/data.py:122 #, python-brace-format msgid "Unknown backend type: {type}" msgstr "Bilinmeyen arka uç türü: {type}" -#: core/models/data.py:164 +#: netbox/core/models/data.py:164 msgid "Cannot initiate sync; syncing already in progress." msgstr "Senkronizasyon başlatılamıyor; senkronizasyon zaten devam ediyor." -#: core/models/data.py:177 +#: netbox/core/models/data.py:177 msgid "" "There was an error initializing the backend. A dependency needs to be " "installed: " @@ -1893,1221 +2160,1283 @@ msgstr "" "Arka ucu başlatırken bir hata oluştu. Bir bağımlılığın yüklenmesi gerekiyor:" " " -#: core/models/data.py:270 core/models/files.py:31 -#: netbox/models/features.py:59 +#: netbox/core/models/data.py:270 netbox/core/models/files.py:31 +#: netbox/netbox/models/features.py:59 msgid "last updated" msgstr "son güncellendi" -#: core/models/data.py:280 dcim/models/cables.py:444 +#: netbox/core/models/data.py:280 netbox/dcim/models/cables.py:444 msgid "path" msgstr "yol" -#: core/models/data.py:283 +#: netbox/core/models/data.py:283 msgid "File path relative to the data source's root" msgstr "Veri kaynağının köküne göre dosya yolu" -#: core/models/data.py:287 ipam/models/ip.py:503 +#: netbox/core/models/data.py:287 netbox/ipam/models/ip.py:503 msgid "size" msgstr "boyut" -#: core/models/data.py:290 +#: netbox/core/models/data.py:290 msgid "hash" msgstr "kare" -#: core/models/data.py:294 +#: netbox/core/models/data.py:294 msgid "Length must be 64 hexadecimal characters." msgstr "Uzunluk 64 onaltılık karakter olmalıdır." -#: core/models/data.py:296 +#: netbox/core/models/data.py:296 msgid "SHA256 hash of the file data" msgstr "Dosya verilerinin SHA256 karması" -#: core/models/data.py:313 +#: netbox/core/models/data.py:313 msgid "data file" msgstr "veri dosyası" -#: core/models/data.py:314 +#: netbox/core/models/data.py:314 msgid "data files" msgstr "veri dosyaları" -#: core/models/data.py:401 +#: netbox/core/models/data.py:401 msgid "auto sync record" msgstr "otomatik senkronizasyon kaydı" -#: core/models/data.py:402 +#: netbox/core/models/data.py:402 msgid "auto sync records" msgstr "otomatik senkronizasyon kayıtları" -#: core/models/files.py:37 +#: netbox/core/models/files.py:37 msgid "file root" msgstr "dosya kökü" -#: core/models/files.py:42 +#: netbox/core/models/files.py:42 msgid "file path" msgstr "dosya yolu" -#: core/models/files.py:44 +#: netbox/core/models/files.py:44 msgid "File path relative to the designated root path" msgstr "Belirlenen kök yoluna göre dosya yolu" -#: core/models/files.py:61 +#: netbox/core/models/files.py:61 msgid "managed file" msgstr "yönetilen dosya" -#: core/models/files.py:62 +#: netbox/core/models/files.py:62 msgid "managed files" msgstr "yönetilen dosyalar" -#: core/models/jobs.py:53 +#: netbox/core/models/jobs.py:54 msgid "scheduled" msgstr "planlanmış" -#: core/models/jobs.py:58 +#: netbox/core/models/jobs.py:59 msgid "interval" msgstr "aralık" -#: core/models/jobs.py:64 +#: netbox/core/models/jobs.py:65 msgid "Recurrence interval (in minutes)" msgstr "Tekrarlama aralığı (dakika cinsinden)" -#: core/models/jobs.py:67 +#: netbox/core/models/jobs.py:68 msgid "started" msgstr "başladı" -#: core/models/jobs.py:72 +#: netbox/core/models/jobs.py:73 msgid "completed" msgstr "tamamlandı" -#: core/models/jobs.py:90 extras/models/models.py:101 -#: extras/models/staging.py:87 +#: netbox/core/models/jobs.py:91 netbox/extras/models/models.py:101 +#: netbox/extras/models/staging.py:87 msgid "data" msgstr "veri" -#: core/models/jobs.py:95 +#: netbox/core/models/jobs.py:96 msgid "error" msgstr "hata" -#: core/models/jobs.py:100 +#: netbox/core/models/jobs.py:101 msgid "job ID" msgstr "görev ID" -#: core/models/jobs.py:111 +#: netbox/core/models/jobs.py:112 msgid "job" msgstr "görev" -#: core/models/jobs.py:112 +#: netbox/core/models/jobs.py:113 msgid "jobs" msgstr "görevler" -#: core/models/jobs.py:135 +#: netbox/core/models/jobs.py:136 #, python-brace-format msgid "Jobs cannot be assigned to this object type ({type})." msgstr "İşler bu nesne türüne atanamaz ({type})." -#: core/models/jobs.py:185 +#: netbox/core/models/jobs.py:190 #, python-brace-format msgid "Invalid status for job termination. Choices are: {choices}" msgstr "" "İşin sonlandırılması için geçersiz durum. Seçenekler şunlardır: {choices}" -#: core/models/jobs.py:216 +#: netbox/core/models/jobs.py:221 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." -#: core/signals.py:126 +#: netbox/core/signals.py:126 #, python-brace-format msgid "Deletion is prevented by a protection rule: {message}" msgstr "Silme işlemi bir koruma kuralı tarafından engellenir: {message}" -#: core/tables/change_logging.py:25 templates/account/profile.html:19 -#: templates/users/user.html:21 +#: netbox/core/tables/change_logging.py:25 +#: netbox/templates/account/profile.html:19 +#: netbox/templates/users/user.html:21 msgid "Full Name" msgstr "Ad Soyad" -#: core/tables/change_logging.py:37 core/tables/jobs.py:21 -#: extras/choices.py:41 extras/tables/tables.py:279 -#: extras/tables/tables.py:297 extras/tables/tables.py:329 -#: extras/tables/tables.py:409 extras/tables/tables.py:470 -#: extras/tables/tables.py:576 extras/tables/tables.py:616 -#: extras/tables/tables.py:653 netbox/tables/tables.py:244 -#: templates/core/objectchange.html:58 templates/extras/eventrule.html:78 -#: templates/extras/journalentry.html:18 tenancy/tables/contacts.py:93 -#: vpn/tables/l2vpn.py:64 +#: netbox/core/tables/change_logging.py:37 netbox/core/tables/jobs.py:21 +#: netbox/extras/choices.py:41 netbox/extras/tables/tables.py:279 +#: 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/templates/core/objectchange.html:58 +#: netbox/templates/extras/eventrule.html:78 +#: netbox/templates/extras/journalentry.html:18 +#: netbox/tenancy/tables/contacts.py:93 netbox/vpn/tables/l2vpn.py:64 msgid "Object" msgstr "Nesne" -#: core/tables/change_logging.py:42 templates/core/objectchange.html:68 +#: netbox/core/tables/change_logging.py:42 +#: netbox/templates/core/objectchange.html:68 msgid "Request ID" msgstr "İstek Kimliği" -#: core/tables/config.py:21 users/forms/filtersets.py:44 users/tables.py:39 +#: netbox/core/tables/config.py:21 netbox/users/forms/filtersets.py:44 +#: netbox/users/tables.py:39 msgid "Is Active" msgstr "Aktif mi" -#: core/tables/data.py:50 templates/core/datafile.html:31 +#: netbox/core/tables/data.py:50 netbox/templates/core/datafile.html:31 msgid "Path" msgstr "Yol" -#: core/tables/data.py:54 templates/extras/inc/result_pending.html:7 +#: netbox/core/tables/data.py:54 +#: netbox/templates/extras/inc/result_pending.html:7 msgid "Last updated" msgstr "Son Güncelleme" -#: core/tables/jobs.py:10 core/tables/tasks.py:76 -#: dcim/tables/devicetypes.py:164 extras/tables/tables.py:216 -#: extras/tables/tables.py:460 netbox/tables/tables.py:189 -#: templates/dcim/virtualchassis_edit.html:52 utilities/forms/forms.py:73 -#: wireless/tables/wirelesslink.py:17 +#: 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/templates/dcim/virtualchassis_edit.html:52 +#: netbox/utilities/forms/forms.py:73 +#: netbox/wireless/tables/wirelesslink.py:17 msgid "ID" msgstr "KİMLİK" -#: core/tables/jobs.py:35 +#: netbox/core/tables/jobs.py:35 msgid "Interval" msgstr "Aralık" -#: core/tables/plugins.py:14 templates/vpn/ipsecprofile.html:44 -#: vpn/forms/bulk_edit.py:141 vpn/forms/bulk_import.py:172 -#: vpn/tables/crypto.py:61 +#: netbox/core/tables/plugins.py:14 netbox/templates/vpn/ipsecprofile.html:44 +#: netbox/vpn/forms/bulk_edit.py:141 netbox/vpn/forms/bulk_import.py:172 +#: netbox/vpn/tables/crypto.py:61 msgid "Version" msgstr "Versiyon" -#: core/tables/plugins.py:19 templates/core/datafile.html:38 +#: netbox/core/tables/plugins.py:19 netbox/templates/core/datafile.html:38 msgid "Last Updated" msgstr "Son Güncelleme" -#: core/tables/plugins.py:23 +#: netbox/core/tables/plugins.py:23 msgid "Minimum NetBox Version" msgstr "Minimum NetBox Sürümü" -#: core/tables/plugins.py:27 +#: netbox/core/tables/plugins.py:27 msgid "Maximum NetBox Version" msgstr "Maksimum NetBox Sürümü" -#: core/tables/plugins.py:31 core/tables/plugins.py:74 +#: netbox/core/tables/plugins.py:31 netbox/core/tables/plugins.py:74 msgid "No plugin data found" msgstr "Eklenti verisi bulunamadı" -#: core/tables/plugins.py:48 templates/core/plugin.html:62 +#: netbox/core/tables/plugins.py:48 netbox/templates/core/plugin.html:62 msgid "Author" msgstr "Yazar" -#: core/tables/plugins.py:54 +#: netbox/core/tables/plugins.py:54 msgid "Installed" msgstr "Kurulmuş" -#: core/tables/plugins.py:57 templates/core/plugin.html:84 +#: netbox/core/tables/plugins.py:57 netbox/templates/core/plugin.html:84 msgid "Certified" msgstr "Sertifikalı" -#: core/tables/plugins.py:60 +#: netbox/core/tables/plugins.py:60 msgid "Published" msgstr "Yayınlandı" -#: core/tables/plugins.py:66 +#: netbox/core/tables/plugins.py:66 msgid "Installed Version" msgstr "Yüklü Sürüm" -#: core/tables/plugins.py:70 +#: netbox/core/tables/plugins.py:70 msgid "Latest Version" msgstr "Son Sürüm" -#: core/tables/tasks.py:18 +#: netbox/core/tables/tasks.py:18 msgid "Oldest Task" msgstr "En Eski Görev" -#: core/tables/tasks.py:42 templates/core/rq_worker_list.html:39 +#: netbox/core/tables/tasks.py:42 netbox/templates/core/rq_worker_list.html:39 msgid "Workers" msgstr "İşçiler" -#: core/tables/tasks.py:46 vpn/tables/tunnels.py:88 +#: netbox/core/tables/tasks.py:46 netbox/vpn/tables/tunnels.py:88 msgid "Host" msgstr "Ana bilgisayar" -#: core/tables/tasks.py:50 ipam/forms/filtersets.py:535 +#: netbox/core/tables/tasks.py:50 netbox/ipam/forms/filtersets.py:535 msgid "Port" msgstr "Port" -#: core/tables/tasks.py:54 +#: netbox/core/tables/tasks.py:54 msgid "DB" msgstr "DB" -#: core/tables/tasks.py:58 +#: netbox/core/tables/tasks.py:58 msgid "Scheduler PID" msgstr "Zamanlayıcı PID" -#: core/tables/tasks.py:62 +#: netbox/core/tables/tasks.py:62 msgid "No queues found" msgstr "Kuyruk bulunamadı" -#: core/tables/tasks.py:82 +#: netbox/core/tables/tasks.py:82 msgid "Enqueued" msgstr "Sıraya alındı" -#: core/tables/tasks.py:85 +#: netbox/core/tables/tasks.py:85 msgid "Ended" msgstr "Bitti" -#: core/tables/tasks.py:93 templates/core/rq_task.html:85 +#: netbox/core/tables/tasks.py:93 netbox/templates/core/rq_task.html:85 msgid "Callable" msgstr "Çağrılabilir" -#: core/tables/tasks.py:97 +#: netbox/core/tables/tasks.py:97 msgid "No tasks found" msgstr "Görev bulunamadı" -#: core/tables/tasks.py:118 templates/core/rq_worker.html:47 +#: netbox/core/tables/tasks.py:118 netbox/templates/core/rq_worker.html:47 msgid "State" msgstr "Eyalet" -#: core/tables/tasks.py:121 templates/core/rq_worker.html:51 +#: netbox/core/tables/tasks.py:121 netbox/templates/core/rq_worker.html:51 msgid "Birth" msgstr "Doğum" -#: core/tables/tasks.py:124 templates/core/rq_worker.html:59 +#: netbox/core/tables/tasks.py:124 netbox/templates/core/rq_worker.html:59 msgid "PID" msgstr "PID" -#: core/tables/tasks.py:128 +#: netbox/core/tables/tasks.py:128 msgid "No workers found" msgstr "İşçi bulunamadı" -#: core/views.py:90 +#: 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}" -#: core/views.py:319 +#: netbox/core/views.py:319 #, python-brace-format msgid "Restored configuration revision #{id}" msgstr "Geri yüklenen yapılandırma revizyonu #{id}" -#: core/views.py:412 core/views.py:455 core/views.py:531 +#: 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 "İş {job_id} bulunamadı" -#: core/views.py:463 +#: netbox/core/views.py:463 #, python-brace-format msgid "Job {id} has been deleted." msgstr "İş {id} silindi." -#: core/views.py:465 +#: netbox/core/views.py:465 #, python-brace-format msgid "Error deleting job {id}: {error}" msgstr "İş silinirken hata oluştu {id}: {error}" -#: core/views.py:478 core/views.py:496 +#: netbox/core/views.py:478 netbox/core/views.py:496 #, python-brace-format msgid "Job {id} not found." msgstr "İş {id} bulunamadı." -#: core/views.py:484 +#: netbox/core/views.py:484 #, python-brace-format msgid "Job {id} has been re-enqueued." msgstr "İş {id} yeniden sıraya alındı." -#: core/views.py:519 +#: netbox/core/views.py:519 #, python-brace-format msgid "Job {id} has been enqueued." msgstr "İş {id} sıraya alındı." -#: core/views.py:538 +#: netbox/core/views.py:538 #, python-brace-format msgid "Job {id} has been stopped." msgstr "İş {id} durduruldu." -#: core/views.py:540 +#: netbox/core/views.py:540 #, python-brace-format msgid "Failed to stop job {id}" msgstr "İş durdurulamadı {id}" -#: core/views.py:678 +#: netbox/core/views.py:674 msgid "Plugins catalog could not be loaded" msgstr "Eklentiler kataloğu yüklenemedi" -#: core/views.py:712 +#: netbox/core/views.py:708 #, python-brace-format msgid "Plugin {name} not found" msgstr "Eklenti {name} bulunamadı" -#: dcim/api/serializers_/devices.py:49 dcim/api/serializers_/devicetypes.py:25 +#: netbox/dcim/api/serializers_/devices.py:49 +#: netbox/dcim/api/serializers_/devicetypes.py:25 msgid "Position (U)" msgstr "Pozisyon (U)" -#: dcim/api/serializers_/racks.py:112 templates/dcim/rack.html:28 +#: netbox/dcim/api/serializers_/racks.py:112 +#: netbox/templates/dcim/rack.html:28 msgid "Facility ID" msgstr "Tesis Kimliği" -#: dcim/choices.py:21 virtualization/choices.py:21 +#: netbox/dcim/choices.py:21 netbox/virtualization/choices.py:21 msgid "Staging" msgstr "Sahneleme" -#: dcim/choices.py:23 dcim/choices.py:189 dcim/choices.py:240 -#: dcim/choices.py:1531 virtualization/choices.py:23 -#: virtualization/choices.py:48 +#: 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 msgid "Decommissioning" msgstr "Hizmetten çıkarma" -#: dcim/choices.py:24 +#: netbox/dcim/choices.py:24 msgid "Retired" msgstr "Emekli" -#: dcim/choices.py:65 +#: netbox/dcim/choices.py:65 msgid "2-post frame" msgstr "2 direkli çerçeve" -#: dcim/choices.py:66 +#: netbox/dcim/choices.py:66 msgid "4-post frame" msgstr "4 direkli çerçeve" -#: dcim/choices.py:67 +#: netbox/dcim/choices.py:67 msgid "4-post cabinet" msgstr "4 direkli dolap" -#: dcim/choices.py:68 +#: netbox/dcim/choices.py:68 msgid "Wall-mounted frame" msgstr "Duvara monte çerçeve" -#: dcim/choices.py:69 +#: netbox/dcim/choices.py:69 msgid "Wall-mounted frame (vertical)" msgstr "Duvara monte çerçeve (dikey)" -#: dcim/choices.py:70 +#: netbox/dcim/choices.py:70 msgid "Wall-mounted cabinet" msgstr "Duvara monte dolap" -#: dcim/choices.py:71 +#: netbox/dcim/choices.py:71 msgid "Wall-mounted cabinet (vertical)" msgstr "Duvara monte dolap (dikey)" -#: dcim/choices.py:83 dcim/choices.py:84 dcim/choices.py:85 dcim/choices.py:86 +#: netbox/dcim/choices.py:83 netbox/dcim/choices.py:84 +#: netbox/dcim/choices.py:85 netbox/dcim/choices.py:86 #, python-brace-format msgid "{n} inches" msgstr "{n} inç" -#: dcim/choices.py:100 ipam/choices.py:32 ipam/choices.py:50 -#: ipam/choices.py:70 ipam/choices.py:155 wireless/choices.py:26 +#: netbox/dcim/choices.py:100 netbox/ipam/choices.py:32 +#: netbox/ipam/choices.py:50 netbox/ipam/choices.py:70 +#: netbox/ipam/choices.py:155 netbox/wireless/choices.py:26 msgid "Reserved" msgstr "Rezerve edilmiş" -#: dcim/choices.py:101 templates/dcim/device.html:259 +#: netbox/dcim/choices.py:101 netbox/templates/dcim/device.html:259 msgid "Available" msgstr "Mevcut" -#: dcim/choices.py:104 ipam/choices.py:33 ipam/choices.py:51 -#: ipam/choices.py:71 ipam/choices.py:156 wireless/choices.py:28 +#: netbox/dcim/choices.py:104 netbox/ipam/choices.py:33 +#: netbox/ipam/choices.py:51 netbox/ipam/choices.py:71 +#: netbox/ipam/choices.py:156 netbox/wireless/choices.py:28 msgid "Deprecated" msgstr "Kullanımdan kaldırıldı" -#: dcim/choices.py:114 templates/dcim/inc/panels/racktype_dimensions.html:41 +#: netbox/dcim/choices.py:114 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:41 msgid "Millimeters" msgstr "Milimetre" -#: dcim/choices.py:115 dcim/choices.py:1553 +#: netbox/dcim/choices.py:115 netbox/dcim/choices.py:1555 msgid "Inches" msgstr "İnç" -#: dcim/choices.py:136 dcim/choices.py:207 dcim/choices.py:254 +#: netbox/dcim/choices.py:136 netbox/dcim/choices.py:207 +#: netbox/dcim/choices.py:254 msgid "Front to rear" msgstr "Önden arkaya" -#: dcim/choices.py:137 dcim/choices.py:208 dcim/choices.py:255 +#: netbox/dcim/choices.py:137 netbox/dcim/choices.py:208 +#: netbox/dcim/choices.py:255 msgid "Rear to front" msgstr "Arkadan öne" -#: dcim/choices.py:151 dcim/forms/bulk_edit.py:68 dcim/forms/bulk_edit.py:87 -#: dcim/forms/bulk_edit.py:173 dcim/forms/bulk_edit.py:1405 -#: dcim/forms/bulk_import.py:60 dcim/forms/bulk_import.py:74 -#: dcim/forms/bulk_import.py:137 dcim/forms/bulk_import.py:566 -#: dcim/forms/bulk_import.py:833 dcim/forms/bulk_import.py:1088 -#: dcim/forms/filtersets.py:234 dcim/forms/model_forms.py:74 -#: dcim/forms/model_forms.py:93 dcim/forms/model_forms.py:170 -#: dcim/forms/model_forms.py:1062 dcim/forms/model_forms.py:1502 -#: dcim/forms/object_import.py:176 dcim/tables/devices.py:656 -#: dcim/tables/devices.py:869 dcim/tables/devices.py:954 -#: extras/tables/tables.py:223 ipam/tables/fhrp.py:59 ipam/tables/ip.py:378 -#: ipam/tables/services.py:44 templates/dcim/interface.html:102 -#: templates/dcim/interface.html:309 templates/dcim/location.html:41 -#: templates/dcim/region.html:37 templates/dcim/sitegroup.html:37 -#: templates/ipam/service.html:28 templates/tenancy/contactgroup.html:29 -#: templates/tenancy/tenantgroup.html:37 -#: templates/virtualization/vminterface.html:39 -#: templates/wireless/wirelesslangroup.html:37 tenancy/forms/bulk_edit.py:27 -#: tenancy/forms/bulk_edit.py:61 tenancy/forms/bulk_import.py:24 -#: tenancy/forms/bulk_import.py:58 tenancy/forms/model_forms.py:25 -#: tenancy/forms/model_forms.py:68 virtualization/forms/bulk_edit.py:207 -#: virtualization/forms/bulk_import.py:151 -#: virtualization/tables/virtualmachines.py:162 wireless/forms/bulk_edit.py:24 -#: wireless/forms/bulk_import.py:21 wireless/forms/model_forms.py:21 +#: 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/templates/dcim/location.html:41 netbox/templates/dcim/region.html:37 +#: netbox/templates/dcim/sitegroup.html:37 +#: netbox/templates/ipam/service.html:28 +#: netbox/templates/tenancy/contactgroup.html:29 +#: netbox/templates/tenancy/tenantgroup.html:37 +#: netbox/templates/virtualization/vminterface.html:39 +#: netbox/templates/wireless/wirelesslangroup.html:37 +#: netbox/tenancy/forms/bulk_edit.py:27 netbox/tenancy/forms/bulk_edit.py:61 +#: netbox/tenancy/forms/bulk_import.py:24 +#: netbox/tenancy/forms/bulk_import.py:58 +#: netbox/tenancy/forms/model_forms.py:25 +#: netbox/tenancy/forms/model_forms.py:68 +#: netbox/virtualization/forms/bulk_edit.py:207 +#: netbox/virtualization/forms/bulk_import.py:151 +#: netbox/virtualization/tables/virtualmachines.py:162 +#: netbox/wireless/forms/bulk_edit.py:24 +#: netbox/wireless/forms/bulk_import.py:21 +#: netbox/wireless/forms/model_forms.py:21 msgid "Parent" msgstr "Ebeveyn" -#: dcim/choices.py:152 +#: netbox/dcim/choices.py:152 msgid "Child" msgstr "Çocuk" -#: dcim/choices.py:166 templates/dcim/device.html:340 -#: templates/dcim/rack.html:133 templates/dcim/rack_elevation_list.html:20 -#: templates/dcim/rackreservation.html:76 +#: netbox/dcim/choices.py:166 netbox/templates/dcim/device.html:340 +#: netbox/templates/dcim/rack.html:133 +#: netbox/templates/dcim/rack_elevation_list.html:20 +#: netbox/templates/dcim/rackreservation.html:76 msgid "Front" msgstr "Ön" -#: dcim/choices.py:167 templates/dcim/device.html:346 -#: templates/dcim/rack.html:139 templates/dcim/rack_elevation_list.html:21 -#: templates/dcim/rackreservation.html:82 +#: netbox/dcim/choices.py:167 netbox/templates/dcim/device.html:346 +#: netbox/templates/dcim/rack.html:139 +#: netbox/templates/dcim/rack_elevation_list.html:21 +#: netbox/templates/dcim/rackreservation.html:82 msgid "Rear" msgstr "Arka" -#: dcim/choices.py:186 dcim/choices.py:238 virtualization/choices.py:46 +#: netbox/dcim/choices.py:186 netbox/dcim/choices.py:238 +#: netbox/virtualization/choices.py:46 msgid "Staged" msgstr "Sahnelenmiş" -#: dcim/choices.py:188 +#: netbox/dcim/choices.py:188 msgid "Inventory" msgstr "Envanter" -#: dcim/choices.py:209 dcim/choices.py:256 +#: netbox/dcim/choices.py:209 netbox/dcim/choices.py:256 msgid "Left to right" msgstr "Soldan sağa" -#: dcim/choices.py:210 dcim/choices.py:257 +#: netbox/dcim/choices.py:210 netbox/dcim/choices.py:257 msgid "Right to left" msgstr "Sağdan sola" -#: dcim/choices.py:211 dcim/choices.py:258 +#: netbox/dcim/choices.py:211 netbox/dcim/choices.py:258 msgid "Side to rear" msgstr "Yandan arkaya" -#: dcim/choices.py:212 +#: netbox/dcim/choices.py:212 msgid "Rear to side" msgstr "Arkadan yana" -#: dcim/choices.py:213 +#: netbox/dcim/choices.py:213 msgid "Bottom to top" msgstr "Aşağıdan yukarıya" -#: dcim/choices.py:214 +#: netbox/dcim/choices.py:214 msgid "Top to bottom" msgstr "Yukarıdan aşağıya" -#: dcim/choices.py:215 dcim/choices.py:259 dcim/choices.py:1303 +#: netbox/dcim/choices.py:215 netbox/dcim/choices.py:259 +#: netbox/dcim/choices.py:1305 msgid "Passive" msgstr "Pasif" -#: dcim/choices.py:216 +#: netbox/dcim/choices.py:216 msgid "Mixed" msgstr "Karışık" -#: dcim/choices.py:484 dcim/choices.py:733 +#: netbox/dcim/choices.py:484 netbox/dcim/choices.py:733 msgid "NEMA (Non-locking)" msgstr "NEMA (Kilitsiz)" -#: dcim/choices.py:506 dcim/choices.py:755 +#: netbox/dcim/choices.py:506 netbox/dcim/choices.py:755 msgid "NEMA (Locking)" msgstr "NEMA (Kilitleme)" -#: dcim/choices.py:530 dcim/choices.py:779 +#: netbox/dcim/choices.py:530 netbox/dcim/choices.py:779 msgid "California Style" msgstr "Kaliforniya Tarzı" -#: dcim/choices.py:538 +#: netbox/dcim/choices.py:538 msgid "International/ITA" msgstr "Uluslararası/ITA" -#: dcim/choices.py:573 dcim/choices.py:814 +#: netbox/dcim/choices.py:573 netbox/dcim/choices.py:814 msgid "Proprietary" msgstr "Tescilli" -#: dcim/choices.py:581 dcim/choices.py:824 dcim/choices.py:1219 -#: dcim/choices.py:1221 dcim/choices.py:1447 dcim/choices.py:1449 -#: netbox/navigation/menu.py:200 +#: 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 msgid "Other" msgstr "Diğer" -#: dcim/choices.py:787 +#: netbox/dcim/choices.py:787 msgid "ITA/International" msgstr "ITA/Uluslararası" -#: dcim/choices.py:854 +#: netbox/dcim/choices.py:854 msgid "Physical" msgstr "Fiziksel" -#: dcim/choices.py:855 dcim/choices.py:1023 +#: netbox/dcim/choices.py:855 netbox/dcim/choices.py:1024 msgid "Virtual" msgstr "Sanal" -#: dcim/choices.py:856 dcim/choices.py:1097 dcim/forms/bulk_edit.py:1515 -#: dcim/forms/filtersets.py:1330 dcim/forms/model_forms.py:988 -#: dcim/forms/model_forms.py:1397 netbox/navigation/menu.py:140 -#: netbox/navigation/menu.py:144 templates/dcim/interface.html:210 +#: 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 msgid "Wireless" msgstr "Kablosuz" -#: dcim/choices.py:1021 +#: netbox/dcim/choices.py:1022 msgid "Virtual interfaces" msgstr "Sanal arayüzler" -#: dcim/choices.py:1024 dcim/forms/bulk_edit.py:1410 -#: dcim/forms/bulk_import.py:840 dcim/forms/model_forms.py:974 -#: dcim/tables/devices.py:660 templates/dcim/interface.html:106 -#: templates/virtualization/vminterface.html:43 -#: virtualization/forms/bulk_edit.py:212 -#: virtualization/forms/bulk_import.py:158 -#: virtualization/tables/virtualmachines.py:166 +#: 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/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 msgid "Bridge" msgstr "Köprü" -#: dcim/choices.py:1025 +#: netbox/dcim/choices.py:1026 msgid "Link Aggregation Group (LAG)" msgstr "Bağlantı Toplama Grubu (LAG)" -#: dcim/choices.py:1029 +#: netbox/dcim/choices.py:1030 msgid "Ethernet (fixed)" msgstr "Ethernet (sabit)" -#: dcim/choices.py:1044 +#: netbox/dcim/choices.py:1046 msgid "Ethernet (modular)" msgstr "Ethernet (modüler)" -#: dcim/choices.py:1081 +#: netbox/dcim/choices.py:1083 msgid "Ethernet (backplane)" msgstr "Ethernet (arka panel)" -#: dcim/choices.py:1113 +#: netbox/dcim/choices.py:1115 msgid "Cellular" msgstr "Hücresel" -#: dcim/choices.py:1165 dcim/forms/filtersets.py:383 -#: dcim/forms/filtersets.py:809 dcim/forms/filtersets.py:963 -#: dcim/forms/filtersets.py:1542 templates/dcim/inventoryitem.html:52 -#: templates/dcim/virtualchassis_edit.html:54 +#: 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/templates/dcim/virtualchassis_edit.html:54 msgid "Serial" msgstr "Seri" -#: dcim/choices.py:1180 +#: netbox/dcim/choices.py:1182 msgid "Coaxial" msgstr "Koaksiyel" -#: dcim/choices.py:1200 +#: netbox/dcim/choices.py:1202 msgid "Stacking" msgstr "İstifleme" -#: dcim/choices.py:1250 +#: netbox/dcim/choices.py:1252 msgid "Half" msgstr "Yarım" -#: dcim/choices.py:1251 +#: netbox/dcim/choices.py:1253 msgid "Full" msgstr "Dolu" -#: dcim/choices.py:1252 netbox/preferences.py:31 wireless/choices.py:480 +#: netbox/dcim/choices.py:1254 netbox/netbox/preferences.py:31 +#: netbox/wireless/choices.py:480 msgid "Auto" msgstr "Oto" -#: dcim/choices.py:1263 +#: netbox/dcim/choices.py:1265 msgid "Access" msgstr "Erişim" -#: dcim/choices.py:1264 ipam/tables/vlans.py:172 ipam/tables/vlans.py:217 -#: templates/dcim/inc/interface_vlans_table.html:7 +#: 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 "Etiketlenmiş" -#: dcim/choices.py:1265 +#: netbox/dcim/choices.py:1267 msgid "Tagged (All)" msgstr "Etiketlenmiş (Tümü)" -#: dcim/choices.py:1294 +#: netbox/dcim/choices.py:1296 msgid "IEEE Standard" msgstr "IEEE Standardı" -#: dcim/choices.py:1305 +#: netbox/dcim/choices.py:1307 msgid "Passive 24V (2-pair)" msgstr "Pasif 24V (2 çift)" -#: dcim/choices.py:1306 +#: netbox/dcim/choices.py:1308 msgid "Passive 24V (4-pair)" msgstr "Pasif 24V (4 çift)" -#: dcim/choices.py:1307 +#: netbox/dcim/choices.py:1309 msgid "Passive 48V (2-pair)" msgstr "Pasif 48V (2 çift)" -#: dcim/choices.py:1308 +#: netbox/dcim/choices.py:1310 msgid "Passive 48V (4-pair)" msgstr "Pasif 48V (4 çift)" -#: dcim/choices.py:1378 dcim/choices.py:1488 +#: netbox/dcim/choices.py:1380 netbox/dcim/choices.py:1490 msgid "Copper" msgstr "Bakır" -#: dcim/choices.py:1401 +#: netbox/dcim/choices.py:1403 msgid "Fiber Optic" msgstr "Fiber Optik" -#: dcim/choices.py:1434 dcim/choices.py:1517 +#: netbox/dcim/choices.py:1436 netbox/dcim/choices.py:1519 msgid "USB" msgstr "USB" -#: dcim/choices.py:1504 +#: netbox/dcim/choices.py:1506 msgid "Fiber" msgstr "Fiber" -#: dcim/choices.py:1529 dcim/forms/filtersets.py:1227 +#: netbox/dcim/choices.py:1531 netbox/dcim/forms/filtersets.py:1227 msgid "Connected" msgstr "Bağlı" -#: dcim/choices.py:1548 wireless/choices.py:497 +#: netbox/dcim/choices.py:1550 netbox/wireless/choices.py:497 msgid "Kilometers" msgstr "Kilometre" -#: dcim/choices.py:1549 templates/dcim/cable_trace.html:65 -#: wireless/choices.py:498 +#: netbox/dcim/choices.py:1551 netbox/templates/dcim/cable_trace.html:65 +#: netbox/wireless/choices.py:498 msgid "Meters" msgstr "Sayaçlar" -#: dcim/choices.py:1550 +#: netbox/dcim/choices.py:1552 msgid "Centimeters" msgstr "Santimetre" -#: dcim/choices.py:1551 wireless/choices.py:499 +#: netbox/dcim/choices.py:1553 netbox/wireless/choices.py:499 msgid "Miles" msgstr "Mil" -#: dcim/choices.py:1552 templates/dcim/cable_trace.html:66 -#: wireless/choices.py:500 +#: netbox/dcim/choices.py:1554 netbox/templates/dcim/cable_trace.html:66 +#: netbox/wireless/choices.py:500 msgid "Feet" msgstr "Feet" -#: dcim/choices.py:1568 templates/dcim/device.html:327 -#: templates/dcim/rack.html:107 +#: netbox/dcim/choices.py:1570 netbox/templates/dcim/device.html:327 +#: netbox/templates/dcim/rack.html:107 msgid "Kilograms" msgstr "Kilogram" -#: dcim/choices.py:1569 +#: netbox/dcim/choices.py:1571 msgid "Grams" msgstr "Gramlar" -#: dcim/choices.py:1570 templates/dcim/device.html:328 -#: templates/dcim/rack.html:108 +#: netbox/dcim/choices.py:1572 netbox/templates/dcim/device.html:328 +#: netbox/templates/dcim/rack.html:108 msgid "Pounds" msgstr "Pound'lar" -#: dcim/choices.py:1571 +#: netbox/dcim/choices.py:1573 msgid "Ounces" msgstr "ons" -#: dcim/choices.py:1618 +#: netbox/dcim/choices.py:1620 msgid "Redundant" msgstr "Yedekli" -#: dcim/choices.py:1639 +#: netbox/dcim/choices.py:1641 msgid "Single phase" msgstr "Tek fazlı" -#: dcim/choices.py:1640 +#: netbox/dcim/choices.py:1642 msgid "Three-phase" msgstr "Üç fazlı" -#: dcim/fields.py:45 +#: netbox/dcim/fields.py:45 #, python-brace-format msgid "Invalid MAC address format: {value}" msgstr "Geçersiz MAC adresi biçimi: {value}" -#: dcim/fields.py:71 +#: netbox/dcim/fields.py:71 #, python-brace-format msgid "Invalid WWN format: {value}" msgstr "Geçersiz WWN biçimi: {value}" -#: dcim/filtersets.py:86 +#: netbox/dcim/filtersets.py:86 msgid "Parent region (ID)" msgstr "Ana bölge (ID)" -#: dcim/filtersets.py:92 +#: netbox/dcim/filtersets.py:92 msgid "Parent region (slug)" msgstr "Ana bölge (kısa ad)" -#: dcim/filtersets.py:116 +#: netbox/dcim/filtersets.py:116 msgid "Parent site group (ID)" msgstr "Ana site grubu (ID)" -#: dcim/filtersets.py:122 +#: netbox/dcim/filtersets.py:122 msgid "Parent site group (slug)" msgstr "Ana site grubu (kısa ad)" -#: dcim/filtersets.py:164 extras/filtersets.py:364 ipam/filtersets.py:841 -#: ipam/filtersets.py:993 +#: netbox/dcim/filtersets.py:164 netbox/extras/filtersets.py:364 +#: netbox/ipam/filtersets.py:841 netbox/ipam/filtersets.py:993 msgid "Group (ID)" msgstr "Grup (ID)" -#: dcim/filtersets.py:170 +#: netbox/dcim/filtersets.py:170 msgid "Group (slug)" msgstr "Grup (kısa ad)" -#: dcim/filtersets.py:176 dcim/filtersets.py:181 +#: netbox/dcim/filtersets.py:176 netbox/dcim/filtersets.py:181 msgid "AS (ID)" msgstr "AS (ID)" -#: dcim/filtersets.py:246 +#: netbox/dcim/filtersets.py:246 msgid "Parent location (ID)" msgstr "Ana konum (ID)" -#: dcim/filtersets.py:252 +#: netbox/dcim/filtersets.py:252 msgid "Parent location (slug)" msgstr "Ana konum (kısa ad)" -#: dcim/filtersets.py:258 dcim/filtersets.py:369 dcim/filtersets.py:490 -#: dcim/filtersets.py:1057 dcim/filtersets.py:1404 dcim/filtersets.py:2182 +#: 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)" -#: dcim/filtersets.py:265 dcim/filtersets.py:376 dcim/filtersets.py:497 -#: dcim/filtersets.py:1410 extras/filtersets.py:542 +#: 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)" -#: dcim/filtersets.py:296 dcim/filtersets.py:381 dcim/filtersets.py:539 -#: dcim/filtersets.py:678 dcim/filtersets.py:882 dcim/filtersets.py:933 -#: dcim/filtersets.py:973 dcim/filtersets.py:1306 dcim/filtersets.py:1840 +#: 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 msgid "Manufacturer (ID)" msgstr "Üretici (ID)" -#: dcim/filtersets.py:302 dcim/filtersets.py:387 dcim/filtersets.py:545 -#: dcim/filtersets.py:684 dcim/filtersets.py:888 dcim/filtersets.py:939 -#: dcim/filtersets.py:979 dcim/filtersets.py:1312 dcim/filtersets.py:1846 +#: 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 msgid "Manufacturer (slug)" msgstr "Üretici (kısa ad)" -#: dcim/filtersets.py:393 +#: netbox/dcim/filtersets.py:393 msgid "Rack type (slug)" msgstr "Raf tipi (sümüklü böcek)" -#: dcim/filtersets.py:397 +#: netbox/dcim/filtersets.py:397 msgid "Rack type (ID)" msgstr "Raf tipi (ID)" -#: dcim/filtersets.py:411 dcim/filtersets.py:892 dcim/filtersets.py:994 -#: dcim/filtersets.py:1850 ipam/filtersets.py:381 ipam/filtersets.py:493 -#: ipam/filtersets.py:1003 virtualization/filtersets.py:210 +#: 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 msgid "Role (ID)" msgstr "Rol (ID)" -#: dcim/filtersets.py:417 dcim/filtersets.py:898 dcim/filtersets.py:1000 -#: dcim/filtersets.py:1856 extras/filtersets.py:558 ipam/filtersets.py:387 -#: ipam/filtersets.py:499 ipam/filtersets.py:1009 -#: virtualization/filtersets.py:216 +#: 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/virtualization/filtersets.py:216 msgid "Role (slug)" msgstr "Rol (kısa ad)" -#: dcim/filtersets.py:447 dcim/filtersets.py:1062 dcim/filtersets.py:1415 -#: dcim/filtersets.py:2244 +#: netbox/dcim/filtersets.py:447 netbox/dcim/filtersets.py:1062 +#: netbox/dcim/filtersets.py:1415 netbox/dcim/filtersets.py:2244 msgid "Rack (ID)" msgstr "Raf (ID)" -#: dcim/filtersets.py:507 extras/filtersets.py:293 extras/filtersets.py:337 -#: extras/filtersets.py:359 extras/filtersets.py:419 users/filtersets.py:113 -#: users/filtersets.py:180 +#: netbox/dcim/filtersets.py:507 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)" -#: dcim/filtersets.py:549 +#: netbox/dcim/filtersets.py:549 msgid "Default platform (ID)" msgstr "Varsayılan platform (ID)" -#: dcim/filtersets.py:555 +#: netbox/dcim/filtersets.py:555 msgid "Default platform (slug)" msgstr "Varsayılan platform (kısa ad)" -#: dcim/filtersets.py:558 dcim/forms/filtersets.py:517 +#: netbox/dcim/filtersets.py:558 netbox/dcim/forms/filtersets.py:517 msgid "Has a front image" msgstr "Ön resmi var" -#: dcim/filtersets.py:562 dcim/forms/filtersets.py:524 +#: netbox/dcim/filtersets.py:562 netbox/dcim/forms/filtersets.py:524 msgid "Has a rear image" msgstr "Arka görüntüsü var" -#: dcim/filtersets.py:567 dcim/filtersets.py:688 dcim/filtersets.py:1131 -#: dcim/forms/filtersets.py:531 dcim/forms/filtersets.py:627 -#: dcim/forms/filtersets.py:848 +#: 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 msgid "Has console ports" msgstr "Konsol bağlantı noktaları vardır" -#: dcim/filtersets.py:571 dcim/filtersets.py:692 dcim/filtersets.py:1135 -#: dcim/forms/filtersets.py:538 dcim/forms/filtersets.py:634 -#: dcim/forms/filtersets.py:855 +#: 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 msgid "Has console server ports" msgstr "Konsol sunucusu bağlantı noktaları vardır" -#: dcim/filtersets.py:575 dcim/filtersets.py:696 dcim/filtersets.py:1139 -#: dcim/forms/filtersets.py:545 dcim/forms/filtersets.py:641 -#: dcim/forms/filtersets.py:862 +#: 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 msgid "Has power ports" msgstr "Güç bağlantı noktaları vardır" -#: dcim/filtersets.py:579 dcim/filtersets.py:700 dcim/filtersets.py:1143 -#: dcim/forms/filtersets.py:552 dcim/forms/filtersets.py:648 -#: dcim/forms/filtersets.py:869 +#: 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 msgid "Has power outlets" msgstr "Elektrik prizleri var" -#: dcim/filtersets.py:583 dcim/filtersets.py:704 dcim/filtersets.py:1147 -#: dcim/forms/filtersets.py:559 dcim/forms/filtersets.py:655 -#: dcim/forms/filtersets.py:876 +#: 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 msgid "Has interfaces" msgstr "Arayüzleri vardır" -#: dcim/filtersets.py:587 dcim/filtersets.py:708 dcim/filtersets.py:1151 -#: dcim/forms/filtersets.py:566 dcim/forms/filtersets.py:662 -#: dcim/forms/filtersets.py:883 +#: 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 msgid "Has pass-through ports" msgstr "Geçiş bağlantı noktaları vardır" -#: dcim/filtersets.py:591 dcim/filtersets.py:1155 dcim/forms/filtersets.py:580 +#: netbox/dcim/filtersets.py:591 netbox/dcim/filtersets.py:1155 +#: netbox/dcim/forms/filtersets.py:580 msgid "Has module bays" msgstr "Modül yuvaları vardır" -#: dcim/filtersets.py:595 dcim/filtersets.py:1159 dcim/forms/filtersets.py:573 +#: netbox/dcim/filtersets.py:595 netbox/dcim/filtersets.py:1159 +#: netbox/dcim/forms/filtersets.py:573 msgid "Has device bays" msgstr "Cihaz yuvaları var" -#: dcim/filtersets.py:599 dcim/forms/filtersets.py:587 +#: netbox/dcim/filtersets.py:599 netbox/dcim/forms/filtersets.py:587 msgid "Has inventory items" msgstr "Envanter kalemleri var" -#: dcim/filtersets.py:756 dcim/filtersets.py:989 dcim/filtersets.py:1436 +#: netbox/dcim/filtersets.py:756 netbox/dcim/filtersets.py:989 +#: netbox/dcim/filtersets.py:1436 msgid "Device type (ID)" msgstr "Cihaz tipi (ID)" -#: dcim/filtersets.py:772 dcim/filtersets.py:1317 +#: netbox/dcim/filtersets.py:772 netbox/dcim/filtersets.py:1317 msgid "Module type (ID)" msgstr "Modül tipi (ID)" -#: dcim/filtersets.py:804 dcim/filtersets.py:1591 +#: netbox/dcim/filtersets.py:804 netbox/dcim/filtersets.py:1591 msgid "Power port (ID)" msgstr "Güç bağlantı noktası (ID)" -#: dcim/filtersets.py:878 dcim/filtersets.py:1836 +#: netbox/dcim/filtersets.py:878 netbox/dcim/filtersets.py:1836 msgid "Parent inventory item (ID)" msgstr "Ana envanter kalemi (ID)" -#: dcim/filtersets.py:921 dcim/filtersets.py:947 dcim/filtersets.py:1127 -#: virtualization/filtersets.py:238 +#: netbox/dcim/filtersets.py:921 netbox/dcim/filtersets.py:947 +#: netbox/dcim/filtersets.py:1127 netbox/virtualization/filtersets.py:238 msgid "Config template (ID)" msgstr "Yapılandırma şablonu (ID)" -#: dcim/filtersets.py:985 +#: netbox/dcim/filtersets.py:985 msgid "Device type (slug)" msgstr "Cihaz tipi (kısa ad)" -#: dcim/filtersets.py:1005 +#: netbox/dcim/filtersets.py:1005 msgid "Parent Device (ID)" msgstr "Ana Cihaz (ID)" -#: dcim/filtersets.py:1009 virtualization/filtersets.py:220 +#: netbox/dcim/filtersets.py:1009 netbox/virtualization/filtersets.py:220 msgid "Platform (ID)" msgstr "Platform (ID)" -#: dcim/filtersets.py:1015 extras/filtersets.py:569 -#: virtualization/filtersets.py:226 +#: netbox/dcim/filtersets.py:1015 netbox/extras/filtersets.py:569 +#: netbox/virtualization/filtersets.py:226 msgid "Platform (slug)" msgstr "Platform (kısa ad)" -#: dcim/filtersets.py:1051 dcim/filtersets.py:1399 dcim/filtersets.py:1934 -#: dcim/filtersets.py:2176 dcim/filtersets.py:2235 +#: 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 msgid "Site name (slug)" msgstr "Site adı (kısa ad)" -#: dcim/filtersets.py:1067 +#: netbox/dcim/filtersets.py:1067 msgid "Parent bay (ID)" msgstr "Ebeveyn bölmesi (ID)" -#: dcim/filtersets.py:1071 +#: netbox/dcim/filtersets.py:1071 msgid "VM cluster (ID)" msgstr "VM kümesi (ID)" -#: dcim/filtersets.py:1077 extras/filtersets.py:591 -#: virtualization/filtersets.py:136 +#: netbox/dcim/filtersets.py:1077 netbox/extras/filtersets.py:591 +#: netbox/virtualization/filtersets.py:136 msgid "Cluster group (slug)" msgstr "Küme grubu (kısa ad)" -#: dcim/filtersets.py:1082 virtualization/filtersets.py:130 +#: netbox/dcim/filtersets.py:1082 netbox/virtualization/filtersets.py:130 msgid "Cluster group (ID)" msgstr "Küme grubu (ID)" -#: dcim/filtersets.py:1088 +#: netbox/dcim/filtersets.py:1088 msgid "Device model (slug)" msgstr "Cihaz modeli (kısa ad)" -#: dcim/filtersets.py:1099 dcim/forms/bulk_edit.py:516 +#: netbox/dcim/filtersets.py:1099 netbox/dcim/forms/bulk_edit.py:522 msgid "Is full depth" msgstr "Tam derinlik mi" -#: dcim/filtersets.py:1103 dcim/forms/common.py:18 -#: dcim/forms/filtersets.py:818 dcim/forms/filtersets.py:1385 -#: dcim/models/device_components.py:518 virtualization/filtersets.py:230 -#: virtualization/filtersets.py:301 virtualization/forms/filtersets.py:172 -#: virtualization/forms/filtersets.py:223 +#: 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 msgid "MAC address" msgstr "MAC adresi" -#: dcim/filtersets.py:1110 dcim/filtersets.py:1274 -#: dcim/forms/filtersets.py:827 dcim/forms/filtersets.py:930 -#: virtualization/filtersets.py:234 virtualization/forms/filtersets.py:176 +#: 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 msgid "Has a primary IP" msgstr "Birincil IP'ye sahiptir" -#: dcim/filtersets.py:1114 +#: netbox/dcim/filtersets.py:1114 msgid "Has an out-of-band IP" msgstr "Bant dışı bir IP'ye sahiptir" -#: dcim/filtersets.py:1119 +#: netbox/dcim/filtersets.py:1119 msgid "Virtual chassis (ID)" msgstr "Sanal kasa (ID)" -#: dcim/filtersets.py:1123 +#: netbox/dcim/filtersets.py:1123 msgid "Is a virtual chassis member" msgstr "Sanal bir şasi üyesidir" -#: dcim/filtersets.py:1164 +#: netbox/dcim/filtersets.py:1164 msgid "OOB IP (ID)" msgstr "OOB İP (KİMLİĞİ)" -#: dcim/filtersets.py:1168 +#: netbox/dcim/filtersets.py:1168 msgid "Has virtual device context" msgstr "Sanal cihaz bağlamına sahiptir" -#: dcim/filtersets.py:1257 +#: netbox/dcim/filtersets.py:1257 msgid "VDC (ID)" msgstr "VDC (KİMLİK)" -#: dcim/filtersets.py:1262 +#: netbox/dcim/filtersets.py:1262 msgid "Device model" msgstr "Cihaz modeli" -#: dcim/filtersets.py:1267 ipam/filtersets.py:632 vpn/filtersets.py:102 -#: vpn/filtersets.py:401 +#: netbox/dcim/filtersets.py:1267 netbox/ipam/filtersets.py:632 +#: netbox/vpn/filtersets.py:102 netbox/vpn/filtersets.py:401 msgid "Interface (ID)" msgstr "Arayüz (ID)" -#: dcim/filtersets.py:1323 +#: netbox/dcim/filtersets.py:1323 msgid "Module type (model)" msgstr "Modül tipi (model)" -#: dcim/filtersets.py:1329 +#: netbox/dcim/filtersets.py:1329 msgid "Module bay (ID)" msgstr "Modül yuvası (ID)" -#: dcim/filtersets.py:1333 dcim/filtersets.py:1425 ipam/filtersets.py:611 -#: ipam/filtersets.py:851 ipam/filtersets.py:1115 -#: virtualization/filtersets.py:161 vpn/filtersets.py:379 +#: 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/vpn/filtersets.py:379 msgid "Device (ID)" msgstr "Cihaz (ID)" -#: dcim/filtersets.py:1421 +#: netbox/dcim/filtersets.py:1421 msgid "Rack (name)" msgstr "Raf (isim)" -#: dcim/filtersets.py:1431 ipam/filtersets.py:606 ipam/filtersets.py:846 -#: ipam/filtersets.py:1121 vpn/filtersets.py:374 +#: netbox/dcim/filtersets.py:1431 netbox/ipam/filtersets.py:606 +#: netbox/ipam/filtersets.py:846 netbox/ipam/filtersets.py:1121 +#: netbox/vpn/filtersets.py:374 msgid "Device (name)" msgstr "Cihaz (isim)" -#: dcim/filtersets.py:1442 +#: netbox/dcim/filtersets.py:1442 msgid "Device type (model)" msgstr "Cihaz tipi (model)" -#: dcim/filtersets.py:1447 +#: netbox/dcim/filtersets.py:1447 msgid "Device role (ID)" msgstr "Cihaz rolü (ID)" -#: dcim/filtersets.py:1453 +#: netbox/dcim/filtersets.py:1453 msgid "Device role (slug)" msgstr "Cihaz rolü (kısa ad)" -#: dcim/filtersets.py:1458 +#: netbox/dcim/filtersets.py:1458 msgid "Virtual Chassis (ID)" msgstr "Sanal Kasa (ID)" -#: dcim/filtersets.py:1464 dcim/forms/filtersets.py:109 -#: dcim/tables/devices.py:206 netbox/navigation/menu.py:79 -#: templates/dcim/device.html:120 templates/dcim/device_edit.html:93 -#: templates/dcim/virtualchassis.html:20 -#: templates/dcim/virtualchassis_add.html:8 -#: templates/dcim/virtualchassis_edit.html:24 +#: netbox/dcim/filtersets.py:1464 netbox/dcim/forms/filtersets.py:109 +#: netbox/dcim/tables/devices.py:206 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 +#: netbox/templates/dcim/virtualchassis_add.html:8 +#: netbox/templates/dcim/virtualchassis_edit.html:24 msgid "Virtual Chassis" msgstr "Sanal Şasi" -#: dcim/filtersets.py:1488 +#: netbox/dcim/filtersets.py:1488 msgid "Module (ID)" msgstr "Modül (ID)" -#: dcim/filtersets.py:1495 +#: netbox/dcim/filtersets.py:1495 msgid "Cable (ID)" msgstr "Kablo (ID)" -#: dcim/filtersets.py:1604 ipam/forms/bulk_import.py:189 -#: vpn/forms/bulk_import.py:308 +#: netbox/dcim/filtersets.py:1604 netbox/ipam/forms/bulk_import.py:189 +#: netbox/vpn/forms/bulk_import.py:308 msgid "Assigned VLAN" msgstr "Atanmış VLAN" -#: dcim/filtersets.py:1608 +#: netbox/dcim/filtersets.py:1608 msgid "Assigned VID" msgstr "Atanmış VID" -#: dcim/filtersets.py:1613 dcim/forms/bulk_edit.py:1489 -#: dcim/forms/bulk_import.py:891 dcim/forms/filtersets.py:1428 -#: dcim/forms/model_forms.py:1378 dcim/models/device_components.py:711 -#: dcim/tables/devices.py:626 ipam/filtersets.py:316 ipam/filtersets.py:327 -#: ipam/filtersets.py:483 ipam/filtersets.py:584 ipam/filtersets.py:595 -#: ipam/forms/bulk_edit.py:242 ipam/forms/bulk_edit.py:298 -#: ipam/forms/bulk_edit.py:340 ipam/forms/bulk_import.py:157 -#: ipam/forms/bulk_import.py:243 ipam/forms/bulk_import.py:279 -#: ipam/forms/filtersets.py:67 ipam/forms/filtersets.py:172 -#: ipam/forms/filtersets.py:309 ipam/forms/model_forms.py:62 -#: ipam/forms/model_forms.py:202 ipam/forms/model_forms.py:247 -#: ipam/forms/model_forms.py:300 ipam/forms/model_forms.py:431 -#: ipam/forms/model_forms.py:445 ipam/forms/model_forms.py:459 -#: ipam/models/ip.py:233 ipam/models/ip.py:512 ipam/models/ip.py:720 -#: ipam/models/vrfs.py:62 ipam/tables/ip.py:242 ipam/tables/ip.py:309 -#: ipam/tables/ip.py:360 ipam/tables/ip.py:450 -#: templates/dcim/interface.html:133 templates/ipam/ipaddress.html:18 -#: templates/ipam/iprange.html:40 templates/ipam/prefix.html:19 -#: templates/ipam/vrf.html:7 templates/ipam/vrf.html:13 -#: templates/virtualization/vminterface.html:47 -#: virtualization/forms/bulk_edit.py:261 -#: virtualization/forms/bulk_import.py:171 -#: virtualization/forms/filtersets.py:228 -#: virtualization/forms/model_forms.py:344 -#: virtualization/models/virtualmachines.py:355 -#: virtualization/tables/virtualmachines.py:143 +#: 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:316 +#: netbox/ipam/filtersets.py:327 netbox/ipam/filtersets.py:483 +#: netbox/ipam/filtersets.py:584 netbox/ipam/filtersets.py:595 +#: netbox/ipam/forms/bulk_edit.py: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/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 msgid "VRF" msgstr "VRF" -#: dcim/filtersets.py:1619 ipam/filtersets.py:322 ipam/filtersets.py:333 -#: ipam/filtersets.py:489 ipam/filtersets.py:590 ipam/filtersets.py:601 +#: 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 msgid "VRF (RD)" msgstr "VRF (RD)" -#: dcim/filtersets.py:1624 ipam/filtersets.py:1030 vpn/filtersets.py:342 +#: netbox/dcim/filtersets.py:1624 netbox/ipam/filtersets.py:1030 +#: netbox/vpn/filtersets.py:342 msgid "L2VPN (ID)" msgstr "L2VPN (KİMLİĞİ)" -#: dcim/filtersets.py:1630 dcim/forms/filtersets.py:1433 -#: dcim/tables/devices.py:570 ipam/filtersets.py:1036 -#: ipam/forms/filtersets.py:518 ipam/tables/vlans.py:137 -#: templates/dcim/interface.html:93 templates/ipam/vlan.html:66 -#: templates/vpn/l2vpntermination.html:12 -#: virtualization/forms/filtersets.py:233 vpn/forms/bulk_import.py:280 -#: vpn/forms/filtersets.py:246 vpn/forms/model_forms.py:409 -#: vpn/forms/model_forms.py:427 vpn/models/l2vpn.py:63 vpn/tables/l2vpn.py:55 +#: netbox/dcim/filtersets.py:1630 netbox/dcim/forms/filtersets.py:1433 +#: netbox/dcim/tables/devices.py:570 netbox/ipam/filtersets.py:1036 +#: 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 +#: netbox/virtualization/forms/filtersets.py:233 +#: netbox/vpn/forms/bulk_import.py:280 netbox/vpn/forms/filtersets.py:246 +#: netbox/vpn/forms/model_forms.py:409 netbox/vpn/forms/model_forms.py:427 +#: netbox/vpn/models/l2vpn.py:63 netbox/vpn/tables/l2vpn.py:55 msgid "L2VPN" msgstr "L2VPN" -#: dcim/filtersets.py:1662 +#: netbox/dcim/filtersets.py:1662 msgid "Virtual Chassis Interfaces for Device" msgstr "Cihaz için Sanal Şasi Arayüzleri" -#: dcim/filtersets.py:1667 +#: netbox/dcim/filtersets.py:1667 msgid "Virtual Chassis Interfaces for Device (ID)" msgstr "Cihaz için Sanal Şasi Arayüzleri (ID)" -#: dcim/filtersets.py:1671 +#: netbox/dcim/filtersets.py:1671 msgid "Kind of interface" msgstr "Arayüz türü" -#: dcim/filtersets.py:1676 virtualization/filtersets.py:293 +#: netbox/dcim/filtersets.py:1676 netbox/virtualization/filtersets.py:293 msgid "Parent interface (ID)" msgstr "Ebeveyn arabirimi (ID)" -#: dcim/filtersets.py:1681 virtualization/filtersets.py:298 +#: netbox/dcim/filtersets.py:1681 netbox/virtualization/filtersets.py:298 msgid "Bridged interface (ID)" msgstr "Köprülü arayüz (ID)" -#: dcim/filtersets.py:1686 +#: netbox/dcim/filtersets.py:1686 msgid "LAG interface (ID)" msgstr "LAG arabirimi (ID)" -#: dcim/filtersets.py:1713 dcim/filtersets.py:1725 -#: dcim/forms/filtersets.py:1345 dcim/forms/model_forms.py:1690 -#: templates/dcim/virtualdevicecontext.html:15 +#: netbox/dcim/filtersets.py:1713 netbox/dcim/filtersets.py:1725 +#: netbox/dcim/forms/filtersets.py:1345 netbox/dcim/forms/model_forms.py:1697 +#: netbox/templates/dcim/virtualdevicecontext.html:15 msgid "Virtual Device Context" msgstr "Sanal Cihaz Bağlamı" -#: dcim/filtersets.py:1719 +#: netbox/dcim/filtersets.py:1719 msgid "Virtual Device Context (Identifier)" msgstr "Sanal Cihaz Bağlamı (Tanımlayıcı)" -#: dcim/filtersets.py:1730 templates/wireless/wirelesslan.html:11 -#: wireless/forms/model_forms.py:53 +#: netbox/dcim/filtersets.py:1730 +#: netbox/templates/wireless/wirelesslan.html:11 +#: netbox/wireless/forms/model_forms.py:53 msgid "Wireless LAN" msgstr "Kablosuz LAN" -#: dcim/filtersets.py:1734 dcim/tables/devices.py:613 +#: netbox/dcim/filtersets.py:1734 netbox/dcim/tables/devices.py:613 msgid "Wireless link" msgstr "Kablosuz bağlantı" -#: dcim/filtersets.py:1803 +#: netbox/dcim/filtersets.py:1803 msgid "Parent module bay (ID)" msgstr "Ana modül yuvası (ID)" -#: dcim/filtersets.py:1808 +#: netbox/dcim/filtersets.py:1808 msgid "Installed module (ID)" msgstr "Yüklü modül (ID)" -#: dcim/filtersets.py:1819 +#: netbox/dcim/filtersets.py:1819 msgid "Installed device (ID)" msgstr "Yüklü cihaz (ID)" -#: dcim/filtersets.py:1825 +#: netbox/dcim/filtersets.py:1825 msgid "Installed device (name)" msgstr "Yüklü cihaz (isim)" -#: dcim/filtersets.py:1891 +#: netbox/dcim/filtersets.py:1891 msgid "Master (ID)" msgstr "Master (ID)" -#: dcim/filtersets.py:1897 +#: netbox/dcim/filtersets.py:1897 msgid "Master (name)" msgstr "Master (isim)" -#: dcim/filtersets.py:1939 tenancy/filtersets.py:245 +#: netbox/dcim/filtersets.py:1939 netbox/tenancy/filtersets.py:245 msgid "Tenant (ID)" msgstr "Kiracı (ID)" -#: dcim/filtersets.py:1945 extras/filtersets.py:618 tenancy/filtersets.py:251 +#: netbox/dcim/filtersets.py:1945 netbox/extras/filtersets.py:618 +#: netbox/tenancy/filtersets.py:251 msgid "Tenant (slug)" msgstr "Kiracı (kısa ad)" -#: dcim/filtersets.py:1981 dcim/forms/filtersets.py:1077 +#: netbox/dcim/filtersets.py:1981 netbox/dcim/forms/filtersets.py:1077 msgid "Unterminated" msgstr "Sonlandırılmamış" -#: dcim/filtersets.py:2239 +#: netbox/dcim/filtersets.py:2239 msgid "Power panel (ID)" msgstr "Güç paneli (ID)" -#: dcim/forms/bulk_create.py:40 extras/forms/filtersets.py:401 -#: extras/forms/model_forms.py:567 extras/forms/model_forms.py:619 -#: netbox/forms/base.py:86 netbox/forms/mixins.py:81 -#: netbox/tables/columns.py:478 -#: templates/circuits/inc/circuit_termination.html:32 -#: templates/generic/bulk_edit.html:65 templates/inc/panels/tags.html:5 -#: utilities/forms/fields/fields.py:81 +#: netbox/dcim/forms/bulk_create.py:40 netbox/extras/forms/filtersets.py: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/templates/circuits/inc/circuit_termination.html:32 +#: netbox/templates/generic/bulk_edit.html:65 +#: netbox/templates/inc/panels/tags.html:5 +#: netbox/utilities/forms/fields/fields.py:81 msgid "Tags" msgstr "Etiketler" -#: dcim/forms/bulk_create.py:112 dcim/forms/filtersets.py:1498 -#: dcim/forms/model_forms.py:488 dcim/forms/model_forms.py:546 -#: dcim/forms/object_create.py:197 dcim/forms/object_create.py:353 -#: dcim/tables/devices.py:165 dcim/tables/devices.py:707 -#: dcim/tables/devicetypes.py:246 templates/dcim/device.html:43 -#: templates/dcim/device.html:131 templates/dcim/modulebay.html:38 -#: templates/dcim/virtualchassis.html:66 -#: templates/dcim/virtualchassis_edit.html:55 +#: 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/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/templates/dcim/device.html:43 netbox/templates/dcim/device.html:131 +#: netbox/templates/dcim/modulebay.html:38 +#: netbox/templates/dcim/virtualchassis.html:66 +#: netbox/templates/dcim/virtualchassis_edit.html:55 msgid "Position" msgstr "Pozisyon" -#: dcim/forms/bulk_create.py:114 +#: netbox/dcim/forms/bulk_create.py:114 msgid "" "Alphanumeric ranges are supported. (Must match the number of names being " "created.)" @@ -3115,823 +3444,920 @@ msgstr "" "Alfasayısal aralıklar desteklenir. (Oluşturulan isim sayısıyla " "eşleşmelidir.)" -#: dcim/forms/bulk_edit.py:132 +#: netbox/dcim/forms/bulk_edit.py:133 msgid "Contact name" msgstr "İrtibat Kişisi Adı" -#: dcim/forms/bulk_edit.py:137 +#: netbox/dcim/forms/bulk_edit.py:138 msgid "Contact phone" msgstr "İletişim telefonu" -#: dcim/forms/bulk_edit.py:143 +#: netbox/dcim/forms/bulk_edit.py:144 msgid "Contact E-mail" msgstr "İletişim E-posta" -#: dcim/forms/bulk_edit.py:146 dcim/forms/bulk_import.py:123 -#: dcim/forms/model_forms.py:128 +#: netbox/dcim/forms/bulk_edit.py:147 netbox/dcim/forms/bulk_import.py:123 +#: netbox/dcim/forms/model_forms.py:128 msgid "Time zone" msgstr "Saat dilimi" -#: dcim/forms/bulk_edit.py:224 dcim/forms/bulk_edit.py:495 -#: dcim/forms/bulk_edit.py:559 dcim/forms/bulk_edit.py:632 -#: dcim/forms/bulk_edit.py:656 dcim/forms/bulk_edit.py:740 -#: dcim/forms/bulk_edit.py:1267 dcim/forms/bulk_edit.py:1660 -#: dcim/forms/bulk_import.py:182 dcim/forms/bulk_import.py:371 -#: dcim/forms/bulk_import.py:405 dcim/forms/bulk_import.py:450 -#: dcim/forms/bulk_import.py:486 dcim/forms/bulk_import.py:1082 -#: dcim/forms/filtersets.py:313 dcim/forms/filtersets.py:372 -#: dcim/forms/filtersets.py:494 dcim/forms/filtersets.py:619 -#: dcim/forms/filtersets.py:700 dcim/forms/filtersets.py:782 -#: dcim/forms/filtersets.py:947 dcim/forms/filtersets.py:1539 -#: dcim/forms/model_forms.py:207 dcim/forms/model_forms.py:337 -#: dcim/forms/model_forms.py:349 dcim/forms/model_forms.py:395 -#: dcim/forms/model_forms.py:436 dcim/forms/model_forms.py:1075 -#: dcim/forms/model_forms.py:1515 dcim/forms/object_import.py:187 -#: dcim/tables/devices.py:96 dcim/tables/devices.py:172 -#: dcim/tables/devices.py:940 dcim/tables/devicetypes.py:80 -#: dcim/tables/devicetypes.py:308 dcim/tables/modules.py:20 -#: dcim/tables/modules.py:60 dcim/tables/racks.py:58 dcim/tables/racks.py:132 -#: templates/dcim/devicetype.html:14 templates/dcim/inventoryitem.html:44 -#: templates/dcim/manufacturer.html:33 templates/dcim/modulebay.html:62 -#: templates/dcim/moduletype.html:25 templates/dcim/platform.html:37 -#: templates/dcim/racktype.html:16 +#: 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/tables/modules.py:60 +#: 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/templates/dcim/manufacturer.html:33 +#: netbox/templates/dcim/modulebay.html:62 +#: netbox/templates/dcim/moduletype.html:25 +#: netbox/templates/dcim/platform.html:37 +#: netbox/templates/dcim/racktype.html:16 msgid "Manufacturer" msgstr "Üretici" -#: dcim/forms/bulk_edit.py:229 dcim/forms/bulk_edit.py:372 -#: dcim/forms/bulk_import.py:191 dcim/forms/bulk_import.py:263 -#: dcim/forms/filtersets.py:255 -#: templates/dcim/inc/panels/racktype_dimensions.html:6 +#: 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/templates/dcim/inc/panels/racktype_dimensions.html:6 msgid "Form factor" msgstr "Form faktörü" -#: dcim/forms/bulk_edit.py:234 dcim/forms/bulk_edit.py:377 -#: dcim/forms/bulk_import.py:199 dcim/forms/bulk_import.py:266 -#: dcim/forms/filtersets.py:260 -#: templates/dcim/inc/panels/racktype_dimensions.html:10 +#: 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/templates/dcim/inc/panels/racktype_dimensions.html:10 msgid "Width" msgstr "Genişlik" -#: dcim/forms/bulk_edit.py:240 dcim/forms/bulk_edit.py:383 -#: templates/dcim/devicetype.html:37 +#: netbox/dcim/forms/bulk_edit.py:241 netbox/dcim/forms/bulk_edit.py:389 +#: netbox/dcim/forms/bulk_import.py:280 +#: netbox/templates/dcim/devicetype.html:37 msgid "Height (U)" msgstr "Yükseklik (U)" -#: dcim/forms/bulk_edit.py:249 dcim/forms/bulk_edit.py:388 -#: dcim/forms/filtersets.py:274 +#: netbox/dcim/forms/bulk_edit.py:250 netbox/dcim/forms/bulk_edit.py:394 +#: netbox/dcim/forms/filtersets.py:274 msgid "Descending units" msgstr "Azalan birimler" -#: dcim/forms/bulk_edit.py:252 dcim/forms/bulk_edit.py:391 +#: netbox/dcim/forms/bulk_edit.py:253 netbox/dcim/forms/bulk_edit.py:397 msgid "Outer width" msgstr "Dış genişlik" -#: dcim/forms/bulk_edit.py:257 dcim/forms/bulk_edit.py:396 +#: netbox/dcim/forms/bulk_edit.py:258 netbox/dcim/forms/bulk_edit.py:402 msgid "Outer depth" msgstr "Dış derinlik" -#: dcim/forms/bulk_edit.py:262 dcim/forms/bulk_edit.py:401 -#: dcim/forms/bulk_import.py:204 dcim/forms/bulk_import.py:271 +#: 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 msgid "Outer unit" msgstr "Dış ünite" -#: dcim/forms/bulk_edit.py:267 dcim/forms/bulk_edit.py:406 +#: netbox/dcim/forms/bulk_edit.py:268 netbox/dcim/forms/bulk_edit.py:412 msgid "Mounting depth" msgstr "Montaj derinliği" -#: dcim/forms/bulk_edit.py:272 dcim/forms/bulk_edit.py:299 -#: dcim/forms/bulk_edit.py:416 dcim/forms/bulk_edit.py:446 -#: dcim/forms/bulk_edit.py:529 dcim/forms/bulk_edit.py:552 -#: dcim/forms/bulk_edit.py:573 dcim/forms/bulk_edit.py:595 -#: dcim/forms/bulk_import.py:384 dcim/forms/bulk_import.py:416 -#: dcim/forms/filtersets.py:285 dcim/forms/filtersets.py:307 -#: dcim/forms/filtersets.py:327 dcim/forms/filtersets.py:401 -#: dcim/forms/filtersets.py:488 dcim/forms/filtersets.py:594 -#: dcim/forms/filtersets.py:613 dcim/forms/filtersets.py:674 -#: dcim/forms/model_forms.py:221 dcim/forms/model_forms.py:298 -#: dcim/tables/devicetypes.py:106 dcim/tables/modules.py:35 -#: dcim/tables/racks.py:74 dcim/tables/racks.py:172 -#: extras/forms/bulk_edit.py:53 extras/forms/bulk_edit.py:133 -#: extras/forms/bulk_edit.py:183 extras/forms/bulk_edit.py:288 -#: extras/forms/filtersets.py:64 extras/forms/filtersets.py:156 -#: extras/forms/filtersets.py:243 ipam/forms/bulk_edit.py:190 -#: templates/dcim/device.html:324 templates/dcim/devicetype.html:49 -#: templates/dcim/moduletype.html:45 templates/dcim/rack.html:81 -#: templates/dcim/racktype.html:41 templates/extras/configcontext.html:17 -#: templates/extras/customlink.html:25 templates/extras/savedfilter.html:33 -#: templates/ipam/role.html:30 +#: netbox/dcim/forms/bulk_edit.py: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/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/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/racktype.html:41 +#: netbox/templates/extras/configcontext.html:17 +#: netbox/templates/extras/customlink.html:25 +#: netbox/templates/extras/savedfilter.html:33 +#: netbox/templates/ipam/role.html:30 msgid "Weight" msgstr "Ağırlığı" -#: dcim/forms/bulk_edit.py:277 dcim/forms/bulk_edit.py:421 -#: dcim/forms/filtersets.py:290 +#: netbox/dcim/forms/bulk_edit.py:278 netbox/dcim/forms/bulk_edit.py:427 +#: netbox/dcim/forms/filtersets.py:290 msgid "Max weight" msgstr "Maksimum ağırlık" -#: dcim/forms/bulk_edit.py:282 dcim/forms/bulk_edit.py:426 -#: dcim/forms/bulk_edit.py:534 dcim/forms/bulk_edit.py:578 -#: dcim/forms/bulk_import.py:210 dcim/forms/bulk_import.py:283 -#: dcim/forms/bulk_import.py:389 dcim/forms/bulk_import.py:421 -#: dcim/forms/filtersets.py:295 dcim/forms/filtersets.py:598 -#: dcim/forms/filtersets.py:678 +#: 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 msgid "Weight unit" msgstr "Ağırlık birimi" -#: dcim/forms/bulk_edit.py:296 dcim/forms/filtersets.py:305 -#: dcim/forms/model_forms.py:217 dcim/forms/model_forms.py:256 -#: templates/dcim/rack.html:45 templates/dcim/racktype.html:13 +#: 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/templates/dcim/rack.html:45 netbox/templates/dcim/racktype.html:13 msgid "Rack Type" msgstr "Raf Tipi" -#: dcim/forms/bulk_edit.py:298 dcim/forms/model_forms.py:220 -#: dcim/forms/model_forms.py:297 +#: netbox/dcim/forms/bulk_edit.py:299 netbox/dcim/forms/model_forms.py:220 +#: netbox/dcim/forms/model_forms.py:297 msgid "Outer Dimensions" msgstr "Dış Ölçüler" -#: dcim/forms/bulk_edit.py:301 dcim/forms/model_forms.py:222 -#: dcim/forms/model_forms.py:299 templates/dcim/device.html:315 -#: templates/dcim/inc/panels/racktype_dimensions.html:3 +#: 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/templates/dcim/inc/panels/racktype_dimensions.html:3 msgid "Dimensions" msgstr "Ölçüler" -#: dcim/forms/bulk_edit.py:303 dcim/forms/filtersets.py:306 -#: dcim/forms/filtersets.py:326 dcim/forms/model_forms.py:224 -#: templates/dcim/inc/panels/racktype_numbering.html:3 +#: 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/templates/dcim/inc/panels/racktype_numbering.html:3 msgid "Numbering" msgstr "Numaralandırma" -#: dcim/forms/bulk_edit.py:357 dcim/forms/bulk_edit.py:1262 -#: dcim/forms/bulk_edit.py:1655 dcim/forms/bulk_import.py:253 -#: dcim/forms/bulk_import.py:1076 dcim/forms/filtersets.py:367 -#: dcim/forms/filtersets.py:777 dcim/forms/filtersets.py:1534 -#: dcim/forms/model_forms.py:251 dcim/forms/model_forms.py:1070 -#: dcim/forms/model_forms.py:1510 dcim/forms/object_import.py:181 -#: dcim/tables/devices.py:169 dcim/tables/devices.py:809 -#: dcim/tables/devices.py:937 dcim/tables/devicetypes.py:304 -#: dcim/tables/racks.py:129 extras/filtersets.py:552 -#: ipam/forms/bulk_edit.py:261 ipam/forms/bulk_edit.py:311 -#: ipam/forms/bulk_edit.py:359 ipam/forms/bulk_edit.py:511 -#: ipam/forms/bulk_import.py:197 ipam/forms/bulk_import.py:262 -#: ipam/forms/bulk_import.py:298 ipam/forms/bulk_import.py:455 -#: ipam/forms/filtersets.py:237 ipam/forms/filtersets.py:289 -#: ipam/forms/filtersets.py:360 ipam/forms/filtersets.py:509 -#: ipam/forms/model_forms.py:188 ipam/forms/model_forms.py:221 -#: ipam/forms/model_forms.py:250 ipam/forms/model_forms.py:643 -#: ipam/tables/ip.py:258 ipam/tables/ip.py:316 ipam/tables/ip.py:367 -#: ipam/tables/vlans.py:130 ipam/tables/vlans.py:235 -#: templates/dcim/device.html:182 -#: templates/dcim/inc/panels/inventory_items.html:20 -#: templates/dcim/interface.html:223 templates/dcim/inventoryitem.html:36 -#: templates/dcim/rack.html:49 templates/ipam/ipaddress.html:41 -#: templates/ipam/iprange.html:50 templates/ipam/prefix.html:77 -#: templates/ipam/role.html:19 templates/ipam/vlan.html:52 -#: templates/virtualization/virtualmachine.html:23 -#: templates/vpn/tunneltermination.html:17 -#: templates/wireless/inc/wirelesslink_interface.html:20 -#: tenancy/forms/bulk_edit.py:142 tenancy/forms/filtersets.py:107 -#: tenancy/forms/model_forms.py:137 tenancy/tables/contacts.py:102 -#: virtualization/forms/bulk_edit.py:145 -#: virtualization/forms/bulk_import.py:106 -#: virtualization/forms/filtersets.py:157 -#: virtualization/forms/model_forms.py:195 -#: virtualization/tables/virtualmachines.py:75 vpn/forms/bulk_edit.py:87 -#: vpn/forms/bulk_import.py:81 vpn/forms/filtersets.py:85 -#: vpn/forms/model_forms.py:78 vpn/forms/model_forms.py:113 -#: vpn/tables/tunnels.py:82 +#: netbox/dcim/forms/bulk_edit.py: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" -#: dcim/forms/bulk_edit.py:364 dcim/forms/bulk_edit.py:712 -#: dcim/forms/bulk_edit.py:764 templates/dcim/device.html:104 -#: templates/dcim/module.html:77 templates/dcim/modulebay.html:70 -#: templates/dcim/rack.html:57 templates/virtualization/virtualmachine.html:35 +#: netbox/dcim/forms/bulk_edit.py:363 netbox/dcim/forms/bulk_import.py:260 +#: netbox/dcim/forms/filtersets.py:380 +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/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ı" -#: dcim/forms/bulk_edit.py:367 dcim/forms/filtersets.py:387 -#: dcim/forms/filtersets.py:813 dcim/forms/filtersets.py:967 -#: dcim/forms/filtersets.py:1546 +#: 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 msgid "Asset tag" msgstr "Varlık etiketi" -#: dcim/forms/bulk_edit.py:411 dcim/forms/bulk_edit.py:524 -#: dcim/forms/bulk_edit.py:568 dcim/forms/bulk_edit.py:705 -#: dcim/forms/bulk_import.py:277 dcim/forms/bulk_import.py:410 -#: dcim/forms/bulk_import.py:580 dcim/forms/filtersets.py:280 -#: dcim/forms/filtersets.py:511 dcim/forms/filtersets.py:669 -#: dcim/forms/filtersets.py:804 templates/dcim/device.html:98 -#: templates/dcim/devicetype.html:65 templates/dcim/moduletype.html:41 -#: templates/dcim/rack.html:65 templates/dcim/racktype.html:28 +#: 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/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 "Hava akışı" -#: dcim/forms/bulk_edit.py:440 dcim/forms/bulk_edit.py:910 -#: dcim/forms/bulk_import.py:322 dcim/forms/bulk_import.py:325 -#: dcim/forms/bulk_import.py:553 dcim/forms/bulk_import.py:1358 -#: dcim/forms/bulk_import.py:1362 dcim/forms/filtersets.py:104 -#: dcim/forms/filtersets.py:324 dcim/forms/filtersets.py:405 -#: dcim/forms/filtersets.py:419 dcim/forms/filtersets.py:457 -#: dcim/forms/filtersets.py:772 dcim/forms/filtersets.py:1035 -#: dcim/forms/filtersets.py:1167 dcim/forms/model_forms.py:264 -#: dcim/forms/model_forms.py:306 dcim/forms/model_forms.py:479 -#: dcim/forms/model_forms.py:755 dcim/forms/object_create.py:400 -#: dcim/tables/devices.py:161 dcim/tables/power.py:70 dcim/tables/racks.py:217 -#: ipam/forms/filtersets.py:442 templates/dcim/device.html:30 -#: templates/dcim/inc/cable_termination.html:16 -#: templates/dcim/powerfeed.html:28 templates/dcim/rack.html:13 -#: templates/dcim/rack/base.html:4 templates/dcim/rackreservation.html:19 -#: templates/dcim/rackreservation.html:36 -#: virtualization/forms/model_forms.py:113 +#: netbox/dcim/forms/bulk_edit.py: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/templates/dcim/device.html:30 +#: netbox/templates/dcim/inc/cable_termination.html:16 +#: netbox/templates/dcim/powerfeed.html:28 netbox/templates/dcim/rack.html:13 +#: netbox/templates/dcim/rack/base.html:4 +#: netbox/templates/dcim/rackreservation.html:19 +#: netbox/templates/dcim/rackreservation.html:36 +#: netbox/virtualization/forms/model_forms.py:113 msgid "Rack" msgstr "Raf" -#: dcim/forms/bulk_edit.py:444 dcim/forms/bulk_edit.py:730 -#: dcim/forms/filtersets.py:325 dcim/forms/filtersets.py:398 -#: dcim/forms/filtersets.py:481 dcim/forms/filtersets.py:608 -#: dcim/forms/filtersets.py:721 dcim/forms/filtersets.py:942 -#: dcim/forms/model_forms.py:670 dcim/forms/model_forms.py:1580 -#: templates/dcim/device_edit.html:20 +#: 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/templates/dcim/device_edit.html:20 msgid "Hardware" msgstr "Donanım" -#: dcim/forms/bulk_edit.py:500 dcim/forms/bulk_import.py:377 -#: dcim/forms/filtersets.py:499 dcim/forms/model_forms.py:353 +#: 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 msgid "Default platform" msgstr "Varsayılan platform" -#: dcim/forms/bulk_edit.py:505 dcim/forms/bulk_edit.py:564 -#: dcim/forms/filtersets.py:502 dcim/forms/filtersets.py:622 +#: 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 msgid "Part number" msgstr "Parça numarası" -#: dcim/forms/bulk_edit.py:509 +#: netbox/dcim/forms/bulk_edit.py:515 msgid "U height" msgstr "U yüksekliği" -#: dcim/forms/bulk_edit.py:521 dcim/tables/devicetypes.py:102 +#: netbox/dcim/forms/bulk_edit.py:527 netbox/dcim/tables/devicetypes.py:102 msgid "Exclude from utilization" msgstr "Kullanımdan hariç tut" -#: dcim/forms/bulk_edit.py:550 dcim/forms/model_forms.py:368 -#: dcim/tables/devicetypes.py:77 templates/dcim/device.html:88 -#: templates/dcim/devicebay.html:52 templates/dcim/module.html:61 +#: 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/templates/dcim/devicebay.html:52 +#: netbox/templates/dcim/module.html:61 msgid "Device Type" msgstr "Cihaz Türü" -#: dcim/forms/bulk_edit.py:592 dcim/forms/model_forms.py:401 -#: dcim/tables/modules.py:17 dcim/tables/modules.py:65 -#: templates/dcim/module.html:65 templates/dcim/modulebay.html:66 -#: templates/dcim/moduletype.html:22 +#: 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/templates/dcim/module.html:65 +#: netbox/templates/dcim/modulebay.html:66 +#: netbox/templates/dcim/moduletype.html:22 msgid "Module Type" msgstr "Modül Türü" -#: dcim/forms/bulk_edit.py:596 dcim/forms/model_forms.py:371 -#: dcim/forms/model_forms.py:402 templates/dcim/devicetype.html:11 +#: netbox/dcim/forms/bulk_edit.py:602 netbox/dcim/forms/model_forms.py:371 +#: netbox/dcim/forms/model_forms.py:402 +#: netbox/templates/dcim/devicetype.html:11 msgid "Chassis" msgstr "Şasi" -#: dcim/forms/bulk_edit.py:610 dcim/models/devices.py:484 -#: dcim/tables/devices.py:67 +#: netbox/dcim/forms/bulk_edit.py:616 netbox/dcim/models/devices.py:484 +#: netbox/dcim/tables/devices.py:67 msgid "VM role" msgstr "VM rolü" -#: dcim/forms/bulk_edit.py:613 dcim/forms/bulk_edit.py:637 -#: dcim/forms/bulk_edit.py:720 dcim/forms/bulk_import.py:434 -#: dcim/forms/bulk_import.py:438 dcim/forms/bulk_import.py:457 -#: dcim/forms/bulk_import.py:461 dcim/forms/bulk_import.py:586 -#: dcim/forms/bulk_import.py:590 dcim/forms/filtersets.py:689 -#: dcim/forms/filtersets.py:705 dcim/forms/filtersets.py:823 -#: dcim/forms/model_forms.py:415 dcim/forms/model_forms.py:441 -#: dcim/forms/model_forms.py:555 virtualization/forms/bulk_import.py:132 -#: virtualization/forms/bulk_import.py:133 -#: virtualization/forms/filtersets.py:188 -#: virtualization/forms/model_forms.py:215 +#: 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 msgid "Config template" msgstr "Yapılandırma şablonu" -#: dcim/forms/bulk_edit.py:661 dcim/forms/bulk_edit.py:1061 -#: dcim/forms/bulk_import.py:492 dcim/forms/filtersets.py:114 -#: dcim/forms/model_forms.py:501 dcim/forms/model_forms.py:872 -#: dcim/forms/model_forms.py:889 extras/filtersets.py:547 +#: 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 msgid "Device type" msgstr "Cihaz tipi" -#: dcim/forms/bulk_edit.py:672 dcim/forms/bulk_import.py:473 -#: dcim/forms/filtersets.py:119 dcim/forms/model_forms.py:509 +#: 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 msgid "Device role" msgstr "Cihaz rolü" -#: dcim/forms/bulk_edit.py:695 dcim/forms/bulk_import.py:498 -#: dcim/forms/filtersets.py:796 dcim/forms/model_forms.py:451 -#: dcim/forms/model_forms.py:513 dcim/tables/devices.py:182 -#: extras/filtersets.py:563 templates/dcim/device.html:186 -#: templates/dcim/platform.html:26 -#: templates/virtualization/virtualmachine.html:27 -#: virtualization/forms/bulk_edit.py:160 -#: virtualization/forms/bulk_import.py:122 -#: virtualization/forms/filtersets.py:168 -#: virtualization/forms/model_forms.py:203 -#: virtualization/tables/virtualmachines.py:79 +#: 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/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 msgid "Platform" msgstr "Platform" -#: dcim/forms/bulk_edit.py:728 dcim/forms/bulk_edit.py:1281 -#: dcim/forms/bulk_edit.py:1650 dcim/forms/bulk_edit.py:1696 -#: dcim/forms/bulk_import.py:641 dcim/forms/bulk_import.py:703 -#: dcim/forms/bulk_import.py:729 dcim/forms/bulk_import.py:755 -#: dcim/forms/bulk_import.py:775 dcim/forms/bulk_import.py:828 -#: dcim/forms/bulk_import.py:946 dcim/forms/bulk_import.py:994 -#: dcim/forms/bulk_import.py:1011 dcim/forms/bulk_import.py:1023 -#: dcim/forms/bulk_import.py:1071 dcim/forms/bulk_import.py:1422 -#: dcim/forms/connections.py:24 dcim/forms/filtersets.py:131 -#: dcim/forms/filtersets.py:921 dcim/forms/filtersets.py:1051 -#: dcim/forms/filtersets.py:1242 dcim/forms/filtersets.py:1267 -#: dcim/forms/filtersets.py:1291 dcim/forms/filtersets.py:1311 -#: dcim/forms/filtersets.py:1334 dcim/forms/filtersets.py:1444 -#: dcim/forms/filtersets.py:1469 dcim/forms/filtersets.py:1493 -#: dcim/forms/filtersets.py:1511 dcim/forms/filtersets.py:1528 -#: dcim/forms/filtersets.py:1592 dcim/forms/filtersets.py:1616 -#: dcim/forms/filtersets.py:1640 dcim/forms/model_forms.py:633 -#: dcim/forms/model_forms.py:849 dcim/forms/model_forms.py:1208 -#: dcim/forms/model_forms.py:1664 dcim/forms/object_create.py:257 -#: dcim/tables/connections.py:22 dcim/tables/connections.py:41 -#: dcim/tables/connections.py:60 dcim/tables/devices.py:285 -#: dcim/tables/devices.py:371 dcim/tables/devices.py:412 -#: dcim/tables/devices.py:454 dcim/tables/devices.py:505 -#: dcim/tables/devices.py:597 dcim/tables/devices.py:697 -#: dcim/tables/devices.py:754 dcim/tables/devices.py:801 -#: dcim/tables/devices.py:861 dcim/tables/devices.py:930 -#: dcim/tables/devices.py:1057 dcim/tables/modules.py:52 -#: extras/forms/filtersets.py:321 ipam/forms/bulk_import.py:304 -#: ipam/forms/bulk_import.py:481 ipam/forms/filtersets.py:551 -#: ipam/forms/model_forms.py:319 ipam/forms/model_forms.py:679 -#: ipam/forms/model_forms.py:712 ipam/forms/model_forms.py:738 -#: ipam/tables/vlans.py:180 templates/dcim/consoleport.html:20 -#: templates/dcim/consoleserverport.html:20 templates/dcim/device.html:15 -#: templates/dcim/device.html:130 templates/dcim/device_edit.html:10 -#: templates/dcim/devicebay.html:20 templates/dcim/devicebay.html:48 -#: templates/dcim/frontport.html:20 templates/dcim/interface.html:30 -#: templates/dcim/interface.html:161 templates/dcim/inventoryitem.html:20 -#: templates/dcim/module.html:57 templates/dcim/modulebay.html:20 -#: templates/dcim/poweroutlet.html:20 templates/dcim/powerport.html:20 -#: templates/dcim/rearport.html:20 templates/dcim/virtualchassis.html:65 -#: templates/dcim/virtualchassis_edit.html:51 -#: templates/dcim/virtualdevicecontext.html:22 -#: templates/virtualization/virtualmachine.html:114 -#: templates/vpn/tunneltermination.html:23 -#: templates/wireless/inc/wirelesslink_interface.html:6 -#: virtualization/filtersets.py:167 virtualization/forms/bulk_edit.py:137 -#: virtualization/forms/bulk_import.py:99 -#: virtualization/forms/filtersets.py:128 -#: virtualization/forms/model_forms.py:185 -#: virtualization/tables/virtualmachines.py:71 vpn/choices.py:44 -#: vpn/forms/bulk_import.py:86 vpn/forms/bulk_import.py:283 -#: vpn/forms/filtersets.py:275 vpn/forms/model_forms.py:90 -#: vpn/forms/model_forms.py:125 vpn/forms/model_forms.py:236 -#: vpn/forms/model_forms.py:453 wireless/forms/model_forms.py:99 -#: wireless/forms/model_forms.py:141 wireless/tables/wirelesslan.py:75 -msgid "Device" -msgstr "Cihaz" - -#: dcim/forms/bulk_edit.py:731 templates/extras/dashboard/widget_config.html:7 -#: virtualization/forms/bulk_edit.py:191 -msgid "Configuration" -msgstr "Yapılandırma" - -#: dcim/forms/bulk_edit.py:745 dcim/forms/bulk_import.py:653 -#: dcim/forms/model_forms.py:647 dcim/forms/model_forms.py:897 -msgid "Module type" -msgstr "Modül tipi" - -#: dcim/forms/bulk_edit.py:799 dcim/forms/bulk_edit.py:984 -#: dcim/forms/bulk_edit.py:1003 dcim/forms/bulk_edit.py:1026 -#: dcim/forms/bulk_edit.py:1068 dcim/forms/bulk_edit.py:1112 -#: dcim/forms/bulk_edit.py:1163 dcim/forms/bulk_edit.py:1190 -#: dcim/forms/bulk_edit.py:1217 dcim/forms/bulk_edit.py:1235 -#: dcim/forms/bulk_edit.py:1253 dcim/forms/filtersets.py:67 -#: dcim/forms/object_create.py:46 templates/dcim/cable.html:32 -#: templates/dcim/consoleport.html:32 templates/dcim/consoleserverport.html:32 -#: templates/dcim/devicebay.html:28 templates/dcim/frontport.html:32 -#: templates/dcim/inc/panels/inventory_items.html:19 -#: templates/dcim/interface.html:42 templates/dcim/inventoryitem.html:32 -#: templates/dcim/modulebay.html:34 templates/dcim/poweroutlet.html:32 -#: templates/dcim/powerport.html:32 templates/dcim/rearport.html:32 -#: templates/extras/customfield.html:26 templates/generic/bulk_import.html:162 -msgid "Label" -msgstr "etiket" - -#: dcim/forms/bulk_edit.py:808 dcim/forms/filtersets.py:1068 -#: templates/dcim/cable.html:50 -msgid "Length" -msgstr "Uzunluk" - -#: dcim/forms/bulk_edit.py:813 dcim/forms/bulk_import.py:1226 -#: dcim/forms/bulk_import.py:1229 dcim/forms/filtersets.py:1072 -msgid "Length unit" -msgstr "Uzunluk birimi" - -#: dcim/forms/bulk_edit.py:837 templates/dcim/virtualchassis.html:23 -msgid "Domain" -msgstr "Alan adı" - -#: dcim/forms/bulk_edit.py:905 dcim/forms/bulk_import.py:1345 -#: dcim/forms/filtersets.py:1158 dcim/forms/model_forms.py:750 -msgid "Power panel" -msgstr "Güç paneli" - -#: dcim/forms/bulk_edit.py:927 dcim/forms/bulk_import.py:1381 -#: dcim/forms/filtersets.py:1180 templates/dcim/powerfeed.html:83 -msgid "Supply" -msgstr "Tedarik" - -#: dcim/forms/bulk_edit.py:933 dcim/forms/bulk_import.py:1386 -#: dcim/forms/filtersets.py:1185 templates/dcim/powerfeed.html:95 -msgid "Phase" -msgstr "Faz" - -#: dcim/forms/bulk_edit.py:939 dcim/forms/filtersets.py:1190 -#: templates/dcim/powerfeed.html:87 -msgid "Voltage" -msgstr "Gerilim" - -#: dcim/forms/bulk_edit.py:943 dcim/forms/filtersets.py:1194 -#: templates/dcim/powerfeed.html:91 -msgid "Amperage" -msgstr "Amper" - -#: dcim/forms/bulk_edit.py:947 dcim/forms/filtersets.py:1198 -msgid "Max utilization" -msgstr "Maksimum kullanım" - -#: dcim/forms/bulk_edit.py:1036 -msgid "Maximum draw" -msgstr "Maksimum çekiliş" - -#: dcim/forms/bulk_edit.py:1039 dcim/models/device_component_templates.py:282 -#: dcim/models/device_components.py:356 -msgid "Maximum power draw (watts)" -msgstr "Maksimum güç çekimi (watt)" - -#: dcim/forms/bulk_edit.py:1042 -msgid "Allocated draw" -msgstr "Tahsis edilen çekiliş" - -#: dcim/forms/bulk_edit.py:1045 dcim/models/device_component_templates.py:289 -#: dcim/models/device_components.py:363 -msgid "Allocated power draw (watts)" -msgstr "Tahsis edilen güç çekimi (watt)" - -#: dcim/forms/bulk_edit.py:1078 dcim/forms/bulk_import.py:786 -#: dcim/forms/model_forms.py:953 dcim/forms/model_forms.py:1278 -#: dcim/forms/model_forms.py:1567 dcim/forms/object_import.py:55 -msgid "Power port" -msgstr "Güç bağlantı noktası" - -#: dcim/forms/bulk_edit.py:1083 dcim/forms/bulk_import.py:793 -msgid "Feed leg" -msgstr "Besleme bacağı" - -#: dcim/forms/bulk_edit.py:1129 dcim/forms/bulk_edit.py:1440 -msgid "Management only" -msgstr "Yalnızca yönetim" - -#: dcim/forms/bulk_edit.py:1139 dcim/forms/bulk_edit.py:1446 -#: dcim/forms/bulk_import.py:876 dcim/forms/filtersets.py:1394 -#: dcim/forms/object_import.py:90 -#: dcim/models/device_component_templates.py:437 -#: dcim/models/device_components.py:670 -msgid "PoE mode" -msgstr "PoE modu" - -#: dcim/forms/bulk_edit.py:1145 dcim/forms/bulk_edit.py:1452 -#: dcim/forms/bulk_import.py:882 dcim/forms/filtersets.py:1399 -#: dcim/forms/object_import.py:95 -#: dcim/models/device_component_templates.py:443 -#: dcim/models/device_components.py:676 -msgid "PoE type" -msgstr "PoE tipi" - -#: dcim/forms/bulk_edit.py:1151 dcim/forms/filtersets.py:1404 -#: dcim/forms/object_import.py:100 -msgid "Wireless role" -msgstr "Kablosuz rolü" - -#: dcim/forms/bulk_edit.py:1288 dcim/forms/model_forms.py:669 -#: dcim/forms/model_forms.py:1223 dcim/tables/devices.py:313 -#: templates/dcim/consoleport.html:24 templates/dcim/consoleserverport.html:24 -#: templates/dcim/frontport.html:24 templates/dcim/interface.html:34 -#: templates/dcim/module.html:54 templates/dcim/modulebay.html:26 -#: templates/dcim/modulebay.html:58 templates/dcim/poweroutlet.html:24 -#: templates/dcim/powerport.html:24 templates/dcim/rearport.html:24 -msgid "Module" -msgstr "Modül" - -#: dcim/forms/bulk_edit.py:1420 dcim/tables/devices.py:665 -#: templates/dcim/interface.html:110 -msgid "LAG" -msgstr "GECİKME" - -#: dcim/forms/bulk_edit.py:1425 dcim/forms/model_forms.py:1305 -msgid "Virtual device contexts" -msgstr "Sanal cihaz bağlamları" - -#: dcim/forms/bulk_edit.py:1431 dcim/forms/bulk_import.py:714 -#: dcim/forms/bulk_import.py:740 dcim/forms/filtersets.py:1252 -#: dcim/forms/filtersets.py:1277 dcim/forms/filtersets.py:1358 -#: dcim/tables/devices.py:610 -#: templates/circuits/inc/circuit_termination_fields.html:67 -#: templates/dcim/consoleport.html:40 templates/dcim/consoleserverport.html:40 -msgid "Speed" -msgstr "Hız" - -#: dcim/forms/bulk_edit.py:1460 dcim/forms/bulk_import.py:885 -#: templates/vpn/ikepolicy.html:25 templates/vpn/ipsecprofile.html:21 -#: templates/vpn/ipsecprofile.html:48 virtualization/forms/bulk_edit.py:233 -#: virtualization/forms/bulk_import.py:165 vpn/forms/bulk_edit.py:146 -#: vpn/forms/bulk_edit.py:232 vpn/forms/bulk_import.py:176 -#: vpn/forms/bulk_import.py:234 vpn/forms/filtersets.py:135 -#: vpn/forms/filtersets.py:178 vpn/forms/filtersets.py:192 -#: vpn/tables/crypto.py:64 vpn/tables/crypto.py:162 -msgid "Mode" -msgstr "Modu" - -#: dcim/forms/bulk_edit.py:1468 dcim/forms/model_forms.py:1354 -#: ipam/forms/bulk_import.py:178 ipam/forms/filtersets.py:498 -#: ipam/models/vlans.py:84 virtualization/forms/bulk_edit.py:240 -#: virtualization/forms/model_forms.py:321 -msgid "VLAN group" -msgstr "VLAN grubu" - -#: dcim/forms/bulk_edit.py:1476 dcim/forms/model_forms.py:1360 -#: dcim/tables/devices.py:579 virtualization/forms/bulk_edit.py:248 -#: virtualization/forms/model_forms.py:326 -msgid "Untagged VLAN" -msgstr "Etiketsiz VLAN" - -#: dcim/forms/bulk_edit.py:1484 dcim/forms/model_forms.py:1369 -#: dcim/tables/devices.py:585 virtualization/forms/bulk_edit.py:256 -#: virtualization/forms/model_forms.py:335 -msgid "Tagged VLANs" -msgstr "Etiketli VLAN'lar" - -#: dcim/forms/bulk_edit.py:1494 dcim/forms/model_forms.py:1341 -msgid "Wireless LAN group" -msgstr "Kablosuz LAN grubu" - -#: dcim/forms/bulk_edit.py:1499 dcim/forms/model_forms.py:1346 -#: dcim/tables/devices.py:619 netbox/navigation/menu.py:146 -#: templates/dcim/interface.html:280 wireless/tables/wirelesslan.py:24 -msgid "Wireless LANs" -msgstr "Kablosuz LAN'lar" - -#: dcim/forms/bulk_edit.py:1508 dcim/forms/filtersets.py:1328 -#: dcim/forms/model_forms.py:1390 ipam/forms/bulk_edit.py:286 -#: ipam/forms/bulk_edit.py:378 ipam/forms/filtersets.py:169 -#: templates/dcim/interface.html:122 templates/ipam/prefix.html:95 -#: virtualization/forms/model_forms.py:349 -msgid "Addressing" -msgstr "Adresleme" - -#: dcim/forms/bulk_edit.py:1509 dcim/forms/filtersets.py:720 -#: dcim/forms/model_forms.py:1391 virtualization/forms/model_forms.py:350 -msgid "Operation" -msgstr "Operasyon" - -#: dcim/forms/bulk_edit.py:1510 dcim/forms/filtersets.py:1329 -#: dcim/forms/model_forms.py:987 dcim/forms/model_forms.py:1393 -msgid "PoE" -msgstr "PoE" - -#: dcim/forms/bulk_edit.py:1511 dcim/forms/model_forms.py:1392 -#: templates/dcim/interface.html:99 virtualization/forms/bulk_edit.py:267 -#: virtualization/forms/model_forms.py:351 -msgid "Related Interfaces" -msgstr "İlgili Arayüzler" - -#: dcim/forms/bulk_edit.py:1512 dcim/forms/model_forms.py:1394 -#: virtualization/forms/bulk_edit.py:268 -#: virtualization/forms/model_forms.py:352 -msgid "802.1Q Switching" -msgstr "802.1Q Anahtarlama" - -#: dcim/forms/bulk_edit.py:1574 dcim/forms/bulk_edit.py:1576 -msgid "Interface mode must be specified to assign VLANs" -msgstr "VLAN'ları atamak için arayüz modu belirtilmelidir" - -#: dcim/forms/bulk_edit.py:1581 dcim/forms/common.py:50 -msgid "An access interface cannot have tagged VLANs assigned." -msgstr "Bir erişim arabirimi VLAN'ları etiketlemiş olamaz." - -#: dcim/forms/bulk_import.py:64 -msgid "Name of parent region" -msgstr "Ana bölgenin adı" - -#: dcim/forms/bulk_import.py:78 -msgid "Name of parent site group" -msgstr "Üst site grubunun adı" - -#: dcim/forms/bulk_import.py:97 -msgid "Assigned region" -msgstr "Atanan bölge" - -#: dcim/forms/bulk_import.py:104 tenancy/forms/bulk_import.py:44 -#: tenancy/forms/bulk_import.py:85 wireless/forms/bulk_import.py:40 -msgid "Assigned group" -msgstr "Atanan grup" - -#: dcim/forms/bulk_import.py:123 -msgid "available options" -msgstr "mevcut seçenekler" - -#: dcim/forms/bulk_import.py:134 dcim/forms/bulk_import.py:543 -#: dcim/forms/bulk_import.py:1342 ipam/forms/bulk_import.py:175 -#: ipam/forms/bulk_import.py:433 virtualization/forms/bulk_import.py:63 -#: virtualization/forms/bulk_import.py:89 -msgid "Assigned site" -msgstr "Atanan site" - -#: dcim/forms/bulk_import.py:141 -msgid "Parent location" -msgstr "Ana konum" - -#: dcim/forms/bulk_import.py:143 -msgid "Location not found." -msgstr "Konum bulunamadı." - -#: dcim/forms/bulk_import.py:185 -msgid "The manufacturer of this rack type" -msgstr "Bu raf tipinin üreticisi" - -#: dcim/forms/bulk_import.py:196 -msgid "The lowest-numbered position in the rack" -msgstr "Raftaki en düşük numaralı konum" - -#: dcim/forms/bulk_import.py:201 dcim/forms/bulk_import.py:268 -msgid "Rail-to-rail width (in inches)" -msgstr "Ray-ray genişliği (inç cinsinden)" - -#: dcim/forms/bulk_import.py:207 dcim/forms/bulk_import.py:274 -msgid "Unit for outer dimensions" -msgstr "Dış boyutlar için birim" - -#: dcim/forms/bulk_import.py:213 dcim/forms/bulk_import.py:286 -msgid "Unit for rack weights" -msgstr "Raf ağırlıkları için ünite" - -#: dcim/forms/bulk_import.py:245 -msgid "Name of assigned tenant" -msgstr "Atanan kiracının adı" - -#: dcim/forms/bulk_import.py:257 -msgid "Name of assigned role" -msgstr "Atanan rolün adı" - -#: dcim/forms/bulk_import.py:280 dcim/forms/bulk_import.py:413 -#: dcim/forms/bulk_import.py:583 -msgid "Airflow direction" -msgstr "Hava akışı yönü" - -#: dcim/forms/bulk_import.py:312 -msgid "Parent site" -msgstr "Ana site" - -#: dcim/forms/bulk_import.py:319 dcim/forms/bulk_import.py:1355 -msgid "Rack's location (if any)" -msgstr "Rafın konumu (varsa)" - -#: dcim/forms/bulk_import.py:328 dcim/forms/model_forms.py:311 -#: dcim/tables/racks.py:222 templates/dcim/rackreservation.html:12 -#: templates/dcim/rackreservation.html:45 -msgid "Units" -msgstr "Birimler" - -#: dcim/forms/bulk_import.py:331 -msgid "Comma-separated list of individual unit numbers" -msgstr "Bireysel birim numaralarının virgülle ayrılmış listesi" - -#: dcim/forms/bulk_import.py:374 -msgid "The manufacturer which produces this device type" -msgstr "Bu cihaz tipini üreten üretici" - -#: dcim/forms/bulk_import.py:381 -msgid "The default platform for devices of this type (optional)" -msgstr "Bu tür cihazlar için varsayılan platform (isteğe bağlı)" - -#: dcim/forms/bulk_import.py:386 -msgid "Device weight" -msgstr "Cihaz ağırlığı" - -#: dcim/forms/bulk_import.py:392 -msgid "Unit for device weight" -msgstr "Cihaz ağırlığı için birim" - -#: dcim/forms/bulk_import.py:418 -msgid "Module weight" -msgstr "Modül ağırlığı" - -#: dcim/forms/bulk_import.py:424 -msgid "Unit for module weight" -msgstr "Modül ağırlığı için birim" - -#: dcim/forms/bulk_import.py:454 -msgid "Limit platform assignments to this manufacturer" -msgstr "Platform atamalarını bu üreticiye sınırlayın" - -#: dcim/forms/bulk_import.py:476 dcim/forms/bulk_import.py:1425 -#: tenancy/forms/bulk_import.py:106 -msgid "Assigned role" -msgstr "Atanan rol" - -#: dcim/forms/bulk_import.py:489 -msgid "Device type manufacturer" -msgstr "Cihaz tipi üreticisi" - -#: dcim/forms/bulk_import.py:495 -msgid "Device type model" -msgstr "Cihaz tipi modeli" - -#: dcim/forms/bulk_import.py:502 virtualization/forms/bulk_import.py:126 -msgid "Assigned platform" -msgstr "Atanan platform" - -#: dcim/forms/bulk_import.py:510 dcim/forms/bulk_import.py:514 -#: dcim/forms/model_forms.py:536 -msgid "Virtual chassis" -msgstr "Sanal şasi" - -#: dcim/forms/bulk_import.py:517 dcim/forms/filtersets.py:728 -#: dcim/forms/filtersets.py:898 dcim/forms/model_forms.py:522 -#: dcim/tables/devices.py:202 extras/filtersets.py:596 -#: extras/forms/filtersets.py:322 ipam/forms/filtersets.py:415 -#: ipam/forms/filtersets.py:447 templates/dcim/device.html:239 -#: templates/virtualization/cluster.html:10 -#: templates/virtualization/virtualmachine.html:92 -#: templates/virtualization/virtualmachine.html:101 -#: virtualization/filtersets.py:157 virtualization/filtersets.py:277 -#: virtualization/forms/bulk_edit.py:129 -#: virtualization/forms/bulk_import.py:92 -#: virtualization/forms/filtersets.py:99 -#: virtualization/forms/filtersets.py:123 -#: virtualization/forms/filtersets.py:204 -#: virtualization/forms/model_forms.py:79 -#: virtualization/forms/model_forms.py:176 -#: virtualization/tables/virtualmachines.py:67 +#: 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/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 msgid "Cluster" msgstr "Küme" -#: dcim/forms/bulk_import.py:521 +#: 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:52 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/templates/extras/dashboard/widget_config.html:7 +#: netbox/virtualization/forms/bulk_edit.py:191 +msgid "Configuration" +msgstr "Yapılandırma" + +#: netbox/dcim/forms/bulk_edit.py:746 netbox/netbox/navigation/menu.py:243 +#: 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 +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/object_create.py:46 netbox/templates/dcim/cable.html:32 +#: netbox/templates/dcim/consoleport.html:32 +#: netbox/templates/dcim/consoleserverport.html:32 +#: netbox/templates/dcim/devicebay.html:28 +#: netbox/templates/dcim/frontport.html:32 +#: netbox/templates/dcim/inc/panels/inventory_items.html:19 +#: netbox/templates/dcim/interface.html:42 +#: netbox/templates/dcim/inventoryitem.html:32 +#: netbox/templates/dcim/modulebay.html:34 +#: netbox/templates/dcim/poweroutlet.html:32 +#: netbox/templates/dcim/powerport.html:32 +#: netbox/templates/dcim/rearport.html:32 +#: netbox/templates/extras/customfield.html:26 +#: netbox/templates/generic/bulk_import.html:162 +msgid "Label" +msgstr "etiket" + +#: netbox/dcim/forms/bulk_edit.py:823 netbox/dcim/forms/filtersets.py:1068 +#: 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 +msgid "Length unit" +msgstr "Uzunluk birimi" + +#: netbox/dcim/forms/bulk_edit.py:852 +#: 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 +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/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/templates/dcim/powerfeed.html:95 +msgid "Phase" +msgstr "Faz" + +#: netbox/dcim/forms/bulk_edit.py:954 netbox/dcim/forms/filtersets.py:1190 +#: netbox/templates/dcim/powerfeed.html:87 +msgid "Voltage" +msgstr "Gerilim" + +#: netbox/dcim/forms/bulk_edit.py:958 netbox/dcim/forms/filtersets.py:1194 +#: netbox/templates/dcim/powerfeed.html:91 +msgid "Amperage" +msgstr "Amper" + +#: netbox/dcim/forms/bulk_edit.py:962 netbox/dcim/forms/filtersets.py:1198 +msgid "Max utilization" +msgstr "Maksimum kullanım" + +#: netbox/dcim/forms/bulk_edit.py:1051 +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 +msgid "Maximum power draw (watts)" +msgstr "Maksimum güç çekimi (watt)" + +#: netbox/dcim/forms/bulk_edit.py:1057 +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 +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 +msgid "Power port" +msgstr "Güç bağlantı noktası" + +#: netbox/dcim/forms/bulk_edit.py:1098 netbox/dcim/forms/bulk_import.py:815 +msgid "Feed leg" +msgstr "Besleme bacağı" + +#: netbox/dcim/forms/bulk_edit.py:1144 netbox/dcim/forms/bulk_edit.py:1462 +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/object_import.py:90 +#: netbox/dcim/models/device_component_templates.py:437 +#: netbox/dcim/models/device_components.py:670 +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/object_import.py:95 +#: netbox/dcim/models/device_component_templates.py:443 +#: netbox/dcim/models/device_components.py:676 +msgid "PoE type" +msgstr "PoE tipi" + +#: netbox/dcim/forms/bulk_edit.py:1166 netbox/dcim/forms/filtersets.py:1404 +#: 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/templates/dcim/consoleport.html:24 +#: netbox/templates/dcim/consoleserverport.html:24 +#: netbox/templates/dcim/frontport.html:24 +#: netbox/templates/dcim/interface.html:34 +#: netbox/templates/dcim/module.html:54 +#: netbox/templates/dcim/modulebay.html:26 +#: netbox/templates/dcim/modulebay.html:58 +#: netbox/templates/dcim/poweroutlet.html:24 +#: netbox/templates/dcim/powerport.html:24 +#: netbox/templates/dcim/rearport.html:24 +msgid "Module" +msgstr "Modül" + +#: netbox/dcim/forms/bulk_edit.py:1442 netbox/dcim/tables/devices.py:665 +#: netbox/templates/dcim/interface.html:110 +msgid "LAG" +msgstr "GECİKME" + +#: netbox/dcim/forms/bulk_edit.py:1447 netbox/dcim/forms/model_forms.py:1312 +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/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/templates/vpn/ikepolicy.html:25 +#: netbox/templates/vpn/ipsecprofile.html:21 +#: netbox/templates/vpn/ipsecprofile.html:48 +#: netbox/virtualization/forms/bulk_edit.py:233 +#: netbox/virtualization/forms/bulk_import.py:165 +#: netbox/vpn/forms/bulk_edit.py:146 netbox/vpn/forms/bulk_edit.py:232 +#: netbox/vpn/forms/bulk_import.py:176 netbox/vpn/forms/bulk_import.py:234 +#: netbox/vpn/forms/filtersets.py:135 netbox/vpn/forms/filtersets.py:178 +#: netbox/vpn/forms/filtersets.py:192 netbox/vpn/tables/crypto.py:64 +#: netbox/vpn/tables/crypto.py:162 +msgid "Mode" +msgstr "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 +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 +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 +msgid "Tagged VLANs" +msgstr "Etiketli VLAN'lar" + +#: netbox/dcim/forms/bulk_edit.py:1511 +msgid "Add tagged VLANs" +msgstr "" + +#: netbox/dcim/forms/bulk_edit.py:1520 +msgid "Remove tagged VLANs" +msgstr "" + +#: netbox/dcim/forms/bulk_edit.py:1536 netbox/dcim/forms/model_forms.py:1348 +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/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 +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 +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 +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 +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 +msgid "802.1Q Switching" +msgstr "802.1Q Anahtarlama" + +#: netbox/dcim/forms/bulk_edit.py:1558 +msgid "Add/Remove" +msgstr "" + +#: netbox/dcim/forms/bulk_edit.py:1617 netbox/dcim/forms/bulk_edit.py:1619 +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 +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 +msgid "Name of parent region" +msgstr "Ana bölgenin adı" + +#: netbox/dcim/forms/bulk_import.py:78 +msgid "Name of parent site group" +msgstr "Üst site grubunun adı" + +#: netbox/dcim/forms/bulk_import.py:97 +msgid "Assigned region" +msgstr "Atanan bölge" + +#: netbox/dcim/forms/bulk_import.py:104 netbox/tenancy/forms/bulk_import.py:44 +#: netbox/tenancy/forms/bulk_import.py:85 +#: netbox/wireless/forms/bulk_import.py:40 +msgid "Assigned group" +msgstr "Atanan grup" + +#: netbox/dcim/forms/bulk_import.py:123 +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 +msgid "Assigned site" +msgstr "Atanan site" + +#: netbox/dcim/forms/bulk_import.py:141 +msgid "Parent location" +msgstr "Ana konum" + +#: netbox/dcim/forms/bulk_import.py:143 +msgid "Location not found." +msgstr "Konum bulunamadı." + +#: netbox/dcim/forms/bulk_import.py:185 +msgid "The manufacturer of this rack type" +msgstr "Bu raf tipinin üreticisi" + +#: netbox/dcim/forms/bulk_import.py:196 +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 +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 +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 +msgid "Unit for rack weights" +msgstr "Raf ağırlıkları için ünite" + +#: netbox/dcim/forms/bulk_import.py:245 +msgid "Name of assigned tenant" +msgstr "Atanan kiracının adı" + +#: netbox/dcim/forms/bulk_import.py:257 +msgid "Name of assigned role" +msgstr "Atanan rolün adı" + +#: netbox/dcim/forms/bulk_import.py:264 +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 +msgid "Airflow direction" +msgstr "Hava akışı yönü" + +#: netbox/dcim/forms/bulk_import.py:324 +msgid "Width must be set if not specifying a rack type." +msgstr "" + +#: netbox/dcim/forms/bulk_import.py:326 +msgid "U height must be set if not specifying a rack type." +msgstr "" + +#: netbox/dcim/forms/bulk_import.py:334 +msgid "Parent site" +msgstr "Ana site" + +#: netbox/dcim/forms/bulk_import.py:341 netbox/dcim/forms/bulk_import.py:1377 +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/templates/dcim/rackreservation.html:12 +#: netbox/templates/dcim/rackreservation.html:45 +msgid "Units" +msgstr "Birimler" + +#: netbox/dcim/forms/bulk_import.py:353 +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 +msgid "The manufacturer which produces this device type" +msgstr "Bu cihaz tipini üreten üretici" + +#: netbox/dcim/forms/bulk_import.py:403 +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 +msgid "Device weight" +msgstr "Cihaz ağırlığı" + +#: netbox/dcim/forms/bulk_import.py:414 +msgid "Unit for device weight" +msgstr "Cihaz ağırlığı için birim" + +#: netbox/dcim/forms/bulk_import.py:440 +msgid "Module weight" +msgstr "Modül ağırlığı" + +#: netbox/dcim/forms/bulk_import.py:446 +msgid "Unit for module weight" +msgstr "Modül ağırlığı için birim" + +#: netbox/dcim/forms/bulk_import.py:476 +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/tenancy/forms/bulk_import.py:106 +msgid "Assigned role" +msgstr "Atanan rol" + +#: netbox/dcim/forms/bulk_import.py:511 +msgid "Device type manufacturer" +msgstr "Cihaz tipi üreticisi" + +#: netbox/dcim/forms/bulk_import.py:517 +msgid "Device type model" +msgstr "Cihaz tipi modeli" + +#: netbox/dcim/forms/bulk_import.py:524 +#: netbox/virtualization/forms/bulk_import.py:126 +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 +msgid "Virtual chassis" +msgstr "Sanal şasi" + +#: netbox/dcim/forms/bulk_import.py:543 msgid "Virtualization cluster" msgstr "Sanallaştırma kümesi" -#: dcim/forms/bulk_import.py:550 +#: netbox/dcim/forms/bulk_import.py:572 msgid "Assigned location (if any)" msgstr "Atanan konum (varsa)" -#: dcim/forms/bulk_import.py:557 +#: netbox/dcim/forms/bulk_import.py:579 msgid "Assigned rack (if any)" msgstr "Atanmış raf (varsa)" -#: dcim/forms/bulk_import.py:560 +#: netbox/dcim/forms/bulk_import.py:582 msgid "Face" msgstr "Yüz" -#: dcim/forms/bulk_import.py:563 +#: netbox/dcim/forms/bulk_import.py:585 msgid "Mounted rack face" msgstr "Monte edilmiş raf yüzü" -#: dcim/forms/bulk_import.py:570 +#: netbox/dcim/forms/bulk_import.py:592 msgid "Parent device (for child devices)" msgstr "Ana cihaz (alt cihazlar için)" -#: dcim/forms/bulk_import.py:573 +#: netbox/dcim/forms/bulk_import.py:595 msgid "Device bay" msgstr "Cihaz yuvası" -#: dcim/forms/bulk_import.py:577 +#: netbox/dcim/forms/bulk_import.py:599 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)" -#: dcim/forms/bulk_import.py:644 +#: netbox/dcim/forms/bulk_import.py:666 msgid "The device in which this module is installed" msgstr "Bu modülün kurulu olduğu cihaz" -#: dcim/forms/bulk_import.py:647 dcim/forms/model_forms.py:640 +#: netbox/dcim/forms/bulk_import.py:669 netbox/dcim/forms/model_forms.py:640 msgid "Module bay" msgstr "Modül yuvası" -#: dcim/forms/bulk_import.py:650 +#: netbox/dcim/forms/bulk_import.py:672 msgid "The module bay in which this module is installed" msgstr "Bu modülün kurulu olduğu modül yuvası" -#: dcim/forms/bulk_import.py:656 +#: netbox/dcim/forms/bulk_import.py:678 msgid "The type of module" msgstr "Modül türü" -#: dcim/forms/bulk_import.py:664 dcim/forms/model_forms.py:656 +#: netbox/dcim/forms/bulk_import.py:686 netbox/dcim/forms/model_forms.py:656 msgid "Replicate components" msgstr "Bileşenleri çoğaltın" -#: dcim/forms/bulk_import.py:666 +#: netbox/dcim/forms/bulk_import.py:688 msgid "" "Automatically populate components associated with this module type (enabled " "by default)" @@ -3939,264 +4365,271 @@ msgstr "" "Bu modül türüyle ilişkili bileşenleri otomatik olarak doldurun (varsayılan " "olarak etkindir)" -#: dcim/forms/bulk_import.py:669 dcim/forms/model_forms.py:662 +#: netbox/dcim/forms/bulk_import.py:691 netbox/dcim/forms/model_forms.py:662 msgid "Adopt components" msgstr "Bileşenleri benimseyin" -#: dcim/forms/bulk_import.py:671 dcim/forms/model_forms.py:665 +#: netbox/dcim/forms/bulk_import.py:693 netbox/dcim/forms/model_forms.py:665 msgid "Adopt already existing components" msgstr "Mevcut bileşenleri benimseyin" -#: dcim/forms/bulk_import.py:711 dcim/forms/bulk_import.py:737 -#: dcim/forms/bulk_import.py:763 +#: netbox/dcim/forms/bulk_import.py:733 netbox/dcim/forms/bulk_import.py:759 +#: netbox/dcim/forms/bulk_import.py:785 msgid "Port type" msgstr "Bağlantı noktası tipi" -#: dcim/forms/bulk_import.py:719 dcim/forms/bulk_import.py:745 +#: netbox/dcim/forms/bulk_import.py:741 netbox/dcim/forms/bulk_import.py:767 msgid "Port speed in bps" msgstr "Bps cinsinden bağlantı noktası hızı" -#: dcim/forms/bulk_import.py:783 +#: netbox/dcim/forms/bulk_import.py:805 msgid "Outlet type" msgstr "Çıkış tipi" -#: dcim/forms/bulk_import.py:790 +#: netbox/dcim/forms/bulk_import.py:812 msgid "Local power port which feeds this outlet" msgstr "Bu prizi besleyen yerel güç portu" -#: dcim/forms/bulk_import.py:796 +#: netbox/dcim/forms/bulk_import.py:818 msgid "Electrical phase (for three-phase circuits)" msgstr "Elektrik fazı (üç fazlı devreler için)" -#: dcim/forms/bulk_import.py:837 dcim/forms/model_forms.py:1316 -#: virtualization/forms/bulk_import.py:155 -#: virtualization/forms/model_forms.py:305 +#: 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 msgid "Parent interface" msgstr "Ebeveyn arayüzü" -#: dcim/forms/bulk_import.py:844 dcim/forms/model_forms.py:1324 -#: virtualization/forms/bulk_import.py:162 -#: virtualization/forms/model_forms.py:313 +#: 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 msgid "Bridged interface" msgstr "Köprülü arayüz" -#: dcim/forms/bulk_import.py:847 +#: netbox/dcim/forms/bulk_import.py:869 msgid "Lag" msgstr "Gecikme" -#: dcim/forms/bulk_import.py:851 +#: netbox/dcim/forms/bulk_import.py:873 msgid "Parent LAG interface" msgstr "Ebeveyn LAG arayüzü" -#: dcim/forms/bulk_import.py:854 +#: netbox/dcim/forms/bulk_import.py:876 msgid "Vdcs" msgstr "Vdcs" -#: dcim/forms/bulk_import.py:859 +#: netbox/dcim/forms/bulk_import.py:881 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:" -#: dcim/forms/bulk_import.py:865 +#: netbox/dcim/forms/bulk_import.py:887 msgid "Physical medium" msgstr "Fiziksel ortam" -#: dcim/forms/bulk_import.py:868 dcim/forms/filtersets.py:1365 +#: netbox/dcim/forms/bulk_import.py:890 netbox/dcim/forms/filtersets.py:1365 msgid "Duplex" msgstr "Dubleks" -#: dcim/forms/bulk_import.py:873 +#: netbox/dcim/forms/bulk_import.py:895 msgid "Poe mode" msgstr "Poe modu" -#: dcim/forms/bulk_import.py:879 +#: netbox/dcim/forms/bulk_import.py:901 msgid "Poe type" msgstr "Poe tipi" -#: dcim/forms/bulk_import.py:888 virtualization/forms/bulk_import.py:168 +#: netbox/dcim/forms/bulk_import.py:910 +#: netbox/virtualization/forms/bulk_import.py:168 msgid "IEEE 802.1Q operational mode (for L2 interfaces)" msgstr "IEEE 802.1Q çalışma modu (L2 arayüzleri için)" -#: dcim/forms/bulk_import.py:895 ipam/forms/bulk_import.py:161 -#: ipam/forms/bulk_import.py:247 ipam/forms/bulk_import.py:283 -#: ipam/forms/filtersets.py:201 ipam/forms/filtersets.py:277 -#: ipam/forms/filtersets.py:336 virtualization/forms/bulk_import.py:175 +#: netbox/dcim/forms/bulk_import.py: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 msgid "Assigned VRF" msgstr "Atanmış VRF" -#: dcim/forms/bulk_import.py:898 +#: netbox/dcim/forms/bulk_import.py:920 msgid "Rf role" msgstr "Rf rolü" -#: dcim/forms/bulk_import.py:901 +#: netbox/dcim/forms/bulk_import.py:923 msgid "Wireless role (AP/station)" msgstr "Kablosuz rolü (AP/istasyon)" -#: dcim/forms/bulk_import.py:937 +#: netbox/dcim/forms/bulk_import.py:959 #, python-brace-format msgid "VDC {vdc} is not assigned to device {device}" msgstr "VDC {vdc} cihaza atanmadı {device}" -#: dcim/forms/bulk_import.py:951 dcim/forms/model_forms.py:1000 -#: dcim/forms/model_forms.py:1575 dcim/forms/object_import.py:117 +#: 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 msgid "Rear port" msgstr "Arka bağlantı noktası" -#: dcim/forms/bulk_import.py:954 +#: netbox/dcim/forms/bulk_import.py:976 msgid "Corresponding rear port" msgstr "İlgili arka bağlantı noktası" -#: dcim/forms/bulk_import.py:959 dcim/forms/bulk_import.py:1000 -#: dcim/forms/bulk_import.py:1216 +#: netbox/dcim/forms/bulk_import.py:981 netbox/dcim/forms/bulk_import.py:1022 +#: netbox/dcim/forms/bulk_import.py:1238 msgid "Physical medium classification" msgstr "Fiziksel ortam sınıflandırması" -#: dcim/forms/bulk_import.py:1028 dcim/tables/devices.py:822 +#: netbox/dcim/forms/bulk_import.py:1050 netbox/dcim/tables/devices.py:822 msgid "Installed device" msgstr "Yüklü cihaz" -#: dcim/forms/bulk_import.py:1032 +#: netbox/dcim/forms/bulk_import.py:1054 msgid "Child device installed within this bay" msgstr "Bu bölmeye takılan çocuk cihazı" -#: dcim/forms/bulk_import.py:1034 +#: netbox/dcim/forms/bulk_import.py:1056 msgid "Child device not found." msgstr "Çocuk cihazı bulunamadı." -#: dcim/forms/bulk_import.py:1092 +#: netbox/dcim/forms/bulk_import.py:1114 msgid "Parent inventory item" msgstr "Ana envanter kalemi" -#: dcim/forms/bulk_import.py:1095 +#: netbox/dcim/forms/bulk_import.py:1117 msgid "Component type" msgstr "Bileşen tipi" -#: dcim/forms/bulk_import.py:1099 +#: netbox/dcim/forms/bulk_import.py:1121 msgid "Component Type" msgstr "Bileşen Türü" -#: dcim/forms/bulk_import.py:1102 +#: netbox/dcim/forms/bulk_import.py:1124 msgid "Compnent name" msgstr "Bileşen adı" -#: dcim/forms/bulk_import.py:1104 +#: netbox/dcim/forms/bulk_import.py:1126 msgid "Component Name" msgstr "Bileşen Adı" -#: dcim/forms/bulk_import.py:1146 +#: netbox/dcim/forms/bulk_import.py:1168 #, python-brace-format msgid "Component not found: {device} - {component_name}" msgstr "Bileşen bulunamadı: {device} - {component_name}" -#: dcim/forms/bulk_import.py:1171 +#: netbox/dcim/forms/bulk_import.py:1193 msgid "Side A device" msgstr "A Tarafı Cihazı" -#: dcim/forms/bulk_import.py:1174 dcim/forms/bulk_import.py:1192 +#: netbox/dcim/forms/bulk_import.py:1196 netbox/dcim/forms/bulk_import.py:1214 msgid "Device name" msgstr "Cihaz adı" -#: dcim/forms/bulk_import.py:1177 +#: netbox/dcim/forms/bulk_import.py:1199 msgid "Side A type" msgstr "Taraf A tipi" -#: dcim/forms/bulk_import.py:1180 dcim/forms/bulk_import.py:1198 +#: netbox/dcim/forms/bulk_import.py:1202 netbox/dcim/forms/bulk_import.py:1220 msgid "Termination type" msgstr "Sonlandırma türü" -#: dcim/forms/bulk_import.py:1183 +#: netbox/dcim/forms/bulk_import.py:1205 msgid "Side A name" msgstr "A Tarafı adı" -#: dcim/forms/bulk_import.py:1184 dcim/forms/bulk_import.py:1202 +#: netbox/dcim/forms/bulk_import.py:1206 netbox/dcim/forms/bulk_import.py:1224 msgid "Termination name" msgstr "Fesih adı" -#: dcim/forms/bulk_import.py:1189 +#: netbox/dcim/forms/bulk_import.py:1211 msgid "Side B device" msgstr "B tarafı cihazı" -#: dcim/forms/bulk_import.py:1195 +#: netbox/dcim/forms/bulk_import.py:1217 msgid "Side B type" msgstr "Taraf B tipi" -#: dcim/forms/bulk_import.py:1201 +#: netbox/dcim/forms/bulk_import.py:1223 msgid "Side B name" msgstr "B tarafı adı" -#: dcim/forms/bulk_import.py:1210 wireless/forms/bulk_import.py:86 +#: netbox/dcim/forms/bulk_import.py:1232 +#: netbox/wireless/forms/bulk_import.py:86 msgid "Connection status" msgstr "Bağlantı durumu" -#: dcim/forms/bulk_import.py:1262 +#: netbox/dcim/forms/bulk_import.py:1284 #, python-brace-format msgid "Side {side_upper}: {device} {termination_object} is already connected" msgstr "Yan {side_upper}: {device} {termination_object} zaten bağlı" -#: dcim/forms/bulk_import.py:1268 +#: netbox/dcim/forms/bulk_import.py:1290 #, python-brace-format msgid "{side_upper} side termination not found: {device} {name}" msgstr "{side_upper} yan sonlandırma bulunamadı: {device} {name}" -#: dcim/forms/bulk_import.py:1293 dcim/forms/model_forms.py:785 -#: dcim/tables/devices.py:1027 templates/dcim/device.html:132 -#: templates/dcim/virtualchassis.html:27 templates/dcim/virtualchassis.html:67 +#: 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/templates/dcim/virtualchassis.html:27 +#: netbox/templates/dcim/virtualchassis.html:67 msgid "Master" msgstr "Usta" -#: dcim/forms/bulk_import.py:1297 +#: netbox/dcim/forms/bulk_import.py:1319 msgid "Master device" msgstr "Ana cihaz" -#: dcim/forms/bulk_import.py:1314 +#: netbox/dcim/forms/bulk_import.py:1336 msgid "Name of parent site" msgstr "Ana sitenin adı" -#: dcim/forms/bulk_import.py:1348 +#: netbox/dcim/forms/bulk_import.py:1370 msgid "Upstream power panel" msgstr "Yukarı akış güç paneli" -#: dcim/forms/bulk_import.py:1378 +#: netbox/dcim/forms/bulk_import.py:1400 msgid "Primary or redundant" msgstr "Birincil veya gereksiz" -#: dcim/forms/bulk_import.py:1383 +#: netbox/dcim/forms/bulk_import.py:1405 msgid "Supply type (AC/DC)" msgstr "Besleme tipi (AC/DC)" -#: dcim/forms/bulk_import.py:1388 +#: netbox/dcim/forms/bulk_import.py:1410 msgid "Single or three-phase" msgstr "Tek veya üç fazlı" -#: dcim/forms/bulk_import.py:1439 dcim/forms/model_forms.py:1670 -#: templates/dcim/device.html:190 templates/dcim/virtualdevicecontext.html:30 -#: templates/virtualization/virtualmachine.html:52 +#: netbox/dcim/forms/bulk_import.py:1461 netbox/dcim/forms/model_forms.py:1677 +#: netbox/templates/dcim/device.html:190 +#: netbox/templates/dcim/virtualdevicecontext.html:30 +#: netbox/templates/virtualization/virtualmachine.html:52 msgid "Primary IPv4" msgstr "Birincil IPv4" -#: dcim/forms/bulk_import.py:1443 +#: netbox/dcim/forms/bulk_import.py:1465 msgid "IPv4 address with mask, e.g. 1.2.3.4/24" msgstr "Maskeli IPv4 adresi, örn. 1.2.3.4/24" -#: dcim/forms/bulk_import.py:1446 dcim/forms/model_forms.py:1679 -#: templates/dcim/device.html:206 templates/dcim/virtualdevicecontext.html:41 -#: templates/virtualization/virtualmachine.html:68 +#: netbox/dcim/forms/bulk_import.py:1468 netbox/dcim/forms/model_forms.py:1686 +#: netbox/templates/dcim/device.html:206 +#: netbox/templates/dcim/virtualdevicecontext.html:41 +#: netbox/templates/virtualization/virtualmachine.html:68 msgid "Primary IPv6" msgstr "Birincil IPv6" -#: dcim/forms/bulk_import.py:1450 +#: netbox/dcim/forms/bulk_import.py:1472 msgid "IPv6 address with prefix length, e.g. 2001:db8::1/64" msgstr "Önek uzunluğuna sahip IPv6 adresi, örn. 2001:db8: :1/64" -#: dcim/forms/common.py:24 dcim/models/device_components.py:527 -#: templates/dcim/interface.html:57 -#: templates/virtualization/vminterface.html:55 -#: virtualization/forms/bulk_edit.py:225 +#: netbox/dcim/forms/common.py:24 netbox/dcim/models/device_components.py:527 +#: netbox/templates/dcim/interface.html:57 +#: netbox/templates/virtualization/vminterface.html:55 +#: netbox/virtualization/forms/bulk_edit.py:225 msgid "MTU" msgstr "MTU" -#: dcim/forms/common.py:65 +#: netbox/dcim/forms/common.py:65 #, python-brace-format msgid "" "The tagged VLANs ({vlans}) must belong to the same site as the interface's " @@ -4205,7 +4638,7 @@ msgstr "" "Etiketli VLAN'lar ({vlans}) arayüzün ana cihazı/sanal makinesiyle aynı " "siteye ait olmalı veya global olmalıdır" -#: dcim/forms/common.py:126 +#: netbox/dcim/forms/common.py:126 msgid "" "Cannot install module with placeholder values in a module bay with no " "position defined." @@ -4213,7 +4646,7 @@ msgstr "" "Konum tanımlanmamış bir modül yuvasına yer tutucu değerleri olan modül " "yüklenemiyor." -#: dcim/forms/common.py:131 +#: netbox/dcim/forms/common.py:131 #, python-brace-format msgid "" "Cannot install module with placeholder values in a module bay tree {level} " @@ -4222,188 +4655,199 @@ 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." -#: dcim/forms/common.py:144 +#: netbox/dcim/forms/common.py:144 #, 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" -#: dcim/forms/common.py:153 +#: netbox/dcim/forms/common.py:153 #, python-brace-format msgid "A {model} named {name} already exists" msgstr "BİR {model} adlandırmak {name} zaten var" -#: dcim/forms/connections.py:49 dcim/forms/model_forms.py:738 -#: dcim/tables/power.py:66 templates/dcim/inc/cable_termination.html:37 -#: templates/dcim/powerfeed.html:24 templates/dcim/powerpanel.html:19 -#: templates/dcim/trace/powerpanel.html:4 +#: netbox/dcim/forms/connections.py:49 netbox/dcim/forms/model_forms.py:738 +#: netbox/dcim/tables/power.py:66 +#: netbox/templates/dcim/inc/cable_termination.html:37 +#: netbox/templates/dcim/powerfeed.html:24 +#: netbox/templates/dcim/powerpanel.html:19 +#: netbox/templates/dcim/trace/powerpanel.html:4 msgid "Power Panel" msgstr "Güç Paneli" -#: dcim/forms/connections.py:58 dcim/forms/model_forms.py:765 -#: templates/dcim/powerfeed.html:21 templates/dcim/powerport.html:80 +#: netbox/dcim/forms/connections.py:58 netbox/dcim/forms/model_forms.py:765 +#: netbox/templates/dcim/powerfeed.html:21 +#: netbox/templates/dcim/powerport.html:80 msgid "Power Feed" msgstr "Güç Beslemesi" -#: dcim/forms/connections.py:81 +#: netbox/dcim/forms/connections.py:81 msgid "Side" msgstr "Yan" -#: dcim/forms/filtersets.py:136 dcim/tables/devices.py:295 +#: netbox/dcim/forms/filtersets.py:136 netbox/dcim/tables/devices.py:295 msgid "Device Status" msgstr "Cihaz Durumu" -#: dcim/forms/filtersets.py:149 +#: netbox/dcim/forms/filtersets.py:149 msgid "Parent region" msgstr "Ana bölge" -#: dcim/forms/filtersets.py:163 tenancy/forms/bulk_import.py:28 -#: tenancy/forms/bulk_import.py:62 tenancy/forms/filtersets.py:33 -#: tenancy/forms/filtersets.py:62 wireless/forms/bulk_import.py:25 -#: wireless/forms/filtersets.py:25 +#: netbox/dcim/forms/filtersets.py:163 netbox/tenancy/forms/bulk_import.py:28 +#: netbox/tenancy/forms/bulk_import.py:62 +#: netbox/tenancy/forms/filtersets.py:33 netbox/tenancy/forms/filtersets.py:62 +#: netbox/wireless/forms/bulk_import.py:25 +#: netbox/wireless/forms/filtersets.py:25 msgid "Parent group" msgstr "Ebeveyn grubu" -#: dcim/forms/filtersets.py:242 templates/dcim/location.html:58 -#: templates/dcim/site.html:56 +#: netbox/dcim/forms/filtersets.py:242 netbox/templates/dcim/location.html:58 +#: netbox/templates/dcim/site.html:56 msgid "Facility" msgstr "Tesis" -#: dcim/forms/filtersets.py:380 -msgid "Rack type" -msgstr "Raf tipi" - -#: dcim/forms/filtersets.py:397 +#: netbox/dcim/forms/filtersets.py:397 msgid "Function" msgstr "Fonksiyon" -#: dcim/forms/filtersets.py:483 dcim/forms/model_forms.py:373 -#: templates/inc/panels/image_attachments.html:6 +#: netbox/dcim/forms/filtersets.py:483 netbox/dcim/forms/model_forms.py:373 +#: netbox/templates/inc/panels/image_attachments.html:6 msgid "Images" msgstr "Görüntüler" -#: dcim/forms/filtersets.py:486 dcim/forms/filtersets.py:611 -#: dcim/forms/filtersets.py:726 +#: netbox/dcim/forms/filtersets.py:486 netbox/dcim/forms/filtersets.py:611 +#: netbox/dcim/forms/filtersets.py:726 msgid "Components" msgstr "Bileşenleri" -#: dcim/forms/filtersets.py:506 +#: netbox/dcim/forms/filtersets.py:506 msgid "Subdevice role" msgstr "Alt aygıt rolü" -#: dcim/forms/filtersets.py:790 dcim/tables/racks.py:54 -#: templates/dcim/racktype.html:20 +#: netbox/dcim/forms/filtersets.py:790 netbox/dcim/tables/racks.py:54 +#: netbox/templates/dcim/racktype.html:20 msgid "Model" msgstr "Modeli" -#: dcim/forms/filtersets.py:834 +#: netbox/dcim/forms/filtersets.py:834 msgid "Has an OOB IP" msgstr "OOB IP'ye sahiptir" -#: dcim/forms/filtersets.py:841 +#: netbox/dcim/forms/filtersets.py:841 msgid "Virtual chassis member" msgstr "Sanal şasi elemanı" -#: dcim/forms/filtersets.py:890 +#: netbox/dcim/forms/filtersets.py:890 msgid "Has virtual device contexts" msgstr "Sanal cihaz bağlamlarına sahiptir" -#: dcim/forms/filtersets.py:903 extras/filtersets.py:585 -#: ipam/forms/filtersets.py:452 virtualization/forms/filtersets.py:112 +#: netbox/dcim/forms/filtersets.py:903 netbox/extras/filtersets.py:585 +#: netbox/ipam/forms/filtersets.py:452 +#: netbox/virtualization/forms/filtersets.py:112 msgid "Cluster group" msgstr "Küme grubu" -#: dcim/forms/filtersets.py:1210 +#: netbox/dcim/forms/filtersets.py:1210 msgid "Cabled" msgstr "Kablolu" -#: dcim/forms/filtersets.py:1217 +#: netbox/dcim/forms/filtersets.py:1217 msgid "Occupied" msgstr "işgal" -#: dcim/forms/filtersets.py:1244 dcim/forms/filtersets.py:1269 -#: dcim/forms/filtersets.py:1293 dcim/forms/filtersets.py:1313 -#: dcim/forms/filtersets.py:1336 dcim/tables/devices.py:364 -#: templates/dcim/consoleport.html:55 templates/dcim/consoleserverport.html:55 -#: templates/dcim/frontport.html:69 templates/dcim/interface.html:140 -#: templates/dcim/powerfeed.html:110 templates/dcim/poweroutlet.html:59 -#: templates/dcim/powerport.html:59 templates/dcim/rearport.html:65 +#: netbox/dcim/forms/filtersets.py: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/templates/dcim/consoleport.html:55 +#: netbox/templates/dcim/consoleserverport.html:55 +#: netbox/templates/dcim/frontport.html:69 +#: netbox/templates/dcim/interface.html:140 +#: netbox/templates/dcim/powerfeed.html:110 +#: netbox/templates/dcim/poweroutlet.html:59 +#: netbox/templates/dcim/powerport.html:59 +#: netbox/templates/dcim/rearport.html:65 msgid "Connection" msgstr "Bağlantı" -#: dcim/forms/filtersets.py:1348 extras/forms/bulk_edit.py:326 -#: extras/forms/bulk_import.py:247 extras/forms/filtersets.py:464 -#: extras/forms/model_forms.py:675 extras/tables/tables.py:579 -#: templates/extras/journalentry.html:30 +#: netbox/dcim/forms/filtersets.py:1348 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 "Tür" -#: dcim/forms/filtersets.py:1377 +#: netbox/dcim/forms/filtersets.py:1377 msgid "Mgmt only" msgstr "Sadece Mgmt" -#: dcim/forms/filtersets.py:1389 dcim/forms/model_forms.py:1383 -#: dcim/models/device_components.py:629 templates/dcim/interface.html:129 +#: 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 msgid "WWN" msgstr "WWN" -#: dcim/forms/filtersets.py:1409 +#: netbox/dcim/forms/filtersets.py:1409 msgid "Wireless channel" msgstr "Kablosuz kanal" -#: dcim/forms/filtersets.py:1413 +#: netbox/dcim/forms/filtersets.py:1413 msgid "Channel frequency (MHz)" msgstr "Kanal frekansı (MHz)" -#: dcim/forms/filtersets.py:1417 +#: netbox/dcim/forms/filtersets.py:1417 msgid "Channel width (MHz)" msgstr "Kanal genişliği (MHz)" -#: dcim/forms/filtersets.py:1421 templates/dcim/interface.html:85 +#: netbox/dcim/forms/filtersets.py:1421 +#: netbox/templates/dcim/interface.html:85 msgid "Transmit power (dBm)" msgstr "İletim gücü (dBm)" -#: dcim/forms/filtersets.py:1446 dcim/forms/filtersets.py:1471 -#: dcim/tables/devices.py:327 templates/dcim/cable.html:12 -#: templates/dcim/cable_trace.html:46 templates/dcim/frontport.html:77 -#: templates/dcim/htmx/cable_edit.html:50 -#: templates/dcim/inc/connection_endpoints.html:4 -#: templates/dcim/rearport.html:73 templates/dcim/trace/cable.html:7 +#: netbox/dcim/forms/filtersets.py:1446 netbox/dcim/forms/filtersets.py:1471 +#: netbox/dcim/tables/devices.py:327 netbox/templates/dcim/cable.html:12 +#: netbox/templates/dcim/cable_trace.html:46 +#: netbox/templates/dcim/frontport.html:77 +#: netbox/templates/dcim/htmx/cable_edit.html:50 +#: netbox/templates/dcim/inc/connection_endpoints.html:4 +#: netbox/templates/dcim/rearport.html:73 +#: netbox/templates/dcim/trace/cable.html:7 msgid "Cable" msgstr "Kablo" -#: dcim/forms/filtersets.py:1550 dcim/tables/devices.py:949 +#: netbox/dcim/forms/filtersets.py:1550 netbox/dcim/tables/devices.py:949 msgid "Discovered" msgstr "Keşfedildi" -#: dcim/forms/formsets.py:20 +#: netbox/dcim/forms/formsets.py:20 #, python-brace-format msgid "A virtual chassis member already exists in position {vc_position}." msgstr "Bir sanal kasa elemanı zaten yerinde var {vc_position}." -#: dcim/forms/model_forms.py:140 +#: netbox/dcim/forms/model_forms.py:140 msgid "Contact Info" msgstr "İletişim Bilgisi" -#: dcim/forms/model_forms.py:195 templates/dcim/rackrole.html:19 +#: netbox/dcim/forms/model_forms.py:195 netbox/templates/dcim/rackrole.html:19 msgid "Rack Role" msgstr "Raf Rolü" -#: dcim/forms/model_forms.py:212 dcim/forms/model_forms.py:362 -#: dcim/forms/model_forms.py:446 utilities/forms/fields/fields.py:47 +#: netbox/dcim/forms/model_forms.py:212 netbox/dcim/forms/model_forms.py:362 +#: netbox/dcim/forms/model_forms.py:446 +#: netbox/utilities/forms/fields/fields.py:47 msgid "Slug" msgstr "Kısa isim" -#: dcim/forms/model_forms.py:259 +#: netbox/dcim/forms/model_forms.py:259 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." -#: dcim/forms/model_forms.py:265 +#: netbox/dcim/forms/model_forms.py:265 msgid "Inventory Control" msgstr "Envanter Kontrolü" -#: dcim/forms/model_forms.py:313 +#: netbox/dcim/forms/model_forms.py:313 msgid "" "Comma-separated list of numeric unit IDs. A range may be specified using a " "hyphen." @@ -4411,144 +4855,171 @@ msgstr "" "Virgülle ayrılmış sayısal birim kimlikleri listesi. Bir aralık bir tire " "kullanılarak belirtilebilir." -#: dcim/forms/model_forms.py:322 dcim/tables/racks.py:202 +#: netbox/dcim/forms/model_forms.py:322 netbox/dcim/tables/racks.py:202 msgid "Reservation" msgstr "Rezervasyon" -#: dcim/forms/model_forms.py:423 templates/dcim/devicerole.html:23 +#: netbox/dcim/forms/model_forms.py:423 +#: netbox/templates/dcim/devicerole.html:23 msgid "Device Role" msgstr "Cİhaz Rolü" -#: dcim/forms/model_forms.py:490 dcim/models/devices.py:644 +#: netbox/dcim/forms/model_forms.py:490 netbox/dcim/models/devices.py:644 msgid "The lowest-numbered unit occupied by the device" msgstr "Cihazın kullandığı en düşük numaralı birim" -#: dcim/forms/model_forms.py:547 +#: netbox/dcim/forms/model_forms.py:547 msgid "The position in the virtual chassis this device is identified by" msgstr "Bu cihazın sanal kasadaki konumu tanımlanır" -#: dcim/forms/model_forms.py:552 +#: netbox/dcim/forms/model_forms.py:552 msgid "The priority of the device in the virtual chassis" msgstr "Sanal kasadaki cihazın önceliği" -#: dcim/forms/model_forms.py:659 +#: netbox/dcim/forms/model_forms.py:659 msgid "Automatically populate components associated with this module type" msgstr "Bu modül türüyle ilişkili bileşenleri otomatik olarak doldurun" -#: dcim/forms/model_forms.py:767 +#: netbox/dcim/forms/model_forms.py:767 msgid "Characteristics" msgstr "ÖZELLİKLERİ" -#: dcim/forms/model_forms.py:1087 +#: netbox/dcim/forms/model_forms.py:914 +#, python-brace-format +msgid "" +"Alphanumeric ranges are supported for bulk creation. Mixed cases and types " +"within a single range are not supported (example: " +"[ge,xe]-0/0/[0-9]). The token {module}, if " +"present, will be automatically replaced with the position value when " +"creating a new module." +msgstr "" + +#: netbox/dcim/forms/model_forms.py:1094 msgid "Console port template" msgstr "Konsol bağlantı noktası şablonu" -#: dcim/forms/model_forms.py:1095 +#: netbox/dcim/forms/model_forms.py:1102 msgid "Console server port template" msgstr "Konsol sunucusu bağlantı noktası şablonu" -#: dcim/forms/model_forms.py:1103 +#: netbox/dcim/forms/model_forms.py:1110 msgid "Front port template" msgstr "Ön bağlantı noktası şablonu" -#: dcim/forms/model_forms.py:1111 +#: netbox/dcim/forms/model_forms.py:1118 msgid "Interface template" msgstr "Arayüz şablonu" -#: dcim/forms/model_forms.py:1119 +#: netbox/dcim/forms/model_forms.py:1126 msgid "Power outlet template" msgstr "Elektrik prizi şablonu" -#: dcim/forms/model_forms.py:1127 +#: netbox/dcim/forms/model_forms.py:1134 msgid "Power port template" msgstr "Güç bağlantı noktası şablonu" -#: dcim/forms/model_forms.py:1135 +#: netbox/dcim/forms/model_forms.py:1142 msgid "Rear port template" msgstr "Arka bağlantı noktası şablonu" -#: dcim/forms/model_forms.py:1144 dcim/forms/model_forms.py:1388 -#: dcim/forms/model_forms.py:1551 dcim/forms/model_forms.py:1583 -#: dcim/tables/connections.py:65 ipam/forms/bulk_import.py:318 -#: ipam/forms/model_forms.py:280 ipam/forms/model_forms.py:289 -#: ipam/tables/fhrp.py:64 ipam/tables/ip.py:372 ipam/tables/vlans.py:169 -#: templates/circuits/inc/circuit_termination_fields.html:51 -#: templates/dcim/frontport.html:106 templates/dcim/interface.html:27 -#: templates/dcim/interface.html:184 templates/dcim/interface.html:310 -#: templates/dcim/rearport.html:102 -#: templates/virtualization/vminterface.html:18 -#: templates/vpn/tunneltermination.html:31 -#: templates/wireless/inc/wirelesslink_interface.html:10 -#: templates/wireless/wirelesslink.html:10 -#: templates/wireless/wirelesslink.html:55 -#: virtualization/forms/model_forms.py:348 vpn/forms/bulk_import.py:297 -#: vpn/forms/model_forms.py:436 vpn/forms/model_forms.py:445 -#: wireless/forms/model_forms.py:113 wireless/forms/model_forms.py:155 +#: netbox/dcim/forms/model_forms.py: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" -#: dcim/forms/model_forms.py:1145 dcim/forms/model_forms.py:1584 -#: dcim/tables/connections.py:27 templates/dcim/consoleport.html:17 -#: templates/dcim/consoleserverport.html:74 templates/dcim/frontport.html:112 +#: netbox/dcim/forms/model_forms.py:1152 netbox/dcim/forms/model_forms.py:1591 +#: netbox/dcim/tables/connections.py:27 +#: netbox/templates/dcim/consoleport.html:17 +#: netbox/templates/dcim/consoleserverport.html:74 +#: netbox/templates/dcim/frontport.html:112 msgid "Console Port" msgstr "Konsol Bağlantı Noktası" -#: dcim/forms/model_forms.py:1146 dcim/forms/model_forms.py:1585 -#: templates/dcim/consoleport.html:73 templates/dcim/consoleserverport.html:17 -#: templates/dcim/frontport.html:109 +#: netbox/dcim/forms/model_forms.py:1153 netbox/dcim/forms/model_forms.py:1592 +#: 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ı" -#: dcim/forms/model_forms.py:1147 dcim/forms/model_forms.py:1586 -#: templates/circuits/inc/circuit_termination_fields.html:52 -#: templates/dcim/consoleport.html:76 templates/dcim/consoleserverport.html:77 -#: templates/dcim/frontport.html:17 templates/dcim/frontport.html:115 -#: templates/dcim/interface.html:187 templates/dcim/rearport.html:105 +#: netbox/dcim/forms/model_forms.py:1154 netbox/dcim/forms/model_forms.py:1593 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:52 +#: netbox/templates/dcim/consoleport.html:76 +#: netbox/templates/dcim/consoleserverport.html:77 +#: netbox/templates/dcim/frontport.html:17 +#: netbox/templates/dcim/frontport.html:115 +#: netbox/templates/dcim/interface.html:187 +#: netbox/templates/dcim/rearport.html:105 msgid "Front Port" msgstr "Ön Bağlantı Noktası" -#: dcim/forms/model_forms.py:1148 dcim/forms/model_forms.py:1587 -#: dcim/tables/devices.py:710 -#: templates/circuits/inc/circuit_termination_fields.html:53 -#: templates/dcim/consoleport.html:79 templates/dcim/consoleserverport.html:80 -#: templates/dcim/frontport.html:50 templates/dcim/frontport.html:118 -#: templates/dcim/interface.html:190 templates/dcim/rearport.html:17 -#: templates/dcim/rearport.html:108 +#: netbox/dcim/forms/model_forms.py:1155 netbox/dcim/forms/model_forms.py:1594 +#: netbox/dcim/tables/devices.py:710 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:53 +#: netbox/templates/dcim/consoleport.html:79 +#: netbox/templates/dcim/consoleserverport.html:80 +#: netbox/templates/dcim/frontport.html:50 +#: netbox/templates/dcim/frontport.html:118 +#: netbox/templates/dcim/interface.html:190 +#: netbox/templates/dcim/rearport.html:17 +#: netbox/templates/dcim/rearport.html:108 msgid "Rear Port" msgstr "Arka Bağlantı Noktası" -#: dcim/forms/model_forms.py:1149 dcim/forms/model_forms.py:1588 -#: dcim/tables/connections.py:46 dcim/tables/devices.py:512 -#: templates/dcim/poweroutlet.html:44 templates/dcim/powerport.html:17 +#: 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/templates/dcim/powerport.html:17 msgid "Power Port" msgstr "Güç Bağlantı Noktası" -#: dcim/forms/model_forms.py:1150 dcim/forms/model_forms.py:1589 -#: templates/dcim/poweroutlet.html:17 templates/dcim/powerport.html:77 +#: netbox/dcim/forms/model_forms.py:1157 netbox/dcim/forms/model_forms.py:1596 +#: netbox/templates/dcim/poweroutlet.html:17 +#: netbox/templates/dcim/powerport.html:77 msgid "Power Outlet" msgstr "Güç Çıkışı" -#: dcim/forms/model_forms.py:1152 dcim/forms/model_forms.py:1591 +#: netbox/dcim/forms/model_forms.py:1159 netbox/dcim/forms/model_forms.py:1598 msgid "Component Assignment" msgstr "Bileşen Ataması" -#: dcim/forms/model_forms.py:1195 dcim/forms/model_forms.py:1638 +#: netbox/dcim/forms/model_forms.py:1202 netbox/dcim/forms/model_forms.py:1645 msgid "An InventoryItem can only be assigned to a single component." msgstr "Bir InventoryItem yalnızca tek bir bileşene atanabilir." -#: dcim/forms/model_forms.py:1332 +#: netbox/dcim/forms/model_forms.py:1339 msgid "LAG interface" msgstr "LAG arayüzü" -#: dcim/forms/model_forms.py:1355 +#: netbox/dcim/forms/model_forms.py:1362 msgid "Filter VLANs available for assignment by group." msgstr "Gruba göre atama için mevcut VLAN'ları filtreleyin." -#: dcim/forms/model_forms.py:1484 +#: netbox/dcim/forms/model_forms.py:1491 msgid "Child Device" msgstr "Çocuk Cihazı" -#: dcim/forms/model_forms.py:1485 +#: netbox/dcim/forms/model_forms.py:1492 msgid "" "Child devices must first be created and assigned to the site and rack of the" " parent device." @@ -4556,32 +5027,35 @@ msgstr "" "Alt aygıtlar önce oluşturulmalı ve ana aygıtın sahasına ve rafına " "atanmalıdır." -#: dcim/forms/model_forms.py:1527 +#: netbox/dcim/forms/model_forms.py:1534 msgid "Console port" msgstr "Konsol bağlantı noktası" -#: dcim/forms/model_forms.py:1535 +#: netbox/dcim/forms/model_forms.py:1542 msgid "Console server port" msgstr "Konsol sunucusu bağlantı noktası" -#: dcim/forms/model_forms.py:1543 +#: netbox/dcim/forms/model_forms.py:1550 msgid "Front port" msgstr "Ön bağlantı noktası" -#: dcim/forms/model_forms.py:1559 +#: netbox/dcim/forms/model_forms.py:1566 msgid "Power outlet" msgstr "Güç çıkışı" -#: dcim/forms/model_forms.py:1579 templates/dcim/inventoryitem.html:17 +#: netbox/dcim/forms/model_forms.py:1586 +#: netbox/templates/dcim/inventoryitem.html:17 msgid "Inventory Item" msgstr "Envanter Öğesi" -#: dcim/forms/model_forms.py:1652 templates/dcim/inventoryitemrole.html:15 +#: netbox/dcim/forms/model_forms.py:1659 +#: netbox/templates/dcim/inventoryitemrole.html:15 msgid "Inventory Item Role" msgstr "Envanter Öğesi Rolü" -#: dcim/forms/object_create.py:48 dcim/forms/object_create.py:199 -#: dcim/forms/object_create.py:355 +#: netbox/dcim/forms/object_create.py:48 +#: netbox/dcim/forms/object_create.py:199 +#: netbox/dcim/forms/object_create.py:347 msgid "" "Alphanumeric ranges are supported. (Must match the number of objects being " "created.)" @@ -4589,7 +5063,7 @@ msgstr "" "Alfasayısal aralıklar desteklenir. (Oluşturulan nesnelerin sayısıyla " "eşleşmelidir.)" -#: dcim/forms/object_create.py:68 +#: netbox/dcim/forms/object_create.py:68 #, python-brace-format msgid "" "The provided pattern specifies {value_count} values, but {pattern_count} are" @@ -4598,18 +5072,19 @@ msgstr "" "Sağlanan desen belirtir {value_count} Değerler, ama {pattern_count} " "bekleniyor." -#: dcim/forms/object_create.py:110 dcim/forms/object_create.py:271 -#: dcim/tables/devices.py:252 +#: netbox/dcim/forms/object_create.py:110 +#: netbox/dcim/forms/object_create.py:263 netbox/dcim/tables/devices.py:252 msgid "Rear ports" msgstr "Arka bağlantı noktaları" -#: dcim/forms/object_create.py:111 dcim/forms/object_create.py:272 +#: netbox/dcim/forms/object_create.py:111 +#: netbox/dcim/forms/object_create.py:264 msgid "Select one rear port assignment for each front port being created." msgstr "" "Oluşturulan her ön bağlantı noktası için bir arka bağlantı noktası ataması " "seçin." -#: dcim/forms/object_create.py:164 +#: netbox/dcim/forms/object_create.py:164 #, python-brace-format msgid "" "The number of front port templates to be created ({frontport_count}) must " @@ -4618,16 +5093,7 @@ msgstr "" "Oluşturulacak ön bağlantı noktası şablonlarının sayısı ({frontport_count}) " "seçilen arka port konumu sayısıyla eşleşmelidir ({rearport_count})." -#: dcim/forms/object_create.py:251 -#, python-brace-format -msgid "" -"The string {module} will be replaced with the position of the " -"assigned module, if any." -msgstr "" -"Dize {module} varsa atanan modülün konumu ile " -"değiştirilecektir." - -#: dcim/forms/object_create.py:320 +#: netbox/dcim/forms/object_create.py:312 #, python-brace-format msgid "" "The number of front ports to be created ({frontport_count}) must match the " @@ -4636,81 +5102,84 @@ 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})." -#: dcim/forms/object_create.py:409 dcim/tables/devices.py:1033 -#: ipam/tables/fhrp.py:31 templates/dcim/virtualchassis.html:53 -#: templates/dcim/virtualchassis_edit.html:47 templates/ipam/fhrpgroup.html:38 +#: netbox/dcim/forms/object_create.py:401 netbox/dcim/tables/devices.py:1033 +#: netbox/ipam/tables/fhrp.py:31 netbox/templates/dcim/virtualchassis.html:53 +#: netbox/templates/dcim/virtualchassis_edit.html:47 +#: netbox/templates/ipam/fhrpgroup.html:38 msgid "Members" msgstr "Üyeler" -#: dcim/forms/object_create.py:418 +#: netbox/dcim/forms/object_create.py:410 msgid "Initial position" msgstr "Başlangıç pozisyonu" -#: dcim/forms/object_create.py:421 +#: netbox/dcim/forms/object_create.py:413 msgid "" "Position of the first member device. Increases by one for each additional " "member." msgstr "İlk üye cihazın konumu. Her ek üye için bir artar." -#: dcim/forms/object_create.py:435 +#: netbox/dcim/forms/object_create.py:427 msgid "A position must be specified for the first VC member." msgstr "İlk VC üyesi için bir pozisyon belirtilmelidir." -#: dcim/models/cables.py:62 dcim/models/device_component_templates.py:55 -#: dcim/models/device_components.py:62 extras/models/customfields.py:111 +#: netbox/dcim/models/cables.py:62 +#: netbox/dcim/models/device_component_templates.py:55 +#: netbox/dcim/models/device_components.py:62 +#: netbox/extras/models/customfields.py:111 msgid "label" msgstr "etiketlemek" -#: dcim/models/cables.py:71 +#: netbox/dcim/models/cables.py:71 msgid "length" msgstr "uzunluk" -#: dcim/models/cables.py:78 +#: netbox/dcim/models/cables.py:78 msgid "length unit" msgstr "uzunluk birimi" -#: dcim/models/cables.py:95 +#: netbox/dcim/models/cables.py:95 msgid "cable" msgstr "kablo" -#: dcim/models/cables.py:96 +#: netbox/dcim/models/cables.py:96 msgid "cables" msgstr "kablolar" -#: dcim/models/cables.py:165 +#: netbox/dcim/models/cables.py:165 msgid "Must specify a unit when setting a cable length" msgstr "Kablo uzunluğu ayarlarken bir birim belirtmeniz gerekir" -#: dcim/models/cables.py:168 +#: netbox/dcim/models/cables.py:168 msgid "Must define A and B terminations when creating a new cable." msgstr "Yeni bir kablo oluştururken A ve B sonlandırmalarını tanımlamalıdır." -#: dcim/models/cables.py:175 +#: netbox/dcim/models/cables.py:175 msgid "Cannot connect different termination types to same end of cable." msgstr "Farklı sonlandırma türleri kablonun aynı ucuna bağlanamaz." -#: dcim/models/cables.py:183 +#: netbox/dcim/models/cables.py:183 #, python-brace-format msgid "Incompatible termination types: {type_a} and {type_b}" msgstr "Uyumsuz sonlandırma türleri: {type_a} ve {type_b}" -#: dcim/models/cables.py:193 +#: netbox/dcim/models/cables.py:193 msgid "A and B terminations cannot connect to the same object." msgstr "A ve B sonlandırmaları aynı nesneye bağlanamaz." -#: dcim/models/cables.py:260 ipam/models/asns.py:37 +#: netbox/dcim/models/cables.py:260 netbox/ipam/models/asns.py:37 msgid "end" msgstr "son" -#: dcim/models/cables.py:313 +#: netbox/dcim/models/cables.py:313 msgid "cable termination" msgstr "kablo sonlandırma" -#: dcim/models/cables.py:314 +#: netbox/dcim/models/cables.py:314 msgid "cable terminations" msgstr "kablo sonlandırmaları" -#: dcim/models/cables.py:333 +#: netbox/dcim/models/cables.py:333 #, python-brace-format msgid "" "Duplicate termination found for {app_label}.{model} {termination_id}: cable " @@ -4719,36 +5188,36 @@ msgstr "" "Yinelenen sonlandırma bulundu {app_label}.{model} {termination_id}: kablo " "{cable_pk}" -#: dcim/models/cables.py:343 +#: netbox/dcim/models/cables.py:343 #, python-brace-format msgid "Cables cannot be terminated to {type_display} interfaces" msgstr "Kablolar sonlandırılamaz {type_display} arayüzleri" -#: dcim/models/cables.py:350 +#: netbox/dcim/models/cables.py:350 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." -#: dcim/models/cables.py:448 extras/models/configs.py:50 +#: netbox/dcim/models/cables.py:448 netbox/extras/models/configs.py:50 msgid "is active" msgstr "aktiftir" -#: dcim/models/cables.py:452 +#: netbox/dcim/models/cables.py:452 msgid "is complete" msgstr "tamamlandı" -#: dcim/models/cables.py:456 +#: netbox/dcim/models/cables.py:456 msgid "is split" msgstr "bölünmüş" -#: dcim/models/cables.py:464 +#: netbox/dcim/models/cables.py:464 msgid "cable path" msgstr "kablo yolu" -#: dcim/models/cables.py:465 +#: netbox/dcim/models/cables.py:465 msgid "cable paths" msgstr "kablo yolları" -#: dcim/models/device_component_templates.py:46 +#: netbox/dcim/models/device_component_templates.py:46 #, python-brace-format msgid "" "{module} is accepted as a substitution for the module bay position when " @@ -4757,23 +5226,23 @@ msgstr "" "{module} bir modül tipine bağlandığında modül yuvası konumunun yerine kabul " "edilir." -#: dcim/models/device_component_templates.py:58 -#: dcim/models/device_components.py:65 +#: netbox/dcim/models/device_component_templates.py:58 +#: netbox/dcim/models/device_components.py:65 msgid "Physical label" msgstr "Fiziksel etiket" -#: dcim/models/device_component_templates.py:103 +#: netbox/dcim/models/device_component_templates.py:103 msgid "Component templates cannot be moved to a different device type." msgstr "Bileşen şablonları farklı bir aygıt türüne taşınamaz." -#: dcim/models/device_component_templates.py:154 +#: netbox/dcim/models/device_component_templates.py:154 msgid "" "A component template cannot be associated with both a device type and a " "module type." msgstr "" "Bir bileşen şablonu hem aygıt türü hem de modül türüyle ilişkilendirilemez." -#: dcim/models/device_component_templates.py:158 +#: netbox/dcim/models/device_component_templates.py:158 msgid "" "A component template must be associated with either a device type or a " "module type." @@ -4781,134 +5250,134 @@ msgstr "" "Bir bileşen şablonu, bir aygıt türü veya bir modül türüyle " "ilişkilendirilmelidir." -#: dcim/models/device_component_templates.py:212 +#: netbox/dcim/models/device_component_templates.py:212 msgid "console port template" msgstr "konsol bağlantı noktası şablonu" -#: dcim/models/device_component_templates.py:213 +#: netbox/dcim/models/device_component_templates.py:213 msgid "console port templates" msgstr "konsol bağlantı noktası şablonları" -#: dcim/models/device_component_templates.py:246 +#: netbox/dcim/models/device_component_templates.py:246 msgid "console server port template" msgstr "konsol sunucusu bağlantı noktası şablonu" -#: dcim/models/device_component_templates.py:247 +#: netbox/dcim/models/device_component_templates.py:247 msgid "console server port templates" msgstr "konsol sunucusu bağlantı noktası şablonları" -#: dcim/models/device_component_templates.py:278 -#: dcim/models/device_components.py:352 +#: netbox/dcim/models/device_component_templates.py:278 +#: netbox/dcim/models/device_components.py:352 msgid "maximum draw" msgstr "maksimum çekiliş" -#: dcim/models/device_component_templates.py:285 -#: dcim/models/device_components.py:359 +#: netbox/dcim/models/device_component_templates.py:285 +#: netbox/dcim/models/device_components.py:359 msgid "allocated draw" msgstr "tahsis edilen çekiliş" -#: dcim/models/device_component_templates.py:295 +#: netbox/dcim/models/device_component_templates.py:295 msgid "power port template" msgstr "güç bağlantı noktası şablonu" -#: dcim/models/device_component_templates.py:296 +#: netbox/dcim/models/device_component_templates.py:296 msgid "power port templates" msgstr "güç bağlantı noktası şablonları" -#: dcim/models/device_component_templates.py:315 -#: dcim/models/device_components.py:382 +#: netbox/dcim/models/device_component_templates.py:315 +#: netbox/dcim/models/device_components.py:382 #, 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)." -#: dcim/models/device_component_templates.py:347 -#: dcim/models/device_components.py:477 +#: netbox/dcim/models/device_component_templates.py:347 +#: netbox/dcim/models/device_components.py:477 msgid "feed leg" msgstr "besleme bacağı" -#: dcim/models/device_component_templates.py:351 -#: dcim/models/device_components.py:481 +#: netbox/dcim/models/device_component_templates.py:351 +#: netbox/dcim/models/device_components.py:481 msgid "Phase (for three-phase feeds)" msgstr "Faz (üç fazlı beslemeler için)" -#: dcim/models/device_component_templates.py:357 +#: netbox/dcim/models/device_component_templates.py:357 msgid "power outlet template" msgstr "elektrik prizi şablonu" -#: dcim/models/device_component_templates.py:358 +#: netbox/dcim/models/device_component_templates.py:358 msgid "power outlet templates" msgstr "elektrik prizi şablonları" -#: dcim/models/device_component_templates.py:367 +#: netbox/dcim/models/device_component_templates.py:367 #, 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" -#: dcim/models/device_component_templates.py:371 +#: netbox/dcim/models/device_component_templates.py:371 #, 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" -#: dcim/models/device_component_templates.py:423 -#: dcim/models/device_components.py:611 +#: netbox/dcim/models/device_component_templates.py:423 +#: netbox/dcim/models/device_components.py:611 msgid "management only" msgstr "sadece yönetim" -#: dcim/models/device_component_templates.py:431 -#: dcim/models/device_components.py:550 +#: netbox/dcim/models/device_component_templates.py:431 +#: netbox/dcim/models/device_components.py:550 msgid "bridge interface" msgstr "köprü arayüzü" -#: dcim/models/device_component_templates.py:449 -#: dcim/models/device_components.py:636 +#: netbox/dcim/models/device_component_templates.py:449 +#: netbox/dcim/models/device_components.py:636 msgid "wireless role" msgstr "kablosuz rolü" -#: dcim/models/device_component_templates.py:455 +#: netbox/dcim/models/device_component_templates.py:455 msgid "interface template" msgstr "arayüz şablonu" -#: dcim/models/device_component_templates.py:456 +#: netbox/dcim/models/device_component_templates.py:456 msgid "interface templates" msgstr "arayüz şablonları" -#: dcim/models/device_component_templates.py:463 -#: dcim/models/device_components.py:804 -#: virtualization/models/virtualmachines.py:405 +#: netbox/dcim/models/device_component_templates.py:463 +#: netbox/dcim/models/device_components.py:804 +#: netbox/virtualization/models/virtualmachines.py:405 msgid "An interface cannot be bridged to itself." msgstr "Bir arayüz kendi başına köprülenemez." -#: dcim/models/device_component_templates.py:466 +#: netbox/dcim/models/device_component_templates.py:466 #, 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" -#: dcim/models/device_component_templates.py:470 +#: netbox/dcim/models/device_component_templates.py:470 #, 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" -#: dcim/models/device_component_templates.py:526 -#: dcim/models/device_components.py:984 +#: netbox/dcim/models/device_component_templates.py:526 +#: netbox/dcim/models/device_components.py:984 msgid "rear port position" msgstr "arka port konumu" -#: dcim/models/device_component_templates.py:551 +#: netbox/dcim/models/device_component_templates.py:551 msgid "front port template" msgstr "ön bağlantı noktası şablonu" -#: dcim/models/device_component_templates.py:552 +#: netbox/dcim/models/device_component_templates.py:552 msgid "front port templates" msgstr "ön bağlantı noktası şablonları" -#: dcim/models/device_component_templates.py:562 +#: netbox/dcim/models/device_component_templates.py:562 #, 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" -#: dcim/models/device_component_templates.py:568 +#: netbox/dcim/models/device_component_templates.py:568 #, python-brace-format msgid "" "Invalid rear port position ({position}); rear port {name} has only {count} " @@ -4917,46 +5386,46 @@ msgstr "" "Geçersiz arka bağlantı noktası konumu ({position}); arka bağlantı noktası " "{name} sadece var {count} pozisyonlar" -#: dcim/models/device_component_templates.py:621 -#: dcim/models/device_components.py:1053 +#: netbox/dcim/models/device_component_templates.py:621 +#: netbox/dcim/models/device_components.py:1053 msgid "positions" msgstr "pozisyonlar" -#: dcim/models/device_component_templates.py:632 +#: netbox/dcim/models/device_component_templates.py:632 msgid "rear port template" msgstr "arka bağlantı noktası şablonu" -#: dcim/models/device_component_templates.py:633 +#: netbox/dcim/models/device_component_templates.py:633 msgid "rear port templates" msgstr "arka bağlantı noktası şablonları" -#: dcim/models/device_component_templates.py:662 -#: dcim/models/device_components.py:1103 +#: netbox/dcim/models/device_component_templates.py:662 +#: netbox/dcim/models/device_components.py:1103 msgid "position" msgstr "pozisyon" -#: dcim/models/device_component_templates.py:665 -#: dcim/models/device_components.py:1106 +#: netbox/dcim/models/device_component_templates.py:665 +#: netbox/dcim/models/device_components.py:1106 msgid "Identifier to reference when renaming installed components" msgstr "Yüklü bileşenleri yeniden adlandırırken başvurulacak tanımlayıcı" -#: dcim/models/device_component_templates.py:671 +#: netbox/dcim/models/device_component_templates.py:671 msgid "module bay template" msgstr "modül bölmesi şablonu" -#: dcim/models/device_component_templates.py:672 +#: netbox/dcim/models/device_component_templates.py:672 msgid "module bay templates" msgstr "modül bölmesi şablonları" -#: dcim/models/device_component_templates.py:699 +#: netbox/dcim/models/device_component_templates.py:699 msgid "device bay template" msgstr "cihaz yuvası şablonu" -#: dcim/models/device_component_templates.py:700 +#: netbox/dcim/models/device_component_templates.py:700 msgid "device bay templates" msgstr "cihaz yuvası şablonları" -#: dcim/models/device_component_templates.py:713 +#: netbox/dcim/models/device_component_templates.py:713 #, python-brace-format msgid "" "Subdevice role of device type ({device_type}) must be set to \"parent\" to " @@ -4965,200 +5434,205 @@ msgstr "" "Aygıt türünün alt cihaz rolü ({device_type}) cihaz bölmelerine izin vermek " "için “ebeveyn” olarak ayarlanmalıdır." -#: dcim/models/device_component_templates.py:768 -#: dcim/models/device_components.py:1262 +#: netbox/dcim/models/device_component_templates.py:768 +#: netbox/dcim/models/device_components.py:1262 msgid "part ID" msgstr "parça kimliği" -#: dcim/models/device_component_templates.py:770 -#: dcim/models/device_components.py:1264 +#: netbox/dcim/models/device_component_templates.py:770 +#: netbox/dcim/models/device_components.py:1264 msgid "Manufacturer-assigned part identifier" msgstr "Üretici tarafından atanan parça tanımlayıcısı" -#: dcim/models/device_component_templates.py:787 +#: netbox/dcim/models/device_component_templates.py:787 msgid "inventory item template" msgstr "envanter öğesi şablonu" -#: dcim/models/device_component_templates.py:788 +#: netbox/dcim/models/device_component_templates.py:788 msgid "inventory item templates" msgstr "envanter öğe şablonları" -#: dcim/models/device_components.py:105 +#: netbox/dcim/models/device_components.py:105 msgid "Components cannot be moved to a different device." msgstr "Bileşenler farklı bir cihaza taşınamaz." -#: dcim/models/device_components.py:144 +#: netbox/dcim/models/device_components.py:144 msgid "cable end" msgstr "kablo ucu" -#: dcim/models/device_components.py:150 +#: netbox/dcim/models/device_components.py:150 msgid "mark connected" msgstr "bağlı olarak işaretle" -#: dcim/models/device_components.py:152 +#: netbox/dcim/models/device_components.py:152 msgid "Treat as if a cable is connected" msgstr "Bir kablo bağlıymış gibi davranın" -#: dcim/models/device_components.py:170 +#: netbox/dcim/models/device_components.py:170 msgid "Must specify cable end (A or B) when attaching a cable." msgstr "Kablo takarken kablo ucunu (A veya B) belirtmelisiniz." -#: dcim/models/device_components.py:174 +#: netbox/dcim/models/device_components.py:174 msgid "Cable end must not be set without a cable." msgstr "Kablo ucu kablo olmadan ayarlanmamalıdır." -#: dcim/models/device_components.py:178 +#: netbox/dcim/models/device_components.py:178 msgid "Cannot mark as connected with a cable attached." msgstr "Takılı bir kabloyla bağlı olarak işaretlenemiyor." -#: dcim/models/device_components.py:202 +#: netbox/dcim/models/device_components.py:202 #, python-brace-format msgid "{class_name} models must declare a parent_object property" msgstr "{class_name} modeller bir parent_object özelliği bildirmelidir" -#: dcim/models/device_components.py:287 dcim/models/device_components.py:316 -#: dcim/models/device_components.py:349 dcim/models/device_components.py:467 +#: 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 msgid "Physical port type" msgstr "Fiziksel bağlantı noktası tipi" -#: dcim/models/device_components.py:290 dcim/models/device_components.py:319 +#: netbox/dcim/models/device_components.py:290 +#: netbox/dcim/models/device_components.py:319 msgid "speed" msgstr "sürat" -#: dcim/models/device_components.py:294 dcim/models/device_components.py:323 +#: netbox/dcim/models/device_components.py:294 +#: netbox/dcim/models/device_components.py:323 msgid "Port speed in bits per second" msgstr "Saniyede bit cinsinden port hızı" -#: dcim/models/device_components.py:300 +#: netbox/dcim/models/device_components.py:300 msgid "console port" msgstr "konsol bağlantı noktası" -#: dcim/models/device_components.py:301 +#: netbox/dcim/models/device_components.py:301 msgid "console ports" msgstr "konsol bağlantı noktaları" -#: dcim/models/device_components.py:329 +#: netbox/dcim/models/device_components.py:329 msgid "console server port" msgstr "konsol sunucusu bağlantı noktası" -#: dcim/models/device_components.py:330 +#: netbox/dcim/models/device_components.py:330 msgid "console server ports" msgstr "konsol sunucusu bağlantı noktaları" -#: dcim/models/device_components.py:369 +#: netbox/dcim/models/device_components.py:369 msgid "power port" msgstr "güç bağlantı noktası" -#: dcim/models/device_components.py:370 +#: netbox/dcim/models/device_components.py:370 msgid "power ports" msgstr "güç bağlantı noktaları" -#: dcim/models/device_components.py:487 +#: netbox/dcim/models/device_components.py:487 msgid "power outlet" msgstr "elektrik prizi" -#: dcim/models/device_components.py:488 +#: netbox/dcim/models/device_components.py:488 msgid "power outlets" msgstr "elektrik prizleri" -#: dcim/models/device_components.py:499 +#: netbox/dcim/models/device_components.py:499 #, 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" -#: dcim/models/device_components.py:530 vpn/models/crypto.py:81 -#: vpn/models/crypto.py:226 +#: netbox/dcim/models/device_components.py:530 netbox/vpn/models/crypto.py:81 +#: netbox/vpn/models/crypto.py:226 msgid "mode" msgstr "mod" -#: dcim/models/device_components.py:534 +#: netbox/dcim/models/device_components.py:534 msgid "IEEE 802.1Q tagging strategy" msgstr "IEEE 802.1Q etiketleme stratejisi" -#: dcim/models/device_components.py:542 +#: netbox/dcim/models/device_components.py:542 msgid "parent interface" msgstr "ebeveyn arabirimi" -#: dcim/models/device_components.py:602 +#: netbox/dcim/models/device_components.py:602 msgid "parent LAG" msgstr "ebeveyn LAG" -#: dcim/models/device_components.py:612 +#: 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" -#: dcim/models/device_components.py:617 +#: netbox/dcim/models/device_components.py:617 msgid "speed (Kbps)" msgstr "hız (Kbps)" -#: dcim/models/device_components.py:620 +#: netbox/dcim/models/device_components.py:620 msgid "duplex" msgstr "dubleks" -#: dcim/models/device_components.py:630 +#: netbox/dcim/models/device_components.py:630 msgid "64-bit World Wide Name" msgstr "64 bit Dünya Çapında Adı" -#: dcim/models/device_components.py:642 +#: netbox/dcim/models/device_components.py:642 msgid "wireless channel" msgstr "kablosuz kanal" -#: dcim/models/device_components.py:649 +#: netbox/dcim/models/device_components.py:649 msgid "channel frequency (MHz)" msgstr "kanal frekansı (MHz)" -#: dcim/models/device_components.py:650 dcim/models/device_components.py:658 +#: 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)" -#: dcim/models/device_components.py:664 +#: netbox/dcim/models/device_components.py:664 msgid "transmit power (dBm)" msgstr "iletim gücü (dBm)" -#: dcim/models/device_components.py:689 wireless/models.py:117 +#: netbox/dcim/models/device_components.py:689 netbox/wireless/models.py:117 msgid "wireless LANs" msgstr "kablosuz LAN'lar" -#: dcim/models/device_components.py:697 -#: virtualization/models/virtualmachines.py:335 +#: netbox/dcim/models/device_components.py:697 +#: netbox/virtualization/models/virtualmachines.py:335 msgid "untagged VLAN" msgstr "etiketsiz VLAN" -#: dcim/models/device_components.py:703 -#: virtualization/models/virtualmachines.py:341 +#: netbox/dcim/models/device_components.py:703 +#: netbox/virtualization/models/virtualmachines.py:341 msgid "tagged VLANs" msgstr "etiketli VLAN'lar" -#: dcim/models/device_components.py:745 -#: virtualization/models/virtualmachines.py:377 +#: netbox/dcim/models/device_components.py:745 +#: netbox/virtualization/models/virtualmachines.py:377 msgid "interface" msgstr "arayüz" -#: dcim/models/device_components.py:746 -#: virtualization/models/virtualmachines.py:378 +#: netbox/dcim/models/device_components.py:746 +#: netbox/virtualization/models/virtualmachines.py:378 msgid "interfaces" msgstr "arayüzleri" -#: dcim/models/device_components.py:757 +#: netbox/dcim/models/device_components.py:757 #, python-brace-format msgid "{display_type} interfaces cannot have a cable attached." msgstr "{display_type} arabirimlerde kablo takılı olamaz." -#: dcim/models/device_components.py:765 +#: netbox/dcim/models/device_components.py:765 #, python-brace-format msgid "{display_type} interfaces cannot be marked as connected." msgstr "{display_type} arayüzler bağlı olarak işaretlenemez." -#: dcim/models/device_components.py:774 -#: virtualization/models/virtualmachines.py:390 +#: netbox/dcim/models/device_components.py:774 +#: netbox/virtualization/models/virtualmachines.py:390 msgid "An interface cannot be its own parent." msgstr "Bir arayüz kendi ebeveyni olamaz." -#: dcim/models/device_components.py:778 +#: netbox/dcim/models/device_components.py:778 msgid "Only virtual interfaces may be assigned to a parent interface." msgstr "Bir üst arabirime yalnızca sanal arabirimler atanabilir." -#: dcim/models/device_components.py:785 +#: netbox/dcim/models/device_components.py:785 #, python-brace-format msgid "" "The selected parent interface ({interface}) belongs to a different device " @@ -5166,7 +5640,7 @@ msgid "" msgstr "" "Seçilen üst arabirim ({interface}) farklı bir cihaza aittir ({device})" -#: dcim/models/device_components.py:791 +#: netbox/dcim/models/device_components.py:791 #, python-brace-format msgid "" "The selected parent interface ({interface}) belongs to {device}, which is " @@ -5175,14 +5649,14 @@ msgstr "" "Seçilen üst arabirim ({interface}) aittir {device}, sanal kasanın bir " "parçası olmayan {virtual_chassis}." -#: dcim/models/device_components.py:811 +#: netbox/dcim/models/device_components.py:811 #, 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})." -#: dcim/models/device_components.py:817 +#: netbox/dcim/models/device_components.py:817 #, python-brace-format msgid "" "The selected bridge interface ({interface}) belongs to {device}, which is " @@ -5191,21 +5665,21 @@ msgstr "" "Seçilen köprü arayüzü ({interface}) aittir {device}, sanal kasanın bir " "parçası olmayan {virtual_chassis}." -#: dcim/models/device_components.py:828 +#: netbox/dcim/models/device_components.py:828 msgid "Virtual interfaces cannot have a parent LAG interface." msgstr "Sanal arabirimlerin üst LAG arabirimi olamaz." -#: dcim/models/device_components.py:832 +#: netbox/dcim/models/device_components.py:832 msgid "A LAG interface cannot be its own parent." msgstr "Bir LAG arabirimi kendi ana arabirimi olamaz." -#: dcim/models/device_components.py:839 +#: netbox/dcim/models/device_components.py:839 #, 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})." -#: dcim/models/device_components.py:845 +#: netbox/dcim/models/device_components.py:845 #, python-brace-format msgid "" "The selected LAG interface ({lag}) belongs to {device}, which is not part of" @@ -5214,43 +5688,43 @@ msgstr "" "Seçilen LAG arayüzü ({lag}) aittir {device}, sanal kasanın bir parçası " "olmayan {virtual_chassis}." -#: dcim/models/device_components.py:856 +#: netbox/dcim/models/device_components.py:856 msgid "Virtual interfaces cannot have a PoE mode." msgstr "Sanal arabirimler PoE moduna sahip olamaz." -#: dcim/models/device_components.py:860 +#: netbox/dcim/models/device_components.py:860 msgid "Virtual interfaces cannot have a PoE type." msgstr "Sanal arabirimler PoE tipine sahip olamaz." -#: dcim/models/device_components.py:866 +#: netbox/dcim/models/device_components.py:866 msgid "Must specify PoE mode when designating a PoE type." msgstr "Bir PoE türü belirlerken PoE modunu belirtmelisiniz." -#: dcim/models/device_components.py:873 +#: netbox/dcim/models/device_components.py:873 msgid "Wireless role may be set only on wireless interfaces." msgstr "Kablosuz rolü yalnızca kablosuz arayüzlerde ayarlanabilir." -#: dcim/models/device_components.py:875 +#: netbox/dcim/models/device_components.py:875 msgid "Channel may be set only on wireless interfaces." msgstr "Kanal sadece kablosuz arayüzlerde ayarlanabilir." -#: dcim/models/device_components.py:881 +#: netbox/dcim/models/device_components.py:881 msgid "Channel frequency may be set only on wireless interfaces." msgstr "Kanal frekansı yalnızca kablosuz arayüzlerde ayarlanabilir." -#: dcim/models/device_components.py:885 +#: netbox/dcim/models/device_components.py:885 msgid "Cannot specify custom frequency with channel selected." msgstr "Seçili kanal ile özel frekans belirlenemiyor." -#: dcim/models/device_components.py:891 +#: netbox/dcim/models/device_components.py:891 msgid "Channel width may be set only on wireless interfaces." msgstr "Kanal genişliği yalnızca kablosuz arayüzlerde ayarlanabilir." -#: dcim/models/device_components.py:893 +#: netbox/dcim/models/device_components.py:893 msgid "Cannot specify custom width with channel selected." msgstr "Seçili kanal ile özel genişlik belirlenemiyor." -#: dcim/models/device_components.py:901 +#: netbox/dcim/models/device_components.py:901 #, python-brace-format msgid "" "The untagged VLAN ({untagged_vlan}) must belong to the same site as the " @@ -5259,24 +5733,24 @@ msgstr "" "Etiketlenmemiş VLAN ({untagged_vlan}) arayüzün ana cihazıyla aynı siteye ait" " olmalı veya global olmalıdır." -#: dcim/models/device_components.py:990 +#: netbox/dcim/models/device_components.py:990 msgid "Mapped position on corresponding rear port" msgstr "İlgili arka bağlantı noktasında eşlenmiş konum" -#: dcim/models/device_components.py:1006 +#: netbox/dcim/models/device_components.py:1006 msgid "front port" msgstr "ön bağlantı noktası" -#: dcim/models/device_components.py:1007 +#: netbox/dcim/models/device_components.py:1007 msgid "front ports" msgstr "ön bağlantı noktaları" -#: dcim/models/device_components.py:1021 +#: netbox/dcim/models/device_components.py:1021 #, 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" -#: dcim/models/device_components.py:1029 +#: netbox/dcim/models/device_components.py:1029 #, python-brace-format msgid "" "Invalid rear port position ({rear_port_position}): Rear port {name} has only" @@ -5285,19 +5759,19 @@ msgstr "" "Geçersiz arka bağlantı noktası konumu ({rear_port_position}): Arka bağlantı " "noktası {name} sadece var {positions} pozisyonları." -#: dcim/models/device_components.py:1059 +#: netbox/dcim/models/device_components.py:1059 msgid "Number of front ports which may be mapped" msgstr "Eşlenebilecek ön bağlantı noktalarının sayısı" -#: dcim/models/device_components.py:1064 +#: netbox/dcim/models/device_components.py:1064 msgid "rear port" msgstr "arka bağlantı noktası" -#: dcim/models/device_components.py:1065 +#: netbox/dcim/models/device_components.py:1065 msgid "rear ports" msgstr "arka bağlantı noktaları" -#: dcim/models/device_components.py:1079 +#: netbox/dcim/models/device_components.py:1079 #, python-brace-format msgid "" "The number of positions cannot be less than the number of mapped front ports" @@ -5306,146 +5780,149 @@ msgstr "" "Konum sayısı, eşlenen ön bağlantı noktalarının sayısından az olamaz " "({frontport_count})" -#: dcim/models/device_components.py:1120 +#: netbox/dcim/models/device_components.py:1120 msgid "module bay" msgstr "modül yuvası" -#: dcim/models/device_components.py:1121 +#: netbox/dcim/models/device_components.py:1121 msgid "module bays" msgstr "modül bölmeleri" -#: dcim/models/device_components.py:1138 dcim/models/devices.py:1224 +#: netbox/dcim/models/device_components.py:1138 +#: netbox/dcim/models/devices.py:1224 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." -#: dcim/models/device_components.py:1164 +#: netbox/dcim/models/device_components.py:1164 msgid "device bay" msgstr "cihaz yuvası" -#: dcim/models/device_components.py:1165 +#: netbox/dcim/models/device_components.py:1165 msgid "device bays" msgstr "cihaz yuvaları" -#: dcim/models/device_components.py:1175 +#: netbox/dcim/models/device_components.py:1175 #, 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." -#: dcim/models/device_components.py:1181 +#: netbox/dcim/models/device_components.py:1181 msgid "Cannot install a device into itself." msgstr "Bir cihaz kendi içine yüklenemiyor." -#: dcim/models/device_components.py:1189 +#: netbox/dcim/models/device_components.py:1189 #, 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}." -#: dcim/models/device_components.py:1210 +#: netbox/dcim/models/device_components.py:1210 msgid "inventory item role" msgstr "envanter kalemi rolü" -#: dcim/models/device_components.py:1211 +#: netbox/dcim/models/device_components.py:1211 msgid "inventory item roles" msgstr "envanter kalemi rolleri" -#: dcim/models/device_components.py:1268 dcim/models/devices.py:607 -#: dcim/models/devices.py:1181 dcim/models/racks.py:313 -#: virtualization/models/virtualmachines.py:131 +#: 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 msgid "serial number" msgstr "seri numarası" -#: dcim/models/device_components.py:1276 dcim/models/devices.py:615 -#: dcim/models/devices.py:1188 dcim/models/racks.py:320 +#: 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 msgid "asset tag" msgstr "varlık etiketi" -#: dcim/models/device_components.py:1277 +#: netbox/dcim/models/device_components.py:1277 msgid "A unique tag used to identify this item" msgstr "Bu öğeyi tanımlamak için kullanılan benzersiz bir etiket" -#: dcim/models/device_components.py:1280 +#: netbox/dcim/models/device_components.py:1280 msgid "discovered" msgstr "keşfedilen" -#: dcim/models/device_components.py:1282 +#: netbox/dcim/models/device_components.py:1282 msgid "This item was automatically discovered" msgstr "Bu öğe otomatik olarak keşfedildi" -#: dcim/models/device_components.py:1300 +#: netbox/dcim/models/device_components.py:1300 msgid "inventory item" msgstr "envanter kalemi" -#: dcim/models/device_components.py:1301 +#: netbox/dcim/models/device_components.py:1301 msgid "inventory items" msgstr "envanter kalemleri" -#: dcim/models/device_components.py:1312 +#: netbox/dcim/models/device_components.py:1312 msgid "Cannot assign self as parent." msgstr "Kendisi ebeveyn olarak atanamıyor." -#: dcim/models/device_components.py:1320 +#: netbox/dcim/models/device_components.py:1320 msgid "Parent inventory item does not belong to the same device." msgstr "Ana envanter kalemi aynı cihaza ait değildir." -#: dcim/models/device_components.py:1326 +#: netbox/dcim/models/device_components.py:1326 msgid "Cannot move an inventory item with dependent children" msgstr "Bağımlı çocuklarla bir envanter öğesi taşınamıyor" -#: dcim/models/device_components.py:1334 +#: netbox/dcim/models/device_components.py:1334 msgid "Cannot assign inventory item to component on another device" msgstr "Başka bir cihazdaki bileşene envanter öğesi atanamıyor" -#: dcim/models/devices.py:54 +#: netbox/dcim/models/devices.py:54 msgid "manufacturer" msgstr "üretici firma" -#: dcim/models/devices.py:55 +#: netbox/dcim/models/devices.py:55 msgid "manufacturers" msgstr "üreticiler" -#: dcim/models/devices.py:82 dcim/models/devices.py:382 -#: dcim/models/racks.py:133 +#: netbox/dcim/models/devices.py:82 netbox/dcim/models/devices.py:382 +#: netbox/dcim/models/racks.py:133 msgid "model" msgstr "model" -#: dcim/models/devices.py:95 +#: netbox/dcim/models/devices.py:95 msgid "default platform" msgstr "varsayılan platform" -#: dcim/models/devices.py:98 dcim/models/devices.py:386 +#: netbox/dcim/models/devices.py:98 netbox/dcim/models/devices.py:386 msgid "part number" msgstr "parça numarası" -#: dcim/models/devices.py:101 dcim/models/devices.py:389 +#: netbox/dcim/models/devices.py:101 netbox/dcim/models/devices.py:389 msgid "Discrete part number (optional)" msgstr "Ayrık parça numarası (isteğe bağlı)" -#: dcim/models/devices.py:107 dcim/models/racks.py:54 +#: netbox/dcim/models/devices.py:107 netbox/dcim/models/racks.py:54 msgid "height (U)" msgstr "yükseklik (U)" -#: dcim/models/devices.py:111 +#: netbox/dcim/models/devices.py:111 msgid "exclude from utilization" msgstr "kullanımdan hariç tut" -#: dcim/models/devices.py:112 +#: netbox/dcim/models/devices.py:112 msgid "Devices of this type are excluded when calculating rack utilization." msgstr "Raf kullanımı hesaplanırken bu tip cihazlar hariç tutulur." -#: dcim/models/devices.py:116 +#: netbox/dcim/models/devices.py:116 msgid "is full depth" msgstr "tam derinliktir" -#: dcim/models/devices.py:117 +#: netbox/dcim/models/devices.py:117 msgid "Device consumes both front and rear rack faces." msgstr "Cihaz hem ön hem de arka kabin yüzlerini tüketir." -#: dcim/models/devices.py:123 +#: netbox/dcim/models/devices.py:123 msgid "parent/child status" msgstr "ebeveyn/çocuk durumu" -#: dcim/models/devices.py:124 +#: netbox/dcim/models/devices.py:124 msgid "" "Parent devices house child devices in device bays. Leave blank if this " "device type is neither a parent nor a child." @@ -5453,24 +5930,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." -#: dcim/models/devices.py:128 dcim/models/devices.py:392 -#: dcim/models/devices.py:659 dcim/models/racks.py:324 +#: netbox/dcim/models/devices.py:128 netbox/dcim/models/devices.py:392 +#: netbox/dcim/models/devices.py:659 netbox/dcim/models/racks.py:324 msgid "airflow" msgstr "hava akımı" -#: dcim/models/devices.py:204 +#: netbox/dcim/models/devices.py:204 msgid "device type" msgstr "cihaz tipi" -#: dcim/models/devices.py:205 +#: netbox/dcim/models/devices.py:205 msgid "device types" msgstr "cihaz türleri" -#: dcim/models/devices.py:290 +#: netbox/dcim/models/devices.py:290 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." -#: dcim/models/devices.py:307 +#: netbox/dcim/models/devices.py:307 #, python-brace-format msgid "" "Device {device} in rack {rack} does not have sufficient space to accommodate" @@ -5479,7 +5956,7 @@ msgstr "" "{rack} kabininde {device} cihazını {height}U yüksekliğinde barındırmak için " "yeterli alan bulunmamaktadır" -#: dcim/models/devices.py:322 +#: netbox/dcim/models/devices.py:322 #, python-brace-format msgid "" "Unable to set 0U height: Found {racked_instance_count} " @@ -5489,7 +5966,7 @@ msgstr "" "href=\"{url}\">{racked_instance_count} örnekler zaten raflara monte " "edilmiştir." -#: dcim/models/devices.py:331 +#: netbox/dcim/models/devices.py:331 msgid "" "Must delete all device bay templates associated with this device before " "declassifying it as a parent device." @@ -5497,164 +5974,164 @@ msgstr "" "Ana cihaz olarak sınıflandırmadan önce bu cihazla ilişkili tüm cihaz yuvası " "şablonlarını silmeniz gerekir." -#: dcim/models/devices.py:337 +#: netbox/dcim/models/devices.py:337 msgid "Child device types must be 0U." msgstr "Çocuk cihaz türleri 0U olmalıdır." -#: dcim/models/devices.py:411 +#: netbox/dcim/models/devices.py:411 msgid "module type" msgstr "modül tipi" -#: dcim/models/devices.py:412 +#: netbox/dcim/models/devices.py:412 msgid "module types" msgstr "modül türleri" -#: dcim/models/devices.py:485 +#: netbox/dcim/models/devices.py:485 msgid "Virtual machines may be assigned to this role" msgstr "Sanal makineler bu role atanabilir" -#: dcim/models/devices.py:497 +#: netbox/dcim/models/devices.py:497 msgid "device role" msgstr "cihaz rolü" -#: dcim/models/devices.py:498 +#: netbox/dcim/models/devices.py:498 msgid "device roles" msgstr "cihaz rolleri" -#: dcim/models/devices.py:515 +#: netbox/dcim/models/devices.py:515 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" -#: dcim/models/devices.py:527 +#: netbox/dcim/models/devices.py:527 msgid "platform" msgstr "platform" -#: dcim/models/devices.py:528 +#: netbox/dcim/models/devices.py:528 msgid "platforms" msgstr "platformlar" -#: dcim/models/devices.py:576 +#: netbox/dcim/models/devices.py:576 msgid "The function this device serves" msgstr "Bu cihazın hizmet ettiği işlev" -#: dcim/models/devices.py:608 +#: netbox/dcim/models/devices.py:608 msgid "Chassis serial number, assigned by the manufacturer" msgstr "Üretici tarafından atanan şasi seri numarası" -#: dcim/models/devices.py:616 dcim/models/devices.py:1189 +#: netbox/dcim/models/devices.py:616 netbox/dcim/models/devices.py:1189 msgid "A unique tag used to identify this device" msgstr "Bu cihazı tanımlamak için kullanılan benzersiz bir etiket" -#: dcim/models/devices.py:643 +#: netbox/dcim/models/devices.py:643 msgid "position (U)" msgstr "pozisyon (U)" -#: dcim/models/devices.py:650 +#: netbox/dcim/models/devices.py:650 msgid "rack face" msgstr "raf yüzü" -#: dcim/models/devices.py:670 dcim/models/devices.py:1415 -#: virtualization/models/virtualmachines.py:100 +#: netbox/dcim/models/devices.py:670 netbox/dcim/models/devices.py:1420 +#: netbox/virtualization/models/virtualmachines.py:100 msgid "primary IPv4" msgstr "birincil IPv4" -#: dcim/models/devices.py:678 dcim/models/devices.py:1423 -#: virtualization/models/virtualmachines.py:108 +#: netbox/dcim/models/devices.py:678 netbox/dcim/models/devices.py:1428 +#: netbox/virtualization/models/virtualmachines.py:108 msgid "primary IPv6" msgstr "birincil IPv6" -#: dcim/models/devices.py:686 +#: netbox/dcim/models/devices.py:686 msgid "out-of-band IP" msgstr "bant dışı IP" -#: dcim/models/devices.py:703 +#: netbox/dcim/models/devices.py:703 msgid "VC position" msgstr "VC pozisyonu" -#: dcim/models/devices.py:706 +#: netbox/dcim/models/devices.py:706 msgid "Virtual chassis position" msgstr "Sanal şasi konumu" -#: dcim/models/devices.py:709 +#: netbox/dcim/models/devices.py:709 msgid "VC priority" msgstr "VC önceliği" -#: dcim/models/devices.py:713 +#: netbox/dcim/models/devices.py:713 msgid "Virtual chassis master election priority" msgstr "Sanal şasi ana seçim önceliği" -#: dcim/models/devices.py:716 dcim/models/sites.py:207 +#: netbox/dcim/models/devices.py:716 netbox/dcim/models/sites.py:207 msgid "latitude" msgstr "enlem" -#: dcim/models/devices.py:721 dcim/models/devices.py:729 -#: dcim/models/sites.py:212 dcim/models/sites.py:220 +#: netbox/dcim/models/devices.py:721 netbox/dcim/models/devices.py:729 +#: netbox/dcim/models/sites.py:212 netbox/dcim/models/sites.py:220 msgid "GPS coordinate in decimal format (xx.yyyyyy)" msgstr "Ondalık formatta GPS koordinatı (xx.yyyyyy)" -#: dcim/models/devices.py:724 dcim/models/sites.py:215 +#: netbox/dcim/models/devices.py:724 netbox/dcim/models/sites.py:215 msgid "longitude" msgstr "boylam" -#: dcim/models/devices.py:797 +#: netbox/dcim/models/devices.py:797 msgid "Device name must be unique per site." msgstr "Aygıt adı site başına benzersiz olmalıdır." -#: dcim/models/devices.py:808 ipam/models/services.py:75 +#: netbox/dcim/models/devices.py:808 netbox/ipam/models/services.py:75 msgid "device" msgstr "cihaz" -#: dcim/models/devices.py:809 +#: netbox/dcim/models/devices.py:809 msgid "devices" msgstr "cihazlar" -#: dcim/models/devices.py:835 +#: netbox/dcim/models/devices.py:835 #, python-brace-format msgid "Rack {rack} does not belong to site {site}." msgstr "Raf {rack} siteye ait değil {site}." -#: dcim/models/devices.py:840 +#: netbox/dcim/models/devices.py:840 #, python-brace-format msgid "Location {location} does not belong to site {site}." msgstr "{location} Konum {site} adlı siteye ait değil." -#: dcim/models/devices.py:846 +#: netbox/dcim/models/devices.py:846 #, python-brace-format msgid "Rack {rack} does not belong to location {location}." msgstr "{rack} rafı {location} adlı konuma ait değil." -#: dcim/models/devices.py:853 +#: netbox/dcim/models/devices.py:853 msgid "Cannot select a rack face without assigning a rack." msgstr "Bir raf atamadan raf yüzü seçilemez." -#: dcim/models/devices.py:857 +#: netbox/dcim/models/devices.py:857 msgid "Cannot select a rack position without assigning a rack." msgstr "Bir raf atamadan raf konumu seçilemez." -#: dcim/models/devices.py:863 +#: netbox/dcim/models/devices.py:863 msgid "Position must be in increments of 0.5 rack units." msgstr "Konum 0,5 raf ünitesinin artışlarında olmalıdır." -#: dcim/models/devices.py:867 +#: netbox/dcim/models/devices.py:867 msgid "Must specify rack face when defining rack position." msgstr "Raf konumunu tanımlarken raf yüzü belirtilmelidir." -#: dcim/models/devices.py:875 +#: netbox/dcim/models/devices.py:875 #, 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." -#: dcim/models/devices.py:886 +#: netbox/dcim/models/devices.py:886 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." -#: dcim/models/devices.py:893 +#: netbox/dcim/models/devices.py:893 msgid "" "Child device types cannot be assigned to a rack position. This is an " "attribute of the parent device." @@ -5662,7 +6139,7 @@ msgstr "" "Alt aygıt türleri bir raf konumuna atanamaz. Bu, ana aygıtın bir " "özelliğidir." -#: dcim/models/devices.py:907 +#: netbox/dcim/models/devices.py:907 #, python-brace-format msgid "" "U{position} is already occupied or does not have sufficient space to " @@ -5671,22 +6148,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)" -#: dcim/models/devices.py:922 +#: netbox/dcim/models/devices.py:922 #, python-brace-format msgid "{ip} is not an IPv4 address." msgstr "{ip} Bu bir IPv4 adresi değildir." -#: dcim/models/devices.py:931 dcim/models/devices.py:946 +#: netbox/dcim/models/devices.py:931 netbox/dcim/models/devices.py:946 #, 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." -#: dcim/models/devices.py:937 +#: netbox/dcim/models/devices.py:937 #, python-brace-format msgid "{ip} is not an IPv6 address." msgstr "{ip} Bu bir IPv6 adresi değildir." -#: dcim/models/devices.py:964 +#: netbox/dcim/models/devices.py:964 #, python-brace-format msgid "" "The assigned platform is limited to {platform_manufacturer} device types, " @@ -5695,16 +6172,16 @@ 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}." -#: dcim/models/devices.py:975 +#: netbox/dcim/models/devices.py:975 #, python-brace-format msgid "The assigned cluster belongs to a different site ({site})" msgstr "Atanan küme farklı bir siteye aittir ({site})" -#: dcim/models/devices.py:983 +#: netbox/dcim/models/devices.py:983 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." -#: dcim/models/devices.py:988 +#: netbox/dcim/models/devices.py:988 #, python-brace-format msgid "" "Device cannot be removed from virtual chassis {virtual_chassis} because it " @@ -5713,36 +6190,36 @@ msgstr "" "Cihaz sanal kasadan kaldırılamıyor {virtual_chassis} çünkü şu anda efendisi " "olarak belirlenmiştir." -#: dcim/models/devices.py:1196 +#: netbox/dcim/models/devices.py:1196 msgid "module" msgstr "modül" -#: dcim/models/devices.py:1197 +#: netbox/dcim/models/devices.py:1197 msgid "modules" msgstr "modülleri" -#: dcim/models/devices.py:1213 +#: netbox/dcim/models/devices.py:1213 #, 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})." -#: dcim/models/devices.py:1334 +#: netbox/dcim/models/devices.py:1339 msgid "domain" msgstr "domain" -#: dcim/models/devices.py:1347 dcim/models/devices.py:1348 +#: netbox/dcim/models/devices.py:1352 netbox/dcim/models/devices.py:1353 msgid "virtual chassis" msgstr "sanal kasa" -#: dcim/models/devices.py:1363 +#: netbox/dcim/models/devices.py:1368 #, 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." -#: dcim/models/devices.py:1379 +#: netbox/dcim/models/devices.py:1384 #, python-brace-format msgid "" "Unable to delete virtual chassis {self}. There are member interfaces which " @@ -5751,102 +6228,102 @@ msgstr "" "Sanal kasa silinemiyor {self}. Çapraz şasi LAG arabirimleri oluşturan üye " "arayüzleri vardır." -#: dcim/models/devices.py:1404 vpn/models/l2vpn.py:37 +#: netbox/dcim/models/devices.py:1409 netbox/vpn/models/l2vpn.py:37 msgid "identifier" msgstr "belirlemek" -#: dcim/models/devices.py:1405 +#: netbox/dcim/models/devices.py:1410 msgid "Numeric identifier unique to the parent device" msgstr "Ana aygıta benzersiz sayısal tanımlayıcı" -#: dcim/models/devices.py:1433 extras/models/customfields.py:225 -#: extras/models/models.py:107 extras/models/models.py:694 -#: netbox/models/__init__.py:115 +#: 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:115 msgid "comments" msgstr "yorumlar" -#: dcim/models/devices.py:1449 +#: netbox/dcim/models/devices.py:1454 msgid "virtual device context" msgstr "sanal cihaz bağlamı" -#: dcim/models/devices.py:1450 +#: netbox/dcim/models/devices.py:1455 msgid "virtual device contexts" msgstr "sanal cihaz bağlamları" -#: dcim/models/devices.py:1482 +#: netbox/dcim/models/devices.py:1487 #, python-brace-format msgid "{ip} is not an IPv{family} address." msgstr "{ip} IPV değil{family} adres." -#: dcim/models/devices.py:1488 +#: netbox/dcim/models/devices.py:1493 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." -#: dcim/models/mixins.py:15 extras/models/configs.py:41 -#: extras/models/models.py:313 extras/models/models.py:522 -#: extras/models/search.py:48 ipam/models/ip.py:194 +#: netbox/dcim/models/mixins.py:15 netbox/extras/models/configs.py:41 +#: netbox/extras/models/models.py: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" -#: dcim/models/mixins.py:22 +#: netbox/dcim/models/mixins.py:22 msgid "weight unit" msgstr "ağırlık birimi" -#: dcim/models/mixins.py:51 +#: netbox/dcim/models/mixins.py:51 msgid "Must specify a unit when setting a weight" msgstr "Ağırlık ayarlarken bir birim belirtmelisiniz" -#: dcim/models/power.py:55 +#: netbox/dcim/models/power.py:55 msgid "power panel" msgstr "güç paneli" -#: dcim/models/power.py:56 +#: netbox/dcim/models/power.py:56 msgid "power panels" msgstr "güç panelleri" -#: dcim/models/power.py:70 +#: netbox/dcim/models/power.py:70 #, python-brace-format msgid "" "Location {location} ({location_site}) is in a different site than {site}" msgstr "{location} ({location_site}) adlı konum, {site} adlı sitede değil." -#: dcim/models/power.py:108 +#: netbox/dcim/models/power.py:108 msgid "supply" msgstr "sağlamak" -#: dcim/models/power.py:114 +#: netbox/dcim/models/power.py:114 msgid "phase" msgstr "faz" -#: dcim/models/power.py:120 +#: netbox/dcim/models/power.py:120 msgid "voltage" msgstr "voltaj" -#: dcim/models/power.py:125 +#: netbox/dcim/models/power.py:125 msgid "amperage" msgstr "amper" -#: dcim/models/power.py:130 +#: netbox/dcim/models/power.py:130 msgid "max utilization" msgstr "maksimum kullanım" -#: dcim/models/power.py:133 +#: netbox/dcim/models/power.py:133 msgid "Maximum permissible draw (percentage)" msgstr "İzin verilen maksimum çekiliş (yüzde)" -#: dcim/models/power.py:136 +#: netbox/dcim/models/power.py:136 msgid "available power" msgstr "mevcut güç" -#: dcim/models/power.py:164 +#: netbox/dcim/models/power.py:164 msgid "power feed" msgstr "güç beslemesi" -#: dcim/models/power.py:165 +#: netbox/dcim/models/power.py:165 msgid "power feeds" msgstr "güç beslemeleri" -#: dcim/models/power.py:179 +#: netbox/dcim/models/power.py:179 #, python-brace-format msgid "" "Rack {rack} ({rack_site}) and power panel {powerpanel} ({powerpanel_site}) " @@ -5855,63 +6332,63 @@ msgstr "" "Raf {rack} ({rack_site}) ve güç paneli {powerpanel} ({powerpanel_site}) " "farklı sitelerdedir." -#: dcim/models/power.py:190 +#: netbox/dcim/models/power.py:190 msgid "Voltage cannot be negative for AC supply" msgstr "AC beslemesi için voltaj negatif olamaz" -#: dcim/models/racks.py:47 +#: netbox/dcim/models/racks.py:47 msgid "width" msgstr "genişlik" -#: dcim/models/racks.py:48 +#: netbox/dcim/models/racks.py:48 msgid "Rail-to-rail width" msgstr "Ray-ray genişliği" -#: dcim/models/racks.py:56 +#: netbox/dcim/models/racks.py:56 msgid "Height in rack units" msgstr "Raf ünitelerinde yükseklik" -#: dcim/models/racks.py:60 +#: netbox/dcim/models/racks.py:60 msgid "starting unit" msgstr "başlangıç ünitesi" -#: dcim/models/racks.py:62 +#: netbox/dcim/models/racks.py:62 msgid "Starting unit for rack" msgstr "Raf için başlangıç ünitesi" -#: dcim/models/racks.py:66 +#: netbox/dcim/models/racks.py:66 msgid "descending units" msgstr "azalan birimler" -#: dcim/models/racks.py:67 +#: netbox/dcim/models/racks.py:67 msgid "Units are numbered top-to-bottom" msgstr "Birimler yukarıdan aşağıya numaralandırılmıştır" -#: dcim/models/racks.py:72 +#: netbox/dcim/models/racks.py:72 msgid "outer width" msgstr "dış genişlik" -#: dcim/models/racks.py:75 +#: netbox/dcim/models/racks.py:75 msgid "Outer dimension of rack (width)" msgstr "Rafın dış boyutu (genişlik)" -#: dcim/models/racks.py:78 +#: netbox/dcim/models/racks.py:78 msgid "outer depth" msgstr "dış derinlik" -#: dcim/models/racks.py:81 +#: netbox/dcim/models/racks.py:81 msgid "Outer dimension of rack (depth)" msgstr "Rafın dış boyutu (derinlik)" -#: dcim/models/racks.py:84 +#: netbox/dcim/models/racks.py:84 msgid "outer unit" msgstr "dış ünite" -#: dcim/models/racks.py:90 +#: netbox/dcim/models/racks.py:90 msgid "mounting depth" msgstr "montaj derinliği" -#: dcim/models/racks.py:94 +#: netbox/dcim/models/racks.py:94 msgid "" "Maximum depth of a mounted device, in millimeters. For four-post racks, this" " is the distance between the front and rear rails." @@ -5919,74 +6396,75 @@ msgstr "" "Monte edilmiş bir cihazın milimetre cinsinden maksimum derinliği. Dört " "direkli raflar için bu, ön ve arka raylar arasındaki mesafedir." -#: dcim/models/racks.py:102 +#: netbox/dcim/models/racks.py:102 msgid "max weight" msgstr "maksimum ağırlık" -#: dcim/models/racks.py:105 +#: netbox/dcim/models/racks.py:105 msgid "Maximum load capacity for the rack" msgstr "Raf için maksimum yük kapasitesi" -#: dcim/models/racks.py:125 dcim/models/racks.py:252 +#: netbox/dcim/models/racks.py:125 netbox/dcim/models/racks.py:252 msgid "form factor" msgstr "form faktörü" -#: dcim/models/racks.py:162 +#: netbox/dcim/models/racks.py:162 msgid "rack type" msgstr "raf tipi" -#: dcim/models/racks.py:163 +#: netbox/dcim/models/racks.py:163 msgid "rack types" msgstr "raf türleri" -#: dcim/models/racks.py:180 dcim/models/racks.py:379 +#: netbox/dcim/models/racks.py:180 netbox/dcim/models/racks.py:379 msgid "Must specify a unit when setting an outer width/depth" msgstr "Dış genişlik/derinlik ayarlarken bir birim belirtmelidir" -#: dcim/models/racks.py:184 dcim/models/racks.py:383 +#: netbox/dcim/models/racks.py:184 netbox/dcim/models/racks.py:383 msgid "Must specify a unit when setting a maximum weight" msgstr "Maksimum ağırlık ayarlarken bir birim belirtmelisiniz" -#: dcim/models/racks.py:230 +#: netbox/dcim/models/racks.py:230 msgid "rack role" msgstr "raf rolü" -#: dcim/models/racks.py:231 +#: netbox/dcim/models/racks.py:231 msgid "rack roles" msgstr "raf rolleri" -#: dcim/models/racks.py:274 +#: netbox/dcim/models/racks.py:274 msgid "facility ID" msgstr "tesis kimliği" -#: dcim/models/racks.py:275 +#: netbox/dcim/models/racks.py:275 msgid "Locally-assigned identifier" msgstr "Yerel olarak atanmış tanımlayıcı" -#: dcim/models/racks.py:308 ipam/forms/bulk_import.py:201 -#: ipam/forms/bulk_import.py:266 ipam/forms/bulk_import.py:301 -#: ipam/forms/bulk_import.py:459 virtualization/forms/bulk_import.py:112 +#: 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 msgid "Functional role" msgstr "Fonksiyonel rol" -#: dcim/models/racks.py:321 +#: netbox/dcim/models/racks.py:321 msgid "A unique tag used to identify this rack" msgstr "Bu rafı tanımlamak için kullanılan benzersiz bir etiket" -#: dcim/models/racks.py:359 +#: netbox/dcim/models/racks.py:359 msgid "rack" msgstr "raf" -#: dcim/models/racks.py:360 +#: netbox/dcim/models/racks.py:360 msgid "racks" msgstr "rafları" -#: dcim/models/racks.py:375 +#: netbox/dcim/models/racks.py:375 #, python-brace-format msgid "Assigned location must belong to parent site ({site})." msgstr "Atanan konum üst siteye ait olmalıdır ({site})." -#: dcim/models/racks.py:393 +#: netbox/dcim/models/racks.py:393 #, python-brace-format msgid "" "Rack must be at least {min_height}U tall to house currently installed " @@ -5995,7 +6473,7 @@ msgstr "" "Raf en az olmalıdır {min_height}Şu anda yüklü cihazları barındırmak için " "yeterli." -#: dcim/models/racks.py:400 +#: netbox/dcim/models/racks.py:400 #, python-brace-format msgid "" "Rack unit numbering must begin at {position} or less to house currently " @@ -6004,889 +6482,951 @@ 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." -#: dcim/models/racks.py:408 +#: netbox/dcim/models/racks.py:408 #, python-brace-format msgid "Location must be from the same site, {site}." msgstr "Konum aynı siteden olmalı, {site}." -#: dcim/models/racks.py:670 +#: netbox/dcim/models/racks.py:670 msgid "units" msgstr "birimler" -#: dcim/models/racks.py:696 +#: netbox/dcim/models/racks.py:696 msgid "rack reservation" msgstr "raf rezervasyonu" -#: dcim/models/racks.py:697 +#: netbox/dcim/models/racks.py:697 msgid "rack reservations" msgstr "raf rezervasyonları" -#: dcim/models/racks.py:714 +#: netbox/dcim/models/racks.py:714 #, python-brace-format msgid "Invalid unit(s) for {height}U rack: {unit_list}" msgstr "Geçersiz birim (ler) i {height}U rafı: {unit_list}" -#: dcim/models/racks.py:727 +#: netbox/dcim/models/racks.py:727 #, python-brace-format msgid "The following units have already been reserved: {unit_list}" msgstr "Aşağıdaki birimler zaten rezerve edilmiştir: {unit_list}" -#: dcim/models/sites.py:49 +#: netbox/dcim/models/sites.py:49 msgid "A top-level region with this name already exists." msgstr "Bu ada sahip üst düzey bir bölge zaten var." -#: dcim/models/sites.py:59 +#: netbox/dcim/models/sites.py:59 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." -#: dcim/models/sites.py:62 +#: netbox/dcim/models/sites.py:62 msgid "region" msgstr "bölge" -#: dcim/models/sites.py:63 +#: netbox/dcim/models/sites.py:63 msgid "regions" msgstr "bölgeler" -#: dcim/models/sites.py:102 +#: netbox/dcim/models/sites.py:102 msgid "A top-level site group with this name already exists." msgstr "Bu ada sahip üst düzey bir site grubu zaten var." -#: dcim/models/sites.py:112 +#: netbox/dcim/models/sites.py:112 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." -#: dcim/models/sites.py:115 +#: netbox/dcim/models/sites.py:115 msgid "site group" msgstr "site grubu" -#: dcim/models/sites.py:116 +#: netbox/dcim/models/sites.py:116 msgid "site groups" msgstr "site grupları" -#: dcim/models/sites.py:141 +#: netbox/dcim/models/sites.py:141 msgid "Full name of the site" msgstr "Sitenin tam adı" -#: dcim/models/sites.py:181 dcim/models/sites.py:279 +#: netbox/dcim/models/sites.py:181 netbox/dcim/models/sites.py:279 msgid "facility" msgstr "tesise" -#: dcim/models/sites.py:184 dcim/models/sites.py:282 +#: netbox/dcim/models/sites.py:184 netbox/dcim/models/sites.py:282 msgid "Local facility ID or description" msgstr "Yerel tesis kimliği veya açıklaması" -#: dcim/models/sites.py:195 +#: netbox/dcim/models/sites.py:195 msgid "physical address" msgstr "fiziksel adres" -#: dcim/models/sites.py:198 +#: netbox/dcim/models/sites.py:198 msgid "Physical location of the building" msgstr "Binanın fiziksel konumu" -#: dcim/models/sites.py:201 +#: netbox/dcim/models/sites.py:201 msgid "shipping address" msgstr "teslimat adresi" -#: dcim/models/sites.py:204 +#: netbox/dcim/models/sites.py:204 msgid "If different from the physical address" msgstr "Fiziksel adresden farklıysa" -#: dcim/models/sites.py:238 +#: netbox/dcim/models/sites.py:238 msgid "site" msgstr "sitesi" -#: dcim/models/sites.py:239 +#: netbox/dcim/models/sites.py:239 msgid "sites" msgstr "siteler" -#: dcim/models/sites.py:309 +#: netbox/dcim/models/sites.py:309 msgid "A location with this name already exists within the specified site." msgstr "Belirtilen sitede bu ada sahip bir konum zaten var." -#: dcim/models/sites.py:319 +#: netbox/dcim/models/sites.py:319 msgid "A location with this slug already exists within the specified site." msgstr "Belirtilen sitede bu kısa ada sahip bir konum zaten var." -#: dcim/models/sites.py:322 +#: netbox/dcim/models/sites.py:322 msgid "location" msgstr "konum" -#: dcim/models/sites.py:323 +#: netbox/dcim/models/sites.py:323 msgid "locations" msgstr "konumlar" -#: dcim/models/sites.py:337 +#: netbox/dcim/models/sites.py:337 #, python-brace-format msgid "Parent location ({parent}) must belong to the same site ({site})." msgstr "Ana konum ({parent}) aynı siteye ({site}) ait olmalıdır." -#: dcim/tables/cables.py:55 +#: netbox/dcim/tables/cables.py:55 msgid "Termination A" msgstr "Fesih A" -#: dcim/tables/cables.py:60 +#: netbox/dcim/tables/cables.py:60 msgid "Termination B" msgstr "Sonlandırma B" -#: dcim/tables/cables.py:66 wireless/tables/wirelesslink.py:23 +#: netbox/dcim/tables/cables.py:66 netbox/wireless/tables/wirelesslink.py:23 msgid "Device A" msgstr "Aygıt A" -#: dcim/tables/cables.py:72 wireless/tables/wirelesslink.py:32 +#: netbox/dcim/tables/cables.py:72 netbox/wireless/tables/wirelesslink.py:32 msgid "Device B" msgstr "Aygıt B" -#: dcim/tables/cables.py:78 +#: netbox/dcim/tables/cables.py:78 msgid "Location A" msgstr "Konum A" -#: dcim/tables/cables.py:84 +#: netbox/dcim/tables/cables.py:84 msgid "Location B" msgstr "Konum B" -#: dcim/tables/cables.py:90 +#: netbox/dcim/tables/cables.py:90 msgid "Rack A" msgstr "Raf A" -#: dcim/tables/cables.py:96 +#: netbox/dcim/tables/cables.py:96 msgid "Rack B" msgstr "Raf B" -#: dcim/tables/cables.py:102 +#: netbox/dcim/tables/cables.py:102 msgid "Site A" msgstr "Site A" -#: dcim/tables/cables.py:108 +#: netbox/dcim/tables/cables.py:108 msgid "Site B" msgstr "Site B" -#: dcim/tables/connections.py:31 dcim/tables/connections.py:50 -#: dcim/tables/connections.py:71 -#: templates/dcim/inc/connection_endpoints.html:16 +#: netbox/dcim/tables/connections.py:31 netbox/dcim/tables/connections.py:50 +#: netbox/dcim/tables/connections.py:71 +#: netbox/templates/dcim/inc/connection_endpoints.html:16 msgid "Reachable" msgstr "Ulaşılabilir" -#: dcim/tables/devices.py:58 dcim/tables/devices.py:106 -#: dcim/tables/racks.py:150 dcim/tables/sites.py:105 dcim/tables/sites.py:148 -#: extras/tables/tables.py:545 netbox/navigation/menu.py:69 -#: netbox/navigation/menu.py:73 netbox/navigation/menu.py:75 -#: virtualization/forms/model_forms.py:122 -#: virtualization/tables/clusters.py:83 virtualization/views.py:206 +#: 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/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 msgid "Devices" msgstr "Aygıtlar" -#: dcim/tables/devices.py:63 dcim/tables/devices.py:111 -#: virtualization/tables/clusters.py:88 +#: netbox/dcim/tables/devices.py:63 netbox/dcim/tables/devices.py:111 +#: netbox/virtualization/tables/clusters.py:88 msgid "VMs" msgstr "Sanal Makineler" -#: dcim/tables/devices.py:100 dcim/tables/devices.py:216 -#: extras/forms/model_forms.py:630 templates/dcim/device.html:112 -#: templates/dcim/device/render_config.html:11 -#: templates/dcim/device/render_config.html:14 -#: templates/dcim/devicerole.html:44 templates/dcim/platform.html:41 -#: templates/extras/configtemplate.html:10 -#: templates/virtualization/virtualmachine.html:48 -#: templates/virtualization/virtualmachine/render_config.html:11 -#: templates/virtualization/virtualmachine/render_config.html:14 -#: virtualization/tables/virtualmachines.py:107 +#: netbox/dcim/tables/devices.py:100 netbox/dcim/tables/devices.py:216 +#: 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/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 msgid "Config Template" msgstr "Yapılandırma Şablonu" -#: dcim/tables/devices.py:150 templates/dcim/sitegroup.html:26 +#: netbox/dcim/tables/devices.py:150 netbox/templates/dcim/sitegroup.html:26 msgid "Site Group" msgstr "Site Grubu" -#: dcim/tables/devices.py:187 dcim/tables/devices.py:1068 -#: ipam/forms/bulk_import.py:503 ipam/forms/model_forms.py:306 -#: ipam/forms/model_forms.py:315 ipam/tables/ip.py:356 ipam/tables/ip.py:423 -#: ipam/tables/ip.py:446 templates/ipam/ipaddress.html:11 -#: virtualization/tables/virtualmachines.py:95 +#: 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/templates/ipam/ipaddress.html:11 +#: netbox/virtualization/tables/virtualmachines.py:95 msgid "IP Address" msgstr "IP Adresi" -#: dcim/tables/devices.py:191 dcim/tables/devices.py:1072 -#: virtualization/tables/virtualmachines.py:86 +#: netbox/dcim/tables/devices.py:191 netbox/dcim/tables/devices.py:1072 +#: netbox/virtualization/tables/virtualmachines.py:86 msgid "IPv4 Address" msgstr "IPv4 Adresi" -#: dcim/tables/devices.py:195 dcim/tables/devices.py:1076 -#: virtualization/tables/virtualmachines.py:90 +#: netbox/dcim/tables/devices.py:195 netbox/dcim/tables/devices.py:1076 +#: netbox/virtualization/tables/virtualmachines.py:90 msgid "IPv6 Address" msgstr "IPv6 Adresi" -#: dcim/tables/devices.py:210 +#: netbox/dcim/tables/devices.py:210 msgid "VC Position" msgstr "VC Pozisyonu" -#: dcim/tables/devices.py:213 +#: netbox/dcim/tables/devices.py:213 msgid "VC Priority" msgstr "VC Önceliği" -#: dcim/tables/devices.py:220 templates/dcim/device_edit.html:38 -#: templates/dcim/devicebay_populate.html:16 +#: netbox/dcim/tables/devices.py:220 netbox/templates/dcim/device_edit.html:38 +#: netbox/templates/dcim/devicebay_populate.html:16 msgid "Parent Device" msgstr "Ebeveyn Aygıtı" -#: dcim/tables/devices.py:225 +#: netbox/dcim/tables/devices.py:225 msgid "Position (Device Bay)" msgstr "Konum (Aygıt Yuvası)" -#: dcim/tables/devices.py:234 +#: netbox/dcim/tables/devices.py:234 msgid "Console ports" msgstr "Konsol bağlantı noktaları" -#: dcim/tables/devices.py:237 +#: netbox/dcim/tables/devices.py:237 msgid "Console server ports" msgstr "Konsol sunucusu bağlantı noktaları" -#: dcim/tables/devices.py:240 +#: netbox/dcim/tables/devices.py:240 msgid "Power ports" msgstr "Güç bağlantı noktaları" -#: dcim/tables/devices.py:243 +#: netbox/dcim/tables/devices.py:243 msgid "Power outlets" msgstr "Elektrik prizleri" -#: dcim/tables/devices.py:246 dcim/tables/devices.py:1081 -#: dcim/tables/devicetypes.py:128 dcim/views.py:1042 dcim/views.py:1281 -#: dcim/views.py:1977 netbox/navigation/menu.py:94 -#: netbox/navigation/menu.py:250 templates/dcim/device/base.html:37 -#: templates/dcim/device_list.html:43 templates/dcim/devicetype/base.html:34 -#: templates/dcim/inc/moduletype_buttons.html:25 templates/dcim/module.html:34 -#: templates/dcim/virtualdevicecontext.html:61 -#: templates/dcim/virtualdevicecontext.html:81 -#: templates/virtualization/virtualmachine/base.html:27 -#: templates/virtualization/virtualmachine_list.html:14 -#: virtualization/tables/virtualmachines.py:101 virtualization/views.py:366 -#: wireless/tables/wirelesslan.py:55 +#: 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/templates/dcim/device/base.html:37 +#: netbox/templates/dcim/device_list.html:43 +#: netbox/templates/dcim/devicetype/base.html:34 +#: netbox/templates/dcim/inc/moduletype_buttons.html:25 +#: netbox/templates/dcim/module.html:34 +#: netbox/templates/dcim/virtualdevicecontext.html:61 +#: netbox/templates/dcim/virtualdevicecontext.html:81 +#: netbox/templates/virtualization/virtualmachine/base.html:27 +#: netbox/templates/virtualization/virtualmachine_list.html:14 +#: netbox/virtualization/tables/virtualmachines.py:101 +#: netbox/virtualization/views.py:364 netbox/wireless/tables/wirelesslan.py:55 msgid "Interfaces" msgstr "Arayüzler" -#: dcim/tables/devices.py:249 +#: netbox/dcim/tables/devices.py:249 msgid "Front ports" msgstr "Ön bağlantı noktaları" -#: dcim/tables/devices.py:255 +#: netbox/dcim/tables/devices.py:255 msgid "Device bays" msgstr "Cihaz yuvaları" -#: dcim/tables/devices.py:258 +#: netbox/dcim/tables/devices.py:258 msgid "Module bays" msgstr "Modül bölmeleri" -#: dcim/tables/devices.py:261 +#: netbox/dcim/tables/devices.py:261 msgid "Inventory items" msgstr "Envanter kalemleri" -#: dcim/tables/devices.py:305 dcim/tables/modules.py:56 -#: templates/dcim/modulebay.html:17 +#: netbox/dcim/tables/devices.py:305 netbox/dcim/tables/modules.py:56 +#: netbox/templates/dcim/modulebay.html:17 msgid "Module Bay" msgstr "Modül Yuvası" -#: dcim/tables/devices.py:318 dcim/tables/devicetypes.py:47 -#: dcim/tables/devicetypes.py:143 dcim/views.py:1117 dcim/views.py:2075 -#: netbox/navigation/menu.py:103 templates/dcim/device/base.html:52 -#: templates/dcim/device_list.html:71 templates/dcim/devicetype/base.html:49 -#: templates/dcim/inc/panels/inventory_items.html:6 -#: templates/dcim/inventoryitemrole.html:32 +#: netbox/dcim/tables/devices.py:318 netbox/dcim/tables/devicetypes.py:47 +#: netbox/dcim/tables/devicetypes.py:143 netbox/dcim/views.py:1115 +#: netbox/dcim/views.py:2073 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 +#: netbox/templates/dcim/inc/panels/inventory_items.html:6 +#: netbox/templates/dcim/inventoryitemrole.html:32 msgid "Inventory Items" msgstr "Envanter Öğeleri" -#: dcim/tables/devices.py:333 +#: netbox/dcim/tables/devices.py:333 msgid "Cable Color" msgstr "Kablo Rengi" -#: dcim/tables/devices.py:339 +#: netbox/dcim/tables/devices.py:339 msgid "Link Peers" msgstr "Meslektaşları Bağla" -#: dcim/tables/devices.py:342 +#: netbox/dcim/tables/devices.py:342 msgid "Mark Connected" msgstr "Bağlı İşaretle" -#: dcim/tables/devices.py:461 +#: netbox/dcim/tables/devices.py:461 msgid "Maximum draw (W)" msgstr "Maksimum çekim (W)" -#: dcim/tables/devices.py:464 +#: netbox/dcim/tables/devices.py:464 msgid "Allocated draw (W)" msgstr "Tahsis edilen çekiliş (W)" -#: dcim/tables/devices.py:558 ipam/forms/model_forms.py:701 -#: ipam/tables/fhrp.py:28 ipam/views.py:596 ipam/views.py:696 -#: netbox/navigation/menu.py:158 netbox/navigation/menu.py:160 -#: templates/dcim/interface.html:339 templates/ipam/ipaddress_bulk_add.html:15 -#: templates/ipam/service.html:40 templates/virtualization/vminterface.html:85 -#: vpn/tables/tunnels.py:98 +#: netbox/dcim/tables/devices.py:558 netbox/ipam/forms/model_forms.py: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/templates/ipam/ipaddress_bulk_add.html:15 +#: netbox/templates/ipam/service.html:40 +#: netbox/templates/virtualization/vminterface.html:85 +#: netbox/vpn/tables/tunnels.py:98 msgid "IP Addresses" msgstr "IP Adresleri" -#: dcim/tables/devices.py:564 netbox/navigation/menu.py:202 -#: templates/ipam/inc/panels/fhrp_groups.html:6 +#: netbox/dcim/tables/devices.py:564 netbox/netbox/navigation/menu.py:202 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:6 msgid "FHRP Groups" msgstr "FHRP Grupları" -#: dcim/tables/devices.py:576 templates/dcim/interface.html:89 -#: templates/virtualization/vminterface.html:67 templates/vpn/tunnel.html:18 -#: templates/vpn/tunneltermination.html:13 vpn/forms/bulk_edit.py:76 -#: vpn/forms/bulk_import.py:76 vpn/forms/filtersets.py:42 -#: vpn/forms/filtersets.py:82 vpn/forms/model_forms.py:60 -#: vpn/forms/model_forms.py:145 vpn/tables/tunnels.py:78 +#: netbox/dcim/tables/devices.py:576 netbox/templates/dcim/interface.html:89 +#: netbox/templates/virtualization/vminterface.html:67 +#: netbox/templates/vpn/tunnel.html:18 +#: netbox/templates/vpn/tunneltermination.html:13 +#: netbox/vpn/forms/bulk_edit.py:76 netbox/vpn/forms/bulk_import.py:76 +#: netbox/vpn/forms/filtersets.py:42 netbox/vpn/forms/filtersets.py:82 +#: netbox/vpn/forms/model_forms.py:60 netbox/vpn/forms/model_forms.py:145 +#: netbox/vpn/tables/tunnels.py:78 msgid "Tunnel" msgstr "Tünel" -#: dcim/tables/devices.py:604 dcim/tables/devicetypes.py:227 -#: templates/dcim/interface.html:65 +#: netbox/dcim/tables/devices.py:604 netbox/dcim/tables/devicetypes.py:227 +#: netbox/templates/dcim/interface.html:65 msgid "Management Only" msgstr "Yalnızca Yönetim" -#: dcim/tables/devices.py:623 +#: netbox/dcim/tables/devices.py:623 msgid "VDCs" msgstr "VDC'ler" -#: dcim/tables/devices.py:873 templates/dcim/modulebay.html:53 +#: netbox/dcim/tables/devices.py:873 netbox/templates/dcim/modulebay.html:53 msgid "Installed Module" msgstr "Yüklü Modül" -#: dcim/tables/devices.py:876 +#: netbox/dcim/tables/devices.py:876 msgid "Module Serial" msgstr "Modül Seri" -#: dcim/tables/devices.py:880 +#: netbox/dcim/tables/devices.py:880 msgid "Module Asset Tag" msgstr "Modül Varlık Etiketi" -#: dcim/tables/devices.py:889 +#: netbox/dcim/tables/devices.py:889 msgid "Module Status" msgstr "Modül Durumu" -#: dcim/tables/devices.py:944 dcim/tables/devicetypes.py:312 -#: templates/dcim/inventoryitem.html:40 +#: netbox/dcim/tables/devices.py:944 netbox/dcim/tables/devicetypes.py:312 +#: netbox/templates/dcim/inventoryitem.html:40 msgid "Component" msgstr "Bileşen" -#: dcim/tables/devices.py:1000 +#: netbox/dcim/tables/devices.py:1000 msgid "Items" msgstr "Öğeler" -#: dcim/tables/devicetypes.py:37 netbox/navigation/menu.py:84 -#: netbox/navigation/menu.py:86 +#: netbox/dcim/tables/devicetypes.py:37 netbox/netbox/navigation/menu.py:84 +#: netbox/netbox/navigation/menu.py:86 msgid "Device Types" msgstr "Cihaz Türleri" -#: dcim/tables/devicetypes.py:42 netbox/navigation/menu.py:87 +#: netbox/dcim/tables/devicetypes.py:42 netbox/netbox/navigation/menu.py:87 msgid "Module Types" msgstr "Modül Çeşitleri" -#: dcim/tables/devicetypes.py:52 extras/forms/filtersets.py:371 -#: extras/forms/model_forms.py:537 extras/tables/tables.py:540 -#: netbox/navigation/menu.py:78 +#: 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/netbox/navigation/menu.py:78 msgid "Platforms" msgstr "Platformlar" -#: dcim/tables/devicetypes.py:84 templates/dcim/devicetype.html:29 +#: netbox/dcim/tables/devicetypes.py:84 +#: netbox/templates/dcim/devicetype.html:29 msgid "Default Platform" msgstr "Varsayılan Platform" -#: dcim/tables/devicetypes.py:88 templates/dcim/devicetype.html:45 +#: netbox/dcim/tables/devicetypes.py:88 +#: netbox/templates/dcim/devicetype.html:45 msgid "Full Depth" msgstr "Tam Derinlik" -#: dcim/tables/devicetypes.py:98 +#: netbox/dcim/tables/devicetypes.py:98 msgid "U Height" msgstr "U Yüksekliği" -#: dcim/tables/devicetypes.py:113 dcim/tables/modules.py:26 -#: dcim/tables/racks.py:89 +#: netbox/dcim/tables/devicetypes.py:113 netbox/dcim/tables/modules.py:26 +#: netbox/dcim/tables/racks.py:89 msgid "Instances" msgstr "Örnekler" -#: dcim/tables/devicetypes.py:116 dcim/views.py:982 dcim/views.py:1221 -#: dcim/views.py:1913 netbox/navigation/menu.py:97 -#: templates/dcim/device/base.html:25 templates/dcim/device_list.html:15 -#: templates/dcim/devicetype/base.html:22 -#: templates/dcim/inc/moduletype_buttons.html:13 templates/dcim/module.html:22 +#: netbox/dcim/tables/devicetypes.py:116 netbox/dcim/views.py:980 +#: netbox/dcim/views.py:1219 netbox/dcim/views.py:1911 +#: netbox/netbox/navigation/menu.py:97 +#: netbox/templates/dcim/device/base.html:25 +#: netbox/templates/dcim/device_list.html:15 +#: netbox/templates/dcim/devicetype/base.html:22 +#: netbox/templates/dcim/inc/moduletype_buttons.html:13 +#: netbox/templates/dcim/module.html:22 msgid "Console Ports" msgstr "Konsol Bağlantı Noktaları" -#: dcim/tables/devicetypes.py:119 dcim/views.py:997 dcim/views.py:1236 -#: dcim/views.py:1929 netbox/navigation/menu.py:98 -#: templates/dcim/device/base.html:28 templates/dcim/device_list.html:22 -#: templates/dcim/devicetype/base.html:25 -#: templates/dcim/inc/moduletype_buttons.html:16 templates/dcim/module.html:25 +#: netbox/dcim/tables/devicetypes.py:119 netbox/dcim/views.py:995 +#: netbox/dcim/views.py:1234 netbox/dcim/views.py:1927 +#: netbox/netbox/navigation/menu.py:98 +#: netbox/templates/dcim/device/base.html:28 +#: netbox/templates/dcim/device_list.html:22 +#: netbox/templates/dcim/devicetype/base.html:25 +#: netbox/templates/dcim/inc/moduletype_buttons.html:16 +#: netbox/templates/dcim/module.html:25 msgid "Console Server Ports" msgstr "Konsol Sunucusu Bağlantı Noktaları" -#: dcim/tables/devicetypes.py:122 dcim/views.py:1012 dcim/views.py:1251 -#: dcim/views.py:1945 netbox/navigation/menu.py:99 -#: templates/dcim/device/base.html:31 templates/dcim/device_list.html:29 -#: templates/dcim/devicetype/base.html:28 -#: templates/dcim/inc/moduletype_buttons.html:19 templates/dcim/module.html:28 +#: netbox/dcim/tables/devicetypes.py:122 netbox/dcim/views.py:1010 +#: netbox/dcim/views.py:1249 netbox/dcim/views.py:1943 +#: netbox/netbox/navigation/menu.py:99 +#: netbox/templates/dcim/device/base.html:31 +#: netbox/templates/dcim/device_list.html:29 +#: netbox/templates/dcim/devicetype/base.html:28 +#: netbox/templates/dcim/inc/moduletype_buttons.html:19 +#: netbox/templates/dcim/module.html:28 msgid "Power Ports" msgstr "Güç Bağlantı Noktaları" -#: dcim/tables/devicetypes.py:125 dcim/views.py:1027 dcim/views.py:1266 -#: dcim/views.py:1961 netbox/navigation/menu.py:100 -#: templates/dcim/device/base.html:34 templates/dcim/device_list.html:36 -#: templates/dcim/devicetype/base.html:31 -#: templates/dcim/inc/moduletype_buttons.html:22 templates/dcim/module.html:31 +#: netbox/dcim/tables/devicetypes.py:125 netbox/dcim/views.py:1025 +#: netbox/dcim/views.py:1264 netbox/dcim/views.py:1959 +#: netbox/netbox/navigation/menu.py:100 +#: netbox/templates/dcim/device/base.html:34 +#: netbox/templates/dcim/device_list.html:36 +#: netbox/templates/dcim/devicetype/base.html:31 +#: netbox/templates/dcim/inc/moduletype_buttons.html:22 +#: netbox/templates/dcim/module.html:31 msgid "Power Outlets" msgstr "Elektrik Prizleri" -#: dcim/tables/devicetypes.py:131 dcim/views.py:1057 dcim/views.py:1296 -#: dcim/views.py:1999 netbox/navigation/menu.py:95 -#: templates/dcim/device/base.html:40 templates/dcim/devicetype/base.html:37 -#: templates/dcim/inc/moduletype_buttons.html:28 templates/dcim/module.html:37 +#: netbox/dcim/tables/devicetypes.py:131 netbox/dcim/views.py:1055 +#: netbox/dcim/views.py:1294 netbox/dcim/views.py:1997 +#: netbox/netbox/navigation/menu.py:95 +#: netbox/templates/dcim/device/base.html:40 +#: netbox/templates/dcim/devicetype/base.html:37 +#: netbox/templates/dcim/inc/moduletype_buttons.html:28 +#: netbox/templates/dcim/module.html:37 msgid "Front Ports" msgstr "Ön Bağlantı Noktaları" -#: dcim/tables/devicetypes.py:134 dcim/views.py:1072 dcim/views.py:1311 -#: dcim/views.py:2015 netbox/navigation/menu.py:96 -#: templates/dcim/device/base.html:43 templates/dcim/device_list.html:50 -#: templates/dcim/devicetype/base.html:40 -#: templates/dcim/inc/moduletype_buttons.html:31 templates/dcim/module.html:40 +#: netbox/dcim/tables/devicetypes.py:134 netbox/dcim/views.py:1070 +#: netbox/dcim/views.py:1309 netbox/dcim/views.py:2013 +#: netbox/netbox/navigation/menu.py:96 +#: netbox/templates/dcim/device/base.html:43 +#: netbox/templates/dcim/device_list.html:50 +#: netbox/templates/dcim/devicetype/base.html:40 +#: netbox/templates/dcim/inc/moduletype_buttons.html:31 +#: netbox/templates/dcim/module.html:40 msgid "Rear Ports" msgstr "Arka Bağlantı Noktaları" -#: dcim/tables/devicetypes.py:137 dcim/views.py:1102 dcim/views.py:2055 -#: netbox/navigation/menu.py:102 templates/dcim/device/base.html:49 -#: templates/dcim/device_list.html:57 templates/dcim/devicetype/base.html:46 +#: netbox/dcim/tables/devicetypes.py:137 netbox/dcim/views.py:1100 +#: netbox/dcim/views.py:2053 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ı" -#: dcim/tables/devicetypes.py:140 dcim/views.py:1087 dcim/views.py:1326 -#: dcim/views.py:2035 netbox/navigation/menu.py:101 -#: templates/dcim/device/base.html:46 templates/dcim/device_list.html:64 -#: templates/dcim/devicetype/base.html:43 -#: templates/dcim/inc/moduletype_buttons.html:34 templates/dcim/module.html:43 +#: netbox/dcim/tables/devicetypes.py:140 netbox/dcim/views.py:1085 +#: netbox/dcim/views.py:1324 netbox/dcim/views.py:2033 +#: netbox/netbox/navigation/menu.py:101 +#: netbox/templates/dcim/device/base.html:46 +#: netbox/templates/dcim/device_list.html:64 +#: netbox/templates/dcim/devicetype/base.html:43 +#: netbox/templates/dcim/inc/moduletype_buttons.html:34 +#: netbox/templates/dcim/module.html:43 msgid "Module Bays" msgstr "Modül Bölmeleri" -#: dcim/tables/power.py:36 netbox/navigation/menu.py:297 -#: templates/dcim/powerpanel.html:51 +#: netbox/dcim/tables/power.py:36 netbox/netbox/navigation/menu.py:297 +#: netbox/templates/dcim/powerpanel.html:51 msgid "Power Feeds" msgstr "Güç Beslemeleri" -#: dcim/tables/power.py:80 templates/dcim/powerfeed.html:99 +#: netbox/dcim/tables/power.py:80 netbox/templates/dcim/powerfeed.html:99 msgid "Max Utilization" msgstr "Maksimum Kullanım" -#: dcim/tables/power.py:84 +#: netbox/dcim/tables/power.py:84 msgid "Available Power (VA)" msgstr "Kullanılabilir Güç (VA)" -#: dcim/tables/racks.py:30 dcim/tables/sites.py:143 -#: netbox/navigation/menu.py:43 netbox/navigation/menu.py:47 -#: netbox/navigation/menu.py:49 +#: netbox/dcim/tables/racks.py:30 netbox/dcim/tables/sites.py:143 +#: netbox/netbox/navigation/menu.py:43 netbox/netbox/navigation/menu.py:47 +#: netbox/netbox/navigation/menu.py:49 msgid "Racks" msgstr "Raflar" -#: dcim/tables/racks.py:63 dcim/tables/racks.py:142 -#: templates/dcim/device.html:318 -#: templates/dcim/inc/panels/racktype_dimensions.html:14 +#: netbox/dcim/tables/racks.py:63 netbox/dcim/tables/racks.py:142 +#: netbox/templates/dcim/device.html:318 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:14 msgid "Height" msgstr "Yükseklik" -#: dcim/tables/racks.py:67 dcim/tables/racks.py:165 -#: templates/dcim/inc/panels/racktype_dimensions.html:18 +#: netbox/dcim/tables/racks.py:67 netbox/dcim/tables/racks.py:165 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:18 msgid "Outer Width" msgstr "Dış genişlik" -#: dcim/tables/racks.py:71 dcim/tables/racks.py:169 -#: templates/dcim/inc/panels/racktype_dimensions.html:28 +#: netbox/dcim/tables/racks.py:71 netbox/dcim/tables/racks.py:169 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:28 msgid "Outer Depth" msgstr "Dış Derinlik" -#: dcim/tables/racks.py:79 dcim/tables/racks.py:177 +#: netbox/dcim/tables/racks.py:79 netbox/dcim/tables/racks.py:177 msgid "Max Weight" msgstr "Maksimum Ağırlık" -#: dcim/tables/racks.py:154 +#: netbox/dcim/tables/racks.py:154 msgid "Space" msgstr "Uzay" -#: dcim/tables/sites.py:30 dcim/tables/sites.py:57 -#: extras/forms/filtersets.py:351 extras/forms/model_forms.py:517 -#: ipam/forms/bulk_edit.py:131 ipam/forms/model_forms.py:153 -#: ipam/tables/asn.py:66 netbox/navigation/menu.py:15 -#: netbox/navigation/menu.py:17 +#: netbox/dcim/tables/sites.py:30 netbox/dcim/tables/sites.py:57 +#: netbox/extras/forms/filtersets.py: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/netbox/navigation/menu.py:15 netbox/netbox/navigation/menu.py:17 msgid "Sites" msgstr "Siteler" -#: dcim/tests/test_api.py:47 +#: netbox/dcim/tests/test_api.py:47 msgid "Test case must set peer_termination_type" msgstr "Test senaryosu peer_termination_type ayarlamalıdır" -#: dcim/views.py:140 +#: netbox/dcim/views.py:138 #, python-brace-format msgid "Disconnected {count} {type}" msgstr "Bağlantısı kesildi {count} {type}" -#: dcim/views.py:740 netbox/navigation/menu.py:51 +#: netbox/dcim/views.py:738 netbox/netbox/navigation/menu.py:51 msgid "Reservations" msgstr "Rezervasyon" -#: dcim/views.py:759 templates/dcim/location.html:90 -#: templates/dcim/site.html:140 +#: netbox/dcim/views.py:757 netbox/templates/dcim/location.html:90 +#: netbox/templates/dcim/site.html:140 msgid "Non-Racked Devices" msgstr "Raf Olmayan Cihazlar" -#: dcim/views.py:2088 extras/forms/model_forms.py:577 -#: templates/extras/configcontext.html:10 -#: virtualization/forms/model_forms.py:225 virtualization/views.py:407 +#: netbox/dcim/views.py:2086 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 msgid "Config Context" msgstr "Yapılandırma Bağlamı" -#: dcim/views.py:2098 virtualization/views.py:417 +#: netbox/dcim/views.py:2096 netbox/virtualization/views.py:415 msgid "Render Config" msgstr "Oluştur Yapılandırması" -#: dcim/views.py:2131 virtualization/views.py:450 +#: 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}" -#: dcim/views.py:2149 extras/tables/tables.py:550 -#: netbox/navigation/menu.py:247 netbox/navigation/menu.py:249 -#: virtualization/views.py:180 +#: 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 msgid "Virtual Machines" msgstr "Sanal Makineler" -#: dcim/views.py:2897 +#: netbox/dcim/views.py:2907 #, python-brace-format msgid "Installed device {device} in bay {device_bay}." msgstr "Yüklü cihaz {device} körfezde {device_bay}." -#: dcim/views.py:2938 +#: netbox/dcim/views.py:2948 #, python-brace-format msgid "Removed device {device} from bay {device_bay}." msgstr "Kaldırılan cihaz {device} körfezden {device_bay}." -#: dcim/views.py:3044 ipam/tables/ip.py:234 +#: netbox/dcim/views.py:3054 netbox/ipam/tables/ip.py:234 msgid "Children" msgstr "Çocuklar" -#: dcim/views.py:3510 +#: netbox/dcim/views.py:3520 #, python-brace-format msgid "Added member {device}" msgstr "Eklenen üye {device}" -#: dcim/views.py:3557 +#: netbox/dcim/views.py:3567 #, 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." -#: dcim/views.py:3570 +#: netbox/dcim/views.py:3580 #, python-brace-format msgid "Removed {device} from virtual chassis {chassis}" msgstr "Kaldırıldı {device} sanal kasadan {chassis}" -#: extras/api/customfields.py:89 +#: netbox/extras/api/customfields.py:89 #, python-brace-format msgid "Unknown related object(s): {name}" msgstr "Bilinmeyen ilgili nesne (ler): {name}" -#: extras/api/serializers_/customfields.py:73 +#: netbox/extras/api/serializers_/customfields.py:73 msgid "Changing the type of custom fields is not supported." msgstr "Özel alanların türünü değiştirmek desteklenmez." -#: extras/api/serializers_/scripts.py:70 extras/api/serializers_/scripts.py:75 +#: netbox/extras/api/serializers_/scripts.py:70 +#: netbox/extras/api/serializers_/scripts.py:75 msgid "Scheduling is not enabled for this script." msgstr "Bu komut dosyası için zamanlama etkin değil." -#: extras/choices.py:30 extras/forms/misc.py:14 +#: netbox/extras/choices.py:30 netbox/extras/forms/misc.py:14 msgid "Text" msgstr "Metin" -#: extras/choices.py:31 +#: netbox/extras/choices.py:31 msgid "Text (long)" msgstr "Metin (uzun)" -#: extras/choices.py:32 +#: netbox/extras/choices.py:32 msgid "Integer" msgstr "Tamsayı" -#: extras/choices.py:33 +#: netbox/extras/choices.py:33 msgid "Decimal" msgstr "Ondalık" -#: extras/choices.py:34 +#: netbox/extras/choices.py:34 msgid "Boolean (true/false)" msgstr "Boolean (doğru/yanlış)" -#: extras/choices.py:35 +#: netbox/extras/choices.py:35 msgid "Date" msgstr "TARİH" -#: extras/choices.py:36 +#: netbox/extras/choices.py:36 msgid "Date & time" msgstr "Tarih ve saat" -#: extras/choices.py:38 +#: netbox/extras/choices.py:38 msgid "JSON" msgstr "JSON" -#: extras/choices.py:39 +#: netbox/extras/choices.py:39 msgid "Selection" msgstr "Seçim" -#: extras/choices.py:40 +#: netbox/extras/choices.py:40 msgid "Multiple selection" msgstr "Çoklu seçim" -#: extras/choices.py:42 +#: netbox/extras/choices.py:42 msgid "Multiple objects" msgstr "Birden çok nesne" -#: extras/choices.py:53 netbox/preferences.py:21 -#: templates/extras/customfield.html:78 vpn/choices.py:20 -#: wireless/choices.py:27 +#: netbox/extras/choices.py:53 netbox/netbox/preferences.py:21 +#: netbox/templates/extras/customfield.html:78 netbox/vpn/choices.py:20 +#: netbox/wireless/choices.py:27 msgid "Disabled" msgstr "Engelli" -#: extras/choices.py:54 +#: netbox/extras/choices.py:54 msgid "Loose" msgstr "Gevşek" -#: extras/choices.py:55 +#: netbox/extras/choices.py:55 msgid "Exact" msgstr "Kesin" -#: extras/choices.py:66 +#: netbox/extras/choices.py:66 msgid "Always" msgstr "Her zaman" -#: extras/choices.py:67 +#: netbox/extras/choices.py:67 msgid "If set" msgstr "Ayarlanmışsa" -#: extras/choices.py:68 extras/choices.py:81 +#: netbox/extras/choices.py:68 netbox/extras/choices.py:81 msgid "Hidden" msgstr "Gizli" -#: extras/choices.py:79 +#: netbox/extras/choices.py:79 msgid "Yes" msgstr "Evet" -#: extras/choices.py:80 +#: netbox/extras/choices.py:80 msgid "No" msgstr "Hayır" -#: extras/choices.py:108 templates/tenancy/contact.html:57 -#: tenancy/forms/bulk_edit.py:118 wireless/forms/model_forms.py:168 +#: 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 msgid "Link" msgstr "Bağlantı" -#: extras/choices.py:124 +#: netbox/extras/choices.py:124 msgid "Newest" msgstr "En yeni" -#: extras/choices.py:125 +#: netbox/extras/choices.py:125 msgid "Oldest" msgstr "En eski" -#: extras/choices.py:126 +#: netbox/extras/choices.py:126 msgid "Alphabetical (A-Z)" msgstr "Alfabetik (A-Z)" -#: extras/choices.py:127 +#: netbox/extras/choices.py:127 msgid "Alphabetical (Z-A)" msgstr "Alfabetik (Z-A)" -#: extras/choices.py:144 extras/choices.py:167 +#: netbox/extras/choices.py:144 netbox/extras/choices.py:167 msgid "Info" msgstr "Bilgi" -#: extras/choices.py:145 extras/choices.py:168 +#: netbox/extras/choices.py:145 netbox/extras/choices.py:168 msgid "Success" msgstr "Başarı" -#: extras/choices.py:146 extras/choices.py:169 +#: netbox/extras/choices.py:146 netbox/extras/choices.py:169 msgid "Warning" msgstr "Uyarı" -#: extras/choices.py:147 +#: netbox/extras/choices.py:147 msgid "Danger" msgstr "Tehlike" -#: extras/choices.py:165 +#: netbox/extras/choices.py:165 msgid "Debug" msgstr "Hata ayıklama" -#: extras/choices.py:166 netbox/choices.py:101 +#: netbox/extras/choices.py:166 netbox/netbox/choices.py:101 msgid "Default" msgstr "Varsayılan" -#: extras/choices.py:170 +#: netbox/extras/choices.py:170 msgid "Failure" msgstr "Başarısızlık" -#: extras/choices.py:186 +#: netbox/extras/choices.py:186 msgid "Hourly" msgstr "Saatlik" -#: extras/choices.py:187 +#: netbox/extras/choices.py:187 msgid "12 hours" msgstr "12 saat" -#: extras/choices.py:188 +#: netbox/extras/choices.py:188 msgid "Daily" msgstr "Günlük" -#: extras/choices.py:189 +#: netbox/extras/choices.py:189 msgid "Weekly" msgstr "Haftalık" -#: extras/choices.py:190 +#: netbox/extras/choices.py:190 msgid "30 days" msgstr "30 gün" -#: extras/choices.py:226 templates/dcim/virtualchassis_edit.html:107 -#: templates/generic/bulk_add_component.html:68 -#: templates/generic/object_edit.html:47 templates/generic/object_edit.html:80 -#: templates/ipam/inc/ipaddress_edit_header.html:7 +#: netbox/extras/choices.py:226 +#: 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/ipam/inc/ipaddress_edit_header.html:7 msgid "Create" msgstr "Oluştur" -#: extras/choices.py:227 +#: netbox/extras/choices.py:227 msgid "Update" msgstr "Güncelleme" -#: extras/choices.py:228 templates/circuits/inc/circuit_termination.html:23 -#: templates/dcim/inc/panels/inventory_items.html:37 -#: templates/dcim/powerpanel.html:66 templates/extras/script_list.html:35 -#: templates/generic/bulk_delete.html:20 templates/generic/bulk_delete.html:66 -#: templates/generic/object_delete.html:19 templates/htmx/delete_form.html:57 -#: templates/ipam/inc/panels/fhrp_groups.html:48 -#: templates/users/objectpermission.html:46 -#: utilities/templates/buttons/delete.html:11 +#: netbox/extras/choices.py:228 +#: netbox/templates/circuits/inc/circuit_termination.html:23 +#: netbox/templates/dcim/inc/panels/inventory_items.html:37 +#: netbox/templates/dcim/powerpanel.html:66 +#: netbox/templates/extras/script_list.html:35 +#: netbox/templates/generic/bulk_delete.html:20 +#: netbox/templates/generic/bulk_delete.html:66 +#: netbox/templates/generic/object_delete.html:19 +#: netbox/templates/htmx/delete_form.html:57 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:48 +#: netbox/templates/users/objectpermission.html:46 +#: netbox/utilities/templates/buttons/delete.html:11 msgid "Delete" msgstr "Sil" -#: extras/choices.py:252 netbox/choices.py:57 netbox/choices.py:102 +#: netbox/extras/choices.py:252 netbox/netbox/choices.py:57 +#: netbox/netbox/choices.py:102 msgid "Blue" msgstr "Mavi" -#: extras/choices.py:253 netbox/choices.py:56 netbox/choices.py:103 +#: netbox/extras/choices.py:253 netbox/netbox/choices.py:56 +#: netbox/netbox/choices.py:103 msgid "Indigo" msgstr "çivit mavisi" -#: extras/choices.py:254 netbox/choices.py:54 netbox/choices.py:104 +#: netbox/extras/choices.py:254 netbox/netbox/choices.py:54 +#: netbox/netbox/choices.py:104 msgid "Purple" msgstr "Mor" -#: extras/choices.py:255 netbox/choices.py:51 netbox/choices.py:105 +#: netbox/extras/choices.py:255 netbox/netbox/choices.py:51 +#: netbox/netbox/choices.py:105 msgid "Pink" msgstr "Pembe" -#: extras/choices.py:256 netbox/choices.py:50 netbox/choices.py:106 +#: netbox/extras/choices.py:256 netbox/netbox/choices.py:50 +#: netbox/netbox/choices.py:106 msgid "Red" msgstr "Kırmızı" -#: extras/choices.py:257 netbox/choices.py:68 netbox/choices.py:107 +#: netbox/extras/choices.py:257 netbox/netbox/choices.py:68 +#: netbox/netbox/choices.py:107 msgid "Orange" msgstr "Portakal" -#: extras/choices.py:258 netbox/choices.py:66 netbox/choices.py:108 +#: netbox/extras/choices.py:258 netbox/netbox/choices.py:66 +#: netbox/netbox/choices.py:108 msgid "Yellow" msgstr "Sarı" -#: extras/choices.py:259 netbox/choices.py:63 netbox/choices.py:109 +#: netbox/extras/choices.py:259 netbox/netbox/choices.py:63 +#: netbox/netbox/choices.py:109 msgid "Green" msgstr "Yeşil" -#: extras/choices.py:260 netbox/choices.py:60 netbox/choices.py:110 +#: netbox/extras/choices.py:260 netbox/netbox/choices.py:60 +#: netbox/netbox/choices.py:110 msgid "Teal" msgstr "çamurcun" -#: extras/choices.py:261 netbox/choices.py:59 netbox/choices.py:111 +#: netbox/extras/choices.py:261 netbox/netbox/choices.py:59 +#: netbox/netbox/choices.py:111 msgid "Cyan" msgstr "Mavi" -#: extras/choices.py:262 netbox/choices.py:112 +#: netbox/extras/choices.py:262 netbox/netbox/choices.py:112 msgid "Gray" msgstr "Gri" -#: extras/choices.py:263 netbox/choices.py:74 netbox/choices.py:113 +#: netbox/extras/choices.py:263 netbox/netbox/choices.py:74 +#: netbox/netbox/choices.py:113 msgid "Black" msgstr "Siyah" -#: extras/choices.py:264 netbox/choices.py:75 netbox/choices.py:114 +#: netbox/extras/choices.py:264 netbox/netbox/choices.py:75 +#: netbox/netbox/choices.py:114 msgid "White" msgstr "Beyaz" -#: extras/choices.py:279 extras/forms/model_forms.py:353 -#: extras/forms/model_forms.py:430 templates/extras/webhook.html:10 +#: netbox/extras/choices.py:279 netbox/extras/forms/model_forms.py:353 +#: netbox/extras/forms/model_forms.py:430 +#: netbox/templates/extras/webhook.html:10 msgid "Webhook" msgstr "Web kancası" -#: extras/choices.py:280 extras/forms/model_forms.py:418 -#: templates/extras/script/base.html:29 +#: netbox/extras/choices.py:280 netbox/extras/forms/model_forms.py:418 +#: netbox/templates/extras/script/base.html:29 msgid "Script" msgstr "Senaryo" -#: extras/choices.py:281 +#: netbox/extras/choices.py:281 msgid "Notification" msgstr "Bildirim" -#: extras/conditions.py:54 +#: netbox/extras/conditions.py:54 #, python-brace-format msgid "Unknown operator: {op}. Must be one of: {operators}" msgstr "Bilinmeyen operatör: {op}. Şunlardan biri olmalı: {operators}" -#: extras/conditions.py:58 +#: netbox/extras/conditions.py:58 #, python-brace-format msgid "Unsupported value type: {value}" msgstr "Desteklenmeyen değer türü: {value}" -#: extras/conditions.py:60 +#: netbox/extras/conditions.py:60 #, python-brace-format msgid "Invalid type for {op} operation: {value}" msgstr "Geçersiz tür {op} operasyon: {value}" -#: extras/conditions.py:137 +#: netbox/extras/conditions.py:137 #, python-brace-format msgid "Ruleset must be a dictionary, not {ruleset}." msgstr "Kural seti bir sözlük olmalı, değil {ruleset}." -#: extras/conditions.py:142 +#: netbox/extras/conditions.py:142 msgid "Invalid logic type: must be 'AND' or 'OR'. Please check documentation." msgstr "" "Geçersiz mantık türü: 'AND' veya 'OR' olmalıdır. Lütfen belgeleri kontrol " "edin." -#: extras/conditions.py:154 +#: netbox/extras/conditions.py:154 msgid "Incorrect key(s) informed. Please check documentation." msgstr "Yanlış anahtar (ler) bilgilendirildi. Lütfen belgeleri kontrol edin." -#: extras/dashboard/forms.py:38 +#: netbox/extras/dashboard/forms.py:38 msgid "Widget type" msgstr "Widget türü" -#: extras/dashboard/utils.py:36 +#: netbox/extras/dashboard/utils.py:36 #, python-brace-format msgid "Unregistered widget class: {name}" msgstr "Kayıtlı olmayan widget sınıfı: {name}" -#: extras/dashboard/widgets.py:125 +#: netbox/extras/dashboard/widgets.py:125 #, python-brace-format msgid "{class_name} must define a render() method." msgstr "{class_name} bir render () yöntemi tanımlamalıdır." -#: extras/dashboard/widgets.py:144 +#: netbox/extras/dashboard/widgets.py:144 msgid "Note" msgstr "Not" -#: extras/dashboard/widgets.py:145 +#: netbox/extras/dashboard/widgets.py:145 msgid "Display some arbitrary custom content. Markdown is supported." msgstr "Bazı rastgele özel içerikleri görüntüleyin. Markdown desteklenir." -#: extras/dashboard/widgets.py:158 +#: netbox/extras/dashboard/widgets.py:158 msgid "Object Counts" msgstr "Nesne Sayıları" -#: extras/dashboard/widgets.py:159 +#: netbox/extras/dashboard/widgets.py:159 msgid "" "Display a set of NetBox models and the number of objects created for each " "type." @@ -6894,267 +7434,289 @@ msgstr "" "Bir dizi NetBox modeli ve her tür için oluşturulan nesne sayısını " "görüntüleyin." -#: extras/dashboard/widgets.py:169 +#: netbox/extras/dashboard/widgets.py:169 msgid "Filters to apply when counting the number of objects" msgstr "Nesne sayısını sayarken uygulanacak filtreler" -#: extras/dashboard/widgets.py:177 +#: netbox/extras/dashboard/widgets.py:177 msgid "Invalid format. Object filters must be passed as a dictionary." msgstr "Geçersiz biçim. Nesne filtreleri sözlük olarak iletilmelidir." -#: extras/dashboard/widgets.py:208 +#: netbox/extras/dashboard/widgets.py:208 msgid "Object List" msgstr "Nesne Listesi" -#: extras/dashboard/widgets.py:209 +#: netbox/extras/dashboard/widgets.py:209 msgid "Display an arbitrary list of objects." msgstr "İsteğe bağlı bir nesne listesi görüntüleyin." -#: extras/dashboard/widgets.py:222 +#: netbox/extras/dashboard/widgets.py:222 msgid "The default number of objects to display" msgstr "Görüntülenecek nesnelerin varsayılan sayısı" -#: extras/dashboard/widgets.py:234 +#: netbox/extras/dashboard/widgets.py:234 msgid "Invalid format. URL parameters must be passed as a dictionary." msgstr "Geçersiz biçim. URL parametreleri sözlük olarak iletilmelidir." -#: extras/dashboard/widgets.py:274 +#: netbox/extras/dashboard/widgets.py:274 msgid "RSS Feed" msgstr "RSS Beslemesi" -#: extras/dashboard/widgets.py:279 +#: netbox/extras/dashboard/widgets.py:279 msgid "Embed an RSS feed from an external website." msgstr "Harici bir web sitesinden bir RSS beslemesi ekleyin." -#: extras/dashboard/widgets.py:286 +#: netbox/extras/dashboard/widgets.py:286 msgid "Feed URL" msgstr "Akış URL'si" -#: extras/dashboard/widgets.py:291 +#: netbox/extras/dashboard/widgets.py:291 msgid "The maximum number of objects to display" msgstr "Görüntülenecek maksimum nesne sayısı" -#: extras/dashboard/widgets.py:296 +#: netbox/extras/dashboard/widgets.py:296 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)" -#: extras/dashboard/widgets.py:348 templates/account/base.html:10 -#: templates/account/bookmarks.html:7 templates/inc/user_menu.html:48 +#: netbox/extras/dashboard/widgets.py:348 +#: netbox/templates/account/base.html:10 +#: netbox/templates/account/bookmarks.html:7 +#: netbox/templates/inc/user_menu.html:48 msgid "Bookmarks" msgstr "Yer İşaretleri" -#: extras/dashboard/widgets.py:352 +#: netbox/extras/dashboard/widgets.py:352 msgid "Show your personal bookmarks" msgstr "Kişisel yer imlerinizi gösterin" -#: extras/events.py:147 +#: netbox/extras/events.py:147 #, 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}" -#: extras/events.py:192 +#: netbox/extras/events.py:192 #, python-brace-format msgid "Cannot import events pipeline {name} error: {error}" msgstr "Olaylar boru hattı içe aktarılamıyor {name} hata: {error}" -#: extras/filtersets.py:45 +#: netbox/extras/filtersets.py:45 msgid "Script module (ID)" msgstr "Komut dosyası modülü (ID)" -#: extras/filtersets.py:254 extras/filtersets.py:637 extras/filtersets.py:665 +#: netbox/extras/filtersets.py:254 netbox/extras/filtersets.py:637 +#: netbox/extras/filtersets.py:665 msgid "Data file (ID)" msgstr "Veri dosyası (ID)" -#: extras/filtersets.py:370 users/filtersets.py:68 users/filtersets.py:191 +#: netbox/extras/filtersets.py:370 netbox/users/filtersets.py:68 +#: netbox/users/filtersets.py:191 msgid "Group (name)" msgstr "Grup (isim)" -#: extras/filtersets.py:574 virtualization/forms/filtersets.py:118 +#: netbox/extras/filtersets.py:574 +#: netbox/virtualization/forms/filtersets.py:118 msgid "Cluster type" msgstr "Küme türü" -#: extras/filtersets.py:580 virtualization/filtersets.py:95 -#: virtualization/filtersets.py:147 +#: netbox/extras/filtersets.py:580 netbox/virtualization/filtersets.py:95 +#: netbox/virtualization/filtersets.py:147 msgid "Cluster type (slug)" msgstr "Küme tipi (kısa ad)" -#: extras/filtersets.py:601 tenancy/forms/forms.py:16 -#: tenancy/forms/forms.py:39 +#: netbox/extras/filtersets.py:601 netbox/tenancy/forms/forms.py:16 +#: netbox/tenancy/forms/forms.py:39 msgid "Tenant group" msgstr "Kiracı grubu" -#: extras/filtersets.py:607 tenancy/filtersets.py:188 -#: tenancy/filtersets.py:208 +#: netbox/extras/filtersets.py:607 netbox/tenancy/filtersets.py:188 +#: netbox/tenancy/filtersets.py:208 msgid "Tenant group (slug)" msgstr "Kiracı grubu (kısa ad)" -#: extras/filtersets.py:623 extras/forms/model_forms.py:495 -#: templates/extras/tag.html:11 +#: netbox/extras/filtersets.py:623 netbox/extras/forms/model_forms.py:495 +#: netbox/templates/extras/tag.html:11 msgid "Tag" msgstr "etiket" -#: extras/filtersets.py:629 +#: netbox/extras/filtersets.py:629 msgid "Tag (slug)" msgstr "Etiket (kısa ad)" -#: extras/filtersets.py:689 extras/forms/filtersets.py:429 +#: netbox/extras/filtersets.py:689 netbox/extras/forms/filtersets.py:429 msgid "Has local config context data" msgstr "Yerel yapılandırma bağlam verilerine sahiptir" -#: extras/forms/bulk_edit.py:35 extras/forms/filtersets.py:60 +#: netbox/extras/forms/bulk_edit.py:35 netbox/extras/forms/filtersets.py:60 msgid "Group name" msgstr "Grup adı" -#: extras/forms/bulk_edit.py:43 extras/forms/filtersets.py:68 -#: extras/tables/tables.py:65 templates/extras/customfield.html:38 -#: templates/generic/bulk_import.html:118 +#: netbox/extras/forms/bulk_edit.py:43 netbox/extras/forms/filtersets.py:68 +#: netbox/extras/tables/tables.py:65 +#: netbox/templates/extras/customfield.html:38 +#: netbox/templates/generic/bulk_import.html:118 msgid "Required" msgstr "Gerekli" -#: extras/forms/bulk_edit.py:48 extras/forms/filtersets.py:75 +#: netbox/extras/forms/bulk_edit.py:48 netbox/extras/forms/filtersets.py:75 msgid "Must be unique" msgstr "Benzersiz olmalı" -#: extras/forms/bulk_edit.py:61 extras/forms/bulk_import.py:60 -#: extras/forms/filtersets.py:89 extras/models/customfields.py:209 +#: netbox/extras/forms/bulk_edit.py:61 netbox/extras/forms/bulk_import.py:60 +#: netbox/extras/forms/filtersets.py:89 +#: netbox/extras/models/customfields.py:209 msgid "UI visible" msgstr "Kullanıcı arayüzü görünür" -#: extras/forms/bulk_edit.py:66 extras/forms/bulk_import.py:66 -#: extras/forms/filtersets.py:94 extras/models/customfields.py:216 +#: netbox/extras/forms/bulk_edit.py:66 netbox/extras/forms/bulk_import.py:66 +#: netbox/extras/forms/filtersets.py:94 +#: netbox/extras/models/customfields.py:216 msgid "UI editable" msgstr "UI düzenlenebilir" -#: extras/forms/bulk_edit.py:71 extras/forms/filtersets.py:97 +#: netbox/extras/forms/bulk_edit.py:71 netbox/extras/forms/filtersets.py:97 msgid "Is cloneable" msgstr "Klonlanabilir mi" -#: extras/forms/bulk_edit.py:76 extras/forms/filtersets.py:104 +#: netbox/extras/forms/bulk_edit.py:76 netbox/extras/forms/filtersets.py:104 msgid "Minimum value" msgstr "Minimum değer" -#: extras/forms/bulk_edit.py:80 extras/forms/filtersets.py:108 +#: netbox/extras/forms/bulk_edit.py:80 netbox/extras/forms/filtersets.py:108 msgid "Maximum value" msgstr "Maksimum değer" -#: extras/forms/bulk_edit.py:84 extras/forms/filtersets.py:112 +#: netbox/extras/forms/bulk_edit.py:84 netbox/extras/forms/filtersets.py:112 msgid "Validation regex" msgstr "Doğrulama regex" -#: extras/forms/bulk_edit.py:91 extras/forms/filtersets.py:46 -#: extras/forms/model_forms.py:76 templates/extras/customfield.html:70 +#: netbox/extras/forms/bulk_edit.py:91 netbox/extras/forms/filtersets.py:46 +#: netbox/extras/forms/model_forms.py:76 +#: netbox/templates/extras/customfield.html:70 msgid "Behavior" msgstr "Davranış" -#: extras/forms/bulk_edit.py:128 extras/forms/filtersets.py:149 +#: netbox/extras/forms/bulk_edit.py:128 netbox/extras/forms/filtersets.py:149 msgid "New window" msgstr "Yeni pencere" -#: extras/forms/bulk_edit.py:137 +#: netbox/extras/forms/bulk_edit.py:137 msgid "Button class" msgstr "Düğme sınıfı" -#: extras/forms/bulk_edit.py:154 extras/forms/filtersets.py:187 -#: extras/models/models.py:409 +#: netbox/extras/forms/bulk_edit.py:154 netbox/extras/forms/filtersets.py:187 +#: netbox/extras/models/models.py:409 msgid "MIME type" msgstr "MIME türü" -#: extras/forms/bulk_edit.py:159 extras/forms/filtersets.py:190 +#: netbox/extras/forms/bulk_edit.py:159 netbox/extras/forms/filtersets.py:190 msgid "File extension" msgstr "Dosya uzantısı" -#: extras/forms/bulk_edit.py:164 extras/forms/filtersets.py:194 +#: netbox/extras/forms/bulk_edit.py:164 netbox/extras/forms/filtersets.py:194 msgid "As attachment" msgstr "Ek olarak" -#: extras/forms/bulk_edit.py:192 extras/forms/filtersets.py:236 -#: extras/tables/tables.py:256 templates/extras/savedfilter.html:29 +#: netbox/extras/forms/bulk_edit.py:192 netbox/extras/forms/filtersets.py:236 +#: netbox/extras/tables/tables.py:256 +#: netbox/templates/extras/savedfilter.html:29 msgid "Shared" msgstr "Paylaşılan" -#: extras/forms/bulk_edit.py:215 extras/forms/filtersets.py:265 -#: extras/models/models.py:174 +#: netbox/extras/forms/bulk_edit.py:215 netbox/extras/forms/filtersets.py:265 +#: netbox/extras/models/models.py:174 msgid "HTTP method" msgstr "HTTP yöntemi" -#: extras/forms/bulk_edit.py:219 extras/forms/filtersets.py:259 -#: templates/extras/webhook.html:30 +#: netbox/extras/forms/bulk_edit.py:219 netbox/extras/forms/filtersets.py:259 +#: netbox/templates/extras/webhook.html:30 msgid "Payload URL" msgstr "Yük URL'si" -#: extras/forms/bulk_edit.py:224 extras/models/models.py:214 +#: netbox/extras/forms/bulk_edit.py:224 netbox/extras/models/models.py:214 msgid "SSL verification" msgstr "SSL doğrulama" -#: extras/forms/bulk_edit.py:227 templates/extras/webhook.html:38 +#: netbox/extras/forms/bulk_edit.py:227 +#: netbox/templates/extras/webhook.html:38 msgid "Secret" msgstr "Gizli" -#: extras/forms/bulk_edit.py:232 +#: netbox/extras/forms/bulk_edit.py:232 msgid "CA file path" msgstr "CA dosya yolu" -#: extras/forms/bulk_edit.py:253 extras/forms/bulk_import.py:192 -#: extras/forms/model_forms.py:377 +#: netbox/extras/forms/bulk_edit.py:253 netbox/extras/forms/bulk_import.py:192 +#: netbox/extras/forms/model_forms.py:377 msgid "Event types" msgstr "Etkinlik türleri" -#: extras/forms/bulk_edit.py:293 +#: netbox/extras/forms/bulk_edit.py:293 msgid "Is active" msgstr "Aktif" -#: extras/forms/bulk_import.py:37 extras/forms/bulk_import.py:118 -#: extras/forms/bulk_import.py:139 extras/forms/bulk_import.py:162 -#: extras/forms/bulk_import.py:186 extras/forms/filtersets.py:137 -#: extras/forms/filtersets.py:224 extras/forms/model_forms.py:47 -#: extras/forms/model_forms.py:205 extras/forms/model_forms.py:237 -#: extras/forms/model_forms.py:278 extras/forms/model_forms.py:372 -#: extras/forms/model_forms.py:489 users/forms/model_forms.py:276 +#: netbox/extras/forms/bulk_import.py:37 +#: netbox/extras/forms/bulk_import.py:118 +#: 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/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/users/forms/model_forms.py:276 msgid "Object types" msgstr "Nesne türleri" -#: extras/forms/bulk_import.py:39 extras/forms/bulk_import.py:120 -#: extras/forms/bulk_import.py:141 extras/forms/bulk_import.py:164 -#: extras/forms/bulk_import.py:188 tenancy/forms/bulk_import.py:96 +#: netbox/extras/forms/bulk_import.py:39 +#: netbox/extras/forms/bulk_import.py:120 +#: netbox/extras/forms/bulk_import.py:141 +#: netbox/extras/forms/bulk_import.py:164 +#: netbox/extras/forms/bulk_import.py:188 +#: netbox/tenancy/forms/bulk_import.py:96 msgid "One or more assigned object types" msgstr "Bir veya daha fazla atanmış nesne türü" -#: extras/forms/bulk_import.py:44 +#: netbox/extras/forms/bulk_import.py:44 msgid "Field data type (e.g. text, integer, etc.)" msgstr "Alan veri türü (örn. Metin, tamsayı vb.)" -#: extras/forms/bulk_import.py:47 extras/forms/filtersets.py:208 -#: extras/forms/filtersets.py:281 extras/forms/model_forms.py:304 -#: extras/forms/model_forms.py:341 tenancy/forms/filtersets.py:92 +#: 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/tenancy/forms/filtersets.py:92 msgid "Object type" msgstr "Nesne türü" -#: extras/forms/bulk_import.py:50 +#: netbox/extras/forms/bulk_import.py:50 msgid "Object type (for object or multi-object fields)" msgstr "Nesne türü (nesne veya çoklu nesne alanları için)" -#: extras/forms/bulk_import.py:53 extras/forms/filtersets.py:84 +#: netbox/extras/forms/bulk_import.py:53 netbox/extras/forms/filtersets.py:84 msgid "Choice set" msgstr "Seçim seti" -#: extras/forms/bulk_import.py:57 +#: netbox/extras/forms/bulk_import.py:57 msgid "Choice set (for selection fields)" msgstr "Seçim kümesi (seçim alanları için)" -#: extras/forms/bulk_import.py:63 +#: netbox/extras/forms/bulk_import.py:63 msgid "Whether the custom field is displayed in the UI" msgstr "Özel alanın kullanıcı arayüzünde görüntülenip görüntülenmediği" -#: extras/forms/bulk_import.py:69 +#: netbox/extras/forms/bulk_import.py:69 msgid "Whether the custom field is editable in the UI" msgstr "Özel alanın kullanıcı arayüzünde düzenlenebilir olup olmadığı" -#: extras/forms/bulk_import.py:85 +#: netbox/extras/forms/bulk_import.py:85 msgid "The base set of predefined choices to use (if any)" msgstr "Kullanılacak önceden tanımlanmış seçeneklerin temel kümesi (varsa)" -#: extras/forms/bulk_import.py:91 +#: netbox/extras/forms/bulk_import.py:91 msgid "" "Quoted string of comma-separated field choices with optional labels " "separated by colon: \"choice1:First Choice,choice2:Second Choice\"" @@ -7163,185 +7725,201 @@ msgstr "" "seçeneklerinin alıntılanmış dizesi: “Seçim1:First Choice, Choice2:Second " "Choice”" -#: extras/forms/bulk_import.py:123 extras/models/models.py:323 +#: netbox/extras/forms/bulk_import.py:123 netbox/extras/models/models.py:323 msgid "button class" msgstr "düğme sınıfı" -#: extras/forms/bulk_import.py:126 extras/models/models.py:327 +#: netbox/extras/forms/bulk_import.py:126 netbox/extras/models/models.py:327 msgid "" "The class of the first link in a group will be used for the dropdown button" msgstr "" "Bir gruptaki ilk bağlantının sınıfı açılır düğme için kullanılacaktır." -#: extras/forms/bulk_import.py:193 +#: netbox/extras/forms/bulk_import.py:193 msgid "The event type(s) which will trigger this rule" msgstr "Bu kuralı tetikleyecek olay türü (ler)" -#: extras/forms/bulk_import.py:196 +#: netbox/extras/forms/bulk_import.py:196 msgid "Action object" msgstr "Eylem nesnesi" -#: extras/forms/bulk_import.py:198 +#: netbox/extras/forms/bulk_import.py:198 msgid "Webhook name or script as dotted path module.Class" msgstr "Noktalı yol olarak Webhook adı veya komut dosyası module.Class" -#: extras/forms/bulk_import.py:219 +#: netbox/extras/forms/bulk_import.py:219 #, python-brace-format msgid "Webhook {name} not found" msgstr "Web kancası {name} bulunamadı" -#: extras/forms/bulk_import.py:228 +#: netbox/extras/forms/bulk_import.py:228 #, python-brace-format msgid "Script {name} not found" msgstr "Senaryo {name} bulunamadı" -#: extras/forms/bulk_import.py:244 +#: netbox/extras/forms/bulk_import.py:244 msgid "Assigned object type" msgstr "Atanan nesne türü" -#: extras/forms/bulk_import.py:249 +#: netbox/extras/forms/bulk_import.py:249 msgid "The classification of entry" msgstr "Girişin sınıflandırılması" -#: extras/forms/bulk_import.py:261 extras/forms/model_forms.py:320 -#: netbox/navigation/menu.py:390 templates/extras/notificationgroup.html:41 -#: templates/users/group.html:29 users/forms/model_forms.py:236 -#: users/forms/model_forms.py:248 users/forms/model_forms.py:300 -#: users/tables.py:102 +#: netbox/extras/forms/bulk_import.py:261 +#: netbox/extras/forms/model_forms.py:320 netbox/netbox/navigation/menu.py:390 +#: 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 +#: netbox/users/tables.py:102 msgid "Users" msgstr "Kullanıcılar" -#: extras/forms/bulk_import.py:265 +#: netbox/extras/forms/bulk_import.py:265 msgid "User names separated by commas, encased with double quotes" msgstr "" "Virgülle ayrılmış, çift tırnak işareti ile çevrelenmiş kullanıcı adları" -#: extras/forms/bulk_import.py:268 extras/forms/model_forms.py:315 -#: netbox/navigation/menu.py:410 templates/extras/notificationgroup.html:31 -#: users/forms/model_forms.py:181 users/forms/model_forms.py:193 -#: users/forms/model_forms.py:305 users/tables.py:35 users/tables.py:106 +#: netbox/extras/forms/bulk_import.py:268 +#: netbox/extras/forms/model_forms.py:315 netbox/netbox/navigation/menu.py:410 +#: 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 +#: netbox/users/tables.py:106 msgid "Groups" msgstr "Gruplar" -#: extras/forms/bulk_import.py:272 +#: netbox/extras/forms/bulk_import.py:272 msgid "Group names separated by commas, encased with double quotes" msgstr "Virgülle ayrılmış, çift tırnak işareti ile çevrelenmiş grup adları" -#: extras/forms/filtersets.py:52 extras/forms/model_forms.py:56 +#: netbox/extras/forms/filtersets.py:52 netbox/extras/forms/model_forms.py:56 msgid "Related object type" msgstr "İlgili nesne türü" -#: extras/forms/filtersets.py:57 +#: netbox/extras/forms/filtersets.py:57 msgid "Field type" msgstr "Alan tipi" -#: extras/forms/filtersets.py:120 extras/forms/model_forms.py:157 -#: extras/tables/tables.py:91 templates/generic/bulk_import.html:154 +#: netbox/extras/forms/filtersets.py:120 +#: 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" -#: extras/forms/filtersets.py:164 extras/forms/filtersets.py:319 -#: extras/forms/filtersets.py:408 extras/forms/model_forms.py:572 -#: templates/core/job.html:96 templates/extras/eventrule.html:84 +#: 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/templates/extras/eventrule.html:84 msgid "Data" msgstr "Veriler" -#: extras/forms/filtersets.py:175 extras/forms/filtersets.py:333 -#: extras/forms/filtersets.py:418 netbox/choices.py:130 -#: utilities/forms/bulk_import.py:26 +#: netbox/extras/forms/filtersets.py:175 netbox/extras/forms/filtersets.py:333 +#: netbox/extras/forms/filtersets.py:418 netbox/netbox/choices.py:130 +#: netbox/utilities/forms/bulk_import.py:26 msgid "Data file" msgstr "Veri dosyası" -#: extras/forms/filtersets.py:183 +#: netbox/extras/forms/filtersets.py:183 msgid "Content types" msgstr "İçerik türleri" -#: extras/forms/filtersets.py:255 extras/models/models.py:179 +#: netbox/extras/forms/filtersets.py:255 netbox/extras/models/models.py:179 msgid "HTTP content type" msgstr "HTTP içerik türü" -#: extras/forms/filtersets.py:286 +#: netbox/extras/forms/filtersets.py:286 msgid "Event type" msgstr "Etkinlik türü" -#: extras/forms/filtersets.py:291 +#: netbox/extras/forms/filtersets.py:291 msgid "Action type" msgstr "Eylem türü" -#: extras/forms/filtersets.py:307 +#: netbox/extras/forms/filtersets.py:307 msgid "Tagged object type" msgstr "Etiketli nesne türü" -#: extras/forms/filtersets.py:312 +#: netbox/extras/forms/filtersets.py:312 msgid "Allowed object type" msgstr "İzin verilen nesne türü" -#: extras/forms/filtersets.py:341 extras/forms/model_forms.py:507 -#: netbox/navigation/menu.py:18 +#: netbox/extras/forms/filtersets.py:341 +#: netbox/extras/forms/model_forms.py:507 netbox/netbox/navigation/menu.py:18 msgid "Regions" msgstr "Bölgeler" -#: extras/forms/filtersets.py:346 extras/forms/model_forms.py:512 +#: netbox/extras/forms/filtersets.py:346 +#: netbox/extras/forms/model_forms.py:512 msgid "Site groups" msgstr "Site grupları" -#: extras/forms/filtersets.py:356 extras/forms/model_forms.py:522 -#: netbox/navigation/menu.py:20 templates/dcim/site.html:127 +#: netbox/extras/forms/filtersets.py:356 +#: netbox/extras/forms/model_forms.py:522 netbox/netbox/navigation/menu.py:20 +#: netbox/templates/dcim/site.html:127 msgid "Locations" msgstr "Konumlar" -#: extras/forms/filtersets.py:361 extras/forms/model_forms.py:527 +#: netbox/extras/forms/filtersets.py:361 +#: netbox/extras/forms/model_forms.py:527 msgid "Device types" msgstr "Cihaz türleri" -#: extras/forms/filtersets.py:366 extras/forms/model_forms.py:532 +#: netbox/extras/forms/filtersets.py:366 +#: netbox/extras/forms/model_forms.py:532 msgid "Roles" msgstr "Roller" -#: extras/forms/filtersets.py:376 extras/forms/model_forms.py:542 +#: netbox/extras/forms/filtersets.py:376 +#: netbox/extras/forms/model_forms.py:542 msgid "Cluster types" msgstr "Küme türleri" -#: extras/forms/filtersets.py:381 extras/forms/model_forms.py:547 +#: netbox/extras/forms/filtersets.py:381 +#: netbox/extras/forms/model_forms.py:547 msgid "Cluster groups" msgstr "Küme grupları" -#: extras/forms/filtersets.py:386 extras/forms/model_forms.py:552 -#: netbox/navigation/menu.py:255 netbox/navigation/menu.py:257 -#: templates/virtualization/clustertype.html:30 -#: virtualization/tables/clusters.py:23 virtualization/tables/clusters.py:45 +#: 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/templates/virtualization/clustertype.html:30 +#: netbox/virtualization/tables/clusters.py:23 +#: netbox/virtualization/tables/clusters.py:45 msgid "Clusters" msgstr "Kümeler" -#: extras/forms/filtersets.py:391 extras/forms/model_forms.py:557 +#: netbox/extras/forms/filtersets.py:391 +#: netbox/extras/forms/model_forms.py:557 msgid "Tenant groups" msgstr "Kiracı grupları" -#: extras/forms/model_forms.py:49 +#: netbox/extras/forms/model_forms.py:49 msgid "The type(s) of object that have this custom field" msgstr "Bu özel alana sahip nesnenin türü (leri) i" -#: extras/forms/model_forms.py:52 +#: netbox/extras/forms/model_forms.py:52 msgid "Default value" msgstr "Varsayılan değer" -#: extras/forms/model_forms.py:58 +#: netbox/extras/forms/model_forms.py:58 msgid "Type of the related object (for object/multi-object fields only)" msgstr "İlgili nesnenin türü (yalnızca nesne/çoklu nesne alanları için)" -#: extras/forms/model_forms.py:61 templates/extras/customfield.html:60 +#: netbox/extras/forms/model_forms.py:61 +#: netbox/templates/extras/customfield.html:60 msgid "Related object filter" msgstr "İlgili nesne filtresi" -#: extras/forms/model_forms.py:63 +#: netbox/extras/forms/model_forms.py:63 msgid "Specify query parameters as a JSON object." msgstr "Sorgu parametrelerini JSON nesnesi olarak belirtin." -#: extras/forms/model_forms.py:73 templates/extras/customfield.html:10 +#: netbox/extras/forms/model_forms.py:73 +#: netbox/templates/extras/customfield.html:10 msgid "Custom Field" msgstr "Özel Alan" -#: extras/forms/model_forms.py:85 +#: netbox/extras/forms/model_forms.py:85 msgid "" "The type of data stored in this field. For object/multi-object fields, " "select the related object type below." @@ -7349,7 +7927,7 @@ msgstr "" "Bu alanda depolanan veri türü. Nesne/çoklu nesne alanları için aşağıda " "ilgili nesne türünü seçin." -#: extras/forms/model_forms.py:88 +#: netbox/extras/forms/model_forms.py:88 msgid "" "This will be displayed as help text for the form field. Markdown is " "supported." @@ -7357,11 +7935,11 @@ msgstr "" "Bu, form alanı için yardım metni olarak görüntülenecektir. Markdown " "desteklenir." -#: extras/forms/model_forms.py:143 +#: netbox/extras/forms/model_forms.py:143 msgid "Related Object" msgstr "İlgili Nesne" -#: extras/forms/model_forms.py:169 +#: netbox/extras/forms/model_forms.py:169 msgid "" "Enter one choice per line. An optional label may be specified for each " "choice by appending it with a colon. Example:" @@ -7369,15 +7947,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:" -#: extras/forms/model_forms.py:212 templates/extras/customlink.html:10 +#: netbox/extras/forms/model_forms.py:212 +#: netbox/templates/extras/customlink.html:10 msgid "Custom Link" msgstr "Özel Bağlantı" -#: extras/forms/model_forms.py:214 +#: netbox/extras/forms/model_forms.py:214 msgid "Templates" msgstr "Şablonlar" -#: extras/forms/model_forms.py:226 +#: netbox/extras/forms/model_forms.py:226 #, python-brace-format msgid "" "Jinja2 template code for the link text. Reference the object as {example}. " @@ -7386,7 +7965,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." -#: extras/forms/model_forms.py:230 +#: netbox/extras/forms/model_forms.py:230 #, python-brace-format msgid "" "Jinja2 template code for the link URL. Reference the object as {example}." @@ -7394,52 +7973,58 @@ msgstr "" "Bağlantı metni için Jinja2 şablon kodu. Nesneyi {example} şeklinde referans " "alabilirsiniz. " -#: extras/forms/model_forms.py:241 extras/forms/model_forms.py:624 +#: netbox/extras/forms/model_forms.py:241 +#: netbox/extras/forms/model_forms.py:624 msgid "Template code" msgstr "Şablon kodu" -#: extras/forms/model_forms.py:247 templates/extras/exporttemplate.html:12 +#: netbox/extras/forms/model_forms.py:247 +#: netbox/templates/extras/exporttemplate.html:12 msgid "Export Template" msgstr "Dışa Aktarma Şablonu" -#: extras/forms/model_forms.py:249 +#: netbox/extras/forms/model_forms.py:249 msgid "Rendering" msgstr "Oluşturma" -#: extras/forms/model_forms.py:263 extras/forms/model_forms.py:649 +#: netbox/extras/forms/model_forms.py:263 +#: netbox/extras/forms/model_forms.py:649 msgid "Template content is populated from the remote source selected below." msgstr "Şablon içeriği aşağıda seçilen uzak kaynaktan doldurulur." -#: extras/forms/model_forms.py:270 extras/forms/model_forms.py:656 +#: netbox/extras/forms/model_forms.py:270 +#: netbox/extras/forms/model_forms.py:656 msgid "Must specify either local content or a data file" msgstr "Yerel içerik veya veri dosyası belirtmelidir" -#: extras/forms/model_forms.py:284 netbox/forms/mixins.py:70 -#: templates/extras/savedfilter.html:10 +#: netbox/extras/forms/model_forms.py:284 netbox/netbox/forms/mixins.py:70 +#: netbox/templates/extras/savedfilter.html:10 msgid "Saved Filter" msgstr "Kaydedilen Filtre" -#: extras/forms/model_forms.py:334 +#: netbox/extras/forms/model_forms.py:334 msgid "A notification group specify at least one user or group." msgstr "Bir bildirim grubu en az bir kullanıcı veya grup belirtir." -#: extras/forms/model_forms.py:356 templates/extras/webhook.html:23 +#: netbox/extras/forms/model_forms.py:356 +#: netbox/templates/extras/webhook.html:23 msgid "HTTP Request" msgstr "HTTP isteği" -#: extras/forms/model_forms.py:358 templates/extras/webhook.html:44 +#: netbox/extras/forms/model_forms.py:358 +#: netbox/templates/extras/webhook.html:44 msgid "SSL" msgstr "SSL" -#: extras/forms/model_forms.py:380 +#: netbox/extras/forms/model_forms.py:380 msgid "Action choice" msgstr "Eylem seçimi" -#: extras/forms/model_forms.py:385 +#: netbox/extras/forms/model_forms.py:385 msgid "Enter conditions in JSON format." msgstr "Koşulları girin JSON biçim." -#: extras/forms/model_forms.py:389 +#: netbox/extras/forms/model_forms.py:389 msgid "" "Enter parameters to pass to the action in JSON format." @@ -7447,111 +8032,113 @@ msgstr "" "Eyleme iletilecek parametreleri girin JSON" " biçim." -#: extras/forms/model_forms.py:394 templates/extras/eventrule.html:10 +#: netbox/extras/forms/model_forms.py:394 +#: netbox/templates/extras/eventrule.html:10 msgid "Event Rule" msgstr "Etkinlik Kuralı" -#: extras/forms/model_forms.py:395 +#: netbox/extras/forms/model_forms.py:395 msgid "Triggers" msgstr "Tetikleyiciler" -#: extras/forms/model_forms.py:442 +#: netbox/extras/forms/model_forms.py:442 msgid "Notification group" msgstr "Bildirim grubu" -#: extras/forms/model_forms.py:562 netbox/navigation/menu.py:26 -#: tenancy/tables/tenants.py:22 +#: netbox/extras/forms/model_forms.py:562 netbox/netbox/navigation/menu.py:26 +#: netbox/tenancy/tables/tenants.py:22 msgid "Tenants" msgstr "Kiracılar" -#: extras/forms/model_forms.py:606 +#: netbox/extras/forms/model_forms.py:606 msgid "Data is populated from the remote source selected below." msgstr "Veriler aşağıda seçilen uzak kaynaktan doldurulur." -#: extras/forms/model_forms.py:612 +#: netbox/extras/forms/model_forms.py:612 msgid "Must specify either local data or a data file" msgstr "Yerel veri veya veri dosyası belirtmelidir" -#: extras/forms/model_forms.py:631 templates/core/datafile.html:55 +#: netbox/extras/forms/model_forms.py:631 +#: netbox/templates/core/datafile.html:55 msgid "Content" msgstr "İçerik" -#: extras/forms/reports.py:17 extras/forms/scripts.py:23 +#: netbox/extras/forms/reports.py:17 netbox/extras/forms/scripts.py:23 msgid "Schedule at" msgstr "Şurada programlayın" -#: extras/forms/reports.py:18 +#: netbox/extras/forms/reports.py:18 msgid "Schedule execution of report to a set time" msgstr "Raporun yürütülmesini belirli bir zamana planlayın" -#: extras/forms/reports.py:23 extras/forms/scripts.py:29 +#: netbox/extras/forms/reports.py:23 netbox/extras/forms/scripts.py:29 msgid "Recurs every" msgstr "Her birini tekrarlar" -#: extras/forms/reports.py:27 +#: netbox/extras/forms/reports.py:27 msgid "Interval at which this report is re-run (in minutes)" msgstr "Bu raporun yeniden çalıştırıldığı aralık (dakika cinsinden)" -#: extras/forms/reports.py:35 extras/forms/scripts.py:41 +#: netbox/extras/forms/reports.py:35 netbox/extras/forms/scripts.py:41 #, python-brace-format msgid " (current time: {now})" msgstr " (Geçerli saat: {now})" -#: extras/forms/reports.py:45 extras/forms/scripts.py:51 +#: netbox/extras/forms/reports.py:45 netbox/extras/forms/scripts.py:51 msgid "Scheduled time must be in the future." msgstr "Planlanan zaman gelecekte olmalıdır." -#: extras/forms/scripts.py:17 +#: netbox/extras/forms/scripts.py:17 msgid "Commit changes" msgstr "Değişiklikleri gerçekleştirme" -#: extras/forms/scripts.py:18 +#: netbox/extras/forms/scripts.py:18 msgid "Commit changes to the database (uncheck for a dry-run)" msgstr "" "Veritabanındaki değişiklikleri ilet (kuru çalıştırma için işaretini " "kaldırın)" -#: extras/forms/scripts.py:24 +#: netbox/extras/forms/scripts.py:24 msgid "Schedule execution of script to a set time" msgstr "Komut dosyasının yürütülmesini belirli bir zamana planlayın" -#: extras/forms/scripts.py:33 +#: netbox/extras/forms/scripts.py:33 msgid "Interval at which this script is re-run (in minutes)" msgstr "Bu komut dosyasının yeniden çalıştırıldığı aralık (dakika cinsinden)" -#: extras/jobs.py:49 +#: netbox/extras/jobs.py:47 msgid "Database changes have been reverted automatically." msgstr "Veritabanı değişiklikleri otomatik olarak geri alındı." -#: extras/jobs.py:55 +#: netbox/extras/jobs.py:53 msgid "Script aborted with error: " msgstr "Komut dosyası hatayla iptal edildi: " -#: extras/jobs.py:65 +#: netbox/extras/jobs.py:63 msgid "An exception occurred: " msgstr "Bir istisna oluştu: " -#: extras/jobs.py:70 +#: netbox/extras/jobs.py:68 msgid "Database changes have been reverted due to error." msgstr "Veritabanı değişiklikleri hata nedeniyle geri alındı." -#: extras/management/commands/reindex.py:66 +#: netbox/extras/management/commands/reindex.py:66 msgid "No indexers found!" msgstr "Dizinleyici bulunamadı!" -#: extras/models/configs.py:130 +#: netbox/extras/models/configs.py:130 msgid "config context" msgstr "yapılandırma bağlamı" -#: extras/models/configs.py:131 +#: netbox/extras/models/configs.py:131 msgid "config contexts" msgstr "yapılandırma bağlamları" -#: extras/models/configs.py:149 extras/models/configs.py:205 +#: netbox/extras/models/configs.py:149 netbox/extras/models/configs.py:205 msgid "JSON data must be in object form. Example:" msgstr "JSON verileri nesne biçiminde olmalıdır. Örnek:" -#: extras/models/configs.py:169 +#: netbox/extras/models/configs.py:169 msgid "" "Local config context data takes precedence over source contexts in the final" " rendered config context" @@ -7559,19 +8146,19 @@ msgstr "" "Yerel yapılandırma bağlamı verileri, nihai işlenmiş yapılandırma bağlamında " "kaynak bağlamlara göre önceliklidir" -#: extras/models/configs.py:224 +#: netbox/extras/models/configs.py:224 msgid "template code" msgstr "şablon kodu" -#: extras/models/configs.py:225 +#: netbox/extras/models/configs.py:225 msgid "Jinja2 template code." msgstr "Jinja2 şablon kodu." -#: extras/models/configs.py:228 +#: netbox/extras/models/configs.py:228 msgid "environment parameters" msgstr "çevre parametreleri" -#: extras/models/configs.py:233 +#: netbox/extras/models/configs.py:233 msgid "" "Any additional" @@ -7581,39 +8168,39 @@ msgstr "" "href=\"https://jinja.palletsprojects.com/en/3.1.x/api/#jinja2.Environment\">ek" " parametreler Jinja2 ortamını inşa ederken geçmek." -#: extras/models/configs.py:240 +#: netbox/extras/models/configs.py:240 msgid "config template" msgstr "yapılandırma şablonu" -#: extras/models/configs.py:241 +#: netbox/extras/models/configs.py:241 msgid "config templates" msgstr "yapılandırma şablonları" -#: extras/models/customfields.py:75 +#: netbox/extras/models/customfields.py:75 msgid "The object(s) to which this field applies." msgstr "Bu alanın geçerli olduğu nesne (ler) dir." -#: extras/models/customfields.py:82 +#: netbox/extras/models/customfields.py:82 msgid "The type of data this custom field holds" msgstr "Bu özel alanın tuttuğu veri türü" -#: extras/models/customfields.py:89 +#: netbox/extras/models/customfields.py:89 msgid "The type of NetBox object this field maps to (for object fields)" msgstr "Bu alanın eşlendiği NetBox nesnesinin türü (nesne alanları için)" -#: extras/models/customfields.py:95 +#: netbox/extras/models/customfields.py:95 msgid "Internal field name" msgstr "İç alan adı" -#: extras/models/customfields.py:99 +#: netbox/extras/models/customfields.py:99 msgid "Only alphanumeric characters and underscores are allowed." msgstr "Yalnızca alfasayısal karakterlere ve alt çizgilere izin verilir." -#: extras/models/customfields.py:104 +#: netbox/extras/models/customfields.py:104 msgid "Double underscores are not permitted in custom field names." msgstr "Özel alan adlarında çift alt çizgilere izin verilmez." -#: extras/models/customfields.py:115 +#: netbox/extras/models/customfields.py:115 msgid "" "Name of the field as displayed to users (if not provided, 'the field's name " "will be used)" @@ -7621,19 +8208,19 @@ msgstr "" "Kullanıcılara görüntülenen alanın adı (belirtilmezse, 'alanın adı " "kullanılacaktır)" -#: extras/models/customfields.py:119 extras/models/models.py:317 +#: netbox/extras/models/customfields.py:119 netbox/extras/models/models.py:317 msgid "group name" msgstr "grup adı" -#: extras/models/customfields.py:122 +#: netbox/extras/models/customfields.py:122 msgid "Custom fields within the same group will be displayed together" msgstr "Aynı gruptaki özel alanlar birlikte görüntülenecektir" -#: extras/models/customfields.py:130 +#: netbox/extras/models/customfields.py:130 msgid "required" msgstr "gereklidir" -#: extras/models/customfields.py:132 +#: netbox/extras/models/customfields.py:132 msgid "" "This field is required when creating new objects or editing an existing " "object." @@ -7641,19 +8228,19 @@ msgstr "" "Yeni nesneler oluştururken veya mevcut bir nesneyi düzenlerken bu alan " "gereklidir." -#: extras/models/customfields.py:135 +#: netbox/extras/models/customfields.py:135 msgid "must be unique" msgstr "benzersiz olmalı" -#: extras/models/customfields.py:137 +#: netbox/extras/models/customfields.py:137 msgid "The value of this field must be unique for the assigned object" msgstr "Bu alanın değeri atanan nesne için benzersiz olmalıdır" -#: extras/models/customfields.py:140 +#: netbox/extras/models/customfields.py:140 msgid "search weight" msgstr "arama ağırlığı" -#: extras/models/customfields.py:143 +#: netbox/extras/models/customfields.py:143 msgid "" "Weighting for search. Lower values are considered more important. Fields " "with a search weight of zero will be ignored." @@ -7661,11 +8248,11 @@ msgstr "" "Arama için ağırlıklandırma. Düşük değerler daha önemli kabul edilir. Arama " "ağırlığı sıfır olan alanlar göz ardı edilecektir." -#: extras/models/customfields.py:148 +#: netbox/extras/models/customfields.py:148 msgid "filter logic" msgstr "filtre mantığı" -#: extras/models/customfields.py:152 +#: netbox/extras/models/customfields.py:152 msgid "" "Loose matches any instance of a given string; exact matches the entire " "field." @@ -7673,11 +8260,11 @@ msgstr "" "Loose, belirli bir dizgenin herhangi bir örneğiyle eşleşir; tam olarak tüm " "alanla eşleşir." -#: extras/models/customfields.py:155 +#: netbox/extras/models/customfields.py:155 msgid "default" msgstr "varsayılan" -#: extras/models/customfields.py:159 +#: netbox/extras/models/customfields.py:159 msgid "" "Default value for the field (must be a JSON value). Encapsulate strings with" " double quotes (e.g. \"Foo\")." @@ -7685,7 +8272,7 @@ msgstr "" "Alan için varsayılan değer (JSON değeri olmalıdır). Dizeleri çift tırnak " "işaretleriyle kapsülleyin (örn. “Foo”)." -#: extras/models/customfields.py:166 +#: netbox/extras/models/customfields.py:166 msgid "" "Filter the object selection choices using a query_params dict (must be a " "JSON value).Encapsulate strings with double quotes (e.g. \"Foo\")." @@ -7694,35 +8281,35 @@ msgstr "" "JSON değeri olmalıdır). Dizeleri çift tırnak işareti ile kapsülleyin (örn. " "“Foo”)." -#: extras/models/customfields.py:172 +#: netbox/extras/models/customfields.py:172 msgid "display weight" msgstr "ekran ağırlığı" -#: extras/models/customfields.py:173 +#: netbox/extras/models/customfields.py:173 msgid "Fields with higher weights appear lower in a form." msgstr "Daha yüksek ağırlığa sahip alanlar bir formda daha düşük görünür." -#: extras/models/customfields.py:178 +#: netbox/extras/models/customfields.py:178 msgid "minimum value" msgstr "minimum değer" -#: extras/models/customfields.py:179 +#: netbox/extras/models/customfields.py:179 msgid "Minimum allowed value (for numeric fields)" msgstr "İzin verilen minimum değer (sayısal alanlar için)" -#: extras/models/customfields.py:184 +#: netbox/extras/models/customfields.py:184 msgid "maximum value" msgstr "maksimum değer" -#: extras/models/customfields.py:185 +#: netbox/extras/models/customfields.py:185 msgid "Maximum allowed value (for numeric fields)" msgstr "İzin verilen maksimum değer (sayısal alanlar için)" -#: extras/models/customfields.py:191 +#: netbox/extras/models/customfields.py:191 msgid "validation regex" msgstr "doğrulama regex" -#: extras/models/customfields.py:193 +#: netbox/extras/models/customfields.py:193 #, python-brace-format msgid "" "Regular expression to enforce on text field values. Use ^ and $ to force " @@ -7733,190 +8320,192 @@ msgstr "" "zorlamak için ^ ve $ kullanın. Örneğin, ^ [A-Z]{3}$ değerleri " "tam olarak üç büyük harfle sınırlayacaktır." -#: extras/models/customfields.py:201 +#: netbox/extras/models/customfields.py:201 msgid "choice set" msgstr "seçim seti" -#: extras/models/customfields.py:210 +#: netbox/extras/models/customfields.py:210 msgid "Specifies whether the custom field is displayed in the UI" msgstr "" "Özel alanın kullanıcı arayüzünde görüntülenip görüntülenmeyeceğini belirtir" -#: extras/models/customfields.py:217 +#: netbox/extras/models/customfields.py:217 msgid "Specifies whether the custom field value can be edited in the UI" msgstr "" "Özel alan değerinin kullanıcı arayüzünde düzenlenip düzenlenemeyeceğini " "belirtir" -#: extras/models/customfields.py:221 +#: netbox/extras/models/customfields.py:221 msgid "is cloneable" msgstr "klonlanabilir" -#: extras/models/customfields.py:222 +#: netbox/extras/models/customfields.py:222 msgid "Replicate this value when cloning objects" msgstr "Nesneleri klonlarken bu değeri çoğaltın" -#: extras/models/customfields.py:239 +#: netbox/extras/models/customfields.py:239 msgid "custom field" msgstr "özel alan" -#: extras/models/customfields.py:240 +#: netbox/extras/models/customfields.py:240 msgid "custom fields" msgstr "özel alanlar" -#: extras/models/customfields.py:329 +#: netbox/extras/models/customfields.py:329 #, python-brace-format msgid "Invalid default value \"{value}\": {error}" msgstr "Geçersiz varsayılan değer”{value}“: {error}" -#: extras/models/customfields.py:336 +#: netbox/extras/models/customfields.py:336 msgid "A minimum value may be set only for numeric fields" msgstr "Minimum değer yalnızca sayısal alanlar için ayarlanabilir" -#: extras/models/customfields.py:338 +#: netbox/extras/models/customfields.py:338 msgid "A maximum value may be set only for numeric fields" msgstr "Maksimum değer yalnızca sayısal alanlar için ayarlanabilir" -#: extras/models/customfields.py:348 +#: netbox/extras/models/customfields.py:348 msgid "" "Regular expression validation is supported only for text and URL fields" msgstr "" "Düzenli ifade doğrulaması yalnızca metin ve URL alanları için desteklenir" -#: extras/models/customfields.py:354 +#: netbox/extras/models/customfields.py:354 msgid "Uniqueness cannot be enforced for boolean fields" msgstr "Boole alanları için benzersizlik uygulanamaz" -#: extras/models/customfields.py:364 +#: netbox/extras/models/customfields.py:364 msgid "Selection fields must specify a set of choices." msgstr "Seçim alanları bir dizi seçenek belirtmelidir." -#: extras/models/customfields.py:368 +#: netbox/extras/models/customfields.py:368 msgid "Choices may be set only on selection fields." msgstr "Seçenekler yalnızca seçim alanlarında ayarlanabilir." -#: extras/models/customfields.py:375 +#: netbox/extras/models/customfields.py:375 msgid "Object fields must define an object type." msgstr "Nesne alanları bir nesne türü tanımlamalıdır." -#: extras/models/customfields.py:379 +#: netbox/extras/models/customfields.py:379 #, python-brace-format msgid "{type} fields may not define an object type." msgstr "{type} alanlar bir nesne türü tanımlayamaz." -#: extras/models/customfields.py:386 +#: netbox/extras/models/customfields.py:386 msgid "A related object filter can be defined only for object fields." msgstr "" "İlgili bir nesne filtresi yalnızca nesne alanları için tanımlanabilir." -#: extras/models/customfields.py:390 +#: netbox/extras/models/customfields.py:390 msgid "Filter must be defined as a dictionary mapping attributes to values." msgstr "" "Filtre, öznitelikleri değerlerle eşleyen bir sözlük olarak tanımlanmalıdır." -#: extras/models/customfields.py:469 +#: netbox/extras/models/customfields.py:469 msgid "True" msgstr "Doğru" -#: extras/models/customfields.py:470 +#: netbox/extras/models/customfields.py:470 msgid "False" msgstr "Yanlış" -#: extras/models/customfields.py:560 +#: netbox/extras/models/customfields.py:560 #, python-brace-format msgid "Values must match this regex: {regex}" msgstr "Değerler bu normal ifadeyle eşleşmelidir: {regex}" -#: extras/models/customfields.py:654 +#: netbox/extras/models/customfields.py:654 msgid "Value must be a string." msgstr "Değer bir dize olmalıdır." -#: extras/models/customfields.py:656 +#: netbox/extras/models/customfields.py:656 #, python-brace-format msgid "Value must match regex '{regex}'" msgstr "Değer regex ile eşleşmelidir '{regex}'" -#: extras/models/customfields.py:661 +#: netbox/extras/models/customfields.py:661 msgid "Value must be an integer." msgstr "Değer bir tamsayı olmalıdır." -#: extras/models/customfields.py:664 extras/models/customfields.py:679 +#: netbox/extras/models/customfields.py:664 +#: netbox/extras/models/customfields.py:679 #, python-brace-format msgid "Value must be at least {minimum}" msgstr "Değer en az olmalıdır {minimum}" -#: extras/models/customfields.py:668 extras/models/customfields.py:683 +#: netbox/extras/models/customfields.py:668 +#: netbox/extras/models/customfields.py:683 #, python-brace-format msgid "Value must not exceed {maximum}" msgstr "Değer geçmemelidir {maximum}" -#: extras/models/customfields.py:676 +#: netbox/extras/models/customfields.py:676 msgid "Value must be a decimal." msgstr "Değer ondalık olmalıdır." -#: extras/models/customfields.py:688 +#: netbox/extras/models/customfields.py:688 msgid "Value must be true or false." msgstr "Değer doğru veya yanlış olmalıdır." -#: extras/models/customfields.py:696 +#: netbox/extras/models/customfields.py:696 msgid "Date values must be in ISO 8601 format (YYYY-MM-DD)." msgstr "Tarih değerleri ISO 8601 biçiminde olmalıdır (YYYY-AA-GG)." -#: extras/models/customfields.py:705 +#: netbox/extras/models/customfields.py:705 msgid "Date and time values must be in ISO 8601 format (YYYY-MM-DD HH:MM:SS)." msgstr "" "Tarih ve saat değerleri ISO 8601 biçiminde olmalıdır (YYYY-MM-DD HH:MM:SS)." -#: extras/models/customfields.py:712 +#: netbox/extras/models/customfields.py:712 #, python-brace-format msgid "Invalid choice ({value}) for choice set {choiceset}." msgstr "Geçersiz seçim ({value}) seçim seti için {choiceset}." -#: extras/models/customfields.py:722 +#: netbox/extras/models/customfields.py:722 #, python-brace-format msgid "Invalid choice(s) ({value}) for choice set {choiceset}." msgstr "Geçersiz seçim (ler) ({value}) seçim seti için {choiceset}." -#: extras/models/customfields.py:731 +#: netbox/extras/models/customfields.py:731 #, python-brace-format msgid "Value must be an object ID, not {type}" msgstr "Değer bir nesne kimliği olmalıdır, değil {type}" -#: extras/models/customfields.py:737 +#: netbox/extras/models/customfields.py:737 #, python-brace-format msgid "Value must be a list of object IDs, not {type}" msgstr "Değer, nesne kimliklerinin bir listesi olmalıdır, değil {type}" -#: extras/models/customfields.py:741 +#: netbox/extras/models/customfields.py:741 #, python-brace-format msgid "Found invalid object ID: {id}" msgstr "Geçersiz nesne kimliği bulundu: {id}" -#: extras/models/customfields.py:744 +#: netbox/extras/models/customfields.py:744 msgid "Required field cannot be empty." msgstr "Zorunlu alan boş olamaz." -#: extras/models/customfields.py:763 +#: netbox/extras/models/customfields.py:763 msgid "Base set of predefined choices (optional)" msgstr "Önceden tanımlanmış seçeneklerin temel kümesi (isteğe bağlı)" -#: extras/models/customfields.py:775 +#: netbox/extras/models/customfields.py:775 msgid "Choices are automatically ordered alphabetically" msgstr "Seçenekler otomatik olarak alfabetik olarak sıralanır" -#: extras/models/customfields.py:782 +#: netbox/extras/models/customfields.py:782 msgid "custom field choice set" msgstr "özel alan seçim kümesi" -#: extras/models/customfields.py:783 +#: netbox/extras/models/customfields.py:783 msgid "custom field choice sets" msgstr "özel alan seçim kümeleri" -#: extras/models/customfields.py:825 +#: netbox/extras/models/customfields.py:825 msgid "Must define base or extra choices." msgstr "Temel veya ekstra seçenekleri tanımlamalıdır." -#: extras/models/customfields.py:849 +#: netbox/extras/models/customfields.py:849 #, python-brace-format msgid "" "Cannot remove choice {choice} as there are {model} objects which reference " @@ -7925,60 +8514,60 @@ msgstr "" "Seçim kaldırılamıyor {choice} olduğu gibi {model} Ona referans veren " "nesneler." -#: extras/models/dashboard.py:18 +#: netbox/extras/models/dashboard.py:18 msgid "layout" msgstr "plan" -#: extras/models/dashboard.py:22 +#: netbox/extras/models/dashboard.py:22 msgid "config" msgstr "yapılandırma" -#: extras/models/dashboard.py:27 +#: netbox/extras/models/dashboard.py:27 msgid "dashboard" msgstr "gösterge paneli" -#: extras/models/dashboard.py:28 +#: netbox/extras/models/dashboard.py:28 msgid "dashboards" msgstr "gösterge tabloları" -#: extras/models/models.py:52 +#: netbox/extras/models/models.py:52 msgid "object types" msgstr "nesne türleri" -#: extras/models/models.py:53 +#: netbox/extras/models/models.py:53 msgid "The object(s) to which this rule applies." msgstr "Bu kuralın geçerli olduğu nesne (ler) dir." -#: extras/models/models.py:67 +#: netbox/extras/models/models.py:67 msgid "The types of event which will trigger this rule." msgstr "Bu kuralı tetikleyecek olay türleri." -#: extras/models/models.py:74 +#: netbox/extras/models/models.py:74 msgid "conditions" msgstr "koşullar" -#: extras/models/models.py:77 +#: netbox/extras/models/models.py:77 msgid "" "A set of conditions which determine whether the event will be generated." msgstr "Olayın oluşturulup oluşturulmayacağını belirleyen bir dizi koşul." -#: extras/models/models.py:85 +#: netbox/extras/models/models.py:85 msgid "action type" msgstr "eylem türü" -#: extras/models/models.py:104 +#: netbox/extras/models/models.py:104 msgid "Additional data to pass to the action object" msgstr "Eylem nesnesine iletilecek ek veriler" -#: extras/models/models.py:116 +#: netbox/extras/models/models.py:116 msgid "event rule" msgstr "olay kuralı" -#: extras/models/models.py:117 +#: netbox/extras/models/models.py:117 msgid "event rules" msgstr "etkinlik kuralları" -#: extras/models/models.py:166 +#: netbox/extras/models/models.py:166 msgid "" "This URL will be called using the HTTP method defined when the webhook is " "called. Jinja2 template processing is supported with the same context as the" @@ -7988,7 +8577,7 @@ msgstr "" "çağrılacaktır. Jinja2 şablon işleme, istek gövdesi ile aynı bağlamda " "desteklenir." -#: extras/models/models.py:181 +#: netbox/extras/models/models.py:181 msgid "" "The complete list of official content types is available burada." -#: extras/models/models.py:186 +#: netbox/extras/models/models.py:186 msgid "additional headers" msgstr "ek başlıklar" -#: extras/models/models.py:189 +#: netbox/extras/models/models.py:189 msgid "" "User-supplied HTTP headers to be sent with the request in addition to the " "HTTP content type. Headers should be defined in the format Name: " @@ -8014,11 +8603,11 @@ msgstr "" "İsim: Değer. Jinja2 şablon işleme, istek gövdesi ile aynı " "bağlamda desteklenir (aşağıda)." -#: extras/models/models.py:195 +#: netbox/extras/models/models.py:195 msgid "body template" msgstr "vücut şablonu" -#: extras/models/models.py:198 +#: netbox/extras/models/models.py:198 msgid "" "Jinja2 template for a custom request body. If blank, a JSON object " "representing the change will be included. Available context data includes: " @@ -8031,11 +8620,11 @@ msgstr "" "Kullanıcı adı, istek_kimliği, ve " "veri." -#: extras/models/models.py:204 +#: netbox/extras/models/models.py:204 msgid "secret" msgstr "gizli" -#: extras/models/models.py:208 +#: netbox/extras/models/models.py:208 msgid "" "When provided, the request will include a X-Hook-Signature " "header containing a HMAC hex digest of the payload body using the secret as " @@ -8045,16 +8634,16 @@ msgstr "" "olarak sırrı kullanan yük gövdesinin bir HMAC hex özetini içeren başlık. Sır" " istekte iletilmez." -#: extras/models/models.py:215 +#: netbox/extras/models/models.py:215 msgid "Enable SSL certificate verification. Disable with caution!" msgstr "" "SSL sertifikası doğrulamasını etkinleştirin. Dikkatle devre dışı bırakın!" -#: extras/models/models.py:221 templates/extras/webhook.html:51 +#: netbox/extras/models/models.py:221 netbox/templates/extras/webhook.html:51 msgid "CA File Path" msgstr "CA Dosya Yolu" -#: extras/models/models.py:223 +#: netbox/extras/models/models.py:223 msgid "" "The specific CA certificate file to use for SSL verification. Leave blank to" " use the system defaults." @@ -8062,65 +8651,65 @@ msgstr "" "SSL doğrulaması için kullanılacak belirli CA sertifika dosyası. Sistem " "varsayılanlarını kullanmak için boş bırakın." -#: extras/models/models.py:234 +#: netbox/extras/models/models.py:234 msgid "webhook" msgstr "web kancası" -#: extras/models/models.py:235 +#: netbox/extras/models/models.py:235 msgid "webhooks" msgstr "web kancaları" -#: extras/models/models.py:253 +#: netbox/extras/models/models.py:253 msgid "Do not specify a CA certificate file if SSL verification is disabled." msgstr "" "SSL doğrulaması devre dışı bırakılmışsa bir CA sertifika dosyası " "belirtmeyin." -#: extras/models/models.py:293 +#: netbox/extras/models/models.py:293 msgid "The object type(s) to which this link applies." msgstr "Bu bağlantının geçerli olduğu nesne türü (ler) dir." -#: extras/models/models.py:305 +#: netbox/extras/models/models.py:305 msgid "link text" msgstr "bağlantı metni" -#: extras/models/models.py:306 +#: netbox/extras/models/models.py:306 msgid "Jinja2 template code for link text" msgstr "Bağlantı metni için Jinja2 şablon kodu" -#: extras/models/models.py:309 +#: netbox/extras/models/models.py:309 msgid "link URL" msgstr "bağlantı URL'si" -#: extras/models/models.py:310 +#: netbox/extras/models/models.py:310 msgid "Jinja2 template code for link URL" msgstr "Bağlantı URL'si için Jinja2 şablon kodu" -#: extras/models/models.py:320 +#: netbox/extras/models/models.py:320 msgid "Links with the same group will appear as a dropdown menu" msgstr "Aynı gruba sahip bağlantılar açılır menü olarak görünecektir" -#: extras/models/models.py:330 +#: netbox/extras/models/models.py:330 msgid "new window" msgstr "yeni pencere" -#: extras/models/models.py:332 +#: netbox/extras/models/models.py:332 msgid "Force link to open in a new window" msgstr "Bağlantıyı yeni bir pencerede açmaya zorla" -#: extras/models/models.py:341 +#: netbox/extras/models/models.py:341 msgid "custom link" msgstr "özel bağlantı" -#: extras/models/models.py:342 +#: netbox/extras/models/models.py:342 msgid "custom links" msgstr "özel bağlantılar" -#: extras/models/models.py:389 +#: netbox/extras/models/models.py:389 msgid "The object type(s) to which this template applies." msgstr "Bu şablonun uygulandığı nesne türü (ler) dir." -#: extras/models/models.py:402 +#: netbox/extras/models/models.py:402 msgid "" "Jinja2 template code. The list of objects being exported is passed as a " "context variable named queryset." @@ -8128,1078 +8717,1145 @@ msgstr "" "Jinja2 şablon kodu. Dışa aktarılan nesnelerin listesi, adı verilen bir " "bağlam değişkeni olarak iletilir sorgulama." -#: extras/models/models.py:410 +#: netbox/extras/models/models.py:410 msgid "Defaults to text/plain; charset=utf-8" msgstr "Varsayılan olarak metin/düz; karakter kümesi = utf-8" -#: extras/models/models.py:413 +#: netbox/extras/models/models.py:413 msgid "file extension" msgstr "dosya uzantısı" -#: extras/models/models.py:416 +#: netbox/extras/models/models.py:416 msgid "Extension to append to the rendered filename" msgstr "Oluşturulan dosya adına eklenecek uzantı" -#: extras/models/models.py:419 +#: netbox/extras/models/models.py:419 msgid "as attachment" msgstr "ek olarak" -#: extras/models/models.py:421 +#: netbox/extras/models/models.py:421 msgid "Download file as attachment" msgstr "Dosya ek olarak indir" -#: extras/models/models.py:430 +#: netbox/extras/models/models.py:430 msgid "export template" msgstr "dışa aktarma şablonu" -#: extras/models/models.py:431 +#: netbox/extras/models/models.py:431 msgid "export templates" msgstr "dışa aktarma şablonları" -#: extras/models/models.py:448 +#: netbox/extras/models/models.py:448 #, python-brace-format msgid "\"{name}\" is a reserved name. Please choose a different name." msgstr "“{name}“ayrılmış bir isimdir. Lütfen farklı bir isim seçin." -#: extras/models/models.py:498 +#: netbox/extras/models/models.py:498 msgid "The object type(s) to which this filter applies." msgstr "Bu filtrenin uygulandığı nesne türü (ler) dir." -#: extras/models/models.py:530 +#: netbox/extras/models/models.py:530 msgid "shared" msgstr "paylaşılan" -#: extras/models/models.py:543 +#: netbox/extras/models/models.py:543 msgid "saved filter" msgstr "kaydedilmiş filtre" -#: extras/models/models.py:544 +#: netbox/extras/models/models.py:544 msgid "saved filters" msgstr "kaydedilmiş filtreler" -#: extras/models/models.py:562 +#: netbox/extras/models/models.py:562 msgid "Filter parameters must be stored as a dictionary of keyword arguments." msgstr "" "Filtre parametreleri, anahtar kelime argümanları sözlüğü olarak " "saklanmalıdır." -#: extras/models/models.py:590 +#: netbox/extras/models/models.py:590 msgid "image height" msgstr "görüntü yüksekliği" -#: extras/models/models.py:593 +#: netbox/extras/models/models.py:593 msgid "image width" msgstr "görüntü genişliği" -#: extras/models/models.py:610 +#: netbox/extras/models/models.py:610 msgid "image attachment" msgstr "görüntü eki" -#: extras/models/models.py:611 +#: netbox/extras/models/models.py:611 msgid "image attachments" msgstr "görüntü ekleri" -#: extras/models/models.py:625 +#: netbox/extras/models/models.py:625 #, python-brace-format msgid "Image attachments cannot be assigned to this object type ({type})." msgstr "Görüntü ekleri bu nesne türüne atanamaz ({type})." -#: extras/models/models.py:688 +#: netbox/extras/models/models.py:688 msgid "kind" msgstr "çeşit" -#: extras/models/models.py:702 +#: netbox/extras/models/models.py:702 msgid "journal entry" msgstr "dergi girişi" -#: extras/models/models.py:703 +#: netbox/extras/models/models.py:703 msgid "journal entries" msgstr "dergi girişleri" -#: extras/models/models.py:718 +#: netbox/extras/models/models.py:718 #, 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})." -#: extras/models/models.py:760 +#: netbox/extras/models/models.py:760 msgid "bookmark" msgstr "yer imi" -#: extras/models/models.py:761 +#: netbox/extras/models/models.py:761 msgid "bookmarks" msgstr "yer imleri" -#: extras/models/models.py:774 +#: netbox/extras/models/models.py:774 #, python-brace-format msgid "Bookmarks cannot be assigned to this object type ({type})." msgstr "Yer imleri bu nesne türüne atanamaz ({type})." -#: extras/models/notifications.py:43 +#: netbox/extras/models/notifications.py:43 msgid "read" msgstr "okumak" -#: extras/models/notifications.py:66 +#: netbox/extras/models/notifications.py:66 msgid "event" msgstr "olay" -#: extras/models/notifications.py:84 +#: netbox/extras/models/notifications.py:84 msgid "notification" msgstr "bildirim" -#: extras/models/notifications.py:85 +#: netbox/extras/models/notifications.py:85 msgid "notifications" msgstr "bildirimleri" -#: extras/models/notifications.py:99 extras/models/notifications.py:234 +#: netbox/extras/models/notifications.py:99 +#: netbox/extras/models/notifications.py:234 #, python-brace-format msgid "Objects of this type ({type}) do not support notifications." msgstr "Bu tür nesneler ({type}) bildirimleri desteklemez." -#: extras/models/notifications.py:137 users/models/users.py:58 -#: users/models/users.py:77 +#: netbox/extras/models/notifications.py:137 netbox/users/models/users.py:58 +#: netbox/users/models/users.py:77 msgid "groups" msgstr "gruplar" -#: extras/models/notifications.py:143 users/models/users.py:93 +#: netbox/extras/models/notifications.py:143 netbox/users/models/users.py:93 msgid "users" msgstr "kullanıcıları" -#: extras/models/notifications.py:152 +#: netbox/extras/models/notifications.py:152 msgid "notification group" msgstr "bildirim grubu" -#: extras/models/notifications.py:153 +#: netbox/extras/models/notifications.py:153 msgid "notification groups" msgstr "bildirim grupları" -#: extras/models/notifications.py:217 +#: netbox/extras/models/notifications.py:217 msgid "subscription" msgstr "abonelik" -#: extras/models/notifications.py:218 +#: netbox/extras/models/notifications.py:218 msgid "subscriptions" msgstr "abonelikler" -#: extras/models/scripts.py:42 +#: netbox/extras/models/scripts.py:42 msgid "is executable" msgstr "yürütülebilir" -#: extras/models/scripts.py:64 +#: netbox/extras/models/scripts.py:64 msgid "script" msgstr "senaryo" -#: extras/models/scripts.py:65 +#: netbox/extras/models/scripts.py:65 msgid "scripts" msgstr "senaryolar" -#: extras/models/scripts.py:111 +#: netbox/extras/models/scripts.py:111 msgid "script module" msgstr "komut dosyası modülü" -#: extras/models/scripts.py:112 +#: netbox/extras/models/scripts.py:112 msgid "script modules" msgstr "komut dosyası modülleri" -#: extras/models/search.py:22 +#: netbox/extras/models/search.py:22 msgid "timestamp" msgstr "zaman damgası" -#: extras/models/search.py:37 +#: netbox/extras/models/search.py:37 msgid "field" msgstr "tarla" -#: extras/models/search.py:45 +#: netbox/extras/models/search.py:45 msgid "value" msgstr "değer" -#: extras/models/search.py:56 +#: netbox/extras/models/search.py:56 msgid "cached value" msgstr "önbelleğe alınan değer" -#: extras/models/search.py:57 +#: netbox/extras/models/search.py:57 msgid "cached values" msgstr "önbelleğe alınan değerler" -#: extras/models/staging.py:44 +#: netbox/extras/models/staging.py:44 msgid "branch" msgstr "şube" -#: extras/models/staging.py:45 +#: netbox/extras/models/staging.py:45 msgid "branches" msgstr "dallar" -#: extras/models/staging.py:97 +#: netbox/extras/models/staging.py:97 msgid "staged change" msgstr "aşamalı değişim" -#: extras/models/staging.py:98 +#: netbox/extras/models/staging.py:98 msgid "staged changes" msgstr "aşamalı değişiklikler" -#: extras/models/tags.py:40 +#: netbox/extras/models/tags.py:40 msgid "The object type(s) to which this tag can be applied." msgstr "Bu etiketin uygulanabileceği nesne türü (ler) dir." -#: extras/models/tags.py:49 +#: netbox/extras/models/tags.py:49 msgid "tag" msgstr "etiket" -#: extras/models/tags.py:50 +#: netbox/extras/models/tags.py:50 msgid "tags" msgstr "etiketler" -#: extras/models/tags.py:78 +#: netbox/extras/models/tags.py:78 msgid "tagged item" msgstr "etiketli öğe" -#: extras/models/tags.py:79 +#: netbox/extras/models/tags.py:79 msgid "tagged items" msgstr "etiketli öğeler" -#: extras/scripts.py:429 +#: netbox/extras/scripts.py:429 msgid "Script Data" msgstr "Komut Dosyası Verileri" -#: extras/scripts.py:433 +#: netbox/extras/scripts.py:433 msgid "Script Execution Parameters" msgstr "Script Yürütme Parametreleri" -#: extras/tables/columns.py:12 templates/htmx/notifications.html:18 +#: netbox/extras/tables/columns.py:12 +#: netbox/templates/htmx/notifications.html:18 msgid "Dismiss" msgstr "Görevden alma" -#: extras/tables/tables.py:62 extras/tables/tables.py:159 -#: extras/tables/tables.py:184 extras/tables/tables.py:250 -#: extras/tables/tables.py:276 extras/tables/tables.py:412 -#: extras/tables/tables.py:446 templates/extras/customfield.html:105 -#: templates/extras/eventrule.html:27 templates/users/objectpermission.html:64 -#: users/tables.py:80 +#: netbox/extras/tables/tables.py:62 netbox/extras/tables/tables.py:159 +#: netbox/extras/tables/tables.py:184 netbox/extras/tables/tables.py:250 +#: netbox/extras/tables/tables.py:276 netbox/extras/tables/tables.py:412 +#: netbox/extras/tables/tables.py:446 +#: netbox/templates/extras/customfield.html:105 +#: netbox/templates/extras/eventrule.html:27 +#: netbox/templates/users/objectpermission.html:64 netbox/users/tables.py:80 msgid "Object Types" msgstr "Nesne Türleri" -#: extras/tables/tables.py:69 +#: netbox/extras/tables/tables.py:69 msgid "Validate Uniqueness" msgstr "Benzersizliği Doğrula" -#: extras/tables/tables.py:73 +#: netbox/extras/tables/tables.py:73 msgid "Visible" msgstr "Görünür" -#: extras/tables/tables.py:76 +#: netbox/extras/tables/tables.py:76 msgid "Editable" msgstr "Düzenlenebilir" -#: extras/tables/tables.py:82 +#: netbox/extras/tables/tables.py:82 msgid "Related Object Type" msgstr "İlgili Nesne Türü" -#: extras/tables/tables.py:86 templates/extras/customfield.html:51 +#: netbox/extras/tables/tables.py:86 +#: netbox/templates/extras/customfield.html:51 msgid "Choice Set" msgstr "Seçim Seti" -#: extras/tables/tables.py:94 +#: netbox/extras/tables/tables.py:94 msgid "Is Cloneable" msgstr "Klonlanabilir mi" -#: extras/tables/tables.py:98 templates/extras/customfield.html:118 +#: netbox/extras/tables/tables.py:98 +#: netbox/templates/extras/customfield.html:118 msgid "Minimum Value" msgstr "Minimum Değer" -#: extras/tables/tables.py:101 templates/extras/customfield.html:122 +#: netbox/extras/tables/tables.py:101 +#: netbox/templates/extras/customfield.html:122 msgid "Maximum Value" msgstr "Maksimum Değer" -#: extras/tables/tables.py:104 +#: netbox/extras/tables/tables.py:104 msgid "Validation Regex" msgstr "Doğrulama Regex" -#: extras/tables/tables.py:137 +#: netbox/extras/tables/tables.py:137 msgid "Count" msgstr "Saymak" -#: extras/tables/tables.py:140 +#: netbox/extras/tables/tables.py:140 msgid "Order Alphabetically" msgstr "Alfabetik olarak sıralayın" -#: extras/tables/tables.py:165 templates/extras/customlink.html:33 +#: netbox/extras/tables/tables.py:165 +#: netbox/templates/extras/customlink.html:33 msgid "New Window" msgstr "Yeni Pencere" -#: extras/tables/tables.py:187 +#: netbox/extras/tables/tables.py:187 msgid "As Attachment" msgstr "Ek Olarak" -#: extras/tables/tables.py:195 extras/tables/tables.py:487 -#: extras/tables/tables.py:522 templates/core/datafile.html:24 -#: templates/dcim/device/render_config.html:22 -#: templates/extras/configcontext.html:39 -#: templates/extras/configtemplate.html:31 -#: templates/extras/exporttemplate.html:45 -#: templates/generic/bulk_import.html:35 -#: templates/virtualization/virtualmachine/render_config.html:22 +#: netbox/extras/tables/tables.py: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/generic/bulk_import.html:35 +#: netbox/templates/virtualization/virtualmachine/render_config.html:22 msgid "Data File" msgstr "Veri Dosyası" -#: extras/tables/tables.py:200 extras/tables/tables.py:499 -#: extras/tables/tables.py:527 +#: netbox/extras/tables/tables.py:200 netbox/extras/tables/tables.py:499 +#: netbox/extras/tables/tables.py:527 msgid "Synced" msgstr "Senkronize" -#: extras/tables/tables.py:227 +#: netbox/extras/tables/tables.py:227 msgid "Image" msgstr "Görüntü" -#: extras/tables/tables.py:232 +#: netbox/extras/tables/tables.py:232 msgid "Size (Bytes)" msgstr "Boyut (Bayt)" -#: extras/tables/tables.py:339 +#: netbox/extras/tables/tables.py:339 msgid "Read" msgstr "Okumak" -#: extras/tables/tables.py:382 +#: netbox/extras/tables/tables.py:382 msgid "SSL Validation" msgstr "SSL Doğrulama" -#: extras/tables/tables.py:418 templates/extras/eventrule.html:37 +#: netbox/extras/tables/tables.py:418 +#: netbox/templates/extras/eventrule.html:37 msgid "Event Types" msgstr "Etkinlik Türleri" -#: extras/tables/tables.py:535 netbox/navigation/menu.py:77 -#: templates/dcim/devicerole.html:8 +#: netbox/extras/tables/tables.py:535 netbox/netbox/navigation/menu.py:77 +#: netbox/templates/dcim/devicerole.html:8 msgid "Device Roles" msgstr "Cihaz Rolleri" -#: extras/tables/tables.py:587 +#: netbox/extras/tables/tables.py:587 msgid "Comments (Short)" msgstr "Yorumlar (Kısa)" -#: extras/tables/tables.py:606 extras/tables/tables.py:640 +#: netbox/extras/tables/tables.py:606 netbox/extras/tables/tables.py:640 msgid "Line" msgstr "Çizgi" -#: extras/tables/tables.py:613 extras/tables/tables.py:650 +#: netbox/extras/tables/tables.py:613 netbox/extras/tables/tables.py:650 msgid "Level" msgstr "Seviye" -#: extras/tables/tables.py:619 extras/tables/tables.py:659 +#: netbox/extras/tables/tables.py:619 netbox/extras/tables/tables.py:659 msgid "Message" msgstr "Mesaj" -#: extras/tables/tables.py:643 +#: netbox/extras/tables/tables.py:643 msgid "Method" msgstr "Yöntemi" -#: extras/validators.py:15 +#: netbox/extras/validators.py:15 #, python-format msgid "Ensure this value is equal to %(limit_value)s." msgstr "Bu değerin eşit olduğundan emin olun %(limit_value)s." -#: extras/validators.py:26 +#: netbox/extras/validators.py:26 #, python-format msgid "Ensure this value does not equal %(limit_value)s." msgstr "Bu değerin eşit olmadığından emin olun %(limit_value)s." -#: extras/validators.py:37 +#: netbox/extras/validators.py:37 msgid "This field must be empty." msgstr "Bu alan boş olmalıdır." -#: extras/validators.py:52 +#: netbox/extras/validators.py:52 msgid "This field must not be empty." msgstr "Bu alan boş olmamalıdır." -#: extras/validators.py:94 +#: netbox/extras/validators.py:94 msgid "Validation rules must be passed as a dictionary" msgstr "Doğrulama kuralları sözlük olarak geçirilmelidir" -#: extras/validators.py:119 +#: netbox/extras/validators.py:119 #, python-brace-format msgid "Custom validation failed for {attribute}: {exception}" msgstr "Özel doğrulama başarısız oldu {attribute}: {exception}" -#: extras/validators.py:133 +#: netbox/extras/validators.py:133 #, python-brace-format msgid "Invalid attribute \"{name}\" for request" msgstr "Geçersiz öznitelik”{name}“istek için" -#: extras/validators.py:150 +#: netbox/extras/validators.py:150 #, python-brace-format msgid "Invalid attribute \"{name}\" for {model}" msgstr "\"{name}\" niteliği {model} için geçerli değil." -#: extras/views.py:960 +#: netbox/extras/views.py:960 msgid "Your dashboard has been reset." msgstr "Kontrol paneliniz sıfırlandı." -#: extras/views.py:1006 +#: netbox/extras/views.py:1006 msgid "Added widget: " msgstr "Eklenen widget: " -#: extras/views.py:1047 +#: netbox/extras/views.py:1047 msgid "Updated widget: " msgstr "Güncellenmiş widget: " -#: extras/views.py:1083 +#: netbox/extras/views.py:1083 msgid "Deleted widget: " msgstr "Silinen widget: " -#: extras/views.py:1085 +#: netbox/extras/views.py:1085 msgid "Error deleting widget: " msgstr "Widget silinirken hata oluştu: " -#: extras/views.py:1172 +#: netbox/extras/views.py:1175 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." -#: ipam/api/field_serializers.py:17 +#: netbox/ipam/api/field_serializers.py:17 msgid "Enter a valid IPv4 or IPv6 address with optional mask." msgstr "İsteğe bağlı maske ile geçerli bir IPv4 veya IPv6 adresi girin." -#: ipam/api/field_serializers.py:24 +#: netbox/ipam/api/field_serializers.py:24 #, python-brace-format msgid "Invalid IP address format: {data}" msgstr "Geçersiz IP adresi biçimi: {data}" -#: ipam/api/field_serializers.py:37 +#: netbox/ipam/api/field_serializers.py:37 msgid "Enter a valid IPv4 or IPv6 prefix and mask in CIDR notation." msgstr "CIDR gösteriminde geçerli bir IPv4 veya IPv6 öneki ve maske girin." -#: ipam/api/field_serializers.py:44 +#: netbox/ipam/api/field_serializers.py:44 #, python-brace-format msgid "Invalid IP prefix format: {data}" msgstr "Geçersiz IP önek biçimi: {data}" -#: ipam/api/views.py:358 +#: netbox/ipam/api/views.py:358 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" -#: ipam/choices.py:30 +#: netbox/ipam/choices.py:30 msgid "Container" msgstr "Konteyner" -#: ipam/choices.py:72 +#: netbox/ipam/choices.py:72 msgid "DHCP" msgstr "DHCP" -#: ipam/choices.py:73 +#: netbox/ipam/choices.py:73 msgid "SLAAC" msgstr "ZÜMRÜT" -#: ipam/choices.py:89 +#: netbox/ipam/choices.py:89 msgid "Loopback" msgstr "Geri döngü" -#: ipam/choices.py:91 +#: netbox/ipam/choices.py:91 msgid "Anycast" msgstr "Anycast" -#: ipam/choices.py:115 +#: netbox/ipam/choices.py:115 msgid "Standard" msgstr "Standart" -#: ipam/choices.py:120 +#: netbox/ipam/choices.py:120 msgid "CheckPoint" msgstr "Kontrol Noktası" -#: ipam/choices.py:123 +#: netbox/ipam/choices.py:123 msgid "Cisco" msgstr "Cisco" -#: ipam/choices.py:137 +#: netbox/ipam/choices.py:137 msgid "Plaintext" msgstr "Düz metin" -#: ipam/fields.py:36 +#: netbox/ipam/fields.py:36 #, python-brace-format msgid "Invalid IP address format: {address}" msgstr "Geçersiz IP adresi biçimi: {address}" -#: ipam/filtersets.py:48 vpn/filtersets.py:304 +#: netbox/ipam/filtersets.py:48 netbox/vpn/filtersets.py:304 msgid "Import target" msgstr "Hedefi içe aktarma" -#: ipam/filtersets.py:54 vpn/filtersets.py:310 +#: netbox/ipam/filtersets.py:54 netbox/vpn/filtersets.py:310 msgid "Import target (name)" msgstr "Hedefi içe aktarma (isim)" -#: ipam/filtersets.py:59 vpn/filtersets.py:315 +#: netbox/ipam/filtersets.py:59 netbox/vpn/filtersets.py:315 msgid "Export target" msgstr "Dışa aktarma hedefi" -#: ipam/filtersets.py:65 vpn/filtersets.py:321 +#: netbox/ipam/filtersets.py:65 netbox/vpn/filtersets.py:321 msgid "Export target (name)" msgstr "Dışa aktarma hedefi (isim)" -#: ipam/filtersets.py:86 +#: netbox/ipam/filtersets.py:86 msgid "Importing VRF" msgstr "VRF'yi içe aktarma" -#: ipam/filtersets.py:92 +#: netbox/ipam/filtersets.py:92 msgid "Import VRF (RD)" msgstr "VRF'yi içe aktarın (RD)" -#: ipam/filtersets.py:97 +#: netbox/ipam/filtersets.py:97 msgid "Exporting VRF" msgstr "VRF'yi dışa aktarma" -#: ipam/filtersets.py:103 +#: netbox/ipam/filtersets.py:103 msgid "Export VRF (RD)" msgstr "VRF'yi (RD) dışa aktarma" -#: ipam/filtersets.py:108 +#: netbox/ipam/filtersets.py:108 msgid "Importing L2VPN" msgstr "L2VPN'i içe aktarma" -#: ipam/filtersets.py:114 +#: netbox/ipam/filtersets.py:114 msgid "Importing L2VPN (identifier)" msgstr "L2VPN'i içe aktarma (tanımlayıcı)" -#: ipam/filtersets.py:119 +#: netbox/ipam/filtersets.py:119 msgid "Exporting L2VPN" msgstr "L2VPN'i dışa aktarma" -#: ipam/filtersets.py:125 +#: netbox/ipam/filtersets.py:125 msgid "Exporting L2VPN (identifier)" msgstr "L2VPN'i dışa aktarma (tanımlayıcı)" -#: ipam/filtersets.py:155 ipam/filtersets.py:281 ipam/forms/model_forms.py:229 -#: ipam/tables/ip.py:212 templates/ipam/prefix.html:12 +#: netbox/ipam/filtersets.py:155 netbox/ipam/filtersets.py:281 +#: netbox/ipam/forms/model_forms.py:229 netbox/ipam/tables/ip.py:212 +#: netbox/templates/ipam/prefix.html:12 msgid "Prefix" msgstr "Önek" -#: ipam/filtersets.py:159 ipam/filtersets.py:198 ipam/filtersets.py:221 +#: netbox/ipam/filtersets.py:159 netbox/ipam/filtersets.py:198 +#: netbox/ipam/filtersets.py:221 msgid "RIR (ID)" msgstr "RİR (İD)" -#: ipam/filtersets.py:165 ipam/filtersets.py:204 ipam/filtersets.py:227 +#: netbox/ipam/filtersets.py:165 netbox/ipam/filtersets.py:204 +#: netbox/ipam/filtersets.py:227 msgid "RIR (slug)" msgstr "RIR (kısa ad)" -#: ipam/filtersets.py:285 +#: netbox/ipam/filtersets.py:285 msgid "Within prefix" msgstr "Önek içinde" -#: ipam/filtersets.py:289 +#: netbox/ipam/filtersets.py:289 msgid "Within and including prefix" msgstr "Önek içinde ve dahil olmak üzere" -#: ipam/filtersets.py:293 +#: netbox/ipam/filtersets.py:293 msgid "Prefixes which contain this prefix or IP" msgstr "Bu önek veya IP'yi içeren önekler" -#: ipam/filtersets.py:304 ipam/filtersets.py:572 ipam/forms/bulk_edit.py:343 -#: ipam/forms/filtersets.py:196 ipam/forms/filtersets.py:331 +#: netbox/ipam/filtersets.py:304 netbox/ipam/filtersets.py:572 +#: netbox/ipam/forms/bulk_edit.py:343 netbox/ipam/forms/filtersets.py:196 +#: netbox/ipam/forms/filtersets.py:331 msgid "Mask length" msgstr "Maske uzunluğu" -#: ipam/filtersets.py:373 vpn/filtersets.py:427 +#: netbox/ipam/filtersets.py:373 netbox/vpn/filtersets.py:427 msgid "VLAN (ID)" msgstr "VLAN (KİMLİĞİ)" -#: ipam/filtersets.py:377 vpn/filtersets.py:422 +#: netbox/ipam/filtersets.py:377 netbox/vpn/filtersets.py:422 msgid "VLAN number (1-4094)" msgstr "VLAN numarası (1-4094)" -#: ipam/filtersets.py:471 ipam/filtersets.py:475 ipam/filtersets.py:567 -#: ipam/forms/model_forms.py:463 templates/tenancy/contact.html:53 -#: tenancy/forms/bulk_edit.py:113 +#: netbox/ipam/filtersets.py:471 netbox/ipam/filtersets.py:475 +#: netbox/ipam/filtersets.py:567 netbox/ipam/forms/model_forms.py:496 +#: netbox/templates/tenancy/contact.html:53 +#: netbox/tenancy/forms/bulk_edit.py:113 msgid "Address" msgstr "Adres" -#: ipam/filtersets.py:479 +#: netbox/ipam/filtersets.py:479 msgid "Ranges which contain this prefix or IP" msgstr "Bu önek veya IP'yi içeren aralıklar" -#: ipam/filtersets.py:507 ipam/filtersets.py:563 +#: netbox/ipam/filtersets.py:507 netbox/ipam/filtersets.py:563 msgid "Parent prefix" msgstr "Ebeveyn öneki" -#: ipam/filtersets.py:616 ipam/filtersets.py:856 ipam/filtersets.py:1131 -#: vpn/filtersets.py:385 +#: netbox/ipam/filtersets.py:616 netbox/ipam/filtersets.py:856 +#: netbox/ipam/filtersets.py:1131 netbox/vpn/filtersets.py:385 msgid "Virtual machine (name)" msgstr "Sanal makine (isim)" -#: ipam/filtersets.py:621 ipam/filtersets.py:861 ipam/filtersets.py:1125 -#: virtualization/filtersets.py:282 virtualization/filtersets.py:321 -#: vpn/filtersets.py:390 +#: netbox/ipam/filtersets.py:621 netbox/ipam/filtersets.py:861 +#: netbox/ipam/filtersets.py:1125 netbox/virtualization/filtersets.py:282 +#: netbox/virtualization/filtersets.py:321 netbox/vpn/filtersets.py:390 msgid "Virtual machine (ID)" msgstr "Sanal makine (ID)" -#: ipam/filtersets.py:627 vpn/filtersets.py:97 vpn/filtersets.py:396 +#: netbox/ipam/filtersets.py:627 netbox/vpn/filtersets.py:97 +#: netbox/vpn/filtersets.py:396 msgid "Interface (name)" msgstr "Arayüz (isim)" -#: ipam/filtersets.py:638 vpn/filtersets.py:108 vpn/filtersets.py:407 +#: netbox/ipam/filtersets.py:638 netbox/vpn/filtersets.py:108 +#: netbox/vpn/filtersets.py:407 msgid "VM interface (name)" msgstr "VM arabirimi (isim)" -#: ipam/filtersets.py:643 vpn/filtersets.py:113 +#: netbox/ipam/filtersets.py:643 netbox/vpn/filtersets.py:113 msgid "VM interface (ID)" msgstr "VM arabirimi (ID)" -#: ipam/filtersets.py:648 +#: netbox/ipam/filtersets.py:648 msgid "FHRP group (ID)" msgstr "FHRP grubu (ID)" -#: ipam/filtersets.py:652 +#: netbox/ipam/filtersets.py:652 msgid "Is assigned to an interface" msgstr "Bir arayüze atanır" -#: ipam/filtersets.py:656 +#: netbox/ipam/filtersets.py:656 msgid "Is assigned" msgstr "Atanmıştır" -#: ipam/filtersets.py:668 +#: netbox/ipam/filtersets.py:668 msgid "Service (ID)" msgstr "Hizmet (ID)" -#: ipam/filtersets.py:673 +#: netbox/ipam/filtersets.py:673 msgid "NAT inside IP address (ID)" msgstr "IP adresi içinde NAT (ID)" -#: ipam/filtersets.py:1041 ipam/forms/bulk_import.py:322 +#: netbox/ipam/filtersets.py:1041 netbox/ipam/forms/bulk_import.py:322 msgid "Assigned interface" msgstr "Atanmış arayüz" -#: ipam/filtersets.py:1046 +#: netbox/ipam/filtersets.py:1046 msgid "Assigned VM interface" msgstr "Atanmış VM arabirimi" -#: ipam/filtersets.py:1136 +#: netbox/ipam/filtersets.py:1136 msgid "IP address (ID)" msgstr "IP adresi (ID)" -#: ipam/filtersets.py:1142 ipam/models/ip.py:788 +#: netbox/ipam/filtersets.py:1142 netbox/ipam/models/ip.py:788 msgid "IP address" msgstr "IP adresi" -#: ipam/filtersets.py:1167 +#: netbox/ipam/filtersets.py:1167 msgid "Primary IPv4 (ID)" msgstr "Birincil IPv4 (ID)" -#: ipam/filtersets.py:1172 +#: netbox/ipam/filtersets.py:1172 msgid "Primary IPv6 (ID)" msgstr "Birincil IPv6 (ID)" -#: ipam/formfields.py:14 +#: netbox/ipam/formfields.py:14 msgid "Enter a valid IPv4 or IPv6 address (without a mask)." msgstr "Geçerli bir IPv4 veya IPv6 adresi girin (maske olmadan)." -#: ipam/formfields.py:32 +#: netbox/ipam/formfields.py:32 #, python-brace-format msgid "Invalid IPv4/IPv6 address format: {address}" msgstr "Geçersiz IPv4/IPv6 adres biçimi: {address}" -#: ipam/formfields.py:37 +#: netbox/ipam/formfields.py:37 msgid "This field requires an IP address without a mask." msgstr "Bu alan maskesiz bir IP adresi gerektirir." -#: ipam/formfields.py:39 ipam/formfields.py:61 +#: netbox/ipam/formfields.py:39 netbox/ipam/formfields.py:61 msgid "Please specify a valid IPv4 or IPv6 address." msgstr "Lütfen geçerli bir IPv4 veya IPv6 adresi belirtin." -#: ipam/formfields.py:44 +#: netbox/ipam/formfields.py:44 msgid "Enter a valid IPv4 or IPv6 address (with CIDR mask)." msgstr "Geçerli bir IPv4 veya IPv6 adresi girin (CIDR maskesi ile)." -#: ipam/formfields.py:56 +#: netbox/ipam/formfields.py:56 msgid "CIDR mask (e.g. /24) is required." msgstr "CIDR maskesi (örn. /24) gereklidir." -#: ipam/forms/bulk_create.py:13 +#: netbox/ipam/forms/bulk_create.py:13 msgid "Address pattern" msgstr "Adres deseni" -#: ipam/forms/bulk_edit.py:50 +#: netbox/ipam/forms/bulk_edit.py:50 msgid "Enforce unique space" msgstr "Benzersiz alanı uygulayın" -#: ipam/forms/bulk_edit.py:88 +#: netbox/ipam/forms/bulk_edit.py:88 msgid "Is private" msgstr "Özeldir" -#: ipam/forms/bulk_edit.py:109 ipam/forms/bulk_edit.py:138 -#: ipam/forms/bulk_edit.py:163 ipam/forms/bulk_import.py:89 -#: ipam/forms/bulk_import.py:109 ipam/forms/bulk_import.py:129 -#: ipam/forms/filtersets.py:110 ipam/forms/filtersets.py:125 -#: ipam/forms/filtersets.py:148 ipam/forms/model_forms.py:96 -#: ipam/forms/model_forms.py:109 ipam/forms/model_forms.py:131 -#: ipam/forms/model_forms.py:149 ipam/models/asns.py:31 -#: ipam/models/asns.py:103 ipam/models/ip.py:71 ipam/models/ip.py:90 -#: ipam/tables/asn.py:20 ipam/tables/asn.py:45 -#: templates/ipam/aggregate.html:18 templates/ipam/asn.html:27 -#: templates/ipam/asnrange.html:19 templates/ipam/rir.html:19 +#: netbox/ipam/forms/bulk_edit.py: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/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" -#: ipam/forms/bulk_edit.py:171 +#: netbox/ipam/forms/bulk_edit.py:171 msgid "Date added" msgstr "Eklenen tarih" -#: ipam/forms/bulk_edit.py:229 ipam/forms/model_forms.py:586 -#: ipam/forms/model_forms.py:633 ipam/tables/ip.py:251 -#: templates/ipam/vlan_edit.html:37 templates/ipam/vlangroup.html:27 +#: 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/templates/ipam/vlangroup.html:27 msgid "VLAN Group" msgstr "VLAN Grubu" -#: ipam/forms/bulk_edit.py:234 ipam/forms/bulk_import.py:185 -#: ipam/forms/filtersets.py:256 ipam/forms/model_forms.py:218 -#: ipam/models/vlans.py:234 ipam/tables/ip.py:255 -#: templates/ipam/prefix.html:60 templates/ipam/vlan.html:12 -#: templates/ipam/vlan/base.html:6 templates/ipam/vlan_edit.html:10 -#: templates/wireless/wirelesslan.html:30 vpn/forms/bulk_import.py:304 -#: vpn/forms/filtersets.py:284 vpn/forms/model_forms.py:433 -#: vpn/forms/model_forms.py:452 wireless/forms/bulk_edit.py:55 -#: wireless/forms/bulk_import.py:48 wireless/forms/model_forms.py:48 -#: wireless/models.py:102 +#: 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/templates/ipam/vlan/base.html:6 +#: netbox/templates/ipam/vlan_edit.html:10 +#: netbox/templates/wireless/wirelesslan.html:30 +#: netbox/vpn/forms/bulk_import.py:304 netbox/vpn/forms/filtersets.py:284 +#: netbox/vpn/forms/model_forms.py:433 netbox/vpn/forms/model_forms.py:452 +#: netbox/wireless/forms/bulk_edit.py:55 +#: netbox/wireless/forms/bulk_import.py:48 +#: netbox/wireless/forms/model_forms.py:48 netbox/wireless/models.py:102 msgid "VLAN" msgstr "VLAN" -#: ipam/forms/bulk_edit.py:245 +#: netbox/ipam/forms/bulk_edit.py:245 msgid "Prefix length" msgstr "Önek uzunluğu" -#: ipam/forms/bulk_edit.py:268 ipam/forms/filtersets.py:241 -#: templates/ipam/prefix.html:85 +#: netbox/ipam/forms/bulk_edit.py:268 netbox/ipam/forms/filtersets.py:241 +#: netbox/templates/ipam/prefix.html:85 msgid "Is a pool" msgstr "Havuz mu" -#: ipam/forms/bulk_edit.py:273 ipam/forms/bulk_edit.py:318 -#: ipam/forms/filtersets.py:248 ipam/forms/filtersets.py:293 -#: ipam/models/ip.py:272 ipam/models/ip.py:539 +#: netbox/ipam/forms/bulk_edit.py: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 msgid "Treat as fully utilized" msgstr "Tamamen kullanılmış gibi davran" -#: ipam/forms/bulk_edit.py:287 ipam/forms/filtersets.py:171 +#: netbox/ipam/forms/bulk_edit.py:287 netbox/ipam/forms/filtersets.py:171 msgid "VLAN Assignment" msgstr "VLAN Ataması" -#: ipam/forms/bulk_edit.py:366 ipam/models/ip.py:772 +#: netbox/ipam/forms/bulk_edit.py:366 netbox/ipam/models/ip.py:772 msgid "DNS name" msgstr "DNS adı" -#: ipam/forms/bulk_edit.py:387 ipam/forms/bulk_edit.py:534 -#: ipam/forms/bulk_import.py:394 ipam/forms/bulk_import.py:469 -#: ipam/forms/bulk_import.py:495 ipam/forms/filtersets.py:390 -#: ipam/forms/filtersets.py:530 templates/ipam/fhrpgroup.html:22 -#: templates/ipam/inc/panels/fhrp_groups.html:24 -#: templates/ipam/service.html:32 templates/ipam/servicetemplate.html:19 +#: netbox/ipam/forms/bulk_edit.py: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/templates/ipam/inc/panels/fhrp_groups.html:24 +#: netbox/templates/ipam/service.html:32 +#: netbox/templates/ipam/servicetemplate.html:19 msgid "Protocol" msgstr "Protokol" -#: ipam/forms/bulk_edit.py:394 ipam/forms/filtersets.py:397 -#: ipam/tables/fhrp.py:22 templates/ipam/fhrpgroup.html:26 +#: netbox/ipam/forms/bulk_edit.py:394 netbox/ipam/forms/filtersets.py:397 +#: netbox/ipam/tables/fhrp.py:22 netbox/templates/ipam/fhrpgroup.html:26 msgid "Group ID" msgstr "Grup Kimliği" -#: ipam/forms/bulk_edit.py:399 ipam/forms/filtersets.py:402 -#: wireless/forms/bulk_edit.py:68 wireless/forms/bulk_edit.py:115 -#: wireless/forms/bulk_import.py:62 wireless/forms/bulk_import.py:65 -#: wireless/forms/bulk_import.py:104 wireless/forms/bulk_import.py:107 -#: wireless/forms/filtersets.py:54 wireless/forms/filtersets.py:88 +#: netbox/ipam/forms/bulk_edit.py: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 msgid "Authentication type" msgstr "Kimlik doğrulama türü" -#: ipam/forms/bulk_edit.py:404 ipam/forms/filtersets.py:406 +#: netbox/ipam/forms/bulk_edit.py:404 netbox/ipam/forms/filtersets.py:406 msgid "Authentication key" msgstr "Kimlik doğrulama anahtarı" -#: ipam/forms/bulk_edit.py:421 ipam/forms/filtersets.py:383 -#: ipam/forms/model_forms.py:474 netbox/navigation/menu.py:386 -#: templates/ipam/fhrpgroup.html:49 -#: templates/wireless/inc/authentication_attrs.html:5 -#: wireless/forms/bulk_edit.py:91 wireless/forms/bulk_edit.py:149 -#: wireless/forms/filtersets.py:36 wireless/forms/filtersets.py:76 -#: wireless/forms/model_forms.py:55 wireless/forms/model_forms.py:171 +#: 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/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 msgid "Authentication" msgstr "Kimlik Doğrulama" -#: ipam/forms/bulk_edit.py:436 ipam/forms/model_forms.py:575 +#: netbox/ipam/forms/bulk_edit.py:436 netbox/ipam/forms/model_forms.py:608 msgid "Scope type" msgstr "Kapsam türü" -#: ipam/forms/bulk_edit.py:439 ipam/forms/bulk_edit.py:453 -#: ipam/forms/model_forms.py:578 ipam/forms/model_forms.py:588 -#: ipam/tables/vlans.py:71 templates/ipam/vlangroup.html:38 +#: 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" -#: ipam/forms/bulk_edit.py:446 ipam/models/vlans.py:60 +#: netbox/ipam/forms/bulk_edit.py:446 netbox/ipam/models/vlans.py:60 msgid "VLAN ID ranges" msgstr "VLAN ID aralıkları" -#: ipam/forms/bulk_edit.py:525 +#: netbox/ipam/forms/bulk_edit.py:525 msgid "Site & Group" msgstr "Site ve Grup" -#: ipam/forms/bulk_edit.py:539 ipam/forms/model_forms.py:659 -#: ipam/forms/model_forms.py:691 ipam/tables/services.py:19 -#: ipam/tables/services.py:49 templates/ipam/service.html:36 -#: templates/ipam/servicetemplate.html:23 +#: netbox/ipam/forms/bulk_edit.py:539 netbox/ipam/forms/model_forms.py:692 +#: netbox/ipam/forms/model_forms.py:724 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" -#: ipam/forms/bulk_import.py:48 +#: netbox/ipam/forms/bulk_import.py:48 msgid "Import route targets" msgstr "Rota hedeflerini içe aktarma" -#: ipam/forms/bulk_import.py:54 +#: netbox/ipam/forms/bulk_import.py:54 msgid "Export route targets" msgstr "Rota hedeflerini dışa aktarma" -#: ipam/forms/bulk_import.py:92 ipam/forms/bulk_import.py:112 -#: ipam/forms/bulk_import.py:132 +#: netbox/ipam/forms/bulk_import.py:92 netbox/ipam/forms/bulk_import.py:112 +#: netbox/ipam/forms/bulk_import.py:132 msgid "Assigned RIR" msgstr "Atanmış RIR" -#: ipam/forms/bulk_import.py:182 +#: netbox/ipam/forms/bulk_import.py:182 msgid "VLAN's group (if any)" msgstr "VLAN grubu (varsa)" -#: ipam/forms/bulk_import.py:308 +#: netbox/ipam/forms/bulk_import.py:308 msgid "Parent device of assigned interface (if any)" msgstr "Atanan arayüzün ana cihazı (varsa)" -#: ipam/forms/bulk_import.py:311 ipam/forms/bulk_import.py:488 -#: ipam/forms/model_forms.py:685 virtualization/filtersets.py:288 -#: virtualization/filtersets.py:327 virtualization/forms/bulk_edit.py:200 -#: virtualization/forms/bulk_edit.py:326 -#: virtualization/forms/bulk_import.py:146 -#: virtualization/forms/bulk_import.py:207 -#: virtualization/forms/filtersets.py:212 -#: virtualization/forms/filtersets.py:248 -#: virtualization/forms/model_forms.py:288 vpn/forms/bulk_import.py:93 -#: vpn/forms/bulk_import.py:290 +#: 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" -#: ipam/forms/bulk_import.py:315 +#: netbox/ipam/forms/bulk_import.py:315 msgid "Parent VM of assigned interface (if any)" msgstr "Atanan arabirimin üst VM'si (varsa)" -#: ipam/forms/bulk_import.py:325 +#: netbox/ipam/forms/bulk_import.py:325 msgid "Is primary" msgstr "Birincildir" -#: ipam/forms/bulk_import.py:326 +#: 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" -#: ipam/forms/bulk_import.py:365 +#: netbox/ipam/forms/bulk_import.py:330 +msgid "Is out-of-band" +msgstr "" + +#: netbox/ipam/forms/bulk_import.py:331 +msgid "Designate this as the out-of-band IP address for the assigned device" +msgstr "" + +#: netbox/ipam/forms/bulk_import.py:371 msgid "No device or virtual machine specified; cannot set as primary IP" msgstr "" "Aygıt veya sanal makine belirtilmemiş; birincil IP olarak ayarlanamıyor" -#: ipam/forms/bulk_import.py:369 +#: netbox/ipam/forms/bulk_import.py:375 +msgid "No device specified; cannot set as out-of-band IP" +msgstr "" + +#: netbox/ipam/forms/bulk_import.py:379 +msgid "Cannot set out-of-band IP for virtual machines" +msgstr "" + +#: netbox/ipam/forms/bulk_import.py:383 msgid "No interface specified; cannot set as primary IP" msgstr "Arayüz belirtilmedi; birincil IP olarak ayarlanamıyor" -#: ipam/forms/bulk_import.py:398 +#: netbox/ipam/forms/bulk_import.py:387 +msgid "No interface specified; cannot set as out-of-band IP" +msgstr "" + +#: netbox/ipam/forms/bulk_import.py:422 msgid "Auth type" msgstr "Kimlik doğrulama türü" -#: ipam/forms/bulk_import.py:413 +#: netbox/ipam/forms/bulk_import.py:437 msgid "Scope type (app & model)" msgstr "Kapsam türü (uygulama ve model)" -#: ipam/forms/bulk_import.py:440 +#: netbox/ipam/forms/bulk_import.py:464 msgid "Assigned VLAN group" msgstr "Atanmış VLAN grubu" -#: ipam/forms/bulk_import.py:471 ipam/forms/bulk_import.py:497 +#: netbox/ipam/forms/bulk_import.py:495 netbox/ipam/forms/bulk_import.py:521 msgid "IP protocol" msgstr "IP protokolü" -#: ipam/forms/bulk_import.py:485 +#: netbox/ipam/forms/bulk_import.py:509 msgid "Required if not assigned to a VM" msgstr "Bir VM'ye atanmadıysa gereklidir" -#: ipam/forms/bulk_import.py:492 +#: netbox/ipam/forms/bulk_import.py:516 msgid "Required if not assigned to a device" msgstr "Bir cihaza atanmadıysa gereklidir" -#: ipam/forms/bulk_import.py:517 +#: netbox/ipam/forms/bulk_import.py:541 #, python-brace-format msgid "{ip} is not assigned to this device/VM." msgstr "{ip} bu cihaza/VM'ye atanmamıştır." -#: ipam/forms/filtersets.py:47 ipam/forms/model_forms.py:63 -#: netbox/navigation/menu.py:189 vpn/forms/model_forms.py:410 +#: 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 msgid "Route Targets" msgstr "Rota Hedefleri" -#: ipam/forms/filtersets.py:53 ipam/forms/model_forms.py:50 -#: vpn/forms/filtersets.py:224 vpn/forms/model_forms.py:397 +#: 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 msgid "Import targets" msgstr "Hedefleri içe aktarma" -#: ipam/forms/filtersets.py:58 ipam/forms/model_forms.py:55 -#: vpn/forms/filtersets.py:229 vpn/forms/model_forms.py:402 +#: 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 msgid "Export targets" msgstr "İhracat hedefleri" -#: ipam/forms/filtersets.py:73 +#: netbox/ipam/forms/filtersets.py:73 msgid "Imported by VRF" msgstr "VRF tarafından ithal" -#: ipam/forms/filtersets.py:78 +#: netbox/ipam/forms/filtersets.py:78 msgid "Exported by VRF" msgstr "VRF tarafından ihraç edildi" -#: ipam/forms/filtersets.py:87 ipam/tables/ip.py:89 templates/ipam/rir.html:30 +#: netbox/ipam/forms/filtersets.py:87 netbox/ipam/tables/ip.py:89 +#: netbox/templates/ipam/rir.html:30 msgid "Private" msgstr "Özel" -#: ipam/forms/filtersets.py:105 ipam/forms/filtersets.py:191 -#: ipam/forms/filtersets.py:272 ipam/forms/filtersets.py:326 +#: netbox/ipam/forms/filtersets.py:105 netbox/ipam/forms/filtersets.py:191 +#: netbox/ipam/forms/filtersets.py:272 netbox/ipam/forms/filtersets.py:326 msgid "Address family" msgstr "Adres ailesi" -#: ipam/forms/filtersets.py:119 templates/ipam/asnrange.html:25 +#: netbox/ipam/forms/filtersets.py:119 netbox/templates/ipam/asnrange.html:25 msgid "Range" msgstr "Menzil" -#: ipam/forms/filtersets.py:128 +#: netbox/ipam/forms/filtersets.py:128 msgid "Start" msgstr "Başlat" -#: ipam/forms/filtersets.py:132 +#: netbox/ipam/forms/filtersets.py:132 msgid "End" msgstr "Bitiş" -#: ipam/forms/filtersets.py:186 +#: netbox/ipam/forms/filtersets.py:186 msgid "Search within" msgstr "İçinde ara" -#: ipam/forms/filtersets.py:207 ipam/forms/filtersets.py:342 +#: netbox/ipam/forms/filtersets.py:207 netbox/ipam/forms/filtersets.py:342 msgid "Present in VRF" msgstr "VRF'de mevcut" -#: ipam/forms/filtersets.py:311 +#: netbox/ipam/forms/filtersets.py:311 msgid "Device/VM" msgstr "Cihaz/VM" -#: ipam/forms/filtersets.py:321 +#: netbox/ipam/forms/filtersets.py:321 msgid "Parent Prefix" msgstr "Ebeveyn Öneki" -#: ipam/forms/filtersets.py:347 +#: netbox/ipam/forms/filtersets.py:347 msgid "Assigned Device" msgstr "Atanan Cihaz" -#: ipam/forms/filtersets.py:352 +#: netbox/ipam/forms/filtersets.py:352 msgid "Assigned VM" msgstr "Atanmış VM" -#: ipam/forms/filtersets.py:366 +#: netbox/ipam/forms/filtersets.py:366 msgid "Assigned to an interface" msgstr "Bir arayüze atandı" -#: ipam/forms/filtersets.py:373 templates/ipam/ipaddress.html:51 +#: netbox/ipam/forms/filtersets.py:373 netbox/templates/ipam/ipaddress.html:51 msgid "DNS Name" msgstr "DNS Adı" -#: ipam/forms/filtersets.py:416 ipam/models/vlans.py:235 ipam/tables/ip.py:176 -#: ipam/tables/vlans.py:82 ipam/views.py:971 netbox/navigation/menu.py:193 -#: netbox/navigation/menu.py:195 +#: 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 msgid "VLANs" msgstr "VLAN'lar" -#: ipam/forms/filtersets.py:457 +#: netbox/ipam/forms/filtersets.py:457 msgid "Contains VLAN ID" msgstr "VLAN Kimliği içerir" -#: ipam/forms/filtersets.py:513 ipam/models/vlans.py:176 -#: templates/ipam/vlan.html:31 +#: netbox/ipam/forms/filtersets.py:513 netbox/ipam/models/vlans.py:192 +#: netbox/templates/ipam/vlan.html:31 msgid "VLAN ID" msgstr "VLAN KİMLİĞİ" -#: ipam/forms/filtersets.py:556 ipam/forms/model_forms.py:320 -#: ipam/forms/model_forms.py:713 ipam/forms/model_forms.py:739 -#: ipam/tables/vlans.py:195 templates/virtualization/virtualdisk.html:21 -#: templates/virtualization/virtualmachine.html:12 -#: templates/virtualization/vminterface.html:21 -#: templates/vpn/tunneltermination.html:25 -#: virtualization/forms/filtersets.py:197 -#: virtualization/forms/filtersets.py:242 -#: virtualization/forms/model_forms.py:220 -#: virtualization/tables/virtualmachines.py:135 -#: virtualization/tables/virtualmachines.py:190 vpn/choices.py:45 -#: vpn/forms/filtersets.py:293 vpn/forms/model_forms.py:160 -#: vpn/forms/model_forms.py:171 vpn/forms/model_forms.py:273 -#: vpn/forms/model_forms.py:454 +#: netbox/ipam/forms/filtersets.py: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" -#: ipam/forms/model_forms.py:80 templates/ipam/routetarget.html:10 +#: netbox/ipam/forms/model_forms.py:80 +#: netbox/templates/ipam/routetarget.html:10 msgid "Route Target" msgstr "Rota Hedefi" -#: ipam/forms/model_forms.py:114 ipam/tables/ip.py:117 -#: templates/ipam/aggregate.html:11 templates/ipam/prefix.html:38 +#: netbox/ipam/forms/model_forms.py:114 netbox/ipam/tables/ip.py:117 +#: netbox/templates/ipam/aggregate.html:11 +#: netbox/templates/ipam/prefix.html:38 msgid "Aggregate" msgstr "Agrega" -#: ipam/forms/model_forms.py:135 templates/ipam/asnrange.html:12 +#: netbox/ipam/forms/model_forms.py:135 netbox/templates/ipam/asnrange.html:12 msgid "ASN Range" msgstr "ASN Aralığı" -#: ipam/forms/model_forms.py:231 +#: netbox/ipam/forms/model_forms.py:231 msgid "Site/VLAN Assignment" msgstr "Site/VLAN Ataması" -#: ipam/forms/model_forms.py:259 templates/ipam/iprange.html:10 +#: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10 msgid "IP Range" msgstr "IP Aralığı" -#: ipam/forms/model_forms.py:295 ipam/forms/model_forms.py:321 -#: ipam/forms/model_forms.py:473 templates/ipam/fhrpgroup.html:19 +#: 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 msgid "FHRP Group" msgstr "FHRP Grubu" -#: ipam/forms/model_forms.py:310 +#: netbox/ipam/forms/model_forms.py:310 msgid "Make this the primary IP for the device/VM" msgstr "Bunu cihaz/VM için birincil IP yapın" -#: ipam/forms/model_forms.py:325 +#: netbox/ipam/forms/model_forms.py:314 +msgid "Make this the out-of-band IP for the device" +msgstr "" + +#: netbox/ipam/forms/model_forms.py:329 msgid "NAT IP (Inside)" msgstr "NAT IP (İç)" -#: ipam/forms/model_forms.py:384 +#: netbox/ipam/forms/model_forms.py:391 msgid "An IP address can only be assigned to a single object." msgstr "IP adresi yalnızca tek bir nesneye atanabilir." -#: ipam/forms/model_forms.py:390 ipam/models/ip.py:897 -msgid "" -"Cannot reassign IP address while it is designated as the primary IP for the " -"parent object" +#: netbox/ipam/forms/model_forms.py:398 +msgid "Cannot reassign primary IP address for the parent device/VM" msgstr "" -"Üst nesne için birincil IP olarak belirlenirken IP adresi yeniden atanamıyor" -#: ipam/forms/model_forms.py:400 +#: netbox/ipam/forms/model_forms.py:402 +msgid "Cannot reassign out-of-Band IP address for the parent device" +msgstr "" + +#: netbox/ipam/forms/model_forms.py:412 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." -#: ipam/forms/model_forms.py:475 +#: netbox/ipam/forms/model_forms.py:420 +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 msgid "Virtual IP Address" msgstr "Sanal IP Adresi" -#: ipam/forms/model_forms.py:560 +#: netbox/ipam/forms/model_forms.py:593 msgid "Assignment already exists" msgstr "Atama zaten var" -#: ipam/forms/model_forms.py:569 templates/ipam/vlangroup.html:42 +#: netbox/ipam/forms/model_forms.py:602 +#: netbox/templates/ipam/vlangroup.html:42 msgid "VLAN IDs" msgstr "VLAN kimlikleri" -#: ipam/forms/model_forms.py:587 +#: netbox/ipam/forms/model_forms.py:620 msgid "Child VLANs" msgstr "Çocuk VLAN'ları" -#: ipam/forms/model_forms.py:664 ipam/forms/model_forms.py:696 +#: netbox/ipam/forms/model_forms.py:697 netbox/ipam/forms/model_forms.py:729 msgid "" "Comma-separated list of one or more port numbers. A range may be specified " "using a hyphen." @@ -9207,132 +9863,133 @@ msgstr "" "Bir veya daha fazla bağlantı noktası numarasının virgülle ayrılmış listesi. " "Bir aralık bir tire kullanılarak belirtilebilir." -#: ipam/forms/model_forms.py:669 templates/ipam/servicetemplate.html:12 +#: netbox/ipam/forms/model_forms.py:702 +#: netbox/templates/ipam/servicetemplate.html:12 msgid "Service Template" msgstr "Hizmet Şablonu" -#: ipam/forms/model_forms.py:716 +#: netbox/ipam/forms/model_forms.py:749 msgid "Port(s)" msgstr "Liman (lar)" -#: ipam/forms/model_forms.py:717 ipam/forms/model_forms.py:745 -#: templates/ipam/service.html:21 +#: netbox/ipam/forms/model_forms.py:750 netbox/ipam/forms/model_forms.py:778 +#: netbox/templates/ipam/service.html:21 msgid "Service" msgstr "Hizmet" -#: ipam/forms/model_forms.py:730 +#: netbox/ipam/forms/model_forms.py:763 msgid "Service template" msgstr "Hizmet şablonu" -#: ipam/forms/model_forms.py:742 +#: netbox/ipam/forms/model_forms.py:775 msgid "From Template" msgstr "Şablondan" -#: ipam/forms/model_forms.py:743 +#: netbox/ipam/forms/model_forms.py:776 msgid "Custom" msgstr "Özel" -#: ipam/forms/model_forms.py:773 +#: netbox/ipam/forms/model_forms.py:806 msgid "" "Must specify name, protocol, and port(s) if not using a service template." msgstr "" "Hizmet şablonu kullanmıyorsanız ad, protokol ve bağlantı noktası (lar) ı " "belirtmeniz gerekir." -#: ipam/models/asns.py:34 +#: netbox/ipam/models/asns.py:34 msgid "start" msgstr "başlangıç" -#: ipam/models/asns.py:51 +#: netbox/ipam/models/asns.py:51 msgid "ASN range" msgstr "ASN aralığı" -#: ipam/models/asns.py:52 +#: netbox/ipam/models/asns.py:52 msgid "ASN ranges" msgstr "ASN aralıkları" -#: ipam/models/asns.py:72 +#: netbox/ipam/models/asns.py:72 #, python-brace-format msgid "Starting ASN ({start}) must be lower than ending ASN ({end})." msgstr "Başlangıç ASN'si ({start}), son ASN'den ({end}) daha küçük olmalıdır." -#: ipam/models/asns.py:104 +#: netbox/ipam/models/asns.py:104 msgid "Regional Internet Registry responsible for this AS number space" msgstr "Bu ASN alanından sorumlu Bölgesel İnternet Kaydı" -#: ipam/models/asns.py:109 +#: netbox/ipam/models/asns.py:109 msgid "16- or 32-bit autonomous system number" msgstr "16 veya 32 bit otonom sistem numarası" -#: ipam/models/fhrp.py:22 +#: netbox/ipam/models/fhrp.py:22 msgid "group ID" msgstr "grup kimliği" -#: ipam/models/fhrp.py:30 ipam/models/services.py:22 +#: netbox/ipam/models/fhrp.py:30 netbox/ipam/models/services.py:22 msgid "protocol" msgstr "protokol" -#: ipam/models/fhrp.py:38 wireless/models.py:28 +#: netbox/ipam/models/fhrp.py:38 netbox/wireless/models.py:28 msgid "authentication type" msgstr "kimlik doğrulama türü" -#: ipam/models/fhrp.py:43 +#: netbox/ipam/models/fhrp.py:43 msgid "authentication key" msgstr "kimlik doğrulama anahtarı" -#: ipam/models/fhrp.py:56 +#: netbox/ipam/models/fhrp.py:56 msgid "FHRP group" msgstr "FHRP grubu" -#: ipam/models/fhrp.py:57 +#: netbox/ipam/models/fhrp.py:57 msgid "FHRP groups" msgstr "FHRP grupları" -#: ipam/models/fhrp.py:113 +#: netbox/ipam/models/fhrp.py:113 msgid "FHRP group assignment" msgstr "FHRP grup ataması" -#: ipam/models/fhrp.py:114 +#: netbox/ipam/models/fhrp.py:114 msgid "FHRP group assignments" msgstr "FHRP grup ödevleri" -#: ipam/models/ip.py:65 +#: netbox/ipam/models/ip.py:65 msgid "private" msgstr "özel" -#: ipam/models/ip.py:66 +#: netbox/ipam/models/ip.py:66 msgid "IP space managed by this RIR is considered private" msgstr "Bu RIR tarafından yönetilen IP alanı özel olarak kabul edilir" -#: ipam/models/ip.py:72 netbox/navigation/menu.py:182 +#: netbox/ipam/models/ip.py:72 netbox/netbox/navigation/menu.py:182 msgid "RIRs" msgstr "RIR'ler" -#: ipam/models/ip.py:84 +#: netbox/ipam/models/ip.py:84 msgid "IPv4 or IPv6 network" msgstr "IPv4 veya IPv6 ağı" -#: ipam/models/ip.py:91 +#: netbox/ipam/models/ip.py:91 msgid "Regional Internet Registry responsible for this IP space" msgstr "Bu IP alanından sorumlu Bölgesel İnternet Kaydı" -#: ipam/models/ip.py:101 +#: netbox/ipam/models/ip.py:101 msgid "date added" msgstr "tarih eklendi" -#: ipam/models/ip.py:115 +#: netbox/ipam/models/ip.py:115 msgid "aggregate" msgstr "toplamak" -#: ipam/models/ip.py:116 +#: netbox/ipam/models/ip.py:116 msgid "aggregates" msgstr "toplar" -#: ipam/models/ip.py:132 +#: netbox/ipam/models/ip.py:132 msgid "Cannot create aggregate with /0 mask." msgstr "/0 maskesi ile toplama oluşturulamıyor." -#: ipam/models/ip.py:144 +#: netbox/ipam/models/ip.py:144 #, python-brace-format msgid "" "Aggregates cannot overlap. {prefix} is already covered by an existing " @@ -9341,7 +9998,7 @@ msgstr "" "Agremalar üst üste gelemez. {prefix} zaten mevcut bir toplama tarafından " "kapsanmıştır ({aggregate})." -#: ipam/models/ip.py:158 +#: netbox/ipam/models/ip.py:158 #, python-brace-format msgid "" "Prefixes cannot overlap aggregates. {prefix} covers an existing aggregate " @@ -9350,250 +10007,267 @@ msgstr "" "Önekler toplamalarla örtüşemez. {prefix} mevcut bir toplamı kapsar " "({aggregate})." -#: ipam/models/ip.py:200 ipam/models/ip.py:737 vpn/models/tunnels.py:114 +#: netbox/ipam/models/ip.py:200 netbox/ipam/models/ip.py:737 +#: netbox/vpn/models/tunnels.py:114 msgid "role" msgstr "rol" -#: ipam/models/ip.py:201 +#: netbox/ipam/models/ip.py:201 msgid "roles" msgstr "rolleri" -#: ipam/models/ip.py:217 ipam/models/ip.py:293 +#: netbox/ipam/models/ip.py:217 netbox/ipam/models/ip.py:293 msgid "prefix" msgstr "önek" -#: ipam/models/ip.py:218 +#: netbox/ipam/models/ip.py:218 msgid "IPv4 or IPv6 network with mask" msgstr "Maskeli IPv4 veya IPv6 ağı" -#: ipam/models/ip.py:254 +#: netbox/ipam/models/ip.py:254 msgid "Operational status of this prefix" msgstr "Bu önekin operasyonel durumu" -#: ipam/models/ip.py:262 +#: netbox/ipam/models/ip.py:262 msgid "The primary function of this prefix" msgstr "Bu önekin birincil işlevi" -#: ipam/models/ip.py:265 +#: netbox/ipam/models/ip.py:265 msgid "is a pool" msgstr "bir havuz" -#: ipam/models/ip.py:267 +#: netbox/ipam/models/ip.py:267 msgid "All IP addresses within this prefix are considered usable" msgstr "Bu önek içindeki tüm IP adresleri kullanılabilir kabul edilir" -#: ipam/models/ip.py:270 ipam/models/ip.py:537 +#: netbox/ipam/models/ip.py:270 netbox/ipam/models/ip.py:537 msgid "mark utilized" msgstr "kullanılan işaret" -#: ipam/models/ip.py:294 +#: netbox/ipam/models/ip.py:294 msgid "prefixes" msgstr "önekleri" -#: ipam/models/ip.py:317 +#: netbox/ipam/models/ip.py:317 msgid "Cannot create prefix with /0 mask." msgstr "/0 maskesi ile önek oluşturulamıyor." -#: ipam/models/ip.py:324 ipam/models/ip.py:874 +#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:874 #, python-brace-format msgid "VRF {vrf}" msgstr "VRF {vrf}" -#: ipam/models/ip.py:324 ipam/models/ip.py:874 +#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:874 msgid "global table" msgstr "küresel tablo" -#: ipam/models/ip.py:326 +#: netbox/ipam/models/ip.py:326 #, python-brace-format msgid "Duplicate prefix found in {table}: {prefix}" msgstr "Yinelenen önek şurada bulundu {table}: {prefix}" -#: ipam/models/ip.py:495 +#: netbox/ipam/models/ip.py:495 msgid "start address" msgstr "başlangıç adresi" -#: ipam/models/ip.py:496 ipam/models/ip.py:500 ipam/models/ip.py:712 +#: netbox/ipam/models/ip.py:496 netbox/ipam/models/ip.py:500 +#: netbox/ipam/models/ip.py:712 msgid "IPv4 or IPv6 address (with mask)" msgstr "IPv4 veya IPv6 adresi (maske ile)" -#: ipam/models/ip.py:499 +#: netbox/ipam/models/ip.py:499 msgid "end address" msgstr "bitiş adresi" -#: ipam/models/ip.py:526 +#: netbox/ipam/models/ip.py:526 msgid "Operational status of this range" msgstr "Bu aralığın çalışma durumu" -#: ipam/models/ip.py:534 +#: netbox/ipam/models/ip.py:534 msgid "The primary function of this range" msgstr "Bu aralığın birincil işlevi" -#: ipam/models/ip.py:548 +#: netbox/ipam/models/ip.py:548 msgid "IP range" msgstr "IP aralığı" -#: ipam/models/ip.py:549 +#: netbox/ipam/models/ip.py:549 msgid "IP ranges" msgstr "IP aralıkları" -#: ipam/models/ip.py:565 +#: netbox/ipam/models/ip.py:565 msgid "Starting and ending IP address versions must match" msgstr "Başlangıç ve bitiş IP adresi sürümleri eşleşmelidir" -#: ipam/models/ip.py:571 +#: netbox/ipam/models/ip.py:571 msgid "Starting and ending IP address masks must match" msgstr "Başlangıç ve bitiş IP adresi maskeleri eşleşmelidir" -#: ipam/models/ip.py:578 +#: netbox/ipam/models/ip.py:578 #, python-brace-format msgid "" "Ending address must be greater than the starting address ({start_address})" msgstr "" "Bitiş adresi başlangıç adresinden daha büyük olmalıdır ({start_address})" -#: ipam/models/ip.py:590 +#: netbox/ipam/models/ip.py:590 #, python-brace-format msgid "Defined addresses overlap with range {overlapping_range} in VRF {vrf}" msgstr "" "Tanımlanan adresler aralık ile örtüşüyor {overlapping_range} VRF'de {vrf}" -#: ipam/models/ip.py:599 +#: netbox/ipam/models/ip.py:599 #, python-brace-format msgid "Defined range exceeds maximum supported size ({max_size})" msgstr "Tanımlanan aralık maksimum desteklenen boyutu aşıyor ({max_size})" -#: ipam/models/ip.py:711 tenancy/models/contacts.py:82 +#: netbox/ipam/models/ip.py:711 netbox/tenancy/models/contacts.py:82 msgid "address" msgstr "adres" -#: ipam/models/ip.py:734 +#: netbox/ipam/models/ip.py:734 msgid "The operational status of this IP" msgstr "Bu IP'nin operasyonel durumu" -#: ipam/models/ip.py:741 +#: netbox/ipam/models/ip.py:741 msgid "The functional role of this IP" msgstr "Bu IP'nin işlevsel rolü" -#: ipam/models/ip.py:765 templates/ipam/ipaddress.html:72 +#: netbox/ipam/models/ip.py:765 netbox/templates/ipam/ipaddress.html:72 msgid "NAT (inside)" msgstr "NAT (iç)" -#: ipam/models/ip.py:766 +#: netbox/ipam/models/ip.py:766 msgid "The IP for which this address is the \"outside\" IP" msgstr "Bu adresin “dış” IP olduğu IP" -#: ipam/models/ip.py:773 +#: netbox/ipam/models/ip.py:773 msgid "Hostname or FQDN (not case-sensitive)" msgstr "Ana bilgisayar adı veya FQDN (büyük/küçük harfe duyarlı değil)" -#: ipam/models/ip.py:789 ipam/models/services.py:94 +#: netbox/ipam/models/ip.py:789 netbox/ipam/models/services.py:94 msgid "IP addresses" msgstr "IP adresleri" -#: ipam/models/ip.py:845 +#: netbox/ipam/models/ip.py:845 msgid "Cannot create IP address with /0 mask." msgstr "/0 maskesi ile IP adresi oluşturulamıyor." -#: ipam/models/ip.py:851 +#: netbox/ipam/models/ip.py:851 #, python-brace-format msgid "{ip} is a network ID, which may not be assigned to an interface." msgstr "{ip} bir arayüze atanamayacak bir ağ kimliğidir." -#: ipam/models/ip.py:862 +#: netbox/ipam/models/ip.py:862 #, python-brace-format msgid "" "{ip} is a broadcast address, which may not be assigned to an interface." msgstr "{ip} bir arayüze atanamayacak bir yayın adresidir." -#: ipam/models/ip.py:876 +#: netbox/ipam/models/ip.py:876 #, python-brace-format msgid "Duplicate IP address found in {table}: {ipaddress}" msgstr "Yinelenen IP adresi şurada bulundu {table}: {ipaddress}" -#: ipam/models/ip.py:903 +#: netbox/ipam/models/ip.py:897 +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 msgid "Only IPv6 addresses can be assigned SLAAC status" msgstr "Yalnızca IPv6 adreslerine SLAAC durumu atanabilir" -#: ipam/models/services.py:33 +#: netbox/ipam/models/services.py:33 msgid "port numbers" msgstr "port numaraları" -#: ipam/models/services.py:59 +#: netbox/ipam/models/services.py:59 msgid "service template" msgstr "hizmet şablonu" -#: ipam/models/services.py:60 +#: netbox/ipam/models/services.py:60 msgid "service templates" msgstr "servis şablonları" -#: ipam/models/services.py:95 +#: netbox/ipam/models/services.py:95 msgid "The specific IP addresses (if any) to which this service is bound" msgstr "Bu hizmetin bağlı olduğu belirli IP adresleri (varsa)" -#: ipam/models/services.py:102 +#: netbox/ipam/models/services.py:102 msgid "service" msgstr "hizmet" -#: ipam/models/services.py:103 +#: netbox/ipam/models/services.py:103 msgid "services" msgstr "servisler" -#: ipam/models/services.py:117 +#: netbox/ipam/models/services.py:117 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." -#: ipam/models/services.py:119 +#: netbox/ipam/models/services.py:119 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." -#: ipam/models/vlans.py:85 +#: netbox/ipam/models/vlans.py:85 msgid "VLAN groups" msgstr "VLAN grupları" -#: ipam/models/vlans.py:95 +#: netbox/ipam/models/vlans.py:95 msgid "Cannot set scope_type without scope_id." msgstr "scope_id olmadan scope_type ayarlanamıyor." -#: ipam/models/vlans.py:97 +#: netbox/ipam/models/vlans.py:97 msgid "Cannot set scope_id without scope_type." msgstr "scope_type olmadan scope_id ayarlanamıyor." -#: ipam/models/vlans.py:101 +#: netbox/ipam/models/vlans.py:105 +#, python-brace-format +msgid "Starting VLAN ID in range ({value}) cannot be less than {minimum}" +msgstr "" + +#: netbox/ipam/models/vlans.py:111 +#, python-brace-format +msgid "Ending VLAN ID in range ({value}) cannot exceed {maximum}" +msgstr "" + +#: 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 "" + +#: netbox/ipam/models/vlans.py:124 msgid "Ranges cannot overlap." msgstr "Aralıklar üst üste gelemez." -#: ipam/models/vlans.py:106 -#, python-brace-format -msgid "" -"Maximum child VID must be greater than or equal to minimum child VID " -"({value})" -msgstr "" -"Maksimum çocuk VID, minimum çocuk VID'den büyük veya ona eşit olmalıdır " -"({value})" - -#: ipam/models/vlans.py:165 +#: netbox/ipam/models/vlans.py:181 msgid "The specific site to which this VLAN is assigned (if any)" msgstr "Bu VLAN'ın atandığı belirli site (varsa)" -#: ipam/models/vlans.py:173 +#: netbox/ipam/models/vlans.py:189 msgid "VLAN group (optional)" msgstr "VLAN grubu (isteğe bağlı)" -#: ipam/models/vlans.py:181 +#: netbox/ipam/models/vlans.py:197 msgid "Numeric VLAN ID (1-4094)" msgstr "Sayısal VLAN Kimliği (1-4094)" -#: ipam/models/vlans.py:199 +#: netbox/ipam/models/vlans.py:215 msgid "Operational status of this VLAN" msgstr "Bu VLAN'ın operasyonel durumu" -#: ipam/models/vlans.py:207 +#: netbox/ipam/models/vlans.py:223 msgid "The primary function of this VLAN" msgstr "Bu VLAN'ın birincil işlevi" -#: ipam/models/vlans.py:250 +#: netbox/ipam/models/vlans.py:266 #, python-brace-format msgid "" "VLAN is assigned to group {group} (scope: {scope}); cannot also assign to " @@ -9602,164 +10276,166 @@ msgstr "" "VLAN {group} adlı gruba (kapsam: {scope}) atandığı için; {site} adlı siteye " "de atanamaz ." -#: ipam/models/vlans.py:259 +#: netbox/ipam/models/vlans.py:275 #, 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}" -#: ipam/models/vrfs.py:30 +#: netbox/ipam/models/vrfs.py:30 msgid "route distinguisher" msgstr "rota ayırt edici" -#: ipam/models/vrfs.py:31 +#: netbox/ipam/models/vrfs.py:31 msgid "Unique route distinguisher (as defined in RFC 4364)" msgstr "Benzersiz rota ayırt edici (RFC 4364'te tanımlandığı gibi)" -#: ipam/models/vrfs.py:42 +#: netbox/ipam/models/vrfs.py:42 msgid "enforce unique space" msgstr "benzersiz alanı zorunlu kılmak" -#: ipam/models/vrfs.py:43 +#: netbox/ipam/models/vrfs.py:43 msgid "Prevent duplicate prefixes/IP addresses within this VRF" msgstr "Bu VRF içinde yinelenen önek/IP adreslerini önleyin" -#: ipam/models/vrfs.py:63 netbox/navigation/menu.py:186 -#: netbox/navigation/menu.py:188 +#: netbox/ipam/models/vrfs.py:63 netbox/netbox/navigation/menu.py:186 +#: netbox/netbox/navigation/menu.py:188 msgid "VRFs" msgstr "VRF'ler" -#: ipam/models/vrfs.py:82 +#: netbox/ipam/models/vrfs.py:82 msgid "Route target value (formatted in accordance with RFC 4360)" msgstr "Rota hedef değeri (RFC 4360'a göre biçimlendirilmiş)" -#: ipam/models/vrfs.py:94 +#: netbox/ipam/models/vrfs.py:94 msgid "route target" msgstr "rota hedefi" -#: ipam/models/vrfs.py:95 +#: netbox/ipam/models/vrfs.py:95 msgid "route targets" msgstr "rota hedefleri" -#: ipam/tables/asn.py:52 +#: netbox/ipam/tables/asn.py:52 msgid "ASDOT" msgstr "ASDOT" -#: ipam/tables/asn.py:57 +#: netbox/ipam/tables/asn.py:57 msgid "Site Count" msgstr "Site Sayısı" -#: ipam/tables/asn.py:62 +#: netbox/ipam/tables/asn.py:62 msgid "Provider Count" msgstr "Sağlayıcı Sayısı" -#: ipam/tables/ip.py:95 netbox/navigation/menu.py:179 -#: netbox/navigation/menu.py:181 +#: netbox/ipam/tables/ip.py:95 netbox/netbox/navigation/menu.py:179 +#: netbox/netbox/navigation/menu.py:181 msgid "Aggregates" msgstr "Agregalar" -#: ipam/tables/ip.py:125 +#: netbox/ipam/tables/ip.py:125 msgid "Added" msgstr "Eklendi" -#: ipam/tables/ip.py:128 ipam/tables/ip.py:166 ipam/tables/vlans.py:142 -#: ipam/views.py:346 netbox/navigation/menu.py:165 -#: netbox/navigation/menu.py:167 templates/ipam/vlan.html:84 +#: 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 msgid "Prefixes" msgstr "Önekler" -#: ipam/tables/ip.py:131 ipam/tables/ip.py:270 ipam/tables/ip.py:324 -#: ipam/tables/vlans.py:86 templates/dcim/device.html:260 -#: templates/ipam/aggregate.html:24 templates/ipam/iprange.html:29 -#: templates/ipam/prefix.html:106 +#: 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/templates/dcim/device.html:260 +#: netbox/templates/ipam/aggregate.html:24 +#: netbox/templates/ipam/iprange.html:29 netbox/templates/ipam/prefix.html:106 msgid "Utilization" msgstr "Kullanımı" -#: ipam/tables/ip.py:171 netbox/navigation/menu.py:161 +#: netbox/ipam/tables/ip.py:171 netbox/netbox/navigation/menu.py:161 msgid "IP Ranges" msgstr "IP Aralıkları" -#: ipam/tables/ip.py:221 +#: netbox/ipam/tables/ip.py:221 msgid "Prefix (Flat)" msgstr "Önek (Düz)" -#: ipam/tables/ip.py:225 +#: netbox/ipam/tables/ip.py:225 msgid "Depth" msgstr "Derinlik" -#: ipam/tables/ip.py:262 +#: netbox/ipam/tables/ip.py:262 msgid "Pool" msgstr "Havuz" -#: ipam/tables/ip.py:266 ipam/tables/ip.py:320 +#: netbox/ipam/tables/ip.py:266 netbox/ipam/tables/ip.py:320 msgid "Marked Utilized" msgstr "İşaretli Kullanıldı" -#: ipam/tables/ip.py:304 +#: netbox/ipam/tables/ip.py:304 msgid "Start address" msgstr "Başlangıç adresi" -#: ipam/tables/ip.py:383 +#: netbox/ipam/tables/ip.py:383 msgid "NAT (Inside)" msgstr "NAT (İç)" -#: ipam/tables/ip.py:388 +#: netbox/ipam/tables/ip.py:388 msgid "NAT (Outside)" msgstr "NAT (Dış)" -#: ipam/tables/ip.py:393 +#: netbox/ipam/tables/ip.py:393 msgid "Assigned" msgstr "Atanmış" -#: ipam/tables/ip.py:429 templates/vpn/l2vpntermination.html:16 -#: vpn/forms/filtersets.py:240 +#: netbox/ipam/tables/ip.py:429 netbox/templates/vpn/l2vpntermination.html:16 +#: netbox/vpn/forms/filtersets.py:240 msgid "Assigned Object" msgstr "Atanan Nesne" -#: ipam/tables/vlans.py:68 +#: netbox/ipam/tables/vlans.py:68 msgid "Scope Type" msgstr "Kapsam Türü" -#: ipam/tables/vlans.py:76 +#: netbox/ipam/tables/vlans.py:76 msgid "VID Ranges" msgstr "VID Aralıkları" -#: ipam/tables/vlans.py:111 ipam/tables/vlans.py:214 -#: templates/dcim/inc/interface_vlans_table.html:4 +#: netbox/ipam/tables/vlans.py:111 netbox/ipam/tables/vlans.py:214 +#: netbox/templates/dcim/inc/interface_vlans_table.html:4 msgid "VID" msgstr "VİDEO" -#: ipam/tables/vrfs.py:30 +#: netbox/ipam/tables/vrfs.py:30 msgid "RD" msgstr "RD" -#: ipam/tables/vrfs.py:33 +#: netbox/ipam/tables/vrfs.py:33 msgid "Unique" msgstr "Benzersiz" -#: ipam/tables/vrfs.py:37 vpn/tables/l2vpn.py:27 +#: netbox/ipam/tables/vrfs.py:37 netbox/vpn/tables/l2vpn.py:27 msgid "Import Targets" msgstr "Hedefleri İçe Aktar" -#: ipam/tables/vrfs.py:42 vpn/tables/l2vpn.py:32 +#: netbox/ipam/tables/vrfs.py:42 netbox/vpn/tables/l2vpn.py:32 msgid "Export Targets" msgstr "İhracat Hedefleri" -#: ipam/validators.py:9 +#: netbox/ipam/validators.py:9 #, python-brace-format msgid "{prefix} is not a valid prefix. Did you mean {suggested}?" msgstr "{prefix} geçerli bir önek değildir. Demek istedin {suggested}?" -#: ipam/validators.py:16 +#: netbox/ipam/validators.py:16 #, python-format msgid "The prefix length must be less than or equal to %(limit_value)s." msgstr "Önek uzunluğu şunlardan küçük veya eşit olmalıdır %(limit_value)s." -#: ipam/validators.py:24 +#: netbox/ipam/validators.py:24 #, python-format msgid "The prefix length must be greater than or equal to %(limit_value)s." msgstr "Önek uzunluğu şunlardan büyük veya eşit olmalıdır %(limit_value)s." -#: ipam/validators.py:33 +#: netbox/ipam/validators.py:33 msgid "" "Only alphanumeric characters, asterisks, hyphens, periods, and underscores " "are allowed in DNS names" @@ -9767,31 +10443,31 @@ msgstr "" "DNS adlarında yalnızca alfanümerik karakterlere, yıldızlara, tirelere, " "noktalara ve alt çizgilere izin verilir" -#: ipam/views.py:533 +#: netbox/ipam/views.py:533 msgid "Child Prefixes" msgstr "Çocuk Önekleri" -#: ipam/views.py:569 +#: netbox/ipam/views.py:569 msgid "Child Ranges" msgstr "Çocuk Aralıkları" -#: ipam/views.py:898 +#: netbox/ipam/views.py:898 msgid "Related IPs" msgstr "İlgili IP'ler" -#: ipam/views.py:1127 +#: netbox/ipam/views.py:1127 msgid "Device Interfaces" msgstr "Cihaz Arayüzleri" -#: ipam/views.py:1145 +#: netbox/ipam/views.py:1145 msgid "VM Interfaces" msgstr "VM Arayüzleri" -#: netbox/api/fields.py:65 +#: netbox/netbox/api/fields.py:65 msgid "This field may not be blank." msgstr "Bu alan boş olmayabilir." -#: netbox/api/fields.py:70 +#: netbox/netbox/api/fields.py:70 msgid "" "Value must be passed directly (e.g. \"foo\": 123); do not use a dictionary " "or list." @@ -9799,329 +10475,342 @@ msgstr "" "Değer doğrudan iletilmelidir (örn. “foo”: 123); sözlük veya liste " "kullanmayın." -#: netbox/api/fields.py:91 +#: netbox/netbox/api/fields.py:91 #, python-brace-format msgid "{value} is not a valid choice." msgstr "{value} geçerli bir seçim değildir." -#: netbox/api/fields.py:104 +#: netbox/netbox/api/fields.py:104 #, python-brace-format msgid "Invalid content type: {content_type}" msgstr "Geçersiz içerik türü: {content_type}" -#: netbox/api/fields.py:105 +#: netbox/netbox/api/fields.py:105 msgid "Invalid value. Specify a content type as '.'." msgstr "" "Geçersiz değer. İçerik türünü 'olarak belirtin.'." -#: netbox/api/fields.py:167 +#: netbox/netbox/api/fields.py:167 msgid "Ranges must be specified in the form (lower, upper)." msgstr "Aralıklar formda belirtilmelidir (alt, üst)." -#: netbox/api/fields.py:169 +#: netbox/netbox/api/fields.py:169 msgid "Range boundaries must be defined as integers." msgstr "Menzil sınırları tamsayılar olarak tanımlanmalıdır." -#: netbox/api/serializers/fields.py:40 +#: netbox/netbox/api/serializers/fields.py:40 #, python-brace-format msgid "{class_name} must implement get_view_name()" msgstr "{class_name} get_view_name () uygulamasını uygulamalıdır" -#: netbox/authentication/__init__.py:138 +#: netbox/netbox/authentication/__init__.py:138 #, python-brace-format msgid "Invalid permission {permission} for model {model}" msgstr "Geçersiz izin {permission} model için {model}" -#: netbox/choices.py:49 +#: netbox/netbox/choices.py:49 msgid "Dark Red" msgstr "Koyu Kırmızı" -#: netbox/choices.py:52 +#: netbox/netbox/choices.py:52 msgid "Rose" msgstr "Gül" -#: netbox/choices.py:53 +#: netbox/netbox/choices.py:53 msgid "Fuchsia" msgstr "Fuşya" -#: netbox/choices.py:55 +#: netbox/netbox/choices.py:55 msgid "Dark Purple" msgstr "Koyu Mor" -#: netbox/choices.py:58 +#: netbox/netbox/choices.py:58 msgid "Light Blue" msgstr "Açık Mavi" -#: netbox/choices.py:61 +#: netbox/netbox/choices.py:61 msgid "Aqua" msgstr "su" -#: netbox/choices.py:62 +#: netbox/netbox/choices.py:62 msgid "Dark Green" msgstr "Koyu Yeşil" -#: netbox/choices.py:64 +#: netbox/netbox/choices.py:64 msgid "Light Green" msgstr "Açık Yeşil" -#: netbox/choices.py:65 +#: netbox/netbox/choices.py:65 msgid "Lime" msgstr "Kireç" -#: netbox/choices.py:67 +#: netbox/netbox/choices.py:67 msgid "Amber" msgstr "Kehribar" -#: netbox/choices.py:69 +#: netbox/netbox/choices.py:69 msgid "Dark Orange" msgstr "Koyu Turuncu" -#: netbox/choices.py:70 +#: netbox/netbox/choices.py:70 msgid "Brown" msgstr "Kahverengi" -#: netbox/choices.py:71 +#: netbox/netbox/choices.py:71 msgid "Light Grey" msgstr "Açık gri" -#: netbox/choices.py:72 +#: netbox/netbox/choices.py:72 msgid "Grey" msgstr "Gri" -#: netbox/choices.py:73 +#: netbox/netbox/choices.py:73 msgid "Dark Grey" msgstr "Koyu gri" -#: netbox/choices.py:128 +#: netbox/netbox/choices.py:128 msgid "Direct" msgstr "Doğrudan" -#: netbox/choices.py:129 +#: netbox/netbox/choices.py:129 msgid "Upload" msgstr "Yükleme" -#: netbox/choices.py:141 netbox/choices.py:155 +#: netbox/netbox/choices.py:141 netbox/netbox/choices.py:155 msgid "Auto-detect" msgstr "Otomatik algılama" -#: netbox/choices.py:156 +#: netbox/netbox/choices.py:156 msgid "Comma" msgstr "Virgül" -#: netbox/choices.py:157 +#: netbox/netbox/choices.py:157 msgid "Semicolon" msgstr "Noktalı virgül" -#: netbox/choices.py:158 +#: netbox/netbox/choices.py:158 msgid "Tab" msgstr "Sekme" -#: netbox/config/__init__.py:67 +#: netbox/netbox/config/__init__.py:67 #, python-brace-format msgid "Invalid configuration parameter: {item}" msgstr "Geçersiz yapılandırma parametresi: {item}" -#: netbox/config/parameters.py:22 templates/core/inc/config_data.html:62 +#: netbox/netbox/config/parameters.py:22 +#: netbox/templates/core/inc/config_data.html:62 msgid "Login banner" msgstr "Giriş başlığı" -#: netbox/config/parameters.py:24 +#: netbox/netbox/config/parameters.py:24 msgid "Additional content to display on the login page" msgstr "Giriş sayfasında görüntülenecek ek içerik" -#: netbox/config/parameters.py:33 templates/core/inc/config_data.html:66 +#: netbox/netbox/config/parameters.py:33 +#: netbox/templates/core/inc/config_data.html:66 msgid "Maintenance banner" msgstr "Bakım afişi" -#: netbox/config/parameters.py:35 +#: netbox/netbox/config/parameters.py:35 msgid "Additional content to display when in maintenance mode" msgstr "Bakım modundayken görüntülenecek ek içerik" -#: netbox/config/parameters.py:44 templates/core/inc/config_data.html:70 +#: netbox/netbox/config/parameters.py:44 +#: netbox/templates/core/inc/config_data.html:70 msgid "Top banner" msgstr "En iyi afiş" -#: netbox/config/parameters.py:46 +#: netbox/netbox/config/parameters.py:46 msgid "Additional content to display at the top of every page" msgstr "Her sayfanın üst kısmında görüntülenecek ek içerik" -#: netbox/config/parameters.py:55 templates/core/inc/config_data.html:74 +#: netbox/netbox/config/parameters.py:55 +#: netbox/templates/core/inc/config_data.html:74 msgid "Bottom banner" msgstr "Alt afiş" -#: netbox/config/parameters.py:57 +#: netbox/netbox/config/parameters.py:57 msgid "Additional content to display at the bottom of every page" msgstr "Her sayfanın altında görüntülenecek ek içerik" -#: netbox/config/parameters.py:68 +#: netbox/netbox/config/parameters.py:68 msgid "Globally unique IP space" msgstr "Küresel olarak benzersiz IP alanı" -#: netbox/config/parameters.py:70 +#: netbox/netbox/config/parameters.py:70 msgid "Enforce unique IP addressing within the global table" msgstr "Genel tablo içinde benzersiz IP adreslemesini uygulayın" -#: netbox/config/parameters.py:75 templates/core/inc/config_data.html:44 +#: netbox/netbox/config/parameters.py:75 +#: netbox/templates/core/inc/config_data.html:44 msgid "Prefer IPv4" msgstr "IPv4'ü tercih et" -#: netbox/config/parameters.py:77 +#: netbox/netbox/config/parameters.py:77 msgid "Prefer IPv4 addresses over IPv6" msgstr "IPv4 adreslerini IPv6 yerine tercih edin" -#: netbox/config/parameters.py:84 +#: netbox/netbox/config/parameters.py:84 msgid "Rack unit height" msgstr "Raf ünitesi yüksekliği" -#: netbox/config/parameters.py:86 +#: netbox/netbox/config/parameters.py:86 msgid "Default unit height for rendered rack elevations" msgstr "Oluşturulan raf yükseklikleri için varsayılan birim yüksekliği" -#: netbox/config/parameters.py:91 +#: netbox/netbox/config/parameters.py:91 msgid "Rack unit width" msgstr "Raf ünitesi genişliği" -#: netbox/config/parameters.py:93 +#: netbox/netbox/config/parameters.py:93 msgid "Default unit width for rendered rack elevations" msgstr "Oluşturulan raf yükseklikleri için varsayılan birim genişliği" -#: netbox/config/parameters.py:100 +#: netbox/netbox/config/parameters.py:100 msgid "Powerfeed voltage" msgstr "Güç besleme gerilimi" -#: netbox/config/parameters.py:102 +#: netbox/netbox/config/parameters.py:102 msgid "Default voltage for powerfeeds" msgstr "Güç beslemeleri için varsayılan voltaj" -#: netbox/config/parameters.py:107 +#: netbox/netbox/config/parameters.py:107 msgid "Powerfeed amperage" msgstr "Güç besleme amperi" -#: netbox/config/parameters.py:109 +#: netbox/netbox/config/parameters.py:109 msgid "Default amperage for powerfeeds" msgstr "Güç beslemeleri için varsayılan amper" -#: netbox/config/parameters.py:114 +#: netbox/netbox/config/parameters.py:114 msgid "Powerfeed max utilization" msgstr "Powerfeed maksimum kullanımı" -#: netbox/config/parameters.py:116 +#: netbox/netbox/config/parameters.py:116 msgid "Default max utilization for powerfeeds" msgstr "Güç beslemeleri için varsayılan maksimum kullanım" -#: netbox/config/parameters.py:123 templates/core/inc/config_data.html:53 +#: netbox/netbox/config/parameters.py:123 +#: netbox/templates/core/inc/config_data.html:53 msgid "Allowed URL schemes" msgstr "İzin verilen URL şemaları" -#: netbox/config/parameters.py:128 +#: netbox/netbox/config/parameters.py:128 msgid "Permitted schemes for URLs in user-provided content" msgstr "" "Kullanıcı tarafından sağlanan içerikteki URL'ler için izin verilen şemalar" -#: netbox/config/parameters.py:136 +#: netbox/netbox/config/parameters.py:136 msgid "Default page size" msgstr "Varsayılan sayfa boyutu" -#: netbox/config/parameters.py:142 +#: netbox/netbox/config/parameters.py:142 msgid "Maximum page size" msgstr "Maksimum sayfa boyutu" -#: netbox/config/parameters.py:150 templates/core/inc/config_data.html:96 +#: netbox/netbox/config/parameters.py:150 +#: netbox/templates/core/inc/config_data.html:96 msgid "Custom validators" msgstr "Özel doğrulayıcılar" -#: netbox/config/parameters.py:152 +#: netbox/netbox/config/parameters.py:152 msgid "Custom validation rules (JSON)" msgstr "Özel doğrulama kuralları (JSON)" -#: netbox/config/parameters.py:160 templates/core/inc/config_data.html:104 +#: netbox/netbox/config/parameters.py:160 +#: netbox/templates/core/inc/config_data.html:104 msgid "Protection rules" msgstr "Koruma kuralları" -#: netbox/config/parameters.py:162 +#: netbox/netbox/config/parameters.py:162 msgid "Deletion protection rules (JSON)" msgstr "Silme koruma kuralları (JSON)" -#: netbox/config/parameters.py:172 templates/core/inc/config_data.html:117 +#: netbox/netbox/config/parameters.py:172 +#: netbox/templates/core/inc/config_data.html:117 msgid "Default preferences" msgstr "Varsayılan tercihler" -#: netbox/config/parameters.py:174 +#: netbox/netbox/config/parameters.py:174 msgid "Default preferences for new users" msgstr "Yeni kullanıcılar için varsayılan tercihler" -#: netbox/config/parameters.py:181 templates/core/inc/config_data.html:129 +#: netbox/netbox/config/parameters.py:181 +#: netbox/templates/core/inc/config_data.html:129 msgid "Maintenance mode" msgstr "Bakım modu" -#: netbox/config/parameters.py:183 +#: netbox/netbox/config/parameters.py:183 msgid "Enable maintenance mode" msgstr "Bakım modunu etkinleştir" -#: netbox/config/parameters.py:188 templates/core/inc/config_data.html:133 +#: netbox/netbox/config/parameters.py:188 +#: netbox/templates/core/inc/config_data.html:133 msgid "GraphQL enabled" msgstr "GraphQL etkin" -#: netbox/config/parameters.py:190 +#: netbox/netbox/config/parameters.py:190 msgid "Enable the GraphQL API" msgstr "GraphQL API'sini etkinleştirin" -#: netbox/config/parameters.py:195 templates/core/inc/config_data.html:137 +#: netbox/netbox/config/parameters.py:195 +#: netbox/templates/core/inc/config_data.html:137 msgid "Changelog retention" msgstr "Değişiklik günlüğü tutma" -#: netbox/config/parameters.py:197 +#: netbox/netbox/config/parameters.py:197 msgid "Days to retain changelog history (set to zero for unlimited)" msgstr "" "Değişiklik günlüğü geçmişini korumak için günler (sınırsız olarak sıfıra " "ayarlayın)" -#: netbox/config/parameters.py:202 +#: netbox/netbox/config/parameters.py:202 msgid "Job result retention" msgstr "İş sonucunun korunması" -#: netbox/config/parameters.py:204 +#: netbox/netbox/config/parameters.py:204 msgid "Days to retain job result history (set to zero for unlimited)" msgstr "" "İş sonucu geçmişini tutmak için günler (sınırsız olarak sıfıra ayarlayın)" -#: netbox/config/parameters.py:209 templates/core/inc/config_data.html:145 +#: netbox/netbox/config/parameters.py:209 +#: netbox/templates/core/inc/config_data.html:145 msgid "Maps URL" msgstr "Haritalar URL'si" -#: netbox/config/parameters.py:211 +#: netbox/netbox/config/parameters.py:211 msgid "Base URL for mapping geographic locations" msgstr "Coğrafi konumları haritalamak için temel URL" -#: netbox/forms/__init__.py:12 +#: netbox/netbox/forms/__init__.py:12 msgid "Partial match" msgstr "Kısmi eşleşme" -#: netbox/forms/__init__.py:13 +#: netbox/netbox/forms/__init__.py:13 msgid "Exact match" msgstr "Tam eşleşme" -#: netbox/forms/__init__.py:14 +#: netbox/netbox/forms/__init__.py:14 msgid "Starts with" msgstr "Şununla başlar" -#: netbox/forms/__init__.py:15 +#: netbox/netbox/forms/__init__.py:15 msgid "Ends with" msgstr "İle bitiyor" -#: netbox/forms/__init__.py:16 +#: netbox/netbox/forms/__init__.py:16 msgid "Regex" msgstr "Regeks" -#: netbox/forms/__init__.py:34 +#: netbox/netbox/forms/__init__.py:34 msgid "Object type(s)" msgstr "Nesne türü (ler)" -#: netbox/forms/__init__.py:40 +#: netbox/netbox/forms/__init__.py:40 msgid "Lookup" msgstr "Aramak" -#: netbox/forms/base.py:90 +#: netbox/netbox/forms/base.py:90 msgid "" "Tag slugs separated by commas, encased with double quotes (e.g. " "\"tag1,tag2,tag3\")" @@ -10129,415 +10818,426 @@ msgstr "" "Çift tırnak işaretleriyle çevrelenmiş, virgülle ayrılmış sümüklü böcekleri " "etiketleyin (örn. “tag1, tag2, tag3\")" -#: netbox/forms/base.py:120 +#: netbox/netbox/forms/base.py:120 msgid "Add tags" msgstr "Etiket ekle" -#: netbox/forms/base.py:125 +#: netbox/netbox/forms/base.py:125 msgid "Remove tags" msgstr "Etiketleri kaldır" -#: netbox/forms/mixins.py:38 +#: netbox/netbox/forms/mixins.py:38 #, python-brace-format msgid "{class_name} must specify a model class." msgstr "{class_name} bir model sınıfı belirtmelidir." -#: netbox/models/features.py:280 +#: netbox/netbox/models/features.py:280 #, python-brace-format msgid "Unknown field name '{name}' in custom field data." msgstr "Bilinmeyen alan adı '{name}'özel alan verilerinde." -#: netbox/models/features.py:286 +#: netbox/netbox/models/features.py:286 #, python-brace-format msgid "Invalid value for custom field '{name}': {error}" msgstr "Özel alan için geçersiz değer '{name}': {error}" -#: netbox/models/features.py:295 +#: netbox/netbox/models/features.py:295 #, python-brace-format msgid "Custom field '{name}' must have a unique value." msgstr "Özel alan '{name}'benzersiz bir değere sahip olmalıdır." -#: netbox/models/features.py:302 +#: netbox/netbox/models/features.py:302 #, python-brace-format msgid "Missing required custom field '{name}'." msgstr "Gerekli özel alan eksik '{name}'." -#: netbox/models/features.py:462 +#: netbox/netbox/models/features.py:462 msgid "Remote data source" msgstr "Uzak veri kaynağı" -#: netbox/models/features.py:472 +#: netbox/netbox/models/features.py:472 msgid "data path" msgstr "veri yolu" -#: netbox/models/features.py:476 +#: netbox/netbox/models/features.py:476 msgid "Path to remote file (relative to data source root)" msgstr "Uzak dosyanın yolu (veri kaynağı köküne göre)" -#: netbox/models/features.py:479 +#: netbox/netbox/models/features.py:479 msgid "auto sync enabled" msgstr "otomatik senkronizasyon etkin" -#: netbox/models/features.py:481 +#: netbox/netbox/models/features.py:481 msgid "Enable automatic synchronization of data when the data file is updated" msgstr "" "Veri dosyası güncellendiğinde verilerin otomatik senkronizasyonunu " "etkinleştir" -#: netbox/models/features.py:484 +#: netbox/netbox/models/features.py:484 msgid "date synced" msgstr "senkronize edilen tarih" -#: netbox/models/features.py:578 +#: netbox/netbox/models/features.py:578 #, python-brace-format msgid "{class_name} must implement a sync_data() method." msgstr "{class_name} bir sync_data () yöntemi uygulamalıdır." -#: netbox/navigation/menu.py:11 +#: netbox/netbox/navigation/menu.py:11 msgid "Organization" msgstr "Organizasyon" -#: netbox/navigation/menu.py:19 +#: netbox/netbox/navigation/menu.py:19 msgid "Site Groups" msgstr "Site Grupları" -#: netbox/navigation/menu.py:27 +#: netbox/netbox/navigation/menu.py:27 msgid "Tenant Groups" msgstr "Kiracı Grupları" -#: netbox/navigation/menu.py:34 +#: netbox/netbox/navigation/menu.py:34 msgid "Contact Groups" msgstr "İletişim Grupları" -#: netbox/navigation/menu.py:35 templates/tenancy/contactrole.html:8 +#: netbox/netbox/navigation/menu.py:35 +#: netbox/templates/tenancy/contactrole.html:8 msgid "Contact Roles" msgstr "İletişim Rolleri" -#: netbox/navigation/menu.py:36 +#: netbox/netbox/navigation/menu.py:36 msgid "Contact Assignments" msgstr "İletişim Atamaları" -#: netbox/navigation/menu.py:50 +#: netbox/netbox/navigation/menu.py:50 msgid "Rack Roles" msgstr "Raf Rolleri" -#: netbox/navigation/menu.py:54 +#: netbox/netbox/navigation/menu.py:54 msgid "Elevations" msgstr "Yükselmeler" -#: netbox/navigation/menu.py:60 netbox/navigation/menu.py:62 +#: netbox/netbox/navigation/menu.py:60 netbox/netbox/navigation/menu.py:62 msgid "Rack Types" msgstr "Raf Çeşitleri" -#: netbox/navigation/menu.py:76 +#: netbox/netbox/navigation/menu.py:76 msgid "Modules" msgstr "Modüller" -#: netbox/navigation/menu.py:80 templates/dcim/device.html:160 -#: templates/dcim/virtualdevicecontext.html:8 +#: netbox/netbox/navigation/menu.py:80 netbox/templates/dcim/device.html:160 +#: netbox/templates/dcim/virtualdevicecontext.html:8 msgid "Virtual Device Contexts" msgstr "Sanal Cihaz Bağlamları" -#: netbox/navigation/menu.py:88 +#: netbox/netbox/navigation/menu.py:88 msgid "Manufacturers" msgstr "İmalatçıları" -#: netbox/navigation/menu.py:92 +#: netbox/netbox/navigation/menu.py:92 msgid "Device Components" msgstr "Cihaz Bileşenleri" -#: netbox/navigation/menu.py:104 templates/dcim/inventoryitemrole.html:8 +#: netbox/netbox/navigation/menu.py:104 +#: netbox/templates/dcim/inventoryitemrole.html:8 msgid "Inventory Item Roles" msgstr "Envanter Öğesi Rolleri" -#: netbox/navigation/menu.py:111 netbox/navigation/menu.py:115 +#: netbox/netbox/navigation/menu.py:111 netbox/netbox/navigation/menu.py:115 msgid "Connections" msgstr "Bağlantılar" -#: netbox/navigation/menu.py:117 +#: netbox/netbox/navigation/menu.py:117 msgid "Cables" msgstr "Kablolar" -#: netbox/navigation/menu.py:118 +#: netbox/netbox/navigation/menu.py:118 msgid "Wireless Links" msgstr "Kablosuz Bağlantılar" -#: netbox/navigation/menu.py:121 +#: netbox/netbox/navigation/menu.py:121 msgid "Interface Connections" msgstr "Arayüz Bağlantıları" -#: netbox/navigation/menu.py:126 +#: netbox/netbox/navigation/menu.py:126 msgid "Console Connections" msgstr "Konsol Bağlantıları" -#: netbox/navigation/menu.py:131 +#: netbox/netbox/navigation/menu.py:131 msgid "Power Connections" msgstr "Güç Bağlantıları" -#: netbox/navigation/menu.py:147 +#: netbox/netbox/navigation/menu.py:147 msgid "Wireless LAN Groups" msgstr "Kablosuz LAN Grupları" -#: netbox/navigation/menu.py:168 +#: netbox/netbox/navigation/menu.py:168 msgid "Prefix & VLAN Roles" msgstr "Önek ve VLAN Rolleri" -#: netbox/navigation/menu.py:174 +#: netbox/netbox/navigation/menu.py:174 msgid "ASN Ranges" msgstr "ASN Aralıkları" -#: netbox/navigation/menu.py:196 +#: netbox/netbox/navigation/menu.py:196 msgid "VLAN Groups" msgstr "VLAN Grupları" -#: netbox/navigation/menu.py:203 +#: netbox/netbox/navigation/menu.py:203 msgid "Service Templates" msgstr "Hizmet Şablonları" -#: netbox/navigation/menu.py:204 templates/dcim/device.html:302 -#: templates/ipam/ipaddress.html:118 -#: templates/virtualization/virtualmachine.html:154 +#: netbox/netbox/navigation/menu.py:204 netbox/templates/dcim/device.html:302 +#: netbox/templates/ipam/ipaddress.html:118 +#: netbox/templates/virtualization/virtualmachine.html:154 msgid "Services" msgstr "HİZMETLER" -#: netbox/navigation/menu.py:211 +#: netbox/netbox/navigation/menu.py:211 msgid "VPN" msgstr "VPN" -#: netbox/navigation/menu.py:215 netbox/navigation/menu.py:217 -#: vpn/tables/tunnels.py:24 +#: netbox/netbox/navigation/menu.py:215 netbox/netbox/navigation/menu.py:217 +#: netbox/vpn/tables/tunnels.py:24 msgid "Tunnels" msgstr "Tüneller" -#: netbox/navigation/menu.py:218 templates/vpn/tunnelgroup.html:8 +#: netbox/netbox/navigation/menu.py:218 +#: netbox/templates/vpn/tunnelgroup.html:8 msgid "Tunnel Groups" msgstr "Tünel Grupları" -#: netbox/navigation/menu.py:219 +#: netbox/netbox/navigation/menu.py:219 msgid "Tunnel Terminations" msgstr "Tünel Sonlandırmaları" -#: netbox/navigation/menu.py:223 netbox/navigation/menu.py:225 -#: vpn/models/l2vpn.py:64 +#: netbox/netbox/navigation/menu.py:223 netbox/netbox/navigation/menu.py:225 +#: netbox/vpn/models/l2vpn.py:64 msgid "L2VPNs" msgstr "L2VPN'ler" -#: netbox/navigation/menu.py:226 templates/vpn/l2vpn.html:56 -#: templates/vpn/tunnel.html:72 vpn/tables/tunnels.py:58 +#: 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/navigation/menu.py:232 +#: netbox/netbox/navigation/menu.py:232 msgid "IKE Proposals" msgstr "IKE Teklifleri" -#: netbox/navigation/menu.py:233 templates/vpn/ikeproposal.html:41 +#: netbox/netbox/navigation/menu.py:233 +#: netbox/templates/vpn/ikeproposal.html:41 msgid "IKE Policies" msgstr "IKE Politikaları" -#: netbox/navigation/menu.py:234 +#: netbox/netbox/navigation/menu.py:234 msgid "IPSec Proposals" msgstr "IPSec Önerileri" -#: netbox/navigation/menu.py:235 templates/vpn/ipsecproposal.html:37 +#: netbox/netbox/navigation/menu.py:235 +#: netbox/templates/vpn/ipsecproposal.html:37 msgid "IPSec Policies" msgstr "IPsec İlkeleri" -#: netbox/navigation/menu.py:236 templates/vpn/ikepolicy.html:38 -#: templates/vpn/ipsecpolicy.html:25 +#: netbox/netbox/navigation/menu.py:236 netbox/templates/vpn/ikepolicy.html:38 +#: netbox/templates/vpn/ipsecpolicy.html:25 msgid "IPSec Profiles" msgstr "IPsec Profilleri" -#: netbox/navigation/menu.py:243 templates/dcim/device_edit.html:78 -msgid "Virtualization" -msgstr "Sanallaştırma" - -#: netbox/navigation/menu.py:251 -#: templates/virtualization/virtualmachine.html:174 -#: templates/virtualization/virtualmachine/base.html:32 -#: templates/virtualization/virtualmachine_list.html:21 -#: virtualization/tables/virtualmachines.py:104 virtualization/views.py:388 +#: netbox/netbox/navigation/menu.py:251 +#: 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 msgid "Virtual Disks" msgstr "Sanal Diskler" -#: netbox/navigation/menu.py:258 +#: netbox/netbox/navigation/menu.py:258 msgid "Cluster Types" msgstr "Küme Türleri" -#: netbox/navigation/menu.py:259 +#: netbox/netbox/navigation/menu.py:259 msgid "Cluster Groups" msgstr "Küme Grupları" -#: netbox/navigation/menu.py:273 +#: netbox/netbox/navigation/menu.py:273 msgid "Circuit Types" msgstr "Devre Türleri" -#: netbox/navigation/menu.py:274 +#: netbox/netbox/navigation/menu.py:274 msgid "Circuit Groups" msgstr "Devre Grupları" -#: netbox/navigation/menu.py:275 templates/circuits/circuit.html:66 +#: netbox/netbox/navigation/menu.py:275 +#: netbox/templates/circuits/circuit.html:66 msgid "Group Assignments" msgstr "Grup Ödevleri" -#: netbox/navigation/menu.py:276 +#: netbox/netbox/navigation/menu.py:276 msgid "Circuit Terminations" msgstr "Devre Sonlandırmaları" -#: netbox/navigation/menu.py:280 netbox/navigation/menu.py:282 +#: netbox/netbox/navigation/menu.py:280 netbox/netbox/navigation/menu.py:282 msgid "Providers" msgstr "Sağlayıcılar" -#: netbox/navigation/menu.py:283 templates/circuits/provider.html:51 +#: netbox/netbox/navigation/menu.py:283 +#: netbox/templates/circuits/provider.html:51 msgid "Provider Accounts" msgstr "Sağlayıcı Hesapları" -#: netbox/navigation/menu.py:284 +#: netbox/netbox/navigation/menu.py:284 msgid "Provider Networks" msgstr "Sağlayıcı Ağları" -#: netbox/navigation/menu.py:298 +#: netbox/netbox/navigation/menu.py:298 msgid "Power Panels" msgstr "Güç Panelleri" -#: netbox/navigation/menu.py:309 +#: netbox/netbox/navigation/menu.py:309 msgid "Configurations" msgstr "Yapılandırmalar" -#: netbox/navigation/menu.py:311 +#: netbox/netbox/navigation/menu.py:311 msgid "Config Contexts" msgstr "Yapılandırma Bağlamları" -#: netbox/navigation/menu.py:312 +#: netbox/netbox/navigation/menu.py:312 msgid "Config Templates" msgstr "Yapılandırma Şablonları" -#: netbox/navigation/menu.py:319 netbox/navigation/menu.py:323 +#: netbox/netbox/navigation/menu.py:319 netbox/netbox/navigation/menu.py:323 msgid "Customization" msgstr "Özelleştirme" -#: netbox/navigation/menu.py:325 templates/dcim/device_edit.html:103 -#: templates/dcim/htmx/cable_edit.html:81 -#: templates/dcim/virtualchassis_add.html:31 -#: templates/dcim/virtualchassis_edit.html:40 -#: templates/generic/bulk_edit.html:76 templates/htmx/form.html:19 -#: templates/inc/filter_list.html:30 templates/inc/panels/custom_fields.html:7 -#: templates/ipam/ipaddress_bulk_add.html:35 templates/ipam/vlan_edit.html:59 +#: netbox/netbox/navigation/menu.py:325 +#: netbox/templates/dcim/device_edit.html:103 +#: netbox/templates/dcim/htmx/cable_edit.html:81 +#: netbox/templates/dcim/virtualchassis_add.html:31 +#: netbox/templates/dcim/virtualchassis_edit.html:40 +#: netbox/templates/generic/bulk_edit.html:76 +#: netbox/templates/htmx/form.html:19 netbox/templates/inc/filter_list.html:30 +#: netbox/templates/inc/panels/custom_fields.html:7 +#: netbox/templates/ipam/ipaddress_bulk_add.html:35 +#: netbox/templates/ipam/vlan_edit.html:59 msgid "Custom Fields" msgstr "Özel Alanlar" -#: netbox/navigation/menu.py:326 +#: netbox/netbox/navigation/menu.py:326 msgid "Custom Field Choices" msgstr "Özel Alan Seçenekleri" -#: netbox/navigation/menu.py:327 +#: netbox/netbox/navigation/menu.py:327 msgid "Custom Links" msgstr "Özel Bağlantılar" -#: netbox/navigation/menu.py:328 +#: netbox/netbox/navigation/menu.py:328 msgid "Export Templates" msgstr "Şablonları Dışa Aktar" -#: netbox/navigation/menu.py:329 +#: netbox/netbox/navigation/menu.py:329 msgid "Saved Filters" msgstr "Kaydedilen Filtreler" -#: netbox/navigation/menu.py:331 +#: netbox/netbox/navigation/menu.py:331 msgid "Image Attachments" msgstr "Görüntü Ekleri" -#: netbox/navigation/menu.py:349 +#: netbox/netbox/navigation/menu.py:349 msgid "Operations" msgstr "Operasyonlar" -#: netbox/navigation/menu.py:353 +#: netbox/netbox/navigation/menu.py:353 msgid "Integrations" msgstr "Entegrasyonlar" -#: netbox/navigation/menu.py:355 +#: netbox/netbox/navigation/menu.py:355 msgid "Data Sources" msgstr "Veri Kaynakları" -#: netbox/navigation/menu.py:356 +#: netbox/netbox/navigation/menu.py:356 msgid "Event Rules" msgstr "Etkinlik Kuralları" -#: netbox/navigation/menu.py:357 +#: netbox/netbox/navigation/menu.py:357 msgid "Webhooks" msgstr "Web kancaları" -#: netbox/navigation/menu.py:361 netbox/navigation/menu.py:365 -#: netbox/views/generic/feature_views.py:153 -#: templates/extras/report/base.html:37 templates/extras/script/base.html:36 +#: netbox/netbox/navigation/menu.py:361 netbox/netbox/navigation/menu.py:365 +#: netbox/netbox/views/generic/feature_views.py:153 +#: netbox/templates/extras/report/base.html:37 +#: netbox/templates/extras/script/base.html:36 msgid "Jobs" msgstr "Meslekler" -#: netbox/navigation/menu.py:371 +#: netbox/netbox/navigation/menu.py:371 msgid "Logging" msgstr "Günlüğe kaydetme" -#: netbox/navigation/menu.py:373 +#: netbox/netbox/navigation/menu.py:373 msgid "Notification Groups" msgstr "Bildirim Grupları" -#: netbox/navigation/menu.py:374 +#: netbox/netbox/navigation/menu.py:374 msgid "Journal Entries" msgstr "Dergi Girişleri" -#: netbox/navigation/menu.py:375 templates/core/objectchange.html:9 -#: templates/core/objectchange_list.html:4 +#: netbox/netbox/navigation/menu.py:375 +#: netbox/templates/core/objectchange.html:9 +#: netbox/templates/core/objectchange_list.html:4 msgid "Change Log" msgstr "Değişim Günlüğü" -#: netbox/navigation/menu.py:382 templates/inc/user_menu.html:29 +#: netbox/netbox/navigation/menu.py:382 netbox/templates/inc/user_menu.html:29 msgid "Admin" msgstr "Yönetici" -#: netbox/navigation/menu.py:430 templates/account/base.html:27 -#: templates/inc/user_menu.html:57 +#: netbox/netbox/navigation/menu.py:430 netbox/templates/account/base.html:27 +#: netbox/templates/inc/user_menu.html:57 msgid "API Tokens" msgstr "API Belirteçleri" -#: netbox/navigation/menu.py:437 users/forms/model_forms.py:187 -#: users/forms/model_forms.py:195 users/forms/model_forms.py:242 -#: users/forms/model_forms.py:249 +#: netbox/netbox/navigation/menu.py:437 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/navigation/menu.py:445 netbox/navigation/menu.py:449 -#: templates/core/system.html:7 +#: netbox/netbox/navigation/menu.py:445 netbox/netbox/navigation/menu.py:449 +#: netbox/templates/core/system.html:7 msgid "System" msgstr "Sistem" -#: netbox/navigation/menu.py:454 netbox/navigation/menu.py:502 -#: templates/500.html:35 templates/account/preferences.html:22 -#: templates/core/plugin.html:13 templates/core/plugin_list.html:7 -#: templates/core/plugin_list.html:12 +#: netbox/netbox/navigation/menu.py:454 netbox/netbox/navigation/menu.py:502 +#: netbox/templates/500.html:35 netbox/templates/account/preferences.html:22 +#: netbox/templates/core/plugin.html:13 +#: netbox/templates/core/plugin_list.html:7 +#: netbox/templates/core/plugin_list.html:12 msgid "Plugins" msgstr "Eklentiler" -#: netbox/navigation/menu.py:459 +#: netbox/netbox/navigation/menu.py:459 msgid "Configuration History" msgstr "Yapılandırma Geçmişi" -#: netbox/navigation/menu.py:465 templates/core/rq_task.html:8 -#: templates/core/rq_task_list.html:22 +#: netbox/netbox/navigation/menu.py:465 netbox/templates/core/rq_task.html:8 +#: netbox/templates/core/rq_task_list.html:22 msgid "Background Tasks" msgstr "Arka Plan Görevleri" -#: netbox/plugins/navigation.py:47 netbox/plugins/navigation.py:69 +#: netbox/netbox/plugins/navigation.py:47 +#: netbox/netbox/plugins/navigation.py:69 msgid "Permissions must be passed as a tuple or list." msgstr "İzinler bir küme veya liste olarak iletilmelidir." -#: netbox/plugins/navigation.py:51 +#: netbox/netbox/plugins/navigation.py:51 msgid "Buttons must be passed as a tuple or list." msgstr "Düğmeler bir küme veya liste olarak iletilmelidir." -#: netbox/plugins/navigation.py:73 +#: netbox/netbox/plugins/navigation.py:73 msgid "Button color must be a choice within ButtonColorChoices." msgstr "Düğme rengi ButtonColorChoices içinde bir seçim olmalıdır." -#: netbox/plugins/registration.py:25 +#: netbox/netbox/plugins/registration.py:25 #, python-brace-format msgid "" "PluginTemplateExtension class {template_extension} was passed as an " @@ -10546,7 +11246,7 @@ msgstr "" "PluginTemplateExtension sınıfı {template_extension} Örnek olarak kabul " "edildi!" -#: netbox/plugins/registration.py:31 +#: netbox/netbox/plugins/registration.py:31 #, python-brace-format msgid "" "{template_extension} is not a subclass of " @@ -10555,194 +11255,195 @@ msgstr "" "{template_extension} Netbox.plugins.pluginTemplateExtension'ın bir alt " "sınıfı değildir!" -#: netbox/plugins/registration.py:51 +#: netbox/netbox/plugins/registration.py:51 #, python-brace-format msgid "{item} must be an instance of netbox.plugins.PluginMenuItem" msgstr "{item} Netbox.Plugins.PluginMenuItem örneği olmalıdır" -#: netbox/plugins/registration.py:62 +#: netbox/netbox/plugins/registration.py:62 #, 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/plugins/registration.py:67 +#: netbox/netbox/plugins/registration.py:67 #, python-brace-format msgid "{button} must be an instance of netbox.plugins.PluginMenuButton" msgstr "{button} Netbox.Plugins.PluginMenuButton örneği olmalıdır" -#: netbox/plugins/templates.py:37 +#: netbox/netbox/plugins/templates.py:37 msgid "extra_context must be a dictionary" msgstr "extra_context bir sözlük olmalıdır" -#: netbox/preferences.py:19 +#: netbox/netbox/preferences.py:19 msgid "HTMX Navigation" msgstr "HTMX Navigasyon" -#: netbox/preferences.py:24 +#: netbox/netbox/preferences.py:24 msgid "Enable dynamic UI navigation" msgstr "Dinamik kullanıcı arayüzü gezinmesini etkinleştir" -#: netbox/preferences.py:26 +#: netbox/netbox/preferences.py:26 msgid "Experimental feature" msgstr "Deneysel özellik" -#: netbox/preferences.py:29 +#: netbox/netbox/preferences.py:29 msgid "Language" msgstr "Dil" -#: netbox/preferences.py:34 +#: netbox/netbox/preferences.py:34 msgid "Forces UI translation to the specified language" msgstr "Kullanıcı arabirimi çevirisini belirtilen dile zorlar" -#: netbox/preferences.py:36 +#: netbox/netbox/preferences.py:36 msgid "Support for translation has been disabled locally" msgstr "Çeviri desteği yerel olarak devre dışı bırakıldı" -#: netbox/preferences.py:42 +#: netbox/netbox/preferences.py:42 msgid "Page length" msgstr "Sayfa uzunluğu" -#: netbox/preferences.py:44 +#: netbox/netbox/preferences.py:44 msgid "The default number of objects to display per page" msgstr "Sayfa başına görüntülenecek varsayılan nesne sayısı" -#: netbox/preferences.py:48 +#: netbox/netbox/preferences.py:48 msgid "Paginator placement" msgstr "Paginator yerleşimi" -#: netbox/preferences.py:50 +#: netbox/netbox/preferences.py:50 msgid "Bottom" msgstr "Alt" -#: netbox/preferences.py:51 +#: netbox/netbox/preferences.py:51 msgid "Top" msgstr "Üst" -#: netbox/preferences.py:52 +#: netbox/netbox/preferences.py:52 msgid "Both" msgstr "İkisi de" -#: netbox/preferences.py:55 +#: netbox/netbox/preferences.py:55 msgid "Where the paginator controls will be displayed relative to a table" msgstr "Paginator kontrollerinin bir tabloya göre görüntüleneceği yer" -#: netbox/preferences.py:60 +#: netbox/netbox/preferences.py:60 msgid "Data format" msgstr "Veri biçimi" -#: netbox/preferences.py:65 +#: netbox/netbox/preferences.py:65 msgid "The preferred syntax for displaying generic data within the UI" msgstr "" "Kullanıcı arayüzünde genel verileri görüntülemek için tercih edilen " "sözdizimi" -#: netbox/registry.py:14 +#: netbox/netbox/registry.py:14 #, python-brace-format msgid "Invalid store: {key}" msgstr "Geçersiz mağaza: {key}" -#: netbox/registry.py:17 +#: netbox/netbox/registry.py:17 msgid "Cannot add stores to registry after initialization" msgstr "Başlatıldıktan sonra kayıt defterine mağazalar eklenemiyor" -#: netbox/registry.py:20 +#: netbox/netbox/registry.py:20 msgid "Cannot delete stores from registry" msgstr "Mağazalar kayıt defterinden silinemiyor" -#: netbox/settings.py:760 +#: netbox/netbox/settings.py:760 msgid "Czech" msgstr "Çek" -#: netbox/settings.py:761 +#: netbox/netbox/settings.py:761 msgid "Danish" msgstr "Danca" -#: netbox/settings.py:762 +#: netbox/netbox/settings.py:762 msgid "German" msgstr "Alman" -#: netbox/settings.py:763 +#: netbox/netbox/settings.py:763 msgid "English" msgstr "İngilizce" -#: netbox/settings.py:764 +#: netbox/netbox/settings.py:764 msgid "Spanish" msgstr "İspanyolca" -#: netbox/settings.py:765 +#: netbox/netbox/settings.py:765 msgid "French" msgstr "Fransızca" -#: netbox/settings.py:766 +#: netbox/netbox/settings.py:766 msgid "Italian" msgstr "İtalyan" -#: netbox/settings.py:767 +#: netbox/netbox/settings.py:767 msgid "Japanese" msgstr "Japonca" -#: netbox/settings.py:768 +#: netbox/netbox/settings.py:768 msgid "Dutch" msgstr "Hollandalı" -#: netbox/settings.py:769 +#: netbox/netbox/settings.py:769 msgid "Polish" msgstr "Lehçe" -#: netbox/settings.py:770 +#: netbox/netbox/settings.py:770 msgid "Portuguese" msgstr "Portekizce" -#: netbox/settings.py:771 +#: netbox/netbox/settings.py:771 msgid "Russian" msgstr "Rusça" -#: netbox/settings.py:772 +#: netbox/netbox/settings.py:772 msgid "Turkish" msgstr "Türkçe" -#: netbox/settings.py:773 +#: netbox/netbox/settings.py:773 msgid "Ukrainian" msgstr "Ukraynalı" -#: netbox/settings.py:774 +#: netbox/netbox/settings.py:774 msgid "Chinese" msgstr "Çince" -#: netbox/tables/columns.py:176 +#: netbox/netbox/tables/columns.py:176 msgid "Select all" msgstr "Tümünü seç" -#: netbox/tables/columns.py:189 +#: netbox/netbox/tables/columns.py:189 msgid "Toggle all" msgstr "Tümünü değiştir" -#: netbox/tables/columns.py:300 +#: netbox/netbox/tables/columns.py:300 msgid "Toggle Dropdown" msgstr "Açılır menüyü Aç/Kapat" -#: netbox/tables/columns.py:572 templates/core/job.html:53 +#: netbox/netbox/tables/columns.py:572 netbox/templates/core/job.html:53 msgid "Error" msgstr "Hata" -#: netbox/tables/tables.py:58 +#: netbox/netbox/tables/tables.py:58 #, python-brace-format msgid "No {model_name} found" msgstr "Hayır {model_name} bulunan" -#: netbox/tables/tables.py:249 templates/generic/bulk_import.html:117 +#: netbox/netbox/tables/tables.py:249 +#: netbox/templates/generic/bulk_import.html:117 msgid "Field" msgstr "Tarla" -#: netbox/tables/tables.py:252 +#: netbox/netbox/tables/tables.py:252 msgid "Value" msgstr "Değer" -#: netbox/tests/dummy_plugin/navigation.py:29 +#: netbox/netbox/tests/dummy_plugin/navigation.py:29 msgid "Dummy Plugin" msgstr "Sahte Eklenti" -#: netbox/views/generic/bulk_views.py:114 +#: netbox/netbox/views/generic/bulk_views.py:114 #, python-brace-format msgid "" "There was an error rendering the selected export template ({template}): " @@ -10751,56 +11452,56 @@ msgstr "" "Seçilen dışa aktarma şablonunu oluştururken bir hata oluştu ({template}): " "{error}" -#: netbox/views/generic/bulk_views.py:416 +#: netbox/netbox/views/generic/bulk_views.py:416 #, 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/views/generic/bulk_views.py:702 -#: netbox/views/generic/bulk_views.py:900 -#: netbox/views/generic/bulk_views.py:948 +#: netbox/netbox/views/generic/bulk_views.py:709 +#: netbox/netbox/views/generic/bulk_views.py:910 +#: netbox/netbox/views/generic/bulk_views.py:958 #, python-brace-format msgid "No {object_type} were selected." msgstr "Hayır {object_type} seçildi." -#: netbox/views/generic/bulk_views.py:782 +#: netbox/netbox/views/generic/bulk_views.py:788 #, python-brace-format msgid "Renamed {count} {object_type}" msgstr "Yeniden adlandırıldı {count} {object_type}" -#: netbox/views/generic/bulk_views.py:878 +#: netbox/netbox/views/generic/bulk_views.py:888 #, python-brace-format msgid "Deleted {count} {object_type}" msgstr "Silinmiş {count} {object_type}" -#: netbox/views/generic/feature_views.py:40 +#: netbox/netbox/views/generic/feature_views.py:40 msgid "Changelog" msgstr "Değişiklik Günlüğü" -#: netbox/views/generic/feature_views.py:93 +#: netbox/netbox/views/generic/feature_views.py:93 msgid "Journal" msgstr "dergi" -#: netbox/views/generic/feature_views.py:207 +#: netbox/netbox/views/generic/feature_views.py:207 msgid "Unable to synchronize data: No data file set." msgstr "Veriler senkronize edilemiyor: Veri dosyası kümesi yok." -#: netbox/views/generic/feature_views.py:211 +#: netbox/netbox/views/generic/feature_views.py:211 #, python-brace-format msgid "Synchronized data for {object_type} {object}." msgstr "Senkronize edilmiş veriler {object_type} {object}." -#: netbox/views/generic/feature_views.py:236 +#: netbox/netbox/views/generic/feature_views.py:236 #, python-brace-format msgid "Synced {count} {object_type}" msgstr "Senkronize {count} {object_type}" -#: netbox/views/generic/object_views.py:108 +#: netbox/netbox/views/generic/object_views.py:108 #, python-brace-format msgid "{class_name} must implement get_children()" msgstr "{class_name} get_children () uygulamasını uygulamalıdır" -#: netbox/views/misc.py:44 +#: netbox/netbox/views/misc.py:46 msgid "" "There was an error loading the dashboard configuration. A default dashboard " "is in use." @@ -10808,703 +11509,745 @@ msgstr "" "Kontrol paneli yapılandırması yüklenirken bir hata oluştu. Varsayılan bir " "gösterge tablosu kullanımda." -#: templates/403.html:4 +#: netbox/templates/403.html:4 msgid "Access Denied" msgstr "Erişim Reddedildi" -#: templates/403.html:9 +#: netbox/templates/403.html:9 msgid "You do not have permission to access this page" msgstr "Bu sayfaya erişim izniniz yok" -#: templates/404.html:4 +#: netbox/templates/404.html:4 msgid "Page Not Found" msgstr "Sayfa Bulunamadı" -#: templates/404.html:9 +#: netbox/templates/404.html:9 msgid "The requested page does not exist" msgstr "İstenen sayfa mevcut değil" -#: templates/500.html:7 templates/500.html:18 +#: netbox/templates/500.html:7 netbox/templates/500.html:18 msgid "Server Error" msgstr "Sunucu Hatası" -#: templates/500.html:23 +#: netbox/templates/500.html:23 msgid "There was a problem with your request. Please contact an administrator" msgstr "İsteğinizle ilgili bir sorun oluştu. Lütfen bir yöneticiye başvurun" -#: templates/500.html:28 +#: netbox/templates/500.html:28 msgid "The complete exception is provided below" msgstr "Tam istisna aşağıda verilmiştir" -#: templates/500.html:33 templates/core/system.html:40 +#: netbox/templates/500.html:33 netbox/templates/core/system.html:40 msgid "Python version" msgstr "Python sürümü" -#: templates/500.html:34 +#: netbox/templates/500.html:34 msgid "NetBox version" msgstr "NetBox sürümü" -#: templates/500.html:36 +#: netbox/templates/500.html:36 msgid "None installed" msgstr "Yüklü yok" -#: templates/500.html:39 +#: netbox/templates/500.html:39 msgid "If further assistance is required, please post to the" msgstr "Daha fazla yardım gerekiyorsa, lütfen şu adrese gönderin" -#: templates/500.html:39 +#: netbox/templates/500.html:39 msgid "NetBox discussion forum" msgstr "NetBox tartışma forumu" -#: templates/500.html:39 +#: netbox/templates/500.html:39 msgid "on GitHub" msgstr "GitHub'da" -#: templates/500.html:42 templates/base/40x.html:17 +#: netbox/templates/500.html:42 netbox/templates/base/40x.html:17 msgid "Home Page" msgstr "Ana Sayfa" -#: templates/account/base.html:7 templates/inc/user_menu.html:45 -#: vpn/forms/bulk_edit.py:255 vpn/forms/filtersets.py:189 -#: vpn/forms/model_forms.py:379 +#: netbox/templates/account/base.html:7 netbox/templates/inc/user_menu.html:45 +#: netbox/vpn/forms/bulk_edit.py:255 netbox/vpn/forms/filtersets.py:189 +#: netbox/vpn/forms/model_forms.py:379 msgid "Profile" msgstr "Profil" -#: templates/account/base.html:13 templates/account/notifications.html:7 -#: templates/inc/user_menu.html:15 +#: netbox/templates/account/base.html:13 +#: netbox/templates/account/notifications.html:7 +#: netbox/templates/inc/user_menu.html:15 msgid "Notifications" msgstr "Bildirimler" -#: templates/account/base.html:16 templates/account/subscriptions.html:7 -#: templates/inc/user_menu.html:51 +#: netbox/templates/account/base.html:16 +#: netbox/templates/account/subscriptions.html:7 +#: netbox/templates/inc/user_menu.html:51 msgid "Subscriptions" msgstr "Abonelikler" -#: templates/account/base.html:19 templates/inc/user_menu.html:54 +#: netbox/templates/account/base.html:19 +#: netbox/templates/inc/user_menu.html:54 msgid "Preferences" msgstr "Tercihler" -#: templates/account/password.html:5 +#: netbox/templates/account/password.html:5 msgid "Change Password" msgstr "Şifreyi Değiştir" -#: templates/account/password.html:19 templates/account/preferences.html:77 -#: templates/core/configrevision_restore.html:63 -#: templates/dcim/devicebay_populate.html:34 -#: templates/dcim/virtualchassis_add_member.html:26 -#: templates/dcim/virtualchassis_edit.html:103 -#: templates/extras/object_journal.html:26 templates/extras/script.html:38 -#: templates/generic/bulk_add_component.html:67 -#: templates/generic/bulk_delete.html:65 templates/generic/bulk_edit.html:106 -#: templates/generic/bulk_import.html:56 templates/generic/bulk_import.html:78 -#: templates/generic/bulk_import.html:100 -#: templates/generic/bulk_remove.html:62 templates/generic/bulk_rename.html:63 -#: templates/generic/confirmation_form.html:19 -#: templates/generic/object_edit.html:72 templates/htmx/delete_form.html:53 -#: templates/htmx/delete_form.html:55 templates/ipam/ipaddress_assign.html:28 -#: templates/virtualization/cluster_add_devices.html:30 +#: netbox/templates/account/password.html:19 +#: netbox/templates/account/preferences.html:77 +#: netbox/templates/core/configrevision_restore.html:63 +#: netbox/templates/dcim/devicebay_populate.html:34 +#: netbox/templates/dcim/virtualchassis_add_member.html:26 +#: netbox/templates/dcim/virtualchassis_edit.html:103 +#: netbox/templates/extras/object_journal.html:26 +#: netbox/templates/extras/script.html:38 +#: netbox/templates/generic/bulk_add_component.html:67 +#: netbox/templates/generic/bulk_delete.html:65 +#: netbox/templates/generic/bulk_edit.html:106 +#: netbox/templates/generic/bulk_import.html:56 +#: netbox/templates/generic/bulk_import.html:78 +#: netbox/templates/generic/bulk_import.html:100 +#: netbox/templates/generic/bulk_remove.html:62 +#: netbox/templates/generic/bulk_rename.html:63 +#: netbox/templates/generic/confirmation_form.html:19 +#: netbox/templates/generic/object_edit.html:72 +#: netbox/templates/htmx/delete_form.html:53 +#: netbox/templates/htmx/delete_form.html:55 +#: netbox/templates/ipam/ipaddress_assign.html:28 +#: netbox/templates/virtualization/cluster_add_devices.html:30 msgid "Cancel" msgstr "İptal" -#: templates/account/password.html:20 templates/account/preferences.html:78 -#: templates/dcim/devicebay_populate.html:35 -#: templates/dcim/virtualchassis_add_member.html:28 -#: templates/dcim/virtualchassis_edit.html:105 -#: templates/extras/dashboard/widget_add.html:26 -#: templates/extras/dashboard/widget_config.html:19 -#: templates/extras/object_journal.html:27 -#: templates/generic/object_edit.html:75 -#: utilities/templates/helpers/applied_filters.html:16 -#: utilities/templates/helpers/table_config_form.html:40 +#: netbox/templates/account/password.html:20 +#: netbox/templates/account/preferences.html:78 +#: netbox/templates/dcim/devicebay_populate.html:35 +#: netbox/templates/dcim/virtualchassis_add_member.html:28 +#: netbox/templates/dcim/virtualchassis_edit.html:105 +#: netbox/templates/extras/dashboard/widget_add.html:26 +#: netbox/templates/extras/dashboard/widget_config.html:19 +#: netbox/templates/extras/object_journal.html:27 +#: netbox/templates/generic/object_edit.html:75 +#: netbox/utilities/templates/helpers/applied_filters.html:16 +#: netbox/utilities/templates/helpers/table_config_form.html:40 msgid "Save" msgstr "Kaydet" -#: templates/account/preferences.html:34 +#: netbox/templates/account/preferences.html:34 msgid "Table Configurations" msgstr "Tablo Yapılandırmaları" -#: templates/account/preferences.html:39 +#: netbox/templates/account/preferences.html:39 msgid "Clear table preferences" msgstr "Tablo tercihlerini temizle" -#: templates/account/preferences.html:47 +#: netbox/templates/account/preferences.html:47 msgid "Toggle All" msgstr "Tümünü Değiştir" -#: templates/account/preferences.html:49 +#: netbox/templates/account/preferences.html:49 msgid "Table" msgstr "Tablo" -#: templates/account/preferences.html:50 +#: netbox/templates/account/preferences.html:50 msgid "Ordering" msgstr "Sipariş" -#: templates/account/preferences.html:51 +#: netbox/templates/account/preferences.html:51 msgid "Columns" msgstr "Sütunlar" -#: templates/account/preferences.html:71 templates/dcim/cable_trace.html:113 -#: templates/extras/object_configcontext.html:43 +#: netbox/templates/account/preferences.html:71 +#: netbox/templates/dcim/cable_trace.html:113 +#: netbox/templates/extras/object_configcontext.html:43 msgid "None found" msgstr "Hiçbiri bulunamadı" -#: templates/account/profile.html:6 +#: netbox/templates/account/profile.html:6 msgid "User Profile" msgstr "Kullanıcı Profili" -#: templates/account/profile.html:12 +#: netbox/templates/account/profile.html:12 msgid "Account Details" msgstr "Hesap Ayrıntıları" -#: templates/account/profile.html:29 templates/tenancy/contact.html:43 -#: templates/users/user.html:25 tenancy/forms/bulk_edit.py:109 +#: netbox/templates/account/profile.html:29 +#: netbox/templates/tenancy/contact.html:43 +#: netbox/templates/users/user.html:25 netbox/tenancy/forms/bulk_edit.py:109 msgid "Email" msgstr "E-posta" -#: templates/account/profile.html:33 templates/users/user.html:29 +#: netbox/templates/account/profile.html:33 +#: netbox/templates/users/user.html:29 msgid "Account Created" msgstr "Hesap Oluşturuldu" -#: templates/account/profile.html:37 templates/users/user.html:33 +#: netbox/templates/account/profile.html:37 +#: netbox/templates/users/user.html:33 msgid "Last Login" msgstr "Son Giriş" -#: templates/account/profile.html:41 templates/users/user.html:45 +#: netbox/templates/account/profile.html:41 +#: netbox/templates/users/user.html:45 msgid "Superuser" msgstr "Süper kullanıcı" -#: templates/account/profile.html:45 templates/inc/user_menu.html:31 -#: templates/users/user.html:41 +#: netbox/templates/account/profile.html:45 +#: netbox/templates/inc/user_menu.html:31 netbox/templates/users/user.html:41 msgid "Staff" msgstr "Personel" -#: templates/account/profile.html:53 templates/users/objectpermission.html:82 -#: templates/users/user.html:53 +#: netbox/templates/account/profile.html:53 +#: netbox/templates/users/objectpermission.html:82 +#: netbox/templates/users/user.html:53 msgid "Assigned Groups" msgstr "Atanan Gruplar" -#: templates/account/profile.html:58 -#: templates/circuits/circuit_terminations_swap.html:18 -#: templates/circuits/circuit_terminations_swap.html:26 -#: templates/circuits/circuittermination.html:34 -#: templates/circuits/inc/circuit_termination.html:68 -#: templates/core/objectchange.html:124 templates/core/objectchange.html:142 -#: templates/dcim/devicebay.html:59 -#: templates/dcim/inc/panels/inventory_items.html:45 -#: templates/dcim/interface.html:296 templates/dcim/modulebay.html:80 -#: templates/extras/configcontext.html:70 templates/extras/eventrule.html:66 -#: templates/extras/htmx/script_result.html:60 -#: templates/extras/webhook.html:65 templates/extras/webhook.html:75 -#: templates/inc/panel_table.html:13 templates/inc/panels/comments.html:10 -#: templates/ipam/inc/panels/fhrp_groups.html:56 templates/users/group.html:34 -#: templates/users/group.html:44 templates/users/objectpermission.html:77 -#: templates/users/objectpermission.html:87 templates/users/user.html:58 -#: templates/users/user.html:68 +#: netbox/templates/account/profile.html:58 +#: netbox/templates/circuits/circuit_terminations_swap.html:18 +#: netbox/templates/circuits/circuit_terminations_swap.html:26 +#: netbox/templates/circuits/circuittermination.html:34 +#: netbox/templates/circuits/inc/circuit_termination.html:68 +#: netbox/templates/core/objectchange.html:124 +#: 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/modulebay.html:80 +#: netbox/templates/extras/configcontext.html:70 +#: netbox/templates/extras/eventrule.html:66 +#: netbox/templates/extras/htmx/script_result.html:60 +#: netbox/templates/extras/webhook.html:65 +#: netbox/templates/extras/webhook.html:75 +#: netbox/templates/inc/panel_table.html:13 +#: netbox/templates/inc/panels/comments.html:10 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:56 +#: netbox/templates/users/group.html:34 netbox/templates/users/group.html:44 +#: netbox/templates/users/objectpermission.html:77 +#: netbox/templates/users/objectpermission.html:87 +#: netbox/templates/users/user.html:58 netbox/templates/users/user.html:68 msgid "None" msgstr "Yok" -#: templates/account/profile.html:68 templates/users/user.html:78 +#: netbox/templates/account/profile.html:68 +#: netbox/templates/users/user.html:78 msgid "Recent Activity" msgstr "Son Etkinlik" -#: templates/account/token.html:8 templates/account/token_list.html:6 +#: netbox/templates/account/token.html:8 +#: netbox/templates/account/token_list.html:6 msgid "My API Tokens" msgstr "API Belirteçlerim" -#: templates/account/token.html:11 templates/account/token.html:19 -#: templates/users/token.html:6 templates/users/token.html:14 -#: users/forms/filtersets.py:120 +#: netbox/templates/account/token.html:11 +#: netbox/templates/account/token.html:19 netbox/templates/users/token.html:6 +#: netbox/templates/users/token.html:14 netbox/users/forms/filtersets.py:120 msgid "Token" msgstr "Simge" -#: templates/account/token.html:39 templates/users/token.html:31 -#: users/forms/bulk_edit.py:107 +#: netbox/templates/account/token.html:39 netbox/templates/users/token.html:31 +#: netbox/users/forms/bulk_edit.py:107 msgid "Write enabled" msgstr "Yazma etkin" -#: templates/account/token.html:51 templates/users/token.html:43 +#: netbox/templates/account/token.html:51 netbox/templates/users/token.html:43 msgid "Last used" msgstr "En son kullanılmış" -#: templates/account/token_list.html:12 +#: netbox/templates/account/token_list.html:12 msgid "Add a Token" msgstr "Bir Jeton Ekle" -#: templates/base/base.html:22 templates/home.html:27 +#: netbox/templates/base/base.html:22 netbox/templates/home.html:27 msgid "Home" msgstr "Ana Sayfa" -#: templates/base/layout.html:25 +#: netbox/templates/base/layout.html:25 msgid "NetBox Motif" msgstr "NetBox Motif" -#: templates/base/layout.html:38 templates/base/layout.html:39 -#: templates/login.html:14 templates/login.html:15 +#: netbox/templates/base/layout.html:38 netbox/templates/base/layout.html:39 +#: netbox/templates/login.html:14 netbox/templates/login.html:15 msgid "NetBox Logo" msgstr "NetBox Logosu" -#: templates/base/layout.html:150 templates/base/layout.html:151 +#: netbox/templates/base/layout.html:150 netbox/templates/base/layout.html:151 msgid "Docs" msgstr "Dokümanlar" -#: templates/base/layout.html:156 templates/base/layout.html:157 -#: templates/rest_framework/api.html:10 +#: netbox/templates/base/layout.html:156 netbox/templates/base/layout.html:157 +#: netbox/templates/rest_framework/api.html:10 msgid "REST API" msgstr "REST API" -#: templates/base/layout.html:162 templates/base/layout.html:163 +#: netbox/templates/base/layout.html:162 netbox/templates/base/layout.html:163 msgid "REST API documentation" msgstr "REST API belgeleri" -#: templates/base/layout.html:169 templates/base/layout.html:170 +#: netbox/templates/base/layout.html:169 netbox/templates/base/layout.html:170 msgid "GraphQL API" msgstr "GraphQL API" -#: templates/base/layout.html:185 templates/base/layout.html:186 +#: netbox/templates/base/layout.html:185 netbox/templates/base/layout.html:186 msgid "NetBox Labs Support" msgstr "NetBox Labs Desteği" -#: templates/base/layout.html:194 templates/base/layout.html:195 +#: netbox/templates/base/layout.html:194 netbox/templates/base/layout.html:195 msgid "Source Code" msgstr "Kaynak Kodu" -#: templates/base/layout.html:200 templates/base/layout.html:201 +#: netbox/templates/base/layout.html:200 netbox/templates/base/layout.html:201 msgid "Community" msgstr "Topluluk" -#: templates/circuits/circuit.html:47 +#: netbox/templates/circuits/circuit.html:47 msgid "Install Date" msgstr "Yükleme Tarihi" -#: templates/circuits/circuit.html:51 +#: netbox/templates/circuits/circuit.html:51 msgid "Termination Date" msgstr "Fesih Tarihi" -#: templates/circuits/circuit.html:70 -#: templates/ipam/inc/panels/fhrp_groups.html:15 +#: netbox/templates/circuits/circuit.html:70 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:15 msgid "Assign Group" msgstr "Grup Atama" -#: templates/circuits/circuit_terminations_swap.html:4 +#: netbox/templates/circuits/circuit_terminations_swap.html:4 msgid "Swap Circuit Terminations" msgstr "Takas Devresi Sonlandırmaları" -#: templates/circuits/circuit_terminations_swap.html:8 +#: netbox/templates/circuits/circuit_terminations_swap.html:8 #, python-format msgid "Swap these terminations for circuit %(circuit)s?" msgstr "%(circuit)s devre için bu sonlandırmaların yerini değiştirin ?" -#: templates/circuits/circuit_terminations_swap.html:14 +#: netbox/templates/circuits/circuit_terminations_swap.html:14 msgid "A side" msgstr "Bir taraf" -#: templates/circuits/circuit_terminations_swap.html:22 +#: netbox/templates/circuits/circuit_terminations_swap.html:22 msgid "Z side" msgstr "Z tarafı" -#: templates/circuits/circuitgroup.html:16 +#: netbox/templates/circuits/circuitgroup.html:16 msgid "Assign Circuit" msgstr "Devre Atama" -#: templates/circuits/circuitgroupassignment.html:19 +#: netbox/templates/circuits/circuitgroupassignment.html:19 msgid "Circuit Group Assignment" msgstr "Devre Grubu Ataması" -#: templates/circuits/circuittype.html:10 +#: netbox/templates/circuits/circuittype.html:10 msgid "Add Circuit" msgstr "Devre Ekle" -#: templates/circuits/circuittype.html:19 +#: netbox/templates/circuits/circuittype.html:19 msgid "Circuit Type" msgstr "Devre Tipi" -#: templates/circuits/inc/circuit_termination.html:10 -#: templates/dcim/manufacturer.html:11 -#: templates/generic/bulk_add_component.html:22 -#: templates/users/objectpermission.html:38 -#: utilities/templates/buttons/add.html:4 -#: utilities/templates/helpers/table_config_form.html:20 +#: netbox/templates/circuits/inc/circuit_termination.html:10 +#: netbox/templates/dcim/manufacturer.html:11 +#: netbox/templates/generic/bulk_add_component.html:22 +#: netbox/templates/users/objectpermission.html:38 +#: netbox/utilities/templates/buttons/add.html:4 +#: netbox/utilities/templates/helpers/table_config_form.html:20 msgid "Add" msgstr "Ekle" -#: templates/circuits/inc/circuit_termination.html:15 -#: templates/circuits/inc/circuit_termination_fields.html:36 -#: templates/dcim/inc/panels/inventory_items.html:32 -#: templates/dcim/powerpanel.html:56 templates/extras/script_list.html:30 -#: templates/generic/object_edit.html:47 -#: templates/ipam/inc/ipaddress_edit_header.html:7 -#: templates/ipam/inc/panels/fhrp_groups.html:43 -#: utilities/templates/buttons/edit.html:3 +#: netbox/templates/circuits/inc/circuit_termination.html:15 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:36 +#: netbox/templates/dcim/inc/panels/inventory_items.html:32 +#: netbox/templates/dcim/powerpanel.html:56 +#: netbox/templates/extras/script_list.html:30 +#: netbox/templates/generic/object_edit.html:47 +#: netbox/templates/ipam/inc/ipaddress_edit_header.html:7 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:43 +#: netbox/utilities/templates/buttons/edit.html:3 msgid "Edit" msgstr "Düzenle" -#: templates/circuits/inc/circuit_termination.html:18 +#: netbox/templates/circuits/inc/circuit_termination.html:18 msgid "Swap" msgstr "Takas" -#: templates/circuits/inc/circuit_termination_fields.html:19 -#: templates/dcim/consoleport.html:59 templates/dcim/consoleserverport.html:60 -#: templates/dcim/powerfeed.html:114 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:19 +#: netbox/templates/dcim/consoleport.html:59 +#: netbox/templates/dcim/consoleserverport.html:60 +#: netbox/templates/dcim/powerfeed.html:114 msgid "Marked as connected" msgstr "Bağlı olarak işaretlendi" -#: templates/circuits/inc/circuit_termination_fields.html:21 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:21 msgid "to" msgstr "doğru" -#: templates/circuits/inc/circuit_termination_fields.html:31 -#: templates/circuits/inc/circuit_termination_fields.html:32 -#: templates/dcim/frontport.html:80 -#: templates/dcim/inc/connection_endpoints.html:7 -#: templates/dcim/interface.html:154 templates/dcim/rearport.html:76 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:31 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:32 +#: netbox/templates/dcim/frontport.html:80 +#: netbox/templates/dcim/inc/connection_endpoints.html:7 +#: netbox/templates/dcim/interface.html:154 +#: netbox/templates/dcim/rearport.html:76 msgid "Trace" msgstr "İzleme" -#: templates/circuits/inc/circuit_termination_fields.html:35 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:35 msgid "Edit cable" msgstr "Kabloyu düzenle" -#: templates/circuits/inc/circuit_termination_fields.html:40 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:40 msgid "Remove cable" msgstr "Kabloyu çıkarın" -#: templates/circuits/inc/circuit_termination_fields.html:41 -#: templates/dcim/bulk_disconnect.html:5 -#: templates/dcim/device/consoleports.html:12 -#: templates/dcim/device/consoleserverports.html:12 -#: templates/dcim/device/frontports.html:12 -#: templates/dcim/device/interfaces.html:16 -#: templates/dcim/device/poweroutlets.html:12 -#: templates/dcim/device/powerports.html:12 -#: templates/dcim/device/rearports.html:12 templates/dcim/powerpanel.html:61 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:41 +#: netbox/templates/dcim/bulk_disconnect.html:5 +#: netbox/templates/dcim/device/consoleports.html:12 +#: netbox/templates/dcim/device/consoleserverports.html:12 +#: netbox/templates/dcim/device/frontports.html:12 +#: netbox/templates/dcim/device/interfaces.html:16 +#: netbox/templates/dcim/device/poweroutlets.html:12 +#: netbox/templates/dcim/device/powerports.html:12 +#: netbox/templates/dcim/device/rearports.html:12 +#: netbox/templates/dcim/powerpanel.html:61 msgid "Disconnect" msgstr "Bağlantıyı kes" -#: templates/circuits/inc/circuit_termination_fields.html:48 -#: templates/dcim/consoleport.html:69 templates/dcim/consoleserverport.html:70 -#: templates/dcim/frontport.html:102 templates/dcim/interface.html:180 -#: templates/dcim/interface.html:200 templates/dcim/powerfeed.html:127 -#: templates/dcim/poweroutlet.html:71 templates/dcim/poweroutlet.html:72 -#: templates/dcim/powerport.html:73 templates/dcim/rearport.html:98 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:48 +#: netbox/templates/dcim/consoleport.html:69 +#: netbox/templates/dcim/consoleserverport.html:70 +#: netbox/templates/dcim/frontport.html:102 +#: netbox/templates/dcim/interface.html:180 +#: netbox/templates/dcim/interface.html:200 +#: netbox/templates/dcim/powerfeed.html:127 +#: netbox/templates/dcim/poweroutlet.html:71 +#: netbox/templates/dcim/poweroutlet.html:72 +#: netbox/templates/dcim/powerport.html:73 +#: netbox/templates/dcim/rearport.html:98 msgid "Connect" msgstr "Bağlan" -#: templates/circuits/inc/circuit_termination_fields.html:70 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:70 msgid "Downstream" msgstr "Aşağı doğru" -#: templates/circuits/inc/circuit_termination_fields.html:71 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:71 msgid "Upstream" msgstr "Yukarı akış" -#: templates/circuits/inc/circuit_termination_fields.html:80 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:80 msgid "Cross-Connect" msgstr "Çapraz Bağlantı" -#: templates/circuits/inc/circuit_termination_fields.html:84 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:84 msgid "Patch Panel/Port" msgstr "Yama Paneli/Bağlantı Noktası" -#: templates/circuits/provider.html:11 +#: netbox/templates/circuits/provider.html:11 msgid "Add circuit" msgstr "Devre ekle" -#: templates/circuits/provideraccount.html:17 +#: netbox/templates/circuits/provideraccount.html:17 msgid "Provider Account" msgstr "Sağlayıcı Hesabı" -#: templates/core/configrevision.html:35 +#: netbox/templates/core/configrevision.html:35 msgid "Configuration Data" msgstr "Yapılandırma Verileri" -#: templates/core/configrevision.html:40 +#: netbox/templates/core/configrevision.html:40 msgid "Comment" msgstr "Yorum" -#: templates/core/configrevision_restore.html:8 -#: templates/core/configrevision_restore.html:25 -#: templates/core/configrevision_restore.html:64 +#: netbox/templates/core/configrevision_restore.html:8 +#: netbox/templates/core/configrevision_restore.html:25 +#: netbox/templates/core/configrevision_restore.html:64 msgid "Restore" msgstr "Geri Yükleme" -#: templates/core/configrevision_restore.html:36 +#: netbox/templates/core/configrevision_restore.html:36 msgid "Parameter" msgstr "Parametre" -#: templates/core/configrevision_restore.html:37 +#: netbox/templates/core/configrevision_restore.html:37 msgid "Current Value" msgstr "Mevcut Değer" -#: templates/core/configrevision_restore.html:38 +#: netbox/templates/core/configrevision_restore.html:38 msgid "New Value" msgstr "Yeni Değer" -#: templates/core/configrevision_restore.html:50 +#: netbox/templates/core/configrevision_restore.html:50 msgid "Changed" msgstr "Değişti" -#: templates/core/datafile.html:42 templates/ipam/iprange.html:25 -#: templates/virtualization/virtualdisk.html:29 -#: virtualization/tables/virtualmachines.py:198 +#: netbox/templates/core/datafile.html:42 +#: netbox/templates/ipam/iprange.html:25 +#: netbox/templates/virtualization/virtualdisk.html:29 +#: netbox/virtualization/tables/virtualmachines.py:198 msgid "Size" msgstr "Boyut" -#: templates/core/datafile.html:43 +#: netbox/templates/core/datafile.html:43 msgid "bytes" msgstr "bayt" -#: templates/core/datafile.html:46 +#: netbox/templates/core/datafile.html:46 msgid "SHA256 Hash" msgstr "SHA256 Karması" -#: templates/core/datasource.html:14 templates/core/datasource.html:20 -#: utilities/templates/buttons/sync.html:5 +#: netbox/templates/core/datasource.html:14 +#: netbox/templates/core/datasource.html:20 +#: netbox/utilities/templates/buttons/sync.html:5 msgid "Sync" msgstr "Senkronizasyon" -#: templates/core/datasource.html:50 +#: netbox/templates/core/datasource.html:50 msgid "Last synced" msgstr "Son senkronize edildi" -#: templates/core/datasource.html:84 +#: netbox/templates/core/datasource.html:84 msgid "Backend" msgstr "Arka uç" -#: templates/core/datasource.html:99 +#: netbox/templates/core/datasource.html:99 msgid "No parameters defined" msgstr "Parametre tanımlanmadı" -#: templates/core/datasource.html:114 +#: netbox/templates/core/datasource.html:114 msgid "Files" msgstr "Dosyalar" -#: templates/core/inc/config_data.html:7 +#: netbox/templates/core/inc/config_data.html:7 msgid "Rack elevations" msgstr "Raf yükseklikleri" -#: templates/core/inc/config_data.html:10 +#: netbox/templates/core/inc/config_data.html:10 msgid "Default unit height" msgstr "Varsayılan birim yüksekliği" -#: templates/core/inc/config_data.html:14 +#: netbox/templates/core/inc/config_data.html:14 msgid "Default unit width" msgstr "Varsayılan birim genişliği" -#: templates/core/inc/config_data.html:20 +#: netbox/templates/core/inc/config_data.html:20 msgid "Power feeds" msgstr "Güç beslemeleri" -#: templates/core/inc/config_data.html:23 +#: netbox/templates/core/inc/config_data.html:23 msgid "Default voltage" msgstr "Varsayılan voltaj" -#: templates/core/inc/config_data.html:27 +#: netbox/templates/core/inc/config_data.html:27 msgid "Default amperage" msgstr "Varsayılan amper" -#: templates/core/inc/config_data.html:31 +#: netbox/templates/core/inc/config_data.html:31 msgid "Default max utilization" msgstr "Varsayılan maksimum kullanım" -#: templates/core/inc/config_data.html:40 +#: netbox/templates/core/inc/config_data.html:40 msgid "Enforce global unique" msgstr "Küresel benzersiz uygulamayı uygulayın" -#: templates/core/inc/config_data.html:83 +#: netbox/templates/core/inc/config_data.html:83 msgid "Paginate count" msgstr "Sayfalandırma sayısı" -#: templates/core/inc/config_data.html:87 +#: netbox/templates/core/inc/config_data.html:87 msgid "Max page size" msgstr "Maksimum sayfa boyutu" -#: templates/core/inc/config_data.html:114 +#: netbox/templates/core/inc/config_data.html:114 msgid "User preferences" msgstr "Kullanıcı tercihleri" -#: templates/core/inc/config_data.html:141 +#: netbox/templates/core/inc/config_data.html:141 msgid "Job retention" msgstr "İş tutma" -#: templates/core/job.html:35 templates/core/rq_task.html:12 -#: templates/core/rq_task.html:49 templates/core/rq_task.html:58 +#: netbox/templates/core/job.html:35 netbox/templates/core/rq_task.html:12 +#: netbox/templates/core/rq_task.html:49 netbox/templates/core/rq_task.html:58 msgid "Job" msgstr "İş" -#: templates/core/job.html:58 templates/extras/journalentry.html:26 +#: netbox/templates/core/job.html:58 +#: netbox/templates/extras/journalentry.html:26 msgid "Created By" msgstr "Tarafından Oluşturuldu" -#: templates/core/job.html:66 +#: netbox/templates/core/job.html:66 msgid "Scheduling" msgstr "Çizelgeleme" -#: templates/core/job.html:77 +#: netbox/templates/core/job.html:77 #, python-format msgid "every %(interval)s minutes" msgstr "her bir %(interval)s dakikalar" -#: templates/core/objectchange.html:29 -#: templates/users/objectpermission.html:42 +#: netbox/templates/core/objectchange.html:29 +#: netbox/templates/users/objectpermission.html:42 msgid "Change" msgstr "Değişim" -#: templates/core/objectchange.html:79 +#: netbox/templates/core/objectchange.html:79 msgid "Difference" msgstr "Farkı" -#: templates/core/objectchange.html:82 +#: netbox/templates/core/objectchange.html:82 msgid "Previous" msgstr "Önceki" -#: templates/core/objectchange.html:85 +#: netbox/templates/core/objectchange.html:85 msgid "Next" msgstr "Sonraki" -#: templates/core/objectchange.html:93 +#: netbox/templates/core/objectchange.html:93 msgid "Object Created" msgstr "Nesne Oluşturuldu" -#: templates/core/objectchange.html:95 +#: netbox/templates/core/objectchange.html:95 msgid "Object Deleted" msgstr "Nesne Silindi" -#: templates/core/objectchange.html:97 +#: netbox/templates/core/objectchange.html:97 msgid "No Changes" msgstr "Değişiklik Yok" -#: templates/core/objectchange.html:111 +#: netbox/templates/core/objectchange.html:111 msgid "Pre-Change Data" msgstr "Ön Değişim Verileri" -#: templates/core/objectchange.html:122 +#: netbox/templates/core/objectchange.html:122 msgid "Warning: Comparing non-atomic change to previous change record" msgstr "" "Uyarı: Atomik olmayan değişimin önceki değişiklik kaydıyla karşılaştırılması" -#: templates/core/objectchange.html:131 +#: netbox/templates/core/objectchange.html:131 msgid "Post-Change Data" msgstr "Değişim Sonrası Veriler" -#: templates/core/objectchange.html:162 +#: netbox/templates/core/objectchange.html:162 #, python-format msgid "See All %(count)s Changes" msgstr "Tümünü Gör %(count)s Değişiklikler" -#: templates/core/objectchange_list.html:9 -#: templates/extras/object_changelog.html:15 +#: netbox/templates/core/objectchange_list.html:9 +#: netbox/templates/extras/object_changelog.html:15 msgid "Change log retention" msgstr "Günlük tutma işlemini değiştir" -#: templates/core/objectchange_list.html:9 -#: templates/extras/object_changelog.html:15 +#: netbox/templates/core/objectchange_list.html:9 +#: netbox/templates/extras/object_changelog.html:15 msgid "days" msgstr "günler" -#: templates/core/objectchange_list.html:9 -#: templates/extras/object_changelog.html:15 +#: netbox/templates/core/objectchange_list.html:9 +#: netbox/templates/extras/object_changelog.html:15 msgid "Indefinite" msgstr "belirsiz" -#: templates/core/plugin.html:22 +#: netbox/templates/core/plugin.html:22 msgid "Not installed" msgstr "Yüklü değil" -#: templates/core/plugin.html:33 +#: netbox/templates/core/plugin.html:33 msgid "Overview" msgstr "Genel Bakış" -#: templates/core/plugin.html:39 +#: netbox/templates/core/plugin.html:39 msgid "Install" msgstr "Yüklemek" -#: templates/core/plugin.html:51 +#: netbox/templates/core/plugin.html:51 msgid "Plugin Details" msgstr "Eklenti Ayrıntıları" -#: templates/core/plugin.html:58 +#: netbox/templates/core/plugin.html:58 msgid "Summary" msgstr "Özet" -#: templates/core/plugin.html:76 +#: netbox/templates/core/plugin.html:76 msgid "License" msgstr "Lisans" -#: templates/core/plugin.html:96 +#: netbox/templates/core/plugin.html:96 msgid "Version History" msgstr "Sürüm Geçmişi" -#: templates/core/plugin.html:107 +#: netbox/templates/core/plugin.html:107 msgid "Local Installation Instructions" msgstr "Yerel Kurulum Talimatları" -#: templates/core/rq_queue_list.html:5 templates/core/rq_queue_list.html:13 -#: templates/core/rq_task_list.html:14 templates/core/rq_worker.html:7 +#: netbox/templates/core/rq_queue_list.html:5 +#: netbox/templates/core/rq_queue_list.html:13 +#: netbox/templates/core/rq_task_list.html:14 +#: netbox/templates/core/rq_worker.html:7 msgid "Background Queues" msgstr "Arka Plan Kuyrukları" -#: templates/core/rq_queue_list.html:24 templates/core/rq_queue_list.html:25 -#: templates/core/rq_worker_list.html:49 templates/core/rq_worker_list.html:50 -#: templates/extras/script_result.html:67 -#: templates/extras/script_result.html:69 -#: templates/inc/table_controls_htmx.html:30 -#: templates/inc/table_controls_htmx.html:33 +#: netbox/templates/core/rq_queue_list.html:24 +#: netbox/templates/core/rq_queue_list.html:25 +#: netbox/templates/core/rq_worker_list.html:49 +#: netbox/templates/core/rq_worker_list.html:50 +#: netbox/templates/extras/script_result.html:67 +#: netbox/templates/extras/script_result.html:69 +#: netbox/templates/inc/table_controls_htmx.html:30 +#: netbox/templates/inc/table_controls_htmx.html:33 msgid "Configure Table" msgstr "Tabloyu Yapılandır" -#: templates/core/rq_task.html:29 +#: netbox/templates/core/rq_task.html:29 msgid "Stop" msgstr "Dur" -#: templates/core/rq_task.html:34 +#: netbox/templates/core/rq_task.html:34 msgid "Requeue" msgstr "Requeue" -#: templates/core/rq_task.html:39 +#: netbox/templates/core/rq_task.html:39 msgid "Enqueue" msgstr "Sıraya girin" -#: templates/core/rq_task.html:61 +#: netbox/templates/core/rq_task.html:61 msgid "Queue" msgstr "Kuyruk" -#: templates/core/rq_task.html:65 +#: netbox/templates/core/rq_task.html:65 msgid "Timeout" msgstr "Zaman aşımı" -#: templates/core/rq_task.html:69 +#: netbox/templates/core/rq_task.html:69 msgid "Result TTL" msgstr "Sonuç TTL" -#: templates/core/rq_task.html:89 +#: netbox/templates/core/rq_task.html:89 msgid "Meta" msgstr "Meta" -#: templates/core/rq_task.html:93 +#: netbox/templates/core/rq_task.html:93 msgid "Arguments" msgstr "Argümanlar" -#: templates/core/rq_task.html:97 +#: netbox/templates/core/rq_task.html:97 msgid "Keyword Arguments" msgstr "Anahtar Kelime Argümanları" -#: templates/core/rq_task.html:103 +#: netbox/templates/core/rq_task.html:103 msgid "Depends on" msgstr "Bağlı" -#: templates/core/rq_task.html:109 +#: netbox/templates/core/rq_task.html:109 msgid "Exception" msgstr "İstisna" -#: templates/core/rq_task_list.html:28 +#: netbox/templates/core/rq_task_list.html:28 msgid "tasks in " msgstr "Görevler " -#: templates/core/rq_task_list.html:33 +#: netbox/templates/core/rq_task_list.html:33 msgid "Queued Jobs" msgstr "Kuyruklu İşler" -#: templates/core/rq_task_list.html:64 templates/extras/script_result.html:86 +#: netbox/templates/core/rq_task_list.html:64 +#: netbox/templates/extras/script_result.html:86 #, python-format msgid "" "Select all %(count)s %(object_type_plural)s matching query" @@ -11512,96 +12255,99 @@ msgstr "" "Seçiniz bütün %(count)s %(object_type_plural)s eşleşen " "sorgu" -#: templates/core/rq_worker.html:10 +#: netbox/templates/core/rq_worker.html:10 msgid "Worker Info" msgstr "İşçi Bilgisi" -#: templates/core/rq_worker.html:31 templates/core/rq_worker.html:40 +#: netbox/templates/core/rq_worker.html:31 +#: netbox/templates/core/rq_worker.html:40 msgid "Worker" msgstr "İşçi" -#: templates/core/rq_worker.html:55 +#: netbox/templates/core/rq_worker.html:55 msgid "Queues" msgstr "Kuyruklar" -#: templates/core/rq_worker.html:63 +#: netbox/templates/core/rq_worker.html:63 msgid "Curent Job" msgstr "Geçerli İş" -#: templates/core/rq_worker.html:67 +#: netbox/templates/core/rq_worker.html:67 msgid "Successful job count" msgstr "Başarılı iş sayısı" -#: templates/core/rq_worker.html:71 +#: netbox/templates/core/rq_worker.html:71 msgid "Failed job count" msgstr "Başarısız iş sayısı" -#: templates/core/rq_worker.html:75 +#: netbox/templates/core/rq_worker.html:75 msgid "Total working time" msgstr "Toplam çalışma süresi" -#: templates/core/rq_worker.html:76 +#: netbox/templates/core/rq_worker.html:76 msgid "seconds" msgstr "saniyeler" -#: templates/core/rq_worker_list.html:13 templates/core/rq_worker_list.html:21 +#: netbox/templates/core/rq_worker_list.html:13 +#: netbox/templates/core/rq_worker_list.html:21 msgid "Background Workers" msgstr "Arka Plan Çalışanları" -#: templates/core/rq_worker_list.html:29 +#: netbox/templates/core/rq_worker_list.html:29 #, python-format msgid "Workers in %(queue_name)s" msgstr "İçindeki işçiler %(queue_name)s" -#: templates/core/system.html:11 utilities/templates/buttons/export.html:4 +#: netbox/templates/core/system.html:11 +#: netbox/utilities/templates/buttons/export.html:4 msgid "Export" msgstr "Dışa Aktar" -#: templates/core/system.html:28 +#: netbox/templates/core/system.html:28 msgid "System Status" msgstr "Sistem Durumu" -#: templates/core/system.html:31 +#: netbox/templates/core/system.html:31 msgid "NetBox release" msgstr "NetBox sürümü" -#: templates/core/system.html:44 +#: netbox/templates/core/system.html:44 msgid "Django version" msgstr "Django sürümü" -#: templates/core/system.html:48 +#: netbox/templates/core/system.html:48 msgid "PostgreSQL version" msgstr "PostgreSQL sürümü" -#: templates/core/system.html:52 +#: netbox/templates/core/system.html:52 msgid "Database name" msgstr "Veritabanı adı" -#: templates/core/system.html:56 +#: netbox/templates/core/system.html:56 msgid "Database size" msgstr "Veritabanı boyutu" -#: templates/core/system.html:61 +#: netbox/templates/core/system.html:61 msgid "Unavailable" msgstr "Kullanılamıyor" -#: templates/core/system.html:66 +#: netbox/templates/core/system.html:66 msgid "RQ workers" msgstr "RQ çalışanları" -#: templates/core/system.html:69 +#: netbox/templates/core/system.html:69 msgid "default queue" msgstr "varsayılan kuyruk" -#: templates/core/system.html:73 +#: netbox/templates/core/system.html:73 msgid "System time" msgstr "Sistem zamanı" -#: templates/core/system.html:85 +#: netbox/templates/core/system.html:85 msgid "Current Configuration" msgstr "Geçerli Yapılandırma" -#: templates/dcim/bulk_disconnect.html:9 +#: netbox/templates/dcim/bulk_disconnect.html:9 #, python-format msgid "" "Are you sure you want to disconnect these %(count)s %(obj_type_plural)s?" @@ -11609,287 +12355,302 @@ msgstr "" "Bunların bağlantısını kesmek istediğinizden emin misiniz %(count)s " "%(obj_type_plural)s?" -#: templates/dcim/cable_trace.html:10 +#: netbox/templates/dcim/cable_trace.html:10 #, python-format msgid "Cable Trace for %(object_type)s %(object)s" msgstr "Kablo İzleme için %(object_type)s %(object)s" -#: templates/dcim/cable_trace.html:24 templates/dcim/inc/rack_elevation.html:7 +#: netbox/templates/dcim/cable_trace.html:24 +#: netbox/templates/dcim/inc/rack_elevation.html:7 msgid "Download SVG" msgstr "SVG indir" -#: templates/dcim/cable_trace.html:30 +#: netbox/templates/dcim/cable_trace.html:30 msgid "Asymmetric Path" msgstr "Asimetrik Yol" -#: templates/dcim/cable_trace.html:31 +#: netbox/templates/dcim/cable_trace.html:31 msgid "The nodes below have no links and result in an asymmetric path" msgstr "" "Aşağıdaki düğümlerin bağlantısı yoktur ve asimetrik bir yol ile sonuçlanır" -#: templates/dcim/cable_trace.html:38 +#: netbox/templates/dcim/cable_trace.html:38 msgid "Path split" msgstr "Yol bölünmesi" -#: templates/dcim/cable_trace.html:39 +#: netbox/templates/dcim/cable_trace.html:39 msgid "Select a node below to continue" msgstr "Devamlamak için aşağıdan bir düğüm seçin" -#: templates/dcim/cable_trace.html:55 +#: netbox/templates/dcim/cable_trace.html:55 msgid "Trace Completed" msgstr "İzleme Tamamlandı" -#: templates/dcim/cable_trace.html:58 +#: netbox/templates/dcim/cable_trace.html:58 msgid "Total segments" msgstr "Toplam segmentler" -#: templates/dcim/cable_trace.html:62 +#: netbox/templates/dcim/cable_trace.html:62 msgid "Total length" msgstr "Toplam uzunluk" -#: templates/dcim/cable_trace.html:77 +#: netbox/templates/dcim/cable_trace.html:77 msgid "No paths found" msgstr "Yol bulunamadı" -#: templates/dcim/cable_trace.html:85 +#: netbox/templates/dcim/cable_trace.html:85 msgid "Related Paths" msgstr "İlgili Yollar" -#: templates/dcim/cable_trace.html:89 +#: netbox/templates/dcim/cable_trace.html:89 msgid "Origin" msgstr "Menşei" -#: templates/dcim/cable_trace.html:90 +#: netbox/templates/dcim/cable_trace.html:90 msgid "Destination" msgstr "Hedef" -#: templates/dcim/cable_trace.html:91 +#: netbox/templates/dcim/cable_trace.html:91 msgid "Segments" msgstr "Segmentler" -#: templates/dcim/cable_trace.html:104 +#: netbox/templates/dcim/cable_trace.html:104 msgid "Incomplete" msgstr "Tamamlanmamış" -#: templates/dcim/component_list.html:14 +#: netbox/templates/dcim/component_list.html:14 msgid "Rename Selected" msgstr "Seçili Yeniden Adlandır" -#: templates/dcim/consoleport.html:65 templates/dcim/consoleserverport.html:66 -#: templates/dcim/frontport.html:98 templates/dcim/interface.html:176 -#: templates/dcim/poweroutlet.html:69 templates/dcim/powerport.html:69 +#: netbox/templates/dcim/consoleport.html:65 +#: netbox/templates/dcim/consoleserverport.html:66 +#: netbox/templates/dcim/frontport.html:98 +#: netbox/templates/dcim/interface.html:176 +#: netbox/templates/dcim/poweroutlet.html:69 +#: netbox/templates/dcim/powerport.html:69 msgid "Not Connected" msgstr "Bağlı Değil" -#: templates/dcim/device.html:34 +#: netbox/templates/dcim/device.html:34 msgid "Highlight device in rack" msgstr "Kabindeki cihazı vurgulayın" -#: templates/dcim/device.html:55 +#: netbox/templates/dcim/device.html:55 msgid "Not racked" msgstr "Kabine bağlı değil" -#: templates/dcim/device.html:62 templates/dcim/site.html:94 +#: netbox/templates/dcim/device.html:62 netbox/templates/dcim/site.html:94 msgid "GPS Coordinates" msgstr "GPS Koordinatları" -#: templates/dcim/device.html:68 templates/dcim/site.html:81 -#: templates/dcim/site.html:100 +#: netbox/templates/dcim/device.html:68 netbox/templates/dcim/site.html:81 +#: netbox/templates/dcim/site.html:100 msgid "Map" msgstr "Harita" -#: templates/dcim/device.html:108 templates/dcim/inventoryitem.html:56 -#: templates/dcim/module.html:81 templates/dcim/modulebay.html:74 -#: templates/dcim/rack.html:61 +#: netbox/templates/dcim/device.html:108 +#: netbox/templates/dcim/inventoryitem.html:56 +#: netbox/templates/dcim/module.html:81 +#: netbox/templates/dcim/modulebay.html:74 netbox/templates/dcim/rack.html:61 msgid "Asset Tag" msgstr "Varlık Etiketi" -#: templates/dcim/device.html:123 +#: netbox/templates/dcim/device.html:123 msgid "View Virtual Chassis" msgstr "Sanal Kasayı Görüntüle" -#: templates/dcim/device.html:164 +#: netbox/templates/dcim/device.html:164 msgid "Create VDC" msgstr "VDC oluştur" -#: templates/dcim/device.html:175 templates/dcim/device_edit.html:64 -#: virtualization/forms/model_forms.py:223 +#: netbox/templates/dcim/device.html:175 +#: netbox/templates/dcim/device_edit.html:64 +#: netbox/virtualization/forms/model_forms.py:223 msgid "Management" msgstr "Yönetim" -#: templates/dcim/device.html:195 templates/dcim/device.html:211 -#: templates/dcim/device.html:227 -#: templates/virtualization/virtualmachine.html:57 -#: templates/virtualization/virtualmachine.html:73 +#: netbox/templates/dcim/device.html:195 netbox/templates/dcim/device.html:211 +#: netbox/templates/dcim/device.html:227 +#: netbox/templates/virtualization/virtualmachine.html:57 +#: netbox/templates/virtualization/virtualmachine.html:73 msgid "NAT for" msgstr "NAT için" -#: templates/dcim/device.html:197 templates/dcim/device.html:213 -#: templates/dcim/device.html:229 -#: templates/virtualization/virtualmachine.html:59 -#: templates/virtualization/virtualmachine.html:75 +#: netbox/templates/dcim/device.html:197 netbox/templates/dcim/device.html:213 +#: netbox/templates/dcim/device.html:229 +#: netbox/templates/virtualization/virtualmachine.html:59 +#: netbox/templates/virtualization/virtualmachine.html:75 msgid "NAT" msgstr "NAT" -#: templates/dcim/device.html:252 templates/dcim/rack.html:73 +#: netbox/templates/dcim/device.html:252 netbox/templates/dcim/rack.html:73 msgid "Power Utilization" msgstr "Güç Kullanımı" -#: templates/dcim/device.html:256 +#: netbox/templates/dcim/device.html:256 msgid "Input" msgstr "Giriş" -#: templates/dcim/device.html:257 +#: netbox/templates/dcim/device.html:257 msgid "Outlets" msgstr "Satış noktaları" -#: templates/dcim/device.html:258 +#: netbox/templates/dcim/device.html:258 msgid "Allocated" msgstr "Tahsis edilmiş" -#: templates/dcim/device.html:268 templates/dcim/device.html:270 -#: templates/dcim/device.html:286 templates/dcim/powerfeed.html:67 +#: netbox/templates/dcim/device.html:268 netbox/templates/dcim/device.html:270 +#: netbox/templates/dcim/device.html:286 +#: netbox/templates/dcim/powerfeed.html:67 msgid "VA" msgstr "İL" -#: templates/dcim/device.html:280 +#: netbox/templates/dcim/device.html:280 msgctxt "Leg of a power feed" msgid "Leg" msgstr "Bacak" -#: templates/dcim/device.html:306 -#: templates/virtualization/virtualmachine.html:158 +#: netbox/templates/dcim/device.html:306 +#: netbox/templates/virtualization/virtualmachine.html:158 msgid "Add a service" msgstr "Hizmet ekle" -#: templates/dcim/device/base.html:21 templates/dcim/device_list.html:9 -#: templates/dcim/devicetype/base.html:18 -#: templates/dcim/inc/moduletype_buttons.html:9 templates/dcim/module.html:18 -#: templates/virtualization/virtualmachine/base.html:22 -#: templates/virtualization/virtualmachine_list.html:8 +#: netbox/templates/dcim/device/base.html:21 +#: netbox/templates/dcim/device_list.html:9 +#: netbox/templates/dcim/devicetype/base.html:18 +#: netbox/templates/dcim/inc/moduletype_buttons.html:9 +#: netbox/templates/dcim/module.html:18 +#: netbox/templates/virtualization/virtualmachine/base.html:22 +#: netbox/templates/virtualization/virtualmachine_list.html:8 msgid "Add Components" msgstr "Bileşenler Ekle" -#: templates/dcim/device/consoleports.html:24 +#: netbox/templates/dcim/device/consoleports.html:24 msgid "Add Console Ports" msgstr "Konsol Bağlantı Noktaları Ekle" -#: templates/dcim/device/consoleserverports.html:24 +#: netbox/templates/dcim/device/consoleserverports.html:24 msgid "Add Console Server Ports" msgstr "Konsol Sunucusu Bağlantı Noktaları Ekle" -#: templates/dcim/device/devicebays.html:10 +#: netbox/templates/dcim/device/devicebays.html:10 msgid "Add Device Bays" msgstr "Cihaz Yuvaları Ekle" -#: templates/dcim/device/frontports.html:24 +#: netbox/templates/dcim/device/frontports.html:24 msgid "Add Front Ports" msgstr "Ön Bağlantı Noktaları Ekle" -#: templates/dcim/device/inc/interface_table_controls.html:9 +#: netbox/templates/dcim/device/inc/interface_table_controls.html:9 msgid "Hide Enabled" msgstr "Gizle Etkin" -#: templates/dcim/device/inc/interface_table_controls.html:10 +#: netbox/templates/dcim/device/inc/interface_table_controls.html:10 msgid "Hide Disabled" msgstr "Gizle Devre Dışı" -#: templates/dcim/device/inc/interface_table_controls.html:11 +#: netbox/templates/dcim/device/inc/interface_table_controls.html:11 msgid "Hide Virtual" msgstr "Sanal Gizle" -#: templates/dcim/device/inc/interface_table_controls.html:12 +#: netbox/templates/dcim/device/inc/interface_table_controls.html:12 msgid "Hide Disconnected" msgstr "Bağlantısızlığı Gizle" -#: templates/dcim/device/interfaces.html:27 +#: netbox/templates/dcim/device/interfaces.html:27 msgid "Add Interfaces" msgstr "Arayüzler Ekle" -#: templates/dcim/device/inventory.html:10 -#: templates/dcim/inc/panels/inventory_items.html:10 +#: netbox/templates/dcim/device/inventory.html:10 +#: netbox/templates/dcim/inc/panels/inventory_items.html:10 msgid "Add Inventory Item" msgstr "Envanter Öğesi Ekle" -#: templates/dcim/device/modulebays.html:10 +#: netbox/templates/dcim/device/modulebays.html:10 msgid "Add Module Bays" msgstr "Modül Yuvaları Ekle" -#: templates/dcim/device/poweroutlets.html:24 +#: netbox/templates/dcim/device/poweroutlets.html:24 msgid "Add Power Outlets" msgstr "Elektrik Prizleri Ekle" -#: templates/dcim/device/powerports.html:24 +#: netbox/templates/dcim/device/powerports.html:24 msgid "Add Power Port" msgstr "Güç Bağlantı Noktası Ekle" -#: templates/dcim/device/rearports.html:24 +#: netbox/templates/dcim/device/rearports.html:24 msgid "Add Rear Ports" msgstr "Arka Bağlantı Noktaları Ekle" -#: templates/dcim/device/render_config.html:5 -#: templates/virtualization/virtualmachine/render_config.html:5 +#: netbox/templates/dcim/device/render_config.html:5 +#: netbox/templates/virtualization/virtualmachine/render_config.html:5 msgid "Config" msgstr "Yapılandırma" -#: templates/dcim/device/render_config.html:35 -#: templates/virtualization/virtualmachine/render_config.html:35 +#: netbox/templates/dcim/device/render_config.html:35 +#: netbox/templates/virtualization/virtualmachine/render_config.html:35 msgid "Context Data" msgstr "Bağlam Verileri" -#: templates/dcim/device/render_config.html:53 -#: templates/virtualization/virtualmachine/render_config.html:53 +#: 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" -#: templates/dcim/device/render_config.html:55 -#: templates/virtualization/virtualmachine/render_config.html:55 +#: netbox/templates/dcim/device/render_config.html:57 +#: netbox/templates/virtualization/virtualmachine/render_config.html:57 msgid "Download" msgstr "İndir" -#: templates/dcim/device/render_config.html:61 -#: templates/virtualization/virtualmachine/render_config.html:61 -msgid "No configuration template found" -msgstr "Yapılandırma şablonu bulunamadı" +#: netbox/templates/dcim/device/render_config.html:64 +#: netbox/templates/virtualization/virtualmachine/render_config.html:64 +msgid "Error rendering template" +msgstr "" -#: templates/dcim/device_edit.html:44 +#: 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" -#: templates/dcim/device_edit.html:48 -#: utilities/templates/form_helpers/render_field.html:22 +#: netbox/templates/dcim/device_edit.html:48 +#: netbox/utilities/templates/form_helpers/render_field.html:22 msgid "Regenerate Slug" msgstr "Yeniden kısa ad oluştur" -#: templates/dcim/device_edit.html:49 templates/generic/bulk_remove.html:21 -#: utilities/templates/helpers/table_config_form.html:23 +#: netbox/templates/dcim/device_edit.html:49 +#: netbox/templates/generic/bulk_remove.html:21 +#: netbox/utilities/templates/helpers/table_config_form.html:23 msgid "Remove" msgstr "Kaldır" -#: templates/dcim/device_edit.html:110 +#: netbox/templates/dcim/device_edit.html:110 msgid "Local Config Context Data" msgstr "Yerel Yapılandırma Bağlam Verileri" -#: templates/dcim/device_list.html:82 templates/generic/bulk_rename.html:57 -#: templates/virtualization/virtualmachine/interfaces.html:11 -#: templates/virtualization/virtualmachine/virtual_disks.html:11 +#: netbox/templates/dcim/device_list.html:82 +#: netbox/templates/generic/bulk_rename.html:57 +#: netbox/templates/virtualization/virtualmachine/interfaces.html:11 +#: netbox/templates/virtualization/virtualmachine/virtual_disks.html:11 msgid "Rename" msgstr "Yeniden Adlandır" -#: templates/dcim/devicebay.html:17 +#: netbox/templates/dcim/devicebay.html:17 msgid "Device Bay" msgstr "Cihaz Yuvası" -#: templates/dcim/devicebay.html:43 +#: netbox/templates/dcim/devicebay.html:43 msgid "Installed Device" msgstr "Yüklü Cihaz" -#: templates/dcim/devicebay_depopulate.html:6 +#: netbox/templates/dcim/devicebay_depopulate.html:6 #, python-format msgid "Remove %(device)s from %(device_bay)s?" msgstr "Kaldır %(device)s beri %(device_bay)s?" -#: templates/dcim/devicebay_depopulate.html:13 +#: netbox/templates/dcim/devicebay_depopulate.html:13 #, python-format msgid "" "Are you sure you want to remove %(device)s from " @@ -11898,430 +12659,449 @@ msgstr "" "Kaldırmak istediğinizden emin misiniz? %(device)s beri " "%(device_bay)s?" -#: templates/dcim/devicebay_populate.html:13 +#: netbox/templates/dcim/devicebay_populate.html:13 msgid "Populate" msgstr "Doldurmak" -#: templates/dcim/devicebay_populate.html:22 +#: netbox/templates/dcim/devicebay_populate.html:22 msgid "Bay" msgstr "Körfez" -#: templates/dcim/devicerole.html:14 templates/dcim/platform.html:17 +#: netbox/templates/dcim/devicerole.html:14 +#: netbox/templates/dcim/platform.html:17 msgid "Add Device" msgstr "Cihaz Ekle" -#: templates/dcim/devicerole.html:40 +#: netbox/templates/dcim/devicerole.html:40 msgid "VM Role" msgstr "VM Rolü" -#: templates/dcim/devicetype.html:18 templates/dcim/moduletype.html:29 +#: netbox/templates/dcim/devicetype.html:18 +#: netbox/templates/dcim/moduletype.html:29 msgid "Model Name" msgstr "Model Adı" -#: templates/dcim/devicetype.html:25 templates/dcim/moduletype.html:33 +#: netbox/templates/dcim/devicetype.html:25 +#: netbox/templates/dcim/moduletype.html:33 msgid "Part Number" msgstr "Parça Numarası" -#: templates/dcim/devicetype.html:41 +#: netbox/templates/dcim/devicetype.html:41 msgid "Exclude From Utilization" msgstr "Kullanımdan Hariç Tutma" -#: templates/dcim/devicetype.html:59 +#: netbox/templates/dcim/devicetype.html:59 msgid "Parent/Child" msgstr "Ebeveyn/Çocuk" -#: templates/dcim/devicetype.html:71 +#: netbox/templates/dcim/devicetype.html:71 msgid "Front Image" msgstr "Ön Görüntü" -#: templates/dcim/devicetype.html:83 +#: netbox/templates/dcim/devicetype.html:83 msgid "Rear Image" msgstr "Arka Görüntü" -#: templates/dcim/frontport.html:54 +#: netbox/templates/dcim/frontport.html:54 msgid "Rear Port Position" msgstr "Arka Bağlantı Noktası Konumu" -#: templates/dcim/frontport.html:72 templates/dcim/interface.html:144 -#: templates/dcim/poweroutlet.html:63 templates/dcim/powerport.html:63 -#: templates/dcim/rearport.html:68 +#: netbox/templates/dcim/frontport.html:72 +#: netbox/templates/dcim/interface.html:144 +#: netbox/templates/dcim/poweroutlet.html:63 +#: netbox/templates/dcim/powerport.html:63 +#: netbox/templates/dcim/rearport.html:68 msgid "Marked as Connected" msgstr "Bağlı olarak işaretlendi" -#: templates/dcim/frontport.html:86 templates/dcim/rearport.html:82 +#: netbox/templates/dcim/frontport.html:86 +#: netbox/templates/dcim/rearport.html:82 msgid "Connection Status" msgstr "Bağlantı Durumu" -#: templates/dcim/htmx/cable_edit.html:10 +#: netbox/templates/dcim/htmx/cable_edit.html:10 msgid "A Side" msgstr "A Tarafı" -#: templates/dcim/htmx/cable_edit.html:30 +#: netbox/templates/dcim/htmx/cable_edit.html:30 msgid "B Side" msgstr "B Tarafı" -#: templates/dcim/inc/cable_termination.html:65 +#: netbox/templates/dcim/inc/cable_termination.html:65 msgid "No termination" msgstr "Fesih yok" -#: templates/dcim/inc/cable_toggle_buttons.html:3 +#: netbox/templates/dcim/inc/cable_toggle_buttons.html:3 msgid "Mark Planned" msgstr "Planlanan İşaretle" -#: templates/dcim/inc/cable_toggle_buttons.html:6 +#: netbox/templates/dcim/inc/cable_toggle_buttons.html:6 msgid "Mark Installed" msgstr "Mark Yüklü" -#: templates/dcim/inc/connection_endpoints.html:13 +#: netbox/templates/dcim/inc/connection_endpoints.html:13 msgid "Path Status" msgstr "Yol Durumu" -#: templates/dcim/inc/connection_endpoints.html:18 +#: netbox/templates/dcim/inc/connection_endpoints.html:18 msgid "Not Reachable" msgstr "Ulaşılamıyor" -#: templates/dcim/inc/connection_endpoints.html:23 +#: netbox/templates/dcim/inc/connection_endpoints.html:23 msgid "Path Endpoints" msgstr "Yol Bitiş Noktaları" -#: templates/dcim/inc/endpoint_connection.html:8 -#: templates/dcim/powerfeed.html:120 templates/dcim/rearport.html:94 +#: netbox/templates/dcim/inc/endpoint_connection.html:8 +#: netbox/templates/dcim/powerfeed.html:120 +#: netbox/templates/dcim/rearport.html:94 msgid "Not connected" msgstr "Bağlı değil" -#: templates/dcim/inc/interface_vlans_table.html:6 +#: netbox/templates/dcim/inc/interface_vlans_table.html:6 msgid "Untagged" msgstr "Etiketsiz" -#: templates/dcim/inc/interface_vlans_table.html:37 +#: netbox/templates/dcim/inc/interface_vlans_table.html:37 msgid "No VLANs Assigned" msgstr "Atanmamış VLAN" -#: templates/dcim/inc/interface_vlans_table.html:44 -#: templates/ipam/prefix_list.html:16 templates/ipam/prefix_list.html:33 +#: netbox/templates/dcim/inc/interface_vlans_table.html:44 +#: netbox/templates/ipam/prefix_list.html:16 +#: netbox/templates/ipam/prefix_list.html:33 msgid "Clear" msgstr "Temiz" -#: templates/dcim/inc/interface_vlans_table.html:47 +#: netbox/templates/dcim/inc/interface_vlans_table.html:47 msgid "Clear All" msgstr "Tümünü Temizle" -#: templates/dcim/inc/panels/racktype_dimensions.html:38 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:38 msgid "Mounting Depth" msgstr "Montaj Derinliği" -#: templates/dcim/inc/panels/racktype_numbering.html:6 +#: netbox/templates/dcim/inc/panels/racktype_numbering.html:6 msgid "Starting Unit" msgstr "Başlangıç Ünitesi" -#: templates/dcim/inc/panels/racktype_numbering.html:10 +#: netbox/templates/dcim/inc/panels/racktype_numbering.html:10 msgid "Descending Units" msgstr "Azalan Birimler" -#: templates/dcim/inc/rack_elevation.html:3 +#: netbox/templates/dcim/inc/rack_elevation.html:3 msgid "Rack elevation" msgstr "Raf yüksekliği" -#: templates/dcim/interface.html:17 +#: netbox/templates/dcim/interface.html:17 msgid "Add Child Interface" msgstr "Çocuk Arayüzü Ekle" -#: templates/dcim/interface.html:50 +#: netbox/templates/dcim/interface.html:50 msgid "Speed/Duplex" msgstr "Hız/Dubleks" -#: templates/dcim/interface.html:73 +#: netbox/templates/dcim/interface.html:73 msgid "PoE Mode" msgstr "PoE Modu" -#: templates/dcim/interface.html:77 +#: netbox/templates/dcim/interface.html:77 msgid "PoE Type" msgstr "PoE Tipi" -#: templates/dcim/interface.html:81 -#: templates/virtualization/vminterface.html:63 +#: netbox/templates/dcim/interface.html:81 +#: netbox/templates/virtualization/vminterface.html:63 msgid "802.1Q Mode" msgstr "802.1Q Modu" -#: templates/dcim/interface.html:125 -#: templates/virtualization/vminterface.html:59 +#: netbox/templates/dcim/interface.html:125 +#: netbox/templates/virtualization/vminterface.html:59 msgid "MAC Address" msgstr "MAC Adresi" -#: templates/dcim/interface.html:151 +#: netbox/templates/dcim/interface.html:151 msgid "Wireless Link" msgstr "Kablosuz Bağlantı" -#: templates/dcim/interface.html:218 vpn/choices.py:55 +#: netbox/templates/dcim/interface.html:218 netbox/vpn/choices.py:63 msgid "Peer" msgstr "Akran" -#: templates/dcim/interface.html:230 -#: templates/wireless/inc/wirelesslink_interface.html:26 +#: netbox/templates/dcim/interface.html:230 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:26 msgid "Channel" msgstr "Kanal" -#: templates/dcim/interface.html:239 -#: templates/wireless/inc/wirelesslink_interface.html:32 +#: netbox/templates/dcim/interface.html:239 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:32 msgid "Channel Frequency" msgstr "Kanal Frekansı" -#: templates/dcim/interface.html:242 templates/dcim/interface.html:250 -#: templates/dcim/interface.html:261 templates/dcim/interface.html:269 +#: netbox/templates/dcim/interface.html:242 +#: netbox/templates/dcim/interface.html:250 +#: netbox/templates/dcim/interface.html:261 +#: netbox/templates/dcim/interface.html:269 msgid "MHz" msgstr "MHz" -#: templates/dcim/interface.html:258 -#: templates/wireless/inc/wirelesslink_interface.html:42 +#: netbox/templates/dcim/interface.html:258 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:42 msgid "Channel Width" msgstr "Kanal Genişliği" -#: templates/dcim/interface.html:285 templates/wireless/wirelesslan.html:14 -#: templates/wireless/wirelesslink.html:21 wireless/forms/bulk_edit.py:60 -#: wireless/forms/bulk_edit.py:102 wireless/forms/filtersets.py:40 -#: wireless/forms/filtersets.py:80 wireless/models.py:82 -#: wireless/models.py:156 wireless/tables/wirelesslan.py:44 +#: netbox/templates/dcim/interface.html:285 +#: netbox/templates/wireless/wirelesslan.html:14 +#: netbox/templates/wireless/wirelesslink.html:21 +#: netbox/wireless/forms/bulk_edit.py:60 +#: netbox/wireless/forms/bulk_edit.py:102 +#: netbox/wireless/forms/filtersets.py:40 +#: netbox/wireless/forms/filtersets.py:80 netbox/wireless/models.py:82 +#: netbox/wireless/models.py:156 netbox/wireless/tables/wirelesslan.py:44 msgid "SSID" msgstr "SSID" -#: templates/dcim/interface.html:305 +#: netbox/templates/dcim/interface.html:305 msgid "LAG Members" msgstr "LAG Üyeleri" -#: templates/dcim/interface.html:323 +#: netbox/templates/dcim/interface.html:323 msgid "No member interfaces" msgstr "Üye arabirimi yok" -#: templates/dcim/interface.html:343 templates/ipam/fhrpgroup.html:73 -#: templates/ipam/iprange/ip_addresses.html:7 -#: templates/ipam/prefix/ip_addresses.html:7 -#: templates/virtualization/vminterface.html:89 +#: netbox/templates/dcim/interface.html:343 +#: netbox/templates/ipam/fhrpgroup.html:73 +#: netbox/templates/ipam/iprange/ip_addresses.html:7 +#: netbox/templates/ipam/prefix/ip_addresses.html:7 +#: netbox/templates/virtualization/vminterface.html:89 msgid "Add IP Address" msgstr "IP Adresi Ekle" -#: templates/dcim/inventoryitem.html:24 +#: netbox/templates/dcim/inventoryitem.html:24 msgid "Parent Item" msgstr "Ana Öğe" -#: templates/dcim/inventoryitem.html:48 +#: netbox/templates/dcim/inventoryitem.html:48 msgid "Part ID" msgstr "Parça Kimliği" -#: templates/dcim/location.html:17 +#: netbox/templates/dcim/location.html:17 msgid "Add Child Location" msgstr "Alt Konumu Ekle" -#: templates/dcim/location.html:77 +#: netbox/templates/dcim/location.html:77 msgid "Child Locations" msgstr "Alt Konumlar" -#: templates/dcim/location.html:81 templates/dcim/site.html:131 +#: netbox/templates/dcim/location.html:81 netbox/templates/dcim/site.html:131 msgid "Add a Location" msgstr "Konum Ekle" -#: templates/dcim/location.html:94 templates/dcim/site.html:144 +#: netbox/templates/dcim/location.html:94 netbox/templates/dcim/site.html:144 msgid "Add a Device" msgstr "Cihaz Ekle" -#: templates/dcim/manufacturer.html:16 +#: netbox/templates/dcim/manufacturer.html:16 msgid "Add Device Type" msgstr "Cihaz Türü Ekle" -#: templates/dcim/manufacturer.html:21 +#: netbox/templates/dcim/manufacturer.html:21 msgid "Add Module Type" msgstr "Modül Türü Ekle" -#: templates/dcim/powerfeed.html:53 +#: netbox/templates/dcim/powerfeed.html:53 msgid "Connected Device" msgstr "Bağlı Cihaz" -#: templates/dcim/powerfeed.html:63 +#: netbox/templates/dcim/powerfeed.html:63 msgid "Utilization (Allocated" msgstr "Kullanım (Tahsis Edildi" -#: templates/dcim/powerfeed.html:80 +#: netbox/templates/dcim/powerfeed.html:80 msgid "Electrical Characteristics" msgstr "Elektriksel Özellikler" -#: templates/dcim/powerfeed.html:88 +#: netbox/templates/dcim/powerfeed.html:88 msgctxt "Abbreviation for volts" msgid "V" msgstr "V" -#: templates/dcim/powerfeed.html:92 +#: netbox/templates/dcim/powerfeed.html:92 msgctxt "Abbreviation for amperes" msgid "A" msgstr "A" -#: templates/dcim/poweroutlet.html:48 +#: netbox/templates/dcim/poweroutlet.html:48 msgid "Feed Leg" msgstr "Besleme ayağı" -#: templates/dcim/powerpanel.html:72 +#: netbox/templates/dcim/powerpanel.html:72 msgid "Add Power Feeds" msgstr "Güç Beslemeleri Ekle" -#: templates/dcim/powerport.html:44 +#: netbox/templates/dcim/powerport.html:44 msgid "Maximum Draw" msgstr "Maksimum Çekiliş" -#: templates/dcim/powerport.html:48 +#: netbox/templates/dcim/powerport.html:48 msgid "Allocated Draw" msgstr "Tahsis Edilen Çekiliş" -#: templates/dcim/rack.html:69 +#: netbox/templates/dcim/rack.html:69 msgid "Space Utilization" msgstr "Alan Kullanımı" -#: templates/dcim/rack.html:84 templates/dcim/racktype.html:44 +#: netbox/templates/dcim/rack.html:84 netbox/templates/dcim/racktype.html:44 msgid "Rack Weight" msgstr "Raf Ağırlığı" -#: templates/dcim/rack.html:94 templates/dcim/racktype.html:54 +#: netbox/templates/dcim/rack.html:94 netbox/templates/dcim/racktype.html:54 msgid "Maximum Weight" msgstr "Maksimum Ağırlık" -#: templates/dcim/rack.html:104 +#: netbox/templates/dcim/rack.html:104 msgid "Total Weight" msgstr "Toplam Ağırlık" -#: templates/dcim/rack.html:125 templates/dcim/rack_elevation_list.html:15 +#: netbox/templates/dcim/rack.html:125 +#: netbox/templates/dcim/rack_elevation_list.html:15 msgid "Images and Labels" msgstr "Resimler ve Etiketler" -#: templates/dcim/rack.html:126 templates/dcim/rack_elevation_list.html:16 +#: netbox/templates/dcim/rack.html:126 +#: netbox/templates/dcim/rack_elevation_list.html:16 msgid "Images only" msgstr "Yalnızca resimler" -#: templates/dcim/rack.html:127 templates/dcim/rack_elevation_list.html:17 +#: netbox/templates/dcim/rack.html:127 +#: netbox/templates/dcim/rack_elevation_list.html:17 msgid "Labels only" msgstr "Yalnızca etiketler" -#: templates/dcim/rack/reservations.html:8 +#: netbox/templates/dcim/rack/reservations.html:8 msgid "Add reservation" msgstr "Rezervasyon ekle" -#: templates/dcim/rack_elevation_list.html:12 +#: netbox/templates/dcim/rack_elevation_list.html:12 msgid "View List" msgstr "Listeyi Görüntüle" -#: templates/dcim/rack_elevation_list.html:14 +#: netbox/templates/dcim/rack_elevation_list.html:14 msgid "Select rack view" msgstr "Raf görünümünü seçin" -#: templates/dcim/rack_elevation_list.html:25 +#: netbox/templates/dcim/rack_elevation_list.html:25 msgid "Sort By" msgstr "Sıralamaya Göre" -#: templates/dcim/rack_elevation_list.html:74 +#: netbox/templates/dcim/rack_elevation_list.html:74 msgid "No Racks Found" msgstr "Raf Bulunamadı" -#: templates/dcim/rack_list.html:8 +#: netbox/templates/dcim/rack_list.html:8 msgid "View Elevations" msgstr "Yükseklikleri Görüntüle" -#: templates/dcim/rackreservation.html:42 +#: netbox/templates/dcim/rackreservation.html:42 msgid "Reservation Details" msgstr "Rezervasyon Detayları" -#: templates/dcim/rackrole.html:10 +#: netbox/templates/dcim/rackrole.html:10 msgid "Add Rack" msgstr "Raf Ekle" -#: templates/dcim/rearport.html:50 +#: netbox/templates/dcim/rearport.html:50 msgid "Positions" msgstr "Pozisyonlar" -#: templates/dcim/region.html:17 templates/dcim/sitegroup.html:17 +#: netbox/templates/dcim/region.html:17 +#: netbox/templates/dcim/sitegroup.html:17 msgid "Add Site" msgstr "Site Ekle" -#: templates/dcim/region.html:55 +#: netbox/templates/dcim/region.html:55 msgid "Child Regions" msgstr "Alt Bölgeler" -#: templates/dcim/region.html:59 +#: netbox/templates/dcim/region.html:59 msgid "Add Region" msgstr "Bölge Ekle" -#: templates/dcim/site.html:64 +#: netbox/templates/dcim/site.html:64 msgid "Time Zone" msgstr "Saat dilimi" -#: templates/dcim/site.html:67 +#: netbox/templates/dcim/site.html:67 msgid "UTC" msgstr "UTC" -#: templates/dcim/site.html:68 +#: netbox/templates/dcim/site.html:68 msgid "Site time" msgstr "Site zamanı" -#: templates/dcim/site.html:75 +#: netbox/templates/dcim/site.html:75 msgid "Physical Address" msgstr "Fiziksel Adres" -#: templates/dcim/site.html:90 +#: netbox/templates/dcim/site.html:90 msgid "Shipping Address" msgstr "Kargo Adresi" -#: templates/dcim/sitegroup.html:55 templates/tenancy/contactgroup.html:46 -#: templates/tenancy/tenantgroup.html:55 -#: templates/wireless/wirelesslangroup.html:55 +#: netbox/templates/dcim/sitegroup.html:55 +#: netbox/templates/tenancy/contactgroup.html:46 +#: netbox/templates/tenancy/tenantgroup.html:55 +#: netbox/templates/wireless/wirelesslangroup.html:55 msgid "Child Groups" msgstr "Çocuk Grupları" -#: templates/dcim/sitegroup.html:59 +#: netbox/templates/dcim/sitegroup.html:59 msgid "Add Site Group" msgstr "Site Grubu Ekle" -#: templates/dcim/trace/attachment.html:5 -#: templates/extras/exporttemplate.html:31 +#: netbox/templates/dcim/trace/attachment.html:5 +#: netbox/templates/extras/exporttemplate.html:31 msgid "Attachment" msgstr "Ataşman" -#: templates/dcim/virtualchassis.html:57 +#: netbox/templates/dcim/virtualchassis.html:57 msgid "Add Member" msgstr "Üye Ekle" -#: templates/dcim/virtualchassis_add.html:18 +#: netbox/templates/dcim/virtualchassis_add.html:18 msgid "Member Devices" msgstr "Üye Cihazları" -#: templates/dcim/virtualchassis_add_member.html:10 +#: netbox/templates/dcim/virtualchassis_add_member.html:10 #, python-format msgid "Add New Member to Virtual Chassis %(virtual_chassis)s" msgstr "Sanal Şasiye Yeni Üye Ekle %(virtual_chassis)s" -#: templates/dcim/virtualchassis_add_member.html:19 +#: netbox/templates/dcim/virtualchassis_add_member.html:19 msgid "Add New Member" msgstr "Yeni Üye Ekle" -#: templates/dcim/virtualchassis_add_member.html:27 -#: templates/generic/object_edit.html:78 -#: templates/users/objectpermission.html:31 users/forms/filtersets.py:67 -#: users/forms/model_forms.py:312 +#: netbox/templates/dcim/virtualchassis_add_member.html:27 +#: netbox/templates/generic/object_edit.html:78 +#: netbox/templates/users/objectpermission.html:31 +#: netbox/users/forms/filtersets.py:67 netbox/users/forms/model_forms.py:312 msgid "Actions" msgstr "Eylemler" -#: templates/dcim/virtualchassis_add_member.html:29 +#: netbox/templates/dcim/virtualchassis_add_member.html:29 msgid "Save & Add Another" msgstr "Kaydet ve Başka Ekle" -#: templates/dcim/virtualchassis_edit.html:7 +#: netbox/templates/dcim/virtualchassis_edit.html:7 #, python-format msgid "Editing Virtual Chassis %(name)s" msgstr "Sanal Kasayı Düzenleme %(name)s" -#: templates/dcim/virtualchassis_edit.html:53 +#: netbox/templates/dcim/virtualchassis_edit.html:53 msgid "Rack/Unit" msgstr "Raf/Birim" -#: templates/dcim/virtualchassis_remove_member.html:5 +#: netbox/templates/dcim/virtualchassis_remove_member.html:5 msgid "Remove Virtual Chassis Member" msgstr "Sanal Kasa Üyesini Kaldır" -#: templates/dcim/virtualchassis_remove_member.html:9 +#: netbox/templates/dcim/virtualchassis_remove_member.html:9 #, python-format msgid "" "Are you sure you want to remove %(device)s from virtual " @@ -12330,11 +13110,12 @@ msgstr "" "Kaldırmak istediğinizden emin misiniz? %(device)s sanal " "kasadan %(name)s?" -#: templates/dcim/virtualdevicecontext.html:26 templates/vpn/l2vpn.html:18 +#: netbox/templates/dcim/virtualdevicecontext.html:26 +#: netbox/templates/vpn/l2vpn.html:18 msgid "Identifier" msgstr "Tanımlayıcı" -#: templates/exceptions/import_error.html:6 +#: netbox/templates/exceptions/import_error.html:6 msgid "" "A module import error occurred during this request. Common causes include " "the following:" @@ -12342,11 +13123,11 @@ msgstr "" "Bu istek sırasında bir modül içe aktarma hatası oluştu. Yaygın nedenler " "aşağıdakileri içerir:" -#: templates/exceptions/import_error.html:10 +#: netbox/templates/exceptions/import_error.html:10 msgid "Missing required packages" msgstr "Gerekli paketler eksik" -#: templates/exceptions/import_error.html:11 +#: netbox/templates/exceptions/import_error.html:11 msgid "" "This installation of NetBox might be missing one or more required Python " "packages. These packages are listed in requirements.txt and " @@ -12362,11 +13143,11 @@ msgstr "" "çalıştırın pip dondurma konsoldan ve çıktıyı gerekli paketlerin" " listesiyle karşılaştırın." -#: templates/exceptions/import_error.html:20 +#: netbox/templates/exceptions/import_error.html:20 msgid "WSGI service not restarted after upgrade" msgstr "WSGI hizmeti yükseltmeden sonra yeniden başlatılmadı" -#: templates/exceptions/import_error.html:21 +#: netbox/templates/exceptions/import_error.html:21 msgid "" "If this installation has recently been upgraded, check that the WSGI service" " (e.g. gunicorn or uWSGI) has been restarted. This ensures that the new code" @@ -12376,7 +13157,7 @@ msgstr "" "veya uWSGi) yeniden başlatıldığını kontrol edin. Bu, yeni kodun çalışmasını " "sağlar." -#: templates/exceptions/permission_error.html:6 +#: netbox/templates/exceptions/permission_error.html:6 msgid "" "A file permission error was detected while processing this request. Common " "causes include the following:" @@ -12384,11 +13165,11 @@ msgstr "" "Bu istek işlenirken bir dosya izni hatası tespit edildi. Yaygın nedenler " "aşağıdakileri içerir:" -#: templates/exceptions/permission_error.html:10 +#: netbox/templates/exceptions/permission_error.html:10 msgid "Insufficient write permission to the media root" msgstr "Medya köküne yetersiz yazma izni" -#: templates/exceptions/permission_error.html:11 +#: netbox/templates/exceptions/permission_error.html:11 #, python-format msgid "" "The configured media root is %(media_root)s. Ensure that the " @@ -12399,7 +13180,7 @@ msgstr "" "kullanıcısının, bu yoldaki tüm konumlara dosya yazmak için erişimi olduğu " "gibi çalıştığından emin olun." -#: templates/exceptions/programming_error.html:6 +#: netbox/templates/exceptions/programming_error.html:6 msgid "" "A database programming error was detected while processing this request. " "Common causes include the following:" @@ -12407,11 +13188,11 @@ msgstr "" "Bu istek işlenirken bir veritabanı programlama hatası tespit edildi. Yaygın " "nedenler aşağıdakileri içerir:" -#: templates/exceptions/programming_error.html:10 +#: netbox/templates/exceptions/programming_error.html:10 msgid "Database migrations missing" msgstr "Veritabanı geçişleri eksik" -#: templates/exceptions/programming_error.html:11 +#: netbox/templates/exceptions/programming_error.html:11 msgid "" "When upgrading to a new NetBox release, the upgrade script must be run to " "apply any new database migrations. You can run migrations manually by " @@ -12422,11 +13203,11 @@ msgstr "" " manuel olarak çalıştırabilirsiniz python3 manage.py geçişi " "komut satırından." -#: templates/exceptions/programming_error.html:18 +#: netbox/templates/exceptions/programming_error.html:18 msgid "Unsupported PostgreSQL version" msgstr "Desteklenmeyen PostgreSQL sürümü" -#: templates/exceptions/programming_error.html:19 +#: netbox/templates/exceptions/programming_error.html:19 msgid "" "Ensure that PostgreSQL version 12 or later is in use. You can check this by " "connecting to the database using NetBox's credentials and issuing a query " @@ -12436,99 +13217,102 @@ msgstr "" "NetBox'ın kimlik bilgilerini kullanarak veritabanına bağlanarak ve bir sorgu" " düzenleyerek bunu kontrol edebilirsiniz. SÜRÜMÜ SEÇİN ()." -#: templates/extras/configcontext.html:45 -#: templates/extras/configtemplate.html:37 -#: templates/extras/exporttemplate.html:51 +#: netbox/templates/extras/configcontext.html:45 +#: netbox/templates/extras/configtemplate.html:37 +#: netbox/templates/extras/exporttemplate.html:51 msgid "The data file associated with this object has been deleted" msgstr "Bu nesneyle ilişkili veri dosyası silindi" -#: templates/extras/configcontext.html:54 -#: templates/extras/configtemplate.html:46 -#: templates/extras/exporttemplate.html:60 +#: netbox/templates/extras/configcontext.html:54 +#: netbox/templates/extras/configtemplate.html:46 +#: netbox/templates/extras/exporttemplate.html:60 msgid "Data Synced" msgstr "Veriler Senkronize Edildi" -#: templates/extras/configcontext_list.html:7 -#: templates/extras/configtemplate_list.html:7 -#: templates/extras/exporttemplate_list.html:7 +#: netbox/templates/extras/configcontext_list.html:7 +#: netbox/templates/extras/configtemplate_list.html:7 +#: netbox/templates/extras/exporttemplate_list.html:7 msgid "Sync Data" msgstr "Verileri Senkronize Et" -#: templates/extras/configtemplate.html:56 +#: netbox/templates/extras/configtemplate.html:56 msgid "Environment Parameters" msgstr "Çevre Parametreleri" -#: templates/extras/configtemplate.html:67 -#: templates/extras/exporttemplate.html:79 +#: netbox/templates/extras/configtemplate.html:67 +#: netbox/templates/extras/exporttemplate.html:79 msgid "Template" msgstr "Şablon" -#: templates/extras/customfield.html:30 templates/extras/customlink.html:21 +#: netbox/templates/extras/customfield.html:30 +#: netbox/templates/extras/customlink.html:21 msgid "Group Name" msgstr "Grup Adı" -#: templates/extras/customfield.html:42 +#: netbox/templates/extras/customfield.html:42 msgid "Must be Unique" msgstr "Benzersiz Olmalı" -#: templates/extras/customfield.html:46 +#: netbox/templates/extras/customfield.html:46 msgid "Cloneable" msgstr "Klonlanabilir" -#: templates/extras/customfield.html:56 +#: netbox/templates/extras/customfield.html:56 msgid "Default Value" msgstr "Varsayılan Değer" -#: templates/extras/customfield.html:73 +#: netbox/templates/extras/customfield.html:73 msgid "Search Weight" msgstr "Arama Ağırlığı" -#: templates/extras/customfield.html:83 +#: netbox/templates/extras/customfield.html:83 msgid "Filter Logic" msgstr "Filtre Mantığı" -#: templates/extras/customfield.html:87 +#: netbox/templates/extras/customfield.html:87 msgid "Display Weight" msgstr "Ekran Ağırlığı" -#: templates/extras/customfield.html:91 +#: netbox/templates/extras/customfield.html:91 msgid "UI Visible" msgstr "Kullanıcı Arayüzü Görünür" -#: templates/extras/customfield.html:95 +#: netbox/templates/extras/customfield.html:95 msgid "UI Editable" msgstr "UI Düzenlenebilir" -#: templates/extras/customfield.html:115 +#: netbox/templates/extras/customfield.html:115 msgid "Validation Rules" msgstr "Doğrulama Kuralları" -#: templates/extras/customfield.html:126 +#: netbox/templates/extras/customfield.html:126 msgid "Regular Expression" msgstr "Düzenli İfade" -#: templates/extras/customlink.html:29 +#: netbox/templates/extras/customlink.html:29 msgid "Button Class" msgstr "Düğme Sınıfı" -#: templates/extras/customlink.html:39 templates/extras/exporttemplate.html:66 -#: templates/extras/savedfilter.html:39 +#: netbox/templates/extras/customlink.html:39 +#: netbox/templates/extras/exporttemplate.html:66 +#: netbox/templates/extras/savedfilter.html:39 msgid "Assigned Models" msgstr "Atanan Modeller" -#: templates/extras/customlink.html:52 +#: netbox/templates/extras/customlink.html:52 msgid "Link Text" msgstr "Bağlantı Metni" -#: templates/extras/customlink.html:58 +#: netbox/templates/extras/customlink.html:58 msgid "Link URL" msgstr "Bağlantı URL'si" -#: templates/extras/dashboard/reset.html:4 templates/home.html:66 +#: netbox/templates/extras/dashboard/reset.html:4 +#: netbox/templates/home.html:66 msgid "Reset Dashboard" msgstr "Kontrol Panelini Sıfırla" -#: templates/extras/dashboard/reset.html:8 +#: netbox/templates/extras/dashboard/reset.html:8 msgid "" "This will remove all configured widgets and restore the " "default dashboard configuration." @@ -12536,7 +13320,7 @@ msgstr "" "Bu kaldıracak bütün widget'ları yapılandırın ve varsayılan " "gösterge paneli yapılandırmasını geri yükleyin." -#: templates/extras/dashboard/reset.html:13 +#: netbox/templates/extras/dashboard/reset.html:13 msgid "" "This change affects only your dashboard, and will not impact other " "users." @@ -12544,154 +13328,161 @@ msgstr "" "Bu değişiklik sadece etkiliyor sizin kontrol paneli, ve diğer " "kullanıcıları etkilemeyecektir." -#: templates/extras/dashboard/widget.html:21 +#: netbox/templates/extras/dashboard/widget.html:21 msgid "widget configuration" msgstr "widget yapılandırması" -#: templates/extras/dashboard/widget.html:36 +#: netbox/templates/extras/dashboard/widget.html:36 msgid "Close widget" msgstr "Widget'ı kapat" -#: templates/extras/dashboard/widget_add.html:7 +#: netbox/templates/extras/dashboard/widget_add.html:7 msgid "Add a Widget" msgstr "Widget Ekle" -#: templates/extras/dashboard/widgets/bookmarks.html:14 +#: netbox/templates/extras/dashboard/widgets/bookmarks.html:14 msgid "No bookmarks have been added yet." msgstr "Henüz yer imi eklenmedi." -#: templates/extras/dashboard/widgets/objectcounts.html:10 +#: netbox/templates/extras/dashboard/widgets/objectcounts.html:10 msgid "No permission" msgstr "İzin yok" -#: templates/extras/dashboard/widgets/objectlist.html:6 +#: netbox/templates/extras/dashboard/widgets/objectlist.html:6 msgid "No permission to view this content" msgstr "Bu içeriği görüntüleme izni yok" -#: templates/extras/dashboard/widgets/objectlist.html:10 +#: netbox/templates/extras/dashboard/widgets/objectlist.html:10 msgid "Unable to load content. Invalid view name" msgstr "İçerik yüklenemiyor. Geçersiz görünüm adı" -#: templates/extras/dashboard/widgets/rssfeed.html:12 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:12 msgid "No content found" msgstr "İçerik bulunamadı" -#: templates/extras/dashboard/widgets/rssfeed.html:18 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:18 msgid "There was a problem fetching the RSS feed" msgstr "RSS beslemesini getirirken bir sorun oluştu" -#: templates/extras/dashboard/widgets/rssfeed.html:21 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:21 msgid "HTTP" msgstr "HTTP" -#: templates/extras/eventrule.html:61 +#: netbox/templates/extras/eventrule.html:61 msgid "Conditions" msgstr "Koşullar" -#: templates/extras/exporttemplate.html:23 +#: netbox/templates/extras/exporttemplate.html:23 msgid "MIME Type" msgstr "MIME Türü" -#: templates/extras/exporttemplate.html:27 +#: netbox/templates/extras/exporttemplate.html:27 msgid "File Extension" msgstr "Dosya uzantısı" -#: templates/extras/htmx/script_result.html:10 +#: netbox/templates/extras/htmx/script_result.html:10 msgid "Scheduled for" msgstr "İçin planlanmış" -#: templates/extras/htmx/script_result.html:15 +#: netbox/templates/extras/htmx/script_result.html:15 msgid "Duration" msgstr "Süre" -#: templates/extras/htmx/script_result.html:23 +#: netbox/templates/extras/htmx/script_result.html:23 msgid "Test Summary" msgstr "Test Özeti" -#: templates/extras/htmx/script_result.html:43 +#: netbox/templates/extras/htmx/script_result.html:43 msgid "Log" msgstr "Günlüğe" -#: templates/extras/htmx/script_result.html:56 +#: netbox/templates/extras/htmx/script_result.html:56 msgid "Output" msgstr "Çıktı" -#: templates/extras/inc/result_pending.html:4 +#: netbox/templates/extras/inc/result_pending.html:4 msgid "Loading" msgstr "Yükleniyor" -#: templates/extras/inc/result_pending.html:6 +#: netbox/templates/extras/inc/result_pending.html:6 msgid "Results pending" msgstr "Sonuçlar beklemede" -#: templates/extras/journalentry.html:15 +#: netbox/templates/extras/journalentry.html:15 msgid "Journal Entry" msgstr "Dergi Girişi" -#: templates/extras/notificationgroup.html:11 +#: netbox/templates/extras/notificationgroup.html:11 msgid "Notification Group" msgstr "Bildirim Grubu" -#: templates/extras/notificationgroup.html:36 -#: templates/extras/notificationgroup.html:46 -#: utilities/templates/widgets/clearable_file_input.html:12 +#: netbox/templates/extras/notificationgroup.html:36 +#: netbox/templates/extras/notificationgroup.html:46 +#: netbox/utilities/templates/widgets/clearable_file_input.html:12 msgid "None assigned" msgstr "Atanmadı" -#: templates/extras/object_configcontext.html:19 +#: netbox/templates/extras/object_configcontext.html:19 msgid "The local config context overwrites all source contexts" msgstr "Yerel yapılandırma bağlamı tüm kaynak bağlamların üzerine yazar" -#: templates/extras/object_configcontext.html:25 +#: netbox/templates/extras/object_configcontext.html:25 msgid "Source Contexts" msgstr "Kaynak Bağlamları" -#: templates/extras/object_journal.html:17 +#: netbox/templates/extras/object_journal.html:17 msgid "New Journal Entry" msgstr "Yeni Dergi Girişi" -#: templates/extras/report/base.html:30 +#: netbox/templates/extras/report/base.html:30 msgid "Report" msgstr "Rapor" -#: templates/extras/script.html:14 +#: netbox/templates/extras/script.html:14 msgid "You do not have permission to run scripts" msgstr "Komut dosyalarını çalıştırma izniniz yok" -#: templates/extras/script.html:41 templates/extras/script.html:45 -#: templates/extras/script_list.html:86 +#: netbox/templates/extras/script.html:41 +#: netbox/templates/extras/script.html:45 +#: netbox/templates/extras/script_list.html:87 msgid "Run Script" msgstr "Komut Dosyasını Çalıştır" -#: templates/extras/script.html:51 templates/extras/script/source.html:10 +#: netbox/templates/extras/script.html:51 +#: netbox/templates/extras/script/source.html:10 msgid "Error loading script" msgstr "Komut dosyası yüklenirken hata oluştu" -#: templates/extras/script/jobs.html:16 +#: netbox/templates/extras/script/jobs.html:16 msgid "Script no longer exists in the source file." msgstr "Kaynak dosyada komut dosyası artık mevcut değil." -#: templates/extras/script_list.html:46 +#: netbox/templates/extras/script_list.html:47 msgid "Last Run" msgstr "Son Koşu" -#: templates/extras/script_list.html:61 +#: netbox/templates/extras/script_list.html:62 msgid "Script is no longer present in the source file" msgstr "Komut dosyası artık kaynak dosyada mevcut değil" -#: templates/extras/script_list.html:74 +#: netbox/templates/extras/script_list.html:75 msgid "Never" msgstr "Asla" -#: templates/extras/script_list.html:84 +#: netbox/templates/extras/script_list.html:85 msgid "Run Again" msgstr "Tekrar koş" -#: templates/extras/script_list.html:138 +#: netbox/templates/extras/script_list.html:133 +#, python-format +msgid "Could not load scripts from module %(module)s" +msgstr "" + +#: netbox/templates/extras/script_list.html:141 msgid "No Scripts Found" msgstr "Komut Dosyası Bulunamadı" -#: templates/extras/script_list.html:141 +#: netbox/templates/extras/script_list.html:144 #, python-format msgid "" "Get started by creating a script from " @@ -12700,81 +13491,83 @@ msgstr "" "Şuradan başlayın bir komut dosyası " "oluşturma yüklenen bir dosyadan veya veri kaynağından." -#: templates/extras/script_result.html:35 -#: templates/generic/object_list.html:50 templates/search.html:13 +#: netbox/templates/extras/script_result.html:35 +#: netbox/templates/generic/object_list.html:50 +#: netbox/templates/search.html:13 msgid "Results" msgstr "Sonuçlar" -#: templates/extras/script_result.html:46 +#: netbox/templates/extras/script_result.html:46 msgid "Log threshold" msgstr "Günlük eşiği" -#: templates/extras/script_result.html:56 +#: netbox/templates/extras/script_result.html:56 msgid "All" msgstr "Hepsi" -#: templates/extras/tag.html:32 +#: netbox/templates/extras/tag.html:32 msgid "Tagged Items" msgstr "Etiketli Öğeler" -#: templates/extras/tag.html:43 +#: netbox/templates/extras/tag.html:43 msgid "Allowed Object Types" msgstr "İzin Verilen Nesne Türleri" -#: templates/extras/tag.html:51 +#: netbox/templates/extras/tag.html:51 msgid "Any" msgstr "Herhangi bir" -#: templates/extras/tag.html:57 +#: netbox/templates/extras/tag.html:57 msgid "Tagged Item Types" msgstr "Etiketli Öğe Türleri" -#: templates/extras/tag.html:81 +#: netbox/templates/extras/tag.html:81 msgid "Tagged Objects" msgstr "Etiketli Nesneler" -#: templates/extras/webhook.html:26 +#: netbox/templates/extras/webhook.html:26 msgid "HTTP Method" msgstr "HTTP Yöntemi" -#: templates/extras/webhook.html:34 +#: netbox/templates/extras/webhook.html:34 msgid "HTTP Content Type" msgstr "HTTP İçerik Türü" -#: templates/extras/webhook.html:47 +#: netbox/templates/extras/webhook.html:47 msgid "SSL Verification" msgstr "SSL Doğrulama" -#: templates/extras/webhook.html:60 +#: netbox/templates/extras/webhook.html:60 msgid "Additional Headers" msgstr "Ek Başlıklar" -#: templates/extras/webhook.html:70 +#: netbox/templates/extras/webhook.html:70 msgid "Body Template" msgstr "Vücut Şablonu" -#: templates/generic/bulk_add_component.html:29 +#: netbox/templates/generic/bulk_add_component.html:29 msgid "Bulk Creation" msgstr "Toplu Oluşturma" -#: templates/generic/bulk_add_component.html:34 -#: templates/generic/bulk_delete.html:32 templates/generic/bulk_edit.html:33 +#: netbox/templates/generic/bulk_add_component.html:34 +#: netbox/templates/generic/bulk_delete.html:32 +#: netbox/templates/generic/bulk_edit.html:33 msgid "Selected Objects" msgstr "Seçili Nesneler" -#: templates/generic/bulk_add_component.html:58 +#: netbox/templates/generic/bulk_add_component.html:58 msgid "to Add" msgstr "Eklemek için" -#: templates/generic/bulk_delete.html:27 +#: netbox/templates/generic/bulk_delete.html:27 msgid "Bulk Delete" msgstr "Toplu Silme" -#: templates/generic/bulk_delete.html:49 +#: netbox/templates/generic/bulk_delete.html:49 msgid "Confirm Bulk Deletion" msgstr "Toplu Silmeyi Onayla" -#: templates/generic/bulk_delete.html:50 +#: netbox/templates/generic/bulk_delete.html:50 #, python-format msgid "" "The following operation will delete %(count)s " @@ -12784,64 +13577,67 @@ msgstr "" "Aşağıdaki işlem silinecek %(count)s %(type_plural)s. Lütfen" " seçilen nesneleri dikkatlice inceleyin ve bu işlemi onaylayın." -#: templates/generic/bulk_edit.html:21 templates/generic/object_edit.html:22 +#: netbox/templates/generic/bulk_edit.html:21 +#: netbox/templates/generic/object_edit.html:22 msgid "Editing" msgstr "Düzenleme" -#: templates/generic/bulk_edit.html:28 +#: netbox/templates/generic/bulk_edit.html:28 msgid "Bulk Edit" msgstr "Toplu Düzenleme" -#: templates/generic/bulk_edit.html:107 templates/generic/bulk_rename.html:66 +#: netbox/templates/generic/bulk_edit.html:107 +#: netbox/templates/generic/bulk_rename.html:66 msgid "Apply" msgstr "Uygula" -#: templates/generic/bulk_import.html:19 +#: netbox/templates/generic/bulk_import.html:19 msgid "Bulk Import" msgstr "Toplu İçe Aktar" -#: templates/generic/bulk_import.html:25 +#: netbox/templates/generic/bulk_import.html:25 msgid "Direct Import" msgstr "Doğrudan İçe Aktar" -#: templates/generic/bulk_import.html:30 +#: netbox/templates/generic/bulk_import.html:30 msgid "Upload File" msgstr "Dosya Yükle" -#: templates/generic/bulk_import.html:58 templates/generic/bulk_import.html:80 -#: templates/generic/bulk_import.html:102 +#: netbox/templates/generic/bulk_import.html:58 +#: netbox/templates/generic/bulk_import.html:80 +#: netbox/templates/generic/bulk_import.html:102 msgid "Submit" msgstr "Gönder" -#: templates/generic/bulk_import.html:113 +#: netbox/templates/generic/bulk_import.html:113 msgid "Field Options" msgstr "Alan Seçenekleri" -#: templates/generic/bulk_import.html:119 +#: netbox/templates/generic/bulk_import.html:119 msgid "Accessor" msgstr "Aksesuar" -#: templates/generic/bulk_import.html:148 +#: netbox/templates/generic/bulk_import.html:148 msgid "choices" msgstr "seçimler" -#: templates/generic/bulk_import.html:161 +#: netbox/templates/generic/bulk_import.html:161 msgid "Import Value" msgstr "İthalat Değeri" -#: templates/generic/bulk_import.html:181 +#: netbox/templates/generic/bulk_import.html:181 msgid "Format: YYYY-MM-DD" msgstr "Biçim: YYYY-MM-DD" -#: templates/generic/bulk_import.html:183 +#: netbox/templates/generic/bulk_import.html:183 msgid "Specify true or false" msgstr "Doğru veya yanlış belirtin" -#: templates/generic/bulk_import.html:195 +#: netbox/templates/generic/bulk_import.html:195 msgid "Required fields must be specified for all objects." msgstr "Zorunlu alanlar şart tüm nesneler için belirtilir." -#: templates/generic/bulk_import.html:201 +#: netbox/templates/generic/bulk_import.html:201 #, python-format msgid "" "Related objects may be referenced by any unique attribute. For example, " @@ -12851,15 +13647,15 @@ msgstr "" " Örneğin, %(example)s bir VRF'yi rota ayırt edicisi ile " "tanımlar." -#: templates/generic/bulk_remove.html:28 +#: netbox/templates/generic/bulk_remove.html:28 msgid "Bulk Remove" msgstr "Toplu Kaldırma" -#: templates/generic/bulk_remove.html:42 +#: netbox/templates/generic/bulk_remove.html:42 msgid "Confirm Bulk Removal" msgstr "Toplu Kaldırmayı Onayla" -#: templates/generic/bulk_remove.html:43 +#: netbox/templates/generic/bulk_remove.html:43 #, python-format msgid "" "The following operation will remove %(count)s %(obj_type_plural)s from " @@ -12870,72 +13666,72 @@ msgstr "" "%(parent_obj)s. Lütfen dikkatlice inceleyin %(obj_type_plural)s kaldırılacak" " ve aşağıda onaylanacak." -#: templates/generic/bulk_remove.html:64 +#: netbox/templates/generic/bulk_remove.html:64 #, python-format msgid "Remove these %(count)s %(obj_type_plural)s" msgstr "Bunları kaldır %(count)s %(obj_type_plural)s" -#: templates/generic/bulk_rename.html:20 +#: netbox/templates/generic/bulk_rename.html:20 msgid "Renaming" msgstr "Yeniden Adlandırma" -#: templates/generic/bulk_rename.html:27 +#: netbox/templates/generic/bulk_rename.html:27 msgid "Bulk Rename" msgstr "Toplu Yeniden Adlandırma" -#: templates/generic/bulk_rename.html:39 +#: netbox/templates/generic/bulk_rename.html:39 msgid "Current Name" msgstr "Geçerli İsim" -#: templates/generic/bulk_rename.html:40 +#: netbox/templates/generic/bulk_rename.html:40 msgid "New Name" msgstr "Yeni İsim" -#: templates/generic/bulk_rename.html:64 -#: utilities/templates/widgets/markdown_input.html:11 +#: netbox/templates/generic/bulk_rename.html:64 +#: netbox/utilities/templates/widgets/markdown_input.html:11 msgid "Preview" msgstr "Önizleme" -#: templates/generic/confirmation_form.html:16 +#: netbox/templates/generic/confirmation_form.html:16 msgid "Are you sure" msgstr "Emin misin" -#: templates/generic/confirmation_form.html:20 +#: netbox/templates/generic/confirmation_form.html:20 msgid "Confirm" msgstr "Onayla" -#: templates/generic/object_children.html:47 -#: utilities/templates/buttons/bulk_edit.html:4 +#: netbox/templates/generic/object_children.html:47 +#: netbox/utilities/templates/buttons/bulk_edit.html:4 msgid "Edit Selected" msgstr "Seçili Düzenle" -#: templates/generic/object_children.html:61 -#: utilities/templates/buttons/bulk_delete.html:4 +#: netbox/templates/generic/object_children.html:61 +#: netbox/utilities/templates/buttons/bulk_delete.html:4 msgid "Delete Selected" msgstr "Seçili Sil" -#: templates/generic/object_edit.html:24 +#: netbox/templates/generic/object_edit.html:24 #, python-format msgid "Add a new %(object_type)s" msgstr "Yeni ekle %(object_type)s" -#: templates/generic/object_edit.html:35 +#: netbox/templates/generic/object_edit.html:35 msgid "View model documentation" msgstr "Model belgelerini görüntüleyin" -#: templates/generic/object_edit.html:36 +#: netbox/templates/generic/object_edit.html:36 msgid "Help" msgstr "Yardım" -#: templates/generic/object_edit.html:83 +#: netbox/templates/generic/object_edit.html:83 msgid "Create & Add Another" msgstr "Başka Oluştur ve Ekle" -#: templates/generic/object_list.html:57 +#: netbox/templates/generic/object_list.html:57 msgid "Filters" msgstr "Filtreler" -#: templates/generic/object_list.html:88 +#: netbox/templates/generic/object_list.html:88 #, python-format msgid "" "Select all %(count)s " @@ -12944,40 +13740,40 @@ msgstr "" "Seçiniz bütün %(count)s " "%(object_type_plural)s eşleşen sorgu" -#: templates/home.html:15 +#: netbox/templates/home.html:15 msgid "New Release Available" msgstr "Yeni Sürüm Mevcut" -#: templates/home.html:16 +#: netbox/templates/home.html:16 msgid "is available" msgstr "mevcuttur" -#: templates/home.html:18 +#: netbox/templates/home.html:18 msgctxt "Document title" msgid "Upgrade Instructions" msgstr "Yükseltme Talimatları" -#: templates/home.html:40 +#: netbox/templates/home.html:40 msgid "Unlock Dashboard" msgstr "Panelin Kilidini Açın" -#: templates/home.html:49 +#: netbox/templates/home.html:49 msgid "Lock Dashboard" msgstr "Kontrol Panelini Kilitle" -#: templates/home.html:60 +#: netbox/templates/home.html:60 msgid "Add Widget" msgstr "Widget Ekle" -#: templates/home.html:63 +#: netbox/templates/home.html:63 msgid "Save Layout" msgstr "Düzeni Kaydet" -#: templates/htmx/delete_form.html:7 +#: netbox/templates/htmx/delete_form.html:7 msgid "Confirm Deletion" msgstr "Silmeyi Onayla" -#: templates/htmx/delete_form.html:11 +#: netbox/templates/htmx/delete_form.html:11 #, python-format msgid "" "Are you sure you want to delete " @@ -12986,40 +13782,40 @@ msgstr "" "İstediğinizden emin misiniz silmek " "%(object_type)s %(object)s?" -#: templates/htmx/delete_form.html:17 +#: netbox/templates/htmx/delete_form.html:17 msgid "The following objects will be deleted as a result of this action." msgstr "Bu işlem sonucunda aşağıdaki nesneler silinecektir." -#: templates/htmx/notifications.html:15 +#: netbox/templates/htmx/notifications.html:15 msgid "ago" msgstr "önce" -#: templates/htmx/notifications.html:26 +#: netbox/templates/htmx/notifications.html:26 msgid "No unread notifications" msgstr "Okunmamış bildirim yok" -#: templates/htmx/notifications.html:31 +#: netbox/templates/htmx/notifications.html:31 msgid "All notifications" msgstr "Tüm bildirimler" -#: templates/htmx/object_selector.html:5 +#: netbox/templates/htmx/object_selector.html:5 msgid "Select" msgstr "Seçiniz" -#: templates/inc/filter_list.html:43 -#: utilities/templates/helpers/table_config_form.html:39 +#: netbox/templates/inc/filter_list.html:43 +#: netbox/utilities/templates/helpers/table_config_form.html:39 msgid "Reset" msgstr "Sıfırla" -#: templates/inc/light_toggle.html:4 +#: netbox/templates/inc/light_toggle.html:4 msgid "Enable dark mode" msgstr "Karanlık modu etkinleştir" -#: templates/inc/light_toggle.html:7 +#: netbox/templates/inc/light_toggle.html:7 msgid "Enable light mode" msgstr "Işık modunu etkinleştir" -#: templates/inc/missing_prerequisites.html:8 +#: netbox/templates/inc/missing_prerequisites.html:8 #, python-format msgid "" "Before you can add a %(model)s you must first create a " @@ -13028,281 +13824,283 @@ msgstr "" "%(model)s eklemeden önce %(prerequisite_model)s " "oluşturmalısınız." -#: templates/inc/paginator.html:15 +#: netbox/templates/inc/paginator.html:15 msgid "Page selection" msgstr "Sayfa seçimi" -#: templates/inc/paginator.html:75 +#: netbox/templates/inc/paginator.html:75 #, python-format msgid "Showing %(start)s-%(end)s of %(total)s" msgstr "Gösterme %(start)s-%(end)s dan %(total)s" -#: templates/inc/paginator.html:82 +#: netbox/templates/inc/paginator.html:82 msgid "Pagination options" msgstr "Sayfalama seçenekleri" -#: templates/inc/paginator.html:86 +#: netbox/templates/inc/paginator.html:86 msgid "Per Page" msgstr "Sayfa Başına" -#: templates/inc/panels/image_attachments.html:10 +#: netbox/templates/inc/panels/image_attachments.html:10 msgid "Attach an image" msgstr "Bir resim ekle" -#: templates/inc/panels/related_objects.html:5 +#: netbox/templates/inc/panels/related_objects.html:5 msgid "Related Objects" msgstr "İlgili Nesneler" -#: templates/inc/panels/tags.html:11 +#: netbox/templates/inc/panels/tags.html:11 msgid "No tags assigned" msgstr "Hiçbir etiket atanmadı" -#: templates/inc/sync_warning.html:10 +#: netbox/templates/inc/sync_warning.html:10 msgid "Data is out of sync with upstream file" msgstr "Veriler yukarı akış dosyasıyla senkronize değil" -#: templates/inc/table_controls_htmx.html:7 +#: netbox/templates/inc/table_controls_htmx.html:7 msgid "Quick search" msgstr "Hızlı arama" -#: templates/inc/table_controls_htmx.html:20 +#: netbox/templates/inc/table_controls_htmx.html:20 msgid "Saved filter" msgstr "Kaydedilen filtre" -#: templates/inc/table_htmx.html:18 +#: netbox/templates/inc/table_htmx.html:18 msgid "Clear ordering" msgstr "Net sipariş" -#: templates/inc/user_menu.html:6 +#: netbox/templates/inc/user_menu.html:6 msgid "Help center" msgstr "Yardım Merkezi" -#: templates/inc/user_menu.html:41 +#: netbox/templates/inc/user_menu.html:41 msgid "Django Admin" msgstr "Django Yöneticisi" -#: templates/inc/user_menu.html:61 +#: netbox/templates/inc/user_menu.html:61 msgid "Log Out" msgstr "Oturumu Kapat" -#: templates/inc/user_menu.html:68 templates/login.html:38 +#: netbox/templates/inc/user_menu.html:68 netbox/templates/login.html:38 msgid "Log In" msgstr "Oturum aç" -#: templates/ipam/aggregate.html:14 templates/ipam/ipaddress.html:14 -#: templates/ipam/iprange.html:13 templates/ipam/prefix.html:15 +#: netbox/templates/ipam/aggregate.html:14 +#: netbox/templates/ipam/ipaddress.html:14 +#: netbox/templates/ipam/iprange.html:13 netbox/templates/ipam/prefix.html:15 msgid "Family" msgstr "Aile" -#: templates/ipam/aggregate.html:39 +#: netbox/templates/ipam/aggregate.html:39 msgid "Date Added" msgstr "Ekleme Tarihi" -#: templates/ipam/aggregate/prefixes.html:8 -#: templates/ipam/prefix/prefixes.html:8 templates/ipam/role.html:10 +#: netbox/templates/ipam/aggregate/prefixes.html:8 +#: netbox/templates/ipam/prefix/prefixes.html:8 +#: netbox/templates/ipam/role.html:10 msgid "Add Prefix" msgstr "Önek Ekle" -#: templates/ipam/asn.html:23 +#: netbox/templates/ipam/asn.html:23 msgid "AS Number" msgstr "AS Numarası" -#: templates/ipam/fhrpgroup.html:52 +#: netbox/templates/ipam/fhrpgroup.html:52 msgid "Authentication Type" msgstr "Kimlik Doğrulama Türü" -#: templates/ipam/fhrpgroup.html:56 +#: netbox/templates/ipam/fhrpgroup.html:56 msgid "Authentication Key" msgstr "Kimlik Doğrulama Anahtarı" -#: templates/ipam/fhrpgroup.html:69 +#: netbox/templates/ipam/fhrpgroup.html:69 msgid "Virtual IP Addresses" msgstr "Sanal IP Adresleri" -#: templates/ipam/inc/ipaddress_edit_header.html:13 +#: netbox/templates/ipam/inc/ipaddress_edit_header.html:13 msgid "Assign IP" msgstr "IP atayın" -#: templates/ipam/inc/ipaddress_edit_header.html:19 +#: netbox/templates/ipam/inc/ipaddress_edit_header.html:19 msgid "Bulk Create" msgstr "Toplu Oluşturma" -#: templates/ipam/inc/panels/fhrp_groups.html:10 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:10 msgid "Create Group" msgstr "Grup Oluştur" -#: templates/ipam/inc/panels/fhrp_groups.html:25 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:25 msgid "Virtual IPs" msgstr "Sanal IP'ler" -#: templates/ipam/inc/toggle_available.html:7 +#: netbox/templates/ipam/inc/toggle_available.html:7 msgid "Show Assigned" msgstr "Atananları Göster" -#: templates/ipam/inc/toggle_available.html:10 +#: netbox/templates/ipam/inc/toggle_available.html:10 msgid "Show Available" msgstr "Mevcut Göster" -#: templates/ipam/inc/toggle_available.html:13 +#: netbox/templates/ipam/inc/toggle_available.html:13 msgid "Show All" msgstr "Tümünü Göster" -#: templates/ipam/ipaddress.html:23 templates/ipam/iprange.html:45 -#: templates/ipam/prefix.html:24 +#: netbox/templates/ipam/ipaddress.html:23 +#: netbox/templates/ipam/iprange.html:45 netbox/templates/ipam/prefix.html:24 msgid "Global" msgstr "Küresel" -#: templates/ipam/ipaddress.html:85 +#: netbox/templates/ipam/ipaddress.html:85 msgid "NAT (outside)" msgstr "NAT (dış)" -#: templates/ipam/ipaddress_assign.html:8 +#: netbox/templates/ipam/ipaddress_assign.html:8 msgid "Assign an IP Address" msgstr "IP Adresi Atama" -#: templates/ipam/ipaddress_assign.html:22 +#: netbox/templates/ipam/ipaddress_assign.html:22 msgid "Select IP Address" msgstr "IP Adresini Seçin" -#: templates/ipam/ipaddress_assign.html:35 +#: netbox/templates/ipam/ipaddress_assign.html:35 msgid "Search Results" msgstr "Arama Sonuçları" -#: templates/ipam/ipaddress_bulk_add.html:6 +#: netbox/templates/ipam/ipaddress_bulk_add.html:6 msgid "Bulk Add IP Addresses" msgstr "Toplu IP Adresleri Ekleme" -#: templates/ipam/iprange.html:17 +#: netbox/templates/ipam/iprange.html:17 msgid "Starting Address" msgstr "Başlangıç Adresi" -#: templates/ipam/iprange.html:21 +#: netbox/templates/ipam/iprange.html:21 msgid "Ending Address" msgstr "Bitiş Adresi" -#: templates/ipam/iprange.html:33 templates/ipam/prefix.html:110 +#: netbox/templates/ipam/iprange.html:33 netbox/templates/ipam/prefix.html:110 msgid "Marked fully utilized" msgstr "Tamamen kullanılmış olarak işaretlenmiş" -#: templates/ipam/prefix.html:99 +#: netbox/templates/ipam/prefix.html:99 msgid "Addressing Details" msgstr "Adresleme Ayrıntıları" -#: templates/ipam/prefix.html:118 +#: netbox/templates/ipam/prefix.html:118 msgid "Child IPs" msgstr "Çocuk IP'leri" -#: templates/ipam/prefix.html:126 +#: netbox/templates/ipam/prefix.html:126 msgid "Available IPs" msgstr "Kullanılabilir IP'ler" -#: templates/ipam/prefix.html:138 +#: netbox/templates/ipam/prefix.html:138 msgid "First available IP" msgstr "İlk kullanılabilir IP" -#: templates/ipam/prefix.html:179 +#: netbox/templates/ipam/prefix.html:179 msgid "Prefix Details" msgstr "Önek Ayrıntıları" -#: templates/ipam/prefix.html:185 +#: netbox/templates/ipam/prefix.html:185 msgid "Network Address" msgstr "Ağ Adresi" -#: templates/ipam/prefix.html:189 +#: netbox/templates/ipam/prefix.html:189 msgid "Network Mask" msgstr "Ağ Maskesi" -#: templates/ipam/prefix.html:193 +#: netbox/templates/ipam/prefix.html:193 msgid "Wildcard Mask" msgstr "Joker Karakter Maskesi" -#: templates/ipam/prefix.html:197 +#: netbox/templates/ipam/prefix.html:197 msgid "Broadcast Address" msgstr "Yayın Adresi" -#: templates/ipam/prefix/ip_ranges.html:7 +#: netbox/templates/ipam/prefix/ip_ranges.html:7 msgid "Add IP Range" msgstr "IP Aralığı Ekle" -#: templates/ipam/prefix_list.html:7 +#: netbox/templates/ipam/prefix_list.html:7 msgid "Hide Depth Indicators" msgstr "Derinlik Göstergelerini Gizle" -#: templates/ipam/prefix_list.html:11 +#: netbox/templates/ipam/prefix_list.html:11 msgid "Max Depth" msgstr "Maksimum Derinlik" -#: templates/ipam/prefix_list.html:28 +#: netbox/templates/ipam/prefix_list.html:28 msgid "Max Length" msgstr "Maksimum Uzunluk" -#: templates/ipam/rir.html:10 +#: netbox/templates/ipam/rir.html:10 msgid "Add Aggregate" msgstr "Toplama Ekle" -#: templates/ipam/routetarget.html:38 +#: netbox/templates/ipam/routetarget.html:38 msgid "Importing VRFs" msgstr "VRF'leri içe aktarma" -#: templates/ipam/routetarget.html:44 +#: netbox/templates/ipam/routetarget.html:44 msgid "Exporting VRFs" msgstr "VRF'leri Dışa Aktarma" -#: templates/ipam/routetarget.html:52 +#: netbox/templates/ipam/routetarget.html:52 msgid "Importing L2VPNs" msgstr "L2VPN'leri içe aktarma" -#: templates/ipam/routetarget.html:58 +#: netbox/templates/ipam/routetarget.html:58 msgid "Exporting L2VPNs" msgstr "L2VPN'leri Dışa Aktarma" -#: templates/ipam/vlan.html:88 +#: netbox/templates/ipam/vlan.html:88 msgid "Add a Prefix" msgstr "Önek Ekle" -#: templates/ipam/vlangroup.html:18 +#: netbox/templates/ipam/vlangroup.html:18 msgid "Add VLAN" msgstr "VLAN ekle" -#: templates/ipam/vrf.html:16 +#: netbox/templates/ipam/vrf.html:16 msgid "Route Distinguisher" msgstr "Rota Ayırt Edici" -#: templates/ipam/vrf.html:29 +#: netbox/templates/ipam/vrf.html:29 msgid "Unique IP Space" msgstr "Benzersiz IP Alanı" -#: templates/login.html:29 -#: utilities/templates/form_helpers/render_errors.html:7 +#: netbox/templates/login.html:29 +#: netbox/utilities/templates/form_helpers/render_errors.html:7 msgid "Errors" msgstr "Hatalar" -#: templates/login.html:69 +#: netbox/templates/login.html:69 msgid "Sign In" msgstr "Oturum aç" -#: templates/login.html:77 +#: netbox/templates/login.html:77 msgctxt "Denotes an alternative option" msgid "Or" msgstr "Veya" -#: templates/media_failure.html:7 +#: netbox/templates/media_failure.html:7 msgid "Static Media Failure - NetBox" msgstr "Statik Ortam Hatası - NetBox" -#: templates/media_failure.html:21 +#: netbox/templates/media_failure.html:21 msgid "Static Media Failure" msgstr "Statik Ortam Arızası" -#: templates/media_failure.html:23 +#: netbox/templates/media_failure.html:23 msgid "The following static media file failed to load" msgstr "Aşağıdaki statik medya dosyası yüklenemedi" -#: templates/media_failure.html:26 +#: netbox/templates/media_failure.html:26 msgid "Check the following" msgstr "Aşağıdakileri kontrol edin" -#: templates/media_failure.html:29 +#: netbox/templates/media_failure.html:29 msgid "" "manage.py collectstatic was run during the most recent upgrade." " This installs the most recent iteration of each static file into the static" @@ -13312,7 +14110,7 @@ msgstr "" "çalıştırıldı. Bu, her statik dosyanın en son yinelemesini statik kök yoluna " "yükler." -#: templates/media_failure.html:35 +#: netbox/templates/media_failure.html:35 #, python-format msgid "" "The HTTP service (e.g. nginx or Apache) is configured to serve files from " @@ -13323,7 +14121,7 @@ msgstr "" "yapılandırılmıştır. STATİC_ROOT yol. Bakınız kurulum belgeleri Daha fazla rehberlik için." -#: templates/media_failure.html:47 +#: netbox/templates/media_failure.html:47 #, python-format msgid "" "The file %(filename)s exists in the static root directory and " @@ -13332,548 +14130,571 @@ msgstr "" "Dosya %(filename)s statik kök dizinde bulunur ve HTTP sunucusu " "tarafından okunabilir." -#: templates/media_failure.html:55 +#: netbox/templates/media_failure.html:55 #, python-format msgid "Click here to attempt loading NetBox again." msgstr "" "Tıklayın burada NetBox'ı tekrar yüklemeyi " "denemek için." -#: templates/tenancy/contact.html:18 tenancy/filtersets.py:147 -#: tenancy/forms/bulk_edit.py:137 tenancy/forms/filtersets.py:102 -#: tenancy/forms/forms.py:56 tenancy/forms/model_forms.py:106 -#: tenancy/forms/model_forms.py:130 tenancy/tables/contacts.py:98 +#: netbox/templates/tenancy/contact.html:18 netbox/tenancy/filtersets.py: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/model_forms.py:130 +#: netbox/tenancy/tables/contacts.py:98 msgid "Contact" msgstr "İletişim" -#: templates/tenancy/contact.html:29 tenancy/forms/bulk_edit.py:99 +#: netbox/templates/tenancy/contact.html:29 +#: netbox/tenancy/forms/bulk_edit.py:99 msgid "Title" msgstr "Başlık" -#: templates/tenancy/contact.html:33 tenancy/forms/bulk_edit.py:104 -#: tenancy/tables/contacts.py:64 +#: netbox/templates/tenancy/contact.html:33 +#: netbox/tenancy/forms/bulk_edit.py:104 netbox/tenancy/tables/contacts.py:64 msgid "Phone" msgstr "Telefon" -#: templates/tenancy/contactgroup.html:18 tenancy/forms/forms.py:66 -#: tenancy/forms/model_forms.py:75 +#: netbox/templates/tenancy/contactgroup.html:18 +#: netbox/tenancy/forms/forms.py:66 netbox/tenancy/forms/model_forms.py:75 msgid "Contact Group" msgstr "İletişim Grubu" -#: templates/tenancy/contactgroup.html:50 +#: netbox/templates/tenancy/contactgroup.html:50 msgid "Add Contact Group" msgstr "Kişi Grubu Ekle" -#: templates/tenancy/contactrole.html:15 tenancy/filtersets.py:152 -#: tenancy/forms/forms.py:61 tenancy/forms/model_forms.py:87 +#: netbox/templates/tenancy/contactrole.html:15 +#: netbox/tenancy/filtersets.py:152 netbox/tenancy/forms/forms.py:61 +#: netbox/tenancy/forms/model_forms.py:87 msgid "Contact Role" msgstr "İletişim Rolü" -#: templates/tenancy/object_contacts.html:9 +#: netbox/templates/tenancy/object_contacts.html:9 msgid "Add a contact" msgstr "Kişi ekle" -#: templates/tenancy/tenantgroup.html:17 +#: netbox/templates/tenancy/tenantgroup.html:17 msgid "Add Tenant" msgstr "Kiracı Ekle" -#: templates/tenancy/tenantgroup.html:26 tenancy/forms/model_forms.py:32 -#: tenancy/tables/columns.py:51 tenancy/tables/columns.py:61 +#: netbox/templates/tenancy/tenantgroup.html:26 +#: netbox/tenancy/forms/model_forms.py:32 netbox/tenancy/tables/columns.py:51 +#: netbox/tenancy/tables/columns.py:61 msgid "Tenant Group" msgstr "Kiracı Grubu" -#: templates/tenancy/tenantgroup.html:59 +#: netbox/templates/tenancy/tenantgroup.html:59 msgid "Add Tenant Group" msgstr "Kiracı Grubu Ekle" -#: templates/users/group.html:39 templates/users/user.html:63 +#: netbox/templates/users/group.html:39 netbox/templates/users/user.html:63 msgid "Assigned Permissions" msgstr "Atanan İzinler" -#: templates/users/objectpermission.html:6 -#: templates/users/objectpermission.html:14 users/forms/filtersets.py:66 +#: netbox/templates/users/objectpermission.html:6 +#: netbox/templates/users/objectpermission.html:14 +#: netbox/users/forms/filtersets.py:66 msgid "Permission" msgstr "İzin" -#: templates/users/objectpermission.html:34 +#: netbox/templates/users/objectpermission.html:34 msgid "View" msgstr "Görünüm" -#: templates/users/objectpermission.html:52 users/forms/model_forms.py:315 +#: netbox/templates/users/objectpermission.html:52 +#: netbox/users/forms/model_forms.py:315 msgid "Constraints" msgstr "Kısıtlamalar" -#: templates/users/objectpermission.html:72 +#: netbox/templates/users/objectpermission.html:72 msgid "Assigned Users" msgstr "Atanan Kullanıcılar" -#: templates/virtualization/cluster.html:52 +#: netbox/templates/virtualization/cluster.html:52 msgid "Allocated Resources" msgstr "Tahsis Edilen Kaynaklar" -#: templates/virtualization/cluster.html:55 -#: templates/virtualization/virtualmachine.html:125 +#: netbox/templates/virtualization/cluster.html:55 +#: netbox/templates/virtualization/virtualmachine.html:125 msgid "Virtual CPUs" msgstr "Sanal CPU'lar" -#: templates/virtualization/cluster.html:59 -#: templates/virtualization/virtualmachine.html:129 +#: netbox/templates/virtualization/cluster.html:59 +#: netbox/templates/virtualization/virtualmachine.html:129 msgid "Memory" msgstr "Bellek" -#: templates/virtualization/cluster.html:69 -#: templates/virtualization/virtualmachine.html:140 +#: netbox/templates/virtualization/cluster.html:69 +#: netbox/templates/virtualization/virtualmachine.html:140 msgid "Disk Space" msgstr "Disk Alanı" -#: templates/virtualization/cluster/base.html:18 +#: netbox/templates/virtualization/cluster/base.html:18 msgid "Add Virtual Machine" msgstr "Sanal Makine Ekle" -#: templates/virtualization/cluster/base.html:24 +#: netbox/templates/virtualization/cluster/base.html:24 msgid "Assign Device" msgstr "Aygıt Atama" -#: templates/virtualization/cluster/devices.html:10 +#: netbox/templates/virtualization/cluster/devices.html:10 msgid "Remove Selected" msgstr "Seçili Kaldır" -#: templates/virtualization/cluster_add_devices.html:9 +#: netbox/templates/virtualization/cluster_add_devices.html:9 #, python-format msgid "Add Device to Cluster %(cluster)s" msgstr "Kümeye Aygıt Ekle %(cluster)s" -#: templates/virtualization/cluster_add_devices.html:23 +#: netbox/templates/virtualization/cluster_add_devices.html:23 msgid "Device Selection" msgstr "Cihaz Seçimi" -#: templates/virtualization/cluster_add_devices.html:31 +#: netbox/templates/virtualization/cluster_add_devices.html:31 msgid "Add Devices" msgstr "Cihaz Ekle" -#: templates/virtualization/clustergroup.html:10 -#: templates/virtualization/clustertype.html:10 +#: netbox/templates/virtualization/clustergroup.html:10 +#: netbox/templates/virtualization/clustertype.html:10 msgid "Add Cluster" msgstr "Küme Ekle" -#: templates/virtualization/clustergroup.html:19 -#: virtualization/forms/model_forms.py:50 +#: netbox/templates/virtualization/clustergroup.html:19 +#: netbox/virtualization/forms/model_forms.py:50 msgid "Cluster Group" msgstr "Küme Grubu" -#: templates/virtualization/clustertype.html:19 -#: templates/virtualization/virtualmachine.html:110 -#: virtualization/forms/model_forms.py:36 +#: netbox/templates/virtualization/clustertype.html:19 +#: netbox/templates/virtualization/virtualmachine.html:110 +#: netbox/virtualization/forms/model_forms.py:36 msgid "Cluster Type" msgstr "Küme Türü" -#: templates/virtualization/virtualdisk.html:18 +#: netbox/templates/virtualization/virtualdisk.html:18 msgid "Virtual Disk" msgstr "Sanal Disk" -#: templates/virtualization/virtualmachine.html:122 -#: virtualization/forms/bulk_edit.py:190 -#: virtualization/forms/model_forms.py:224 +#: netbox/templates/virtualization/virtualmachine.html:122 +#: netbox/virtualization/forms/bulk_edit.py:190 +#: netbox/virtualization/forms/model_forms.py:224 msgid "Resources" msgstr "Kaynaklar" -#: templates/virtualization/virtualmachine.html:178 +#: netbox/templates/virtualization/virtualmachine.html:178 msgid "Add Virtual Disk" msgstr "Sanal Disk Ekle" -#: templates/vpn/ikepolicy.html:10 templates/vpn/ipsecprofile.html:33 -#: vpn/tables/crypto.py:166 +#: 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" msgstr "IKE İlkesi" -#: templates/vpn/ikepolicy.html:21 +#: netbox/templates/vpn/ikepolicy.html:21 msgid "IKE Version" msgstr "IKE Versiyonu" -#: templates/vpn/ikepolicy.html:29 +#: netbox/templates/vpn/ikepolicy.html:29 msgid "Pre-Shared Key" msgstr "Önceden Paylaşılan Anahtar" -#: templates/vpn/ikepolicy.html:33 -#: templates/wireless/inc/authentication_attrs.html:20 +#: netbox/templates/vpn/ikepolicy.html:33 +#: netbox/templates/wireless/inc/authentication_attrs.html:20 msgid "Show Secret" msgstr "Sırrı Göster" -#: templates/vpn/ikepolicy.html:57 templates/vpn/ipsecpolicy.html:45 -#: templates/vpn/ipsecprofile.html:52 templates/vpn/ipsecprofile.html:77 -#: vpn/forms/model_forms.py:316 vpn/forms/model_forms.py:352 -#: vpn/tables/crypto.py:68 vpn/tables/crypto.py:134 +#: netbox/templates/vpn/ikepolicy.html:57 +#: netbox/templates/vpn/ipsecpolicy.html:45 +#: netbox/templates/vpn/ipsecprofile.html:52 +#: netbox/templates/vpn/ipsecprofile.html:77 +#: netbox/vpn/forms/model_forms.py:316 netbox/vpn/forms/model_forms.py:352 +#: netbox/vpn/tables/crypto.py:68 netbox/vpn/tables/crypto.py:134 msgid "Proposals" msgstr "Teklifler" -#: templates/vpn/ikeproposal.html:10 +#: netbox/templates/vpn/ikeproposal.html:10 msgid "IKE Proposal" msgstr "IKE Teklifi" -#: templates/vpn/ikeproposal.html:21 vpn/forms/bulk_edit.py:97 -#: vpn/forms/bulk_import.py:145 vpn/forms/filtersets.py:101 +#: netbox/templates/vpn/ikeproposal.html:21 netbox/vpn/forms/bulk_edit.py:97 +#: netbox/vpn/forms/bulk_import.py:145 netbox/vpn/forms/filtersets.py:101 msgid "Authentication method" msgstr "Kimlik doğrulama yöntemi" -#: templates/vpn/ikeproposal.html:25 templates/vpn/ipsecproposal.html:21 -#: vpn/forms/bulk_edit.py:102 vpn/forms/bulk_edit.py:172 -#: vpn/forms/bulk_import.py:149 vpn/forms/bulk_import.py:195 -#: vpn/forms/filtersets.py:106 vpn/forms/filtersets.py:154 +#: netbox/templates/vpn/ikeproposal.html:25 +#: netbox/templates/vpn/ipsecproposal.html:21 +#: netbox/vpn/forms/bulk_edit.py:102 netbox/vpn/forms/bulk_edit.py:172 +#: netbox/vpn/forms/bulk_import.py:149 netbox/vpn/forms/bulk_import.py:195 +#: netbox/vpn/forms/filtersets.py:106 netbox/vpn/forms/filtersets.py:154 msgid "Encryption algorithm" msgstr "Şifreleme algoritması" -#: templates/vpn/ikeproposal.html:29 templates/vpn/ipsecproposal.html:25 -#: vpn/forms/bulk_edit.py:107 vpn/forms/bulk_edit.py:177 -#: vpn/forms/bulk_import.py:153 vpn/forms/bulk_import.py:200 -#: vpn/forms/filtersets.py:111 vpn/forms/filtersets.py:159 +#: netbox/templates/vpn/ikeproposal.html:29 +#: netbox/templates/vpn/ipsecproposal.html:25 +#: netbox/vpn/forms/bulk_edit.py:107 netbox/vpn/forms/bulk_edit.py:177 +#: netbox/vpn/forms/bulk_import.py:153 netbox/vpn/forms/bulk_import.py:200 +#: netbox/vpn/forms/filtersets.py:111 netbox/vpn/forms/filtersets.py:159 msgid "Authentication algorithm" msgstr "Kimlik doğrulama algoritması" -#: templates/vpn/ikeproposal.html:33 +#: netbox/templates/vpn/ikeproposal.html:33 msgid "DH group" msgstr "DH grubu" -#: templates/vpn/ikeproposal.html:37 templates/vpn/ipsecproposal.html:29 -#: vpn/forms/bulk_edit.py:182 vpn/models/crypto.py:146 +#: netbox/templates/vpn/ikeproposal.html:37 +#: netbox/templates/vpn/ipsecproposal.html:29 +#: netbox/vpn/forms/bulk_edit.py:182 netbox/vpn/models/crypto.py:146 msgid "SA lifetime (seconds)" msgstr "SA ömrü (saniye)" -#: templates/vpn/ipsecpolicy.html:10 templates/vpn/ipsecprofile.html:66 -#: vpn/tables/crypto.py:170 +#: netbox/templates/vpn/ipsecpolicy.html:10 +#: netbox/templates/vpn/ipsecprofile.html:66 netbox/vpn/tables/crypto.py:170 msgid "IPSec Policy" msgstr "IPSec İlkesi" -#: templates/vpn/ipsecpolicy.html:21 vpn/forms/bulk_edit.py:210 -#: vpn/models/crypto.py:193 +#: netbox/templates/vpn/ipsecpolicy.html:21 netbox/vpn/forms/bulk_edit.py:210 +#: netbox/vpn/models/crypto.py:193 msgid "PFS group" msgstr "PFS grubu" -#: templates/vpn/ipsecprofile.html:10 vpn/forms/model_forms.py:54 +#: netbox/templates/vpn/ipsecprofile.html:10 +#: netbox/vpn/forms/model_forms.py:54 msgid "IPSec Profile" msgstr "IPsec Profili" -#: templates/vpn/ipsecprofile.html:89 vpn/tables/crypto.py:137 +#: netbox/templates/vpn/ipsecprofile.html:89 netbox/vpn/tables/crypto.py:137 msgid "PFS Group" msgstr "PFS Grubu" -#: templates/vpn/ipsecproposal.html:10 +#: netbox/templates/vpn/ipsecproposal.html:10 msgid "IPSec Proposal" msgstr "IPsec Teklifi" -#: templates/vpn/ipsecproposal.html:33 vpn/forms/bulk_edit.py:186 -#: vpn/models/crypto.py:152 +#: netbox/templates/vpn/ipsecproposal.html:33 +#: netbox/vpn/forms/bulk_edit.py:186 netbox/vpn/models/crypto.py:152 msgid "SA lifetime (KB)" msgstr "SA ömrü (KB)" -#: templates/vpn/l2vpn.html:11 templates/vpn/l2vpntermination.html:9 +#: netbox/templates/vpn/l2vpn.html:11 +#: netbox/templates/vpn/l2vpntermination.html:9 msgid "L2VPN Attributes" msgstr "L2VPN Öznitellikler" -#: templates/vpn/l2vpn.html:60 templates/vpn/tunnel.html:76 +#: netbox/templates/vpn/l2vpn.html:60 netbox/templates/vpn/tunnel.html:76 msgid "Add a Termination" msgstr "Sonlandırma Ekle" -#: templates/vpn/tunnel.html:9 +#: netbox/templates/vpn/tunnel.html:9 msgid "Add Termination" msgstr "Sonlandırma Ekle" -#: templates/vpn/tunnel.html:37 vpn/forms/bulk_edit.py:49 -#: vpn/forms/bulk_import.py:48 vpn/forms/filtersets.py:57 +#: netbox/templates/vpn/tunnel.html:37 netbox/vpn/forms/bulk_edit.py:49 +#: netbox/vpn/forms/bulk_import.py:48 netbox/vpn/forms/filtersets.py:57 msgid "Encapsulation" msgstr "Kapsülleme" -#: templates/vpn/tunnel.html:41 vpn/forms/bulk_edit.py:55 -#: vpn/forms/bulk_import.py:53 vpn/forms/filtersets.py:64 -#: vpn/models/crypto.py:250 vpn/tables/tunnels.py:51 +#: netbox/templates/vpn/tunnel.html:41 netbox/vpn/forms/bulk_edit.py:55 +#: netbox/vpn/forms/bulk_import.py:53 netbox/vpn/forms/filtersets.py:64 +#: netbox/vpn/models/crypto.py:250 netbox/vpn/tables/tunnels.py:51 msgid "IPSec profile" msgstr "IPsec profili" -#: templates/vpn/tunnel.html:45 vpn/forms/bulk_edit.py:69 -#: vpn/forms/filtersets.py:68 +#: netbox/templates/vpn/tunnel.html:45 netbox/vpn/forms/bulk_edit.py:69 +#: netbox/vpn/forms/filtersets.py:68 msgid "Tunnel ID" msgstr "Tünel Kimliği" -#: templates/vpn/tunnelgroup.html:14 +#: netbox/templates/vpn/tunnelgroup.html:14 msgid "Add Tunnel" msgstr "Tünel Ekle" -#: templates/vpn/tunnelgroup.html:23 vpn/forms/model_forms.py:36 -#: vpn/forms/model_forms.py:49 +#: netbox/templates/vpn/tunnelgroup.html:23 netbox/vpn/forms/model_forms.py:36 +#: netbox/vpn/forms/model_forms.py:49 msgid "Tunnel Group" msgstr "Tünel Grubu" -#: templates/vpn/tunneltermination.html:10 +#: netbox/templates/vpn/tunneltermination.html:10 msgid "Tunnel Termination" msgstr "Tünel Sonlandırma" -#: templates/vpn/tunneltermination.html:35 vpn/forms/bulk_import.py:107 -#: vpn/forms/model_forms.py:102 vpn/forms/model_forms.py:138 -#: vpn/forms/model_forms.py:247 vpn/tables/tunnels.py:101 +#: netbox/templates/vpn/tunneltermination.html:35 +#: netbox/vpn/forms/bulk_import.py:107 netbox/vpn/forms/model_forms.py:102 +#: netbox/vpn/forms/model_forms.py:138 netbox/vpn/forms/model_forms.py:247 +#: netbox/vpn/tables/tunnels.py:101 msgid "Outside IP" msgstr "Dış IP" -#: templates/vpn/tunneltermination.html:51 +#: netbox/templates/vpn/tunneltermination.html:51 msgid "Peer Terminations" msgstr "Akran Sonlandırmaları" -#: templates/wireless/inc/authentication_attrs.html:12 +#: netbox/templates/wireless/inc/authentication_attrs.html:12 msgid "Cipher" msgstr "Şifre" -#: templates/wireless/inc/authentication_attrs.html:16 +#: netbox/templates/wireless/inc/authentication_attrs.html:16 msgid "PSK" msgstr "PSK" -#: templates/wireless/inc/wirelesslink_interface.html:35 -#: templates/wireless/inc/wirelesslink_interface.html:45 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:35 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:45 msgctxt "Abbreviation for megahertz" msgid "MHz" msgstr "MHz" -#: templates/wireless/wirelesslan.html:57 +#: netbox/templates/wireless/wirelesslan.html:57 msgid "Attached Interfaces" msgstr "Ekli Arayüzler" -#: templates/wireless/wirelesslangroup.html:17 +#: netbox/templates/wireless/wirelesslangroup.html:17 msgid "Add Wireless LAN" msgstr "Kablosuz LAN Ekle" -#: templates/wireless/wirelesslangroup.html:26 -#: wireless/forms/model_forms.py:28 +#: netbox/templates/wireless/wirelesslangroup.html:26 +#: netbox/wireless/forms/model_forms.py:28 msgid "Wireless LAN Group" msgstr "Kablosuz LAN Grubu" -#: templates/wireless/wirelesslangroup.html:59 +#: netbox/templates/wireless/wirelesslangroup.html:59 msgid "Add Wireless LAN Group" msgstr "Kablosuz LAN Grubu Ekle" -#: templates/wireless/wirelesslink.html:14 +#: netbox/templates/wireless/wirelesslink.html:14 msgid "Link Properties" msgstr "Bağlantı Özellikleri" -#: templates/wireless/wirelesslink.html:38 wireless/forms/bulk_edit.py:129 -#: wireless/forms/filtersets.py:102 wireless/forms/model_forms.py:165 +#: 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" -#: tenancy/filtersets.py:28 +#: netbox/tenancy/filtersets.py:28 msgid "Parent contact group (ID)" msgstr "Ebeveyn iletişim grubu (ID)" -#: tenancy/filtersets.py:34 +#: netbox/tenancy/filtersets.py:34 msgid "Parent contact group (slug)" msgstr "Ebeveyn iletişim grubu (kısa ad)" -#: tenancy/filtersets.py:40 tenancy/filtersets.py:67 tenancy/filtersets.py:110 +#: netbox/tenancy/filtersets.py:40 netbox/tenancy/filtersets.py:67 +#: netbox/tenancy/filtersets.py:110 msgid "Contact group (ID)" msgstr "İletişim grubu (ID)" -#: tenancy/filtersets.py:47 tenancy/filtersets.py:74 tenancy/filtersets.py:117 +#: netbox/tenancy/filtersets.py:47 netbox/tenancy/filtersets.py:74 +#: netbox/tenancy/filtersets.py:117 msgid "Contact group (slug)" msgstr "İletişim grubu (kısa ad)" -#: tenancy/filtersets.py:104 +#: netbox/tenancy/filtersets.py:104 msgid "Contact (ID)" msgstr "İletişim (ID)" -#: tenancy/filtersets.py:121 +#: netbox/tenancy/filtersets.py:121 msgid "Contact role (ID)" msgstr "Kişi rolü (ID)" -#: tenancy/filtersets.py:127 +#: netbox/tenancy/filtersets.py:127 msgid "Contact role (slug)" msgstr "İletişim rolü (kısa ad)" -#: tenancy/filtersets.py:158 +#: netbox/tenancy/filtersets.py:158 msgid "Contact group" msgstr "İletişim grubu" -#: tenancy/filtersets.py:169 +#: netbox/tenancy/filtersets.py:169 msgid "Parent tenant group (ID)" msgstr "Ana kiracı grubu (ID)" -#: tenancy/filtersets.py:175 +#: netbox/tenancy/filtersets.py:175 msgid "Parent tenant group (slug)" msgstr "Ana kiracı grubu (kısa ad)" -#: tenancy/filtersets.py:181 tenancy/filtersets.py:201 +#: netbox/tenancy/filtersets.py:181 netbox/tenancy/filtersets.py:201 msgid "Tenant group (ID)" msgstr "Kiracı grubu (ID)" -#: tenancy/filtersets.py:234 +#: netbox/tenancy/filtersets.py:234 msgid "Tenant Group (ID)" msgstr "Kiracı Grubu (ID)" -#: tenancy/filtersets.py:241 +#: netbox/tenancy/filtersets.py:241 msgid "Tenant Group (slug)" msgstr "Kiracı Grubu (kısa ad)" -#: tenancy/forms/bulk_edit.py:66 +#: netbox/tenancy/forms/bulk_edit.py:66 msgid "Desciption" msgstr "Tanımlama" -#: tenancy/forms/bulk_import.py:101 +#: netbox/tenancy/forms/bulk_import.py:101 msgid "Assigned contact" msgstr "Atanan kişi" -#: tenancy/models/contacts.py:32 +#: netbox/tenancy/models/contacts.py:32 msgid "contact group" msgstr "iletişim grubu" -#: tenancy/models/contacts.py:33 +#: netbox/tenancy/models/contacts.py:33 msgid "contact groups" msgstr "iletişim grupları" -#: tenancy/models/contacts.py:48 +#: netbox/tenancy/models/contacts.py:48 msgid "contact role" msgstr "iletişim rolü" -#: tenancy/models/contacts.py:49 +#: netbox/tenancy/models/contacts.py:49 msgid "contact roles" msgstr "iletişim rolleri" -#: tenancy/models/contacts.py:68 +#: netbox/tenancy/models/contacts.py:68 msgid "title" msgstr "başlık" -#: tenancy/models/contacts.py:73 +#: netbox/tenancy/models/contacts.py:73 msgid "phone" msgstr "telefon" -#: tenancy/models/contacts.py:78 +#: netbox/tenancy/models/contacts.py:78 msgid "email" msgstr "E-posta" -#: tenancy/models/contacts.py:87 +#: netbox/tenancy/models/contacts.py:87 msgid "link" msgstr "bağlantı" -#: tenancy/models/contacts.py:103 +#: netbox/tenancy/models/contacts.py:103 msgid "contact" msgstr "temas" -#: tenancy/models/contacts.py:104 +#: netbox/tenancy/models/contacts.py:104 msgid "contacts" msgstr "kişileri" -#: tenancy/models/contacts.py:153 +#: netbox/tenancy/models/contacts.py:153 msgid "contact assignment" msgstr "iletişim ataması" -#: tenancy/models/contacts.py:154 +#: netbox/tenancy/models/contacts.py:154 msgid "contact assignments" msgstr "iletişim atamaları" -#: tenancy/models/contacts.py:170 +#: netbox/tenancy/models/contacts.py:170 #, python-brace-format msgid "Contacts cannot be assigned to this object type ({type})." msgstr "Kişiler bu nesne türüne atanamaz ({type})." -#: tenancy/models/tenants.py:32 +#: netbox/tenancy/models/tenants.py:32 msgid "tenant group" msgstr "kiracı grubu" -#: tenancy/models/tenants.py:33 +#: netbox/tenancy/models/tenants.py:33 msgid "tenant groups" msgstr "kiracı grupları" -#: tenancy/models/tenants.py:70 +#: netbox/tenancy/models/tenants.py:70 msgid "Tenant name must be unique per group." msgstr "Kiracı adı, her grup için benzersiz olmalıdır." -#: tenancy/models/tenants.py:80 +#: netbox/tenancy/models/tenants.py:80 msgid "Tenant slug must be unique per group." msgstr "Kiracı kısa adı, her grup için benzersiz olmalıdır." -#: tenancy/models/tenants.py:88 +#: netbox/tenancy/models/tenants.py:88 msgid "tenant" msgstr "kiracı" -#: tenancy/models/tenants.py:89 +#: netbox/tenancy/models/tenants.py:89 msgid "tenants" msgstr "kiracılar" -#: tenancy/tables/contacts.py:112 +#: netbox/tenancy/tables/contacts.py:112 msgid "Contact Title" msgstr "İletişim Başlığı" -#: tenancy/tables/contacts.py:116 +#: netbox/tenancy/tables/contacts.py:116 msgid "Contact Phone" msgstr "İletişim Telefonu" -#: tenancy/tables/contacts.py:121 +#: netbox/tenancy/tables/contacts.py:121 msgid "Contact Email" msgstr "İletişim E-posta" -#: tenancy/tables/contacts.py:125 +#: netbox/tenancy/tables/contacts.py:125 msgid "Contact Address" msgstr "İletişim Adresi" -#: tenancy/tables/contacts.py:129 +#: netbox/tenancy/tables/contacts.py:129 msgid "Contact Link" msgstr "İletişim Bağlantısı" -#: tenancy/tables/contacts.py:133 +#: netbox/tenancy/tables/contacts.py:133 msgid "Contact Description" msgstr "İletişim Açıklaması" -#: users/filtersets.py:33 users/filtersets.py:73 +#: netbox/users/filtersets.py:33 netbox/users/filtersets.py:73 msgid "Permission (ID)" msgstr "İzin (ID)" -#: users/filtersets.py:38 users/filtersets.py:78 +#: netbox/users/filtersets.py:38 netbox/users/filtersets.py:78 msgid "Notification group (ID)" msgstr "Bildirim grubu (ID)" -#: users/forms/bulk_edit.py:26 +#: netbox/users/forms/bulk_edit.py:26 msgid "First name" msgstr "İlk isim" -#: users/forms/bulk_edit.py:31 +#: netbox/users/forms/bulk_edit.py:31 msgid "Last name" msgstr "Soyadı" -#: users/forms/bulk_edit.py:43 +#: netbox/users/forms/bulk_edit.py:43 msgid "Staff status" msgstr "Personel durumu" -#: users/forms/bulk_edit.py:48 +#: netbox/users/forms/bulk_edit.py:48 msgid "Superuser status" msgstr "Süper kullanıcı durumu" -#: users/forms/bulk_import.py:41 +#: netbox/users/forms/bulk_import.py:41 msgid "If no key is provided, one will be generated automatically." msgstr "Anahtar sağlanmazsa, bir anahtar otomatik olarak oluşturulur." -#: users/forms/filtersets.py:51 users/tables.py:42 +#: netbox/users/forms/filtersets.py:51 netbox/users/tables.py:42 msgid "Is Staff" msgstr "Personel mi" -#: users/forms/filtersets.py:58 users/tables.py:45 +#: netbox/users/forms/filtersets.py:58 netbox/users/tables.py:45 msgid "Is Superuser" msgstr "Süper kullanıcı mı" -#: users/forms/filtersets.py:91 users/tables.py:86 +#: netbox/users/forms/filtersets.py:91 netbox/users/tables.py:86 msgid "Can View" msgstr "Görebilir" -#: users/forms/filtersets.py:98 users/tables.py:89 +#: netbox/users/forms/filtersets.py:98 netbox/users/tables.py:89 msgid "Can Add" msgstr "Ekleyebilir" -#: users/forms/filtersets.py:105 users/tables.py:92 +#: netbox/users/forms/filtersets.py:105 netbox/users/tables.py:92 msgid "Can Change" msgstr "Değişebilir" -#: users/forms/filtersets.py:112 users/tables.py:95 +#: netbox/users/forms/filtersets.py:112 netbox/users/tables.py:95 msgid "Can Delete" msgstr "Silebilir" -#: users/forms/model_forms.py:62 +#: netbox/users/forms/model_forms.py:62 msgid "User Interface" msgstr "Kullanıcı Arayüzü" -#: users/forms/model_forms.py:114 +#: netbox/users/forms/model_forms.py:114 msgid "" "Keys must be at least 40 characters in length. Be sure to record " "your key prior to submitting this form, as it may no longer be " @@ -13883,7 +14704,7 @@ msgstr "" "kaydettiğinizden emin olun belirteç oluşturulduktan sonra artık " "erişilemeyebileceğinden, bu formu göndermeden önce." -#: users/forms/model_forms.py:126 +#: netbox/users/forms/model_forms.py:126 msgid "" "Allowed IPv4/IPv6 networks from where the token can be used. Leave blank for" " no restrictions. Example: " @@ -13893,32 +14714,32 @@ msgstr "" "olmadan boş bırakın. Örnek: 10.1.1.0/24.192.168.10.16/32,2001: db 8:1:" " :/64" -#: users/forms/model_forms.py:175 +#: netbox/users/forms/model_forms.py:175 msgid "Confirm password" msgstr "Şifreyi onayla" -#: users/forms/model_forms.py:178 +#: netbox/users/forms/model_forms.py:178 msgid "Enter the same password as before, for verification." msgstr "Doğrulama için öncekiyle aynı şifreyi girin." -#: users/forms/model_forms.py:227 +#: netbox/users/forms/model_forms.py:227 msgid "Passwords do not match! Please check your input and try again." msgstr "" "Şifreler eşleşmiyor! Lütfen girdilerinizi kontrol edin ve tekrar deneyin." -#: users/forms/model_forms.py:294 +#: netbox/users/forms/model_forms.py:294 msgid "Additional actions" msgstr "Ek eylemler" -#: users/forms/model_forms.py:297 +#: netbox/users/forms/model_forms.py:297 msgid "Actions granted in addition to those listed above" msgstr "Yukarıda listelenenlere ek olarak verilen eylemler" -#: users/forms/model_forms.py:313 +#: netbox/users/forms/model_forms.py:313 msgid "Objects" msgstr "Nesneler" -#: users/forms/model_forms.py:325 +#: netbox/users/forms/model_forms.py:325 msgid "" "JSON expression of a queryset filter that will return only permitted " "objects. Leave null to match all objects of this type. A list of multiple " @@ -13928,76 +14749,76 @@ msgstr "" "ifadesi. Bu türdeki tüm nesneleri eşleştirmek için null bırakın. Birden çok " "nesnenin listesi mantıksal bir OR işlemi ile sonuçlanır." -#: users/forms/model_forms.py:364 +#: netbox/users/forms/model_forms.py:364 msgid "At least one action must be selected." msgstr "En az bir eylem seçilmelidir." -#: users/forms/model_forms.py:382 +#: netbox/users/forms/model_forms.py:382 #, python-brace-format msgid "Invalid filter for {model}: {error}" msgstr "Geçersiz filtre {model}: {error}" -#: users/models/permissions.py:39 +#: netbox/users/models/permissions.py:39 msgid "The list of actions granted by this permission" msgstr "Bu izin tarafından verilen eylemlerin listesi" -#: users/models/permissions.py:44 +#: netbox/users/models/permissions.py:44 msgid "constraints" msgstr "kısıtlamaları" -#: users/models/permissions.py:45 +#: netbox/users/models/permissions.py:45 msgid "" "Queryset filter matching the applicable objects of the selected type(s)" msgstr "Seçili türlerin uygulanabilir nesneleriyle eşleşen Queryset filtresi" -#: users/models/permissions.py:52 +#: netbox/users/models/permissions.py:52 msgid "permission" msgstr "izin" -#: users/models/permissions.py:53 users/models/users.py:47 +#: netbox/users/models/permissions.py:53 netbox/users/models/users.py:47 msgid "permissions" msgstr "izinler" -#: users/models/preferences.py:29 users/models/preferences.py:30 +#: netbox/users/models/preferences.py:29 netbox/users/models/preferences.py:30 msgid "user preferences" msgstr "kullanıcı tercihleri" -#: users/models/preferences.py:97 +#: netbox/users/models/preferences.py:97 #, python-brace-format msgid "Key '{path}' is a leaf node; cannot assign new keys" msgstr "Anahtar '{path}'bir yaprak düğümüdür; yeni anahtarlar atanamıyor" -#: users/models/preferences.py:109 +#: netbox/users/models/preferences.py:109 #, python-brace-format msgid "Key '{path}' is a dictionary; cannot assign a non-dictionary value" msgstr "Anahtar '{path}'bir sözlüktür; sözlük dışı bir değer atayamaz" -#: users/models/tokens.py:36 +#: netbox/users/models/tokens.py:36 msgid "expires" msgstr "süresi dolmak" -#: users/models/tokens.py:41 +#: netbox/users/models/tokens.py:41 msgid "last used" msgstr "son kullanılan" -#: users/models/tokens.py:46 +#: netbox/users/models/tokens.py:46 msgid "key" msgstr "anahtar" -#: users/models/tokens.py:52 +#: netbox/users/models/tokens.py:52 msgid "write enabled" msgstr "yazma etkin" -#: users/models/tokens.py:54 +#: netbox/users/models/tokens.py:54 msgid "Permit create/update/delete operations using this key" msgstr "" "Bu anahtarı kullanarak oluşturma/güncelleme/silme işlemlerine izin verin" -#: users/models/tokens.py:65 +#: netbox/users/models/tokens.py:65 msgid "allowed IPs" msgstr "izin verilen IP'ler" -#: users/models/tokens.py:67 +#: netbox/users/models/tokens.py:67 msgid "" "Allowed IPv4/IPv6 networks from where the token can be used. Leave blank for" " no restrictions. Ex: \"10.1.1.0/24, 192.168.10.16/32, 2001:DB8:1::/64\"" @@ -14006,41 +14827,41 @@ msgstr "" "olmadan boş bırakın. Örn: “10.1.1.0/24, 192.168.10.16/32, 2001: DB 8:1: " ":/64\"" -#: users/models/tokens.py:75 +#: netbox/users/models/tokens.py:75 msgid "token" msgstr "jeton" -#: users/models/tokens.py:76 +#: netbox/users/models/tokens.py:76 msgid "tokens" msgstr "jetonlar" -#: users/models/users.py:57 vpn/models/crypto.py:42 +#: netbox/users/models/users.py:57 netbox/vpn/models/crypto.py:42 msgid "group" msgstr "grup" -#: users/models/users.py:92 +#: netbox/users/models/users.py:92 msgid "user" msgstr "kullanıcı" -#: users/models/users.py:104 +#: netbox/users/models/users.py:104 msgid "A user with this username already exists." msgstr "Bu kullanıcı adına sahip bir kullanıcı zaten var." -#: users/tables.py:98 +#: netbox/users/tables.py:98 msgid "Custom Actions" msgstr "Özel Eylemler" -#: utilities/api.py:153 +#: netbox/utilities/api.py:153 #, python-brace-format msgid "Related object not found using the provided attributes: {params}" msgstr "Sağlanan öznitelikler kullanılarak ilgili nesne bulunamadı: {params}" -#: utilities/api.py:156 +#: netbox/utilities/api.py:156 #, python-brace-format msgid "Multiple objects match the provided attributes: {params}" msgstr "Birden çok nesne sağlanan özniteliklerle eşleşir: {params}" -#: utilities/api.py:168 +#: netbox/utilities/api.py:168 #, python-brace-format msgid "" "Related objects must be referenced by numeric ID or by dictionary of " @@ -14049,41 +14870,41 @@ msgstr "" "İlgili nesnelere sayısal kimlik veya öznitelikler sözlüğü ile " "başvurulmalıdır. Tanınmayan bir değer alındı: {value}" -#: utilities/api.py:177 +#: netbox/utilities/api.py:177 #, python-brace-format msgid "Related object not found using the provided numeric ID: {id}" msgstr "Sağlanan sayısal kimlik kullanılarak ilgili nesne bulunamadı: {id}" -#: utilities/choices.py:19 +#: netbox/utilities/choices.py:19 #, python-brace-format msgid "{name} has a key defined but CHOICES is not a list" msgstr "{name} tanımlanmış bir anahtarı var ama SEÇENEKLER bir liste değil" -#: utilities/conversion.py:19 +#: netbox/utilities/conversion.py:19 msgid "Weight must be a positive number" msgstr "Ağırlık pozitif bir sayı olmalıdır" -#: utilities/conversion.py:21 +#: netbox/utilities/conversion.py:21 #, 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)" -#: utilities/conversion.py:32 utilities/conversion.py:62 +#: netbox/utilities/conversion.py:32 netbox/utilities/conversion.py:62 #, python-brace-format msgid "Unknown unit {unit}. Must be one of the following: {valid_units}" msgstr "" "Bilinmeyen birim {unit}. Aşağıdakilerden biri olmalıdır: {valid_units}" -#: utilities/conversion.py:45 +#: netbox/utilities/conversion.py:45 msgid "Length must be a positive number" msgstr "Uzunluk pozitif bir sayı olmalıdır" -#: utilities/conversion.py:47 +#: netbox/utilities/conversion.py:47 #, 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)" -#: utilities/error_handlers.py:31 +#: netbox/utilities/error_handlers.py:31 #, python-brace-format msgid "" "Unable to delete {objects}. {count} dependent objects were " @@ -14091,15 +14912,15 @@ msgid "" msgstr "" "Silinemiyor {objects}. {count} bağımlı nesneler bulundu: " -#: utilities/error_handlers.py:33 +#: netbox/utilities/error_handlers.py:33 msgid "More than 50" msgstr "50'den fazla" -#: utilities/fields.py:30 +#: netbox/utilities/fields.py:30 msgid "RGB color in hexadecimal. Example: " msgstr "Onaltılık olarak RGB rengi. Örnek: " -#: utilities/fields.py:159 +#: netbox/utilities/fields.py:159 #, python-format msgid "" "%s(%r) is invalid. to_model parameter to CounterCacheField must be a string " @@ -14108,7 +14929,7 @@ msgstr "" "%s(%r) geçersiz. counterCacheField için to_model parametresi 'app.model' " "biçiminde bir dize olmalıdır" -#: utilities/fields.py:169 +#: netbox/utilities/fields.py:169 #, python-format msgid "" "%s(%r) is invalid. to_field parameter to CounterCacheField must be a string " @@ -14117,37 +14938,37 @@ msgstr "" "%s(%r) geçersiz. counterCacheField için to_field parametresi 'field' " "biçiminde bir dize olmalıdır" -#: utilities/forms/bulk_import.py:23 +#: netbox/utilities/forms/bulk_import.py:23 msgid "Enter object data in CSV, JSON or YAML format." msgstr "Nesne verilerini CSV, JSON veya YAML biçiminde girin." -#: utilities/forms/bulk_import.py:36 +#: netbox/utilities/forms/bulk_import.py:36 msgid "CSV delimiter" msgstr "CSV sınırlayıcı" -#: utilities/forms/bulk_import.py:37 +#: netbox/utilities/forms/bulk_import.py:37 msgid "The character which delimits CSV fields. Applies only to CSV format." msgstr "" "CSV alanlarını sınırlayan karakter. Yalnızca CSV formatı için geçerlidir." -#: utilities/forms/bulk_import.py:51 +#: netbox/utilities/forms/bulk_import.py:51 msgid "Form data must be empty when uploading/selecting a file." msgstr "Bir dosya yüklerken/seçerken form verileri boş olmalıdır." -#: utilities/forms/bulk_import.py:80 +#: netbox/utilities/forms/bulk_import.py:80 #, python-brace-format msgid "Unknown data format: {format}" msgstr "Bilinmeyen veri biçimi: {format}" -#: utilities/forms/bulk_import.py:100 +#: netbox/utilities/forms/bulk_import.py:100 msgid "Unable to detect data format. Please specify." msgstr "Veri biçimi tespit edilemiyor. Lütfen belirtin." -#: utilities/forms/bulk_import.py:123 +#: netbox/utilities/forms/bulk_import.py:123 msgid "Invalid CSV delimiter" msgstr "Geçersiz CSV sınırlayıcı" -#: utilities/forms/bulk_import.py:167 +#: netbox/utilities/forms/bulk_import.py:167 msgid "" "Invalid YAML data. Data must be in the form of multiple documents, or a " "single document comprising a list of dictionaries." @@ -14155,7 +14976,7 @@ msgstr "" "Geçersiz YAML verileri. Veriler birden fazla belge veya bir sözlük listesi " "içeren tek bir belge şeklinde olmalıdır." -#: utilities/forms/fields/array.py:20 +#: netbox/utilities/forms/fields/array.py:20 #, python-brace-format msgid "" "Invalid list ({value}). Must be numeric and ranges must be in ascending " @@ -14164,7 +14985,7 @@ msgstr "" "Geçersiz liste ({value}). Sayısal olmalı ve aralıklar artan sırada " "olmalıdır." -#: utilities/forms/fields/array.py:40 +#: netbox/utilities/forms/fields/array.py:40 msgid "" "Specify one or more numeric ranges separated by commas. Example: " "1-5,20-30" @@ -14172,24 +14993,25 @@ msgstr "" "Virgülle ayrılmış bir veya daha fazla sayısal aralık belirtin. Örnek: " "1-5,20-30" -#: utilities/forms/fields/array.py:47 +#: netbox/utilities/forms/fields/array.py:47 #, python-brace-format msgid "" "Invalid ranges ({value}). Must be a range of integers in ascending order." msgstr "" "Geçersiz aralıklar ({value}). Artan sırada bir tamsayı aralığı olmalıdır." -#: utilities/forms/fields/csv.py:44 +#: netbox/utilities/forms/fields/csv.py:44 #, python-brace-format msgid "Invalid value for a multiple choice field: {value}" msgstr "Çoktan seçmeli alan için geçersiz değer: {value}" -#: utilities/forms/fields/csv.py:57 utilities/forms/fields/csv.py:78 +#: netbox/utilities/forms/fields/csv.py:57 +#: netbox/utilities/forms/fields/csv.py:78 #, python-format msgid "Object not found: %(value)s" msgstr "Nesne bulunamadı: %(value)s" -#: utilities/forms/fields/csv.py:65 +#: netbox/utilities/forms/fields/csv.py:65 #, python-brace-format msgid "" "\"{value}\" is not a unique value for this field; multiple objects were " @@ -14197,20 +15019,20 @@ msgid "" msgstr "" "“{value}“bu alan için benzersiz bir değer değil; birden fazla nesne bulundu" -#: utilities/forms/fields/csv.py:69 +#: netbox/utilities/forms/fields/csv.py:69 #, python-brace-format msgid "\"{field_name}\" is an invalid accessor field name." msgstr "“{field_name}“geçersiz bir erişici alan adıdır." -#: utilities/forms/fields/csv.py:101 +#: netbox/utilities/forms/fields/csv.py:101 msgid "Object type must be specified as \".\"" msgstr "Nesne türü şu şekilde belirtilmelidir”.“" -#: utilities/forms/fields/csv.py:105 +#: netbox/utilities/forms/fields/csv.py:105 msgid "Invalid object type" msgstr "Geçersiz nesne türü" -#: utilities/forms/fields/expandable.py:25 +#: netbox/utilities/forms/fields/expandable.py:25 msgid "" "Alphanumeric ranges are supported for bulk creation. Mixed cases and types " "within a single range are not supported (example: " @@ -14220,7 +15042,7 @@ msgstr "" "karışık durumlar ve türler desteklenmez (örnek: [ge, xe] -0/0/ " "[0-9])." -#: utilities/forms/fields/expandable.py:46 +#: netbox/utilities/forms/fields/expandable.py:46 msgid "" "Specify a numeric range to create multiple IPs.
    Example: " "192.0.2.[1,5,100-254]/24" @@ -14228,7 +15050,7 @@ msgstr "" "Birden çok IP oluşturmak için sayısal bir aralık belirtin.
    Örnek: " "192.0.2. [1.5,100-254] /24" -#: utilities/forms/fields/fields.py:31 +#: netbox/utilities/forms/fields/fields.py:31 #, python-brace-format msgid "" " İndirim sözdizimi desteklenir" -#: utilities/forms/fields/fields.py:48 +#: netbox/utilities/forms/fields/fields.py:48 msgid "URL-friendly unique shorthand" msgstr "URL dostu benzersiz stenografi" -#: utilities/forms/fields/fields.py:101 +#: netbox/utilities/forms/fields/fields.py:101 msgid "Enter context data in JSON format." msgstr "" "İçeriğe bağlam verilerini girin JSON " "biçim." -#: utilities/forms/fields/fields.py:124 +#: netbox/utilities/forms/fields/fields.py:124 msgid "MAC address must be in EUI-48 format" msgstr "MAC adresi EUI-48 formatında olmalıdır" -#: utilities/forms/forms.py:52 +#: netbox/utilities/forms/forms.py:52 msgid "Use regular expressions" msgstr "Düzenli ifadeler kullan" -#: utilities/forms/forms.py:75 +#: netbox/utilities/forms/forms.py:75 msgid "" "Numeric ID of an existing object to update (if not creating a new object)" msgstr "" "Güncellenecek mevcut bir nesnenin sayısal kimliği (yeni bir nesne " "oluşturmuyorsa)" -#: utilities/forms/forms.py:92 +#: netbox/utilities/forms/forms.py:92 #, python-brace-format msgid "Unrecognized header: {name}" msgstr "Tanınmayan başlık: {name}" -#: utilities/forms/forms.py:118 +#: netbox/utilities/forms/forms.py:118 msgid "Available Columns" msgstr "Kullanılabilir Sütunlar" -#: utilities/forms/forms.py:126 +#: netbox/utilities/forms/forms.py:126 msgid "Selected Columns" msgstr "Seçili Sütunlar" -#: utilities/forms/mixins.py:44 +#: netbox/utilities/forms/mixins.py:44 msgid "" "This object has been modified since the form was rendered. Please consult " "the object's change log for details." @@ -14283,13 +15105,13 @@ msgstr "" "Bu nesne, form oluşturulduğundan beri değiştirildi. Ayrıntılar için lütfen " "nesnenin değişiklik günlüğüne bakın." -#: utilities/forms/utils.py:42 utilities/forms/utils.py:68 -#: utilities/forms/utils.py:85 utilities/forms/utils.py:87 +#: netbox/utilities/forms/utils.py:42 netbox/utilities/forms/utils.py:68 +#: netbox/utilities/forms/utils.py:85 netbox/utilities/forms/utils.py:87 #, python-brace-format msgid "Range \"{value}\" is invalid." msgstr "Menzil”{value}“geçersiz." -#: utilities/forms/utils.py:74 +#: netbox/utilities/forms/utils.py:74 #, python-brace-format msgid "" "Invalid range: Ending value ({end}) must be greater than beginning value " @@ -14298,73 +15120,73 @@ msgstr "" "Geçersiz aralık: Bitiş değeri ({end}) başlangıç değerinden büyük olmalıdır " "({begin})." -#: utilities/forms/utils.py:232 +#: netbox/utilities/forms/utils.py:232 #, python-brace-format msgid "Duplicate or conflicting column header for \"{field}\"" msgstr "Yinelenen veya çakışan sütun başlığı”{field}“" -#: utilities/forms/utils.py:238 +#: netbox/utilities/forms/utils.py:238 #, python-brace-format msgid "Duplicate or conflicting column header for \"{header}\"" msgstr "Yinelenen veya çakışan sütun başlığı”{header}“" -#: utilities/forms/utils.py:247 +#: netbox/utilities/forms/utils.py:247 #, python-brace-format msgid "Row {row}: Expected {count_expected} columns but found {count_found}" msgstr "" "Satır {row}: Bekleniyor {count_expected} sütunlar ama bulundu {count_found}" -#: utilities/forms/utils.py:270 +#: netbox/utilities/forms/utils.py:270 #, python-brace-format msgid "Unexpected column header \"{field}\" found." msgstr "Beklenmeyen sütun başlığı”{field}“bulundu." -#: utilities/forms/utils.py:272 +#: netbox/utilities/forms/utils.py:272 #, python-brace-format msgid "Column \"{field}\" is not a related object; cannot use dots" msgstr "Sütun”{field}“ilgili bir nesne değildir; nokta kullanamaz" -#: utilities/forms/utils.py:276 +#: netbox/utilities/forms/utils.py:276 #, python-brace-format msgid "Invalid related object attribute for column \"{field}\": {to_field}" msgstr "Sütun için geçersiz ilgili nesne özniteliği”{field}“: {to_field}" -#: utilities/forms/utils.py:284 +#: netbox/utilities/forms/utils.py:284 #, python-brace-format msgid "Required column header \"{header}\" not found." msgstr "Gerekli sütun başlığı”{header}“Bulunamadı." -#: utilities/forms/widgets/apiselect.py:124 +#: netbox/utilities/forms/widgets/apiselect.py:124 #, python-brace-format msgid "Missing required value for dynamic query param: '{dynamic_params}'" msgstr "" "Dinamik sorgu parametresi için gerekli değer eksik: '{dynamic_params}'" -#: utilities/forms/widgets/apiselect.py:141 +#: netbox/utilities/forms/widgets/apiselect.py:141 #, python-brace-format msgid "Missing required value for static query param: '{static_params}'" msgstr "Statik sorgu parametresi için gerekli değer eksik: '{static_params}'" -#: utilities/password_validation.py:13 +#: netbox/utilities/password_validation.py:13 msgid "Password must have at least one numeral." msgstr "Şifre en az bir rakamdan oluşmalıdır." -#: utilities/password_validation.py:18 +#: netbox/utilities/password_validation.py:18 msgid "Password must have at least one uppercase letter." msgstr "Şifre en az bir büyük harf içermelidir." -#: utilities/password_validation.py:23 +#: netbox/utilities/password_validation.py:23 msgid "Password must have at least one lowercase letter." msgstr "Şifre en az bir küçük harf içermelidir." -#: utilities/password_validation.py:27 +#: netbox/utilities/password_validation.py:27 msgid "" "Your password must contain at least one numeral, one uppercase letter and " "one lowercase letter." msgstr "" "Şifreniz en az bir rakamı, bir büyük harf ve bir küçük harf içermelidir." -#: utilities/permissions.py:42 +#: netbox/utilities/permissions.py:42 #, python-brace-format msgid "" "Invalid permission name: {name}. Must be in the format " @@ -14372,127 +15194,127 @@ msgid "" msgstr "" "Geçersiz izin adı: {name}. Formatında olmalı ._" -#: utilities/permissions.py:60 +#: netbox/utilities/permissions.py:60 #, python-brace-format msgid "Unknown app_label/model_name for {name}" msgstr "Bilinmeyen app_label/model_name {name}" -#: utilities/request.py:76 +#: netbox/utilities/request.py:76 #, python-brace-format msgid "Invalid IP address set for {header}: {ip}" msgstr "Geçersiz IP adresi ayarlandı {header}: {ip}" -#: utilities/tables.py:47 +#: netbox/utilities/tables.py:47 #, python-brace-format msgid "A column named {name} is already defined for table {table_name}" msgstr "Adlı bir sütun {name} tablo için zaten tanımlanmıştır {table_name}" -#: utilities/templates/builtins/customfield_value.html:30 +#: netbox/utilities/templates/builtins/customfield_value.html:30 msgid "Not defined" msgstr "Tanımlanmamış" -#: utilities/templates/buttons/bookmark.html:9 +#: netbox/utilities/templates/buttons/bookmark.html:9 msgid "Unbookmark" msgstr "Yer İşaretini Kaldır" -#: utilities/templates/buttons/bookmark.html:13 +#: netbox/utilities/templates/buttons/bookmark.html:13 msgid "Bookmark" msgstr "Yer işareti" -#: utilities/templates/buttons/clone.html:4 +#: netbox/utilities/templates/buttons/clone.html:4 msgid "Clone" msgstr "Klon" -#: utilities/templates/buttons/export.html:7 +#: netbox/utilities/templates/buttons/export.html:7 msgid "Current View" msgstr "Geçerli Görünüm" -#: utilities/templates/buttons/export.html:8 +#: netbox/utilities/templates/buttons/export.html:8 msgid "All Data" msgstr "Tüm Veriler" -#: utilities/templates/buttons/export.html:28 +#: netbox/utilities/templates/buttons/export.html:28 msgid "Add export template" msgstr "Dışa aktarma şablonu ekle" -#: utilities/templates/buttons/import.html:4 +#: netbox/utilities/templates/buttons/import.html:4 msgid "Import" msgstr "İçe aktar" -#: utilities/templates/buttons/subscribe.html:10 +#: netbox/utilities/templates/buttons/subscribe.html:10 msgid "Unsubscribe" msgstr "Aboneliği iptal et" -#: utilities/templates/buttons/subscribe.html:14 +#: netbox/utilities/templates/buttons/subscribe.html:14 msgid "Subscribe" msgstr "Abone ol" -#: utilities/templates/form_helpers/render_field.html:41 +#: netbox/utilities/templates/form_helpers/render_field.html:41 msgid "Copy to clipboard" msgstr "Panoya kopyala" -#: utilities/templates/form_helpers/render_field.html:57 +#: netbox/utilities/templates/form_helpers/render_field.html:57 msgid "This field is required" msgstr "Bu alan zorunludur" -#: utilities/templates/form_helpers/render_field.html:70 +#: netbox/utilities/templates/form_helpers/render_field.html:70 msgid "Set Null" msgstr "Sıfır Ayarla" -#: utilities/templates/helpers/applied_filters.html:11 +#: netbox/utilities/templates/helpers/applied_filters.html:11 msgid "Clear all" msgstr "Hepsini temizle" -#: utilities/templates/helpers/table_config_form.html:8 +#: netbox/utilities/templates/helpers/table_config_form.html:8 msgid "Table Configuration" msgstr "Tablo Yapılandırması" -#: utilities/templates/helpers/table_config_form.html:31 +#: netbox/utilities/templates/helpers/table_config_form.html:31 msgid "Move Up" msgstr "Yukarı hareket et" -#: utilities/templates/helpers/table_config_form.html:34 +#: netbox/utilities/templates/helpers/table_config_form.html:34 msgid "Move Down" msgstr "Aşağı hareket et" -#: utilities/templates/navigation/menu.html:14 +#: netbox/utilities/templates/navigation/menu.html:14 msgid "Search…" msgstr "Arama..." -#: utilities/templates/navigation/menu.html:14 +#: netbox/utilities/templates/navigation/menu.html:14 msgid "Search NetBox" msgstr "Arama NetBox" -#: utilities/templates/widgets/apiselect.html:7 +#: netbox/utilities/templates/widgets/apiselect.html:7 msgid "Open selector" msgstr "Seçiciyi aç" -#: utilities/templates/widgets/markdown_input.html:6 +#: netbox/utilities/templates/widgets/markdown_input.html:6 msgid "Write" msgstr "Yazmak" -#: utilities/testing/views.py:632 +#: netbox/utilities/testing/views.py:632 msgid "The test must define csv_update_data." msgstr "Test csv_update_data tanımlamalıdır." -#: utilities/validators.py:65 +#: netbox/utilities/validators.py:65 #, python-brace-format msgid "{value} is not a valid regular expression." msgstr "{value} geçerli bir normal ifade değildir." -#: utilities/views.py:57 +#: netbox/utilities/views.py:57 #, python-brace-format msgid "{self.__class__.__name__} must implement get_required_permission()" msgstr "" "{self.__class__.__name__} get_required_permissions () uygulamasını " "uygulamalıdır" -#: utilities/views.py:93 +#: netbox/utilities/views.py:93 #, python-brace-format msgid "{class_name} must implement get_required_permission()" msgstr "{class_name} get_required_permissions () uygulamasını uygulamalıdır" -#: utilities/views.py:117 +#: netbox/utilities/views.py:117 #, python-brace-format msgid "" "{class_name} has no queryset defined. ObjectPermissionRequiredMixin may only" @@ -14501,61 +15323,63 @@ msgstr "" "{class_name} tanımlanmış bir sorgu seti yok. ObjectPermissionRequiredMixin " "yalnızca temel sorgu kümesini tanımlayan görünümlerde kullanılabilir" -#: virtualization/filtersets.py:79 +#: netbox/virtualization/filtersets.py:79 msgid "Parent group (ID)" msgstr "Ana grup (ID)" -#: virtualization/filtersets.py:85 +#: netbox/virtualization/filtersets.py:85 msgid "Parent group (slug)" msgstr "Ebeveyn grubu (kısa ad)" -#: virtualization/filtersets.py:89 virtualization/filtersets.py:141 +#: netbox/virtualization/filtersets.py:89 +#: netbox/virtualization/filtersets.py:141 msgid "Cluster type (ID)" msgstr "Küme türü (ID)" -#: virtualization/filtersets.py:151 virtualization/filtersets.py:271 +#: netbox/virtualization/filtersets.py:151 +#: netbox/virtualization/filtersets.py:271 msgid "Cluster (ID)" msgstr "Küme (ID)" -#: virtualization/forms/bulk_edit.py:166 -#: virtualization/models/virtualmachines.py:115 +#: netbox/virtualization/forms/bulk_edit.py:166 +#: netbox/virtualization/models/virtualmachines.py:115 msgid "vCPUs" msgstr "vCPU'lar" -#: virtualization/forms/bulk_edit.py:170 +#: netbox/virtualization/forms/bulk_edit.py:170 msgid "Memory (MB)" msgstr "Bellek (MB)" -#: virtualization/forms/bulk_edit.py:174 -msgid "Disk (GB)" -msgstr "Disk (GB)" +#: netbox/virtualization/forms/bulk_edit.py:174 +msgid "Disk (MB)" +msgstr "" -#: virtualization/forms/bulk_edit.py:334 -#: virtualization/forms/filtersets.py:251 -msgid "Size (GB)" -msgstr "Boyut (GB)" +#: netbox/virtualization/forms/bulk_edit.py:334 +#: netbox/virtualization/forms/filtersets.py:251 +msgid "Size (MB)" +msgstr "" -#: virtualization/forms/bulk_import.py:44 +#: netbox/virtualization/forms/bulk_import.py:44 msgid "Type of cluster" msgstr "Küme türü" -#: virtualization/forms/bulk_import.py:51 +#: netbox/virtualization/forms/bulk_import.py:51 msgid "Assigned cluster group" msgstr "Atanmış küme grubu" -#: virtualization/forms/bulk_import.py:96 +#: netbox/virtualization/forms/bulk_import.py:96 msgid "Assigned cluster" msgstr "Atanmış küme" -#: virtualization/forms/bulk_import.py:103 +#: netbox/virtualization/forms/bulk_import.py:103 msgid "Assigned device within cluster" msgstr "Küme içinde atanan aygıt" -#: virtualization/forms/filtersets.py:183 +#: netbox/virtualization/forms/filtersets.py:183 msgid "Serial number" msgstr "Seri numarası" -#: virtualization/forms/model_forms.py:153 +#: netbox/virtualization/forms/model_forms.py:153 #, python-brace-format msgid "" "{device} belongs to a different site ({device_site}) than the cluster " @@ -14564,50 +15388,50 @@ msgstr "" "{device} adlı aygıt, ({cluster_site}) kümesinden farklı bir siteye " "({device_site}) aittir" -#: virtualization/forms/model_forms.py:192 +#: netbox/virtualization/forms/model_forms.py:192 msgid "Optionally pin this VM to a specific host device within the cluster" msgstr "" "İsteğe bağlı olarak bu sanal makineyi küme içindeki belirli bir ana aygıta " "sabitleyin" -#: virtualization/forms/model_forms.py:221 +#: netbox/virtualization/forms/model_forms.py:221 msgid "Site/Cluster" msgstr "Site/Küme" -#: virtualization/forms/model_forms.py:244 +#: netbox/virtualization/forms/model_forms.py:244 msgid "Disk size is managed via the attachment of virtual disks." msgstr "Disk boyutu sanal disklerin eklenmesiyle yönetilir." -#: virtualization/forms/model_forms.py:372 -#: virtualization/tables/virtualmachines.py:111 +#: netbox/virtualization/forms/model_forms.py:372 +#: netbox/virtualization/tables/virtualmachines.py:111 msgid "Disk" msgstr "Disk" -#: virtualization/models/clusters.py:25 +#: netbox/virtualization/models/clusters.py:25 msgid "cluster type" msgstr "küme türü" -#: virtualization/models/clusters.py:26 +#: netbox/virtualization/models/clusters.py:26 msgid "cluster types" msgstr "küme türleri" -#: virtualization/models/clusters.py:45 +#: netbox/virtualization/models/clusters.py:45 msgid "cluster group" msgstr "küme grubu" -#: virtualization/models/clusters.py:46 +#: netbox/virtualization/models/clusters.py:46 msgid "cluster groups" msgstr "küme grupları" -#: virtualization/models/clusters.py:121 +#: netbox/virtualization/models/clusters.py:121 msgid "cluster" msgstr "küme" -#: virtualization/models/clusters.py:122 +#: netbox/virtualization/models/clusters.py:122 msgid "clusters" msgstr "kümeleri" -#: virtualization/models/clusters.py:141 +#: netbox/virtualization/models/clusters.py:141 #, python-brace-format msgid "" "{count} devices are assigned as hosts for this cluster but are not in site " @@ -14616,47 +15440,47 @@ msgstr "" "{count} aygıt bu küme için ana bilgisayar olarak atanır, ancak {site} isimli" " site için için atanmaz" -#: virtualization/models/virtualmachines.py:123 +#: netbox/virtualization/models/virtualmachines.py:123 msgid "memory (MB)" msgstr "bellek (MB)" -#: virtualization/models/virtualmachines.py:128 +#: netbox/virtualization/models/virtualmachines.py:128 msgid "disk (MB)" msgstr "disk (MB)" -#: virtualization/models/virtualmachines.py:166 +#: netbox/virtualization/models/virtualmachines.py:166 msgid "Virtual machine name must be unique per cluster." msgstr "Sanal makine adı küme başına benzersiz olmalıdır." -#: virtualization/models/virtualmachines.py:169 +#: netbox/virtualization/models/virtualmachines.py:169 msgid "virtual machine" msgstr "sanal makine" -#: virtualization/models/virtualmachines.py:170 +#: netbox/virtualization/models/virtualmachines.py:170 msgid "virtual machines" msgstr "sanal makineler" -#: virtualization/models/virtualmachines.py:184 +#: netbox/virtualization/models/virtualmachines.py:184 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." -#: virtualization/models/virtualmachines.py:191 +#: netbox/virtualization/models/virtualmachines.py:191 #, 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})." -#: virtualization/models/virtualmachines.py:198 +#: netbox/virtualization/models/virtualmachines.py:198 msgid "Must specify a cluster when assigning a host device." msgstr "Ana aygıt atarken bir küme belirtmeniz gerekir." -#: virtualization/models/virtualmachines.py:203 +#: netbox/virtualization/models/virtualmachines.py:203 #, 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})." -#: virtualization/models/virtualmachines.py:215 +#: netbox/virtualization/models/virtualmachines.py:215 #, python-brace-format msgid "" "The specified disk size ({size}) must match the aggregate size of assigned " @@ -14665,17 +15489,17 @@ msgstr "" "Belirtilen disk boyutu ({size}) atanmış sanal disklerin toplam boyutuyla " "eşleşmelidir ({total_size})." -#: virtualization/models/virtualmachines.py:229 +#: netbox/virtualization/models/virtualmachines.py:229 #, 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.)" -#: virtualization/models/virtualmachines.py:238 +#: netbox/virtualization/models/virtualmachines.py:238 #, python-brace-format msgid "The specified IP address ({ip}) is not assigned to this VM." msgstr "Belirtilen IP adresi ({ip}) bu VM'ye atanmadı." -#: virtualization/models/virtualmachines.py:396 +#: netbox/virtualization/models/virtualmachines.py:396 #, python-brace-format msgid "" "The selected parent interface ({parent}) belongs to a different virtual " @@ -14684,7 +15508,7 @@ msgstr "" "Seçilen üst arabirim ({parent}) farklı bir sanal makineye aittir " "({virtual_machine})." -#: virtualization/models/virtualmachines.py:411 +#: netbox/virtualization/models/virtualmachines.py:411 #, python-brace-format msgid "" "The selected bridge interface ({bridge}) belongs to a different virtual " @@ -14693,7 +15517,7 @@ msgstr "" "Seçilen köprü arayüzü ({bridge}) farklı bir sanal makineye aittir " "({virtual_machine})." -#: virtualization/models/virtualmachines.py:422 +#: netbox/virtualization/models/virtualmachines.py:422 #, python-brace-format msgid "" "The untagged VLAN ({untagged_vlan}) must belong to the same site as the " @@ -14702,392 +15526,415 @@ msgstr "" "Etiketlenmemiş VLAN ({untagged_vlan}) arabirimin ana sanal makinesiyle aynı " "siteye ait olmalı veya global olmalıdır." -#: virtualization/models/virtualmachines.py:434 +#: netbox/virtualization/models/virtualmachines.py:434 msgid "size (MB)" msgstr "boyut (MB)" -#: virtualization/models/virtualmachines.py:438 +#: netbox/virtualization/models/virtualmachines.py:438 msgid "virtual disk" msgstr "sanal disk" -#: virtualization/models/virtualmachines.py:439 +#: netbox/virtualization/models/virtualmachines.py:439 msgid "virtual disks" msgstr "sanal diskler" -#: virtualization/views.py:275 +#: netbox/virtualization/views.py:273 #, python-brace-format msgid "Added {count} devices to cluster {cluster}" msgstr "Eklendi {count} kümelenecek cihazlar {cluster}" -#: virtualization/views.py:310 +#: netbox/virtualization/views.py:308 #, python-brace-format msgid "Removed {count} devices from cluster {cluster}" msgstr "Kaldırıldı {count} kümeden aygıtlar {cluster}" -#: vpn/choices.py:31 +#: netbox/vpn/choices.py:35 msgid "IPsec - Transport" msgstr "IPsec - Taşıma" -#: vpn/choices.py:32 +#: netbox/vpn/choices.py:36 msgid "IPsec - Tunnel" msgstr "IPsec - Tünel" -#: vpn/choices.py:33 +#: netbox/vpn/choices.py:37 msgid "IP-in-IP" msgstr "IP içinde IP" -#: vpn/choices.py:34 +#: netbox/vpn/choices.py:38 msgid "GRE" msgstr "GREC" -#: vpn/choices.py:56 +#: netbox/vpn/choices.py:39 +msgid "WireGuard" +msgstr "" + +#: netbox/vpn/choices.py:40 +msgid "OpenVPN" +msgstr "" + +#: netbox/vpn/choices.py:41 +msgid "L2TP" +msgstr "" + +#: netbox/vpn/choices.py:42 +msgid "PPTP" +msgstr "" + +#: netbox/vpn/choices.py:64 msgid "Hub" msgstr "göbek" -#: vpn/choices.py:57 +#: netbox/vpn/choices.py:65 msgid "Spoke" msgstr "konuştu" -#: vpn/choices.py:80 +#: netbox/vpn/choices.py:88 msgid "Aggressive" msgstr "Agresif" -#: vpn/choices.py:81 +#: netbox/vpn/choices.py:89 msgid "Main" msgstr "Ana" -#: vpn/choices.py:92 +#: netbox/vpn/choices.py:100 msgid "Pre-shared keys" msgstr "Önceden paylaşılan anahtarlar" -#: vpn/choices.py:93 +#: netbox/vpn/choices.py:101 msgid "Certificates" msgstr "Sertifikalar" -#: vpn/choices.py:94 +#: netbox/vpn/choices.py:102 msgid "RSA signatures" msgstr "RSA imzaları" -#: vpn/choices.py:95 +#: netbox/vpn/choices.py:103 msgid "DSA signatures" msgstr "DSA imzaları" -#: vpn/choices.py:178 vpn/choices.py:179 vpn/choices.py:180 vpn/choices.py:181 -#: vpn/choices.py:182 vpn/choices.py:183 vpn/choices.py:184 vpn/choices.py:185 -#: vpn/choices.py:186 vpn/choices.py:187 vpn/choices.py:188 vpn/choices.py:189 -#: vpn/choices.py:190 vpn/choices.py:191 vpn/choices.py:192 vpn/choices.py:193 -#: vpn/choices.py:194 vpn/choices.py:195 vpn/choices.py:196 vpn/choices.py:197 -#: vpn/choices.py:198 vpn/choices.py:199 vpn/choices.py:200 vpn/choices.py:201 +#: netbox/vpn/choices.py:186 netbox/vpn/choices.py:187 +#: netbox/vpn/choices.py:188 netbox/vpn/choices.py:189 +#: netbox/vpn/choices.py:190 netbox/vpn/choices.py:191 +#: netbox/vpn/choices.py:192 netbox/vpn/choices.py:193 +#: netbox/vpn/choices.py:194 netbox/vpn/choices.py:195 +#: netbox/vpn/choices.py:196 netbox/vpn/choices.py:197 +#: netbox/vpn/choices.py:198 netbox/vpn/choices.py:199 +#: netbox/vpn/choices.py:200 netbox/vpn/choices.py:201 +#: netbox/vpn/choices.py:202 netbox/vpn/choices.py:203 +#: netbox/vpn/choices.py:204 netbox/vpn/choices.py:205 +#: netbox/vpn/choices.py:206 netbox/vpn/choices.py:207 +#: netbox/vpn/choices.py:208 netbox/vpn/choices.py:209 #, python-brace-format msgid "Group {n}" msgstr "Grup {n}" -#: vpn/choices.py:243 +#: netbox/vpn/choices.py:251 msgid "Ethernet Private LAN" msgstr "Ethernet Özel LAN" -#: vpn/choices.py:244 +#: netbox/vpn/choices.py:252 msgid "Ethernet Virtual Private LAN" msgstr "Ethernet Sanal Özel LAN" -#: vpn/choices.py:247 +#: netbox/vpn/choices.py:255 msgid "Ethernet Private Tree" msgstr "Ethernet Özel Ağacı" -#: vpn/choices.py:248 +#: netbox/vpn/choices.py:256 msgid "Ethernet Virtual Private Tree" msgstr "Ethernet Sanal Özel Ağacı" -#: vpn/filtersets.py:41 +#: netbox/vpn/filtersets.py:41 msgid "Tunnel group (ID)" msgstr "Tünel grubu (ID)" -#: vpn/filtersets.py:47 +#: netbox/vpn/filtersets.py:47 msgid "Tunnel group (slug)" msgstr "Tünel grubu (kısa ad)" -#: vpn/filtersets.py:54 +#: netbox/vpn/filtersets.py:54 msgid "IPSec profile (ID)" msgstr "IPsec profili (ID)" -#: vpn/filtersets.py:60 +#: netbox/vpn/filtersets.py:60 msgid "IPSec profile (name)" msgstr "IPsec profili (ad)" -#: vpn/filtersets.py:81 +#: netbox/vpn/filtersets.py:81 msgid "Tunnel (ID)" msgstr "Tünel (ID)" -#: vpn/filtersets.py:87 +#: netbox/vpn/filtersets.py:87 msgid "Tunnel (name)" msgstr "Tünel (isim)" -#: vpn/filtersets.py:118 +#: netbox/vpn/filtersets.py:118 msgid "Outside IP (ID)" msgstr "Dış IP (ID)" -#: vpn/filtersets.py:130 vpn/filtersets.py:263 +#: netbox/vpn/filtersets.py:130 netbox/vpn/filtersets.py:263 msgid "IKE policy (ID)" msgstr "IKE ilkesi (ID)" -#: vpn/filtersets.py:136 vpn/filtersets.py:269 +#: netbox/vpn/filtersets.py:136 netbox/vpn/filtersets.py:269 msgid "IKE policy (name)" msgstr "IKE ilkesi (isim)" -#: vpn/filtersets.py:200 vpn/filtersets.py:273 +#: netbox/vpn/filtersets.py:200 netbox/vpn/filtersets.py:273 msgid "IPSec policy (ID)" msgstr "IPsec ilkesi (ID)" -#: vpn/filtersets.py:206 vpn/filtersets.py:279 +#: netbox/vpn/filtersets.py:206 netbox/vpn/filtersets.py:279 msgid "IPSec policy (name)" msgstr "IPsec ilkesi (ad)" -#: vpn/filtersets.py:348 +#: netbox/vpn/filtersets.py:348 msgid "L2VPN (slug)" msgstr "L2VPN (kısa ad)" -#: vpn/filtersets.py:412 +#: netbox/vpn/filtersets.py:412 msgid "VM Interface (ID)" msgstr "VM Arabirimi (ID)" -#: vpn/filtersets.py:418 +#: netbox/vpn/filtersets.py:418 msgid "VLAN (name)" msgstr "VLAN (isim)" -#: vpn/forms/bulk_edit.py:45 vpn/forms/bulk_import.py:42 -#: vpn/forms/filtersets.py:54 +#: netbox/vpn/forms/bulk_edit.py:45 netbox/vpn/forms/bulk_import.py:42 +#: netbox/vpn/forms/filtersets.py:54 msgid "Tunnel group" msgstr "Tünel grubu" -#: vpn/forms/bulk_edit.py:117 vpn/models/crypto.py:47 +#: netbox/vpn/forms/bulk_edit.py:117 netbox/vpn/models/crypto.py:47 msgid "SA lifetime" msgstr "SA ömrü" -#: vpn/forms/bulk_edit.py:151 wireless/forms/bulk_edit.py:79 -#: wireless/forms/bulk_edit.py:126 wireless/forms/filtersets.py:64 -#: wireless/forms/filtersets.py:98 +#: netbox/vpn/forms/bulk_edit.py:151 netbox/wireless/forms/bulk_edit.py:79 +#: netbox/wireless/forms/bulk_edit.py:126 +#: netbox/wireless/forms/filtersets.py:64 +#: netbox/wireless/forms/filtersets.py:98 msgid "Pre-shared key" msgstr "Önceden paylaşılan anahtar" -#: vpn/forms/bulk_edit.py:237 vpn/forms/bulk_import.py:239 -#: vpn/forms/filtersets.py:199 vpn/forms/model_forms.py:370 -#: vpn/models/crypto.py:104 +#: netbox/vpn/forms/bulk_edit.py:237 netbox/vpn/forms/bulk_import.py:239 +#: netbox/vpn/forms/filtersets.py:199 netbox/vpn/forms/model_forms.py:370 +#: netbox/vpn/models/crypto.py:104 msgid "IKE policy" msgstr "IKE ilkesi" -#: vpn/forms/bulk_edit.py:242 vpn/forms/bulk_import.py:244 -#: vpn/forms/filtersets.py:204 vpn/forms/model_forms.py:374 -#: vpn/models/crypto.py:209 +#: netbox/vpn/forms/bulk_edit.py:242 netbox/vpn/forms/bulk_import.py:244 +#: netbox/vpn/forms/filtersets.py:204 netbox/vpn/forms/model_forms.py:374 +#: netbox/vpn/models/crypto.py:209 msgid "IPSec policy" msgstr "IPsec ilkesi" -#: vpn/forms/bulk_import.py:50 +#: netbox/vpn/forms/bulk_import.py:50 msgid "Tunnel encapsulation" msgstr "Tünel kapsülleme" -#: vpn/forms/bulk_import.py:83 +#: netbox/vpn/forms/bulk_import.py:83 msgid "Operational role" msgstr "Operasyonel rol" -#: vpn/forms/bulk_import.py:90 +#: netbox/vpn/forms/bulk_import.py:90 msgid "Parent device of assigned interface" msgstr "Atanan arayüzün ana aygıtı" -#: vpn/forms/bulk_import.py:97 +#: netbox/vpn/forms/bulk_import.py:97 msgid "Parent VM of assigned interface" msgstr "Atanan arabirimin üst VM'si" -#: vpn/forms/bulk_import.py:104 +#: netbox/vpn/forms/bulk_import.py:104 msgid "Device or virtual machine interface" msgstr "Aygıt veya sanal makine arayüzü" -#: vpn/forms/bulk_import.py:183 +#: netbox/vpn/forms/bulk_import.py:183 msgid "IKE proposal(s)" msgstr "IKE teklifi (lar)" -#: vpn/forms/bulk_import.py:215 vpn/models/crypto.py:197 +#: netbox/vpn/forms/bulk_import.py:215 netbox/vpn/models/crypto.py:197 msgid "Diffie-Hellman group for Perfect Forward Secrecy" msgstr "Perfect Forward Secrecy için Diffie-Hellman grubu" -#: vpn/forms/bulk_import.py:222 +#: netbox/vpn/forms/bulk_import.py:222 msgid "IPSec proposal(s)" msgstr "IPsec teklifleri" -#: vpn/forms/bulk_import.py:236 +#: netbox/vpn/forms/bulk_import.py:236 msgid "IPSec protocol" msgstr "IPsec protokolü" -#: vpn/forms/bulk_import.py:266 +#: netbox/vpn/forms/bulk_import.py:266 msgid "L2VPN type" msgstr "L2VPN türü" -#: vpn/forms/bulk_import.py:287 +#: netbox/vpn/forms/bulk_import.py:287 msgid "Parent device (for interface)" msgstr "Ana cihaz (arayüz için)" -#: vpn/forms/bulk_import.py:294 +#: netbox/vpn/forms/bulk_import.py:294 msgid "Parent virtual machine (for interface)" msgstr "Ana sanal makine (arayüz için)" -#: vpn/forms/bulk_import.py:301 +#: netbox/vpn/forms/bulk_import.py:301 msgid "Assigned interface (device or VM)" msgstr "Atanmış arayüz (cihaz veya VM)" -#: vpn/forms/bulk_import.py:334 +#: netbox/vpn/forms/bulk_import.py:334 msgid "Cannot import device and VM interface terminations simultaneously." msgstr "Aygıt ve VM arabirimi sonlandırmaları aynı anda içe aktarılamıyor." -#: vpn/forms/bulk_import.py:336 +#: netbox/vpn/forms/bulk_import.py:336 msgid "Each termination must specify either an interface or a VLAN." msgstr "Her sonlandırma bir arabirim veya bir VLAN belirtmelidir." -#: vpn/forms/bulk_import.py:338 +#: netbox/vpn/forms/bulk_import.py:338 msgid "Cannot assign both an interface and a VLAN." msgstr "Hem arabirim hem de VLAN atanamıyor." -#: vpn/forms/filtersets.py:130 +#: netbox/vpn/forms/filtersets.py:130 msgid "IKE version" msgstr "IKE versiyonu" -#: vpn/forms/filtersets.py:142 vpn/forms/filtersets.py:175 -#: vpn/forms/model_forms.py:298 vpn/forms/model_forms.py:334 +#: netbox/vpn/forms/filtersets.py:142 netbox/vpn/forms/filtersets.py:175 +#: netbox/vpn/forms/model_forms.py:298 netbox/vpn/forms/model_forms.py:334 msgid "Proposal" msgstr "Teklif" -#: vpn/forms/filtersets.py:251 +#: netbox/vpn/forms/filtersets.py:251 msgid "Assigned Object Type" msgstr "Atanan Nesne Türü" -#: vpn/forms/model_forms.py:95 vpn/forms/model_forms.py:130 -#: vpn/forms/model_forms.py:240 vpn/tables/tunnels.py:91 +#: netbox/vpn/forms/model_forms.py:95 netbox/vpn/forms/model_forms.py:130 +#: netbox/vpn/forms/model_forms.py:240 netbox/vpn/tables/tunnels.py:91 msgid "Tunnel interface" msgstr "Tünel arayüzü" -#: vpn/forms/model_forms.py:150 +#: netbox/vpn/forms/model_forms.py:150 msgid "First Termination" msgstr "İlk Fesih" -#: vpn/forms/model_forms.py:153 +#: netbox/vpn/forms/model_forms.py:153 msgid "Second Termination" msgstr "İkinci Sonlandırma" -#: vpn/forms/model_forms.py:197 +#: netbox/vpn/forms/model_forms.py:197 msgid "This parameter is required when defining a termination." msgstr "Bir sonlandırma tanımlarken bu parametre gereklidir." -#: vpn/forms/model_forms.py:320 vpn/forms/model_forms.py:356 +#: netbox/vpn/forms/model_forms.py:320 netbox/vpn/forms/model_forms.py:356 msgid "Policy" msgstr "İlke" -#: vpn/forms/model_forms.py:487 +#: netbox/vpn/forms/model_forms.py:487 msgid "A termination must specify an interface or VLAN." msgstr "Bir sonlandırma bir arayüz veya VLAN belirtmelidir." -#: vpn/forms/model_forms.py:489 +#: netbox/vpn/forms/model_forms.py:489 msgid "" "A termination can only have one terminating object (an interface or VLAN)." msgstr "" "Bir sonlandırma yalnızca bir sonlandırma nesnesine (bir arayüz veya VLAN) " "sahip olabilir." -#: vpn/models/crypto.py:33 +#: netbox/vpn/models/crypto.py:33 msgid "encryption algorithm" msgstr "şifreleme algoritması" -#: vpn/models/crypto.py:37 +#: netbox/vpn/models/crypto.py:37 msgid "authentication algorithm" msgstr "kimlik doğrulama algoritması" -#: vpn/models/crypto.py:44 +#: netbox/vpn/models/crypto.py:44 msgid "Diffie-Hellman group ID" msgstr "Diffie-Hellman grup kimliği" -#: vpn/models/crypto.py:50 +#: netbox/vpn/models/crypto.py:50 msgid "Security association lifetime (in seconds)" msgstr "Güvenlik ilişkilendirmesi ömrü (saniye cinsinden)" -#: vpn/models/crypto.py:59 +#: netbox/vpn/models/crypto.py:59 msgid "IKE proposal" msgstr "IKE teklifi" -#: vpn/models/crypto.py:60 +#: netbox/vpn/models/crypto.py:60 msgid "IKE proposals" msgstr "IKE teklifleri" -#: vpn/models/crypto.py:76 +#: netbox/vpn/models/crypto.py:76 msgid "version" msgstr "versiyon" -#: vpn/models/crypto.py:88 vpn/models/crypto.py:190 +#: netbox/vpn/models/crypto.py:88 netbox/vpn/models/crypto.py:190 msgid "proposals" msgstr "öneriler" -#: vpn/models/crypto.py:91 wireless/models.py:39 +#: netbox/vpn/models/crypto.py:91 netbox/wireless/models.py:39 msgid "pre-shared key" msgstr "önceden paylaşılan anahtar" -#: vpn/models/crypto.py:105 +#: netbox/vpn/models/crypto.py:105 msgid "IKE policies" msgstr "IKE politikaları" -#: vpn/models/crypto.py:118 +#: netbox/vpn/models/crypto.py:118 msgid "Mode is required for selected IKE version" msgstr "Seçilen IKE sürümü için mod gereklidir" -#: vpn/models/crypto.py:122 +#: netbox/vpn/models/crypto.py:122 msgid "Mode cannot be used for selected IKE version" msgstr "Seçilen IKE sürümü için mod kullanılamaz" -#: vpn/models/crypto.py:136 +#: netbox/vpn/models/crypto.py:136 msgid "encryption" msgstr "şifreleme" -#: vpn/models/crypto.py:141 +#: netbox/vpn/models/crypto.py:141 msgid "authentication" msgstr "onaylama" -#: vpn/models/crypto.py:149 +#: netbox/vpn/models/crypto.py:149 msgid "Security association lifetime (seconds)" msgstr "Güvenlik ilişkilendirmesi ömrü (saniye)" -#: vpn/models/crypto.py:155 +#: netbox/vpn/models/crypto.py:155 msgid "Security association lifetime (in kilobytes)" msgstr "Güvenlik ilişkilendirmesi ömrü (kilobayt cinsinden)" -#: vpn/models/crypto.py:164 +#: netbox/vpn/models/crypto.py:164 msgid "IPSec proposal" msgstr "IPsec teklifi" -#: vpn/models/crypto.py:165 +#: netbox/vpn/models/crypto.py:165 msgid "IPSec proposals" msgstr "IPsec önerileri" -#: vpn/models/crypto.py:178 +#: netbox/vpn/models/crypto.py:178 msgid "Encryption and/or authentication algorithm must be defined" msgstr "Şifreleme ve/veya kimlik doğrulama algoritması tanımlanmalıdır" -#: vpn/models/crypto.py:210 +#: netbox/vpn/models/crypto.py:210 msgid "IPSec policies" msgstr "IPsec ilkeleri" -#: vpn/models/crypto.py:251 +#: netbox/vpn/models/crypto.py:251 msgid "IPSec profiles" msgstr "IPsec profilleri" -#: vpn/models/l2vpn.py:116 +#: netbox/vpn/models/l2vpn.py:116 msgid "L2VPN termination" msgstr "L2VPN sonlandırma" -#: vpn/models/l2vpn.py:117 +#: netbox/vpn/models/l2vpn.py:117 msgid "L2VPN terminations" msgstr "L2VPN sonlandırmaları" -#: vpn/models/l2vpn.py:135 +#: netbox/vpn/models/l2vpn.py:135 #, python-brace-format msgid "L2VPN Termination already assigned ({assigned_object})" msgstr "L2VPN Sonlandırma zaten atanmış ({assigned_object})" -#: vpn/models/l2vpn.py:147 +#: netbox/vpn/models/l2vpn.py:147 #, python-brace-format msgid "" "{l2vpn_type} L2VPNs cannot have more than two terminations; found " @@ -15096,186 +15943,194 @@ msgstr "" "{l2vpn_type} L2VPN'ler ikiden fazla sonlandırmaya sahip olamaz; bulundu " "{terminations_count} zaten tanımlanmış." -#: vpn/models/tunnels.py:26 +#: netbox/vpn/models/tunnels.py:26 msgid "tunnel group" msgstr "tünel grubu" -#: vpn/models/tunnels.py:27 +#: netbox/vpn/models/tunnels.py:27 msgid "tunnel groups" msgstr "tünel grupları" -#: vpn/models/tunnels.py:53 +#: netbox/vpn/models/tunnels.py:53 msgid "encapsulation" msgstr "kapsülleme" -#: vpn/models/tunnels.py:72 +#: netbox/vpn/models/tunnels.py:72 msgid "tunnel ID" msgstr "tünel kimliği" -#: vpn/models/tunnels.py:94 +#: netbox/vpn/models/tunnels.py:94 msgid "tunnel" msgstr "tünel" -#: vpn/models/tunnels.py:95 +#: netbox/vpn/models/tunnels.py:95 msgid "tunnels" msgstr "tüneller" -#: vpn/models/tunnels.py:153 +#: netbox/vpn/models/tunnels.py:153 msgid "An object may be terminated to only one tunnel at a time." msgstr "Bir nesne aynı anda yalnızca bir tünele sonlandırılabilir." -#: vpn/models/tunnels.py:156 +#: netbox/vpn/models/tunnels.py:156 msgid "tunnel termination" msgstr "tünel sonlandırma" -#: vpn/models/tunnels.py:157 +#: netbox/vpn/models/tunnels.py:157 msgid "tunnel terminations" msgstr "tünel sonlandırmaları" -#: vpn/models/tunnels.py:174 +#: netbox/vpn/models/tunnels.py:174 #, python-brace-format msgid "{name} is already attached to a tunnel ({tunnel})." msgstr "{name} zaten bir tünele bağlı ({tunnel})." -#: vpn/tables/crypto.py:22 +#: netbox/vpn/tables/crypto.py:22 msgid "Authentication Method" msgstr "Kimlik Doğrulama Yöntemi" -#: vpn/tables/crypto.py:25 vpn/tables/crypto.py:97 +#: netbox/vpn/tables/crypto.py:25 netbox/vpn/tables/crypto.py:97 msgid "Encryption Algorithm" msgstr "Şifreleme Algoritması" -#: vpn/tables/crypto.py:28 vpn/tables/crypto.py:100 +#: netbox/vpn/tables/crypto.py:28 netbox/vpn/tables/crypto.py:100 msgid "Authentication Algorithm" msgstr "Kimlik Doğrulama Algoritması" -#: vpn/tables/crypto.py:34 +#: netbox/vpn/tables/crypto.py:34 msgid "SA Lifetime" msgstr "SA Ömrü" -#: vpn/tables/crypto.py:71 +#: netbox/vpn/tables/crypto.py:71 msgid "Pre-shared Key" msgstr "Önceden Paylaşılan Anahtar" -#: vpn/tables/crypto.py:103 +#: netbox/vpn/tables/crypto.py:103 msgid "SA Lifetime (Seconds)" msgstr "SA Ömrü (Saniye)" -#: vpn/tables/crypto.py:106 +#: netbox/vpn/tables/crypto.py:106 msgid "SA Lifetime (KB)" msgstr "SA Ömrü (KB)" -#: vpn/tables/l2vpn.py:69 +#: netbox/vpn/tables/l2vpn.py:69 msgid "Object Parent" msgstr "Nesne Ebeveyni" -#: vpn/tables/l2vpn.py:74 +#: netbox/vpn/tables/l2vpn.py:74 msgid "Object Site" msgstr "Nesne Sitesi" -#: wireless/choices.py:11 +#: netbox/wireless/choices.py:11 msgid "Access point" msgstr "Erişim noktası" -#: wireless/choices.py:12 +#: netbox/wireless/choices.py:12 msgid "Station" msgstr "İstasyon" -#: wireless/choices.py:467 +#: netbox/wireless/choices.py:467 msgid "Open" msgstr "Açık" -#: wireless/choices.py:469 +#: netbox/wireless/choices.py:469 msgid "WPA Personal (PSK)" msgstr "WPA Kişisel (PSK)" -#: wireless/choices.py:470 +#: netbox/wireless/choices.py:470 msgid "WPA Enterprise" msgstr "WPA Kurumsal" -#: wireless/forms/bulk_edit.py:73 wireless/forms/bulk_edit.py:120 -#: wireless/forms/bulk_import.py:68 wireless/forms/bulk_import.py:71 -#: wireless/forms/bulk_import.py:110 wireless/forms/bulk_import.py:113 -#: wireless/forms/filtersets.py:59 wireless/forms/filtersets.py:93 +#: netbox/wireless/forms/bulk_edit.py:73 +#: netbox/wireless/forms/bulk_edit.py:120 +#: netbox/wireless/forms/bulk_import.py:68 +#: netbox/wireless/forms/bulk_import.py:71 +#: netbox/wireless/forms/bulk_import.py:110 +#: netbox/wireless/forms/bulk_import.py:113 +#: netbox/wireless/forms/filtersets.py:59 +#: netbox/wireless/forms/filtersets.py:93 msgid "Authentication cipher" msgstr "Kimlik doğrulama şifresi" -#: wireless/forms/bulk_edit.py:134 wireless/forms/bulk_import.py:116 -#: wireless/forms/bulk_import.py:119 wireless/forms/filtersets.py:106 +#: 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" -#: wireless/forms/bulk_import.py:52 +#: netbox/wireless/forms/bulk_import.py:52 msgid "Bridged VLAN" msgstr "Köprülü VLAN" -#: wireless/forms/bulk_import.py:89 wireless/tables/wirelesslink.py:28 +#: netbox/wireless/forms/bulk_import.py:89 +#: netbox/wireless/tables/wirelesslink.py:28 msgid "Interface A" msgstr "Arayüz A" -#: wireless/forms/bulk_import.py:93 wireless/tables/wirelesslink.py:37 +#: netbox/wireless/forms/bulk_import.py:93 +#: netbox/wireless/tables/wirelesslink.py:37 msgid "Interface B" msgstr "Arayüz B" -#: wireless/forms/model_forms.py:161 +#: netbox/wireless/forms/model_forms.py:161 msgid "Side B" msgstr "B Tarafı" -#: wireless/models.py:31 +#: netbox/wireless/models.py:31 msgid "authentication cipher" msgstr "kimlik doğrulama şifresi" -#: wireless/models.py:69 +#: netbox/wireless/models.py:69 msgid "wireless LAN group" msgstr "kablosuz LAN grubu" -#: wireless/models.py:70 +#: netbox/wireless/models.py:70 msgid "wireless LAN groups" msgstr "kablosuz LAN grupları" -#: wireless/models.py:116 +#: netbox/wireless/models.py:116 msgid "wireless LAN" msgstr "kablosuz LAN" -#: wireless/models.py:144 +#: netbox/wireless/models.py:144 msgid "interface A" msgstr "arayüz A" -#: wireless/models.py:151 +#: netbox/wireless/models.py:151 msgid "interface B" msgstr "arayüz B" -#: wireless/models.py:165 +#: netbox/wireless/models.py:165 msgid "distance" msgstr "uzaklık" -#: wireless/models.py:172 +#: netbox/wireless/models.py:172 msgid "distance unit" msgstr "mesafe birimi" -#: wireless/models.py:219 +#: netbox/wireless/models.py:219 msgid "wireless link" msgstr "kablosuz bağlantı" -#: wireless/models.py:220 +#: netbox/wireless/models.py:220 msgid "wireless links" msgstr "kablosuz bağlantılar" -#: wireless/models.py:236 +#: netbox/wireless/models.py:236 msgid "Must specify a unit when setting a wireless distance" msgstr "Kablosuz mesafeyi ayarlarken bir birim belirtmelisiniz" -#: wireless/models.py:242 wireless/models.py:248 +#: netbox/wireless/models.py:242 netbox/wireless/models.py:248 #, python-brace-format msgid "{type} is not a wireless interface." msgstr "{type} kablosuz bir arayüz değildir." -#: wireless/utils.py:16 +#: netbox/wireless/utils.py:16 #, python-brace-format msgid "Invalid channel value: {channel}" msgstr "Geçersiz kanal değeri: {channel}" -#: wireless/utils.py:26 +#: netbox/wireless/utils.py:26 #, python-brace-format msgid "Invalid channel attribute: {name}" msgstr "Geçersiz kanal özniteliği: {name}" diff --git a/netbox/translations/uk/LC_MESSAGES/django.mo b/netbox/translations/uk/LC_MESSAGES/django.mo index b5c8a4fe9..04eed761a 100644 Binary files a/netbox/translations/uk/LC_MESSAGES/django.mo and b/netbox/translations/uk/LC_MESSAGES/django.mo differ diff --git a/netbox/translations/uk/LC_MESSAGES/django.po b/netbox/translations/uk/LC_MESSAGES/django.po index de7d910b3..1588a5495 100644 --- a/netbox/translations/uk/LC_MESSAGES/django.po +++ b/netbox/translations/uk/LC_MESSAGES/django.po @@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-10-28 19:20+0000\n" +"POT-Creation-Date: 2024-12-12 05:02+0000\n" "PO-Revision-Date: 2023-10-30 17:48+0000\n" "Last-Translator: Vladyslav V. Prodan, 2024\n" "Language-Team: Ukrainian (https://app.transifex.com/netbox-community/teams/178115/uk/)\n" @@ -23,3092 +23,3422 @@ msgstr "" "Language: uk\n" "Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);\n" -#: account/tables.py:27 templates/account/token.html:22 -#: templates/users/token.html:17 users/forms/bulk_import.py:39 -#: users/forms/model_forms.py:112 +#: netbox/account/tables.py:27 netbox/templates/account/token.html:22 +#: netbox/templates/users/token.html:17 netbox/users/forms/bulk_import.py:39 +#: netbox/users/forms/model_forms.py:112 msgid "Key" msgstr "Ключ" -#: account/tables.py:31 users/forms/filtersets.py:132 +#: netbox/account/tables.py:31 netbox/users/forms/filtersets.py:132 msgid "Write Enabled" msgstr "Запис дозволено" -#: account/tables.py:35 core/choices.py:86 core/tables/jobs.py:29 -#: core/tables/tasks.py:79 extras/tables/tables.py:335 -#: extras/tables/tables.py:566 templates/account/token.html:43 -#: templates/core/configrevision.html:26 -#: templates/core/configrevision_restore.html:12 templates/core/job.html:69 -#: templates/core/rq_task.html:16 templates/core/rq_task.html:73 -#: templates/core/rq_worker.html:14 -#: templates/extras/htmx/script_result.html:12 -#: templates/extras/journalentry.html:22 templates/generic/object.html:58 -#: templates/users/token.html:35 +#: netbox/account/tables.py:35 netbox/core/choices.py:86 +#: 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 +#: netbox/templates/core/configrevision.html:26 +#: netbox/templates/core/configrevision_restore.html:12 +#: netbox/templates/core/job.html:69 netbox/templates/core/rq_task.html:16 +#: netbox/templates/core/rq_task.html:73 +#: netbox/templates/core/rq_worker.html:14 +#: netbox/templates/extras/htmx/script_result.html:12 +#: netbox/templates/extras/journalentry.html:22 +#: netbox/templates/generic/object.html:58 +#: netbox/templates/users/token.html:35 msgid "Created" msgstr "Створено" -#: account/tables.py:39 templates/account/token.html:47 -#: templates/users/token.html:39 users/forms/bulk_edit.py:117 -#: users/forms/filtersets.py:136 +#: netbox/account/tables.py:39 netbox/templates/account/token.html:47 +#: netbox/templates/users/token.html:39 netbox/users/forms/bulk_edit.py:117 +#: netbox/users/forms/filtersets.py:136 msgid "Expires" msgstr "Термін дії закінчується" -#: account/tables.py:42 users/forms/filtersets.py:141 +#: netbox/account/tables.py:42 netbox/users/forms/filtersets.py:141 msgid "Last Used" msgstr "Використано востаннє" -#: account/tables.py:45 templates/account/token.html:55 -#: templates/users/token.html:47 users/forms/bulk_edit.py:122 -#: users/forms/model_forms.py:124 +#: netbox/account/tables.py:45 netbox/templates/account/token.html:55 +#: netbox/templates/users/token.html:47 netbox/users/forms/bulk_edit.py:122 +#: netbox/users/forms/model_forms.py:124 msgid "Allowed IPs" msgstr "Дозволені IP-адреси" -#: account/views.py:114 +#: netbox/account/views.py:114 #, python-brace-format msgid "Logged in as {user}." msgstr "Ввійшов в систему як {user}." -#: account/views.py:164 +#: netbox/account/views.py:164 msgid "You have logged out." msgstr "Ви вийшли з системи." -#: account/views.py:216 +#: netbox/account/views.py:216 msgid "Your preferences have been updated." msgstr "Ваші налаштування було оновлено." -#: account/views.py:239 +#: netbox/account/views.py:239 msgid "LDAP-authenticated user credentials cannot be changed within NetBox." msgstr "" "Облікові дані користувача, підтверджені LDAP, неможливо змінити в NetBox." -#: account/views.py:254 +#: netbox/account/views.py:254 msgid "Your password has been changed successfully." msgstr "Ваш пароль успішно змінено." -#: circuits/choices.py:21 dcim/choices.py:20 dcim/choices.py:102 -#: dcim/choices.py:185 dcim/choices.py:237 dcim/choices.py:1530 -#: dcim/choices.py:1606 dcim/choices.py:1656 virtualization/choices.py:20 -#: virtualization/choices.py:45 vpn/choices.py:18 +#: netbox/circuits/choices.py:21 netbox/dcim/choices.py:20 +#: netbox/dcim/choices.py:102 netbox/dcim/choices.py: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 msgid "Planned" msgstr "Заплановано" -#: circuits/choices.py:22 netbox/navigation/menu.py:305 +#: netbox/circuits/choices.py:22 netbox/netbox/navigation/menu.py:305 msgid "Provisioning" msgstr "Забезпечення" -#: circuits/choices.py:23 core/tables/tasks.py:22 dcim/choices.py:22 -#: dcim/choices.py:103 dcim/choices.py:184 dcim/choices.py:236 -#: dcim/choices.py:1605 dcim/choices.py:1655 extras/tables/tables.py:495 -#: ipam/choices.py:31 ipam/choices.py:49 ipam/choices.py:69 -#: ipam/choices.py:154 templates/extras/configcontext.html:25 -#: templates/users/user.html:37 users/forms/bulk_edit.py:38 -#: virtualization/choices.py:22 virtualization/choices.py:44 vpn/choices.py:19 -#: wireless/choices.py:25 +#: netbox/circuits/choices.py:23 netbox/core/tables/tasks.py:22 +#: netbox/dcim/choices.py:22 netbox/dcim/choices.py:103 +#: netbox/dcim/choices.py: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/templates/users/user.html:37 netbox/users/forms/bulk_edit.py:38 +#: netbox/virtualization/choices.py:22 netbox/virtualization/choices.py:44 +#: netbox/vpn/choices.py:19 netbox/wireless/choices.py:25 msgid "Active" msgstr "Активний" -#: circuits/choices.py:24 dcim/choices.py:183 dcim/choices.py:235 -#: dcim/choices.py:1604 dcim/choices.py:1657 virtualization/choices.py:24 -#: virtualization/choices.py:43 +#: 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 msgid "Offline" msgstr "Офлайн" -#: circuits/choices.py:25 +#: netbox/circuits/choices.py:25 msgid "Deprovisioning" msgstr "Зняття з експлуатації" -#: circuits/choices.py:26 +#: netbox/circuits/choices.py:26 msgid "Decommissioned" msgstr "Виведені з експлуатації" -#: circuits/choices.py:90 dcim/choices.py:1617 tenancy/choices.py:17 +#: netbox/circuits/choices.py:90 netbox/dcim/choices.py:1619 +#: netbox/tenancy/choices.py:17 msgid "Primary" msgstr "Первинний" -#: circuits/choices.py:91 ipam/choices.py:90 tenancy/choices.py:18 +#: netbox/circuits/choices.py:91 netbox/ipam/choices.py:90 +#: netbox/tenancy/choices.py:18 msgid "Secondary" msgstr "Вторинний" -#: circuits/choices.py:92 tenancy/choices.py:19 +#: netbox/circuits/choices.py:92 netbox/tenancy/choices.py:19 msgid "Tertiary" msgstr "Третинний" -#: circuits/choices.py:93 tenancy/choices.py:20 +#: netbox/circuits/choices.py:93 netbox/tenancy/choices.py:20 msgid "Inactive" msgstr "Неактивний" -#: circuits/filtersets.py:31 circuits/filtersets.py:198 dcim/filtersets.py:98 -#: dcim/filtersets.py:152 dcim/filtersets.py:212 dcim/filtersets.py:333 -#: dcim/filtersets.py:464 dcim/filtersets.py:1021 dcim/filtersets.py:1368 -#: dcim/filtersets.py:1903 dcim/filtersets.py:2146 dcim/filtersets.py:2204 -#: ipam/filtersets.py:339 ipam/filtersets.py:959 -#: virtualization/filtersets.py:45 virtualization/filtersets.py:173 -#: vpn/filtersets.py:358 +#: 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:339 netbox/ipam/filtersets.py:959 +#: netbox/virtualization/filtersets.py:45 +#: netbox/virtualization/filtersets.py:173 netbox/vpn/filtersets.py:358 msgid "Region (ID)" msgstr "Регіон (ідентифікатор)" -#: circuits/filtersets.py:38 circuits/filtersets.py:205 dcim/filtersets.py:105 -#: dcim/filtersets.py:158 dcim/filtersets.py:219 dcim/filtersets.py:340 -#: dcim/filtersets.py:471 dcim/filtersets.py:1028 dcim/filtersets.py:1375 -#: dcim/filtersets.py:1910 dcim/filtersets.py:2153 dcim/filtersets.py:2211 -#: extras/filtersets.py:509 ipam/filtersets.py:346 ipam/filtersets.py:966 -#: virtualization/filtersets.py:52 virtualization/filtersets.py:180 -#: vpn/filtersets.py:353 +#: 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:346 +#: netbox/ipam/filtersets.py:966 netbox/virtualization/filtersets.py:52 +#: netbox/virtualization/filtersets.py:180 netbox/vpn/filtersets.py:353 msgid "Region (slug)" msgstr "Регіон (скорочення)" -#: circuits/filtersets.py:44 circuits/filtersets.py:211 dcim/filtersets.py:128 -#: dcim/filtersets.py:225 dcim/filtersets.py:346 dcim/filtersets.py:477 -#: dcim/filtersets.py:1034 dcim/filtersets.py:1381 dcim/filtersets.py:1916 -#: dcim/filtersets.py:2159 dcim/filtersets.py:2217 ipam/filtersets.py:352 -#: ipam/filtersets.py:972 virtualization/filtersets.py:58 -#: virtualization/filtersets.py:186 +#: 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:352 +#: netbox/ipam/filtersets.py:972 netbox/virtualization/filtersets.py:58 +#: netbox/virtualization/filtersets.py:186 msgid "Site group (ID)" msgstr "Група тех. майданчиків (ідентифікатор)" -#: circuits/filtersets.py:51 circuits/filtersets.py:218 dcim/filtersets.py:135 -#: dcim/filtersets.py:232 dcim/filtersets.py:353 dcim/filtersets.py:484 -#: dcim/filtersets.py:1041 dcim/filtersets.py:1388 dcim/filtersets.py:1923 -#: dcim/filtersets.py:2166 dcim/filtersets.py:2224 extras/filtersets.py:515 -#: ipam/filtersets.py:359 ipam/filtersets.py:979 -#: virtualization/filtersets.py:65 virtualization/filtersets.py:193 +#: 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:359 netbox/ipam/filtersets.py:979 +#: netbox/virtualization/filtersets.py:65 +#: netbox/virtualization/filtersets.py:193 msgid "Site group (slug)" msgstr "Група тех. майданчиків (скорочення)" -#: circuits/filtersets.py:56 circuits/forms/bulk_edit.py:188 -#: circuits/forms/bulk_edit.py:216 circuits/forms/bulk_import.py:124 -#: circuits/forms/filtersets.py:51 circuits/forms/filtersets.py:171 -#: circuits/forms/filtersets.py:209 circuits/forms/model_forms.py:138 -#: circuits/forms/model_forms.py:154 circuits/tables/circuits.py:113 -#: dcim/forms/bulk_edit.py:168 dcim/forms/bulk_edit.py:329 -#: dcim/forms/bulk_edit.py:677 dcim/forms/bulk_edit.py:873 -#: dcim/forms/bulk_import.py:131 dcim/forms/bulk_import.py:230 -#: dcim/forms/bulk_import.py:309 dcim/forms/bulk_import.py:540 -#: dcim/forms/bulk_import.py:1311 dcim/forms/bulk_import.py:1339 -#: dcim/forms/filtersets.py:87 dcim/forms/filtersets.py:225 -#: dcim/forms/filtersets.py:342 dcim/forms/filtersets.py:439 -#: dcim/forms/filtersets.py:753 dcim/forms/filtersets.py:997 -#: dcim/forms/filtersets.py:1021 dcim/forms/filtersets.py:1111 -#: dcim/forms/filtersets.py:1149 dcim/forms/filtersets.py:1584 -#: dcim/forms/filtersets.py:1608 dcim/forms/filtersets.py:1632 -#: dcim/forms/model_forms.py:137 dcim/forms/model_forms.py:165 -#: dcim/forms/model_forms.py:238 dcim/forms/model_forms.py:463 -#: dcim/forms/model_forms.py:723 dcim/forms/object_create.py:391 -#: dcim/tables/devices.py:153 dcim/tables/power.py:26 dcim/tables/power.py:93 -#: dcim/tables/racks.py:122 dcim/tables/racks.py:207 dcim/tables/sites.py:134 -#: extras/filtersets.py:525 ipam/forms/bulk_edit.py:218 -#: ipam/forms/bulk_edit.py:285 ipam/forms/bulk_edit.py:484 -#: ipam/forms/bulk_import.py:171 ipam/forms/bulk_import.py:429 -#: ipam/forms/filtersets.py:153 ipam/forms/filtersets.py:231 -#: ipam/forms/filtersets.py:432 ipam/forms/filtersets.py:489 -#: ipam/forms/model_forms.py:205 ipam/forms/model_forms.py:636 -#: ipam/tables/ip.py:245 ipam/tables/vlans.py:118 ipam/tables/vlans.py:221 -#: templates/circuits/inc/circuit_termination_fields.html:6 -#: templates/dcim/device.html:22 templates/dcim/inc/cable_termination.html:8 -#: templates/dcim/inc/cable_termination.html:33 -#: templates/dcim/location.html:37 templates/dcim/powerpanel.html:22 -#: templates/dcim/rack.html:20 templates/dcim/rackreservation.html:28 -#: templates/dcim/site.html:28 templates/ipam/prefix.html:56 -#: templates/ipam/vlan.html:23 templates/ipam/vlan_edit.html:40 -#: templates/virtualization/cluster.html:42 -#: templates/virtualization/virtualmachine.html:95 -#: virtualization/forms/bulk_edit.py:91 virtualization/forms/bulk_edit.py:109 -#: virtualization/forms/bulk_edit.py:124 -#: virtualization/forms/bulk_import.py:59 -#: virtualization/forms/bulk_import.py:85 -#: virtualization/forms/filtersets.py:79 -#: virtualization/forms/filtersets.py:148 -#: virtualization/forms/model_forms.py:71 -#: virtualization/forms/model_forms.py:104 -#: virtualization/forms/model_forms.py:171 -#: virtualization/tables/clusters.py:77 -#: virtualization/tables/virtualmachines.py:63 vpn/forms/filtersets.py:266 -#: wireless/forms/model_forms.py:76 wireless/forms/model_forms.py:118 +#: 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/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/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/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 msgid "Site" msgstr "Тех. майданчик" -#: circuits/filtersets.py:62 circuits/filtersets.py:229 -#: circuits/filtersets.py:274 dcim/filtersets.py:242 dcim/filtersets.py:363 -#: dcim/filtersets.py:458 extras/filtersets.py:531 ipam/filtersets.py:238 -#: ipam/filtersets.py:369 ipam/filtersets.py:989 -#: virtualization/filtersets.py:75 virtualization/filtersets.py:203 -#: vpn/filtersets.py:363 +#: 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/virtualization/filtersets.py:75 +#: netbox/virtualization/filtersets.py:203 netbox/vpn/filtersets.py:363 msgid "Site (slug)" msgstr "Тех. майданчик (скорочення)" -#: circuits/filtersets.py:67 +#: netbox/circuits/filtersets.py:67 msgid "ASN (ID)" msgstr "ASN (ідентифікатор)" -#: circuits/filtersets.py:73 circuits/forms/filtersets.py:31 -#: ipam/forms/model_forms.py:159 ipam/models/asns.py:108 -#: ipam/models/asns.py:125 ipam/tables/asn.py:41 templates/ipam/asn.html:20 +#: 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/templates/ipam/asn.html:20 msgid "ASN" msgstr "ASN" -#: circuits/filtersets.py:95 circuits/filtersets.py:122 -#: circuits/filtersets.py:156 circuits/filtersets.py:283 -#: circuits/filtersets.py:325 ipam/filtersets.py:243 +#: 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 msgid "Provider (ID)" msgstr "Провайдер (ідентифікатор)" -#: circuits/filtersets.py:101 circuits/filtersets.py:128 -#: circuits/filtersets.py:162 circuits/filtersets.py:289 -#: circuits/filtersets.py:331 ipam/filtersets.py:249 +#: 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 msgid "Provider (slug)" msgstr "Провайдер (скорочення)" -#: circuits/filtersets.py:167 +#: netbox/circuits/filtersets.py:167 msgid "Provider account (ID)" msgstr "Обліковий запис провайдера (ідентифікатор)" -#: circuits/filtersets.py:173 +#: netbox/circuits/filtersets.py:173 msgid "Provider account (account)" msgstr "Обліковий запис провайдера (обліковий запис)" -#: circuits/filtersets.py:178 +#: netbox/circuits/filtersets.py:178 msgid "Provider network (ID)" msgstr "Мережа провайдера (ідентифікатор)" -#: circuits/filtersets.py:182 +#: netbox/circuits/filtersets.py:182 msgid "Circuit type (ID)" msgstr "Тип каналу зв'язку (ідентифікатор)" -#: circuits/filtersets.py:188 +#: netbox/circuits/filtersets.py:188 msgid "Circuit type (slug)" msgstr "Тип каналу зв'язку (скорочення)" -#: circuits/filtersets.py:223 circuits/filtersets.py:268 -#: dcim/filtersets.py:236 dcim/filtersets.py:357 dcim/filtersets.py:452 -#: dcim/filtersets.py:1045 dcim/filtersets.py:1393 dcim/filtersets.py:1928 -#: dcim/filtersets.py:2170 dcim/filtersets.py:2229 ipam/filtersets.py:232 -#: ipam/filtersets.py:363 ipam/filtersets.py:983 -#: virtualization/filtersets.py:69 virtualization/filtersets.py:197 -#: vpn/filtersets.py:368 +#: 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:232 netbox/ipam/filtersets.py:363 +#: netbox/ipam/filtersets.py:983 netbox/virtualization/filtersets.py:69 +#: netbox/virtualization/filtersets.py:197 netbox/vpn/filtersets.py:368 msgid "Site (ID)" msgstr "Тех. майданчик (ідентифікатор)" -#: circuits/filtersets.py:233 circuits/filtersets.py:237 +#: netbox/circuits/filtersets.py:233 netbox/circuits/filtersets.py:237 msgid "Termination A (ID)" msgstr "Припинення A (ідентифікатор)" -#: circuits/filtersets.py:260 circuits/filtersets.py:320 core/filtersets.py:77 -#: core/filtersets.py:136 core/filtersets.py:173 dcim/filtersets.py:751 -#: dcim/filtersets.py:1362 dcim/filtersets.py:2277 extras/filtersets.py:41 -#: extras/filtersets.py:63 extras/filtersets.py:92 extras/filtersets.py:132 -#: extras/filtersets.py:181 extras/filtersets.py:209 extras/filtersets.py:239 -#: extras/filtersets.py:276 extras/filtersets.py:348 extras/filtersets.py:391 -#: extras/filtersets.py:438 extras/filtersets.py:498 extras/filtersets.py:657 -#: extras/filtersets.py:703 ipam/forms/model_forms.py:449 -#: netbox/filtersets.py:282 netbox/forms/__init__.py:22 -#: netbox/forms/base.py:167 templates/htmx/object_selector.html:28 -#: templates/inc/filter_list.html:46 templates/ipam/ipaddress_assign.html:29 -#: templates/search.html:7 templates/search.html:26 tenancy/filtersets.py:99 -#: users/filtersets.py:23 users/filtersets.py:57 users/filtersets.py:102 -#: users/filtersets.py:150 utilities/forms/forms.py:104 -#: utilities/templates/navigation/menu.html:16 +#: 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/templates/htmx/object_selector.html:28 +#: netbox/templates/inc/filter_list.html:46 +#: netbox/templates/ipam/ipaddress_assign.html:29 +#: netbox/templates/search.html:7 netbox/templates/search.html:26 +#: netbox/tenancy/filtersets.py:99 netbox/users/filtersets.py:23 +#: netbox/users/filtersets.py:57 netbox/users/filtersets.py:102 +#: netbox/users/filtersets.py:150 netbox/utilities/forms/forms.py:104 +#: netbox/utilities/templates/navigation/menu.html:16 msgid "Search" msgstr "Пошук" -#: circuits/filtersets.py:264 circuits/forms/bulk_edit.py:172 -#: circuits/forms/bulk_edit.py:246 circuits/forms/bulk_import.py:115 -#: circuits/forms/filtersets.py:198 circuits/forms/filtersets.py:214 -#: circuits/forms/filtersets.py:260 circuits/forms/model_forms.py:111 -#: circuits/forms/model_forms.py:133 circuits/forms/model_forms.py:199 -#: circuits/tables/circuits.py:104 circuits/tables/circuits.py:164 -#: dcim/forms/connections.py:73 templates/circuits/circuit.html:15 -#: templates/circuits/circuitgroupassignment.html:26 -#: templates/circuits/circuittermination.html:19 -#: templates/dcim/inc/cable_termination.html:55 -#: templates/dcim/trace/circuit.html:4 +#: 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/templates/circuits/circuit.html:15 +#: netbox/templates/circuits/circuitgroupassignment.html:26 +#: netbox/templates/circuits/circuittermination.html:19 +#: netbox/templates/dcim/inc/cable_termination.html:55 +#: netbox/templates/dcim/trace/circuit.html:4 msgid "Circuit" msgstr "Канал зв'язку" -#: circuits/filtersets.py:278 +#: netbox/circuits/filtersets.py:278 msgid "ProviderNetwork (ID)" msgstr "Мережа провайдера (ідентифікатор)" -#: circuits/filtersets.py:335 +#: netbox/circuits/filtersets.py:335 msgid "Circuit (ID)" msgstr "Канал зв'язку (ідентифікатор)" -#: circuits/filtersets.py:341 +#: netbox/circuits/filtersets.py:341 msgid "Circuit (CID)" msgstr "Канал зв'язку (ідентифікатор вмісту)" -#: circuits/filtersets.py:345 +#: netbox/circuits/filtersets.py:345 msgid "Circuit group (ID)" -msgstr "Группа каналів зв'язку (ідентифікатор)" +msgstr "Група каналів зв'язку (ідентифікатор)" -#: circuits/filtersets.py:351 +#: netbox/circuits/filtersets.py:351 msgid "Circuit group (slug)" -msgstr "Группа каналів зв'язку (скорочення)" +msgstr "Група каналів зв'язку (скорочення)" -#: circuits/forms/bulk_edit.py:30 circuits/forms/filtersets.py:56 -#: circuits/forms/model_forms.py:29 circuits/tables/providers.py:33 -#: dcim/forms/bulk_edit.py:128 dcim/forms/filtersets.py:195 -#: dcim/forms/model_forms.py:123 dcim/tables/sites.py:94 -#: ipam/models/asns.py:126 ipam/tables/asn.py:27 ipam/views.py:213 -#: netbox/navigation/menu.py:172 netbox/navigation/menu.py:175 -#: templates/circuits/provider.html:23 +#: 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/templates/circuits/provider.html:23 msgid "ASNs" msgstr "ASNs" -#: circuits/forms/bulk_edit.py:34 circuits/forms/bulk_edit.py:56 -#: circuits/forms/bulk_edit.py:83 circuits/forms/bulk_edit.py:104 -#: circuits/forms/bulk_edit.py:164 circuits/forms/bulk_edit.py:183 -#: circuits/forms/bulk_edit.py:228 core/forms/bulk_edit.py:28 -#: dcim/forms/bulk_create.py:35 dcim/forms/bulk_edit.py:73 -#: dcim/forms/bulk_edit.py:92 dcim/forms/bulk_edit.py:151 -#: dcim/forms/bulk_edit.py:192 dcim/forms/bulk_edit.py:210 -#: dcim/forms/bulk_edit.py:288 dcim/forms/bulk_edit.py:432 -#: dcim/forms/bulk_edit.py:466 dcim/forms/bulk_edit.py:481 -#: dcim/forms/bulk_edit.py:540 dcim/forms/bulk_edit.py:584 -#: dcim/forms/bulk_edit.py:618 dcim/forms/bulk_edit.py:642 -#: dcim/forms/bulk_edit.py:715 dcim/forms/bulk_edit.py:767 -#: dcim/forms/bulk_edit.py:819 dcim/forms/bulk_edit.py:842 -#: dcim/forms/bulk_edit.py:890 dcim/forms/bulk_edit.py:960 -#: dcim/forms/bulk_edit.py:1013 dcim/forms/bulk_edit.py:1048 -#: dcim/forms/bulk_edit.py:1088 dcim/forms/bulk_edit.py:1132 -#: dcim/forms/bulk_edit.py:1177 dcim/forms/bulk_edit.py:1204 -#: dcim/forms/bulk_edit.py:1222 dcim/forms/bulk_edit.py:1240 -#: dcim/forms/bulk_edit.py:1258 dcim/forms/bulk_edit.py:1682 -#: extras/forms/bulk_edit.py:39 extras/forms/bulk_edit.py:149 -#: extras/forms/bulk_edit.py:178 extras/forms/bulk_edit.py:208 -#: extras/forms/bulk_edit.py:256 extras/forms/bulk_edit.py:274 -#: extras/forms/bulk_edit.py:298 extras/forms/bulk_edit.py:312 -#: extras/forms/bulk_edit.py:339 extras/tables/tables.py:79 -#: ipam/forms/bulk_edit.py:53 ipam/forms/bulk_edit.py:73 -#: ipam/forms/bulk_edit.py:93 ipam/forms/bulk_edit.py:117 -#: ipam/forms/bulk_edit.py:146 ipam/forms/bulk_edit.py:175 -#: ipam/forms/bulk_edit.py:194 ipam/forms/bulk_edit.py:276 -#: ipam/forms/bulk_edit.py:321 ipam/forms/bulk_edit.py:369 -#: ipam/forms/bulk_edit.py:412 ipam/forms/bulk_edit.py:428 -#: ipam/forms/bulk_edit.py:516 ipam/forms/bulk_edit.py:547 -#: templates/account/token.html:35 templates/circuits/circuit.html:59 -#: templates/circuits/circuitgroup.html:32 -#: templates/circuits/circuittype.html:26 -#: templates/circuits/inc/circuit_termination_fields.html:88 -#: templates/circuits/provider.html:33 -#: templates/circuits/providernetwork.html:32 -#: templates/core/datasource.html:54 templates/core/plugin.html:80 -#: templates/dcim/cable.html:36 templates/dcim/consoleport.html:44 -#: templates/dcim/consoleserverport.html:44 templates/dcim/device.html:94 -#: templates/dcim/devicebay.html:32 templates/dcim/devicerole.html:30 -#: templates/dcim/devicetype.html:33 templates/dcim/frontport.html:58 -#: templates/dcim/interface.html:69 templates/dcim/inventoryitem.html:60 -#: templates/dcim/inventoryitemrole.html:22 templates/dcim/location.html:33 -#: templates/dcim/manufacturer.html:40 templates/dcim/module.html:73 -#: templates/dcim/modulebay.html:42 templates/dcim/moduletype.html:37 -#: templates/dcim/platform.html:33 templates/dcim/powerfeed.html:40 -#: templates/dcim/poweroutlet.html:40 templates/dcim/powerpanel.html:30 -#: templates/dcim/powerport.html:40 templates/dcim/rack.html:53 -#: templates/dcim/rackreservation.html:62 templates/dcim/rackrole.html:26 -#: templates/dcim/racktype.html:24 templates/dcim/rearport.html:54 -#: templates/dcim/region.html:33 templates/dcim/site.html:60 -#: templates/dcim/sitegroup.html:33 templates/dcim/virtualchassis.html:31 -#: templates/extras/configcontext.html:21 -#: templates/extras/configtemplate.html:17 -#: templates/extras/customfield.html:34 -#: templates/extras/dashboard/widget_add.html:14 -#: templates/extras/eventrule.html:21 templates/extras/exporttemplate.html:19 -#: templates/extras/notificationgroup.html:20 -#: templates/extras/savedfilter.html:17 templates/extras/script_list.html:45 -#: templates/extras/tag.html:20 templates/extras/webhook.html:17 -#: templates/generic/bulk_import.html:120 templates/ipam/aggregate.html:43 -#: templates/ipam/asn.html:42 templates/ipam/asnrange.html:38 -#: templates/ipam/fhrpgroup.html:34 templates/ipam/ipaddress.html:55 -#: templates/ipam/iprange.html:67 templates/ipam/prefix.html:81 -#: templates/ipam/rir.html:26 templates/ipam/role.html:26 -#: templates/ipam/routetarget.html:21 templates/ipam/service.html:50 -#: templates/ipam/servicetemplate.html:27 templates/ipam/vlan.html:62 -#: templates/ipam/vlangroup.html:34 templates/ipam/vrf.html:33 -#: templates/tenancy/contact.html:67 templates/tenancy/contactgroup.html:25 -#: templates/tenancy/contactrole.html:22 templates/tenancy/tenant.html:24 -#: templates/tenancy/tenantgroup.html:33 templates/users/group.html:21 -#: templates/users/objectpermission.html:21 templates/users/token.html:27 -#: templates/virtualization/cluster.html:25 -#: templates/virtualization/clustergroup.html:26 -#: templates/virtualization/clustertype.html:26 -#: templates/virtualization/virtualdisk.html:39 -#: templates/virtualization/virtualmachine.html:31 -#: templates/virtualization/vminterface.html:51 -#: templates/vpn/ikepolicy.html:17 templates/vpn/ikeproposal.html:17 -#: templates/vpn/ipsecpolicy.html:17 templates/vpn/ipsecprofile.html:17 -#: templates/vpn/ipsecprofile.html:40 templates/vpn/ipsecprofile.html:73 -#: templates/vpn/ipsecproposal.html:17 templates/vpn/l2vpn.html:26 -#: templates/vpn/tunnel.html:33 templates/vpn/tunnelgroup.html:30 -#: templates/wireless/wirelesslan.html:26 -#: templates/wireless/wirelesslangroup.html:33 -#: templates/wireless/wirelesslink.html:34 tenancy/forms/bulk_edit.py:32 -#: tenancy/forms/bulk_edit.py:80 tenancy/forms/bulk_edit.py:122 -#: users/forms/bulk_edit.py:64 users/forms/bulk_edit.py:82 -#: users/forms/bulk_edit.py:112 virtualization/forms/bulk_edit.py:32 -#: virtualization/forms/bulk_edit.py:46 virtualization/forms/bulk_edit.py:100 -#: virtualization/forms/bulk_edit.py:177 virtualization/forms/bulk_edit.py:228 -#: virtualization/forms/bulk_edit.py:337 vpn/forms/bulk_edit.py:28 -#: vpn/forms/bulk_edit.py:64 vpn/forms/bulk_edit.py:121 -#: vpn/forms/bulk_edit.py:155 vpn/forms/bulk_edit.py:190 -#: vpn/forms/bulk_edit.py:215 vpn/forms/bulk_edit.py:247 -#: vpn/forms/bulk_edit.py:274 wireless/forms/bulk_edit.py:29 -#: wireless/forms/bulk_edit.py:82 wireless/forms/bulk_edit.py:140 +#: 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/templates/account/token.html:35 +#: netbox/templates/circuits/circuit.html:59 +#: netbox/templates/circuits/circuitgroup.html:32 +#: netbox/templates/circuits/circuittype.html:26 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:88 +#: netbox/templates/circuits/provider.html:33 +#: netbox/templates/circuits/providernetwork.html:32 +#: netbox/templates/core/datasource.html:54 +#: netbox/templates/core/plugin.html:80 netbox/templates/dcim/cable.html:36 +#: netbox/templates/dcim/consoleport.html:44 +#: netbox/templates/dcim/consoleserverport.html:44 +#: netbox/templates/dcim/device.html:94 +#: netbox/templates/dcim/devicebay.html:32 +#: netbox/templates/dcim/devicerole.html:30 +#: netbox/templates/dcim/devicetype.html:33 +#: netbox/templates/dcim/frontport.html:58 +#: netbox/templates/dcim/interface.html:69 +#: netbox/templates/dcim/inventoryitem.html:60 +#: netbox/templates/dcim/inventoryitemrole.html:22 +#: netbox/templates/dcim/location.html:33 +#: netbox/templates/dcim/manufacturer.html:40 +#: netbox/templates/dcim/module.html:73 +#: netbox/templates/dcim/modulebay.html:42 +#: netbox/templates/dcim/moduletype.html:37 +#: netbox/templates/dcim/platform.html:33 +#: netbox/templates/dcim/powerfeed.html:40 +#: netbox/templates/dcim/poweroutlet.html:40 +#: netbox/templates/dcim/powerpanel.html:30 +#: netbox/templates/dcim/powerport.html:40 netbox/templates/dcim/rack.html:53 +#: netbox/templates/dcim/rackreservation.html:62 +#: netbox/templates/dcim/rackrole.html:26 +#: netbox/templates/dcim/racktype.html:24 +#: netbox/templates/dcim/rearport.html:54 netbox/templates/dcim/region.html:33 +#: netbox/templates/dcim/site.html:60 netbox/templates/dcim/sitegroup.html:33 +#: netbox/templates/dcim/virtualchassis.html:31 +#: netbox/templates/extras/configcontext.html:21 +#: netbox/templates/extras/configtemplate.html:17 +#: netbox/templates/extras/customfield.html:34 +#: netbox/templates/extras/dashboard/widget_add.html:14 +#: netbox/templates/extras/eventrule.html:21 +#: netbox/templates/extras/exporttemplate.html:19 +#: netbox/templates/extras/notificationgroup.html:20 +#: netbox/templates/extras/savedfilter.html:17 +#: netbox/templates/extras/script_list.html:46 +#: netbox/templates/extras/tag.html:20 netbox/templates/extras/webhook.html:17 +#: netbox/templates/generic/bulk_import.html:120 +#: netbox/templates/ipam/aggregate.html:43 netbox/templates/ipam/asn.html:42 +#: netbox/templates/ipam/asnrange.html:38 +#: netbox/templates/ipam/fhrpgroup.html:34 +#: netbox/templates/ipam/ipaddress.html:55 +#: netbox/templates/ipam/iprange.html:67 netbox/templates/ipam/prefix.html:81 +#: netbox/templates/ipam/rir.html:26 netbox/templates/ipam/role.html:26 +#: netbox/templates/ipam/routetarget.html:21 +#: netbox/templates/ipam/service.html:50 +#: netbox/templates/ipam/servicetemplate.html:27 +#: netbox/templates/ipam/vlan.html:62 netbox/templates/ipam/vlangroup.html:34 +#: netbox/templates/ipam/vrf.html:33 netbox/templates/tenancy/contact.html:67 +#: netbox/templates/tenancy/contactgroup.html:25 +#: netbox/templates/tenancy/contactrole.html:22 +#: netbox/templates/tenancy/tenant.html:24 +#: netbox/templates/tenancy/tenantgroup.html:33 +#: netbox/templates/users/group.html:21 +#: netbox/templates/users/objectpermission.html:21 +#: netbox/templates/users/token.html:27 +#: netbox/templates/virtualization/cluster.html:25 +#: netbox/templates/virtualization/clustergroup.html:26 +#: netbox/templates/virtualization/clustertype.html:26 +#: netbox/templates/virtualization/virtualdisk.html:39 +#: netbox/templates/virtualization/virtualmachine.html:31 +#: netbox/templates/virtualization/vminterface.html:51 +#: netbox/templates/vpn/ikepolicy.html:17 +#: netbox/templates/vpn/ikeproposal.html:17 +#: netbox/templates/vpn/ipsecpolicy.html:17 +#: netbox/templates/vpn/ipsecprofile.html:17 +#: netbox/templates/vpn/ipsecprofile.html:40 +#: netbox/templates/vpn/ipsecprofile.html:73 +#: netbox/templates/vpn/ipsecproposal.html:17 +#: netbox/templates/vpn/l2vpn.html:26 netbox/templates/vpn/tunnel.html:33 +#: netbox/templates/vpn/tunnelgroup.html:30 +#: netbox/templates/wireless/wirelesslan.html:26 +#: netbox/templates/wireless/wirelesslangroup.html:33 +#: netbox/templates/wireless/wirelesslink.html:34 +#: netbox/tenancy/forms/bulk_edit.py:32 netbox/tenancy/forms/bulk_edit.py:80 +#: netbox/tenancy/forms/bulk_edit.py:122 netbox/users/forms/bulk_edit.py:64 +#: netbox/users/forms/bulk_edit.py:82 netbox/users/forms/bulk_edit.py:112 +#: netbox/virtualization/forms/bulk_edit.py:32 +#: netbox/virtualization/forms/bulk_edit.py:46 +#: netbox/virtualization/forms/bulk_edit.py:100 +#: netbox/virtualization/forms/bulk_edit.py:177 +#: netbox/virtualization/forms/bulk_edit.py:228 +#: netbox/virtualization/forms/bulk_edit.py:337 +#: netbox/vpn/forms/bulk_edit.py:28 netbox/vpn/forms/bulk_edit.py:64 +#: netbox/vpn/forms/bulk_edit.py:121 netbox/vpn/forms/bulk_edit.py:155 +#: netbox/vpn/forms/bulk_edit.py:190 netbox/vpn/forms/bulk_edit.py:215 +#: netbox/vpn/forms/bulk_edit.py:247 netbox/vpn/forms/bulk_edit.py:274 +#: netbox/wireless/forms/bulk_edit.py:29 netbox/wireless/forms/bulk_edit.py:82 +#: netbox/wireless/forms/bulk_edit.py:140 msgid "Description" msgstr "Опис" -#: circuits/forms/bulk_edit.py:51 circuits/forms/bulk_edit.py:73 -#: circuits/forms/bulk_edit.py:123 circuits/forms/bulk_import.py:36 -#: circuits/forms/bulk_import.py:51 circuits/forms/bulk_import.py:74 -#: circuits/forms/filtersets.py:70 circuits/forms/filtersets.py:88 -#: circuits/forms/filtersets.py:116 circuits/forms/filtersets.py:131 -#: circuits/forms/filtersets.py:199 circuits/forms/filtersets.py:232 -#: circuits/forms/filtersets.py:255 circuits/forms/model_forms.py:47 -#: circuits/forms/model_forms.py:61 circuits/forms/model_forms.py:93 -#: circuits/tables/circuits.py:58 circuits/tables/circuits.py:108 -#: circuits/tables/circuits.py:160 circuits/tables/providers.py:72 -#: circuits/tables/providers.py:103 templates/circuits/circuit.html:18 -#: templates/circuits/circuittermination.html:25 -#: templates/circuits/provider.html:20 -#: templates/circuits/provideraccount.html:20 -#: templates/circuits/providernetwork.html:20 -#: templates/dcim/inc/cable_termination.html:51 +#: netbox/circuits/forms/bulk_edit.py: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/templates/circuits/circuit.html:18 +#: netbox/templates/circuits/circuittermination.html:25 +#: netbox/templates/circuits/provider.html:20 +#: netbox/templates/circuits/provideraccount.html:20 +#: netbox/templates/circuits/providernetwork.html:20 +#: netbox/templates/dcim/inc/cable_termination.html:51 msgid "Provider" msgstr "Провайдер" -#: circuits/forms/bulk_edit.py:80 circuits/forms/filtersets.py:91 -#: templates/circuits/providernetwork.html:28 +#: netbox/circuits/forms/bulk_edit.py:80 +#: netbox/circuits/forms/filtersets.py:91 +#: netbox/templates/circuits/providernetwork.html:28 msgid "Service ID" msgstr "Ідентифікатор служби" -#: circuits/forms/bulk_edit.py:100 circuits/forms/filtersets.py:107 -#: dcim/forms/bulk_edit.py:206 dcim/forms/bulk_edit.py:604 -#: dcim/forms/bulk_edit.py:804 dcim/forms/bulk_edit.py:1173 -#: dcim/forms/bulk_edit.py:1200 dcim/forms/bulk_edit.py:1678 -#: dcim/forms/filtersets.py:1064 dcim/forms/filtersets.py:1455 -#: dcim/forms/filtersets.py:1479 dcim/tables/devices.py:704 -#: dcim/tables/devices.py:761 dcim/tables/devices.py:1003 -#: dcim/tables/devicetypes.py:249 dcim/tables/devicetypes.py:264 -#: dcim/tables/racks.py:33 extras/forms/bulk_edit.py:270 -#: extras/tables/tables.py:443 templates/circuits/circuittype.html:30 -#: templates/dcim/cable.html:40 templates/dcim/devicerole.html:34 -#: templates/dcim/frontport.html:40 templates/dcim/inventoryitemrole.html:26 -#: templates/dcim/rackrole.html:30 templates/dcim/rearport.html:40 -#: templates/extras/tag.html:26 +#: netbox/circuits/forms/bulk_edit.py: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/templates/circuits/circuittype.html:30 +#: netbox/templates/dcim/cable.html:40 +#: netbox/templates/dcim/devicerole.html:34 +#: netbox/templates/dcim/frontport.html:40 +#: netbox/templates/dcim/inventoryitemrole.html:26 +#: netbox/templates/dcim/rackrole.html:30 +#: netbox/templates/dcim/rearport.html:40 netbox/templates/extras/tag.html:26 msgid "Color" msgstr "Колір" -#: circuits/forms/bulk_edit.py:118 circuits/forms/bulk_import.py:87 -#: circuits/forms/filtersets.py:126 core/forms/bulk_edit.py:18 -#: core/forms/filtersets.py:33 core/tables/change_logging.py:32 -#: core/tables/data.py:20 core/tables/jobs.py:18 dcim/forms/bulk_edit.py:782 -#: dcim/forms/bulk_edit.py:921 dcim/forms/bulk_edit.py:989 -#: dcim/forms/bulk_edit.py:1008 dcim/forms/bulk_edit.py:1031 -#: dcim/forms/bulk_edit.py:1073 dcim/forms/bulk_edit.py:1117 -#: dcim/forms/bulk_edit.py:1168 dcim/forms/bulk_edit.py:1195 -#: dcim/forms/bulk_import.py:188 dcim/forms/bulk_import.py:260 -#: dcim/forms/bulk_import.py:708 dcim/forms/bulk_import.py:734 -#: dcim/forms/bulk_import.py:760 dcim/forms/bulk_import.py:780 -#: dcim/forms/bulk_import.py:863 dcim/forms/bulk_import.py:957 -#: dcim/forms/bulk_import.py:999 dcim/forms/bulk_import.py:1213 -#: dcim/forms/bulk_import.py:1376 dcim/forms/filtersets.py:955 -#: dcim/forms/filtersets.py:1054 dcim/forms/filtersets.py:1175 -#: dcim/forms/filtersets.py:1247 dcim/forms/filtersets.py:1272 -#: dcim/forms/filtersets.py:1296 dcim/forms/filtersets.py:1316 -#: dcim/forms/filtersets.py:1353 dcim/forms/filtersets.py:1450 -#: dcim/forms/filtersets.py:1474 dcim/forms/model_forms.py:703 -#: dcim/forms/model_forms.py:709 dcim/forms/object_import.py:84 -#: dcim/forms/object_import.py:113 dcim/forms/object_import.py:145 -#: dcim/tables/devices.py:178 dcim/tables/devices.py:814 -#: dcim/tables/power.py:77 dcim/tables/racks.py:138 -#: extras/forms/bulk_import.py:42 extras/tables/tables.py:405 -#: extras/tables/tables.py:465 netbox/tables/tables.py:240 -#: templates/circuits/circuit.html:30 templates/core/datasource.html:38 -#: templates/dcim/cable.html:15 templates/dcim/consoleport.html:36 -#: templates/dcim/consoleserverport.html:36 templates/dcim/frontport.html:36 -#: templates/dcim/interface.html:46 templates/dcim/interface.html:169 -#: templates/dcim/interface.html:311 templates/dcim/powerfeed.html:32 -#: templates/dcim/poweroutlet.html:36 templates/dcim/powerport.html:36 -#: templates/dcim/rearport.html:36 templates/extras/eventrule.html:74 -#: templates/virtualization/cluster.html:17 templates/vpn/l2vpn.html:22 -#: templates/wireless/inc/authentication_attrs.html:8 -#: templates/wireless/inc/wirelesslink_interface.html:14 -#: virtualization/forms/bulk_edit.py:60 virtualization/forms/bulk_import.py:41 -#: virtualization/forms/filtersets.py:54 -#: virtualization/forms/model_forms.py:62 virtualization/tables/clusters.py:66 -#: vpn/forms/bulk_edit.py:264 vpn/forms/bulk_import.py:264 -#: vpn/forms/filtersets.py:217 vpn/forms/model_forms.py:84 -#: vpn/forms/model_forms.py:119 vpn/forms/model_forms.py:231 +#: netbox/circuits/forms/bulk_edit.py: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/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/core/datasource.html:38 +#: netbox/templates/dcim/cable.html:15 +#: netbox/templates/dcim/consoleport.html:36 +#: netbox/templates/dcim/consoleserverport.html:36 +#: netbox/templates/dcim/frontport.html:36 +#: netbox/templates/dcim/interface.html:46 +#: netbox/templates/dcim/interface.html:169 +#: netbox/templates/dcim/interface.html:311 +#: netbox/templates/dcim/powerfeed.html:32 +#: netbox/templates/dcim/poweroutlet.html:36 +#: netbox/templates/dcim/powerport.html:36 +#: netbox/templates/dcim/rearport.html:36 +#: netbox/templates/extras/eventrule.html:74 +#: netbox/templates/virtualization/cluster.html:17 +#: netbox/templates/vpn/l2vpn.html:22 +#: netbox/templates/wireless/inc/authentication_attrs.html:8 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:14 +#: netbox/virtualization/forms/bulk_edit.py:60 +#: netbox/virtualization/forms/bulk_import.py:41 +#: netbox/virtualization/forms/filtersets.py:54 +#: netbox/virtualization/forms/model_forms.py:62 +#: netbox/virtualization/tables/clusters.py:66 +#: netbox/vpn/forms/bulk_edit.py:264 netbox/vpn/forms/bulk_import.py:264 +#: netbox/vpn/forms/filtersets.py:217 netbox/vpn/forms/model_forms.py:84 +#: netbox/vpn/forms/model_forms.py:119 netbox/vpn/forms/model_forms.py:231 msgid "Type" msgstr "Тип" -#: circuits/forms/bulk_edit.py:128 circuits/forms/bulk_import.py:80 -#: circuits/forms/filtersets.py:139 circuits/forms/model_forms.py:98 +#: 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 msgid "Provider account" msgstr "Обліковий запис постачальника" -#: circuits/forms/bulk_edit.py:136 circuits/forms/bulk_import.py:93 -#: circuits/forms/filtersets.py:150 core/forms/filtersets.py:38 -#: core/forms/filtersets.py:79 core/tables/data.py:23 core/tables/jobs.py:26 -#: core/tables/tasks.py:88 dcim/forms/bulk_edit.py:106 -#: dcim/forms/bulk_edit.py:181 dcim/forms/bulk_edit.py:351 -#: dcim/forms/bulk_edit.py:700 dcim/forms/bulk_edit.py:756 -#: dcim/forms/bulk_edit.py:788 dcim/forms/bulk_edit.py:915 -#: dcim/forms/bulk_edit.py:1701 dcim/forms/bulk_import.py:88 -#: dcim/forms/bulk_import.py:147 dcim/forms/bulk_import.py:248 -#: dcim/forms/bulk_import.py:505 dcim/forms/bulk_import.py:659 -#: dcim/forms/bulk_import.py:1207 dcim/forms/bulk_import.py:1371 -#: dcim/forms/bulk_import.py:1435 dcim/forms/filtersets.py:178 -#: dcim/forms/filtersets.py:237 dcim/forms/filtersets.py:359 -#: dcim/forms/filtersets.py:799 dcim/forms/filtersets.py:924 -#: dcim/forms/filtersets.py:958 dcim/forms/filtersets.py:1059 -#: dcim/forms/filtersets.py:1170 dcim/tables/devices.py:140 -#: dcim/tables/devices.py:817 dcim/tables/devices.py:1063 -#: dcim/tables/modules.py:69 dcim/tables/power.py:74 dcim/tables/racks.py:126 -#: dcim/tables/sites.py:82 dcim/tables/sites.py:138 -#: ipam/forms/bulk_edit.py:256 ipam/forms/bulk_edit.py:306 -#: ipam/forms/bulk_edit.py:354 ipam/forms/bulk_edit.py:506 -#: ipam/forms/bulk_import.py:192 ipam/forms/bulk_import.py:257 -#: ipam/forms/bulk_import.py:293 ipam/forms/bulk_import.py:450 -#: ipam/forms/filtersets.py:210 ipam/forms/filtersets.py:281 -#: ipam/forms/filtersets.py:355 ipam/forms/filtersets.py:501 -#: ipam/forms/model_forms.py:468 ipam/tables/ip.py:237 ipam/tables/ip.py:312 -#: ipam/tables/ip.py:363 ipam/tables/ip.py:426 ipam/tables/ip.py:453 -#: ipam/tables/vlans.py:126 ipam/tables/vlans.py:232 -#: templates/circuits/circuit.html:34 templates/core/datasource.html:46 -#: templates/core/job.html:48 templates/core/rq_task.html:81 -#: templates/core/system.html:18 templates/dcim/cable.html:19 -#: templates/dcim/device.html:178 templates/dcim/location.html:45 -#: templates/dcim/module.html:69 templates/dcim/powerfeed.html:36 -#: templates/dcim/rack.html:41 templates/dcim/site.html:43 -#: templates/extras/script_list.html:47 templates/ipam/ipaddress.html:37 -#: templates/ipam/iprange.html:54 templates/ipam/prefix.html:73 -#: templates/ipam/vlan.html:48 templates/virtualization/cluster.html:21 -#: templates/virtualization/virtualmachine.html:19 -#: templates/vpn/tunnel.html:25 templates/wireless/wirelesslan.html:22 -#: templates/wireless/wirelesslink.html:17 users/forms/filtersets.py:32 -#: users/forms/model_forms.py:194 virtualization/forms/bulk_edit.py:70 -#: virtualization/forms/bulk_edit.py:118 -#: virtualization/forms/bulk_import.py:54 -#: virtualization/forms/bulk_import.py:80 -#: virtualization/forms/filtersets.py:62 -#: virtualization/forms/filtersets.py:160 virtualization/tables/clusters.py:74 -#: virtualization/tables/virtualmachines.py:60 vpn/forms/bulk_edit.py:39 -#: vpn/forms/bulk_import.py:37 vpn/forms/filtersets.py:47 -#: vpn/tables/tunnels.py:48 wireless/forms/bulk_edit.py:43 -#: wireless/forms/bulk_edit.py:105 wireless/forms/bulk_import.py:43 -#: wireless/forms/bulk_import.py:84 wireless/forms/filtersets.py:49 -#: wireless/forms/filtersets.py:83 wireless/tables/wirelesslan.py:52 -#: wireless/tables/wirelesslink.py:20 +#: 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/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:69 +#: 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/templates/circuits/circuit.html:34 +#: 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/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/vlan.html:48 +#: netbox/templates/virtualization/cluster.html:21 +#: netbox/templates/virtualization/virtualmachine.html:19 +#: netbox/templates/vpn/tunnel.html:25 +#: netbox/templates/wireless/wirelesslan.html:22 +#: netbox/templates/wireless/wirelesslink.html:17 +#: netbox/users/forms/filtersets.py: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/tables/clusters.py:74 +#: netbox/virtualization/tables/virtualmachines.py:60 +#: netbox/vpn/forms/bulk_edit.py:39 netbox/vpn/forms/bulk_import.py:37 +#: netbox/vpn/forms/filtersets.py:47 netbox/vpn/tables/tunnels.py:48 +#: netbox/wireless/forms/bulk_edit.py:43 +#: netbox/wireless/forms/bulk_edit.py:105 +#: netbox/wireless/forms/bulk_import.py:43 +#: netbox/wireless/forms/bulk_import.py:84 +#: netbox/wireless/forms/filtersets.py:49 +#: netbox/wireless/forms/filtersets.py:83 +#: netbox/wireless/tables/wirelesslan.py:52 +#: netbox/wireless/tables/wirelesslink.py:20 msgid "Status" msgstr "Статус" -#: circuits/forms/bulk_edit.py:142 circuits/forms/bulk_edit.py:233 -#: circuits/forms/bulk_import.py:98 circuits/forms/bulk_import.py:158 -#: circuits/forms/filtersets.py:119 circuits/forms/filtersets.py:241 -#: dcim/forms/bulk_edit.py:122 dcim/forms/bulk_edit.py:187 -#: dcim/forms/bulk_edit.py:346 dcim/forms/bulk_edit.py:461 -#: dcim/forms/bulk_edit.py:690 dcim/forms/bulk_edit.py:794 -#: dcim/forms/bulk_edit.py:1706 dcim/forms/bulk_import.py:107 -#: dcim/forms/bulk_import.py:152 dcim/forms/bulk_import.py:241 -#: dcim/forms/bulk_import.py:334 dcim/forms/bulk_import.py:479 -#: dcim/forms/bulk_import.py:1219 dcim/forms/bulk_import.py:1428 -#: dcim/forms/filtersets.py:173 dcim/forms/filtersets.py:205 -#: dcim/forms/filtersets.py:323 dcim/forms/filtersets.py:399 -#: dcim/forms/filtersets.py:420 dcim/forms/filtersets.py:722 -#: dcim/forms/filtersets.py:916 dcim/forms/filtersets.py:978 -#: dcim/forms/filtersets.py:1008 dcim/forms/filtersets.py:1130 -#: dcim/tables/power.py:88 extras/filtersets.py:612 -#: extras/forms/filtersets.py:323 extras/forms/filtersets.py:396 -#: ipam/forms/bulk_edit.py:43 ipam/forms/bulk_edit.py:68 -#: ipam/forms/bulk_edit.py:112 ipam/forms/bulk_edit.py:141 -#: ipam/forms/bulk_edit.py:166 ipam/forms/bulk_edit.py:251 -#: ipam/forms/bulk_edit.py:301 ipam/forms/bulk_edit.py:349 -#: ipam/forms/bulk_edit.py:501 ipam/forms/bulk_import.py:38 -#: ipam/forms/bulk_import.py:67 ipam/forms/bulk_import.py:95 -#: ipam/forms/bulk_import.py:115 ipam/forms/bulk_import.py:135 -#: ipam/forms/bulk_import.py:164 ipam/forms/bulk_import.py:250 -#: ipam/forms/bulk_import.py:286 ipam/forms/bulk_import.py:443 -#: ipam/forms/filtersets.py:48 ipam/forms/filtersets.py:68 -#: ipam/forms/filtersets.py:100 ipam/forms/filtersets.py:120 -#: ipam/forms/filtersets.py:143 ipam/forms/filtersets.py:174 -#: ipam/forms/filtersets.py:267 ipam/forms/filtersets.py:310 -#: ipam/forms/filtersets.py:469 ipam/tables/ip.py:456 ipam/tables/vlans.py:229 -#: templates/circuits/circuit.html:38 templates/circuits/circuitgroup.html:36 -#: templates/dcim/cable.html:23 templates/dcim/device.html:79 -#: templates/dcim/location.html:49 templates/dcim/powerfeed.html:44 -#: templates/dcim/rack.html:32 templates/dcim/rackreservation.html:49 -#: templates/dcim/site.html:47 templates/dcim/virtualdevicecontext.html:52 -#: templates/ipam/aggregate.html:30 templates/ipam/asn.html:33 -#: templates/ipam/asnrange.html:29 templates/ipam/ipaddress.html:28 -#: templates/ipam/iprange.html:58 templates/ipam/prefix.html:29 -#: templates/ipam/routetarget.html:17 templates/ipam/vlan.html:39 -#: templates/ipam/vrf.html:20 templates/tenancy/tenant.html:17 -#: templates/virtualization/cluster.html:33 -#: templates/virtualization/virtualmachine.html:39 templates/vpn/l2vpn.html:30 -#: templates/vpn/tunnel.html:49 templates/wireless/wirelesslan.html:34 -#: templates/wireless/wirelesslink.html:25 tenancy/forms/forms.py:25 -#: tenancy/forms/forms.py:48 tenancy/forms/model_forms.py:52 -#: tenancy/tables/columns.py:64 virtualization/forms/bulk_edit.py:76 -#: virtualization/forms/bulk_edit.py:155 -#: virtualization/forms/bulk_import.py:66 -#: virtualization/forms/bulk_import.py:115 -#: virtualization/forms/filtersets.py:47 -#: virtualization/forms/filtersets.py:105 vpn/forms/bulk_edit.py:59 -#: vpn/forms/bulk_edit.py:269 vpn/forms/bulk_import.py:59 -#: vpn/forms/bulk_import.py:258 vpn/forms/filtersets.py:214 -#: wireless/forms/bulk_edit.py:63 wireless/forms/bulk_edit.py:110 -#: wireless/forms/bulk_import.py:55 wireless/forms/bulk_import.py:97 -#: wireless/forms/filtersets.py:35 wireless/forms/filtersets.py:75 +#: netbox/circuits/forms/bulk_edit.py: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/templates/circuits/circuitgroup.html:36 +#: 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 +#: netbox/templates/dcim/rackreservation.html:49 +#: netbox/templates/dcim/site.html:47 +#: netbox/templates/dcim/virtualdevicecontext.html:52 +#: netbox/templates/ipam/aggregate.html:30 netbox/templates/ipam/asn.html:33 +#: netbox/templates/ipam/asnrange.html:29 +#: netbox/templates/ipam/ipaddress.html:28 +#: netbox/templates/ipam/iprange.html:58 netbox/templates/ipam/prefix.html:29 +#: netbox/templates/ipam/routetarget.html:17 +#: netbox/templates/ipam/vlan.html:39 netbox/templates/ipam/vrf.html:20 +#: netbox/templates/tenancy/tenant.html:17 +#: netbox/templates/virtualization/cluster.html:33 +#: netbox/templates/virtualization/virtualmachine.html:39 +#: netbox/templates/vpn/l2vpn.html:30 netbox/templates/vpn/tunnel.html:49 +#: netbox/templates/wireless/wirelesslan.html:34 +#: netbox/templates/wireless/wirelesslink.html:25 +#: netbox/tenancy/forms/forms.py:25 netbox/tenancy/forms/forms.py:48 +#: netbox/tenancy/forms/model_forms.py:52 netbox/tenancy/tables/columns.py:64 +#: netbox/virtualization/forms/bulk_edit.py:76 +#: netbox/virtualization/forms/bulk_edit.py:155 +#: netbox/virtualization/forms/bulk_import.py:66 +#: netbox/virtualization/forms/bulk_import.py:115 +#: netbox/virtualization/forms/filtersets.py:47 +#: netbox/virtualization/forms/filtersets.py:105 +#: netbox/vpn/forms/bulk_edit.py:59 netbox/vpn/forms/bulk_edit.py:269 +#: netbox/vpn/forms/bulk_import.py:59 netbox/vpn/forms/bulk_import.py:258 +#: netbox/vpn/forms/filtersets.py:214 netbox/wireless/forms/bulk_edit.py:63 +#: netbox/wireless/forms/bulk_edit.py:110 +#: netbox/wireless/forms/bulk_import.py:55 +#: netbox/wireless/forms/bulk_import.py:97 +#: netbox/wireless/forms/filtersets.py:35 +#: netbox/wireless/forms/filtersets.py:75 msgid "Tenant" msgstr "Орендар" -#: circuits/forms/bulk_edit.py:147 circuits/forms/filtersets.py:174 +#: netbox/circuits/forms/bulk_edit.py:147 +#: netbox/circuits/forms/filtersets.py:174 msgid "Install date" msgstr "Дата встановлення" -#: circuits/forms/bulk_edit.py:152 circuits/forms/filtersets.py:179 +#: netbox/circuits/forms/bulk_edit.py:152 +#: netbox/circuits/forms/filtersets.py:179 msgid "Termination date" msgstr "Дата припинення дії" -#: circuits/forms/bulk_edit.py:158 circuits/forms/filtersets.py:186 +#: netbox/circuits/forms/bulk_edit.py:158 +#: netbox/circuits/forms/filtersets.py:186 msgid "Commit rate (Kbps)" -msgstr "Гарантована мінімальна швідкість (Кбіт/с)" +msgstr "Гарантована мінімальна швидкість (Кбіт/с)" -#: circuits/forms/bulk_edit.py:173 circuits/forms/model_forms.py:112 +#: netbox/circuits/forms/bulk_edit.py:173 +#: netbox/circuits/forms/model_forms.py:112 msgid "Service Parameters" msgstr "Параметри обслуговування" -#: circuits/forms/bulk_edit.py:174 circuits/forms/model_forms.py:113 -#: circuits/forms/model_forms.py:183 dcim/forms/model_forms.py:139 -#: dcim/forms/model_forms.py:181 dcim/forms/model_forms.py:266 -#: dcim/forms/model_forms.py:323 dcim/forms/model_forms.py:768 -#: dcim/forms/model_forms.py:1692 ipam/forms/model_forms.py:64 -#: ipam/forms/model_forms.py:81 ipam/forms/model_forms.py:115 -#: ipam/forms/model_forms.py:136 ipam/forms/model_forms.py:160 -#: ipam/forms/model_forms.py:232 ipam/forms/model_forms.py:261 -#: ipam/forms/model_forms.py:316 netbox/navigation/menu.py:24 -#: templates/dcim/device_edit.html:85 templates/dcim/htmx/cable_edit.html:72 -#: templates/ipam/ipaddress_bulk_add.html:27 templates/ipam/vlan_edit.html:22 -#: virtualization/forms/model_forms.py:80 -#: virtualization/forms/model_forms.py:222 vpn/forms/bulk_edit.py:78 -#: vpn/forms/filtersets.py:44 vpn/forms/model_forms.py:62 -#: vpn/forms/model_forms.py:147 vpn/forms/model_forms.py:411 -#: wireless/forms/model_forms.py:54 wireless/forms/model_forms.py:170 +#: 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/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/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 msgid "Tenancy" msgstr "Оренда" -#: circuits/forms/bulk_edit.py:193 circuits/forms/bulk_edit.py:217 -#: circuits/forms/model_forms.py:155 circuits/tables/circuits.py:117 -#: templates/circuits/inc/circuit_termination_fields.html:62 -#: templates/circuits/providernetwork.html:17 +#: 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 "Мережа провайдерів" +msgstr "Мережа провайдера" -#: circuits/forms/bulk_edit.py:199 +#: netbox/circuits/forms/bulk_edit.py:199 msgid "Port speed (Kbps)" msgstr "Швидкість порту (Кбіт/с)" -#: circuits/forms/bulk_edit.py:203 +#: netbox/circuits/forms/bulk_edit.py:203 msgid "Upstream speed (Kbps)" msgstr "Швидкість висхідного потоку (Кбіт/с)" -#: circuits/forms/bulk_edit.py:206 dcim/forms/bulk_edit.py:951 -#: dcim/forms/bulk_edit.py:1315 dcim/forms/bulk_edit.py:1332 -#: dcim/forms/bulk_edit.py:1349 dcim/forms/bulk_edit.py:1367 -#: dcim/forms/bulk_edit.py:1455 dcim/forms/bulk_edit.py:1594 -#: dcim/forms/bulk_edit.py:1611 +#: 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 msgid "Mark connected" -msgstr "Позначка з'єднана" +msgstr "Позначити з'єднаним" -#: circuits/forms/bulk_edit.py:219 circuits/forms/model_forms.py:157 -#: templates/circuits/inc/circuit_termination_fields.html:54 -#: templates/dcim/frontport.html:121 templates/dcim/interface.html:193 -#: templates/dcim/rearport.html:111 +#: netbox/circuits/forms/bulk_edit.py:219 +#: netbox/circuits/forms/model_forms.py:157 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:54 +#: netbox/templates/dcim/frontport.html:121 +#: netbox/templates/dcim/interface.html:193 +#: netbox/templates/dcim/rearport.html:111 msgid "Circuit Termination" msgstr "Кінець каналу зв'язку" -#: circuits/forms/bulk_edit.py:221 circuits/forms/model_forms.py:159 +#: netbox/circuits/forms/bulk_edit.py:221 +#: netbox/circuits/forms/model_forms.py:159 msgid "Termination Details" -msgstr "Деталі припинення" +msgstr "Деталі кінця" -#: circuits/forms/bulk_edit.py:251 circuits/forms/filtersets.py:268 -#: circuits/tables/circuits.py:168 dcim/forms/model_forms.py:551 -#: templates/circuits/circuitgroupassignment.html:30 -#: templates/dcim/device.html:133 templates/dcim/virtualchassis.html:68 -#: templates/dcim/virtualchassis_edit.html:56 -#: templates/ipam/inc/panels/fhrp_groups.html:26 -#: tenancy/forms/bulk_edit.py:147 tenancy/forms/filtersets.py:110 +#: netbox/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/templates/dcim/device.html:133 +#: netbox/templates/dcim/virtualchassis.html:68 +#: netbox/templates/dcim/virtualchassis_edit.html:56 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:26 +#: netbox/tenancy/forms/bulk_edit.py:147 +#: netbox/tenancy/forms/filtersets.py:110 msgid "Priority" msgstr "Пріоритет" -#: circuits/forms/bulk_import.py:39 circuits/forms/bulk_import.py:54 -#: circuits/forms/bulk_import.py:77 +#: 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 "Призначений провайдер" -#: circuits/forms/bulk_import.py:83 +#: netbox/circuits/forms/bulk_import.py:83 msgid "Assigned provider account" -msgstr "Призначений обліковий запис постачальника" +msgstr "Призначений обліковий запис провайдера" -#: circuits/forms/bulk_import.py:90 +#: netbox/circuits/forms/bulk_import.py:90 msgid "Type of circuit" msgstr "Тип каналу зв'язку" -#: circuits/forms/bulk_import.py:95 dcim/forms/bulk_import.py:90 -#: dcim/forms/bulk_import.py:149 dcim/forms/bulk_import.py:250 -#: dcim/forms/bulk_import.py:507 dcim/forms/bulk_import.py:661 -#: dcim/forms/bulk_import.py:1373 ipam/forms/bulk_import.py:194 -#: ipam/forms/bulk_import.py:259 ipam/forms/bulk_import.py:295 -#: ipam/forms/bulk_import.py:452 virtualization/forms/bulk_import.py:56 -#: virtualization/forms/bulk_import.py:82 vpn/forms/bulk_import.py:39 -#: wireless/forms/bulk_import.py:45 +#: netbox/circuits/forms/bulk_import.py: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 "Операційний стан" -#: circuits/forms/bulk_import.py:102 circuits/forms/bulk_import.py:162 -#: dcim/forms/bulk_import.py:111 dcim/forms/bulk_import.py:156 -#: dcim/forms/bulk_import.py:338 dcim/forms/bulk_import.py:483 -#: dcim/forms/bulk_import.py:1223 dcim/forms/bulk_import.py:1368 -#: dcim/forms/bulk_import.py:1432 ipam/forms/bulk_import.py:42 -#: ipam/forms/bulk_import.py:71 ipam/forms/bulk_import.py:99 -#: ipam/forms/bulk_import.py:119 ipam/forms/bulk_import.py:139 -#: ipam/forms/bulk_import.py:168 ipam/forms/bulk_import.py:254 -#: ipam/forms/bulk_import.py:290 ipam/forms/bulk_import.py:447 -#: virtualization/forms/bulk_import.py:70 -#: virtualization/forms/bulk_import.py:119 vpn/forms/bulk_import.py:63 -#: wireless/forms/bulk_import.py:59 wireless/forms/bulk_import.py:101 +#: netbox/circuits/forms/bulk_import.py: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 "Призначений орендар" -#: circuits/forms/bulk_import.py:120 -#: templates/circuits/inc/circuit_termination.html:6 -#: templates/circuits/inc/circuit_termination_fields.html:15 -#: templates/dcim/cable.html:68 templates/dcim/cable.html:72 -#: vpn/forms/bulk_import.py:100 vpn/forms/filtersets.py:77 +#: netbox/circuits/forms/bulk_import.py: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 "Припинення" +msgstr "Кінець" -#: circuits/forms/bulk_import.py:130 circuits/forms/filtersets.py:147 -#: circuits/forms/filtersets.py:227 circuits/forms/model_forms.py:144 +#: 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 msgid "Provider network" -msgstr "Мережа провайдерів" +msgstr "Мережа провайдера" -#: circuits/forms/filtersets.py:30 circuits/forms/filtersets.py:118 -#: circuits/forms/filtersets.py:200 dcim/forms/bulk_edit.py:338 -#: dcim/forms/bulk_edit.py:441 dcim/forms/bulk_edit.py:682 -#: dcim/forms/bulk_edit.py:729 dcim/forms/bulk_edit.py:882 -#: dcim/forms/bulk_import.py:235 dcim/forms/bulk_import.py:315 -#: dcim/forms/bulk_import.py:546 dcim/forms/bulk_import.py:1317 -#: dcim/forms/bulk_import.py:1351 dcim/forms/filtersets.py:95 -#: dcim/forms/filtersets.py:322 dcim/forms/filtersets.py:356 -#: dcim/forms/filtersets.py:396 dcim/forms/filtersets.py:447 -#: dcim/forms/filtersets.py:719 dcim/forms/filtersets.py:762 -#: dcim/forms/filtersets.py:977 dcim/forms/filtersets.py:1006 -#: dcim/forms/filtersets.py:1026 dcim/forms/filtersets.py:1090 -#: dcim/forms/filtersets.py:1120 dcim/forms/filtersets.py:1129 -#: dcim/forms/filtersets.py:1240 dcim/forms/filtersets.py:1264 -#: dcim/forms/filtersets.py:1289 dcim/forms/filtersets.py:1308 -#: dcim/forms/filtersets.py:1331 dcim/forms/filtersets.py:1442 -#: dcim/forms/filtersets.py:1466 dcim/forms/filtersets.py:1490 -#: dcim/forms/filtersets.py:1508 dcim/forms/filtersets.py:1525 -#: dcim/forms/model_forms.py:180 dcim/forms/model_forms.py:243 -#: dcim/forms/model_forms.py:468 dcim/forms/model_forms.py:728 -#: dcim/tables/devices.py:157 dcim/tables/power.py:30 dcim/tables/racks.py:118 -#: dcim/tables/racks.py:212 extras/filtersets.py:536 -#: extras/forms/filtersets.py:320 ipam/forms/filtersets.py:173 -#: ipam/forms/filtersets.py:414 ipam/forms/filtersets.py:437 -#: ipam/forms/filtersets.py:467 templates/dcim/device.html:26 -#: templates/dcim/device_edit.html:30 -#: templates/dcim/inc/cable_termination.html:12 -#: templates/dcim/location.html:26 templates/dcim/powerpanel.html:26 -#: templates/dcim/rack.html:24 templates/dcim/rackreservation.html:32 -#: virtualization/forms/filtersets.py:46 -#: virtualization/forms/filtersets.py:100 wireless/forms/model_forms.py:87 -#: wireless/forms/model_forms.py:129 +#: netbox/circuits/forms/filtersets.py: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/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 msgid "Location" msgstr "Розташування" -#: circuits/forms/filtersets.py:32 circuits/forms/filtersets.py:120 -#: dcim/forms/filtersets.py:144 dcim/forms/filtersets.py:158 -#: dcim/forms/filtersets.py:174 dcim/forms/filtersets.py:206 -#: dcim/forms/filtersets.py:328 dcim/forms/filtersets.py:400 -#: dcim/forms/filtersets.py:471 dcim/forms/filtersets.py:723 -#: dcim/forms/filtersets.py:1091 netbox/navigation/menu.py:31 -#: netbox/navigation/menu.py:33 tenancy/forms/filtersets.py:42 -#: tenancy/tables/columns.py:70 tenancy/tables/contacts.py:25 -#: tenancy/views.py:19 virtualization/forms/filtersets.py:37 -#: virtualization/forms/filtersets.py:48 -#: virtualization/forms/filtersets.py:106 +#: netbox/circuits/forms/filtersets.py: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/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/tables/contacts.py:25 netbox/tenancy/views.py:19 +#: netbox/virtualization/forms/filtersets.py:37 +#: netbox/virtualization/forms/filtersets.py:48 +#: netbox/virtualization/forms/filtersets.py:106 msgid "Contacts" msgstr "Контакти" -#: circuits/forms/filtersets.py:37 circuits/forms/filtersets.py:157 -#: dcim/forms/bulk_edit.py:112 dcim/forms/bulk_edit.py:313 -#: dcim/forms/bulk_edit.py:857 dcim/forms/bulk_import.py:93 -#: dcim/forms/filtersets.py:73 dcim/forms/filtersets.py:185 -#: dcim/forms/filtersets.py:211 dcim/forms/filtersets.py:334 -#: dcim/forms/filtersets.py:425 dcim/forms/filtersets.py:739 -#: dcim/forms/filtersets.py:983 dcim/forms/filtersets.py:1013 -#: dcim/forms/filtersets.py:1097 dcim/forms/filtersets.py:1136 -#: dcim/forms/filtersets.py:1576 dcim/forms/filtersets.py:1600 -#: dcim/forms/filtersets.py:1624 dcim/forms/model_forms.py:112 -#: dcim/forms/object_create.py:375 dcim/tables/devices.py:143 -#: dcim/tables/sites.py:85 extras/filtersets.py:503 -#: ipam/forms/bulk_edit.py:208 ipam/forms/bulk_edit.py:474 -#: ipam/forms/filtersets.py:217 ipam/forms/filtersets.py:422 -#: ipam/forms/filtersets.py:475 templates/dcim/device.html:18 -#: templates/dcim/rack.html:16 templates/dcim/rackreservation.html:22 -#: templates/dcim/region.html:26 templates/dcim/site.html:31 -#: templates/ipam/prefix.html:49 templates/ipam/vlan.html:16 -#: virtualization/forms/bulk_edit.py:81 virtualization/forms/filtersets.py:59 -#: virtualization/forms/filtersets.py:133 -#: virtualization/forms/model_forms.py:92 vpn/forms/filtersets.py:257 +#: netbox/circuits/forms/filtersets.py: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/templates/dcim/rackreservation.html:22 +#: netbox/templates/dcim/region.html:26 netbox/templates/dcim/site.html:31 +#: netbox/templates/ipam/prefix.html:49 netbox/templates/ipam/vlan.html:16 +#: netbox/virtualization/forms/bulk_edit.py:81 +#: netbox/virtualization/forms/filtersets.py:59 +#: netbox/virtualization/forms/filtersets.py:133 +#: netbox/virtualization/forms/model_forms.py:92 +#: netbox/vpn/forms/filtersets.py:257 msgid "Region" msgstr "Регіон" -#: circuits/forms/filtersets.py:42 circuits/forms/filtersets.py:162 -#: dcim/forms/bulk_edit.py:321 dcim/forms/bulk_edit.py:865 -#: dcim/forms/filtersets.py:78 dcim/forms/filtersets.py:190 -#: dcim/forms/filtersets.py:216 dcim/forms/filtersets.py:347 -#: dcim/forms/filtersets.py:430 dcim/forms/filtersets.py:744 -#: dcim/forms/filtersets.py:988 dcim/forms/filtersets.py:1102 -#: dcim/forms/filtersets.py:1141 dcim/forms/object_create.py:383 -#: extras/filtersets.py:520 ipam/forms/bulk_edit.py:213 -#: ipam/forms/bulk_edit.py:479 ipam/forms/filtersets.py:222 -#: ipam/forms/filtersets.py:427 ipam/forms/filtersets.py:480 -#: virtualization/forms/bulk_edit.py:86 virtualization/forms/filtersets.py:69 -#: virtualization/forms/filtersets.py:138 -#: virtualization/forms/model_forms.py:98 +#: netbox/circuits/forms/filtersets.py: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/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 msgid "Site group" msgstr "Група тех. майданчиків" -#: circuits/forms/filtersets.py:65 circuits/forms/filtersets.py:83 -#: circuits/forms/filtersets.py:102 circuits/forms/filtersets.py:117 -#: core/forms/filtersets.py:67 core/forms/filtersets.py:135 -#: dcim/forms/bulk_edit.py:828 dcim/forms/filtersets.py:172 -#: dcim/forms/filtersets.py:204 dcim/forms/filtersets.py:915 -#: dcim/forms/filtersets.py:1007 dcim/forms/filtersets.py:1131 -#: dcim/forms/filtersets.py:1239 dcim/forms/filtersets.py:1263 -#: dcim/forms/filtersets.py:1288 dcim/forms/filtersets.py:1307 -#: dcim/forms/filtersets.py:1327 dcim/forms/filtersets.py:1441 -#: dcim/forms/filtersets.py:1465 dcim/forms/filtersets.py:1489 -#: dcim/forms/filtersets.py:1507 dcim/forms/filtersets.py:1523 -#: extras/forms/bulk_edit.py:90 extras/forms/filtersets.py:44 -#: extras/forms/filtersets.py:134 extras/forms/filtersets.py:165 -#: extras/forms/filtersets.py:205 extras/forms/filtersets.py:221 -#: extras/forms/filtersets.py:252 extras/forms/filtersets.py:276 -#: extras/forms/filtersets.py:441 ipam/forms/filtersets.py:99 -#: ipam/forms/filtersets.py:266 ipam/forms/filtersets.py:307 -#: ipam/forms/filtersets.py:382 ipam/forms/filtersets.py:468 -#: ipam/forms/filtersets.py:527 ipam/forms/filtersets.py:545 -#: netbox/tables/tables.py:256 virtualization/forms/filtersets.py:45 -#: virtualization/forms/filtersets.py:103 -#: virtualization/forms/filtersets.py:198 -#: virtualization/forms/filtersets.py:243 vpn/forms/filtersets.py:213 -#: wireless/forms/bulk_edit.py:150 wireless/forms/filtersets.py:34 -#: wireless/forms/filtersets.py:74 +#: 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 "Атрибути" -#: circuits/forms/filtersets.py:73 circuits/tables/circuits.py:63 -#: circuits/tables/providers.py:66 templates/circuits/circuit.html:22 -#: templates/circuits/provideraccount.html:24 +#: netbox/circuits/forms/filtersets.py:73 +#: netbox/circuits/tables/circuits.py:63 +#: netbox/circuits/tables/providers.py:66 +#: netbox/templates/circuits/circuit.html:22 +#: netbox/templates/circuits/provideraccount.html:24 msgid "Account" -msgstr "Рахунок" +msgstr "Обліковий запис" -#: circuits/forms/filtersets.py:217 +#: netbox/circuits/forms/filtersets.py:217 msgid "Term Side" -msgstr "Сторона терміну" +msgstr "Сторона завершення" -#: circuits/forms/filtersets.py:250 extras/forms/model_forms.py:582 -#: ipam/forms/filtersets.py:142 ipam/forms/filtersets.py:546 -#: ipam/forms/model_forms.py:323 templates/extras/configcontext.html:60 -#: templates/ipam/ipaddress.html:59 templates/ipam/vlan_edit.html:30 -#: tenancy/forms/filtersets.py:87 users/forms/model_forms.py:314 +#: 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/templates/extras/configcontext.html:60 +#: netbox/templates/ipam/ipaddress.html:59 +#: netbox/templates/ipam/vlan_edit.html:30 +#: netbox/tenancy/forms/filtersets.py:87 netbox/users/forms/model_forms.py:314 msgid "Assignment" msgstr "Призначення" -#: circuits/forms/filtersets.py:265 circuits/forms/model_forms.py:195 -#: circuits/tables/circuits.py:155 dcim/forms/bulk_edit.py:117 -#: dcim/forms/bulk_import.py:100 dcim/forms/model_forms.py:117 -#: dcim/tables/sites.py:89 extras/forms/filtersets.py:480 -#: ipam/filtersets.py:999 ipam/forms/bulk_edit.py:493 -#: ipam/forms/bulk_import.py:436 ipam/forms/model_forms.py:528 -#: ipam/tables/fhrp.py:67 ipam/tables/vlans.py:122 ipam/tables/vlans.py:226 -#: templates/circuits/circuitgroupassignment.html:22 -#: templates/dcim/interface.html:284 templates/dcim/site.html:37 -#: templates/ipam/inc/panels/fhrp_groups.html:23 templates/ipam/vlan.html:27 -#: templates/tenancy/contact.html:21 templates/tenancy/tenant.html:20 -#: templates/users/group.html:6 templates/users/group.html:14 -#: templates/virtualization/cluster.html:29 templates/vpn/tunnel.html:29 -#: templates/wireless/wirelesslan.html:18 tenancy/forms/bulk_edit.py:43 -#: tenancy/forms/bulk_edit.py:94 tenancy/forms/bulk_import.py:40 -#: tenancy/forms/bulk_import.py:81 tenancy/forms/filtersets.py:48 -#: tenancy/forms/filtersets.py:78 tenancy/forms/filtersets.py:97 -#: tenancy/forms/model_forms.py:45 tenancy/forms/model_forms.py:97 -#: tenancy/forms/model_forms.py:122 tenancy/tables/contacts.py:60 -#: tenancy/tables/contacts.py:107 tenancy/tables/tenants.py:42 -#: users/filtersets.py:62 users/filtersets.py:185 users/forms/filtersets.py:31 -#: users/forms/filtersets.py:37 users/forms/filtersets.py:79 -#: virtualization/forms/bulk_edit.py:65 virtualization/forms/bulk_import.py:47 -#: virtualization/forms/filtersets.py:85 -#: virtualization/forms/model_forms.py:66 virtualization/tables/clusters.py:70 -#: vpn/forms/bulk_edit.py:112 vpn/forms/bulk_import.py:158 -#: vpn/forms/filtersets.py:116 vpn/tables/crypto.py:31 -#: vpn/tables/tunnels.py:44 wireless/forms/bulk_edit.py:48 -#: wireless/forms/bulk_import.py:36 wireless/forms/filtersets.py:46 -#: wireless/forms/model_forms.py:40 wireless/tables/wirelesslan.py:48 +#: netbox/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:999 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/templates/circuits/circuitgroupassignment.html:22 +#: netbox/templates/dcim/interface.html:284 netbox/templates/dcim/site.html:37 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:23 +#: netbox/templates/ipam/vlan.html:27 netbox/templates/tenancy/contact.html:21 +#: netbox/templates/tenancy/tenant.html:20 netbox/templates/users/group.html:6 +#: netbox/templates/users/group.html:14 +#: netbox/templates/virtualization/cluster.html:29 +#: netbox/templates/vpn/tunnel.html:29 +#: netbox/templates/wireless/wirelesslan.html:18 +#: netbox/tenancy/forms/bulk_edit.py:43 netbox/tenancy/forms/bulk_edit.py:94 +#: netbox/tenancy/forms/bulk_import.py:40 +#: netbox/tenancy/forms/bulk_import.py:81 +#: netbox/tenancy/forms/filtersets.py:48 netbox/tenancy/forms/filtersets.py:78 +#: netbox/tenancy/forms/filtersets.py:97 +#: netbox/tenancy/forms/model_forms.py:45 +#: netbox/tenancy/forms/model_forms.py:97 +#: netbox/tenancy/forms/model_forms.py:122 +#: netbox/tenancy/tables/contacts.py:60 netbox/tenancy/tables/contacts.py:107 +#: netbox/tenancy/tables/tenants.py:42 netbox/users/filtersets.py: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/tables/clusters.py:70 +#: netbox/vpn/forms/bulk_edit.py:112 netbox/vpn/forms/bulk_import.py:158 +#: netbox/vpn/forms/filtersets.py:116 netbox/vpn/tables/crypto.py:31 +#: netbox/vpn/tables/tunnels.py:44 netbox/wireless/forms/bulk_edit.py:48 +#: netbox/wireless/forms/bulk_import.py:36 +#: netbox/wireless/forms/filtersets.py:46 +#: netbox/wireless/forms/model_forms.py:40 +#: netbox/wireless/tables/wirelesslan.py:48 msgid "Group" msgstr "Група" -#: circuits/forms/model_forms.py:182 templates/circuits/circuitgroup.html:25 +#: netbox/circuits/forms/model_forms.py:182 +#: netbox/templates/circuits/circuitgroup.html:25 msgid "Circuit Group" -msgstr "Група каналу зв'язку" +msgstr "Група каналів зв'язку" -#: circuits/models/circuits.py:27 dcim/models/cables.py:67 -#: dcim/models/device_component_templates.py:517 -#: dcim/models/device_component_templates.py:617 -#: dcim/models/device_components.py:975 dcim/models/device_components.py:1049 -#: dcim/models/device_components.py:1204 dcim/models/devices.py:479 -#: dcim/models/racks.py:224 extras/models/tags.py:28 +#: 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/extras/models/tags.py:28 msgid "color" msgstr "колір" -#: circuits/models/circuits.py:36 +#: netbox/circuits/models/circuits.py:36 msgid "circuit type" msgstr "тип каналу зв'язку" -#: circuits/models/circuits.py:37 +#: netbox/circuits/models/circuits.py:37 msgid "circuit types" msgstr "типи каналів зв'язку" -#: circuits/models/circuits.py:48 +#: netbox/circuits/models/circuits.py:48 msgid "circuit ID" -msgstr "iдентифікатор каналу зв'язку" +msgstr "ідентифікатор каналу зв'язку" -#: circuits/models/circuits.py:49 +#: netbox/circuits/models/circuits.py:49 msgid "Unique circuit ID" msgstr "Унікальний ідентифікатор каналу зв'язку" -#: circuits/models/circuits.py:69 core/models/data.py:52 -#: core/models/jobs.py:84 dcim/models/cables.py:49 dcim/models/devices.py:653 -#: dcim/models/devices.py:1173 dcim/models/devices.py:1399 -#: dcim/models/power.py:96 dcim/models/racks.py:297 dcim/models/sites.py:154 -#: dcim/models/sites.py:266 ipam/models/ip.py:253 ipam/models/ip.py:522 -#: ipam/models/ip.py:730 ipam/models/vlans.py:195 -#: virtualization/models/clusters.py:74 -#: virtualization/models/virtualmachines.py:84 vpn/models/tunnels.py:40 -#: wireless/models.py:95 wireless/models.py:159 +#: 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 msgid "status" msgstr "статус" -#: circuits/models/circuits.py:84 templates/core/plugin.html:20 +#: netbox/circuits/models/circuits.py:84 netbox/templates/core/plugin.html:20 msgid "installed" msgstr "встановлено" -#: circuits/models/circuits.py:89 +#: netbox/circuits/models/circuits.py:89 msgid "terminates" msgstr "припинється" -#: circuits/models/circuits.py:94 +#: netbox/circuits/models/circuits.py:94 msgid "commit rate (Kbps)" -msgstr "гарантована мінімальна швідкість (Кбіт/с)" +msgstr "гарантована швидкість (Кбіт/с)" -#: circuits/models/circuits.py:95 +#: netbox/circuits/models/circuits.py:95 msgid "Committed rate" -msgstr "Гарантирована швідкість" +msgstr "Гарантована швидкість" -#: circuits/models/circuits.py:137 +#: netbox/circuits/models/circuits.py:137 msgid "circuit" msgstr "канал зв'язку" -#: circuits/models/circuits.py:138 +#: netbox/circuits/models/circuits.py:138 msgid "circuits" msgstr "канали зв'язку" -#: circuits/models/circuits.py:170 +#: netbox/circuits/models/circuits.py:170 msgid "circuit group" -msgstr "група каналу зв'язку" +msgstr "група каналів зв'язку" -#: circuits/models/circuits.py:171 +#: netbox/circuits/models/circuits.py:171 msgid "circuit groups" msgstr "групи каналів зв'язку" -#: circuits/models/circuits.py:195 ipam/models/fhrp.py:93 -#: tenancy/models/contacts.py:134 +#: netbox/circuits/models/circuits.py:195 netbox/ipam/models/fhrp.py:93 +#: netbox/tenancy/models/contacts.py:134 msgid "priority" msgstr "пріоритет" -#: circuits/models/circuits.py:213 +#: netbox/circuits/models/circuits.py:213 msgid "Circuit group assignment" msgstr "Призначення групи каналів зв'язку" -#: circuits/models/circuits.py:214 +#: netbox/circuits/models/circuits.py:214 msgid "Circuit group assignments" msgstr "Призначення групи каналів зв'язку" -#: circuits/models/circuits.py:240 +#: netbox/circuits/models/circuits.py:240 msgid "termination" -msgstr "припинення" +msgstr "кінець" -#: circuits/models/circuits.py:257 +#: netbox/circuits/models/circuits.py:257 msgid "port speed (Kbps)" msgstr "швидкість порту (Кбіт/с)" -#: circuits/models/circuits.py:260 +#: netbox/circuits/models/circuits.py:260 msgid "Physical circuit speed" msgstr "Фізична швидкість каналу зв'язку" -#: circuits/models/circuits.py:265 +#: netbox/circuits/models/circuits.py:265 msgid "upstream speed (Kbps)" msgstr "швидкість висхідного потоку (Кбіт/с)" -#: circuits/models/circuits.py:266 +#: netbox/circuits/models/circuits.py:266 msgid "Upstream speed, if different from port speed" -msgstr "Швидкість висхідного потоку, якщо відрізняється від швидкості порту" +msgstr "" +"Швидкість висхідного потоку, якщо вона відрізняється від швидкості порту" -#: circuits/models/circuits.py:271 +#: netbox/circuits/models/circuits.py:271 msgid "cross-connect ID" msgstr "ідентифікатор перехресного з'єднання" -#: circuits/models/circuits.py:272 +#: netbox/circuits/models/circuits.py:272 msgid "ID of the local cross-connect" msgstr "Ідентифікатор локального перехресного з'єднання" -#: circuits/models/circuits.py:277 +#: netbox/circuits/models/circuits.py:277 msgid "patch panel/port(s)" msgstr "патч-панель/порт(и)" -#: circuits/models/circuits.py:278 +#: netbox/circuits/models/circuits.py:278 msgid "Patch panel ID and port number(s)" msgstr "Ідентифікатор патч-панелі та номер(и) порту" -#: circuits/models/circuits.py:281 -#: dcim/models/device_component_templates.py:61 -#: dcim/models/device_components.py:68 dcim/models/racks.py:685 -#: extras/models/configs.py:45 extras/models/configs.py:219 -#: extras/models/customfields.py:125 extras/models/models.py:61 -#: extras/models/models.py:158 extras/models/models.py:396 -#: extras/models/models.py:511 extras/models/notifications.py:131 -#: extras/models/staging.py:31 extras/models/tags.py:32 -#: netbox/models/__init__.py:110 netbox/models/__init__.py:145 -#: netbox/models/__init__.py:191 users/models/permissions.py:24 -#: users/models/tokens.py:57 users/models/users.py:33 -#: virtualization/models/virtualmachines.py:289 +#: 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/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 msgid "description" msgstr "опис" -#: circuits/models/circuits.py:294 +#: netbox/circuits/models/circuits.py:294 msgid "circuit termination" msgstr "кінець каналу зв'язку" -#: circuits/models/circuits.py:295 +#: netbox/circuits/models/circuits.py:295 msgid "circuit terminations" msgstr "кінці каналу зв'язку" -#: circuits/models/circuits.py:308 +#: netbox/circuits/models/circuits.py:308 msgid "" "A circuit termination must attach to either a site or a provider network." msgstr "" "Кінець каналу зв'язку повинно приєднатися або до тех. майданчику, або до " "мережі провайдера." -#: circuits/models/circuits.py:310 +#: netbox/circuits/models/circuits.py:310 msgid "" "A circuit termination cannot attach to both a site and a provider network." msgstr "" "Обідви кінці каналу зв'язку не може приєднатися як до тех. майданчику, так і" " до мережі провайдера." -#: circuits/models/providers.py:22 circuits/models/providers.py:66 -#: circuits/models/providers.py:104 core/models/data.py:39 -#: core/models/jobs.py:45 dcim/models/device_component_templates.py:43 -#: dcim/models/device_components.py:53 dcim/models/devices.py:593 -#: dcim/models/devices.py:1330 dcim/models/devices.py:1395 -#: dcim/models/power.py:39 dcim/models/power.py:92 dcim/models/racks.py:262 -#: dcim/models/sites.py:138 extras/models/configs.py:36 -#: extras/models/configs.py:215 extras/models/customfields.py:92 -#: extras/models/models.py:56 extras/models/models.py:153 -#: extras/models/models.py:296 extras/models/models.py:392 -#: extras/models/models.py:501 extras/models/models.py:596 -#: extras/models/notifications.py:126 extras/models/scripts.py:30 -#: extras/models/staging.py:26 ipam/models/asns.py:18 ipam/models/fhrp.py:25 -#: ipam/models/services.py:52 ipam/models/services.py:88 -#: ipam/models/vlans.py:36 ipam/models/vlans.py:184 ipam/models/vrfs.py:22 -#: ipam/models/vrfs.py:79 netbox/models/__init__.py:137 -#: netbox/models/__init__.py:181 tenancy/models/contacts.py:64 -#: tenancy/models/tenants.py:20 tenancy/models/tenants.py:45 -#: users/models/permissions.py:20 users/models/users.py:28 -#: virtualization/models/clusters.py:57 -#: virtualization/models/virtualmachines.py:72 -#: virtualization/models/virtualmachines.py:279 vpn/models/crypto.py:24 -#: vpn/models/crypto.py:71 vpn/models/crypto.py:131 vpn/models/crypto.py:183 -#: vpn/models/crypto.py:221 vpn/models/l2vpn.py:22 vpn/models/tunnels.py:35 -#: wireless/models.py:51 +#: 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/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/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 msgid "name" -msgstr "найменування" +msgstr "назва" -#: circuits/models/providers.py:25 +#: netbox/circuits/models/providers.py:25 msgid "Full name of the provider" -msgstr "Повне найменування провайдера" +msgstr "Повна назва провайдера" -#: circuits/models/providers.py:28 dcim/models/devices.py:86 -#: dcim/models/racks.py:137 dcim/models/sites.py:149 -#: extras/models/models.py:506 ipam/models/asns.py:23 ipam/models/vlans.py:40 -#: netbox/models/__init__.py:141 netbox/models/__init__.py:186 -#: tenancy/models/tenants.py:25 tenancy/models/tenants.py:49 -#: vpn/models/l2vpn.py:27 wireless/models.py:56 +#: netbox/circuits/models/providers.py:28 netbox/dcim/models/devices.py:86 +#: 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 msgid "slug" msgstr "скорочення" -#: circuits/models/providers.py:42 +#: netbox/circuits/models/providers.py:42 msgid "provider" msgstr "провайдер" -#: circuits/models/providers.py:43 +#: netbox/circuits/models/providers.py:43 msgid "providers" msgstr "провайдери" -#: circuits/models/providers.py:63 +#: netbox/circuits/models/providers.py:63 msgid "account ID" -msgstr "iдентифікатор рахунку" +msgstr "ідентифікатор облікового запису" -#: circuits/models/providers.py:86 +#: netbox/circuits/models/providers.py:86 msgid "provider account" msgstr "обліковий запис провайдера" -#: circuits/models/providers.py:87 +#: netbox/circuits/models/providers.py:87 msgid "provider accounts" -msgstr "акаунти провайдера" +msgstr "облікові записи провайдера" -#: circuits/models/providers.py:115 +#: netbox/circuits/models/providers.py:115 msgid "service ID" -msgstr "iдентифікатор послуги" +msgstr "ідентифікатор послуги" -#: circuits/models/providers.py:126 +#: netbox/circuits/models/providers.py:126 msgid "provider network" msgstr "мережа провайдера" -#: circuits/models/providers.py:127 +#: netbox/circuits/models/providers.py:127 msgid "provider networks" -msgstr "мережі провайдерів" +msgstr "мережі провайдера" -#: circuits/tables/circuits.py:32 circuits/tables/circuits.py:132 -#: circuits/tables/providers.py:18 circuits/tables/providers.py:69 -#: circuits/tables/providers.py:99 core/tables/data.py:16 -#: core/tables/jobs.py:14 core/tables/plugins.py:44 core/tables/tasks.py:11 -#: core/tables/tasks.py:115 dcim/forms/filtersets.py:63 -#: dcim/forms/object_create.py:43 dcim/tables/devices.py:52 -#: dcim/tables/devices.py:92 dcim/tables/devices.py:134 -#: dcim/tables/devices.py:289 dcim/tables/devices.py:392 -#: dcim/tables/devices.py:433 dcim/tables/devices.py:482 -#: dcim/tables/devices.py:531 dcim/tables/devices.py:648 -#: dcim/tables/devices.py:731 dcim/tables/devices.py:778 -#: dcim/tables/devices.py:841 dcim/tables/devices.py:911 -#: dcim/tables/devices.py:974 dcim/tables/devices.py:994 -#: dcim/tables/devices.py:1023 dcim/tables/devices.py:1053 -#: dcim/tables/devicetypes.py:31 dcim/tables/power.py:22 -#: dcim/tables/power.py:62 dcim/tables/racks.py:24 dcim/tables/racks.py:113 -#: dcim/tables/sites.py:24 dcim/tables/sites.py:51 dcim/tables/sites.py:78 -#: dcim/tables/sites.py:130 extras/forms/filtersets.py:213 -#: extras/tables/tables.py:58 extras/tables/tables.py:122 -#: extras/tables/tables.py:155 extras/tables/tables.py:180 -#: extras/tables/tables.py:246 extras/tables/tables.py:361 -#: extras/tables/tables.py:378 extras/tables/tables.py:401 -#: extras/tables/tables.py:439 extras/tables/tables.py:491 -#: extras/tables/tables.py:514 ipam/forms/bulk_edit.py:407 -#: ipam/forms/filtersets.py:386 ipam/tables/asn.py:16 ipam/tables/ip.py:85 -#: ipam/tables/ip.py:160 ipam/tables/services.py:15 ipam/tables/services.py:40 -#: ipam/tables/vlans.py:64 ipam/tables/vlans.py:114 ipam/tables/vrfs.py:26 -#: ipam/tables/vrfs.py:68 templates/circuits/circuitgroup.html:28 -#: templates/circuits/circuittype.html:22 -#: templates/circuits/provideraccount.html:28 -#: templates/circuits/providernetwork.html:24 -#: templates/core/datasource.html:34 templates/core/job.html:44 -#: templates/core/plugin.html:54 templates/core/rq_worker.html:43 -#: templates/dcim/consoleport.html:28 templates/dcim/consoleserverport.html:28 -#: templates/dcim/devicebay.html:24 templates/dcim/devicerole.html:26 -#: templates/dcim/frontport.html:28 -#: templates/dcim/inc/interface_vlans_table.html:5 -#: templates/dcim/inc/panels/inventory_items.html:18 -#: templates/dcim/interface.html:38 templates/dcim/interface.html:165 -#: templates/dcim/inventoryitem.html:28 -#: templates/dcim/inventoryitemrole.html:18 templates/dcim/location.html:29 -#: templates/dcim/manufacturer.html:36 templates/dcim/modulebay.html:30 -#: templates/dcim/platform.html:29 templates/dcim/poweroutlet.html:28 -#: templates/dcim/powerport.html:28 templates/dcim/rackrole.html:22 -#: templates/dcim/rearport.html:28 templates/dcim/region.html:29 -#: templates/dcim/sitegroup.html:29 -#: templates/dcim/virtualdevicecontext.html:18 -#: templates/extras/configcontext.html:13 -#: templates/extras/configtemplate.html:13 -#: templates/extras/customfield.html:13 templates/extras/customlink.html:13 -#: templates/extras/eventrule.html:13 templates/extras/exporttemplate.html:15 -#: templates/extras/notificationgroup.html:14 -#: templates/extras/savedfilter.html:13 templates/extras/script_list.html:44 -#: templates/extras/tag.html:14 templates/extras/webhook.html:13 -#: templates/ipam/asnrange.html:15 templates/ipam/fhrpgroup.html:30 -#: templates/ipam/rir.html:22 templates/ipam/role.html:22 -#: templates/ipam/routetarget.html:13 templates/ipam/service.html:24 -#: templates/ipam/servicetemplate.html:15 templates/ipam/vlan.html:35 -#: templates/ipam/vlangroup.html:30 templates/tenancy/contact.html:25 -#: templates/tenancy/contactgroup.html:21 -#: templates/tenancy/contactrole.html:18 templates/tenancy/tenantgroup.html:29 -#: templates/users/group.html:17 templates/users/objectpermission.html:17 -#: templates/virtualization/cluster.html:13 -#: templates/virtualization/clustergroup.html:22 -#: templates/virtualization/clustertype.html:22 -#: templates/virtualization/virtualdisk.html:25 -#: templates/virtualization/virtualmachine.html:15 -#: templates/virtualization/vminterface.html:25 -#: templates/vpn/ikepolicy.html:13 templates/vpn/ikeproposal.html:13 -#: templates/vpn/ipsecpolicy.html:13 templates/vpn/ipsecprofile.html:13 -#: templates/vpn/ipsecprofile.html:36 templates/vpn/ipsecprofile.html:69 -#: templates/vpn/ipsecproposal.html:13 templates/vpn/l2vpn.html:14 -#: templates/vpn/tunnel.html:21 templates/vpn/tunnelgroup.html:26 -#: templates/wireless/wirelesslangroup.html:29 tenancy/tables/contacts.py:19 -#: tenancy/tables/contacts.py:41 tenancy/tables/contacts.py:56 -#: tenancy/tables/tenants.py:16 tenancy/tables/tenants.py:38 -#: users/tables.py:62 users/tables.py:76 -#: virtualization/forms/bulk_create.py:20 -#: virtualization/forms/object_create.py:13 -#: virtualization/forms/object_create.py:23 -#: virtualization/tables/clusters.py:17 virtualization/tables/clusters.py:39 -#: virtualization/tables/clusters.py:62 -#: virtualization/tables/virtualmachines.py:55 -#: virtualization/tables/virtualmachines.py:139 -#: virtualization/tables/virtualmachines.py:194 vpn/tables/crypto.py:18 -#: vpn/tables/crypto.py:57 vpn/tables/crypto.py:93 vpn/tables/crypto.py:129 -#: vpn/tables/crypto.py:158 vpn/tables/l2vpn.py:23 vpn/tables/tunnels.py:18 -#: vpn/tables/tunnels.py:40 wireless/tables/wirelesslan.py:18 -#: wireless/tables/wirelesslan.py:79 +#: netbox/circuits/tables/circuits.py:32 +#: netbox/circuits/tables/circuits.py:132 +#: netbox/circuits/tables/providers.py:18 +#: netbox/circuits/tables/providers.py:69 +#: netbox/circuits/tables/providers.py:99 netbox/core/tables/data.py:16 +#: netbox/core/tables/jobs.py:14 netbox/core/tables/plugins.py: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/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/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/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/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 +#: netbox/templates/dcim/consoleserverport.html:28 +#: netbox/templates/dcim/devicebay.html:24 +#: netbox/templates/dcim/devicerole.html:26 +#: netbox/templates/dcim/frontport.html:28 +#: netbox/templates/dcim/inc/interface_vlans_table.html:5 +#: netbox/templates/dcim/inc/panels/inventory_items.html:18 +#: netbox/templates/dcim/interface.html:38 +#: netbox/templates/dcim/interface.html:165 +#: netbox/templates/dcim/inventoryitem.html:28 +#: netbox/templates/dcim/inventoryitemrole.html:18 +#: netbox/templates/dcim/location.html:29 +#: netbox/templates/dcim/manufacturer.html:36 +#: netbox/templates/dcim/modulebay.html:30 +#: netbox/templates/dcim/platform.html:29 +#: netbox/templates/dcim/poweroutlet.html:28 +#: netbox/templates/dcim/powerport.html:28 +#: netbox/templates/dcim/rackrole.html:22 +#: netbox/templates/dcim/rearport.html:28 netbox/templates/dcim/region.html:29 +#: netbox/templates/dcim/sitegroup.html:29 +#: netbox/templates/dcim/virtualdevicecontext.html:18 +#: netbox/templates/extras/configcontext.html:13 +#: netbox/templates/extras/configtemplate.html:13 +#: netbox/templates/extras/customfield.html:13 +#: netbox/templates/extras/customlink.html:13 +#: netbox/templates/extras/eventrule.html:13 +#: netbox/templates/extras/exporttemplate.html:15 +#: netbox/templates/extras/notificationgroup.html:14 +#: netbox/templates/extras/savedfilter.html:13 +#: netbox/templates/extras/script_list.html:45 +#: netbox/templates/extras/tag.html:14 netbox/templates/extras/webhook.html:13 +#: netbox/templates/ipam/asnrange.html:15 +#: netbox/templates/ipam/fhrpgroup.html:30 netbox/templates/ipam/rir.html:22 +#: netbox/templates/ipam/role.html:22 +#: netbox/templates/ipam/routetarget.html:13 +#: netbox/templates/ipam/service.html:24 +#: netbox/templates/ipam/servicetemplate.html:15 +#: netbox/templates/ipam/vlan.html:35 netbox/templates/ipam/vlangroup.html:30 +#: netbox/templates/tenancy/contact.html:25 +#: netbox/templates/tenancy/contactgroup.html:21 +#: netbox/templates/tenancy/contactrole.html:18 +#: netbox/templates/tenancy/tenantgroup.html:29 +#: netbox/templates/users/group.html:17 +#: netbox/templates/users/objectpermission.html:17 +#: netbox/templates/virtualization/cluster.html:13 +#: netbox/templates/virtualization/clustergroup.html:22 +#: netbox/templates/virtualization/clustertype.html:22 +#: netbox/templates/virtualization/virtualdisk.html:25 +#: netbox/templates/virtualization/virtualmachine.html:15 +#: netbox/templates/virtualization/vminterface.html:25 +#: netbox/templates/vpn/ikepolicy.html:13 +#: netbox/templates/vpn/ikeproposal.html:13 +#: netbox/templates/vpn/ipsecpolicy.html:13 +#: netbox/templates/vpn/ipsecprofile.html:13 +#: netbox/templates/vpn/ipsecprofile.html:36 +#: netbox/templates/vpn/ipsecprofile.html:69 +#: netbox/templates/vpn/ipsecproposal.html:13 +#: netbox/templates/vpn/l2vpn.html:14 netbox/templates/vpn/tunnel.html:21 +#: netbox/templates/vpn/tunnelgroup.html:26 +#: netbox/templates/wireless/wirelesslangroup.html:29 +#: netbox/tenancy/tables/contacts.py:19 netbox/tenancy/tables/contacts.py:41 +#: netbox/tenancy/tables/contacts.py:56 netbox/tenancy/tables/tenants.py:16 +#: netbox/tenancy/tables/tenants.py:38 netbox/users/tables.py:62 +#: netbox/users/tables.py:76 netbox/virtualization/forms/bulk_create.py:20 +#: netbox/virtualization/forms/object_create.py:13 +#: netbox/virtualization/forms/object_create.py:23 +#: netbox/virtualization/tables/clusters.py:17 +#: netbox/virtualization/tables/clusters.py:39 +#: netbox/virtualization/tables/clusters.py:62 +#: netbox/virtualization/tables/virtualmachines.py:55 +#: netbox/virtualization/tables/virtualmachines.py:139 +#: netbox/virtualization/tables/virtualmachines.py:194 +#: netbox/vpn/tables/crypto.py:18 netbox/vpn/tables/crypto.py:57 +#: netbox/vpn/tables/crypto.py:93 netbox/vpn/tables/crypto.py:129 +#: netbox/vpn/tables/crypto.py:158 netbox/vpn/tables/l2vpn.py:23 +#: netbox/vpn/tables/tunnels.py:18 netbox/vpn/tables/tunnels.py:40 +#: netbox/wireless/tables/wirelesslan.py:18 +#: netbox/wireless/tables/wirelesslan.py:79 msgid "Name" msgstr "Назва" -#: circuits/tables/circuits.py:41 circuits/tables/circuits.py:138 -#: circuits/tables/providers.py:45 circuits/tables/providers.py:79 -#: netbox/navigation/menu.py:266 netbox/navigation/menu.py:270 -#: netbox/navigation/menu.py:272 templates/circuits/provider.html:57 -#: templates/circuits/provideraccount.html:44 -#: templates/circuits/providernetwork.html:50 +#: 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/templates/circuits/provider.html:57 +#: netbox/templates/circuits/provideraccount.html:44 +#: netbox/templates/circuits/providernetwork.html:50 msgid "Circuits" msgstr "Канали зв'язку" -#: circuits/tables/circuits.py:55 templates/circuits/circuit.html:26 +#: netbox/circuits/tables/circuits.py:55 +#: netbox/templates/circuits/circuit.html:26 msgid "Circuit ID" msgstr "Ідентифікатор каналу зв'язку" -#: circuits/tables/circuits.py:69 wireless/forms/model_forms.py:160 +#: netbox/circuits/tables/circuits.py:69 +#: netbox/wireless/forms/model_forms.py:160 msgid "Side A" msgstr "Сторона А" -#: circuits/tables/circuits.py:74 +#: netbox/circuits/tables/circuits.py:74 msgid "Side Z" msgstr "Сторона Б" -#: circuits/tables/circuits.py:77 templates/circuits/circuit.html:55 +#: netbox/circuits/tables/circuits.py:77 +#: netbox/templates/circuits/circuit.html:55 msgid "Commit Rate" msgstr "Гарантований процент чи коефіцієнт доступності" -#: circuits/tables/circuits.py:80 circuits/tables/providers.py:48 -#: circuits/tables/providers.py:82 circuits/tables/providers.py:107 -#: dcim/tables/devices.py:1036 dcim/tables/devicetypes.py:92 -#: dcim/tables/modules.py:29 dcim/tables/modules.py:72 dcim/tables/power.py:39 -#: dcim/tables/power.py:96 dcim/tables/racks.py:84 dcim/tables/racks.py:145 -#: dcim/tables/racks.py:225 dcim/tables/sites.py:108 -#: extras/tables/tables.py:582 ipam/tables/asn.py:69 ipam/tables/fhrp.py:34 -#: ipam/tables/ip.py:136 ipam/tables/ip.py:275 ipam/tables/ip.py:329 -#: ipam/tables/ip.py:397 ipam/tables/services.py:24 ipam/tables/services.py:54 -#: ipam/tables/vlans.py:145 ipam/tables/vrfs.py:47 ipam/tables/vrfs.py:72 -#: templates/dcim/htmx/cable_edit.html:89 templates/generic/bulk_edit.html:86 -#: templates/inc/panels/comments.html:5 tenancy/tables/contacts.py:68 -#: tenancy/tables/tenants.py:46 utilities/forms/fields/fields.py:29 -#: virtualization/tables/clusters.py:91 -#: virtualization/tables/virtualmachines.py:82 vpn/tables/crypto.py:37 -#: vpn/tables/crypto.py:74 vpn/tables/crypto.py:109 vpn/tables/crypto.py:140 -#: vpn/tables/crypto.py:173 vpn/tables/l2vpn.py:37 vpn/tables/tunnels.py:61 -#: wireless/tables/wirelesslan.py:27 wireless/tables/wirelesslan.py:58 +#: netbox/circuits/tables/circuits.py: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:72 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/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/vpn/tables/crypto.py:37 netbox/vpn/tables/crypto.py:74 +#: netbox/vpn/tables/crypto.py:109 netbox/vpn/tables/crypto.py:140 +#: netbox/vpn/tables/crypto.py:173 netbox/vpn/tables/l2vpn.py:37 +#: netbox/vpn/tables/tunnels.py:61 netbox/wireless/tables/wirelesslan.py:27 +#: netbox/wireless/tables/wirelesslan.py:58 msgid "Comments" msgstr "Коментарі" -#: circuits/tables/circuits.py:86 templates/tenancy/contact.html:84 -#: tenancy/tables/contacts.py:73 +#: netbox/circuits/tables/circuits.py:86 +#: netbox/templates/tenancy/contact.html:84 +#: netbox/tenancy/tables/contacts.py:73 msgid "Assignments" msgstr "Завдання" -#: circuits/tables/providers.py:23 +#: netbox/circuits/tables/providers.py:23 msgid "Accounts" msgstr "Рахунки" -#: circuits/tables/providers.py:29 +#: netbox/circuits/tables/providers.py:29 msgid "Account Count" msgstr "Кількість рахунків" -#: circuits/tables/providers.py:39 dcim/tables/sites.py:100 +#: netbox/circuits/tables/providers.py:39 netbox/dcim/tables/sites.py:100 msgid "ASN Count" msgstr "Кількість ASN" -#: circuits/views.py:331 +#: netbox/circuits/views.py:331 #, python-brace-format msgid "No terminations have been defined for circuit {circuit}." msgstr "Не визначено кінців для каналу зв'язку {circuit}." -#: circuits/views.py:380 +#: netbox/circuits/views.py:380 #, python-brace-format msgid "Swapped terminations for circuit {circuit}." msgstr "Замінені місцями кінці для каналу зв'язку {circuit}." -#: core/api/views.py:39 +#: netbox/core/api/views.py:39 msgid "This user does not have permission to synchronize this data source." msgstr "Цей користувач не має дозволу на синхронізацію цього джерела даних." -#: core/choices.py:18 +#: netbox/core/choices.py:18 msgid "New" msgstr "Нові" -#: core/choices.py:19 core/constants.py:18 core/tables/tasks.py:15 -#: templates/core/rq_task.html:77 +#: netbox/core/choices.py:19 netbox/core/constants.py:18 +#: netbox/core/tables/tasks.py:15 netbox/templates/core/rq_task.html:77 msgid "Queued" msgstr "У черзі" -#: core/choices.py:20 +#: netbox/core/choices.py:20 msgid "Syncing" msgstr "Синхронізація" -#: core/choices.py:21 core/choices.py:57 core/tables/jobs.py:41 -#: templates/core/job.html:86 +#: netbox/core/choices.py:21 netbox/core/choices.py:57 +#: netbox/core/tables/jobs.py:41 netbox/templates/core/job.html:86 msgid "Completed" msgstr "Завершено" -#: core/choices.py:22 core/choices.py:59 core/constants.py:20 -#: core/tables/tasks.py:34 dcim/choices.py:187 dcim/choices.py:239 -#: dcim/choices.py:1607 virtualization/choices.py:47 +#: netbox/core/choices.py:22 netbox/core/choices.py:59 +#: netbox/core/constants.py:20 netbox/core/tables/tasks.py:34 +#: netbox/dcim/choices.py:187 netbox/dcim/choices.py:239 +#: netbox/dcim/choices.py:1609 netbox/virtualization/choices.py:47 msgid "Failed" msgstr "Збій" -#: core/choices.py:35 netbox/navigation/menu.py:335 -#: netbox/navigation/menu.py:339 templates/extras/script/base.html:14 -#: templates/extras/script_list.html:7 templates/extras/script_list.html:12 -#: templates/extras/script_result.html:17 +#: netbox/core/choices.py:35 netbox/netbox/navigation/menu.py:335 +#: netbox/netbox/navigation/menu.py:339 +#: netbox/templates/extras/script/base.html:14 +#: netbox/templates/extras/script_list.html:7 +#: netbox/templates/extras/script_list.html:12 +#: netbox/templates/extras/script_result.html:17 msgid "Scripts" msgstr "Скрипти" -#: core/choices.py:36 templates/extras/report/base.html:13 +#: netbox/core/choices.py:36 netbox/templates/extras/report/base.html:13 msgid "Reports" msgstr "Звіти" -#: core/choices.py:54 +#: netbox/core/choices.py:54 msgid "Pending" msgstr "Очікується" -#: core/choices.py:55 core/constants.py:23 core/tables/jobs.py:32 -#: core/tables/tasks.py:38 templates/core/job.html:73 +#: netbox/core/choices.py:55 netbox/core/constants.py:23 +#: netbox/core/tables/jobs.py:32 netbox/core/tables/tasks.py:38 +#: netbox/templates/core/job.html:73 msgid "Scheduled" msgstr "Заплановано" -#: core/choices.py:56 +#: netbox/core/choices.py:56 msgid "Running" msgstr "Запущено" -#: core/choices.py:58 +#: netbox/core/choices.py:58 msgid "Errored" msgstr "Помилка" -#: core/choices.py:87 core/tables/plugins.py:63 -#: templates/generic/object.html:61 +#: netbox/core/choices.py:87 netbox/core/tables/plugins.py:63 +#: netbox/templates/generic/object.html:61 msgid "Updated" msgstr "Оновлено" -#: core/choices.py:88 +#: netbox/core/choices.py:88 msgid "Deleted" msgstr "Видалено" -#: core/constants.py:19 core/tables/tasks.py:30 +#: netbox/core/constants.py:19 netbox/core/tables/tasks.py:30 msgid "Finished" msgstr "Закінчено" -#: core/constants.py:21 core/tables/jobs.py:38 templates/core/job.html:82 -#: templates/extras/htmx/script_result.html:8 +#: netbox/core/constants.py:21 netbox/core/tables/jobs.py:38 +#: netbox/templates/core/job.html:82 +#: netbox/templates/extras/htmx/script_result.html:8 msgid "Started" msgstr "Почато" -#: core/constants.py:22 core/tables/tasks.py:26 +#: netbox/core/constants.py:22 netbox/core/tables/tasks.py:26 msgid "Deferred" msgstr "Відкладено" -#: core/constants.py:24 +#: netbox/core/constants.py:24 msgid "Stopped" msgstr "Зупинено" -#: core/constants.py:25 +#: netbox/core/constants.py:25 msgid "Cancelled" msgstr "Скасовано" -#: core/data_backends.py:32 core/tables/plugins.py:51 -#: templates/core/plugin.html:88 templates/dcim/interface.html:216 +#: netbox/core/data_backends.py:32 netbox/core/tables/plugins.py:51 +#: netbox/templates/core/plugin.html:88 +#: netbox/templates/dcim/interface.html:216 msgid "Local" msgstr "Місцеві" -#: core/data_backends.py:50 core/tables/change_logging.py:20 -#: templates/account/profile.html:15 templates/users/user.html:17 -#: users/tables.py:31 +#: netbox/core/data_backends.py:50 netbox/core/tables/change_logging.py:20 +#: netbox/templates/account/profile.html:15 +#: netbox/templates/users/user.html:17 netbox/users/tables.py:31 msgid "Username" msgstr "Ім'я користувача" -#: core/data_backends.py:52 core/data_backends.py:58 +#: netbox/core/data_backends.py:52 netbox/core/data_backends.py:58 msgid "Only used for cloning with HTTP(S)" msgstr "Використовується лише для клонування за допомогою HTTP(S)" -#: core/data_backends.py:56 templates/account/base.html:23 -#: templates/account/password.html:12 users/forms/model_forms.py:170 +#: netbox/core/data_backends.py:56 netbox/templates/account/base.html:23 +#: netbox/templates/account/password.html:12 +#: netbox/users/forms/model_forms.py:170 msgid "Password" msgstr "Пароль" -#: core/data_backends.py:62 +#: netbox/core/data_backends.py:62 msgid "Branch" msgstr "Відділення" -#: core/data_backends.py:120 +#: netbox/core/data_backends.py:120 #, python-brace-format msgid "Fetching remote data failed ({name}): {error}" msgstr "Не вдалося отримати збійні дані ({name}): {error}" -#: core/data_backends.py:133 +#: netbox/core/data_backends.py:133 msgid "AWS access key ID" msgstr "Ідентифікатор ключа доступу AWS" -#: core/data_backends.py:137 +#: netbox/core/data_backends.py:137 msgid "AWS secret access key" msgstr "Ключ таємничого доступу до AWS" -#: core/events.py:27 +#: netbox/core/events.py:27 msgid "Object created" msgstr "Об'єкт створений" -#: core/events.py:28 +#: netbox/core/events.py:28 msgid "Object updated" msgstr "Об'єкт оновлений" -#: core/events.py:29 +#: netbox/core/events.py:29 msgid "Object deleted" msgstr "Об'єкт видалений" -#: core/events.py:30 +#: netbox/core/events.py:30 msgid "Job started" msgstr "Завдання почалося" -#: core/events.py:31 +#: netbox/core/events.py:31 msgid "Job completed" msgstr "Завдання завершено" -#: core/events.py:32 +#: netbox/core/events.py:32 msgid "Job failed" msgstr "Збій завдання" -#: core/events.py:33 +#: netbox/core/events.py:33 msgid "Job errored" msgstr "Завдання завершено з помилкою" -#: core/filtersets.py:53 extras/filtersets.py:250 extras/filtersets.py:633 -#: extras/filtersets.py:661 +#: netbox/core/filtersets.py:53 netbox/extras/filtersets.py:250 +#: netbox/extras/filtersets.py:633 netbox/extras/filtersets.py:661 msgid "Data source (ID)" msgstr "Джерело даних (ідентифікатор)" -#: core/filtersets.py:59 +#: netbox/core/filtersets.py:59 msgid "Data source (name)" msgstr "Джерело даних (назва)" -#: core/filtersets.py:145 dcim/filtersets.py:501 extras/filtersets.py:287 -#: extras/filtersets.py:331 extras/filtersets.py:353 extras/filtersets.py:413 -#: users/filtersets.py:28 +#: netbox/core/filtersets.py:145 netbox/dcim/filtersets.py:501 +#: 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 msgid "User (ID)" msgstr "Користувач (ідентифікатор)" -#: core/filtersets.py:151 +#: netbox/core/filtersets.py:151 msgid "User name" msgstr "Ім'я користувача" -#: core/forms/bulk_edit.py:25 core/forms/filtersets.py:43 -#: core/tables/data.py:26 dcim/forms/bulk_edit.py:1122 -#: dcim/forms/bulk_edit.py:1400 dcim/forms/filtersets.py:1370 -#: dcim/tables/devices.py:553 dcim/tables/devicetypes.py:224 -#: extras/forms/bulk_edit.py:123 extras/forms/bulk_edit.py:187 -#: extras/forms/bulk_edit.py:246 extras/forms/filtersets.py:142 -#: extras/forms/filtersets.py:229 extras/forms/filtersets.py:294 -#: extras/tables/tables.py:162 extras/tables/tables.py:253 -#: extras/tables/tables.py:415 netbox/preferences.py:22 -#: templates/core/datasource.html:42 templates/dcim/interface.html:61 -#: templates/extras/customlink.html:17 templates/extras/eventrule.html:17 -#: templates/extras/savedfilter.html:25 -#: templates/users/objectpermission.html:25 -#: templates/virtualization/vminterface.html:29 users/forms/bulk_edit.py:89 -#: users/forms/filtersets.py:70 users/tables.py:83 -#: virtualization/forms/bulk_edit.py:217 -#: virtualization/forms/filtersets.py:215 +#: 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/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/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 +#: netbox/templates/dcim/interface.html:61 +#: netbox/templates/extras/customlink.html:17 +#: netbox/templates/extras/eventrule.html:17 +#: netbox/templates/extras/savedfilter.html:25 +#: netbox/templates/users/objectpermission.html:25 +#: netbox/templates/virtualization/vminterface.html:29 +#: netbox/users/forms/bulk_edit.py:89 netbox/users/forms/filtersets.py:70 +#: netbox/users/tables.py:83 netbox/virtualization/forms/bulk_edit.py:217 +#: netbox/virtualization/forms/filtersets.py:215 msgid "Enabled" msgstr "Увімкнено" -#: core/forms/bulk_edit.py:34 extras/forms/model_forms.py:285 -#: templates/extras/savedfilter.html:52 vpn/forms/filtersets.py:97 -#: vpn/forms/filtersets.py:127 vpn/forms/filtersets.py:151 -#: vpn/forms/filtersets.py:170 vpn/forms/model_forms.py:301 -#: vpn/forms/model_forms.py:321 vpn/forms/model_forms.py:337 -#: vpn/forms/model_forms.py:357 vpn/forms/model_forms.py:380 +#: netbox/core/forms/bulk_edit.py:34 netbox/extras/forms/model_forms.py:285 +#: 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 msgid "Parameters" msgstr "Параметри" -#: core/forms/bulk_edit.py:38 templates/core/datasource.html:68 +#: netbox/core/forms/bulk_edit.py:38 netbox/templates/core/datasource.html:68 msgid "Ignore rules" msgstr "Ігнорувати правила" -#: core/forms/filtersets.py:30 core/forms/model_forms.py:97 -#: extras/forms/model_forms.py:248 extras/forms/model_forms.py:578 -#: extras/forms/model_forms.py:632 extras/tables/tables.py:191 -#: extras/tables/tables.py:483 extras/tables/tables.py:518 -#: templates/core/datasource.html:31 -#: templates/dcim/device/render_config.html:18 -#: templates/extras/configcontext.html:29 -#: templates/extras/configtemplate.html:21 -#: templates/extras/exporttemplate.html:35 -#: templates/virtualization/virtualmachine/render_config.html:18 +#: netbox/core/forms/filtersets.py: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/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 msgid "Data Source" msgstr "Джерело даних" -#: core/forms/filtersets.py:55 core/forms/mixins.py:21 +#: netbox/core/forms/filtersets.py:55 netbox/core/forms/mixins.py:21 msgid "File" msgstr "Файл" -#: core/forms/filtersets.py:60 core/forms/mixins.py:16 -#: extras/forms/filtersets.py:170 extras/forms/filtersets.py:328 -#: extras/forms/filtersets.py:413 +#: 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 msgid "Data source" msgstr "Джерело даних" -#: core/forms/filtersets.py:70 extras/forms/filtersets.py:440 +#: netbox/core/forms/filtersets.py:70 netbox/extras/forms/filtersets.py:440 msgid "Creation" msgstr "Творчість" -#: core/forms/filtersets.py:74 core/forms/filtersets.py:160 -#: extras/forms/filtersets.py:461 extras/tables/tables.py:220 -#: extras/tables/tables.py:294 extras/tables/tables.py:326 -#: extras/tables/tables.py:571 templates/core/job.html:38 -#: templates/core/objectchange.html:52 tenancy/tables/contacts.py:90 -#: vpn/tables/l2vpn.py:59 +#: 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/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 +#: netbox/tenancy/tables/contacts.py:90 netbox/vpn/tables/l2vpn.py:59 msgid "Object Type" msgstr "Тип об'єкта" -#: core/forms/filtersets.py:84 +#: netbox/core/forms/filtersets.py:84 msgid "Created after" msgstr "Створено після" -#: core/forms/filtersets.py:89 +#: netbox/core/forms/filtersets.py:89 msgid "Created before" msgstr "Створено раніше" -#: core/forms/filtersets.py:94 +#: netbox/core/forms/filtersets.py:94 msgid "Scheduled after" msgstr "Заплановано після" -#: core/forms/filtersets.py:99 +#: netbox/core/forms/filtersets.py:99 msgid "Scheduled before" msgstr "Заплановано раніше" -#: core/forms/filtersets.py:104 +#: netbox/core/forms/filtersets.py:104 msgid "Started after" msgstr "Почнється після" -#: core/forms/filtersets.py:109 +#: netbox/core/forms/filtersets.py:109 msgid "Started before" msgstr "Почнється раніше" -#: core/forms/filtersets.py:114 +#: netbox/core/forms/filtersets.py:114 msgid "Completed after" msgstr "Завершено після" -#: core/forms/filtersets.py:119 +#: netbox/core/forms/filtersets.py:119 msgid "Completed before" msgstr "Завершено раніше" -#: core/forms/filtersets.py:126 core/forms/filtersets.py:155 -#: dcim/forms/bulk_edit.py:456 dcim/forms/filtersets.py:418 -#: dcim/forms/filtersets.py:462 dcim/forms/model_forms.py:316 -#: extras/forms/filtersets.py:456 extras/forms/filtersets.py:475 -#: extras/tables/tables.py:302 extras/tables/tables.py:342 -#: templates/core/objectchange.html:36 templates/dcim/rackreservation.html:58 -#: templates/extras/savedfilter.html:21 templates/inc/user_menu.html:33 -#: templates/users/token.html:21 templates/users/user.html:6 -#: templates/users/user.html:14 users/filtersets.py:107 -#: users/filtersets.py:174 users/forms/filtersets.py:84 -#: users/forms/filtersets.py:125 users/forms/model_forms.py:155 -#: users/forms/model_forms.py:192 users/tables.py:19 +#: 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/extras/tables/tables.py:302 netbox/extras/tables/tables.py:342 +#: netbox/templates/core/objectchange.html:36 +#: netbox/templates/dcim/rackreservation.html:58 +#: netbox/templates/extras/savedfilter.html:21 +#: netbox/templates/inc/user_menu.html:33 netbox/templates/users/token.html:21 +#: netbox/templates/users/user.html:6 netbox/templates/users/user.html:14 +#: netbox/users/filtersets.py:107 netbox/users/filtersets.py:174 +#: netbox/users/forms/filtersets.py:84 netbox/users/forms/filtersets.py:125 +#: netbox/users/forms/model_forms.py:155 netbox/users/forms/model_forms.py:192 +#: netbox/users/tables.py:19 msgid "User" msgstr "Користувач" -#: core/forms/filtersets.py:134 core/tables/change_logging.py:15 -#: extras/tables/tables.py:609 extras/tables/tables.py:646 -#: templates/core/objectchange.html:32 +#: netbox/core/forms/filtersets.py:134 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 "Час" -#: core/forms/filtersets.py:139 extras/forms/filtersets.py:445 +#: netbox/core/forms/filtersets.py:139 netbox/extras/forms/filtersets.py:445 msgid "After" msgstr "Після" -#: core/forms/filtersets.py:144 extras/forms/filtersets.py:450 +#: netbox/core/forms/filtersets.py:144 netbox/extras/forms/filtersets.py:450 msgid "Before" msgstr "Раніше" -#: core/forms/filtersets.py:148 core/tables/change_logging.py:29 -#: extras/forms/model_forms.py:396 templates/core/objectchange.html:46 -#: templates/extras/eventrule.html:71 +#: netbox/core/forms/filtersets.py:148 netbox/core/tables/change_logging.py:29 +#: netbox/extras/forms/model_forms.py:396 +#: netbox/templates/core/objectchange.html:46 +#: netbox/templates/extras/eventrule.html:71 msgid "Action" msgstr "Дія" -#: core/forms/model_forms.py:54 core/tables/data.py:46 -#: templates/core/datafile.html:27 templates/extras/report/base.html:33 -#: templates/extras/script/base.html:32 +#: netbox/core/forms/model_forms.py:54 netbox/core/tables/data.py:46 +#: netbox/templates/core/datafile.html:27 +#: netbox/templates/extras/report/base.html:33 +#: netbox/templates/extras/script/base.html:32 msgid "Source" msgstr "Джерело" -#: core/forms/model_forms.py:58 +#: netbox/core/forms/model_forms.py:58 msgid "Backend Parameters" msgstr "Параметри бекенду" -#: core/forms/model_forms.py:96 +#: netbox/core/forms/model_forms.py:96 msgid "File Upload" -msgstr "Завантаження файлу" +msgstr "Вивантажити файл" -#: core/forms/model_forms.py:108 +#: netbox/core/forms/model_forms.py:108 msgid "Cannot upload a file and sync from an existing file" -msgstr "Не вдається завантажити файл і синхронізувати з існуючого файлу" +msgstr "Не вдається вивантажити файл і синхронізувати з існуючого файлу" -#: core/forms/model_forms.py:110 +#: netbox/core/forms/model_forms.py:110 msgid "Must upload a file or select a data file to sync" -msgstr "Потрібно завантажити файл або вибрати файл даних для синхронізації" +msgstr "Потрібно вивантажити файл або вибрати файл даних для синхронізації" -#: core/forms/model_forms.py:153 templates/dcim/rack_elevation_list.html:6 +#: netbox/core/forms/model_forms.py:153 +#: netbox/templates/dcim/rack_elevation_list.html:6 msgid "Rack Elevations" msgstr "Висота стійки" -#: core/forms/model_forms.py:157 dcim/choices.py:1518 -#: dcim/forms/bulk_edit.py:969 dcim/forms/bulk_edit.py:1357 -#: dcim/forms/bulk_edit.py:1375 dcim/tables/racks.py:158 -#: netbox/navigation/menu.py:291 netbox/navigation/menu.py:295 +#: 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 msgid "Power" msgstr "Електрика" -#: core/forms/model_forms.py:159 netbox/navigation/menu.py:154 -#: templates/core/inc/config_data.html:37 +#: netbox/core/forms/model_forms.py:159 netbox/netbox/navigation/menu.py:154 +#: netbox/templates/core/inc/config_data.html:37 msgid "IPAM" msgstr "IPAM" -#: core/forms/model_forms.py:160 netbox/navigation/menu.py:230 -#: templates/core/inc/config_data.html:50 vpn/forms/bulk_edit.py:77 -#: vpn/forms/filtersets.py:43 vpn/forms/model_forms.py:61 -#: vpn/forms/model_forms.py:146 +#: netbox/core/forms/model_forms.py:160 netbox/netbox/navigation/menu.py:230 +#: netbox/templates/core/inc/config_data.html:50 +#: netbox/vpn/forms/bulk_edit.py:77 netbox/vpn/forms/filtersets.py:43 +#: netbox/vpn/forms/model_forms.py:61 netbox/vpn/forms/model_forms.py:146 msgid "Security" msgstr "Безпека" -#: core/forms/model_forms.py:161 templates/core/inc/config_data.html:59 +#: netbox/core/forms/model_forms.py:161 +#: netbox/templates/core/inc/config_data.html:59 msgid "Banners" msgstr "Банери" -#: core/forms/model_forms.py:162 templates/core/inc/config_data.html:80 +#: netbox/core/forms/model_forms.py:162 +#: netbox/templates/core/inc/config_data.html:80 msgid "Pagination" msgstr "Нумерація сторінок" -#: core/forms/model_forms.py:163 extras/forms/bulk_edit.py:92 -#: extras/forms/filtersets.py:47 extras/forms/model_forms.py:116 -#: extras/forms/model_forms.py:129 templates/core/inc/config_data.html:93 +#: 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/model_forms.py:129 +#: netbox/templates/core/inc/config_data.html:93 msgid "Validation" msgstr "Перевірка" -#: core/forms/model_forms.py:164 templates/account/preferences.html:6 +#: netbox/core/forms/model_forms.py:164 +#: netbox/templates/account/preferences.html:6 msgid "User Preferences" msgstr "Параметри користувача" -#: core/forms/model_forms.py:167 dcim/forms/filtersets.py:732 -#: templates/core/inc/config_data.html:127 users/forms/model_forms.py:64 +#: netbox/core/forms/model_forms.py:167 netbox/dcim/forms/filtersets.py:732 +#: netbox/templates/core/inc/config_data.html:127 +#: netbox/users/forms/model_forms.py:64 msgid "Miscellaneous" msgstr "Різне" -#: core/forms/model_forms.py:169 +#: netbox/core/forms/model_forms.py:169 msgid "Config Revision" msgstr "Ревізія конфігурації" -#: core/forms/model_forms.py:208 +#: netbox/core/forms/model_forms.py:208 msgid "This parameter has been defined statically and cannot be modified." msgstr "Цей параметр був визначений статично і не може бути змінений." -#: core/forms/model_forms.py:216 +#: netbox/core/forms/model_forms.py:216 #, python-brace-format msgid "Current value: {value}" msgstr "Поточне значення: {value}" -#: core/forms/model_forms.py:218 +#: netbox/core/forms/model_forms.py:218 msgid " (default)" msgstr " (за замовчуванням)" -#: core/models/change_logging.py:29 +#: netbox/core/models/change_logging.py:29 msgid "time" msgstr "час" -#: core/models/change_logging.py:42 +#: netbox/core/models/change_logging.py:42 msgid "user name" msgstr "ім'я користувача" -#: core/models/change_logging.py:47 +#: netbox/core/models/change_logging.py:47 msgid "request ID" msgstr "Ідентифікатор запиту" -#: core/models/change_logging.py:52 extras/models/staging.py:69 +#: netbox/core/models/change_logging.py:52 netbox/extras/models/staging.py:69 msgid "action" msgstr "дія" -#: core/models/change_logging.py:86 +#: netbox/core/models/change_logging.py:86 msgid "pre-change data" msgstr "дані перед зміною" -#: core/models/change_logging.py:92 +#: netbox/core/models/change_logging.py:92 msgid "post-change data" msgstr "дані після зміни" -#: core/models/change_logging.py:106 +#: netbox/core/models/change_logging.py:106 msgid "object change" msgstr "зміна об'єкта" -#: core/models/change_logging.py:107 +#: netbox/core/models/change_logging.py:107 msgid "object changes" -msgstr "зміни об'єкта" +msgstr "змін об'єкта" -#: core/models/change_logging.py:123 +#: netbox/core/models/change_logging.py:123 #, python-brace-format msgid "Change logging is not supported for this object type ({type})." msgstr "Журнал змін не підтримується для цього типу об'єктів ({type})." -#: core/models/config.py:18 core/models/data.py:266 core/models/files.py:27 -#: core/models/jobs.py:49 extras/models/models.py:730 -#: extras/models/notifications.py:39 extras/models/notifications.py:186 -#: netbox/models/features.py:53 users/models/tokens.py:32 +#: netbox/core/models/config.py:18 netbox/core/models/data.py:266 +#: 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/notifications.py:186 +#: netbox/netbox/models/features.py:53 netbox/users/models/tokens.py:32 msgid "created" msgstr "створено" -#: core/models/config.py:22 +#: netbox/core/models/config.py:22 msgid "comment" msgstr "коментар" -#: core/models/config.py:29 +#: netbox/core/models/config.py:29 msgid "configuration data" msgstr "дані конфігурації" -#: core/models/config.py:36 +#: netbox/core/models/config.py:36 msgid "config revision" msgstr "версія конфігурації" -#: core/models/config.py:37 +#: netbox/core/models/config.py:37 msgid "config revisions" msgstr "версії конфігурації" -#: core/models/config.py:41 +#: netbox/core/models/config.py:41 msgid "Default configuration" msgstr "Налаштування за замовчуванням" -#: core/models/config.py:43 +#: netbox/core/models/config.py:43 msgid "Current configuration" msgstr "Поточне налаштування" -#: core/models/config.py:44 +#: netbox/core/models/config.py:44 #, python-brace-format msgid "Config revision #{id}" msgstr "Ревізія конфігурації #{id}" -#: core/models/data.py:44 dcim/models/cables.py:43 -#: dcim/models/device_component_templates.py:203 -#: dcim/models/device_component_templates.py:237 -#: dcim/models/device_component_templates.py:272 -#: dcim/models/device_component_templates.py:334 -#: dcim/models/device_component_templates.py:413 -#: dcim/models/device_component_templates.py:512 -#: dcim/models/device_component_templates.py:612 -#: dcim/models/device_components.py:283 dcim/models/device_components.py:312 -#: dcim/models/device_components.py:345 dcim/models/device_components.py:463 -#: dcim/models/device_components.py:605 dcim/models/device_components.py:970 -#: dcim/models/device_components.py:1044 dcim/models/power.py:102 -#: extras/models/customfields.py:78 extras/models/search.py:41 -#: virtualization/models/clusters.py:61 vpn/models/l2vpn.py:32 +#: 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/extras/models/search.py:41 +#: netbox/virtualization/models/clusters.py:61 netbox/vpn/models/l2vpn.py:32 msgid "type" msgstr "тип" -#: core/models/data.py:49 extras/choices.py:37 extras/models/models.py:164 -#: extras/tables/tables.py:656 templates/core/datasource.html:58 -#: templates/core/plugin.html:66 +#: netbox/core/models/data.py:49 netbox/extras/choices.py:37 +#: netbox/extras/models/models.py:164 netbox/extras/tables/tables.py:656 +#: netbox/templates/core/datasource.html:58 +#: netbox/templates/core/plugin.html:66 msgid "URL" msgstr "URL" -#: core/models/data.py:59 dcim/models/device_component_templates.py:418 -#: dcim/models/device_components.py:512 extras/models/models.py:70 -#: extras/models/models.py:301 extras/models/models.py:526 -#: users/models/permissions.py:29 +#: netbox/core/models/data.py:59 +#: netbox/dcim/models/device_component_templates.py:418 +#: netbox/dcim/models/device_components.py:512 +#: 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" msgstr "увімкнено" -#: core/models/data.py:63 +#: netbox/core/models/data.py:63 msgid "ignore rules" msgstr "ігнорувати правила" -#: core/models/data.py:65 +#: netbox/core/models/data.py:65 msgid "Patterns (one per line) matching files to ignore when syncing" msgstr "" "Шаблони (по одному на рядок), що відповідають файлам, які слід ігнорувати " "під час синхронізації" -#: core/models/data.py:68 extras/models/models.py:534 +#: netbox/core/models/data.py:68 netbox/extras/models/models.py:534 msgid "parameters" msgstr "параметри" -#: core/models/data.py:73 +#: netbox/core/models/data.py:73 msgid "last synced" msgstr "останній синхронізований" -#: core/models/data.py:81 +#: netbox/core/models/data.py:81 msgid "data source" msgstr "джерело даних" -#: core/models/data.py:82 +#: netbox/core/models/data.py:82 msgid "data sources" msgstr "джерела даних" -#: core/models/data.py:122 +#: netbox/core/models/data.py:122 #, python-brace-format msgid "Unknown backend type: {type}" msgstr "Невідомий тип бекенда: {type}" -#: core/models/data.py:164 +#: netbox/core/models/data.py:164 msgid "Cannot initiate sync; syncing already in progress." msgstr "Не вдається ініціювати синхронізацію; бо синхронізація вже триває." -#: core/models/data.py:177 +#: netbox/core/models/data.py:177 msgid "" "There was an error initializing the backend. A dependency needs to be " "installed: " msgstr "" "Виникла помилка при ініціалізації бекенду. Необхідно встановити залежність: " -#: core/models/data.py:270 core/models/files.py:31 -#: netbox/models/features.py:59 +#: netbox/core/models/data.py:270 netbox/core/models/files.py:31 +#: netbox/netbox/models/features.py:59 msgid "last updated" msgstr "останнє оновлення" -#: core/models/data.py:280 dcim/models/cables.py:444 +#: netbox/core/models/data.py:280 netbox/dcim/models/cables.py:444 msgid "path" msgstr "доріжка" -#: core/models/data.py:283 +#: netbox/core/models/data.py:283 msgid "File path relative to the data source's root" -msgstr "Шляху до файлу відносно кореня джерела даних" +msgstr "Шлях до файлу відносно кореня джерела даних" -#: core/models/data.py:287 ipam/models/ip.py:503 +#: netbox/core/models/data.py:287 netbox/ipam/models/ip.py:503 msgid "size" msgstr "розмір" -#: core/models/data.py:290 +#: netbox/core/models/data.py:290 msgid "hash" msgstr "хеш" -#: core/models/data.py:294 +#: netbox/core/models/data.py:294 msgid "Length must be 64 hexadecimal characters." msgstr "Довжина повинна становити 64 шістнадцяткові символи." -#: core/models/data.py:296 +#: netbox/core/models/data.py:296 msgid "SHA256 hash of the file data" msgstr "SHA256 хеш даних файлу" -#: core/models/data.py:313 +#: netbox/core/models/data.py:313 msgid "data file" msgstr "файл даних" -#: core/models/data.py:314 +#: netbox/core/models/data.py:314 msgid "data files" msgstr "файли даних" -#: core/models/data.py:401 +#: netbox/core/models/data.py:401 msgid "auto sync record" -msgstr "запис автоматичної синхронізації" +msgstr "автоматична синхронізація запису" -#: core/models/data.py:402 +#: netbox/core/models/data.py:402 msgid "auto sync records" msgstr "автоматична синхронізація записів" -#: core/models/files.py:37 +#: netbox/core/models/files.py:37 msgid "file root" msgstr "кореневий файл" -#: core/models/files.py:42 +#: netbox/core/models/files.py:42 msgid "file path" msgstr "шлях до файлу" -#: core/models/files.py:44 +#: netbox/core/models/files.py:44 msgid "File path relative to the designated root path" -msgstr "Шляху до файлу відносно призначеного кореневого шляху" +msgstr "Шлях до файлу відносно призначеного кореневого шляху" -#: core/models/files.py:61 +#: netbox/core/models/files.py:61 msgid "managed file" msgstr "керований файл" -#: core/models/files.py:62 +#: netbox/core/models/files.py:62 msgid "managed files" msgstr "керовані файли" -#: core/models/jobs.py:53 +#: netbox/core/models/jobs.py:54 msgid "scheduled" msgstr "заплановано" -#: core/models/jobs.py:58 +#: netbox/core/models/jobs.py:59 msgid "interval" msgstr "інтервал" -#: core/models/jobs.py:64 +#: netbox/core/models/jobs.py:65 msgid "Recurrence interval (in minutes)" msgstr "Інтервал рецидивів (у хвилинах)" -#: core/models/jobs.py:67 +#: netbox/core/models/jobs.py:68 msgid "started" msgstr "розпочато" -#: core/models/jobs.py:72 +#: netbox/core/models/jobs.py:73 msgid "completed" msgstr "завершено" -#: core/models/jobs.py:90 extras/models/models.py:101 -#: extras/models/staging.py:87 +#: netbox/core/models/jobs.py:91 netbox/extras/models/models.py:101 +#: netbox/extras/models/staging.py:87 msgid "data" msgstr "дані" -#: core/models/jobs.py:95 +#: netbox/core/models/jobs.py:96 msgid "error" msgstr "помилка" -#: core/models/jobs.py:100 +#: netbox/core/models/jobs.py:101 msgid "job ID" -msgstr "iдентифікатор завдання" +msgstr "ідентифікатор завдання" -#: core/models/jobs.py:111 +#: netbox/core/models/jobs.py:112 msgid "job" msgstr "завдання" -#: core/models/jobs.py:112 +#: netbox/core/models/jobs.py:113 msgid "jobs" msgstr "завдання" -#: core/models/jobs.py:135 +#: netbox/core/models/jobs.py:136 #, python-brace-format msgid "Jobs cannot be assigned to this object type ({type})." msgstr "Завдання не можуть бути призначені для цього типу об'єкта ({type})." -#: core/models/jobs.py:185 +#: netbox/core/models/jobs.py:190 #, python-brace-format msgid "Invalid status for job termination. Choices are: {choices}" msgstr "" "Невірний статус для припинення виконання завдання. Треба вибрати: {choices}" -#: core/models/jobs.py:216 +#: netbox/core/models/jobs.py:221 msgid "" "enqueue() cannot be called with values for both schedule_at and immediate." msgstr "" "enqueue() не можна викликати зі значеннями як для schedule_at, так і для " "imediate." -#: core/signals.py:126 +#: netbox/core/signals.py:126 #, python-brace-format msgid "Deletion is prevented by a protection rule: {message}" msgstr "Видалення запобігає правилу захисту: {message}" -#: core/tables/change_logging.py:25 templates/account/profile.html:19 -#: templates/users/user.html:21 +#: netbox/core/tables/change_logging.py:25 +#: netbox/templates/account/profile.html:19 +#: netbox/templates/users/user.html:21 msgid "Full Name" msgstr "П.І.Б." -#: core/tables/change_logging.py:37 core/tables/jobs.py:21 -#: extras/choices.py:41 extras/tables/tables.py:279 -#: extras/tables/tables.py:297 extras/tables/tables.py:329 -#: extras/tables/tables.py:409 extras/tables/tables.py:470 -#: extras/tables/tables.py:576 extras/tables/tables.py:616 -#: extras/tables/tables.py:653 netbox/tables/tables.py:244 -#: templates/core/objectchange.html:58 templates/extras/eventrule.html:78 -#: templates/extras/journalentry.html:18 tenancy/tables/contacts.py:93 -#: vpn/tables/l2vpn.py:64 +#: netbox/core/tables/change_logging.py:37 netbox/core/tables/jobs.py:21 +#: netbox/extras/choices.py:41 netbox/extras/tables/tables.py:279 +#: 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/templates/core/objectchange.html:58 +#: netbox/templates/extras/eventrule.html:78 +#: netbox/templates/extras/journalentry.html:18 +#: netbox/tenancy/tables/contacts.py:93 netbox/vpn/tables/l2vpn.py:64 msgid "Object" msgstr "Об'єкт" -#: core/tables/change_logging.py:42 templates/core/objectchange.html:68 +#: netbox/core/tables/change_logging.py:42 +#: netbox/templates/core/objectchange.html:68 msgid "Request ID" msgstr "Ідентифікатор запиту" -#: core/tables/config.py:21 users/forms/filtersets.py:44 users/tables.py:39 +#: netbox/core/tables/config.py:21 netbox/users/forms/filtersets.py:44 +#: netbox/users/tables.py:39 msgid "Is Active" msgstr "Є активним" -#: core/tables/data.py:50 templates/core/datafile.html:31 +#: netbox/core/tables/data.py:50 netbox/templates/core/datafile.html:31 msgid "Path" -msgstr "Шляху" +msgstr "Шлях" -#: core/tables/data.py:54 templates/extras/inc/result_pending.html:7 +#: netbox/core/tables/data.py:54 +#: netbox/templates/extras/inc/result_pending.html:7 msgid "Last updated" msgstr "Останнє оновлення" -#: core/tables/jobs.py:10 core/tables/tasks.py:76 -#: dcim/tables/devicetypes.py:164 extras/tables/tables.py:216 -#: extras/tables/tables.py:460 netbox/tables/tables.py:189 -#: templates/dcim/virtualchassis_edit.html:52 utilities/forms/forms.py:73 -#: wireless/tables/wirelesslink.py:17 +#: 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/templates/dcim/virtualchassis_edit.html:52 +#: netbox/utilities/forms/forms.py:73 +#: netbox/wireless/tables/wirelesslink.py:17 msgid "ID" msgstr "Ідентифікатор" -#: core/tables/jobs.py:35 +#: netbox/core/tables/jobs.py:35 msgid "Interval" -msgstr "інтервал" +msgstr "Інтервал" -#: core/tables/plugins.py:14 templates/vpn/ipsecprofile.html:44 -#: vpn/forms/bulk_edit.py:141 vpn/forms/bulk_import.py:172 -#: vpn/tables/crypto.py:61 +#: netbox/core/tables/plugins.py:14 netbox/templates/vpn/ipsecprofile.html:44 +#: netbox/vpn/forms/bulk_edit.py:141 netbox/vpn/forms/bulk_import.py:172 +#: netbox/vpn/tables/crypto.py:61 msgid "Version" msgstr "Версія" -#: core/tables/plugins.py:19 templates/core/datafile.html:38 +#: netbox/core/tables/plugins.py:19 netbox/templates/core/datafile.html:38 msgid "Last Updated" msgstr "Останнє оновлення" -#: core/tables/plugins.py:23 +#: netbox/core/tables/plugins.py:23 msgid "Minimum NetBox Version" msgstr "Мінімальна версія NetBox" -#: core/tables/plugins.py:27 +#: netbox/core/tables/plugins.py:27 msgid "Maximum NetBox Version" msgstr "Максимальна версія NetBox" -#: core/tables/plugins.py:31 core/tables/plugins.py:74 +#: netbox/core/tables/plugins.py:31 netbox/core/tables/plugins.py:74 msgid "No plugin data found" msgstr "Не знайдено даних плагіна" -#: core/tables/plugins.py:48 templates/core/plugin.html:62 +#: netbox/core/tables/plugins.py:48 netbox/templates/core/plugin.html:62 msgid "Author" msgstr "Автор" -#: core/tables/plugins.py:54 +#: netbox/core/tables/plugins.py:54 msgid "Installed" msgstr "Встановлено" -#: core/tables/plugins.py:57 templates/core/plugin.html:84 +#: netbox/core/tables/plugins.py:57 netbox/templates/core/plugin.html:84 msgid "Certified" msgstr "Сертифіковано" -#: core/tables/plugins.py:60 +#: netbox/core/tables/plugins.py:60 msgid "Published" msgstr "Опубліковано" -#: core/tables/plugins.py:66 +#: netbox/core/tables/plugins.py:66 msgid "Installed Version" msgstr "Встановлена версія" -#: core/tables/plugins.py:70 +#: netbox/core/tables/plugins.py:70 msgid "Latest Version" msgstr "Найновіша версія" -#: core/tables/tasks.py:18 +#: netbox/core/tables/tasks.py:18 msgid "Oldest Task" msgstr "Найстаріше завдання" -#: core/tables/tasks.py:42 templates/core/rq_worker_list.html:39 +#: netbox/core/tables/tasks.py:42 netbox/templates/core/rq_worker_list.html:39 msgid "Workers" msgstr "Робочі процеси" -#: core/tables/tasks.py:46 vpn/tables/tunnels.py:88 +#: netbox/core/tables/tasks.py:46 netbox/vpn/tables/tunnels.py:88 msgid "Host" msgstr "Ведучий" -#: core/tables/tasks.py:50 ipam/forms/filtersets.py:535 +#: netbox/core/tables/tasks.py:50 netbox/ipam/forms/filtersets.py:535 msgid "Port" msgstr "Порт" -#: core/tables/tasks.py:54 +#: netbox/core/tables/tasks.py:54 msgid "DB" msgstr "База данних" -#: core/tables/tasks.py:58 +#: netbox/core/tables/tasks.py:58 msgid "Scheduler PID" msgstr "Планувальник PID" -#: core/tables/tasks.py:62 +#: netbox/core/tables/tasks.py:62 msgid "No queues found" msgstr "Черг не знайдено" -#: core/tables/tasks.py:82 +#: netbox/core/tables/tasks.py:82 msgid "Enqueued" msgstr "У черзі" -#: core/tables/tasks.py:85 +#: netbox/core/tables/tasks.py:85 msgid "Ended" msgstr "Закінчився" -#: core/tables/tasks.py:93 templates/core/rq_task.html:85 +#: netbox/core/tables/tasks.py:93 netbox/templates/core/rq_task.html:85 msgid "Callable" msgstr "Дзвониться" -#: core/tables/tasks.py:97 +#: netbox/core/tables/tasks.py:97 msgid "No tasks found" msgstr "Завдань не знайдено" -#: core/tables/tasks.py:118 templates/core/rq_worker.html:47 +#: netbox/core/tables/tasks.py:118 netbox/templates/core/rq_worker.html:47 msgid "State" msgstr "Держава" -#: core/tables/tasks.py:121 templates/core/rq_worker.html:51 +#: netbox/core/tables/tasks.py:121 netbox/templates/core/rq_worker.html:51 msgid "Birth" msgstr "Народження" -#: core/tables/tasks.py:124 templates/core/rq_worker.html:59 +#: netbox/core/tables/tasks.py:124 netbox/templates/core/rq_worker.html:59 msgid "PID" msgstr "PID" -#: core/tables/tasks.py:128 +#: netbox/core/tables/tasks.py:128 msgid "No workers found" msgstr "Робочих процессів не знайдено" -#: core/views.py:90 +#: netbox/core/views.py:90 #, python-brace-format msgid "Queued job #{id} to sync {datasource}" msgstr "Завдання у черзі #{id} синхронізовано з {datasource}" -#: core/views.py:319 +#: netbox/core/views.py:319 #, python-brace-format msgid "Restored configuration revision #{id}" msgstr "Відновлена версія конфігурації #{id}" -#: core/views.py:412 core/views.py:455 core/views.py:531 +#: 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 "Завдання {job_id} не знайдено" -#: core/views.py:463 +#: netbox/core/views.py:463 #, python-brace-format msgid "Job {id} has been deleted." msgstr "Завдання {id} було видалено." -#: core/views.py:465 +#: netbox/core/views.py:465 #, python-brace-format msgid "Error deleting job {id}: {error}" msgstr "Помилка при видаленні завдання {id}: {error}" -#: core/views.py:478 core/views.py:496 +#: netbox/core/views.py:478 netbox/core/views.py:496 #, python-brace-format msgid "Job {id} not found." msgstr "Завдання {id} не знайдено." -#: core/views.py:484 +#: netbox/core/views.py:484 #, python-brace-format msgid "Job {id} has been re-enqueued." msgstr "Завдання {id} було знову поставлено в чергу." -#: core/views.py:519 +#: netbox/core/views.py:519 #, python-brace-format msgid "Job {id} has been enqueued." msgstr "Завдання {id} був поставлений у чергу." -#: core/views.py:538 +#: netbox/core/views.py:538 #, python-brace-format msgid "Job {id} has been stopped." msgstr "Завдання {id} було зупинено." -#: core/views.py:540 +#: netbox/core/views.py:540 #, python-brace-format msgid "Failed to stop job {id}" msgstr "Не вдалося зупинити завдання {id}" -#: core/views.py:678 +#: netbox/core/views.py:674 msgid "Plugins catalog could not be loaded" msgstr "Не вдалося завантажити каталог плагінів" -#: core/views.py:712 +#: netbox/core/views.py:708 #, python-brace-format msgid "Plugin {name} not found" msgstr "Плагін {name} не знайдено" -#: dcim/api/serializers_/devices.py:49 dcim/api/serializers_/devicetypes.py:25 +#: netbox/dcim/api/serializers_/devices.py:49 +#: netbox/dcim/api/serializers_/devicetypes.py:25 msgid "Position (U)" msgstr "Позиція (U)" -#: dcim/api/serializers_/racks.py:112 templates/dcim/rack.html:28 +#: netbox/dcim/api/serializers_/racks.py:112 +#: netbox/templates/dcim/rack.html:28 msgid "Facility ID" msgstr "Ідентифікатор об'єкта" -#: dcim/choices.py:21 virtualization/choices.py:21 +#: netbox/dcim/choices.py:21 netbox/virtualization/choices.py:21 msgid "Staging" msgstr "Підготовка" -#: dcim/choices.py:23 dcim/choices.py:189 dcim/choices.py:240 -#: dcim/choices.py:1531 virtualization/choices.py:23 -#: virtualization/choices.py:48 +#: 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 msgid "Decommissioning" msgstr "Виведення з експлуатації" -#: dcim/choices.py:24 +#: netbox/dcim/choices.py:24 msgid "Retired" msgstr "Пенсіонер" -#: dcim/choices.py:65 +#: netbox/dcim/choices.py:65 msgid "2-post frame" msgstr "2-постова рамка" -#: dcim/choices.py:66 +#: netbox/dcim/choices.py:66 msgid "4-post frame" msgstr "4-х стовпчастий каркас" -#: dcim/choices.py:67 +#: netbox/dcim/choices.py:67 msgid "4-post cabinet" msgstr "Дворамна шафа" -#: dcim/choices.py:68 +#: netbox/dcim/choices.py:68 msgid "Wall-mounted frame" msgstr "Настінний каркас" -#: dcim/choices.py:69 +#: netbox/dcim/choices.py:69 msgid "Wall-mounted frame (vertical)" msgstr "Рама настінна (вертикальна)" -#: dcim/choices.py:70 +#: netbox/dcim/choices.py:70 msgid "Wall-mounted cabinet" msgstr "Настінна шафа" -#: dcim/choices.py:71 +#: netbox/dcim/choices.py:71 msgid "Wall-mounted cabinet (vertical)" msgstr "Настінна шафа (вертикальна)" -#: dcim/choices.py:83 dcim/choices.py:84 dcim/choices.py:85 dcim/choices.py:86 +#: netbox/dcim/choices.py:83 netbox/dcim/choices.py:84 +#: netbox/dcim/choices.py:85 netbox/dcim/choices.py:86 #, python-brace-format msgid "{n} inches" msgstr "{n} дюймів" -#: dcim/choices.py:100 ipam/choices.py:32 ipam/choices.py:50 -#: ipam/choices.py:70 ipam/choices.py:155 wireless/choices.py:26 +#: netbox/dcim/choices.py:100 netbox/ipam/choices.py:32 +#: netbox/ipam/choices.py:50 netbox/ipam/choices.py:70 +#: netbox/ipam/choices.py:155 netbox/wireless/choices.py:26 msgid "Reserved" msgstr "Зарезервовано" -#: dcim/choices.py:101 templates/dcim/device.html:259 +#: netbox/dcim/choices.py:101 netbox/templates/dcim/device.html:259 msgid "Available" msgstr "Доступний" -#: dcim/choices.py:104 ipam/choices.py:33 ipam/choices.py:51 -#: ipam/choices.py:71 ipam/choices.py:156 wireless/choices.py:28 +#: netbox/dcim/choices.py:104 netbox/ipam/choices.py:33 +#: netbox/ipam/choices.py:51 netbox/ipam/choices.py:71 +#: netbox/ipam/choices.py:156 netbox/wireless/choices.py:28 msgid "Deprecated" msgstr "Застарілий" -#: dcim/choices.py:114 templates/dcim/inc/panels/racktype_dimensions.html:41 +#: netbox/dcim/choices.py:114 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:41 msgid "Millimeters" msgstr "Міліметри" -#: dcim/choices.py:115 dcim/choices.py:1553 +#: netbox/dcim/choices.py:115 netbox/dcim/choices.py:1555 msgid "Inches" msgstr "Дюйми" -#: dcim/choices.py:136 dcim/choices.py:207 dcim/choices.py:254 +#: netbox/dcim/choices.py:136 netbox/dcim/choices.py:207 +#: netbox/dcim/choices.py:254 msgid "Front to rear" msgstr "Спереду ззаду" -#: dcim/choices.py:137 dcim/choices.py:208 dcim/choices.py:255 +#: netbox/dcim/choices.py:137 netbox/dcim/choices.py:208 +#: netbox/dcim/choices.py:255 msgid "Rear to front" msgstr "Ззаду спереду" -#: dcim/choices.py:151 dcim/forms/bulk_edit.py:68 dcim/forms/bulk_edit.py:87 -#: dcim/forms/bulk_edit.py:173 dcim/forms/bulk_edit.py:1405 -#: dcim/forms/bulk_import.py:60 dcim/forms/bulk_import.py:74 -#: dcim/forms/bulk_import.py:137 dcim/forms/bulk_import.py:566 -#: dcim/forms/bulk_import.py:833 dcim/forms/bulk_import.py:1088 -#: dcim/forms/filtersets.py:234 dcim/forms/model_forms.py:74 -#: dcim/forms/model_forms.py:93 dcim/forms/model_forms.py:170 -#: dcim/forms/model_forms.py:1062 dcim/forms/model_forms.py:1502 -#: dcim/forms/object_import.py:176 dcim/tables/devices.py:656 -#: dcim/tables/devices.py:869 dcim/tables/devices.py:954 -#: extras/tables/tables.py:223 ipam/tables/fhrp.py:59 ipam/tables/ip.py:378 -#: ipam/tables/services.py:44 templates/dcim/interface.html:102 -#: templates/dcim/interface.html:309 templates/dcim/location.html:41 -#: templates/dcim/region.html:37 templates/dcim/sitegroup.html:37 -#: templates/ipam/service.html:28 templates/tenancy/contactgroup.html:29 -#: templates/tenancy/tenantgroup.html:37 -#: templates/virtualization/vminterface.html:39 -#: templates/wireless/wirelesslangroup.html:37 tenancy/forms/bulk_edit.py:27 -#: tenancy/forms/bulk_edit.py:61 tenancy/forms/bulk_import.py:24 -#: tenancy/forms/bulk_import.py:58 tenancy/forms/model_forms.py:25 -#: tenancy/forms/model_forms.py:68 virtualization/forms/bulk_edit.py:207 -#: virtualization/forms/bulk_import.py:151 -#: virtualization/tables/virtualmachines.py:162 wireless/forms/bulk_edit.py:24 -#: wireless/forms/bulk_import.py:21 wireless/forms/model_forms.py:21 +#: 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/templates/dcim/location.html:41 netbox/templates/dcim/region.html:37 +#: netbox/templates/dcim/sitegroup.html:37 +#: netbox/templates/ipam/service.html:28 +#: netbox/templates/tenancy/contactgroup.html:29 +#: netbox/templates/tenancy/tenantgroup.html:37 +#: netbox/templates/virtualization/vminterface.html:39 +#: netbox/templates/wireless/wirelesslangroup.html:37 +#: netbox/tenancy/forms/bulk_edit.py:27 netbox/tenancy/forms/bulk_edit.py:61 +#: netbox/tenancy/forms/bulk_import.py:24 +#: netbox/tenancy/forms/bulk_import.py:58 +#: netbox/tenancy/forms/model_forms.py:25 +#: netbox/tenancy/forms/model_forms.py:68 +#: netbox/virtualization/forms/bulk_edit.py:207 +#: netbox/virtualization/forms/bulk_import.py:151 +#: netbox/virtualization/tables/virtualmachines.py:162 +#: netbox/wireless/forms/bulk_edit.py:24 +#: netbox/wireless/forms/bulk_import.py:21 +#: netbox/wireless/forms/model_forms.py:21 msgid "Parent" msgstr "Прабатько" -#: dcim/choices.py:152 +#: netbox/dcim/choices.py:152 msgid "Child" msgstr "Підпорядкований" -#: dcim/choices.py:166 templates/dcim/device.html:340 -#: templates/dcim/rack.html:133 templates/dcim/rack_elevation_list.html:20 -#: templates/dcim/rackreservation.html:76 +#: netbox/dcim/choices.py:166 netbox/templates/dcim/device.html:340 +#: netbox/templates/dcim/rack.html:133 +#: netbox/templates/dcim/rack_elevation_list.html:20 +#: netbox/templates/dcim/rackreservation.html:76 msgid "Front" msgstr "Спереду" -#: dcim/choices.py:167 templates/dcim/device.html:346 -#: templates/dcim/rack.html:139 templates/dcim/rack_elevation_list.html:21 -#: templates/dcim/rackreservation.html:82 +#: netbox/dcim/choices.py:167 netbox/templates/dcim/device.html:346 +#: netbox/templates/dcim/rack.html:139 +#: netbox/templates/dcim/rack_elevation_list.html:21 +#: netbox/templates/dcim/rackreservation.html:82 msgid "Rear" msgstr "Ззаду" -#: dcim/choices.py:186 dcim/choices.py:238 virtualization/choices.py:46 +#: netbox/dcim/choices.py:186 netbox/dcim/choices.py:238 +#: netbox/virtualization/choices.py:46 msgid "Staged" msgstr "Підготовлено" -#: dcim/choices.py:188 +#: netbox/dcim/choices.py:188 msgid "Inventory" msgstr "Інвентар" -#: dcim/choices.py:209 dcim/choices.py:256 +#: netbox/dcim/choices.py:209 netbox/dcim/choices.py:256 msgid "Left to right" msgstr "Зліва направо" -#: dcim/choices.py:210 dcim/choices.py:257 +#: netbox/dcim/choices.py:210 netbox/dcim/choices.py:257 msgid "Right to left" msgstr "Праворуч наліво" -#: dcim/choices.py:211 dcim/choices.py:258 +#: netbox/dcim/choices.py:211 netbox/dcim/choices.py:258 msgid "Side to rear" msgstr "Збоку ззаду" -#: dcim/choices.py:212 +#: netbox/dcim/choices.py:212 msgid "Rear to side" msgstr "Ззаду в бік" -#: dcim/choices.py:213 +#: netbox/dcim/choices.py:213 msgid "Bottom to top" msgstr "Знизу вгору" -#: dcim/choices.py:214 +#: netbox/dcim/choices.py:214 msgid "Top to bottom" msgstr "Зверху вниз" -#: dcim/choices.py:215 dcim/choices.py:259 dcim/choices.py:1303 +#: netbox/dcim/choices.py:215 netbox/dcim/choices.py:259 +#: netbox/dcim/choices.py:1305 msgid "Passive" msgstr "Пасивний" -#: dcim/choices.py:216 +#: netbox/dcim/choices.py:216 msgid "Mixed" msgstr "Змішаний" -#: dcim/choices.py:484 dcim/choices.py:733 +#: netbox/dcim/choices.py:484 netbox/dcim/choices.py:733 msgid "NEMA (Non-locking)" msgstr "NEMA (без блокування)" -#: dcim/choices.py:506 dcim/choices.py:755 +#: netbox/dcim/choices.py:506 netbox/dcim/choices.py:755 msgid "NEMA (Locking)" msgstr "NEMA (з блокуванням)" -#: dcim/choices.py:530 dcim/choices.py:779 +#: netbox/dcim/choices.py:530 netbox/dcim/choices.py:779 msgid "California Style" msgstr "Каліфорнійський стиль" -#: dcim/choices.py:538 +#: netbox/dcim/choices.py:538 msgid "International/ITA" msgstr "Міжнародний/ITA" -#: dcim/choices.py:573 dcim/choices.py:814 +#: netbox/dcim/choices.py:573 netbox/dcim/choices.py:814 msgid "Proprietary" msgstr "Пропрієтарний" -#: dcim/choices.py:581 dcim/choices.py:824 dcim/choices.py:1219 -#: dcim/choices.py:1221 dcim/choices.py:1447 dcim/choices.py:1449 -#: netbox/navigation/menu.py:200 +#: 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 msgid "Other" msgstr "Інше" -#: dcim/choices.py:787 +#: netbox/dcim/choices.py:787 msgid "ITA/International" msgstr "ITA/Міжнародні" -#: dcim/choices.py:854 +#: netbox/dcim/choices.py:854 msgid "Physical" msgstr "Фізичний" -#: dcim/choices.py:855 dcim/choices.py:1023 +#: netbox/dcim/choices.py:855 netbox/dcim/choices.py:1024 msgid "Virtual" msgstr "Віртуальний" -#: dcim/choices.py:856 dcim/choices.py:1097 dcim/forms/bulk_edit.py:1515 -#: dcim/forms/filtersets.py:1330 dcim/forms/model_forms.py:988 -#: dcim/forms/model_forms.py:1397 netbox/navigation/menu.py:140 -#: netbox/navigation/menu.py:144 templates/dcim/interface.html:210 +#: 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 msgid "Wireless" msgstr "Бездротові мережі" -#: dcim/choices.py:1021 +#: netbox/dcim/choices.py:1022 msgid "Virtual interfaces" msgstr "Віртуальні інтерфейси" -#: dcim/choices.py:1024 dcim/forms/bulk_edit.py:1410 -#: dcim/forms/bulk_import.py:840 dcim/forms/model_forms.py:974 -#: dcim/tables/devices.py:660 templates/dcim/interface.html:106 -#: templates/virtualization/vminterface.html:43 -#: virtualization/forms/bulk_edit.py:212 -#: virtualization/forms/bulk_import.py:158 -#: virtualization/tables/virtualmachines.py:166 +#: 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/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 msgid "Bridge" msgstr "Міст" -#: dcim/choices.py:1025 +#: netbox/dcim/choices.py:1026 msgid "Link Aggregation Group (LAG)" msgstr "Група агрегації каналів (LAG)" -#: dcim/choices.py:1029 +#: netbox/dcim/choices.py:1030 msgid "Ethernet (fixed)" msgstr "Ethernet (фіксований)" -#: dcim/choices.py:1044 +#: netbox/dcim/choices.py:1046 msgid "Ethernet (modular)" msgstr "Ethernet (модульний)" -#: dcim/choices.py:1081 +#: netbox/dcim/choices.py:1083 msgid "Ethernet (backplane)" msgstr "Ethernet (панель)" -#: dcim/choices.py:1113 +#: netbox/dcim/choices.py:1115 msgid "Cellular" msgstr "Стільниковий" -#: dcim/choices.py:1165 dcim/forms/filtersets.py:383 -#: dcim/forms/filtersets.py:809 dcim/forms/filtersets.py:963 -#: dcim/forms/filtersets.py:1542 templates/dcim/inventoryitem.html:52 -#: templates/dcim/virtualchassis_edit.html:54 +#: 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/templates/dcim/virtualchassis_edit.html:54 msgid "Serial" msgstr "Серійний" -#: dcim/choices.py:1180 +#: netbox/dcim/choices.py:1182 msgid "Coaxial" msgstr "Коаксіальний" -#: dcim/choices.py:1200 +#: netbox/dcim/choices.py:1202 msgid "Stacking" msgstr "Стекований" -#: dcim/choices.py:1250 +#: netbox/dcim/choices.py:1252 msgid "Half" msgstr "Половинний" -#: dcim/choices.py:1251 +#: netbox/dcim/choices.py:1253 msgid "Full" msgstr "Повний" -#: dcim/choices.py:1252 netbox/preferences.py:31 wireless/choices.py:480 +#: netbox/dcim/choices.py:1254 netbox/netbox/preferences.py:31 +#: netbox/wireless/choices.py:480 msgid "Auto" msgstr "Авто" -#: dcim/choices.py:1263 +#: netbox/dcim/choices.py:1265 msgid "Access" msgstr "Доступ" -#: dcim/choices.py:1264 ipam/tables/vlans.py:172 ipam/tables/vlans.py:217 -#: templates/dcim/inc/interface_vlans_table.html:7 +#: 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 "З мітками" -#: dcim/choices.py:1265 +#: netbox/dcim/choices.py:1267 msgid "Tagged (All)" msgstr "З мітками (Усі)" -#: dcim/choices.py:1294 +#: netbox/dcim/choices.py:1296 msgid "IEEE Standard" msgstr "Стандарт IEEE" -#: dcim/choices.py:1305 +#: netbox/dcim/choices.py:1307 msgid "Passive 24V (2-pair)" msgstr "Пасивний 24В (2-парний)" -#: dcim/choices.py:1306 +#: netbox/dcim/choices.py:1308 msgid "Passive 24V (4-pair)" msgstr "Пасивний 24В (4-парний)" -#: dcim/choices.py:1307 +#: netbox/dcim/choices.py:1309 msgid "Passive 48V (2-pair)" msgstr "Пасивний 48В (2-парний)" -#: dcim/choices.py:1308 +#: netbox/dcim/choices.py:1310 msgid "Passive 48V (4-pair)" msgstr "Пасивний 48В (4-парний)" -#: dcim/choices.py:1378 dcim/choices.py:1488 +#: netbox/dcim/choices.py:1380 netbox/dcim/choices.py:1490 msgid "Copper" msgstr "Мідний" -#: dcim/choices.py:1401 +#: netbox/dcim/choices.py:1403 msgid "Fiber Optic" msgstr "Волоконно-оптичний" -#: dcim/choices.py:1434 dcim/choices.py:1517 +#: netbox/dcim/choices.py:1436 netbox/dcim/choices.py:1519 msgid "USB" msgstr "USB" -#: dcim/choices.py:1504 +#: netbox/dcim/choices.py:1506 msgid "Fiber" msgstr "Волоконний" -#: dcim/choices.py:1529 dcim/forms/filtersets.py:1227 +#: netbox/dcim/choices.py:1531 netbox/dcim/forms/filtersets.py:1227 msgid "Connected" msgstr "Підключений" -#: dcim/choices.py:1548 wireless/choices.py:497 +#: netbox/dcim/choices.py:1550 netbox/wireless/choices.py:497 msgid "Kilometers" msgstr "Кілометри" -#: dcim/choices.py:1549 templates/dcim/cable_trace.html:65 -#: wireless/choices.py:498 +#: netbox/dcim/choices.py:1551 netbox/templates/dcim/cable_trace.html:65 +#: netbox/wireless/choices.py:498 msgid "Meters" msgstr "Метри" -#: dcim/choices.py:1550 +#: netbox/dcim/choices.py:1552 msgid "Centimeters" msgstr "Сантиметри" -#: dcim/choices.py:1551 wireless/choices.py:499 +#: netbox/dcim/choices.py:1553 netbox/wireless/choices.py:499 msgid "Miles" msgstr "Милі" -#: dcim/choices.py:1552 templates/dcim/cable_trace.html:66 -#: wireless/choices.py:500 +#: netbox/dcim/choices.py:1554 netbox/templates/dcim/cable_trace.html:66 +#: netbox/wireless/choices.py:500 msgid "Feet" msgstr "Фути" -#: dcim/choices.py:1568 templates/dcim/device.html:327 -#: templates/dcim/rack.html:107 +#: netbox/dcim/choices.py:1570 netbox/templates/dcim/device.html:327 +#: netbox/templates/dcim/rack.html:107 msgid "Kilograms" msgstr "Кілограми" -#: dcim/choices.py:1569 +#: netbox/dcim/choices.py:1571 msgid "Grams" msgstr "Грами" -#: dcim/choices.py:1570 templates/dcim/device.html:328 -#: templates/dcim/rack.html:108 +#: netbox/dcim/choices.py:1572 netbox/templates/dcim/device.html:328 +#: netbox/templates/dcim/rack.html:108 msgid "Pounds" msgstr "Фунтів" -#: dcim/choices.py:1571 +#: netbox/dcim/choices.py:1573 msgid "Ounces" msgstr "Унцій" -#: dcim/choices.py:1618 +#: netbox/dcim/choices.py:1620 msgid "Redundant" msgstr "Надлишковий" -#: dcim/choices.py:1639 +#: netbox/dcim/choices.py:1641 msgid "Single phase" msgstr "Однофазний" -#: dcim/choices.py:1640 +#: netbox/dcim/choices.py:1642 msgid "Three-phase" msgstr "Трифазний" -#: dcim/fields.py:45 +#: netbox/dcim/fields.py:45 #, python-brace-format msgid "Invalid MAC address format: {value}" msgstr "Невірний формат MAC-адреси: {value}" -#: dcim/fields.py:71 +#: netbox/dcim/fields.py:71 #, python-brace-format msgid "Invalid WWN format: {value}" msgstr "Невірний формат WWN: {value}" -#: dcim/filtersets.py:86 +#: netbox/dcim/filtersets.py:86 msgid "Parent region (ID)" msgstr "Батьківський регіон (ідентифікатор)" -#: dcim/filtersets.py:92 +#: netbox/dcim/filtersets.py:92 msgid "Parent region (slug)" msgstr "Батьківський регіон (скорочення)" -#: dcim/filtersets.py:116 +#: netbox/dcim/filtersets.py:116 msgid "Parent site group (ID)" msgstr "Батьківська група тех. майданчиків (ідентифікатор)" -#: dcim/filtersets.py:122 +#: netbox/dcim/filtersets.py:122 msgid "Parent site group (slug)" msgstr "Батьківська група тех. майданчиків (скорочення)" -#: dcim/filtersets.py:164 extras/filtersets.py:364 ipam/filtersets.py:841 -#: ipam/filtersets.py:993 +#: netbox/dcim/filtersets.py:164 netbox/extras/filtersets.py:364 +#: netbox/ipam/filtersets.py:841 netbox/ipam/filtersets.py:993 msgid "Group (ID)" msgstr "Група (ідентифікатор)" -#: dcim/filtersets.py:170 +#: netbox/dcim/filtersets.py:170 msgid "Group (slug)" msgstr "Група (скорочення)" -#: dcim/filtersets.py:176 dcim/filtersets.py:181 +#: netbox/dcim/filtersets.py:176 netbox/dcim/filtersets.py:181 msgid "AS (ID)" msgstr "AS (ідентифікатор)" -#: dcim/filtersets.py:246 +#: netbox/dcim/filtersets.py:246 msgid "Parent location (ID)" msgstr "Батьківське місцезнаходження (ідентифікатор)" -#: dcim/filtersets.py:252 +#: netbox/dcim/filtersets.py:252 msgid "Parent location (slug)" msgstr "Батьківське розташування (скорочення)" -#: dcim/filtersets.py:258 dcim/filtersets.py:369 dcim/filtersets.py:490 -#: dcim/filtersets.py:1057 dcim/filtersets.py:1404 dcim/filtersets.py:2182 +#: 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 "Місцезнаходження (ідентифікатор)" -#: dcim/filtersets.py:265 dcim/filtersets.py:376 dcim/filtersets.py:497 -#: dcim/filtersets.py:1410 extras/filtersets.py:542 +#: 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 "Місцезнаходження (скорочення)" -#: dcim/filtersets.py:296 dcim/filtersets.py:381 dcim/filtersets.py:539 -#: dcim/filtersets.py:678 dcim/filtersets.py:882 dcim/filtersets.py:933 -#: dcim/filtersets.py:973 dcim/filtersets.py:1306 dcim/filtersets.py:1840 +#: 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 msgid "Manufacturer (ID)" msgstr "Виробник (ідентифікатор)" -#: dcim/filtersets.py:302 dcim/filtersets.py:387 dcim/filtersets.py:545 -#: dcim/filtersets.py:684 dcim/filtersets.py:888 dcim/filtersets.py:939 -#: dcim/filtersets.py:979 dcim/filtersets.py:1312 dcim/filtersets.py:1846 +#: 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 msgid "Manufacturer (slug)" msgstr "Виробник (скорочення)" -#: dcim/filtersets.py:393 +#: netbox/dcim/filtersets.py:393 msgid "Rack type (slug)" msgstr "Тип стійки (скорочення)" -#: dcim/filtersets.py:397 +#: netbox/dcim/filtersets.py:397 msgid "Rack type (ID)" msgstr "Тип стійки (ідентифікатор)" -#: dcim/filtersets.py:411 dcim/filtersets.py:892 dcim/filtersets.py:994 -#: dcim/filtersets.py:1850 ipam/filtersets.py:381 ipam/filtersets.py:493 -#: ipam/filtersets.py:1003 virtualization/filtersets.py:210 +#: 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 msgid "Role (ID)" msgstr "Роль (ідентифікатор)" -#: dcim/filtersets.py:417 dcim/filtersets.py:898 dcim/filtersets.py:1000 -#: dcim/filtersets.py:1856 extras/filtersets.py:558 ipam/filtersets.py:387 -#: ipam/filtersets.py:499 ipam/filtersets.py:1009 -#: virtualization/filtersets.py:216 +#: 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/virtualization/filtersets.py:216 msgid "Role (slug)" msgstr "Роль (скорочення)" -#: dcim/filtersets.py:447 dcim/filtersets.py:1062 dcim/filtersets.py:1415 -#: dcim/filtersets.py:2244 +#: netbox/dcim/filtersets.py:447 netbox/dcim/filtersets.py:1062 +#: netbox/dcim/filtersets.py:1415 netbox/dcim/filtersets.py:2244 msgid "Rack (ID)" msgstr "Стійка (ідентифікатор)" -#: dcim/filtersets.py:507 extras/filtersets.py:293 extras/filtersets.py:337 -#: extras/filtersets.py:359 extras/filtersets.py:419 users/filtersets.py:113 -#: users/filtersets.py:180 +#: netbox/dcim/filtersets.py:507 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 "Користувач (ім'я)" -#: dcim/filtersets.py:549 +#: netbox/dcim/filtersets.py:549 msgid "Default platform (ID)" msgstr "Платформа за замовчуванням (ідентифікатор)" -#: dcim/filtersets.py:555 +#: netbox/dcim/filtersets.py:555 msgid "Default platform (slug)" msgstr "Платформа за замовчуванням (скорочення)" -#: dcim/filtersets.py:558 dcim/forms/filtersets.py:517 +#: netbox/dcim/filtersets.py:558 netbox/dcim/forms/filtersets.py:517 msgid "Has a front image" msgstr "Має фронтальне зображення" -#: dcim/filtersets.py:562 dcim/forms/filtersets.py:524 +#: netbox/dcim/filtersets.py:562 netbox/dcim/forms/filtersets.py:524 msgid "Has a rear image" msgstr "Має зображення ззаду" -#: dcim/filtersets.py:567 dcim/filtersets.py:688 dcim/filtersets.py:1131 -#: dcim/forms/filtersets.py:531 dcim/forms/filtersets.py:627 -#: dcim/forms/filtersets.py:848 +#: 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 msgid "Has console ports" msgstr "Має консольні порти" -#: dcim/filtersets.py:571 dcim/filtersets.py:692 dcim/filtersets.py:1135 -#: dcim/forms/filtersets.py:538 dcim/forms/filtersets.py:634 -#: dcim/forms/filtersets.py:855 +#: 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 msgid "Has console server ports" msgstr "Має порти консольного сервера" -#: dcim/filtersets.py:575 dcim/filtersets.py:696 dcim/filtersets.py:1139 -#: dcim/forms/filtersets.py:545 dcim/forms/filtersets.py:641 -#: dcim/forms/filtersets.py:862 +#: 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 msgid "Has power ports" msgstr "Має порти живлення" -#: dcim/filtersets.py:579 dcim/filtersets.py:700 dcim/filtersets.py:1143 -#: dcim/forms/filtersets.py:552 dcim/forms/filtersets.py:648 -#: dcim/forms/filtersets.py:869 +#: 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 msgid "Has power outlets" msgstr "Має розетки" -#: dcim/filtersets.py:583 dcim/filtersets.py:704 dcim/filtersets.py:1147 -#: dcim/forms/filtersets.py:559 dcim/forms/filtersets.py:655 -#: dcim/forms/filtersets.py:876 +#: 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 msgid "Has interfaces" msgstr "Має інтерфейси" -#: dcim/filtersets.py:587 dcim/filtersets.py:708 dcim/filtersets.py:1151 -#: dcim/forms/filtersets.py:566 dcim/forms/filtersets.py:662 -#: dcim/forms/filtersets.py:883 +#: 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 msgid "Has pass-through ports" msgstr "Має прохідні порти" -#: dcim/filtersets.py:591 dcim/filtersets.py:1155 dcim/forms/filtersets.py:580 +#: netbox/dcim/filtersets.py:591 netbox/dcim/filtersets.py:1155 +#: netbox/dcim/forms/filtersets.py:580 msgid "Has module bays" msgstr "Має модульні відсіки" -#: dcim/filtersets.py:595 dcim/filtersets.py:1159 dcim/forms/filtersets.py:573 +#: netbox/dcim/filtersets.py:595 netbox/dcim/filtersets.py:1159 +#: netbox/dcim/forms/filtersets.py:573 msgid "Has device bays" msgstr "Має відсіки для пристроїв" -#: dcim/filtersets.py:599 dcim/forms/filtersets.py:587 +#: netbox/dcim/filtersets.py:599 netbox/dcim/forms/filtersets.py:587 msgid "Has inventory items" msgstr "Має предмети інвентарю" -#: dcim/filtersets.py:756 dcim/filtersets.py:989 dcim/filtersets.py:1436 +#: netbox/dcim/filtersets.py:756 netbox/dcim/filtersets.py:989 +#: netbox/dcim/filtersets.py:1436 msgid "Device type (ID)" msgstr "Тип пристрою (ідентифікатор)" -#: dcim/filtersets.py:772 dcim/filtersets.py:1317 +#: netbox/dcim/filtersets.py:772 netbox/dcim/filtersets.py:1317 msgid "Module type (ID)" msgstr "Тип модуля (ідентифікатор)" -#: dcim/filtersets.py:804 dcim/filtersets.py:1591 +#: netbox/dcim/filtersets.py:804 netbox/dcim/filtersets.py:1591 msgid "Power port (ID)" msgstr "Порт живлення (ідентифікатор)" -#: dcim/filtersets.py:878 dcim/filtersets.py:1836 +#: netbox/dcim/filtersets.py:878 netbox/dcim/filtersets.py:1836 msgid "Parent inventory item (ID)" msgstr "Батьківський предмет інвентарю (ідентифікатор)" -#: dcim/filtersets.py:921 dcim/filtersets.py:947 dcim/filtersets.py:1127 -#: virtualization/filtersets.py:238 +#: netbox/dcim/filtersets.py:921 netbox/dcim/filtersets.py:947 +#: netbox/dcim/filtersets.py:1127 netbox/virtualization/filtersets.py:238 msgid "Config template (ID)" msgstr "Шаблон конфігурації (ідентифікатор)" -#: dcim/filtersets.py:985 +#: netbox/dcim/filtersets.py:985 msgid "Device type (slug)" msgstr "Тип пристрою (скорочення)" -#: dcim/filtersets.py:1005 +#: netbox/dcim/filtersets.py:1005 msgid "Parent Device (ID)" msgstr "Батьківський пристрій (ідентифікатор)" -#: dcim/filtersets.py:1009 virtualization/filtersets.py:220 +#: netbox/dcim/filtersets.py:1009 netbox/virtualization/filtersets.py:220 msgid "Platform (ID)" msgstr "Платформа (ідентифікатор)" -#: dcim/filtersets.py:1015 extras/filtersets.py:569 -#: virtualization/filtersets.py:226 +#: netbox/dcim/filtersets.py:1015 netbox/extras/filtersets.py:569 +#: netbox/virtualization/filtersets.py:226 msgid "Platform (slug)" -msgstr "Платформа (скоречення)" +msgstr "Платформа (скорочення)" -#: dcim/filtersets.py:1051 dcim/filtersets.py:1399 dcim/filtersets.py:1934 -#: dcim/filtersets.py:2176 dcim/filtersets.py:2235 +#: 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 msgid "Site name (slug)" -msgstr "Назва тех. майданчика (скоречення)" +msgstr "Назва тех. майданчика (скорочення)" -#: dcim/filtersets.py:1067 +#: netbox/dcim/filtersets.py:1067 msgid "Parent bay (ID)" -msgstr "Батьківська бухта (ідентифікатор)" +msgstr "Батьківський відсік (ідентифікатор)" -#: dcim/filtersets.py:1071 +#: netbox/dcim/filtersets.py:1071 msgid "VM cluster (ID)" msgstr "Кластер віртуальних машини (ідентифікатор)" -#: dcim/filtersets.py:1077 extras/filtersets.py:591 -#: virtualization/filtersets.py:136 +#: netbox/dcim/filtersets.py:1077 netbox/extras/filtersets.py:591 +#: netbox/virtualization/filtersets.py:136 msgid "Cluster group (slug)" -msgstr "Кластерна група (скоречення)" +msgstr "Кластерна група (скорочення)" -#: dcim/filtersets.py:1082 virtualization/filtersets.py:130 +#: netbox/dcim/filtersets.py:1082 netbox/virtualization/filtersets.py:130 msgid "Cluster group (ID)" msgstr "Група кластерів (ідентифікатор)" -#: dcim/filtersets.py:1088 +#: netbox/dcim/filtersets.py:1088 msgid "Device model (slug)" -msgstr "Модель пристрою (скоречення)" +msgstr "Модель пристрою (скорочення)" -#: dcim/filtersets.py:1099 dcim/forms/bulk_edit.py:516 +#: netbox/dcim/filtersets.py:1099 netbox/dcim/forms/bulk_edit.py:522 msgid "Is full depth" msgstr "Це повна глибина" -#: dcim/filtersets.py:1103 dcim/forms/common.py:18 -#: dcim/forms/filtersets.py:818 dcim/forms/filtersets.py:1385 -#: dcim/models/device_components.py:518 virtualization/filtersets.py:230 -#: virtualization/filtersets.py:301 virtualization/forms/filtersets.py:172 -#: virtualization/forms/filtersets.py:223 +#: 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 msgid "MAC address" msgstr "MAC-адреса" -#: dcim/filtersets.py:1110 dcim/filtersets.py:1274 -#: dcim/forms/filtersets.py:827 dcim/forms/filtersets.py:930 -#: virtualization/filtersets.py:234 virtualization/forms/filtersets.py:176 +#: 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 msgid "Has a primary IP" msgstr "Має основний IP" -#: dcim/filtersets.py:1114 +#: netbox/dcim/filtersets.py:1114 msgid "Has an out-of-band IP" msgstr "Має IP для зовнішнього незалежного керування" -#: dcim/filtersets.py:1119 +#: netbox/dcim/filtersets.py:1119 msgid "Virtual chassis (ID)" msgstr "Віртуальне шасі (ідентифікатор)" -#: dcim/filtersets.py:1123 +#: netbox/dcim/filtersets.py:1123 msgid "Is a virtual chassis member" msgstr "Є віртуальним членом шасі" -#: dcim/filtersets.py:1164 +#: netbox/dcim/filtersets.py:1164 msgid "OOB IP (ID)" msgstr "IP для зовнішнього незалежного керування (ідентифікатор)" -#: dcim/filtersets.py:1168 +#: netbox/dcim/filtersets.py:1168 msgid "Has virtual device context" msgstr "Має контекст віртуального пристрою" -#: dcim/filtersets.py:1257 +#: netbox/dcim/filtersets.py:1257 msgid "VDC (ID)" msgstr "Імпульсне джерело живлення (ідентифікатор)" -#: dcim/filtersets.py:1262 +#: netbox/dcim/filtersets.py:1262 msgid "Device model" msgstr "Модель пристрою" -#: dcim/filtersets.py:1267 ipam/filtersets.py:632 vpn/filtersets.py:102 -#: vpn/filtersets.py:401 +#: netbox/dcim/filtersets.py:1267 netbox/ipam/filtersets.py:632 +#: netbox/vpn/filtersets.py:102 netbox/vpn/filtersets.py:401 msgid "Interface (ID)" msgstr "Інтерфейс (ідентифікатор)" -#: dcim/filtersets.py:1323 +#: netbox/dcim/filtersets.py:1323 msgid "Module type (model)" msgstr "Тип модуля (модель)" -#: dcim/filtersets.py:1329 +#: netbox/dcim/filtersets.py:1329 msgid "Module bay (ID)" msgstr "Відсік модуля (ідентифікатор)" -#: dcim/filtersets.py:1333 dcim/filtersets.py:1425 ipam/filtersets.py:611 -#: ipam/filtersets.py:851 ipam/filtersets.py:1115 -#: virtualization/filtersets.py:161 vpn/filtersets.py:379 +#: 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/vpn/filtersets.py:379 msgid "Device (ID)" msgstr "Пристрій (ідентифікатор)" -#: dcim/filtersets.py:1421 +#: netbox/dcim/filtersets.py:1421 msgid "Rack (name)" msgstr "Стійка (назва)" -#: dcim/filtersets.py:1431 ipam/filtersets.py:606 ipam/filtersets.py:846 -#: ipam/filtersets.py:1121 vpn/filtersets.py:374 +#: netbox/dcim/filtersets.py:1431 netbox/ipam/filtersets.py:606 +#: netbox/ipam/filtersets.py:846 netbox/ipam/filtersets.py:1121 +#: netbox/vpn/filtersets.py:374 msgid "Device (name)" msgstr "Пристрій (назва)" -#: dcim/filtersets.py:1442 +#: netbox/dcim/filtersets.py:1442 msgid "Device type (model)" msgstr "Тип пристрою (модель)" -#: dcim/filtersets.py:1447 +#: netbox/dcim/filtersets.py:1447 msgid "Device role (ID)" msgstr "Роль пристрою (ідентифікатор)" -#: dcim/filtersets.py:1453 +#: netbox/dcim/filtersets.py:1453 msgid "Device role (slug)" -msgstr "Роль пристрою (скоречення)" +msgstr "Роль пристрою (скорочення)" -#: dcim/filtersets.py:1458 +#: netbox/dcim/filtersets.py:1458 msgid "Virtual Chassis (ID)" msgstr "Віртуальне шасі (ідентифікатор)" -#: dcim/filtersets.py:1464 dcim/forms/filtersets.py:109 -#: dcim/tables/devices.py:206 netbox/navigation/menu.py:79 -#: templates/dcim/device.html:120 templates/dcim/device_edit.html:93 -#: templates/dcim/virtualchassis.html:20 -#: templates/dcim/virtualchassis_add.html:8 -#: templates/dcim/virtualchassis_edit.html:24 +#: netbox/dcim/filtersets.py:1464 netbox/dcim/forms/filtersets.py:109 +#: netbox/dcim/tables/devices.py:206 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 +#: netbox/templates/dcim/virtualchassis_add.html:8 +#: netbox/templates/dcim/virtualchassis_edit.html:24 msgid "Virtual Chassis" msgstr "Віртуальне шасі" -#: dcim/filtersets.py:1488 +#: netbox/dcim/filtersets.py:1488 msgid "Module (ID)" msgstr "Модуль (ідентифікатор)" -#: dcim/filtersets.py:1495 +#: netbox/dcim/filtersets.py:1495 msgid "Cable (ID)" msgstr "Кабель (ідентифікатор)" -#: dcim/filtersets.py:1604 ipam/forms/bulk_import.py:189 -#: vpn/forms/bulk_import.py:308 +#: netbox/dcim/filtersets.py:1604 netbox/ipam/forms/bulk_import.py:189 +#: netbox/vpn/forms/bulk_import.py:308 msgid "Assigned VLAN" msgstr "Призначений VLAN" -#: dcim/filtersets.py:1608 +#: netbox/dcim/filtersets.py:1608 msgid "Assigned VID" msgstr "Призначений VID" -#: dcim/filtersets.py:1613 dcim/forms/bulk_edit.py:1489 -#: dcim/forms/bulk_import.py:891 dcim/forms/filtersets.py:1428 -#: dcim/forms/model_forms.py:1378 dcim/models/device_components.py:711 -#: dcim/tables/devices.py:626 ipam/filtersets.py:316 ipam/filtersets.py:327 -#: ipam/filtersets.py:483 ipam/filtersets.py:584 ipam/filtersets.py:595 -#: ipam/forms/bulk_edit.py:242 ipam/forms/bulk_edit.py:298 -#: ipam/forms/bulk_edit.py:340 ipam/forms/bulk_import.py:157 -#: ipam/forms/bulk_import.py:243 ipam/forms/bulk_import.py:279 -#: ipam/forms/filtersets.py:67 ipam/forms/filtersets.py:172 -#: ipam/forms/filtersets.py:309 ipam/forms/model_forms.py:62 -#: ipam/forms/model_forms.py:202 ipam/forms/model_forms.py:247 -#: ipam/forms/model_forms.py:300 ipam/forms/model_forms.py:431 -#: ipam/forms/model_forms.py:445 ipam/forms/model_forms.py:459 -#: ipam/models/ip.py:233 ipam/models/ip.py:512 ipam/models/ip.py:720 -#: ipam/models/vrfs.py:62 ipam/tables/ip.py:242 ipam/tables/ip.py:309 -#: ipam/tables/ip.py:360 ipam/tables/ip.py:450 -#: templates/dcim/interface.html:133 templates/ipam/ipaddress.html:18 -#: templates/ipam/iprange.html:40 templates/ipam/prefix.html:19 -#: templates/ipam/vrf.html:7 templates/ipam/vrf.html:13 -#: templates/virtualization/vminterface.html:47 -#: virtualization/forms/bulk_edit.py:261 -#: virtualization/forms/bulk_import.py:171 -#: virtualization/forms/filtersets.py:228 -#: virtualization/forms/model_forms.py:344 -#: virtualization/models/virtualmachines.py:355 -#: virtualization/tables/virtualmachines.py:143 +#: 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:316 +#: netbox/ipam/filtersets.py:327 netbox/ipam/filtersets.py:483 +#: netbox/ipam/filtersets.py:584 netbox/ipam/filtersets.py:595 +#: netbox/ipam/forms/bulk_edit.py: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/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 msgid "VRF" msgstr "VRF" -#: dcim/filtersets.py:1619 ipam/filtersets.py:322 ipam/filtersets.py:333 -#: ipam/filtersets.py:489 ipam/filtersets.py:590 ipam/filtersets.py:601 +#: 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 msgid "VRF (RD)" msgstr "VRF (RD)" -#: dcim/filtersets.py:1624 ipam/filtersets.py:1030 vpn/filtersets.py:342 +#: netbox/dcim/filtersets.py:1624 netbox/ipam/filtersets.py:1030 +#: netbox/vpn/filtersets.py:342 msgid "L2VPN (ID)" msgstr "L2VPN (ідентифікатор)" -#: dcim/filtersets.py:1630 dcim/forms/filtersets.py:1433 -#: dcim/tables/devices.py:570 ipam/filtersets.py:1036 -#: ipam/forms/filtersets.py:518 ipam/tables/vlans.py:137 -#: templates/dcim/interface.html:93 templates/ipam/vlan.html:66 -#: templates/vpn/l2vpntermination.html:12 -#: virtualization/forms/filtersets.py:233 vpn/forms/bulk_import.py:280 -#: vpn/forms/filtersets.py:246 vpn/forms/model_forms.py:409 -#: vpn/forms/model_forms.py:427 vpn/models/l2vpn.py:63 vpn/tables/l2vpn.py:55 +#: netbox/dcim/filtersets.py:1630 netbox/dcim/forms/filtersets.py:1433 +#: netbox/dcim/tables/devices.py:570 netbox/ipam/filtersets.py:1036 +#: 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 +#: netbox/virtualization/forms/filtersets.py:233 +#: netbox/vpn/forms/bulk_import.py:280 netbox/vpn/forms/filtersets.py:246 +#: netbox/vpn/forms/model_forms.py:409 netbox/vpn/forms/model_forms.py:427 +#: netbox/vpn/models/l2vpn.py:63 netbox/vpn/tables/l2vpn.py:55 msgid "L2VPN" msgstr "L2VPN" -#: dcim/filtersets.py:1662 +#: netbox/dcim/filtersets.py:1662 msgid "Virtual Chassis Interfaces for Device" msgstr "Віртуальні інтерфейси шасі для пристрою" -#: dcim/filtersets.py:1667 +#: netbox/dcim/filtersets.py:1667 msgid "Virtual Chassis Interfaces for Device (ID)" msgstr "Віртуальні інтерфейси шасі для пристрою (ідентифікатор)" -#: dcim/filtersets.py:1671 +#: netbox/dcim/filtersets.py:1671 msgid "Kind of interface" msgstr "Вид інтерфейсу" -#: dcim/filtersets.py:1676 virtualization/filtersets.py:293 +#: netbox/dcim/filtersets.py:1676 netbox/virtualization/filtersets.py:293 msgid "Parent interface (ID)" msgstr "Батьківський інтерфейс (ідентифікатор)" -#: dcim/filtersets.py:1681 virtualization/filtersets.py:298 +#: netbox/dcim/filtersets.py:1681 netbox/virtualization/filtersets.py:298 msgid "Bridged interface (ID)" msgstr "Мостовий інтерфейс (ідентифікатор)" -#: dcim/filtersets.py:1686 +#: netbox/dcim/filtersets.py:1686 msgid "LAG interface (ID)" msgstr "Інтерфейс LAG (ідентифікатор)" -#: dcim/filtersets.py:1713 dcim/filtersets.py:1725 -#: dcim/forms/filtersets.py:1345 dcim/forms/model_forms.py:1690 -#: templates/dcim/virtualdevicecontext.html:15 +#: netbox/dcim/filtersets.py:1713 netbox/dcim/filtersets.py:1725 +#: netbox/dcim/forms/filtersets.py:1345 netbox/dcim/forms/model_forms.py:1697 +#: netbox/templates/dcim/virtualdevicecontext.html:15 msgid "Virtual Device Context" msgstr "Контекст віртуального пристрою" -#: dcim/filtersets.py:1719 +#: netbox/dcim/filtersets.py:1719 msgid "Virtual Device Context (Identifier)" msgstr "Контекст віртуального пристрою (ідентифікатор)" -#: dcim/filtersets.py:1730 templates/wireless/wirelesslan.html:11 -#: wireless/forms/model_forms.py:53 +#: netbox/dcim/filtersets.py:1730 +#: netbox/templates/wireless/wirelesslan.html:11 +#: netbox/wireless/forms/model_forms.py:53 msgid "Wireless LAN" msgstr "Бездротова локальна мережа" -#: dcim/filtersets.py:1734 dcim/tables/devices.py:613 +#: netbox/dcim/filtersets.py:1734 netbox/dcim/tables/devices.py:613 msgid "Wireless link" msgstr "Бездротова зв'язок" -#: dcim/filtersets.py:1803 +#: netbox/dcim/filtersets.py:1803 msgid "Parent module bay (ID)" -msgstr "Відсік батьківського модуля (iдентифікатор)" +msgstr "Відсік батьківського модуля (ідентифікатор)" -#: dcim/filtersets.py:1808 +#: netbox/dcim/filtersets.py:1808 msgid "Installed module (ID)" msgstr "Встановлений модуль (ідентифікатор)" -#: dcim/filtersets.py:1819 +#: netbox/dcim/filtersets.py:1819 msgid "Installed device (ID)" msgstr "Встановлений пристрій (ідентифікатор)" -#: dcim/filtersets.py:1825 +#: netbox/dcim/filtersets.py:1825 msgid "Installed device (name)" msgstr "Встановлений пристрій (назва)" -#: dcim/filtersets.py:1891 +#: netbox/dcim/filtersets.py:1891 msgid "Master (ID)" msgstr "Майстер (ідентифікатор)" -#: dcim/filtersets.py:1897 +#: netbox/dcim/filtersets.py:1897 msgid "Master (name)" msgstr "Майстер (ім'я)" -#: dcim/filtersets.py:1939 tenancy/filtersets.py:245 +#: netbox/dcim/filtersets.py:1939 netbox/tenancy/filtersets.py:245 msgid "Tenant (ID)" msgstr "Орендар (ідентифікатор)" -#: dcim/filtersets.py:1945 extras/filtersets.py:618 tenancy/filtersets.py:251 +#: netbox/dcim/filtersets.py:1945 netbox/extras/filtersets.py:618 +#: netbox/tenancy/filtersets.py:251 msgid "Tenant (slug)" -msgstr "Орендар (скоречення)" +msgstr "Орендар (скорочення)" -#: dcim/filtersets.py:1981 dcim/forms/filtersets.py:1077 +#: netbox/dcim/filtersets.py:1981 netbox/dcim/forms/filtersets.py:1077 msgid "Unterminated" msgstr "Незакінчений" -#: dcim/filtersets.py:2239 +#: netbox/dcim/filtersets.py:2239 msgid "Power panel (ID)" msgstr "Панель живлення (ідентифікатор)" -#: dcim/forms/bulk_create.py:40 extras/forms/filtersets.py:401 -#: extras/forms/model_forms.py:567 extras/forms/model_forms.py:619 -#: netbox/forms/base.py:86 netbox/forms/mixins.py:81 -#: netbox/tables/columns.py:478 -#: templates/circuits/inc/circuit_termination.html:32 -#: templates/generic/bulk_edit.html:65 templates/inc/panels/tags.html:5 -#: utilities/forms/fields/fields.py:81 +#: netbox/dcim/forms/bulk_create.py:40 netbox/extras/forms/filtersets.py: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/templates/circuits/inc/circuit_termination.html:32 +#: netbox/templates/generic/bulk_edit.html:65 +#: netbox/templates/inc/panels/tags.html:5 +#: netbox/utilities/forms/fields/fields.py:81 msgid "Tags" msgstr "Мітки" -#: dcim/forms/bulk_create.py:112 dcim/forms/filtersets.py:1498 -#: dcim/forms/model_forms.py:488 dcim/forms/model_forms.py:546 -#: dcim/forms/object_create.py:197 dcim/forms/object_create.py:353 -#: dcim/tables/devices.py:165 dcim/tables/devices.py:707 -#: dcim/tables/devicetypes.py:246 templates/dcim/device.html:43 -#: templates/dcim/device.html:131 templates/dcim/modulebay.html:38 -#: templates/dcim/virtualchassis.html:66 -#: templates/dcim/virtualchassis_edit.html:55 +#: 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/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/templates/dcim/device.html:43 netbox/templates/dcim/device.html:131 +#: netbox/templates/dcim/modulebay.html:38 +#: netbox/templates/dcim/virtualchassis.html:66 +#: netbox/templates/dcim/virtualchassis_edit.html:55 msgid "Position" msgstr "Позиція" -#: dcim/forms/bulk_create.py:114 +#: netbox/dcim/forms/bulk_create.py:114 msgid "" "Alphanumeric ranges are supported. (Must match the number of names being " "created.)" @@ -3116,825 +3446,922 @@ msgstr "" "Підтримуються буквено-цифрові діапазони. (Повинен збігатися з кількістю " "створених імен.)" -#: dcim/forms/bulk_edit.py:132 +#: netbox/dcim/forms/bulk_edit.py:133 msgid "Contact name" msgstr "Ім'я контакту" -#: dcim/forms/bulk_edit.py:137 +#: netbox/dcim/forms/bulk_edit.py:138 msgid "Contact phone" msgstr "Контактний телефон" -#: dcim/forms/bulk_edit.py:143 +#: netbox/dcim/forms/bulk_edit.py:144 msgid "Contact E-mail" msgstr "Контактна адреса електронної пошти" -#: dcim/forms/bulk_edit.py:146 dcim/forms/bulk_import.py:123 -#: dcim/forms/model_forms.py:128 +#: netbox/dcim/forms/bulk_edit.py:147 netbox/dcim/forms/bulk_import.py:123 +#: netbox/dcim/forms/model_forms.py:128 msgid "Time zone" msgstr "Часовий пояс" -#: dcim/forms/bulk_edit.py:224 dcim/forms/bulk_edit.py:495 -#: dcim/forms/bulk_edit.py:559 dcim/forms/bulk_edit.py:632 -#: dcim/forms/bulk_edit.py:656 dcim/forms/bulk_edit.py:740 -#: dcim/forms/bulk_edit.py:1267 dcim/forms/bulk_edit.py:1660 -#: dcim/forms/bulk_import.py:182 dcim/forms/bulk_import.py:371 -#: dcim/forms/bulk_import.py:405 dcim/forms/bulk_import.py:450 -#: dcim/forms/bulk_import.py:486 dcim/forms/bulk_import.py:1082 -#: dcim/forms/filtersets.py:313 dcim/forms/filtersets.py:372 -#: dcim/forms/filtersets.py:494 dcim/forms/filtersets.py:619 -#: dcim/forms/filtersets.py:700 dcim/forms/filtersets.py:782 -#: dcim/forms/filtersets.py:947 dcim/forms/filtersets.py:1539 -#: dcim/forms/model_forms.py:207 dcim/forms/model_forms.py:337 -#: dcim/forms/model_forms.py:349 dcim/forms/model_forms.py:395 -#: dcim/forms/model_forms.py:436 dcim/forms/model_forms.py:1075 -#: dcim/forms/model_forms.py:1515 dcim/forms/object_import.py:187 -#: dcim/tables/devices.py:96 dcim/tables/devices.py:172 -#: dcim/tables/devices.py:940 dcim/tables/devicetypes.py:80 -#: dcim/tables/devicetypes.py:308 dcim/tables/modules.py:20 -#: dcim/tables/modules.py:60 dcim/tables/racks.py:58 dcim/tables/racks.py:132 -#: templates/dcim/devicetype.html:14 templates/dcim/inventoryitem.html:44 -#: templates/dcim/manufacturer.html:33 templates/dcim/modulebay.html:62 -#: templates/dcim/moduletype.html:25 templates/dcim/platform.html:37 -#: templates/dcim/racktype.html:16 +#: 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/tables/modules.py:60 +#: 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/templates/dcim/manufacturer.html:33 +#: netbox/templates/dcim/modulebay.html:62 +#: netbox/templates/dcim/moduletype.html:25 +#: netbox/templates/dcim/platform.html:37 +#: netbox/templates/dcim/racktype.html:16 msgid "Manufacturer" msgstr "Виробник" -#: dcim/forms/bulk_edit.py:229 dcim/forms/bulk_edit.py:372 -#: dcim/forms/bulk_import.py:191 dcim/forms/bulk_import.py:263 -#: dcim/forms/filtersets.py:255 -#: templates/dcim/inc/panels/racktype_dimensions.html:6 +#: 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/templates/dcim/inc/panels/racktype_dimensions.html:6 msgid "Form factor" msgstr "Форм-фактор" -#: dcim/forms/bulk_edit.py:234 dcim/forms/bulk_edit.py:377 -#: dcim/forms/bulk_import.py:199 dcim/forms/bulk_import.py:266 -#: dcim/forms/filtersets.py:260 -#: templates/dcim/inc/panels/racktype_dimensions.html:10 +#: 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/templates/dcim/inc/panels/racktype_dimensions.html:10 msgid "Width" msgstr "Ширина" -#: dcim/forms/bulk_edit.py:240 dcim/forms/bulk_edit.py:383 -#: templates/dcim/devicetype.html:37 +#: netbox/dcim/forms/bulk_edit.py:241 netbox/dcim/forms/bulk_edit.py:389 +#: netbox/dcim/forms/bulk_import.py:280 +#: netbox/templates/dcim/devicetype.html:37 msgid "Height (U)" msgstr "Висота (U)" -#: dcim/forms/bulk_edit.py:249 dcim/forms/bulk_edit.py:388 -#: dcim/forms/filtersets.py:274 +#: netbox/dcim/forms/bulk_edit.py:250 netbox/dcim/forms/bulk_edit.py:394 +#: netbox/dcim/forms/filtersets.py:274 msgid "Descending units" msgstr "Юніти у низхідному порядку" -#: dcim/forms/bulk_edit.py:252 dcim/forms/bulk_edit.py:391 +#: netbox/dcim/forms/bulk_edit.py:253 netbox/dcim/forms/bulk_edit.py:397 msgid "Outer width" msgstr "Зовнішня ширина" -#: dcim/forms/bulk_edit.py:257 dcim/forms/bulk_edit.py:396 +#: netbox/dcim/forms/bulk_edit.py:258 netbox/dcim/forms/bulk_edit.py:402 msgid "Outer depth" msgstr "Зовнішня глибина" -#: dcim/forms/bulk_edit.py:262 dcim/forms/bulk_edit.py:401 -#: dcim/forms/bulk_import.py:204 dcim/forms/bulk_import.py:271 +#: 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 msgid "Outer unit" msgstr "Зовнішній блок" -#: dcim/forms/bulk_edit.py:267 dcim/forms/bulk_edit.py:406 +#: netbox/dcim/forms/bulk_edit.py:268 netbox/dcim/forms/bulk_edit.py:412 msgid "Mounting depth" msgstr "Глибина монтажу" -#: dcim/forms/bulk_edit.py:272 dcim/forms/bulk_edit.py:299 -#: dcim/forms/bulk_edit.py:416 dcim/forms/bulk_edit.py:446 -#: dcim/forms/bulk_edit.py:529 dcim/forms/bulk_edit.py:552 -#: dcim/forms/bulk_edit.py:573 dcim/forms/bulk_edit.py:595 -#: dcim/forms/bulk_import.py:384 dcim/forms/bulk_import.py:416 -#: dcim/forms/filtersets.py:285 dcim/forms/filtersets.py:307 -#: dcim/forms/filtersets.py:327 dcim/forms/filtersets.py:401 -#: dcim/forms/filtersets.py:488 dcim/forms/filtersets.py:594 -#: dcim/forms/filtersets.py:613 dcim/forms/filtersets.py:674 -#: dcim/forms/model_forms.py:221 dcim/forms/model_forms.py:298 -#: dcim/tables/devicetypes.py:106 dcim/tables/modules.py:35 -#: dcim/tables/racks.py:74 dcim/tables/racks.py:172 -#: extras/forms/bulk_edit.py:53 extras/forms/bulk_edit.py:133 -#: extras/forms/bulk_edit.py:183 extras/forms/bulk_edit.py:288 -#: extras/forms/filtersets.py:64 extras/forms/filtersets.py:156 -#: extras/forms/filtersets.py:243 ipam/forms/bulk_edit.py:190 -#: templates/dcim/device.html:324 templates/dcim/devicetype.html:49 -#: templates/dcim/moduletype.html:45 templates/dcim/rack.html:81 -#: templates/dcim/racktype.html:41 templates/extras/configcontext.html:17 -#: templates/extras/customlink.html:25 templates/extras/savedfilter.html:33 -#: templates/ipam/role.html:30 +#: netbox/dcim/forms/bulk_edit.py: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/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/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/racktype.html:41 +#: netbox/templates/extras/configcontext.html:17 +#: netbox/templates/extras/customlink.html:25 +#: netbox/templates/extras/savedfilter.html:33 +#: netbox/templates/ipam/role.html:30 msgid "Weight" msgstr "Вага" -#: dcim/forms/bulk_edit.py:277 dcim/forms/bulk_edit.py:421 -#: dcim/forms/filtersets.py:290 +#: netbox/dcim/forms/bulk_edit.py:278 netbox/dcim/forms/bulk_edit.py:427 +#: netbox/dcim/forms/filtersets.py:290 msgid "Max weight" msgstr "Максимальна вага" -#: dcim/forms/bulk_edit.py:282 dcim/forms/bulk_edit.py:426 -#: dcim/forms/bulk_edit.py:534 dcim/forms/bulk_edit.py:578 -#: dcim/forms/bulk_import.py:210 dcim/forms/bulk_import.py:283 -#: dcim/forms/bulk_import.py:389 dcim/forms/bulk_import.py:421 -#: dcim/forms/filtersets.py:295 dcim/forms/filtersets.py:598 -#: dcim/forms/filtersets.py:678 +#: 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 msgid "Weight unit" msgstr "Вага юніта" -#: dcim/forms/bulk_edit.py:296 dcim/forms/filtersets.py:305 -#: dcim/forms/model_forms.py:217 dcim/forms/model_forms.py:256 -#: templates/dcim/rack.html:45 templates/dcim/racktype.html:13 +#: 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/templates/dcim/rack.html:45 netbox/templates/dcim/racktype.html:13 msgid "Rack Type" msgstr "Тип стійки" -#: dcim/forms/bulk_edit.py:298 dcim/forms/model_forms.py:220 -#: dcim/forms/model_forms.py:297 +#: netbox/dcim/forms/bulk_edit.py:299 netbox/dcim/forms/model_forms.py:220 +#: netbox/dcim/forms/model_forms.py:297 msgid "Outer Dimensions" msgstr "Зовнішні розміри" -#: dcim/forms/bulk_edit.py:301 dcim/forms/model_forms.py:222 -#: dcim/forms/model_forms.py:299 templates/dcim/device.html:315 -#: templates/dcim/inc/panels/racktype_dimensions.html:3 +#: 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/templates/dcim/inc/panels/racktype_dimensions.html:3 msgid "Dimensions" msgstr "Габарити" -#: dcim/forms/bulk_edit.py:303 dcim/forms/filtersets.py:306 -#: dcim/forms/filtersets.py:326 dcim/forms/model_forms.py:224 -#: templates/dcim/inc/panels/racktype_numbering.html:3 +#: 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/templates/dcim/inc/panels/racktype_numbering.html:3 msgid "Numbering" msgstr "Нумерація" -#: dcim/forms/bulk_edit.py:357 dcim/forms/bulk_edit.py:1262 -#: dcim/forms/bulk_edit.py:1655 dcim/forms/bulk_import.py:253 -#: dcim/forms/bulk_import.py:1076 dcim/forms/filtersets.py:367 -#: dcim/forms/filtersets.py:777 dcim/forms/filtersets.py:1534 -#: dcim/forms/model_forms.py:251 dcim/forms/model_forms.py:1070 -#: dcim/forms/model_forms.py:1510 dcim/forms/object_import.py:181 -#: dcim/tables/devices.py:169 dcim/tables/devices.py:809 -#: dcim/tables/devices.py:937 dcim/tables/devicetypes.py:304 -#: dcim/tables/racks.py:129 extras/filtersets.py:552 -#: ipam/forms/bulk_edit.py:261 ipam/forms/bulk_edit.py:311 -#: ipam/forms/bulk_edit.py:359 ipam/forms/bulk_edit.py:511 -#: ipam/forms/bulk_import.py:197 ipam/forms/bulk_import.py:262 -#: ipam/forms/bulk_import.py:298 ipam/forms/bulk_import.py:455 -#: ipam/forms/filtersets.py:237 ipam/forms/filtersets.py:289 -#: ipam/forms/filtersets.py:360 ipam/forms/filtersets.py:509 -#: ipam/forms/model_forms.py:188 ipam/forms/model_forms.py:221 -#: ipam/forms/model_forms.py:250 ipam/forms/model_forms.py:643 -#: ipam/tables/ip.py:258 ipam/tables/ip.py:316 ipam/tables/ip.py:367 -#: ipam/tables/vlans.py:130 ipam/tables/vlans.py:235 -#: templates/dcim/device.html:182 -#: templates/dcim/inc/panels/inventory_items.html:20 -#: templates/dcim/interface.html:223 templates/dcim/inventoryitem.html:36 -#: templates/dcim/rack.html:49 templates/ipam/ipaddress.html:41 -#: templates/ipam/iprange.html:50 templates/ipam/prefix.html:77 -#: templates/ipam/role.html:19 templates/ipam/vlan.html:52 -#: templates/virtualization/virtualmachine.html:23 -#: templates/vpn/tunneltermination.html:17 -#: templates/wireless/inc/wirelesslink_interface.html:20 -#: tenancy/forms/bulk_edit.py:142 tenancy/forms/filtersets.py:107 -#: tenancy/forms/model_forms.py:137 tenancy/tables/contacts.py:102 -#: virtualization/forms/bulk_edit.py:145 -#: virtualization/forms/bulk_import.py:106 -#: virtualization/forms/filtersets.py:157 -#: virtualization/forms/model_forms.py:195 -#: virtualization/tables/virtualmachines.py:75 vpn/forms/bulk_edit.py:87 -#: vpn/forms/bulk_import.py:81 vpn/forms/filtersets.py:85 -#: vpn/forms/model_forms.py:78 vpn/forms/model_forms.py:113 -#: vpn/tables/tunnels.py:82 +#: netbox/dcim/forms/bulk_edit.py: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 "Роль" -#: dcim/forms/bulk_edit.py:364 dcim/forms/bulk_edit.py:712 -#: dcim/forms/bulk_edit.py:764 templates/dcim/device.html:104 -#: templates/dcim/module.html:77 templates/dcim/modulebay.html:70 -#: templates/dcim/rack.html:57 templates/virtualization/virtualmachine.html:35 +#: netbox/dcim/forms/bulk_edit.py:363 netbox/dcim/forms/bulk_import.py:260 +#: netbox/dcim/forms/filtersets.py:380 +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/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 "Серійний номер" -#: dcim/forms/bulk_edit.py:367 dcim/forms/filtersets.py:387 -#: dcim/forms/filtersets.py:813 dcim/forms/filtersets.py:967 -#: dcim/forms/filtersets.py:1546 +#: 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 msgid "Asset tag" msgstr "Призначеня міток" -#: dcim/forms/bulk_edit.py:411 dcim/forms/bulk_edit.py:524 -#: dcim/forms/bulk_edit.py:568 dcim/forms/bulk_edit.py:705 -#: dcim/forms/bulk_import.py:277 dcim/forms/bulk_import.py:410 -#: dcim/forms/bulk_import.py:580 dcim/forms/filtersets.py:280 -#: dcim/forms/filtersets.py:511 dcim/forms/filtersets.py:669 -#: dcim/forms/filtersets.py:804 templates/dcim/device.html:98 -#: templates/dcim/devicetype.html:65 templates/dcim/moduletype.html:41 -#: templates/dcim/rack.html:65 templates/dcim/racktype.html:28 +#: 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/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 "Потік повітря" -#: dcim/forms/bulk_edit.py:440 dcim/forms/bulk_edit.py:910 -#: dcim/forms/bulk_import.py:322 dcim/forms/bulk_import.py:325 -#: dcim/forms/bulk_import.py:553 dcim/forms/bulk_import.py:1358 -#: dcim/forms/bulk_import.py:1362 dcim/forms/filtersets.py:104 -#: dcim/forms/filtersets.py:324 dcim/forms/filtersets.py:405 -#: dcim/forms/filtersets.py:419 dcim/forms/filtersets.py:457 -#: dcim/forms/filtersets.py:772 dcim/forms/filtersets.py:1035 -#: dcim/forms/filtersets.py:1167 dcim/forms/model_forms.py:264 -#: dcim/forms/model_forms.py:306 dcim/forms/model_forms.py:479 -#: dcim/forms/model_forms.py:755 dcim/forms/object_create.py:400 -#: dcim/tables/devices.py:161 dcim/tables/power.py:70 dcim/tables/racks.py:217 -#: ipam/forms/filtersets.py:442 templates/dcim/device.html:30 -#: templates/dcim/inc/cable_termination.html:16 -#: templates/dcim/powerfeed.html:28 templates/dcim/rack.html:13 -#: templates/dcim/rack/base.html:4 templates/dcim/rackreservation.html:19 -#: templates/dcim/rackreservation.html:36 -#: virtualization/forms/model_forms.py:113 +#: netbox/dcim/forms/bulk_edit.py: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/templates/dcim/device.html:30 +#: netbox/templates/dcim/inc/cable_termination.html:16 +#: netbox/templates/dcim/powerfeed.html:28 netbox/templates/dcim/rack.html:13 +#: netbox/templates/dcim/rack/base.html:4 +#: netbox/templates/dcim/rackreservation.html:19 +#: netbox/templates/dcim/rackreservation.html:36 +#: netbox/virtualization/forms/model_forms.py:113 msgid "Rack" msgstr "Стійка" -#: dcim/forms/bulk_edit.py:444 dcim/forms/bulk_edit.py:730 -#: dcim/forms/filtersets.py:325 dcim/forms/filtersets.py:398 -#: dcim/forms/filtersets.py:481 dcim/forms/filtersets.py:608 -#: dcim/forms/filtersets.py:721 dcim/forms/filtersets.py:942 -#: dcim/forms/model_forms.py:670 dcim/forms/model_forms.py:1580 -#: templates/dcim/device_edit.html:20 +#: 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/templates/dcim/device_edit.html:20 msgid "Hardware" msgstr "Апаратне забезпечення" -#: dcim/forms/bulk_edit.py:500 dcim/forms/bulk_import.py:377 -#: dcim/forms/filtersets.py:499 dcim/forms/model_forms.py:353 +#: 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 msgid "Default platform" msgstr "Платформа за замовчуванням" -#: dcim/forms/bulk_edit.py:505 dcim/forms/bulk_edit.py:564 -#: dcim/forms/filtersets.py:502 dcim/forms/filtersets.py:622 +#: 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 msgid "Part number" msgstr "Номер партії" -#: dcim/forms/bulk_edit.py:509 +#: netbox/dcim/forms/bulk_edit.py:515 msgid "U height" msgstr "Висота U" -#: dcim/forms/bulk_edit.py:521 dcim/tables/devicetypes.py:102 +#: netbox/dcim/forms/bulk_edit.py:527 netbox/dcim/tables/devicetypes.py:102 msgid "Exclude from utilization" msgstr "Виключити з утилізації" -#: dcim/forms/bulk_edit.py:550 dcim/forms/model_forms.py:368 -#: dcim/tables/devicetypes.py:77 templates/dcim/device.html:88 -#: templates/dcim/devicebay.html:52 templates/dcim/module.html:61 +#: 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/templates/dcim/devicebay.html:52 +#: netbox/templates/dcim/module.html:61 msgid "Device Type" msgstr "Тип пристрою" -#: dcim/forms/bulk_edit.py:592 dcim/forms/model_forms.py:401 -#: dcim/tables/modules.py:17 dcim/tables/modules.py:65 -#: templates/dcim/module.html:65 templates/dcim/modulebay.html:66 -#: templates/dcim/moduletype.html:22 +#: 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/templates/dcim/module.html:65 +#: netbox/templates/dcim/modulebay.html:66 +#: netbox/templates/dcim/moduletype.html:22 msgid "Module Type" msgstr "Тип модуля" -#: dcim/forms/bulk_edit.py:596 dcim/forms/model_forms.py:371 -#: dcim/forms/model_forms.py:402 templates/dcim/devicetype.html:11 +#: netbox/dcim/forms/bulk_edit.py:602 netbox/dcim/forms/model_forms.py:371 +#: netbox/dcim/forms/model_forms.py:402 +#: netbox/templates/dcim/devicetype.html:11 msgid "Chassis" msgstr "Шасі" -#: dcim/forms/bulk_edit.py:610 dcim/models/devices.py:484 -#: dcim/tables/devices.py:67 +#: netbox/dcim/forms/bulk_edit.py:616 netbox/dcim/models/devices.py:484 +#: netbox/dcim/tables/devices.py:67 msgid "VM role" msgstr "Роль віртуальної машини" -#: dcim/forms/bulk_edit.py:613 dcim/forms/bulk_edit.py:637 -#: dcim/forms/bulk_edit.py:720 dcim/forms/bulk_import.py:434 -#: dcim/forms/bulk_import.py:438 dcim/forms/bulk_import.py:457 -#: dcim/forms/bulk_import.py:461 dcim/forms/bulk_import.py:586 -#: dcim/forms/bulk_import.py:590 dcim/forms/filtersets.py:689 -#: dcim/forms/filtersets.py:705 dcim/forms/filtersets.py:823 -#: dcim/forms/model_forms.py:415 dcim/forms/model_forms.py:441 -#: dcim/forms/model_forms.py:555 virtualization/forms/bulk_import.py:132 -#: virtualization/forms/bulk_import.py:133 -#: virtualization/forms/filtersets.py:188 -#: virtualization/forms/model_forms.py:215 +#: 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 msgid "Config template" msgstr "Шаблон конфігурації" -#: dcim/forms/bulk_edit.py:661 dcim/forms/bulk_edit.py:1061 -#: dcim/forms/bulk_import.py:492 dcim/forms/filtersets.py:114 -#: dcim/forms/model_forms.py:501 dcim/forms/model_forms.py:872 -#: dcim/forms/model_forms.py:889 extras/filtersets.py:547 +#: 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 msgid "Device type" msgstr "Тип пристрою" -#: dcim/forms/bulk_edit.py:672 dcim/forms/bulk_import.py:473 -#: dcim/forms/filtersets.py:119 dcim/forms/model_forms.py:509 +#: 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 msgid "Device role" msgstr "Роль пристрою" -#: dcim/forms/bulk_edit.py:695 dcim/forms/bulk_import.py:498 -#: dcim/forms/filtersets.py:796 dcim/forms/model_forms.py:451 -#: dcim/forms/model_forms.py:513 dcim/tables/devices.py:182 -#: extras/filtersets.py:563 templates/dcim/device.html:186 -#: templates/dcim/platform.html:26 -#: templates/virtualization/virtualmachine.html:27 -#: virtualization/forms/bulk_edit.py:160 -#: virtualization/forms/bulk_import.py:122 -#: virtualization/forms/filtersets.py:168 -#: virtualization/forms/model_forms.py:203 -#: virtualization/tables/virtualmachines.py:79 +#: 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/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 msgid "Platform" msgstr "Платформа" -#: dcim/forms/bulk_edit.py:728 dcim/forms/bulk_edit.py:1281 -#: dcim/forms/bulk_edit.py:1650 dcim/forms/bulk_edit.py:1696 -#: dcim/forms/bulk_import.py:641 dcim/forms/bulk_import.py:703 -#: dcim/forms/bulk_import.py:729 dcim/forms/bulk_import.py:755 -#: dcim/forms/bulk_import.py:775 dcim/forms/bulk_import.py:828 -#: dcim/forms/bulk_import.py:946 dcim/forms/bulk_import.py:994 -#: dcim/forms/bulk_import.py:1011 dcim/forms/bulk_import.py:1023 -#: dcim/forms/bulk_import.py:1071 dcim/forms/bulk_import.py:1422 -#: dcim/forms/connections.py:24 dcim/forms/filtersets.py:131 -#: dcim/forms/filtersets.py:921 dcim/forms/filtersets.py:1051 -#: dcim/forms/filtersets.py:1242 dcim/forms/filtersets.py:1267 -#: dcim/forms/filtersets.py:1291 dcim/forms/filtersets.py:1311 -#: dcim/forms/filtersets.py:1334 dcim/forms/filtersets.py:1444 -#: dcim/forms/filtersets.py:1469 dcim/forms/filtersets.py:1493 -#: dcim/forms/filtersets.py:1511 dcim/forms/filtersets.py:1528 -#: dcim/forms/filtersets.py:1592 dcim/forms/filtersets.py:1616 -#: dcim/forms/filtersets.py:1640 dcim/forms/model_forms.py:633 -#: dcim/forms/model_forms.py:849 dcim/forms/model_forms.py:1208 -#: dcim/forms/model_forms.py:1664 dcim/forms/object_create.py:257 -#: dcim/tables/connections.py:22 dcim/tables/connections.py:41 -#: dcim/tables/connections.py:60 dcim/tables/devices.py:285 -#: dcim/tables/devices.py:371 dcim/tables/devices.py:412 -#: dcim/tables/devices.py:454 dcim/tables/devices.py:505 -#: dcim/tables/devices.py:597 dcim/tables/devices.py:697 -#: dcim/tables/devices.py:754 dcim/tables/devices.py:801 -#: dcim/tables/devices.py:861 dcim/tables/devices.py:930 -#: dcim/tables/devices.py:1057 dcim/tables/modules.py:52 -#: extras/forms/filtersets.py:321 ipam/forms/bulk_import.py:304 -#: ipam/forms/bulk_import.py:481 ipam/forms/filtersets.py:551 -#: ipam/forms/model_forms.py:319 ipam/forms/model_forms.py:679 -#: ipam/forms/model_forms.py:712 ipam/forms/model_forms.py:738 -#: ipam/tables/vlans.py:180 templates/dcim/consoleport.html:20 -#: templates/dcim/consoleserverport.html:20 templates/dcim/device.html:15 -#: templates/dcim/device.html:130 templates/dcim/device_edit.html:10 -#: templates/dcim/devicebay.html:20 templates/dcim/devicebay.html:48 -#: templates/dcim/frontport.html:20 templates/dcim/interface.html:30 -#: templates/dcim/interface.html:161 templates/dcim/inventoryitem.html:20 -#: templates/dcim/module.html:57 templates/dcim/modulebay.html:20 -#: templates/dcim/poweroutlet.html:20 templates/dcim/powerport.html:20 -#: templates/dcim/rearport.html:20 templates/dcim/virtualchassis.html:65 -#: templates/dcim/virtualchassis_edit.html:51 -#: templates/dcim/virtualdevicecontext.html:22 -#: templates/virtualization/virtualmachine.html:114 -#: templates/vpn/tunneltermination.html:23 -#: templates/wireless/inc/wirelesslink_interface.html:6 -#: virtualization/filtersets.py:167 virtualization/forms/bulk_edit.py:137 -#: virtualization/forms/bulk_import.py:99 -#: virtualization/forms/filtersets.py:128 -#: virtualization/forms/model_forms.py:185 -#: virtualization/tables/virtualmachines.py:71 vpn/choices.py:44 -#: vpn/forms/bulk_import.py:86 vpn/forms/bulk_import.py:283 -#: vpn/forms/filtersets.py:275 vpn/forms/model_forms.py:90 -#: vpn/forms/model_forms.py:125 vpn/forms/model_forms.py:236 -#: vpn/forms/model_forms.py:453 wireless/forms/model_forms.py:99 -#: wireless/forms/model_forms.py:141 wireless/tables/wirelesslan.py:75 -msgid "Device" -msgstr "Пристрій" - -#: dcim/forms/bulk_edit.py:731 templates/extras/dashboard/widget_config.html:7 -#: virtualization/forms/bulk_edit.py:191 -msgid "Configuration" -msgstr "Конфігурація" - -#: dcim/forms/bulk_edit.py:745 dcim/forms/bulk_import.py:653 -#: dcim/forms/model_forms.py:647 dcim/forms/model_forms.py:897 -msgid "Module type" -msgstr "Тип модуля" - -#: dcim/forms/bulk_edit.py:799 dcim/forms/bulk_edit.py:984 -#: dcim/forms/bulk_edit.py:1003 dcim/forms/bulk_edit.py:1026 -#: dcim/forms/bulk_edit.py:1068 dcim/forms/bulk_edit.py:1112 -#: dcim/forms/bulk_edit.py:1163 dcim/forms/bulk_edit.py:1190 -#: dcim/forms/bulk_edit.py:1217 dcim/forms/bulk_edit.py:1235 -#: dcim/forms/bulk_edit.py:1253 dcim/forms/filtersets.py:67 -#: dcim/forms/object_create.py:46 templates/dcim/cable.html:32 -#: templates/dcim/consoleport.html:32 templates/dcim/consoleserverport.html:32 -#: templates/dcim/devicebay.html:28 templates/dcim/frontport.html:32 -#: templates/dcim/inc/panels/inventory_items.html:19 -#: templates/dcim/interface.html:42 templates/dcim/inventoryitem.html:32 -#: templates/dcim/modulebay.html:34 templates/dcim/poweroutlet.html:32 -#: templates/dcim/powerport.html:32 templates/dcim/rearport.html:32 -#: templates/extras/customfield.html:26 templates/generic/bulk_import.html:162 -msgid "Label" -msgstr "Етикетка" - -#: dcim/forms/bulk_edit.py:808 dcim/forms/filtersets.py:1068 -#: templates/dcim/cable.html:50 -msgid "Length" -msgstr "Довжина" - -#: dcim/forms/bulk_edit.py:813 dcim/forms/bulk_import.py:1226 -#: dcim/forms/bulk_import.py:1229 dcim/forms/filtersets.py:1072 -msgid "Length unit" -msgstr "Довжина юніта" - -#: dcim/forms/bulk_edit.py:837 templates/dcim/virtualchassis.html:23 -msgid "Domain" -msgstr "Домен" - -#: dcim/forms/bulk_edit.py:905 dcim/forms/bulk_import.py:1345 -#: dcim/forms/filtersets.py:1158 dcim/forms/model_forms.py:750 -msgid "Power panel" -msgstr "Панель живлення" - -#: dcim/forms/bulk_edit.py:927 dcim/forms/bulk_import.py:1381 -#: dcim/forms/filtersets.py:1180 templates/dcim/powerfeed.html:83 -msgid "Supply" -msgstr "Постачання" - -#: dcim/forms/bulk_edit.py:933 dcim/forms/bulk_import.py:1386 -#: dcim/forms/filtersets.py:1185 templates/dcim/powerfeed.html:95 -msgid "Phase" -msgstr "Фаза" - -#: dcim/forms/bulk_edit.py:939 dcim/forms/filtersets.py:1190 -#: templates/dcim/powerfeed.html:87 -msgid "Voltage" -msgstr "Напруга" - -#: dcim/forms/bulk_edit.py:943 dcim/forms/filtersets.py:1194 -#: templates/dcim/powerfeed.html:91 -msgid "Amperage" -msgstr "Сила струму" - -#: dcim/forms/bulk_edit.py:947 dcim/forms/filtersets.py:1198 -msgid "Max utilization" -msgstr "Максимальне використання" - -#: dcim/forms/bulk_edit.py:1036 -msgid "Maximum draw" -msgstr "Максимальна потужність" - -#: dcim/forms/bulk_edit.py:1039 dcim/models/device_component_templates.py:282 -#: dcim/models/device_components.py:356 -msgid "Maximum power draw (watts)" -msgstr "Максимальна споживана потужність (Вт)" - -#: dcim/forms/bulk_edit.py:1042 -msgid "Allocated draw" -msgstr "Виділена потужність" - -#: dcim/forms/bulk_edit.py:1045 dcim/models/device_component_templates.py:289 -#: dcim/models/device_components.py:363 -msgid "Allocated power draw (watts)" -msgstr "Виділена споживана потужність (Вт)" - -#: dcim/forms/bulk_edit.py:1078 dcim/forms/bulk_import.py:786 -#: dcim/forms/model_forms.py:953 dcim/forms/model_forms.py:1278 -#: dcim/forms/model_forms.py:1567 dcim/forms/object_import.py:55 -msgid "Power port" -msgstr "Порт живлення" - -#: dcim/forms/bulk_edit.py:1083 dcim/forms/bulk_import.py:793 -msgid "Feed leg" -msgstr "Фідер живлення" - -#: dcim/forms/bulk_edit.py:1129 dcim/forms/bulk_edit.py:1440 -msgid "Management only" -msgstr "Тільки управління" - -#: dcim/forms/bulk_edit.py:1139 dcim/forms/bulk_edit.py:1446 -#: dcim/forms/bulk_import.py:876 dcim/forms/filtersets.py:1394 -#: dcim/forms/object_import.py:90 -#: dcim/models/device_component_templates.py:437 -#: dcim/models/device_components.py:670 -msgid "PoE mode" -msgstr "Режим PoE" - -#: dcim/forms/bulk_edit.py:1145 dcim/forms/bulk_edit.py:1452 -#: dcim/forms/bulk_import.py:882 dcim/forms/filtersets.py:1399 -#: dcim/forms/object_import.py:95 -#: dcim/models/device_component_templates.py:443 -#: dcim/models/device_components.py:676 -msgid "PoE type" -msgstr "Тип PoE" - -#: dcim/forms/bulk_edit.py:1151 dcim/forms/filtersets.py:1404 -#: dcim/forms/object_import.py:100 -msgid "Wireless role" -msgstr "Бездротова роль" - -#: dcim/forms/bulk_edit.py:1288 dcim/forms/model_forms.py:669 -#: dcim/forms/model_forms.py:1223 dcim/tables/devices.py:313 -#: templates/dcim/consoleport.html:24 templates/dcim/consoleserverport.html:24 -#: templates/dcim/frontport.html:24 templates/dcim/interface.html:34 -#: templates/dcim/module.html:54 templates/dcim/modulebay.html:26 -#: templates/dcim/modulebay.html:58 templates/dcim/poweroutlet.html:24 -#: templates/dcim/powerport.html:24 templates/dcim/rearport.html:24 -msgid "Module" -msgstr "Модуль" - -#: dcim/forms/bulk_edit.py:1420 dcim/tables/devices.py:665 -#: templates/dcim/interface.html:110 -msgid "LAG" -msgstr "LAG" - -#: dcim/forms/bulk_edit.py:1425 dcim/forms/model_forms.py:1305 -msgid "Virtual device contexts" -msgstr "Контексти віртуальних пристроїв" - -#: dcim/forms/bulk_edit.py:1431 dcim/forms/bulk_import.py:714 -#: dcim/forms/bulk_import.py:740 dcim/forms/filtersets.py:1252 -#: dcim/forms/filtersets.py:1277 dcim/forms/filtersets.py:1358 -#: dcim/tables/devices.py:610 -#: templates/circuits/inc/circuit_termination_fields.html:67 -#: templates/dcim/consoleport.html:40 templates/dcim/consoleserverport.html:40 -msgid "Speed" -msgstr "Швидкість" - -#: dcim/forms/bulk_edit.py:1460 dcim/forms/bulk_import.py:885 -#: templates/vpn/ikepolicy.html:25 templates/vpn/ipsecprofile.html:21 -#: templates/vpn/ipsecprofile.html:48 virtualization/forms/bulk_edit.py:233 -#: virtualization/forms/bulk_import.py:165 vpn/forms/bulk_edit.py:146 -#: vpn/forms/bulk_edit.py:232 vpn/forms/bulk_import.py:176 -#: vpn/forms/bulk_import.py:234 vpn/forms/filtersets.py:135 -#: vpn/forms/filtersets.py:178 vpn/forms/filtersets.py:192 -#: vpn/tables/crypto.py:64 vpn/tables/crypto.py:162 -msgid "Mode" -msgstr "Режим" - -#: dcim/forms/bulk_edit.py:1468 dcim/forms/model_forms.py:1354 -#: ipam/forms/bulk_import.py:178 ipam/forms/filtersets.py:498 -#: ipam/models/vlans.py:84 virtualization/forms/bulk_edit.py:240 -#: virtualization/forms/model_forms.py:321 -msgid "VLAN group" -msgstr "Група VLAN" - -#: dcim/forms/bulk_edit.py:1476 dcim/forms/model_forms.py:1360 -#: dcim/tables/devices.py:579 virtualization/forms/bulk_edit.py:248 -#: virtualization/forms/model_forms.py:326 -msgid "Untagged VLAN" -msgstr "VLAN без міток" - -#: dcim/forms/bulk_edit.py:1484 dcim/forms/model_forms.py:1369 -#: dcim/tables/devices.py:585 virtualization/forms/bulk_edit.py:256 -#: virtualization/forms/model_forms.py:335 -msgid "Tagged VLANs" -msgstr "VLAN з мітками" - -#: dcim/forms/bulk_edit.py:1494 dcim/forms/model_forms.py:1341 -msgid "Wireless LAN group" -msgstr "Група бездротової локальної мережі" - -#: dcim/forms/bulk_edit.py:1499 dcim/forms/model_forms.py:1346 -#: dcim/tables/devices.py:619 netbox/navigation/menu.py:146 -#: templates/dcim/interface.html:280 wireless/tables/wirelesslan.py:24 -msgid "Wireless LANs" -msgstr "Бездротові локальні мережі" - -#: dcim/forms/bulk_edit.py:1508 dcim/forms/filtersets.py:1328 -#: dcim/forms/model_forms.py:1390 ipam/forms/bulk_edit.py:286 -#: ipam/forms/bulk_edit.py:378 ipam/forms/filtersets.py:169 -#: templates/dcim/interface.html:122 templates/ipam/prefix.html:95 -#: virtualization/forms/model_forms.py:349 -msgid "Addressing" -msgstr "Адресація" - -#: dcim/forms/bulk_edit.py:1509 dcim/forms/filtersets.py:720 -#: dcim/forms/model_forms.py:1391 virtualization/forms/model_forms.py:350 -msgid "Operation" -msgstr "Операція" - -#: dcim/forms/bulk_edit.py:1510 dcim/forms/filtersets.py:1329 -#: dcim/forms/model_forms.py:987 dcim/forms/model_forms.py:1393 -msgid "PoE" -msgstr "PoE" - -#: dcim/forms/bulk_edit.py:1511 dcim/forms/model_forms.py:1392 -#: templates/dcim/interface.html:99 virtualization/forms/bulk_edit.py:267 -#: virtualization/forms/model_forms.py:351 -msgid "Related Interfaces" -msgstr "Пов'язані інтерфейси" - -#: dcim/forms/bulk_edit.py:1512 dcim/forms/model_forms.py:1394 -#: virtualization/forms/bulk_edit.py:268 -#: virtualization/forms/model_forms.py:352 -msgid "802.1Q Switching" -msgstr "Комутація 802.1Q" - -#: dcim/forms/bulk_edit.py:1574 dcim/forms/bulk_edit.py:1576 -msgid "Interface mode must be specified to assign VLANs" -msgstr "Для призначення VLANs необхідно вказати режим інтерфейсу" - -#: dcim/forms/bulk_edit.py:1581 dcim/forms/common.py:50 -msgid "An access interface cannot have tagged VLANs assigned." -msgstr "Інтерфейс доступу не може призначити VLAN'и з мітками." - -#: dcim/forms/bulk_import.py:64 -msgid "Name of parent region" -msgstr "Назва батьківського регіону" - -#: dcim/forms/bulk_import.py:78 -msgid "Name of parent site group" -msgstr "Назва батьківської групи тех. майданчиків" - -#: dcim/forms/bulk_import.py:97 -msgid "Assigned region" -msgstr "Призначений регіон" - -#: dcim/forms/bulk_import.py:104 tenancy/forms/bulk_import.py:44 -#: tenancy/forms/bulk_import.py:85 wireless/forms/bulk_import.py:40 -msgid "Assigned group" -msgstr "Призначена група" - -#: dcim/forms/bulk_import.py:123 -msgid "available options" -msgstr "доступні опції" - -#: dcim/forms/bulk_import.py:134 dcim/forms/bulk_import.py:543 -#: dcim/forms/bulk_import.py:1342 ipam/forms/bulk_import.py:175 -#: ipam/forms/bulk_import.py:433 virtualization/forms/bulk_import.py:63 -#: virtualization/forms/bulk_import.py:89 -msgid "Assigned site" -msgstr "Призначений тех. майданчик" - -#: dcim/forms/bulk_import.py:141 -msgid "Parent location" -msgstr "Місцезнаходження прабатька" - -#: dcim/forms/bulk_import.py:143 -msgid "Location not found." -msgstr "Місцезнаходження не знайдено." - -#: dcim/forms/bulk_import.py:185 -msgid "The manufacturer of this rack type" -msgstr "Виробник даного стелажного типу" - -#: dcim/forms/bulk_import.py:196 -msgid "The lowest-numbered position in the rack" -msgstr "Позиція з найменшою нумерованістю в стійці" - -#: dcim/forms/bulk_import.py:201 dcim/forms/bulk_import.py:268 -msgid "Rail-to-rail width (in inches)" -msgstr "Ширина рейки до рейки (у дюймах)" - -#: dcim/forms/bulk_import.py:207 dcim/forms/bulk_import.py:274 -msgid "Unit for outer dimensions" -msgstr "Блок для зовнішніх розмірів" - -#: dcim/forms/bulk_import.py:213 dcim/forms/bulk_import.py:286 -msgid "Unit for rack weights" -msgstr "Блок для стелажних ваг" - -#: dcim/forms/bulk_import.py:245 -msgid "Name of assigned tenant" -msgstr "ПІБ призначеного орендаря" - -#: dcim/forms/bulk_import.py:257 -msgid "Name of assigned role" -msgstr "Назва призначеної ролі" - -#: dcim/forms/bulk_import.py:280 dcim/forms/bulk_import.py:413 -#: dcim/forms/bulk_import.py:583 -msgid "Airflow direction" -msgstr "Напрямок повітряного потоку" - -#: dcim/forms/bulk_import.py:312 -msgid "Parent site" -msgstr "Батьківський тех. майданчик" - -#: dcim/forms/bulk_import.py:319 dcim/forms/bulk_import.py:1355 -msgid "Rack's location (if any)" -msgstr "Розташування стійки (якщо є)" - -#: dcim/forms/bulk_import.py:328 dcim/forms/model_forms.py:311 -#: dcim/tables/racks.py:222 templates/dcim/rackreservation.html:12 -#: templates/dcim/rackreservation.html:45 -msgid "Units" -msgstr "Юніти" - -#: dcim/forms/bulk_import.py:331 -msgid "Comma-separated list of individual unit numbers" -msgstr "Список окремих номерів юнітів, розділених комами" - -#: dcim/forms/bulk_import.py:374 -msgid "The manufacturer which produces this device type" -msgstr "Виробник, який випускає цей тип пристрою" - -#: dcim/forms/bulk_import.py:381 -msgid "The default platform for devices of this type (optional)" -msgstr "Платформа за замовчуванням для пристроїв такого типу (опціонально)" - -#: dcim/forms/bulk_import.py:386 -msgid "Device weight" -msgstr "Вага пристрою" - -#: dcim/forms/bulk_import.py:392 -msgid "Unit for device weight" -msgstr "Вага пристрою на 1 юніт" - -#: dcim/forms/bulk_import.py:418 -msgid "Module weight" -msgstr "Вага модуля" - -#: dcim/forms/bulk_import.py:424 -msgid "Unit for module weight" -msgstr "Вага модуля на 1 юніт" - -#: dcim/forms/bulk_import.py:454 -msgid "Limit platform assignments to this manufacturer" -msgstr "Обмежте призначення платформи цьому виробнику" - -#: dcim/forms/bulk_import.py:476 dcim/forms/bulk_import.py:1425 -#: tenancy/forms/bulk_import.py:106 -msgid "Assigned role" -msgstr "Призначена роль" - -#: dcim/forms/bulk_import.py:489 -msgid "Device type manufacturer" -msgstr "Тип пристрою виробник" - -#: dcim/forms/bulk_import.py:495 -msgid "Device type model" -msgstr "Модель типу пристрою" - -#: dcim/forms/bulk_import.py:502 virtualization/forms/bulk_import.py:126 -msgid "Assigned platform" -msgstr "Призначена платформа" - -#: dcim/forms/bulk_import.py:510 dcim/forms/bulk_import.py:514 -#: dcim/forms/model_forms.py:536 -msgid "Virtual chassis" -msgstr "Віртуальне шасі" - -#: dcim/forms/bulk_import.py:517 dcim/forms/filtersets.py:728 -#: dcim/forms/filtersets.py:898 dcim/forms/model_forms.py:522 -#: dcim/tables/devices.py:202 extras/filtersets.py:596 -#: extras/forms/filtersets.py:322 ipam/forms/filtersets.py:415 -#: ipam/forms/filtersets.py:447 templates/dcim/device.html:239 -#: templates/virtualization/cluster.html:10 -#: templates/virtualization/virtualmachine.html:92 -#: templates/virtualization/virtualmachine.html:101 -#: virtualization/filtersets.py:157 virtualization/filtersets.py:277 -#: virtualization/forms/bulk_edit.py:129 -#: virtualization/forms/bulk_import.py:92 -#: virtualization/forms/filtersets.py:99 -#: virtualization/forms/filtersets.py:123 -#: virtualization/forms/filtersets.py:204 -#: virtualization/forms/model_forms.py:79 -#: virtualization/forms/model_forms.py:176 -#: virtualization/tables/virtualmachines.py:67 +#: 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/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 msgid "Cluster" msgstr "Кластер" -#: dcim/forms/bulk_import.py:521 +#: 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:52 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/templates/extras/dashboard/widget_config.html:7 +#: netbox/virtualization/forms/bulk_edit.py:191 +msgid "Configuration" +msgstr "Конфігурація" + +#: netbox/dcim/forms/bulk_edit.py:746 netbox/netbox/navigation/menu.py:243 +#: 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 +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/object_create.py:46 netbox/templates/dcim/cable.html:32 +#: netbox/templates/dcim/consoleport.html:32 +#: netbox/templates/dcim/consoleserverport.html:32 +#: netbox/templates/dcim/devicebay.html:28 +#: netbox/templates/dcim/frontport.html:32 +#: netbox/templates/dcim/inc/panels/inventory_items.html:19 +#: netbox/templates/dcim/interface.html:42 +#: netbox/templates/dcim/inventoryitem.html:32 +#: netbox/templates/dcim/modulebay.html:34 +#: netbox/templates/dcim/poweroutlet.html:32 +#: netbox/templates/dcim/powerport.html:32 +#: netbox/templates/dcim/rearport.html:32 +#: netbox/templates/extras/customfield.html:26 +#: netbox/templates/generic/bulk_import.html:162 +msgid "Label" +msgstr "Етикетка" + +#: netbox/dcim/forms/bulk_edit.py:823 netbox/dcim/forms/filtersets.py:1068 +#: 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 +msgid "Length unit" +msgstr "Довжина юніта" + +#: netbox/dcim/forms/bulk_edit.py:852 +#: 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 +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 +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 +msgid "Phase" +msgstr "Фаза" + +#: netbox/dcim/forms/bulk_edit.py:954 netbox/dcim/forms/filtersets.py:1190 +#: netbox/templates/dcim/powerfeed.html:87 +msgid "Voltage" +msgstr "Напруга" + +#: netbox/dcim/forms/bulk_edit.py:958 netbox/dcim/forms/filtersets.py:1194 +#: netbox/templates/dcim/powerfeed.html:91 +msgid "Amperage" +msgstr "Сила струму" + +#: netbox/dcim/forms/bulk_edit.py:962 netbox/dcim/forms/filtersets.py:1198 +msgid "Max utilization" +msgstr "Максимальне використання" + +#: netbox/dcim/forms/bulk_edit.py:1051 +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 +msgid "Maximum power draw (watts)" +msgstr "Максимальна споживана потужність (Вт)" + +#: netbox/dcim/forms/bulk_edit.py:1057 +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 +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 +msgid "Power port" +msgstr "Порт живлення" + +#: netbox/dcim/forms/bulk_edit.py:1098 netbox/dcim/forms/bulk_import.py:815 +msgid "Feed leg" +msgstr "Фідер живлення" + +#: netbox/dcim/forms/bulk_edit.py:1144 netbox/dcim/forms/bulk_edit.py:1462 +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/object_import.py:90 +#: netbox/dcim/models/device_component_templates.py:437 +#: netbox/dcim/models/device_components.py:670 +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/object_import.py:95 +#: netbox/dcim/models/device_component_templates.py:443 +#: netbox/dcim/models/device_components.py:676 +msgid "PoE type" +msgstr "Тип PoE" + +#: netbox/dcim/forms/bulk_edit.py:1166 netbox/dcim/forms/filtersets.py:1404 +#: 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/templates/dcim/consoleport.html:24 +#: netbox/templates/dcim/consoleserverport.html:24 +#: netbox/templates/dcim/frontport.html:24 +#: netbox/templates/dcim/interface.html:34 +#: netbox/templates/dcim/module.html:54 +#: netbox/templates/dcim/modulebay.html:26 +#: netbox/templates/dcim/modulebay.html:58 +#: netbox/templates/dcim/poweroutlet.html:24 +#: netbox/templates/dcim/powerport.html:24 +#: netbox/templates/dcim/rearport.html:24 +msgid "Module" +msgstr "Модуль" + +#: netbox/dcim/forms/bulk_edit.py:1442 netbox/dcim/tables/devices.py:665 +#: netbox/templates/dcim/interface.html:110 +msgid "LAG" +msgstr "LAG" + +#: netbox/dcim/forms/bulk_edit.py:1447 netbox/dcim/forms/model_forms.py:1312 +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/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/templates/vpn/ikepolicy.html:25 +#: netbox/templates/vpn/ipsecprofile.html:21 +#: netbox/templates/vpn/ipsecprofile.html:48 +#: netbox/virtualization/forms/bulk_edit.py:233 +#: netbox/virtualization/forms/bulk_import.py:165 +#: netbox/vpn/forms/bulk_edit.py:146 netbox/vpn/forms/bulk_edit.py:232 +#: netbox/vpn/forms/bulk_import.py:176 netbox/vpn/forms/bulk_import.py:234 +#: netbox/vpn/forms/filtersets.py:135 netbox/vpn/forms/filtersets.py:178 +#: netbox/vpn/forms/filtersets.py:192 netbox/vpn/tables/crypto.py:64 +#: netbox/vpn/tables/crypto.py:162 +msgid "Mode" +msgstr "Режим" + +#: 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 +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 +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 +msgid "Tagged VLANs" +msgstr "VLAN'и з мітками" + +#: netbox/dcim/forms/bulk_edit.py:1511 +msgid "Add tagged VLANs" +msgstr "Додати VLAN'и з мітками" + +#: netbox/dcim/forms/bulk_edit.py:1520 +msgid "Remove tagged VLANs" +msgstr "Видалити мітки з VLAN'ів" + +#: netbox/dcim/forms/bulk_edit.py:1536 netbox/dcim/forms/model_forms.py:1348 +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/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 +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 +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 +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 +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 +msgid "802.1Q Switching" +msgstr "Комутація 802.1Q" + +#: netbox/dcim/forms/bulk_edit.py:1558 +msgid "Add/Remove" +msgstr "Додати/Видалити" + +#: netbox/dcim/forms/bulk_edit.py:1617 netbox/dcim/forms/bulk_edit.py:1619 +msgid "Interface mode must be specified to assign VLANs" +msgstr "Для призначення VLAN'ів необхідно вказати режим інтерфейсу" + +#: netbox/dcim/forms/bulk_edit.py:1624 netbox/dcim/forms/common.py:50 +msgid "An access interface cannot have tagged VLANs assigned." +msgstr "Інтерфейс доступу не може призначити VLAN'и з мітками." + +#: netbox/dcim/forms/bulk_import.py:64 +msgid "Name of parent region" +msgstr "Назва батьківського регіону" + +#: netbox/dcim/forms/bulk_import.py:78 +msgid "Name of parent site group" +msgstr "Назва батьківської групи тех. майданчиків" + +#: netbox/dcim/forms/bulk_import.py:97 +msgid "Assigned region" +msgstr "Призначений регіон" + +#: netbox/dcim/forms/bulk_import.py:104 netbox/tenancy/forms/bulk_import.py:44 +#: netbox/tenancy/forms/bulk_import.py:85 +#: netbox/wireless/forms/bulk_import.py:40 +msgid "Assigned group" +msgstr "Призначена група" + +#: netbox/dcim/forms/bulk_import.py:123 +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 +msgid "Assigned site" +msgstr "Призначений тех. майданчик" + +#: netbox/dcim/forms/bulk_import.py:141 +msgid "Parent location" +msgstr "Місцезнаходження прабатька" + +#: netbox/dcim/forms/bulk_import.py:143 +msgid "Location not found." +msgstr "Місцезнаходження не знайдено." + +#: netbox/dcim/forms/bulk_import.py:185 +msgid "The manufacturer of this rack type" +msgstr "Виробник даного стелажного типу" + +#: netbox/dcim/forms/bulk_import.py:196 +msgid "The lowest-numbered position in the rack" +msgstr "Позиція з найменшою нумерованістю в стійці" + +#: netbox/dcim/forms/bulk_import.py:201 netbox/dcim/forms/bulk_import.py:276 +msgid "Rail-to-rail width (in inches)" +msgstr "Ширина рейки до рейки (у дюймах)" + +#: netbox/dcim/forms/bulk_import.py:207 netbox/dcim/forms/bulk_import.py:286 +msgid "Unit for outer dimensions" +msgstr "Блок для зовнішніх розмірів" + +#: netbox/dcim/forms/bulk_import.py:213 netbox/dcim/forms/bulk_import.py:298 +msgid "Unit for rack weights" +msgstr "Блок для стелажних ваг" + +#: netbox/dcim/forms/bulk_import.py:245 +msgid "Name of assigned tenant" +msgstr "ПІБ призначеного орендаря" + +#: netbox/dcim/forms/bulk_import.py:257 +msgid "Name of assigned role" +msgstr "Назва призначеної ролі" + +#: netbox/dcim/forms/bulk_import.py:264 +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 +msgid "Airflow direction" +msgstr "Напрямок повітряного потоку" + +#: netbox/dcim/forms/bulk_import.py:324 +msgid "Width must be set if not specifying a rack type." +msgstr "" + +#: netbox/dcim/forms/bulk_import.py:326 +msgid "U height must be set if not specifying a rack type." +msgstr "" + +#: netbox/dcim/forms/bulk_import.py:334 +msgid "Parent site" +msgstr "Батьківський тех. майданчик" + +#: netbox/dcim/forms/bulk_import.py:341 netbox/dcim/forms/bulk_import.py:1377 +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/templates/dcim/rackreservation.html:12 +#: netbox/templates/dcim/rackreservation.html:45 +msgid "Units" +msgstr "Юніти" + +#: netbox/dcim/forms/bulk_import.py:353 +msgid "Comma-separated list of individual unit numbers" +msgstr "Список окремих номерів юнітів, розділених комами" + +#: netbox/dcim/forms/bulk_import.py:396 +msgid "The manufacturer which produces this device type" +msgstr "Виробник, який випускає цей тип пристрою" + +#: netbox/dcim/forms/bulk_import.py:403 +msgid "The default platform for devices of this type (optional)" +msgstr "Платформа за замовчуванням для пристроїв такого типу (опціонально)" + +#: netbox/dcim/forms/bulk_import.py:408 +msgid "Device weight" +msgstr "Вага пристрою" + +#: netbox/dcim/forms/bulk_import.py:414 +msgid "Unit for device weight" +msgstr "Вага пристрою на 1 юніт" + +#: netbox/dcim/forms/bulk_import.py:440 +msgid "Module weight" +msgstr "Вага модуля" + +#: netbox/dcim/forms/bulk_import.py:446 +msgid "Unit for module weight" +msgstr "Вага модуля на 1 юніт" + +#: netbox/dcim/forms/bulk_import.py:476 +msgid "Limit platform assignments to this manufacturer" +msgstr "Обмежте призначення платформи цьому виробнику" + +#: netbox/dcim/forms/bulk_import.py:498 netbox/dcim/forms/bulk_import.py:1447 +#: netbox/tenancy/forms/bulk_import.py:106 +msgid "Assigned role" +msgstr "Призначена роль" + +#: netbox/dcim/forms/bulk_import.py:511 +msgid "Device type manufacturer" +msgstr "Тип пристрою виробник" + +#: netbox/dcim/forms/bulk_import.py:517 +msgid "Device type model" +msgstr "Модель типу пристрою" + +#: netbox/dcim/forms/bulk_import.py:524 +#: netbox/virtualization/forms/bulk_import.py:126 +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 +msgid "Virtual chassis" +msgstr "Віртуальне шасі" + +#: netbox/dcim/forms/bulk_import.py:543 msgid "Virtualization cluster" msgstr "Кластер віртуалізації" -#: dcim/forms/bulk_import.py:550 +#: netbox/dcim/forms/bulk_import.py:572 msgid "Assigned location (if any)" msgstr "Призначене місце розташування (якщо є)" -#: dcim/forms/bulk_import.py:557 +#: netbox/dcim/forms/bulk_import.py:579 msgid "Assigned rack (if any)" msgstr "Призначена стійка (якщо така є)" -#: dcim/forms/bulk_import.py:560 +#: netbox/dcim/forms/bulk_import.py:582 msgid "Face" msgstr "Лицева сторона" -#: dcim/forms/bulk_import.py:563 +#: netbox/dcim/forms/bulk_import.py:585 msgid "Mounted rack face" msgstr "Змонтована лицева сторона стійки" -#: dcim/forms/bulk_import.py:570 +#: netbox/dcim/forms/bulk_import.py:592 msgid "Parent device (for child devices)" msgstr "Батьківський пристрій (для підпорядкованих пристроїв)" -#: dcim/forms/bulk_import.py:573 +#: netbox/dcim/forms/bulk_import.py:595 msgid "Device bay" msgstr "Відсік для пристроїв" -#: dcim/forms/bulk_import.py:577 +#: netbox/dcim/forms/bulk_import.py:599 msgid "Device bay in which this device is installed (for child devices)" msgstr "" "Відсік для пристрою, в якому встановлено цей пристрій (для підпорядкованих " "пристроїв)" -#: dcim/forms/bulk_import.py:644 +#: netbox/dcim/forms/bulk_import.py:666 msgid "The device in which this module is installed" msgstr "Пристрій, в якому встановлений даний модуль" -#: dcim/forms/bulk_import.py:647 dcim/forms/model_forms.py:640 +#: netbox/dcim/forms/bulk_import.py:669 netbox/dcim/forms/model_forms.py:640 msgid "Module bay" msgstr "Відсік для модулів" -#: dcim/forms/bulk_import.py:650 +#: netbox/dcim/forms/bulk_import.py:672 msgid "The module bay in which this module is installed" msgstr "Відсік для модуля, в якому встановлений цей модуль" -#: dcim/forms/bulk_import.py:656 +#: netbox/dcim/forms/bulk_import.py:678 msgid "The type of module" msgstr "Тип модуля" -#: dcim/forms/bulk_import.py:664 dcim/forms/model_forms.py:656 +#: netbox/dcim/forms/bulk_import.py:686 netbox/dcim/forms/model_forms.py:656 msgid "Replicate components" msgstr "Повторювання компонентів" -#: dcim/forms/bulk_import.py:666 +#: netbox/dcim/forms/bulk_import.py:688 msgid "" "Automatically populate components associated with this module type (enabled " "by default)" @@ -3942,266 +4369,273 @@ msgstr "" "Автоматично заповнювати компоненти, пов'язані з цим типом модуля (увімкнено " "за замовчуванням)" -#: dcim/forms/bulk_import.py:669 dcim/forms/model_forms.py:662 +#: netbox/dcim/forms/bulk_import.py:691 netbox/dcim/forms/model_forms.py:662 msgid "Adopt components" msgstr "Прийняти компоненти" -#: dcim/forms/bulk_import.py:671 dcim/forms/model_forms.py:665 +#: netbox/dcim/forms/bulk_import.py:693 netbox/dcim/forms/model_forms.py:665 msgid "Adopt already existing components" msgstr "Прийняти вже існуючі компоненти" -#: dcim/forms/bulk_import.py:711 dcim/forms/bulk_import.py:737 -#: dcim/forms/bulk_import.py:763 +#: netbox/dcim/forms/bulk_import.py:733 netbox/dcim/forms/bulk_import.py:759 +#: netbox/dcim/forms/bulk_import.py:785 msgid "Port type" msgstr "Тип порту" -#: dcim/forms/bulk_import.py:719 dcim/forms/bulk_import.py:745 +#: netbox/dcim/forms/bulk_import.py:741 netbox/dcim/forms/bulk_import.py:767 msgid "Port speed in bps" msgstr "Швидкість порту в біт/с" -#: dcim/forms/bulk_import.py:783 +#: netbox/dcim/forms/bulk_import.py:805 msgid "Outlet type" msgstr "Тип розетки (живлення)" -#: dcim/forms/bulk_import.py:790 +#: netbox/dcim/forms/bulk_import.py:812 msgid "Local power port which feeds this outlet" msgstr "Локальний порт живлення, який живить цю розетку" -#: dcim/forms/bulk_import.py:796 +#: netbox/dcim/forms/bulk_import.py:818 msgid "Electrical phase (for three-phase circuits)" msgstr "Електрична фаза (для трифазних ланцюгів)" -#: dcim/forms/bulk_import.py:837 dcim/forms/model_forms.py:1316 -#: virtualization/forms/bulk_import.py:155 -#: virtualization/forms/model_forms.py:305 +#: 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 msgid "Parent interface" msgstr "Батьківський інтерфейс" -#: dcim/forms/bulk_import.py:844 dcim/forms/model_forms.py:1324 -#: virtualization/forms/bulk_import.py:162 -#: virtualization/forms/model_forms.py:313 +#: 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 msgid "Bridged interface" msgstr "Інтерфейс типу мост" -#: dcim/forms/bulk_import.py:847 +#: netbox/dcim/forms/bulk_import.py:869 msgid "Lag" msgstr "LAG" -#: dcim/forms/bulk_import.py:851 +#: netbox/dcim/forms/bulk_import.py:873 msgid "Parent LAG interface" msgstr "Батьківський інтерфейс LAG" -#: dcim/forms/bulk_import.py:854 +#: netbox/dcim/forms/bulk_import.py:876 msgid "Vdcs" -msgstr "Джерела живлення постійного струму " +msgstr "Джерела живлення постійного струму" -#: dcim/forms/bulk_import.py:859 +#: netbox/dcim/forms/bulk_import.py:881 msgid "VDC names separated by commas, encased with double quotes. Example:" msgstr "" "Імена джерел живлення постійного струму, розділені комами, укладені " "подвійними лапками. Приклад:" -#: dcim/forms/bulk_import.py:865 +#: netbox/dcim/forms/bulk_import.py:887 msgid "Physical medium" msgstr "Фізичне середовище" -#: dcim/forms/bulk_import.py:868 dcim/forms/filtersets.py:1365 +#: netbox/dcim/forms/bulk_import.py:890 netbox/dcim/forms/filtersets.py:1365 msgid "Duplex" msgstr "Дуплекс" -#: dcim/forms/bulk_import.py:873 +#: netbox/dcim/forms/bulk_import.py:895 msgid "Poe mode" msgstr "Режим PoE" -#: dcim/forms/bulk_import.py:879 +#: netbox/dcim/forms/bulk_import.py:901 msgid "Poe type" msgstr "Тип PoE" -#: dcim/forms/bulk_import.py:888 virtualization/forms/bulk_import.py:168 +#: netbox/dcim/forms/bulk_import.py:910 +#: netbox/virtualization/forms/bulk_import.py:168 msgid "IEEE 802.1Q operational mode (for L2 interfaces)" msgstr "Режим роботи IEEE 802.1Q (для інтерфейсів L2)" -#: dcim/forms/bulk_import.py:895 ipam/forms/bulk_import.py:161 -#: ipam/forms/bulk_import.py:247 ipam/forms/bulk_import.py:283 -#: ipam/forms/filtersets.py:201 ipam/forms/filtersets.py:277 -#: ipam/forms/filtersets.py:336 virtualization/forms/bulk_import.py:175 +#: netbox/dcim/forms/bulk_import.py: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 msgid "Assigned VRF" msgstr "Призначений VRF" -#: dcim/forms/bulk_import.py:898 +#: netbox/dcim/forms/bulk_import.py:920 msgid "Rf role" msgstr "роль RF" -#: dcim/forms/bulk_import.py:901 +#: netbox/dcim/forms/bulk_import.py:923 msgid "Wireless role (AP/station)" msgstr "Бездротова роль (AP/станція)" -#: dcim/forms/bulk_import.py:937 +#: netbox/dcim/forms/bulk_import.py:959 #, python-brace-format msgid "VDC {vdc} is not assigned to device {device}" msgstr "" "Джерело живлення постійного струму {vdc} не призначається до пристрою " "{device}" -#: dcim/forms/bulk_import.py:951 dcim/forms/model_forms.py:1000 -#: dcim/forms/model_forms.py:1575 dcim/forms/object_import.py:117 +#: 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 msgid "Rear port" msgstr "Задній порт" -#: dcim/forms/bulk_import.py:954 +#: netbox/dcim/forms/bulk_import.py:976 msgid "Corresponding rear port" msgstr "Відповідний задній порт" -#: dcim/forms/bulk_import.py:959 dcim/forms/bulk_import.py:1000 -#: dcim/forms/bulk_import.py:1216 +#: netbox/dcim/forms/bulk_import.py:981 netbox/dcim/forms/bulk_import.py:1022 +#: netbox/dcim/forms/bulk_import.py:1238 msgid "Physical medium classification" msgstr "Класифікація фізичного середовища" -#: dcim/forms/bulk_import.py:1028 dcim/tables/devices.py:822 +#: netbox/dcim/forms/bulk_import.py:1050 netbox/dcim/tables/devices.py:822 msgid "Installed device" msgstr "Встановлений пристрій" -#: dcim/forms/bulk_import.py:1032 +#: netbox/dcim/forms/bulk_import.py:1054 msgid "Child device installed within this bay" msgstr "Підпорядкований пристрій, встановлений у цьому відсіку" -#: dcim/forms/bulk_import.py:1034 +#: netbox/dcim/forms/bulk_import.py:1056 msgid "Child device not found." msgstr "Підпорядкований пристрій не знайдено." -#: dcim/forms/bulk_import.py:1092 +#: netbox/dcim/forms/bulk_import.py:1114 msgid "Parent inventory item" msgstr "Батьківський предмет інвентарю" -#: dcim/forms/bulk_import.py:1095 +#: netbox/dcim/forms/bulk_import.py:1117 msgid "Component type" msgstr "Тип компонента" -#: dcim/forms/bulk_import.py:1099 +#: netbox/dcim/forms/bulk_import.py:1121 msgid "Component Type" msgstr "Тип компонента" -#: dcim/forms/bulk_import.py:1102 +#: netbox/dcim/forms/bulk_import.py:1124 msgid "Compnent name" msgstr "Назва компонента" -#: dcim/forms/bulk_import.py:1104 +#: netbox/dcim/forms/bulk_import.py:1126 msgid "Component Name" msgstr "Назва компонента" -#: dcim/forms/bulk_import.py:1146 +#: netbox/dcim/forms/bulk_import.py:1168 #, python-brace-format msgid "Component not found: {device} - {component_name}" msgstr "Компонент не знайдено: {device} - {component_name}" -#: dcim/forms/bulk_import.py:1171 +#: netbox/dcim/forms/bulk_import.py:1193 msgid "Side A device" msgstr "Сторона А пристрою" -#: dcim/forms/bulk_import.py:1174 dcim/forms/bulk_import.py:1192 +#: netbox/dcim/forms/bulk_import.py:1196 netbox/dcim/forms/bulk_import.py:1214 msgid "Device name" msgstr "Назва пристрою" -#: dcim/forms/bulk_import.py:1177 +#: netbox/dcim/forms/bulk_import.py:1199 msgid "Side A type" msgstr "Тип сторони А" -#: dcim/forms/bulk_import.py:1180 dcim/forms/bulk_import.py:1198 +#: netbox/dcim/forms/bulk_import.py:1202 netbox/dcim/forms/bulk_import.py:1220 msgid "Termination type" -msgstr "Тип припинення" +msgstr "Тип кінця" -#: dcim/forms/bulk_import.py:1183 +#: netbox/dcim/forms/bulk_import.py:1205 msgid "Side A name" msgstr "Назва сторони A" -#: dcim/forms/bulk_import.py:1184 dcim/forms/bulk_import.py:1202 +#: netbox/dcim/forms/bulk_import.py:1206 netbox/dcim/forms/bulk_import.py:1224 msgid "Termination name" -msgstr "Назва припинення" +msgstr "Назва кінця" -#: dcim/forms/bulk_import.py:1189 +#: netbox/dcim/forms/bulk_import.py:1211 msgid "Side B device" msgstr "Сторона Б пристрою" -#: dcim/forms/bulk_import.py:1195 +#: netbox/dcim/forms/bulk_import.py:1217 msgid "Side B type" msgstr "Тип сторони Б" -#: dcim/forms/bulk_import.py:1201 +#: netbox/dcim/forms/bulk_import.py:1223 msgid "Side B name" msgstr "Назва сторони B" -#: dcim/forms/bulk_import.py:1210 wireless/forms/bulk_import.py:86 +#: netbox/dcim/forms/bulk_import.py:1232 +#: netbox/wireless/forms/bulk_import.py:86 msgid "Connection status" msgstr "Статус підключення" -#: dcim/forms/bulk_import.py:1262 +#: netbox/dcim/forms/bulk_import.py:1284 #, python-brace-format msgid "Side {side_upper}: {device} {termination_object} is already connected" msgstr "Сторона {side_upper}: {device} {termination_object} вже підключена" -#: dcim/forms/bulk_import.py:1268 +#: netbox/dcim/forms/bulk_import.py:1290 #, python-brace-format msgid "{side_upper} side termination not found: {device} {name}" msgstr "{side_upper} кінцева сторона не знайдена: {device} {name}" -#: dcim/forms/bulk_import.py:1293 dcim/forms/model_forms.py:785 -#: dcim/tables/devices.py:1027 templates/dcim/device.html:132 -#: templates/dcim/virtualchassis.html:27 templates/dcim/virtualchassis.html:67 +#: 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/templates/dcim/virtualchassis.html:27 +#: netbox/templates/dcim/virtualchassis.html:67 msgid "Master" msgstr "Майстер" -#: dcim/forms/bulk_import.py:1297 +#: netbox/dcim/forms/bulk_import.py:1319 msgid "Master device" msgstr "Головний пристрій" -#: dcim/forms/bulk_import.py:1314 +#: netbox/dcim/forms/bulk_import.py:1336 msgid "Name of parent site" msgstr "Назва батьківського тех. майданчика" -#: dcim/forms/bulk_import.py:1348 +#: netbox/dcim/forms/bulk_import.py:1370 msgid "Upstream power panel" msgstr "Вища за течією панель живлення" -#: dcim/forms/bulk_import.py:1378 +#: netbox/dcim/forms/bulk_import.py:1400 msgid "Primary or redundant" msgstr "Первинний або надлишковий" -#: dcim/forms/bulk_import.py:1383 +#: netbox/dcim/forms/bulk_import.py:1405 msgid "Supply type (AC/DC)" msgstr "Тип живлення (змінній/постійний струм)" -#: dcim/forms/bulk_import.py:1388 +#: netbox/dcim/forms/bulk_import.py:1410 msgid "Single or three-phase" msgstr "Однофазний або трифазний (струм)" -#: dcim/forms/bulk_import.py:1439 dcim/forms/model_forms.py:1670 -#: templates/dcim/device.html:190 templates/dcim/virtualdevicecontext.html:30 -#: templates/virtualization/virtualmachine.html:52 +#: netbox/dcim/forms/bulk_import.py:1461 netbox/dcim/forms/model_forms.py:1677 +#: netbox/templates/dcim/device.html:190 +#: netbox/templates/dcim/virtualdevicecontext.html:30 +#: netbox/templates/virtualization/virtualmachine.html:52 msgid "Primary IPv4" -msgstr "Первинний IPv4" +msgstr "Первинна адреса IPv4" -#: dcim/forms/bulk_import.py:1443 +#: netbox/dcim/forms/bulk_import.py:1465 msgid "IPv4 address with mask, e.g. 1.2.3.4/24" msgstr "IPv4 адреса з маскою, наприклад 1.2.3.4/24" -#: dcim/forms/bulk_import.py:1446 dcim/forms/model_forms.py:1679 -#: templates/dcim/device.html:206 templates/dcim/virtualdevicecontext.html:41 -#: templates/virtualization/virtualmachine.html:68 +#: netbox/dcim/forms/bulk_import.py:1468 netbox/dcim/forms/model_forms.py:1686 +#: netbox/templates/dcim/device.html:206 +#: netbox/templates/dcim/virtualdevicecontext.html:41 +#: netbox/templates/virtualization/virtualmachine.html:68 msgid "Primary IPv6" -msgstr "Первинний IPv6" +msgstr "Первинна адреса IPv6" -#: dcim/forms/bulk_import.py:1450 +#: netbox/dcim/forms/bulk_import.py:1472 msgid "IPv6 address with prefix length, e.g. 2001:db8::1/64" -msgstr "IPv6 адреса з довжиною префікса, наприклад 2001:db8: :1/64" +msgstr "IPv6 адреса з довжиною префікса, наприклад 2001:db8::1/64" -#: dcim/forms/common.py:24 dcim/models/device_components.py:527 -#: templates/dcim/interface.html:57 -#: templates/virtualization/vminterface.html:55 -#: virtualization/forms/bulk_edit.py:225 +#: netbox/dcim/forms/common.py:24 netbox/dcim/models/device_components.py:527 +#: netbox/templates/dcim/interface.html:57 +#: netbox/templates/virtualization/vminterface.html:55 +#: netbox/virtualization/forms/bulk_edit.py:225 msgid "MTU" msgstr "MTU" -#: dcim/forms/common.py:65 +#: netbox/dcim/forms/common.py:65 #, python-brace-format msgid "" "The tagged VLANs ({vlans}) must belong to the same site as the interface's " @@ -4211,7 +4645,7 @@ msgstr "" " і батьківський пристрій/інтерфейсу віртуальної машини, або вони повинні " "бути глобальними" -#: dcim/forms/common.py:126 +#: netbox/dcim/forms/common.py:126 msgid "" "Cannot install module with placeholder values in a module bay with no " "position defined." @@ -4219,7 +4653,7 @@ msgstr "" "Не вдається встановити модуль із значеннями заповнювачів у відсіку модуля " "без визначеної позиції." -#: dcim/forms/common.py:131 +#: netbox/dcim/forms/common.py:131 #, python-brace-format msgid "" "Cannot install module with placeholder values in a module bay tree {level} " @@ -4228,188 +4662,200 @@ msgstr "" "Не вдається встановити модуль із значеннями відсік модуля у дереві відсіків " "модуля {level} на дереві, у якому усього{tokens} місця для встановлення." -#: dcim/forms/common.py:144 +#: netbox/dcim/forms/common.py:144 #, python-brace-format msgid "Cannot adopt {model} {name} as it already belongs to a module" -msgstr "Не можна усиновити {model} {name} оскільки він вже належить до модуля" +msgstr "" +"Не можна усиновити {model} {name}, оскільки він вже належить до модуля" -#: dcim/forms/common.py:153 +#: netbox/dcim/forms/common.py:153 #, python-brace-format msgid "A {model} named {name} already exists" msgstr "А {model} названий {name} вже існує" -#: dcim/forms/connections.py:49 dcim/forms/model_forms.py:738 -#: dcim/tables/power.py:66 templates/dcim/inc/cable_termination.html:37 -#: templates/dcim/powerfeed.html:24 templates/dcim/powerpanel.html:19 -#: templates/dcim/trace/powerpanel.html:4 +#: netbox/dcim/forms/connections.py:49 netbox/dcim/forms/model_forms.py:738 +#: netbox/dcim/tables/power.py:66 +#: netbox/templates/dcim/inc/cable_termination.html:37 +#: netbox/templates/dcim/powerfeed.html:24 +#: netbox/templates/dcim/powerpanel.html:19 +#: netbox/templates/dcim/trace/powerpanel.html:4 msgid "Power Panel" msgstr "Панель живлення" -#: dcim/forms/connections.py:58 dcim/forms/model_forms.py:765 -#: templates/dcim/powerfeed.html:21 templates/dcim/powerport.html:80 +#: netbox/dcim/forms/connections.py:58 netbox/dcim/forms/model_forms.py:765 +#: netbox/templates/dcim/powerfeed.html:21 +#: netbox/templates/dcim/powerport.html:80 msgid "Power Feed" msgstr "Живлення живлення" -#: dcim/forms/connections.py:81 +#: netbox/dcim/forms/connections.py:81 msgid "Side" msgstr "Сторона" -#: dcim/forms/filtersets.py:136 dcim/tables/devices.py:295 +#: netbox/dcim/forms/filtersets.py:136 netbox/dcim/tables/devices.py:295 msgid "Device Status" msgstr "Статус пристрою" -#: dcim/forms/filtersets.py:149 +#: netbox/dcim/forms/filtersets.py:149 msgid "Parent region" msgstr "Батьківський регіон" -#: dcim/forms/filtersets.py:163 tenancy/forms/bulk_import.py:28 -#: tenancy/forms/bulk_import.py:62 tenancy/forms/filtersets.py:33 -#: tenancy/forms/filtersets.py:62 wireless/forms/bulk_import.py:25 -#: wireless/forms/filtersets.py:25 +#: netbox/dcim/forms/filtersets.py:163 netbox/tenancy/forms/bulk_import.py:28 +#: netbox/tenancy/forms/bulk_import.py:62 +#: netbox/tenancy/forms/filtersets.py:33 netbox/tenancy/forms/filtersets.py:62 +#: netbox/wireless/forms/bulk_import.py:25 +#: netbox/wireless/forms/filtersets.py:25 msgid "Parent group" msgstr "Батьківська група" -#: dcim/forms/filtersets.py:242 templates/dcim/location.html:58 -#: templates/dcim/site.html:56 +#: netbox/dcim/forms/filtersets.py:242 netbox/templates/dcim/location.html:58 +#: netbox/templates/dcim/site.html:56 msgid "Facility" msgstr "Об'єкт" -#: dcim/forms/filtersets.py:380 -msgid "Rack type" -msgstr "Тип стійки" - -#: dcim/forms/filtersets.py:397 +#: netbox/dcim/forms/filtersets.py:397 msgid "Function" msgstr "Функція" -#: dcim/forms/filtersets.py:483 dcim/forms/model_forms.py:373 -#: templates/inc/panels/image_attachments.html:6 +#: netbox/dcim/forms/filtersets.py:483 netbox/dcim/forms/model_forms.py:373 +#: netbox/templates/inc/panels/image_attachments.html:6 msgid "Images" msgstr "Зображення" -#: dcim/forms/filtersets.py:486 dcim/forms/filtersets.py:611 -#: dcim/forms/filtersets.py:726 +#: netbox/dcim/forms/filtersets.py:486 netbox/dcim/forms/filtersets.py:611 +#: netbox/dcim/forms/filtersets.py:726 msgid "Components" msgstr "Компоненти" -#: dcim/forms/filtersets.py:506 +#: netbox/dcim/forms/filtersets.py:506 msgid "Subdevice role" msgstr "Роль підпристрою" -#: dcim/forms/filtersets.py:790 dcim/tables/racks.py:54 -#: templates/dcim/racktype.html:20 +#: netbox/dcim/forms/filtersets.py:790 netbox/dcim/tables/racks.py:54 +#: netbox/templates/dcim/racktype.html:20 msgid "Model" msgstr "Модель" -#: dcim/forms/filtersets.py:834 +#: netbox/dcim/forms/filtersets.py:834 msgid "Has an OOB IP" msgstr "Має IP-адресу для зовнішнього незалежного керування" -#: dcim/forms/filtersets.py:841 +#: netbox/dcim/forms/filtersets.py:841 msgid "Virtual chassis member" msgstr "Віртуальний елемент шасі" -#: dcim/forms/filtersets.py:890 +#: netbox/dcim/forms/filtersets.py:890 msgid "Has virtual device contexts" msgstr "Має контексти віртуальних пристроїв" -#: dcim/forms/filtersets.py:903 extras/filtersets.py:585 -#: ipam/forms/filtersets.py:452 virtualization/forms/filtersets.py:112 +#: netbox/dcim/forms/filtersets.py:903 netbox/extras/filtersets.py:585 +#: netbox/ipam/forms/filtersets.py:452 +#: netbox/virtualization/forms/filtersets.py:112 msgid "Cluster group" msgstr "Кластерна група" -#: dcim/forms/filtersets.py:1210 +#: netbox/dcim/forms/filtersets.py:1210 msgid "Cabled" msgstr "Кабельний" -#: dcim/forms/filtersets.py:1217 +#: netbox/dcim/forms/filtersets.py:1217 msgid "Occupied" msgstr "Зайнятий" -#: dcim/forms/filtersets.py:1244 dcim/forms/filtersets.py:1269 -#: dcim/forms/filtersets.py:1293 dcim/forms/filtersets.py:1313 -#: dcim/forms/filtersets.py:1336 dcim/tables/devices.py:364 -#: templates/dcim/consoleport.html:55 templates/dcim/consoleserverport.html:55 -#: templates/dcim/frontport.html:69 templates/dcim/interface.html:140 -#: templates/dcim/powerfeed.html:110 templates/dcim/poweroutlet.html:59 -#: templates/dcim/powerport.html:59 templates/dcim/rearport.html:65 +#: netbox/dcim/forms/filtersets.py: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/templates/dcim/consoleport.html:55 +#: netbox/templates/dcim/consoleserverport.html:55 +#: netbox/templates/dcim/frontport.html:69 +#: netbox/templates/dcim/interface.html:140 +#: netbox/templates/dcim/powerfeed.html:110 +#: netbox/templates/dcim/poweroutlet.html:59 +#: netbox/templates/dcim/powerport.html:59 +#: netbox/templates/dcim/rearport.html:65 msgid "Connection" msgstr "Підключення" -#: dcim/forms/filtersets.py:1348 extras/forms/bulk_edit.py:326 -#: extras/forms/bulk_import.py:247 extras/forms/filtersets.py:464 -#: extras/forms/model_forms.py:675 extras/tables/tables.py:579 -#: templates/extras/journalentry.html:30 +#: netbox/dcim/forms/filtersets.py:1348 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 "Вид" -#: dcim/forms/filtersets.py:1377 +#: netbox/dcim/forms/filtersets.py:1377 msgid "Mgmt only" msgstr "Тільки управління" -#: dcim/forms/filtersets.py:1389 dcim/forms/model_forms.py:1383 -#: dcim/models/device_components.py:629 templates/dcim/interface.html:129 +#: 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 msgid "WWN" msgstr "WWN (унікальний ідентифікатор)" -#: dcim/forms/filtersets.py:1409 +#: netbox/dcim/forms/filtersets.py:1409 msgid "Wireless channel" msgstr "Бездротовий канал" -#: dcim/forms/filtersets.py:1413 +#: netbox/dcim/forms/filtersets.py:1413 msgid "Channel frequency (MHz)" msgstr "Частота каналу (МГц)" -#: dcim/forms/filtersets.py:1417 +#: netbox/dcim/forms/filtersets.py:1417 msgid "Channel width (MHz)" msgstr "Ширина каналу (МГц)" -#: dcim/forms/filtersets.py:1421 templates/dcim/interface.html:85 +#: netbox/dcim/forms/filtersets.py:1421 +#: netbox/templates/dcim/interface.html:85 msgid "Transmit power (dBm)" msgstr "Потужність передачі (дБм)" -#: dcim/forms/filtersets.py:1446 dcim/forms/filtersets.py:1471 -#: dcim/tables/devices.py:327 templates/dcim/cable.html:12 -#: templates/dcim/cable_trace.html:46 templates/dcim/frontport.html:77 -#: templates/dcim/htmx/cable_edit.html:50 -#: templates/dcim/inc/connection_endpoints.html:4 -#: templates/dcim/rearport.html:73 templates/dcim/trace/cable.html:7 +#: netbox/dcim/forms/filtersets.py:1446 netbox/dcim/forms/filtersets.py:1471 +#: netbox/dcim/tables/devices.py:327 netbox/templates/dcim/cable.html:12 +#: netbox/templates/dcim/cable_trace.html:46 +#: netbox/templates/dcim/frontport.html:77 +#: netbox/templates/dcim/htmx/cable_edit.html:50 +#: netbox/templates/dcim/inc/connection_endpoints.html:4 +#: netbox/templates/dcim/rearport.html:73 +#: netbox/templates/dcim/trace/cable.html:7 msgid "Cable" msgstr "Кабель" -#: dcim/forms/filtersets.py:1550 dcim/tables/devices.py:949 +#: netbox/dcim/forms/filtersets.py:1550 netbox/dcim/tables/devices.py:949 msgid "Discovered" msgstr "Виявлено" -#: dcim/forms/formsets.py:20 +#: netbox/dcim/forms/formsets.py:20 #, python-brace-format msgid "A virtual chassis member already exists in position {vc_position}." msgstr "Віртуальний елемент шасі вже існує на {vc_position} місці." -#: dcim/forms/model_forms.py:140 +#: netbox/dcim/forms/model_forms.py:140 msgid "Contact Info" msgstr "Контактна інформація" -#: dcim/forms/model_forms.py:195 templates/dcim/rackrole.html:19 +#: netbox/dcim/forms/model_forms.py:195 netbox/templates/dcim/rackrole.html:19 msgid "Rack Role" msgstr "Роль стійки" -#: dcim/forms/model_forms.py:212 dcim/forms/model_forms.py:362 -#: dcim/forms/model_forms.py:446 utilities/forms/fields/fields.py:47 +#: netbox/dcim/forms/model_forms.py:212 netbox/dcim/forms/model_forms.py:362 +#: netbox/dcim/forms/model_forms.py:446 +#: netbox/utilities/forms/fields/fields.py:47 msgid "Slug" msgstr "Скорочення" -#: dcim/forms/model_forms.py:259 +#: netbox/dcim/forms/model_forms.py:259 msgid "Select a pre-defined rack type, or set physical characteristics below." msgstr "" "Виберіть попередньо визначений тип стійки або встановіть фізичні " "характеристики нижче." -#: dcim/forms/model_forms.py:265 +#: netbox/dcim/forms/model_forms.py:265 msgid "Inventory Control" msgstr "Контроль запасів" -#: dcim/forms/model_forms.py:313 +#: netbox/dcim/forms/model_forms.py:313 msgid "" "Comma-separated list of numeric unit IDs. A range may be specified using a " "hyphen." @@ -4417,144 +4863,175 @@ msgstr "" "Список ідентифікаторів числових юнітів, розділених комами. Діапазон можна " "вказати за допомогою дефіса." -#: dcim/forms/model_forms.py:322 dcim/tables/racks.py:202 +#: netbox/dcim/forms/model_forms.py:322 netbox/dcim/tables/racks.py:202 msgid "Reservation" msgstr "Бронювання" -#: dcim/forms/model_forms.py:423 templates/dcim/devicerole.html:23 +#: netbox/dcim/forms/model_forms.py:423 +#: netbox/templates/dcim/devicerole.html:23 msgid "Device Role" msgstr "Роль пристрою" -#: dcim/forms/model_forms.py:490 dcim/models/devices.py:644 +#: netbox/dcim/forms/model_forms.py:490 netbox/dcim/models/devices.py:644 msgid "The lowest-numbered unit occupied by the device" msgstr "Юніт з найменшим номером, зайнятим пристроєм" -#: dcim/forms/model_forms.py:547 +#: netbox/dcim/forms/model_forms.py:547 msgid "The position in the virtual chassis this device is identified by" msgstr "Положення у віртуальному шасі цього пристрою визначається" -#: dcim/forms/model_forms.py:552 +#: netbox/dcim/forms/model_forms.py:552 msgid "The priority of the device in the virtual chassis" msgstr "Пріоритет пристрою в віртуальному шасі" -#: dcim/forms/model_forms.py:659 +#: netbox/dcim/forms/model_forms.py:659 msgid "Automatically populate components associated with this module type" msgstr "Автоматично заповнювати компоненти, пов'язані з цим типом модуля" -#: dcim/forms/model_forms.py:767 +#: netbox/dcim/forms/model_forms.py:767 msgid "Characteristics" msgstr "Характеристики" -#: dcim/forms/model_forms.py:1087 +#: netbox/dcim/forms/model_forms.py:914 +#, python-brace-format +msgid "" +"Alphanumeric ranges are supported for bulk creation. Mixed cases and types " +"within a single range are not supported (example: " +"[ge,xe]-0/0/[0-9]). The token {module}, if " +"present, will be automatically replaced with the position value when " +"creating a new module." +msgstr "" +"Буквено-цифрові діапазони підтримуються для масового створення. Змішані " +"регістри та типи в межах одного діапазону не підтримуються (приклад: " +"[ге, хе] -0/0/ [0-9]). Жетон {module}, якщо є, " +"буде автоматично замінено значенням позиції при створенні нового модуля." + +#: netbox/dcim/forms/model_forms.py:1094 msgid "Console port template" msgstr "Шаблон порту консолі" -#: dcim/forms/model_forms.py:1095 +#: netbox/dcim/forms/model_forms.py:1102 msgid "Console server port template" msgstr "Шаблон порту консольного сервера" -#: dcim/forms/model_forms.py:1103 +#: netbox/dcim/forms/model_forms.py:1110 msgid "Front port template" msgstr "Шаблон фронтального порту" -#: dcim/forms/model_forms.py:1111 +#: netbox/dcim/forms/model_forms.py:1118 msgid "Interface template" msgstr "Шаблон інтерфейсу" -#: dcim/forms/model_forms.py:1119 +#: netbox/dcim/forms/model_forms.py:1126 msgid "Power outlet template" msgstr "Шаблон електрічної розетки" -#: dcim/forms/model_forms.py:1127 +#: netbox/dcim/forms/model_forms.py:1134 msgid "Power port template" msgstr "Шаблон порту живлення" -#: dcim/forms/model_forms.py:1135 +#: netbox/dcim/forms/model_forms.py:1142 msgid "Rear port template" msgstr "Шаблон порту ззаду" -#: dcim/forms/model_forms.py:1144 dcim/forms/model_forms.py:1388 -#: dcim/forms/model_forms.py:1551 dcim/forms/model_forms.py:1583 -#: dcim/tables/connections.py:65 ipam/forms/bulk_import.py:318 -#: ipam/forms/model_forms.py:280 ipam/forms/model_forms.py:289 -#: ipam/tables/fhrp.py:64 ipam/tables/ip.py:372 ipam/tables/vlans.py:169 -#: templates/circuits/inc/circuit_termination_fields.html:51 -#: templates/dcim/frontport.html:106 templates/dcim/interface.html:27 -#: templates/dcim/interface.html:184 templates/dcim/interface.html:310 -#: templates/dcim/rearport.html:102 -#: templates/virtualization/vminterface.html:18 -#: templates/vpn/tunneltermination.html:31 -#: templates/wireless/inc/wirelesslink_interface.html:10 -#: templates/wireless/wirelesslink.html:10 -#: templates/wireless/wirelesslink.html:55 -#: virtualization/forms/model_forms.py:348 vpn/forms/bulk_import.py:297 -#: vpn/forms/model_forms.py:436 vpn/forms/model_forms.py:445 -#: wireless/forms/model_forms.py:113 wireless/forms/model_forms.py:155 +#: netbox/dcim/forms/model_forms.py: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 "Інтерфейс" -#: dcim/forms/model_forms.py:1145 dcim/forms/model_forms.py:1584 -#: dcim/tables/connections.py:27 templates/dcim/consoleport.html:17 -#: templates/dcim/consoleserverport.html:74 templates/dcim/frontport.html:112 +#: netbox/dcim/forms/model_forms.py:1152 netbox/dcim/forms/model_forms.py:1591 +#: netbox/dcim/tables/connections.py:27 +#: netbox/templates/dcim/consoleport.html:17 +#: netbox/templates/dcim/consoleserverport.html:74 +#: netbox/templates/dcim/frontport.html:112 msgid "Console Port" msgstr "Порт консолі" -#: dcim/forms/model_forms.py:1146 dcim/forms/model_forms.py:1585 -#: templates/dcim/consoleport.html:73 templates/dcim/consoleserverport.html:17 -#: templates/dcim/frontport.html:109 +#: netbox/dcim/forms/model_forms.py:1153 netbox/dcim/forms/model_forms.py:1592 +#: netbox/templates/dcim/consoleport.html:73 +#: netbox/templates/dcim/consoleserverport.html:17 +#: netbox/templates/dcim/frontport.html:109 msgid "Console Server Port" msgstr "Порт консольного сервера" -#: dcim/forms/model_forms.py:1147 dcim/forms/model_forms.py:1586 -#: templates/circuits/inc/circuit_termination_fields.html:52 -#: templates/dcim/consoleport.html:76 templates/dcim/consoleserverport.html:77 -#: templates/dcim/frontport.html:17 templates/dcim/frontport.html:115 -#: templates/dcim/interface.html:187 templates/dcim/rearport.html:105 +#: netbox/dcim/forms/model_forms.py:1154 netbox/dcim/forms/model_forms.py:1593 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:52 +#: netbox/templates/dcim/consoleport.html:76 +#: netbox/templates/dcim/consoleserverport.html:77 +#: netbox/templates/dcim/frontport.html:17 +#: netbox/templates/dcim/frontport.html:115 +#: netbox/templates/dcim/interface.html:187 +#: netbox/templates/dcim/rearport.html:105 msgid "Front Port" msgstr "Передній порт" -#: dcim/forms/model_forms.py:1148 dcim/forms/model_forms.py:1587 -#: dcim/tables/devices.py:710 -#: templates/circuits/inc/circuit_termination_fields.html:53 -#: templates/dcim/consoleport.html:79 templates/dcim/consoleserverport.html:80 -#: templates/dcim/frontport.html:50 templates/dcim/frontport.html:118 -#: templates/dcim/interface.html:190 templates/dcim/rearport.html:17 -#: templates/dcim/rearport.html:108 +#: netbox/dcim/forms/model_forms.py:1155 netbox/dcim/forms/model_forms.py:1594 +#: netbox/dcim/tables/devices.py:710 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:53 +#: netbox/templates/dcim/consoleport.html:79 +#: netbox/templates/dcim/consoleserverport.html:80 +#: netbox/templates/dcim/frontport.html:50 +#: netbox/templates/dcim/frontport.html:118 +#: netbox/templates/dcim/interface.html:190 +#: netbox/templates/dcim/rearport.html:17 +#: netbox/templates/dcim/rearport.html:108 msgid "Rear Port" msgstr "Порт ззаду" -#: dcim/forms/model_forms.py:1149 dcim/forms/model_forms.py:1588 -#: dcim/tables/connections.py:46 dcim/tables/devices.py:512 -#: templates/dcim/poweroutlet.html:44 templates/dcim/powerport.html:17 +#: 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/templates/dcim/powerport.html:17 msgid "Power Port" msgstr "Порт живлення" -#: dcim/forms/model_forms.py:1150 dcim/forms/model_forms.py:1589 -#: templates/dcim/poweroutlet.html:17 templates/dcim/powerport.html:77 +#: netbox/dcim/forms/model_forms.py:1157 netbox/dcim/forms/model_forms.py:1596 +#: netbox/templates/dcim/poweroutlet.html:17 +#: netbox/templates/dcim/powerport.html:77 msgid "Power Outlet" msgstr "Електрична розетка" -#: dcim/forms/model_forms.py:1152 dcim/forms/model_forms.py:1591 +#: netbox/dcim/forms/model_forms.py:1159 netbox/dcim/forms/model_forms.py:1598 msgid "Component Assignment" msgstr "Призначення компонентів" -#: dcim/forms/model_forms.py:1195 dcim/forms/model_forms.py:1638 +#: netbox/dcim/forms/model_forms.py:1202 netbox/dcim/forms/model_forms.py:1645 msgid "An InventoryItem can only be assigned to a single component." msgstr "Елемент інвентаря можна призначити лише одному компоненту." -#: dcim/forms/model_forms.py:1332 +#: netbox/dcim/forms/model_forms.py:1339 msgid "LAG interface" msgstr "Інтерфейс LAG" -#: dcim/forms/model_forms.py:1355 +#: netbox/dcim/forms/model_forms.py:1362 msgid "Filter VLANs available for assignment by group." -msgstr "Фільтр VLAN, доступних для призначення за групами." +msgstr "Фільтр VLAN'ів, доступних для призначення за групами." -#: dcim/forms/model_forms.py:1484 +#: netbox/dcim/forms/model_forms.py:1491 msgid "Child Device" msgstr "Підпорядкований пристрій" -#: dcim/forms/model_forms.py:1485 +#: netbox/dcim/forms/model_forms.py:1492 msgid "" "Child devices must first be created and assigned to the site and rack of the" " parent device." @@ -4562,32 +5039,35 @@ msgstr "" "Підпорядковані пристрої спочатку повинні бути створені та присвоєні до тех. " "майданчику та стійки батьківського пристрою." -#: dcim/forms/model_forms.py:1527 +#: netbox/dcim/forms/model_forms.py:1534 msgid "Console port" msgstr "Консольний порт" -#: dcim/forms/model_forms.py:1535 +#: netbox/dcim/forms/model_forms.py:1542 msgid "Console server port" msgstr "Порт консольного сервера" -#: dcim/forms/model_forms.py:1543 +#: netbox/dcim/forms/model_forms.py:1550 msgid "Front port" msgstr "Передній порт" -#: dcim/forms/model_forms.py:1559 +#: netbox/dcim/forms/model_forms.py:1566 msgid "Power outlet" msgstr "Розетка живлення" -#: dcim/forms/model_forms.py:1579 templates/dcim/inventoryitem.html:17 +#: netbox/dcim/forms/model_forms.py:1586 +#: netbox/templates/dcim/inventoryitem.html:17 msgid "Inventory Item" msgstr "Елемент інвентаря" -#: dcim/forms/model_forms.py:1652 templates/dcim/inventoryitemrole.html:15 +#: netbox/dcim/forms/model_forms.py:1659 +#: netbox/templates/dcim/inventoryitemrole.html:15 msgid "Inventory Item Role" msgstr "Роль елемента інвентаря" -#: dcim/forms/object_create.py:48 dcim/forms/object_create.py:199 -#: dcim/forms/object_create.py:355 +#: netbox/dcim/forms/object_create.py:48 +#: netbox/dcim/forms/object_create.py:199 +#: netbox/dcim/forms/object_create.py:347 msgid "" "Alphanumeric ranges are supported. (Must match the number of objects being " "created.)" @@ -4595,7 +5075,7 @@ msgstr "" "Підтримуються буквено-цифрові діапазони. (Повинен збігатися з кількістю " "створюваних об'єктів.)" -#: dcim/forms/object_create.py:68 +#: netbox/dcim/forms/object_create.py:68 #, python-brace-format msgid "" "The provided pattern specifies {value_count} values, but {pattern_count} are" @@ -4604,56 +5084,49 @@ msgstr "" "Наданий шаблон визначає {value_count} цінності, але {pattern_count} " "очікуються." -#: dcim/forms/object_create.py:110 dcim/forms/object_create.py:271 -#: dcim/tables/devices.py:252 +#: netbox/dcim/forms/object_create.py:110 +#: netbox/dcim/forms/object_create.py:263 netbox/dcim/tables/devices.py:252 msgid "Rear ports" msgstr "Порти ззаду" -#: dcim/forms/object_create.py:111 dcim/forms/object_create.py:272 +#: netbox/dcim/forms/object_create.py:111 +#: netbox/dcim/forms/object_create.py:264 msgid "Select one rear port assignment for each front port being created." msgstr "" "Виберіть одне призначення порту ззаду для кожного створюваного переднього " "порту." -#: dcim/forms/object_create.py:164 +#: netbox/dcim/forms/object_create.py:164 #, python-brace-format msgid "" "The number of front port templates to be created ({frontport_count}) must " "match the selected number of rear port positions ({rearport_count})." msgstr "" "Кількість шаблонів передніх портів, які потрібно створити " -"({frontport_count}) повинен відповідати вибраній кількості позицій портів " +"({frontport_count}) повинна відповідати вибраній кількості позицій портів " "ззаду ({rearport_count})." -#: dcim/forms/object_create.py:251 -#, python-brace-format -msgid "" -"The string {module} will be replaced with the position of the " -"assigned module, if any." -msgstr "" -"Струна {module} буде замінено позицією призначеного модуля, " -"якщо такий є." - -#: dcim/forms/object_create.py:320 +#: netbox/dcim/forms/object_create.py:312 #, python-brace-format msgid "" "The number of front ports to be created ({frontport_count}) must match the " "selected number of rear port positions ({rearport_count})." msgstr "" -"Кількість передніх портів, які потрібно створити ({frontport_count}) повинен" +"Кількість передніх портів, які потрібно створити ({frontport_count}) повинна" " відповідати вибраній кількості позицій портів ззаду ({rearport_count})." -#: dcim/forms/object_create.py:409 dcim/tables/devices.py:1033 -#: ipam/tables/fhrp.py:31 templates/dcim/virtualchassis.html:53 -#: templates/dcim/virtualchassis_edit.html:47 templates/ipam/fhrpgroup.html:38 +#: netbox/dcim/forms/object_create.py:401 netbox/dcim/tables/devices.py:1033 +#: netbox/ipam/tables/fhrp.py:31 netbox/templates/dcim/virtualchassis.html:53 +#: netbox/templates/dcim/virtualchassis_edit.html:47 +#: netbox/templates/ipam/fhrpgroup.html:38 msgid "Members" msgstr "Члени" -#: dcim/forms/object_create.py:418 +#: netbox/dcim/forms/object_create.py:410 msgid "Initial position" msgstr "Початкова позиція" -#: dcim/forms/object_create.py:421 +#: netbox/dcim/forms/object_create.py:413 msgid "" "Position of the first member device. Increases by one for each additional " "member." @@ -4661,105 +5134,107 @@ msgstr "" "Положення пристрою першого члена. Збільшується на одного для кожного " "додаткового члена." -#: dcim/forms/object_create.py:435 +#: netbox/dcim/forms/object_create.py:427 msgid "A position must be specified for the first VC member." -msgstr "Посада повинна бути вказана для першого члена VC." +msgstr "Позиція повинна бути вказана для першого члена VC." -#: dcim/models/cables.py:62 dcim/models/device_component_templates.py:55 -#: dcim/models/device_components.py:62 extras/models/customfields.py:111 +#: netbox/dcim/models/cables.py:62 +#: netbox/dcim/models/device_component_templates.py:55 +#: netbox/dcim/models/device_components.py:62 +#: netbox/extras/models/customfields.py:111 msgid "label" msgstr "етикетка" -#: dcim/models/cables.py:71 +#: netbox/dcim/models/cables.py:71 msgid "length" msgstr "довжина" -#: dcim/models/cables.py:78 +#: netbox/dcim/models/cables.py:78 msgid "length unit" msgstr "довжина юніта" -#: dcim/models/cables.py:95 +#: netbox/dcim/models/cables.py:95 msgid "cable" msgstr "кабель" -#: dcim/models/cables.py:96 +#: netbox/dcim/models/cables.py:96 msgid "cables" msgstr "кабелів" -#: dcim/models/cables.py:165 +#: netbox/dcim/models/cables.py:165 msgid "Must specify a unit when setting a cable length" msgstr "Необхідно вказати номер юніта при установці довжини кабелю" -#: dcim/models/cables.py:168 +#: netbox/dcim/models/cables.py:168 msgid "Must define A and B terminations when creating a new cable." -msgstr "Необхідно визначити кінцівки А і Б при створенні нового кабелю." +msgstr "Необхідно визначити кінці А і Б при створенні нового кабелю." -#: dcim/models/cables.py:175 +#: netbox/dcim/models/cables.py:175 msgid "Cannot connect different termination types to same end of cable." msgstr "Не вдається підключити різні типи кінцевок до одного кінця кабелю." -#: dcim/models/cables.py:183 +#: netbox/dcim/models/cables.py:183 #, python-brace-format msgid "Incompatible termination types: {type_a} and {type_b}" msgstr "Несумісні типи з'єднання: {type_a} і {type_b}" -#: dcim/models/cables.py:193 +#: netbox/dcim/models/cables.py:193 msgid "A and B terminations cannot connect to the same object." msgstr "Кінцевки A і Б не можуть з'єднуватися з одним об'єктом." -#: dcim/models/cables.py:260 ipam/models/asns.py:37 +#: netbox/dcim/models/cables.py:260 netbox/ipam/models/asns.py:37 msgid "end" msgstr "кінець" -#: dcim/models/cables.py:313 +#: netbox/dcim/models/cables.py:313 msgid "cable termination" -msgstr "кабельна кінцівка" +msgstr "кабельний кінець" -#: dcim/models/cables.py:314 +#: netbox/dcim/models/cables.py:314 msgid "cable terminations" -msgstr "кабельні кінцівки" +msgstr "кабельні кінці" -#: dcim/models/cables.py:333 +#: netbox/dcim/models/cables.py:333 #, python-brace-format msgid "" "Duplicate termination found for {app_label}.{model} {termination_id}: cable " "{cable_pk}" msgstr "" -"Знайдено дублікат кінцівки {app_label}.{model} {termination_id}: кабель " +"Знайдено дублікат кінця {app_label}.{model} {termination_id}: кабель " "{cable_pk}" -#: dcim/models/cables.py:343 +#: netbox/dcim/models/cables.py:343 #, python-brace-format msgid "Cables cannot be terminated to {type_display} interfaces" msgstr "Кабелі не можуть бути підключені в {type_display} інтерфейси" -#: dcim/models/cables.py:350 +#: netbox/dcim/models/cables.py:350 msgid "Circuit terminations attached to a provider network may not be cabled." msgstr "" "Кінці каналу зв'язку, приєднані до мережі провайдера, не можуть бути " "кабельними." -#: dcim/models/cables.py:448 extras/models/configs.py:50 +#: netbox/dcim/models/cables.py:448 netbox/extras/models/configs.py:50 msgid "is active" msgstr "активний" -#: dcim/models/cables.py:452 +#: netbox/dcim/models/cables.py:452 msgid "is complete" msgstr "завершено" -#: dcim/models/cables.py:456 +#: netbox/dcim/models/cables.py:456 msgid "is split" msgstr "розщеплюється" -#: dcim/models/cables.py:464 +#: netbox/dcim/models/cables.py:464 msgid "cable path" msgstr "кабельний шлях" -#: dcim/models/cables.py:465 +#: netbox/dcim/models/cables.py:465 msgid "cable paths" msgstr "кабельні шляхи" -#: dcim/models/device_component_templates.py:46 +#: netbox/dcim/models/device_component_templates.py:46 #, python-brace-format msgid "" "{module} is accepted as a substitution for the module bay position when " @@ -4768,16 +5243,16 @@ msgstr "" "{module} приймається як заміна позиції відсіку модуля при приєднанні до типу" " модуля." -#: dcim/models/device_component_templates.py:58 -#: dcim/models/device_components.py:65 +#: netbox/dcim/models/device_component_templates.py:58 +#: netbox/dcim/models/device_components.py:65 msgid "Physical label" msgstr "Фізична етикетка" -#: dcim/models/device_component_templates.py:103 +#: netbox/dcim/models/device_component_templates.py:103 msgid "Component templates cannot be moved to a different device type." msgstr "Шаблони компонентів не можна переміщати на інший тип пристрою." -#: dcim/models/device_component_templates.py:154 +#: netbox/dcim/models/device_component_templates.py:154 msgid "" "A component template cannot be associated with both a device type and a " "module type." @@ -4785,146 +5260,146 @@ msgstr "" "Шаблон компонента не може бути пов'язаний як з типом пристрою, так і з типом" " модуля." -#: dcim/models/device_component_templates.py:158 +#: netbox/dcim/models/device_component_templates.py:158 msgid "" "A component template must be associated with either a device type or a " "module type." msgstr "" "Шаблон компонента повинен бути пов'язаний з типом пристрою або типом модуля." -#: dcim/models/device_component_templates.py:212 +#: netbox/dcim/models/device_component_templates.py:212 msgid "console port template" msgstr "шаблон порту консолі" -#: dcim/models/device_component_templates.py:213 +#: netbox/dcim/models/device_component_templates.py:213 msgid "console port templates" msgstr "шаблони портів консолі" -#: dcim/models/device_component_templates.py:246 +#: netbox/dcim/models/device_component_templates.py:246 msgid "console server port template" msgstr "шаблон порту консольного сервера" -#: dcim/models/device_component_templates.py:247 +#: netbox/dcim/models/device_component_templates.py:247 msgid "console server port templates" msgstr "шаблони портів консольного сервера" -#: dcim/models/device_component_templates.py:278 -#: dcim/models/device_components.py:352 +#: netbox/dcim/models/device_component_templates.py:278 +#: netbox/dcim/models/device_components.py:352 msgid "maximum draw" msgstr "максимальна потужність" -#: dcim/models/device_component_templates.py:285 -#: dcim/models/device_components.py:359 +#: netbox/dcim/models/device_component_templates.py:285 +#: netbox/dcim/models/device_components.py:359 msgid "allocated draw" msgstr "виділена потужність" -#: dcim/models/device_component_templates.py:295 +#: netbox/dcim/models/device_component_templates.py:295 msgid "power port template" msgstr "шаблон порту живлення" -#: dcim/models/device_component_templates.py:296 +#: netbox/dcim/models/device_component_templates.py:296 msgid "power port templates" msgstr "шаблони портів живлення" -#: dcim/models/device_component_templates.py:315 -#: dcim/models/device_components.py:382 +#: netbox/dcim/models/device_component_templates.py:315 +#: netbox/dcim/models/device_components.py:382 #, python-brace-format msgid "Allocated draw cannot exceed the maximum draw ({maximum_draw}W)." msgstr "" "Виділена потужність не може перевищувати максимальну потужність " -"({maximum_draw}W)." +"({maximum_draw}Вт)." -#: dcim/models/device_component_templates.py:347 -#: dcim/models/device_components.py:477 +#: netbox/dcim/models/device_component_templates.py:347 +#: netbox/dcim/models/device_components.py:477 msgid "feed leg" msgstr "фідер живлення" -#: dcim/models/device_component_templates.py:351 -#: dcim/models/device_components.py:481 +#: netbox/dcim/models/device_component_templates.py:351 +#: netbox/dcim/models/device_components.py:481 msgid "Phase (for three-phase feeds)" msgstr "Фаза (для трифазних подач)" -#: dcim/models/device_component_templates.py:357 +#: netbox/dcim/models/device_component_templates.py:357 msgid "power outlet template" msgstr "шаблон розетки" -#: dcim/models/device_component_templates.py:358 +#: netbox/dcim/models/device_component_templates.py:358 msgid "power outlet templates" msgstr "шаблони розеток" -#: dcim/models/device_component_templates.py:367 +#: netbox/dcim/models/device_component_templates.py:367 #, python-brace-format msgid "Parent power port ({power_port}) must belong to the same device type" msgstr "" -"Батьківський порт живлення ({power_port}) повинні належати до одного типу " +"Батьківський порт живлення ({power_port}) повинен належати до одного типу " "пристрою" -#: dcim/models/device_component_templates.py:371 +#: netbox/dcim/models/device_component_templates.py:371 #, python-brace-format msgid "Parent power port ({power_port}) must belong to the same module type" msgstr "" -"Батьківський порт живлення ({power_port}) повинні належати до одного типу " +"Батьківський порт живлення ({power_port}) повинен належати до одного типу " "модуля" -#: dcim/models/device_component_templates.py:423 -#: dcim/models/device_components.py:611 +#: netbox/dcim/models/device_component_templates.py:423 +#: netbox/dcim/models/device_components.py:611 msgid "management only" msgstr "тільки управління" -#: dcim/models/device_component_templates.py:431 -#: dcim/models/device_components.py:550 +#: netbox/dcim/models/device_component_templates.py:431 +#: netbox/dcim/models/device_components.py:550 msgid "bridge interface" msgstr "інтерфейс моста" -#: dcim/models/device_component_templates.py:449 -#: dcim/models/device_components.py:636 +#: netbox/dcim/models/device_component_templates.py:449 +#: netbox/dcim/models/device_components.py:636 msgid "wireless role" msgstr "бездротова роль" -#: dcim/models/device_component_templates.py:455 +#: netbox/dcim/models/device_component_templates.py:455 msgid "interface template" msgstr "шаблон інтерфейсу" -#: dcim/models/device_component_templates.py:456 +#: netbox/dcim/models/device_component_templates.py:456 msgid "interface templates" msgstr "шаблони інтерфейсу" -#: dcim/models/device_component_templates.py:463 -#: dcim/models/device_components.py:804 -#: virtualization/models/virtualmachines.py:405 +#: netbox/dcim/models/device_component_templates.py:463 +#: netbox/dcim/models/device_components.py:804 +#: netbox/virtualization/models/virtualmachines.py:405 msgid "An interface cannot be bridged to itself." msgstr "Інтерфейс не може бути з'єднаний мостом з собою." -#: dcim/models/device_component_templates.py:466 +#: netbox/dcim/models/device_component_templates.py:466 #, python-brace-format msgid "Bridge interface ({bridge}) must belong to the same device type" msgstr "" "Інтерфейс моста ({bridge}) повинні складатися з пристроїв одного типу " -#: dcim/models/device_component_templates.py:470 +#: netbox/dcim/models/device_component_templates.py:470 #, python-brace-format msgid "Bridge interface ({bridge}) must belong to the same module type" msgstr "Інтерфейс моста ({bridge}) повинні складатися з модулів одного типу " -#: dcim/models/device_component_templates.py:526 -#: dcim/models/device_components.py:984 +#: netbox/dcim/models/device_component_templates.py:526 +#: netbox/dcim/models/device_components.py:984 msgid "rear port position" msgstr "положення порту ззаду" -#: dcim/models/device_component_templates.py:551 +#: netbox/dcim/models/device_component_templates.py:551 msgid "front port template" msgstr "шаблон переднього порту" -#: dcim/models/device_component_templates.py:552 +#: netbox/dcim/models/device_component_templates.py:552 msgid "front port templates" msgstr "шаблони передніх портів" -#: dcim/models/device_component_templates.py:562 +#: netbox/dcim/models/device_component_templates.py:562 #, python-brace-format msgid "Rear port ({name}) must belong to the same device type" msgstr "Задній порт ({name}) повинні належати до одного типу пристрою" -#: dcim/models/device_component_templates.py:568 +#: netbox/dcim/models/device_component_templates.py:568 #, python-brace-format msgid "" "Invalid rear port position ({position}); rear port {name} has only {count} " @@ -4933,47 +5408,47 @@ msgstr "" "Невірна позиція порту ззаду ({position}); порт ззаду {name} має тільки " "{count} позиції" -#: dcim/models/device_component_templates.py:621 -#: dcim/models/device_components.py:1053 +#: netbox/dcim/models/device_component_templates.py:621 +#: netbox/dcim/models/device_components.py:1053 msgid "positions" msgstr "позиції" -#: dcim/models/device_component_templates.py:632 +#: netbox/dcim/models/device_component_templates.py:632 msgid "rear port template" msgstr "шаблон порту ззаду" -#: dcim/models/device_component_templates.py:633 +#: netbox/dcim/models/device_component_templates.py:633 msgid "rear port templates" msgstr "шаблони портів ззаду" -#: dcim/models/device_component_templates.py:662 -#: dcim/models/device_components.py:1103 +#: netbox/dcim/models/device_component_templates.py:662 +#: netbox/dcim/models/device_components.py:1103 msgid "position" -msgstr "позиції" +msgstr "позиція" -#: dcim/models/device_component_templates.py:665 -#: dcim/models/device_components.py:1106 +#: netbox/dcim/models/device_component_templates.py:665 +#: netbox/dcim/models/device_components.py:1106 msgid "Identifier to reference when renaming installed components" msgstr "" "Ідентифікатор для посилання при перейменуванні встановлених компонентів" -#: dcim/models/device_component_templates.py:671 +#: netbox/dcim/models/device_component_templates.py:671 msgid "module bay template" msgstr "шаблон відсіку модуля" -#: dcim/models/device_component_templates.py:672 +#: netbox/dcim/models/device_component_templates.py:672 msgid "module bay templates" msgstr "шаблони відсіків модулів" -#: dcim/models/device_component_templates.py:699 +#: netbox/dcim/models/device_component_templates.py:699 msgid "device bay template" msgstr "шаблон відсіку пристрою" -#: dcim/models/device_component_templates.py:700 +#: netbox/dcim/models/device_component_templates.py:700 msgid "device bay templates" msgstr "шаблони відсіків пристроїв" -#: dcim/models/device_component_templates.py:713 +#: netbox/dcim/models/device_component_templates.py:713 #, python-brace-format msgid "" "Subdevice role of device type ({device_type}) must be set to \"parent\" to " @@ -4982,206 +5457,211 @@ msgstr "" "Роль підпристрою типу пристрою ({device_type}) має бути встановлено значення" " \"батько\", щоб дозволити відсіки пристрою." -#: dcim/models/device_component_templates.py:768 -#: dcim/models/device_components.py:1262 +#: netbox/dcim/models/device_component_templates.py:768 +#: netbox/dcim/models/device_components.py:1262 msgid "part ID" msgstr "Ідентифікатор частини" -#: dcim/models/device_component_templates.py:770 -#: dcim/models/device_components.py:1264 +#: netbox/dcim/models/device_component_templates.py:770 +#: netbox/dcim/models/device_components.py:1264 msgid "Manufacturer-assigned part identifier" msgstr "Ідентифікатор деталі, призначений виробником" -#: dcim/models/device_component_templates.py:787 +#: netbox/dcim/models/device_component_templates.py:787 msgid "inventory item template" msgstr "шаблон елемента інвентаря" -#: dcim/models/device_component_templates.py:788 +#: netbox/dcim/models/device_component_templates.py:788 msgid "inventory item templates" msgstr "шаблони елемента інвентаря" -#: dcim/models/device_components.py:105 +#: netbox/dcim/models/device_components.py:105 msgid "Components cannot be moved to a different device." msgstr "Компоненти не можна переміщати на інший пристрій." -#: dcim/models/device_components.py:144 +#: netbox/dcim/models/device_components.py:144 msgid "cable end" msgstr "кінець кабелю" -#: dcim/models/device_components.py:150 +#: netbox/dcim/models/device_components.py:150 msgid "mark connected" msgstr "позначка підключена" -#: dcim/models/device_components.py:152 +#: netbox/dcim/models/device_components.py:152 msgid "Treat as if a cable is connected" msgstr "Ставтеся так, ніби підключений кабель" -#: dcim/models/device_components.py:170 +#: netbox/dcim/models/device_components.py:170 msgid "Must specify cable end (A or B) when attaching a cable." msgstr "Необхідно вказати кінець кабелю (А або Б) при приєднанні кабелю." -#: dcim/models/device_components.py:174 +#: netbox/dcim/models/device_components.py:174 msgid "Cable end must not be set without a cable." msgstr "Кінець кабелю не можна встановлювати без кабелю." -#: dcim/models/device_components.py:178 +#: netbox/dcim/models/device_components.py:178 msgid "Cannot mark as connected with a cable attached." msgstr "Не можна позначити як з'єднаний із приєднаним вже кабелем." -#: dcim/models/device_components.py:202 +#: netbox/dcim/models/device_components.py:202 #, python-brace-format msgid "{class_name} models must declare a parent_object property" msgstr "" "{class_name} моделі повинні спочатку оголосити властивість parent_object" -#: dcim/models/device_components.py:287 dcim/models/device_components.py:316 -#: dcim/models/device_components.py:349 dcim/models/device_components.py:467 +#: 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 msgid "Physical port type" msgstr "Фізичний тип порту" -#: dcim/models/device_components.py:290 dcim/models/device_components.py:319 +#: netbox/dcim/models/device_components.py:290 +#: netbox/dcim/models/device_components.py:319 msgid "speed" msgstr "швидкість" -#: dcim/models/device_components.py:294 dcim/models/device_components.py:323 +#: netbox/dcim/models/device_components.py:294 +#: netbox/dcim/models/device_components.py:323 msgid "Port speed in bits per second" msgstr "Швидкість порту в бітах в секунду" -#: dcim/models/device_components.py:300 +#: netbox/dcim/models/device_components.py:300 msgid "console port" msgstr "консольний порт" -#: dcim/models/device_components.py:301 +#: netbox/dcim/models/device_components.py:301 msgid "console ports" msgstr "консольні порти" -#: dcim/models/device_components.py:329 +#: netbox/dcim/models/device_components.py:329 msgid "console server port" msgstr "порт консольного сервера" -#: dcim/models/device_components.py:330 +#: netbox/dcim/models/device_components.py:330 msgid "console server ports" msgstr "порти консольного сервера" -#: dcim/models/device_components.py:369 +#: netbox/dcim/models/device_components.py:369 msgid "power port" msgstr "порт живлення" -#: dcim/models/device_components.py:370 +#: netbox/dcim/models/device_components.py:370 msgid "power ports" msgstr "порти живлення" -#: dcim/models/device_components.py:487 +#: netbox/dcim/models/device_components.py:487 msgid "power outlet" msgstr "розетка" -#: dcim/models/device_components.py:488 +#: netbox/dcim/models/device_components.py:488 msgid "power outlets" msgstr "розетки" -#: dcim/models/device_components.py:499 +#: netbox/dcim/models/device_components.py:499 #, python-brace-format msgid "Parent power port ({power_port}) must belong to the same device" msgstr "" "Батьківський порт живлення ({power_port}) повинні належати до одного і того " "ж пристрою" -#: dcim/models/device_components.py:530 vpn/models/crypto.py:81 -#: vpn/models/crypto.py:226 +#: netbox/dcim/models/device_components.py:530 netbox/vpn/models/crypto.py:81 +#: netbox/vpn/models/crypto.py:226 msgid "mode" msgstr "режим" -#: dcim/models/device_components.py:534 +#: netbox/dcim/models/device_components.py:534 msgid "IEEE 802.1Q tagging strategy" msgstr "Стратегія міток IEEE 802.1Q" -#: dcim/models/device_components.py:542 +#: netbox/dcim/models/device_components.py:542 msgid "parent interface" msgstr "батьківський інтерфейс" -#: dcim/models/device_components.py:602 +#: netbox/dcim/models/device_components.py:602 msgid "parent LAG" msgstr "батьківський LAG" -#: dcim/models/device_components.py:612 +#: netbox/dcim/models/device_components.py:612 msgid "This interface is used only for out-of-band management" msgstr "" "Цей інтерфейс використовується лише для зовнішнього незалежного керування" -#: dcim/models/device_components.py:617 +#: netbox/dcim/models/device_components.py:617 msgid "speed (Kbps)" msgstr "швидкість (Кбіт/с)" -#: dcim/models/device_components.py:620 +#: netbox/dcim/models/device_components.py:620 msgid "duplex" msgstr "дуплекс" -#: dcim/models/device_components.py:630 +#: netbox/dcim/models/device_components.py:630 msgid "64-bit World Wide Name" msgstr "64-розрядна всесвітня назва" -#: dcim/models/device_components.py:642 +#: netbox/dcim/models/device_components.py:642 msgid "wireless channel" msgstr "бездротовий канал" -#: dcim/models/device_components.py:649 +#: netbox/dcim/models/device_components.py:649 msgid "channel frequency (MHz)" msgstr "частота каналу (МГц)" -#: dcim/models/device_components.py:650 dcim/models/device_components.py:658 +#: netbox/dcim/models/device_components.py:650 +#: netbox/dcim/models/device_components.py:658 msgid "Populated by selected channel (if set)" msgstr "Заповнюється вибраним каналом (якщо встановлено)" -#: dcim/models/device_components.py:664 +#: netbox/dcim/models/device_components.py:664 msgid "transmit power (dBm)" msgstr "потужність передачі (дБм)" -#: dcim/models/device_components.py:689 wireless/models.py:117 +#: netbox/dcim/models/device_components.py:689 netbox/wireless/models.py:117 msgid "wireless LANs" msgstr "бездротові локальні мережі" -#: dcim/models/device_components.py:697 -#: virtualization/models/virtualmachines.py:335 +#: netbox/dcim/models/device_components.py:697 +#: netbox/virtualization/models/virtualmachines.py:335 msgid "untagged VLAN" msgstr "VLAN без міток" -#: dcim/models/device_components.py:703 -#: virtualization/models/virtualmachines.py:341 +#: netbox/dcim/models/device_components.py:703 +#: netbox/virtualization/models/virtualmachines.py:341 msgid "tagged VLANs" msgstr "VLAN'и з мітками" -#: dcim/models/device_components.py:745 -#: virtualization/models/virtualmachines.py:377 +#: netbox/dcim/models/device_components.py:745 +#: netbox/virtualization/models/virtualmachines.py:377 msgid "interface" msgstr "інтерфейс" -#: dcim/models/device_components.py:746 -#: virtualization/models/virtualmachines.py:378 +#: netbox/dcim/models/device_components.py:746 +#: netbox/virtualization/models/virtualmachines.py:378 msgid "interfaces" msgstr "інтерфейси" -#: dcim/models/device_components.py:757 +#: netbox/dcim/models/device_components.py:757 #, python-brace-format msgid "{display_type} interfaces cannot have a cable attached." msgstr "{display_type} інтерфейси не можуть мати приєднаний кабель." -#: dcim/models/device_components.py:765 +#: netbox/dcim/models/device_components.py:765 #, python-brace-format msgid "{display_type} interfaces cannot be marked as connected." msgstr "{display_type} інтерфейси не можуть бути позначені як підключені." -#: dcim/models/device_components.py:774 -#: virtualization/models/virtualmachines.py:390 +#: netbox/dcim/models/device_components.py:774 +#: netbox/virtualization/models/virtualmachines.py:390 msgid "An interface cannot be its own parent." msgstr "Інтерфейс не може бути власним батьківським." -#: dcim/models/device_components.py:778 +#: netbox/dcim/models/device_components.py:778 msgid "Only virtual interfaces may be assigned to a parent interface." msgstr "" "Тільки віртуальні інтерфейси можуть бути призначені батьківському " "інтерфейсу." -#: dcim/models/device_components.py:785 +#: netbox/dcim/models/device_components.py:785 #, python-brace-format msgid "" "The selected parent interface ({interface}) belongs to a different device " @@ -5190,7 +5670,7 @@ msgstr "" "Вибраний батьківський інтерфейс ({interface}) належить до іншого пристрою " "({device})" -#: dcim/models/device_components.py:791 +#: netbox/dcim/models/device_components.py:791 #, python-brace-format msgid "" "The selected parent interface ({interface}) belongs to {device}, which is " @@ -5199,7 +5679,7 @@ msgstr "" "Вибраний батьківський інтерфейс ({interface}) належить {device}, яка не є " "частиною віртуального шасі {virtual_chassis}." -#: dcim/models/device_components.py:811 +#: netbox/dcim/models/device_components.py:811 #, python-brace-format msgid "" "The selected bridge interface ({bridge}) belongs to a different device " @@ -5207,7 +5687,7 @@ msgid "" msgstr "" "Вибраний інтерфейс моста ({bridge}) належить до іншого пристрою ({device})." -#: dcim/models/device_components.py:817 +#: netbox/dcim/models/device_components.py:817 #, python-brace-format msgid "" "The selected bridge interface ({interface}) belongs to {device}, which is " @@ -5216,22 +5696,22 @@ msgstr "" "Вибраний інтерфейс моста ({interface}) належить {device}, який не є частиною" " віртуального шасі {virtual_chassis}." -#: dcim/models/device_components.py:828 +#: netbox/dcim/models/device_components.py:828 msgid "Virtual interfaces cannot have a parent LAG interface." msgstr "Віртуальні інтерфейси не можуть бути батьківським інтерфейсом LAG." -#: dcim/models/device_components.py:832 +#: netbox/dcim/models/device_components.py:832 msgid "A LAG interface cannot be its own parent." msgstr "Інтерфейс LAG не може бути власним батьківським інтерфейсом." -#: dcim/models/device_components.py:839 +#: netbox/dcim/models/device_components.py:839 #, python-brace-format msgid "" "The selected LAG interface ({lag}) belongs to a different device ({device})." msgstr "" "Вибраний інтерфейс LAG ({lag}) належить до іншого пристрою ({device})." -#: dcim/models/device_components.py:845 +#: netbox/dcim/models/device_components.py:845 #, python-brace-format msgid "" "The selected LAG interface ({lag}) belongs to {device}, which is not part of" @@ -5240,49 +5720,49 @@ msgstr "" "Вибраний інтерфейс LAG ({lag}) належить {device}, який не є частиною " "віртуального шасі {virtual_chassis}." -#: dcim/models/device_components.py:856 +#: netbox/dcim/models/device_components.py:856 msgid "Virtual interfaces cannot have a PoE mode." msgstr "Віртуальні інтерфейси не можуть мати режим PoE." -#: dcim/models/device_components.py:860 +#: netbox/dcim/models/device_components.py:860 msgid "Virtual interfaces cannot have a PoE type." msgstr "Віртуальні інтерфейси не можуть мати тип PoE." -#: dcim/models/device_components.py:866 +#: netbox/dcim/models/device_components.py:866 msgid "Must specify PoE mode when designating a PoE type." msgstr "Необхідно вказати режим PoE при створенні інтерфейсу типу PoE." -#: dcim/models/device_components.py:873 +#: netbox/dcim/models/device_components.py:873 msgid "Wireless role may be set only on wireless interfaces." msgstr "" "Роль бездротового зв'язку може бути встановлена тільки на бездротових " "інтерфейсах." -#: dcim/models/device_components.py:875 +#: netbox/dcim/models/device_components.py:875 msgid "Channel may be set only on wireless interfaces." msgstr "Канал (Wi-Fi) можна встановлювати тільки на бездротових інтерфейсах." -#: dcim/models/device_components.py:881 +#: netbox/dcim/models/device_components.py:881 msgid "Channel frequency may be set only on wireless interfaces." msgstr "" "Частота каналу (Wi-Fi) може встановлюватися тільки на бездротових " "інтерфейсах." -#: dcim/models/device_components.py:885 +#: netbox/dcim/models/device_components.py:885 msgid "Cannot specify custom frequency with channel selected." msgstr "Неможливо вказати користувацьку частоту при вибраному каналі (Wi-Fi)." -#: dcim/models/device_components.py:891 +#: netbox/dcim/models/device_components.py:891 msgid "Channel width may be set only on wireless interfaces." msgstr "" "Ширина каналу (Wi-Fi) може бути встановлена тільки на бездротових " "інтерфейсах." -#: dcim/models/device_components.py:893 +#: netbox/dcim/models/device_components.py:893 msgid "Cannot specify custom width with channel selected." msgstr "Неможливо вказати користувацьку ширину при вибраному каналі." -#: dcim/models/device_components.py:901 +#: netbox/dcim/models/device_components.py:901 #, python-brace-format msgid "" "The untagged VLAN ({untagged_vlan}) must belong to the same site as the " @@ -5291,24 +5771,24 @@ msgstr "" "VLAN без міток ({untagged_vlan}) повинен належати тому ж тех. майданчику, що" " і батьківський пристрій інтерфейсу, або ж він повинен бути глобальним." -#: dcim/models/device_components.py:990 +#: netbox/dcim/models/device_components.py:990 msgid "Mapped position on corresponding rear port" msgstr "Відображене положення на відповідному порті ззаду" -#: dcim/models/device_components.py:1006 +#: netbox/dcim/models/device_components.py:1006 msgid "front port" msgstr "передній порт" -#: dcim/models/device_components.py:1007 +#: netbox/dcim/models/device_components.py:1007 msgid "front ports" msgstr "передні порти" -#: dcim/models/device_components.py:1021 +#: netbox/dcim/models/device_components.py:1021 #, python-brace-format msgid "Rear port ({rear_port}) must belong to the same device" msgstr "Порт ззаду ({rear_port}) повинні належати до одного і того ж пристрою" -#: dcim/models/device_components.py:1029 +#: netbox/dcim/models/device_components.py:1029 #, python-brace-format msgid "" "Invalid rear port position ({rear_port_position}): Rear port {name} has only" @@ -5317,19 +5797,19 @@ msgstr "" "Невірна позиція порту ззаду ({rear_port_position}): порт ззаду {name} має " "тільки {positions} позицій." -#: dcim/models/device_components.py:1059 +#: netbox/dcim/models/device_components.py:1059 msgid "Number of front ports which may be mapped" msgstr "Кількість передніх портів, які можуть бути відображені" -#: dcim/models/device_components.py:1064 +#: netbox/dcim/models/device_components.py:1064 msgid "rear port" msgstr "порт ззаду" -#: dcim/models/device_components.py:1065 +#: netbox/dcim/models/device_components.py:1065 msgid "rear ports" msgstr "порти ззаду" -#: dcim/models/device_components.py:1079 +#: netbox/dcim/models/device_components.py:1079 #, python-brace-format msgid "" "The number of positions cannot be less than the number of mapped front ports" @@ -5338,37 +5818,38 @@ msgstr "" "Кількість позицій не може бути меншою за кількість відображених фронтальних " "портів ({frontport_count})" -#: dcim/models/device_components.py:1120 +#: netbox/dcim/models/device_components.py:1120 msgid "module bay" msgstr "відсік модуля" -#: dcim/models/device_components.py:1121 +#: netbox/dcim/models/device_components.py:1121 msgid "module bays" msgstr "відсіки модуля" -#: dcim/models/device_components.py:1138 dcim/models/devices.py:1224 +#: netbox/dcim/models/device_components.py:1138 +#: netbox/dcim/models/devices.py:1224 msgid "A module bay cannot belong to a module installed within it." msgstr "Відсік модуля не може належати модулю, встановленому в ньому." -#: dcim/models/device_components.py:1164 +#: netbox/dcim/models/device_components.py:1164 msgid "device bay" msgstr "відсік пристрою" -#: dcim/models/device_components.py:1165 +#: netbox/dcim/models/device_components.py:1165 msgid "device bays" msgstr "відсіки для пристроїв" -#: dcim/models/device_components.py:1175 +#: netbox/dcim/models/device_components.py:1175 #, python-brace-format msgid "This type of device ({device_type}) does not support device bays." msgstr "" "Даний тип пристрою ({device_type}) не підтримує відсіки для пристроїв." -#: dcim/models/device_components.py:1181 +#: netbox/dcim/models/device_components.py:1181 msgid "Cannot install a device into itself." msgstr "Не вдається встановити пристрій в себе." -#: dcim/models/device_components.py:1189 +#: netbox/dcim/models/device_components.py:1189 #, python-brace-format msgid "" "Cannot install the specified device; device is already installed in {bay}." @@ -5376,112 +5857,114 @@ msgstr "" "Не вдається встановити вказаний пристрій, бо пристрій вже встановлено в " "{bay}." -#: dcim/models/device_components.py:1210 +#: netbox/dcim/models/device_components.py:1210 msgid "inventory item role" msgstr "роль елемента інвентаря" -#: dcim/models/device_components.py:1211 +#: netbox/dcim/models/device_components.py:1211 msgid "inventory item roles" msgstr "ролі елемента інвентаря" -#: dcim/models/device_components.py:1268 dcim/models/devices.py:607 -#: dcim/models/devices.py:1181 dcim/models/racks.py:313 -#: virtualization/models/virtualmachines.py:131 +#: 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 msgid "serial number" msgstr "серійний номер" -#: dcim/models/device_components.py:1276 dcim/models/devices.py:615 -#: dcim/models/devices.py:1188 dcim/models/racks.py:320 +#: 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 msgid "asset tag" msgstr "призначеня мітки" -#: dcim/models/device_components.py:1277 +#: netbox/dcim/models/device_components.py:1277 msgid "A unique tag used to identify this item" msgstr "" "Унікальна мітка, яка використовується для ідентифікації цього елемента" -#: dcim/models/device_components.py:1280 +#: netbox/dcim/models/device_components.py:1280 msgid "discovered" msgstr "виявлено" -#: dcim/models/device_components.py:1282 +#: netbox/dcim/models/device_components.py:1282 msgid "This item was automatically discovered" msgstr "Цей елемент був автоматично виявлений" -#: dcim/models/device_components.py:1300 +#: netbox/dcim/models/device_components.py:1300 msgid "inventory item" msgstr "елемент інвентаря" -#: dcim/models/device_components.py:1301 +#: netbox/dcim/models/device_components.py:1301 msgid "inventory items" msgstr "елементи інвентаря" -#: dcim/models/device_components.py:1312 +#: netbox/dcim/models/device_components.py:1312 msgid "Cannot assign self as parent." msgstr "Не вдається призначити себе батьком." -#: dcim/models/device_components.py:1320 +#: netbox/dcim/models/device_components.py:1320 msgid "Parent inventory item does not belong to the same device." msgstr "Батьківський елемент інвентаря не належить до одного пристрою." -#: dcim/models/device_components.py:1326 +#: netbox/dcim/models/device_components.py:1326 msgid "Cannot move an inventory item with dependent children" msgstr "Не можливо переміщати елемент інвентаря з підпорядкованим елементом" -#: dcim/models/device_components.py:1334 +#: netbox/dcim/models/device_components.py:1334 msgid "Cannot assign inventory item to component on another device" msgstr "Не можливо призначати елемент інвентаря компоненту у іншому пристрої" -#: dcim/models/devices.py:54 +#: netbox/dcim/models/devices.py:54 msgid "manufacturer" msgstr "виробник" -#: dcim/models/devices.py:55 +#: netbox/dcim/models/devices.py:55 msgid "manufacturers" msgstr "виробники" -#: dcim/models/devices.py:82 dcim/models/devices.py:382 -#: dcim/models/racks.py:133 +#: netbox/dcim/models/devices.py:82 netbox/dcim/models/devices.py:382 +#: netbox/dcim/models/racks.py:133 msgid "model" msgstr "модель" -#: dcim/models/devices.py:95 +#: netbox/dcim/models/devices.py:95 msgid "default platform" msgstr "платформа за замовчуванням" -#: dcim/models/devices.py:98 dcim/models/devices.py:386 +#: netbox/dcim/models/devices.py:98 netbox/dcim/models/devices.py:386 msgid "part number" msgstr "номер деталі" -#: dcim/models/devices.py:101 dcim/models/devices.py:389 +#: netbox/dcim/models/devices.py:101 netbox/dcim/models/devices.py:389 msgid "Discrete part number (optional)" msgstr "Дискретний номер деталі (необов'язково)" -#: dcim/models/devices.py:107 dcim/models/racks.py:54 +#: netbox/dcim/models/devices.py:107 netbox/dcim/models/racks.py:54 msgid "height (U)" msgstr "висота (U)" -#: dcim/models/devices.py:111 +#: netbox/dcim/models/devices.py:111 msgid "exclude from utilization" msgstr "виключити з підрахунку утилізації" -#: dcim/models/devices.py:112 +#: netbox/dcim/models/devices.py:112 msgid "Devices of this type are excluded when calculating rack utilization." msgstr "Пристрої такого типу виключаються при підрахунку утилізації стійки." -#: dcim/models/devices.py:116 +#: netbox/dcim/models/devices.py:116 msgid "is full depth" msgstr "є повною глибиною" -#: dcim/models/devices.py:117 +#: netbox/dcim/models/devices.py:117 msgid "Device consumes both front and rear rack faces." msgstr "Пристрій споживає як передні, так і задні грані стійки." -#: dcim/models/devices.py:123 +#: netbox/dcim/models/devices.py:123 msgid "parent/child status" msgstr "статус батька/дитини" -#: dcim/models/devices.py:124 +#: netbox/dcim/models/devices.py:124 msgid "" "Parent devices house child devices in device bays. Leave blank if this " "device type is neither a parent nor a child." @@ -5489,24 +5972,24 @@ msgstr "" "Батьківські пристрої розміщують дочірні пристрої в відсіках пристроїв. " "Залиште порожнім, якщо цей тип пристрою не є ані батьком, ані дитиною." -#: dcim/models/devices.py:128 dcim/models/devices.py:392 -#: dcim/models/devices.py:659 dcim/models/racks.py:324 +#: netbox/dcim/models/devices.py:128 netbox/dcim/models/devices.py:392 +#: netbox/dcim/models/devices.py:659 netbox/dcim/models/racks.py:324 msgid "airflow" msgstr "повітряний потік" -#: dcim/models/devices.py:204 +#: netbox/dcim/models/devices.py:204 msgid "device type" msgstr "тип пристрою" -#: dcim/models/devices.py:205 +#: netbox/dcim/models/devices.py:205 msgid "device types" msgstr "типи пристроїв" -#: dcim/models/devices.py:290 +#: netbox/dcim/models/devices.py:290 msgid "U height must be in increments of 0.5 rack units." msgstr "Висота має зазначатись з точністю до 0,5 юніта." -#: dcim/models/devices.py:307 +#: netbox/dcim/models/devices.py:307 #, python-brace-format msgid "" "Device {device} in rack {rack} does not have sufficient space to accommodate" @@ -5515,7 +5998,7 @@ msgstr "" "В стійці {rack} не має достатньо вільного місця для розміщення " "пристрою{device}висотою {height}юніта" -#: dcim/models/devices.py:322 +#: netbox/dcim/models/devices.py:322 #, python-brace-format msgid "" "Unable to set 0U height: Found {racked_instance_count} " @@ -5524,7 +6007,7 @@ msgstr "" "Не вдалося встановити висоту 0 юніта, бо в стійці вже змонтовано {racked_instance_count} пристроїв." -#: dcim/models/devices.py:331 +#: netbox/dcim/models/devices.py:331 msgid "" "Must delete all device bay templates associated with this device before " "declassifying it as a parent device." @@ -5532,152 +6015,152 @@ msgstr "" "Необхідно видалити всі шаблони відсіків пристроїв, пов'язані з цим " "пристроєм, перш ніж перевизначати його як батьківський пристрій." -#: dcim/models/devices.py:337 +#: netbox/dcim/models/devices.py:337 msgid "Child device types must be 0U." -msgstr "Дитячі типи пристроїв повинні бути висоту 0 юніт." +msgstr "Підпорядковані типи пристроїв повинні бути висоту 0 юніт." -#: dcim/models/devices.py:411 +#: netbox/dcim/models/devices.py:411 msgid "module type" msgstr "тип модуля" -#: dcim/models/devices.py:412 +#: netbox/dcim/models/devices.py:412 msgid "module types" msgstr "типи модулів" -#: dcim/models/devices.py:485 +#: netbox/dcim/models/devices.py:485 msgid "Virtual machines may be assigned to this role" msgstr "Віртуальні машини можуть бути призначені для цієї ролі" -#: dcim/models/devices.py:497 +#: netbox/dcim/models/devices.py:497 msgid "device role" msgstr "роль пристрою" -#: dcim/models/devices.py:498 +#: netbox/dcim/models/devices.py:498 msgid "device roles" msgstr "ролі пристрою" -#: dcim/models/devices.py:515 +#: netbox/dcim/models/devices.py:515 msgid "Optionally limit this platform to devices of a certain manufacturer" msgstr "Опціонально обмежити цю платформу пристроями певного виробника" -#: dcim/models/devices.py:527 +#: netbox/dcim/models/devices.py:527 msgid "platform" msgstr "платформа" -#: dcim/models/devices.py:528 +#: netbox/dcim/models/devices.py:528 msgid "platforms" msgstr "платформи" -#: dcim/models/devices.py:576 +#: netbox/dcim/models/devices.py:576 msgid "The function this device serves" msgstr "Функція, яку виконує цей пристрій" -#: dcim/models/devices.py:608 +#: netbox/dcim/models/devices.py:608 msgid "Chassis serial number, assigned by the manufacturer" msgstr "Серійний номер шасі, наданий виробником" -#: dcim/models/devices.py:616 dcim/models/devices.py:1189 +#: netbox/dcim/models/devices.py:616 netbox/dcim/models/devices.py:1189 msgid "A unique tag used to identify this device" msgstr "" "Унікальна мітка, яка використовується для ідентифікації цього пристрою" -#: dcim/models/devices.py:643 +#: netbox/dcim/models/devices.py:643 msgid "position (U)" msgstr "позиція (юніт)" -#: dcim/models/devices.py:650 +#: netbox/dcim/models/devices.py:650 msgid "rack face" msgstr "лицева частина стійки" -#: dcim/models/devices.py:670 dcim/models/devices.py:1415 -#: virtualization/models/virtualmachines.py:100 +#: netbox/dcim/models/devices.py:670 netbox/dcim/models/devices.py:1420 +#: netbox/virtualization/models/virtualmachines.py:100 msgid "primary IPv4" -msgstr "первинний IPv4" +msgstr "первинна адреса IPv4" -#: dcim/models/devices.py:678 dcim/models/devices.py:1423 -#: virtualization/models/virtualmachines.py:108 +#: netbox/dcim/models/devices.py:678 netbox/dcim/models/devices.py:1428 +#: netbox/virtualization/models/virtualmachines.py:108 msgid "primary IPv6" -msgstr "первинний IPv6" +msgstr "первинна адреса IPv6" -#: dcim/models/devices.py:686 +#: netbox/dcim/models/devices.py:686 msgid "out-of-band IP" msgstr "IP для зовнішнього незалежного керування" -#: dcim/models/devices.py:703 +#: netbox/dcim/models/devices.py:703 msgid "VC position" msgstr "Позиція віртуального шасі" -#: dcim/models/devices.py:706 +#: netbox/dcim/models/devices.py:706 msgid "Virtual chassis position" msgstr "Позиція віртуального шасі" -#: dcim/models/devices.py:709 +#: netbox/dcim/models/devices.py:709 msgid "VC priority" msgstr "Пріоритет віртуального шасі" -#: dcim/models/devices.py:713 +#: netbox/dcim/models/devices.py:713 msgid "Virtual chassis master election priority" msgstr "Пріоритет виборів майстра віртуального шасі" -#: dcim/models/devices.py:716 dcim/models/sites.py:207 +#: netbox/dcim/models/devices.py:716 netbox/dcim/models/sites.py:207 msgid "latitude" msgstr "широта" -#: dcim/models/devices.py:721 dcim/models/devices.py:729 -#: dcim/models/sites.py:212 dcim/models/sites.py:220 +#: netbox/dcim/models/devices.py:721 netbox/dcim/models/devices.py:729 +#: netbox/dcim/models/sites.py:212 netbox/dcim/models/sites.py:220 msgid "GPS coordinate in decimal format (xx.yyyyyy)" msgstr "GPS-координата в десятковому форматі (xx.yyyyyy)" -#: dcim/models/devices.py:724 dcim/models/sites.py:215 +#: netbox/dcim/models/devices.py:724 netbox/dcim/models/sites.py:215 msgid "longitude" msgstr "довгота" -#: dcim/models/devices.py:797 +#: netbox/dcim/models/devices.py:797 msgid "Device name must be unique per site." msgstr "Ім'я пристрою має бути унікальним для кожного тех. майданчика." -#: dcim/models/devices.py:808 ipam/models/services.py:75 +#: netbox/dcim/models/devices.py:808 netbox/ipam/models/services.py:75 msgid "device" msgstr "пристрій" -#: dcim/models/devices.py:809 +#: netbox/dcim/models/devices.py:809 msgid "devices" msgstr "пристрої" -#: dcim/models/devices.py:835 +#: netbox/dcim/models/devices.py:835 #, python-brace-format msgid "Rack {rack} does not belong to site {site}." msgstr "Стійка {rack} не належить до тех. майданчику {site}." -#: dcim/models/devices.py:840 +#: netbox/dcim/models/devices.py:840 #, python-brace-format msgid "Location {location} does not belong to site {site}." -msgstr "Розташування {location} не належить до тех. майданчика{site}." +msgstr "Розташування {location} не належить до тех. майданчика {site}." -#: dcim/models/devices.py:846 +#: netbox/dcim/models/devices.py:846 #, python-brace-format msgid "Rack {rack} does not belong to location {location}." msgstr "Стійка {rack} не належить до місцезнаходження {location}." -#: dcim/models/devices.py:853 +#: netbox/dcim/models/devices.py:853 msgid "Cannot select a rack face without assigning a rack." msgstr "" "Не вдається вибрати лицеву частину стійки без призначення самої стійки." -#: dcim/models/devices.py:857 +#: netbox/dcim/models/devices.py:857 msgid "Cannot select a rack position without assigning a rack." msgstr "Не вдається вибрати положення стійки без призначення самої стійки." -#: dcim/models/devices.py:863 +#: netbox/dcim/models/devices.py:863 msgid "Position must be in increments of 0.5 rack units." msgstr "Положення повинно бути з кроком в 0,5 юніта." -#: dcim/models/devices.py:867 +#: netbox/dcim/models/devices.py:867 msgid "Must specify rack face when defining rack position." msgstr "" "Необхідно вказати лицеву частину стійки при визначенні положення стійки." -#: dcim/models/devices.py:875 +#: netbox/dcim/models/devices.py:875 #, python-brace-format msgid "" "A 0U device type ({device_type}) cannot be assigned to a rack position." @@ -5685,7 +6168,7 @@ msgstr "" "Тип пристрою 0 юніта ({device_type}) не може бути призначений для положення " "стійки." -#: dcim/models/devices.py:886 +#: netbox/dcim/models/devices.py:886 msgid "" "Child device types cannot be assigned to a rack face. This is an attribute " "of the parent device." @@ -5693,7 +6176,7 @@ msgstr "" "Підпорядковані типи пристроїв не можуть бути призначені для лицевої частини " "стійки. Це атрибут батьківського пристрою." -#: dcim/models/devices.py:893 +#: netbox/dcim/models/devices.py:893 msgid "" "Child device types cannot be assigned to a rack position. This is an " "attribute of the parent device." @@ -5701,7 +6184,7 @@ msgstr "" "Підпорядковані типи пристроїв не можуть бути призначені для розміщення у " "стійки. Це атрибут батьківського пристрою." -#: dcim/models/devices.py:907 +#: netbox/dcim/models/devices.py:907 #, python-brace-format msgid "" "U{position} is already occupied or does not have sufficient space to " @@ -5710,22 +6193,22 @@ msgstr "" "Монтажна позиція{position}юніт вже зайнята або не має достатньо вільного " "місця для розміщення цього пристрою: {device_type} ({u_height}юніта)" -#: dcim/models/devices.py:922 +#: netbox/dcim/models/devices.py:922 #, python-brace-format msgid "{ip} is not an IPv4 address." msgstr "{ip} Це не IPv4 адреса." -#: dcim/models/devices.py:931 dcim/models/devices.py:946 +#: netbox/dcim/models/devices.py:931 netbox/dcim/models/devices.py:946 #, python-brace-format msgid "The specified IP address ({ip}) is not assigned to this device." msgstr "Зазначена IP-адреса ({ip}) не призначається до цього пристрою." -#: dcim/models/devices.py:937 +#: netbox/dcim/models/devices.py:937 #, python-brace-format msgid "{ip} is not an IPv6 address." -msgstr "{ip} Це не IPv6 адреса ." +msgstr "{ip} Це не IPv6 адреса." -#: dcim/models/devices.py:964 +#: netbox/dcim/models/devices.py:964 #, python-brace-format msgid "" "The assigned platform is limited to {platform_manufacturer} device types, " @@ -5734,18 +6217,18 @@ msgstr "" "Призначена платформа обмежена {platform_manufacturer} типом пристроїв, але " "цей тип пристрою належить до {devicetype_manufacturer}." -#: dcim/models/devices.py:975 +#: netbox/dcim/models/devices.py:975 #, python-brace-format msgid "The assigned cluster belongs to a different site ({site})" msgstr "Призначений кластер належить іншому тех. майданчику ({site})" -#: dcim/models/devices.py:983 +#: netbox/dcim/models/devices.py:983 msgid "A device assigned to a virtual chassis must have its position defined." msgstr "" "Для пристрія, призначеного для віртуального шасі, повинно бути задане " "положення." -#: dcim/models/devices.py:988 +#: netbox/dcim/models/devices.py:988 #, python-brace-format msgid "" "Device cannot be removed from virtual chassis {virtual_chassis} because it " @@ -5754,15 +6237,15 @@ msgstr "" "Пристрій неможливо видалити з віртуального шасі {virtual_chassis} тому, що в" " даний час він призначений майстром." -#: dcim/models/devices.py:1196 +#: netbox/dcim/models/devices.py:1196 msgid "module" msgstr "модуль" -#: dcim/models/devices.py:1197 +#: netbox/dcim/models/devices.py:1197 msgid "modules" msgstr "модулі" -#: dcim/models/devices.py:1213 +#: netbox/dcim/models/devices.py:1213 #, python-brace-format msgid "" "Module must be installed within a module bay belonging to the assigned " @@ -5771,21 +6254,21 @@ msgstr "" "Модуль повинен бути встановлений у відсіку модуля, що належить призначеному " "пристрою ({device})." -#: dcim/models/devices.py:1334 +#: netbox/dcim/models/devices.py:1339 msgid "domain" msgstr "домен" -#: dcim/models/devices.py:1347 dcim/models/devices.py:1348 +#: netbox/dcim/models/devices.py:1352 netbox/dcim/models/devices.py:1353 msgid "virtual chassis" msgstr "віртуальні шасі" -#: dcim/models/devices.py:1363 +#: netbox/dcim/models/devices.py:1368 #, python-brace-format msgid "" "The selected master ({master}) is not assigned to this virtual chassis." msgstr "Обраний майстер ({master}) не присвоюється цьому віртуальному шасі." -#: dcim/models/devices.py:1379 +#: netbox/dcim/models/devices.py:1384 #, python-brace-format msgid "" "Unable to delete virtual chassis {self}. There are member interfaces which " @@ -5794,61 +6277,61 @@ msgstr "" "Неможливо видалити віртуальне шасі {self}. Існують мережеві інтерфейси, які " "утворюють інтерфейси LAG між шасі." -#: dcim/models/devices.py:1404 vpn/models/l2vpn.py:37 +#: netbox/dcim/models/devices.py:1409 netbox/vpn/models/l2vpn.py:37 msgid "identifier" msgstr "ідентифікатор" -#: dcim/models/devices.py:1405 +#: netbox/dcim/models/devices.py:1410 msgid "Numeric identifier unique to the parent device" msgstr "Числовий ідентифікатор, унікальний для батьківського пристрою" -#: dcim/models/devices.py:1433 extras/models/customfields.py:225 -#: extras/models/models.py:107 extras/models/models.py:694 -#: netbox/models/__init__.py:115 +#: 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:115 msgid "comments" msgstr "коментарі" -#: dcim/models/devices.py:1449 +#: netbox/dcim/models/devices.py:1454 msgid "virtual device context" msgstr "контекст віртуального пристрою" -#: dcim/models/devices.py:1450 +#: netbox/dcim/models/devices.py:1455 msgid "virtual device contexts" msgstr "контексти віртуальних пристроїв" -#: dcim/models/devices.py:1482 +#: netbox/dcim/models/devices.py:1487 #, python-brace-format msgid "{ip} is not an IPv{family} address." -msgstr "{ip} не є IPv{family} адресой." +msgstr "{ip} не є IPv{family} адресою." -#: dcim/models/devices.py:1488 +#: netbox/dcim/models/devices.py:1493 msgid "Primary IP address must belong to an interface on the assigned device." msgstr "" "Первинна IP-адреса повинна належати інтерфейсу на призначеному пристрої." -#: dcim/models/mixins.py:15 extras/models/configs.py:41 -#: extras/models/models.py:313 extras/models/models.py:522 -#: extras/models/search.py:48 ipam/models/ip.py:194 +#: netbox/dcim/models/mixins.py:15 netbox/extras/models/configs.py:41 +#: netbox/extras/models/models.py:313 netbox/extras/models/models.py:522 +#: netbox/extras/models/search.py:48 netbox/ipam/models/ip.py:194 msgid "weight" msgstr "вага" -#: dcim/models/mixins.py:22 +#: netbox/dcim/models/mixins.py:22 msgid "weight unit" msgstr "одиниця ваги" -#: dcim/models/mixins.py:51 +#: netbox/dcim/models/mixins.py:51 msgid "Must specify a unit when setting a weight" msgstr "Необхідно вказати одиницю виміру при установці ваги" -#: dcim/models/power.py:55 +#: netbox/dcim/models/power.py:55 msgid "power panel" msgstr "панель живлення" -#: dcim/models/power.py:56 +#: netbox/dcim/models/power.py:56 msgid "power panels" msgstr "панелі живлення" -#: dcim/models/power.py:70 +#: netbox/dcim/models/power.py:70 #, python-brace-format msgid "" "Location {location} ({location_site}) is in a different site than {site}" @@ -5856,43 +6339,43 @@ msgstr "" "Розташування {location} ({location_site}) знаходиться на іншому тех. " "майданчику, ніж {site}" -#: dcim/models/power.py:108 +#: netbox/dcim/models/power.py:108 msgid "supply" msgstr "постачання" -#: dcim/models/power.py:114 +#: netbox/dcim/models/power.py:114 msgid "phase" msgstr "фаза" -#: dcim/models/power.py:120 +#: netbox/dcim/models/power.py:120 msgid "voltage" msgstr "напруга" -#: dcim/models/power.py:125 +#: netbox/dcim/models/power.py:125 msgid "amperage" msgstr "сила струму" -#: dcim/models/power.py:130 +#: netbox/dcim/models/power.py:130 msgid "max utilization" msgstr "максимальне використання" -#: dcim/models/power.py:133 +#: netbox/dcim/models/power.py:133 msgid "Maximum permissible draw (percentage)" msgstr "Максимальна допустима потужність (відсоток)" -#: dcim/models/power.py:136 +#: netbox/dcim/models/power.py:136 msgid "available power" msgstr "доступна потужність" -#: dcim/models/power.py:164 +#: netbox/dcim/models/power.py:164 msgid "power feed" msgstr "подача живлення" -#: dcim/models/power.py:165 +#: netbox/dcim/models/power.py:165 msgid "power feeds" msgstr "подачі живлення" -#: dcim/models/power.py:179 +#: netbox/dcim/models/power.py:179 #, python-brace-format msgid "" "Rack {rack} ({rack_site}) and power panel {powerpanel} ({powerpanel_site}) " @@ -5901,63 +6384,63 @@ msgstr "" "Стійка {rack} ({rack_site}) та панель живлення {powerpanel} " "({powerpanel_site}) знаходяться на різних тех. майданчиках." -#: dcim/models/power.py:190 +#: netbox/dcim/models/power.py:190 msgid "Voltage cannot be negative for AC supply" msgstr "Напруга не може бути негативною для живлення змінного струму" -#: dcim/models/racks.py:47 +#: netbox/dcim/models/racks.py:47 msgid "width" msgstr "ширина" -#: dcim/models/racks.py:48 +#: netbox/dcim/models/racks.py:48 msgid "Rail-to-rail width" msgstr "Ширина рейки до рейки" -#: dcim/models/racks.py:56 +#: netbox/dcim/models/racks.py:56 msgid "Height in rack units" msgstr "Висота стійки у юнітах" -#: dcim/models/racks.py:60 +#: netbox/dcim/models/racks.py:60 msgid "starting unit" msgstr "начальний юніт" -#: dcim/models/racks.py:62 +#: netbox/dcim/models/racks.py:62 msgid "Starting unit for rack" msgstr "Начальний юніт для стійки" -#: dcim/models/racks.py:66 +#: netbox/dcim/models/racks.py:66 msgid "descending units" msgstr "юніти у низхідному порядку" -#: dcim/models/racks.py:67 +#: netbox/dcim/models/racks.py:67 msgid "Units are numbered top-to-bottom" msgstr "Юніти нумеруються зверху вниз" -#: dcim/models/racks.py:72 +#: netbox/dcim/models/racks.py:72 msgid "outer width" msgstr "зовнішня ширина" -#: dcim/models/racks.py:75 +#: netbox/dcim/models/racks.py:75 msgid "Outer dimension of rack (width)" msgstr "Зовнішній розмір стійки (ширина)" -#: dcim/models/racks.py:78 +#: netbox/dcim/models/racks.py:78 msgid "outer depth" msgstr "зовнішня глибина" -#: dcim/models/racks.py:81 +#: netbox/dcim/models/racks.py:81 msgid "Outer dimension of rack (depth)" msgstr "Зовнішній розмір стійки (глибина)" -#: dcim/models/racks.py:84 +#: netbox/dcim/models/racks.py:84 msgid "outer unit" msgstr "зовнішній блок" -#: dcim/models/racks.py:90 +#: netbox/dcim/models/racks.py:90 msgid "mounting depth" msgstr "монтажна глибина" -#: dcim/models/racks.py:94 +#: netbox/dcim/models/racks.py:94 msgid "" "Maximum depth of a mounted device, in millimeters. For four-post racks, this" " is the distance between the front and rear rails." @@ -5965,77 +6448,78 @@ msgstr "" "Максимальна глибина змонтованого пристрою, в міліметрах. Для чотиристійкових" " стійок це відстань між передньою і задньою рейками." -#: dcim/models/racks.py:102 +#: netbox/dcim/models/racks.py:102 msgid "max weight" msgstr "макс. вага" -#: dcim/models/racks.py:105 +#: netbox/dcim/models/racks.py:105 msgid "Maximum load capacity for the rack" msgstr "Максимальна вантажопідйомність для стійки" -#: dcim/models/racks.py:125 dcim/models/racks.py:252 +#: netbox/dcim/models/racks.py:125 netbox/dcim/models/racks.py:252 msgid "form factor" msgstr "форм-фактор" -#: dcim/models/racks.py:162 +#: netbox/dcim/models/racks.py:162 msgid "rack type" msgstr "тип стійки" -#: dcim/models/racks.py:163 +#: netbox/dcim/models/racks.py:163 msgid "rack types" msgstr "типи стійки" -#: dcim/models/racks.py:180 dcim/models/racks.py:379 +#: netbox/dcim/models/racks.py:180 netbox/dcim/models/racks.py:379 msgid "Must specify a unit when setting an outer width/depth" msgstr "" "Необхідно вказати одиницю виміру при встановленні зовнішньої ширини/глибини" -#: dcim/models/racks.py:184 dcim/models/racks.py:383 +#: netbox/dcim/models/racks.py:184 netbox/dcim/models/racks.py:383 msgid "Must specify a unit when setting a maximum weight" msgstr "Необхідно вказати одиницю виміру при встановленні максимальної ваги" -#: dcim/models/racks.py:230 +#: netbox/dcim/models/racks.py:230 msgid "rack role" msgstr "роль стійки" -#: dcim/models/racks.py:231 +#: netbox/dcim/models/racks.py:231 msgid "rack roles" msgstr "ролі стійки" -#: dcim/models/racks.py:274 +#: netbox/dcim/models/racks.py:274 msgid "facility ID" msgstr "Ідентифікатор об'єкта" -#: dcim/models/racks.py:275 +#: netbox/dcim/models/racks.py:275 msgid "Locally-assigned identifier" msgstr "Локально призначений ідентифікатор" -#: dcim/models/racks.py:308 ipam/forms/bulk_import.py:201 -#: ipam/forms/bulk_import.py:266 ipam/forms/bulk_import.py:301 -#: ipam/forms/bulk_import.py:459 virtualization/forms/bulk_import.py:112 +#: 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 msgid "Functional role" msgstr "Функціональна роль" -#: dcim/models/racks.py:321 +#: netbox/dcim/models/racks.py:321 msgid "A unique tag used to identify this rack" msgstr "Унікальна мітка, який використовується для ідентифікації цієї стійки" -#: dcim/models/racks.py:359 +#: netbox/dcim/models/racks.py:359 msgid "rack" msgstr "стійка" -#: dcim/models/racks.py:360 +#: netbox/dcim/models/racks.py:360 msgid "racks" msgstr "стійки" -#: dcim/models/racks.py:375 +#: netbox/dcim/models/racks.py:375 #, python-brace-format msgid "Assigned location must belong to parent site ({site})." msgstr "" "Призначене місце розташування повинно належати батьківському тех. майданчику" " ({site})." -#: dcim/models/racks.py:393 +#: netbox/dcim/models/racks.py:393 #, python-brace-format msgid "" "Rack must be at least {min_height}U tall to house currently installed " @@ -6044,7 +6528,7 @@ msgstr "" "Стійка має бути не нижча, ніж {min_height}юніт, щоб місця було достатньо для" " розміщення вже встановлених пристроїв." -#: dcim/models/racks.py:400 +#: netbox/dcim/models/racks.py:400 #, python-brace-format msgid "" "Rack unit numbering must begin at {position} or less to house currently " @@ -6053,897 +6537,960 @@ msgstr "" "Нумерація стійок повинна починатися з {position} або не менше для розміщення" " встановлених на даний момент пристроїв." -#: dcim/models/racks.py:408 +#: netbox/dcim/models/racks.py:408 #, python-brace-format msgid "Location must be from the same site, {site}." msgstr "Розташування повинно бути з одного і того ж тех. майданчика, {site}." -#: dcim/models/racks.py:670 +#: netbox/dcim/models/racks.py:670 msgid "units" msgstr "юнітів" -#: dcim/models/racks.py:696 +#: netbox/dcim/models/racks.py:696 msgid "rack reservation" msgstr "резервування стійки" -#: dcim/models/racks.py:697 +#: netbox/dcim/models/racks.py:697 msgid "rack reservations" msgstr "бронювання стійки" -#: dcim/models/racks.py:714 +#: netbox/dcim/models/racks.py:714 #, python-brace-format msgid "Invalid unit(s) for {height}U rack: {unit_list}" -msgstr "Недійсне монтажне місце для стійки висотою{height}юнітів: {unit_list}" +msgstr "" +"Недійсне монтажне місце для стійки висотою {height} юнітів: {unit_list}" -#: dcim/models/racks.py:727 +#: netbox/dcim/models/racks.py:727 #, python-brace-format msgid "The following units have already been reserved: {unit_list}" msgstr "Наступні юніти вже зарезервовані: {unit_list}" -#: dcim/models/sites.py:49 +#: netbox/dcim/models/sites.py:49 msgid "A top-level region with this name already exists." msgstr "Регіон верхнього рівня з такою назвою вже існує." -#: dcim/models/sites.py:59 +#: netbox/dcim/models/sites.py:59 msgid "A top-level region with this slug already exists." -msgstr "Регіон верхнього рівня з цим слимаком вже існує." +msgstr "Регіон верхнього рівня з цим скореченням вже існує." -#: dcim/models/sites.py:62 +#: netbox/dcim/models/sites.py:62 msgid "region" msgstr "регіон" -#: dcim/models/sites.py:63 +#: netbox/dcim/models/sites.py:63 msgid "regions" msgstr "регіони" -#: dcim/models/sites.py:102 +#: netbox/dcim/models/sites.py:102 msgid "A top-level site group with this name already exists." msgstr "Група тех. майданчиків верхнього рівня з такою назвою вже існує." -#: dcim/models/sites.py:112 +#: netbox/dcim/models/sites.py:112 msgid "A top-level site group with this slug already exists." -msgstr "Група тех. майданчиків верхнього рівня з цим слимаком вже існує." +msgstr "Група тех. майданчиків верхнього рівня з цим скореченням вже існує." -#: dcim/models/sites.py:115 +#: netbox/dcim/models/sites.py:115 msgid "site group" msgstr "група тех. майданчиків" -#: dcim/models/sites.py:116 +#: netbox/dcim/models/sites.py:116 msgid "site groups" msgstr "групи тех. майданчиків" -#: dcim/models/sites.py:141 +#: netbox/dcim/models/sites.py:141 msgid "Full name of the site" msgstr "Повна назва тех. майданчику" -#: dcim/models/sites.py:181 dcim/models/sites.py:279 +#: netbox/dcim/models/sites.py:181 netbox/dcim/models/sites.py:279 msgid "facility" msgstr "об'єкт" -#: dcim/models/sites.py:184 dcim/models/sites.py:282 +#: netbox/dcim/models/sites.py:184 netbox/dcim/models/sites.py:282 msgid "Local facility ID or description" msgstr "Ідентифікатор або опис місцевого об'єкта" -#: dcim/models/sites.py:195 +#: netbox/dcim/models/sites.py:195 msgid "physical address" msgstr "фізична адреса" -#: dcim/models/sites.py:198 +#: netbox/dcim/models/sites.py:198 msgid "Physical location of the building" msgstr "Фізичне розташування будівлі" -#: dcim/models/sites.py:201 +#: netbox/dcim/models/sites.py:201 msgid "shipping address" msgstr "адреса доставки" -#: dcim/models/sites.py:204 +#: netbox/dcim/models/sites.py:204 msgid "If different from the physical address" msgstr "Якщо відрізняється від фізичної адреси" -#: dcim/models/sites.py:238 +#: netbox/dcim/models/sites.py:238 msgid "site" msgstr "тех. майданчик" -#: dcim/models/sites.py:239 +#: netbox/dcim/models/sites.py:239 msgid "sites" msgstr "тех. майданчики" -#: dcim/models/sites.py:309 +#: netbox/dcim/models/sites.py:309 msgid "A location with this name already exists within the specified site." msgstr "" "Місцезнаходження з цим ім'ям вже існує в межах зазначеного тех. майданчика." -#: dcim/models/sites.py:319 +#: netbox/dcim/models/sites.py:319 msgid "A location with this slug already exists within the specified site." msgstr "" "Місцезнаходження з цим скороченням вже існує в межах зазначеного тех. " "майданчику." -#: dcim/models/sites.py:322 +#: netbox/dcim/models/sites.py:322 msgid "location" msgstr "локація" -#: dcim/models/sites.py:323 +#: netbox/dcim/models/sites.py:323 msgid "locations" msgstr "локації" -#: dcim/models/sites.py:337 +#: netbox/dcim/models/sites.py:337 #, python-brace-format msgid "Parent location ({parent}) must belong to the same site ({site})." msgstr "" "Батьківське місцезнаходження ({parent}) повинні належати одному тех. " "майданчику ({site})." -#: dcim/tables/cables.py:55 +#: netbox/dcim/tables/cables.py:55 msgid "Termination A" -msgstr "Припинення А" +msgstr "Кінець А" -#: dcim/tables/cables.py:60 +#: netbox/dcim/tables/cables.py:60 msgid "Termination B" -msgstr "Припинення Б" +msgstr "Кінець Б" -#: dcim/tables/cables.py:66 wireless/tables/wirelesslink.py:23 +#: netbox/dcim/tables/cables.py:66 netbox/wireless/tables/wirelesslink.py:23 msgid "Device A" msgstr "Пристрій А" -#: dcim/tables/cables.py:72 wireless/tables/wirelesslink.py:32 +#: netbox/dcim/tables/cables.py:72 netbox/wireless/tables/wirelesslink.py:32 msgid "Device B" msgstr "Пристрій Б" -#: dcim/tables/cables.py:78 +#: netbox/dcim/tables/cables.py:78 msgid "Location A" msgstr "Місцезнаходження A" -#: dcim/tables/cables.py:84 +#: netbox/dcim/tables/cables.py:84 msgid "Location B" msgstr "Місцезнаходження Б" -#: dcim/tables/cables.py:90 +#: netbox/dcim/tables/cables.py:90 msgid "Rack A" msgstr "Стійка А" -#: dcim/tables/cables.py:96 +#: netbox/dcim/tables/cables.py:96 msgid "Rack B" msgstr "Стійка Б" -#: dcim/tables/cables.py:102 +#: netbox/dcim/tables/cables.py:102 msgid "Site A" msgstr "Тех. майданчик А" -#: dcim/tables/cables.py:108 +#: netbox/dcim/tables/cables.py:108 msgid "Site B" msgstr "Тех. майданчик Б" -#: dcim/tables/connections.py:31 dcim/tables/connections.py:50 -#: dcim/tables/connections.py:71 -#: templates/dcim/inc/connection_endpoints.html:16 +#: netbox/dcim/tables/connections.py:31 netbox/dcim/tables/connections.py:50 +#: netbox/dcim/tables/connections.py:71 +#: netbox/templates/dcim/inc/connection_endpoints.html:16 msgid "Reachable" msgstr "Доступний" -#: dcim/tables/devices.py:58 dcim/tables/devices.py:106 -#: dcim/tables/racks.py:150 dcim/tables/sites.py:105 dcim/tables/sites.py:148 -#: extras/tables/tables.py:545 netbox/navigation/menu.py:69 -#: netbox/navigation/menu.py:73 netbox/navigation/menu.py:75 -#: virtualization/forms/model_forms.py:122 -#: virtualization/tables/clusters.py:83 virtualization/views.py:206 +#: 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/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 msgid "Devices" msgstr "Пристрої" -#: dcim/tables/devices.py:63 dcim/tables/devices.py:111 -#: virtualization/tables/clusters.py:88 +#: netbox/dcim/tables/devices.py:63 netbox/dcim/tables/devices.py:111 +#: netbox/virtualization/tables/clusters.py:88 msgid "VMs" -msgstr "віртуальні машини" +msgstr "Віртуальні машини" -#: dcim/tables/devices.py:100 dcim/tables/devices.py:216 -#: extras/forms/model_forms.py:630 templates/dcim/device.html:112 -#: templates/dcim/device/render_config.html:11 -#: templates/dcim/device/render_config.html:14 -#: templates/dcim/devicerole.html:44 templates/dcim/platform.html:41 -#: templates/extras/configtemplate.html:10 -#: templates/virtualization/virtualmachine.html:48 -#: templates/virtualization/virtualmachine/render_config.html:11 -#: templates/virtualization/virtualmachine/render_config.html:14 -#: virtualization/tables/virtualmachines.py:107 +#: netbox/dcim/tables/devices.py:100 netbox/dcim/tables/devices.py:216 +#: 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/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 msgid "Config Template" msgstr "Шаблон конфігурації" -#: dcim/tables/devices.py:150 templates/dcim/sitegroup.html:26 +#: netbox/dcim/tables/devices.py:150 netbox/templates/dcim/sitegroup.html:26 msgid "Site Group" msgstr "Група тех. майданчиків" -#: dcim/tables/devices.py:187 dcim/tables/devices.py:1068 -#: ipam/forms/bulk_import.py:503 ipam/forms/model_forms.py:306 -#: ipam/forms/model_forms.py:315 ipam/tables/ip.py:356 ipam/tables/ip.py:423 -#: ipam/tables/ip.py:446 templates/ipam/ipaddress.html:11 -#: virtualization/tables/virtualmachines.py:95 +#: 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/templates/ipam/ipaddress.html:11 +#: netbox/virtualization/tables/virtualmachines.py:95 msgid "IP Address" msgstr "IP-адреса" -#: dcim/tables/devices.py:191 dcim/tables/devices.py:1072 -#: virtualization/tables/virtualmachines.py:86 +#: netbox/dcim/tables/devices.py:191 netbox/dcim/tables/devices.py:1072 +#: netbox/virtualization/tables/virtualmachines.py:86 msgid "IPv4 Address" msgstr "Адреса IPv4" -#: dcim/tables/devices.py:195 dcim/tables/devices.py:1076 -#: virtualization/tables/virtualmachines.py:90 +#: netbox/dcim/tables/devices.py:195 netbox/dcim/tables/devices.py:1076 +#: netbox/virtualization/tables/virtualmachines.py:90 msgid "IPv6 Address" msgstr "Адреса IPv6" -#: dcim/tables/devices.py:210 +#: netbox/dcim/tables/devices.py:210 msgid "VC Position" msgstr "Позиція віртуальної шасі" -#: dcim/tables/devices.py:213 +#: netbox/dcim/tables/devices.py:213 msgid "VC Priority" msgstr "Пріоритет віртуальної шасі" -#: dcim/tables/devices.py:220 templates/dcim/device_edit.html:38 -#: templates/dcim/devicebay_populate.html:16 +#: netbox/dcim/tables/devices.py:220 netbox/templates/dcim/device_edit.html:38 +#: netbox/templates/dcim/devicebay_populate.html:16 msgid "Parent Device" msgstr "Батьківський пристрій" -#: dcim/tables/devices.py:225 +#: netbox/dcim/tables/devices.py:225 msgid "Position (Device Bay)" msgstr "Позиція (відсік пристрою)" -#: dcim/tables/devices.py:234 +#: netbox/dcim/tables/devices.py:234 msgid "Console ports" msgstr "Консольні порти" -#: dcim/tables/devices.py:237 +#: netbox/dcim/tables/devices.py:237 msgid "Console server ports" msgstr "Порти консольного сервера" -#: dcim/tables/devices.py:240 +#: netbox/dcim/tables/devices.py:240 msgid "Power ports" msgstr "Порти живлення" -#: dcim/tables/devices.py:243 +#: netbox/dcim/tables/devices.py:243 msgid "Power outlets" msgstr "Розетки" -#: dcim/tables/devices.py:246 dcim/tables/devices.py:1081 -#: dcim/tables/devicetypes.py:128 dcim/views.py:1042 dcim/views.py:1281 -#: dcim/views.py:1977 netbox/navigation/menu.py:94 -#: netbox/navigation/menu.py:250 templates/dcim/device/base.html:37 -#: templates/dcim/device_list.html:43 templates/dcim/devicetype/base.html:34 -#: templates/dcim/inc/moduletype_buttons.html:25 templates/dcim/module.html:34 -#: templates/dcim/virtualdevicecontext.html:61 -#: templates/dcim/virtualdevicecontext.html:81 -#: templates/virtualization/virtualmachine/base.html:27 -#: templates/virtualization/virtualmachine_list.html:14 -#: virtualization/tables/virtualmachines.py:101 virtualization/views.py:366 -#: wireless/tables/wirelesslan.py:55 +#: 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/templates/dcim/device/base.html:37 +#: netbox/templates/dcim/device_list.html:43 +#: netbox/templates/dcim/devicetype/base.html:34 +#: netbox/templates/dcim/inc/moduletype_buttons.html:25 +#: netbox/templates/dcim/module.html:34 +#: netbox/templates/dcim/virtualdevicecontext.html:61 +#: netbox/templates/dcim/virtualdevicecontext.html:81 +#: netbox/templates/virtualization/virtualmachine/base.html:27 +#: netbox/templates/virtualization/virtualmachine_list.html:14 +#: netbox/virtualization/tables/virtualmachines.py:101 +#: netbox/virtualization/views.py:364 netbox/wireless/tables/wirelesslan.py:55 msgid "Interfaces" msgstr "Інтерфейси" -#: dcim/tables/devices.py:249 +#: netbox/dcim/tables/devices.py:249 msgid "Front ports" msgstr "Передні порти" -#: dcim/tables/devices.py:255 +#: netbox/dcim/tables/devices.py:255 msgid "Device bays" msgstr "Відсіки для пристроїв" -#: dcim/tables/devices.py:258 +#: netbox/dcim/tables/devices.py:258 msgid "Module bays" msgstr "Модульні відсіки" -#: dcim/tables/devices.py:261 +#: netbox/dcim/tables/devices.py:261 msgid "Inventory items" msgstr "Елементи інвентаря" -#: dcim/tables/devices.py:305 dcim/tables/modules.py:56 -#: templates/dcim/modulebay.html:17 +#: netbox/dcim/tables/devices.py:305 netbox/dcim/tables/modules.py:56 +#: netbox/templates/dcim/modulebay.html:17 msgid "Module Bay" msgstr "Резервуар модулів" -#: dcim/tables/devices.py:318 dcim/tables/devicetypes.py:47 -#: dcim/tables/devicetypes.py:143 dcim/views.py:1117 dcim/views.py:2075 -#: netbox/navigation/menu.py:103 templates/dcim/device/base.html:52 -#: templates/dcim/device_list.html:71 templates/dcim/devicetype/base.html:49 -#: templates/dcim/inc/panels/inventory_items.html:6 -#: templates/dcim/inventoryitemrole.html:32 +#: netbox/dcim/tables/devices.py:318 netbox/dcim/tables/devicetypes.py:47 +#: netbox/dcim/tables/devicetypes.py:143 netbox/dcim/views.py:1115 +#: netbox/dcim/views.py:2073 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 +#: netbox/templates/dcim/inc/panels/inventory_items.html:6 +#: netbox/templates/dcim/inventoryitemrole.html:32 msgid "Inventory Items" msgstr "Елементи інвентаря" -#: dcim/tables/devices.py:333 +#: netbox/dcim/tables/devices.py:333 msgid "Cable Color" msgstr "Колір кабелю" -#: dcim/tables/devices.py:339 +#: netbox/dcim/tables/devices.py:339 msgid "Link Peers" msgstr "З'єднання мережевих сусідів" -#: dcim/tables/devices.py:342 +#: netbox/dcim/tables/devices.py:342 msgid "Mark Connected" msgstr "Позначене підключення" -#: dcim/tables/devices.py:461 +#: netbox/dcim/tables/devices.py:461 msgid "Maximum draw (W)" -msgstr "Максимальна потужність (W)" +msgstr "Максимальна потужність (Вт)" -#: dcim/tables/devices.py:464 +#: netbox/dcim/tables/devices.py:464 msgid "Allocated draw (W)" -msgstr "Виділена потужність (W)" +msgstr "Виділена потужність (Вт)" -#: dcim/tables/devices.py:558 ipam/forms/model_forms.py:701 -#: ipam/tables/fhrp.py:28 ipam/views.py:596 ipam/views.py:696 -#: netbox/navigation/menu.py:158 netbox/navigation/menu.py:160 -#: templates/dcim/interface.html:339 templates/ipam/ipaddress_bulk_add.html:15 -#: templates/ipam/service.html:40 templates/virtualization/vminterface.html:85 -#: vpn/tables/tunnels.py:98 +#: netbox/dcim/tables/devices.py:558 netbox/ipam/forms/model_forms.py: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/templates/ipam/ipaddress_bulk_add.html:15 +#: netbox/templates/ipam/service.html:40 +#: netbox/templates/virtualization/vminterface.html:85 +#: netbox/vpn/tables/tunnels.py:98 msgid "IP Addresses" msgstr "IP-адреси" -#: dcim/tables/devices.py:564 netbox/navigation/menu.py:202 -#: templates/ipam/inc/panels/fhrp_groups.html:6 +#: netbox/dcim/tables/devices.py:564 netbox/netbox/navigation/menu.py:202 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:6 msgid "FHRP Groups" msgstr "Групи FHRP/VRRP" -#: dcim/tables/devices.py:576 templates/dcim/interface.html:89 -#: templates/virtualization/vminterface.html:67 templates/vpn/tunnel.html:18 -#: templates/vpn/tunneltermination.html:13 vpn/forms/bulk_edit.py:76 -#: vpn/forms/bulk_import.py:76 vpn/forms/filtersets.py:42 -#: vpn/forms/filtersets.py:82 vpn/forms/model_forms.py:60 -#: vpn/forms/model_forms.py:145 vpn/tables/tunnels.py:78 +#: netbox/dcim/tables/devices.py:576 netbox/templates/dcim/interface.html:89 +#: netbox/templates/virtualization/vminterface.html:67 +#: netbox/templates/vpn/tunnel.html:18 +#: netbox/templates/vpn/tunneltermination.html:13 +#: netbox/vpn/forms/bulk_edit.py:76 netbox/vpn/forms/bulk_import.py:76 +#: netbox/vpn/forms/filtersets.py:42 netbox/vpn/forms/filtersets.py:82 +#: netbox/vpn/forms/model_forms.py:60 netbox/vpn/forms/model_forms.py:145 +#: netbox/vpn/tables/tunnels.py:78 msgid "Tunnel" msgstr "Тунель" -#: dcim/tables/devices.py:604 dcim/tables/devicetypes.py:227 -#: templates/dcim/interface.html:65 +#: netbox/dcim/tables/devices.py:604 netbox/dcim/tables/devicetypes.py:227 +#: netbox/templates/dcim/interface.html:65 msgid "Management Only" msgstr "Тільки управління" -#: dcim/tables/devices.py:623 +#: netbox/dcim/tables/devices.py:623 msgid "VDCs" -msgstr "Джерела живлення постійного струму " +msgstr "Джерела живлення постійного струму" -#: dcim/tables/devices.py:873 templates/dcim/modulebay.html:53 +#: netbox/dcim/tables/devices.py:873 netbox/templates/dcim/modulebay.html:53 msgid "Installed Module" msgstr "Встановлений модуль" -#: dcim/tables/devices.py:876 +#: netbox/dcim/tables/devices.py:876 msgid "Module Serial" -msgstr "Послідовний модуль " +msgstr "Послідовний модуль" -#: dcim/tables/devices.py:880 +#: netbox/dcim/tables/devices.py:880 msgid "Module Asset Tag" msgstr "Призначеня мітки на модуль" -#: dcim/tables/devices.py:889 +#: netbox/dcim/tables/devices.py:889 msgid "Module Status" msgstr "Статус модуля" -#: dcim/tables/devices.py:944 dcim/tables/devicetypes.py:312 -#: templates/dcim/inventoryitem.html:40 +#: netbox/dcim/tables/devices.py:944 netbox/dcim/tables/devicetypes.py:312 +#: netbox/templates/dcim/inventoryitem.html:40 msgid "Component" msgstr "Компонент" -#: dcim/tables/devices.py:1000 +#: netbox/dcim/tables/devices.py:1000 msgid "Items" msgstr "Предмети" -#: dcim/tables/devicetypes.py:37 netbox/navigation/menu.py:84 -#: netbox/navigation/menu.py:86 +#: netbox/dcim/tables/devicetypes.py:37 netbox/netbox/navigation/menu.py:84 +#: netbox/netbox/navigation/menu.py:86 msgid "Device Types" msgstr "Типи пристроїв" -#: dcim/tables/devicetypes.py:42 netbox/navigation/menu.py:87 +#: netbox/dcim/tables/devicetypes.py:42 netbox/netbox/navigation/menu.py:87 msgid "Module Types" msgstr "Типи модулів" -#: dcim/tables/devicetypes.py:52 extras/forms/filtersets.py:371 -#: extras/forms/model_forms.py:537 extras/tables/tables.py:540 -#: netbox/navigation/menu.py:78 +#: 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/netbox/navigation/menu.py:78 msgid "Platforms" msgstr "Платформи" -#: dcim/tables/devicetypes.py:84 templates/dcim/devicetype.html:29 +#: netbox/dcim/tables/devicetypes.py:84 +#: netbox/templates/dcim/devicetype.html:29 msgid "Default Platform" msgstr "Платформа за замовчуванням" -#: dcim/tables/devicetypes.py:88 templates/dcim/devicetype.html:45 +#: netbox/dcim/tables/devicetypes.py:88 +#: netbox/templates/dcim/devicetype.html:45 msgid "Full Depth" msgstr "Повна глибина" -#: dcim/tables/devicetypes.py:98 +#: netbox/dcim/tables/devicetypes.py:98 msgid "U Height" -msgstr "Висота юніта" +msgstr "Висота юніта(U)" -#: dcim/tables/devicetypes.py:113 dcim/tables/modules.py:26 -#: dcim/tables/racks.py:89 +#: netbox/dcim/tables/devicetypes.py:113 netbox/dcim/tables/modules.py:26 +#: netbox/dcim/tables/racks.py:89 msgid "Instances" msgstr "Екземпляри" -#: dcim/tables/devicetypes.py:116 dcim/views.py:982 dcim/views.py:1221 -#: dcim/views.py:1913 netbox/navigation/menu.py:97 -#: templates/dcim/device/base.html:25 templates/dcim/device_list.html:15 -#: templates/dcim/devicetype/base.html:22 -#: templates/dcim/inc/moduletype_buttons.html:13 templates/dcim/module.html:22 +#: netbox/dcim/tables/devicetypes.py:116 netbox/dcim/views.py:980 +#: netbox/dcim/views.py:1219 netbox/dcim/views.py:1911 +#: netbox/netbox/navigation/menu.py:97 +#: netbox/templates/dcim/device/base.html:25 +#: netbox/templates/dcim/device_list.html:15 +#: netbox/templates/dcim/devicetype/base.html:22 +#: netbox/templates/dcim/inc/moduletype_buttons.html:13 +#: netbox/templates/dcim/module.html:22 msgid "Console Ports" msgstr "Консольні порти" -#: dcim/tables/devicetypes.py:119 dcim/views.py:997 dcim/views.py:1236 -#: dcim/views.py:1929 netbox/navigation/menu.py:98 -#: templates/dcim/device/base.html:28 templates/dcim/device_list.html:22 -#: templates/dcim/devicetype/base.html:25 -#: templates/dcim/inc/moduletype_buttons.html:16 templates/dcim/module.html:25 +#: netbox/dcim/tables/devicetypes.py:119 netbox/dcim/views.py:995 +#: netbox/dcim/views.py:1234 netbox/dcim/views.py:1927 +#: netbox/netbox/navigation/menu.py:98 +#: netbox/templates/dcim/device/base.html:28 +#: netbox/templates/dcim/device_list.html:22 +#: netbox/templates/dcim/devicetype/base.html:25 +#: netbox/templates/dcim/inc/moduletype_buttons.html:16 +#: netbox/templates/dcim/module.html:25 msgid "Console Server Ports" msgstr "Порти консольного сервера" -#: dcim/tables/devicetypes.py:122 dcim/views.py:1012 dcim/views.py:1251 -#: dcim/views.py:1945 netbox/navigation/menu.py:99 -#: templates/dcim/device/base.html:31 templates/dcim/device_list.html:29 -#: templates/dcim/devicetype/base.html:28 -#: templates/dcim/inc/moduletype_buttons.html:19 templates/dcim/module.html:28 +#: netbox/dcim/tables/devicetypes.py:122 netbox/dcim/views.py:1010 +#: netbox/dcim/views.py:1249 netbox/dcim/views.py:1943 +#: netbox/netbox/navigation/menu.py:99 +#: netbox/templates/dcim/device/base.html:31 +#: netbox/templates/dcim/device_list.html:29 +#: netbox/templates/dcim/devicetype/base.html:28 +#: netbox/templates/dcim/inc/moduletype_buttons.html:19 +#: netbox/templates/dcim/module.html:28 msgid "Power Ports" msgstr "Порти живлення" -#: dcim/tables/devicetypes.py:125 dcim/views.py:1027 dcim/views.py:1266 -#: dcim/views.py:1961 netbox/navigation/menu.py:100 -#: templates/dcim/device/base.html:34 templates/dcim/device_list.html:36 -#: templates/dcim/devicetype/base.html:31 -#: templates/dcim/inc/moduletype_buttons.html:22 templates/dcim/module.html:31 +#: netbox/dcim/tables/devicetypes.py:125 netbox/dcim/views.py:1025 +#: netbox/dcim/views.py:1264 netbox/dcim/views.py:1959 +#: netbox/netbox/navigation/menu.py:100 +#: netbox/templates/dcim/device/base.html:34 +#: netbox/templates/dcim/device_list.html:36 +#: netbox/templates/dcim/devicetype/base.html:31 +#: netbox/templates/dcim/inc/moduletype_buttons.html:22 +#: netbox/templates/dcim/module.html:31 msgid "Power Outlets" msgstr "Розетки" -#: dcim/tables/devicetypes.py:131 dcim/views.py:1057 dcim/views.py:1296 -#: dcim/views.py:1999 netbox/navigation/menu.py:95 -#: templates/dcim/device/base.html:40 templates/dcim/devicetype/base.html:37 -#: templates/dcim/inc/moduletype_buttons.html:28 templates/dcim/module.html:37 +#: netbox/dcim/tables/devicetypes.py:131 netbox/dcim/views.py:1055 +#: netbox/dcim/views.py:1294 netbox/dcim/views.py:1997 +#: netbox/netbox/navigation/menu.py:95 +#: netbox/templates/dcim/device/base.html:40 +#: netbox/templates/dcim/devicetype/base.html:37 +#: netbox/templates/dcim/inc/moduletype_buttons.html:28 +#: netbox/templates/dcim/module.html:37 msgid "Front Ports" msgstr "Передні порти" -#: dcim/tables/devicetypes.py:134 dcim/views.py:1072 dcim/views.py:1311 -#: dcim/views.py:2015 netbox/navigation/menu.py:96 -#: templates/dcim/device/base.html:43 templates/dcim/device_list.html:50 -#: templates/dcim/devicetype/base.html:40 -#: templates/dcim/inc/moduletype_buttons.html:31 templates/dcim/module.html:40 +#: netbox/dcim/tables/devicetypes.py:134 netbox/dcim/views.py:1070 +#: netbox/dcim/views.py:1309 netbox/dcim/views.py:2013 +#: netbox/netbox/navigation/menu.py:96 +#: netbox/templates/dcim/device/base.html:43 +#: netbox/templates/dcim/device_list.html:50 +#: netbox/templates/dcim/devicetype/base.html:40 +#: netbox/templates/dcim/inc/moduletype_buttons.html:31 +#: netbox/templates/dcim/module.html:40 msgid "Rear Ports" msgstr "Задні порти" -#: dcim/tables/devicetypes.py:137 dcim/views.py:1102 dcim/views.py:2055 -#: netbox/navigation/menu.py:102 templates/dcim/device/base.html:49 -#: templates/dcim/device_list.html:57 templates/dcim/devicetype/base.html:46 +#: netbox/dcim/tables/devicetypes.py:137 netbox/dcim/views.py:1100 +#: netbox/dcim/views.py:2053 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 "Відсіки для пристроїв" -#: dcim/tables/devicetypes.py:140 dcim/views.py:1087 dcim/views.py:1326 -#: dcim/views.py:2035 netbox/navigation/menu.py:101 -#: templates/dcim/device/base.html:46 templates/dcim/device_list.html:64 -#: templates/dcim/devicetype/base.html:43 -#: templates/dcim/inc/moduletype_buttons.html:34 templates/dcim/module.html:43 +#: netbox/dcim/tables/devicetypes.py:140 netbox/dcim/views.py:1085 +#: netbox/dcim/views.py:1324 netbox/dcim/views.py:2033 +#: netbox/netbox/navigation/menu.py:101 +#: netbox/templates/dcim/device/base.html:46 +#: netbox/templates/dcim/device_list.html:64 +#: netbox/templates/dcim/devicetype/base.html:43 +#: netbox/templates/dcim/inc/moduletype_buttons.html:34 +#: netbox/templates/dcim/module.html:43 msgid "Module Bays" msgstr "Модульні відсіки" -#: dcim/tables/power.py:36 netbox/navigation/menu.py:297 -#: templates/dcim/powerpanel.html:51 +#: netbox/dcim/tables/power.py:36 netbox/netbox/navigation/menu.py:297 +#: netbox/templates/dcim/powerpanel.html:51 msgid "Power Feeds" msgstr "Подачі живлення" -#: dcim/tables/power.py:80 templates/dcim/powerfeed.html:99 +#: netbox/dcim/tables/power.py:80 netbox/templates/dcim/powerfeed.html:99 msgid "Max Utilization" msgstr "Максимальне використання (живлення)" -#: dcim/tables/power.py:84 +#: netbox/dcim/tables/power.py:84 msgid "Available Power (VA)" msgstr "Доступна потужність (ВА)" -#: dcim/tables/racks.py:30 dcim/tables/sites.py:143 -#: netbox/navigation/menu.py:43 netbox/navigation/menu.py:47 -#: netbox/navigation/menu.py:49 +#: netbox/dcim/tables/racks.py:30 netbox/dcim/tables/sites.py:143 +#: netbox/netbox/navigation/menu.py:43 netbox/netbox/navigation/menu.py:47 +#: netbox/netbox/navigation/menu.py:49 msgid "Racks" msgstr "Стійки" -#: dcim/tables/racks.py:63 dcim/tables/racks.py:142 -#: templates/dcim/device.html:318 -#: templates/dcim/inc/panels/racktype_dimensions.html:14 +#: netbox/dcim/tables/racks.py:63 netbox/dcim/tables/racks.py:142 +#: netbox/templates/dcim/device.html:318 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:14 msgid "Height" msgstr "Висота" -#: dcim/tables/racks.py:67 dcim/tables/racks.py:165 -#: templates/dcim/inc/panels/racktype_dimensions.html:18 +#: netbox/dcim/tables/racks.py:67 netbox/dcim/tables/racks.py:165 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:18 msgid "Outer Width" msgstr "Зовнішня ширина" -#: dcim/tables/racks.py:71 dcim/tables/racks.py:169 -#: templates/dcim/inc/panels/racktype_dimensions.html:28 +#: netbox/dcim/tables/racks.py:71 netbox/dcim/tables/racks.py:169 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:28 msgid "Outer Depth" msgstr "Зовнішня глибина" -#: dcim/tables/racks.py:79 dcim/tables/racks.py:177 +#: netbox/dcim/tables/racks.py:79 netbox/dcim/tables/racks.py:177 msgid "Max Weight" msgstr "Максимальна вага" -#: dcim/tables/racks.py:154 +#: netbox/dcim/tables/racks.py:154 msgid "Space" msgstr "Простір" -#: dcim/tables/sites.py:30 dcim/tables/sites.py:57 -#: extras/forms/filtersets.py:351 extras/forms/model_forms.py:517 -#: ipam/forms/bulk_edit.py:131 ipam/forms/model_forms.py:153 -#: ipam/tables/asn.py:66 netbox/navigation/menu.py:15 -#: netbox/navigation/menu.py:17 +#: netbox/dcim/tables/sites.py:30 netbox/dcim/tables/sites.py:57 +#: netbox/extras/forms/filtersets.py: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/netbox/navigation/menu.py:15 netbox/netbox/navigation/menu.py:17 msgid "Sites" msgstr "Тех. майданчики" -#: dcim/tests/test_api.py:47 +#: netbox/dcim/tests/test_api.py:47 msgid "Test case must set peer_termination_type" msgstr "Тестовий випадок повинен встановити peer_termination_type" -#: dcim/views.py:140 +#: netbox/dcim/views.py:138 #, python-brace-format msgid "Disconnected {count} {type}" msgstr "Відключено {count} {type}" -#: dcim/views.py:740 netbox/navigation/menu.py:51 +#: netbox/dcim/views.py:738 netbox/netbox/navigation/menu.py:51 msgid "Reservations" msgstr "Бронювання" -#: dcim/views.py:759 templates/dcim/location.html:90 -#: templates/dcim/site.html:140 +#: netbox/dcim/views.py:757 netbox/templates/dcim/location.html:90 +#: netbox/templates/dcim/site.html:140 msgid "Non-Racked Devices" msgstr "Пристрої без можливості кріплення у стійку" -#: dcim/views.py:2088 extras/forms/model_forms.py:577 -#: templates/extras/configcontext.html:10 -#: virtualization/forms/model_forms.py:225 virtualization/views.py:407 +#: netbox/dcim/views.py:2086 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 msgid "Config Context" msgstr "Контекст конфігурації" -#: dcim/views.py:2098 virtualization/views.py:417 +#: netbox/dcim/views.py:2096 netbox/virtualization/views.py:415 msgid "Render Config" -msgstr "Відтворювати конфігурацію" +msgstr "Відтворення конфігурації" -#: dcim/views.py:2131 virtualization/views.py:450 +#: netbox/dcim/views.py:2131 netbox/virtualization/views.py:450 #, python-brace-format msgid "An error occurred while rendering the template: {error}" msgstr "Під час візуалізації шаблону сталася помилка: {error}" -#: dcim/views.py:2149 extras/tables/tables.py:550 -#: netbox/navigation/menu.py:247 netbox/navigation/menu.py:249 -#: virtualization/views.py:180 +#: 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 msgid "Virtual Machines" msgstr "Віртуальні машини" -#: dcim/views.py:2897 +#: netbox/dcim/views.py:2907 #, python-brace-format msgid "Installed device {device} in bay {device_bay}." msgstr "Встановлений пристрій {device} в бухті {device_bay}." -#: dcim/views.py:2938 +#: netbox/dcim/views.py:2948 #, python-brace-format msgid "Removed device {device} from bay {device_bay}." msgstr "Видалений пристрій {device} з бухти {device_bay}." -#: dcim/views.py:3044 ipam/tables/ip.py:234 +#: netbox/dcim/views.py:3054 netbox/ipam/tables/ip.py:234 msgid "Children" msgstr "Підпорядкований" -#: dcim/views.py:3510 +#: netbox/dcim/views.py:3520 #, python-brace-format msgid "Added member {device}" msgstr "Доданий член {device}" -#: dcim/views.py:3557 +#: netbox/dcim/views.py:3567 #, python-brace-format msgid "Unable to remove master device {device} from the virtual chassis." msgstr "Неможливо видалити головний пристрій {device} від віртуального шасі." -#: dcim/views.py:3570 +#: netbox/dcim/views.py:3580 #, python-brace-format msgid "Removed {device} from virtual chassis {chassis}" msgstr "Вилучено {device} з віртуального шасі {chassis}" -#: extras/api/customfields.py:89 +#: netbox/extras/api/customfields.py:89 #, python-brace-format msgid "Unknown related object(s): {name}" msgstr "Невідомий пов'язаний об'єкт(и): {name}" -#: extras/api/serializers_/customfields.py:73 +#: netbox/extras/api/serializers_/customfields.py:73 msgid "Changing the type of custom fields is not supported." msgstr "Зміна типу призначених для користувача полів не підтримується." -#: extras/api/serializers_/scripts.py:70 extras/api/serializers_/scripts.py:75 +#: netbox/extras/api/serializers_/scripts.py:70 +#: netbox/extras/api/serializers_/scripts.py:75 msgid "Scheduling is not enabled for this script." msgstr "Планування не ввімкнено для цього сценарію." -#: extras/choices.py:30 extras/forms/misc.py:14 +#: netbox/extras/choices.py:30 netbox/extras/forms/misc.py:14 msgid "Text" msgstr "Текст" -#: extras/choices.py:31 +#: netbox/extras/choices.py:31 msgid "Text (long)" msgstr "Текст (довгий)" -#: extras/choices.py:32 +#: netbox/extras/choices.py:32 msgid "Integer" msgstr "Ціле число" -#: extras/choices.py:33 +#: netbox/extras/choices.py:33 msgid "Decimal" msgstr "Десяткове число" -#: extras/choices.py:34 +#: netbox/extras/choices.py:34 msgid "Boolean (true/false)" -msgstr "Булевий тип (істинна/хибна)" +msgstr "Булевий тип (правда/неправда)" -#: extras/choices.py:35 +#: netbox/extras/choices.py:35 msgid "Date" msgstr "Дата" -#: extras/choices.py:36 +#: netbox/extras/choices.py:36 msgid "Date & time" msgstr "Дата та час" -#: extras/choices.py:38 +#: netbox/extras/choices.py:38 msgid "JSON" msgstr "JSON" -#: extras/choices.py:39 +#: netbox/extras/choices.py:39 msgid "Selection" msgstr "Вибір" -#: extras/choices.py:40 +#: netbox/extras/choices.py:40 msgid "Multiple selection" msgstr "Множинний вибір" -#: extras/choices.py:42 +#: netbox/extras/choices.py:42 msgid "Multiple objects" msgstr "Кілька об'єктів" -#: extras/choices.py:53 netbox/preferences.py:21 -#: templates/extras/customfield.html:78 vpn/choices.py:20 -#: wireless/choices.py:27 +#: netbox/extras/choices.py:53 netbox/netbox/preferences.py:21 +#: netbox/templates/extras/customfield.html:78 netbox/vpn/choices.py:20 +#: netbox/wireless/choices.py:27 msgid "Disabled" msgstr "Вимкнений" -#: extras/choices.py:54 +#: netbox/extras/choices.py:54 msgid "Loose" msgstr "Пухкий" -#: extras/choices.py:55 +#: netbox/extras/choices.py:55 msgid "Exact" msgstr "Точний" -#: extras/choices.py:66 +#: netbox/extras/choices.py:66 msgid "Always" msgstr "Завжди" -#: extras/choices.py:67 +#: netbox/extras/choices.py:67 msgid "If set" msgstr "Якщо встановлено" -#: extras/choices.py:68 extras/choices.py:81 +#: netbox/extras/choices.py:68 netbox/extras/choices.py:81 msgid "Hidden" msgstr "Прихований" -#: extras/choices.py:79 +#: netbox/extras/choices.py:79 msgid "Yes" msgstr "Так" -#: extras/choices.py:80 +#: netbox/extras/choices.py:80 msgid "No" msgstr "Ні" -#: extras/choices.py:108 templates/tenancy/contact.html:57 -#: tenancy/forms/bulk_edit.py:118 wireless/forms/model_forms.py:168 +#: 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 msgid "Link" msgstr "Посилання" -#: extras/choices.py:124 +#: netbox/extras/choices.py:124 msgid "Newest" msgstr "Найновіші" -#: extras/choices.py:125 +#: netbox/extras/choices.py:125 msgid "Oldest" msgstr "Найстаріший" -#: extras/choices.py:126 +#: netbox/extras/choices.py:126 msgid "Alphabetical (A-Z)" msgstr "Зростання за алфавітом (A-Z)" -#: extras/choices.py:127 +#: netbox/extras/choices.py:127 msgid "Alphabetical (Z-A)" msgstr "Спадання за алфавітом (Z-A)" -#: extras/choices.py:144 extras/choices.py:167 +#: netbox/extras/choices.py:144 netbox/extras/choices.py:167 msgid "Info" msgstr "Інформація" -#: extras/choices.py:145 extras/choices.py:168 +#: netbox/extras/choices.py:145 netbox/extras/choices.py:168 msgid "Success" msgstr "Успіх" -#: extras/choices.py:146 extras/choices.py:169 +#: netbox/extras/choices.py:146 netbox/extras/choices.py:169 msgid "Warning" msgstr "Попередження" -#: extras/choices.py:147 +#: netbox/extras/choices.py:147 msgid "Danger" msgstr "Небезпека" -#: extras/choices.py:165 +#: netbox/extras/choices.py:165 msgid "Debug" msgstr "Налагодження" -#: extras/choices.py:166 netbox/choices.py:101 +#: netbox/extras/choices.py:166 netbox/netbox/choices.py:101 msgid "Default" msgstr "За замовчуванням" -#: extras/choices.py:170 +#: netbox/extras/choices.py:170 msgid "Failure" msgstr "Невдача" -#: extras/choices.py:186 +#: netbox/extras/choices.py:186 msgid "Hourly" msgstr "Погодинно" -#: extras/choices.py:187 +#: netbox/extras/choices.py:187 msgid "12 hours" msgstr "12 годин" -#: extras/choices.py:188 +#: netbox/extras/choices.py:188 msgid "Daily" msgstr "Щодня" -#: extras/choices.py:189 +#: netbox/extras/choices.py:189 msgid "Weekly" msgstr "Щотижневий" -#: extras/choices.py:190 +#: netbox/extras/choices.py:190 msgid "30 days" msgstr "30 днів" -#: extras/choices.py:226 templates/dcim/virtualchassis_edit.html:107 -#: templates/generic/bulk_add_component.html:68 -#: templates/generic/object_edit.html:47 templates/generic/object_edit.html:80 -#: templates/ipam/inc/ipaddress_edit_header.html:7 +#: netbox/extras/choices.py:226 +#: 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/ipam/inc/ipaddress_edit_header.html:7 msgid "Create" msgstr "Створити" -#: extras/choices.py:227 +#: netbox/extras/choices.py:227 msgid "Update" msgstr "Оновити" -#: extras/choices.py:228 templates/circuits/inc/circuit_termination.html:23 -#: templates/dcim/inc/panels/inventory_items.html:37 -#: templates/dcim/powerpanel.html:66 templates/extras/script_list.html:35 -#: templates/generic/bulk_delete.html:20 templates/generic/bulk_delete.html:66 -#: templates/generic/object_delete.html:19 templates/htmx/delete_form.html:57 -#: templates/ipam/inc/panels/fhrp_groups.html:48 -#: templates/users/objectpermission.html:46 -#: utilities/templates/buttons/delete.html:11 +#: netbox/extras/choices.py:228 +#: netbox/templates/circuits/inc/circuit_termination.html:23 +#: netbox/templates/dcim/inc/panels/inventory_items.html:37 +#: netbox/templates/dcim/powerpanel.html:66 +#: netbox/templates/extras/script_list.html:35 +#: netbox/templates/generic/bulk_delete.html:20 +#: netbox/templates/generic/bulk_delete.html:66 +#: netbox/templates/generic/object_delete.html:19 +#: netbox/templates/htmx/delete_form.html:57 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:48 +#: netbox/templates/users/objectpermission.html:46 +#: netbox/utilities/templates/buttons/delete.html:11 msgid "Delete" msgstr "Видалити" -#: extras/choices.py:252 netbox/choices.py:57 netbox/choices.py:102 +#: netbox/extras/choices.py:252 netbox/netbox/choices.py:57 +#: netbox/netbox/choices.py:102 msgid "Blue" msgstr "Синій" -#: extras/choices.py:253 netbox/choices.py:56 netbox/choices.py:103 +#: netbox/extras/choices.py:253 netbox/netbox/choices.py:56 +#: netbox/netbox/choices.py:103 msgid "Indigo" msgstr "Індиго" -#: extras/choices.py:254 netbox/choices.py:54 netbox/choices.py:104 +#: netbox/extras/choices.py:254 netbox/netbox/choices.py:54 +#: netbox/netbox/choices.py:104 msgid "Purple" msgstr "Фіолетовий" -#: extras/choices.py:255 netbox/choices.py:51 netbox/choices.py:105 +#: netbox/extras/choices.py:255 netbox/netbox/choices.py:51 +#: netbox/netbox/choices.py:105 msgid "Pink" msgstr "Рожевий" -#: extras/choices.py:256 netbox/choices.py:50 netbox/choices.py:106 +#: netbox/extras/choices.py:256 netbox/netbox/choices.py:50 +#: netbox/netbox/choices.py:106 msgid "Red" msgstr "Червоний" -#: extras/choices.py:257 netbox/choices.py:68 netbox/choices.py:107 +#: netbox/extras/choices.py:257 netbox/netbox/choices.py:68 +#: netbox/netbox/choices.py:107 msgid "Orange" msgstr "Помаранчевий" -#: extras/choices.py:258 netbox/choices.py:66 netbox/choices.py:108 +#: netbox/extras/choices.py:258 netbox/netbox/choices.py:66 +#: netbox/netbox/choices.py:108 msgid "Yellow" msgstr "Жовтий" -#: extras/choices.py:259 netbox/choices.py:63 netbox/choices.py:109 +#: netbox/extras/choices.py:259 netbox/netbox/choices.py:63 +#: netbox/netbox/choices.py:109 msgid "Green" msgstr "Зелений" -#: extras/choices.py:260 netbox/choices.py:60 netbox/choices.py:110 +#: netbox/extras/choices.py:260 netbox/netbox/choices.py:60 +#: netbox/netbox/choices.py:110 msgid "Teal" msgstr "Бірюзовий" -#: extras/choices.py:261 netbox/choices.py:59 netbox/choices.py:111 +#: netbox/extras/choices.py:261 netbox/netbox/choices.py:59 +#: netbox/netbox/choices.py:111 msgid "Cyan" msgstr "Блакитний" -#: extras/choices.py:262 netbox/choices.py:112 +#: netbox/extras/choices.py:262 netbox/netbox/choices.py:112 msgid "Gray" msgstr "Сірий" -#: extras/choices.py:263 netbox/choices.py:74 netbox/choices.py:113 +#: netbox/extras/choices.py:263 netbox/netbox/choices.py:74 +#: netbox/netbox/choices.py:113 msgid "Black" msgstr "Чорний" -#: extras/choices.py:264 netbox/choices.py:75 netbox/choices.py:114 +#: netbox/extras/choices.py:264 netbox/netbox/choices.py:75 +#: netbox/netbox/choices.py:114 msgid "White" msgstr "Білий" -#: extras/choices.py:279 extras/forms/model_forms.py:353 -#: extras/forms/model_forms.py:430 templates/extras/webhook.html:10 +#: netbox/extras/choices.py:279 netbox/extras/forms/model_forms.py:353 +#: netbox/extras/forms/model_forms.py:430 +#: netbox/templates/extras/webhook.html:10 msgid "Webhook" msgstr "Веб-хук" -#: extras/choices.py:280 extras/forms/model_forms.py:418 -#: templates/extras/script/base.html:29 +#: netbox/extras/choices.py:280 netbox/extras/forms/model_forms.py:418 +#: netbox/templates/extras/script/base.html:29 msgid "Script" msgstr "Сценарій" -#: extras/choices.py:281 +#: netbox/extras/choices.py:281 msgid "Notification" msgstr "Повідомлення" -#: extras/conditions.py:54 +#: netbox/extras/conditions.py:54 #, python-brace-format msgid "Unknown operator: {op}. Must be one of: {operators}" msgstr "Невідомий оператор: {op}. Повинен бути один з: {operators}" -#: extras/conditions.py:58 +#: netbox/extras/conditions.py:58 #, python-brace-format msgid "Unsupported value type: {value}" msgstr "Тип значення, що не підтримується: {value}" -#: extras/conditions.py:60 +#: netbox/extras/conditions.py:60 #, python-brace-format msgid "Invalid type for {op} operation: {value}" msgstr "Невірний тип для {op} операції: {value}" -#: extras/conditions.py:137 +#: netbox/extras/conditions.py:137 #, python-brace-format msgid "Ruleset must be a dictionary, not {ruleset}." msgstr "Набір правил повинен бути словником, а не {ruleset}." -#: extras/conditions.py:142 +#: netbox/extras/conditions.py:142 msgid "Invalid logic type: must be 'AND' or 'OR'. Please check documentation." msgstr "" "Невірний тип логіки: має бути 'ТАК' або 'АБО'. Будь ласка, перевірте " "документацію." -#: extras/conditions.py:154 +#: netbox/extras/conditions.py:154 msgid "Incorrect key(s) informed. Please check documentation." msgstr "" "Поінформовано про неправильний ключ(і). Будь ласка, перевірте документацію." -#: extras/dashboard/forms.py:38 +#: netbox/extras/dashboard/forms.py:38 msgid "Widget type" msgstr "Тип віджету" -#: extras/dashboard/utils.py:36 +#: netbox/extras/dashboard/utils.py:36 #, python-brace-format msgid "Unregistered widget class: {name}" msgstr "Незареєстрований клас віджетів: {name}" -#: extras/dashboard/widgets.py:125 +#: netbox/extras/dashboard/widgets.py:125 #, python-brace-format msgid "{class_name} must define a render() method." msgstr "{class_name} повинен визначити метод render()." -#: extras/dashboard/widgets.py:144 +#: netbox/extras/dashboard/widgets.py:144 msgid "Note" msgstr "Примітка" -#: extras/dashboard/widgets.py:145 +#: netbox/extras/dashboard/widgets.py:145 msgid "Display some arbitrary custom content. Markdown is supported." msgstr "" "Відображення будь-якого довільного користувацького вмісту. Підтримується " "розмітка Markdown." -#: extras/dashboard/widgets.py:158 +#: netbox/extras/dashboard/widgets.py:158 msgid "Object Counts" msgstr "Кількість об'єктів" -#: extras/dashboard/widgets.py:159 +#: netbox/extras/dashboard/widgets.py:159 msgid "" "Display a set of NetBox models and the number of objects created for each " "type." @@ -6951,453 +7498,492 @@ msgstr "" "Відображення набору моделей NetBox та кількості об'єктів, створених для " "кожного типу." -#: extras/dashboard/widgets.py:169 +#: netbox/extras/dashboard/widgets.py:169 msgid "Filters to apply when counting the number of objects" msgstr "Фільтри, які застосовуються при підрахунку кількості об'єктів" -#: extras/dashboard/widgets.py:177 +#: netbox/extras/dashboard/widgets.py:177 msgid "Invalid format. Object filters must be passed as a dictionary." msgstr "Невірний формат. Фільтри об'єктів повинні бути передані як словник." -#: extras/dashboard/widgets.py:208 +#: netbox/extras/dashboard/widgets.py:208 msgid "Object List" msgstr "Список об'єктів" -#: extras/dashboard/widgets.py:209 +#: netbox/extras/dashboard/widgets.py:209 msgid "Display an arbitrary list of objects." msgstr "Відображення довільного списку об'єктів." -#: extras/dashboard/widgets.py:222 +#: netbox/extras/dashboard/widgets.py:222 msgid "The default number of objects to display" -msgstr "Типова кількість об'єктів для відображення" +msgstr "Кількість об'єктів за замовченням для відображення" -#: extras/dashboard/widgets.py:234 +#: netbox/extras/dashboard/widgets.py:234 msgid "Invalid format. URL parameters must be passed as a dictionary." msgstr "" "Невірний формат. Параметри URL-адреси повинні бути передані як словник." -#: extras/dashboard/widgets.py:274 +#: netbox/extras/dashboard/widgets.py:274 msgid "RSS Feed" msgstr "RSS-канал" -#: extras/dashboard/widgets.py:279 +#: netbox/extras/dashboard/widgets.py:279 msgid "Embed an RSS feed from an external website." msgstr "Вбудовувати RSS-канал із зовнішнього веб-сайту." -#: extras/dashboard/widgets.py:286 +#: netbox/extras/dashboard/widgets.py:286 msgid "Feed URL" msgstr "URL-адреса каналу" -#: extras/dashboard/widgets.py:291 +#: netbox/extras/dashboard/widgets.py:291 msgid "The maximum number of objects to display" msgstr "Максимальна кількість об'єктів для відображення" -#: extras/dashboard/widgets.py:296 +#: netbox/extras/dashboard/widgets.py:296 msgid "How long to stored the cached content (in seconds)" msgstr "Як довго зберігати кешований вміст (в секундах)" -#: extras/dashboard/widgets.py:348 templates/account/base.html:10 -#: templates/account/bookmarks.html:7 templates/inc/user_menu.html:48 +#: netbox/extras/dashboard/widgets.py:348 +#: netbox/templates/account/base.html:10 +#: netbox/templates/account/bookmarks.html:7 +#: netbox/templates/inc/user_menu.html:48 msgid "Bookmarks" msgstr "Закладки" -#: extras/dashboard/widgets.py:352 +#: netbox/extras/dashboard/widgets.py:352 msgid "Show your personal bookmarks" msgstr "Показувати особисті закладки" -#: extras/events.py:147 +#: netbox/extras/events.py:147 #, python-brace-format msgid "Unknown action type for an event rule: {action_type}" msgstr "Невідомий тип дії для правила події: {action_type}" -#: extras/events.py:192 +#: netbox/extras/events.py:192 #, python-brace-format msgid "Cannot import events pipeline {name} error: {error}" msgstr "Не вдається імпортувати конвеєр подій {name} Помилка: {error}" -#: extras/filtersets.py:45 +#: netbox/extras/filtersets.py:45 msgid "Script module (ID)" msgstr "Модуль сценарію (ідентифікатор)" -#: extras/filtersets.py:254 extras/filtersets.py:637 extras/filtersets.py:665 +#: netbox/extras/filtersets.py:254 netbox/extras/filtersets.py:637 +#: netbox/extras/filtersets.py:665 msgid "Data file (ID)" msgstr "Файл даних (ідентифікатор)" -#: extras/filtersets.py:370 users/filtersets.py:68 users/filtersets.py:191 +#: netbox/extras/filtersets.py:370 netbox/users/filtersets.py:68 +#: netbox/users/filtersets.py:191 msgid "Group (name)" msgstr "Група (назва)" -#: extras/filtersets.py:574 virtualization/forms/filtersets.py:118 +#: netbox/extras/filtersets.py:574 +#: netbox/virtualization/forms/filtersets.py:118 msgid "Cluster type" msgstr "Тип кластера" -#: extras/filtersets.py:580 virtualization/filtersets.py:95 -#: virtualization/filtersets.py:147 +#: netbox/extras/filtersets.py:580 netbox/virtualization/filtersets.py:95 +#: netbox/virtualization/filtersets.py:147 msgid "Cluster type (slug)" -msgstr "Кластерний тип (скоречення)" +msgstr "Кластерний тип (скорочення)" -#: extras/filtersets.py:601 tenancy/forms/forms.py:16 -#: tenancy/forms/forms.py:39 +#: netbox/extras/filtersets.py:601 netbox/tenancy/forms/forms.py:16 +#: netbox/tenancy/forms/forms.py:39 msgid "Tenant group" msgstr "Група орендарів" -#: extras/filtersets.py:607 tenancy/filtersets.py:188 -#: tenancy/filtersets.py:208 +#: netbox/extras/filtersets.py:607 netbox/tenancy/filtersets.py:188 +#: netbox/tenancy/filtersets.py:208 msgid "Tenant group (slug)" -msgstr "Група орендарів (скоречення)" +msgstr "Група орендарів (скорочення)" -#: extras/filtersets.py:623 extras/forms/model_forms.py:495 -#: templates/extras/tag.html:11 +#: netbox/extras/filtersets.py:623 netbox/extras/forms/model_forms.py:495 +#: netbox/templates/extras/tag.html:11 msgid "Tag" msgstr "Мітка" -#: extras/filtersets.py:629 +#: netbox/extras/filtersets.py:629 msgid "Tag (slug)" -msgstr "Мітка (скоречення)" +msgstr "Мітка (скорочення)" -#: extras/filtersets.py:689 extras/forms/filtersets.py:429 +#: netbox/extras/filtersets.py:689 netbox/extras/forms/filtersets.py:429 msgid "Has local config context data" msgstr "Має локальні контекстні дані конфігурації" -#: extras/forms/bulk_edit.py:35 extras/forms/filtersets.py:60 +#: netbox/extras/forms/bulk_edit.py:35 netbox/extras/forms/filtersets.py:60 msgid "Group name" msgstr "Назва групи" -#: extras/forms/bulk_edit.py:43 extras/forms/filtersets.py:68 -#: extras/tables/tables.py:65 templates/extras/customfield.html:38 -#: templates/generic/bulk_import.html:118 +#: netbox/extras/forms/bulk_edit.py:43 netbox/extras/forms/filtersets.py:68 +#: netbox/extras/tables/tables.py:65 +#: netbox/templates/extras/customfield.html:38 +#: netbox/templates/generic/bulk_import.html:118 msgid "Required" msgstr "Обов'язково" -#: extras/forms/bulk_edit.py:48 extras/forms/filtersets.py:75 +#: netbox/extras/forms/bulk_edit.py:48 netbox/extras/forms/filtersets.py:75 msgid "Must be unique" msgstr "Повинен бути унікальним" -#: extras/forms/bulk_edit.py:61 extras/forms/bulk_import.py:60 -#: extras/forms/filtersets.py:89 extras/models/customfields.py:209 +#: netbox/extras/forms/bulk_edit.py:61 netbox/extras/forms/bulk_import.py:60 +#: netbox/extras/forms/filtersets.py:89 +#: netbox/extras/models/customfields.py:209 msgid "UI visible" msgstr "Видимий інтерфейс користувача" -#: extras/forms/bulk_edit.py:66 extras/forms/bulk_import.py:66 -#: extras/forms/filtersets.py:94 extras/models/customfields.py:216 +#: netbox/extras/forms/bulk_edit.py:66 netbox/extras/forms/bulk_import.py:66 +#: netbox/extras/forms/filtersets.py:94 +#: netbox/extras/models/customfields.py:216 msgid "UI editable" -msgstr "Редагований інтерфейс користувача " +msgstr "Редагований інтерфейс користувача" -#: extras/forms/bulk_edit.py:71 extras/forms/filtersets.py:97 +#: netbox/extras/forms/bulk_edit.py:71 netbox/extras/forms/filtersets.py:97 msgid "Is cloneable" msgstr "Чи можна клонувати" -#: extras/forms/bulk_edit.py:76 extras/forms/filtersets.py:104 +#: netbox/extras/forms/bulk_edit.py:76 netbox/extras/forms/filtersets.py:104 msgid "Minimum value" msgstr "Мінімальне значення" -#: extras/forms/bulk_edit.py:80 extras/forms/filtersets.py:108 +#: netbox/extras/forms/bulk_edit.py:80 netbox/extras/forms/filtersets.py:108 msgid "Maximum value" msgstr "Максимальне значення" -#: extras/forms/bulk_edit.py:84 extras/forms/filtersets.py:112 +#: netbox/extras/forms/bulk_edit.py:84 netbox/extras/forms/filtersets.py:112 msgid "Validation regex" msgstr "Регулярний вираз перевірки" -#: extras/forms/bulk_edit.py:91 extras/forms/filtersets.py:46 -#: extras/forms/model_forms.py:76 templates/extras/customfield.html:70 +#: netbox/extras/forms/bulk_edit.py:91 netbox/extras/forms/filtersets.py:46 +#: netbox/extras/forms/model_forms.py:76 +#: netbox/templates/extras/customfield.html:70 msgid "Behavior" msgstr "Поведінка" -#: extras/forms/bulk_edit.py:128 extras/forms/filtersets.py:149 +#: netbox/extras/forms/bulk_edit.py:128 netbox/extras/forms/filtersets.py:149 msgid "New window" msgstr "Нове вікно" -#: extras/forms/bulk_edit.py:137 +#: netbox/extras/forms/bulk_edit.py:137 msgid "Button class" msgstr "Клас кнопок" -#: extras/forms/bulk_edit.py:154 extras/forms/filtersets.py:187 -#: extras/models/models.py:409 +#: netbox/extras/forms/bulk_edit.py:154 netbox/extras/forms/filtersets.py:187 +#: netbox/extras/models/models.py:409 msgid "MIME type" msgstr "Тип MIME" -#: extras/forms/bulk_edit.py:159 extras/forms/filtersets.py:190 +#: netbox/extras/forms/bulk_edit.py:159 netbox/extras/forms/filtersets.py:190 msgid "File extension" msgstr "Розширення файлу" -#: extras/forms/bulk_edit.py:164 extras/forms/filtersets.py:194 +#: netbox/extras/forms/bulk_edit.py:164 netbox/extras/forms/filtersets.py:194 msgid "As attachment" msgstr "Як вкладення" -#: extras/forms/bulk_edit.py:192 extras/forms/filtersets.py:236 -#: extras/tables/tables.py:256 templates/extras/savedfilter.html:29 +#: netbox/extras/forms/bulk_edit.py:192 netbox/extras/forms/filtersets.py:236 +#: netbox/extras/tables/tables.py:256 +#: netbox/templates/extras/savedfilter.html:29 msgid "Shared" msgstr "Спільний" -#: extras/forms/bulk_edit.py:215 extras/forms/filtersets.py:265 -#: extras/models/models.py:174 +#: netbox/extras/forms/bulk_edit.py:215 netbox/extras/forms/filtersets.py:265 +#: netbox/extras/models/models.py:174 msgid "HTTP method" -msgstr "метод HTTP" +msgstr "Метод HTTP" -#: extras/forms/bulk_edit.py:219 extras/forms/filtersets.py:259 -#: templates/extras/webhook.html:30 +#: netbox/extras/forms/bulk_edit.py:219 netbox/extras/forms/filtersets.py:259 +#: netbox/templates/extras/webhook.html:30 msgid "Payload URL" msgstr "URL-адреса корисного навантаження" -#: extras/forms/bulk_edit.py:224 extras/models/models.py:214 +#: netbox/extras/forms/bulk_edit.py:224 netbox/extras/models/models.py:214 msgid "SSL verification" msgstr "Перевірка SSL" -#: extras/forms/bulk_edit.py:227 templates/extras/webhook.html:38 +#: netbox/extras/forms/bulk_edit.py:227 +#: netbox/templates/extras/webhook.html:38 msgid "Secret" msgstr "Таємниця" -#: extras/forms/bulk_edit.py:232 +#: netbox/extras/forms/bulk_edit.py:232 msgid "CA file path" msgstr "Шляхи до файлу CA" -#: extras/forms/bulk_edit.py:253 extras/forms/bulk_import.py:192 -#: extras/forms/model_forms.py:377 +#: netbox/extras/forms/bulk_edit.py:253 netbox/extras/forms/bulk_import.py:192 +#: netbox/extras/forms/model_forms.py:377 msgid "Event types" msgstr "Типи подій" -#: extras/forms/bulk_edit.py:293 +#: netbox/extras/forms/bulk_edit.py:293 msgid "Is active" msgstr "Активний" -#: extras/forms/bulk_import.py:37 extras/forms/bulk_import.py:118 -#: extras/forms/bulk_import.py:139 extras/forms/bulk_import.py:162 -#: extras/forms/bulk_import.py:186 extras/forms/filtersets.py:137 -#: extras/forms/filtersets.py:224 extras/forms/model_forms.py:47 -#: extras/forms/model_forms.py:205 extras/forms/model_forms.py:237 -#: extras/forms/model_forms.py:278 extras/forms/model_forms.py:372 -#: extras/forms/model_forms.py:489 users/forms/model_forms.py:276 +#: netbox/extras/forms/bulk_import.py:37 +#: netbox/extras/forms/bulk_import.py:118 +#: 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/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/users/forms/model_forms.py:276 msgid "Object types" msgstr "Типи об'єктів" -#: extras/forms/bulk_import.py:39 extras/forms/bulk_import.py:120 -#: extras/forms/bulk_import.py:141 extras/forms/bulk_import.py:164 -#: extras/forms/bulk_import.py:188 tenancy/forms/bulk_import.py:96 +#: netbox/extras/forms/bulk_import.py:39 +#: netbox/extras/forms/bulk_import.py:120 +#: netbox/extras/forms/bulk_import.py:141 +#: netbox/extras/forms/bulk_import.py:164 +#: netbox/extras/forms/bulk_import.py:188 +#: netbox/tenancy/forms/bulk_import.py:96 msgid "One or more assigned object types" msgstr "Один або кілька присвоєних типів об'єктів" -#: extras/forms/bulk_import.py:44 +#: netbox/extras/forms/bulk_import.py:44 msgid "Field data type (e.g. text, integer, etc.)" msgstr "Тип даних поля (наприклад, текст, ціле число тощо)" -#: extras/forms/bulk_import.py:47 extras/forms/filtersets.py:208 -#: extras/forms/filtersets.py:281 extras/forms/model_forms.py:304 -#: extras/forms/model_forms.py:341 tenancy/forms/filtersets.py:92 +#: 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/tenancy/forms/filtersets.py:92 msgid "Object type" msgstr "Тип об'єкта" -#: extras/forms/bulk_import.py:50 +#: netbox/extras/forms/bulk_import.py:50 msgid "Object type (for object or multi-object fields)" msgstr "Тип об'єкта (для об'єктів або полів з кількома об'єктами)" -#: extras/forms/bulk_import.py:53 extras/forms/filtersets.py:84 +#: netbox/extras/forms/bulk_import.py:53 netbox/extras/forms/filtersets.py:84 msgid "Choice set" msgstr "Набір для вибору" -#: extras/forms/bulk_import.py:57 +#: netbox/extras/forms/bulk_import.py:57 msgid "Choice set (for selection fields)" msgstr "Набір для вибору (для полів виділення)" -#: extras/forms/bulk_import.py:63 +#: netbox/extras/forms/bulk_import.py:63 msgid "Whether the custom field is displayed in the UI" msgstr "Чи відображатиметься користувацьке поле в інтерфейсі користувача" -#: extras/forms/bulk_import.py:69 +#: netbox/extras/forms/bulk_import.py:69 msgid "Whether the custom field is editable in the UI" msgstr "Чи можна редагувати користувацьке поле в інтерфейсі користувача" -#: extras/forms/bulk_import.py:85 +#: netbox/extras/forms/bulk_import.py:85 msgid "The base set of predefined choices to use (if any)" msgstr "" "Базовий набір попередньо визначених варіантів для використання (якщо є)" -#: extras/forms/bulk_import.py:91 +#: netbox/extras/forms/bulk_import.py:91 msgid "" "Quoted string of comma-separated field choices with optional labels " "separated by colon: \"choice1:First Choice,choice2:Second Choice\"" msgstr "" "Цитуючий рядок параметрів полів, розділених комами, з необов'язковими " -"мітками, розділеними двокрапкою: «Вибір1:Перший вибір, Вибір2:другий вибір»" +"мітками, розділеними двокрапкою: \"Вибір1:Перший вибір, Вибір2:другий " +"вибір\"" -#: extras/forms/bulk_import.py:123 extras/models/models.py:323 +#: netbox/extras/forms/bulk_import.py:123 netbox/extras/models/models.py:323 msgid "button class" msgstr "клас кнопок" -#: extras/forms/bulk_import.py:126 extras/models/models.py:327 +#: netbox/extras/forms/bulk_import.py:126 netbox/extras/models/models.py:327 msgid "" "The class of the first link in a group will be used for the dropdown button" msgstr "" "Клас першого посилання в групі буде використовуватися для спадної кнопки" -#: extras/forms/bulk_import.py:193 +#: netbox/extras/forms/bulk_import.py:193 msgid "The event type(s) which will trigger this rule" msgstr "Тип(и) події, які ініціюватимуть це правило" -#: extras/forms/bulk_import.py:196 +#: netbox/extras/forms/bulk_import.py:196 msgid "Action object" msgstr "Об'єкт дії" -#: extras/forms/bulk_import.py:198 +#: netbox/extras/forms/bulk_import.py:198 msgid "Webhook name or script as dotted path module.Class" msgstr "Ім'я вебхука або скрипт у вигляді пунктирного шляху module.Class" -#: extras/forms/bulk_import.py:219 +#: netbox/extras/forms/bulk_import.py:219 #, python-brace-format msgid "Webhook {name} not found" msgstr "Веб-хук {name} не знайдено" -#: extras/forms/bulk_import.py:228 +#: netbox/extras/forms/bulk_import.py:228 #, python-brace-format msgid "Script {name} not found" msgstr "Сценарій {name} не знайдено" -#: extras/forms/bulk_import.py:244 +#: netbox/extras/forms/bulk_import.py:244 msgid "Assigned object type" msgstr "Призначений тип об'єкта" -#: extras/forms/bulk_import.py:249 +#: netbox/extras/forms/bulk_import.py:249 msgid "The classification of entry" msgstr "Класифікація вступу" -#: extras/forms/bulk_import.py:261 extras/forms/model_forms.py:320 -#: netbox/navigation/menu.py:390 templates/extras/notificationgroup.html:41 -#: templates/users/group.html:29 users/forms/model_forms.py:236 -#: users/forms/model_forms.py:248 users/forms/model_forms.py:300 -#: users/tables.py:102 +#: netbox/extras/forms/bulk_import.py:261 +#: netbox/extras/forms/model_forms.py:320 netbox/netbox/navigation/menu.py:390 +#: 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 +#: netbox/users/tables.py:102 msgid "Users" msgstr "Користувачі" -#: extras/forms/bulk_import.py:265 +#: netbox/extras/forms/bulk_import.py:265 msgid "User names separated by commas, encased with double quotes" msgstr "Імена користувачів, розділені комами, укладені подвійними лапками" -#: extras/forms/bulk_import.py:268 extras/forms/model_forms.py:315 -#: netbox/navigation/menu.py:410 templates/extras/notificationgroup.html:31 -#: users/forms/model_forms.py:181 users/forms/model_forms.py:193 -#: users/forms/model_forms.py:305 users/tables.py:35 users/tables.py:106 +#: netbox/extras/forms/bulk_import.py:268 +#: netbox/extras/forms/model_forms.py:315 netbox/netbox/navigation/menu.py:410 +#: 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 +#: netbox/users/tables.py:106 msgid "Groups" msgstr "Групи" -#: extras/forms/bulk_import.py:272 +#: netbox/extras/forms/bulk_import.py:272 msgid "Group names separated by commas, encased with double quotes" msgstr "Імена груп, розділені комами, укладені подвійними лапками" -#: extras/forms/filtersets.py:52 extras/forms/model_forms.py:56 +#: netbox/extras/forms/filtersets.py:52 netbox/extras/forms/model_forms.py:56 msgid "Related object type" msgstr "Пов'язаний тип об'єкта" -#: extras/forms/filtersets.py:57 +#: netbox/extras/forms/filtersets.py:57 msgid "Field type" msgstr "Тип поля" -#: extras/forms/filtersets.py:120 extras/forms/model_forms.py:157 -#: extras/tables/tables.py:91 templates/generic/bulk_import.html:154 +#: netbox/extras/forms/filtersets.py:120 +#: netbox/extras/forms/model_forms.py:157 netbox/extras/tables/tables.py:91 +#: netbox/templates/generic/bulk_import.html:154 msgid "Choices" msgstr "Вибір" -#: extras/forms/filtersets.py:164 extras/forms/filtersets.py:319 -#: extras/forms/filtersets.py:408 extras/forms/model_forms.py:572 -#: templates/core/job.html:96 templates/extras/eventrule.html:84 +#: 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/templates/extras/eventrule.html:84 msgid "Data" msgstr "Дані" -#: extras/forms/filtersets.py:175 extras/forms/filtersets.py:333 -#: extras/forms/filtersets.py:418 netbox/choices.py:130 -#: utilities/forms/bulk_import.py:26 +#: netbox/extras/forms/filtersets.py:175 netbox/extras/forms/filtersets.py:333 +#: netbox/extras/forms/filtersets.py:418 netbox/netbox/choices.py:130 +#: netbox/utilities/forms/bulk_import.py:26 msgid "Data file" msgstr "Файл даних" -#: extras/forms/filtersets.py:183 +#: netbox/extras/forms/filtersets.py:183 msgid "Content types" msgstr "Типи контенту" -#: extras/forms/filtersets.py:255 extras/models/models.py:179 +#: netbox/extras/forms/filtersets.py:255 netbox/extras/models/models.py:179 msgid "HTTP content type" msgstr "Тип вмісту HTTP" -#: extras/forms/filtersets.py:286 +#: netbox/extras/forms/filtersets.py:286 msgid "Event type" msgstr "Тип події" -#: extras/forms/filtersets.py:291 +#: netbox/extras/forms/filtersets.py:291 msgid "Action type" msgstr "Тип дії" -#: extras/forms/filtersets.py:307 +#: netbox/extras/forms/filtersets.py:307 msgid "Tagged object type" msgstr "Тип об'єкта з позначкою" -#: extras/forms/filtersets.py:312 +#: netbox/extras/forms/filtersets.py:312 msgid "Allowed object type" msgstr "Дозволений тип об'єкта" -#: extras/forms/filtersets.py:341 extras/forms/model_forms.py:507 -#: netbox/navigation/menu.py:18 +#: netbox/extras/forms/filtersets.py:341 +#: netbox/extras/forms/model_forms.py:507 netbox/netbox/navigation/menu.py:18 msgid "Regions" msgstr "Регіони" -#: extras/forms/filtersets.py:346 extras/forms/model_forms.py:512 +#: netbox/extras/forms/filtersets.py:346 +#: netbox/extras/forms/model_forms.py:512 msgid "Site groups" msgstr "Групи тех. майданчиків" -#: extras/forms/filtersets.py:356 extras/forms/model_forms.py:522 -#: netbox/navigation/menu.py:20 templates/dcim/site.html:127 +#: netbox/extras/forms/filtersets.py:356 +#: netbox/extras/forms/model_forms.py:522 netbox/netbox/navigation/menu.py:20 +#: netbox/templates/dcim/site.html:127 msgid "Locations" msgstr "Локації" -#: extras/forms/filtersets.py:361 extras/forms/model_forms.py:527 +#: netbox/extras/forms/filtersets.py:361 +#: netbox/extras/forms/model_forms.py:527 msgid "Device types" msgstr "Типи пристроїв" -#: extras/forms/filtersets.py:366 extras/forms/model_forms.py:532 +#: netbox/extras/forms/filtersets.py:366 +#: netbox/extras/forms/model_forms.py:532 msgid "Roles" msgstr "Ролі" -#: extras/forms/filtersets.py:376 extras/forms/model_forms.py:542 +#: netbox/extras/forms/filtersets.py:376 +#: netbox/extras/forms/model_forms.py:542 msgid "Cluster types" msgstr "Типи кластерів" -#: extras/forms/filtersets.py:381 extras/forms/model_forms.py:547 +#: netbox/extras/forms/filtersets.py:381 +#: netbox/extras/forms/model_forms.py:547 msgid "Cluster groups" msgstr "Кластерні групи" -#: extras/forms/filtersets.py:386 extras/forms/model_forms.py:552 -#: netbox/navigation/menu.py:255 netbox/navigation/menu.py:257 -#: templates/virtualization/clustertype.html:30 -#: virtualization/tables/clusters.py:23 virtualization/tables/clusters.py:45 +#: 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/templates/virtualization/clustertype.html:30 +#: netbox/virtualization/tables/clusters.py:23 +#: netbox/virtualization/tables/clusters.py:45 msgid "Clusters" msgstr "Кластери" -#: extras/forms/filtersets.py:391 extras/forms/model_forms.py:557 +#: netbox/extras/forms/filtersets.py:391 +#: netbox/extras/forms/model_forms.py:557 msgid "Tenant groups" msgstr "Групи орендарів" -#: extras/forms/model_forms.py:49 +#: netbox/extras/forms/model_forms.py:49 msgid "The type(s) of object that have this custom field" msgstr "Тип(и) об'єкта, які мають користувацьке поле" -#: extras/forms/model_forms.py:52 +#: netbox/extras/forms/model_forms.py:52 msgid "Default value" msgstr "Значення за замовчуванням" -#: extras/forms/model_forms.py:58 +#: netbox/extras/forms/model_forms.py:58 msgid "Type of the related object (for object/multi-object fields only)" msgstr "Тип пов'язаного об'єкта (лише для об'єктних/багатооб'єктних полів)" -#: extras/forms/model_forms.py:61 templates/extras/customfield.html:60 +#: netbox/extras/forms/model_forms.py:61 +#: netbox/templates/extras/customfield.html:60 msgid "Related object filter" msgstr "Фільтр пов'язаних об'єктів" -#: extras/forms/model_forms.py:63 +#: netbox/extras/forms/model_forms.py:63 msgid "Specify query parameters as a JSON object." msgstr "Вкажіть параметри запиту як об'єкт JSON." -#: extras/forms/model_forms.py:73 templates/extras/customfield.html:10 +#: netbox/extras/forms/model_forms.py:73 +#: netbox/templates/extras/customfield.html:10 msgid "Custom Field" msgstr "Користувацьке поле" -#: extras/forms/model_forms.py:85 +#: netbox/extras/forms/model_forms.py:85 msgid "" "The type of data stored in this field. For object/multi-object fields, " "select the related object type below." @@ -7405,7 +7991,7 @@ msgstr "" "Тип даних, що зберігаються в цьому полі. Для полів об'єкт/багатооб'єкт " "виберіть відповідний тип об'єкта нижче." -#: extras/forms/model_forms.py:88 +#: netbox/extras/forms/model_forms.py:88 msgid "" "This will be displayed as help text for the form field. Markdown is " "supported." @@ -7413,11 +7999,11 @@ msgstr "" "Це відображатиметься як текст довідки для поля форми. Markdown " "підтримується." -#: extras/forms/model_forms.py:143 +#: netbox/extras/forms/model_forms.py:143 msgid "Related Object" msgstr "Пов'язаний об'єкт" -#: extras/forms/model_forms.py:169 +#: netbox/extras/forms/model_forms.py:169 msgid "" "Enter one choice per line. An optional label may be specified for each " "choice by appending it with a colon. Example:" @@ -7425,15 +8011,16 @@ msgstr "" "Введіть один вибір на рядок. Додаткову мітку можна вказати для кожного " "вибору, додавши її двокрапкою. Приклад:" -#: extras/forms/model_forms.py:212 templates/extras/customlink.html:10 +#: netbox/extras/forms/model_forms.py:212 +#: netbox/templates/extras/customlink.html:10 msgid "Custom Link" msgstr "Користувацьке посилання" -#: extras/forms/model_forms.py:214 +#: netbox/extras/forms/model_forms.py:214 msgid "Templates" msgstr "Шаблони" -#: extras/forms/model_forms.py:226 +#: netbox/extras/forms/model_forms.py:226 #, python-brace-format msgid "" "Jinja2 template code for the link text. Reference the object as {example}. " @@ -7442,7 +8029,7 @@ msgstr "" "Код шаблону Jinja2 для тексту посилання. Посилання на об'єкт як {example}. " "Посилання, які відображаються як порожній текст, не відображатимуться." -#: extras/forms/model_forms.py:230 +#: netbox/extras/forms/model_forms.py:230 #, python-brace-format msgid "" "Jinja2 template code for the link URL. Reference the object as {example}." @@ -7450,52 +8037,58 @@ msgstr "" "Код шаблону Jinja2 для URL-адреси посилання. Посилання на об'єкт як " "{example}." -#: extras/forms/model_forms.py:241 extras/forms/model_forms.py:624 +#: netbox/extras/forms/model_forms.py:241 +#: netbox/extras/forms/model_forms.py:624 msgid "Template code" msgstr "Код шаблону" -#: extras/forms/model_forms.py:247 templates/extras/exporttemplate.html:12 +#: netbox/extras/forms/model_forms.py:247 +#: netbox/templates/extras/exporttemplate.html:12 msgid "Export Template" -msgstr "Шаблон експорту" +msgstr "Експортувати шаблон" -#: extras/forms/model_forms.py:249 +#: netbox/extras/forms/model_forms.py:249 msgid "Rendering" msgstr "Відтворювати" -#: extras/forms/model_forms.py:263 extras/forms/model_forms.py:649 +#: netbox/extras/forms/model_forms.py:263 +#: netbox/extras/forms/model_forms.py:649 msgid "Template content is populated from the remote source selected below." msgstr "Вміст шаблону заповнюється з віддаленого джерела, вибраного нижче." -#: extras/forms/model_forms.py:270 extras/forms/model_forms.py:656 +#: netbox/extras/forms/model_forms.py:270 +#: netbox/extras/forms/model_forms.py:656 msgid "Must specify either local content or a data file" msgstr "Повинен вказати локальний вміст або файл даних" -#: extras/forms/model_forms.py:284 netbox/forms/mixins.py:70 -#: templates/extras/savedfilter.html:10 +#: netbox/extras/forms/model_forms.py:284 netbox/netbox/forms/mixins.py:70 +#: netbox/templates/extras/savedfilter.html:10 msgid "Saved Filter" msgstr "Збережений фільтр" -#: extras/forms/model_forms.py:334 +#: netbox/extras/forms/model_forms.py:334 msgid "A notification group specify at least one user or group." msgstr "Група сповіщень вказує принаймні одного користувача або групи." -#: extras/forms/model_forms.py:356 templates/extras/webhook.html:23 +#: netbox/extras/forms/model_forms.py:356 +#: netbox/templates/extras/webhook.html:23 msgid "HTTP Request" msgstr "Запит HTTP" -#: extras/forms/model_forms.py:358 templates/extras/webhook.html:44 +#: netbox/extras/forms/model_forms.py:358 +#: netbox/templates/extras/webhook.html:44 msgid "SSL" msgstr "SSL" -#: extras/forms/model_forms.py:380 +#: netbox/extras/forms/model_forms.py:380 msgid "Action choice" msgstr "Вибір дії" -#: extras/forms/model_forms.py:385 +#: netbox/extras/forms/model_forms.py:385 msgid "Enter conditions in JSON format." msgstr "Введіть умови в JSON форматі." -#: extras/forms/model_forms.py:389 +#: netbox/extras/forms/model_forms.py:389 msgid "" "Enter parameters to pass to the action in JSON format." @@ -7503,110 +8096,112 @@ msgstr "" "Введіть параметри для переходу до дії у JSON форматі." -#: extras/forms/model_forms.py:394 templates/extras/eventrule.html:10 +#: netbox/extras/forms/model_forms.py:394 +#: netbox/templates/extras/eventrule.html:10 msgid "Event Rule" msgstr "Правило події" -#: extras/forms/model_forms.py:395 +#: netbox/extras/forms/model_forms.py:395 msgid "Triggers" msgstr "Тригери" -#: extras/forms/model_forms.py:442 +#: netbox/extras/forms/model_forms.py:442 msgid "Notification group" msgstr "Група повідомлень" -#: extras/forms/model_forms.py:562 netbox/navigation/menu.py:26 -#: tenancy/tables/tenants.py:22 +#: netbox/extras/forms/model_forms.py:562 netbox/netbox/navigation/menu.py:26 +#: netbox/tenancy/tables/tenants.py:22 msgid "Tenants" msgstr "Орендарі" -#: extras/forms/model_forms.py:606 +#: netbox/extras/forms/model_forms.py:606 msgid "Data is populated from the remote source selected below." msgstr "Дані заповнюються з віддаленого джерела, вибраного нижче." -#: extras/forms/model_forms.py:612 +#: netbox/extras/forms/model_forms.py:612 msgid "Must specify either local data or a data file" msgstr "Необхідно вказати локальні дані або файл даних" -#: extras/forms/model_forms.py:631 templates/core/datafile.html:55 +#: netbox/extras/forms/model_forms.py:631 +#: netbox/templates/core/datafile.html:55 msgid "Content" msgstr "Зміст" -#: extras/forms/reports.py:17 extras/forms/scripts.py:23 +#: netbox/extras/forms/reports.py:17 netbox/extras/forms/scripts.py:23 msgid "Schedule at" msgstr "Графік роботи в" -#: extras/forms/reports.py:18 +#: netbox/extras/forms/reports.py:18 msgid "Schedule execution of report to a set time" msgstr "Заплануйте виконання звіту до встановленого часу" -#: extras/forms/reports.py:23 extras/forms/scripts.py:29 +#: netbox/extras/forms/reports.py:23 netbox/extras/forms/scripts.py:29 msgid "Recurs every" msgstr "Повторюється кожного" -#: extras/forms/reports.py:27 +#: netbox/extras/forms/reports.py:27 msgid "Interval at which this report is re-run (in minutes)" msgstr "Інтервал, з яким цей звіт повторно виконується (у хвилині)" -#: extras/forms/reports.py:35 extras/forms/scripts.py:41 +#: netbox/extras/forms/reports.py:35 netbox/extras/forms/scripts.py:41 #, python-brace-format msgid " (current time: {now})" msgstr " (поточний час: {now})" -#: extras/forms/reports.py:45 extras/forms/scripts.py:51 +#: netbox/extras/forms/reports.py:45 netbox/extras/forms/scripts.py:51 msgid "Scheduled time must be in the future." msgstr "Запланований час повинен бути в майбутньому." -#: extras/forms/scripts.py:17 +#: netbox/extras/forms/scripts.py:17 msgid "Commit changes" msgstr "Здійснити зміни" -#: extras/forms/scripts.py:18 +#: netbox/extras/forms/scripts.py:18 msgid "Commit changes to the database (uncheck for a dry-run)" msgstr "" "Здійснити внесення змін до бази даних (зніміть прапорець для сухого запуску)" -#: extras/forms/scripts.py:24 +#: netbox/extras/forms/scripts.py:24 msgid "Schedule execution of script to a set time" msgstr "Заплануйте виконання сценарію до встановленого часу" -#: extras/forms/scripts.py:33 +#: netbox/extras/forms/scripts.py:33 msgid "Interval at which this script is re-run (in minutes)" msgstr "Інтервал повторного запуску сценарію (у хвилині)" -#: extras/jobs.py:49 +#: netbox/extras/jobs.py:47 msgid "Database changes have been reverted automatically." msgstr "Зміни бази даних були автоматично скасовані." -#: extras/jobs.py:55 +#: netbox/extras/jobs.py:53 msgid "Script aborted with error: " msgstr "Скрипт перерваний з помилкою: " -#: extras/jobs.py:65 +#: netbox/extras/jobs.py:63 msgid "An exception occurred: " msgstr "Виняток стався: " -#: extras/jobs.py:70 +#: netbox/extras/jobs.py:68 msgid "Database changes have been reverted due to error." msgstr "Зміни бази даних були скасовані через помилку." -#: extras/management/commands/reindex.py:66 +#: netbox/extras/management/commands/reindex.py:66 msgid "No indexers found!" msgstr "Індексаторів не знайдено!" -#: extras/models/configs.py:130 +#: netbox/extras/models/configs.py:130 msgid "config context" msgstr "контекст конфігурації" -#: extras/models/configs.py:131 +#: netbox/extras/models/configs.py:131 msgid "config contexts" msgstr "контексти конфігурації" -#: extras/models/configs.py:149 extras/models/configs.py:205 +#: netbox/extras/models/configs.py:149 netbox/extras/models/configs.py:205 msgid "JSON data must be in object form. Example:" msgstr "Дані JSON повинні бути у формі об'єкта. Приклад:" -#: extras/models/configs.py:169 +#: netbox/extras/models/configs.py:169 msgid "" "Local config context data takes precedence over source contexts in the final" " rendered config context" @@ -7614,19 +8209,19 @@ msgstr "" "Дані контексту локальної конфігурації мають перевагу над вихідними " "контекстами в кінцевому контексті конфігурації" -#: extras/models/configs.py:224 +#: netbox/extras/models/configs.py:224 msgid "template code" msgstr "код шаблону" -#: extras/models/configs.py:225 +#: netbox/extras/models/configs.py:225 msgid "Jinja2 template code." msgstr "Код шаблону Jinja2." -#: extras/models/configs.py:228 +#: netbox/extras/models/configs.py:228 msgid "environment parameters" msgstr "параметри середовища" -#: extras/models/configs.py:233 +#: netbox/extras/models/configs.py:233 msgid "" "Any additional" @@ -7636,40 +8231,40 @@ msgstr "" "href=\"https://jinja.palletsprojects.com/en/3.1.x/api/#jinja2.Environment\">додаткові" " параметри пройти при побудові середовища Jinja2." -#: extras/models/configs.py:240 +#: netbox/extras/models/configs.py:240 msgid "config template" msgstr "шаблон конфігурації" -#: extras/models/configs.py:241 +#: netbox/extras/models/configs.py:241 msgid "config templates" msgstr "шаблони конфігурації" -#: extras/models/customfields.py:75 +#: netbox/extras/models/customfields.py:75 msgid "The object(s) to which this field applies." msgstr "Об'єкт (и), до яких застосовується це поле." -#: extras/models/customfields.py:82 +#: netbox/extras/models/customfields.py:82 msgid "The type of data this custom field holds" msgstr "Тип даних, які містить користувацьке поле" -#: extras/models/customfields.py:89 +#: netbox/extras/models/customfields.py:89 msgid "The type of NetBox object this field maps to (for object fields)" msgstr "" "Тип об'єкта NetBox, з яким співвідноситься дане поле (для полів об'єкта)" -#: extras/models/customfields.py:95 +#: netbox/extras/models/customfields.py:95 msgid "Internal field name" msgstr "Ім'я внутрішнього поля" -#: extras/models/customfields.py:99 +#: netbox/extras/models/customfields.py:99 msgid "Only alphanumeric characters and underscores are allowed." msgstr "Дозволені лише буквено-цифрові символи та підкреслення." -#: extras/models/customfields.py:104 +#: netbox/extras/models/customfields.py:104 msgid "Double underscores are not permitted in custom field names." msgstr "Подвійне підкреслення не дозволено у користувацьких назвах полів." -#: extras/models/customfields.py:115 +#: netbox/extras/models/customfields.py:115 msgid "" "Name of the field as displayed to users (if not provided, 'the field's name " "will be used)" @@ -7677,19 +8272,19 @@ msgstr "" "Назва поля, яке відображається користувачам (якщо не вказано, буде " "використано 'ім'я поля')" -#: extras/models/customfields.py:119 extras/models/models.py:317 +#: netbox/extras/models/customfields.py:119 netbox/extras/models/models.py:317 msgid "group name" msgstr "назва групи" -#: extras/models/customfields.py:122 +#: netbox/extras/models/customfields.py:122 msgid "Custom fields within the same group will be displayed together" msgstr "Користувацькі поля в одній групі відображатимуться разом" -#: extras/models/customfields.py:130 +#: netbox/extras/models/customfields.py:130 msgid "required" msgstr "обов'язковий" -#: extras/models/customfields.py:132 +#: netbox/extras/models/customfields.py:132 msgid "" "This field is required when creating new objects or editing an existing " "object." @@ -7697,19 +8292,19 @@ msgstr "" "Це поле обов'язкове для створення нових об'єктів або редагування існуючого " "об'єкта." -#: extras/models/customfields.py:135 +#: netbox/extras/models/customfields.py:135 msgid "must be unique" msgstr "має бути унікальним" -#: extras/models/customfields.py:137 +#: netbox/extras/models/customfields.py:137 msgid "The value of this field must be unique for the assigned object" msgstr "Значення цього поля має бути унікальним для призначеного об'єкта" -#: extras/models/customfields.py:140 +#: netbox/extras/models/customfields.py:140 msgid "search weight" msgstr "вага пошуку" -#: extras/models/customfields.py:143 +#: netbox/extras/models/customfields.py:143 msgid "" "Weighting for search. Lower values are considered more important. Fields " "with a search weight of zero will be ignored." @@ -7717,11 +8312,11 @@ msgstr "" "Зважування для пошуку. Більш важливими вважаються нижчі значення. Поля з " "вагою пошуку нуль ігноруватимуться." -#: extras/models/customfields.py:148 +#: netbox/extras/models/customfields.py:148 msgid "filter logic" msgstr "логіка фільтра" -#: extras/models/customfields.py:152 +#: netbox/extras/models/customfields.py:152 msgid "" "Loose matches any instance of a given string; exact matches the entire " "field." @@ -7729,11 +8324,11 @@ msgstr "" "Вільне відповідає будь-якому екземпляру заданого рядка; точно - відповідає " "всьому полю." -#: extras/models/customfields.py:155 +#: netbox/extras/models/customfields.py:155 msgid "default" msgstr "за замовчуванням" -#: extras/models/customfields.py:159 +#: netbox/extras/models/customfields.py:159 msgid "" "Default value for the field (must be a JSON value). Encapsulate strings with" " double quotes (e.g. \"Foo\")." @@ -7741,7 +8336,7 @@ msgstr "" "Значення за замовчуванням для поля (має бути значення JSON). Інкапсулювати " "рядки з подвійними лапками (наприклад, \"Foo\")." -#: extras/models/customfields.py:166 +#: netbox/extras/models/customfields.py:166 msgid "" "Filter the object selection choices using a query_params dict (must be a " "JSON value).Encapsulate strings with double quotes (e.g. \"Foo\")." @@ -7750,35 +8345,35 @@ msgstr "" "(має бути значення JSON). Інкапсулюйте рядки подвійними лапками (наприклад, " "\"Foo\")." -#: extras/models/customfields.py:172 +#: netbox/extras/models/customfields.py:172 msgid "display weight" msgstr "відображення ваги" -#: extras/models/customfields.py:173 +#: netbox/extras/models/customfields.py:173 msgid "Fields with higher weights appear lower in a form." msgstr "Поля з більшою вагою відображаються нижче у формі." -#: extras/models/customfields.py:178 +#: netbox/extras/models/customfields.py:178 msgid "minimum value" msgstr "мінімальне значення" -#: extras/models/customfields.py:179 +#: netbox/extras/models/customfields.py:179 msgid "Minimum allowed value (for numeric fields)" msgstr "Мінімальне дозволене значення (для числових полів)" -#: extras/models/customfields.py:184 +#: netbox/extras/models/customfields.py:184 msgid "maximum value" msgstr "максимальне значення" -#: extras/models/customfields.py:185 +#: netbox/extras/models/customfields.py:185 msgid "Maximum allowed value (for numeric fields)" msgstr "Максимально дозволене значення (для числових полів)" -#: extras/models/customfields.py:191 +#: netbox/extras/models/customfields.py:191 msgid "validation regex" msgstr "регулярний вираз перевірки" -#: extras/models/customfields.py:193 +#: netbox/extras/models/customfields.py:193 #, python-brace-format msgid "" "Regular expression to enforce on text field values. Use ^ and $ to force " @@ -7789,190 +8384,192 @@ msgstr "" "і $ для примусового збігу всього рядка. Наприклад, ^ [А-Z]{3}$ " "обмежить значення рівно трьома великими літерами." -#: extras/models/customfields.py:201 +#: netbox/extras/models/customfields.py:201 msgid "choice set" msgstr "набір вибору" -#: extras/models/customfields.py:210 +#: netbox/extras/models/customfields.py:210 msgid "Specifies whether the custom field is displayed in the UI" msgstr "" "Визначає, чи відображатиметься користувацьке поле в інтерфейсі користувача" -#: extras/models/customfields.py:217 +#: netbox/extras/models/customfields.py:217 msgid "Specifies whether the custom field value can be edited in the UI" msgstr "" "Визначає, чи можна редагувати значення користувацького поля в інтерфейсі" -#: extras/models/customfields.py:221 +#: netbox/extras/models/customfields.py:221 msgid "is cloneable" msgstr "є клонованим" -#: extras/models/customfields.py:222 +#: netbox/extras/models/customfields.py:222 msgid "Replicate this value when cloning objects" msgstr "Повторюйте це значення під час клонування об'єктів" -#: extras/models/customfields.py:239 +#: netbox/extras/models/customfields.py:239 msgid "custom field" msgstr "користувацьке поле" -#: extras/models/customfields.py:240 +#: netbox/extras/models/customfields.py:240 msgid "custom fields" msgstr "користувацькі поля" -#: extras/models/customfields.py:329 +#: netbox/extras/models/customfields.py:329 #, python-brace-format msgid "Invalid default value \"{value}\": {error}" msgstr "Невірне значення за замовчуванням \"{value}\": {error}" -#: extras/models/customfields.py:336 +#: netbox/extras/models/customfields.py:336 msgid "A minimum value may be set only for numeric fields" msgstr "Мінімальне значення може бути встановлено лише для числових полів" -#: extras/models/customfields.py:338 +#: netbox/extras/models/customfields.py:338 msgid "A maximum value may be set only for numeric fields" msgstr "Максимальне значення може бути встановлено лише для числових полів" -#: extras/models/customfields.py:348 +#: netbox/extras/models/customfields.py:348 msgid "" "Regular expression validation is supported only for text and URL fields" msgstr "" "Перевірка регулярних виразів підтримується лише для текстових та URL полів" -#: extras/models/customfields.py:354 +#: netbox/extras/models/customfields.py:354 msgid "Uniqueness cannot be enforced for boolean fields" msgstr "Унікальність не може бути застосована для булевих полів" -#: extras/models/customfields.py:364 +#: netbox/extras/models/customfields.py:364 msgid "Selection fields must specify a set of choices." msgstr "Поля виділення повинні вказувати набір варіантів." -#: extras/models/customfields.py:368 +#: netbox/extras/models/customfields.py:368 msgid "Choices may be set only on selection fields." -msgstr "Вибір можна встановити лише для полів виділення." +msgstr "Вибір можна встановити лише для виділених полів." -#: extras/models/customfields.py:375 +#: netbox/extras/models/customfields.py:375 msgid "Object fields must define an object type." msgstr "Поля об'єкта повинні визначати тип об'єкта." -#: extras/models/customfields.py:379 +#: netbox/extras/models/customfields.py:379 #, python-brace-format msgid "{type} fields may not define an object type." msgstr "{type} поля не можуть визначати тип об'єкта." -#: extras/models/customfields.py:386 +#: netbox/extras/models/customfields.py:386 msgid "A related object filter can be defined only for object fields." msgstr "" "Пов'язаний об'єктний фільтр може бути визначений лише для полів об'єктів." -#: extras/models/customfields.py:390 +#: netbox/extras/models/customfields.py:390 msgid "Filter must be defined as a dictionary mapping attributes to values." msgstr "" "Фільтр повинен бути визначений як словник, що відображає атрибути зі " "значеннями." -#: extras/models/customfields.py:469 +#: netbox/extras/models/customfields.py:469 msgid "True" msgstr "Iстинна" -#: extras/models/customfields.py:470 +#: netbox/extras/models/customfields.py:470 msgid "False" msgstr "Хибно" -#: extras/models/customfields.py:560 +#: netbox/extras/models/customfields.py:560 #, python-brace-format msgid "Values must match this regex: {regex}" msgstr "Значення повинні відповідати цьому регексу: {regex}" -#: extras/models/customfields.py:654 +#: netbox/extras/models/customfields.py:654 msgid "Value must be a string." msgstr "Значення має бути рядком." -#: extras/models/customfields.py:656 +#: netbox/extras/models/customfields.py:656 #, python-brace-format msgid "Value must match regex '{regex}'" msgstr "Значення має збігатися з регулярним виразом '{regex}'" -#: extras/models/customfields.py:661 +#: netbox/extras/models/customfields.py:661 msgid "Value must be an integer." msgstr "Значення має бути цілим числом." -#: extras/models/customfields.py:664 extras/models/customfields.py:679 +#: netbox/extras/models/customfields.py:664 +#: netbox/extras/models/customfields.py:679 #, python-brace-format msgid "Value must be at least {minimum}" msgstr "Значення повинно бути меньш, ніж {minimum}" -#: extras/models/customfields.py:668 extras/models/customfields.py:683 +#: netbox/extras/models/customfields.py:668 +#: netbox/extras/models/customfields.py:683 #, python-brace-format msgid "Value must not exceed {maximum}" msgstr "Значення не повинно перевищувати {maximum}" -#: extras/models/customfields.py:676 +#: netbox/extras/models/customfields.py:676 msgid "Value must be a decimal." msgstr "Значення має бути десятковим." -#: extras/models/customfields.py:688 +#: netbox/extras/models/customfields.py:688 msgid "Value must be true or false." msgstr "Значення має бути істинним або хибним." -#: extras/models/customfields.py:696 +#: netbox/extras/models/customfields.py:696 msgid "Date values must be in ISO 8601 format (YYYY-MM-DD)." msgstr "Значення дати повинні бути у форматі ISO 8601 (РРРР-ММ-ДД)." -#: extras/models/customfields.py:705 +#: netbox/extras/models/customfields.py:705 msgid "Date and time values must be in ISO 8601 format (YYYY-MM-DD HH:MM:SS)." msgstr "" "Значення дати та часу повинні бути у форматі ISO 8601 (РРРР-ММ-ДД ГГ:ХХ:СС)." -#: extras/models/customfields.py:712 +#: netbox/extras/models/customfields.py:712 #, python-brace-format msgid "Invalid choice ({value}) for choice set {choiceset}." msgstr "Невірний вибір ({value}) для набору варіантів {choiceset}." -#: extras/models/customfields.py:722 +#: netbox/extras/models/customfields.py:722 #, python-brace-format msgid "Invalid choice(s) ({value}) for choice set {choiceset}." msgstr "Невірний вибір(и) ({value}) для набору варіантів {choiceset}." -#: extras/models/customfields.py:731 +#: netbox/extras/models/customfields.py:731 #, python-brace-format msgid "Value must be an object ID, not {type}" msgstr "Значення має бути ідентифікатором об'єкта, а не {type}" -#: extras/models/customfields.py:737 +#: netbox/extras/models/customfields.py:737 #, python-brace-format msgid "Value must be a list of object IDs, not {type}" msgstr "Значення має бути списком ідентифікаторів об'єктів, а не {type}" -#: extras/models/customfields.py:741 +#: netbox/extras/models/customfields.py:741 #, python-brace-format msgid "Found invalid object ID: {id}" msgstr "Знайдено недійсний ідентифікатор об'єкта: {id}" -#: extras/models/customfields.py:744 +#: netbox/extras/models/customfields.py:744 msgid "Required field cannot be empty." msgstr "Обов'язкове поле не може бути порожнім." -#: extras/models/customfields.py:763 +#: netbox/extras/models/customfields.py:763 msgid "Base set of predefined choices (optional)" msgstr "Базовий набір попередньо визначених варіантів (необов'язково)" -#: extras/models/customfields.py:775 +#: netbox/extras/models/customfields.py:775 msgid "Choices are automatically ordered alphabetically" msgstr "Вибір автоматично впорядковується за алфавітом" -#: extras/models/customfields.py:782 +#: netbox/extras/models/customfields.py:782 msgid "custom field choice set" msgstr "набір вибору користувацького поля" -#: extras/models/customfields.py:783 +#: netbox/extras/models/customfields.py:783 msgid "custom field choice sets" msgstr "набори вибору користувацького поля" -#: extras/models/customfields.py:825 +#: netbox/extras/models/customfields.py:825 msgid "Must define base or extra choices." msgstr "Повинен визначити базовий або додатковий вибори." -#: extras/models/customfields.py:849 +#: netbox/extras/models/customfields.py:849 #, python-brace-format msgid "" "Cannot remove choice {choice} as there are {model} objects which reference " @@ -7981,60 +8578,60 @@ msgstr "" "Не вдається видалити вибір {choice} так, як є {model} об'єкти, які " "посилаються на нього." -#: extras/models/dashboard.py:18 +#: netbox/extras/models/dashboard.py:18 msgid "layout" msgstr "макет" -#: extras/models/dashboard.py:22 +#: netbox/extras/models/dashboard.py:22 msgid "config" msgstr "конфігурація" -#: extras/models/dashboard.py:27 +#: netbox/extras/models/dashboard.py:27 msgid "dashboard" msgstr "інформаційна панель" -#: extras/models/dashboard.py:28 +#: netbox/extras/models/dashboard.py:28 msgid "dashboards" msgstr "інформаційні панелі" -#: extras/models/models.py:52 +#: netbox/extras/models/models.py:52 msgid "object types" msgstr "типи об'єктів" -#: extras/models/models.py:53 +#: netbox/extras/models/models.py:53 msgid "The object(s) to which this rule applies." msgstr "Об'єкт(и), до яких застосовується це правило." -#: extras/models/models.py:67 +#: netbox/extras/models/models.py:67 msgid "The types of event which will trigger this rule." msgstr "Типи подій, які викличуть спрацьовання цього правила." -#: extras/models/models.py:74 +#: netbox/extras/models/models.py:74 msgid "conditions" msgstr "умови" -#: extras/models/models.py:77 +#: netbox/extras/models/models.py:77 msgid "" "A set of conditions which determine whether the event will be generated." msgstr "Набір умов, які визначають, чи буде подія генеруватися." -#: extras/models/models.py:85 +#: netbox/extras/models/models.py:85 msgid "action type" msgstr "тип дії" -#: extras/models/models.py:104 +#: netbox/extras/models/models.py:104 msgid "Additional data to pass to the action object" msgstr "Додаткові дані для передачі об'єкту дії" -#: extras/models/models.py:116 +#: netbox/extras/models/models.py:116 msgid "event rule" msgstr "правило події" -#: extras/models/models.py:117 +#: netbox/extras/models/models.py:117 msgid "event rules" msgstr "правила подій" -#: extras/models/models.py:166 +#: netbox/extras/models/models.py:166 msgid "" "This URL will be called using the HTTP method defined when the webhook is " "called. Jinja2 template processing is supported with the same context as the" @@ -8044,7 +8641,7 @@ msgstr "" "виклику веб-хука. Обробка шаблонів Jinja2 підтримується в тому ж контексті, " "що і тіло запиту." -#: extras/models/models.py:181 +#: netbox/extras/models/models.py:181 msgid "" "The complete list of official content types is available тут." -#: extras/models/models.py:186 +#: netbox/extras/models/models.py:186 msgid "additional headers" msgstr "додаткові заголовки" -#: extras/models/models.py:189 +#: netbox/extras/models/models.py:189 msgid "" "User-supplied HTTP headers to be sent with the request in addition to the " "HTTP content type. Headers should be defined in the format Name: " @@ -8070,11 +8667,11 @@ msgstr "" "Назва: Значення. Обробка шаблонів Jinja2 підтримується в тому ж" " контексті, що і тіло запиту (нижче)." -#: extras/models/models.py:195 +#: netbox/extras/models/models.py:195 msgid "body template" msgstr "шаблон тіла" -#: extras/models/models.py:198 +#: netbox/extras/models/models.py:198 msgid "" "Jinja2 template for a custom request body. If blank, a JSON object " "representing the change will be included. Available context data includes: " @@ -8087,11 +8684,11 @@ msgstr "" " ім'я користувача, ідентифікатор запиту, і " "дані." -#: extras/models/models.py:204 +#: netbox/extras/models/models.py:204 msgid "secret" msgstr "таємниця" -#: extras/models/models.py:208 +#: netbox/extras/models/models.py:208 msgid "" "When provided, the request will include a X-Hook-Signature " "header containing a HMAC hex digest of the payload body using the secret as " @@ -8101,15 +8698,15 @@ msgstr "" "що містить шістнадцядковий дайджест HMAC тіла корисного навантаження з " "використанням секрету як ключа. Таємниця не передається у запиті." -#: extras/models/models.py:215 +#: netbox/extras/models/models.py:215 msgid "Enable SSL certificate verification. Disable with caution!" msgstr "Увімкнути перевірку сертифіката SSL. Відключайте з обережністю!" -#: extras/models/models.py:221 templates/extras/webhook.html:51 +#: netbox/extras/models/models.py:221 netbox/templates/extras/webhook.html:51 msgid "CA File Path" msgstr "Шляхи до файлу CA" -#: extras/models/models.py:223 +#: netbox/extras/models/models.py:223 msgid "" "The specific CA certificate file to use for SSL verification. Leave blank to" " use the system defaults." @@ -8117,63 +8714,63 @@ msgstr "" "Конкретний файл сертифіката CA для перевірки SSL. Залиште порожнім, щоб " "використовувати параметри системи за замовчуванням." -#: extras/models/models.py:234 +#: netbox/extras/models/models.py:234 msgid "webhook" msgstr "веб-хук" -#: extras/models/models.py:235 +#: netbox/extras/models/models.py:235 msgid "webhooks" msgstr "веб-хуки" -#: extras/models/models.py:253 +#: netbox/extras/models/models.py:253 msgid "Do not specify a CA certificate file if SSL verification is disabled." msgstr "Не вказуйте файл сертифіката CA, якщо перевірка SSL вимкнена." -#: extras/models/models.py:293 +#: netbox/extras/models/models.py:293 msgid "The object type(s) to which this link applies." msgstr "Тип(и) об'єкта, до яких застосовується це посилання." -#: extras/models/models.py:305 +#: netbox/extras/models/models.py:305 msgid "link text" msgstr "текст посилання" -#: extras/models/models.py:306 +#: netbox/extras/models/models.py:306 msgid "Jinja2 template code for link text" msgstr "Код шаблону Jinja2 для тексту посилання" -#: extras/models/models.py:309 +#: netbox/extras/models/models.py:309 msgid "link URL" msgstr "URL-адреса посилання" -#: extras/models/models.py:310 +#: netbox/extras/models/models.py:310 msgid "Jinja2 template code for link URL" msgstr "Код шаблону Jinja2 для URL-адреси посилання" -#: extras/models/models.py:320 +#: netbox/extras/models/models.py:320 msgid "Links with the same group will appear as a dropdown menu" msgstr "Посилання з тією ж групою відображатимуться у випадаючому меню" -#: extras/models/models.py:330 +#: netbox/extras/models/models.py:330 msgid "new window" msgstr "нове вікно" -#: extras/models/models.py:332 +#: netbox/extras/models/models.py:332 msgid "Force link to open in a new window" msgstr "Примусове відкриття посилання в новому вікні" -#: extras/models/models.py:341 +#: netbox/extras/models/models.py:341 msgid "custom link" msgstr "користувацьке посилання" -#: extras/models/models.py:342 +#: netbox/extras/models/models.py:342 msgid "custom links" msgstr "користувацькі посилання" -#: extras/models/models.py:389 +#: netbox/extras/models/models.py:389 msgid "The object type(s) to which this template applies." msgstr "Тип(и) об'єкта, до яких застосовується цей шаблон." -#: extras/models/models.py:402 +#: netbox/extras/models/models.py:402 msgid "" "Jinja2 template code. The list of objects being exported is passed as a " "context variable named queryset." @@ -8181,1083 +8778,1150 @@ msgstr "" "Код шаблону Jinja2. Список об'єктів, що експортуються, передається як " "контекстна змінна з назвою запит." -#: extras/models/models.py:410 +#: netbox/extras/models/models.py:410 msgid "Defaults to text/plain; charset=utf-8" -msgstr "За замовчуванням текст/простий; набір символів = utf-8" +msgstr "За замовчуванням text/plain; charset=utf-8" -#: extras/models/models.py:413 +#: netbox/extras/models/models.py:413 msgid "file extension" msgstr "розширення файлу" -#: extras/models/models.py:416 +#: netbox/extras/models/models.py:416 msgid "Extension to append to the rendered filename" msgstr "Розширення для додавання до відтвореної назви файлу" -#: extras/models/models.py:419 +#: netbox/extras/models/models.py:419 msgid "as attachment" msgstr "як вкладення" -#: extras/models/models.py:421 +#: netbox/extras/models/models.py:421 msgid "Download file as attachment" msgstr "Завантажити файл як вкладення" -#: extras/models/models.py:430 +#: netbox/extras/models/models.py:430 msgid "export template" msgstr "експорт шаблону" -#: extras/models/models.py:431 +#: netbox/extras/models/models.py:431 msgid "export templates" msgstr "експортувати шаблони" -#: extras/models/models.py:448 +#: netbox/extras/models/models.py:448 #, python-brace-format msgid "\"{name}\" is a reserved name. Please choose a different name." msgstr "\"{name}\" - це зарезервована назва. Будь ласка, виберіть іншу назву." -#: extras/models/models.py:498 +#: netbox/extras/models/models.py:498 msgid "The object type(s) to which this filter applies." msgstr "Тип(и) об'єкта, до яких застосовується цей фільтр." -#: extras/models/models.py:530 +#: netbox/extras/models/models.py:530 msgid "shared" msgstr "спільні" -#: extras/models/models.py:543 +#: netbox/extras/models/models.py:543 msgid "saved filter" msgstr "збережений фільтр" -#: extras/models/models.py:544 +#: netbox/extras/models/models.py:544 msgid "saved filters" msgstr "збережені фільтри" -#: extras/models/models.py:562 +#: netbox/extras/models/models.py:562 msgid "Filter parameters must be stored as a dictionary of keyword arguments." msgstr "" "Параметри фільтра повинні зберігатися як словник аргументів ключових слів." -#: extras/models/models.py:590 +#: netbox/extras/models/models.py:590 msgid "image height" msgstr "висота зображення" -#: extras/models/models.py:593 +#: netbox/extras/models/models.py:593 msgid "image width" msgstr "ширина зображення" -#: extras/models/models.py:610 +#: netbox/extras/models/models.py:610 msgid "image attachment" msgstr "вкладення зображення" -#: extras/models/models.py:611 +#: netbox/extras/models/models.py:611 msgid "image attachments" msgstr "вкладення зображень" -#: extras/models/models.py:625 +#: netbox/extras/models/models.py:625 #, python-brace-format msgid "Image attachments cannot be assigned to this object type ({type})." msgstr "" "Вкладені зображення не можуть бути призначені для цього типу об'єкта " "({type})." -#: extras/models/models.py:688 +#: netbox/extras/models/models.py:688 msgid "kind" msgstr "добрий" -#: extras/models/models.py:702 +#: netbox/extras/models/models.py:702 msgid "journal entry" msgstr "запис журналу" -#: extras/models/models.py:703 +#: netbox/extras/models/models.py:703 msgid "journal entries" msgstr "записи журналу" -#: extras/models/models.py:718 +#: netbox/extras/models/models.py:718 #, python-brace-format msgid "Journaling is not supported for this object type ({type})." msgstr "Журналізація не підтримується для цього типу об'єктів ({type})." -#: extras/models/models.py:760 +#: netbox/extras/models/models.py:760 msgid "bookmark" msgstr "закладка" -#: extras/models/models.py:761 +#: netbox/extras/models/models.py:761 msgid "bookmarks" msgstr "закладки" -#: extras/models/models.py:774 +#: netbox/extras/models/models.py:774 #, python-brace-format msgid "Bookmarks cannot be assigned to this object type ({type})." msgstr "Закладки не можуть бути призначені для цього типу об'єкта ({type})." -#: extras/models/notifications.py:43 +#: netbox/extras/models/notifications.py:43 msgid "read" msgstr "читати" -#: extras/models/notifications.py:66 +#: netbox/extras/models/notifications.py:66 msgid "event" msgstr "подія" -#: extras/models/notifications.py:84 +#: netbox/extras/models/notifications.py:84 msgid "notification" msgstr "сповіщення" -#: extras/models/notifications.py:85 +#: netbox/extras/models/notifications.py:85 msgid "notifications" msgstr "сповіщення" -#: extras/models/notifications.py:99 extras/models/notifications.py:234 +#: netbox/extras/models/notifications.py:99 +#: netbox/extras/models/notifications.py:234 #, python-brace-format msgid "Objects of this type ({type}) do not support notifications." msgstr "Об'єкти такого типу ({type}) не підтримують сповіщення." -#: extras/models/notifications.py:137 users/models/users.py:58 -#: users/models/users.py:77 +#: netbox/extras/models/notifications.py:137 netbox/users/models/users.py:58 +#: netbox/users/models/users.py:77 msgid "groups" msgstr "груп" -#: extras/models/notifications.py:143 users/models/users.py:93 +#: netbox/extras/models/notifications.py:143 netbox/users/models/users.py:93 msgid "users" msgstr "користувачів" -#: extras/models/notifications.py:152 +#: netbox/extras/models/notifications.py:152 msgid "notification group" msgstr "група повідомлень" -#: extras/models/notifications.py:153 +#: netbox/extras/models/notifications.py:153 msgid "notification groups" msgstr "групи повідомлень" -#: extras/models/notifications.py:217 +#: netbox/extras/models/notifications.py:217 msgid "subscription" msgstr "підписка" -#: extras/models/notifications.py:218 +#: netbox/extras/models/notifications.py:218 msgid "subscriptions" msgstr "підписки" -#: extras/models/scripts.py:42 +#: netbox/extras/models/scripts.py:42 msgid "is executable" -msgstr "виконуваний" +msgstr "є виконуваним" -#: extras/models/scripts.py:64 +#: netbox/extras/models/scripts.py:64 msgid "script" msgstr "сценарій" -#: extras/models/scripts.py:65 +#: netbox/extras/models/scripts.py:65 msgid "scripts" msgstr "скриптів" -#: extras/models/scripts.py:111 +#: netbox/extras/models/scripts.py:111 msgid "script module" msgstr "модуль сценарію" -#: extras/models/scripts.py:112 +#: netbox/extras/models/scripts.py:112 msgid "script modules" msgstr "модулі скриптів" -#: extras/models/search.py:22 +#: netbox/extras/models/search.py:22 msgid "timestamp" msgstr "мітка часу" -#: extras/models/search.py:37 +#: netbox/extras/models/search.py:37 msgid "field" msgstr "поле" -#: extras/models/search.py:45 +#: netbox/extras/models/search.py:45 msgid "value" msgstr "значення" -#: extras/models/search.py:56 +#: netbox/extras/models/search.py:56 msgid "cached value" msgstr "кешоване значення" -#: extras/models/search.py:57 +#: netbox/extras/models/search.py:57 msgid "cached values" msgstr "кешовані значення" -#: extras/models/staging.py:44 +#: netbox/extras/models/staging.py:44 msgid "branch" msgstr "гілка" -#: extras/models/staging.py:45 +#: netbox/extras/models/staging.py:45 msgid "branches" -msgstr "відділення" +msgstr "гілки" -#: extras/models/staging.py:97 +#: netbox/extras/models/staging.py:97 msgid "staged change" msgstr "поетапна зміна" -#: extras/models/staging.py:98 +#: netbox/extras/models/staging.py:98 msgid "staged changes" msgstr "поетапні зміни" -#: extras/models/tags.py:40 +#: netbox/extras/models/tags.py:40 msgid "The object type(s) to which this tag can be applied." msgstr "Тип(и) об'єкта, до яких можна застосувати цю позначку." -#: extras/models/tags.py:49 +#: netbox/extras/models/tags.py:49 msgid "tag" msgstr "мітка" -#: extras/models/tags.py:50 +#: netbox/extras/models/tags.py:50 msgid "tags" msgstr "мітки" -#: extras/models/tags.py:78 +#: netbox/extras/models/tags.py:78 msgid "tagged item" msgstr "позначений предмет" -#: extras/models/tags.py:79 +#: netbox/extras/models/tags.py:79 msgid "tagged items" msgstr "позначені предмети" -#: extras/scripts.py:429 +#: netbox/extras/scripts.py:429 msgid "Script Data" msgstr "Дані сценарію" -#: extras/scripts.py:433 +#: netbox/extras/scripts.py:433 msgid "Script Execution Parameters" msgstr "Параметри виконання сценарію" -#: extras/tables/columns.py:12 templates/htmx/notifications.html:18 +#: netbox/extras/tables/columns.py:12 +#: netbox/templates/htmx/notifications.html:18 msgid "Dismiss" msgstr "Відхилити" -#: extras/tables/tables.py:62 extras/tables/tables.py:159 -#: extras/tables/tables.py:184 extras/tables/tables.py:250 -#: extras/tables/tables.py:276 extras/tables/tables.py:412 -#: extras/tables/tables.py:446 templates/extras/customfield.html:105 -#: templates/extras/eventrule.html:27 templates/users/objectpermission.html:64 -#: users/tables.py:80 +#: netbox/extras/tables/tables.py:62 netbox/extras/tables/tables.py:159 +#: netbox/extras/tables/tables.py:184 netbox/extras/tables/tables.py:250 +#: netbox/extras/tables/tables.py:276 netbox/extras/tables/tables.py:412 +#: netbox/extras/tables/tables.py:446 +#: netbox/templates/extras/customfield.html:105 +#: netbox/templates/extras/eventrule.html:27 +#: netbox/templates/users/objectpermission.html:64 netbox/users/tables.py:80 msgid "Object Types" msgstr "Типи об'єктів" -#: extras/tables/tables.py:69 +#: netbox/extras/tables/tables.py:69 msgid "Validate Uniqueness" msgstr "Перевірте унікальність" -#: extras/tables/tables.py:73 +#: netbox/extras/tables/tables.py:73 msgid "Visible" msgstr "видимий" -#: extras/tables/tables.py:76 +#: netbox/extras/tables/tables.py:76 msgid "Editable" msgstr "Редагований" -#: extras/tables/tables.py:82 +#: netbox/extras/tables/tables.py:82 msgid "Related Object Type" msgstr "Пов'язаний тип об'єкта" -#: extras/tables/tables.py:86 templates/extras/customfield.html:51 +#: netbox/extras/tables/tables.py:86 +#: netbox/templates/extras/customfield.html:51 msgid "Choice Set" msgstr "Набір вибору" -#: extras/tables/tables.py:94 +#: netbox/extras/tables/tables.py:94 msgid "Is Cloneable" msgstr "Чи можна клонувати" -#: extras/tables/tables.py:98 templates/extras/customfield.html:118 +#: netbox/extras/tables/tables.py:98 +#: netbox/templates/extras/customfield.html:118 msgid "Minimum Value" msgstr "Мінімальне значення" -#: extras/tables/tables.py:101 templates/extras/customfield.html:122 +#: netbox/extras/tables/tables.py:101 +#: netbox/templates/extras/customfield.html:122 msgid "Maximum Value" msgstr "Максимальне значення" -#: extras/tables/tables.py:104 +#: netbox/extras/tables/tables.py:104 msgid "Validation Regex" -msgstr "Перевірка регулярного вираза " +msgstr "Перевірка регулярного вираза" -#: extras/tables/tables.py:137 +#: netbox/extras/tables/tables.py:137 msgid "Count" msgstr "Графік" -#: extras/tables/tables.py:140 +#: netbox/extras/tables/tables.py:140 msgid "Order Alphabetically" msgstr "Порядок за алфавітом" -#: extras/tables/tables.py:165 templates/extras/customlink.html:33 +#: netbox/extras/tables/tables.py:165 +#: netbox/templates/extras/customlink.html:33 msgid "New Window" msgstr "Нове вікно" -#: extras/tables/tables.py:187 +#: netbox/extras/tables/tables.py:187 msgid "As Attachment" msgstr "Як вкладення" -#: extras/tables/tables.py:195 extras/tables/tables.py:487 -#: extras/tables/tables.py:522 templates/core/datafile.html:24 -#: templates/dcim/device/render_config.html:22 -#: templates/extras/configcontext.html:39 -#: templates/extras/configtemplate.html:31 -#: templates/extras/exporttemplate.html:45 -#: templates/generic/bulk_import.html:35 -#: templates/virtualization/virtualmachine/render_config.html:22 +#: netbox/extras/tables/tables.py: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/generic/bulk_import.html:35 +#: netbox/templates/virtualization/virtualmachine/render_config.html:22 msgid "Data File" msgstr "Файл даних" -#: extras/tables/tables.py:200 extras/tables/tables.py:499 -#: extras/tables/tables.py:527 +#: netbox/extras/tables/tables.py:200 netbox/extras/tables/tables.py:499 +#: netbox/extras/tables/tables.py:527 msgid "Synced" msgstr "Синхронізовано" -#: extras/tables/tables.py:227 +#: netbox/extras/tables/tables.py:227 msgid "Image" msgstr "Зображення" -#: extras/tables/tables.py:232 +#: netbox/extras/tables/tables.py:232 msgid "Size (Bytes)" msgstr "Розмір (байт)" -#: extras/tables/tables.py:339 +#: netbox/extras/tables/tables.py:339 msgid "Read" msgstr "Читати" -#: extras/tables/tables.py:382 +#: netbox/extras/tables/tables.py:382 msgid "SSL Validation" msgstr "Перевірка SSL" -#: extras/tables/tables.py:418 templates/extras/eventrule.html:37 +#: netbox/extras/tables/tables.py:418 +#: netbox/templates/extras/eventrule.html:37 msgid "Event Types" msgstr "Типи подій" -#: extras/tables/tables.py:535 netbox/navigation/menu.py:77 -#: templates/dcim/devicerole.html:8 +#: netbox/extras/tables/tables.py:535 netbox/netbox/navigation/menu.py:77 +#: netbox/templates/dcim/devicerole.html:8 msgid "Device Roles" msgstr "Ролі пристроїв" -#: extras/tables/tables.py:587 +#: netbox/extras/tables/tables.py:587 msgid "Comments (Short)" msgstr "Коментарі (короткі)" -#: extras/tables/tables.py:606 extras/tables/tables.py:640 +#: netbox/extras/tables/tables.py:606 netbox/extras/tables/tables.py:640 msgid "Line" msgstr "Лінія" -#: extras/tables/tables.py:613 extras/tables/tables.py:650 +#: netbox/extras/tables/tables.py:613 netbox/extras/tables/tables.py:650 msgid "Level" msgstr "Рівень" -#: extras/tables/tables.py:619 extras/tables/tables.py:659 +#: netbox/extras/tables/tables.py:619 netbox/extras/tables/tables.py:659 msgid "Message" msgstr "Повідомлення" -#: extras/tables/tables.py:643 +#: netbox/extras/tables/tables.py:643 msgid "Method" msgstr "Метод" -#: extras/validators.py:15 +#: netbox/extras/validators.py:15 #, python-format msgid "Ensure this value is equal to %(limit_value)s." msgstr "Переконайтеся, що це значення дорівнює %(limit_value)s." -#: extras/validators.py:26 +#: netbox/extras/validators.py:26 #, python-format msgid "Ensure this value does not equal %(limit_value)s." msgstr "Переконайтеся, що це значення не дорівнює %(limit_value)s." -#: extras/validators.py:37 +#: netbox/extras/validators.py:37 msgid "This field must be empty." msgstr "Це поле має бути порожнім." -#: extras/validators.py:52 +#: netbox/extras/validators.py:52 msgid "This field must not be empty." msgstr "Це поле не повинно бути порожнім." -#: extras/validators.py:94 +#: netbox/extras/validators.py:94 msgid "Validation rules must be passed as a dictionary" msgstr "Правила перевірки повинні бути передані як словник" -#: extras/validators.py:119 +#: netbox/extras/validators.py:119 #, python-brace-format msgid "Custom validation failed for {attribute}: {exception}" msgstr "" "Користувацька перевірка зіткнулася з невдачею через{attribute}: {exception}" -#: extras/validators.py:133 +#: netbox/extras/validators.py:133 #, python-brace-format msgid "Invalid attribute \"{name}\" for request" msgstr "Невірний атрибут \"{name}\" за запитом" -#: extras/validators.py:150 +#: netbox/extras/validators.py:150 #, python-brace-format msgid "Invalid attribute \"{name}\" for {model}" msgstr "Невірний атрибут \"{name}\" для {model}" -#: extras/views.py:960 +#: netbox/extras/views.py:960 msgid "Your dashboard has been reset." msgstr "Ваша інформаційна панель була скинута." -#: extras/views.py:1006 +#: netbox/extras/views.py:1006 msgid "Added widget: " msgstr "Доданий віджет: " -#: extras/views.py:1047 +#: netbox/extras/views.py:1047 msgid "Updated widget: " msgstr "Оновлений віджет: " -#: extras/views.py:1083 +#: netbox/extras/views.py:1083 msgid "Deleted widget: " msgstr "Видалений віджет: " -#: extras/views.py:1085 +#: netbox/extras/views.py:1085 msgid "Error deleting widget: " msgstr "Помилка при видаленні віджета: " -#: extras/views.py:1172 +#: netbox/extras/views.py:1175 msgid "Unable to run script: RQ worker process not running." msgstr "Неможливо запустити скрипт: робочий процес RQ не запущений." -#: ipam/api/field_serializers.py:17 +#: netbox/ipam/api/field_serializers.py:17 msgid "Enter a valid IPv4 or IPv6 address with optional mask." msgstr "Введіть дійсну адресу IPv4 або IPv6 з необов'язковою маскою." -#: ipam/api/field_serializers.py:24 +#: netbox/ipam/api/field_serializers.py:24 #, python-brace-format msgid "Invalid IP address format: {data}" msgstr "Невірний формат IP-адреси: {data}" -#: ipam/api/field_serializers.py:37 +#: netbox/ipam/api/field_serializers.py:37 msgid "Enter a valid IPv4 or IPv6 prefix and mask in CIDR notation." -msgstr "Введіть дійсний префікс IPv4 або IPv6 та маску в позначенні CIDR." +msgstr "" +"Введіть дійсний мережевий префікс IPv4 або IPv6 та маску в позначенні CIDR." -#: ipam/api/field_serializers.py:44 +#: netbox/ipam/api/field_serializers.py:44 #, python-brace-format msgid "Invalid IP prefix format: {data}" msgstr "Невірний формат префікса IP: {data}" -#: ipam/api/views.py:358 +#: netbox/ipam/api/views.py:358 msgid "" "Insufficient space is available to accommodate the requested prefix size(s)" msgstr "Недостатньо місця для розміщення запитуваного розміру префікса" -#: ipam/choices.py:30 +#: netbox/ipam/choices.py:30 msgid "Container" msgstr "Контейнер" -#: ipam/choices.py:72 +#: netbox/ipam/choices.py:72 msgid "DHCP" msgstr "DHCP" -#: ipam/choices.py:73 +#: netbox/ipam/choices.py:73 msgid "SLAAC" -msgstr "СЛААК" +msgstr "SLAAC" -#: ipam/choices.py:89 +#: netbox/ipam/choices.py:89 msgid "Loopback" -msgstr "Петлебек" +msgstr "Loopback" -#: ipam/choices.py:91 +#: netbox/ipam/choices.py:91 msgid "Anycast" msgstr "Анікаст" -#: ipam/choices.py:115 +#: netbox/ipam/choices.py:115 msgid "Standard" msgstr "Стандарт" -#: ipam/choices.py:120 +#: netbox/ipam/choices.py:120 msgid "CheckPoint" msgstr "Контрольна точка" -#: ipam/choices.py:123 +#: netbox/ipam/choices.py:123 msgid "Cisco" msgstr "Cisco" -#: ipam/choices.py:137 +#: netbox/ipam/choices.py:137 msgid "Plaintext" msgstr "Простий текст" -#: ipam/fields.py:36 +#: netbox/ipam/fields.py:36 #, python-brace-format msgid "Invalid IP address format: {address}" msgstr "Невірний формат IP-адреси: {address}" -#: ipam/filtersets.py:48 vpn/filtersets.py:304 +#: netbox/ipam/filtersets.py:48 netbox/vpn/filtersets.py:304 msgid "Import target" msgstr "Імпортувати ціль" -#: ipam/filtersets.py:54 vpn/filtersets.py:310 +#: netbox/ipam/filtersets.py:54 netbox/vpn/filtersets.py:310 msgid "Import target (name)" msgstr "Імпорт цілі (назва)" -#: ipam/filtersets.py:59 vpn/filtersets.py:315 +#: netbox/ipam/filtersets.py:59 netbox/vpn/filtersets.py:315 msgid "Export target" msgstr "Ціль експорту" -#: ipam/filtersets.py:65 vpn/filtersets.py:321 +#: netbox/ipam/filtersets.py:65 netbox/vpn/filtersets.py:321 msgid "Export target (name)" msgstr "Ціль експорту (назва)" -#: ipam/filtersets.py:86 +#: netbox/ipam/filtersets.py:86 msgid "Importing VRF" msgstr "Імпортування VRF" -#: ipam/filtersets.py:92 +#: netbox/ipam/filtersets.py:92 msgid "Import VRF (RD)" msgstr "Імпорт VRF (RD)" -#: ipam/filtersets.py:97 +#: netbox/ipam/filtersets.py:97 msgid "Exporting VRF" msgstr "Експорт VRF" -#: ipam/filtersets.py:103 +#: netbox/ipam/filtersets.py:103 msgid "Export VRF (RD)" msgstr "Експорт VRF (RD)" -#: ipam/filtersets.py:108 +#: netbox/ipam/filtersets.py:108 msgid "Importing L2VPN" msgstr "Імпорт L2VPN" -#: ipam/filtersets.py:114 +#: netbox/ipam/filtersets.py:114 msgid "Importing L2VPN (identifier)" msgstr "Імпорт L2VPN (ідентифікатор)" -#: ipam/filtersets.py:119 +#: netbox/ipam/filtersets.py:119 msgid "Exporting L2VPN" msgstr "Експорт L2VPN" -#: ipam/filtersets.py:125 +#: netbox/ipam/filtersets.py:125 msgid "Exporting L2VPN (identifier)" msgstr "Експорт L2VPN (ідентифікатор)" -#: ipam/filtersets.py:155 ipam/filtersets.py:281 ipam/forms/model_forms.py:229 -#: ipam/tables/ip.py:212 templates/ipam/prefix.html:12 +#: netbox/ipam/filtersets.py:155 netbox/ipam/filtersets.py:281 +#: netbox/ipam/forms/model_forms.py:229 netbox/ipam/tables/ip.py:212 +#: netbox/templates/ipam/prefix.html:12 msgid "Prefix" msgstr "Префікс" -#: ipam/filtersets.py:159 ipam/filtersets.py:198 ipam/filtersets.py:221 +#: netbox/ipam/filtersets.py:159 netbox/ipam/filtersets.py:198 +#: netbox/ipam/filtersets.py:221 msgid "RIR (ID)" msgstr "RIR (ідентифікатор)" -#: ipam/filtersets.py:165 ipam/filtersets.py:204 ipam/filtersets.py:227 +#: netbox/ipam/filtersets.py:165 netbox/ipam/filtersets.py:204 +#: netbox/ipam/filtersets.py:227 msgid "RIR (slug)" -msgstr "RIR (скоречення)" +msgstr "RIR (скорочення)" -#: ipam/filtersets.py:285 +#: netbox/ipam/filtersets.py:285 msgid "Within prefix" -msgstr "Всередині префікса" +msgstr "У межах префікса" -#: ipam/filtersets.py:289 +#: netbox/ipam/filtersets.py:289 msgid "Within and including prefix" -msgstr "Всередині та включаючи префікс" +msgstr "У межах та включаючи префікс" -#: ipam/filtersets.py:293 +#: netbox/ipam/filtersets.py:293 msgid "Prefixes which contain this prefix or IP" msgstr "Мережеві префікси, які містять цей префікс або IP" -#: ipam/filtersets.py:304 ipam/filtersets.py:572 ipam/forms/bulk_edit.py:343 -#: ipam/forms/filtersets.py:196 ipam/forms/filtersets.py:331 +#: netbox/ipam/filtersets.py:304 netbox/ipam/filtersets.py:572 +#: netbox/ipam/forms/bulk_edit.py:343 netbox/ipam/forms/filtersets.py:196 +#: netbox/ipam/forms/filtersets.py:331 msgid "Mask length" msgstr "Довжина маски" -#: ipam/filtersets.py:373 vpn/filtersets.py:427 +#: netbox/ipam/filtersets.py:373 netbox/vpn/filtersets.py:427 msgid "VLAN (ID)" msgstr "VLAN (ідентифікатор)" -#: ipam/filtersets.py:377 vpn/filtersets.py:422 +#: netbox/ipam/filtersets.py:377 netbox/vpn/filtersets.py:422 msgid "VLAN number (1-4094)" msgstr "Номер VLAN (1-4094)" -#: ipam/filtersets.py:471 ipam/filtersets.py:475 ipam/filtersets.py:567 -#: ipam/forms/model_forms.py:463 templates/tenancy/contact.html:53 -#: tenancy/forms/bulk_edit.py:113 +#: netbox/ipam/filtersets.py:471 netbox/ipam/filtersets.py:475 +#: netbox/ipam/filtersets.py:567 netbox/ipam/forms/model_forms.py:496 +#: netbox/templates/tenancy/contact.html:53 +#: netbox/tenancy/forms/bulk_edit.py:113 msgid "Address" msgstr "Адреса" -#: ipam/filtersets.py:479 +#: netbox/ipam/filtersets.py:479 msgid "Ranges which contain this prefix or IP" msgstr "Діапазони, які містять цей префікс або IP" -#: ipam/filtersets.py:507 ipam/filtersets.py:563 +#: netbox/ipam/filtersets.py:507 netbox/ipam/filtersets.py:563 msgid "Parent prefix" msgstr "Батьківський префікс" -#: ipam/filtersets.py:616 ipam/filtersets.py:856 ipam/filtersets.py:1131 -#: vpn/filtersets.py:385 +#: netbox/ipam/filtersets.py:616 netbox/ipam/filtersets.py:856 +#: netbox/ipam/filtersets.py:1131 netbox/vpn/filtersets.py:385 msgid "Virtual machine (name)" msgstr "Віртуальна машина (назва)" -#: ipam/filtersets.py:621 ipam/filtersets.py:861 ipam/filtersets.py:1125 -#: virtualization/filtersets.py:282 virtualization/filtersets.py:321 -#: vpn/filtersets.py:390 +#: netbox/ipam/filtersets.py:621 netbox/ipam/filtersets.py:861 +#: netbox/ipam/filtersets.py:1125 netbox/virtualization/filtersets.py:282 +#: netbox/virtualization/filtersets.py:321 netbox/vpn/filtersets.py:390 msgid "Virtual machine (ID)" msgstr "Віртуальна машина (ідентифікатор)" -#: ipam/filtersets.py:627 vpn/filtersets.py:97 vpn/filtersets.py:396 +#: netbox/ipam/filtersets.py:627 netbox/vpn/filtersets.py:97 +#: netbox/vpn/filtersets.py:396 msgid "Interface (name)" msgstr "Інтерфейс (назва)" -#: ipam/filtersets.py:638 vpn/filtersets.py:108 vpn/filtersets.py:407 +#: netbox/ipam/filtersets.py:638 netbox/vpn/filtersets.py:108 +#: netbox/vpn/filtersets.py:407 msgid "VM interface (name)" msgstr "Інтерфейс віртуальної машини (назва)" -#: ipam/filtersets.py:643 vpn/filtersets.py:113 +#: netbox/ipam/filtersets.py:643 netbox/vpn/filtersets.py:113 msgid "VM interface (ID)" msgstr "Інтерфейс віртуальної машини (ідентифікатор)" -#: ipam/filtersets.py:648 +#: netbox/ipam/filtersets.py:648 msgid "FHRP group (ID)" msgstr "Група FHRP/VRRP (ідентифікатор)" -#: ipam/filtersets.py:652 +#: netbox/ipam/filtersets.py:652 msgid "Is assigned to an interface" msgstr "Призначений до інтерфейсу" -#: ipam/filtersets.py:656 +#: netbox/ipam/filtersets.py:656 msgid "Is assigned" msgstr "призначається" -#: ipam/filtersets.py:668 +#: netbox/ipam/filtersets.py:668 msgid "Service (ID)" msgstr "Сервіс (ідентифікатор)" -#: ipam/filtersets.py:673 +#: netbox/ipam/filtersets.py:673 msgid "NAT inside IP address (ID)" -msgstr "NAT всередині IP-адреси (ідентифікатор)" +msgstr "NAT внутрішня IP-адреса (ідентифікатор)" -#: ipam/filtersets.py:1041 ipam/forms/bulk_import.py:322 +#: netbox/ipam/filtersets.py:1041 netbox/ipam/forms/bulk_import.py:322 msgid "Assigned interface" msgstr "Призначений інтерфейс" -#: ipam/filtersets.py:1046 +#: netbox/ipam/filtersets.py:1046 msgid "Assigned VM interface" msgstr "Призначений інтерфейс віртуальної машини" -#: ipam/filtersets.py:1136 +#: netbox/ipam/filtersets.py:1136 msgid "IP address (ID)" msgstr "IP-адреса (ідентифікатор)" -#: ipam/filtersets.py:1142 ipam/models/ip.py:788 +#: netbox/ipam/filtersets.py:1142 netbox/ipam/models/ip.py:788 msgid "IP address" msgstr "IP-адреса" -#: ipam/filtersets.py:1167 +#: netbox/ipam/filtersets.py:1167 msgid "Primary IPv4 (ID)" -msgstr "Первинний IPv4 (ідентифікатор)" +msgstr "Первинна адреса IPv4 (ідентифікатор)" -#: ipam/filtersets.py:1172 +#: netbox/ipam/filtersets.py:1172 msgid "Primary IPv6 (ID)" -msgstr "Первинний IPv6 (ідентифікатор)" +msgstr "Первинна адреса IPv6 (ідентифікатор)" -#: ipam/formfields.py:14 +#: netbox/ipam/formfields.py:14 msgid "Enter a valid IPv4 or IPv6 address (without a mask)." msgstr "Введіть дійсну адресу IPv4 або IPv6 (без маски)." -#: ipam/formfields.py:32 +#: netbox/ipam/formfields.py:32 #, python-brace-format msgid "Invalid IPv4/IPv6 address format: {address}" msgstr "Невірний формат адреси IPv4/IPv6: {address}" -#: ipam/formfields.py:37 +#: netbox/ipam/formfields.py:37 msgid "This field requires an IP address without a mask." msgstr "Для цього поля потрібна IP-адреса без маски." -#: ipam/formfields.py:39 ipam/formfields.py:61 +#: netbox/ipam/formfields.py:39 netbox/ipam/formfields.py:61 msgid "Please specify a valid IPv4 or IPv6 address." msgstr "Будь ласка, вкажіть дійсну адресу IPv4 або IPv6." -#: ipam/formfields.py:44 +#: netbox/ipam/formfields.py:44 msgid "Enter a valid IPv4 or IPv6 address (with CIDR mask)." msgstr "Введіть дійсну адресу IPv4 або IPv6 (з маскою CIDR)." -#: ipam/formfields.py:56 +#: netbox/ipam/formfields.py:56 msgid "CIDR mask (e.g. /24) is required." msgstr "Потрібна маска CIDR (наприклад, /24)." -#: ipam/forms/bulk_create.py:13 +#: netbox/ipam/forms/bulk_create.py:13 msgid "Address pattern" msgstr "Адресний шаблон" -#: ipam/forms/bulk_edit.py:50 +#: netbox/ipam/forms/bulk_edit.py:50 msgid "Enforce unique space" -msgstr "Забезпечте унікальний простір" +msgstr "Забезпечте унікальність простору" -#: ipam/forms/bulk_edit.py:88 +#: netbox/ipam/forms/bulk_edit.py:88 msgid "Is private" msgstr "Є приватним" -#: ipam/forms/bulk_edit.py:109 ipam/forms/bulk_edit.py:138 -#: ipam/forms/bulk_edit.py:163 ipam/forms/bulk_import.py:89 -#: ipam/forms/bulk_import.py:109 ipam/forms/bulk_import.py:129 -#: ipam/forms/filtersets.py:110 ipam/forms/filtersets.py:125 -#: ipam/forms/filtersets.py:148 ipam/forms/model_forms.py:96 -#: ipam/forms/model_forms.py:109 ipam/forms/model_forms.py:131 -#: ipam/forms/model_forms.py:149 ipam/models/asns.py:31 -#: ipam/models/asns.py:103 ipam/models/ip.py:71 ipam/models/ip.py:90 -#: ipam/tables/asn.py:20 ipam/tables/asn.py:45 -#: templates/ipam/aggregate.html:18 templates/ipam/asn.html:27 -#: templates/ipam/asnrange.html:19 templates/ipam/rir.html:19 +#: netbox/ipam/forms/bulk_edit.py: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/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 "ЗРИГНУТИ" +msgstr "RIR" -#: ipam/forms/bulk_edit.py:171 +#: netbox/ipam/forms/bulk_edit.py:171 msgid "Date added" msgstr "Дата додавання" -#: ipam/forms/bulk_edit.py:229 ipam/forms/model_forms.py:586 -#: ipam/forms/model_forms.py:633 ipam/tables/ip.py:251 -#: templates/ipam/vlan_edit.html:37 templates/ipam/vlangroup.html:27 +#: 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/templates/ipam/vlangroup.html:27 msgid "VLAN Group" msgstr "Група VLAN" -#: ipam/forms/bulk_edit.py:234 ipam/forms/bulk_import.py:185 -#: ipam/forms/filtersets.py:256 ipam/forms/model_forms.py:218 -#: ipam/models/vlans.py:234 ipam/tables/ip.py:255 -#: templates/ipam/prefix.html:60 templates/ipam/vlan.html:12 -#: templates/ipam/vlan/base.html:6 templates/ipam/vlan_edit.html:10 -#: templates/wireless/wirelesslan.html:30 vpn/forms/bulk_import.py:304 -#: vpn/forms/filtersets.py:284 vpn/forms/model_forms.py:433 -#: vpn/forms/model_forms.py:452 wireless/forms/bulk_edit.py:55 -#: wireless/forms/bulk_import.py:48 wireless/forms/model_forms.py:48 -#: wireless/models.py:102 +#: 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/templates/ipam/vlan/base.html:6 +#: netbox/templates/ipam/vlan_edit.html:10 +#: netbox/templates/wireless/wirelesslan.html:30 +#: netbox/vpn/forms/bulk_import.py:304 netbox/vpn/forms/filtersets.py:284 +#: netbox/vpn/forms/model_forms.py:433 netbox/vpn/forms/model_forms.py:452 +#: netbox/wireless/forms/bulk_edit.py:55 +#: netbox/wireless/forms/bulk_import.py:48 +#: netbox/wireless/forms/model_forms.py:48 netbox/wireless/models.py:102 msgid "VLAN" msgstr "VLAN" -#: ipam/forms/bulk_edit.py:245 +#: netbox/ipam/forms/bulk_edit.py:245 msgid "Prefix length" msgstr "Довжина префікса" -#: ipam/forms/bulk_edit.py:268 ipam/forms/filtersets.py:241 -#: templates/ipam/prefix.html:85 +#: netbox/ipam/forms/bulk_edit.py:268 netbox/ipam/forms/filtersets.py:241 +#: netbox/templates/ipam/prefix.html:85 msgid "Is a pool" -msgstr "Чи є басейн" +msgstr "Чи є пулом" -#: ipam/forms/bulk_edit.py:273 ipam/forms/bulk_edit.py:318 -#: ipam/forms/filtersets.py:248 ipam/forms/filtersets.py:293 -#: ipam/models/ip.py:272 ipam/models/ip.py:539 +#: netbox/ipam/forms/bulk_edit.py: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 msgid "Treat as fully utilized" -msgstr "Ставтеся до повного використання" +msgstr "Вважати повністю використаним" -#: ipam/forms/bulk_edit.py:287 ipam/forms/filtersets.py:171 +#: netbox/ipam/forms/bulk_edit.py:287 netbox/ipam/forms/filtersets.py:171 msgid "VLAN Assignment" msgstr "Призначення VLAN" -#: ipam/forms/bulk_edit.py:366 ipam/models/ip.py:772 +#: netbox/ipam/forms/bulk_edit.py:366 netbox/ipam/models/ip.py:772 msgid "DNS name" msgstr "Ім'я DNS" -#: ipam/forms/bulk_edit.py:387 ipam/forms/bulk_edit.py:534 -#: ipam/forms/bulk_import.py:394 ipam/forms/bulk_import.py:469 -#: ipam/forms/bulk_import.py:495 ipam/forms/filtersets.py:390 -#: ipam/forms/filtersets.py:530 templates/ipam/fhrpgroup.html:22 -#: templates/ipam/inc/panels/fhrp_groups.html:24 -#: templates/ipam/service.html:32 templates/ipam/servicetemplate.html:19 +#: netbox/ipam/forms/bulk_edit.py: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/templates/ipam/inc/panels/fhrp_groups.html:24 +#: netbox/templates/ipam/service.html:32 +#: netbox/templates/ipam/servicetemplate.html:19 msgid "Protocol" msgstr "Протокол" -#: ipam/forms/bulk_edit.py:394 ipam/forms/filtersets.py:397 -#: ipam/tables/fhrp.py:22 templates/ipam/fhrpgroup.html:26 +#: netbox/ipam/forms/bulk_edit.py:394 netbox/ipam/forms/filtersets.py:397 +#: netbox/ipam/tables/fhrp.py:22 netbox/templates/ipam/fhrpgroup.html:26 msgid "Group ID" msgstr "Ідентифікатор групи" -#: ipam/forms/bulk_edit.py:399 ipam/forms/filtersets.py:402 -#: wireless/forms/bulk_edit.py:68 wireless/forms/bulk_edit.py:115 -#: wireless/forms/bulk_import.py:62 wireless/forms/bulk_import.py:65 -#: wireless/forms/bulk_import.py:104 wireless/forms/bulk_import.py:107 -#: wireless/forms/filtersets.py:54 wireless/forms/filtersets.py:88 +#: netbox/ipam/forms/bulk_edit.py: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 msgid "Authentication type" msgstr "Тип аутентифікації" -#: ipam/forms/bulk_edit.py:404 ipam/forms/filtersets.py:406 +#: netbox/ipam/forms/bulk_edit.py:404 netbox/ipam/forms/filtersets.py:406 msgid "Authentication key" msgstr "Ключ аутентифікації" -#: ipam/forms/bulk_edit.py:421 ipam/forms/filtersets.py:383 -#: ipam/forms/model_forms.py:474 netbox/navigation/menu.py:386 -#: templates/ipam/fhrpgroup.html:49 -#: templates/wireless/inc/authentication_attrs.html:5 -#: wireless/forms/bulk_edit.py:91 wireless/forms/bulk_edit.py:149 -#: wireless/forms/filtersets.py:36 wireless/forms/filtersets.py:76 -#: wireless/forms/model_forms.py:55 wireless/forms/model_forms.py:171 +#: 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/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 msgid "Authentication" msgstr "Аутентифікація" -#: ipam/forms/bulk_edit.py:436 ipam/forms/model_forms.py:575 +#: netbox/ipam/forms/bulk_edit.py:436 netbox/ipam/forms/model_forms.py:608 msgid "Scope type" msgstr "Тип сфери застосування" -#: ipam/forms/bulk_edit.py:439 ipam/forms/bulk_edit.py:453 -#: ipam/forms/model_forms.py:578 ipam/forms/model_forms.py:588 -#: ipam/tables/vlans.py:71 templates/ipam/vlangroup.html:38 +#: 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 "Сфера застосування" -#: ipam/forms/bulk_edit.py:446 ipam/models/vlans.py:60 +#: netbox/ipam/forms/bulk_edit.py:446 netbox/ipam/models/vlans.py:60 msgid "VLAN ID ranges" msgstr "Діапазони ідентифікаторів VLAN" -#: ipam/forms/bulk_edit.py:525 +#: netbox/ipam/forms/bulk_edit.py:525 msgid "Site & Group" msgstr "Тех. майданчик і група" -#: ipam/forms/bulk_edit.py:539 ipam/forms/model_forms.py:659 -#: ipam/forms/model_forms.py:691 ipam/tables/services.py:19 -#: ipam/tables/services.py:49 templates/ipam/service.html:36 -#: templates/ipam/servicetemplate.html:23 +#: netbox/ipam/forms/bulk_edit.py:539 netbox/ipam/forms/model_forms.py:692 +#: netbox/ipam/forms/model_forms.py:724 netbox/ipam/tables/services.py:19 +#: netbox/ipam/tables/services.py:49 netbox/templates/ipam/service.html:36 +#: netbox/templates/ipam/servicetemplate.html:23 msgid "Ports" msgstr "Порти" -#: ipam/forms/bulk_import.py:48 +#: netbox/ipam/forms/bulk_import.py:48 msgid "Import route targets" -msgstr "Імпортувати цілі маршруту" +msgstr "Імпортувати маршрути до цілей" -#: ipam/forms/bulk_import.py:54 +#: netbox/ipam/forms/bulk_import.py:54 msgid "Export route targets" -msgstr "Експортувати цілі маршруту" +msgstr "Експортувати маршрути до цілей" -#: ipam/forms/bulk_import.py:92 ipam/forms/bulk_import.py:112 -#: ipam/forms/bulk_import.py:132 +#: netbox/ipam/forms/bulk_import.py:92 netbox/ipam/forms/bulk_import.py:112 +#: netbox/ipam/forms/bulk_import.py:132 msgid "Assigned RIR" msgstr "Призначений RIR" -#: ipam/forms/bulk_import.py:182 +#: netbox/ipam/forms/bulk_import.py:182 msgid "VLAN's group (if any)" -msgstr "Група VLAN (якщо така є)" +msgstr "Група VLAN'ів (якщо така є)" -#: ipam/forms/bulk_import.py:308 +#: netbox/ipam/forms/bulk_import.py:308 msgid "Parent device of assigned interface (if any)" msgstr "Батьківський пристрій призначеного інтерфейсу (якщо є)" -#: ipam/forms/bulk_import.py:311 ipam/forms/bulk_import.py:488 -#: ipam/forms/model_forms.py:685 virtualization/filtersets.py:288 -#: virtualization/filtersets.py:327 virtualization/forms/bulk_edit.py:200 -#: virtualization/forms/bulk_edit.py:326 -#: virtualization/forms/bulk_import.py:146 -#: virtualization/forms/bulk_import.py:207 -#: virtualization/forms/filtersets.py:212 -#: virtualization/forms/filtersets.py:248 -#: virtualization/forms/model_forms.py:288 vpn/forms/bulk_import.py:93 -#: vpn/forms/bulk_import.py:290 +#: 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 "Віртуальна машина" -#: ipam/forms/bulk_import.py:315 +#: netbox/ipam/forms/bulk_import.py:315 msgid "Parent VM of assigned interface (if any)" msgstr "Батьківська віртуальна машина призначеного інтерфейсу (якщо є)" -#: ipam/forms/bulk_import.py:325 +#: netbox/ipam/forms/bulk_import.py:325 msgid "Is primary" msgstr "Є первинним" -#: ipam/forms/bulk_import.py:326 +#: netbox/ipam/forms/bulk_import.py:326 msgid "Make this the primary IP for the assigned device" msgstr "Зробіть це основним IP для призначеного пристрою" -#: ipam/forms/bulk_import.py:365 +#: netbox/ipam/forms/bulk_import.py:330 +msgid "Is out-of-band" +msgstr "" + +#: netbox/ipam/forms/bulk_import.py:331 +msgid "Designate this as the out-of-band IP address for the assigned device" +msgstr "" + +#: netbox/ipam/forms/bulk_import.py:371 msgid "No device or virtual machine specified; cannot set as primary IP" msgstr "" -"Пристрій або віртуальна машина не вказано; неможливо встановити як основний " -"IP" +"Пристрій або віртуальна машина не вказано; неможливо встановити як первинний" +" IP" -#: ipam/forms/bulk_import.py:369 +#: netbox/ipam/forms/bulk_import.py:375 +msgid "No device specified; cannot set as out-of-band IP" +msgstr "" + +#: netbox/ipam/forms/bulk_import.py:379 +msgid "Cannot set out-of-band IP for virtual machines" +msgstr "" + +#: netbox/ipam/forms/bulk_import.py:383 msgid "No interface specified; cannot set as primary IP" -msgstr "Інтерфейс не вказано; неможливо встановити як основний IP" +msgstr "Інтерфейс не вказано; неможливо встановити як первинний IP" -#: ipam/forms/bulk_import.py:398 +#: netbox/ipam/forms/bulk_import.py:387 +msgid "No interface specified; cannot set as out-of-band IP" +msgstr "" + +#: netbox/ipam/forms/bulk_import.py:422 msgid "Auth type" msgstr "Тип авторизації" -#: ipam/forms/bulk_import.py:413 +#: netbox/ipam/forms/bulk_import.py:437 msgid "Scope type (app & model)" msgstr "Тип сфери застосування (додаток і модель)" -#: ipam/forms/bulk_import.py:440 +#: netbox/ipam/forms/bulk_import.py:464 msgid "Assigned VLAN group" msgstr "Призначена група VLAN" -#: ipam/forms/bulk_import.py:471 ipam/forms/bulk_import.py:497 +#: netbox/ipam/forms/bulk_import.py:495 netbox/ipam/forms/bulk_import.py:521 msgid "IP protocol" msgstr "протокол IP" -#: ipam/forms/bulk_import.py:485 +#: netbox/ipam/forms/bulk_import.py:509 msgid "Required if not assigned to a VM" -msgstr "Необхідний, якщо він не призначений для віртуальної машини" +msgstr "Необхідний, якщо він не був призначений для віртуальної машини" -#: ipam/forms/bulk_import.py:492 +#: netbox/ipam/forms/bulk_import.py:516 msgid "Required if not assigned to a device" -msgstr "Обов'язково, якщо пристрій не призначений" +msgstr "Обов'язково, якщо він не був призначений для пристрою" -#: ipam/forms/bulk_import.py:517 +#: netbox/ipam/forms/bulk_import.py:541 #, python-brace-format msgid "{ip} is not assigned to this device/VM." msgstr "{ip} не призначається цьому пристрою/віртуальній машині." -#: ipam/forms/filtersets.py:47 ipam/forms/model_forms.py:63 -#: netbox/navigation/menu.py:189 vpn/forms/model_forms.py:410 +#: 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 msgid "Route Targets" -msgstr "Маршрутні цілі" +msgstr "Маршрути до цілей" -#: ipam/forms/filtersets.py:53 ipam/forms/model_forms.py:50 -#: vpn/forms/filtersets.py:224 vpn/forms/model_forms.py:397 +#: 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 msgid "Import targets" msgstr "Імпортувати цілі" -#: ipam/forms/filtersets.py:58 ipam/forms/model_forms.py:55 -#: vpn/forms/filtersets.py:229 vpn/forms/model_forms.py:402 +#: 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 msgid "Export targets" -msgstr "Експортні цілі" +msgstr "Експортувати цілі" -#: ipam/forms/filtersets.py:73 +#: netbox/ipam/forms/filtersets.py:73 msgid "Imported by VRF" -msgstr "Імпортований VRF" +msgstr "Імпортований до VRF" -#: ipam/forms/filtersets.py:78 +#: netbox/ipam/forms/filtersets.py:78 msgid "Exported by VRF" -msgstr "Експортується VRF" +msgstr "Експортувати з VRF" -#: ipam/forms/filtersets.py:87 ipam/tables/ip.py:89 templates/ipam/rir.html:30 +#: netbox/ipam/forms/filtersets.py:87 netbox/ipam/tables/ip.py:89 +#: netbox/templates/ipam/rir.html:30 msgid "Private" msgstr "Приватний" -#: ipam/forms/filtersets.py:105 ipam/forms/filtersets.py:191 -#: ipam/forms/filtersets.py:272 ipam/forms/filtersets.py:326 +#: netbox/ipam/forms/filtersets.py:105 netbox/ipam/forms/filtersets.py:191 +#: netbox/ipam/forms/filtersets.py:272 netbox/ipam/forms/filtersets.py:326 msgid "Address family" -msgstr "Адреса сім'ї" +msgstr "Сімейство адрес" -#: ipam/forms/filtersets.py:119 templates/ipam/asnrange.html:25 +#: netbox/ipam/forms/filtersets.py:119 netbox/templates/ipam/asnrange.html:25 msgid "Range" msgstr "Діапазон" -#: ipam/forms/filtersets.py:128 +#: netbox/ipam/forms/filtersets.py:128 msgid "Start" msgstr "Початок" -#: ipam/forms/filtersets.py:132 +#: netbox/ipam/forms/filtersets.py:132 msgid "End" msgstr "Кінець" -#: ipam/forms/filtersets.py:186 +#: netbox/ipam/forms/filtersets.py:186 msgid "Search within" -msgstr "Пошук всередині" +msgstr "Пошук в межах" -#: ipam/forms/filtersets.py:207 ipam/forms/filtersets.py:342 +#: netbox/ipam/forms/filtersets.py:207 netbox/ipam/forms/filtersets.py:342 msgid "Present in VRF" msgstr "Присутній у VRF" -#: ipam/forms/filtersets.py:311 +#: netbox/ipam/forms/filtersets.py:311 msgid "Device/VM" msgstr "Пристрій/віртуальна машина" -#: ipam/forms/filtersets.py:321 +#: netbox/ipam/forms/filtersets.py:321 msgid "Parent Prefix" msgstr "Батьківський префікс" -#: ipam/forms/filtersets.py:347 +#: netbox/ipam/forms/filtersets.py:347 msgid "Assigned Device" -msgstr "Призначений пристрій" +msgstr "Призначено на пристрій" -#: ipam/forms/filtersets.py:352 +#: netbox/ipam/forms/filtersets.py:352 msgid "Assigned VM" -msgstr "Призначена віртуальна машина" +msgstr "Призначено на віртуальну машину" -#: ipam/forms/filtersets.py:366 +#: netbox/ipam/forms/filtersets.py:366 msgid "Assigned to an interface" -msgstr "Призначено до інтерфейсу" +msgstr "Призначено на інтерфейс" -#: ipam/forms/filtersets.py:373 templates/ipam/ipaddress.html:51 +#: netbox/ipam/forms/filtersets.py:373 netbox/templates/ipam/ipaddress.html:51 msgid "DNS Name" msgstr "Ім'я DNS" -#: ipam/forms/filtersets.py:416 ipam/models/vlans.py:235 ipam/tables/ip.py:176 -#: ipam/tables/vlans.py:82 ipam/views.py:971 netbox/navigation/menu.py:193 -#: netbox/navigation/menu.py:195 +#: 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 msgid "VLANs" -msgstr "VLANs" +msgstr "VLAN'и" -#: ipam/forms/filtersets.py:457 +#: netbox/ipam/forms/filtersets.py:457 msgid "Contains VLAN ID" msgstr "Містить ідентифікатор VLAN" -#: ipam/forms/filtersets.py:513 ipam/models/vlans.py:176 -#: templates/ipam/vlan.html:31 +#: netbox/ipam/forms/filtersets.py:513 netbox/ipam/models/vlans.py:192 +#: netbox/templates/ipam/vlan.html:31 msgid "VLAN ID" -msgstr "ІДЕНТИФІКАТОР VLAN" +msgstr "Ідентифікатор VLAN" -#: ipam/forms/filtersets.py:556 ipam/forms/model_forms.py:320 -#: ipam/forms/model_forms.py:713 ipam/forms/model_forms.py:739 -#: ipam/tables/vlans.py:195 templates/virtualization/virtualdisk.html:21 -#: templates/virtualization/virtualmachine.html:12 -#: templates/virtualization/vminterface.html:21 -#: templates/vpn/tunneltermination.html:25 -#: virtualization/forms/filtersets.py:197 -#: virtualization/forms/filtersets.py:242 -#: virtualization/forms/model_forms.py:220 -#: virtualization/tables/virtualmachines.py:135 -#: virtualization/tables/virtualmachines.py:190 vpn/choices.py:45 -#: vpn/forms/filtersets.py:293 vpn/forms/model_forms.py:160 -#: vpn/forms/model_forms.py:171 vpn/forms/model_forms.py:273 -#: vpn/forms/model_forms.py:454 +#: netbox/ipam/forms/filtersets.py: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 "Віртуальна машина" -#: ipam/forms/model_forms.py:80 templates/ipam/routetarget.html:10 +#: netbox/ipam/forms/model_forms.py:80 +#: netbox/templates/ipam/routetarget.html:10 msgid "Route Target" -msgstr "Мета маршруту" +msgstr "Маршрут до цілі" -#: ipam/forms/model_forms.py:114 ipam/tables/ip.py:117 -#: templates/ipam/aggregate.html:11 templates/ipam/prefix.html:38 +#: netbox/ipam/forms/model_forms.py:114 netbox/ipam/tables/ip.py:117 +#: netbox/templates/ipam/aggregate.html:11 +#: netbox/templates/ipam/prefix.html:38 msgid "Aggregate" msgstr "Агрегат" -#: ipam/forms/model_forms.py:135 templates/ipam/asnrange.html:12 +#: netbox/ipam/forms/model_forms.py:135 netbox/templates/ipam/asnrange.html:12 msgid "ASN Range" msgstr "Діапазон ASN" -#: ipam/forms/model_forms.py:231 +#: netbox/ipam/forms/model_forms.py:231 msgid "Site/VLAN Assignment" msgstr "Призначення тех. майданчику/VLAN" -#: ipam/forms/model_forms.py:259 templates/ipam/iprange.html:10 +#: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10 msgid "IP Range" msgstr "Діапазон IP" -#: ipam/forms/model_forms.py:295 ipam/forms/model_forms.py:321 -#: ipam/forms/model_forms.py:473 templates/ipam/fhrpgroup.html:19 +#: 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 msgid "FHRP Group" msgstr "Група FHRP/VRRP" -#: ipam/forms/model_forms.py:310 +#: netbox/ipam/forms/model_forms.py:310 msgid "Make this the primary IP for the device/VM" msgstr "Зробіть це основним IP для пристрою/віртуальної машини" -#: ipam/forms/model_forms.py:325 -msgid "NAT IP (Inside)" -msgstr "NAT IP (всередині)" +#: netbox/ipam/forms/model_forms.py:314 +msgid "Make this the out-of-band IP for the device" +msgstr "" -#: ipam/forms/model_forms.py:384 +#: netbox/ipam/forms/model_forms.py:329 +msgid "NAT IP (Inside)" +msgstr "NAT IP (внутрішній)" + +#: netbox/ipam/forms/model_forms.py:391 msgid "An IP address can only be assigned to a single object." msgstr "IP-адреса може бути призначена лише одному об'єкту." -#: ipam/forms/model_forms.py:390 ipam/models/ip.py:897 -msgid "" -"Cannot reassign IP address while it is designated as the primary IP for the " -"parent object" +#: netbox/ipam/forms/model_forms.py:398 +msgid "Cannot reassign primary IP address for the parent device/VM" msgstr "" -"Не вдається перепризначити IP-адресу, поки вона призначена як основний IP " -"для батьківського об'єкта" -#: ipam/forms/model_forms.py:400 +#: netbox/ipam/forms/model_forms.py:402 +msgid "Cannot reassign out-of-Band IP address for the parent device" +msgstr "" + +#: netbox/ipam/forms/model_forms.py:412 msgid "" "Only IP addresses assigned to an interface can be designated as primary IPs." msgstr "" -"Тільки IP-адреси, призначені інтерфейсу, можуть бути визначені основними IP-" -"адресами." +"Тільки IP-адреси, призначені інтерфейсу, можуть бути визначені первинними " +"IP-адресами." -#: ipam/forms/model_forms.py:475 +#: netbox/ipam/forms/model_forms.py:420 +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 msgid "Virtual IP Address" msgstr "Віртуальна IP-адреса" -#: ipam/forms/model_forms.py:560 +#: netbox/ipam/forms/model_forms.py:593 msgid "Assignment already exists" msgstr "Призначення вже існує" -#: ipam/forms/model_forms.py:569 templates/ipam/vlangroup.html:42 +#: netbox/ipam/forms/model_forms.py:602 +#: netbox/templates/ipam/vlangroup.html:42 msgid "VLAN IDs" msgstr "Ідентифікатори VLAN" -#: ipam/forms/model_forms.py:587 +#: netbox/ipam/forms/model_forms.py:620 msgid "Child VLANs" -msgstr "Дитячі VLAN" +msgstr "Підпорядковані VLAN'и" -#: ipam/forms/model_forms.py:664 ipam/forms/model_forms.py:696 +#: netbox/ipam/forms/model_forms.py:697 netbox/ipam/forms/model_forms.py:729 msgid "" "Comma-separated list of one or more port numbers. A range may be specified " "using a hyphen." @@ -9265,397 +9929,422 @@ msgstr "" "Список одного або декількох номерів портів, розділених комами. Діапазон " "можна вказати за допомогою дефіса." -#: ipam/forms/model_forms.py:669 templates/ipam/servicetemplate.html:12 +#: netbox/ipam/forms/model_forms.py:702 +#: netbox/templates/ipam/servicetemplate.html:12 msgid "Service Template" msgstr "Шаблон сервісу" -#: ipam/forms/model_forms.py:716 +#: netbox/ipam/forms/model_forms.py:749 msgid "Port(s)" msgstr "Порт (и)" -#: ipam/forms/model_forms.py:717 ipam/forms/model_forms.py:745 -#: templates/ipam/service.html:21 +#: netbox/ipam/forms/model_forms.py:750 netbox/ipam/forms/model_forms.py:778 +#: netbox/templates/ipam/service.html:21 msgid "Service" msgstr "Сервіс" -#: ipam/forms/model_forms.py:730 +#: netbox/ipam/forms/model_forms.py:763 msgid "Service template" msgstr "Шаблон сервісу" -#: ipam/forms/model_forms.py:742 +#: netbox/ipam/forms/model_forms.py:775 msgid "From Template" msgstr "З шаблону" -#: ipam/forms/model_forms.py:743 +#: netbox/ipam/forms/model_forms.py:776 msgid "Custom" msgstr "Користувацький" -#: ipam/forms/model_forms.py:773 +#: netbox/ipam/forms/model_forms.py:806 msgid "" "Must specify name, protocol, and port(s) if not using a service template." msgstr "" -"Необхідно вказати ім'я, протокол та порт (и), якщо не використовується " -"шаблон служби." +"Необхідно вказати ім'я, протокол та порт(и), якщо не використовується шаблон" +" служби." -#: ipam/models/asns.py:34 +#: netbox/ipam/models/asns.py:34 msgid "start" msgstr "старт" -#: ipam/models/asns.py:51 +#: netbox/ipam/models/asns.py:51 msgid "ASN range" msgstr "Діапазон ASN" -#: ipam/models/asns.py:52 +#: netbox/ipam/models/asns.py:52 msgid "ASN ranges" msgstr "Діапазони ASN" -#: ipam/models/asns.py:72 +#: netbox/ipam/models/asns.py:72 #, python-brace-format msgid "Starting ASN ({start}) must be lower than ending ASN ({end})." -msgstr "Запуск ASN ({start}) повинен бути нижчим за кінцевий ASN ({end})." +msgstr "Початковий ASN ({start}) повинен бути нижчим за кінцевий ASN ({end})." -#: ipam/models/asns.py:104 +#: netbox/ipam/models/asns.py:104 msgid "Regional Internet Registry responsible for this AS number space" -msgstr "Регіональний інтернет-реєстр, відповідальний за цей номер AS" +msgstr "Регіональний інтернет-реєстр(RIR), відповідальний за цей номер AS" -#: ipam/models/asns.py:109 +#: netbox/ipam/models/asns.py:109 msgid "16- or 32-bit autonomous system number" msgstr "16- або 32-розрядний номер автономної системи" -#: ipam/models/fhrp.py:22 +#: netbox/ipam/models/fhrp.py:22 msgid "group ID" -msgstr "Ідентифікатор групи" +msgstr "ідентифікатор групи" -#: ipam/models/fhrp.py:30 ipam/models/services.py:22 +#: netbox/ipam/models/fhrp.py:30 netbox/ipam/models/services.py:22 msgid "protocol" msgstr "протокол" -#: ipam/models/fhrp.py:38 wireless/models.py:28 +#: netbox/ipam/models/fhrp.py:38 netbox/wireless/models.py:28 msgid "authentication type" msgstr "тип аутентифікації" -#: ipam/models/fhrp.py:43 +#: netbox/ipam/models/fhrp.py:43 msgid "authentication key" msgstr "ключ аутентифікації" -#: ipam/models/fhrp.py:56 +#: netbox/ipam/models/fhrp.py:56 msgid "FHRP group" msgstr "Група FHRP/VRRP" -#: ipam/models/fhrp.py:57 +#: netbox/ipam/models/fhrp.py:57 msgid "FHRP groups" msgstr "Групи FHRP/VRRP" -#: ipam/models/fhrp.py:113 +#: netbox/ipam/models/fhrp.py:113 msgid "FHRP group assignment" msgstr "Групове призначення FHRP/VRRP" -#: ipam/models/fhrp.py:114 +#: netbox/ipam/models/fhrp.py:114 msgid "FHRP group assignments" msgstr "Групові призначення FHRP/VRRP" -#: ipam/models/ip.py:65 +#: netbox/ipam/models/ip.py:65 msgid "private" msgstr "приватне" -#: ipam/models/ip.py:66 +#: netbox/ipam/models/ip.py:66 msgid "IP space managed by this RIR is considered private" msgstr "Простір IP, керований цим RIR, вважається приватним" -#: ipam/models/ip.py:72 netbox/navigation/menu.py:182 +#: netbox/ipam/models/ip.py:72 netbox/netbox/navigation/menu.py:182 msgid "RIRs" -msgstr "RIR" +msgstr "RIRи" -#: ipam/models/ip.py:84 +#: netbox/ipam/models/ip.py:84 msgid "IPv4 or IPv6 network" msgstr "Мережа IPv4 або IPv6" -#: ipam/models/ip.py:91 +#: netbox/ipam/models/ip.py:91 msgid "Regional Internet Registry responsible for this IP space" -msgstr "Регіональний Інтернет-реєстр, відповідальний за цей IP-простір" +msgstr "Регіональний Інтернет-реєстр(RIR), відповідальний за цей IP-простір" -#: ipam/models/ip.py:101 +#: netbox/ipam/models/ip.py:101 msgid "date added" msgstr "дата додавання" -#: ipam/models/ip.py:115 +#: netbox/ipam/models/ip.py:115 msgid "aggregate" msgstr "сукупний" -#: ipam/models/ip.py:116 +#: netbox/ipam/models/ip.py:116 msgid "aggregates" -msgstr "агреговані мережі" +msgstr "сукупні мережі" -#: ipam/models/ip.py:132 +#: netbox/ipam/models/ip.py:132 msgid "Cannot create aggregate with /0 mask." -msgstr "Не вдається створити агрегат з маскою /0." +msgstr "Не вдається створити сукупну мережу з маскою /0." -#: ipam/models/ip.py:144 +#: netbox/ipam/models/ip.py:144 #, python-brace-format msgid "" "Aggregates cannot overlap. {prefix} is already covered by an existing " "aggregate ({aggregate})." msgstr "" -"Агрегати не можуть перекриватися. {prefix} вже покривається існуючим " -"агрегатом ({aggregate})." +"Сукупні мережі не можуть перекриватися. {prefix} вже покривається існуючим " +"сукупною мережею ({aggregate})." -#: ipam/models/ip.py:158 +#: netbox/ipam/models/ip.py:158 #, python-brace-format msgid "" "Prefixes cannot overlap aggregates. {prefix} covers an existing aggregate " "({aggregate})." msgstr "" -"Мережеві префікси не можуть перекривати агрегати. {prefix} охоплює існуючий " -"агрегат ({aggregate})." +"Мережеві префікси не можуть перекривати сукупні мережі. {prefix} охоплює " +"існуючий сукупну мережу ({aggregate})." -#: ipam/models/ip.py:200 ipam/models/ip.py:737 vpn/models/tunnels.py:114 +#: netbox/ipam/models/ip.py:200 netbox/ipam/models/ip.py:737 +#: netbox/vpn/models/tunnels.py:114 msgid "role" msgstr "роль" -#: ipam/models/ip.py:201 +#: netbox/ipam/models/ip.py:201 msgid "roles" msgstr "ролі" -#: ipam/models/ip.py:217 ipam/models/ip.py:293 +#: netbox/ipam/models/ip.py:217 netbox/ipam/models/ip.py:293 msgid "prefix" msgstr "префікс" -#: ipam/models/ip.py:218 +#: netbox/ipam/models/ip.py:218 msgid "IPv4 or IPv6 network with mask" msgstr "Мережа IPv4 або IPv6 з маскою" -#: ipam/models/ip.py:254 +#: netbox/ipam/models/ip.py:254 msgid "Operational status of this prefix" msgstr "Операційний стан цього префікса" -#: ipam/models/ip.py:262 +#: netbox/ipam/models/ip.py:262 msgid "The primary function of this prefix" msgstr "Основна функція цього префікса" -#: ipam/models/ip.py:265 +#: netbox/ipam/models/ip.py:265 msgid "is a pool" -msgstr "є басейном" +msgstr "є у пулі" -#: ipam/models/ip.py:267 +#: netbox/ipam/models/ip.py:267 msgid "All IP addresses within this prefix are considered usable" msgstr "Усі IP-адреси в цьому префіксі вважаються придатними для використання" -#: ipam/models/ip.py:270 ipam/models/ip.py:537 +#: netbox/ipam/models/ip.py:270 netbox/ipam/models/ip.py:537 msgid "mark utilized" msgstr "використовувана марка" -#: ipam/models/ip.py:294 +#: netbox/ipam/models/ip.py:294 msgid "prefixes" msgstr "мережеві префікси" -#: ipam/models/ip.py:317 +#: netbox/ipam/models/ip.py:317 msgid "Cannot create prefix with /0 mask." msgstr "Неможливо створити префікс з маскою /0." -#: ipam/models/ip.py:324 ipam/models/ip.py:874 +#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:874 #, python-brace-format msgid "VRF {vrf}" -msgstr "ВРФ {vrf}" +msgstr "VRF {vrf}" -#: ipam/models/ip.py:324 ipam/models/ip.py:874 +#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:874 msgid "global table" msgstr "глобальна таблиця" -#: ipam/models/ip.py:326 +#: netbox/ipam/models/ip.py:326 #, python-brace-format msgid "Duplicate prefix found in {table}: {prefix}" msgstr "Дублікат префікса знайдений у {table}: {prefix}" -#: ipam/models/ip.py:495 +#: netbox/ipam/models/ip.py:495 msgid "start address" msgstr "стартова адреса" -#: ipam/models/ip.py:496 ipam/models/ip.py:500 ipam/models/ip.py:712 +#: netbox/ipam/models/ip.py:496 netbox/ipam/models/ip.py:500 +#: netbox/ipam/models/ip.py:712 msgid "IPv4 or IPv6 address (with mask)" msgstr "Адреса IPv4 або IPv6 (з маскою)" -#: ipam/models/ip.py:499 +#: netbox/ipam/models/ip.py:499 msgid "end address" msgstr "кінцева адреса" -#: ipam/models/ip.py:526 +#: netbox/ipam/models/ip.py:526 msgid "Operational status of this range" msgstr "Експлуатаційний стан даного діапазону" -#: ipam/models/ip.py:534 +#: netbox/ipam/models/ip.py:534 msgid "The primary function of this range" msgstr "Основна функція цього діапазону" -#: ipam/models/ip.py:548 +#: netbox/ipam/models/ip.py:548 msgid "IP range" msgstr "Діапазон IP" -#: ipam/models/ip.py:549 +#: netbox/ipam/models/ip.py:549 msgid "IP ranges" msgstr "Діапазони IP" -#: ipam/models/ip.py:565 +#: netbox/ipam/models/ip.py:565 msgid "Starting and ending IP address versions must match" msgstr "Початкова та кінцева версії IP-адреси повинні збігатися" -#: ipam/models/ip.py:571 +#: netbox/ipam/models/ip.py:571 msgid "Starting and ending IP address masks must match" msgstr "Початкові та кінцеві маски IP-адреси повинні збігатися" -#: ipam/models/ip.py:578 +#: netbox/ipam/models/ip.py:578 #, python-brace-format msgid "" "Ending address must be greater than the starting address ({start_address})" msgstr "" "Кінцева адреса повинна бути більшою за початкову адресу ({start_address})" -#: ipam/models/ip.py:590 +#: netbox/ipam/models/ip.py:590 #, python-brace-format msgid "Defined addresses overlap with range {overlapping_range} in VRF {vrf}" msgstr "" -"Визначені адреси перекриваються з діапазоном {overlapping_range} в ВРФ {vrf}" +"Визначені адреси перекриваються з діапазоном {overlapping_range} в VRF {vrf}" -#: ipam/models/ip.py:599 +#: netbox/ipam/models/ip.py:599 #, python-brace-format msgid "Defined range exceeds maximum supported size ({max_size})" msgstr "" "Визначений діапазон перевищує максимальний підтримуваний розмір ({max_size})" -#: ipam/models/ip.py:711 tenancy/models/contacts.py:82 +#: netbox/ipam/models/ip.py:711 netbox/tenancy/models/contacts.py:82 msgid "address" msgstr "адреса" -#: ipam/models/ip.py:734 +#: netbox/ipam/models/ip.py:734 msgid "The operational status of this IP" -msgstr "Операційний стан цього ІП" +msgstr "Операційний стан цього IP" -#: ipam/models/ip.py:741 +#: netbox/ipam/models/ip.py:741 msgid "The functional role of this IP" -msgstr "Функціональна роль цього ІП" +msgstr "Функціональна роль цього IP" -#: ipam/models/ip.py:765 templates/ipam/ipaddress.html:72 +#: netbox/ipam/models/ip.py:765 netbox/templates/ipam/ipaddress.html:72 msgid "NAT (inside)" -msgstr "NAT (всередині)" +msgstr "NAT (внутрішній)" -#: ipam/models/ip.py:766 +#: netbox/ipam/models/ip.py:766 msgid "The IP for which this address is the \"outside\" IP" -msgstr "IP, для якого ця адреса є \"зовнішнім\" IP" +msgstr "IP, для якого ця адреса є \"зовнішньою\"" -#: ipam/models/ip.py:773 +#: netbox/ipam/models/ip.py:773 msgid "Hostname or FQDN (not case-sensitive)" msgstr "Ім'я хоста або FQDN (не залежить від регістру регістру)" -#: ipam/models/ip.py:789 ipam/models/services.py:94 +#: netbox/ipam/models/ip.py:789 netbox/ipam/models/services.py:94 msgid "IP addresses" msgstr "IP-адреси" -#: ipam/models/ip.py:845 +#: netbox/ipam/models/ip.py:845 msgid "Cannot create IP address with /0 mask." msgstr "Не вдається створити IP-адресу з маскою /0." -#: ipam/models/ip.py:851 +#: netbox/ipam/models/ip.py:851 #, python-brace-format msgid "{ip} is a network ID, which may not be assigned to an interface." msgstr "" "{ip} це ідентифікатор мережі, який не може бути присвоєний інтерфейсу." -#: ipam/models/ip.py:862 +#: netbox/ipam/models/ip.py:862 #, python-brace-format msgid "" "{ip} is a broadcast address, which may not be assigned to an interface." -msgstr "{ip} це адреса трансляції, яка може не бути присвоєна інтерфейсу." +msgstr "{ip} це широкомовна адреса, яка може не бути присвоєна інтерфейсу." -#: ipam/models/ip.py:876 +#: netbox/ipam/models/ip.py:876 #, python-brace-format msgid "Duplicate IP address found in {table}: {ipaddress}" msgstr "Дублікати IP-адреси знайдено в {table}: {ipaddress}" -#: ipam/models/ip.py:903 +#: netbox/ipam/models/ip.py:897 +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 msgid "Only IPv6 addresses can be assigned SLAAC status" msgstr "Статус SLAAC може бути призначений лише адресам IPv6" -#: ipam/models/services.py:33 +#: netbox/ipam/models/services.py:33 msgid "port numbers" msgstr "номери портів" -#: ipam/models/services.py:59 +#: netbox/ipam/models/services.py:59 msgid "service template" msgstr "шаблон сервісу" -#: ipam/models/services.py:60 +#: netbox/ipam/models/services.py:60 msgid "service templates" msgstr "шаблони послуг" -#: ipam/models/services.py:95 +#: netbox/ipam/models/services.py:95 msgid "The specific IP addresses (if any) to which this service is bound" msgstr "Конкретні IP-адреси (якщо такі є), до яких прив'язана ця послуга" -#: ipam/models/services.py:102 +#: netbox/ipam/models/services.py:102 msgid "service" msgstr "послуга" -#: ipam/models/services.py:103 +#: netbox/ipam/models/services.py:103 msgid "services" msgstr "послуги" -#: ipam/models/services.py:117 +#: netbox/ipam/models/services.py:117 msgid "" "A service cannot be associated with both a device and a virtual machine." msgstr "" "Сервіс не може бути пов'язаний як з пристроєм, так і з віртуальною машиною." -#: ipam/models/services.py:119 +#: netbox/ipam/models/services.py:119 msgid "" "A service must be associated with either a device or a virtual machine." msgstr "" "Служба повинна бути пов'язана або з пристроєм, або з віртуальною машиною." -#: ipam/models/vlans.py:85 +#: netbox/ipam/models/vlans.py:85 msgid "VLAN groups" msgstr "Групи VLAN" -#: ipam/models/vlans.py:95 +#: netbox/ipam/models/vlans.py:95 msgid "Cannot set scope_type without scope_id." msgstr "Не вдається встановити scope_type без scope_id." -#: ipam/models/vlans.py:97 +#: netbox/ipam/models/vlans.py:97 msgid "Cannot set scope_id without scope_type." msgstr "Не вдається встановити scope_id без scope_type." -#: ipam/models/vlans.py:101 +#: netbox/ipam/models/vlans.py:105 +#, 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 +#, python-brace-format +msgid "Ending VLAN ID in range ({value}) cannot exceed {maximum}" +msgstr "" +"Кінцевий ідентифікатор VLAN в діапазоні ({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 "" +"Кінцевий ідентифікатор VLAN в діапазоні повинен бути більшим або дорівнювати" +" початковому ідентифікатору VLAN ({range})" + +#: netbox/ipam/models/vlans.py:124 msgid "Ranges cannot overlap." msgstr "Діапазони не можуть перекриватися." -#: ipam/models/vlans.py:106 -#, python-brace-format -msgid "" -"Maximum child VID must be greater than or equal to minimum child VID " -"({value})" -msgstr "" -"Максимальний підпорядкований VID повинен бути більшим або дорівнює " -"мінімальному підпорядкований VID ({value})" - -#: ipam/models/vlans.py:165 +#: netbox/ipam/models/vlans.py:181 msgid "The specific site to which this VLAN is assigned (if any)" msgstr "Конкретний тех. майданчик, якому присвоєно цей VLAN (якщо такий є)" -#: ipam/models/vlans.py:173 +#: netbox/ipam/models/vlans.py:189 msgid "VLAN group (optional)" msgstr "Група VLAN (необов'язково)" -#: ipam/models/vlans.py:181 +#: netbox/ipam/models/vlans.py:197 msgid "Numeric VLAN ID (1-4094)" msgstr "Числовий ідентифікатор VLAN (1-4094)" -#: ipam/models/vlans.py:199 +#: netbox/ipam/models/vlans.py:215 msgid "Operational status of this VLAN" msgstr "Операційний стан цього VLAN" -#: ipam/models/vlans.py:207 +#: netbox/ipam/models/vlans.py:223 msgid "The primary function of this VLAN" msgstr "Основна функція цього VLAN" -#: ipam/models/vlans.py:250 +#: netbox/ipam/models/vlans.py:266 #, python-brace-format msgid "" "VLAN is assigned to group {group} (scope: {scope}); cannot also assign to " @@ -9664,164 +10353,167 @@ msgstr "" "VLAN присвоюється групі {group} (сфера застосування: {scope}); також не може" " призначатися до тех. майданчику {site}." -#: ipam/models/vlans.py:259 +#: netbox/ipam/models/vlans.py:275 #, python-brace-format msgid "VID must be in ranges {ranges} for VLANs in group {group}" -msgstr "VID повинен знаходитися в діапазоні {ranges} для VLAN в групі {group}" +msgstr "" +"VID повинен знаходитися в діапазоні {ranges} для VLAN'ів у групі {group}" -#: ipam/models/vrfs.py:30 +#: netbox/ipam/models/vrfs.py:30 msgid "route distinguisher" -msgstr "розрізнювач маршруту" +msgstr "розрізнювач маршруту (RD)" -#: ipam/models/vrfs.py:31 +#: netbox/ipam/models/vrfs.py:31 msgid "Unique route distinguisher (as defined in RFC 4364)" -msgstr "Унікальний розрізнювач маршруту (як визначено в RFC 4364)" +msgstr "Унікальний розрізнювач маршруту (RD) (як визначено в RFC 4364)" -#: ipam/models/vrfs.py:42 +#: netbox/ipam/models/vrfs.py:42 msgid "enforce unique space" msgstr "забезпечити унікальний простір" -#: ipam/models/vrfs.py:43 +#: netbox/ipam/models/vrfs.py:43 msgid "Prevent duplicate prefixes/IP addresses within this VRF" msgstr "Запобігання дублікуванню префіксів/IP-адрес у цьому VRF" -#: ipam/models/vrfs.py:63 netbox/navigation/menu.py:186 -#: netbox/navigation/menu.py:188 +#: netbox/ipam/models/vrfs.py:63 netbox/netbox/navigation/menu.py:186 +#: netbox/netbox/navigation/menu.py:188 msgid "VRFs" -msgstr "VRF" +msgstr "VRFи" -#: ipam/models/vrfs.py:82 +#: netbox/ipam/models/vrfs.py:82 msgid "Route target value (formatted in accordance with RFC 4360)" msgstr "Цільове значення маршруту (відформатоване відповідно до RFC 4360)" -#: ipam/models/vrfs.py:94 +#: netbox/ipam/models/vrfs.py:94 msgid "route target" -msgstr "цільовий маршрут" +msgstr "маршрут до цілі" -#: ipam/models/vrfs.py:95 +#: netbox/ipam/models/vrfs.py:95 msgid "route targets" -msgstr "маршрутні цілі" +msgstr "маршрут до цілей" -#: ipam/tables/asn.py:52 +#: netbox/ipam/tables/asn.py:52 msgid "ASDOT" -msgstr "АСДОТ" +msgstr "ASDOT" -#: ipam/tables/asn.py:57 +#: netbox/ipam/tables/asn.py:57 msgid "Site Count" msgstr "Кількість тех. майданчиків" -#: ipam/tables/asn.py:62 +#: netbox/ipam/tables/asn.py:62 msgid "Provider Count" msgstr "Кількість провайдерів" -#: ipam/tables/ip.py:95 netbox/navigation/menu.py:179 -#: netbox/navigation/menu.py:181 +#: netbox/ipam/tables/ip.py:95 netbox/netbox/navigation/menu.py:179 +#: netbox/netbox/navigation/menu.py:181 msgid "Aggregates" -msgstr "Агрегати" +msgstr "Сукупні мережі" -#: ipam/tables/ip.py:125 +#: netbox/ipam/tables/ip.py:125 msgid "Added" msgstr "Додано" -#: ipam/tables/ip.py:128 ipam/tables/ip.py:166 ipam/tables/vlans.py:142 -#: ipam/views.py:346 netbox/navigation/menu.py:165 -#: netbox/navigation/menu.py:167 templates/ipam/vlan.html:84 +#: 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 msgid "Prefixes" msgstr "Мережеві префікси" -#: ipam/tables/ip.py:131 ipam/tables/ip.py:270 ipam/tables/ip.py:324 -#: ipam/tables/vlans.py:86 templates/dcim/device.html:260 -#: templates/ipam/aggregate.html:24 templates/ipam/iprange.html:29 -#: templates/ipam/prefix.html:106 +#: 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/templates/dcim/device.html:260 +#: netbox/templates/ipam/aggregate.html:24 +#: netbox/templates/ipam/iprange.html:29 netbox/templates/ipam/prefix.html:106 msgid "Utilization" msgstr "Утилізація" -#: ipam/tables/ip.py:171 netbox/navigation/menu.py:161 +#: netbox/ipam/tables/ip.py:171 netbox/netbox/navigation/menu.py:161 msgid "IP Ranges" msgstr "Діапазони IP" -#: ipam/tables/ip.py:221 +#: netbox/ipam/tables/ip.py:221 msgid "Prefix (Flat)" msgstr "Префікс (Плоский)" -#: ipam/tables/ip.py:225 +#: netbox/ipam/tables/ip.py:225 msgid "Depth" msgstr "Глибина" -#: ipam/tables/ip.py:262 +#: netbox/ipam/tables/ip.py:262 msgid "Pool" -msgstr "Басейн" +msgstr "Пул" -#: ipam/tables/ip.py:266 ipam/tables/ip.py:320 +#: netbox/ipam/tables/ip.py:266 netbox/ipam/tables/ip.py:320 msgid "Marked Utilized" -msgstr "Позначений Використовуваний" +msgstr "Позначено як використане" -#: ipam/tables/ip.py:304 +#: netbox/ipam/tables/ip.py:304 msgid "Start address" msgstr "Початкова адреса" -#: ipam/tables/ip.py:383 +#: netbox/ipam/tables/ip.py:383 msgid "NAT (Inside)" -msgstr "NAT (всередині)" +msgstr "NAT (внутрішній)" -#: ipam/tables/ip.py:388 +#: netbox/ipam/tables/ip.py:388 msgid "NAT (Outside)" -msgstr "NAT (зовні)" +msgstr "NAT (зовнішній)" -#: ipam/tables/ip.py:393 +#: netbox/ipam/tables/ip.py:393 msgid "Assigned" -msgstr "Призначено" +msgstr "Призначений" -#: ipam/tables/ip.py:429 templates/vpn/l2vpntermination.html:16 -#: vpn/forms/filtersets.py:240 +#: netbox/ipam/tables/ip.py:429 netbox/templates/vpn/l2vpntermination.html:16 +#: netbox/vpn/forms/filtersets.py:240 msgid "Assigned Object" msgstr "Призначений об'єкт" -#: ipam/tables/vlans.py:68 +#: netbox/ipam/tables/vlans.py:68 msgid "Scope Type" msgstr "Тип сфери застосування" -#: ipam/tables/vlans.py:76 +#: netbox/ipam/tables/vlans.py:76 msgid "VID Ranges" msgstr "Діапазони VID" -#: ipam/tables/vlans.py:111 ipam/tables/vlans.py:214 -#: templates/dcim/inc/interface_vlans_table.html:4 +#: netbox/ipam/tables/vlans.py:111 netbox/ipam/tables/vlans.py:214 +#: netbox/templates/dcim/inc/interface_vlans_table.html:4 msgid "VID" -msgstr "ВИД" +msgstr "VID" -#: ipam/tables/vrfs.py:30 +#: netbox/ipam/tables/vrfs.py:30 msgid "RD" -msgstr "Р-Н" +msgstr "RD" -#: ipam/tables/vrfs.py:33 +#: netbox/ipam/tables/vrfs.py:33 msgid "Unique" msgstr "Унікальний" -#: ipam/tables/vrfs.py:37 vpn/tables/l2vpn.py:27 +#: netbox/ipam/tables/vrfs.py:37 netbox/vpn/tables/l2vpn.py:27 msgid "Import Targets" msgstr "Імпортувати цілі" -#: ipam/tables/vrfs.py:42 vpn/tables/l2vpn.py:32 +#: netbox/ipam/tables/vrfs.py:42 netbox/vpn/tables/l2vpn.py:32 msgid "Export Targets" -msgstr "Експортні цілі" +msgstr "Експортувати цілі" -#: ipam/validators.py:9 +#: netbox/ipam/validators.py:9 #, python-brace-format msgid "{prefix} is not a valid prefix. Did you mean {suggested}?" msgstr "{prefix} не є дійсним префіксом. Ви мали на увазі {suggested}?" -#: ipam/validators.py:16 +#: netbox/ipam/validators.py:16 #, python-format msgid "The prefix length must be less than or equal to %(limit_value)s." -msgstr "Довжина префікса повинна бути менше або дорівнює %(limit_value)s." +msgstr "Довжина префікса повинна бути менше або дорівнює %(limit_value)sи." -#: ipam/validators.py:24 +#: netbox/ipam/validators.py:24 #, python-format msgid "The prefix length must be greater than or equal to %(limit_value)s." -msgstr "Довжина префікса повинна бути більше або дорівнює %(limit_value)s." +msgstr "Довжина префікса повинна бути більше або дорівнює %(limit_value)sи." -#: ipam/validators.py:33 +#: netbox/ipam/validators.py:33 msgid "" "Only alphanumeric characters, asterisks, hyphens, periods, and underscores " "are allowed in DNS names" @@ -9829,31 +10521,31 @@ msgstr "" "У назвах DNS дозволені лише буквено-цифрові символи, зірочки, дефіси, крапки" " та підкреслення" -#: ipam/views.py:533 +#: netbox/ipam/views.py:533 msgid "Child Prefixes" msgstr "Підпорядковані мережеві префікси" -#: ipam/views.py:569 +#: netbox/ipam/views.py:569 msgid "Child Ranges" -msgstr "Дитячі діапазони" +msgstr "Підпорядковані діапазони" -#: ipam/views.py:898 +#: netbox/ipam/views.py:898 msgid "Related IPs" msgstr "Пов'язані IP-адреси" -#: ipam/views.py:1127 +#: netbox/ipam/views.py:1127 msgid "Device Interfaces" -msgstr "Інтерфейси пристроїв" +msgstr "Інтерфейси пристрою" -#: ipam/views.py:1145 +#: netbox/ipam/views.py:1145 msgid "VM Interfaces" msgstr "Інтерфейси віртуальної машини" -#: netbox/api/fields.py:65 +#: netbox/netbox/api/fields.py:65 msgid "This field may not be blank." msgstr "Це поле не може бути порожнім." -#: netbox/api/fields.py:70 +#: netbox/netbox/api/fields.py:70 msgid "" "Value must be passed directly (e.g. \"foo\": 123); do not use a dictionary " "or list." @@ -9861,742 +10553,766 @@ msgstr "" "Значення має бути передано безпосередньо (наприклад, \"foo\": 123); не " "використовуйте словник або список." -#: netbox/api/fields.py:91 +#: netbox/netbox/api/fields.py:91 #, python-brace-format msgid "{value} is not a valid choice." msgstr "{value} не є дійсним вибором." -#: netbox/api/fields.py:104 +#: netbox/netbox/api/fields.py:104 #, python-brace-format msgid "Invalid content type: {content_type}" msgstr "Невірний тип вмісту: {content_type}" -#: netbox/api/fields.py:105 +#: netbox/netbox/api/fields.py:105 msgid "Invalid value. Specify a content type as '.'." msgstr "Невірне значення. Вкажіть тип вмісту як '.'." -#: netbox/api/fields.py:167 +#: netbox/netbox/api/fields.py:167 msgid "Ranges must be specified in the form (lower, upper)." -msgstr "Діапазони повинні бути вказані в формі (нижній, верхній)." +msgstr "Діапазони повинні бути вказані у форматі (нижня межа, верхня межа)." -#: netbox/api/fields.py:169 +#: netbox/netbox/api/fields.py:169 msgid "Range boundaries must be defined as integers." msgstr "Межі діапазону повинні бути визначені як цілі числа." -#: netbox/api/serializers/fields.py:40 +#: netbox/netbox/api/serializers/fields.py:40 #, python-brace-format msgid "{class_name} must implement get_view_name()" msgstr "{class_name} повинен реалізувати get_view_name()" -#: netbox/authentication/__init__.py:138 +#: netbox/netbox/authentication/__init__.py:138 #, python-brace-format msgid "Invalid permission {permission} for model {model}" msgstr "Невірний дозвіл {permission} для моделі {model}" -#: netbox/choices.py:49 +#: netbox/netbox/choices.py:49 msgid "Dark Red" msgstr "Темно-червоний" -#: netbox/choices.py:52 +#: netbox/netbox/choices.py:52 msgid "Rose" -msgstr "Роза" +msgstr "Трояндовий" -#: netbox/choices.py:53 +#: netbox/netbox/choices.py:53 msgid "Fuchsia" -msgstr "Фуксія" +msgstr "Малиновий" -#: netbox/choices.py:55 +#: netbox/netbox/choices.py:55 msgid "Dark Purple" msgstr "Темно-фіолетовий" -#: netbox/choices.py:58 +#: netbox/netbox/choices.py:58 msgid "Light Blue" msgstr "Світло-блакитний" -#: netbox/choices.py:61 +#: netbox/netbox/choices.py:61 msgid "Aqua" -msgstr "Аква" +msgstr "Бирюзовый" -#: netbox/choices.py:62 +#: netbox/netbox/choices.py:62 msgid "Dark Green" msgstr "Темно-зелений" -#: netbox/choices.py:64 +#: netbox/netbox/choices.py:64 msgid "Light Green" msgstr "Світло-зелений" -#: netbox/choices.py:65 +#: netbox/netbox/choices.py:65 msgid "Lime" -msgstr "Лайм" +msgstr "Кислотно-зелений" -#: netbox/choices.py:67 +#: netbox/netbox/choices.py:67 msgid "Amber" -msgstr "Бурштин" +msgstr "Бурштиновий" -#: netbox/choices.py:69 +#: netbox/netbox/choices.py:69 msgid "Dark Orange" msgstr "Темно-помаранчевий" -#: netbox/choices.py:70 +#: netbox/netbox/choices.py:70 msgid "Brown" msgstr "Коричневий" -#: netbox/choices.py:71 +#: netbox/netbox/choices.py:71 msgid "Light Grey" -msgstr "Світло-сірий" +msgstr "Сріблясто-сірий" -#: netbox/choices.py:72 +#: netbox/netbox/choices.py:72 msgid "Grey" msgstr "Сірий" -#: netbox/choices.py:73 +#: netbox/netbox/choices.py:73 msgid "Dark Grey" -msgstr "Темно-сірий" +msgstr "Антрацитовий" -#: netbox/choices.py:128 +#: netbox/netbox/choices.py:128 msgid "Direct" msgstr "прямий" -#: netbox/choices.py:129 +#: netbox/netbox/choices.py:129 msgid "Upload" -msgstr "Завантажити" +msgstr "Вивантажити" -#: netbox/choices.py:141 netbox/choices.py:155 +#: netbox/netbox/choices.py:141 netbox/netbox/choices.py:155 msgid "Auto-detect" msgstr "Автоматичне виявлення" -#: netbox/choices.py:156 +#: netbox/netbox/choices.py:156 msgid "Comma" msgstr "Кома" -#: netbox/choices.py:157 +#: netbox/netbox/choices.py:157 msgid "Semicolon" msgstr "Крапка з комою" -#: netbox/choices.py:158 +#: netbox/netbox/choices.py:158 msgid "Tab" -msgstr "Вкладка" +msgstr "Табуляція" -#: netbox/config/__init__.py:67 +#: netbox/netbox/config/__init__.py:67 #, python-brace-format msgid "Invalid configuration parameter: {item}" msgstr "Невірний параметр конфігурації: {item}" -#: netbox/config/parameters.py:22 templates/core/inc/config_data.html:62 +#: netbox/netbox/config/parameters.py:22 +#: netbox/templates/core/inc/config_data.html:62 msgid "Login banner" msgstr "Банер для входу" -#: netbox/config/parameters.py:24 +#: netbox/netbox/config/parameters.py:24 msgid "Additional content to display on the login page" msgstr "Додатковий вміст для відображення на сторінці входу" -#: netbox/config/parameters.py:33 templates/core/inc/config_data.html:66 +#: netbox/netbox/config/parameters.py:33 +#: netbox/templates/core/inc/config_data.html:66 msgid "Maintenance banner" msgstr "Банер технічного обслуговування" -#: netbox/config/parameters.py:35 +#: netbox/netbox/config/parameters.py:35 msgid "Additional content to display when in maintenance mode" msgstr "Додатковий вміст для відображення в режимі технічного обслуговування" -#: netbox/config/parameters.py:44 templates/core/inc/config_data.html:70 +#: netbox/netbox/config/parameters.py:44 +#: netbox/templates/core/inc/config_data.html:70 msgid "Top banner" msgstr "Верхній банер" -#: netbox/config/parameters.py:46 +#: netbox/netbox/config/parameters.py:46 msgid "Additional content to display at the top of every page" msgstr "Додатковий вміст для відображення у верхній частині кожної сторінки" -#: netbox/config/parameters.py:55 templates/core/inc/config_data.html:74 +#: netbox/netbox/config/parameters.py:55 +#: netbox/templates/core/inc/config_data.html:74 msgid "Bottom banner" msgstr "Нижній банер" -#: netbox/config/parameters.py:57 +#: netbox/netbox/config/parameters.py:57 msgid "Additional content to display at the bottom of every page" msgstr "Додатковий вміст для відображення внизу кожної сторінки" -#: netbox/config/parameters.py:68 +#: netbox/netbox/config/parameters.py:68 msgid "Globally unique IP space" msgstr "Всесвітньо унікальний IP-простір" -#: netbox/config/parameters.py:70 +#: netbox/netbox/config/parameters.py:70 msgid "Enforce unique IP addressing within the global table" msgstr "Забезпечити унікальну IP-адресацію в глобальній таблиці" -#: netbox/config/parameters.py:75 templates/core/inc/config_data.html:44 +#: netbox/netbox/config/parameters.py:75 +#: netbox/templates/core/inc/config_data.html:44 msgid "Prefer IPv4" msgstr "Віддавайте перевагу IPv4" -#: netbox/config/parameters.py:77 +#: netbox/netbox/config/parameters.py:77 msgid "Prefer IPv4 addresses over IPv6" msgstr "Віддавайте перевагу IPv4 адресам над IPv6" -#: netbox/config/parameters.py:84 +#: netbox/netbox/config/parameters.py:84 msgid "Rack unit height" -msgstr "Висота юніта стійки" +msgstr "Висота стійки у юнітах" -#: netbox/config/parameters.py:86 +#: netbox/netbox/config/parameters.py:86 msgid "Default unit height for rendered rack elevations" -msgstr "Висота юніта за замовчуванням для візуалізованих висот стійки" +msgstr "Висота одиниці за замовчуванням для візуалізованих стійки" -#: netbox/config/parameters.py:91 +#: netbox/netbox/config/parameters.py:91 msgid "Rack unit width" -msgstr "Ширина юніта стійки" +msgstr "Ширина стійки у юнітах" -#: netbox/config/parameters.py:93 +#: netbox/netbox/config/parameters.py:93 msgid "Default unit width for rendered rack elevations" -msgstr "Типова одиниця ширини для візуалізованих висот стійки" +msgstr "Ширина одиниці за замовчуванням для візуалізованих стійки" -#: netbox/config/parameters.py:100 +#: netbox/netbox/config/parameters.py:100 msgid "Powerfeed voltage" msgstr "Напруга подачі живлення" -#: netbox/config/parameters.py:102 +#: netbox/netbox/config/parameters.py:102 msgid "Default voltage for powerfeeds" msgstr "Напруга за замовчуванням при подачі живлення" -#: netbox/config/parameters.py:107 +#: netbox/netbox/config/parameters.py:107 msgid "Powerfeed amperage" msgstr "Сила струму подачі живлення" -#: netbox/config/parameters.py:109 +#: netbox/netbox/config/parameters.py:109 msgid "Default amperage for powerfeeds" -msgstr "Сила струму за замовчуванням для подачі живлення" +msgstr "Сила струму за замовчуванням при подачі живлення" -#: netbox/config/parameters.py:114 +#: netbox/netbox/config/parameters.py:114 msgid "Powerfeed max utilization" msgstr "Максимальне використання при подачі живлення" -#: netbox/config/parameters.py:116 +#: netbox/netbox/config/parameters.py:116 msgid "Default max utilization for powerfeeds" -msgstr "Максимальне використання за замовчуванням для подач живлення" +msgstr "Максимальне використання за замовчуванням при подачі живлення" -#: netbox/config/parameters.py:123 templates/core/inc/config_data.html:53 +#: netbox/netbox/config/parameters.py:123 +#: netbox/templates/core/inc/config_data.html:53 msgid "Allowed URL schemes" msgstr "Дозволені схеми URL-адрес" -#: netbox/config/parameters.py:128 +#: netbox/netbox/config/parameters.py:128 msgid "Permitted schemes for URLs in user-provided content" msgstr "Дозволені схеми для URL-адрес у вмісті, наданому користувачем" -#: netbox/config/parameters.py:136 +#: netbox/netbox/config/parameters.py:136 msgid "Default page size" msgstr "Типовий розмір сторінки" -#: netbox/config/parameters.py:142 +#: netbox/netbox/config/parameters.py:142 msgid "Maximum page size" msgstr "Максимальний розмір сторінки" -#: netbox/config/parameters.py:150 templates/core/inc/config_data.html:96 +#: netbox/netbox/config/parameters.py:150 +#: netbox/templates/core/inc/config_data.html:96 msgid "Custom validators" msgstr "Користувацькі перевіряючі" -#: netbox/config/parameters.py:152 +#: netbox/netbox/config/parameters.py:152 msgid "Custom validation rules (JSON)" msgstr "Користувацькі правила перевірки (у форматі JSON)" -#: netbox/config/parameters.py:160 templates/core/inc/config_data.html:104 +#: netbox/netbox/config/parameters.py:160 +#: netbox/templates/core/inc/config_data.html:104 msgid "Protection rules" msgstr "Правила захисту" -#: netbox/config/parameters.py:162 +#: netbox/netbox/config/parameters.py:162 msgid "Deletion protection rules (JSON)" msgstr "Правила захисту від видалення (JSON)" -#: netbox/config/parameters.py:172 templates/core/inc/config_data.html:117 +#: netbox/netbox/config/parameters.py:172 +#: netbox/templates/core/inc/config_data.html:117 msgid "Default preferences" msgstr "Налаштування за замовчуванням" -#: netbox/config/parameters.py:174 +#: netbox/netbox/config/parameters.py:174 msgid "Default preferences for new users" msgstr "Налаштування за замовчуванням для нових користувачів" -#: netbox/config/parameters.py:181 templates/core/inc/config_data.html:129 +#: netbox/netbox/config/parameters.py:181 +#: netbox/templates/core/inc/config_data.html:129 msgid "Maintenance mode" -msgstr "Режим обслуговування" +msgstr "Режим технічного обслуговування" -#: netbox/config/parameters.py:183 +#: netbox/netbox/config/parameters.py:183 msgid "Enable maintenance mode" msgstr "Увімкнути режим технічного обслуговування" -#: netbox/config/parameters.py:188 templates/core/inc/config_data.html:133 +#: netbox/netbox/config/parameters.py:188 +#: netbox/templates/core/inc/config_data.html:133 msgid "GraphQL enabled" msgstr "GraphQL увімкнено" -#: netbox/config/parameters.py:190 +#: netbox/netbox/config/parameters.py:190 msgid "Enable the GraphQL API" msgstr "Увімкніть API GraphQL" -#: netbox/config/parameters.py:195 templates/core/inc/config_data.html:137 +#: netbox/netbox/config/parameters.py:195 +#: netbox/templates/core/inc/config_data.html:137 msgid "Changelog retention" msgstr "Зберігання журналу змін" -#: netbox/config/parameters.py:197 +#: netbox/netbox/config/parameters.py:197 msgid "Days to retain changelog history (set to zero for unlimited)" msgstr "" "Дні для збереження історії журналу змін (встановлено нуль для необмеженої " "кількості)" -#: netbox/config/parameters.py:202 +#: netbox/netbox/config/parameters.py:202 msgid "Job result retention" msgstr "Зберігання результатів завдання" -#: netbox/config/parameters.py:204 +#: netbox/netbox/config/parameters.py:204 msgid "Days to retain job result history (set to zero for unlimited)" msgstr "" "Дні для збереження історії результатів завдання (встановлено на нуль " "необмежено)" -#: netbox/config/parameters.py:209 templates/core/inc/config_data.html:145 +#: netbox/netbox/config/parameters.py:209 +#: netbox/templates/core/inc/config_data.html:145 msgid "Maps URL" msgstr "Адреса карт" -#: netbox/config/parameters.py:211 +#: netbox/netbox/config/parameters.py:211 msgid "Base URL for mapping geographic locations" msgstr "Базова URL-адреса для відображення географічних місць" -#: netbox/forms/__init__.py:12 +#: netbox/netbox/forms/__init__.py:12 msgid "Partial match" msgstr "Частковий збіг" -#: netbox/forms/__init__.py:13 +#: netbox/netbox/forms/__init__.py:13 msgid "Exact match" msgstr "Точний збіг" -#: netbox/forms/__init__.py:14 +#: netbox/netbox/forms/__init__.py:14 msgid "Starts with" msgstr "Починається з" -#: netbox/forms/__init__.py:15 +#: netbox/netbox/forms/__init__.py:15 msgid "Ends with" -msgstr "Закінчується з" +msgstr "Закінчується на" -#: netbox/forms/__init__.py:16 +#: netbox/netbox/forms/__init__.py:16 msgid "Regex" -msgstr "Регекс" +msgstr "Регулярний вираз" -#: netbox/forms/__init__.py:34 +#: netbox/netbox/forms/__init__.py:34 msgid "Object type(s)" msgstr "Тип(и) об'єкта" -#: netbox/forms/__init__.py:40 +#: netbox/netbox/forms/__init__.py:40 msgid "Lookup" msgstr "Огляд" -#: netbox/forms/base.py:90 +#: netbox/netbox/forms/base.py:90 msgid "" "Tag slugs separated by commas, encased with double quotes (e.g. " "\"tag1,tag2,tag3\")" msgstr "" -"Слимаки міток, розділені комами, укладені подвійними лапками (наприклад, " -"\"tag1, tag2, tag3\")" +"Мітки скорочень, розділені комами, укладені подвійними лапками (наприклад, " +"\"мітка1, мітка2, мітка3\")" -#: netbox/forms/base.py:120 +#: netbox/netbox/forms/base.py:120 msgid "Add tags" msgstr "Додати мітки" -#: netbox/forms/base.py:125 +#: netbox/netbox/forms/base.py:125 msgid "Remove tags" msgstr "Видалити мітки" -#: netbox/forms/mixins.py:38 +#: netbox/netbox/forms/mixins.py:38 #, python-brace-format msgid "{class_name} must specify a model class." msgstr "{class_name} необхідно вказати клас моделі." -#: netbox/models/features.py:280 +#: netbox/netbox/models/features.py:280 #, python-brace-format msgid "Unknown field name '{name}' in custom field data." msgstr "Невідоме ім'я поля '{name}' у призначених для користувача даних поля." -#: netbox/models/features.py:286 +#: netbox/netbox/models/features.py:286 #, python-brace-format msgid "Invalid value for custom field '{name}': {error}" msgstr "Невірне значення для користувацького поля '{name}': {error}" -#: netbox/models/features.py:295 +#: netbox/netbox/models/features.py:295 #, python-brace-format msgid "Custom field '{name}' must have a unique value." msgstr "Користувацьке поле '{name}' має мати унікальне значення." -#: netbox/models/features.py:302 +#: netbox/netbox/models/features.py:302 #, python-brace-format msgid "Missing required custom field '{name}'." msgstr "Відсутнє обов'язкове користувацьке поле '{name}'." -#: netbox/models/features.py:462 +#: netbox/netbox/models/features.py:462 msgid "Remote data source" msgstr "Віддалене джерело даних" -#: netbox/models/features.py:472 +#: netbox/netbox/models/features.py:472 msgid "data path" msgstr "шлях даних" -#: netbox/models/features.py:476 +#: netbox/netbox/models/features.py:476 msgid "Path to remote file (relative to data source root)" -msgstr "Шляху до віддаленого файлу (відносно кореня джерела даних)" +msgstr "Шлях до віддаленого файлу (відносно кореня джерела даних)" -#: netbox/models/features.py:479 +#: netbox/netbox/models/features.py:479 msgid "auto sync enabled" -msgstr "увімкнено автоматичну синхронізацію" +msgstr "увімкнути автоматичну синхронізацію" -#: netbox/models/features.py:481 +#: netbox/netbox/models/features.py:481 msgid "Enable automatic synchronization of data when the data file is updated" msgstr "Увімкнути автоматичну синхронізацію даних при оновленні файлу даних" -#: netbox/models/features.py:484 +#: netbox/netbox/models/features.py:484 msgid "date synced" msgstr "дата синхронізована" -#: netbox/models/features.py:578 +#: netbox/netbox/models/features.py:578 #, python-brace-format msgid "{class_name} must implement a sync_data() method." -msgstr "{class_name} повинен реалізувати метод sync_data ()." +msgstr "{class_name} повинен реалізувати метод sync_data()." -#: netbox/navigation/menu.py:11 +#: netbox/netbox/navigation/menu.py:11 msgid "Organization" msgstr "Організація" -#: netbox/navigation/menu.py:19 +#: netbox/netbox/navigation/menu.py:19 msgid "Site Groups" msgstr "Групи тех. майданчиків" -#: netbox/navigation/menu.py:27 +#: netbox/netbox/navigation/menu.py:27 msgid "Tenant Groups" msgstr "Групи орендарів" -#: netbox/navigation/menu.py:34 +#: netbox/netbox/navigation/menu.py:34 msgid "Contact Groups" msgstr "Контактні групи" -#: netbox/navigation/menu.py:35 templates/tenancy/contactrole.html:8 +#: netbox/netbox/navigation/menu.py:35 +#: netbox/templates/tenancy/contactrole.html:8 msgid "Contact Roles" msgstr "Контактні ролі" -#: netbox/navigation/menu.py:36 +#: netbox/netbox/navigation/menu.py:36 msgid "Contact Assignments" msgstr "Контактні завдання" -#: netbox/navigation/menu.py:50 +#: netbox/netbox/navigation/menu.py:50 msgid "Rack Roles" msgstr "Ролі в стійці" -#: netbox/navigation/menu.py:54 +#: netbox/netbox/navigation/menu.py:54 msgid "Elevations" msgstr "Графічний вид" -#: netbox/navigation/menu.py:60 netbox/navigation/menu.py:62 +#: netbox/netbox/navigation/menu.py:60 netbox/netbox/navigation/menu.py:62 msgid "Rack Types" msgstr "Типи стійки" -#: netbox/navigation/menu.py:76 +#: netbox/netbox/navigation/menu.py:76 msgid "Modules" msgstr "Модулі" -#: netbox/navigation/menu.py:80 templates/dcim/device.html:160 -#: templates/dcim/virtualdevicecontext.html:8 +#: netbox/netbox/navigation/menu.py:80 netbox/templates/dcim/device.html:160 +#: netbox/templates/dcim/virtualdevicecontext.html:8 msgid "Virtual Device Contexts" msgstr "Контексти віртуальних пристроїв" -#: netbox/navigation/menu.py:88 +#: netbox/netbox/navigation/menu.py:88 msgid "Manufacturers" msgstr "Виробники" -#: netbox/navigation/menu.py:92 +#: netbox/netbox/navigation/menu.py:92 msgid "Device Components" msgstr "Компоненти пристрою" -#: netbox/navigation/menu.py:104 templates/dcim/inventoryitemrole.html:8 +#: netbox/netbox/navigation/menu.py:104 +#: netbox/templates/dcim/inventoryitemrole.html:8 msgid "Inventory Item Roles" msgstr "Ролі елементів інвентаря" -#: netbox/navigation/menu.py:111 netbox/navigation/menu.py:115 +#: netbox/netbox/navigation/menu.py:111 netbox/netbox/navigation/menu.py:115 msgid "Connections" msgstr "З'єднання" -#: netbox/navigation/menu.py:117 +#: netbox/netbox/navigation/menu.py:117 msgid "Cables" msgstr "Кабелі" -#: netbox/navigation/menu.py:118 +#: netbox/netbox/navigation/menu.py:118 msgid "Wireless Links" msgstr "Бездротові зв'язки" -#: netbox/navigation/menu.py:121 +#: netbox/netbox/navigation/menu.py:121 msgid "Interface Connections" -msgstr "Інтерфейсні з'єднання" +msgstr "Інтерфейсні підключення" -#: netbox/navigation/menu.py:126 +#: netbox/netbox/navigation/menu.py:126 msgid "Console Connections" msgstr "Консольні підключення" -#: netbox/navigation/menu.py:131 +#: netbox/netbox/navigation/menu.py:131 msgid "Power Connections" msgstr "Підключення живлення" -#: netbox/navigation/menu.py:147 +#: netbox/netbox/navigation/menu.py:147 msgid "Wireless LAN Groups" -msgstr "Групи бездротової локальної мережі" +msgstr "Групи WLAN" -#: netbox/navigation/menu.py:168 +#: netbox/netbox/navigation/menu.py:168 msgid "Prefix & VLAN Roles" msgstr "Префікс і ролі VLAN" -#: netbox/navigation/menu.py:174 +#: netbox/netbox/navigation/menu.py:174 msgid "ASN Ranges" msgstr "Діапазони ASN" -#: netbox/navigation/menu.py:196 +#: netbox/netbox/navigation/menu.py:196 msgid "VLAN Groups" msgstr "Групи VLAN" -#: netbox/navigation/menu.py:203 +#: netbox/netbox/navigation/menu.py:203 msgid "Service Templates" msgstr "Шаблони послуг" -#: netbox/navigation/menu.py:204 templates/dcim/device.html:302 -#: templates/ipam/ipaddress.html:118 -#: templates/virtualization/virtualmachine.html:154 +#: netbox/netbox/navigation/menu.py:204 netbox/templates/dcim/device.html:302 +#: netbox/templates/ipam/ipaddress.html:118 +#: netbox/templates/virtualization/virtualmachine.html:154 msgid "Services" msgstr "Послуги" -#: netbox/navigation/menu.py:211 +#: netbox/netbox/navigation/menu.py:211 msgid "VPN" msgstr "VPN" -#: netbox/navigation/menu.py:215 netbox/navigation/menu.py:217 -#: vpn/tables/tunnels.py:24 +#: netbox/netbox/navigation/menu.py:215 netbox/netbox/navigation/menu.py:217 +#: netbox/vpn/tables/tunnels.py:24 msgid "Tunnels" msgstr "Тунелі" -#: netbox/navigation/menu.py:218 templates/vpn/tunnelgroup.html:8 +#: netbox/netbox/navigation/menu.py:218 +#: netbox/templates/vpn/tunnelgroup.html:8 msgid "Tunnel Groups" msgstr "Тунельні групи" -#: netbox/navigation/menu.py:219 +#: netbox/netbox/navigation/menu.py:219 msgid "Tunnel Terminations" -msgstr "Закінчення тунелів" +msgstr "Кінці тунелів" -#: netbox/navigation/menu.py:223 netbox/navigation/menu.py:225 -#: vpn/models/l2vpn.py:64 +#: netbox/netbox/navigation/menu.py:223 netbox/netbox/navigation/menu.py:225 +#: netbox/vpn/models/l2vpn.py:64 msgid "L2VPNs" msgstr "L2VPN" -#: netbox/navigation/menu.py:226 templates/vpn/l2vpn.html:56 -#: templates/vpn/tunnel.html:72 vpn/tables/tunnels.py:58 +#: 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 "Припинення" +msgstr "Кінці" -#: netbox/navigation/menu.py:232 +#: netbox/netbox/navigation/menu.py:232 msgid "IKE Proposals" -msgstr "Пропозиції IKE" +msgstr "Налаштування IKE" -#: netbox/navigation/menu.py:233 templates/vpn/ikeproposal.html:41 +#: netbox/netbox/navigation/menu.py:233 +#: netbox/templates/vpn/ikeproposal.html:41 msgid "IKE Policies" msgstr "Політика IKE" -#: netbox/navigation/menu.py:234 +#: netbox/netbox/navigation/menu.py:234 msgid "IPSec Proposals" -msgstr "Пропозиції IPsec" +msgstr "Налаштування IPsec" -#: netbox/navigation/menu.py:235 templates/vpn/ipsecproposal.html:37 +#: netbox/netbox/navigation/menu.py:235 +#: netbox/templates/vpn/ipsecproposal.html:37 msgid "IPSec Policies" msgstr "Політика IPsec" -#: netbox/navigation/menu.py:236 templates/vpn/ikepolicy.html:38 -#: templates/vpn/ipsecpolicy.html:25 +#: netbox/netbox/navigation/menu.py:236 netbox/templates/vpn/ikepolicy.html:38 +#: netbox/templates/vpn/ipsecpolicy.html:25 msgid "IPSec Profiles" msgstr "Профілі IPsec" -#: netbox/navigation/menu.py:243 templates/dcim/device_edit.html:78 -msgid "Virtualization" -msgstr "Віртуалізація" - -#: netbox/navigation/menu.py:251 -#: templates/virtualization/virtualmachine.html:174 -#: templates/virtualization/virtualmachine/base.html:32 -#: templates/virtualization/virtualmachine_list.html:21 -#: virtualization/tables/virtualmachines.py:104 virtualization/views.py:388 +#: netbox/netbox/navigation/menu.py:251 +#: 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 msgid "Virtual Disks" msgstr "Віртуальні диски" -#: netbox/navigation/menu.py:258 +#: netbox/netbox/navigation/menu.py:258 msgid "Cluster Types" msgstr "Типи кластерів" -#: netbox/navigation/menu.py:259 +#: netbox/netbox/navigation/menu.py:259 msgid "Cluster Groups" msgstr "Кластерні групи" -#: netbox/navigation/menu.py:273 +#: netbox/netbox/navigation/menu.py:273 msgid "Circuit Types" msgstr "Типи схем" -#: netbox/navigation/menu.py:274 +#: netbox/netbox/navigation/menu.py:274 msgid "Circuit Groups" msgstr "Групи каналів зв'язку" -#: netbox/navigation/menu.py:275 templates/circuits/circuit.html:66 +#: netbox/netbox/navigation/menu.py:275 +#: netbox/templates/circuits/circuit.html:66 msgid "Group Assignments" msgstr "Групи завдань" -#: netbox/navigation/menu.py:276 +#: netbox/netbox/navigation/menu.py:276 msgid "Circuit Terminations" msgstr "Кінці каналу зв'язку" -#: netbox/navigation/menu.py:280 netbox/navigation/menu.py:282 +#: netbox/netbox/navigation/menu.py:280 netbox/netbox/navigation/menu.py:282 msgid "Providers" msgstr "Провайдери" -#: netbox/navigation/menu.py:283 templates/circuits/provider.html:51 +#: netbox/netbox/navigation/menu.py:283 +#: netbox/templates/circuits/provider.html:51 msgid "Provider Accounts" -msgstr "Облікові записи постачальника" +msgstr "Облікові записи провайдера" -#: netbox/navigation/menu.py:284 +#: netbox/netbox/navigation/menu.py:284 msgid "Provider Networks" msgstr "Мережі провайдерів" -#: netbox/navigation/menu.py:298 +#: netbox/netbox/navigation/menu.py:298 msgid "Power Panels" msgstr "Панелі живлення" -#: netbox/navigation/menu.py:309 +#: netbox/netbox/navigation/menu.py:309 msgid "Configurations" msgstr "Конфігурації" -#: netbox/navigation/menu.py:311 +#: netbox/netbox/navigation/menu.py:311 msgid "Config Contexts" msgstr "Контексти конфігурації" -#: netbox/navigation/menu.py:312 +#: netbox/netbox/navigation/menu.py:312 msgid "Config Templates" msgstr "Конфігураційні шаблони" -#: netbox/navigation/menu.py:319 netbox/navigation/menu.py:323 +#: netbox/netbox/navigation/menu.py:319 netbox/netbox/navigation/menu.py:323 msgid "Customization" -msgstr "Налаштування" +msgstr "Персоналізація" -#: netbox/navigation/menu.py:325 templates/dcim/device_edit.html:103 -#: templates/dcim/htmx/cable_edit.html:81 -#: templates/dcim/virtualchassis_add.html:31 -#: templates/dcim/virtualchassis_edit.html:40 -#: templates/generic/bulk_edit.html:76 templates/htmx/form.html:19 -#: templates/inc/filter_list.html:30 templates/inc/panels/custom_fields.html:7 -#: templates/ipam/ipaddress_bulk_add.html:35 templates/ipam/vlan_edit.html:59 +#: netbox/netbox/navigation/menu.py:325 +#: netbox/templates/dcim/device_edit.html:103 +#: netbox/templates/dcim/htmx/cable_edit.html:81 +#: netbox/templates/dcim/virtualchassis_add.html:31 +#: netbox/templates/dcim/virtualchassis_edit.html:40 +#: netbox/templates/generic/bulk_edit.html:76 +#: netbox/templates/htmx/form.html:19 netbox/templates/inc/filter_list.html:30 +#: netbox/templates/inc/panels/custom_fields.html:7 +#: netbox/templates/ipam/ipaddress_bulk_add.html:35 +#: netbox/templates/ipam/vlan_edit.html:59 msgid "Custom Fields" msgstr "Користувацькі поля" -#: netbox/navigation/menu.py:326 +#: netbox/netbox/navigation/menu.py:326 msgid "Custom Field Choices" msgstr "Вибір користувацьких полів" -#: netbox/navigation/menu.py:327 +#: netbox/netbox/navigation/menu.py:327 msgid "Custom Links" msgstr "Користувацькі посилання" -#: netbox/navigation/menu.py:328 +#: netbox/netbox/navigation/menu.py:328 msgid "Export Templates" msgstr "Експортувати шаблони" -#: netbox/navigation/menu.py:329 +#: netbox/netbox/navigation/menu.py:329 msgid "Saved Filters" msgstr "Збережені фільтри" -#: netbox/navigation/menu.py:331 +#: netbox/netbox/navigation/menu.py:331 msgid "Image Attachments" msgstr "Вкладення зображень" -#: netbox/navigation/menu.py:349 +#: netbox/netbox/navigation/menu.py:349 msgid "Operations" msgstr "Операції" -#: netbox/navigation/menu.py:353 +#: netbox/netbox/navigation/menu.py:353 msgid "Integrations" msgstr "Інтеграція" -#: netbox/navigation/menu.py:355 +#: netbox/netbox/navigation/menu.py:355 msgid "Data Sources" msgstr "Джерела даних" -#: netbox/navigation/menu.py:356 +#: netbox/netbox/navigation/menu.py:356 msgid "Event Rules" msgstr "Правила події" -#: netbox/navigation/menu.py:357 +#: netbox/netbox/navigation/menu.py:357 msgid "Webhooks" msgstr "Веб-хуки" -#: netbox/navigation/menu.py:361 netbox/navigation/menu.py:365 -#: netbox/views/generic/feature_views.py:153 -#: templates/extras/report/base.html:37 templates/extras/script/base.html:36 +#: netbox/netbox/navigation/menu.py:361 netbox/netbox/navigation/menu.py:365 +#: netbox/netbox/views/generic/feature_views.py:153 +#: netbox/templates/extras/report/base.html:37 +#: netbox/templates/extras/script/base.html:36 msgid "Jobs" msgstr "Завдання" -#: netbox/navigation/menu.py:371 +#: netbox/netbox/navigation/menu.py:371 msgid "Logging" -msgstr "Лісозаготівля" +msgstr "Ведення журналу" -#: netbox/navigation/menu.py:373 +#: netbox/netbox/navigation/menu.py:373 msgid "Notification Groups" msgstr "Групи сповіщень" -#: netbox/navigation/menu.py:374 +#: netbox/netbox/navigation/menu.py:374 msgid "Journal Entries" msgstr "Записи журналу" -#: netbox/navigation/menu.py:375 templates/core/objectchange.html:9 -#: templates/core/objectchange_list.html:4 +#: netbox/netbox/navigation/menu.py:375 +#: netbox/templates/core/objectchange.html:9 +#: netbox/templates/core/objectchange_list.html:4 msgid "Change Log" msgstr "Журнал змін" -#: netbox/navigation/menu.py:382 templates/inc/user_menu.html:29 +#: netbox/netbox/navigation/menu.py:382 netbox/templates/inc/user_menu.html:29 msgid "Admin" msgstr "Адміністратор" -#: netbox/navigation/menu.py:430 templates/account/base.html:27 -#: templates/inc/user_menu.html:57 +#: netbox/netbox/navigation/menu.py:430 netbox/templates/account/base.html:27 +#: netbox/templates/inc/user_menu.html:57 msgid "API Tokens" msgstr "Жетони API" -#: netbox/navigation/menu.py:437 users/forms/model_forms.py:187 -#: users/forms/model_forms.py:195 users/forms/model_forms.py:242 -#: users/forms/model_forms.py:249 +#: netbox/netbox/navigation/menu.py:437 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/navigation/menu.py:445 netbox/navigation/menu.py:449 -#: templates/core/system.html:7 +#: netbox/netbox/navigation/menu.py:445 netbox/netbox/navigation/menu.py:449 +#: netbox/templates/core/system.html:7 msgid "System" msgstr "Система" -#: netbox/navigation/menu.py:454 netbox/navigation/menu.py:502 -#: templates/500.html:35 templates/account/preferences.html:22 -#: templates/core/plugin.html:13 templates/core/plugin_list.html:7 -#: templates/core/plugin_list.html:12 +#: netbox/netbox/navigation/menu.py:454 netbox/netbox/navigation/menu.py:502 +#: netbox/templates/500.html:35 netbox/templates/account/preferences.html:22 +#: netbox/templates/core/plugin.html:13 +#: netbox/templates/core/plugin_list.html:7 +#: netbox/templates/core/plugin_list.html:12 msgid "Plugins" msgstr "Плагіни" -#: netbox/navigation/menu.py:459 +#: netbox/netbox/navigation/menu.py:459 msgid "Configuration History" msgstr "Історія налаштувань" -#: netbox/navigation/menu.py:465 templates/core/rq_task.html:8 -#: templates/core/rq_task_list.html:22 +#: netbox/netbox/navigation/menu.py:465 netbox/templates/core/rq_task.html:8 +#: netbox/templates/core/rq_task_list.html:22 msgid "Background Tasks" msgstr "Фонові завдання" -#: netbox/plugins/navigation.py:47 netbox/plugins/navigation.py:69 +#: netbox/netbox/plugins/navigation.py:47 +#: netbox/netbox/plugins/navigation.py:69 msgid "Permissions must be passed as a tuple or list." msgstr "Дозволи повинні бути передані у вигляді кортежу або списку." -#: netbox/plugins/navigation.py:51 +#: netbox/netbox/plugins/navigation.py:51 msgid "Buttons must be passed as a tuple or list." msgstr "Кнопки повинні бути передані у вигляді кортежу або списку." -#: netbox/plugins/navigation.py:73 +#: netbox/netbox/plugins/navigation.py:73 msgid "Button color must be a choice within ButtonColorChoices." msgstr "Колір кнопки повинен бути вибором у ButtonColorChoices." -#: netbox/plugins/registration.py:25 +#: netbox/netbox/plugins/registration.py:25 #, python-brace-format msgid "" "PluginTemplateExtension class {template_extension} was passed as an " @@ -10605,201 +11321,202 @@ msgstr "" "Клас PluginTemplateExtension {template_extension} був переданий як " "екземпляр!" -#: netbox/plugins/registration.py:31 +#: netbox/netbox/plugins/registration.py:31 #, python-brace-format msgid "" "{template_extension} is not a subclass of " "netbox.plugins.PluginTemplateExtension!" msgstr "" -"{template_extension} не є підкласом Netbox.Plugins.PluginTemplateExtension!" +"{template_extension} не є підкласом netbox.plugins.PluginTemplateExtension!" -#: netbox/plugins/registration.py:51 +#: netbox/netbox/plugins/registration.py:51 #, python-brace-format msgid "{item} must be an instance of netbox.plugins.PluginMenuItem" -msgstr "{item} повинен бути екземпляром Netbox.Plugins.PluginMenuItem" +msgstr "{item} повинен бути екземпляром netbox.plugins.PluginMenuItem" -#: netbox/plugins/registration.py:62 +#: netbox/netbox/plugins/registration.py:62 #, python-brace-format msgid "{menu_link} must be an instance of netbox.plugins.PluginMenuItem" -msgstr "{menu_link} повинен бути екземпляром Netbox.Plugins.PluginMenuItem" +msgstr "{menu_link} повинен бути екземпляром netbox.plugins.PluginMenuItem" -#: netbox/plugins/registration.py:67 +#: netbox/netbox/plugins/registration.py:67 #, python-brace-format msgid "{button} must be an instance of netbox.plugins.PluginMenuButton" -msgstr "{button} повинен бути екземпляром Netbox.Plugins.PluginMenuButton" +msgstr "{button} повинен бути екземпляром netbox.plugins.PluginMenuButton" -#: netbox/plugins/templates.py:37 +#: netbox/netbox/plugins/templates.py:37 msgid "extra_context must be a dictionary" msgstr "extra_context повинен бути словником" -#: netbox/preferences.py:19 +#: netbox/netbox/preferences.py:19 msgid "HTMX Navigation" msgstr "Навігація по HTMX" -#: netbox/preferences.py:24 +#: netbox/netbox/preferences.py:24 msgid "Enable dynamic UI navigation" msgstr "Увімкнути динамічну навігацію інтерфейсом" -#: netbox/preferences.py:26 +#: netbox/netbox/preferences.py:26 msgid "Experimental feature" -msgstr "Експериментальна особливість" +msgstr "Експериментальна функція" -#: netbox/preferences.py:29 +#: netbox/netbox/preferences.py:29 msgid "Language" msgstr "Мова" -#: netbox/preferences.py:34 +#: netbox/netbox/preferences.py:34 msgid "Forces UI translation to the specified language" msgstr "Примушує переклад інтерфейсу користувача на вказану мову" -#: netbox/preferences.py:36 +#: netbox/netbox/preferences.py:36 msgid "Support for translation has been disabled locally" msgstr "Підтримка перекладу вимкнена локально" -#: netbox/preferences.py:42 +#: netbox/netbox/preferences.py:42 msgid "Page length" msgstr "Довжина сторінки" -#: netbox/preferences.py:44 +#: netbox/netbox/preferences.py:44 msgid "The default number of objects to display per page" -msgstr "Типова кількість об'єктів для відображення на сторінці" +msgstr "Кількість об'єктів за замовченням на сторінці для відображення" -#: netbox/preferences.py:48 +#: netbox/netbox/preferences.py:48 msgid "Paginator placement" msgstr "Розміщення пагінатора" -#: netbox/preferences.py:50 +#: netbox/netbox/preferences.py:50 msgid "Bottom" msgstr "Внизу" -#: netbox/preferences.py:51 +#: netbox/netbox/preferences.py:51 msgid "Top" msgstr "Верх" -#: netbox/preferences.py:52 +#: netbox/netbox/preferences.py:52 msgid "Both" msgstr "Обидва" -#: netbox/preferences.py:55 +#: netbox/netbox/preferences.py:55 msgid "Where the paginator controls will be displayed relative to a table" msgstr "Де елементи керування paginator відображатимуться відносно таблиці" -#: netbox/preferences.py:60 +#: netbox/netbox/preferences.py:60 msgid "Data format" msgstr "Формат даних" -#: netbox/preferences.py:65 +#: netbox/netbox/preferences.py:65 msgid "The preferred syntax for displaying generic data within the UI" msgstr "" "Бажаний синтаксис для відображення загальних даних в інтерфейсі користувача" -#: netbox/registry.py:14 +#: netbox/netbox/registry.py:14 #, python-brace-format msgid "Invalid store: {key}" msgstr "Невірний магазин: {key}" -#: netbox/registry.py:17 +#: netbox/netbox/registry.py:17 msgid "Cannot add stores to registry after initialization" msgstr "Не вдається додати магазини до реєстру після ініціалізації" -#: netbox/registry.py:20 +#: netbox/netbox/registry.py:20 msgid "Cannot delete stores from registry" msgstr "Неможливо видалити магазини з реєстру" -#: netbox/settings.py:760 +#: netbox/netbox/settings.py:760 msgid "Czech" msgstr "Чеська мова" -#: netbox/settings.py:761 +#: netbox/netbox/settings.py:761 msgid "Danish" msgstr "Данська мова" -#: netbox/settings.py:762 +#: netbox/netbox/settings.py:762 msgid "German" msgstr "Німецька мова" -#: netbox/settings.py:763 +#: netbox/netbox/settings.py:763 msgid "English" msgstr "Англійська мова" -#: netbox/settings.py:764 +#: netbox/netbox/settings.py:764 msgid "Spanish" msgstr "Іспанська мова" -#: netbox/settings.py:765 +#: netbox/netbox/settings.py:765 msgid "French" msgstr "Французька мова" -#: netbox/settings.py:766 +#: netbox/netbox/settings.py:766 msgid "Italian" msgstr "Італійська мова" -#: netbox/settings.py:767 +#: netbox/netbox/settings.py:767 msgid "Japanese" msgstr "Японська мова" -#: netbox/settings.py:768 +#: netbox/netbox/settings.py:768 msgid "Dutch" msgstr "Голландська мова" -#: netbox/settings.py:769 +#: netbox/netbox/settings.py:769 msgid "Polish" msgstr "Польська мова" -#: netbox/settings.py:770 +#: netbox/netbox/settings.py:770 msgid "Portuguese" msgstr "Португальська мова" -#: netbox/settings.py:771 +#: netbox/netbox/settings.py:771 msgid "Russian" msgstr "Російська мова" -#: netbox/settings.py:772 +#: netbox/netbox/settings.py:772 msgid "Turkish" msgstr "Турецька мова" -#: netbox/settings.py:773 +#: netbox/netbox/settings.py:773 msgid "Ukrainian" msgstr "Українська мова" -#: netbox/settings.py:774 +#: netbox/netbox/settings.py:774 msgid "Chinese" msgstr "Китайська мова" -#: netbox/tables/columns.py:176 +#: netbox/netbox/tables/columns.py:176 msgid "Select all" msgstr "Вибрати все" -#: netbox/tables/columns.py:189 +#: netbox/netbox/tables/columns.py:189 msgid "Toggle all" msgstr "Перемкнути всі" -#: netbox/tables/columns.py:300 +#: netbox/netbox/tables/columns.py:300 msgid "Toggle Dropdown" msgstr "Переключити випадаюче меню" -#: netbox/tables/columns.py:572 templates/core/job.html:53 +#: netbox/netbox/tables/columns.py:572 netbox/templates/core/job.html:53 msgid "Error" msgstr "Помилка" -#: netbox/tables/tables.py:58 +#: netbox/netbox/tables/tables.py:58 #, python-brace-format msgid "No {model_name} found" msgstr "{model_name} не знайдено" -#: netbox/tables/tables.py:249 templates/generic/bulk_import.html:117 +#: netbox/netbox/tables/tables.py:249 +#: netbox/templates/generic/bulk_import.html:117 msgid "Field" msgstr "Поле" -#: netbox/tables/tables.py:252 +#: netbox/netbox/tables/tables.py:252 msgid "Value" msgstr "Значення" -#: netbox/tests/dummy_plugin/navigation.py:29 +#: netbox/netbox/tests/dummy_plugin/navigation.py:29 msgid "Dummy Plugin" -msgstr "Фікменний плагін" +msgstr "Фіктивний плагін" -#: netbox/views/generic/bulk_views.py:114 +#: netbox/netbox/views/generic/bulk_views.py:114 #, python-brace-format msgid "" "There was an error rendering the selected export template ({template}): " @@ -10808,56 +11525,56 @@ msgstr "" "Виникла помилка при рендерингу вибраного шаблону експорту ({template}): " "{error}" -#: netbox/views/generic/bulk_views.py:416 +#: netbox/netbox/views/generic/bulk_views.py:416 #, python-brace-format msgid "Row {i}: Object with ID {id} does not exist" msgstr "Ряд {i}: Об'єкт з ідентифікатором {id} не існує" -#: netbox/views/generic/bulk_views.py:702 -#: netbox/views/generic/bulk_views.py:900 -#: netbox/views/generic/bulk_views.py:948 +#: netbox/netbox/views/generic/bulk_views.py:709 +#: netbox/netbox/views/generic/bulk_views.py:910 +#: netbox/netbox/views/generic/bulk_views.py:958 #, python-brace-format msgid "No {object_type} were selected." msgstr "Ні {object_type} були обрані." -#: netbox/views/generic/bulk_views.py:782 +#: netbox/netbox/views/generic/bulk_views.py:788 #, python-brace-format msgid "Renamed {count} {object_type}" msgstr "Перейменовано {count} {object_type}" -#: netbox/views/generic/bulk_views.py:878 +#: netbox/netbox/views/generic/bulk_views.py:888 #, python-brace-format msgid "Deleted {count} {object_type}" msgstr "Видалено {count} {object_type}" -#: netbox/views/generic/feature_views.py:40 +#: netbox/netbox/views/generic/feature_views.py:40 msgid "Changelog" msgstr "Журнал змін" -#: netbox/views/generic/feature_views.py:93 +#: netbox/netbox/views/generic/feature_views.py:93 msgid "Journal" msgstr "Журнал" -#: netbox/views/generic/feature_views.py:207 +#: netbox/netbox/views/generic/feature_views.py:207 msgid "Unable to synchronize data: No data file set." msgstr "Неможливо синхронізувати дані: Файл даних не встановлено." -#: netbox/views/generic/feature_views.py:211 +#: netbox/netbox/views/generic/feature_views.py:211 #, python-brace-format msgid "Synchronized data for {object_type} {object}." msgstr "Синхронізовані дані для {object_type} {object}." -#: netbox/views/generic/feature_views.py:236 +#: netbox/netbox/views/generic/feature_views.py:236 #, python-brace-format msgid "Synced {count} {object_type}" msgstr "Синхронізовано {count} {object_type}" -#: netbox/views/generic/object_views.py:108 +#: netbox/netbox/views/generic/object_views.py:108 #, python-brace-format msgid "{class_name} must implement get_children()" -msgstr "{class_name} повинен реалізувати get_children ()" +msgstr "{class_name} повинен реалізувати get_children()" -#: netbox/views/misc.py:44 +#: netbox/netbox/views/misc.py:46 msgid "" "There was an error loading the dashboard configuration. A default dashboard " "is in use." @@ -10865,1087 +11582,1145 @@ msgstr "" "Виникла помилка при завантаженні конфігурації інформаційної панелі. " "Використовується інформаційна панель за замовчуванням." -#: templates/403.html:4 +#: netbox/templates/403.html:4 msgid "Access Denied" msgstr "Доступ заборонений" -#: templates/403.html:9 +#: netbox/templates/403.html:9 msgid "You do not have permission to access this page" msgstr "У вас немає дозволу на доступ до цієї сторінки" -#: templates/404.html:4 +#: netbox/templates/404.html:4 msgid "Page Not Found" msgstr "Сторінка не знайдена" -#: templates/404.html:9 +#: netbox/templates/404.html:9 msgid "The requested page does not exist" msgstr "Запитувана сторінка не існує" -#: templates/500.html:7 templates/500.html:18 +#: netbox/templates/500.html:7 netbox/templates/500.html:18 msgid "Server Error" msgstr "Помилка сервера" -#: templates/500.html:23 +#: netbox/templates/500.html:23 msgid "There was a problem with your request. Please contact an administrator" msgstr "" "Виникла проблема з вашим запитом. Будь ласка, зв'яжіться з адміністратором" -#: templates/500.html:28 +#: netbox/templates/500.html:28 msgid "The complete exception is provided below" msgstr "Повне виключення наведено нижче" -#: templates/500.html:33 templates/core/system.html:40 +#: netbox/templates/500.html:33 netbox/templates/core/system.html:40 msgid "Python version" msgstr "Версія Python" -#: templates/500.html:34 +#: netbox/templates/500.html:34 msgid "NetBox version" msgstr "Версія NetBox" -#: templates/500.html:36 +#: netbox/templates/500.html:36 msgid "None installed" msgstr "Не встановлено" -#: templates/500.html:39 +#: netbox/templates/500.html:39 msgid "If further assistance is required, please post to the" msgstr "" "Якщо потрібна додаткова допомога, будь ласка, надішліть повідомлення на" -#: templates/500.html:39 +#: netbox/templates/500.html:39 msgid "NetBox discussion forum" msgstr "Дискусійний форум NetBox" -#: templates/500.html:39 +#: netbox/templates/500.html:39 msgid "on GitHub" msgstr "на GitHub" -#: templates/500.html:42 templates/base/40x.html:17 +#: netbox/templates/500.html:42 netbox/templates/base/40x.html:17 msgid "Home Page" msgstr "Головна сторінка" -#: templates/account/base.html:7 templates/inc/user_menu.html:45 -#: vpn/forms/bulk_edit.py:255 vpn/forms/filtersets.py:189 -#: vpn/forms/model_forms.py:379 +#: netbox/templates/account/base.html:7 netbox/templates/inc/user_menu.html:45 +#: netbox/vpn/forms/bulk_edit.py:255 netbox/vpn/forms/filtersets.py:189 +#: netbox/vpn/forms/model_forms.py:379 msgid "Profile" msgstr "Профіль" -#: templates/account/base.html:13 templates/account/notifications.html:7 -#: templates/inc/user_menu.html:15 +#: netbox/templates/account/base.html:13 +#: netbox/templates/account/notifications.html:7 +#: netbox/templates/inc/user_menu.html:15 msgid "Notifications" msgstr "Повідомлення" -#: templates/account/base.html:16 templates/account/subscriptions.html:7 -#: templates/inc/user_menu.html:51 +#: netbox/templates/account/base.html:16 +#: netbox/templates/account/subscriptions.html:7 +#: netbox/templates/inc/user_menu.html:51 msgid "Subscriptions" msgstr "Підписки" -#: templates/account/base.html:19 templates/inc/user_menu.html:54 +#: netbox/templates/account/base.html:19 +#: netbox/templates/inc/user_menu.html:54 msgid "Preferences" msgstr "Налаштування" -#: templates/account/password.html:5 +#: netbox/templates/account/password.html:5 msgid "Change Password" msgstr "Змінити пароль" -#: templates/account/password.html:19 templates/account/preferences.html:77 -#: templates/core/configrevision_restore.html:63 -#: templates/dcim/devicebay_populate.html:34 -#: templates/dcim/virtualchassis_add_member.html:26 -#: templates/dcim/virtualchassis_edit.html:103 -#: templates/extras/object_journal.html:26 templates/extras/script.html:38 -#: templates/generic/bulk_add_component.html:67 -#: templates/generic/bulk_delete.html:65 templates/generic/bulk_edit.html:106 -#: templates/generic/bulk_import.html:56 templates/generic/bulk_import.html:78 -#: templates/generic/bulk_import.html:100 -#: templates/generic/bulk_remove.html:62 templates/generic/bulk_rename.html:63 -#: templates/generic/confirmation_form.html:19 -#: templates/generic/object_edit.html:72 templates/htmx/delete_form.html:53 -#: templates/htmx/delete_form.html:55 templates/ipam/ipaddress_assign.html:28 -#: templates/virtualization/cluster_add_devices.html:30 +#: netbox/templates/account/password.html:19 +#: netbox/templates/account/preferences.html:77 +#: netbox/templates/core/configrevision_restore.html:63 +#: netbox/templates/dcim/devicebay_populate.html:34 +#: netbox/templates/dcim/virtualchassis_add_member.html:26 +#: netbox/templates/dcim/virtualchassis_edit.html:103 +#: netbox/templates/extras/object_journal.html:26 +#: netbox/templates/extras/script.html:38 +#: netbox/templates/generic/bulk_add_component.html:67 +#: netbox/templates/generic/bulk_delete.html:65 +#: netbox/templates/generic/bulk_edit.html:106 +#: netbox/templates/generic/bulk_import.html:56 +#: netbox/templates/generic/bulk_import.html:78 +#: netbox/templates/generic/bulk_import.html:100 +#: netbox/templates/generic/bulk_remove.html:62 +#: netbox/templates/generic/bulk_rename.html:63 +#: netbox/templates/generic/confirmation_form.html:19 +#: netbox/templates/generic/object_edit.html:72 +#: netbox/templates/htmx/delete_form.html:53 +#: netbox/templates/htmx/delete_form.html:55 +#: netbox/templates/ipam/ipaddress_assign.html:28 +#: netbox/templates/virtualization/cluster_add_devices.html:30 msgid "Cancel" msgstr "Скасувати" -#: templates/account/password.html:20 templates/account/preferences.html:78 -#: templates/dcim/devicebay_populate.html:35 -#: templates/dcim/virtualchassis_add_member.html:28 -#: templates/dcim/virtualchassis_edit.html:105 -#: templates/extras/dashboard/widget_add.html:26 -#: templates/extras/dashboard/widget_config.html:19 -#: templates/extras/object_journal.html:27 -#: templates/generic/object_edit.html:75 -#: utilities/templates/helpers/applied_filters.html:16 -#: utilities/templates/helpers/table_config_form.html:40 +#: netbox/templates/account/password.html:20 +#: netbox/templates/account/preferences.html:78 +#: netbox/templates/dcim/devicebay_populate.html:35 +#: netbox/templates/dcim/virtualchassis_add_member.html:28 +#: netbox/templates/dcim/virtualchassis_edit.html:105 +#: netbox/templates/extras/dashboard/widget_add.html:26 +#: netbox/templates/extras/dashboard/widget_config.html:19 +#: netbox/templates/extras/object_journal.html:27 +#: netbox/templates/generic/object_edit.html:75 +#: netbox/utilities/templates/helpers/applied_filters.html:16 +#: netbox/utilities/templates/helpers/table_config_form.html:40 msgid "Save" msgstr "Зберегти" -#: templates/account/preferences.html:34 +#: netbox/templates/account/preferences.html:34 msgid "Table Configurations" msgstr "Конфігурації таблиці" -#: templates/account/preferences.html:39 +#: netbox/templates/account/preferences.html:39 msgid "Clear table preferences" msgstr "Очистити параметри таблиці" -#: templates/account/preferences.html:47 +#: netbox/templates/account/preferences.html:47 msgid "Toggle All" msgstr "Перемкнути всі" -#: templates/account/preferences.html:49 +#: netbox/templates/account/preferences.html:49 msgid "Table" msgstr "Таблиця" -#: templates/account/preferences.html:50 +#: netbox/templates/account/preferences.html:50 msgid "Ordering" msgstr "Замовлення" -#: templates/account/preferences.html:51 +#: netbox/templates/account/preferences.html:51 msgid "Columns" -msgstr "Колони" +msgstr "Колонки" -#: templates/account/preferences.html:71 templates/dcim/cable_trace.html:113 -#: templates/extras/object_configcontext.html:43 +#: netbox/templates/account/preferences.html:71 +#: netbox/templates/dcim/cable_trace.html:113 +#: netbox/templates/extras/object_configcontext.html:43 msgid "None found" msgstr "Не знайдено" -#: templates/account/profile.html:6 +#: netbox/templates/account/profile.html:6 msgid "User Profile" msgstr "Профіль користувача" -#: templates/account/profile.html:12 +#: netbox/templates/account/profile.html:12 msgid "Account Details" msgstr "Реквізити рахунку" -#: templates/account/profile.html:29 templates/tenancy/contact.html:43 -#: templates/users/user.html:25 tenancy/forms/bulk_edit.py:109 +#: netbox/templates/account/profile.html:29 +#: netbox/templates/tenancy/contact.html:43 +#: netbox/templates/users/user.html:25 netbox/tenancy/forms/bulk_edit.py:109 msgid "Email" msgstr "Електронна скринька" -#: templates/account/profile.html:33 templates/users/user.html:29 +#: netbox/templates/account/profile.html:33 +#: netbox/templates/users/user.html:29 msgid "Account Created" msgstr "Створено обліковий запис" -#: templates/account/profile.html:37 templates/users/user.html:33 +#: netbox/templates/account/profile.html:37 +#: netbox/templates/users/user.html:33 msgid "Last Login" msgstr "Останній вхід" -#: templates/account/profile.html:41 templates/users/user.html:45 +#: netbox/templates/account/profile.html:41 +#: netbox/templates/users/user.html:45 msgid "Superuser" msgstr "Суперкористувач" -#: templates/account/profile.html:45 templates/inc/user_menu.html:31 -#: templates/users/user.html:41 +#: netbox/templates/account/profile.html:45 +#: netbox/templates/inc/user_menu.html:31 netbox/templates/users/user.html:41 msgid "Staff" msgstr "Персонал" -#: templates/account/profile.html:53 templates/users/objectpermission.html:82 -#: templates/users/user.html:53 +#: netbox/templates/account/profile.html:53 +#: netbox/templates/users/objectpermission.html:82 +#: netbox/templates/users/user.html:53 msgid "Assigned Groups" msgstr "Призначені групи" -#: templates/account/profile.html:58 -#: templates/circuits/circuit_terminations_swap.html:18 -#: templates/circuits/circuit_terminations_swap.html:26 -#: templates/circuits/circuittermination.html:34 -#: templates/circuits/inc/circuit_termination.html:68 -#: templates/core/objectchange.html:124 templates/core/objectchange.html:142 -#: templates/dcim/devicebay.html:59 -#: templates/dcim/inc/panels/inventory_items.html:45 -#: templates/dcim/interface.html:296 templates/dcim/modulebay.html:80 -#: templates/extras/configcontext.html:70 templates/extras/eventrule.html:66 -#: templates/extras/htmx/script_result.html:60 -#: templates/extras/webhook.html:65 templates/extras/webhook.html:75 -#: templates/inc/panel_table.html:13 templates/inc/panels/comments.html:10 -#: templates/ipam/inc/panels/fhrp_groups.html:56 templates/users/group.html:34 -#: templates/users/group.html:44 templates/users/objectpermission.html:77 -#: templates/users/objectpermission.html:87 templates/users/user.html:58 -#: templates/users/user.html:68 +#: netbox/templates/account/profile.html:58 +#: netbox/templates/circuits/circuit_terminations_swap.html:18 +#: netbox/templates/circuits/circuit_terminations_swap.html:26 +#: netbox/templates/circuits/circuittermination.html:34 +#: netbox/templates/circuits/inc/circuit_termination.html:68 +#: netbox/templates/core/objectchange.html:124 +#: 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/modulebay.html:80 +#: netbox/templates/extras/configcontext.html:70 +#: netbox/templates/extras/eventrule.html:66 +#: netbox/templates/extras/htmx/script_result.html:60 +#: netbox/templates/extras/webhook.html:65 +#: netbox/templates/extras/webhook.html:75 +#: netbox/templates/inc/panel_table.html:13 +#: netbox/templates/inc/panels/comments.html:10 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:56 +#: netbox/templates/users/group.html:34 netbox/templates/users/group.html:44 +#: netbox/templates/users/objectpermission.html:77 +#: netbox/templates/users/objectpermission.html:87 +#: netbox/templates/users/user.html:58 netbox/templates/users/user.html:68 msgid "None" -msgstr "Жоден" +msgstr "Жодного" -#: templates/account/profile.html:68 templates/users/user.html:78 +#: netbox/templates/account/profile.html:68 +#: netbox/templates/users/user.html:78 msgid "Recent Activity" msgstr "Недавня діяльність" -#: templates/account/token.html:8 templates/account/token_list.html:6 +#: netbox/templates/account/token.html:8 +#: netbox/templates/account/token_list.html:6 msgid "My API Tokens" msgstr "Мої жетони API" -#: templates/account/token.html:11 templates/account/token.html:19 -#: templates/users/token.html:6 templates/users/token.html:14 -#: users/forms/filtersets.py:120 +#: netbox/templates/account/token.html:11 +#: netbox/templates/account/token.html:19 netbox/templates/users/token.html:6 +#: netbox/templates/users/token.html:14 netbox/users/forms/filtersets.py:120 msgid "Token" -msgstr "Токен" +msgstr "Жетон" -#: templates/account/token.html:39 templates/users/token.html:31 -#: users/forms/bulk_edit.py:107 +#: netbox/templates/account/token.html:39 netbox/templates/users/token.html:31 +#: netbox/users/forms/bulk_edit.py:107 msgid "Write enabled" msgstr "Запис увімкнено" -#: templates/account/token.html:51 templates/users/token.html:43 +#: netbox/templates/account/token.html:51 netbox/templates/users/token.html:43 msgid "Last used" msgstr "Востаннє використано" -#: templates/account/token_list.html:12 +#: netbox/templates/account/token_list.html:12 msgid "Add a Token" -msgstr "Додати токен" +msgstr "Додати Жетон" -#: templates/base/base.html:22 templates/home.html:27 +#: netbox/templates/base/base.html:22 netbox/templates/home.html:27 msgid "Home" msgstr "Головна" -#: templates/base/layout.html:25 +#: netbox/templates/base/layout.html:25 msgid "NetBox Motif" msgstr "NetBox Motif" -#: templates/base/layout.html:38 templates/base/layout.html:39 -#: templates/login.html:14 templates/login.html:15 +#: netbox/templates/base/layout.html:38 netbox/templates/base/layout.html:39 +#: netbox/templates/login.html:14 netbox/templates/login.html:15 msgid "NetBox Logo" msgstr "Логотип NetBox" -#: templates/base/layout.html:150 templates/base/layout.html:151 +#: netbox/templates/base/layout.html:150 netbox/templates/base/layout.html:151 msgid "Docs" msgstr "Документація" -#: templates/base/layout.html:156 templates/base/layout.html:157 -#: templates/rest_framework/api.html:10 +#: netbox/templates/base/layout.html:156 netbox/templates/base/layout.html:157 +#: netbox/templates/rest_framework/api.html:10 msgid "REST API" msgstr "REST API" -#: templates/base/layout.html:162 templates/base/layout.html:163 +#: netbox/templates/base/layout.html:162 netbox/templates/base/layout.html:163 msgid "REST API documentation" msgstr "Документація REST API" -#: templates/base/layout.html:169 templates/base/layout.html:170 +#: netbox/templates/base/layout.html:169 netbox/templates/base/layout.html:170 msgid "GraphQL API" msgstr "Графічний інтерфейс QL" -#: templates/base/layout.html:185 templates/base/layout.html:186 +#: netbox/templates/base/layout.html:185 netbox/templates/base/layout.html:186 msgid "NetBox Labs Support" msgstr "Підтримка NetBox Labs" -#: templates/base/layout.html:194 templates/base/layout.html:195 +#: netbox/templates/base/layout.html:194 netbox/templates/base/layout.html:195 msgid "Source Code" msgstr "Вихідний код" -#: templates/base/layout.html:200 templates/base/layout.html:201 +#: netbox/templates/base/layout.html:200 netbox/templates/base/layout.html:201 msgid "Community" msgstr "Спільнота" -#: templates/circuits/circuit.html:47 +#: netbox/templates/circuits/circuit.html:47 msgid "Install Date" msgstr "Дата встановлення" -#: templates/circuits/circuit.html:51 +#: netbox/templates/circuits/circuit.html:51 msgid "Termination Date" msgstr "Дата припинення" -#: templates/circuits/circuit.html:70 -#: templates/ipam/inc/panels/fhrp_groups.html:15 +#: netbox/templates/circuits/circuit.html:70 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:15 msgid "Assign Group" -msgstr "Призначити групу" +msgstr "Призначити у групу" -#: templates/circuits/circuit_terminations_swap.html:4 +#: netbox/templates/circuits/circuit_terminations_swap.html:4 msgid "Swap Circuit Terminations" msgstr "Поміняти місцями кінці каналу зв'язку" -#: templates/circuits/circuit_terminations_swap.html:8 +#: netbox/templates/circuits/circuit_terminations_swap.html:8 #, python-format msgid "Swap these terminations for circuit %(circuit)s?" -msgstr "Поміняти місцями кінці для каналу зв'язку%(circuit)s?" +msgstr "Поміняти місцями кінці для каналу зв'язку %(circuit)s?" -#: templates/circuits/circuit_terminations_swap.html:14 +#: netbox/templates/circuits/circuit_terminations_swap.html:14 msgid "A side" msgstr "Сторона А" -#: templates/circuits/circuit_terminations_swap.html:22 +#: netbox/templates/circuits/circuit_terminations_swap.html:22 msgid "Z side" msgstr "Сторона Б" -#: templates/circuits/circuitgroup.html:16 +#: netbox/templates/circuits/circuitgroup.html:16 msgid "Assign Circuit" msgstr "Призначити канал зв'язку" -#: templates/circuits/circuitgroupassignment.html:19 +#: netbox/templates/circuits/circuitgroupassignment.html:19 msgid "Circuit Group Assignment" msgstr "Призначення групи каналів зв'язку" -#: templates/circuits/circuittype.html:10 +#: netbox/templates/circuits/circuittype.html:10 msgid "Add Circuit" msgstr "Додати канал зв'язку" -#: templates/circuits/circuittype.html:19 +#: netbox/templates/circuits/circuittype.html:19 msgid "Circuit Type" msgstr "Тип каналу зв'язку" -#: templates/circuits/inc/circuit_termination.html:10 -#: templates/dcim/manufacturer.html:11 -#: templates/generic/bulk_add_component.html:22 -#: templates/users/objectpermission.html:38 -#: utilities/templates/buttons/add.html:4 -#: utilities/templates/helpers/table_config_form.html:20 +#: netbox/templates/circuits/inc/circuit_termination.html:10 +#: netbox/templates/dcim/manufacturer.html:11 +#: netbox/templates/generic/bulk_add_component.html:22 +#: netbox/templates/users/objectpermission.html:38 +#: netbox/utilities/templates/buttons/add.html:4 +#: netbox/utilities/templates/helpers/table_config_form.html:20 msgid "Add" msgstr "Додати" -#: templates/circuits/inc/circuit_termination.html:15 -#: templates/circuits/inc/circuit_termination_fields.html:36 -#: templates/dcim/inc/panels/inventory_items.html:32 -#: templates/dcim/powerpanel.html:56 templates/extras/script_list.html:30 -#: templates/generic/object_edit.html:47 -#: templates/ipam/inc/ipaddress_edit_header.html:7 -#: templates/ipam/inc/panels/fhrp_groups.html:43 -#: utilities/templates/buttons/edit.html:3 +#: netbox/templates/circuits/inc/circuit_termination.html:15 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:36 +#: netbox/templates/dcim/inc/panels/inventory_items.html:32 +#: netbox/templates/dcim/powerpanel.html:56 +#: netbox/templates/extras/script_list.html:30 +#: netbox/templates/generic/object_edit.html:47 +#: netbox/templates/ipam/inc/ipaddress_edit_header.html:7 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:43 +#: netbox/utilities/templates/buttons/edit.html:3 msgid "Edit" msgstr "Редагувати" -#: templates/circuits/inc/circuit_termination.html:18 +#: netbox/templates/circuits/inc/circuit_termination.html:18 msgid "Swap" -msgstr "Обмін" +msgstr "Поміняти місцями" -#: templates/circuits/inc/circuit_termination_fields.html:19 -#: templates/dcim/consoleport.html:59 templates/dcim/consoleserverport.html:60 -#: templates/dcim/powerfeed.html:114 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:19 +#: netbox/templates/dcim/consoleport.html:59 +#: netbox/templates/dcim/consoleserverport.html:60 +#: netbox/templates/dcim/powerfeed.html:114 msgid "Marked as connected" msgstr "Позначено як підключений" -#: templates/circuits/inc/circuit_termination_fields.html:21 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:21 msgid "to" msgstr "до" -#: templates/circuits/inc/circuit_termination_fields.html:31 -#: templates/circuits/inc/circuit_termination_fields.html:32 -#: templates/dcim/frontport.html:80 -#: templates/dcim/inc/connection_endpoints.html:7 -#: templates/dcim/interface.html:154 templates/dcim/rearport.html:76 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:31 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:32 +#: netbox/templates/dcim/frontport.html:80 +#: netbox/templates/dcim/inc/connection_endpoints.html:7 +#: netbox/templates/dcim/interface.html:154 +#: netbox/templates/dcim/rearport.html:76 msgid "Trace" msgstr "Слід" -#: templates/circuits/inc/circuit_termination_fields.html:35 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:35 msgid "Edit cable" msgstr "Редагувати кабель" -#: templates/circuits/inc/circuit_termination_fields.html:40 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:40 msgid "Remove cable" msgstr "Видаліть кабель" -#: templates/circuits/inc/circuit_termination_fields.html:41 -#: templates/dcim/bulk_disconnect.html:5 -#: templates/dcim/device/consoleports.html:12 -#: templates/dcim/device/consoleserverports.html:12 -#: templates/dcim/device/frontports.html:12 -#: templates/dcim/device/interfaces.html:16 -#: templates/dcim/device/poweroutlets.html:12 -#: templates/dcim/device/powerports.html:12 -#: templates/dcim/device/rearports.html:12 templates/dcim/powerpanel.html:61 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:41 +#: netbox/templates/dcim/bulk_disconnect.html:5 +#: netbox/templates/dcim/device/consoleports.html:12 +#: netbox/templates/dcim/device/consoleserverports.html:12 +#: netbox/templates/dcim/device/frontports.html:12 +#: netbox/templates/dcim/device/interfaces.html:16 +#: netbox/templates/dcim/device/poweroutlets.html:12 +#: netbox/templates/dcim/device/powerports.html:12 +#: netbox/templates/dcim/device/rearports.html:12 +#: netbox/templates/dcim/powerpanel.html:61 msgid "Disconnect" msgstr "Відключити" -#: templates/circuits/inc/circuit_termination_fields.html:48 -#: templates/dcim/consoleport.html:69 templates/dcim/consoleserverport.html:70 -#: templates/dcim/frontport.html:102 templates/dcim/interface.html:180 -#: templates/dcim/interface.html:200 templates/dcim/powerfeed.html:127 -#: templates/dcim/poweroutlet.html:71 templates/dcim/poweroutlet.html:72 -#: templates/dcim/powerport.html:73 templates/dcim/rearport.html:98 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:48 +#: netbox/templates/dcim/consoleport.html:69 +#: netbox/templates/dcim/consoleserverport.html:70 +#: netbox/templates/dcim/frontport.html:102 +#: netbox/templates/dcim/interface.html:180 +#: netbox/templates/dcim/interface.html:200 +#: netbox/templates/dcim/powerfeed.html:127 +#: netbox/templates/dcim/poweroutlet.html:71 +#: netbox/templates/dcim/poweroutlet.html:72 +#: netbox/templates/dcim/powerport.html:73 +#: netbox/templates/dcim/rearport.html:98 msgid "Connect" msgstr "Підключити" -#: templates/circuits/inc/circuit_termination_fields.html:70 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:70 msgid "Downstream" msgstr "За течією" -#: templates/circuits/inc/circuit_termination_fields.html:71 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:71 msgid "Upstream" msgstr "Вгору за течією" -#: templates/circuits/inc/circuit_termination_fields.html:80 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:80 msgid "Cross-Connect" msgstr "Перехресне з'єднання" -#: templates/circuits/inc/circuit_termination_fields.html:84 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:84 msgid "Patch Panel/Port" msgstr "Патч-панель/порт" -#: templates/circuits/provider.html:11 +#: netbox/templates/circuits/provider.html:11 msgid "Add circuit" msgstr "Додати канал зв'язку" -#: templates/circuits/provideraccount.html:17 +#: netbox/templates/circuits/provideraccount.html:17 msgid "Provider Account" msgstr "Обліковий запис постачальника" -#: templates/core/configrevision.html:35 +#: netbox/templates/core/configrevision.html:35 msgid "Configuration Data" msgstr "Дані конфігурації" -#: templates/core/configrevision.html:40 +#: netbox/templates/core/configrevision.html:40 msgid "Comment" msgstr "Коментар" -#: templates/core/configrevision_restore.html:8 -#: templates/core/configrevision_restore.html:25 -#: templates/core/configrevision_restore.html:64 +#: netbox/templates/core/configrevision_restore.html:8 +#: netbox/templates/core/configrevision_restore.html:25 +#: netbox/templates/core/configrevision_restore.html:64 msgid "Restore" msgstr "Відновити" -#: templates/core/configrevision_restore.html:36 +#: netbox/templates/core/configrevision_restore.html:36 msgid "Parameter" msgstr "Параметр" -#: templates/core/configrevision_restore.html:37 +#: netbox/templates/core/configrevision_restore.html:37 msgid "Current Value" msgstr "Поточна величина" -#: templates/core/configrevision_restore.html:38 +#: netbox/templates/core/configrevision_restore.html:38 msgid "New Value" msgstr "Нова цінність" -#: templates/core/configrevision_restore.html:50 +#: netbox/templates/core/configrevision_restore.html:50 msgid "Changed" msgstr "Змінено" -#: templates/core/datafile.html:42 templates/ipam/iprange.html:25 -#: templates/virtualization/virtualdisk.html:29 -#: virtualization/tables/virtualmachines.py:198 +#: netbox/templates/core/datafile.html:42 +#: netbox/templates/ipam/iprange.html:25 +#: netbox/templates/virtualization/virtualdisk.html:29 +#: netbox/virtualization/tables/virtualmachines.py:198 msgid "Size" msgstr "Розмір" -#: templates/core/datafile.html:43 +#: netbox/templates/core/datafile.html:43 msgid "bytes" msgstr "байтів" -#: templates/core/datafile.html:46 +#: netbox/templates/core/datafile.html:46 msgid "SHA256 Hash" msgstr "Хеш SHA256" -#: templates/core/datasource.html:14 templates/core/datasource.html:20 -#: utilities/templates/buttons/sync.html:5 +#: netbox/templates/core/datasource.html:14 +#: netbox/templates/core/datasource.html:20 +#: netbox/utilities/templates/buttons/sync.html:5 msgid "Sync" msgstr "Синхронізація" -#: templates/core/datasource.html:50 +#: netbox/templates/core/datasource.html:50 msgid "Last synced" msgstr "Востаннє синхронізовано" -#: templates/core/datasource.html:84 +#: netbox/templates/core/datasource.html:84 msgid "Backend" msgstr "Бекенд" -#: templates/core/datasource.html:99 +#: netbox/templates/core/datasource.html:99 msgid "No parameters defined" msgstr "Параметри не визначені" -#: templates/core/datasource.html:114 +#: netbox/templates/core/datasource.html:114 msgid "Files" msgstr "Файли" -#: templates/core/inc/config_data.html:7 +#: netbox/templates/core/inc/config_data.html:7 msgid "Rack elevations" msgstr "Висота стійки" -#: templates/core/inc/config_data.html:10 +#: netbox/templates/core/inc/config_data.html:10 msgid "Default unit height" msgstr "Висота монтажної одиниці за замовчуванням" -#: templates/core/inc/config_data.html:14 +#: netbox/templates/core/inc/config_data.html:14 msgid "Default unit width" msgstr "Ширина одиниці за замовчуванням" -#: templates/core/inc/config_data.html:20 +#: netbox/templates/core/inc/config_data.html:20 msgid "Power feeds" msgstr "Подача живлення" -#: templates/core/inc/config_data.html:23 +#: netbox/templates/core/inc/config_data.html:23 msgid "Default voltage" msgstr "Напруга за замовчуванням" -#: templates/core/inc/config_data.html:27 +#: netbox/templates/core/inc/config_data.html:27 msgid "Default amperage" msgstr "Сила струму за замовчуванням" -#: templates/core/inc/config_data.html:31 +#: netbox/templates/core/inc/config_data.html:31 msgid "Default max utilization" msgstr "Максимальне використання за замовчуванням" -#: templates/core/inc/config_data.html:40 +#: netbox/templates/core/inc/config_data.html:40 msgid "Enforce global unique" msgstr "Забезпечити глобальну унікальність" -#: templates/core/inc/config_data.html:83 +#: netbox/templates/core/inc/config_data.html:83 msgid "Paginate count" msgstr "Кількість сторінок" -#: templates/core/inc/config_data.html:87 +#: netbox/templates/core/inc/config_data.html:87 msgid "Max page size" msgstr "Максимальний розмір сторінки" -#: templates/core/inc/config_data.html:114 +#: netbox/templates/core/inc/config_data.html:114 msgid "User preferences" msgstr "Налаштування користувача" -#: templates/core/inc/config_data.html:141 +#: netbox/templates/core/inc/config_data.html:141 msgid "Job retention" msgstr "Зберігання завдання" -#: templates/core/job.html:35 templates/core/rq_task.html:12 -#: templates/core/rq_task.html:49 templates/core/rq_task.html:58 +#: netbox/templates/core/job.html:35 netbox/templates/core/rq_task.html:12 +#: netbox/templates/core/rq_task.html:49 netbox/templates/core/rq_task.html:58 msgid "Job" msgstr "Завдання" -#: templates/core/job.html:58 templates/extras/journalentry.html:26 +#: netbox/templates/core/job.html:58 +#: netbox/templates/extras/journalentry.html:26 msgid "Created By" msgstr "Створено" -#: templates/core/job.html:66 +#: netbox/templates/core/job.html:66 msgid "Scheduling" msgstr "Планування" -#: templates/core/job.html:77 +#: netbox/templates/core/job.html:77 #, python-format msgid "every %(interval)s minutes" msgstr "кожен %(interval)s хвилини" -#: templates/core/objectchange.html:29 -#: templates/users/objectpermission.html:42 +#: netbox/templates/core/objectchange.html:29 +#: netbox/templates/users/objectpermission.html:42 msgid "Change" msgstr "Змінити" -#: templates/core/objectchange.html:79 +#: netbox/templates/core/objectchange.html:79 msgid "Difference" msgstr "Різниця" -#: templates/core/objectchange.html:82 +#: netbox/templates/core/objectchange.html:82 msgid "Previous" msgstr "Попередній" -#: templates/core/objectchange.html:85 +#: netbox/templates/core/objectchange.html:85 msgid "Next" msgstr "Наступний" -#: templates/core/objectchange.html:93 +#: netbox/templates/core/objectchange.html:93 msgid "Object Created" msgstr "Об'єкт створений" -#: templates/core/objectchange.html:95 +#: netbox/templates/core/objectchange.html:95 msgid "Object Deleted" msgstr "Об'єкт видалений" -#: templates/core/objectchange.html:97 +#: netbox/templates/core/objectchange.html:97 msgid "No Changes" msgstr "Немає змін" -#: templates/core/objectchange.html:111 +#: netbox/templates/core/objectchange.html:111 msgid "Pre-Change Data" msgstr "Дані перед зміною" -#: templates/core/objectchange.html:122 +#: netbox/templates/core/objectchange.html:122 msgid "Warning: Comparing non-atomic change to previous change record" msgstr "Попередження: Порівняння неатомних змін з попереднім записом змін" -#: templates/core/objectchange.html:131 +#: netbox/templates/core/objectchange.html:131 msgid "Post-Change Data" msgstr "Дані після зміни" -#: templates/core/objectchange.html:162 +#: netbox/templates/core/objectchange.html:162 #, python-format msgid "See All %(count)s Changes" msgstr "Дивитись все %(count)s Зміни" -#: templates/core/objectchange_list.html:9 -#: templates/extras/object_changelog.html:15 +#: netbox/templates/core/objectchange_list.html:9 +#: netbox/templates/extras/object_changelog.html:15 msgid "Change log retention" msgstr "Зберігання журналу змін" -#: templates/core/objectchange_list.html:9 -#: templates/extras/object_changelog.html:15 +#: netbox/templates/core/objectchange_list.html:9 +#: netbox/templates/extras/object_changelog.html:15 msgid "days" msgstr "днів" -#: templates/core/objectchange_list.html:9 -#: templates/extras/object_changelog.html:15 +#: netbox/templates/core/objectchange_list.html:9 +#: netbox/templates/extras/object_changelog.html:15 msgid "Indefinite" msgstr "Невизначений" -#: templates/core/plugin.html:22 +#: netbox/templates/core/plugin.html:22 msgid "Not installed" msgstr "Не встановлено" -#: templates/core/plugin.html:33 +#: netbox/templates/core/plugin.html:33 msgid "Overview" msgstr "Огляд" -#: templates/core/plugin.html:39 +#: netbox/templates/core/plugin.html:39 msgid "Install" msgstr "Встановити" -#: templates/core/plugin.html:51 +#: netbox/templates/core/plugin.html:51 msgid "Plugin Details" msgstr "Деталі плагіна" -#: templates/core/plugin.html:58 +#: netbox/templates/core/plugin.html:58 msgid "Summary" -msgstr "У підсумку" +msgstr "Підсумок" -#: templates/core/plugin.html:76 +#: netbox/templates/core/plugin.html:76 msgid "License" msgstr "Ліцензія" -#: templates/core/plugin.html:96 +#: netbox/templates/core/plugin.html:96 msgid "Version History" msgstr "Історія версій" -#: templates/core/plugin.html:107 +#: netbox/templates/core/plugin.html:107 msgid "Local Installation Instructions" msgstr "Інструкції по локальній установці" -#: templates/core/rq_queue_list.html:5 templates/core/rq_queue_list.html:13 -#: templates/core/rq_task_list.html:14 templates/core/rq_worker.html:7 +#: netbox/templates/core/rq_queue_list.html:5 +#: netbox/templates/core/rq_queue_list.html:13 +#: netbox/templates/core/rq_task_list.html:14 +#: netbox/templates/core/rq_worker.html:7 msgid "Background Queues" msgstr "Фонові черги" -#: templates/core/rq_queue_list.html:24 templates/core/rq_queue_list.html:25 -#: templates/core/rq_worker_list.html:49 templates/core/rq_worker_list.html:50 -#: templates/extras/script_result.html:67 -#: templates/extras/script_result.html:69 -#: templates/inc/table_controls_htmx.html:30 -#: templates/inc/table_controls_htmx.html:33 +#: netbox/templates/core/rq_queue_list.html:24 +#: netbox/templates/core/rq_queue_list.html:25 +#: netbox/templates/core/rq_worker_list.html:49 +#: netbox/templates/core/rq_worker_list.html:50 +#: netbox/templates/extras/script_result.html:67 +#: netbox/templates/extras/script_result.html:69 +#: netbox/templates/inc/table_controls_htmx.html:30 +#: netbox/templates/inc/table_controls_htmx.html:33 msgid "Configure Table" msgstr "Налаштувати таблицю" -#: templates/core/rq_task.html:29 +#: netbox/templates/core/rq_task.html:29 msgid "Stop" msgstr "Зупинити" -#: templates/core/rq_task.html:34 +#: netbox/templates/core/rq_task.html:34 msgid "Requeue" -msgstr "Реквье" +msgstr "Повторно поставлено у чергу" -#: templates/core/rq_task.html:39 +#: netbox/templates/core/rq_task.html:39 msgid "Enqueue" -msgstr "Поставте в чергу" +msgstr "Поставлено у чергу" -#: templates/core/rq_task.html:61 +#: netbox/templates/core/rq_task.html:61 msgid "Queue" msgstr "Черга" -#: templates/core/rq_task.html:65 +#: netbox/templates/core/rq_task.html:65 msgid "Timeout" -msgstr "Тайм-аут" +msgstr "Час очікування" -#: templates/core/rq_task.html:69 +#: netbox/templates/core/rq_task.html:69 msgid "Result TTL" msgstr "Результат TTL" -#: templates/core/rq_task.html:89 +#: netbox/templates/core/rq_task.html:89 msgid "Meta" msgstr "Мета" -#: templates/core/rq_task.html:93 +#: netbox/templates/core/rq_task.html:93 msgid "Arguments" msgstr "Аргументи" -#: templates/core/rq_task.html:97 +#: netbox/templates/core/rq_task.html:97 msgid "Keyword Arguments" msgstr "Аргументи ключових слів" -#: templates/core/rq_task.html:103 +#: netbox/templates/core/rq_task.html:103 msgid "Depends on" msgstr "Залежить від" -#: templates/core/rq_task.html:109 +#: netbox/templates/core/rq_task.html:109 msgid "Exception" msgstr "Виняток" -#: templates/core/rq_task_list.html:28 +#: netbox/templates/core/rq_task_list.html:28 msgid "tasks in " msgstr "завдання в " -#: templates/core/rq_task_list.html:33 +#: netbox/templates/core/rq_task_list.html:33 msgid "Queued Jobs" msgstr "Завдання у черзі" -#: templates/core/rq_task_list.html:64 templates/extras/script_result.html:86 +#: netbox/templates/core/rq_task_list.html:64 +#: netbox/templates/extras/script_result.html:86 #, python-format msgid "" "Select all %(count)s %(object_type_plural)s matching query" -msgstr "" -"Вибрати усі %(count)s %(object_type_plural)s відповідний " -"запит" +msgstr "Вибрати усі %(count)s %(object_type_plural)s запити" -#: templates/core/rq_worker.html:10 +#: netbox/templates/core/rq_worker.html:10 msgid "Worker Info" msgstr "Інформація по робочому процесу" -#: templates/core/rq_worker.html:31 templates/core/rq_worker.html:40 +#: netbox/templates/core/rq_worker.html:31 +#: netbox/templates/core/rq_worker.html:40 msgid "Worker" msgstr "Робочий процес" -#: templates/core/rq_worker.html:55 +#: netbox/templates/core/rq_worker.html:55 msgid "Queues" msgstr "Черги" -#: templates/core/rq_worker.html:63 +#: netbox/templates/core/rq_worker.html:63 msgid "Curent Job" msgstr "Поточне завдання" -#: templates/core/rq_worker.html:67 +#: netbox/templates/core/rq_worker.html:67 msgid "Successful job count" msgstr "Підрахунок кількості успішно виконаних завдань" -#: templates/core/rq_worker.html:71 +#: netbox/templates/core/rq_worker.html:71 msgid "Failed job count" msgstr "Підрахунок кількості невдало виконаних завдань" -#: templates/core/rq_worker.html:75 +#: netbox/templates/core/rq_worker.html:75 msgid "Total working time" msgstr "Загальний робочий час" -#: templates/core/rq_worker.html:76 +#: netbox/templates/core/rq_worker.html:76 msgid "seconds" msgstr "секунд" -#: templates/core/rq_worker_list.html:13 templates/core/rq_worker_list.html:21 +#: netbox/templates/core/rq_worker_list.html:13 +#: netbox/templates/core/rq_worker_list.html:21 msgid "Background Workers" msgstr "Фонові робочі процеси" -#: templates/core/rq_worker_list.html:29 +#: netbox/templates/core/rq_worker_list.html:29 #, python-format msgid "Workers in %(queue_name)s" msgstr "Робочі процеси у %(queue_name)s" -#: templates/core/system.html:11 utilities/templates/buttons/export.html:4 +#: netbox/templates/core/system.html:11 +#: netbox/utilities/templates/buttons/export.html:4 msgid "Export" msgstr "Експорт" -#: templates/core/system.html:28 +#: netbox/templates/core/system.html:28 msgid "System Status" msgstr "Статус системи" -#: templates/core/system.html:31 +#: netbox/templates/core/system.html:31 msgid "NetBox release" -msgstr "Випуск NetBox" +msgstr "NetBox реліз" -#: templates/core/system.html:44 +#: netbox/templates/core/system.html:44 msgid "Django version" msgstr "Версія Джанго" -#: templates/core/system.html:48 +#: netbox/templates/core/system.html:48 msgid "PostgreSQL version" msgstr "Версія PostgreSQL" -#: templates/core/system.html:52 +#: netbox/templates/core/system.html:52 msgid "Database name" msgstr "Назва бази даних" -#: templates/core/system.html:56 +#: netbox/templates/core/system.html:56 msgid "Database size" msgstr "Розмір бази даних" -#: templates/core/system.html:61 +#: netbox/templates/core/system.html:61 msgid "Unavailable" msgstr "Недоступний" -#: templates/core/system.html:66 +#: netbox/templates/core/system.html:66 msgid "RQ workers" msgstr "Робочі процеси RQ" -#: templates/core/system.html:69 +#: netbox/templates/core/system.html:69 msgid "default queue" msgstr "черга за замовчуванням" -#: templates/core/system.html:73 +#: netbox/templates/core/system.html:73 msgid "System time" msgstr "Системний час" -#: templates/core/system.html:85 +#: netbox/templates/core/system.html:85 msgid "Current Configuration" msgstr "Поточне налаштування" -#: templates/dcim/bulk_disconnect.html:9 +#: netbox/templates/dcim/bulk_disconnect.html:9 #, python-format msgid "" "Are you sure you want to disconnect these %(count)s %(obj_type_plural)s?" msgstr "Ви впевнені, що хочете відключити ці %(count)s %(obj_type_plural)s?" -#: templates/dcim/cable_trace.html:10 +#: netbox/templates/dcim/cable_trace.html:10 #, python-format msgid "Cable Trace for %(object_type)s %(object)s" msgstr "Траса кабелю для %(object_type)s %(object)s" -#: templates/dcim/cable_trace.html:24 templates/dcim/inc/rack_elevation.html:7 +#: netbox/templates/dcim/cable_trace.html:24 +#: netbox/templates/dcim/inc/rack_elevation.html:7 msgid "Download SVG" msgstr "Завантажити SVG" -#: templates/dcim/cable_trace.html:30 +#: netbox/templates/dcim/cable_trace.html:30 msgid "Asymmetric Path" msgstr "Асиметричний шлях" -#: templates/dcim/cable_trace.html:31 +#: netbox/templates/dcim/cable_trace.html:31 msgid "The nodes below have no links and result in an asymmetric path" msgstr "" "Нижче наведені вузли не мають зв'язків і призводять до асиметричного контуру" -#: templates/dcim/cable_trace.html:38 +#: netbox/templates/dcim/cable_trace.html:38 msgid "Path split" msgstr "Розділ шляху" -#: templates/dcim/cable_trace.html:39 +#: netbox/templates/dcim/cable_trace.html:39 msgid "Select a node below to continue" msgstr "Виберіть вузол нижче, щоб продовжити" -#: templates/dcim/cable_trace.html:55 +#: netbox/templates/dcim/cable_trace.html:55 msgid "Trace Completed" msgstr "Відстеження завершено" -#: templates/dcim/cable_trace.html:58 +#: netbox/templates/dcim/cable_trace.html:58 msgid "Total segments" msgstr "Всього сегментів" -#: templates/dcim/cable_trace.html:62 +#: netbox/templates/dcim/cable_trace.html:62 msgid "Total length" msgstr "Загальна довжина" -#: templates/dcim/cable_trace.html:77 +#: netbox/templates/dcim/cable_trace.html:77 msgid "No paths found" msgstr "Не знайдено шляхів" -#: templates/dcim/cable_trace.html:85 +#: netbox/templates/dcim/cable_trace.html:85 msgid "Related Paths" msgstr "Пов'язані шляхи" -#: templates/dcim/cable_trace.html:89 +#: netbox/templates/dcim/cable_trace.html:89 msgid "Origin" msgstr "Походження" -#: templates/dcim/cable_trace.html:90 +#: netbox/templates/dcim/cable_trace.html:90 msgid "Destination" msgstr "Пункт призначення" -#: templates/dcim/cable_trace.html:91 +#: netbox/templates/dcim/cable_trace.html:91 msgid "Segments" -msgstr "сегменти" +msgstr "Сегменти" -#: templates/dcim/cable_trace.html:104 +#: netbox/templates/dcim/cable_trace.html:104 msgid "Incomplete" msgstr "Неповні" -#: templates/dcim/component_list.html:14 +#: netbox/templates/dcim/component_list.html:14 msgid "Rename Selected" msgstr "Перейменувати вибране" -#: templates/dcim/consoleport.html:65 templates/dcim/consoleserverport.html:66 -#: templates/dcim/frontport.html:98 templates/dcim/interface.html:176 -#: templates/dcim/poweroutlet.html:69 templates/dcim/powerport.html:69 +#: netbox/templates/dcim/consoleport.html:65 +#: netbox/templates/dcim/consoleserverport.html:66 +#: netbox/templates/dcim/frontport.html:98 +#: netbox/templates/dcim/interface.html:176 +#: netbox/templates/dcim/poweroutlet.html:69 +#: netbox/templates/dcim/powerport.html:69 msgid "Not Connected" msgstr "Не підключено" -#: templates/dcim/device.html:34 +#: netbox/templates/dcim/device.html:34 msgid "Highlight device in rack" msgstr "Виділіть пристрій в стійці" -#: templates/dcim/device.html:55 +#: netbox/templates/dcim/device.html:55 msgid "Not racked" msgstr "Не в стійці" -#: templates/dcim/device.html:62 templates/dcim/site.html:94 +#: netbox/templates/dcim/device.html:62 netbox/templates/dcim/site.html:94 msgid "GPS Coordinates" msgstr "GPS-координати" -#: templates/dcim/device.html:68 templates/dcim/site.html:81 -#: templates/dcim/site.html:100 +#: netbox/templates/dcim/device.html:68 netbox/templates/dcim/site.html:81 +#: netbox/templates/dcim/site.html:100 msgid "Map" msgstr "Карта" -#: templates/dcim/device.html:108 templates/dcim/inventoryitem.html:56 -#: templates/dcim/module.html:81 templates/dcim/modulebay.html:74 -#: templates/dcim/rack.html:61 +#: netbox/templates/dcim/device.html:108 +#: netbox/templates/dcim/inventoryitem.html:56 +#: netbox/templates/dcim/module.html:81 +#: netbox/templates/dcim/modulebay.html:74 netbox/templates/dcim/rack.html:61 msgid "Asset Tag" msgstr "Призначеня мітки" -#: templates/dcim/device.html:123 +#: netbox/templates/dcim/device.html:123 msgid "View Virtual Chassis" msgstr "Переглянути віртуальне шасі" -#: templates/dcim/device.html:164 +#: netbox/templates/dcim/device.html:164 msgid "Create VDC" -msgstr "Створіть джерело живлення постійного струму " +msgstr "Створіть джерело живлення постійного струму" -#: templates/dcim/device.html:175 templates/dcim/device_edit.html:64 -#: virtualization/forms/model_forms.py:223 +#: netbox/templates/dcim/device.html:175 +#: netbox/templates/dcim/device_edit.html:64 +#: netbox/virtualization/forms/model_forms.py:223 msgid "Management" -msgstr "Менеджмент" +msgstr "Керування" -#: templates/dcim/device.html:195 templates/dcim/device.html:211 -#: templates/dcim/device.html:227 -#: templates/virtualization/virtualmachine.html:57 -#: templates/virtualization/virtualmachine.html:73 +#: netbox/templates/dcim/device.html:195 netbox/templates/dcim/device.html:211 +#: netbox/templates/dcim/device.html:227 +#: netbox/templates/virtualization/virtualmachine.html:57 +#: netbox/templates/virtualization/virtualmachine.html:73 msgid "NAT for" msgstr "NAT для" -#: templates/dcim/device.html:197 templates/dcim/device.html:213 -#: templates/dcim/device.html:229 -#: templates/virtualization/virtualmachine.html:59 -#: templates/virtualization/virtualmachine.html:75 +#: netbox/templates/dcim/device.html:197 netbox/templates/dcim/device.html:213 +#: netbox/templates/dcim/device.html:229 +#: netbox/templates/virtualization/virtualmachine.html:59 +#: netbox/templates/virtualization/virtualmachine.html:75 msgid "NAT" msgstr "НАТ" -#: templates/dcim/device.html:252 templates/dcim/rack.html:73 +#: netbox/templates/dcim/device.html:252 netbox/templates/dcim/rack.html:73 msgid "Power Utilization" msgstr "Використання електроенергії" -#: templates/dcim/device.html:256 +#: netbox/templates/dcim/device.html:256 msgid "Input" msgstr "Вхід" -#: templates/dcim/device.html:257 +#: netbox/templates/dcim/device.html:257 msgid "Outlets" msgstr "розетки" -#: templates/dcim/device.html:258 +#: netbox/templates/dcim/device.html:258 msgid "Allocated" msgstr "Виділено" -#: templates/dcim/device.html:268 templates/dcim/device.html:270 -#: templates/dcim/device.html:286 templates/dcim/powerfeed.html:67 +#: netbox/templates/dcim/device.html:268 netbox/templates/dcim/device.html:270 +#: netbox/templates/dcim/device.html:286 +#: netbox/templates/dcim/powerfeed.html:67 msgid "VA" msgstr "ВА" -#: templates/dcim/device.html:280 +#: netbox/templates/dcim/device.html:280 msgctxt "Leg of a power feed" msgid "Leg" -msgstr "Нога" +msgstr "Гілка (електричного кола)" -#: templates/dcim/device.html:306 -#: templates/virtualization/virtualmachine.html:158 +#: netbox/templates/dcim/device.html:306 +#: netbox/templates/virtualization/virtualmachine.html:158 msgid "Add a service" msgstr "Додати послугу" -#: templates/dcim/device/base.html:21 templates/dcim/device_list.html:9 -#: templates/dcim/devicetype/base.html:18 -#: templates/dcim/inc/moduletype_buttons.html:9 templates/dcim/module.html:18 -#: templates/virtualization/virtualmachine/base.html:22 -#: templates/virtualization/virtualmachine_list.html:8 +#: netbox/templates/dcim/device/base.html:21 +#: netbox/templates/dcim/device_list.html:9 +#: netbox/templates/dcim/devicetype/base.html:18 +#: netbox/templates/dcim/inc/moduletype_buttons.html:9 +#: netbox/templates/dcim/module.html:18 +#: netbox/templates/virtualization/virtualmachine/base.html:22 +#: netbox/templates/virtualization/virtualmachine_list.html:8 msgid "Add Components" msgstr "Додати компоненти" -#: templates/dcim/device/consoleports.html:24 +#: netbox/templates/dcim/device/consoleports.html:24 msgid "Add Console Ports" msgstr "Додати консольні порти" -#: templates/dcim/device/consoleserverports.html:24 +#: netbox/templates/dcim/device/consoleserverports.html:24 msgid "Add Console Server Ports" msgstr "Додати порти консольного сервера" -#: templates/dcim/device/devicebays.html:10 +#: netbox/templates/dcim/device/devicebays.html:10 msgid "Add Device Bays" msgstr "Додати відсіки для пристроїв" -#: templates/dcim/device/frontports.html:24 +#: netbox/templates/dcim/device/frontports.html:24 msgid "Add Front Ports" msgstr "Додати передні порти" -#: templates/dcim/device/inc/interface_table_controls.html:9 +#: netbox/templates/dcim/device/inc/interface_table_controls.html:9 msgid "Hide Enabled" -msgstr "Приховати увімкнено" +msgstr "Приховати усе, що увімкнено" -#: templates/dcim/device/inc/interface_table_controls.html:10 +#: netbox/templates/dcim/device/inc/interface_table_controls.html:10 msgid "Hide Disabled" -msgstr "Приховати вимкнено" +msgstr "Приховати усе, що вимкнено" -#: templates/dcim/device/inc/interface_table_controls.html:11 +#: netbox/templates/dcim/device/inc/interface_table_controls.html:11 msgid "Hide Virtual" -msgstr "Приховати віртуальний" +msgstr "Приховати усе, що має віртуальне походження" -#: templates/dcim/device/inc/interface_table_controls.html:12 +#: netbox/templates/dcim/device/inc/interface_table_controls.html:12 msgid "Hide Disconnected" -msgstr "Приховати відключене" +msgstr "Приховати усе, що відключене" -#: templates/dcim/device/interfaces.html:27 +#: netbox/templates/dcim/device/interfaces.html:27 msgid "Add Interfaces" msgstr "Додати інтерфейси" -#: templates/dcim/device/inventory.html:10 -#: templates/dcim/inc/panels/inventory_items.html:10 +#: netbox/templates/dcim/device/inventory.html:10 +#: netbox/templates/dcim/inc/panels/inventory_items.html:10 msgid "Add Inventory Item" msgstr "Додати предмет до інвентарю" -#: templates/dcim/device/modulebays.html:10 +#: netbox/templates/dcim/device/modulebays.html:10 msgid "Add Module Bays" msgstr "Додати модульні відсіки" -#: templates/dcim/device/poweroutlets.html:24 +#: netbox/templates/dcim/device/poweroutlets.html:24 msgid "Add Power Outlets" msgstr "Додайте розетки" -#: templates/dcim/device/powerports.html:24 +#: netbox/templates/dcim/device/powerports.html:24 msgid "Add Power Port" msgstr "Додати порт живлення" -#: templates/dcim/device/rearports.html:24 +#: netbox/templates/dcim/device/rearports.html:24 msgid "Add Rear Ports" msgstr "Додати задні порти" -#: templates/dcim/device/render_config.html:5 -#: templates/virtualization/virtualmachine/render_config.html:5 +#: netbox/templates/dcim/device/render_config.html:5 +#: netbox/templates/virtualization/virtualmachine/render_config.html:5 msgid "Config" -msgstr "конфігурація" +msgstr "Конфігурація" -#: templates/dcim/device/render_config.html:35 -#: templates/virtualization/virtualmachine/render_config.html:35 +#: netbox/templates/dcim/device/render_config.html:35 +#: netbox/templates/virtualization/virtualmachine/render_config.html:35 msgid "Context Data" msgstr "Контекстні дані" -#: templates/dcim/device/render_config.html:53 -#: templates/virtualization/virtualmachine/render_config.html:53 +#: netbox/templates/dcim/device/render_config.html:55 +#: netbox/templates/virtualization/virtualmachine/render_config.html:55 msgid "Rendered Config" msgstr "Відтворена конфігурація" -#: templates/dcim/device/render_config.html:55 -#: templates/virtualization/virtualmachine/render_config.html:55 +#: netbox/templates/dcim/device/render_config.html:57 +#: netbox/templates/virtualization/virtualmachine/render_config.html:57 msgid "Download" msgstr "Завантажити" -#: templates/dcim/device/render_config.html:61 -#: templates/virtualization/virtualmachine/render_config.html:61 -msgid "No configuration template found" -msgstr "Не знайдено шаблону конфігурації" +#: netbox/templates/dcim/device/render_config.html:64 +#: netbox/templates/virtualization/virtualmachine/render_config.html:64 +msgid "Error rendering template" +msgstr "" -#: templates/dcim/device_edit.html:44 +#: 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 "Батьківська бухта" +msgstr "Батьківський відсік" -#: templates/dcim/device_edit.html:48 -#: utilities/templates/form_helpers/render_field.html:22 +#: netbox/templates/dcim/device_edit.html:48 +#: netbox/utilities/templates/form_helpers/render_field.html:22 msgid "Regenerate Slug" -msgstr "Відновити слимака" +msgstr "Відновити скорочення" -#: templates/dcim/device_edit.html:49 templates/generic/bulk_remove.html:21 -#: utilities/templates/helpers/table_config_form.html:23 +#: netbox/templates/dcim/device_edit.html:49 +#: netbox/templates/generic/bulk_remove.html:21 +#: netbox/utilities/templates/helpers/table_config_form.html:23 msgid "Remove" msgstr "Видалити" -#: templates/dcim/device_edit.html:110 +#: netbox/templates/dcim/device_edit.html:110 msgid "Local Config Context Data" msgstr "Контекстні дані локальної конфігурації" -#: templates/dcim/device_list.html:82 templates/generic/bulk_rename.html:57 -#: templates/virtualization/virtualmachine/interfaces.html:11 -#: templates/virtualization/virtualmachine/virtual_disks.html:11 +#: netbox/templates/dcim/device_list.html:82 +#: netbox/templates/generic/bulk_rename.html:57 +#: netbox/templates/virtualization/virtualmachine/interfaces.html:11 +#: netbox/templates/virtualization/virtualmachine/virtual_disks.html:11 msgid "Rename" msgstr "Перейменувати" -#: templates/dcim/devicebay.html:17 +#: netbox/templates/dcim/devicebay.html:17 msgid "Device Bay" -msgstr "Резервуар для пристроїв" +msgstr "Відсік для пристроїв" -#: templates/dcim/devicebay.html:43 +#: netbox/templates/dcim/devicebay.html:43 msgid "Installed Device" msgstr "Встановлений пристрій" -#: templates/dcim/devicebay_depopulate.html:6 +#: netbox/templates/dcim/devicebay_depopulate.html:6 #, python-format msgid "Remove %(device)s from %(device_bay)s?" msgstr "Видалити %(device)s з %(device_bay)s?" -#: templates/dcim/devicebay_depopulate.html:13 +#: netbox/templates/dcim/devicebay_depopulate.html:13 #, python-format msgid "" "Are you sure you want to remove %(device)s from " @@ -11954,430 +12729,449 @@ msgstr "" "Ви впевнені, що хочете видалити %(device)s з " "%(device_bay)s?" -#: templates/dcim/devicebay_populate.html:13 +#: netbox/templates/dcim/devicebay_populate.html:13 msgid "Populate" -msgstr "Заселити" +msgstr "Заповнити" -#: templates/dcim/devicebay_populate.html:22 +#: netbox/templates/dcim/devicebay_populate.html:22 msgid "Bay" -msgstr "затока" +msgstr "Відсік" -#: templates/dcim/devicerole.html:14 templates/dcim/platform.html:17 +#: netbox/templates/dcim/devicerole.html:14 +#: netbox/templates/dcim/platform.html:17 msgid "Add Device" msgstr "Додати пристрій" -#: templates/dcim/devicerole.html:40 +#: netbox/templates/dcim/devicerole.html:40 msgid "VM Role" msgstr "Роль віртуальної машини" -#: templates/dcim/devicetype.html:18 templates/dcim/moduletype.html:29 +#: netbox/templates/dcim/devicetype.html:18 +#: netbox/templates/dcim/moduletype.html:29 msgid "Model Name" msgstr "Назва моделі" -#: templates/dcim/devicetype.html:25 templates/dcim/moduletype.html:33 +#: netbox/templates/dcim/devicetype.html:25 +#: netbox/templates/dcim/moduletype.html:33 msgid "Part Number" msgstr "Номер частини" -#: templates/dcim/devicetype.html:41 +#: netbox/templates/dcim/devicetype.html:41 msgid "Exclude From Utilization" msgstr "Виключити з використання" -#: templates/dcim/devicetype.html:59 +#: netbox/templates/dcim/devicetype.html:59 msgid "Parent/Child" -msgstr "Батька/Дитина" +msgstr "Батько/Дитина" -#: templates/dcim/devicetype.html:71 +#: netbox/templates/dcim/devicetype.html:71 msgid "Front Image" msgstr "Зображення спереду" -#: templates/dcim/devicetype.html:83 +#: netbox/templates/dcim/devicetype.html:83 msgid "Rear Image" -msgstr "Ззаднє зображення" +msgstr "Зображення ззаду" -#: templates/dcim/frontport.html:54 +#: netbox/templates/dcim/frontport.html:54 msgid "Rear Port Position" -msgstr "Положення заднього порту" +msgstr "Положення порту ззаду" -#: templates/dcim/frontport.html:72 templates/dcim/interface.html:144 -#: templates/dcim/poweroutlet.html:63 templates/dcim/powerport.html:63 -#: templates/dcim/rearport.html:68 +#: netbox/templates/dcim/frontport.html:72 +#: netbox/templates/dcim/interface.html:144 +#: netbox/templates/dcim/poweroutlet.html:63 +#: netbox/templates/dcim/powerport.html:63 +#: netbox/templates/dcim/rearport.html:68 msgid "Marked as Connected" msgstr "Позначено як підключений" -#: templates/dcim/frontport.html:86 templates/dcim/rearport.html:82 +#: netbox/templates/dcim/frontport.html:86 +#: netbox/templates/dcim/rearport.html:82 msgid "Connection Status" msgstr "Статус підключення" -#: templates/dcim/htmx/cable_edit.html:10 +#: netbox/templates/dcim/htmx/cable_edit.html:10 msgid "A Side" msgstr "Сторона А" -#: templates/dcim/htmx/cable_edit.html:30 +#: netbox/templates/dcim/htmx/cable_edit.html:30 msgid "B Side" msgstr "Сторона Б" -#: templates/dcim/inc/cable_termination.html:65 +#: netbox/templates/dcim/inc/cable_termination.html:65 msgid "No termination" -msgstr "Без припинення" +msgstr "Без кінця" -#: templates/dcim/inc/cable_toggle_buttons.html:3 +#: netbox/templates/dcim/inc/cable_toggle_buttons.html:3 msgid "Mark Planned" -msgstr "Марк Планований" +msgstr "Позначка запланова" -#: templates/dcim/inc/cable_toggle_buttons.html:6 +#: netbox/templates/dcim/inc/cable_toggle_buttons.html:6 msgid "Mark Installed" msgstr "Позначка встановлена" -#: templates/dcim/inc/connection_endpoints.html:13 +#: netbox/templates/dcim/inc/connection_endpoints.html:13 msgid "Path Status" msgstr "Статус шляху" -#: templates/dcim/inc/connection_endpoints.html:18 +#: netbox/templates/dcim/inc/connection_endpoints.html:18 msgid "Not Reachable" msgstr "Недосяжний" -#: templates/dcim/inc/connection_endpoints.html:23 +#: netbox/templates/dcim/inc/connection_endpoints.html:23 msgid "Path Endpoints" msgstr "Кінцеві точки контуру" -#: templates/dcim/inc/endpoint_connection.html:8 -#: templates/dcim/powerfeed.html:120 templates/dcim/rearport.html:94 +#: netbox/templates/dcim/inc/endpoint_connection.html:8 +#: netbox/templates/dcim/powerfeed.html:120 +#: netbox/templates/dcim/rearport.html:94 msgid "Not connected" msgstr "Не підключено" -#: templates/dcim/inc/interface_vlans_table.html:6 +#: netbox/templates/dcim/inc/interface_vlans_table.html:6 msgid "Untagged" msgstr "Без позначки" -#: templates/dcim/inc/interface_vlans_table.html:37 +#: netbox/templates/dcim/inc/interface_vlans_table.html:37 msgid "No VLANs Assigned" -msgstr "Не присвоєно VLAN" +msgstr "Не присвоєно VLAN'ів" -#: templates/dcim/inc/interface_vlans_table.html:44 -#: templates/ipam/prefix_list.html:16 templates/ipam/prefix_list.html:33 +#: netbox/templates/dcim/inc/interface_vlans_table.html:44 +#: netbox/templates/ipam/prefix_list.html:16 +#: netbox/templates/ipam/prefix_list.html:33 msgid "Clear" -msgstr "Прозорий" +msgstr "Очистити" -#: templates/dcim/inc/interface_vlans_table.html:47 +#: netbox/templates/dcim/inc/interface_vlans_table.html:47 msgid "Clear All" msgstr "Очистити все" -#: templates/dcim/inc/panels/racktype_dimensions.html:38 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:38 msgid "Mounting Depth" msgstr "Глибина монтажу" -#: templates/dcim/inc/panels/racktype_numbering.html:6 +#: netbox/templates/dcim/inc/panels/racktype_numbering.html:6 msgid "Starting Unit" -msgstr "Пусковий блок" +msgstr "Початковий юніт" -#: templates/dcim/inc/panels/racktype_numbering.html:10 +#: netbox/templates/dcim/inc/panels/racktype_numbering.html:10 msgid "Descending Units" msgstr "Юніти у низхідному порядку" -#: templates/dcim/inc/rack_elevation.html:3 +#: netbox/templates/dcim/inc/rack_elevation.html:3 msgid "Rack elevation" msgstr "Висота стійки" -#: templates/dcim/interface.html:17 +#: netbox/templates/dcim/interface.html:17 msgid "Add Child Interface" msgstr "Додати дочірній інтерфейс" -#: templates/dcim/interface.html:50 +#: netbox/templates/dcim/interface.html:50 msgid "Speed/Duplex" msgstr "Швидкість/Дуплекс" -#: templates/dcim/interface.html:73 +#: netbox/templates/dcim/interface.html:73 msgid "PoE Mode" msgstr "Режим PoE" -#: templates/dcim/interface.html:77 +#: netbox/templates/dcim/interface.html:77 msgid "PoE Type" msgstr "Тип PoE" -#: templates/dcim/interface.html:81 -#: templates/virtualization/vminterface.html:63 +#: netbox/templates/dcim/interface.html:81 +#: netbox/templates/virtualization/vminterface.html:63 msgid "802.1Q Mode" msgstr "Режим 802.1Q" -#: templates/dcim/interface.html:125 -#: templates/virtualization/vminterface.html:59 +#: netbox/templates/dcim/interface.html:125 +#: netbox/templates/virtualization/vminterface.html:59 msgid "MAC Address" msgstr "MAC-адреса" -#: templates/dcim/interface.html:151 +#: netbox/templates/dcim/interface.html:151 msgid "Wireless Link" -msgstr "Бездротове посилання" +msgstr "Бездротове з'єднання" -#: templates/dcim/interface.html:218 vpn/choices.py:55 +#: netbox/templates/dcim/interface.html:218 netbox/vpn/choices.py:63 msgid "Peer" msgstr "Мережевий сусід" -#: templates/dcim/interface.html:230 -#: templates/wireless/inc/wirelesslink_interface.html:26 +#: netbox/templates/dcim/interface.html:230 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:26 msgid "Channel" -msgstr "канал" +msgstr "Канал" -#: templates/dcim/interface.html:239 -#: templates/wireless/inc/wirelesslink_interface.html:32 +#: netbox/templates/dcim/interface.html:239 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:32 msgid "Channel Frequency" msgstr "Частота каналу" -#: templates/dcim/interface.html:242 templates/dcim/interface.html:250 -#: templates/dcim/interface.html:261 templates/dcim/interface.html:269 +#: netbox/templates/dcim/interface.html:242 +#: netbox/templates/dcim/interface.html:250 +#: netbox/templates/dcim/interface.html:261 +#: netbox/templates/dcim/interface.html:269 msgid "MHz" msgstr "МГц" -#: templates/dcim/interface.html:258 -#: templates/wireless/inc/wirelesslink_interface.html:42 +#: netbox/templates/dcim/interface.html:258 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:42 msgid "Channel Width" msgstr "Ширина каналу" -#: templates/dcim/interface.html:285 templates/wireless/wirelesslan.html:14 -#: templates/wireless/wirelesslink.html:21 wireless/forms/bulk_edit.py:60 -#: wireless/forms/bulk_edit.py:102 wireless/forms/filtersets.py:40 -#: wireless/forms/filtersets.py:80 wireless/models.py:82 -#: wireless/models.py:156 wireless/tables/wirelesslan.py:44 +#: netbox/templates/dcim/interface.html:285 +#: netbox/templates/wireless/wirelesslan.html:14 +#: netbox/templates/wireless/wirelesslink.html:21 +#: netbox/wireless/forms/bulk_edit.py:60 +#: netbox/wireless/forms/bulk_edit.py:102 +#: netbox/wireless/forms/filtersets.py:40 +#: netbox/wireless/forms/filtersets.py:80 netbox/wireless/models.py:82 +#: netbox/wireless/models.py:156 netbox/wireless/tables/wirelesslan.py:44 msgid "SSID" msgstr "SSID" -#: templates/dcim/interface.html:305 +#: netbox/templates/dcim/interface.html:305 msgid "LAG Members" msgstr "Члени LAG" -#: templates/dcim/interface.html:323 +#: netbox/templates/dcim/interface.html:323 msgid "No member interfaces" msgstr "Немає інтерфейсів учасників" -#: templates/dcim/interface.html:343 templates/ipam/fhrpgroup.html:73 -#: templates/ipam/iprange/ip_addresses.html:7 -#: templates/ipam/prefix/ip_addresses.html:7 -#: templates/virtualization/vminterface.html:89 +#: netbox/templates/dcim/interface.html:343 +#: netbox/templates/ipam/fhrpgroup.html:73 +#: netbox/templates/ipam/iprange/ip_addresses.html:7 +#: netbox/templates/ipam/prefix/ip_addresses.html:7 +#: netbox/templates/virtualization/vminterface.html:89 msgid "Add IP Address" msgstr "Додати IP-адресу" -#: templates/dcim/inventoryitem.html:24 +#: netbox/templates/dcim/inventoryitem.html:24 msgid "Parent Item" msgstr "Батьківський елемент" -#: templates/dcim/inventoryitem.html:48 +#: netbox/templates/dcim/inventoryitem.html:48 msgid "Part ID" msgstr "Ідентифікатор частини" -#: templates/dcim/location.html:17 +#: netbox/templates/dcim/location.html:17 msgid "Add Child Location" msgstr "Додати підпорядковане місцезнаходження" -#: templates/dcim/location.html:77 +#: netbox/templates/dcim/location.html:77 msgid "Child Locations" -msgstr "Підпорядковані локації" +msgstr "Підпорядковані місцезнаходження" -#: templates/dcim/location.html:81 templates/dcim/site.html:131 +#: netbox/templates/dcim/location.html:81 netbox/templates/dcim/site.html:131 msgid "Add a Location" msgstr "Додати місцезнаходження" -#: templates/dcim/location.html:94 templates/dcim/site.html:144 +#: netbox/templates/dcim/location.html:94 netbox/templates/dcim/site.html:144 msgid "Add a Device" -msgstr "Додавання пристрою" +msgstr "Додати пристрою" -#: templates/dcim/manufacturer.html:16 +#: netbox/templates/dcim/manufacturer.html:16 msgid "Add Device Type" msgstr "Додати тип пристрою" -#: templates/dcim/manufacturer.html:21 +#: netbox/templates/dcim/manufacturer.html:21 msgid "Add Module Type" msgstr "Додати тип модуля" -#: templates/dcim/powerfeed.html:53 +#: netbox/templates/dcim/powerfeed.html:53 msgid "Connected Device" msgstr "Підключений пристрій" -#: templates/dcim/powerfeed.html:63 +#: netbox/templates/dcim/powerfeed.html:63 msgid "Utilization (Allocated" msgstr "Утилізація (виділено" -#: templates/dcim/powerfeed.html:80 +#: netbox/templates/dcim/powerfeed.html:80 msgid "Electrical Characteristics" msgstr "Електричні характеристики" -#: templates/dcim/powerfeed.html:88 +#: netbox/templates/dcim/powerfeed.html:88 msgctxt "Abbreviation for volts" msgid "V" -msgstr "V" +msgstr "В" -#: templates/dcim/powerfeed.html:92 +#: netbox/templates/dcim/powerfeed.html:92 msgctxt "Abbreviation for amperes" msgid "A" msgstr "А" -#: templates/dcim/poweroutlet.html:48 +#: netbox/templates/dcim/poweroutlet.html:48 msgid "Feed Leg" msgstr "Фідер живлення" -#: templates/dcim/powerpanel.html:72 +#: netbox/templates/dcim/powerpanel.html:72 msgid "Add Power Feeds" msgstr "Додати подачі живлення" -#: templates/dcim/powerport.html:44 +#: netbox/templates/dcim/powerport.html:44 msgid "Maximum Draw" msgstr "Максимальна потужність" -#: templates/dcim/powerport.html:48 +#: netbox/templates/dcim/powerport.html:48 msgid "Allocated Draw" msgstr "Виділена потужність" -#: templates/dcim/rack.html:69 +#: netbox/templates/dcim/rack.html:69 msgid "Space Utilization" msgstr "Використання простору" -#: templates/dcim/rack.html:84 templates/dcim/racktype.html:44 +#: netbox/templates/dcim/rack.html:84 netbox/templates/dcim/racktype.html:44 msgid "Rack Weight" msgstr "Вага стійки" -#: templates/dcim/rack.html:94 templates/dcim/racktype.html:54 +#: netbox/templates/dcim/rack.html:94 netbox/templates/dcim/racktype.html:54 msgid "Maximum Weight" msgstr "Максимальна вага" -#: templates/dcim/rack.html:104 +#: netbox/templates/dcim/rack.html:104 msgid "Total Weight" msgstr "Загальна вага" -#: templates/dcim/rack.html:125 templates/dcim/rack_elevation_list.html:15 +#: netbox/templates/dcim/rack.html:125 +#: netbox/templates/dcim/rack_elevation_list.html:15 msgid "Images and Labels" msgstr "Зображення та етикетки" -#: templates/dcim/rack.html:126 templates/dcim/rack_elevation_list.html:16 +#: netbox/templates/dcim/rack.html:126 +#: netbox/templates/dcim/rack_elevation_list.html:16 msgid "Images only" msgstr "Лише зображення" -#: templates/dcim/rack.html:127 templates/dcim/rack_elevation_list.html:17 +#: netbox/templates/dcim/rack.html:127 +#: netbox/templates/dcim/rack_elevation_list.html:17 msgid "Labels only" msgstr "Тільки етикетки" -#: templates/dcim/rack/reservations.html:8 +#: netbox/templates/dcim/rack/reservations.html:8 msgid "Add reservation" msgstr "Додати бронювання" -#: templates/dcim/rack_elevation_list.html:12 +#: netbox/templates/dcim/rack_elevation_list.html:12 msgid "View List" msgstr "Переглянути список" -#: templates/dcim/rack_elevation_list.html:14 +#: netbox/templates/dcim/rack_elevation_list.html:14 msgid "Select rack view" msgstr "Виберіть вид на стійку" -#: templates/dcim/rack_elevation_list.html:25 +#: netbox/templates/dcim/rack_elevation_list.html:25 msgid "Sort By" msgstr "Сортувати за" -#: templates/dcim/rack_elevation_list.html:74 +#: netbox/templates/dcim/rack_elevation_list.html:74 msgid "No Racks Found" msgstr "Стійки не знайдено" -#: templates/dcim/rack_list.html:8 +#: netbox/templates/dcim/rack_list.html:8 msgid "View Elevations" msgstr "Переглянути висоти" -#: templates/dcim/rackreservation.html:42 +#: netbox/templates/dcim/rackreservation.html:42 msgid "Reservation Details" msgstr "Деталі бронювання" -#: templates/dcim/rackrole.html:10 +#: netbox/templates/dcim/rackrole.html:10 msgid "Add Rack" msgstr "Додати стійку" -#: templates/dcim/rearport.html:50 +#: netbox/templates/dcim/rearport.html:50 msgid "Positions" msgstr "Позиції" -#: templates/dcim/region.html:17 templates/dcim/sitegroup.html:17 +#: netbox/templates/dcim/region.html:17 +#: netbox/templates/dcim/sitegroup.html:17 msgid "Add Site" msgstr "Додати тех. майданчик" -#: templates/dcim/region.html:55 +#: netbox/templates/dcim/region.html:55 msgid "Child Regions" msgstr "Підпорядковані регіони" -#: templates/dcim/region.html:59 +#: netbox/templates/dcim/region.html:59 msgid "Add Region" msgstr "Додати регіон" -#: templates/dcim/site.html:64 +#: netbox/templates/dcim/site.html:64 msgid "Time Zone" msgstr "Часовий пояс" -#: templates/dcim/site.html:67 +#: netbox/templates/dcim/site.html:67 msgid "UTC" msgstr "UTC" -#: templates/dcim/site.html:68 +#: netbox/templates/dcim/site.html:68 msgid "Site time" msgstr "Час роботи тех. майданчику" -#: templates/dcim/site.html:75 +#: netbox/templates/dcim/site.html:75 msgid "Physical Address" msgstr "Фізична адреса" -#: templates/dcim/site.html:90 +#: netbox/templates/dcim/site.html:90 msgid "Shipping Address" msgstr "Адреса доставки" -#: templates/dcim/sitegroup.html:55 templates/tenancy/contactgroup.html:46 -#: templates/tenancy/tenantgroup.html:55 -#: templates/wireless/wirelesslangroup.html:55 +#: netbox/templates/dcim/sitegroup.html:55 +#: netbox/templates/tenancy/contactgroup.html:46 +#: netbox/templates/tenancy/tenantgroup.html:55 +#: netbox/templates/wireless/wirelesslangroup.html:55 msgid "Child Groups" msgstr "Підпорядковані групи" -#: templates/dcim/sitegroup.html:59 +#: netbox/templates/dcim/sitegroup.html:59 msgid "Add Site Group" msgstr "Додати групу тех. майданчиків" -#: templates/dcim/trace/attachment.html:5 -#: templates/extras/exporttemplate.html:31 +#: netbox/templates/dcim/trace/attachment.html:5 +#: netbox/templates/extras/exporttemplate.html:31 msgid "Attachment" msgstr "Вкладення" -#: templates/dcim/virtualchassis.html:57 +#: netbox/templates/dcim/virtualchassis.html:57 msgid "Add Member" msgstr "Додати учасника" -#: templates/dcim/virtualchassis_add.html:18 +#: netbox/templates/dcim/virtualchassis_add.html:18 msgid "Member Devices" -msgstr "Пристрої членів" +msgstr "Учасника пристроїв" -#: templates/dcim/virtualchassis_add_member.html:10 +#: netbox/templates/dcim/virtualchassis_add_member.html:10 #, python-format msgid "Add New Member to Virtual Chassis %(virtual_chassis)s" msgstr "Додати нового учасника до віртуального шасі %(virtual_chassis)s" -#: templates/dcim/virtualchassis_add_member.html:19 +#: netbox/templates/dcim/virtualchassis_add_member.html:19 msgid "Add New Member" msgstr "Додати нового учасника" -#: templates/dcim/virtualchassis_add_member.html:27 -#: templates/generic/object_edit.html:78 -#: templates/users/objectpermission.html:31 users/forms/filtersets.py:67 -#: users/forms/model_forms.py:312 +#: netbox/templates/dcim/virtualchassis_add_member.html:27 +#: netbox/templates/generic/object_edit.html:78 +#: netbox/templates/users/objectpermission.html:31 +#: netbox/users/forms/filtersets.py:67 netbox/users/forms/model_forms.py:312 msgid "Actions" msgstr "Дії" -#: templates/dcim/virtualchassis_add_member.html:29 +#: netbox/templates/dcim/virtualchassis_add_member.html:29 msgid "Save & Add Another" msgstr "Зберегти та додати інший" -#: templates/dcim/virtualchassis_edit.html:7 +#: netbox/templates/dcim/virtualchassis_edit.html:7 #, python-format msgid "Editing Virtual Chassis %(name)s" msgstr "Редагування віртуального шасі %(name)s" -#: templates/dcim/virtualchassis_edit.html:53 +#: netbox/templates/dcim/virtualchassis_edit.html:53 msgid "Rack/Unit" msgstr "Стійка/юніт" -#: templates/dcim/virtualchassis_remove_member.html:5 +#: netbox/templates/dcim/virtualchassis_remove_member.html:5 msgid "Remove Virtual Chassis Member" -msgstr "Вилучити віртуальний член шасі" +msgstr "Вилучити віртуального учасника шасі" -#: templates/dcim/virtualchassis_remove_member.html:9 +#: netbox/templates/dcim/virtualchassis_remove_member.html:9 #, python-format msgid "" "Are you sure you want to remove %(device)s from virtual " @@ -12386,11 +13180,12 @@ msgstr "" "Ви впевнені, що хочете видалити %(device)s з віртуального " "шасі %(name)s?" -#: templates/dcim/virtualdevicecontext.html:26 templates/vpn/l2vpn.html:18 +#: netbox/templates/dcim/virtualdevicecontext.html:26 +#: netbox/templates/vpn/l2vpn.html:18 msgid "Identifier" msgstr "Ідентифікатор" -#: templates/exceptions/import_error.html:6 +#: netbox/templates/exceptions/import_error.html:6 msgid "" "A module import error occurred during this request. Common causes include " "the following:" @@ -12398,11 +13193,11 @@ msgstr "" "Під час цього запиту сталася помилка імпорту модуля. До поширених причин " "можна віднести наступне:" -#: templates/exceptions/import_error.html:10 +#: netbox/templates/exceptions/import_error.html:10 msgid "Missing required packages" msgstr "Відсутні необхідні пакети" -#: templates/exceptions/import_error.html:11 +#: netbox/templates/exceptions/import_error.html:11 msgid "" "This installation of NetBox might be missing one or more required Python " "packages. These packages are listed in requirements.txt and " @@ -12412,17 +13207,17 @@ msgid "" "of required packages." msgstr "" "У цій інсталяції NetBox може бути відсутній один або кілька необхідних " -"пакетів Python. Ці пакети перераховані в requirements.txt і " +"пакетів Python. Ці пакети перераховані в requirements.txt та " "local_requirements.txt, і зазвичай встановлюються як частина " "процесу встановлення або оновлення. Щоб перевірити встановлені пакети, " -"запустіть заморожування піп з консолі і порівняйте вихід зі " -"списком необхідних пакетів." +"запустіть pip freeze з консолі і порівняйте вихід зі списком " +"необхідних пакетів." -#: templates/exceptions/import_error.html:20 +#: netbox/templates/exceptions/import_error.html:20 msgid "WSGI service not restarted after upgrade" msgstr "Сервіс WSGI не перезапущений після оновлення" -#: templates/exceptions/import_error.html:21 +#: netbox/templates/exceptions/import_error.html:21 msgid "" "If this installation has recently been upgraded, check that the WSGI service" " (e.g. gunicorn or uWSGI) has been restarted. This ensures that the new code" @@ -12431,7 +13226,7 @@ msgstr "" "Якщо цю установку нещодавно оновили, перевірте, чи було перезапущено службу " "WSGI (наприклад, gunicorn або uWSGi). Це гарантує запуск нового коду." -#: templates/exceptions/permission_error.html:6 +#: netbox/templates/exceptions/permission_error.html:6 msgid "" "A file permission error was detected while processing this request. Common " "causes include the following:" @@ -12439,11 +13234,11 @@ msgstr "" "Під час обробки цього запиту була виявлена помилка дозволу на файл. До " "поширених причин можна віднести наступне:" -#: templates/exceptions/permission_error.html:10 +#: netbox/templates/exceptions/permission_error.html:10 msgid "Insufficient write permission to the media root" msgstr "Недостатній дозвіл на запис до кореня медіа" -#: templates/exceptions/permission_error.html:11 +#: netbox/templates/exceptions/permission_error.html:11 #, python-format msgid "" "The configured media root is %(media_root)s. Ensure that the " @@ -12454,19 +13249,19 @@ msgstr "" "користувач NetBox працює так, як має доступ до запису файлів у всі місця в " "межах цього шляху." -#: templates/exceptions/programming_error.html:6 +#: netbox/templates/exceptions/programming_error.html:6 msgid "" "A database programming error was detected while processing this request. " "Common causes include the following:" msgstr "" -"Під час обробки цього запиту була виявлена помилка програмування бази даних." -" До поширених причин можна віднести наступне:" +"Під час обробки цього запиту була виявлена програмна помилка бази даних. До " +"поширених причин можна віднести наступне:" -#: templates/exceptions/programming_error.html:10 +#: netbox/templates/exceptions/programming_error.html:10 msgid "Database migrations missing" msgstr "Відсутні міграції баз даних" -#: templates/exceptions/programming_error.html:11 +#: netbox/templates/exceptions/programming_error.html:11 msgid "" "When upgrading to a new NetBox release, the upgrade script must be run to " "apply any new database migrations. You can run migrations manually by " @@ -12477,11 +13272,11 @@ msgstr "" "запустити міграцію вручну, виконавши міграція python3 manage.py" " з командного рядка." -#: templates/exceptions/programming_error.html:18 +#: netbox/templates/exceptions/programming_error.html:18 msgid "Unsupported PostgreSQL version" msgstr "Непідтримувана версія PostgreSQL" -#: templates/exceptions/programming_error.html:19 +#: netbox/templates/exceptions/programming_error.html:19 msgid "" "Ensure that PostgreSQL version 12 or later is in use. You can check this by " "connecting to the database using NetBox's credentials and issuing a query " @@ -12491,107 +13286,110 @@ msgstr "" "Перевірити це можна, підключившись до бази даних за допомогою облікових " "даних NetBox і оформивши запит на SELECT VERSION()." -#: templates/extras/configcontext.html:45 -#: templates/extras/configtemplate.html:37 -#: templates/extras/exporttemplate.html:51 +#: netbox/templates/extras/configcontext.html:45 +#: netbox/templates/extras/configtemplate.html:37 +#: netbox/templates/extras/exporttemplate.html:51 msgid "The data file associated with this object has been deleted" msgstr "Файл даних, пов'язаний з цим об'єктом, видалено" -#: templates/extras/configcontext.html:54 -#: templates/extras/configtemplate.html:46 -#: templates/extras/exporttemplate.html:60 +#: netbox/templates/extras/configcontext.html:54 +#: netbox/templates/extras/configtemplate.html:46 +#: netbox/templates/extras/exporttemplate.html:60 msgid "Data Synced" -msgstr "Синхронізовані дані" +msgstr "Дані синхронізовані" -#: templates/extras/configcontext_list.html:7 -#: templates/extras/configtemplate_list.html:7 -#: templates/extras/exporttemplate_list.html:7 +#: netbox/templates/extras/configcontext_list.html:7 +#: netbox/templates/extras/configtemplate_list.html:7 +#: netbox/templates/extras/exporttemplate_list.html:7 msgid "Sync Data" msgstr "Синхронізація даних" -#: templates/extras/configtemplate.html:56 +#: netbox/templates/extras/configtemplate.html:56 msgid "Environment Parameters" msgstr "Параметри середовища" -#: templates/extras/configtemplate.html:67 -#: templates/extras/exporttemplate.html:79 +#: netbox/templates/extras/configtemplate.html:67 +#: netbox/templates/extras/exporttemplate.html:79 msgid "Template" msgstr "Шаблон" -#: templates/extras/customfield.html:30 templates/extras/customlink.html:21 +#: netbox/templates/extras/customfield.html:30 +#: netbox/templates/extras/customlink.html:21 msgid "Group Name" msgstr "Назва групи" -#: templates/extras/customfield.html:42 +#: netbox/templates/extras/customfield.html:42 msgid "Must be Unique" msgstr "Повинен бути унікальним" -#: templates/extras/customfield.html:46 +#: netbox/templates/extras/customfield.html:46 msgid "Cloneable" msgstr "Клонований" -#: templates/extras/customfield.html:56 +#: netbox/templates/extras/customfield.html:56 msgid "Default Value" msgstr "Значення за замовчуванням" -#: templates/extras/customfield.html:73 +#: netbox/templates/extras/customfield.html:73 msgid "Search Weight" msgstr "Вага пошуку" -#: templates/extras/customfield.html:83 +#: netbox/templates/extras/customfield.html:83 msgid "Filter Logic" msgstr "Логіка фільтра" -#: templates/extras/customfield.html:87 +#: netbox/templates/extras/customfield.html:87 msgid "Display Weight" msgstr "Вага дисплея" -#: templates/extras/customfield.html:91 +#: netbox/templates/extras/customfield.html:91 msgid "UI Visible" msgstr "Видимий інтерфейс користувача" -#: templates/extras/customfield.html:95 +#: netbox/templates/extras/customfield.html:95 msgid "UI Editable" msgstr "Редагований інтерфейс користувача" -#: templates/extras/customfield.html:115 +#: netbox/templates/extras/customfield.html:115 msgid "Validation Rules" msgstr "Правила перевірки" -#: templates/extras/customfield.html:126 +#: netbox/templates/extras/customfield.html:126 msgid "Regular Expression" msgstr "Регулярний вираз" -#: templates/extras/customlink.html:29 +#: netbox/templates/extras/customlink.html:29 msgid "Button Class" msgstr "Клас кнопок" -#: templates/extras/customlink.html:39 templates/extras/exporttemplate.html:66 -#: templates/extras/savedfilter.html:39 +#: netbox/templates/extras/customlink.html:39 +#: netbox/templates/extras/exporttemplate.html:66 +#: netbox/templates/extras/savedfilter.html:39 msgid "Assigned Models" msgstr "Призначені моделі" -#: templates/extras/customlink.html:52 +#: netbox/templates/extras/customlink.html:52 msgid "Link Text" msgstr "Текст посилання" -#: templates/extras/customlink.html:58 +#: netbox/templates/extras/customlink.html:58 msgid "Link URL" msgstr "URL-адреса посилання" -#: templates/extras/dashboard/reset.html:4 templates/home.html:66 +#: netbox/templates/extras/dashboard/reset.html:4 +#: netbox/templates/home.html:66 msgid "Reset Dashboard" msgstr "Скинути інформаційну панель" -#: templates/extras/dashboard/reset.html:8 +#: netbox/templates/extras/dashboard/reset.html:8 msgid "" "This will remove all configured widgets and restore the " "default dashboard configuration." msgstr "" -"Це видалить усі налаштовані віджети та відновити " +"Це видалить усі налаштовані віджети та відновить " "конфігурацію інформаційної панелі за замовчуванням." -#: templates/extras/dashboard/reset.html:13 +#: netbox/templates/extras/dashboard/reset.html:13 msgid "" "This change affects only your dashboard, and will not impact other " "users." @@ -12599,237 +13397,246 @@ msgstr "" "Ця зміна зачіпає тільки вашу особисту інформаційну панель, і не " "вплине на інших користувачів." -#: templates/extras/dashboard/widget.html:21 +#: netbox/templates/extras/dashboard/widget.html:21 msgid "widget configuration" msgstr "конфігурація віджетів" -#: templates/extras/dashboard/widget.html:36 +#: netbox/templates/extras/dashboard/widget.html:36 msgid "Close widget" msgstr "Закрити віджет" -#: templates/extras/dashboard/widget_add.html:7 +#: netbox/templates/extras/dashboard/widget_add.html:7 msgid "Add a Widget" msgstr "Додати віджет" -#: templates/extras/dashboard/widgets/bookmarks.html:14 +#: netbox/templates/extras/dashboard/widgets/bookmarks.html:14 msgid "No bookmarks have been added yet." msgstr "Жодних закладок ще не додано." -#: templates/extras/dashboard/widgets/objectcounts.html:10 +#: netbox/templates/extras/dashboard/widgets/objectcounts.html:10 msgid "No permission" msgstr "Немає дозволу" -#: templates/extras/dashboard/widgets/objectlist.html:6 +#: netbox/templates/extras/dashboard/widgets/objectlist.html:6 msgid "No permission to view this content" msgstr "Немає дозволу на перегляд цього вмісту" -#: templates/extras/dashboard/widgets/objectlist.html:10 +#: netbox/templates/extras/dashboard/widgets/objectlist.html:10 msgid "Unable to load content. Invalid view name" msgstr "Не вдається завантажити вміст. Невірна назва перегляду" -#: templates/extras/dashboard/widgets/rssfeed.html:12 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:12 msgid "No content found" msgstr "Вмісту не знайдено" -#: templates/extras/dashboard/widgets/rssfeed.html:18 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:18 msgid "There was a problem fetching the RSS feed" msgstr "Виникла проблема з отриманням RSS-каналу" -#: templates/extras/dashboard/widgets/rssfeed.html:21 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:21 msgid "HTTP" msgstr "HTTP" -#: templates/extras/eventrule.html:61 +#: netbox/templates/extras/eventrule.html:61 msgid "Conditions" msgstr "Умови" -#: templates/extras/exporttemplate.html:23 +#: netbox/templates/extras/exporttemplate.html:23 msgid "MIME Type" msgstr "Тип MIME" -#: templates/extras/exporttemplate.html:27 +#: netbox/templates/extras/exporttemplate.html:27 msgid "File Extension" msgstr "Розширення файлу" -#: templates/extras/htmx/script_result.html:10 +#: netbox/templates/extras/htmx/script_result.html:10 msgid "Scheduled for" msgstr "Заплановано на" -#: templates/extras/htmx/script_result.html:15 +#: netbox/templates/extras/htmx/script_result.html:15 msgid "Duration" msgstr "Тривалість" -#: templates/extras/htmx/script_result.html:23 +#: netbox/templates/extras/htmx/script_result.html:23 msgid "Test Summary" msgstr "Підсумок тесту" -#: templates/extras/htmx/script_result.html:43 +#: netbox/templates/extras/htmx/script_result.html:43 msgid "Log" msgstr "Журнал" -#: templates/extras/htmx/script_result.html:56 +#: netbox/templates/extras/htmx/script_result.html:56 msgid "Output" msgstr "вихід" -#: templates/extras/inc/result_pending.html:4 +#: netbox/templates/extras/inc/result_pending.html:4 msgid "Loading" msgstr "Завантаження" -#: templates/extras/inc/result_pending.html:6 +#: netbox/templates/extras/inc/result_pending.html:6 msgid "Results pending" msgstr "Результати очікуються" -#: templates/extras/journalentry.html:15 +#: netbox/templates/extras/journalentry.html:15 msgid "Journal Entry" msgstr "Запис журналу" -#: templates/extras/notificationgroup.html:11 +#: netbox/templates/extras/notificationgroup.html:11 msgid "Notification Group" msgstr "Група повідомлень" -#: templates/extras/notificationgroup.html:36 -#: templates/extras/notificationgroup.html:46 -#: utilities/templates/widgets/clearable_file_input.html:12 +#: netbox/templates/extras/notificationgroup.html:36 +#: netbox/templates/extras/notificationgroup.html:46 +#: netbox/utilities/templates/widgets/clearable_file_input.html:12 msgid "None assigned" msgstr "Не призначено" -#: templates/extras/object_configcontext.html:19 +#: netbox/templates/extras/object_configcontext.html:19 msgid "The local config context overwrites all source contexts" msgstr "Локальний контекст конфігурації перезаписує всі вихідні контексти" -#: templates/extras/object_configcontext.html:25 +#: netbox/templates/extras/object_configcontext.html:25 msgid "Source Contexts" msgstr "Джерело контекстів" -#: templates/extras/object_journal.html:17 +#: netbox/templates/extras/object_journal.html:17 msgid "New Journal Entry" msgstr "Новий запис журналу" -#: templates/extras/report/base.html:30 +#: netbox/templates/extras/report/base.html:30 msgid "Report" msgstr "Звіт" -#: templates/extras/script.html:14 +#: netbox/templates/extras/script.html:14 msgid "You do not have permission to run scripts" msgstr "У вас немає дозволу на запуск скриптів" -#: templates/extras/script.html:41 templates/extras/script.html:45 -#: templates/extras/script_list.html:86 +#: netbox/templates/extras/script.html:41 +#: netbox/templates/extras/script.html:45 +#: netbox/templates/extras/script_list.html:87 msgid "Run Script" msgstr "Запустити скрипт" -#: templates/extras/script.html:51 templates/extras/script/source.html:10 +#: netbox/templates/extras/script.html:51 +#: netbox/templates/extras/script/source.html:10 msgid "Error loading script" -msgstr "Помилка завантаження сценарію" +msgstr "Помилка завантаження скрипту" -#: templates/extras/script/jobs.html:16 +#: netbox/templates/extras/script/jobs.html:16 msgid "Script no longer exists in the source file." msgstr "Скрипт більше не існує у вихідному файлі." -#: templates/extras/script_list.html:46 +#: netbox/templates/extras/script_list.html:47 msgid "Last Run" msgstr "Останній запуск" -#: templates/extras/script_list.html:61 +#: netbox/templates/extras/script_list.html:62 msgid "Script is no longer present in the source file" msgstr "Скрипт більше не присутній у вихідному файлі" -#: templates/extras/script_list.html:74 +#: netbox/templates/extras/script_list.html:75 msgid "Never" msgstr "Ніколи" -#: templates/extras/script_list.html:84 +#: netbox/templates/extras/script_list.html:85 msgid "Run Again" msgstr "Запустіть знову" -#: templates/extras/script_list.html:138 +#: netbox/templates/extras/script_list.html:133 +#, python-format +msgid "Could not load scripts from module %(module)s" +msgstr "Не вдалося завантажити скрипти з модуля %(module)s" + +#: netbox/templates/extras/script_list.html:141 msgid "No Scripts Found" msgstr "Скриптів не знайдено" -#: templates/extras/script_list.html:141 +#: netbox/templates/extras/script_list.html:144 #, python-format msgid "" "Get started by creating a script from " "an uploaded file or data source." msgstr "" "Почніть з створення сценарію з " -"завантаженого файлу або джерела даних." +"вивантаженого файлу або джерела даних." -#: templates/extras/script_result.html:35 -#: templates/generic/object_list.html:50 templates/search.html:13 +#: netbox/templates/extras/script_result.html:35 +#: netbox/templates/generic/object_list.html:50 +#: netbox/templates/search.html:13 msgid "Results" msgstr "Результати" -#: templates/extras/script_result.html:46 +#: netbox/templates/extras/script_result.html:46 msgid "Log threshold" msgstr "Поріг журналу" -#: templates/extras/script_result.html:56 +#: netbox/templates/extras/script_result.html:56 msgid "All" msgstr "Усе" -#: templates/extras/tag.html:32 +#: netbox/templates/extras/tag.html:32 msgid "Tagged Items" msgstr "Позначені предмети" -#: templates/extras/tag.html:43 +#: netbox/templates/extras/tag.html:43 msgid "Allowed Object Types" msgstr "Дозволені типи об'єктів" -#: templates/extras/tag.html:51 +#: netbox/templates/extras/tag.html:51 msgid "Any" msgstr "Будь-який" -#: templates/extras/tag.html:57 +#: netbox/templates/extras/tag.html:57 msgid "Tagged Item Types" msgstr "Позначені типи предметів" -#: templates/extras/tag.html:81 +#: netbox/templates/extras/tag.html:81 msgid "Tagged Objects" msgstr "Позначені об'єкти" -#: templates/extras/webhook.html:26 +#: netbox/templates/extras/webhook.html:26 msgid "HTTP Method" msgstr "Метод HTTP" -#: templates/extras/webhook.html:34 +#: netbox/templates/extras/webhook.html:34 msgid "HTTP Content Type" msgstr "Тип вмісту HTTP" -#: templates/extras/webhook.html:47 +#: netbox/templates/extras/webhook.html:47 msgid "SSL Verification" msgstr "Перевірка SSL" -#: templates/extras/webhook.html:60 +#: netbox/templates/extras/webhook.html:60 msgid "Additional Headers" msgstr "Додаткові заголовки" -#: templates/extras/webhook.html:70 +#: netbox/templates/extras/webhook.html:70 msgid "Body Template" -msgstr "Шаблон тіла" +msgstr "Шаблон тіла (запросу)" -#: templates/generic/bulk_add_component.html:29 +#: netbox/templates/generic/bulk_add_component.html:29 msgid "Bulk Creation" msgstr "Масове створення" -#: templates/generic/bulk_add_component.html:34 -#: templates/generic/bulk_delete.html:32 templates/generic/bulk_edit.html:33 +#: netbox/templates/generic/bulk_add_component.html:34 +#: netbox/templates/generic/bulk_delete.html:32 +#: netbox/templates/generic/bulk_edit.html:33 msgid "Selected Objects" msgstr "Вибрані об'єкти" -#: templates/generic/bulk_add_component.html:58 +#: netbox/templates/generic/bulk_add_component.html:58 msgid "to Add" msgstr "Додати" -#: templates/generic/bulk_delete.html:27 +#: netbox/templates/generic/bulk_delete.html:27 msgid "Bulk Delete" msgstr "Масове видалення" -#: templates/generic/bulk_delete.html:49 +#: netbox/templates/generic/bulk_delete.html:49 msgid "Confirm Bulk Deletion" msgstr "Підтвердити масове видалення" -#: templates/generic/bulk_delete.html:50 +#: netbox/templates/generic/bulk_delete.html:50 #, python-format msgid "" "The following operation will delete %(count)s " @@ -12839,83 +13646,86 @@ msgstr "" "Наступна операція видалить %(count)s %(type_plural)s. Будь " "ласка, уважно перегляньте вибрані об'єкти та підтвердіть цю дію." -#: templates/generic/bulk_edit.html:21 templates/generic/object_edit.html:22 +#: netbox/templates/generic/bulk_edit.html:21 +#: netbox/templates/generic/object_edit.html:22 msgid "Editing" msgstr "Редагування" -#: templates/generic/bulk_edit.html:28 +#: netbox/templates/generic/bulk_edit.html:28 msgid "Bulk Edit" msgstr "Масове редагування" -#: templates/generic/bulk_edit.html:107 templates/generic/bulk_rename.html:66 +#: netbox/templates/generic/bulk_edit.html:107 +#: netbox/templates/generic/bulk_rename.html:66 msgid "Apply" msgstr "Застосувати" -#: templates/generic/bulk_import.html:19 +#: netbox/templates/generic/bulk_import.html:19 msgid "Bulk Import" msgstr "Масовий імпорт" -#: templates/generic/bulk_import.html:25 +#: netbox/templates/generic/bulk_import.html:25 msgid "Direct Import" msgstr "Прямий імпорт" -#: templates/generic/bulk_import.html:30 +#: netbox/templates/generic/bulk_import.html:30 msgid "Upload File" -msgstr "Завантажити файл" +msgstr "Вивантажити файл" -#: templates/generic/bulk_import.html:58 templates/generic/bulk_import.html:80 -#: templates/generic/bulk_import.html:102 +#: netbox/templates/generic/bulk_import.html:58 +#: netbox/templates/generic/bulk_import.html:80 +#: netbox/templates/generic/bulk_import.html:102 msgid "Submit" msgstr "Надіслати" -#: templates/generic/bulk_import.html:113 +#: netbox/templates/generic/bulk_import.html:113 msgid "Field Options" msgstr "Параметри поля" -#: templates/generic/bulk_import.html:119 +#: netbox/templates/generic/bulk_import.html:119 msgid "Accessor" msgstr "Аксесуар" -#: templates/generic/bulk_import.html:148 +#: netbox/templates/generic/bulk_import.html:148 msgid "choices" msgstr "вибір" -#: templates/generic/bulk_import.html:161 +#: netbox/templates/generic/bulk_import.html:161 msgid "Import Value" -msgstr "Імпортна вартість" +msgstr "Імпорт вартості" -#: templates/generic/bulk_import.html:181 +#: netbox/templates/generic/bulk_import.html:181 msgid "Format: YYYY-MM-DD" msgstr "Формат: РРРР-ММ-ДД" -#: templates/generic/bulk_import.html:183 +#: netbox/templates/generic/bulk_import.html:183 msgid "Specify true or false" msgstr "Вкажіть істинна або хибно" -#: templates/generic/bulk_import.html:195 +#: netbox/templates/generic/bulk_import.html:195 msgid "Required fields must be specified for all objects." msgstr "" "Обов'язкові поля повинен буде вказано для всіх об'єктів." -#: templates/generic/bulk_import.html:201 +#: netbox/templates/generic/bulk_import.html:201 #, python-format msgid "" "Related objects may be referenced by any unique attribute. For example, " "%(example)s would identify a VRF by its route distinguisher." msgstr "" "Пов'язані об'єкти можуть посилатися будь-яким унікальним атрибутом. " -"Наприклад, %(example)s ідентифікує VRF за його визначником " +"Наприклад, %(example)s ідентифікує VRF за його розрізнювачем " "маршруту." -#: templates/generic/bulk_remove.html:28 +#: netbox/templates/generic/bulk_remove.html:28 msgid "Bulk Remove" msgstr "Масове видалення" -#: templates/generic/bulk_remove.html:42 +#: netbox/templates/generic/bulk_remove.html:42 msgid "Confirm Bulk Removal" msgstr "Підтвердити масове видалення" -#: templates/generic/bulk_remove.html:43 +#: netbox/templates/generic/bulk_remove.html:43 #, python-format msgid "" "The following operation will remove %(count)s %(obj_type_plural)s from " @@ -12926,72 +13736,72 @@ msgstr "" "Будь ласка, уважно перегляньте %(obj_type_plural)s буде видалено і " "підтверджено нижче." -#: templates/generic/bulk_remove.html:64 +#: netbox/templates/generic/bulk_remove.html:64 #, python-format msgid "Remove these %(count)s %(obj_type_plural)s" msgstr "Видаліть ці %(count)s %(obj_type_plural)s" -#: templates/generic/bulk_rename.html:20 +#: netbox/templates/generic/bulk_rename.html:20 msgid "Renaming" msgstr "Перейменування" -#: templates/generic/bulk_rename.html:27 +#: netbox/templates/generic/bulk_rename.html:27 msgid "Bulk Rename" msgstr "Масове перейменування" -#: templates/generic/bulk_rename.html:39 +#: netbox/templates/generic/bulk_rename.html:39 msgid "Current Name" msgstr "Поточне ім'я" -#: templates/generic/bulk_rename.html:40 +#: netbox/templates/generic/bulk_rename.html:40 msgid "New Name" msgstr "Нове ім'я" -#: templates/generic/bulk_rename.html:64 -#: utilities/templates/widgets/markdown_input.html:11 +#: netbox/templates/generic/bulk_rename.html:64 +#: netbox/utilities/templates/widgets/markdown_input.html:11 msgid "Preview" msgstr "Попередній перегляд" -#: templates/generic/confirmation_form.html:16 +#: netbox/templates/generic/confirmation_form.html:16 msgid "Are you sure" msgstr "Ви впевнені" -#: templates/generic/confirmation_form.html:20 +#: netbox/templates/generic/confirmation_form.html:20 msgid "Confirm" msgstr "Підтвердити" -#: templates/generic/object_children.html:47 -#: utilities/templates/buttons/bulk_edit.html:4 +#: netbox/templates/generic/object_children.html:47 +#: netbox/utilities/templates/buttons/bulk_edit.html:4 msgid "Edit Selected" msgstr "Редагувати вибрані" -#: templates/generic/object_children.html:61 -#: utilities/templates/buttons/bulk_delete.html:4 +#: netbox/templates/generic/object_children.html:61 +#: netbox/utilities/templates/buttons/bulk_delete.html:4 msgid "Delete Selected" msgstr "Вилучити вибрані" -#: templates/generic/object_edit.html:24 +#: netbox/templates/generic/object_edit.html:24 #, python-format msgid "Add a new %(object_type)s" msgstr "Додати новий %(object_type)s" -#: templates/generic/object_edit.html:35 +#: netbox/templates/generic/object_edit.html:35 msgid "View model documentation" msgstr "Переглянути документацію моделі" -#: templates/generic/object_edit.html:36 +#: netbox/templates/generic/object_edit.html:36 msgid "Help" -msgstr "Допоможіть" +msgstr "Підказка" -#: templates/generic/object_edit.html:83 +#: netbox/templates/generic/object_edit.html:83 msgid "Create & Add Another" msgstr "Створити та додати інший" -#: templates/generic/object_list.html:57 +#: netbox/templates/generic/object_list.html:57 msgid "Filters" msgstr "Фільтри" -#: templates/generic/object_list.html:88 +#: netbox/templates/generic/object_list.html:88 #, python-format msgid "" "Select all %(count)s " @@ -13000,40 +13810,40 @@ msgstr "" "Вибрати усі %(count)s " "%(object_type_plural)s відповідний запит" -#: templates/home.html:15 +#: netbox/templates/home.html:15 msgid "New Release Available" -msgstr "Новий випуск доступний" +msgstr "Новий реліз доступний" -#: templates/home.html:16 +#: netbox/templates/home.html:16 msgid "is available" msgstr "є" -#: templates/home.html:18 +#: netbox/templates/home.html:18 msgctxt "Document title" msgid "Upgrade Instructions" msgstr "Інструкції з оновлення" -#: templates/home.html:40 +#: netbox/templates/home.html:40 msgid "Unlock Dashboard" msgstr "Розблокування інформаційної панелі" -#: templates/home.html:49 +#: netbox/templates/home.html:49 msgid "Lock Dashboard" -msgstr "Блокування інформаційної панелі " +msgstr "Блокування інформаційної панелі" -#: templates/home.html:60 +#: netbox/templates/home.html:60 msgid "Add Widget" msgstr "Додати віджет" -#: templates/home.html:63 +#: netbox/templates/home.html:63 msgid "Save Layout" msgstr "Зберегти макет" -#: templates/htmx/delete_form.html:7 +#: netbox/templates/htmx/delete_form.html:7 msgid "Confirm Deletion" msgstr "Підтвердити видалення" -#: templates/htmx/delete_form.html:11 +#: netbox/templates/htmx/delete_form.html:11 #, python-format msgid "" "Are you sure you want to delete " @@ -13042,333 +13852,335 @@ msgstr "" "Ви впевнені, що хочете видалити " "%(object_type)s %(object)s?" -#: templates/htmx/delete_form.html:17 +#: netbox/templates/htmx/delete_form.html:17 msgid "The following objects will be deleted as a result of this action." msgstr "Наступні об'єкти будуть видалені в результаті цієї дії." -#: templates/htmx/notifications.html:15 +#: netbox/templates/htmx/notifications.html:15 msgid "ago" msgstr "тому" -#: templates/htmx/notifications.html:26 +#: netbox/templates/htmx/notifications.html:26 msgid "No unread notifications" msgstr "Немає непрочитаних повідомлень" -#: templates/htmx/notifications.html:31 +#: netbox/templates/htmx/notifications.html:31 msgid "All notifications" msgstr "Усі повідомлення" -#: templates/htmx/object_selector.html:5 +#: netbox/templates/htmx/object_selector.html:5 msgid "Select" msgstr "Вибрати" -#: templates/inc/filter_list.html:43 -#: utilities/templates/helpers/table_config_form.html:39 +#: netbox/templates/inc/filter_list.html:43 +#: netbox/utilities/templates/helpers/table_config_form.html:39 msgid "Reset" msgstr "Скинути" -#: templates/inc/light_toggle.html:4 +#: netbox/templates/inc/light_toggle.html:4 msgid "Enable dark mode" msgstr "Увімкнути темний режим" -#: templates/inc/light_toggle.html:7 +#: netbox/templates/inc/light_toggle.html:7 msgid "Enable light mode" msgstr "Увімкнути світловий режим" -#: templates/inc/missing_prerequisites.html:8 +#: netbox/templates/inc/missing_prerequisites.html:8 #, python-format msgid "" "Before you can add a %(model)s you must first create a " "%(prerequisite_model)s." msgstr "" -"Перш ніж ви зможете додати %(model)s спочатку потрібно створити " +"Перш ніж ви зможете додати %(model)s, спочатку потрібно створити " "%(prerequisite_model)s." -#: templates/inc/paginator.html:15 +#: netbox/templates/inc/paginator.html:15 msgid "Page selection" msgstr "Вибір сторінки" -#: templates/inc/paginator.html:75 +#: netbox/templates/inc/paginator.html:75 #, python-format msgid "Showing %(start)s-%(end)s of %(total)s" -msgstr "Показуючи %(start)s-%(end)s з %(total)s" +msgstr "Показ %(start)s-%(end)s із %(total)s" -#: templates/inc/paginator.html:82 +#: netbox/templates/inc/paginator.html:82 msgid "Pagination options" msgstr "Параметри нумерації сторінок" -#: templates/inc/paginator.html:86 +#: netbox/templates/inc/paginator.html:86 msgid "Per Page" msgstr "На сторінку" -#: templates/inc/panels/image_attachments.html:10 +#: netbox/templates/inc/panels/image_attachments.html:10 msgid "Attach an image" msgstr "Прикріпити зображення" -#: templates/inc/panels/related_objects.html:5 +#: netbox/templates/inc/panels/related_objects.html:5 msgid "Related Objects" msgstr "Пов'язані об'єкти" -#: templates/inc/panels/tags.html:11 +#: netbox/templates/inc/panels/tags.html:11 msgid "No tags assigned" msgstr "Немає зроблених позначок" -#: templates/inc/sync_warning.html:10 +#: netbox/templates/inc/sync_warning.html:10 msgid "Data is out of sync with upstream file" msgstr "Дані не синхронізуються з файлом висхідного потоку" -#: templates/inc/table_controls_htmx.html:7 +#: netbox/templates/inc/table_controls_htmx.html:7 msgid "Quick search" msgstr "Швидкий пошук" -#: templates/inc/table_controls_htmx.html:20 +#: netbox/templates/inc/table_controls_htmx.html:20 msgid "Saved filter" msgstr "Збережений фільтр" -#: templates/inc/table_htmx.html:18 +#: netbox/templates/inc/table_htmx.html:18 msgid "Clear ordering" msgstr "Почистити замовлення" -#: templates/inc/user_menu.html:6 +#: netbox/templates/inc/user_menu.html:6 msgid "Help center" msgstr "Довідковий центр" -#: templates/inc/user_menu.html:41 +#: netbox/templates/inc/user_menu.html:41 msgid "Django Admin" -msgstr "Джанго Адміністратор" +msgstr "Адміністратор Django" -#: templates/inc/user_menu.html:61 +#: netbox/templates/inc/user_menu.html:61 msgid "Log Out" msgstr "Вийти" -#: templates/inc/user_menu.html:68 templates/login.html:38 +#: netbox/templates/inc/user_menu.html:68 netbox/templates/login.html:38 msgid "Log In" msgstr "Увійти" -#: templates/ipam/aggregate.html:14 templates/ipam/ipaddress.html:14 -#: templates/ipam/iprange.html:13 templates/ipam/prefix.html:15 +#: netbox/templates/ipam/aggregate.html:14 +#: netbox/templates/ipam/ipaddress.html:14 +#: netbox/templates/ipam/iprange.html:13 netbox/templates/ipam/prefix.html:15 msgid "Family" msgstr "Сім'я" -#: templates/ipam/aggregate.html:39 +#: netbox/templates/ipam/aggregate.html:39 msgid "Date Added" msgstr "Дата додавання" -#: templates/ipam/aggregate/prefixes.html:8 -#: templates/ipam/prefix/prefixes.html:8 templates/ipam/role.html:10 +#: netbox/templates/ipam/aggregate/prefixes.html:8 +#: netbox/templates/ipam/prefix/prefixes.html:8 +#: netbox/templates/ipam/role.html:10 msgid "Add Prefix" msgstr "Додати префікс" -#: templates/ipam/asn.html:23 +#: netbox/templates/ipam/asn.html:23 msgid "AS Number" msgstr "Номер AS" -#: templates/ipam/fhrpgroup.html:52 +#: netbox/templates/ipam/fhrpgroup.html:52 msgid "Authentication Type" msgstr "Тип аутентифікації" -#: templates/ipam/fhrpgroup.html:56 +#: netbox/templates/ipam/fhrpgroup.html:56 msgid "Authentication Key" msgstr "Ключ аутентифікації" -#: templates/ipam/fhrpgroup.html:69 +#: netbox/templates/ipam/fhrpgroup.html:69 msgid "Virtual IP Addresses" msgstr "Віртуальні IP-адреси" -#: templates/ipam/inc/ipaddress_edit_header.html:13 +#: netbox/templates/ipam/inc/ipaddress_edit_header.html:13 msgid "Assign IP" msgstr "Призначити IP" -#: templates/ipam/inc/ipaddress_edit_header.html:19 +#: netbox/templates/ipam/inc/ipaddress_edit_header.html:19 msgid "Bulk Create" msgstr "Масове створення" -#: templates/ipam/inc/panels/fhrp_groups.html:10 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:10 msgid "Create Group" msgstr "Створити групу" -#: templates/ipam/inc/panels/fhrp_groups.html:25 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:25 msgid "Virtual IPs" msgstr "Віртуальні IP-адреси" -#: templates/ipam/inc/toggle_available.html:7 +#: netbox/templates/ipam/inc/toggle_available.html:7 msgid "Show Assigned" msgstr "Показати присвоєні" -#: templates/ipam/inc/toggle_available.html:10 +#: netbox/templates/ipam/inc/toggle_available.html:10 msgid "Show Available" msgstr "Показати Доступно" -#: templates/ipam/inc/toggle_available.html:13 +#: netbox/templates/ipam/inc/toggle_available.html:13 msgid "Show All" msgstr "Показати все" -#: templates/ipam/ipaddress.html:23 templates/ipam/iprange.html:45 -#: templates/ipam/prefix.html:24 +#: netbox/templates/ipam/ipaddress.html:23 +#: netbox/templates/ipam/iprange.html:45 netbox/templates/ipam/prefix.html:24 msgid "Global" msgstr "Глобальний" -#: templates/ipam/ipaddress.html:85 +#: netbox/templates/ipam/ipaddress.html:85 msgid "NAT (outside)" msgstr "NAT (зовні)" -#: templates/ipam/ipaddress_assign.html:8 +#: netbox/templates/ipam/ipaddress_assign.html:8 msgid "Assign an IP Address" msgstr "Призначити IP-адресу" -#: templates/ipam/ipaddress_assign.html:22 +#: netbox/templates/ipam/ipaddress_assign.html:22 msgid "Select IP Address" msgstr "Виберіть IP-адресу" -#: templates/ipam/ipaddress_assign.html:35 +#: netbox/templates/ipam/ipaddress_assign.html:35 msgid "Search Results" msgstr "Результати пошуку" -#: templates/ipam/ipaddress_bulk_add.html:6 +#: netbox/templates/ipam/ipaddress_bulk_add.html:6 msgid "Bulk Add IP Addresses" msgstr "Масове додавання IP-адрес" -#: templates/ipam/iprange.html:17 +#: netbox/templates/ipam/iprange.html:17 msgid "Starting Address" msgstr "Початкова адреса" -#: templates/ipam/iprange.html:21 +#: netbox/templates/ipam/iprange.html:21 msgid "Ending Address" msgstr "Кінцева адреса" -#: templates/ipam/iprange.html:33 templates/ipam/prefix.html:110 +#: netbox/templates/ipam/iprange.html:33 netbox/templates/ipam/prefix.html:110 msgid "Marked fully utilized" msgstr "Позначений повністю використаний" -#: templates/ipam/prefix.html:99 +#: netbox/templates/ipam/prefix.html:99 msgid "Addressing Details" msgstr "Деталі адресації" -#: templates/ipam/prefix.html:118 +#: netbox/templates/ipam/prefix.html:118 msgid "Child IPs" -msgstr "Дитячі IP-адреси" +msgstr "Підпорядковані IP-адреси" -#: templates/ipam/prefix.html:126 +#: netbox/templates/ipam/prefix.html:126 msgid "Available IPs" msgstr "Доступні IP-адреси" -#: templates/ipam/prefix.html:138 +#: netbox/templates/ipam/prefix.html:138 msgid "First available IP" msgstr "Перший доступний IP" -#: templates/ipam/prefix.html:179 +#: netbox/templates/ipam/prefix.html:179 msgid "Prefix Details" msgstr "Деталі префікса" -#: templates/ipam/prefix.html:185 +#: netbox/templates/ipam/prefix.html:185 msgid "Network Address" msgstr "Мережева адреса" -#: templates/ipam/prefix.html:189 +#: netbox/templates/ipam/prefix.html:189 msgid "Network Mask" msgstr "Мережева маска" -#: templates/ipam/prefix.html:193 +#: netbox/templates/ipam/prefix.html:193 msgid "Wildcard Mask" msgstr "Маска підстановки" -#: templates/ipam/prefix.html:197 +#: netbox/templates/ipam/prefix.html:197 msgid "Broadcast Address" -msgstr "Адреса трансляції" +msgstr "Широкомовна адреса" -#: templates/ipam/prefix/ip_ranges.html:7 +#: netbox/templates/ipam/prefix/ip_ranges.html:7 msgid "Add IP Range" msgstr "Додати діапазон IP" -#: templates/ipam/prefix_list.html:7 +#: netbox/templates/ipam/prefix_list.html:7 msgid "Hide Depth Indicators" msgstr "Приховати індикатори глибини" -#: templates/ipam/prefix_list.html:11 +#: netbox/templates/ipam/prefix_list.html:11 msgid "Max Depth" msgstr "Максимальна глибина" -#: templates/ipam/prefix_list.html:28 +#: netbox/templates/ipam/prefix_list.html:28 msgid "Max Length" msgstr "Максимальна довжина" -#: templates/ipam/rir.html:10 +#: netbox/templates/ipam/rir.html:10 msgid "Add Aggregate" msgstr "Додати агрегат" -#: templates/ipam/routetarget.html:38 +#: netbox/templates/ipam/routetarget.html:38 msgid "Importing VRFs" msgstr "Імпортування VRF" -#: templates/ipam/routetarget.html:44 +#: netbox/templates/ipam/routetarget.html:44 msgid "Exporting VRFs" msgstr "Експорт VRF" -#: templates/ipam/routetarget.html:52 +#: netbox/templates/ipam/routetarget.html:52 msgid "Importing L2VPNs" -msgstr "Імпорт L2VPN" +msgstr "Імпорт L2VPN'ів" -#: templates/ipam/routetarget.html:58 +#: netbox/templates/ipam/routetarget.html:58 msgid "Exporting L2VPNs" -msgstr "Експорт L2VPN" +msgstr "Експорт L2VPN'ів" -#: templates/ipam/vlan.html:88 +#: netbox/templates/ipam/vlan.html:88 msgid "Add a Prefix" msgstr "Додати префікс" -#: templates/ipam/vlangroup.html:18 +#: netbox/templates/ipam/vlangroup.html:18 msgid "Add VLAN" msgstr "Додати VLAN" -#: templates/ipam/vrf.html:16 +#: netbox/templates/ipam/vrf.html:16 msgid "Route Distinguisher" -msgstr "Відмінник маршруту" +msgstr "Розрізнювач маршруту" -#: templates/ipam/vrf.html:29 +#: netbox/templates/ipam/vrf.html:29 msgid "Unique IP Space" msgstr "Унікальний IP простір" -#: templates/login.html:29 -#: utilities/templates/form_helpers/render_errors.html:7 +#: netbox/templates/login.html:29 +#: netbox/utilities/templates/form_helpers/render_errors.html:7 msgid "Errors" msgstr "Помилки" -#: templates/login.html:69 +#: netbox/templates/login.html:69 msgid "Sign In" msgstr "Увійти" -#: templates/login.html:77 +#: netbox/templates/login.html:77 msgctxt "Denotes an alternative option" msgid "Or" msgstr "Або" -#: templates/media_failure.html:7 +#: netbox/templates/media_failure.html:7 msgid "Static Media Failure - NetBox" -msgstr "Помилка статичного носія - NetBox" +msgstr "Помилка статичних медіа-файлів - NetBox" -#: templates/media_failure.html:21 +#: netbox/templates/media_failure.html:21 msgid "Static Media Failure" -msgstr "Помилка статичного носія" +msgstr "Помилка статичних медіа-файлів" -#: templates/media_failure.html:23 +#: netbox/templates/media_failure.html:23 msgid "The following static media file failed to load" msgstr "Не вдалося завантажити наступний файл статичного медіа" -#: templates/media_failure.html:26 +#: netbox/templates/media_failure.html:26 msgid "Check the following" msgstr "Перевірте наступне" -#: templates/media_failure.html:29 +#: netbox/templates/media_failure.html:29 msgid "" "manage.py collectstatic was run during the most recent upgrade." " This installs the most recent iteration of each static file into the static" " root path." msgstr "" -"manage.py колективстатичний було запущено під час останнього " +"manage.py collectstatic було запущено під час останнього " "оновлення. Це встановлює останню ітерацію кожного статичного файлу в " "статичний кореневий шлях." -#: templates/media_failure.html:35 +#: netbox/templates/media_failure.html:35 #, python-format msgid "" "The HTTP service (e.g. nginx or Apache) is configured to serve files from " @@ -13379,7 +14191,7 @@ msgstr "" "файлів з STATIC_ROOT шляха. Зверніться до документація по установці для подальших вказівок." -#: templates/media_failure.html:47 +#: netbox/templates/media_failure.html:47 #, python-format msgid "" "The file %(filename)s exists in the static root directory and " @@ -13388,548 +14200,571 @@ msgstr "" "Файл %(filename)s існує в статичному кореневому каталозі і " "читається HTTP-сервером." -#: templates/media_failure.html:55 +#: netbox/templates/media_failure.html:55 #, python-format msgid "Click here to attempt loading NetBox again." msgstr "" "Клацніть тут щоб спробувати завантажити NetBox " "знову." -#: templates/tenancy/contact.html:18 tenancy/filtersets.py:147 -#: tenancy/forms/bulk_edit.py:137 tenancy/forms/filtersets.py:102 -#: tenancy/forms/forms.py:56 tenancy/forms/model_forms.py:106 -#: tenancy/forms/model_forms.py:130 tenancy/tables/contacts.py:98 +#: netbox/templates/tenancy/contact.html:18 netbox/tenancy/filtersets.py: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/model_forms.py:130 +#: netbox/tenancy/tables/contacts.py:98 msgid "Contact" msgstr "Контакт" -#: templates/tenancy/contact.html:29 tenancy/forms/bulk_edit.py:99 +#: netbox/templates/tenancy/contact.html:29 +#: netbox/tenancy/forms/bulk_edit.py:99 msgid "Title" msgstr "Назва" -#: templates/tenancy/contact.html:33 tenancy/forms/bulk_edit.py:104 -#: tenancy/tables/contacts.py:64 +#: netbox/templates/tenancy/contact.html:33 +#: netbox/tenancy/forms/bulk_edit.py:104 netbox/tenancy/tables/contacts.py:64 msgid "Phone" msgstr "Телефон" -#: templates/tenancy/contactgroup.html:18 tenancy/forms/forms.py:66 -#: tenancy/forms/model_forms.py:75 +#: netbox/templates/tenancy/contactgroup.html:18 +#: netbox/tenancy/forms/forms.py:66 netbox/tenancy/forms/model_forms.py:75 msgid "Contact Group" msgstr "Контактна група" -#: templates/tenancy/contactgroup.html:50 +#: netbox/templates/tenancy/contactgroup.html:50 msgid "Add Contact Group" msgstr "Додати групу контактів" -#: templates/tenancy/contactrole.html:15 tenancy/filtersets.py:152 -#: tenancy/forms/forms.py:61 tenancy/forms/model_forms.py:87 +#: netbox/templates/tenancy/contactrole.html:15 +#: netbox/tenancy/filtersets.py:152 netbox/tenancy/forms/forms.py:61 +#: netbox/tenancy/forms/model_forms.py:87 msgid "Contact Role" msgstr "Контактна роль" -#: templates/tenancy/object_contacts.html:9 +#: netbox/templates/tenancy/object_contacts.html:9 msgid "Add a contact" msgstr "Додати контакт" -#: templates/tenancy/tenantgroup.html:17 +#: netbox/templates/tenancy/tenantgroup.html:17 msgid "Add Tenant" msgstr "Додати орендаря" -#: templates/tenancy/tenantgroup.html:26 tenancy/forms/model_forms.py:32 -#: tenancy/tables/columns.py:51 tenancy/tables/columns.py:61 +#: netbox/templates/tenancy/tenantgroup.html:26 +#: netbox/tenancy/forms/model_forms.py:32 netbox/tenancy/tables/columns.py:51 +#: netbox/tenancy/tables/columns.py:61 msgid "Tenant Group" msgstr "Група орендарів" -#: templates/tenancy/tenantgroup.html:59 +#: netbox/templates/tenancy/tenantgroup.html:59 msgid "Add Tenant Group" msgstr "Додати групу орендарів" -#: templates/users/group.html:39 templates/users/user.html:63 +#: netbox/templates/users/group.html:39 netbox/templates/users/user.html:63 msgid "Assigned Permissions" msgstr "Призначені дозволи" -#: templates/users/objectpermission.html:6 -#: templates/users/objectpermission.html:14 users/forms/filtersets.py:66 +#: netbox/templates/users/objectpermission.html:6 +#: netbox/templates/users/objectpermission.html:14 +#: netbox/users/forms/filtersets.py:66 msgid "Permission" msgstr "Дозвіл" -#: templates/users/objectpermission.html:34 +#: netbox/templates/users/objectpermission.html:34 msgid "View" msgstr "Перегляд" -#: templates/users/objectpermission.html:52 users/forms/model_forms.py:315 +#: netbox/templates/users/objectpermission.html:52 +#: netbox/users/forms/model_forms.py:315 msgid "Constraints" msgstr "Обмеження" -#: templates/users/objectpermission.html:72 +#: netbox/templates/users/objectpermission.html:72 msgid "Assigned Users" msgstr "Призначені користувачі" -#: templates/virtualization/cluster.html:52 +#: netbox/templates/virtualization/cluster.html:52 msgid "Allocated Resources" msgstr "Виділені ресурси" -#: templates/virtualization/cluster.html:55 -#: templates/virtualization/virtualmachine.html:125 +#: netbox/templates/virtualization/cluster.html:55 +#: netbox/templates/virtualization/virtualmachine.html:125 msgid "Virtual CPUs" msgstr "Віртуальні процесори" -#: templates/virtualization/cluster.html:59 -#: templates/virtualization/virtualmachine.html:129 +#: netbox/templates/virtualization/cluster.html:59 +#: netbox/templates/virtualization/virtualmachine.html:129 msgid "Memory" msgstr "Пам'ять" -#: templates/virtualization/cluster.html:69 -#: templates/virtualization/virtualmachine.html:140 +#: netbox/templates/virtualization/cluster.html:69 +#: netbox/templates/virtualization/virtualmachine.html:140 msgid "Disk Space" msgstr "Місце на диску" -#: templates/virtualization/cluster/base.html:18 +#: netbox/templates/virtualization/cluster/base.html:18 msgid "Add Virtual Machine" msgstr "Додати віртуальну машину" -#: templates/virtualization/cluster/base.html:24 +#: netbox/templates/virtualization/cluster/base.html:24 msgid "Assign Device" msgstr "Призначити пристрій" -#: templates/virtualization/cluster/devices.html:10 +#: netbox/templates/virtualization/cluster/devices.html:10 msgid "Remove Selected" msgstr "Вилучити вибрані" -#: templates/virtualization/cluster_add_devices.html:9 +#: netbox/templates/virtualization/cluster_add_devices.html:9 #, python-format msgid "Add Device to Cluster %(cluster)s" msgstr "Додати пристрій до кластера %(cluster)s" -#: templates/virtualization/cluster_add_devices.html:23 +#: netbox/templates/virtualization/cluster_add_devices.html:23 msgid "Device Selection" msgstr "Вибір пристрою" -#: templates/virtualization/cluster_add_devices.html:31 +#: netbox/templates/virtualization/cluster_add_devices.html:31 msgid "Add Devices" msgstr "Додати пристрої" -#: templates/virtualization/clustergroup.html:10 -#: templates/virtualization/clustertype.html:10 +#: netbox/templates/virtualization/clustergroup.html:10 +#: netbox/templates/virtualization/clustertype.html:10 msgid "Add Cluster" msgstr "Додати кластер" -#: templates/virtualization/clustergroup.html:19 -#: virtualization/forms/model_forms.py:50 +#: netbox/templates/virtualization/clustergroup.html:19 +#: netbox/virtualization/forms/model_forms.py:50 msgid "Cluster Group" msgstr "Кластерна група" -#: templates/virtualization/clustertype.html:19 -#: templates/virtualization/virtualmachine.html:110 -#: virtualization/forms/model_forms.py:36 +#: netbox/templates/virtualization/clustertype.html:19 +#: netbox/templates/virtualization/virtualmachine.html:110 +#: netbox/virtualization/forms/model_forms.py:36 msgid "Cluster Type" msgstr "Тип кластера" -#: templates/virtualization/virtualdisk.html:18 +#: netbox/templates/virtualization/virtualdisk.html:18 msgid "Virtual Disk" msgstr "Віртуальний диск" -#: templates/virtualization/virtualmachine.html:122 -#: virtualization/forms/bulk_edit.py:190 -#: virtualization/forms/model_forms.py:224 +#: netbox/templates/virtualization/virtualmachine.html:122 +#: netbox/virtualization/forms/bulk_edit.py:190 +#: netbox/virtualization/forms/model_forms.py:224 msgid "Resources" msgstr "Ресурси" -#: templates/virtualization/virtualmachine.html:178 +#: netbox/templates/virtualization/virtualmachine.html:178 msgid "Add Virtual Disk" msgstr "Додати віртуальний диск" -#: templates/vpn/ikepolicy.html:10 templates/vpn/ipsecprofile.html:33 -#: vpn/tables/crypto.py:166 +#: 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" msgstr "Політика IKE" -#: templates/vpn/ikepolicy.html:21 +#: netbox/templates/vpn/ikepolicy.html:21 msgid "IKE Version" msgstr "Версія IKE" -#: templates/vpn/ikepolicy.html:29 +#: netbox/templates/vpn/ikepolicy.html:29 msgid "Pre-Shared Key" msgstr "Попередньо спільний ключ" -#: templates/vpn/ikepolicy.html:33 -#: templates/wireless/inc/authentication_attrs.html:20 +#: netbox/templates/vpn/ikepolicy.html:33 +#: netbox/templates/wireless/inc/authentication_attrs.html:20 msgid "Show Secret" -msgstr "Показати Таємницю" +msgstr "Показати таємницю" -#: templates/vpn/ikepolicy.html:57 templates/vpn/ipsecpolicy.html:45 -#: templates/vpn/ipsecprofile.html:52 templates/vpn/ipsecprofile.html:77 -#: vpn/forms/model_forms.py:316 vpn/forms/model_forms.py:352 -#: vpn/tables/crypto.py:68 vpn/tables/crypto.py:134 +#: netbox/templates/vpn/ikepolicy.html:57 +#: netbox/templates/vpn/ipsecpolicy.html:45 +#: netbox/templates/vpn/ipsecprofile.html:52 +#: netbox/templates/vpn/ipsecprofile.html:77 +#: netbox/vpn/forms/model_forms.py:316 netbox/vpn/forms/model_forms.py:352 +#: netbox/vpn/tables/crypto.py:68 netbox/vpn/tables/crypto.py:134 msgid "Proposals" -msgstr "Пропозиції" +msgstr "Налаштування" -#: templates/vpn/ikeproposal.html:10 +#: netbox/templates/vpn/ikeproposal.html:10 msgid "IKE Proposal" -msgstr "Пропозиція IKE" +msgstr "Налаштування IKE" -#: templates/vpn/ikeproposal.html:21 vpn/forms/bulk_edit.py:97 -#: vpn/forms/bulk_import.py:145 vpn/forms/filtersets.py:101 +#: netbox/templates/vpn/ikeproposal.html:21 netbox/vpn/forms/bulk_edit.py:97 +#: netbox/vpn/forms/bulk_import.py:145 netbox/vpn/forms/filtersets.py:101 msgid "Authentication method" msgstr "Метод аутентифікації" -#: templates/vpn/ikeproposal.html:25 templates/vpn/ipsecproposal.html:21 -#: vpn/forms/bulk_edit.py:102 vpn/forms/bulk_edit.py:172 -#: vpn/forms/bulk_import.py:149 vpn/forms/bulk_import.py:195 -#: vpn/forms/filtersets.py:106 vpn/forms/filtersets.py:154 +#: netbox/templates/vpn/ikeproposal.html:25 +#: netbox/templates/vpn/ipsecproposal.html:21 +#: netbox/vpn/forms/bulk_edit.py:102 netbox/vpn/forms/bulk_edit.py:172 +#: netbox/vpn/forms/bulk_import.py:149 netbox/vpn/forms/bulk_import.py:195 +#: netbox/vpn/forms/filtersets.py:106 netbox/vpn/forms/filtersets.py:154 msgid "Encryption algorithm" msgstr "Алгоритм шифрування" -#: templates/vpn/ikeproposal.html:29 templates/vpn/ipsecproposal.html:25 -#: vpn/forms/bulk_edit.py:107 vpn/forms/bulk_edit.py:177 -#: vpn/forms/bulk_import.py:153 vpn/forms/bulk_import.py:200 -#: vpn/forms/filtersets.py:111 vpn/forms/filtersets.py:159 +#: netbox/templates/vpn/ikeproposal.html:29 +#: netbox/templates/vpn/ipsecproposal.html:25 +#: netbox/vpn/forms/bulk_edit.py:107 netbox/vpn/forms/bulk_edit.py:177 +#: netbox/vpn/forms/bulk_import.py:153 netbox/vpn/forms/bulk_import.py:200 +#: netbox/vpn/forms/filtersets.py:111 netbox/vpn/forms/filtersets.py:159 msgid "Authentication algorithm" msgstr "Алгоритм авторизації" -#: templates/vpn/ikeproposal.html:33 +#: netbox/templates/vpn/ikeproposal.html:33 msgid "DH group" msgstr "Група DH" -#: templates/vpn/ikeproposal.html:37 templates/vpn/ipsecproposal.html:29 -#: vpn/forms/bulk_edit.py:182 vpn/models/crypto.py:146 +#: netbox/templates/vpn/ikeproposal.html:37 +#: netbox/templates/vpn/ipsecproposal.html:29 +#: netbox/vpn/forms/bulk_edit.py:182 netbox/vpn/models/crypto.py:146 msgid "SA lifetime (seconds)" msgstr "Термін служби SA (секунди)" -#: templates/vpn/ipsecpolicy.html:10 templates/vpn/ipsecprofile.html:66 -#: vpn/tables/crypto.py:170 +#: netbox/templates/vpn/ipsecpolicy.html:10 +#: netbox/templates/vpn/ipsecprofile.html:66 netbox/vpn/tables/crypto.py:170 msgid "IPSec Policy" msgstr "Політика IPsec" -#: templates/vpn/ipsecpolicy.html:21 vpn/forms/bulk_edit.py:210 -#: vpn/models/crypto.py:193 +#: netbox/templates/vpn/ipsecpolicy.html:21 netbox/vpn/forms/bulk_edit.py:210 +#: netbox/vpn/models/crypto.py:193 msgid "PFS group" -msgstr "Група ПФС" +msgstr "Група PFS" -#: templates/vpn/ipsecprofile.html:10 vpn/forms/model_forms.py:54 +#: netbox/templates/vpn/ipsecprofile.html:10 +#: netbox/vpn/forms/model_forms.py:54 msgid "IPSec Profile" msgstr "Профіль IPsec" -#: templates/vpn/ipsecprofile.html:89 vpn/tables/crypto.py:137 +#: netbox/templates/vpn/ipsecprofile.html:89 netbox/vpn/tables/crypto.py:137 msgid "PFS Group" -msgstr "Група ПФС" +msgstr "Група PFS" -#: templates/vpn/ipsecproposal.html:10 +#: netbox/templates/vpn/ipsecproposal.html:10 msgid "IPSec Proposal" msgstr "Пропозиція IPsec" -#: templates/vpn/ipsecproposal.html:33 vpn/forms/bulk_edit.py:186 -#: vpn/models/crypto.py:152 +#: netbox/templates/vpn/ipsecproposal.html:33 +#: netbox/vpn/forms/bulk_edit.py:186 netbox/vpn/models/crypto.py:152 msgid "SA lifetime (KB)" msgstr "Термін служби SA (КБ)" -#: templates/vpn/l2vpn.html:11 templates/vpn/l2vpntermination.html:9 +#: netbox/templates/vpn/l2vpn.html:11 +#: netbox/templates/vpn/l2vpntermination.html:9 msgid "L2VPN Attributes" msgstr "L2VPN Атрибути" -#: templates/vpn/l2vpn.html:60 templates/vpn/tunnel.html:76 +#: netbox/templates/vpn/l2vpn.html:60 netbox/templates/vpn/tunnel.html:76 msgid "Add a Termination" -msgstr "Додати припинення" +msgstr "Додати кінець" -#: templates/vpn/tunnel.html:9 +#: netbox/templates/vpn/tunnel.html:9 msgid "Add Termination" -msgstr "Додати припинення" +msgstr "Додати кінець" -#: templates/vpn/tunnel.html:37 vpn/forms/bulk_edit.py:49 -#: vpn/forms/bulk_import.py:48 vpn/forms/filtersets.py:57 +#: netbox/templates/vpn/tunnel.html:37 netbox/vpn/forms/bulk_edit.py:49 +#: netbox/vpn/forms/bulk_import.py:48 netbox/vpn/forms/filtersets.py:57 msgid "Encapsulation" msgstr "Інкапсуляція" -#: templates/vpn/tunnel.html:41 vpn/forms/bulk_edit.py:55 -#: vpn/forms/bulk_import.py:53 vpn/forms/filtersets.py:64 -#: vpn/models/crypto.py:250 vpn/tables/tunnels.py:51 +#: netbox/templates/vpn/tunnel.html:41 netbox/vpn/forms/bulk_edit.py:55 +#: netbox/vpn/forms/bulk_import.py:53 netbox/vpn/forms/filtersets.py:64 +#: netbox/vpn/models/crypto.py:250 netbox/vpn/tables/tunnels.py:51 msgid "IPSec profile" msgstr "Профіль IPsec" -#: templates/vpn/tunnel.html:45 vpn/forms/bulk_edit.py:69 -#: vpn/forms/filtersets.py:68 +#: netbox/templates/vpn/tunnel.html:45 netbox/vpn/forms/bulk_edit.py:69 +#: netbox/vpn/forms/filtersets.py:68 msgid "Tunnel ID" msgstr "ID тунелю" -#: templates/vpn/tunnelgroup.html:14 +#: netbox/templates/vpn/tunnelgroup.html:14 msgid "Add Tunnel" msgstr "Додати тунель" -#: templates/vpn/tunnelgroup.html:23 vpn/forms/model_forms.py:36 -#: vpn/forms/model_forms.py:49 +#: netbox/templates/vpn/tunnelgroup.html:23 netbox/vpn/forms/model_forms.py:36 +#: netbox/vpn/forms/model_forms.py:49 msgid "Tunnel Group" msgstr "Тунельна група" -#: templates/vpn/tunneltermination.html:10 +#: netbox/templates/vpn/tunneltermination.html:10 msgid "Tunnel Termination" -msgstr "Закриття тунелю" +msgstr "Кінець тунелю" -#: templates/vpn/tunneltermination.html:35 vpn/forms/bulk_import.py:107 -#: vpn/forms/model_forms.py:102 vpn/forms/model_forms.py:138 -#: vpn/forms/model_forms.py:247 vpn/tables/tunnels.py:101 +#: netbox/templates/vpn/tunneltermination.html:35 +#: netbox/vpn/forms/bulk_import.py:107 netbox/vpn/forms/model_forms.py:102 +#: netbox/vpn/forms/model_forms.py:138 netbox/vpn/forms/model_forms.py:247 +#: netbox/vpn/tables/tunnels.py:101 msgid "Outside IP" msgstr "За межами IP" -#: templates/vpn/tunneltermination.html:51 +#: netbox/templates/vpn/tunneltermination.html:51 msgid "Peer Terminations" msgstr "Роз'єднання мережевих сусідів" -#: templates/wireless/inc/authentication_attrs.html:12 +#: netbox/templates/wireless/inc/authentication_attrs.html:12 msgid "Cipher" msgstr "Шифр" -#: templates/wireless/inc/authentication_attrs.html:16 +#: netbox/templates/wireless/inc/authentication_attrs.html:16 msgid "PSK" -msgstr " Попередньо спільний ключ (PSK)" +msgstr "Попередньо спільний ключ (PSK)" -#: templates/wireless/inc/wirelesslink_interface.html:35 -#: templates/wireless/inc/wirelesslink_interface.html:45 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:35 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:45 msgctxt "Abbreviation for megahertz" msgid "MHz" msgstr "МГц" -#: templates/wireless/wirelesslan.html:57 +#: netbox/templates/wireless/wirelesslan.html:57 msgid "Attached Interfaces" msgstr "Прикріплені інтерфейси" -#: templates/wireless/wirelesslangroup.html:17 +#: netbox/templates/wireless/wirelesslangroup.html:17 msgid "Add Wireless LAN" -msgstr "Додати бездротову мережу" +msgstr "Додати бездротову локальну мережу" -#: templates/wireless/wirelesslangroup.html:26 -#: wireless/forms/model_forms.py:28 +#: netbox/templates/wireless/wirelesslangroup.html:26 +#: netbox/wireless/forms/model_forms.py:28 msgid "Wireless LAN Group" msgstr "Група бездротової локальної мережі" -#: templates/wireless/wirelesslangroup.html:59 +#: netbox/templates/wireless/wirelesslangroup.html:59 msgid "Add Wireless LAN Group" msgstr "Додати групу бездротової локальної мережі" -#: templates/wireless/wirelesslink.html:14 +#: netbox/templates/wireless/wirelesslink.html:14 msgid "Link Properties" msgstr "Властивості посилання" -#: templates/wireless/wirelesslink.html:38 wireless/forms/bulk_edit.py:129 -#: wireless/forms/filtersets.py:102 wireless/forms/model_forms.py:165 +#: 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 "Відстань" -#: tenancy/filtersets.py:28 +#: netbox/tenancy/filtersets.py:28 msgid "Parent contact group (ID)" msgstr "Батьківська контактна група (ідентифікатор)" -#: tenancy/filtersets.py:34 +#: netbox/tenancy/filtersets.py:34 msgid "Parent contact group (slug)" -msgstr "Батьківська контактна група (скоречення)" +msgstr "Батьківська контактна група (скорочення)" -#: tenancy/filtersets.py:40 tenancy/filtersets.py:67 tenancy/filtersets.py:110 +#: netbox/tenancy/filtersets.py:40 netbox/tenancy/filtersets.py:67 +#: netbox/tenancy/filtersets.py:110 msgid "Contact group (ID)" msgstr "Контактна група (ідентифікатор)" -#: tenancy/filtersets.py:47 tenancy/filtersets.py:74 tenancy/filtersets.py:117 +#: netbox/tenancy/filtersets.py:47 netbox/tenancy/filtersets.py:74 +#: netbox/tenancy/filtersets.py:117 msgid "Contact group (slug)" -msgstr "Контактна група (скоречення)" +msgstr "Контактна група (скорочення)" -#: tenancy/filtersets.py:104 +#: netbox/tenancy/filtersets.py:104 msgid "Contact (ID)" msgstr "Контакт (ідентифікатор)" -#: tenancy/filtersets.py:121 +#: netbox/tenancy/filtersets.py:121 msgid "Contact role (ID)" msgstr "Роль контакту (ідентифікатор)" -#: tenancy/filtersets.py:127 +#: netbox/tenancy/filtersets.py:127 msgid "Contact role (slug)" -msgstr "Контактна роль (скоречення)" +msgstr "Контактна роль (скорочення)" -#: tenancy/filtersets.py:158 +#: netbox/tenancy/filtersets.py:158 msgid "Contact group" msgstr "Контактна група" -#: tenancy/filtersets.py:169 +#: netbox/tenancy/filtersets.py:169 msgid "Parent tenant group (ID)" msgstr "Батьківська група орендарів (ідентифікатор)" -#: tenancy/filtersets.py:175 +#: netbox/tenancy/filtersets.py:175 msgid "Parent tenant group (slug)" -msgstr "Батьківська група орендарів (скоречення)" +msgstr "Батьківська група орендарів (скорочення)" -#: tenancy/filtersets.py:181 tenancy/filtersets.py:201 +#: netbox/tenancy/filtersets.py:181 netbox/tenancy/filtersets.py:201 msgid "Tenant group (ID)" msgstr "Група орендарів (ідентифікатор)" -#: tenancy/filtersets.py:234 +#: netbox/tenancy/filtersets.py:234 msgid "Tenant Group (ID)" msgstr "Група орендарів (ідентифікатор)" -#: tenancy/filtersets.py:241 +#: netbox/tenancy/filtersets.py:241 msgid "Tenant Group (slug)" -msgstr "Група орендарів (скоречення)" +msgstr "Група орендарів (скорочення)" -#: tenancy/forms/bulk_edit.py:66 +#: netbox/tenancy/forms/bulk_edit.py:66 msgid "Desciption" msgstr "Опис" -#: tenancy/forms/bulk_import.py:101 +#: netbox/tenancy/forms/bulk_import.py:101 msgid "Assigned contact" msgstr "Призначений контакт" -#: tenancy/models/contacts.py:32 +#: netbox/tenancy/models/contacts.py:32 msgid "contact group" msgstr "контактна група" -#: tenancy/models/contacts.py:33 +#: netbox/tenancy/models/contacts.py:33 msgid "contact groups" msgstr "контактні групи" -#: tenancy/models/contacts.py:48 +#: netbox/tenancy/models/contacts.py:48 msgid "contact role" msgstr "контактна роль" -#: tenancy/models/contacts.py:49 +#: netbox/tenancy/models/contacts.py:49 msgid "contact roles" msgstr "контактні ролі" -#: tenancy/models/contacts.py:68 +#: netbox/tenancy/models/contacts.py:68 msgid "title" msgstr "назва" -#: tenancy/models/contacts.py:73 +#: netbox/tenancy/models/contacts.py:73 msgid "phone" msgstr "телефон" -#: tenancy/models/contacts.py:78 +#: netbox/tenancy/models/contacts.py:78 msgid "email" msgstr "електронна скринька" -#: tenancy/models/contacts.py:87 +#: netbox/tenancy/models/contacts.py:87 msgid "link" msgstr "посилання" -#: tenancy/models/contacts.py:103 +#: netbox/tenancy/models/contacts.py:103 msgid "contact" msgstr "контакт" -#: tenancy/models/contacts.py:104 +#: netbox/tenancy/models/contacts.py:104 msgid "contacts" msgstr "контакти" -#: tenancy/models/contacts.py:153 +#: netbox/tenancy/models/contacts.py:153 msgid "contact assignment" -msgstr "призначення контактів" +msgstr "призначення контакта" -#: tenancy/models/contacts.py:154 +#: netbox/tenancy/models/contacts.py:154 msgid "contact assignments" -msgstr "контактні завдання" +msgstr "призначення контакта" -#: tenancy/models/contacts.py:170 +#: netbox/tenancy/models/contacts.py:170 #, python-brace-format msgid "Contacts cannot be assigned to this object type ({type})." msgstr "Контакти не можуть бути призначені для цього типу об'єкта ({type})." -#: tenancy/models/tenants.py:32 +#: netbox/tenancy/models/tenants.py:32 msgid "tenant group" msgstr "група орендарів" -#: tenancy/models/tenants.py:33 +#: netbox/tenancy/models/tenants.py:33 msgid "tenant groups" msgstr "групи орендарів" -#: tenancy/models/tenants.py:70 +#: netbox/tenancy/models/tenants.py:70 msgid "Tenant name must be unique per group." msgstr "Ім'я орендаря має бути унікальним для кожної групи." -#: tenancy/models/tenants.py:80 +#: netbox/tenancy/models/tenants.py:80 msgid "Tenant slug must be unique per group." -msgstr "Слимак орендаря повинен бути унікальним для кожної групи." +msgstr "Скоречення орендаря повинен бути унікальним для кожної групи." -#: tenancy/models/tenants.py:88 +#: netbox/tenancy/models/tenants.py:88 msgid "tenant" msgstr "орендар" -#: tenancy/models/tenants.py:89 +#: netbox/tenancy/models/tenants.py:89 msgid "tenants" -msgstr "орендарів" +msgstr "орендарі" -#: tenancy/tables/contacts.py:112 +#: netbox/tenancy/tables/contacts.py:112 msgid "Contact Title" msgstr "Назва контакту" -#: tenancy/tables/contacts.py:116 +#: netbox/tenancy/tables/contacts.py:116 msgid "Contact Phone" -msgstr "Контактний телефон" +msgstr "Телефон контакту" -#: tenancy/tables/contacts.py:121 +#: netbox/tenancy/tables/contacts.py:121 msgid "Contact Email" -msgstr "Контактна адреса електронної скриньки" +msgstr "Контактний Email" -#: tenancy/tables/contacts.py:125 +#: netbox/tenancy/tables/contacts.py:125 msgid "Contact Address" -msgstr "Контактна адреса" +msgstr "Адреса контакту" -#: tenancy/tables/contacts.py:129 +#: netbox/tenancy/tables/contacts.py:129 msgid "Contact Link" -msgstr "Посилання на контакт" +msgstr "Посилання контакту" -#: tenancy/tables/contacts.py:133 +#: netbox/tenancy/tables/contacts.py:133 msgid "Contact Description" msgstr "Опис контакту" -#: users/filtersets.py:33 users/filtersets.py:73 +#: netbox/users/filtersets.py:33 netbox/users/filtersets.py:73 msgid "Permission (ID)" msgstr "Дозвіл (ідентифікатор)" -#: users/filtersets.py:38 users/filtersets.py:78 +#: netbox/users/filtersets.py:38 netbox/users/filtersets.py:78 msgid "Notification group (ID)" msgstr "Група повідомлень (ідентифікатор)" -#: users/forms/bulk_edit.py:26 +#: netbox/users/forms/bulk_edit.py:26 msgid "First name" msgstr "Ім'я" -#: users/forms/bulk_edit.py:31 +#: netbox/users/forms/bulk_edit.py:31 msgid "Last name" msgstr "Прізвище" -#: users/forms/bulk_edit.py:43 +#: netbox/users/forms/bulk_edit.py:43 msgid "Staff status" msgstr "Статус персоналу" -#: users/forms/bulk_edit.py:48 +#: netbox/users/forms/bulk_edit.py:48 msgid "Superuser status" msgstr "Статус суперкористувача" -#: users/forms/bulk_import.py:41 +#: netbox/users/forms/bulk_import.py:41 msgid "If no key is provided, one will be generated automatically." msgstr "Якщо ключ не надано, він буде згенерований автоматично." -#: users/forms/filtersets.py:51 users/tables.py:42 +#: netbox/users/forms/filtersets.py:51 netbox/users/tables.py:42 msgid "Is Staff" -msgstr "Чи є персонал" +msgstr "Є персоналом" -#: users/forms/filtersets.py:58 users/tables.py:45 +#: netbox/users/forms/filtersets.py:58 netbox/users/tables.py:45 msgid "Is Superuser" msgstr "Є суперкористувачем" -#: users/forms/filtersets.py:91 users/tables.py:86 +#: netbox/users/forms/filtersets.py:91 netbox/users/tables.py:86 msgid "Can View" msgstr "Може переглядати" -#: users/forms/filtersets.py:98 users/tables.py:89 +#: netbox/users/forms/filtersets.py:98 netbox/users/tables.py:89 msgid "Can Add" msgstr "Можете додати" -#: users/forms/filtersets.py:105 users/tables.py:92 +#: netbox/users/forms/filtersets.py:105 netbox/users/tables.py:92 msgid "Can Change" msgstr "Може змінитися" -#: users/forms/filtersets.py:112 users/tables.py:95 +#: netbox/users/forms/filtersets.py:112 netbox/users/tables.py:95 msgid "Can Delete" msgstr "Може видалити" -#: users/forms/model_forms.py:62 +#: netbox/users/forms/model_forms.py:62 msgid "User Interface" msgstr "Інтерфейс користувача" -#: users/forms/model_forms.py:114 +#: netbox/users/forms/model_forms.py:114 msgid "" "Keys must be at least 40 characters in length. Be sure to record " "your key prior to submitting this form, as it may no longer be " @@ -13939,42 +14774,42 @@ msgstr "" "запишіть свій ключ перед відправкою цієї форми, оскільки вона може " "більше не бути доступною після створення токена." -#: users/forms/model_forms.py:126 +#: netbox/users/forms/model_forms.py:126 msgid "" "Allowed IPv4/IPv6 networks from where the token can be used. Leave blank for" " no restrictions. Example: " "10.1.1.0/24,192.168.10.16/32,2001:db8:1::/64" msgstr "" "Дозволені мережі IPv4/IPv6, звідки можна використовувати токен. Залиште " -"порожнім без обмежень. Приклад: 10.1.1.0/24,192.168.10.16/32,2001: дб " -"8:1: :/64" +"порожнім без обмежень. Приклад: " +"10.1.1.0/24,192.168.10.16/32,2001:db8:1::/64" -#: users/forms/model_forms.py:175 +#: netbox/users/forms/model_forms.py:175 msgid "Confirm password" msgstr "Підтвердити пароль" -#: users/forms/model_forms.py:178 +#: netbox/users/forms/model_forms.py:178 msgid "Enter the same password as before, for verification." msgstr "Введіть той же пароль, що і раніше, для перевірки." -#: users/forms/model_forms.py:227 +#: netbox/users/forms/model_forms.py:227 msgid "Passwords do not match! Please check your input and try again." msgstr "" "Паролі не збігаються! Будь ласка, перевірте свої дані та спробуйте ще раз." -#: users/forms/model_forms.py:294 +#: netbox/users/forms/model_forms.py:294 msgid "Additional actions" msgstr "Додаткові дії" -#: users/forms/model_forms.py:297 +#: netbox/users/forms/model_forms.py:297 msgid "Actions granted in addition to those listed above" msgstr "Дії, надані на додаток до перерахованих вище" -#: users/forms/model_forms.py:313 +#: netbox/users/forms/model_forms.py:313 msgid "Objects" msgstr "Об'єкти" -#: users/forms/model_forms.py:325 +#: netbox/users/forms/model_forms.py:325 msgid "" "JSON expression of a queryset filter that will return only permitted " "objects. Leave null to match all objects of this type. A list of multiple " @@ -13984,121 +14819,121 @@ msgstr "" "null, щоб відповідати всім об'єктам цього типу. Список декількох об'єктів " "призведе до логічної операції OR." -#: users/forms/model_forms.py:364 +#: netbox/users/forms/model_forms.py:364 msgid "At least one action must be selected." msgstr "Необхідно вибрати хоча б одну дію." -#: users/forms/model_forms.py:382 +#: netbox/users/forms/model_forms.py:382 #, python-brace-format msgid "Invalid filter for {model}: {error}" msgstr "Невірний фільтр для {model}: {error}" -#: users/models/permissions.py:39 +#: netbox/users/models/permissions.py:39 msgid "The list of actions granted by this permission" msgstr "Перелік дій, наданих цим дозволом" -#: users/models/permissions.py:44 +#: netbox/users/models/permissions.py:44 msgid "constraints" msgstr "обмеження" -#: users/models/permissions.py:45 +#: netbox/users/models/permissions.py:45 msgid "" "Queryset filter matching the applicable objects of the selected type(s)" msgstr "Фільтр Queryset, що відповідає відповідним об'єктам вибраних типів" -#: users/models/permissions.py:52 +#: netbox/users/models/permissions.py:52 msgid "permission" msgstr "дозвіл" -#: users/models/permissions.py:53 users/models/users.py:47 +#: netbox/users/models/permissions.py:53 netbox/users/models/users.py:47 msgid "permissions" msgstr "дозволи" -#: users/models/preferences.py:29 users/models/preferences.py:30 +#: netbox/users/models/preferences.py:29 netbox/users/models/preferences.py:30 msgid "user preferences" msgstr "налаштування користувача" -#: users/models/preferences.py:97 +#: netbox/users/models/preferences.py:97 #, python-brace-format msgid "Key '{path}' is a leaf node; cannot assign new keys" msgstr "Ключ '{path}'є листовим вузлом; не вдається призначити нові ключі" -#: users/models/preferences.py:109 +#: netbox/users/models/preferences.py:109 #, python-brace-format msgid "Key '{path}' is a dictionary; cannot assign a non-dictionary value" msgstr "" "Ключ '{path}'є словником; не може призначити значення, яке не є словником" -#: users/models/tokens.py:36 +#: netbox/users/models/tokens.py:36 msgid "expires" msgstr "спливає" -#: users/models/tokens.py:41 +#: netbox/users/models/tokens.py:41 msgid "last used" msgstr "востаннє використаний" -#: users/models/tokens.py:46 +#: netbox/users/models/tokens.py:46 msgid "key" msgstr "ключ" -#: users/models/tokens.py:52 +#: netbox/users/models/tokens.py:52 msgid "write enabled" msgstr "запис увімкнено" -#: users/models/tokens.py:54 +#: netbox/users/models/tokens.py:54 msgid "Permit create/update/delete operations using this key" msgstr "" "Дозволити створення/оновлення/видалення операцій за допомогою цього ключа" -#: users/models/tokens.py:65 +#: netbox/users/models/tokens.py:65 msgid "allowed IPs" msgstr "дозволені IP-адреси" -#: users/models/tokens.py:67 +#: netbox/users/models/tokens.py:67 msgid "" "Allowed IPv4/IPv6 networks from where the token can be used. Leave blank for" " no restrictions. Ex: \"10.1.1.0/24, 192.168.10.16/32, 2001:DB8:1::/64\"" msgstr "" "Дозволені мережі IPv4/IPv6, звідки можна використовувати жетон. Залиште " "порожнім без обмежень. Наприклад: \"10.1.1.0/24, 192.168.10.16/32, " -"2001:DB8:1: :/64\"" +"2001:DB8:1::/64\"" -#: users/models/tokens.py:75 +#: netbox/users/models/tokens.py:75 msgid "token" -msgstr "токен" +msgstr "жетон" -#: users/models/tokens.py:76 +#: netbox/users/models/tokens.py:76 msgid "tokens" msgstr "жетонів" -#: users/models/users.py:57 vpn/models/crypto.py:42 +#: netbox/users/models/users.py:57 netbox/vpn/models/crypto.py:42 msgid "group" msgstr "групи" -#: users/models/users.py:92 +#: netbox/users/models/users.py:92 msgid "user" msgstr "користувач" -#: users/models/users.py:104 +#: netbox/users/models/users.py:104 msgid "A user with this username already exists." msgstr "Користувач з цим ім'ям користувача вже існує." -#: users/tables.py:98 +#: netbox/users/tables.py:98 msgid "Custom Actions" msgstr "Користувацькі дії" -#: utilities/api.py:153 +#: netbox/utilities/api.py:153 #, python-brace-format msgid "Related object not found using the provided attributes: {params}" msgstr "" "Пов'язаний об'єкт не знайдено за допомогою наданих атрибутів: {params}" -#: utilities/api.py:156 +#: netbox/utilities/api.py:156 #, python-brace-format msgid "Multiple objects match the provided attributes: {params}" msgstr "Кілька об'єктів відповідають наданим атрибутам: {params}" -#: utilities/api.py:168 +#: netbox/utilities/api.py:168 #, python-brace-format msgid "" "Related objects must be referenced by numeric ID or by dictionary of " @@ -14107,42 +14942,42 @@ msgstr "" "Пов'язані об'єкти повинні посилатися числовим ідентифікатором або словником " "атрибутів. Отримано невизнане значення: {value}" -#: utilities/api.py:177 +#: netbox/utilities/api.py:177 #, python-brace-format msgid "Related object not found using the provided numeric ID: {id}" msgstr "" "Пов'язаний об'єкт не знайдено за допомогою вказаного числового " "ідентифікатора: {id}" -#: utilities/choices.py:19 +#: netbox/utilities/choices.py:19 #, python-brace-format msgid "{name} has a key defined but CHOICES is not a list" -msgstr "{name} має визначений ключ, але CHOICES не є списком" +msgstr "{name} має визначений ключ, але ВИБІР не є списком" -#: utilities/conversion.py:19 +#: netbox/utilities/conversion.py:19 msgid "Weight must be a positive number" -msgstr "Вага повинна бути позитивним числом" +msgstr "Вага повинна бути додатним числом" -#: utilities/conversion.py:21 +#: netbox/utilities/conversion.py:21 #, python-brace-format msgid "Invalid value '{weight}' for weight (must be a number)" -msgstr "Невірне значення '{weight}'для ваги (має бути число)" +msgstr "Невірне значення '{weight}' для ваги (має бути число)" -#: utilities/conversion.py:32 utilities/conversion.py:62 +#: netbox/utilities/conversion.py:32 netbox/utilities/conversion.py:62 #, python-brace-format msgid "Unknown unit {unit}. Must be one of the following: {valid_units}" msgstr "Невідома одиниця {unit}. Повинна бути одна з наступних: {valid_units}" -#: utilities/conversion.py:45 +#: netbox/utilities/conversion.py:45 msgid "Length must be a positive number" msgstr "Довжина повинна бути додатним числом" -#: utilities/conversion.py:47 +#: netbox/utilities/conversion.py:47 #, python-brace-format msgid "Invalid value '{length}' for length (must be a number)" -msgstr "Невірне значення '{length}'для довжини (має бути число)" +msgstr "Невірне значення '{length}' для довжини (має бути число)" -#: utilities/error_handlers.py:31 +#: netbox/utilities/error_handlers.py:31 #, python-brace-format msgid "" "Unable to delete {objects}. {count} dependent objects were " @@ -14151,24 +14986,24 @@ msgstr "" "Неможливо видалити {objects}. {count} знайдені залежні " "об'єкти: " -#: utilities/error_handlers.py:33 +#: netbox/utilities/error_handlers.py:33 msgid "More than 50" msgstr "Більше 50" -#: utilities/fields.py:30 +#: netbox/utilities/fields.py:30 msgid "RGB color in hexadecimal. Example: " msgstr "RGB-колір шістнадцятковим представленням. Приклад: " -#: utilities/fields.py:159 +#: netbox/utilities/fields.py:159 #, python-format msgid "" "%s(%r) is invalid. to_model parameter to CounterCacheField must be a string " "in the format 'app.model'" msgstr "" -"%s(%r) невырний. Параметр to_model до CounterCacheField повинен бути рядком " +"%s(%r) невірний. Параметр to_model до CounterCacheField повинен бути рядком " "у форматі 'app.model'" -#: utilities/fields.py:169 +#: netbox/utilities/fields.py:169 #, python-format msgid "" "%s(%r) is invalid. to_field parameter to CounterCacheField must be a string " @@ -14177,36 +15012,36 @@ msgstr "" "%s(%r) невірний. Параметр to_field до CounterCacheField повинен бути рядком " "у форматі 'field'" -#: utilities/forms/bulk_import.py:23 +#: netbox/utilities/forms/bulk_import.py:23 msgid "Enter object data in CSV, JSON or YAML format." msgstr "Введіть дані об'єкта у форматі CSV, JSON або YAML." -#: utilities/forms/bulk_import.py:36 +#: netbox/utilities/forms/bulk_import.py:36 msgid "CSV delimiter" msgstr "Розмежувач CSV" -#: utilities/forms/bulk_import.py:37 +#: netbox/utilities/forms/bulk_import.py:37 msgid "The character which delimits CSV fields. Applies only to CSV format." msgstr "Символ, який розмежовує поля CSV. Застосовується лише до формату CSV." -#: utilities/forms/bulk_import.py:51 +#: netbox/utilities/forms/bulk_import.py:51 msgid "Form data must be empty when uploading/selecting a file." -msgstr "Дані форми повинні бути порожніми під час завантаження/вибору файлу." +msgstr "Дані форми повинні бути порожніми під час вивантаження/вибору файлу." -#: utilities/forms/bulk_import.py:80 +#: netbox/utilities/forms/bulk_import.py:80 #, python-brace-format msgid "Unknown data format: {format}" msgstr "Невідомий формат даних: {format}" -#: utilities/forms/bulk_import.py:100 +#: netbox/utilities/forms/bulk_import.py:100 msgid "Unable to detect data format. Please specify." msgstr "Не вдається визначити формат даних. Будь ласка, уточніть." -#: utilities/forms/bulk_import.py:123 +#: netbox/utilities/forms/bulk_import.py:123 msgid "Invalid CSV delimiter" msgstr "Невірний роздільник CSV" -#: utilities/forms/bulk_import.py:167 +#: netbox/utilities/forms/bulk_import.py:167 msgid "" "Invalid YAML data. Data must be in the form of multiple documents, or a " "single document comprising a list of dictionaries." @@ -14214,7 +15049,7 @@ msgstr "" "Невірні дані YAML. Дані повинні бути у вигляді декількох документів або " "одного документа, що містить перелік словників." -#: utilities/forms/fields/array.py:20 +#: netbox/utilities/forms/fields/array.py:20 #, python-brace-format msgid "" "Invalid list ({value}). Must be numeric and ranges must be in ascending " @@ -14223,7 +15058,7 @@ msgstr "" "Невірний список ({value}). Повинен бути числовим, а діапазони повинні бути в" " порядку зростання." -#: utilities/forms/fields/array.py:40 +#: netbox/utilities/forms/fields/array.py:40 msgid "" "Specify one or more numeric ranges separated by commas. Example: " "1-5,20-30" @@ -14231,7 +15066,7 @@ msgstr "" "Вкажіть один або кілька числових діапазонів, розділених комами. Приклад: " "1-5,20-30" -#: utilities/forms/fields/array.py:47 +#: netbox/utilities/forms/fields/array.py:47 #, python-brace-format msgid "" "Invalid ranges ({value}). Must be a range of integers in ascending order." @@ -14239,17 +15074,18 @@ msgstr "" "Недійсні діапазони ({value}). Повинен бути діапазон цілих чисел у порядку " "зростання." -#: utilities/forms/fields/csv.py:44 +#: netbox/utilities/forms/fields/csv.py:44 #, python-brace-format msgid "Invalid value for a multiple choice field: {value}" msgstr "Невірне значення для поля з множинним вибором: {value}" -#: utilities/forms/fields/csv.py:57 utilities/forms/fields/csv.py:78 +#: netbox/utilities/forms/fields/csv.py:57 +#: netbox/utilities/forms/fields/csv.py:78 #, python-format msgid "Object not found: %(value)s" msgstr "Об'єкт не знайдено: %(value)s" -#: utilities/forms/fields/csv.py:65 +#: netbox/utilities/forms/fields/csv.py:65 #, python-brace-format msgid "" "\"{value}\" is not a unique value for this field; multiple objects were " @@ -14258,20 +15094,20 @@ msgstr "" "\"{value}\" не є унікальним значенням для цього поля; було знайдено декілька" " об'єктів" -#: utilities/forms/fields/csv.py:69 +#: netbox/utilities/forms/fields/csv.py:69 #, python-brace-format msgid "\"{field_name}\" is an invalid accessor field name." msgstr "\"{field_name}\" є недійсним ім'ям поля доступу." -#: utilities/forms/fields/csv.py:101 +#: netbox/utilities/forms/fields/csv.py:101 msgid "Object type must be specified as \".\"" msgstr "Тип об'єкта повинен бути вказаний як \".\"" -#: utilities/forms/fields/csv.py:105 +#: netbox/utilities/forms/fields/csv.py:105 msgid "Invalid object type" msgstr "Невірний тип об'єкта" -#: utilities/forms/fields/expandable.py:25 +#: netbox/utilities/forms/fields/expandable.py:25 msgid "" "Alphanumeric ranges are supported for bulk creation. Mixed cases and types " "within a single range are not supported (example: " @@ -14279,17 +15115,17 @@ msgid "" msgstr "" "Буквено-цифрові діапазони підтримуються для масового створення. Змішані " "відмінки і типи в межах одного діапазону не підтримуються (приклад: " -"[Ге, хе] -0/0/ [0-9])." +"[ge,xe]-0/0/[0-9])." -#: utilities/forms/fields/expandable.py:46 +#: netbox/utilities/forms/fields/expandable.py:46 msgid "" "Specify a numeric range to create multiple IPs.
    Example: " "192.0.2.[1,5,100-254]/24" msgstr "" "Вкажіть числовий діапазон для створення декількох IP-адрес.
    Приклад: " -"192.0.2. [1,5100-254] /24" +"192.0.2.[1,5,100-254]/24" -#: utilities/forms/fields/fields.py:31 +#: netbox/utilities/forms/fields/fields.py:31 #, python-brace-format msgid "" " Підтримується синтаксис Markdown " -#: utilities/forms/fields/fields.py:48 +#: netbox/utilities/forms/fields/fields.py:48 msgid "URL-friendly unique shorthand" msgstr "Унікальна скорочення, зручна для URL-адреси" -#: utilities/forms/fields/fields.py:101 +#: netbox/utilities/forms/fields/fields.py:101 msgid "Enter context data in JSON format." msgstr "Введіть контекстні дані в JSON формат." -#: utilities/forms/fields/fields.py:124 +#: netbox/utilities/forms/fields/fields.py:124 msgid "MAC address must be in EUI-48 format" msgstr "MAC-адреса повинна бути у форматі EUI-48" -#: utilities/forms/forms.py:52 +#: netbox/utilities/forms/forms.py:52 msgid "Use regular expressions" msgstr "Використання регулярних виразів" -#: utilities/forms/forms.py:75 +#: netbox/utilities/forms/forms.py:75 msgid "" "Numeric ID of an existing object to update (if not creating a new object)" msgstr "" "Числовий ідентифікатор існуючого об'єкта для оновлення (якщо не створюється " "новий об'єкт)" -#: utilities/forms/forms.py:92 +#: netbox/utilities/forms/forms.py:92 #, python-brace-format msgid "Unrecognized header: {name}" msgstr "Нерозпізнаний заголовок: {name}" -#: utilities/forms/forms.py:118 +#: netbox/utilities/forms/forms.py:118 msgid "Available Columns" -msgstr "Доступні колонки" +msgstr "Доступні стовпці" -#: utilities/forms/forms.py:126 +#: netbox/utilities/forms/forms.py:126 msgid "Selected Columns" msgstr "Вибрані стовпці" -#: utilities/forms/mixins.py:44 +#: netbox/utilities/forms/mixins.py:44 msgid "" "This object has been modified since the form was rendered. Please consult " "the object's change log for details." @@ -14342,13 +15178,13 @@ msgstr "" "Цей об'єкт був змінений з моменту візуалізації форми. Будь ласка, зверніться" " до журналу змін об'єкта для отримання детальної інформації." -#: utilities/forms/utils.py:42 utilities/forms/utils.py:68 -#: utilities/forms/utils.py:85 utilities/forms/utils.py:87 +#: netbox/utilities/forms/utils.py:42 netbox/utilities/forms/utils.py:68 +#: netbox/utilities/forms/utils.py:85 netbox/utilities/forms/utils.py:87 #, python-brace-format msgid "Range \"{value}\" is invalid." msgstr "Діапазон \"{value}\" є невірним." -#: utilities/forms/utils.py:74 +#: netbox/utilities/forms/utils.py:74 #, python-brace-format msgid "" "Invalid range: Ending value ({end}) must be greater than beginning value " @@ -14357,70 +15193,71 @@ msgstr "" "Невірний діапазон: Кінцеве значення ({end}) має бути більше початкового " "значення ({begin})." -#: utilities/forms/utils.py:232 +#: netbox/utilities/forms/utils.py:232 #, python-brace-format msgid "Duplicate or conflicting column header for \"{field}\"" msgstr "Дублювання або конфлікт заголовка стовпця для \"{field}\"" -#: utilities/forms/utils.py:238 +#: netbox/utilities/forms/utils.py:238 #, python-brace-format msgid "Duplicate or conflicting column header for \"{header}\"" msgstr "Дублювання або конфлікт заголовка стовпця для \"{header}\"" -#: utilities/forms/utils.py:247 +#: netbox/utilities/forms/utils.py:247 #, python-brace-format msgid "Row {row}: Expected {count_expected} columns but found {count_found}" msgstr "" "Ряд {row}: Очікується {count_expected} стовпці, але знайдено {count_found}" -#: utilities/forms/utils.py:270 +#: netbox/utilities/forms/utils.py:270 #, python-brace-format msgid "Unexpected column header \"{field}\" found." msgstr "Знайдено несподіваний заголовок стовпця \"{field}\"." -#: utilities/forms/utils.py:272 +#: netbox/utilities/forms/utils.py:272 #, python-brace-format msgid "Column \"{field}\" is not a related object; cannot use dots" msgstr "" -"Колонка \"{field}\" не є спорідненим об'єктом; не може використовувати точки" +"Стовпчик \"{field}\" не є спорідненим об'єктом; не може використовувати " +"точки" -#: utilities/forms/utils.py:276 +#: netbox/utilities/forms/utils.py:276 #, python-brace-format msgid "Invalid related object attribute for column \"{field}\": {to_field}" msgstr "Невірний атрибут пов'язаного об'єкта для стовпця \"{field}\": {to_field}" -#: utilities/forms/utils.py:284 +#: netbox/utilities/forms/utils.py:284 #, python-brace-format msgid "Required column header \"{header}\" not found." msgstr "Не знайдено необхідний заголовок стовпця \"{header}\"." -#: utilities/forms/widgets/apiselect.py:124 +#: netbox/utilities/forms/widgets/apiselect.py:124 #, python-brace-format msgid "Missing required value for dynamic query param: '{dynamic_params}'" msgstr "" "Відсутнє необхідне значення для параметра динамічного запиту: " "'{dynamic_params}'" -#: utilities/forms/widgets/apiselect.py:141 +#: netbox/utilities/forms/widgets/apiselect.py:141 #, python-brace-format msgid "Missing required value for static query param: '{static_params}'" msgstr "" "Відсутнє необхідне значення для параметра статичного запиту: " "'{static_params}'" -#: utilities/password_validation.py:13 +#: netbox/utilities/password_validation.py:13 msgid "Password must have at least one numeral." msgstr "Пароль повинен мати хоча б одну цифру." -#: utilities/password_validation.py:18 +#: netbox/utilities/password_validation.py:18 msgid "Password must have at least one uppercase letter." msgstr "Пароль повинен мати хоча б одну велику літеру." -#: utilities/password_validation.py:23 +#: netbox/utilities/password_validation.py:23 msgid "Password must have at least one lowercase letter." msgstr "Пароль повинен мати хоча б одну малу літеру." -#: utilities/password_validation.py:27 +#: netbox/utilities/password_validation.py:27 msgid "" "Your password must contain at least one numeral, one uppercase letter and " "one lowercase letter." @@ -14428,7 +15265,7 @@ msgstr "" "Ваш пароль повинен містити принаймні одну цифру, одну велику літеру та одну " "малу літеру." -#: utilities/permissions.py:42 +#: netbox/utilities/permissions.py:42 #, python-brace-format msgid "" "Invalid permission name: {name}. Must be in the format " @@ -14437,126 +15274,126 @@ msgstr "" "Невірна назва дозволу: {name}. Повинен бути у форматі " "._" -#: utilities/permissions.py:60 +#: netbox/utilities/permissions.py:60 #, python-brace-format msgid "Unknown app_label/model_name for {name}" msgstr "Невідома мітка_додатка/назва_моделі для {name}" -#: utilities/request.py:76 +#: netbox/utilities/request.py:76 #, python-brace-format msgid "Invalid IP address set for {header}: {ip}" msgstr "Невірна IP-адреса, встановлена для {header}: {ip}" -#: utilities/tables.py:47 +#: netbox/utilities/tables.py:47 #, python-brace-format msgid "A column named {name} is already defined for table {table_name}" msgstr "Стовпчик з назвою {name} вже визначено для таблиці {table_name}" -#: utilities/templates/builtins/customfield_value.html:30 +#: netbox/utilities/templates/builtins/customfield_value.html:30 msgid "Not defined" msgstr "Не визначено" -#: utilities/templates/buttons/bookmark.html:9 +#: netbox/utilities/templates/buttons/bookmark.html:9 msgid "Unbookmark" msgstr "Зняти закладку" -#: utilities/templates/buttons/bookmark.html:13 +#: netbox/utilities/templates/buttons/bookmark.html:13 msgid "Bookmark" msgstr "Закладка" -#: utilities/templates/buttons/clone.html:4 +#: netbox/utilities/templates/buttons/clone.html:4 msgid "Clone" msgstr "Клонувати" -#: utilities/templates/buttons/export.html:7 +#: netbox/utilities/templates/buttons/export.html:7 msgid "Current View" msgstr "Поточний вид" -#: utilities/templates/buttons/export.html:8 +#: netbox/utilities/templates/buttons/export.html:8 msgid "All Data" msgstr "Всі дані" -#: utilities/templates/buttons/export.html:28 +#: netbox/utilities/templates/buttons/export.html:28 msgid "Add export template" msgstr "Додати шаблон експорту" -#: utilities/templates/buttons/import.html:4 +#: netbox/utilities/templates/buttons/import.html:4 msgid "Import" msgstr "Імпорт" -#: utilities/templates/buttons/subscribe.html:10 +#: netbox/utilities/templates/buttons/subscribe.html:10 msgid "Unsubscribe" msgstr "Відписатися" -#: utilities/templates/buttons/subscribe.html:14 +#: netbox/utilities/templates/buttons/subscribe.html:14 msgid "Subscribe" msgstr "Підписатися" -#: utilities/templates/form_helpers/render_field.html:41 +#: netbox/utilities/templates/form_helpers/render_field.html:41 msgid "Copy to clipboard" msgstr "Копіювати в буфер обміну" -#: utilities/templates/form_helpers/render_field.html:57 +#: netbox/utilities/templates/form_helpers/render_field.html:57 msgid "This field is required" -msgstr "Це поле обов'язкове для заповнення" +msgstr "Це обов'язкове поле для заповнення" -#: utilities/templates/form_helpers/render_field.html:70 +#: netbox/utilities/templates/form_helpers/render_field.html:70 msgid "Set Null" -msgstr "Встановити нуль" +msgstr "Встановити нуль (Null)" -#: utilities/templates/helpers/applied_filters.html:11 +#: netbox/utilities/templates/helpers/applied_filters.html:11 msgid "Clear all" msgstr "Очистити все" -#: utilities/templates/helpers/table_config_form.html:8 +#: netbox/utilities/templates/helpers/table_config_form.html:8 msgid "Table Configuration" msgstr "Налаштування таблиці" -#: utilities/templates/helpers/table_config_form.html:31 +#: netbox/utilities/templates/helpers/table_config_form.html:31 msgid "Move Up" -msgstr "Рухатися вгору" +msgstr "Рухати угору" -#: utilities/templates/helpers/table_config_form.html:34 +#: netbox/utilities/templates/helpers/table_config_form.html:34 msgid "Move Down" -msgstr "Рухатися вниз" +msgstr "Рухати вниз" -#: utilities/templates/navigation/menu.html:14 +#: netbox/utilities/templates/navigation/menu.html:14 msgid "Search…" -msgstr "Пошук..." +msgstr "Пошук…" -#: utilities/templates/navigation/menu.html:14 +#: netbox/utilities/templates/navigation/menu.html:14 msgid "Search NetBox" msgstr "Пошук у NetBox" -#: utilities/templates/widgets/apiselect.html:7 +#: netbox/utilities/templates/widgets/apiselect.html:7 msgid "Open selector" msgstr "Відкрити селектор" -#: utilities/templates/widgets/markdown_input.html:6 +#: netbox/utilities/templates/widgets/markdown_input.html:6 msgid "Write" msgstr "Написати" -#: utilities/testing/views.py:632 +#: netbox/utilities/testing/views.py:632 msgid "The test must define csv_update_data." msgstr "Тест повинен визначити csv_update_data." -#: utilities/validators.py:65 +#: netbox/utilities/validators.py:65 #, python-brace-format msgid "{value} is not a valid regular expression." msgstr "{value} не є дійсним регулярним виразом." -#: utilities/views.py:57 +#: netbox/utilities/views.py:57 #, python-brace-format msgid "{self.__class__.__name__} must implement get_required_permission()" msgstr "" "{self.__class__.__name__} повинен реалізувати get_required_permissions ()" -#: utilities/views.py:93 +#: netbox/utilities/views.py:93 #, python-brace-format msgid "{class_name} must implement get_required_permission()" -msgstr "{class_name} повинен реалізувати get_required_permissions ()" +msgstr "{class_name} повинен реалізувати get_required_permissions()" -#: utilities/views.py:117 +#: netbox/utilities/views.py:117 #, python-brace-format msgid "" "{class_name} has no queryset defined. ObjectPermissionRequiredMixin may only" @@ -14566,61 +15403,63 @@ msgstr "" "ObjectPermissionRequiredMixin можна використовувати лише у представленнях, " "які визначають базовий набір запитів" -#: virtualization/filtersets.py:79 +#: netbox/virtualization/filtersets.py:79 msgid "Parent group (ID)" msgstr "Батьківська група (ідентифікатор)" -#: virtualization/filtersets.py:85 +#: netbox/virtualization/filtersets.py:85 msgid "Parent group (slug)" -msgstr "Батьківська група (скоречення)" +msgstr "Батьківська група (скорочення)" -#: virtualization/filtersets.py:89 virtualization/filtersets.py:141 +#: netbox/virtualization/filtersets.py:89 +#: netbox/virtualization/filtersets.py:141 msgid "Cluster type (ID)" msgstr "Тип кластера (ідентифікатор)" -#: virtualization/filtersets.py:151 virtualization/filtersets.py:271 +#: netbox/virtualization/filtersets.py:151 +#: netbox/virtualization/filtersets.py:271 msgid "Cluster (ID)" msgstr "Кластер (ідентифікатор)" -#: virtualization/forms/bulk_edit.py:166 -#: virtualization/models/virtualmachines.py:115 +#: netbox/virtualization/forms/bulk_edit.py:166 +#: netbox/virtualization/models/virtualmachines.py:115 msgid "vCPUs" msgstr "vCPU" -#: virtualization/forms/bulk_edit.py:170 +#: netbox/virtualization/forms/bulk_edit.py:170 msgid "Memory (MB)" msgstr "Пам'ять (МБ)" -#: virtualization/forms/bulk_edit.py:174 -msgid "Disk (GB)" -msgstr "Диск (ГБ)" +#: netbox/virtualization/forms/bulk_edit.py:174 +msgid "Disk (MB)" +msgstr "Диск (МБ)" -#: virtualization/forms/bulk_edit.py:334 -#: virtualization/forms/filtersets.py:251 -msgid "Size (GB)" -msgstr "Розмір (ГБ)" +#: netbox/virtualization/forms/bulk_edit.py:334 +#: netbox/virtualization/forms/filtersets.py:251 +msgid "Size (MB)" +msgstr "Розмір (МБ)" -#: virtualization/forms/bulk_import.py:44 +#: netbox/virtualization/forms/bulk_import.py:44 msgid "Type of cluster" msgstr "Тип кластера" -#: virtualization/forms/bulk_import.py:51 +#: netbox/virtualization/forms/bulk_import.py:51 msgid "Assigned cluster group" msgstr "Призначена група кластерів" -#: virtualization/forms/bulk_import.py:96 +#: netbox/virtualization/forms/bulk_import.py:96 msgid "Assigned cluster" msgstr "Призначений кластер" -#: virtualization/forms/bulk_import.py:103 +#: netbox/virtualization/forms/bulk_import.py:103 msgid "Assigned device within cluster" msgstr "Призначений пристрій у кластері" -#: virtualization/forms/filtersets.py:183 +#: netbox/virtualization/forms/filtersets.py:183 msgid "Serial number" msgstr "Серійний номер" -#: virtualization/forms/model_forms.py:153 +#: netbox/virtualization/forms/model_forms.py:153 #, python-brace-format msgid "" "{device} belongs to a different site ({device_site}) than the cluster " @@ -14629,52 +15468,52 @@ msgstr "" "{device} належить до іншого тех. майданчику ({device_site}) ніж кластер " "({cluster_site})" -#: virtualization/forms/model_forms.py:192 +#: netbox/virtualization/forms/model_forms.py:192 msgid "Optionally pin this VM to a specific host device within the cluster" msgstr "" "За бажанням прикріпити цю віртуальну машину до певного хост-пристрою в " "кластері" -#: virtualization/forms/model_forms.py:221 +#: netbox/virtualization/forms/model_forms.py:221 msgid "Site/Cluster" msgstr "Тех. майданчик/Кластер" -#: virtualization/forms/model_forms.py:244 +#: netbox/virtualization/forms/model_forms.py:244 msgid "Disk size is managed via the attachment of virtual disks." msgstr "" "Управління розміром диска здійснюється за допомогою приєднання віртуальних " "дисків." -#: virtualization/forms/model_forms.py:372 -#: virtualization/tables/virtualmachines.py:111 +#: netbox/virtualization/forms/model_forms.py:372 +#: netbox/virtualization/tables/virtualmachines.py:111 msgid "Disk" msgstr "Диск" -#: virtualization/models/clusters.py:25 +#: netbox/virtualization/models/clusters.py:25 msgid "cluster type" msgstr "тип кластера" -#: virtualization/models/clusters.py:26 +#: netbox/virtualization/models/clusters.py:26 msgid "cluster types" msgstr "типи кластерів" -#: virtualization/models/clusters.py:45 +#: netbox/virtualization/models/clusters.py:45 msgid "cluster group" msgstr "кластерна група" -#: virtualization/models/clusters.py:46 +#: netbox/virtualization/models/clusters.py:46 msgid "cluster groups" msgstr "кластерні групи" -#: virtualization/models/clusters.py:121 +#: netbox/virtualization/models/clusters.py:121 msgid "cluster" msgstr "кластер" -#: virtualization/models/clusters.py:122 +#: netbox/virtualization/models/clusters.py:122 msgid "clusters" msgstr "кластери" -#: virtualization/models/clusters.py:141 +#: netbox/virtualization/models/clusters.py:141 #, python-brace-format msgid "" "{count} devices are assigned as hosts for this cluster but are not in site " @@ -14683,51 +15522,51 @@ msgstr "" "{count} пристрої призначені як хости для цього кластера, але не знаходяться " "на тех. майданчику{site}" -#: virtualization/models/virtualmachines.py:123 +#: netbox/virtualization/models/virtualmachines.py:123 msgid "memory (MB)" msgstr "пам'ять (МБ)" -#: virtualization/models/virtualmachines.py:128 +#: netbox/virtualization/models/virtualmachines.py:128 msgid "disk (MB)" msgstr "диск (МБ)" -#: virtualization/models/virtualmachines.py:166 +#: netbox/virtualization/models/virtualmachines.py:166 msgid "Virtual machine name must be unique per cluster." msgstr "Ім'я віртуальної машини має бути унікальним для кожного кластера." -#: virtualization/models/virtualmachines.py:169 +#: netbox/virtualization/models/virtualmachines.py:169 msgid "virtual machine" msgstr "віртуальна машина" -#: virtualization/models/virtualmachines.py:170 +#: netbox/virtualization/models/virtualmachines.py:170 msgid "virtual machines" msgstr "віртуальні машини" -#: virtualization/models/virtualmachines.py:184 +#: netbox/virtualization/models/virtualmachines.py:184 msgid "A virtual machine must be assigned to a site and/or cluster." msgstr "" "Віртуальна машина повинна бути призначена для тех. майданчику та/або " "кластеру." -#: virtualization/models/virtualmachines.py:191 +#: netbox/virtualization/models/virtualmachines.py:191 #, python-brace-format msgid "" "The selected cluster ({cluster}) is not assigned to this site ({site})." msgstr "" "Вибраний кластер ({cluster}) не присвоюється цьому тех. майданчику ({site})." -#: virtualization/models/virtualmachines.py:198 +#: netbox/virtualization/models/virtualmachines.py:198 msgid "Must specify a cluster when assigning a host device." msgstr "Необхідно вказати кластер при призначенні хост-пристрою." -#: virtualization/models/virtualmachines.py:203 +#: netbox/virtualization/models/virtualmachines.py:203 #, python-brace-format msgid "" "The selected device ({device}) is not assigned to this cluster ({cluster})." msgstr "" "Обраний пристрій ({device}) не присвоюється цьому кластеру ({cluster})." -#: virtualization/models/virtualmachines.py:215 +#: netbox/virtualization/models/virtualmachines.py:215 #, python-brace-format msgid "" "The specified disk size ({size}) must match the aggregate size of assigned " @@ -14736,17 +15575,17 @@ msgstr "" "Зазначений розмір диска ({size}) повинен відповідати сукупному розміру " "призначених віртуальних дисків ({total_size})." -#: virtualization/models/virtualmachines.py:229 +#: netbox/virtualization/models/virtualmachines.py:229 #, python-brace-format msgid "Must be an IPv{family} address. ({ip} is an IPv{version} address.)" -msgstr "Повинен бути IPV{family} адреса. ({ip} є IPV{version} адреса.)" +msgstr "Повинен бути IPv{family} адреса. ({ip} є IPv{version} адреса.)" -#: virtualization/models/virtualmachines.py:238 +#: netbox/virtualization/models/virtualmachines.py:238 #, python-brace-format msgid "The specified IP address ({ip}) is not assigned to this VM." msgstr "Зазначена IP-адреса ({ip}) не присвоюється цієї віртуальній машині." -#: virtualization/models/virtualmachines.py:396 +#: netbox/virtualization/models/virtualmachines.py:396 #, python-brace-format msgid "" "The selected parent interface ({parent}) belongs to a different virtual " @@ -14755,7 +15594,7 @@ msgstr "" "Вибраний батьківський інтерфейс ({parent}) належить до іншої віртуальної " "машини ({virtual_machine})." -#: virtualization/models/virtualmachines.py:411 +#: netbox/virtualization/models/virtualmachines.py:411 #, python-brace-format msgid "" "The selected bridge interface ({bridge}) belongs to a different virtual " @@ -14764,7 +15603,7 @@ msgstr "" "Вибраний інтерфейс моста ({bridge}) належить до іншої віртуальної машини " "({virtual_machine})." -#: virtualization/models/virtualmachines.py:422 +#: netbox/virtualization/models/virtualmachines.py:422 #, python-brace-format msgid "" "The untagged VLAN ({untagged_vlan}) must belong to the same site as the " @@ -14774,581 +15613,613 @@ msgstr "" " і батьківська віртуальна машина інтерфейсу, або ж вона повинна бути " "глобальною." -#: virtualization/models/virtualmachines.py:434 +#: netbox/virtualization/models/virtualmachines.py:434 msgid "size (MB)" msgstr "розмір (МБ)" -#: virtualization/models/virtualmachines.py:438 +#: netbox/virtualization/models/virtualmachines.py:438 msgid "virtual disk" msgstr "віртуальний диск" -#: virtualization/models/virtualmachines.py:439 +#: netbox/virtualization/models/virtualmachines.py:439 msgid "virtual disks" msgstr "віртуальні диски" -#: virtualization/views.py:275 +#: netbox/virtualization/views.py:273 #, python-brace-format msgid "Added {count} devices to cluster {cluster}" -msgstr "Додано {count} пристрої для кластеризації {cluster}" +msgstr "Додано {count} пристроїв для кластеризації {cluster}" -#: virtualization/views.py:310 +#: netbox/virtualization/views.py:308 #, python-brace-format msgid "Removed {count} devices from cluster {cluster}" -msgstr "Вилучено {count} пристрої з кластера {cluster}" +msgstr "Вилучено {count} пристроїв з кластера {cluster}" -#: vpn/choices.py:31 +#: netbox/vpn/choices.py:35 msgid "IPsec - Transport" msgstr "IPsec - Транспорт" -#: vpn/choices.py:32 +#: netbox/vpn/choices.py:36 msgid "IPsec - Tunnel" msgstr "IPsec - тунель" -#: vpn/choices.py:33 +#: netbox/vpn/choices.py:37 msgid "IP-in-IP" -msgstr "IP-адреси в IP" +msgstr "IP-в-IP" -#: vpn/choices.py:34 +#: netbox/vpn/choices.py:38 msgid "GRE" -msgstr "ГРЕ" +msgstr "GRE" -#: vpn/choices.py:56 +#: netbox/vpn/choices.py:39 +msgid "WireGuard" +msgstr "" + +#: netbox/vpn/choices.py:40 +msgid "OpenVPN" +msgstr "" + +#: netbox/vpn/choices.py:41 +msgid "L2TP" +msgstr "" + +#: netbox/vpn/choices.py:42 +msgid "PPTP" +msgstr "" + +#: netbox/vpn/choices.py:64 msgid "Hub" msgstr "Хаб" -#: vpn/choices.py:57 +#: netbox/vpn/choices.py:65 msgid "Spoke" -msgstr "говорив" +msgstr "Спиця (в колесі)" -#: vpn/choices.py:80 +#: netbox/vpn/choices.py:88 msgid "Aggressive" -msgstr "Агресивний" +msgstr "Агресивно" -#: vpn/choices.py:81 +#: netbox/vpn/choices.py:89 msgid "Main" msgstr "Головний" -#: vpn/choices.py:92 +#: netbox/vpn/choices.py:100 msgid "Pre-shared keys" msgstr "Попередньо спільні ключі" -#: vpn/choices.py:93 +#: netbox/vpn/choices.py:101 msgid "Certificates" msgstr "Сертифікати" -#: vpn/choices.py:94 +#: netbox/vpn/choices.py:102 msgid "RSA signatures" msgstr "Підписи RSA" -#: vpn/choices.py:95 +#: netbox/vpn/choices.py:103 msgid "DSA signatures" msgstr "Підписи DSA" -#: vpn/choices.py:178 vpn/choices.py:179 vpn/choices.py:180 vpn/choices.py:181 -#: vpn/choices.py:182 vpn/choices.py:183 vpn/choices.py:184 vpn/choices.py:185 -#: vpn/choices.py:186 vpn/choices.py:187 vpn/choices.py:188 vpn/choices.py:189 -#: vpn/choices.py:190 vpn/choices.py:191 vpn/choices.py:192 vpn/choices.py:193 -#: vpn/choices.py:194 vpn/choices.py:195 vpn/choices.py:196 vpn/choices.py:197 -#: vpn/choices.py:198 vpn/choices.py:199 vpn/choices.py:200 vpn/choices.py:201 +#: netbox/vpn/choices.py:186 netbox/vpn/choices.py:187 +#: netbox/vpn/choices.py:188 netbox/vpn/choices.py:189 +#: netbox/vpn/choices.py:190 netbox/vpn/choices.py:191 +#: netbox/vpn/choices.py:192 netbox/vpn/choices.py:193 +#: netbox/vpn/choices.py:194 netbox/vpn/choices.py:195 +#: netbox/vpn/choices.py:196 netbox/vpn/choices.py:197 +#: netbox/vpn/choices.py:198 netbox/vpn/choices.py:199 +#: netbox/vpn/choices.py:200 netbox/vpn/choices.py:201 +#: netbox/vpn/choices.py:202 netbox/vpn/choices.py:203 +#: netbox/vpn/choices.py:204 netbox/vpn/choices.py:205 +#: netbox/vpn/choices.py:206 netbox/vpn/choices.py:207 +#: netbox/vpn/choices.py:208 netbox/vpn/choices.py:209 #, python-brace-format msgid "Group {n}" msgstr "Група {n}" -#: vpn/choices.py:243 +#: netbox/vpn/choices.py:251 msgid "Ethernet Private LAN" msgstr "Приватна мережа Ethernet" -#: vpn/choices.py:244 +#: netbox/vpn/choices.py:252 msgid "Ethernet Virtual Private LAN" msgstr "Віртуальна приватна локальна мережа Ethernet" -#: vpn/choices.py:247 +#: netbox/vpn/choices.py:255 msgid "Ethernet Private Tree" msgstr "Приватне дерево Ethernet" -#: vpn/choices.py:248 +#: netbox/vpn/choices.py:256 msgid "Ethernet Virtual Private Tree" msgstr "Віртуальне приватне дерево Ethernet" -#: vpn/filtersets.py:41 +#: netbox/vpn/filtersets.py:41 msgid "Tunnel group (ID)" msgstr "Тунельна група (ідентифікатор)" -#: vpn/filtersets.py:47 +#: netbox/vpn/filtersets.py:47 msgid "Tunnel group (slug)" -msgstr "Тунельна група (скоречення)" +msgstr "Тунельна група (скорочення)" -#: vpn/filtersets.py:54 +#: netbox/vpn/filtersets.py:54 msgid "IPSec profile (ID)" msgstr "Профіль IPsec (ідентифікатор)" -#: vpn/filtersets.py:60 +#: netbox/vpn/filtersets.py:60 msgid "IPSec profile (name)" msgstr "Профіль IPsec (ім'я)" -#: vpn/filtersets.py:81 +#: netbox/vpn/filtersets.py:81 msgid "Tunnel (ID)" msgstr "Тунель (ідентифікатор)" -#: vpn/filtersets.py:87 +#: netbox/vpn/filtersets.py:87 msgid "Tunnel (name)" msgstr "Тунель (назва)" -#: vpn/filtersets.py:118 +#: netbox/vpn/filtersets.py:118 msgid "Outside IP (ID)" msgstr "Зовнішній IP (ідентифікатор)" -#: vpn/filtersets.py:130 vpn/filtersets.py:263 +#: netbox/vpn/filtersets.py:130 netbox/vpn/filtersets.py:263 msgid "IKE policy (ID)" msgstr "Політика IKE (ідентифікатор)" -#: vpn/filtersets.py:136 vpn/filtersets.py:269 +#: netbox/vpn/filtersets.py:136 netbox/vpn/filtersets.py:269 msgid "IKE policy (name)" msgstr "Політика IKE (назва)" -#: vpn/filtersets.py:200 vpn/filtersets.py:273 +#: netbox/vpn/filtersets.py:200 netbox/vpn/filtersets.py:273 msgid "IPSec policy (ID)" msgstr "Політика IPsec (ідентифікатор)" -#: vpn/filtersets.py:206 vpn/filtersets.py:279 +#: netbox/vpn/filtersets.py:206 netbox/vpn/filtersets.py:279 msgid "IPSec policy (name)" msgstr "Політика IPsec (назва)" -#: vpn/filtersets.py:348 +#: netbox/vpn/filtersets.py:348 msgid "L2VPN (slug)" -msgstr "L2VPN (скоречення)" +msgstr "L2VPN (скорочення)" -#: vpn/filtersets.py:412 +#: netbox/vpn/filtersets.py:412 msgid "VM Interface (ID)" msgstr "Інтерфейс віртуальної машини (ідентифікатор)" -#: vpn/filtersets.py:418 +#: netbox/vpn/filtersets.py:418 msgid "VLAN (name)" msgstr "VLAN (назва)" -#: vpn/forms/bulk_edit.py:45 vpn/forms/bulk_import.py:42 -#: vpn/forms/filtersets.py:54 +#: netbox/vpn/forms/bulk_edit.py:45 netbox/vpn/forms/bulk_import.py:42 +#: netbox/vpn/forms/filtersets.py:54 msgid "Tunnel group" msgstr "Тунельна група" -#: vpn/forms/bulk_edit.py:117 vpn/models/crypto.py:47 +#: netbox/vpn/forms/bulk_edit.py:117 netbox/vpn/models/crypto.py:47 msgid "SA lifetime" msgstr "Термін служби SA" -#: vpn/forms/bulk_edit.py:151 wireless/forms/bulk_edit.py:79 -#: wireless/forms/bulk_edit.py:126 wireless/forms/filtersets.py:64 -#: wireless/forms/filtersets.py:98 +#: netbox/vpn/forms/bulk_edit.py:151 netbox/wireless/forms/bulk_edit.py:79 +#: netbox/wireless/forms/bulk_edit.py:126 +#: netbox/wireless/forms/filtersets.py:64 +#: netbox/wireless/forms/filtersets.py:98 msgid "Pre-shared key" msgstr "Попередньо спільний ключ" -#: vpn/forms/bulk_edit.py:237 vpn/forms/bulk_import.py:239 -#: vpn/forms/filtersets.py:199 vpn/forms/model_forms.py:370 -#: vpn/models/crypto.py:104 +#: netbox/vpn/forms/bulk_edit.py:237 netbox/vpn/forms/bulk_import.py:239 +#: netbox/vpn/forms/filtersets.py:199 netbox/vpn/forms/model_forms.py:370 +#: netbox/vpn/models/crypto.py:104 msgid "IKE policy" msgstr "Політика IKE" -#: vpn/forms/bulk_edit.py:242 vpn/forms/bulk_import.py:244 -#: vpn/forms/filtersets.py:204 vpn/forms/model_forms.py:374 -#: vpn/models/crypto.py:209 +#: netbox/vpn/forms/bulk_edit.py:242 netbox/vpn/forms/bulk_import.py:244 +#: netbox/vpn/forms/filtersets.py:204 netbox/vpn/forms/model_forms.py:374 +#: netbox/vpn/models/crypto.py:209 msgid "IPSec policy" msgstr "Політика IPsec" -#: vpn/forms/bulk_import.py:50 +#: netbox/vpn/forms/bulk_import.py:50 msgid "Tunnel encapsulation" msgstr "Інкапсуляція тунелю" -#: vpn/forms/bulk_import.py:83 +#: netbox/vpn/forms/bulk_import.py:83 msgid "Operational role" msgstr "Операційна роль" -#: vpn/forms/bulk_import.py:90 +#: netbox/vpn/forms/bulk_import.py:90 msgid "Parent device of assigned interface" msgstr "Батьківський пристрій призначеного інтерфейсу" -#: vpn/forms/bulk_import.py:97 +#: netbox/vpn/forms/bulk_import.py:97 msgid "Parent VM of assigned interface" msgstr "Батьківська віртуальна машина призначеного інтерфейсу" -#: vpn/forms/bulk_import.py:104 +#: netbox/vpn/forms/bulk_import.py:104 msgid "Device or virtual machine interface" msgstr "Інтерфейс пристрою або віртуальної машини" -#: vpn/forms/bulk_import.py:183 +#: netbox/vpn/forms/bulk_import.py:183 msgid "IKE proposal(s)" -msgstr "Пропозиція (и) IKE" +msgstr "Пропозиція/iї IKE" -#: vpn/forms/bulk_import.py:215 vpn/models/crypto.py:197 +#: netbox/vpn/forms/bulk_import.py:215 netbox/vpn/models/crypto.py:197 msgid "Diffie-Hellman group for Perfect Forward Secrecy" -msgstr "Група Діффі-Хеллмана для «Ідеальна таємниця вперед»" +msgstr "Група Діффі-Хеллмана для Perfect Forward Secrecy" -#: vpn/forms/bulk_import.py:222 +#: netbox/vpn/forms/bulk_import.py:222 msgid "IPSec proposal(s)" -msgstr "Пропозиція (и) IPsec" +msgstr "Пропозиція/iї IPsec" -#: vpn/forms/bulk_import.py:236 +#: netbox/vpn/forms/bulk_import.py:236 msgid "IPSec protocol" msgstr "протокол IPsec" -#: vpn/forms/bulk_import.py:266 +#: netbox/vpn/forms/bulk_import.py:266 msgid "L2VPN type" msgstr "Тип L2VPN" -#: vpn/forms/bulk_import.py:287 +#: netbox/vpn/forms/bulk_import.py:287 msgid "Parent device (for interface)" msgstr "Батьківський пристрій (для інтерфейсу)" -#: vpn/forms/bulk_import.py:294 +#: netbox/vpn/forms/bulk_import.py:294 msgid "Parent virtual machine (for interface)" msgstr "Батьківська віртуальна машина (для інтерфейсу)" -#: vpn/forms/bulk_import.py:301 +#: netbox/vpn/forms/bulk_import.py:301 msgid "Assigned interface (device or VM)" msgstr "Призначений інтерфейс (пристрій або віртуальна машина)" -#: vpn/forms/bulk_import.py:334 +#: netbox/vpn/forms/bulk_import.py:334 msgid "Cannot import device and VM interface terminations simultaneously." msgstr "" "Не вдається імпортувати завершення інтерфейсу пристрою та віртуальної машини" " одночасно." -#: vpn/forms/bulk_import.py:336 +#: netbox/vpn/forms/bulk_import.py:336 msgid "Each termination must specify either an interface or a VLAN." msgstr "Кожне завершення повинно вказувати або інтерфейс, або VLAN." -#: vpn/forms/bulk_import.py:338 +#: netbox/vpn/forms/bulk_import.py:338 msgid "Cannot assign both an interface and a VLAN." msgstr "Не вдається призначити як інтерфейс, так і VLAN." -#: vpn/forms/filtersets.py:130 +#: netbox/vpn/forms/filtersets.py:130 msgid "IKE version" msgstr "Версія IKE" -#: vpn/forms/filtersets.py:142 vpn/forms/filtersets.py:175 -#: vpn/forms/model_forms.py:298 vpn/forms/model_forms.py:334 +#: netbox/vpn/forms/filtersets.py:142 netbox/vpn/forms/filtersets.py:175 +#: netbox/vpn/forms/model_forms.py:298 netbox/vpn/forms/model_forms.py:334 msgid "Proposal" msgstr "Пропозиція" -#: vpn/forms/filtersets.py:251 +#: netbox/vpn/forms/filtersets.py:251 msgid "Assigned Object Type" msgstr "Призначений тип об'єкта" -#: vpn/forms/model_forms.py:95 vpn/forms/model_forms.py:130 -#: vpn/forms/model_forms.py:240 vpn/tables/tunnels.py:91 +#: netbox/vpn/forms/model_forms.py:95 netbox/vpn/forms/model_forms.py:130 +#: netbox/vpn/forms/model_forms.py:240 netbox/vpn/tables/tunnels.py:91 msgid "Tunnel interface" msgstr "Інтерфейс тунелю" -#: vpn/forms/model_forms.py:150 +#: netbox/vpn/forms/model_forms.py:150 msgid "First Termination" -msgstr "Перше припинення" +msgstr "Перший кінець" -#: vpn/forms/model_forms.py:153 +#: netbox/vpn/forms/model_forms.py:153 msgid "Second Termination" -msgstr "Друге припинення" +msgstr "Другий кінець" -#: vpn/forms/model_forms.py:197 +#: netbox/vpn/forms/model_forms.py:197 msgid "This parameter is required when defining a termination." -msgstr "Цей параметр обов'язковий при визначенні закінчення." +msgstr "Цей параметр обов'язковий при визначенні кінця." -#: vpn/forms/model_forms.py:320 vpn/forms/model_forms.py:356 +#: netbox/vpn/forms/model_forms.py:320 netbox/vpn/forms/model_forms.py:356 msgid "Policy" msgstr "Політика" -#: vpn/forms/model_forms.py:487 +#: netbox/vpn/forms/model_forms.py:487 msgid "A termination must specify an interface or VLAN." -msgstr "Припинення повинно вказувати інтерфейс або VLAN." +msgstr "Кінець повинен підключатися до інтерфейсу або VLAN." -#: vpn/forms/model_forms.py:489 +#: netbox/vpn/forms/model_forms.py:489 msgid "" "A termination can only have one terminating object (an interface or VLAN)." -msgstr "" -"Термінування може мати лише один кінцевий об'єкт (інтерфейс або VLAN)." +msgstr "Кінець може мати лише один кінцевий об'єкт (інтерфейс або VLAN)." -#: vpn/models/crypto.py:33 +#: netbox/vpn/models/crypto.py:33 msgid "encryption algorithm" msgstr "алгоритм шифрування" -#: vpn/models/crypto.py:37 +#: netbox/vpn/models/crypto.py:37 msgid "authentication algorithm" msgstr "алгоритм аутентифікації" -#: vpn/models/crypto.py:44 +#: netbox/vpn/models/crypto.py:44 msgid "Diffie-Hellman group ID" msgstr "Ідентифікатор групи Діффі-Хеллмана" -#: vpn/models/crypto.py:50 +#: netbox/vpn/models/crypto.py:50 msgid "Security association lifetime (in seconds)" msgstr "Термін служби асоціації безпеки (в секундах)" -#: vpn/models/crypto.py:59 +#: netbox/vpn/models/crypto.py:59 msgid "IKE proposal" msgstr "Пропозиція IKE" -#: vpn/models/crypto.py:60 +#: netbox/vpn/models/crypto.py:60 msgid "IKE proposals" -msgstr "Пропозиції IKE" +msgstr "Налаштування IKE" -#: vpn/models/crypto.py:76 +#: netbox/vpn/models/crypto.py:76 msgid "version" msgstr "версія" -#: vpn/models/crypto.py:88 vpn/models/crypto.py:190 +#: netbox/vpn/models/crypto.py:88 netbox/vpn/models/crypto.py:190 msgid "proposals" -msgstr "пропозиції" +msgstr "налаштування" -#: vpn/models/crypto.py:91 wireless/models.py:39 +#: netbox/vpn/models/crypto.py:91 netbox/wireless/models.py:39 msgid "pre-shared key" msgstr "попередньо спільний ключ" -#: vpn/models/crypto.py:105 +#: netbox/vpn/models/crypto.py:105 msgid "IKE policies" msgstr "Політика IKE" -#: vpn/models/crypto.py:118 +#: netbox/vpn/models/crypto.py:118 msgid "Mode is required for selected IKE version" msgstr "Режим необхідний для вибраної версії IKE" -#: vpn/models/crypto.py:122 +#: netbox/vpn/models/crypto.py:122 msgid "Mode cannot be used for selected IKE version" msgstr "Режим не може бути використаний для вибраної версії IKE" -#: vpn/models/crypto.py:136 +#: netbox/vpn/models/crypto.py:136 msgid "encryption" msgstr "шифрування" -#: vpn/models/crypto.py:141 +#: netbox/vpn/models/crypto.py:141 msgid "authentication" msgstr "аутентифікація" -#: vpn/models/crypto.py:149 +#: netbox/vpn/models/crypto.py:149 msgid "Security association lifetime (seconds)" msgstr "Термін служби асоціації безпеки (секунди)" -#: vpn/models/crypto.py:155 +#: netbox/vpn/models/crypto.py:155 msgid "Security association lifetime (in kilobytes)" msgstr "Термін служби асоціації безпеки (в кілобайтах)" -#: vpn/models/crypto.py:164 +#: netbox/vpn/models/crypto.py:164 msgid "IPSec proposal" msgstr "Пропозиція IPsec" -#: vpn/models/crypto.py:165 +#: netbox/vpn/models/crypto.py:165 msgid "IPSec proposals" msgstr "Пропозиції IPsec" -#: vpn/models/crypto.py:178 +#: netbox/vpn/models/crypto.py:178 msgid "Encryption and/or authentication algorithm must be defined" msgstr "Необхідно визначити алгоритм шифрування та/або аутентифікації" -#: vpn/models/crypto.py:210 +#: netbox/vpn/models/crypto.py:210 msgid "IPSec policies" msgstr "Політики IPsec" -#: vpn/models/crypto.py:251 +#: netbox/vpn/models/crypto.py:251 msgid "IPSec profiles" msgstr "Профілі IPsec" -#: vpn/models/l2vpn.py:116 +#: netbox/vpn/models/l2vpn.py:116 msgid "L2VPN termination" -msgstr "Припинення L2VPN" +msgstr "Кінець L2VPN" -#: vpn/models/l2vpn.py:117 +#: netbox/vpn/models/l2vpn.py:117 msgid "L2VPN terminations" -msgstr "Термінації L2VPN" +msgstr "Кінці L2VPN" -#: vpn/models/l2vpn.py:135 +#: netbox/vpn/models/l2vpn.py:135 #, python-brace-format msgid "L2VPN Termination already assigned ({assigned_object})" -msgstr "Припинення L2VPN вже призначено ({assigned_object})" +msgstr "Кінець L2VPN вже призначено ({assigned_object})" -#: vpn/models/l2vpn.py:147 +#: netbox/vpn/models/l2vpn.py:147 #, python-brace-format msgid "" "{l2vpn_type} L2VPNs cannot have more than two terminations; found " "{terminations_count} already defined." msgstr "" -"{l2vpn_type} L2VPN не може мати більше двох термінів; знайдено " +"{l2vpn_type} L2VPN не може мати більше двох кінців; знайдено " "{terminations_count} вже визначено." -#: vpn/models/tunnels.py:26 +#: netbox/vpn/models/tunnels.py:26 msgid "tunnel group" msgstr "тунельна група" -#: vpn/models/tunnels.py:27 +#: netbox/vpn/models/tunnels.py:27 msgid "tunnel groups" msgstr "тунельні групи" -#: vpn/models/tunnels.py:53 +#: netbox/vpn/models/tunnels.py:53 msgid "encapsulation" msgstr "інкапсуляція" -#: vpn/models/tunnels.py:72 +#: netbox/vpn/models/tunnels.py:72 msgid "tunnel ID" msgstr "ідентифікатор тунелю" -#: vpn/models/tunnels.py:94 +#: netbox/vpn/models/tunnels.py:94 msgid "tunnel" msgstr "тунель" -#: vpn/models/tunnels.py:95 +#: netbox/vpn/models/tunnels.py:95 msgid "tunnels" msgstr "тунелі" -#: vpn/models/tunnels.py:153 +#: netbox/vpn/models/tunnels.py:153 msgid "An object may be terminated to only one tunnel at a time." -msgstr "Об'єкт може бути завершений лише в одному тунелі одночасно." +msgstr "Об'єкт може бути кінцем лише в одному тунелі одночасно." -#: vpn/models/tunnels.py:156 +#: netbox/vpn/models/tunnels.py:156 msgid "tunnel termination" -msgstr "закінчення тунелю" +msgstr "кинець тунелю" -#: vpn/models/tunnels.py:157 +#: netbox/vpn/models/tunnels.py:157 msgid "tunnel terminations" -msgstr "закінчення тунелів" +msgstr "кінці тунелів" -#: vpn/models/tunnels.py:174 +#: netbox/vpn/models/tunnels.py:174 #, python-brace-format msgid "{name} is already attached to a tunnel ({tunnel})." msgstr "{name} вже прикріплений до тунелю ({tunnel})." -#: vpn/tables/crypto.py:22 +#: netbox/vpn/tables/crypto.py:22 msgid "Authentication Method" msgstr "Метод аутентифікації" -#: vpn/tables/crypto.py:25 vpn/tables/crypto.py:97 +#: netbox/vpn/tables/crypto.py:25 netbox/vpn/tables/crypto.py:97 msgid "Encryption Algorithm" msgstr "Алгоритм шифрування" -#: vpn/tables/crypto.py:28 vpn/tables/crypto.py:100 +#: netbox/vpn/tables/crypto.py:28 netbox/vpn/tables/crypto.py:100 msgid "Authentication Algorithm" msgstr "Алгоритм аутентифікації" -#: vpn/tables/crypto.py:34 +#: netbox/vpn/tables/crypto.py:34 msgid "SA Lifetime" -msgstr "SA Термін служби" +msgstr "Тривалість життя SA" -#: vpn/tables/crypto.py:71 +#: netbox/vpn/tables/crypto.py:71 msgid "Pre-shared Key" msgstr "Попередньо спільний ключ" -#: vpn/tables/crypto.py:103 +#: netbox/vpn/tables/crypto.py:103 msgid "SA Lifetime (Seconds)" -msgstr "Термін служби SA (секунди)" +msgstr "Тривалість життя SA (секунди)" -#: vpn/tables/crypto.py:106 +#: netbox/vpn/tables/crypto.py:106 msgid "SA Lifetime (KB)" -msgstr "Термін служби SA (КБ)" +msgstr "Тривалість життя SA (КБ)" -#: vpn/tables/l2vpn.py:69 +#: netbox/vpn/tables/l2vpn.py:69 msgid "Object Parent" msgstr "Батьківський об'єкт" -#: vpn/tables/l2vpn.py:74 +#: netbox/vpn/tables/l2vpn.py:74 msgid "Object Site" -msgstr "Сайт об'єкта" +msgstr "Тех. майданчик об'єкта" -#: wireless/choices.py:11 +#: netbox/wireless/choices.py:11 msgid "Access point" msgstr "Точка доступу" -#: wireless/choices.py:12 +#: netbox/wireless/choices.py:12 msgid "Station" msgstr "Станція" -#: wireless/choices.py:467 +#: netbox/wireless/choices.py:467 msgid "Open" msgstr "Відкрита" -#: wireless/choices.py:469 +#: netbox/wireless/choices.py:469 msgid "WPA Personal (PSK)" msgstr "Персональний WPA (PSK)" -#: wireless/choices.py:470 +#: netbox/wireless/choices.py:470 msgid "WPA Enterprise" msgstr "WPA для підприємства" -#: wireless/forms/bulk_edit.py:73 wireless/forms/bulk_edit.py:120 -#: wireless/forms/bulk_import.py:68 wireless/forms/bulk_import.py:71 -#: wireless/forms/bulk_import.py:110 wireless/forms/bulk_import.py:113 -#: wireless/forms/filtersets.py:59 wireless/forms/filtersets.py:93 +#: netbox/wireless/forms/bulk_edit.py:73 +#: netbox/wireless/forms/bulk_edit.py:120 +#: netbox/wireless/forms/bulk_import.py:68 +#: netbox/wireless/forms/bulk_import.py:71 +#: netbox/wireless/forms/bulk_import.py:110 +#: netbox/wireless/forms/bulk_import.py:113 +#: netbox/wireless/forms/filtersets.py:59 +#: netbox/wireless/forms/filtersets.py:93 msgid "Authentication cipher" msgstr "Аутентифікаційний шифр" -#: wireless/forms/bulk_edit.py:134 wireless/forms/bulk_import.py:116 -#: wireless/forms/bulk_import.py:119 wireless/forms/filtersets.py:106 +#: 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 "Одиниця відстані" -#: wireless/forms/bulk_import.py:52 +#: netbox/wireless/forms/bulk_import.py:52 msgid "Bridged VLAN" msgstr "Мостові VLAN" -#: wireless/forms/bulk_import.py:89 wireless/tables/wirelesslink.py:28 +#: netbox/wireless/forms/bulk_import.py:89 +#: netbox/wireless/tables/wirelesslink.py:28 msgid "Interface A" msgstr "Інтерфейс A" -#: wireless/forms/bulk_import.py:93 wireless/tables/wirelesslink.py:37 +#: netbox/wireless/forms/bulk_import.py:93 +#: netbox/wireless/tables/wirelesslink.py:37 msgid "Interface B" -msgstr "Інтерфейс B" +msgstr "Інтерфейс Б" -#: wireless/forms/model_forms.py:161 +#: netbox/wireless/forms/model_forms.py:161 msgid "Side B" msgstr "Сторона Б" -#: wireless/models.py:31 +#: netbox/wireless/models.py:31 msgid "authentication cipher" msgstr "шифр аутентифікації" -#: wireless/models.py:69 +#: netbox/wireless/models.py:69 msgid "wireless LAN group" msgstr "група бездротової локальної мережі" -#: wireless/models.py:70 +#: netbox/wireless/models.py:70 msgid "wireless LAN groups" msgstr "групи бездротових локальних мереж" -#: wireless/models.py:116 +#: netbox/wireless/models.py:116 msgid "wireless LAN" msgstr "бездротова локальна мережа" -#: wireless/models.py:144 +#: netbox/wireless/models.py:144 msgid "interface A" msgstr "інтерфейс А" -#: wireless/models.py:151 +#: netbox/wireless/models.py:151 msgid "interface B" -msgstr "інтерфейс B" +msgstr "інтерфейс Б" -#: wireless/models.py:165 +#: netbox/wireless/models.py:165 msgid "distance" msgstr "відстань" -#: wireless/models.py:172 +#: netbox/wireless/models.py:172 msgid "distance unit" msgstr "одиниця відстані" -#: wireless/models.py:219 +#: netbox/wireless/models.py:219 msgid "wireless link" -msgstr "бездротова зв'язок" +msgstr "бездротовий канал зв'язок" -#: wireless/models.py:220 +#: netbox/wireless/models.py:220 msgid "wireless links" -msgstr "бездротові зв'язки" +msgstr "бездротові канали зв'язку" -#: wireless/models.py:236 +#: netbox/wireless/models.py:236 msgid "Must specify a unit when setting a wireless distance" -msgstr "Необхідно вказати одиницю виміру при установці бездротової відстані" +msgstr "" +"Необхідно вказати одиницю виміру при установці відстані бездротового каналу " +"зв'язку" -#: wireless/models.py:242 wireless/models.py:248 +#: netbox/wireless/models.py:242 netbox/wireless/models.py:248 #, python-brace-format msgid "{type} is not a wireless interface." msgstr "{type} не є бездротовим інтерфейсом." -#: wireless/utils.py:16 +#: netbox/wireless/utils.py:16 #, python-brace-format msgid "Invalid channel value: {channel}" msgstr "Невірне значення каналу: {channel}" -#: wireless/utils.py:26 +#: netbox/wireless/utils.py:26 #, python-brace-format msgid "Invalid channel attribute: {name}" msgstr "Невірний атрибут каналу: {name}" diff --git a/netbox/translations/zh/LC_MESSAGES/django.mo b/netbox/translations/zh/LC_MESSAGES/django.mo index 7affc8f55..52e676825 100644 Binary files a/netbox/translations/zh/LC_MESSAGES/django.mo and b/netbox/translations/zh/LC_MESSAGES/django.mo differ diff --git a/netbox/translations/zh/LC_MESSAGES/django.po b/netbox/translations/zh/LC_MESSAGES/django.po index 6e23f1aa9..c5d1f3032 100644 --- a/netbox/translations/zh/LC_MESSAGES/django.po +++ b/netbox/translations/zh/LC_MESSAGES/django.po @@ -21,7 +21,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-10-28 19:20+0000\n" +"POT-Creation-Date: 2024-12-12 05:02+0000\n" "PO-Revision-Date: 2023-10-30 17:48+0000\n" "Last-Translator: Jeremy Stretch, 2024\n" "Language-Team: Chinese (https://app.transifex.com/netbox-community/teams/178115/zh/)\n" @@ -31,5588 +31,6067 @@ msgstr "" "Language: zh\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: account/tables.py:27 templates/account/token.html:22 -#: templates/users/token.html:17 users/forms/bulk_import.py:39 -#: users/forms/model_forms.py:112 +#: netbox/account/tables.py:27 netbox/templates/account/token.html:22 +#: netbox/templates/users/token.html:17 netbox/users/forms/bulk_import.py:39 +#: netbox/users/forms/model_forms.py:112 msgid "Key" msgstr "令牌" -#: account/tables.py:31 users/forms/filtersets.py:132 +#: netbox/account/tables.py:31 netbox/users/forms/filtersets.py:132 msgid "Write Enabled" msgstr "可写" -#: account/tables.py:35 core/choices.py:86 core/tables/jobs.py:29 -#: core/tables/tasks.py:79 extras/tables/tables.py:335 -#: extras/tables/tables.py:566 templates/account/token.html:43 -#: templates/core/configrevision.html:26 -#: templates/core/configrevision_restore.html:12 templates/core/job.html:69 -#: templates/core/rq_task.html:16 templates/core/rq_task.html:73 -#: templates/core/rq_worker.html:14 -#: templates/extras/htmx/script_result.html:12 -#: templates/extras/journalentry.html:22 templates/generic/object.html:58 -#: templates/users/token.html:35 +#: netbox/account/tables.py:35 netbox/core/choices.py:86 +#: 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 +#: netbox/templates/core/configrevision.html:26 +#: netbox/templates/core/configrevision_restore.html:12 +#: netbox/templates/core/job.html:69 netbox/templates/core/rq_task.html:16 +#: netbox/templates/core/rq_task.html:73 +#: netbox/templates/core/rq_worker.html:14 +#: netbox/templates/extras/htmx/script_result.html:12 +#: netbox/templates/extras/journalentry.html:22 +#: netbox/templates/generic/object.html:58 +#: netbox/templates/users/token.html:35 msgid "Created" msgstr "已创建" -#: account/tables.py:39 templates/account/token.html:47 -#: templates/users/token.html:39 users/forms/bulk_edit.py:117 -#: users/forms/filtersets.py:136 +#: netbox/account/tables.py:39 netbox/templates/account/token.html:47 +#: netbox/templates/users/token.html:39 netbox/users/forms/bulk_edit.py:117 +#: netbox/users/forms/filtersets.py:136 msgid "Expires" msgstr "过期" -#: account/tables.py:42 users/forms/filtersets.py:141 +#: netbox/account/tables.py:42 netbox/users/forms/filtersets.py:141 msgid "Last Used" msgstr "最后使用" -#: account/tables.py:45 templates/account/token.html:55 -#: templates/users/token.html:47 users/forms/bulk_edit.py:122 -#: users/forms/model_forms.py:124 +#: netbox/account/tables.py:45 netbox/templates/account/token.html:55 +#: netbox/templates/users/token.html:47 netbox/users/forms/bulk_edit.py:122 +#: netbox/users/forms/model_forms.py:124 msgid "Allowed IPs" msgstr "允许的IP" -#: account/views.py:114 +#: netbox/account/views.py:114 #, python-brace-format msgid "Logged in as {user}." msgstr "以身份登录 {user}。" -#: account/views.py:164 +#: netbox/account/views.py:164 msgid "You have logged out." msgstr "您已注销。" -#: account/views.py:216 +#: netbox/account/views.py:216 msgid "Your preferences have been updated." msgstr "你的首选项已更新。" -#: account/views.py:239 +#: netbox/account/views.py:239 msgid "LDAP-authenticated user credentials cannot be changed within NetBox." msgstr "无法在 Netbox 中更改经过 LDAP 身份验证的用户凭据。" -#: account/views.py:254 +#: netbox/account/views.py:254 msgid "Your password has been changed successfully." msgstr "您的密码已成功更改。" -#: circuits/choices.py:21 dcim/choices.py:20 dcim/choices.py:102 -#: dcim/choices.py:185 dcim/choices.py:237 dcim/choices.py:1530 -#: dcim/choices.py:1606 dcim/choices.py:1656 virtualization/choices.py:20 -#: virtualization/choices.py:45 vpn/choices.py:18 +#: netbox/circuits/choices.py:21 netbox/dcim/choices.py:20 +#: netbox/dcim/choices.py:102 netbox/dcim/choices.py: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 msgid "Planned" msgstr "已规划" -#: circuits/choices.py:22 netbox/navigation/menu.py:305 +#: netbox/circuits/choices.py:22 netbox/netbox/navigation/menu.py:305 msgid "Provisioning" msgstr "置备" -#: circuits/choices.py:23 core/tables/tasks.py:22 dcim/choices.py:22 -#: dcim/choices.py:103 dcim/choices.py:184 dcim/choices.py:236 -#: dcim/choices.py:1605 dcim/choices.py:1655 extras/tables/tables.py:495 -#: ipam/choices.py:31 ipam/choices.py:49 ipam/choices.py:69 -#: ipam/choices.py:154 templates/extras/configcontext.html:25 -#: templates/users/user.html:37 users/forms/bulk_edit.py:38 -#: virtualization/choices.py:22 virtualization/choices.py:44 vpn/choices.py:19 -#: wireless/choices.py:25 +#: netbox/circuits/choices.py:23 netbox/core/tables/tasks.py:22 +#: netbox/dcim/choices.py:22 netbox/dcim/choices.py:103 +#: netbox/dcim/choices.py: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/templates/users/user.html:37 netbox/users/forms/bulk_edit.py:38 +#: netbox/virtualization/choices.py:22 netbox/virtualization/choices.py:44 +#: netbox/vpn/choices.py:19 netbox/wireless/choices.py:25 msgid "Active" msgstr "在线" -#: circuits/choices.py:24 dcim/choices.py:183 dcim/choices.py:235 -#: dcim/choices.py:1604 dcim/choices.py:1657 virtualization/choices.py:24 -#: virtualization/choices.py:43 +#: 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 msgid "Offline" msgstr "离线" -#: circuits/choices.py:25 +#: netbox/circuits/choices.py:25 msgid "Deprovisioning" msgstr "预留" -#: circuits/choices.py:26 +#: netbox/circuits/choices.py:26 msgid "Decommissioned" msgstr "退役" -#: circuits/choices.py:90 dcim/choices.py:1617 tenancy/choices.py:17 +#: netbox/circuits/choices.py:90 netbox/dcim/choices.py:1619 +#: netbox/tenancy/choices.py:17 msgid "Primary" msgstr "主要联系人" -#: circuits/choices.py:91 ipam/choices.py:90 tenancy/choices.py:18 +#: netbox/circuits/choices.py:91 netbox/ipam/choices.py:90 +#: netbox/tenancy/choices.py:18 msgid "Secondary" msgstr "次要联系人" -#: circuits/choices.py:92 tenancy/choices.py:19 +#: netbox/circuits/choices.py:92 netbox/tenancy/choices.py:19 msgid "Tertiary" msgstr "第三级联系人" -#: circuits/choices.py:93 tenancy/choices.py:20 +#: netbox/circuits/choices.py:93 netbox/tenancy/choices.py:20 msgid "Inactive" msgstr "已失效" -#: circuits/filtersets.py:31 circuits/filtersets.py:198 dcim/filtersets.py:98 -#: dcim/filtersets.py:152 dcim/filtersets.py:212 dcim/filtersets.py:333 -#: dcim/filtersets.py:464 dcim/filtersets.py:1021 dcim/filtersets.py:1368 -#: dcim/filtersets.py:1903 dcim/filtersets.py:2146 dcim/filtersets.py:2204 -#: ipam/filtersets.py:339 ipam/filtersets.py:959 -#: virtualization/filtersets.py:45 virtualization/filtersets.py:173 -#: vpn/filtersets.py:358 +#: 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:339 netbox/ipam/filtersets.py:959 +#: netbox/virtualization/filtersets.py:45 +#: netbox/virtualization/filtersets.py:173 netbox/vpn/filtersets.py:358 msgid "Region (ID)" msgstr "区域(ID)" -#: circuits/filtersets.py:38 circuits/filtersets.py:205 dcim/filtersets.py:105 -#: dcim/filtersets.py:158 dcim/filtersets.py:219 dcim/filtersets.py:340 -#: dcim/filtersets.py:471 dcim/filtersets.py:1028 dcim/filtersets.py:1375 -#: dcim/filtersets.py:1910 dcim/filtersets.py:2153 dcim/filtersets.py:2211 -#: extras/filtersets.py:509 ipam/filtersets.py:346 ipam/filtersets.py:966 -#: virtualization/filtersets.py:52 virtualization/filtersets.py:180 -#: vpn/filtersets.py:353 +#: 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:346 +#: netbox/ipam/filtersets.py:966 netbox/virtualization/filtersets.py:52 +#: netbox/virtualization/filtersets.py:180 netbox/vpn/filtersets.py:353 msgid "Region (slug)" msgstr "地区(缩写)" -#: circuits/filtersets.py:44 circuits/filtersets.py:211 dcim/filtersets.py:128 -#: dcim/filtersets.py:225 dcim/filtersets.py:346 dcim/filtersets.py:477 -#: dcim/filtersets.py:1034 dcim/filtersets.py:1381 dcim/filtersets.py:1916 -#: dcim/filtersets.py:2159 dcim/filtersets.py:2217 ipam/filtersets.py:352 -#: ipam/filtersets.py:972 virtualization/filtersets.py:58 -#: virtualization/filtersets.py:186 +#: 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:352 +#: netbox/ipam/filtersets.py:972 netbox/virtualization/filtersets.py:58 +#: netbox/virtualization/filtersets.py:186 msgid "Site group (ID)" msgstr "站点组(ID)" -#: circuits/filtersets.py:51 circuits/filtersets.py:218 dcim/filtersets.py:135 -#: dcim/filtersets.py:232 dcim/filtersets.py:353 dcim/filtersets.py:484 -#: dcim/filtersets.py:1041 dcim/filtersets.py:1388 dcim/filtersets.py:1923 -#: dcim/filtersets.py:2166 dcim/filtersets.py:2224 extras/filtersets.py:515 -#: ipam/filtersets.py:359 ipam/filtersets.py:979 -#: virtualization/filtersets.py:65 virtualization/filtersets.py:193 +#: 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:359 netbox/ipam/filtersets.py:979 +#: netbox/virtualization/filtersets.py:65 +#: netbox/virtualization/filtersets.py:193 msgid "Site group (slug)" msgstr "站点组(缩写)" -#: circuits/filtersets.py:56 circuits/forms/bulk_edit.py:188 -#: circuits/forms/bulk_edit.py:216 circuits/forms/bulk_import.py:124 -#: circuits/forms/filtersets.py:51 circuits/forms/filtersets.py:171 -#: circuits/forms/filtersets.py:209 circuits/forms/model_forms.py:138 -#: circuits/forms/model_forms.py:154 circuits/tables/circuits.py:113 -#: dcim/forms/bulk_edit.py:168 dcim/forms/bulk_edit.py:329 -#: dcim/forms/bulk_edit.py:677 dcim/forms/bulk_edit.py:873 -#: dcim/forms/bulk_import.py:131 dcim/forms/bulk_import.py:230 -#: dcim/forms/bulk_import.py:309 dcim/forms/bulk_import.py:540 -#: dcim/forms/bulk_import.py:1311 dcim/forms/bulk_import.py:1339 -#: dcim/forms/filtersets.py:87 dcim/forms/filtersets.py:225 -#: dcim/forms/filtersets.py:342 dcim/forms/filtersets.py:439 -#: dcim/forms/filtersets.py:753 dcim/forms/filtersets.py:997 -#: dcim/forms/filtersets.py:1021 dcim/forms/filtersets.py:1111 -#: dcim/forms/filtersets.py:1149 dcim/forms/filtersets.py:1584 -#: dcim/forms/filtersets.py:1608 dcim/forms/filtersets.py:1632 -#: dcim/forms/model_forms.py:137 dcim/forms/model_forms.py:165 -#: dcim/forms/model_forms.py:238 dcim/forms/model_forms.py:463 -#: dcim/forms/model_forms.py:723 dcim/forms/object_create.py:391 -#: dcim/tables/devices.py:153 dcim/tables/power.py:26 dcim/tables/power.py:93 -#: dcim/tables/racks.py:122 dcim/tables/racks.py:207 dcim/tables/sites.py:134 -#: extras/filtersets.py:525 ipam/forms/bulk_edit.py:218 -#: ipam/forms/bulk_edit.py:285 ipam/forms/bulk_edit.py:484 -#: ipam/forms/bulk_import.py:171 ipam/forms/bulk_import.py:429 -#: ipam/forms/filtersets.py:153 ipam/forms/filtersets.py:231 -#: ipam/forms/filtersets.py:432 ipam/forms/filtersets.py:489 -#: ipam/forms/model_forms.py:205 ipam/forms/model_forms.py:636 -#: ipam/tables/ip.py:245 ipam/tables/vlans.py:118 ipam/tables/vlans.py:221 -#: templates/circuits/inc/circuit_termination_fields.html:6 -#: templates/dcim/device.html:22 templates/dcim/inc/cable_termination.html:8 -#: templates/dcim/inc/cable_termination.html:33 -#: templates/dcim/location.html:37 templates/dcim/powerpanel.html:22 -#: templates/dcim/rack.html:20 templates/dcim/rackreservation.html:28 -#: templates/dcim/site.html:28 templates/ipam/prefix.html:56 -#: templates/ipam/vlan.html:23 templates/ipam/vlan_edit.html:40 -#: templates/virtualization/cluster.html:42 -#: templates/virtualization/virtualmachine.html:95 -#: virtualization/forms/bulk_edit.py:91 virtualization/forms/bulk_edit.py:109 -#: virtualization/forms/bulk_edit.py:124 -#: virtualization/forms/bulk_import.py:59 -#: virtualization/forms/bulk_import.py:85 -#: virtualization/forms/filtersets.py:79 -#: virtualization/forms/filtersets.py:148 -#: virtualization/forms/model_forms.py:71 -#: virtualization/forms/model_forms.py:104 -#: virtualization/forms/model_forms.py:171 -#: virtualization/tables/clusters.py:77 -#: virtualization/tables/virtualmachines.py:63 vpn/forms/filtersets.py:266 -#: wireless/forms/model_forms.py:76 wireless/forms/model_forms.py:118 +#: 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/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/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/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 msgid "Site" msgstr "站点" -#: circuits/filtersets.py:62 circuits/filtersets.py:229 -#: circuits/filtersets.py:274 dcim/filtersets.py:242 dcim/filtersets.py:363 -#: dcim/filtersets.py:458 extras/filtersets.py:531 ipam/filtersets.py:238 -#: ipam/filtersets.py:369 ipam/filtersets.py:989 -#: virtualization/filtersets.py:75 virtualization/filtersets.py:203 -#: vpn/filtersets.py:363 +#: 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/virtualization/filtersets.py:75 +#: netbox/virtualization/filtersets.py:203 netbox/vpn/filtersets.py:363 msgid "Site (slug)" msgstr "站点(缩写)" -#: circuits/filtersets.py:67 +#: netbox/circuits/filtersets.py:67 msgid "ASN (ID)" msgstr "ASN(ID)" -#: circuits/filtersets.py:73 circuits/forms/filtersets.py:31 -#: ipam/forms/model_forms.py:159 ipam/models/asns.py:108 -#: ipam/models/asns.py:125 ipam/tables/asn.py:41 templates/ipam/asn.html:20 +#: 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/templates/ipam/asn.html:20 msgid "ASN" msgstr "自治系统编号/AS编号" -#: circuits/filtersets.py:95 circuits/filtersets.py:122 -#: circuits/filtersets.py:156 circuits/filtersets.py:283 -#: circuits/filtersets.py:325 ipam/filtersets.py:243 +#: 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 msgid "Provider (ID)" msgstr "运营商(ID)" -#: circuits/filtersets.py:101 circuits/filtersets.py:128 -#: circuits/filtersets.py:162 circuits/filtersets.py:289 -#: circuits/filtersets.py:331 ipam/filtersets.py:249 +#: 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 msgid "Provider (slug)" msgstr "运营商(缩写)" -#: circuits/filtersets.py:167 +#: netbox/circuits/filtersets.py:167 msgid "Provider account (ID)" msgstr "运营商帐户(ID)" -#: circuits/filtersets.py:173 +#: netbox/circuits/filtersets.py:173 msgid "Provider account (account)" msgstr "供应商(账户)" -#: circuits/filtersets.py:178 +#: netbox/circuits/filtersets.py:178 msgid "Provider network (ID)" msgstr "运营商网络(ID)" -#: circuits/filtersets.py:182 +#: netbox/circuits/filtersets.py:182 msgid "Circuit type (ID)" msgstr "线路类型 (ID)" -#: circuits/filtersets.py:188 +#: netbox/circuits/filtersets.py:188 msgid "Circuit type (slug)" msgstr "线路类型(缩写)" -#: circuits/filtersets.py:223 circuits/filtersets.py:268 -#: dcim/filtersets.py:236 dcim/filtersets.py:357 dcim/filtersets.py:452 -#: dcim/filtersets.py:1045 dcim/filtersets.py:1393 dcim/filtersets.py:1928 -#: dcim/filtersets.py:2170 dcim/filtersets.py:2229 ipam/filtersets.py:232 -#: ipam/filtersets.py:363 ipam/filtersets.py:983 -#: virtualization/filtersets.py:69 virtualization/filtersets.py:197 -#: vpn/filtersets.py:368 +#: 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:232 netbox/ipam/filtersets.py:363 +#: netbox/ipam/filtersets.py:983 netbox/virtualization/filtersets.py:69 +#: netbox/virtualization/filtersets.py:197 netbox/vpn/filtersets.py:368 msgid "Site (ID)" msgstr "站点(ID)" -#: circuits/filtersets.py:233 circuits/filtersets.py:237 +#: netbox/circuits/filtersets.py:233 netbox/circuits/filtersets.py:237 msgid "Termination A (ID)" msgstr "接入点A (ID)" -#: circuits/filtersets.py:260 circuits/filtersets.py:320 core/filtersets.py:77 -#: core/filtersets.py:136 core/filtersets.py:173 dcim/filtersets.py:751 -#: dcim/filtersets.py:1362 dcim/filtersets.py:2277 extras/filtersets.py:41 -#: extras/filtersets.py:63 extras/filtersets.py:92 extras/filtersets.py:132 -#: extras/filtersets.py:181 extras/filtersets.py:209 extras/filtersets.py:239 -#: extras/filtersets.py:276 extras/filtersets.py:348 extras/filtersets.py:391 -#: extras/filtersets.py:438 extras/filtersets.py:498 extras/filtersets.py:657 -#: extras/filtersets.py:703 ipam/forms/model_forms.py:449 -#: netbox/filtersets.py:282 netbox/forms/__init__.py:22 -#: netbox/forms/base.py:167 templates/htmx/object_selector.html:28 -#: templates/inc/filter_list.html:46 templates/ipam/ipaddress_assign.html:29 -#: templates/search.html:7 templates/search.html:26 tenancy/filtersets.py:99 -#: users/filtersets.py:23 users/filtersets.py:57 users/filtersets.py:102 -#: users/filtersets.py:150 utilities/forms/forms.py:104 -#: utilities/templates/navigation/menu.html:16 +#: 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/templates/htmx/object_selector.html:28 +#: netbox/templates/inc/filter_list.html:46 +#: netbox/templates/ipam/ipaddress_assign.html:29 +#: netbox/templates/search.html:7 netbox/templates/search.html:26 +#: netbox/tenancy/filtersets.py:99 netbox/users/filtersets.py:23 +#: netbox/users/filtersets.py:57 netbox/users/filtersets.py:102 +#: netbox/users/filtersets.py:150 netbox/utilities/forms/forms.py:104 +#: netbox/utilities/templates/navigation/menu.html:16 msgid "Search" msgstr "搜索" -#: circuits/filtersets.py:264 circuits/forms/bulk_edit.py:172 -#: circuits/forms/bulk_edit.py:246 circuits/forms/bulk_import.py:115 -#: circuits/forms/filtersets.py:198 circuits/forms/filtersets.py:214 -#: circuits/forms/filtersets.py:260 circuits/forms/model_forms.py:111 -#: circuits/forms/model_forms.py:133 circuits/forms/model_forms.py:199 -#: circuits/tables/circuits.py:104 circuits/tables/circuits.py:164 -#: dcim/forms/connections.py:73 templates/circuits/circuit.html:15 -#: templates/circuits/circuitgroupassignment.html:26 -#: templates/circuits/circuittermination.html:19 -#: templates/dcim/inc/cable_termination.html:55 -#: templates/dcim/trace/circuit.html:4 +#: 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/templates/circuits/circuit.html:15 +#: netbox/templates/circuits/circuitgroupassignment.html:26 +#: netbox/templates/circuits/circuittermination.html:19 +#: netbox/templates/dcim/inc/cable_termination.html:55 +#: netbox/templates/dcim/trace/circuit.html:4 msgid "Circuit" msgstr "线路" -#: circuits/filtersets.py:278 +#: netbox/circuits/filtersets.py:278 msgid "ProviderNetwork (ID)" msgstr "运营商网络 (ID)" -#: circuits/filtersets.py:335 +#: netbox/circuits/filtersets.py:335 msgid "Circuit (ID)" msgstr "电路 (ID)" -#: circuits/filtersets.py:341 +#: netbox/circuits/filtersets.py:341 msgid "Circuit (CID)" msgstr "电路 (CID)" -#: circuits/filtersets.py:345 +#: netbox/circuits/filtersets.py:345 msgid "Circuit group (ID)" msgstr "电路组 (ID)" -#: circuits/filtersets.py:351 +#: netbox/circuits/filtersets.py:351 msgid "Circuit group (slug)" msgstr "电路组(slug)" -#: circuits/forms/bulk_edit.py:30 circuits/forms/filtersets.py:56 -#: circuits/forms/model_forms.py:29 circuits/tables/providers.py:33 -#: dcim/forms/bulk_edit.py:128 dcim/forms/filtersets.py:195 -#: dcim/forms/model_forms.py:123 dcim/tables/sites.py:94 -#: ipam/models/asns.py:126 ipam/tables/asn.py:27 ipam/views.py:213 -#: netbox/navigation/menu.py:172 netbox/navigation/menu.py:175 -#: templates/circuits/provider.html:23 +#: 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/templates/circuits/provider.html:23 msgid "ASNs" msgstr "自治系统编号/AS编号" -#: circuits/forms/bulk_edit.py:34 circuits/forms/bulk_edit.py:56 -#: circuits/forms/bulk_edit.py:83 circuits/forms/bulk_edit.py:104 -#: circuits/forms/bulk_edit.py:164 circuits/forms/bulk_edit.py:183 -#: circuits/forms/bulk_edit.py:228 core/forms/bulk_edit.py:28 -#: dcim/forms/bulk_create.py:35 dcim/forms/bulk_edit.py:73 -#: dcim/forms/bulk_edit.py:92 dcim/forms/bulk_edit.py:151 -#: dcim/forms/bulk_edit.py:192 dcim/forms/bulk_edit.py:210 -#: dcim/forms/bulk_edit.py:288 dcim/forms/bulk_edit.py:432 -#: dcim/forms/bulk_edit.py:466 dcim/forms/bulk_edit.py:481 -#: dcim/forms/bulk_edit.py:540 dcim/forms/bulk_edit.py:584 -#: dcim/forms/bulk_edit.py:618 dcim/forms/bulk_edit.py:642 -#: dcim/forms/bulk_edit.py:715 dcim/forms/bulk_edit.py:767 -#: dcim/forms/bulk_edit.py:819 dcim/forms/bulk_edit.py:842 -#: dcim/forms/bulk_edit.py:890 dcim/forms/bulk_edit.py:960 -#: dcim/forms/bulk_edit.py:1013 dcim/forms/bulk_edit.py:1048 -#: dcim/forms/bulk_edit.py:1088 dcim/forms/bulk_edit.py:1132 -#: dcim/forms/bulk_edit.py:1177 dcim/forms/bulk_edit.py:1204 -#: dcim/forms/bulk_edit.py:1222 dcim/forms/bulk_edit.py:1240 -#: dcim/forms/bulk_edit.py:1258 dcim/forms/bulk_edit.py:1682 -#: extras/forms/bulk_edit.py:39 extras/forms/bulk_edit.py:149 -#: extras/forms/bulk_edit.py:178 extras/forms/bulk_edit.py:208 -#: extras/forms/bulk_edit.py:256 extras/forms/bulk_edit.py:274 -#: extras/forms/bulk_edit.py:298 extras/forms/bulk_edit.py:312 -#: extras/forms/bulk_edit.py:339 extras/tables/tables.py:79 -#: ipam/forms/bulk_edit.py:53 ipam/forms/bulk_edit.py:73 -#: ipam/forms/bulk_edit.py:93 ipam/forms/bulk_edit.py:117 -#: ipam/forms/bulk_edit.py:146 ipam/forms/bulk_edit.py:175 -#: ipam/forms/bulk_edit.py:194 ipam/forms/bulk_edit.py:276 -#: ipam/forms/bulk_edit.py:321 ipam/forms/bulk_edit.py:369 -#: ipam/forms/bulk_edit.py:412 ipam/forms/bulk_edit.py:428 -#: ipam/forms/bulk_edit.py:516 ipam/forms/bulk_edit.py:547 -#: templates/account/token.html:35 templates/circuits/circuit.html:59 -#: templates/circuits/circuitgroup.html:32 -#: templates/circuits/circuittype.html:26 -#: templates/circuits/inc/circuit_termination_fields.html:88 -#: templates/circuits/provider.html:33 -#: templates/circuits/providernetwork.html:32 -#: templates/core/datasource.html:54 templates/core/plugin.html:80 -#: templates/dcim/cable.html:36 templates/dcim/consoleport.html:44 -#: templates/dcim/consoleserverport.html:44 templates/dcim/device.html:94 -#: templates/dcim/devicebay.html:32 templates/dcim/devicerole.html:30 -#: templates/dcim/devicetype.html:33 templates/dcim/frontport.html:58 -#: templates/dcim/interface.html:69 templates/dcim/inventoryitem.html:60 -#: templates/dcim/inventoryitemrole.html:22 templates/dcim/location.html:33 -#: templates/dcim/manufacturer.html:40 templates/dcim/module.html:73 -#: templates/dcim/modulebay.html:42 templates/dcim/moduletype.html:37 -#: templates/dcim/platform.html:33 templates/dcim/powerfeed.html:40 -#: templates/dcim/poweroutlet.html:40 templates/dcim/powerpanel.html:30 -#: templates/dcim/powerport.html:40 templates/dcim/rack.html:53 -#: templates/dcim/rackreservation.html:62 templates/dcim/rackrole.html:26 -#: templates/dcim/racktype.html:24 templates/dcim/rearport.html:54 -#: templates/dcim/region.html:33 templates/dcim/site.html:60 -#: templates/dcim/sitegroup.html:33 templates/dcim/virtualchassis.html:31 -#: templates/extras/configcontext.html:21 -#: templates/extras/configtemplate.html:17 -#: templates/extras/customfield.html:34 -#: templates/extras/dashboard/widget_add.html:14 -#: templates/extras/eventrule.html:21 templates/extras/exporttemplate.html:19 -#: templates/extras/notificationgroup.html:20 -#: templates/extras/savedfilter.html:17 templates/extras/script_list.html:45 -#: templates/extras/tag.html:20 templates/extras/webhook.html:17 -#: templates/generic/bulk_import.html:120 templates/ipam/aggregate.html:43 -#: templates/ipam/asn.html:42 templates/ipam/asnrange.html:38 -#: templates/ipam/fhrpgroup.html:34 templates/ipam/ipaddress.html:55 -#: templates/ipam/iprange.html:67 templates/ipam/prefix.html:81 -#: templates/ipam/rir.html:26 templates/ipam/role.html:26 -#: templates/ipam/routetarget.html:21 templates/ipam/service.html:50 -#: templates/ipam/servicetemplate.html:27 templates/ipam/vlan.html:62 -#: templates/ipam/vlangroup.html:34 templates/ipam/vrf.html:33 -#: templates/tenancy/contact.html:67 templates/tenancy/contactgroup.html:25 -#: templates/tenancy/contactrole.html:22 templates/tenancy/tenant.html:24 -#: templates/tenancy/tenantgroup.html:33 templates/users/group.html:21 -#: templates/users/objectpermission.html:21 templates/users/token.html:27 -#: templates/virtualization/cluster.html:25 -#: templates/virtualization/clustergroup.html:26 -#: templates/virtualization/clustertype.html:26 -#: templates/virtualization/virtualdisk.html:39 -#: templates/virtualization/virtualmachine.html:31 -#: templates/virtualization/vminterface.html:51 -#: templates/vpn/ikepolicy.html:17 templates/vpn/ikeproposal.html:17 -#: templates/vpn/ipsecpolicy.html:17 templates/vpn/ipsecprofile.html:17 -#: templates/vpn/ipsecprofile.html:40 templates/vpn/ipsecprofile.html:73 -#: templates/vpn/ipsecproposal.html:17 templates/vpn/l2vpn.html:26 -#: templates/vpn/tunnel.html:33 templates/vpn/tunnelgroup.html:30 -#: templates/wireless/wirelesslan.html:26 -#: templates/wireless/wirelesslangroup.html:33 -#: templates/wireless/wirelesslink.html:34 tenancy/forms/bulk_edit.py:32 -#: tenancy/forms/bulk_edit.py:80 tenancy/forms/bulk_edit.py:122 -#: users/forms/bulk_edit.py:64 users/forms/bulk_edit.py:82 -#: users/forms/bulk_edit.py:112 virtualization/forms/bulk_edit.py:32 -#: virtualization/forms/bulk_edit.py:46 virtualization/forms/bulk_edit.py:100 -#: virtualization/forms/bulk_edit.py:177 virtualization/forms/bulk_edit.py:228 -#: virtualization/forms/bulk_edit.py:337 vpn/forms/bulk_edit.py:28 -#: vpn/forms/bulk_edit.py:64 vpn/forms/bulk_edit.py:121 -#: vpn/forms/bulk_edit.py:155 vpn/forms/bulk_edit.py:190 -#: vpn/forms/bulk_edit.py:215 vpn/forms/bulk_edit.py:247 -#: vpn/forms/bulk_edit.py:274 wireless/forms/bulk_edit.py:29 -#: wireless/forms/bulk_edit.py:82 wireless/forms/bulk_edit.py:140 +#: 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/templates/account/token.html:35 +#: netbox/templates/circuits/circuit.html:59 +#: netbox/templates/circuits/circuitgroup.html:32 +#: netbox/templates/circuits/circuittype.html:26 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:88 +#: netbox/templates/circuits/provider.html:33 +#: netbox/templates/circuits/providernetwork.html:32 +#: netbox/templates/core/datasource.html:54 +#: netbox/templates/core/plugin.html:80 netbox/templates/dcim/cable.html:36 +#: netbox/templates/dcim/consoleport.html:44 +#: netbox/templates/dcim/consoleserverport.html:44 +#: netbox/templates/dcim/device.html:94 +#: netbox/templates/dcim/devicebay.html:32 +#: netbox/templates/dcim/devicerole.html:30 +#: netbox/templates/dcim/devicetype.html:33 +#: netbox/templates/dcim/frontport.html:58 +#: netbox/templates/dcim/interface.html:69 +#: netbox/templates/dcim/inventoryitem.html:60 +#: netbox/templates/dcim/inventoryitemrole.html:22 +#: netbox/templates/dcim/location.html:33 +#: netbox/templates/dcim/manufacturer.html:40 +#: netbox/templates/dcim/module.html:73 +#: netbox/templates/dcim/modulebay.html:42 +#: netbox/templates/dcim/moduletype.html:37 +#: netbox/templates/dcim/platform.html:33 +#: netbox/templates/dcim/powerfeed.html:40 +#: netbox/templates/dcim/poweroutlet.html:40 +#: netbox/templates/dcim/powerpanel.html:30 +#: netbox/templates/dcim/powerport.html:40 netbox/templates/dcim/rack.html:53 +#: netbox/templates/dcim/rackreservation.html:62 +#: netbox/templates/dcim/rackrole.html:26 +#: netbox/templates/dcim/racktype.html:24 +#: netbox/templates/dcim/rearport.html:54 netbox/templates/dcim/region.html:33 +#: netbox/templates/dcim/site.html:60 netbox/templates/dcim/sitegroup.html:33 +#: netbox/templates/dcim/virtualchassis.html:31 +#: netbox/templates/extras/configcontext.html:21 +#: netbox/templates/extras/configtemplate.html:17 +#: netbox/templates/extras/customfield.html:34 +#: netbox/templates/extras/dashboard/widget_add.html:14 +#: netbox/templates/extras/eventrule.html:21 +#: netbox/templates/extras/exporttemplate.html:19 +#: netbox/templates/extras/notificationgroup.html:20 +#: netbox/templates/extras/savedfilter.html:17 +#: netbox/templates/extras/script_list.html:46 +#: netbox/templates/extras/tag.html:20 netbox/templates/extras/webhook.html:17 +#: netbox/templates/generic/bulk_import.html:120 +#: netbox/templates/ipam/aggregate.html:43 netbox/templates/ipam/asn.html:42 +#: netbox/templates/ipam/asnrange.html:38 +#: netbox/templates/ipam/fhrpgroup.html:34 +#: netbox/templates/ipam/ipaddress.html:55 +#: netbox/templates/ipam/iprange.html:67 netbox/templates/ipam/prefix.html:81 +#: netbox/templates/ipam/rir.html:26 netbox/templates/ipam/role.html:26 +#: netbox/templates/ipam/routetarget.html:21 +#: netbox/templates/ipam/service.html:50 +#: netbox/templates/ipam/servicetemplate.html:27 +#: netbox/templates/ipam/vlan.html:62 netbox/templates/ipam/vlangroup.html:34 +#: netbox/templates/ipam/vrf.html:33 netbox/templates/tenancy/contact.html:67 +#: netbox/templates/tenancy/contactgroup.html:25 +#: netbox/templates/tenancy/contactrole.html:22 +#: netbox/templates/tenancy/tenant.html:24 +#: netbox/templates/tenancy/tenantgroup.html:33 +#: netbox/templates/users/group.html:21 +#: netbox/templates/users/objectpermission.html:21 +#: netbox/templates/users/token.html:27 +#: netbox/templates/virtualization/cluster.html:25 +#: netbox/templates/virtualization/clustergroup.html:26 +#: netbox/templates/virtualization/clustertype.html:26 +#: netbox/templates/virtualization/virtualdisk.html:39 +#: netbox/templates/virtualization/virtualmachine.html:31 +#: netbox/templates/virtualization/vminterface.html:51 +#: netbox/templates/vpn/ikepolicy.html:17 +#: netbox/templates/vpn/ikeproposal.html:17 +#: netbox/templates/vpn/ipsecpolicy.html:17 +#: netbox/templates/vpn/ipsecprofile.html:17 +#: netbox/templates/vpn/ipsecprofile.html:40 +#: netbox/templates/vpn/ipsecprofile.html:73 +#: netbox/templates/vpn/ipsecproposal.html:17 +#: netbox/templates/vpn/l2vpn.html:26 netbox/templates/vpn/tunnel.html:33 +#: netbox/templates/vpn/tunnelgroup.html:30 +#: netbox/templates/wireless/wirelesslan.html:26 +#: netbox/templates/wireless/wirelesslangroup.html:33 +#: netbox/templates/wireless/wirelesslink.html:34 +#: netbox/tenancy/forms/bulk_edit.py:32 netbox/tenancy/forms/bulk_edit.py:80 +#: netbox/tenancy/forms/bulk_edit.py:122 netbox/users/forms/bulk_edit.py:64 +#: netbox/users/forms/bulk_edit.py:82 netbox/users/forms/bulk_edit.py:112 +#: netbox/virtualization/forms/bulk_edit.py:32 +#: netbox/virtualization/forms/bulk_edit.py:46 +#: netbox/virtualization/forms/bulk_edit.py:100 +#: netbox/virtualization/forms/bulk_edit.py:177 +#: netbox/virtualization/forms/bulk_edit.py:228 +#: netbox/virtualization/forms/bulk_edit.py:337 +#: netbox/vpn/forms/bulk_edit.py:28 netbox/vpn/forms/bulk_edit.py:64 +#: netbox/vpn/forms/bulk_edit.py:121 netbox/vpn/forms/bulk_edit.py:155 +#: netbox/vpn/forms/bulk_edit.py:190 netbox/vpn/forms/bulk_edit.py:215 +#: netbox/vpn/forms/bulk_edit.py:247 netbox/vpn/forms/bulk_edit.py:274 +#: netbox/wireless/forms/bulk_edit.py:29 netbox/wireless/forms/bulk_edit.py:82 +#: netbox/wireless/forms/bulk_edit.py:140 msgid "Description" msgstr "描述" -#: circuits/forms/bulk_edit.py:51 circuits/forms/bulk_edit.py:73 -#: circuits/forms/bulk_edit.py:123 circuits/forms/bulk_import.py:36 -#: circuits/forms/bulk_import.py:51 circuits/forms/bulk_import.py:74 -#: circuits/forms/filtersets.py:70 circuits/forms/filtersets.py:88 -#: circuits/forms/filtersets.py:116 circuits/forms/filtersets.py:131 -#: circuits/forms/filtersets.py:199 circuits/forms/filtersets.py:232 -#: circuits/forms/filtersets.py:255 circuits/forms/model_forms.py:47 -#: circuits/forms/model_forms.py:61 circuits/forms/model_forms.py:93 -#: circuits/tables/circuits.py:58 circuits/tables/circuits.py:108 -#: circuits/tables/circuits.py:160 circuits/tables/providers.py:72 -#: circuits/tables/providers.py:103 templates/circuits/circuit.html:18 -#: templates/circuits/circuittermination.html:25 -#: templates/circuits/provider.html:20 -#: templates/circuits/provideraccount.html:20 -#: templates/circuits/providernetwork.html:20 -#: templates/dcim/inc/cable_termination.html:51 +#: netbox/circuits/forms/bulk_edit.py: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/templates/circuits/circuit.html:18 +#: netbox/templates/circuits/circuittermination.html:25 +#: netbox/templates/circuits/provider.html:20 +#: netbox/templates/circuits/provideraccount.html:20 +#: netbox/templates/circuits/providernetwork.html:20 +#: netbox/templates/dcim/inc/cable_termination.html:51 msgid "Provider" msgstr "运营商" -#: circuits/forms/bulk_edit.py:80 circuits/forms/filtersets.py:91 -#: templates/circuits/providernetwork.html:28 +#: netbox/circuits/forms/bulk_edit.py:80 +#: netbox/circuits/forms/filtersets.py:91 +#: netbox/templates/circuits/providernetwork.html:28 msgid "Service ID" msgstr "服务ID" -#: circuits/forms/bulk_edit.py:100 circuits/forms/filtersets.py:107 -#: dcim/forms/bulk_edit.py:206 dcim/forms/bulk_edit.py:604 -#: dcim/forms/bulk_edit.py:804 dcim/forms/bulk_edit.py:1173 -#: dcim/forms/bulk_edit.py:1200 dcim/forms/bulk_edit.py:1678 -#: dcim/forms/filtersets.py:1064 dcim/forms/filtersets.py:1455 -#: dcim/forms/filtersets.py:1479 dcim/tables/devices.py:704 -#: dcim/tables/devices.py:761 dcim/tables/devices.py:1003 -#: dcim/tables/devicetypes.py:249 dcim/tables/devicetypes.py:264 -#: dcim/tables/racks.py:33 extras/forms/bulk_edit.py:270 -#: extras/tables/tables.py:443 templates/circuits/circuittype.html:30 -#: templates/dcim/cable.html:40 templates/dcim/devicerole.html:34 -#: templates/dcim/frontport.html:40 templates/dcim/inventoryitemrole.html:26 -#: templates/dcim/rackrole.html:30 templates/dcim/rearport.html:40 -#: templates/extras/tag.html:26 +#: netbox/circuits/forms/bulk_edit.py: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/templates/circuits/circuittype.html:30 +#: netbox/templates/dcim/cable.html:40 +#: netbox/templates/dcim/devicerole.html:34 +#: netbox/templates/dcim/frontport.html:40 +#: netbox/templates/dcim/inventoryitemrole.html:26 +#: netbox/templates/dcim/rackrole.html:30 +#: netbox/templates/dcim/rearport.html:40 netbox/templates/extras/tag.html:26 msgid "Color" msgstr "颜色" -#: circuits/forms/bulk_edit.py:118 circuits/forms/bulk_import.py:87 -#: circuits/forms/filtersets.py:126 core/forms/bulk_edit.py:18 -#: core/forms/filtersets.py:33 core/tables/change_logging.py:32 -#: core/tables/data.py:20 core/tables/jobs.py:18 dcim/forms/bulk_edit.py:782 -#: dcim/forms/bulk_edit.py:921 dcim/forms/bulk_edit.py:989 -#: dcim/forms/bulk_edit.py:1008 dcim/forms/bulk_edit.py:1031 -#: dcim/forms/bulk_edit.py:1073 dcim/forms/bulk_edit.py:1117 -#: dcim/forms/bulk_edit.py:1168 dcim/forms/bulk_edit.py:1195 -#: dcim/forms/bulk_import.py:188 dcim/forms/bulk_import.py:260 -#: dcim/forms/bulk_import.py:708 dcim/forms/bulk_import.py:734 -#: dcim/forms/bulk_import.py:760 dcim/forms/bulk_import.py:780 -#: dcim/forms/bulk_import.py:863 dcim/forms/bulk_import.py:957 -#: dcim/forms/bulk_import.py:999 dcim/forms/bulk_import.py:1213 -#: dcim/forms/bulk_import.py:1376 dcim/forms/filtersets.py:955 -#: dcim/forms/filtersets.py:1054 dcim/forms/filtersets.py:1175 -#: dcim/forms/filtersets.py:1247 dcim/forms/filtersets.py:1272 -#: dcim/forms/filtersets.py:1296 dcim/forms/filtersets.py:1316 -#: dcim/forms/filtersets.py:1353 dcim/forms/filtersets.py:1450 -#: dcim/forms/filtersets.py:1474 dcim/forms/model_forms.py:703 -#: dcim/forms/model_forms.py:709 dcim/forms/object_import.py:84 -#: dcim/forms/object_import.py:113 dcim/forms/object_import.py:145 -#: dcim/tables/devices.py:178 dcim/tables/devices.py:814 -#: dcim/tables/power.py:77 dcim/tables/racks.py:138 -#: extras/forms/bulk_import.py:42 extras/tables/tables.py:405 -#: extras/tables/tables.py:465 netbox/tables/tables.py:240 -#: templates/circuits/circuit.html:30 templates/core/datasource.html:38 -#: templates/dcim/cable.html:15 templates/dcim/consoleport.html:36 -#: templates/dcim/consoleserverport.html:36 templates/dcim/frontport.html:36 -#: templates/dcim/interface.html:46 templates/dcim/interface.html:169 -#: templates/dcim/interface.html:311 templates/dcim/powerfeed.html:32 -#: templates/dcim/poweroutlet.html:36 templates/dcim/powerport.html:36 -#: templates/dcim/rearport.html:36 templates/extras/eventrule.html:74 -#: templates/virtualization/cluster.html:17 templates/vpn/l2vpn.html:22 -#: templates/wireless/inc/authentication_attrs.html:8 -#: templates/wireless/inc/wirelesslink_interface.html:14 -#: virtualization/forms/bulk_edit.py:60 virtualization/forms/bulk_import.py:41 -#: virtualization/forms/filtersets.py:54 -#: virtualization/forms/model_forms.py:62 virtualization/tables/clusters.py:66 -#: vpn/forms/bulk_edit.py:264 vpn/forms/bulk_import.py:264 -#: vpn/forms/filtersets.py:217 vpn/forms/model_forms.py:84 -#: vpn/forms/model_forms.py:119 vpn/forms/model_forms.py:231 +#: netbox/circuits/forms/bulk_edit.py: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/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/core/datasource.html:38 +#: netbox/templates/dcim/cable.html:15 +#: netbox/templates/dcim/consoleport.html:36 +#: netbox/templates/dcim/consoleserverport.html:36 +#: netbox/templates/dcim/frontport.html:36 +#: netbox/templates/dcim/interface.html:46 +#: netbox/templates/dcim/interface.html:169 +#: netbox/templates/dcim/interface.html:311 +#: netbox/templates/dcim/powerfeed.html:32 +#: netbox/templates/dcim/poweroutlet.html:36 +#: netbox/templates/dcim/powerport.html:36 +#: netbox/templates/dcim/rearport.html:36 +#: netbox/templates/extras/eventrule.html:74 +#: netbox/templates/virtualization/cluster.html:17 +#: netbox/templates/vpn/l2vpn.html:22 +#: netbox/templates/wireless/inc/authentication_attrs.html:8 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:14 +#: netbox/virtualization/forms/bulk_edit.py:60 +#: netbox/virtualization/forms/bulk_import.py:41 +#: netbox/virtualization/forms/filtersets.py:54 +#: netbox/virtualization/forms/model_forms.py:62 +#: netbox/virtualization/tables/clusters.py:66 +#: netbox/vpn/forms/bulk_edit.py:264 netbox/vpn/forms/bulk_import.py:264 +#: netbox/vpn/forms/filtersets.py:217 netbox/vpn/forms/model_forms.py:84 +#: netbox/vpn/forms/model_forms.py:119 netbox/vpn/forms/model_forms.py:231 msgid "Type" msgstr "类型" -#: circuits/forms/bulk_edit.py:128 circuits/forms/bulk_import.py:80 -#: circuits/forms/filtersets.py:139 circuits/forms/model_forms.py:98 +#: 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 msgid "Provider account" msgstr "运营商账户" -#: circuits/forms/bulk_edit.py:136 circuits/forms/bulk_import.py:93 -#: circuits/forms/filtersets.py:150 core/forms/filtersets.py:38 -#: core/forms/filtersets.py:79 core/tables/data.py:23 core/tables/jobs.py:26 -#: core/tables/tasks.py:88 dcim/forms/bulk_edit.py:106 -#: dcim/forms/bulk_edit.py:181 dcim/forms/bulk_edit.py:351 -#: dcim/forms/bulk_edit.py:700 dcim/forms/bulk_edit.py:756 -#: dcim/forms/bulk_edit.py:788 dcim/forms/bulk_edit.py:915 -#: dcim/forms/bulk_edit.py:1701 dcim/forms/bulk_import.py:88 -#: dcim/forms/bulk_import.py:147 dcim/forms/bulk_import.py:248 -#: dcim/forms/bulk_import.py:505 dcim/forms/bulk_import.py:659 -#: dcim/forms/bulk_import.py:1207 dcim/forms/bulk_import.py:1371 -#: dcim/forms/bulk_import.py:1435 dcim/forms/filtersets.py:178 -#: dcim/forms/filtersets.py:237 dcim/forms/filtersets.py:359 -#: dcim/forms/filtersets.py:799 dcim/forms/filtersets.py:924 -#: dcim/forms/filtersets.py:958 dcim/forms/filtersets.py:1059 -#: dcim/forms/filtersets.py:1170 dcim/tables/devices.py:140 -#: dcim/tables/devices.py:817 dcim/tables/devices.py:1063 -#: dcim/tables/modules.py:69 dcim/tables/power.py:74 dcim/tables/racks.py:126 -#: dcim/tables/sites.py:82 dcim/tables/sites.py:138 -#: ipam/forms/bulk_edit.py:256 ipam/forms/bulk_edit.py:306 -#: ipam/forms/bulk_edit.py:354 ipam/forms/bulk_edit.py:506 -#: ipam/forms/bulk_import.py:192 ipam/forms/bulk_import.py:257 -#: ipam/forms/bulk_import.py:293 ipam/forms/bulk_import.py:450 -#: ipam/forms/filtersets.py:210 ipam/forms/filtersets.py:281 -#: ipam/forms/filtersets.py:355 ipam/forms/filtersets.py:501 -#: ipam/forms/model_forms.py:468 ipam/tables/ip.py:237 ipam/tables/ip.py:312 -#: ipam/tables/ip.py:363 ipam/tables/ip.py:426 ipam/tables/ip.py:453 -#: ipam/tables/vlans.py:126 ipam/tables/vlans.py:232 -#: templates/circuits/circuit.html:34 templates/core/datasource.html:46 -#: templates/core/job.html:48 templates/core/rq_task.html:81 -#: templates/core/system.html:18 templates/dcim/cable.html:19 -#: templates/dcim/device.html:178 templates/dcim/location.html:45 -#: templates/dcim/module.html:69 templates/dcim/powerfeed.html:36 -#: templates/dcim/rack.html:41 templates/dcim/site.html:43 -#: templates/extras/script_list.html:47 templates/ipam/ipaddress.html:37 -#: templates/ipam/iprange.html:54 templates/ipam/prefix.html:73 -#: templates/ipam/vlan.html:48 templates/virtualization/cluster.html:21 -#: templates/virtualization/virtualmachine.html:19 -#: templates/vpn/tunnel.html:25 templates/wireless/wirelesslan.html:22 -#: templates/wireless/wirelesslink.html:17 users/forms/filtersets.py:32 -#: users/forms/model_forms.py:194 virtualization/forms/bulk_edit.py:70 -#: virtualization/forms/bulk_edit.py:118 -#: virtualization/forms/bulk_import.py:54 -#: virtualization/forms/bulk_import.py:80 -#: virtualization/forms/filtersets.py:62 -#: virtualization/forms/filtersets.py:160 virtualization/tables/clusters.py:74 -#: virtualization/tables/virtualmachines.py:60 vpn/forms/bulk_edit.py:39 -#: vpn/forms/bulk_import.py:37 vpn/forms/filtersets.py:47 -#: vpn/tables/tunnels.py:48 wireless/forms/bulk_edit.py:43 -#: wireless/forms/bulk_edit.py:105 wireless/forms/bulk_import.py:43 -#: wireless/forms/bulk_import.py:84 wireless/forms/filtersets.py:49 -#: wireless/forms/filtersets.py:83 wireless/tables/wirelesslan.py:52 -#: wireless/tables/wirelesslink.py:20 +#: 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/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:69 +#: 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/templates/circuits/circuit.html:34 +#: 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/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/vlan.html:48 +#: netbox/templates/virtualization/cluster.html:21 +#: netbox/templates/virtualization/virtualmachine.html:19 +#: netbox/templates/vpn/tunnel.html:25 +#: netbox/templates/wireless/wirelesslan.html:22 +#: netbox/templates/wireless/wirelesslink.html:17 +#: netbox/users/forms/filtersets.py: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/tables/clusters.py:74 +#: netbox/virtualization/tables/virtualmachines.py:60 +#: netbox/vpn/forms/bulk_edit.py:39 netbox/vpn/forms/bulk_import.py:37 +#: netbox/vpn/forms/filtersets.py:47 netbox/vpn/tables/tunnels.py:48 +#: netbox/wireless/forms/bulk_edit.py:43 +#: netbox/wireless/forms/bulk_edit.py:105 +#: netbox/wireless/forms/bulk_import.py:43 +#: netbox/wireless/forms/bulk_import.py:84 +#: netbox/wireless/forms/filtersets.py:49 +#: netbox/wireless/forms/filtersets.py:83 +#: netbox/wireless/tables/wirelesslan.py:52 +#: netbox/wireless/tables/wirelesslink.py:20 msgid "Status" msgstr "状态" -#: circuits/forms/bulk_edit.py:142 circuits/forms/bulk_edit.py:233 -#: circuits/forms/bulk_import.py:98 circuits/forms/bulk_import.py:158 -#: circuits/forms/filtersets.py:119 circuits/forms/filtersets.py:241 -#: dcim/forms/bulk_edit.py:122 dcim/forms/bulk_edit.py:187 -#: dcim/forms/bulk_edit.py:346 dcim/forms/bulk_edit.py:461 -#: dcim/forms/bulk_edit.py:690 dcim/forms/bulk_edit.py:794 -#: dcim/forms/bulk_edit.py:1706 dcim/forms/bulk_import.py:107 -#: dcim/forms/bulk_import.py:152 dcim/forms/bulk_import.py:241 -#: dcim/forms/bulk_import.py:334 dcim/forms/bulk_import.py:479 -#: dcim/forms/bulk_import.py:1219 dcim/forms/bulk_import.py:1428 -#: dcim/forms/filtersets.py:173 dcim/forms/filtersets.py:205 -#: dcim/forms/filtersets.py:323 dcim/forms/filtersets.py:399 -#: dcim/forms/filtersets.py:420 dcim/forms/filtersets.py:722 -#: dcim/forms/filtersets.py:916 dcim/forms/filtersets.py:978 -#: dcim/forms/filtersets.py:1008 dcim/forms/filtersets.py:1130 -#: dcim/tables/power.py:88 extras/filtersets.py:612 -#: extras/forms/filtersets.py:323 extras/forms/filtersets.py:396 -#: ipam/forms/bulk_edit.py:43 ipam/forms/bulk_edit.py:68 -#: ipam/forms/bulk_edit.py:112 ipam/forms/bulk_edit.py:141 -#: ipam/forms/bulk_edit.py:166 ipam/forms/bulk_edit.py:251 -#: ipam/forms/bulk_edit.py:301 ipam/forms/bulk_edit.py:349 -#: ipam/forms/bulk_edit.py:501 ipam/forms/bulk_import.py:38 -#: ipam/forms/bulk_import.py:67 ipam/forms/bulk_import.py:95 -#: ipam/forms/bulk_import.py:115 ipam/forms/bulk_import.py:135 -#: ipam/forms/bulk_import.py:164 ipam/forms/bulk_import.py:250 -#: ipam/forms/bulk_import.py:286 ipam/forms/bulk_import.py:443 -#: ipam/forms/filtersets.py:48 ipam/forms/filtersets.py:68 -#: ipam/forms/filtersets.py:100 ipam/forms/filtersets.py:120 -#: ipam/forms/filtersets.py:143 ipam/forms/filtersets.py:174 -#: ipam/forms/filtersets.py:267 ipam/forms/filtersets.py:310 -#: ipam/forms/filtersets.py:469 ipam/tables/ip.py:456 ipam/tables/vlans.py:229 -#: templates/circuits/circuit.html:38 templates/circuits/circuitgroup.html:36 -#: templates/dcim/cable.html:23 templates/dcim/device.html:79 -#: templates/dcim/location.html:49 templates/dcim/powerfeed.html:44 -#: templates/dcim/rack.html:32 templates/dcim/rackreservation.html:49 -#: templates/dcim/site.html:47 templates/dcim/virtualdevicecontext.html:52 -#: templates/ipam/aggregate.html:30 templates/ipam/asn.html:33 -#: templates/ipam/asnrange.html:29 templates/ipam/ipaddress.html:28 -#: templates/ipam/iprange.html:58 templates/ipam/prefix.html:29 -#: templates/ipam/routetarget.html:17 templates/ipam/vlan.html:39 -#: templates/ipam/vrf.html:20 templates/tenancy/tenant.html:17 -#: templates/virtualization/cluster.html:33 -#: templates/virtualization/virtualmachine.html:39 templates/vpn/l2vpn.html:30 -#: templates/vpn/tunnel.html:49 templates/wireless/wirelesslan.html:34 -#: templates/wireless/wirelesslink.html:25 tenancy/forms/forms.py:25 -#: tenancy/forms/forms.py:48 tenancy/forms/model_forms.py:52 -#: tenancy/tables/columns.py:64 virtualization/forms/bulk_edit.py:76 -#: virtualization/forms/bulk_edit.py:155 -#: virtualization/forms/bulk_import.py:66 -#: virtualization/forms/bulk_import.py:115 -#: virtualization/forms/filtersets.py:47 -#: virtualization/forms/filtersets.py:105 vpn/forms/bulk_edit.py:59 -#: vpn/forms/bulk_edit.py:269 vpn/forms/bulk_import.py:59 -#: vpn/forms/bulk_import.py:258 vpn/forms/filtersets.py:214 -#: wireless/forms/bulk_edit.py:63 wireless/forms/bulk_edit.py:110 -#: wireless/forms/bulk_import.py:55 wireless/forms/bulk_import.py:97 -#: wireless/forms/filtersets.py:35 wireless/forms/filtersets.py:75 +#: netbox/circuits/forms/bulk_edit.py: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/templates/circuits/circuitgroup.html:36 +#: 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 +#: netbox/templates/dcim/rackreservation.html:49 +#: netbox/templates/dcim/site.html:47 +#: netbox/templates/dcim/virtualdevicecontext.html:52 +#: netbox/templates/ipam/aggregate.html:30 netbox/templates/ipam/asn.html:33 +#: netbox/templates/ipam/asnrange.html:29 +#: netbox/templates/ipam/ipaddress.html:28 +#: netbox/templates/ipam/iprange.html:58 netbox/templates/ipam/prefix.html:29 +#: netbox/templates/ipam/routetarget.html:17 +#: netbox/templates/ipam/vlan.html:39 netbox/templates/ipam/vrf.html:20 +#: netbox/templates/tenancy/tenant.html:17 +#: netbox/templates/virtualization/cluster.html:33 +#: netbox/templates/virtualization/virtualmachine.html:39 +#: netbox/templates/vpn/l2vpn.html:30 netbox/templates/vpn/tunnel.html:49 +#: netbox/templates/wireless/wirelesslan.html:34 +#: netbox/templates/wireless/wirelesslink.html:25 +#: netbox/tenancy/forms/forms.py:25 netbox/tenancy/forms/forms.py:48 +#: netbox/tenancy/forms/model_forms.py:52 netbox/tenancy/tables/columns.py:64 +#: netbox/virtualization/forms/bulk_edit.py:76 +#: netbox/virtualization/forms/bulk_edit.py:155 +#: netbox/virtualization/forms/bulk_import.py:66 +#: netbox/virtualization/forms/bulk_import.py:115 +#: netbox/virtualization/forms/filtersets.py:47 +#: netbox/virtualization/forms/filtersets.py:105 +#: netbox/vpn/forms/bulk_edit.py:59 netbox/vpn/forms/bulk_edit.py:269 +#: netbox/vpn/forms/bulk_import.py:59 netbox/vpn/forms/bulk_import.py:258 +#: netbox/vpn/forms/filtersets.py:214 netbox/wireless/forms/bulk_edit.py:63 +#: netbox/wireless/forms/bulk_edit.py:110 +#: netbox/wireless/forms/bulk_import.py:55 +#: netbox/wireless/forms/bulk_import.py:97 +#: netbox/wireless/forms/filtersets.py:35 +#: netbox/wireless/forms/filtersets.py:75 msgid "Tenant" msgstr "租户" -#: circuits/forms/bulk_edit.py:147 circuits/forms/filtersets.py:174 +#: netbox/circuits/forms/bulk_edit.py:147 +#: netbox/circuits/forms/filtersets.py:174 msgid "Install date" msgstr "安装日期" -#: circuits/forms/bulk_edit.py:152 circuits/forms/filtersets.py:179 +#: netbox/circuits/forms/bulk_edit.py:152 +#: netbox/circuits/forms/filtersets.py:179 msgid "Termination date" msgstr "终止日期" -#: circuits/forms/bulk_edit.py:158 circuits/forms/filtersets.py:186 +#: netbox/circuits/forms/bulk_edit.py:158 +#: netbox/circuits/forms/filtersets.py:186 msgid "Commit rate (Kbps)" msgstr "承诺速率(Kbps)" -#: circuits/forms/bulk_edit.py:173 circuits/forms/model_forms.py:112 +#: netbox/circuits/forms/bulk_edit.py:173 +#: netbox/circuits/forms/model_forms.py:112 msgid "Service Parameters" msgstr "服务参数" -#: circuits/forms/bulk_edit.py:174 circuits/forms/model_forms.py:113 -#: circuits/forms/model_forms.py:183 dcim/forms/model_forms.py:139 -#: dcim/forms/model_forms.py:181 dcim/forms/model_forms.py:266 -#: dcim/forms/model_forms.py:323 dcim/forms/model_forms.py:768 -#: dcim/forms/model_forms.py:1692 ipam/forms/model_forms.py:64 -#: ipam/forms/model_forms.py:81 ipam/forms/model_forms.py:115 -#: ipam/forms/model_forms.py:136 ipam/forms/model_forms.py:160 -#: ipam/forms/model_forms.py:232 ipam/forms/model_forms.py:261 -#: ipam/forms/model_forms.py:316 netbox/navigation/menu.py:24 -#: templates/dcim/device_edit.html:85 templates/dcim/htmx/cable_edit.html:72 -#: templates/ipam/ipaddress_bulk_add.html:27 templates/ipam/vlan_edit.html:22 -#: virtualization/forms/model_forms.py:80 -#: virtualization/forms/model_forms.py:222 vpn/forms/bulk_edit.py:78 -#: vpn/forms/filtersets.py:44 vpn/forms/model_forms.py:62 -#: vpn/forms/model_forms.py:147 vpn/forms/model_forms.py:411 -#: wireless/forms/model_forms.py:54 wireless/forms/model_forms.py:170 +#: 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/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/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 msgid "Tenancy" msgstr "租户" -#: circuits/forms/bulk_edit.py:193 circuits/forms/bulk_edit.py:217 -#: circuits/forms/model_forms.py:155 circuits/tables/circuits.py:117 -#: templates/circuits/inc/circuit_termination_fields.html:62 -#: templates/circuits/providernetwork.html:17 +#: 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 "运营商网络" -#: circuits/forms/bulk_edit.py:199 +#: netbox/circuits/forms/bulk_edit.py:199 msgid "Port speed (Kbps)" msgstr "端口速度 (Kbps)" -#: circuits/forms/bulk_edit.py:203 +#: netbox/circuits/forms/bulk_edit.py:203 msgid "Upstream speed (Kbps)" msgstr "上行速度 (Kbps)" -#: circuits/forms/bulk_edit.py:206 dcim/forms/bulk_edit.py:951 -#: dcim/forms/bulk_edit.py:1315 dcim/forms/bulk_edit.py:1332 -#: dcim/forms/bulk_edit.py:1349 dcim/forms/bulk_edit.py:1367 -#: dcim/forms/bulk_edit.py:1455 dcim/forms/bulk_edit.py:1594 -#: dcim/forms/bulk_edit.py:1611 +#: 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 msgid "Mark connected" msgstr "标记已连接" -#: circuits/forms/bulk_edit.py:219 circuits/forms/model_forms.py:157 -#: templates/circuits/inc/circuit_termination_fields.html:54 -#: templates/dcim/frontport.html:121 templates/dcim/interface.html:193 -#: templates/dcim/rearport.html:111 +#: netbox/circuits/forms/bulk_edit.py:219 +#: netbox/circuits/forms/model_forms.py:157 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:54 +#: netbox/templates/dcim/frontport.html:121 +#: netbox/templates/dcim/interface.html:193 +#: netbox/templates/dcim/rearport.html:111 msgid "Circuit Termination" msgstr "线路终端" -#: circuits/forms/bulk_edit.py:221 circuits/forms/model_forms.py:159 +#: netbox/circuits/forms/bulk_edit.py:221 +#: netbox/circuits/forms/model_forms.py:159 msgid "Termination Details" msgstr "终端详情" -#: circuits/forms/bulk_edit.py:251 circuits/forms/filtersets.py:268 -#: circuits/tables/circuits.py:168 dcim/forms/model_forms.py:551 -#: templates/circuits/circuitgroupassignment.html:30 -#: templates/dcim/device.html:133 templates/dcim/virtualchassis.html:68 -#: templates/dcim/virtualchassis_edit.html:56 -#: templates/ipam/inc/panels/fhrp_groups.html:26 -#: tenancy/forms/bulk_edit.py:147 tenancy/forms/filtersets.py:110 +#: netbox/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/templates/dcim/device.html:133 +#: netbox/templates/dcim/virtualchassis.html:68 +#: netbox/templates/dcim/virtualchassis_edit.html:56 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:26 +#: netbox/tenancy/forms/bulk_edit.py:147 +#: netbox/tenancy/forms/filtersets.py:110 msgid "Priority" msgstr "优先级" -#: circuits/forms/bulk_import.py:39 circuits/forms/bulk_import.py:54 -#: circuits/forms/bulk_import.py:77 +#: 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 "指定的运营商" -#: circuits/forms/bulk_import.py:83 +#: netbox/circuits/forms/bulk_import.py:83 msgid "Assigned provider account" msgstr "指定的运营商账户" -#: circuits/forms/bulk_import.py:90 +#: netbox/circuits/forms/bulk_import.py:90 msgid "Type of circuit" msgstr "线路类型" -#: circuits/forms/bulk_import.py:95 dcim/forms/bulk_import.py:90 -#: dcim/forms/bulk_import.py:149 dcim/forms/bulk_import.py:250 -#: dcim/forms/bulk_import.py:507 dcim/forms/bulk_import.py:661 -#: dcim/forms/bulk_import.py:1373 ipam/forms/bulk_import.py:194 -#: ipam/forms/bulk_import.py:259 ipam/forms/bulk_import.py:295 -#: ipam/forms/bulk_import.py:452 virtualization/forms/bulk_import.py:56 -#: virtualization/forms/bulk_import.py:82 vpn/forms/bulk_import.py:39 -#: wireless/forms/bulk_import.py:45 +#: netbox/circuits/forms/bulk_import.py: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 "运行状态" -#: circuits/forms/bulk_import.py:102 circuits/forms/bulk_import.py:162 -#: dcim/forms/bulk_import.py:111 dcim/forms/bulk_import.py:156 -#: dcim/forms/bulk_import.py:338 dcim/forms/bulk_import.py:483 -#: dcim/forms/bulk_import.py:1223 dcim/forms/bulk_import.py:1368 -#: dcim/forms/bulk_import.py:1432 ipam/forms/bulk_import.py:42 -#: ipam/forms/bulk_import.py:71 ipam/forms/bulk_import.py:99 -#: ipam/forms/bulk_import.py:119 ipam/forms/bulk_import.py:139 -#: ipam/forms/bulk_import.py:168 ipam/forms/bulk_import.py:254 -#: ipam/forms/bulk_import.py:290 ipam/forms/bulk_import.py:447 -#: virtualization/forms/bulk_import.py:70 -#: virtualization/forms/bulk_import.py:119 vpn/forms/bulk_import.py:63 -#: wireless/forms/bulk_import.py:59 wireless/forms/bulk_import.py:101 +#: netbox/circuits/forms/bulk_import.py: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 "已分配租户" -#: circuits/forms/bulk_import.py:120 -#: templates/circuits/inc/circuit_termination.html:6 -#: templates/circuits/inc/circuit_termination_fields.html:15 -#: templates/dcim/cable.html:68 templates/dcim/cable.html:72 -#: vpn/forms/bulk_import.py:100 vpn/forms/filtersets.py:77 +#: netbox/circuits/forms/bulk_import.py: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 "终端" -#: circuits/forms/bulk_import.py:130 circuits/forms/filtersets.py:147 -#: circuits/forms/filtersets.py:227 circuits/forms/model_forms.py:144 +#: 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 msgid "Provider network" msgstr "运营商网络" -#: circuits/forms/filtersets.py:30 circuits/forms/filtersets.py:118 -#: circuits/forms/filtersets.py:200 dcim/forms/bulk_edit.py:338 -#: dcim/forms/bulk_edit.py:441 dcim/forms/bulk_edit.py:682 -#: dcim/forms/bulk_edit.py:729 dcim/forms/bulk_edit.py:882 -#: dcim/forms/bulk_import.py:235 dcim/forms/bulk_import.py:315 -#: dcim/forms/bulk_import.py:546 dcim/forms/bulk_import.py:1317 -#: dcim/forms/bulk_import.py:1351 dcim/forms/filtersets.py:95 -#: dcim/forms/filtersets.py:322 dcim/forms/filtersets.py:356 -#: dcim/forms/filtersets.py:396 dcim/forms/filtersets.py:447 -#: dcim/forms/filtersets.py:719 dcim/forms/filtersets.py:762 -#: dcim/forms/filtersets.py:977 dcim/forms/filtersets.py:1006 -#: dcim/forms/filtersets.py:1026 dcim/forms/filtersets.py:1090 -#: dcim/forms/filtersets.py:1120 dcim/forms/filtersets.py:1129 -#: dcim/forms/filtersets.py:1240 dcim/forms/filtersets.py:1264 -#: dcim/forms/filtersets.py:1289 dcim/forms/filtersets.py:1308 -#: dcim/forms/filtersets.py:1331 dcim/forms/filtersets.py:1442 -#: dcim/forms/filtersets.py:1466 dcim/forms/filtersets.py:1490 -#: dcim/forms/filtersets.py:1508 dcim/forms/filtersets.py:1525 -#: dcim/forms/model_forms.py:180 dcim/forms/model_forms.py:243 -#: dcim/forms/model_forms.py:468 dcim/forms/model_forms.py:728 -#: dcim/tables/devices.py:157 dcim/tables/power.py:30 dcim/tables/racks.py:118 -#: dcim/tables/racks.py:212 extras/filtersets.py:536 -#: extras/forms/filtersets.py:320 ipam/forms/filtersets.py:173 -#: ipam/forms/filtersets.py:414 ipam/forms/filtersets.py:437 -#: ipam/forms/filtersets.py:467 templates/dcim/device.html:26 -#: templates/dcim/device_edit.html:30 -#: templates/dcim/inc/cable_termination.html:12 -#: templates/dcim/location.html:26 templates/dcim/powerpanel.html:26 -#: templates/dcim/rack.html:24 templates/dcim/rackreservation.html:32 -#: virtualization/forms/filtersets.py:46 -#: virtualization/forms/filtersets.py:100 wireless/forms/model_forms.py:87 -#: wireless/forms/model_forms.py:129 +#: netbox/circuits/forms/filtersets.py: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/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 msgid "Location" msgstr "位置" -#: circuits/forms/filtersets.py:32 circuits/forms/filtersets.py:120 -#: dcim/forms/filtersets.py:144 dcim/forms/filtersets.py:158 -#: dcim/forms/filtersets.py:174 dcim/forms/filtersets.py:206 -#: dcim/forms/filtersets.py:328 dcim/forms/filtersets.py:400 -#: dcim/forms/filtersets.py:471 dcim/forms/filtersets.py:723 -#: dcim/forms/filtersets.py:1091 netbox/navigation/menu.py:31 -#: netbox/navigation/menu.py:33 tenancy/forms/filtersets.py:42 -#: tenancy/tables/columns.py:70 tenancy/tables/contacts.py:25 -#: tenancy/views.py:19 virtualization/forms/filtersets.py:37 -#: virtualization/forms/filtersets.py:48 -#: virtualization/forms/filtersets.py:106 +#: netbox/circuits/forms/filtersets.py: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/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/tables/contacts.py:25 netbox/tenancy/views.py:19 +#: netbox/virtualization/forms/filtersets.py:37 +#: netbox/virtualization/forms/filtersets.py:48 +#: netbox/virtualization/forms/filtersets.py:106 msgid "Contacts" msgstr "联系" -#: circuits/forms/filtersets.py:37 circuits/forms/filtersets.py:157 -#: dcim/forms/bulk_edit.py:112 dcim/forms/bulk_edit.py:313 -#: dcim/forms/bulk_edit.py:857 dcim/forms/bulk_import.py:93 -#: dcim/forms/filtersets.py:73 dcim/forms/filtersets.py:185 -#: dcim/forms/filtersets.py:211 dcim/forms/filtersets.py:334 -#: dcim/forms/filtersets.py:425 dcim/forms/filtersets.py:739 -#: dcim/forms/filtersets.py:983 dcim/forms/filtersets.py:1013 -#: dcim/forms/filtersets.py:1097 dcim/forms/filtersets.py:1136 -#: dcim/forms/filtersets.py:1576 dcim/forms/filtersets.py:1600 -#: dcim/forms/filtersets.py:1624 dcim/forms/model_forms.py:112 -#: dcim/forms/object_create.py:375 dcim/tables/devices.py:143 -#: dcim/tables/sites.py:85 extras/filtersets.py:503 -#: ipam/forms/bulk_edit.py:208 ipam/forms/bulk_edit.py:474 -#: ipam/forms/filtersets.py:217 ipam/forms/filtersets.py:422 -#: ipam/forms/filtersets.py:475 templates/dcim/device.html:18 -#: templates/dcim/rack.html:16 templates/dcim/rackreservation.html:22 -#: templates/dcim/region.html:26 templates/dcim/site.html:31 -#: templates/ipam/prefix.html:49 templates/ipam/vlan.html:16 -#: virtualization/forms/bulk_edit.py:81 virtualization/forms/filtersets.py:59 -#: virtualization/forms/filtersets.py:133 -#: virtualization/forms/model_forms.py:92 vpn/forms/filtersets.py:257 +#: netbox/circuits/forms/filtersets.py: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/templates/dcim/rackreservation.html:22 +#: netbox/templates/dcim/region.html:26 netbox/templates/dcim/site.html:31 +#: netbox/templates/ipam/prefix.html:49 netbox/templates/ipam/vlan.html:16 +#: netbox/virtualization/forms/bulk_edit.py:81 +#: netbox/virtualization/forms/filtersets.py:59 +#: netbox/virtualization/forms/filtersets.py:133 +#: netbox/virtualization/forms/model_forms.py:92 +#: netbox/vpn/forms/filtersets.py:257 msgid "Region" msgstr "地区" -#: circuits/forms/filtersets.py:42 circuits/forms/filtersets.py:162 -#: dcim/forms/bulk_edit.py:321 dcim/forms/bulk_edit.py:865 -#: dcim/forms/filtersets.py:78 dcim/forms/filtersets.py:190 -#: dcim/forms/filtersets.py:216 dcim/forms/filtersets.py:347 -#: dcim/forms/filtersets.py:430 dcim/forms/filtersets.py:744 -#: dcim/forms/filtersets.py:988 dcim/forms/filtersets.py:1102 -#: dcim/forms/filtersets.py:1141 dcim/forms/object_create.py:383 -#: extras/filtersets.py:520 ipam/forms/bulk_edit.py:213 -#: ipam/forms/bulk_edit.py:479 ipam/forms/filtersets.py:222 -#: ipam/forms/filtersets.py:427 ipam/forms/filtersets.py:480 -#: virtualization/forms/bulk_edit.py:86 virtualization/forms/filtersets.py:69 -#: virtualization/forms/filtersets.py:138 -#: virtualization/forms/model_forms.py:98 +#: netbox/circuits/forms/filtersets.py: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/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 msgid "Site group" msgstr "站点组" -#: circuits/forms/filtersets.py:65 circuits/forms/filtersets.py:83 -#: circuits/forms/filtersets.py:102 circuits/forms/filtersets.py:117 -#: core/forms/filtersets.py:67 core/forms/filtersets.py:135 -#: dcim/forms/bulk_edit.py:828 dcim/forms/filtersets.py:172 -#: dcim/forms/filtersets.py:204 dcim/forms/filtersets.py:915 -#: dcim/forms/filtersets.py:1007 dcim/forms/filtersets.py:1131 -#: dcim/forms/filtersets.py:1239 dcim/forms/filtersets.py:1263 -#: dcim/forms/filtersets.py:1288 dcim/forms/filtersets.py:1307 -#: dcim/forms/filtersets.py:1327 dcim/forms/filtersets.py:1441 -#: dcim/forms/filtersets.py:1465 dcim/forms/filtersets.py:1489 -#: dcim/forms/filtersets.py:1507 dcim/forms/filtersets.py:1523 -#: extras/forms/bulk_edit.py:90 extras/forms/filtersets.py:44 -#: extras/forms/filtersets.py:134 extras/forms/filtersets.py:165 -#: extras/forms/filtersets.py:205 extras/forms/filtersets.py:221 -#: extras/forms/filtersets.py:252 extras/forms/filtersets.py:276 -#: extras/forms/filtersets.py:441 ipam/forms/filtersets.py:99 -#: ipam/forms/filtersets.py:266 ipam/forms/filtersets.py:307 -#: ipam/forms/filtersets.py:382 ipam/forms/filtersets.py:468 -#: ipam/forms/filtersets.py:527 ipam/forms/filtersets.py:545 -#: netbox/tables/tables.py:256 virtualization/forms/filtersets.py:45 -#: virtualization/forms/filtersets.py:103 -#: virtualization/forms/filtersets.py:198 -#: virtualization/forms/filtersets.py:243 vpn/forms/filtersets.py:213 -#: wireless/forms/bulk_edit.py:150 wireless/forms/filtersets.py:34 -#: wireless/forms/filtersets.py:74 +#: 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 "属性" -#: circuits/forms/filtersets.py:73 circuits/tables/circuits.py:63 -#: circuits/tables/providers.py:66 templates/circuits/circuit.html:22 -#: templates/circuits/provideraccount.html:24 +#: netbox/circuits/forms/filtersets.py:73 +#: netbox/circuits/tables/circuits.py:63 +#: netbox/circuits/tables/providers.py:66 +#: netbox/templates/circuits/circuit.html:22 +#: netbox/templates/circuits/provideraccount.html:24 msgid "Account" msgstr "账户" -#: circuits/forms/filtersets.py:217 +#: netbox/circuits/forms/filtersets.py:217 msgid "Term Side" msgstr "线路终端侧" -#: circuits/forms/filtersets.py:250 extras/forms/model_forms.py:582 -#: ipam/forms/filtersets.py:142 ipam/forms/filtersets.py:546 -#: ipam/forms/model_forms.py:323 templates/extras/configcontext.html:60 -#: templates/ipam/ipaddress.html:59 templates/ipam/vlan_edit.html:30 -#: tenancy/forms/filtersets.py:87 users/forms/model_forms.py:314 +#: 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/templates/extras/configcontext.html:60 +#: netbox/templates/ipam/ipaddress.html:59 +#: netbox/templates/ipam/vlan_edit.html:30 +#: netbox/tenancy/forms/filtersets.py:87 netbox/users/forms/model_forms.py:314 msgid "Assignment" msgstr "分配" -#: circuits/forms/filtersets.py:265 circuits/forms/model_forms.py:195 -#: circuits/tables/circuits.py:155 dcim/forms/bulk_edit.py:117 -#: dcim/forms/bulk_import.py:100 dcim/forms/model_forms.py:117 -#: dcim/tables/sites.py:89 extras/forms/filtersets.py:480 -#: ipam/filtersets.py:999 ipam/forms/bulk_edit.py:493 -#: ipam/forms/bulk_import.py:436 ipam/forms/model_forms.py:528 -#: ipam/tables/fhrp.py:67 ipam/tables/vlans.py:122 ipam/tables/vlans.py:226 -#: templates/circuits/circuitgroupassignment.html:22 -#: templates/dcim/interface.html:284 templates/dcim/site.html:37 -#: templates/ipam/inc/panels/fhrp_groups.html:23 templates/ipam/vlan.html:27 -#: templates/tenancy/contact.html:21 templates/tenancy/tenant.html:20 -#: templates/users/group.html:6 templates/users/group.html:14 -#: templates/virtualization/cluster.html:29 templates/vpn/tunnel.html:29 -#: templates/wireless/wirelesslan.html:18 tenancy/forms/bulk_edit.py:43 -#: tenancy/forms/bulk_edit.py:94 tenancy/forms/bulk_import.py:40 -#: tenancy/forms/bulk_import.py:81 tenancy/forms/filtersets.py:48 -#: tenancy/forms/filtersets.py:78 tenancy/forms/filtersets.py:97 -#: tenancy/forms/model_forms.py:45 tenancy/forms/model_forms.py:97 -#: tenancy/forms/model_forms.py:122 tenancy/tables/contacts.py:60 -#: tenancy/tables/contacts.py:107 tenancy/tables/tenants.py:42 -#: users/filtersets.py:62 users/filtersets.py:185 users/forms/filtersets.py:31 -#: users/forms/filtersets.py:37 users/forms/filtersets.py:79 -#: virtualization/forms/bulk_edit.py:65 virtualization/forms/bulk_import.py:47 -#: virtualization/forms/filtersets.py:85 -#: virtualization/forms/model_forms.py:66 virtualization/tables/clusters.py:70 -#: vpn/forms/bulk_edit.py:112 vpn/forms/bulk_import.py:158 -#: vpn/forms/filtersets.py:116 vpn/tables/crypto.py:31 -#: vpn/tables/tunnels.py:44 wireless/forms/bulk_edit.py:48 -#: wireless/forms/bulk_import.py:36 wireless/forms/filtersets.py:46 -#: wireless/forms/model_forms.py:40 wireless/tables/wirelesslan.py:48 +#: netbox/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:999 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/templates/circuits/circuitgroupassignment.html:22 +#: netbox/templates/dcim/interface.html:284 netbox/templates/dcim/site.html:37 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:23 +#: netbox/templates/ipam/vlan.html:27 netbox/templates/tenancy/contact.html:21 +#: netbox/templates/tenancy/tenant.html:20 netbox/templates/users/group.html:6 +#: netbox/templates/users/group.html:14 +#: netbox/templates/virtualization/cluster.html:29 +#: netbox/templates/vpn/tunnel.html:29 +#: netbox/templates/wireless/wirelesslan.html:18 +#: netbox/tenancy/forms/bulk_edit.py:43 netbox/tenancy/forms/bulk_edit.py:94 +#: netbox/tenancy/forms/bulk_import.py:40 +#: netbox/tenancy/forms/bulk_import.py:81 +#: netbox/tenancy/forms/filtersets.py:48 netbox/tenancy/forms/filtersets.py:78 +#: netbox/tenancy/forms/filtersets.py:97 +#: netbox/tenancy/forms/model_forms.py:45 +#: netbox/tenancy/forms/model_forms.py:97 +#: netbox/tenancy/forms/model_forms.py:122 +#: netbox/tenancy/tables/contacts.py:60 netbox/tenancy/tables/contacts.py:107 +#: netbox/tenancy/tables/tenants.py:42 netbox/users/filtersets.py: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/tables/clusters.py:70 +#: netbox/vpn/forms/bulk_edit.py:112 netbox/vpn/forms/bulk_import.py:158 +#: netbox/vpn/forms/filtersets.py:116 netbox/vpn/tables/crypto.py:31 +#: netbox/vpn/tables/tunnels.py:44 netbox/wireless/forms/bulk_edit.py:48 +#: netbox/wireless/forms/bulk_import.py:36 +#: netbox/wireless/forms/filtersets.py:46 +#: netbox/wireless/forms/model_forms.py:40 +#: netbox/wireless/tables/wirelesslan.py:48 msgid "Group" msgstr "组" -#: circuits/forms/model_forms.py:182 templates/circuits/circuitgroup.html:25 +#: netbox/circuits/forms/model_forms.py:182 +#: netbox/templates/circuits/circuitgroup.html:25 msgid "Circuit Group" msgstr "电路组" -#: circuits/models/circuits.py:27 dcim/models/cables.py:67 -#: dcim/models/device_component_templates.py:517 -#: dcim/models/device_component_templates.py:617 -#: dcim/models/device_components.py:975 dcim/models/device_components.py:1049 -#: dcim/models/device_components.py:1204 dcim/models/devices.py:479 -#: dcim/models/racks.py:224 extras/models/tags.py:28 +#: 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/extras/models/tags.py:28 msgid "color" msgstr "颜色" -#: circuits/models/circuits.py:36 +#: netbox/circuits/models/circuits.py:36 msgid "circuit type" msgstr "线路类型" -#: circuits/models/circuits.py:37 +#: netbox/circuits/models/circuits.py:37 msgid "circuit types" msgstr "线路类型" -#: circuits/models/circuits.py:48 +#: netbox/circuits/models/circuits.py:48 msgid "circuit ID" msgstr "线路ID" -#: circuits/models/circuits.py:49 +#: netbox/circuits/models/circuits.py:49 msgid "Unique circuit ID" msgstr "唯一线路 ID" -#: circuits/models/circuits.py:69 core/models/data.py:52 -#: core/models/jobs.py:84 dcim/models/cables.py:49 dcim/models/devices.py:653 -#: dcim/models/devices.py:1173 dcim/models/devices.py:1399 -#: dcim/models/power.py:96 dcim/models/racks.py:297 dcim/models/sites.py:154 -#: dcim/models/sites.py:266 ipam/models/ip.py:253 ipam/models/ip.py:522 -#: ipam/models/ip.py:730 ipam/models/vlans.py:195 -#: virtualization/models/clusters.py:74 -#: virtualization/models/virtualmachines.py:84 vpn/models/tunnels.py:40 -#: wireless/models.py:95 wireless/models.py:159 +#: 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 msgid "status" msgstr "状态" -#: circuits/models/circuits.py:84 templates/core/plugin.html:20 +#: netbox/circuits/models/circuits.py:84 netbox/templates/core/plugin.html:20 msgid "installed" msgstr "安装时间" -#: circuits/models/circuits.py:89 +#: netbox/circuits/models/circuits.py:89 msgid "terminates" msgstr "结束时间" -#: circuits/models/circuits.py:94 +#: netbox/circuits/models/circuits.py:94 msgid "commit rate (Kbps)" msgstr "承诺速率(Kbps)" -#: circuits/models/circuits.py:95 +#: netbox/circuits/models/circuits.py:95 msgid "Committed rate" msgstr "承诺速率" -#: circuits/models/circuits.py:137 +#: netbox/circuits/models/circuits.py:137 msgid "circuit" msgstr "线路" -#: circuits/models/circuits.py:138 +#: netbox/circuits/models/circuits.py:138 msgid "circuits" msgstr "广域网线路" -#: circuits/models/circuits.py:170 +#: netbox/circuits/models/circuits.py:170 msgid "circuit group" msgstr "电路组" -#: circuits/models/circuits.py:171 +#: netbox/circuits/models/circuits.py:171 msgid "circuit groups" msgstr "电路组" -#: circuits/models/circuits.py:195 ipam/models/fhrp.py:93 -#: tenancy/models/contacts.py:134 +#: netbox/circuits/models/circuits.py:195 netbox/ipam/models/fhrp.py:93 +#: netbox/tenancy/models/contacts.py:134 msgid "priority" msgstr "优先级" -#: circuits/models/circuits.py:213 +#: netbox/circuits/models/circuits.py:213 msgid "Circuit group assignment" msgstr "电路组分配" -#: circuits/models/circuits.py:214 +#: netbox/circuits/models/circuits.py:214 msgid "Circuit group assignments" msgstr "电路组分配" -#: circuits/models/circuits.py:240 +#: netbox/circuits/models/circuits.py:240 msgid "termination" msgstr "接入终端" -#: circuits/models/circuits.py:257 +#: netbox/circuits/models/circuits.py:257 msgid "port speed (Kbps)" msgstr "接口速率(Kpbs)" -#: circuits/models/circuits.py:260 +#: netbox/circuits/models/circuits.py:260 msgid "Physical circuit speed" msgstr "物理线路速率" -#: circuits/models/circuits.py:265 +#: netbox/circuits/models/circuits.py:265 msgid "upstream speed (Kbps)" msgstr "上行速率(Kbps)" -#: circuits/models/circuits.py:266 +#: netbox/circuits/models/circuits.py:266 msgid "Upstream speed, if different from port speed" msgstr "上行速度(如果与端口速度不同)" -#: circuits/models/circuits.py:271 +#: netbox/circuits/models/circuits.py:271 msgid "cross-connect ID" msgstr "交叉连接ID" -#: circuits/models/circuits.py:272 +#: netbox/circuits/models/circuits.py:272 msgid "ID of the local cross-connect" msgstr "本地交叉连接ID" -#: circuits/models/circuits.py:277 +#: netbox/circuits/models/circuits.py:277 msgid "patch panel/port(s)" msgstr "配线架/端口" -#: circuits/models/circuits.py:278 +#: netbox/circuits/models/circuits.py:278 msgid "Patch panel ID and port number(s)" msgstr "配线架 ID 和端口号" -#: circuits/models/circuits.py:281 -#: dcim/models/device_component_templates.py:61 -#: dcim/models/device_components.py:68 dcim/models/racks.py:685 -#: extras/models/configs.py:45 extras/models/configs.py:219 -#: extras/models/customfields.py:125 extras/models/models.py:61 -#: extras/models/models.py:158 extras/models/models.py:396 -#: extras/models/models.py:511 extras/models/notifications.py:131 -#: extras/models/staging.py:31 extras/models/tags.py:32 -#: netbox/models/__init__.py:110 netbox/models/__init__.py:145 -#: netbox/models/__init__.py:191 users/models/permissions.py:24 -#: users/models/tokens.py:57 users/models/users.py:33 -#: virtualization/models/virtualmachines.py:289 +#: 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/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 msgid "description" msgstr "描述" -#: circuits/models/circuits.py:294 +#: netbox/circuits/models/circuits.py:294 msgid "circuit termination" msgstr "线路接入" -#: circuits/models/circuits.py:295 +#: netbox/circuits/models/circuits.py:295 msgid "circuit terminations" msgstr "线路接入" -#: circuits/models/circuits.py:308 +#: netbox/circuits/models/circuits.py:308 msgid "" "A circuit termination must attach to either a site or a provider network." msgstr "线路终结必须连接到站点或运营商网络。" -#: circuits/models/circuits.py:310 +#: netbox/circuits/models/circuits.py:310 msgid "" "A circuit termination cannot attach to both a site and a provider network." msgstr "线路终结不能同时连接到站点和运营商网络。" -#: circuits/models/providers.py:22 circuits/models/providers.py:66 -#: circuits/models/providers.py:104 core/models/data.py:39 -#: core/models/jobs.py:45 dcim/models/device_component_templates.py:43 -#: dcim/models/device_components.py:53 dcim/models/devices.py:593 -#: dcim/models/devices.py:1330 dcim/models/devices.py:1395 -#: dcim/models/power.py:39 dcim/models/power.py:92 dcim/models/racks.py:262 -#: dcim/models/sites.py:138 extras/models/configs.py:36 -#: extras/models/configs.py:215 extras/models/customfields.py:92 -#: extras/models/models.py:56 extras/models/models.py:153 -#: extras/models/models.py:296 extras/models/models.py:392 -#: extras/models/models.py:501 extras/models/models.py:596 -#: extras/models/notifications.py:126 extras/models/scripts.py:30 -#: extras/models/staging.py:26 ipam/models/asns.py:18 ipam/models/fhrp.py:25 -#: ipam/models/services.py:52 ipam/models/services.py:88 -#: ipam/models/vlans.py:36 ipam/models/vlans.py:184 ipam/models/vrfs.py:22 -#: ipam/models/vrfs.py:79 netbox/models/__init__.py:137 -#: netbox/models/__init__.py:181 tenancy/models/contacts.py:64 -#: tenancy/models/tenants.py:20 tenancy/models/tenants.py:45 -#: users/models/permissions.py:20 users/models/users.py:28 -#: virtualization/models/clusters.py:57 -#: virtualization/models/virtualmachines.py:72 -#: virtualization/models/virtualmachines.py:279 vpn/models/crypto.py:24 -#: vpn/models/crypto.py:71 vpn/models/crypto.py:131 vpn/models/crypto.py:183 -#: vpn/models/crypto.py:221 vpn/models/l2vpn.py:22 vpn/models/tunnels.py:35 -#: wireless/models.py:51 +#: 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/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/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 msgid "name" msgstr "名称" -#: circuits/models/providers.py:25 +#: netbox/circuits/models/providers.py:25 msgid "Full name of the provider" msgstr "运营商全称" -#: circuits/models/providers.py:28 dcim/models/devices.py:86 -#: dcim/models/racks.py:137 dcim/models/sites.py:149 -#: extras/models/models.py:506 ipam/models/asns.py:23 ipam/models/vlans.py:40 -#: netbox/models/__init__.py:141 netbox/models/__init__.py:186 -#: tenancy/models/tenants.py:25 tenancy/models/tenants.py:49 -#: vpn/models/l2vpn.py:27 wireless/models.py:56 +#: netbox/circuits/models/providers.py:28 netbox/dcim/models/devices.py:86 +#: 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 msgid "slug" msgstr "缩写" -#: circuits/models/providers.py:42 +#: netbox/circuits/models/providers.py:42 msgid "provider" msgstr "运营商" -#: circuits/models/providers.py:43 +#: netbox/circuits/models/providers.py:43 msgid "providers" msgstr "运营商" -#: circuits/models/providers.py:63 +#: netbox/circuits/models/providers.py:63 msgid "account ID" msgstr "账户ID" -#: circuits/models/providers.py:86 +#: netbox/circuits/models/providers.py:86 msgid "provider account" msgstr "运营商账号" -#: circuits/models/providers.py:87 +#: netbox/circuits/models/providers.py:87 msgid "provider accounts" msgstr "运营商账户" -#: circuits/models/providers.py:115 +#: netbox/circuits/models/providers.py:115 msgid "service ID" msgstr "服务ID" -#: circuits/models/providers.py:126 +#: netbox/circuits/models/providers.py:126 msgid "provider network" msgstr "运营商网络" -#: circuits/models/providers.py:127 +#: netbox/circuits/models/providers.py:127 msgid "provider networks" msgstr "运营商网络" -#: circuits/tables/circuits.py:32 circuits/tables/circuits.py:132 -#: circuits/tables/providers.py:18 circuits/tables/providers.py:69 -#: circuits/tables/providers.py:99 core/tables/data.py:16 -#: core/tables/jobs.py:14 core/tables/plugins.py:44 core/tables/tasks.py:11 -#: core/tables/tasks.py:115 dcim/forms/filtersets.py:63 -#: dcim/forms/object_create.py:43 dcim/tables/devices.py:52 -#: dcim/tables/devices.py:92 dcim/tables/devices.py:134 -#: dcim/tables/devices.py:289 dcim/tables/devices.py:392 -#: dcim/tables/devices.py:433 dcim/tables/devices.py:482 -#: dcim/tables/devices.py:531 dcim/tables/devices.py:648 -#: dcim/tables/devices.py:731 dcim/tables/devices.py:778 -#: dcim/tables/devices.py:841 dcim/tables/devices.py:911 -#: dcim/tables/devices.py:974 dcim/tables/devices.py:994 -#: dcim/tables/devices.py:1023 dcim/tables/devices.py:1053 -#: dcim/tables/devicetypes.py:31 dcim/tables/power.py:22 -#: dcim/tables/power.py:62 dcim/tables/racks.py:24 dcim/tables/racks.py:113 -#: dcim/tables/sites.py:24 dcim/tables/sites.py:51 dcim/tables/sites.py:78 -#: dcim/tables/sites.py:130 extras/forms/filtersets.py:213 -#: extras/tables/tables.py:58 extras/tables/tables.py:122 -#: extras/tables/tables.py:155 extras/tables/tables.py:180 -#: extras/tables/tables.py:246 extras/tables/tables.py:361 -#: extras/tables/tables.py:378 extras/tables/tables.py:401 -#: extras/tables/tables.py:439 extras/tables/tables.py:491 -#: extras/tables/tables.py:514 ipam/forms/bulk_edit.py:407 -#: ipam/forms/filtersets.py:386 ipam/tables/asn.py:16 ipam/tables/ip.py:85 -#: ipam/tables/ip.py:160 ipam/tables/services.py:15 ipam/tables/services.py:40 -#: ipam/tables/vlans.py:64 ipam/tables/vlans.py:114 ipam/tables/vrfs.py:26 -#: ipam/tables/vrfs.py:68 templates/circuits/circuitgroup.html:28 -#: templates/circuits/circuittype.html:22 -#: templates/circuits/provideraccount.html:28 -#: templates/circuits/providernetwork.html:24 -#: templates/core/datasource.html:34 templates/core/job.html:44 -#: templates/core/plugin.html:54 templates/core/rq_worker.html:43 -#: templates/dcim/consoleport.html:28 templates/dcim/consoleserverport.html:28 -#: templates/dcim/devicebay.html:24 templates/dcim/devicerole.html:26 -#: templates/dcim/frontport.html:28 -#: templates/dcim/inc/interface_vlans_table.html:5 -#: templates/dcim/inc/panels/inventory_items.html:18 -#: templates/dcim/interface.html:38 templates/dcim/interface.html:165 -#: templates/dcim/inventoryitem.html:28 -#: templates/dcim/inventoryitemrole.html:18 templates/dcim/location.html:29 -#: templates/dcim/manufacturer.html:36 templates/dcim/modulebay.html:30 -#: templates/dcim/platform.html:29 templates/dcim/poweroutlet.html:28 -#: templates/dcim/powerport.html:28 templates/dcim/rackrole.html:22 -#: templates/dcim/rearport.html:28 templates/dcim/region.html:29 -#: templates/dcim/sitegroup.html:29 -#: templates/dcim/virtualdevicecontext.html:18 -#: templates/extras/configcontext.html:13 -#: templates/extras/configtemplate.html:13 -#: templates/extras/customfield.html:13 templates/extras/customlink.html:13 -#: templates/extras/eventrule.html:13 templates/extras/exporttemplate.html:15 -#: templates/extras/notificationgroup.html:14 -#: templates/extras/savedfilter.html:13 templates/extras/script_list.html:44 -#: templates/extras/tag.html:14 templates/extras/webhook.html:13 -#: templates/ipam/asnrange.html:15 templates/ipam/fhrpgroup.html:30 -#: templates/ipam/rir.html:22 templates/ipam/role.html:22 -#: templates/ipam/routetarget.html:13 templates/ipam/service.html:24 -#: templates/ipam/servicetemplate.html:15 templates/ipam/vlan.html:35 -#: templates/ipam/vlangroup.html:30 templates/tenancy/contact.html:25 -#: templates/tenancy/contactgroup.html:21 -#: templates/tenancy/contactrole.html:18 templates/tenancy/tenantgroup.html:29 -#: templates/users/group.html:17 templates/users/objectpermission.html:17 -#: templates/virtualization/cluster.html:13 -#: templates/virtualization/clustergroup.html:22 -#: templates/virtualization/clustertype.html:22 -#: templates/virtualization/virtualdisk.html:25 -#: templates/virtualization/virtualmachine.html:15 -#: templates/virtualization/vminterface.html:25 -#: templates/vpn/ikepolicy.html:13 templates/vpn/ikeproposal.html:13 -#: templates/vpn/ipsecpolicy.html:13 templates/vpn/ipsecprofile.html:13 -#: templates/vpn/ipsecprofile.html:36 templates/vpn/ipsecprofile.html:69 -#: templates/vpn/ipsecproposal.html:13 templates/vpn/l2vpn.html:14 -#: templates/vpn/tunnel.html:21 templates/vpn/tunnelgroup.html:26 -#: templates/wireless/wirelesslangroup.html:29 tenancy/tables/contacts.py:19 -#: tenancy/tables/contacts.py:41 tenancy/tables/contacts.py:56 -#: tenancy/tables/tenants.py:16 tenancy/tables/tenants.py:38 -#: users/tables.py:62 users/tables.py:76 -#: virtualization/forms/bulk_create.py:20 -#: virtualization/forms/object_create.py:13 -#: virtualization/forms/object_create.py:23 -#: virtualization/tables/clusters.py:17 virtualization/tables/clusters.py:39 -#: virtualization/tables/clusters.py:62 -#: virtualization/tables/virtualmachines.py:55 -#: virtualization/tables/virtualmachines.py:139 -#: virtualization/tables/virtualmachines.py:194 vpn/tables/crypto.py:18 -#: vpn/tables/crypto.py:57 vpn/tables/crypto.py:93 vpn/tables/crypto.py:129 -#: vpn/tables/crypto.py:158 vpn/tables/l2vpn.py:23 vpn/tables/tunnels.py:18 -#: vpn/tables/tunnels.py:40 wireless/tables/wirelesslan.py:18 -#: wireless/tables/wirelesslan.py:79 +#: netbox/circuits/tables/circuits.py:32 +#: netbox/circuits/tables/circuits.py:132 +#: netbox/circuits/tables/providers.py:18 +#: netbox/circuits/tables/providers.py:69 +#: netbox/circuits/tables/providers.py:99 netbox/core/tables/data.py:16 +#: netbox/core/tables/jobs.py:14 netbox/core/tables/plugins.py: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/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/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/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/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 +#: netbox/templates/dcim/consoleserverport.html:28 +#: netbox/templates/dcim/devicebay.html:24 +#: netbox/templates/dcim/devicerole.html:26 +#: netbox/templates/dcim/frontport.html:28 +#: netbox/templates/dcim/inc/interface_vlans_table.html:5 +#: netbox/templates/dcim/inc/panels/inventory_items.html:18 +#: netbox/templates/dcim/interface.html:38 +#: netbox/templates/dcim/interface.html:165 +#: netbox/templates/dcim/inventoryitem.html:28 +#: netbox/templates/dcim/inventoryitemrole.html:18 +#: netbox/templates/dcim/location.html:29 +#: netbox/templates/dcim/manufacturer.html:36 +#: netbox/templates/dcim/modulebay.html:30 +#: netbox/templates/dcim/platform.html:29 +#: netbox/templates/dcim/poweroutlet.html:28 +#: netbox/templates/dcim/powerport.html:28 +#: netbox/templates/dcim/rackrole.html:22 +#: netbox/templates/dcim/rearport.html:28 netbox/templates/dcim/region.html:29 +#: netbox/templates/dcim/sitegroup.html:29 +#: netbox/templates/dcim/virtualdevicecontext.html:18 +#: netbox/templates/extras/configcontext.html:13 +#: netbox/templates/extras/configtemplate.html:13 +#: netbox/templates/extras/customfield.html:13 +#: netbox/templates/extras/customlink.html:13 +#: netbox/templates/extras/eventrule.html:13 +#: netbox/templates/extras/exporttemplate.html:15 +#: netbox/templates/extras/notificationgroup.html:14 +#: netbox/templates/extras/savedfilter.html:13 +#: netbox/templates/extras/script_list.html:45 +#: netbox/templates/extras/tag.html:14 netbox/templates/extras/webhook.html:13 +#: netbox/templates/ipam/asnrange.html:15 +#: netbox/templates/ipam/fhrpgroup.html:30 netbox/templates/ipam/rir.html:22 +#: netbox/templates/ipam/role.html:22 +#: netbox/templates/ipam/routetarget.html:13 +#: netbox/templates/ipam/service.html:24 +#: netbox/templates/ipam/servicetemplate.html:15 +#: netbox/templates/ipam/vlan.html:35 netbox/templates/ipam/vlangroup.html:30 +#: netbox/templates/tenancy/contact.html:25 +#: netbox/templates/tenancy/contactgroup.html:21 +#: netbox/templates/tenancy/contactrole.html:18 +#: netbox/templates/tenancy/tenantgroup.html:29 +#: netbox/templates/users/group.html:17 +#: netbox/templates/users/objectpermission.html:17 +#: netbox/templates/virtualization/cluster.html:13 +#: netbox/templates/virtualization/clustergroup.html:22 +#: netbox/templates/virtualization/clustertype.html:22 +#: netbox/templates/virtualization/virtualdisk.html:25 +#: netbox/templates/virtualization/virtualmachine.html:15 +#: netbox/templates/virtualization/vminterface.html:25 +#: netbox/templates/vpn/ikepolicy.html:13 +#: netbox/templates/vpn/ikeproposal.html:13 +#: netbox/templates/vpn/ipsecpolicy.html:13 +#: netbox/templates/vpn/ipsecprofile.html:13 +#: netbox/templates/vpn/ipsecprofile.html:36 +#: netbox/templates/vpn/ipsecprofile.html:69 +#: netbox/templates/vpn/ipsecproposal.html:13 +#: netbox/templates/vpn/l2vpn.html:14 netbox/templates/vpn/tunnel.html:21 +#: netbox/templates/vpn/tunnelgroup.html:26 +#: netbox/templates/wireless/wirelesslangroup.html:29 +#: netbox/tenancy/tables/contacts.py:19 netbox/tenancy/tables/contacts.py:41 +#: netbox/tenancy/tables/contacts.py:56 netbox/tenancy/tables/tenants.py:16 +#: netbox/tenancy/tables/tenants.py:38 netbox/users/tables.py:62 +#: netbox/users/tables.py:76 netbox/virtualization/forms/bulk_create.py:20 +#: netbox/virtualization/forms/object_create.py:13 +#: netbox/virtualization/forms/object_create.py:23 +#: netbox/virtualization/tables/clusters.py:17 +#: netbox/virtualization/tables/clusters.py:39 +#: netbox/virtualization/tables/clusters.py:62 +#: netbox/virtualization/tables/virtualmachines.py:55 +#: netbox/virtualization/tables/virtualmachines.py:139 +#: netbox/virtualization/tables/virtualmachines.py:194 +#: netbox/vpn/tables/crypto.py:18 netbox/vpn/tables/crypto.py:57 +#: netbox/vpn/tables/crypto.py:93 netbox/vpn/tables/crypto.py:129 +#: netbox/vpn/tables/crypto.py:158 netbox/vpn/tables/l2vpn.py:23 +#: netbox/vpn/tables/tunnels.py:18 netbox/vpn/tables/tunnels.py:40 +#: netbox/wireless/tables/wirelesslan.py:18 +#: netbox/wireless/tables/wirelesslan.py:79 msgid "Name" msgstr "名称" -#: circuits/tables/circuits.py:41 circuits/tables/circuits.py:138 -#: circuits/tables/providers.py:45 circuits/tables/providers.py:79 -#: netbox/navigation/menu.py:266 netbox/navigation/menu.py:270 -#: netbox/navigation/menu.py:272 templates/circuits/provider.html:57 -#: templates/circuits/provideraccount.html:44 -#: templates/circuits/providernetwork.html:50 +#: 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/templates/circuits/provider.html:57 +#: netbox/templates/circuits/provideraccount.html:44 +#: netbox/templates/circuits/providernetwork.html:50 msgid "Circuits" msgstr "广域网线路" -#: circuits/tables/circuits.py:55 templates/circuits/circuit.html:26 +#: netbox/circuits/tables/circuits.py:55 +#: netbox/templates/circuits/circuit.html:26 msgid "Circuit ID" msgstr "线路ID" -#: circuits/tables/circuits.py:69 wireless/forms/model_forms.py:160 +#: netbox/circuits/tables/circuits.py:69 +#: netbox/wireless/forms/model_forms.py:160 msgid "Side A" msgstr "A端" -#: circuits/tables/circuits.py:74 +#: netbox/circuits/tables/circuits.py:74 msgid "Side Z" msgstr "Z端" -#: circuits/tables/circuits.py:77 templates/circuits/circuit.html:55 +#: netbox/circuits/tables/circuits.py:77 +#: netbox/templates/circuits/circuit.html:55 msgid "Commit Rate" msgstr "承诺速率" -#: circuits/tables/circuits.py:80 circuits/tables/providers.py:48 -#: circuits/tables/providers.py:82 circuits/tables/providers.py:107 -#: dcim/tables/devices.py:1036 dcim/tables/devicetypes.py:92 -#: dcim/tables/modules.py:29 dcim/tables/modules.py:72 dcim/tables/power.py:39 -#: dcim/tables/power.py:96 dcim/tables/racks.py:84 dcim/tables/racks.py:145 -#: dcim/tables/racks.py:225 dcim/tables/sites.py:108 -#: extras/tables/tables.py:582 ipam/tables/asn.py:69 ipam/tables/fhrp.py:34 -#: ipam/tables/ip.py:136 ipam/tables/ip.py:275 ipam/tables/ip.py:329 -#: ipam/tables/ip.py:397 ipam/tables/services.py:24 ipam/tables/services.py:54 -#: ipam/tables/vlans.py:145 ipam/tables/vrfs.py:47 ipam/tables/vrfs.py:72 -#: templates/dcim/htmx/cable_edit.html:89 templates/generic/bulk_edit.html:86 -#: templates/inc/panels/comments.html:5 tenancy/tables/contacts.py:68 -#: tenancy/tables/tenants.py:46 utilities/forms/fields/fields.py:29 -#: virtualization/tables/clusters.py:91 -#: virtualization/tables/virtualmachines.py:82 vpn/tables/crypto.py:37 -#: vpn/tables/crypto.py:74 vpn/tables/crypto.py:109 vpn/tables/crypto.py:140 -#: vpn/tables/crypto.py:173 vpn/tables/l2vpn.py:37 vpn/tables/tunnels.py:61 -#: wireless/tables/wirelesslan.py:27 wireless/tables/wirelesslan.py:58 +#: netbox/circuits/tables/circuits.py: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:72 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/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/vpn/tables/crypto.py:37 netbox/vpn/tables/crypto.py:74 +#: netbox/vpn/tables/crypto.py:109 netbox/vpn/tables/crypto.py:140 +#: netbox/vpn/tables/crypto.py:173 netbox/vpn/tables/l2vpn.py:37 +#: netbox/vpn/tables/tunnels.py:61 netbox/wireless/tables/wirelesslan.py:27 +#: netbox/wireless/tables/wirelesslan.py:58 msgid "Comments" msgstr "评论" -#: circuits/tables/circuits.py:86 templates/tenancy/contact.html:84 -#: tenancy/tables/contacts.py:73 +#: netbox/circuits/tables/circuits.py:86 +#: netbox/templates/tenancy/contact.html:84 +#: netbox/tenancy/tables/contacts.py:73 msgid "Assignments" msgstr "分配" -#: circuits/tables/providers.py:23 +#: netbox/circuits/tables/providers.py:23 msgid "Accounts" msgstr "账户" -#: circuits/tables/providers.py:29 +#: netbox/circuits/tables/providers.py:29 msgid "Account Count" msgstr "账户统计" -#: circuits/tables/providers.py:39 dcim/tables/sites.py:100 +#: netbox/circuits/tables/providers.py:39 netbox/dcim/tables/sites.py:100 msgid "ASN Count" msgstr "ASN统计" -#: circuits/views.py:331 +#: netbox/circuits/views.py:331 #, python-brace-format msgid "No terminations have been defined for circuit {circuit}." msgstr "尚未为电路定义终端 {circuit}。" -#: circuits/views.py:380 +#: netbox/circuits/views.py:380 #, python-brace-format msgid "Swapped terminations for circuit {circuit}." msgstr "已将终端交换为电路 {circuit}。" -#: core/api/views.py:39 +#: netbox/core/api/views.py:39 msgid "This user does not have permission to synchronize this data source." msgstr "该用户无权同步该数据源。" -#: core/choices.py:18 +#: netbox/core/choices.py:18 msgid "New" msgstr "新建" -#: core/choices.py:19 core/constants.py:18 core/tables/tasks.py:15 -#: templates/core/rq_task.html:77 +#: netbox/core/choices.py:19 netbox/core/constants.py:18 +#: netbox/core/tables/tasks.py:15 netbox/templates/core/rq_task.html:77 msgid "Queued" msgstr "排队等候" -#: core/choices.py:20 +#: netbox/core/choices.py:20 msgid "Syncing" msgstr "正在同步" -#: core/choices.py:21 core/choices.py:57 core/tables/jobs.py:41 -#: templates/core/job.html:86 +#: netbox/core/choices.py:21 netbox/core/choices.py:57 +#: netbox/core/tables/jobs.py:41 netbox/templates/core/job.html:86 msgid "Completed" msgstr "完成" -#: core/choices.py:22 core/choices.py:59 core/constants.py:20 -#: core/tables/tasks.py:34 dcim/choices.py:187 dcim/choices.py:239 -#: dcim/choices.py:1607 virtualization/choices.py:47 +#: netbox/core/choices.py:22 netbox/core/choices.py:59 +#: netbox/core/constants.py:20 netbox/core/tables/tasks.py:34 +#: netbox/dcim/choices.py:187 netbox/dcim/choices.py:239 +#: netbox/dcim/choices.py:1609 netbox/virtualization/choices.py:47 msgid "Failed" msgstr "故障" -#: core/choices.py:35 netbox/navigation/menu.py:335 -#: netbox/navigation/menu.py:339 templates/extras/script/base.html:14 -#: templates/extras/script_list.html:7 templates/extras/script_list.html:12 -#: templates/extras/script_result.html:17 +#: netbox/core/choices.py:35 netbox/netbox/navigation/menu.py:335 +#: netbox/netbox/navigation/menu.py:339 +#: netbox/templates/extras/script/base.html:14 +#: netbox/templates/extras/script_list.html:7 +#: netbox/templates/extras/script_list.html:12 +#: netbox/templates/extras/script_result.html:17 msgid "Scripts" msgstr "脚本" -#: core/choices.py:36 templates/extras/report/base.html:13 +#: netbox/core/choices.py:36 netbox/templates/extras/report/base.html:13 msgid "Reports" msgstr "报告" -#: core/choices.py:54 +#: netbox/core/choices.py:54 msgid "Pending" msgstr "正在挂起" -#: core/choices.py:55 core/constants.py:23 core/tables/jobs.py:32 -#: core/tables/tasks.py:38 templates/core/job.html:73 +#: netbox/core/choices.py:55 netbox/core/constants.py:23 +#: netbox/core/tables/jobs.py:32 netbox/core/tables/tasks.py:38 +#: netbox/templates/core/job.html:73 msgid "Scheduled" msgstr "计划" -#: core/choices.py:56 +#: netbox/core/choices.py:56 msgid "Running" msgstr "运行中" -#: core/choices.py:58 +#: netbox/core/choices.py:58 msgid "Errored" msgstr "错误" -#: core/choices.py:87 core/tables/plugins.py:63 -#: templates/generic/object.html:61 +#: netbox/core/choices.py:87 netbox/core/tables/plugins.py:63 +#: netbox/templates/generic/object.html:61 msgid "Updated" msgstr "更新于" -#: core/choices.py:88 +#: netbox/core/choices.py:88 msgid "Deleted" msgstr "删除" -#: core/constants.py:19 core/tables/tasks.py:30 +#: netbox/core/constants.py:19 netbox/core/tables/tasks.py:30 msgid "Finished" msgstr "已完成" -#: core/constants.py:21 core/tables/jobs.py:38 templates/core/job.html:82 -#: templates/extras/htmx/script_result.html:8 +#: netbox/core/constants.py:21 netbox/core/tables/jobs.py:38 +#: netbox/templates/core/job.html:82 +#: netbox/templates/extras/htmx/script_result.html:8 msgid "Started" msgstr "开始于" -#: core/constants.py:22 core/tables/tasks.py:26 +#: netbox/core/constants.py:22 netbox/core/tables/tasks.py:26 msgid "Deferred" msgstr "延期" -#: core/constants.py:24 +#: netbox/core/constants.py:24 msgid "Stopped" msgstr "已停止" -#: core/constants.py:25 +#: netbox/core/constants.py:25 msgid "Cancelled" msgstr "已取消" -#: core/data_backends.py:32 core/tables/plugins.py:51 -#: templates/core/plugin.html:88 templates/dcim/interface.html:216 +#: netbox/core/data_backends.py:32 netbox/core/tables/plugins.py:51 +#: netbox/templates/core/plugin.html:88 +#: netbox/templates/dcim/interface.html:216 msgid "Local" msgstr "本地" -#: core/data_backends.py:50 core/tables/change_logging.py:20 -#: templates/account/profile.html:15 templates/users/user.html:17 -#: users/tables.py:31 +#: netbox/core/data_backends.py:50 netbox/core/tables/change_logging.py:20 +#: netbox/templates/account/profile.html:15 +#: netbox/templates/users/user.html:17 netbox/users/tables.py:31 msgid "Username" msgstr "用户名" -#: core/data_backends.py:52 core/data_backends.py:58 +#: netbox/core/data_backends.py:52 netbox/core/data_backends.py:58 msgid "Only used for cloning with HTTP(S)" msgstr "仅用于通过 HTTP(S) 进行克隆" -#: core/data_backends.py:56 templates/account/base.html:23 -#: templates/account/password.html:12 users/forms/model_forms.py:170 +#: netbox/core/data_backends.py:56 netbox/templates/account/base.html:23 +#: netbox/templates/account/password.html:12 +#: netbox/users/forms/model_forms.py:170 msgid "Password" msgstr "密码" -#: core/data_backends.py:62 +#: netbox/core/data_backends.py:62 msgid "Branch" msgstr "分支" -#: core/data_backends.py:120 +#: netbox/core/data_backends.py:120 #, python-brace-format msgid "Fetching remote data failed ({name}): {error}" msgstr "获取远程数据失败({name}): {error}" -#: core/data_backends.py:133 +#: netbox/core/data_backends.py:133 msgid "AWS access key ID" msgstr "AWS access key ID" -#: core/data_backends.py:137 +#: netbox/core/data_backends.py:137 msgid "AWS secret access key" msgstr "AWS secret access key" -#: core/events.py:27 +#: netbox/core/events.py:27 msgid "Object created" msgstr "对象已创建" -#: core/events.py:28 +#: netbox/core/events.py:28 msgid "Object updated" msgstr "对象已更新" -#: core/events.py:29 +#: netbox/core/events.py:29 msgid "Object deleted" msgstr "对象已删除" -#: core/events.py:30 +#: netbox/core/events.py:30 msgid "Job started" msgstr "工作已开始" -#: core/events.py:31 +#: netbox/core/events.py:31 msgid "Job completed" msgstr "任务已完成" -#: core/events.py:32 +#: netbox/core/events.py:32 msgid "Job failed" msgstr "作业失败" -#: core/events.py:33 +#: netbox/core/events.py:33 msgid "Job errored" msgstr "作业出错" -#: core/filtersets.py:53 extras/filtersets.py:250 extras/filtersets.py:633 -#: extras/filtersets.py:661 +#: netbox/core/filtersets.py:53 netbox/extras/filtersets.py:250 +#: netbox/extras/filtersets.py:633 netbox/extras/filtersets.py:661 msgid "Data source (ID)" msgstr "数据源 (ID)" -#: core/filtersets.py:59 +#: netbox/core/filtersets.py:59 msgid "Data source (name)" msgstr "数据源 (name)" -#: core/filtersets.py:145 dcim/filtersets.py:501 extras/filtersets.py:287 -#: extras/filtersets.py:331 extras/filtersets.py:353 extras/filtersets.py:413 -#: users/filtersets.py:28 +#: netbox/core/filtersets.py:145 netbox/dcim/filtersets.py:501 +#: 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 msgid "User (ID)" msgstr "用户(ID)" -#: core/filtersets.py:151 +#: netbox/core/filtersets.py:151 msgid "User name" msgstr "用户名" -#: core/forms/bulk_edit.py:25 core/forms/filtersets.py:43 -#: core/tables/data.py:26 dcim/forms/bulk_edit.py:1122 -#: dcim/forms/bulk_edit.py:1400 dcim/forms/filtersets.py:1370 -#: dcim/tables/devices.py:553 dcim/tables/devicetypes.py:224 -#: extras/forms/bulk_edit.py:123 extras/forms/bulk_edit.py:187 -#: extras/forms/bulk_edit.py:246 extras/forms/filtersets.py:142 -#: extras/forms/filtersets.py:229 extras/forms/filtersets.py:294 -#: extras/tables/tables.py:162 extras/tables/tables.py:253 -#: extras/tables/tables.py:415 netbox/preferences.py:22 -#: templates/core/datasource.html:42 templates/dcim/interface.html:61 -#: templates/extras/customlink.html:17 templates/extras/eventrule.html:17 -#: templates/extras/savedfilter.html:25 -#: templates/users/objectpermission.html:25 -#: templates/virtualization/vminterface.html:29 users/forms/bulk_edit.py:89 -#: users/forms/filtersets.py:70 users/tables.py:83 -#: virtualization/forms/bulk_edit.py:217 -#: virtualization/forms/filtersets.py:215 +#: 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/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/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 +#: netbox/templates/dcim/interface.html:61 +#: netbox/templates/extras/customlink.html:17 +#: netbox/templates/extras/eventrule.html:17 +#: netbox/templates/extras/savedfilter.html:25 +#: netbox/templates/users/objectpermission.html:25 +#: netbox/templates/virtualization/vminterface.html:29 +#: netbox/users/forms/bulk_edit.py:89 netbox/users/forms/filtersets.py:70 +#: netbox/users/tables.py:83 netbox/virtualization/forms/bulk_edit.py:217 +#: netbox/virtualization/forms/filtersets.py:215 msgid "Enabled" msgstr "已启用" -#: core/forms/bulk_edit.py:34 extras/forms/model_forms.py:285 -#: templates/extras/savedfilter.html:52 vpn/forms/filtersets.py:97 -#: vpn/forms/filtersets.py:127 vpn/forms/filtersets.py:151 -#: vpn/forms/filtersets.py:170 vpn/forms/model_forms.py:301 -#: vpn/forms/model_forms.py:321 vpn/forms/model_forms.py:337 -#: vpn/forms/model_forms.py:357 vpn/forms/model_forms.py:380 +#: netbox/core/forms/bulk_edit.py:34 netbox/extras/forms/model_forms.py:285 +#: 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 msgid "Parameters" msgstr "参数" -#: core/forms/bulk_edit.py:38 templates/core/datasource.html:68 +#: netbox/core/forms/bulk_edit.py:38 netbox/templates/core/datasource.html:68 msgid "Ignore rules" msgstr "忽略规则" -#: core/forms/filtersets.py:30 core/forms/model_forms.py:97 -#: extras/forms/model_forms.py:248 extras/forms/model_forms.py:578 -#: extras/forms/model_forms.py:632 extras/tables/tables.py:191 -#: extras/tables/tables.py:483 extras/tables/tables.py:518 -#: templates/core/datasource.html:31 -#: templates/dcim/device/render_config.html:18 -#: templates/extras/configcontext.html:29 -#: templates/extras/configtemplate.html:21 -#: templates/extras/exporttemplate.html:35 -#: templates/virtualization/virtualmachine/render_config.html:18 +#: netbox/core/forms/filtersets.py: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/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 msgid "Data Source" msgstr "数据源" -#: core/forms/filtersets.py:55 core/forms/mixins.py:21 +#: netbox/core/forms/filtersets.py:55 netbox/core/forms/mixins.py:21 msgid "File" msgstr "文件" -#: core/forms/filtersets.py:60 core/forms/mixins.py:16 -#: extras/forms/filtersets.py:170 extras/forms/filtersets.py:328 -#: extras/forms/filtersets.py:413 +#: 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 msgid "Data source" msgstr "数据源" -#: core/forms/filtersets.py:70 extras/forms/filtersets.py:440 +#: netbox/core/forms/filtersets.py:70 netbox/extras/forms/filtersets.py:440 msgid "Creation" msgstr "创建" -#: core/forms/filtersets.py:74 core/forms/filtersets.py:160 -#: extras/forms/filtersets.py:461 extras/tables/tables.py:220 -#: extras/tables/tables.py:294 extras/tables/tables.py:326 -#: extras/tables/tables.py:571 templates/core/job.html:38 -#: templates/core/objectchange.html:52 tenancy/tables/contacts.py:90 -#: vpn/tables/l2vpn.py:59 +#: 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/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 +#: netbox/tenancy/tables/contacts.py:90 netbox/vpn/tables/l2vpn.py:59 msgid "Object Type" msgstr "目标类型" -#: core/forms/filtersets.py:84 +#: netbox/core/forms/filtersets.py:84 msgid "Created after" msgstr "之后创建" -#: core/forms/filtersets.py:89 +#: netbox/core/forms/filtersets.py:89 msgid "Created before" msgstr "之前创建" -#: core/forms/filtersets.py:94 +#: netbox/core/forms/filtersets.py:94 msgid "Scheduled after" msgstr "计划在之后" -#: core/forms/filtersets.py:99 +#: netbox/core/forms/filtersets.py:99 msgid "Scheduled before" msgstr "计划在之前" -#: core/forms/filtersets.py:104 +#: netbox/core/forms/filtersets.py:104 msgid "Started after" msgstr "之后开始" -#: core/forms/filtersets.py:109 +#: netbox/core/forms/filtersets.py:109 msgid "Started before" msgstr "之前开始" -#: core/forms/filtersets.py:114 +#: netbox/core/forms/filtersets.py:114 msgid "Completed after" msgstr "完成后" -#: core/forms/filtersets.py:119 +#: netbox/core/forms/filtersets.py:119 msgid "Completed before" msgstr "完成后" -#: core/forms/filtersets.py:126 core/forms/filtersets.py:155 -#: dcim/forms/bulk_edit.py:456 dcim/forms/filtersets.py:418 -#: dcim/forms/filtersets.py:462 dcim/forms/model_forms.py:316 -#: extras/forms/filtersets.py:456 extras/forms/filtersets.py:475 -#: extras/tables/tables.py:302 extras/tables/tables.py:342 -#: templates/core/objectchange.html:36 templates/dcim/rackreservation.html:58 -#: templates/extras/savedfilter.html:21 templates/inc/user_menu.html:33 -#: templates/users/token.html:21 templates/users/user.html:6 -#: templates/users/user.html:14 users/filtersets.py:107 -#: users/filtersets.py:174 users/forms/filtersets.py:84 -#: users/forms/filtersets.py:125 users/forms/model_forms.py:155 -#: users/forms/model_forms.py:192 users/tables.py:19 +#: 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/extras/tables/tables.py:302 netbox/extras/tables/tables.py:342 +#: netbox/templates/core/objectchange.html:36 +#: netbox/templates/dcim/rackreservation.html:58 +#: netbox/templates/extras/savedfilter.html:21 +#: netbox/templates/inc/user_menu.html:33 netbox/templates/users/token.html:21 +#: netbox/templates/users/user.html:6 netbox/templates/users/user.html:14 +#: netbox/users/filtersets.py:107 netbox/users/filtersets.py:174 +#: netbox/users/forms/filtersets.py:84 netbox/users/forms/filtersets.py:125 +#: netbox/users/forms/model_forms.py:155 netbox/users/forms/model_forms.py:192 +#: netbox/users/tables.py:19 msgid "User" msgstr "用户" -#: core/forms/filtersets.py:134 core/tables/change_logging.py:15 -#: extras/tables/tables.py:609 extras/tables/tables.py:646 -#: templates/core/objectchange.html:32 +#: netbox/core/forms/filtersets.py:134 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 "时间" -#: core/forms/filtersets.py:139 extras/forms/filtersets.py:445 +#: netbox/core/forms/filtersets.py:139 netbox/extras/forms/filtersets.py:445 msgid "After" msgstr "之后" -#: core/forms/filtersets.py:144 extras/forms/filtersets.py:450 +#: netbox/core/forms/filtersets.py:144 netbox/extras/forms/filtersets.py:450 msgid "Before" msgstr "之前" -#: core/forms/filtersets.py:148 core/tables/change_logging.py:29 -#: extras/forms/model_forms.py:396 templates/core/objectchange.html:46 -#: templates/extras/eventrule.html:71 +#: netbox/core/forms/filtersets.py:148 netbox/core/tables/change_logging.py:29 +#: netbox/extras/forms/model_forms.py:396 +#: netbox/templates/core/objectchange.html:46 +#: netbox/templates/extras/eventrule.html:71 msgid "Action" msgstr "动作" -#: core/forms/model_forms.py:54 core/tables/data.py:46 -#: templates/core/datafile.html:27 templates/extras/report/base.html:33 -#: templates/extras/script/base.html:32 +#: netbox/core/forms/model_forms.py:54 netbox/core/tables/data.py:46 +#: netbox/templates/core/datafile.html:27 +#: netbox/templates/extras/report/base.html:33 +#: netbox/templates/extras/script/base.html:32 msgid "Source" msgstr "源" -#: core/forms/model_forms.py:58 +#: netbox/core/forms/model_forms.py:58 msgid "Backend Parameters" msgstr "后台参数" -#: core/forms/model_forms.py:96 +#: netbox/core/forms/model_forms.py:96 msgid "File Upload" msgstr "文件上传" -#: core/forms/model_forms.py:108 +#: netbox/core/forms/model_forms.py:108 msgid "Cannot upload a file and sync from an existing file" msgstr "无法上传文件,也不能从已经存在的文件进行同步" -#: core/forms/model_forms.py:110 +#: netbox/core/forms/model_forms.py:110 msgid "Must upload a file or select a data file to sync" msgstr "必须上传文件或选择数据文件进行同步" -#: core/forms/model_forms.py:153 templates/dcim/rack_elevation_list.html:6 +#: netbox/core/forms/model_forms.py:153 +#: netbox/templates/dcim/rack_elevation_list.html:6 msgid "Rack Elevations" msgstr "机柜立面图" -#: core/forms/model_forms.py:157 dcim/choices.py:1518 -#: dcim/forms/bulk_edit.py:969 dcim/forms/bulk_edit.py:1357 -#: dcim/forms/bulk_edit.py:1375 dcim/tables/racks.py:158 -#: netbox/navigation/menu.py:291 netbox/navigation/menu.py:295 +#: 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 msgid "Power" msgstr "电源" -#: core/forms/model_forms.py:159 netbox/navigation/menu.py:154 -#: templates/core/inc/config_data.html:37 +#: netbox/core/forms/model_forms.py:159 netbox/netbox/navigation/menu.py:154 +#: netbox/templates/core/inc/config_data.html:37 msgid "IPAM" msgstr "IP地址管理" -#: core/forms/model_forms.py:160 netbox/navigation/menu.py:230 -#: templates/core/inc/config_data.html:50 vpn/forms/bulk_edit.py:77 -#: vpn/forms/filtersets.py:43 vpn/forms/model_forms.py:61 -#: vpn/forms/model_forms.py:146 +#: netbox/core/forms/model_forms.py:160 netbox/netbox/navigation/menu.py:230 +#: netbox/templates/core/inc/config_data.html:50 +#: netbox/vpn/forms/bulk_edit.py:77 netbox/vpn/forms/filtersets.py:43 +#: netbox/vpn/forms/model_forms.py:61 netbox/vpn/forms/model_forms.py:146 msgid "Security" msgstr "安全" -#: core/forms/model_forms.py:161 templates/core/inc/config_data.html:59 +#: netbox/core/forms/model_forms.py:161 +#: netbox/templates/core/inc/config_data.html:59 msgid "Banners" msgstr "横幅" -#: core/forms/model_forms.py:162 templates/core/inc/config_data.html:80 +#: netbox/core/forms/model_forms.py:162 +#: netbox/templates/core/inc/config_data.html:80 msgid "Pagination" msgstr "分页" -#: core/forms/model_forms.py:163 extras/forms/bulk_edit.py:92 -#: extras/forms/filtersets.py:47 extras/forms/model_forms.py:116 -#: extras/forms/model_forms.py:129 templates/core/inc/config_data.html:93 +#: 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/model_forms.py:129 +#: netbox/templates/core/inc/config_data.html:93 msgid "Validation" msgstr "验证" -#: core/forms/model_forms.py:164 templates/account/preferences.html:6 +#: netbox/core/forms/model_forms.py:164 +#: netbox/templates/account/preferences.html:6 msgid "User Preferences" msgstr "用户首选项" -#: core/forms/model_forms.py:167 dcim/forms/filtersets.py:732 -#: templates/core/inc/config_data.html:127 users/forms/model_forms.py:64 +#: netbox/core/forms/model_forms.py:167 netbox/dcim/forms/filtersets.py:732 +#: netbox/templates/core/inc/config_data.html:127 +#: netbox/users/forms/model_forms.py:64 msgid "Miscellaneous" msgstr "杂项" -#: core/forms/model_forms.py:169 +#: netbox/core/forms/model_forms.py:169 msgid "Config Revision" msgstr "配置修订" -#: core/forms/model_forms.py:208 +#: netbox/core/forms/model_forms.py:208 msgid "This parameter has been defined statically and cannot be modified." msgstr "该参数已被静态定义,无法修改。" -#: core/forms/model_forms.py:216 +#: netbox/core/forms/model_forms.py:216 #, python-brace-format msgid "Current value: {value}" msgstr "当前变量: {value}" -#: core/forms/model_forms.py:218 +#: netbox/core/forms/model_forms.py:218 msgid " (default)" msgstr "(默认)" -#: core/models/change_logging.py:29 +#: netbox/core/models/change_logging.py:29 msgid "time" msgstr "时间" -#: core/models/change_logging.py:42 +#: netbox/core/models/change_logging.py:42 msgid "user name" msgstr "用户名" -#: core/models/change_logging.py:47 +#: netbox/core/models/change_logging.py:47 msgid "request ID" msgstr "请求ID" -#: core/models/change_logging.py:52 extras/models/staging.py:69 +#: netbox/core/models/change_logging.py:52 netbox/extras/models/staging.py:69 msgid "action" msgstr "动作" -#: core/models/change_logging.py:86 +#: netbox/core/models/change_logging.py:86 msgid "pre-change data" msgstr "变更前配置" -#: core/models/change_logging.py:92 +#: netbox/core/models/change_logging.py:92 msgid "post-change data" msgstr "变更后配置" -#: core/models/change_logging.py:106 +#: netbox/core/models/change_logging.py:106 msgid "object change" msgstr "变更的对象" -#: core/models/change_logging.py:107 +#: netbox/core/models/change_logging.py:107 msgid "object changes" msgstr "变更的对象" -#: core/models/change_logging.py:123 +#: netbox/core/models/change_logging.py:123 #, python-brace-format msgid "Change logging is not supported for this object type ({type})." msgstr "此对象类型 ({type}) 不支持更改日志记录。" -#: core/models/config.py:18 core/models/data.py:266 core/models/files.py:27 -#: core/models/jobs.py:49 extras/models/models.py:730 -#: extras/models/notifications.py:39 extras/models/notifications.py:186 -#: netbox/models/features.py:53 users/models/tokens.py:32 +#: netbox/core/models/config.py:18 netbox/core/models/data.py:266 +#: 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/notifications.py:186 +#: netbox/netbox/models/features.py:53 netbox/users/models/tokens.py:32 msgid "created" msgstr "已创建" -#: core/models/config.py:22 +#: netbox/core/models/config.py:22 msgid "comment" msgstr "评论/注释" -#: core/models/config.py:29 +#: netbox/core/models/config.py:29 msgid "configuration data" msgstr "配置数据" -#: core/models/config.py:36 +#: netbox/core/models/config.py:36 msgid "config revision" msgstr "配置修订" -#: core/models/config.py:37 +#: netbox/core/models/config.py:37 msgid "config revisions" msgstr "配置修订" -#: core/models/config.py:41 +#: netbox/core/models/config.py:41 msgid "Default configuration" msgstr "默认配置" -#: core/models/config.py:43 +#: netbox/core/models/config.py:43 msgid "Current configuration" msgstr "当前配置" -#: core/models/config.py:44 +#: netbox/core/models/config.py:44 #, python-brace-format msgid "Config revision #{id}" msgstr "配置修订#{id}" -#: core/models/data.py:44 dcim/models/cables.py:43 -#: dcim/models/device_component_templates.py:203 -#: dcim/models/device_component_templates.py:237 -#: dcim/models/device_component_templates.py:272 -#: dcim/models/device_component_templates.py:334 -#: dcim/models/device_component_templates.py:413 -#: dcim/models/device_component_templates.py:512 -#: dcim/models/device_component_templates.py:612 -#: dcim/models/device_components.py:283 dcim/models/device_components.py:312 -#: dcim/models/device_components.py:345 dcim/models/device_components.py:463 -#: dcim/models/device_components.py:605 dcim/models/device_components.py:970 -#: dcim/models/device_components.py:1044 dcim/models/power.py:102 -#: extras/models/customfields.py:78 extras/models/search.py:41 -#: virtualization/models/clusters.py:61 vpn/models/l2vpn.py:32 +#: 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/extras/models/search.py:41 +#: netbox/virtualization/models/clusters.py:61 netbox/vpn/models/l2vpn.py:32 msgid "type" msgstr "类型" -#: core/models/data.py:49 extras/choices.py:37 extras/models/models.py:164 -#: extras/tables/tables.py:656 templates/core/datasource.html:58 -#: templates/core/plugin.html:66 +#: netbox/core/models/data.py:49 netbox/extras/choices.py:37 +#: netbox/extras/models/models.py:164 netbox/extras/tables/tables.py:656 +#: netbox/templates/core/datasource.html:58 +#: netbox/templates/core/plugin.html:66 msgid "URL" msgstr "URL" -#: core/models/data.py:59 dcim/models/device_component_templates.py:418 -#: dcim/models/device_components.py:512 extras/models/models.py:70 -#: extras/models/models.py:301 extras/models/models.py:526 -#: users/models/permissions.py:29 +#: netbox/core/models/data.py:59 +#: netbox/dcim/models/device_component_templates.py:418 +#: netbox/dcim/models/device_components.py:512 +#: 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" msgstr "已启用" -#: core/models/data.py:63 +#: netbox/core/models/data.py:63 msgid "ignore rules" msgstr "忽略规则" -#: core/models/data.py:65 +#: netbox/core/models/data.py:65 msgid "Patterns (one per line) matching files to ignore when syncing" msgstr "模式(每行一个)匹配同步时要忽略的文件" -#: core/models/data.py:68 extras/models/models.py:534 +#: netbox/core/models/data.py:68 netbox/extras/models/models.py:534 msgid "parameters" msgstr "参数" -#: core/models/data.py:73 +#: netbox/core/models/data.py:73 msgid "last synced" msgstr "最后同步" -#: core/models/data.py:81 +#: netbox/core/models/data.py:81 msgid "data source" msgstr "数据源" -#: core/models/data.py:82 +#: netbox/core/models/data.py:82 msgid "data sources" msgstr "数据源" -#: core/models/data.py:122 +#: netbox/core/models/data.py:122 #, python-brace-format msgid "Unknown backend type: {type}" msgstr "未知后端类型: {type}" -#: core/models/data.py:164 +#: netbox/core/models/data.py:164 msgid "Cannot initiate sync; syncing already in progress." msgstr "无法启动同步; 同步已在进行中。" -#: core/models/data.py:177 +#: netbox/core/models/data.py:177 msgid "" "There was an error initializing the backend. A dependency needs to be " "installed: " msgstr "初始化后端时出错。 需要安装依赖:" -#: core/models/data.py:270 core/models/files.py:31 -#: netbox/models/features.py:59 +#: netbox/core/models/data.py:270 netbox/core/models/files.py:31 +#: netbox/netbox/models/features.py:59 msgid "last updated" msgstr "最后更新" -#: core/models/data.py:280 dcim/models/cables.py:444 +#: netbox/core/models/data.py:280 netbox/dcim/models/cables.py:444 msgid "path" msgstr "路径" -#: core/models/data.py:283 +#: netbox/core/models/data.py:283 msgid "File path relative to the data source's root" msgstr "相对于数据源根目录的文件路径" -#: core/models/data.py:287 ipam/models/ip.py:503 +#: netbox/core/models/data.py:287 netbox/ipam/models/ip.py:503 msgid "size" msgstr "大小" -#: core/models/data.py:290 +#: netbox/core/models/data.py:290 msgid "hash" msgstr "哈希值" -#: core/models/data.py:294 +#: netbox/core/models/data.py:294 msgid "Length must be 64 hexadecimal characters." msgstr "长度必须为 64 个十六进制字符。" -#: core/models/data.py:296 +#: netbox/core/models/data.py:296 msgid "SHA256 hash of the file data" msgstr "文件数据的 SHA256 哈希值" -#: core/models/data.py:313 +#: netbox/core/models/data.py:313 msgid "data file" msgstr "数据文件" -#: core/models/data.py:314 +#: netbox/core/models/data.py:314 msgid "data files" msgstr "数据文件" -#: core/models/data.py:401 +#: netbox/core/models/data.py:401 msgid "auto sync record" msgstr "自动同步记录" -#: core/models/data.py:402 +#: netbox/core/models/data.py:402 msgid "auto sync records" msgstr "自动同步记录" -#: core/models/files.py:37 +#: netbox/core/models/files.py:37 msgid "file root" msgstr "根目录" -#: core/models/files.py:42 +#: netbox/core/models/files.py:42 msgid "file path" msgstr "文件路径" -#: core/models/files.py:44 +#: netbox/core/models/files.py:44 msgid "File path relative to the designated root path" msgstr "相对于指定根路径的文件路径" -#: core/models/files.py:61 +#: netbox/core/models/files.py:61 msgid "managed file" msgstr "托管文件" -#: core/models/files.py:62 +#: netbox/core/models/files.py:62 msgid "managed files" msgstr "托管文件" -#: core/models/jobs.py:53 +#: netbox/core/models/jobs.py:54 msgid "scheduled" msgstr "计划" -#: core/models/jobs.py:58 +#: netbox/core/models/jobs.py:59 msgid "interval" msgstr "间隔" -#: core/models/jobs.py:64 +#: netbox/core/models/jobs.py:65 msgid "Recurrence interval (in minutes)" msgstr "重复间隔(以分钟为单位)" -#: core/models/jobs.py:67 +#: netbox/core/models/jobs.py:68 msgid "started" msgstr "已经开始" -#: core/models/jobs.py:72 +#: netbox/core/models/jobs.py:73 msgid "completed" msgstr "已经完成" -#: core/models/jobs.py:90 extras/models/models.py:101 -#: extras/models/staging.py:87 +#: netbox/core/models/jobs.py:91 netbox/extras/models/models.py:101 +#: netbox/extras/models/staging.py:87 msgid "data" msgstr "数据" -#: core/models/jobs.py:95 +#: netbox/core/models/jobs.py:96 msgid "error" msgstr "错误" -#: core/models/jobs.py:100 +#: netbox/core/models/jobs.py:101 msgid "job ID" msgstr "任务ID" -#: core/models/jobs.py:111 +#: netbox/core/models/jobs.py:112 msgid "job" msgstr "任务" -#: core/models/jobs.py:112 +#: netbox/core/models/jobs.py:113 msgid "jobs" msgstr "任务" -#: core/models/jobs.py:135 +#: netbox/core/models/jobs.py:136 #, python-brace-format msgid "Jobs cannot be assigned to this object type ({type})." msgstr "任务不能分配给此对象类型 ({type})" -#: core/models/jobs.py:185 +#: netbox/core/models/jobs.py:190 #, python-brace-format msgid "Invalid status for job termination. Choices are: {choices}" msgstr "作业终止状态无效。选项有:{choices}" -#: core/models/jobs.py:216 +#: netbox/core/models/jobs.py:221 msgid "" "enqueue() cannot be called with values for both schedule_at and immediate." msgstr "不能使用 schedule_at 和 immediate 的值调用 enqueue ()。" -#: core/signals.py:126 +#: netbox/core/signals.py:126 #, python-brace-format msgid "Deletion is prevented by a protection rule: {message}" msgstr "保护规则阻止删除: {message}" -#: core/tables/change_logging.py:25 templates/account/profile.html:19 -#: templates/users/user.html:21 +#: netbox/core/tables/change_logging.py:25 +#: netbox/templates/account/profile.html:19 +#: netbox/templates/users/user.html:21 msgid "Full Name" msgstr "全名" -#: core/tables/change_logging.py:37 core/tables/jobs.py:21 -#: extras/choices.py:41 extras/tables/tables.py:279 -#: extras/tables/tables.py:297 extras/tables/tables.py:329 -#: extras/tables/tables.py:409 extras/tables/tables.py:470 -#: extras/tables/tables.py:576 extras/tables/tables.py:616 -#: extras/tables/tables.py:653 netbox/tables/tables.py:244 -#: templates/core/objectchange.html:58 templates/extras/eventrule.html:78 -#: templates/extras/journalentry.html:18 tenancy/tables/contacts.py:93 -#: vpn/tables/l2vpn.py:64 +#: netbox/core/tables/change_logging.py:37 netbox/core/tables/jobs.py:21 +#: netbox/extras/choices.py:41 netbox/extras/tables/tables.py:279 +#: 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/templates/core/objectchange.html:58 +#: netbox/templates/extras/eventrule.html:78 +#: netbox/templates/extras/journalentry.html:18 +#: netbox/tenancy/tables/contacts.py:93 netbox/vpn/tables/l2vpn.py:64 msgid "Object" msgstr "对象" -#: core/tables/change_logging.py:42 templates/core/objectchange.html:68 +#: netbox/core/tables/change_logging.py:42 +#: netbox/templates/core/objectchange.html:68 msgid "Request ID" msgstr "请求ID" -#: core/tables/config.py:21 users/forms/filtersets.py:44 users/tables.py:39 +#: netbox/core/tables/config.py:21 netbox/users/forms/filtersets.py:44 +#: netbox/users/tables.py:39 msgid "Is Active" msgstr "激活的" -#: core/tables/data.py:50 templates/core/datafile.html:31 +#: netbox/core/tables/data.py:50 netbox/templates/core/datafile.html:31 msgid "Path" msgstr "路径" -#: core/tables/data.py:54 templates/extras/inc/result_pending.html:7 +#: netbox/core/tables/data.py:54 +#: netbox/templates/extras/inc/result_pending.html:7 msgid "Last updated" msgstr "最后更新日期" -#: core/tables/jobs.py:10 core/tables/tasks.py:76 -#: dcim/tables/devicetypes.py:164 extras/tables/tables.py:216 -#: extras/tables/tables.py:460 netbox/tables/tables.py:189 -#: templates/dcim/virtualchassis_edit.html:52 utilities/forms/forms.py:73 -#: wireless/tables/wirelesslink.py:17 +#: 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/templates/dcim/virtualchassis_edit.html:52 +#: netbox/utilities/forms/forms.py:73 +#: netbox/wireless/tables/wirelesslink.py:17 msgid "ID" msgstr "ID" -#: core/tables/jobs.py:35 +#: netbox/core/tables/jobs.py:35 msgid "Interval" msgstr "间隔" -#: core/tables/plugins.py:14 templates/vpn/ipsecprofile.html:44 -#: vpn/forms/bulk_edit.py:141 vpn/forms/bulk_import.py:172 -#: vpn/tables/crypto.py:61 +#: netbox/core/tables/plugins.py:14 netbox/templates/vpn/ipsecprofile.html:44 +#: netbox/vpn/forms/bulk_edit.py:141 netbox/vpn/forms/bulk_import.py:172 +#: netbox/vpn/tables/crypto.py:61 msgid "Version" msgstr "版本" -#: core/tables/plugins.py:19 templates/core/datafile.html:38 +#: netbox/core/tables/plugins.py:19 netbox/templates/core/datafile.html:38 msgid "Last Updated" msgstr "最后更新" -#: core/tables/plugins.py:23 +#: netbox/core/tables/plugins.py:23 msgid "Minimum NetBox Version" msgstr "Netbox 最低版本" -#: core/tables/plugins.py:27 +#: netbox/core/tables/plugins.py:27 msgid "Maximum NetBox Version" msgstr "Netbox 最高版本" -#: core/tables/plugins.py:31 core/tables/plugins.py:74 +#: netbox/core/tables/plugins.py:31 netbox/core/tables/plugins.py:74 msgid "No plugin data found" msgstr "未找到插件数据" -#: core/tables/plugins.py:48 templates/core/plugin.html:62 +#: netbox/core/tables/plugins.py:48 netbox/templates/core/plugin.html:62 msgid "Author" msgstr "作者" -#: core/tables/plugins.py:54 +#: netbox/core/tables/plugins.py:54 msgid "Installed" msgstr "已安装" -#: core/tables/plugins.py:57 templates/core/plugin.html:84 +#: netbox/core/tables/plugins.py:57 netbox/templates/core/plugin.html:84 msgid "Certified" msgstr "已认证" -#: core/tables/plugins.py:60 +#: netbox/core/tables/plugins.py:60 msgid "Published" msgstr "已出版" -#: core/tables/plugins.py:66 +#: netbox/core/tables/plugins.py:66 msgid "Installed Version" msgstr "已安装的版本" -#: core/tables/plugins.py:70 +#: netbox/core/tables/plugins.py:70 msgid "Latest Version" msgstr "最新版本" -#: core/tables/tasks.py:18 +#: netbox/core/tables/tasks.py:18 msgid "Oldest Task" msgstr "最早的任务" -#: core/tables/tasks.py:42 templates/core/rq_worker_list.html:39 +#: netbox/core/tables/tasks.py:42 netbox/templates/core/rq_worker_list.html:39 msgid "Workers" msgstr "Workers" -#: core/tables/tasks.py:46 vpn/tables/tunnels.py:88 +#: netbox/core/tables/tasks.py:46 netbox/vpn/tables/tunnels.py:88 msgid "Host" msgstr "主机" -#: core/tables/tasks.py:50 ipam/forms/filtersets.py:535 +#: netbox/core/tables/tasks.py:50 netbox/ipam/forms/filtersets.py:535 msgid "Port" msgstr "端口" -#: core/tables/tasks.py:54 +#: netbox/core/tables/tasks.py:54 msgid "DB" msgstr "数据库" -#: core/tables/tasks.py:58 +#: netbox/core/tables/tasks.py:58 msgid "Scheduler PID" msgstr "定时任务进程 PID" -#: core/tables/tasks.py:62 +#: netbox/core/tables/tasks.py:62 msgid "No queues found" msgstr "未找到队列" -#: core/tables/tasks.py:82 +#: netbox/core/tables/tasks.py:82 msgid "Enqueued" msgstr "已加入队列" -#: core/tables/tasks.py:85 +#: netbox/core/tables/tasks.py:85 msgid "Ended" msgstr "已完结" -#: core/tables/tasks.py:93 templates/core/rq_task.html:85 +#: netbox/core/tables/tasks.py:93 netbox/templates/core/rq_task.html:85 msgid "Callable" msgstr "可调用" -#: core/tables/tasks.py:97 +#: netbox/core/tables/tasks.py:97 msgid "No tasks found" msgstr "没有找到任务" -#: core/tables/tasks.py:118 templates/core/rq_worker.html:47 +#: netbox/core/tables/tasks.py:118 netbox/templates/core/rq_worker.html:47 msgid "State" msgstr "状态" -#: core/tables/tasks.py:121 templates/core/rq_worker.html:51 +#: netbox/core/tables/tasks.py:121 netbox/templates/core/rq_worker.html:51 msgid "Birth" msgstr "生成日期" -#: core/tables/tasks.py:124 templates/core/rq_worker.html:59 +#: netbox/core/tables/tasks.py:124 netbox/templates/core/rq_worker.html:59 msgid "PID" msgstr "PID" -#: core/tables/tasks.py:128 +#: netbox/core/tables/tasks.py:128 msgid "No workers found" msgstr "没有找到workers" -#: core/views.py:90 +#: netbox/core/views.py:90 #, python-brace-format msgid "Queued job #{id} to sync {datasource}" msgstr "已排队的作业 #{id} 同步 {datasource}" -#: core/views.py:319 +#: netbox/core/views.py:319 #, python-brace-format msgid "Restored configuration revision #{id}" msgstr "已恢复配置修订版 #{id}" -#: core/views.py:412 core/views.py:455 core/views.py:531 +#: 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 "任务{job_id} 未发现" -#: core/views.py:463 +#: netbox/core/views.py:463 #, python-brace-format msgid "Job {id} has been deleted." msgstr "工作 {id} 已被删除。" -#: core/views.py:465 +#: netbox/core/views.py:465 #, python-brace-format msgid "Error deleting job {id}: {error}" msgstr "删除任务时出错 {id}: {error}" -#: core/views.py:478 core/views.py:496 +#: netbox/core/views.py:478 netbox/core/views.py:496 #, python-brace-format msgid "Job {id} not found." msgstr "工作 {id} 未找到。" -#: core/views.py:484 +#: netbox/core/views.py:484 #, python-brace-format msgid "Job {id} has been re-enqueued." msgstr "工作 {id} 已重新排队。" -#: core/views.py:519 +#: netbox/core/views.py:519 #, python-brace-format msgid "Job {id} has been enqueued." msgstr "工作 {id} 已被排队。" -#: core/views.py:538 +#: netbox/core/views.py:538 #, python-brace-format msgid "Job {id} has been stopped." msgstr "工作 {id} 已停止。" -#: core/views.py:540 +#: netbox/core/views.py:540 #, python-brace-format msgid "Failed to stop job {id}" msgstr "无法停止作业 {id}" -#: core/views.py:678 +#: netbox/core/views.py:674 msgid "Plugins catalog could not be loaded" msgstr "无法加载插件目录" -#: core/views.py:712 +#: netbox/core/views.py:708 #, python-brace-format msgid "Plugin {name} not found" msgstr "插件 {name} 未找到" -#: dcim/api/serializers_/devices.py:49 dcim/api/serializers_/devicetypes.py:25 +#: netbox/dcim/api/serializers_/devices.py:49 +#: netbox/dcim/api/serializers_/devicetypes.py:25 msgid "Position (U)" msgstr "具体U位" -#: dcim/api/serializers_/racks.py:112 templates/dcim/rack.html:28 +#: netbox/dcim/api/serializers_/racks.py:112 +#: netbox/templates/dcim/rack.html:28 msgid "Facility ID" msgstr "标识符ID" -#: dcim/choices.py:21 virtualization/choices.py:21 +#: netbox/dcim/choices.py:21 netbox/virtualization/choices.py:21 msgid "Staging" msgstr "暂存" -#: dcim/choices.py:23 dcim/choices.py:189 dcim/choices.py:240 -#: dcim/choices.py:1531 virtualization/choices.py:23 -#: virtualization/choices.py:48 +#: 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 msgid "Decommissioning" msgstr "报废" -#: dcim/choices.py:24 +#: netbox/dcim/choices.py:24 msgid "Retired" msgstr "下架" -#: dcim/choices.py:65 +#: netbox/dcim/choices.py:65 msgid "2-post frame" msgstr "双立柱机架" -#: dcim/choices.py:66 +#: netbox/dcim/choices.py:66 msgid "4-post frame" msgstr "4立柱机架" -#: dcim/choices.py:67 +#: netbox/dcim/choices.py:67 msgid "4-post cabinet" msgstr "4立柱机柜" -#: dcim/choices.py:68 +#: netbox/dcim/choices.py:68 msgid "Wall-mounted frame" msgstr "壁挂式机架" -#: dcim/choices.py:69 +#: netbox/dcim/choices.py:69 msgid "Wall-mounted frame (vertical)" msgstr "壁挂式机架(竖式)" -#: dcim/choices.py:70 +#: netbox/dcim/choices.py:70 msgid "Wall-mounted cabinet" msgstr "壁挂式机柜" -#: dcim/choices.py:71 +#: netbox/dcim/choices.py:71 msgid "Wall-mounted cabinet (vertical)" msgstr "壁挂式机柜(立式)" -#: dcim/choices.py:83 dcim/choices.py:84 dcim/choices.py:85 dcim/choices.py:86 +#: netbox/dcim/choices.py:83 netbox/dcim/choices.py:84 +#: netbox/dcim/choices.py:85 netbox/dcim/choices.py:86 #, python-brace-format msgid "{n} inches" msgstr "{n} 英寸" -#: dcim/choices.py:100 ipam/choices.py:32 ipam/choices.py:50 -#: ipam/choices.py:70 ipam/choices.py:155 wireless/choices.py:26 +#: netbox/dcim/choices.py:100 netbox/ipam/choices.py:32 +#: netbox/ipam/choices.py:50 netbox/ipam/choices.py:70 +#: netbox/ipam/choices.py:155 netbox/wireless/choices.py:26 msgid "Reserved" msgstr "预留" -#: dcim/choices.py:101 templates/dcim/device.html:259 +#: netbox/dcim/choices.py:101 netbox/templates/dcim/device.html:259 msgid "Available" msgstr "可用" -#: dcim/choices.py:104 ipam/choices.py:33 ipam/choices.py:51 -#: ipam/choices.py:71 ipam/choices.py:156 wireless/choices.py:28 +#: netbox/dcim/choices.py:104 netbox/ipam/choices.py:33 +#: netbox/ipam/choices.py:51 netbox/ipam/choices.py:71 +#: netbox/ipam/choices.py:156 netbox/wireless/choices.py:28 msgid "Deprecated" msgstr "已弃用" -#: dcim/choices.py:114 templates/dcim/inc/panels/racktype_dimensions.html:41 +#: netbox/dcim/choices.py:114 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:41 msgid "Millimeters" msgstr "毫米" -#: dcim/choices.py:115 dcim/choices.py:1553 +#: netbox/dcim/choices.py:115 netbox/dcim/choices.py:1555 msgid "Inches" msgstr "英寸" -#: dcim/choices.py:136 dcim/choices.py:207 dcim/choices.py:254 +#: netbox/dcim/choices.py:136 netbox/dcim/choices.py:207 +#: netbox/dcim/choices.py:254 msgid "Front to rear" msgstr "从前向后" -#: dcim/choices.py:137 dcim/choices.py:208 dcim/choices.py:255 +#: netbox/dcim/choices.py:137 netbox/dcim/choices.py:208 +#: netbox/dcim/choices.py:255 msgid "Rear to front" msgstr "从后向前" -#: dcim/choices.py:151 dcim/forms/bulk_edit.py:68 dcim/forms/bulk_edit.py:87 -#: dcim/forms/bulk_edit.py:173 dcim/forms/bulk_edit.py:1405 -#: dcim/forms/bulk_import.py:60 dcim/forms/bulk_import.py:74 -#: dcim/forms/bulk_import.py:137 dcim/forms/bulk_import.py:566 -#: dcim/forms/bulk_import.py:833 dcim/forms/bulk_import.py:1088 -#: dcim/forms/filtersets.py:234 dcim/forms/model_forms.py:74 -#: dcim/forms/model_forms.py:93 dcim/forms/model_forms.py:170 -#: dcim/forms/model_forms.py:1062 dcim/forms/model_forms.py:1502 -#: dcim/forms/object_import.py:176 dcim/tables/devices.py:656 -#: dcim/tables/devices.py:869 dcim/tables/devices.py:954 -#: extras/tables/tables.py:223 ipam/tables/fhrp.py:59 ipam/tables/ip.py:378 -#: ipam/tables/services.py:44 templates/dcim/interface.html:102 -#: templates/dcim/interface.html:309 templates/dcim/location.html:41 -#: templates/dcim/region.html:37 templates/dcim/sitegroup.html:37 -#: templates/ipam/service.html:28 templates/tenancy/contactgroup.html:29 -#: templates/tenancy/tenantgroup.html:37 -#: templates/virtualization/vminterface.html:39 -#: templates/wireless/wirelesslangroup.html:37 tenancy/forms/bulk_edit.py:27 -#: tenancy/forms/bulk_edit.py:61 tenancy/forms/bulk_import.py:24 -#: tenancy/forms/bulk_import.py:58 tenancy/forms/model_forms.py:25 -#: tenancy/forms/model_forms.py:68 virtualization/forms/bulk_edit.py:207 -#: virtualization/forms/bulk_import.py:151 -#: virtualization/tables/virtualmachines.py:162 wireless/forms/bulk_edit.py:24 -#: wireless/forms/bulk_import.py:21 wireless/forms/model_forms.py:21 +#: 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/templates/dcim/location.html:41 netbox/templates/dcim/region.html:37 +#: netbox/templates/dcim/sitegroup.html:37 +#: netbox/templates/ipam/service.html:28 +#: netbox/templates/tenancy/contactgroup.html:29 +#: netbox/templates/tenancy/tenantgroup.html:37 +#: netbox/templates/virtualization/vminterface.html:39 +#: netbox/templates/wireless/wirelesslangroup.html:37 +#: netbox/tenancy/forms/bulk_edit.py:27 netbox/tenancy/forms/bulk_edit.py:61 +#: netbox/tenancy/forms/bulk_import.py:24 +#: netbox/tenancy/forms/bulk_import.py:58 +#: netbox/tenancy/forms/model_forms.py:25 +#: netbox/tenancy/forms/model_forms.py:68 +#: netbox/virtualization/forms/bulk_edit.py:207 +#: netbox/virtualization/forms/bulk_import.py:151 +#: netbox/virtualization/tables/virtualmachines.py:162 +#: netbox/wireless/forms/bulk_edit.py:24 +#: netbox/wireless/forms/bulk_import.py:21 +#: netbox/wireless/forms/model_forms.py:21 msgid "Parent" msgstr "上级" -#: dcim/choices.py:152 +#: netbox/dcim/choices.py:152 msgid "Child" msgstr "子类" -#: dcim/choices.py:166 templates/dcim/device.html:340 -#: templates/dcim/rack.html:133 templates/dcim/rack_elevation_list.html:20 -#: templates/dcim/rackreservation.html:76 +#: netbox/dcim/choices.py:166 netbox/templates/dcim/device.html:340 +#: netbox/templates/dcim/rack.html:133 +#: netbox/templates/dcim/rack_elevation_list.html:20 +#: netbox/templates/dcim/rackreservation.html:76 msgid "Front" msgstr "前" -#: dcim/choices.py:167 templates/dcim/device.html:346 -#: templates/dcim/rack.html:139 templates/dcim/rack_elevation_list.html:21 -#: templates/dcim/rackreservation.html:82 +#: netbox/dcim/choices.py:167 netbox/templates/dcim/device.html:346 +#: netbox/templates/dcim/rack.html:139 +#: netbox/templates/dcim/rack_elevation_list.html:21 +#: netbox/templates/dcim/rackreservation.html:82 msgid "Rear" msgstr "后" -#: dcim/choices.py:186 dcim/choices.py:238 virtualization/choices.py:46 +#: netbox/dcim/choices.py:186 netbox/dcim/choices.py:238 +#: netbox/virtualization/choices.py:46 msgid "Staged" msgstr "已暂存" -#: dcim/choices.py:188 +#: netbox/dcim/choices.py:188 msgid "Inventory" msgstr "库存中" -#: dcim/choices.py:209 dcim/choices.py:256 +#: netbox/dcim/choices.py:209 netbox/dcim/choices.py:256 msgid "Left to right" msgstr "从左向右" -#: dcim/choices.py:210 dcim/choices.py:257 +#: netbox/dcim/choices.py:210 netbox/dcim/choices.py:257 msgid "Right to left" msgstr "从右向左" -#: dcim/choices.py:211 dcim/choices.py:258 +#: netbox/dcim/choices.py:211 netbox/dcim/choices.py:258 msgid "Side to rear" msgstr "侧进风后出风" -#: dcim/choices.py:212 +#: netbox/dcim/choices.py:212 msgid "Rear to side" msgstr "从后到边" -#: dcim/choices.py:213 +#: netbox/dcim/choices.py:213 msgid "Bottom to top" msgstr "自下而上" -#: dcim/choices.py:214 +#: netbox/dcim/choices.py:214 msgid "Top to bottom" msgstr "从上到下" -#: dcim/choices.py:215 dcim/choices.py:259 dcim/choices.py:1303 +#: netbox/dcim/choices.py:215 netbox/dcim/choices.py:259 +#: netbox/dcim/choices.py:1305 msgid "Passive" msgstr "被动" -#: dcim/choices.py:216 +#: netbox/dcim/choices.py:216 msgid "Mixed" msgstr "混合风道" -#: dcim/choices.py:484 dcim/choices.py:733 +#: netbox/dcim/choices.py:484 netbox/dcim/choices.py:733 msgid "NEMA (Non-locking)" msgstr "NEMA(非锁定)" -#: dcim/choices.py:506 dcim/choices.py:755 +#: netbox/dcim/choices.py:506 netbox/dcim/choices.py:755 msgid "NEMA (Locking)" msgstr "NEMA(锁定)" -#: dcim/choices.py:530 dcim/choices.py:779 +#: netbox/dcim/choices.py:530 netbox/dcim/choices.py:779 msgid "California Style" msgstr "美标" -#: dcim/choices.py:538 +#: netbox/dcim/choices.py:538 msgid "International/ITA" msgstr "国际通用标准/ITA" -#: dcim/choices.py:573 dcim/choices.py:814 +#: netbox/dcim/choices.py:573 netbox/dcim/choices.py:814 msgid "Proprietary" msgstr "专用规格" -#: dcim/choices.py:581 dcim/choices.py:824 dcim/choices.py:1219 -#: dcim/choices.py:1221 dcim/choices.py:1447 dcim/choices.py:1449 -#: netbox/navigation/menu.py:200 +#: 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 msgid "Other" msgstr "其他" -#: dcim/choices.py:787 +#: netbox/dcim/choices.py:787 msgid "ITA/International" msgstr "ITA/国际通用标准" -#: dcim/choices.py:854 +#: netbox/dcim/choices.py:854 msgid "Physical" msgstr "物理" -#: dcim/choices.py:855 dcim/choices.py:1023 +#: netbox/dcim/choices.py:855 netbox/dcim/choices.py:1024 msgid "Virtual" msgstr "虚拟" -#: dcim/choices.py:856 dcim/choices.py:1097 dcim/forms/bulk_edit.py:1515 -#: dcim/forms/filtersets.py:1330 dcim/forms/model_forms.py:988 -#: dcim/forms/model_forms.py:1397 netbox/navigation/menu.py:140 -#: netbox/navigation/menu.py:144 templates/dcim/interface.html:210 +#: 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 msgid "Wireless" msgstr "无线" -#: dcim/choices.py:1021 +#: netbox/dcim/choices.py:1022 msgid "Virtual interfaces" msgstr "虚拟接口" -#: dcim/choices.py:1024 dcim/forms/bulk_edit.py:1410 -#: dcim/forms/bulk_import.py:840 dcim/forms/model_forms.py:974 -#: dcim/tables/devices.py:660 templates/dcim/interface.html:106 -#: templates/virtualization/vminterface.html:43 -#: virtualization/forms/bulk_edit.py:212 -#: virtualization/forms/bulk_import.py:158 -#: virtualization/tables/virtualmachines.py:166 +#: 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/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 msgid "Bridge" msgstr "桥接" -#: dcim/choices.py:1025 +#: netbox/dcim/choices.py:1026 msgid "Link Aggregation Group (LAG)" msgstr "链路聚合组(LAG)" -#: dcim/choices.py:1029 +#: netbox/dcim/choices.py:1030 msgid "Ethernet (fixed)" msgstr "以太网(固定类型)" -#: dcim/choices.py:1044 +#: netbox/dcim/choices.py:1046 msgid "Ethernet (modular)" msgstr "以太网(模块)" -#: dcim/choices.py:1081 +#: netbox/dcim/choices.py:1083 msgid "Ethernet (backplane)" msgstr "以太网(背板)" -#: dcim/choices.py:1113 +#: netbox/dcim/choices.py:1115 msgid "Cellular" msgstr "蜂窝网络" -#: dcim/choices.py:1165 dcim/forms/filtersets.py:383 -#: dcim/forms/filtersets.py:809 dcim/forms/filtersets.py:963 -#: dcim/forms/filtersets.py:1542 templates/dcim/inventoryitem.html:52 -#: templates/dcim/virtualchassis_edit.html:54 +#: 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/templates/dcim/virtualchassis_edit.html:54 msgid "Serial" msgstr "串口" -#: dcim/choices.py:1180 +#: netbox/dcim/choices.py:1182 msgid "Coaxial" msgstr "同轴电缆接口" -#: dcim/choices.py:1200 +#: netbox/dcim/choices.py:1202 msgid "Stacking" msgstr "堆叠" -#: dcim/choices.py:1250 +#: netbox/dcim/choices.py:1252 msgid "Half" msgstr "半双工" -#: dcim/choices.py:1251 +#: netbox/dcim/choices.py:1253 msgid "Full" msgstr "全双工" -#: dcim/choices.py:1252 netbox/preferences.py:31 wireless/choices.py:480 +#: netbox/dcim/choices.py:1254 netbox/netbox/preferences.py:31 +#: netbox/wireless/choices.py:480 msgid "Auto" msgstr "自动" -#: dcim/choices.py:1263 +#: netbox/dcim/choices.py:1265 msgid "Access" msgstr "接入" -#: dcim/choices.py:1264 ipam/tables/vlans.py:172 ipam/tables/vlans.py:217 -#: templates/dcim/inc/interface_vlans_table.html:7 +#: 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 "Trunk口" -#: dcim/choices.py:1265 +#: netbox/dcim/choices.py:1267 msgid "Tagged (All)" msgstr "Trunk口(允许所有VLAN)" -#: dcim/choices.py:1294 +#: netbox/dcim/choices.py:1296 msgid "IEEE Standard" msgstr "IEEE标准" -#: dcim/choices.py:1305 +#: netbox/dcim/choices.py:1307 msgid "Passive 24V (2-pair)" msgstr "24V(2对供电)" -#: dcim/choices.py:1306 +#: netbox/dcim/choices.py:1308 msgid "Passive 24V (4-pair)" msgstr "24V(4对供电)" -#: dcim/choices.py:1307 +#: netbox/dcim/choices.py:1309 msgid "Passive 48V (2-pair)" msgstr "48V(2对供电)" -#: dcim/choices.py:1308 +#: netbox/dcim/choices.py:1310 msgid "Passive 48V (4-pair)" msgstr "48V(4对供电)" -#: dcim/choices.py:1378 dcim/choices.py:1488 +#: netbox/dcim/choices.py:1380 netbox/dcim/choices.py:1490 msgid "Copper" msgstr "铜缆" -#: dcim/choices.py:1401 +#: netbox/dcim/choices.py:1403 msgid "Fiber Optic" msgstr "光纤" -#: dcim/choices.py:1434 dcim/choices.py:1517 +#: netbox/dcim/choices.py:1436 netbox/dcim/choices.py:1519 msgid "USB" msgstr "USB" -#: dcim/choices.py:1504 +#: netbox/dcim/choices.py:1506 msgid "Fiber" msgstr "光纤" -#: dcim/choices.py:1529 dcim/forms/filtersets.py:1227 +#: netbox/dcim/choices.py:1531 netbox/dcim/forms/filtersets.py:1227 msgid "Connected" msgstr "已连接" -#: dcim/choices.py:1548 wireless/choices.py:497 +#: netbox/dcim/choices.py:1550 netbox/wireless/choices.py:497 msgid "Kilometers" msgstr "公里" -#: dcim/choices.py:1549 templates/dcim/cable_trace.html:65 -#: wireless/choices.py:498 +#: netbox/dcim/choices.py:1551 netbox/templates/dcim/cable_trace.html:65 +#: netbox/wireless/choices.py:498 msgid "Meters" msgstr "米" -#: dcim/choices.py:1550 +#: netbox/dcim/choices.py:1552 msgid "Centimeters" msgstr "厘米" -#: dcim/choices.py:1551 wireless/choices.py:499 +#: netbox/dcim/choices.py:1553 netbox/wireless/choices.py:499 msgid "Miles" msgstr "英里" -#: dcim/choices.py:1552 templates/dcim/cable_trace.html:66 -#: wireless/choices.py:500 +#: netbox/dcim/choices.py:1554 netbox/templates/dcim/cable_trace.html:66 +#: netbox/wireless/choices.py:500 msgid "Feet" msgstr "英尺" -#: dcim/choices.py:1568 templates/dcim/device.html:327 -#: templates/dcim/rack.html:107 +#: netbox/dcim/choices.py:1570 netbox/templates/dcim/device.html:327 +#: netbox/templates/dcim/rack.html:107 msgid "Kilograms" msgstr "千克" -#: dcim/choices.py:1569 +#: netbox/dcim/choices.py:1571 msgid "Grams" msgstr "克" -#: dcim/choices.py:1570 templates/dcim/device.html:328 -#: templates/dcim/rack.html:108 +#: netbox/dcim/choices.py:1572 netbox/templates/dcim/device.html:328 +#: netbox/templates/dcim/rack.html:108 msgid "Pounds" msgstr "磅" -#: dcim/choices.py:1571 +#: netbox/dcim/choices.py:1573 msgid "Ounces" msgstr "盎司" -#: dcim/choices.py:1618 +#: netbox/dcim/choices.py:1620 msgid "Redundant" msgstr "冗余" -#: dcim/choices.py:1639 +#: netbox/dcim/choices.py:1641 msgid "Single phase" msgstr "单相电" -#: dcim/choices.py:1640 +#: netbox/dcim/choices.py:1642 msgid "Three-phase" msgstr "三相" -#: dcim/fields.py:45 +#: netbox/dcim/fields.py:45 #, python-brace-format msgid "Invalid MAC address format: {value}" msgstr "MAC地址格式无效:{value}" -#: dcim/fields.py:71 +#: netbox/dcim/fields.py:71 #, python-brace-format msgid "Invalid WWN format: {value}" msgstr "WWN格式无效:{value}" -#: dcim/filtersets.py:86 +#: netbox/dcim/filtersets.py:86 msgid "Parent region (ID)" msgstr "上一级地区(ID)" -#: dcim/filtersets.py:92 +#: netbox/dcim/filtersets.py:92 msgid "Parent region (slug)" msgstr "上一级地区(缩写)" -#: dcim/filtersets.py:116 +#: netbox/dcim/filtersets.py:116 msgid "Parent site group (ID)" msgstr "上一级站点组(ID)" -#: dcim/filtersets.py:122 +#: netbox/dcim/filtersets.py:122 msgid "Parent site group (slug)" msgstr "上一级站点组(缩写)" -#: dcim/filtersets.py:164 extras/filtersets.py:364 ipam/filtersets.py:841 -#: ipam/filtersets.py:993 +#: netbox/dcim/filtersets.py:164 netbox/extras/filtersets.py:364 +#: netbox/ipam/filtersets.py:841 netbox/ipam/filtersets.py:993 msgid "Group (ID)" msgstr "组(ID)" -#: dcim/filtersets.py:170 +#: netbox/dcim/filtersets.py:170 msgid "Group (slug)" msgstr "组(缩写)" -#: dcim/filtersets.py:176 dcim/filtersets.py:181 +#: netbox/dcim/filtersets.py:176 netbox/dcim/filtersets.py:181 msgid "AS (ID)" msgstr "AS (ID)" -#: dcim/filtersets.py:246 +#: netbox/dcim/filtersets.py:246 msgid "Parent location (ID)" msgstr "父级位置(ID)" -#: dcim/filtersets.py:252 +#: netbox/dcim/filtersets.py:252 msgid "Parent location (slug)" msgstr "父级位置(缩写)" -#: dcim/filtersets.py:258 dcim/filtersets.py:369 dcim/filtersets.py:490 -#: dcim/filtersets.py:1057 dcim/filtersets.py:1404 dcim/filtersets.py:2182 +#: 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)" -#: dcim/filtersets.py:265 dcim/filtersets.py:376 dcim/filtersets.py:497 -#: dcim/filtersets.py:1410 extras/filtersets.py:542 +#: 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 "位置(缩写)" -#: dcim/filtersets.py:296 dcim/filtersets.py:381 dcim/filtersets.py:539 -#: dcim/filtersets.py:678 dcim/filtersets.py:882 dcim/filtersets.py:933 -#: dcim/filtersets.py:973 dcim/filtersets.py:1306 dcim/filtersets.py:1840 +#: 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 msgid "Manufacturer (ID)" msgstr "厂商(ID)" -#: dcim/filtersets.py:302 dcim/filtersets.py:387 dcim/filtersets.py:545 -#: dcim/filtersets.py:684 dcim/filtersets.py:888 dcim/filtersets.py:939 -#: dcim/filtersets.py:979 dcim/filtersets.py:1312 dcim/filtersets.py:1846 +#: 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 msgid "Manufacturer (slug)" msgstr "厂商 (缩写)" -#: dcim/filtersets.py:393 +#: netbox/dcim/filtersets.py:393 msgid "Rack type (slug)" msgstr "机架类型(弹头)" -#: dcim/filtersets.py:397 +#: netbox/dcim/filtersets.py:397 msgid "Rack type (ID)" msgstr "机架类型 (ID)" -#: dcim/filtersets.py:411 dcim/filtersets.py:892 dcim/filtersets.py:994 -#: dcim/filtersets.py:1850 ipam/filtersets.py:381 ipam/filtersets.py:493 -#: ipam/filtersets.py:1003 virtualization/filtersets.py:210 +#: 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 msgid "Role (ID)" msgstr "角色(ID)" -#: dcim/filtersets.py:417 dcim/filtersets.py:898 dcim/filtersets.py:1000 -#: dcim/filtersets.py:1856 extras/filtersets.py:558 ipam/filtersets.py:387 -#: ipam/filtersets.py:499 ipam/filtersets.py:1009 -#: virtualization/filtersets.py:216 +#: 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/virtualization/filtersets.py:216 msgid "Role (slug)" msgstr "角色 (缩写)" -#: dcim/filtersets.py:447 dcim/filtersets.py:1062 dcim/filtersets.py:1415 -#: dcim/filtersets.py:2244 +#: netbox/dcim/filtersets.py:447 netbox/dcim/filtersets.py:1062 +#: netbox/dcim/filtersets.py:1415 netbox/dcim/filtersets.py:2244 msgid "Rack (ID)" msgstr "机柜(ID)" -#: dcim/filtersets.py:507 extras/filtersets.py:293 extras/filtersets.py:337 -#: extras/filtersets.py:359 extras/filtersets.py:419 users/filtersets.py:113 -#: users/filtersets.py:180 +#: netbox/dcim/filtersets.py:507 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 "用户(名称)" -#: dcim/filtersets.py:549 +#: netbox/dcim/filtersets.py:549 msgid "Default platform (ID)" msgstr "默认系统平台(ID)" -#: dcim/filtersets.py:555 +#: netbox/dcim/filtersets.py:555 msgid "Default platform (slug)" msgstr "默认系统平台(缩写)" -#: dcim/filtersets.py:558 dcim/forms/filtersets.py:517 +#: netbox/dcim/filtersets.py:558 netbox/dcim/forms/filtersets.py:517 msgid "Has a front image" msgstr "有前面板图片" -#: dcim/filtersets.py:562 dcim/forms/filtersets.py:524 +#: netbox/dcim/filtersets.py:562 netbox/dcim/forms/filtersets.py:524 msgid "Has a rear image" msgstr "有后面板图片" -#: dcim/filtersets.py:567 dcim/filtersets.py:688 dcim/filtersets.py:1131 -#: dcim/forms/filtersets.py:531 dcim/forms/filtersets.py:627 -#: dcim/forms/filtersets.py:848 +#: 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 msgid "Has console ports" msgstr "具有console端口" -#: dcim/filtersets.py:571 dcim/filtersets.py:692 dcim/filtersets.py:1135 -#: dcim/forms/filtersets.py:538 dcim/forms/filtersets.py:634 -#: dcim/forms/filtersets.py:855 +#: 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 msgid "Has console server ports" msgstr "具有console 服务器端口" -#: dcim/filtersets.py:575 dcim/filtersets.py:696 dcim/filtersets.py:1139 -#: dcim/forms/filtersets.py:545 dcim/forms/filtersets.py:641 -#: dcim/forms/filtersets.py:862 +#: 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 msgid "Has power ports" msgstr "有电源接口" -#: dcim/filtersets.py:579 dcim/filtersets.py:700 dcim/filtersets.py:1143 -#: dcim/forms/filtersets.py:552 dcim/forms/filtersets.py:648 -#: dcim/forms/filtersets.py:869 +#: 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 msgid "Has power outlets" msgstr "有电源插座" -#: dcim/filtersets.py:583 dcim/filtersets.py:704 dcim/filtersets.py:1147 -#: dcim/forms/filtersets.py:559 dcim/forms/filtersets.py:655 -#: dcim/forms/filtersets.py:876 +#: 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 msgid "Has interfaces" msgstr "有接口" -#: dcim/filtersets.py:587 dcim/filtersets.py:708 dcim/filtersets.py:1151 -#: dcim/forms/filtersets.py:566 dcim/forms/filtersets.py:662 -#: dcim/forms/filtersets.py:883 +#: 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 msgid "Has pass-through ports" msgstr "有直通端口" -#: dcim/filtersets.py:591 dcim/filtersets.py:1155 dcim/forms/filtersets.py:580 +#: netbox/dcim/filtersets.py:591 netbox/dcim/filtersets.py:1155 +#: netbox/dcim/forms/filtersets.py:580 msgid "Has module bays" msgstr "有模块托架" -#: dcim/filtersets.py:595 dcim/filtersets.py:1159 dcim/forms/filtersets.py:573 +#: netbox/dcim/filtersets.py:595 netbox/dcim/filtersets.py:1159 +#: netbox/dcim/forms/filtersets.py:573 msgid "Has device bays" msgstr "有设备托架" -#: dcim/filtersets.py:599 dcim/forms/filtersets.py:587 +#: netbox/dcim/filtersets.py:599 netbox/dcim/forms/filtersets.py:587 msgid "Has inventory items" msgstr "有库存项" -#: dcim/filtersets.py:756 dcim/filtersets.py:989 dcim/filtersets.py:1436 +#: netbox/dcim/filtersets.py:756 netbox/dcim/filtersets.py:989 +#: netbox/dcim/filtersets.py:1436 msgid "Device type (ID)" msgstr "设备型号(ID)" -#: dcim/filtersets.py:772 dcim/filtersets.py:1317 +#: netbox/dcim/filtersets.py:772 netbox/dcim/filtersets.py:1317 msgid "Module type (ID)" msgstr "模块类型(ID)" -#: dcim/filtersets.py:804 dcim/filtersets.py:1591 +#: netbox/dcim/filtersets.py:804 netbox/dcim/filtersets.py:1591 msgid "Power port (ID)" msgstr "电源接口(ID)" -#: dcim/filtersets.py:878 dcim/filtersets.py:1836 +#: netbox/dcim/filtersets.py:878 netbox/dcim/filtersets.py:1836 msgid "Parent inventory item (ID)" msgstr "上一级库存项(ID)" -#: dcim/filtersets.py:921 dcim/filtersets.py:947 dcim/filtersets.py:1127 -#: virtualization/filtersets.py:238 +#: netbox/dcim/filtersets.py:921 netbox/dcim/filtersets.py:947 +#: netbox/dcim/filtersets.py:1127 netbox/virtualization/filtersets.py:238 msgid "Config template (ID)" msgstr "配置模板(ID)" -#: dcim/filtersets.py:985 +#: netbox/dcim/filtersets.py:985 msgid "Device type (slug)" msgstr "设备型号 (缩写)" -#: dcim/filtersets.py:1005 +#: netbox/dcim/filtersets.py:1005 msgid "Parent Device (ID)" msgstr "上一级设备(ID)" -#: dcim/filtersets.py:1009 virtualization/filtersets.py:220 +#: netbox/dcim/filtersets.py:1009 netbox/virtualization/filtersets.py:220 msgid "Platform (ID)" msgstr "平台(ID)" -#: dcim/filtersets.py:1015 extras/filtersets.py:569 -#: virtualization/filtersets.py:226 +#: netbox/dcim/filtersets.py:1015 netbox/extras/filtersets.py:569 +#: netbox/virtualization/filtersets.py:226 msgid "Platform (slug)" msgstr "平台(缩写)" -#: dcim/filtersets.py:1051 dcim/filtersets.py:1399 dcim/filtersets.py:1934 -#: dcim/filtersets.py:2176 dcim/filtersets.py:2235 +#: 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 msgid "Site name (slug)" msgstr "站点名字 (缩写)" -#: dcim/filtersets.py:1067 +#: netbox/dcim/filtersets.py:1067 msgid "Parent bay (ID)" msgstr "父级托架(IE)" -#: dcim/filtersets.py:1071 +#: netbox/dcim/filtersets.py:1071 msgid "VM cluster (ID)" msgstr "虚拟机集群(ID)" -#: dcim/filtersets.py:1077 extras/filtersets.py:591 -#: virtualization/filtersets.py:136 +#: netbox/dcim/filtersets.py:1077 netbox/extras/filtersets.py:591 +#: netbox/virtualization/filtersets.py:136 msgid "Cluster group (slug)" msgstr "集群组(缩写)" -#: dcim/filtersets.py:1082 virtualization/filtersets.py:130 +#: netbox/dcim/filtersets.py:1082 netbox/virtualization/filtersets.py:130 msgid "Cluster group (ID)" msgstr "集群组(ID)" -#: dcim/filtersets.py:1088 +#: netbox/dcim/filtersets.py:1088 msgid "Device model (slug)" msgstr "设备模块(缩写)" -#: dcim/filtersets.py:1099 dcim/forms/bulk_edit.py:516 +#: netbox/dcim/filtersets.py:1099 netbox/dcim/forms/bulk_edit.py:522 msgid "Is full depth" msgstr "是否全尺寸" -#: dcim/filtersets.py:1103 dcim/forms/common.py:18 -#: dcim/forms/filtersets.py:818 dcim/forms/filtersets.py:1385 -#: dcim/models/device_components.py:518 virtualization/filtersets.py:230 -#: virtualization/filtersets.py:301 virtualization/forms/filtersets.py:172 -#: virtualization/forms/filtersets.py:223 +#: 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 msgid "MAC address" msgstr "MAC 地址" -#: dcim/filtersets.py:1110 dcim/filtersets.py:1274 -#: dcim/forms/filtersets.py:827 dcim/forms/filtersets.py:930 -#: virtualization/filtersets.py:234 virtualization/forms/filtersets.py:176 +#: 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 msgid "Has a primary IP" msgstr "有主IP" -#: dcim/filtersets.py:1114 +#: netbox/dcim/filtersets.py:1114 msgid "Has an out-of-band IP" msgstr "有带外管理IP" -#: dcim/filtersets.py:1119 +#: netbox/dcim/filtersets.py:1119 msgid "Virtual chassis (ID)" msgstr "堆叠 (ID)" -#: dcim/filtersets.py:1123 +#: netbox/dcim/filtersets.py:1123 msgid "Is a virtual chassis member" msgstr "是堆叠成员" -#: dcim/filtersets.py:1164 +#: netbox/dcim/filtersets.py:1164 msgid "OOB IP (ID)" msgstr "带外管理IP(ID)" -#: dcim/filtersets.py:1168 +#: netbox/dcim/filtersets.py:1168 msgid "Has virtual device context" msgstr "有虚拟设备上下文" -#: dcim/filtersets.py:1257 +#: netbox/dcim/filtersets.py:1257 msgid "VDC (ID)" msgstr "VDC (ID)" -#: dcim/filtersets.py:1262 +#: netbox/dcim/filtersets.py:1262 msgid "Device model" msgstr "设备型号" -#: dcim/filtersets.py:1267 ipam/filtersets.py:632 vpn/filtersets.py:102 -#: vpn/filtersets.py:401 +#: netbox/dcim/filtersets.py:1267 netbox/ipam/filtersets.py:632 +#: netbox/vpn/filtersets.py:102 netbox/vpn/filtersets.py:401 msgid "Interface (ID)" msgstr "接口(ID)" -#: dcim/filtersets.py:1323 +#: netbox/dcim/filtersets.py:1323 msgid "Module type (model)" msgstr "模块类型(模块)" -#: dcim/filtersets.py:1329 +#: netbox/dcim/filtersets.py:1329 msgid "Module bay (ID)" msgstr "模块托架 (ID)" -#: dcim/filtersets.py:1333 dcim/filtersets.py:1425 ipam/filtersets.py:611 -#: ipam/filtersets.py:851 ipam/filtersets.py:1115 -#: virtualization/filtersets.py:161 vpn/filtersets.py:379 +#: 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/vpn/filtersets.py:379 msgid "Device (ID)" msgstr "设备(ID)" -#: dcim/filtersets.py:1421 +#: netbox/dcim/filtersets.py:1421 msgid "Rack (name)" msgstr "机柜(名称)" -#: dcim/filtersets.py:1431 ipam/filtersets.py:606 ipam/filtersets.py:846 -#: ipam/filtersets.py:1121 vpn/filtersets.py:374 +#: netbox/dcim/filtersets.py:1431 netbox/ipam/filtersets.py:606 +#: netbox/ipam/filtersets.py:846 netbox/ipam/filtersets.py:1121 +#: netbox/vpn/filtersets.py:374 msgid "Device (name)" msgstr "设备(名称)" -#: dcim/filtersets.py:1442 +#: netbox/dcim/filtersets.py:1442 msgid "Device type (model)" msgstr "设备型号 (model)" -#: dcim/filtersets.py:1447 +#: netbox/dcim/filtersets.py:1447 msgid "Device role (ID)" msgstr "设备角色(ID)" -#: dcim/filtersets.py:1453 +#: netbox/dcim/filtersets.py:1453 msgid "Device role (slug)" msgstr "设备角色(缩写)" -#: dcim/filtersets.py:1458 +#: netbox/dcim/filtersets.py:1458 msgid "Virtual Chassis (ID)" msgstr "堆叠(ID)" -#: dcim/filtersets.py:1464 dcim/forms/filtersets.py:109 -#: dcim/tables/devices.py:206 netbox/navigation/menu.py:79 -#: templates/dcim/device.html:120 templates/dcim/device_edit.html:93 -#: templates/dcim/virtualchassis.html:20 -#: templates/dcim/virtualchassis_add.html:8 -#: templates/dcim/virtualchassis_edit.html:24 +#: netbox/dcim/filtersets.py:1464 netbox/dcim/forms/filtersets.py:109 +#: netbox/dcim/tables/devices.py:206 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 +#: netbox/templates/dcim/virtualchassis_add.html:8 +#: netbox/templates/dcim/virtualchassis_edit.html:24 msgid "Virtual Chassis" msgstr "堆叠" -#: dcim/filtersets.py:1488 +#: netbox/dcim/filtersets.py:1488 msgid "Module (ID)" msgstr "模块(ID)" -#: dcim/filtersets.py:1495 +#: netbox/dcim/filtersets.py:1495 msgid "Cable (ID)" msgstr "线缆(ID)" -#: dcim/filtersets.py:1604 ipam/forms/bulk_import.py:189 -#: vpn/forms/bulk_import.py:308 +#: netbox/dcim/filtersets.py:1604 netbox/ipam/forms/bulk_import.py:189 +#: netbox/vpn/forms/bulk_import.py:308 msgid "Assigned VLAN" msgstr "指定VLAN" -#: dcim/filtersets.py:1608 +#: netbox/dcim/filtersets.py:1608 msgid "Assigned VID" msgstr "指定VID" -#: dcim/filtersets.py:1613 dcim/forms/bulk_edit.py:1489 -#: dcim/forms/bulk_import.py:891 dcim/forms/filtersets.py:1428 -#: dcim/forms/model_forms.py:1378 dcim/models/device_components.py:711 -#: dcim/tables/devices.py:626 ipam/filtersets.py:316 ipam/filtersets.py:327 -#: ipam/filtersets.py:483 ipam/filtersets.py:584 ipam/filtersets.py:595 -#: ipam/forms/bulk_edit.py:242 ipam/forms/bulk_edit.py:298 -#: ipam/forms/bulk_edit.py:340 ipam/forms/bulk_import.py:157 -#: ipam/forms/bulk_import.py:243 ipam/forms/bulk_import.py:279 -#: ipam/forms/filtersets.py:67 ipam/forms/filtersets.py:172 -#: ipam/forms/filtersets.py:309 ipam/forms/model_forms.py:62 -#: ipam/forms/model_forms.py:202 ipam/forms/model_forms.py:247 -#: ipam/forms/model_forms.py:300 ipam/forms/model_forms.py:431 -#: ipam/forms/model_forms.py:445 ipam/forms/model_forms.py:459 -#: ipam/models/ip.py:233 ipam/models/ip.py:512 ipam/models/ip.py:720 -#: ipam/models/vrfs.py:62 ipam/tables/ip.py:242 ipam/tables/ip.py:309 -#: ipam/tables/ip.py:360 ipam/tables/ip.py:450 -#: templates/dcim/interface.html:133 templates/ipam/ipaddress.html:18 -#: templates/ipam/iprange.html:40 templates/ipam/prefix.html:19 -#: templates/ipam/vrf.html:7 templates/ipam/vrf.html:13 -#: templates/virtualization/vminterface.html:47 -#: virtualization/forms/bulk_edit.py:261 -#: virtualization/forms/bulk_import.py:171 -#: virtualization/forms/filtersets.py:228 -#: virtualization/forms/model_forms.py:344 -#: virtualization/models/virtualmachines.py:355 -#: virtualization/tables/virtualmachines.py:143 +#: 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:316 +#: netbox/ipam/filtersets.py:327 netbox/ipam/filtersets.py:483 +#: netbox/ipam/filtersets.py:584 netbox/ipam/filtersets.py:595 +#: netbox/ipam/forms/bulk_edit.py: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/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 msgid "VRF" msgstr "VRF" -#: dcim/filtersets.py:1619 ipam/filtersets.py:322 ipam/filtersets.py:333 -#: ipam/filtersets.py:489 ipam/filtersets.py:590 ipam/filtersets.py:601 +#: 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 msgid "VRF (RD)" msgstr "VRF (RD)" -#: dcim/filtersets.py:1624 ipam/filtersets.py:1030 vpn/filtersets.py:342 +#: netbox/dcim/filtersets.py:1624 netbox/ipam/filtersets.py:1030 +#: netbox/vpn/filtersets.py:342 msgid "L2VPN (ID)" msgstr "L2VPN (ID)" -#: dcim/filtersets.py:1630 dcim/forms/filtersets.py:1433 -#: dcim/tables/devices.py:570 ipam/filtersets.py:1036 -#: ipam/forms/filtersets.py:518 ipam/tables/vlans.py:137 -#: templates/dcim/interface.html:93 templates/ipam/vlan.html:66 -#: templates/vpn/l2vpntermination.html:12 -#: virtualization/forms/filtersets.py:233 vpn/forms/bulk_import.py:280 -#: vpn/forms/filtersets.py:246 vpn/forms/model_forms.py:409 -#: vpn/forms/model_forms.py:427 vpn/models/l2vpn.py:63 vpn/tables/l2vpn.py:55 +#: netbox/dcim/filtersets.py:1630 netbox/dcim/forms/filtersets.py:1433 +#: netbox/dcim/tables/devices.py:570 netbox/ipam/filtersets.py:1036 +#: 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 +#: netbox/virtualization/forms/filtersets.py:233 +#: netbox/vpn/forms/bulk_import.py:280 netbox/vpn/forms/filtersets.py:246 +#: netbox/vpn/forms/model_forms.py:409 netbox/vpn/forms/model_forms.py:427 +#: netbox/vpn/models/l2vpn.py:63 netbox/vpn/tables/l2vpn.py:55 msgid "L2VPN" msgstr "L2VPN" -#: dcim/filtersets.py:1662 +#: netbox/dcim/filtersets.py:1662 msgid "Virtual Chassis Interfaces for Device" msgstr "设备的集群接口" -#: dcim/filtersets.py:1667 +#: netbox/dcim/filtersets.py:1667 msgid "Virtual Chassis Interfaces for Device (ID)" msgstr "设备的集群接口(ID)" -#: dcim/filtersets.py:1671 +#: netbox/dcim/filtersets.py:1671 msgid "Kind of interface" msgstr "接口类型" -#: dcim/filtersets.py:1676 virtualization/filtersets.py:293 +#: netbox/dcim/filtersets.py:1676 netbox/virtualization/filtersets.py:293 msgid "Parent interface (ID)" msgstr "父级接口(ID)" -#: dcim/filtersets.py:1681 virtualization/filtersets.py:298 +#: netbox/dcim/filtersets.py:1681 netbox/virtualization/filtersets.py:298 msgid "Bridged interface (ID)" msgstr "桥接接口(ID)" -#: dcim/filtersets.py:1686 +#: netbox/dcim/filtersets.py:1686 msgid "LAG interface (ID)" msgstr "链路聚合接口(ID)" -#: dcim/filtersets.py:1713 dcim/filtersets.py:1725 -#: dcim/forms/filtersets.py:1345 dcim/forms/model_forms.py:1690 -#: templates/dcim/virtualdevicecontext.html:15 +#: netbox/dcim/filtersets.py:1713 netbox/dcim/filtersets.py:1725 +#: netbox/dcim/forms/filtersets.py:1345 netbox/dcim/forms/model_forms.py:1697 +#: netbox/templates/dcim/virtualdevicecontext.html:15 msgid "Virtual Device Context" msgstr "虚拟设备上下文" -#: dcim/filtersets.py:1719 +#: netbox/dcim/filtersets.py:1719 msgid "Virtual Device Context (Identifier)" msgstr "虚拟设备上下文(ID)" -#: dcim/filtersets.py:1730 templates/wireless/wirelesslan.html:11 -#: wireless/forms/model_forms.py:53 +#: netbox/dcim/filtersets.py:1730 +#: netbox/templates/wireless/wirelesslan.html:11 +#: netbox/wireless/forms/model_forms.py:53 msgid "Wireless LAN" msgstr "无线局域网" -#: dcim/filtersets.py:1734 dcim/tables/devices.py:613 +#: netbox/dcim/filtersets.py:1734 netbox/dcim/tables/devices.py:613 msgid "Wireless link" msgstr "无线连接" -#: dcim/filtersets.py:1803 +#: netbox/dcim/filtersets.py:1803 msgid "Parent module bay (ID)" msgstr "父模块托架 (ID)" -#: dcim/filtersets.py:1808 +#: netbox/dcim/filtersets.py:1808 msgid "Installed module (ID)" msgstr "已安装模块(ID)" -#: dcim/filtersets.py:1819 +#: netbox/dcim/filtersets.py:1819 msgid "Installed device (ID)" msgstr "已安装设备(ID)" -#: dcim/filtersets.py:1825 +#: netbox/dcim/filtersets.py:1825 msgid "Installed device (name)" msgstr "已安装设备(名称)" -#: dcim/filtersets.py:1891 +#: netbox/dcim/filtersets.py:1891 msgid "Master (ID)" msgstr "主设备(ID)" -#: dcim/filtersets.py:1897 +#: netbox/dcim/filtersets.py:1897 msgid "Master (name)" msgstr "主设备(名称)" -#: dcim/filtersets.py:1939 tenancy/filtersets.py:245 +#: netbox/dcim/filtersets.py:1939 netbox/tenancy/filtersets.py:245 msgid "Tenant (ID)" msgstr "租户(ID)" -#: dcim/filtersets.py:1945 extras/filtersets.py:618 tenancy/filtersets.py:251 +#: netbox/dcim/filtersets.py:1945 netbox/extras/filtersets.py:618 +#: netbox/tenancy/filtersets.py:251 msgid "Tenant (slug)" msgstr "租户(缩写)" -#: dcim/filtersets.py:1981 dcim/forms/filtersets.py:1077 +#: netbox/dcim/filtersets.py:1981 netbox/dcim/forms/filtersets.py:1077 msgid "Unterminated" msgstr "未接终端" -#: dcim/filtersets.py:2239 +#: netbox/dcim/filtersets.py:2239 msgid "Power panel (ID)" msgstr "电源面板(ID)" -#: dcim/forms/bulk_create.py:40 extras/forms/filtersets.py:401 -#: extras/forms/model_forms.py:567 extras/forms/model_forms.py:619 -#: netbox/forms/base.py:86 netbox/forms/mixins.py:81 -#: netbox/tables/columns.py:478 -#: templates/circuits/inc/circuit_termination.html:32 -#: templates/generic/bulk_edit.html:65 templates/inc/panels/tags.html:5 -#: utilities/forms/fields/fields.py:81 +#: netbox/dcim/forms/bulk_create.py:40 netbox/extras/forms/filtersets.py: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/templates/circuits/inc/circuit_termination.html:32 +#: netbox/templates/generic/bulk_edit.html:65 +#: netbox/templates/inc/panels/tags.html:5 +#: netbox/utilities/forms/fields/fields.py:81 msgid "Tags" msgstr "标签" -#: dcim/forms/bulk_create.py:112 dcim/forms/filtersets.py:1498 -#: dcim/forms/model_forms.py:488 dcim/forms/model_forms.py:546 -#: dcim/forms/object_create.py:197 dcim/forms/object_create.py:353 -#: dcim/tables/devices.py:165 dcim/tables/devices.py:707 -#: dcim/tables/devicetypes.py:246 templates/dcim/device.html:43 -#: templates/dcim/device.html:131 templates/dcim/modulebay.html:38 -#: templates/dcim/virtualchassis.html:66 -#: templates/dcim/virtualchassis_edit.html:55 +#: 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/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/templates/dcim/device.html:43 netbox/templates/dcim/device.html:131 +#: netbox/templates/dcim/modulebay.html:38 +#: netbox/templates/dcim/virtualchassis.html:66 +#: netbox/templates/dcim/virtualchassis_edit.html:55 msgid "Position" msgstr "位置" -#: dcim/forms/bulk_create.py:114 +#: netbox/dcim/forms/bulk_create.py:114 msgid "" "Alphanumeric ranges are supported. (Must match the number of names being " "created.)" msgstr "支持字母和数字。(必须与正在创建的名称数相匹配)" -#: dcim/forms/bulk_edit.py:132 +#: netbox/dcim/forms/bulk_edit.py:133 msgid "Contact name" msgstr "联系人名字" -#: dcim/forms/bulk_edit.py:137 +#: netbox/dcim/forms/bulk_edit.py:138 msgid "Contact phone" msgstr "联系人手机" -#: dcim/forms/bulk_edit.py:143 +#: netbox/dcim/forms/bulk_edit.py:144 msgid "Contact E-mail" msgstr "联系人电子邮箱" -#: dcim/forms/bulk_edit.py:146 dcim/forms/bulk_import.py:123 -#: dcim/forms/model_forms.py:128 +#: netbox/dcim/forms/bulk_edit.py:147 netbox/dcim/forms/bulk_import.py:123 +#: netbox/dcim/forms/model_forms.py:128 msgid "Time zone" msgstr "时区" -#: dcim/forms/bulk_edit.py:224 dcim/forms/bulk_edit.py:495 -#: dcim/forms/bulk_edit.py:559 dcim/forms/bulk_edit.py:632 -#: dcim/forms/bulk_edit.py:656 dcim/forms/bulk_edit.py:740 -#: dcim/forms/bulk_edit.py:1267 dcim/forms/bulk_edit.py:1660 -#: dcim/forms/bulk_import.py:182 dcim/forms/bulk_import.py:371 -#: dcim/forms/bulk_import.py:405 dcim/forms/bulk_import.py:450 -#: dcim/forms/bulk_import.py:486 dcim/forms/bulk_import.py:1082 -#: dcim/forms/filtersets.py:313 dcim/forms/filtersets.py:372 -#: dcim/forms/filtersets.py:494 dcim/forms/filtersets.py:619 -#: dcim/forms/filtersets.py:700 dcim/forms/filtersets.py:782 -#: dcim/forms/filtersets.py:947 dcim/forms/filtersets.py:1539 -#: dcim/forms/model_forms.py:207 dcim/forms/model_forms.py:337 -#: dcim/forms/model_forms.py:349 dcim/forms/model_forms.py:395 -#: dcim/forms/model_forms.py:436 dcim/forms/model_forms.py:1075 -#: dcim/forms/model_forms.py:1515 dcim/forms/object_import.py:187 -#: dcim/tables/devices.py:96 dcim/tables/devices.py:172 -#: dcim/tables/devices.py:940 dcim/tables/devicetypes.py:80 -#: dcim/tables/devicetypes.py:308 dcim/tables/modules.py:20 -#: dcim/tables/modules.py:60 dcim/tables/racks.py:58 dcim/tables/racks.py:132 -#: templates/dcim/devicetype.html:14 templates/dcim/inventoryitem.html:44 -#: templates/dcim/manufacturer.html:33 templates/dcim/modulebay.html:62 -#: templates/dcim/moduletype.html:25 templates/dcim/platform.html:37 -#: templates/dcim/racktype.html:16 +#: 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/tables/modules.py:60 +#: 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/templates/dcim/manufacturer.html:33 +#: netbox/templates/dcim/modulebay.html:62 +#: netbox/templates/dcim/moduletype.html:25 +#: netbox/templates/dcim/platform.html:37 +#: netbox/templates/dcim/racktype.html:16 msgid "Manufacturer" msgstr "厂商" -#: dcim/forms/bulk_edit.py:229 dcim/forms/bulk_edit.py:372 -#: dcim/forms/bulk_import.py:191 dcim/forms/bulk_import.py:263 -#: dcim/forms/filtersets.py:255 -#: templates/dcim/inc/panels/racktype_dimensions.html:6 +#: 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/templates/dcim/inc/panels/racktype_dimensions.html:6 msgid "Form factor" msgstr "外形规格" -#: dcim/forms/bulk_edit.py:234 dcim/forms/bulk_edit.py:377 -#: dcim/forms/bulk_import.py:199 dcim/forms/bulk_import.py:266 -#: dcim/forms/filtersets.py:260 -#: templates/dcim/inc/panels/racktype_dimensions.html:10 +#: 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/templates/dcim/inc/panels/racktype_dimensions.html:10 msgid "Width" msgstr "宽度" -#: dcim/forms/bulk_edit.py:240 dcim/forms/bulk_edit.py:383 -#: templates/dcim/devicetype.html:37 +#: netbox/dcim/forms/bulk_edit.py:241 netbox/dcim/forms/bulk_edit.py:389 +#: netbox/dcim/forms/bulk_import.py:280 +#: netbox/templates/dcim/devicetype.html:37 msgid "Height (U)" msgstr "高度(U)" -#: dcim/forms/bulk_edit.py:249 dcim/forms/bulk_edit.py:388 -#: dcim/forms/filtersets.py:274 +#: netbox/dcim/forms/bulk_edit.py:250 netbox/dcim/forms/bulk_edit.py:394 +#: netbox/dcim/forms/filtersets.py:274 msgid "Descending units" msgstr "U位显示降序" -#: dcim/forms/bulk_edit.py:252 dcim/forms/bulk_edit.py:391 +#: netbox/dcim/forms/bulk_edit.py:253 netbox/dcim/forms/bulk_edit.py:397 msgid "Outer width" msgstr "外部宽度" -#: dcim/forms/bulk_edit.py:257 dcim/forms/bulk_edit.py:396 +#: netbox/dcim/forms/bulk_edit.py:258 netbox/dcim/forms/bulk_edit.py:402 msgid "Outer depth" msgstr "外部深度" -#: dcim/forms/bulk_edit.py:262 dcim/forms/bulk_edit.py:401 -#: dcim/forms/bulk_import.py:204 dcim/forms/bulk_import.py:271 +#: 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 msgid "Outer unit" msgstr "外部单元" -#: dcim/forms/bulk_edit.py:267 dcim/forms/bulk_edit.py:406 +#: netbox/dcim/forms/bulk_edit.py:268 netbox/dcim/forms/bulk_edit.py:412 msgid "Mounting depth" msgstr "安装深度" -#: dcim/forms/bulk_edit.py:272 dcim/forms/bulk_edit.py:299 -#: dcim/forms/bulk_edit.py:416 dcim/forms/bulk_edit.py:446 -#: dcim/forms/bulk_edit.py:529 dcim/forms/bulk_edit.py:552 -#: dcim/forms/bulk_edit.py:573 dcim/forms/bulk_edit.py:595 -#: dcim/forms/bulk_import.py:384 dcim/forms/bulk_import.py:416 -#: dcim/forms/filtersets.py:285 dcim/forms/filtersets.py:307 -#: dcim/forms/filtersets.py:327 dcim/forms/filtersets.py:401 -#: dcim/forms/filtersets.py:488 dcim/forms/filtersets.py:594 -#: dcim/forms/filtersets.py:613 dcim/forms/filtersets.py:674 -#: dcim/forms/model_forms.py:221 dcim/forms/model_forms.py:298 -#: dcim/tables/devicetypes.py:106 dcim/tables/modules.py:35 -#: dcim/tables/racks.py:74 dcim/tables/racks.py:172 -#: extras/forms/bulk_edit.py:53 extras/forms/bulk_edit.py:133 -#: extras/forms/bulk_edit.py:183 extras/forms/bulk_edit.py:288 -#: extras/forms/filtersets.py:64 extras/forms/filtersets.py:156 -#: extras/forms/filtersets.py:243 ipam/forms/bulk_edit.py:190 -#: templates/dcim/device.html:324 templates/dcim/devicetype.html:49 -#: templates/dcim/moduletype.html:45 templates/dcim/rack.html:81 -#: templates/dcim/racktype.html:41 templates/extras/configcontext.html:17 -#: templates/extras/customlink.html:25 templates/extras/savedfilter.html:33 -#: templates/ipam/role.html:30 +#: netbox/dcim/forms/bulk_edit.py: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/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/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/racktype.html:41 +#: netbox/templates/extras/configcontext.html:17 +#: netbox/templates/extras/customlink.html:25 +#: netbox/templates/extras/savedfilter.html:33 +#: netbox/templates/ipam/role.html:30 msgid "Weight" msgstr "重量" -#: dcim/forms/bulk_edit.py:277 dcim/forms/bulk_edit.py:421 -#: dcim/forms/filtersets.py:290 +#: netbox/dcim/forms/bulk_edit.py:278 netbox/dcim/forms/bulk_edit.py:427 +#: netbox/dcim/forms/filtersets.py:290 msgid "Max weight" msgstr "最大承重" -#: dcim/forms/bulk_edit.py:282 dcim/forms/bulk_edit.py:426 -#: dcim/forms/bulk_edit.py:534 dcim/forms/bulk_edit.py:578 -#: dcim/forms/bulk_import.py:210 dcim/forms/bulk_import.py:283 -#: dcim/forms/bulk_import.py:389 dcim/forms/bulk_import.py:421 -#: dcim/forms/filtersets.py:295 dcim/forms/filtersets.py:598 -#: dcim/forms/filtersets.py:678 +#: 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 msgid "Weight unit" msgstr "重量单位" -#: dcim/forms/bulk_edit.py:296 dcim/forms/filtersets.py:305 -#: dcim/forms/model_forms.py:217 dcim/forms/model_forms.py:256 -#: templates/dcim/rack.html:45 templates/dcim/racktype.html:13 +#: 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/templates/dcim/rack.html:45 netbox/templates/dcim/racktype.html:13 msgid "Rack Type" msgstr "机架类型" -#: dcim/forms/bulk_edit.py:298 dcim/forms/model_forms.py:220 -#: dcim/forms/model_forms.py:297 +#: netbox/dcim/forms/bulk_edit.py:299 netbox/dcim/forms/model_forms.py:220 +#: netbox/dcim/forms/model_forms.py:297 msgid "Outer Dimensions" msgstr "外部尺寸" -#: dcim/forms/bulk_edit.py:301 dcim/forms/model_forms.py:222 -#: dcim/forms/model_forms.py:299 templates/dcim/device.html:315 -#: templates/dcim/inc/panels/racktype_dimensions.html:3 +#: 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/templates/dcim/inc/panels/racktype_dimensions.html:3 msgid "Dimensions" msgstr "外部尺寸" -#: dcim/forms/bulk_edit.py:303 dcim/forms/filtersets.py:306 -#: dcim/forms/filtersets.py:326 dcim/forms/model_forms.py:224 -#: templates/dcim/inc/panels/racktype_numbering.html:3 +#: 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/templates/dcim/inc/panels/racktype_numbering.html:3 msgid "Numbering" msgstr "编号" -#: dcim/forms/bulk_edit.py:357 dcim/forms/bulk_edit.py:1262 -#: dcim/forms/bulk_edit.py:1655 dcim/forms/bulk_import.py:253 -#: dcim/forms/bulk_import.py:1076 dcim/forms/filtersets.py:367 -#: dcim/forms/filtersets.py:777 dcim/forms/filtersets.py:1534 -#: dcim/forms/model_forms.py:251 dcim/forms/model_forms.py:1070 -#: dcim/forms/model_forms.py:1510 dcim/forms/object_import.py:181 -#: dcim/tables/devices.py:169 dcim/tables/devices.py:809 -#: dcim/tables/devices.py:937 dcim/tables/devicetypes.py:304 -#: dcim/tables/racks.py:129 extras/filtersets.py:552 -#: ipam/forms/bulk_edit.py:261 ipam/forms/bulk_edit.py:311 -#: ipam/forms/bulk_edit.py:359 ipam/forms/bulk_edit.py:511 -#: ipam/forms/bulk_import.py:197 ipam/forms/bulk_import.py:262 -#: ipam/forms/bulk_import.py:298 ipam/forms/bulk_import.py:455 -#: ipam/forms/filtersets.py:237 ipam/forms/filtersets.py:289 -#: ipam/forms/filtersets.py:360 ipam/forms/filtersets.py:509 -#: ipam/forms/model_forms.py:188 ipam/forms/model_forms.py:221 -#: ipam/forms/model_forms.py:250 ipam/forms/model_forms.py:643 -#: ipam/tables/ip.py:258 ipam/tables/ip.py:316 ipam/tables/ip.py:367 -#: ipam/tables/vlans.py:130 ipam/tables/vlans.py:235 -#: templates/dcim/device.html:182 -#: templates/dcim/inc/panels/inventory_items.html:20 -#: templates/dcim/interface.html:223 templates/dcim/inventoryitem.html:36 -#: templates/dcim/rack.html:49 templates/ipam/ipaddress.html:41 -#: templates/ipam/iprange.html:50 templates/ipam/prefix.html:77 -#: templates/ipam/role.html:19 templates/ipam/vlan.html:52 -#: templates/virtualization/virtualmachine.html:23 -#: templates/vpn/tunneltermination.html:17 -#: templates/wireless/inc/wirelesslink_interface.html:20 -#: tenancy/forms/bulk_edit.py:142 tenancy/forms/filtersets.py:107 -#: tenancy/forms/model_forms.py:137 tenancy/tables/contacts.py:102 -#: virtualization/forms/bulk_edit.py:145 -#: virtualization/forms/bulk_import.py:106 -#: virtualization/forms/filtersets.py:157 -#: virtualization/forms/model_forms.py:195 -#: virtualization/tables/virtualmachines.py:75 vpn/forms/bulk_edit.py:87 -#: vpn/forms/bulk_import.py:81 vpn/forms/filtersets.py:85 -#: vpn/forms/model_forms.py:78 vpn/forms/model_forms.py:113 -#: vpn/tables/tunnels.py:82 +#: netbox/dcim/forms/bulk_edit.py: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 "角色" -#: dcim/forms/bulk_edit.py:364 dcim/forms/bulk_edit.py:712 -#: dcim/forms/bulk_edit.py:764 templates/dcim/device.html:104 -#: templates/dcim/module.html:77 templates/dcim/modulebay.html:70 -#: templates/dcim/rack.html:57 templates/virtualization/virtualmachine.html:35 +#: netbox/dcim/forms/bulk_edit.py:363 netbox/dcim/forms/bulk_import.py:260 +#: netbox/dcim/forms/filtersets.py:380 +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/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 "序列号" -#: dcim/forms/bulk_edit.py:367 dcim/forms/filtersets.py:387 -#: dcim/forms/filtersets.py:813 dcim/forms/filtersets.py:967 -#: dcim/forms/filtersets.py:1546 +#: 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 msgid "Asset tag" msgstr "资产标签" -#: dcim/forms/bulk_edit.py:411 dcim/forms/bulk_edit.py:524 -#: dcim/forms/bulk_edit.py:568 dcim/forms/bulk_edit.py:705 -#: dcim/forms/bulk_import.py:277 dcim/forms/bulk_import.py:410 -#: dcim/forms/bulk_import.py:580 dcim/forms/filtersets.py:280 -#: dcim/forms/filtersets.py:511 dcim/forms/filtersets.py:669 -#: dcim/forms/filtersets.py:804 templates/dcim/device.html:98 -#: templates/dcim/devicetype.html:65 templates/dcim/moduletype.html:41 -#: templates/dcim/rack.html:65 templates/dcim/racktype.html:28 +#: 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/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 "气流方向" -#: dcim/forms/bulk_edit.py:440 dcim/forms/bulk_edit.py:910 -#: dcim/forms/bulk_import.py:322 dcim/forms/bulk_import.py:325 -#: dcim/forms/bulk_import.py:553 dcim/forms/bulk_import.py:1358 -#: dcim/forms/bulk_import.py:1362 dcim/forms/filtersets.py:104 -#: dcim/forms/filtersets.py:324 dcim/forms/filtersets.py:405 -#: dcim/forms/filtersets.py:419 dcim/forms/filtersets.py:457 -#: dcim/forms/filtersets.py:772 dcim/forms/filtersets.py:1035 -#: dcim/forms/filtersets.py:1167 dcim/forms/model_forms.py:264 -#: dcim/forms/model_forms.py:306 dcim/forms/model_forms.py:479 -#: dcim/forms/model_forms.py:755 dcim/forms/object_create.py:400 -#: dcim/tables/devices.py:161 dcim/tables/power.py:70 dcim/tables/racks.py:217 -#: ipam/forms/filtersets.py:442 templates/dcim/device.html:30 -#: templates/dcim/inc/cable_termination.html:16 -#: templates/dcim/powerfeed.html:28 templates/dcim/rack.html:13 -#: templates/dcim/rack/base.html:4 templates/dcim/rackreservation.html:19 -#: templates/dcim/rackreservation.html:36 -#: virtualization/forms/model_forms.py:113 +#: netbox/dcim/forms/bulk_edit.py: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/templates/dcim/device.html:30 +#: netbox/templates/dcim/inc/cable_termination.html:16 +#: netbox/templates/dcim/powerfeed.html:28 netbox/templates/dcim/rack.html:13 +#: netbox/templates/dcim/rack/base.html:4 +#: netbox/templates/dcim/rackreservation.html:19 +#: netbox/templates/dcim/rackreservation.html:36 +#: netbox/virtualization/forms/model_forms.py:113 msgid "Rack" msgstr "机柜" -#: dcim/forms/bulk_edit.py:444 dcim/forms/bulk_edit.py:730 -#: dcim/forms/filtersets.py:325 dcim/forms/filtersets.py:398 -#: dcim/forms/filtersets.py:481 dcim/forms/filtersets.py:608 -#: dcim/forms/filtersets.py:721 dcim/forms/filtersets.py:942 -#: dcim/forms/model_forms.py:670 dcim/forms/model_forms.py:1580 -#: templates/dcim/device_edit.html:20 +#: 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/templates/dcim/device_edit.html:20 msgid "Hardware" msgstr "硬件" -#: dcim/forms/bulk_edit.py:500 dcim/forms/bulk_import.py:377 -#: dcim/forms/filtersets.py:499 dcim/forms/model_forms.py:353 +#: 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 msgid "Default platform" msgstr "默认系统平台" -#: dcim/forms/bulk_edit.py:505 dcim/forms/bulk_edit.py:564 -#: dcim/forms/filtersets.py:502 dcim/forms/filtersets.py:622 +#: 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 msgid "Part number" msgstr "部件编码(PN)" -#: dcim/forms/bulk_edit.py:509 +#: netbox/dcim/forms/bulk_edit.py:515 msgid "U height" msgstr "U高度" -#: dcim/forms/bulk_edit.py:521 dcim/tables/devicetypes.py:102 +#: netbox/dcim/forms/bulk_edit.py:527 netbox/dcim/tables/devicetypes.py:102 msgid "Exclude from utilization" msgstr "从利用率中排除" -#: dcim/forms/bulk_edit.py:550 dcim/forms/model_forms.py:368 -#: dcim/tables/devicetypes.py:77 templates/dcim/device.html:88 -#: templates/dcim/devicebay.html:52 templates/dcim/module.html:61 +#: 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/templates/dcim/devicebay.html:52 +#: netbox/templates/dcim/module.html:61 msgid "Device Type" msgstr "设备型号" -#: dcim/forms/bulk_edit.py:592 dcim/forms/model_forms.py:401 -#: dcim/tables/modules.py:17 dcim/tables/modules.py:65 -#: templates/dcim/module.html:65 templates/dcim/modulebay.html:66 -#: templates/dcim/moduletype.html:22 +#: 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/templates/dcim/module.html:65 +#: netbox/templates/dcim/modulebay.html:66 +#: netbox/templates/dcim/moduletype.html:22 msgid "Module Type" msgstr "设备配件类型" -#: dcim/forms/bulk_edit.py:596 dcim/forms/model_forms.py:371 -#: dcim/forms/model_forms.py:402 templates/dcim/devicetype.html:11 +#: netbox/dcim/forms/bulk_edit.py:602 netbox/dcim/forms/model_forms.py:371 +#: netbox/dcim/forms/model_forms.py:402 +#: netbox/templates/dcim/devicetype.html:11 msgid "Chassis" msgstr "机箱" -#: dcim/forms/bulk_edit.py:610 dcim/models/devices.py:484 -#: dcim/tables/devices.py:67 +#: netbox/dcim/forms/bulk_edit.py:616 netbox/dcim/models/devices.py:484 +#: netbox/dcim/tables/devices.py:67 msgid "VM role" msgstr "VM 角色" -#: dcim/forms/bulk_edit.py:613 dcim/forms/bulk_edit.py:637 -#: dcim/forms/bulk_edit.py:720 dcim/forms/bulk_import.py:434 -#: dcim/forms/bulk_import.py:438 dcim/forms/bulk_import.py:457 -#: dcim/forms/bulk_import.py:461 dcim/forms/bulk_import.py:586 -#: dcim/forms/bulk_import.py:590 dcim/forms/filtersets.py:689 -#: dcim/forms/filtersets.py:705 dcim/forms/filtersets.py:823 -#: dcim/forms/model_forms.py:415 dcim/forms/model_forms.py:441 -#: dcim/forms/model_forms.py:555 virtualization/forms/bulk_import.py:132 -#: virtualization/forms/bulk_import.py:133 -#: virtualization/forms/filtersets.py:188 -#: virtualization/forms/model_forms.py:215 +#: 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 msgid "Config template" msgstr "配置模版" -#: dcim/forms/bulk_edit.py:661 dcim/forms/bulk_edit.py:1061 -#: dcim/forms/bulk_import.py:492 dcim/forms/filtersets.py:114 -#: dcim/forms/model_forms.py:501 dcim/forms/model_forms.py:872 -#: dcim/forms/model_forms.py:889 extras/filtersets.py:547 +#: 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 msgid "Device type" msgstr "设备型号" -#: dcim/forms/bulk_edit.py:672 dcim/forms/bulk_import.py:473 -#: dcim/forms/filtersets.py:119 dcim/forms/model_forms.py:509 +#: 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 msgid "Device role" msgstr "设备角色" -#: dcim/forms/bulk_edit.py:695 dcim/forms/bulk_import.py:498 -#: dcim/forms/filtersets.py:796 dcim/forms/model_forms.py:451 -#: dcim/forms/model_forms.py:513 dcim/tables/devices.py:182 -#: extras/filtersets.py:563 templates/dcim/device.html:186 -#: templates/dcim/platform.html:26 -#: templates/virtualization/virtualmachine.html:27 -#: virtualization/forms/bulk_edit.py:160 -#: virtualization/forms/bulk_import.py:122 -#: virtualization/forms/filtersets.py:168 -#: virtualization/forms/model_forms.py:203 -#: virtualization/tables/virtualmachines.py:79 +#: 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/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 msgid "Platform" msgstr "平台" -#: dcim/forms/bulk_edit.py:728 dcim/forms/bulk_edit.py:1281 -#: dcim/forms/bulk_edit.py:1650 dcim/forms/bulk_edit.py:1696 -#: dcim/forms/bulk_import.py:641 dcim/forms/bulk_import.py:703 -#: dcim/forms/bulk_import.py:729 dcim/forms/bulk_import.py:755 -#: dcim/forms/bulk_import.py:775 dcim/forms/bulk_import.py:828 -#: dcim/forms/bulk_import.py:946 dcim/forms/bulk_import.py:994 -#: dcim/forms/bulk_import.py:1011 dcim/forms/bulk_import.py:1023 -#: dcim/forms/bulk_import.py:1071 dcim/forms/bulk_import.py:1422 -#: dcim/forms/connections.py:24 dcim/forms/filtersets.py:131 -#: dcim/forms/filtersets.py:921 dcim/forms/filtersets.py:1051 -#: dcim/forms/filtersets.py:1242 dcim/forms/filtersets.py:1267 -#: dcim/forms/filtersets.py:1291 dcim/forms/filtersets.py:1311 -#: dcim/forms/filtersets.py:1334 dcim/forms/filtersets.py:1444 -#: dcim/forms/filtersets.py:1469 dcim/forms/filtersets.py:1493 -#: dcim/forms/filtersets.py:1511 dcim/forms/filtersets.py:1528 -#: dcim/forms/filtersets.py:1592 dcim/forms/filtersets.py:1616 -#: dcim/forms/filtersets.py:1640 dcim/forms/model_forms.py:633 -#: dcim/forms/model_forms.py:849 dcim/forms/model_forms.py:1208 -#: dcim/forms/model_forms.py:1664 dcim/forms/object_create.py:257 -#: dcim/tables/connections.py:22 dcim/tables/connections.py:41 -#: dcim/tables/connections.py:60 dcim/tables/devices.py:285 -#: dcim/tables/devices.py:371 dcim/tables/devices.py:412 -#: dcim/tables/devices.py:454 dcim/tables/devices.py:505 -#: dcim/tables/devices.py:597 dcim/tables/devices.py:697 -#: dcim/tables/devices.py:754 dcim/tables/devices.py:801 -#: dcim/tables/devices.py:861 dcim/tables/devices.py:930 -#: dcim/tables/devices.py:1057 dcim/tables/modules.py:52 -#: extras/forms/filtersets.py:321 ipam/forms/bulk_import.py:304 -#: ipam/forms/bulk_import.py:481 ipam/forms/filtersets.py:551 -#: ipam/forms/model_forms.py:319 ipam/forms/model_forms.py:679 -#: ipam/forms/model_forms.py:712 ipam/forms/model_forms.py:738 -#: ipam/tables/vlans.py:180 templates/dcim/consoleport.html:20 -#: templates/dcim/consoleserverport.html:20 templates/dcim/device.html:15 -#: templates/dcim/device.html:130 templates/dcim/device_edit.html:10 -#: templates/dcim/devicebay.html:20 templates/dcim/devicebay.html:48 -#: templates/dcim/frontport.html:20 templates/dcim/interface.html:30 -#: templates/dcim/interface.html:161 templates/dcim/inventoryitem.html:20 -#: templates/dcim/module.html:57 templates/dcim/modulebay.html:20 -#: templates/dcim/poweroutlet.html:20 templates/dcim/powerport.html:20 -#: templates/dcim/rearport.html:20 templates/dcim/virtualchassis.html:65 -#: templates/dcim/virtualchassis_edit.html:51 -#: templates/dcim/virtualdevicecontext.html:22 -#: templates/virtualization/virtualmachine.html:114 -#: templates/vpn/tunneltermination.html:23 -#: templates/wireless/inc/wirelesslink_interface.html:6 -#: virtualization/filtersets.py:167 virtualization/forms/bulk_edit.py:137 -#: virtualization/forms/bulk_import.py:99 -#: virtualization/forms/filtersets.py:128 -#: virtualization/forms/model_forms.py:185 -#: virtualization/tables/virtualmachines.py:71 vpn/choices.py:44 -#: vpn/forms/bulk_import.py:86 vpn/forms/bulk_import.py:283 -#: vpn/forms/filtersets.py:275 vpn/forms/model_forms.py:90 -#: vpn/forms/model_forms.py:125 vpn/forms/model_forms.py:236 -#: vpn/forms/model_forms.py:453 wireless/forms/model_forms.py:99 -#: wireless/forms/model_forms.py:141 wireless/tables/wirelesslan.py:75 -msgid "Device" -msgstr "设备" - -#: dcim/forms/bulk_edit.py:731 templates/extras/dashboard/widget_config.html:7 -#: virtualization/forms/bulk_edit.py:191 -msgid "Configuration" -msgstr "配置" - -#: dcim/forms/bulk_edit.py:745 dcim/forms/bulk_import.py:653 -#: dcim/forms/model_forms.py:647 dcim/forms/model_forms.py:897 -msgid "Module type" -msgstr "模块类型" - -#: dcim/forms/bulk_edit.py:799 dcim/forms/bulk_edit.py:984 -#: dcim/forms/bulk_edit.py:1003 dcim/forms/bulk_edit.py:1026 -#: dcim/forms/bulk_edit.py:1068 dcim/forms/bulk_edit.py:1112 -#: dcim/forms/bulk_edit.py:1163 dcim/forms/bulk_edit.py:1190 -#: dcim/forms/bulk_edit.py:1217 dcim/forms/bulk_edit.py:1235 -#: dcim/forms/bulk_edit.py:1253 dcim/forms/filtersets.py:67 -#: dcim/forms/object_create.py:46 templates/dcim/cable.html:32 -#: templates/dcim/consoleport.html:32 templates/dcim/consoleserverport.html:32 -#: templates/dcim/devicebay.html:28 templates/dcim/frontport.html:32 -#: templates/dcim/inc/panels/inventory_items.html:19 -#: templates/dcim/interface.html:42 templates/dcim/inventoryitem.html:32 -#: templates/dcim/modulebay.html:34 templates/dcim/poweroutlet.html:32 -#: templates/dcim/powerport.html:32 templates/dcim/rearport.html:32 -#: templates/extras/customfield.html:26 templates/generic/bulk_import.html:162 -msgid "Label" -msgstr "标记" - -#: dcim/forms/bulk_edit.py:808 dcim/forms/filtersets.py:1068 -#: templates/dcim/cable.html:50 -msgid "Length" -msgstr "长度" - -#: dcim/forms/bulk_edit.py:813 dcim/forms/bulk_import.py:1226 -#: dcim/forms/bulk_import.py:1229 dcim/forms/filtersets.py:1072 -msgid "Length unit" -msgstr "长度单位" - -#: dcim/forms/bulk_edit.py:837 templates/dcim/virtualchassis.html:23 -msgid "Domain" -msgstr "域" - -#: dcim/forms/bulk_edit.py:905 dcim/forms/bulk_import.py:1345 -#: dcim/forms/filtersets.py:1158 dcim/forms/model_forms.py:750 -msgid "Power panel" -msgstr "电源面版" - -#: dcim/forms/bulk_edit.py:927 dcim/forms/bulk_import.py:1381 -#: dcim/forms/filtersets.py:1180 templates/dcim/powerfeed.html:83 -msgid "Supply" -msgstr "供应" - -#: dcim/forms/bulk_edit.py:933 dcim/forms/bulk_import.py:1386 -#: dcim/forms/filtersets.py:1185 templates/dcim/powerfeed.html:95 -msgid "Phase" -msgstr "相位" - -#: dcim/forms/bulk_edit.py:939 dcim/forms/filtersets.py:1190 -#: templates/dcim/powerfeed.html:87 -msgid "Voltage" -msgstr "电压" - -#: dcim/forms/bulk_edit.py:943 dcim/forms/filtersets.py:1194 -#: templates/dcim/powerfeed.html:91 -msgid "Amperage" -msgstr "电流" - -#: dcim/forms/bulk_edit.py:947 dcim/forms/filtersets.py:1198 -msgid "Max utilization" -msgstr "最大利用率" - -#: dcim/forms/bulk_edit.py:1036 -msgid "Maximum draw" -msgstr "最大功率" - -#: dcim/forms/bulk_edit.py:1039 dcim/models/device_component_templates.py:282 -#: dcim/models/device_components.py:356 -msgid "Maximum power draw (watts)" -msgstr "最大功率(瓦)" - -#: dcim/forms/bulk_edit.py:1042 -msgid "Allocated draw" -msgstr "分配功率" - -#: dcim/forms/bulk_edit.py:1045 dcim/models/device_component_templates.py:289 -#: dcim/models/device_components.py:363 -msgid "Allocated power draw (watts)" -msgstr "分配功率(瓦)" - -#: dcim/forms/bulk_edit.py:1078 dcim/forms/bulk_import.py:786 -#: dcim/forms/model_forms.py:953 dcim/forms/model_forms.py:1278 -#: dcim/forms/model_forms.py:1567 dcim/forms/object_import.py:55 -msgid "Power port" -msgstr "电源接口" - -#: dcim/forms/bulk_edit.py:1083 dcim/forms/bulk_import.py:793 -msgid "Feed leg" -msgstr "馈电线路" - -#: dcim/forms/bulk_edit.py:1129 dcim/forms/bulk_edit.py:1440 -msgid "Management only" -msgstr "仅限管理" - -#: dcim/forms/bulk_edit.py:1139 dcim/forms/bulk_edit.py:1446 -#: dcim/forms/bulk_import.py:876 dcim/forms/filtersets.py:1394 -#: dcim/forms/object_import.py:90 -#: dcim/models/device_component_templates.py:437 -#: dcim/models/device_components.py:670 -msgid "PoE mode" -msgstr "PoE模式" - -#: dcim/forms/bulk_edit.py:1145 dcim/forms/bulk_edit.py:1452 -#: dcim/forms/bulk_import.py:882 dcim/forms/filtersets.py:1399 -#: dcim/forms/object_import.py:95 -#: dcim/models/device_component_templates.py:443 -#: dcim/models/device_components.py:676 -msgid "PoE type" -msgstr "PoE类型" - -#: dcim/forms/bulk_edit.py:1151 dcim/forms/filtersets.py:1404 -#: dcim/forms/object_import.py:100 -msgid "Wireless role" -msgstr "无线角色" - -#: dcim/forms/bulk_edit.py:1288 dcim/forms/model_forms.py:669 -#: dcim/forms/model_forms.py:1223 dcim/tables/devices.py:313 -#: templates/dcim/consoleport.html:24 templates/dcim/consoleserverport.html:24 -#: templates/dcim/frontport.html:24 templates/dcim/interface.html:34 -#: templates/dcim/module.html:54 templates/dcim/modulebay.html:26 -#: templates/dcim/modulebay.html:58 templates/dcim/poweroutlet.html:24 -#: templates/dcim/powerport.html:24 templates/dcim/rearport.html:24 -msgid "Module" -msgstr "模块" - -#: dcim/forms/bulk_edit.py:1420 dcim/tables/devices.py:665 -#: templates/dcim/interface.html:110 -msgid "LAG" -msgstr "链路聚合" - -#: dcim/forms/bulk_edit.py:1425 dcim/forms/model_forms.py:1305 -msgid "Virtual device contexts" -msgstr "设备虚拟上下文" - -#: dcim/forms/bulk_edit.py:1431 dcim/forms/bulk_import.py:714 -#: dcim/forms/bulk_import.py:740 dcim/forms/filtersets.py:1252 -#: dcim/forms/filtersets.py:1277 dcim/forms/filtersets.py:1358 -#: dcim/tables/devices.py:610 -#: templates/circuits/inc/circuit_termination_fields.html:67 -#: templates/dcim/consoleport.html:40 templates/dcim/consoleserverport.html:40 -msgid "Speed" -msgstr "速率" - -#: dcim/forms/bulk_edit.py:1460 dcim/forms/bulk_import.py:885 -#: templates/vpn/ikepolicy.html:25 templates/vpn/ipsecprofile.html:21 -#: templates/vpn/ipsecprofile.html:48 virtualization/forms/bulk_edit.py:233 -#: virtualization/forms/bulk_import.py:165 vpn/forms/bulk_edit.py:146 -#: vpn/forms/bulk_edit.py:232 vpn/forms/bulk_import.py:176 -#: vpn/forms/bulk_import.py:234 vpn/forms/filtersets.py:135 -#: vpn/forms/filtersets.py:178 vpn/forms/filtersets.py:192 -#: vpn/tables/crypto.py:64 vpn/tables/crypto.py:162 -msgid "Mode" -msgstr "模式" - -#: dcim/forms/bulk_edit.py:1468 dcim/forms/model_forms.py:1354 -#: ipam/forms/bulk_import.py:178 ipam/forms/filtersets.py:498 -#: ipam/models/vlans.py:84 virtualization/forms/bulk_edit.py:240 -#: virtualization/forms/model_forms.py:321 -msgid "VLAN group" -msgstr "VLAN 组" - -#: dcim/forms/bulk_edit.py:1476 dcim/forms/model_forms.py:1360 -#: dcim/tables/devices.py:579 virtualization/forms/bulk_edit.py:248 -#: virtualization/forms/model_forms.py:326 -msgid "Untagged VLAN" -msgstr "未标记的VLAN" - -#: dcim/forms/bulk_edit.py:1484 dcim/forms/model_forms.py:1369 -#: dcim/tables/devices.py:585 virtualization/forms/bulk_edit.py:256 -#: virtualization/forms/model_forms.py:335 -msgid "Tagged VLANs" -msgstr "已标记 VLANs" - -#: dcim/forms/bulk_edit.py:1494 dcim/forms/model_forms.py:1341 -msgid "Wireless LAN group" -msgstr "无线局域网组" - -#: dcim/forms/bulk_edit.py:1499 dcim/forms/model_forms.py:1346 -#: dcim/tables/devices.py:619 netbox/navigation/menu.py:146 -#: templates/dcim/interface.html:280 wireless/tables/wirelesslan.py:24 -msgid "Wireless LANs" -msgstr "无线局域网" - -#: dcim/forms/bulk_edit.py:1508 dcim/forms/filtersets.py:1328 -#: dcim/forms/model_forms.py:1390 ipam/forms/bulk_edit.py:286 -#: ipam/forms/bulk_edit.py:378 ipam/forms/filtersets.py:169 -#: templates/dcim/interface.html:122 templates/ipam/prefix.html:95 -#: virtualization/forms/model_forms.py:349 -msgid "Addressing" -msgstr "寻址" - -#: dcim/forms/bulk_edit.py:1509 dcim/forms/filtersets.py:720 -#: dcim/forms/model_forms.py:1391 virtualization/forms/model_forms.py:350 -msgid "Operation" -msgstr "操作" - -#: dcim/forms/bulk_edit.py:1510 dcim/forms/filtersets.py:1329 -#: dcim/forms/model_forms.py:987 dcim/forms/model_forms.py:1393 -msgid "PoE" -msgstr "PoE" - -#: dcim/forms/bulk_edit.py:1511 dcim/forms/model_forms.py:1392 -#: templates/dcim/interface.html:99 virtualization/forms/bulk_edit.py:267 -#: virtualization/forms/model_forms.py:351 -msgid "Related Interfaces" -msgstr "相关接口" - -#: dcim/forms/bulk_edit.py:1512 dcim/forms/model_forms.py:1394 -#: virtualization/forms/bulk_edit.py:268 -#: virtualization/forms/model_forms.py:352 -msgid "802.1Q Switching" -msgstr "802.1Q 交换" - -#: dcim/forms/bulk_edit.py:1574 dcim/forms/bulk_edit.py:1576 -msgid "Interface mode must be specified to assign VLANs" -msgstr "该接口模式下,必须指定VLAN" - -#: dcim/forms/bulk_edit.py:1581 dcim/forms/common.py:50 -msgid "An access interface cannot have tagged VLANs assigned." -msgstr "access接口不允许指定Tag的VLAN" - -#: dcim/forms/bulk_import.py:64 -msgid "Name of parent region" -msgstr "上一级区域的名称" - -#: dcim/forms/bulk_import.py:78 -msgid "Name of parent site group" -msgstr "上一级站点组的名称" - -#: dcim/forms/bulk_import.py:97 -msgid "Assigned region" -msgstr "指定地区" - -#: dcim/forms/bulk_import.py:104 tenancy/forms/bulk_import.py:44 -#: tenancy/forms/bulk_import.py:85 wireless/forms/bulk_import.py:40 -msgid "Assigned group" -msgstr "指定组" - -#: dcim/forms/bulk_import.py:123 -msgid "available options" -msgstr "可用选项" - -#: dcim/forms/bulk_import.py:134 dcim/forms/bulk_import.py:543 -#: dcim/forms/bulk_import.py:1342 ipam/forms/bulk_import.py:175 -#: ipam/forms/bulk_import.py:433 virtualization/forms/bulk_import.py:63 -#: virtualization/forms/bulk_import.py:89 -msgid "Assigned site" -msgstr "指定站点" - -#: dcim/forms/bulk_import.py:141 -msgid "Parent location" -msgstr "上一级位置" - -#: dcim/forms/bulk_import.py:143 -msgid "Location not found." -msgstr "未找到该位置" - -#: dcim/forms/bulk_import.py:185 -msgid "The manufacturer of this rack type" -msgstr "这种机架类型的制造商" - -#: dcim/forms/bulk_import.py:196 -msgid "The lowest-numbered position in the rack" -msgstr "机架中编号最低的位置" - -#: dcim/forms/bulk_import.py:201 dcim/forms/bulk_import.py:268 -msgid "Rail-to-rail width (in inches)" -msgstr "设备安装宽度(英寸)" - -#: dcim/forms/bulk_import.py:207 dcim/forms/bulk_import.py:274 -msgid "Unit for outer dimensions" -msgstr "外形尺寸单位" - -#: dcim/forms/bulk_import.py:213 dcim/forms/bulk_import.py:286 -msgid "Unit for rack weights" -msgstr "机柜重量单位" - -#: dcim/forms/bulk_import.py:245 -msgid "Name of assigned tenant" -msgstr "指定租户名称" - -#: dcim/forms/bulk_import.py:257 -msgid "Name of assigned role" -msgstr "指定规则名称" - -#: dcim/forms/bulk_import.py:280 dcim/forms/bulk_import.py:413 -#: dcim/forms/bulk_import.py:583 -msgid "Airflow direction" -msgstr "风道方向" - -#: dcim/forms/bulk_import.py:312 -msgid "Parent site" -msgstr "上一级站点" - -#: dcim/forms/bulk_import.py:319 dcim/forms/bulk_import.py:1355 -msgid "Rack's location (if any)" -msgstr "机柜所在位置(如果有)" - -#: dcim/forms/bulk_import.py:328 dcim/forms/model_forms.py:311 -#: dcim/tables/racks.py:222 templates/dcim/rackreservation.html:12 -#: templates/dcim/rackreservation.html:45 -msgid "Units" -msgstr "单元(U)" - -#: dcim/forms/bulk_import.py:331 -msgid "Comma-separated list of individual unit numbers" -msgstr "占用U位号列表,以逗号分隔" - -#: dcim/forms/bulk_import.py:374 -msgid "The manufacturer which produces this device type" -msgstr "生产这种类型设备的制造商" - -#: dcim/forms/bulk_import.py:381 -msgid "The default platform for devices of this type (optional)" -msgstr "此类型设备的默认平台(可选)" - -#: dcim/forms/bulk_import.py:386 -msgid "Device weight" -msgstr "设备重量" - -#: dcim/forms/bulk_import.py:392 -msgid "Unit for device weight" -msgstr "设备重量单位" - -#: dcim/forms/bulk_import.py:418 -msgid "Module weight" -msgstr "模块重量" - -#: dcim/forms/bulk_import.py:424 -msgid "Unit for module weight" -msgstr "模块重量单位" - -#: dcim/forms/bulk_import.py:454 -msgid "Limit platform assignments to this manufacturer" -msgstr "限定此系统平台的制造商" - -#: dcim/forms/bulk_import.py:476 dcim/forms/bulk_import.py:1425 -#: tenancy/forms/bulk_import.py:106 -msgid "Assigned role" -msgstr "指定规则" - -#: dcim/forms/bulk_import.py:489 -msgid "Device type manufacturer" -msgstr "设备制造商" - -#: dcim/forms/bulk_import.py:495 -msgid "Device type model" -msgstr "设备型号" - -#: dcim/forms/bulk_import.py:502 virtualization/forms/bulk_import.py:126 -msgid "Assigned platform" -msgstr "指定系统平台" - -#: dcim/forms/bulk_import.py:510 dcim/forms/bulk_import.py:514 -#: dcim/forms/model_forms.py:536 -msgid "Virtual chassis" -msgstr "堆叠" - -#: dcim/forms/bulk_import.py:517 dcim/forms/filtersets.py:728 -#: dcim/forms/filtersets.py:898 dcim/forms/model_forms.py:522 -#: dcim/tables/devices.py:202 extras/filtersets.py:596 -#: extras/forms/filtersets.py:322 ipam/forms/filtersets.py:415 -#: ipam/forms/filtersets.py:447 templates/dcim/device.html:239 -#: templates/virtualization/cluster.html:10 -#: templates/virtualization/virtualmachine.html:92 -#: templates/virtualization/virtualmachine.html:101 -#: virtualization/filtersets.py:157 virtualization/filtersets.py:277 -#: virtualization/forms/bulk_edit.py:129 -#: virtualization/forms/bulk_import.py:92 -#: virtualization/forms/filtersets.py:99 -#: virtualization/forms/filtersets.py:123 -#: virtualization/forms/filtersets.py:204 -#: virtualization/forms/model_forms.py:79 -#: virtualization/forms/model_forms.py:176 -#: virtualization/tables/virtualmachines.py:67 +#: 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/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 msgid "Cluster" msgstr "集群" -#: dcim/forms/bulk_import.py:521 +#: 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:52 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/templates/extras/dashboard/widget_config.html:7 +#: netbox/virtualization/forms/bulk_edit.py:191 +msgid "Configuration" +msgstr "配置" + +#: netbox/dcim/forms/bulk_edit.py:746 netbox/netbox/navigation/menu.py:243 +#: 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 +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/object_create.py:46 netbox/templates/dcim/cable.html:32 +#: netbox/templates/dcim/consoleport.html:32 +#: netbox/templates/dcim/consoleserverport.html:32 +#: netbox/templates/dcim/devicebay.html:28 +#: netbox/templates/dcim/frontport.html:32 +#: netbox/templates/dcim/inc/panels/inventory_items.html:19 +#: netbox/templates/dcim/interface.html:42 +#: netbox/templates/dcim/inventoryitem.html:32 +#: netbox/templates/dcim/modulebay.html:34 +#: netbox/templates/dcim/poweroutlet.html:32 +#: netbox/templates/dcim/powerport.html:32 +#: netbox/templates/dcim/rearport.html:32 +#: netbox/templates/extras/customfield.html:26 +#: netbox/templates/generic/bulk_import.html:162 +msgid "Label" +msgstr "标记" + +#: netbox/dcim/forms/bulk_edit.py:823 netbox/dcim/forms/filtersets.py:1068 +#: 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 +msgid "Length unit" +msgstr "长度单位" + +#: netbox/dcim/forms/bulk_edit.py:852 +#: 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 +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 +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 +msgid "Phase" +msgstr "相位" + +#: netbox/dcim/forms/bulk_edit.py:954 netbox/dcim/forms/filtersets.py:1190 +#: netbox/templates/dcim/powerfeed.html:87 +msgid "Voltage" +msgstr "电压" + +#: netbox/dcim/forms/bulk_edit.py:958 netbox/dcim/forms/filtersets.py:1194 +#: netbox/templates/dcim/powerfeed.html:91 +msgid "Amperage" +msgstr "电流" + +#: netbox/dcim/forms/bulk_edit.py:962 netbox/dcim/forms/filtersets.py:1198 +msgid "Max utilization" +msgstr "最大利用率" + +#: netbox/dcim/forms/bulk_edit.py:1051 +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 +msgid "Maximum power draw (watts)" +msgstr "最大功率(瓦)" + +#: netbox/dcim/forms/bulk_edit.py:1057 +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 +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 +msgid "Power port" +msgstr "电源接口" + +#: netbox/dcim/forms/bulk_edit.py:1098 netbox/dcim/forms/bulk_import.py:815 +msgid "Feed leg" +msgstr "馈电线路" + +#: netbox/dcim/forms/bulk_edit.py:1144 netbox/dcim/forms/bulk_edit.py:1462 +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/object_import.py:90 +#: netbox/dcim/models/device_component_templates.py:437 +#: netbox/dcim/models/device_components.py:670 +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/object_import.py:95 +#: netbox/dcim/models/device_component_templates.py:443 +#: netbox/dcim/models/device_components.py:676 +msgid "PoE type" +msgstr "PoE类型" + +#: netbox/dcim/forms/bulk_edit.py:1166 netbox/dcim/forms/filtersets.py:1404 +#: 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/templates/dcim/consoleport.html:24 +#: netbox/templates/dcim/consoleserverport.html:24 +#: netbox/templates/dcim/frontport.html:24 +#: netbox/templates/dcim/interface.html:34 +#: netbox/templates/dcim/module.html:54 +#: netbox/templates/dcim/modulebay.html:26 +#: netbox/templates/dcim/modulebay.html:58 +#: netbox/templates/dcim/poweroutlet.html:24 +#: netbox/templates/dcim/powerport.html:24 +#: netbox/templates/dcim/rearport.html:24 +msgid "Module" +msgstr "模块" + +#: netbox/dcim/forms/bulk_edit.py:1442 netbox/dcim/tables/devices.py:665 +#: netbox/templates/dcim/interface.html:110 +msgid "LAG" +msgstr "链路聚合" + +#: netbox/dcim/forms/bulk_edit.py:1447 netbox/dcim/forms/model_forms.py:1312 +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/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/templates/vpn/ikepolicy.html:25 +#: netbox/templates/vpn/ipsecprofile.html:21 +#: netbox/templates/vpn/ipsecprofile.html:48 +#: netbox/virtualization/forms/bulk_edit.py:233 +#: netbox/virtualization/forms/bulk_import.py:165 +#: netbox/vpn/forms/bulk_edit.py:146 netbox/vpn/forms/bulk_edit.py:232 +#: netbox/vpn/forms/bulk_import.py:176 netbox/vpn/forms/bulk_import.py:234 +#: netbox/vpn/forms/filtersets.py:135 netbox/vpn/forms/filtersets.py:178 +#: netbox/vpn/forms/filtersets.py:192 netbox/vpn/tables/crypto.py:64 +#: netbox/vpn/tables/crypto.py:162 +msgid "Mode" +msgstr "模式" + +#: 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 +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 +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 +msgid "Tagged VLANs" +msgstr "已标记 VLANs" + +#: netbox/dcim/forms/bulk_edit.py:1511 +msgid "Add tagged VLANs" +msgstr "" + +#: netbox/dcim/forms/bulk_edit.py:1520 +msgid "Remove tagged VLANs" +msgstr "" + +#: netbox/dcim/forms/bulk_edit.py:1536 netbox/dcim/forms/model_forms.py:1348 +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/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 +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 +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 +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 +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 +msgid "802.1Q Switching" +msgstr "802.1Q 交换" + +#: netbox/dcim/forms/bulk_edit.py:1558 +msgid "Add/Remove" +msgstr "" + +#: netbox/dcim/forms/bulk_edit.py:1617 netbox/dcim/forms/bulk_edit.py:1619 +msgid "Interface mode must be specified to assign VLANs" +msgstr "该接口模式下,必须指定VLAN" + +#: netbox/dcim/forms/bulk_edit.py:1624 netbox/dcim/forms/common.py:50 +msgid "An access interface cannot have tagged VLANs assigned." +msgstr "access接口不允许指定Tag的VLAN" + +#: netbox/dcim/forms/bulk_import.py:64 +msgid "Name of parent region" +msgstr "上一级区域的名称" + +#: netbox/dcim/forms/bulk_import.py:78 +msgid "Name of parent site group" +msgstr "上一级站点组的名称" + +#: netbox/dcim/forms/bulk_import.py:97 +msgid "Assigned region" +msgstr "指定地区" + +#: netbox/dcim/forms/bulk_import.py:104 netbox/tenancy/forms/bulk_import.py:44 +#: netbox/tenancy/forms/bulk_import.py:85 +#: netbox/wireless/forms/bulk_import.py:40 +msgid "Assigned group" +msgstr "指定组" + +#: netbox/dcim/forms/bulk_import.py:123 +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 +msgid "Assigned site" +msgstr "指定站点" + +#: netbox/dcim/forms/bulk_import.py:141 +msgid "Parent location" +msgstr "上一级位置" + +#: netbox/dcim/forms/bulk_import.py:143 +msgid "Location not found." +msgstr "未找到该位置" + +#: netbox/dcim/forms/bulk_import.py:185 +msgid "The manufacturer of this rack type" +msgstr "这种机架类型的制造商" + +#: netbox/dcim/forms/bulk_import.py:196 +msgid "The lowest-numbered position in the rack" +msgstr "机架中编号最低的位置" + +#: netbox/dcim/forms/bulk_import.py:201 netbox/dcim/forms/bulk_import.py:276 +msgid "Rail-to-rail width (in inches)" +msgstr "设备安装宽度(英寸)" + +#: netbox/dcim/forms/bulk_import.py:207 netbox/dcim/forms/bulk_import.py:286 +msgid "Unit for outer dimensions" +msgstr "外形尺寸单位" + +#: netbox/dcim/forms/bulk_import.py:213 netbox/dcim/forms/bulk_import.py:298 +msgid "Unit for rack weights" +msgstr "机柜重量单位" + +#: netbox/dcim/forms/bulk_import.py:245 +msgid "Name of assigned tenant" +msgstr "指定租户名称" + +#: netbox/dcim/forms/bulk_import.py:257 +msgid "Name of assigned role" +msgstr "指定规则名称" + +#: netbox/dcim/forms/bulk_import.py:264 +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 +msgid "Airflow direction" +msgstr "风道方向" + +#: netbox/dcim/forms/bulk_import.py:324 +msgid "Width must be set if not specifying a rack type." +msgstr "" + +#: netbox/dcim/forms/bulk_import.py:326 +msgid "U height must be set if not specifying a rack type." +msgstr "" + +#: netbox/dcim/forms/bulk_import.py:334 +msgid "Parent site" +msgstr "上一级站点" + +#: netbox/dcim/forms/bulk_import.py:341 netbox/dcim/forms/bulk_import.py:1377 +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/templates/dcim/rackreservation.html:12 +#: netbox/templates/dcim/rackreservation.html:45 +msgid "Units" +msgstr "单元(U)" + +#: netbox/dcim/forms/bulk_import.py:353 +msgid "Comma-separated list of individual unit numbers" +msgstr "占用U位号列表,以逗号分隔" + +#: netbox/dcim/forms/bulk_import.py:396 +msgid "The manufacturer which produces this device type" +msgstr "生产这种类型设备的制造商" + +#: netbox/dcim/forms/bulk_import.py:403 +msgid "The default platform for devices of this type (optional)" +msgstr "此类型设备的默认平台(可选)" + +#: netbox/dcim/forms/bulk_import.py:408 +msgid "Device weight" +msgstr "设备重量" + +#: netbox/dcim/forms/bulk_import.py:414 +msgid "Unit for device weight" +msgstr "设备重量单位" + +#: netbox/dcim/forms/bulk_import.py:440 +msgid "Module weight" +msgstr "模块重量" + +#: netbox/dcim/forms/bulk_import.py:446 +msgid "Unit for module weight" +msgstr "模块重量单位" + +#: netbox/dcim/forms/bulk_import.py:476 +msgid "Limit platform assignments to this manufacturer" +msgstr "限定此系统平台的制造商" + +#: netbox/dcim/forms/bulk_import.py:498 netbox/dcim/forms/bulk_import.py:1447 +#: netbox/tenancy/forms/bulk_import.py:106 +msgid "Assigned role" +msgstr "指定规则" + +#: netbox/dcim/forms/bulk_import.py:511 +msgid "Device type manufacturer" +msgstr "设备制造商" + +#: netbox/dcim/forms/bulk_import.py:517 +msgid "Device type model" +msgstr "设备型号" + +#: netbox/dcim/forms/bulk_import.py:524 +#: netbox/virtualization/forms/bulk_import.py:126 +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 +msgid "Virtual chassis" +msgstr "堆叠" + +#: netbox/dcim/forms/bulk_import.py:543 msgid "Virtualization cluster" msgstr "虚拟化集群" -#: dcim/forms/bulk_import.py:550 +#: netbox/dcim/forms/bulk_import.py:572 msgid "Assigned location (if any)" msgstr "指定位置(如果有)" -#: dcim/forms/bulk_import.py:557 +#: netbox/dcim/forms/bulk_import.py:579 msgid "Assigned rack (if any)" msgstr "指定机柜(如果有)" -#: dcim/forms/bulk_import.py:560 +#: netbox/dcim/forms/bulk_import.py:582 msgid "Face" msgstr "朝向" -#: dcim/forms/bulk_import.py:563 +#: netbox/dcim/forms/bulk_import.py:585 msgid "Mounted rack face" msgstr "机架正面安装" -#: dcim/forms/bulk_import.py:570 +#: netbox/dcim/forms/bulk_import.py:592 msgid "Parent device (for child devices)" msgstr "上一级设备(用于子设备)" -#: dcim/forms/bulk_import.py:573 +#: netbox/dcim/forms/bulk_import.py:595 msgid "Device bay" msgstr "设备托架" -#: dcim/forms/bulk_import.py:577 +#: netbox/dcim/forms/bulk_import.py:599 msgid "Device bay in which this device is installed (for child devices)" msgstr "安装此设备的设备托架(用于子设备)" -#: dcim/forms/bulk_import.py:644 +#: netbox/dcim/forms/bulk_import.py:666 msgid "The device in which this module is installed" msgstr "安装此模块的设备" -#: dcim/forms/bulk_import.py:647 dcim/forms/model_forms.py:640 +#: netbox/dcim/forms/bulk_import.py:669 netbox/dcim/forms/model_forms.py:640 msgid "Module bay" msgstr "设备板卡插槽" -#: dcim/forms/bulk_import.py:650 +#: netbox/dcim/forms/bulk_import.py:672 msgid "The module bay in which this module is installed" msgstr "安装此模块的模块托架" -#: dcim/forms/bulk_import.py:656 +#: netbox/dcim/forms/bulk_import.py:678 msgid "The type of module" msgstr "模块类型" -#: dcim/forms/bulk_import.py:664 dcim/forms/model_forms.py:656 +#: netbox/dcim/forms/bulk_import.py:686 netbox/dcim/forms/model_forms.py:656 msgid "Replicate components" msgstr "组件冗余" -#: dcim/forms/bulk_import.py:666 +#: netbox/dcim/forms/bulk_import.py:688 msgid "" "Automatically populate components associated with this module type (enabled " "by default)" msgstr "自动填充此模块类型关联的组件(默认启用)" -#: dcim/forms/bulk_import.py:669 dcim/forms/model_forms.py:662 +#: netbox/dcim/forms/bulk_import.py:691 netbox/dcim/forms/model_forms.py:662 msgid "Adopt components" msgstr "选定组件" -#: dcim/forms/bulk_import.py:671 dcim/forms/model_forms.py:665 +#: netbox/dcim/forms/bulk_import.py:693 netbox/dcim/forms/model_forms.py:665 msgid "Adopt already existing components" msgstr "选定已经存在的组件" -#: dcim/forms/bulk_import.py:711 dcim/forms/bulk_import.py:737 -#: dcim/forms/bulk_import.py:763 +#: netbox/dcim/forms/bulk_import.py:733 netbox/dcim/forms/bulk_import.py:759 +#: netbox/dcim/forms/bulk_import.py:785 msgid "Port type" msgstr "端口类型" -#: dcim/forms/bulk_import.py:719 dcim/forms/bulk_import.py:745 +#: netbox/dcim/forms/bulk_import.py:741 netbox/dcim/forms/bulk_import.py:767 msgid "Port speed in bps" msgstr "端口速率(bps)" -#: dcim/forms/bulk_import.py:783 +#: netbox/dcim/forms/bulk_import.py:805 msgid "Outlet type" msgstr "插座类型" -#: dcim/forms/bulk_import.py:790 +#: netbox/dcim/forms/bulk_import.py:812 msgid "Local power port which feeds this outlet" msgstr "该插座供电的电源端口" -#: dcim/forms/bulk_import.py:796 +#: netbox/dcim/forms/bulk_import.py:818 msgid "Electrical phase (for three-phase circuits)" msgstr "供电相位(用于三相电)" -#: dcim/forms/bulk_import.py:837 dcim/forms/model_forms.py:1316 -#: virtualization/forms/bulk_import.py:155 -#: virtualization/forms/model_forms.py:305 +#: 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 msgid "Parent interface" msgstr "上一级接口" -#: dcim/forms/bulk_import.py:844 dcim/forms/model_forms.py:1324 -#: virtualization/forms/bulk_import.py:162 -#: virtualization/forms/model_forms.py:313 +#: 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 msgid "Bridged interface" msgstr "桥接接口" -#: dcim/forms/bulk_import.py:847 +#: netbox/dcim/forms/bulk_import.py:869 msgid "Lag" msgstr "聚合接口" -#: dcim/forms/bulk_import.py:851 +#: netbox/dcim/forms/bulk_import.py:873 msgid "Parent LAG interface" msgstr "上一级聚合接口" -#: dcim/forms/bulk_import.py:854 +#: netbox/dcim/forms/bulk_import.py:876 msgid "Vdcs" msgstr "Vdcs" -#: dcim/forms/bulk_import.py:859 +#: netbox/dcim/forms/bulk_import.py:881 msgid "VDC names separated by commas, encased with double quotes. Example:" msgstr "VDC名称,用逗号分隔,用双引号包含。例如:" -#: dcim/forms/bulk_import.py:865 +#: netbox/dcim/forms/bulk_import.py:887 msgid "Physical medium" msgstr "物理接口类型" -#: dcim/forms/bulk_import.py:868 dcim/forms/filtersets.py:1365 +#: netbox/dcim/forms/bulk_import.py:890 netbox/dcim/forms/filtersets.py:1365 msgid "Duplex" msgstr "双工" -#: dcim/forms/bulk_import.py:873 +#: netbox/dcim/forms/bulk_import.py:895 msgid "Poe mode" msgstr "POE模式" -#: dcim/forms/bulk_import.py:879 +#: netbox/dcim/forms/bulk_import.py:901 msgid "Poe type" msgstr "POE类型" -#: dcim/forms/bulk_import.py:888 virtualization/forms/bulk_import.py:168 +#: netbox/dcim/forms/bulk_import.py:910 +#: netbox/virtualization/forms/bulk_import.py:168 msgid "IEEE 802.1Q operational mode (for L2 interfaces)" msgstr "IEEE 802.1Q 运作模式(针对二层接口)" -#: dcim/forms/bulk_import.py:895 ipam/forms/bulk_import.py:161 -#: ipam/forms/bulk_import.py:247 ipam/forms/bulk_import.py:283 -#: ipam/forms/filtersets.py:201 ipam/forms/filtersets.py:277 -#: ipam/forms/filtersets.py:336 virtualization/forms/bulk_import.py:175 +#: netbox/dcim/forms/bulk_import.py: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 msgid "Assigned VRF" msgstr "指定VRF" -#: dcim/forms/bulk_import.py:898 +#: netbox/dcim/forms/bulk_import.py:920 msgid "Rf role" msgstr "射频类型" -#: dcim/forms/bulk_import.py:901 +#: netbox/dcim/forms/bulk_import.py:923 msgid "Wireless role (AP/station)" msgstr "无线角色(AP/基站)" -#: dcim/forms/bulk_import.py:937 +#: netbox/dcim/forms/bulk_import.py:959 #, python-brace-format msgid "VDC {vdc} is not assigned to device {device}" msgstr "VDC {vdc} 没有指定给设备 {device}" -#: dcim/forms/bulk_import.py:951 dcim/forms/model_forms.py:1000 -#: dcim/forms/model_forms.py:1575 dcim/forms/object_import.py:117 +#: 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 msgid "Rear port" msgstr "后置端口" -#: dcim/forms/bulk_import.py:954 +#: netbox/dcim/forms/bulk_import.py:976 msgid "Corresponding rear port" msgstr "对应后置端口" -#: dcim/forms/bulk_import.py:959 dcim/forms/bulk_import.py:1000 -#: dcim/forms/bulk_import.py:1216 +#: netbox/dcim/forms/bulk_import.py:981 netbox/dcim/forms/bulk_import.py:1022 +#: netbox/dcim/forms/bulk_import.py:1238 msgid "Physical medium classification" msgstr "物理端口类型" -#: dcim/forms/bulk_import.py:1028 dcim/tables/devices.py:822 +#: netbox/dcim/forms/bulk_import.py:1050 netbox/dcim/tables/devices.py:822 msgid "Installed device" msgstr "安装设备" -#: dcim/forms/bulk_import.py:1032 +#: netbox/dcim/forms/bulk_import.py:1054 msgid "Child device installed within this bay" msgstr "此托架内安装的子设备" -#: dcim/forms/bulk_import.py:1034 +#: netbox/dcim/forms/bulk_import.py:1056 msgid "Child device not found." msgstr "子设备未找到" -#: dcim/forms/bulk_import.py:1092 +#: netbox/dcim/forms/bulk_import.py:1114 msgid "Parent inventory item" msgstr "上一级库存项" -#: dcim/forms/bulk_import.py:1095 +#: netbox/dcim/forms/bulk_import.py:1117 msgid "Component type" msgstr "组件类型" -#: dcim/forms/bulk_import.py:1099 +#: netbox/dcim/forms/bulk_import.py:1121 msgid "Component Type" msgstr "组件类型" -#: dcim/forms/bulk_import.py:1102 +#: netbox/dcim/forms/bulk_import.py:1124 msgid "Compnent name" msgstr "组件名称" -#: dcim/forms/bulk_import.py:1104 +#: netbox/dcim/forms/bulk_import.py:1126 msgid "Component Name" msgstr "组件名称" -#: dcim/forms/bulk_import.py:1146 +#: netbox/dcim/forms/bulk_import.py:1168 #, python-brace-format msgid "Component not found: {device} - {component_name}" msgstr "组件未找到: {device} - {component_name}" -#: dcim/forms/bulk_import.py:1171 +#: netbox/dcim/forms/bulk_import.py:1193 msgid "Side A device" msgstr "A端设备" -#: dcim/forms/bulk_import.py:1174 dcim/forms/bulk_import.py:1192 +#: netbox/dcim/forms/bulk_import.py:1196 netbox/dcim/forms/bulk_import.py:1214 msgid "Device name" msgstr "设备名字" -#: dcim/forms/bulk_import.py:1177 +#: netbox/dcim/forms/bulk_import.py:1199 msgid "Side A type" msgstr "A端线缆类型" -#: dcim/forms/bulk_import.py:1180 dcim/forms/bulk_import.py:1198 +#: netbox/dcim/forms/bulk_import.py:1202 netbox/dcim/forms/bulk_import.py:1220 msgid "Termination type" msgstr "线缆接口类型" -#: dcim/forms/bulk_import.py:1183 +#: netbox/dcim/forms/bulk_import.py:1205 msgid "Side A name" msgstr "A端设备名称" -#: dcim/forms/bulk_import.py:1184 dcim/forms/bulk_import.py:1202 +#: netbox/dcim/forms/bulk_import.py:1206 netbox/dcim/forms/bulk_import.py:1224 msgid "Termination name" msgstr "线缆类型名称" -#: dcim/forms/bulk_import.py:1189 +#: netbox/dcim/forms/bulk_import.py:1211 msgid "Side B device" msgstr "B端设备" -#: dcim/forms/bulk_import.py:1195 +#: netbox/dcim/forms/bulk_import.py:1217 msgid "Side B type" msgstr "B端线缆类型" -#: dcim/forms/bulk_import.py:1201 +#: netbox/dcim/forms/bulk_import.py:1223 msgid "Side B name" msgstr "B端设备名称" -#: dcim/forms/bulk_import.py:1210 wireless/forms/bulk_import.py:86 +#: netbox/dcim/forms/bulk_import.py:1232 +#: netbox/wireless/forms/bulk_import.py:86 msgid "Connection status" msgstr "连接状态" -#: dcim/forms/bulk_import.py:1262 +#: netbox/dcim/forms/bulk_import.py:1284 #, python-brace-format msgid "Side {side_upper}: {device} {termination_object} is already connected" msgstr " {side_upper}端: {device} {termination_object}已连接" -#: dcim/forms/bulk_import.py:1268 +#: netbox/dcim/forms/bulk_import.py:1290 #, python-brace-format msgid "{side_upper} side termination not found: {device} {name}" msgstr "{side_upper} 端接口类型未发现: {device} {name}" -#: dcim/forms/bulk_import.py:1293 dcim/forms/model_forms.py:785 -#: dcim/tables/devices.py:1027 templates/dcim/device.html:132 -#: templates/dcim/virtualchassis.html:27 templates/dcim/virtualchassis.html:67 +#: 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/templates/dcim/virtualchassis.html:27 +#: netbox/templates/dcim/virtualchassis.html:67 msgid "Master" msgstr "Master" -#: dcim/forms/bulk_import.py:1297 +#: netbox/dcim/forms/bulk_import.py:1319 msgid "Master device" msgstr "主设备" -#: dcim/forms/bulk_import.py:1314 +#: netbox/dcim/forms/bulk_import.py:1336 msgid "Name of parent site" msgstr "父站点名称" -#: dcim/forms/bulk_import.py:1348 +#: netbox/dcim/forms/bulk_import.py:1370 msgid "Upstream power panel" msgstr "上一级电源面板" -#: dcim/forms/bulk_import.py:1378 +#: netbox/dcim/forms/bulk_import.py:1400 msgid "Primary or redundant" msgstr "主线路/备用线路" -#: dcim/forms/bulk_import.py:1383 +#: netbox/dcim/forms/bulk_import.py:1405 msgid "Supply type (AC/DC)" msgstr "供应类型(AC/DC)" -#: dcim/forms/bulk_import.py:1388 +#: netbox/dcim/forms/bulk_import.py:1410 msgid "Single or three-phase" msgstr "单相或三相" -#: dcim/forms/bulk_import.py:1439 dcim/forms/model_forms.py:1670 -#: templates/dcim/device.html:190 templates/dcim/virtualdevicecontext.html:30 -#: templates/virtualization/virtualmachine.html:52 +#: netbox/dcim/forms/bulk_import.py:1461 netbox/dcim/forms/model_forms.py:1677 +#: netbox/templates/dcim/device.html:190 +#: netbox/templates/dcim/virtualdevicecontext.html:30 +#: netbox/templates/virtualization/virtualmachine.html:52 msgid "Primary IPv4" msgstr "主 IPv4" -#: dcim/forms/bulk_import.py:1443 +#: netbox/dcim/forms/bulk_import.py:1465 msgid "IPv4 address with mask, e.g. 1.2.3.4/24" msgstr "带掩码的 IPv4 地址,例如 1.2.3.4/24" -#: dcim/forms/bulk_import.py:1446 dcim/forms/model_forms.py:1679 -#: templates/dcim/device.html:206 templates/dcim/virtualdevicecontext.html:41 -#: templates/virtualization/virtualmachine.html:68 +#: netbox/dcim/forms/bulk_import.py:1468 netbox/dcim/forms/model_forms.py:1686 +#: netbox/templates/dcim/device.html:206 +#: netbox/templates/dcim/virtualdevicecontext.html:41 +#: netbox/templates/virtualization/virtualmachine.html:68 msgid "Primary IPv6" msgstr "主 IPv6" -#: dcim/forms/bulk_import.py:1450 +#: netbox/dcim/forms/bulk_import.py:1472 msgid "IPv6 address with prefix length, e.g. 2001:db8::1/64" msgstr "带有前缀长度的 IPv6 地址,例如 2001:db8:: 1/64" -#: dcim/forms/common.py:24 dcim/models/device_components.py:527 -#: templates/dcim/interface.html:57 -#: templates/virtualization/vminterface.html:55 -#: virtualization/forms/bulk_edit.py:225 +#: netbox/dcim/forms/common.py:24 netbox/dcim/models/device_components.py:527 +#: netbox/templates/dcim/interface.html:57 +#: netbox/templates/virtualization/vminterface.html:55 +#: netbox/virtualization/forms/bulk_edit.py:225 msgid "MTU" msgstr "MTU" -#: dcim/forms/common.py:65 +#: netbox/dcim/forms/common.py:65 #, python-brace-format msgid "" "The tagged VLANs ({vlans}) must belong to the same site as the interface's " "parent device/VM, or they must be global" msgstr "标记的VLAN ({vlans}) 必须与接口所属设备/虚拟机属于同一站点,或者是全局VLAN" -#: dcim/forms/common.py:126 +#: netbox/dcim/forms/common.py:126 msgid "" "Cannot install module with placeholder values in a module bay with no " "position defined." msgstr "无法在未定义位置的模块托架中安装具有占位符值的模块。" -#: dcim/forms/common.py:131 +#: netbox/dcim/forms/common.py:131 #, python-brace-format msgid "" "Cannot install module with placeholder values in a module bay tree {level} " "in tree but {tokens} placeholders given." msgstr "无法在模块月桂树中安装具有占位符值的模块 {level} 在树里但是 {tokens} 给定的占位符。" -#: dcim/forms/common.py:144 +#: netbox/dcim/forms/common.py:144 #, python-brace-format msgid "Cannot adopt {model} {name} as it already belongs to a module" msgstr "无法选定 {model} {name} ,因为它已属于某个模块" -#: dcim/forms/common.py:153 +#: netbox/dcim/forms/common.py:153 #, python-brace-format msgid "A {model} named {name} already exists" msgstr "名为 {name} 的 {model} 已存在" -#: dcim/forms/connections.py:49 dcim/forms/model_forms.py:738 -#: dcim/tables/power.py:66 templates/dcim/inc/cable_termination.html:37 -#: templates/dcim/powerfeed.html:24 templates/dcim/powerpanel.html:19 -#: templates/dcim/trace/powerpanel.html:4 +#: netbox/dcim/forms/connections.py:49 netbox/dcim/forms/model_forms.py:738 +#: netbox/dcim/tables/power.py:66 +#: netbox/templates/dcim/inc/cable_termination.html:37 +#: netbox/templates/dcim/powerfeed.html:24 +#: netbox/templates/dcim/powerpanel.html:19 +#: netbox/templates/dcim/trace/powerpanel.html:4 msgid "Power Panel" msgstr "电源面板" -#: dcim/forms/connections.py:58 dcim/forms/model_forms.py:765 -#: templates/dcim/powerfeed.html:21 templates/dcim/powerport.html:80 +#: netbox/dcim/forms/connections.py:58 netbox/dcim/forms/model_forms.py:765 +#: netbox/templates/dcim/powerfeed.html:21 +#: netbox/templates/dcim/powerport.html:80 msgid "Power Feed" msgstr "电力供给" -#: dcim/forms/connections.py:81 +#: netbox/dcim/forms/connections.py:81 msgid "Side" msgstr "端" -#: dcim/forms/filtersets.py:136 dcim/tables/devices.py:295 +#: netbox/dcim/forms/filtersets.py:136 netbox/dcim/tables/devices.py:295 msgid "Device Status" msgstr "设备状态" -#: dcim/forms/filtersets.py:149 +#: netbox/dcim/forms/filtersets.py:149 msgid "Parent region" msgstr "上一级地区" -#: dcim/forms/filtersets.py:163 tenancy/forms/bulk_import.py:28 -#: tenancy/forms/bulk_import.py:62 tenancy/forms/filtersets.py:33 -#: tenancy/forms/filtersets.py:62 wireless/forms/bulk_import.py:25 -#: wireless/forms/filtersets.py:25 +#: netbox/dcim/forms/filtersets.py:163 netbox/tenancy/forms/bulk_import.py:28 +#: netbox/tenancy/forms/bulk_import.py:62 +#: netbox/tenancy/forms/filtersets.py:33 netbox/tenancy/forms/filtersets.py:62 +#: netbox/wireless/forms/bulk_import.py:25 +#: netbox/wireless/forms/filtersets.py:25 msgid "Parent group" msgstr "上一级组" -#: dcim/forms/filtersets.py:242 templates/dcim/location.html:58 -#: templates/dcim/site.html:56 +#: netbox/dcim/forms/filtersets.py:242 netbox/templates/dcim/location.html:58 +#: netbox/templates/dcim/site.html:56 msgid "Facility" msgstr "设施" -#: dcim/forms/filtersets.py:380 -msgid "Rack type" -msgstr "机柜类型" - -#: dcim/forms/filtersets.py:397 +#: netbox/dcim/forms/filtersets.py:397 msgid "Function" msgstr "功能用途" -#: dcim/forms/filtersets.py:483 dcim/forms/model_forms.py:373 -#: templates/inc/panels/image_attachments.html:6 +#: netbox/dcim/forms/filtersets.py:483 netbox/dcim/forms/model_forms.py:373 +#: netbox/templates/inc/panels/image_attachments.html:6 msgid "Images" msgstr "图片" -#: dcim/forms/filtersets.py:486 dcim/forms/filtersets.py:611 -#: dcim/forms/filtersets.py:726 +#: netbox/dcim/forms/filtersets.py:486 netbox/dcim/forms/filtersets.py:611 +#: netbox/dcim/forms/filtersets.py:726 msgid "Components" msgstr "组件" -#: dcim/forms/filtersets.py:506 +#: netbox/dcim/forms/filtersets.py:506 msgid "Subdevice role" msgstr "子设备角色" -#: dcim/forms/filtersets.py:790 dcim/tables/racks.py:54 -#: templates/dcim/racktype.html:20 +#: netbox/dcim/forms/filtersets.py:790 netbox/dcim/tables/racks.py:54 +#: netbox/templates/dcim/racktype.html:20 msgid "Model" msgstr "型号" -#: dcim/forms/filtersets.py:834 +#: netbox/dcim/forms/filtersets.py:834 msgid "Has an OOB IP" msgstr "有带外管理IP" -#: dcim/forms/filtersets.py:841 +#: netbox/dcim/forms/filtersets.py:841 msgid "Virtual chassis member" msgstr "堆叠数量" -#: dcim/forms/filtersets.py:890 +#: netbox/dcim/forms/filtersets.py:890 msgid "Has virtual device contexts" msgstr "有虚拟设备上下文" -#: dcim/forms/filtersets.py:903 extras/filtersets.py:585 -#: ipam/forms/filtersets.py:452 virtualization/forms/filtersets.py:112 +#: netbox/dcim/forms/filtersets.py:903 netbox/extras/filtersets.py:585 +#: netbox/ipam/forms/filtersets.py:452 +#: netbox/virtualization/forms/filtersets.py:112 msgid "Cluster group" msgstr "堆叠组" -#: dcim/forms/filtersets.py:1210 +#: netbox/dcim/forms/filtersets.py:1210 msgid "Cabled" msgstr "已连接" -#: dcim/forms/filtersets.py:1217 +#: netbox/dcim/forms/filtersets.py:1217 msgid "Occupied" msgstr "已占用" -#: dcim/forms/filtersets.py:1244 dcim/forms/filtersets.py:1269 -#: dcim/forms/filtersets.py:1293 dcim/forms/filtersets.py:1313 -#: dcim/forms/filtersets.py:1336 dcim/tables/devices.py:364 -#: templates/dcim/consoleport.html:55 templates/dcim/consoleserverport.html:55 -#: templates/dcim/frontport.html:69 templates/dcim/interface.html:140 -#: templates/dcim/powerfeed.html:110 templates/dcim/poweroutlet.html:59 -#: templates/dcim/powerport.html:59 templates/dcim/rearport.html:65 +#: netbox/dcim/forms/filtersets.py: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/templates/dcim/consoleport.html:55 +#: netbox/templates/dcim/consoleserverport.html:55 +#: netbox/templates/dcim/frontport.html:69 +#: netbox/templates/dcim/interface.html:140 +#: netbox/templates/dcim/powerfeed.html:110 +#: netbox/templates/dcim/poweroutlet.html:59 +#: netbox/templates/dcim/powerport.html:59 +#: netbox/templates/dcim/rearport.html:65 msgid "Connection" msgstr "连接" -#: dcim/forms/filtersets.py:1348 extras/forms/bulk_edit.py:326 -#: extras/forms/bulk_import.py:247 extras/forms/filtersets.py:464 -#: extras/forms/model_forms.py:675 extras/tables/tables.py:579 -#: templates/extras/journalentry.html:30 +#: netbox/dcim/forms/filtersets.py:1348 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 "类型" -#: dcim/forms/filtersets.py:1377 +#: netbox/dcim/forms/filtersets.py:1377 msgid "Mgmt only" msgstr "仅用于管理" -#: dcim/forms/filtersets.py:1389 dcim/forms/model_forms.py:1383 -#: dcim/models/device_components.py:629 templates/dcim/interface.html:129 +#: 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 msgid "WWN" msgstr "WWN" -#: dcim/forms/filtersets.py:1409 +#: netbox/dcim/forms/filtersets.py:1409 msgid "Wireless channel" msgstr "无线信道" -#: dcim/forms/filtersets.py:1413 +#: netbox/dcim/forms/filtersets.py:1413 msgid "Channel frequency (MHz)" msgstr "信道频率(MHz)" -#: dcim/forms/filtersets.py:1417 +#: netbox/dcim/forms/filtersets.py:1417 msgid "Channel width (MHz)" msgstr "信道频宽(MHz)" -#: dcim/forms/filtersets.py:1421 templates/dcim/interface.html:85 +#: netbox/dcim/forms/filtersets.py:1421 +#: netbox/templates/dcim/interface.html:85 msgid "Transmit power (dBm)" msgstr "信道功率(dBm)" -#: dcim/forms/filtersets.py:1446 dcim/forms/filtersets.py:1471 -#: dcim/tables/devices.py:327 templates/dcim/cable.html:12 -#: templates/dcim/cable_trace.html:46 templates/dcim/frontport.html:77 -#: templates/dcim/htmx/cable_edit.html:50 -#: templates/dcim/inc/connection_endpoints.html:4 -#: templates/dcim/rearport.html:73 templates/dcim/trace/cable.html:7 +#: netbox/dcim/forms/filtersets.py:1446 netbox/dcim/forms/filtersets.py:1471 +#: netbox/dcim/tables/devices.py:327 netbox/templates/dcim/cable.html:12 +#: netbox/templates/dcim/cable_trace.html:46 +#: netbox/templates/dcim/frontport.html:77 +#: netbox/templates/dcim/htmx/cable_edit.html:50 +#: netbox/templates/dcim/inc/connection_endpoints.html:4 +#: netbox/templates/dcim/rearport.html:73 +#: netbox/templates/dcim/trace/cable.html:7 msgid "Cable" msgstr "电缆" -#: dcim/forms/filtersets.py:1550 dcim/tables/devices.py:949 +#: netbox/dcim/forms/filtersets.py:1550 netbox/dcim/tables/devices.py:949 msgid "Discovered" msgstr "已发现" -#: dcim/forms/formsets.py:20 +#: netbox/dcim/forms/formsets.py:20 #, python-brace-format msgid "A virtual chassis member already exists in position {vc_position}." msgstr "在 {vc_position}中已存在虚拟机箱成员。" -#: dcim/forms/model_forms.py:140 +#: netbox/dcim/forms/model_forms.py:140 msgid "Contact Info" msgstr "联系方式" -#: dcim/forms/model_forms.py:195 templates/dcim/rackrole.html:19 +#: netbox/dcim/forms/model_forms.py:195 netbox/templates/dcim/rackrole.html:19 msgid "Rack Role" msgstr "机柜角色" -#: dcim/forms/model_forms.py:212 dcim/forms/model_forms.py:362 -#: dcim/forms/model_forms.py:446 utilities/forms/fields/fields.py:47 +#: netbox/dcim/forms/model_forms.py:212 netbox/dcim/forms/model_forms.py:362 +#: netbox/dcim/forms/model_forms.py:446 +#: netbox/utilities/forms/fields/fields.py:47 msgid "Slug" msgstr "缩写" -#: dcim/forms/model_forms.py:259 +#: netbox/dcim/forms/model_forms.py:259 msgid "Select a pre-defined rack type, or set physical characteristics below." msgstr "选择预定义的机架类型,或在下面设置物理特征。" -#: dcim/forms/model_forms.py:265 +#: netbox/dcim/forms/model_forms.py:265 msgid "Inventory Control" msgstr "库存管理" -#: dcim/forms/model_forms.py:313 +#: netbox/dcim/forms/model_forms.py:313 msgid "" "Comma-separated list of numeric unit IDs. A range may be specified using a " "hyphen." msgstr "以逗号分隔的数字U位 列表。 可以使用-字符指定范围。" -#: dcim/forms/model_forms.py:322 dcim/tables/racks.py:202 +#: netbox/dcim/forms/model_forms.py:322 netbox/dcim/tables/racks.py:202 msgid "Reservation" msgstr "预留" -#: dcim/forms/model_forms.py:423 templates/dcim/devicerole.html:23 +#: netbox/dcim/forms/model_forms.py:423 +#: netbox/templates/dcim/devicerole.html:23 msgid "Device Role" msgstr "设备角色" -#: dcim/forms/model_forms.py:490 dcim/models/devices.py:644 +#: netbox/dcim/forms/model_forms.py:490 netbox/dcim/models/devices.py:644 msgid "The lowest-numbered unit occupied by the device" msgstr "设备在机柜上最下面的U位" -#: dcim/forms/model_forms.py:547 +#: netbox/dcim/forms/model_forms.py:547 msgid "The position in the virtual chassis this device is identified by" msgstr "该设备在虚拟机箱中的位置由以下方式标识" -#: dcim/forms/model_forms.py:552 +#: netbox/dcim/forms/model_forms.py:552 msgid "The priority of the device in the virtual chassis" msgstr "堆叠中设备的优先级" -#: dcim/forms/model_forms.py:659 +#: netbox/dcim/forms/model_forms.py:659 msgid "Automatically populate components associated with this module type" msgstr "自动填充与此模块类型关联的组件" -#: dcim/forms/model_forms.py:767 +#: netbox/dcim/forms/model_forms.py:767 msgid "Characteristics" msgstr "特性" -#: dcim/forms/model_forms.py:1087 +#: netbox/dcim/forms/model_forms.py:914 +#, python-brace-format +msgid "" +"Alphanumeric ranges are supported for bulk creation. Mixed cases and types " +"within a single range are not supported (example: " +"[ge,xe]-0/0/[0-9]). The token {module}, if " +"present, will be automatically replaced with the position value when " +"creating a new module." +msgstr "" + +#: netbox/dcim/forms/model_forms.py:1094 msgid "Console port template" msgstr "控制台端口模板" -#: dcim/forms/model_forms.py:1095 +#: netbox/dcim/forms/model_forms.py:1102 msgid "Console server port template" msgstr "控制口模版" -#: dcim/forms/model_forms.py:1103 +#: netbox/dcim/forms/model_forms.py:1110 msgid "Front port template" msgstr "前向端口模版" -#: dcim/forms/model_forms.py:1111 +#: netbox/dcim/forms/model_forms.py:1118 msgid "Interface template" msgstr "接口模版" -#: dcim/forms/model_forms.py:1119 +#: netbox/dcim/forms/model_forms.py:1126 msgid "Power outlet template" msgstr "电源插座模版" -#: dcim/forms/model_forms.py:1127 +#: netbox/dcim/forms/model_forms.py:1134 msgid "Power port template" msgstr "电源接口模版" -#: dcim/forms/model_forms.py:1135 +#: netbox/dcim/forms/model_forms.py:1142 msgid "Rear port template" msgstr "后置接口模版" -#: dcim/forms/model_forms.py:1144 dcim/forms/model_forms.py:1388 -#: dcim/forms/model_forms.py:1551 dcim/forms/model_forms.py:1583 -#: dcim/tables/connections.py:65 ipam/forms/bulk_import.py:318 -#: ipam/forms/model_forms.py:280 ipam/forms/model_forms.py:289 -#: ipam/tables/fhrp.py:64 ipam/tables/ip.py:372 ipam/tables/vlans.py:169 -#: templates/circuits/inc/circuit_termination_fields.html:51 -#: templates/dcim/frontport.html:106 templates/dcim/interface.html:27 -#: templates/dcim/interface.html:184 templates/dcim/interface.html:310 -#: templates/dcim/rearport.html:102 -#: templates/virtualization/vminterface.html:18 -#: templates/vpn/tunneltermination.html:31 -#: templates/wireless/inc/wirelesslink_interface.html:10 -#: templates/wireless/wirelesslink.html:10 -#: templates/wireless/wirelesslink.html:55 -#: virtualization/forms/model_forms.py:348 vpn/forms/bulk_import.py:297 -#: vpn/forms/model_forms.py:436 vpn/forms/model_forms.py:445 -#: wireless/forms/model_forms.py:113 wireless/forms/model_forms.py:155 +#: netbox/dcim/forms/model_forms.py: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 "接口" -#: dcim/forms/model_forms.py:1145 dcim/forms/model_forms.py:1584 -#: dcim/tables/connections.py:27 templates/dcim/consoleport.html:17 -#: templates/dcim/consoleserverport.html:74 templates/dcim/frontport.html:112 +#: netbox/dcim/forms/model_forms.py:1152 netbox/dcim/forms/model_forms.py:1591 +#: netbox/dcim/tables/connections.py:27 +#: netbox/templates/dcim/consoleport.html:17 +#: netbox/templates/dcim/consoleserverport.html:74 +#: netbox/templates/dcim/frontport.html:112 msgid "Console Port" msgstr "Console 端口" -#: dcim/forms/model_forms.py:1146 dcim/forms/model_forms.py:1585 -#: templates/dcim/consoleport.html:73 templates/dcim/consoleserverport.html:17 -#: templates/dcim/frontport.html:109 +#: netbox/dcim/forms/model_forms.py:1153 netbox/dcim/forms/model_forms.py:1592 +#: netbox/templates/dcim/consoleport.html:73 +#: netbox/templates/dcim/consoleserverport.html:17 +#: netbox/templates/dcim/frontport.html:109 msgid "Console Server Port" msgstr "Console 服务器端口" -#: dcim/forms/model_forms.py:1147 dcim/forms/model_forms.py:1586 -#: templates/circuits/inc/circuit_termination_fields.html:52 -#: templates/dcim/consoleport.html:76 templates/dcim/consoleserverport.html:77 -#: templates/dcim/frontport.html:17 templates/dcim/frontport.html:115 -#: templates/dcim/interface.html:187 templates/dcim/rearport.html:105 +#: netbox/dcim/forms/model_forms.py:1154 netbox/dcim/forms/model_forms.py:1593 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:52 +#: netbox/templates/dcim/consoleport.html:76 +#: netbox/templates/dcim/consoleserverport.html:77 +#: netbox/templates/dcim/frontport.html:17 +#: netbox/templates/dcim/frontport.html:115 +#: netbox/templates/dcim/interface.html:187 +#: netbox/templates/dcim/rearport.html:105 msgid "Front Port" msgstr "前置接口" -#: dcim/forms/model_forms.py:1148 dcim/forms/model_forms.py:1587 -#: dcim/tables/devices.py:710 -#: templates/circuits/inc/circuit_termination_fields.html:53 -#: templates/dcim/consoleport.html:79 templates/dcim/consoleserverport.html:80 -#: templates/dcim/frontport.html:50 templates/dcim/frontport.html:118 -#: templates/dcim/interface.html:190 templates/dcim/rearport.html:17 -#: templates/dcim/rearport.html:108 +#: netbox/dcim/forms/model_forms.py:1155 netbox/dcim/forms/model_forms.py:1594 +#: netbox/dcim/tables/devices.py:710 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:53 +#: netbox/templates/dcim/consoleport.html:79 +#: netbox/templates/dcim/consoleserverport.html:80 +#: netbox/templates/dcim/frontport.html:50 +#: netbox/templates/dcim/frontport.html:118 +#: netbox/templates/dcim/interface.html:190 +#: netbox/templates/dcim/rearport.html:17 +#: netbox/templates/dcim/rearport.html:108 msgid "Rear Port" msgstr "后置接口" -#: dcim/forms/model_forms.py:1149 dcim/forms/model_forms.py:1588 -#: dcim/tables/connections.py:46 dcim/tables/devices.py:512 -#: templates/dcim/poweroutlet.html:44 templates/dcim/powerport.html:17 +#: 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/templates/dcim/powerport.html:17 msgid "Power Port" msgstr "电源接口" -#: dcim/forms/model_forms.py:1150 dcim/forms/model_forms.py:1589 -#: templates/dcim/poweroutlet.html:17 templates/dcim/powerport.html:77 +#: netbox/dcim/forms/model_forms.py:1157 netbox/dcim/forms/model_forms.py:1596 +#: netbox/templates/dcim/poweroutlet.html:17 +#: netbox/templates/dcim/powerport.html:77 msgid "Power Outlet" msgstr "电源插座" -#: dcim/forms/model_forms.py:1152 dcim/forms/model_forms.py:1591 +#: netbox/dcim/forms/model_forms.py:1159 netbox/dcim/forms/model_forms.py:1598 msgid "Component Assignment" msgstr "组件分配" -#: dcim/forms/model_forms.py:1195 dcim/forms/model_forms.py:1638 +#: netbox/dcim/forms/model_forms.py:1202 netbox/dcim/forms/model_forms.py:1645 msgid "An InventoryItem can only be assigned to a single component." msgstr "库存项只能分配给单个组件" -#: dcim/forms/model_forms.py:1332 +#: netbox/dcim/forms/model_forms.py:1339 msgid "LAG interface" msgstr "链路聚合接口" -#: dcim/forms/model_forms.py:1355 +#: netbox/dcim/forms/model_forms.py:1362 msgid "Filter VLANs available for assignment by group." msgstr "按组筛选可供分配的 VLAN。" -#: dcim/forms/model_forms.py:1484 +#: netbox/dcim/forms/model_forms.py:1491 msgid "Child Device" msgstr "子设备" -#: dcim/forms/model_forms.py:1485 +#: netbox/dcim/forms/model_forms.py:1492 msgid "" "Child devices must first be created and assigned to the site and rack of the" " parent device." msgstr "必须首先创建子设备,并将其分配给父设备的站点和机柜。" -#: dcim/forms/model_forms.py:1527 +#: netbox/dcim/forms/model_forms.py:1534 msgid "Console port" msgstr "Console 接口" -#: dcim/forms/model_forms.py:1535 +#: netbox/dcim/forms/model_forms.py:1542 msgid "Console server port" msgstr "Console 服务器端口" -#: dcim/forms/model_forms.py:1543 +#: netbox/dcim/forms/model_forms.py:1550 msgid "Front port" msgstr "前置接口" -#: dcim/forms/model_forms.py:1559 +#: netbox/dcim/forms/model_forms.py:1566 msgid "Power outlet" msgstr "电源插座" -#: dcim/forms/model_forms.py:1579 templates/dcim/inventoryitem.html:17 +#: netbox/dcim/forms/model_forms.py:1586 +#: netbox/templates/dcim/inventoryitem.html:17 msgid "Inventory Item" msgstr "库存项" -#: dcim/forms/model_forms.py:1652 templates/dcim/inventoryitemrole.html:15 +#: netbox/dcim/forms/model_forms.py:1659 +#: netbox/templates/dcim/inventoryitemrole.html:15 msgid "Inventory Item Role" msgstr "库存物品分类" -#: dcim/forms/object_create.py:48 dcim/forms/object_create.py:199 -#: dcim/forms/object_create.py:355 +#: netbox/dcim/forms/object_create.py:48 +#: netbox/dcim/forms/object_create.py:199 +#: netbox/dcim/forms/object_create.py:347 msgid "" "Alphanumeric ranges are supported. (Must match the number of objects being " "created.)" msgstr "支持字母数字范围。(必须与正在创建的对象数相匹配。)" -#: dcim/forms/object_create.py:68 +#: netbox/dcim/forms/object_create.py:68 #, python-brace-format msgid "" "The provided pattern specifies {value_count} values, but {pattern_count} are" " expected." msgstr "提供了 {value_count}个参数,实际需要{pattern_count}个。" -#: dcim/forms/object_create.py:110 dcim/forms/object_create.py:271 -#: dcim/tables/devices.py:252 +#: netbox/dcim/forms/object_create.py:110 +#: netbox/dcim/forms/object_create.py:263 netbox/dcim/tables/devices.py:252 msgid "Rear ports" msgstr "后置接口" -#: dcim/forms/object_create.py:111 dcim/forms/object_create.py:272 +#: netbox/dcim/forms/object_create.py:111 +#: netbox/dcim/forms/object_create.py:264 msgid "Select one rear port assignment for each front port being created." msgstr "为正在创建的每个前置接口指定一个后置接口" -#: dcim/forms/object_create.py:164 +#: netbox/dcim/forms/object_create.py:164 #, python-brace-format msgid "" "The number of front port templates to be created ({frontport_count}) must " "match the selected number of rear port positions ({rearport_count})." msgstr "要创建的前置端口数({frontport_count}) 必须与所选的后置端口数({rearport_count})匹配。" -#: dcim/forms/object_create.py:251 -#, python-brace-format -msgid "" -"The string {module} will be replaced with the position of the " -"assigned module, if any." -msgstr "字符串{module} 将替换为指定位置的模块, (如果有的话)。" - -#: dcim/forms/object_create.py:320 +#: netbox/dcim/forms/object_create.py:312 #, python-brace-format msgid "" "The number of front ports to be created ({frontport_count}) must match the " "selected number of rear port positions ({rearport_count})." msgstr "要创建的前置端口数 ({frontport_count}) 必须与所选的后置端口数({rearport_count})匹配。" -#: dcim/forms/object_create.py:409 dcim/tables/devices.py:1033 -#: ipam/tables/fhrp.py:31 templates/dcim/virtualchassis.html:53 -#: templates/dcim/virtualchassis_edit.html:47 templates/ipam/fhrpgroup.html:38 +#: netbox/dcim/forms/object_create.py:401 netbox/dcim/tables/devices.py:1033 +#: netbox/ipam/tables/fhrp.py:31 netbox/templates/dcim/virtualchassis.html:53 +#: netbox/templates/dcim/virtualchassis_edit.html:47 +#: netbox/templates/ipam/fhrpgroup.html:38 msgid "Members" msgstr "成员" -#: dcim/forms/object_create.py:418 +#: netbox/dcim/forms/object_create.py:410 msgid "Initial position" msgstr "初始位置" -#: dcim/forms/object_create.py:421 +#: netbox/dcim/forms/object_create.py:413 msgid "" "Position of the first member device. Increases by one for each additional " "member." msgstr "第一个成员设备的位置。每增加一个成员增加一个。" -#: dcim/forms/object_create.py:435 +#: netbox/dcim/forms/object_create.py:427 msgid "A position must be specified for the first VC member." msgstr "必须为第一个VC成员指定一个位置。" -#: dcim/models/cables.py:62 dcim/models/device_component_templates.py:55 -#: dcim/models/device_components.py:62 extras/models/customfields.py:111 +#: netbox/dcim/models/cables.py:62 +#: netbox/dcim/models/device_component_templates.py:55 +#: netbox/dcim/models/device_components.py:62 +#: netbox/extras/models/customfields.py:111 msgid "label" msgstr "标记" -#: dcim/models/cables.py:71 +#: netbox/dcim/models/cables.py:71 msgid "length" msgstr "长度" -#: dcim/models/cables.py:78 +#: netbox/dcim/models/cables.py:78 msgid "length unit" msgstr "长度单位" -#: dcim/models/cables.py:95 +#: netbox/dcim/models/cables.py:95 msgid "cable" msgstr "线缆" -#: dcim/models/cables.py:96 +#: netbox/dcim/models/cables.py:96 msgid "cables" msgstr "线缆" -#: dcim/models/cables.py:165 +#: netbox/dcim/models/cables.py:165 msgid "Must specify a unit when setting a cable length" msgstr "设置线缆长度时必须指定单位" -#: dcim/models/cables.py:168 +#: netbox/dcim/models/cables.py:168 msgid "Must define A and B terminations when creating a new cable." msgstr "创建新线缆时必须定义A端和B端。" -#: dcim/models/cables.py:175 +#: netbox/dcim/models/cables.py:175 msgid "Cannot connect different termination types to same end of cable." msgstr "无法将不同的端点类型连接到线缆的两端。" -#: dcim/models/cables.py:183 +#: netbox/dcim/models/cables.py:183 #, python-brace-format msgid "Incompatible termination types: {type_a} and {type_b}" msgstr "不兼容的端点类型: {type_a} 和{type_b}" -#: dcim/models/cables.py:193 +#: netbox/dcim/models/cables.py:193 msgid "A and B terminations cannot connect to the same object." msgstr "A B端不能连接到同一个对象" -#: dcim/models/cables.py:260 ipam/models/asns.py:37 +#: netbox/dcim/models/cables.py:260 netbox/ipam/models/asns.py:37 msgid "end" msgstr "结束" -#: dcim/models/cables.py:313 +#: netbox/dcim/models/cables.py:313 msgid "cable termination" msgstr "线缆端点" -#: dcim/models/cables.py:314 +#: netbox/dcim/models/cables.py:314 msgid "cable terminations" msgstr "线缆端点" -#: dcim/models/cables.py:333 +#: netbox/dcim/models/cables.py:333 #, python-brace-format msgid "" "Duplicate termination found for {app_label}.{model} {termination_id}: cable " "{cable_pk}" msgstr "发现{app_label}重复的终端:{model} {termination_id}: 线缆 {cable_pk}" -#: dcim/models/cables.py:343 +#: netbox/dcim/models/cables.py:343 #, python-brace-format msgid "Cables cannot be terminated to {type_display} interfaces" msgstr "线缆不能连接至{type_display} 接口" -#: dcim/models/cables.py:350 +#: netbox/dcim/models/cables.py:350 msgid "Circuit terminations attached to a provider network may not be cabled." msgstr "运营商网络的线路可能没有连接。" -#: dcim/models/cables.py:448 extras/models/configs.py:50 +#: netbox/dcim/models/cables.py:448 netbox/extras/models/configs.py:50 msgid "is active" msgstr "激活的" -#: dcim/models/cables.py:452 +#: netbox/dcim/models/cables.py:452 msgid "is complete" msgstr "完成的" -#: dcim/models/cables.py:456 +#: netbox/dcim/models/cables.py:456 msgid "is split" msgstr "被拆分的" -#: dcim/models/cables.py:464 +#: netbox/dcim/models/cables.py:464 msgid "cable path" msgstr "线缆连接路径" -#: dcim/models/cables.py:465 +#: netbox/dcim/models/cables.py:465 msgid "cable paths" msgstr "线缆连接路径" -#: dcim/models/device_component_templates.py:46 +#: netbox/dcim/models/device_component_templates.py:46 #, python-brace-format msgid "" "{module} is accepted as a substitution for the module bay position when " "attached to a module type." msgstr "当连接到模块类型时,{module} 被认定为模块托架位置的替代。" -#: dcim/models/device_component_templates.py:58 -#: dcim/models/device_components.py:65 +#: netbox/dcim/models/device_component_templates.py:58 +#: netbox/dcim/models/device_components.py:65 msgid "Physical label" msgstr "物理标签" -#: dcim/models/device_component_templates.py:103 +#: netbox/dcim/models/device_component_templates.py:103 msgid "Component templates cannot be moved to a different device type." msgstr "组件模板无法移动到其他设备类型。" -#: dcim/models/device_component_templates.py:154 +#: netbox/dcim/models/device_component_templates.py:154 msgid "" "A component template cannot be associated with both a device type and a " "module type." msgstr "组件模板不能同时与设备类型和模块类型相关联。" -#: dcim/models/device_component_templates.py:158 +#: netbox/dcim/models/device_component_templates.py:158 msgid "" "A component template must be associated with either a device type or a " "module type." msgstr "组件模板必须与设备类型或模块类型相关联。" -#: dcim/models/device_component_templates.py:212 +#: netbox/dcim/models/device_component_templates.py:212 msgid "console port template" msgstr "console端口模板" -#: dcim/models/device_component_templates.py:213 +#: netbox/dcim/models/device_component_templates.py:213 msgid "console port templates" msgstr "console端口模板" -#: dcim/models/device_component_templates.py:246 +#: netbox/dcim/models/device_component_templates.py:246 msgid "console server port template" msgstr "console服务器端口模板" -#: dcim/models/device_component_templates.py:247 +#: netbox/dcim/models/device_component_templates.py:247 msgid "console server port templates" msgstr "console服务器端口模板" -#: dcim/models/device_component_templates.py:278 -#: dcim/models/device_components.py:352 +#: netbox/dcim/models/device_component_templates.py:278 +#: netbox/dcim/models/device_components.py:352 msgid "maximum draw" msgstr "最大功率" -#: dcim/models/device_component_templates.py:285 -#: dcim/models/device_components.py:359 +#: netbox/dcim/models/device_component_templates.py:285 +#: netbox/dcim/models/device_components.py:359 msgid "allocated draw" msgstr "分配功率" -#: dcim/models/device_component_templates.py:295 +#: netbox/dcim/models/device_component_templates.py:295 msgid "power port template" msgstr "电源端口模版" -#: dcim/models/device_component_templates.py:296 +#: netbox/dcim/models/device_component_templates.py:296 msgid "power port templates" msgstr "电源端口模版" -#: dcim/models/device_component_templates.py:315 -#: dcim/models/device_components.py:382 +#: netbox/dcim/models/device_component_templates.py:315 +#: netbox/dcim/models/device_components.py:382 #, python-brace-format msgid "Allocated draw cannot exceed the maximum draw ({maximum_draw}W)." msgstr "分配功率不能超过最大功率({maximum_draw}瓦)" -#: dcim/models/device_component_templates.py:347 -#: dcim/models/device_components.py:477 +#: netbox/dcim/models/device_component_templates.py:347 +#: netbox/dcim/models/device_components.py:477 msgid "feed leg" msgstr "馈电线路" -#: dcim/models/device_component_templates.py:351 -#: dcim/models/device_components.py:481 +#: netbox/dcim/models/device_component_templates.py:351 +#: netbox/dcim/models/device_components.py:481 msgid "Phase (for three-phase feeds)" msgstr "相位(用于三相电)" -#: dcim/models/device_component_templates.py:357 +#: netbox/dcim/models/device_component_templates.py:357 msgid "power outlet template" msgstr "电源插座模版" -#: dcim/models/device_component_templates.py:358 +#: netbox/dcim/models/device_component_templates.py:358 msgid "power outlet templates" msgstr "电源插座模版" -#: dcim/models/device_component_templates.py:367 +#: netbox/dcim/models/device_component_templates.py:367 #, python-brace-format msgid "Parent power port ({power_port}) must belong to the same device type" msgstr "父电源端口 ({power_port}) 必须属于相同的设备类型" -#: dcim/models/device_component_templates.py:371 +#: netbox/dcim/models/device_component_templates.py:371 #, python-brace-format msgid "Parent power port ({power_port}) must belong to the same module type" msgstr "父电源端口 ({power_port}) 必须属于相同的设备类型" -#: dcim/models/device_component_templates.py:423 -#: dcim/models/device_components.py:611 +#: netbox/dcim/models/device_component_templates.py:423 +#: netbox/dcim/models/device_components.py:611 msgid "management only" msgstr "仅限管理" -#: dcim/models/device_component_templates.py:431 -#: dcim/models/device_components.py:550 +#: netbox/dcim/models/device_component_templates.py:431 +#: netbox/dcim/models/device_components.py:550 msgid "bridge interface" msgstr "桥接接口" -#: dcim/models/device_component_templates.py:449 -#: dcim/models/device_components.py:636 +#: netbox/dcim/models/device_component_templates.py:449 +#: netbox/dcim/models/device_components.py:636 msgid "wireless role" msgstr "无线角色" -#: dcim/models/device_component_templates.py:455 +#: netbox/dcim/models/device_component_templates.py:455 msgid "interface template" msgstr "接口模版" -#: dcim/models/device_component_templates.py:456 +#: netbox/dcim/models/device_component_templates.py:456 msgid "interface templates" msgstr "接口模版" -#: dcim/models/device_component_templates.py:463 -#: dcim/models/device_components.py:804 -#: virtualization/models/virtualmachines.py:405 +#: netbox/dcim/models/device_component_templates.py:463 +#: netbox/dcim/models/device_components.py:804 +#: netbox/virtualization/models/virtualmachines.py:405 msgid "An interface cannot be bridged to itself." msgstr "接口不能桥接到自己" -#: dcim/models/device_component_templates.py:466 +#: netbox/dcim/models/device_component_templates.py:466 #, python-brace-format msgid "Bridge interface ({bridge}) must belong to the same device type" msgstr "桥接接口({bridge}) 必须属于相同的设备类型" -#: dcim/models/device_component_templates.py:470 +#: netbox/dcim/models/device_component_templates.py:470 #, python-brace-format msgid "Bridge interface ({bridge}) must belong to the same module type" msgstr "桥接接口({bridge}) 必须属于相同的模块类型" -#: dcim/models/device_component_templates.py:526 -#: dcim/models/device_components.py:984 +#: netbox/dcim/models/device_component_templates.py:526 +#: netbox/dcim/models/device_components.py:984 msgid "rear port position" msgstr "后置接口位置" -#: dcim/models/device_component_templates.py:551 +#: netbox/dcim/models/device_component_templates.py:551 msgid "front port template" msgstr "前置接口模板" -#: dcim/models/device_component_templates.py:552 +#: netbox/dcim/models/device_component_templates.py:552 msgid "front port templates" msgstr "前置接口模板" -#: dcim/models/device_component_templates.py:562 +#: netbox/dcim/models/device_component_templates.py:562 #, python-brace-format msgid "Rear port ({name}) must belong to the same device type" msgstr "后置接口({name})必须属于相同的设备类型" -#: dcim/models/device_component_templates.py:568 +#: netbox/dcim/models/device_component_templates.py:568 #, python-brace-format msgid "" "Invalid rear port position ({position}); rear port {name} has only {count} " "positions" msgstr "无效的后端口位置 ({position});后端口{name}只有{count}个" -#: dcim/models/device_component_templates.py:621 -#: dcim/models/device_components.py:1053 +#: netbox/dcim/models/device_component_templates.py:621 +#: netbox/dcim/models/device_components.py:1053 msgid "positions" msgstr "位置" -#: dcim/models/device_component_templates.py:632 +#: netbox/dcim/models/device_component_templates.py:632 msgid "rear port template" msgstr "后置端口模版" -#: dcim/models/device_component_templates.py:633 +#: netbox/dcim/models/device_component_templates.py:633 msgid "rear port templates" msgstr "后置端口模版" -#: dcim/models/device_component_templates.py:662 -#: dcim/models/device_components.py:1103 +#: netbox/dcim/models/device_component_templates.py:662 +#: netbox/dcim/models/device_components.py:1103 msgid "position" msgstr "位置" -#: dcim/models/device_component_templates.py:665 -#: dcim/models/device_components.py:1106 +#: netbox/dcim/models/device_component_templates.py:665 +#: netbox/dcim/models/device_components.py:1106 msgid "Identifier to reference when renaming installed components" msgstr "重命名已安装组件时要引用的标识符" -#: dcim/models/device_component_templates.py:671 +#: netbox/dcim/models/device_component_templates.py:671 msgid "module bay template" msgstr "模块托架模版" -#: dcim/models/device_component_templates.py:672 +#: netbox/dcim/models/device_component_templates.py:672 msgid "module bay templates" msgstr "模块托架模版" -#: dcim/models/device_component_templates.py:699 +#: netbox/dcim/models/device_component_templates.py:699 msgid "device bay template" msgstr "设备托架模版" -#: dcim/models/device_component_templates.py:700 +#: netbox/dcim/models/device_component_templates.py:700 msgid "device bay templates" msgstr "设备托架模版" -#: dcim/models/device_component_templates.py:713 +#: netbox/dcim/models/device_component_templates.py:713 #, python-brace-format msgid "" "Subdevice role of device type ({device_type}) must be set to \"parent\" to " "allow device bays." msgstr "设备类型({device_type})的子设备角色必须设置为“父设备”,才能允许设备托架。" -#: dcim/models/device_component_templates.py:768 -#: dcim/models/device_components.py:1262 +#: netbox/dcim/models/device_component_templates.py:768 +#: netbox/dcim/models/device_components.py:1262 msgid "part ID" msgstr "零件ID" -#: dcim/models/device_component_templates.py:770 -#: dcim/models/device_components.py:1264 +#: netbox/dcim/models/device_component_templates.py:770 +#: netbox/dcim/models/device_components.py:1264 msgid "Manufacturer-assigned part identifier" msgstr "制造商指定的零件标识符" -#: dcim/models/device_component_templates.py:787 +#: netbox/dcim/models/device_component_templates.py:787 msgid "inventory item template" msgstr "库存项模版" -#: dcim/models/device_component_templates.py:788 +#: netbox/dcim/models/device_component_templates.py:788 msgid "inventory item templates" msgstr "库存项模版" -#: dcim/models/device_components.py:105 +#: netbox/dcim/models/device_components.py:105 msgid "Components cannot be moved to a different device." msgstr "组件模板无法移动到其他设备类型。" -#: dcim/models/device_components.py:144 +#: netbox/dcim/models/device_components.py:144 msgid "cable end" msgstr "线缆终点" -#: dcim/models/device_components.py:150 +#: netbox/dcim/models/device_components.py:150 msgid "mark connected" msgstr "标记已连接" -#: dcim/models/device_components.py:152 +#: netbox/dcim/models/device_components.py:152 msgid "Treat as if a cable is connected" msgstr "视为电缆已连接" -#: dcim/models/device_components.py:170 +#: netbox/dcim/models/device_components.py:170 msgid "Must specify cable end (A or B) when attaching a cable." msgstr "连接电缆时必须指定电缆末端(A或B)。" -#: dcim/models/device_components.py:174 +#: netbox/dcim/models/device_components.py:174 msgid "Cable end must not be set without a cable." msgstr "不得在没有线缆的情况下设置线缆末端。" -#: dcim/models/device_components.py:178 +#: netbox/dcim/models/device_components.py:178 msgid "Cannot mark as connected with a cable attached." msgstr "无法标记为已连接线缆。" -#: dcim/models/device_components.py:202 +#: netbox/dcim/models/device_components.py:202 #, python-brace-format msgid "{class_name} models must declare a parent_object property" msgstr "{class_name}模块必须声明上架类型" -#: dcim/models/device_components.py:287 dcim/models/device_components.py:316 -#: dcim/models/device_components.py:349 dcim/models/device_components.py:467 +#: 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 msgid "Physical port type" msgstr "物理端口类型" -#: dcim/models/device_components.py:290 dcim/models/device_components.py:319 +#: netbox/dcim/models/device_components.py:290 +#: netbox/dcim/models/device_components.py:319 msgid "speed" msgstr "速率" -#: dcim/models/device_components.py:294 dcim/models/device_components.py:323 +#: netbox/dcim/models/device_components.py:294 +#: netbox/dcim/models/device_components.py:323 msgid "Port speed in bits per second" msgstr "端口速度(单位bps)" -#: dcim/models/device_components.py:300 +#: netbox/dcim/models/device_components.py:300 msgid "console port" msgstr "console端口" -#: dcim/models/device_components.py:301 +#: netbox/dcim/models/device_components.py:301 msgid "console ports" msgstr "console端口" -#: dcim/models/device_components.py:329 +#: netbox/dcim/models/device_components.py:329 msgid "console server port" msgstr "console服务器端口" -#: dcim/models/device_components.py:330 +#: netbox/dcim/models/device_components.py:330 msgid "console server ports" msgstr "console服务器端口" -#: dcim/models/device_components.py:369 +#: netbox/dcim/models/device_components.py:369 msgid "power port" msgstr "电源接口" -#: dcim/models/device_components.py:370 +#: netbox/dcim/models/device_components.py:370 msgid "power ports" msgstr "电源接口" -#: dcim/models/device_components.py:487 +#: netbox/dcim/models/device_components.py:487 msgid "power outlet" msgstr "电源插座" -#: dcim/models/device_components.py:488 +#: netbox/dcim/models/device_components.py:488 msgid "power outlets" msgstr "电源插座" -#: dcim/models/device_components.py:499 +#: netbox/dcim/models/device_components.py:499 #, python-brace-format msgid "Parent power port ({power_port}) must belong to the same device" msgstr "父电源端口({power_port})必须属于同一设备" -#: dcim/models/device_components.py:530 vpn/models/crypto.py:81 -#: vpn/models/crypto.py:226 +#: netbox/dcim/models/device_components.py:530 netbox/vpn/models/crypto.py:81 +#: netbox/vpn/models/crypto.py:226 msgid "mode" msgstr "模式" -#: dcim/models/device_components.py:534 +#: netbox/dcim/models/device_components.py:534 msgid "IEEE 802.1Q tagging strategy" msgstr "IEEE 802.1Q VLAN 标记策略" -#: dcim/models/device_components.py:542 +#: netbox/dcim/models/device_components.py:542 msgid "parent interface" msgstr "父接口" -#: dcim/models/device_components.py:602 +#: netbox/dcim/models/device_components.py:602 msgid "parent LAG" msgstr "父聚合组" -#: dcim/models/device_components.py:612 +#: netbox/dcim/models/device_components.py:612 msgid "This interface is used only for out-of-band management" msgstr "该接口仅用于带外管理" -#: dcim/models/device_components.py:617 +#: netbox/dcim/models/device_components.py:617 msgid "speed (Kbps)" msgstr "速率(Kbps)" -#: dcim/models/device_components.py:620 +#: netbox/dcim/models/device_components.py:620 msgid "duplex" msgstr "双工" -#: dcim/models/device_components.py:630 +#: netbox/dcim/models/device_components.py:630 msgid "64-bit World Wide Name" msgstr "64位全球唯一标识符" -#: dcim/models/device_components.py:642 +#: netbox/dcim/models/device_components.py:642 msgid "wireless channel" msgstr "无线信道" -#: dcim/models/device_components.py:649 +#: netbox/dcim/models/device_components.py:649 msgid "channel frequency (MHz)" msgstr "信道频率(MHz)" -#: dcim/models/device_components.py:650 dcim/models/device_components.py:658 +#: netbox/dcim/models/device_components.py:650 +#: netbox/dcim/models/device_components.py:658 msgid "Populated by selected channel (if set)" msgstr "由所选通道填充(如有)" -#: dcim/models/device_components.py:664 +#: netbox/dcim/models/device_components.py:664 msgid "transmit power (dBm)" msgstr "发射功率(dBm)" -#: dcim/models/device_components.py:689 wireless/models.py:117 +#: netbox/dcim/models/device_components.py:689 netbox/wireless/models.py:117 msgid "wireless LANs" msgstr "无线局域网" -#: dcim/models/device_components.py:697 -#: virtualization/models/virtualmachines.py:335 +#: netbox/dcim/models/device_components.py:697 +#: netbox/virtualization/models/virtualmachines.py:335 msgid "untagged VLAN" msgstr "未标记VLAN" -#: dcim/models/device_components.py:703 -#: virtualization/models/virtualmachines.py:341 +#: netbox/dcim/models/device_components.py:703 +#: netbox/virtualization/models/virtualmachines.py:341 msgid "tagged VLANs" msgstr "已标记 VLANs" -#: dcim/models/device_components.py:745 -#: virtualization/models/virtualmachines.py:377 +#: netbox/dcim/models/device_components.py:745 +#: netbox/virtualization/models/virtualmachines.py:377 msgid "interface" msgstr "接口" -#: dcim/models/device_components.py:746 -#: virtualization/models/virtualmachines.py:378 +#: netbox/dcim/models/device_components.py:746 +#: netbox/virtualization/models/virtualmachines.py:378 msgid "interfaces" msgstr "接口" -#: dcim/models/device_components.py:757 +#: netbox/dcim/models/device_components.py:757 #, python-brace-format msgid "{display_type} interfaces cannot have a cable attached." msgstr "{display_type}接口不能连接线缆。" -#: dcim/models/device_components.py:765 +#: netbox/dcim/models/device_components.py:765 #, python-brace-format msgid "{display_type} interfaces cannot be marked as connected." msgstr "{display_type}接口不能标记为已连接。" -#: dcim/models/device_components.py:774 -#: virtualization/models/virtualmachines.py:390 +#: netbox/dcim/models/device_components.py:774 +#: netbox/virtualization/models/virtualmachines.py:390 msgid "An interface cannot be its own parent." msgstr "接口不能是自己的父级。" -#: dcim/models/device_components.py:778 +#: netbox/dcim/models/device_components.py:778 msgid "Only virtual interfaces may be assigned to a parent interface." msgstr "只能将虚拟接口分配给父接口。" -#: dcim/models/device_components.py:785 +#: netbox/dcim/models/device_components.py:785 #, python-brace-format msgid "" "The selected parent interface ({interface}) belongs to a different device " "({device})" msgstr "所选父接口({interface}) 属于另一个设备 ({device})" -#: dcim/models/device_components.py:791 +#: netbox/dcim/models/device_components.py:791 #, 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}的一部分。" -#: dcim/models/device_components.py:811 +#: netbox/dcim/models/device_components.py:811 #, python-brace-format msgid "" "The selected bridge interface ({bridge}) belongs to a different device " "({device})." msgstr "所选桥接接口 ({bridge})属于另一个设备({device})。" -#: dcim/models/device_components.py:817 +#: netbox/dcim/models/device_components.py:817 #, 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}的一部分。" -#: dcim/models/device_components.py:828 +#: netbox/dcim/models/device_components.py:828 msgid "Virtual interfaces cannot have a parent LAG interface." msgstr "虚拟接口不能具有父聚合接口。" -#: dcim/models/device_components.py:832 +#: netbox/dcim/models/device_components.py:832 msgid "A LAG interface cannot be its own parent." msgstr "聚合接口不能是自己的父级。" -#: dcim/models/device_components.py:839 +#: netbox/dcim/models/device_components.py:839 #, python-brace-format msgid "" "The selected LAG interface ({lag}) belongs to a different device ({device})." msgstr "选择的LAG接口 ({lag}) 属于不同的设备 ({device})." -#: dcim/models/device_components.py:845 +#: netbox/dcim/models/device_components.py:845 #, 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}." -#: dcim/models/device_components.py:856 +#: netbox/dcim/models/device_components.py:856 msgid "Virtual interfaces cannot have a PoE mode." msgstr "虚拟接口不能具有PoE模式。" -#: dcim/models/device_components.py:860 +#: netbox/dcim/models/device_components.py:860 msgid "Virtual interfaces cannot have a PoE type." msgstr "虚拟接口不能是PoE类型。" -#: dcim/models/device_components.py:866 +#: netbox/dcim/models/device_components.py:866 msgid "Must specify PoE mode when designating a PoE type." msgstr "指定PoE类型时必须指定PoE模式。" -#: dcim/models/device_components.py:873 +#: netbox/dcim/models/device_components.py:873 msgid "Wireless role may be set only on wireless interfaces." msgstr "只能在无线接口上设置无线角色。" -#: dcim/models/device_components.py:875 +#: netbox/dcim/models/device_components.py:875 msgid "Channel may be set only on wireless interfaces." msgstr "只能在无线接口上设置信道。" -#: dcim/models/device_components.py:881 +#: netbox/dcim/models/device_components.py:881 msgid "Channel frequency may be set only on wireless interfaces." msgstr "信道频率仅在无线接口上设置。" -#: dcim/models/device_components.py:885 +#: netbox/dcim/models/device_components.py:885 msgid "Cannot specify custom frequency with channel selected." msgstr "无法在选定频道的情况下指定自定义频率。" -#: dcim/models/device_components.py:891 +#: netbox/dcim/models/device_components.py:891 msgid "Channel width may be set only on wireless interfaces." msgstr "只能在无线接口上设置频宽。" -#: dcim/models/device_components.py:893 +#: netbox/dcim/models/device_components.py:893 msgid "Cannot specify custom width with channel selected." msgstr "无法在选定通道的情况下指定自定义频宽。" -#: dcim/models/device_components.py:901 +#: netbox/dcim/models/device_components.py:901 #, 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" -#: dcim/models/device_components.py:990 +#: netbox/dcim/models/device_components.py:990 msgid "Mapped position on corresponding rear port" msgstr "对应后置端口上的映射位置" -#: dcim/models/device_components.py:1006 +#: netbox/dcim/models/device_components.py:1006 msgid "front port" msgstr "前置端口" -#: dcim/models/device_components.py:1007 +#: netbox/dcim/models/device_components.py:1007 msgid "front ports" msgstr "前置端口" -#: dcim/models/device_components.py:1021 +#: netbox/dcim/models/device_components.py:1021 #, python-brace-format msgid "Rear port ({rear_port}) must belong to the same device" msgstr "后置端口({rear_port})必须属于同一设备" -#: dcim/models/device_components.py:1029 +#: netbox/dcim/models/device_components.py:1029 #, python-brace-format msgid "" "Invalid rear port position ({rear_port_position}): Rear port {name} has only" " {positions} positions." msgstr "无效的后端口位置({rear_port_position});后端口{name}只有 {positions}个" -#: dcim/models/device_components.py:1059 +#: netbox/dcim/models/device_components.py:1059 msgid "Number of front ports which may be mapped" msgstr "可以映射的前置端口数" -#: dcim/models/device_components.py:1064 +#: netbox/dcim/models/device_components.py:1064 msgid "rear port" msgstr "后置端口" -#: dcim/models/device_components.py:1065 +#: netbox/dcim/models/device_components.py:1065 msgid "rear ports" msgstr "后置端口" -#: dcim/models/device_components.py:1079 +#: netbox/dcim/models/device_components.py:1079 #, python-brace-format msgid "" "The number of positions cannot be less than the number of mapped front ports" " ({frontport_count})" msgstr "位置数不能小于映射的前置端口数({frontport_count})" -#: dcim/models/device_components.py:1120 +#: netbox/dcim/models/device_components.py:1120 msgid "module bay" msgstr "设备板卡插槽" -#: dcim/models/device_components.py:1121 +#: netbox/dcim/models/device_components.py:1121 msgid "module bays" msgstr "设备板卡插槽" -#: dcim/models/device_components.py:1138 dcim/models/devices.py:1224 +#: netbox/dcim/models/device_components.py:1138 +#: netbox/dcim/models/devices.py:1224 msgid "A module bay cannot belong to a module installed within it." msgstr "模块托架不能属于安装在其中的模块。" -#: dcim/models/device_components.py:1164 +#: netbox/dcim/models/device_components.py:1164 msgid "device bay" msgstr "设备托架" -#: dcim/models/device_components.py:1165 +#: netbox/dcim/models/device_components.py:1165 msgid "device bays" msgstr "设备托架" -#: dcim/models/device_components.py:1175 +#: netbox/dcim/models/device_components.py:1175 #, python-brace-format msgid "This type of device ({device_type}) does not support device bays." msgstr "此类型的设备 ({device_type}) 不支持设备托架。" -#: dcim/models/device_components.py:1181 +#: netbox/dcim/models/device_components.py:1181 msgid "Cannot install a device into itself." msgstr "无法将设备安装到自身中。" -#: dcim/models/device_components.py:1189 +#: netbox/dcim/models/device_components.py:1189 #, python-brace-format msgid "" "Cannot install the specified device; device is already installed in {bay}." msgstr "无法安装指定的设备;设备已安装在{bay}中。" -#: dcim/models/device_components.py:1210 +#: netbox/dcim/models/device_components.py:1210 msgid "inventory item role" msgstr "库存物品分类" -#: dcim/models/device_components.py:1211 +#: netbox/dcim/models/device_components.py:1211 msgid "inventory item roles" msgstr "库存物品分类" -#: dcim/models/device_components.py:1268 dcim/models/devices.py:607 -#: dcim/models/devices.py:1181 dcim/models/racks.py:313 -#: virtualization/models/virtualmachines.py:131 +#: 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 msgid "serial number" msgstr "序列号" -#: dcim/models/device_components.py:1276 dcim/models/devices.py:615 -#: dcim/models/devices.py:1188 dcim/models/racks.py:320 +#: 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 msgid "asset tag" msgstr "资产标签" -#: dcim/models/device_components.py:1277 +#: netbox/dcim/models/device_components.py:1277 msgid "A unique tag used to identify this item" msgstr "用于识别该项目的唯一标识" -#: dcim/models/device_components.py:1280 +#: netbox/dcim/models/device_components.py:1280 msgid "discovered" msgstr "已发现" -#: dcim/models/device_components.py:1282 +#: netbox/dcim/models/device_components.py:1282 msgid "This item was automatically discovered" msgstr "此项目是自动发现的" -#: dcim/models/device_components.py:1300 +#: netbox/dcim/models/device_components.py:1300 msgid "inventory item" msgstr "库存项" -#: dcim/models/device_components.py:1301 +#: netbox/dcim/models/device_components.py:1301 msgid "inventory items" msgstr "库存项" -#: dcim/models/device_components.py:1312 +#: netbox/dcim/models/device_components.py:1312 msgid "Cannot assign self as parent." msgstr "无法将自身分配为父级。" -#: dcim/models/device_components.py:1320 +#: netbox/dcim/models/device_components.py:1320 msgid "Parent inventory item does not belong to the same device." msgstr "父库存项不能属于同一设备。" -#: dcim/models/device_components.py:1326 +#: netbox/dcim/models/device_components.py:1326 msgid "Cannot move an inventory item with dependent children" msgstr "无法移动具有子项的库存项目" -#: dcim/models/device_components.py:1334 +#: netbox/dcim/models/device_components.py:1334 msgid "Cannot assign inventory item to component on another device" msgstr "无法将库存项分配给其他设备上的组件" -#: dcim/models/devices.py:54 +#: netbox/dcim/models/devices.py:54 msgid "manufacturer" msgstr "厂商" -#: dcim/models/devices.py:55 +#: netbox/dcim/models/devices.py:55 msgid "manufacturers" msgstr "厂商" -#: dcim/models/devices.py:82 dcim/models/devices.py:382 -#: dcim/models/racks.py:133 +#: netbox/dcim/models/devices.py:82 netbox/dcim/models/devices.py:382 +#: netbox/dcim/models/racks.py:133 msgid "model" msgstr "型号" -#: dcim/models/devices.py:95 +#: netbox/dcim/models/devices.py:95 msgid "default platform" msgstr "默认系统平台" -#: dcim/models/devices.py:98 dcim/models/devices.py:386 +#: netbox/dcim/models/devices.py:98 netbox/dcim/models/devices.py:386 msgid "part number" msgstr "部件编码(PN)" -#: dcim/models/devices.py:101 dcim/models/devices.py:389 +#: netbox/dcim/models/devices.py:101 netbox/dcim/models/devices.py:389 msgid "Discrete part number (optional)" msgstr "独立部件编码(PN) (可选)" -#: dcim/models/devices.py:107 dcim/models/racks.py:54 +#: netbox/dcim/models/devices.py:107 netbox/dcim/models/racks.py:54 msgid "height (U)" msgstr "高度(U)" -#: dcim/models/devices.py:111 +#: netbox/dcim/models/devices.py:111 msgid "exclude from utilization" msgstr "从利用率中排除" -#: dcim/models/devices.py:112 +#: netbox/dcim/models/devices.py:112 msgid "Devices of this type are excluded when calculating rack utilization." msgstr "计算机柜利用率时,不包括此类设备。" -#: dcim/models/devices.py:116 +#: netbox/dcim/models/devices.py:116 msgid "is full depth" msgstr "是否全尺寸" -#: dcim/models/devices.py:117 +#: netbox/dcim/models/devices.py:117 msgid "Device consumes both front and rear rack faces." msgstr "设备同时使用机柜的前面板和后面板。" -#: dcim/models/devices.py:123 +#: netbox/dcim/models/devices.py:123 msgid "parent/child status" msgstr "父设备/子设备状态" -#: dcim/models/devices.py:124 +#: netbox/dcim/models/devices.py:124 msgid "" "Parent devices house child devices in device bays. Leave blank if this " "device type is neither a parent nor a child." msgstr "父设备将子设备放置在设备托架中。如果此设备类型既不是父设备也不是子设备,请保留为空。" -#: dcim/models/devices.py:128 dcim/models/devices.py:392 -#: dcim/models/devices.py:659 dcim/models/racks.py:324 +#: netbox/dcim/models/devices.py:128 netbox/dcim/models/devices.py:392 +#: netbox/dcim/models/devices.py:659 netbox/dcim/models/racks.py:324 msgid "airflow" msgstr "气流方向" -#: dcim/models/devices.py:204 +#: netbox/dcim/models/devices.py:204 msgid "device type" msgstr "设备型号" -#: dcim/models/devices.py:205 +#: netbox/dcim/models/devices.py:205 msgid "device types" msgstr "设备型号" -#: dcim/models/devices.py:290 +#: netbox/dcim/models/devices.py:290 msgid "U height must be in increments of 0.5 rack units." msgstr "U位数必须以0.5U为增量。" -#: dcim/models/devices.py:307 +#: netbox/dcim/models/devices.py:307 #, python-brace-format msgid "" "Device {device} in rack {rack} does not have sufficient space to accommodate" " a height of {height}U" msgstr "机柜 {rack}没有足够的空间容纳{height}U的设备 {device}" -#: dcim/models/devices.py:322 +#: netbox/dcim/models/devices.py:322 #, python-brace-format msgid "" "Unable to set 0U height: Found {racked_instance_count} " "instances already mounted within racks." msgstr "无法设置高度为0U: 发现 {racked_instance_count}个设备已经安装在机柜中。" -#: dcim/models/devices.py:331 +#: netbox/dcim/models/devices.py:331 msgid "" "Must delete all device bay templates associated with this device before " "declassifying it as a parent device." msgstr "必须删除与此设备关联的所有设备托架模板,然后才能将其修改为父设备。" -#: dcim/models/devices.py:337 +#: netbox/dcim/models/devices.py:337 msgid "Child device types must be 0U." msgstr "子设备类型高度必须为0U。" -#: dcim/models/devices.py:411 +#: netbox/dcim/models/devices.py:411 msgid "module type" msgstr "模块类型" -#: dcim/models/devices.py:412 +#: netbox/dcim/models/devices.py:412 msgid "module types" msgstr "模块类型" -#: dcim/models/devices.py:485 +#: netbox/dcim/models/devices.py:485 msgid "Virtual machines may be assigned to this role" msgstr "虚拟机可以使用该型号/角色" -#: dcim/models/devices.py:497 +#: netbox/dcim/models/devices.py:497 msgid "device role" msgstr "设备角色" -#: dcim/models/devices.py:498 +#: netbox/dcim/models/devices.py:498 msgid "device roles" msgstr "设备角色" -#: dcim/models/devices.py:515 +#: netbox/dcim/models/devices.py:515 msgid "Optionally limit this platform to devices of a certain manufacturer" msgstr "可选择将此平台限定为特定制造商的设备" -#: dcim/models/devices.py:527 +#: netbox/dcim/models/devices.py:527 msgid "platform" msgstr "操作系统" -#: dcim/models/devices.py:528 +#: netbox/dcim/models/devices.py:528 msgid "platforms" msgstr "操作系统" -#: dcim/models/devices.py:576 +#: netbox/dcim/models/devices.py:576 msgid "The function this device serves" msgstr "该设备的功能" -#: dcim/models/devices.py:608 +#: netbox/dcim/models/devices.py:608 msgid "Chassis serial number, assigned by the manufacturer" msgstr "制造商分配的机箱序列号" -#: dcim/models/devices.py:616 dcim/models/devices.py:1189 +#: netbox/dcim/models/devices.py:616 netbox/dcim/models/devices.py:1189 msgid "A unique tag used to identify this device" msgstr "用于识别该设备的唯一标签" -#: dcim/models/devices.py:643 +#: netbox/dcim/models/devices.py:643 msgid "position (U)" msgstr "机柜位置(U)" -#: dcim/models/devices.py:650 +#: netbox/dcim/models/devices.py:650 msgid "rack face" msgstr "机柜安装方向" -#: dcim/models/devices.py:670 dcim/models/devices.py:1415 -#: virtualization/models/virtualmachines.py:100 +#: netbox/dcim/models/devices.py:670 netbox/dcim/models/devices.py:1420 +#: netbox/virtualization/models/virtualmachines.py:100 msgid "primary IPv4" msgstr "首选 IPv4" -#: dcim/models/devices.py:678 dcim/models/devices.py:1423 -#: virtualization/models/virtualmachines.py:108 +#: netbox/dcim/models/devices.py:678 netbox/dcim/models/devices.py:1428 +#: netbox/virtualization/models/virtualmachines.py:108 msgid "primary IPv6" msgstr "首选 IPv6" -#: dcim/models/devices.py:686 +#: netbox/dcim/models/devices.py:686 msgid "out-of-band IP" msgstr "带外管理IP地址" -#: dcim/models/devices.py:703 +#: netbox/dcim/models/devices.py:703 msgid "VC position" msgstr "堆叠位置" -#: dcim/models/devices.py:706 +#: netbox/dcim/models/devices.py:706 msgid "Virtual chassis position" msgstr "堆叠位置" -#: dcim/models/devices.py:709 +#: netbox/dcim/models/devices.py:709 msgid "VC priority" msgstr "VC优先级" -#: dcim/models/devices.py:713 +#: netbox/dcim/models/devices.py:713 msgid "Virtual chassis master election priority" msgstr "堆叠主设备优先级" -#: dcim/models/devices.py:716 dcim/models/sites.py:207 +#: netbox/dcim/models/devices.py:716 netbox/dcim/models/sites.py:207 msgid "latitude" msgstr "纬度" -#: dcim/models/devices.py:721 dcim/models/devices.py:729 -#: dcim/models/sites.py:212 dcim/models/sites.py:220 +#: netbox/dcim/models/devices.py:721 netbox/dcim/models/devices.py:729 +#: netbox/dcim/models/sites.py:212 netbox/dcim/models/sites.py:220 msgid "GPS coordinate in decimal format (xx.yyyyyy)" msgstr "GPS坐标(十进制格式, xx.yyyyyy)" -#: dcim/models/devices.py:724 dcim/models/sites.py:215 +#: netbox/dcim/models/devices.py:724 netbox/dcim/models/sites.py:215 msgid "longitude" msgstr "经度" -#: dcim/models/devices.py:797 +#: netbox/dcim/models/devices.py:797 msgid "Device name must be unique per site." msgstr "每个站点的设备名称必须唯一。" -#: dcim/models/devices.py:808 ipam/models/services.py:75 +#: netbox/dcim/models/devices.py:808 netbox/ipam/models/services.py:75 msgid "device" msgstr "设备" -#: dcim/models/devices.py:809 +#: netbox/dcim/models/devices.py:809 msgid "devices" msgstr "设备" -#: dcim/models/devices.py:835 +#: netbox/dcim/models/devices.py:835 #, python-brace-format msgid "Rack {rack} does not belong to site {site}." msgstr "机柜 {rack} 不属于 {site}站点." -#: dcim/models/devices.py:840 +#: netbox/dcim/models/devices.py:840 #, python-brace-format msgid "Location {location} does not belong to site {site}." msgstr "地点 {location} 不属于 {site}站点." -#: dcim/models/devices.py:846 +#: netbox/dcim/models/devices.py:846 #, python-brace-format msgid "Rack {rack} does not belong to location {location}." msgstr "机柜{rack}不属于{location}地点." -#: dcim/models/devices.py:853 +#: netbox/dcim/models/devices.py:853 msgid "Cannot select a rack face without assigning a rack." msgstr "在未分配机柜的情况下,无法选择安装在机柜的哪一面。" -#: dcim/models/devices.py:857 +#: netbox/dcim/models/devices.py:857 msgid "Cannot select a rack position without assigning a rack." msgstr "在未分配机柜的情况下,无法选择安装在机柜的哪个位置。" -#: dcim/models/devices.py:863 +#: netbox/dcim/models/devices.py:863 msgid "Position must be in increments of 0.5 rack units." msgstr "机柜位置必须以0.5个U位递增。" -#: dcim/models/devices.py:867 +#: netbox/dcim/models/devices.py:867 msgid "Must specify rack face when defining rack position." msgstr "指定机柜安装位置时必须指定安装在机柜的哪一面。" -#: dcim/models/devices.py:875 +#: netbox/dcim/models/devices.py:875 #, python-brace-format msgid "" "A 0U device type ({device_type}) cannot be assigned to a rack position." msgstr "无法将0U的设备类型({device_type})的设备安装在机柜中。" -#: dcim/models/devices.py:886 +#: netbox/dcim/models/devices.py:886 msgid "" "Child device types cannot be assigned to a rack face. This is an attribute " "of the parent device." msgstr "子设备类型不能安装到机柜的前/后面。这是父设备的一个属性。" -#: dcim/models/devices.py:893 +#: netbox/dcim/models/devices.py:893 msgid "" "Child device types cannot be assigned to a rack position. This is an " "attribute of the parent device." msgstr "子设备类型不能安装到机柜某个位置。这是父设备的一个属性。" -#: dcim/models/devices.py:907 +#: netbox/dcim/models/devices.py:907 #, 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)" -#: dcim/models/devices.py:922 +#: netbox/dcim/models/devices.py:922 #, python-brace-format msgid "{ip} is not an IPv4 address." msgstr "{ip} 不是有效的IPv4地址" -#: dcim/models/devices.py:931 dcim/models/devices.py:946 +#: netbox/dcim/models/devices.py:931 netbox/dcim/models/devices.py:946 #, python-brace-format msgid "The specified IP address ({ip}) is not assigned to this device." msgstr "指定的IP地址 ({ip}) 未分配给该设备。" -#: dcim/models/devices.py:937 +#: netbox/dcim/models/devices.py:937 #, python-brace-format msgid "{ip} is not an IPv6 address." msgstr "{ip} 不是有效的IPv6地址" -#: dcim/models/devices.py:964 +#: netbox/dcim/models/devices.py:964 #, python-brace-format msgid "" "The assigned platform is limited to {platform_manufacturer} device types, " @@ -5620,1845 +6099,1955 @@ msgid "" msgstr "" "指定的平台仅限于{platform_manufacturer} 的设备类型,但此设备的类型属于{devicetype_manufacturer}。" -#: dcim/models/devices.py:975 +#: netbox/dcim/models/devices.py:975 #, python-brace-format msgid "The assigned cluster belongs to a different site ({site})" msgstr "分配的群集属于其他站点({site})" -#: dcim/models/devices.py:983 +#: netbox/dcim/models/devices.py:983 msgid "A device assigned to a virtual chassis must have its position defined." msgstr "分配给集群的设备必须定义其位置。" -#: dcim/models/devices.py:988 +#: netbox/dcim/models/devices.py:988 #, python-brace-format msgid "" "Device cannot be removed from virtual chassis {virtual_chassis} because it " "is currently designated as its master." msgstr "无法从虚拟机箱中移除设备 {virtual_chassis} 因为它目前被指定为主节点。" -#: dcim/models/devices.py:1196 +#: netbox/dcim/models/devices.py:1196 msgid "module" msgstr "模块" -#: dcim/models/devices.py:1197 +#: netbox/dcim/models/devices.py:1197 msgid "modules" msgstr "模块" -#: dcim/models/devices.py:1213 +#: netbox/dcim/models/devices.py:1213 #, python-brace-format msgid "" "Module must be installed within a module bay belonging to the assigned " "device ({device})." msgstr "模块必须安装在属于指定设备({device})的模块托架内。" -#: dcim/models/devices.py:1334 +#: netbox/dcim/models/devices.py:1339 msgid "domain" msgstr "域" -#: dcim/models/devices.py:1347 dcim/models/devices.py:1348 +#: netbox/dcim/models/devices.py:1352 netbox/dcim/models/devices.py:1353 msgid "virtual chassis" msgstr "堆叠" -#: dcim/models/devices.py:1363 +#: netbox/dcim/models/devices.py:1368 #, python-brace-format msgid "" "The selected master ({master}) is not assigned to this virtual chassis." msgstr "所选主设备({master})未分配给此堆叠。" -#: dcim/models/devices.py:1379 +#: 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 "无法删除堆叠 {self}。有成员接口属于跨机箱聚合。" -#: dcim/models/devices.py:1404 vpn/models/l2vpn.py:37 +#: netbox/dcim/models/devices.py:1409 netbox/vpn/models/l2vpn.py:37 msgid "identifier" msgstr "标识符" -#: dcim/models/devices.py:1405 +#: netbox/dcim/models/devices.py:1410 msgid "Numeric identifier unique to the parent device" msgstr "父设备唯一的标识符" -#: dcim/models/devices.py:1433 extras/models/customfields.py:225 -#: extras/models/models.py:107 extras/models/models.py:694 -#: netbox/models/__init__.py:115 +#: 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:115 msgid "comments" msgstr "评论" -#: dcim/models/devices.py:1449 +#: netbox/dcim/models/devices.py:1454 msgid "virtual device context" msgstr "设备虚拟实例" -#: dcim/models/devices.py:1450 +#: netbox/dcim/models/devices.py:1455 msgid "virtual device contexts" msgstr "设备虚拟实例" -#: dcim/models/devices.py:1482 +#: netbox/dcim/models/devices.py:1487 #, python-brace-format msgid "{ip} is not an IPv{family} address." msgstr "{ip} 不是有效的 IPv{family} 地址" -#: dcim/models/devices.py:1488 +#: netbox/dcim/models/devices.py:1493 msgid "Primary IP address must belong to an interface on the assigned device." msgstr "首选 IP 地址必须属于指定设备上的接口。" -#: dcim/models/mixins.py:15 extras/models/configs.py:41 -#: extras/models/models.py:313 extras/models/models.py:522 -#: extras/models/search.py:48 ipam/models/ip.py:194 +#: netbox/dcim/models/mixins.py:15 netbox/extras/models/configs.py:41 +#: netbox/extras/models/models.py:313 netbox/extras/models/models.py:522 +#: netbox/extras/models/search.py:48 netbox/ipam/models/ip.py:194 msgid "weight" msgstr "重量" -#: dcim/models/mixins.py:22 +#: netbox/dcim/models/mixins.py:22 msgid "weight unit" msgstr "重量单位" -#: dcim/models/mixins.py:51 +#: netbox/dcim/models/mixins.py:51 msgid "Must specify a unit when setting a weight" msgstr "设置重量时必须指定单位" -#: dcim/models/power.py:55 +#: netbox/dcim/models/power.py:55 msgid "power panel" msgstr "电源面板" -#: dcim/models/power.py:56 +#: netbox/dcim/models/power.py:56 msgid "power panels" msgstr "电源面板" -#: dcim/models/power.py:70 +#: netbox/dcim/models/power.py:70 #, python-brace-format msgid "" "Location {location} ({location_site}) is in a different site than {site}" msgstr "位置 {location} ({location_site}) 位于不同的站点 {site}" -#: dcim/models/power.py:108 +#: netbox/dcim/models/power.py:108 msgid "supply" msgstr "供应" -#: dcim/models/power.py:114 +#: netbox/dcim/models/power.py:114 msgid "phase" msgstr "相位" -#: dcim/models/power.py:120 +#: netbox/dcim/models/power.py:120 msgid "voltage" msgstr "电压" -#: dcim/models/power.py:125 +#: netbox/dcim/models/power.py:125 msgid "amperage" msgstr "电流" -#: dcim/models/power.py:130 +#: netbox/dcim/models/power.py:130 msgid "max utilization" msgstr "最大利用率" -#: dcim/models/power.py:133 +#: netbox/dcim/models/power.py:133 msgid "Maximum permissible draw (percentage)" msgstr "最大允许利用率(百分比)" -#: dcim/models/power.py:136 +#: netbox/dcim/models/power.py:136 msgid "available power" msgstr "可用功率" -#: dcim/models/power.py:164 +#: netbox/dcim/models/power.py:164 msgid "power feed" msgstr "电力来源" -#: dcim/models/power.py:165 +#: netbox/dcim/models/power.py:165 msgid "power feeds" msgstr "电力来源" -#: dcim/models/power.py:179 +#: netbox/dcim/models/power.py:179 #, python-brace-format msgid "" "Rack {rack} ({rack_site}) and power panel {powerpanel} ({powerpanel_site}) " "are in different sites." msgstr "机柜{rack} ({rack_site})和电源面板{powerpanel} ({powerpanel_site})位于不同的站点。" -#: dcim/models/power.py:190 +#: netbox/dcim/models/power.py:190 msgid "Voltage cannot be negative for AC supply" msgstr "交流电源的电压不能为负" -#: dcim/models/racks.py:47 +#: netbox/dcim/models/racks.py:47 msgid "width" msgstr "宽度" -#: dcim/models/racks.py:48 +#: netbox/dcim/models/racks.py:48 msgid "Rail-to-rail width" msgstr "机柜间宽度" -#: dcim/models/racks.py:56 +#: netbox/dcim/models/racks.py:56 msgid "Height in rack units" msgstr "以U为单位的机柜高度" -#: dcim/models/racks.py:60 +#: netbox/dcim/models/racks.py:60 msgid "starting unit" msgstr "起始U位" -#: dcim/models/racks.py:62 +#: netbox/dcim/models/racks.py:62 msgid "Starting unit for rack" msgstr "此机柜的起始U位" -#: dcim/models/racks.py:66 +#: netbox/dcim/models/racks.py:66 msgid "descending units" msgstr "U位显示降序" -#: dcim/models/racks.py:67 +#: netbox/dcim/models/racks.py:67 msgid "Units are numbered top-to-bottom" msgstr "U位从上到下编号" -#: dcim/models/racks.py:72 +#: netbox/dcim/models/racks.py:72 msgid "outer width" msgstr "外部宽度" -#: dcim/models/racks.py:75 +#: netbox/dcim/models/racks.py:75 msgid "Outer dimension of rack (width)" msgstr "机柜外部尺寸(宽)" -#: dcim/models/racks.py:78 +#: netbox/dcim/models/racks.py:78 msgid "outer depth" msgstr "外部长度/深度" -#: dcim/models/racks.py:81 +#: netbox/dcim/models/racks.py:81 msgid "Outer dimension of rack (depth)" msgstr "机架外形尺寸(深度)" -#: dcim/models/racks.py:84 +#: netbox/dcim/models/racks.py:84 msgid "outer unit" msgstr "外框尺寸的单位" -#: dcim/models/racks.py:90 +#: netbox/dcim/models/racks.py:90 msgid "mounting depth" msgstr "安装深度" -#: dcim/models/racks.py:94 +#: netbox/dcim/models/racks.py:94 msgid "" "Maximum depth of a mounted device, in millimeters. For four-post racks, this" " is the distance between the front and rear rails." msgstr "已安装设备的最大深度(以毫米为单位)。 对于四柱机架,这是前导轨和后导轨之间的距离。" -#: dcim/models/racks.py:102 +#: netbox/dcim/models/racks.py:102 msgid "max weight" msgstr "最大承重" -#: dcim/models/racks.py:105 +#: netbox/dcim/models/racks.py:105 msgid "Maximum load capacity for the rack" msgstr "机柜最大承重" -#: dcim/models/racks.py:125 dcim/models/racks.py:252 +#: netbox/dcim/models/racks.py:125 netbox/dcim/models/racks.py:252 msgid "form factor" msgstr "外形规格" -#: dcim/models/racks.py:162 +#: netbox/dcim/models/racks.py:162 msgid "rack type" msgstr "机架类型" -#: dcim/models/racks.py:163 +#: netbox/dcim/models/racks.py:163 msgid "rack types" msgstr "机架类型" -#: dcim/models/racks.py:180 dcim/models/racks.py:379 +#: netbox/dcim/models/racks.py:180 netbox/dcim/models/racks.py:379 msgid "Must specify a unit when setting an outer width/depth" msgstr "设置外部宽度/深度时必须指定单位" -#: dcim/models/racks.py:184 dcim/models/racks.py:383 +#: netbox/dcim/models/racks.py:184 netbox/dcim/models/racks.py:383 msgid "Must specify a unit when setting a maximum weight" msgstr "设置最大承重时必须指定单位" -#: dcim/models/racks.py:230 +#: netbox/dcim/models/racks.py:230 msgid "rack role" msgstr "机柜角色" -#: dcim/models/racks.py:231 +#: netbox/dcim/models/racks.py:231 msgid "rack roles" msgstr "机柜角色" -#: dcim/models/racks.py:274 +#: netbox/dcim/models/racks.py:274 msgid "facility ID" msgstr "标识符ID" -#: dcim/models/racks.py:275 +#: netbox/dcim/models/racks.py:275 msgid "Locally-assigned identifier" msgstr "本地分配的标识符" -#: dcim/models/racks.py:308 ipam/forms/bulk_import.py:201 -#: ipam/forms/bulk_import.py:266 ipam/forms/bulk_import.py:301 -#: ipam/forms/bulk_import.py:459 virtualization/forms/bulk_import.py:112 +#: 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 msgid "Functional role" msgstr "功能角色" -#: dcim/models/racks.py:321 +#: netbox/dcim/models/racks.py:321 msgid "A unique tag used to identify this rack" msgstr "用于识别该机柜的唯一标识" -#: dcim/models/racks.py:359 +#: netbox/dcim/models/racks.py:359 msgid "rack" msgstr "机柜" -#: dcim/models/racks.py:360 +#: netbox/dcim/models/racks.py:360 msgid "racks" msgstr "机柜" -#: dcim/models/racks.py:375 +#: netbox/dcim/models/racks.py:375 #, python-brace-format msgid "Assigned location must belong to parent site ({site})." msgstr "指定的位置必须属于父站点({site})。" -#: dcim/models/racks.py:393 +#: netbox/dcim/models/racks.py:393 #, python-brace-format msgid "" "Rack must be at least {min_height}U tall to house currently installed " "devices." msgstr "机柜必须有至少{min_height}U高,才可以容纳当前安装的设备。" -#: dcim/models/racks.py:400 +#: netbox/dcim/models/racks.py:400 #, python-brace-format msgid "" "Rack unit numbering must begin at {position} or less to house currently " "installed devices." msgstr "机柜单元编号必须从{position}或以上开始,才能容纳当前安装的设备。" -#: dcim/models/racks.py:408 +#: netbox/dcim/models/racks.py:408 #, python-brace-format msgid "Location must be from the same site, {site}." msgstr "位置必须来自同一站点 {site}。" -#: dcim/models/racks.py:670 +#: netbox/dcim/models/racks.py:670 msgid "units" msgstr "位置" -#: dcim/models/racks.py:696 +#: netbox/dcim/models/racks.py:696 msgid "rack reservation" msgstr "机柜预留" -#: dcim/models/racks.py:697 +#: netbox/dcim/models/racks.py:697 msgid "rack reservations" msgstr "机柜预留" -#: dcim/models/racks.py:714 +#: netbox/dcim/models/racks.py:714 #, python-brace-format msgid "Invalid unit(s) for {height}U rack: {unit_list}" msgstr "{height}U机柜中无效的U位: {unit_list}" -#: dcim/models/racks.py:727 +#: netbox/dcim/models/racks.py:727 #, python-brace-format msgid "The following units have already been reserved: {unit_list}" msgstr "以下U位已被保留:{unit_list}" -#: dcim/models/sites.py:49 +#: netbox/dcim/models/sites.py:49 msgid "A top-level region with this name already exists." msgstr "具有此名称的顶级区域已存在。" -#: dcim/models/sites.py:59 +#: netbox/dcim/models/sites.py:59 msgid "A top-level region with this slug already exists." msgstr "具有此缩写的顶级区域已经存在。" -#: dcim/models/sites.py:62 +#: netbox/dcim/models/sites.py:62 msgid "region" msgstr "地区" -#: dcim/models/sites.py:63 +#: netbox/dcim/models/sites.py:63 msgid "regions" msgstr "地区" -#: dcim/models/sites.py:102 +#: netbox/dcim/models/sites.py:102 msgid "A top-level site group with this name already exists." msgstr "具有此名称的顶级站点组已存在。" -#: dcim/models/sites.py:112 +#: netbox/dcim/models/sites.py:112 msgid "A top-level site group with this slug already exists." msgstr "具有此缩写的顶级站点组已存在。" -#: dcim/models/sites.py:115 +#: netbox/dcim/models/sites.py:115 msgid "site group" msgstr "站点组" -#: dcim/models/sites.py:116 +#: netbox/dcim/models/sites.py:116 msgid "site groups" msgstr "站点组" -#: dcim/models/sites.py:141 +#: netbox/dcim/models/sites.py:141 msgid "Full name of the site" msgstr "站点全名" -#: dcim/models/sites.py:181 dcim/models/sites.py:279 +#: netbox/dcim/models/sites.py:181 netbox/dcim/models/sites.py:279 msgid "facility" msgstr "设施" -#: dcim/models/sites.py:184 dcim/models/sites.py:282 +#: netbox/dcim/models/sites.py:184 netbox/dcim/models/sites.py:282 msgid "Local facility ID or description" msgstr "本地设施 ID 或描述" -#: dcim/models/sites.py:195 +#: netbox/dcim/models/sites.py:195 msgid "physical address" msgstr "物理地址" -#: dcim/models/sites.py:198 +#: netbox/dcim/models/sites.py:198 msgid "Physical location of the building" msgstr "机房的实体位置" -#: dcim/models/sites.py:201 +#: netbox/dcim/models/sites.py:201 msgid "shipping address" msgstr "快递地址" -#: dcim/models/sites.py:204 +#: netbox/dcim/models/sites.py:204 msgid "If different from the physical address" msgstr "若与实体地址不同" -#: dcim/models/sites.py:238 +#: netbox/dcim/models/sites.py:238 msgid "site" msgstr "站点" -#: dcim/models/sites.py:239 +#: netbox/dcim/models/sites.py:239 msgid "sites" msgstr "站点" -#: dcim/models/sites.py:309 +#: netbox/dcim/models/sites.py:309 msgid "A location with this name already exists within the specified site." msgstr "指定的站点中已存在此名称的位置。" -#: dcim/models/sites.py:319 +#: netbox/dcim/models/sites.py:319 msgid "A location with this slug already exists within the specified site." msgstr "指定的站点中已存在此缩写的位置。" -#: dcim/models/sites.py:322 +#: netbox/dcim/models/sites.py:322 msgid "location" msgstr "位置" -#: dcim/models/sites.py:323 +#: netbox/dcim/models/sites.py:323 msgid "locations" msgstr "位置" -#: dcim/models/sites.py:337 +#: netbox/dcim/models/sites.py:337 #, python-brace-format msgid "Parent location ({parent}) must belong to the same site ({site})." msgstr "父位置({parent})必须属于同一站点({site})。" -#: dcim/tables/cables.py:55 +#: netbox/dcim/tables/cables.py:55 msgid "Termination A" msgstr "本端A" -#: dcim/tables/cables.py:60 +#: netbox/dcim/tables/cables.py:60 msgid "Termination B" msgstr "对端B" -#: dcim/tables/cables.py:66 wireless/tables/wirelesslink.py:23 +#: netbox/dcim/tables/cables.py:66 netbox/wireless/tables/wirelesslink.py:23 msgid "Device A" msgstr "设备A" -#: dcim/tables/cables.py:72 wireless/tables/wirelesslink.py:32 +#: netbox/dcim/tables/cables.py:72 netbox/wireless/tables/wirelesslink.py:32 msgid "Device B" msgstr "设备B" -#: dcim/tables/cables.py:78 +#: netbox/dcim/tables/cables.py:78 msgid "Location A" msgstr "位置A" -#: dcim/tables/cables.py:84 +#: netbox/dcim/tables/cables.py:84 msgid "Location B" msgstr "位置B" -#: dcim/tables/cables.py:90 +#: netbox/dcim/tables/cables.py:90 msgid "Rack A" msgstr "机柜A" -#: dcim/tables/cables.py:96 +#: netbox/dcim/tables/cables.py:96 msgid "Rack B" msgstr "机柜B" -#: dcim/tables/cables.py:102 +#: netbox/dcim/tables/cables.py:102 msgid "Site A" msgstr "站点A" -#: dcim/tables/cables.py:108 +#: netbox/dcim/tables/cables.py:108 msgid "Site B" msgstr "站点B" -#: dcim/tables/connections.py:31 dcim/tables/connections.py:50 -#: dcim/tables/connections.py:71 -#: templates/dcim/inc/connection_endpoints.html:16 +#: netbox/dcim/tables/connections.py:31 netbox/dcim/tables/connections.py:50 +#: netbox/dcim/tables/connections.py:71 +#: netbox/templates/dcim/inc/connection_endpoints.html:16 msgid "Reachable" msgstr "可达性" -#: dcim/tables/devices.py:58 dcim/tables/devices.py:106 -#: dcim/tables/racks.py:150 dcim/tables/sites.py:105 dcim/tables/sites.py:148 -#: extras/tables/tables.py:545 netbox/navigation/menu.py:69 -#: netbox/navigation/menu.py:73 netbox/navigation/menu.py:75 -#: virtualization/forms/model_forms.py:122 -#: virtualization/tables/clusters.py:83 virtualization/views.py:206 +#: 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/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 msgid "Devices" msgstr "设备" -#: dcim/tables/devices.py:63 dcim/tables/devices.py:111 -#: virtualization/tables/clusters.py:88 +#: netbox/dcim/tables/devices.py:63 netbox/dcim/tables/devices.py:111 +#: netbox/virtualization/tables/clusters.py:88 msgid "VMs" msgstr "VMs" -#: dcim/tables/devices.py:100 dcim/tables/devices.py:216 -#: extras/forms/model_forms.py:630 templates/dcim/device.html:112 -#: templates/dcim/device/render_config.html:11 -#: templates/dcim/device/render_config.html:14 -#: templates/dcim/devicerole.html:44 templates/dcim/platform.html:41 -#: templates/extras/configtemplate.html:10 -#: templates/virtualization/virtualmachine.html:48 -#: templates/virtualization/virtualmachine/render_config.html:11 -#: templates/virtualization/virtualmachine/render_config.html:14 -#: virtualization/tables/virtualmachines.py:107 +#: netbox/dcim/tables/devices.py:100 netbox/dcim/tables/devices.py:216 +#: 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/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 msgid "Config Template" msgstr "配置模版" -#: dcim/tables/devices.py:150 templates/dcim/sitegroup.html:26 +#: netbox/dcim/tables/devices.py:150 netbox/templates/dcim/sitegroup.html:26 msgid "Site Group" msgstr "站点组" -#: dcim/tables/devices.py:187 dcim/tables/devices.py:1068 -#: ipam/forms/bulk_import.py:503 ipam/forms/model_forms.py:306 -#: ipam/forms/model_forms.py:315 ipam/tables/ip.py:356 ipam/tables/ip.py:423 -#: ipam/tables/ip.py:446 templates/ipam/ipaddress.html:11 -#: virtualization/tables/virtualmachines.py:95 +#: 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/templates/ipam/ipaddress.html:11 +#: netbox/virtualization/tables/virtualmachines.py:95 msgid "IP Address" msgstr "IP地址" -#: dcim/tables/devices.py:191 dcim/tables/devices.py:1072 -#: virtualization/tables/virtualmachines.py:86 +#: netbox/dcim/tables/devices.py:191 netbox/dcim/tables/devices.py:1072 +#: netbox/virtualization/tables/virtualmachines.py:86 msgid "IPv4 Address" msgstr "IPv4 地址" -#: dcim/tables/devices.py:195 dcim/tables/devices.py:1076 -#: virtualization/tables/virtualmachines.py:90 +#: netbox/dcim/tables/devices.py:195 netbox/dcim/tables/devices.py:1076 +#: netbox/virtualization/tables/virtualmachines.py:90 msgid "IPv6 Address" msgstr "IPv6 地址" -#: dcim/tables/devices.py:210 +#: netbox/dcim/tables/devices.py:210 msgid "VC Position" msgstr "堆叠位置" -#: dcim/tables/devices.py:213 +#: netbox/dcim/tables/devices.py:213 msgid "VC Priority" msgstr "堆叠优先级" -#: dcim/tables/devices.py:220 templates/dcim/device_edit.html:38 -#: templates/dcim/devicebay_populate.html:16 +#: netbox/dcim/tables/devices.py:220 netbox/templates/dcim/device_edit.html:38 +#: netbox/templates/dcim/devicebay_populate.html:16 msgid "Parent Device" msgstr "父设备" -#: dcim/tables/devices.py:225 +#: netbox/dcim/tables/devices.py:225 msgid "Position (Device Bay)" msgstr "位置(设备托架)" -#: dcim/tables/devices.py:234 +#: netbox/dcim/tables/devices.py:234 msgid "Console ports" msgstr "Console 端口" -#: dcim/tables/devices.py:237 +#: netbox/dcim/tables/devices.py:237 msgid "Console server ports" msgstr "Console 服务器端口" -#: dcim/tables/devices.py:240 +#: netbox/dcim/tables/devices.py:240 msgid "Power ports" msgstr "电源接口" -#: dcim/tables/devices.py:243 +#: netbox/dcim/tables/devices.py:243 msgid "Power outlets" msgstr "电源插座" -#: dcim/tables/devices.py:246 dcim/tables/devices.py:1081 -#: dcim/tables/devicetypes.py:128 dcim/views.py:1042 dcim/views.py:1281 -#: dcim/views.py:1977 netbox/navigation/menu.py:94 -#: netbox/navigation/menu.py:250 templates/dcim/device/base.html:37 -#: templates/dcim/device_list.html:43 templates/dcim/devicetype/base.html:34 -#: templates/dcim/inc/moduletype_buttons.html:25 templates/dcim/module.html:34 -#: templates/dcim/virtualdevicecontext.html:61 -#: templates/dcim/virtualdevicecontext.html:81 -#: templates/virtualization/virtualmachine/base.html:27 -#: templates/virtualization/virtualmachine_list.html:14 -#: virtualization/tables/virtualmachines.py:101 virtualization/views.py:366 -#: wireless/tables/wirelesslan.py:55 +#: 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/templates/dcim/device/base.html:37 +#: netbox/templates/dcim/device_list.html:43 +#: netbox/templates/dcim/devicetype/base.html:34 +#: netbox/templates/dcim/inc/moduletype_buttons.html:25 +#: netbox/templates/dcim/module.html:34 +#: netbox/templates/dcim/virtualdevicecontext.html:61 +#: netbox/templates/dcim/virtualdevicecontext.html:81 +#: netbox/templates/virtualization/virtualmachine/base.html:27 +#: netbox/templates/virtualization/virtualmachine_list.html:14 +#: netbox/virtualization/tables/virtualmachines.py:101 +#: netbox/virtualization/views.py:364 netbox/wireless/tables/wirelesslan.py:55 msgid "Interfaces" msgstr "接口" -#: dcim/tables/devices.py:249 +#: netbox/dcim/tables/devices.py:249 msgid "Front ports" msgstr "前置端口" -#: dcim/tables/devices.py:255 +#: netbox/dcim/tables/devices.py:255 msgid "Device bays" msgstr "设备托架" -#: dcim/tables/devices.py:258 +#: netbox/dcim/tables/devices.py:258 msgid "Module bays" msgstr "设备板卡插槽" -#: dcim/tables/devices.py:261 +#: netbox/dcim/tables/devices.py:261 msgid "Inventory items" msgstr "库存项" -#: dcim/tables/devices.py:305 dcim/tables/modules.py:56 -#: templates/dcim/modulebay.html:17 +#: netbox/dcim/tables/devices.py:305 netbox/dcim/tables/modules.py:56 +#: netbox/templates/dcim/modulebay.html:17 msgid "Module Bay" msgstr "设备板卡插槽" -#: dcim/tables/devices.py:318 dcim/tables/devicetypes.py:47 -#: dcim/tables/devicetypes.py:143 dcim/views.py:1117 dcim/views.py:2075 -#: netbox/navigation/menu.py:103 templates/dcim/device/base.html:52 -#: templates/dcim/device_list.html:71 templates/dcim/devicetype/base.html:49 -#: templates/dcim/inc/panels/inventory_items.html:6 -#: templates/dcim/inventoryitemrole.html:32 +#: netbox/dcim/tables/devices.py:318 netbox/dcim/tables/devicetypes.py:47 +#: netbox/dcim/tables/devicetypes.py:143 netbox/dcim/views.py:1115 +#: netbox/dcim/views.py:2073 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 +#: netbox/templates/dcim/inc/panels/inventory_items.html:6 +#: netbox/templates/dcim/inventoryitemrole.html:32 msgid "Inventory Items" msgstr "库存项目" -#: dcim/tables/devices.py:333 +#: netbox/dcim/tables/devices.py:333 msgid "Cable Color" msgstr "线缆颜色" -#: dcim/tables/devices.py:339 +#: netbox/dcim/tables/devices.py:339 msgid "Link Peers" msgstr "链接对等体" -#: dcim/tables/devices.py:342 +#: netbox/dcim/tables/devices.py:342 msgid "Mark Connected" msgstr "标记已连接" -#: dcim/tables/devices.py:461 +#: netbox/dcim/tables/devices.py:461 msgid "Maximum draw (W)" msgstr "最大功率(W)" -#: dcim/tables/devices.py:464 +#: netbox/dcim/tables/devices.py:464 msgid "Allocated draw (W)" msgstr "分配功率(W)" -#: dcim/tables/devices.py:558 ipam/forms/model_forms.py:701 -#: ipam/tables/fhrp.py:28 ipam/views.py:596 ipam/views.py:696 -#: netbox/navigation/menu.py:158 netbox/navigation/menu.py:160 -#: templates/dcim/interface.html:339 templates/ipam/ipaddress_bulk_add.html:15 -#: templates/ipam/service.html:40 templates/virtualization/vminterface.html:85 -#: vpn/tables/tunnels.py:98 +#: netbox/dcim/tables/devices.py:558 netbox/ipam/forms/model_forms.py: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/templates/ipam/ipaddress_bulk_add.html:15 +#: netbox/templates/ipam/service.html:40 +#: netbox/templates/virtualization/vminterface.html:85 +#: netbox/vpn/tables/tunnels.py:98 msgid "IP Addresses" msgstr "IP地址" -#: dcim/tables/devices.py:564 netbox/navigation/menu.py:202 -#: templates/ipam/inc/panels/fhrp_groups.html:6 +#: netbox/dcim/tables/devices.py:564 netbox/netbox/navigation/menu.py:202 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:6 msgid "FHRP Groups" msgstr "网关冗余协议组" -#: dcim/tables/devices.py:576 templates/dcim/interface.html:89 -#: templates/virtualization/vminterface.html:67 templates/vpn/tunnel.html:18 -#: templates/vpn/tunneltermination.html:13 vpn/forms/bulk_edit.py:76 -#: vpn/forms/bulk_import.py:76 vpn/forms/filtersets.py:42 -#: vpn/forms/filtersets.py:82 vpn/forms/model_forms.py:60 -#: vpn/forms/model_forms.py:145 vpn/tables/tunnels.py:78 +#: netbox/dcim/tables/devices.py:576 netbox/templates/dcim/interface.html:89 +#: netbox/templates/virtualization/vminterface.html:67 +#: netbox/templates/vpn/tunnel.html:18 +#: netbox/templates/vpn/tunneltermination.html:13 +#: netbox/vpn/forms/bulk_edit.py:76 netbox/vpn/forms/bulk_import.py:76 +#: netbox/vpn/forms/filtersets.py:42 netbox/vpn/forms/filtersets.py:82 +#: netbox/vpn/forms/model_forms.py:60 netbox/vpn/forms/model_forms.py:145 +#: netbox/vpn/tables/tunnels.py:78 msgid "Tunnel" msgstr "隧道" -#: dcim/tables/devices.py:604 dcim/tables/devicetypes.py:227 -#: templates/dcim/interface.html:65 +#: netbox/dcim/tables/devices.py:604 netbox/dcim/tables/devicetypes.py:227 +#: netbox/templates/dcim/interface.html:65 msgid "Management Only" msgstr "仅限管理" -#: dcim/tables/devices.py:623 +#: netbox/dcim/tables/devices.py:623 msgid "VDCs" msgstr "VDCs" -#: dcim/tables/devices.py:873 templates/dcim/modulebay.html:53 +#: netbox/dcim/tables/devices.py:873 netbox/templates/dcim/modulebay.html:53 msgid "Installed Module" msgstr "已安装的模块" -#: dcim/tables/devices.py:876 +#: netbox/dcim/tables/devices.py:876 msgid "Module Serial" msgstr "模块状态" -#: dcim/tables/devices.py:880 +#: netbox/dcim/tables/devices.py:880 msgid "Module Asset Tag" msgstr "模块资产标签" -#: dcim/tables/devices.py:889 +#: netbox/dcim/tables/devices.py:889 msgid "Module Status" msgstr "模块状态" -#: dcim/tables/devices.py:944 dcim/tables/devicetypes.py:312 -#: templates/dcim/inventoryitem.html:40 +#: netbox/dcim/tables/devices.py:944 netbox/dcim/tables/devicetypes.py:312 +#: netbox/templates/dcim/inventoryitem.html:40 msgid "Component" msgstr "组件" -#: dcim/tables/devices.py:1000 +#: netbox/dcim/tables/devices.py:1000 msgid "Items" msgstr "项目" -#: dcim/tables/devicetypes.py:37 netbox/navigation/menu.py:84 -#: netbox/navigation/menu.py:86 +#: netbox/dcim/tables/devicetypes.py:37 netbox/netbox/navigation/menu.py:84 +#: netbox/netbox/navigation/menu.py:86 msgid "Device Types" msgstr "设备型号" -#: dcim/tables/devicetypes.py:42 netbox/navigation/menu.py:87 +#: netbox/dcim/tables/devicetypes.py:42 netbox/netbox/navigation/menu.py:87 msgid "Module Types" msgstr "设备配件类型" -#: dcim/tables/devicetypes.py:52 extras/forms/filtersets.py:371 -#: extras/forms/model_forms.py:537 extras/tables/tables.py:540 -#: netbox/navigation/menu.py:78 +#: 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/netbox/navigation/menu.py:78 msgid "Platforms" msgstr "操作系统" -#: dcim/tables/devicetypes.py:84 templates/dcim/devicetype.html:29 +#: netbox/dcim/tables/devicetypes.py:84 +#: netbox/templates/dcim/devicetype.html:29 msgid "Default Platform" msgstr "默认系统平台" -#: dcim/tables/devicetypes.py:88 templates/dcim/devicetype.html:45 +#: netbox/dcim/tables/devicetypes.py:88 +#: netbox/templates/dcim/devicetype.html:45 msgid "Full Depth" msgstr "全尺寸" -#: dcim/tables/devicetypes.py:98 +#: netbox/dcim/tables/devicetypes.py:98 msgid "U Height" msgstr "U高度" -#: dcim/tables/devicetypes.py:113 dcim/tables/modules.py:26 -#: dcim/tables/racks.py:89 +#: netbox/dcim/tables/devicetypes.py:113 netbox/dcim/tables/modules.py:26 +#: netbox/dcim/tables/racks.py:89 msgid "Instances" msgstr "实例" -#: dcim/tables/devicetypes.py:116 dcim/views.py:982 dcim/views.py:1221 -#: dcim/views.py:1913 netbox/navigation/menu.py:97 -#: templates/dcim/device/base.html:25 templates/dcim/device_list.html:15 -#: templates/dcim/devicetype/base.html:22 -#: templates/dcim/inc/moduletype_buttons.html:13 templates/dcim/module.html:22 +#: netbox/dcim/tables/devicetypes.py:116 netbox/dcim/views.py:980 +#: netbox/dcim/views.py:1219 netbox/dcim/views.py:1911 +#: netbox/netbox/navigation/menu.py:97 +#: netbox/templates/dcim/device/base.html:25 +#: netbox/templates/dcim/device_list.html:15 +#: netbox/templates/dcim/devicetype/base.html:22 +#: netbox/templates/dcim/inc/moduletype_buttons.html:13 +#: netbox/templates/dcim/module.html:22 msgid "Console Ports" msgstr "Console口" -#: dcim/tables/devicetypes.py:119 dcim/views.py:997 dcim/views.py:1236 -#: dcim/views.py:1929 netbox/navigation/menu.py:98 -#: templates/dcim/device/base.html:28 templates/dcim/device_list.html:22 -#: templates/dcim/devicetype/base.html:25 -#: templates/dcim/inc/moduletype_buttons.html:16 templates/dcim/module.html:25 +#: netbox/dcim/tables/devicetypes.py:119 netbox/dcim/views.py:995 +#: netbox/dcim/views.py:1234 netbox/dcim/views.py:1927 +#: netbox/netbox/navigation/menu.py:98 +#: netbox/templates/dcim/device/base.html:28 +#: netbox/templates/dcim/device_list.html:22 +#: netbox/templates/dcim/devicetype/base.html:25 +#: netbox/templates/dcim/inc/moduletype_buttons.html:16 +#: netbox/templates/dcim/module.html:25 msgid "Console Server Ports" msgstr "Console 服务端口" -#: dcim/tables/devicetypes.py:122 dcim/views.py:1012 dcim/views.py:1251 -#: dcim/views.py:1945 netbox/navigation/menu.py:99 -#: templates/dcim/device/base.html:31 templates/dcim/device_list.html:29 -#: templates/dcim/devicetype/base.html:28 -#: templates/dcim/inc/moduletype_buttons.html:19 templates/dcim/module.html:28 +#: netbox/dcim/tables/devicetypes.py:122 netbox/dcim/views.py:1010 +#: netbox/dcim/views.py:1249 netbox/dcim/views.py:1943 +#: netbox/netbox/navigation/menu.py:99 +#: netbox/templates/dcim/device/base.html:31 +#: netbox/templates/dcim/device_list.html:29 +#: netbox/templates/dcim/devicetype/base.html:28 +#: netbox/templates/dcim/inc/moduletype_buttons.html:19 +#: netbox/templates/dcim/module.html:28 msgid "Power Ports" msgstr "电源接口" -#: dcim/tables/devicetypes.py:125 dcim/views.py:1027 dcim/views.py:1266 -#: dcim/views.py:1961 netbox/navigation/menu.py:100 -#: templates/dcim/device/base.html:34 templates/dcim/device_list.html:36 -#: templates/dcim/devicetype/base.html:31 -#: templates/dcim/inc/moduletype_buttons.html:22 templates/dcim/module.html:31 +#: netbox/dcim/tables/devicetypes.py:125 netbox/dcim/views.py:1025 +#: netbox/dcim/views.py:1264 netbox/dcim/views.py:1959 +#: netbox/netbox/navigation/menu.py:100 +#: netbox/templates/dcim/device/base.html:34 +#: netbox/templates/dcim/device_list.html:36 +#: netbox/templates/dcim/devicetype/base.html:31 +#: netbox/templates/dcim/inc/moduletype_buttons.html:22 +#: netbox/templates/dcim/module.html:31 msgid "Power Outlets" msgstr "PDU" -#: dcim/tables/devicetypes.py:131 dcim/views.py:1057 dcim/views.py:1296 -#: dcim/views.py:1999 netbox/navigation/menu.py:95 -#: templates/dcim/device/base.html:40 templates/dcim/devicetype/base.html:37 -#: templates/dcim/inc/moduletype_buttons.html:28 templates/dcim/module.html:37 +#: netbox/dcim/tables/devicetypes.py:131 netbox/dcim/views.py:1055 +#: netbox/dcim/views.py:1294 netbox/dcim/views.py:1997 +#: netbox/netbox/navigation/menu.py:95 +#: netbox/templates/dcim/device/base.html:40 +#: netbox/templates/dcim/devicetype/base.html:37 +#: netbox/templates/dcim/inc/moduletype_buttons.html:28 +#: netbox/templates/dcim/module.html:37 msgid "Front Ports" msgstr "前置端口" -#: dcim/tables/devicetypes.py:134 dcim/views.py:1072 dcim/views.py:1311 -#: dcim/views.py:2015 netbox/navigation/menu.py:96 -#: templates/dcim/device/base.html:43 templates/dcim/device_list.html:50 -#: templates/dcim/devicetype/base.html:40 -#: templates/dcim/inc/moduletype_buttons.html:31 templates/dcim/module.html:40 +#: netbox/dcim/tables/devicetypes.py:134 netbox/dcim/views.py:1070 +#: netbox/dcim/views.py:1309 netbox/dcim/views.py:2013 +#: netbox/netbox/navigation/menu.py:96 +#: netbox/templates/dcim/device/base.html:43 +#: netbox/templates/dcim/device_list.html:50 +#: netbox/templates/dcim/devicetype/base.html:40 +#: netbox/templates/dcim/inc/moduletype_buttons.html:31 +#: netbox/templates/dcim/module.html:40 msgid "Rear Ports" msgstr "后置端口" -#: dcim/tables/devicetypes.py:137 dcim/views.py:1102 dcim/views.py:2055 -#: netbox/navigation/menu.py:102 templates/dcim/device/base.html:49 -#: templates/dcim/device_list.html:57 templates/dcim/devicetype/base.html:46 +#: netbox/dcim/tables/devicetypes.py:137 netbox/dcim/views.py:1100 +#: netbox/dcim/views.py:2053 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 "机柜托架" -#: dcim/tables/devicetypes.py:140 dcim/views.py:1087 dcim/views.py:1326 -#: dcim/views.py:2035 netbox/navigation/menu.py:101 -#: templates/dcim/device/base.html:46 templates/dcim/device_list.html:64 -#: templates/dcim/devicetype/base.html:43 -#: templates/dcim/inc/moduletype_buttons.html:34 templates/dcim/module.html:43 +#: netbox/dcim/tables/devicetypes.py:140 netbox/dcim/views.py:1085 +#: netbox/dcim/views.py:1324 netbox/dcim/views.py:2033 +#: netbox/netbox/navigation/menu.py:101 +#: netbox/templates/dcim/device/base.html:46 +#: netbox/templates/dcim/device_list.html:64 +#: netbox/templates/dcim/devicetype/base.html:43 +#: netbox/templates/dcim/inc/moduletype_buttons.html:34 +#: netbox/templates/dcim/module.html:43 msgid "Module Bays" msgstr "设备板卡插槽" -#: dcim/tables/power.py:36 netbox/navigation/menu.py:297 -#: templates/dcim/powerpanel.html:51 +#: netbox/dcim/tables/power.py:36 netbox/netbox/navigation/menu.py:297 +#: netbox/templates/dcim/powerpanel.html:51 msgid "Power Feeds" msgstr "电力来源" -#: dcim/tables/power.py:80 templates/dcim/powerfeed.html:99 +#: netbox/dcim/tables/power.py:80 netbox/templates/dcim/powerfeed.html:99 msgid "Max Utilization" msgstr "最大利用率" -#: dcim/tables/power.py:84 +#: netbox/dcim/tables/power.py:84 msgid "Available Power (VA)" msgstr "可用功率 (VA)" -#: dcim/tables/racks.py:30 dcim/tables/sites.py:143 -#: netbox/navigation/menu.py:43 netbox/navigation/menu.py:47 -#: netbox/navigation/menu.py:49 +#: netbox/dcim/tables/racks.py:30 netbox/dcim/tables/sites.py:143 +#: netbox/netbox/navigation/menu.py:43 netbox/netbox/navigation/menu.py:47 +#: netbox/netbox/navigation/menu.py:49 msgid "Racks" msgstr "机柜" -#: dcim/tables/racks.py:63 dcim/tables/racks.py:142 -#: templates/dcim/device.html:318 -#: templates/dcim/inc/panels/racktype_dimensions.html:14 +#: netbox/dcim/tables/racks.py:63 netbox/dcim/tables/racks.py:142 +#: netbox/templates/dcim/device.html:318 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:14 msgid "Height" msgstr "高度" -#: dcim/tables/racks.py:67 dcim/tables/racks.py:165 -#: templates/dcim/inc/panels/racktype_dimensions.html:18 +#: netbox/dcim/tables/racks.py:67 netbox/dcim/tables/racks.py:165 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:18 msgid "Outer Width" msgstr "外部宽度" -#: dcim/tables/racks.py:71 dcim/tables/racks.py:169 -#: templates/dcim/inc/panels/racktype_dimensions.html:28 +#: netbox/dcim/tables/racks.py:71 netbox/dcim/tables/racks.py:169 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:28 msgid "Outer Depth" msgstr "外部长度/深度" -#: dcim/tables/racks.py:79 dcim/tables/racks.py:177 +#: netbox/dcim/tables/racks.py:79 netbox/dcim/tables/racks.py:177 msgid "Max Weight" msgstr "最大承重" -#: dcim/tables/racks.py:154 +#: netbox/dcim/tables/racks.py:154 msgid "Space" msgstr "空间" -#: dcim/tables/sites.py:30 dcim/tables/sites.py:57 -#: extras/forms/filtersets.py:351 extras/forms/model_forms.py:517 -#: ipam/forms/bulk_edit.py:131 ipam/forms/model_forms.py:153 -#: ipam/tables/asn.py:66 netbox/navigation/menu.py:15 -#: netbox/navigation/menu.py:17 +#: netbox/dcim/tables/sites.py:30 netbox/dcim/tables/sites.py:57 +#: netbox/extras/forms/filtersets.py: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/netbox/navigation/menu.py:15 netbox/netbox/navigation/menu.py:17 msgid "Sites" msgstr "站点" -#: dcim/tests/test_api.py:47 +#: netbox/dcim/tests/test_api.py:47 msgid "Test case must set peer_termination_type" msgstr "测试用例必须设置对端端点类型" -#: dcim/views.py:140 +#: netbox/dcim/views.py:138 #, python-brace-format msgid "Disconnected {count} {type}" msgstr "已断开连接{count} {type}" -#: dcim/views.py:740 netbox/navigation/menu.py:51 +#: netbox/dcim/views.py:738 netbox/netbox/navigation/menu.py:51 msgid "Reservations" msgstr "机柜预留" -#: dcim/views.py:759 templates/dcim/location.html:90 -#: templates/dcim/site.html:140 +#: netbox/dcim/views.py:757 netbox/templates/dcim/location.html:90 +#: netbox/templates/dcim/site.html:140 msgid "Non-Racked Devices" msgstr "未上架设备" -#: dcim/views.py:2088 extras/forms/model_forms.py:577 -#: templates/extras/configcontext.html:10 -#: virtualization/forms/model_forms.py:225 virtualization/views.py:407 +#: netbox/dcim/views.py:2086 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 msgid "Config Context" msgstr "配置实例" -#: dcim/views.py:2098 virtualization/views.py:417 +#: netbox/dcim/views.py:2096 netbox/virtualization/views.py:415 msgid "Render Config" msgstr "提交配置" -#: dcim/views.py:2131 virtualization/views.py:450 +#: netbox/dcim/views.py:2131 netbox/virtualization/views.py:450 #, python-brace-format msgid "An error occurred while rendering the template: {error}" msgstr "渲染模板时出错: {error}" -#: dcim/views.py:2149 extras/tables/tables.py:550 -#: netbox/navigation/menu.py:247 netbox/navigation/menu.py:249 -#: virtualization/views.py:180 +#: 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 msgid "Virtual Machines" msgstr "虚拟机" -#: dcim/views.py:2897 +#: netbox/dcim/views.py:2907 #, python-brace-format msgid "Installed device {device} in bay {device_bay}." msgstr "已安装的设备 {device} 在海湾里 {device_bay}。" -#: dcim/views.py:2938 +#: netbox/dcim/views.py:2948 #, python-brace-format msgid "Removed device {device} from bay {device_bay}." msgstr "已移除的设备 {device} 来自海湾 {device_bay}。" -#: dcim/views.py:3044 ipam/tables/ip.py:234 +#: netbox/dcim/views.py:3054 netbox/ipam/tables/ip.py:234 msgid "Children" msgstr "子网" -#: dcim/views.py:3510 +#: netbox/dcim/views.py:3520 #, python-brace-format msgid "Added member {device}" msgstr "已添加成员 {device}" -#: dcim/views.py:3557 +#: netbox/dcim/views.py:3567 #, python-brace-format msgid "Unable to remove master device {device} from the virtual chassis." msgstr "无法移除主设备 {device} 来自虚拟机箱。" -#: dcim/views.py:3570 +#: netbox/dcim/views.py:3580 #, python-brace-format msgid "Removed {device} from virtual chassis {chassis}" msgstr "已移除 {device} 来自虚拟机箱 {chassis}" -#: extras/api/customfields.py:89 +#: netbox/extras/api/customfields.py:89 #, python-brace-format msgid "Unknown related object(s): {name}" msgstr "未知的相关对象: {name}" -#: extras/api/serializers_/customfields.py:73 +#: netbox/extras/api/serializers_/customfields.py:73 msgid "Changing the type of custom fields is not supported." msgstr "不支持更改自定义字段的类型。" -#: extras/api/serializers_/scripts.py:70 extras/api/serializers_/scripts.py:75 +#: netbox/extras/api/serializers_/scripts.py:70 +#: netbox/extras/api/serializers_/scripts.py:75 msgid "Scheduling is not enabled for this script." msgstr "脚本计划未启用。" -#: extras/choices.py:30 extras/forms/misc.py:14 +#: netbox/extras/choices.py:30 netbox/extras/forms/misc.py:14 msgid "Text" msgstr "文本" -#: extras/choices.py:31 +#: netbox/extras/choices.py:31 msgid "Text (long)" msgstr "长文本" -#: extras/choices.py:32 +#: netbox/extras/choices.py:32 msgid "Integer" msgstr "整数" -#: extras/choices.py:33 +#: netbox/extras/choices.py:33 msgid "Decimal" msgstr "十进制" -#: extras/choices.py:34 +#: netbox/extras/choices.py:34 msgid "Boolean (true/false)" msgstr "布尔值(true/false)" -#: extras/choices.py:35 +#: netbox/extras/choices.py:35 msgid "Date" msgstr "日期" -#: extras/choices.py:36 +#: netbox/extras/choices.py:36 msgid "Date & time" msgstr "日期&时间" -#: extras/choices.py:38 +#: netbox/extras/choices.py:38 msgid "JSON" msgstr "JSON" -#: extras/choices.py:39 +#: netbox/extras/choices.py:39 msgid "Selection" msgstr "单选框" -#: extras/choices.py:40 +#: netbox/extras/choices.py:40 msgid "Multiple selection" msgstr "复选框" -#: extras/choices.py:42 +#: netbox/extras/choices.py:42 msgid "Multiple objects" msgstr "多个对象" -#: extras/choices.py:53 netbox/preferences.py:21 -#: templates/extras/customfield.html:78 vpn/choices.py:20 -#: wireless/choices.py:27 +#: netbox/extras/choices.py:53 netbox/netbox/preferences.py:21 +#: netbox/templates/extras/customfield.html:78 netbox/vpn/choices.py:20 +#: netbox/wireless/choices.py:27 msgid "Disabled" msgstr "禁用" -#: extras/choices.py:54 +#: netbox/extras/choices.py:54 msgid "Loose" msgstr "松散匹配" -#: extras/choices.py:55 +#: netbox/extras/choices.py:55 msgid "Exact" msgstr "严格匹配" -#: extras/choices.py:66 +#: netbox/extras/choices.py:66 msgid "Always" msgstr "总是可见" -#: extras/choices.py:67 +#: netbox/extras/choices.py:67 msgid "If set" msgstr "设置才可见" -#: extras/choices.py:68 extras/choices.py:81 +#: netbox/extras/choices.py:68 netbox/extras/choices.py:81 msgid "Hidden" msgstr "隐藏" -#: extras/choices.py:79 +#: netbox/extras/choices.py:79 msgid "Yes" msgstr "是" -#: extras/choices.py:80 +#: netbox/extras/choices.py:80 msgid "No" msgstr "否" -#: extras/choices.py:108 templates/tenancy/contact.html:57 -#: tenancy/forms/bulk_edit.py:118 wireless/forms/model_forms.py:168 +#: 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 msgid "Link" msgstr "链接" -#: extras/choices.py:124 +#: netbox/extras/choices.py:124 msgid "Newest" msgstr "最新排序" -#: extras/choices.py:125 +#: netbox/extras/choices.py:125 msgid "Oldest" msgstr "最久排序" -#: extras/choices.py:126 +#: netbox/extras/choices.py:126 msgid "Alphabetical (A-Z)" msgstr "按字母顺序 (A-Z)" -#: extras/choices.py:127 +#: netbox/extras/choices.py:127 msgid "Alphabetical (Z-A)" msgstr "按字母顺序 (Z-A)" -#: extras/choices.py:144 extras/choices.py:167 +#: netbox/extras/choices.py:144 netbox/extras/choices.py:167 msgid "Info" msgstr "信息" -#: extras/choices.py:145 extras/choices.py:168 +#: netbox/extras/choices.py:145 netbox/extras/choices.py:168 msgid "Success" msgstr "成功" -#: extras/choices.py:146 extras/choices.py:169 +#: netbox/extras/choices.py:146 netbox/extras/choices.py:169 msgid "Warning" msgstr "警告" -#: extras/choices.py:147 +#: netbox/extras/choices.py:147 msgid "Danger" msgstr "危急" -#: extras/choices.py:165 +#: netbox/extras/choices.py:165 msgid "Debug" msgstr "调试" -#: extras/choices.py:166 netbox/choices.py:101 +#: netbox/extras/choices.py:166 netbox/netbox/choices.py:101 msgid "Default" msgstr "默认" -#: extras/choices.py:170 +#: netbox/extras/choices.py:170 msgid "Failure" msgstr "失败" -#: extras/choices.py:186 +#: netbox/extras/choices.py:186 msgid "Hourly" msgstr "每小时" -#: extras/choices.py:187 +#: netbox/extras/choices.py:187 msgid "12 hours" msgstr "12小时制" -#: extras/choices.py:188 +#: netbox/extras/choices.py:188 msgid "Daily" msgstr "每天" -#: extras/choices.py:189 +#: netbox/extras/choices.py:189 msgid "Weekly" msgstr "周" -#: extras/choices.py:190 +#: netbox/extras/choices.py:190 msgid "30 days" msgstr "30天" -#: extras/choices.py:226 templates/dcim/virtualchassis_edit.html:107 -#: templates/generic/bulk_add_component.html:68 -#: templates/generic/object_edit.html:47 templates/generic/object_edit.html:80 -#: templates/ipam/inc/ipaddress_edit_header.html:7 +#: netbox/extras/choices.py:226 +#: 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/ipam/inc/ipaddress_edit_header.html:7 msgid "Create" msgstr "创建" -#: extras/choices.py:227 +#: netbox/extras/choices.py:227 msgid "Update" msgstr "更新" -#: extras/choices.py:228 templates/circuits/inc/circuit_termination.html:23 -#: templates/dcim/inc/panels/inventory_items.html:37 -#: templates/dcim/powerpanel.html:66 templates/extras/script_list.html:35 -#: templates/generic/bulk_delete.html:20 templates/generic/bulk_delete.html:66 -#: templates/generic/object_delete.html:19 templates/htmx/delete_form.html:57 -#: templates/ipam/inc/panels/fhrp_groups.html:48 -#: templates/users/objectpermission.html:46 -#: utilities/templates/buttons/delete.html:11 +#: netbox/extras/choices.py:228 +#: netbox/templates/circuits/inc/circuit_termination.html:23 +#: netbox/templates/dcim/inc/panels/inventory_items.html:37 +#: netbox/templates/dcim/powerpanel.html:66 +#: netbox/templates/extras/script_list.html:35 +#: netbox/templates/generic/bulk_delete.html:20 +#: netbox/templates/generic/bulk_delete.html:66 +#: netbox/templates/generic/object_delete.html:19 +#: netbox/templates/htmx/delete_form.html:57 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:48 +#: netbox/templates/users/objectpermission.html:46 +#: netbox/utilities/templates/buttons/delete.html:11 msgid "Delete" msgstr "删除" -#: extras/choices.py:252 netbox/choices.py:57 netbox/choices.py:102 +#: netbox/extras/choices.py:252 netbox/netbox/choices.py:57 +#: netbox/netbox/choices.py:102 msgid "Blue" msgstr "蓝色" -#: extras/choices.py:253 netbox/choices.py:56 netbox/choices.py:103 +#: netbox/extras/choices.py:253 netbox/netbox/choices.py:56 +#: netbox/netbox/choices.py:103 msgid "Indigo" msgstr "靛青色" -#: extras/choices.py:254 netbox/choices.py:54 netbox/choices.py:104 +#: netbox/extras/choices.py:254 netbox/netbox/choices.py:54 +#: netbox/netbox/choices.py:104 msgid "Purple" msgstr "紫色" -#: extras/choices.py:255 netbox/choices.py:51 netbox/choices.py:105 +#: netbox/extras/choices.py:255 netbox/netbox/choices.py:51 +#: netbox/netbox/choices.py:105 msgid "Pink" msgstr "粉红色" -#: extras/choices.py:256 netbox/choices.py:50 netbox/choices.py:106 +#: netbox/extras/choices.py:256 netbox/netbox/choices.py:50 +#: netbox/netbox/choices.py:106 msgid "Red" msgstr "红色" -#: extras/choices.py:257 netbox/choices.py:68 netbox/choices.py:107 +#: netbox/extras/choices.py:257 netbox/netbox/choices.py:68 +#: netbox/netbox/choices.py:107 msgid "Orange" msgstr "橙色" -#: extras/choices.py:258 netbox/choices.py:66 netbox/choices.py:108 +#: netbox/extras/choices.py:258 netbox/netbox/choices.py:66 +#: netbox/netbox/choices.py:108 msgid "Yellow" msgstr "黄色" -#: extras/choices.py:259 netbox/choices.py:63 netbox/choices.py:109 +#: netbox/extras/choices.py:259 netbox/netbox/choices.py:63 +#: netbox/netbox/choices.py:109 msgid "Green" msgstr "绿色" -#: extras/choices.py:260 netbox/choices.py:60 netbox/choices.py:110 +#: netbox/extras/choices.py:260 netbox/netbox/choices.py:60 +#: netbox/netbox/choices.py:110 msgid "Teal" msgstr "蓝色" -#: extras/choices.py:261 netbox/choices.py:59 netbox/choices.py:111 +#: netbox/extras/choices.py:261 netbox/netbox/choices.py:59 +#: netbox/netbox/choices.py:111 msgid "Cyan" msgstr "蓝绿色" -#: extras/choices.py:262 netbox/choices.py:112 +#: netbox/extras/choices.py:262 netbox/netbox/choices.py:112 msgid "Gray" msgstr "灰色" -#: extras/choices.py:263 netbox/choices.py:74 netbox/choices.py:113 +#: netbox/extras/choices.py:263 netbox/netbox/choices.py:74 +#: netbox/netbox/choices.py:113 msgid "Black" msgstr "黑色" -#: extras/choices.py:264 netbox/choices.py:75 netbox/choices.py:114 +#: netbox/extras/choices.py:264 netbox/netbox/choices.py:75 +#: netbox/netbox/choices.py:114 msgid "White" msgstr "白色" -#: extras/choices.py:279 extras/forms/model_forms.py:353 -#: extras/forms/model_forms.py:430 templates/extras/webhook.html:10 +#: netbox/extras/choices.py:279 netbox/extras/forms/model_forms.py:353 +#: netbox/extras/forms/model_forms.py:430 +#: netbox/templates/extras/webhook.html:10 msgid "Webhook" msgstr "Webhook" -#: extras/choices.py:280 extras/forms/model_forms.py:418 -#: templates/extras/script/base.html:29 +#: netbox/extras/choices.py:280 netbox/extras/forms/model_forms.py:418 +#: netbox/templates/extras/script/base.html:29 msgid "Script" msgstr "脚本" -#: extras/choices.py:281 +#: netbox/extras/choices.py:281 msgid "Notification" msgstr "通知" -#: extras/conditions.py:54 +#: netbox/extras/conditions.py:54 #, python-brace-format msgid "Unknown operator: {op}. Must be one of: {operators}" msgstr "未知运算符: {op}。必须是以下项之一: {operators}" -#: extras/conditions.py:58 +#: netbox/extras/conditions.py:58 #, python-brace-format msgid "Unsupported value type: {value}" msgstr "不支持的值类型: {value}" -#: extras/conditions.py:60 +#: netbox/extras/conditions.py:60 #, python-brace-format msgid "Invalid type for {op} operation: {value}" msgstr "{op}的操作类型 {value}无效" -#: extras/conditions.py:137 +#: netbox/extras/conditions.py:137 #, python-brace-format msgid "Ruleset must be a dictionary, not {ruleset}." msgstr "规则集必须是字典,而不是 {ruleset}.。" -#: extras/conditions.py:142 +#: netbox/extras/conditions.py:142 msgid "Invalid logic type: must be 'AND' or 'OR'. Please check documentation." msgstr "无效的逻辑类型:必须是“与”或“或”中之一。请查看文档。" -#: extras/conditions.py:154 +#: netbox/extras/conditions.py:154 msgid "Incorrect key(s) informed. Please check documentation." msgstr "提供了错误的密钥。请检查文档。" -#: extras/dashboard/forms.py:38 +#: netbox/extras/dashboard/forms.py:38 msgid "Widget type" msgstr "小组件类型" -#: extras/dashboard/utils.py:36 +#: netbox/extras/dashboard/utils.py:36 #, python-brace-format msgid "Unregistered widget class: {name}" msgstr "未注册的小组件类型: {name}" -#: extras/dashboard/widgets.py:125 +#: netbox/extras/dashboard/widgets.py:125 #, python-brace-format msgid "{class_name} must define a render() method." msgstr "{class_name}必须定义render() 方法。" -#: extras/dashboard/widgets.py:144 +#: netbox/extras/dashboard/widgets.py:144 msgid "Note" msgstr "公告" -#: extras/dashboard/widgets.py:145 +#: netbox/extras/dashboard/widgets.py:145 msgid "Display some arbitrary custom content. Markdown is supported." msgstr "显示任意的自定义内容。支持Markdown。" -#: extras/dashboard/widgets.py:158 +#: netbox/extras/dashboard/widgets.py:158 msgid "Object Counts" msgstr "对象统计" -#: extras/dashboard/widgets.py:159 +#: netbox/extras/dashboard/widgets.py:159 msgid "" "Display a set of NetBox models and the number of objects created for each " "type." msgstr "显示NetBox模型以及为每种类型创建的对象数。" -#: extras/dashboard/widgets.py:169 +#: netbox/extras/dashboard/widgets.py:169 msgid "Filters to apply when counting the number of objects" msgstr "统计对象数时要应用的筛选器" -#: extras/dashboard/widgets.py:177 +#: netbox/extras/dashboard/widgets.py:177 msgid "Invalid format. Object filters must be passed as a dictionary." msgstr "无效的格式。对象筛选器必须作为字典传递。" -#: extras/dashboard/widgets.py:208 +#: netbox/extras/dashboard/widgets.py:208 msgid "Object List" msgstr "对象列表" -#: extras/dashboard/widgets.py:209 +#: netbox/extras/dashboard/widgets.py:209 msgid "Display an arbitrary list of objects." msgstr "显示任意的对象列表。" -#: extras/dashboard/widgets.py:222 +#: netbox/extras/dashboard/widgets.py:222 msgid "The default number of objects to display" msgstr "要显示的默认对象数" -#: extras/dashboard/widgets.py:234 +#: netbox/extras/dashboard/widgets.py:234 msgid "Invalid format. URL parameters must be passed as a dictionary." msgstr "无效的格式。URL参数必须作为字典传递。" -#: extras/dashboard/widgets.py:274 +#: netbox/extras/dashboard/widgets.py:274 msgid "RSS Feed" msgstr "RSS订阅" -#: extras/dashboard/widgets.py:279 +#: netbox/extras/dashboard/widgets.py:279 msgid "Embed an RSS feed from an external website." msgstr "嵌入来自外部网站的 RSS 源。" -#: extras/dashboard/widgets.py:286 +#: netbox/extras/dashboard/widgets.py:286 msgid "Feed URL" msgstr "订阅链接" -#: extras/dashboard/widgets.py:291 +#: netbox/extras/dashboard/widgets.py:291 msgid "The maximum number of objects to display" msgstr "要多显示的对象数" -#: extras/dashboard/widgets.py:296 +#: netbox/extras/dashboard/widgets.py:296 msgid "How long to stored the cached content (in seconds)" msgstr "存储缓存内容的时间(秒)" -#: extras/dashboard/widgets.py:348 templates/account/base.html:10 -#: templates/account/bookmarks.html:7 templates/inc/user_menu.html:48 +#: netbox/extras/dashboard/widgets.py:348 +#: netbox/templates/account/base.html:10 +#: netbox/templates/account/bookmarks.html:7 +#: netbox/templates/inc/user_menu.html:48 msgid "Bookmarks" msgstr "书签" -#: extras/dashboard/widgets.py:352 +#: netbox/extras/dashboard/widgets.py:352 msgid "Show your personal bookmarks" msgstr "显示您的个人书签" -#: extras/events.py:147 +#: netbox/extras/events.py:147 #, python-brace-format msgid "Unknown action type for an event rule: {action_type}" msgstr "事件规则的未知操作类型: {action_type}" -#: extras/events.py:192 +#: netbox/extras/events.py:192 #, python-brace-format msgid "Cannot import events pipeline {name} error: {error}" msgstr "无法导入事件管道 {name}错误: {error}" -#: extras/filtersets.py:45 +#: netbox/extras/filtersets.py:45 msgid "Script module (ID)" msgstr "脚本模版(ID)" -#: extras/filtersets.py:254 extras/filtersets.py:637 extras/filtersets.py:665 +#: netbox/extras/filtersets.py:254 netbox/extras/filtersets.py:637 +#: netbox/extras/filtersets.py:665 msgid "Data file (ID)" msgstr "数据文件(ID)" -#: extras/filtersets.py:370 users/filtersets.py:68 users/filtersets.py:191 +#: netbox/extras/filtersets.py:370 netbox/users/filtersets.py:68 +#: netbox/users/filtersets.py:191 msgid "Group (name)" msgstr "组 (名字)" -#: extras/filtersets.py:574 virtualization/forms/filtersets.py:118 +#: netbox/extras/filtersets.py:574 +#: netbox/virtualization/forms/filtersets.py:118 msgid "Cluster type" msgstr "堆叠类型" -#: extras/filtersets.py:580 virtualization/filtersets.py:95 -#: virtualization/filtersets.py:147 +#: netbox/extras/filtersets.py:580 netbox/virtualization/filtersets.py:95 +#: netbox/virtualization/filtersets.py:147 msgid "Cluster type (slug)" msgstr "堆叠类型(缩写)" -#: extras/filtersets.py:601 tenancy/forms/forms.py:16 -#: tenancy/forms/forms.py:39 +#: netbox/extras/filtersets.py:601 netbox/tenancy/forms/forms.py:16 +#: netbox/tenancy/forms/forms.py:39 msgid "Tenant group" msgstr "租户组" -#: extras/filtersets.py:607 tenancy/filtersets.py:188 -#: tenancy/filtersets.py:208 +#: netbox/extras/filtersets.py:607 netbox/tenancy/filtersets.py:188 +#: netbox/tenancy/filtersets.py:208 msgid "Tenant group (slug)" msgstr "租户组(缩写)" -#: extras/filtersets.py:623 extras/forms/model_forms.py:495 -#: templates/extras/tag.html:11 +#: netbox/extras/filtersets.py:623 netbox/extras/forms/model_forms.py:495 +#: netbox/templates/extras/tag.html:11 msgid "Tag" msgstr "标签" -#: extras/filtersets.py:629 +#: netbox/extras/filtersets.py:629 msgid "Tag (slug)" msgstr "标签(缩写)" -#: extras/filtersets.py:689 extras/forms/filtersets.py:429 +#: netbox/extras/filtersets.py:689 netbox/extras/forms/filtersets.py:429 msgid "Has local config context data" msgstr "具有本地配置实例" -#: extras/forms/bulk_edit.py:35 extras/forms/filtersets.py:60 +#: netbox/extras/forms/bulk_edit.py:35 netbox/extras/forms/filtersets.py:60 msgid "Group name" msgstr "组名称" -#: extras/forms/bulk_edit.py:43 extras/forms/filtersets.py:68 -#: extras/tables/tables.py:65 templates/extras/customfield.html:38 -#: templates/generic/bulk_import.html:118 +#: netbox/extras/forms/bulk_edit.py:43 netbox/extras/forms/filtersets.py:68 +#: netbox/extras/tables/tables.py:65 +#: netbox/templates/extras/customfield.html:38 +#: netbox/templates/generic/bulk_import.html:118 msgid "Required" msgstr "必须" -#: extras/forms/bulk_edit.py:48 extras/forms/filtersets.py:75 +#: netbox/extras/forms/bulk_edit.py:48 netbox/extras/forms/filtersets.py:75 msgid "Must be unique" msgstr "必须是唯一的" -#: extras/forms/bulk_edit.py:61 extras/forms/bulk_import.py:60 -#: extras/forms/filtersets.py:89 extras/models/customfields.py:209 +#: netbox/extras/forms/bulk_edit.py:61 netbox/extras/forms/bulk_import.py:60 +#: netbox/extras/forms/filtersets.py:89 +#: netbox/extras/models/customfields.py:209 msgid "UI visible" msgstr "页面可见" -#: extras/forms/bulk_edit.py:66 extras/forms/bulk_import.py:66 -#: extras/forms/filtersets.py:94 extras/models/customfields.py:216 +#: netbox/extras/forms/bulk_edit.py:66 netbox/extras/forms/bulk_import.py:66 +#: netbox/extras/forms/filtersets.py:94 +#: netbox/extras/models/customfields.py:216 msgid "UI editable" msgstr "页面可编辑" -#: extras/forms/bulk_edit.py:71 extras/forms/filtersets.py:97 +#: netbox/extras/forms/bulk_edit.py:71 netbox/extras/forms/filtersets.py:97 msgid "Is cloneable" msgstr "可复制" -#: extras/forms/bulk_edit.py:76 extras/forms/filtersets.py:104 +#: netbox/extras/forms/bulk_edit.py:76 netbox/extras/forms/filtersets.py:104 msgid "Minimum value" msgstr "最小值" -#: extras/forms/bulk_edit.py:80 extras/forms/filtersets.py:108 +#: netbox/extras/forms/bulk_edit.py:80 netbox/extras/forms/filtersets.py:108 msgid "Maximum value" msgstr "最大值" -#: extras/forms/bulk_edit.py:84 extras/forms/filtersets.py:112 +#: netbox/extras/forms/bulk_edit.py:84 netbox/extras/forms/filtersets.py:112 msgid "Validation regex" msgstr "验证正则表达式" -#: extras/forms/bulk_edit.py:91 extras/forms/filtersets.py:46 -#: extras/forms/model_forms.py:76 templates/extras/customfield.html:70 +#: netbox/extras/forms/bulk_edit.py:91 netbox/extras/forms/filtersets.py:46 +#: netbox/extras/forms/model_forms.py:76 +#: netbox/templates/extras/customfield.html:70 msgid "Behavior" msgstr "行为" -#: extras/forms/bulk_edit.py:128 extras/forms/filtersets.py:149 +#: netbox/extras/forms/bulk_edit.py:128 netbox/extras/forms/filtersets.py:149 msgid "New window" msgstr "新窗口" -#: extras/forms/bulk_edit.py:137 +#: netbox/extras/forms/bulk_edit.py:137 msgid "Button class" msgstr "按钮类型" -#: extras/forms/bulk_edit.py:154 extras/forms/filtersets.py:187 -#: extras/models/models.py:409 +#: netbox/extras/forms/bulk_edit.py:154 netbox/extras/forms/filtersets.py:187 +#: netbox/extras/models/models.py:409 msgid "MIME type" msgstr "MIME类型" -#: extras/forms/bulk_edit.py:159 extras/forms/filtersets.py:190 +#: netbox/extras/forms/bulk_edit.py:159 netbox/extras/forms/filtersets.py:190 msgid "File extension" msgstr "文件扩展名" -#: extras/forms/bulk_edit.py:164 extras/forms/filtersets.py:194 +#: netbox/extras/forms/bulk_edit.py:164 netbox/extras/forms/filtersets.py:194 msgid "As attachment" msgstr "作为附件" -#: extras/forms/bulk_edit.py:192 extras/forms/filtersets.py:236 -#: extras/tables/tables.py:256 templates/extras/savedfilter.html:29 +#: netbox/extras/forms/bulk_edit.py:192 netbox/extras/forms/filtersets.py:236 +#: netbox/extras/tables/tables.py:256 +#: netbox/templates/extras/savedfilter.html:29 msgid "Shared" msgstr "共享性" -#: extras/forms/bulk_edit.py:215 extras/forms/filtersets.py:265 -#: extras/models/models.py:174 +#: netbox/extras/forms/bulk_edit.py:215 netbox/extras/forms/filtersets.py:265 +#: netbox/extras/models/models.py:174 msgid "HTTP method" msgstr "HTTP方法" -#: extras/forms/bulk_edit.py:219 extras/forms/filtersets.py:259 -#: templates/extras/webhook.html:30 +#: netbox/extras/forms/bulk_edit.py:219 netbox/extras/forms/filtersets.py:259 +#: netbox/templates/extras/webhook.html:30 msgid "Payload URL" msgstr "有效URL" -#: extras/forms/bulk_edit.py:224 extras/models/models.py:214 +#: netbox/extras/forms/bulk_edit.py:224 netbox/extras/models/models.py:214 msgid "SSL verification" msgstr "SSL验证" -#: extras/forms/bulk_edit.py:227 templates/extras/webhook.html:38 +#: netbox/extras/forms/bulk_edit.py:227 +#: netbox/templates/extras/webhook.html:38 msgid "Secret" msgstr "密钥" -#: extras/forms/bulk_edit.py:232 +#: netbox/extras/forms/bulk_edit.py:232 msgid "CA file path" msgstr "CA证书文件路径" -#: extras/forms/bulk_edit.py:253 extras/forms/bulk_import.py:192 -#: extras/forms/model_forms.py:377 +#: netbox/extras/forms/bulk_edit.py:253 netbox/extras/forms/bulk_import.py:192 +#: netbox/extras/forms/model_forms.py:377 msgid "Event types" msgstr "事件类型" -#: extras/forms/bulk_edit.py:293 +#: netbox/extras/forms/bulk_edit.py:293 msgid "Is active" msgstr "激活的" -#: extras/forms/bulk_import.py:37 extras/forms/bulk_import.py:118 -#: extras/forms/bulk_import.py:139 extras/forms/bulk_import.py:162 -#: extras/forms/bulk_import.py:186 extras/forms/filtersets.py:137 -#: extras/forms/filtersets.py:224 extras/forms/model_forms.py:47 -#: extras/forms/model_forms.py:205 extras/forms/model_forms.py:237 -#: extras/forms/model_forms.py:278 extras/forms/model_forms.py:372 -#: extras/forms/model_forms.py:489 users/forms/model_forms.py:276 +#: netbox/extras/forms/bulk_import.py:37 +#: netbox/extras/forms/bulk_import.py:118 +#: 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/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/users/forms/model_forms.py:276 msgid "Object types" msgstr "对象类型" -#: extras/forms/bulk_import.py:39 extras/forms/bulk_import.py:120 -#: extras/forms/bulk_import.py:141 extras/forms/bulk_import.py:164 -#: extras/forms/bulk_import.py:188 tenancy/forms/bulk_import.py:96 +#: netbox/extras/forms/bulk_import.py:39 +#: netbox/extras/forms/bulk_import.py:120 +#: netbox/extras/forms/bulk_import.py:141 +#: netbox/extras/forms/bulk_import.py:164 +#: netbox/extras/forms/bulk_import.py:188 +#: netbox/tenancy/forms/bulk_import.py:96 msgid "One or more assigned object types" msgstr "一个或多个分配对象类型" -#: extras/forms/bulk_import.py:44 +#: netbox/extras/forms/bulk_import.py:44 msgid "Field data type (e.g. text, integer, etc.)" msgstr "字段数据类型(例如文本、整数等)" -#: extras/forms/bulk_import.py:47 extras/forms/filtersets.py:208 -#: extras/forms/filtersets.py:281 extras/forms/model_forms.py:304 -#: extras/forms/model_forms.py:341 tenancy/forms/filtersets.py:92 +#: 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/tenancy/forms/filtersets.py:92 msgid "Object type" msgstr "对象类型" -#: extras/forms/bulk_import.py:50 +#: netbox/extras/forms/bulk_import.py:50 msgid "Object type (for object or multi-object fields)" msgstr "对象类型(用于对象或多对象字段)" -#: extras/forms/bulk_import.py:53 extras/forms/filtersets.py:84 +#: netbox/extras/forms/bulk_import.py:53 netbox/extras/forms/filtersets.py:84 msgid "Choice set" msgstr "可选项" -#: extras/forms/bulk_import.py:57 +#: netbox/extras/forms/bulk_import.py:57 msgid "Choice set (for selection fields)" msgstr "可选项(用于单选框)" -#: extras/forms/bulk_import.py:63 +#: netbox/extras/forms/bulk_import.py:63 msgid "Whether the custom field is displayed in the UI" msgstr "自定义字段是否显示在页面中" -#: extras/forms/bulk_import.py:69 +#: netbox/extras/forms/bulk_import.py:69 msgid "Whether the custom field is editable in the UI" msgstr "自定义字段在页面中是否可编辑" -#: extras/forms/bulk_import.py:85 +#: netbox/extras/forms/bulk_import.py:85 msgid "The base set of predefined choices to use (if any)" msgstr "预定义选项的基本集合(如有)" -#: extras/forms/bulk_import.py:91 +#: netbox/extras/forms/bulk_import.py:91 msgid "" "Quoted string of comma-separated field choices with optional labels " "separated by colon: \"choice1:First Choice,choice2:Second Choice\"" msgstr "用逗号分隔字段选项,可选标签用冒号分隔,并用引号包围:“选项1:第一选项,选项2:第二选项”" -#: extras/forms/bulk_import.py:123 extras/models/models.py:323 +#: netbox/extras/forms/bulk_import.py:123 netbox/extras/models/models.py:323 msgid "button class" msgstr "按钮类" -#: extras/forms/bulk_import.py:126 extras/models/models.py:327 +#: netbox/extras/forms/bulk_import.py:126 netbox/extras/models/models.py:327 msgid "" "The class of the first link in a group will be used for the dropdown button" msgstr "列表中第一个类将用于下拉按钮" -#: extras/forms/bulk_import.py:193 +#: netbox/extras/forms/bulk_import.py:193 msgid "The event type(s) which will trigger this rule" msgstr "将触发此规则的事件类型" -#: extras/forms/bulk_import.py:196 +#: netbox/extras/forms/bulk_import.py:196 msgid "Action object" msgstr "动作对象" -#: extras/forms/bulk_import.py:198 +#: netbox/extras/forms/bulk_import.py:198 msgid "Webhook name or script as dotted path module.Class" msgstr "Webhook名称或脚本的路径为module.Class" -#: extras/forms/bulk_import.py:219 +#: netbox/extras/forms/bulk_import.py:219 #, python-brace-format msgid "Webhook {name} not found" msgstr "未找到 Webhook {name}" -#: extras/forms/bulk_import.py:228 +#: netbox/extras/forms/bulk_import.py:228 #, python-brace-format msgid "Script {name} not found" msgstr "未找到脚本{name}" -#: extras/forms/bulk_import.py:244 +#: netbox/extras/forms/bulk_import.py:244 msgid "Assigned object type" msgstr "分配的对象类型" -#: extras/forms/bulk_import.py:249 +#: netbox/extras/forms/bulk_import.py:249 msgid "The classification of entry" msgstr "条目的分类" -#: extras/forms/bulk_import.py:261 extras/forms/model_forms.py:320 -#: netbox/navigation/menu.py:390 templates/extras/notificationgroup.html:41 -#: templates/users/group.html:29 users/forms/model_forms.py:236 -#: users/forms/model_forms.py:248 users/forms/model_forms.py:300 -#: users/tables.py:102 +#: netbox/extras/forms/bulk_import.py:261 +#: netbox/extras/forms/model_forms.py:320 netbox/netbox/navigation/menu.py:390 +#: 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 +#: netbox/users/tables.py:102 msgid "Users" msgstr "用户" -#: extras/forms/bulk_import.py:265 +#: netbox/extras/forms/bulk_import.py:265 msgid "User names separated by commas, encased with double quotes" msgstr "用户名用逗号分隔,用双引号括起来" -#: extras/forms/bulk_import.py:268 extras/forms/model_forms.py:315 -#: netbox/navigation/menu.py:410 templates/extras/notificationgroup.html:31 -#: users/forms/model_forms.py:181 users/forms/model_forms.py:193 -#: users/forms/model_forms.py:305 users/tables.py:35 users/tables.py:106 +#: netbox/extras/forms/bulk_import.py:268 +#: netbox/extras/forms/model_forms.py:315 netbox/netbox/navigation/menu.py:410 +#: 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 +#: netbox/users/tables.py:106 msgid "Groups" msgstr "组" -#: extras/forms/bulk_import.py:272 +#: netbox/extras/forms/bulk_import.py:272 msgid "Group names separated by commas, encased with double quotes" msgstr "群组名称用逗号分隔,用双引号括起来" -#: extras/forms/filtersets.py:52 extras/forms/model_forms.py:56 +#: netbox/extras/forms/filtersets.py:52 netbox/extras/forms/model_forms.py:56 msgid "Related object type" msgstr "连接的对象类型" -#: extras/forms/filtersets.py:57 +#: netbox/extras/forms/filtersets.py:57 msgid "Field type" msgstr "字段类型" -#: extras/forms/filtersets.py:120 extras/forms/model_forms.py:157 -#: extras/tables/tables.py:91 templates/generic/bulk_import.html:154 +#: netbox/extras/forms/filtersets.py:120 +#: netbox/extras/forms/model_forms.py:157 netbox/extras/tables/tables.py:91 +#: netbox/templates/generic/bulk_import.html:154 msgid "Choices" msgstr "选项" -#: extras/forms/filtersets.py:164 extras/forms/filtersets.py:319 -#: extras/forms/filtersets.py:408 extras/forms/model_forms.py:572 -#: templates/core/job.html:96 templates/extras/eventrule.html:84 +#: 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/templates/extras/eventrule.html:84 msgid "Data" msgstr "数据" -#: extras/forms/filtersets.py:175 extras/forms/filtersets.py:333 -#: extras/forms/filtersets.py:418 netbox/choices.py:130 -#: utilities/forms/bulk_import.py:26 +#: netbox/extras/forms/filtersets.py:175 netbox/extras/forms/filtersets.py:333 +#: netbox/extras/forms/filtersets.py:418 netbox/netbox/choices.py:130 +#: netbox/utilities/forms/bulk_import.py:26 msgid "Data file" msgstr "数据文件" -#: extras/forms/filtersets.py:183 +#: netbox/extras/forms/filtersets.py:183 msgid "Content types" msgstr "内容类型" -#: extras/forms/filtersets.py:255 extras/models/models.py:179 +#: netbox/extras/forms/filtersets.py:255 netbox/extras/models/models.py:179 msgid "HTTP content type" msgstr "HTTP内容类型" -#: extras/forms/filtersets.py:286 +#: netbox/extras/forms/filtersets.py:286 msgid "Event type" msgstr "事件类型" -#: extras/forms/filtersets.py:291 +#: netbox/extras/forms/filtersets.py:291 msgid "Action type" msgstr "动作类型" -#: extras/forms/filtersets.py:307 +#: netbox/extras/forms/filtersets.py:307 msgid "Tagged object type" msgstr "标记的对象类型" -#: extras/forms/filtersets.py:312 +#: netbox/extras/forms/filtersets.py:312 msgid "Allowed object type" msgstr "允许的对象类型" -#: extras/forms/filtersets.py:341 extras/forms/model_forms.py:507 -#: netbox/navigation/menu.py:18 +#: netbox/extras/forms/filtersets.py:341 +#: netbox/extras/forms/model_forms.py:507 netbox/netbox/navigation/menu.py:18 msgid "Regions" msgstr "地区" -#: extras/forms/filtersets.py:346 extras/forms/model_forms.py:512 +#: netbox/extras/forms/filtersets.py:346 +#: netbox/extras/forms/model_forms.py:512 msgid "Site groups" msgstr "站点组" -#: extras/forms/filtersets.py:356 extras/forms/model_forms.py:522 -#: netbox/navigation/menu.py:20 templates/dcim/site.html:127 +#: netbox/extras/forms/filtersets.py:356 +#: netbox/extras/forms/model_forms.py:522 netbox/netbox/navigation/menu.py:20 +#: netbox/templates/dcim/site.html:127 msgid "Locations" msgstr "位置" -#: extras/forms/filtersets.py:361 extras/forms/model_forms.py:527 +#: netbox/extras/forms/filtersets.py:361 +#: netbox/extras/forms/model_forms.py:527 msgid "Device types" msgstr "设备型号" -#: extras/forms/filtersets.py:366 extras/forms/model_forms.py:532 +#: netbox/extras/forms/filtersets.py:366 +#: netbox/extras/forms/model_forms.py:532 msgid "Roles" msgstr "角色" -#: extras/forms/filtersets.py:376 extras/forms/model_forms.py:542 +#: netbox/extras/forms/filtersets.py:376 +#: netbox/extras/forms/model_forms.py:542 msgid "Cluster types" msgstr "集群类型" -#: extras/forms/filtersets.py:381 extras/forms/model_forms.py:547 +#: netbox/extras/forms/filtersets.py:381 +#: netbox/extras/forms/model_forms.py:547 msgid "Cluster groups" msgstr "集群组" -#: extras/forms/filtersets.py:386 extras/forms/model_forms.py:552 -#: netbox/navigation/menu.py:255 netbox/navigation/menu.py:257 -#: templates/virtualization/clustertype.html:30 -#: virtualization/tables/clusters.py:23 virtualization/tables/clusters.py:45 +#: 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/templates/virtualization/clustertype.html:30 +#: netbox/virtualization/tables/clusters.py:23 +#: netbox/virtualization/tables/clusters.py:45 msgid "Clusters" msgstr "集群" -#: extras/forms/filtersets.py:391 extras/forms/model_forms.py:557 +#: netbox/extras/forms/filtersets.py:391 +#: netbox/extras/forms/model_forms.py:557 msgid "Tenant groups" msgstr "租户组" -#: extras/forms/model_forms.py:49 +#: netbox/extras/forms/model_forms.py:49 msgid "The type(s) of object that have this custom field" msgstr "具有此自定义字段的对象的类型" -#: extras/forms/model_forms.py:52 +#: netbox/extras/forms/model_forms.py:52 msgid "Default value" msgstr "默认值" -#: extras/forms/model_forms.py:58 +#: netbox/extras/forms/model_forms.py:58 msgid "Type of the related object (for object/multi-object fields only)" msgstr "相关对象的类型(仅适用于对象/多对象字段)" -#: extras/forms/model_forms.py:61 templates/extras/customfield.html:60 +#: netbox/extras/forms/model_forms.py:61 +#: netbox/templates/extras/customfield.html:60 msgid "Related object filter" msgstr "相关对象过滤器" -#: extras/forms/model_forms.py:63 +#: netbox/extras/forms/model_forms.py:63 msgid "Specify query parameters as a JSON object." msgstr "将查询参数指定为 JSON 对象。" -#: extras/forms/model_forms.py:73 templates/extras/customfield.html:10 +#: netbox/extras/forms/model_forms.py:73 +#: netbox/templates/extras/customfield.html:10 msgid "Custom Field" msgstr "自定义字段" -#: extras/forms/model_forms.py:85 +#: netbox/extras/forms/model_forms.py:85 msgid "" "The type of data stored in this field. For object/multi-object fields, " "select the related object type below." msgstr "存储在此字段中的数据类型。对于对象/多对象字段,请选择下面的相关对象类型。" -#: extras/forms/model_forms.py:88 +#: netbox/extras/forms/model_forms.py:88 msgid "" "This will be displayed as help text for the form field. Markdown is " "supported." msgstr "这将显示为表单字段的帮助文本。支持Markdown。" -#: extras/forms/model_forms.py:143 +#: netbox/extras/forms/model_forms.py:143 msgid "Related Object" msgstr "相关对象" -#: extras/forms/model_forms.py:169 +#: netbox/extras/forms/model_forms.py:169 msgid "" "Enter one choice per line. An optional label may be specified for each " "choice by appending it with a colon. Example:" msgstr "每行输入一个选项。可以为每个选项指定一个可选标签,方法是在其后面附加一个冒号。例如:" -#: extras/forms/model_forms.py:212 templates/extras/customlink.html:10 +#: netbox/extras/forms/model_forms.py:212 +#: netbox/templates/extras/customlink.html:10 msgid "Custom Link" msgstr "自定义链接" -#: extras/forms/model_forms.py:214 +#: netbox/extras/forms/model_forms.py:214 msgid "Templates" msgstr "模版" -#: extras/forms/model_forms.py:226 +#: netbox/extras/forms/model_forms.py:226 #, 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}。空链接将不会显示。" -#: extras/forms/model_forms.py:230 +#: netbox/extras/forms/model_forms.py:230 #, python-brace-format msgid "" "Jinja2 template code for the link URL. Reference the object as {example}." msgstr "URL链接的Jinja2模板代码。将对象引用为 {example}。" -#: extras/forms/model_forms.py:241 extras/forms/model_forms.py:624 +#: netbox/extras/forms/model_forms.py:241 +#: netbox/extras/forms/model_forms.py:624 msgid "Template code" msgstr "模版代码" -#: extras/forms/model_forms.py:247 templates/extras/exporttemplate.html:12 +#: netbox/extras/forms/model_forms.py:247 +#: netbox/templates/extras/exporttemplate.html:12 msgid "Export Template" msgstr "导出模版" -#: extras/forms/model_forms.py:249 +#: netbox/extras/forms/model_forms.py:249 msgid "Rendering" msgstr "转换" -#: extras/forms/model_forms.py:263 extras/forms/model_forms.py:649 +#: netbox/extras/forms/model_forms.py:263 +#: netbox/extras/forms/model_forms.py:649 msgid "Template content is populated from the remote source selected below." msgstr "模板内容是从下面选择的远程源填充的。" -#: extras/forms/model_forms.py:270 extras/forms/model_forms.py:656 +#: netbox/extras/forms/model_forms.py:270 +#: netbox/extras/forms/model_forms.py:656 msgid "Must specify either local content or a data file" msgstr "必须指定本地内容或数据文件" -#: extras/forms/model_forms.py:284 netbox/forms/mixins.py:70 -#: templates/extras/savedfilter.html:10 +#: netbox/extras/forms/model_forms.py:284 netbox/netbox/forms/mixins.py:70 +#: netbox/templates/extras/savedfilter.html:10 msgid "Saved Filter" msgstr "已保存的过滤器" -#: extras/forms/model_forms.py:334 +#: netbox/extras/forms/model_forms.py:334 msgid "A notification group specify at least one user or group." msgstr "通知组至少指定一个用户或组。" -#: extras/forms/model_forms.py:356 templates/extras/webhook.html:23 +#: netbox/extras/forms/model_forms.py:356 +#: netbox/templates/extras/webhook.html:23 msgid "HTTP Request" msgstr "HTTP 请求" -#: extras/forms/model_forms.py:358 templates/extras/webhook.html:44 +#: netbox/extras/forms/model_forms.py:358 +#: netbox/templates/extras/webhook.html:44 msgid "SSL" msgstr "SSL" -#: extras/forms/model_forms.py:380 +#: netbox/extras/forms/model_forms.py:380 msgid "Action choice" msgstr "选择动作" -#: extras/forms/model_forms.py:385 +#: netbox/extras/forms/model_forms.py:385 msgid "Enter conditions in JSON format." msgstr "已JSON格式输入条件。" -#: extras/forms/model_forms.py:389 +#: netbox/extras/forms/model_forms.py:389 msgid "" "Enter parameters to pass to the action in JSON format." msgstr "输入以 JSON格式传递的参数。" -#: extras/forms/model_forms.py:394 templates/extras/eventrule.html:10 +#: netbox/extras/forms/model_forms.py:394 +#: netbox/templates/extras/eventrule.html:10 msgid "Event Rule" msgstr "事件规则" -#: extras/forms/model_forms.py:395 +#: netbox/extras/forms/model_forms.py:395 msgid "Triggers" msgstr "触发器" -#: extras/forms/model_forms.py:442 +#: netbox/extras/forms/model_forms.py:442 msgid "Notification group" msgstr "通知组" -#: extras/forms/model_forms.py:562 netbox/navigation/menu.py:26 -#: tenancy/tables/tenants.py:22 +#: netbox/extras/forms/model_forms.py:562 netbox/netbox/navigation/menu.py:26 +#: netbox/tenancy/tables/tenants.py:22 msgid "Tenants" msgstr "租户" -#: extras/forms/model_forms.py:606 +#: netbox/extras/forms/model_forms.py:606 msgid "Data is populated from the remote source selected below." msgstr "数据是从下面选择的远程源填充的。" -#: extras/forms/model_forms.py:612 +#: netbox/extras/forms/model_forms.py:612 msgid "Must specify either local data or a data file" msgstr "必须指定本地内容或数据文件" -#: extras/forms/model_forms.py:631 templates/core/datafile.html:55 +#: netbox/extras/forms/model_forms.py:631 +#: netbox/templates/core/datafile.html:55 msgid "Content" msgstr "内容" -#: extras/forms/reports.py:17 extras/forms/scripts.py:23 +#: netbox/extras/forms/reports.py:17 netbox/extras/forms/scripts.py:23 msgid "Schedule at" msgstr "计划在" -#: extras/forms/reports.py:18 +#: netbox/extras/forms/reports.py:18 msgid "Schedule execution of report to a set time" msgstr "在指定的时间执行报告" -#: extras/forms/reports.py:23 extras/forms/scripts.py:29 +#: netbox/extras/forms/reports.py:23 netbox/extras/forms/scripts.py:29 msgid "Recurs every" msgstr "重复间隔" -#: extras/forms/reports.py:27 +#: netbox/extras/forms/reports.py:27 msgid "Interval at which this report is re-run (in minutes)" msgstr "重新运行此报表的间隔(分钟)" -#: extras/forms/reports.py:35 extras/forms/scripts.py:41 +#: netbox/extras/forms/reports.py:35 netbox/extras/forms/scripts.py:41 #, python-brace-format msgid " (current time: {now})" msgstr " (当前时间: {now})" -#: extras/forms/reports.py:45 extras/forms/scripts.py:51 +#: netbox/extras/forms/reports.py:45 netbox/extras/forms/scripts.py:51 msgid "Scheduled time must be in the future." msgstr "预定时间需设置在当前时间之后。" -#: extras/forms/scripts.py:17 +#: netbox/extras/forms/scripts.py:17 msgid "Commit changes" msgstr "提交更改" -#: extras/forms/scripts.py:18 +#: netbox/extras/forms/scripts.py:18 msgid "Commit changes to the database (uncheck for a dry-run)" msgstr "提交对数据库的更改(取消选中以进行试运行)" -#: extras/forms/scripts.py:24 +#: netbox/extras/forms/scripts.py:24 msgid "Schedule execution of script to a set time" msgstr "在指定的时间执行脚本" -#: extras/forms/scripts.py:33 +#: netbox/extras/forms/scripts.py:33 msgid "Interval at which this script is re-run (in minutes)" msgstr "重新运行此脚本的间隔(分钟)" -#: extras/jobs.py:49 +#: netbox/extras/jobs.py:47 msgid "Database changes have been reverted automatically." msgstr "数据库更改已自动恢复。" -#: extras/jobs.py:55 +#: netbox/extras/jobs.py:53 msgid "Script aborted with error: " msgstr "脚本因错误而中止:" -#: extras/jobs.py:65 +#: netbox/extras/jobs.py:63 msgid "An exception occurred: " msgstr "出现异常:" -#: extras/jobs.py:70 +#: netbox/extras/jobs.py:68 msgid "Database changes have been reverted due to error." msgstr "由于出现错误,数据库更改已回滚。" -#: extras/management/commands/reindex.py:66 +#: netbox/extras/management/commands/reindex.py:66 msgid "No indexers found!" msgstr "找不到索引!" -#: extras/models/configs.py:130 +#: netbox/extras/models/configs.py:130 msgid "config context" msgstr "配置实例" -#: extras/models/configs.py:131 +#: netbox/extras/models/configs.py:131 msgid "config contexts" msgstr "配置实例" -#: extras/models/configs.py:149 extras/models/configs.py:205 +#: netbox/extras/models/configs.py:149 netbox/extras/models/configs.py:205 msgid "JSON data must be in object form. Example:" msgstr "JSON数据必须为对象形式。例如:" -#: extras/models/configs.py:169 +#: netbox/extras/models/configs.py:169 msgid "" "Local config context data takes precedence over source contexts in the final" " rendered config context" msgstr "在最终渲染的配置实例中,本地配置实例数据优先于数据源中的实力" -#: extras/models/configs.py:224 +#: netbox/extras/models/configs.py:224 msgid "template code" msgstr "模版代码" -#: extras/models/configs.py:225 +#: netbox/extras/models/configs.py:225 msgid "Jinja2 template code." msgstr "Jinja2模版代码" -#: extras/models/configs.py:228 +#: netbox/extras/models/configs.py:228 msgid "environment parameters" msgstr "环境参数" -#: extras/models/configs.py:233 +#: netbox/extras/models/configs.py:233 msgid "" "Any additional" @@ -7467,135 +8056,135 @@ msgstr "" "构建Jinja2环境时要传递的 附加参数" -#: extras/models/configs.py:240 +#: netbox/extras/models/configs.py:240 msgid "config template" msgstr "配置模版" -#: extras/models/configs.py:241 +#: netbox/extras/models/configs.py:241 msgid "config templates" msgstr "配置模版" -#: extras/models/customfields.py:75 +#: netbox/extras/models/customfields.py:75 msgid "The object(s) to which this field applies." msgstr "此字段所应用的对象。" -#: extras/models/customfields.py:82 +#: netbox/extras/models/customfields.py:82 msgid "The type of data this custom field holds" msgstr "该自定义字段保存的数据类型" -#: extras/models/customfields.py:89 +#: netbox/extras/models/customfields.py:89 msgid "The type of NetBox object this field maps to (for object fields)" msgstr "此字段映射到的NetBox对象的类型(对于对象字段)" -#: extras/models/customfields.py:95 +#: netbox/extras/models/customfields.py:95 msgid "Internal field name" msgstr "内部字段名称" -#: extras/models/customfields.py:99 +#: netbox/extras/models/customfields.py:99 msgid "Only alphanumeric characters and underscores are allowed." msgstr "仅允许输入英文字符、数字和下划线。" -#: extras/models/customfields.py:104 +#: netbox/extras/models/customfields.py:104 msgid "Double underscores are not permitted in custom field names." msgstr "自定义字段名称中不允许使用双下划线。" -#: extras/models/customfields.py:115 +#: netbox/extras/models/customfields.py:115 msgid "" "Name of the field as displayed to users (if not provided, 'the field's name " "will be used)" msgstr "向用户显示的字段名称(如果未提供,则使用字段名称)" -#: extras/models/customfields.py:119 extras/models/models.py:317 +#: netbox/extras/models/customfields.py:119 netbox/extras/models/models.py:317 msgid "group name" msgstr "组名称" -#: extras/models/customfields.py:122 +#: netbox/extras/models/customfields.py:122 msgid "Custom fields within the same group will be displayed together" msgstr "同一组内的自定义字段将一起显示" -#: extras/models/customfields.py:130 +#: netbox/extras/models/customfields.py:130 msgid "required" msgstr "必须" -#: extras/models/customfields.py:132 +#: netbox/extras/models/customfields.py:132 msgid "" "This field is required when creating new objects or editing an existing " "object." msgstr "创建新对象或编辑现有对象时,此字段是必填字段。" -#: extras/models/customfields.py:135 +#: netbox/extras/models/customfields.py:135 msgid "must be unique" msgstr "必须是唯一的" -#: extras/models/customfields.py:137 +#: netbox/extras/models/customfields.py:137 msgid "The value of this field must be unique for the assigned object" msgstr "对于分配的对象,该字段的值必须是唯一的" -#: extras/models/customfields.py:140 +#: netbox/extras/models/customfields.py:140 msgid "search weight" msgstr "搜索权重" -#: extras/models/customfields.py:143 +#: netbox/extras/models/customfields.py:143 msgid "" "Weighting for search. Lower values are considered more important. Fields " "with a search weight of zero will be ignored." msgstr "搜索权重。值越低越被有限搜索。权重为零的字段将被忽略搜索。" -#: extras/models/customfields.py:148 +#: netbox/extras/models/customfields.py:148 msgid "filter logic" msgstr "过滤器规则" -#: extras/models/customfields.py:152 +#: netbox/extras/models/customfields.py:152 msgid "" "Loose matches any instance of a given string; exact matches the entire " "field." msgstr "松散匹配是匹配字段中的任意位置;严格匹配是与整个字段完全匹配。" -#: extras/models/customfields.py:155 +#: netbox/extras/models/customfields.py:155 msgid "default" msgstr "默认" -#: extras/models/customfields.py:159 +#: netbox/extras/models/customfields.py:159 msgid "" "Default value for the field (must be a JSON value). Encapsulate strings with" " double quotes (e.g. \"Foo\")." msgstr "字段的默认值(必须是JSON值)。字符串要包含在双引号中(例如“Foo”)。" -#: extras/models/customfields.py:166 +#: netbox/extras/models/customfields.py:166 msgid "" "Filter the object selection choices using a query_params dict (must be a " "JSON value).Encapsulate strings with double quotes (e.g. \"Foo\")." msgstr "使用 query_params 字典(必须是 JSON 值)筛选对象选择选项。用双引号(例如 “Foo”)封装字符串。" -#: extras/models/customfields.py:172 +#: netbox/extras/models/customfields.py:172 msgid "display weight" msgstr "显示权重" -#: extras/models/customfields.py:173 +#: netbox/extras/models/customfields.py:173 msgid "Fields with higher weights appear lower in a form." msgstr "权重约高的字段在页面中显示得位置越低。" -#: extras/models/customfields.py:178 +#: netbox/extras/models/customfields.py:178 msgid "minimum value" msgstr "最小值" -#: extras/models/customfields.py:179 +#: netbox/extras/models/customfields.py:179 msgid "Minimum allowed value (for numeric fields)" msgstr "允许的最小值(对于数字字段)" -#: extras/models/customfields.py:184 +#: netbox/extras/models/customfields.py:184 msgid "maximum value" msgstr "最大值" -#: extras/models/customfields.py:185 +#: netbox/extras/models/customfields.py:185 msgid "Maximum allowed value (for numeric fields)" msgstr "允许的最大值(对于数字字段)" -#: extras/models/customfields.py:191 +#: netbox/extras/models/customfields.py:191 msgid "validation regex" msgstr "验证正则表达式" -#: extras/models/customfields.py:193 +#: netbox/extras/models/customfields.py:193 #, python-brace-format msgid "" "Regular expression to enforce on text field values. Use ^ and $ to force " @@ -7605,250 +8194,252 @@ msgstr "" "要在文本字段值上强制执行的正则表达式。使用^和$可以强制匹配整个字符串。例如, " "^[A-Z]{3}$将限制值只能有三个大写字母。" -#: extras/models/customfields.py:201 +#: netbox/extras/models/customfields.py:201 msgid "choice set" msgstr "可选项" -#: extras/models/customfields.py:210 +#: netbox/extras/models/customfields.py:210 msgid "Specifies whether the custom field is displayed in the UI" msgstr "是否在UI中显示此字段" -#: extras/models/customfields.py:217 +#: netbox/extras/models/customfields.py:217 msgid "Specifies whether the custom field value can be edited in the UI" msgstr "是否在UI中可编辑此字段" -#: extras/models/customfields.py:221 +#: netbox/extras/models/customfields.py:221 msgid "is cloneable" msgstr "可复制" -#: extras/models/customfields.py:222 +#: netbox/extras/models/customfields.py:222 msgid "Replicate this value when cloning objects" msgstr "复制对象时同时复制此值" -#: extras/models/customfields.py:239 +#: netbox/extras/models/customfields.py:239 msgid "custom field" msgstr "自定义字段" -#: extras/models/customfields.py:240 +#: netbox/extras/models/customfields.py:240 msgid "custom fields" msgstr "自定义字段" -#: extras/models/customfields.py:329 +#: netbox/extras/models/customfields.py:329 #, python-brace-format msgid "Invalid default value \"{value}\": {error}" msgstr "无效的默认值:“{value}”:{error}" -#: extras/models/customfields.py:336 +#: netbox/extras/models/customfields.py:336 msgid "A minimum value may be set only for numeric fields" msgstr "只能为数字字段设置最小值" -#: extras/models/customfields.py:338 +#: netbox/extras/models/customfields.py:338 msgid "A maximum value may be set only for numeric fields" msgstr "只能为数字字段设置最大值" -#: extras/models/customfields.py:348 +#: netbox/extras/models/customfields.py:348 msgid "" "Regular expression validation is supported only for text and URL fields" msgstr "仅对文本和URL字段支持正则表达式验证" -#: extras/models/customfields.py:354 +#: netbox/extras/models/customfields.py:354 msgid "Uniqueness cannot be enforced for boolean fields" msgstr "无法强制布尔字段的唯一性" -#: extras/models/customfields.py:364 +#: netbox/extras/models/customfields.py:364 msgid "Selection fields must specify a set of choices." msgstr "选择字段必须指定一组可用选项。" -#: extras/models/customfields.py:368 +#: netbox/extras/models/customfields.py:368 msgid "Choices may be set only on selection fields." msgstr "只能在选择字段上设置选项。" -#: extras/models/customfields.py:375 +#: netbox/extras/models/customfields.py:375 msgid "Object fields must define an object type." msgstr "对象字段必须定义对象类型。" -#: extras/models/customfields.py:379 +#: netbox/extras/models/customfields.py:379 #, python-brace-format msgid "{type} fields may not define an object type." msgstr "{type}字段不能定义对象类型。" -#: extras/models/customfields.py:386 +#: netbox/extras/models/customfields.py:386 msgid "A related object filter can be defined only for object fields." msgstr "只能为对象字段定义相关对象过滤器。" -#: extras/models/customfields.py:390 +#: netbox/extras/models/customfields.py:390 msgid "Filter must be defined as a dictionary mapping attributes to values." msgstr "过滤器必须定义为将属性映射到值的字典。" -#: extras/models/customfields.py:469 +#: netbox/extras/models/customfields.py:469 msgid "True" msgstr "是" -#: extras/models/customfields.py:470 +#: netbox/extras/models/customfields.py:470 msgid "False" msgstr "否" -#: extras/models/customfields.py:560 +#: netbox/extras/models/customfields.py:560 #, python-brace-format msgid "Values must match this regex: {regex}" msgstr "值必须与此正则表达式匹配: {regex}" -#: extras/models/customfields.py:654 +#: netbox/extras/models/customfields.py:654 msgid "Value must be a string." msgstr "值必须为字符串" -#: extras/models/customfields.py:656 +#: netbox/extras/models/customfields.py:656 #, python-brace-format msgid "Value must match regex '{regex}'" msgstr "值必须与正则表达式'{regex}'匹配" -#: extras/models/customfields.py:661 +#: netbox/extras/models/customfields.py:661 msgid "Value must be an integer." msgstr "值必须是整数。" -#: extras/models/customfields.py:664 extras/models/customfields.py:679 +#: netbox/extras/models/customfields.py:664 +#: netbox/extras/models/customfields.py:679 #, python-brace-format msgid "Value must be at least {minimum}" msgstr "值最少为{minimum}" -#: extras/models/customfields.py:668 extras/models/customfields.py:683 +#: netbox/extras/models/customfields.py:668 +#: netbox/extras/models/customfields.py:683 #, python-brace-format msgid "Value must not exceed {maximum}" msgstr "值最大为{maximum}" -#: extras/models/customfields.py:676 +#: netbox/extras/models/customfields.py:676 msgid "Value must be a decimal." msgstr "值必须是十进制。" -#: extras/models/customfields.py:688 +#: netbox/extras/models/customfields.py:688 msgid "Value must be true or false." msgstr "值必须为true或false。" -#: extras/models/customfields.py:696 +#: netbox/extras/models/customfields.py:696 msgid "Date values must be in ISO 8601 format (YYYY-MM-DD)." msgstr "日期格式必须为 ISO 8601 格式(YYYY-MM-DD)." -#: extras/models/customfields.py:705 +#: netbox/extras/models/customfields.py:705 msgid "Date and time values must be in ISO 8601 format (YYYY-MM-DD HH:MM:SS)." msgstr "日期和时间必须遵循 ISO 8601 格式 (YYYY-MM-DD HH:MM:SS)." -#: extras/models/customfields.py:712 +#: netbox/extras/models/customfields.py:712 #, python-brace-format msgid "Invalid choice ({value}) for choice set {choiceset}." msgstr "选项集{choiceset}的选项({value})无效。" -#: extras/models/customfields.py:722 +#: netbox/extras/models/customfields.py:722 #, python-brace-format msgid "Invalid choice(s) ({value}) for choice set {choiceset}." msgstr "选项集{choiceset}的选项({value})无效。" -#: extras/models/customfields.py:731 +#: netbox/extras/models/customfields.py:731 #, python-brace-format msgid "Value must be an object ID, not {type}" msgstr "值必须为对象ID, 不是 {type}" -#: extras/models/customfields.py:737 +#: netbox/extras/models/customfields.py:737 #, python-brace-format msgid "Value must be a list of object IDs, not {type}" msgstr "值必须为对象ID的列表,不是 {type}" -#: extras/models/customfields.py:741 +#: netbox/extras/models/customfields.py:741 #, python-brace-format msgid "Found invalid object ID: {id}" msgstr "发现错误的对象ID: {id}" -#: extras/models/customfields.py:744 +#: netbox/extras/models/customfields.py:744 msgid "Required field cannot be empty." msgstr "必填字段不能为空。" -#: extras/models/customfields.py:763 +#: netbox/extras/models/customfields.py:763 msgid "Base set of predefined choices (optional)" msgstr "预定义选项的基本集合(可选)" -#: extras/models/customfields.py:775 +#: netbox/extras/models/customfields.py:775 msgid "Choices are automatically ordered alphabetically" msgstr "选项会自动按字母顺序排列" -#: extras/models/customfields.py:782 +#: netbox/extras/models/customfields.py:782 msgid "custom field choice set" msgstr "自定义字段选择集" -#: extras/models/customfields.py:783 +#: netbox/extras/models/customfields.py:783 msgid "custom field choice sets" msgstr "自定义字段选择集" -#: extras/models/customfields.py:825 +#: netbox/extras/models/customfields.py:825 msgid "Must define base or extra choices." msgstr "必须定义基本选项或额外选项。" -#: extras/models/customfields.py:849 +#: netbox/extras/models/customfields.py:849 #, python-brace-format msgid "" "Cannot remove choice {choice} as there are {model} objects which reference " "it." msgstr "无法删除选择 {choice} 正如有 {model} 引用它的对象。" -#: extras/models/dashboard.py:18 +#: netbox/extras/models/dashboard.py:18 msgid "layout" msgstr "布局" -#: extras/models/dashboard.py:22 +#: netbox/extras/models/dashboard.py:22 msgid "config" msgstr "配置" -#: extras/models/dashboard.py:27 +#: netbox/extras/models/dashboard.py:27 msgid "dashboard" msgstr "仪表盘" -#: extras/models/dashboard.py:28 +#: netbox/extras/models/dashboard.py:28 msgid "dashboards" msgstr "仪表盘" -#: extras/models/models.py:52 +#: netbox/extras/models/models.py:52 msgid "object types" msgstr "对象类型" -#: extras/models/models.py:53 +#: netbox/extras/models/models.py:53 msgid "The object(s) to which this rule applies." msgstr "应用此规则的对象。" -#: extras/models/models.py:67 +#: netbox/extras/models/models.py:67 msgid "The types of event which will trigger this rule." msgstr "将触发此规则的事件类型。" -#: extras/models/models.py:74 +#: netbox/extras/models/models.py:74 msgid "conditions" msgstr "限制条件" -#: extras/models/models.py:77 +#: netbox/extras/models/models.py:77 msgid "" "A set of conditions which determine whether the event will be generated." msgstr "一组条件,用于确定是否会生成事件。" -#: extras/models/models.py:85 +#: netbox/extras/models/models.py:85 msgid "action type" msgstr "动作类型" -#: extras/models/models.py:104 +#: netbox/extras/models/models.py:104 msgid "Additional data to pass to the action object" msgstr "要传递给动作对象的其他数据" -#: extras/models/models.py:116 +#: netbox/extras/models/models.py:116 msgid "event rule" msgstr "事件规则" -#: extras/models/models.py:117 +#: netbox/extras/models/models.py:117 msgid "event rules" msgstr "事件规则" -#: extras/models/models.py:166 +#: netbox/extras/models/models.py:166 msgid "" "This URL will be called using the HTTP method defined when the webhook is " "called. Jinja2 template processing is supported with the same context as the" " request body." msgstr "此URL将使用调用webhook时定义的HTTP方法进行调用。Jinja2模板处理支持与请求主体相同的描述。" -#: extras/models/models.py:181 +#: netbox/extras/models/models.py:181 msgid "" "The complete list of official content types is available 点击这里." -#: extras/models/models.py:186 +#: netbox/extras/models/models.py:186 msgid "additional headers" msgstr "附加标头" -#: extras/models/models.py:189 +#: netbox/extras/models/models.py:189 msgid "" "User-supplied HTTP headers to be sent with the request in addition to the " "HTTP content type. Headers should be defined in the format Name: " @@ -7871,11 +8462,11 @@ msgstr "" "除了HTTP内容类型之外,还要与请求一起发送用户提供的HTTP标头。标头的定义格式应为 名称: 值. " "Jinja2模板处理支持与请求主体相同的实例(如下)。" -#: extras/models/models.py:195 +#: netbox/extras/models/models.py:195 msgid "body template" msgstr "内容模版" -#: extras/models/models.py:198 +#: netbox/extras/models/models.py:198 msgid "" "Jinja2 template for a custom request body. If blank, a JSON object " "representing the change will be included. Available context data includes: " @@ -7886,11 +8477,11 @@ msgstr "" "模块, 时间戳, 用户名, 请求id, 和 " "数据." -#: extras/models/models.py:204 +#: netbox/extras/models/models.py:204 msgid "secret" msgstr "秘钥" -#: extras/models/models.py:208 +#: netbox/extras/models/models.py:208 msgid "" "When provided, the request will include a X-Hook-Signature " "header containing a HMAC hex digest of the payload body using the secret as " @@ -7899,4247 +8490,4441 @@ msgstr "" "当提供时,请求将包括一个X-Hook-Signature " "该标头包含使用机密作为密钥的有效载荷主体的HMAC十六进制摘要。秘钥不会在请求中传输。" -#: extras/models/models.py:215 +#: netbox/extras/models/models.py:215 msgid "Enable SSL certificate verification. Disable with caution!" msgstr "启用 SSL 证书验证。请谨慎禁用!" -#: extras/models/models.py:221 templates/extras/webhook.html:51 +#: netbox/extras/models/models.py:221 netbox/templates/extras/webhook.html:51 msgid "CA File Path" msgstr "CA证书文件路径" -#: extras/models/models.py:223 +#: netbox/extras/models/models.py:223 msgid "" "The specific CA certificate file to use for SSL verification. Leave blank to" " use the system defaults." msgstr "用于SSL验证的CA证书文件。空为使用系统默认值。" -#: extras/models/models.py:234 +#: netbox/extras/models/models.py:234 msgid "webhook" msgstr "webhook" -#: extras/models/models.py:235 +#: netbox/extras/models/models.py:235 msgid "webhooks" msgstr "webhooks" -#: extras/models/models.py:253 +#: netbox/extras/models/models.py:253 msgid "Do not specify a CA certificate file if SSL verification is disabled." msgstr "如果禁用了SSL验证,请不要指定CA证书文件。" -#: extras/models/models.py:293 +#: netbox/extras/models/models.py:293 msgid "The object type(s) to which this link applies." msgstr "此链接所应用的对象类型。" -#: extras/models/models.py:305 +#: netbox/extras/models/models.py:305 msgid "link text" msgstr "链接文本" -#: extras/models/models.py:306 +#: netbox/extras/models/models.py:306 msgid "Jinja2 template code for link text" msgstr "链接文本的Jinja2模板代码" -#: extras/models/models.py:309 +#: netbox/extras/models/models.py:309 msgid "link URL" msgstr "链接URL" -#: extras/models/models.py:310 +#: netbox/extras/models/models.py:310 msgid "Jinja2 template code for link URL" msgstr "链接URL的Jinja2模板代码" -#: extras/models/models.py:320 +#: netbox/extras/models/models.py:320 msgid "Links with the same group will appear as a dropdown menu" msgstr "同一类的链接将显示为下拉菜单" -#: extras/models/models.py:330 +#: netbox/extras/models/models.py:330 msgid "new window" msgstr "新窗口" -#: extras/models/models.py:332 +#: netbox/extras/models/models.py:332 msgid "Force link to open in a new window" msgstr "强制链接在新窗口中打开" -#: extras/models/models.py:341 +#: netbox/extras/models/models.py:341 msgid "custom link" msgstr "自定义链接" -#: extras/models/models.py:342 +#: netbox/extras/models/models.py:342 msgid "custom links" msgstr "自定义链接" -#: extras/models/models.py:389 +#: netbox/extras/models/models.py:389 msgid "The object type(s) to which this template applies." msgstr "应用此模板的对象类型。" -#: extras/models/models.py:402 +#: netbox/extras/models/models.py:402 msgid "" "Jinja2 template code. The list of objects being exported is passed as a " "context variable named queryset." msgstr "Jinja2模板代码。要导出的对象列表作为queryset的实例变量传递." -#: extras/models/models.py:410 +#: netbox/extras/models/models.py:410 msgid "Defaults to text/plain; charset=utf-8" msgstr "默认为text/plain; charset=utf-8" -#: extras/models/models.py:413 +#: netbox/extras/models/models.py:413 msgid "file extension" msgstr "文件扩展名" -#: extras/models/models.py:416 +#: netbox/extras/models/models.py:416 msgid "Extension to append to the rendered filename" msgstr "附加到文件名的扩展名" -#: extras/models/models.py:419 +#: netbox/extras/models/models.py:419 msgid "as attachment" msgstr "作为附件" -#: extras/models/models.py:421 +#: netbox/extras/models/models.py:421 msgid "Download file as attachment" msgstr "将文件作为附件下载" -#: extras/models/models.py:430 +#: netbox/extras/models/models.py:430 msgid "export template" msgstr "导出模版" -#: extras/models/models.py:431 +#: netbox/extras/models/models.py:431 msgid "export templates" msgstr "导出模版" -#: extras/models/models.py:448 +#: netbox/extras/models/models.py:448 #, python-brace-format msgid "\"{name}\" is a reserved name. Please choose a different name." msgstr "\"{name}\"是保留名称。请选择其他名称。" -#: extras/models/models.py:498 +#: netbox/extras/models/models.py:498 msgid "The object type(s) to which this filter applies." msgstr "应用此筛选器的对象类型。" -#: extras/models/models.py:530 +#: netbox/extras/models/models.py:530 msgid "shared" msgstr "共享性" -#: extras/models/models.py:543 +#: netbox/extras/models/models.py:543 msgid "saved filter" msgstr "已保存的过滤器" -#: extras/models/models.py:544 +#: netbox/extras/models/models.py:544 msgid "saved filters" msgstr "已保存的过滤器" -#: extras/models/models.py:562 +#: netbox/extras/models/models.py:562 msgid "Filter parameters must be stored as a dictionary of keyword arguments." msgstr "筛选器参数必须存储为关键字参数的字典。" -#: extras/models/models.py:590 +#: netbox/extras/models/models.py:590 msgid "image height" msgstr "图片高度" -#: extras/models/models.py:593 +#: netbox/extras/models/models.py:593 msgid "image width" msgstr "图片宽度" -#: extras/models/models.py:610 +#: netbox/extras/models/models.py:610 msgid "image attachment" msgstr "图片附件" -#: extras/models/models.py:611 +#: netbox/extras/models/models.py:611 msgid "image attachments" msgstr "图片附件" -#: extras/models/models.py:625 +#: netbox/extras/models/models.py:625 #, python-brace-format msgid "Image attachments cannot be assigned to this object type ({type})." msgstr "无法将图片附件分配给此对象类型({type})." -#: extras/models/models.py:688 +#: netbox/extras/models/models.py:688 msgid "kind" msgstr "类型" -#: extras/models/models.py:702 +#: netbox/extras/models/models.py:702 msgid "journal entry" msgstr "日志条目" -#: extras/models/models.py:703 +#: netbox/extras/models/models.py:703 msgid "journal entries" msgstr "日志条目" -#: extras/models/models.py:718 +#: netbox/extras/models/models.py:718 #, python-brace-format msgid "Journaling is not supported for this object type ({type})." msgstr "此对象类型({type})不支持备忘。" -#: extras/models/models.py:760 +#: netbox/extras/models/models.py:760 msgid "bookmark" msgstr "书签" -#: extras/models/models.py:761 +#: netbox/extras/models/models.py:761 msgid "bookmarks" msgstr "书签" -#: extras/models/models.py:774 +#: netbox/extras/models/models.py:774 #, python-brace-format msgid "Bookmarks cannot be assigned to this object type ({type})." msgstr "无法将书签分配给此对象类型({type})。" -#: extras/models/notifications.py:43 +#: netbox/extras/models/notifications.py:43 msgid "read" msgstr "读" -#: extras/models/notifications.py:66 +#: netbox/extras/models/notifications.py:66 msgid "event" msgstr "事件" -#: extras/models/notifications.py:84 +#: netbox/extras/models/notifications.py:84 msgid "notification" msgstr "通知" -#: extras/models/notifications.py:85 +#: netbox/extras/models/notifications.py:85 msgid "notifications" msgstr "通知" -#: extras/models/notifications.py:99 extras/models/notifications.py:234 +#: netbox/extras/models/notifications.py:99 +#: netbox/extras/models/notifications.py:234 #, python-brace-format msgid "Objects of this type ({type}) do not support notifications." msgstr "这种类型的对象 ({type}) 不支持通知。" -#: extras/models/notifications.py:137 users/models/users.py:58 -#: users/models/users.py:77 +#: netbox/extras/models/notifications.py:137 netbox/users/models/users.py:58 +#: netbox/users/models/users.py:77 msgid "groups" msgstr "组" -#: extras/models/notifications.py:143 users/models/users.py:93 +#: netbox/extras/models/notifications.py:143 netbox/users/models/users.py:93 msgid "users" msgstr "用户" -#: extras/models/notifications.py:152 +#: netbox/extras/models/notifications.py:152 msgid "notification group" msgstr "通知组" -#: extras/models/notifications.py:153 +#: netbox/extras/models/notifications.py:153 msgid "notification groups" msgstr "通知组" -#: extras/models/notifications.py:217 +#: netbox/extras/models/notifications.py:217 msgid "subscription" msgstr "订阅" -#: extras/models/notifications.py:218 +#: netbox/extras/models/notifications.py:218 msgid "subscriptions" msgstr "订阅" -#: extras/models/scripts.py:42 +#: netbox/extras/models/scripts.py:42 msgid "is executable" msgstr "是可执行的" -#: extras/models/scripts.py:64 +#: netbox/extras/models/scripts.py:64 msgid "script" msgstr "脚本" -#: extras/models/scripts.py:65 +#: netbox/extras/models/scripts.py:65 msgid "scripts" msgstr "脚本" -#: extras/models/scripts.py:111 +#: netbox/extras/models/scripts.py:111 msgid "script module" msgstr "脚本模块" -#: extras/models/scripts.py:112 +#: netbox/extras/models/scripts.py:112 msgid "script modules" msgstr "脚本模块" -#: extras/models/search.py:22 +#: netbox/extras/models/search.py:22 msgid "timestamp" msgstr "时间戳" -#: extras/models/search.py:37 +#: netbox/extras/models/search.py:37 msgid "field" msgstr "字段" -#: extras/models/search.py:45 +#: netbox/extras/models/search.py:45 msgid "value" msgstr "值" -#: extras/models/search.py:56 +#: netbox/extras/models/search.py:56 msgid "cached value" msgstr "缓存的值" -#: extras/models/search.py:57 +#: netbox/extras/models/search.py:57 msgid "cached values" msgstr "缓存的值" -#: extras/models/staging.py:44 +#: netbox/extras/models/staging.py:44 msgid "branch" msgstr "分支" -#: extras/models/staging.py:45 +#: netbox/extras/models/staging.py:45 msgid "branches" msgstr "分支" -#: extras/models/staging.py:97 +#: netbox/extras/models/staging.py:97 msgid "staged change" msgstr "暂存变更" -#: extras/models/staging.py:98 +#: netbox/extras/models/staging.py:98 msgid "staged changes" msgstr "暂存变更" -#: extras/models/tags.py:40 +#: netbox/extras/models/tags.py:40 msgid "The object type(s) to which this tag can be applied." msgstr "可以应用此标记的对象类型。" -#: extras/models/tags.py:49 +#: netbox/extras/models/tags.py:49 msgid "tag" msgstr "标签" -#: extras/models/tags.py:50 +#: netbox/extras/models/tags.py:50 msgid "tags" msgstr "标签" -#: extras/models/tags.py:78 +#: netbox/extras/models/tags.py:78 msgid "tagged item" msgstr "标记的项目" -#: extras/models/tags.py:79 +#: netbox/extras/models/tags.py:79 msgid "tagged items" msgstr "标记的项目" -#: extras/scripts.py:429 +#: netbox/extras/scripts.py:429 msgid "Script Data" msgstr "脚本数据" -#: extras/scripts.py:433 +#: netbox/extras/scripts.py:433 msgid "Script Execution Parameters" msgstr "脚本执行参数" -#: extras/tables/columns.py:12 templates/htmx/notifications.html:18 +#: netbox/extras/tables/columns.py:12 +#: netbox/templates/htmx/notifications.html:18 msgid "Dismiss" msgstr "解雇" -#: extras/tables/tables.py:62 extras/tables/tables.py:159 -#: extras/tables/tables.py:184 extras/tables/tables.py:250 -#: extras/tables/tables.py:276 extras/tables/tables.py:412 -#: extras/tables/tables.py:446 templates/extras/customfield.html:105 -#: templates/extras/eventrule.html:27 templates/users/objectpermission.html:64 -#: users/tables.py:80 +#: netbox/extras/tables/tables.py:62 netbox/extras/tables/tables.py:159 +#: netbox/extras/tables/tables.py:184 netbox/extras/tables/tables.py:250 +#: netbox/extras/tables/tables.py:276 netbox/extras/tables/tables.py:412 +#: netbox/extras/tables/tables.py:446 +#: netbox/templates/extras/customfield.html:105 +#: netbox/templates/extras/eventrule.html:27 +#: netbox/templates/users/objectpermission.html:64 netbox/users/tables.py:80 msgid "Object Types" msgstr "对象类型" -#: extras/tables/tables.py:69 +#: netbox/extras/tables/tables.py:69 msgid "Validate Uniqueness" msgstr "验证唯一性" -#: extras/tables/tables.py:73 +#: netbox/extras/tables/tables.py:73 msgid "Visible" msgstr "可见" -#: extras/tables/tables.py:76 +#: netbox/extras/tables/tables.py:76 msgid "Editable" msgstr "可编辑" -#: extras/tables/tables.py:82 +#: netbox/extras/tables/tables.py:82 msgid "Related Object Type" msgstr "相关对象类型" -#: extras/tables/tables.py:86 templates/extras/customfield.html:51 +#: netbox/extras/tables/tables.py:86 +#: netbox/templates/extras/customfield.html:51 msgid "Choice Set" msgstr "选项集" -#: extras/tables/tables.py:94 +#: netbox/extras/tables/tables.py:94 msgid "Is Cloneable" msgstr "可复制" -#: extras/tables/tables.py:98 templates/extras/customfield.html:118 +#: netbox/extras/tables/tables.py:98 +#: netbox/templates/extras/customfield.html:118 msgid "Minimum Value" msgstr "最小值" -#: extras/tables/tables.py:101 templates/extras/customfield.html:122 +#: netbox/extras/tables/tables.py:101 +#: netbox/templates/extras/customfield.html:122 msgid "Maximum Value" msgstr "最大值" -#: extras/tables/tables.py:104 +#: netbox/extras/tables/tables.py:104 msgid "Validation Regex" msgstr "验证正则表达式" -#: extras/tables/tables.py:137 +#: netbox/extras/tables/tables.py:137 msgid "Count" msgstr "计数" -#: extras/tables/tables.py:140 +#: netbox/extras/tables/tables.py:140 msgid "Order Alphabetically" msgstr "按字母顺序排列" -#: extras/tables/tables.py:165 templates/extras/customlink.html:33 +#: netbox/extras/tables/tables.py:165 +#: netbox/templates/extras/customlink.html:33 msgid "New Window" msgstr "新窗口" -#: extras/tables/tables.py:187 +#: netbox/extras/tables/tables.py:187 msgid "As Attachment" msgstr "作为附件" -#: extras/tables/tables.py:195 extras/tables/tables.py:487 -#: extras/tables/tables.py:522 templates/core/datafile.html:24 -#: templates/dcim/device/render_config.html:22 -#: templates/extras/configcontext.html:39 -#: templates/extras/configtemplate.html:31 -#: templates/extras/exporttemplate.html:45 -#: templates/generic/bulk_import.html:35 -#: templates/virtualization/virtualmachine/render_config.html:22 +#: netbox/extras/tables/tables.py: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/generic/bulk_import.html:35 +#: netbox/templates/virtualization/virtualmachine/render_config.html:22 msgid "Data File" msgstr "数据文件" -#: extras/tables/tables.py:200 extras/tables/tables.py:499 -#: extras/tables/tables.py:527 +#: netbox/extras/tables/tables.py:200 netbox/extras/tables/tables.py:499 +#: netbox/extras/tables/tables.py:527 msgid "Synced" msgstr "同步" -#: extras/tables/tables.py:227 +#: netbox/extras/tables/tables.py:227 msgid "Image" msgstr "图片" -#: extras/tables/tables.py:232 +#: netbox/extras/tables/tables.py:232 msgid "Size (Bytes)" msgstr "大小 (Bytes)" -#: extras/tables/tables.py:339 +#: netbox/extras/tables/tables.py:339 msgid "Read" msgstr "阅读" -#: extras/tables/tables.py:382 +#: netbox/extras/tables/tables.py:382 msgid "SSL Validation" msgstr "SSL验证" -#: extras/tables/tables.py:418 templates/extras/eventrule.html:37 +#: netbox/extras/tables/tables.py:418 +#: netbox/templates/extras/eventrule.html:37 msgid "Event Types" msgstr "事件类型" -#: extras/tables/tables.py:535 netbox/navigation/menu.py:77 -#: templates/dcim/devicerole.html:8 +#: netbox/extras/tables/tables.py:535 netbox/netbox/navigation/menu.py:77 +#: netbox/templates/dcim/devicerole.html:8 msgid "Device Roles" msgstr "设备角色" -#: extras/tables/tables.py:587 +#: netbox/extras/tables/tables.py:587 msgid "Comments (Short)" msgstr "评论(简短)" -#: extras/tables/tables.py:606 extras/tables/tables.py:640 +#: netbox/extras/tables/tables.py:606 netbox/extras/tables/tables.py:640 msgid "Line" msgstr "线" -#: extras/tables/tables.py:613 extras/tables/tables.py:650 +#: netbox/extras/tables/tables.py:613 netbox/extras/tables/tables.py:650 msgid "Level" msgstr "等级" -#: extras/tables/tables.py:619 extras/tables/tables.py:659 +#: netbox/extras/tables/tables.py:619 netbox/extras/tables/tables.py:659 msgid "Message" msgstr "信息" -#: extras/tables/tables.py:643 +#: netbox/extras/tables/tables.py:643 msgid "Method" msgstr "方法" -#: extras/validators.py:15 +#: netbox/extras/validators.py:15 #, python-format msgid "Ensure this value is equal to %(limit_value)s." msgstr "请确保值等于 %(limit_value)s." -#: extras/validators.py:26 +#: netbox/extras/validators.py:26 #, python-format msgid "Ensure this value does not equal %(limit_value)s." msgstr "请确保值不等于 %(limit_value)s." -#: extras/validators.py:37 +#: netbox/extras/validators.py:37 msgid "This field must be empty." msgstr "此字段必须为空" -#: extras/validators.py:52 +#: netbox/extras/validators.py:52 msgid "This field must not be empty." msgstr "此字段必须不为空" -#: extras/validators.py:94 +#: netbox/extras/validators.py:94 msgid "Validation rules must be passed as a dictionary" msgstr "验证规则必须以字典形式传递" -#: extras/validators.py:119 +#: netbox/extras/validators.py:119 #, python-brace-format msgid "Custom validation failed for {attribute}: {exception}" msgstr "{attribute} 的自定义验证失败:{exception}" -#: extras/validators.py:133 +#: netbox/extras/validators.py:133 #, python-brace-format msgid "Invalid attribute \"{name}\" for request" msgstr "请求的属性“{name}”无效" -#: extras/validators.py:150 +#: netbox/extras/validators.py:150 #, python-brace-format msgid "Invalid attribute \"{name}\" for {model}" msgstr "{model}的属性 \"{name}\"无效" -#: extras/views.py:960 +#: netbox/extras/views.py:960 msgid "Your dashboard has been reset." msgstr "仪表盘已重置。" -#: extras/views.py:1006 +#: netbox/extras/views.py:1006 msgid "Added widget: " msgstr "添加小组件:" -#: extras/views.py:1047 +#: netbox/extras/views.py:1047 msgid "Updated widget: " msgstr "更新小组件:" -#: extras/views.py:1083 +#: netbox/extras/views.py:1083 msgid "Deleted widget: " msgstr "删除小组件:" -#: extras/views.py:1085 +#: netbox/extras/views.py:1085 msgid "Error deleting widget: " msgstr "删除小组件错误:" -#: extras/views.py:1172 +#: netbox/extras/views.py:1175 msgid "Unable to run script: RQ worker process not running." msgstr "无法运行脚本:RQ worker 进程未运行。" -#: ipam/api/field_serializers.py:17 +#: netbox/ipam/api/field_serializers.py:17 msgid "Enter a valid IPv4 or IPv6 address with optional mask." msgstr "输入有效的 IPv4 或 IPv6 地址以及可选掩码。" -#: ipam/api/field_serializers.py:24 +#: netbox/ipam/api/field_serializers.py:24 #, python-brace-format msgid "Invalid IP address format: {data}" msgstr "IP 地址格式无效: {data}" -#: ipam/api/field_serializers.py:37 +#: netbox/ipam/api/field_serializers.py:37 msgid "Enter a valid IPv4 or IPv6 prefix and mask in CIDR notation." msgstr "请输入有效的IPv4或IPv6前缀和掩码(格式为 CIDR)。" -#: ipam/api/field_serializers.py:44 +#: netbox/ipam/api/field_serializers.py:44 #, python-brace-format msgid "Invalid IP prefix format: {data}" msgstr "无效的IP前缀格式: {data}" -#: ipam/api/views.py:358 +#: netbox/ipam/api/views.py:358 msgid "" "Insufficient space is available to accommodate the requested prefix size(s)" msgstr "可用 IP 不足,无法容纳此请求的前缀大小" -#: ipam/choices.py:30 +#: netbox/ipam/choices.py:30 msgid "Container" msgstr "容器" -#: ipam/choices.py:72 +#: netbox/ipam/choices.py:72 msgid "DHCP" msgstr "DHCP" -#: ipam/choices.py:73 +#: netbox/ipam/choices.py:73 msgid "SLAAC" msgstr "SLAAC" -#: ipam/choices.py:89 +#: netbox/ipam/choices.py:89 msgid "Loopback" msgstr "Loopback" -#: ipam/choices.py:91 +#: netbox/ipam/choices.py:91 msgid "Anycast" msgstr "Anycast" -#: ipam/choices.py:115 +#: netbox/ipam/choices.py:115 msgid "Standard" msgstr "标准的" -#: ipam/choices.py:120 +#: netbox/ipam/choices.py:120 msgid "CheckPoint" msgstr "检查点" -#: ipam/choices.py:123 +#: netbox/ipam/choices.py:123 msgid "Cisco" msgstr "思科" -#: ipam/choices.py:137 +#: netbox/ipam/choices.py:137 msgid "Plaintext" msgstr "明文" -#: ipam/fields.py:36 +#: netbox/ipam/fields.py:36 #, python-brace-format msgid "Invalid IP address format: {address}" msgstr "IP 地址格式无效: {address}" -#: ipam/filtersets.py:48 vpn/filtersets.py:304 +#: netbox/ipam/filtersets.py:48 netbox/vpn/filtersets.py:304 msgid "Import target" msgstr "引入target" -#: ipam/filtersets.py:54 vpn/filtersets.py:310 +#: netbox/ipam/filtersets.py:54 netbox/vpn/filtersets.py:310 msgid "Import target (name)" msgstr "引入target(名称)" -#: ipam/filtersets.py:59 vpn/filtersets.py:315 +#: netbox/ipam/filtersets.py:59 netbox/vpn/filtersets.py:315 msgid "Export target" msgstr "输出target" -#: ipam/filtersets.py:65 vpn/filtersets.py:321 +#: netbox/ipam/filtersets.py:65 netbox/vpn/filtersets.py:321 msgid "Export target (name)" msgstr "输出target(名称)" -#: ipam/filtersets.py:86 +#: netbox/ipam/filtersets.py:86 msgid "Importing VRF" msgstr "导入VRF" -#: ipam/filtersets.py:92 +#: netbox/ipam/filtersets.py:92 msgid "Import VRF (RD)" msgstr "导入 VRF (RD)" -#: ipam/filtersets.py:97 +#: netbox/ipam/filtersets.py:97 msgid "Exporting VRF" msgstr "导出 VRF" -#: ipam/filtersets.py:103 +#: netbox/ipam/filtersets.py:103 msgid "Export VRF (RD)" msgstr "导出 VRF (RD)" -#: ipam/filtersets.py:108 +#: netbox/ipam/filtersets.py:108 msgid "Importing L2VPN" msgstr "导入 L2VPN" -#: ipam/filtersets.py:114 +#: netbox/ipam/filtersets.py:114 msgid "Importing L2VPN (identifier)" msgstr "导入 L2VPN (identifier)" -#: ipam/filtersets.py:119 +#: netbox/ipam/filtersets.py:119 msgid "Exporting L2VPN" msgstr "导出 L2VPN" -#: ipam/filtersets.py:125 +#: netbox/ipam/filtersets.py:125 msgid "Exporting L2VPN (identifier)" msgstr "导出L2VPN(标识符)" -#: ipam/filtersets.py:155 ipam/filtersets.py:281 ipam/forms/model_forms.py:229 -#: ipam/tables/ip.py:212 templates/ipam/prefix.html:12 +#: netbox/ipam/filtersets.py:155 netbox/ipam/filtersets.py:281 +#: netbox/ipam/forms/model_forms.py:229 netbox/ipam/tables/ip.py:212 +#: netbox/templates/ipam/prefix.html:12 msgid "Prefix" msgstr "前缀" -#: ipam/filtersets.py:159 ipam/filtersets.py:198 ipam/filtersets.py:221 +#: netbox/ipam/filtersets.py:159 netbox/ipam/filtersets.py:198 +#: netbox/ipam/filtersets.py:221 msgid "RIR (ID)" msgstr "RIR(ID)" -#: ipam/filtersets.py:165 ipam/filtersets.py:204 ipam/filtersets.py:227 +#: netbox/ipam/filtersets.py:165 netbox/ipam/filtersets.py:204 +#: netbox/ipam/filtersets.py:227 msgid "RIR (slug)" msgstr "RIP(缩写)" -#: ipam/filtersets.py:285 +#: netbox/ipam/filtersets.py:285 msgid "Within prefix" msgstr "此前缀包含的" -#: ipam/filtersets.py:289 +#: netbox/ipam/filtersets.py:289 msgid "Within and including prefix" msgstr "此前缀包含的(包含此前缀)" -#: ipam/filtersets.py:293 +#: netbox/ipam/filtersets.py:293 msgid "Prefixes which contain this prefix or IP" msgstr "包含此前缀或IP的前缀" -#: ipam/filtersets.py:304 ipam/filtersets.py:572 ipam/forms/bulk_edit.py:343 -#: ipam/forms/filtersets.py:196 ipam/forms/filtersets.py:331 +#: netbox/ipam/filtersets.py:304 netbox/ipam/filtersets.py:572 +#: netbox/ipam/forms/bulk_edit.py:343 netbox/ipam/forms/filtersets.py:196 +#: netbox/ipam/forms/filtersets.py:331 msgid "Mask length" msgstr "掩码长度" -#: ipam/filtersets.py:373 vpn/filtersets.py:427 +#: netbox/ipam/filtersets.py:373 netbox/vpn/filtersets.py:427 msgid "VLAN (ID)" msgstr "VLAN (ID)" -#: ipam/filtersets.py:377 vpn/filtersets.py:422 +#: netbox/ipam/filtersets.py:377 netbox/vpn/filtersets.py:422 msgid "VLAN number (1-4094)" msgstr "VLAN 号(1-4094)" -#: ipam/filtersets.py:471 ipam/filtersets.py:475 ipam/filtersets.py:567 -#: ipam/forms/model_forms.py:463 templates/tenancy/contact.html:53 -#: tenancy/forms/bulk_edit.py:113 +#: netbox/ipam/filtersets.py:471 netbox/ipam/filtersets.py:475 +#: netbox/ipam/filtersets.py:567 netbox/ipam/forms/model_forms.py:496 +#: netbox/templates/tenancy/contact.html:53 +#: netbox/tenancy/forms/bulk_edit.py:113 msgid "Address" msgstr "地址" -#: ipam/filtersets.py:479 +#: netbox/ipam/filtersets.py:479 msgid "Ranges which contain this prefix or IP" msgstr "包含此前缀或IP的范围" -#: ipam/filtersets.py:507 ipam/filtersets.py:563 +#: netbox/ipam/filtersets.py:507 netbox/ipam/filtersets.py:563 msgid "Parent prefix" msgstr "上级前缀" -#: ipam/filtersets.py:616 ipam/filtersets.py:856 ipam/filtersets.py:1131 -#: vpn/filtersets.py:385 +#: netbox/ipam/filtersets.py:616 netbox/ipam/filtersets.py:856 +#: netbox/ipam/filtersets.py:1131 netbox/vpn/filtersets.py:385 msgid "Virtual machine (name)" msgstr "虚拟机(名称)" -#: ipam/filtersets.py:621 ipam/filtersets.py:861 ipam/filtersets.py:1125 -#: virtualization/filtersets.py:282 virtualization/filtersets.py:321 -#: vpn/filtersets.py:390 +#: netbox/ipam/filtersets.py:621 netbox/ipam/filtersets.py:861 +#: netbox/ipam/filtersets.py:1125 netbox/virtualization/filtersets.py:282 +#: netbox/virtualization/filtersets.py:321 netbox/vpn/filtersets.py:390 msgid "Virtual machine (ID)" msgstr "虚拟机(ID)" -#: ipam/filtersets.py:627 vpn/filtersets.py:97 vpn/filtersets.py:396 +#: netbox/ipam/filtersets.py:627 netbox/vpn/filtersets.py:97 +#: netbox/vpn/filtersets.py:396 msgid "Interface (name)" msgstr "接口(名称)" -#: ipam/filtersets.py:638 vpn/filtersets.py:108 vpn/filtersets.py:407 +#: netbox/ipam/filtersets.py:638 netbox/vpn/filtersets.py:108 +#: netbox/vpn/filtersets.py:407 msgid "VM interface (name)" msgstr "虚拟接口(名称)" -#: ipam/filtersets.py:643 vpn/filtersets.py:113 +#: netbox/ipam/filtersets.py:643 netbox/vpn/filtersets.py:113 msgid "VM interface (ID)" msgstr "虚拟接口(ID)" -#: ipam/filtersets.py:648 +#: netbox/ipam/filtersets.py:648 msgid "FHRP group (ID)" msgstr "FHRP 组 (ID)" -#: ipam/filtersets.py:652 +#: netbox/ipam/filtersets.py:652 msgid "Is assigned to an interface" msgstr "分配给接口" -#: ipam/filtersets.py:656 +#: netbox/ipam/filtersets.py:656 msgid "Is assigned" msgstr "已分配" -#: ipam/filtersets.py:668 +#: netbox/ipam/filtersets.py:668 msgid "Service (ID)" msgstr "服务 (ID)" -#: ipam/filtersets.py:673 +#: netbox/ipam/filtersets.py:673 msgid "NAT inside IP address (ID)" msgstr "NAT 内部 IP 地址 (ID)" -#: ipam/filtersets.py:1041 ipam/forms/bulk_import.py:322 +#: netbox/ipam/filtersets.py:1041 netbox/ipam/forms/bulk_import.py:322 msgid "Assigned interface" msgstr "分配的接口" -#: ipam/filtersets.py:1046 +#: netbox/ipam/filtersets.py:1046 msgid "Assigned VM interface" msgstr "分配的虚拟机接口" -#: ipam/filtersets.py:1136 +#: netbox/ipam/filtersets.py:1136 msgid "IP address (ID)" msgstr "IP 地址 (ID)" -#: ipam/filtersets.py:1142 ipam/models/ip.py:788 +#: netbox/ipam/filtersets.py:1142 netbox/ipam/models/ip.py:788 msgid "IP address" msgstr "IP 地址" -#: ipam/filtersets.py:1167 +#: netbox/ipam/filtersets.py:1167 msgid "Primary IPv4 (ID)" msgstr "首选 IPv4(ID)" -#: ipam/filtersets.py:1172 +#: netbox/ipam/filtersets.py:1172 msgid "Primary IPv6 (ID)" msgstr "首选IPv6(ID)" -#: ipam/formfields.py:14 +#: netbox/ipam/formfields.py:14 msgid "Enter a valid IPv4 or IPv6 address (without a mask)." msgstr "输入有效的 IPv4 或 IPv6 地址(不带掩码)。" -#: ipam/formfields.py:32 +#: netbox/ipam/formfields.py:32 #, python-brace-format msgid "Invalid IPv4/IPv6 address format: {address}" msgstr "IPv4/IPv6 地址格式无效:{address}" -#: ipam/formfields.py:37 +#: netbox/ipam/formfields.py:37 msgid "This field requires an IP address without a mask." msgstr "该字段需要一个不带掩码的 IP 地址。" -#: ipam/formfields.py:39 ipam/formfields.py:61 +#: netbox/ipam/formfields.py:39 netbox/ipam/formfields.py:61 msgid "Please specify a valid IPv4 or IPv6 address." msgstr "请指定有效的 IPv4 或 IPv6 地址。" -#: ipam/formfields.py:44 +#: netbox/ipam/formfields.py:44 msgid "Enter a valid IPv4 or IPv6 address (with CIDR mask)." msgstr "输入有效的 IPv4 或 IPv6 地址(带有 CIDR 掩码)。" -#: ipam/formfields.py:56 +#: netbox/ipam/formfields.py:56 msgid "CIDR mask (e.g. /24) is required." msgstr "需要 CIDR 掩码(例如/24)" -#: ipam/forms/bulk_create.py:13 +#: netbox/ipam/forms/bulk_create.py:13 msgid "Address pattern" msgstr "地址模式" -#: ipam/forms/bulk_edit.py:50 +#: netbox/ipam/forms/bulk_edit.py:50 msgid "Enforce unique space" msgstr "强制使用唯一空间" -#: ipam/forms/bulk_edit.py:88 +#: netbox/ipam/forms/bulk_edit.py:88 msgid "Is private" msgstr "私有的" -#: ipam/forms/bulk_edit.py:109 ipam/forms/bulk_edit.py:138 -#: ipam/forms/bulk_edit.py:163 ipam/forms/bulk_import.py:89 -#: ipam/forms/bulk_import.py:109 ipam/forms/bulk_import.py:129 -#: ipam/forms/filtersets.py:110 ipam/forms/filtersets.py:125 -#: ipam/forms/filtersets.py:148 ipam/forms/model_forms.py:96 -#: ipam/forms/model_forms.py:109 ipam/forms/model_forms.py:131 -#: ipam/forms/model_forms.py:149 ipam/models/asns.py:31 -#: ipam/models/asns.py:103 ipam/models/ip.py:71 ipam/models/ip.py:90 -#: ipam/tables/asn.py:20 ipam/tables/asn.py:45 -#: templates/ipam/aggregate.html:18 templates/ipam/asn.html:27 -#: templates/ipam/asnrange.html:19 templates/ipam/rir.html:19 +#: netbox/ipam/forms/bulk_edit.py: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/tables/asn.py:45 netbox/templates/ipam/aggregate.html:18 +#: netbox/templates/ipam/asn.html:27 netbox/templates/ipam/asnrange.html:19 +#: netbox/templates/ipam/rir.html:19 msgid "RIR" msgstr "区域互联网注册管理机构" -#: ipam/forms/bulk_edit.py:171 +#: netbox/ipam/forms/bulk_edit.py:171 msgid "Date added" msgstr "添加日期" -#: ipam/forms/bulk_edit.py:229 ipam/forms/model_forms.py:586 -#: ipam/forms/model_forms.py:633 ipam/tables/ip.py:251 -#: templates/ipam/vlan_edit.html:37 templates/ipam/vlangroup.html:27 +#: 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/templates/ipam/vlangroup.html:27 msgid "VLAN Group" msgstr "VLAN组" -#: ipam/forms/bulk_edit.py:234 ipam/forms/bulk_import.py:185 -#: ipam/forms/filtersets.py:256 ipam/forms/model_forms.py:218 -#: ipam/models/vlans.py:234 ipam/tables/ip.py:255 -#: templates/ipam/prefix.html:60 templates/ipam/vlan.html:12 -#: templates/ipam/vlan/base.html:6 templates/ipam/vlan_edit.html:10 -#: templates/wireless/wirelesslan.html:30 vpn/forms/bulk_import.py:304 -#: vpn/forms/filtersets.py:284 vpn/forms/model_forms.py:433 -#: vpn/forms/model_forms.py:452 wireless/forms/bulk_edit.py:55 -#: wireless/forms/bulk_import.py:48 wireless/forms/model_forms.py:48 -#: wireless/models.py:102 +#: 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/templates/ipam/vlan/base.html:6 +#: netbox/templates/ipam/vlan_edit.html:10 +#: netbox/templates/wireless/wirelesslan.html:30 +#: netbox/vpn/forms/bulk_import.py:304 netbox/vpn/forms/filtersets.py:284 +#: netbox/vpn/forms/model_forms.py:433 netbox/vpn/forms/model_forms.py:452 +#: netbox/wireless/forms/bulk_edit.py:55 +#: netbox/wireless/forms/bulk_import.py:48 +#: netbox/wireless/forms/model_forms.py:48 netbox/wireless/models.py:102 msgid "VLAN" msgstr "VLAN" -#: ipam/forms/bulk_edit.py:245 +#: netbox/ipam/forms/bulk_edit.py:245 msgid "Prefix length" msgstr "前缀长度" -#: ipam/forms/bulk_edit.py:268 ipam/forms/filtersets.py:241 -#: templates/ipam/prefix.html:85 +#: netbox/ipam/forms/bulk_edit.py:268 netbox/ipam/forms/filtersets.py:241 +#: netbox/templates/ipam/prefix.html:85 msgid "Is a pool" msgstr "是一个池" -#: ipam/forms/bulk_edit.py:273 ipam/forms/bulk_edit.py:318 -#: ipam/forms/filtersets.py:248 ipam/forms/filtersets.py:293 -#: ipam/models/ip.py:272 ipam/models/ip.py:539 +#: netbox/ipam/forms/bulk_edit.py: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 msgid "Treat as fully utilized" msgstr "设置为已被全部占用" -#: ipam/forms/bulk_edit.py:287 ipam/forms/filtersets.py:171 +#: netbox/ipam/forms/bulk_edit.py:287 netbox/ipam/forms/filtersets.py:171 msgid "VLAN Assignment" msgstr "VLAN 分配" -#: ipam/forms/bulk_edit.py:366 ipam/models/ip.py:772 +#: netbox/ipam/forms/bulk_edit.py:366 netbox/ipam/models/ip.py:772 msgid "DNS name" msgstr "DNS 名称" -#: ipam/forms/bulk_edit.py:387 ipam/forms/bulk_edit.py:534 -#: ipam/forms/bulk_import.py:394 ipam/forms/bulk_import.py:469 -#: ipam/forms/bulk_import.py:495 ipam/forms/filtersets.py:390 -#: ipam/forms/filtersets.py:530 templates/ipam/fhrpgroup.html:22 -#: templates/ipam/inc/panels/fhrp_groups.html:24 -#: templates/ipam/service.html:32 templates/ipam/servicetemplate.html:19 +#: netbox/ipam/forms/bulk_edit.py: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/templates/ipam/inc/panels/fhrp_groups.html:24 +#: netbox/templates/ipam/service.html:32 +#: netbox/templates/ipam/servicetemplate.html:19 msgid "Protocol" msgstr "协议" -#: ipam/forms/bulk_edit.py:394 ipam/forms/filtersets.py:397 -#: ipam/tables/fhrp.py:22 templates/ipam/fhrpgroup.html:26 +#: netbox/ipam/forms/bulk_edit.py:394 netbox/ipam/forms/filtersets.py:397 +#: netbox/ipam/tables/fhrp.py:22 netbox/templates/ipam/fhrpgroup.html:26 msgid "Group ID" msgstr "组 ID" -#: ipam/forms/bulk_edit.py:399 ipam/forms/filtersets.py:402 -#: wireless/forms/bulk_edit.py:68 wireless/forms/bulk_edit.py:115 -#: wireless/forms/bulk_import.py:62 wireless/forms/bulk_import.py:65 -#: wireless/forms/bulk_import.py:104 wireless/forms/bulk_import.py:107 -#: wireless/forms/filtersets.py:54 wireless/forms/filtersets.py:88 +#: netbox/ipam/forms/bulk_edit.py: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 msgid "Authentication type" msgstr "认证类型" -#: ipam/forms/bulk_edit.py:404 ipam/forms/filtersets.py:406 +#: netbox/ipam/forms/bulk_edit.py:404 netbox/ipam/forms/filtersets.py:406 msgid "Authentication key" msgstr "认证秘钥" -#: ipam/forms/bulk_edit.py:421 ipam/forms/filtersets.py:383 -#: ipam/forms/model_forms.py:474 netbox/navigation/menu.py:386 -#: templates/ipam/fhrpgroup.html:49 -#: templates/wireless/inc/authentication_attrs.html:5 -#: wireless/forms/bulk_edit.py:91 wireless/forms/bulk_edit.py:149 -#: wireless/forms/filtersets.py:36 wireless/forms/filtersets.py:76 -#: wireless/forms/model_forms.py:55 wireless/forms/model_forms.py:171 +#: 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/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 msgid "Authentication" msgstr "身份验证" -#: ipam/forms/bulk_edit.py:436 ipam/forms/model_forms.py:575 +#: netbox/ipam/forms/bulk_edit.py:436 netbox/ipam/forms/model_forms.py:608 msgid "Scope type" msgstr "作用域类型" -#: ipam/forms/bulk_edit.py:439 ipam/forms/bulk_edit.py:453 -#: ipam/forms/model_forms.py:578 ipam/forms/model_forms.py:588 -#: ipam/tables/vlans.py:71 templates/ipam/vlangroup.html:38 +#: 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 "作用域" -#: ipam/forms/bulk_edit.py:446 ipam/models/vlans.py:60 +#: netbox/ipam/forms/bulk_edit.py:446 netbox/ipam/models/vlans.py:60 msgid "VLAN ID ranges" msgstr "VLAN ID 范围" -#: ipam/forms/bulk_edit.py:525 +#: netbox/ipam/forms/bulk_edit.py:525 msgid "Site & Group" msgstr "站点 & 组" -#: ipam/forms/bulk_edit.py:539 ipam/forms/model_forms.py:659 -#: ipam/forms/model_forms.py:691 ipam/tables/services.py:19 -#: ipam/tables/services.py:49 templates/ipam/service.html:36 -#: templates/ipam/servicetemplate.html:23 +#: netbox/ipam/forms/bulk_edit.py:539 netbox/ipam/forms/model_forms.py:692 +#: netbox/ipam/forms/model_forms.py:724 netbox/ipam/tables/services.py:19 +#: netbox/ipam/tables/services.py:49 netbox/templates/ipam/service.html:36 +#: netbox/templates/ipam/servicetemplate.html:23 msgid "Ports" msgstr "端口" -#: ipam/forms/bulk_import.py:48 +#: netbox/ipam/forms/bulk_import.py:48 msgid "Import route targets" msgstr "导入的 Route Targets" -#: ipam/forms/bulk_import.py:54 +#: netbox/ipam/forms/bulk_import.py:54 msgid "Export route targets" msgstr "导出的Route Targets" -#: ipam/forms/bulk_import.py:92 ipam/forms/bulk_import.py:112 -#: ipam/forms/bulk_import.py:132 +#: netbox/ipam/forms/bulk_import.py:92 netbox/ipam/forms/bulk_import.py:112 +#: netbox/ipam/forms/bulk_import.py:132 msgid "Assigned RIR" msgstr "指定的 RIR" -#: ipam/forms/bulk_import.py:182 +#: netbox/ipam/forms/bulk_import.py:182 msgid "VLAN's group (if any)" msgstr "VLAN 组(若存在)" -#: ipam/forms/bulk_import.py:308 +#: netbox/ipam/forms/bulk_import.py:308 msgid "Parent device of assigned interface (if any)" msgstr "指定接口的父设备(如果有)" -#: ipam/forms/bulk_import.py:311 ipam/forms/bulk_import.py:488 -#: ipam/forms/model_forms.py:685 virtualization/filtersets.py:288 -#: virtualization/filtersets.py:327 virtualization/forms/bulk_edit.py:200 -#: virtualization/forms/bulk_edit.py:326 -#: virtualization/forms/bulk_import.py:146 -#: virtualization/forms/bulk_import.py:207 -#: virtualization/forms/filtersets.py:212 -#: virtualization/forms/filtersets.py:248 -#: virtualization/forms/model_forms.py:288 vpn/forms/bulk_import.py:93 -#: vpn/forms/bulk_import.py:290 +#: 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 "虚拟机" -#: ipam/forms/bulk_import.py:315 +#: netbox/ipam/forms/bulk_import.py:315 msgid "Parent VM of assigned interface (if any)" msgstr "指定接口的父虚拟机(如果有)" -#: ipam/forms/bulk_import.py:325 +#: netbox/ipam/forms/bulk_import.py:325 msgid "Is primary" msgstr "首选" -#: ipam/forms/bulk_import.py:326 +#: netbox/ipam/forms/bulk_import.py:326 msgid "Make this the primary IP for the assigned device" msgstr "设置为设备的首选 IP" -#: ipam/forms/bulk_import.py:365 +#: netbox/ipam/forms/bulk_import.py:330 +msgid "Is out-of-band" +msgstr "" + +#: netbox/ipam/forms/bulk_import.py:331 +msgid "Designate this as the out-of-band IP address for the assigned device" +msgstr "" + +#: netbox/ipam/forms/bulk_import.py:371 msgid "No device or virtual machine specified; cannot set as primary IP" msgstr "未指定设备或虚拟机;无法设置为首选 IP" -#: ipam/forms/bulk_import.py:369 +#: netbox/ipam/forms/bulk_import.py:375 +msgid "No device specified; cannot set as out-of-band IP" +msgstr "" + +#: netbox/ipam/forms/bulk_import.py:379 +msgid "Cannot set out-of-band IP for virtual machines" +msgstr "" + +#: netbox/ipam/forms/bulk_import.py:383 msgid "No interface specified; cannot set as primary IP" msgstr "未指定接口;无法设置为首选 IP" -#: ipam/forms/bulk_import.py:398 +#: netbox/ipam/forms/bulk_import.py:387 +msgid "No interface specified; cannot set as out-of-band IP" +msgstr "" + +#: netbox/ipam/forms/bulk_import.py:422 msgid "Auth type" msgstr "认证类型" -#: ipam/forms/bulk_import.py:413 +#: netbox/ipam/forms/bulk_import.py:437 msgid "Scope type (app & model)" msgstr "作用域类型(应用程序&型号)" -#: ipam/forms/bulk_import.py:440 +#: netbox/ipam/forms/bulk_import.py:464 msgid "Assigned VLAN group" msgstr "分配的VLAN组" -#: ipam/forms/bulk_import.py:471 ipam/forms/bulk_import.py:497 +#: netbox/ipam/forms/bulk_import.py:495 netbox/ipam/forms/bulk_import.py:521 msgid "IP protocol" msgstr "IP 协议" -#: ipam/forms/bulk_import.py:485 +#: netbox/ipam/forms/bulk_import.py:509 msgid "Required if not assigned to a VM" msgstr "如果未分配给虚拟机,则为必需" -#: ipam/forms/bulk_import.py:492 +#: netbox/ipam/forms/bulk_import.py:516 msgid "Required if not assigned to a device" msgstr "如果未分配给设备,则为必需" -#: ipam/forms/bulk_import.py:517 +#: netbox/ipam/forms/bulk_import.py:541 #, python-brace-format msgid "{ip} is not assigned to this device/VM." msgstr "{ip} 未分配给此设备/虚拟机。" -#: ipam/forms/filtersets.py:47 ipam/forms/model_forms.py:63 -#: netbox/navigation/menu.py:189 vpn/forms/model_forms.py:410 +#: 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 msgid "Route Targets" msgstr "Route Targets" -#: ipam/forms/filtersets.py:53 ipam/forms/model_forms.py:50 -#: vpn/forms/filtersets.py:224 vpn/forms/model_forms.py:397 +#: 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 msgid "Import targets" msgstr "导入 target" -#: ipam/forms/filtersets.py:58 ipam/forms/model_forms.py:55 -#: vpn/forms/filtersets.py:229 vpn/forms/model_forms.py:402 +#: 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 msgid "Export targets" msgstr "导出 target" -#: ipam/forms/filtersets.py:73 +#: netbox/ipam/forms/filtersets.py:73 msgid "Imported by VRF" msgstr "由VRF引入" -#: ipam/forms/filtersets.py:78 +#: netbox/ipam/forms/filtersets.py:78 msgid "Exported by VRF" msgstr "由VRF输出" -#: ipam/forms/filtersets.py:87 ipam/tables/ip.py:89 templates/ipam/rir.html:30 +#: netbox/ipam/forms/filtersets.py:87 netbox/ipam/tables/ip.py:89 +#: netbox/templates/ipam/rir.html:30 msgid "Private" msgstr "私有的" -#: ipam/forms/filtersets.py:105 ipam/forms/filtersets.py:191 -#: ipam/forms/filtersets.py:272 ipam/forms/filtersets.py:326 +#: netbox/ipam/forms/filtersets.py:105 netbox/ipam/forms/filtersets.py:191 +#: netbox/ipam/forms/filtersets.py:272 netbox/ipam/forms/filtersets.py:326 msgid "Address family" msgstr "地址类型" -#: ipam/forms/filtersets.py:119 templates/ipam/asnrange.html:25 +#: netbox/ipam/forms/filtersets.py:119 netbox/templates/ipam/asnrange.html:25 msgid "Range" msgstr "范围" -#: ipam/forms/filtersets.py:128 +#: netbox/ipam/forms/filtersets.py:128 msgid "Start" msgstr "开始" -#: ipam/forms/filtersets.py:132 +#: netbox/ipam/forms/filtersets.py:132 msgid "End" msgstr "结束" -#: ipam/forms/filtersets.py:186 +#: netbox/ipam/forms/filtersets.py:186 msgid "Search within" msgstr "在此前缀内查找" -#: ipam/forms/filtersets.py:207 ipam/forms/filtersets.py:342 +#: netbox/ipam/forms/filtersets.py:207 netbox/ipam/forms/filtersets.py:342 msgid "Present in VRF" msgstr "存在于VRF中" -#: ipam/forms/filtersets.py:311 +#: netbox/ipam/forms/filtersets.py:311 msgid "Device/VM" msgstr "设备/虚拟机" -#: ipam/forms/filtersets.py:321 +#: netbox/ipam/forms/filtersets.py:321 msgid "Parent Prefix" msgstr "上级IP前缀" -#: ipam/forms/filtersets.py:347 +#: netbox/ipam/forms/filtersets.py:347 msgid "Assigned Device" msgstr "指定设备" -#: ipam/forms/filtersets.py:352 +#: netbox/ipam/forms/filtersets.py:352 msgid "Assigned VM" msgstr "指定虚拟机" -#: ipam/forms/filtersets.py:366 +#: netbox/ipam/forms/filtersets.py:366 msgid "Assigned to an interface" msgstr "指定给一个接口" -#: ipam/forms/filtersets.py:373 templates/ipam/ipaddress.html:51 +#: netbox/ipam/forms/filtersets.py:373 netbox/templates/ipam/ipaddress.html:51 msgid "DNS Name" msgstr "DNS名称" -#: ipam/forms/filtersets.py:416 ipam/models/vlans.py:235 ipam/tables/ip.py:176 -#: ipam/tables/vlans.py:82 ipam/views.py:971 netbox/navigation/menu.py:193 -#: netbox/navigation/menu.py:195 +#: 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 msgid "VLANs" msgstr "VLANs" -#: ipam/forms/filtersets.py:457 +#: netbox/ipam/forms/filtersets.py:457 msgid "Contains VLAN ID" msgstr "包含 VLAN ID" -#: ipam/forms/filtersets.py:513 ipam/models/vlans.py:176 -#: templates/ipam/vlan.html:31 +#: netbox/ipam/forms/filtersets.py:513 netbox/ipam/models/vlans.py:192 +#: netbox/templates/ipam/vlan.html:31 msgid "VLAN ID" msgstr "VLAN ID" -#: ipam/forms/filtersets.py:556 ipam/forms/model_forms.py:320 -#: ipam/forms/model_forms.py:713 ipam/forms/model_forms.py:739 -#: ipam/tables/vlans.py:195 templates/virtualization/virtualdisk.html:21 -#: templates/virtualization/virtualmachine.html:12 -#: templates/virtualization/vminterface.html:21 -#: templates/vpn/tunneltermination.html:25 -#: virtualization/forms/filtersets.py:197 -#: virtualization/forms/filtersets.py:242 -#: virtualization/forms/model_forms.py:220 -#: virtualization/tables/virtualmachines.py:135 -#: virtualization/tables/virtualmachines.py:190 vpn/choices.py:45 -#: vpn/forms/filtersets.py:293 vpn/forms/model_forms.py:160 -#: vpn/forms/model_forms.py:171 vpn/forms/model_forms.py:273 -#: vpn/forms/model_forms.py:454 +#: netbox/ipam/forms/filtersets.py: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 "虚拟机" -#: ipam/forms/model_forms.py:80 templates/ipam/routetarget.html:10 +#: netbox/ipam/forms/model_forms.py:80 +#: netbox/templates/ipam/routetarget.html:10 msgid "Route Target" msgstr "路由目标" -#: ipam/forms/model_forms.py:114 ipam/tables/ip.py:117 -#: templates/ipam/aggregate.html:11 templates/ipam/prefix.html:38 +#: netbox/ipam/forms/model_forms.py:114 netbox/ipam/tables/ip.py:117 +#: netbox/templates/ipam/aggregate.html:11 +#: netbox/templates/ipam/prefix.html:38 msgid "Aggregate" msgstr "聚合IP" -#: ipam/forms/model_forms.py:135 templates/ipam/asnrange.html:12 +#: netbox/ipam/forms/model_forms.py:135 netbox/templates/ipam/asnrange.html:12 msgid "ASN Range" msgstr "ASN范围" -#: ipam/forms/model_forms.py:231 +#: netbox/ipam/forms/model_forms.py:231 msgid "Site/VLAN Assignment" msgstr "Site/VLAN 分配" -#: ipam/forms/model_forms.py:259 templates/ipam/iprange.html:10 +#: netbox/ipam/forms/model_forms.py:259 netbox/templates/ipam/iprange.html:10 msgid "IP Range" msgstr "IP范围" -#: ipam/forms/model_forms.py:295 ipam/forms/model_forms.py:321 -#: ipam/forms/model_forms.py:473 templates/ipam/fhrpgroup.html:19 +#: 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 msgid "FHRP Group" msgstr "FHRP组" -#: ipam/forms/model_forms.py:310 +#: netbox/ipam/forms/model_forms.py:310 msgid "Make this the primary IP for the device/VM" msgstr "将此IP设置为分配设备/虚拟机的首选 IP" -#: ipam/forms/model_forms.py:325 +#: netbox/ipam/forms/model_forms.py:314 +msgid "Make this the out-of-band IP for the device" +msgstr "" + +#: netbox/ipam/forms/model_forms.py:329 msgid "NAT IP (Inside)" msgstr "NAT IP(内部)地址" -#: ipam/forms/model_forms.py:384 +#: netbox/ipam/forms/model_forms.py:391 msgid "An IP address can only be assigned to a single object." msgstr "IP 地址只能分配给单个对象。" -#: ipam/forms/model_forms.py:390 ipam/models/ip.py:897 -msgid "" -"Cannot reassign IP address while it is designated as the primary IP for the " -"parent object" -msgstr "当 IP 地址被指定为父对象的首选 IP 时,无法重新分配 IP 地址" +#: netbox/ipam/forms/model_forms.py:398 +msgid "Cannot reassign primary IP address for the parent device/VM" +msgstr "" -#: ipam/forms/model_forms.py:400 +#: netbox/ipam/forms/model_forms.py:402 +msgid "Cannot reassign out-of-Band IP address for the parent device" +msgstr "" + +#: netbox/ipam/forms/model_forms.py:412 msgid "" "Only IP addresses assigned to an interface can be designated as primary IPs." msgstr "只有分配给接口的 IP 地址才能指定为首选 IP。" -#: ipam/forms/model_forms.py:475 +#: netbox/ipam/forms/model_forms.py:420 +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 msgid "Virtual IP Address" msgstr "虚拟IP地址" -#: ipam/forms/model_forms.py:560 +#: netbox/ipam/forms/model_forms.py:593 msgid "Assignment already exists" msgstr "已被分配" -#: ipam/forms/model_forms.py:569 templates/ipam/vlangroup.html:42 +#: netbox/ipam/forms/model_forms.py:602 +#: netbox/templates/ipam/vlangroup.html:42 msgid "VLAN IDs" msgstr "VLAN ID" -#: ipam/forms/model_forms.py:587 +#: netbox/ipam/forms/model_forms.py:620 msgid "Child VLANs" msgstr "子类 VLANs" -#: ipam/forms/model_forms.py:664 ipam/forms/model_forms.py:696 +#: netbox/ipam/forms/model_forms.py:697 netbox/ipam/forms/model_forms.py:729 msgid "" "Comma-separated list of one or more port numbers. A range may be specified " "using a hyphen." msgstr "一个或多个端口号的列表,逗号分隔。可以使用连字符指定范围。" -#: ipam/forms/model_forms.py:669 templates/ipam/servicetemplate.html:12 +#: netbox/ipam/forms/model_forms.py:702 +#: netbox/templates/ipam/servicetemplate.html:12 msgid "Service Template" msgstr "服务模版" -#: ipam/forms/model_forms.py:716 +#: netbox/ipam/forms/model_forms.py:749 msgid "Port(s)" msgstr "端口" -#: ipam/forms/model_forms.py:717 ipam/forms/model_forms.py:745 -#: templates/ipam/service.html:21 +#: netbox/ipam/forms/model_forms.py:750 netbox/ipam/forms/model_forms.py:778 +#: netbox/templates/ipam/service.html:21 msgid "Service" msgstr "服务" -#: ipam/forms/model_forms.py:730 +#: netbox/ipam/forms/model_forms.py:763 msgid "Service template" msgstr "服务模版" -#: ipam/forms/model_forms.py:742 +#: netbox/ipam/forms/model_forms.py:775 msgid "From Template" msgstr "来自模版" -#: ipam/forms/model_forms.py:743 +#: netbox/ipam/forms/model_forms.py:776 msgid "Custom" msgstr "自定义" -#: ipam/forms/model_forms.py:773 +#: netbox/ipam/forms/model_forms.py:806 msgid "" "Must specify name, protocol, and port(s) if not using a service template." msgstr "如果不使用服务模板,则必须指定名称、协议和端口。" -#: ipam/models/asns.py:34 +#: netbox/ipam/models/asns.py:34 msgid "start" msgstr "开始" -#: ipam/models/asns.py:51 +#: netbox/ipam/models/asns.py:51 msgid "ASN range" msgstr "ASN范围" -#: ipam/models/asns.py:52 +#: netbox/ipam/models/asns.py:52 msgid "ASN ranges" msgstr "ASN范围" -#: ipam/models/asns.py:72 +#: netbox/ipam/models/asns.py:72 #, python-brace-format msgid "Starting ASN ({start}) must be lower than ending ASN ({end})." msgstr "开始的ASN ({start}) 必须低于结束的ASN({end})。" -#: ipam/models/asns.py:104 +#: netbox/ipam/models/asns.py:104 msgid "Regional Internet Registry responsible for this AS number space" msgstr "负责此AS号码的区域互联网注册处" -#: ipam/models/asns.py:109 +#: netbox/ipam/models/asns.py:109 msgid "16- or 32-bit autonomous system number" msgstr "16或32位自主系统编号" -#: ipam/models/fhrp.py:22 +#: netbox/ipam/models/fhrp.py:22 msgid "group ID" msgstr "组ID" -#: ipam/models/fhrp.py:30 ipam/models/services.py:22 +#: netbox/ipam/models/fhrp.py:30 netbox/ipam/models/services.py:22 msgid "protocol" msgstr "协议" -#: ipam/models/fhrp.py:38 wireless/models.py:28 +#: netbox/ipam/models/fhrp.py:38 netbox/wireless/models.py:28 msgid "authentication type" msgstr "认证类型" -#: ipam/models/fhrp.py:43 +#: netbox/ipam/models/fhrp.py:43 msgid "authentication key" msgstr "认证秘钥" -#: ipam/models/fhrp.py:56 +#: netbox/ipam/models/fhrp.py:56 msgid "FHRP group" msgstr "FHRP组" -#: ipam/models/fhrp.py:57 +#: netbox/ipam/models/fhrp.py:57 msgid "FHRP groups" msgstr "网关冗余协议组" -#: ipam/models/fhrp.py:113 +#: netbox/ipam/models/fhrp.py:113 msgid "FHRP group assignment" msgstr "指定FHRP组" -#: ipam/models/fhrp.py:114 +#: netbox/ipam/models/fhrp.py:114 msgid "FHRP group assignments" msgstr "指定FHRP组" -#: ipam/models/ip.py:65 +#: netbox/ipam/models/ip.py:65 msgid "private" msgstr "私有" -#: ipam/models/ip.py:66 +#: netbox/ipam/models/ip.py:66 msgid "IP space managed by this RIR is considered private" msgstr "由该RIR管理的IP地址空间被认为是私有的" -#: ipam/models/ip.py:72 netbox/navigation/menu.py:182 +#: netbox/ipam/models/ip.py:72 netbox/netbox/navigation/menu.py:182 msgid "RIRs" msgstr "区域互联网注册管理机构" -#: ipam/models/ip.py:84 +#: netbox/ipam/models/ip.py:84 msgid "IPv4 or IPv6 network" msgstr "IPv4或IPv6网络" -#: ipam/models/ip.py:91 +#: netbox/ipam/models/ip.py:91 msgid "Regional Internet Registry responsible for this IP space" msgstr "负责此IP地址空间的区域互联网注册管理机构" -#: ipam/models/ip.py:101 +#: netbox/ipam/models/ip.py:101 msgid "date added" msgstr "添加日期" -#: ipam/models/ip.py:115 +#: netbox/ipam/models/ip.py:115 msgid "aggregate" msgstr "聚合" -#: ipam/models/ip.py:116 +#: netbox/ipam/models/ip.py:116 msgid "aggregates" msgstr "聚合" -#: ipam/models/ip.py:132 +#: netbox/ipam/models/ip.py:132 msgid "Cannot create aggregate with /0 mask." msgstr "无法使用/0掩码创建聚合IP。" -#: ipam/models/ip.py:144 +#: netbox/ipam/models/ip.py:144 #, python-brace-format msgid "" "Aggregates cannot overlap. {prefix} is already covered by an existing " "aggregate ({aggregate})." msgstr "聚合不能重叠。{prefix}已被现有聚合({aggregate})包含。" -#: ipam/models/ip.py:158 +#: netbox/ipam/models/ip.py:158 #, python-brace-format msgid "" "Prefixes cannot overlap aggregates. {prefix} covers an existing aggregate " "({aggregate})." msgstr "前缀不能与聚合重叠。{prefix} 包含现有聚合({aggregate})。" -#: ipam/models/ip.py:200 ipam/models/ip.py:737 vpn/models/tunnels.py:114 +#: netbox/ipam/models/ip.py:200 netbox/ipam/models/ip.py:737 +#: netbox/vpn/models/tunnels.py:114 msgid "role" msgstr "角色" -#: ipam/models/ip.py:201 +#: netbox/ipam/models/ip.py:201 msgid "roles" msgstr "角色" -#: ipam/models/ip.py:217 ipam/models/ip.py:293 +#: netbox/ipam/models/ip.py:217 netbox/ipam/models/ip.py:293 msgid "prefix" msgstr "前缀" -#: ipam/models/ip.py:218 +#: netbox/ipam/models/ip.py:218 msgid "IPv4 or IPv6 network with mask" msgstr "带掩码的IPv4或IPv6网络" -#: ipam/models/ip.py:254 +#: netbox/ipam/models/ip.py:254 msgid "Operational status of this prefix" msgstr "此前缀的操作状态" -#: ipam/models/ip.py:262 +#: netbox/ipam/models/ip.py:262 msgid "The primary function of this prefix" msgstr "此前缀的主要功能" -#: ipam/models/ip.py:265 +#: netbox/ipam/models/ip.py:265 msgid "is a pool" msgstr "地址池" -#: ipam/models/ip.py:267 +#: netbox/ipam/models/ip.py:267 msgid "All IP addresses within this prefix are considered usable" msgstr "此前缀内的所有IP地址都可用" -#: ipam/models/ip.py:270 ipam/models/ip.py:537 +#: netbox/ipam/models/ip.py:270 netbox/ipam/models/ip.py:537 msgid "mark utilized" msgstr "使用标记" -#: ipam/models/ip.py:294 +#: netbox/ipam/models/ip.py:294 msgid "prefixes" msgstr "前缀" -#: ipam/models/ip.py:317 +#: netbox/ipam/models/ip.py:317 msgid "Cannot create prefix with /0 mask." msgstr "无法创建/0掩码的IP地址前缀。" -#: ipam/models/ip.py:324 ipam/models/ip.py:874 +#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:874 #, python-brace-format msgid "VRF {vrf}" msgstr "VRF {vrf}" -#: ipam/models/ip.py:324 ipam/models/ip.py:874 +#: netbox/ipam/models/ip.py:324 netbox/ipam/models/ip.py:874 msgid "global table" msgstr "全局表" -#: ipam/models/ip.py:326 +#: netbox/ipam/models/ip.py:326 #, python-brace-format msgid "Duplicate prefix found in {table}: {prefix}" msgstr "在{table}中发现重复的前缀: {prefix}" -#: ipam/models/ip.py:495 +#: netbox/ipam/models/ip.py:495 msgid "start address" msgstr "起始地址" -#: ipam/models/ip.py:496 ipam/models/ip.py:500 ipam/models/ip.py:712 +#: netbox/ipam/models/ip.py:496 netbox/ipam/models/ip.py:500 +#: netbox/ipam/models/ip.py:712 msgid "IPv4 or IPv6 address (with mask)" msgstr "IPv4 或 IPv6 地址(带掩码)" -#: ipam/models/ip.py:499 +#: netbox/ipam/models/ip.py:499 msgid "end address" msgstr "结束地址" -#: ipam/models/ip.py:526 +#: netbox/ipam/models/ip.py:526 msgid "Operational status of this range" msgstr "此IP范围的操作状态" -#: ipam/models/ip.py:534 +#: netbox/ipam/models/ip.py:534 msgid "The primary function of this range" msgstr "此IP范围的主要功能" -#: ipam/models/ip.py:548 +#: netbox/ipam/models/ip.py:548 msgid "IP range" msgstr "IP范围" -#: ipam/models/ip.py:549 +#: netbox/ipam/models/ip.py:549 msgid "IP ranges" msgstr "IP范围" -#: ipam/models/ip.py:565 +#: netbox/ipam/models/ip.py:565 msgid "Starting and ending IP address versions must match" msgstr "起始和结束IP地址的版本必须一致" -#: ipam/models/ip.py:571 +#: netbox/ipam/models/ip.py:571 msgid "Starting and ending IP address masks must match" msgstr "起始和结束IP地址的掩码必须一致" -#: ipam/models/ip.py:578 +#: netbox/ipam/models/ip.py:578 #, python-brace-format msgid "" "Ending address must be greater than the starting address ({start_address})" msgstr "结束地址必须大于起始地址 ({start_address})" -#: ipam/models/ip.py:590 +#: netbox/ipam/models/ip.py:590 #, python-brace-format msgid "Defined addresses overlap with range {overlapping_range} in VRF {vrf}" msgstr "定义的地址与 VRF {vrf} 中的范围 {overlapping_range} 重叠" -#: ipam/models/ip.py:599 +#: netbox/ipam/models/ip.py:599 #, python-brace-format msgid "Defined range exceeds maximum supported size ({max_size})" msgstr "定义的范围超过了支持的最大大小 ({max_size})" -#: ipam/models/ip.py:711 tenancy/models/contacts.py:82 +#: netbox/ipam/models/ip.py:711 netbox/tenancy/models/contacts.py:82 msgid "address" msgstr "地址" -#: ipam/models/ip.py:734 +#: netbox/ipam/models/ip.py:734 msgid "The operational status of this IP" msgstr "此IP的运行状态" -#: ipam/models/ip.py:741 +#: netbox/ipam/models/ip.py:741 msgid "The functional role of this IP" msgstr "此IP的功能作用" -#: ipam/models/ip.py:765 templates/ipam/ipaddress.html:72 +#: netbox/ipam/models/ip.py:765 netbox/templates/ipam/ipaddress.html:72 msgid "NAT (inside)" msgstr "NAT(内部 IP)" -#: ipam/models/ip.py:766 +#: netbox/ipam/models/ip.py:766 msgid "The IP for which this address is the \"outside\" IP" msgstr "此IP地址为外部IP" -#: ipam/models/ip.py:773 +#: netbox/ipam/models/ip.py:773 msgid "Hostname or FQDN (not case-sensitive)" msgstr "主机名或 FQDN(不区分大小写)" -#: ipam/models/ip.py:789 ipam/models/services.py:94 +#: netbox/ipam/models/ip.py:789 netbox/ipam/models/services.py:94 msgid "IP addresses" msgstr "IP地址" -#: ipam/models/ip.py:845 +#: netbox/ipam/models/ip.py:845 msgid "Cannot create IP address with /0 mask." msgstr "无法创建/0掩码的IP地址。" -#: ipam/models/ip.py:851 +#: netbox/ipam/models/ip.py:851 #, python-brace-format msgid "{ip} is a network ID, which may not be assigned to an interface." msgstr "{ip}是一个网络号,不能分配给接口。" -#: ipam/models/ip.py:862 +#: netbox/ipam/models/ip.py:862 #, python-brace-format msgid "" "{ip} is a broadcast address, which may not be assigned to an interface." msgstr "{ip}是一个广播地址,不能分配给接口。" -#: ipam/models/ip.py:876 +#: netbox/ipam/models/ip.py:876 #, python-brace-format msgid "Duplicate IP address found in {table}: {ipaddress}" msgstr "在 {table}中发现重复的IP地址: {ipaddress}" -#: ipam/models/ip.py:903 +#: netbox/ipam/models/ip.py:897 +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 msgid "Only IPv6 addresses can be assigned SLAAC status" msgstr "只能为IPv6地址分配SLAAC状态" -#: ipam/models/services.py:33 +#: netbox/ipam/models/services.py:33 msgid "port numbers" msgstr "端口号" -#: ipam/models/services.py:59 +#: netbox/ipam/models/services.py:59 msgid "service template" msgstr "服务模版" -#: ipam/models/services.py:60 +#: netbox/ipam/models/services.py:60 msgid "service templates" msgstr "服务模板" -#: ipam/models/services.py:95 +#: netbox/ipam/models/services.py:95 msgid "The specific IP addresses (if any) to which this service is bound" msgstr "此服务绑定到的特定IP地址(如果有)" -#: ipam/models/services.py:102 +#: netbox/ipam/models/services.py:102 msgid "service" msgstr "服务" -#: ipam/models/services.py:103 +#: netbox/ipam/models/services.py:103 msgid "services" msgstr "服务" -#: ipam/models/services.py:117 +#: netbox/ipam/models/services.py:117 msgid "" "A service cannot be associated with both a device and a virtual machine." msgstr "服务不能同时与设备和虚拟机相关联。" -#: ipam/models/services.py:119 +#: netbox/ipam/models/services.py:119 msgid "" "A service must be associated with either a device or a virtual machine." msgstr "服务必须与设备或虚拟机相关联。" -#: ipam/models/vlans.py:85 +#: netbox/ipam/models/vlans.py:85 msgid "VLAN groups" msgstr "VLAN 组" -#: ipam/models/vlans.py:95 +#: netbox/ipam/models/vlans.py:95 msgid "Cannot set scope_type without scope_id." msgstr "没有作用域id,无法设置作用域。" -#: ipam/models/vlans.py:97 +#: netbox/ipam/models/vlans.py:97 msgid "Cannot set scope_id without scope_type." msgstr "没有作用域类型,无法设置作用域。" -#: ipam/models/vlans.py:101 +#: netbox/ipam/models/vlans.py:105 +#, python-brace-format +msgid "Starting VLAN ID in range ({value}) cannot be less than {minimum}" +msgstr "" + +#: netbox/ipam/models/vlans.py:111 +#, python-brace-format +msgid "Ending VLAN ID in range ({value}) cannot exceed {maximum}" +msgstr "" + +#: 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 "" + +#: netbox/ipam/models/vlans.py:124 msgid "Ranges cannot overlap." msgstr "范围不能重叠。" -#: ipam/models/vlans.py:106 -#, python-brace-format -msgid "" -"Maximum child VID must be greater than or equal to minimum child VID " -"({value})" -msgstr "儿童 VID 的最大值必须大于或等于最小孩子 VID ({value})" - -#: ipam/models/vlans.py:165 +#: netbox/ipam/models/vlans.py:181 msgid "The specific site to which this VLAN is assigned (if any)" msgstr "此VLAN所属的站点(如果有)" -#: ipam/models/vlans.py:173 +#: netbox/ipam/models/vlans.py:189 msgid "VLAN group (optional)" msgstr "VLAN组(可选)" -#: ipam/models/vlans.py:181 +#: netbox/ipam/models/vlans.py:197 msgid "Numeric VLAN ID (1-4094)" msgstr "VLAN ID(1-4094)" -#: ipam/models/vlans.py:199 +#: netbox/ipam/models/vlans.py:215 msgid "Operational status of this VLAN" msgstr "此VLAN的操作状态" -#: ipam/models/vlans.py:207 +#: netbox/ipam/models/vlans.py:223 msgid "The primary function of this VLAN" msgstr "此VLAN的主要功能" -#: ipam/models/vlans.py:250 +#: netbox/ipam/models/vlans.py:266 #, python-brace-format msgid "" "VLAN is assigned to group {group} (scope: {scope}); cannot also assign to " "site {site}." msgstr "VLAN 已分配给组 {group}(作用域:{scope}); 不能再分配给站点:{site}。" -#: ipam/models/vlans.py:259 +#: netbox/ipam/models/vlans.py:275 #, python-brace-format msgid "VID must be in ranges {ranges} for VLANs in group {group}" msgstr "VID 必须在范围内 {ranges} 对于组中的 VLAN {group}" -#: ipam/models/vrfs.py:30 +#: netbox/ipam/models/vrfs.py:30 msgid "route distinguisher" msgstr "路由区分符" -#: ipam/models/vrfs.py:31 +#: netbox/ipam/models/vrfs.py:31 msgid "Unique route distinguisher (as defined in RFC 4364)" msgstr "唯一的路由区分符(如 RFC 4364 中定义)" -#: ipam/models/vrfs.py:42 +#: netbox/ipam/models/vrfs.py:42 msgid "enforce unique space" msgstr "强制使用唯一空间" -#: ipam/models/vrfs.py:43 +#: netbox/ipam/models/vrfs.py:43 msgid "Prevent duplicate prefixes/IP addresses within this VRF" msgstr "防止此 VRF 内出现重复的前缀/IP 地址" -#: ipam/models/vrfs.py:63 netbox/navigation/menu.py:186 -#: netbox/navigation/menu.py:188 +#: netbox/ipam/models/vrfs.py:63 netbox/netbox/navigation/menu.py:186 +#: netbox/netbox/navigation/menu.py:188 msgid "VRFs" msgstr "VRFs" -#: ipam/models/vrfs.py:82 +#: netbox/ipam/models/vrfs.py:82 msgid "Route target value (formatted in accordance with RFC 4360)" msgstr "RT值(按照 RFC 4360 格式)" -#: ipam/models/vrfs.py:94 +#: netbox/ipam/models/vrfs.py:94 msgid "route target" msgstr "路由目标" -#: ipam/models/vrfs.py:95 +#: netbox/ipam/models/vrfs.py:95 msgid "route targets" msgstr "路由目标" -#: ipam/tables/asn.py:52 +#: netbox/ipam/tables/asn.py:52 msgid "ASDOT" msgstr "ASDOT" -#: ipam/tables/asn.py:57 +#: netbox/ipam/tables/asn.py:57 msgid "Site Count" msgstr "站点统计" -#: ipam/tables/asn.py:62 +#: netbox/ipam/tables/asn.py:62 msgid "Provider Count" msgstr "运营商统计" -#: ipam/tables/ip.py:95 netbox/navigation/menu.py:179 -#: netbox/navigation/menu.py:181 +#: netbox/ipam/tables/ip.py:95 netbox/netbox/navigation/menu.py:179 +#: netbox/netbox/navigation/menu.py:181 msgid "Aggregates" msgstr "聚合" -#: ipam/tables/ip.py:125 +#: netbox/ipam/tables/ip.py:125 msgid "Added" msgstr "已添加" -#: ipam/tables/ip.py:128 ipam/tables/ip.py:166 ipam/tables/vlans.py:142 -#: ipam/views.py:346 netbox/navigation/menu.py:165 -#: netbox/navigation/menu.py:167 templates/ipam/vlan.html:84 +#: 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 msgid "Prefixes" msgstr "前缀" -#: ipam/tables/ip.py:131 ipam/tables/ip.py:270 ipam/tables/ip.py:324 -#: ipam/tables/vlans.py:86 templates/dcim/device.html:260 -#: templates/ipam/aggregate.html:24 templates/ipam/iprange.html:29 -#: templates/ipam/prefix.html:106 +#: 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/templates/dcim/device.html:260 +#: netbox/templates/ipam/aggregate.html:24 +#: netbox/templates/ipam/iprange.html:29 netbox/templates/ipam/prefix.html:106 msgid "Utilization" msgstr "利用率" -#: ipam/tables/ip.py:171 netbox/navigation/menu.py:161 +#: netbox/ipam/tables/ip.py:171 netbox/netbox/navigation/menu.py:161 msgid "IP Ranges" msgstr "IP范围" -#: ipam/tables/ip.py:221 +#: netbox/ipam/tables/ip.py:221 msgid "Prefix (Flat)" msgstr "前缀(标记)" -#: ipam/tables/ip.py:225 +#: netbox/ipam/tables/ip.py:225 msgid "Depth" msgstr "深度" -#: ipam/tables/ip.py:262 +#: netbox/ipam/tables/ip.py:262 msgid "Pool" msgstr "地址池" -#: ipam/tables/ip.py:266 ipam/tables/ip.py:320 +#: netbox/ipam/tables/ip.py:266 netbox/ipam/tables/ip.py:320 msgid "Marked Utilized" msgstr "标记为已使用" -#: ipam/tables/ip.py:304 +#: netbox/ipam/tables/ip.py:304 msgid "Start address" msgstr "起始地址" -#: ipam/tables/ip.py:383 +#: netbox/ipam/tables/ip.py:383 msgid "NAT (Inside)" msgstr "NAT (内部地址)" -#: ipam/tables/ip.py:388 +#: netbox/ipam/tables/ip.py:388 msgid "NAT (Outside)" msgstr "NAT (外部地址)" -#: ipam/tables/ip.py:393 +#: netbox/ipam/tables/ip.py:393 msgid "Assigned" msgstr "分配" -#: ipam/tables/ip.py:429 templates/vpn/l2vpntermination.html:16 -#: vpn/forms/filtersets.py:240 +#: netbox/ipam/tables/ip.py:429 netbox/templates/vpn/l2vpntermination.html:16 +#: netbox/vpn/forms/filtersets.py:240 msgid "Assigned Object" msgstr "指定对象" -#: ipam/tables/vlans.py:68 +#: netbox/ipam/tables/vlans.py:68 msgid "Scope Type" msgstr "作用域类型" -#: ipam/tables/vlans.py:76 +#: netbox/ipam/tables/vlans.py:76 msgid "VID Ranges" msgstr "VID 范围" -#: ipam/tables/vlans.py:111 ipam/tables/vlans.py:214 -#: templates/dcim/inc/interface_vlans_table.html:4 +#: netbox/ipam/tables/vlans.py:111 netbox/ipam/tables/vlans.py:214 +#: netbox/templates/dcim/inc/interface_vlans_table.html:4 msgid "VID" msgstr "VLAN号" -#: ipam/tables/vrfs.py:30 +#: netbox/ipam/tables/vrfs.py:30 msgid "RD" msgstr "RD" -#: ipam/tables/vrfs.py:33 +#: netbox/ipam/tables/vrfs.py:33 msgid "Unique" msgstr "唯一的" -#: ipam/tables/vrfs.py:37 vpn/tables/l2vpn.py:27 +#: netbox/ipam/tables/vrfs.py:37 netbox/vpn/tables/l2vpn.py:27 msgid "Import Targets" msgstr "引入targets" -#: ipam/tables/vrfs.py:42 vpn/tables/l2vpn.py:32 +#: netbox/ipam/tables/vrfs.py:42 netbox/vpn/tables/l2vpn.py:32 msgid "Export Targets" msgstr "输出targets" -#: ipam/validators.py:9 +#: netbox/ipam/validators.py:9 #, python-brace-format msgid "{prefix} is not a valid prefix. Did you mean {suggested}?" msgstr "{prefix} 不是有效的前缀。您是想 {suggested}?" -#: ipam/validators.py:16 +#: netbox/ipam/validators.py:16 #, python-format msgid "The prefix length must be less than or equal to %(limit_value)s." msgstr "前缀长度必须≤ %(limit_value)s." -#: ipam/validators.py:24 +#: netbox/ipam/validators.py:24 #, python-format msgid "The prefix length must be greater than or equal to %(limit_value)s." msgstr "前缀长度必须≥ %(limit_value)s." -#: ipam/validators.py:33 +#: netbox/ipam/validators.py:33 msgid "" "Only alphanumeric characters, asterisks, hyphens, periods, and underscores " "are allowed in DNS names" msgstr "DNS 名称中仅允许使用字母数字字符、星号、连字符、句点和下划线" -#: ipam/views.py:533 +#: netbox/ipam/views.py:533 msgid "Child Prefixes" msgstr "下级前缀" -#: ipam/views.py:569 +#: netbox/ipam/views.py:569 msgid "Child Ranges" msgstr "子类地址访问" -#: ipam/views.py:898 +#: netbox/ipam/views.py:898 msgid "Related IPs" msgstr "关联IP" -#: ipam/views.py:1127 +#: netbox/ipam/views.py:1127 msgid "Device Interfaces" msgstr "设备接口" -#: ipam/views.py:1145 +#: netbox/ipam/views.py:1145 msgid "VM Interfaces" msgstr "VM接口" -#: netbox/api/fields.py:65 +#: netbox/netbox/api/fields.py:65 msgid "This field may not be blank." msgstr "此字段不能为空。" -#: netbox/api/fields.py:70 +#: netbox/netbox/api/fields.py:70 msgid "" "Value must be passed directly (e.g. \"foo\": 123); do not use a dictionary " "or list." msgstr "值必须直接传递(e.g. \"foo\": 123); 不要使用字典或列表。" -#: netbox/api/fields.py:91 +#: netbox/netbox/api/fields.py:91 #, python-brace-format msgid "{value} is not a valid choice." msgstr "{value}不是一个有效的选项。" -#: netbox/api/fields.py:104 +#: netbox/netbox/api/fields.py:104 #, python-brace-format msgid "Invalid content type: {content_type}" msgstr "无效的内容类型: {content_type}" -#: netbox/api/fields.py:105 +#: netbox/netbox/api/fields.py:105 msgid "Invalid value. Specify a content type as '.'." msgstr "无效的值。需要将内容类型指定为 '.'。" -#: netbox/api/fields.py:167 +#: netbox/netbox/api/fields.py:167 msgid "Ranges must be specified in the form (lower, upper)." msgstr "必须以表单(下限、上限)指定范围。" -#: netbox/api/fields.py:169 +#: netbox/netbox/api/fields.py:169 msgid "Range boundaries must be defined as integers." msgstr "范围边界必须定义为整数。" -#: netbox/api/serializers/fields.py:40 +#: netbox/netbox/api/serializers/fields.py:40 #, python-brace-format msgid "{class_name} must implement get_view_name()" msgstr "{class_name} 必须实现 get_view_name ()" -#: netbox/authentication/__init__.py:138 +#: netbox/netbox/authentication/__init__.py:138 #, python-brace-format msgid "Invalid permission {permission} for model {model}" msgstr "模型{model}的权限{permission}无效" -#: netbox/choices.py:49 +#: netbox/netbox/choices.py:49 msgid "Dark Red" msgstr "深红" -#: netbox/choices.py:52 +#: netbox/netbox/choices.py:52 msgid "Rose" msgstr "玫瑰红" -#: netbox/choices.py:53 +#: netbox/netbox/choices.py:53 msgid "Fuchsia" msgstr "紫红色" -#: netbox/choices.py:55 +#: netbox/netbox/choices.py:55 msgid "Dark Purple" msgstr "深紫色" -#: netbox/choices.py:58 +#: netbox/netbox/choices.py:58 msgid "Light Blue" msgstr "浅蓝色" -#: netbox/choices.py:61 +#: netbox/netbox/choices.py:61 msgid "Aqua" msgstr "水绿色" -#: netbox/choices.py:62 +#: netbox/netbox/choices.py:62 msgid "Dark Green" msgstr "深绿色" -#: netbox/choices.py:64 +#: netbox/netbox/choices.py:64 msgid "Light Green" msgstr "浅绿色" -#: netbox/choices.py:65 +#: netbox/netbox/choices.py:65 msgid "Lime" msgstr "草绿色" -#: netbox/choices.py:67 +#: netbox/netbox/choices.py:67 msgid "Amber" msgstr "琥珀色" -#: netbox/choices.py:69 +#: netbox/netbox/choices.py:69 msgid "Dark Orange" msgstr "深橙色" -#: netbox/choices.py:70 +#: netbox/netbox/choices.py:70 msgid "Brown" msgstr "棕色" -#: netbox/choices.py:71 +#: netbox/netbox/choices.py:71 msgid "Light Grey" msgstr "浅灰色" -#: netbox/choices.py:72 +#: netbox/netbox/choices.py:72 msgid "Grey" msgstr "灰色" -#: netbox/choices.py:73 +#: netbox/netbox/choices.py:73 msgid "Dark Grey" msgstr "深灰色" -#: netbox/choices.py:128 +#: netbox/netbox/choices.py:128 msgid "Direct" msgstr "直连" -#: netbox/choices.py:129 +#: netbox/netbox/choices.py:129 msgid "Upload" msgstr "上传" -#: netbox/choices.py:141 netbox/choices.py:155 +#: netbox/netbox/choices.py:141 netbox/netbox/choices.py:155 msgid "Auto-detect" msgstr "自动检测" -#: netbox/choices.py:156 +#: netbox/netbox/choices.py:156 msgid "Comma" msgstr "逗号" -#: netbox/choices.py:157 +#: netbox/netbox/choices.py:157 msgid "Semicolon" msgstr "分号" -#: netbox/choices.py:158 +#: netbox/netbox/choices.py:158 msgid "Tab" msgstr "Tab" -#: netbox/config/__init__.py:67 +#: netbox/netbox/config/__init__.py:67 #, python-brace-format msgid "Invalid configuration parameter: {item}" msgstr "无效的配置参数: {item}" -#: netbox/config/parameters.py:22 templates/core/inc/config_data.html:62 +#: netbox/netbox/config/parameters.py:22 +#: netbox/templates/core/inc/config_data.html:62 msgid "Login banner" msgstr "登录提示" -#: netbox/config/parameters.py:24 +#: netbox/netbox/config/parameters.py:24 msgid "Additional content to display on the login page" msgstr "要在登录页面上显示的其他内容" -#: netbox/config/parameters.py:33 templates/core/inc/config_data.html:66 +#: netbox/netbox/config/parameters.py:33 +#: netbox/templates/core/inc/config_data.html:66 msgid "Maintenance banner" msgstr "维护提示" -#: netbox/config/parameters.py:35 +#: netbox/netbox/config/parameters.py:35 msgid "Additional content to display when in maintenance mode" msgstr "要在维护页面上显示的其他内容" -#: netbox/config/parameters.py:44 templates/core/inc/config_data.html:70 +#: netbox/netbox/config/parameters.py:44 +#: netbox/templates/core/inc/config_data.html:70 msgid "Top banner" msgstr "顶部提示" -#: netbox/config/parameters.py:46 +#: netbox/netbox/config/parameters.py:46 msgid "Additional content to display at the top of every page" msgstr "要在顶部提示显示的其他内容" -#: netbox/config/parameters.py:55 templates/core/inc/config_data.html:74 +#: netbox/netbox/config/parameters.py:55 +#: netbox/templates/core/inc/config_data.html:74 msgid "Bottom banner" msgstr "底部提示" -#: netbox/config/parameters.py:57 +#: netbox/netbox/config/parameters.py:57 msgid "Additional content to display at the bottom of every page" msgstr "要在每页底部提示显示的其他内容" -#: netbox/config/parameters.py:68 +#: netbox/netbox/config/parameters.py:68 msgid "Globally unique IP space" msgstr "全局唯一 IP 地址空间" -#: netbox/config/parameters.py:70 +#: netbox/netbox/config/parameters.py:70 msgid "Enforce unique IP addressing within the global table" msgstr "在全局表中强制执行唯一的 IP 寻址" -#: netbox/config/parameters.py:75 templates/core/inc/config_data.html:44 +#: netbox/netbox/config/parameters.py:75 +#: netbox/templates/core/inc/config_data.html:44 msgid "Prefer IPv4" msgstr "首选 IPv4" -#: netbox/config/parameters.py:77 +#: netbox/netbox/config/parameters.py:77 msgid "Prefer IPv4 addresses over IPv6" msgstr "优先选择 IPv4 地址而不是 IPv6" -#: netbox/config/parameters.py:84 +#: netbox/netbox/config/parameters.py:84 msgid "Rack unit height" msgstr "机柜每U高度" -#: netbox/config/parameters.py:86 +#: netbox/netbox/config/parameters.py:86 msgid "Default unit height for rendered rack elevations" msgstr "渲染机架标高的默认单位高度" -#: netbox/config/parameters.py:91 +#: netbox/netbox/config/parameters.py:91 msgid "Rack unit width" msgstr "机柜每U宽度" -#: netbox/config/parameters.py:93 +#: netbox/netbox/config/parameters.py:93 msgid "Default unit width for rendered rack elevations" msgstr "渲染机架标高的默认单位宽度" -#: netbox/config/parameters.py:100 +#: netbox/netbox/config/parameters.py:100 msgid "Powerfeed voltage" msgstr "供电电压" -#: netbox/config/parameters.py:102 +#: netbox/netbox/config/parameters.py:102 msgid "Default voltage for powerfeeds" msgstr "电源默认电压" -#: netbox/config/parameters.py:107 +#: netbox/netbox/config/parameters.py:107 msgid "Powerfeed amperage" msgstr "供电电流" -#: netbox/config/parameters.py:109 +#: netbox/netbox/config/parameters.py:109 msgid "Default amperage for powerfeeds" msgstr "电源的默认电流" -#: netbox/config/parameters.py:114 +#: netbox/netbox/config/parameters.py:114 msgid "Powerfeed max utilization" msgstr "电源最大利用率" -#: netbox/config/parameters.py:116 +#: netbox/netbox/config/parameters.py:116 msgid "Default max utilization for powerfeeds" msgstr "默认的电源最大利用率" -#: netbox/config/parameters.py:123 templates/core/inc/config_data.html:53 +#: netbox/netbox/config/parameters.py:123 +#: netbox/templates/core/inc/config_data.html:53 msgid "Allowed URL schemes" msgstr "允许的URL方案" -#: netbox/config/parameters.py:128 +#: netbox/netbox/config/parameters.py:128 msgid "Permitted schemes for URLs in user-provided content" msgstr "用户提供的内容中允许的URL方案" -#: netbox/config/parameters.py:136 +#: netbox/netbox/config/parameters.py:136 msgid "Default page size" msgstr "默认页面大小" -#: netbox/config/parameters.py:142 +#: netbox/netbox/config/parameters.py:142 msgid "Maximum page size" msgstr "最大页面大小" -#: netbox/config/parameters.py:150 templates/core/inc/config_data.html:96 +#: netbox/netbox/config/parameters.py:150 +#: netbox/templates/core/inc/config_data.html:96 msgid "Custom validators" msgstr "自定义验证器" -#: netbox/config/parameters.py:152 +#: netbox/netbox/config/parameters.py:152 msgid "Custom validation rules (JSON)" msgstr "自定义验证规则(JSON)" -#: netbox/config/parameters.py:160 templates/core/inc/config_data.html:104 +#: netbox/netbox/config/parameters.py:160 +#: netbox/templates/core/inc/config_data.html:104 msgid "Protection rules" msgstr "保护规则" -#: netbox/config/parameters.py:162 +#: netbox/netbox/config/parameters.py:162 msgid "Deletion protection rules (JSON)" msgstr "删除动作的保护规则(JSON)" -#: netbox/config/parameters.py:172 templates/core/inc/config_data.html:117 +#: netbox/netbox/config/parameters.py:172 +#: netbox/templates/core/inc/config_data.html:117 msgid "Default preferences" msgstr "默认首选项" -#: netbox/config/parameters.py:174 +#: netbox/netbox/config/parameters.py:174 msgid "Default preferences for new users" msgstr "新用户默认首选项" -#: netbox/config/parameters.py:181 templates/core/inc/config_data.html:129 +#: netbox/netbox/config/parameters.py:181 +#: netbox/templates/core/inc/config_data.html:129 msgid "Maintenance mode" msgstr "维护模式" -#: netbox/config/parameters.py:183 +#: netbox/netbox/config/parameters.py:183 msgid "Enable maintenance mode" msgstr "开启维护模式" -#: netbox/config/parameters.py:188 templates/core/inc/config_data.html:133 +#: netbox/netbox/config/parameters.py:188 +#: netbox/templates/core/inc/config_data.html:133 msgid "GraphQL enabled" msgstr "GraphQL 已启用" -#: netbox/config/parameters.py:190 +#: netbox/netbox/config/parameters.py:190 msgid "Enable the GraphQL API" msgstr "启用 GraphQL API" -#: netbox/config/parameters.py:195 templates/core/inc/config_data.html:137 +#: netbox/netbox/config/parameters.py:195 +#: netbox/templates/core/inc/config_data.html:137 msgid "Changelog retention" msgstr "变更日志保留" -#: netbox/config/parameters.py:197 +#: netbox/netbox/config/parameters.py:197 msgid "Days to retain changelog history (set to zero for unlimited)" msgstr "变更日志的保留天数(0表示无限制)" -#: netbox/config/parameters.py:202 +#: netbox/netbox/config/parameters.py:202 msgid "Job result retention" msgstr "任务结果保留" -#: netbox/config/parameters.py:204 +#: netbox/netbox/config/parameters.py:204 msgid "Days to retain job result history (set to zero for unlimited)" msgstr "任务结果的保留天数(0表示无限制)" -#: netbox/config/parameters.py:209 templates/core/inc/config_data.html:145 +#: netbox/netbox/config/parameters.py:209 +#: netbox/templates/core/inc/config_data.html:145 msgid "Maps URL" msgstr "地图链接" -#: netbox/config/parameters.py:211 +#: netbox/netbox/config/parameters.py:211 msgid "Base URL for mapping geographic locations" msgstr "用于映射地理位置的基本 URL" -#: netbox/forms/__init__.py:12 +#: netbox/netbox/forms/__init__.py:12 msgid "Partial match" msgstr "部分匹配" -#: netbox/forms/__init__.py:13 +#: netbox/netbox/forms/__init__.py:13 msgid "Exact match" msgstr "完全匹配" -#: netbox/forms/__init__.py:14 +#: netbox/netbox/forms/__init__.py:14 msgid "Starts with" msgstr "开始于" -#: netbox/forms/__init__.py:15 +#: netbox/netbox/forms/__init__.py:15 msgid "Ends with" msgstr "结束于" -#: netbox/forms/__init__.py:16 +#: netbox/netbox/forms/__init__.py:16 msgid "Regex" msgstr "正则表达式" -#: netbox/forms/__init__.py:34 +#: netbox/netbox/forms/__init__.py:34 msgid "Object type(s)" msgstr "对象类型" -#: netbox/forms/__init__.py:40 +#: netbox/netbox/forms/__init__.py:40 msgid "Lookup" msgstr "查找" -#: netbox/forms/base.py:90 +#: netbox/netbox/forms/base.py:90 msgid "" "Tag slugs separated by commas, encased with double quotes (e.g. " "\"tag1,tag2,tag3\")" msgstr "用逗号分隔的标签段,用双引号括起来(例如\"tag1,tag2,tag3\")" -#: netbox/forms/base.py:120 +#: netbox/netbox/forms/base.py:120 msgid "Add tags" msgstr "增加标签" -#: netbox/forms/base.py:125 +#: netbox/netbox/forms/base.py:125 msgid "Remove tags" msgstr "移除标签" -#: netbox/forms/mixins.py:38 +#: netbox/netbox/forms/mixins.py:38 #, python-brace-format msgid "{class_name} must specify a model class." msgstr "{class_name}必须指定一个模型类。" -#: netbox/models/features.py:280 +#: netbox/netbox/models/features.py:280 #, python-brace-format msgid "Unknown field name '{name}' in custom field data." msgstr "自定义字段中的字段名称 '{name}' 未知。" -#: netbox/models/features.py:286 +#: netbox/netbox/models/features.py:286 #, python-brace-format msgid "Invalid value for custom field '{name}': {error}" msgstr "自定义字段'{name}'的值无效: {error}" -#: netbox/models/features.py:295 +#: netbox/netbox/models/features.py:295 #, python-brace-format msgid "Custom field '{name}' must have a unique value." msgstr "自定义字段 '{name}'必须具有唯一值。" -#: netbox/models/features.py:302 +#: netbox/netbox/models/features.py:302 #, python-brace-format msgid "Missing required custom field '{name}'." msgstr "缺少必需的自定义字段'{name}'." -#: netbox/models/features.py:462 +#: netbox/netbox/models/features.py:462 msgid "Remote data source" msgstr "远程数据源" -#: netbox/models/features.py:472 +#: netbox/netbox/models/features.py:472 msgid "data path" msgstr "文件路径" -#: netbox/models/features.py:476 +#: netbox/netbox/models/features.py:476 msgid "Path to remote file (relative to data source root)" msgstr "数据源文件路径(相对路径)" -#: netbox/models/features.py:479 +#: netbox/netbox/models/features.py:479 msgid "auto sync enabled" msgstr "自动同步已启用" -#: netbox/models/features.py:481 +#: netbox/netbox/models/features.py:481 msgid "Enable automatic synchronization of data when the data file is updated" msgstr "数据文件更新时启用数据自动同步" -#: netbox/models/features.py:484 +#: netbox/netbox/models/features.py:484 msgid "date synced" msgstr "数据已同步" -#: netbox/models/features.py:578 +#: netbox/netbox/models/features.py:578 #, python-brace-format msgid "{class_name} must implement a sync_data() method." msgstr "{class_name}必须包含sync_data()方法。" -#: netbox/navigation/menu.py:11 +#: netbox/netbox/navigation/menu.py:11 msgid "Organization" msgstr "组织机构" -#: netbox/navigation/menu.py:19 +#: netbox/netbox/navigation/menu.py:19 msgid "Site Groups" msgstr "站点组" -#: netbox/navigation/menu.py:27 +#: netbox/netbox/navigation/menu.py:27 msgid "Tenant Groups" msgstr "租户组" -#: netbox/navigation/menu.py:34 +#: netbox/netbox/navigation/menu.py:34 msgid "Contact Groups" msgstr "联系组" -#: netbox/navigation/menu.py:35 templates/tenancy/contactrole.html:8 +#: netbox/netbox/navigation/menu.py:35 +#: netbox/templates/tenancy/contactrole.html:8 msgid "Contact Roles" msgstr "联系角色" -#: netbox/navigation/menu.py:36 +#: netbox/netbox/navigation/menu.py:36 msgid "Contact Assignments" msgstr "联系分配" -#: netbox/navigation/menu.py:50 +#: netbox/netbox/navigation/menu.py:50 msgid "Rack Roles" msgstr "机柜角色" -#: netbox/navigation/menu.py:54 +#: netbox/netbox/navigation/menu.py:54 msgid "Elevations" msgstr "机柜立面图" -#: netbox/navigation/menu.py:60 netbox/navigation/menu.py:62 +#: netbox/netbox/navigation/menu.py:60 netbox/netbox/navigation/menu.py:62 msgid "Rack Types" msgstr "机架类型" -#: netbox/navigation/menu.py:76 +#: netbox/netbox/navigation/menu.py:76 msgid "Modules" msgstr "设备板卡" -#: netbox/navigation/menu.py:80 templates/dcim/device.html:160 -#: templates/dcim/virtualdevicecontext.html:8 +#: netbox/netbox/navigation/menu.py:80 netbox/templates/dcim/device.html:160 +#: netbox/templates/dcim/virtualdevicecontext.html:8 msgid "Virtual Device Contexts" msgstr "设备虚拟实例" -#: netbox/navigation/menu.py:88 +#: netbox/netbox/navigation/menu.py:88 msgid "Manufacturers" msgstr "厂商" -#: netbox/navigation/menu.py:92 +#: netbox/netbox/navigation/menu.py:92 msgid "Device Components" msgstr "设备详情" -#: netbox/navigation/menu.py:104 templates/dcim/inventoryitemrole.html:8 +#: netbox/netbox/navigation/menu.py:104 +#: netbox/templates/dcim/inventoryitemrole.html:8 msgid "Inventory Item Roles" msgstr "库存物品分类" -#: netbox/navigation/menu.py:111 netbox/navigation/menu.py:115 +#: netbox/netbox/navigation/menu.py:111 netbox/netbox/navigation/menu.py:115 msgid "Connections" msgstr "连接" -#: netbox/navigation/menu.py:117 +#: netbox/netbox/navigation/menu.py:117 msgid "Cables" msgstr "链路" -#: netbox/navigation/menu.py:118 +#: netbox/netbox/navigation/menu.py:118 msgid "Wireless Links" msgstr "无线连接" -#: netbox/navigation/menu.py:121 +#: netbox/netbox/navigation/menu.py:121 msgid "Interface Connections" msgstr "接口连接" -#: netbox/navigation/menu.py:126 +#: netbox/netbox/navigation/menu.py:126 msgid "Console Connections" msgstr "Console 连接" -#: netbox/navigation/menu.py:131 +#: netbox/netbox/navigation/menu.py:131 msgid "Power Connections" msgstr "电源连接" -#: netbox/navigation/menu.py:147 +#: netbox/netbox/navigation/menu.py:147 msgid "Wireless LAN Groups" msgstr "无线局域网组" -#: netbox/navigation/menu.py:168 +#: netbox/netbox/navigation/menu.py:168 msgid "Prefix & VLAN Roles" msgstr "前缀和VLAN角色" -#: netbox/navigation/menu.py:174 +#: netbox/netbox/navigation/menu.py:174 msgid "ASN Ranges" msgstr "ASN 范围" -#: netbox/navigation/menu.py:196 +#: netbox/netbox/navigation/menu.py:196 msgid "VLAN Groups" msgstr "VLAN 组" -#: netbox/navigation/menu.py:203 +#: netbox/netbox/navigation/menu.py:203 msgid "Service Templates" msgstr "服务模版" -#: netbox/navigation/menu.py:204 templates/dcim/device.html:302 -#: templates/ipam/ipaddress.html:118 -#: templates/virtualization/virtualmachine.html:154 +#: netbox/netbox/navigation/menu.py:204 netbox/templates/dcim/device.html:302 +#: netbox/templates/ipam/ipaddress.html:118 +#: netbox/templates/virtualization/virtualmachine.html:154 msgid "Services" msgstr "服务" -#: netbox/navigation/menu.py:211 +#: netbox/netbox/navigation/menu.py:211 msgid "VPN" msgstr "VPN" -#: netbox/navigation/menu.py:215 netbox/navigation/menu.py:217 -#: vpn/tables/tunnels.py:24 +#: netbox/netbox/navigation/menu.py:215 netbox/netbox/navigation/menu.py:217 +#: netbox/vpn/tables/tunnels.py:24 msgid "Tunnels" msgstr "隧道" -#: netbox/navigation/menu.py:218 templates/vpn/tunnelgroup.html:8 +#: netbox/netbox/navigation/menu.py:218 +#: netbox/templates/vpn/tunnelgroup.html:8 msgid "Tunnel Groups" msgstr "隧道组" -#: netbox/navigation/menu.py:219 +#: netbox/netbox/navigation/menu.py:219 msgid "Tunnel Terminations" msgstr "隧道终端" -#: netbox/navigation/menu.py:223 netbox/navigation/menu.py:225 -#: vpn/models/l2vpn.py:64 +#: netbox/netbox/navigation/menu.py:223 netbox/netbox/navigation/menu.py:225 +#: netbox/vpn/models/l2vpn.py:64 msgid "L2VPNs" msgstr "L2VPN" -#: netbox/navigation/menu.py:226 templates/vpn/l2vpn.html:56 -#: templates/vpn/tunnel.html:72 vpn/tables/tunnels.py:58 +#: 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/navigation/menu.py:232 +#: netbox/netbox/navigation/menu.py:232 msgid "IKE Proposals" msgstr "IKE 协议提案" -#: netbox/navigation/menu.py:233 templates/vpn/ikeproposal.html:41 +#: netbox/netbox/navigation/menu.py:233 +#: netbox/templates/vpn/ikeproposal.html:41 msgid "IKE Policies" msgstr "IKE策略" -#: netbox/navigation/menu.py:234 +#: netbox/netbox/navigation/menu.py:234 msgid "IPSec Proposals" msgstr "IPSec 协议提案" -#: netbox/navigation/menu.py:235 templates/vpn/ipsecproposal.html:37 +#: netbox/netbox/navigation/menu.py:235 +#: netbox/templates/vpn/ipsecproposal.html:37 msgid "IPSec Policies" msgstr "IPSec策略" -#: netbox/navigation/menu.py:236 templates/vpn/ikepolicy.html:38 -#: templates/vpn/ipsecpolicy.html:25 +#: netbox/netbox/navigation/menu.py:236 netbox/templates/vpn/ikepolicy.html:38 +#: netbox/templates/vpn/ipsecpolicy.html:25 msgid "IPSec Profiles" msgstr "IPSec 配置文件" -#: netbox/navigation/menu.py:243 templates/dcim/device_edit.html:78 -msgid "Virtualization" -msgstr "虚拟化" - -#: netbox/navigation/menu.py:251 -#: templates/virtualization/virtualmachine.html:174 -#: templates/virtualization/virtualmachine/base.html:32 -#: templates/virtualization/virtualmachine_list.html:21 -#: virtualization/tables/virtualmachines.py:104 virtualization/views.py:388 +#: netbox/netbox/navigation/menu.py:251 +#: 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 msgid "Virtual Disks" msgstr "虚拟磁盘" -#: netbox/navigation/menu.py:258 +#: netbox/netbox/navigation/menu.py:258 msgid "Cluster Types" msgstr "集群类型" -#: netbox/navigation/menu.py:259 +#: netbox/netbox/navigation/menu.py:259 msgid "Cluster Groups" msgstr "集群组" -#: netbox/navigation/menu.py:273 +#: netbox/netbox/navigation/menu.py:273 msgid "Circuit Types" msgstr "链路类型" -#: netbox/navigation/menu.py:274 +#: netbox/netbox/navigation/menu.py:274 msgid "Circuit Groups" msgstr "电路组" -#: netbox/navigation/menu.py:275 templates/circuits/circuit.html:66 +#: netbox/netbox/navigation/menu.py:275 +#: netbox/templates/circuits/circuit.html:66 msgid "Group Assignments" msgstr "小组作业" -#: netbox/navigation/menu.py:276 +#: netbox/netbox/navigation/menu.py:276 msgid "Circuit Terminations" msgstr "链路终端" -#: netbox/navigation/menu.py:280 netbox/navigation/menu.py:282 +#: netbox/netbox/navigation/menu.py:280 netbox/netbox/navigation/menu.py:282 msgid "Providers" msgstr "运营商" -#: netbox/navigation/menu.py:283 templates/circuits/provider.html:51 +#: netbox/netbox/navigation/menu.py:283 +#: netbox/templates/circuits/provider.html:51 msgid "Provider Accounts" msgstr "运营商账户" -#: netbox/navigation/menu.py:284 +#: netbox/netbox/navigation/menu.py:284 msgid "Provider Networks" msgstr "运营商网络" -#: netbox/navigation/menu.py:298 +#: netbox/netbox/navigation/menu.py:298 msgid "Power Panels" msgstr "电源面板" -#: netbox/navigation/menu.py:309 +#: netbox/netbox/navigation/menu.py:309 msgid "Configurations" msgstr "配置" -#: netbox/navigation/menu.py:311 +#: netbox/netbox/navigation/menu.py:311 msgid "Config Contexts" msgstr "配置实例" -#: netbox/navigation/menu.py:312 +#: netbox/netbox/navigation/menu.py:312 msgid "Config Templates" msgstr "配置模板" -#: netbox/navigation/menu.py:319 netbox/navigation/menu.py:323 +#: netbox/netbox/navigation/menu.py:319 netbox/netbox/navigation/menu.py:323 msgid "Customization" msgstr "自定义" -#: netbox/navigation/menu.py:325 templates/dcim/device_edit.html:103 -#: templates/dcim/htmx/cable_edit.html:81 -#: templates/dcim/virtualchassis_add.html:31 -#: templates/dcim/virtualchassis_edit.html:40 -#: templates/generic/bulk_edit.html:76 templates/htmx/form.html:19 -#: templates/inc/filter_list.html:30 templates/inc/panels/custom_fields.html:7 -#: templates/ipam/ipaddress_bulk_add.html:35 templates/ipam/vlan_edit.html:59 +#: netbox/netbox/navigation/menu.py:325 +#: netbox/templates/dcim/device_edit.html:103 +#: netbox/templates/dcim/htmx/cable_edit.html:81 +#: netbox/templates/dcim/virtualchassis_add.html:31 +#: netbox/templates/dcim/virtualchassis_edit.html:40 +#: netbox/templates/generic/bulk_edit.html:76 +#: netbox/templates/htmx/form.html:19 netbox/templates/inc/filter_list.html:30 +#: netbox/templates/inc/panels/custom_fields.html:7 +#: netbox/templates/ipam/ipaddress_bulk_add.html:35 +#: netbox/templates/ipam/vlan_edit.html:59 msgid "Custom Fields" msgstr "自定义字段" -#: netbox/navigation/menu.py:326 +#: netbox/netbox/navigation/menu.py:326 msgid "Custom Field Choices" msgstr "自定义字段选项" -#: netbox/navigation/menu.py:327 +#: netbox/netbox/navigation/menu.py:327 msgid "Custom Links" msgstr "自定义链接" -#: netbox/navigation/menu.py:328 +#: netbox/netbox/navigation/menu.py:328 msgid "Export Templates" msgstr "导出模板" -#: netbox/navigation/menu.py:329 +#: netbox/netbox/navigation/menu.py:329 msgid "Saved Filters" msgstr "已保存的过滤器" -#: netbox/navigation/menu.py:331 +#: netbox/netbox/navigation/menu.py:331 msgid "Image Attachments" msgstr "图片附件" -#: netbox/navigation/menu.py:349 +#: netbox/netbox/navigation/menu.py:349 msgid "Operations" msgstr "操作" -#: netbox/navigation/menu.py:353 +#: netbox/netbox/navigation/menu.py:353 msgid "Integrations" msgstr "系统集成" -#: netbox/navigation/menu.py:355 +#: netbox/netbox/navigation/menu.py:355 msgid "Data Sources" msgstr "数据源" -#: netbox/navigation/menu.py:356 +#: netbox/netbox/navigation/menu.py:356 msgid "Event Rules" msgstr "事件规则" -#: netbox/navigation/menu.py:357 +#: netbox/netbox/navigation/menu.py:357 msgid "Webhooks" msgstr "Webhook" -#: netbox/navigation/menu.py:361 netbox/navigation/menu.py:365 -#: netbox/views/generic/feature_views.py:153 -#: templates/extras/report/base.html:37 templates/extras/script/base.html:36 +#: netbox/netbox/navigation/menu.py:361 netbox/netbox/navigation/menu.py:365 +#: netbox/netbox/views/generic/feature_views.py:153 +#: netbox/templates/extras/report/base.html:37 +#: netbox/templates/extras/script/base.html:36 msgid "Jobs" msgstr "任务" -#: netbox/navigation/menu.py:371 +#: netbox/netbox/navigation/menu.py:371 msgid "Logging" msgstr "日志" -#: netbox/navigation/menu.py:373 +#: netbox/netbox/navigation/menu.py:373 msgid "Notification Groups" msgstr "通知组" -#: netbox/navigation/menu.py:374 +#: netbox/netbox/navigation/menu.py:374 msgid "Journal Entries" msgstr "日志条目" -#: netbox/navigation/menu.py:375 templates/core/objectchange.html:9 -#: templates/core/objectchange_list.html:4 +#: netbox/netbox/navigation/menu.py:375 +#: netbox/templates/core/objectchange.html:9 +#: netbox/templates/core/objectchange_list.html:4 msgid "Change Log" msgstr "修改日志" -#: netbox/navigation/menu.py:382 templates/inc/user_menu.html:29 +#: netbox/netbox/navigation/menu.py:382 netbox/templates/inc/user_menu.html:29 msgid "Admin" msgstr "管理员" -#: netbox/navigation/menu.py:430 templates/account/base.html:27 -#: templates/inc/user_menu.html:57 +#: netbox/netbox/navigation/menu.py:430 netbox/templates/account/base.html:27 +#: netbox/templates/inc/user_menu.html:57 msgid "API Tokens" msgstr "API Token" -#: netbox/navigation/menu.py:437 users/forms/model_forms.py:187 -#: users/forms/model_forms.py:195 users/forms/model_forms.py:242 -#: users/forms/model_forms.py:249 +#: netbox/netbox/navigation/menu.py:437 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/navigation/menu.py:445 netbox/navigation/menu.py:449 -#: templates/core/system.html:7 +#: netbox/netbox/navigation/menu.py:445 netbox/netbox/navigation/menu.py:449 +#: netbox/templates/core/system.html:7 msgid "System" msgstr "系统" -#: netbox/navigation/menu.py:454 netbox/navigation/menu.py:502 -#: templates/500.html:35 templates/account/preferences.html:22 -#: templates/core/plugin.html:13 templates/core/plugin_list.html:7 -#: templates/core/plugin_list.html:12 +#: netbox/netbox/navigation/menu.py:454 netbox/netbox/navigation/menu.py:502 +#: netbox/templates/500.html:35 netbox/templates/account/preferences.html:22 +#: netbox/templates/core/plugin.html:13 +#: netbox/templates/core/plugin_list.html:7 +#: netbox/templates/core/plugin_list.html:12 msgid "Plugins" msgstr "插件" -#: netbox/navigation/menu.py:459 +#: netbox/netbox/navigation/menu.py:459 msgid "Configuration History" msgstr "配置历史记录" -#: netbox/navigation/menu.py:465 templates/core/rq_task.html:8 -#: templates/core/rq_task_list.html:22 +#: netbox/netbox/navigation/menu.py:465 netbox/templates/core/rq_task.html:8 +#: netbox/templates/core/rq_task_list.html:22 msgid "Background Tasks" msgstr "后台任务" -#: netbox/plugins/navigation.py:47 netbox/plugins/navigation.py:69 +#: netbox/netbox/plugins/navigation.py:47 +#: netbox/netbox/plugins/navigation.py:69 msgid "Permissions must be passed as a tuple or list." msgstr "权限必须以元组或列表的形式传递。" -#: netbox/plugins/navigation.py:51 +#: netbox/netbox/plugins/navigation.py:51 msgid "Buttons must be passed as a tuple or list." msgstr "按钮必须作为元组或列表传递。" -#: netbox/plugins/navigation.py:73 +#: netbox/netbox/plugins/navigation.py:73 msgid "Button color must be a choice within ButtonColorChoices." msgstr "按钮颜色必须是颜色可选项中的一个。" -#: netbox/plugins/registration.py:25 +#: netbox/netbox/plugins/registration.py:25 #, python-brace-format msgid "" "PluginTemplateExtension class {template_extension} was passed as an " "instance!" msgstr "PluginTemplateExtension类{template_extension}已作为实例传递!" -#: netbox/plugins/registration.py:31 +#: netbox/netbox/plugins/registration.py:31 #, python-brace-format msgid "" "{template_extension} is not a subclass of " "netbox.plugins.PluginTemplateExtension!" msgstr "{template_extension} 不是netbox.plugins.PluginTemplateExtension的子类。" -#: netbox/plugins/registration.py:51 +#: netbox/netbox/plugins/registration.py:51 #, python-brace-format msgid "{item} must be an instance of netbox.plugins.PluginMenuItem" msgstr "{item} 必须是netbox.plugins.PluginMenuItem的实例。" -#: netbox/plugins/registration.py:62 +#: netbox/netbox/plugins/registration.py:62 #, python-brace-format msgid "{menu_link} must be an instance of netbox.plugins.PluginMenuItem" msgstr "{menu_link} 必须是netbox.plugins.PluginMenuItem的实例。" -#: netbox/plugins/registration.py:67 +#: netbox/netbox/plugins/registration.py:67 #, python-brace-format msgid "{button} must be an instance of netbox.plugins.PluginMenuButton" msgstr "{button}必须是netbox.plugins.PluginMenuButton的实例。" -#: netbox/plugins/templates.py:37 +#: netbox/netbox/plugins/templates.py:37 msgid "extra_context must be a dictionary" msgstr "附加实例必须是字典" -#: netbox/preferences.py:19 +#: netbox/netbox/preferences.py:19 msgid "HTMX Navigation" msgstr "HTMX 导航" -#: netbox/preferences.py:24 +#: netbox/netbox/preferences.py:24 msgid "Enable dynamic UI navigation" msgstr "启用动态 UI 导航" -#: netbox/preferences.py:26 +#: netbox/netbox/preferences.py:26 msgid "Experimental feature" msgstr "实验性功能" -#: netbox/preferences.py:29 +#: netbox/netbox/preferences.py:29 msgid "Language" msgstr "语言" -#: netbox/preferences.py:34 +#: netbox/netbox/preferences.py:34 msgid "Forces UI translation to the specified language" msgstr "强制将 UI 翻译成指定语言" -#: netbox/preferences.py:36 +#: netbox/netbox/preferences.py:36 msgid "Support for translation has been disabled locally" msgstr "对翻译的支持已在本地禁用" -#: netbox/preferences.py:42 +#: netbox/netbox/preferences.py:42 msgid "Page length" msgstr "页面长度" -#: netbox/preferences.py:44 +#: netbox/netbox/preferences.py:44 msgid "The default number of objects to display per page" msgstr "每页默认显示的对象数" -#: netbox/preferences.py:48 +#: netbox/netbox/preferences.py:48 msgid "Paginator placement" msgstr "分页器位置" -#: netbox/preferences.py:50 +#: netbox/netbox/preferences.py:50 msgid "Bottom" msgstr "底部" -#: netbox/preferences.py:51 +#: netbox/netbox/preferences.py:51 msgid "Top" msgstr "顶部" -#: netbox/preferences.py:52 +#: netbox/netbox/preferences.py:52 msgid "Both" msgstr "两者皆有" -#: netbox/preferences.py:55 +#: netbox/netbox/preferences.py:55 msgid "Where the paginator controls will be displayed relative to a table" msgstr "分页器控件相对于表格的显示位置" -#: netbox/preferences.py:60 +#: netbox/netbox/preferences.py:60 msgid "Data format" msgstr "数据格式" -#: netbox/preferences.py:65 +#: netbox/netbox/preferences.py:65 msgid "The preferred syntax for displaying generic data within the UI" msgstr "在UI中显示通用数据的首选语法" -#: netbox/registry.py:14 +#: netbox/netbox/registry.py:14 #, python-brace-format msgid "Invalid store: {key}" msgstr "无效商店: {key}" -#: netbox/registry.py:17 +#: netbox/netbox/registry.py:17 msgid "Cannot add stores to registry after initialization" msgstr "初始化后无法在注册表中添加存储空间" -#: netbox/registry.py:20 +#: netbox/netbox/registry.py:20 msgid "Cannot delete stores from registry" msgstr "无法从注册表中删除存储" -#: netbox/settings.py:760 +#: netbox/netbox/settings.py:760 msgid "Czech" msgstr "捷克语" -#: netbox/settings.py:761 +#: netbox/netbox/settings.py:761 msgid "Danish" msgstr "丹麦语" -#: netbox/settings.py:762 +#: netbox/netbox/settings.py:762 msgid "German" msgstr "德语" -#: netbox/settings.py:763 +#: netbox/netbox/settings.py:763 msgid "English" msgstr "英语" -#: netbox/settings.py:764 +#: netbox/netbox/settings.py:764 msgid "Spanish" msgstr "西班牙语" -#: netbox/settings.py:765 +#: netbox/netbox/settings.py:765 msgid "French" msgstr "法语" -#: netbox/settings.py:766 +#: netbox/netbox/settings.py:766 msgid "Italian" msgstr "意大利语" -#: netbox/settings.py:767 +#: netbox/netbox/settings.py:767 msgid "Japanese" msgstr "日语" -#: netbox/settings.py:768 +#: netbox/netbox/settings.py:768 msgid "Dutch" msgstr "荷兰语" -#: netbox/settings.py:769 +#: netbox/netbox/settings.py:769 msgid "Polish" msgstr "波兰语" -#: netbox/settings.py:770 +#: netbox/netbox/settings.py:770 msgid "Portuguese" msgstr "葡萄牙语" -#: netbox/settings.py:771 +#: netbox/netbox/settings.py:771 msgid "Russian" msgstr "俄语" -#: netbox/settings.py:772 +#: netbox/netbox/settings.py:772 msgid "Turkish" msgstr "土耳其语" -#: netbox/settings.py:773 +#: netbox/netbox/settings.py:773 msgid "Ukrainian" msgstr "乌克兰语" -#: netbox/settings.py:774 +#: netbox/netbox/settings.py:774 msgid "Chinese" msgstr "中文" -#: netbox/tables/columns.py:176 +#: netbox/netbox/tables/columns.py:176 msgid "Select all" msgstr "选择全部" -#: netbox/tables/columns.py:189 +#: netbox/netbox/tables/columns.py:189 msgid "Toggle all" msgstr "全部切换" -#: netbox/tables/columns.py:300 +#: netbox/netbox/tables/columns.py:300 msgid "Toggle Dropdown" msgstr "切换下拉菜单" -#: netbox/tables/columns.py:572 templates/core/job.html:53 +#: netbox/netbox/tables/columns.py:572 netbox/templates/core/job.html:53 msgid "Error" msgstr "错误" -#: netbox/tables/tables.py:58 +#: netbox/netbox/tables/tables.py:58 #, python-brace-format msgid "No {model_name} found" msgstr "找不到 {model_name} " -#: netbox/tables/tables.py:249 templates/generic/bulk_import.html:117 +#: netbox/netbox/tables/tables.py:249 +#: netbox/templates/generic/bulk_import.html:117 msgid "Field" msgstr "字段" -#: netbox/tables/tables.py:252 +#: netbox/netbox/tables/tables.py:252 msgid "Value" msgstr "值" -#: netbox/tests/dummy_plugin/navigation.py:29 +#: netbox/netbox/tests/dummy_plugin/navigation.py:29 msgid "Dummy Plugin" msgstr "虚拟插件" -#: netbox/views/generic/bulk_views.py:114 +#: netbox/netbox/views/generic/bulk_views.py:114 #, python-brace-format msgid "" "There was an error rendering the selected export template ({template}): " "{error}" msgstr "渲染所选导出模板时出错 ({template}): {error}" -#: netbox/views/generic/bulk_views.py:416 +#: netbox/netbox/views/generic/bulk_views.py:416 #, python-brace-format msgid "Row {i}: Object with ID {id} does not exist" msgstr "第{i}行: ID为{id}的对象不存在" -#: netbox/views/generic/bulk_views.py:702 -#: netbox/views/generic/bulk_views.py:900 -#: netbox/views/generic/bulk_views.py:948 +#: netbox/netbox/views/generic/bulk_views.py:709 +#: netbox/netbox/views/generic/bulk_views.py:910 +#: netbox/netbox/views/generic/bulk_views.py:958 #, python-brace-format msgid "No {object_type} were selected." msgstr "没有 {object_type} 被选中。" -#: netbox/views/generic/bulk_views.py:782 +#: netbox/netbox/views/generic/bulk_views.py:788 #, python-brace-format msgid "Renamed {count} {object_type}" msgstr "重命名 {count} {object_type}" -#: netbox/views/generic/bulk_views.py:878 +#: netbox/netbox/views/generic/bulk_views.py:888 #, python-brace-format msgid "Deleted {count} {object_type}" msgstr "已删除 {count} {object_type}" -#: netbox/views/generic/feature_views.py:40 +#: netbox/netbox/views/generic/feature_views.py:40 msgid "Changelog" msgstr "变更日志" -#: netbox/views/generic/feature_views.py:93 +#: netbox/netbox/views/generic/feature_views.py:93 msgid "Journal" msgstr "日志" -#: netbox/views/generic/feature_views.py:207 +#: netbox/netbox/views/generic/feature_views.py:207 msgid "Unable to synchronize data: No data file set." msgstr "无法同步数据:未设置任何数据文件。" -#: netbox/views/generic/feature_views.py:211 +#: netbox/netbox/views/generic/feature_views.py:211 #, python-brace-format msgid "Synchronized data for {object_type} {object}." msgstr "的同步数据 {object_type} {object}。" -#: netbox/views/generic/feature_views.py:236 +#: netbox/netbox/views/generic/feature_views.py:236 #, python-brace-format msgid "Synced {count} {object_type}" msgstr "已同步 {count} {object_type}" -#: netbox/views/generic/object_views.py:108 +#: netbox/netbox/views/generic/object_views.py:108 #, python-brace-format msgid "{class_name} must implement get_children()" msgstr "{class_name}必须实现get_children()方法" -#: netbox/views/misc.py:44 +#: netbox/netbox/views/misc.py:46 msgid "" "There was an error loading the dashboard configuration. A default dashboard " "is in use." msgstr "加载仪表盘配置时出错。正在使用默认仪表盘。" -#: templates/403.html:4 +#: netbox/templates/403.html:4 msgid "Access Denied" msgstr "拒绝访问" -#: templates/403.html:9 +#: netbox/templates/403.html:9 msgid "You do not have permission to access this page" msgstr "你没有权限访问该页面" -#: templates/404.html:4 +#: netbox/templates/404.html:4 msgid "Page Not Found" msgstr "找不到页面" -#: templates/404.html:9 +#: netbox/templates/404.html:9 msgid "The requested page does not exist" msgstr "请求的页面不存在" -#: templates/500.html:7 templates/500.html:18 +#: netbox/templates/500.html:7 netbox/templates/500.html:18 msgid "Server Error" msgstr "服务器错误" -#: templates/500.html:23 +#: netbox/templates/500.html:23 msgid "There was a problem with your request. Please contact an administrator" msgstr "请求出错。 请联系管理员" -#: templates/500.html:28 +#: netbox/templates/500.html:28 msgid "The complete exception is provided below" msgstr "异常信息如下" -#: templates/500.html:33 templates/core/system.html:40 +#: netbox/templates/500.html:33 netbox/templates/core/system.html:40 msgid "Python version" msgstr "Python 版本" -#: templates/500.html:34 +#: netbox/templates/500.html:34 msgid "NetBox version" msgstr "NetBox 版本" -#: templates/500.html:36 +#: netbox/templates/500.html:36 msgid "None installed" msgstr "未安装" -#: templates/500.html:39 +#: netbox/templates/500.html:39 msgid "If further assistance is required, please post to the" msgstr "如果需要进一步帮助,请提交到" -#: templates/500.html:39 +#: netbox/templates/500.html:39 msgid "NetBox discussion forum" msgstr "NetBox 论坛" -#: templates/500.html:39 +#: netbox/templates/500.html:39 msgid "on GitHub" msgstr "在GitHub上" -#: templates/500.html:42 templates/base/40x.html:17 +#: netbox/templates/500.html:42 netbox/templates/base/40x.html:17 msgid "Home Page" msgstr "主页" -#: templates/account/base.html:7 templates/inc/user_menu.html:45 -#: vpn/forms/bulk_edit.py:255 vpn/forms/filtersets.py:189 -#: vpn/forms/model_forms.py:379 +#: netbox/templates/account/base.html:7 netbox/templates/inc/user_menu.html:45 +#: netbox/vpn/forms/bulk_edit.py:255 netbox/vpn/forms/filtersets.py:189 +#: netbox/vpn/forms/model_forms.py:379 msgid "Profile" msgstr "个人资料" -#: templates/account/base.html:13 templates/account/notifications.html:7 -#: templates/inc/user_menu.html:15 +#: netbox/templates/account/base.html:13 +#: netbox/templates/account/notifications.html:7 +#: netbox/templates/inc/user_menu.html:15 msgid "Notifications" msgstr "通知" -#: templates/account/base.html:16 templates/account/subscriptions.html:7 -#: templates/inc/user_menu.html:51 +#: netbox/templates/account/base.html:16 +#: netbox/templates/account/subscriptions.html:7 +#: netbox/templates/inc/user_menu.html:51 msgid "Subscriptions" msgstr "订阅" -#: templates/account/base.html:19 templates/inc/user_menu.html:54 +#: netbox/templates/account/base.html:19 +#: netbox/templates/inc/user_menu.html:54 msgid "Preferences" msgstr "首选项" -#: templates/account/password.html:5 +#: netbox/templates/account/password.html:5 msgid "Change Password" msgstr "修改密码" -#: templates/account/password.html:19 templates/account/preferences.html:77 -#: templates/core/configrevision_restore.html:63 -#: templates/dcim/devicebay_populate.html:34 -#: templates/dcim/virtualchassis_add_member.html:26 -#: templates/dcim/virtualchassis_edit.html:103 -#: templates/extras/object_journal.html:26 templates/extras/script.html:38 -#: templates/generic/bulk_add_component.html:67 -#: templates/generic/bulk_delete.html:65 templates/generic/bulk_edit.html:106 -#: templates/generic/bulk_import.html:56 templates/generic/bulk_import.html:78 -#: templates/generic/bulk_import.html:100 -#: templates/generic/bulk_remove.html:62 templates/generic/bulk_rename.html:63 -#: templates/generic/confirmation_form.html:19 -#: templates/generic/object_edit.html:72 templates/htmx/delete_form.html:53 -#: templates/htmx/delete_form.html:55 templates/ipam/ipaddress_assign.html:28 -#: templates/virtualization/cluster_add_devices.html:30 +#: netbox/templates/account/password.html:19 +#: netbox/templates/account/preferences.html:77 +#: netbox/templates/core/configrevision_restore.html:63 +#: netbox/templates/dcim/devicebay_populate.html:34 +#: netbox/templates/dcim/virtualchassis_add_member.html:26 +#: netbox/templates/dcim/virtualchassis_edit.html:103 +#: netbox/templates/extras/object_journal.html:26 +#: netbox/templates/extras/script.html:38 +#: netbox/templates/generic/bulk_add_component.html:67 +#: netbox/templates/generic/bulk_delete.html:65 +#: netbox/templates/generic/bulk_edit.html:106 +#: netbox/templates/generic/bulk_import.html:56 +#: netbox/templates/generic/bulk_import.html:78 +#: netbox/templates/generic/bulk_import.html:100 +#: netbox/templates/generic/bulk_remove.html:62 +#: netbox/templates/generic/bulk_rename.html:63 +#: netbox/templates/generic/confirmation_form.html:19 +#: netbox/templates/generic/object_edit.html:72 +#: netbox/templates/htmx/delete_form.html:53 +#: netbox/templates/htmx/delete_form.html:55 +#: netbox/templates/ipam/ipaddress_assign.html:28 +#: netbox/templates/virtualization/cluster_add_devices.html:30 msgid "Cancel" msgstr "取消" -#: templates/account/password.html:20 templates/account/preferences.html:78 -#: templates/dcim/devicebay_populate.html:35 -#: templates/dcim/virtualchassis_add_member.html:28 -#: templates/dcim/virtualchassis_edit.html:105 -#: templates/extras/dashboard/widget_add.html:26 -#: templates/extras/dashboard/widget_config.html:19 -#: templates/extras/object_journal.html:27 -#: templates/generic/object_edit.html:75 -#: utilities/templates/helpers/applied_filters.html:16 -#: utilities/templates/helpers/table_config_form.html:40 +#: netbox/templates/account/password.html:20 +#: netbox/templates/account/preferences.html:78 +#: netbox/templates/dcim/devicebay_populate.html:35 +#: netbox/templates/dcim/virtualchassis_add_member.html:28 +#: netbox/templates/dcim/virtualchassis_edit.html:105 +#: netbox/templates/extras/dashboard/widget_add.html:26 +#: netbox/templates/extras/dashboard/widget_config.html:19 +#: netbox/templates/extras/object_journal.html:27 +#: netbox/templates/generic/object_edit.html:75 +#: netbox/utilities/templates/helpers/applied_filters.html:16 +#: netbox/utilities/templates/helpers/table_config_form.html:40 msgid "Save" msgstr "保存" -#: templates/account/preferences.html:34 +#: netbox/templates/account/preferences.html:34 msgid "Table Configurations" msgstr "配置查看列表" -#: templates/account/preferences.html:39 +#: netbox/templates/account/preferences.html:39 msgid "Clear table preferences" msgstr "清理列表自定义选项" -#: templates/account/preferences.html:47 +#: netbox/templates/account/preferences.html:47 msgid "Toggle All" msgstr "全部切换" -#: templates/account/preferences.html:49 +#: netbox/templates/account/preferences.html:49 msgid "Table" msgstr "列表" -#: templates/account/preferences.html:50 +#: netbox/templates/account/preferences.html:50 msgid "Ordering" msgstr "订阅" -#: templates/account/preferences.html:51 +#: netbox/templates/account/preferences.html:51 msgid "Columns" msgstr "专栏" -#: templates/account/preferences.html:71 templates/dcim/cable_trace.html:113 -#: templates/extras/object_configcontext.html:43 +#: netbox/templates/account/preferences.html:71 +#: netbox/templates/dcim/cable_trace.html:113 +#: netbox/templates/extras/object_configcontext.html:43 msgid "None found" msgstr "未找到任何内容" -#: templates/account/profile.html:6 +#: netbox/templates/account/profile.html:6 msgid "User Profile" msgstr "用户个人资料" -#: templates/account/profile.html:12 +#: netbox/templates/account/profile.html:12 msgid "Account Details" msgstr "账户详情" -#: templates/account/profile.html:29 templates/tenancy/contact.html:43 -#: templates/users/user.html:25 tenancy/forms/bulk_edit.py:109 +#: netbox/templates/account/profile.html:29 +#: netbox/templates/tenancy/contact.html:43 +#: netbox/templates/users/user.html:25 netbox/tenancy/forms/bulk_edit.py:109 msgid "Email" msgstr "电子邮箱" -#: templates/account/profile.html:33 templates/users/user.html:29 +#: netbox/templates/account/profile.html:33 +#: netbox/templates/users/user.html:29 msgid "Account Created" msgstr "创建账号" -#: templates/account/profile.html:37 templates/users/user.html:33 +#: netbox/templates/account/profile.html:37 +#: netbox/templates/users/user.html:33 msgid "Last Login" msgstr "最后登录" -#: templates/account/profile.html:41 templates/users/user.html:45 +#: netbox/templates/account/profile.html:41 +#: netbox/templates/users/user.html:45 msgid "Superuser" msgstr "超级管理员用户" -#: templates/account/profile.html:45 templates/inc/user_menu.html:31 -#: templates/users/user.html:41 +#: netbox/templates/account/profile.html:45 +#: netbox/templates/inc/user_menu.html:31 netbox/templates/users/user.html:41 msgid "Staff" msgstr "工作人员" -#: templates/account/profile.html:53 templates/users/objectpermission.html:82 -#: templates/users/user.html:53 +#: netbox/templates/account/profile.html:53 +#: netbox/templates/users/objectpermission.html:82 +#: netbox/templates/users/user.html:53 msgid "Assigned Groups" msgstr "指定用户组" -#: templates/account/profile.html:58 -#: templates/circuits/circuit_terminations_swap.html:18 -#: templates/circuits/circuit_terminations_swap.html:26 -#: templates/circuits/circuittermination.html:34 -#: templates/circuits/inc/circuit_termination.html:68 -#: templates/core/objectchange.html:124 templates/core/objectchange.html:142 -#: templates/dcim/devicebay.html:59 -#: templates/dcim/inc/panels/inventory_items.html:45 -#: templates/dcim/interface.html:296 templates/dcim/modulebay.html:80 -#: templates/extras/configcontext.html:70 templates/extras/eventrule.html:66 -#: templates/extras/htmx/script_result.html:60 -#: templates/extras/webhook.html:65 templates/extras/webhook.html:75 -#: templates/inc/panel_table.html:13 templates/inc/panels/comments.html:10 -#: templates/ipam/inc/panels/fhrp_groups.html:56 templates/users/group.html:34 -#: templates/users/group.html:44 templates/users/objectpermission.html:77 -#: templates/users/objectpermission.html:87 templates/users/user.html:58 -#: templates/users/user.html:68 +#: netbox/templates/account/profile.html:58 +#: netbox/templates/circuits/circuit_terminations_swap.html:18 +#: netbox/templates/circuits/circuit_terminations_swap.html:26 +#: netbox/templates/circuits/circuittermination.html:34 +#: netbox/templates/circuits/inc/circuit_termination.html:68 +#: netbox/templates/core/objectchange.html:124 +#: 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/modulebay.html:80 +#: netbox/templates/extras/configcontext.html:70 +#: netbox/templates/extras/eventrule.html:66 +#: netbox/templates/extras/htmx/script_result.html:60 +#: netbox/templates/extras/webhook.html:65 +#: netbox/templates/extras/webhook.html:75 +#: netbox/templates/inc/panel_table.html:13 +#: netbox/templates/inc/panels/comments.html:10 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:56 +#: netbox/templates/users/group.html:34 netbox/templates/users/group.html:44 +#: netbox/templates/users/objectpermission.html:77 +#: netbox/templates/users/objectpermission.html:87 +#: netbox/templates/users/user.html:58 netbox/templates/users/user.html:68 msgid "None" msgstr "无" -#: templates/account/profile.html:68 templates/users/user.html:78 +#: netbox/templates/account/profile.html:68 +#: netbox/templates/users/user.html:78 msgid "Recent Activity" msgstr "近期活动" -#: templates/account/token.html:8 templates/account/token_list.html:6 +#: netbox/templates/account/token.html:8 +#: netbox/templates/account/token_list.html:6 msgid "My API Tokens" msgstr "我的 API Token" -#: templates/account/token.html:11 templates/account/token.html:19 -#: templates/users/token.html:6 templates/users/token.html:14 -#: users/forms/filtersets.py:120 +#: netbox/templates/account/token.html:11 +#: netbox/templates/account/token.html:19 netbox/templates/users/token.html:6 +#: netbox/templates/users/token.html:14 netbox/users/forms/filtersets.py:120 msgid "Token" msgstr "Token" -#: templates/account/token.html:39 templates/users/token.html:31 -#: users/forms/bulk_edit.py:107 +#: netbox/templates/account/token.html:39 netbox/templates/users/token.html:31 +#: netbox/users/forms/bulk_edit.py:107 msgid "Write enabled" msgstr "启用写入" -#: templates/account/token.html:51 templates/users/token.html:43 +#: netbox/templates/account/token.html:51 netbox/templates/users/token.html:43 msgid "Last used" msgstr "最后使用" -#: templates/account/token_list.html:12 +#: netbox/templates/account/token_list.html:12 msgid "Add a Token" msgstr "添加 Token" -#: templates/base/base.html:22 templates/home.html:27 +#: netbox/templates/base/base.html:22 netbox/templates/home.html:27 msgid "Home" msgstr "主页" -#: templates/base/layout.html:25 +#: netbox/templates/base/layout.html:25 msgid "NetBox Motif" msgstr "NetBox 图案" -#: templates/base/layout.html:38 templates/base/layout.html:39 -#: templates/login.html:14 templates/login.html:15 +#: netbox/templates/base/layout.html:38 netbox/templates/base/layout.html:39 +#: netbox/templates/login.html:14 netbox/templates/login.html:15 msgid "NetBox Logo" msgstr "NetBox Logo" -#: templates/base/layout.html:150 templates/base/layout.html:151 +#: netbox/templates/base/layout.html:150 netbox/templates/base/layout.html:151 msgid "Docs" msgstr "文档" -#: templates/base/layout.html:156 templates/base/layout.html:157 -#: templates/rest_framework/api.html:10 +#: netbox/templates/base/layout.html:156 netbox/templates/base/layout.html:157 +#: netbox/templates/rest_framework/api.html:10 msgid "REST API" msgstr "REST API" -#: templates/base/layout.html:162 templates/base/layout.html:163 +#: netbox/templates/base/layout.html:162 netbox/templates/base/layout.html:163 msgid "REST API documentation" msgstr "REST API 文档" -#: templates/base/layout.html:169 templates/base/layout.html:170 +#: netbox/templates/base/layout.html:169 netbox/templates/base/layout.html:170 msgid "GraphQL API" msgstr "GraphQL API" -#: templates/base/layout.html:185 templates/base/layout.html:186 +#: netbox/templates/base/layout.html:185 netbox/templates/base/layout.html:186 msgid "NetBox Labs Support" msgstr "NetBox 实验室支持" -#: templates/base/layout.html:194 templates/base/layout.html:195 +#: netbox/templates/base/layout.html:194 netbox/templates/base/layout.html:195 msgid "Source Code" msgstr "源代码" -#: templates/base/layout.html:200 templates/base/layout.html:201 +#: netbox/templates/base/layout.html:200 netbox/templates/base/layout.html:201 msgid "Community" msgstr "社区" -#: templates/circuits/circuit.html:47 +#: netbox/templates/circuits/circuit.html:47 msgid "Install Date" msgstr "安装时间" -#: templates/circuits/circuit.html:51 +#: netbox/templates/circuits/circuit.html:51 msgid "Termination Date" msgstr "维护模式" -#: templates/circuits/circuit.html:70 -#: templates/ipam/inc/panels/fhrp_groups.html:15 +#: netbox/templates/circuits/circuit.html:70 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:15 msgid "Assign Group" msgstr "分配组" -#: templates/circuits/circuit_terminations_swap.html:4 +#: netbox/templates/circuits/circuit_terminations_swap.html:4 msgid "Swap Circuit Terminations" msgstr "交换线路终点" -#: templates/circuits/circuit_terminations_swap.html:8 +#: netbox/templates/circuits/circuit_terminations_swap.html:8 #, python-format msgid "Swap these terminations for circuit %(circuit)s?" msgstr "将这些终结换成线路 %(circuit)s?" -#: templates/circuits/circuit_terminations_swap.html:14 +#: netbox/templates/circuits/circuit_terminations_swap.html:14 msgid "A side" msgstr "A端" -#: templates/circuits/circuit_terminations_swap.html:22 +#: netbox/templates/circuits/circuit_terminations_swap.html:22 msgid "Z side" msgstr "Z端" -#: templates/circuits/circuitgroup.html:16 +#: netbox/templates/circuits/circuitgroup.html:16 msgid "Assign Circuit" msgstr "分配电路" -#: templates/circuits/circuitgroupassignment.html:19 +#: netbox/templates/circuits/circuitgroupassignment.html:19 msgid "Circuit Group Assignment" msgstr "电路组分配" -#: templates/circuits/circuittype.html:10 +#: netbox/templates/circuits/circuittype.html:10 msgid "Add Circuit" msgstr "增加线路" -#: templates/circuits/circuittype.html:19 +#: netbox/templates/circuits/circuittype.html:19 msgid "Circuit Type" msgstr "线路类型" -#: templates/circuits/inc/circuit_termination.html:10 -#: templates/dcim/manufacturer.html:11 -#: templates/generic/bulk_add_component.html:22 -#: templates/users/objectpermission.html:38 -#: utilities/templates/buttons/add.html:4 -#: utilities/templates/helpers/table_config_form.html:20 +#: netbox/templates/circuits/inc/circuit_termination.html:10 +#: netbox/templates/dcim/manufacturer.html:11 +#: netbox/templates/generic/bulk_add_component.html:22 +#: netbox/templates/users/objectpermission.html:38 +#: netbox/utilities/templates/buttons/add.html:4 +#: netbox/utilities/templates/helpers/table_config_form.html:20 msgid "Add" msgstr "添加" -#: templates/circuits/inc/circuit_termination.html:15 -#: templates/circuits/inc/circuit_termination_fields.html:36 -#: templates/dcim/inc/panels/inventory_items.html:32 -#: templates/dcim/powerpanel.html:56 templates/extras/script_list.html:30 -#: templates/generic/object_edit.html:47 -#: templates/ipam/inc/ipaddress_edit_header.html:7 -#: templates/ipam/inc/panels/fhrp_groups.html:43 -#: utilities/templates/buttons/edit.html:3 +#: netbox/templates/circuits/inc/circuit_termination.html:15 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:36 +#: netbox/templates/dcim/inc/panels/inventory_items.html:32 +#: netbox/templates/dcim/powerpanel.html:56 +#: netbox/templates/extras/script_list.html:30 +#: netbox/templates/generic/object_edit.html:47 +#: netbox/templates/ipam/inc/ipaddress_edit_header.html:7 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:43 +#: netbox/utilities/templates/buttons/edit.html:3 msgid "Edit" msgstr "编辑" -#: templates/circuits/inc/circuit_termination.html:18 +#: netbox/templates/circuits/inc/circuit_termination.html:18 msgid "Swap" msgstr "交换" -#: templates/circuits/inc/circuit_termination_fields.html:19 -#: templates/dcim/consoleport.html:59 templates/dcim/consoleserverport.html:60 -#: templates/dcim/powerfeed.html:114 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:19 +#: netbox/templates/dcim/consoleport.html:59 +#: netbox/templates/dcim/consoleserverport.html:60 +#: netbox/templates/dcim/powerfeed.html:114 msgid "Marked as connected" msgstr "标记为已连接" -#: templates/circuits/inc/circuit_termination_fields.html:21 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:21 msgid "to" msgstr "到" -#: templates/circuits/inc/circuit_termination_fields.html:31 -#: templates/circuits/inc/circuit_termination_fields.html:32 -#: templates/dcim/frontport.html:80 -#: templates/dcim/inc/connection_endpoints.html:7 -#: templates/dcim/interface.html:154 templates/dcim/rearport.html:76 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:31 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:32 +#: netbox/templates/dcim/frontport.html:80 +#: netbox/templates/dcim/inc/connection_endpoints.html:7 +#: netbox/templates/dcim/interface.html:154 +#: netbox/templates/dcim/rearport.html:76 msgid "Trace" msgstr "跟踪" -#: templates/circuits/inc/circuit_termination_fields.html:35 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:35 msgid "Edit cable" msgstr "编辑线缆" -#: templates/circuits/inc/circuit_termination_fields.html:40 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:40 msgid "Remove cable" msgstr "删除线缆" -#: templates/circuits/inc/circuit_termination_fields.html:41 -#: templates/dcim/bulk_disconnect.html:5 -#: templates/dcim/device/consoleports.html:12 -#: templates/dcim/device/consoleserverports.html:12 -#: templates/dcim/device/frontports.html:12 -#: templates/dcim/device/interfaces.html:16 -#: templates/dcim/device/poweroutlets.html:12 -#: templates/dcim/device/powerports.html:12 -#: templates/dcim/device/rearports.html:12 templates/dcim/powerpanel.html:61 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:41 +#: netbox/templates/dcim/bulk_disconnect.html:5 +#: netbox/templates/dcim/device/consoleports.html:12 +#: netbox/templates/dcim/device/consoleserverports.html:12 +#: netbox/templates/dcim/device/frontports.html:12 +#: netbox/templates/dcim/device/interfaces.html:16 +#: netbox/templates/dcim/device/poweroutlets.html:12 +#: netbox/templates/dcim/device/powerports.html:12 +#: netbox/templates/dcim/device/rearports.html:12 +#: netbox/templates/dcim/powerpanel.html:61 msgid "Disconnect" msgstr "断开" -#: templates/circuits/inc/circuit_termination_fields.html:48 -#: templates/dcim/consoleport.html:69 templates/dcim/consoleserverport.html:70 -#: templates/dcim/frontport.html:102 templates/dcim/interface.html:180 -#: templates/dcim/interface.html:200 templates/dcim/powerfeed.html:127 -#: templates/dcim/poweroutlet.html:71 templates/dcim/poweroutlet.html:72 -#: templates/dcim/powerport.html:73 templates/dcim/rearport.html:98 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:48 +#: netbox/templates/dcim/consoleport.html:69 +#: netbox/templates/dcim/consoleserverport.html:70 +#: netbox/templates/dcim/frontport.html:102 +#: netbox/templates/dcim/interface.html:180 +#: netbox/templates/dcim/interface.html:200 +#: netbox/templates/dcim/powerfeed.html:127 +#: netbox/templates/dcim/poweroutlet.html:71 +#: netbox/templates/dcim/poweroutlet.html:72 +#: netbox/templates/dcim/powerport.html:73 +#: netbox/templates/dcim/rearport.html:98 msgid "Connect" msgstr "连接" -#: templates/circuits/inc/circuit_termination_fields.html:70 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:70 msgid "Downstream" msgstr "下游" -#: templates/circuits/inc/circuit_termination_fields.html:71 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:71 msgid "Upstream" msgstr "上游" -#: templates/circuits/inc/circuit_termination_fields.html:80 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:80 msgid "Cross-Connect" msgstr "交叉连接" -#: templates/circuits/inc/circuit_termination_fields.html:84 +#: netbox/templates/circuits/inc/circuit_termination_fields.html:84 msgid "Patch Panel/Port" msgstr "配线架/端口" -#: templates/circuits/provider.html:11 +#: netbox/templates/circuits/provider.html:11 msgid "Add circuit" msgstr "添加线路" -#: templates/circuits/provideraccount.html:17 +#: netbox/templates/circuits/provideraccount.html:17 msgid "Provider Account" msgstr "运营商帐户" -#: templates/core/configrevision.html:35 +#: netbox/templates/core/configrevision.html:35 msgid "Configuration Data" msgstr "配置数据" -#: templates/core/configrevision.html:40 +#: netbox/templates/core/configrevision.html:40 msgid "Comment" msgstr "评论" -#: templates/core/configrevision_restore.html:8 -#: templates/core/configrevision_restore.html:25 -#: templates/core/configrevision_restore.html:64 +#: netbox/templates/core/configrevision_restore.html:8 +#: netbox/templates/core/configrevision_restore.html:25 +#: netbox/templates/core/configrevision_restore.html:64 msgid "Restore" msgstr "还原" -#: templates/core/configrevision_restore.html:36 +#: netbox/templates/core/configrevision_restore.html:36 msgid "Parameter" msgstr "参数" -#: templates/core/configrevision_restore.html:37 +#: netbox/templates/core/configrevision_restore.html:37 msgid "Current Value" msgstr "当前变量" -#: templates/core/configrevision_restore.html:38 +#: netbox/templates/core/configrevision_restore.html:38 msgid "New Value" msgstr "新变量" -#: templates/core/configrevision_restore.html:50 +#: netbox/templates/core/configrevision_restore.html:50 msgid "Changed" msgstr "已更改" -#: templates/core/datafile.html:42 templates/ipam/iprange.html:25 -#: templates/virtualization/virtualdisk.html:29 -#: virtualization/tables/virtualmachines.py:198 +#: netbox/templates/core/datafile.html:42 +#: netbox/templates/ipam/iprange.html:25 +#: netbox/templates/virtualization/virtualdisk.html:29 +#: netbox/virtualization/tables/virtualmachines.py:198 msgid "Size" msgstr "大小" -#: templates/core/datafile.html:43 +#: netbox/templates/core/datafile.html:43 msgid "bytes" msgstr "bytes" -#: templates/core/datafile.html:46 +#: netbox/templates/core/datafile.html:46 msgid "SHA256 Hash" msgstr "SHA256 Hash" -#: templates/core/datasource.html:14 templates/core/datasource.html:20 -#: utilities/templates/buttons/sync.html:5 +#: netbox/templates/core/datasource.html:14 +#: netbox/templates/core/datasource.html:20 +#: netbox/utilities/templates/buttons/sync.html:5 msgid "Sync" msgstr "同步" -#: templates/core/datasource.html:50 +#: netbox/templates/core/datasource.html:50 msgid "Last synced" msgstr "最后同步" -#: templates/core/datasource.html:84 +#: netbox/templates/core/datasource.html:84 msgid "Backend" msgstr "后台" -#: templates/core/datasource.html:99 +#: netbox/templates/core/datasource.html:99 msgid "No parameters defined" msgstr "未定义参数" -#: templates/core/datasource.html:114 +#: netbox/templates/core/datasource.html:114 msgid "Files" msgstr "文件" -#: templates/core/inc/config_data.html:7 +#: netbox/templates/core/inc/config_data.html:7 msgid "Rack elevations" msgstr "机柜立面图" -#: templates/core/inc/config_data.html:10 +#: netbox/templates/core/inc/config_data.html:10 msgid "Default unit height" msgstr "默认U位高度" -#: templates/core/inc/config_data.html:14 +#: netbox/templates/core/inc/config_data.html:14 msgid "Default unit width" msgstr "默认U位宽度" -#: templates/core/inc/config_data.html:20 +#: netbox/templates/core/inc/config_data.html:20 msgid "Power feeds" msgstr "供电线路" -#: templates/core/inc/config_data.html:23 +#: netbox/templates/core/inc/config_data.html:23 msgid "Default voltage" msgstr "默认电压" -#: templates/core/inc/config_data.html:27 +#: netbox/templates/core/inc/config_data.html:27 msgid "Default amperage" msgstr "默认电流" -#: templates/core/inc/config_data.html:31 +#: netbox/templates/core/inc/config_data.html:31 msgid "Default max utilization" msgstr "默认最高功率" -#: templates/core/inc/config_data.html:40 +#: netbox/templates/core/inc/config_data.html:40 msgid "Enforce global unique" msgstr "执行全局唯一" -#: templates/core/inc/config_data.html:83 +#: netbox/templates/core/inc/config_data.html:83 msgid "Paginate count" msgstr "分页数量" -#: templates/core/inc/config_data.html:87 +#: netbox/templates/core/inc/config_data.html:87 msgid "Max page size" msgstr "最大页面大小" -#: templates/core/inc/config_data.html:114 +#: netbox/templates/core/inc/config_data.html:114 msgid "User preferences" msgstr "用户首选项" -#: templates/core/inc/config_data.html:141 +#: netbox/templates/core/inc/config_data.html:141 msgid "Job retention" msgstr "任务保留" -#: templates/core/job.html:35 templates/core/rq_task.html:12 -#: templates/core/rq_task.html:49 templates/core/rq_task.html:58 +#: netbox/templates/core/job.html:35 netbox/templates/core/rq_task.html:12 +#: netbox/templates/core/rq_task.html:49 netbox/templates/core/rq_task.html:58 msgid "Job" msgstr "任务" -#: templates/core/job.html:58 templates/extras/journalentry.html:26 +#: netbox/templates/core/job.html:58 +#: netbox/templates/extras/journalentry.html:26 msgid "Created By" msgstr "创建者" -#: templates/core/job.html:66 +#: netbox/templates/core/job.html:66 msgid "Scheduling" msgstr "日程安排" -#: templates/core/job.html:77 +#: netbox/templates/core/job.html:77 #, python-format msgid "every %(interval)s minutes" msgstr "每 %(interval)s 分钟" -#: templates/core/objectchange.html:29 -#: templates/users/objectpermission.html:42 +#: netbox/templates/core/objectchange.html:29 +#: netbox/templates/users/objectpermission.html:42 msgid "Change" msgstr "更改" -#: templates/core/objectchange.html:79 +#: netbox/templates/core/objectchange.html:79 msgid "Difference" msgstr "差异" -#: templates/core/objectchange.html:82 +#: netbox/templates/core/objectchange.html:82 msgid "Previous" msgstr "上一个" -#: templates/core/objectchange.html:85 +#: netbox/templates/core/objectchange.html:85 msgid "Next" msgstr "下一个" -#: templates/core/objectchange.html:93 +#: netbox/templates/core/objectchange.html:93 msgid "Object Created" msgstr "对象已创建" -#: templates/core/objectchange.html:95 +#: netbox/templates/core/objectchange.html:95 msgid "Object Deleted" msgstr "对象已删除" -#: templates/core/objectchange.html:97 +#: netbox/templates/core/objectchange.html:97 msgid "No Changes" msgstr "没有改变" -#: templates/core/objectchange.html:111 +#: netbox/templates/core/objectchange.html:111 msgid "Pre-Change Data" msgstr "变更前配置" -#: templates/core/objectchange.html:122 +#: netbox/templates/core/objectchange.html:122 msgid "Warning: Comparing non-atomic change to previous change record" msgstr "警告:将非原子更改与以前的更改记录进行比较" -#: templates/core/objectchange.html:131 +#: netbox/templates/core/objectchange.html:131 msgid "Post-Change Data" msgstr "变更后配置" -#: templates/core/objectchange.html:162 +#: netbox/templates/core/objectchange.html:162 #, python-format msgid "See All %(count)s Changes" msgstr "查看所有的%(count)s个变更" -#: templates/core/objectchange_list.html:9 -#: templates/extras/object_changelog.html:15 +#: netbox/templates/core/objectchange_list.html:9 +#: netbox/templates/extras/object_changelog.html:15 msgid "Change log retention" msgstr "变更日志保留" -#: templates/core/objectchange_list.html:9 -#: templates/extras/object_changelog.html:15 +#: netbox/templates/core/objectchange_list.html:9 +#: netbox/templates/extras/object_changelog.html:15 msgid "days" msgstr "天" -#: templates/core/objectchange_list.html:9 -#: templates/extras/object_changelog.html:15 +#: netbox/templates/core/objectchange_list.html:9 +#: netbox/templates/extras/object_changelog.html:15 msgid "Indefinite" msgstr "无限期的" -#: templates/core/plugin.html:22 +#: netbox/templates/core/plugin.html:22 msgid "Not installed" msgstr "未安装" -#: templates/core/plugin.html:33 +#: netbox/templates/core/plugin.html:33 msgid "Overview" msgstr "概述" -#: templates/core/plugin.html:39 +#: netbox/templates/core/plugin.html:39 msgid "Install" msgstr "安装" -#: templates/core/plugin.html:51 +#: netbox/templates/core/plugin.html:51 msgid "Plugin Details" msgstr "插件详情" -#: templates/core/plugin.html:58 +#: netbox/templates/core/plugin.html:58 msgid "Summary" msgstr "摘要" -#: templates/core/plugin.html:76 +#: netbox/templates/core/plugin.html:76 msgid "License" msgstr "执照" -#: templates/core/plugin.html:96 +#: netbox/templates/core/plugin.html:96 msgid "Version History" msgstr "版本历史" -#: templates/core/plugin.html:107 +#: netbox/templates/core/plugin.html:107 msgid "Local Installation Instructions" msgstr "本地安装说明" -#: templates/core/rq_queue_list.html:5 templates/core/rq_queue_list.html:13 -#: templates/core/rq_task_list.html:14 templates/core/rq_worker.html:7 +#: netbox/templates/core/rq_queue_list.html:5 +#: netbox/templates/core/rq_queue_list.html:13 +#: netbox/templates/core/rq_task_list.html:14 +#: netbox/templates/core/rq_worker.html:7 msgid "Background Queues" msgstr "后台队列" -#: templates/core/rq_queue_list.html:24 templates/core/rq_queue_list.html:25 -#: templates/core/rq_worker_list.html:49 templates/core/rq_worker_list.html:50 -#: templates/extras/script_result.html:67 -#: templates/extras/script_result.html:69 -#: templates/inc/table_controls_htmx.html:30 -#: templates/inc/table_controls_htmx.html:33 +#: netbox/templates/core/rq_queue_list.html:24 +#: netbox/templates/core/rq_queue_list.html:25 +#: netbox/templates/core/rq_worker_list.html:49 +#: netbox/templates/core/rq_worker_list.html:50 +#: netbox/templates/extras/script_result.html:67 +#: netbox/templates/extras/script_result.html:69 +#: netbox/templates/inc/table_controls_htmx.html:30 +#: netbox/templates/inc/table_controls_htmx.html:33 msgid "Configure Table" msgstr "列设置" -#: templates/core/rq_task.html:29 +#: netbox/templates/core/rq_task.html:29 msgid "Stop" msgstr "停止" -#: templates/core/rq_task.html:34 +#: netbox/templates/core/rq_task.html:34 msgid "Requeue" msgstr "请求" -#: templates/core/rq_task.html:39 +#: netbox/templates/core/rq_task.html:39 msgid "Enqueue" msgstr "排队" -#: templates/core/rq_task.html:61 +#: netbox/templates/core/rq_task.html:61 msgid "Queue" msgstr "队列" -#: templates/core/rq_task.html:65 +#: netbox/templates/core/rq_task.html:65 msgid "Timeout" msgstr "超时" -#: templates/core/rq_task.html:69 +#: netbox/templates/core/rq_task.html:69 msgid "Result TTL" msgstr "TTL 结果" -#: templates/core/rq_task.html:89 +#: netbox/templates/core/rq_task.html:89 msgid "Meta" msgstr "元数据" -#: templates/core/rq_task.html:93 +#: netbox/templates/core/rq_task.html:93 msgid "Arguments" msgstr "参数" -#: templates/core/rq_task.html:97 +#: netbox/templates/core/rq_task.html:97 msgid "Keyword Arguments" msgstr "关键参数" -#: templates/core/rq_task.html:103 +#: netbox/templates/core/rq_task.html:103 msgid "Depends on" msgstr "取决于" -#: templates/core/rq_task.html:109 +#: netbox/templates/core/rq_task.html:109 msgid "Exception" msgstr "例外" -#: templates/core/rq_task_list.html:28 +#: netbox/templates/core/rq_task_list.html:28 msgid "tasks in " msgstr "任务进行中" -#: templates/core/rq_task_list.html:33 +#: netbox/templates/core/rq_task_list.html:33 msgid "Queued Jobs" msgstr "排队中的任务" -#: templates/core/rq_task_list.html:64 templates/extras/script_result.html:86 +#: netbox/templates/core/rq_task_list.html:64 +#: netbox/templates/extras/script_result.html:86 #, python-format msgid "" "Select all %(count)s %(object_type_plural)s matching query" msgstr "选择 所有的 %(count)s 个 %(object_type_plural)s进行查找" -#: templates/core/rq_worker.html:10 +#: netbox/templates/core/rq_worker.html:10 msgid "Worker Info" msgstr "Worker 信息" -#: templates/core/rq_worker.html:31 templates/core/rq_worker.html:40 +#: netbox/templates/core/rq_worker.html:31 +#: netbox/templates/core/rq_worker.html:40 msgid "Worker" msgstr "Worker" -#: templates/core/rq_worker.html:55 +#: netbox/templates/core/rq_worker.html:55 msgid "Queues" msgstr "队列" -#: templates/core/rq_worker.html:63 +#: netbox/templates/core/rq_worker.html:63 msgid "Curent Job" msgstr "当前任务" -#: templates/core/rq_worker.html:67 +#: netbox/templates/core/rq_worker.html:67 msgid "Successful job count" msgstr "完成的任务数" -#: templates/core/rq_worker.html:71 +#: netbox/templates/core/rq_worker.html:71 msgid "Failed job count" msgstr "失败的任务数" -#: templates/core/rq_worker.html:75 +#: netbox/templates/core/rq_worker.html:75 msgid "Total working time" msgstr "任务总计时长" -#: templates/core/rq_worker.html:76 +#: netbox/templates/core/rq_worker.html:76 msgid "seconds" msgstr "秒" -#: templates/core/rq_worker_list.html:13 templates/core/rq_worker_list.html:21 +#: netbox/templates/core/rq_worker_list.html:13 +#: netbox/templates/core/rq_worker_list.html:21 msgid "Background Workers" msgstr "后台任务" -#: templates/core/rq_worker_list.html:29 +#: netbox/templates/core/rq_worker_list.html:29 #, python-format msgid "Workers in %(queue_name)s" msgstr "在%(queue_name)s的 Worker" -#: templates/core/system.html:11 utilities/templates/buttons/export.html:4 +#: netbox/templates/core/system.html:11 +#: netbox/utilities/templates/buttons/export.html:4 msgid "Export" msgstr "导出" -#: templates/core/system.html:28 +#: netbox/templates/core/system.html:28 msgid "System Status" msgstr "系统状态" -#: templates/core/system.html:31 +#: netbox/templates/core/system.html:31 msgid "NetBox release" msgstr "NetBox 发布" -#: templates/core/system.html:44 +#: netbox/templates/core/system.html:44 msgid "Django version" msgstr "Django版本" -#: templates/core/system.html:48 +#: netbox/templates/core/system.html:48 msgid "PostgreSQL version" msgstr "PostgreSQL 版本" -#: templates/core/system.html:52 +#: netbox/templates/core/system.html:52 msgid "Database name" msgstr "数据库名称" -#: templates/core/system.html:56 +#: netbox/templates/core/system.html:56 msgid "Database size" msgstr "数据库大小" -#: templates/core/system.html:61 +#: netbox/templates/core/system.html:61 msgid "Unavailable" msgstr "不可用" -#: templates/core/system.html:66 +#: netbox/templates/core/system.html:66 msgid "RQ workers" msgstr "RQ workers" -#: templates/core/system.html:69 +#: netbox/templates/core/system.html:69 msgid "default queue" msgstr "默认队列" -#: templates/core/system.html:73 +#: netbox/templates/core/system.html:73 msgid "System time" msgstr "系统时间" -#: templates/core/system.html:85 +#: netbox/templates/core/system.html:85 msgid "Current Configuration" msgstr "当前配置" -#: templates/dcim/bulk_disconnect.html:9 +#: netbox/templates/dcim/bulk_disconnect.html:9 #, python-format msgid "" "Are you sure you want to disconnect these %(count)s %(obj_type_plural)s?" msgstr "您确定要断开这些连接 %(count)s %(obj_type_plural)s?" -#: templates/dcim/cable_trace.html:10 +#: netbox/templates/dcim/cable_trace.html:10 #, python-format msgid "Cable Trace for %(object_type)s %(object)s" msgstr "电缆走线用于 %(object_type)s %(object)s" -#: templates/dcim/cable_trace.html:24 templates/dcim/inc/rack_elevation.html:7 +#: netbox/templates/dcim/cable_trace.html:24 +#: netbox/templates/dcim/inc/rack_elevation.html:7 msgid "Download SVG" msgstr "下载 SVG文件" -#: templates/dcim/cable_trace.html:30 +#: netbox/templates/dcim/cable_trace.html:30 msgid "Asymmetric Path" msgstr "非对称路径" -#: templates/dcim/cable_trace.html:31 +#: netbox/templates/dcim/cable_trace.html:31 msgid "The nodes below have no links and result in an asymmetric path" msgstr "下面的节点没有链接,因此路径不对称" -#: templates/dcim/cable_trace.html:38 +#: netbox/templates/dcim/cable_trace.html:38 msgid "Path split" msgstr "(意见) 分歧" -#: templates/dcim/cable_trace.html:39 +#: netbox/templates/dcim/cable_trace.html:39 msgid "Select a node below to continue" msgstr "选择以下节点继续" -#: templates/dcim/cable_trace.html:55 +#: netbox/templates/dcim/cable_trace.html:55 msgid "Trace Completed" msgstr "跟踪已完成" -#: templates/dcim/cable_trace.html:58 +#: netbox/templates/dcim/cable_trace.html:58 msgid "Total segments" msgstr "总分段" -#: templates/dcim/cable_trace.html:62 +#: netbox/templates/dcim/cable_trace.html:62 msgid "Total length" msgstr "总计长度" -#: templates/dcim/cable_trace.html:77 +#: netbox/templates/dcim/cable_trace.html:77 msgid "No paths found" msgstr "未找到路径" -#: templates/dcim/cable_trace.html:85 +#: netbox/templates/dcim/cable_trace.html:85 msgid "Related Paths" msgstr "关联路径" -#: templates/dcim/cable_trace.html:89 +#: netbox/templates/dcim/cable_trace.html:89 msgid "Origin" msgstr "源" -#: templates/dcim/cable_trace.html:90 +#: netbox/templates/dcim/cable_trace.html:90 msgid "Destination" msgstr "目的" -#: templates/dcim/cable_trace.html:91 +#: netbox/templates/dcim/cable_trace.html:91 msgid "Segments" msgstr "分隔符" -#: templates/dcim/cable_trace.html:104 +#: netbox/templates/dcim/cable_trace.html:104 msgid "Incomplete" msgstr "未完成" -#: templates/dcim/component_list.html:14 +#: netbox/templates/dcim/component_list.html:14 msgid "Rename Selected" msgstr "重命名选中项" -#: templates/dcim/consoleport.html:65 templates/dcim/consoleserverport.html:66 -#: templates/dcim/frontport.html:98 templates/dcim/interface.html:176 -#: templates/dcim/poweroutlet.html:69 templates/dcim/powerport.html:69 +#: netbox/templates/dcim/consoleport.html:65 +#: netbox/templates/dcim/consoleserverport.html:66 +#: netbox/templates/dcim/frontport.html:98 +#: netbox/templates/dcim/interface.html:176 +#: netbox/templates/dcim/poweroutlet.html:69 +#: netbox/templates/dcim/powerport.html:69 msgid "Not Connected" msgstr "未连接" -#: templates/dcim/device.html:34 +#: netbox/templates/dcim/device.html:34 msgid "Highlight device in rack" msgstr "突出显示机架中的设备" -#: templates/dcim/device.html:55 +#: netbox/templates/dcim/device.html:55 msgid "Not racked" msgstr "未上架" -#: templates/dcim/device.html:62 templates/dcim/site.html:94 +#: netbox/templates/dcim/device.html:62 netbox/templates/dcim/site.html:94 msgid "GPS Coordinates" msgstr "GPS坐标" -#: templates/dcim/device.html:68 templates/dcim/site.html:81 -#: templates/dcim/site.html:100 +#: netbox/templates/dcim/device.html:68 netbox/templates/dcim/site.html:81 +#: netbox/templates/dcim/site.html:100 msgid "Map" msgstr "地图" -#: templates/dcim/device.html:108 templates/dcim/inventoryitem.html:56 -#: templates/dcim/module.html:81 templates/dcim/modulebay.html:74 -#: templates/dcim/rack.html:61 +#: netbox/templates/dcim/device.html:108 +#: netbox/templates/dcim/inventoryitem.html:56 +#: netbox/templates/dcim/module.html:81 +#: netbox/templates/dcim/modulebay.html:74 netbox/templates/dcim/rack.html:61 msgid "Asset Tag" msgstr "资产标签" -#: templates/dcim/device.html:123 +#: netbox/templates/dcim/device.html:123 msgid "View Virtual Chassis" msgstr "查看堆叠设备" -#: templates/dcim/device.html:164 +#: netbox/templates/dcim/device.html:164 msgid "Create VDC" msgstr "创建VDC" -#: templates/dcim/device.html:175 templates/dcim/device_edit.html:64 -#: virtualization/forms/model_forms.py:223 +#: netbox/templates/dcim/device.html:175 +#: netbox/templates/dcim/device_edit.html:64 +#: netbox/virtualization/forms/model_forms.py:223 msgid "Management" msgstr "管理" -#: templates/dcim/device.html:195 templates/dcim/device.html:211 -#: templates/dcim/device.html:227 -#: templates/virtualization/virtualmachine.html:57 -#: templates/virtualization/virtualmachine.html:73 +#: netbox/templates/dcim/device.html:195 netbox/templates/dcim/device.html:211 +#: netbox/templates/dcim/device.html:227 +#: netbox/templates/virtualization/virtualmachine.html:57 +#: netbox/templates/virtualization/virtualmachine.html:73 msgid "NAT for" msgstr "NAT for" -#: templates/dcim/device.html:197 templates/dcim/device.html:213 -#: templates/dcim/device.html:229 -#: templates/virtualization/virtualmachine.html:59 -#: templates/virtualization/virtualmachine.html:75 +#: netbox/templates/dcim/device.html:197 netbox/templates/dcim/device.html:213 +#: netbox/templates/dcim/device.html:229 +#: netbox/templates/virtualization/virtualmachine.html:59 +#: netbox/templates/virtualization/virtualmachine.html:75 msgid "NAT" msgstr "NAT" -#: templates/dcim/device.html:252 templates/dcim/rack.html:73 +#: netbox/templates/dcim/device.html:252 netbox/templates/dcim/rack.html:73 msgid "Power Utilization" msgstr "电力容量利用率" -#: templates/dcim/device.html:256 +#: netbox/templates/dcim/device.html:256 msgid "Input" msgstr "输入" -#: templates/dcim/device.html:257 +#: netbox/templates/dcim/device.html:257 msgid "Outlets" msgstr "电源插座" -#: templates/dcim/device.html:258 +#: netbox/templates/dcim/device.html:258 msgid "Allocated" msgstr "分配" -#: templates/dcim/device.html:268 templates/dcim/device.html:270 -#: templates/dcim/device.html:286 templates/dcim/powerfeed.html:67 +#: netbox/templates/dcim/device.html:268 netbox/templates/dcim/device.html:270 +#: netbox/templates/dcim/device.html:286 +#: netbox/templates/dcim/powerfeed.html:67 msgid "VA" msgstr "VA" -#: templates/dcim/device.html:280 +#: netbox/templates/dcim/device.html:280 msgctxt "Leg of a power feed" msgid "Leg" msgstr "针" -#: templates/dcim/device.html:306 -#: templates/virtualization/virtualmachine.html:158 +#: netbox/templates/dcim/device.html:306 +#: netbox/templates/virtualization/virtualmachine.html:158 msgid "Add a service" msgstr "添加服务" -#: templates/dcim/device/base.html:21 templates/dcim/device_list.html:9 -#: templates/dcim/devicetype/base.html:18 -#: templates/dcim/inc/moduletype_buttons.html:9 templates/dcim/module.html:18 -#: templates/virtualization/virtualmachine/base.html:22 -#: templates/virtualization/virtualmachine_list.html:8 +#: netbox/templates/dcim/device/base.html:21 +#: netbox/templates/dcim/device_list.html:9 +#: netbox/templates/dcim/devicetype/base.html:18 +#: netbox/templates/dcim/inc/moduletype_buttons.html:9 +#: netbox/templates/dcim/module.html:18 +#: netbox/templates/virtualization/virtualmachine/base.html:22 +#: netbox/templates/virtualization/virtualmachine_list.html:8 msgid "Add Components" msgstr "添加组件" -#: templates/dcim/device/consoleports.html:24 +#: netbox/templates/dcim/device/consoleports.html:24 msgid "Add Console Ports" msgstr "增加 Console 端口" -#: templates/dcim/device/consoleserverports.html:24 +#: netbox/templates/dcim/device/consoleserverports.html:24 msgid "Add Console Server Ports" msgstr "增加 Console 服务器端口" -#: templates/dcim/device/devicebays.html:10 +#: netbox/templates/dcim/device/devicebays.html:10 msgid "Add Device Bays" msgstr "添加设备托架" -#: templates/dcim/device/frontports.html:24 +#: netbox/templates/dcim/device/frontports.html:24 msgid "Add Front Ports" msgstr "添加前置接口" -#: templates/dcim/device/inc/interface_table_controls.html:9 +#: netbox/templates/dcim/device/inc/interface_table_controls.html:9 msgid "Hide Enabled" msgstr "已启用隐藏" -#: templates/dcim/device/inc/interface_table_controls.html:10 +#: netbox/templates/dcim/device/inc/interface_table_controls.html:10 msgid "Hide Disabled" msgstr "已禁用隐藏" -#: templates/dcim/device/inc/interface_table_controls.html:11 +#: netbox/templates/dcim/device/inc/interface_table_controls.html:11 msgid "Hide Virtual" msgstr "隐藏虚拟对象" -#: templates/dcim/device/inc/interface_table_controls.html:12 +#: netbox/templates/dcim/device/inc/interface_table_controls.html:12 msgid "Hide Disconnected" msgstr "隐藏未连接的" -#: templates/dcim/device/interfaces.html:27 +#: netbox/templates/dcim/device/interfaces.html:27 msgid "Add Interfaces" msgstr "增加接口" -#: templates/dcim/device/inventory.html:10 -#: templates/dcim/inc/panels/inventory_items.html:10 +#: netbox/templates/dcim/device/inventory.html:10 +#: netbox/templates/dcim/inc/panels/inventory_items.html:10 msgid "Add Inventory Item" msgstr "添加库存项" -#: templates/dcim/device/modulebays.html:10 +#: netbox/templates/dcim/device/modulebays.html:10 msgid "Add Module Bays" msgstr "增加设备板卡插槽" -#: templates/dcim/device/poweroutlets.html:24 +#: netbox/templates/dcim/device/poweroutlets.html:24 msgid "Add Power Outlets" msgstr "添加电源插座" -#: templates/dcim/device/powerports.html:24 +#: netbox/templates/dcim/device/powerports.html:24 msgid "Add Power Port" msgstr "添加电源接口" -#: templates/dcim/device/rearports.html:24 +#: netbox/templates/dcim/device/rearports.html:24 msgid "Add Rear Ports" msgstr "添加后置端口" -#: templates/dcim/device/render_config.html:5 -#: templates/virtualization/virtualmachine/render_config.html:5 +#: netbox/templates/dcim/device/render_config.html:5 +#: netbox/templates/virtualization/virtualmachine/render_config.html:5 msgid "Config" msgstr "配置" -#: templates/dcim/device/render_config.html:35 -#: templates/virtualization/virtualmachine/render_config.html:35 +#: netbox/templates/dcim/device/render_config.html:35 +#: netbox/templates/virtualization/virtualmachine/render_config.html:35 msgid "Context Data" msgstr "实例数据" -#: templates/dcim/device/render_config.html:53 -#: templates/virtualization/virtualmachine/render_config.html:53 +#: netbox/templates/dcim/device/render_config.html:55 +#: netbox/templates/virtualization/virtualmachine/render_config.html:55 msgid "Rendered Config" msgstr "提交配置" -#: templates/dcim/device/render_config.html:55 -#: templates/virtualization/virtualmachine/render_config.html:55 +#: netbox/templates/dcim/device/render_config.html:57 +#: netbox/templates/virtualization/virtualmachine/render_config.html:57 msgid "Download" msgstr "下载" -#: templates/dcim/device/render_config.html:61 -#: templates/virtualization/virtualmachine/render_config.html:61 -msgid "No configuration template found" -msgstr "找不到配置模板" +#: netbox/templates/dcim/device/render_config.html:64 +#: netbox/templates/virtualization/virtualmachine/render_config.html:64 +msgid "Error rendering template" +msgstr "" -#: templates/dcim/device_edit.html:44 +#: 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 "父托架" -#: templates/dcim/device_edit.html:48 -#: utilities/templates/form_helpers/render_field.html:22 +#: netbox/templates/dcim/device_edit.html:48 +#: netbox/utilities/templates/form_helpers/render_field.html:22 msgid "Regenerate Slug" msgstr "重新生成缩写" -#: templates/dcim/device_edit.html:49 templates/generic/bulk_remove.html:21 -#: utilities/templates/helpers/table_config_form.html:23 +#: netbox/templates/dcim/device_edit.html:49 +#: netbox/templates/generic/bulk_remove.html:21 +#: netbox/utilities/templates/helpers/table_config_form.html:23 msgid "Remove" msgstr "删除" -#: templates/dcim/device_edit.html:110 +#: netbox/templates/dcim/device_edit.html:110 msgid "Local Config Context Data" msgstr "本地配置数据实例" -#: templates/dcim/device_list.html:82 templates/generic/bulk_rename.html:57 -#: templates/virtualization/virtualmachine/interfaces.html:11 -#: templates/virtualization/virtualmachine/virtual_disks.html:11 +#: netbox/templates/dcim/device_list.html:82 +#: netbox/templates/generic/bulk_rename.html:57 +#: netbox/templates/virtualization/virtualmachine/interfaces.html:11 +#: netbox/templates/virtualization/virtualmachine/virtual_disks.html:11 msgid "Rename" msgstr "重命名" -#: templates/dcim/devicebay.html:17 +#: netbox/templates/dcim/devicebay.html:17 msgid "Device Bay" msgstr "设备托架" -#: templates/dcim/devicebay.html:43 +#: netbox/templates/dcim/devicebay.html:43 msgid "Installed Device" msgstr "已安装设备" -#: templates/dcim/devicebay_depopulate.html:6 +#: netbox/templates/dcim/devicebay_depopulate.html:6 #, python-format msgid "Remove %(device)s from %(device_bay)s?" msgstr "确认从%(device_bay)s移除%(device)s?" -#: templates/dcim/devicebay_depopulate.html:13 +#: netbox/templates/dcim/devicebay_depopulate.html:13 #, python-format msgid "" "Are you sure you want to remove %(device)s from " "%(device_bay)s?" msgstr "确认从%(device_bay)s移除%(device)s?" -#: templates/dcim/devicebay_populate.html:13 +#: netbox/templates/dcim/devicebay_populate.html:13 msgid "Populate" msgstr "填充" -#: templates/dcim/devicebay_populate.html:22 +#: netbox/templates/dcim/devicebay_populate.html:22 msgid "Bay" msgstr "托架" -#: templates/dcim/devicerole.html:14 templates/dcim/platform.html:17 +#: netbox/templates/dcim/devicerole.html:14 +#: netbox/templates/dcim/platform.html:17 msgid "Add Device" msgstr "增加设备" -#: templates/dcim/devicerole.html:40 +#: netbox/templates/dcim/devicerole.html:40 msgid "VM Role" msgstr "虚拟机角色" -#: templates/dcim/devicetype.html:18 templates/dcim/moduletype.html:29 +#: netbox/templates/dcim/devicetype.html:18 +#: netbox/templates/dcim/moduletype.html:29 msgid "Model Name" msgstr "模块名称" -#: templates/dcim/devicetype.html:25 templates/dcim/moduletype.html:33 +#: netbox/templates/dcim/devicetype.html:25 +#: netbox/templates/dcim/moduletype.html:33 msgid "Part Number" msgstr "部件编码(PN)" -#: templates/dcim/devicetype.html:41 +#: netbox/templates/dcim/devicetype.html:41 msgid "Exclude From Utilization" msgstr "从利用率中排除" -#: templates/dcim/devicetype.html:59 +#: netbox/templates/dcim/devicetype.html:59 msgid "Parent/Child" msgstr "父/子" -#: templates/dcim/devicetype.html:71 +#: netbox/templates/dcim/devicetype.html:71 msgid "Front Image" msgstr "正视图" -#: templates/dcim/devicetype.html:83 +#: netbox/templates/dcim/devicetype.html:83 msgid "Rear Image" msgstr "后视图" -#: templates/dcim/frontport.html:54 +#: netbox/templates/dcim/frontport.html:54 msgid "Rear Port Position" msgstr "后置端口位置" -#: templates/dcim/frontport.html:72 templates/dcim/interface.html:144 -#: templates/dcim/poweroutlet.html:63 templates/dcim/powerport.html:63 -#: templates/dcim/rearport.html:68 +#: netbox/templates/dcim/frontport.html:72 +#: netbox/templates/dcim/interface.html:144 +#: netbox/templates/dcim/poweroutlet.html:63 +#: netbox/templates/dcim/powerport.html:63 +#: netbox/templates/dcim/rearport.html:68 msgid "Marked as Connected" msgstr "标记为已连接" -#: templates/dcim/frontport.html:86 templates/dcim/rearport.html:82 +#: netbox/templates/dcim/frontport.html:86 +#: netbox/templates/dcim/rearport.html:82 msgid "Connection Status" msgstr "连接状态" -#: templates/dcim/htmx/cable_edit.html:10 +#: netbox/templates/dcim/htmx/cable_edit.html:10 msgid "A Side" msgstr "A端" -#: templates/dcim/htmx/cable_edit.html:30 +#: netbox/templates/dcim/htmx/cable_edit.html:30 msgid "B Side" msgstr "B端" -#: templates/dcim/inc/cable_termination.html:65 +#: netbox/templates/dcim/inc/cable_termination.html:65 msgid "No termination" msgstr "未成端" -#: templates/dcim/inc/cable_toggle_buttons.html:3 +#: netbox/templates/dcim/inc/cable_toggle_buttons.html:3 msgid "Mark Planned" msgstr "标记为计划中" -#: templates/dcim/inc/cable_toggle_buttons.html:6 +#: netbox/templates/dcim/inc/cable_toggle_buttons.html:6 msgid "Mark Installed" msgstr "标记为已安装" -#: templates/dcim/inc/connection_endpoints.html:13 +#: netbox/templates/dcim/inc/connection_endpoints.html:13 msgid "Path Status" msgstr "路径状态" -#: templates/dcim/inc/connection_endpoints.html:18 +#: netbox/templates/dcim/inc/connection_endpoints.html:18 msgid "Not Reachable" msgstr "不可达" -#: templates/dcim/inc/connection_endpoints.html:23 +#: netbox/templates/dcim/inc/connection_endpoints.html:23 msgid "Path Endpoints" msgstr "路径终点" -#: templates/dcim/inc/endpoint_connection.html:8 -#: templates/dcim/powerfeed.html:120 templates/dcim/rearport.html:94 +#: netbox/templates/dcim/inc/endpoint_connection.html:8 +#: netbox/templates/dcim/powerfeed.html:120 +#: netbox/templates/dcim/rearport.html:94 msgid "Not connected" msgstr "未连接" -#: templates/dcim/inc/interface_vlans_table.html:6 +#: netbox/templates/dcim/inc/interface_vlans_table.html:6 msgid "Untagged" msgstr "未标记的" -#: templates/dcim/inc/interface_vlans_table.html:37 +#: netbox/templates/dcim/inc/interface_vlans_table.html:37 msgid "No VLANs Assigned" msgstr "未分配 VLAN" -#: templates/dcim/inc/interface_vlans_table.html:44 -#: templates/ipam/prefix_list.html:16 templates/ipam/prefix_list.html:33 +#: netbox/templates/dcim/inc/interface_vlans_table.html:44 +#: netbox/templates/ipam/prefix_list.html:16 +#: netbox/templates/ipam/prefix_list.html:33 msgid "Clear" msgstr "清除" -#: templates/dcim/inc/interface_vlans_table.html:47 +#: netbox/templates/dcim/inc/interface_vlans_table.html:47 msgid "Clear All" msgstr "清除所有" -#: templates/dcim/inc/panels/racktype_dimensions.html:38 +#: netbox/templates/dcim/inc/panels/racktype_dimensions.html:38 msgid "Mounting Depth" msgstr "安装深度" -#: templates/dcim/inc/panels/racktype_numbering.html:6 +#: netbox/templates/dcim/inc/panels/racktype_numbering.html:6 msgid "Starting Unit" msgstr "起始U位" -#: templates/dcim/inc/panels/racktype_numbering.html:10 +#: netbox/templates/dcim/inc/panels/racktype_numbering.html:10 msgid "Descending Units" msgstr "降序单位" -#: templates/dcim/inc/rack_elevation.html:3 +#: netbox/templates/dcim/inc/rack_elevation.html:3 msgid "Rack elevation" msgstr "机架仰角" -#: templates/dcim/interface.html:17 +#: netbox/templates/dcim/interface.html:17 msgid "Add Child Interface" msgstr "添加子接口" -#: templates/dcim/interface.html:50 +#: netbox/templates/dcim/interface.html:50 msgid "Speed/Duplex" msgstr "速率/双工模式" -#: templates/dcim/interface.html:73 +#: netbox/templates/dcim/interface.html:73 msgid "PoE Mode" msgstr "PoE模式" -#: templates/dcim/interface.html:77 +#: netbox/templates/dcim/interface.html:77 msgid "PoE Type" msgstr "PoE类型" -#: templates/dcim/interface.html:81 -#: templates/virtualization/vminterface.html:63 +#: netbox/templates/dcim/interface.html:81 +#: netbox/templates/virtualization/vminterface.html:63 msgid "802.1Q Mode" msgstr "802.1Q 模式" -#: templates/dcim/interface.html:125 -#: templates/virtualization/vminterface.html:59 +#: netbox/templates/dcim/interface.html:125 +#: netbox/templates/virtualization/vminterface.html:59 msgid "MAC Address" msgstr "MAC 地址" -#: templates/dcim/interface.html:151 +#: netbox/templates/dcim/interface.html:151 msgid "Wireless Link" msgstr "无线连接" -#: templates/dcim/interface.html:218 vpn/choices.py:55 +#: netbox/templates/dcim/interface.html:218 netbox/vpn/choices.py:63 msgid "Peer" msgstr "对端" -#: templates/dcim/interface.html:230 -#: templates/wireless/inc/wirelesslink_interface.html:26 +#: netbox/templates/dcim/interface.html:230 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:26 msgid "Channel" msgstr "通道" -#: templates/dcim/interface.html:239 -#: templates/wireless/inc/wirelesslink_interface.html:32 +#: netbox/templates/dcim/interface.html:239 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:32 msgid "Channel Frequency" msgstr "通道频率" -#: templates/dcim/interface.html:242 templates/dcim/interface.html:250 -#: templates/dcim/interface.html:261 templates/dcim/interface.html:269 +#: netbox/templates/dcim/interface.html:242 +#: netbox/templates/dcim/interface.html:250 +#: netbox/templates/dcim/interface.html:261 +#: netbox/templates/dcim/interface.html:269 msgid "MHz" msgstr "MHz" -#: templates/dcim/interface.html:258 -#: templates/wireless/inc/wirelesslink_interface.html:42 +#: netbox/templates/dcim/interface.html:258 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:42 msgid "Channel Width" msgstr "信道频率" -#: templates/dcim/interface.html:285 templates/wireless/wirelesslan.html:14 -#: templates/wireless/wirelesslink.html:21 wireless/forms/bulk_edit.py:60 -#: wireless/forms/bulk_edit.py:102 wireless/forms/filtersets.py:40 -#: wireless/forms/filtersets.py:80 wireless/models.py:82 -#: wireless/models.py:156 wireless/tables/wirelesslan.py:44 +#: netbox/templates/dcim/interface.html:285 +#: netbox/templates/wireless/wirelesslan.html:14 +#: netbox/templates/wireless/wirelesslink.html:21 +#: netbox/wireless/forms/bulk_edit.py:60 +#: netbox/wireless/forms/bulk_edit.py:102 +#: netbox/wireless/forms/filtersets.py:40 +#: netbox/wireless/forms/filtersets.py:80 netbox/wireless/models.py:82 +#: netbox/wireless/models.py:156 netbox/wireless/tables/wirelesslan.py:44 msgid "SSID" msgstr "SSID" -#: templates/dcim/interface.html:305 +#: netbox/templates/dcim/interface.html:305 msgid "LAG Members" msgstr "聚合组成员" -#: templates/dcim/interface.html:323 +#: netbox/templates/dcim/interface.html:323 msgid "No member interfaces" msgstr "无成员接口" -#: templates/dcim/interface.html:343 templates/ipam/fhrpgroup.html:73 -#: templates/ipam/iprange/ip_addresses.html:7 -#: templates/ipam/prefix/ip_addresses.html:7 -#: templates/virtualization/vminterface.html:89 +#: netbox/templates/dcim/interface.html:343 +#: netbox/templates/ipam/fhrpgroup.html:73 +#: netbox/templates/ipam/iprange/ip_addresses.html:7 +#: netbox/templates/ipam/prefix/ip_addresses.html:7 +#: netbox/templates/virtualization/vminterface.html:89 msgid "Add IP Address" msgstr "增加 IP 地址" -#: templates/dcim/inventoryitem.html:24 +#: netbox/templates/dcim/inventoryitem.html:24 msgid "Parent Item" msgstr "父项" -#: templates/dcim/inventoryitem.html:48 +#: netbox/templates/dcim/inventoryitem.html:48 msgid "Part ID" msgstr "零件ID" -#: templates/dcim/location.html:17 +#: netbox/templates/dcim/location.html:17 msgid "Add Child Location" msgstr "增加子类位置" -#: templates/dcim/location.html:77 +#: netbox/templates/dcim/location.html:77 msgid "Child Locations" msgstr "子位置" -#: templates/dcim/location.html:81 templates/dcim/site.html:131 +#: netbox/templates/dcim/location.html:81 netbox/templates/dcim/site.html:131 msgid "Add a Location" msgstr "添加一个位置" -#: templates/dcim/location.html:94 templates/dcim/site.html:144 +#: netbox/templates/dcim/location.html:94 netbox/templates/dcim/site.html:144 msgid "Add a Device" msgstr "增加设备" -#: templates/dcim/manufacturer.html:16 +#: netbox/templates/dcim/manufacturer.html:16 msgid "Add Device Type" msgstr "增加设备型号" -#: templates/dcim/manufacturer.html:21 +#: netbox/templates/dcim/manufacturer.html:21 msgid "Add Module Type" msgstr "添加一个模块类型" -#: templates/dcim/powerfeed.html:53 +#: netbox/templates/dcim/powerfeed.html:53 msgid "Connected Device" msgstr "连接设备" -#: templates/dcim/powerfeed.html:63 +#: netbox/templates/dcim/powerfeed.html:63 msgid "Utilization (Allocated" msgstr "利用率(已分配" -#: templates/dcim/powerfeed.html:80 +#: netbox/templates/dcim/powerfeed.html:80 msgid "Electrical Characteristics" msgstr "电气特性" -#: templates/dcim/powerfeed.html:88 +#: netbox/templates/dcim/powerfeed.html:88 msgctxt "Abbreviation for volts" msgid "V" msgstr "V" -#: templates/dcim/powerfeed.html:92 +#: netbox/templates/dcim/powerfeed.html:92 msgctxt "Abbreviation for amperes" msgid "A" msgstr "A" -#: templates/dcim/poweroutlet.html:48 +#: netbox/templates/dcim/poweroutlet.html:48 msgid "Feed Leg" msgstr "电源针脚" -#: templates/dcim/powerpanel.html:72 +#: netbox/templates/dcim/powerpanel.html:72 msgid "Add Power Feeds" msgstr "添加供电线路" -#: templates/dcim/powerport.html:44 +#: netbox/templates/dcim/powerport.html:44 msgid "Maximum Draw" msgstr "最大功率" -#: templates/dcim/powerport.html:48 +#: netbox/templates/dcim/powerport.html:48 msgid "Allocated Draw" msgstr "允许功率" -#: templates/dcim/rack.html:69 +#: netbox/templates/dcim/rack.html:69 msgid "Space Utilization" msgstr "机柜空间利用率" -#: templates/dcim/rack.html:84 templates/dcim/racktype.html:44 +#: netbox/templates/dcim/rack.html:84 netbox/templates/dcim/racktype.html:44 msgid "Rack Weight" msgstr "机柜重量" -#: templates/dcim/rack.html:94 templates/dcim/racktype.html:54 +#: netbox/templates/dcim/rack.html:94 netbox/templates/dcim/racktype.html:54 msgid "Maximum Weight" msgstr "最大承重" -#: templates/dcim/rack.html:104 +#: netbox/templates/dcim/rack.html:104 msgid "Total Weight" msgstr "总重量" -#: templates/dcim/rack.html:125 templates/dcim/rack_elevation_list.html:15 +#: netbox/templates/dcim/rack.html:125 +#: netbox/templates/dcim/rack_elevation_list.html:15 msgid "Images and Labels" msgstr "图片和标签" -#: templates/dcim/rack.html:126 templates/dcim/rack_elevation_list.html:16 +#: netbox/templates/dcim/rack.html:126 +#: netbox/templates/dcim/rack_elevation_list.html:16 msgid "Images only" msgstr "仅图像" -#: templates/dcim/rack.html:127 templates/dcim/rack_elevation_list.html:17 +#: netbox/templates/dcim/rack.html:127 +#: netbox/templates/dcim/rack_elevation_list.html:17 msgid "Labels only" msgstr "仅标签" -#: templates/dcim/rack/reservations.html:8 +#: netbox/templates/dcim/rack/reservations.html:8 msgid "Add reservation" msgstr "增加预留" -#: templates/dcim/rack_elevation_list.html:12 +#: netbox/templates/dcim/rack_elevation_list.html:12 msgid "View List" msgstr "查看列表" -#: templates/dcim/rack_elevation_list.html:14 +#: netbox/templates/dcim/rack_elevation_list.html:14 msgid "Select rack view" msgstr "选择机架视图" -#: templates/dcim/rack_elevation_list.html:25 +#: netbox/templates/dcim/rack_elevation_list.html:25 msgid "Sort By" msgstr "排序方式" -#: templates/dcim/rack_elevation_list.html:74 +#: netbox/templates/dcim/rack_elevation_list.html:74 msgid "No Racks Found" msgstr "找不到机柜" -#: templates/dcim/rack_list.html:8 +#: netbox/templates/dcim/rack_list.html:8 msgid "View Elevations" msgstr "查看机柜立面图" -#: templates/dcim/rackreservation.html:42 +#: netbox/templates/dcim/rackreservation.html:42 msgid "Reservation Details" msgstr "预留详情" -#: templates/dcim/rackrole.html:10 +#: netbox/templates/dcim/rackrole.html:10 msgid "Add Rack" msgstr "增加机柜" -#: templates/dcim/rearport.html:50 +#: netbox/templates/dcim/rearport.html:50 msgid "Positions" msgstr "位置" -#: templates/dcim/region.html:17 templates/dcim/sitegroup.html:17 +#: netbox/templates/dcim/region.html:17 +#: netbox/templates/dcim/sitegroup.html:17 msgid "Add Site" msgstr "增加站点" -#: templates/dcim/region.html:55 +#: netbox/templates/dcim/region.html:55 msgid "Child Regions" msgstr "子区域" -#: templates/dcim/region.html:59 +#: netbox/templates/dcim/region.html:59 msgid "Add Region" msgstr "增加地区" -#: templates/dcim/site.html:64 +#: netbox/templates/dcim/site.html:64 msgid "Time Zone" msgstr "时区" -#: templates/dcim/site.html:67 +#: netbox/templates/dcim/site.html:67 msgid "UTC" msgstr "UTC" -#: templates/dcim/site.html:68 +#: netbox/templates/dcim/site.html:68 msgid "Site time" msgstr "站点时区" -#: templates/dcim/site.html:75 +#: netbox/templates/dcim/site.html:75 msgid "Physical Address" msgstr "实体地址" -#: templates/dcim/site.html:90 +#: netbox/templates/dcim/site.html:90 msgid "Shipping Address" msgstr "物流地址" -#: templates/dcim/sitegroup.html:55 templates/tenancy/contactgroup.html:46 -#: templates/tenancy/tenantgroup.html:55 -#: templates/wireless/wirelesslangroup.html:55 +#: netbox/templates/dcim/sitegroup.html:55 +#: netbox/templates/tenancy/contactgroup.html:46 +#: netbox/templates/tenancy/tenantgroup.html:55 +#: netbox/templates/wireless/wirelesslangroup.html:55 msgid "Child Groups" msgstr "子类组" -#: templates/dcim/sitegroup.html:59 +#: netbox/templates/dcim/sitegroup.html:59 msgid "Add Site Group" msgstr "增加站点组" -#: templates/dcim/trace/attachment.html:5 -#: templates/extras/exporttemplate.html:31 +#: netbox/templates/dcim/trace/attachment.html:5 +#: netbox/templates/extras/exporttemplate.html:31 msgid "Attachment" msgstr "附件" -#: templates/dcim/virtualchassis.html:57 +#: netbox/templates/dcim/virtualchassis.html:57 msgid "Add Member" msgstr "增加成员" -#: templates/dcim/virtualchassis_add.html:18 +#: netbox/templates/dcim/virtualchassis_add.html:18 msgid "Member Devices" msgstr "成员设备" -#: templates/dcim/virtualchassis_add_member.html:10 +#: netbox/templates/dcim/virtualchassis_add_member.html:10 #, python-format msgid "Add New Member to Virtual Chassis %(virtual_chassis)s" msgstr "添加新成员到堆叠%(virtual_chassis)s中" -#: templates/dcim/virtualchassis_add_member.html:19 +#: netbox/templates/dcim/virtualchassis_add_member.html:19 msgid "Add New Member" msgstr "新增成员" -#: templates/dcim/virtualchassis_add_member.html:27 -#: templates/generic/object_edit.html:78 -#: templates/users/objectpermission.html:31 users/forms/filtersets.py:67 -#: users/forms/model_forms.py:312 +#: netbox/templates/dcim/virtualchassis_add_member.html:27 +#: netbox/templates/generic/object_edit.html:78 +#: netbox/templates/users/objectpermission.html:31 +#: netbox/users/forms/filtersets.py:67 netbox/users/forms/model_forms.py:312 msgid "Actions" msgstr "激活" -#: templates/dcim/virtualchassis_add_member.html:29 +#: netbox/templates/dcim/virtualchassis_add_member.html:29 msgid "Save & Add Another" msgstr "保存并添加另一个" -#: templates/dcim/virtualchassis_edit.html:7 +#: netbox/templates/dcim/virtualchassis_edit.html:7 #, python-format msgid "Editing Virtual Chassis %(name)s" msgstr "编辑堆叠%(name)s" -#: templates/dcim/virtualchassis_edit.html:53 +#: netbox/templates/dcim/virtualchassis_edit.html:53 msgid "Rack/Unit" msgstr "机柜/单元" -#: templates/dcim/virtualchassis_remove_member.html:5 +#: netbox/templates/dcim/virtualchassis_remove_member.html:5 msgid "Remove Virtual Chassis Member" msgstr "移除堆叠成员" -#: templates/dcim/virtualchassis_remove_member.html:9 +#: netbox/templates/dcim/virtualchassis_remove_member.html:9 #, python-format msgid "" "Are you sure you want to remove %(device)s from virtual " "chassis %(name)s?" msgstr "确认从%(name)s中移除%(device)s?" -#: templates/dcim/virtualdevicecontext.html:26 templates/vpn/l2vpn.html:18 +#: netbox/templates/dcim/virtualdevicecontext.html:26 +#: netbox/templates/vpn/l2vpn.html:18 msgid "Identifier" msgstr "标识符" -#: templates/exceptions/import_error.html:6 +#: netbox/templates/exceptions/import_error.html:6 msgid "" "A module import error occurred during this request. Common causes include " "the following:" msgstr "此请求过程中发生模块导入错误。常见原因包括:" -#: templates/exceptions/import_error.html:10 +#: netbox/templates/exceptions/import_error.html:10 msgid "Missing required packages" msgstr "缺少必需的程序包" -#: templates/exceptions/import_error.html:11 +#: netbox/templates/exceptions/import_error.html:11 msgid "" "This installation of NetBox might be missing one or more required Python " "packages. These packages are listed in requirements.txt and " @@ -12154,28 +12939,28 @@ msgstr "" "pip freeze from the console and compare the output to the list " "of required packages." -#: templates/exceptions/import_error.html:20 +#: netbox/templates/exceptions/import_error.html:20 msgid "WSGI service not restarted after upgrade" msgstr "升级后未重新启动WSGI服务" -#: templates/exceptions/import_error.html:21 +#: netbox/templates/exceptions/import_error.html:21 msgid "" "If this installation has recently been upgraded, check that the WSGI service" " (e.g. gunicorn or uWSGI) has been restarted. This ensures that the new code" " is running." msgstr "如果系统最近已升级,请检查WSGI服务(例如gunicorn或uWSGI)是否已重新启动。这样可以确保正在运行新代码。" -#: templates/exceptions/permission_error.html:6 +#: netbox/templates/exceptions/permission_error.html:6 msgid "" "A file permission error was detected while processing this request. Common " "causes include the following:" msgstr "处理此请求时检测到文件权限错误。常见原因包括:" -#: templates/exceptions/permission_error.html:10 +#: netbox/templates/exceptions/permission_error.html:10 msgid "Insufficient write permission to the media root" msgstr "对media目录的写入权限不足" -#: templates/exceptions/permission_error.html:11 +#: netbox/templates/exceptions/permission_error.html:11 #, python-format msgid "" "The configured media root is %(media_root)s. Ensure that the " @@ -12183,17 +12968,17 @@ msgid "" "path." msgstr "media目录为%(media_root)s。确保用户NetBox已有权将文件写入此路径" -#: templates/exceptions/programming_error.html:6 +#: netbox/templates/exceptions/programming_error.html:6 msgid "" "A database programming error was detected while processing this request. " "Common causes include the following:" msgstr "处理此请求时检测到数据库错误。常见原因包括:" -#: templates/exceptions/programming_error.html:10 +#: netbox/templates/exceptions/programming_error.html:10 msgid "Database migrations missing" msgstr "缺少数据库迁移" -#: templates/exceptions/programming_error.html:11 +#: netbox/templates/exceptions/programming_error.html:11 msgid "" "When upgrading to a new NetBox release, the upgrade script must be run to " "apply any new database migrations. You can run migrations manually by " @@ -12202,11 +12987,11 @@ msgstr "" "升级到新的NetBox版本时,必须运行升级脚本才能应用任何新的数据库迁移。您可以通过从命令行执行python3 manage.py " "migrate手动进行迁移。" -#: templates/exceptions/programming_error.html:18 +#: netbox/templates/exceptions/programming_error.html:18 msgid "Unsupported PostgreSQL version" msgstr "不支持当前PostgreSQL版本" -#: templates/exceptions/programming_error.html:19 +#: netbox/templates/exceptions/programming_error.html:19 msgid "" "Ensure that PostgreSQL version 12 or later is in use. You can check this by " "connecting to the database using NetBox's credentials and issuing a query " @@ -12215,339 +13000,351 @@ msgstr "" "请确保正在使用PostgreSQL版本12或更高版本。您可以通过使用NetBox用户连接到数据库并执行SELECT " "VERSION()来进行检查。" -#: templates/extras/configcontext.html:45 -#: templates/extras/configtemplate.html:37 -#: templates/extras/exporttemplate.html:51 +#: netbox/templates/extras/configcontext.html:45 +#: netbox/templates/extras/configtemplate.html:37 +#: netbox/templates/extras/exporttemplate.html:51 msgid "The data file associated with this object has been deleted" msgstr "与此对象关联的数据文件已被删除" -#: templates/extras/configcontext.html:54 -#: templates/extras/configtemplate.html:46 -#: templates/extras/exporttemplate.html:60 +#: netbox/templates/extras/configcontext.html:54 +#: netbox/templates/extras/configtemplate.html:46 +#: netbox/templates/extras/exporttemplate.html:60 msgid "Data Synced" msgstr "数据已同步" -#: templates/extras/configcontext_list.html:7 -#: templates/extras/configtemplate_list.html:7 -#: templates/extras/exporttemplate_list.html:7 +#: netbox/templates/extras/configcontext_list.html:7 +#: netbox/templates/extras/configtemplate_list.html:7 +#: netbox/templates/extras/exporttemplate_list.html:7 msgid "Sync Data" msgstr "同步数据" -#: templates/extras/configtemplate.html:56 +#: netbox/templates/extras/configtemplate.html:56 msgid "Environment Parameters" msgstr "环境参数" -#: templates/extras/configtemplate.html:67 -#: templates/extras/exporttemplate.html:79 +#: netbox/templates/extras/configtemplate.html:67 +#: netbox/templates/extras/exporttemplate.html:79 msgid "Template" msgstr "模版" -#: templates/extras/customfield.html:30 templates/extras/customlink.html:21 +#: netbox/templates/extras/customfield.html:30 +#: netbox/templates/extras/customlink.html:21 msgid "Group Name" msgstr "组名称" -#: templates/extras/customfield.html:42 +#: netbox/templates/extras/customfield.html:42 msgid "Must be Unique" msgstr "必须是唯一的" -#: templates/extras/customfield.html:46 +#: netbox/templates/extras/customfield.html:46 msgid "Cloneable" msgstr "可复制" -#: templates/extras/customfield.html:56 +#: netbox/templates/extras/customfield.html:56 msgid "Default Value" msgstr "默认值" -#: templates/extras/customfield.html:73 +#: netbox/templates/extras/customfield.html:73 msgid "Search Weight" msgstr "搜索权重" -#: templates/extras/customfield.html:83 +#: netbox/templates/extras/customfield.html:83 msgid "Filter Logic" msgstr "过滤器规则" -#: templates/extras/customfield.html:87 +#: netbox/templates/extras/customfield.html:87 msgid "Display Weight" msgstr "显示权重" -#: templates/extras/customfield.html:91 +#: netbox/templates/extras/customfield.html:91 msgid "UI Visible" msgstr "页面中可见" -#: templates/extras/customfield.html:95 +#: netbox/templates/extras/customfield.html:95 msgid "UI Editable" msgstr "页面中可编辑" -#: templates/extras/customfield.html:115 +#: netbox/templates/extras/customfield.html:115 msgid "Validation Rules" msgstr "验证规则" -#: templates/extras/customfield.html:126 +#: netbox/templates/extras/customfield.html:126 msgid "Regular Expression" msgstr "正则表达式" -#: templates/extras/customlink.html:29 +#: netbox/templates/extras/customlink.html:29 msgid "Button Class" msgstr "按钮类型" -#: templates/extras/customlink.html:39 templates/extras/exporttemplate.html:66 -#: templates/extras/savedfilter.html:39 +#: netbox/templates/extras/customlink.html:39 +#: netbox/templates/extras/exporttemplate.html:66 +#: netbox/templates/extras/savedfilter.html:39 msgid "Assigned Models" msgstr "指定模块" -#: templates/extras/customlink.html:52 +#: netbox/templates/extras/customlink.html:52 msgid "Link Text" msgstr "链接文本" -#: templates/extras/customlink.html:58 +#: netbox/templates/extras/customlink.html:58 msgid "Link URL" msgstr "链接URL" -#: templates/extras/dashboard/reset.html:4 templates/home.html:66 +#: netbox/templates/extras/dashboard/reset.html:4 +#: netbox/templates/home.html:66 msgid "Reset Dashboard" msgstr "重置仪表盘" -#: templates/extras/dashboard/reset.html:8 +#: netbox/templates/extras/dashboard/reset.html:8 msgid "" "This will remove all configured widgets and restore the " "default dashboard configuration." msgstr "这将删除所有小组件,并恢复默认的仪表板配置。" -#: templates/extras/dashboard/reset.html:13 +#: netbox/templates/extras/dashboard/reset.html:13 msgid "" "This change affects only your dashboard, and will not impact other " "users." msgstr "此更改仅影响的仪表盘,不会影响其他用户。" -#: templates/extras/dashboard/widget.html:21 +#: netbox/templates/extras/dashboard/widget.html:21 msgid "widget configuration" msgstr "小部件配置" -#: templates/extras/dashboard/widget.html:36 +#: netbox/templates/extras/dashboard/widget.html:36 msgid "Close widget" msgstr "关闭小部件" -#: templates/extras/dashboard/widget_add.html:7 +#: netbox/templates/extras/dashboard/widget_add.html:7 msgid "Add a Widget" msgstr "添加小组件" -#: templates/extras/dashboard/widgets/bookmarks.html:14 +#: netbox/templates/extras/dashboard/widgets/bookmarks.html:14 msgid "No bookmarks have been added yet." msgstr "尚未添加书签。" -#: templates/extras/dashboard/widgets/objectcounts.html:10 +#: netbox/templates/extras/dashboard/widgets/objectcounts.html:10 msgid "No permission" msgstr "无权限" -#: templates/extras/dashboard/widgets/objectlist.html:6 +#: netbox/templates/extras/dashboard/widgets/objectlist.html:6 msgid "No permission to view this content" msgstr "没有查看此内容的权限" -#: templates/extras/dashboard/widgets/objectlist.html:10 +#: netbox/templates/extras/dashboard/widgets/objectlist.html:10 msgid "Unable to load content. Invalid view name" msgstr "无法加载内容。无效的视图名称" -#: templates/extras/dashboard/widgets/rssfeed.html:12 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:12 msgid "No content found" msgstr "未找到内容" -#: templates/extras/dashboard/widgets/rssfeed.html:18 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:18 msgid "There was a problem fetching the RSS feed" msgstr "获取RSS源时出现问题" -#: templates/extras/dashboard/widgets/rssfeed.html:21 +#: netbox/templates/extras/dashboard/widgets/rssfeed.html:21 msgid "HTTP" msgstr "HTTP" -#: templates/extras/eventrule.html:61 +#: netbox/templates/extras/eventrule.html:61 msgid "Conditions" msgstr "条件" -#: templates/extras/exporttemplate.html:23 +#: netbox/templates/extras/exporttemplate.html:23 msgid "MIME Type" msgstr "MIME类型" -#: templates/extras/exporttemplate.html:27 +#: netbox/templates/extras/exporttemplate.html:27 msgid "File Extension" msgstr "文件扩展名" -#: templates/extras/htmx/script_result.html:10 +#: netbox/templates/extras/htmx/script_result.html:10 msgid "Scheduled for" msgstr "计划为" -#: templates/extras/htmx/script_result.html:15 +#: netbox/templates/extras/htmx/script_result.html:15 msgid "Duration" msgstr "持续时间" -#: templates/extras/htmx/script_result.html:23 +#: netbox/templates/extras/htmx/script_result.html:23 msgid "Test Summary" msgstr "测试总结" -#: templates/extras/htmx/script_result.html:43 +#: netbox/templates/extras/htmx/script_result.html:43 msgid "Log" msgstr "日志" -#: templates/extras/htmx/script_result.html:56 +#: netbox/templates/extras/htmx/script_result.html:56 msgid "Output" msgstr "输出" -#: templates/extras/inc/result_pending.html:4 +#: netbox/templates/extras/inc/result_pending.html:4 msgid "Loading" msgstr "加载中" -#: templates/extras/inc/result_pending.html:6 +#: netbox/templates/extras/inc/result_pending.html:6 msgid "Results pending" msgstr "结果待定" -#: templates/extras/journalentry.html:15 +#: netbox/templates/extras/journalentry.html:15 msgid "Journal Entry" msgstr "日志条目" -#: templates/extras/notificationgroup.html:11 +#: netbox/templates/extras/notificationgroup.html:11 msgid "Notification Group" msgstr "通知组" -#: templates/extras/notificationgroup.html:36 -#: templates/extras/notificationgroup.html:46 -#: utilities/templates/widgets/clearable_file_input.html:12 +#: netbox/templates/extras/notificationgroup.html:36 +#: netbox/templates/extras/notificationgroup.html:46 +#: netbox/utilities/templates/widgets/clearable_file_input.html:12 msgid "None assigned" msgstr "未指定" -#: templates/extras/object_configcontext.html:19 +#: netbox/templates/extras/object_configcontext.html:19 msgid "The local config context overwrites all source contexts" msgstr "本地实例覆盖数据源上的实例" -#: templates/extras/object_configcontext.html:25 +#: netbox/templates/extras/object_configcontext.html:25 msgid "Source Contexts" msgstr "数据源实例" -#: templates/extras/object_journal.html:17 +#: netbox/templates/extras/object_journal.html:17 msgid "New Journal Entry" msgstr "新的日志条目" -#: templates/extras/report/base.html:30 +#: netbox/templates/extras/report/base.html:30 msgid "Report" msgstr "报告" -#: templates/extras/script.html:14 +#: netbox/templates/extras/script.html:14 msgid "You do not have permission to run scripts" msgstr "您没有权限执行脚本" -#: templates/extras/script.html:41 templates/extras/script.html:45 -#: templates/extras/script_list.html:86 +#: netbox/templates/extras/script.html:41 +#: netbox/templates/extras/script.html:45 +#: netbox/templates/extras/script_list.html:87 msgid "Run Script" msgstr "保存运行脚本计划" -#: templates/extras/script.html:51 templates/extras/script/source.html:10 +#: netbox/templates/extras/script.html:51 +#: netbox/templates/extras/script/source.html:10 msgid "Error loading script" msgstr "加载脚本时出错" -#: templates/extras/script/jobs.html:16 +#: netbox/templates/extras/script/jobs.html:16 msgid "Script no longer exists in the source file." msgstr "源文件中没有该脚本。" -#: templates/extras/script_list.html:46 +#: netbox/templates/extras/script_list.html:47 msgid "Last Run" msgstr "上一次运行" -#: templates/extras/script_list.html:61 +#: netbox/templates/extras/script_list.html:62 msgid "Script is no longer present in the source file" msgstr "源文件中没有该脚本。" -#: templates/extras/script_list.html:74 +#: netbox/templates/extras/script_list.html:75 msgid "Never" msgstr "从不" -#: templates/extras/script_list.html:84 +#: netbox/templates/extras/script_list.html:85 msgid "Run Again" msgstr "重新运行" -#: templates/extras/script_list.html:138 +#: netbox/templates/extras/script_list.html:133 +#, python-format +msgid "Could not load scripts from module %(module)s" +msgstr "" + +#: netbox/templates/extras/script_list.html:141 msgid "No Scripts Found" msgstr "找不到脚本" -#: templates/extras/script_list.html:141 +#: netbox/templates/extras/script_list.html:144 #, python-format msgid "" "Get started by creating a script from " "an uploaded file or data source." msgstr "从上传的文件或数据源开始创建脚本。" -#: templates/extras/script_result.html:35 -#: templates/generic/object_list.html:50 templates/search.html:13 +#: netbox/templates/extras/script_result.html:35 +#: netbox/templates/generic/object_list.html:50 +#: netbox/templates/search.html:13 msgid "Results" msgstr "结果" -#: templates/extras/script_result.html:46 +#: netbox/templates/extras/script_result.html:46 msgid "Log threshold" msgstr "日志阈值" -#: templates/extras/script_result.html:56 +#: netbox/templates/extras/script_result.html:56 msgid "All" msgstr "全部" -#: templates/extras/tag.html:32 +#: netbox/templates/extras/tag.html:32 msgid "Tagged Items" msgstr "标记的项目" -#: templates/extras/tag.html:43 +#: netbox/templates/extras/tag.html:43 msgid "Allowed Object Types" msgstr "允许的对象类型" -#: templates/extras/tag.html:51 +#: netbox/templates/extras/tag.html:51 msgid "Any" msgstr "所有" -#: templates/extras/tag.html:57 +#: netbox/templates/extras/tag.html:57 msgid "Tagged Item Types" msgstr "标记的项目类型" -#: templates/extras/tag.html:81 +#: netbox/templates/extras/tag.html:81 msgid "Tagged Objects" msgstr "标记的对象" -#: templates/extras/webhook.html:26 +#: netbox/templates/extras/webhook.html:26 msgid "HTTP Method" msgstr "HTTP方法" -#: templates/extras/webhook.html:34 +#: netbox/templates/extras/webhook.html:34 msgid "HTTP Content Type" msgstr "HTTP内容类型" -#: templates/extras/webhook.html:47 +#: netbox/templates/extras/webhook.html:47 msgid "SSL Verification" msgstr "SSL验证" -#: templates/extras/webhook.html:60 +#: netbox/templates/extras/webhook.html:60 msgid "Additional Headers" msgstr "附加标头" -#: templates/extras/webhook.html:70 +#: netbox/templates/extras/webhook.html:70 msgid "Body Template" msgstr "内容模版" -#: templates/generic/bulk_add_component.html:29 +#: netbox/templates/generic/bulk_add_component.html:29 msgid "Bulk Creation" msgstr "批量创建" -#: templates/generic/bulk_add_component.html:34 -#: templates/generic/bulk_delete.html:32 templates/generic/bulk_edit.html:33 +#: netbox/templates/generic/bulk_add_component.html:34 +#: netbox/templates/generic/bulk_delete.html:32 +#: netbox/templates/generic/bulk_edit.html:33 msgid "Selected Objects" msgstr "选定的对象" -#: templates/generic/bulk_add_component.html:58 +#: netbox/templates/generic/bulk_add_component.html:58 msgid "to Add" msgstr "添加" -#: templates/generic/bulk_delete.html:27 +#: netbox/templates/generic/bulk_delete.html:27 msgid "Bulk Delete" msgstr "批量删除" -#: templates/generic/bulk_delete.html:49 +#: netbox/templates/generic/bulk_delete.html:49 msgid "Confirm Bulk Deletion" msgstr "批量删除确认" -#: templates/generic/bulk_delete.html:50 +#: netbox/templates/generic/bulk_delete.html:50 #, python-format msgid "" "The following operation will delete %(count)s " @@ -12555,79 +13352,82 @@ msgid "" "this action." msgstr "以下操作将删除 %(count)s %(type_plural)s。请仔细检查所选对象并确认此操作。" -#: templates/generic/bulk_edit.html:21 templates/generic/object_edit.html:22 +#: netbox/templates/generic/bulk_edit.html:21 +#: netbox/templates/generic/object_edit.html:22 msgid "Editing" msgstr "编辑中" -#: templates/generic/bulk_edit.html:28 +#: netbox/templates/generic/bulk_edit.html:28 msgid "Bulk Edit" msgstr "批量编辑" -#: templates/generic/bulk_edit.html:107 templates/generic/bulk_rename.html:66 +#: netbox/templates/generic/bulk_edit.html:107 +#: netbox/templates/generic/bulk_rename.html:66 msgid "Apply" msgstr "应用" -#: templates/generic/bulk_import.html:19 +#: netbox/templates/generic/bulk_import.html:19 msgid "Bulk Import" msgstr "批量导入" -#: templates/generic/bulk_import.html:25 +#: netbox/templates/generic/bulk_import.html:25 msgid "Direct Import" msgstr "直接导入" -#: templates/generic/bulk_import.html:30 +#: netbox/templates/generic/bulk_import.html:30 msgid "Upload File" msgstr "上传文件" -#: templates/generic/bulk_import.html:58 templates/generic/bulk_import.html:80 -#: templates/generic/bulk_import.html:102 +#: netbox/templates/generic/bulk_import.html:58 +#: netbox/templates/generic/bulk_import.html:80 +#: netbox/templates/generic/bulk_import.html:102 msgid "Submit" msgstr "提交" -#: templates/generic/bulk_import.html:113 +#: netbox/templates/generic/bulk_import.html:113 msgid "Field Options" msgstr "字段选项" -#: templates/generic/bulk_import.html:119 +#: netbox/templates/generic/bulk_import.html:119 msgid "Accessor" msgstr "Accessor" -#: templates/generic/bulk_import.html:148 +#: netbox/templates/generic/bulk_import.html:148 msgid "choices" msgstr "选择" -#: templates/generic/bulk_import.html:161 +#: netbox/templates/generic/bulk_import.html:161 msgid "Import Value" msgstr "导入值" -#: templates/generic/bulk_import.html:181 +#: netbox/templates/generic/bulk_import.html:181 msgid "Format: YYYY-MM-DD" msgstr "格式:年-月-日" -#: templates/generic/bulk_import.html:183 +#: netbox/templates/generic/bulk_import.html:183 msgid "Specify true or false" msgstr "指定true或false" -#: templates/generic/bulk_import.html:195 +#: netbox/templates/generic/bulk_import.html:195 msgid "Required fields must be specified for all objects." msgstr "必须为所有对象指定必填字段" -#: templates/generic/bulk_import.html:201 +#: netbox/templates/generic/bulk_import.html:201 #, python-format msgid "" "Related objects may be referenced by any unique attribute. For example, " "%(example)s would identify a VRF by its route distinguisher." msgstr "相关对象可以由任何唯一的属性引用。例如,%(example)s将通过RD来识别VRF" -#: templates/generic/bulk_remove.html:28 +#: netbox/templates/generic/bulk_remove.html:28 msgid "Bulk Remove" msgstr "批量移除" -#: templates/generic/bulk_remove.html:42 +#: netbox/templates/generic/bulk_remove.html:42 msgid "Confirm Bulk Removal" msgstr "确认批量删除" -#: templates/generic/bulk_remove.html:43 +#: netbox/templates/generic/bulk_remove.html:43 #, python-format msgid "" "The following operation will remove %(count)s %(obj_type_plural)s from " @@ -12636,72 +13436,72 @@ msgid "" msgstr "" "以下操作将从%(parent_obj)s中删除%(count)s个%(obj_type_plural)s,请仔细查看要删除的%(obj_type_plural)s,并在下面进行确认。" -#: templates/generic/bulk_remove.html:64 +#: netbox/templates/generic/bulk_remove.html:64 #, python-format msgid "Remove these %(count)s %(obj_type_plural)s" msgstr "删除%(count)s个 %(obj_type_plural)s" -#: templates/generic/bulk_rename.html:20 +#: netbox/templates/generic/bulk_rename.html:20 msgid "Renaming" msgstr "重命名" -#: templates/generic/bulk_rename.html:27 +#: netbox/templates/generic/bulk_rename.html:27 msgid "Bulk Rename" msgstr "批量重命名" -#: templates/generic/bulk_rename.html:39 +#: netbox/templates/generic/bulk_rename.html:39 msgid "Current Name" msgstr "当前名称" -#: templates/generic/bulk_rename.html:40 +#: netbox/templates/generic/bulk_rename.html:40 msgid "New Name" msgstr "新名称" -#: templates/generic/bulk_rename.html:64 -#: utilities/templates/widgets/markdown_input.html:11 +#: netbox/templates/generic/bulk_rename.html:64 +#: netbox/utilities/templates/widgets/markdown_input.html:11 msgid "Preview" msgstr "预览" -#: templates/generic/confirmation_form.html:16 +#: netbox/templates/generic/confirmation_form.html:16 msgid "Are you sure" msgstr "确认吗" -#: templates/generic/confirmation_form.html:20 +#: netbox/templates/generic/confirmation_form.html:20 msgid "Confirm" msgstr "确认" -#: templates/generic/object_children.html:47 -#: utilities/templates/buttons/bulk_edit.html:4 +#: netbox/templates/generic/object_children.html:47 +#: netbox/utilities/templates/buttons/bulk_edit.html:4 msgid "Edit Selected" msgstr "修改选中项" -#: templates/generic/object_children.html:61 -#: utilities/templates/buttons/bulk_delete.html:4 +#: netbox/templates/generic/object_children.html:61 +#: netbox/utilities/templates/buttons/bulk_delete.html:4 msgid "Delete Selected" msgstr "删除选中项" -#: templates/generic/object_edit.html:24 +#: netbox/templates/generic/object_edit.html:24 #, python-format msgid "Add a new %(object_type)s" msgstr "添加一个新的 %(object_type)s" -#: templates/generic/object_edit.html:35 +#: netbox/templates/generic/object_edit.html:35 msgid "View model documentation" msgstr "查看model文档" -#: templates/generic/object_edit.html:36 +#: netbox/templates/generic/object_edit.html:36 msgid "Help" msgstr "帮助" -#: templates/generic/object_edit.html:83 +#: netbox/templates/generic/object_edit.html:83 msgid "Create & Add Another" msgstr "创建并添加另一个" -#: templates/generic/object_list.html:57 +#: netbox/templates/generic/object_list.html:57 msgid "Filters" msgstr "筛选" -#: templates/generic/object_list.html:88 +#: netbox/templates/generic/object_list.html:88 #, python-format msgid "" "Select all %(count)s " @@ -12710,40 +13510,40 @@ msgstr "" "选择 所有的 %(count)s个 " "%(object_type_plural)s 查询到的记录" -#: templates/home.html:15 +#: netbox/templates/home.html:15 msgid "New Release Available" msgstr "有新版本可用" -#: templates/home.html:16 +#: netbox/templates/home.html:16 msgid "is available" msgstr "可用" -#: templates/home.html:18 +#: netbox/templates/home.html:18 msgctxt "Document title" msgid "Upgrade Instructions" msgstr "升级说明" -#: templates/home.html:40 +#: netbox/templates/home.html:40 msgid "Unlock Dashboard" msgstr "解锁仪表板" -#: templates/home.html:49 +#: netbox/templates/home.html:49 msgid "Lock Dashboard" msgstr "锁定仪表板" -#: templates/home.html:60 +#: netbox/templates/home.html:60 msgid "Add Widget" msgstr "添加小组件" -#: templates/home.html:63 +#: netbox/templates/home.html:63 msgid "Save Layout" msgstr "保存仪表盘" -#: templates/htmx/delete_form.html:7 +#: netbox/templates/htmx/delete_form.html:7 msgid "Confirm Deletion" msgstr "删除确认" -#: templates/htmx/delete_form.html:11 +#: netbox/templates/htmx/delete_form.html:11 #, python-format msgid "" "Are you sure you want to delete " @@ -12752,321 +13552,323 @@ msgstr "" "确认删除 %(object_type)s " "%(object)s?" -#: templates/htmx/delete_form.html:17 +#: netbox/templates/htmx/delete_form.html:17 msgid "The following objects will be deleted as a result of this action." msgstr "此操作将删除以下对象。" -#: templates/htmx/notifications.html:15 +#: netbox/templates/htmx/notifications.html:15 msgid "ago" msgstr "以前" -#: templates/htmx/notifications.html:26 +#: netbox/templates/htmx/notifications.html:26 msgid "No unread notifications" msgstr "没有未读通知" -#: templates/htmx/notifications.html:31 +#: netbox/templates/htmx/notifications.html:31 msgid "All notifications" msgstr "所有通知" -#: templates/htmx/object_selector.html:5 +#: netbox/templates/htmx/object_selector.html:5 msgid "Select" msgstr "选择" -#: templates/inc/filter_list.html:43 -#: utilities/templates/helpers/table_config_form.html:39 +#: netbox/templates/inc/filter_list.html:43 +#: netbox/utilities/templates/helpers/table_config_form.html:39 msgid "Reset" msgstr "重置" -#: templates/inc/light_toggle.html:4 +#: netbox/templates/inc/light_toggle.html:4 msgid "Enable dark mode" msgstr "启用深色模式" -#: templates/inc/light_toggle.html:7 +#: netbox/templates/inc/light_toggle.html:7 msgid "Enable light mode" msgstr "启用浅色模式" -#: templates/inc/missing_prerequisites.html:8 +#: netbox/templates/inc/missing_prerequisites.html:8 #, python-format msgid "" "Before you can add a %(model)s you must first create a " "%(prerequisite_model)s." msgstr "添加%(model)s之前,必须先创建%(prerequisite_model)s." -#: templates/inc/paginator.html:15 +#: netbox/templates/inc/paginator.html:15 msgid "Page selection" msgstr "页面选择" -#: templates/inc/paginator.html:75 +#: netbox/templates/inc/paginator.html:75 #, python-format msgid "Showing %(start)s-%(end)s of %(total)s" msgstr "显示 %(start)s-%(end)s 共 %(total)s" -#: templates/inc/paginator.html:82 +#: netbox/templates/inc/paginator.html:82 msgid "Pagination options" msgstr "分页选项" -#: templates/inc/paginator.html:86 +#: netbox/templates/inc/paginator.html:86 msgid "Per Page" msgstr "每页" -#: templates/inc/panels/image_attachments.html:10 +#: netbox/templates/inc/panels/image_attachments.html:10 msgid "Attach an image" msgstr "增加图片" -#: templates/inc/panels/related_objects.html:5 +#: netbox/templates/inc/panels/related_objects.html:5 msgid "Related Objects" msgstr "相关对象" -#: templates/inc/panels/tags.html:11 +#: netbox/templates/inc/panels/tags.html:11 msgid "No tags assigned" msgstr "没有分配标签" -#: templates/inc/sync_warning.html:10 +#: netbox/templates/inc/sync_warning.html:10 msgid "Data is out of sync with upstream file" msgstr "数据与上游文件不同步" -#: templates/inc/table_controls_htmx.html:7 +#: netbox/templates/inc/table_controls_htmx.html:7 msgid "Quick search" msgstr "快速搜索" -#: templates/inc/table_controls_htmx.html:20 +#: netbox/templates/inc/table_controls_htmx.html:20 msgid "Saved filter" msgstr "保存的筛选" -#: templates/inc/table_htmx.html:18 +#: netbox/templates/inc/table_htmx.html:18 msgid "Clear ordering" msgstr "清除订单" -#: templates/inc/user_menu.html:6 +#: netbox/templates/inc/user_menu.html:6 msgid "Help center" msgstr "帮助中心" -#: templates/inc/user_menu.html:41 +#: netbox/templates/inc/user_menu.html:41 msgid "Django Admin" msgstr "Django Admin" -#: templates/inc/user_menu.html:61 +#: netbox/templates/inc/user_menu.html:61 msgid "Log Out" msgstr "登出" -#: templates/inc/user_menu.html:68 templates/login.html:38 +#: netbox/templates/inc/user_menu.html:68 netbox/templates/login.html:38 msgid "Log In" msgstr "登录" -#: templates/ipam/aggregate.html:14 templates/ipam/ipaddress.html:14 -#: templates/ipam/iprange.html:13 templates/ipam/prefix.html:15 +#: netbox/templates/ipam/aggregate.html:14 +#: netbox/templates/ipam/ipaddress.html:14 +#: netbox/templates/ipam/iprange.html:13 netbox/templates/ipam/prefix.html:15 msgid "Family" msgstr "Family" -#: templates/ipam/aggregate.html:39 +#: netbox/templates/ipam/aggregate.html:39 msgid "Date Added" msgstr "添加日期" -#: templates/ipam/aggregate/prefixes.html:8 -#: templates/ipam/prefix/prefixes.html:8 templates/ipam/role.html:10 +#: netbox/templates/ipam/aggregate/prefixes.html:8 +#: netbox/templates/ipam/prefix/prefixes.html:8 +#: netbox/templates/ipam/role.html:10 msgid "Add Prefix" msgstr "增加IP前缀" -#: templates/ipam/asn.html:23 +#: netbox/templates/ipam/asn.html:23 msgid "AS Number" msgstr "AS号码" -#: templates/ipam/fhrpgroup.html:52 +#: netbox/templates/ipam/fhrpgroup.html:52 msgid "Authentication Type" msgstr "认证类型" -#: templates/ipam/fhrpgroup.html:56 +#: netbox/templates/ipam/fhrpgroup.html:56 msgid "Authentication Key" msgstr "认证密钥" -#: templates/ipam/fhrpgroup.html:69 +#: netbox/templates/ipam/fhrpgroup.html:69 msgid "Virtual IP Addresses" msgstr "虚拟IP地址" -#: templates/ipam/inc/ipaddress_edit_header.html:13 +#: netbox/templates/ipam/inc/ipaddress_edit_header.html:13 msgid "Assign IP" msgstr "分配IP" -#: templates/ipam/inc/ipaddress_edit_header.html:19 +#: netbox/templates/ipam/inc/ipaddress_edit_header.html:19 msgid "Bulk Create" msgstr "批量创建" -#: templates/ipam/inc/panels/fhrp_groups.html:10 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:10 msgid "Create Group" msgstr "创建组" -#: templates/ipam/inc/panels/fhrp_groups.html:25 +#: netbox/templates/ipam/inc/panels/fhrp_groups.html:25 msgid "Virtual IPs" msgstr "虚拟IP" -#: templates/ipam/inc/toggle_available.html:7 +#: netbox/templates/ipam/inc/toggle_available.html:7 msgid "Show Assigned" msgstr "查看指定的" -#: templates/ipam/inc/toggle_available.html:10 +#: netbox/templates/ipam/inc/toggle_available.html:10 msgid "Show Available" msgstr "查看可用" -#: templates/ipam/inc/toggle_available.html:13 +#: netbox/templates/ipam/inc/toggle_available.html:13 msgid "Show All" msgstr "全部显示" -#: templates/ipam/ipaddress.html:23 templates/ipam/iprange.html:45 -#: templates/ipam/prefix.html:24 +#: netbox/templates/ipam/ipaddress.html:23 +#: netbox/templates/ipam/iprange.html:45 netbox/templates/ipam/prefix.html:24 msgid "Global" msgstr "全局" -#: templates/ipam/ipaddress.html:85 +#: netbox/templates/ipam/ipaddress.html:85 msgid "NAT (outside)" msgstr "NAT(外部ip)" -#: templates/ipam/ipaddress_assign.html:8 +#: netbox/templates/ipam/ipaddress_assign.html:8 msgid "Assign an IP Address" msgstr "分配IP地址" -#: templates/ipam/ipaddress_assign.html:22 +#: netbox/templates/ipam/ipaddress_assign.html:22 msgid "Select IP Address" msgstr "选择IP地址" -#: templates/ipam/ipaddress_assign.html:35 +#: netbox/templates/ipam/ipaddress_assign.html:35 msgid "Search Results" msgstr "搜索结果" -#: templates/ipam/ipaddress_bulk_add.html:6 +#: netbox/templates/ipam/ipaddress_bulk_add.html:6 msgid "Bulk Add IP Addresses" msgstr "批量创建IP地址" -#: templates/ipam/iprange.html:17 +#: netbox/templates/ipam/iprange.html:17 msgid "Starting Address" msgstr "开始地址" -#: templates/ipam/iprange.html:21 +#: netbox/templates/ipam/iprange.html:21 msgid "Ending Address" msgstr "结束地址" -#: templates/ipam/iprange.html:33 templates/ipam/prefix.html:110 +#: netbox/templates/ipam/iprange.html:33 netbox/templates/ipam/prefix.html:110 msgid "Marked fully utilized" msgstr "标记为已全部被使用" -#: templates/ipam/prefix.html:99 +#: netbox/templates/ipam/prefix.html:99 msgid "Addressing Details" msgstr "IP地址详细信息" -#: templates/ipam/prefix.html:118 +#: netbox/templates/ipam/prefix.html:118 msgid "Child IPs" msgstr "子IP" -#: templates/ipam/prefix.html:126 +#: netbox/templates/ipam/prefix.html:126 msgid "Available IPs" msgstr "可用IP" -#: templates/ipam/prefix.html:138 +#: netbox/templates/ipam/prefix.html:138 msgid "First available IP" msgstr "第一个可用IP" -#: templates/ipam/prefix.html:179 +#: netbox/templates/ipam/prefix.html:179 msgid "Prefix Details" msgstr "前缀详细信息" -#: templates/ipam/prefix.html:185 +#: netbox/templates/ipam/prefix.html:185 msgid "Network Address" msgstr "网络地址" -#: templates/ipam/prefix.html:189 +#: netbox/templates/ipam/prefix.html:189 msgid "Network Mask" msgstr "网络掩码/子网掩码" -#: templates/ipam/prefix.html:193 +#: netbox/templates/ipam/prefix.html:193 msgid "Wildcard Mask" msgstr "反掩码" -#: templates/ipam/prefix.html:197 +#: netbox/templates/ipam/prefix.html:197 msgid "Broadcast Address" msgstr "广播地址" -#: templates/ipam/prefix/ip_ranges.html:7 +#: netbox/templates/ipam/prefix/ip_ranges.html:7 msgid "Add IP Range" msgstr "添加IP范围" -#: templates/ipam/prefix_list.html:7 +#: netbox/templates/ipam/prefix_list.html:7 msgid "Hide Depth Indicators" msgstr "隐藏深度值" -#: templates/ipam/prefix_list.html:11 +#: netbox/templates/ipam/prefix_list.html:11 msgid "Max Depth" msgstr "最大深度" -#: templates/ipam/prefix_list.html:28 +#: netbox/templates/ipam/prefix_list.html:28 msgid "Max Length" msgstr "最大长度" -#: templates/ipam/rir.html:10 +#: netbox/templates/ipam/rir.html:10 msgid "Add Aggregate" msgstr "添加聚合IP" -#: templates/ipam/routetarget.html:38 +#: netbox/templates/ipam/routetarget.html:38 msgid "Importing VRFs" msgstr "导入VFR" -#: templates/ipam/routetarget.html:44 +#: netbox/templates/ipam/routetarget.html:44 msgid "Exporting VRFs" msgstr "导出VFR" -#: templates/ipam/routetarget.html:52 +#: netbox/templates/ipam/routetarget.html:52 msgid "Importing L2VPNs" msgstr "导入L2VPN" -#: templates/ipam/routetarget.html:58 +#: netbox/templates/ipam/routetarget.html:58 msgid "Exporting L2VPNs" msgstr "导出L2VPN" -#: templates/ipam/vlan.html:88 +#: netbox/templates/ipam/vlan.html:88 msgid "Add a Prefix" msgstr "添加一个前缀" -#: templates/ipam/vlangroup.html:18 +#: netbox/templates/ipam/vlangroup.html:18 msgid "Add VLAN" msgstr "添加VLAN" -#: templates/ipam/vrf.html:16 +#: netbox/templates/ipam/vrf.html:16 msgid "Route Distinguisher" msgstr "路由实例" -#: templates/ipam/vrf.html:29 +#: netbox/templates/ipam/vrf.html:29 msgid "Unique IP Space" msgstr "独立IP空间" -#: templates/login.html:29 -#: utilities/templates/form_helpers/render_errors.html:7 +#: netbox/templates/login.html:29 +#: netbox/utilities/templates/form_helpers/render_errors.html:7 msgid "Errors" msgstr "错误" -#: templates/login.html:69 +#: netbox/templates/login.html:69 msgid "Sign In" msgstr "登录" -#: templates/login.html:77 +#: netbox/templates/login.html:77 msgctxt "Denotes an alternative option" msgid "Or" msgstr "或" -#: templates/media_failure.html:7 +#: netbox/templates/media_failure.html:7 msgid "Static Media Failure - NetBox" msgstr "静态文件故障-NetBox" -#: templates/media_failure.html:21 +#: netbox/templates/media_failure.html:21 msgid "Static Media Failure" msgstr "静态文件故障" -#: templates/media_failure.html:23 +#: netbox/templates/media_failure.html:23 msgid "The following static media file failed to load" msgstr "无法加载以下静态文件" -#: templates/media_failure.html:26 +#: netbox/templates/media_failure.html:26 msgid "Check the following" msgstr "检查以下内容" -#: templates/media_failure.html:29 +#: netbox/templates/media_failure.html:29 msgid "" "manage.py collectstatic was run during the most recent upgrade." " This installs the most recent iteration of each static file into the static" @@ -13074,7 +13876,7 @@ msgid "" msgstr "" "在升级过程中执行manage.py collectstatic 。这会将每个静态文件的最新迭代版本安装到静态文件根路径中。" -#: templates/media_failure.html:35 +#: netbox/templates/media_failure.html:35 #, python-format msgid "" "The HTTP service (e.g. nginx or Apache) is configured to serve files from " @@ -13084,553 +13886,576 @@ msgstr "" "HTTP服务(例如nginx或Apache)被配置为从STATIC_ROOT路径提供文件。请参考the installation documentation以获取更多指导。" -#: templates/media_failure.html:47 +#: netbox/templates/media_failure.html:47 #, python-format msgid "" "The file %(filename)s exists in the static root directory and " "is readable by the HTTP server." msgstr "文件%(filename)s存在于静态文件根目录中,可由HTTP服务器读取。" -#: templates/media_failure.html:55 +#: netbox/templates/media_failure.html:55 #, python-format msgid "Click here to attempt loading NetBox again." msgstr "点击 这里重新加载NetBox" -#: templates/tenancy/contact.html:18 tenancy/filtersets.py:147 -#: tenancy/forms/bulk_edit.py:137 tenancy/forms/filtersets.py:102 -#: tenancy/forms/forms.py:56 tenancy/forms/model_forms.py:106 -#: tenancy/forms/model_forms.py:130 tenancy/tables/contacts.py:98 +#: netbox/templates/tenancy/contact.html:18 netbox/tenancy/filtersets.py: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/model_forms.py:130 +#: netbox/tenancy/tables/contacts.py:98 msgid "Contact" msgstr "联系人" -#: templates/tenancy/contact.html:29 tenancy/forms/bulk_edit.py:99 +#: netbox/templates/tenancy/contact.html:29 +#: netbox/tenancy/forms/bulk_edit.py:99 msgid "Title" msgstr "标题" -#: templates/tenancy/contact.html:33 tenancy/forms/bulk_edit.py:104 -#: tenancy/tables/contacts.py:64 +#: netbox/templates/tenancy/contact.html:33 +#: netbox/tenancy/forms/bulk_edit.py:104 netbox/tenancy/tables/contacts.py:64 msgid "Phone" msgstr "手机号" -#: templates/tenancy/contactgroup.html:18 tenancy/forms/forms.py:66 -#: tenancy/forms/model_forms.py:75 +#: netbox/templates/tenancy/contactgroup.html:18 +#: netbox/tenancy/forms/forms.py:66 netbox/tenancy/forms/model_forms.py:75 msgid "Contact Group" msgstr "联系人组" -#: templates/tenancy/contactgroup.html:50 +#: netbox/templates/tenancy/contactgroup.html:50 msgid "Add Contact Group" msgstr "增加联系人组" -#: templates/tenancy/contactrole.html:15 tenancy/filtersets.py:152 -#: tenancy/forms/forms.py:61 tenancy/forms/model_forms.py:87 +#: netbox/templates/tenancy/contactrole.html:15 +#: netbox/tenancy/filtersets.py:152 netbox/tenancy/forms/forms.py:61 +#: netbox/tenancy/forms/model_forms.py:87 msgid "Contact Role" msgstr "联系人角色" -#: templates/tenancy/object_contacts.html:9 +#: netbox/templates/tenancy/object_contacts.html:9 msgid "Add a contact" msgstr "增加联系人" -#: templates/tenancy/tenantgroup.html:17 +#: netbox/templates/tenancy/tenantgroup.html:17 msgid "Add Tenant" msgstr "增加租户" -#: templates/tenancy/tenantgroup.html:26 tenancy/forms/model_forms.py:32 -#: tenancy/tables/columns.py:51 tenancy/tables/columns.py:61 +#: netbox/templates/tenancy/tenantgroup.html:26 +#: netbox/tenancy/forms/model_forms.py:32 netbox/tenancy/tables/columns.py:51 +#: netbox/tenancy/tables/columns.py:61 msgid "Tenant Group" msgstr "租户组" -#: templates/tenancy/tenantgroup.html:59 +#: netbox/templates/tenancy/tenantgroup.html:59 msgid "Add Tenant Group" msgstr "增加租户组" -#: templates/users/group.html:39 templates/users/user.html:63 +#: netbox/templates/users/group.html:39 netbox/templates/users/user.html:63 msgid "Assigned Permissions" msgstr "分配的权限" -#: templates/users/objectpermission.html:6 -#: templates/users/objectpermission.html:14 users/forms/filtersets.py:66 +#: netbox/templates/users/objectpermission.html:6 +#: netbox/templates/users/objectpermission.html:14 +#: netbox/users/forms/filtersets.py:66 msgid "Permission" msgstr "权限" -#: templates/users/objectpermission.html:34 +#: netbox/templates/users/objectpermission.html:34 msgid "View" msgstr "查看" -#: templates/users/objectpermission.html:52 users/forms/model_forms.py:315 +#: netbox/templates/users/objectpermission.html:52 +#: netbox/users/forms/model_forms.py:315 msgid "Constraints" msgstr "限制因素" -#: templates/users/objectpermission.html:72 +#: netbox/templates/users/objectpermission.html:72 msgid "Assigned Users" msgstr "分配用户" -#: templates/virtualization/cluster.html:52 +#: netbox/templates/virtualization/cluster.html:52 msgid "Allocated Resources" msgstr "已分配资源" -#: templates/virtualization/cluster.html:55 -#: templates/virtualization/virtualmachine.html:125 +#: netbox/templates/virtualization/cluster.html:55 +#: netbox/templates/virtualization/virtualmachine.html:125 msgid "Virtual CPUs" msgstr "虚拟CPU" -#: templates/virtualization/cluster.html:59 -#: templates/virtualization/virtualmachine.html:129 +#: netbox/templates/virtualization/cluster.html:59 +#: netbox/templates/virtualization/virtualmachine.html:129 msgid "Memory" msgstr "内存" -#: templates/virtualization/cluster.html:69 -#: templates/virtualization/virtualmachine.html:140 +#: netbox/templates/virtualization/cluster.html:69 +#: netbox/templates/virtualization/virtualmachine.html:140 msgid "Disk Space" msgstr "磁盘空间" -#: templates/virtualization/cluster/base.html:18 +#: netbox/templates/virtualization/cluster/base.html:18 msgid "Add Virtual Machine" msgstr "增加虚拟机" -#: templates/virtualization/cluster/base.html:24 +#: netbox/templates/virtualization/cluster/base.html:24 msgid "Assign Device" msgstr "分配设备" -#: templates/virtualization/cluster/devices.html:10 +#: netbox/templates/virtualization/cluster/devices.html:10 msgid "Remove Selected" msgstr "删除选定" -#: templates/virtualization/cluster_add_devices.html:9 +#: netbox/templates/virtualization/cluster_add_devices.html:9 #, python-format msgid "Add Device to Cluster %(cluster)s" msgstr "增加设备到虚拟化集群 %(cluster)s" -#: templates/virtualization/cluster_add_devices.html:23 +#: netbox/templates/virtualization/cluster_add_devices.html:23 msgid "Device Selection" msgstr "设备选择" -#: templates/virtualization/cluster_add_devices.html:31 +#: netbox/templates/virtualization/cluster_add_devices.html:31 msgid "Add Devices" msgstr "增加设备" -#: templates/virtualization/clustergroup.html:10 -#: templates/virtualization/clustertype.html:10 +#: netbox/templates/virtualization/clustergroup.html:10 +#: netbox/templates/virtualization/clustertype.html:10 msgid "Add Cluster" msgstr "增加集群" -#: templates/virtualization/clustergroup.html:19 -#: virtualization/forms/model_forms.py:50 +#: netbox/templates/virtualization/clustergroup.html:19 +#: netbox/virtualization/forms/model_forms.py:50 msgid "Cluster Group" msgstr "集群组" -#: templates/virtualization/clustertype.html:19 -#: templates/virtualization/virtualmachine.html:110 -#: virtualization/forms/model_forms.py:36 +#: netbox/templates/virtualization/clustertype.html:19 +#: netbox/templates/virtualization/virtualmachine.html:110 +#: netbox/virtualization/forms/model_forms.py:36 msgid "Cluster Type" msgstr "集群类型" -#: templates/virtualization/virtualdisk.html:18 +#: netbox/templates/virtualization/virtualdisk.html:18 msgid "Virtual Disk" msgstr "虚拟硬盘" -#: templates/virtualization/virtualmachine.html:122 -#: virtualization/forms/bulk_edit.py:190 -#: virtualization/forms/model_forms.py:224 +#: netbox/templates/virtualization/virtualmachine.html:122 +#: netbox/virtualization/forms/bulk_edit.py:190 +#: netbox/virtualization/forms/model_forms.py:224 msgid "Resources" msgstr "资源" -#: templates/virtualization/virtualmachine.html:178 +#: netbox/templates/virtualization/virtualmachine.html:178 msgid "Add Virtual Disk" msgstr "增加虚拟硬盘" -#: templates/vpn/ikepolicy.html:10 templates/vpn/ipsecprofile.html:33 -#: vpn/tables/crypto.py:166 +#: 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" msgstr "IKE Policy" -#: templates/vpn/ikepolicy.html:21 +#: netbox/templates/vpn/ikepolicy.html:21 msgid "IKE Version" msgstr "IKE 版本" -#: templates/vpn/ikepolicy.html:29 +#: netbox/templates/vpn/ikepolicy.html:29 msgid "Pre-Shared Key" msgstr "预共享密钥-PSK" -#: templates/vpn/ikepolicy.html:33 -#: templates/wireless/inc/authentication_attrs.html:20 +#: netbox/templates/vpn/ikepolicy.html:33 +#: netbox/templates/wireless/inc/authentication_attrs.html:20 msgid "Show Secret" msgstr "显示密码" -#: templates/vpn/ikepolicy.html:57 templates/vpn/ipsecpolicy.html:45 -#: templates/vpn/ipsecprofile.html:52 templates/vpn/ipsecprofile.html:77 -#: vpn/forms/model_forms.py:316 vpn/forms/model_forms.py:352 -#: vpn/tables/crypto.py:68 vpn/tables/crypto.py:134 +#: netbox/templates/vpn/ikepolicy.html:57 +#: netbox/templates/vpn/ipsecpolicy.html:45 +#: netbox/templates/vpn/ipsecprofile.html:52 +#: netbox/templates/vpn/ipsecprofile.html:77 +#: netbox/vpn/forms/model_forms.py:316 netbox/vpn/forms/model_forms.py:352 +#: netbox/vpn/tables/crypto.py:68 netbox/vpn/tables/crypto.py:134 msgid "Proposals" msgstr "Proposals" -#: templates/vpn/ikeproposal.html:10 +#: netbox/templates/vpn/ikeproposal.html:10 msgid "IKE Proposal" msgstr "IKE Proposal" -#: templates/vpn/ikeproposal.html:21 vpn/forms/bulk_edit.py:97 -#: vpn/forms/bulk_import.py:145 vpn/forms/filtersets.py:101 +#: netbox/templates/vpn/ikeproposal.html:21 netbox/vpn/forms/bulk_edit.py:97 +#: netbox/vpn/forms/bulk_import.py:145 netbox/vpn/forms/filtersets.py:101 msgid "Authentication method" msgstr "身份验证方法" -#: templates/vpn/ikeproposal.html:25 templates/vpn/ipsecproposal.html:21 -#: vpn/forms/bulk_edit.py:102 vpn/forms/bulk_edit.py:172 -#: vpn/forms/bulk_import.py:149 vpn/forms/bulk_import.py:195 -#: vpn/forms/filtersets.py:106 vpn/forms/filtersets.py:154 +#: netbox/templates/vpn/ikeproposal.html:25 +#: netbox/templates/vpn/ipsecproposal.html:21 +#: netbox/vpn/forms/bulk_edit.py:102 netbox/vpn/forms/bulk_edit.py:172 +#: netbox/vpn/forms/bulk_import.py:149 netbox/vpn/forms/bulk_import.py:195 +#: netbox/vpn/forms/filtersets.py:106 netbox/vpn/forms/filtersets.py:154 msgid "Encryption algorithm" msgstr "加密算法" -#: templates/vpn/ikeproposal.html:29 templates/vpn/ipsecproposal.html:25 -#: vpn/forms/bulk_edit.py:107 vpn/forms/bulk_edit.py:177 -#: vpn/forms/bulk_import.py:153 vpn/forms/bulk_import.py:200 -#: vpn/forms/filtersets.py:111 vpn/forms/filtersets.py:159 +#: netbox/templates/vpn/ikeproposal.html:29 +#: netbox/templates/vpn/ipsecproposal.html:25 +#: netbox/vpn/forms/bulk_edit.py:107 netbox/vpn/forms/bulk_edit.py:177 +#: netbox/vpn/forms/bulk_import.py:153 netbox/vpn/forms/bulk_import.py:200 +#: netbox/vpn/forms/filtersets.py:111 netbox/vpn/forms/filtersets.py:159 msgid "Authentication algorithm" msgstr "认证算法" -#: templates/vpn/ikeproposal.html:33 +#: netbox/templates/vpn/ikeproposal.html:33 msgid "DH group" msgstr "DH group" -#: templates/vpn/ikeproposal.html:37 templates/vpn/ipsecproposal.html:29 -#: vpn/forms/bulk_edit.py:182 vpn/models/crypto.py:146 +#: netbox/templates/vpn/ikeproposal.html:37 +#: netbox/templates/vpn/ipsecproposal.html:29 +#: netbox/vpn/forms/bulk_edit.py:182 netbox/vpn/models/crypto.py:146 msgid "SA lifetime (seconds)" msgstr "SA生存期(秒)" -#: templates/vpn/ipsecpolicy.html:10 templates/vpn/ipsecprofile.html:66 -#: vpn/tables/crypto.py:170 +#: netbox/templates/vpn/ipsecpolicy.html:10 +#: netbox/templates/vpn/ipsecprofile.html:66 netbox/vpn/tables/crypto.py:170 msgid "IPSec Policy" msgstr "IPSec Policy" -#: templates/vpn/ipsecpolicy.html:21 vpn/forms/bulk_edit.py:210 -#: vpn/models/crypto.py:193 +#: netbox/templates/vpn/ipsecpolicy.html:21 netbox/vpn/forms/bulk_edit.py:210 +#: netbox/vpn/models/crypto.py:193 msgid "PFS group" msgstr "PFS group" -#: templates/vpn/ipsecprofile.html:10 vpn/forms/model_forms.py:54 +#: netbox/templates/vpn/ipsecprofile.html:10 +#: netbox/vpn/forms/model_forms.py:54 msgid "IPSec Profile" msgstr "IPSec Profile" -#: templates/vpn/ipsecprofile.html:89 vpn/tables/crypto.py:137 +#: netbox/templates/vpn/ipsecprofile.html:89 netbox/vpn/tables/crypto.py:137 msgid "PFS Group" msgstr "PFS Group" -#: templates/vpn/ipsecproposal.html:10 +#: netbox/templates/vpn/ipsecproposal.html:10 msgid "IPSec Proposal" msgstr "IPSec Proposal" -#: templates/vpn/ipsecproposal.html:33 vpn/forms/bulk_edit.py:186 -#: vpn/models/crypto.py:152 +#: netbox/templates/vpn/ipsecproposal.html:33 +#: netbox/vpn/forms/bulk_edit.py:186 netbox/vpn/models/crypto.py:152 msgid "SA lifetime (KB)" msgstr "SA生存大小(KB)" -#: templates/vpn/l2vpn.html:11 templates/vpn/l2vpntermination.html:9 +#: netbox/templates/vpn/l2vpn.html:11 +#: netbox/templates/vpn/l2vpntermination.html:9 msgid "L2VPN Attributes" msgstr "L2VPN 属性" -#: templates/vpn/l2vpn.html:60 templates/vpn/tunnel.html:76 +#: netbox/templates/vpn/l2vpn.html:60 netbox/templates/vpn/tunnel.html:76 msgid "Add a Termination" msgstr "增加接入点" -#: templates/vpn/tunnel.html:9 +#: netbox/templates/vpn/tunnel.html:9 msgid "Add Termination" msgstr "增加接入点" -#: templates/vpn/tunnel.html:37 vpn/forms/bulk_edit.py:49 -#: vpn/forms/bulk_import.py:48 vpn/forms/filtersets.py:57 +#: netbox/templates/vpn/tunnel.html:37 netbox/vpn/forms/bulk_edit.py:49 +#: netbox/vpn/forms/bulk_import.py:48 netbox/vpn/forms/filtersets.py:57 msgid "Encapsulation" msgstr "封装" -#: templates/vpn/tunnel.html:41 vpn/forms/bulk_edit.py:55 -#: vpn/forms/bulk_import.py:53 vpn/forms/filtersets.py:64 -#: vpn/models/crypto.py:250 vpn/tables/tunnels.py:51 +#: netbox/templates/vpn/tunnel.html:41 netbox/vpn/forms/bulk_edit.py:55 +#: netbox/vpn/forms/bulk_import.py:53 netbox/vpn/forms/filtersets.py:64 +#: netbox/vpn/models/crypto.py:250 netbox/vpn/tables/tunnels.py:51 msgid "IPSec profile" msgstr "IPSec profile" -#: templates/vpn/tunnel.html:45 vpn/forms/bulk_edit.py:69 -#: vpn/forms/filtersets.py:68 +#: netbox/templates/vpn/tunnel.html:45 netbox/vpn/forms/bulk_edit.py:69 +#: netbox/vpn/forms/filtersets.py:68 msgid "Tunnel ID" msgstr "Tunnel ID" -#: templates/vpn/tunnelgroup.html:14 +#: netbox/templates/vpn/tunnelgroup.html:14 msgid "Add Tunnel" msgstr "增加 Tunnel" -#: templates/vpn/tunnelgroup.html:23 vpn/forms/model_forms.py:36 -#: vpn/forms/model_forms.py:49 +#: netbox/templates/vpn/tunnelgroup.html:23 netbox/vpn/forms/model_forms.py:36 +#: netbox/vpn/forms/model_forms.py:49 msgid "Tunnel Group" msgstr "Tunnel 组" -#: templates/vpn/tunneltermination.html:10 +#: netbox/templates/vpn/tunneltermination.html:10 msgid "Tunnel Termination" msgstr "Tunnel 接入点" -#: templates/vpn/tunneltermination.html:35 vpn/forms/bulk_import.py:107 -#: vpn/forms/model_forms.py:102 vpn/forms/model_forms.py:138 -#: vpn/forms/model_forms.py:247 vpn/tables/tunnels.py:101 +#: netbox/templates/vpn/tunneltermination.html:35 +#: netbox/vpn/forms/bulk_import.py:107 netbox/vpn/forms/model_forms.py:102 +#: netbox/vpn/forms/model_forms.py:138 netbox/vpn/forms/model_forms.py:247 +#: netbox/vpn/tables/tunnels.py:101 msgid "Outside IP" msgstr "外部 IP" -#: templates/vpn/tunneltermination.html:51 +#: netbox/templates/vpn/tunneltermination.html:51 msgid "Peer Terminations" msgstr "对等体接入点" -#: templates/wireless/inc/authentication_attrs.html:12 +#: netbox/templates/wireless/inc/authentication_attrs.html:12 msgid "Cipher" msgstr "加密" -#: templates/wireless/inc/authentication_attrs.html:16 +#: netbox/templates/wireless/inc/authentication_attrs.html:16 msgid "PSK" msgstr "PSK-共享密钥" -#: templates/wireless/inc/wirelesslink_interface.html:35 -#: templates/wireless/inc/wirelesslink_interface.html:45 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:35 +#: netbox/templates/wireless/inc/wirelesslink_interface.html:45 msgctxt "Abbreviation for megahertz" msgid "MHz" msgstr "MHz" -#: templates/wireless/wirelesslan.html:57 +#: netbox/templates/wireless/wirelesslan.html:57 msgid "Attached Interfaces" msgstr "附加接口" -#: templates/wireless/wirelesslangroup.html:17 +#: netbox/templates/wireless/wirelesslangroup.html:17 msgid "Add Wireless LAN" msgstr "增加无线局域网" -#: templates/wireless/wirelesslangroup.html:26 -#: wireless/forms/model_forms.py:28 +#: netbox/templates/wireless/wirelesslangroup.html:26 +#: netbox/wireless/forms/model_forms.py:28 msgid "Wireless LAN Group" msgstr "无线局域网组" -#: templates/wireless/wirelesslangroup.html:59 +#: netbox/templates/wireless/wirelesslangroup.html:59 msgid "Add Wireless LAN Group" msgstr "增加无线局域网组" -#: templates/wireless/wirelesslink.html:14 +#: netbox/templates/wireless/wirelesslink.html:14 msgid "Link Properties" msgstr "链接属性" -#: templates/wireless/wirelesslink.html:38 wireless/forms/bulk_edit.py:129 -#: wireless/forms/filtersets.py:102 wireless/forms/model_forms.py:165 +#: 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 "距离" -#: tenancy/filtersets.py:28 +#: netbox/tenancy/filtersets.py:28 msgid "Parent contact group (ID)" msgstr "父联系人组 (ID)" -#: tenancy/filtersets.py:34 +#: netbox/tenancy/filtersets.py:34 msgid "Parent contact group (slug)" msgstr "父联系人组 (缩写)" -#: tenancy/filtersets.py:40 tenancy/filtersets.py:67 tenancy/filtersets.py:110 +#: netbox/tenancy/filtersets.py:40 netbox/tenancy/filtersets.py:67 +#: netbox/tenancy/filtersets.py:110 msgid "Contact group (ID)" msgstr "联系人组 (ID)" -#: tenancy/filtersets.py:47 tenancy/filtersets.py:74 tenancy/filtersets.py:117 +#: netbox/tenancy/filtersets.py:47 netbox/tenancy/filtersets.py:74 +#: netbox/tenancy/filtersets.py:117 msgid "Contact group (slug)" msgstr "联系人组(缩写)" -#: tenancy/filtersets.py:104 +#: netbox/tenancy/filtersets.py:104 msgid "Contact (ID)" msgstr "联系人 (ID)" -#: tenancy/filtersets.py:121 +#: netbox/tenancy/filtersets.py:121 msgid "Contact role (ID)" msgstr "联系人角色 (ID)" -#: tenancy/filtersets.py:127 +#: netbox/tenancy/filtersets.py:127 msgid "Contact role (slug)" msgstr "联系人角色(缩写)" -#: tenancy/filtersets.py:158 +#: netbox/tenancy/filtersets.py:158 msgid "Contact group" msgstr "联系人组" -#: tenancy/filtersets.py:169 +#: netbox/tenancy/filtersets.py:169 msgid "Parent tenant group (ID)" msgstr "父租户组 (ID)" -#: tenancy/filtersets.py:175 +#: netbox/tenancy/filtersets.py:175 msgid "Parent tenant group (slug)" msgstr "上级租户组(slug)" -#: tenancy/filtersets.py:181 tenancy/filtersets.py:201 +#: netbox/tenancy/filtersets.py:181 netbox/tenancy/filtersets.py:201 msgid "Tenant group (ID)" msgstr "租户组 (ID)" -#: tenancy/filtersets.py:234 +#: netbox/tenancy/filtersets.py:234 msgid "Tenant Group (ID)" msgstr "租户组 (ID)" -#: tenancy/filtersets.py:241 +#: netbox/tenancy/filtersets.py:241 msgid "Tenant Group (slug)" msgstr "租户组(缩写)" -#: tenancy/forms/bulk_edit.py:66 +#: netbox/tenancy/forms/bulk_edit.py:66 msgid "Desciption" msgstr "描述" -#: tenancy/forms/bulk_import.py:101 +#: netbox/tenancy/forms/bulk_import.py:101 msgid "Assigned contact" msgstr "分配联系人" -#: tenancy/models/contacts.py:32 +#: netbox/tenancy/models/contacts.py:32 msgid "contact group" msgstr "联系人组" -#: tenancy/models/contacts.py:33 +#: netbox/tenancy/models/contacts.py:33 msgid "contact groups" msgstr "联系人组" -#: tenancy/models/contacts.py:48 +#: netbox/tenancy/models/contacts.py:48 msgid "contact role" msgstr "联系人角色" -#: tenancy/models/contacts.py:49 +#: netbox/tenancy/models/contacts.py:49 msgid "contact roles" msgstr "联系人角色" -#: tenancy/models/contacts.py:68 +#: netbox/tenancy/models/contacts.py:68 msgid "title" msgstr "职位" -#: tenancy/models/contacts.py:73 +#: netbox/tenancy/models/contacts.py:73 msgid "phone" msgstr "电话号" -#: tenancy/models/contacts.py:78 +#: netbox/tenancy/models/contacts.py:78 msgid "email" msgstr "电子邮箱" -#: tenancy/models/contacts.py:87 +#: netbox/tenancy/models/contacts.py:87 msgid "link" msgstr "链接" -#: tenancy/models/contacts.py:103 +#: netbox/tenancy/models/contacts.py:103 msgid "contact" msgstr "联系人" -#: tenancy/models/contacts.py:104 +#: netbox/tenancy/models/contacts.py:104 msgid "contacts" msgstr "联系人" -#: tenancy/models/contacts.py:153 +#: netbox/tenancy/models/contacts.py:153 msgid "contact assignment" msgstr "联系人分配" -#: tenancy/models/contacts.py:154 +#: netbox/tenancy/models/contacts.py:154 msgid "contact assignments" msgstr "联系人分配" -#: tenancy/models/contacts.py:170 +#: netbox/tenancy/models/contacts.py:170 #, python-brace-format msgid "Contacts cannot be assigned to this object type ({type})." msgstr "无法将联系人分配给此对象类型 ({type})." -#: tenancy/models/tenants.py:32 +#: netbox/tenancy/models/tenants.py:32 msgid "tenant group" msgstr "租户组" -#: tenancy/models/tenants.py:33 +#: netbox/tenancy/models/tenants.py:33 msgid "tenant groups" msgstr "租户组" -#: tenancy/models/tenants.py:70 +#: netbox/tenancy/models/tenants.py:70 msgid "Tenant name must be unique per group." msgstr "每个组的租户名称必须唯一。" -#: tenancy/models/tenants.py:80 +#: netbox/tenancy/models/tenants.py:80 msgid "Tenant slug must be unique per group." msgstr "每个组的租户缩写必须是唯一的。" -#: tenancy/models/tenants.py:88 +#: netbox/tenancy/models/tenants.py:88 msgid "tenant" msgstr "租户" -#: tenancy/models/tenants.py:89 +#: netbox/tenancy/models/tenants.py:89 msgid "tenants" msgstr "租户" -#: tenancy/tables/contacts.py:112 +#: netbox/tenancy/tables/contacts.py:112 msgid "Contact Title" msgstr "联系人职位" -#: tenancy/tables/contacts.py:116 +#: netbox/tenancy/tables/contacts.py:116 msgid "Contact Phone" msgstr "联系人电话号" -#: tenancy/tables/contacts.py:121 +#: netbox/tenancy/tables/contacts.py:121 msgid "Contact Email" msgstr "联系人电子邮箱" -#: tenancy/tables/contacts.py:125 +#: netbox/tenancy/tables/contacts.py:125 msgid "Contact Address" msgstr "联系人地址" -#: tenancy/tables/contacts.py:129 +#: netbox/tenancy/tables/contacts.py:129 msgid "Contact Link" msgstr "联系人链接" -#: tenancy/tables/contacts.py:133 +#: netbox/tenancy/tables/contacts.py:133 msgid "Contact Description" msgstr "联系人描述" -#: users/filtersets.py:33 users/filtersets.py:73 +#: netbox/users/filtersets.py:33 netbox/users/filtersets.py:73 msgid "Permission (ID)" msgstr "权限(ID)" -#: users/filtersets.py:38 users/filtersets.py:78 +#: netbox/users/filtersets.py:38 netbox/users/filtersets.py:78 msgid "Notification group (ID)" msgstr "通知组 (ID)" -#: users/forms/bulk_edit.py:26 +#: netbox/users/forms/bulk_edit.py:26 msgid "First name" msgstr "名字" -#: users/forms/bulk_edit.py:31 +#: netbox/users/forms/bulk_edit.py:31 msgid "Last name" msgstr "姓氏" -#: users/forms/bulk_edit.py:43 +#: netbox/users/forms/bulk_edit.py:43 msgid "Staff status" msgstr "工作人员状态" -#: users/forms/bulk_edit.py:48 +#: netbox/users/forms/bulk_edit.py:48 msgid "Superuser status" msgstr "超级用户状态" -#: users/forms/bulk_import.py:41 +#: netbox/users/forms/bulk_import.py:41 msgid "If no key is provided, one will be generated automatically." msgstr "如果未提供密钥,则会自动生成一个。" -#: users/forms/filtersets.py:51 users/tables.py:42 +#: netbox/users/forms/filtersets.py:51 netbox/users/tables.py:42 msgid "Is Staff" msgstr "是工作人员" -#: users/forms/filtersets.py:58 users/tables.py:45 +#: netbox/users/forms/filtersets.py:58 netbox/users/tables.py:45 msgid "Is Superuser" msgstr "是超级用户" -#: users/forms/filtersets.py:91 users/tables.py:86 +#: netbox/users/forms/filtersets.py:91 netbox/users/tables.py:86 msgid "Can View" msgstr "可查看" -#: users/forms/filtersets.py:98 users/tables.py:89 +#: netbox/users/forms/filtersets.py:98 netbox/users/tables.py:89 msgid "Can Add" msgstr "可以添加" -#: users/forms/filtersets.py:105 users/tables.py:92 +#: netbox/users/forms/filtersets.py:105 netbox/users/tables.py:92 msgid "Can Change" msgstr "可更改" -#: users/forms/filtersets.py:112 users/tables.py:95 +#: netbox/users/forms/filtersets.py:112 netbox/users/tables.py:95 msgid "Can Delete" msgstr "可删除" -#: users/forms/model_forms.py:62 +#: netbox/users/forms/model_forms.py:62 msgid "User Interface" msgstr "用户接口" -#: users/forms/model_forms.py:114 +#: netbox/users/forms/model_forms.py:114 msgid "" "Keys must be at least 40 characters in length. Be sure to record " "your key prior to submitting this form, as it may no longer be " @@ -13638,7 +14463,7 @@ msgid "" msgstr "" "密钥的长度必须至少为40个字符。在提交此表单之前请务必记下您的密钥因为一旦创建了令牌,就可能无法再访问该密钥。" -#: users/forms/model_forms.py:126 +#: netbox/users/forms/model_forms.py:126 msgid "" "Allowed IPv4/IPv6 networks from where the token can be used. Leave blank for" " no restrictions. Example: " @@ -13647,106 +14472,106 @@ msgstr "" "允许使用 Token 的 IPv4/IPv6 网络。留空表示无限制。示例: " "10.1.1.0/24,192.168.10.16/32,2001:db8:1::/64" -#: users/forms/model_forms.py:175 +#: netbox/users/forms/model_forms.py:175 msgid "Confirm password" msgstr "确认密码" -#: users/forms/model_forms.py:178 +#: netbox/users/forms/model_forms.py:178 msgid "Enter the same password as before, for verification." msgstr "输入与以前相同的密码进行验证。" -#: users/forms/model_forms.py:227 +#: netbox/users/forms/model_forms.py:227 msgid "Passwords do not match! Please check your input and try again." msgstr "密码错误!请检查您的输入,然后重试。" -#: users/forms/model_forms.py:294 +#: netbox/users/forms/model_forms.py:294 msgid "Additional actions" msgstr "其他操作" -#: users/forms/model_forms.py:297 +#: netbox/users/forms/model_forms.py:297 msgid "Actions granted in addition to those listed above" msgstr "除上述操作外,还批准了其他操作" -#: users/forms/model_forms.py:313 +#: netbox/users/forms/model_forms.py:313 msgid "Objects" msgstr "对象" -#: users/forms/model_forms.py:325 +#: netbox/users/forms/model_forms.py:325 msgid "" "JSON expression of a queryset filter that will return only permitted " "objects. Leave null to match all objects of this type. A list of multiple " "objects will result in a logical OR operation." msgstr "查询集筛选器的JSON表达式,该表达式将只返回允许的对象。保留null以匹配此类型的所有对象。多个对象的列表将执行“或”运算。" -#: users/forms/model_forms.py:364 +#: netbox/users/forms/model_forms.py:364 msgid "At least one action must be selected." msgstr "必须至少选择一个操作。" -#: users/forms/model_forms.py:382 +#: netbox/users/forms/model_forms.py:382 #, python-brace-format msgid "Invalid filter for {model}: {error}" msgstr "{model}的筛选器无效: {error}" -#: users/models/permissions.py:39 +#: netbox/users/models/permissions.py:39 msgid "The list of actions granted by this permission" msgstr "该权限授予的操作列表" -#: users/models/permissions.py:44 +#: netbox/users/models/permissions.py:44 msgid "constraints" msgstr "限制条件" -#: users/models/permissions.py:45 +#: netbox/users/models/permissions.py:45 msgid "" "Queryset filter matching the applicable objects of the selected type(s)" msgstr "与所选类型的适用对象匹配的查询集过滤器" -#: users/models/permissions.py:52 +#: netbox/users/models/permissions.py:52 msgid "permission" msgstr "允许" -#: users/models/permissions.py:53 users/models/users.py:47 +#: netbox/users/models/permissions.py:53 netbox/users/models/users.py:47 msgid "permissions" msgstr "权限" -#: users/models/preferences.py:29 users/models/preferences.py:30 +#: netbox/users/models/preferences.py:29 netbox/users/models/preferences.py:30 msgid "user preferences" msgstr "用户首选项" -#: users/models/preferences.py:97 +#: netbox/users/models/preferences.py:97 #, python-brace-format msgid "Key '{path}' is a leaf node; cannot assign new keys" msgstr "Key '{path}' 是一个子节点;无法分配新密钥" -#: users/models/preferences.py:109 +#: netbox/users/models/preferences.py:109 #, python-brace-format msgid "Key '{path}' is a dictionary; cannot assign a non-dictionary value" msgstr "Key '{path}'是一个字典;无法分配非字典值" -#: users/models/tokens.py:36 +#: netbox/users/models/tokens.py:36 msgid "expires" msgstr "过期" -#: users/models/tokens.py:41 +#: netbox/users/models/tokens.py:41 msgid "last used" msgstr "最后使用" -#: users/models/tokens.py:46 +#: netbox/users/models/tokens.py:46 msgid "key" msgstr "key" -#: users/models/tokens.py:52 +#: netbox/users/models/tokens.py:52 msgid "write enabled" msgstr "可写开启" -#: users/models/tokens.py:54 +#: netbox/users/models/tokens.py:54 msgid "Permit create/update/delete operations using this key" msgstr "允许使用此密钥进行创建/更新/删除操作" -#: users/models/tokens.py:65 +#: netbox/users/models/tokens.py:65 msgid "allowed IPs" msgstr "允许的 IP" -#: users/models/tokens.py:67 +#: netbox/users/models/tokens.py:67 msgid "" "Allowed IPv4/IPv6 networks from where the token can be used. Leave blank for" " no restrictions. Ex: \"10.1.1.0/24, 192.168.10.16/32, 2001:DB8:1::/64\"" @@ -13754,207 +14579,208 @@ msgstr "" "允许使用 token 的 IPv4/IPv6 网络。 留空表示没有限制。 " "例如:“10.1.1.0/24、192.168.10.16/32、2001:DB8:1::/64”" -#: users/models/tokens.py:75 +#: netbox/users/models/tokens.py:75 msgid "token" msgstr "token" -#: users/models/tokens.py:76 +#: netbox/users/models/tokens.py:76 msgid "tokens" msgstr "tokens" -#: users/models/users.py:57 vpn/models/crypto.py:42 +#: netbox/users/models/users.py:57 netbox/vpn/models/crypto.py:42 msgid "group" msgstr "组" -#: users/models/users.py:92 +#: netbox/users/models/users.py:92 msgid "user" msgstr "用户" -#: users/models/users.py:104 +#: netbox/users/models/users.py:104 msgid "A user with this username already exists." msgstr "用户名已使用。" -#: users/tables.py:98 +#: netbox/users/tables.py:98 msgid "Custom Actions" msgstr "自定义操作" -#: utilities/api.py:153 +#: netbox/utilities/api.py:153 #, python-brace-format msgid "Related object not found using the provided attributes: {params}" msgstr "使用提供的属性找不到相关对象: {params}" -#: utilities/api.py:156 +#: netbox/utilities/api.py:156 #, python-brace-format msgid "Multiple objects match the provided attributes: {params}" msgstr "多个对象与提供的属性匹配: {params}" -#: utilities/api.py:168 +#: netbox/utilities/api.py:168 #, python-brace-format msgid "" "Related objects must be referenced by numeric ID or by dictionary of " "attributes. Received an unrecognized value: {value}" msgstr "相关对象必须由数字ID或属性字典引用。接收到无法识别的值: {value}" -#: utilities/api.py:177 +#: netbox/utilities/api.py:177 #, python-brace-format msgid "Related object not found using the provided numeric ID: {id}" msgstr "使用提供的ID找不到相关对象: {id}" -#: utilities/choices.py:19 +#: netbox/utilities/choices.py:19 #, python-brace-format msgid "{name} has a key defined but CHOICES is not a list" msgstr "{name} 已定义键,但 CHOICES 不是列表" -#: utilities/conversion.py:19 +#: netbox/utilities/conversion.py:19 msgid "Weight must be a positive number" msgstr "重量必须是正数" -#: utilities/conversion.py:21 +#: netbox/utilities/conversion.py:21 #, python-brace-format msgid "Invalid value '{weight}' for weight (must be a number)" msgstr " '{weight}' 为无效重量(必须是数字)" -#: utilities/conversion.py:32 utilities/conversion.py:62 +#: netbox/utilities/conversion.py:32 netbox/utilities/conversion.py:62 #, python-brace-format msgid "Unknown unit {unit}. Must be one of the following: {valid_units}" msgstr "{unit}无效。请使用 {valid_units}" -#: utilities/conversion.py:45 +#: netbox/utilities/conversion.py:45 msgid "Length must be a positive number" msgstr "长度必须是正数" -#: utilities/conversion.py:47 +#: netbox/utilities/conversion.py:47 #, python-brace-format msgid "Invalid value '{length}' for length (must be a number)" msgstr " '{length}' 为无效的长度(必须是数字)" -#: utilities/error_handlers.py:31 +#: netbox/utilities/error_handlers.py:31 #, python-brace-format msgid "" "Unable to delete {objects}. {count} dependent objects were " "found: " msgstr "无法删除{objects}。 找到了 {count} 个依赖对象:" -#: utilities/error_handlers.py:33 +#: netbox/utilities/error_handlers.py:33 msgid "More than 50" msgstr "超过50个" -#: utilities/fields.py:30 +#: netbox/utilities/fields.py:30 msgid "RGB color in hexadecimal. Example: " msgstr "以十六进制表示的 RGB 颜色。例如:" -#: utilities/fields.py:159 +#: netbox/utilities/fields.py:159 #, 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”的字符串" -#: utilities/fields.py:169 +#: netbox/utilities/fields.py:169 #, python-format msgid "" "%s(%r) is invalid. to_field parameter to CounterCacheField must be a string " "in the format 'field'" msgstr "%s(%r)无效。CounterCacheField的to_field参数必须是格式为“field”的字符串" -#: utilities/forms/bulk_import.py:23 +#: netbox/utilities/forms/bulk_import.py:23 msgid "Enter object data in CSV, JSON or YAML format." msgstr "输入 CSV、JSON 或 YAML 格式的对象数据。" -#: utilities/forms/bulk_import.py:36 +#: netbox/utilities/forms/bulk_import.py:36 msgid "CSV delimiter" msgstr "CSV 分隔符" -#: utilities/forms/bulk_import.py:37 +#: netbox/utilities/forms/bulk_import.py:37 msgid "The character which delimits CSV fields. Applies only to CSV format." msgstr "分隔 CSV 字段的字符。 仅适用于 CSV 格式。" -#: utilities/forms/bulk_import.py:51 +#: netbox/utilities/forms/bulk_import.py:51 msgid "Form data must be empty when uploading/selecting a file." msgstr "上传/选择文件时,表单数据必须为空。" -#: utilities/forms/bulk_import.py:80 +#: netbox/utilities/forms/bulk_import.py:80 #, python-brace-format msgid "Unknown data format: {format}" msgstr "未知数据格式:{format}" -#: utilities/forms/bulk_import.py:100 +#: netbox/utilities/forms/bulk_import.py:100 msgid "Unable to detect data format. Please specify." msgstr "无法检测数据格式。 请手动指定。" -#: utilities/forms/bulk_import.py:123 +#: netbox/utilities/forms/bulk_import.py:123 msgid "Invalid CSV delimiter" msgstr "CSV 分隔符无效" -#: utilities/forms/bulk_import.py:167 +#: netbox/utilities/forms/bulk_import.py:167 msgid "" "Invalid YAML data. Data must be in the form of multiple documents, or a " "single document comprising a list of dictionaries." msgstr "YAML 数据无效。 数据必须采用多个文档的形式,或包含字典列表的单个文档。" -#: utilities/forms/fields/array.py:20 +#: netbox/utilities/forms/fields/array.py:20 #, python-brace-format msgid "" "Invalid list ({value}). Must be numeric and ranges must be in ascending " "order." msgstr "列表 ({value}) 无效。 必须是数字,并且范围必须按升序排列。" -#: utilities/forms/fields/array.py:40 +#: netbox/utilities/forms/fields/array.py:40 msgid "" "Specify one or more numeric ranges separated by commas. Example: " "1-5,20-30" msgstr "指定一个或多个用逗号分隔的数字范围。示例: 1-5,20-30" -#: utilities/forms/fields/array.py:47 +#: netbox/utilities/forms/fields/array.py:47 #, python-brace-format msgid "" "Invalid ranges ({value}). Must be a range of integers in ascending order." msgstr "范围无效 ({value})。必须是按升序排列的整数范围。" -#: utilities/forms/fields/csv.py:44 +#: netbox/utilities/forms/fields/csv.py:44 #, python-brace-format msgid "Invalid value for a multiple choice field: {value}" msgstr "多项选择字段的值无效:{value}" -#: utilities/forms/fields/csv.py:57 utilities/forms/fields/csv.py:78 +#: netbox/utilities/forms/fields/csv.py:57 +#: netbox/utilities/forms/fields/csv.py:78 #, python-format msgid "Object not found: %(value)s" msgstr "未找到对象:·%(value)s" -#: utilities/forms/fields/csv.py:65 +#: netbox/utilities/forms/fields/csv.py:65 #, python-brace-format msgid "" "\"{value}\" is not a unique value for this field; multiple objects were " "found" msgstr "\"{value}\" 不是此字段的唯一值;找到多个对象" -#: utilities/forms/fields/csv.py:69 +#: netbox/utilities/forms/fields/csv.py:69 #, python-brace-format msgid "\"{field_name}\" is an invalid accessor field name." msgstr "“{field_name}“是无效的访问器字段名称。" -#: utilities/forms/fields/csv.py:101 +#: netbox/utilities/forms/fields/csv.py:101 msgid "Object type must be specified as \".\"" msgstr "对象类型必须定义为\".\"" -#: utilities/forms/fields/csv.py:105 +#: netbox/utilities/forms/fields/csv.py:105 msgid "Invalid object type" msgstr "无效的对象类型" -#: utilities/forms/fields/expandable.py:25 +#: netbox/utilities/forms/fields/expandable.py:25 msgid "" "Alphanumeric ranges are supported for bulk creation. Mixed cases and types " "within a single range are not supported (example: " "[ge,xe]-0/0/[0-9])." msgstr "批量创建时支持字母数字范围。不支持在单个范围内混合字符和数字 (例如: [ge,xe]-0/0/[0-9])." -#: utilities/forms/fields/expandable.py:46 +#: netbox/utilities/forms/fields/expandable.py:46 msgid "" "Specify a numeric range to create multiple IPs.
    Example: " "192.0.2.[1,5,100-254]/24" msgstr "指定一个范围以创建多个IP。示例
    示例: 192.0.2.[1,5,100-254]/24" -#: utilities/forms/fields/fields.py:31 +#: netbox/utilities/forms/fields/fields.py:31 #, python-brace-format msgid "" " Markdown 语法" -#: utilities/forms/fields/fields.py:48 +#: netbox/utilities/forms/fields/fields.py:48 msgid "URL-friendly unique shorthand" msgstr "URL友好的唯一简写,是URL中最后一个反斜杠之后的部分" -#: utilities/forms/fields/fields.py:101 +#: netbox/utilities/forms/fields/fields.py:101 msgid "Enter context data in JSON format." msgstr "以JSON格式输入数据。" -#: utilities/forms/fields/fields.py:124 +#: netbox/utilities/forms/fields/fields.py:124 msgid "MAC address must be in EUI-48 format" msgstr "MAC 地址必须采用 EUI-48 格式" -#: utilities/forms/forms.py:52 +#: netbox/utilities/forms/forms.py:52 msgid "Use regular expressions" msgstr "使用正则表达式" -#: utilities/forms/forms.py:75 +#: netbox/utilities/forms/forms.py:75 msgid "" "Numeric ID of an existing object to update (if not creating a new object)" msgstr "要更新的现有对象的数字 ID(如果不创建新对象)" -#: utilities/forms/forms.py:92 +#: netbox/utilities/forms/forms.py:92 #, python-brace-format msgid "Unrecognized header: {name}" msgstr "无法识别的列头: {name}" -#: utilities/forms/forms.py:118 +#: netbox/utilities/forms/forms.py:118 msgid "Available Columns" msgstr "可用列" -#: utilities/forms/forms.py:126 +#: netbox/utilities/forms/forms.py:126 msgid "Selected Columns" msgstr "选定的列" -#: utilities/forms/mixins.py:44 +#: netbox/utilities/forms/mixins.py:44 msgid "" "This object has been modified since the form was rendered. Please consult " "the object's change log for details." msgstr "自呈现表单以来,该对象已被修改。 有关详细信息,请查阅对象的更改日志。" -#: utilities/forms/utils.py:42 utilities/forms/utils.py:68 -#: utilities/forms/utils.py:85 utilities/forms/utils.py:87 +#: netbox/utilities/forms/utils.py:42 netbox/utilities/forms/utils.py:68 +#: netbox/utilities/forms/utils.py:85 netbox/utilities/forms/utils.py:87 #, python-brace-format msgid "Range \"{value}\" is invalid." msgstr "范围 \"{value}\"无效。" -#: utilities/forms/utils.py:74 +#: netbox/utilities/forms/utils.py:74 #, python-brace-format msgid "" "Invalid range: Ending value ({end}) must be greater than beginning value " "({begin})." msgstr "无效的范围:结束值({end})必须大于开始值({begin})。" -#: utilities/forms/utils.py:232 +#: netbox/utilities/forms/utils.py:232 #, python-brace-format msgid "Duplicate or conflicting column header for \"{field}\"" msgstr "\"{field}\"的列标题重复或冲突" -#: utilities/forms/utils.py:238 +#: netbox/utilities/forms/utils.py:238 #, python-brace-format msgid "Duplicate or conflicting column header for \"{header}\"" msgstr "\"{header}\"的列标题重复或冲突" -#: utilities/forms/utils.py:247 +#: netbox/utilities/forms/utils.py:247 #, python-brace-format msgid "Row {row}: Expected {count_expected} columns but found {count_found}" msgstr "第{row}行: 应该有{count_expected}列,但是发现了{count_found}列" -#: utilities/forms/utils.py:270 +#: netbox/utilities/forms/utils.py:270 #, python-brace-format msgid "Unexpected column header \"{field}\" found." msgstr "发现错误的列头\"{field}\"。" -#: utilities/forms/utils.py:272 +#: netbox/utilities/forms/utils.py:272 #, python-brace-format msgid "Column \"{field}\" is not a related object; cannot use dots" msgstr "字段\"{field}\"未与对象关联;不能使用“.”" -#: utilities/forms/utils.py:276 +#: netbox/utilities/forms/utils.py:276 #, python-brace-format msgid "Invalid related object attribute for column \"{field}\": {to_field}" msgstr "对象的属性关联无效 \"{field}\": {to_field}" -#: utilities/forms/utils.py:284 +#: netbox/utilities/forms/utils.py:284 #, python-brace-format msgid "Required column header \"{header}\" not found." msgstr "找不到必需的列标题\"{header}\"。" -#: utilities/forms/widgets/apiselect.py:124 +#: netbox/utilities/forms/widgets/apiselect.py:124 #, python-brace-format msgid "Missing required value for dynamic query param: '{dynamic_params}'" msgstr "缺少动态查询参数:'{dynamic_params}'" -#: utilities/forms/widgets/apiselect.py:141 +#: netbox/utilities/forms/widgets/apiselect.py:141 #, python-brace-format msgid "Missing required value for static query param: '{static_params}'" msgstr "缺少静态查询参数:'{static_params}'" -#: utilities/password_validation.py:13 +#: netbox/utilities/password_validation.py:13 msgid "Password must have at least one numeral." msgstr "密码必须至少包含一个数字。" -#: utilities/password_validation.py:18 +#: netbox/utilities/password_validation.py:18 msgid "Password must have at least one uppercase letter." msgstr "密码必须至少包含一个大写字母。" -#: utilities/password_validation.py:23 +#: netbox/utilities/password_validation.py:23 msgid "Password must have at least one lowercase letter." msgstr "密码必须至少包含一个小写字母。" -#: utilities/password_validation.py:27 +#: netbox/utilities/password_validation.py:27 msgid "" "Your password must contain at least one numeral, one uppercase letter and " "one lowercase letter." msgstr "您的密码必须包含至少一个数字、一个大写字母和一个小写字母。" -#: utilities/permissions.py:42 +#: netbox/utilities/permissions.py:42 #, python-brace-format msgid "" "Invalid permission name: {name}. Must be in the format " "._" msgstr "无效的权限名称: {name}. 格式必须是 ._" -#: utilities/permissions.py:60 +#: netbox/utilities/permissions.py:60 #, python-brace-format msgid "Unknown app_label/model_name for {name}" msgstr "未知的app_label/model_name: {name}" -#: utilities/request.py:76 +#: netbox/utilities/request.py:76 #, python-brace-format msgid "Invalid IP address set for {header}: {ip}" msgstr "为 {header} 设置的 IP 地址无效:{ip}" -#: utilities/tables.py:47 +#: netbox/utilities/tables.py:47 #, python-brace-format msgid "A column named {name} is already defined for table {table_name}" msgstr "名为{name}的列已在表{table_name}中定义了" -#: utilities/templates/builtins/customfield_value.html:30 +#: netbox/utilities/templates/builtins/customfield_value.html:30 msgid "Not defined" msgstr "未定义" -#: utilities/templates/buttons/bookmark.html:9 +#: netbox/utilities/templates/buttons/bookmark.html:9 msgid "Unbookmark" msgstr "取消书签" -#: utilities/templates/buttons/bookmark.html:13 +#: netbox/utilities/templates/buttons/bookmark.html:13 msgid "Bookmark" msgstr "书签" -#: utilities/templates/buttons/clone.html:4 +#: netbox/utilities/templates/buttons/clone.html:4 msgid "Clone" msgstr "克隆" -#: utilities/templates/buttons/export.html:7 +#: netbox/utilities/templates/buttons/export.html:7 msgid "Current View" msgstr "当前显示" -#: utilities/templates/buttons/export.html:8 +#: netbox/utilities/templates/buttons/export.html:8 msgid "All Data" msgstr "所有数据" -#: utilities/templates/buttons/export.html:28 +#: netbox/utilities/templates/buttons/export.html:28 msgid "Add export template" msgstr "添加导出模版" -#: utilities/templates/buttons/import.html:4 +#: netbox/utilities/templates/buttons/import.html:4 msgid "Import" msgstr "导入" -#: utilities/templates/buttons/subscribe.html:10 +#: netbox/utilities/templates/buttons/subscribe.html:10 msgid "Unsubscribe" msgstr "取消订阅" -#: utilities/templates/buttons/subscribe.html:14 +#: netbox/utilities/templates/buttons/subscribe.html:14 msgid "Subscribe" msgstr "订阅" -#: utilities/templates/form_helpers/render_field.html:41 +#: netbox/utilities/templates/form_helpers/render_field.html:41 msgid "Copy to clipboard" msgstr "复制到剪贴板" -#: utilities/templates/form_helpers/render_field.html:57 +#: netbox/utilities/templates/form_helpers/render_field.html:57 msgid "This field is required" msgstr "此字段必填" -#: utilities/templates/form_helpers/render_field.html:70 +#: netbox/utilities/templates/form_helpers/render_field.html:70 msgid "Set Null" msgstr "设置为空" -#: utilities/templates/helpers/applied_filters.html:11 +#: netbox/utilities/templates/helpers/applied_filters.html:11 msgid "Clear all" msgstr "清除所有内容" -#: utilities/templates/helpers/table_config_form.html:8 +#: netbox/utilities/templates/helpers/table_config_form.html:8 msgid "Table Configuration" msgstr "表单配置" -#: utilities/templates/helpers/table_config_form.html:31 +#: netbox/utilities/templates/helpers/table_config_form.html:31 msgid "Move Up" msgstr "上移" -#: utilities/templates/helpers/table_config_form.html:34 +#: netbox/utilities/templates/helpers/table_config_form.html:34 msgid "Move Down" msgstr "下移" -#: utilities/templates/navigation/menu.html:14 +#: netbox/utilities/templates/navigation/menu.html:14 msgid "Search…" msgstr "搜索…" -#: utilities/templates/navigation/menu.html:14 +#: netbox/utilities/templates/navigation/menu.html:14 msgid "Search NetBox" msgstr "搜索 NetBox" -#: utilities/templates/widgets/apiselect.html:7 +#: netbox/utilities/templates/widgets/apiselect.html:7 msgid "Open selector" msgstr "打开选择框" -#: utilities/templates/widgets/markdown_input.html:6 +#: netbox/utilities/templates/widgets/markdown_input.html:6 msgid "Write" msgstr "编写" -#: utilities/testing/views.py:632 +#: netbox/utilities/testing/views.py:632 msgid "The test must define csv_update_data." msgstr "测试必须定义csv_update_data。" -#: utilities/validators.py:65 +#: netbox/utilities/validators.py:65 #, python-brace-format msgid "{value} is not a valid regular expression." msgstr "{value} 不是有效的正则表达式。" -#: utilities/views.py:57 +#: netbox/utilities/views.py:57 #, python-brace-format msgid "{self.__class__.__name__} must implement get_required_permission()" msgstr "{self.__class__.__name__}必须实现get_required_permission()方法" -#: utilities/views.py:93 +#: netbox/utilities/views.py:93 #, python-brace-format msgid "{class_name} must implement get_required_permission()" msgstr "{class_name}必须实现get_required_permission()方法" -#: utilities/views.py:117 +#: netbox/utilities/views.py:117 #, python-brace-format msgid "" "{class_name} has no queryset defined. ObjectPermissionRequiredMixin may only" " be used on views which define a base queryset" msgstr "{class_name} 没有定义查询集。ObjectPermissionRequiredMixin 只能在定义了基本查询集的视图中使用" -#: virtualization/filtersets.py:79 +#: netbox/virtualization/filtersets.py:79 msgid "Parent group (ID)" msgstr "父组(ID)" -#: virtualization/filtersets.py:85 +#: netbox/virtualization/filtersets.py:85 msgid "Parent group (slug)" msgstr "父组(缩写)" -#: virtualization/filtersets.py:89 virtualization/filtersets.py:141 +#: netbox/virtualization/filtersets.py:89 +#: netbox/virtualization/filtersets.py:141 msgid "Cluster type (ID)" msgstr "集群类型(ID)" -#: virtualization/filtersets.py:151 virtualization/filtersets.py:271 +#: netbox/virtualization/filtersets.py:151 +#: netbox/virtualization/filtersets.py:271 msgid "Cluster (ID)" msgstr "集群 (ID)" -#: virtualization/forms/bulk_edit.py:166 -#: virtualization/models/virtualmachines.py:115 +#: netbox/virtualization/forms/bulk_edit.py:166 +#: netbox/virtualization/models/virtualmachines.py:115 msgid "vCPUs" msgstr "vCPUs" -#: virtualization/forms/bulk_edit.py:170 +#: netbox/virtualization/forms/bulk_edit.py:170 msgid "Memory (MB)" msgstr "内存 (MB)" -#: virtualization/forms/bulk_edit.py:174 -msgid "Disk (GB)" -msgstr "磁盘 (GB)" +#: netbox/virtualization/forms/bulk_edit.py:174 +msgid "Disk (MB)" +msgstr "" -#: virtualization/forms/bulk_edit.py:334 -#: virtualization/forms/filtersets.py:251 -msgid "Size (GB)" -msgstr "大小 (GB)" +#: netbox/virtualization/forms/bulk_edit.py:334 +#: netbox/virtualization/forms/filtersets.py:251 +msgid "Size (MB)" +msgstr "" -#: virtualization/forms/bulk_import.py:44 +#: netbox/virtualization/forms/bulk_import.py:44 msgid "Type of cluster" msgstr "集群类型" -#: virtualization/forms/bulk_import.py:51 +#: netbox/virtualization/forms/bulk_import.py:51 msgid "Assigned cluster group" msgstr "指定集群组" -#: virtualization/forms/bulk_import.py:96 +#: netbox/virtualization/forms/bulk_import.py:96 msgid "Assigned cluster" msgstr "指定集群" -#: virtualization/forms/bulk_import.py:103 +#: netbox/virtualization/forms/bulk_import.py:103 msgid "Assigned device within cluster" msgstr "指定集群内部设备" -#: virtualization/forms/filtersets.py:183 +#: netbox/virtualization/forms/filtersets.py:183 msgid "Serial number" msgstr "序列号" -#: virtualization/forms/model_forms.py:153 +#: netbox/virtualization/forms/model_forms.py:153 #, python-brace-format msgid "" "{device} belongs to a different site ({device_site}) than the cluster " "({cluster_site})" msgstr "{device} 属于与集群({cluster_site})不同的站点({device_site})" -#: virtualization/forms/model_forms.py:192 +#: netbox/virtualization/forms/model_forms.py:192 msgid "Optionally pin this VM to a specific host device within the cluster" msgstr "可将此虚拟机固定到集群中的特定主机设备" -#: virtualization/forms/model_forms.py:221 +#: netbox/virtualization/forms/model_forms.py:221 msgid "Site/Cluster" msgstr "站点/集群" -#: virtualization/forms/model_forms.py:244 +#: netbox/virtualization/forms/model_forms.py:244 msgid "Disk size is managed via the attachment of virtual disks." msgstr "通过附加虚拟磁盘来管理磁盘大小。" -#: virtualization/forms/model_forms.py:372 -#: virtualization/tables/virtualmachines.py:111 +#: netbox/virtualization/forms/model_forms.py:372 +#: netbox/virtualization/tables/virtualmachines.py:111 msgid "Disk" msgstr "硬盘" -#: virtualization/models/clusters.py:25 +#: netbox/virtualization/models/clusters.py:25 msgid "cluster type" msgstr "集群类型" -#: virtualization/models/clusters.py:26 +#: netbox/virtualization/models/clusters.py:26 msgid "cluster types" msgstr "集群类型" -#: virtualization/models/clusters.py:45 +#: netbox/virtualization/models/clusters.py:45 msgid "cluster group" msgstr "集群组" -#: virtualization/models/clusters.py:46 +#: netbox/virtualization/models/clusters.py:46 msgid "cluster groups" msgstr "集群组" -#: virtualization/models/clusters.py:121 +#: netbox/virtualization/models/clusters.py:121 msgid "cluster" msgstr "集群" -#: virtualization/models/clusters.py:122 +#: netbox/virtualization/models/clusters.py:122 msgid "clusters" msgstr "集群组" -#: virtualization/models/clusters.py:141 +#: netbox/virtualization/models/clusters.py:141 #, python-brace-format msgid "" "{count} devices are assigned as hosts for this cluster but are not in site " "{site}" msgstr "{count} 个设备被分配为此集群的主机,但不在站点{site}" -#: virtualization/models/virtualmachines.py:123 +#: netbox/virtualization/models/virtualmachines.py:123 msgid "memory (MB)" msgstr "内存 (MB)" -#: virtualization/models/virtualmachines.py:128 +#: netbox/virtualization/models/virtualmachines.py:128 msgid "disk (MB)" msgstr "磁盘 (MB)" -#: virtualization/models/virtualmachines.py:166 +#: netbox/virtualization/models/virtualmachines.py:166 msgid "Virtual machine name must be unique per cluster." msgstr "集群中的虚拟机名称必须唯一。" -#: virtualization/models/virtualmachines.py:169 +#: netbox/virtualization/models/virtualmachines.py:169 msgid "virtual machine" msgstr "虚拟机" -#: virtualization/models/virtualmachines.py:170 +#: netbox/virtualization/models/virtualmachines.py:170 msgid "virtual machines" msgstr "虚拟机" -#: virtualization/models/virtualmachines.py:184 +#: netbox/virtualization/models/virtualmachines.py:184 msgid "A virtual machine must be assigned to a site and/or cluster." msgstr "虚拟机必须分配给站点和/或集群。" -#: virtualization/models/virtualmachines.py:191 +#: netbox/virtualization/models/virtualmachines.py:191 #, python-brace-format msgid "" "The selected cluster ({cluster}) is not assigned to this site ({site})." msgstr "所选集群({cluster}) 未分配给此站点 ({site})。" -#: virtualization/models/virtualmachines.py:198 +#: netbox/virtualization/models/virtualmachines.py:198 msgid "Must specify a cluster when assigning a host device." msgstr "分配主机设备时必须指定集群。" -#: virtualization/models/virtualmachines.py:203 +#: netbox/virtualization/models/virtualmachines.py:203 #, python-brace-format msgid "" "The selected device ({device}) is not assigned to this cluster ({cluster})." msgstr "所选设备 ({device})未分配给此集群({cluster})。" -#: virtualization/models/virtualmachines.py:215 +#: netbox/virtualization/models/virtualmachines.py:215 #, python-brace-format msgid "" "The specified disk size ({size}) must match the aggregate size of assigned " "virtual disks ({total_size})." msgstr "指定的磁盘大小 ({size}) 必须与分配的虚拟磁盘的总大小相匹配 ({total_size})." -#: virtualization/models/virtualmachines.py:229 +#: netbox/virtualization/models/virtualmachines.py:229 #, python-brace-format msgid "Must be an IPv{family} address. ({ip} is an IPv{version} address.)" msgstr "必须是 IPv{family} 地址。 ({ip} 是 IPv{version} 地址。)" -#: virtualization/models/virtualmachines.py:238 +#: netbox/virtualization/models/virtualmachines.py:238 #, python-brace-format msgid "The specified IP address ({ip}) is not assigned to this VM." msgstr "指定的IP地址 ({ip}) 未分配给该虚拟机。" -#: virtualization/models/virtualmachines.py:396 +#: netbox/virtualization/models/virtualmachines.py:396 #, python-brace-format msgid "" "The selected parent interface ({parent}) belongs to a different virtual " "machine ({virtual_machine})." msgstr "所选父接口 ({parent}) 属于另一个虚拟机 ({virtual_machine})" -#: virtualization/models/virtualmachines.py:411 +#: netbox/virtualization/models/virtualmachines.py:411 #, python-brace-format msgid "" "The selected bridge interface ({bridge}) belongs to a different virtual " "machine ({virtual_machine})." msgstr "所选桥接接口 ({bridge})属于另一个虚拟机({virtual_machine})。" -#: virtualization/models/virtualmachines.py:422 +#: netbox/virtualization/models/virtualmachines.py:422 #, 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}) 必须与接口的父虚拟机属于同一站点,或者必须是全局的。" -#: virtualization/models/virtualmachines.py:434 +#: netbox/virtualization/models/virtualmachines.py:434 msgid "size (MB)" msgstr "大小 (MB)" -#: virtualization/models/virtualmachines.py:438 +#: netbox/virtualization/models/virtualmachines.py:438 msgid "virtual disk" msgstr "虚拟磁盘" -#: virtualization/models/virtualmachines.py:439 +#: netbox/virtualization/models/virtualmachines.py:439 msgid "virtual disks" msgstr "虚拟磁盘" -#: virtualization/views.py:275 +#: netbox/virtualization/views.py:273 #, python-brace-format msgid "Added {count} devices to cluster {cluster}" msgstr "已添加 {count} 要集群的设备 {cluster}" -#: virtualization/views.py:310 +#: netbox/virtualization/views.py:308 #, python-brace-format msgid "Removed {count} devices from cluster {cluster}" msgstr "已移除 {count} 来自集群的设备 {cluster}" -#: vpn/choices.py:31 +#: netbox/vpn/choices.py:35 msgid "IPsec - Transport" msgstr "IPsec-传输模式" -#: vpn/choices.py:32 +#: netbox/vpn/choices.py:36 msgid "IPsec - Tunnel" msgstr "IPsec - Tunnel" -#: vpn/choices.py:33 +#: netbox/vpn/choices.py:37 msgid "IP-in-IP" msgstr "IP-in-IP" -#: vpn/choices.py:34 +#: netbox/vpn/choices.py:38 msgid "GRE" msgstr "GRE" -#: vpn/choices.py:56 +#: netbox/vpn/choices.py:39 +msgid "WireGuard" +msgstr "" + +#: netbox/vpn/choices.py:40 +msgid "OpenVPN" +msgstr "" + +#: netbox/vpn/choices.py:41 +msgid "L2TP" +msgstr "" + +#: netbox/vpn/choices.py:42 +msgid "PPTP" +msgstr "" + +#: netbox/vpn/choices.py:64 msgid "Hub" msgstr "中心节点" -#: vpn/choices.py:57 +#: netbox/vpn/choices.py:65 msgid "Spoke" msgstr "分支节点" -#: vpn/choices.py:80 +#: netbox/vpn/choices.py:88 msgid "Aggressive" msgstr "野蛮模式" -#: vpn/choices.py:81 +#: netbox/vpn/choices.py:89 msgid "Main" msgstr "主模式" -#: vpn/choices.py:92 +#: netbox/vpn/choices.py:100 msgid "Pre-shared keys" msgstr "预共享密钥" -#: vpn/choices.py:93 +#: netbox/vpn/choices.py:101 msgid "Certificates" msgstr "证书" -#: vpn/choices.py:94 +#: netbox/vpn/choices.py:102 msgid "RSA signatures" msgstr "RSA 签名" -#: vpn/choices.py:95 +#: netbox/vpn/choices.py:103 msgid "DSA signatures" msgstr "DSA 签名" -#: vpn/choices.py:178 vpn/choices.py:179 vpn/choices.py:180 vpn/choices.py:181 -#: vpn/choices.py:182 vpn/choices.py:183 vpn/choices.py:184 vpn/choices.py:185 -#: vpn/choices.py:186 vpn/choices.py:187 vpn/choices.py:188 vpn/choices.py:189 -#: vpn/choices.py:190 vpn/choices.py:191 vpn/choices.py:192 vpn/choices.py:193 -#: vpn/choices.py:194 vpn/choices.py:195 vpn/choices.py:196 vpn/choices.py:197 -#: vpn/choices.py:198 vpn/choices.py:199 vpn/choices.py:200 vpn/choices.py:201 +#: netbox/vpn/choices.py:186 netbox/vpn/choices.py:187 +#: netbox/vpn/choices.py:188 netbox/vpn/choices.py:189 +#: netbox/vpn/choices.py:190 netbox/vpn/choices.py:191 +#: netbox/vpn/choices.py:192 netbox/vpn/choices.py:193 +#: netbox/vpn/choices.py:194 netbox/vpn/choices.py:195 +#: netbox/vpn/choices.py:196 netbox/vpn/choices.py:197 +#: netbox/vpn/choices.py:198 netbox/vpn/choices.py:199 +#: netbox/vpn/choices.py:200 netbox/vpn/choices.py:201 +#: netbox/vpn/choices.py:202 netbox/vpn/choices.py:203 +#: netbox/vpn/choices.py:204 netbox/vpn/choices.py:205 +#: netbox/vpn/choices.py:206 netbox/vpn/choices.py:207 +#: netbox/vpn/choices.py:208 netbox/vpn/choices.py:209 #, python-brace-format msgid "Group {n}" msgstr "Group {n}" -#: vpn/choices.py:243 +#: netbox/vpn/choices.py:251 msgid "Ethernet Private LAN" msgstr "Ethernet Private LAN" -#: vpn/choices.py:244 +#: netbox/vpn/choices.py:252 msgid "Ethernet Virtual Private LAN" msgstr "Ethernet Virtual Private LAN" -#: vpn/choices.py:247 +#: netbox/vpn/choices.py:255 msgid "Ethernet Private Tree" msgstr "Ethernet Private Tree" -#: vpn/choices.py:248 +#: netbox/vpn/choices.py:256 msgid "Ethernet Virtual Private Tree" msgstr "Ethernet Virtual Private Tree" -#: vpn/filtersets.py:41 +#: netbox/vpn/filtersets.py:41 msgid "Tunnel group (ID)" msgstr "隧道组(ID)" -#: vpn/filtersets.py:47 +#: netbox/vpn/filtersets.py:47 msgid "Tunnel group (slug)" msgstr "隧道组(缩写)" -#: vpn/filtersets.py:54 +#: netbox/vpn/filtersets.py:54 msgid "IPSec profile (ID)" msgstr "IPSec 通道(ID)" -#: vpn/filtersets.py:60 +#: netbox/vpn/filtersets.py:60 msgid "IPSec profile (name)" msgstr "IPSec 通道(名称)" -#: vpn/filtersets.py:81 +#: netbox/vpn/filtersets.py:81 msgid "Tunnel (ID)" msgstr "隧道 (ID)" -#: vpn/filtersets.py:87 +#: netbox/vpn/filtersets.py:87 msgid "Tunnel (name)" msgstr "隧道(名称)" -#: vpn/filtersets.py:118 +#: netbox/vpn/filtersets.py:118 msgid "Outside IP (ID)" msgstr "外部 IP (ID)" -#: vpn/filtersets.py:130 vpn/filtersets.py:263 +#: netbox/vpn/filtersets.py:130 netbox/vpn/filtersets.py:263 msgid "IKE policy (ID)" msgstr "IKE 策略 (ID)" -#: vpn/filtersets.py:136 vpn/filtersets.py:269 +#: netbox/vpn/filtersets.py:136 netbox/vpn/filtersets.py:269 msgid "IKE policy (name)" msgstr "IKE 策略(名称)" -#: vpn/filtersets.py:200 vpn/filtersets.py:273 +#: netbox/vpn/filtersets.py:200 netbox/vpn/filtersets.py:273 msgid "IPSec policy (ID)" msgstr "IPsec 策略 (ID)" -#: vpn/filtersets.py:206 vpn/filtersets.py:279 +#: netbox/vpn/filtersets.py:206 netbox/vpn/filtersets.py:279 msgid "IPSec policy (name)" msgstr "IPsec 策略(名称)" -#: vpn/filtersets.py:348 +#: netbox/vpn/filtersets.py:348 msgid "L2VPN (slug)" msgstr "L2VPN(缩写)" -#: vpn/filtersets.py:412 +#: netbox/vpn/filtersets.py:412 msgid "VM Interface (ID)" msgstr "虚拟接口 (ID)" -#: vpn/filtersets.py:418 +#: netbox/vpn/filtersets.py:418 msgid "VLAN (name)" msgstr "VLAN(名称)" -#: vpn/forms/bulk_edit.py:45 vpn/forms/bulk_import.py:42 -#: vpn/forms/filtersets.py:54 +#: netbox/vpn/forms/bulk_edit.py:45 netbox/vpn/forms/bulk_import.py:42 +#: netbox/vpn/forms/filtersets.py:54 msgid "Tunnel group" msgstr "隧道组" -#: vpn/forms/bulk_edit.py:117 vpn/models/crypto.py:47 +#: netbox/vpn/forms/bulk_edit.py:117 netbox/vpn/models/crypto.py:47 msgid "SA lifetime" msgstr "SA生存期" -#: vpn/forms/bulk_edit.py:151 wireless/forms/bulk_edit.py:79 -#: wireless/forms/bulk_edit.py:126 wireless/forms/filtersets.py:64 -#: wireless/forms/filtersets.py:98 +#: netbox/vpn/forms/bulk_edit.py:151 netbox/wireless/forms/bulk_edit.py:79 +#: netbox/wireless/forms/bulk_edit.py:126 +#: netbox/wireless/forms/filtersets.py:64 +#: netbox/wireless/forms/filtersets.py:98 msgid "Pre-shared key" msgstr "预共享密钥" -#: vpn/forms/bulk_edit.py:237 vpn/forms/bulk_import.py:239 -#: vpn/forms/filtersets.py:199 vpn/forms/model_forms.py:370 -#: vpn/models/crypto.py:104 +#: netbox/vpn/forms/bulk_edit.py:237 netbox/vpn/forms/bulk_import.py:239 +#: netbox/vpn/forms/filtersets.py:199 netbox/vpn/forms/model_forms.py:370 +#: netbox/vpn/models/crypto.py:104 msgid "IKE policy" msgstr "IKE 策略" -#: vpn/forms/bulk_edit.py:242 vpn/forms/bulk_import.py:244 -#: vpn/forms/filtersets.py:204 vpn/forms/model_forms.py:374 -#: vpn/models/crypto.py:209 +#: netbox/vpn/forms/bulk_edit.py:242 netbox/vpn/forms/bulk_import.py:244 +#: netbox/vpn/forms/filtersets.py:204 netbox/vpn/forms/model_forms.py:374 +#: netbox/vpn/models/crypto.py:209 msgid "IPSec policy" msgstr "IPSec 策略" -#: vpn/forms/bulk_import.py:50 +#: netbox/vpn/forms/bulk_import.py:50 msgid "Tunnel encapsulation" msgstr "隧道封装" -#: vpn/forms/bulk_import.py:83 +#: netbox/vpn/forms/bulk_import.py:83 msgid "Operational role" msgstr "操作角色" -#: vpn/forms/bulk_import.py:90 +#: netbox/vpn/forms/bulk_import.py:90 msgid "Parent device of assigned interface" msgstr "指定接口的父设备" -#: vpn/forms/bulk_import.py:97 +#: netbox/vpn/forms/bulk_import.py:97 msgid "Parent VM of assigned interface" msgstr "指定接口的父虚拟机" -#: vpn/forms/bulk_import.py:104 +#: netbox/vpn/forms/bulk_import.py:104 msgid "Device or virtual machine interface" msgstr "设备/虚拟机接口" -#: vpn/forms/bulk_import.py:183 +#: netbox/vpn/forms/bulk_import.py:183 msgid "IKE proposal(s)" msgstr "IKE安全提议" -#: vpn/forms/bulk_import.py:215 vpn/models/crypto.py:197 +#: netbox/vpn/forms/bulk_import.py:215 netbox/vpn/models/crypto.py:197 msgid "Diffie-Hellman group for Perfect Forward Secrecy" msgstr "DH组" -#: vpn/forms/bulk_import.py:222 +#: netbox/vpn/forms/bulk_import.py:222 msgid "IPSec proposal(s)" msgstr "IPSEC安全提议" -#: vpn/forms/bulk_import.py:236 +#: netbox/vpn/forms/bulk_import.py:236 msgid "IPSec protocol" msgstr "IPSEC 协议" -#: vpn/forms/bulk_import.py:266 +#: netbox/vpn/forms/bulk_import.py:266 msgid "L2VPN type" msgstr "L2VPN 类型" -#: vpn/forms/bulk_import.py:287 +#: netbox/vpn/forms/bulk_import.py:287 msgid "Parent device (for interface)" msgstr "父设备(用于接口)" -#: vpn/forms/bulk_import.py:294 +#: netbox/vpn/forms/bulk_import.py:294 msgid "Parent virtual machine (for interface)" msgstr "父虚拟机(用于接口)" -#: vpn/forms/bulk_import.py:301 +#: netbox/vpn/forms/bulk_import.py:301 msgid "Assigned interface (device or VM)" msgstr "指定接口(设备/虚拟机)" -#: vpn/forms/bulk_import.py:334 +#: netbox/vpn/forms/bulk_import.py:334 msgid "Cannot import device and VM interface terminations simultaneously." msgstr "不能导入设备和虚拟机接口连接。" -#: vpn/forms/bulk_import.py:336 +#: netbox/vpn/forms/bulk_import.py:336 msgid "Each termination must specify either an interface or a VLAN." msgstr "每个接入点必须指定一个接口或一个 VLAN。" -#: vpn/forms/bulk_import.py:338 +#: netbox/vpn/forms/bulk_import.py:338 msgid "Cannot assign both an interface and a VLAN." msgstr "不能同时分配接口和VLAN。" -#: vpn/forms/filtersets.py:130 +#: netbox/vpn/forms/filtersets.py:130 msgid "IKE version" msgstr "IKE 版本" -#: vpn/forms/filtersets.py:142 vpn/forms/filtersets.py:175 -#: vpn/forms/model_forms.py:298 vpn/forms/model_forms.py:334 +#: netbox/vpn/forms/filtersets.py:142 netbox/vpn/forms/filtersets.py:175 +#: netbox/vpn/forms/model_forms.py:298 netbox/vpn/forms/model_forms.py:334 msgid "Proposal" msgstr "安全提议" -#: vpn/forms/filtersets.py:251 +#: netbox/vpn/forms/filtersets.py:251 msgid "Assigned Object Type" msgstr "指定的对象类型" -#: vpn/forms/model_forms.py:95 vpn/forms/model_forms.py:130 -#: vpn/forms/model_forms.py:240 vpn/tables/tunnels.py:91 +#: netbox/vpn/forms/model_forms.py:95 netbox/vpn/forms/model_forms.py:130 +#: netbox/vpn/forms/model_forms.py:240 netbox/vpn/tables/tunnels.py:91 msgid "Tunnel interface" msgstr "隧道接口" -#: vpn/forms/model_forms.py:150 +#: netbox/vpn/forms/model_forms.py:150 msgid "First Termination" msgstr "第一端" -#: vpn/forms/model_forms.py:153 +#: netbox/vpn/forms/model_forms.py:153 msgid "Second Termination" msgstr "第二端" -#: vpn/forms/model_forms.py:197 +#: netbox/vpn/forms/model_forms.py:197 msgid "This parameter is required when defining a termination." msgstr "定义端点时需要此参数。" -#: vpn/forms/model_forms.py:320 vpn/forms/model_forms.py:356 +#: netbox/vpn/forms/model_forms.py:320 netbox/vpn/forms/model_forms.py:356 msgid "Policy" msgstr "策略" -#: vpn/forms/model_forms.py:487 +#: netbox/vpn/forms/model_forms.py:487 msgid "A termination must specify an interface or VLAN." msgstr "接入点必须指定接口或 VLAN。" -#: vpn/forms/model_forms.py:489 +#: netbox/vpn/forms/model_forms.py:489 msgid "" "A termination can only have one terminating object (an interface or VLAN)." msgstr "一个终端只能有一个终端对象(接口或VLAN)。" -#: vpn/models/crypto.py:33 +#: netbox/vpn/models/crypto.py:33 msgid "encryption algorithm" msgstr "加密算法" -#: vpn/models/crypto.py:37 +#: netbox/vpn/models/crypto.py:37 msgid "authentication algorithm" msgstr "认证算法" -#: vpn/models/crypto.py:44 +#: netbox/vpn/models/crypto.py:44 msgid "Diffie-Hellman group ID" msgstr "DH组" -#: vpn/models/crypto.py:50 +#: netbox/vpn/models/crypto.py:50 msgid "Security association lifetime (in seconds)" msgstr "SA生存期(秒)" -#: vpn/models/crypto.py:59 +#: netbox/vpn/models/crypto.py:59 msgid "IKE proposal" msgstr "IKE proposal" -#: vpn/models/crypto.py:60 +#: netbox/vpn/models/crypto.py:60 msgid "IKE proposals" msgstr "IKE proposals" -#: vpn/models/crypto.py:76 +#: netbox/vpn/models/crypto.py:76 msgid "version" msgstr "版本" -#: vpn/models/crypto.py:88 vpn/models/crypto.py:190 +#: netbox/vpn/models/crypto.py:88 netbox/vpn/models/crypto.py:190 msgid "proposals" msgstr "proposals" -#: vpn/models/crypto.py:91 wireless/models.py:39 +#: netbox/vpn/models/crypto.py:91 netbox/wireless/models.py:39 msgid "pre-shared key" msgstr "pre-shared key" -#: vpn/models/crypto.py:105 +#: netbox/vpn/models/crypto.py:105 msgid "IKE policies" msgstr "IKE policies" -#: vpn/models/crypto.py:118 +#: netbox/vpn/models/crypto.py:118 msgid "Mode is required for selected IKE version" msgstr "所选IKE版本需要配置模式" -#: vpn/models/crypto.py:122 +#: netbox/vpn/models/crypto.py:122 msgid "Mode cannot be used for selected IKE version" msgstr "该模式不能用于所选的IKE版本" -#: vpn/models/crypto.py:136 +#: netbox/vpn/models/crypto.py:136 msgid "encryption" msgstr "加密算法" -#: vpn/models/crypto.py:141 +#: netbox/vpn/models/crypto.py:141 msgid "authentication" msgstr "认证" -#: vpn/models/crypto.py:149 +#: netbox/vpn/models/crypto.py:149 msgid "Security association lifetime (seconds)" msgstr "SA生存期(秒)" -#: vpn/models/crypto.py:155 +#: netbox/vpn/models/crypto.py:155 msgid "Security association lifetime (in kilobytes)" msgstr "SA生存大小(KB)" -#: vpn/models/crypto.py:164 +#: netbox/vpn/models/crypto.py:164 msgid "IPSec proposal" msgstr "IPSec proposal" -#: vpn/models/crypto.py:165 +#: netbox/vpn/models/crypto.py:165 msgid "IPSec proposals" msgstr "IPSec proposals" -#: vpn/models/crypto.py:178 +#: netbox/vpn/models/crypto.py:178 msgid "Encryption and/or authentication algorithm must be defined" msgstr "必须定义加密和身份验证算法" -#: vpn/models/crypto.py:210 +#: netbox/vpn/models/crypto.py:210 msgid "IPSec policies" msgstr "IPSec policies" -#: vpn/models/crypto.py:251 +#: netbox/vpn/models/crypto.py:251 msgid "IPSec profiles" msgstr "IPSec profiles" -#: vpn/models/l2vpn.py:116 +#: netbox/vpn/models/l2vpn.py:116 msgid "L2VPN termination" msgstr "L2VPN 终点" -#: vpn/models/l2vpn.py:117 +#: netbox/vpn/models/l2vpn.py:117 msgid "L2VPN terminations" msgstr "L2VPN 终点" -#: vpn/models/l2vpn.py:135 +#: netbox/vpn/models/l2vpn.py:135 #, python-brace-format msgid "L2VPN Termination already assigned ({assigned_object})" msgstr "L2VPN终端已分配({assigned_object})" -#: vpn/models/l2vpn.py:147 +#: netbox/vpn/models/l2vpn.py:147 #, python-brace-format msgid "" "{l2vpn_type} L2VPNs cannot have more than two terminations; found " "{terminations_count} already defined." msgstr "{l2vpn_type}L2VPN不能有两个以上的端点;已找到{terminations_count}个端点。" -#: vpn/models/tunnels.py:26 +#: netbox/vpn/models/tunnels.py:26 msgid "tunnel group" msgstr "隧道组" -#: vpn/models/tunnels.py:27 +#: netbox/vpn/models/tunnels.py:27 msgid "tunnel groups" msgstr "隧道组" -#: vpn/models/tunnels.py:53 +#: netbox/vpn/models/tunnels.py:53 msgid "encapsulation" msgstr "封装" -#: vpn/models/tunnels.py:72 +#: netbox/vpn/models/tunnels.py:72 msgid "tunnel ID" msgstr "隧道 ID" -#: vpn/models/tunnels.py:94 +#: netbox/vpn/models/tunnels.py:94 msgid "tunnel" msgstr "隧道" -#: vpn/models/tunnels.py:95 +#: netbox/vpn/models/tunnels.py:95 msgid "tunnels" msgstr "隧道" -#: vpn/models/tunnels.py:153 +#: netbox/vpn/models/tunnels.py:153 msgid "An object may be terminated to only one tunnel at a time." msgstr "一个对象一次只能被终止到一个隧道。" -#: vpn/models/tunnels.py:156 +#: netbox/vpn/models/tunnels.py:156 msgid "tunnel termination" msgstr "隧道终点" -#: vpn/models/tunnels.py:157 +#: netbox/vpn/models/tunnels.py:157 msgid "tunnel terminations" msgstr "隧道终点" -#: vpn/models/tunnels.py:174 +#: netbox/vpn/models/tunnels.py:174 #, python-brace-format msgid "{name} is already attached to a tunnel ({tunnel})." msgstr "{name}已附加到隧道({tunnel})。" -#: vpn/tables/crypto.py:22 +#: netbox/vpn/tables/crypto.py:22 msgid "Authentication Method" msgstr "认证方式" -#: vpn/tables/crypto.py:25 vpn/tables/crypto.py:97 +#: netbox/vpn/tables/crypto.py:25 netbox/vpn/tables/crypto.py:97 msgid "Encryption Algorithm" msgstr "加密算法" -#: vpn/tables/crypto.py:28 vpn/tables/crypto.py:100 +#: netbox/vpn/tables/crypto.py:28 netbox/vpn/tables/crypto.py:100 msgid "Authentication Algorithm" msgstr "认证算法" -#: vpn/tables/crypto.py:34 +#: netbox/vpn/tables/crypto.py:34 msgid "SA Lifetime" msgstr "SA生存期" -#: vpn/tables/crypto.py:71 +#: netbox/vpn/tables/crypto.py:71 msgid "Pre-shared Key" msgstr "预共享密钥" -#: vpn/tables/crypto.py:103 +#: netbox/vpn/tables/crypto.py:103 msgid "SA Lifetime (Seconds)" msgstr "SA生存期(秒)" -#: vpn/tables/crypto.py:106 +#: netbox/vpn/tables/crypto.py:106 msgid "SA Lifetime (KB)" msgstr "SA生存大小(KB)" -#: vpn/tables/l2vpn.py:69 +#: netbox/vpn/tables/l2vpn.py:69 msgid "Object Parent" msgstr "目标上级" -#: vpn/tables/l2vpn.py:74 +#: netbox/vpn/tables/l2vpn.py:74 msgid "Object Site" msgstr "目的站点" -#: wireless/choices.py:11 +#: netbox/wireless/choices.py:11 msgid "Access point" msgstr "AP" -#: wireless/choices.py:12 +#: netbox/wireless/choices.py:12 msgid "Station" msgstr "基站" -#: wireless/choices.py:467 +#: netbox/wireless/choices.py:467 msgid "Open" msgstr "开放" -#: wireless/choices.py:469 +#: netbox/wireless/choices.py:469 msgid "WPA Personal (PSK)" msgstr "WPA Personal (PSK)" -#: wireless/choices.py:470 +#: netbox/wireless/choices.py:470 msgid "WPA Enterprise" msgstr "WPA Enterprise" -#: wireless/forms/bulk_edit.py:73 wireless/forms/bulk_edit.py:120 -#: wireless/forms/bulk_import.py:68 wireless/forms/bulk_import.py:71 -#: wireless/forms/bulk_import.py:110 wireless/forms/bulk_import.py:113 -#: wireless/forms/filtersets.py:59 wireless/forms/filtersets.py:93 +#: netbox/wireless/forms/bulk_edit.py:73 +#: netbox/wireless/forms/bulk_edit.py:120 +#: netbox/wireless/forms/bulk_import.py:68 +#: netbox/wireless/forms/bulk_import.py:71 +#: netbox/wireless/forms/bulk_import.py:110 +#: netbox/wireless/forms/bulk_import.py:113 +#: netbox/wireless/forms/filtersets.py:59 +#: netbox/wireless/forms/filtersets.py:93 msgid "Authentication cipher" msgstr "认证密码" -#: wireless/forms/bulk_edit.py:134 wireless/forms/bulk_import.py:116 -#: wireless/forms/bulk_import.py:119 wireless/forms/filtersets.py:106 +#: 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 "距离单位" -#: wireless/forms/bulk_import.py:52 +#: netbox/wireless/forms/bulk_import.py:52 msgid "Bridged VLAN" msgstr "桥接 VLAN" -#: wireless/forms/bulk_import.py:89 wireless/tables/wirelesslink.py:28 +#: netbox/wireless/forms/bulk_import.py:89 +#: netbox/wireless/tables/wirelesslink.py:28 msgid "Interface A" msgstr "网络接口A" -#: wireless/forms/bulk_import.py:93 wireless/tables/wirelesslink.py:37 +#: netbox/wireless/forms/bulk_import.py:93 +#: netbox/wireless/tables/wirelesslink.py:37 msgid "Interface B" msgstr "网络接口B" -#: wireless/forms/model_forms.py:161 +#: netbox/wireless/forms/model_forms.py:161 msgid "Side B" msgstr "B端" -#: wireless/models.py:31 +#: netbox/wireless/models.py:31 msgid "authentication cipher" msgstr "认证密码" -#: wireless/models.py:69 +#: netbox/wireless/models.py:69 msgid "wireless LAN group" msgstr "无线局域网组" -#: wireless/models.py:70 +#: netbox/wireless/models.py:70 msgid "wireless LAN groups" msgstr "无线局域网组" -#: wireless/models.py:116 +#: netbox/wireless/models.py:116 msgid "wireless LAN" msgstr "无线局域网" -#: wireless/models.py:144 +#: netbox/wireless/models.py:144 msgid "interface A" msgstr "接口 A" -#: wireless/models.py:151 +#: netbox/wireless/models.py:151 msgid "interface B" msgstr "接口 B" -#: wireless/models.py:165 +#: netbox/wireless/models.py:165 msgid "distance" msgstr "距离" -#: wireless/models.py:172 +#: netbox/wireless/models.py:172 msgid "distance unit" msgstr "距离单位" -#: wireless/models.py:219 +#: netbox/wireless/models.py:219 msgid "wireless link" msgstr "无线连接" -#: wireless/models.py:220 +#: netbox/wireless/models.py:220 msgid "wireless links" msgstr "无线连接" -#: wireless/models.py:236 +#: netbox/wireless/models.py:236 msgid "Must specify a unit when setting a wireless distance" msgstr "设置无线距离时必须指定单位" -#: wireless/models.py:242 wireless/models.py:248 +#: netbox/wireless/models.py:242 netbox/wireless/models.py:248 #, python-brace-format msgid "{type} is not a wireless interface." msgstr "{type} 不是无线接口。" -#: wireless/utils.py:16 +#: netbox/wireless/utils.py:16 #, python-brace-format msgid "Invalid channel value: {channel}" msgstr "通道值无效: {channel}" -#: wireless/utils.py:26 +#: netbox/wireless/utils.py:26 #, python-brace-format msgid "Invalid channel attribute: {name}" msgstr "通道属性无效: {name}" diff --git a/netbox/users/admin.py b/netbox/users/admin.py deleted file mode 100644 index 0fa7e0ca2..000000000 --- a/netbox/users/admin.py +++ /dev/null @@ -1,5 +0,0 @@ -from django.contrib import admin -from django.contrib.auth.models import Group as DjangoGroup - -# Prevent the stock Django Group model from appearing in the admin UI (if enabled) -admin.site.unregister(DjangoGroup) diff --git a/netbox/users/api/nested_serializers.py b/netbox/users/api/nested_serializers.py deleted file mode 100644 index 201e38901..000000000 --- a/netbox/users/api/nested_serializers.py +++ /dev/null @@ -1,53 +0,0 @@ -import warnings - -from drf_spectacular.utils import extend_schema_field -from rest_framework import serializers - -from core.models import ObjectType -from netbox.api.fields import ContentTypeField -from netbox.api.serializers import WritableNestedSerializer -from serializers_.nested import NestedGroupSerializer, NestedUserSerializer -from users.models import ObjectPermission, Token - -__all__ = [ - 'NestedGroupSerializer', - 'NestedObjectPermissionSerializer', - 'NestedTokenSerializer', - 'NestedUserSerializer', -] - -# TODO: Remove in v4.2 -warnings.warn( - "Dedicated nested serializers will be removed in NetBox v4.2. Use Serializer(nested=True) instead.", - DeprecationWarning -) - - -class NestedTokenSerializer(WritableNestedSerializer): - - class Meta: - model = Token - fields = ['id', 'url', 'display_url', 'display', 'key', 'write_enabled'] - - -class NestedObjectPermissionSerializer(WritableNestedSerializer): - object_types = ContentTypeField( - queryset=ObjectType.objects.all(), - many=True - ) - groups = serializers.SerializerMethodField(read_only=True) - users = serializers.SerializerMethodField(read_only=True) - - class Meta: - model = ObjectPermission - fields = [ - 'id', 'url', 'display_url', 'display', 'name', 'enabled', 'object_types', 'groups', 'users', 'actions' - ] - - @extend_schema_field(serializers.ListField) - def get_groups(self, obj): - return [g.name for g in obj.groups.all()] - - @extend_schema_field(serializers.ListField) - def get_users(self, obj): - return [u.username for u in obj.users.all()] diff --git a/netbox/users/migrations/0001_squashed_0011.py b/netbox/users/migrations/0001_squashed_0011.py index cad84201c..263604d34 100644 --- a/netbox/users/migrations/0001_squashed_0011.py +++ b/netbox/users/migrations/0001_squashed_0011.py @@ -8,7 +8,6 @@ import users.models class Migration(migrations.Migration): - initial = True dependencies = [ @@ -39,15 +38,33 @@ class Migration(migrations.Migration): ('password', models.CharField(max_length=128)), ('last_login', models.DateTimeField(blank=True, null=True)), ('is_superuser', models.BooleanField(default=False)), - ('username', models.CharField(error_messages={'unique': 'A user with that username already exists.'}, max_length=150, unique=True, validators=[django.contrib.auth.validators.UnicodeUsernameValidator()])), + ( + 'username', + models.CharField( + error_messages={'unique': 'A user with that username already exists.'}, + max_length=150, + unique=True, + validators=[django.contrib.auth.validators.UnicodeUsernameValidator()], + ), + ), ('first_name', models.CharField(blank=True, max_length=150)), ('last_name', models.CharField(blank=True, max_length=150)), ('email', models.EmailField(blank=True, max_length=254)), ('is_staff', models.BooleanField(default=False)), ('is_active', models.BooleanField(default=True)), ('date_joined', models.DateTimeField(default=django.utils.timezone.now)), - ('groups', models.ManyToManyField(blank=True, related_name='user_set', related_query_name='user', to='auth.group')), - ('user_permissions', models.ManyToManyField(blank=True, related_name='user_set', related_query_name='user', to='auth.permission')), + ( + 'groups', + models.ManyToManyField( + blank=True, related_name='user_set', related_query_name='user', to='auth.group' + ), + ), + ( + 'user_permissions', + models.ManyToManyField( + blank=True, related_name='user_set', related_query_name='user', to='auth.permission' + ), + ), ], options={ 'verbose_name': 'user', @@ -64,7 +81,12 @@ class Migration(migrations.Migration): fields=[ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False)), ('data', models.JSONField(default=dict)), - ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='config', to=settings.AUTH_USER_MODEL)), + ( + 'user', + models.OneToOneField( + on_delete=django.db.models.deletion.CASCADE, related_name='config', to=settings.AUTH_USER_MODEL + ), + ), ], options={ 'verbose_name': 'User Preferences', @@ -78,10 +100,20 @@ class Migration(migrations.Migration): ('id', models.BigAutoField(primary_key=True, serialize=False)), ('created', models.DateTimeField(auto_now_add=True)), ('expires', models.DateTimeField(blank=True, null=True)), - ('key', models.CharField(max_length=40, unique=True, validators=[django.core.validators.MinLengthValidator(40)])), + ( + 'key', + models.CharField( + max_length=40, unique=True, validators=[django.core.validators.MinLengthValidator(40)] + ), + ), ('write_enabled', models.BooleanField(default=True)), ('description', models.CharField(blank=True, max_length=200)), - ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='tokens', to=settings.AUTH_USER_MODEL)), + ( + 'user', + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, related_name='tokens', to=settings.AUTH_USER_MODEL + ), + ), ], ), migrations.CreateModel( @@ -91,11 +123,37 @@ class Migration(migrations.Migration): ('name', models.CharField(max_length=100)), ('description', models.CharField(blank=True, max_length=200)), ('enabled', models.BooleanField(default=True)), - ('actions', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=30), size=None)), + ( + 'actions', + django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=30), size=None), + ), ('constraints', models.JSONField(blank=True, null=True)), ('groups', models.ManyToManyField(blank=True, related_name='object_permissions', to='auth.Group')), - ('object_types', models.ManyToManyField(limit_choices_to=models.Q(models.Q(models.Q(('app_label__in', ['account', 'admin', 'auth', 'contenttypes', 'sessions', 'taggit', 'users']), _negated=True), models.Q(('app_label', 'auth'), ('model__in', ['group', 'user'])), models.Q(('app_label', 'users'), ('model__in', ['objectpermission', 'token'])), _connector='OR')), related_name='object_permissions', to='contenttypes.ContentType')), - ('users', models.ManyToManyField(blank=True, related_name='object_permissions', to=settings.AUTH_USER_MODEL)), + ( + 'object_types', + models.ManyToManyField( + limit_choices_to=models.Q( + models.Q( + models.Q( + ( + 'app_label__in', + ['account', 'admin', 'auth', 'contenttypes', 'sessions', 'taggit', 'users'], + ), + _negated=True, + ), + models.Q(('app_label', 'auth'), ('model__in', ['group', 'user'])), + models.Q(('app_label', 'users'), ('model__in', ['objectpermission', 'token'])), + _connector='OR', + ) + ), + related_name='object_permissions', + to='contenttypes.ContentType', + ), + ), + ( + 'users', + models.ManyToManyField(blank=True, related_name='object_permissions', to=settings.AUTH_USER_MODEL), + ), ], options={ 'verbose_name': 'permission', diff --git a/netbox/users/migrations/0002_squashed_0004.py b/netbox/users/migrations/0002_squashed_0004.py index 078721c48..275d7a7a9 100644 --- a/netbox/users/migrations/0002_squashed_0004.py +++ b/netbox/users/migrations/0002_squashed_0004.py @@ -5,11 +5,10 @@ import ipam.fields class Migration(migrations.Migration): - replaces = [ ('users', '0002_standardize_id_fields'), ('users', '0003_token_allowed_ips_last_used'), - ('users', '0004_netboxgroup_netboxuser') + ('users', '0004_netboxgroup_netboxuser'), ] dependencies = [ @@ -36,7 +35,9 @@ class Migration(migrations.Migration): migrations.AddField( model_name='token', name='allowed_ips', - field=django.contrib.postgres.fields.ArrayField(base_field=ipam.fields.IPNetworkField(), blank=True, null=True, size=None), + field=django.contrib.postgres.fields.ArrayField( + base_field=ipam.fields.IPNetworkField(), blank=True, null=True, size=None + ), ), migrations.AddField( model_name='token', @@ -45,8 +46,7 @@ class Migration(migrations.Migration): ), migrations.CreateModel( name='NetBoxGroup', - fields=[ - ], + fields=[], options={ 'verbose_name': 'Group', 'proxy': True, diff --git a/netbox/users/migrations/0005_alter_user_table.py b/netbox/users/migrations/0005_alter_user_table.py index 1163da0ae..2e9f699b3 100644 --- a/netbox/users/migrations/0005_alter_user_table.py +++ b/netbox/users/migrations/0005_alter_user_table.py @@ -19,7 +19,6 @@ def update_content_types(apps, schema_editor): class Migration(migrations.Migration): - dependencies = [ ('users', '0002_squashed_0004'), ('extras', '0113_customfield_rename_object_type'), @@ -33,24 +32,17 @@ class Migration(migrations.Migration): name='user', table=None, ), - # Convert the `id` column to a 64-bit integer (BigAutoField is implied by DEFAULT_AUTO_FIELD) - migrations.RunSQL("ALTER TABLE users_user ALTER COLUMN id TYPE bigint"), - + migrations.RunSQL('ALTER TABLE users_user ALTER COLUMN id TYPE bigint'), # Rename auth_user_* sequences - migrations.RunSQL("ALTER TABLE auth_user_groups_id_seq RENAME TO users_user_groups_id_seq"), - migrations.RunSQL("ALTER TABLE auth_user_id_seq RENAME TO users_user_id_seq"), - migrations.RunSQL("ALTER TABLE auth_user_user_permissions_id_seq RENAME TO users_user_user_permissions_id_seq"), - + migrations.RunSQL('ALTER TABLE auth_user_groups_id_seq RENAME TO users_user_groups_id_seq'), + migrations.RunSQL('ALTER TABLE auth_user_id_seq RENAME TO users_user_id_seq'), + migrations.RunSQL('ALTER TABLE auth_user_user_permissions_id_seq RENAME TO users_user_user_permissions_id_seq'), # Rename auth_user_* indexes - migrations.RunSQL("ALTER INDEX auth_user_pkey RENAME TO users_user_pkey"), + migrations.RunSQL('ALTER INDEX auth_user_pkey RENAME TO users_user_pkey'), # Hash is deterministic; generated via schema_editor._create_index_name() - migrations.RunSQL("ALTER INDEX auth_user_username_6821ab7c_like RENAME TO users_user_username_06e46fe6_like"), - migrations.RunSQL("ALTER INDEX auth_user_username_key RENAME TO users_user_username_key"), - + migrations.RunSQL('ALTER INDEX auth_user_username_6821ab7c_like RENAME TO users_user_username_06e46fe6_like'), + migrations.RunSQL('ALTER INDEX auth_user_username_key RENAME TO users_user_username_key'), # Update ContentTypes - migrations.RunPython( - code=update_content_types, - reverse_code=migrations.RunPython.noop - ), + migrations.RunPython(code=update_content_types, reverse_code=migrations.RunPython.noop), ] diff --git a/netbox/users/migrations/0006_custom_group_model.py b/netbox/users/migrations/0006_custom_group_model.py index f958d242a..f70c1d58d 100644 --- a/netbox/users/migrations/0006_custom_group_model.py +++ b/netbox/users/migrations/0006_custom_group_model.py @@ -16,7 +16,6 @@ def update_custom_fields(apps, schema_editor): class Migration(migrations.Migration): - dependencies = [ ('users', '0005_alter_user_table'), ] @@ -29,7 +28,12 @@ class Migration(migrations.Migration): ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False)), ('name', models.CharField(max_length=150, unique=True)), ('description', models.CharField(blank=True, max_length=200)), - ('permissions', models.ManyToManyField(blank=True, related_name='groups', related_query_name='group', to='auth.permission')), + ( + 'permissions', + models.ManyToManyField( + blank=True, related_name='groups', related_query_name='group', to='auth.permission' + ), + ), ], options={ 'ordering': ('name',), @@ -40,17 +44,10 @@ class Migration(migrations.Migration): ('objects', users.models.GroupManager()), ], ), - # Copy existing groups from the old table into the new one - migrations.RunSQL( - "INSERT INTO users_group (SELECT id, name, '' AS description FROM auth_group)" - ), - + migrations.RunSQL("INSERT INTO users_group (SELECT id, name, '' AS description FROM auth_group)"), # Update the sequence for group ID values - migrations.RunSQL( - "SELECT setval('users_group_id_seq', (SELECT MAX(id) FROM users_group))" - ), - + migrations.RunSQL("SELECT setval('users_group_id_seq', (SELECT MAX(id) FROM users_group))"), # Update the "groups" M2M fields on User & ObjectPermission migrations.AlterField( model_name='user', @@ -62,23 +59,12 @@ class Migration(migrations.Migration): name='groups', field=models.ManyToManyField(blank=True, related_name='object_permissions', to='users.group'), ), - # Delete any lingering group assignments for legacy permissions (from before NetBox v2.9) - migrations.RunSQL( - "DELETE from auth_group_permissions" - ), - + migrations.RunSQL('DELETE from auth_group_permissions'), # Delete groups from the old table - migrations.RunSQL( - "DELETE from auth_group" - ), - + migrations.RunSQL('DELETE from auth_group'), # Update custom fields - migrations.RunPython( - code=update_custom_fields, - reverse_code=migrations.RunPython.noop - ), - + migrations.RunPython(code=update_custom_fields, reverse_code=migrations.RunPython.noop), # Delete the proxy model migrations.DeleteModel( name='NetBoxGroup', diff --git a/netbox/users/migrations/0007_objectpermission_update_object_types.py b/netbox/users/migrations/0007_objectpermission_update_object_types.py index d3018a602..598b00b92 100644 --- a/netbox/users/migrations/0007_objectpermission_update_object_types.py +++ b/netbox/users/migrations/0007_objectpermission_update_object_types.py @@ -4,7 +4,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('core', '0010_gfk_indexes'), ('users', '0006_custom_group_model'), @@ -14,6 +13,23 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='objectpermission', name='object_types', - field=models.ManyToManyField(limit_choices_to=models.Q(models.Q(models.Q(('app_label__in', ['account', 'admin', 'auth', 'contenttypes', 'sessions', 'taggit', 'users']), _negated=True), models.Q(('app_label', 'auth'), ('model__in', ['group', 'user'])), models.Q(('app_label', 'users'), ('model__in', ['objectpermission', 'token'])), _connector='OR')), related_name='object_permissions', to='core.objecttype'), + field=models.ManyToManyField( + limit_choices_to=models.Q( + models.Q( + models.Q( + ( + 'app_label__in', + ['account', 'admin', 'auth', 'contenttypes', 'sessions', 'taggit', 'users'], + ), + _negated=True, + ), + models.Q(('app_label', 'auth'), ('model__in', ['group', 'user'])), + models.Q(('app_label', 'users'), ('model__in', ['objectpermission', 'token'])), + _connector='OR', + ) + ), + related_name='object_permissions', + to='core.objecttype', + ), ), ] diff --git a/netbox/users/migrations/0008_flip_objectpermission_assignments.py b/netbox/users/migrations/0008_flip_objectpermission_assignments.py index c61c8b124..11dea5819 100644 --- a/netbox/users/migrations/0008_flip_objectpermission_assignments.py +++ b/netbox/users/migrations/0008_flip_objectpermission_assignments.py @@ -2,7 +2,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('users', '0007_objectpermission_update_object_types'), ] @@ -24,52 +23,47 @@ class Migration(migrations.Migration): database_operations=[ # Rename table migrations.RunSQL( - "ALTER TABLE users_objectpermission_groups" - " RENAME TO users_group_object_permissions" + 'ALTER TABLE users_objectpermission_groups' ' RENAME TO users_group_object_permissions' ), migrations.RunSQL( - "ALTER TABLE users_objectpermission_groups_id_seq" - " RENAME TO users_group_object_permissions_id_seq" + 'ALTER TABLE users_objectpermission_groups_id_seq' + ' RENAME TO users_group_object_permissions_id_seq' ), - # Rename constraints migrations.RunSQL( - "ALTER TABLE users_group_object_permissions RENAME CONSTRAINT " - "users_objectpermissi_group_id_fb7ba6e0_fk_users_gro TO " - "users_group_object_p_group_id_90dd183a_fk_users_gro" + 'ALTER TABLE users_group_object_permissions RENAME CONSTRAINT ' + 'users_objectpermissi_group_id_fb7ba6e0_fk_users_gro TO ' + 'users_group_object_p_group_id_90dd183a_fk_users_gro' ), # Fix for #15698: Drop & recreate constraint which may not exist migrations.RunSQL( - "ALTER TABLE users_group_object_permissions DROP CONSTRAINT IF EXISTS " - "users_objectpermissi_objectpermission_id_2f7cc117_fk_users_obj" + 'ALTER TABLE users_group_object_permissions DROP CONSTRAINT IF EXISTS ' + 'users_objectpermissi_objectpermission_id_2f7cc117_fk_users_obj' ), migrations.RunSQL( - "ALTER TABLE users_group_object_permissions ADD CONSTRAINT " - "users_group_object_p_objectpermission_id_dd489dc4_fk_users_obj " - "FOREIGN KEY (objectpermission_id) REFERENCES users_objectpermission(id) " - "DEFERRABLE INITIALLY DEFERRED" + 'ALTER TABLE users_group_object_permissions ADD CONSTRAINT ' + 'users_group_object_p_objectpermission_id_dd489dc4_fk_users_obj ' + 'FOREIGN KEY (objectpermission_id) REFERENCES users_objectpermission(id) ' + 'DEFERRABLE INITIALLY DEFERRED' ), - # Rename indexes migrations.RunSQL( - "ALTER INDEX users_objectpermission_groups_pkey " - " RENAME TO users_group_object_permissions_pkey" + 'ALTER INDEX users_objectpermission_groups_pkey ' ' RENAME TO users_group_object_permissions_pkey' ), migrations.RunSQL( - "ALTER INDEX users_objectpermission_g_objectpermission_id_grou_3b62a39c_uniq " - " RENAME TO users_group_object_permi_group_id_objectpermissio_db1f8cbe_uniq" + 'ALTER INDEX users_objectpermission_g_objectpermission_id_grou_3b62a39c_uniq ' + ' RENAME TO users_group_object_permi_group_id_objectpermissio_db1f8cbe_uniq' ), migrations.RunSQL( - "ALTER INDEX users_objectpermission_groups_group_id_fb7ba6e0" - " RENAME TO users_group_object_permissions_group_id_90dd183a" + 'ALTER INDEX users_objectpermission_groups_group_id_fb7ba6e0' + ' RENAME TO users_group_object_permissions_group_id_90dd183a' ), migrations.RunSQL( - "ALTER INDEX users_objectpermission_groups_objectpermission_id_2f7cc117" - " RENAME TO users_group_object_permissions_objectpermission_id_dd489dc4" + 'ALTER INDEX users_objectpermission_groups_objectpermission_id_2f7cc117' + ' RENAME TO users_group_object_permissions_objectpermission_id_dd489dc4' ), - ] + ], ), - # Flip M2M assignments for ObjectPermission to Users migrations.SeparateDatabaseAndState( state_operations=[ @@ -86,49 +80,44 @@ class Migration(migrations.Migration): database_operations=[ # Rename table migrations.RunSQL( - "ALTER TABLE users_objectpermission_users" - " RENAME TO users_user_object_permissions" + 'ALTER TABLE users_objectpermission_users' ' RENAME TO users_user_object_permissions' ), migrations.RunSQL( - "ALTER TABLE users_objectpermission_users_id_seq" - " RENAME TO users_user_object_permissions_id_seq" + 'ALTER TABLE users_objectpermission_users_id_seq' ' RENAME TO users_user_object_permissions_id_seq' ), - # Rename constraints migrations.RunSQL( - "ALTER TABLE users_user_object_permissions RENAME CONSTRAINT " - "users_objectpermission_users_user_id_16c0905d_fk_auth_user_id TO " - "users_user_object_permissions_user_id_9d647aac_fk_users_user_id" + 'ALTER TABLE users_user_object_permissions RENAME CONSTRAINT ' + 'users_objectpermission_users_user_id_16c0905d_fk_auth_user_id TO ' + 'users_user_object_permissions_user_id_9d647aac_fk_users_user_id' ), # Fix for #15698: Drop & recreate constraint which may not exist migrations.RunSQL( - "ALTER TABLE users_user_object_permissions DROP CONSTRAINT IF EXISTS " - "users_objectpermissi_objectpermission_id_78a9c2e6_fk_users_obj" + 'ALTER TABLE users_user_object_permissions DROP CONSTRAINT IF EXISTS ' + 'users_objectpermissi_objectpermission_id_78a9c2e6_fk_users_obj' ), migrations.RunSQL( - "ALTER TABLE users_user_object_permissions ADD CONSTRAINT " - "users_user_object_pe_objectpermission_id_29b431b4_fk_users_obj " - "FOREIGN KEY (objectpermission_id) REFERENCES users_objectpermission(id) " - "DEFERRABLE INITIALLY DEFERRED" + 'ALTER TABLE users_user_object_permissions ADD CONSTRAINT ' + 'users_user_object_pe_objectpermission_id_29b431b4_fk_users_obj ' + 'FOREIGN KEY (objectpermission_id) REFERENCES users_objectpermission(id) ' + 'DEFERRABLE INITIALLY DEFERRED' ), - # Rename indexes migrations.RunSQL( - "ALTER INDEX users_objectpermission_users_pkey " - " RENAME TO users_user_object_permissions_pkey" + 'ALTER INDEX users_objectpermission_users_pkey ' ' RENAME TO users_user_object_permissions_pkey' ), migrations.RunSQL( - "ALTER INDEX users_objectpermission_u_objectpermission_id_user_3a7db108_uniq " - " RENAME TO users_user_object_permis_user_id_objectpermission_0a98550e_uniq" + 'ALTER INDEX users_objectpermission_u_objectpermission_id_user_3a7db108_uniq ' + ' RENAME TO users_user_object_permis_user_id_objectpermission_0a98550e_uniq' ), migrations.RunSQL( - "ALTER INDEX users_objectpermission_users_user_id_16c0905d" - " RENAME TO users_user_object_permissions_user_id_9d647aac" + 'ALTER INDEX users_objectpermission_users_user_id_16c0905d' + ' RENAME TO users_user_object_permissions_user_id_9d647aac' ), migrations.RunSQL( - "ALTER INDEX users_objectpermission_users_objectpermission_id_78a9c2e6" - " RENAME TO users_user_object_permissions_objectpermission_id_29b431b4" + 'ALTER INDEX users_objectpermission_users_objectpermission_id_78a9c2e6' + ' RENAME TO users_user_object_permissions_objectpermission_id_29b431b4' ), - ] + ], ), ] diff --git a/netbox/users/migrations/0009_update_group_perms.py b/netbox/users/migrations/0009_update_group_perms.py index f3b197492..7698fd1e7 100644 --- a/netbox/users/migrations/0009_update_group_perms.py +++ b/netbox/users/migrations/0009_update_group_perms.py @@ -18,17 +18,13 @@ def update_content_types(apps, schema_editor): class Migration(migrations.Migration): - dependencies = [ ('users', '0008_flip_objectpermission_assignments'), ] operations = [ # Update ContentTypes - migrations.RunPython( - code=update_content_types, - reverse_code=migrations.RunPython.noop - ), + migrations.RunPython(code=update_content_types, reverse_code=migrations.RunPython.noop), migrations.AlterField( model_name='objectpermission', name='object_types', diff --git a/netbox/users/tests/test_filtersets.py b/netbox/users/tests/test_filtersets.py index fdf25d970..8b683b346 100644 --- a/netbox/users/tests/test_filtersets.py +++ b/netbox/users/tests/test_filtersets.py @@ -286,9 +286,15 @@ class TokenTestCase(TestCase, BaseFilterSetTests): future_date = make_aware(datetime.datetime(3000, 1, 1)) past_date = make_aware(datetime.datetime(2000, 1, 1)) tokens = ( - Token(user=users[0], key=Token.generate_key(), expires=future_date, write_enabled=True, description='foobar1'), - Token(user=users[1], key=Token.generate_key(), expires=future_date, write_enabled=True, description='foobar2'), - Token(user=users[2], key=Token.generate_key(), expires=past_date, write_enabled=False), + Token( + user=users[0], key=Token.generate_key(), expires=future_date, write_enabled=True, description='foobar1' + ), + Token( + user=users[1], key=Token.generate_key(), expires=future_date, write_enabled=True, description='foobar2' + ), + Token( + user=users[2], key=Token.generate_key(), expires=past_date, write_enabled=False + ), ) Token.objects.bulk_create(tokens) diff --git a/netbox/users/tests/test_views.py b/netbox/users/tests/test_views.py index 8386364dd..8226a8be9 100644 --- a/netbox/users/tests/test_views.py +++ b/netbox/users/tests/test_views.py @@ -23,11 +23,16 @@ class UserTestCase( @classmethod def setUpTestData(cls): - users = ( - User(username='username1', first_name='first1', last_name='last1', email='user1@foo.com', password='pass1xxx'), - User(username='username2', first_name='first2', last_name='last2', email='user2@foo.com', password='pass2xxx'), - User(username='username3', first_name='first3', last_name='last3', email='user3@foo.com', password='pass3xxx'), + User( + username='username1', first_name='first1', last_name='last1', email='user1@foo.com', password='pass1xxx' + ), + User( + username='username2', first_name='first2', last_name='last2', email='user2@foo.com', password='pass2xxx' + ), + User( + username='username3', first_name='first3', last_name='last3', email='user3@foo.com', password='pass3xxx' + ), ) User.objects.bulk_create(users) diff --git a/netbox/users/urls.py b/netbox/users/urls.py index 0540eae1f..83f120702 100644 --- a/netbox/users/urls.py +++ b/netbox/users/urls.py @@ -1,40 +1,21 @@ from django.urls import include, path from utilities.urls import get_model_urls -from . import views +from . import views # noqa F401 app_name = 'users' urlpatterns = [ - # Tokens - path('tokens/', views.TokenListView.as_view(), name='token_list'), - path('tokens/add/', views.TokenEditView.as_view(), name='token_add'), - path('tokens/import/', views.TokenBulkImportView.as_view(), name='token_import'), - path('tokens/edit/', views.TokenBulkEditView.as_view(), name='token_bulk_edit'), - path('tokens/delete/', views.TokenBulkDeleteView.as_view(), name='token_bulk_delete'), + path('tokens/', include(get_model_urls('users', 'token', detail=False))), path('tokens//', include(get_model_urls('users', 'token'))), - # Users - path('users/', views.UserListView.as_view(), name='user_list'), - path('users/add/', views.UserEditView.as_view(), name='user_add'), - path('users/edit/', views.UserBulkEditView.as_view(), name='user_bulk_edit'), - path('users/import/', views.UserBulkImportView.as_view(), name='user_import'), - path('users/delete/', views.UserBulkDeleteView.as_view(), name='user_bulk_delete'), + path('users/', include(get_model_urls('users', 'user', detail=False))), path('users//', include(get_model_urls('users', 'user'))), - # Groups - path('groups/', views.GroupListView.as_view(), name='group_list'), - path('groups/add/', views.GroupEditView.as_view(), name='group_add'), - path('groups/edit/', views.GroupBulkEditView.as_view(), name='group_bulk_edit'), - path('groups/import/', views.GroupBulkImportView.as_view(), name='group_import'), - path('groups/delete/', views.GroupBulkDeleteView.as_view(), name='group_bulk_delete'), + path('groups/', include(get_model_urls('users', 'group', detail=False))), path('groups//', include(get_model_urls('users', 'group'))), - # Permissions - path('permissions/', views.ObjectPermissionListView.as_view(), name='objectpermission_list'), - path('permissions/add/', views.ObjectPermissionEditView.as_view(), name='objectpermission_add'), - path('permissions/edit/', views.ObjectPermissionBulkEditView.as_view(), name='objectpermission_bulk_edit'), - path('permissions/delete/', views.ObjectPermissionBulkDeleteView.as_view(), name='objectpermission_bulk_delete'), + path('permissions/', include(get_model_urls('users', 'objectpermission', detail=False))), path('permissions//', include(get_model_urls('users', 'objectpermission'))), ] diff --git a/netbox/users/views.py b/netbox/users/views.py index b2f9a8d04..ca928e582 100644 --- a/netbox/users/views.py +++ b/netbox/users/views.py @@ -12,6 +12,7 @@ from .models import Group, User, ObjectPermission, Token # Tokens # +@register_model_view(Token, 'list', path='', detail=False) class TokenListView(generic.ObjectListView): queryset = Token.objects.all() filterset = filtersets.TokenFilterSet @@ -24,6 +25,7 @@ class TokenView(generic.ObjectView): queryset = Token.objects.all() +@register_model_view(Token, 'add', detail=False) @register_model_view(Token, 'edit') class TokenEditView(generic.ObjectEditView): queryset = Token.objects.all() @@ -36,17 +38,20 @@ class TokenDeleteView(generic.ObjectDeleteView): queryset = Token.objects.all() +@register_model_view(Token, 'bulk_import', detail=False) class TokenBulkImportView(generic.BulkImportView): queryset = Token.objects.all() model_form = forms.TokenImportForm +@register_model_view(Token, 'bulk_edit', path='edit', detail=False) class TokenBulkEditView(generic.BulkEditView): queryset = Token.objects.all() table = tables.TokenTable form = forms.TokenBulkEditForm +@register_model_view(Token, 'bulk_delete', path='delete', detail=False) class TokenBulkDeleteView(generic.BulkDeleteView): queryset = Token.objects.all() table = tables.TokenTable @@ -56,6 +61,7 @@ class TokenBulkDeleteView(generic.BulkDeleteView): # Users # +@register_model_view(User, 'list', path='', detail=False) class UserListView(generic.ObjectListView): queryset = User.objects.all() filterset = filtersets.UserFilterSet @@ -77,6 +83,7 @@ class UserView(generic.ObjectView): } +@register_model_view(User, 'add', detail=False) @register_model_view(User, 'edit') class UserEditView(generic.ObjectEditView): queryset = User.objects.all() @@ -88,6 +95,13 @@ class UserDeleteView(generic.ObjectDeleteView): queryset = User.objects.all() +@register_model_view(User, 'bulk_import', detail=False) +class UserBulkImportView(generic.BulkImportView): + queryset = User.objects.all() + model_form = forms.UserImportForm + + +@register_model_view(User, 'bulk_edit', path='edit', detail=False) class UserBulkEditView(generic.BulkEditView): queryset = User.objects.all() filterset = filtersets.UserFilterSet @@ -95,11 +109,7 @@ class UserBulkEditView(generic.BulkEditView): form = forms.UserBulkEditForm -class UserBulkImportView(generic.BulkImportView): - queryset = User.objects.all() - model_form = forms.UserImportForm - - +@register_model_view(User, 'bulk_delete', path='delete', detail=False) class UserBulkDeleteView(generic.BulkDeleteView): queryset = User.objects.all() filterset = filtersets.UserFilterSet @@ -110,6 +120,7 @@ class UserBulkDeleteView(generic.BulkDeleteView): # Groups # +@register_model_view(Group, 'list', path='', detail=False) class GroupListView(generic.ObjectListView): queryset = Group.objects.annotate(users_count=Count('user')).order_by('name') filterset = filtersets.GroupFilterSet @@ -123,6 +134,7 @@ class GroupView(generic.ObjectView): template_name = 'users/group.html' +@register_model_view(Group, 'add', detail=False) @register_model_view(Group, 'edit') class GroupEditView(generic.ObjectEditView): queryset = Group.objects.all() @@ -134,11 +146,13 @@ class GroupDeleteView(generic.ObjectDeleteView): queryset = Group.objects.all() +@register_model_view(Group, 'bulk_import', detail=False) class GroupBulkImportView(generic.BulkImportView): queryset = Group.objects.all() model_form = forms.GroupImportForm +@register_model_view(Group, 'bulk_edit', path='edit', detail=False) class GroupBulkEditView(generic.BulkEditView): queryset = Group.objects.all() filterset = filtersets.GroupFilterSet @@ -146,6 +160,7 @@ class GroupBulkEditView(generic.BulkEditView): form = forms.GroupBulkEditForm +@register_model_view(Group, 'bulk_delete', path='delete', detail=False) class GroupBulkDeleteView(generic.BulkDeleteView): queryset = Group.objects.annotate(users_count=Count('user')).order_by('name') filterset = filtersets.GroupFilterSet @@ -156,6 +171,7 @@ class GroupBulkDeleteView(generic.BulkDeleteView): # ObjectPermissions # +@register_model_view(ObjectPermission, 'list', path='', detail=False) class ObjectPermissionListView(generic.ObjectListView): queryset = ObjectPermission.objects.all() filterset = filtersets.ObjectPermissionFilterSet @@ -169,6 +185,7 @@ class ObjectPermissionView(generic.ObjectView): template_name = 'users/objectpermission.html' +@register_model_view(ObjectPermission, 'add', detail=False) @register_model_view(ObjectPermission, 'edit') class ObjectPermissionEditView(generic.ObjectEditView): queryset = ObjectPermission.objects.all() @@ -180,6 +197,7 @@ class ObjectPermissionDeleteView(generic.ObjectDeleteView): queryset = ObjectPermission.objects.all() +@register_model_view(ObjectPermission, 'bulk_edit', path='edit', detail=False) class ObjectPermissionBulkEditView(generic.BulkEditView): queryset = ObjectPermission.objects.all() filterset = filtersets.ObjectPermissionFilterSet @@ -187,6 +205,7 @@ class ObjectPermissionBulkEditView(generic.BulkEditView): form = forms.ObjectPermissionBulkEditForm +@register_model_view(ObjectPermission, 'bulk_delete', path='delete', detail=False) class ObjectPermissionBulkDeleteView(generic.BulkDeleteView): queryset = ObjectPermission.objects.all() filterset = filtersets.ObjectPermissionFilterSet diff --git a/netbox/utilities/api.py b/netbox/utilities/api.py index 11b914811..6793c0526 100644 --- a/netbox/utilities/api.py +++ b/netbox/utilities/api.py @@ -129,7 +129,7 @@ def get_annotations_for_serializer(serializer_class, fields_to_include=None): for field_name, field in serializer_class._declared_fields.items(): if field_name in fields_to_include and type(field) is RelatedObjectCountField: - related_field = model._meta.get_field(field.relation).field + related_field = getattr(model, field.relation).field annotations[field_name] = count_related(related_field.model, related_field.name) return annotations diff --git a/netbox/utilities/conversion.py b/netbox/utilities/conversion.py index cd75c3c17..6ce32212a 100644 --- a/netbox/utilities/conversion.py +++ b/netbox/utilities/conversion.py @@ -2,7 +2,8 @@ from decimal import Decimal from django.utils.translation import gettext as _ -from dcim.choices import CableLengthUnitChoices, WeightUnitChoices +from dcim.choices import CableLengthUnitChoices +from netbox.choices import WeightUnitChoices __all__ = ( 'to_grams', @@ -10,9 +11,9 @@ __all__ = ( ) -def to_grams(weight, unit): +def to_grams(weight, unit) -> int: """ - Convert the given weight to kilograms. + Convert the given weight to integer grams. """ try: if weight < 0: @@ -21,13 +22,13 @@ def to_grams(weight, unit): raise TypeError(_("Invalid value '{weight}' for weight (must be a number)").format(weight=weight)) if unit == WeightUnitChoices.UNIT_KILOGRAM: - return weight * 1000 + return int(weight * 1000) if unit == WeightUnitChoices.UNIT_GRAM: - return weight + return int(weight) if unit == WeightUnitChoices.UNIT_POUND: - return weight * Decimal(453.592) + return int(weight * Decimal(453.592)) if unit == WeightUnitChoices.UNIT_OUNCE: - return weight * Decimal(28.3495) + return int(weight * Decimal(28.3495)) raise ValueError( _("Unknown unit {unit}. Must be one of the following: {valid_units}").format( unit=unit, diff --git a/netbox/utilities/error_handlers.py b/netbox/utilities/error_handlers.py index 5d2a46424..397098ded 100644 --- a/netbox/utilities/error_handlers.py +++ b/netbox/utilities/error_handlers.py @@ -49,7 +49,7 @@ def handle_rest_api_exception(request, *args, **kwargs): """ Handle exceptions and return a useful error message for REST API requests. """ - type_, error, traceback = sys.exc_info() + type_, error = sys.exc_info()[:2] data = { 'error': str(error), 'exception': type_.__name__, diff --git a/netbox/utilities/fields.py b/netbox/utilities/fields.py index ee71223cb..1d16a1d3f 100644 --- a/netbox/utilities/fields.py +++ b/netbox/utilities/fields.py @@ -5,7 +5,6 @@ from django.db import models from django.utils.safestring import mark_safe from django.utils.translation import gettext_lazy as _ -from utilities.ordering import naturalize from .forms.widgets import ColorSelect from .validators import ColorValidator @@ -40,7 +39,7 @@ class NaturalOrderingField(models.CharField): """ description = "Stores a representation of its target field suitable for natural ordering" - def __init__(self, target_field, naturalize_function=naturalize, *args, **kwargs): + def __init__(self, target_field, naturalize_function, *args, **kwargs): self.target_field = target_field self.naturalize_function = naturalize_function super().__init__(*args, **kwargs) diff --git a/netbox/utilities/forms/fields/dynamic.py b/netbox/utilities/forms/fields/dynamic.py index 6666c0e4d..793494b4b 100644 --- a/netbox/utilities/forms/fields/dynamic.py +++ b/netbox/utilities/forms/fields/dynamic.py @@ -2,7 +2,7 @@ import django_filters from django import forms from django.conf import settings from django.forms import BoundField -from django.urls import reverse +from django.urls import reverse, reverse_lazy from utilities.forms import widgets from utilities.views import get_viewname @@ -66,6 +66,10 @@ class DynamicModelChoiceMixin: choice (DEPRECATED: pass `context={'disabled': '$fieldname'}` instead) context: A mapping of